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 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.