CLAUDE.md: Die Regeln für den Kern gelten für den Quelltext in core/src/, nicht für die Tests. World::set_all_offline ist als einzige Ausnahme von der Regel genannt, dass sich die Welt nur durch Befehle ändert. Die Überlaufregel sagt jetzt, dass Taktzähler normal addiert werden und Werte aus geladenen Dateien beim Laden geprüft werden. Ein neuer Absatz erklärt, was bei einem Fehler in golden.rs zu tun ist. KONZEPT.md: Das Konzept ist bestätigt. Hochladen, Branches, Issues und Pull Requests sind freigegeben, und die veraltete Angabe, das Archiv sei noch leer, ist entfernt. Die Reihenfolge der Rückkehrer steht jetzt bei den Festlegungen statt bei den offenen Punkten. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
3.1 KiB
Grovewright
Aufbauspiel für ein bis vier Spieler, in dem die Fabrik lebt. Gebaut wird zuerst eine Vertical Slice mit 2–3 Stunden Spielzeit.
Das verbindliche Konzept steht in docs/KONZEPT.md. Lies es, bevor du Spielregeln, Architektur oder Umfang änderst. Was dort nicht steht, ist nicht beschlossen.
Aufbau
| Ordner | Inhalt |
|---|---|
core/ |
Rust-Kern: die gesamte gemeinsame Welt. Ohne Zugriff auf die Engine, ohne fremde Crates. |
docs/KONZEPT.md |
Spielkonzept und Entscheidungen |
docs/superpowers/plans/ |
Umsetzungspläne |
Die Brücke zu Godot (bridge/), das Godot-Projekt (game/) und die Inhaltsdateien (content/) kommen mit späteren Plänen dazu.
Faustregel: Was im Speicherstand steht oder alle Spieler betrifft, gehört in den Kern.
Regeln für den Kern
Alle Spieler simulieren die Welt selbst und tauschen nur Befehle aus (Gleichschritt). Das funktioniert nur, wenn der Kern auf jedem Rechner exakt gleich rechnet. Deshalb gilt für den Quelltext des Kerns in core/src/. Die Tests in core/tests/ dürfen zum Beispiel Dateien lesen.
- Nur ganze Zahlen, keine Gleitkommazahlen.
- Keine Uhr, keine Dateien, kein Netzwerk, keine Threads, keine Umgebungsvariablen.
- Zufall nur über
rng::Rngmit fester Startzahl. - Keine Sammlung mit wechselnder Reihenfolge. Statt einer Hash-Tabelle nimmst du
Vec,BTreeMapoderBTreeSet. - Die Welt ändert sich nur durch einen
CommandinWorld::step. Einzige Ausnahme istWorld::set_all_offline: Es darf nur direkt nach dem Laden eines Speicherstands aufgerufen werden, bevor jemand beigetreten ist. - Alles, was zum Zustand der Welt gehört, steht im Snapshot. Wer ein Feld ergänzt, ergänzt es in
snapshot.rsund erhöhtSNAPSHOT_VERSION. - Wo eine Rechnung im Spiel überlaufen kann, steht eine ausdrückliche Wahl:
saturating_,wrapping_oderchecked_. Taktzähler (u64bei 20 Takten pro Sekunde) laufen praktisch nie über und werden normal addiert. Werte aus geladenen Dateien müssen deshalb beim Laden geprüft werden. - Keine fremden Crates im Kern.
Der Test core/tests/forbidden_apis.rs durchsucht den Quelltext des Kerns nach verbotenen Begriffen. Sie dürfen dort auch in Kommentaren nicht vorkommen.
Prüfen
Vor jedem Commit müssen alle drei Befehle fehlerfrei laufen:
cargo fmt --all -- --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace
Schlägt core/tests/golden.rs fehl, haben sich Regeln oder ein Format geändert. Die Fehlermeldung nennt die Versionskonstante, die dann erhöht werden muss. Erst danach wird der festgeschriebene Wert bewusst angepasst.
Sprache
- Code, Bezeichner und Kommentare im Code: Englisch.
- Dokumente, Pläne, Commit-Nachrichten, Issues und Pull Requests: Deutsch.
- Texte im Spiel: Deutsch und Englisch über Übersetzungsdateien.
Git
- Archiv:
https://git.race-cave.cloud/steven/Grovewright.git(Gitea). - Gearbeitet wird auf einem Branch pro Plan, nicht direkt auf
main. - Nach jedem abgeschlossenen Arbeitsschritt wird committet und hochgeladen. Das ist freigegeben.