Orbit One Dev Diary #1: Frantic Coding
17 June 2010
GAMMA IV was a series of convenient events for me. When Kokoromi announced GAMMA IV, I had little in the way of time-sensitive work, so I made a mental note, “Sure, I should do this.” Then they announced it would take place at GDC 2010, and the mental note got upgraded to, “Clear my schedule, we’re doing this!” But what really sold me on GAMMA IV was the theme: a game that works with only one button (per player) for input. No direction pad, no analog stick, just the A button. My design tends to gravitate toward minimalism, so this was right up my alley.
I spent many an idle moment thinking about what I wanted to make. The themes of flight and a circular arena were the ones that stuck. Notes were taken. Doodles were, err, doodled. I had a solid ten days off from work, and an RROD’d Xbox. How convenient.

One of the initial doodles for Orbit One.
I kept a developer diary while creating Orbit One. There will be many excerpts (such as the one below) throughout these articles. They were too raw/messy to post by themselves, but I hope that by using excerpts (unedited, typos et al) and my added narrative, I can communicate something coherent, while still maintaining an accurate account of how Orbit One was created.
[8:27pm] Starting the OneButton project. I've given this a bit of thought. So far my design decisions are as follows: - your ship circles a blackhole in the center of the screen. - holding down the fire button increases velocity, moving you away from the blackhole - not holding down the fire button makes your ship drift into the blackhole - hold down for a couple of seconds, and your ship will change direction (counter/clockwise) - rapidly hammering the key causes your ship to self-destruct, taking everything around it out too
I’m astonished at how faithfully I stuck to the plan. I expected a good deal of divergence, but it never really happened. Except for the self-destruct thing, not sure what I was thinking there. Blame it on the shmup obsession.
Listening to
Giving “Proof Of Youth” / The Go! Team a first listen
Initially, much of my time was spent just getting the movement to feel right. In my mind, nailing the movement is critical to having a game that plays well. With Orbit One, this was especially true. I wanted the movement itself to not only feel right, but also to feel fun. The one button limitation meant that every action needed to feel fun, or so my logic went. This resulted in me writing three different flight models in three days.
I started out with a simple gravitational flight model. This did not last very long. The issue with a “real” (i.e.: scientifically correct) gravitational model was that it didn’t feel very consistent. My ship was all over the place, and I didn’t really feel in control. I consistently overshot (or undershot) my intended destination. Basically, it wasn’t fun.
[9:50pm] Ditched the gravitation model. Follows a simplified circular model added rings to the world, for a better sense of distance Added a ring around the player, very useful. Loving the movement model now!![]()
Despite the cheerful emoticon, this one didn’t last long either. This flight model had the complete opposite effect of the first, it was too simple and predictable.
[12:26am] re-writing the movement code. again. wanna support things like dives, and have a more genuine feeling of acceleration. "basically, the longer you're diving, the steeper the dive the longer you accelerate the further "UP" you go" third times a charm, right?
Indeed, third time was a charm. With this flight model, I had finally achieved the correct balance between stability and predictability. The movement felt dynamic, but still controllable. Needless to say, I was pretty excited about this.
[12:55am] The movement feels PERFECT! FINALLY! Feel far more confident about direction flip now. Looking good now ... occurs to me that I won't need to over-ride the button with more than one function.
An especially important point here is, “I won’t need to over-ride the button.” I had thought about having direction flipping involving an explicit button combination (double tapping, or some sort of toggling system). The fluid nature of this flight model convinced me to go for a more natural solution.
Listening to Thunder, Lightning, Strike / The Go! Team
[1:10am] OH. SNAP. Direction flip implemented, and it feels *really* good. Quite excited about this.
At this point I mentally scrapped the idea of a self-destruct, or any other secondary action to go along with flying. Most games need two actions: moving and something (shooting, jumping, whatever). Movement is necessary, and the “something” is the fun aspect of the game. With Orbit One, the movement (flying) alone was fun! This drove me to further strip the game down, to strive for minimalism.
It was also at this point that I knew Orbit One was going to work. There was no turning back now.
With ship movement out of the way, I spent a bit of time cleaning up the code and thinking about what was next.
[1:35am] Can of coke: acquired. Next goal: PvP. Basically, if the front of one ship rams into another ship, other ship dies. If it's a head-on collision, both should bounce back or something.
It turns out I didn’t implement the collision aspect. In hindsight, I wish I did. I think it’s the one part new players find confusing.
Listening to Alive 2007 / Daft Punk
[1:47am] Reading about "Reference Equality" in C#. Have I mentioned I hate C#? [2:23am] PvP very roughly implemented. Seems to work well, but again, it's tough to test by myself. I forsee issues: as both ships are travelling fairly quickly & unpredictably, I'm not sure how often collisions will actually occur. Doesn't break the game, but it does mean I probably shouldn't put too much of an emphasis on PvP.
Turns out my assumption was incorrect, players had no problems trying to hurt each other. Shocking! Goes to show how critical player-testing is, especially with multiplayer games. Get it in as early as possible.
The rest of the night was fairly productive.
[2:30am] PvP is done for now ... it's still a bit of a hack (like everything else here) but it "works". [2:37am] Getting a bit sleepy, but too excited now!Next up: a basic implementation of pickups and enemies. Not detailing them tonight, but getting the framework for them to work within setup [3:22am] Alright, basic implementation working. Bed time now!
That’s the thing about being on a roll, sleep stops being relevant. Designing, testing and iterating was incredibly fun.
Listening to Assorted songs by Moby
I spent the next day procrastinating. I should have been working on orbs (known in the excerpts as “pickups”) and enemies. Instead, I worked on the game’s state machine and the player’s state machine. This wasn’t a bad thing per se, these bits are important too. But I was definitely worried about screwing up the orb and enemy design.
Interesting little tweak:
[3:35pm] player state machine working. when the player spawns they get a bit of invincible time. in addition a nice touch is that gravity is kind to them initially. i found that if i didnt press a button on spawn i'd almost instantly die. BAD! So the ship doesn't do steep downward dives for ~1 sec.
I definitely found that testers had an easier time getting into the game because of this relatively minor tweak.
Listening to
Sticking Fingers Into Sockets / Los Campesinos!
My Maudlin Career / Camera Obscura
Eventually, I couldn’t avoid it any longer. I jotted down a bunch of orb and enemy designs and got to work. Soon after, I was in business!
[12:36am] My ideas so far:
pickups
stationary pickups
pickups which slowly swirl toward the blackhole
??? (shy pickups?)
enemies
stationary enemies
enemies that creep toward close players
???
"missile" enemies emitted from the blackhole
Listening to (What’s The Story) Morning Glory? / Oasis
Orbs (or “pickups”) are what the player collects during the game. Each is worth one point. Enemies kill the player upon touching them and cannot be killed. In short, orbs are to be collected, and enemies to be avoided. Both disappear from the arena after some time to make space for new orbs and enemies.
[1:41am] Have a basic implementation of a couple of enemy/pickup types. They feel good. Will need a bit more polish for me to be happy with them though.
It’s amusing how worried I got over doing this, and yet, an hour or so later I was making great progress.
So things were going rather well overall. The player movement felt great, multiplayer was working, pickups/enemies were coming along. And then this happened:
[2:09am] Kinda have a headache. Too many late nights, methinks. Off to bed, will hopefully get the rest of the gameplay done tomorrow, leaving graphics, fx & polish for Sunday.
My prognosis was optimistic, to say the least.
leave a reply
