TwinThrust logoTwinThrust
Devlog banner for TwinThrust: One kit, three worlds
General
Sep 23, 2026

One kit, three worlds

TwinThrust has three chapters out in the world that look nothing like each other: open space, a firelit medieval realm, and a rain-soaked jungle. A fourth is in the making. Almost all of it runs on the same ten hazard scripts. That is not a shortcut I am embarrassed about. It is the reason the game can keep getting harder without ever getting confusing.

The kit

Chapter 1 is 20 levels of open space, and building it produced a small set of hazard scripts: meteors, a gravity well, rotating wreckage, a fly-through switch, a sliding gate, an ion storm, orbit rings, a laser emitter, a lift, and a darkness veil. Ten things. Every level in the chapter is an arrangement of those, plus geometry.

When I started Chapter 2 the obvious instinct was to write ten new ones. Medieval realm, medieval hazards, fresh code. I am glad I did not, because the useful question turned out not to be "what hazards does a castle have?" but "what does the player already know how to read?"

The same script, three costumes

A player who learned in Chapter 1 that the rainbow cloud opens the gate walks into a castle, sees a brazier and a portcullis, and knows what to do without being told. They have not learned a new rule. They have learned that this world has its own word for a rule they already own.

That is the whole return on the technique. Every chapter gets to look completely new while costing the player nothing to read, which means the difficulty curve can carry on climbing instead of resetting to zero at the start of each world.

What actually changes

The reskin is not a sprite swap, because there are almost no sprites. Everything is drawn in code, so a realm is a set of drawing decisions:

  • The sky is one shader with a realm uniform. Space, Ashmoor, the Verdance and the fourth realm are four branches of the same file. The Verdance branch gets a canopy gradient, a parallax leaf ceiling that lifts away as you climb, slanting gold shafts, humid haze and rain.
  • The walls go through one call before a box is placed, which picks a skin. Vine-wrapped temple stone gets mossy courses and winding leaf-vines; mud-hut timber gets planks, lashing-rope bands and knots; a tribal totem gets carved bands of watching eyes in ochre and teal. All deterministic per box, so a wall looks the same every time you fly past it.
  • Everything ambient is automatic: ridge palettes, the world tint, the colour of the floating dust. A level builder does not think about them.
  • The palettes are locked in one file. This matters more than it sounds. Eyeballed hues across ten levels is how a realm ends up looking like nine realms.

The rule that keeps it honest

A reskin has to be truthful about behaviour. The trebuchet boulders in the siege level arc, and they arc because the meteor script already supported parabolic paths, not because I decided medieval projectiles ought to look like that and then faked it.

That constraint matters. The moment a costume lies about what the thing underneath does, the player's transferred knowledge becomes a trap, and you have spent the entire budget of goodwill the technique earns you. If a boulder needs to behave in a way meteors cannot, the answer is to extend the meteor script for both, or to build something new and admit it.

Where it stops working

Chapter 4 is the one I am building now, and it is where I hit the limit of all this. I only found it because I stopped reading the chapter and measured it.

Every individual level was defensible. Each one reskinned something competently and had a reason to exist. But laid end to end, a nine-level stretch turned out to be the same two ideas over and over in different colours, and the chapter felt like nothing was happening even though a great deal was.

Reuse buys you a vocabulary, not a curve. A chapter still has to give each level its own idea. If you only reskin, you have written a set of variations on a theme and called it a campaign.

The fix was not less reuse. It was going back through and making sure each level in that run introduced one thing that was genuinely its own, on top of the shared kit. Which is the same rule Chapter 1 had been following from the start, and which I had quietly stopped applying the moment reskinning made levels cheap to produce.

That is the honest summary of the technique. It makes levels cheap, and cheap levels are exactly the ones you forget to give an idea to.

Discussion