Commit Graph
94 Commits
Author SHA1 Message Date
Nico MeisterandClaude Opus 5.5 05e68a683d MODDING: uploads are checked automatically (virus scan, readable code, what the mod may do); moderator review for risky mods
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 17:05:25 +02:00
Nico MeisterandClaude Opus 5.5 d567d5992a Less garbage, fewer GC hitches: no Joint array per part every 0.5 s, cheap aim check after clicks, cached FPS/ping/chat labels; perf report measures object sync, vehicle fx and part/bolt sync correctly
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 16:31:56 +02:00
MrMahoandClaude Opus 5.5 fe08fa5213 Release from Windows or Mac
- MSCO.csproj is SDK-style now (net35 via Microsoft.NETFramework.ReferenceAssemblies):
  builds with "dotnet build -c Release" on Windows and macOS; game DLL folder via
  MSC_MANAGED / -p:MscManaged (default: the game folder). Output verified identical
  in structure (references, types, methods, resources) to the old project.
- release.ps1 works with Windows PowerShell 5.1 and PowerShell 7: secrets in DPAPI files
  on Windows, in the macOS keychain on a Mac (file with chmod 600 on Linux); cross-platform
  RSA/password input; release target calls pwsh on non-Windows
- RELEASING.md: how to release and how to set up the Mac

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 21:22:04 +02:00
MrMahoandClaude Opus 5.5 578bd30b3d release.ps1: signing key backup creates the folder, asks the password twice, verifies; -ImportSigningKey to restore
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 21:07:22 +02:00
MrMahoandClaude Opus 5.5 dd4e004d51 2.10.9: beta notice in the MSCO menu and the in-game status bar
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 20:45:59 +02:00
MrMahoandClaude Opus 5.5 d195a484d8 2.10.8: fewer hitches
- Sending on a background thread (the game thread blocked whenever the TCP
  buffer was full, e.g. while uploading the save); small frames are batched
- Server save requests: routine saves wait for a calm moment (not while driving
  fast) and are announced; urgent flag from server 2.10.5
- Dynamic built-in font for all MSCO GUI (Unity logged hundreds of
  "Font size and style overrides" warnings with stutters)
- Admin VEHICLE tab rescans every 30 s / after actions instead of every 5 s;
  time/weather FSM search less often
- Reused buffers for Build/Frame/Poll (less garbage, fewer GC pauses)
- Hitch log: GC and save detection, count of hitches between reports
- Show Bolt Size 1.0.1: finds the FPSCamera (Camera.main may be missing), uses
  MSCO's shared FSM list instead of FindObjectsOfType every 2 s

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 00:08:36 +02:00
MrMahoandClaude Opus 5.5 e32ddadbc8 release.ps1: secrets in %USERPROFILE%\.msco (AppData is virtualized for packaged apps)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 23:33:54 +02:00
MrMahoandClaude Opus 5.5 77c51b52c5 2.10.7: changelog; release.ps1 signs releases
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 18:55:04 +02:00
MrMahoandClaude Opus 5.5 a499577b7c Harden the mod against hostile servers and players
- PacketReader for all network data: lengths are checked against the real data
  (Mono allocated the claimed size first - a fake 2 GB length crashed the game)
- FsmSync: remote players can no longer switch arbitrary FSMs - never PLAYER /
  Systems / MSCO objects, CLICK only on FSMs that wait for a click, bolt/assembly
  events only along a transition the FSM really has for that event
- Time/weather (msco.world) and '* ' system-style chat only from the host in P2P
  (the dedicated server filters them itself); other msco.* ids are reserved

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 18:44:03 +02:00
MrMahoandClaude Opus 5.5 9c933ed486 release.ps1: release token encrypted with DPAPI (-SaveToken), MSCO_NO_RELEASE=1 skips uploads
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 18:24:15 +02:00
MrMahoandClaude Opus 5.5 92a6125f22 MODDING: obfuscated mods are rejected
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 18:02:18 +02:00
MrMahoandClaude Opus 5.5 0a9da7bc9c oilcheck console command: show every oil leak source (2.10.6)
Engine leak values, oilpan bolts incl. drain plug, oil filter item (items.txt).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 17:41:08 +02:00
MrMahoandClaude Opus 5.5 a067e238da Example mod Show Bolt Size; docs for publishing mods
Shows the size of the bolt closest to the crosshair (Screw FSM "BoltSize").

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 17:28:56 +02:00
MrMahoandClaude Opus 5.5 2502a0800e Fix teleport to places landing in the wrong spot (2.10.5)
Use the median of a place's parts and the dense group around it instead of
the bounds of everything (scattered/disabled children pulled the center into
the forest); only take top-level objects as the place root.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 17:04:55 +02:00
MrMahoandClaude Opus 5.5 13e5193616 Release 2.10.4
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 14:16:37 +02:00
MrMahoandClaude Opus 5.5 4be6b68f25 Admin: install parts, set time and weather; join without prompt
- VEHICLE: INSTALL for parts that are not installed - runs the game's own
  assembly (trigger "Assembly" like on load), so the part sits exactly on its
  pivot; synced to other players via FsmSync (MSCO_INSTALL)
