Files
rustkeep/mods/core/abilities.toml
MDietermann e145d5d2df fix(kampf): Gegner bekommen endlich ihre Werte
Gemeldet als "Ratten vergiften zu 100 %". Dahinter lagen drei Fehler:

1. Creature::from_def parste Attributnamen mit toml::from_str, das eine
   ganze TOML-Datei erwartet. Der Aufruf schlug fuer jeden Namen fehl,
   der Zweig hiess Err(_) => continue — jeder Gegner hatte seit M3 still
   die Standardwerte. Die Riesenratte: 100 Leben statt 14, der
   Knochenfuerst war eine grosse Ratte. Kampf gegen den ersten Gegner:
   22 Zuege statt 4.
2. attack_hit feuerte bei allen Traegern statt nur beim Angreifer, also
   vergiftete die Ratte auch bei eigenen Treffern. EventKind::
   bound_to_source benennt die zwei seitengebundenen Ereignisse.
3. Action::Damage wuerfelte die Trefferformel auch bei Selbstschaden —
   ein flinker Held wich seinem eigenen Gift aus.

Dazu ein Datenfehler: Das Gift stand in der Aktionsliste von rat_bite,
und Aktionen haben kein chance. Es haengt jetzt am Trigger mit 25 %.

Drei Regressionstests, darunter der, den es seit M3 haette geben muessen:
ein Gegner bekommt die Werte aus seiner Definition.
2026-08-13 08:33:32 +02:00

78 lines
2.6 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" } ]
[[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" } ]
# Die Haelfte einer Charakteroption, die NICHT veraltet (Ticket 15): "+3 Staerke"
# ist auf Stufe 30 Rauschen, ein Wuchtschlag nicht.
[[abilities]]
id = "backstab"
name = "Hinterhalt"
description = "Trifft, wo es wehtut. Nur bei vollem Atem."
cost = 12
cooldown = 4
condition = [ { check = "attribute", who = "self", attribute = "dexterity", at_least = 2 } ]
actions = [ { action = "damage", scale = 2.0, damage_type = "slash", target = "target" } ]
[[abilities]]
id = "steinsinn"
name = "Steinsinn"
description = "Der Zwerg horcht ins Gestein und sammelt sich."
cost = 0
cooldown = 6
actions = [ { action = "change_attribute", attribute = "stamina", amount = 30, target = "self" } ]