A monster is a list of numbers
Ein Monster ist eine Liste von Zahlen
To the game, a spider is not scary at all. It is a short list of numbers, called a profile:
Für das Spiel ist eine Spinne überhaupt nicht gruselig. Sie ist eine kurze Liste von Zahlen, ein sogenanntes Profil:
| healthGesundheit | 32 | two hits with the Old Swordzwei Treffer mit dem Alten Schwert |
| bite damageBissschaden | 15 | you have 100 health at the startdu hast am Anfang 100 Gesundheit |
| notices you withinbemerkt dich innerhalb | 3 cellsZellen | "aggro" range"Aggro"-Reichweite |
| gives up beyondgibt auf ab | 6 cellsZellen | |
| chase speedJagdtempo | 2.6 cells/sZellen/s | you run at 2.8!du rennst mit 2,8! |
| wander speedWandertempo | 0.6 cells/sZellen/s | |
| bite reachBissreichweite | 0.85 cellsZellen | |
| wind-up before the biteAusholen vor dem Biss | 0.42 ss | your chance to step awaydeine Chance auszuweichen |
| rest after a bitePause nach einem Biss | 1.2 ss | "cooldown""Abklingzeit" |
All monsters share the same brain. Only their numbers (and models) are different.
Alle Monster teilen sich dasselbe Gehirn. Nur ihre Zahlen (und Modelle) sind verschieden.

