A sword fight, step by step

Ein Schwertkampf, Schritt für Schritt

You click on a Stunder. Your hero walks up and swings. Thwack! Sparks fly, a number pops up, the Stunder staggers.

Du klickst auf einen Stunder. Dein Held läuft hin und schlägt zu. Zack! Funken fliegen, eine Zahl springt hoch, der Stunder taumelt.

That took less than half a second. But the game had to answer four questions:

Das hat weniger als eine halbe Sekunde gedauert. Aber das Spiel musste vier Fragen beantworten:

  1. When does the blade move, and when can it hurt?
  2. Wann bewegt sich die Klinge, und wann kann sie wehtun?
  3. Did it hit? Was the monster close enough, in front, at the right height?
  4. Getroffen? War das Monster nah genug, vorne, auf der richtigen Höhe?
  5. How much does it hurt, and what does the monster do?
  6. Wie sehr tut es weh, und was macht das Monster?
  7. How does it feel? Sparks, sounds, a tiny freeze.
  8. Wie fühlt es sich an? Funken, Geräusche, ein winziges Einfrieren.
The hero swinging a sword at a tall green Stunder
Swinging at a Stunder. The bar over its head shows its health.
Ein Hieb gegen einen Stunder. Der Balken über seinem Kopf zeigt seine Gesundheit.

Try it: the anatomy of a swing

Probier es: die Anatomie eines Hiebs

A swing has three parts. First the wind-up: the arm pulls back. Then a short moment when the blade can hit. Then the recovery: the arm comes back. Swing a few times, then try a different sword.

Ein Hieb hat drei Teile. Zuerst das Ausholen: Der Arm geht zurück. Dann ein kurzer Moment, in dem die Klinge treffen kann. Dann die Erholung: Der Arm kommt zurück. Schlag ein paarmal zu, dann probier ein anderes Schwert.

Chaining, cancelling, lunging

Verketten, abbrechen, nachsetzen

Chaining. You don't have to wait for the whole swing. From the pink line on, a new swing can start. That time is the sword's attack speed: 0.32 seconds for the short sword, 0.66 for the greatsword.

Verketten. Du musst nicht auf das Ende des Hiebs warten. Ab der rosa Linie kann ein neuer Hieb starten. Diese Zeit ist das Angriffstempo des Schwerts: 0,32 Sekunden beim Kurzschwert, 0,66 beim Zweihänder.

Remembering clicks. If you click a bit too early, the game keeps your click for 0.3 seconds and swings as soon as it can. That makes fast clicking feel smooth, not ignored.

Klicks merken. Wenn du ein bisschen zu früh klickst, merkt sich das Spiel deinen Klick 0,3 Sekunden lang und schlägt zu, sobald es geht. So fühlt sich schnelles Klicken flüssig an, statt ignoriert zu werden.

Cancelling. From the green line on, walking away cuts the recovery short. Before that, your feet are planted: you have committed to the swing!

Abbrechen. Ab der grünen Linie bricht Weggehen die Erholung ab. Vorher stehen deine Füße fest: Du hast dich für den Hieb entschieden!

Lunging. If the monster is just a bit out of reach, your hero steps in towards it during the wind-up. You don't have to be pixel perfect. (Only with a sword: a bow, crossbow or staff shoots from where you stand.)

Nachsetzen. Wenn das Monster knapp außer Reichweite ist, macht dein Held beim Ausholen einen Schritt darauf zu. Du musst nicht pixelgenau sein. (Nur mit einem Schwert: Ein Bogen, eine Armbrust oder ein Stab schießt von da, wo du stehst.)

Heavy and light. All swords use the same animation, just played faster or slower. The heavy ones hit harder, reach further and sweep wider, but plant you longer. The light ones are quick.

Schwer und leicht. Alle Schwerter benutzen dieselbe Animation, nur schneller oder langsamer abgespielt. Die schweren treffen härter, reichen weiter und schwingen breiter, aber halten dich länger fest. Die leichten sind flink.

SWORD SCHWERTDAMAGE SCHADENSWING TIME HIEBZEITPER SECOND PRO SEKUNDE
Short Short (kurz)230.32 s 0,32 s72
Medium Medium (mittel)340.42 s 0,42 s81
Long Long (lang)390.48 s 0,48 s81
Broadsword Broadsword (Breitschwert)460.54 s 0,54 s85
Greatsword Greatsword (Zweihänder)600.66 s 0,66 s91

Try it: did the blade hit?

Probier es: Hat die Klinge getroffen?

There is no real sword hitting a real spider. There are just numbers. So the game asks three questions:

