Files
MSCO/CHANGELOG.md
T
MrMahoandClaude Opus 5.5 cd8c1293e0 Other players as real MSC characters
GameCharacter clones a MSC human (bodymesh + skeleton, no scripts, physics or
animation), puts it into its bind pose, aligns and scales it, and drives the
bones every frame from the joint points of the existing MSCO figure (hip,
knee, ankle, shoulder, elbow, hand, head pitch, torso lean) by rotating each
limb from its rest direction. Limb bones are picked geometrically, so bone
naming conventions do not matter. Variant per player id; console 'model
classic|game' switches, the MSCO figure is the automatic fallback.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 10:36:50 +02:00

14 KiB
Raw Blame History

Changelog

Nächste Version

Server-Browser

  • Hervorgehobene Server: vom Keymaster-Admin markierte Server (Tag featured) stehen ganz oben, mit goldener Zeile und FEATURED-Abzeichen (Liste und Profil)
  • Tags der Server erscheinen im Server-Profil; die Suche findet auch Tags. Serverbetreiber setzen eigene Tags im Web-Panel (Einstellungen), OFFICIAL vergeben nur die MSCO-Admins und wird hervorgehoben
  • Braucht keinen neuen Server: die Infos kommen vom Master (msco.mbm.wtf) und funktionieren mit 2.8-Servern

Mitspieler als echte MSC-Menschen

  • Andere Spieler sehen aus wie die Leute im Spiel: MSCO nimmt eine Kopie eines MSC-Menschen (Körper, Gesicht, Kleidung) und bewegt dessen Skelett mit der bisherigen Animation - laufen, springen, ducken, sitzen, Items halten
  • Jeder Spieler bekommt (nach Spieler-Nummer) einen anderen Menschen; bei allen Mitspielern derselbe
  • Konsole (F7): model classic zeigt wieder die MSCO-Figur, model game die MSC-Menschen; rig zeigt, wer welches Modell hat. Findet MSCO keinen passenden Menschen, bleibt automatisch die MSCO-Figur

Beifahrer

  • Automatisch einsteigen: in die offene Beifahrertür an den Sitz treten - man setzt sich von selbst hin, keine Taste nötig. Aussteigen mit Leertaste oder der Beifahrer-Taste (P)
  • Geht jetzt auch, wenn noch niemand fährt (Sitzposition kommt aus dem Fahrersitz des Spiels); fährt danach jemand los, fährt man mit. Setzt man sich selbst ans Steuer, endet der Beifahrer-Modus

Satsuma zerfällt nicht mehr beim gemeinsamen Fahren

  • Hing das Spiel des Fahrers kurz (z.B. beim Speichern für den Server), gab der Mitfahrer das Auto nach 3 s frei: es blieb bei ihm schlagartig stehen, die Teile wollten mit Tempo weiter und rissen ab - und das „Teil abgefallen“ ging an alle. Ein gefahrenes Auto wird jetzt erst nach 30 s ohne Daten freigegeben, rollt dann mit der Geschwindigkeit des Fahrers weiter, und die Teile bleiben noch 3 s fest, bis alles eingeschwungen ist
  • Ladung im Auto (Kisten, Werkzeug, Teile im Kofferraum oder auf dem Sitz) gehört jetzt immer dem Fahrer. Vorher übernahm sie oft der Mitfahrer; beim Fahrer folgte sie dann verspätet und „unendlich schwer“ und schlug Sitze und Teile ab

Mitfahren ohne Ruckeln

  • Fahrer und Beifahrer sitzen beim anderen fest auf dem Sitz: die Figur wird relativ zum Auto übertragen und geglättet, statt in Weltkoordinaten hinter dem fahrenden Auto herzuhinken (vorher wurde der Beifahrer bei Tempo nach hinten gezogen)
  • Der Beifahrersitz wird jetzt aus der richtigen Fahrerposition berechnet (vorher aus der hinterherhinkenden Figur)
  • Autos anderer Spieler ruckeln nicht mehr bei jedem Netzwerkpaket zurück (Vorausberechnung in Physik-Zeit) und werden zwischen den Physik-Schritten flüssig bewegt – auch der NPC-Verkehr
  • Kompatibel: ältere Mods und der Server ignorieren die neuen Sitz-Daten

Schönere Oberfläche

  • Fenster (Launcher, Konsole, Admin-Menü, Hinweise) mit weichem Schatten und feinem Rand, orange Knöpfe mit Verlauf
  • Server-Browser: mehr Platz für die Liste, Zeilen leuchten beim Überfahren auf, Füllbalken für die Spielerzahl, Ping farbig (grün/gelb/rot), goldener Streifen bei hervorgehobenen Servern
  • Seitenleiste mit Trennlinie, Menüpunkte werden beim Überfahren hell

