E. Darwin Hartshorn: //Boilerplate

Challenge Accepted

Someone asked me “If you could rebuild Starfighter X in a couple of days in ES, why don’t you?”

Since Starfighter X seems to be languishing in the review process, and since it’s unlikely to garner interest as is, I thought, why not?  If I built it really quick in ES, and then extended it until it was a different (and better) game, I could just post the source code of both the original and ES versions on this website for your edification, and submit the turbocharged extension of the ES version to the review process.

This post will document the process, and track the time.  Keep in mind, I have errands to run today, so this will take a bit.

  •  10:31 Started new project.
  • 10:38 AtomSmasher3D begun; core ES manager in place.
  • 10:42 Created Art Component Library, with a Model3D Component Dictionary
  • 10:48 Created Model Library manager.
  • 11 Began prepping model for use in game.

Now running some errands.

Errands took all day.  Fun fact:  it may be possible for me to get a degree in computer science without accumulating further debt.  It would certainly make for a better day job.

Back in the saddle.

  • 1:51 Resumed.
  • 2:00 Finished prepping the hero model and exported it.
  • 2:01 Imported model in the game.  Test run!  Game doesn’t crash.
  • 2:16 Created model-drawing subsystem, and wired it up to the ES.
  • 2:37 Coded the subsystem to actually draw the model.  Result so far:  it’s the right model, but it’s pointed the wrong way.

Nose up

  • 2:58 After twenty minutes of trying to fix it in Blender,  gave up and rotated the ship in-code.
  • Brief pause to run my wife to a babysitting gig.
  • 4:08 Returned!
  • 4:17 Added and integrated Location component.
  • 4:30 Verlet Integration added.  The ship now moves!
  • 4:39 Tweaked colors.
  • 4:42 Added Drag Component.  Ship now slows to a stop.
  • 4:48 More tweaking.
  • 4:55 Added and integrated Acceleration Component.  Added input components (any minute now, control SHALL be mine; BWAHAH!)
  • 5:03 Created a GamePad manager.
  • 5:11 Added and integrated input components.  You can now move the ship with a Gamepad!
  • 5:20 Added a deceleration multiplier.  When your ship is going one way, and you want it to go the other, it’s acceleration is slightly faster.  Gives tighter control without sacrificing the floaty “I’m in space!” feel.

Right, let’s total it up.  So far, I’ve spent 2.5 hours on this, and we have a ship zooming about a screen under player control with 3D graphics.  Sadly, it took two days to get these two hours in, but with no errands to run tomorrow, I should be able to sink a good six hours into the challenge.

Day three:  We’d better have all the gameplay in place by the end of the day.  Shooting the gun and destroying the bad guys.

  • 12:27 Started
  • 12:42 Added additional models for particles.  Tested them by replacing the ship with them.  They work.
  • 12:56 Hooked up input components for shooting.  Now I need something to shoot.  Time for assemblages!
  • 1:06 Created our first bullet assemblage.
  • 1:19 Ship now shoots!  Need to put some lifespans on those bullets, lest the ones that miss consume my memory.
  • 1:23 Added my favorite component library, Thanatos, with the components Lifespan and DeathFlag.
  • 1:36 Lifespan and deathflag systems in place.  Bullet now dies before it gets offscreen (for visual confirmation.  I want them to live longer than that…)
  • Pausing briefly.
  • 1:48 Return.
  • 1:53 Shooting things is fun.  Um.  Next step: trails and explosions.
  • 2:07 Tried to find a way to generate an evenly spherical distribution of random velocities (trivial in 2D), and could not.  Decided to fake it.
  • 2:11 Created base particle Assemblages.
  • 2:13 Cribbed my random-number generator and trig toolkit from another project.
  • 2:35 Finished making the basic ‘particle system’.
  • 2:38 Particle Spitter added to the bullet.  It’s less graceful-looking than the old tails, but also less work for the moment.
  • 2:46 Exploding on death added.
  • 2:56 Began Prepping enemy model for in-game use.
  • 3:13 Enemy model imported


  • Tested enemy model by using him as the player, complete with player colors.
  • 3:18 Swapped the player model back in, then swapped the bullet model for the enemy and started launching enemies across the screen, because I’m tired, and it’s funny. <– Remember what I said about mad science?
  • 3:41 Changed the colors from being set to being based on a palette component.  The baddies are now green again.


  •  4:03 Don’t have the brainpower left today to start doing enemy AI, so I’m gonna get a scrolling backdrop set up.
  • 4:24 Tiling Grid modeled.
  • 4:56 Grid imported, but exhibiting weird behaviour:

Distopian Grid


That was all lined up a moment ago.  Now it’s odd.

  • 5:10 Turns out my computer can’t handle tiling that many models of that complexity (And I was making them needlessly complex).  So much for Plan A.

Late start, next day:

  • 2:11 Got started
  • 2:29 Added audio.  Strangely, I needed to add a reference to the XAct studio libraries (I say strangely because they’ve always come prereferenced before…)
  • Ah, that would be why… I had it in Reach mode instead of HiDef.
  • Got the background going.
  • We Meet Again
  •  4:51 Made it so when a character shoots, the bullet proceeds forth from the character’s gun (or guns).  Tested it by flying the virus ship and squeezing off a few rounds.  Yes, that took me the last three hours.  That is why we make our games in 2D and not 3D, children.



Well, that’s all folks.  Tomorrow, I have a programming tutorial to write, so this week’s challenge is up.  Conclusion?

Has 12 hours of building the new Starfighter X proven my statement that I can do in ES in a couple of days what it would take me all month in OOP?

Actually, no.  It is taking me almost as long.


Leave a Reply