ROI UAF fixes:
- LegoAnimActorStruct deep-copies m_roiMap and deletes copy-assignment, so
LegoExtraActor's copy-construction at legoextraactor.cpp no longer shares
ownership with the source presenter.
- LegoROI tracks slot back-references; its destructor nulls every registered
LegoROI** so per-element UAF in arrays like LegoAnimPresenter::m_roiMap is
impossible. LegoAnimActorStruct / LegoAnimPresenter / LegoLocomotionAnimPresenter
register and unregister around their array lifetimes.
- LegoAnimationManager::Suspend now invokes ClearMaps on every persistent
LegoExtraActor (not just those currently in m_extras) so dormant actors
cannot retain stale m_AnimTreePtr after world teardown. Adds ClearMaps
overrides on Act2Actor, Act3Cop, Act3Brickster, Act3Shark, LegoRaceCar,
LegoExtraActor.
INITIAL_MEMORY=128mb is re-added to the Emscripten link options.
CI / ${{ matrix.name }} (false, -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0.26100.0, false, false, Visual Studio 18 2026, 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
* Rescale save-loaded textures to runtime texture dimensions
`LegoTextureInfo::LoadBits` sized its memcpy from the destination
DirectDraw surface and assumed the source bits matched. They don't
when the save was made under a different renderer than the current
one: HW mode squares non-square assets in `LegoImage::Read` (e.g.
128x32 -> 128x128 via row duplication), SW mode keeps the original
dimensions, and `ReadNamedTexture` always loads with `p_square=0`,
so saved bits keep whatever size they had at save time. SW save
loaded under HW caused an OOB read in `LoadBits`; HW save loaded
under SW silently truncated the source and rendered a distorted
texture.
Add `LegoImage::Resize(width, height)` (nearest-neighbor, handles
both up- and down-scale) and call it in `LoadFromNamedTexture` to
match the runtime `LegoTextureInfo` surface dimensions before
binding. Save format unchanged; `LoadBits` signature unchanged.
Square textures and matching-mode loads short-circuit on the
fast-path.
* ci: bump Android SDL3 download + Xbox One generator for VS 18
- Android: SDL3's `build-release.py` started requiring `download`
before `android` so it can fetch the new gameinput dependency.
(build-release.py is technically internal SDL tooling; longer-term
we may want to invoke a different SDL3 build entry point.)
- Xbox One: windows-latest now ships VS 18, so the
`Visual Studio 17 2022` generator can no longer find a VS install.
Bump to `Visual Studio 18 2026`.
* BETA matches for LegoEdge and related
* Some progress on CheckIntersections
* Cleanup
* Fix duplicate offset
---------
Co-authored-by: jonschz <jonschz@users.noreply.github.com>
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
* Clear unknowns in `LegoAnimPresenter`, `LegoLocomotionAnimPresenter` and `LegoHideAnimPresenter`
* Clear visibility unknowns in animation presenters
---------
Co-authored-by: Florian Kaiser <mail@floriankaiser.org>
Co-authored-by: Christian Semmler <mail@csemmler.com>
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, -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
Plug all leaks when moving around in the Information Center.
This does not include:
- loading a save game
- starting a new game
- selecting a LEGO character and enter the world
- launching a paper plane on the observation deck
* beta match LegoLOD, part 1
* Fix name collision for Ghidra
* More LegoLOD matches
* LegoMesh and LegoColor matches
* Various matches
* 73 % beta match on LegoLOD::Read
* Fix LEGO1 regressions, improve match
* 70.93 % on LEGO1
* 72.85 %, stack too small now
* Cleanup
* Cleanup
---------
Co-authored-by: jonschz <jonschz@users.noreply.github.com>
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
* Clear unknowns in `LegoAnimPresenter` and related classes
* Update LEGO1/lego/legoomni/include/legoanimpresenter.h
---------
Co-authored-by: Christian Semmler <mail@csemmler.com>