Commit Graph

154 Commits

Author SHA1 Message Date
foxtacles
7b114bbe59
Add multiplayer extension (#789)
* Add multiplayer extension

* Fix animation system to work when host is outside ISLE world

- Move TickHostSessions outside m_inIsleWorld gate so the host can
  coordinate animations from any world
- Load animation catalog early in HandleCreate so the host can
  coordinate before entering the ISLE world
- Use network-reported positions for remote player location detection
  instead of requiring spawned ROIs
- Always erase sessions at launch — the host's job ends when the
  animation starts; clients play and complete independently
- Replace BroadcastAnimComplete with locally-driven completion
  callbacks: host generates eventId at launch, clients cache
  completion JSON at start time, fire it when ScenePlayer finishes
- Make StopAnimation only do local cleanup (stop playback, cancel
  own interest, reset coordinator) without destroying the session
  host, so other players' sessions survive world transitions
- Broadcast state=0 in ResetAnimationState for full teardown paths
  (shutdown, reconnect, host migration) so clients aren't left with
  stale session state

* Fix use-after-free crash in ScenePlayer when remote player disconnects mid-animation

When a remote player's ROI is destroyed (disconnect, timeout, or respawn),
notify all active ScenePlayer instances to null out dangling references
before the ROI is freed. The animation engine already handles null ROI map
entries gracefully, so playback continues for remaining participants.

* Fix crash when performer's child ROIs are left dangling in ScenePlayer

NotifyROIDestroyed now walks the parent chain to also invalidate child
ROIs of the destroyed performer (head, limbs, etc.) that were placed
into the roiMap by BuildROIMap. The ancestor walk happens once; all
other fields are cleaned with simple pointer equality.

* Allow spectator to play click animation during scene playback

* Make PTATCAM track spectator ROI instead of camera in ScenePlayer

* Only regenerate emscripten version files when git state changes

Replace add_custom_target(ALL) with add_custom_command(OUTPUT) so the
version script only runs when .git/HEAD or the current branch ref file
changes, instead of on every build.

* Fix ROI name collision causing dangling pointers in NPC locomotion roiMaps

When ScenePlayer created cloned NPC ROIs for cooperative animations, it
renamed them to match the original character name and added them to the
ViewManager. This created a name collision: two ROIs with the same name.
The original game's AppendROIToScene searches by name and stops at the
first match, so if a locomotion BuildROIMap ran while the clone existed,
it could capture pointers to the clone's child ROIs. When the clone was
later destroyed (CleanupProps), those roiMap entries became dangling
pointers, crashing in AnimateWithTransform at roi.h:151 (SetVisibility).

Fix: use the alias mechanism (already supported by AnimUtils::BuildROIMap)
instead of renaming clones. Also unify all ROI name generation behind a
shared counter to prevent character manager key collisions.
2026-04-05 17:13:15 +02:00
foxtacles
7e4a86fb39
Add third person camera extension (#786)
Some checks failed
CI / clang-format (push) Has been cancelled
CI / ${{ matrix.name }} (false, --toolchain /usr/local/vitasdk/share/vita.toolchain.cmake, false, false, Ninja, Vita, ubuntu-latest, true, true) (push) Has been cancelled
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) Has been cancelled
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) Has been cancelled
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) Has been cancelled
CI / ${{ matrix.name }} (false, emcmake, false, false, true, Ninja, Emscripten, ubuntu-latest, true) (push) Has been cancelled
CI / ${{ matrix.name }} (false, false, false, Ninja, true, MSVC (arm64), windows-latest, amd64_arm64, false) (push) Has been cancelled
CI / ${{ matrix.name }} (false, false, true, Ninja, true, MSVC (x86), windows-latest, amd64_x86, false) (push) Has been cancelled
CI / ${{ matrix.name }} (false, true, false, Ninja, true, MSVC (x64), windows-latest, amd64, false) (push) Has been cancelled
CI / ${{ matrix.name }} (false, true, true, false, Ninja, true, MSVC (x64 Debug), windows-latest, amd64, false) (push) Has been cancelled
CI / ${{ matrix.name }} (true, false, -DCMAKE_SYSTEM_NAME=iOS, false, false, Xcode, true, iOS, macos-15, true) (push) Has been cancelled
CI / ${{ matrix.name }} (true, false, false, false, Ninja, Android, ubuntu-latest, true) (push) Has been cancelled
CI / ${{ matrix.name }} (true, false, true, false, Ninja, macOS, macos-latest, true) (push) Has been cancelled
CI / ${{ matrix.name }} (true, true, false, Ninja, true, mingw-w64-x86_64, mingw64, msys2 mingw64, windows-latest, msys2 {0}, true) (push) Has been cancelled
CI / ${{ matrix.name }} (true, true, true, false, Ninja, true, Linux (Debug), ubuntu-latest, true) (push) Has been cancelled
CI / ${{ matrix.name }} (true, true, true, false, Ninja, true, Linux, ubuntu-latest, true) (push) Has been cancelled
CI / Flatpak (${{ matrix.arch }}) (aarch64, ubuntu-22.04-arm) (push) Has been cancelled
CI / Flatpak (${{ matrix.arch }}) (x86_64, ubuntu-latest) (push) Has been cancelled
CI / C++ (push) Has been cancelled
Docker / Publish web port (push) Has been cancelled
CI / Release (push) Has been cancelled
Introduces a third person camera system with orbit camera, input handling
(mouse/keyboard/touch/gamepad), display actor cloning, and camera-relative
movement. Includes shared character utilities (animator, cloner, customizer)
and an IExtraAnimHandler interface for optional animation extensions.
Also includes generic base game fixes and extension system improvements.
2026-03-31 01:00:07 +02:00
Christian Semmler
841db2a577
Add SI Loader extension (#664)
* SiLoader draft

* Fixes

* Fixes

* Fix asset build on Windows

* Remove whitespace

* Package assets in CI

* Disable clang-tidy

* Fix NCC

* Try this

* Disable extensions on Xbox for now

* Update bitmap

* Update 3rdparty/CMakeLists.txt

Co-authored-by: Anonymous Maarten <madebr@users.noreply.github.com>

* Add DEPFILE for asset command

* Use assets.d instead of .d

---------

Co-authored-by: Anonymous Maarten <madebr@users.noreply.github.com>
2025-08-11 00:59:55 +00:00
Christian Semmler
deca5e5a2e
Add device and gamepad haptics to web port (#613)
* Add device and gamepad haptics to web port

* Update skip.yml
2025-07-15 23:50:14 +00:00
Christian Semmler
f20fc475c7
Integrate SDL Haptic API (#607)
* Integrate SDL Haptic API

* Close other devices

* Fixes
2025-07-15 23:47:37 +02:00
Helloyunho
0191be7461
Make draw cursor feature work for modern platforms (#480) 2025-07-03 18:05:46 +02:00
Christian Semmler
020969c483
Add transition type to ini (#441) 2025-06-29 02:49:46 +02:00
Anders Jenbo
4c80c8d923
Add 32bit color support (#311) 2025-06-14 23:09:23 +00:00
Christian Semmler
69bac21488 Merge remote-tracking branch 'isle/master' into merge 2024-12-23 09:38:55 -07:00
Joshua Peisach
48c327ca5a
Implement MxDisplaySurface::VTable0x2c (#1262)
* Implement MxDisplaySurface::VTable0x2c

* fix header namespace

* Incorporate improvements from @madebr branch

* Naming

* Naming

---------

Co-authored-by: Christian Semmler <mail@csemmler.com>
Co-authored-by: Anonymous Maarten <anonymous.maarten@gmail.com>
2024-12-23 16:17:36 +01:00
Christian Semmler
f51b1867ee
Use SDL3 for filesystem access (#36)
* Use SDL IOStream in for MXIOINFO

* Use SDL IOStream for WDB file

* Use SDL IOStream for LegoStorage

* Update README.md

* Fixes

* Add names to skip.yml

* Add #include <stdio.h> where necessary
2024-12-16 22:25:52 +01:00
Christian Semmler
5ade193261
merge from isle/master 2024-11-29 15:27:01 -07:00
Christian Semmler
d6796ad86a
Implement remaining LegoGameState functions (#1172)
* Implement remaining LegoGameState functions

* Naming fixes

* Fix naming
2024-11-27 23:42:05 +01:00
Anonymous Maarten
0cb753e523
Use reccmp as a python requirement (#1116)
* Use reccmp as a python requirement

* Add BETA10 to reccmp-project.yml
2024-10-26 05:57:47 -07:00
MS
91205be031
Handle duplicate thunks in BETA10 (#1113) 2024-10-17 20:17:00 -07:00
jonschz
8446a7ffa1
Add new script to compare the stack layout (#1112)
* Add new script to debug the stack layout

* fix small error in script

---------

Co-authored-by: jonschz <jonschz@users.noreply.github.com>
2024-10-13 14:31:15 -07:00
jonschz
f89ee5c13d
BETA10 import: Fix FUN_... collisions (#1105)
* Improve BETA10 name import, refactor

* Run formatter

---------

Co-authored-by: jonschz <jonschz@users.noreply.github.com>
2024-09-14 07:16:12 -07:00
jonschz
ece3550e62
Fix spurious reccmp warnings (#1101)
Co-authored-by: jonschz <jonschz@users.noreply.github.com>
2024-09-08 22:00:08 +02:00
Christian Semmler
318c46b881
merge 2024-09-05 12:09:19 -07:00
jonschz
2b14d3d6a5
Implement parts of LegoCarBuild and dependents (#1092)
* Implement parts of `LegoCarBuild` and dependents

* Fix BETA10 offset

* Fix constants

* Code style: Rename parameters

* Linter fixes v2

* Linter errors v3

* Add BETA10 variable names for presenters

* Address review comments

---------

Co-authored-by: jonschz <jonschz@users.noreply.github.com>
2024-09-03 13:50:30 -07:00
MS
30be1ed4b8
Brute force string search for BETA10 (#1097)
* Brute force string search for BETA10

* improved string check

* Skip this unless source binary is debug

* remove misplaced comment
2024-09-01 22:34:58 +02:00
MS
f242130382
Sanitize args for assert in BETA10 (#1095) 2024-08-31 22:37:32 -07:00
jonschz
0256fc4acf
Fix Ghidra import call type (#1093)
Co-authored-by: jonschz <jonschz@users.noreply.github.com>
2024-08-31 08:00:35 -07:00
jonschz
b898d98515
BETA10: reccomp support and Ghidra imports (#1091)
* Implement core functionality (before linter)

* run linter + formatter

* Review: remove redundant code

* Implement end of range check for vtables

---------

Co-authored-by: jonschz <jonschz@users.noreply.github.com>
2024-08-29 11:54:23 -07:00
jonschz
ce3fc57025
BETA10 Readme additions (#1090)
Co-authored-by: jonschz <jonschz@users.noreply.github.com>
2024-08-23 12:22:03 -07:00
jonschz
757df96c0d
Implement/match LegoRaceMap (#1087)
* Implement/match LegoRaceMap

* Fix CI, address review comments

---------

Co-authored-by: jonschz <jonschz@users.noreply.github.com>
2024-08-17 11:30:39 -07:00
jonschz
412200ecbc
Ghidra Import: Support virtual inheritance (#1071)
* Implement/fix Ghidra imports for multiple and virtual inheritance

Unfortunately, the handling in Ghidra is still far from perfect. This is a good place to start, though.

* Support offsets in vbase pointers

* Support `this adjust`

* minor stylistic improvement

* Improvements to documentation

---------

Co-authored-by: jonschz <jonschz@users.noreply.github.com>
2024-07-30 10:02:15 -07:00
jonschz
210376f272
Implement LegoRaceCar::HandleSkeletonKicks and dependents (#1065)
* Implement `LegoRaceCar::HandleSkeletonKicks` and dependents

* Fix typo

* Spike to fix array comparisons (needs refactor)

* Refactor: Dedicated method for array element matching

* Address review comments

* Reformat with new version of black

* Apply more review comments

* Address more review comments

---------

Co-authored-by: jonschz <jonschz@users.noreply.github.com>
2024-07-17 07:03:02 -07:00
MS
4a87c3bc44
Small update to datacmp and roadmap (#1048)
* Match uninit variables with all nulls

* Enable _pnhHeap variable for ISLE

* Roadmap bugfix for ordinal import dummy addrs

* Format fix
2024-06-28 14:58:35 -07:00
Christian Semmler
4258fb0deb Add back some stuff from decomp (#2)
* Add ncc script

* add requirements.txt

* Add other builds

* Add with submodules

* Comment out for now

* Add
2024-06-25 19:49:59 +02:00
Christian Semmler
3fdf45968e Remove decomp tools 2024-06-25 19:48:57 +02:00
jonschz
d869d565c2
Fix Ghidra import script re-importing unchanged functions (#1035)
* feat: Reuse enums instead of recreating them every time

* feat: Support verifying return values larger than 4 bytes

* feat: Ignore `__$ReturnUdt` in template functions

* run formatter

---------

Co-authored-by: jonschz <jonschz@users.noreply.github.com>
2024-06-16 08:50:32 -04:00
jonschz
c8dc77cbf4
Support stubs in function import (#1034)
* Refactor returned data structure for extensibility

* feature: Import stub functions but don't overwrite their argument list

Ghidra might have auto-detected some arguments, so we don't want to overwrite that if the stub's argument list has not been verified

Closes #1009

---------

Co-authored-by: jonschz <jonschz@users.noreply.github.com>
2024-06-16 07:13:19 -04:00
MS
9383076e04
Fix remaining vtordisp issues (#1016)
* Fix LegoRaceActor

* Fix LegoRaceMap

* Fix LegoCarRaceActor

* Fix LegoJetskiRaceActor

* Fix LegoJetski

* Fix LegoRaceCar

* Downgrade orig addr unique message to debug
2024-06-10 13:04:40 -04:00
MS
0dca127649
Parse anonymous LF_UNION type (#1013) 2024-06-09 13:52:04 -04:00
MS
9bc5c26bcc
Handle S_BLOCK32 in cvdump symbols parser (#1012) 2024-06-09 13:38:57 -04:00
jonschz
f26c30974a
Add Ghidra function import script (#909)
* Add draft for Ghidra function import script

* feature: Basic PDB analysis [skip ci]

This is a draft with a lot of open questions left. Please do not merge

* Refactor: Introduce submodules and reload remedy

* refactor types and make them Python 3.9 compatible

* run black

* WIP: save progress

* fix types and small type safety violations

* fix another Python 3.9 syntax incompatibility

* Implement struct imports [skip ci]

- This code is still in dire need of refactoring and tests
- There are only single-digit issues left, and 2600 functions can be imported
- The biggest remaining error is mismatched stacks

* Refactor, implement enums, fix lots of bugs

* fix Python 3.9 issue

* refactor: address review comments

Not sure why VS Code suddenly decides to remove some empty spaces, but they don't make sense anyway

* add unit tests for new type parsers, fix linter issue

* refactor: db access from pdb_extraction.py

* Fix stack layout offset error

* fix: Undo incorrect reference change

* Fix CI issue

* Improve READMEs (fix typos, add information)

---------

Co-authored-by: jonschz <jonschz@users.noreply.github.com>
2024-06-09 08:41:24 -04:00
MS
efdbbeecc0
Stop disassembling if we hit int3 (#1004) 2024-06-08 19:16:28 -04:00
MS
cb74a8c80e
Disable autojunk for python difflib (#1001) 2024-06-08 10:36:32 -04:00
MS
b8ea5bf9ba
Fix missing float constants (#959) 2024-05-27 03:22:10 -04:00
Christian Semmler
8fee73c525
Implement/match LegoPathStruct (#944)
* Implement/match LegoPathStruct

* Rename some nums

* Consistent naming

* Naming

* relax regex

* Name some functions

* Improve naming

* Rename
2024-05-21 15:03:50 -04:00
Christian Semmler
939c09139f
Match LegoOmni::Destroy and related (#917)
* Match LegoOmni::Destroy and related

* Write COMPAT_MODE macro differently

* fix lint issue
2024-05-14 14:13:27 +02:00
MS
119ff93461
Parser bugfix: vtable namespace (#910) 2024-05-11 18:40:31 -04:00
Christian Semmler
45f9f54f21
Implement/match IslePathActor::SpawnPlayer (#884)
* Implement/match IslePathActor::SpawnPlayer

* Fix

* Fix

* Add skip

* Rename param
2024-05-04 16:13:05 +02:00
Christian Semmler
01b861bc09
Update README.md and CONTRIBUTING.md (#880)
* Update README.md and CONTRIBUTING.md

* typo

* style

* comma
2024-05-03 15:43:59 +02:00
MS
e7670f9a81
Read floating point constants up front (#868)
* Read floating point constants before sanitize

* Fix roadmap
2024-04-29 14:33:16 -04:00
Christian Semmler
19d39394be
Score class cleanup (#855)
* Cleanup/fixes

* Improve Paint match

* Improve Score::FillArea

* Fix naming

* Fix value
2024-04-26 16:58:42 +02:00
MS
41be78ed1c
Pointer substitution can use offset into variable (#841) 2024-04-23 17:06:43 -04:00
MS
9e71eef72b
Change thunk match strategy (#818)
* Change thunk match strategy

* Add orig thunk when recomp is not thunked
2024-04-18 19:39:20 -04:00
MS
c8840117be
More effective match strategies (#804)
* More effective match strategies

* Basic check on instruction relocation

* More targeted check for relocation
2024-04-14 17:08:42 -04:00