NOW YOU'RE MESSIN' WITH A SON OF A B*TCH README Yuning Woo (ywoo@stanford) Yuan Ren (jren@stanford) 1. Running the game ------------------- Minimum recommended specs: PIII 500 256MB RAM Geforce2 2 gamepads DirectX7 Um...yes, we know these specs are pretty steep, but we pretty much built the game based on my computer and it runs really well. We can't guarantee smooth gameplay on all systems, sorry 8( 2 gamepads are a must. Having only 1 gamepad will result in only one player being able to move. Any more than 2 might create unfortunate situations on the stack... "sob.zip" is the game distribution, it contains the game executable sob.exe and all the required data files. Warning 1: The game contains some fonts that are not standard in the WINDOWS/FONTS directory. These fonts can be found in sobfonts.zip -- however, they must be copied over to WINDOWS/FONTS to work. Not having these fonts in your directory will not affect your ability to play the game. Warning 2: The game has only been tested on a Pentium 3 with a GeForce2 GTS card installed, with two Sidewinder joypads attached. Trying to run the game on another system will probably yield strange results. If you don't have joypads, commenting out the #define USE_JOY in Game.cpp and uncommenting the #define USE_KEY should work. Controls: -gamepad: A(button0): punch B(button1): kick C(button2): jump X(button3): fireball Y(button4): special attack Right Trigger(button7): Z-target -keyboard(this game is totally not intended for play by keyboard, hence the almost random placement of keys) note: If you really want to use the keyboard you need to recompile the bad mutha. player1: NUMPAD7: UP+LEFT NUMPAD8: UP NUMPAD9: UP+RIGHT NUMPAD4: LEFT NUMPAD6: RIGHT NUMPAD1: DOWN+LEFT NUMPAD2: DOWN NUMPAD3: DOWN+RIGHT P: PUNCH L: JUMP O: FIREBALL I: KICK M: Z-TARGET U: SPECIAL ATTACK player2: W: UP+LEFT E: UP R: UP+RIGHT S: LEFT F: RIGHT X: DOWN+LEFT C: DOWN V: DOWN+RIGHT H: PUNCH J: JUMP Z: FIREBALL A: KICK Q: Z-TARGET B: SPECIAL ATTACK Cheat Codes (may cause unpredictable things to happen...) F1: Full health/special F2: Level skip F3: Kill all enemies on screen F5: Restart F9: Skip to beginning of first level 2. Explanation of terms ----------------------- Actor: All of the enemies and human players are considered actors. All actors have a list of tasks that they can do, and they perform these tasks when told to. Frame: One cycle of the game, i.e. the unit of time it takes the game to draw the entire scene, compute particle systems, and perform all game-logic related tasks. To prevent slowdown when more actors are on the screen, we force each frame to draw in 20 milliseconds (i.e. if the scene is already drawn by then, we stall until 20 milliseconds have elapsed). 3. Advanced Features -------------------- - View frustum culling. All actors that are not currently in the viewport are not drawn. - Collision detection. Each actor has several defensive collision boxes -- one for the head, one for the midsection and one for the feet. Punches, kicks, etc. are implemented by turning on an attack collision box for one frame and seeing if it intersects with any of another actors' defensive boxes. Right now hitting any of the defensive boxes will cause the same headsnap animation to play... we didn't have time to create more animations for getting hit in different parts of the body, but it would be fairly easy. The boxes are not axis-aligned, and therefore we need to calculate cross-products up the wazoo to check to see if they collide. - Particle systems. The fireball, meteor, steam, blood, etc. are all implemented using the same particle system engine. Each particle is a texture mapped plane with a size, velocity, gravity, and lifetime. As the particle ages, it fades using alpha blending. - Sound. The sound is played using the BASS library, which is essentially a wrapper to DirectSound calls. Game sounds are loaded into memory, while longer music tracks are streamed. When a new music track is loaded, the old music track automatically fades. - Control panel. The control panel is a mixture of 2D and 3D elements. The health bars are drawn using the auxiliary library (wireframe cylinders and solid cylinders). The picture frames are 3D as well. The text and pictures are 2D. - Motion capture. The animations were done in Metacreations Poser (which uses motion capture for its walks and runs), and exported, frame-by-frame, to a text file, where they are then read in by OpenGL. As an example, the "walk" animation for Rambo has 6 frames. Then in OpenGL, the spaces between those 6 frames are linearly interpolated (we add 6 frames of interpolation for each captured frame of walk animation for a total of 36 frames), and each frame is stored in a display list to be called later. - Cutscene design. We developed a cutscene engine so that we could force actors to perform various tasks, all timed and without keyboard control. These cutscenes can optionally be synchronized with musical tracks (this is done by only performing certain actions when a certain number of bytes of the audio track have been played). 4. External programs used ------------------------- - Metacreations Poser - used for creating and animating all of the human models used in the game. - 3D Exploration - converts the models into text format. - UVMapper - a nifyty program that loads an .obj file and creates a texture map template that you can paint in Photoshop, then wrap around your .obj file. - Goldwave - the audio editor used to edit our sounds. - Photoshop - for all of your 2d art needs. 5. External code used --------------------- - BASS - the sound library used to play game sounds. - Jeff Molofee (NeHe)'s tutorials. In addition to providing nice code for displaying text on screen, we used his Lesson 2 (drawing a triangle and a square) as starter code to get our windows set up. 6. External sources of assets ----------------------------- - Textures are blatantly ripped off from Half Life: Counterstrike. - Sound was mostly gotten from scouring the Internet. Some sounds (punches, falls) were ripped from old 16-bit video games. - Background music was ripped from Streets of Rage. - Intro music: Vivaldi, "The Four Seasons: Spring" - Credits music: Nazareth, "Son of a Bitch" - Rambo's special: Gran Turismo, "Title Track" - Catherine's special: Crystal Method, "Keep Hope Alive" - Ending music: Schindler's List, "Remembrances" - .filip's homepage - over 2000 TrueType fonts.