feat(charakterbau): Rasse und Klasse werden gewaehlt

Der Held war seit M1 als Zwergenkrieger verdrahtet, waehrend zwei Rassen
und zwei Klassen ungenutzt in der Registry lagen. Der Charakterbau ist
eine Schleife ueber categories_ordered() und options_of() — ein Mod, der
"Talent" mit pick = 2 ergaenzt, bekommt eine dritte Spalte ohne Code.

- CharacterOption bekommt abilities und on_create (Ticket 02, TODO seit M3)
- abilities_of liest jetzt Rasse und Klasse: Krieger traegt Wuchtschlag,
  Dieb Hinterhalt, Zwerg Steinsinn
- on_create gibt die Startausruestung als gewoehnliche Aktionen —
  starting_hero() schrumpft auf Creature::new(name)
- MainMenu trennt "neuer Held" von "Lauf fortsetzen"

Befund: Das Feld abilities fehlte, obwohl Ticket 15 sein ganzes Argument
darauf stuetzt — eine Klasse konnte nur flache Modifikatoren geben.
This commit is contained in:
2026-08-13 08:03:19 +02:00
parent b721947a65
commit 69efa72d68
10 changed files with 403 additions and 23 deletions

View File

@@ -56,3 +56,23 @@ 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" } ]

View File

@@ -21,6 +21,7 @@ name = "Zwerg"
description = "Zäh, misstrauisch, trinkfest."
modifiers = [ { attribute = "constitution", flat = 2 },
{ attribute = "max_health", flat = 10 } ]
abilities = ["core:steinsinn"]
[[options]]
id = "elf"
@@ -37,6 +38,12 @@ name = "Krieger"
description = "Schlägt zu, wo andere nachdenken."
modifiers = [ { attribute = "strength", flat = 3 },
{ attribute = "damage", percent = 10 } ]
abilities = ["core:power_strike"]
# `on_create` ist KEINE neue Mechanik, sondern gewoehnliche Aktionen, einmal
# beim Bau ausgefuehrt (Ticket 02). Die Engine kennt den Begriff
# "Startausruestung" deshalb gar nicht.
on_create = [ { action = "give_item", item = "core:iron_sword" },
{ action = "give_item", item = "core:health_potion", count = 2 } ]
[[options]]
id = "thief"
@@ -46,3 +53,6 @@ description = "Nimmt, was nicht niet- und nagelfest ist."
modifiers = [ { attribute = "dexterity", flat = 2 },
{ attribute = "luck", flat = 2 },
{ attribute = "critical_chance", percent = 15 } ]
abilities = ["core:backstab"]
on_create = [ { action = "give_item", item = "core:leather_cap" },
{ action = "give_item", item = "core:gold", count = 40 } ]