******************************************************************************************* Save Squigbert ******************************************************************************************* Lauren Candlish Allison Duck The alien, Squigbert, has crashed landed on a tropical island and the fuel cells for his spaceship have been scattered across the island. In order for Squipbert to get off the island and return to his home planet, he must collect the various pieces of the spacecraft. The user must direct him along the paths that criss-cross the island or walk Squigbert along the beach. Squigbert can select the pieces using his inter-galactic mind-control. Once all the pieces have been collected the game has been won. *********************** Required Framework *********************** Picking: once Squigbert has found one of the spaceship pieces, he has to pick it up. This is done using the right mouse button. Texturing: the visual theme of the game is a soft plastic look, very cartoonish with textures being added to the spaceship and fuel cell pieces to maintain the cartoonish look. On Screen control panel: the on screen control panel shows the remaining spaceship pieces. As well as a help menu by pressing h. If Squigbert walks into an object a message will display on screen. *********************** Advanced Functionality *********************** Navigation: Squigbert is able to move around the island by the use of the key controls. He is able to navigate in the x and z directions. The camera, in third person view, will follow behind him. Key controls will allow the user to switch camera angles by smoothly circling around the alien. A virtual trackball has also been implemented. Note the particle systems turn off when the virtual trackball has been turned on. Collision detection: Squigbert is not be able to walk through any of the folliage; trees, flowers and plants. Terrain following is implemented so that when the land slopes up, Squigbert will automatically adjust to walk up the land. He center of mass follows the height of the terrain, this caused foot skate, thus the angle of each of his ankles will adjust based on the normal of the plane on which the foot lies. The ankle angle also adjust based on the angle of his leg. Particle systems: The damaged spaceship gives off smoke which was created by a particle system. There is also a particle system for the flame on the spaceship. Both particle systems have been implemented as a pure particle system in 2D with billboarding. Procedural modeling: The diamond-square algorithm creates randomly generated fractal terrain. Also, the flowers, plants and trees are created through procedure calls have procedures and randomly placed on the island. *********************** References *********************** Websites: Diamond-Square Algorithm Generating Random Fractal Terrain: www.gameprogrammer.com/fractal.html www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=379 www.xraylith.wisc.edu/~khan/software/stl/STL.newbie.html#sort_list General OpenGL understanding nehe.gamedev.net Picking Tutorials OpenGL @ Lighthouse 3D - Picking Tutorial www.lighthouse3d.com/opengl/picking/ Books: Programming with Objects: A Comparative Presentation of Object-Oriented Programming with C++ and Java. Kak, Avinash C.,John Wiley & Sons. 2003. C/C++ Programmer's Reference, Third Edition. Schildt,Herbert. McGraw-Hill/Osborne. 2003. Textures: The bitmap loading code was written by Kyle Porter and was used with his permission. People: Maciek Mizerski, who spent hours helping me by reading over my code, asking why I did things, explaining that shading works better when the normals point up, etc. I have a huge debt of gratitude to him. Even though the project is working at this point. ************************** Files and data structures ************************** object on island: shape.cpp shape.h // geometric objects, called by flower, trees, spacecraft, fuel ship.cpp ship.h // spacecraft fuel.cpp fuel.h //pieces of the fuel cell tree.cpp tree.h plant.cpp plant.h flower.cpp flower.h island.cpp island.h // diamond-square algorithm goes here Squigbert: alien.cpp alien.h // all his movement functions are here, pass value of movement procedures: bound.cpp bound.h // for getting bounding values pick.cpp pick.h // for picking fuel cell texture.cpp texture.h display.cpp display.h // on screen display particle.cpp particle.h //particle systems trackball.cpp trackball.h //virtual trackball textures: metal.bmp // for spacecraft energy.bmp // for fuel cells water.bmp other: constant.h // kept global variables here scene.cpp scene.h // renders the scen main.cpp Makefile