Curtis Hodgins By submitting this file, I hereby declare that I worked individually on this assignment and that I am the only author of this code. I have listed all external resources (web pages, books) used below. I have listed all people with whom I have had significant discussions about the project below. With exception to picking, all of the main requirements have been fulfilled. Sadly, as picking had the least foreseeable relevance to gameplay, it was deprioritized. /======\ | WHAT | \======/ This game is a cylindrical avoider game. In essence it works much like a 2D avoider game, except instead of being bound on the left and right sides, objects crossing this border appear on the opposite edge. By centering gameplay around a cylindrical plane of movement, rather than the regular 2D plane, the visual effect is less likely to unsuspend disbelief. It also adds a degree of difficulty to gameplay, in that depth and curved movement need to be taken into account, as well as the fact that a central pillar completely obscures a significant number of on-screen dangers. The main mechanic of the game is based around avoiding collisions. The player character has a tiny hitbox. The much more numerous bullets and enemies, not so much. Advanced features: -Collision detection: Sphere-sphere collision detection is used to evaluate player progress. Or, rather, to evaluate when to stop player progress. -Animation: Small pieces of animation in the player character model. The wings continually flap, the character fades in and out depending on whether it's focusing/unfocusing/being resurrected, the character explodes into spiraling, fading spheres upon death, and the character rolls to the side a bit when moving right or left. The enemies also spin: both on their own axis and around the central pillar. /=====\ | HOW | \=====/ The main file (314p4.cpp) sets up the environment and handles some non-game-related input handling. The Game class is the meat of the program. It contains all of the game objects, lights, HUD, and camera, and is responsible for reading more game-related user input, initializing and calling for updates for the above objects, and testing collisions between the bullets/enemies and the player object. The HUD class keeps track of the numbers of most interest to the player (score, lives, FPS) and displays them to the screen. The Stage class handles the environment-- all of the non-interactable 3D objects and lights. The Player class manages the data related to the player character, and is responsible for drawing it. The Bullet and Enemy classes are rather similar. The Enemy, Bullet, and Player classes all have a Hitbox object, which is what the game really cares about. Hittests are performed between these Hitboxes (or perhaps more accurately, Hitspheres) by evaluating the distance from their centres and comparing that to the sum of their radii. These hittests are performed in the Game class. /=======\ | HOWTO | \=======/ Revinder is a cylindrical avoider game, with plans to eventually be converted into a shoot-'em-up. The player takes control of a Revinder, a friendly revenant spirit trying oh-so-determinedly to not be vaporized by floating magic crystals. While there is no way for our poor protagonist to escape this fate in this version, it is up to the player to assist the Revinder in prolonging it. The objective of the game is survival. Points are earned by simply not getting hit. The player gets 3 tries, and when those are gone, the game ends. The game will save your highest score for the session until you exit the program. What may be counter to expectations is what is classified as a hit. As an ectoplasmic being, the Revinder isn't really all there. At the heart of the creature is its core. The Revinder will normally have no difficulty phasing through any potentially lethal circumstances thrown at it, but its core is significantly lacking in this capacity and, moreover, is volatile to the extent that a little jolt to it is enough to tear the entire Revinder apart. More simply, this is not an avoider game between the bullets and the Revinder. It's an avoider game between the bullets and the Revinder's core. Controls: Up and down arrow keys: Change altitude Left and Right arrow keys: Revolve around the cylinder Z: Focus P: Pause/Unpause L: Toggle lighting While holding down the 'Z' key, the Revinder will become slightly transparent. During this time, the Revinder's core (hitbox) will be revealed, and the Revinder will move slower. Pressing L will toggle lighting between the spotlight (intended gameplay) mode and fully illuminated mode. /=========\ | SOURCES | \=========/ The original concept of the game was inspired by the Touhou Project game series. Referenced and borrowed the imageloader.cpp and .h files from http://www.videotutorialsrock.com/opengl_tutorial/textures/text.php These files enable the loading of .bmp files, but do not apply textures themselves. Texture coordinate manipulation is taken care of personally in the Stage.cpp file. Textures were borrowed from http://slconceptual.wordpress.com/2007/08/10/free-textures-texture-maker-from-spiral-graphics/