Robokrusher Development Diary

As Robokrusher was being developed, I maintained a text file with ideas and to-do tasks in it. Lots of stuff got pruned because the game would never have been finished otherwise, but the things that bubbled up to the top of the priority list wound up here as they were completed. The first three months were all-out; probably averaging 14 hours a day. Things gradually got back to normal in the latter half of the project. The last month was mostly playtesting and balance and tweaking and polishing with the entire development cycle taking about 6 months.

08/12/2015 Let's write a real game...
Add a background graphics displayer for lobby, load screens, or config UI  OK
Add a game state machine                                                   OK
Add support for drawing lists of robots                                    OK
Add grunt rendering                                                        OK
Fix memory free crash (don't free actor chains when freeing qnodes)        OK
Fix bug where esc switch seems to overwrite cam[0]                         OK
Write relink function, use it to move player between qnode chains          OK
Add weapon firing and bullet actor creation                                OK
Add projectiles, bullet hosing, and collision detection                    OK
Get rid of user_t. Move player into actor.                                 OK
Make all min/max coordinates 0-based to simplify bounds checking           OK
Add player AI for attract mode - this is awesome, game is testing itself   OK
Add last monster dead detection                                            OK
Add level reloading                                                        OK
Add level timer                                                            OK
Add robot AI                                                               OK
Make grunts go faster as level timer increases                             OK
Add level reloading with correctly placed remaining mobs                   OK
Add grunt ability to kill player                                           OK
Add third person cam and attract mode cam switching                        OK
Add player lives and game over reset to attract mode                       OK
Add wave, lives, score display in play mode                                OK
Draw floor shoulders falling away into the abyss                           OK
Make menus flags rather than states                                        OK
Make menu in play state pause the game                                     OK
Add timed states and displays between level loads/reloads/gameovers        OK
Convert level definition files to 2-chars per tile                         OK
Show last wave and hi score on attract page                                OK
Make load_texture handle 32-bit alpha channel BMPs                         OK
Add console commands to set invulnerability or invisibility times          OK
Add particle system - oh my yes.. should've done this earlier              OK
Add color aging mechanism to particle system                               OK
Write sprite loader; allow explode to specify sprite chain as particle     OK
Postpone alpha sprites to separate rendering chain to fix blending         OK
Apply gravity to mobs and start them at random heights on level changes    OK
Added 3D sound based on openal32.dll                                       OK
Write WAV loader that uses filenaming system to group similar sounds       OK
Write random sound sample chooser for multiple sounds in same groups       OK
make console freeze everything like menu                                   OK
Don't increase STATE_PLAY elapsed_time while menu has paused game          OK
don't crash if sound files not found                                       OK
default to cam 2 overhead                                                  OK
add cam 3 way overhead.. did better: made overhead cam configurable        OK
Add sounds for level cleared, player spawn, death, and game over           OK
Make SOURCE_VEHICLE stop looping on level clear                            OK
Don't crash in render_partices() if particle is missing its sprites        OK
Cliff's ExplosionGenerator w/ blue bkgd, gimp convert blue to alpha        OK
Fix texturing of corners - look at floor116.bmp                            OK
Add graphics to page surface system and added title screen                 OK
Paint up an Enter Human Identifier dialog box                              OK
Add a dialog system for data entry, configuration settings etc             OK
Add saving/loading of hi scores                                            OK
Design Enter Initials UI and add entry of initials to scores[index]        OK
replace actor.c FLAG_HISCORE with going straight to DIALOG_HIGHSCORE       OK
Clear dlg->text after storing initials                                     OK
Allow use of -1.0 in amounts for text_page_image; calculate it             OK
Add a way to set dlg->up & dlg->dn pointers / dialog navigation            OK
Add Resume / Quit menu while playing                                       OK
Make attract mode periodically cycle through a High Scores page            OK
Add score-holding text elements to SURFACE_HIGHSCORES                      OK
Write a function that copies from quadmain->scores to SURFACE_HIGHSCORES   OK
Make console show up over the top of everything (subbed .0001 from texts)  OK
Add Play / Exit menu for attract mode                                      OK
Show last initials in attract mode score                                   OK
Make setting FLAG_DIALOG clear FLAG_TITLE and FLAG_HISCORES                OK
Convert menu system to use the text_page system..? menu system obsoleted   OK
Built hulk and wizard bots in quest                                        OK
Make quest edit, save, and load glTexCoord(x,y) values for polys           OK
Write a QST to .C converter for rendering robots built in Quest            OK
Add actor->health (to allow some mobs to take multiple hits)               OK
Add harvester bot                                                          OK
Add wizard bot, electricity balls, attack sounds                           OK
Figure out why harvesters and wizards spaz out without LOS  ai_timer = 0   OK
Add quadmain->camflags.. tracks cams used after level 1 for tagging scores OK
Don't allow player death if flags & LEVEL_CLEARED                          OK
Keep track of camera used: special tag scores that stayed in one cam       OK
Add parameters for things like player start yaw and drops in levels        OK
Add "confetti" explosion for drops                                         OK
Allow ACTOR_DROP pickup by player                                          OK
Write objref linking mechanism, preallocate and free objrefpool in game.c  OK
Add drops to the droplist in actor_create()                                OK
Remove drops from the droplist on pickup, harvest, or loadlevel()          OK
Make Harvesters target ACTOR_DROPs                                         OK
Add ACTOR_DROP rendering                                                   OK
Added mortar robot and grenades, made them act like minelayers at first    OK
Don't spawn badness > 0 mobs on voids                                      OK
Add support for random and noharvest drop options                          OK
Add option for drops to appear after N mobs remain                         OK
Make sound effect for bullets bouncing off health>1 mobs ricochet??.wav    OK
Added aiming sound to mortar bots                                          OK
Add SPRITE_FLAG_LOOP to particle sprite options for animations             OK
Add a timeout, like progress, to particles for wizspark                    OK
Add wizard's proximity lightning attack effect.. meh                       OK
Add a green color transition and make harvesters explode in green          OK
Added skyboxes... wowza                                                    OK
Add SKYBOX parm to level definitions and do loading/unloading right        OK
Don't allow pickup of drops that haven't spawned yet                       OK
Write save_config(), added some command line config options                OK
Make grenades that slide off edge fall into the abyss                      OK
Add decal debris system for burn and scorch marks                          OK
.qst -> .obj translator, .obj loader, debris models                        OK
Added attract sound, faster, notitles configs and commands                 OK
Write program that reads a RGBA BMP and counts alpha distribution          OK
  Add switch that scales alpha down to get rid of ghost blocks             OK
Add lingering smoke particles                                              OK
Added configurable FOV                                                     OK
Add y-offset nudging to surfaces/dialogs to align text and graphics        OK
Use Inno setup utility to create a distributable package                   OK
Finished config dialogs; Game, Keymap, Video, Audio                        OK
10/12/2015 We seem to have a real game
Write BMP compressor/loader                                                OK
make config lists not wrap; they're short enough to have top and bottom    OK
get rid of demo levels and demo messages configs                           OK
add Reset to Defaults to all config dialogs                                OK
get rid of Color Quality, default it to system in game.cfg                 OK
change video options to one slider from 320x200 window to Desktop          OK
Give bullets a range, at which point they particulate                      OK
Combine wall, floor, backgd into single skyboxNN list                      OK
Add "rook" trebuchet. Doesn't move. limited range. Powerful & big health   OK
Add actor texture redefs to load_level_def.. intended esp. for walls       OK
Fix annoying player AI aim jerkiness NOTE: Leave it as-is for the bots     OK
player AI: don't aim at things that are too far away                       OK
Add indestructable walls as nonhostile actors                              OK
Add ogg file music player                                                  OK
Add effects_vol and music_vol and make master affect everything            OK
Fixed bug with player AI slowdown - dampening should be state play only    OK
Add symbols for invis and invuln drops                                     OK
Make changing levels (but not reloading) terminate powerups                OK
Allow settings during STATE_PLAY                                           OK
Remove SURFACE_RUNNING if dialog is brought up in play mode                OK
Add mob health meter: display health of last health > 0 mob shot           OK
Make shooting terminate invisibility                                       OK
make player AI lead targets                                                OK
added difficulty tuning with per-mob-type scaling and caps                 OK
Change qnode leaf, empty, is_floor, and is_solid to qnode flags            OK
added music subdirectories and playlists, controllable via console         OK
Add association of qnodes with nearest LOS waypoint if level is pathed     OK
Add cinematic scripting and start program with camera cuts set to music    OK
Made dialog font configurable                                              OK
Make player AI use A* on waypoints if nothing has been hit for awhile      OK
Reduce drop radius                                                         OK
get rid of double pixels at bottom of font - made dialog font configurable OK
turn on GL_LIGHTING; add normals to models                                 OK
Add A* to wizard and mortar bots w/ optimization for path reuse            OK
Add Launcher bot; fires low slow bombs over voids                          OK
Add invis and invuln remaining indicators                                  OK
Make tank yaw acceleration and deceleration configurable                   OK
Add time freeze powerup with clock icon                                    OK
Add thermometer bar time indicator to powerup indicators                   OK
Debug bmpressor and bmp_load with -3 RGB files                             OK
Make command line set invuln NNN persis across levels                      OK
Fix line_of_sight() qnodea[(int) rounding problem by adding 0.0001f        OK
Re-fix qnode_line_of_sight by switching to floats and adding 0.5f          OK
Bank monster scores, zero on death, award on level clear                   OK
Extra life sound is sometimes not playing... needs own slot?               OK
Add path to snaky wave level but add flag for actors to ignore A*          OK
Add wizard proximity attack visual                                         OK
Make player tank blow up with red chunk shower                             OK
Add a switch or game.cfg entry that allows levels directory override       OK
Added "arena" additional levels and install second icon to play them       OK
Make cfg screen init to correct current display mode if using system       OK
Add short delay state between demo mode level clears / player deaths       OK
12/27/15 I want to do this for a living now
Add difficulty settings "Relaxing", "Fun", Neverwracking, IHATETHISGAME!   OK
Add "boss"; very high health, lobs artillery, heals by eating bonuses      OK
Balance levels, add some more, more playtesting, get some feedback         OK
Add visual explosion to rook launches                                      OK
Verified working on Win 2000 through Win 10. Wine Nvidia ok, probs w/ ATI  OK
Make "Compatibility Test" and "Evaluation NFD" versions                    OK
build web site, add humble payment thingie                                 OK
1/30/16 I'm pretty much done with the game. Now for the really hard part.