The world is not saved. It is made again.

Die Welt wird nicht gespeichert. Sie wird neu gemacht.

A world of Cube Crawler has hundreds of cubes, each with hundreds of floors, stairs and trees. Writing all that down would take a lot of space. The game doesn't.

Eine Welt von Cube Crawler hat Hunderte Würfel, jeder mit Hunderten Böden, Treppen und Bäumen. Das alles aufzuschreiben würde viel Platz brauchen. Das Spiel macht es nicht.

It only needs the seed. The same seed always builds the same cube, down to the last pebble. So the game can throw a cube away and build it again whenever it needs it.

Es braucht nur den Seed. Derselbe Seed baut immer denselben Würfel, bis zum letzten Kieselstein. Darum kann das Spiel einen Würfel wegwerfen und neu bauen, wann immer es ihn braucht.

Think of a cake recipe. You don't keep the cake in the cupboard for a year. You keep the recipe, and bake the cake when you want one.

Denk an ein Kuchenrezept. Du hebst den Kuchen nicht ein Jahr lang im Schrank auf. Du hebst das Rezept auf und backst den Kuchen, wenn du einen willst.

Same seed, same dice Gleicher Seed, gleiche Würfel

But what about what you did?

Aber was ist mit dem, was du gemacht hast?

The recipe makes the cube as it was before you came. It doesn't know that you killed the spiders, opened the chest and left a sword lying on the floor.

Das Rezept macht den Würfel so, wie er war, bevor du kamst. Es weiß nicht, dass du die Spinnen besiegt, die Truhe geöffnet und ein Schwert auf dem Boden liegen gelassen hast.

So the game writes down only the changes. Recipe plus changes: that's your world.

Darum schreibt das Spiel nur die Änderungen auf. Rezept plus Änderungen: Das ist deine Welt.

And when you close the page? Everything is gone, except one thing: whether the music was on. Each visit is a new adventure.

Und wenn du die Seite schließt? Alles ist weg, bis auf eine Sache: ob die Musik an war. Jeder Besuch ist ein neues Abenteuer.

What it writes down

Was es aufschreibt

Everything that you changed in the world goes into one object, called the run:

Alles, was du an der Welt verändert hast, kommt in ein Objekt, das run heißt (dein Durchgang):


      
  • defeated: the names of all monsters you beat.
  • defeated: die Namen aller Monster, die du besiegt hast.
  • unlockedGates: the guardian gates you opened.
  • unlockedGates: die Wächter-Tore, die du geöffnet hast.
  • loot: what is lying on the floor, cube by cube.
  • loot: was auf dem Boden liegt, Würfel für Würfel.
  • chests: the chests you opened.
  • chests: die Truhen, die du geöffnet hast.
  • townPortal: where your town portal stands, if one is open.
  • townPortal: wo dein Stadtportal steht, falls eins offen ist.

And you

Und du

The hero's own numbers live in the notebook too: your level, your experience, your health and your bag.

Die eigenen Zahlen des Helden stehen auch im Notizbuch: deine Stufe, deine Erfahrung, deine Gesundheit und deine Tasche.

new Set() is a special list: each thing can be in it only once, and asking "is this in it?" is very fast. Perfect for "have I beaten this monster already?".

new Set() ist eine besondere Liste: Jedes Ding kann nur einmal darin sein, und die Frage "Ist das drin?" geht sehr schnell. Perfekt für "Habe ich dieses Monster schon besiegt?".

new Map() is a list of pairs: a name and what belongs to it, like a cube's address and the loot lying there.

new Map() ist eine Liste aus Paaren: ein Name und was dazugehört, wie die Adresse eines Würfels und die Beute, die dort liegt.

The shared notebook Das gemeinsame Notizbuch

A name for every monster

Ein Name für jedes Monster

To remember "I beat this spider", the spider needs a name. A name that is the same every time the cube is built again. The game makes one from things that never change:

Um sich "Ich habe diese Spinne besiegt" zu merken, braucht die Spinne einen Namen. Einen Namen, der jedes Mal derselbe ist, wenn der Würfel neu gebaut wird. Das Spiel macht ihn aus Dingen, die sich nie ändern:

'2,-3,1:spider:57'

"The spider in cube 2,-3,1 that starts on floor number 57." Build the cube again, and that spider gets the same name. When the game puts the monsters in, it leaves out every name that is in defeated.

"Die Spinne im Würfel 2,-3,1, die auf Boden Nummer 57 anfängt." Bau den Würfel neu, und diese Spinne bekommt denselben Namen. Wenn das Spiel die Monster hineinsetzt, lässt es jeden Namen weg, der in defeated steht.

The name is also the seed for its loot. That's why a monster always drops the same thing, even if you fight it again.

Der Name ist auch der Seed für seine Beute. Darum lässt ein Monster immer dasselbe fallen, auch wenn du es noch mal bekämpfst.


      

Its own dice, from the world's seed and the floor: the monster's level (±1 around the depth) and its coins. And the name, on the last line, made with a template: text in backticks `...`, with values put in at each ${...}.

Eigene Würfel, aus dem Seed der Welt und dem Boden: die Stufe des Monsters (±1 um die Tiefe) und seine Münzen. Und der Name, in der letzten Zeile, gemacht mit einer Schablone: Text in Backticks `...`, in den bei jedem ${...} Werte eingesetzt werden.

Dying: back to how it was

Sterben: zurück zu dem, wie es war

When you walk into a cube, the game quickly takes a snapshot: a copy of the list of beaten monsters, and a mark for the loot.

Wenn du einen Würfel betrittst, macht das Spiel schnell einen Schnappschuss: eine Kopie der Liste besiegter Monster und eine Markierung für die Beute.

