Moth Planet Postmortem (Part 4 - Beta)


Part 4 - Beta

ATLAS: The focus of the beta was finishing every asset, mechanic, and code, so we could focus on building the remainder of the game world.

Immediately after fixing issues with the tutorial and village, we went ahead and started work with the forest, divvying it up into zones. Selene was assigned some zones, and I handled others. As with the Village, we sat and planned player progression. While not a metroidvania proper, we wanted Moth Planet to feel like you could get lost in it, and the first few areas should be expansive, to contrast with the tightness of the ruins.


Figuring out player routes and progression was interesting, and we learned a lot in planning this area. I focused most of my efforts in making the Hunting Grounds and Refuge work as alternate paths to the "end", as well as weaving them into the narrative, while Selene cooked on the Thorn and Deep Woods mazes. The latter of which we decided eventually to make into an alternate route into the caves, to allow for some planned sequence breaking.


SELENE: The thorn maze was kinda fun but daunting to make. I had just made the flooded part of the forest, put a lot of moths on platforms and connected it to the village through a secret room. I focused on placing the obstacles and building its general shape, connecting all the water so that it makes sense... And then started experimenting with moving spikes. 

I had fun, I came up with a few mechanical puzzles such as making water go up and down. We didn't use it much elsewhere, but if we make another game, I'm probably going to use it! 

The Deep Woods used to be a section of the forest called "lost woods" which you would go to. Had tons of portals which interconnected to a huge, immense room that had several more portals. There were a couple puzzles to connect them, much like in the gauntlet, but there were a couple hurdles we didn't manage to work out at the time. 

The setup was really taxing in memory and way too confusing when I tested it out. Granted, on the performance side, we would make improvements that would have helped way down the line, but the amount of confusion it inflicted while being mapless was indescribable. So I decided to throw it all away and redo the entire thing smaller and easier to understand.

And that's how I got to the Deep Woods, a series of rooms that could help you go explore the forest. It still had codes to explore around, but nothing that blocked progression. We had to have a special portal made to get to it so you can exit, and there's only 5 portals inside it counting the one you come from - exploring it was way more manageable than the other version, and with the low amount of portals it wouldn't be a problem. And so I started thinking about what to do with the caves.


MYR: By now, another horror of our choices from the Pre-Alpha came to haunt us. The World Map was getting too big for its own pants, tanking performance exponentially with each new room we were adding. 

The way we made the game, it was impossible to implement seamless room loading without rewriting a massive part of the code. I was resigned to the fact that we would need to delay the game so we could change how we store the game’s state, how rooms talk to each other, how rooms load into the world such that they could load and unload in chunks as you move along the map instead of loading all at once. 

And then I had another of those coding dreams I get when I go to bed stressed about something that will be painful to solve, and woke up the next day with the idea of making a global script that optimizes the entire world by completely disabling all processing for rooms that you don’t need to be doing anything, in relation to the room the player is currently walking into. 

We had already made it so things stop rendering when the player isn’t in the room, or to stop doing physics and other heavy lifting under similar conditions. So GPU wasn’t our issue, it was CPU usage from the sheer amount of nodes calling for harmless functions that weren’t that expensive, but as they accumulated, they stopped being harmless in unison.

What I did, is that I made all rooms deploy a hitbox with extra tiles worth of size on all sizes to find its ‘adjacent’ rooms, as well as check if it had ‘channels’ inside it communicating with a distant room. Having Level 1 relationships (adjacent) and Level 2 relationships (remote), we could use this information so that when the player enters a room. 

Any room that is related to the current room is enabled, and every other room is disabled, except for some special rooms like the out-of-bounds failsafe room, or the room with the cutscene that plays when you die for the first time. That room is disabled only after that, or if you are doing a speedrun. 

This piece of smoke and mirrors was good enough to keep the game above our performance target, we learned a lot from it. I’m certainly never allowing us to make a game that doesn’t use chunk loading, or any other kind of segmented loading if we ever need to make something with a huge interconnected Metroidvania style map again.

There were other things to fix all across the board, many old pre-alpha demons, and when it came to flows and how they looked and functioned, I wasn't too satisfied. They used to be particle based, but I couldn't find a solution to make it look good in the way we were using flows in more than just cardinal directions, so I asked Atlas to make some sprites to use Tiles instead, then I stumbled upon some issues and...

I was faced by the downside of my jack of all trades, master of nothing nature. I'm quick to adapt and find solutions even if I've never used a tool before, I've never 'mastered' any of the programming languages and tools I've used before.

I've used so many things to deploy solutions during my life, and yet I could never tell you about specific quirks and common pitfalls you may find while using said tools. Turns out I didn't really understand much about Godot's conditions for node clipping when trying to clip an object that wasn't in the same Z-Index as the parent, and it's something that ate me for a few days as I tried all sorts of crackpot solutions to make clipping the flow tileset when the flows were polygon shaped to make sure they matched the shape of the polygon. 

Turns out I just needed to change the tileset's Z-Index and all these out of the box ideas didn't need to be conjured up from nothing at all.


ATLAS: During the beta's development was also when we started introducing the anomalies (still called landmarks by then) and the Void Lore rooms, where players you get a glimpse at the vague truth behind the story.  By then I had finished writing the lore bible, and the "Kenosimachia" (roughly "Void-battle" from greek), the name I gave for the collected lore tidbits that the void moths speak. Having the void rooms have this glitchy VHS effect was all Myr, and I think it became essential to the game's mood.

Originally, Myr's void rooms were used as an OoB safeguard, where the (by then) giant Myr would scare the player back into the game. By tying that in with the story, we made it so the Void was an actual pseudo-biome, the space between spaces, and made it so it looked alien and strange, with new art to represent the entity in the distance, and "stars" (they're not really stars).


We took a final bit of feedback before closing it for good. We were turning the beta into a demo, and we couldn't keep going back and changing things anymore, we had to own our game design decisions and move on.

Get Moth Planet

Buy Now$9.99 USD or more

Leave a comment

Log in with itch.io to leave a comment.