From 01f72a32cb93f99d90ad44c721da955674c55fe3 Mon Sep 17 00:00:00 2001 From: Kroonk Date: Sat, 23 May 2026 09:52:01 +0200 Subject: [PATCH] Document workshop upload process --- Brain.md | 274 ++++++++++++++++++ README.md | 9 + docs/workshop-upload.md | 143 +++++++++ .../Brogether-Brogether/manifest.json | 2 +- 4 files changed, 427 insertions(+), 1 deletion(-) create mode 100644 Brain.md create mode 100644 docs/workshop-upload.md diff --git a/Brain.md b/Brain.md new file mode 100644 index 0000000..77409c9 --- /dev/null +++ b/Brain.md @@ -0,0 +1,274 @@ +# 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 diff --git a/README.md b/README.md index bc6c36c..08854f5 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,7 @@ scripts/ docs/ setup.md Setup- und Testnotizen brotato-multiplayer-modding-research.md + workshop-upload.md Schritt-fuer-Schritt Steam Workshop Upload ``` Nicht eingecheckt werden `.tools/`, `recovered/` und `dist/`. Diese Ordner enthalten lokale Tools, recovered Brotato-Dateien und gebaute ZIPs. @@ -94,3 +95,11 @@ Sobald ein zweiter Steam-Client verfuegbar ist: 6. Einen Run starten und pruefen, ob `run_started`, `players_spawned` und Snapshot-Pakete auf beiden Seiten im Log erscheinen. Wenn das stabil laeuft, ist der naechste Entwicklungsschritt die echte Remote-Spielersteuerung auf Basis der Snapshot- und Input-Pakete. + +## Steam Workshop Upload + +Die einfache Upload-Anleitung liegt in: + +```text +docs/workshop-upload.md +``` diff --git a/docs/workshop-upload.md b/docs/workshop-upload.md new file mode 100644 index 0000000..f34dc6a --- /dev/null +++ b/docs/workshop-upload.md @@ -0,0 +1,143 @@ +# Brogether Steam Workshop Upload + +Stand: 2026-05-23 + +Diese Anleitung beschreibt den einfachen Upload-Weg fuer Brogether ueber Brotatos mitgeliefertes `GodotWorkshopUtility.exe`. + +## Was du brauchst + +- Brotato auf Steam installiert. +- Steam muss laufen und dein Account muss online sein. +- Dein Steam-Account muss Brotato besitzen. +- Der aktuelle Brogether-ZIP-Build: + +```powershell +.\scripts\package.ps1 +``` + +Danach liegt die Datei hier: + +```text +dist\Brogether-Brogether-0.1.0.zip +``` + +- Optional, aber empfohlen: ein Workshop-Preview-Bild als PNG oder JPG. Am besten `512x512`, unter `1 MB`. +- Fuer den ersten Upload brauchst du noch keine Workshop-ID. Steam erzeugt sie beim Upload. +- Fuer spaetere Updates brauchst du die Workshop-ID aus der URL deines Workshop-Eintrags. + +## Wichtig Vor Dem Upload + +Brogether ist noch ein Prototyp. Fuer den ersten Workshop-Eintrag empfehle ich: + +- Sichtbarkeit zuerst auf `Private` oder `Unlisted` lassen. +- Titel klar als Test/Prototype markieren. +- Beschreibung deutlich machen, dass echter Zwei-Spieler-Gameplay-Sync noch nicht fertig ist. +- Nach dem Upload direkt die Workshop-ID notieren. + +## Schritt Fuer Schritt: Erster Upload + +1. Steam starten und online lassen. +2. Brotato schliessen, falls es offen ist. +3. Im Projektordner den ZIP bauen: + +```powershell +.\scripts\package.ps1 +``` + +4. Brotatos Workshop-Uploader starten: + +```text +C:\Program Files (x86)\Steam\steamapps\common\Brotato\GodotWorkshopUtility.exe +``` + +5. Im Uploader bei der Mod-Datei diesen ZIP auswaehlen: + +```text +C:\Users\tommi\Documents\PotatoConnect\dist\Brogether-Brogether-0.1.0.zip +``` + +6. Optional ein Preview-Bild auswaehlen. Wenn der Upload wegen des Bildes fehlschlaegt, erst einmal ohne Bild hochladen. +7. Das Feld fuer die Workshop Item ID leer lassen. +8. Upload starten und warten, bis der Uploader Erfolg meldet. +9. Wenn Steam nach der Workshop Legal Agreement fragt, im Browser/Steam-Overlay akzeptieren. +10. Den neuen Workshop-Eintrag in Steam oeffnen. +11. Sichtbarkeit rechts im Workshop-Eintrag auf `Private`, `Unlisted` oder spaeter `Public` setzen. +12. Die Workshop-ID aus der URL notieren. Beispiel: + +```text +https://steamcommunity.com/sharedfiles/filedetails/?id=1234567890 +``` + +Die ID waere hier: + +```text +1234567890 +``` + +## Schritt Fuer Schritt: Update Eines Bestehenden Workshop-Eintrags + +1. ZIP neu bauen: + +```powershell +.\scripts\package.ps1 +``` + +2. `GodotWorkshopUtility.exe` starten. +3. Wieder `dist\Brogether-Brogether-0.1.0.zip` auswaehlen. +4. Optional dasselbe Preview-Bild auswaehlen. +5. Dieses Mal die bestehende Workshop-ID eintragen. +6. Upload starten. +7. Danach im Steam Workshop Titel, Beschreibung, Sichtbarkeit und Bilder pruefen. + +Hinweis: Der Godot Mod Loader Wiki-Hinweis sagt, dass der Titel bei Updates vom Uploader wieder ueberschrieben werden kann. Also nach jedem Upload kurz in Steam kontrollieren. + +## Vorschlag Fuer Workshop-Titel + +```text +Brogether - Online Multiplayer Prototype +``` + +## Vorschlag Fuer Workshop-Beschreibung + +```text +Brogether is an experimental online multiplayer prototype for Brotato. + +Current status: +- Steam lobby creation and lobby browser +- Optional lobby password check +- Waiting room with Steam names, Ready state and static avatars +- Local Fake Peer test mode for development without a second client +- Basic Steam P2P packets for handshake, ping and pong +- Early run hooks and player snapshot logging + +Not finished yet: +- Fully playable remote players +- Shop, item, enemy, wave and RNG synchronization +- Final two-client gameplay flow + +Use this only for testing with friends who know it is still experimental. +``` + +## Was Tester Danach Machen + +1. Steam Workshop-Eintrag abonnieren. +2. Warten, bis Steam den Workshop-Download abgeschlossen hat. +3. Brotato starten. +4. Im Mod-Menue Brogether aktivieren, falls noetig. +5. Brotato neu starten, wenn die Mod erst nach Neustart sauber geladen wird. +6. Im Hauptmenue `BROGETHER` oeffnen. + +## Troubleshooting + +- Mod taucht nicht auf: Steam Workshop-Download abwarten, Brotato neu starten, Mod-Menue pruefen. +- Upload findet Datei nicht: ZIP-Pfad pruefen und vorher `.\scripts\package.ps1` ausfuehren. +- Upload mit Icon schlaegt fehl: Icon unter `1 MB` halten, am besten `512x512 PNG`, oder den ersten Upload ohne Icon testen. +- Zugriff verweigert oder Item bleibt versteckt: Steam Workshop Legal Agreement akzeptieren. +- Update erstellt neuen Eintrag: Beim Update muss die bestehende Workshop-ID eingetragen sein. +- Logs fuer Upload/Download liegen laut Steamworks-Doku unter anderem in `Steam\logs\Workshop_log.txt` und `Steam\workshopbuilds\depot_build_.log`. + +## Quellen + +- Godot Mod Loader Wiki: Steam Workshop Uploader: https://wiki.godotmodding.com/guides/modding/tools/workshop_uploader/ +- Godot Mod Loader Wiki: Distributing Mods: https://wiki.godotmodding.com/guides/modding/distributing_mods/ +- Steamworks Documentation: Steam Workshop Implementation Guide: https://partner.steamgames.com/doc/features/workshop/implementation diff --git a/src/mods-unpacked/Brogether-Brogether/manifest.json b/src/mods-unpacked/Brogether-Brogether/manifest.json index b8b35ad..c7a60f6 100644 --- a/src/mods-unpacked/Brogether-Brogether/manifest.json +++ b/src/mods-unpacked/Brogether-Brogether/manifest.json @@ -3,7 +3,7 @@ "namespace": "Brogether", "version_number": "0.1.0", "description": "Experimental 2-player online multiplayer foundation for Brotato using Steam lobbies and P2P packets.", - "website_url": "https://example.com", + "website_url": "https://git.mischlabs.de/MrDiderot/Brogether", "dependencies": [], "extra": { "godot": {