CS184 and XNA
Yay, I received approval from my instructor to write my final project for CS184 – Computer Graphics in XNA! Up until now, we’ve been using OpenGL with C++. It’s been a nice foray into an alternative graphics stack, but I just can’t stay away from XNA and C#. I’m going to document my progress here in hopes that it’ll be useful to others in the future, and also just to show off my work as it evolves. The other work I’ve done in the class is accessible here: http://www.williamhli.com/cs184/. The requirements for our final project are pretty loose, so it shouldn’t be terribly difficult to satisfy the minimum requirements for an A. I’ll be working with a partner, Adit Dalvi, who I’ve done the past 3 assignments with. With that said, our sense of pride will not let us be content with just the bare minimums. As a result, the goal for our final project (due May 20th – 3 weeks away) is to have a working game running on my Xbox 360.
We’ve designed our project to be pretty flexible in terms of the final deliverable, but we’re always up for more if time allows. We have a few milestones that we plan to hit as fast as possible to allow for time to polish the final game before the demo on May 20th.
Phase 1 – Bouncing Balls with Collisions and Shadow
We will be implementing a 3rd person tank “shooter” game. You will fire off objects that bounce back up for several bounces/collisions [+60 collisions]. Hitting other objects will make both objects react to the collision elastically, unless it is bolted to the ground (rocks, etc). Real-time shadows will be added as an additional warning to move out of the way of falling objects [+40 shadows]. Finally, the balls will deform the ground when it hits (in addition to bouncing off), possibly sending other objects flying [+30 displacement mapping].
Phase 2 – Rotatable Cube with Gravity
This is the interesting part of the project. Instead of playing on just one flat ground, it would be played in a cube, and gravity will switch either at a specified time or when a power-up is activated. All flying objects and players will be immediately influenced by a different gravity, and the camera will also rotate [+20 camera]. The different sides of the cube will be different properties:
- trampoline (default)
- desert (dust kicks up and obscures vision)
- water (reflections/refractions?)
- hardwood (no deformations)
- gravel (no secondary bounces)
Phase 3 – Polish and More Powerups
This phase will be the final few days of our project. We will be polishing our game and fixing bugs here and there. We will also make sure the game runs fine on my Xbox 360. Some areas we will cover are switchable modes of lighting [+10], texture and bump mapping [+15], transparency [+5], sounds, and a “display” mode for our game which runs through all the features we’ve implemented without requiring user input. An additional possibility is multiplyer mode so you can play against a friend. Adding everything up gives a score of 180-190. Also, some powerups that we could potentially add to our game:
- no overhead lights – the flying objects become point lights (this is the coolest idea that I definitely want to see)
- Splits: on a bounce, the ball splits into two
- permanent deformation: normally, the ground springs back to normal
- point defense missiles that target incoming balls
- mini-blackhole spline in the center of the cube
More ideas from friends:
- mines that explode many balls outwards from the center of explosion
Hopefully this project will force me to spend time to learn a lot about game programming and graphics in general that I otherwise would’ve been too lazy to pursue. I’m so excited to start this journey – stay tuned for the first screenshots
Edit: We’ve completely overhauled our idea.