- WORLD: time buttons (2-hour steps via the sun FSM's load path) and
  CLEAR / RAIN / THUNDERSTORM (weather front moved above the admin);
  sent to everyone as mod message "msco.world" (no server update needed)
- JOIN from the server browser/website connects right away in the main menu;
  server mods still ask before downloading

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 13:04:27 +02:00
MrMahoandClaude Opus 5.5 06df8fecc5 Admin menu rework: filters, search, cleaner rows
- Fixed-size admin window with equal-width tabs
- VEHICLE: part search, PROBLEMS/category chips, collapsible fluids grid,
  one-line rows with state pill and wear bar
- LOOSE state derived from actual tightness (DB "Bolted" lags behind)
- ITEMS: search field and grid
- Console and admin menu are mutually exclusive (console stole clicks)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 12:43:38 +02:00
MrMahoandClaude Opus 5.5 29a3697cc8 MSCO 2.10.3: bolt stages and part tightness synced, snap to pivot, admin tighten/loosen
- Every bolt (Screw FSM, stage 0-8) and every part's tightness (BoltCheck/Use "Tightness", counted
  by the tool) is synced as state - before only the bolt turned on other clients, the part stayed
  loose or tight there
- Tightening a part (tool, admin, other player) snaps it exactly onto its pivot (installed parts
  sit at local 0), except screw-in parts and hinged doors/hoods
- Admin VEHICLE tab: TIGHTEN/LOOSEN per part, TIGHTEN ALL/LOOSEN ALL, bolted/loose state
- fsmdump "pivots": installed part offsets

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 12:16:29 +02:00
MrMahoandClaude Opus 5.5 7b4a89d50f MSCO 2.10.2: passenger only while moving, drain plug sync, admin VEHICLE tab, profile layout
- Passenger: auto ride-along only when the vehicle moves (speed from its motion, also for
  kinematic remote cars) - no more getting stuck while working in the engine bay or re-captured
- Bolts with a function (drain plug: stage 0-5 = oil leak on) are synced as stage and applied
  through the bolt's own stage logic; world authority sends its state once after joining.
  Fixes endless oil leaking when players had the drain plug in different states
- Admin menu VEHICLE tab: fluids with FILL/EMPTY, all Database parts with wear/damage,
  REPAIR/BREAK per part, REPAIR ALL, filter
- Server profile: info and players as two equal cards, no wrapping
- fsmdump also lists FSM variables

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 12:02:21 +02:00
MrMahoandClaude Opus 5.5 adc6eff9e8 MSCO 2.10.1: car doors and garage door synced, door lock fix, perf tools
- Car doors (FSM with bool "Open" and "Open door"/"Close door") are synced as open/closed:
  the receiver removes the hold joint and frees the hinge, closing runs the game's own logic
- Fix: every synced close of an already closed Satsuma door added another FixedJoint, so the
  door could not be opened anymore; extra joints are removed automatically
- Hinge sync also covers world doors/gates with hinges (garage door), interaction by bounds
- Scene name read once per frame (Application.loadedLevelName allocates a string per call)
- Console "perf" (FPS, ms per MSCO part incl. OnGUI, GC, hook calls), -msco-perf start option
- Console "fsmdump <text>" / -msco-dump: PlayMaker FSMs and hinges to MSCO\fsmdump.txt

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 11:01:27 +02:00
MrMahoandClaude Opus 5.5 4c1366b5d9 MSCO 2.10.0: mod support, ESC no longer quits from the main menu
- MscoMod API (ModApi.cs) and ModLoader: own mods from MSCO\Mods, hooks for menu/game/update/GUI,
  session and player events, Send/OnMessage between players (MsgType.ModMessage)
- Server mods: ModList before Welcome, consent prompt (INSTALL & JOIN), download with SHA-256 check
  into MSCO\Mods\Servers, active only on that server; game start waits for the download