2.8

Server und Mod müssen beide 2.8 sein (Server: git pull && docker compose up -d --build).

Weniger Hänger

  • Der Server holt sich den Spielstand nur noch, wenn sich seit dem letzten etwas geändert hat (Speichern lässt das Spiel kurz hängen), Standard für neue Server alle 10 statt 5 Minuten
  • Die teure Suche über alle PlayMaker-FSMs läuft seltener; die Schadens-Prüfung liest ab und zu nur noch ein Mesh
  • Hänger-Erkennung: dauert ein Bild länger als 0,2 s, steht in der F7-Konsole, ob MSCO schuld war (und welcher Teil) oder das Spiel selbst (z.B. beim Speichern)

Behoben: Öl lief aus dem Satsuma

  • Beim Beitreten lief Öl aus, obwohl der Spielstand lokal dicht war: die vom Spiel selbst berechneten Werte LeakOilpan, LeakOilfilter, LeakRockerCover, LeakHeadgasket (und Raten wie …LeakRate) wurden wie echte Fahrzeugwerte synchronisiert und überschrieben den Stand aus dem Spielstand. Werden jetzt nicht mehr übertragen
  • Diagnose: vars <filter> in der F7-Konsole zeigt die synchronisierten Fahrzeugwerte (z.B. vars oil)

Scharfe Oberfläche, FPS, Leistung

  • Launcher wird in voller Auflösung gezeichnet (Schrift und Kanten scharf statt hochgezogen/verpixelt)
  • fps in der F7-Konsole: FPS-Anzeige oben rechts (grün/gelb/rot), Konsole zeigt auch das längste Bild (Ruckler)
  • Weniger Ruckler: Sync-Teile suchen nach dem Laden nicht mehr alle im selben Frame, gemeinsame Suche nach Rigidbodys, Unfallschäden werden nur noch nach einem Aufprall geprüft (vorher jede Sekunde große Mesh-Kopien), Fahrzeug-Effekte schlagen ihre Bauteile seltener nach, Ping-/FPS-Anzeige ohne Registry-Zugriff pro Bild

Launcher im Vollbild

  • Der MSCO-Launcher füllt das ganze Hauptmenü und skaliert automatisch mit der Auflösung; Listen wachsen mit dem Platz (keine abgeschnittenen Knöpfe mehr). Das Spielmenü dahinter (Logo, Farbauswahl, MP3 …) ist komplett verdeckt und gesperrt, die Menü-Musik ist stumm. MINIMIZE entfällt

P2P: Weiterspielen oder neues Spiel

  • In der Host-Lobby: CONTINUE (eigenen Spielstand weiterspielen, mit Datum) oder NEW GAME (frische Welt für alle). Der bisherige Spielstand wird vorher nach MSCO_Saves/<Datum> gesichert (die letzten 10 bleiben), mit Sicherheitsabfrage. Mitspieler bekommen die neue Welt automatisch, sobald sie einmal gespeichert ist

Mehr Sync

  • Einkäufe: gekaufte/ausgepackte Items tauchen bei allen auf (auch bei später Beitretenden)
  • Verbrauchte Items: Gegessenes, Getrunkenes und Verbrauchtes verschwindet bei allen
  • Räder drehen sich bei Autos, die ein anderer Spieler fährt
  • Unfallschäden: verbeulte Karosserie wird an alle übertragen
  • Jobs, Aufträge und Laden: Fortschritt (Auftrag angenommen, erledigt, bestellt ...) wird synchronisiert
  • Zündung, Motor, Licht, Choke, Blinker, Wischer: die Schalterstellungen werden übertragen – beim anderen laufen Motor und Scheinwerfer dadurch wirklich (nicht nur das Geräusch)
  • Autotüren, Motorhaube, Kofferraum: stehen bei allen im selben Winkel offen
  • Verkehr: NPC-Autos fahren bei allen an derselben Stelle (der erste Spieler simuliert, die anderen folgen)
  • vehicles in der F7-Konsole zeigt, wie viele Karosserie-Meshes, Job-Werte und Verkehrsautos synchronisiert werden