Da trifft kein echtes Schwert eine echte Spinne. Da sind nur Zahlen. Also stellt das Spiel drei Fragen:

  1. Close enough? Is the distance smaller than the blade's reach plus the size of the monster's body?
  2. Nah genug? Ist der Abstand kleiner als die Reichweite der Klinge plus die Größe des Monsterkörpers?
  3. In front? Is the monster inside the arc the blade sweeps?
  4. Vorne? Ist das Monster im Bogen, den die Klinge schwingt?
  5. Right height? The blade sweeps from your knees to your chest. A monster on a ledge above you, or below you, is safe.
  6. Richtige Höhe? Die Klinge schwingt von deinen Knien bis zur Brust. Ein Monster auf einem Felsvorsprung über dir oder unter dir ist sicher.

Drag the monster around. Turn the hero. Put the monster on a ledge with the slider.

Zieh das Monster herum. Dreh den Helden. Stell das Monster mit dem Regler auf einen Vorsprung.

The game also checks that no wall is in between, and that each monster is hit at most once per swing.

Das Spiel prüft außerdem, dass keine Wand dazwischen ist und dass jedes Monster pro Hieb höchstens einmal getroffen wird.

This test is only for blades. Arrows, bolts and spells ask their own question while they fly: the next slide.

Diese Prüfung gibt es nur für Klingen. Pfeile, Bolzen und Zauber stellen ihre eigene Frage, während sie fliegen: die nächste Folie.

Bows, crossbows and staffs

Bögen, Armbrüste und Stäbe

Not every hero likes to get close. Monsters also drop bows, crossbows and staffs, and you fight with them just like with a sword: click, and your hero does the rest.

Nicht jeder Held geht gern nah ran. Monster lassen auch Bögen, Armbrüste und Stäbe fallen, und du kämpfst mit ihnen genau wie mit einem Schwert: klicken, und dein Held macht den Rest.

  • Bow: quick, and it shoots furthest. Your hero turns sideways, pulls the string back to the cheek and lets go.
  • Bogen: schnell, und er schießt am weitesten. Dein Held dreht sich seitlich, zieht die Sehne bis zur Wange und lässt los.
  • Crossbow: hits hard, and its bolt can fly right through a monster into the next one. After every shot, your hero pulls the string back and lays in a new bolt.
  • Armbrust: trifft hart, und ihr Bolzen kann durch ein Monster hindurch ins nächste fliegen. Nach jedem Schuss spannt dein Held die Sehne neu und legt einen neuen Bolzen ein.
  • Staff: slow, but its spell bursts where it hits, and hurts everything around it a little too.
  • Stab: langsam, aber sein Zauber platzt da, wo er trifft, und tut allem drumherum auch ein bisschen weh.

The attack still has a wind-up, a moment and a recovery. But at that moment, nothing sweeps: something flies. Every frame, the game moves it a bit and asks: does it touch a monster's body? A wall? Has it flown as far as it can?

Der Angriff hat immer noch Ausholen, Moment und Erholung. Aber in dem Moment schwingt nichts: Etwas fliegt. In jedem Bild bewegt das Spiel es ein Stück und fragt: Berührt es den Körper eines Monsters? Eine Wand? Ist es so weit geflogen, wie es kann?

Shooting from far away is safer, so these hit a bit less hard than swords. And the weapon machine knows what you like: fight with a bow, and about half of the weapons you find are bows.

Aus der Ferne zu schießen ist sicherer, darum treffen sie etwas weniger hart als Schwerter. Und die Waffenmaschine weiß, was du magst: Kämpfst du mit einem Bogen, ist ungefähr die Hälfte der Waffen, die du findest, ein Bogen.

The hero with a bow; an arrow flies towards a big green Stunder
The arrow is on its way. The Stunder doesn't know yet.
Der Pfeil ist unterwegs. Der Stunder weiß es noch nicht.

How much does it hurt?

Wie sehr tut es weh?

The Old Sword you start with does 30 damage. A level 1 spider has 32 health: two hits. A Stunder has 140: five hits.

Das Alte Schwert, mit dem du anfängst, macht 30 Schaden. Eine Spinne auf Stufe 1 hat 32 Gesundheit: zwei Treffer. Ein Stunder hat 140: fünf Treffer.

  • Critical hits: 5% of all hits (1 in 20) do 1.5 times the damage, shown as a bigger, golden number.
  • Kritische Treffer: 5% aller Treffer (1 von 20) machen 1,5-mal so viel Schaden und erscheinen als größere, goldene Zahl.
  • Your level: every level makes your weapon 2% stronger.
  • Deine Stufe: Jede Stufe macht deine Waffe 2% stärker.
  • Better swords: rarer and deeper swords hit harder. Treasure
  • Bessere Schwerter: Seltenere und tiefere Schwerter treffen härter. Schätze
  • Knockback: the monster gets pushed away from you a bit.
  • Rückstoß: Das Monster wird ein Stück von dir weggeschubst.

Stagger and poise

Taumeln und Standfestigkeit

A hit staggers a monster: it stops its attack, is stunned for a moment, and cannot attack again for 0.45 seconds.

Ein Treffer bringt ein Monster ins Taumeln: Es bricht seinen Angriff ab, ist kurz betäubt und kann 0,45 Sekunden lang nicht wieder angreifen.

