9 years later

In some ways, it's hard to believe that it's nearly been a decade since the first 7DFPS challenge. At the same time, as I wrap up this patch for FLAT, it feels like it's long overdue.

I've wanted to find the time to sit down and merge ptitSeb's OpenPandora port (more on that in the previous post) for many years, but contract work and more time-sensitive projects always ended up taking priority. Over the past year, I've been working to try to give more time to smaller projects, and I'm glad that that's allowed me to finally come back to give some more love to FLAT.

In addition to the various todo items I'd turned into issue tickets on the game's source repository, there were also a few outstanding bugs that I think made the game less approachable. I knew that there'd be work to do than I'd have time to share right now, so I tried to focus on things that bring what's already there into focus rather than things that expand the scope of the game.

I wanted to make sure I finally gave attention to ptitSeb's work sooner rather than later, partly because merging would be simpler with fewer intervening commits, but mostly because of how long it'd been. I wanted to integrate most of the changes to be available outside of the Pandora port, so there was some refactoring to do along the way. Thankfully, ptitSeb was still active and willing to test/give feedback on my tweaks, and confirm that the rest of the work for this update didn't create problems.

My next port of call was some difficulty tuning. I would have liked to have added explicit difficulty modes, but as part of triaging, that fell behind other work that I needed to get done. I made changes to enemy skater spawning behaviour and the dragon's second phase behaviour that I think make it harder for the player to feel unfairly overwhelmed. I also tweaked the jump/dodge ability to make it a little more obviously useful.

(2012-06-19 12:05:31 AM) SteelRaven7: but yeah, directional sounds, backgrounds and (hopefully) a bug fix for the invisible crystals would be nice

While hunting down some inconsistent behaviours, I ran the game through Valgrind to look for uninitialised variables and discovered that the game was leaking pretty much everything that wasn't automatically freed. It's understandable that during a 7 day game jam, we didn't prioritise memory management, but it is a little embarrassing that I didn't catch any of that before the initial source release.

Pulling on that thread led to fixes for the invisible obstacles that would sometimes show up (something we'd encountered during the jam!), and a few other long-standing mysteries. Resolving all that also meant that I could feel comfortable moving ahead with implementing a menu system and allowing players to start a new game without having to quit first.

Over a couple of days, I wrote a simple GUI system that allows widgets to be placed relative to each other or screen coordinates that the game would have something flexible that could be used for any future development (like a difficulty selection UI!). This in turn allowed me to migrate some of the command line options I'd added to a settings screen - I think that allowing players to adjust mouse sensitivity or turn on the new "auto heal" option expands the number of people who can potentially enjoy the experience of playing.

I was able to squeeze in some file IO work, so settings are now saved and loaded. This includes keyboard and bindings, but unfortunately I didn't have time to make a UI for configuring that, so anybody who needs alternative bindings will need to manually edit controls.rc.

While working on menu screens to fill in the spaces that the old splash screens had occupied, I discovered that I hadn't saved the source files for any of the splash screens. I was able to pull most of the images I'd used out of my archived renders, but needed to re-render the game over screen image, which gave me the opportunity to do it with a proper reflection rather than just a flipped version of the image.

Along the way, I updated the AudioManager to keep the game's music tracks in sync across play, as Anton and I had originally intended, did an initial pass on gamepad support, added some new dragon sounds, randomised the starting frame for enemy skaters, added a statistics screen showing weapon accuracy and playtime, and finally finished adding a hint system that I'd started work on before the source release. There's still more left on my todo list that I didn't get to, but that's a tiny fraction of what was there before.

With all these improvements, I feel like FLAT is a more clear version of the game we made all those years ago, and one that I hope is a little more broadly enjoyable. Not only that, but I feel like the project is in much better shape for any future development that might appear on the horizon (definitely not making any promises, but I've had fun this past week).

Looking back, I feel like I can directly or indirectly trace many of the opportunities and successes I've had in the past decade back to the Wolfire community, 7DFPS, and FLAT. Over the years, JohannesMP and SteelRaven7 have expressed similar thoughts. At the time of writing, SteelRaven7 is working on getting Ravenfield closer to leaving Early Access, JohannesMP is doing some exciting work on Kerbal Space Program 2, and I'm about to roll onto production on my next "big" game. It's exciting to see that all of us have found ways grow ourselves as developers, and have followed those paths to different and interesting places.

FLAT may not be groundbreaking, and may not even be noteworthy, but it will always be special to me. I'm very glad to have had the opportunity to give it some more attention as it approaches its 10th birthday.

Thanks for reading!


2012_06_16_7DFPS_FLAT_linux.zip 12 MB
Nov 06, 2021
2012_06_16_7DFPS_FLAT_windows.zip 12 MB
Nov 06, 2021
flat-linux-v1.1.zip 13 MB
Version v1.1-16-g5c697169 Nov 12, 2021
flat-mac-v1.1.zip 11 MB
Version v1.1-16-g5c697169 Nov 12, 2021
flat-windows-v1.1.zip 23 MB
Version v1.1-16-g5c697169 Nov 12, 2021


Leave a comment

Log in with itch.io to leave a comment.