feat: m3 kampf, events und trigger
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.
This commit is contained in:
43
mods/core/modifiers.toml
Normal file
43
mods/core/modifiers.toml
Normal file
@@ -0,0 +1,43 @@
|
||||
# Benannte, befristete Modifikatoren — die dreizehnte Registry.
|
||||
#
|
||||
# Ticket 01 laesst `apply_modifier` einen Modifikator per ID referenzieren
|
||||
# (`core:poisoned`), aber keine der zwoelf Registries definierte sie. Aufgefallen
|
||||
# beim Bauen von M3.
|
||||
#
|
||||
# Der Schadenstyp `poison` ist NICHT der Modifikator `core:poisoned`: Der Typ
|
||||
# sagt, wie gemindert wird; der Modifikator ist ein Zustand, der ueber Zuege
|
||||
# tickt (Ticket 01).
|
||||
#
|
||||
# Eine Uhr: der Zug. Debuffs ticken auch beim Erkunden, damit "ich warte den
|
||||
# Debuff draussen ab" eine Entscheidung mit Kosten bleibt.
|
||||
|
||||
[[modifiers]]
|
||||
id = "poisoned"
|
||||
name = "Vergiftet"
|
||||
symbol = "☠"
|
||||
color = "green"
|
||||
turns = 4
|
||||
attributes = [ { attribute = "damage", percent = -15 } ]
|
||||
triggers = [
|
||||
{ on = "turn_started",
|
||||
actions = [ { action = "damage", amount = 2, damage_type = "poison", target = "self" } ] },
|
||||
]
|
||||
|
||||
[[modifiers]]
|
||||
id = "blessed"
|
||||
name = "Gesegnet"
|
||||
symbol = "+"
|
||||
color = "yellow"
|
||||
turns = 6
|
||||
attributes = [ { attribute = "damage", percent = 20 },
|
||||
{ attribute = "critical_chance", flat = 10 } ]
|
||||
|
||||
[[modifiers]]
|
||||
id = "warded"
|
||||
name = "Abgeschirmt"
|
||||
symbol = "o"
|
||||
color = "cyan"
|
||||
turns = 5
|
||||
# Resistenz ist typ-indiziert und der EINZIGE Minderungsmechanismus (Ticket 01).
|
||||
attributes = [ { attribute = "resistance", damage_type = "fire", flat = 40 },
|
||||
{ attribute = "resistance", damage_type = "ice", flat = 40 } ]
|
||||
Reference in New Issue
Block a user