Der Dungeon hat jetzt Gegner, und man kann sterben.
- game/action.rs: sieben Schadenstypen, fuenf der zehn Aktionen, Target
- game/condition.rs: Bedingungsgrammatik (Liste = UND, not je Eintrag)
- game/event.rs: zwoelf Events, Trigger als vierte Wirkungsform
- game/combat.rs: Treffer- und Schadensformel mit drei Klemmbereichen
- Game::apply, drain_events (FIFO), Initiative, Rundenablauf aus Ticket 14
- data/: abilities-, creatures- und modifiers-Registry, [balance] feldweise
- ui/: Combat-Screen mit Faehigkeitsmenue und Sperrgrund
Drei Befunde:
- Die Trefferformel war toter Code — jeder Angriff traf. Nur der Compiler
hat es gemeldet ('hit_chance is never used'). Test haelt sie am Leben.
- Die Warteschlange war ein Stack (pop statt pop_front), obwohl Ticket 08
ausdruecklich 'haengt es hinten an' sagt. Jetzt VecDeque.
- Benannte Modifikatoren (core:poisoned) hatten keine Registry — Ticket 01
laesst apply_modifier per ID referenzieren, aber keine der zwoelf
definierte sie. Das ist die dreizehnte.
43 Tests.
59 lines
1.9 KiB
TOML
59 lines
1.9 KiB
TOML
# Eine Faehigkeit ist ein benanntes, wiederholt ausloesbares ANGEBOT an den
|
|
# Spieler, das Aktionen ausfuehrt (Ticket 02) — kein Gegenstand im Inventar,
|
|
# sonst koennte ein Magier seine Zauber verkaufen.
|
|
#
|
|
# Angriff und Flucht sind bewusst keine Engine-Sonderfaelle, sondern gewoehnliche
|
|
# Faehigkeiten (Ticket 11/14). Ein Mod kann beide ersetzen.
|
|
#
|
|
# Menge = amount + scale * damage-Attribut(Verursacher) — eine Formel fuer
|
|
# Basisangriff, Feuerball und Wuchtschlag (Nachtrag aus Ticket 14).
|
|
|
|
[[abilities]]
|
|
id = "attack"
|
|
name = "Angriff"
|
|
cost = 0
|
|
actions = [ { action = "damage", scale = 1.0, damage_type = "slash", target = "target" } ]
|
|
|
|
[[abilities]]
|
|
id = "flee"
|
|
name = "Fliehen"
|
|
cost = 10
|
|
actions = [ { action = "flee" } ]
|
|
|
|
[[abilities]]
|
|
id = "power_strike"
|
|
name = "Wuchtschlag"
|
|
description = "Holt weit aus. Kostet Luft."
|
|
cost = 15
|
|
cooldown = 3
|
|
actions = [ { action = "damage", scale = 1.5, damage_type = "blunt", target = "target" } ]
|
|
|
|
[[abilities]]
|
|
id = "bone_throw"
|
|
name = "Knochenwurf"
|
|
cost = 8
|
|
cooldown = 2
|
|
actions = [ { action = "damage", amount = 6, damage_type = "blunt", target = "target" } ]
|
|
|
|
[[abilities]]
|
|
id = "rat_bite"
|
|
name = "Biss"
|
|
cost = 0
|
|
actions = [ { action = "damage", scale = 1.0, damage_type = "slash", target = "target" },
|
|
{ action = "apply_modifier", modifier = "core:poisoned", target = "target" } ]
|
|
|
|
[[abilities]]
|
|
id = "ghoul_claw"
|
|
name = "Klauenhieb"
|
|
cost = 0
|
|
actions = [ { action = "damage", scale = 1.2, damage_type = "slash", target = "target" } ]
|
|
|
|
[[abilities]]
|
|
id = "second_wind"
|
|
name = "Zweiter Atem"
|
|
description = "Sammelt sich, wenn es eng wird."
|
|
cost = 0
|
|
cooldown = 8
|
|
condition = [ { check = "health_below", who = "self", value = 0.4 } ]
|
|
actions = [ { action = "change_attribute", attribute = "health", amount = 25, target = "self" } ]
|