Admin: Welt verwalten (neuer Reiter WORLD im Admin-Menü)

  • RESET WORLD: die ganze Welt zurück auf den Spielstand, wie er auf den Server hochgeladen wurde (Reset-Punkt) – das automatische Hochladen alle 5 Minuten ändert den Reset-Punkt nicht; der Stand davor wird gesichert
  • SET RESET POINT: den aktuellen Spielstand als neuen Reset-Punkt nehmen (Server-Befehl: set-reset-point)
  • BACKUP NOW: aktuellen Server-Spielstand sichern (Server-Befehl: backup)
  • Backups mit Datum/Uhrzeit, RESTORE holt einen älteren Stand zurück (der aktuelle wird vorher gesichert)
  • Jede Aktion mit Sicherheitsabfrage; nur für Admins (vom Server geprüft)

Favoriten

  • Herz neben jedem Server (Liste und Profil) merkt ihn als Favorit
  • Neuer Tab Favorites: jedem Server einen eigenen Kurznamen geben, beitreten, entfernen, per Adresse hinzufügen
  • Schnell wechseln: /switch <kurzname> im Chat oder switch <kurzname> in der F7-Konsole – trennt und verbindet direkt mit dem anderen Server; fav listet alle, fav add <name> merkt den aktuellen Server

Pro Spieler

  • Hunger, Durst, Stress, Harndrang, Müdigkeit und Schmutz werden für jeden Spieler einzeln auf dem Server gespeichert und beim Beitreten zurückgegeben (nicht mehr die Werte aus dem gemeinsamen Spielstand)

Spielerfiguren

  • Springen: die ganze Figur hebt ab (vorher ging nur der Oberkörper nach oben), Knie werden angezogen
  • Runder Gürtel, runde Schultern, abgerundete Stiefel mit Sohle

Hinweise

  • Kleine Benachrichtigung oben rechts, wenn jemand beitritt oder das Spiel verlässt

Trennen & Neu-Verbinden

  • Gekickt, gebannt, Server beendet, Verbindung verloren: eigenes Fenster in der Bildmitte mit Grund und OK (im Spiel wird der Grund vorher 2,5 s groß angezeigt)
  • reset-world / reload-save / Server-Neustart (z.B. Update per docker compose up) / Verbindung verloren: Fenster „Reconnecting“ – verbindet automatisch neu, bis zu 10 Versuche (ca. 1 Minute), mit CANCEL-Knopf. Nach Kick, Ban oder eigenem Trennen wird nicht neu verbunden

Behoben

  • Nach Kick/Reset kam weder das Fenster mit dem Grund noch das automatische Neu-Verbinden: MSCLoader lädt beim Wechsel ins Hauptmenü alle Mods neu und damit ging der Zustand verloren. Er wird jetzt vorher gesichert und danach fortgesetzt
  • Absturz („NaN … collider“) und abfallende Teile am Satsuma: Türen/Haube/Kofferraum wurden gegen das Scharnier an ihre Position teleportiert – das erzeugte riesige Kräfte. Jetzt zieht die Feder des Scharniers sie sanft auf den Winkel
  • Beim anderen Spieler „orgelte“ der Anlasser endlos: erzwungene Geräusche/Lichter werden losgelassen, sobald keine Daten mehr vom Fahrer kommen
  • Beim Neuladen der Welt wurden herumliegende Objekte als „verbraucht“ gemeldet und bei allen gelöscht. Jetzt werden nur einzelne echte Items gemeldet, Fahrzeuge/Teile nie gelöscht, und der Server nimmt höchstens 20 pro Minute an

Leistung

  • Mod: herumliegende Objekte werden nur noch jedes 4. Frame geprüft (eigene/gehaltene/gefahrene weiterhin jedes Frame), weniger Speicher-Allokationen pro Frame, Gelenke fremd gefahrener Autos seltener geprüft
  • Server: Nachrichten an alle werden nur einmal verpackt; der Server wartet auf eingehende Daten statt fest zu schlafen (geringere Verzögerung, fast keine CPU-Last im Leerlauf)

2.7

Server und Mod müssen beide 2.7 sein (Server: git pull && docker compose up -d --build).

