isle-portable/LEGO1
foxtacles a9747dec11
Character customization (#8)
* WIP: Add character customization to multiplayer

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Refine character customization: fix message buffering, DRY up code, request-based model

- Register NetworkManager with TickleManager via HandleCreate hook in
  LegoOmni::Create(), so packets are processed continuously instead of
  buffering between Connect() and OnWorldEnabled()
- Spawn unspawned remote players in OnWorldEnabled() (created before
  world was ready)
- Switch to request-based customization: HandleROIClick sends
  MSG_CUSTOMIZE to server, server echoes to all peers, HandleCustomize
  applies state and plays effects
- DRY up SwitchVariant to delegate LOD cloning to ApplyHatVariant
- Add ApplyChange helper consolidating the switch-on-changeType pattern
- Fix InitFromActorInfo to derive dependent color parts from independent
  parts (matching Unpack rules)
- Remove dead code: m_hasBeenTicked, ApplyCustomizeChange on
  RemotePlayer, m_localCustomizeState on NetworkManager
- Add null ROI checks in HandleCustomize for unspawned players
- Move MSG_CUSTOMIZE constant to shared protocol.ts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix

* Fix character customization bugs from code review

- BUG-1: Add bounds check in SwitchColor to prevent OOB access from
  unvalidated network input (p_partIndex could exceed array bounds)
- BUG-2: Enforce allowRemoteCustomize on receiver side in HandleCustomize
  (was only checked on sender side, byppassable by malicious client)
- BUG-3: Document stale-state sound asymmetry for remote targets
- OBS-1: Remove unused bodyVariantIndex from CustomizeState (never
  modified, wasted 3 bits per state message)
- NAME-1: Fix p_ prefix convention on ApplyCustomizeChange parameters
2026-03-07 23:20:55 +01:00
..
lego Character customization (#8) 2026-03-07 23:20:55 +01:00
modeldb Merge remote-tracking branch 'isle/master' 2025-06-24 09:05:44 -07:00
mxdirectx Plug leaks until Information Center, detected by the LeakSanitizer (#764) 2026-01-04 03:35:42 +01:00
mxgeometry Merge remote-tracking branch 'isle/master' 2025-09-12 12:35:22 -07:00
mxstl Implement LegoPathController::FUN_10048310 (#1192) 2024-12-06 20:50:40 +01:00
omni Update miniaudio to 0.11.24 (#774) 2026-01-30 19:42:06 -08:00
realtime Merge remote-tracking branch 'isle/master' 2026-01-30 17:06:10 -08:00
res Support building isle with modern MSVC + msys2 (#421) 2024-01-10 23:34:32 +01:00
tgl Plug memory leaks while moving around in the Information Center (#768) 2026-01-06 04:17:23 +01:00
viewmanager Merge remote-tracking branch 'isle/master' 2026-01-07 16:39:54 -07:00
cursor.h Make draw cursor feature work for modern platforms (#480) 2025-07-03 18:05:46 +02:00
define.cpp Match LegoActor and LegoPathActor in BETA10 (#1524) 2025-05-27 22:04:01 +02:00
define.h Implement/match LegoRaceActor (#1072) 2024-08-02 22:29:21 -07:00
lego1_export.h Use SDL3 functions in more locations (#44) 2024-12-24 18:04:46 -07:00
lego1_pch.h Merge remote-tracking branch 'isle/master' 2026-01-30 17:06:10 -08:00
library_msvc.h Beta match LegoLOD and related classes (#1704) 2026-01-05 23:45:36 +01:00
library_smack.h Fix inclusion guards of 3 files (#1509) 2025-05-20 02:15:30 +02:00
library_smartheap.h Add SmartHeap for LEGO1 (#1694) 2025-10-12 07:36:36 +02:00
main.cpp Restructure miniwin and add support for 3D backends 2025-05-29 04:07:53 +02:00