Try it: a spider's brain
Probier es: das Gehirn einer Spinne
Drag the hero (the white dot) around. Get close to the spider, but stay behind the wall: it can't see you! Sneak up from behind, then step in front of it. When it's winding up (red), step away quickly. The dashed line is how far it can see: far ahead, not so far behind. Hide from it, and it hunts for you a little while, then searches where it last saw you (the yellow square), then gives up.
Zieh den Helden (den weißen Punkt) herum. Geh nah an die Spinne heran, aber bleib hinter der Wand: Sie kann dich nicht sehen! Schleich dich von hinten an, dann tritt vor sie. Wenn sie ausholt (rot), geh schnell weg. Die gestrichelte Linie zeigt, wie weit sie sehen kann: weit nach vorne, nicht so weit nach hinten. Versteck dich, und sie jagt dich noch eine Weile, sucht dann dort, wo sie dich zuletzt gesehen hat (das gelbe Quadrat), und gibt dann auf. (Die Zustände heißen im Code idle, walk, alert, chase, attack, search und home.)
One mood at a time: a state machine
Immer nur eine Laune: ein Zustandsautomat
The spider's brain is always in exactly one state, like a mood. Each state has its own job, and its own rules for when to switch to another one. This is called a state machine.
Das Gehirn der Spinne ist immer in genau einem Zustand, wie in einer Laune. Jeder Zustand hat seine eigene Aufgabe und eigene Regeln, wann er in einen anderen wechselt. Das nennt man Zustandsautomat.
| STATE | ZUSTAND | DOES | MACHT | SWITCHES WHEN | WECHSELT, WENN |
|---|---|---|---|---|---|
| idle | idle (ruhen) | rests and looks around, turns to you if it half sees you | ruht und schaut sich um, dreht sich zu dir, wenn sie dich halb sieht | timer runs out → walk | Zeit ist um → walk |
| walk | walk (wandern) | wanders near home | läuft nahe dem Zuhause herum | arrived → idle | angekommen → idle |
| alert | alert (bemerken) | noticed you: turns to look, a "!" over its head | hat dich bemerkt: dreht sich zu dir, ein "!" über dem Kopf | a moment later → chase | einen Moment später → chase |
| chase | chase (jagen) | follows its path to you; between bites it circles you | folgt seinem Weg zu dir; zwischen den Bissen kreist sie um dich | close and ready → attack lost you → search | nah und bereit → attack dich verloren → search |
| attack | attack (angreifen) | winds up, bites, finishes | holt aus, beißt, macht fertig | done → chase | fertig → chase |
| search | search (suchen) | looks around where it last saw you | schaut sich dort um, wo sie dich zuletzt gesehen hat | timer runs out → home | Zeit ist um → home |
| home | home (heimgehen) | walks back home | läuft nach Hause | arrived → idle | angekommen → idle |
From idle, walk, search or home, noticing you switches to alert, and it calls the monsters near it. A hit switches straight to chase.
Aus idle, walk, search oder home wechselt sie zu alert, wenn sie dich bemerkt, und ruft die Monster in ihrer Nähe. Ein Treffer wechselt sofort zu chase.
Why is this a good idea?
Warum ist das eine gute Idee?
Each state is small and easy to understand. To add a new behaviour (say, "flee when hurt"), you add one state and a few switches. You don't have to rethink everything.
Jeder Zustand ist klein und leicht zu verstehen. Für ein neues Verhalten (zum Beispiel "fliehen, wenn verletzt") fügst du einen Zustand und ein paar Wechsel hinzu. Du musst nicht alles neu durchdenken.
Guardians use one more state, defend: they stay near their post and only charge when you come close to their gate.
Wächter benutzen noch einen Zustand, defend (verteidigen): Sie bleiben nahe ihrem Posten und stürmen nur los, wenn du ihrem Tor zu nahe kommst.
Most game characters, from Pac-Man's ghosts to big game bosses, use a state machine somewhere inside.
Die meisten Spielfiguren, von den Geistern in Pac-Man bis zu großen Spiel-Bossen, haben irgendwo innen einen Zustandsautomaten.
Thinking slowly on purpose
Absichtlich langsam denken
Thinking five times a second. Monsters move every frame, but they only decide about every 0.2 seconds (a little more or less, so a pack doesn't all decide at once). Searching for paths is work, and with 20 spiders in a room, it adds up. It also looks more natural: real animals don't react instantly either. When a monster notices you, it even takes a moment (the "!") before it comes for you.
Fünfmal pro Sekunde denken. Monster bewegen sich in jedem Bild, aber sie entscheiden nur ungefähr alle 0,2 Sekunden (mal etwas mehr, mal etwas weniger, damit ein Rudel nicht gleichzeitig entscheidet). Wege suchen ist Arbeit, und mit 20 Spinnen in einem Raum summiert sich das. Es sieht auch natürlicher aus: Echte Tiere reagieren auch nicht sofort. Wenn ein Monster dich bemerkt, braucht es sogar einen Moment (das "!"), bevor es auf dich losgeht.
Wind-ups you can see. Every attack starts with a wind-up animation. This is called a telegraph: the monster tells you what it's about to do. Once it starts, it is committed and can't change its mind. That's your chance to dodge!
Ausholen, das man sieht. Jeder Angriff beginnt mit einer Ausholbewegung. Das nennt man eine Ankündigung (englisch: telegraph): Das Monster verrät dir, was es gleich tun wird. Sobald es anfängt, ist es festgelegt und kann es sich nicht anders überlegen. Das ist deine Chance auszuweichen!
Aiming stops early. A Fire-face turns to aim at you, a little ahead of where you are running, but stops turning before it spits. So changing direction at the right moment makes it miss.
Das Zielen hört früh auf. Ein Fire-face dreht sich, um auf dich zu zielen, ein bisschen vor die Stelle, zu der du läufst, hört aber auf zu drehen, bevor es spuckt. Wenn du im richtigen Moment die Richtung wechselst, schießt es also daneben.
A moment of peace. When you enter a cube, monsters may chase you, but they don't attack for 1.2 seconds (or until you hit one). No getting bitten the moment you arrive.
Ein Moment Ruhe. Wenn du einen Würfel betrittst, dürfen Monster dich jagen, greifen aber 1,2 Sekunden lang nicht an (oder bis du eins triffst). Kein Biss in der Sekunde, in der du ankommst.
No contact damage. Just bumping into a monster never hurts. Only real attacks do.
Kein Berührungsschaden. Einfach gegen ein Monster zu laufen tut nie weh. Nur echte Angriffe.
Meet the monsters
Lerne die Monster kennen
Nine species live in the depths. They are all made in Blender by code. Besides the spiders, which come in big packs, and the Stunder, a huge, slow beast that rams you with its head and always knocks you over, there are these: How they're made
Neun Arten leben in den Tiefen. Alle werden in Blender von Code gebaut. Neben den Spinnen, die in großen Rudeln kommen, und dem Stunder, einem riesigen, langsamen Biest, das dich mit dem Kopf rammt und immer umwirft, gibt es diese: Wie sie gemacht werden







Species, kinds and levels
Arten, Sorten und Stufen
A kind is a species with new colours and stronger numbers. No new model is needed! A Blood viper is a snake that is red, with:
Eine Sorte (kind) ist eine Art mit neuen Farben und stärkeren Zahlen. Kein neues Modell nötig! Eine Blood viper (Blutviper) ist eine Schlange, die rot ist, mit:
| health | Gesundheit | ×1.4 | ×1,4 |
| damage | Schaden | ×1.4 | ×1,4 |
| speed | Tempo | ×1.2 | ×1,2 |
| size | Größe | ×1.1 | ×1,1 |
The snakes get stronger the deeper you go: Grass snake (green), Sand viper (ochre), Blood viper (red), Shadow mamba (almost black). Ice levels have Frost adders, the swamp has Venom adders.
Die Schlangen werden stärker, je tiefer du kommst: Grass snake (grün), Sand viper (ocker), Blood viper (rot), Shadow mamba (fast schwarz). In den Eisgebieten gibt es Frost adders, im Sumpf Venom adders.
A kind can even hide parts of the model. The Shraps' model has two heads, one of ice and one of fire: the Shraps shows the ice one, the red Fire shraps the fire one, and it throws fireballs instead of ice balls.
Eine Sorte kann sogar Teile des Modells verstecken. Das Modell des Shraps hat zwei Köpfe, einen aus Eis und einen aus Feuer: Der Shraps zeigt den aus Eis, der rote Fire shraps den aus Feuer, und er wirft Feuerbälle statt Eisbällen.
Preview them all: tools/kinds.html.
Schau sie dir alle an: tools/kinds.html.
Levels
Stufen
A monster's level is about the depth it lives at: level 1 near the top, level 20 at the core. Every level adds:
Die Stufe eines Monsters ist ungefähr die Tiefe, in der es lebt: Stufe 1 oben, Stufe 20 am Kern. Jede Stufe gibt:
- +17% health
- +17% Gesundheit
- +10% damage
- +10% Schaden
- +25% experience and coins
- +25% Erfahrung und Münzen
...of its level 1 numbers. So a level 11 spider has 32 × (1 + 0.17 × 10) = 86 health.
...gemessen an seinen Zahlen auf Stufe 1. Eine Spinne auf Stufe 11 hat also 32 × (1 + 0,17 × 10) = 86 Gesundheit.
Monster levels never follow your level. Going back up to easy depths is safe, but gives little experience.
Monsterstufen richten sich nie nach deiner Stufe. Zurück in leichte Tiefen zu gehen ist sicher, bringt aber wenig Erfahrung.
Growing stronger Stärker werdenGuardians and balance
Wächter und Balance
Guardians
Wächter
Every well down is guarded by a descent guardian (gold), and one or two gates on the way by side guardians (pink). They are normal species, promoted: much more health, harder hits, and lots of poise.
Jeder Brunnen nach unten wird von einem Brunnenwächter (gold) bewacht, und ein oder zwei Tore unterwegs von Torwächtern (pink). Es sind normale Arten, befördert: viel mehr Gesundheit, härtere Treffer und viel Standfestigkeit.
Their gate stays sealed with a red cross until the guardian dies. Killing the others is not enough. Their arena has twice the usual monsters, and they defend together.
Ihr Tor bleibt mit einem roten Kreuz versiegelt, bis der Wächter tot ist. Die anderen zu besiegen reicht nicht. In ihrer Arena gibt es doppelt so viele Monster wie sonst, und sie verteidigen gemeinsam.
Guardians always drop good loot.
Wächter lassen immer gute Beute fallen.
Fair and fun: balance
Fair und spaßig: Balance
The game is tuned so you stay about two levels above the depth you're at, and fights feel the same all the way down: a spider always takes about 1 hit, a Stunder 3 to 5.
Das Spiel ist so eingestellt, dass du etwa zwei Stufen über der Tiefe bleibst, in der du bist, und Kämpfe sich bis ganz unten gleich anfühlen: Eine Spinne braucht immer etwa 1 Treffer, ein Stunder 3 bis 5.
How do the makers know? A tool plays the game in fast-forward, using the real tables, and prints where a player would be at each depth:
Woher wissen die Macher das? Ein Werkzeug spielt das Spiel im Schnelldurchlauf, mit den echten Tabellen, und druckt aus, wo ein Spieler in jeder Tiefe stehen würde:
node tools/balance.mjs
Details for grown-ups: docs/balance.md
Details für Erwachsene: docs/balance.md
The real code: deciding
Der echte Code: entscheiden
notices: it hears you right next to it (HEAR). Else it must see you: a clear line from its eyes to your chest (clearLine), within aggro if you're in front of it, half that if you're behind it.
notices: Direkt neben ihr hört sie dich (HEAR). Sonst muss sie dich sehen: eine freie Linie von ihren Augen zu deiner Brust (clearLine), höchstens aggro weit, wenn du vor ihr bist, halb so weit, wenn du hinter ihr bist.
While chasing (hunt), it plans a new path every think, to where it last saw you. e.lost counts up while it can't see you. After 3 seconds of that (6 if you hit it), or once it gets there and you're gone, it searches. A monster can't climb or jump, so if you're out of reach, it walks as close as it gets.
Beim Jagen (hunt) plant sie bei jedem Nachdenken einen neuen Weg, dorthin, wo sie dich zuletzt gesehen hat. e.lost zählt hoch, solange sie dich nicht sieht. Nach 3 Sekunden davon (6, wenn du sie getroffen hast), oder wenn sie dort ankommt und du weg bist, sucht sie. Ein Monster kann weder klettern noch springen; wenn du außer Reichweite bist, läuft es so nah heran, wie es geht.
e.think is a countdown. When it reaches zero, think, and start again at about 0.2. That's how "five times a second" works.
e.think ist ein Countdown. Wenn er null erreicht: nachdenken und wieder bei ungefähr 0,2 anfangen. So funktioniert "fünfmal pro Sekunde".
The demo uses the same rules on a little grid.
Die Demo benutzt dieselben Regeln auf einem kleinen Gitter.
The real code: making a kind
Der echte Code: eine Sorte machen
enemyKind(SNAKE, {...}) copies the snake's profile and changes it:
enemyKind(SNAKE, {...}) kopiert das Profil der Schlange und ändert es:
label: its name.reason: what the game says if it kills you.label: ihr Name.reason: was das Spiel sagt, wenn sie dich erwischt.colors: new colours for its skin and eyes.oklchis a way to write colours by lightness, colourfulness and hue. Recolouringcolors: neue Farben für Haut und Augen.oklchist eine Art, Farben nach Helligkeit, Buntheit und Farbton aufzuschreiben. Umfärbenichor: the colours of its blood droplets when hit.ichor: die Farben ihrer Blutströpfchen, wenn sie getroffen wird.mods: multipliers for its numbers.mods: Multiplikatoren für ihre Zahlen.
Then it's added to the list ENEMY_KINDS and to the rosters of the depths where it should live. That's it: a new monster in 10 lines!
Dann kommt sie in die Liste ENEMY_KINDS und in die Besetzungslisten der Tiefen, in denen sie leben soll. Fertig: ein neues Monster in 10 Zeilen!