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
à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
à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!!!