Document workshop upload process
This commit is contained in:
274
Brain.md
Normal file
274
Brain.md
Normal 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
|
||||
@@ -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
|
||||
```
|
||||
|
||||
143
docs/workshop-upload.md
Normal file
143
docs/workshop-upload.md
Normal 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
|
||||
@@ -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": {
|
||||
|
||||
Reference in New Issue
Block a user