update
This commit is contained in:
44
README.md
44
README.md
@@ -18,7 +18,12 @@ Würfel (Tank), Kegel (DPS) und Kugeln (Heiler). Alles wird im Code erzeugt.
|
||||
- Klick ohne Ziehen = auswählen. Info rechts, dort auch `Aufwerten`.
|
||||
- Rechtsklick auf dem Feld = zurück auf die Bank, auf der Bank = verkaufen.
|
||||
- Klicks treffen über einen Strahl von der Kamera auf die Feldebene.
|
||||
- `D` neu würfeln, `Leertaste` Kampf starten / überspringen, `Esc` Auswahl lösen
|
||||
- `D` neu würfeln, `F` Shop einfrieren, `X` XP kaufen, `Leertaste` Kampf, `P` Pause, `Esc` Auswahl lösen
|
||||
- Rechtsklick auf eine neutrale Shop-Karte kauft direkt mit der zuletzt gewählten Spezialisierung
|
||||
- Spielername rechts anklicken = sein Brett oben ansehen. Der nächste Gegner steht schon in der Planung fest.
|
||||
- `Q`/`E` oder mittlere Maustaste drehen die Kamera, das Mausrad zoomt
|
||||
- Die Planung dauert 30 Sekunden, dann startet der Kampf von selbst
|
||||
- Startbildschirm und Pause haben einen Lautstärkeregler
|
||||
|
||||
## Regeln
|
||||
|
||||
@@ -44,18 +49,36 @@ Würfel (Tank), Kegel (DPS) und Kugeln (Heiler). Alles wird im Code erzeugt.
|
||||
| Elemente kombinierbar wie Traits | `Data.ELEMENT_TRAITS`, `Data.COMBO_TRAITS` |
|
||||
| 5 Gold pro Runde, 1 für Sieg, mehr bei Serie | `PlayerState.round_income()` |
|
||||
| 100 Leben | `Data.START_HP` |
|
||||
| Begrenzte Elementmenge für alle Spieler | `Pool.element_left`, 180 pro Element |
|
||||
| Begrenzte Elementmenge für alle Spieler | `Pool.element_left`, 100 pro Element |
|
||||
| 7 Bots | `Game.BOT_NAMES`, `BotAI` |
|
||||
| Keine Items | nicht vorhanden |
|
||||
|
||||
Nicht in den Anforderungen, aber nötig: die Kaderplätze wachsen mit der Runde
|
||||
(`Data.team_slots()`, 3 bis 9). Der neutrale Avatar selbst ist unbegrenzt. Knapp ist
|
||||
das Element, das man ihm beim Kauf gibt: das zieht einen Platz aus dem geteilten Vorrat.
|
||||
Nicht in den Anforderungen, aber „Basis wie TFT":
|
||||
|
||||
Die 180 pro Element sind gemessen, nicht geraten: bei 30 war jedes Element nach
|
||||
gut der Hälfte der Partie leer, bei 160 lief in 1 von 12 Partien schon um Runde 15
|
||||
eines leer. Bei 180 hält der Vorrat eine ganze Partie, der Tiefstand liegt aber
|
||||
noch bei rund einem Achtel.
|
||||
- **Level statt fester Kaderplätze.** Start Level 3, jede Runde 2 XP, 4 XP für 4 Gold.
|
||||
Level = Kaderplätze, Maximum 9 (`Data.XP_TABLE`, `PlayerState.buy_xp()`).
|
||||
- **Schaden steigt mit der Runde.** Grundschaden 2, alle vier Runden +1, dazu die
|
||||
Sternsumme der Überlebenden (`Data.round_base_damage()`, `Combat.survivor_stars`).
|
||||
- **Planungsuhr** 30 s (`Game.tick_planning()`), Tests schalten sie ab.
|
||||
- **Gegner ansehen** über die Spielerliste (`Main._on_scout()`, `BoardView3D.scout_player`).
|
||||
- **Heiler heilen nur im Umkreis 2** (`Data.HEAL_RANGE`), Aufstellung zählt also.
|
||||
- **Lesbarer Kampf**: Schadens- und Heilzahlen, Krit mit „!", Sterbe-Animation,
|
||||
Zustände als Tönung und Marke (B Brand, S langsam, Z betäubt), Schildstreifen.
|
||||
- **Klänge** werden im Code erzeugt (`Sfx`), keine Audiodateien.
|
||||
- **Sichtbare Angriffe**: Fernkampf schickt eine Kugel, Nahkampf einen Hieb (`BoardView3D.spawn_attack`).
|
||||
- **Element-Profile**: das Hauptelement prägt die Werte, z. B. Feuer +18% Angriff, Erde +22% Leben
|
||||
(`Data.ELEMENT_PROFILE`). Dazu ein Kennzeichen am Körper: Flamme, Tropfen, Finne, Zacke, Schultern, Kristall.
|
||||
- **Gegner vorab**: Paarungen entstehen beim Rundenstart (`Game._make_pairings` in `_next_round`).
|
||||
Bots stellen dagegen auf: Tanks vor gegnerische Schützen, Schützen weg von Tanks (`BotAI.arrange`).
|
||||
- **Shop einfrieren** (`PlayerState.shop_locked`), Schnellkauf mit der letzten Wahl (`last_element`).
|
||||
- **Rückblick** nach jedem Kampf: Ergebnis, Überlebende, stärkste Einheit, gefährlichster Gegner
|
||||
(`Combat.recap`, `Game.human_recap`).
|
||||
- **Start, Pause, Lautstärke** als Overlays in `Main`, Kamera mit Zoom und Drehung um die Brettmitte.
|
||||
|
||||
Der neutrale Avatar selbst ist unbegrenzt. Knapp ist das Element, das man ihm beim
|
||||
Kauf gibt: das zieht einen Platz aus dem geteilten Vorrat. Die 100 pro Element sind
|
||||
gemessen: mit den Bots, die jetzt gezielt Futter jagen und Level kaufen, läuft bei 80
|
||||
in 2 von 10 Partien ein Element leer, bei 100 keines, Tiefstand rund ein Fünftel.
|
||||
|
||||
Die Neutral-Chance ist multiplikativ (0,75 hoch Anzahl Elemente) statt in
|
||||
Prozentpunkten. So verschwindet Neutral nie ganz: ohne eigene Elemente 100%,
|
||||
@@ -70,7 +93,8 @@ Magma, Sturmfront, Dampf.
|
||||
## Aufbau
|
||||
|
||||
scripts/core/ Data, Avatar, Pool, ShopEntry, PlayerState, Hex, Combat, BotAI, Game
|
||||
scripts/ui/ Main (Szene + Bedienung), BoardView3D (Arena), HudOverlay, UiKit
|
||||
scripts/ui/ Main (Szene, Kamera, Eingabe, Overlays), TopBar, InfoColumn, PlayersPanel,
|
||||
ShopPanel (je ein Panel, melden per Signal), BoardView3D, HudOverlay, Sfx, UiKit
|
||||
scenes/Main.tscn
|
||||
tests/ sim_test.gd (kopflos), Probe2, Probe3, CamCal
|
||||
|
||||
|
||||
Reference in New Issue
Block a user