Document workshop upload process

This commit is contained in:
Kroonk
2026-05-23 09:52:01 +02:00
parent 4becfc0baa
commit 01f72a32cb
4 changed files with 427 additions and 1 deletions

274
Brain.md Normal file
View File

@@ -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

View File

@@ -40,6 +40,7 @@ scripts/
docs/ docs/
setup.md Setup- und Testnotizen setup.md Setup- und Testnotizen
brotato-multiplayer-modding-research.md 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. 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. 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. 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
```

143
docs/workshop-upload.md Normal file
View File

@@ -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_<appid>.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

View File

@@ -3,7 +3,7 @@
"namespace": "Brogether", "namespace": "Brogether",
"version_number": "0.1.0", "version_number": "0.1.0",
"description": "Experimental 2-player online multiplayer foundation for Brotato using Steam lobbies and P2P packets.", "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": [], "dependencies": [],
"extra": { "extra": {
"godot": { "godot": {