4.3 KiB
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
- Dedizierter Server: BSO-Server
- Launcher (installiert und aktualisiert die Mod): BSO-Launcher
- Website, Konten und Releases: BSO-Website
Stand: Spieler verbinden sich per IP mit einem Server und sehen die anderen als Liste (Name, zu Fuß/Bus, Entfernung, Tempo). Als Nächstes kommen sichtbare Busse der Mitspieler 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) | – |
Shared\*.cs |
Protokoll, PacketReader, Connection/FrameParser – gleiche Dateien wie in BSO-Server |
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.OnFrameim 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:
Memprü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 perPoll()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 | |
|---|---|
| F8 | mit dem Server verbinden / trennen |
| 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
Mod lädt, Busposition anzeigenNetzwerk: Server + Positionen austauschen, Mitspieler als Text- Mitspieler-Busse in der Welt (
VisGame_cl::CreateEntity), Namensschild mitVisMessage_cl::DrawMessage3D - Chat, Konsole, Steam-P2P, Serverliste