# Brogether Brain Stand: 2026-05-23 Diese Datei ist das Projektgedaechtnis fuer Brogether. Sie fasst zusammen, was bisher recherchiert, gebaut, getestet und entschieden wurde. ## Projektidentitaet - Projektname: Brogether - Ziel: Eine Steam-Workshop-Mod fuer Brotato, die echten Online-Multiplayer fuer zuerst 2 Spieler vorbereitet. - Langfristige Idee: 2-4 Freunde sollen Brotato online spielen koennen, ohne Steam Remote Play. - Aktueller Status: Prototyp, noch keine fertige spielbare Online-Multiplayer-Mod. - Git-Remote: `https://git.mischlabs.de/MrDiderot/Brogether.git` - Aktueller Hauptbranch: `master` ## Lokale Umgebung - Workspace: `C:\Users\tommi\Documents\PotatoConnect` - Brotato Steam Pfad: `C:\Program Files (x86)\Steam\steamapps\common\Brotato` - Brotato Version aus recovered scripts: `1.1.15.3` - Godot Mod Loader Version: `6.3.0` - Brotato bringt `GodotWorkshopUtility.exe` mit. - Lokale Tools liegen absichtlich untracked unter `.tools/`. - Recovered Brotato-Scripts liegen absichtlich untracked unter `recovered/`. - Lokale Build-ZIPs liegen absichtlich untracked unter `dist/`. - Der aktuelle teilbare Mod-ZIP wird zusaetzlich unter `releases/` committed. ## Relevante Projektstruktur ```text src/mods-unpacked/Brogether-Brogether/ manifest.json mod_main.gd extensions/main_ext.gd extensions/main_menu_ext.gd scripts/ package.ps1 package-release.bat install-local.ps1 docs/ setup.md brotato-multiplayer-modding-research.md workshop-upload.md releases/ Brogether-Brogether-0.1.0.zip ``` ## Packaging Und Lokale Installation - `scripts/package.ps1` baut `dist\Brogether-Brogether-0.1.0.zip`. - Danach kopiert `scripts/package.ps1` denselben ZIP nach `releases\Brogether-Brogether-0.1.0.zip`. - `dist/` bleibt ignoriert; `releases/` wird committed, damit Tester den neuesten ZIP direkt aus dem Repo laden koennen. - `scripts/package-release.bat` fragt interaktiv nach einem Versionsnamen und ruft `package.ps1 -Version ` auf. - Das Skript nutzt .NET `ZipArchive`, weil PowerShell `Compress-Archive` Backslash-Pfade erzeugt hatte, die Godot/Brotato nicht sauber akzeptierte. - ZIP-Struktur im Archiv: ```text mods-unpacked/Brogether-Brogether/manifest.json mods-unpacked/Brogether-Brogether/mod_main.gd mods-unpacked/Brogether-Brogether/extensions/main_ext.gd mods-unpacked/Brogether-Brogether/extensions/main_menu_ext.gd ``` - `scripts/install-local.ps1` baut den ZIP und kopiert ihn in einen vorhandenen abonnierten Brotato-Workshop-Ordner. - Der lokale Testordner war bisher: ```text C:\Program Files (x86)\Steam\steamapps\workshop\content\1942280\3681043754 ``` - Grund fuer diese Testmethode: Die Steam-Version von Brotato scannt Workshop-Ordner abonnierter Items; ein eigener Brogether-Workshop-Eintrag ersetzt diesen Workaround spaeter. ## Workshop Upload - Einfachster Upload-Weg: Brotatos `GodotWorkshopUtility.exe`. - Pfad: ```text C:\Program Files (x86)\Steam\steamapps\common\Brotato\GodotWorkshopUtility.exe ``` - Fuer Erstupload: - Steam muss laufen und online sein. - ZIP mit `.\scripts\package.ps1` bauen. - Im Uploader den ZIP aus `dist\` auswaehlen. - Optional Preview-Icon verwenden, empfohlen `512x512 PNG` unter `1 MB`. - Workshop Item ID leer lassen. - Nach Upload Workshop Legal Agreement akzeptieren, falls Steam danach fragt. - Item ist initial private bzw. muss in Steam sichtbar geschaltet werden. - Fuer Updates: - Bestehende Workshop-ID im Uploader eintragen. - Nach Upload Titel/Beschreibung pruefen, da der Uploader Titel ueberschreiben kann. - Details stehen in `docs/workshop-upload.md`. ## Manifest Aktuelle Mod-Metadaten: - Name: `Brogether` - Namespace: `Brogether` - Version: `0.1.0` - Beschreibung: Experimental 2-player online multiplayer foundation for Brotato using Steam lobbies and P2P packets. - Website: `https://git.mischlabs.de/MrDiderot/Brogether` - Kompatible Mod Loader Version: `6.3.0` - Kompatible Brotato Version: `1.1.15.3` - Tags: `Utilities`, `New Mechanics` ## Aktuelle In-Game Features - Mod wird von Brotatos Godot Mod Loader geladen. - `main_ext.gd` erweitert `res://main.gd`. - `main_menu_ext.gd` erweitert `res://ui/menus/pages/main_menu.gd`. - Im Hauptmenue wird ein `BROGETHER`-Button hinzugefuegt. - `F5` oeffnet/schliesst das Brogether-Modal. - Das Modal ist standardmaessig versteckt. - Das Modal pausiert wie Brotatos F8-Feedback-Fenster und stellt Fokus nach dem Schliessen wieder her. - `Escape`, `F5` und Close schliessen das Modal. ## Lobby UI - Lobby-Browser mit `Refresh`. - Lobby-Erstellung mit optionalem Passwort. - Lobby-Auswahl und Join. - Wartebereich nach Host/Join. - Spielerkacheln zeigen Steam-Namen und statische Initialen-Avatare. - Ready-Status pro Spieler. - Fake-Peer-Modus fuer Tests ohne zweiten Client: - `Add Fake` fuegt lokalen Test-Peer hinzu. - `Fake Ready` toggelt dessen Ready-State. - `Ready` toggelt den lokalen Spieler. - Der fruehere sichtbare Brogether-Startbutton wurde entfernt, weil er nur ein Testereignis geloggt hatte und dadurch missverstaendlich war. - Bis echte Run-Synchronisation existiert, startet man Brotato ueber den normalen Spielablauf. ## Hotkeys ```text F5 Brogether-Modal ein-/ausblenden F6 Steam-Lobby erstellen F7 Lobby suchen / joinen F9 Lobby verlassen F10 Ping senden F11 Lokalen Loopback-Test starten ``` Hinweis: Fruehere Ctrl/Shift/C-Kombinationen wurden vermieden, weil sie Brotatos lokale Coop-UI/Overlay stoeren konnten. ## Steam Und P2P - Steam wird ueber den vorhandenen `Steam`-Singleton des Spiels angesprochen. - Bei Start wird `getSteamID` gelesen. - Verbundene Steam-Signale: - `lobby_created` - `lobby_joined` - `lobby_match_list` - `lobby_chat_update` - `p2p_session_request` - `p2p_session_connect_fail` - P2P Relay wird aktiviert, falls verfuegbar. - Pakettypen: - `handshake` - `handshake_ack` - `ping` - `pong` - `ready_state` - `run_started` - `players_spawned` - `host_snapshot` - `client_snapshot` ## Run Hooks Und Snapshot-Prototyp - `main_ext.gd` meldet: - Run-Szene bereit - Spieler gespawnt - periodische Snapshot-Ticks alle ca. 250 ms - Run-Szene verlassen - Snapshots enthalten aktuell: - Spielerindex - Position - Leben - Max-Leben - Dead-State - Eingehende Remote-Snapshots koennen experimentell auf einen zweiten lokalen Player angewendet werden, falls ein lokaler 2-Spieler-Coop-Run existiert. - Die lokale Coop-Vorbereitung ist bewusst nicht an einen Hotkey gebunden, weil sie Brotatos lokale Coop-UI stoeren kann. ## Logs Brogether-eigenes Log: ```text C:\Users\tommi\AppData\Roaming\Brotato\brogether.log ``` Brotato/Godot Logs: ```text C:\Users\tommi\AppData\Roaming\Brotato\logs\godot.log C:\Users\tommi\AppData\Roaming\Brotato\logs\modloader.log ``` Wichtige beobachtete Log-Zeilen: - `Brogether-Brogether-0.1.0.zip loaded` - `Installing script extension: res://main.gd <- ...main_ext.gd` - `Installing script extension: res://ui/menus/pages/main_menu.gd <- ...main_menu_ext.gd` - `Steam ready as ...` - `created lobby ...` - `joined lobby ... as host` - `fake peer joined the lobby` - `ready state from ...: Ready` - `local ready state: Ready` ## Bisherige Tests - Mod wird erkannt und geladen. - Mod-Beschreibung erscheint. - Hauptmenue-Button `BROGETHER` erscheint. - Modal oeffnet/schliesst. - Lobby-Erstellung funktioniert. - Host wird als Lobby-Mitglied erkannt. - Leave funktioniert. - Refresh funktioniert und findet erwartbar 0 Lobbys, wenn keine zweite Brogether-Lobby offen ist. - Fake-Peer-Test funktioniert. - Ready/Fake Ready funktioniert. - Loopback-Test fuer Handshake/Ping/Pong funktionierte frueher. - Zweiter echter Steam-Client wurde noch nicht getestet. ## Bekannte Probleme Und Risiken - Beim Spielende erscheinen weiterhin Godot-Exit-Warnungen: - `ObjectDB instances leaked at exit` - `Resources still in use at exit` - `MemoryPool allocs in use` - Diese Warnungen blockieren aktuell nicht das Laden oder die UI, sollten aber spaeter isoliert untersucht werden. - Passwortschutz ist aktuell nur Mod-seitige Zugangskontrolle, keine echte Security. - Steam-Profilbilder sind noch nicht angebunden; aktuell gibt es Initialen-Avatare. - Echter Gameplay-Sync fehlt noch. - Run-, Shop-, Gegner-, Wave-, Item- und RNG-Sync fehlen noch. - Zwei-Client-Handshake/Ping/Pong muss mit echtem zweiten Steam-Client verifiziert werden. ## Naechster Zwei-Client-Test 1. Beide Clients brauchen exakt dieselbe Brogether-Version. 2. Beide abonnieren spaeter denselben Workshop-Eintrag oder nutzen denselben ZIP. 3. Beide starten Brotato ueber Steam. 4. Beide aktivieren Brogether im Mod-Menue, falls noetig. 5. Host oeffnet `BROGETHER`. 6. Host erstellt Lobby. 7. Client oeffnet `BROGETHER`, drueckt `Refresh`, waehlt Lobby, joint. 8. Beide setzen `Ready`. 9. Ping testen. 10. Normalen Brotato-Run starten und Logs fuer Run-Hooks/Snapshots vergleichen. ## Naechste Sinnvolle Entwicklungsschritte 1. Workshop-Eintrag privat/unlisted erstellen. 2. Zweiten Client ueber Workshop installieren lassen. 3. Echten Lobby-Join testen. 4. Ready-State ueber echten P2P testen. 5. Steam-Profilbild-Funktionen im Brotato-GodotSteam-Build pruefen. 6. Exit-Warnungen isolieren. 7. Run-Start-Synchronisation planen. 8. Danach erst Remote-Spielersteuerung, Gegner/Wave/Shop/RNG. ## Git-Verlauf Wichtige Commits - `536cbff` Initial Brogether prototype - `de73f4a` Add Brogether debug panel - `7451be0` Add Brogether menu modal - `d36fa97` Build first lobby browser UI - `a706cae` Clean up Brogether UI on shutdown - `01cb2e8` Add lobby ready fake peer test mode - `4becfc0` Remove premature lobby start button ## Quellen Fuer Workshop/Modloader - Godot Mod Loader Wiki: https://wiki.godotmodding.com/guides/modding/distributing_mods/ - Godot Mod Loader Workshop Uploader: https://wiki.godotmodding.com/guides/modding/tools/workshop_uploader/ - Steamworks Workshop Implementation Guide: https://partner.steamgames.com/doc/features/workshop/implementation