Post-jam development

At the end of 7DFPS, SteelRaven7, JohannesMP, and myself had created a game with a beginning, a middle, and an end (read more about that in the previous post). It was still a very rough experience though, and benefitted a lot from a little further work.

After catching up on rest, I spent the following week trying to prioritise the improvements that would have the biggest impact for the least effort. This meant shifting my focus away from art and onto code. JohannesMP and SteelRaven7 had less availability than I did, with JohannesMP being in the middle of moving to the other side of the world.

I'd not done any coding in a while, and I hadn't touched C++ in years. I have a notoriously small maths brain, and there were a couple of times where I got neck deep in a problem and had to wait for SteelRaven7 to come bail me out, but I did manage to get a good amount of stuff done.

Woke up refreshed after 12 hours' sleep and decided to make some gameplay adjustments.

Here's a short summary:
* Adjusted starting healthkit count (is now 0)
* Adjusted supply capsule healthkit count (is now 3)
* Adjusted SMG damage (slightly more powerful)
* Adjusted enemy skater damage (slightly reduced)
* Adjusted enemy skater health (halved)
* Adjusted enemy skater spawn count and max skater variable (now is linked to how many weapons you've picked up)
* Adjusted dragon head health (halved)
* Adjusted dragon terminal flee velocity (reduced)
* Adjusted keyboard look speed (increased)
* Adjusted number of scuff marks (tripled)
* Adjusted aspect of scuffmark images (quick fix to sidestep doing in-engine transformation)
* Adjusted dying time (halved)
* Adjusted shooting logic to prevent players from shooting during the last half of their death
* Adjusted crate visual indicator
* Added default value for Player->gameOver (false)
* Added crate spawn sound
* Added crate destruction
* Added pain sounds
* Added death sound
* Added skating sounds for enemy skaters
* Added pain sounds for enemy skaters
* Added death sounds for enemy skaters
* Added pain sounds for dragon
* Added death sound for dragon
* Added maximum dragon flee distance
* Added maximum spawn time for supply capsules (pickupTime wasn't actually being reset when supply capsules spawned)
* Added spawn sound to supply capsules
* Added firing sound to enemy skaters
* Added minimum firing distance for enemy skaters (to stop point blank shots)
* Added alternate health key (Q and H)
* Added alternate firing key (X and Up)
* Added splash screen for death ending
* Added splash screen for dragon slaying ending
* Added splash screen for pause state
* Added pause state
* Added additional console output to track spawning
* Added partial background support
* Adjusted pistol fire rate (down to 0.15)
* Add basic context sensitive music system
* Add pickup sound for supply capsules

Anton Riehl had expressed interest in making music for FLAT during the jam, but didn't quite have the availability to manage it - understandably, the soundtrack for Receiver had priority! Receiver and FLAT were Anton's first projects that were primarily electronic, making 7DFPS a venue for exploring and expanding new skills for him as well as the rest of us.

During a free evening, Anton worked through composing some short, atmospheric tracks on stream with me offering thoughts and feedback via chat. We back and forthed on style and instrumentation a little at first, but very quickly landed on something that fit, and I can't imagine the game with any different music now (except for the Amok Time combat music from the original Star Trek series that I'd used as a placeholder).

We had decided that we could get by with three tracks with escalating levels of tension, all keeping the same time and being built in a way that could allow them to be cross faded smoothly if in sync. A lonely idle track when skating along with no enemies present, a more tense and dense track when enemy skaters are hunting you down, and an epic track with rhythmic percussion when the Pulse Dragon appears.

A screenshot of FLAT's music being worked on in Ableton Live and Digital Performer

By the end of that first week following the jam, we had added "sky beams" above supply capsules, added new sprites for the scuffs and scratches on the ground ice, added pause and death screens, added distant mountains and a giant crystal cliff, added new enemy projectile images, and added sounds for skating, enemy skating, enemy shooting, enemy pain, and supply capsule spawning.

I also worked on a bunch of balancing changes, adding limits to how long could pass between enemy spawns, how many enemies could spawn at once, and how far away enemies had to be before they could shoot. I tweaked enemy health, and changed healing behaviour so that healing could happen at any point during the "death animation." Last, but not least, I updated the ground and sky to present a night time feel that was more in-line with some concept art I'd painted during the jam.

A screenshot showing FLAT's night environment next to the concept art it's based on

These changes turned the game into a much more solid experience. Game state was now a lot more readable thanks to music - players were more likely to notice and respond to spawning enemies. Supply capsules (which control progression) were harder to miss thanks to the new "sky beams." Pacing had been tightened up by guaranteeing a maximum distance between supply capsule spawns and changes to how and when enemies could spawn. Difficulty was significantly reduced by lowering enemy health and maximum spawn count. Distant scenery provided orientation cues to help make it harder for players to feel disoriented.

Other Wolfire community members, Alex "slime" Szpakowski and aaorris (whom I've sadly lost touch with) had been present across the jam and lent a hand with putting together Mac builds and testing respectively.

Alongside all of that, I also made a little introductory video explaining and demonstrating FLAT's gameplay, which immediately became out of date once we added music and new background art in. With other commitments closing in rapidly, I wasn't sure if music or new backgrounds were something that I would end up being able to implement before I ran out of time, and it felt better to have a video that was less-current than no video at all.

Once we'd put out our week two builds, we took a bit more time away, but not before agreeing to release FLAT under a Free Software licence.

A screenshot of the original GitHub FLAT repo (it has since moved to GitLab)

Toward the end of July, I did some more work on cleaning up the codebase a little, and we released FLAT's source code under the GPL. Later in the year, Nooskewl developer Trent Gamblin contributed some upstream fixes for a bug that broke mouse input in FLAT on MacOS, and contributed a fix for a music related bug. SteamLUG community members soeb and swordfischer (both of whom I've also lost contact with)contributed some miscellaneous fixes and the intial CMake build system. The project wasn't very active, but it was nice to see a handful of people continue to enjoy and poke around with the game and its source.

A photo of FLAT running on the OpenPandora

In May 2013, nearly a year after the initial jam, ptitSeb ported FLAT to the OpenPandora, a Linux based handheld gaming console. This was a wonderful surprise that none of us had expected. The patch included a number of changes that I had been considering implementing, but didn't have time to rework into a form that I could merge with the main codebase without having to rewrite stuff later. I put that on hold with the best of intentions - returning to give FLAT a little more attention had been on my todo list for a while, and I expected to have time for that soon.

Unfortunately, life and career pressures pushed FLAT further and further out of reach. I never let it fall off my todo list, and while it took a lot longer than I had expected, I got there in the end. With a kind of symmetry, life changes and career pressures manoeuvred me into a position where I had to readjust many of my priorities, and as part of that, I was able to find some time between projects to give FLAT the love and attention I've wanted to give it for years.

A screenshot of FLAT

At the time of writing, I've spent the past week or so working on FLAT, which you can find details of in the next post.


Leave a comment

Log in with to leave a comment.