If you die, it puts the cube back the way it was: the monsters you beat since you came in are back, and the coins they dropped (that you didn't pick up yet) are gone. You start again at the entrance.

Wenn du stirbst, stellt es den Würfel so zurück, wie er war: Die Monster, die du seitdem besiegt hast, sind wieder da, und die Münzen, die sie fallen gelassen haben (und die du noch nicht aufgehoben hast), sind weg. Du fängst am Eingang wieder an.

One thing never comes back: a guardian whose gate you opened. That would be too mean.

Eine Sache kommt nie zurück: ein Wächter, dessen Tor du geöffnet hast. Das wäre zu gemein.


      

permanent: the guardians that opened a gate. Then: for every id in defeated, if it wasn't in the snapshot (before) and isn't permanent, take it out again. Next time the cube fills up, that monster is back.

permanent: die Wächter, die ein Tor geöffnet haben. Dann: Für jede id in defeated, wenn sie nicht im Schnappschuss (before) war und nicht dauerhaft ist, nimm sie wieder heraus. Wenn sich der Würfel das nächste Mal füllt, ist das Monster wieder da.

Try it: your bag

Probier es: deine Tasche

Your bag has 24 slots. Potions of the same kind share one slot, in a stack. A sword is one of a kind: each gets a slot and a name of its own. This is the game's real bag code:

Deine Tasche hat 24 Felder. Tränke derselben Sorte teilen sich ein Feld, als Stapel. Ein Schwert ist einzigartig: Jedes bekommt ein eigenes Feld und einen eigenen Namen. Das ist der echte Taschen-Code des Spiels:

Pointing, not copying

Zeigen, nicht kopieren

The quick bar (keys 1 to 6) looks like it holds your potions and swords. It doesn't. It holds little notes that point into the bag:

Die Schnellleiste (Tasten 1 bis 6) sieht aus, als hielte sie deine Tränke und Schwerter. Tut sie nicht. Sie hält kleine Zettel, die in die Tasche zeigen:

  • For potions: { itemId: 'item_potion_health' }, "any health potion". Drink one, and the note now points at the next. The note stays even when none are left.
  • Für Tränke: { itemId: 'item_potion_health' }, "irgendein Heiltrank". Trink einen, und der Zettel zeigt auf den nächsten. Der Zettel bleibt sogar, wenn keiner mehr da ist.
  • For a sword: { instanceId: 'item-7' }, "exactly this one". Drop it, and the note is torn up.
  • Für ein Schwert: { instanceId: 'item-7' }, "genau dieses". Lass es fallen, und der Zettel wird zerrissen.

Why not a copy? With a copy there would be two potions: the one in the bag and the one on the bar. Drink one, and the other would still be there. Free potions! With a note there is only ever one of each thing.

Warum keine Kopie? Mit einer Kopie gäbe es zwei Tränke: den in der Tasche und den auf der Leiste. Trink einen, und der andere wäre noch da. Gratis-Tränke! Mit einem Zettel gibt es jedes Ding immer nur einmal.


      

barRef writes the note: for a stackable thing without a gen (not a generated sword), the kind of thing; otherwise exactly this one.

barRef schreibt den Zettel: Für ein stapelbares Ding ohne gen (kein erzeugtes Schwert) die Sorte; sonst genau dieses.

Think Programmers call such a note a reference. One thing, many places that point to it. You saw the same idea with cube addresses: the world holds the cube, and everything else just knows its address.
Denk nach Programmierer nennen so einen Zettel eine Referenz. Ein Ding, viele Stellen, die darauf zeigen. Dieselbe Idee hast du bei den Würfeladressen gesehen: Die Welt hält den Würfel, und alle anderen kennen nur seine Adresse.

The real code: an empty bag

Der echte Code: eine leere Tasche


    
  • Array(BAG_SIZE).fill(null): a list with a place for every slot, each filled with null, "nothing here".
  • Array(BAG_SIZE).fill(null): eine Liste mit einem Platz für jedes Feld, jedes mit null gefüllt, "hier ist nichts".
  • currency: one counter per coin, made from the coin list with .map: gold, silver, copper, each starting at 0.
  • currency: ein Zähler pro Münze, mit .map aus der Münzliste gemacht: Gold, Silber, Kupfer, jeder fängt bei 0 an.
  • bar: the six notes, all empty.
  • bar: die sechs Zettel, alle leer.
  • equipped: which sword is in your hand, as a name.
  • equipped: welches Schwert du in der Hand hast, als Name.
  • readied: a flask you took in hand to throw instead of the sword, or null.
  • readied: eine Flasche, die du statt des Schwerts zum Werfen in die Hand genommen hast, oder null.
  • nextInstance: the number for the next new thing, so every sword gets its own name: item-1, item-2...
  • nextInstance: die Nummer für das nächste neue Ding, damit jedes Schwert seinen eigenen Namen bekommt: item-1, item-2...
  • version: goes up by one at every change. The screen redraws the bag only when it changed.
  • version: geht bei jeder Änderung um eins hoch. Der Bildschirm malt die Tasche nur neu, wenn sie sich geändert hat.

What to remember

Was du dir merken kannst

  1. Don't save what you can make again. A seed is enough for a whole world.
  2. Speicher nicht, was du neu machen kannst. Ein Seed reicht für eine ganze Welt.
  3. Write down only the changes, in one place: the run.
  4. Schreib nur die Änderungen auf, an einer Stelle: dem run.
  5. Give things names that never change, so you can find them again.
  6. Gib Dingen Namen, die sich nie ändern, damit du sie wiederfindest.
  7. Point, don't copy, so there is only ever one of each thing.
  8. Zeig, statt zu kopieren, damit es jedes Ding nur einmal gibt.