But if that was all, you could keep any monster stuck forever by hitting fast! So after a stagger, a monster is poised for a while: braced, like a boxer with the guard up. Light hits still hurt it, but don't stop it. It can hit back.

Aber wenn das alles wäre, könntest du jedes Monster für immer festhalten, indem du schnell zuschlägst! Darum ist ein Monster nach dem Taumeln eine Weile standfest (poise): gefasst, wie ein Boxer mit erhobener Deckung. Leichte Treffer tun ihm immer noch weh, halten es aber nicht auf. Es kann zurückschlagen.

Spiders and snakes have no poise. A Stunder is poised for 1.5 seconds, guardians up to 2. A really big hit (a quarter of its health or more) staggers anyway.

Spinnen und Schlangen sind nie standfest. Ein Stunder ist es 1,5 Sekunden lang, Wächter bis zu 2. Ein richtig großer Treffer (ein Viertel seiner Gesundheit oder mehr) bringt es trotzdem ins Taumeln.

Juice: why hits feel good

Juice: Warum sich Treffer gut anfühlen

Game makers call the extras that make actions feel great juice. They change nothing about the rules, but everything about the feeling. Hit the blob with everything on. Then turn things off one by one. Which one do you miss most?

Spielemacher nennen die Extras, durch die sich Aktionen toll anfühlen, Juice (Saft). Sie ändern nichts an den Regeln, aber alles am Gefühl. Hau mit allem eingeschaltet auf den Klumpen. Dann schalte die Sachen eine nach der anderen aus. Was vermisst du am meisten?

The hit pause is tiny: time slows to 3% for 0.055 seconds (0.09 on a kill). You can't really see it, but you can feel it. Turn it off and hits feel like hitting air.

Die Trefferpause ist winzig: Die Zeit läuft 0,055 Sekunden lang nur mit 3% (0,09 bei einem Todesstoß). Sehen kannst du sie kaum, aber spüren. Schalte sie aus, und Treffer fühlen sich an wie Schläge in die Luft.

The real code: the hit test

Der echte Code: der Treffertest


    

Line by line:

Zeile für Zeile:

  1. Only during the hit window (activeStart to activeEnd), only for a blade (not stats.ranged: bows, crossbows and staffs shoot instead), not a dead monster, and not one this swing already hit (s.hits).
  2. Nur während des Trefferfensters (activeStart bis activeEnd), nur für eine Klinge (nicht stats.ranged: Bögen, Armbrüste und Stäbe schießen stattdessen), kein totes Monster, und keins, das dieser Hieb schon getroffen hat (s.hits).
  3. Math.hypot: the distance, by Pythagoras.
  4. Math.hypot: der Abstand, mit Pythagoras.
  5. atan2 gives the direction to the monster. Subtract the way we face (yaw): if the cosine of that angle is smaller than the cosine of the arc, it's outside.
  6. atan2 gibt die Richtung zum Monster. Zieh die Blickrichtung (yaw) ab: Ist der Kosinus dieses Winkels kleiner als der Kosinus des Bogens, ist es draußen.
  7. Do the heights overlap? The monster's body goes from its feet (enemy.y) up by bodyHeight.
  8. Überlappen sich die Höhen? Der Körper des Monsters geht von seinen Füßen (enemy.y) um bodyHeight nach oben.

The demo two slides back calls exactly this function.

Die Demo zwei Folien vorher ruft genau diese Funktion auf.

The real code: damage, stagger, poise

Der echte Code: Schaden, Taumeln, Standfestigkeit


    

Math.max(0, ...) stops health from going below zero.

Math.max(0, ...) verhindert, dass die Gesundheit unter null geht.

hurtT = 0.22: the monster flashes for 0.22 seconds (the drawing code looks at this).

hurtT = 0.22: Das Monster blinkt 0,22 Sekunden lang (der Malcode schaut darauf).

stagger = false: for fire and poison from a thrown flask. Their little ticks hurt, but they never stop the monster.

stagger = false: für Feuer und Gift aus einer geworfenen Flasche. Ihre kleinen Treffer tun weh, halten das Monster aber nie auf.

The staggered line reads: staggered if it died, or it is not poised, or the hit was heavy (|| means "or", ! means "not").

Die staggered-Zeile liest sich so: taumelt, wenn es gestorben ist, oder wenn es nicht standfest ist, oder wenn der Treffer schwer war (|| heißt "oder", ! heißt "nicht").

A stagger stuns it (stun), delays its next attack (cool), makes it think again right away (think = 0) and starts its poise timer.

Taumeln betäubt es (stun), verzögert seinen nächsten Angriff (cool), lässt es sofort neu nachdenken (think = 0) und startet seinen Standfestigkeits-Zeitmesser.

Notice: no sparks, no sounds in here. Just rules. Rules and pictures

Fällt dir auf: Hier drin keine Funken, keine Geräusche. Nur Regeln. Regeln und Bilder