Welcome to SnowKing Palace! David Westrom This is a Descent style ship flying game where you can move in 3D and are charged with the task of infiltrating the evil SnowKing's palace and assassinating him. Recently the SnowKing has gained power over the weather, and of course has produced a never-ending snow over the land. The towns in the area have hired you to enter his palace and remove the SnowKing so that the land might be returned to its former state. Be careful however, the SnowKing has been informed you are on the premises and has rallied his troops and is prepared for you. You must fight your way through the entrance hall, dark passageways, a battle in the courtyard, a dungeon, and eventually meet the SnowKing himself for a showdown. Get ready for a snowball fight! Keyboard Controls: e - move forward d - move backwards s - strafe left f - strafe right w - move downwards r - move upwards x - roll left v - roll right y - toggle explosion particle interaction with cyclone u - restart level at last checkpoint spacebar - use to open gates Mouse Controls: Left mouse click shoots and explosive snowball, a drag with left button pressed will produce a roll left or right (also available on the keyboard). A drag with the right mouse button produces a pitch up or down, and a yaw left or right. Now a description of what is implemented: This is an interactive, 3D game that makes use of the OpenGL smooth shading model using normals for almost all object and materials for a few. The game uses limited texturing to decorate walls, floors, the night sky, and the SnowKing himself. It also uses one case of picking, necessary to open gates to move on to the next stage. My hidden surface removal method is to keep track of which room you are in and simply not draw rooms that I have judged are out of sight, all objects in those rooms are also not drawn. This pretty much covers all the required functionality. My ship uses a slightly different navigation system than project 2. Instead of holding the mouse down for movement, you can produce and acceleration with the keyboard that will carry your ship in the direction you are facing, you can also strafe left or right, up or down, and the mouse is used for looking around (pitch, yaw, roll as in project 2). One of the two main new functionalities I implemented is Collision Detection. The ship you are flying fires explosive snowballs which detonate upon intersecting another object's space, be it a wall, tree, snow demon, evil Snowman, or evil Snowman's snowball. The bad guys also fire snowballs at you and these are checked against local boundaries and expire when intersecting another structure's space (walls, floors or trees only, snowmen cannot kill each other, but this is intentional). They can also intersect with YOUR space, which is something you want to avoid, and this will produce a realistic jiggle in your ships view. Also your ship will bounce off walls, floors, trees, etc. Some more uses of collision detection are tied in with the next new functionality. The second main new functionality is Particle Systems. They include modeling snowflakes falling in a room and landing on the floor and sticking around for a while. Also when your snowball explodes I've modeled the explosion using a particle system that scatters particles in all directions. These particles also obey collision rules with other structures, such as an explosion near the mouth of a tunnel down into the dungeon will have some particles left on or near the edge of the tunnel, while the rest will fall into the room below, bouncing around in the walls of the tunnel as they fall. So explosion particles will also bounce off walls, as well as the floor, and the height of the bounce depends upon their velocity when they hit. Also, I've modeled a snowy cyclone using a particle system, which adversely affects your ships orientation when encountered (more collision detection), but the real kicker is when you explode a snowball in range of a cyclone the explosion particles are detected and caught up in the draft and spun around until they expire (maybe this is almost like simulated dynamics), this part is slightly buggy, but works almost all of the time (which is why I included a toggle for this particular effect). I also have text displayed while you are flying displaying the armor you have left, and will inform you if you have been hit, or have hit an enemy object such as an enemy snowball or snowman. Info on how to do the output was found at http://home.clara.net/paulyg/prog9.htm And that's it, the rest is modeling the bad guys by hand (I didn't use a modeling program), defining the rules for the world and the room system, building the level, and lots of debugging :-). I wrote the game using VC++ on my computer at home so it won't run on the lab machines, but I've included the .exe file in my handin and will bring my own computer to the demo.