- Own JSON reader (MiniJson) instead of Newtonsoft.Json - the server browser failed with
"Could not load System.Runtime.Serialization" once MSCLoader was gone
- Mouse cursor visible in admin menu/chat/console (PlayerInMenu)
- Intro "Press any key" screen replaced by an MSCO loading screen; hook PlayMakerFSM.Awake too
- Join links while the game runs: picked up from MSCO\join.txt (written by the launcher)
- Admin menu: TELEPORT tab (home, shop, repair shop, inspection, villages, events, Satsuma)
- Window title/icon "MSCO - My Summer Car Online", MSCO logo in the main menu
- In-game UI restyled like the keymaster website (rounded cards, pills, glow, slim scrollbars)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Windows PowerShell (.NET Framework) writes form-data names without quotes and a quoted
boundary, which the keymaster's parser rejected ("Send multipart/form-data"). Saved with
BOM so PowerShell 5.1 reads the umlauts correctly.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Bootstrap: Doorstop entry point, loads Harmony/Newtonsoft from the MSCO folder, hooks
PlayMakerArrayListProxy.Awake and starts MSCO in the main menu; skips the news screen
- No MSCLoader reference anymore; key bindings in PlayerPrefs, bind console command
- Harmony 1.2 and Newtonsoft.Json in lib/ (MIT notices); build copies to <game>\MSCO
- README/CHANGELOG updated
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ModVersion (2.8.1, shown in MSCLoader/MSC Launcher) and ProtocolVersion
(2.8) are separate; only the first two digits are compared (P2P host, Steam
lobby, server info, server browser) and only the protocol version is sent,
so minor updates stay compatible with 2.8 servers, hosts and players.
README: how to publish minor and major updates.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- DoorSync matched every FSM with door/hood/lid/trunk in its name, including
the door parts' removal/assembly/bolt/paint FSMs and trigger_ objects, and
forced their states at the other players: doors hung crooked, snapped back
or came off. Those are excluded now (assembly runs via FsmSync).
- HingeSync: on a parked vehicle everyone nearby sent the angle, so doors
ping-ponged. Now only the player who clicked near the door (4 s) sends;
on a driven vehicle the driver sends; received angles are held 3 s.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Instead of snapping to a computed passenger seat, a player whose head is
inside a vehicle's (shrunk) outline is held exactly there and moves with it;
works for cabins, open doors and beds, with or without a driver. Getting out
puts the player beside the vehicle on the nearer side. P next to the car
still uses the passenger seat.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
StartGame carries a second flag (new game); the client then starts MSC's new
game instead of loading the (empty) received save.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A '-' button collapses the fullscreen launcher into a small MSCO bar at the
top; the game's start menu is visible and clickable again and its music is
unmuted. Clicking the bar opens the launcher; prompts (disconnected,
reconnecting, join confirmation, version warning) open it automatically.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- VehicleStateSync also tracks the CARPARTS and Database roots (wear, damaged
parts, tire wear, oilpan oil, battery charge, carb/ignition settings,
suspension, odometer); the Satsuma's driver is authoritative for them
- Paint colors (FsmColor) as four float channels (compatible with old servers)
and applied to the part's material
- FSMs are re-examined when a part is installed/removed (path changes);
before, anything not on the car at the first scan was never synced
- ControlSync: handbrake, sun visors, seat recline, seat belt, CD player,
interior light; pending states for controls not found yet
- Late joiners: job/shop values and switch states from the server snapshot;
P2P host resends all switch states every 15 s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Getting in on the driver's side moves the head past the passenger seat while
the game puts the player into the driver's seat. Auto-boarding now only
triggers from the passenger side (head on the seat's side, not further inside
than the seat), not while the game controls the player (CharacterController
off or parented to a vehicle) and not within 4 s after driving.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
All MSC humans share one body mesh (20 bones, same order, different bone
names) and differ only by shirt/pants/face materials. Instead of cloning NPCs
(their thighs hang off 'skeleton', the head off a HeadPivot outside the
skeleton - legs and torso stretched like a dress), MSCO now takes just the
most used body mesh, builds its own flat skeleton from the bind pose and sets
every bone directly from the MSCO figure's joints. Clothes: char_shirt*,
char_pants*, char_face* (no women/ghost/curtain/flower), chosen per player id.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
- A driven vehicle is no longer released after 3 s without data (a short hitch
of the driver, e.g. saving, stopped the car instantly on the passenger's side
and ripped the parts off, which then synced to everyone): 30 s timeout, on
release it keeps the driver's velocity and part joints stay unbreakable for
3 more seconds
- Cargo in a moving vehicle belongs to its driver (passengers no longer claim
items in the car, which then followed late and kinematic at the driver's end
and knocked seats and parts off)
- Passenger: sit down automatically by stepping into the open passenger door,
also without a driver (seat from the game's DriverHeadPivot); Space or P to
get out
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>