Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
101 commits
Select commit Hold shift + click to select a range
5c8a2ff
Implement multiplayer MVP: WebSocket networking, remote player render…
foxtacles Feb 28, 2026
fb1d596
Clean up multiplayer extension: use vec.h macros, remove debug logging
foxtacles Feb 28, 2026
21a12d4
Add local relay server and apply formatting fixes
foxtacles Feb 28, 2026
12a63c1
Implement multiplayer world state sync for plants and buildings
foxtacles Mar 1, 2026
a0629c4
Minimize LEGO1 changes: revert globals, move CreateCharacterClone to …
foxtacles Mar 1, 2026
c760db5
Extract WorldStateSync from NetworkManager
foxtacles Mar 1, 2026
dac4093
Refactor relay server into separate modules, fix Docker signal handling
foxtacles Mar 1, 2026
762a5f3
Add configurable room name, fix parameter naming in multiplayer exten…
foxtacles Mar 1, 2026
6da036a
Use consistent Extension call pattern in legoentity and legoworld
foxtacles Mar 1, 2026
14d6bf8
Update world state assessment: mark Tier 1 done, reassess Tiers 2 and 4
foxtacles Mar 1, 2026
fd3ce9f
Add Phase 1 plan: URL rooms, animation triggers, and Svelte overlay
foxtacles Mar 1, 2026
9eb5dbd
Update Phase 1 plan: configurable rooms, animation research, INI config
foxtacles Mar 1, 2026
42b5f43
Refine animation system: three categories, persistent walk/idle in state
foxtacles Mar 1, 2026
629378f
Resolve open questions: ROI map caching, room full toast, leaning wal…
foxtacles Mar 1, 2026
a7ba34c
Add missing cstdio include for sprintf in charactercloner
foxtacles Mar 1, 2026
5b56db3
Add room management, relay capacity, and rejection handling
foxtacles Mar 1, 2026
29955df
Export MultiplayerExt symbols accessed from isle executable (#1)
foxtacles Mar 2, 2026
4ad8352
Merge branch 'isledecomp:master' into multiplayer
foxtacles Mar 2, 2026
3e85941
Add animation protocol: walk/idle selection, emote triggers, WASM exp…
claude Mar 2, 2026
e47d2da
Refactor WASM exports and add push-based player count events
foxtacles Mar 2, 2026
0997610
Extract PlatformCallbacks interface and consolidate Emscripten files
foxtacles Mar 2, 2026
37b328a
3rd person camera (#3)
foxtacles Mar 7, 2026
c8c3b72
Fix 3rd/1st person camera switch direction bugs (#4)
foxtacles Mar 7, 2026
237dca8
Add plan for Display Actors
foxtacles Mar 7, 2026
dcf3b66
Fix 3rd person camera 180-degree flip after cam anim ends (#5)
foxtacles Mar 7, 2026
ed4e248
Implement display actors (#6)
foxtacles Mar 7, 2026
c943d24
Add player name bubbles above remote players' heads in multiplayer (#7)
foxtacles Mar 7, 2026
a9747de
Character customization (#8)
foxtacles Mar 7, 2026
ff0593f
Remove obsolete docs
foxtacles Mar 7, 2026
853e898
Control NPC count per room
foxtacles Mar 7, 2026
eb6d2b8
Sync sky light (#9)
foxtacles Mar 8, 2026
e0a1ac7
Add free camera controls (#10)
foxtacles Mar 8, 2026
dd56e6c
Fix player count showing 0 after returning from a race
foxtacles Mar 8, 2026
1fe1b73
Show name bubble on local player in 3rd person camera
foxtacles Mar 8, 2026
a8c3ec7
Always derive display actor from actorId when no INI actor
foxtacles Mar 8, 2026
9e8ecd6
Move routing info into message header, make relay type-agnostic
foxtacles Mar 8, 2026
a5b2ea0
Extract CharacterAnimator component, EncodeUsername utility, replace …
foxtacles Mar 8, 2026
f697524
Suppress movement input during 3rd-person camera touch gestures
foxtacles Mar 8, 2026
37f33a9
Replace SetMaxAllowedExtras setter with friend class
foxtacles Mar 9, 2026
fe5ef4f
Fix camera flip bugs, refactor camera (#11)
foxtacles Mar 10, 2026
04730bc
Suppress right-click game interactions during free camera orbit (#12)
foxtacles Mar 10, 2026
1a8c6c7
Add disassemble/assemble emote (#13)
foxtacles Mar 10, 2026
630368c
Add emote sound effects (#14)
foxtacles Mar 11, 2026
1714142
Fix: don't play emotes on vehicles
foxtacles Mar 11, 2026
9145a23
Fix: stop previous click animation before starting a new one
foxtacles Mar 11, 2026
be65af4
Camera relative movement (#15)
foxtacles Mar 11, 2026
33436ef
Add missing joystick handling
foxtacles Mar 11, 2026
3bcd8cc
Improve touch UX in 3rd person camera
foxtacles Mar 11, 2026
004e3b3
Fix bugs (#16)
foxtacles Mar 13, 2026
e9c322f
Fix
foxtacles Mar 13, 2026
0ad5361
Claude/auto switch camera zoom dcg go (#17)
foxtacles Mar 13, 2026
569c8b4
Separate extensions (#18)
foxtacles Mar 13, 2026
4269a1b
Consolidate extension forward declarations into extensions/fwd.h
foxtacles Mar 13, 2026
a588e3b
Disable all NPCs when maxActors=0
foxtacles Mar 13, 2026
0de2206
Add new idle animations and emotes, fix root ROI duplication
foxtacles Mar 13, 2026
ede39a8
Add emote prop ROI support with dynamic detection from animation tree
foxtacles Mar 14, 2026
577fa09
Add missing mxtypes.h include for MxBool in orbitcamera.h
foxtacles Mar 14, 2026
74271aa
Fix mobile camera zoom/transition and name bubble issues
foxtacles Mar 14, 2026
071e066
Lower 3rd-to-1st person camera switch distance to 0.5
claude Mar 14, 2026
680c7c2
Distinguish "room full" from "connection lost" in WebSocket error han…
foxtacles Mar 14, 2026
37587be
Merge branch 'multiplayer' into claude/adjust-camera-switch-distance-…
foxtacles Mar 14, 2026
855c5c4
Move exit code constants to networktransport.h and eliminate magic nu…
foxtacles Mar 14, 2026
13f6239
Claude/fix platform compilation errors hol yw (#19)
foxtacles Mar 14, 2026
aa48001
Disable third person camera and hide remote players in Isle overlay a…
foxtacles Mar 14, 2026
e4dabad
Guard against null GameState in ReinitForCharacter
foxtacles Mar 15, 2026
629d77c
Merge branch 'master' into multiplayer
foxtacles Mar 15, 2026
09ed6ed
Fix player count not updating when exiting Isle overlay areas
foxtacles Mar 15, 2026
176aef1
Fix software renderer ignoring texture in transparent render path
foxtacles Mar 16, 2026
982957e
Add WebSocket reconnection with exponential backoff
foxtacles Mar 16, 2026
138cbcf
Add LMB forward movement to third person camera
foxtacles Mar 17, 2026
7bb9022
Drop unnecessary SQLite storage from GameRoom Durable Object
foxtacles Mar 17, 2026
647bd28
Claude/npc animations local playback (#20)
foxtacles Mar 21, 2026
9a20bd4
Merge branch 'master' into multiplayer
foxtacles Mar 23, 2026
99c871a
Nick bricks memories (#21)
foxtacles Mar 23, 2026
0f2ec86
Add public room registry and extract shared CORS headers
foxtacles Mar 24, 2026
74d9f76
Use new_sqlite_classes for Durable Object migrations
foxtacles Mar 24, 2026
08f44b9
Fix infinite reconnection loop caused by stale WebSocket onclose events
foxtacles Mar 25, 2026
892fb80
Fix animation audio playing ~1.5x too fast with 3D sound enabled
foxtacles Mar 27, 2026
32fd90d
Support multiple overlapping locations for scene animation eligibility
foxtacles Mar 27, 2026
32b2834
Remove dead code hiding spectator ROIs during camera animations
foxtacles Mar 27, 2026
c2901d1
Suppress pizzeria clicks in multiplayer
foxtacles Mar 27, 2026
7566d5c
Skip LMB hold threshold for immediate movement when RMB is held
foxtacles Mar 27, 2026
343610e
Fix phoneme playback and lower background audio during animations
foxtacles Mar 27, 2026
f929677
Support concurrent animation playback by independent player groups
foxtacles Mar 27, 2026
2bdbb59
Fix catalog actor index
foxtacles Mar 27, 2026
734623c
Reclassify animations based on performer mask instead of character index
foxtacles Mar 28, 2026
9640132
Add 6 prop-only animations and scene ROI cloning for missing models
foxtacles Mar 28, 2026
aa9df33
WIP: Filter animations by vehicle eligibility
foxtacles Mar 28, 2026
3396d42
Fix vehicle filter bug and refactor: wrong index space in GetCharacte…
foxtacles Mar 28, 2026
f3c6d90
Fix inaccurate comment: vehicle arrays contain VehicleState, not bool
foxtacles Mar 28, 2026
e57164d
Fix use-after-free crash and misaligned protocol access
foxtacles Mar 28, 2026
05716eb
WIP
foxtacles Mar 28, 2026
b566dda
Decouple SI extraction from Animation::Loader into reusable SIReader
foxtacles Mar 28, 2026
39ee0b3
Fix row-major matrix multiplication order in hierarchical ROI transforms
foxtacles Mar 28, 2026
8413647
Fix local player name bubble not following large vehicles
foxtacles Mar 28, 2026
af80f16
Suppress build exit camera animations in multiplayer
foxtacles Mar 28, 2026
f7947e1
Refactor extensions: DRY, named constants, and cleanup
foxtacles Mar 28, 2026
e61f47a
Fix LegoROI forward declaration resolving to wrong namespace
foxtacles Mar 28, 2026
0c986af
Add multi-world animation support (ACT2/ACT3)
foxtacles Mar 29, 2026
0f600ee
Fix incomplete type error for Lego3DManager on Switch build
foxtacles Mar 29, 2026
f17f0e6
Fix PTATCAM parsing: accept colon separator from SI extra data
foxtacles Mar 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@ VENV/
env.bak/
venv.bak/
local.properties
/build/
/build_debug/
/build*/
/legobin/
*.swp
LEGO1PROGRESS.*
Expand Down
66 changes: 64 additions & 2 deletions 3rdparty/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@ if(DOWNLOAD_DEPENDENCIES)
include(FetchContent)
FetchContent_Populate(
libweaver
URL https://github.com/isledecomp/SIEdit/archive/afd4933844b95ef739a7e77b097deb7efe4ec576.tar.gz
URL_MD5 59fd3c36f4f380f730cd9bedfc846397
URL https://github.com/isledecomp/SIEdit/archive/17c7736a6ff31413f1e74ab4e989011b545b6926.tar.gz
URL_MD5 04edbc974df8884f283d920ded10f1f6
)
add_library(libweaver STATIC
${libweaver_SOURCE_DIR}/lib/core.cpp
Expand All @@ -72,3 +72,65 @@ if(DOWNLOAD_DEPENDENCIES)
set_property(TARGET libweaver PROPERTY CXX_STANDARD_REQUIRED ON)
endif()

if(ISLE_USE_LWS)
if(DOWNLOAD_DEPENDENCIES)
include(FetchContent)

# Fetch mbedTLS for TLS/WSS support in libwebsockets
FetchContent_Declare(
mbedtls
URL https://github.com/Mbed-TLS/mbedtls/releases/download/mbedtls-3.6.5/mbedtls-3.6.5.tar.bz2
URL_MD5 bc79602daf85f1cf35a686b53056de58
# Patch cmake_minimum_required to avoid deprecation error with -Werror=dev
PATCH_COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/patch_mbedtls_cmake.cmake
)
block()
set(ENABLE_TESTING OFF CACHE BOOL "" FORCE)
set(ENABLE_PROGRAMS OFF CACHE BOOL "" FORCE)
set(MBEDTLS_FATAL_WARNINGS OFF CACHE BOOL "" FORCE)
set(BUILD_SHARED_LIBS OFF)
FetchContent_MakeAvailable(mbedtls)

# Point lws at the mbedTLS targets so it skips its own find logic
# Must be inside block() to access mbedtls_SOURCE_DIR/mbedtls_BINARY_DIR
set(LWS_MBEDTLS_INCLUDE_DIRS
"${mbedtls_SOURCE_DIR}/include;${mbedtls_BINARY_DIR}/include"
CACHE STRING "" FORCE
)
set(LWS_MBEDTLS_LIBRARIES
"mbedtls;mbedx509;mbedcrypto"
CACHE STRING "" FORCE
)
endblock()

FetchContent_Declare(
libwebsockets
GIT_REPOSITORY "https://github.com/warmcat/libwebsockets.git"
GIT_TAG "v4.5-stable"
EXCLUDE_FROM_ALL
)
block()
set(LWS_WITH_SSL ON CACHE BOOL "" FORCE)
set(LWS_WITH_MBEDTLS ON CACHE BOOL "" FORCE)
set(LWS_WITH_EXPORT_LWSTARGETS OFF CACHE BOOL "" FORCE)
# mbedTLS isn't built yet at configure time, so lws's check_function_exists
# calls fail. Pre-set the results for APIs that exist in mbedTLS 3.x.
set(LWS_HAVE_mbedtls_md_setup 1 CACHE INTERNAL "" FORCE)
set(LWS_HAVE_mbedtls_rsa_complete 1 CACHE INTERNAL "" FORCE)
set(LWS_WITH_SHARED OFF CACHE BOOL "" FORCE)
set(LWS_WITH_STATIC ON CACHE BOOL "" FORCE)
set(LWS_WITHOUT_TESTAPPS ON CACHE BOOL "" FORCE)
set(LWS_WITH_MINIMAL_EXAMPLES OFF CACHE BOOL "" FORCE)
# Disable treating warnings as errors in libwebsockets (GCC/Clang)
set(DISABLE_WERROR ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(libwebsockets)
endblock()
# Disable MSVC /WX (warnings as errors) that lws sets unconditionally
if(TARGET websockets AND MSVC)
target_compile_options(websockets PRIVATE /WX-)
endif()
else()
find_package(Libwebsockets REQUIRED)
endif()
endif()

7 changes: 7 additions & 0 deletions 3rdparty/patch_mbedtls_cmake.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
file(READ "CMakeLists.txt" content)
string(REGEX REPLACE
"cmake_minimum_required\\(VERSION [0-9]+\\.[0-9]+[0-9.]*\\)"
"cmake_minimum_required(VERSION 3.10)"
content "${content}"
)
file(WRITE "CMakeLists.txt" "${content}")
58 changes: 58 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ option(ISLE_WERROR "Treat warnings as errors" OFF)
cmake_dependent_option(ISLE_USE_DX5 "Build with internal DirectX 5 SDK" "${NOT_MINGW}" "WIN32;CMAKE_SIZEOF_VOID_P EQUAL 4" OFF)
cmake_dependent_option(ISLE_MINIWIN "Use miniwin" ON "NOT ISLE_USE_DX5" OFF)
cmake_dependent_option(ISLE_EXTENSIONS "Use extensions" ON "NOT ISLE_USE_DX5;NOT WINDOWS_STORE" OFF)
cmake_dependent_option(ISLE_USE_LWS "Use libwebsockets for native multiplayer" ON "ISLE_EXTENSIONS;NOT EMSCRIPTEN;NOT NINTENDO_3DS;NOT NINTENDO_SWITCH;NOT VITA" OFF)
cmake_dependent_option(ISLE_BUILD_CONFIG "Build CONFIG.EXE application" ON "MSVC OR ISLE_MINIWIN;NOT NINTENDO_3DS;NOT NINTENDO_SWITCH;NOT WINDOWS_STORE;NOT VITA" OFF)
cmake_dependent_option(ISLE_COMPILE_SHADERS "Compile shaders" ON "SDL_SHADERCROSS_BIN;TARGET Python3::Interpreter" OFF)
cmake_dependent_option(CMAKE_POSITION_INDEPENDENT_CODE "Build with -fPIC" ON "NOT VITA" OFF)
Expand Down Expand Up @@ -531,7 +532,59 @@ if (ISLE_EXTENSIONS)
extensions/src/extensions.cpp
extensions/src/siloader.cpp
extensions/src/textureloader.cpp

# Common shared code
extensions/src/common/charactertables.cpp
extensions/src/common/animutils.cpp
extensions/src/common/characteranimator.cpp
extensions/src/common/charactercloner.cpp
extensions/src/common/charactercustomizer.cpp
extensions/src/common/customizestate.cpp
extensions/src/common/pathutils.cpp

# Third person camera extension
extensions/src/thirdpersoncamera.cpp
extensions/src/thirdpersoncamera/controller.cpp
extensions/src/thirdpersoncamera/orbitcamera.cpp
extensions/src/thirdpersoncamera/inputhandler.cpp
extensions/src/thirdpersoncamera/displayactor.cpp

# Multiplayer extension
extensions/src/multiplayer/animation/catalog.cpp
extensions/src/multiplayer/animation/coordinator.cpp
extensions/src/multiplayer/animation/loader.cpp
extensions/src/multiplayer/animation/locationproximity.cpp
extensions/src/multiplayer/animation/sceneplayer.cpp
extensions/src/multiplayer/animation/sessionhost.cpp
extensions/src/multiplayer/animation/audioplayer.cpp
extensions/src/multiplayer/animation/phonemeplayer.cpp
extensions/src/multiplayer.cpp
extensions/src/multiplayer/namebubblerenderer.cpp
extensions/src/multiplayer/networkmanager.cpp
extensions/src/multiplayer/protocol.cpp
extensions/src/multiplayer/remoteplayer.cpp
extensions/src/multiplayer/sireader.cpp
extensions/src/multiplayer/worldstatesync.cpp
)
if(EMSCRIPTEN)
target_sources(lego1 PRIVATE
extensions/src/multiplayer/platforms/emscripten/websockettransport.cpp
extensions/src/multiplayer/platforms/emscripten/callbacks.cpp
)
elseif(ISLE_USE_LWS)
target_sources(lego1 PRIVATE
extensions/src/multiplayer/platforms/native/lwstransport.cpp
extensions/src/multiplayer/platforms/native/nativecallbacks.cpp
)
# Skip precompiled headers for native transport files to avoid miniwin/windows.h conflicts
set_source_files_properties(
extensions/src/multiplayer/platforms/native/lwstransport.cpp
extensions/src/multiplayer/platforms/native/nativecallbacks.cpp
PROPERTIES SKIP_PRECOMPILE_HEADERS ON
)
target_compile_definitions(lego1 PRIVATE ISLE_USE_LWS)
target_link_libraries(lego1 PRIVATE websockets)
endif()
endif()

if (ISLE_BUILD_APP)
Expand Down Expand Up @@ -587,6 +640,11 @@ if (ISLE_BUILD_APP)
ISLE/emscripten/messagebox.cpp
ISLE/emscripten/window.cpp
)
if(ISLE_EXTENSIONS)
target_sources(isle PRIVATE
extensions/src/multiplayer/platforms/emscripten/wasm_exports.cpp
)
endif()
target_compile_definitions(isle PRIVATE "ISLE_EMSCRIPTEN_HOST=\"${ISLE_EMSCRIPTEN_HOST}\"")
set_property(TARGET isle PROPERTY SUFFIX ".html")
endif()
Expand Down
12 changes: 6 additions & 6 deletions ISLE/emscripten/filesystem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,10 +89,10 @@ void Emscripten_SetupFilesystem()
}

#ifdef EXTENSIONS
if (Extensions::TextureLoader::enabled) {
if (Extensions::TextureLoaderExt::enabled) {
MxString directory =
MxString("/LEGO") + Extensions::TextureLoader::options["texture loader:texture path"].c_str();
Extensions::TextureLoader::options["texture loader:texture path"] = directory.GetData();
MxString("/LEGO") + Extensions::TextureLoaderExt::options["texture loader:texture path"].c_str();
Extensions::TextureLoaderExt::options["texture loader:texture path"] = directory.GetData();
wasmfs_create_directory(directory.GetData(), 0644, fetchfs);

MxU32 i = 0;
Expand All @@ -102,17 +102,17 @@ void Emscripten_SetupFilesystem()
registerFile(path.GetData());

if (!preloadFile(path.GetData())) {
Extensions::TextureLoader::excludedFiles.emplace_back(file);
Extensions::TextureLoaderExt::AddExcludedFile(file);
}

Emscripten_SendExtensionProgress("HD Textures", (++i * 100) / sizeOfArray(g_textures));
}
}

if (Extensions::SiLoader::enabled) {
if (Extensions::SiLoaderExt::enabled) {
wasmfs_create_directory("/LEGO/extra", 0644, fetchfs);

for (const auto& file : Extensions::SiLoader::files) {
for (const auto& file : Extensions::SiLoaderExt::GetFiles()) {
registerFile(file.c_str());
}
}
Expand Down
15 changes: 14 additions & 1 deletion ISLE/isleapp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@
#include "viewmanager/viewmanager.h"

#include <array>
#include <extensions/extensions.h>
#include <extensions/multiplayer.h>
#include <extensions/thirdpersoncamera.h>
#include <miniwin/miniwindevice.h>
#include <type_traits>
#include <vec.h>
Expand Down Expand Up @@ -875,6 +876,10 @@ SDL_AppResult SDL_AppEvent(void* appstate, SDL_Event* event)
}
}

#ifdef EXTENSIONS
Extensions::ThirdPersonCameraExt::HandleSDLEvent(event);
#endif

return SDL_APP_CONTINUE;
}

Expand Down Expand Up @@ -1293,6 +1298,14 @@ inline bool IsleApp::Tick()
if (!Lego()) {
return true;
}

#ifdef EXTENSIONS
if (Extensions::IsMultiplayerRejected()) {
g_closed = TRUE;
return true;
}
#endif

if (!TickleManager()) {
return true;
}
Expand Down
2 changes: 2 additions & 0 deletions LEGO1/lego/legoomni/include/isle.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#define ISLE_H

#include "actionsfwd.h"
#include "extensions/fwd.h"
#include "legogamestate.h"
#include "legonamedplane.h"
#include "legostate.h"
Expand Down Expand Up @@ -164,6 +165,7 @@ class Isle : public LegoWorld {
void SwitchToInfocenter();

friend class Act1State;
friend class Multiplayer::WorldStateSync;

// SYNTHETIC: LEGO1 0x10030a30
// Isle::`scalar deleting destructor'
Expand Down
3 changes: 3 additions & 0 deletions LEGO1/lego/legoomni/include/islepathactor.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#ifndef ISLEPATHACTOR_H
#define ISLEPATHACTOR_H

#include "extensions/fwd.h"
#include "legogamestate.h"
#include "legopathactor.h"
#include "mxtypes.h"
Expand Down Expand Up @@ -139,6 +140,8 @@ class IslePathActor : public LegoPathActor {
// IslePathActor::`scalar deleting destructor'

protected:
friend class Extensions::ThirdPersonCamera::Controller;

LegoWorld* m_world; // 0x154
LegoPathActor* m_previousActor; // 0x158
MxFloat m_previousVel; // 0x15c
Expand Down
4 changes: 4 additions & 0 deletions LEGO1/lego/legoomni/include/legoanimationmanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#define LEGOANIMATIONMANAGER_H

#include "decomp.h"
#include "extensions/fwd.h"
#include "lego1_export.h"
#include "legolocations.h"
#include "legomain.h"
Expand Down Expand Up @@ -203,6 +204,9 @@ class LegoAnimationManager : public MxCore {
// LegoAnimationManager::`scalar deleting destructor'

private:
friend class Multiplayer::NetworkManager;
friend class Multiplayer::Animation::Catalog;

void Init();
MxResult FUN_100605e0(
MxU32 p_index,
Expand Down
3 changes: 3 additions & 0 deletions LEGO1/lego/legoomni/include/legobuildingmanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#define LEGOBUILDINGMANAGER_H

#include "decomp.h"
#include "extensions/fwd.h"
#include "lego1_export.h"
#include "misc/legotypes.h"
#include "mxcore.h"
Expand Down Expand Up @@ -98,6 +99,8 @@ class LegoBuildingManager : public MxCore {
// LegoBuildingManager::`scalar deleting destructor'

private:
friend class Multiplayer::WorldStateSync;

static char* g_customizeAnimFile;
static MxS32 g_maxMove[16];
static MxU32 g_maxSound;
Expand Down
4 changes: 4 additions & 0 deletions LEGO1/lego/legoomni/include/legocachsound.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#define LEGOCACHSOUND_H

#include "decomp.h"
#include "extensions/fwd.h"
#include "lego3dsound.h"
#include "mxcore.h"
#include "mxstring.h"
Expand Down Expand Up @@ -58,6 +59,9 @@ class LegoCacheSound : public MxCore {
// LegoCacheSound::`scalar deleting destructor'

private:
friend class Multiplayer::Animation::AudioPlayer;
friend class Multiplayer::NetworkManager;

void Init();
void CopyData(MxU8* p_data, MxU32 p_dataSize);
MxString GetBaseFilename(MxString& p_path);
Expand Down
3 changes: 3 additions & 0 deletions LEGO1/lego/legoomni/include/legocharactermanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#define LEGOCHARACTERMANAGER_H

#include "decomp.h"
#include "extensions/fwd.h"
#include "mxstl/stlcompat.h"
#include "mxtypes.h"
#include "mxvariable.h"
Expand Down Expand Up @@ -98,6 +99,8 @@ class LegoCharacterManager {
static const char* GetCustomizeAnimFile() { return g_customizeAnimFile; }

private:
friend class Extensions::Common::CharacterCloner;

LegoROI* CreateActorROI(const char* p_key);
void RemoveROI(LegoROI* p_roi);
LegoROI* FindChildROI(LegoROI* p_roi, const char* p_name);
Expand Down
5 changes: 5 additions & 0 deletions LEGO1/lego/legoomni/include/legoinputmanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#define LEGOINPUTMANAGER_H

#include "decomp.h"
#include "extensions/fwd.h"
#include "lego1_export.h"
#include "legoeventnotificationparam.h"
#include "mxlist.h"
Expand Down Expand Up @@ -178,6 +179,9 @@ class LegoInputManager : public MxPresenter {
// SYNTHETIC: LEGO1 0x1005b8d0
// LegoInputManager::`scalar deleting destructor'

friend class Extensions::MultiplayerExt;
friend class Extensions::ThirdPersonCameraExt;

private:
void InitializeHaptics();

Expand All @@ -204,6 +208,7 @@ class LegoInputManager : public MxPresenter {
TouchScheme m_touchScheme = e_none;
SDL_Point m_touchVirtualThumb = {0, 0};
SDL_FPoint m_touchVirtualThumbOrigin;
SDL_FingerID m_touchFinger = 0;
std::map<SDL_FingerID, MxU32> m_touchFlags;
std::map<SDL_KeyboardID, std::pair<void*, void*>> m_keyboards;
std::map<SDL_MouseID, std::pair<void*, SDL_Haptic*>> m_mice;
Expand Down
3 changes: 3 additions & 0 deletions LEGO1/lego/legoomni/include/legomodelpresenter.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#ifndef LEGOMODELPRESENTER_H
#define LEGOMODELPRESENTER_H

#include "extensions/fwd.h"
#include "lego1_export.h"
#include "mxvideopresenter.h"

Expand Down Expand Up @@ -62,6 +63,8 @@ class LegoModelPresenter : public MxVideoPresenter {
void Destroy(MxBool p_fromDestructor);

private:
friend class Multiplayer::Animation::Catalog;

LegoROI* m_roi; // 0x64
MxBool m_addedToView; // 0x68

Expand Down
Loading
Loading