Program 4, 2017: bringing it all together

Due: by final exam time:
  • For 461: Monday, December 11th 8am
  • For 561: Wednesday, December 13th 1pm

Goal: In this assignment you will apply what you've learned of basic WebGL and GLSL to build a simple game.

Submission: Submit your assignment using this Google Form.

The main components of this programming assignment are:
  • 10% Part 0: properly turned in program (new requirements!)
  • 15% Part 1: display the field and sky
  • 25% Part 2: display and animate descending missiles
  • 25% Part 3: display and animate ascending antiballistic missiles
  • 25% Part 4: add interaction with descending missiles 
  • Participation credit: Receive participation credit (outside of this assignment) for posting your resulting imagery and video, good or bad, on the class forum!

Our suggested game is a 3D version of Missile Command. If you are not familiar with the game, you can play it online herehere or here, view some historic gameplay here, and find more information about the game at its Wikipedia entry here. There are also many other sources online.

If you would rather implement a different game, you may do so, providing you obtain instructor's approval before you start. To obtain that approval, send an email to Prof. Watson (and copy our TA) with a short description of your proposed game and begin a dialog. Small teams are also acceptable, but the scope of the project must increase to match. Again, obtain approval from your instructor.

We will also have one or more collaborative projects with students in other departments. You may find descriptions of those here. The number of students permitted to work on these projects is limited, so act quickly if they interest you.

Unlike previous programs, your game is not required to load specific assets (models, textures or lighting). You are free to hard-code paths to the assets your game requires.

You may use any 3rd party game or graphics libraries you find, including three.js, to earn 90% of the assignment credit. For full credit, use only WebGL. You may not use code from any implementation of Missile Command you find online.

Part 0: Properly turned in assignment
Remember that 10% of your assignment grade is for correctly submitting your work! For more information about how to correctly submit, see this page on the class website. Since we encourage variation in your games, make sure to include a readme file.

For this assignment only, you can also earn 2% extra credit by allowing us to make your assignment public, and providing us with some extra material to aid us in that. We will pick a few of the best assignments and publish them on our course website. If you wish to allow us, please also deliver:
  • a description: your game in four sentences or less
  • a thumbnail: a 100x100 image representing your game.
  • a screencast: a video walking us through your game within a few minutes. We suggest using YouTube itself to capture the video, downloading the video, and then uploading it for turnin.

Assignment material is due online by the time of your final. You must also demo your game in class during the final. In exceptional circumstances, earlier demonstrations may be arranged. Late demos are not possible. Late online turn in of assignments will...
  • be accepted through December 13 in 461. They will lose 3%.
  • not be accepted in 561.

Part 1: Display the field and sky
Create and render the models needed for the game. You should display a terrain, cities, and missile batteries. Models should be 3D, though the projections may be orthogonal. Fancy modeling is not necessary; cubes and spheres are enough. No motion is required yet.

Part 2: Display and animate descending missiles
Show missiles descending toward cities, terrain and batteries. They need not produce cool explosions, nor even destroy cities or batteries when they hit them.

Part 3: Display and animate ascending missiles
Show antiballistic missiles ascending from batteries toward descending missiles, detonating wherever the user clicks. They need not produce cool explosions, nor even destroy descending missiles when they hit them.

Part 4: Add interaction with descending missiles
When ascending missiles hit descending missiles, both are destroyed. When descending missiles hit cities or batteries, they destroy them.

Extra credit opportunities include the following:
  • 1% Split descending missiles every so often.
  • 2% Animate missile-missile and missile-city/battery explosions.
  • 2% Add periodic spaceships flying through as unusual targets players can shoot
  • 2% Track and display score. You can choose any scoring scale you want.
  • 2% When all descending missiles have been exploded or landed, a new level appears.
  • 2% Sound and music. On certain game events, e.g. game start, missile firing, explosions,  etc. play a sound effect.