Neu

  • Eigene Spielerfigur im MSC-Stil (Karohemd, Jeans, Arbeitsschuhe, Schnurrbart, Kappe oder Haare, je Spieler etwas anders) statt kopierter NPCs – keine liegenden/verbuggten Figuren mehr
  • Ping-Anzeige oben rechts: ping in der F7-Konsole (grün/gelb/rot)
  • MSCO-Konsole jetzt auf F7 (F8 öffnet im Pausenmenü ein Test-Menü des Spiels)
  • Admin-Menü: Cheats (+1.000 / +10.000 MK, Bedürfnisse auffüllen, Satsuma zu sich holen), GOTO / BRING (teleportieren)
  • Fahrzeugzustand-Sync: Tank, Öl, Kühlwasser, Bremsflüssigkeit, Batterie, Schäden, Verschleiß, Kilometerstand, Lack
  • vehicles in der Konsole zeigt die Position jedes Fahrzeugs
  • Admin-Menü mit Reitern: PLAYERS (Kick/Ban/GOTO/BRING, Cheats), ITEMS (Items spawnen – alle sehen sie, auf dem Server gespeichert), BANS (Sperren aufheben); Server-Befehle bans / unban
  • Tacho, Drehzahlmesser, Tank-/Temperaturanzeige und Lenkrad werden beim Beifahrer mitbewegt
  • Flüssigerer Sync: Position wird aus der Geschwindigkeit vorausberechnet, 30 Updates/s
  • Letzte Position wird zuverlässig gespeichert (nicht mehr immer an der Toilette spawnen)
  • Server-Browser: Klick auf den Server öffnet das Profil (JOIN-Knopf in der Liste entfernt)
  • Alle Mod-Meldungen nur noch in der MSCO-Konsole (F7)
  • Eigenes Hauptmenü: Continue, New Game, Credits, Changelog und Quit des Spiels sind ausgeblendet, der MSCO-Launcher ist das Hauptmenü (mit eigenem QUIT)
  • Server-Profil neu: JOIN oben, Spielerliste rechts, Namensfeld ohne Steam in eigenem Kasten
  • Admin-ITEMS: Werkzeuge und Laden-Artikel (Ratschenkasten, Batterie, Motoröl, Kühlmittel, Bremsflüssigkeit ...)
  • Nach dem Trennen (Kick, Ban, Shutdown, Timeout ...) zeigt das Hauptmenü den Grund
  • reset-world / reload-save auf dem Server: alle Spieler bekommen eine Meldung und verbinden sich automatisch neu
  • Server holt sich den aktuellen Spielstand vom Spiel (beim Beitreten und alle 5 Minuten): neue Spieler bekommen exakt die aktuelle Welt – Schrauben fest, Teile dran – statt nachgespielter Aktionen; Backups der letzten 5 Stände
  • Feuer, Rauch, Dampf und Funken an Fahrzeugen werden synchronisiert, auch bei geparkten Autos
  • Kick-, Ban-, Reset- und Shutdown-Meldungen kommen zuverlässig an (Server trennt sauber)
  • Status-Punkt gelb, bis man wirklich verbunden ist

Behoben

  • Auto fiel beim Fahren eines anderen Spielers auseinander (angebaute Teile rissen an ihren Gelenken ab)
  • Auto kippte mit dem Kopf des Fahrers mit und zitterte (Fahrzeug wurde als „in der Hand gehalten“ erkannt)
  • Satsuma wurde weggeschleudert und war „verschwunden“ – ungültige/im Boden liegende Positionen werden jetzt verworfen bzw. angehoben, weggeschleuderte Objekte sofort gestoppt
  • Items und Autos zitterten nach dem Loslassen (Ownership-Pingpong)
  • Absturz beim Beitreten durch einen Kreis in der Objekt-Hierarchie (nachgespielte Montage-Aktion)
  • Tippen im Chat/in der Konsole löste Spieltasten aus (Benutzen, Beifahrer-Taste P …)
  • Maus sprang bei offenem Admin-Menü/Chat immer in die Bildmitte
  • Ein Fehler in einem Sync-Teil legt nicht mehr den ganzen Sync lahm
  • Freie Fahrzeuge: nur noch deutliche Wertänderungen werden abgeglichen (kein gegenseitiges Überschreiben)

Sicherheit (Server)

  • Admin-Rechte nur noch für von Steam bestätigte SteamIDs – der Server braucht dafür einen SteamWebApiKey (sonst könnte sich jeder als Admin ausgeben). Unbestätigte SteamIDs können niemanden mehr vom Server drängen.
  • Ungültige Positionen werden nicht gespeichert, Paketgröße und Weltzustand sind begrenzt

Server & Keymaster

  • Master-Adresse fest (msco.mbm.wtf), nicht mehr änderbar
  • Docker läuft als dein Linux-Benutzer (kein „Permission denied“ in data/ mehr), klare Meldungen statt Absturz
  • docker exec msco-server msco <befehl> für Server-Befehle
  • Keymaster: Rate-Limits, Security-Header, Healthcheck, Docs-Seite
  • Automatische Tests: Server dotnet run --project Tests (30 Checks), Keymaster npm run smoke (24 Checks)