Program 5 2019: putting it all together — Bezerk!

Due: by final exam time:
  • For 461: Tuesday, December 10th 8am
  • For 561: Thursday, December 12th 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, and demo your assignment in class during the final exam period.

The main components of this programming assignment are:
  • 10% Part 0: properly turned in program (new requirements!)
  • 15% Part 1: display the playing field
  • 25% Part 2: display and animate player
  • 25% Part 3: display and animate robots
  • 25% Part 4: add shooting interactions
  • 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 Bezerk. If you are not familiar with the game, you can play it online here, here 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 by Tuesday November 26. 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 for teams from your instructor, to increase project scope.

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 Bezerk you find online.

Part 0: Properly turned in program
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 extra credit (461: 2%; 561: 1%) 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 screencast: a video walking us through your game within a few minutes. We suggest using YouTube itself to capture the video, then download the video and upload 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, you will lose 3% if your assignment is turned in by 12/12, and 9% by 12/13. In 561, you will lose 3% if you turn your assignment in on 12/13.

During the final exam period, you may optionally demo your assignment in front of the class. If you do, you will enter the competition for a $20 Amazon gift card. You will win if your fellow students vote your game the best. Students in teams cannot enter the competition.

Part 1: Display the playing field
Create and render the playing environment needed for the game. You should display a roughly planar terrain surrounded by walls, and with other walls dividing the space. Models should be 3D, though the projections may be orthogonal. Fancy modeling is not necessary; cubes and spheres are enough. No motion is required for credit in this part.

Part 2: Display and animate the player
Model and animate the player. It moves north, south, east or west when the user presses a key (wasd and/or arrows). The player dies if it hits a wall.

Part 3: Display and animate the robots
Model and animate multiple robots. They move north, south east or west automatically, and do not pass through walls or each other. If they collide with the player, the player dies.

Part 4: Add shooting interactions
Players can shoot in the (cardinal) direction they are moving by pressing the space bar. Robots will also automatically shoot at the player in cardinal directions. If robot shots hit the player, the player dies. Similarly, robot shots can kill other robots. Shots are not instant: they move slowly toward their target.

Extra credit opportunities include the following, with values in format (461, 561)%:
  • (1, ⅓)% — track and display score. You can choose any scoring scale you want.
  • (1, ⅓)% — add an optional over-the-shoulder view (of the player).
  • (1, ⅓)% — add animated explosions, which appear at collisions and when shots land.
  • (1, ½)% — animate the motion of the player and robots, using running keyframes
  • (2, ½)% — play music, and on game events play a sound, e.g. on collisions
  • (2, ½)% — add evil Otto, who cannot be shot and kills the player on collision
  • (2, ½)% — add at least one level, by navigating out of a door in the external wall
  • (2, ½)% — add two power ups, e.g. slow gameplay, turn off collisions
  • (2, ½)% — support a second player, either with different keys or the mouse