MrMahoandClaude Opus 5.5 de51bfde67 Releases wie bei MSCO: build.ps1 laedt die Version gleich auf die Website
release.ps1 wie bei MSCO: Token und Signier-Schluessel DPAPI unter %USERPROFILE%\.bso (-SaveToken,
-ExportSigningKey, -ImportSigningKey), BSO_NO_RELEASE=1, Fehler brechen den Build nicht ab. Statt Gitea.

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

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
  • Launcher (installiert und aktualisiert die Mod): BSO-Launcher
  • Website, Konten, Freunde, Lobbys, Releases: 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 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.

.\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):

{
  "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
S
Description
No description provided
Readme
123 KiB
Languages
C# 74.8%
PowerShell 13.9%
C++ 11.3%