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:

healthGesundheit32two hits with the Old Swordzwei Treffer mit dem Alten Schwert
bite damageBissschaden15you have 100 health at the startdu hast am Anfang 100 Gesundheit
notices you withinbemerkt dich innerhalb3 cellsZellen"aggro" range"Aggro"-Reichweite
gives up beyondgibt auf ab6 cellsZellen
chase speedJagdtempo2.6 cells/sZellen/syou run at 2.8!du rennst mit 2,8!
wander speedWandertempo0.6 cells/sZellen/s
bite reachBissreichweite0.85 cellsZellen
wind-up before the biteAusholen vor dem Biss0.42 ssyour chance to step awaydeine Chance auszuweichen
rest after a bitePause nach einem Biss1.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.

A dark crystal mine full of spiders and glowing triangles
Depth 13: spiders and Triangles in the crystal mines.
Tiefe 13: Spinnen und Triangles in den Kristallminen.

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 ZUSTANDDOES MACHTSWITCHES 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 siehttimer runs out → walk Zeit ist um → walk
walk walk (wandern)wanders near home läuft nahe dem Zuhause herumarrived → 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 Kopfa 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 dichclose 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 fertigdone → chase fertig → chase
search search (suchen)looks around where it last saw you schaut sich dort um, wo sie dich zuletzt gesehen hattimer runs out → home Zeit ist um → home
home home (heimgehen)walks back home läuft nach Hausearrived → 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.

Think All of these make the game easier, but also fairer. When you lose, it should feel like your mistake, not the game cheating.
Denk nach All das macht das Spiel leichter, aber auch fairer. Wenn du verlierst, soll es sich nach deinem Fehler anfühlen, nicht nach einem schummelnden Spiel.

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

A green snake in six poses
Snake: slithers, coils and bites
Snake (Schlange): schlängelt, rollt sich ein und beißt
A pale blue creature with six legs and two arms
Octonaut: slaps, or spins and knocks you over
Octonaut: klatscht, oder wirbelt herum und wirft dich um
A floating angry flame
Fire-face: spits fireballs that set you on fire
Fire-face: spuckt Feuerbälle, die dich anzünden
A floating purple triangle
Triangle: shoots its inner triangles at you
Triangle: schießt seine inneren Dreiecke auf dich
A dark red cat with flames
Fire-cat: prowls, then pounces
Fire-cat: schleicht, dann springt sie
A light blue creature with crab claws and a block of ice for a head
Shraps: pinches with its crab claws, or throws ice balls that slow you down. Its red cousin has a head of fire and throws fireballs.
Shraps: zwickt mit seinen Krebsscheren oder wirft Eisbälle, die dich bremsen. Sein roter Vetter hat einen Kopf aus Feuer und wirft Feuerbälle.
A toxic green creature on two wheels with red eyes floating above it
Spicy: rolls on wheels. It rolls backwards, then shoots a green laser from its floating eyes. Step aside before it bursts!
Spicy: fährt auf Rädern. Es rollt rückwärts und schießt dann einen grünen Laser aus seinen schwebenden Augen. Geh zur Seite, bevor er platzt!

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 werden

Guardians 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. oklch is a way to write colours by lightness, colourfulness and hue. Recolouring
  • colors: neue Farben für Haut und Augen. oklch ist eine Art, Farben nach Helligkeit, Buntheit und Farbton aufzuschreiben. Umfärben
  • ichor: 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!