Yellow Man | Navigate | BSP Maze | Glide Missile Command | OpenGL Missile Command
Source Files Header Files Source Files Program
Yellow Man: by Mark 'Brewmeister' Carlson

Download Yellow Man.

INSTALATION:
Yellow Man was programmed for machines running a Win32 environment with DirectX and OpenGL.

Simply unzip the yellow.zip file into any directory you like. Make sure you preserve the subdirectory structure, or the game will not work.

Systems which are known to run the game are:

  • Dual PIII 800 with Voodoo3 1.01.04 Beta Driver for Windows 200 (This card is why I need to win this contest! The Voodoo3 does not cut it these days, and Yellow Man runs slow on it.)
  • Dual PIII 800 with GeForce Detonator 3 drivers on Windows 2000 (runs very nice).
  • PIII 600 with TNT2 Detonator 3 drivers on Windows NT (runs fine, but you have to set sound = 0 in the setup.ini file).
  • PIII 600 with TNT Detonator 3 drivers on Windows 2000 (runs good).

    CONTROLS:

    • Mouse Look around.
    • Mouse Button 1 Throw Energy Ball.
    • Mouse Button 2 Toggle third person Point Of View.
    • ESC Quit.
    • a Move Left.
    • s Move Back.
    • d Move Right.
    • w Move Forward.
    • g Shoot Gun.
    • Shift Hold Down to Run.
    • Space Jump.
    • Ctrl - Space fullscrean toggle.
    • Ctrl - [0-6] change resolution.
    • Ctrl - c Toggle third person Point Of View.
    • Ctrl - f Toggle FPS on and off. (note: if FPS is on, then 3rd person POV is eagle eye-view.)
    • Ctrl - + Increase Field Of View.
    • Ctrl - - Decrease FOV.

    SETUP.INI FILE:
    The setup.ini file controls how the program starts. Changes you make in the game will be saved upon exit and your next game will start in the same configuration you left the last game in. There are several variables in the setup.ini file that you can control:

    • screenWidth controls the horizontal resolution.
    • screenHeight controls the vertical resolution.
    • fullscreen 0 will run in window, 1 will run full-screen.
    • fov Field Of View
    • sound 0 for no sound, 1 for DirectX sound.
    • mouseSensitivityX Left/Right Mouse Sensitivity.
    • mouseSensitivityY Forward/Back Mouse Sensitivity.
    • collisionRadius Controls size of player.
    • showFps 0 to hide Frames Per Second, 1 to show them.
    • playerWalkSpeed controls maximum player speed when walking.
    • playerRunSpeed controls maximum player speed when running.
    • tessSize controls the tessellation size of the floor, small number will run slower but give better light on the ground.

    COMPILATION:
    You are welcome to compile Yellow Man and play with it as much as you like. To compile it, download source.zip and yellow.zip; unzip them into the same directory, and open the project in Developer Studio (Other environments should work, but I never tried any). You will need the files mentioned in the INSTALATION subsection, and you will also need the Parser Generator program for the ini files.

    ABOUT YELLOW MAN:
    Yellow Man has some interesting features to it, but it is a program about to reach critical mass. I have added many features since it's birth in my animation class , and most of them were hacked in. I did the base program in about a week (the map format, and physics/particle engine), and have been adding things in my spare time since then.

    The Animation

    The animation was originally motion capture data. Yes, I know the running looks funny, but it is very hard to capture a good running cycle with the magnetic setup I use at Georgia Tech. The capture range for good data is only about eight feet. I still can't believe the subject's run looked that funny. Anyway, there is a standing, a run, and a walk cycle. The joint angles from the motion are blended together to transition smoothly between each cycle. You can find out more about the technique I used from Verbs and Adverbs: Multidimensional Motion Interpolation Charles Rose, Michael Cohen and Bobby Bodenheimer, IEEE CG&A.

    Physics Engine

    The physics in Yellow man is very simplified. The Energy Ball, the explosion particles, and yellow man himself are all under the influences of a constant gravitational force field. The collisions that yellow man makes with the wall are modified inelastic collisions, initially there were true inelastic collisions, but once he hit a wall he would not stop; it was like some crazy human pinball game! I added a damper to his motion that could be considered friction, but static friction is not implemented (you can see this if you stand yellow man on a slope and stop his walking; he will begin to slide).

    Collision Detection

    The collision detection is what I call 2D portals. Each room knows about the areas surrounding it, and these neighbors can either be walls or entrances to other rooms (portals). If they are walls then there is a collision. If they are other rooms then the control of the player is passed to the neighboring room when his center is within its boundary. There is also a sort of universal law that won't let yellow man fall below the floor. The upside of this collision detection technique is that it is very fast. I can have a thousand objects with varying bounding spheres in the scene at the same time with no slow down at all. However, it is first order collision detection (particles don't hit each other), but it should be trivial to extend the engine to hit certain entities, or make the sparks bounce a few times when they hit. One drawback of this technique is that the collision detection for the ceiling is not automatic. I thought of giving each room a height, but then I could not have that cool vaulted ceiling that I wanted. Anyway, this glitch actually shows off the gravity field quite well. Shoot a bunch of shots directly up into the air and run around a bit; then, look back at where you ran. What goes up must come down.

    Geometry and Rendering

    All the rendering is done using OpenGL. I don't have any special algorithms to cull triangles, or clip things outside the viewing frustum; the world geometry is far to simple to need it. Yellow Man supports hardware transformation and lighting, and I highly recommend it; in fact the program was coded and tested mainly with a card that has the hardware. Oh yeah, the textures are from Quake, and I learned a lot from the Quake source code (I can't thank id Software enough for their policy on sharing source code; bless you id Software, bless you). If you want to change the way yellow man looks, then you can edit the TRI files. The TRI files are in a very simple format. First is the number of vertices, then the list of vertices. Following that is the number of triangles, then the list of triangles (each triangle is 3 integers used to index the vertex array, look in geo_shell.cpp for better understanding). A soft restriction on the models is that they be an unbroken manifold mesh (don't worry about triangle orientation, the program takes care of that). You can have handles, but no breaks in the mesh, and each edge may have only two incident triangles. The fire animation is very basic. It was done using 10 fire and 4 smoke textures (the textures really need to be improved), each one with an alpha texture as well. They are stretched across some quads that rotate with the view angle, and then cycle semi-randomly through their frames.

    General Comments

    Yellow Man is open source, but if you learn from it then give credit where credit is due. I learned a lot from Chris Hargrove's Tutorial over at Loonygames, thanks a bunch Chris. Somewhere in there he recommended some books that were invaluable too. Another thing I almost forgot is that I took the sounds from Quake; thanks again id Software.
    Making this game was a huge learning experience for me. I don't think I would do anything the same if I did it again, but it sure was fun doing it.

    KNOWN BUGS:

  • When running in full-screen mode, text, including FPS report, and messages will not work.
  • When using a voodoo3 in windowed mode, the sound sometimes skips.
  • When switching from full-mode to windowed mode with a voodoo3, an access violation error occurs in glide3.dll; in this case the program will exit and no harm has been done to the system.
  • Gamma too dark on Windows NT.
  • Lights too bright on voodoo3.