Devlog

Mutaspire devlog #2: A spire made of text files

Devlog Mutaspire 2 min read

Every floor of Mutaspire is stacked from small hand-made rooms written as plain text. Here's why we chose ASCII over a level editor, and how a seed turns them into forty different floors.

A floor in Mutaspire is one screen wide and a few screens tall. You enter at the bottom, the exits wait at the top, and the Rot follows you up. Floors have to feel hand-made — fair jumps, readable fights — but every run should still be different.

Rooms as text

So every floor is a stack of chunks: small rooms, designed by hand, written as text files. This is the bottom of a boss arena:

........============........
............................
...=======........=======...
............................
.=====................=====.
............................
..P......................B..
############################

# is solid rock, = is a one-way platform you can jump up through, P is where Muta starts and B is where the boss appears. Other letters place enemies (K ground, F flying, T wall-mounted, E elite candidate), hazards (^ thorny roots, v falling stalactites), bounce mushrooms, poison pools, pistons, conveyor belts, hook rings and fossils.

The letters don't say which enemy — only what kind. A K is a Maggot in the Root Caverns, a Hopping Shroom on the Fungal Floors and a Gear Bug in the Rusted Gears, so the same room plays differently in every zone.

Why text?

  • Fast to write. A new room is a minute of typing, not an afternoon in an editor.
  • Easy to check. A small script reads every chunk and makes sure its size is right and that the exit can actually be reached from the start. Broken rooms never make it into the game.
  • Easy to read in a diff. When a room changes, we can see exactly what changed.

Stacking the floor

A normal floor is an entry chunk, three middle chunks and an exit chunk on top. The floor generator picks them with the run's seed, mirrors most of them at random, and decides which enemy markers actually spawn. Same seed, same spire — which is exactly how the Daily Seed works: everyone gets the same floors and the same part pool that day.

Doors, not maps

At the top of each floor are two or three doors, and the icon on each tells you what the next floor is: a Part floor (an elite, then a choice of three parts), an Essence floor, a Cocoon (heal or +1 max heart), an Evolution Tube (level up a part), an Event, a Challenge, a Fossil floor or, rarely, a Wandering Merchant. Floor 4 of every zone is always a safe Nest Room with a shop, and floor 8 is the boss.

That gives you a real decision every 30–45 seconds, and it's never a blind one: you always know what's behind the door.

Next time: the purple stuff rising beneath your feet, and a rule we had to change after playtesting.

Keep reading

More from the devlog

Release Orbit Swarm

Orbit Swarm is out now on Google Play

Our pixel-art space roguelite has landed on Android. Pick a ship, chart the Star Map and fight through 30 waves to the Overlord.

1 min read
Devlog Mutaspire

Mutaspire devlog #3: The Rot, and why the doors open at 70%

A roguelite needs pressure, but pressure that kills you feels cheap. How the Rot keeps you moving without being unfair — and the "kill everything" rule that playtesting talked us out of.

2 min read
Devlog YARIK: Idle Boss Hunt

YARIK devlog #3: Into the Rift

The main game plays itself. The Rift doesn't. Thirty seconds, one character, no auto-attacks — how we turned a too-easy side mode into the most active part of YARIK.

4 min read