Initial Brogether prototype
This commit is contained in:
87
docs/brotato-multiplayer-modding-research.md
Normal file
87
docs/brotato-multiplayer-modding-research.md
Normal file
@@ -0,0 +1,87 @@
|
||||
# Brotato Multiplayer Mod Research
|
||||
|
||||
Stand: 2026-05-22
|
||||
|
||||
## Kurzfazit
|
||||
|
||||
Brotato-Mods laufen ueber den Godot Mod Loader und werden als ZIPs ueber Steam Workshop verteilt. Fuer eine echte Online-Multiplayer-Mod ist das Workshop-Paket nur der Verteilungskanal; die eigentliche Schwierigkeit ist die Netzwerksynchronisation des Spiels.
|
||||
|
||||
Es gibt bereits eine Workshop-Mod namens "Brotatogether - Networked Multiplayer with Steam Lobbies". Sie nutzt Steam-basierte Lobbies, ist aber laut Workshop-Kommentaren und Beschreibung vor allem bei 3-4 Spielern und aktuellen DLC-/Patch-Staenden fehleranfaellig. Das ist trotzdem die wichtigste Referenz, weil sie beweist, dass Steam-Lobbies aus einer Brotato-Mod heraus grundsaetzlich machbar sind.
|
||||
|
||||
## Was man braucht
|
||||
|
||||
- Brotato auf Steam, weil die Steam-Version Workshop und ModLoader enthaelt.
|
||||
- GodotSteam passend zur Brotato-Godot-Version. Der aktuelle Brotato-Modding-Guide verweist auf GodotSteam fuer Godot 3.6; aeltere Notizen nennen Godot 3.5. Die genaue Version sollte beim Decompile ueber GDRETools/Export-Log verifiziert werden.
|
||||
- GDRETools, um das Brotato-Projekt lokal fuer Modding/Analyse zu recovern.
|
||||
- Godot-Kenntnisse, insbesondere GDScript, Szenenbaum, Autoloads/Singletons und Resource-Dateien.
|
||||
- Godot Mod Loader Wissen: `mods-unpacked`, `manifest.json`, `mod_main.gd`, Script Extensions, Hooks, Abhaengigkeiten.
|
||||
- Steam-/GodotSteam-Netzwerkkenntnisse: Steam Matchmaking/Lobbies plus P2P/Networking Messages oder Sockets.
|
||||
- Mindestens zwei Steam-Accounts/Installationen oder Testmaschinen fuer echte Netzwerk-Tests.
|
||||
|
||||
## Mod-Struktur
|
||||
|
||||
Entwicklung:
|
||||
|
||||
```text
|
||||
res://
|
||||
└── mods-unpacked
|
||||
└── Brogether-Brogether
|
||||
├── manifest.json
|
||||
├── mod_main.gd
|
||||
├── extensions/
|
||||
└── translations/
|
||||
```
|
||||
|
||||
Workshop/Distribution:
|
||||
|
||||
```text
|
||||
Brogether-Brogether-0.1.0.zip/
|
||||
├── .import/
|
||||
└── mods-unpacked/
|
||||
└── Brogether-Brogether/
|
||||
├── manifest.json
|
||||
├── mod_main.gd
|
||||
└── extensions/
|
||||
```
|
||||
|
||||
## Multiplayer-Architektur
|
||||
|
||||
Empfohlener erster Ansatz: Host-authoritative P2P ueber Steam.
|
||||
|
||||
- Ein Spieler erstellt eine Steam Lobby.
|
||||
- Andere Spieler joinen ueber Steam Lobby/Friends.
|
||||
- Der Host ist die einzige Wahrheit fuer Run-State, Gegner, Drops, Shop-Entscheidungen und RNG.
|
||||
- Clients senden Inputs/Entscheidungen an den Host.
|
||||
- Host sendet regelmaessige Snapshots oder Events zurueck.
|
||||
|
||||
Warum nicht sofort voll deterministisch/lockstep: Brotato hat viele zufalls- und framegetriebene Systeme. Ein kompletter Lockstep-Port waere wahrscheinlich spröde, solange wir nicht exakt wissen, welche Systeme deterministisch laufen.
|
||||
|
||||
## MVP-Vorschlag
|
||||
|
||||
1. Mod-Skeleton laedt in Brotato und zeigt einen Multiplayer-Button oder Debug-Hotkeys.
|
||||
2. Steam-Lobby erstellen/joinen.
|
||||
3. Text-/Ping-Nachrichten zwischen zwei Clients senden.
|
||||
4. Run-Start zwischen zwei Clients synchronisieren.
|
||||
5. Nur Spielerposition/Input synchronisieren, Gegner und Spielwelt bleiben host-controlled.
|
||||
6. Shop-Phase synchronisieren.
|
||||
7. Erst danach 3-4 Spieler, Reconnects, Crash Recovery und DLC-Kompatibilitaet.
|
||||
|
||||
## Hauptrisiken
|
||||
|
||||
- Brotato ist nicht fuer echten Online-Multiplayer gebaut; viele Systeme muessen per Hook/Extension kontrolliert werden.
|
||||
- Steam Workshop erlaubt die Verteilung, gibt aber keine Multiplayer-API. Netzwerk laeuft ueber GodotSteam/Steamworks.
|
||||
- Updates/DLC koennen Script-Extensions brechen.
|
||||
- Save- und Cloud-Daten koennen bei instabilen Mods leiden; Tests sollten mit Backup-Saves laufen.
|
||||
- 3-4 Spieler sind deutlich schwerer als 2 Spieler, weil Bandbreite, Shop-Sync, Disconnects und Edge Cases stark wachsen.
|
||||
|
||||
## Wichtige Quellen
|
||||
|
||||
- Brotato Wiki, Modding: https://brotato.wiki.spellsandguns.com/Modding
|
||||
- Steam Community, Brotato Modding Guide: https://steamcommunity.com/sharedfiles/filedetails/?id=2931079751
|
||||
- Godot Mod Loader Wiki: https://wiki.godotmodding.com/
|
||||
- Godot Mod Loader, Mod Structure: https://wiki.godotmodding.com/guides/modding/mod_structure/
|
||||
- Godot Mod Loader, Mod Files: https://wiki.godotmodding.com/guides/modding/mod_files/
|
||||
- Godot Mod Loader, Workshop Uploader: https://wiki.godotmodding.com/guides/modding/tools/workshop_uploader/
|
||||
- Steamworks Networking Docs: https://partner.steamgames.com/doc/features/multiplayer/networking
|
||||
- Brotatogether GitHub: https://github.com/boardengineer/Brotatogether
|
||||
- Brotatogether Workshop: https://steamcommunity.com/workshop/filedetails/?id=2985539742
|
||||
81
docs/setup.md
Normal file
81
docs/setup.md
Normal file
@@ -0,0 +1,81 @@
|
||||
# Brogether Setup
|
||||
|
||||
Stand: 2026-05-22
|
||||
|
||||
## Aktueller Zustand
|
||||
|
||||
- Brotato Steam wurde lokal gefunden unter `C:\Program Files (x86)\Steam\steamapps\common\Brotato`.
|
||||
- Die recovered Scripts melden Brotato `1.1.15.3` und ModLoader `6.3.0`.
|
||||
- GDRETools wurde nach `.tools/gdretools` geladen.
|
||||
- Godot Mod Loader v6.3.0 wurde nach `.tools/godot-mod-loader` geladen.
|
||||
- Brotato- und DLC-Scripts wurden nach `recovered/` recovered.
|
||||
- Das erste Mod-Skeleton liegt unter `src/mods-unpacked/Brogether-Brogether`.
|
||||
|
||||
## Lokalen Test-Build installieren
|
||||
|
||||
```powershell
|
||||
.\scripts\install-local.ps1
|
||||
```
|
||||
|
||||
Das erzeugt `dist/Brogether-Brogether-0.1.0.zip` und kopiert es fuer lokale Tests in einen bereits abonnierten Brotato-Workshop-Ordner:
|
||||
|
||||
```text
|
||||
C:\Program Files (x86)\Steam\steamapps\workshop\content\1942280\<workshop-id>
|
||||
```
|
||||
|
||||
Brotato laedt in der Steam-Version nur Workshop-Ordner, deren ID Steam als abonniert meldet. Darum wird das lokale ZIP fuer den ersten Test neben eine vorhandene abonnierte Workshop-Mod gelegt. Spaeter ersetzen wir das durch einen eigenen privaten/unlisted Brogether-Workshop-Eintrag.
|
||||
|
||||
Danach Brotato ueber Steam starten. Die Mod sollte im Mod-Menue auftauchen.
|
||||
|
||||
## Debug-Hotkeys im Spiel
|
||||
|
||||
- `F6`: oeffentliche Dev-Steam-Lobby erstellen
|
||||
- `F7`: Brogether-Lobby suchen und beitreten
|
||||
- `F9`: Lobby verlassen
|
||||
- `F10`: Ping-Paket an den anderen Spieler senden
|
||||
- `F11`: lokalen Loopback-Test ohne zweiten Client ausfuehren
|
||||
|
||||
Die Ausgabe landet im Godot/Brotato-Log. Das erste Ziel ist, auf zwei Steam-Clients folgende Meldungen zu sehen:
|
||||
|
||||
- `Steam ready`
|
||||
- `created lobby`
|
||||
- `joined lobby`
|
||||
- `packet from ... handshake`
|
||||
- `packet from ... ping`
|
||||
- `packet from ... pong`
|
||||
|
||||
Ohne zweiten Steam-Client kann `F11` die Paketlogik lokal simulieren. Das ersetzt keinen echten Steam-P2P-Test, prueft aber, ob Handshake-, Ping- und Pong-Verarbeitung in Brogether funktionieren.
|
||||
|
||||
Zusaetzlich schreibt Brogether ein eigenes Debug-Log nach:
|
||||
|
||||
```text
|
||||
C:\Users\tommi\AppData\Roaming\Brotato\brogether.log
|
||||
```
|
||||
|
||||
## Naechster technischer Schritt
|
||||
|
||||
Wenn der P2P-Handshake zwischen zwei Steam-Clients funktioniert, erweitern wir die Mod um:
|
||||
|
||||
1. Hook in die Run-Erstellung. Erledigt: `extensions/main_ext.gd` meldet Run-Start.
|
||||
2. Host/Client-Rollenmodell. Grundlegend vorhanden ueber Steam-Lobby-Owner.
|
||||
3. Minimalen Player-Snapshot-Sync. Grundlegend vorhanden: Position, Leben, Dead-State alle 250 ms.
|
||||
4. Erst danach Gegner-, Wave- und Shop-Sync.
|
||||
|
||||
## Aktueller Multiplayer-Stand
|
||||
|
||||
Brogether hat jetzt eine Script-Extension fuer `res://main.gd`. Beim Start einer Wave/Run schreibt sie:
|
||||
|
||||
- `run scene ready`
|
||||
- `players spawned`
|
||||
- periodische `host_snapshot`/`client_snapshot` Pakete, wenn eine Lobby mit Peer existiert
|
||||
- `run scene exiting`
|
||||
|
||||
Die Snapshots enthalten derzeit nur das sichere Minimum: Spielerindex, Position, Leben, Max-Leben und Dead-State. Das ist noch kein spielbarer Remote-Player, aber die Transport- und Hook-Struktur ist damit vorbereitet.
|
||||
|
||||
Es gibt intern eine experimentelle Funktion zum Vorbereiten lokaler 2-Spieler-Coop-Slots. Sie ist bewusst nicht mehr an einen Hotkey gebunden, weil sie Brotatos lokale Coop-UI aktiviert und im normalen Menue stoeren kann. Wenn ein 2-Spieler-Run existiert, versucht Brogether eingehende Remote-Snapshots auf den zweiten lokalen Player anzuwenden.
|
||||
|
||||
## Editor-Hinweis
|
||||
|
||||
Fuer den ersten In-Game-Test ist noch kein Godot-Editor noetig: die Mod wird als ZIP gebaut und direkt von Brotato geladen.
|
||||
|
||||
Fuer spaetere Hook-Arbeit ist ein GodotSteam-Editor sinnvoll. Die aktuellen GodotSteam-3.x-Releases liefern auf GitHub/Codeberg vor allem Templates; wenn wir den Editor brauchen, sollten wir gezielt eine zu Brotatos recovered Engine-Version passende GodotSteam-Binary verwenden oder selbst bauen. Vanilla-Godot ist fuer das recovered Brotato-Projekt problematisch, weil der `Steam`-Singleton fehlt.
|
||||
Reference in New Issue
Block a user