* WIP
* WIP
* Make camera the single source of truth for broadcast state
Remove redundant local copies of walkAnimId, idleAnimId, and
displayActorIndex from NetworkManager. BroadcastLocalState now reads
these from the camera's Controller, eliminating dual-copy sync issues.
Additional cleanup:
- Early-return on null cam in SendEmote/HandleCustomize for clarity
- Only consume camera-dependent pending requests when cam is available
- Move local name bubble creation from BroadcastLocalState to Tickle
- Remove dead NetworkManager::SetDisplayActorIndex method
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fix clang format
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* 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
CI / ${{ matrix.name }} (false, -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0.26100.0, false, false, Visual Studio 17 2022, true, Xbox One, windows-latest, amd64, false, true) (push) Waiting to run
CI / ${{ matrix.name }} (false, -DCMAKE_TOOLCHAIN_FILE=/opt/devkitpro/cmake/3DS.cmake, false, devkitpro/devkitarm:latest, false, Ninja, true, Nintendo 3DS, ubuntu-latest, true) (push) Waiting to run
CI / ${{ matrix.name }} (false, -DCMAKE_TOOLCHAIN_FILE=/opt/devkitpro/cmake/Switch.cmake, false, devkitpro/devkita64:latest, false, Ninja, Nintendo Switch, true, ubuntu-latest, true) (push) Waiting to run
* Make Infocenter compatible with 1.0 versions
* Fix
* Emscripten patch
* Fix
* Fix Emscripten patch
* Window title
* Naming
* Don't exit car build automatically in 1.0
* Disable character selection by clicking icon in 1.0
* Remove obsolete includes
* Fix `LegoBackgroundColor` order
* Order
* Improve order in Act3Actors
* Improve order
* Add BETA annotation
* Order more
* More order
* More order
* Order
* Match/order
* Remove blank line
* Modern compiler fix
* vtable annotation
* Texture pixel data is passed through as const data
* Use SDL_Surface/SDL_Palette in LegoImage
* Use SDL_Process to run subprocess
* Pass SDL_Window handle to SDL_ShowSimpleMessageBox
this makes sure the message dialog is shown as modal dialog and is on top
* Log errors during initialization
* Show SDL error during initialization
* Include <climits> for INT_MAX
* Replace _access with SDL_GetPathInfo
* Use SDL_RemovePath instead of DeleteFile
* Use SDL_RenamePath instead of MoveFile
* Use MxS32 in legoutils.cpp
* Update LEGO1/lego/legoomni/src/common/legoutils.cpp
* Naming
---------
Co-authored-by: Christian Semmler <mail@csemmler.com>
* Use SDL_GetPerformance(Counter|Frequency) in MxStopWatch
* Fix flic.h for gcc Linux compiler
* cmake: remove left-over message
* Replace some more stricmp with SDL_strcasecmp
* Pass SDL_Window* to LEGO1.DLL, and pass window events through SDL event handler
* clang-format
* Use SDL_Timer for unknown input dragging events
* Fix naming
---------
Co-authored-by: Christian Semmler <mail@csemmler.com>
* Use strcasecmp, strncasecmp, strlwr, strupr and itoa from SDL
* Use SDL_GetTicks instead of timeGetTime
* Use MxDSFile::OPEN_READ instead of OF_READ
* Use SDL_IOStream to read bitmaps
* Use SDL_LogXXX instead of OutputDebugString
* Undo mxvideoparam.h change
* Revert "Undo mxvideoparam.h change"
This reverts commit 4a20cf6c46.
* Fix _MxTrace
* Reapply "Undo mxvideoparam.h change"
This reverts commit b3a09dc520.
* fix _MxTrace
* Use __declspec(dllexport) for exporting symbols from dll
Refactored CMake script such that all objects are passed to the lego1 library.
* clang-format
* fix msvc build
* MSVC fixed for real now?
* Forgot about d3drm_guid
* Fix naming issue
* Use Uint64 in LegoCarBuild::Tickle for dTime
* d3drm: store LPVOID data instead of DWORD
* m_extraCharacterId is an integer, not a pointer
* cmake: look for iniparser using config file first, then try our custom module file
Our custom module file is still useful.
My linux distro does not package the cmake files.
* x86's stdcall becomes MS's x64 calling canvention
* Fix 64-bit mxdsbuffer pointer arithmetic
* Casting from void* to a smaller-sized integer needs an intermediate equally-sized integer
* Don't cast address to scalar (this is fishy)
* Add mingw64 build to the ci matrix
* Ignore -Wdiscarded-qualifiers warning with const vtables
* Ignore different 'const' qualifiers with MSVC
* Create d3dxof import library for MSVC
* DESCRIPTION in .def file(s) is deprecated
* Assume mmx is supported on x64, require a test for x86 and disabled on other archs
* 32- and 64-bit LEGO1.dll export different symbol names
* Introduce d3drm_guid containing the guids of d3drm
* Disable __wine_dbg_cdecl
* Include d3drm directory with EXCLUDE_FROM_ALL
* lego1 leaks d3drm headers
* Add dxfile.h
* Add 64-bit MSVC to the build matrix
* cmake: using ISLE_USE_DX5 means going all-in
* Load d3dxof.dll dynamically
* cmake: don't emit a warning about bitness anymore