//! 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. /// #[derive(Debug, Clone)] pub enum Command { Move(Direction), Wait, Descend, /// Hebt den Haufen auf, auf dem der Held steht. Ticket 16: Der Inhalt wird /// **erst hier** gezogen — moeglich nur, weil alle Haufen dasselbe Symbol /// zeigen, die Anzeige also nichts verraet. PickUp, UseItem(usize), Equip(usize), Unequip(String), Drop(usize), /// Wirkt auf das Feld, **auf dem der Held steht** — dieselbe Regel wie /// `PickUp` und `Descend`. Ein NPC blockiert nicht: Er steht in einem Laden, /// nicht in einer Tuer. Talk, /// Index in `Game::dialog_options` — die **gefilterte** Liste, damit der /// Screen keine Bedingungen auswerten muss. Choose(usize), Buy(usize), Sell(usize), /// Der normale Angriff ist **keine eigene Variante**, sondern /// `UseAbility("core:attack")` — Faehigkeiten sind seit Ticket 02 eine /// Registry, also gehoert er dorthin, und ein Mod kann ihn ersetzen. /// Dasselbe gilt fuer die Flucht. UseAbility { ability: String, target: super::creature::CreatureRef, }, /// **Alle** Punkte auf einmal und damit **ein** Zug (Ticket 15). Ein /// Kommando je Punkt hiesse bei drei Stufen drei Zuege, in denen ein Gift /// tickt, waehrend man ein Menue bedient. AssignPoints(Vec<(super::attributes::Attribute, u32)>), /// Werkbank. **Ein** Kommando mit einer Variantenliste statt fuenf /// Kommandos, die sich durch `rejects` und `perform` ziehen — ein Cheat /// wird nie abgewiesen, das ist sein ganzer Zweck. Debug(Cheat), } /// Was die Werkbank kann. Bewusst klein: Was sich mit zwei vorhandenen /// Kommandos nachstellen laesst, gehoert nicht hierher. #[derive(Debug, Clone)] pub enum Cheat { /// Gibt den Gegenstand — zehn Stueck, wenn er stapelbar ist. Sonst muesste /// man fuer hundert Gold hundertmal druecken. Give(String), /// Leben und Ausdauer voll. Heal, /// Eine Etage tiefer, ohne Treppe. Descend, /// Setzt alle Gegner auf null Leben. **Nicht** `enemies.clear()`: So laeuft /// der normale Weg samt Todes-Triggern und „Der Raum ist geräumt". ClearRoom, } /// 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), }