docs: ticket 01 (effekt-vokabular) aufloesen, glossar anlegen, tickets 14 und 15 graduieren
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# 01 — Effekt-Vokabular
|
||||
|
||||
Type: grilling
|
||||
Status: open
|
||||
Status: resolved
|
||||
Blocked by: —
|
||||
|
||||
## Question
|
||||
@@ -19,3 +19,81 @@ Zu klären:
|
||||
- Wie sieht die TOML-Repräsentation aus, und bleibt sie lesbar genug für Modder ohne Doku?
|
||||
|
||||
Ergebnis: eine Liste der Effekt-Varianten mit TOML-Beispiel je Variante.
|
||||
|
||||
## Answer
|
||||
|
||||
Begriffe sind im [Glossar](../../../CONTEXT.md) festgehalten.
|
||||
|
||||
### Zwei Begriffe, nicht einer
|
||||
|
||||
**Modifikator** rechnet ein Attribut um, solange er existiert — er wird nie ausgeführt, sondern beim
|
||||
Auslesen aufsummiert. **Aktion** ändert Zustand einmalig. Getrennte Maschinen, getrennte TOML-Arrays.
|
||||
Ein gemeinsamer Oberbegriff „Effekt" ist ausdrücklich *kein* kanonischer Begriff mehr.
|
||||
|
||||
### Attributkatalog (Engine-Vokabular, ohne Namensraum)
|
||||
|
||||
`strength` · `dexterity` · `constitution` · `charisma` · `luck` · `level` · `max_health` ·
|
||||
`max_stamina` · `damage` · `hit_chance` · `critical_chance` · `critical_factor` ·
|
||||
`resistance` (typ-indiziert) · `shop_price` · `carry_capacity`
|
||||
|
||||
`max_health` ist ein Attribut und wird von Modifikatoren umgerechnet. Der aktuelle Lebensstand ist
|
||||
**kein** Attribut, sondern Zustand — den ändern Aktionen. Diese Trennung muss scharf bleiben.
|
||||
|
||||
### Modifikator
|
||||
|
||||
```toml
|
||||
modifiers = [
|
||||
{ attribute = "damage", flat = 5 },
|
||||
{ attribute = "strength", flat = 2, percent = 5 },
|
||||
{ attribute = "critical_chance", percent = 10, duration = "turns", turns = 3,
|
||||
target = "all_enemies", symbol = "curse", name = "Verflucht" },
|
||||
]
|
||||
```
|
||||
|
||||
- `flat` und `percent` beide optional, mindestens eines Pflicht.
|
||||
- `duration`: `permanent` · `while_equipped` · `turns` · `until_floor_end`.
|
||||
- `target`: `self` · `target` · `all_enemies`. Der Modifikator wohnt **immer beim Träger** und wird
|
||||
beim Auslesen des Ziels eingesammelt — stirbt der Träger, verschwindet die Aura von selbst.
|
||||
- `symbol` und `name` nur bei befristeten Zuständen; Item-Boni erben beides vom Item.
|
||||
`symbol` ist ein Schlüssel, keine Farbe — die Zuordnung macht `ui/theme.rs`.
|
||||
|
||||
### Aktion
|
||||
|
||||
```toml
|
||||
actions = [
|
||||
{ action = "damage", amount = 12, damage_type = "fire", target = "target" },
|
||||
{ action = "change_attribute", attribute = "health", amount = 20, target = "self" },
|
||||
{ action = "apply_modifier", modifier = "core:poisoned", target = "target" },
|
||||
{ action = "remove_modifier", modifier = "core:poisoned", target = "self" },
|
||||
{ action = "give_item", item = "core:gold", count = 50, target = "self" },
|
||||
{ action = "remove_item", item = "core:torch", count = 1, target = "self" },
|
||||
]
|
||||
```
|
||||
|
||||
Sechs Aktionen. `damage` bleibt eigenständig statt `change_attribute health -12`, weil Schaden durch
|
||||
eine Kette läuft (Resistenz mindert, Krit vervielfacht, Bedingungen greifen) und „bei erlittenem
|
||||
Schaden" ein Event ist. Flache Liste, keine verschachtelten Aktionen — Ketten laufen über das
|
||||
Event-System.
|
||||
|
||||
### Regeln
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| Stapeln | `(Basis + Σ flach) × (1 + Σ prozentual)`, intern `f32`, gerundet an genau einer Stelle |
|
||||
| Uhr | Ein Zug. Ein Feld gehen = ein Zug, eine Kampfaktion = ein Zug. Debuffs ticken auch beim Laufen |
|
||||
| Schadenstypen | `fire` `ice` `poison` `shock` `holy` `slash` `blunt` — fest, Engine-Vokabular |
|
||||
| Minderung | Ein Mechanismus: `resistance` je Typ. `armor` am Item ist Kurzschreibweise für Resistenz gegen `slash` und `blunt` |
|
||||
| Namensraum | Doppelpunkt = Modder-Inhalt (`core:poisoned`). Ohne = Engine-Vokabular (`strength`, `fire`) |
|
||||
| Tags | Freie namespaced Strings am Wesen, Grundlage für Bedingungen |
|
||||
| Sprache | Schadenstyp `poison` ≠ Modifikator `core:poisoned` („Vergiftet") |
|
||||
|
||||
### Bewusst nicht entschieden
|
||||
|
||||
Das **Bedingungsvokabular** für `condition`. Es kommt aus Ticket 08, damit Quests und Modifikatoren
|
||||
dieselbe Grammatik benutzen statt zweier, die sich subtil unterscheiden. Ticket 01 fordert es nur an.
|
||||
|
||||
### Folgen für bestehenden Code
|
||||
|
||||
`ItemArmor.armor` fällt weg und wird ein Modifikator auf `resistance`. `Stats` trennt Attribute von
|
||||
Zustand. Der Attributkatalog braucht abgeleitete Größen, die es heute gar nicht gibt (`hit_chance`,
|
||||
`carry_capacity`).
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
# 14 — Kampfformeln und Rundenablauf
|
||||
|
||||
Type: grilling
|
||||
Status: open
|
||||
Blocked by: 01
|
||||
|
||||
## Question
|
||||
|
||||
Wie läuft ein Kampf ab, und mit welchen Formeln?
|
||||
|
||||
Der Attributkatalog aus 01 liefert die Zutaten (`damage`, `hit_chance`, `critical_chance`,
|
||||
`critical_factor`, `resistance`, `dexterity`, `luck`). Wie sie zusammenwirken, ist offen:
|
||||
|
||||
- **Reihenfolge**: Was bestimmt, wer zuerst handelt — `dexterity`, ein Initiativwurf, oder immer der
|
||||
Spieler zuerst? Ändert sich das während des Kampfes?
|
||||
- **Trefferformel**: Wie berechnet sich, ob ein Angriff trifft? Ist `hit_chance` gegen Ausweichen
|
||||
gerechnet, oder trifft immer und `dexterity` mindert nur den Schaden?
|
||||
- **Schadensformel**: In welcher Reihenfolge greifen Waffe, `damage`-Modifikatoren, Krit und
|
||||
`resistance`? Ist Resistenz prozentual oder flach, und gibt es eine Ober- oder Untergrenze?
|
||||
- **Kritische Treffer**: Wie speist `luck` in `critical_chance`? Multipliziert `critical_factor` den
|
||||
Rohschaden oder den geminderten?
|
||||
- **Aktionen pro Zug**: Genau eine, oder gibt es Ausdauer als Budget? Wozu dient `max_stamina` sonst?
|
||||
- **Flucht**: Möglich, mit welcher Chance, mit welchen Kosten?
|
||||
- **Zufall**: Schadensstreuung ja oder nein, und woher kommt der Zufallsgenerator — braucht es einen
|
||||
Seed im Speicherstand?
|
||||
|
||||
Ergebnis: die Formeln als Pseudocode plus der Ablauf eines Zuges von Eingabe bis Ergebnis.
|
||||
25
.scratch/rustkeep-1.0/issues/15-progression-und-levelup.md
Normal file
25
.scratch/rustkeep-1.0/issues/15-progression-und-levelup.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# 15 — Progression und Level-up
|
||||
|
||||
Type: grilling
|
||||
Status: open
|
||||
Blocked by: 02
|
||||
|
||||
## Question
|
||||
|
||||
Was passiert beim Aufstieg, und wie sieht die Kurve aus?
|
||||
|
||||
`Player` hat bereits `current_exp` und `next_level_exp`, `Stats::level_up()` deckelt bei 50. Der
|
||||
Attributkatalog aus 01 steht. Offen ist, was ein Level überhaupt gibt:
|
||||
|
||||
- **Was gewährt ein Aufstieg?** Feste Modifikatoren aus der Klasse, frei verteilbare Attributpunkte,
|
||||
oder beides? Freie Punkte heißen Zuweisungs-UI und die Gefahr, sich den Charakter zu verbauen.
|
||||
- **Ist die Kurve Daten oder Formel?** Eine Tabelle je Level in TOML (moddbar, explizit) oder eine
|
||||
Formel mit Parametern (kompakt, weniger schraubbar)?
|
||||
- **Bleibt die Obergrenze bei 50**, wenn 1.0 aus fünf Etagen besteht? Passt das zusammen?
|
||||
- **Woher kommt Erfahrung?** Nur Tötungen, auch Quests, auch erstmaliges Betreten einer Etage?
|
||||
- **Skaliert Rasse oder Klasse mit?** „+2 Konstitution je Level" ist ein Modifikator mit Level-Bezug —
|
||||
kann das Vokabular aus 01 das ausdrücken, oder braucht es dafür etwas Neues?
|
||||
- **Werden Leben und Ausdauer beim Aufstieg aufgefüllt?** Das ist eine Balancing-Entscheidung mit
|
||||
Folgen für die Etagen-Länge.
|
||||
|
||||
Ergebnis: Aufstiegsregel, Kurvenform (Daten oder Formel), Erfahrungsquellen und die Obergrenze.
|
||||
Reference in New Issue
Block a user