Files
BSO-Mod/README.md
T
MrMahoandClaude Opus 5.5 718e108f02 Mod 0.5.1: F8 entfernt, automatisch neu verbinden; Releases ueber Gitea
Verbunden wird nur beim Start ueber die Lobby, bricht die Verbindung ab alle 10 s neu (nicht nach
Ablehnung oder Konto-Problem). release.ps1 legt jetzt Gitea-Releases mit bso-release.json an.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:01:17 +01:00

88 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# BSO – Bus Simulator Online
Multiplayer-Mod für **Bus-Simulator 2012** (European Bus Simulator 2012, TML-Studios), aufgebaut wie MSCO:
eigenständiger Loader im Spielordner, die Mod selbst in C# (.NET 10).
- Mod: dieses Repository
- Lobby-Server (ohne Portfreigabe): [BSO-Relay](https://git.mbm.wtf/MrMaho/BSO-Relay)
- Launcher (installiert und aktualisiert die Mod): [BSO-Launcher](https://git.mbm.wtf/MrMaho/BSO-Launcher)
- Website, Konten, Freunde, Lobbys, Releases: [BSO-Website](https://git.mbm.wtf/MrMaho/BSO-Website)
**Stand:** Freunde spielen zusammen in einer Lobby – der Server läuft im BSO-Relay, die Mod verbindet sich per WebSocket,
niemand braucht eine Portfreigabe. Mitspieler erscheinen als Bus bzw. Spielfigur mit Namensschild in der Welt.
## Wie es funktioniert
| Teil | Was | MSCO-Gegenstück |
|---|---|---|
| `Loader\dinput8.cpp` | Proxy-DLL `dinput8.dll` im Spielordner: reicht alles an die echte DirectInput-DLL weiter, startet .NET und ruft die Mod jedes Bild auf | Unity Doorstop (`winhttp.dll`) |
| `Bootstrap.cs` | Einstieg (`Start`, `OnFrame`), Protokoll | `Bootstrap.cs` |
| `Vision.cs` | Aufrufe in die Havok Vision Engine (`Vision90.dll` exportiert ihre Funktionen mit Namen) | UnityEngine-Referenz |
| `Rtti.cs`, `Entities.cs` | Spielobjekte und ihre Klassennamen (`CarVehicle`, `KeyControlledCharacter` …) finden | – |
| `LocalPlayer.cs` | eigene Figur und eigener Bus, daraus der `PlayerState` | – |
| `Multiplayer.cs` | Verbindung zum Server, Mitspieler | `MultiplayerManager.cs` |
| `Config.cs` | `BSO.json` (Name, Server, AutoConnect) | – |
| `PositionHud.cs` | Anzeige im Spiel | `Overlays.cs` |
| `BorderlessWindow.cs` | Vollbild im Fenster (F11) | – |
| `RemotePlayers.cs`, `Models.cs` | Mitspieler als Bus/Spielfigur in der Welt, Namensschild | `RemotePlayer.cs` |
| `Shared\*.cs` | Protokoll, `Connection`, `Ticket`, `RelayClient` (WebSocket-Brücke) – **gleiche Dateien wie in BSO-Relay** | `NetSession.cs` |
- **Bild-Takt:** Das Spiel fragt die Tastatur mehrmals pro Bild über DirectInput ab. Der Loader hängt sich dort ein
und ruft `Bootstrap.OnFrame` im Hauptthread auf. Gerechnet wird, wenn die Engine-Uhr weiterläuft; Text wird bei
jedem Aufruf ausgegeben (sonst flackert er). Spielcode wird nicht verändert.
- **Speicher lesen:** `Mem` prüft jede Adresse vorher, denn ein falscher Zeiger würde das Spiel abstürzen lassen.
- **Netzwerk** wie MSCO: `[int Länge][byte Typ][Daten]` über TCP, Lesen per `Poll()` im Hauptthread, Senden über
eigenen Thread. Jeder Spieler schickt 10× pro Sekunde seinen Zustand, der Server verteilt ihn.
- Nur die **64-Bit-Version** (`Bin_High_Win64`). Steam startet sie auf 64-Bit-Windows automatisch.
- Die Engine rechnet in **cm**. Der eigene Bus ist ein `CarVehicle` (Ursprung ~5 m hinter dem Fahrersitz). Solange
man im Bus sitzt, ist die Spielfigur (`KeyControlledCharacter`) aus der Szene verschwunden.
## Installation
**Mit dem Launcher (empfohlen):** [BSO-Launcher](https://git.mbm.wtf/MrMaho/BSO-Launcher) installiert und
aktualisiert BSO und startet das Spiel.
**Von Hand:** `dinput8.dll` nach `<Spielordner>\Bin_High_Win64`, `BSO.dll`, `BSO.runtimeconfig.json` und
`BSO.deps.json` nach `Bin_High_Win64\BSO`. Braucht die **.NET 10 Runtime (x64)**.
## Bauen
Voraussetzungen: Visual Studio mit C++, .NET 10 SDK.
```powershell
.\build.ps1 # -> dist\dinput8.dll, dist\BSO\, dist\BSO-Mod.zip
.\install.ps1 # -> F:\SteamLibrary\steamapps\common\Bus-Simulator 2012\Bin_High_Win64
.\install.ps1 -Uninstall
.\release.ps1 -Product mod -Version 0.2.0 -File dist\BSO-Mod.zip -Changelog "..."
```
Test ohne Spiel: `Loader\ProxyTest.cpp` lädt die Proxy-DLL wie das Spiel (Bauen siehe Kopf der Datei).
## Im Spiel
| Taste | |
|---|---|
| **F9** | Anzeige ein/aus |
| **F10** | alle Objekte der Szene nach `Bin_High_Win64\BSO\entities.txt` (Diagnose) |
| **F11** | Vollbild im Fenster ↔ normales Fenster (nur wenn im Spiel „Vollbild“ aus ist) |
Einstellungen in `Bin_High_Win64\BSO\BSO.json` (der Launcher schreibt Name und Server hinein):
```json
{
"Name": "MrMaho",
"Server": "127.0.0.1:7777",
"AutoConnect": false
}
```
Protokoll: `Bin_High_Win64\BSO\BSO_Loader.txt`
## Nächste Schritte
1. ~~Mod lädt, Busposition anzeigen~~
2. ~~Netzwerk: Server + Positionen austauschen, Mitspieler als Text~~
3. ~~Mitspieler-Busse in der Welt, Namensschild~~
4. ~~Konten, Freunde, Lobby ohne Portfreigabe (BSO-Relay)~~
5. Direkt ins Spiel laden, Chat, Türen/Lichter