Star-Edit/README.md
Claude 70d10c4554
Projekt-Spezifikation für StarCraft-Kampagnen-MCP-Server in README festhalten
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NaZBZofC1on2gkSMb5UWZy
2026-06-22 07:11:29 +00:00

155 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Star-Edit — StarCraft-Kampagnen-MCP-Server ("Missions-Baumeister")
> **Status:** Planung / Spezifikation. Dieses Dokument hält den kompletten Auftrag
> fest, bevor Code gebaut wird. Es dient als verbindliche Vorlage für die Umsetzung.
## Ziel in einem Satz
Ein **MCP-Server**, der Claude in die Lage versetzt, aus der Kreativ-Seite einer
StarCraft-Brood-War-Kampagne (Story, Dialoge, Voiceover, Sounds, Missionsablauf)
echte, spielbare `.scm`/`.scx`-Missionsdateien zu bauen — also komplette
Missions-Logik, Texte und Sound-Einbettung.
**Wichtig:** Das **Gelände wird nicht generiert**. Jede Mission startet von einer
vorhandenen Basis-Karte als Leinwand; der Server bearbeitet nur die Daten-/Logik-
Sektionen darin.
## Rollenverteilung
- **Ich (Auftraggeber):** liefere die Kreativ-Seite — Story, Dialoge, Voiceover,
Sounds, Missionsablauf. Null Programmierkenntnisse. Will am Ende **einen Befehl**
ausführen und eine **URL** in Claude eintragen.
- **Claude + MCP-Server:** setzt die Kreativ-Vorlage in echte Missionsdateien um.
## Technische Basis
- **Karten-Manipulation:** Python-Bibliothek **RichChk** (PyPI: `richchk`).
- `pip install richchk` funktioniert; bringt StormLib mit, läuft auf Linux
(getestet — `StarCraftMpqIoHelper.create_mpq_io()` startet ohne Fehler).
- **Bestätigte Einstiegspunkte** (Signaturen vor dem Coden per Introspektion final
prüfen, da sie je nach Version leicht abweichen):
Lesen/Schreiben von Karten (MPQ-Container):
```python
from richchk.io.mpq.starcraft_mpq_io_helper import StarCraftMpqIoHelper
mpq_io = StarCraftMpqIoHelper.create_mpq_io()
rich_chk = mpq_io.read_chk_from_mpq("/pfad/map.scx") # -> RichChk-Modell
mpq_io.save_chk_to_mpq(rich_chk, "/pfad/basis.scx", "/pfad/out.scx")
```
Bearbeiten:
```python
from richchk.editor.richchk.rich_chk_editor import RichChkEditor
new_chk = RichChkEditor().replace_chk_section(neue_sektion, rich_chk)
rich_chk.get_sections_by_name(...) # vorhandene Sektionen abfragen
rich_chk.chk_sections # alle Sektionen
```
- **Fertige Editoren** unter `richchk.editor.richchk.*`:
**trig** (Trigger), **mrgn** (Locations), **unis/unix** (Einheiten-Werte),
**forc** (Forces/Fraktionen), **ownr** (Owner), **side** (Rassen),
**swnm** (Switches), **uprp** (Unit Properties), **wav** (Sounds).
- **Rich-Modelle** (Trigger, Conditions, Actions, Locations, …) unter
`richchk.model.richchk.*`.
**Herzstück = Trigger.** Fast die gesamte Kampagnen-Logik wird über Trigger
abgebildet: Gegnerwellen, Verstärkungen, Einheiten spawnen, Story-Text einblenden,
Funksprüche mit Portrait, WAV-Sounds abspielen, Missionsziele, Sieg/Niederlage,
Timer, AI-Skripte starten. Das Trigger-Tool muss ausdrucksstark und gut
dokumentiert sein (unterstützte Condition-/Action-Typen in der Tool-Beschreibung).
### Erster Arbeitsschritt (vor dem Tool-Coding)
1. `richchk` installieren.
2. README/Quellen des GitHub-Repos "richchk" lesen.
3. Installiertes Paket per Introspektion inspizieren, um die echten Klassen für
Trigger (Conditions/Actions), Locations, Forces etc. zu lernen.
4. **Keine erratenen Methodennamen** schreiben.
## Stack & Architektur
| Aspekt | Wahl |
|---------------|------|
| Sprache | Python 3.12 |
| MCP-Framework | FastMCP (offizielles `mcp`-SDK, `pip install "mcp[cli]"`) |
| Transport | stdio (lokaler Test) + **Streamable HTTP** (Dauerbetrieb VPS) |
| Betrieb | Docker-Container, eingebunden ins bestehende docker-compose Setup |
| Reverse-Proxy | Caddy (läuft bereits) → TLS-Subdomain, z.B. `sc-mcp.pixel-by-design.de` |
| Karten-Volume | gemountetes Volume (z.B. `/data/maps`) für Basis-Karten, WAVs, Missionen |
## Tools (Prefix `sc_`)
| Tool | Zweck | Hints |
|------|-------|-------|
| `sc_list_maps` | listet `.scm`/`.scx`-Dateien im Karten-Verzeichnis | readOnly |
| `sc_describe_map` | menschenlesbare Übersicht: Tileset, Größe, Forces/Player-Setup, Rassen, Locations, Trigger-Zusammenfassung | readOnly |
| `sc_list_locations` | Locations (MRGN) auflisten | readOnly |
| `sc_create_location` | Location anlegen | — |
| `sc_rename_location` | Location umbenennen | — |
| `sc_set_player_setup` | Forces (forc), Owner (ownr), Rassen (side) setzen | — |
| `sc_add_trigger` | **Kern-Tool.** Trigger mit Conditions + Actions + betroffenen Playern hinzufügen | — |
| `sc_list_triggers` | Trigger auflisten | readOnly |
| `sc_remove_trigger` | einzelnen Trigger entfernen | destructive |
| `sc_clear_triggers` | alle Trigger entfernen | destructive |
| `sc_embed_wav` | WAV-Datei einbetten und referenzierbar machen (wav-Editor) | — |
| `sc_save_map` | bearbeitetes Modell als neue `.scm`/`.scx` schreiben (`save_chk_to_mpq`, Basis-Karte als Vorlage) | — |
| `sc_set_briefing` | **optional / experimentell.** Mission-Briefing (MBRF). Falls kein High-Level-Editor: als TODO markieren, kein Blocker | — |
### `sc_add_trigger` — Mindest-Abdeckung
Strukturierte Eingabe (Liste von Conditions, Liste von Actions, betroffene Player).
Muss u.a. abdecken:
- Einheiten erzeugen an Location
- Text einblenden (Display Text Message)
- Transmission mit Portrait + WAV
- Play WAV
- Sieg-/Niederlagebedingungen
- Timer
- AI-Skript ausführen
### Anforderungen pro Tool
- Klare Beschreibung.
- Sinnvolle **Pydantic**-Eingabeschemas mit Feldbeschreibungen.
- Hilfreiche Fehlermeldungen, z.B.
`"Location 'Basis' existiert nicht verfügbar: …"`.
- `readOnlyHint`/`destructiveHint`-Annotationen passend gesetzt.
## Definition of Done — Selbsttest
Ein kurzer Selbsttest beweist die ganze Pipeline:
1. Basis-Karte aus `/data/maps` laden.
2. Eine Location anlegen.
3. Per Trigger hinzufügen: bei Spielstart eine Texteinblendung
`"Mission 1 Start"` **und** das Erzeugen von ein paar Einheiten an der Location.
4. Als neue `.scx` speichern.
5. Neue Datei erneut laden und bestätigen, dass Trigger + Location wirklich drin sind.
Läuft das durch, steht das Fundament.
## Liefergegenstände
- [ ] Server läuft als Docker-Service, erreichbar über die TLS-Subdomain.
- [ ] **Ein** Start-/Neustart-Befehl.
- [ ] Die Connector-URL für Claude (Custom Connector).
- [ ] Beispiel-Basis-Karte liegt bereits in `/data/maps`.
- [ ] `README.md` mit Startbefehl, Subdomain-URL und Anleitung für den Custom
Connector in Claude.
## Defaults / Entscheidungen
> Hier werden während der Umsetzung die getroffenen Default-Entscheidungen
> dokumentiert, damit am Ende klar ist, was gewählt wurde (keine technischen
> Rückfragen, wo selbst entscheidbar).
- _(wird ergänzt)_
## Offene TODOs
- [ ] `richchk` installieren & per Introspektion echte Klassen verifizieren.
- [ ] Projektstruktur (FastMCP-Server, Pydantic-Schemas, Tool-Module) anlegen.
- [ ] Self-Test-Skript schreiben.
- [ ] Dockerfile + docker-compose-Service + Caddy-Reverse-Proxy-Eintrag.
- [ ] Beispiel-Basis-Karte bereitstellen.
- [ ] `sc_set_briefing` (MBRF) als best-effort prüfen.