Justin Klein – Progress Reports

 

Here is documentation on all of the API’s I’ve written for this class

 

----------------------------------WEEK 1---------------------------------

 

3/31/04 - GLWindow

àWrote basic OpenGL window creation & destruction class

àSet up main driver application to run GLWindow

 

4/1/04 - Utilities

àWrote Logger class

Can log to files or separate console window

Console window can be hidden or shown

Can redirect stderr & stdout to text files

àWrote Profiler class

Dumps heap contents to log file at program termination

Can add monitors to trace CPU time spent on various routines (using high-resolution performance counter)

àWrote simple INIReader wrapper class to parse & read initialization files

 

4/2/04 - Framework Research

àWent over a bunch of DirectX examples, took notes, brainstormed on framework/overall program structure, etc (regarding how the gamestate will be maintained, rendering, input, client-server architecture, etc – basically how everything will come together)

 

4/4/04 - Start Framework

àStarted putting together a basic structure for the framework, combining:

-MainApp class

-Renderer class

-GLWindow class

-Profiler class

-Logger class

-INIReader class

-InputHandler class (stubfor now - Nakul is working on it)

 

4/5/04 - Website

àPut the framework on hold, completely redesigned the website from scratch with Andy, including design docs, menus, schedule, group roles, etc.

 

----------------------------------WEEK 2---------------------------------

 

4/6/04 - Finish Website, Meetings, Continue Framework

àFinished up the website with Andy

àSeveral group meetings

àMore work & revisions on the framework, trying to get an overall clean design laid out...not a lot of code generation, just a lot of code organization :)

 

4/7/04 - 1st Version Framework, Research, FontWriter

àFinished first "clean" version of framework, ready to start putting stuff in!

àDid some internet research on bitmap fonts in OpenGL & put together a basic FontWriter class; Application now calculates & displays frame rate!

