- Der Host hält einen Schlag eines Gastes, der während der Abklingzeit
ankommt, bis zum ersten Takt danach. Übers Internet ging sonst etwa
jeder fünfte Schlag eines Gastes verloren.
- ENet drosselt die Figuren nie mehr; sonst konnten die Figuren eines
von zwei Gästen dauerhaft stehen bleiben. Figuren gehen geordnet, und
eine stille Verbindung gilt nach höchstens acht Sekunden als verloren.
- Positionen, die keine Zahlen sind, und Figuren von Spielern, die
nicht online sind, werden verworfen.
- Ein Host mit angehaltener Simulation sagt das in der Statuszeile.
- Neue Tests: Schlag während der Abklingzeit, Zielauswahl von NetLink,
verworfene Figuren, Neuabgleich über die Brücke.
- Der Fragebogen sagt, was jeder Rechner braucht, und die Freigabe in
der Firewall gehört zum Host. CLAUDE.md beschreibt das Halten der
Schläge, die Drosselung und die Zeitüberschreitung und ergänzt die
Vertrauensregel um die Schlüssel.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Der Fragebogen nennt die Statuszeile oben rechts. Er sagt wieder, wann
eine Aufzeichnung entsteht, dass eine angehaltene Sitzung keine
hinterlässt und wo die Logs liegen, und er gibt bessere Hinweise für
Verbindungen übers Internet. CLAUDE.md beschreibt jetzt auch:
- die Übernahme der Host-Welt durch Gäste,
- den festen Anfang von Gruß und Ablehnung,
- die Pausenregel und das Anhalten bei einem Kernfehler,
- die erlaubten Profilnamen,
- die gesperrte Brücken-DLL bei laufendem Spiel.
play-zweites-fenster.bat gibt weitere Argumente an das Spiel weiter.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
play.bat gibt Argumente an das Spiel weiter, und
play-zweites-fenster.bat startet ein zweites Fenster mit eigenem Profil.
CLAUDE.md beschreibt die gemeinsame Welt, das Vertrauensmodell der
Reichweite, die Netzwerkregeln und den Test zweier Instanzen. Ein
Fragebogen begleitet den Probelauf.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Die Uhr des Hosts wartet jetzt auf den Gast. So kann ein langsamer Start
des zweiten Prozesses die Takte bis zum Vergleich nicht mehr verbrauchen.
Der Bot endet auch dann, wenn er seinen Bericht nicht schreiben kann,
und überlebt den Test nie. Ein leeres --storage= führt ihn nicht mehr in
den Ordner des Spielers. Ein neuer Test prüft, dass der Bot ohne
schreibbaren Bericht mit Exit-Code 1 endet.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Ein Test startet einen zweiten Godot-Prozess als Gast. Der Gast tritt
über das Netzwerk bei und schlägt Stein, beide Welten enden im selben
Zustand, ohne Abgleich unterwegs. Damit ist die Prüffrage von
Meilenstein 1 Teil der automatischen Prüfungen.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Hält der Kern mit einem internen Fehler an, schließt ein Host seine Welt
für Gäste, und ein Gast kehrt ins Menü zurück, statt dass die anderen
ohne Nachricht warten. Eine Pause endet erst, wenn der Host einen Gast
angenommen hat, nicht schon bei einer bloßen Verbindung. So kann ein
Gast nicht mehr in einer pausierten Welt festhängen, wenn der Host
zwischen Verbindung und Gruß pausiert. Eine Pause lässt sich immer
beenden. Meldungen, die nach dem Ende einer Sitzung im selben Stapel
folgen, bleiben unbeachtet. Vier neue Tests decken das ab.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Die Hauptszene beginnt mit dem Startmenü oder mit dem Direktstart aus
der Befehlszeile. Gäste sehen die Welt des Hosts und die Figuren aller
Spieler. Nur der Host speichert, Pause gibt es nur ohne Gäste, Laden
nur beim Spielen allein. Ablehnungen, Abbrüche und Abgleiche erscheinen
als Meldung, und ein Spielstand, der sich gerade nicht lesen lässt,
bleibt unangetastet.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Das Startmenü fragt nach dem Namen und bietet allein spielen, die Welt
öffnen oder beitreten. Die Figuren der anderen Spieler gleiten zu ihrer
neuesten Position und tragen ihren Namen. Die Anzeige füllt Werte in
Meldungen ein und hat eine Statuszeile. Die Texte für Menü und Netzwerk
gibt es auf Deutsch und Englisch.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Wer eine Einstellung ändert, liest die Einstellungsdatei jetzt an
derselben Stelle wie Schlüssel und Speicherstand. Ist sie gerade nicht
lesbar, etwa weil ein anderes Programm sie hält, bleibt sie unverändert,
statt nur mit dem neuen Wert überschrieben zu werden. Von einer
beschädigten Datei bleibt, was Godot lesen konnte. Ein neuer Test deckt
die gehaltene Datei ab. Der Parameter von set_player_name heißt jetzt
new_name, damit er die Methode player_name nicht verdeckt.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Die Befehlszeile wählt ein Profil, einen Namen und einen Direktstart.
Zwei Fenster auf einem Rechner sind so zwei Spieler. Ein Schlüssel oder
Spielstand, der sich gerade nicht lesen lässt, wird nicht mehr ersetzt.
Name und zuletzt genutzte Adresse bleiben gespeichert.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
NetLink merkt sich die Verbindungen, die es gerade schließt, und
schickt ihnen nichts mehr. Pakete an alle oder an alle außer einem gehen
einzeln an die offenen Verbindungen, statt Godot ein Ziel zu nennen, das
es nicht mehr gibt. Beides löste sonst Fehler in Godot aus, etwa wenn
der Host Figuren weiterreicht, während er einen abgelehnten Gast
hinauswirft. Ein neuer Test mit zwei Gästen deckt das ab.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
NetLink verbindet Host und Gäste über ENet: Nachrichten des Kerns
zuverlässig und in Reihenfolge, Positionen der Figuren unzuverlässig.
Eine Verbindung schließt erst, wenn wartende Nachrichten draußen sind.
SessionLink trägt die Nachrichten einer Sitzung über die Verbindung und
reicht Positionen weiter. Die Tests verbinden zwei Seiten über die
Loopback-Schnittstelle.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Der Test einer Panik im Kern tauscht den globalen Panik-Hook nicht mehr
aus. Das war unnötig, weil der Testläufer die Meldung einer erwarteten
Panik ohnehin zurückhält, und es konnte Meldungen anderer, gleichzeitig
scheiternder Tests verschlucken. Die Gast-Schleifen in den GDScript-Tests
der Brücke laufen höchstens so oft, wie Takte warten, damit ein
abgewichener Gast den Testlauf nicht anhält.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
GwSession führt eine Sitzung als Host oder als Gast und reicht die
Nachrichten des Kerns an GDScript weiter. Nur der Host speichert. Die
Behandlung interner Fehler liegt jetzt in einem reinen Rust-Teil und hat
einen Test, und das Ereignis join_refused nennt den Schlüssel.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Neue Tests treiben Host und Gast Nachricht für Nachricht und erzeugen,
was das Netz im Speicher nie herstellt: einen Gast, der hinterherhängt,
einen verlorenen Takt und Beitritte, die an den Grenzen warten. Sie
halten fest, dass ein abgewichener Gast nichts rechnet, bis die Welt des
Hosts kommt, dass er dann ältere Takte verwirft, dass die Zahl der
Aktionen eines Gastes in jedem Takt neu beginnt und dass wartende
Beitritte bei beiden Spielergrenzen zählen.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Der Host nimmt Gäste auf, macht aus ihren Aktionen Befehle für den
Spieler ihrer Verbindung, begrenzt sie pro Takt und schickt jeden Takt
an alle Gäste. Gäste rechnen jeden Takt nach, vergleichen die
Prüfsummen und holen sich nach einer Abweichung die Welt des Hosts neu.
Tests verbinden Host und Gäste im Speicher, auch über 2000 Takte mit
Gehen und Wiederkommen.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Ein Test hält fest, dass ein Gruß mit Kennung und Version beginnt und
eine Ablehnung aus Kennung und Grund besteht. Beides bleibt auch bei
einer neuen Protokollversion gleich, damit sich Spiele verschiedener
Versionen weiter sagen können, dass sie nicht zusammenpassen. Die
Meldung des festgeschriebenen Nachrichtenformats weist darauf hin.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Gäste grüßen mit Protokollversion, Regel-Kennung, Schlüssel und Name
und schicken danach nur Aktionen ohne Spielernummer. Der Host schickt
seine Welt, Ablehnungen mit Grund und jeden Takt mit seinen Befehlen,
jede Sekunde mit einer Prüfsumme. Ein Gruß einer anderen Version bleibt
erkennbar, und das Format ist in den festgeschriebenen Werten
verankert.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Die eingefrorenen Skripte ziehen von den festgeschriebenen Tests in den
Kern. Aus ihren Endzuständen leitet sich die Regel-Kennung ab, die sich
mit jeder Regel ändert, die ein Skript berührt. Aufzeichnungen tragen
sie und werden mit anderen Regeln abgelehnt, statt eine scheinbare
Abweichung zu melden. Fremde Aufzeichnungen dürfen höchstens 30 Tage
lang sein. Ein Test hält fest, dass zu lange Namen beim Dekodieren
abgelehnt werden.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Zehn Tasks machen Grovewright zum Koop-Spiel für bis zu vier Spieler:
Regel-Kennung und Aufzeichnung Version 3, Nachrichten zwischen Host und
Gästen, Host und Gast im Kern, die Brücke für beide Rollen, die
Verbindung über ENet, Profile und Startoptionen, Startmenü und fremde
Figuren, die Hauptszene für Host und Gast, ein Test mit zwei echten
Spielinstanzen und zum Schluss Startskripte, Regeln und Fragebogen.
Jede Task-Grenze wurde vorab mit rotem und grünem Lauf nachgestellt.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>