feat: m1 vertikaler durchstich — mod-lader, registries, attributberechnung, screen-stack

Ersetzt src/ vollstaendig: print_box, include_str! und enum ItemType fallen,
wie Ticket 01-03 es vorgezeichnet haben.

- data/: Mod-Lader mit zwei Suchpfaden, selbstheilender load_order.toml,
  drei Phasen und zweistufiger Deserialisierung (03/04)
- game/: Attributkatalog, Creature, Game::attribute ueber mehrere Quellen,
  Command mit Outcome (01/07/11/12)
- ui/: Screen-Stack mit Response, Grid-Widget, Press-Filter (06/11/12)
- mods/core/: echte TOML-Dateien auf der Platte statt include_str!

10 Tests, darunter der Borrow-Beweis fuer Registries-neben-Game, den
Ticket 12 nicht fuehren konnte.
This commit is contained in:
2026-08-12 15:39:17 +02:00
parent 9c5efab331
commit b39491916f
28 changed files with 3414 additions and 279 deletions

32
src/game/command.rs Normal file
View File

@@ -0,0 +1,32 @@
//! Kommandos der Oberflaeche an das Spiel — Ticket 11.
//!
//! **Nicht** zu verwechseln mit `Action`, dem TOML-Effektvokabular aus Ticket
//! 01. „Geh nach Norden" ist keine der zehn Aktionen und wird nie eine.
#[derive(Debug, Clone, Copy)]
pub enum Direction {
North,
South,
West,
East,
}
/// Ticket 11 hat zwoelf Commands festgelegt; M1 braucht zwei davon.
///
// TODO(M2+): `UseAbility`, `UseItem`, `Equip`, `Unequip`, `Drop`, `PickUp`,
// `Descend`, `Talk`, `Buy`, `Sell` — und `AssignPoints` aus 15.
#[derive(Debug, Clone)]
pub enum Command {
Move(Direction),
Wait,
}
/// Ergebnis eines Kommandos — der Befund aus dem Durchstich in Ticket 12:
/// „alle Commands kosten einen Zug" heisst **alle ausgefuehrten**. Gegen eine
/// Wand zu laufen darf keine Zeit verbrauchen, sonst tickt ein Gift-Debuff,
/// weil jemand danebengetippt hat.
#[derive(Debug, Clone)]
pub enum Outcome {
TurnPassed,
Rejected(&'static str),
}