Files
Brogether/Brain.md
2026-05-23 10:37:01 +02:00

281 lines
9.6 KiB
Markdown

# 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
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.
- 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