àStarted researching image formats (I want to use jpegs for textures, they're smaller & load much faster than bitmaps)

 

4/8/04 – Group Meeting, Image Loading, Sound System

àFirst official group meeting!

àWrote JpegLoader & TextureLoader wrapper classes to simplify loading images into OpenGL; application now displays a SplashScreen!

àWrote SoundSystem wrapper class around Bass (an API that uses DirectSound); application plays background music!

 

4/9/04 – Input Integration, Menus

àGot InputHandler from Nakul & worked it into the framework

àStarted working on menu system

 

4/10/04 – Menus, Sound System

àSome revisions to Nakul’s InputHandler (to work w/ menus)

àWrote first working version of MenuHandler…harder than I thought!

àSome additions to SoundSystem (fading, volumes, etc)

 

4/11/04 – Revisions, Progress Report

àRevisions/cleanups to the framework

àRevisions/bug fixes on the menu system

àCompiled group progress report

 

4/12/04 – Player Base Code

àWrote a base “Player” class so Chris can fill in the physics/motion code

 

------------------------------------WEEK 3-----------------------------------

 

4/13/04 – Group Meeting, Module Isolation

àSecond official group meeting

àCreated Debugger class to contain Profiling, Logging, HeapChecking, & FrameRate timing for better compartmentalization

àCreated ResourceManager class to load/store/unload textures, sounds, and models for better compartmentalization

 

4/14/04 – Module Isolation

àRemoved all dependencies in GLWindow, compiled into standalone library

àRemoved all dependencies in FontWriter, compiled into standalone library

àRemoved all dependencies in MenuHandler, compiled into a standalone library

 

4/15/04 – Documentation, TextInput, Console

àDocumented the 10 API’s I’ve written so far; a link to this documentation is at the top of this page.

àWrote TextInput namespace to gather & render user-inputted strings in OGL (for multiplayer chatting, connection lobby, etc)

àAdded ability to show/hide a console window with Alt+Space hotkey

 

4/16/04 - Particles

àStarted on the ParticleEngine!

 

4/17/04 – Particles

àMore work on ParticleEngine

 

4/18/04 – Network

àWorked w/ Andy to clean up Client & Server network code API’s

àStarted Server Application

 

4/19/04 – Particles, Docs

àSome more work on Particles (basic version up & running)

àCompiled progress report & allocated new tasks for next week

àHelped a few of the other group members work out some minor bugs

 

------------------------------------WEEK 4-----------------------------------

 

4/20/04 – Group Meeting, INTEGRATION

à Group Meeting

àMAJOR work w/ Andy on integrating; we now have client/server connectivity from within the game interface, and verified message passing between the client & server applications, including “movePlayerUp”, “MovePlayerDown”, etc.

 

4/21/04 – INTEGRATION, Bezier Curves, Command Interpreter

àMAJOR work w/ Andy integrating, resulting in:

-Pre-game “waiting for other clients” countdown (shows time till game start, number of clients connected so far)

-Multiple clients can connect & disconnect

-Server successfully broadcasts gamestate

-Clients can say “move left” to the server, server confirms (required a number of changes from the previous version)

àThrew together a couple of Bezier Curve functions for Chris to put into the MathFunctions

àAdded ability to type commands into a Logger console (basic command interpreter for server)

 

4/22/04 – MD2 Models

àAdded a bunch of new documentation to my API’s page

àMassive work on MD2 Model Importer (Starting from a previous version that I had already written)

            àWrote a driver for testing (renders single model, can rotate around it, load it, free it, load skins, free skins)

            àRemoved a BUNCH of dependencies on other modules

            àFixed several memory leaks

            àAdded code to internally load .PCX images (for skins)

 

4/23/04 – MD2 Models, CVS

àMassive work on MD2 Model Importer (continued)

            àFixed some bugs in animation processing

            àModel computes per-face Normals at load-time (not good enough…)

            àModel computes per-vertex Normals at load-time (by averaging the normals of the surrounding faces…looks MUCH better)

            àAdded lighting to the test-driver

            àDocumentation updated & uploaded

àPlayed w/ CVS, got it figured out, uploaded model driver

 

4/24/04 – MASSIVE All-Night INTEGRATION

àIntegrated new version of Chris’ player motion code

àIntegrated new version of Nakul’s InputHandler

àIntegrated my MD2Model importer/renderer to the client framework

            -You can now fly around a ship model in single-player mode!

àIntegrated my ParticleEngine

            -Ship “thruster” now emits a stream of “bubbles” as it moves!

àGot server code up & running on CVS

àFixed bug that occurs when you try to connect after a previously failed connection attempt

àFixed bug with TextInput where it wasn’t acquiring focus from the InputHandler

PLUS, ANDY AND I SPENT ABOUT 7 HOURS ON THE FOLLOWING MASSIVE INTEGRATION:

-Reworked interface to the Send() methods to internalize more of the logic (client and server)

-Changed send mechanisms for better bandwidth utilization (client and server)

-Reworked how GAME_MSGID’s are processed/generated

-Moved Chris’ player-motion logic to the server

-Added ability to skip pre-game countdown (new message type from client to server)

-Solved a few logical problems that were bringing down our framerate by 91% once the network was integrated J

àEND OF THE NIGHT RESULT:

            -Two way communication between client & server is complete & tested (we had confirmed message receipt before, but the data was mangled)

-Client can render four ships based on the gamestate that the server maintains!

Phew…3:30am is too late…

 

4/25/04 – Team Management

àNo real coding today; just a BUNCH of individual conversations w/ the various team members discussing what needs to be done, how the interfaces should be structured, how they should interact with each other, etc. including A.I. and how it will react with the various elements in the game.  Also spent some time briefing everyone on how Andy and I restructured the overall game, as the overall picture of the project seriously changed after last night’s work…

 

4/26/04 – Particle Engine, Group Documents, Webpage

àCleaned up ParticleEngine code; have a “final” version up & working

àCompiled group progress report

àUpdated deadlines

àPosted documentation & snapshots on MD2 Driver

àPosted snapshots of our current client & server versions

 

----------------------------------WEEK 5---------------------------------

 

4/27/04 – Meeting, Docs, Client Framework, Key Mapping

àOfficial Group Meeting

àCommented & documented ParticleEngine (up on the API’s page)

àRealized we were stupidly sending messages from client to server; began reworking some of the integration details on the client side…

àOur website is now accessible from http://cirrhosis.servebeer.com!!

àImplemented ability to map keys and switch to gamepad input via the menu system

àSlightly restructured gameloop to avoid eating CPU time when the app is inactive

àAdded a fxn to InputHandler so I could transmit KeyUp messages as well as KeyDown messages

àSpent awhile w/ Chris explaining how to properly implement player motion

 

4/28/04 – Framework revisions, Volume Controls, Bezier Curves, View Changes

àSeparated gameplay code into separate Update() with same Render() and Init() fxns to avoid repetition between Single & Multiplayer

àAdded Sound.ini which stores music filenames and volumes; can change volumes from within the menu.

àAdded RenderImmediate to FontWriter (documented under API’s)

àFixed a fairly significant bug in MainApp that caused the program to crash on exit

àCompiled Bezier Curves into a library; documented on API’s page

àWrote a framework for the Bezier Curve camera animations/view changes!

 

4/29/04 – Bezier Curves, Music, Cleanup

àFixed bug in Bezier Curves, animated one camera motion as an example for Chris

àAdded in-game music

àCleaned out single player mode (not needed anymore now that we have connectivity)

àAdded “where I am” variable to Camera class so the camera knows which ship to follow

àClient now receives a connection message saying WHICH client they are in the world

 

4/30/04 – World Rendering, Input

àChanged how characters are rendered from the gameState (taking into consideration that players can disconnect in any order, requiring:

àAdded isConnected Boolean to each clientInfo in gamestate

àModified nsInputHandler to fix a bug in ReleaseDevice

àAdded ReInitialize() to nsInputHandler

àRemove device type param to nsInputHandler; now read from .INI file (makes it easier to switch via menus)

àExpanded TextInput to add getSingleKeyPress and getSingleKeyRelease just like nsInputHander; keyboard events are now always used for the menu regardless of which directInput device is initialized

 

5/1/04 – 5/5/04

ECE 108 midterm…

 

----------------------------------WEEK 6---------------------------------

 

5/6/04 – MD2 fixes, World model, Network redesign

àTracked down a bug in MD2 loader…fixed (wasn’t checking if the model had too many polys, vertices, etc at load time – it just crashed!)

àSpent FOREVER getting the world model into the game

àSpent longer than forever w/ Andy, on:

            -GameState now sent in pieces (first warning message gets sent, then an array of data)

            -6 new message types: expectPlayers, players, expectEnemies, enemies, expectProjectiles, projectiles

            -Bug fixes that were causing ships to still render after disconnecting

            -Bug fixes that were causing ships to flicker

            -Client & server now use .INI file to allocate memory for worldState, maxNumObjects, etc

            -Begun adding network messages for sounds

 

5/7/04 – Major network integration

àIntegrated Cold enemy model, changed loading/unloading of gameplay resources

àNow unloads everything that was loaded at gamestart

àAnother session w/ Andy, adding to yesterday’s network integration:

àFixed bug causing network messages to accumulate when app was inactive

àFinished transmission of sounds over network (all clients now hear a blast when any client fires)

            àIntegrated rendering of enemies from server

            àIntegrated rendering of projectiles from server (projectiles get created when user hits fire)

 

5/8/04 – Bug fixes

àFixed a bug in Logger (now it doesn’t crash if the logfile couldn’t be created)

àFixed a bug with DirectInput (crash if .INI file specifies gamepad, but no gamepad present).

àAdded network debug messages (via #defines)

àUpdated Chris & Nakul on our progress so they can start their integration (AI, rotational acceleration, projectile physics, projectile collision detection)

àFixed bug where the last projectile wasn’t disappearing

 

5/9/04 – World state expansion, shields, timeout

àAdded a check to the client for network timeout

àAdded resources for the other types of entities

àStructured a system for specifying the world (enemies, lives, etc) in INI files, sent to chris for integration w/ server

àFixed blending for the particles – they look round now

àSetup billboarding for the projectiles so they’re visible in first-person mode

àAdded ability to join a pre-existing game

àAdded health, enemy types, projectile types, and shields to the world state

àAdded rendering for shields

 

5/10/04

àFixed a bug where the client thought the server dropped the connection if it took too long to load

àDid group weekly progress report, updated a bunch of stuff on the website, added new screenshots

àRenders all model types

àEnabled lighting! Basic materials/properties setup from .INI file

àAdded other enemy models, enemies now rotate as they move about the world

àAdded new debug info (lighting on? network time? num players? health?)

àAdded textured, animated, rotating semitransparent shields

àDEATH ANIMATION WHEN YOU DIE!

àEnemies can be killed

 

----------------------------------WEEK 7---------------------------------

 

5/11/04

à日本語 Midterm

 

5/12/04 – 5/14/04 – E3!!

àIn LA for E3, back sometime Friday

 

5/15/04 – Double Buffering, Renderer Revisions

àSet up double-buffering for the world states (two different world states exist: the one that’s rendering, and the one that the network is writing to in the background)

àCleaned up rendering code a LOT: reduced from 30-40 to 5 state changes per frame

àRe-organized drawing order so everything can be seen through transparent shields

àAdded new screenshots to webpage

àRevised death animation (now doesn’t infinite loop)

 

5/15/04

àECE 108 Lab

 

5/16/04

àECE 108 Lab

 

5/17/04

àECE 108 Midterm

 

----------------------------------WEEK 8---------------------------------

5/18/04

àECE 108 Midterm

 

5/19/04 – Triple Buffering, Network Bug Fixes

àAdded triple-buffering (3 gamestates: Network, Render, RenderNext)

…Involved TONS of changes and bug fixes ultimately fixing the “ship flicker” problem

àAdded "I'm Ready" message to enter client in game (so enemies don’t kill you while loading!)

àAdded network framerate to debug info

àHeavily revised network timeout detection

àFixed bug where enemies “Skip” as they rotate; rotations are now smooth.

 

5/20/04 – Radar, Lives, Deaths, Tilt

àFully implemented radar

àMAJORLY rewrote & cleaned up networkMessageHandler

àShip respawns after you die, gameplay resumes!

àIntegrated player lives with Andy

àIntegrated death messages with Andy

àIntegrated ship tilt with Andy

àPrevented clients from entering the game until loading completes

 

5/21/04 – SUNGOD!

 

5/22/04 – Culling, Spotlight, Layered Backgrounds, Animated Models, Single Player, Fading Shields

àMAJORLY rewrote & cleaned up rendering code

àModified MD2Model, WorldModel to return the number of triangles actually rendered

àUpdated application to display number of triangles rendered

àImplemented FRUSTUM CULLING – massive performance boost!

àChange all quads to triangle strips

àSetup materials for everything, including SHINY SHIP

àAdded SPOTLIGHT to ship

àAdded a function to convert 3bpp->4bpp by adding an alpha channel to TextureLoader…this was used to fix the appearance of bullets (you used to be able to see the square around the round bullet)

àAdded rotating LAYERED BACKGROUNDS

àMoved skins to textures folder (from models folder)

àRevisions/fixes to shields (they also fade out now)

àIntegrated ANIMATED MODELS

àAdded ability to run as a server! (Client launches server as a child process)

àWrote framework for death explosion animations

àUpdated website with new executable

 

5/23/04 – Fixes & Documentation

àDocumented Frustum and Overlay API’s

àFixed up world model loading & single player init

àUpdated particle engine as necessary to fix death animations

àWhoops! Fixed single player mode

àFixed death animations for enemies – particles now get spit out

àFixed death animations for clients – NO particles get spit out if it’s you (personalized animations)

àRemoved splashscreen state (consolidated to menu)

àGame installs font resources

 

5/24/04 – BUGS BUGS BUGS

àFixed a bug with my car’s flat tire

àGroup Progress Report

àClient prompts for username, sends to server

àClient debugger prints Username, current weapon, current ammo, remaining shields

àAdded PowerUps to worldstate

àRewrote a lot of networkMessageTypes to generalize event messages (roomchange, death, fire, collide, win, lose)

àClient now differentiates between what kind of entity dies

àUp till 3am fixing a MAJOR memory bug with Andy & Nakul that was destroying the entire game world…

àFound (but didn’t fix) 2 more critical bugs that have been worrying us for awhile…

 

----------------------------------WEEK 9---------------------------------

 

5/25/04 – FIXED LAG, lighting revisions, better death animations, overlays

àFixed lag issue! Dumb directPlay flags…

àReworked a lot of the lighting code; spotlights now display for all ships

àMade app ignore network messages while in the menu, while translating between rooms

àForgot to remove the font resource I was using for the menu when I quit…fixed

àPut in basic framework for rendering powerups

àAdded flame explosion animations to deaths (which can be used for collisions later if we want)

àAdded progressbar to renderer

àImplemented player overlays – Each ship now shows a small lifebar and username

 

5/26/04 – Scaling, Powerups, HUD, Titlescreen, Targeting Computer, Event Sounds/Animations

àScaled the inner sphere so it doesn’t interfere with the outer world model

àScaled down all of the models so there’s more room for gameplay now

àMoved in the camera so models look the same size w/ larger relative world size…

àClient can now receive powerups array

àExpanded JpegLoader API to load two images, using one as a mask to generate an alpha channel for the other (changes documented in API section)

àImplemented new HUD & radar (using jpeg masks)

àFixed bug where players were getting garbage names on connect

àFixed death animation looping

àNot-Ready ships now appear black and don’t interact with the game

àAdded sparks when two entities collide

àAdded sparks when something gets shot

àAdded SHOWSTATS and WEAPONCHANGE to inputhandler

àAdded ability to pop up a window to show standings info (right now it’s empty)

àAdded rendering for health powerup

àAdded rendering for machinegun powerup

àPlays sound for collecting powerups

àAdded different sound & texture for Machinegun projectiles

àAdded titlescreen

àStarted adding code for the targeting computer (secondary viewport)

 

5/27/04 – Targeting Computer, Fonts, Redid Motion, HUD, SoundSystem

àFinished targeting computer (secondary viewport)

àMessed around with the FontWriter to get text more centered

àAdded support for 3D extruded fonts in FontWriter, documented on API’s page

àRewrote chris’ motion code for him; ship motion is a lot more intuitive now

àRealized I was switching to Ortho Mode like a retard; redid ALL of the ortho mode coordinates (so that rescaling the window resolution keeps everything aligned), including:

            -HUD contents coordinates

            -FontWriter coordinates (also changed API a bit)

            -Radar

àAdded model for default (laser) weapon

àFinished filling in the rest of the HUD: Shield uses, ammo, etc

àSoundSystem revisions, including:

àUpdated to use BASS 2.0 (from 1.8)

àAdded Error reporting

àAdded support for 3D Sounds

àAdded characterFacing and projectileAngle to network messages, removed a lot of excessive math on the client

àRestructured network receive function to never ignore critical event messages (death, room change, etc)

àFixed it so after a death the camera zooms back to the ship’s respawn position

àMade it so game summary pops up after gameover (and in theory, gamecomplete)

àSetup the code to flicker lights when shots are fired, fade lights to darker level while traveling from room1 to room2

àStarted adding resources for ship chunk models (for explosion)

 

5/28/04 – 3D Sound

àMore screenshots on website

àFixed bug where Targeting Computer outline was getting clipped

àFixed bug where server wasn’t sending position of fire events

àAdded 3D Sound to the gameplay!

àCoded ship exploding after matrix-style zoom!

àAdded explosion sound for ship exploding

àDisabled spotlight while ship exploding

àRe-Did how textures are loaded so I can reuse the same texture for ship chunks as main ship

àDifferent colored ships for different players!

àNames appear over “not ready” ghost ships

àFixed targeting computer – the image was coming from too far in front of the ship

àSound for colliding ships

àFixed radar in other rooms

 

5/29/04 – Happy birthday to me.

àFixed problem where spotlights weren’t visible in targeting computer

àInner spheres now render in other rooms

àFixed Chris’ room locations

àSetup camera animations from tube exit to next room

àAdded support for different inner spheres in different rooms

àFixed particleEngine so it works under lighting

 

5/30/04 – Multi-Room Bug Fixes, Powerups, winning/losing, screenshots

àFinished up room-to-room scripting in Camera class

àFixed scoreboard (now actually shows values)

àFixed radar so it doesn’t render previous rooms’ entities during a room change

àFixed menu so everything fits on 800x600

àFixed camera respawn position when you die in another room

àFixed bug where late-joining players would be placed in room1 even if the game had moved to room2 (roomNum added to gamestate)

àChanged ROOM and DEATH to critical events so they are never ignored

àAuto Re-Open targeting computer if it was closed by a room change

àAdded weapon name to HUD

àUpdated FontWriter so PrintImmediate can apply a background; background rendered for loading

àYOU render as an arrow on the radar

àRender laser powerups, flame powerups

àRender laser projectiles, flame projectiles (with orientation/direction)

àYOU WON or YOU LOST displayed on end-game summary

àFixed client networking code so it doesn’t hang if the server was shut down

àPosted a bunch more screenshots

 

5/31/04 – Sounds, Bosses, Ebola, Background Clutter, Powerups

àGathered a bunch of sound files online

àResources for BOSS

àResources for EBOLA

àNew load screen

àChanged DART to ABOMB, FLAME to LIGHTNING

àMajor changes to NetworkMessageTypes (new projectile types for all enemies)

àMore sounds for events

àDifferent types of projectiles for different enemies

àAdded background junk floating around

àFixed bug where PREVIOUS inner sphere would be invisible during room change

àCulling for junk

àCulling for powerups

àCulling for ParticleEngines

àDifferent particleEngine for EACH client

àFixed bug where different clients would show different light levels in room2 (dark room)

àFlickering powerups on radar

àRender A-Bomb explosion!

àSTARTED SCRIPTING BOSS BATTLE at the end of room 4 (different music, camera shift, boss enters from vein…)

 

----------------------------------WEEK 10---------------------------------

6/1/04 – Powerups, Boss Battle, Billboarding, Network Optimization, Looping Sounds, Scores

àRender RailGun & A-Bomb powerups

àRender lifebar for boss

àCleaned up boss entrance animation

àSetup “please wait…transferring to johnny’s liver” messages

àFixed camera setup for boss fight

àHelped andy setup server control dialog

àSetup billboarding for projectiles during camera shifts/in the targeting computer

àSetup billboarding for death explosions

àSorted all of the network structs by memory layout and reduced ints to shorts/chars where possible to optimize network traffic

àEdited sounds & set up looping for rapid-fire events

àRemoved railgun from EVERYWHERE on the client…we’re cutting our losses on this one…

àSetup scoreboard to sort by & render score

àWork on boss death animation (boss explodes, then shows “you won” screen)

àRestructured rapidfire events to be startRapidFire, endRapidFire

 

6/2/04 – Minor bug fixes, MAJOR testing & tweaks

àPut in a check for maxPlayers, maxEnemies, etc in network receive

àFixed a logger bug causing it to crash on quit in the lab

àPut in boss & liver model, revised load screen

àIncreased light levels in room2

àFixed major camera bug that killed someone’s game if a room change happened while they were dying

àMAJORLY worked client-side 3D sound for rapid-fire weapons; sounds perfect & cut down network traffic by 90%

àTurned a few more boss-related messages to CRITICAL

àText and voice shown during room changes

àShaded lifebars

àDisabled ships no longer rendered

àTONS AND TONS AND TONS of play-testing and physics/damage/AI/weapon/projectile/powerup tweaks in the lab

 

6/3/04 – Kill messages, Sounds, SinglePlayer, boss death, bug fixes, TESTING

àReworked how overlay messages work so they aren’t affected by lighting

àChanged network message types for new scoring, and X killed X messages

àAdded X killed by X overlays

àRe-organized scoreboard to show room kills/deaths, total kills/deaths

àResources for texturing for scoreboard background

àResources for you killed someone” sound

àFixed singleplayer mode to run the server in “hidden”

àFinished boss death (cirrhosis flies off the boss while blowing up)

àCorrectly render boss lifebar

àFixed bug where you’d still listen to the network after getting a gameover

àExtended boss’ lifebar to emphasize his badass-ness

àOpps! Boss lifebar wasn’t shaded; fixed

àPosted new screenshots

àLOTS of testing in the lab!

 

6/4/04 – PRESENTATION!!!