- Mods page in the MSCO menu, console command "mods"
- Server browser: MODS pill, VANILLA/MODDED filters, mod list in the server profile
- PlayMaker ApplicationQuit is ignored in the main menu (ESC used to close the game)
- MODDING.md and examples/HelloMod

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 01:00:16 +02:00
MrMahoandClaude Opus 5.5 027296d27c MSCO 2.9.1: fixes without MSCLoader, admin teleport, MSCO branding
- 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>
2026-10-03 00:34:03 +02:00
MrMahoandClaude Opus 5.5 166f873669 release.ps1: build the multipart upload by hand
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>
2026-10-02 23:51:08 +02:00
MrMahoandClaude Opus 5.5 461d94c5fc MSCO 2.9.0: standalone without MSCLoader (Unity Doorstop)
- 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>
2026-10-02 23:36:28 +02:00
MrMahoandClaude Opus 5.5 ee162bd64f release.ps1: accept product 'installer'
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 22:44:17 +02:00
MrMahoandClaude Opus 5.5 6bd4e67382 Update docs and README: launcher, downloads, accounts, MySQL, new game, updates, tags, riding along, models, version scheme
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 22:28:47 +02:00
MrMahoandClaude Opus 5.5 15c9ee548d Release build uploads new mod versions to the keymaster automatically
release.ps1 (needs MSCO_RELEASE_TOKEN), changelog from CHANGELOG.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 22:12:46 +02:00
MrMahoandClaude Opus 5.5 3ea0e8ebca DLL carries the mod version (product version) for the MSCO Launcher
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 21:21:48 +02:00
MrMahoandClaude Opus 5.5 e125ff9d74 Sync more events: dragrace, kilju buyer, theatre, soccer, Perajarvi, cabin
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
V2.8.1
2026-10-02 17:57:13 +02:00
MrMahoandClaude Opus 5.5 56c3990650 Admin menu: make admin / remove admin for players on dedicated servers
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 17:52:49 +02:00
MrMahoandClaude Opus 5.5 ea1b0f74d9 Mod 2.8.1: separate mod version from network protocol version
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>
2026-10-02 17:48:07 +02:00
MrMahoandClaude Opus 5.5 f707e67e5c Doors on all vehicles: no more part-logic FSMs in DoorSync, single sender for hinges
- 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>
2026-10-02 17:44:03 +02:00
MrMahoandClaude Opus 5.5 dd31587d61 Riding along: hold the current position inside the vehicle
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>
2026-10-02 17:40:13 +02:00
MrMahoandClaude Opus 5.5 5f8062c649 Server new game: start a fresh world when the server says so
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>
2026-10-02 17:36:14 +02:00
MrMahoandClaude Opus 5.5 52b1219934 Launcher can be minimized to a small bar in the start menu
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>
2026-10-02 17:22:24 +02:00
MrMahoandClaude Opus 5.5 3b83644ce9 Satsuma: sync part state from CARPARTS/Database, paint, late-installed parts, more controls
- 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>
2026-10-02 14:10:42 +02:00
MrMahoandClaude Opus 5.5 0b2834282d Passenger: no automatic seat when getting in on the driver's side
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>
2026-10-02 13:17:59 +02:00
MrMahoandClaude Opus 5.5 cb116da2b8 Player models: MSC body mesh with own skeleton and normal clothes
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>
2026-10-02 13:15:22 +02:00
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
MrMahoandClaude Opus 5.5 983291a4b3 Satsuma no longer falls apart when driving together; automatic passenger seat
- 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>
2026-10-02 10:23:25 +02:00
MrMahoandClaude Opus 5.5 73004340ce Server browser: highlight the admin-only OFFICIAL tag, own server tags as grey pills
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 21:19:32 +02:00
MrMahoandClaude Opus 5.5 2faf03035a Fewer hitches: FSM scene scans less often, damage safety check one mesh at a time; hitch detector (per-subsystem timing, reports MSCO part or game) in the F7 console
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 20:36:33 +02:00
MrMahoandClaude Opus 5.5 4801539b9d Fix oil leaking after joining: don't sync game-computed leak states/rates (LeakOilpan, LeakOilfilter, ...); vars <filter> diagnostic command
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 20:29:34 +02:00
MrMahoandClaude Opus 5.5 7d341126e8 Crisp launcher (sizes and fonts scaled in screen pixels instead of a GUI matrix), fps command and display, fewer hitches (staggered scans, shared rigidbody scan, crash-damage mesh reads only after impacts, rarer vehicle fx lookups, cached display prefs)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 20:26:43 +02:00
MrMahoandClaude Opus 5.5 0b55d270e5 Launcher fullscreen and auto-scaled (GUI matrix, lists grow with the screen), game menu fully covered and muted, no minimize
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 20:06:34 +02:00
MrMahoandClaude Opus 5.5 e844446a21 P2P host lobby: CONTINUE own save or NEW GAME (previous save backed up to MSCO_Saves, new world saved and sent to waiting players)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 19:44:25 +02:00
Nico MeisterandClaude Opus 5.5 ba4a3d1b9a Docs: neutral wording instead of third-party product names (reverse proxies, Netbird, social networks, IDE)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 18:17:20 +02:00
Nico MeisterandClaude Opus 5.5 ce2fbdfc10 Passenger/driver sit still in moving cars: seat pose sent relative to the vehicle (backward-compatible), no backward pull; remote cars/traffic extrapolate in physics time and interpolate; UI polish (shadows, borders, gradient buttons, server list hover, fill bars, colored ping)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 20:52:56 +02:00
Nico MeisterandClaude Opus 5.5 33a415139b Server browser: featured servers (gold row + FEATURED badge, pinned to the top by the master) and key tags in the server profile; search matches tags
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 23:55:46 +02:00
MrMahoandClaude Opus 5.5 8e00640732 Favorites: heart toggle, Favorites tab with nicknames, /switch <nickname> quick server switch, fav command
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
V2.8
2026-09-27 18:24:00 +02:00