23 January 2025
In the previous devlog I had added scripting and events to the game engine. Since then, it's been Christmas, and a large content push to complete what I'm calling the "first zone" of the game. Not without some parts pushing back either.
=> [IMG: Don't Touch My Spikey Balls]
The new rooms play host to a number of new object types. Switches, Spanners, Ducks, Cuddly Toys and a couple of types of the ever-present crates to name a few. Some more hazards found their way in too, in the form of deadly spike traps and spiked objects, and intermittent steam jets.
Some even come on conveyor belts, that old platform game trope, which is a story on it's own. I took a first pass at conveyors by making them out of individual block-sized entities, but it was far too much to be drawn and the framerate tanked dramatically. I'll accept 25 fps but not 10! The second pass was more successful, in which the conveyor itself became standard static blocks and only the objects on it were drawn. A simple "line" object can be added to give the impression of movement on an empty conveyor too.
=> [IMG: An Image Conveys A Thousand Words]
In the grand tradition of game development, movement of objects on conveyors is entirely faked by having the objects just move themselves. Only the player is actually affected by conveyor physics.
Many of these new entities had fairly long-winded ways to figure out which animation they should be using at any time. Instead of hard to follow trees of if/else, I switched to using the existing hash table functions in the engine to look up animation numbers based on the object's state. It simplified away a lot of lines of code.
Platform logic was also simplified by splitting them into two types: one that moves on an axis, and one that collapses on touch. There will be further types to add so this split would have happened eventually anyway.
The prize for the best commit message goes to "Fix rabbit probability calculation" or "Too many wondrous changes to list".
Some of the new rooms presented special challenges.
One particular room took probably two weeks on it's own. It requires the player to push crates to certain locations to access the exits, but needs a lot of special logic to restrict the movement of the crates in various ways so the player can't soft-lock themselves in the room. Crates got customisable and scriptable movement bounds, and collision layers were added to restrict crates without also restricting the player.
Another room has the player riding up on a platform to a higher floor level. The player has to be able to get on to the platform, but then not be able to leave it again until it reaches it's destination. This couldn't be done reasonably with the existing colliders, so some platforms now have the option to "constrain" the player to the platform path for the duration of the ride. The work to add movement bounds to crates came in handy here. It's all connected.
I had to rethink one room with a lot of platforms that were supposed to go in and out of the walls to make a jumping timing puzzle. There was far too much overdraw and the resulting framerate was not acceptable even with just a few platforms. The room was redesigned to use collapsing platforms instead yet still give the player the same style of timing puzzle. If anything it's harder than the original room as the run-along-the-edge cheesing exploit no longer works. Ha.
All of these are shown in the video linked below.
A later room has the player open a steam valve after obtaining a spanner. This activates a number of conveyor belts allowing further progress, as well activating deadly steam jets. As the player approaches the valve a conditional hint animation shows above it, and if they touch it while carrying the spanner a scripted cinematic sequence runs showing the valve opening followed by a peek into other rooms where the conveyors and steam pipes have started up. The scripting engine was extended with new commands to support such sequences.
Cinematics may have been more difficult to add, but I knew they were going to be needed and structured the map and room data around being able to show a room other than the "current" from the start. Thanks, last-year me.
Significant rendering edge cases with clipped bobs are now handled instead of drawing garbage. Simple things you'd think were obvious like "don't draw a bob if it's completely clipped" or "don't draw negative width bobs", as well as more complex interactions with scrolling edges.
I also finally fixed the judder experienced by the player while riding down on a platform. That one had been bothering me for some time!
After a couple of polishing passes I'm almost prepared to call Zone 1 finished for now. This is a major milestone! Around fifty rooms and close to collecting the first of the four Artefacts needed to complete the game. It sounds like a lot of rooms but there are many more to go yet...
Perhaps I'll extend Zone 1 to the first Artefact room, depending on how the map links up. Maybe a couple more wafer thin tweaks as well? There is a small bug list to address too.
I've started looking ahead to the next block of rooms though. The platforming gets more intense and complicated and there are definitely things from the original that won't fit (or won't be practical to fit) into an Amiga, so some rethinking will be required. It'll be nice to get away from the code for a while and design this out.
In other news, I'm getting an experienced pair of hands to help greybox Zone 2 while I work on the engine features it needs. Amiga mockups of the original screens are also being worked on, which may lead to some proper block graphics to replace the Duplo Bricks. It will be great to see how the final game might look.
Speaking of the original game, I have hopes a reveal may be possible soon...
=> Zone 1 play through 2025/01 [YT]
=> amiga This content has been proxied by September (3851b).
=> devlog
=> gamedev
=> isometric
=> retroProxy Information
text/gemini;lang=en