Commit graph

35 commits

Author SHA1 Message Date
MiTHRAL
7a48eb9f35 ghost multiplayer: beta hardening - version handshake, crash-proofing, logging, persistence
Production-readiness pass toward 1.0:

- Protocol handshake: JOIN carries kGhostVersion; a mismatched client is
  REFUSED by the relay (HELLO session 0) and its poses are never forwarded,
  so two builds can never silently corrupt each other's pose stream. The
  client surfaces the refusal in the menu and skips refused LAN hosts during
  discovery.
- Crash-proofing: every received payload is bounds-checked against its
  packet size before parsing (HELLO / PoseChunk / JOIN); both the client
  network thread and the relay thread are exception-guarded (a throw logs
  and keeps the loop alive instead of hitting std::terminate). The relay no
  longer creates client records for unknown-address POSE/LEAVE floods and
  enforces a hard client cap (--max-clients, default 64).
- Logging: rate-limited error logging throughout (send failures, resolve
  failures, refusals, thread exceptions, client-cap drops). The relay core
  uses a build-flag shim (REXLOG in-game, a tiny {} formatter in the
  dependency-free standalone), with --verbose join/leave lines for the
  server. Game crashes themselves are already handled by the SDK's crash
  handlers + file logs; this layer now avoids triggering them and explains
  itself when it can't connect.
- Settings persistence: server/room/name/port/rate save into the app's cvar
  config on change, so a player's multiplayer setup survives a restart.
- Menu: status now shows protocol refusals and the last error.

Tests updated for the handshake (version-refusal case added); all suites
pass.
2026-08-26 22:07:09 -04:00
MiTHRAL
269fbcee32 Add ghost multiplayer: UDP relay + pose broadcasting + placeholder cubes
Bolt-on multiplayer layer confined to src/native and hand-written code (no
codegen output touched):

- GhostRelay core (src/native/skate3_native_ghost_relay.*): small UDP relay
  matching clients into rooms by a shareable code; forwards each client's
  pose to the other room members. Used by both the standalone binary and
  the in-game LAN host fallback.
- Standalone server (tools/ghost_relay_main.cpp, ghost_relay target): runs
  on a public VPS or behind a free tunnel; clients connect OUTBOUND, so no
  port forwarding is needed on any client.
- In-game module (skate3_native_ghost.*): captures the local player's world
  transform at Sk8::UpdateBoneTransforms exit (pack-owner entity +416,
  verified layout) and broadcasts it at a fixed rate; auto-connects to the
  default public relay, falls back to LAN auto-host + UDP broadcast
  discovery when unreachable.
- Renderer: draws a solid-color cube per remote player in RenderScene via
  the existing scene PSO tint.a>0 branch (no new shader/SPIR-V).
- UI: GhostDialog (M key) with enable toggle, room code, relay override,
  status readout. Off by default.

Wire protocol in skate3_native_ghost_proto.h (JOIN/HELLO/POSE/PING/LEAVE).
2026-08-26 20:12:45 -04:00
mchughalex
671e74ba59 build: embed version resources in the windows binaries (SDK bump) 2026-07-24 19:40:48 +01:00
mchughalex
b6c6196c3e build: raise the dev version floor to 2.0.0 2026-07-24 19:13:37 +01:00
mchughalex
38343207ff render: split the scene and HDR shader sources into shared headers 2026-07-19 19:55:25 +01:00
mchughalex
146a158f90 render: extended draw distance and world streaming pre-load 2026-07-19 18:24:12 +01:00
mchughalex
13669fe589 render: peel the post-process passes into their own translation unit 2026-07-19 10:28:14 +01:00
mchughalex
e591f76f21 render: split the scene renderer into capture and GPU translation units 2026-07-19 10:19:22 +01:00
mchughalex
cb92f6aec5 render: promote the palette serve into its own module, retire the shadow observers 2026-07-19 09:32:57 +01:00
mchughalex
4ee3c458bf render: remove the shadow-mat observers and other dead diagnostics 2026-07-19 09:25:26 +01:00
mchughalex
80499b9f06 render: screen-space reflections (experimental, off by default) 2026-07-17 13:42:44 +01:00
mchughalex
3e09f33daf render: HDR scene pipeline + real bloom (SDK bump) 2026-07-17 12:07:38 +01:00
mchughalex
e19657a45d render: presentation-entity identity store + ROPA garment lifecycle 2026-07-17 11:15:27 +01:00
mchughalex
64fedeb7f0 render: GTAO screen-space ambient occlusion post pass (SDK bump) 2026-07-17 08:27:22 +01:00
mchughalex
22bd170bac scene: photo editor DoF fixed (typed-depth SRV read as cleared) + photo grab weave fixed 2026-07-15 04:21:19 +01:00
mchughalex
020051bf32 scene: finalize the 2D decode pipeline 2026-07-13 17:02:52 +01:00
mchughalex
b4d2e59b70 npc: LivingWorld entity store (per-instance opacity + identity + palettes) 2026-07-13 13:20:19 +01:00
mchughalex
2ac10ead44 render: texture decode, ropa cloth timing and scene fixes 2026-07-13 10:31:07 +01:00
mchughalex
cf274e7457 render: guest-structure probes + shadow-mode observers 2026-07-13 04:31:55 +01:00
mchughalex
406f47c79c render: move HLSL to source files, diagnostics TU, staged RenderScene 2026-07-11 10:58:36 +01:00
mchughalex
b99dbc400d exe icon from the player's own game files at runtime; close-clone prop jitter fix 2026-07-11 09:29:02 +01:00
mchughalex
acd77da02a F12 native-render debug menu: live feature toggles for bisecting regressions 2026-07-07 01:24:07 +01:00
mchughalex
70812600f7 in-world neon spline waypoints, F5 live renderer toggle, F6 screenshots, compass icon fixes 2026-07-05 01:38:10 +01:00
mchughalex
9f66afbe2a first native D3D12 scene renderer: live geometry pass replacing the emulated frame 2026-07-02 02:01:55 +01:00
mchughalex
2ad56d2d4b debug: frame snapshot harness and offline guest data-model reconstruction 2026-07-02 01:03:49 +01:00
mchughalex
dd6468bcff link Windows runtime statically 2026-06-30 23:33:32 +01:00
mchughalex
5bfd103702 default conservative Vulkan paths 2026-06-30 23:19:54 +01:00
mchughalex
1ff7ee7e87 support non-AVX2 x86_64 builds 2026-06-30 21:39:27 +01:00
mchughalex
c790817d56 add Skate 3 demo path 2026-06-14 12:02:09 +01:00
mchughalex
97df13cb01 add Skate 3 Title Update 3 support 2026-06-10 05:56:35 +01:00
mchughalex
1ed2841c5c add ultrawide and live FOV support 2026-06-10 05:56:34 +01:00
mchughalex
2c391fc45c prepare release 1.0.1 2026-06-06 15:16:27 +01:00
mchughalex
943d26e2d9 add macOS build and launch support 2026-06-06 15:15:18 +01:00
mchughalex
9beddc7b3e release version 1.0.0 2026-06-04 22:24:00 +01:00
mchughalex
62b65e74d8 create Skate 3 recompilation project 2026-05-18 23:03:10 +01:00