275 lines
9.3 KiB
Markdown
275 lines
9.3 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/`.
|
|
- Gebaute ZIPs liegen absichtlich untracked unter `dist/`.
|
|
|
|
## 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
|
|
```
|
|
|
|
## Packaging Und Lokale Installation
|
|
|
|
- `scripts/package.ps1` baut `dist\Brogether-Brogether-0.1.0.zip`.
|
|
- 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
|