Merge branch 'master' into flic

This commit is contained in:
Christian Semmler 2024-02-23 18:37:46 -05:00
commit 17713d2791
493 changed files with 18544 additions and 5642 deletions

View File

@ -30,6 +30,7 @@ QualifierOrder:
- const
- volatile
- type
RemoveSemicolon: true
SpaceAfterCStyleCast: true
TabWidth: 4
UseTab: ForContinuationAndIndentation

6
.clang-tidy Normal file
View File

@ -0,0 +1,6 @@
Checks: >
-*,
readability-braces-around-statements,
modernize-use-override
WarningsAsErrors: '-*,readability-braces-around-statements,modernize-use-override'
HeaderFilterRegex: ".*"

View File

@ -4,31 +4,23 @@ on: [push, pull_request]
jobs:
decomplint-isle:
name: 'ISLE annotations'
name: '${{ matrix.who }} annotations'
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
who:
- CONFIG
- ISLE
- LEGO1
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Install python libraries
run: |
pip install -r tools/requirements.txt
python -m pip install -r tools/requirements.txt
- name: Run decomplint.py
run: |
python3 tools/decomplint/decomplint.py ISLE --module ISLE --warnfail
decomplint-lego1:
name: 'LEGO1 annotations'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install python libraries
run: |
pip install -r tools/requirements.txt
- name: Run decomplint.py
run: |
python3 tools/decomplint/decomplint.py LEGO1 --module LEGO1 --warnfail
tools/decomplint/decomplint.py ${{ matrix.who }} --module ${{ matrix.who }} --warnfail

View File

@ -3,6 +3,10 @@ name: Build
on: [push, pull_request]
jobs:
fetch-deps:
name: Download original binaries
uses: ./.github/workflows/legobin.yml
build-current-toolchain:
name: 'Current ${{ matrix.toolchain.name }}'
runs-on: windows-latest
@ -14,18 +18,20 @@ jobs:
matrix:
toolchain:
- { name: 'MSVC', shell: 'sh', setup-cmake: true, setup-ninja: true, setup-msvc: true }
- { name: 'msys2 mingw32', shell: 'msys2 {0}', setup-msys2: true }
- { name: 'msys2 mingw32', shell: 'msys2 {0}', msystem: mingw32, msys-env: mingw-w64-i686, clang-tidy: true, werror: true }
- { name: 'msys2 clang32', shell: 'msys2 {0}', msystem: clang32, msys-env: mingw-w64-clang-i686, clang-tidy: true, werror: true, no-dx5-libs: true }
steps:
- name: Set up MSYS2
if: matrix.toolchain.setup-msys2
if: ${{ !!matrix.toolchain.msystem }}
uses: msys2/setup-msys2@v2
with:
msystem: mingw32
msystem: ${{ matrix.toolchain.msystem }}
install: >-
mingw-w64-i686-cc
mingw-w64-i686-cmake
mingw-w64-i686-ninja
${{ matrix.toolchain.msys-env }}-cc
${{ matrix.toolchain.msys-env }}-cmake
${{ matrix.toolchain.msys-env }}-ninja
${{ matrix.toolchain.msys-env }}-clang-tools-extra
- name: Setup cmake
if: matrix.toolchain.setup-cmake
@ -41,21 +47,26 @@ jobs:
with:
arch: amd64_x86 # Use the 64-bit x64-native cross tools to build 32-bit x86 code
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Build
run: |
cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -GNinja -Werror=dev
cmake --build build
cmake -S . -B build -GNinja \
-DCMAKE_BUILD_TYPE=Debug \
-DISLE_USE_DX5_LIBS=${{ !matrix.toolchain.no-dx5-libs }} \
-DENABLE_CLANG_TIDY=${{ !!matrix.toolchain.clang-tidy }} \
-DISLE_WERROR=${{ !!matrix.toolchain.werror }} \
-Werror=dev
cmake --build build -- -k0
build:
name: 'MSVC 4.20'
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
repository: 'itsmattkc/msvc420'
path: msvc420
@ -64,11 +75,11 @@ jobs:
uses: jwlawson/actions-setup-cmake@v1.13
with:
# Use minimum supported version
cmake-version: '3.13.x'
cmake-version: '3.15.x'
- name: Patch MSVC 4.2
run: |
python tools/patch_c2.py msvc420/bin/C2.EXE
tools/patch_c2.py msvc420/bin/C2.EXE
- name: Build
shell: cmd
@ -82,6 +93,8 @@ jobs:
with:
name: Win32
path: |
build/CONFIG.EXE
build/CONFIG.PDB
build/ISLE.EXE
build/ISLE.PDB
build/LEGO1.DLL
@ -89,7 +102,7 @@ jobs:
compare:
name: 'Compare with master'
needs: build
needs: [build, fetch-deps]
runs-on: windows-latest
steps:
- uses: actions/checkout@master
@ -103,19 +116,7 @@ jobs:
id: cache-original-binaries
uses: actions/cache/restore@v3
with:
path: legobin
key: legobin
- name: Download original island binares
if: ${{ !steps.cache-original-binaries.outputs.cache-hit }}
run: |
C:\msys64\usr\bin\wget.exe https://legoisland.org/download/ISLE.EXE --directory-prefix=legobin
C:\msys64\usr\bin\wget.exe https://legoisland.org/download/LEGO1.DLL --directory-prefix=legobin
- name: Cache original binaries
if: ${{ !steps.cache-original-binaries.outputs.cache-hit }}
uses: actions/cache/save@v3
with:
enableCrossOsArchive: true
path: legobin
key: legobin
@ -127,6 +128,7 @@ jobs:
- name: Summarize Accuracy
shell: bash
run: |
python3 tools/reccmp/reccmp.py -S CONFIGPROGRESS.SVG --svg-icon tools/reccmp/config.png -H CONFIGPROGRESS.HTML legobin/CONFIG.EXE build/CONFIG.EXE build/CONFIG.PDB . | tee CONFIGPROGRESS.TXT
python3 tools/reccmp/reccmp.py -S ISLEPROGRESS.SVG --svg-icon tools/reccmp/isle.png -H ISLEPROGRESS.HTML legobin/ISLE.EXE build/ISLE.EXE build/ISLE.PDB . | tee ISLEPROGRESS.TXT
python3 tools/reccmp/reccmp.py -S LEGO1PROGRESS.SVG -T 4252 --svg-icon tools/reccmp/lego1.png -H LEGO1PROGRESS.HTML legobin/LEGO1.DLL build/LEGO1.DLL build/LEGO1.PDB . | tee LEGO1PROGRESS.TXT
@ -134,20 +136,23 @@ jobs:
shell: bash
run: |
# Compare with current master
curl -fLSs -o ISLEPROGRESS-OLD.TXT https://github.com/isledecomp/isle/releases/download/continuous/ISLEPROGRESS.TXT
curl -fLSs -o LEGO1PROGRESS-OLD.TXT https://github.com/isledecomp/isle/releases/download/continuous/LEGO1PROGRESS.TXT
curl -fLSs -o CONFIGPROGRESS-OLD.TXT https://github.com/isledecomp/isle/releases/download/continuous/CONFIGPROGRESS.TXT || echo "" >CONFIGPROGRESS-OLD.TXT
curl -fLSs -o ISLEPROGRESS-OLD.TXT https://github.com/isledecomp/isle/releases/download/continuous/ISLEPROGRESS.TXT || echo "" >ISLEPROGRESS-OLD.TXT
curl -fLSs -o LEGO1PROGRESS-OLD.TXT https://github.com/isledecomp/isle/releases/download/continuous/LEGO1PROGRESS.TXT || echo "" >LEGO1PROGRESS-OLD.TXT
diff -u0 CONFIGPROGRESS-OLD.TXT CONFIGPROGRESS.TXT || true
diff -u0 ISLEPROGRESS-OLD.TXT ISLEPROGRESS.TXT || true
diff -u0 LEGO1PROGRESS-OLD.TXT LEGO1PROGRESS.TXT || true
- name: Test Exports
shell: bash
run: |
python3 tools/verexp/verexp.py legobin/LEGO1.DLL build/LEGO1.DLL
tools/verexp/verexp.py legobin/LEGO1.DLL build/LEGO1.DLL
- name: Check Vtables
shell: bash
run: |
python3 tools/vtable/vtable.py legobin/CONFIG.EXE build/CONFIG.EXE build/CONFIG.PDB .
python3 tools/vtable/vtable.py legobin/ISLE.EXE build/ISLE.EXE build/ISLE.PDB .
python3 tools/vtable/vtable.py legobin/LEGO1.DLL build/LEGO1.DLL build/LEGO1.PDB .
@ -156,6 +161,7 @@ jobs:
with:
name: Accuracy Report
path: |
CONFIGPROGRESS.*
ISLEPROGRESS.*
LEGO1PROGRESS.*
@ -165,7 +171,7 @@ jobs:
runs-on: ubuntu-latest
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && github.repository == 'isledecomp/isle' }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
repository: 'probonopd/uploadtool'
@ -184,10 +190,13 @@ jobs:
UPLOAD_KEY: ${{ secrets.UPLOAD_KEY }}
run: |
./upload.sh \
build/CONFIG.EXE \
build/ISLE.EXE \
build/LEGO1.DLL \
CONFIGPROGRESS.* \
ISLEPROGRESS.* \
LEGO1PROGRESS.*
curl -X POST -F key=$UPLOAD_KEY -F 'file=@CONFIGPROGRESS.SVG' https://legoisland.org/progress/
curl -X POST -F key=$UPLOAD_KEY -F 'file=@ISLEPROGRESS.SVG' https://legoisland.org/progress/
curl -X POST -F key=$UPLOAD_KEY -F 'file=@LEGO1PROGRESS.SVG' https://legoisland.org/progress/

View File

@ -8,28 +8,27 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Run clang-format
run: |
find LEGO1 ISLE -iname '*.h' -o -iname '*.cpp' | xargs \
find CONFIG LEGO1 ISLE -iname '*.h' -o -iname '*.cpp' | xargs \
pipx run "clang-format>=17,<18" \
--Werror \
--dry-run \
--style=file \
-i
git diff --exit-code
python-format:
name: 'Python'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Install python libraries
shell: bash
run: |
pip install black pylint pytest -r tools/requirements.txt
pip install black==23.* pylint==3.* pytest==7.* -r tools/requirements.txt
- name: Run pylint and black
shell: bash

32
.github/workflows/legobin.yml vendored Normal file
View File

@ -0,0 +1,32 @@
name: Download legobin
on:
workflow_call:
jobs:
fetch:
runs-on: ubuntu-latest
steps:
- name: Restore cached original binaries
id: cache-original-binaries
uses: actions/cache/restore@v3
with:
enableCrossOsArchive: true
path: legobin
key: legobin
- name: Download original island binaries
if: ${{ !steps.cache-original-binaries.outputs.cache-hit }}
run: |
wget https://legoisland.org/download/CONFIG.EXE --directory-prefix=legobin
wget https://legoisland.org/download/ISLE.EXE --directory-prefix=legobin
wget https://legoisland.org/download/LEGO1.DLL --directory-prefix=legobin
- name: Cache original binaries
if: ${{ !steps.cache-original-binaries.outputs.cache-hit }}
uses: actions/cache/save@v3
with:
enableCrossOsArchive: true
path: legobin
key: legobin

View File

@ -8,7 +8,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Install LLVM and Clang
uses: KyleMayes/install-llvm-action@v1

View File

@ -3,12 +3,25 @@ name: Test
on: [push, pull_request]
jobs:
fetch-deps:
name: Download original binaries
uses: ./.github/workflows/legobin.yml
pytest-win:
name: 'Python Windows'
runs-on: windows-latest
needs: fetch-deps
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Restore cached original binaries
id: cache-original-binaries
uses: actions/cache/restore@v3
with:
enableCrossOsArchive: true
path: legobin
key: legobin
- name: Install python libraries
shell: bash
@ -18,14 +31,23 @@ jobs:
- name: Run python unit tests (Windows)
shell: bash
run: |
pytest tools/isledecomp
pytest tools/isledecomp --lego1=legobin/LEGO1.DLL
pytest-ubuntu:
name: 'Python Linux'
runs-on: ubuntu-latest
needs: fetch-deps
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Restore cached original binaries
id: cache-original-binaries
uses: actions/cache/restore@v3
with:
enableCrossOsArchive: true
path: legobin
key: legobin
- name: Install python libraries
shell: bash
@ -35,4 +57,4 @@ jobs:
- name: Run python unit tests (Ubuntu)
shell: bash
run: |
pytest tools/isledecomp
pytest tools/isledecomp --lego1=legobin/LEGO1.DLL

View File

@ -1,7 +1,22 @@
cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
cmake_minimum_required(VERSION 3.15 FATAL_ERROR)
# MSVC runtime library flags are selected by an abstraction
cmake_policy(SET CMP0091 NEW)
project(isle CXX)
include(CheckCXXSourceCompiles)
include(CMakeDependentOption)
include(CMakePushCheckState)
set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)
option(ENABLE_CLANG_TIDY "Enable clang-tidy")
if (ENABLE_CLANG_TIDY)
find_program(CLANG_TIDY_BIN NAMES "clang-tidy")
set(CMAKE_C_CLANG_TIDY "${CLANG_TIDY_BIN}")
set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_BIN}")
endif()
math(EXPR bits "8 * ${CMAKE_SIZEOF_VOID_P}")
message(STATUS "Building ${bits}-bit LEGO Island")
if (NOT bits EQUAL 32)
@ -16,11 +31,239 @@ if (MSVC)
endif()
endif()
set(lego1_targets)
macro(register_lego1_target __target)
list(APPEND lego1_targets ${__target})
endmacro()
function(add_cxx_warning WARNING)
if(ISLE_WERROR)
set(compiler_option "-Werror=${WARNING}")
else()
set(compiler_option "-W${WARNING}")
endif()
string(MAKE_C_IDENTIFIER "COMPILER_SUPPORTS${compiler_option}" varname)
cmake_push_check_state(RESET)
set(CMAKE_REQUIRED_FLAGS "${compiler_option} ")
if(MSVC)
string(APPEND CMAKE_REQUIRED_FLAGS "/WX")
else()
string(APPEND CMAKE_REQUIRED_FLAGS "-Werror")
endif()
check_cxx_source_compiles("int main() { return 0; }" ${varname})
cmake_pop_check_state()
if(${varname})
add_compile_options(${compiler_option})
endif()
endfunction()
message(STATUS "MSVC for decompilation: ${MSVC_FOR_DECOMP}")
option(ISLE_WERROR "Treat warnings as errors" OFF)
option(ISLE_BUILD_APP "Build ISLE.EXE application" ON)
cmake_dependent_option(ISLE_BUILD_CONFIG "Build CONFIG.EXE application" ON "NOT MINGW" OFF)
option(ISLE_USE_SMARTHEAP "Build with SmartHeap" ${MSVC_FOR_DECOMP})
option(ISLE_USE_DX5 "Build with internal DirectX 5 SDK" ON)
cmake_dependent_option(ISLE_USE_DX5_LIBS "Build with internal DirectX 5 SDK Libraries" ON ISLE_USE_DX5 OFF)
add_cxx_warning(parentheses)
add_library(DirectX5::DirectX5 INTERFACE IMPORTED)
target_include_directories(DirectX5::DirectX5 INTERFACE "${CMAKE_SOURCE_DIR}/3rdparty/dx5/inc")
if(ISLE_USE_DX5_LIBS)
target_link_directories(DirectX5::DirectX5 INTERFACE "${CMAKE_SOURCE_DIR}/3rdparty/dx5/lib")
endif()
add_library(Smacker::Smacker STATIC IMPORTED)
set_property(TARGET Smacker::Smacker PROPERTY IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/3rdparty/smacker/smack.lib")
set_property(TARGET Smacker::Smacker PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/3rdparty/smacker")
add_library(FLIC::FLIC STATIC IMPORTED)
set_property(TARGET FLIC::FLIC PROPERTY IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/3rdparty/flic/flic.lib")
set_property(TARGET FLIC::FLIC PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/3rdparty/flic")
add_library(Vec::Vec INTERFACE IMPORTED)
target_include_directories(Vec::Vec INTERFACE "${CMAKE_SOURCE_DIR}/3rdparty/vec")
add_library(SmartHeap::SmartHeap STATIC IMPORTED)
set_property(TARGET SmartHeap::SmartHeap PROPERTY IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/3rdparty/smartheap/SHLW32MT.LIB")
set_property(TARGET SmartHeap::SmartHeap PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/3rdparty/smartheap")
set_property(TARGET SmartHeap::SmartHeap PROPERTY INTERFACE_COMPILE_OPTIONS "/FI${CMAKE_SOURCE_DIR}/3rdparty/smartheap/SMRTHEAP.HPP")
add_library(tglrl STATIC
LEGO1/tgl/d3drm/camera.cpp
LEGO1/tgl/d3drm/device.cpp
LEGO1/tgl/d3drm/group.cpp
LEGO1/tgl/d3drm/light.cpp
LEGO1/tgl/d3drm/mesh.cpp
LEGO1/tgl/d3drm/renderer.cpp
LEGO1/tgl/d3drm/texture.cpp
LEGO1/tgl/d3drm/unk.cpp
LEGO1/tgl/d3drm/view.cpp
)
register_lego1_target(tglrl)
set_property(TARGET tglrl PROPERTY ARCHIVE_OUTPUT_NAME "tglrl40$<$<CONFIG:Debug>:d>")
target_include_directories(tglrl PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1" "${CMAKE_SOURCE_DIR}/util")
target_link_libraries(tglrl PRIVATE d3drm)
add_library(realtime STATIC
LEGO1/realtime/matrix.cpp
LEGO1/realtime/orientableroi.cpp
LEGO1/realtime/realtime.cpp
LEGO1/realtime/realtimeview.cpp
LEGO1/realtime/vector.cpp
)
register_lego1_target(realtime)
set_property(TARGET realtime PROPERTY ARCHIVE_OUTPUT_NAME "realtime$<$<CONFIG:Debug>:d>")
target_include_directories(realtime PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1" "${CMAKE_SOURCE_DIR}/util")
target_link_libraries(realtime PRIVATE Vec::Vec)
add_library(viewmanager STATIC
LEGO1/viewmanager/viewlodlist.cpp
LEGO1/viewmanager/viewmanager.cpp
LEGO1/viewmanager/viewroi.cpp
)
register_lego1_target(viewmanager)
set_property(TARGET viewmanager PROPERTY ARCHIVE_OUTPUT_NAME "viewmanager$<$<CONFIG:Debug>:d>")
target_include_directories(viewmanager PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1" "${CMAKE_SOURCE_DIR}/util")
target_link_libraries(viewmanager PRIVATE Vec::Vec)
add_library(mxdirectx STATIC
LEGO1/mxdirectx/mxdirect3d.cpp
LEGO1/mxdirectx/mxdirectdraw.cpp
)
register_lego1_target(mxdirectx)
set_property(TARGET mxdirectx PROPERTY ARCHIVE_OUTPUT_NAME "MxDirectX$<$<CONFIG:Debug>:d>")
target_include_directories(mxdirectx PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1" "${CMAKE_SOURCE_DIR}/util")
target_link_libraries(mxdirectx PRIVATE ddraw)
add_library(roi STATIC
LEGO1/lego/sources/roi/legoroi.cpp
)
register_lego1_target(roi)
set_property(TARGET roi PROPERTY ARCHIVE_OUTPUT_NAME "roi$<$<CONFIG:Debug>:d>")
target_include_directories(roi PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1" "${CMAKE_SOURCE_DIR}/LEGO1/lego/sources" "${CMAKE_SOURCE_DIR}/util")
target_link_libraries(roi PRIVATE)
add_library(anim STATIC
LEGO1/lego/sources/anim/legoanim.cpp
)
register_lego1_target(anim)
set_property(TARGET anim PROPERTY ARCHIVE_OUTPUT_NAME "anim$<$<CONFIG:Debug>:d>")
target_include_directories(anim PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1/omni/include" "${CMAKE_SOURCE_DIR}/LEGO1" "${CMAKE_SOURCE_DIR}/LEGO1/lego/sources" "${CMAKE_SOURCE_DIR}/util")
target_link_libraries(anim PRIVATE)
add_library(misc STATIC
LEGO1/lego/sources/misc/legocontainer.cpp
LEGO1/lego/sources/misc/legoimage.cpp
LEGO1/lego/sources/misc/legostorage.cpp
LEGO1/lego/sources/misc/legotexture.cpp
LEGO1/lego/sources/misc/legotree.cpp
)
register_lego1_target(misc)
set_property(TARGET misc PROPERTY ARCHIVE_OUTPUT_NAME "misc$<$<CONFIG:Debug>:d>")
target_include_directories(misc PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1/omni/include" "${CMAKE_SOURCE_DIR}/LEGO1" "${CMAKE_SOURCE_DIR}/LEGO1/lego/sources" "${CMAKE_SOURCE_DIR}/util")
target_link_libraries(misc PRIVATE)
add_library(3dmanager STATIC
LEGO1/lego/sources/3dmanager/lego3dmanager.cpp
LEGO1/lego/sources/3dmanager/lego3dview.cpp
LEGO1/lego/sources/3dmanager/legoview1.cpp
LEGO1/lego/sources/3dmanager/tglsurface.cpp
)
register_lego1_target(3dmanager)
set_property(TARGET 3dmanager PROPERTY ARCHIVE_OUTPUT_NAME "3dmanager$<$<CONFIG:Debug>:d>")
target_include_directories(3dmanager PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1" "${CMAKE_SOURCE_DIR}/util")
target_link_libraries(3dmanager PRIVATE Vec::Vec)
add_library(omni STATIC
LEGO1/omni/src/action/mxdsaction.cpp
LEGO1/omni/src/action/mxdsanim.cpp
LEGO1/omni/src/action/mxdsevent.cpp
LEGO1/omni/src/action/mxdsmediaaction.cpp
LEGO1/omni/src/action/mxdsmultiaction.cpp
LEGO1/omni/src/action/mxdsobjectaction.cpp
LEGO1/omni/src/action/mxdsobject.cpp
LEGO1/omni/src/action/mxdsparallelaction.cpp
LEGO1/omni/src/action/mxdsselectaction.cpp
LEGO1/omni/src/action/mxdsserialaction.cpp
LEGO1/omni/src/action/mxdssound.cpp
LEGO1/omni/src/action/mxdsstill.cpp
LEGO1/omni/src/action/mxdsstreamingaction.cpp
LEGO1/omni/src/audio/mxaudiomanager.cpp
LEGO1/omni/src/audio/mxaudiopresenter.cpp
LEGO1/omni/src/audio/mxloopingmidipresenter.cpp
LEGO1/omni/src/audio/mxmidipresenter.cpp
LEGO1/omni/src/audio/mxmusicmanager.cpp
LEGO1/omni/src/audio/mxmusicpresenter.cpp
LEGO1/omni/src/audio/mxsoundmanager.cpp
LEGO1/omni/src/audio/mxsoundpresenter.cpp
LEGO1/omni/src/audio/mxwavepresenter.cpp
LEGO1/omni/src/common/mxatomidcounter.cpp
LEGO1/omni/src/common/mxatomid.cpp
LEGO1/omni/src/common/mxcompositepresenter.cpp
LEGO1/omni/src/common/mxcore.cpp
LEGO1/omni/src/common/mxmediamanager.cpp
LEGO1/omni/src/common/mxmediapresenter.cpp
LEGO1/omni/src/common/mxobjectfactory.cpp
LEGO1/omni/src/common/mxpresenter.cpp
LEGO1/omni/src/common/mxstring.cpp
LEGO1/omni/src/common/mxticklemanager.cpp
LEGO1/omni/src/common/mxtimer.cpp
LEGO1/omni/src/common/mxutil.cpp
LEGO1/omni/src/common/mxvariable.cpp
LEGO1/omni/src/common/mxvariabletable.cpp
LEGO1/omni/src/entity/mxentity.cpp
LEGO1/omni/src/event/mxeventmanager.cpp
LEGO1/omni/src/event/mxeventpresenter.cpp
LEGO1/omni/src/main/mxomni.cpp
LEGO1/omni/src/main/mxomnicreateflags.cpp
LEGO1/omni/src/main/mxomnicreateparam.cpp
LEGO1/omni/src/notify/mxactionnotificationparam.cpp
LEGO1/omni/src/notify/mxnotificationmanager.cpp
LEGO1/omni/src/notify/mxnotificationparam.cpp
LEGO1/omni/src/stream/mxdiskstreamcontroller.cpp
LEGO1/omni/src/stream/mxdiskstreamprovider.cpp
LEGO1/omni/src/stream/mxdsbuffer.cpp
LEGO1/omni/src/stream/mxdschunk.cpp
LEGO1/omni/src/stream/mxdsfile.cpp
LEGO1/omni/src/stream/mxdssource.cpp
LEGO1/omni/src/stream/mxdssubscriber.cpp
LEGO1/omni/src/stream/mxioinfo.cpp
LEGO1/omni/src/stream/mxramstreamcontroller.cpp
LEGO1/omni/src/stream/mxramstreamprovider.cpp
LEGO1/omni/src/stream/mxstreamchunk.cpp
LEGO1/omni/src/stream/mxstreamcontroller.cpp
LEGO1/omni/src/stream/mxstreamer.cpp
LEGO1/omni/src/stream/mxstreamlist.cpp
LEGO1/omni/src/stream/mxstreamprovider.cpp
LEGO1/omni/src/system/mxautolocker.cpp
LEGO1/omni/src/system/mxcriticalsection.cpp
LEGO1/omni/src/system/mxscheduler.cpp
LEGO1/omni/src/system/mxsemaphore.cpp
LEGO1/omni/src/system/mxthread.cpp
LEGO1/omni/src/video/mxbitmap.cpp
LEGO1/omni/src/video/mxdisplaysurface.cpp
LEGO1/omni/src/video/mxflcpresenter.cpp
LEGO1/omni/src/video/mxloopingflcpresenter.cpp
LEGO1/omni/src/video/mxloopingsmkpresenter.cpp
LEGO1/omni/src/video/mxpalette.cpp
LEGO1/omni/src/video/mxregion.cpp
LEGO1/omni/src/video/mxregioncursor.cpp
LEGO1/omni/src/video/mxsmack.cpp
LEGO1/omni/src/video/mxsmkpresenter.cpp
LEGO1/omni/src/video/mxstillpresenter.cpp
LEGO1/omni/src/video/mxvideomanager.cpp
LEGO1/omni/src/video/mxvideoparam.cpp
LEGO1/omni/src/video/mxvideoparamflags.cpp
LEGO1/omni/src/video/mxvideopresenter.cpp
)
register_lego1_target(omni)
set_property(TARGET omni PROPERTY ARCHIVE_OUTPUT_NAME "omni$<$<CONFIG:Debug>:d>")
target_include_directories(omni PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1/omni/include" "${CMAKE_SOURCE_DIR}/LEGO1" "${CMAKE_SOURCE_DIR}/util")
target_link_libraries(omni PRIVATE dsound winmm FLIC::FLIC Smacker::Smacker)
add_library(lego1 SHARED
LEGO1/define.cpp
@ -36,6 +279,8 @@ add_library(lego1 SHARED
LEGO1/lego/legoomni/src/audio/legocachesound.cpp
LEGO1/lego/legoomni/src/audio/legoloadcachesoundpresenter.cpp
LEGO1/lego/legoomni/src/audio/legosoundmanager.cpp
LEGO1/lego/legoomni/src/audio/legounknown100d5778.cpp
LEGO1/lego/legoomni/src/audio/legounknown100d6b4c.cpp
LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp
LEGO1/lego/legoomni/src/build/buildingentity.cpp
LEGO1/lego/legoomni/src/build/dunebuggy.cpp
@ -47,7 +292,6 @@ add_library(lego1 SHARED
LEGO1/lego/legoomni/src/build/legovehiclebuildstate.cpp
LEGO1/lego/legoomni/src/build/racecar.cpp
LEGO1/lego/legoomni/src/common/animstate.cpp
LEGO1/lego/legoomni/src/common/gifmanager.cpp
LEGO1/lego/legoomni/src/common/legoactioncontrolpresenter.cpp
LEGO1/lego/legoomni/src/common/legobackgroundcolor.cpp
LEGO1/lego/legoomni/src/common/legofullscreenmovie.cpp
@ -55,9 +299,10 @@ add_library(lego1 SHARED
LEGO1/lego/legoomni/src/common/legoobjectfactory.cpp
LEGO1/lego/legoomni/src/common/legoplantmanager.cpp
LEGO1/lego/legoomni/src/common/legostate.cpp
LEGO1/lego/legoomni/src/common/legostream.cpp
LEGO1/lego/legoomni/src/common/legotextureinfo.cpp
LEGO1/lego/legoomni/src/common/legounksavedatawriter.cpp
LEGO1/lego/legoomni/src/common/legoutil.cpp
LEGO1/lego/legoomni/src/common/legovariables.cpp
LEGO1/lego/legoomni/src/common/mxcompositemediapresenter.cpp
LEGO1/lego/legoomni/src/control/legocontrolmanager.cpp
LEGO1/lego/legoomni/src/control/mxcontrolpresenter.cpp
@ -144,153 +389,37 @@ add_library(lego1 SHARED
LEGO1/lego/legoomni/src/video/legotexturepresenter.cpp
LEGO1/lego/legoomni/src/video/legovideomanager.cpp
LEGO1/lego/legoomni/src/video/mxtransitionmanager.cpp
LEGO1/lego/sources/3dmanager/lego3dmanager.cpp
LEGO1/lego/sources/3dmanager/lego3dview.cpp
LEGO1/lego/sources/3dmanager/legoview1.cpp
LEGO1/lego/sources/3dmanager/tglsurface.cpp
LEGO1/lego/sources/roi/legoroi.cpp
LEGO1/main.cpp
LEGO1/mxdirectx/mxdirect3d.cpp
LEGO1/mxdirectx/mxdirectdraw.cpp
LEGO1/mxgeometry/mxgeometry3d.cpp
LEGO1/mxgeometry/mxmatrix.cpp
LEGO1/omni/src/action/mxdsaction.cpp
LEGO1/omni/src/action/mxdsanim.cpp
LEGO1/omni/src/action/mxdsevent.cpp
LEGO1/omni/src/action/mxdsmediaaction.cpp
LEGO1/omni/src/action/mxdsmultiaction.cpp
LEGO1/omni/src/action/mxdsobjectaction.cpp
LEGO1/omni/src/action/mxdsobject.cpp
LEGO1/omni/src/action/mxdsparallelaction.cpp
LEGO1/omni/src/action/mxdsselectaction.cpp
LEGO1/omni/src/action/mxdsserialaction.cpp
LEGO1/omni/src/action/mxdssound.cpp
LEGO1/omni/src/action/mxdsstill.cpp
LEGO1/omni/src/action/mxdsstreamingaction.cpp
LEGO1/omni/src/audio/mxaudiomanager.cpp
LEGO1/omni/src/audio/mxaudiopresenter.cpp
LEGO1/omni/src/audio/mxloopingmidipresenter.cpp
LEGO1/omni/src/audio/mxmidipresenter.cpp
LEGO1/omni/src/audio/mxmusicmanager.cpp
LEGO1/omni/src/audio/mxmusicpresenter.cpp
LEGO1/omni/src/audio/mxsoundmanager.cpp
LEGO1/omni/src/audio/mxsoundpresenter.cpp
LEGO1/omni/src/audio/mxwavepresenter.cpp
LEGO1/omni/src/common/mxatomidcounter.cpp
LEGO1/omni/src/common/mxatomid.cpp
LEGO1/omni/src/common/mxcompositepresenter.cpp
LEGO1/omni/src/common/mxcore.cpp
LEGO1/omni/src/common/mxmediamanager.cpp
LEGO1/omni/src/common/mxmediapresenter.cpp
LEGO1/omni/src/common/mxobjectfactory.cpp
LEGO1/omni/src/common/mxpresenter.cpp
LEGO1/omni/src/common/mxstring.cpp
LEGO1/omni/src/common/mxticklemanager.cpp
LEGO1/omni/src/common/mxtimer.cpp
LEGO1/omni/src/common/mxutil.cpp
LEGO1/omni/src/common/mxvariable.cpp
LEGO1/omni/src/common/mxvariabletable.cpp
LEGO1/omni/src/entity/mxentity.cpp
LEGO1/omni/src/event/mxeventmanager.cpp
LEGO1/omni/src/event/mxeventpresenter.cpp
LEGO1/omni/src/main/mxomni.cpp
LEGO1/omni/src/main/mxomnicreateflags.cpp
LEGO1/omni/src/main/mxomnicreateparam.cpp
LEGO1/omni/src/notify/mxactionnotificationparam.cpp
LEGO1/omni/src/notify/mxnotificationmanager.cpp
LEGO1/omni/src/notify/mxnotificationparam.cpp
LEGO1/omni/src/notify/mxtype17notificationparam.cpp
LEGO1/omni/src/stream/mxdiskstreamcontroller.cpp
LEGO1/omni/src/stream/mxdiskstreamprovider.cpp
LEGO1/omni/src/stream/mxdsbuffer.cpp
LEGO1/omni/src/stream/mxdschunk.cpp
LEGO1/omni/src/stream/mxdsfile.cpp
LEGO1/omni/src/stream/mxdssource.cpp
LEGO1/omni/src/stream/mxdssubscriber.cpp
LEGO1/omni/src/stream/mxioinfo.cpp
LEGO1/omni/src/stream/mxramstreamcontroller.cpp
LEGO1/omni/src/stream/mxramstreamprovider.cpp
LEGO1/omni/src/stream/mxstreamchunk.cpp
LEGO1/omni/src/stream/mxstreamcontroller.cpp
LEGO1/omni/src/stream/mxstreamer.cpp
LEGO1/omni/src/stream/mxstreamlist.cpp
LEGO1/omni/src/stream/mxstreamprovider.cpp
LEGO1/omni/src/system/mxautolocker.cpp
LEGO1/omni/src/system/mxcriticalsection.cpp
LEGO1/omni/src/system/mxscheduler.cpp
LEGO1/omni/src/system/mxsemaphore.cpp
LEGO1/omni/src/system/mxthread.cpp
LEGO1/omni/src/video/mxbitmap.cpp
LEGO1/omni/src/video/mxdisplaysurface.cpp
LEGO1/omni/src/video/mxflcpresenter.cpp
LEGO1/omni/src/video/mxloopingflcpresenter.cpp
LEGO1/omni/src/video/mxloopingsmkpresenter.cpp
LEGO1/omni/src/video/mxpalette.cpp
LEGO1/omni/src/video/mxregion.cpp
LEGO1/omni/src/video/mxregioncursor.cpp
LEGO1/omni/src/video/mxsmack.cpp
LEGO1/omni/src/video/mxsmkpresenter.cpp
LEGO1/omni/src/video/mxstillpresenter.cpp
LEGO1/omni/src/video/mxvideomanager.cpp
LEGO1/omni/src/video/mxvideoparam.cpp
LEGO1/omni/src/video/mxvideoparamflags.cpp
LEGO1/omni/src/video/mxvideopresenter.cpp
LEGO1/realtime/matrix.cpp
LEGO1/realtime/orientableroi.cpp
LEGO1/realtime/realtime.cpp
LEGO1/realtime/realtimeview.cpp
LEGO1/realtime/vector.cpp
LEGO1/tgl/d3drm/camera.cpp
LEGO1/tgl/d3drm/device.cpp
LEGO1/tgl/d3drm/group.cpp
LEGO1/tgl/d3drm/light.cpp
LEGO1/tgl/d3drm/mesh.cpp
LEGO1/tgl/d3drm/renderer.cpp
LEGO1/tgl/d3drm/texture.cpp
LEGO1/tgl/d3drm/unk.cpp
LEGO1/tgl/d3drm/view.cpp
LEGO1/viewmanager/viewlodlist.cpp
LEGO1/viewmanager/viewmanager.cpp
LEGO1/viewmanager/viewroi.cpp
LEGO1/flic.cpp
)
register_lego1_target(lego1)
if (MINGW)
target_compile_definitions(lego1 PRIVATE DIRECTINPUT_VERSION=0x0500)
endif()
target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/util")
target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1")
target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1/omni/include")
target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1/lego/sources")
target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1/lego/legoomni/include")
# Additional include directories
target_include_directories(lego1 PUBLIC "${CMAKE_SOURCE_DIR}/3rdparty/vec")
target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/3rdparty/flic")
target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/3rdparty/smacker")
if (ISLE_USE_SMARTHEAP)
add_library(SmartHeap::SmartHeap STATIC IMPORTED)
set_target_properties(SmartHeap::SmartHeap PROPERTIES
IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/3rdparty/smartheap/SHLW32MT.LIB"
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/3rdparty/smartheap"
INTERFACE_COMPILE_OPTIONS "/FI${CMAKE_SOURCE_DIR}/3rdparty/smartheap/SMRTHEAP.HPP")
target_link_libraries(lego1 PRIVATE SmartHeap::SmartHeap)
if (MSVC)
target_sources(lego1 PRIVATE LEGO1/LegoOmni.def)
else()
target_sources(lego1 PRIVATE LEGO1/LegoOmni.mingw.def)
endif()
# Use internal DirectX 5 if required
if (ISLE_USE_DX5)
target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/3rdparty/dx5/inc")
target_link_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/3rdparty/dx5/lib")
endif()
target_link_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/3rdparty/smacker")
target_link_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/3rdparty/flic")
target_include_directories(lego1 PUBLIC "${CMAKE_SOURCE_DIR}/util")
target_include_directories(lego1 PUBLIC "${CMAKE_SOURCE_DIR}/LEGO1")
target_include_directories(lego1 PUBLIC "${CMAKE_SOURCE_DIR}/LEGO1/omni/include")
target_include_directories(lego1 PUBLIC "${CMAKE_SOURCE_DIR}/LEGO1/lego/sources")
target_include_directories(lego1 PUBLIC "${CMAKE_SOURCE_DIR}/LEGO1/lego/legoomni/include")
# Link libraries
target_link_libraries(lego1 PRIVATE ddraw dsound dinput dxguid winmm d3drm smack flic)
target_link_libraries(lego1 PRIVATE tglrl viewmanager realtime mxdirectx roi anim FLIC::FLIC Vec::Vec dinput dxguid misc 3dmanager omni)
if (ISLE_USE_SMARTHEAP)
foreach(tgt IN LISTS lego1_targets)
target_link_libraries(${tgt} PRIVATE SmartHeap::SmartHeap)
endforeach()
endif()
foreach(tgt IN LISTS lego1_targets)
target_link_libraries(${tgt} PRIVATE $<$<BOOL:${ISLE_USE_DX5}>:DirectX5::DirectX5>)
endforeach()
# Make sure filenames are ALL CAPS
set_property(TARGET lego1 PROPERTY OUTPUT_NAME LEGO1)
@ -301,22 +430,12 @@ if (ISLE_BUILD_APP)
add_executable(isle WIN32
ISLE/res/isle.rc
ISLE/isleapp.cpp
ISLE/define.cpp
)
target_compile_definitions(isle PRIVATE ISLE_APP)
target_include_directories(isle PRIVATE "${CMAKE_SOURCE_DIR}/util")
target_include_directories(isle PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1")
target_include_directories(isle PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1/omni/include")
target_include_directories(isle PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1/lego/sources")
target_include_directories(isle PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1/lego/legoomni/include")
# Use internal DirectX 5 if required
if (ISLE_USE_DX5)
target_include_directories(isle PRIVATE "${CMAKE_SOURCE_DIR}/3rdparty/dx5/inc")
target_link_directories(isle PRIVATE "${CMAKE_SOURCE_DIR}/3rdparty/dx5/lib")
endif()
target_link_libraries(isle PRIVATE $<$<BOOL:${ISLE_USE_DX5}>:DirectX5::DirectX5>)
if (ISLE_USE_SMARTHEAP)
target_link_libraries(isle PRIVATE SmartHeap::SmartHeap)
@ -330,26 +449,63 @@ if (ISLE_BUILD_APP)
set_property(TARGET isle PROPERTY SUFFIX ".EXE")
endif()
if (ISLE_BUILD_CONFIG)
add_executable(config WIN32
LEGO1/mxdirectx/mxdirect3d.cpp
CONFIG/config.cpp
CONFIG/ConfigCommandLineInfo.cpp
CONFIG/AboutDlg.cpp
CONFIG/MainDlg.cpp
CONFIG/detectdx5.cpp
CONFIG/StdAfx.cpp
CONFIG/res/config.rc
)
target_compile_definitions(config PRIVATE _AFXDLL MXDIRECTX_FOR_CONFIG)
target_include_directories(config PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/util" "${CMAKE_CURRENT_SOURCE_DIR}/LEGO1")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 14)
target_link_libraries(config PRIVATE DirectX5::DirectX5)
endif()
target_compile_definitions(config PRIVATE DIRECT3D_VERSION=0x500)
target_link_libraries(config PRIVATE ddraw dxguid)
set_property(TARGET config PROPERTY OUTPUT_NAME "CONFIG")
set_property(TARGET config PROPERTY SUFFIX ".EXE")
set_property(TARGET config PROPERTY MSVC_RUNTIME_LIBRARY MultiThreaded$<$<CONFIG:Debug>:Debug>DLL)
endif()
if (MSVC)
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "15")
target_compile_definitions(lego1 PRIVATE _CRT_SECURE_NO_WARNINGS)
if (ISLE_BUILD_APP)
set_property(TARGET ${lego1_targets} APPEND PROPERTY COMPILE_DEFINITIONS "_CRT_SECURE_NO_WARNINGS")
if (TARGET isle)
target_compile_definitions(isle PRIVATE "_CRT_SECURE_NO_WARNINGS")
endif()
if (TARGET config)
target_compile_definitions(config PRIVATE "_CRT_SECURE_NO_WARNINGS")
endif()
endif()
# Visual Studio 2017 version 15.7 needs "/Zc:__cplusplus" for __cplusplus
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "19.14.26428")
target_compile_options(lego1 PRIVATE "-Zc:__cplusplus")
if (ISLE_BUILD_APP)
foreach(tgt IN LISTS lego1_targets)
target_compile_options(${tgt} PRIVATE "-Zc:__cplusplus")
endforeach()
if (TARGET isle)
target_compile_options(isle PRIVATE "-Zc:__cplusplus")
endif()
if (TARGET config)
target_compile_options(config PRIVATE "-Zc:__cplusplus")
endif()
endif()
endif()
if (MSVC_FOR_DECOMP)
target_compile_definitions(lego1 PRIVATE "ENABLE_DECOMP_ASSERTS")
if (ISLE_BUILD_APP)
target_compile_definitions(isle PRIVATE "ENABLE_DECOMP_ASSERTS")
foreach(tgt IN LISTS lego1_targets)
target_compile_definitions(${tgt} PRIVATE "ENABLE_DECOMP_ASSERTS")
endforeach()
if (TARGET isle)
target_compile_definitions(isle PRIVATE "ENABLE_DECOMP_ASSERTS")
endif()
if (TARGET config)
target_compile_definitions(config PRIVATE "ENABLE_DECOMP_ASSERTS")
endif()
endif()
@ -359,8 +515,11 @@ if (MSVC_FOR_DECOMP)
# They ensure a recompilation that can be byte/instruction accurate to the original binaries.
if (ISLE_BUILD_APP)
target_compile_options(isle PRIVATE "/MT$<$<CONFIG:Debug>:d>")
target_link_options(isle PRIVATE "/OPT:REF")
endif()
target_compile_options(lego1 PRIVATE "/MT$<$<CONFIG:Debug>:d>")
# Equivalent to target_compile_options(... PRIVATE "/MT$<$<CONFIG:Debug>:d>")
set_property(TARGET lego1 ${lego1_targets} PROPERTY MSVC_RUNTIME_LIBRARY MultiThreaded$<$<CONFIG:Debug>:Debug>)
set(CMAKE_CXX_FLAGS "/W3 /GX /D \"WIN32\" /D \"_WINDOWS\"")
set(CMAKE_CXX_FLAGS_DEBUG "/Gm /Zi /Od /D \"_DEBUG\"")
@ -374,6 +533,8 @@ if (MSVC_FOR_DECOMP)
set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "/incremental:no /debug")
set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "/incremental:no")
set(CMAKE_STATIC_LINKER_FLAGS "/machine:I386")
set(CMAKE_SHARED_LINKER_FLAGS "/machine:I386")
set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "/incremental:yes /debug")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "/incremental:no")
@ -382,12 +543,17 @@ if (MSVC_FOR_DECOMP)
# Older MSVC versions don't support building in parallel.
# Force non-parallel builds of isle and lego1 by putting them in a pool with 1 available job.
if(CMAKE_CXX_COMPILER_ID VERSION_LESS 12)
set_property(GLOBAL PROPERTY JOB_POOLS "msvc_lego=1;msvc_lego1=1")
set_property(TARGET isle PROPERTY JOB_POOL_COMPILE msvc_lego)
set_property(TARGET isle PROPERTY JOB_POOL_LINK msvc_lego)
set_property(TARGET lego1 PROPERTY JOB_POOL_COMPILE msvc_lego1)
set_property(TARGET lego1 PROPERTY JOB_POOL_LINK msvc_lego1)
if (CMAKE_CXX_COMPILER_ID VERSION_LESS 12)
foreach(tgt IN LISTS lego1_targets)
set_property(GLOBAL APPEND PROPERTY JOB_POOLS "msvc_${tgt}=1;msvc_lego1=1")
set_property(TARGET ${tgt} PROPERTY JOB_POOL_COMPILE msvc_${tgt})
set_property(TARGET ${tgt} PROPERTY JOB_POOL_LINK msvc_${tgt})
endforeach()
if (TARGET isle)
set_property(GLOBAL APPEND PROPERTY JOB_POOLS "msvc_isle=1")
set_property(TARGET isle PROPERTY JOB_POOL_COMPILE msvc_isle)
set_property(TARGET isle PROPERTY JOB_POOL_LINK msvc_isle)
endif()
endif()
endif()

19
CONFIG/AboutDlg.cpp Normal file
View File

@ -0,0 +1,19 @@
#include "AboutDlg.h"
#include "decomp.h"
DECOMP_SIZE_ASSERT(CDialog, 0x60)
DECOMP_SIZE_ASSERT(CAboutDialog, 0x60)
// FUNCTION: CONFIG 0x00403c20
CAboutDialog::CAboutDialog() : CDialog(IDD)
{
}
// FUNCTION: CONFIG 0x00403d20
void CAboutDialog::DoDataExchange(CDataExchange* pDX)
{
}
BEGIN_MESSAGE_MAP(CAboutDialog, CDialog)
END_MESSAGE_MAP()

36
CONFIG/AboutDlg.h Normal file
View File

@ -0,0 +1,36 @@
#if !defined(AFX_ABOUTDLG_H)
#define AFX_ABOUTDLG_H
#include "StdAfx.h"
#include "compat.h"
#include "res/resource.h"
// VTABLE: CONFIG 0x00406308
// SIZE 0x60
class CAboutDialog : public CDialog {
public:
CAboutDialog();
enum {
IDD = IDD_ABOUT
};
protected:
void DoDataExchange(CDataExchange* pDX) override;
protected:
DECLARE_MESSAGE_MAP()
};
// SYNTHETIC: CONFIG 0x00403cb0
// CAboutDialog::`scalar deleting destructor'
// FUNCTION: CONFIG 0x00403d40
// CAboutDialog::GetMessageMap
// GLOBAL: CONFIG 0x00406100
// CAboutDialog::messageMap
// GLOBAL: CONFIG 0x00406108
// CAboutDialog::_messageEntries
#endif // !defined(AFX_ABOUTDLG_H)

View File

@ -0,0 +1,22 @@
#include "ConfigCommandLineInfo.h"
#include "decomp.h"
DECOMP_SIZE_ASSERT(CCommandLineInfo, 0x24)
DECOMP_SIZE_ASSERT(CConfigCommandLineInfo, 0x24)
// FUNCTION: CONFIG 0x00403b10
CConfigCommandLineInfo::CConfigCommandLineInfo()
{
currentConfigApp->m_run_config_dialog = FALSE;
}
// FUNCTION: CONFIG 0x00403bf0
void CConfigCommandLineInfo::ParseParam(LPCSTR pszParam, BOOL bFlag, BOOL bLast)
{
if (bFlag) {
if (lstrcmpiA(pszParam, "config") == 0) {
currentConfigApp->m_run_config_dialog = TRUE;
}
}
}

View File

@ -0,0 +1,21 @@
#if !defined(AFX_CONFIGCOMMANDLINEINFO_H)
#define AFX_CONFIGCOMMANDLINEINFO_H
#include "StdAfx.h"
#include "compat.h"
#include "config.h"
#include "decomp.h"
// VTABLE: CONFIG 0x004060e8
// SIZE 0x24
class CConfigCommandLineInfo : public CCommandLineInfo {
public:
CConfigCommandLineInfo();
void ParseParam(LPCSTR pszParam, BOOL bFlag, BOOL bLast) override;
};
// SYNTHETIC: CONFIG 0x00403b80
// CConfigCommandLineInfo::`scalar deleting destructor'
#endif // !defined(AFX_CONFIGCOMMANDLINEINFO_H)

345
CONFIG/MainDlg.cpp Normal file
View File

@ -0,0 +1,345 @@
#include "MainDlg.h"
#include "AboutDlg.h"
#include "config.h"
#include "res/resource.h"
#include <mxdirectx/mxdirect3d.h>
DECOMP_SIZE_ASSERT(CDialog, 0x60)
DECOMP_SIZE_ASSERT(CMainDialog, 0x70)
// FUNCTION: CONFIG 0x00403d50
CMainDialog::CMainDialog(CWnd* pParent) : CDialog(IDD, pParent)
{
afxCurrentWinApp;
m_icon = LoadIconA(AfxFindResourceHandle(MAKEINTRESOURCE(IDI_CONFIG), RT_GROUP_ICON), MAKEINTRESOURCE(IDI_CONFIG));
}
// FUNCTION: CONFIG 0x00403e50
void CMainDialog::DoDataExchange(CDataExchange* pDX)
{
}
BEGIN_MESSAGE_MAP(CMainDialog, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_COMMAND(IDC_CHK_FLIP_VIDEO_MEM_PAGES, OnCheckboxFlipVideoMemPages)
ON_LBN_SELCHANGE(IDC_LIST_3DDEVICES, OnList3DevicesSelectionChanged)
ON_COMMAND(IDC_RAD_PALETTE_16BIT, OnRadiobuttonPalette16bit)
ON_COMMAND(IDC_RAD_PALETTE_256, OnRadiobuttonPalette256)
ON_COMMAND(IDC_CHK_3D_VIDEO_MEMORY, OnCheckbox3DVideoMemory)
ON_WM_DESTROY() // FIXME: CONFIG.EXE calls Default
ON_COMMAND(IDABORT, OnButtonCancel)
ON_COMMAND(IDC_CHK_3DSOUND, OnCheckbox3DSound)
ON_COMMAND(IDC_RAD_MODEL_QUALITY_LOW, OnRadiobuttonModelLowQuality)
ON_COMMAND(IDC_RAD_MODEL_QUALITY_HIGH, OnRadiobuttonModelHighQuality)
ON_COMMAND(IDC_RAD_TEXTURE_QUALITY_LOW, OnRadiobuttonTextureLowQuality)
ON_COMMAND(IDC_RAD_TEXTURE_QUALITY_HIGH, OnRadiobuttonTextureHighQuality)
ON_COMMAND(IDC_CHK_JOYSTICK, OnCheckboxJoystick)
ON_COMMAND(IDC_BTN_ADVANCED, OnButtonAdvanced)
ON_COMMAND(IDC_CHK_DRAW_CURSOR, OnCheckboxDrawCursor)
ON_COMMAND(IDC_CHK_MUSIC, OnCheckboxMusic)
END_MESSAGE_MAP()
// FUNCTION: CONFIG 0x00403e80
BOOL CMainDialog::OnInitDialog()
{
CDialog::OnInitDialog();
SwitchToAdvanced(FALSE);
CMenu* system_menu = CMenu::FromHandle(::GetSystemMenu(m_hWnd, FALSE));
CString about_text;
about_text.LoadString(IDS_ABOUT);
if (system_menu) {
AppendMenuA(system_menu->m_hMenu, MF_SEPARATOR, 0, NULL);
AppendMenuA(system_menu->m_hMenu, MF_STRING, 16, (LPCTSTR) about_text);
}
SendMessage(WM_SETICON, ICON_BIG, (LPARAM) m_icon);
SendMessage(WM_SETICON, ICON_SMALL, (LPARAM) m_icon);
MxDeviceEnumerate* enumerator = currentConfigApp->m_device_enumerator;
enumerator->FUN_1009d210();
m_modified = currentConfigApp->ReadRegisterSettings();
CWnd* list_3d_devices = GetDlgItem(IDC_LIST_3DDEVICES);
int driver_i = 0;
int device_i = 0;
int selected = 0;
char device_name[256];
const list<MxDriver>& driver_list = enumerator->GetDriverList();
for (list<MxDriver>::const_iterator it_driver = driver_list.begin(); it_driver != driver_list.end(); it_driver++) {
const MxDriver& driver = *it_driver;
for (list<Direct3DDeviceInfo>::const_iterator it_device = driver.m_devices.begin();
it_device != driver.m_devices.end();
it_device++) {
const Direct3DDeviceInfo& device = *it_device;
if (&device == currentConfigApp->m_device) {
selected = device_i;
}
device_i += 1;
sprintf(
device_name,
driver_i == 0 ? "%s ( Primary Device )" : "%s ( Secondary Device )",
device.m_deviceName
);
::SendMessage(list_3d_devices->m_hWnd, LB_ADDSTRING, 0, (LPARAM) device_name);
}
driver_i += 1;
}
::SendMessage(list_3d_devices->m_hWnd, LB_SETCURSEL, selected, 0);
UpdateInterface();
return TRUE;
}
// FUNCTION: CONFIG 0x00404080
void CMainDialog::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xfff0) == 0x10) {
CAboutDialog about_dialog;
about_dialog.DoModal();
}
else {
Default();
}
}
// FUNCTION: CONFIG 0x00404150
void CMainDialog::OnPaint()
{
if (IsIconic()) {
CPaintDC painter(this);
::SendMessage(m_hWnd, WM_ICONERASEBKGND, (WPARAM) painter.m_hDC, 0);
RECT dim;
GetClientRect(&dim);
DrawIcon(
painter.m_hDC,
(dim.right - dim.left - GetSystemMetrics(SM_CXICON) + 1) / 2,
(dim.bottom - dim.top - GetSystemMetrics(SM_CYICON) + 1) / 2,
m_icon
);
}
else {
Default();
}
}
// FUNCTION: CONFIG 0x00404230
HCURSOR CMainDialog::OnQueryDragIcon()
{
return m_icon;
}
// FUNCTION: CONFIG 0x00404240
void CMainDialog::OnList3DevicesSelectionChanged()
{
MxDeviceEnumerate* device_enumerator = currentConfigApp->m_device_enumerator;
int selected = ::SendMessage(GetDlgItem(IDC_LIST_3DDEVICES)->m_hWnd, LB_GETCURSEL, 0, 0);
device_enumerator->GetDevice(selected, currentConfigApp->m_driver, currentConfigApp->m_device);
if (currentConfigApp->GetHardwareDeviceColorModel()) {
GetDlgItem(IDC_CHK_DRAW_CURSOR)->EnableWindow(TRUE);
}
else {
currentConfigApp->m_3d_video_ram = FALSE;
currentConfigApp->m_flip_surfaces = FALSE;
CheckDlgButton(IDC_CHK_3D_VIDEO_MEMORY, currentConfigApp->m_3d_video_ram);
CheckDlgButton(IDC_CHK_FLIP_VIDEO_MEM_PAGES, currentConfigApp->m_flip_surfaces);
}
m_modified = TRUE;
UpdateInterface();
}
// FUNCTION: CONFIG 0x00404320
void CMainDialog::OnCancel()
{
CDialog::OnCancel();
}
// FUNCTION: CONFIG 0x00404330
void CMainDialog::OnDestroy()
{
CDialog::Default();
}
// FUNCTION: CONFIG 0x00404340
void CMainDialog::OnButtonCancel()
{
if (m_modified) {
currentConfigApp->WriteRegisterSettings();
}
OnCancel();
}
// FUNCTION: CONFIG 0x00404360
void CMainDialog::UpdateInterface()
{
currentConfigApp->ValidateSettings();
GetDlgItem(IDC_CHK_3D_VIDEO_MEMORY)
->EnableWindow(!currentConfigApp->m_flip_surfaces && !currentConfigApp->GetHardwareDeviceColorModel());
CheckDlgButton(IDC_CHK_FLIP_VIDEO_MEM_PAGES, currentConfigApp->m_flip_surfaces);
CheckDlgButton(IDC_CHK_3D_VIDEO_MEMORY, currentConfigApp->m_3d_video_ram);
BOOL full_screen = currentConfigApp->m_full_screen;
currentConfigApp->FUN_00403810();
if (currentConfigApp->GetHardwareDeviceColorModel()) {
CheckDlgButton(IDC_CHK_DRAW_CURSOR, TRUE);
}
else {
CheckDlgButton(IDC_CHK_DRAW_CURSOR, FALSE);
currentConfigApp->m_draw_cursor = FALSE;
GetDlgItem(IDC_CHK_DRAW_CURSOR)->EnableWindow(FALSE);
}
if (full_screen) {
CheckRadioButton(
IDC_RAD_PALETTE_256,
IDC_RAD_PALETTE_16BIT,
currentConfigApp->m_display_bit_depth == 8 ? IDC_RAD_PALETTE_256 : IDC_RAD_PALETTE_16BIT
);
}
else {
CheckDlgButton(IDC_RAD_PALETTE_256, 0);
CheckDlgButton(IDC_RAD_PALETTE_16BIT, 0);
currentConfigApp->m_display_bit_depth = 0;
}
GetDlgItem(IDC_RAD_PALETTE_256)->EnableWindow(full_screen && currentConfigApp->FUN_004037a0());
GetDlgItem(IDC_RAD_PALETTE_16BIT)->EnableWindow(full_screen && currentConfigApp->FUN_004037e0());
CheckDlgButton(IDC_CHK_3DSOUND, currentConfigApp->m_3d_sound);
CheckDlgButton(IDC_CHK_DRAW_CURSOR, currentConfigApp->m_draw_cursor);
switch (currentConfigApp->m_model_quality) {
case 1:
CheckRadioButton(IDC_RAD_MODEL_QUALITY_LOW, IDC_RAD_MODEL_QUALITY_HIGH, IDC_RAD_MODEL_QUALITY_LOW);
break;
case 2:
CheckRadioButton(IDC_RAD_MODEL_QUALITY_LOW, IDC_RAD_MODEL_QUALITY_HIGH, IDC_RAD_MODEL_QUALITY_HIGH);
break;
}
CheckRadioButton(
IDC_RAD_TEXTURE_QUALITY_LOW,
IDC_RAD_TEXTURE_QUALITY_HIGH,
currentConfigApp->m_texture_quality == 0 ? IDC_RAD_TEXTURE_QUALITY_LOW : IDC_RAD_TEXTURE_QUALITY_HIGH
);
CheckDlgButton(IDC_CHK_JOYSTICK, currentConfigApp->m_use_joystick);
CheckDlgButton(IDC_CHK_MUSIC, currentConfigApp->m_music);
}
// FUNCTION: CONFIG 0x004045e0
void CMainDialog::OnCheckbox3DSound()
{
currentConfigApp->m_3d_sound = IsDlgButtonChecked(IDC_CHK_3DSOUND);
m_modified = TRUE;
UpdateInterface();
}
// FUNCTION: CONFIG 0x00404610
void CMainDialog::OnCheckbox3DVideoMemory()
{
currentConfigApp->m_3d_video_ram = IsDlgButtonChecked(IDC_CHK_3D_VIDEO_MEMORY);
m_modified = TRUE;
UpdateInterface();
}
// FUNCTION: CONFIG 0x00404640
void CMainDialog::OnRadiobuttonPalette16bit()
{
currentConfigApp->m_display_bit_depth = 16;
m_modified = TRUE;
UpdateInterface();
}
// FUNCTION: CONFIG 0x00404670
void CMainDialog::OnRadiobuttonPalette256()
{
currentConfigApp->m_display_bit_depth = 8;
m_modified = TRUE;
UpdateInterface();
}
// FUNCTION: CONFIG 0x004046a0
void CMainDialog::OnCheckboxFlipVideoMemPages()
{
currentConfigApp->m_flip_surfaces = IsDlgButtonChecked(IDC_CHK_FLIP_VIDEO_MEM_PAGES);
m_modified = TRUE;
UpdateInterface();
}
// FUNCTION: CONFIG 0x004046d0
void CMainDialog::OnRadiobuttonModelLowQuality()
{
currentConfigApp->m_model_quality = 1;
m_modified = TRUE;
UpdateInterface();
}
// FUNCTION: CONFIG 0x00404700
void CMainDialog::OnRadiobuttonModelHighQuality()
{
currentConfigApp->m_model_quality = 2;
m_modified = TRUE;
UpdateInterface();
}
// FUNCTION: CONFIG 0x00404730
void CMainDialog::OnRadiobuttonTextureLowQuality()
{
currentConfigApp->m_texture_quality = 0;
m_modified = TRUE;
UpdateInterface();
}
// FUNCTION: CONFIG 0x00404760
void CMainDialog::OnRadiobuttonTextureHighQuality()
{
currentConfigApp->m_texture_quality = 1;
m_modified = TRUE;
UpdateInterface();
}
// FUNCTION: CONFIG 0x00404790
void CMainDialog::OnCheckboxJoystick()
{
currentConfigApp->m_use_joystick = IsDlgButtonChecked(IDC_CHK_JOYSTICK);
m_modified = TRUE;
UpdateInterface();
}
// FUNCTION: CONFIG 0x004047c0
void CMainDialog::OnButtonAdvanced()
{
SwitchToAdvanced(!m_advanced);
}
// FUNCTION: CONFIG 0x004047d0
void CMainDialog::SwitchToAdvanced(BOOL p_advanced)
{
RECT dialog_rect;
RECT grp_advanced_rect;
::GetWindowRect(m_hWnd, &dialog_rect);
::GetWindowRect(GetDlgItem(IDC_GRP_ADVANCED)->m_hWnd, &grp_advanced_rect);
CWnd* button_advanced = GetDlgItem(IDC_BTN_ADVANCED);
m_advanced = p_advanced;
int height;
if (p_advanced) {
height = grp_advanced_rect.bottom - dialog_rect.top + 10;
GetDlgItem(IDC_BMP_SHARK)->EnableWindow(TRUE);
button_advanced->SetWindowText("Basic");
}
else {
height = grp_advanced_rect.top - dialog_rect.top;
GetDlgItem(IDC_BMP_SHARK)->EnableWindow(FALSE);
button_advanced->SetWindowText("Advanced");
}
SetWindowPos(&wndTop, 0, 0, dialog_rect.right - dialog_rect.left, height, SWP_NOMOVE);
}
// FUNCTION: CONFIG 0x00404890
void CMainDialog::OnCheckboxDrawCursor()
{
currentConfigApp->m_draw_cursor = IsDlgButtonChecked(IDC_CHK_DRAW_CURSOR);
m_modified = TRUE;
UpdateInterface();
}
// FUNCTION: CONFIG 0x004048c0
void CMainDialog::OnCheckboxMusic()
{
currentConfigApp->m_music = IsDlgButtonChecked(IDC_CHK_MUSIC);
m_modified = TRUE;
UpdateInterface();
}

67
CONFIG/MainDlg.h Normal file
View File

@ -0,0 +1,67 @@
#if !defined(AFX_MAINDLG_H)
#define AFX_MAINDLG_H
#include "StdAfx.h"
#include "compat.h"
#include "decomp.h"
#include "res/resource.h"
// VTABLE: CONFIG 0x004063e0
// SIZE 0x70
class CMainDialog : public CDialog {
public:
CMainDialog(CWnd* pParent);
enum {
IDD = IDD_MAIN
};
protected:
void DoDataExchange(CDataExchange* pDX) override;
void UpdateInterface();
void SwitchToAdvanced(BOOL p_advanced);
undefined m_unk0x60[4]; // 0x60
HCURSOR m_icon; // 0x64
BOOL m_modified; // 0x68
BOOL m_advanced; // 0x6c
// Implementation
protected:
BOOL OnInitDialog() override;
void OnSysCommand(UINT nID, LPARAM lParam);
void OnPaint();
HCURSOR OnQueryDragIcon();
void OnList3DevicesSelectionChanged();
void OnCancel();
void OnDestroy();
void OnButtonCancel();
void OnCheckbox3DSound();
void OnCheckbox3DVideoMemory();
void OnRadiobuttonPalette16bit();
void OnRadiobuttonPalette256();
void OnCheckboxFlipVideoMemPages();
void OnRadiobuttonModelLowQuality();
void OnRadiobuttonModelHighQuality();
void OnRadiobuttonTextureLowQuality();
void OnRadiobuttonTextureHighQuality();
void OnCheckboxJoystick();
void OnButtonAdvanced();
void OnCheckboxDrawCursor();
void OnCheckboxMusic();
DECLARE_MESSAGE_MAP()
};
// SYNTHETIC: CONFIG 0x00403de0
// CMainDialog::`scalar deleting destructor'
// FUNCTION: CONFIG 0x00403e70
// CMainDialog::GetMessageMap
// GLOBAL: CONFIG 0x00406120
// CMainDialog::messageMap
// GLOBAL: CONFIG 0x00406128
// CMainDialog::_messageEntries
#endif // !defined(AFX_MAINDLG_H)

5
CONFIG/StdAfx.cpp Normal file
View File

@ -0,0 +1,5 @@
// stdafx.cpp : source file that includes just the standard includes
// simple.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"

31
CONFIG/StdAfx.h Normal file
View File

@ -0,0 +1,31 @@
#if !defined(AFX_STDAFX_H)
#define AFX_STDAFX_H
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
#include <afxext.h> // MFC extensions
#include <afxwin.h> // MFC core and standard components
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT
#if 0
// FUNCTION: CONFIG 0x402ca0
// CObject::Serialize
// FUNCTION: CONFIG 0x402cb0
// CObject::AssertValid
// FUNCTION: CONFIG 0x402cc0
// CObject::Dump
// FUNCTION: CONFIG 0x00403c90
// CWnd::BeginModalState
// FUNCTION: CONFIG 0x00403ca0
// CWnd::EndModalState
#endif
#endif // !defined(AFX_STDAFX_H)

434
CONFIG/config.cpp Normal file
View File

@ -0,0 +1,434 @@
#include "config.h"
#include "ConfigCommandLineInfo.h"
#include "MainDlg.h"
#include "detectdx5.h"
#include <direct.h> // _chdir
#include <mxdirectx/mxdirect3d.h>
#include <process.h> // _spawnl
DECOMP_SIZE_ASSERT(CWinApp, 0xc4)
DECOMP_SIZE_ASSERT(CConfigApp, 0x108)
DECOMP_STATIC_ASSERT(offsetof(CConfigApp, m_display_bit_depth) == 0xd0)
BEGIN_MESSAGE_MAP(CConfigApp, CWinApp)
ON_COMMAND(ID_HELP, OnHelp)
END_MESSAGE_MAP()
// FUNCTION: CONFIG 0x00402c40
CConfigApp::CConfigApp()
{
}
#define MiB (1024 * 1024)
// FUNCTION: CONFIG 0x00402dc0
BOOL CConfigApp::InitInstance()
{
if (!IsLegoNotRunning()) {
return FALSE;
}
if (!DetectDirectX5()) {
AfxMessageBox(
"\"LEGO\xae Island\" is not detecting DirectX 5 or later. Please quit all other applications and try "
"again."
);
return FALSE;
}
#ifdef _AFXDLL
Enable3dControls();
#else
Enable3dControlsStatic();
#endif
CConfigCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
if (_stricmp(afxCurrentAppName, "config") == 0) {
m_run_config_dialog = TRUE;
}
m_device_enumerator = new MxDeviceEnumerate;
if (m_device_enumerator->DoEnumerate()) {
return FALSE;
}
m_driver = NULL;
m_device = NULL;
m_full_screen = TRUE;
m_wide_view_angle = TRUE;
m_use_joystick = FALSE;
m_music = TRUE;
m_flip_surfaces = FALSE;
m_3d_video_ram = FALSE;
m_joystick_index = -1;
m_display_bit_depth = 16;
MEMORYSTATUS memory_status;
memory_status.dwLength = sizeof(memory_status);
GlobalMemoryStatus(&memory_status);
if (memory_status.dwTotalPhys < 12 * MiB) {
m_3d_sound = FALSE;
m_model_quality = 0;
m_texture_quality = 1;
}
else if (memory_status.dwTotalPhys < 20 * MiB) {
m_3d_sound = FALSE;
m_model_quality = 1;
m_texture_quality = 1;
}
else {
m_model_quality = 2;
m_3d_sound = TRUE;
m_texture_quality = 1;
}
if (!m_run_config_dialog) {
ReadRegisterSettings();
ValidateSettings();
WriteRegisterSettings();
delete m_device_enumerator;
m_device_enumerator = NULL;
m_driver = NULL;
m_device = NULL;
char password[256];
ReadReg("password", password, sizeof(password));
const char* exe = _stricmp("ogel", password) == 0 ? "isled.exe" : "isle.exe";
char diskpath[1024];
if (ReadReg("diskpath", diskpath, sizeof(diskpath))) {
_chdir(diskpath);
}
_spawnl(_P_NOWAIT, exe, exe, "/diskstream", "/script", "\\lego\\scripts\\isle\\isle.si", NULL);
return FALSE;
}
CMainDialog main_dialog(NULL);
main_dialog.DoModal();
return FALSE;
}
// FUNCTION: CONFIG 0x00403100
BOOL CConfigApp::IsLegoNotRunning()
{
HWND hWnd = FindWindowA("Lego Island MainNoM App", "LEGO\xae");
if (_stricmp(afxCurrentAppName, "config") == 0 || !hWnd) {
return TRUE;
}
if (SetForegroundWindow(hWnd)) {
ShowWindow(hWnd, SW_RESTORE);
}
return FALSE;
}
// FUNCTION: CONFIG 0x004031b0
BOOL CConfigApp::WriteReg(const char* p_key, const char* p_value) const
{
HKEY hKey;
DWORD pos;
if (RegCreateKeyExA(
HKEY_LOCAL_MACHINE,
"SOFTWARE\\Mindscape\\LEGO Island",
0,
"string",
0,
KEY_READ | KEY_WRITE,
NULL,
&hKey,
&pos
) == ERROR_SUCCESS) {
if (RegSetValueExA(hKey, p_key, 0, REG_SZ, (LPBYTE) p_value, strlen(p_value)) == ERROR_SUCCESS) {
if (RegCloseKey(hKey) == ERROR_SUCCESS) {
return TRUE;
}
}
else {
RegCloseKey(hKey);
}
}
return FALSE;
}
// FUNCTION: CONFIG 0x00403240
BOOL CConfigApp::ReadReg(LPCSTR p_key, LPCSTR p_value, DWORD p_size) const
{
HKEY hKey;
DWORD valueType;
BOOL out = FALSE;
DWORD size = p_size;
if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Mindscape\\LEGO Island", 0, KEY_READ, &hKey) == ERROR_SUCCESS) {
if (RegQueryValueExA(hKey, p_key, NULL, &valueType, (LPBYTE) p_value, &size) == ERROR_SUCCESS) {
if (RegCloseKey(hKey) == ERROR_SUCCESS) {
out = TRUE;
}
}
}
return out;
}
// FUNCTION: CONFIG 0x004032b0
BOOL CConfigApp::ReadRegBool(LPCSTR p_key, BOOL* p_bool) const
{
char buffer[256];
BOOL read = ReadReg(p_key, buffer, sizeof(buffer));
if (read) {
if (strcmp("YES", buffer) == 0) {
*p_bool = TRUE;
return read;
}
if (strcmp("NO", buffer) == 0) {
*p_bool = FALSE;
return read;
}
read = FALSE;
}
return read;
}
// FUNCTION: CONFIG 0x00403380
BOOL CConfigApp::ReadRegInt(LPCSTR p_key, int* p_value) const
{
char buffer[256];
BOOL read = ReadReg(p_key, buffer, sizeof(buffer));
if (read) {
*p_value = atoi(buffer);
}
return read;
}
// FUNCTION: CONFIG 0x004033d0
BOOL CConfigApp::FUN_004033d0() const
{
/*
* BUG: should be:
* return !GetHardwareDeviceColorModel() && (m_device->m_HELDesc.dcmColorModel & D3DCOLOR_RGB);
*/
return !GetHardwareDeviceColorModel() && m_device->m_HELDesc.dcmColorModel == D3DCOLOR_RGB;
}
// FUNCTION: CONFIG 0x00403400
D3DCOLORMODEL CConfigApp::GetHardwareDeviceColorModel() const
{
return m_device->m_HWDesc.dcmColorModel;
}
// FUNCTION: CONFIG 0x00403410
BOOL CConfigApp::IsPrimaryDriver() const
{
return m_driver == &m_device_enumerator->GetDriverList().front();
}
// FUNCTION: CONFIG 0x00403430
BOOL CConfigApp::ReadRegisterSettings()
{
char buffer[256];
BOOL is_modified = FALSE;
int tmp = -1;
if (ReadReg("3D Device ID", buffer, sizeof(buffer))) {
tmp = m_device_enumerator->ParseDeviceName(buffer);
if (tmp >= 0) {
tmp = m_device_enumerator->GetDevice(tmp, m_driver, m_device);
}
}
if (tmp != 0) {
is_modified = TRUE;
m_device_enumerator->FUN_1009d210();
tmp = m_device_enumerator->FUN_1009d0d0();
m_device_enumerator->GetDevice(tmp, m_driver, m_device);
}
if (!ReadRegInt("Display Bit Depth", &m_display_bit_depth)) {
is_modified = TRUE;
}
if (!ReadRegBool("Flip Surfaces", &m_flip_surfaces)) {
is_modified = TRUE;
}
if (!ReadRegBool("Full Screen", &m_full_screen)) {
is_modified = TRUE;
}
if (!ReadRegBool("Back Buffers in Video RAM", &m_3d_video_ram)) {
is_modified = TRUE;
}
if (!ReadRegBool("Wide View Angle", &m_wide_view_angle)) {
is_modified = TRUE;
}
if (!ReadRegBool("3DSound", &m_3d_sound)) {
is_modified = TRUE;
}
if (!ReadRegBool("Draw Cursor", &m_draw_cursor)) {
is_modified = TRUE;
}
if (!ReadRegInt("Island Quality", &m_model_quality)) {
is_modified = TRUE;
}
if (!ReadRegInt("Island Texture", &m_texture_quality)) {
is_modified = TRUE;
}
if (!ReadRegBool("UseJoystick", &m_use_joystick)) {
is_modified = TRUE;
}
if (!ReadRegBool("Music", &m_music)) {
is_modified = TRUE;
}
if (!ReadRegInt("JoystickIndex", &m_joystick_index)) {
is_modified = TRUE;
}
return is_modified;
}
// FUNCTION: CONFIG 0x00403630
BOOL CConfigApp::ValidateSettings()
{
BOOL is_modified = FALSE;
if (!IsPrimaryDriver() && !m_full_screen) {
m_full_screen = TRUE;
is_modified = TRUE;
}
if (FUN_004033d0()) {
if (m_3d_video_ram) {
m_3d_video_ram = FALSE;
is_modified = TRUE;
}
if (m_flip_surfaces) {
m_flip_surfaces = FALSE;
is_modified = TRUE;
}
if (m_display_bit_depth != 16) {
m_display_bit_depth = 16;
is_modified = TRUE;
}
}
if (!GetHardwareDeviceColorModel()) {
m_draw_cursor = FALSE;
is_modified = TRUE;
}
else {
if (!m_3d_video_ram) {
m_3d_video_ram = TRUE;
is_modified = TRUE;
}
if (m_full_screen && !m_flip_surfaces) {
m_flip_surfaces = TRUE;
is_modified = TRUE;
}
}
if (m_flip_surfaces) {
if (!m_3d_video_ram) {
m_3d_video_ram = TRUE;
is_modified = TRUE;
}
if (!m_full_screen) {
m_full_screen = TRUE;
is_modified = TRUE;
}
}
if ((m_display_bit_depth != 8 && m_display_bit_depth != 16) && (m_display_bit_depth != 0 || m_full_screen)) {
m_display_bit_depth = 8;
is_modified = TRUE;
}
if (m_model_quality < 0 || m_model_quality > 2) {
m_model_quality = 1;
is_modified = TRUE;
}
if (m_texture_quality < 0 || m_texture_quality > 1) {
m_texture_quality = 0;
is_modified = TRUE;
}
return is_modified;
}
// FUNCTION: CONFIG 0x004037a0
DWORD CConfigApp::FUN_004037a0() const
{
if (FUN_004033d0()) {
return 0;
}
if (GetHardwareDeviceColorModel()) {
return 0;
}
return m_device->m_HELDesc.dwDeviceRenderBitDepth & 0x800;
}
// FUNCTION: CONFIG 0x004037e0
DWORD CConfigApp::FUN_004037e0() const
{
if (GetHardwareDeviceColorModel()) {
return m_device->m_HWDesc.dwDeviceRenderBitDepth & 0x400;
}
else {
return m_device->m_HELDesc.dwDeviceRenderBitDepth & 0x400;
}
}
// FUNCTION: CONFIG 0x00403810
BOOL CConfigApp::FUN_00403810()
{
if (m_display_bit_depth == 8) {
if (FUN_004037a0()) {
return FALSE;
}
}
if (m_display_bit_depth == 16) {
if (FUN_004037e0()) {
return FALSE;
}
}
if (FUN_004037a0()) {
m_display_bit_depth = 8;
return TRUE;
}
if (FUN_004037e0()) {
m_display_bit_depth = 16;
return TRUE;
}
m_display_bit_depth = 8;
return TRUE;
}
// FUNCTION: CONFIG 00403890
void CConfigApp::WriteRegisterSettings() const
{
char buffer[128];
#define WriteRegBool(NAME, VALUE) WriteReg(NAME, VALUE ? "YES" : "NO")
#define WriteRegInt(NAME, VALUE) \
do { \
sprintf(buffer, "%d", VALUE); \
WriteReg(NAME, buffer); \
} while (0)
m_device_enumerator->FormatDeviceName(buffer, m_driver, m_device);
WriteReg("3D Device ID", buffer);
WriteReg("3D Device Name", m_device->m_deviceName);
WriteRegInt("Display Bit Depth", m_display_bit_depth);
WriteRegBool("Flip Surfaces", m_flip_surfaces);
WriteRegBool("Full Screen", m_full_screen);
WriteRegBool("Back Buffers in Video RAM", m_3d_video_ram);
WriteRegBool("Wide View Angle", m_wide_view_angle);
WriteRegBool("3DSound", m_3d_sound);
WriteRegBool("Draw Cursor", m_draw_cursor);
WriteRegInt("Island Quality", m_model_quality);
WriteRegInt("Island Texture", m_texture_quality);
WriteRegBool("UseJoystick", m_use_joystick);
WriteRegBool("Music", m_music);
WriteRegInt("JoystickIndex", m_joystick_index);
#undef WriteRegBool
#undef WriteRegInt
}
// FUNCTION: CONFIG 0x00403a90
int CConfigApp::ExitInstance()
{
if (m_device_enumerator) {
delete m_device_enumerator;
m_device_enumerator = NULL;
}
return CWinApp::ExitInstance();
}
// GLOBAL: CONFIG 0x00408e50
CConfigApp g_theApp;

88
CONFIG/config.h Normal file
View File

@ -0,0 +1,88 @@
#if !defined(AFX_CONFIG_H)
#define AFX_CONFIG_H
#include "StdAfx.h"
#include "compat.h"
#include "decomp.h"
#include <d3d.h>
class MxDeviceEnumerate;
struct Direct3DDeviceInfo;
struct MxDriver;
#define currentConfigApp ((CConfigApp*) afxCurrentWinApp)
// VTABLE: CONFIG 0x00406040
// SIZE 0x108
class CConfigApp : public CWinApp {
public:
CConfigApp();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CConfigApp)
public:
BOOL InitInstance() override;
int ExitInstance() override;
//}}AFX_VIRTUAL
// Implementation
BOOL WriteReg(const char* p_key, const char* p_value) const;
BOOL ReadReg(LPCSTR p_key, LPCSTR p_value, DWORD p_size) const;
BOOL ReadRegBool(LPCSTR p_key, BOOL* p_bool) const;
BOOL ReadRegInt(LPCSTR p_key, int* p_value) const;
BOOL FUN_004033d0() const;
D3DCOLORMODEL GetHardwareDeviceColorModel() const;
BOOL IsPrimaryDriver() const;
BOOL ReadRegisterSettings();
BOOL ValidateSettings();
DWORD FUN_004037a0() const;
DWORD FUN_004037e0() const;
BOOL FUN_00403810();
void CConfigApp::WriteRegisterSettings() const;
//{{AFX_MSG(CConfigApp)
// NOTE - the ClassWizard will add and remove member functions here.
// DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
private:
BOOL IsLegoNotRunning();
public:
MxDeviceEnumerate* m_device_enumerator; // 0x0c4
MxDriver* m_driver; // 0x0c8
Direct3DDeviceInfo* m_device; // 0x0cc
int m_display_bit_depth; // 0x0d0
BOOL m_flip_surfaces; // 0x0d4
BOOL m_full_screen; // 0x0d8
BOOL m_3d_video_ram; // 0x0dc
BOOL m_wide_view_angle; // 0x0e0
BOOL m_3d_sound; // 0x0e4
BOOL m_draw_cursor; // 0x0e8
BOOL m_use_joystick; // 0x0ec
int m_joystick_index; // 0x0f0
BOOL m_run_config_dialog; // 0x0f4
int m_model_quality; // 0x0f8
int m_texture_quality; // 0x0fc
undefined m_unk0x100[4]; // 0x100
BOOL m_music; // 0x104
};
// SYNTHETIC: CONFIG 0x00402cd0
// CConfigApp::`scalar deleting destructor'
// FUNCTION: CONFIG 0x402c30
// CConfigApp::GetMessageMap
// GLOBAL: CONFIG 0x406008
// CConfigApp::messageMap
// GLOBAL: CONFIG 0x406010
// CConfigApp::_messageEntries
#endif // !defined(AFX_CONFIG_H)

142
CONFIG/detectdx5.cpp Normal file
View File

@ -0,0 +1,142 @@
#include "detectdx5.h"
#include <ddraw.h>
#include <dinput.h>
typedef HRESULT WINAPI DirectDrawCreate_fn(GUID FAR* lpGUID, LPDIRECTDRAW FAR* lplpDD, IUnknown FAR* pUnkOuter);
typedef HRESULT WINAPI
DirectInputCreateA_fn(HINSTANCE hinst, DWORD dwVersion, LPDIRECTINPUTA* ppDI, LPUNKNOWN punkOuter);
// FUNCTION: CONFIG 0x004048f0
BOOL DetectDirectX5()
{
unsigned int version;
BOOL found;
DetectDirectX(&version, &found);
return version >= 0x500;
}
// FUNCTION: CONFIG 0x00404920
void DetectDirectX(unsigned int* p_version, BOOL* p_found)
{
OSVERSIONINFOA os_version;
os_version.dwOSVersionInfoSize = sizeof(os_version);
if (!GetVersionExA(&os_version)) {
*p_version = 0;
*p_found = 0;
return;
}
if (os_version.dwPlatformId == 2) {
*p_found = 2;
if (os_version.dwMajorVersion < 4) {
*p_found = 0;
return;
}
if (os_version.dwMajorVersion != 4) {
*p_version = 0x501;
return;
}
*p_version = 0x200;
HMODULE dinput_module = LoadLibraryA("DINPUT.DLL");
if (!dinput_module) {
OutputDebugStringA("Couldn't LoadLibrary DInput\r\n");
return;
}
DirectInputCreateA_fn* func_DirectInputCreateA =
(DirectInputCreateA_fn*) GetProcAddress(dinput_module, "DirectInputCreateA");
FreeLibrary(dinput_module);
if (!func_DirectInputCreateA) {
OutputDebugStringA("Couldn't GetProcAddress DInputCreate\r\n");
return;
}
*p_version = 0x300;
return;
}
*p_found = 1;
if (LOWORD(os_version.dwBuildNumber) >= 0x550) {
*p_version = 0x501;
return;
}
HMODULE ddraw_module = LoadLibraryA("DDRAW.DLL");
if (!ddraw_module) {
*p_version = 0;
*p_found = 0;
FreeLibrary(ddraw_module);
return;
}
DirectDrawCreate_fn* func_DirectDrawCreate =
(DirectDrawCreate_fn*) GetProcAddress(ddraw_module, "DirectDrawCreate");
if (!func_DirectDrawCreate) {
*p_version = 0;
*p_found = 0;
FreeLibrary(ddraw_module);
OutputDebugStringA("Couldn't LoadLibrary DDraw\r\n");
return;
}
LPDIRECTDRAW ddraw;
if (FAILED(func_DirectDrawCreate(NULL, &ddraw, NULL))) {
*p_version = 0;
*p_found = 0;
FreeLibrary(ddraw_module);
OutputDebugStringA("Couldn't create DDraw\r\n");
return;
}
*p_version = 0x100;
LPDIRECTDRAW2 ddraw2;
if (FAILED(ddraw->QueryInterface(IID_IDirectDraw2, (LPVOID*) &ddraw2))) {
ddraw->Release();
FreeLibrary(ddraw_module);
OutputDebugStringA("Couldn't QI DDraw2\r\n");
return;
}
ddraw->Release();
*p_version = 0x200;
HMODULE dinput_module = LoadLibraryA("DINPUT.DLL");
if (!dinput_module) {
OutputDebugStringA("Couldn't LoadLibrary DInput\r\n");
ddraw2->Release();
FreeLibrary(ddraw_module);
return;
}
DirectInputCreateA_fn* func_DirectInputCreateA =
(DirectInputCreateA_fn*) GetProcAddress(dinput_module, "DirectInputCreateA");
FreeLibrary(dinput_module);
if (!func_DirectInputCreateA) {
FreeLibrary(ddraw_module);
ddraw2->Release();
OutputDebugStringA("Couldn't GetProcAddress DInputCreate\r\n");
return;
}
*p_version = 0x300;
DDSURFACEDESC surface_desc;
memset(&surface_desc, 0, sizeof(surface_desc));
surface_desc.dwSize = sizeof(surface_desc);
surface_desc.dwFlags = DDSD_CAPS;
surface_desc.ddsCaps.dwCaps = DDCAPS2_NONLOCALVIDMEM;
if (FAILED(ddraw2->SetCooperativeLevel(NULL, DISCL_BACKGROUND))) {
ddraw2->Release();
FreeLibrary(ddraw_module);
*p_version = 0;
OutputDebugStringA("Couldn't Set coop level\r\n");
return;
}
LPDIRECTDRAWSURFACE surface;
if (FAILED(ddraw2->CreateSurface(&surface_desc, &surface, NULL))) {
ddraw2->Release();
FreeLibrary(ddraw_module);
*p_version = 0;
OutputDebugStringA("Couldn't CreateSurface\r\n");
return;
}
LPDIRECTDRAWSURFACE3 surface3;
if (FAILED(surface->QueryInterface(IID_IDirectDrawSurface3, (LPVOID*) &surface3))) {
ddraw2->Release();
FreeLibrary(ddraw_module);
return;
}
*p_version = 0x500;
surface3->Release();
ddraw2->Release();
FreeLibrary(ddraw_module);
}

10
CONFIG/detectdx5.h Normal file
View File

@ -0,0 +1,10 @@
#if !defined(AFX_DETECTDX5_H)
#define AFX_DETECTDX5_H
#include <windows.h>
extern BOOL DetectDirectX5();
extern void DetectDirectX(unsigned int* p_version, BOOL* p_found);
#endif // !defined(AFX_DETECTDX5_H)

82
CONFIG/res/config.rc Normal file
View File

@ -0,0 +1,82 @@
#include "resource.h"
#include "afxres.h"
IDI_CONFIG ICON "lego.ico"
IDB_SHARK BITMAP "shark.bmp"
IDD_ABOUT DIALOG 0, 0, 217, 55
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "About Configure LEGO\xAE Island"
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
FONT 8, "MS Sans Serif"
BEGIN
CONTROL IDI_CONFIG, -1, "STATIC", SS_ICON | WS_CHILD | WS_VISIBLE, 11, 17, 18, 20
CONTROL "Configure LEGO Island Version 1.0", -1, "STATIC", SS_LEFT | SS_NOPREFIX | WS_CHILD | WS_VISIBLE | WS_GROUP, 40, 10, 119, 8
CONTROL "Copyright \xA9 1997 mindscape", -1, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 40, 25, 119, 8
CONTROL "OK", IDOK, "BUTTON", BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 178, 7, 32, 14
END
STRINGTABLE
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
BEGIN
IDS_ABOUT, "&About Config..."
END
IDD_MAIN DIALOGEX 0, 0, 289, 247
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "Configure LEGO Island"
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
FONT 8, "MS Sans Serif"
BEGIN
CONTROL "OK", IDABORT, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 172, 125, 44, 14
CONTROL "Cancel", IDCANCEL, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 238, 125, 44, 14
CONTROL "Fast", IDC_RAD_MODEL_QUALITY_LOW, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE, 124, 18, 42, 10
CONTROL "High", IDC_RAD_MODEL_QUALITY_HIGH, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE, 192, 18, 69, 10
CONTROL "Fast", IDC_RAD_TEXTURE_QUALITY_LOW, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE, 124, 49, 43, 10
CONTROL "High", IDC_RAD_TEXTURE_QUALITY_HIGH, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE, 192, 49, 69, 10
CONTROL "256 Color", IDC_RAD_PALETTE_256, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE, 124, 80, 50, 10
CONTROL "High Color(16 bit)", IDC_RAD_PALETTE_16BIT, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE, 192, 80, 76, 10
CONTROL "Use Joystick", IDC_CHK_JOYSTICK, "BUTTON", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 192, 104, 60, 10
CONTROL "", IDC_LIST_3DDEVICES, "LISTBOX", LBS_NOTIFY | LBS_NOINTEGRALHEIGHT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL, 115, 168, 161, 36 , WS_EX_TRANSPARENT
CONTROL "Flip Video Memory Pages", IDC_CHK_FLIP_VIDEO_MEM_PAGES, "BUTTON", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE, 116, 224, 96, 15
CONTROL "Draw 3D to Video Memory", IDC_CHK_3D_VIDEO_MEMORY, "BUTTON", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE, 116, 210, 99, 10
CONTROL "Color Palette", -1, "BUTTON", BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 107, 69, 175, 26
CONTROL "Direct 3D Devices", -1, "STATIC", SS_CENTER | WS_CHILD | WS_VISIBLE | WS_GROUP, 123, 158, 143, 10
CONTROL "3D Sound", IDC_CHK_3DSOUND, "BUTTON", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE, 220, 210, 45, 10
CONTROL "Island Model Quality", -1, "BUTTON", BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 107, 7, 175, 26
CONTROL "Island Texture Quality", -1, "BUTTON", BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 107, 38, 175, 26
CONTROL "Advanced Settings", IDC_GRP_ADVANCED, "BUTTON", BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 107, 147, 175, 93
CONTROL "Advanced", IDC_BTN_ADVANCED, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 109, 124, 44, 14
CONTROL IDB_SHARK, IDC_BMP_SHARK, "STATIC", SS_BITMAP | WS_CHILD | WS_VISIBLE, 7, 7, 83, 249
CONTROL "Draw Cursor", IDC_CHK_DRAW_CURSOR, "BUTTON", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE, 219, 227, 54, 10
CONTROL "Music", IDC_CHK_MUSIC, "BUTTON", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 124, 104, 35, 10
END
1 VERSIONINFO
FILEVERSION 1,1,0,0
PRODUCTVERSION 1,1,0,0
FILEOS 0x4
FILETYPE 0x1
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "Mindscape, Inc."
VALUE "FileDescription", "LEGOIsland & Configuration application"
VALUE "FileVersion", "1, 1, 0, 0"
VALUE "InternalName", "LEGOISLE.EXE"
VALUE "LegalCopyright", "Copyright \xA9 1997"
VALUE "OriginalFilename", "CONFIG.EXE"
VALUE "ProductName", "LEGO Island"
VALUE "ProductVersion", "1, 1, 0, 0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x0409, 0x04B0 // U.S. English, Unicode
END
END

BIN
CONFIG/res/lego.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

25
CONFIG/res/resource.h Normal file
View File

@ -0,0 +1,25 @@
#define IDI_CONFIG 128
#define IDD_ABOUT 100
#define IDS_ABOUT 101
#define IDD_MAIN 102
#define IDC_LIST_3DDEVICES 1000
#define IDC_CHK_FLIP_VIDEO_MEM_PAGES 1001
#define IDC_CHK_3D_VIDEO_MEMORY 1003
#define IDC_RAD_PALETTE_256 1004
#define IDC_RAD_PALETTE_16BIT 1005
#define IDC_CHK_3DSOUND 1006
#define IDC_CHK_DRAW_CURSOR 1008
#define IDC_RAD_MODEL_QUALITY_LOW 1010
#define IDC_RAD_MODEL_QUALITY_HIGH 1011
#define IDC_RAD_TEXTURE_QUALITY_LOW 1013
#define IDC_RAD_TEXTURE_QUALITY_HIGH 1014
#define IDC_CHK_JOYSTICK 1015
#define IDC_GRP_ADVANCED 1017
#define IDC_BTN_ADVANCED 1020
#define IDC_BMP_SHARK 1023
#define IDC_CHK_MUSIC 1024
#define IDB_SHARK 135

BIN
CONFIG/res/shark.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

View File

@ -1,8 +1,10 @@
# Contributing
## Learning Decompilation
## Important Note
Generally, decompilation is a fairly advanced skill. If you aren't already familiar with it, it will likely take you months, or even years, to learn the skills necessary to do it (depending on your current proficiency with C/C++ and x86 assembly). If you're still interested, [part 1 of the decompilation vlog](https://www.youtube.com/watch?v=MToTEqoVv3I) covers the overall process and should give you a starting point that you can dive in from.
While we're thrilled that there is so much interest in reverse engineering LEGO Island and are happy to accept contributions from anyone who would like to help progress us further to our goal of a complete codebase, proposed changes to this repository must adhere to a certain degree of engineering quality. While the established contributors here are more than happy to provide code reviews and constructive criticism, it is not their job to teach potential contributors C++ or decompilation fundamentals. As a project that is largely an artifact of the free time of its contributors, the more of that (often scarce) resource that can be dedicated to efficient work, the faster the decompilation will progress. Unfortunately, this results in well-intentioned but poorly constructed contributions actually hurting progress in the long-term. While we are greatly appreciative of the sentiment, if you aren't very confident in your decompilation abilities, it is generally in the project's best interest that you return when you have a better grasp over the process.
Generally, decompilation is a fairly advanced skill. Depending on your current proficiency with C/C++ and x86 assembly, it could take you months or even years to learn the skills necessary to do it adequately. If you're still interested in learning, [part 1 of the decompilation vlog](https://www.youtube.com/watch?v=MToTEqoVv3I) covers the overall process and should give you a starting point that you can dive in from. Once again, please make yourself familiar with this process before attempting to contribute code to this project.
## Ghidra Server
@ -15,7 +17,7 @@ To access the Ghidra repository, use the following details:
## General Guidelines
If you have contributions, feel free to create a pull request! Someone will review and merge it (or provide feedback) as soon as possible.
If you feel fit to contribute, feel free to create a pull request! Someone will review and merge it (or provide feedback) as soon as possible.
Please keep your pull requests small and understandable; you may be able to shoot ahead and make a lot of progress in a short amount of time, but this is a collaborative project, so you must allow others to catch up and follow along. Large pull requests become significantly more unwieldy to review, and as such make it exponentially more likely for a mistake or error to go undetected. They also make it harder to merge other pull requests because the more files you modify, the more likely it is for a merge conflict to occur. A general guideline is to keep submissions limited to one class at a time. Sometimes two or more classes may be too interlinked for this to be feasible, so this is not a hard rule, however if your PR is starting to modify more than 10 or so files, it's probably getting too big.

View File

@ -1,40 +0,0 @@
#include "define.h"
// GLOBAL: ISLE 0x410030
IsleApp* g_isle = 0;
// GLOBAL: ISLE 0x410034
unsigned char g_mousedown = 0;
// GLOBAL: ISLE 0x410038
unsigned char g_mousemoved = 0;
// GLOBAL: ISLE 0x41003c
int g_closed = 0;
// GLOBAL: ISLE 0x410040
RECT g_windowRect = {0, 0, 640, 480};
// GLOBAL: ISLE 0x410050
int g_rmDisabled = 0;
// GLOBAL: ISLE 0x410054
int g_waitingForTargetDepth = 1;
// GLOBAL: ISLE 0x410058
int g_targetWidth = 640;
// GLOBAL: ISLE 0x41005c
int g_targetHeight = 480;
// GLOBAL: ISLE 0x410060
int g_targetDepth = 16;
// GLOBAL: ISLE 0x410064
int g_reqEnableRMDevice = 0;
// GLOBAL: ISLE 0x4101bc
int g_startupDelay = 200;
// GLOBAL: ISLE 0x4101c0
MxLong g_lastFrameTime = 0;

View File

@ -1,27 +0,0 @@
#ifndef DEFINE_H
#define DEFINE_H
#include <mxtypes.h>
#include <windows.h>
class IsleApp;
extern IsleApp* g_isle;
extern int g_closed;
// STRING: ISLE 0x4101c4
#define WNDCLASS_NAME "Lego Island MainNoM App"
// STRING: ISLE 0x4101dc
#define WINDOW_TITLE "LEGO\xAE"
extern unsigned char g_mousedown;
extern unsigned char g_mousemoved;
extern RECT g_windowRect;
extern int g_rmDisabled;
extern int g_waitingForTargetDepth;
extern int g_targetWidth;
extern int g_targetHeight;
extern int g_targetDepth;
extern int g_reqEnableRMDevice;
extern int g_startupDelay;
extern MxLong g_lastFrameTime;
#endif // DEFINE_H

View File

@ -1,6 +1,6 @@
#include "isleapp.h"
#include "define.h"
#include "decomp.h"
#include "legoanimationmanager.h"
#include "legobuildingmanager.h"
#include "legogamestate.h"
@ -23,9 +23,50 @@
#include <dsound.h>
DECOMP_SIZE_ASSERT(IsleApp, 0x8c)
// GLOBAL: ISLE 0x410030
IsleApp* g_isle = NULL;
// GLOBAL: ISLE 0x410034
unsigned char g_mousedown = 0;
// GLOBAL: ISLE 0x410038
unsigned char g_mousemoved = 0;
// GLOBAL: ISLE 0x41003c
BOOL g_closed = FALSE;
// GLOBAL: ISLE 0x410040
RECT g_windowRect = {0, 0, 640, 480};
// GLOBAL: ISLE 0x410050
BOOL g_rmDisabled = FALSE;
// GLOBAL: ISLE 0x410054
BOOL g_waitingForTargetDepth = TRUE;
// GLOBAL: ISLE 0x410058
int g_targetWidth = 640;
// GLOBAL: ISLE 0x41005c
int g_targetHeight = 480;
// GLOBAL: ISLE 0x410060
int g_targetDepth = 16;
// GLOBAL: ISLE 0x410064
BOOL g_reqEnableRMDevice = FALSE;
// STRING: ISLE 0x4101c4
#define WNDCLASS_NAME "Lego Island MainNoM App"
// STRING: ISLE 0x4101dc
#define WINDOW_TITLE "LEGO\xAE"
// Might be static functions of IsleApp
BOOL FindExistingInstance(void);
BOOL StartDirectSound(void);
BOOL FindExistingInstance();
BOOL StartDirectSound();
// FUNCTION: ISLE 0x401000
IsleApp::IsleApp()
@ -34,25 +75,33 @@ IsleApp::IsleApp()
m_cdPath = NULL;
m_deviceId = NULL;
m_savePath = NULL;
m_fullScreen = 1;
m_flipSurfaces = 0;
m_backBuffersInVram = 1;
m_using8bit = 0;
m_using16bit = 1;
m_fullScreen = TRUE;
m_flipSurfaces = FALSE;
m_backBuffersInVram = TRUE;
m_using8bit = FALSE;
m_using16bit = TRUE;
m_unk0x24 = 0;
m_drawCursor = 0;
m_use3dSound = 1;
m_useMusic = 1;
m_useJoystick = 0;
m_drawCursor = FALSE;
m_use3dSound = TRUE;
m_useMusic = TRUE;
m_useJoystick = FALSE;
m_joystickIndex = 0;
m_wideViewAngle = 1;
m_wideViewAngle = TRUE;
m_islandQuality = 1;
m_islandTexture = 1;
m_gameStarted = 0;
m_gameStarted = FALSE;
m_frameDelta = 10;
m_windowActive = 1;
m_windowActive = TRUE;
#ifdef COMPAT_MODE
{
MxRect32 r(0, 0, 639, 479);
MxVideoParamFlags flags;
m_videoParam = MxVideoParam(r, NULL, 1, flags);
}
#else
m_videoParam = MxVideoParam(MxRect32(0, 0, 639, 479), NULL, 1, MxVideoParamFlags());
#endif
m_videoParam.Flags().Set16Bit(MxDirectDraw::GetPrimaryBitDepth() == 16);
m_windowHandle = NULL;
@ -227,8 +276,8 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
// Get reference to window
HWND window;
if (g_isle->m_windowHandle) {
window = g_isle->m_windowHandle;
if (g_isle->GetWindowHandle()) {
window = g_isle->GetWindowHandle();
}
// Load accelerators (this call actually achieves nothing - there is no "AppAccel" resource in the original - but
@ -258,16 +307,16 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
}
MSG nextMsg;
if (!g_isle || !g_isle->m_windowHandle || msg.message != WM_MOUSEMOVE ||
if (!g_isle || !g_isle->GetWindowHandle() || msg.message != WM_MOUSEMOVE ||
!PeekMessageA(&nextMsg, NULL, 0, 0, PM_NOREMOVE) || nextMsg.message != WM_MOUSEMOVE) {
TranslateMessage(&msg);
DispatchMessageA(&msg);
}
if (g_reqEnableRMDevice) {
g_reqEnableRMDevice = 0;
g_reqEnableRMDevice = FALSE;
VideoManager()->EnableRMDevice();
g_rmDisabled = 0;
g_rmDisabled = FALSE;
Lego()->StopTimer();
}
@ -291,7 +340,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
}
// FUNCTION: ISLE 0x401ca0
BOOL FindExistingInstance(void)
BOOL FindExistingInstance()
{
HWND hWnd = FindWindowA(WNDCLASS_NAME, WINDOW_TITLE);
if (hWnd) {
@ -304,7 +353,7 @@ BOOL FindExistingInstance(void)
}
// FUNCTION: ISLE 0x401ce0
BOOL StartDirectSound(void)
BOOL StartDirectSound()
{
LPDIRECTSOUND lpDS = NULL;
HRESULT ret = DirectSoundCreate(NULL, &lpDS, NULL);
@ -333,7 +382,7 @@ LRESULT WINAPI WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
return DefWindowProcA(hWnd, uMsg, wParam, lParam);
case WM_ACTIVATEAPP:
if (g_isle) {
if ((wParam != 0) && (g_isle->m_fullScreen)) {
if ((wParam != 0) && (g_isle->GetFullScreen())) {
MoveWindow(
hWnd,
g_windowRect.left,
@ -343,7 +392,7 @@ LRESULT WINAPI WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
TRUE
);
}
g_isle->m_windowActive = wParam;
g_isle->SetWindowActive(wParam);
}
return DefWindowProcA(hWnd, uMsg, wParam, lParam);
case WM_CLOSE:
@ -368,41 +417,41 @@ LRESULT WINAPI WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
if (wParam == SC_SCREENSAVE) {
return 0;
}
if (wParam == SC_CLOSE && g_closed == 0) {
if (wParam == SC_CLOSE && g_closed == FALSE) {
if (g_isle) {
if (g_rmDisabled) {
ShowWindow(g_isle->m_windowHandle, SW_RESTORE);
ShowWindow(g_isle->GetWindowHandle(), SW_RESTORE);
}
PostMessageA(g_isle->m_windowHandle, WM_CLOSE, 0, 0);
PostMessageA(g_isle->GetWindowHandle(), WM_CLOSE, 0, 0);
return 0;
}
}
else if (g_isle && g_isle->m_fullScreen && (wParam == SC_MOVE || wParam == SC_KEYMENU)) {
else if (g_isle && g_isle->GetFullScreen() && (wParam == SC_MOVE || wParam == SC_KEYMENU)) {
return 0;
}
return DefWindowProcA(hWnd, uMsg, wParam, lParam);
case WM_EXITMENULOOP:
return DefWindowProcA(hWnd, uMsg, wParam, lParam);
case WM_MOVING:
if (g_isle && g_isle->m_fullScreen) {
if (g_isle && g_isle->GetFullScreen()) {
GetWindowRect(hWnd, (LPRECT) lParam);
return 0;
}
return DefWindowProcA(hWnd, uMsg, wParam, lParam);
case WM_NCPAINT:
if (g_isle && g_isle->m_fullScreen) {
if (g_isle && g_isle->GetFullScreen()) {
return 0;
}
return DefWindowProcA(hWnd, uMsg, wParam, lParam);
case WM_DISPLAYCHANGE:
if (g_isle && VideoManager() && g_isle->m_fullScreen && VideoManager()->GetDirect3D()) {
if (VideoManager()->GetDirect3D()->GetAssignedDevice()) {
if (g_isle && VideoManager() && g_isle->GetFullScreen() && VideoManager()->GetDirect3D()) {
if (VideoManager()->GetDirect3D()->AssignedDevice()) {
int targetDepth = wParam;
int targetWidth = LOWORD(lParam);
int targetHeight = HIWORD(lParam);
if (g_waitingForTargetDepth) {
g_waitingForTargetDepth = 0;
g_waitingForTargetDepth = FALSE;
g_targetDepth = targetDepth;
}
else {
@ -415,11 +464,11 @@ LRESULT WINAPI WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
if (g_rmDisabled) {
if (valid) {
g_reqEnableRMDevice = 1;
g_reqEnableRMDevice = TRUE;
}
}
else if (!valid) {
g_rmDisabled = 1;
g_rmDisabled = TRUE;
Lego()->StartTimer();
VideoManager()->DisableRMDevice();
}
@ -458,9 +507,9 @@ LRESULT WINAPI WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
}
break;
case WM_SETCURSOR:
if (g_isle && (g_isle->m_cursorCurrent == g_isle->m_cursorBusy ||
g_isle->m_cursorCurrent == g_isle->m_cursorNo || !g_isle->m_cursorCurrent)) {
SetCursor(g_isle->m_cursorCurrent);
if (g_isle && (g_isle->GetCursorCurrent() == g_isle->GetCursorBusy() ||
g_isle->GetCursorCurrent() == g_isle->GetCursorNo() || !g_isle->GetCursorCurrent())) {
SetCursor(g_isle->GetCursorCurrent());
return 0;
}
break;
@ -472,7 +521,7 @@ LRESULT WINAPI WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
if (InputManager()) {
InputManager()->QueueEvent(type, wParam, LOWORD(lParam), HIWORD(lParam), keyCode);
}
if (g_isle && g_isle->m_drawCursor && type == c_notificationMouseMove) {
if (g_isle && g_isle->GetDrawCursor() && type == c_notificationMouseMove) {
int x = LOWORD(lParam);
int y = HIWORD(lParam);
if (x >= 640) {
@ -654,7 +703,7 @@ BOOL IsleApp::ReadReg(LPCSTR name, LPSTR outValue, DWORD outSize)
}
// FUNCTION: ISLE 0x4027b0
int IsleApp::ReadRegBool(LPCSTR name, BOOL* out)
BOOL IsleApp::ReadRegBool(LPCSTR name, BOOL* out)
{
char buffer[256];
@ -676,7 +725,7 @@ int IsleApp::ReadRegBool(LPCSTR name, BOOL* out)
}
// FUNCTION: ISLE 0x402880
int IsleApp::ReadRegInt(LPCSTR name, int* out)
BOOL IsleApp::ReadRegInt(LPCSTR name, int* out)
{
char buffer[256];
@ -757,24 +806,33 @@ void IsleApp::LoadConfig()
// FUNCTION: ISLE 0x402c20
inline void IsleApp::Tick(BOOL sleepIfNotNextFrame)
{
if (!this->m_windowActive) {
// GLOBAL: ISLE 0x4101c0
static MxLong g_lastFrameTime = 0;
// GLOBAL: ISLE 0x4101bc
static int g_startupDelay = 200;
if (!m_windowActive) {
Sleep(0);
return;
}
if (!Lego())
if (!Lego()) {
return;
if (!TickleManager())
}
if (!TickleManager()) {
return;
if (!Timer())
}
if (!Timer()) {
return;
}
MxLong currentTime = Timer()->GetRealTime();
if (currentTime < g_lastFrameTime) {
g_lastFrameTime = -this->m_frameDelta;
g_lastFrameTime = -m_frameDelta;
}
if (this->m_frameDelta + g_lastFrameTime < currentTime) {
if (m_frameDelta + g_lastFrameTime < currentTime) {
if (!Lego()->IsTimerRunning()) {
TickleManager()->Tickle();
}
@ -817,11 +875,12 @@ inline void IsleApp::Tick(BOOL sleepIfNotNextFrame)
if (Start(&ds) != SUCCESS) {
return;
}
this->m_gameStarted = 1;
m_gameStarted = TRUE;
}
}
else if (sleepIfNotNextFrame != 0)
else if (sleepIfNotNextFrame != 0) {
Sleep(0);
}
}
// FUNCTION: ISLE 0x402e80

View File

@ -6,6 +6,7 @@
#include <windows.h>
// SIZE 0x8c
class IsleApp {
public:
IsleApp();
@ -28,56 +29,51 @@ class IsleApp {
MxResult SetupWindow(HINSTANCE hInstance, LPSTR lpCmdLine);
BOOL ReadReg(LPCSTR name, LPSTR outValue, DWORD outSize);
int ReadRegBool(LPCSTR name, BOOL* out);
int ReadRegInt(LPCSTR name, int* out);
BOOL ReadRegBool(LPCSTR name, BOOL* out);
BOOL ReadRegInt(LPCSTR name, int* out);
void LoadConfig();
void Tick(BOOL sleepIfNotNextFrame);
void SetupCursor(WPARAM wParam);
// private:
// 0
LPSTR m_hdPath;
LPSTR m_cdPath;
LPSTR m_deviceId;
LPSTR m_savePath;
inline HWND GetWindowHandle() { return m_windowHandle; }
inline MxLong GetFrameDelta() { return m_frameDelta; }
inline BOOL GetFullScreen() { return m_fullScreen; }
inline HCURSOR GetCursorCurrent() { return m_cursorCurrent; }
inline HCURSOR GetCursorBusy() { return m_cursorBusy; }
inline HCURSOR GetCursorNo() { return m_cursorNo; }
inline BOOL GetDrawCursor() { return m_drawCursor; }
// 10
BOOL m_fullScreen;
BOOL m_flipSurfaces;
BOOL m_backBuffersInVram;
BOOL m_using8bit;
inline void SetWindowActive(BOOL p_windowActive) { m_windowActive = p_windowActive; }
// 20
BOOL m_using16bit;
int m_unk0x24;
BOOL m_use3dSound;
BOOL m_useMusic;
// 30
BOOL m_useJoystick;
int m_joystickIndex;
BOOL m_wideViewAngle;
int m_islandQuality;
// 40
int m_islandTexture;
int m_gameStarted;
MxLong m_frameDelta;
// 4c
MxVideoParam m_videoParam;
// 70
BOOL m_windowActive;
HWND m_windowHandle;
BOOL m_drawCursor;
HCURSOR m_cursorArrow;
// 80
HCURSOR m_cursorBusy;
HCURSOR m_cursorNo;
HCURSOR m_cursorCurrent;
private:
LPSTR m_hdPath; // 0x00
LPSTR m_cdPath; // 0x04
LPSTR m_deviceId; // 0x08
LPSTR m_savePath; // 0x0c
BOOL m_fullScreen; // 0x10
BOOL m_flipSurfaces; // 0x14
BOOL m_backBuffersInVram; // 0x18
BOOL m_using8bit; // 0x1c
BOOL m_using16bit; // 0x20
int m_unk0x24; // 0x24
BOOL m_use3dSound; // 0x28
BOOL m_useMusic; // 0x2c
BOOL m_useJoystick; // 0x30
int m_joystickIndex; // 0x34
BOOL m_wideViewAngle; // 0x38
int m_islandQuality; // 0x3c
int m_islandTexture; // 0x40
BOOL m_gameStarted; // 0x44
MxLong m_frameDelta; // 0x48
MxVideoParam m_videoParam; // 0x4c
BOOL m_windowActive; // 0x70
HWND m_windowHandle; // 0x74
BOOL m_drawCursor; // 0x78
HCURSOR m_cursorArrow; // 0x7c
HCURSOR m_cursorBusy; // 0x80
HCURSOR m_cursorNo; // 0x84
HCURSOR m_cursorCurrent; // 0x88
};
#endif // ISLEAPP_H

138
LEGO1/LegoOmni.def Normal file
View File

@ -0,0 +1,138 @@
; LegoOmni.def : Declares the module paarameters for the LEGO1.DLL.
DESCRIPTION "Lego OMNI Windows Dynamic Link Library"
EXPORTS
; EXPORTs really required only.
??0LegoBackgroundColor@@QAE@PBD0@Z
??0LegoGameState@@QAE@XZ
??0LegoWorld@@QAE@XZ
??0MxAtomId@@QAE@PBDW4LookupMode@@@Z
??0MxBitmap@@QAE@XZ
??0MxCore@@QAE@XZ
??0MxCriticalSection@@QAE@XZ
??0MxDSAction@@QAE@XZ
??0MxDSFile@@QAE@PBDK@Z
??0MxOmniCreateFlags@@QAE@XZ
??0MxOmniCreateParam@@QAE@PBDPAUHWND__@@AAVMxVideoParam@@VMxOmniCreateFlags@@@Z
??0MxString@@QAE@ABV0@@Z
??0MxVideoParam@@QAE@AAV0@@Z
??0MxVideoParam@@QAE@AAVMxRect32@@PAVMxPalette@@KAAVMxVideoParamFlags@@@Z
??0MxVideoParam@@QAE@XZ
??0MxVideoParamFlags@@QAE@XZ
??1LegoEntity@@UAE@XZ
??1LegoGameState@@QAE@XZ
??1LegoWorld@@UAE@XZ
??1MXIOINFO@@QAE@XZ
??1MxAtomId@@QAE@XZ
??1MxBitmap@@UAE@XZ
??1MxCore@@UAE@XZ
??1MxCriticalSection@@QAE@XZ
??1MxDSAction@@UAE@XZ
??1MxDSFile@@UAE@XZ
??1MxPresenter@@UAE@XZ
??1MxString@@UAE@XZ
??1MxVideoParam@@QAE@XZ
??4MxAtomId@@QAEAAV0@ABV0@@Z
??4MxString@@QAEABV0@PBD@Z
??4MxVideoParam@@QAEAAV0@ABV0@@Z
??8MxPalette@@QAEEAAV0@@Z
?BackgroundAudioManager@@YAPAVMxBackgroundAudioManager@@XZ
?Close@MxDSFile@@UAEJXZ
?Close@MxStreamer@@QAEJPBD@Z
?CreateBackgroundAudio@LegoOmni@@QAEXXZ
?CreateInstance@LegoOmni@@SAXXZ
?CreatePalette@MxBitmap@@UAEPAVMxPalette@@XZ
?CreateStreamObject@@YAPAVMxDSObject@@PAVMxDSFile@@F@Z
?DestroyInstance@MxOmni@@SAXXZ
?Detach@MxPalette@@QAEXXZ
?DisableRMDevice@LegoVideoManager@@QAEHXZ
?DoneTickle@MxPresenter@@MAEXXZ
?Enable@MxBackgroundAudioManager@@QAEXE@Z
?Enable@MxPresenter@@UAEXE@Z
?EnableFullScreenMovie@LegoVideoManager@@QAEXEE@Z
?EnableRMDevice@LegoVideoManager@@QAEHXZ
?EndAction@MxPresenter@@UAEXXZ
?EventManager@@YAPAVMxEventManager@@XZ
?FlipToGDISurface@MxDirectDraw@@QAEHXZ
?GameState@@YAPAVLegoGameState@@XZ
?GetBufferSize@MxDSFile@@UAEKXZ
?GetCD@MxOmni@@SAPBDXZ
?GetCurrPathInfo@LegoOmni@@SAHPAPAVLegoPathBoundary@@AAH@Z
?GetDefaults@LegoNavController@@SAXPAHPAM11111111PAE@Z
?GetHD@MxOmni@@SAPBDXZ
?GetInstance@LegoOmni@@SAPAV1@XZ
?GetInstance@MxOmni@@SAPAV1@XZ
?GetInstance@MxScheduler@@SAPAV1@XZ
?GetNoCD_SourceName@@YAPBDXZ
?GetPartsThreshold@RealtimeView@@SAMXZ
?GetPrimaryBitDepth@MxDirectDraw@@SAHXZ
?GetRealTime@MxTimer@@QAEJXZ
?GetStreamBuffersNum@MxDSFile@@UAEKXZ
?GetUserMaxLOD@RealtimeView@@SAMXZ
?GetVariable@MxVariableTable@@QAEPBDPBD@Z
?Init@MxPresenter@@IAEXXZ
?InputManager@@YAPAVLegoInputManager@@XZ
?InvalidateRect@MxVideoManager@@QAEXAAVMxRect32@@@Z
?IsSound3D@MxOmni@@SAEXZ
?Lego@@YAPAVLegoOmni@@XZ
?Load@LegoGameState@@QAEJK@Z
?MSoundManager@@YAPAVMxSoundManager@@XZ
?MakeSourceName@@YAXPADPBD@Z
?MoveCursor@LegoVideoManager@@QAEXHH@Z
?MusicManager@@YAPAVMxMusicManager@@XZ
?NotificationManager@@YAPAVMxNotificationManager@@XZ
?Notify@MxCore@@UAEJAAVMxParam@@@Z
?Open@MxDSFile@@UAEJK@Z
?Open@MxStreamer@@QAEPAVMxStreamController@@PBDG@Z
?ParseExtra@MxPresenter@@MAEXXZ
?Pause@MxDirectDraw@@QAEHH@Z
?PickEntity@@YAPAVLegoEntity@@JJ@Z
?PickROI@@YAPAVLegoROI@@JJ@Z
?QueueEvent@LegoInputManager@@QAEXW4NotificationId@@EJJE@Z
?Read@MxBitmap@@UAEJPBD@Z
?Read@MxDSFile@@UAEJPAEK@Z
?RealizePalette@MxVideoManager@@UAEJPAVMxPalette@@@Z
?Register@LegoInputManager@@QAEXPAVMxCore@@@Z
?RemoveAll@ViewManager@@QAEXPAVViewROI@@@Z
?RemoveWorld@LegoOmni@@QAEXABVMxAtomId@@J@Z
?Save@LegoGameState@@QAEJK@Z
?Seek@MxDSFile@@UAEJJH@Z
?SerializePlayersInfo@LegoGameState@@QAEXF@Z
?SerializeScoreHistory@LegoGameState@@QAEXF@Z
?SetCD@MxOmni@@SAXPBD@Z
?SetDefaults@LegoNavController@@SAXHMMMMMMMMME@Z
?SetDeviceName@MxVideoParam@@QAEXPAD@Z
?SetDisplayBB@LegoROI@@QAEXH@Z
?SetDoMutex@MxCriticalSection@@SAXXZ
?SetHD@MxOmni@@SAXPBD@Z
?SetObjectName@MxDSObject@@QAEXPBD@Z
?SetOmniUserMessage@@YAXP6AXPBDH@Z@Z
?SetPartsThreshold@RealtimeView@@SAXM@Z
?SetSavePath@LegoGameState@@QAEXPAD@Z
?SetSound3D@MxOmni@@SAXE@Z
?SetUserMaxLOD@RealtimeView@@SAXM@Z
?SetVariable@MxVariableTable@@QAEXPAVMxVariable@@@Z
?SetVariable@MxVariableTable@@QAEXPBD0@Z
?SetWaitIndicator@MxTransitionManager@@QAEXPAVMxVideoPresenter@@@Z
?SoundManager@@YAPAVLegoSoundManager@@XZ
?Start@@YAJPAVMxDSAction@@@Z
?StartAction@MxPresenter@@UAEJPAVMxStreamController@@PAVMxDSAction@@@Z
?StartMultiTasking@MxScheduler@@QAEXK@Z
?Streamer@@YAPAVMxStreamer@@XZ
?Tickle@MxPresenter@@UAEJXZ
?TickleManager@@YAPAVMxTickleManager@@XZ
?Timer@@YAPAVMxTimer@@XZ
?TransitionManager@@YAPAVMxTransitionManager@@XZ
?UnRegister@LegoInputManager@@QAEXPAVMxCore@@@Z
?VariableTable@@YAPAVMxVariableTable@@XZ
?VideoManager@@YAPAVLegoVideoManager@@XZ
?configureLegoAnimationManager@LegoAnimationManager@@SAXH@Z
?configureLegoBuildingManager@LegoBuildingManager@@SAXH@Z
?configureLegoModelPresenter@LegoModelPresenter@@SAXH@Z
?configureLegoPartPresenter@LegoPartPresenter@@SAXHH@Z
?configureLegoROI@LegoROI@@SAXH@Z
?configureLegoWorldPresenter@LegoWorldPresenter@@SAXH@Z
_DllMain@12

164
LEGO1/LegoOmni.mingw.def Normal file
View File

@ -0,0 +1,164 @@
; LegoOmni.def : Declares the module paarameters for the LEGO1.DLL.
; DESCRIPTION " Lego OMNI Windows Dynamic Link Library"
EXPORTS
; EXPORTs really required only.
_ZN13LegoGameState11SetSavePathEPc
_ZN13LegoGameState20SerializePlayersInfoEs
_ZN13LegoGameState21SerializeScoreHistoryEs
_ZN13LegoGameState4SaveEj
_ZN13LegoGameStateC1Ev
_ZN13LegoGameStateC2Ev
_ZN13LegoGameStateD1Ev
_ZN13LegoGameStateD2Ev
_ZN9LegoWorldC1Ev
_ZN9LegoWorldC2Ev
_ZN9LegoWorldD0Ev
_ZN9LegoWorldD1Ev
_ZN9LegoWorldD2Ev
DllMain@12
_Z10PickEntityii
_Z12EventManagerv
_Z12InputManagerv
_Z12MusicManagerv
_Z12SoundManagerv
_Z12VideoManagerv
_Z13MSoundManagerv
_Z13TickleManagerv
_Z13VariableTablev
_Z14MakeSourceNamePcPKc
_Z17TransitionManagerv
_Z18CreateStreamObjectP8MxDSFiles
_Z18GetNoCD_SourceNamev
_Z18SetOmniUserMessagePFvPKciE
_Z19NotificationManagerv
_Z22BackgroundAudioManagerv
_Z4Legov
_Z5StartP10MxDSAction
_Z5Timerv
_Z7PickROIii
_Z8Streamerv
_Z9GameStatev
_ZN10MxDSActionC1Ev
_ZN10MxDSActionC2Ev
_ZN10MxDSActionD0Ev
_ZN10MxDSActionD1Ev
_ZN10MxDSActionD2Ev
_ZN10MxDSObject13SetObjectNameEPKc
_ZN10MxStreamer4OpenEPKct
_ZN10MxStreamer5CloseEPKc
_ZN11MxPresenter10DoneTickleEv
_ZN11MxPresenter10ParseExtraEv
_ZN11MxPresenter11StartActionEP18MxStreamControllerP10MxDSAction
_ZN11MxPresenter4InitEv
_ZN11MxPresenter6EnableEh
_ZN11MxPresenter6TickleEv
_ZN11MxPresenter9EndActionEv
_ZN11MxScheduler11GetInstanceEv
_ZN11MxScheduler17StartMultiTaskingEj
_ZN11ViewManager9RemoveAllEP7ViewROI
_ZN12MxDirectDraw16FlipToGDISurfaceEv
_ZN12MxDirectDraw18GetPrimaryBitDepthEv
_ZN12MxDirectDraw5PauseEi
_ZN12MxVideoParam13SetDeviceNameEPc
_ZN12MxVideoParamC1ERS_
_ZN12MxVideoParamC1Ev
_ZN12MxVideoParamC2ERS_
_ZN12MxVideoParamC2Ev
_ZN12MxVideoParamD1Ev
_ZN12MxVideoParamD2Ev
_ZN12MxVideoParamaSERKS_
_ZN12RealtimeView13GetUserMaxLODEv
_ZN12RealtimeView13SetUserMaxLODEf
_ZN12RealtimeView17GetPartsThresholdEv
_ZN12RealtimeView17SetPartsThresholdEf
_ZN14MxVideoManager14InvalidateRectER8MxRect32
_ZN14MxVideoManager14RealizePaletteEP9MxPalette
_ZN15MxVariableTable11GetVariableEPKc
_ZN15MxVariableTable11SetVariableEP10MxVariable
_ZN15MxVariableTable11SetVariableEPKcS1_ = _ZN15MxVariableTable11SetVariableEPKcS1_
;_ZN16LegoInputManager10QueueEventE14NotificationIdhiih
_ZN16LegoInputManager10QueueEventE14NotificationIdhiih
_ZN16LegoInputManager10UnRegisterEP6MxCore
_ZN16LegoInputManager8RegisterEP6MxCore
_ZN16LegoVideoManager10MoveCursorEii
_ZN16LegoVideoManager14EnableRMDeviceEv
_ZN16LegoVideoManager15DisableRMDeviceEv
_ZN16LegoVideoManager21EnableFullScreenMovieEhh
_ZN17LegoNavController11GetDefaultsEPiPfS1_S1_S1_S1_S1_S1_S1_S1_Ph
_ZN17LegoNavController11SetDefaultsEifffffffffh
_ZN17LegoPartPresenter26configureLegoPartPresenterEii
_ZN17MxCriticalSection10SetDoMutexEv
_ZN17MxCriticalSectionC1Ev
_ZN17MxCriticalSectionC2Ev
_ZN17MxCriticalSectionD1Ev
_ZN17MxCriticalSectionD2Ev
_ZN17MxOmniCreateFlagsC1Ev
_ZN17MxOmniCreateFlagsC2Ev
_ZN17MxOmniCreateParamC1EPKcP6HWND__R12MxVideoParam17MxOmniCreateFlags
_ZN17MxVideoParamFlagsC1Ev
_ZN17MxVideoParamFlagsC2Ev
_ZN18LegoModelPresenter27configureLegoModelPresenterEi
_ZN18LegoWorldPresenter27configureLegoWorldPresenterEi
_ZN19LegoBuildingManager28configureLegoBuildingManagerEi
_ZN19MxTransitionManager16SetWaitIndicatorEP16MxVideoPresenter
_ZN20LegoAnimationManager29configureLegoAnimationManagerEi
_ZN24MxBackgroundAudioManager6EnableEh
_ZN6MxCore6NotifyER7MxParam
_ZN6MxCoreC1Ev
_ZN6MxCoreC2Ev
_ZN6MxCoreD0Ev
_ZN6MxCoreD1Ev
_ZN6MxCoreD2Ev
_ZN6MxOmni10SetSound3DEh
_ZN6MxOmni11GetInstanceEv
_ZN6MxOmni15DestroyInstanceEv
_ZN6MxOmni5GetCDEv
_ZN6MxOmni5GetHDEv
_ZN6MxOmni5SetCDEPKc
_ZN6MxOmni5SetHDEPKc
_ZN6MxOmni9IsSound3DEv
_ZN7LegoROI12SetDisplayBBEi
_ZN7LegoROI16configureLegoROIEi
_ZN7MxTimer11GetRealTimeEv
_ZN8LegoOmni11GetInstanceEv
_ZN8LegoOmni11RemoveWorldERK8MxAtomIdi
_ZN8LegoOmni14CreateInstanceEv
_ZN8LegoOmni15GetCurrPathInfoEPP16LegoPathBoundaryRi
_ZN8LegoOmni21CreateBackgroundAudioEv
_ZN8MXIOINFOD1Ev
_ZN8MXIOINFOD2Ev
_ZN8MxAtomIdC1EPKc10LookupMode
_ZN8MxAtomIdC2EPKc10LookupMode
_ZN8MxAtomIdD1Ev
_ZN8MxAtomIdD2Ev
_ZN8MxAtomIdaSERKS_
_ZN8MxBitmap13CreatePaletteEv
_ZN8MxBitmap4ReadEPKc
_ZN8MxBitmapC1Ev
_ZN8MxBitmapC2Ev
_ZN8MxBitmapD0Ev
_ZN8MxBitmapD1Ev
_ZN8MxBitmapD2Ev
_ZN8MxDSFile13GetBufferSizeEv
_ZN8MxDSFile19GetStreamBuffersNumEv
_ZN8MxDSFile4OpenEj
_ZN8MxDSFile4ReadEPhj
_ZN8MxDSFile4SeekEii
_ZN8MxDSFile5CloseEv
_ZN8MxDSFileC1EPKcj
_ZN8MxDSFileC2EPKcj
_ZN8MxDSFileD0Ev
_ZN8MxDSFileD1Ev
_ZN8MxDSFileD2Ev
_ZN8MxStringC1ERKS_
_ZN8MxStringC2ERKS_
_ZN8MxStringD0Ev
_ZN8MxStringD1Ev
_ZN8MxStringD2Ev
_ZN8MxStringaSEPKc
_ZN9MxPalette6DetachEv
_ZN9MxPaletteeqERS_

View File

@ -2,49 +2,124 @@
#define ACT1STATE_H
#include "legostate.h"
#include "legoutil.h"
#include "roi/legoroi.h"
// VTABLE: LEGO1 0x100d7028
// SIZE 0x26c
class Act1State : public LegoState {
public:
enum {
e_unk953 = 953,
e_unk954 = 954,
e_unk955 = 955,
};
Act1State();
// FUNCTION: LEGO1 0x100338a0
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0154
return "Act1State";
};
}
// FUNCTION: LEGO1 0x100338b0
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Act1State::ClassName()) || LegoState::IsA(p_name);
};
}
virtual MxBool SetFlag() override; // vtable+0x18
virtual MxResult VTable0x1c(LegoFileStream* p_legoFileStream) override; // vtable+0x1c
MxBool SetFlag() override; // vtable+0x18
MxResult VTable0x1c(LegoFile* p_legoFile) override; // vtable+0x1c
inline void SetUnknown18(MxU32 p_unk0x18) { m_unk0x18 = p_unk0x18; }
inline MxU32 GetUnknown18() { return m_unk0x18; }
inline void SetUnknown21(MxS16 p_unk0x21) { m_unk0x21 = p_unk0x21; }
inline MxS16 GetUnknown21() { return m_unk0x21; }
inline void SetUnknown18(MxU32 p_unk0x18) { m_unk0x018 = p_unk0x18; }
inline MxU32 GetUnknown18() { return m_unk0x018; }
inline MxU32 GetUnknown1c() { return m_unk0x01c; }
inline MxS16 GetUnknown21() { return m_unk0x021; }
inline void SetUnknown1c(MxU32 p_unk0x1c) { m_unk0x01c = p_unk0x1c; }
inline void SetUnknown21(MxS16 p_unk0x21) { m_unk0x021 = p_unk0x21; }
void FUN_10034d00();
// SYNTHETIC: LEGO1 0x10033960
// Act1State::`scalar deleting destructor'
// SIZE 0x4c
class NamedPlane {
public:
// FUNCTION: LEGO1 0x10033800
NamedPlane() {}
inline void SetName(const char* p_name) { m_name = p_name; }
inline const MxString* GetName() const { return &m_name; }
// FUNCTION: LEGO1 0x100344d0
MxResult Serialize(LegoFile* p_file)
{
if (p_file->IsWriteMode()) {
p_file->FUN_10006030(m_name);
p_file->WriteVector3(m_point1);
p_file->WriteVector3(m_point2);
p_file->WriteVector3(m_point3);
}
else if (p_file->IsReadMode()) {
p_file->ReadString(m_name);
p_file->ReadVector3(m_point1);
p_file->ReadVector3(m_point2);
p_file->ReadVector3(m_point3);
}
return SUCCESS;
}
private:
MxString m_name; // 0x00
Mx3DPointFloat m_point1; // 0x10
Mx3DPointFloat m_point2; // 0x24
Mx3DPointFloat m_point3; // 0x38
};
protected:
undefined m_unk0x8[0x10]; // 0x8
MxU32 m_unk0x18; // 0x18
undefined2 m_unk0x1c; // 0x1c
undefined m_unk0x1e; // 0x1e
undefined m_unk0x1f; // 0x1f
undefined m_unk0x20; // 0x20
MxBool m_unk0x21; // 0x21
undefined m_unk0x22; // 0x22
// TODO
MxS32* m_unk0x008; // 0x008
// FIXME: count for m_unk0x008
MxS16 m_unk0x00c; // 0x00c
undefined2 m_unk0x00e; // 0x00e
undefined2 m_unk0x010; // 0x010
undefined m_unk0x012; // 0x012
MxS32 m_unk0x014; // 0x014
MxU32 m_unk0x018; // 0x018
MxU16 m_unk0x01c; // 0x01c
undefined m_unk0x01e; // 0x01e
undefined m_unk0x01f; // 0x01f
undefined m_unk0x020; // 0x020
undefined m_unk0x021; // 0x021
undefined m_unk0x022; // 0x022
undefined m_unk0x023; // 0x023
NamedPlane m_unk0x024; // 0x024
NamedPlane m_unk0x070; // 0x070
NamedPlane m_unk0x0bc; // 0x0bc
NamedPlane m_unk0x108; // 0x108
NamedTexture* m_unk0x154; // 0x154
NamedTexture* m_unk0x158; // 0x158
NamedTexture* m_unk0x15c; // 0x15c
MxCore* m_unk0x160; // 0x160
NamedPlane m_unk0x164; // 0x164
NamedTexture* m_unk0x1b0; // 0x1b0
NamedTexture* m_unk0x1b4; // 0x1b4
MxCore* m_unk0x1b8; // 0x1b8
NamedPlane m_unk0x1bc; // 0x1bc
NamedTexture* m_unk0x208; // 0x208
MxCore* m_unk0x20c; // 0x20c
NamedPlane m_unk0x210; // 0x210
NamedTexture* m_unk0x25c; // 0x25c
NamedTexture* m_unk0x260; // 0x260
NamedTexture* m_unk0x264; // 0x264
MxCore* m_unk0x268; // 0x268
};
// FUNCTION: LEGO1 0x10033a70
// Act1State::NamedPlane::~NamedPlane
#endif // ACT1STATE_H

View File

@ -8,25 +8,25 @@
class Act2Brick : public LegoPathActor {
public:
Act2Brick();
virtual ~Act2Brick() override; // vtable+0x0
~Act2Brick() override; // vtable+0x00
virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4
virtual MxResult Tickle() override; // vtable+0x08
MxLong Notify(MxParam& p_param) override; // vtable+0x04
MxResult Tickle() override; // vtable+0x08
// FUNCTION: LEGO1 0x1007a360
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0438
return "Act2Brick";
}
// FUNCTION: LEGO1 0x1007a370
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Act2Brick::ClassName()) || LegoEntity::IsA(p_name);
}
virtual MxS32 VTable0x94() override; // vtable+0x94
MxS32 VTable0x94() override; // vtable+0x94
// SYNTHETIC: LEGO1 0x1007a450
// Act2Brick::`scalar deleting destructor'

View File

@ -7,17 +7,17 @@
// SIZE 0x68
class Act2PoliceStation : public LegoEntity {
public:
virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4
MxLong Notify(MxParam& p_param) override; // vtable+0x04
// FUNCTION: LEGO1 0x1000e200
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f03fc
return "Act2PoliceStation";
}
// FUNCTION: LEGO1 0x1000e210
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Act2PoliceStation::ClassName()) || LegoEntity::IsA(p_name);
}

View File

@ -9,31 +9,31 @@ class Act3 : public LegoWorld {
public:
Act3();
virtual ~Act3() override; // vtable+00
~Act3() override; // vtable+00
virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4
virtual MxResult Tickle() override; // vtable+0x8
MxLong Notify(MxParam& p_param) override; // vtable+0x04
MxResult Tickle() override; // vtable+0x08
// FUNCTION: LEGO1 0x10072510
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f013c
return "Act3";
}
// FUNCTION: LEGO1 0x10072520
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Act3::ClassName()) || LegoWorld::IsA(p_name);
}
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
virtual void Destroy(MxBool p_fromDestructor) override; // vtable+0x1c
virtual void VTable0x50() override; // vtable+0x50
virtual MxBool VTable0x5c() override; // vtable+0x5c
virtual void VTable0x60() override; // vtable+0x60
virtual MxBool VTable0x64() override; // vtable+0x64
virtual void VTable0x68(MxBool p_add) override; // vtable+0x68
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void Destroy(MxBool p_fromDestructor) override; // vtable+0x1c
void ReadyWorld() override; // vtable+0x50
MxBool VTable0x5c() override; // vtable+0x5c
void VTable0x60() override; // vtable+0x60
MxBool VTable0x64() override; // vtable+0x64
void Enable(MxBool p_enable) override; // vtable+0x68
inline void SetUnkown420c(MxEntity* p_entity) { m_unk0x420c = p_entity; }
inline void SetUnkown4270(MxU32 p_unk0x4270) { m_unk0x4270 = p_unk0x4270; }
@ -41,6 +41,11 @@ class Act3 : public LegoWorld {
// SYNTHETIC: LEGO1 0x10072630
// Act3::`scalar deleting destructor'
MxBool FUN_100727e0(MxU32, Mx3DPointFloat& p_loc, Mx3DPointFloat& p_dir, Mx3DPointFloat& p_up);
MxBool FUN_10072980(MxU32, Mx3DPointFloat& p_loc, Mx3DPointFloat& p_dir, Mx3DPointFloat& p_up);
void FUN_10073400();
void FUN_10073430();
protected:
undefined m_unk0xf8[0x4114]; // 0xf8
MxEntity* m_unk0x420c; // 0x420c

View File

@ -8,7 +8,7 @@
class Act3Actor : public MxCore {
public:
// FUNCTION: LEGO1 0x100431b0
inline virtual const char* ClassName() const override
inline const char* ClassName() const override
{
// STRING: LEGO1 0x100f03ac
return "Act3Actor";

View File

@ -7,22 +7,22 @@
class Act3Shark : public LegoAnimActor {
public:
// FUNCTION: LEGO1 0x100430c0
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f03a0
return "Act3Shark";
}
// FUNCTION: LEGO1 0x1001a130
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Act3Shark::ClassName()) || LegoAnimActor::IsA(p_name);
}
virtual void ParseAction(char*) override; // vtable+0x20
virtual void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30
virtual void VTable0x70(float p_float) override; // vtable+0x70
virtual void VTable0x74(Matrix4& p_transform) override; // vtable+0x74
void ParseAction(char*) override; // vtable+0x20
void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30
void VTable0x70(float p_float) override; // vtable+0x70
void VTable0x74(Matrix4& p_transform) override; // vtable+0x74
// SYNTHETIC: LEGO1 0x10043020
// Act3Shark::`scalar deleting destructor'

View File

@ -4,32 +4,33 @@
#include "legostate.h"
// VTABLE: LEGO1 0x100d4fc8
// SIZE 0xc
// SIZE 0x0c
class Act3State : public LegoState {
public:
inline Act3State() { m_unk0x08 = 0; }
// FUNCTION: LEGO1 0x1000e300
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f03f0
return "Act3State";
}
// FUNCTION: LEGO1 0x1000e310
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Act3State::ClassName()) || LegoState::IsA(p_name);
}
virtual MxBool VTable0x14() override;
MxBool VTable0x14() override;
// SYNTHETIC: LEGO1 0x1000e3c0
// Act3State::`scalar deleting destructor'
inline undefined4 GetUnknown0x08() { return m_unk0x08; }
private:
// FIXME: May be part of LegoState? Uncertain...
MxU32 m_unk0x08;
undefined4 m_unk0x08; // 0x08
};
#endif // ACT3STATE_H

View File

@ -9,29 +9,29 @@ class Ambulance : public IslePathActor {
public:
Ambulance();
virtual MxLong Notify(MxParam& p_param) override; // vtable+0x04
virtual MxResult Tickle() override; // vtable+0x08
MxLong Notify(MxParam& p_param) override; // vtable+0x04
MxResult Tickle() override; // vtable+0x08
// FUNCTION: LEGO1 0x10035fa0
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f03c4
return "Ambulance";
}
// FUNCTION: LEGO1 0x10035fb0
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Ambulance::ClassName()) || IslePathActor::IsA(p_name);
}
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
virtual void Destroy(MxBool p_fromDestructor) override; // vtable+0x1c
virtual void VTable0x70(float p_float) override; // vtable+0x70
virtual MxU32 VTable0xcc() override; // vtable+0xcc
virtual MxU32 VTable0xd4(MxType17NotificationParam& p_param) override; // vtable+0xd4
virtual MxU32 VTable0xdc(MxType19NotificationParam&) override; // vtable+0xdc
virtual void VTable0xe4() override; // vtable+0xe4
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void Destroy(MxBool p_fromDestructor) override; // vtable+0x1c
void VTable0x70(float p_float) override; // vtable+0x70
MxU32 VTable0xcc() override; // vtable+0xcc
MxU32 VTable0xd4(LegoControlManagerEvent& p_param) override; // vtable+0xd4
MxU32 VTable0xdc(MxType19NotificationParam&) override; // vtable+0xdc
void VTable0xe4() override; // vtable+0xe4
// SYNTHETIC: LEGO1 0x10036130
// Ambulance::`scalar deleting destructor'

View File

@ -10,19 +10,19 @@ class AmbulanceMissionState : public LegoState {
AmbulanceMissionState();
// FUNCTION: LEGO1 0x10037600
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f00e8
return "AmbulanceMissionState";
}
// FUNCTION: LEGO1 0x10037610
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, AmbulanceMissionState::ClassName()) || LegoState::IsA(p_name);
}
virtual MxResult VTable0x1c(LegoFileStream* p_legoFileStream) override; // vtable+0x1c
MxResult VTable0x1c(LegoFile* p_legoFile) override; // vtable+0x1c
inline MxU16 GetColor(MxU8 p_id)
{
@ -46,18 +46,18 @@ class AmbulanceMissionState : public LegoState {
// AmbulanceMissionState::`scalar deleting destructor'
protected:
undefined4 m_unk0x8; // 0x08
undefined4 m_unk0xc; // 0x0c
MxU16 m_unk0x10; // 0x10
MxU16 m_unk0x12; // 0x12
MxU16 m_unk0x14; // 0x14
MxU16 m_unk0x16; // 0x16
MxU16 m_unk0x18; // 0x18
MxU16 m_color1; // 0x1a
MxU16 m_color2; // 0x1c
MxU16 m_color3; // 0x1e
MxU16 m_color4; // 0x20
MxU16 m_color5; // 0x22
undefined4 m_unk0x08; // 0x08
undefined4 m_unk0x0c; // 0x0c
MxU16 m_unk0x10; // 0x10
MxU16 m_unk0x12; // 0x12
MxU16 m_unk0x14; // 0x14
MxU16 m_unk0x16; // 0x16
MxU16 m_unk0x18; // 0x18
MxU16 m_color1; // 0x1a
MxU16 m_color2; // 0x1c
MxU16 m_color3; // 0x1e
MxU16 m_color4; // 0x20
MxU16 m_color5; // 0x22
};
#endif // AMBULANCEMISSIONSTATE_H

View File

@ -8,33 +8,33 @@
class AnimState : public LegoState {
public:
AnimState();
virtual ~AnimState() override; // vtable+0x0
~AnimState() override; // vtable+0x00
// FUNCTION: LEGO1 0x10065070
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0460
return "AnimState";
}
// FUNCTION: LEGO1 0x10065080
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, AnimState::ClassName()) || LegoState::IsA(p_name);
}
virtual MxBool SetFlag() override; // vtable+0x18
virtual MxResult VTable0x1c(LegoFileStream* p_legoFileStream) override; // vtable+0x1C
MxBool SetFlag() override; // vtable+0x18
MxResult VTable0x1c(LegoFile* p_legoFile) override; // vtable+0x1c
// SYNTHETIC: LEGO1 0x10065130
// AnimState::`scalar deleting destructor'
private:
undefined4 m_unk0x8;
undefined4 m_unk0xc;
void* m_unk0x10;
undefined4 m_unk0x14;
void* m_unk0x18;
undefined4 m_unk0x08; // 0x08
undefined4 m_unk0x0c; // 0x0c
void* m_unk0x10; // 0x10
undefined4 m_unk0x14; // 0x14
void* m_unk0x18; // 0x18
};
#endif // ANIMSTATE_H

View File

@ -8,14 +8,14 @@
class BeachHouseEntity : public BuildingEntity {
public:
// FUNCTION: LEGO1 0x1000ee80
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0314
return "BeachHouseEntity";
}
// FUNCTION: LEGO1 0x1000ee90
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, BeachHouseEntity::ClassName()) || BuildingEntity::IsA(p_name);
}

View File

@ -11,22 +11,22 @@ class Bike : public IslePathActor {
Bike();
// FUNCTION: LEGO1 0x100766f0
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f03d0
return "Bike";
}
// FUNCTION: LEGO1 0x10076700
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Bike::ClassName()) || IslePathActor::IsA(p_name);
}
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
virtual MxU32 VTable0xcc() override; // vtable+0xcc
virtual MxU32 VTable0xd4(MxType17NotificationParam& p_param) override; // vtable+0xd4
virtual void VTable0xe4() override; // vtable+0xe4
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
MxU32 VTable0xcc() override; // vtable+0xcc
MxU32 VTable0xd4(LegoControlManagerEvent& p_param) override; // vtable+0xd4
void VTable0xe4() override; // vtable+0xe4
// SYNTHETIC: LEGO1 0x10076880
// Bike::`scalar deleting destructor'

View File

@ -8,19 +8,19 @@
class BuildingEntity : public LegoEntity {
public:
BuildingEntity();
virtual ~BuildingEntity() override; // vtable+0x0
~BuildingEntity() override; // vtable+0x00
virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4
MxLong Notify(MxParam& p_param) override; // vtable+0x04
// FUNCTION: LEGO1 0x10014f20
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f07e8
return "BuildingEntity";
}
// FUNCTION: LEGO1 0x10014f30
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, BuildingEntity::ClassName()) || LegoEntity::IsA(p_name);
}

View File

@ -7,25 +7,25 @@
// VTABLE: LEGO1 0x100d6790
class BumpBouy : public LegoAnimActor {
public:
virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4
MxLong Notify(MxParam& p_param) override; // vtable+0x04
// FUNCTION: LEGO1 0x100274e0
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0394
return "BumpBouy";
}
// FUNCTION: LEGO1 0x10027500
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, BumpBouy::ClassName()) || LegoAnimActor::IsA(p_name);
}
virtual void ParseAction(char*) override; // vtable+0x20
virtual void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30
virtual void VTable0x70(float p_float) override; // vtable+0x70
virtual void VTable0x74(Matrix4& p_transform) override; // vtable+0x74
void ParseAction(char*) override; // vtable+0x20
void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30
void VTable0x70(float p_float) override; // vtable+0x70
void VTable0x74(Matrix4& p_transform) override; // vtable+0x74
// SYNTHETIC: LEGO1 0x10027490
// BumpBouy::`scalar deleting destructor'

View File

@ -11,25 +11,25 @@ class CarRace : public LegoRace {
CarRace();
// FUNCTION: LEGO1 0x10016b20
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0528
return "CarRace";
}
// FUNCTION: LEGO1 0x10016b30
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, CarRace::ClassName()) || LegoRace::IsA(p_name);
}
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
virtual void VTable0x50() override; // vtable+0x50
virtual MxBool VTable0x64() override; // vtable+0x64
virtual undefined4 VTable0x6c(undefined4) override; // vtable+0x6c
virtual undefined4 VTable0x70(undefined4) override; // vtable+0x70
virtual undefined4 VTable0x74(undefined4) override; // vtable+0x74
virtual undefined4 VTable0x78(undefined4) override; // vtable+0x78
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50
MxBool VTable0x64() override; // vtable+0x64
undefined4 VTable0x6c(undefined4) override; // vtable+0x6c
undefined4 VTable0x70(undefined4) override; // vtable+0x70
undefined4 VTable0x74(undefined4) override; // vtable+0x74
undefined4 VTable0x78(undefined4) override; // vtable+0x78
// SYNTHETIC: LEGO1 0x10016c70
// CarRace::`scalar deleting destructor'

View File

@ -8,14 +8,14 @@
class CarRaceState : public RaceState {
public:
// FUNCTION: LEGO1 0x1000dd30
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f009c
return "CarRaceState";
}
// FUNCTION: LEGO1 0x1000dd40
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, CarRaceState::ClassName()) || RaceState::IsA(p_name);
}

View File

@ -0,0 +1,10 @@
#ifndef CAVEENTITY_H
#define CAVEENTITY_H
#include "racestandsentity.h"
// No overrides, uses vtable from RaceStandsEntity
// SIZE 0x68
class CaveEntity : public RaceStandsEntity {};
#endif // CAVEENTITY_H

View File

@ -8,21 +8,21 @@
class Doors : public LegoPathActor {
public:
// FUNCTION: LEGO1 0x1000e430
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f03e8
return "Doors";
}
// FUNCTION: LEGO1 0x1000e440
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Doors::ClassName()) || LegoPathActor::IsA(p_name);
}
virtual void ParseAction(char*) override; // vtable+0x20
virtual void VTable0x70(float p_float) override; // vtable+0x70
virtual MxS32 VTable0x94() override; // vtable+0x94
void ParseAction(char*) override; // vtable+0x20
void VTable0x70(float p_float) override; // vtable+0x70
MxS32 VTable0x94() override; // vtable+0x94
// SYNTHETIC: LEGO1 0x1000e580
// Doors::`scalar deleting destructor'

View File

@ -11,24 +11,24 @@ class DuneBuggy : public IslePathActor {
DuneBuggy();
// FUNCTION: LEGO1 0x10067c30
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0410
return "DuneBuggy";
}
// FUNCTION: LEGO1 0x10067c40
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, DuneBuggy::ClassName()) || IslePathActor::IsA(p_name);
}
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
virtual void VTable0x70(float p_float) override; // vtable+0x70
virtual MxU32 VTable0xcc() override; // vtable+0xcc
virtual MxU32 VTable0xd4(MxType17NotificationParam& p_param) override; // vtable+0xd4
virtual MxU32 VTable0xdc(MxType19NotificationParam& p_param) override; // vtable+0xdc
virtual void VTable0xe4() override; // vtable+0xe4
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void VTable0x70(float p_float) override; // vtable+0x70
MxU32 VTable0xcc() override; // vtable+0xcc
MxU32 VTable0xd4(LegoControlManagerEvent& p_param) override; // vtable+0xd4
MxU32 VTable0xdc(MxType19NotificationParam& p_param) override; // vtable+0xdc
void VTable0xe4() override; // vtable+0xe4
// SYNTHETIC: LEGO1 0x10067dc0
// DuneBuggy::`scalar deleting destructor'

View File

@ -2,46 +2,49 @@
#define ELEVATORBOTTOM_H
#include "decomp.h"
#include "legogamestate.h"
#include "legoworld.h"
class LegoControlManagerEvent;
// VTABLE: LEGO1 0x100d5f20
// SIZE: 0xfc (from inlined ctor at 0x1000a8aa)
class ElevatorBottom : public LegoWorld {
public:
ElevatorBottom();
virtual ~ElevatorBottom() override; // vtable+0x0
~ElevatorBottom() override; // vtable+0x00
virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4
MxLong Notify(MxParam& p_param) override; // vtable+0x04
// FUNCTION: LEGO1 0x10017f20
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f04ac
return "ElevatorBottom";
}
// FUNCTION: LEGO1 0x10017f30
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, ElevatorBottom::ClassName()) || LegoWorld::IsA(p_name);
}
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
virtual void VTable0x50() override; // vtable+0x50
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50
// FUNCTION: LEGO1 0x10017f10
virtual MxBool VTable0x5c() override { return TRUE; } // vtable+0x5c
MxBool VTable0x5c() override { return TRUE; } // vtable+0x5c
virtual MxBool VTable0x64() override; // vtable+0x64
virtual void VTable0x68(MxBool p_add) override; // vtable+0x68
MxBool VTable0x64() override; // vtable+0x64
void Enable(MxBool p_enable) override; // vtable+0x68
// SYNTHETIC: LEGO1 0x10018040
// ElevatorBottom::`scalar deleting destructor'
private:
undefined4 m_unk0xf8; // 0xf8
LegoGameState::Area m_unk0xf8; // 0xf8
MxLong HandleNotification17(MxParam& p_param);
MxLong HandleClick(LegoControlManagerEvent& p_param);
};
#endif // ELEVATORBOTTOM_H

View File

@ -2,55 +2,61 @@
#define GASSTATION_H
#include "decomp.h"
#include "gasstationstate.h"
#include "legogamestate.h"
#include "legoworld.h"
#include "radio.h"
// VTABLE: LEGO1 0x100d4650
// SIZE 0x128
// Radio variable at 0x46, in constructor
class GasStation : public LegoWorld {
public:
GasStation();
virtual ~GasStation() override; // vtable+0x0
~GasStation() override; // vtable+0x00
virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4
virtual MxResult Tickle() override; // vtable+0x8
MxLong Notify(MxParam& p_param) override; // vtable+0x04
MxResult Tickle() override; // vtable+0x08
// FUNCTION: LEGO1 0x10004780
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0168
return "GasStation";
}
// FUNCTION: LEGO1 0x10004790
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, GasStation::ClassName()) || LegoWorld::IsA(p_name);
}
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
virtual void VTable0x50() override; // vtable+0x50
virtual MxBool VTable0x5c() override; // vtable+0x5c
virtual MxBool VTable0x64() override; // vtable+0x64
virtual void VTable0x68(MxBool p_add) override; // vtable+0x68
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50
MxBool VTable0x5c() override; // vtable+0x5c
MxBool VTable0x64() override; // vtable+0x64
void Enable(MxBool p_enable) override; // vtable+0x68
virtual MxLong HandleClick(LegoControlManagerEvent& p_param); // vtable+0x6c
// SYNTHETIC: LEGO1 0x100048a0
// GasStation::`scalar deleting destructor'
private:
undefined2 m_unk0xf8; // 0xf8
undefined2 m_unk0xfa; // 0xfa
undefined4 m_unk0xfc; // 0xfc
undefined4 m_unk0x100; // 0x100
undefined2 m_unk0x104; // 0x104
undefined2 m_unk0x106; // 0x106
undefined4 m_unk0x108; // 0x108
undefined4 m_unk0x10c; // 0x10c
undefined4 m_unk0x110; // 0x110
undefined m_unk0x114; // 0x114
undefined m_unk0x115; // 0x115
Radio m_radio; // 0x118
MxLong HandleEndAction(MxEndActionNotificationParam& p_param);
MxLong HandleKeyPress(MxS8 p_key);
MxLong HandleButtonDown(LegoControlManagerEvent& p_param);
undefined2 m_unk0xf8; // 0xf8
undefined2 m_unk0xfa; // 0xfa
LegoGameState::Area m_transitionDestination; // 0xfc
GasStationState* m_state; // 0x100
undefined2 m_unk0x104; // 0x104
undefined2 m_unk0x106; // 0x106
undefined4 m_unk0x108; // 0x108
undefined4 m_unk0x10c; // 0x10c
undefined4 m_unk0x110; // 0x110
undefined m_unk0x114; // 0x114
undefined m_unk0x115; // 0x115
Radio m_radio; // 0x118
};
#endif // GASSTATION_H

View File

@ -8,14 +8,14 @@
class GasStationEntity : public BuildingEntity {
public:
// FUNCTION: LEGO1 0x1000eb20
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0348
return "GasStationEntity";
}
// FUNCTION: LEGO1 0x1000eb30
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, GasStationEntity::ClassName()) || BuildingEntity::IsA(p_name);
}

View File

@ -7,34 +7,45 @@
// SIZE 0x24
class GasStationState : public LegoState {
public:
// SIZE 0x04
struct Unknown0x14 {
inline void SetUnknown0x00(undefined4 p_unk0x00) { m_unk0x00 = p_unk0x00; }
inline undefined4 GetUnknown0x00() { return m_unk0x00; }
private:
undefined4 m_unk0x00; // 0x00
};
GasStationState();
// FUNCTION: LEGO1 0x100061d0
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0174
return "GasStationState";
}
// FUNCTION: LEGO1 0x100061e0
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, GasStationState::ClassName()) || LegoState::IsA(p_name);
}
virtual MxResult VTable0x1c(LegoFileStream* p_legoFileStream) override; // vtable+0x1c
MxResult VTable0x1c(LegoFile* p_legoFile) override; // vtable+0x1c
// SYNTHETIC: LEGO1 0x10006290
// GasStationState::`scalar deleting destructor'
inline Unknown0x14& GetUnknown0x14() { return m_unk0x14; }
private:
undefined4 m_unk0x08[3];
undefined4 m_unk0x14;
undefined2 m_unk0x18;
undefined2 m_unk0x1a;
undefined2 m_unk0x1c;
undefined2 m_unk0x1e;
undefined2 m_unk0x20;
undefined4 m_unk0x08[3]; // 0x08
Unknown0x14 m_unk0x14; // 0x14
undefined2 m_unk0x18; // 0x18
undefined2 m_unk0x1a; // 0x1a
undefined2 m_unk0x1c; // 0x1c
undefined2 m_unk0x1e; // 0x1e
undefined2 m_unk0x20; // 0x20
};
#endif // GASSTATIONSTATE_H

View File

@ -1,141 +0,0 @@
#ifndef GIFMANAGER_H
#define GIFMANAGER_H
#include "compat.h"
#include "decomp.h"
#include "mxstl/stlcompat.h"
#include "mxtypes.h"
#include <d3drmobj.h>
#include <ddraw.h>
#pragma warning(disable : 4237)
// SIZE 0x14
struct GifData {
public:
char* m_name; // 0x00
LPDIRECTDRAWSURFACE m_surface; // 0x04
LPDIRECTDRAWPALETTE m_palette; // 0x08
LPDIRECT3DRMTEXTURE2 m_texture; // 0x0c
MxU8* m_data; // 0x10
~GifData();
};
struct GifMapComparator {
bool operator()(const char* const& p_key0, const char* const& p_key1) const { return strcmp(p_key0, p_key1) > 0; }
};
// SIZE 0x10
class GifMap : public map<const char*, GifData*, GifMapComparator> {
// SYNTHETIC: LEGO1 0x1005a400
// GifMap::~GifMap
};
typedef list<GifData*> GifList;
// VTABLE: LEGO1 0x100d86d4
// SIZE 0x18
class GifManagerBase {
public:
// FUNCTION: LEGO1 0x1005b660
virtual ~GifManagerBase()
{
GifMap::iterator it;
for (it = m_map.begin(); it != m_map.end(); it++) {
// DECOMP: Use of const_cast here matches ~ViewLODListManager from 96 source.
const char* const& key = (*it).first;
delete[] const_cast<char*>(key);
if (m_ownership) {
delete (*it).second; // GifData*
}
}
}
inline GifData* Get(const char* p_name)
{
GifMap::iterator it = m_map.find(p_name);
if (it != m_map.end()) {
return (*it).second;
}
return NULL;
}
// SYNTHETIC: LEGO1 0x1005a310
// GifManagerBase::`scalar deleting destructor'
protected:
MxBool m_ownership; // 0x04
GifMap m_map; // 0x08
};
// VTABLE: LEGO1 0x100d86fc
// SIZE 0x24
class GifManager : public GifManagerBase {
public:
GifManager() { m_ownership = TRUE; };
virtual ~GifManager() override;
// SYNTHETIC: LEGO1 0x1005a580
// GifManager::`scalar deleting destructor'
void FUN_10099cc0(GifData* p_data);
protected:
GifList m_list; // 0x18
};
// TEMPLATE: LEGO1 0x10059c50
// allocator<GifData *>::_Charalloc
// clang-format off
// TEMPLATE: LEGO1 0x10001cc0
// _Tree<char const *,pair<char const * const,GifData *>,map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::_Kfn,GifMapComparator,allocator<GifData *> >::_Lbound
// TEMPLATE: LEGO1 0x1004f9b0
// _Tree<char const *,pair<char const * const,GifData *>,map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::_Kfn,GifMapComparator,allocator<GifData *> >::_Insert
// TEMPLATE: LEGO1 0x10059c70
// _Tree<char const *,pair<char const * const,GifData *>,map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::_Kfn,GifMapComparator,allocator<GifData *> >::_Color
// TEMPLATE: LEGO1 0x10059c80
// _Tree<char const *,pair<char const * const,GifData *>,map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::_Kfn,GifMapComparator,allocator<GifData *> >::_Left
// TEMPLATE: LEGO1 0x10059c90
// _Tree<char const *,pair<char const * const,GifData *>,map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::_Kfn,GifMapComparator,allocator<GifData *> >::_Parent
// TEMPLATE: LEGO1 0x10059ca0
// _Tree<char const *,pair<char const * const,GifData *>,map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::_Kfn,GifMapComparator,allocator<GifData *> >::_Right
// TEMPLATE: LEGO1 0x10059cb0
// _Tree<char const *,pair<char const * const,GifData *>,map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::_Kfn,GifMapComparator,allocator<GifData *> >::~_Tree<char const *,pair<char const * const,GifData *>,map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::_Kfn,GifMapComparator,allocator<GifData *> >
// TEMPLATE: LEGO1 0x10059d80
// _Tree<char const *,pair<char const * const,GifData *>,map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::_Kfn,GifMapComparator,allocator<GifData *> >::iterator::_Inc
// TEMPLATE: LEGO1 0x10059dc0
// _Tree<char const *,pair<char const * const,GifData *>,map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::_Kfn,GifMapComparator,allocator<GifData *> >::erase
// TEMPLATE: LEGO1 0x1005a210
// _Tree<char const *,pair<char const * const,GifData *>,map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::_Kfn,GifMapComparator,allocator<GifData *> >::_Erase
// TEMPLATE: LEGO1 0x1005a250
// list<GifData *,allocator<GifData *> >::~list<GifData *,allocator<GifData *> >
// TEMPLATE: LEGO1 0x1005a2c0
// map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::~map<char const *,GifData *,GifMapComparator,allocator<GifData *> >
// TEMPLATE: LEGO1 0x1005a450
// Map<char const *,GifData *,GifMapComparator>::~Map<char const *,GifData *,GifMapComparator>
// TEMPLATE: LEGO1 0x1005a5a0
// List<GifData *>::~List<GifData *>
// GLOBAL: LEGO1 0x100f0100
// _Tree<char const *,pair<char const * const,GifData *>,map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::_Kfn,GifMapComparator,allocator<GifData *> >::_Nil
// clang-format on
#endif // GIFMANAGER_H

View File

@ -12,7 +12,7 @@ class HelicopterSubclass {
MxResult FUN_100040a0(Vector4& p_v, float p_f);
private:
Mx4DPointFloat m_unk0x0; // 0x0
Mx4DPointFloat m_unk0x00; // 0x00
Mx4DPointFloat m_unk0x18; // 0x18
undefined4 m_unk0x30; // 0x30
};
@ -22,28 +22,28 @@ class HelicopterSubclass {
class Helicopter : public IslePathActor {
public:
Helicopter();
virtual ~Helicopter() override; // vtable+0x0
~Helicopter() override; // vtable+0x00
// FUNCTION: LEGO1 0x10003070
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0130
return "Helicopter";
}
// FUNCTION: LEGO1 0x10003080
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Helicopter::ClassName()) || IslePathActor::IsA(p_name);
}
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
virtual void VTable0x70(float p_float) override; // vtable+0x70
virtual void VTable0x74(Matrix4& p_transform) override; // vtable+0x74
virtual MxU32 VTable0xcc() override; // vtable+0xcc
virtual MxU32 VTable0xd4(MxType17NotificationParam& p_param) override; // vtable+0xd4
virtual MxU32 VTable0xd8(MxType18NotificationParam& p_param) override; // vtable+0xd8
virtual void VTable0xe4() override; // vtable+0xe4
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void VTable0x70(float p_float) override; // vtable+0x70
void VTable0x74(Matrix4& p_transform) override; // vtable+0x74
MxU32 VTable0xcc() override; // vtable+0xcc
MxU32 VTable0xd4(LegoControlManagerEvent& p_param) override; // vtable+0xd4
MxU32 VTable0xd8(MxType18NotificationParam& p_param) override; // vtable+0xd8
void VTable0xe4() override; // vtable+0xe4
// SYNTHETIC: LEGO1 0x10003210
// Helicopter::`scalar deleting destructor'

View File

@ -5,33 +5,40 @@
#include "legostate.h"
// VTABLE: LEGO1 0x100d5418
// SIZE 0xc
// SIZE 0x0c
class HelicopterState : public LegoState {
public:
// FUNCTION: LEGO1 0x1000e0d0
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0144
return "HelicopterState";
}
// FUNCTION: LEGO1 0x1000e0e0
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, HelicopterState::ClassName()) || LegoState::IsA(p_name);
}
virtual MxBool VTable0x14() override; // vtable+0x14
virtual MxBool SetFlag() override; // vtable+0x18
// FUNCTION: LEGO1 0x1000e0b0
MxBool VTable0x14() override { return FALSE; } // vtable+0x14
inline void SetUnknown8(MxU32 p_unk0x8) { m_unk0x8 = p_unk0x8; }
inline MxU32 GetUnkown8() { return m_unk0x8; }
// FUNCTION: LEGO1 0x1000e0c0
MxBool SetFlag() override
{
m_unk0x08 = 0;
return TRUE;
} // vtable+0x18
inline void SetUnknown8(MxU32 p_unk0x08) { m_unk0x08 = p_unk0x08; }
inline MxU32 GetUnkown8() { return m_unk0x08; }
// SYNTHETIC: LEGO1 0x1000e190
// HelicopterState::`scalar deleting destructor'
protected:
MxU32 m_unk0x8; // 0x8
MxU32 m_unk0x08; // 0x08
};
#endif // HELICOPTERSTATE_H

View File

@ -1,36 +1,45 @@
#ifndef HISTORYBOOK_H
#define HISTORYBOOK_H
#include "decomp.h"
#include "legogamestate.h"
#include "legoworld.h"
#include "mxstillpresenter.h"
// VTABLE: LEGO1 0x100da328
// SIZE 0x3e4
class HistoryBook : public LegoWorld {
public:
HistoryBook();
virtual ~HistoryBook() override; // vtable+0x0
~HistoryBook() override; // vtable+0x00
virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4
MxLong Notify(MxParam& p_param) override; // vtable+0x04
// FUNCTION: LEGO1 0x10082390
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f04bc
return "HistoryBook";
}
// FUNCTION: LEGO1 0x100823a0
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, HistoryBook::ClassName()) || LegoWorld::IsA(p_name);
}
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
virtual void VTable0x50() override; // vtable+0x50
virtual MxBool VTable0x64() override; // vtable+0x64
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50
MxBool VTable0x64() override; // vtable+0x64
// SYNTHETIC: LEGO1 0x100824b0
// HistoryBook::`scalar deleting destructor'
private:
LegoGameState::Area m_transitionDestination; // 0xf8
MxStillPresenter* m_alphabet[26]; // 0xfc
MxStillPresenter* m_names[20][7]; // 0x164
MxStillPresenter* m_scores[20]; // 0x394
};
#endif // HISTORYBOOK_H

View File

@ -9,29 +9,29 @@
class Hospital : public LegoWorld {
public:
Hospital();
virtual ~Hospital() override; // vtable+0x0
~Hospital() override; // vtable+0x00
virtual MxLong Notify(MxParam& p_param) override; // vtable+0x04
virtual MxResult Tickle() override; // vtable+0x08
MxLong Notify(MxParam& p_param) override; // vtable+0x04
MxResult Tickle() override; // vtable+0x08
// FUNCTION: LEGO1 0x100746b0
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0490
return "Hospital";
}
// FUNCTION: LEGO1 0x100746c0
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Hospital::ClassName()) || LegoWorld::IsA(p_name);
}
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
virtual void VTable0x50() override; // vtable+0x50
virtual MxBool VTable0x5c() override; // vtable+0x5c
virtual MxBool VTable0x64() override; // vtable+0x64
virtual void VTable0x68(MxBool p_add) override; // vtable+0x68
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50
MxBool VTable0x5c() override; // vtable+0x5c
MxBool VTable0x64() override; // vtable+0x64
void Enable(MxBool p_enable) override; // vtable+0x68
// SYNTHETIC: LEGO1 0x100747d0
// Hospital::`scalar deleting destructor'

View File

@ -8,14 +8,14 @@
class HospitalEntity : public BuildingEntity {
public:
// FUNCTION: LEGO1 0x1000ec40
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0338
return "HospitalEntity";
}
// FUNCTION: LEGO1 0x1000ec50
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, HospitalEntity::ClassName()) || BuildingEntity::IsA(p_name);
}

View File

@ -9,33 +9,34 @@
class HospitalState : public LegoState {
public:
HospitalState();
~HospitalState() override {}
// FUNCTION: LEGO1 0x10076400
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0480
return "HospitalState";
}
// FUNCTION: LEGO1 0x10076410
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, HospitalState::ClassName()) || LegoState::IsA(p_name);
}
virtual MxResult VTable0x1c(LegoFileStream* p_legoFileStream) override; // vtable+0x1c
MxResult VTable0x1c(LegoFile* p_legoFile) override; // vtable+0x1c
// SYNTHETIC: LEGO1 0x100764c0
// HospitalState::`scalar deleting destructor'
private:
undefined m_unk0x8[4]; // 0x8
undefined2 m_unk0xc; // 0xc
undefined2 m_unk0xe; // 0xe
undefined2 m_unk0x10; // 0x10
undefined2 m_unk0x12; // 0x12
undefined2 m_unk0x14; // 0x14
undefined2 m_unk0x16; // 0x16
undefined m_unk0x08[4]; // 0x08
undefined2 m_unk0x0c; // 0x0c
undefined2 m_unk0x0e; // 0x0e
undefined2 m_unk0x10; // 0x10
undefined2 m_unk0x12; // 0x12
undefined2 m_unk0x14; // 0x14
undefined2 m_unk0x16; // 0x16
};
#endif // HOSPITALSTATE_H

View File

@ -1,17 +1,23 @@
#ifndef INFOCENTER_H
#define INFOCENTER_H
#include "legogamestate.h"
#include "legoworld.h"
#include "mxrect32.h"
#include "radio.h"
class InfocenterState;
class MxStillPresenter;
class LegoControlManagerEvent;
// SIZE 0x18
struct InfocenterUnkDataEntry {
struct InfocenterMapEntry {
// FUNCTION: LEGO1 0x1006ec80
InfocenterUnkDataEntry() {}
InfocenterMapEntry() {}
undefined m_pad[0x18];
MxStillPresenter* m_presenter; // 0x00
undefined4 m_unk0x04; // 0x04
MxRect32 m_area; // 0x08
};
// VTABLE: LEGO1 0x100d9338
@ -28,9 +34,54 @@ class Infocenter : public LegoWorld {
e_goodEndMovie
};
enum Character {
e_noCharacter = 0,
e_pepper,
e_mama,
e_papa,
e_nick,
e_laura
};
enum InfomainScript {
c_noInfomain = -1,
c_leftArrowCtl = 1,
c_rightArrowCtl = 2,
c_infoCtl = 3,
c_doorCtl = 4,
c_boatCtl = 10,
c_raceCtl = 11,
c_pizzaCtl = 12,
c_gasCtl = 13,
c_medCtl = 14,
c_copCtl = 15,
c_bigInfoCtl = 16,
c_bookCtl = 17,
c_radioCtl = 18,
c_mamaCtl = 21,
c_papaCtl = 22,
c_pepperCtl = 23,
c_nickCtl = 24,
c_lauraCtl = 25,
c_mamaSelected = 30,
c_papaSelected = 31,
c_pepperSelected = 32,
c_nickSelected = 33,
c_lauraSelected = 34,
c_mamaMovie = 40,
c_papaMovie = 41,
c_pepperMovie = 42,
c_nickMovie = 43,
c_lauraMovie = 44,
c_goToRegBook = 70,
c_goToRegBookRed = 71,
c_unk499 = 499,
c_welcomeDialogue = 500,
c_goodJobDialogue = 501,
@ -92,11 +143,28 @@ class Infocenter : public LegoWorld {
c_noCDDialogueUnused1 = 552,
c_noCDDialogueUnused2 = 553,
c_gasCtlDescription = 555,
c_medCtlDescription = 556,
c_infoCtlDescription = 557,
c_boatCtlDescription = 558,
c_copCtlDescription = 559,
c_pizzaCtlDescription = 560,
c_raceCtlDescription = 561,
c_leaveInfoCenterDialogue1 = 562,
c_leaveInfoCenterDialogue2 = 563,
c_leaveInfoCenterDialogue3 = 564,
c_leaveInfoCenterDialogue4 = 565,
c_unk566 = 566,
c_unk567 = 567,
c_unk568 = 568,
c_unk569 = 569,
c_unk570 = 570,
c_unk571 = 571,
c_unk572 = 572,
c_registerToContinueDialogue = 573,
c_bricksterDialogue = 574,
@ -108,29 +176,29 @@ class Infocenter : public LegoWorld {
};
Infocenter();
virtual ~Infocenter() override;
~Infocenter() override;
virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4
virtual MxResult Tickle() override; // vtable+0x8
MxLong Notify(MxParam& p_param) override; // vtable+0x04
MxResult Tickle() override; // vtable+0x08
// FUNCTION: LEGO1 0x1006eb40
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f04ec
return "Infocenter";
}
// FUNCTION: LEGO1 0x1006eb50
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Infocenter::ClassName()) || LegoWorld::IsA(p_name);
}
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
virtual void VTable0x50() override; // vtable+0x50
virtual MxBool VTable0x5c() override; // vtable+0x5c
virtual MxBool VTable0x64() override; // vtable+0x64
virtual void VTable0x68(MxBool p_add) override; // vtable+0x68
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50
MxBool VTable0x5c() override; // vtable+0x5c
MxBool VTable0x64() override; // vtable+0x64
void Enable(MxBool p_enable) override; // vtable+0x68
// SYNTHETIC: LEGO1 0x1006ec60
// Infocenter::`scalar deleting destructor'
@ -141,16 +209,18 @@ class Infocenter : public LegoWorld {
MxLong HandleKeyPress(MxS8 p_key);
MxU8 HandleMouseMove(MxS32 p_x, MxS32 p_y);
MxU8 HandleButtonUp(MxS32 p_x, MxS32 p_y);
MxU8 HandleNotification17(MxParam&);
MxLong HandleEndAction(MxParam& p_param);
MxLong HandleNotification0(MxParam&);
MxU8 HandleClick(LegoControlManagerEvent& p_param);
MxLong HandleEndAction(MxEndActionNotificationParam& p_param);
MxLong HandleNotification0(MxNotificationParam& p_param);
void FUN_10070dc0(MxBool);
void FUN_10070e90();
void UpdateFrameHot(MxBool p_display);
void Reset();
void PlayCutscene(Cutscene p_entityId, MxBool p_scale);
void StopCutscene();
void FUN_10070d10(MxS32 p_x, MxS32 p_y);
void StartCredits();
void StopCredits();
@ -160,20 +230,20 @@ class Infocenter : public LegoWorld {
void PlayBookAnimation();
void StopBookAnimation();
InfomainScript m_currentInfomainScript; // 0xf8
MxS16 m_unk0xfc; // 0xfc
InfocenterState* m_infocenterState; // 0x100
undefined4 m_unk0x104; // 0x104
Cutscene m_currentCutscene; // 0x108
Radio m_radio; // 0x10c
undefined4 m_unk0x11c; // 0x11c
InfocenterUnkDataEntry m_entries[7]; // 0x120
MxS16 m_unk0x1c8; // 0x1c8
undefined4 m_unk0x1cc; // 0x1cc
MxS16 m_infoManDialogueTimer; // 0x1d0
MxS16 m_bookAnimationTimer; // 0x1d2
MxU16 m_unk0x1d4; // 0x1d4
MxS16 m_unk0x1d6; // 0x1d6
InfomainScript m_currentInfomainScript; // 0xf8
MxS16 m_selectedCharacter; // 0xfc
InfocenterState* m_infocenterState; // 0x100
LegoGameState::Area m_transitionDestination; // 0x104
Cutscene m_currentCutscene; // 0x108
Radio m_radio; // 0x10c
MxStillPresenter* m_unk0x11c; // 0x11c
InfocenterMapEntry m_mapAreas[7]; // 0x120
MxS16 m_unk0x1c8; // 0x1c8
MxStillPresenter* m_frameHotBitmap; // 0x1cc
MxS16 m_infoManDialogueTimer; // 0x1d0
MxS16 m_bookAnimationTimer; // 0x1d2
MxU16 m_unk0x1d4; // 0x1d4
MxS16 m_unk0x1d6; // 0x1d6
};
#endif // INFOCENTER_H

View File

@ -1,44 +1,49 @@
#ifndef INFOCENTERDOOR_H
#define INFOCENTERDOOR_H
#include "legogamestate.h"
#include "legoworld.h"
class LegoControlManagerEvent;
// VTABLE: LEGO1 0x100d72d8
// SIZE 0xfc
class InfocenterDoor : public LegoWorld {
public:
InfocenterDoor();
virtual ~InfocenterDoor(); // vtable+0x0
~InfocenterDoor() override; // vtable+0x00
virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4
MxLong Notify(MxParam& p_param) override; // vtable+0x04
// FUNCTION: LEGO1 0x100377b0
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f049c
return "InfocenterDoor";
}
// FUNCTION: LEGO1 0x100377c0
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, InfocenterDoor::ClassName()) || LegoWorld::IsA(p_name);
}
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
virtual void VTable0x50() override; // vtable+0x50
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50
// FUNCTION: LEGO1 0x100377a0
virtual MxBool VTable0x5c() override { return TRUE; } // vtable+0x5c
MxBool VTable0x5c() override { return TRUE; } // vtable+0x5c
virtual MxBool VTable0x64() override; // vtable+0x64
virtual void VTable0x68(MxBool p_add) override; // vtable+0x68
MxBool VTable0x64() override; // vtable+0x64
void Enable(MxBool p_enable) override; // vtable+0x68
// SYNTHETIC: LEGO1 0x100378d0
// InfocenterDoor::`scalar deleting destructor'
private:
MxS32 m_unk0xf8; // 0xf8
LegoGameState::Area m_unk0xf8; // 0xf8
MxLong HandleClick(LegoControlManagerEvent& p_param);
};
#endif // INFOCENTERDOOR_H

View File

@ -8,14 +8,14 @@
class InfoCenterEntity : public BuildingEntity {
public:
// FUNCTION: LEGO1 0x1000ea00
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f035c
return "InfoCenterEntity";
}
// FUNCTION: LEGO1 0x1000ea10
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, InfoCenterEntity::ClassName()) || BuildingEntity::IsA(p_name);
}

View File

@ -2,6 +2,7 @@
#define INFOCENTERSTATE_H
#include "decomp.h"
#include "legogamestate.h"
#include "legostate.h"
#include "mxstillpresenter.h"
@ -10,26 +11,32 @@
class InfocenterState : public LegoState {
public:
InfocenterState();
virtual ~InfocenterState();
~InfocenterState() override;
// FUNCTION: LEGO1 0x10071840
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f04dc
return "InfocenterState";
}
// FUNCTION: LEGO1 0x10071850
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, InfocenterState::ClassName()) || LegoState::IsA(p_name);
}
// FUNCTION: LEGO1 0x10071830
virtual MxBool VTable0x14() override { return FALSE; } // vtable+0x14
MxBool VTable0x14() override { return FALSE; } // vtable+0x14
inline MxS16 GetInfocenterBufferSize() { return sizeof(m_buffer) / sizeof(m_buffer[0]); }
inline MxStillPresenter* GetInfocenterBufferElement(MxS32 p_index) { return m_buffer[p_index]; }
inline MxS16 GetMaxNameLength() { return _countof(m_letters); }
inline MxStillPresenter* GetNameLetter(MxS32 p_index) { return m_letters[p_index]; }
inline MxBool HasRegistered() { return m_letters[0] != NULL; }
inline Playlist& GetExitDialogueAct1() { return m_exitDialogueAct1; }
inline Playlist& GetExitDialogueAct23() { return m_exitDialogueAct23; }
inline Playlist& GetReturnDialogue(LegoGameState::Act p_act) { return m_returnDialogue[p_act]; }
inline Playlist& GetLeaveDialogue(LegoGameState::Act p_act) { return m_leaveDialogue[p_act]; }
inline Playlist& GetBricksterDialogue() { return m_bricksterDialogue; }
inline MxU32 GetUnknown0x74() { return m_unk0x74; }
inline void SetUnknown0x74(MxU32 p_unk0x74) { m_unk0x74 = p_unk0x74; }
@ -38,37 +45,13 @@ class InfocenterState : public LegoState {
// InfocenterState::`scalar deleting destructor'
private:
// Members should be renamed with their offsets before use
/*
struct UnkStruct
{
undefined4 unk1;
undefined2 unk2;
undefined2 unk3;
undefined2 unk4;
};
undefined2 unk1;
undefined2 unk2;
undefined4 unk3;
undefined4 padding1;
void *unk4;
undefined2 unk5;
undefined2 unk6;
undefined2 unk7;
undefined2 padding2;
void *unk8;
undefined2 unk9;
undefined2 unk10;
undefined2 unk11;
undefined2 padding3;
UnkStruct unk12[6];
undefined4 unk13;
*/
undefined m_pad[0x6c];
MxU32 m_unk0x74; // 0x74
MxStillPresenter* m_buffer[7]; // 0x78
Playlist m_exitDialogueAct1; // 0x08
Playlist m_exitDialogueAct23; // 0x14
Playlist m_returnDialogue[3]; // 0x20
Playlist m_leaveDialogue[3]; // 0x44
Playlist m_bricksterDialogue; // 0x68
MxU32 m_unk0x74; // 0x74
MxStillPresenter* m_letters[7]; // 0x78
};
#endif // INFOCENTERSTATE_H

View File

@ -20,35 +20,34 @@ class Act1State;
// VTABLE: LEGO1 0x100d6fb8
// SIZE 0x140
// Radio at 0x12c
class Isle : public LegoWorld {
public:
Isle();
virtual ~Isle() override;
virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4
~Isle() override;
MxLong Notify(MxParam& p_param) override; // vtable+0x04
// FUNCTION: LEGO1 0x10030910
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0458
return "Isle";
}
// FUNCTION: LEGO1 0x10030920
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Isle::ClassName()) || LegoWorld::IsA(p_name);
}
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
virtual void VTable0x50() override; // vtable+50
virtual void VTable0x58(MxCore* p_object) override; // vtable+58
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+50
void Add(MxCore* p_object) override; // vtable+58
// FUNCTION: LEGO1 0x10030900
virtual MxBool VTable0x5c() override { return TRUE; } // vtable+5c
MxBool VTable0x5c() override { return TRUE; } // vtable+5c
// FUNCTION: LEGO1 0x10033170
virtual void VTable0x60() override {} // vtable+60
virtual MxBool VTable0x64() override; // vtable+64
virtual void VTable0x68(MxBool p_add) override; // vtable+68
void VTable0x60() override {} // vtable+60
MxBool VTable0x64() override; // vtable+64
void Enable(MxBool p_enable) override; // vtable+68
virtual void VTable0x6c(IslePathActor* p_actor); // vtable+6c
inline void SetUnknown13c(MxU32 p_unk0x13c) { m_unk0x13c = p_unk0x13c; }

View File

@ -6,22 +6,22 @@
// VTABLE: LEGO1 0x100d5178
class IsleActor : public LegoActor {
public:
virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4
MxLong Notify(MxParam& p_param) override; // vtable+0x04
// FUNCTION: LEGO1 0x1000e660
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f07dc
return "IsleActor";
}
// FUNCTION: LEGO1 0x1000e670
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, IsleActor::ClassName()) || LegoActor::IsA(p_name);
}
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
};
// SYNTHETIC: LEGO1 0x1000e940

View File

@ -1,9 +1,9 @@
#ifndef ISLEPATHACTOR_H
#define ISLEPATHACTOR_H
#include "legocontrolmanager.h"
#include "legopathactor.h"
#include "legoworld.h"
#include "mxtype17notificationparam.h"
#include "mxtype18notificationparam.h"
#include "mxtype19notificationparam.h"
#include "mxtypes.h"
@ -15,31 +15,31 @@ class IslePathActor : public LegoPathActor {
IslePathActor();
// FUNCTION: LEGO1 0x10002e10
inline virtual ~IslePathActor() override { IslePathActor::Destroy(TRUE); } // vtable+0x0
inline ~IslePathActor() override { IslePathActor::Destroy(TRUE); } // vtable+0x00
virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4
MxLong Notify(MxParam& p_param) override; // vtable+0x04
// FUNCTION: LEGO1 0x10002ea0
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0104
return "IslePathActor";
}
// FUNCTION: LEGO1 0x10002eb0
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, IslePathActor::ClassName()) || LegoPathActor::IsA(p_name);
}
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
virtual void Destroy(MxBool p_fromDestructor) override; // vtable+0x1c
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void Destroy(MxBool p_fromDestructor) override; // vtable+0x1c
// FUNCTION: LEGO1 0x10002e70
virtual MxU32 VTable0xcc() { return 0; } // vtable+0xcc
// FUNCTION: LEGO1 0x10002df0
virtual MxU32 VTable0xd0() { return 0; } // vtable+0xd0
// FUNCTION: LEGO1 0x10002e80
virtual MxU32 VTable0xd4(MxType17NotificationParam&) { return 0; } // vtable+0xd4
virtual MxU32 VTable0xd4(LegoControlManagerEvent&) { return 0; } // vtable+0xd4
// FUNCTION: LEGO1 0x10002e90
virtual MxU32 VTable0xd8(MxType18NotificationParam&) { return 0; } // vtable+0xd8
// FUNCTION: LEGO1 0x10002e00

View File

@ -3,7 +3,7 @@
#include "decomp.h"
#include "islepathactor.h"
#include "mxtype17notificationparam.h"
#include "legocontrolmanager.h"
// VTABLE: LEGO1 0x100d9ec8
// SIZE 0x164
@ -12,23 +12,23 @@ class Jetski : public IslePathActor {
Jetski();
// FUNCTION: LEGO1 0x1007e430
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f03d8
return "Jetski";
}
// FUNCTION: LEGO1 0x1007e440
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Jetski::ClassName()) || IslePathActor::IsA(p_name);
}
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
virtual void VTable0x70(float p_float) override; // vtable+0x70
virtual MxU32 VTable0xcc() override; // vtable+0xcc
virtual MxU32 VTable0xd4(MxType17NotificationParam&) override; // vtable+0xd4
virtual void VTable0xe4() override; // vtable+0xe4
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void VTable0x70(float p_float) override; // vtable+0x70
MxU32 VTable0xcc() override; // vtable+0xcc
MxU32 VTable0xd4(LegoControlManagerEvent&) override; // vtable+0xd4
void VTable0xe4() override; // vtable+0xe4
// SYNTHETIC: LEGO1 0x1007e5c0
// Jetski::`scalar deleting destructor'

View File

@ -8,17 +8,27 @@
class JetskiRace : public LegoRace {
public:
// FUNCTION: LEGO1 0x1000daf0
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0530
return "JetskiRace";
}
// FUNCTION: LEGO1 0x1000db00
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, JetskiRace::ClassName()) || LegoRace::IsA(p_name);
}
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50
MxBool VTable0x64() override; // vtable+0x64
undefined4 VTable0x6c(undefined4) override; // vtable+0x6c
undefined4 VTable0x70(undefined4) override; // vtable+0x70
undefined4 VTable0x74(undefined4) override; // vtable+0x74
};
// SYNTHETIC: LEGO1 0x1000f530
// JetskiRace::`scalar deleting destructor'
#endif // JETSKIRACE_H

View File

@ -8,14 +8,14 @@
class JetskiRaceState : public RaceState {
public:
// FUNCTION: LEGO1 0x1000dc40
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f00ac
return "JetskiRaceState";
}
// FUNCTION: LEGO1 0x1000dc50
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, JetskiRaceState::ClassName()) || RaceState::IsA(p_name);
}

View File

@ -10,30 +10,31 @@ class JukeBox : public LegoWorld {
public:
JukeBox();
virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4
virtual MxResult Tickle() override; // vtable+0x8
MxLong Notify(MxParam& p_param) override; // vtable+0x04
MxResult Tickle() override; // vtable+0x08
// FUNCTION: LEGO1 0x1005d6f0
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f02cc
return "JukeBox";
}
// FUNCTION: LEGO1 0x1005d700
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, JukeBox::ClassName()) || LegoWorld::IsA(p_name);
}
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
virtual void VTable0x50() override; // vtable+0x50
virtual MxBool VTable0x5c() override; // vtable+0x5c
virtual MxBool VTable0x64() override; // vtable+0x64
virtual void VTable0x68(MxBool p_add) override; // vtable+0x68
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50
MxBool VTable0x5c() override; // vtable+0x5c
MxBool VTable0x64() override; // vtable+0x64
void Enable(MxBool p_enable) override; // vtable+0x68
// SYNTHETIC: LEGO1 0x1005d810
// JukeBox::`scalar deleting destructor'
enum JukeBoxScript {
e_mamaPapaBrickolini,
e_jailUnused,
@ -65,29 +66,18 @@ class JukeBox : public LegoWorld {
e_legoRadioReminder2,
e_legoRadioRacingAd,
e_legoRadioNews1,
e_legoRadioNews2,
e_legoRadioPizzaAd1,
e_legoRadioBricksterPSA,
e_legoRadioSports1,
e_legoRadioIntermission1,
e_legoRadioIntermission2,
e_legoRadioPizzaAd2,
e_legoRadioWeatherReport,
e_legoRadioSports2,
e_legoRadioPizzaAd3,
e_legoRadioIntermission3,
e_legoRadioSuperStoreAd,
e_legoRadioLuckyYou,

View File

@ -8,25 +8,33 @@
class JukeBoxEntity : public LegoEntity {
public:
JukeBoxEntity();
virtual ~JukeBoxEntity() override; // vtable+0x0
~JukeBoxEntity() override; // vtable+0x00
virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4
MxLong Notify(MxParam& p_param) override; // vtable+0x04
// FUNCTION: LEGO1 0x10085cc0
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f02f0
return "JukeBoxEntity";
}
// FUNCTION: LEGO1 0x10085cd0
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, JukeBoxEntity::ClassName()) || LegoEntity::IsA(p_name);
}
void StartAction();
void StopAction(MxU32 p_state);
inline MxBool IsBackgroundAudioEnabled() { return m_audioEnabled; }
// SYNTHETIC: LEGO1 0x10085db0
// JukeBoxEntity::`scalar deleting destructor'
protected:
MxBool m_audioEnabled; // 0x68
};
#endif // JUKEBOXENTITY_H

View File

@ -8,22 +8,30 @@
class JukeBoxState : public LegoState {
public:
// FUNCTION: LEGO1 0x1000f310
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f02bc
return "JukeBoxState";
}
// FUNCTION: LEGO1 0x1000f320
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, JukeBoxState::ClassName()) || LegoState::IsA(p_name);
}
virtual MxBool VTable0x14() override; // vtable+0x14
MxBool VTable0x14() override; // vtable+0x14
inline MxU32 IsActive() { return m_active; }
inline void SetActive(MxU32 p_active) { m_active = p_active; }
inline MxU32 GetState() { return m_state; }
// SYNTHETIC: LEGO1 0x1000f3d0
// JukeBoxState::`scalar deleting destructor'
protected:
MxU32 m_state; // 0x08
MxU32 m_active; // 0x0c
};
#endif // JUKEBOXSTATE_H

View File

@ -1,6 +1,8 @@
#ifndef LEGO3DWAVEPRESENTER_H
#define LEGO3DWAVEPRESENTER_H
#include "decomp.h"
#include "legounknown100d5778.h"
#include "mxwavepresenter.h"
// VTABLE: LEGO1 0x100d52b0
@ -8,25 +10,29 @@
class Lego3DWavePresenter : public MxWavePresenter {
public:
// FUNCTION: LEGO1 0x1000d890
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f058c
return "Lego3DWavePresenter";
}
// FUNCTION: LEGO1 0x1000d8a0
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Lego3DWavePresenter::ClassName()) || MxWavePresenter::IsA(p_name);
}
virtual void StartingTickle() override; // vtable+0x1c
virtual void StreamingTickle() override; // vtable+0x20
virtual MxResult AddToManager() override; // vtable+0x34
virtual void Destroy() override; // vtable+0x38
void StartingTickle() override; // vtable+0x1c
void StreamingTickle() override; // vtable+0x20
MxResult AddToManager() override; // vtable+0x34
void Destroy() override; // vtable+0x38
// SYNTHETIC: LEGO1 0x1000f4b0
// Lego3DWavePresenter::`scalar deleting destructor'
private:
undefined m_unk0x6c[4]; // 0x6c
LegoUnknown100d5778 m_unk0x70; // 0x70
};
#endif // LEGO3DWAVEPRESENTER_H

View File

@ -9,14 +9,14 @@
// SIZE 0x1154
class LegoAct2 : public LegoWorld {
virtual MxLong Notify(MxParam& p_param) override; // vtable+0x04
virtual MxResult Tickle() override; // vtable+0x08
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
virtual void VTable0x50() override; // vtable+0x50
virtual MxBool VTable0x5c() override; // vtable+0x5c
virtual void VTable0x60() override; // vtable+0x60
virtual MxBool VTable0x64() override; // vtable+0x64
virtual void VTable0x68(MxBool p_add) override; // vtable+0x68
MxLong Notify(MxParam& p_param) override; // vtable+0x04
MxResult Tickle() override; // vtable+0x08
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50
MxBool VTable0x5c() override; // vtable+0x5c
void VTable0x60() override; // vtable+0x60
MxBool VTable0x64() override; // vtable+0x64
void Enable(MxBool p_enable) override; // vtable+0x68
// SYNTHETIC: LEGO1 0x1004fe20
// LegoAct2::`scalar deleting destructor'

View File

@ -7,23 +7,31 @@
// SIZE 0x10
class LegoAct2State : public LegoState {
public:
~LegoAct2State() override {}
// FUNCTION: LEGO1 0x1000df80
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0428
return "LegoAct2State";
}
// FUNCTION: LEGO1 0x1000df90
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, LegoAct2State::ClassName()) || LegoState::IsA(p_name);
}
virtual MxBool VTable0x14() override; // vtable+0x14
MxBool VTable0x14() override; // vtable+0x14
// SYNTHETIC: LEGO1 0x1000e040
// LegoAct2State::`scalar deleting destructor'
inline undefined4 GetUnknown0x08() { return m_unk0x08; }
private:
undefined4 m_unk0x08; // 0x08
undefined4 m_unk0x0c; // 0x0c
};
#endif // LEGOACT2STATE_H

View File

@ -10,25 +10,25 @@
class LegoActionControlPresenter : public MxMediaPresenter {
public:
inline LegoActionControlPresenter() { m_unk0x50 = Extra::ActionType::e_none; }
virtual ~LegoActionControlPresenter() override { Destroy(TRUE); }; // vtable+0x00
~LegoActionControlPresenter() override { Destroy(TRUE); } // vtable+0x00
// FUNCTION: LEGO1 0x1000d0e0
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f05bc
return "LegoActionControlPresenter";
}
// FUNCTION: LEGO1 0x1000d0f0
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, LegoActionControlPresenter::ClassName()) || MxMediaPresenter::IsA(p_name);
}
virtual void ReadyTickle() override; // vtable+0x18
virtual void RepeatingTickle() override; // vtable+0x24
virtual void ParseExtra() override; // vtable+0x30
virtual MxResult AddToManager() override; // vtable+0x34
void ReadyTickle() override; // vtable+0x18
void RepeatingTickle() override; // vtable+0x24
void ParseExtra() override; // vtable+0x30
MxResult AddToManager() override; // vtable+0x34
virtual void Destroy(MxBool p_fromDestructor); // vtable+0x5c
private:

View File

@ -2,6 +2,7 @@
#define LEGOACTOR_H
#include "decomp.h"
#include "legocachesound.h"
#include "legoentity.h"
// VTABLE: LEGO1 0x100d6d68
@ -9,42 +10,47 @@
class LegoActor : public LegoEntity {
public:
LegoActor();
virtual ~LegoActor() override;
~LegoActor() override;
// FUNCTION: LEGO1 0x1002d210
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0124
return "LegoActor";
}
// FUNCTION: LEGO1 0x1002d220
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, LegoActor::ClassName()) || LegoEntity::IsA(p_name);
}
virtual void ParseAction(char*) override; // vtable+0x20
virtual void SetROI(LegoROI* p_roi, MxBool p_bool1, MxBool p_bool2) override; // vtable+0x24
void ParseAction(char*) override; // vtable+0x20
void SetROI(LegoROI* p_roi, MxBool p_bool1, MxBool p_bool2) override; // vtable+0x24
// FUNCTION: LEGO1 0x10002cc0
virtual MxFloat VTable0x50() { return m_unk0x68; } // vtable+0x50
// FUNCTION: LEGO1 0x10002cd0
virtual void VTable0x54(MxFloat p_unk0x68) { m_unk0x68 = p_unk0x68; } // vtable+0x54
// FUNCTION: LEGO1 0x10002ce0
virtual void VTable0x58(MxFloat p_unk0x70) { m_unk0x70 = p_unk0x70; } // vtable+0x58
// FUNCTION: LEGO1 0x10002cf0
virtual MxFloat VTable0x5c() { return m_unk0x70; } // vtable+0x5c
// FUNCTION: LEGO1 0x10002d00
virtual MxU8 VTable0x60() { return m_unk0x74; } // vtable+0x60
// FUNCTION: LEGO1 0x10002d10
virtual void VTable0x64(MxU8 p_unk0x74) { m_unk0x74 = p_unk0x74; } // vtable+0x64
private:
MxFloat m_unk0x68; // 0x68
undefined4 m_unk0x6c; // 0x6c
MxFloat m_unk0x70; // 0x70
MxU8 m_unk0x74; // 0x74
MxFloat m_unk0x68; // 0x68
LegoCacheSound* m_sound; // 0x6c
MxFloat m_unk0x70; // 0x70
MxU8 m_unk0x74; // 0x74
};
// SYNTHETIC: LEGO1 0x1002d300

View File

@ -7,24 +7,24 @@
// SIZE 0x50
class LegoActorPresenter : public LegoEntityPresenter {
public:
virtual ~LegoActorPresenter() override{};
~LegoActorPresenter() override{};
// FUNCTION: LEGO1 0x1000cb10
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f06a4
return "LegoActorPresenter";
}
// FUNCTION: LEGO1 0x1000cb20
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, LegoActorPresenter::ClassName()) || LegoEntityPresenter::IsA(p_name);
}
virtual void ReadyTickle() override; // vtable+0x18
virtual void StartingTickle() override; // vtable+0x1c
virtual void ParseExtra() override; // vtable+0x30
void ReadyTickle() override; // vtable+0x18
void StartingTickle() override; // vtable+0x1c
void ParseExtra() override; // vtable+0x30
};
// SYNTHETIC: LEGO1 0x1000cc30

View File

@ -9,36 +9,41 @@
class LegoAnimationManager : public MxCore {
public:
LegoAnimationManager();
virtual ~LegoAnimationManager() override; // vtable+0x0
~LegoAnimationManager() override; // vtable+0x00
virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4
virtual MxResult Tickle() override; // vtable+0x8
MxLong Notify(MxParam& p_param) override; // vtable+0x04
MxResult Tickle() override; // vtable+0x08
// FUNCTION: LEGO1 0x1005ec80
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f7508
return "LegoAnimationManager";
}
// FUNCTION: LEGO1 0x1005ec90
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, ClassName()) || MxCore::IsA(p_name);
}
void FUN_1005ee80(MxBool);
void FUN_1005ef10();
void FUN_1005f0b0();
void FUN_1005f6d0(MxBool);
void FUN_1005f720(undefined4);
void FUN_1005f720(MxS32 p_scriptIndex);
void FUN_10061010(undefined4);
void FUN_10064670(MxBool);
__declspec(dllexport) static void configureLegoAnimationManager(MxS32 p_legoAnimationManagerConfig);
static void configureLegoAnimationManager(MxS32 p_legoAnimationManagerConfig);
// SYNTHETIC: LEGO1 0x1005ed10
// LegoAnimationManager::`scalar deleting destructor'
private:
void Init();
undefined m_unk0x08[0x4f8]; // 0x08
};
#endif // LEGOANIMATIONMANAGER_H

View File

@ -9,30 +9,30 @@ class LegoAnimMMPresenter : public MxCompositePresenter {
public:
LegoAnimMMPresenter();
virtual MxLong Notify(MxParam& p_param) override; // vtable+0x04
MxLong Notify(MxParam& p_param) override; // vtable+0x04
// FUNCTION: LEGO1 0x1004a950
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f046c
return "LegoAnimMMPresenter";
}
// FUNCTION: LEGO1 0x1004a960
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, LegoAnimMMPresenter::ClassName()) || MxCompositePresenter::IsA(p_name);
}
virtual void ReadyTickle() override; // vtable+0x18
virtual void StartingTickle() override; // vtable+0x1c
virtual void StreamingTickle() override; // vtable+0x20
virtual void RepeatingTickle() override; // vtable+0x24
virtual void DoneTickle() override; // vtable+0x2c
virtual void ParseExtra() override; // vtable+0x30
virtual MxResult StartAction(MxStreamController* p_controller, MxDSAction* p_action) override; // vtable+0x3c
virtual void EndAction() override; // vtable+0x40
virtual void VTable0x60(MxPresenter* p_presenter) override; // vtable+0x60
void ReadyTickle() override; // vtable+0x18
void StartingTickle() override; // vtable+0x1c
void StreamingTickle() override; // vtable+0x20
void RepeatingTickle() override; // vtable+0x24
void DoneTickle() override; // vtable+0x2c
void ParseExtra() override; // vtable+0x30
MxResult StartAction(MxStreamController* p_controller, MxDSAction* p_action) override; // vtable+0x3c
void EndAction() override; // vtable+0x40
void VTable0x60(MxPresenter* p_presenter) override; // vtable+0x60
// SYNTHETIC: LEGO1 0x1004aa40
// LegoAnimMMPresenter::`scalar deleting destructor'

View File

@ -1,11 +1,11 @@
#ifndef LEGOANIMPRESENTER_H
#define LEGOANIMPRESENTER_H
#include "anim/legoanim.h"
#include "mxgeometry/mxgeometry3d.h"
#include "mxvideopresenter.h"
class LegoWorld;
class LegoMemoryStream;
class LegoAnimClass;
// VTABLE: LEGO1 0x100d90c8
@ -13,40 +13,42 @@ class LegoAnimClass;
class LegoAnimPresenter : public MxVideoPresenter {
public:
LegoAnimPresenter();
virtual ~LegoAnimPresenter() override;
~LegoAnimPresenter() override;
// FUNCTION: LEGO1 0x10068530
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f071c
return "LegoAnimPresenter";
}
// FUNCTION: LEGO1 0x10068540
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, LegoAnimPresenter::ClassName()) || MxVideoPresenter::IsA(p_name);
}
virtual void ReadyTickle() override; // vtable+0x18
virtual void StartingTickle() override; // vtable+0x1c
virtual void StreamingTickle() override; // vtable+0x20
virtual void DoneTickle() override; // vtable+0x2c
virtual void ParseExtra() override; // vtable+0x30
virtual MxResult AddToManager() override; // vtable+0x34
virtual void Destroy() override; // vtable+0x38
virtual MxResult StartAction(MxStreamController* p_controller, MxDSAction* p_action) override; // vtable+0x3c
virtual void EndAction() override; // vtable+0x40
virtual void PutFrame() override; // vtable+0x6c
virtual MxResult VTable0x88(MxStreamChunk* p_chunk); // vtable+0x88
void ReadyTickle() override; // vtable+0x18
void StartingTickle() override; // vtable+0x1c
void StreamingTickle() override; // vtable+0x20
void DoneTickle() override; // vtable+0x2c
void ParseExtra() override; // vtable+0x30
MxResult AddToManager() override; // vtable+0x34
void Destroy() override; // vtable+0x38
MxResult StartAction(MxStreamController* p_controller, MxDSAction* p_action) override; // vtable+0x3c
void EndAction() override; // vtable+0x40
void PutFrame() override; // vtable+0x6c
virtual MxResult VTable0x88(MxStreamChunk* p_chunk); // vtable+0x88
// 6 more virtual functions here
inline LegoAnim* GetAnimation() { return m_anim; }
private:
const char* GetActionObjectName();
protected:
void Init();
void Destroy(MxBool p_fromDestructor);
LegoAnimClass* m_unk0x64; // 0x64
LegoAnim* m_anim; // 0x64
undefined4 m_unk0x68; // 0x68
undefined4 m_unk0x6c; // 0x6c
undefined4 m_unk0x70; // 0x70
@ -73,41 +75,4 @@ class LegoAnimPresenter : public MxVideoPresenter {
// SYNTHETIC: LEGO1 0x10068650
// LegoAnimPresenter::`scalar deleting destructor'
// VTABLE: LEGO1 0x100db768
// SIZE 0x08
class LegoAnimClassBase {
public:
LegoAnimClassBase();
virtual ~LegoAnimClassBase();
virtual void VTable0x4(); // vtable+0x04
virtual void VTable0x8(); // vtable+0x08
virtual void VTable0xc(); // vtable+0x0c
undefined4 m_unk0x4; // 0x04
};
// SYNTHETIC: LEGO1 0x10099de0
// LegoAnimClassBase::`scalar deleting destructor'
// VTABLE: LEGO1 0x100db8d8
// SIZE 0x18
class LegoAnimClass : public LegoAnimClassBase {
public:
LegoAnimClass();
virtual ~LegoAnimClass() override;
virtual void VTable0x8() override; // vtable+0x08
virtual void VTable0xc() override; // vtable+0x0c
virtual MxResult VTable0x10(LegoMemoryStream* p_stream, MxS32); // vtable+0x10
MxLong m_unk0x8; // 0x08
undefined4 m_unk0xc; // 0x0c
undefined4 m_unk0x10; // 0x10
undefined4 m_unk0x14; // 0x14
};
// SYNTHETIC: LEGO1 0x100a0ba0
// LegoAnimClass::`scalar deleting destructor'
#endif // LEGOANIMPRESENTER_H

View File

@ -7,8 +7,8 @@
// SIZE 0x30
class LegoBackgroundColor : public MxVariable {
public:
__declspec(dllexport) LegoBackgroundColor(const char* p_key, const char* p_value);
virtual void SetValue(const char* p_colorString) override;
LegoBackgroundColor(const char* p_key, const char* p_value);
void SetValue(const char* p_colorString) override;
private:
float m_h;

View File

@ -1,6 +1,7 @@
#ifndef LEGOBUILDINGMANAGER_H
#define LEGOBUILDINGMANAGER_H
#include "decomp.h"
#include "mxcore.h"
// VTABLE: LEGO1 0x100d6f50
@ -8,26 +9,33 @@
class LegoBuildingManager : public MxCore {
public:
LegoBuildingManager();
virtual ~LegoBuildingManager() override;
~LegoBuildingManager() override;
virtual MxResult Tickle() override; // vtable+0x08
MxResult Tickle() override; // vtable+0x08
// FUNCTION: LEGO1 0x1002f930
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f37d0
return "LegoBuildingManager";
}
__declspec(dllexport) static void configureLegoBuildingManager(MxS32);
static void configureLegoBuildingManager(MxS32);
static void SetCustomizeAnimFile(const char* p_value);
void FUN_1002fa00();
void FUN_1002fb30();
void FUN_10030590();
// SYNTHETIC: LEGO1 0x1002f940
// LegoBuildingManager::`scalar deleting destructor'
private:
static char* g_customizeAnimFile;
void Init();
undefined m_unk0x08[0x28]; // 0x08
};
#endif // LEGOBUILDINGMANAGER_H

View File

@ -1,33 +1,63 @@
#ifndef LEGOCACHESOUND_H
#define LEGOCACHESOUND_H
#include "decomp.h"
#include "legounknown100d5778.h"
#include "mxcore.h"
#include "mxstring.h"
// VTABLE: LEGO1 0x100d4718
// SIZE 0x88
class LegoCacheSound : public MxCore {
public:
LegoCacheSound();
virtual ~LegoCacheSound() override; // vtable+0x0
~LegoCacheSound() override; // vtable+0x00
// FUNCTION: LEGO1 0x10006580
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f01c4
return "LegoCacheSound";
}
// FUNCTION: LEGO1 0x10006590
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, LegoCacheSound::ClassName()) || MxCore::IsA(p_name);
}
virtual MxResult FUN_10006710(); // vtable+0x14
virtual void Destroy(); // vtable+0x18
virtual void FUN_10006cd0(undefined4, undefined4); // vtable+0x1c
inline const MxString& GetString0x48() const { return m_string0x48; }
inline const undefined GetUnk0x58() const { return m_unk0x58; }
LegoCacheSound* FUN_10006960();
MxResult FUN_10006a30(char* p_str, MxBool);
void FUN_10006b80();
void FUN_10006be0();
// SYNTHETIC: LEGO1 0x10006610
// LegoCacheSound::`scalar deleting destructor'
private:
void Init();
LPDIRECTSOUNDBUFFER m_dsBuffer; // 0x08
undefined m_unk0xc[4]; // 0x0c
LegoUnknown100d5778 m_unk0x10; // 0x10
undefined* m_unk0x40; // 0x40
undefined4 m_unk0x44; // 0x44
MxString m_string0x48; // 0x48
undefined m_unk0x58; // 0x58
PCMWAVEFORMAT m_unk0x59; // 0x59
MxBool m_isLooping; // 0x69
MxBool m_unk0x6a; // 0x6a
undefined4 m_unk0x6c; // 0x6c
undefined m_unk0x70; // 0x70
MxString m_string0x74; // 0x74
undefined m_unk0x84; // 0x84
};
#endif // LEGOCACHESOUND_H

View File

@ -0,0 +1,104 @@
#ifndef LEGOCACHESOUNDLIST_H
#define LEGOCACHESOUNDLIST_H
#include "mxlist.h"
#include "mxtypes.h"
class LegoCacheSound;
// VTABLE: LEGO1 0x100d63b0
// class MxCollection<LegoCacheSound *>
// VTABLE: LEGO1 0x100d63c8
// class MxList<LegoCacheSound *>
// VTABLE: LEGO1 0x100d63e0
// class MxPtrList<LegoCacheSound>
// VTABLE: LEGO1 0x100d63f8
// SIZE 0x18
class LegoCacheSoundList : public MxPtrList<LegoCacheSound> {
public:
LegoCacheSoundList(MxBool p_ownership = FALSE) : MxPtrList<LegoCacheSound>(p_ownership) {}
// FUNCTION: LEGO1 0x1001e650
MxS8 Compare(LegoCacheSound* p_a, LegoCacheSound* p_b) override
{
return p_a == p_b ? 0 : p_a < p_b ? -1 : 1;
} // vtable+0x14
};
// VTABLE: LEGO1 0x100d64a0
// class MxListCursor<LegoCacheSound *>
// VTABLE: LEGO1 0x100d6500
// class MxPtrListCursor<LegoCacheSound>
// VTABLE: LEGO1 0x100d6518
// SIZE 0x10
class LegoCacheSoundListCursor : public MxPtrListCursor<LegoCacheSound> {
public:
LegoCacheSoundListCursor(LegoCacheSoundList* p_list) : MxPtrListCursor<LegoCacheSound>(p_list){};
};
// TEMPLATE: LEGO1 0x1001e670
// MxCollection<LegoCacheSound *>::Compare
// TEMPLATE: LEGO1 0x1001e680
// MxCollection<LegoCacheSound *>::~MxCollection<LegoCacheSound *>
// TEMPLATE: LEGO1 0x1001e6d0
// MxCollection<LegoCacheSound *>::Destroy
// TEMPLATE: LEGO1 0x1001e6e0
// MxList<LegoCacheSound *>::~MxList<LegoCacheSound *>
// TEMPLATE: LEGO1 0x1001e770
// MxPtrList<LegoCacheSound>::Destroy
// SYNTHETIC: LEGO1 0x1001e780
// LegoCacheSoundList::`scalar deleting destructor'
// TEMPLATE: LEGO1 0x1001e7f0
// MxPtrList<LegoCacheSound>::~MxPtrList<LegoCacheSound>
// SYNTHETIC: LEGO1 0x1001e840
// MxCollection<LegoCacheSound *>::`scalar deleting destructor'
// SYNTHETIC: LEGO1 0x1001e8b0
// MxList<LegoCacheSound *>::`scalar deleting destructor'
// SYNTHETIC: LEGO1 0x1001e960
// MxPtrList<LegoCacheSound>::`scalar deleting destructor'
// SYNTHETIC: LEGO1 0x1001f350
// LegoCacheSoundListCursor::`scalar deleting destructor'
// TEMPLATE: LEGO1 0x1001f3c0
// MxPtrListCursor<LegoCacheSound>::~MxPtrListCursor<LegoCacheSound>
// SYNTHETIC: LEGO1 0x1001f410
// MxListCursor<LegoCacheSound *>::`scalar deleting destructor'
// SYNTHETIC: LEGO1 0x1001f480
// MxPtrListCursor<LegoCacheSound>::`scalar deleting destructor'
// TEMPLATE: LEGO1 0x1001f4f0
// MxListCursor<LegoCacheSound *>::~MxListCursor<LegoCacheSound *>
// FUNCTION: LEGO1 0x1001f540
// LegoCacheSoundListCursor::~LegoCacheSoundListCursor
// TEMPLATE: LEGO1 0x10020840
// MxListCursor<LegoCacheSound *>::MxListCursor<LegoCacheSound *>
// TEMPLATE: LEGO1 0x100224e0
// MxList<LegoCacheSound *>::InsertEntry
// TEMPLATE: LEGO1 0x10022590
// MxListCursor<LegoCacheSound *>::Find
// TEMPLATE: LEGO1 0x10022680
// MxList<LegoCacheSound *>::DeleteEntry
#endif // LEGOCACHESOUNDLIST_H

View File

@ -12,19 +12,19 @@
class LegoCameraController : public LegoPointOfViewController {
public:
LegoCameraController();
virtual ~LegoCameraController() override; // vtable+0x0
~LegoCameraController() override; // vtable+0x00
virtual MxLong Notify(MxParam& p_param) override; // vtable+04
MxLong Notify(MxParam& p_param) override; // vtable+04
// FUNCTION: LEGO1 0x10011ec0
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0850
return "LegoCameraController";
}
// FUNCTION: LEGO1 0x10011ed0
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, ClassName()) || MxCore::IsA(p_name);
}

View File

@ -8,29 +8,29 @@
class LegoCarBuild : public LegoWorld {
public:
LegoCarBuild();
virtual ~LegoCarBuild() override;
~LegoCarBuild() override;
virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4
virtual MxResult Tickle() override; // vtable+0x8
MxLong Notify(MxParam& p_param) override; // vtable+0x04
MxResult Tickle() override; // vtable+0x08
// FUNCTION: LEGO1 0x10022940
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0504
return "LegoCarBuild";
}
// FUNCTION: LEGO1 0x10022950
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, LegoCarBuild::ClassName()) || LegoWorld::IsA(p_name);
}
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
virtual void VTable0x50() override; // vtable+0x50
virtual MxBool VTable0x5c() override; // vtable+0x5c
virtual MxBool VTable0x64() override; // vtable+0x64
virtual void VTable0x68(MxBool p_add) override; // vtable+0x68
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50
MxBool VTable0x5c() override; // vtable+0x5c
MxBool VTable0x64() override; // vtable+0x64
void Enable(MxBool p_enable) override; // vtable+0x68
// SYNTHETIC: LEGO1 0x10022a60
// LegoCarBuild::`scalar deleting destructor'

View File

@ -8,26 +8,26 @@
class LegoCarBuildAnimPresenter : public LegoAnimPresenter {
public:
LegoCarBuildAnimPresenter();
virtual ~LegoCarBuildAnimPresenter() override; // vtable+0x0
~LegoCarBuildAnimPresenter() override; // vtable+0x00
// FUNCTION: LEGO1 0x10078510
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f05ec
return "LegoCarBuildAnimPresenter";
}
// FUNCTION: LEGO1 0x10078520
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, LegoCarBuildAnimPresenter::ClassName()) || LegoAnimPresenter::IsA(p_name);
}
virtual void ReadyTickle() override; // vtable+0x18
virtual void StreamingTickle() override; // vtable+0x20
virtual void RepeatingTickle() override; // vtable+0x24
virtual void EndAction() override; // vtable+0x40
virtual void PutFrame() override; // vtable+0x6c
void ReadyTickle() override; // vtable+0x18
void StreamingTickle() override; // vtable+0x20
void RepeatingTickle() override; // vtable+0x24
void EndAction() override; // vtable+0x40
void PutFrame() override; // vtable+0x6c
// SYNTHETIC: LEGO1 0x10078660
// LegoCarBuildAnimPresenter::`scalar deleting destructor'

View File

@ -7,25 +7,25 @@
class LegoCarRaceActor : public LegoRaceActor {
public:
// FUNCTION: LEGO1 0x10081650
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0568
return "LegoCarRaceActor";
}
// FUNCTION: LEGO1 0x10081670
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, LegoCarRaceActor::ClassName()) || LegoRaceActor::IsA(p_name);
}
virtual void VTable0x68() override; // vtable+0x68
virtual void VTable0x6c() override; // vtable+0x6c
virtual void VTable0x70(float p_float) override; // vtable+0x70
virtual MxS32 VTable0x90() override; // vtable+0x90
virtual MxS32 VTable0x94() override; // vtable+0x94
virtual void VTable0x98() override; // vtable+0x98
virtual void VTable0x9c() override; // vtable+0x9c
void VTable0x68() override; // vtable+0x68
void VTable0x6c() override; // vtable+0x6c
void VTable0x70(float p_float) override; // vtable+0x70
MxS32 VTable0x90() override; // vtable+0x90
MxS32 VTable0x94() override; // vtable+0x94
void VTable0x98() override; // vtable+0x98
void VTable0x9c() override; // vtable+0x9c
// SYNTHETIC: LEGO1 0x10081610
// LegoCarRaceActor::`scalar deleting destructor'

View File

@ -1,26 +1,60 @@
#ifndef LEGOCONTROLMANAGER_H
#define LEGOCONTROLMANAGER_H
#include "legoeventnotificationparam.h"
#include "legoinputmanager.h"
#include "mxcore.h"
#include "mxpresenterlist.h"
class MxControlPresenter;
// VTABLE: LEGO1 0x100d6a98
// SIZE 0x2c
class LegoControlManagerEvent : public LegoEventNotificationParam {
public:
inline LegoControlManagerEvent() : LegoEventNotificationParam()
{
m_clickedObjectId = -1;
m_clickedAtom = NULL;
}
inline MxS32 GetClickedObjectId() const { return m_clickedObjectId; }
inline const char* GetClickedAtom() const { return m_clickedAtom; }
inline MxS16 GetUnknown0x28() const { return m_unk0x28; }
inline void SetClickedObjectId(MxS32 p_clickedObjectId) { m_clickedObjectId = p_clickedObjectId; }
inline void SetClickedAtom(const char* p_clickedAtom) { m_clickedAtom = p_clickedAtom; }
inline void SetUnknown0x28(MxS16 p_unk0x28) { m_unk0x28 = p_unk0x28; }
private:
MxS32 m_clickedObjectId; // 0x20
const char* m_clickedAtom; // 0x24
MxS16 m_unk0x28; // 0x28
};
// SYNTHETIC: LEGO1 0x10028bf0
// LegoControlManagerEvent::`scalar deleting destructor'
// SYNTHETIC: LEGO1 0x10028c60
// LegoControlManagerEvent::~LegoControlManagerEvent
// VTABLE: LEGO1 0x100d6a80
class LegoControlManager : public MxCore {
public:
LegoControlManager();
virtual ~LegoControlManager() override; // vtable+0x0
~LegoControlManager() override; // vtable+0x00
virtual MxResult Tickle() override; // vtable+0x8
MxResult Tickle() override; // vtable+0x08
// FUNCTION: LEGO1 0x10028cb0
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f31b8
return "LegoControlManager";
}
// FUNCTION: LEGO1 0x10028cc0
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, LegoControlManager::ClassName()) || MxCore::IsA(p_name);
}
@ -28,10 +62,27 @@ class LegoControlManager : public MxCore {
void FUN_10028df0(MxPresenterList* p_presenterList);
void Register(MxCore* p_listener);
void Unregister(MxCore* p_listener);
MxBool FUN_10029210(LegoEventNotificationParam& p_param, MxPresenter* p_presenter);
void FUN_100293c0(undefined4, const char*, undefined2);
MxControlPresenter* FUN_100294e0(MxS32 p_x, MxS32 p_y);
MxBool FUN_10029630();
MxBool FUN_10029750();
void FUN_100292e0();
inline undefined4 GetUnknown0x0c() { return m_unk0x0c; }
inline undefined GetUnknown0x10() { return m_unk0x10; }
// SYNTHETIC: LEGO1 0x10028d40
// LegoControlManager::`scalar deleting destructor'
private:
undefined4 m_unk0x08; // 0x08
undefined4 m_unk0x0c; // 0x0c
MxBool m_unk0x10; // 0x10
MxPresenter* m_unk0x14; // 0x14
LegoControlManagerEvent m_event; // 0x18
MxPresenterList* m_presenterList; // 0x44
LegoNotifyList m_notifyList; // 0x48
};
#endif // LEGOCONTROLMANAGER_H

View File

@ -9,27 +9,23 @@
#include "roi/legoroi.h"
// VTABLE: LEGO1 0x100d4858
// SIZE 0x68 (probably)
// SIZE 0x68
class LegoEntity : public MxEntity {
public:
enum {
c_bit1 = 0x01
c_bit1 = 0x01,
c_bit2 = 0x02
};
// Inlined at 0x100853f7
inline LegoEntity() { Init(); }
#ifdef ISLE_APP
__declspec(dllexport) virtual ~LegoEntity() override;
#else
// FUNCTION: LEGO1 0x1000c290
__declspec(dllexport) virtual ~LegoEntity() override { Destroy(TRUE); }
#endif
~LegoEntity() override { Destroy(TRUE); }
virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4
MxLong Notify(MxParam& p_param) override; // vtable+0x04
// FUNCTION: LEGO1 0x1000c2f0
inline const char* ClassName() const override // vtable+0xc
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0064
return "LegoEntity";
@ -41,27 +37,32 @@ class LegoEntity : public MxEntity {
return !strcmp(p_name, LegoEntity::ClassName()) || MxEntity::IsA(p_name);
}
virtual MxResult Create(MxDSAction& p_dsAction); // vtable+0x18
virtual void Destroy(MxBool p_fromDestructor); // vtable+0x1c
virtual void ParseAction(char*); // vtable+0x20
virtual void SetROI(LegoROI* p_roi, MxBool p_bool1, MxBool p_bool2); // vtable+0x24
virtual void SetWorldTransform(const Vector3& p_loc, const Vector3& p_dir,
const Vector3& p_up); // vtable+0x28
virtual void ResetWorldTransform(MxBool p_inVehicle); // vtable+0x2c
virtual MxResult Create(MxDSAction& p_dsAction); // vtable+0x18
virtual void Destroy(MxBool p_fromDestructor); // vtable+0x1c
virtual void ParseAction(char*); // vtable+0x20
virtual void SetROI(LegoROI* p_roi, MxBool p_bool1, MxBool p_bool2); // vtable+0x24
virtual void SetWorldTransform(const Vector3& p_loc, const Vector3& p_dir, const Vector3& p_up); // vtable+0x28
virtual void ResetWorldTransform(MxBool p_inVehicle); // vtable+0x2c
// FUNCTION: LEGO1 0x10001090
virtual void SetWorldSpeed(MxFloat p_worldSpeed) { m_worldSpeed = p_worldSpeed; } // vtable+0x30
virtual void VTable0x34(); // vtable+0x34
virtual void VTable0x38(); // vtable+0x38
virtual void VTable0x3c(); // vtable+0x3c
virtual void VTable0x40(); // vtable+0x40
virtual void VTable0x44(); // vtable+0x44
virtual void VTable0x48(); // vtable+0x48
virtual void VTable0x4c(); // vtable+0x4c
virtual void VTable0x34(); // vtable+0x34
virtual void VTable0x38(); // vtable+0x38
virtual void VTable0x3c(); // vtable+0x3c
virtual void VTable0x40(); // vtable+0x40
virtual void VTable0x44(); // vtable+0x44
virtual void VTable0x48(); // vtable+0x48
virtual void VTable0x4c(); // vtable+0x4c
void FUN_10010c30();
void FUN_100114e0(MxU8 p_unk0x59);
void SetLocation(Mx3DPointFloat& p_location, Mx3DPointFloat& p_direction, Mx3DPointFloat& p_up, MxBool);
inline LegoROI* GetROI() { return m_roi; }
inline MxU8 GetFlags() { return m_flags; }
inline void SetFlags(MxU8 p_flags) { m_flags = p_flags; }
protected:
void Init();

View File

@ -22,10 +22,10 @@ class LegoEntityList : public MxPtrList<LegoEntity> {
LegoEntityList(MxBool p_ownership = FALSE) : MxPtrList<LegoEntity>(p_ownership) {}
// FUNCTION: LEGO1 0x1001e2d0
virtual MxS8 Compare(LegoEntity* p_a, LegoEntity* p_b) override
MxS8 Compare(LegoEntity* p_a, LegoEntity* p_b) override
{
return p_a == p_b ? 0 : p_a < p_b ? -1 : 1;
}; // vtable+0x14
} // vtable+0x14
};
// VTABLE: LEGO1 0x100d64e8
@ -74,7 +74,7 @@ class LegoEntityListCursor : public MxPtrListCursor<LegoEntity> {
// SYNTHETIC: LEGO1 0x1001f110
// LegoEntityListCursor::`scalar deleting destructor'
// FUNCTION: LEGO1 0x1001f180
// TEMPLATE: LEGO1 0x1001f180
// MxPtrListCursor<LegoEntity>::~MxPtrListCursor<LegoEntity>
// SYNTHETIC: LEGO1 0x1001f1d0
@ -83,10 +83,19 @@ class LegoEntityListCursor : public MxPtrListCursor<LegoEntity> {
// SYNTHETIC: LEGO1 0x1001f240
// MxPtrListCursor<LegoEntity>::`scalar deleting destructor'
// FUNCTION: LEGO1 0x1001f2b0
// TEMPLATE: LEGO1 0x1001f2b0
// MxListCursor<LegoEntity *>::~MxListCursor<LegoEntity *>
// FUNCTION: LEGO1 0x1001edc6
// FUNCTION: LEGO1 0x1001f300
// LegoEntityListCursor::~LegoEntityListCursor
// TEMPLATE: LEGO1 0x100207d0
// MxListCursor<LegoEntity *>::MxListCursor<LegoEntity *>
// TEMPLATE: LEGO1 0x10022430
// MxList<LegoEntity *>::InsertEntry
// TEMPLATE: LEGO1 0x10022630
// MxList<LegoEntity *>::DeleteEntry
#endif // LEGOENTITYLIST_H

View File

@ -10,10 +10,10 @@ class LegoEntity;
class LegoEntityPresenter : public MxCompositePresenter {
public:
LegoEntityPresenter();
virtual ~LegoEntityPresenter() override; // vtable+0x0
~LegoEntityPresenter() override; // vtable+0x00
// FUNCTION: LEGO1 0x100534b0
inline const char* ClassName() const override // vtable+0xc
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f06b8
return "LegoEntityPresenter";
@ -25,16 +25,18 @@ class LegoEntityPresenter : public MxCompositePresenter {
return !strcmp(p_name, LegoEntityPresenter::ClassName()) || MxCompositePresenter::IsA(p_name);
}
virtual void ReadyTickle() override; // vtable+0x18
virtual void RepeatingTickle() override; // vtable+0x24
virtual void ParseExtra() override; // vtable+0x30
virtual void Destroy() override; // vtable+0x38
virtual MxResult StartAction(MxStreamController* p_controller, MxDSAction* p_action) override; // vtable+0x3c
virtual void Init(); // vtable+0x68
virtual undefined4 SetEntity(LegoEntity* p_entity); // vtable+0x6c
void ReadyTickle() override; // vtable+0x18
void RepeatingTickle() override; // vtable+0x24
void ParseExtra() override; // vtable+0x30
void Destroy() override; // vtable+0x38
MxResult StartAction(MxStreamController* p_controller, MxDSAction* p_action) override; // vtable+0x3c
virtual void Init(); // vtable+0x68
virtual undefined4 SetEntity(LegoEntity* p_entity); // vtable+0x6c
void SetEntityLocation(Mx3DPointFloat& p_location, Mx3DPointFloat& p_direction, Mx3DPointFloat& p_up);
inline LegoEntity* GetEntity() { return m_entity; }
// SYNTHETIC: LEGO1 0x100535a0
// LegoEntityPresenter::`scalar deleting destructor'

View File

@ -3,6 +3,7 @@
#include "mxnotificationparam.h"
#include "mxtypes.h"
#include "roi/legoroi.h"
#include <stdlib.h>
@ -10,7 +11,14 @@
// SIZE 0x20
class LegoEventNotificationParam : public MxNotificationParam {
public:
virtual MxNotificationParam* Clone() override; // vtable+0x4
// FUNCTION: LEGO1 0x10028690
MxNotificationParam* Clone() override
{
LegoEventNotificationParam* clone =
new LegoEventNotificationParam(m_type, m_sender, m_modifier, m_x, m_y, m_key);
clone->m_roi = m_roi;
return clone;
} // vtable+0x04
inline LegoEventNotificationParam() : MxNotificationParam(c_notificationType0, NULL) {}
inline LegoEventNotificationParam(
@ -21,20 +29,27 @@ class LegoEventNotificationParam : public MxNotificationParam {
MxS32 p_y,
MxU8 p_key
)
: MxNotificationParam(p_type, p_sender), m_modifier(p_modifier), m_x(p_x), m_y(p_y), m_key(p_key), m_unk0x1c(0)
: MxNotificationParam(p_type, p_sender), m_modifier(p_modifier), m_x(p_x), m_y(p_y), m_key(p_key), m_roi(NULL)
{
}
inline MxU8 GetModifier() { return m_modifier; }
inline MxU8 GetKey() const { return m_key; }
inline MxS32 GetX() const { return m_x; }
inline MxS32 GetY() const { return m_y; }
inline void SetROI(LegoROI* p_roi) { m_roi = p_roi; }
inline void SetModifier(MxU8 p_modifier) { m_modifier = p_modifier; }
inline void SetKey(MxU8 p_key) { m_key = p_key; }
inline void SetX(MxS32 p_x) { m_x = p_x; }
inline void SetY(MxS32 p_y) { m_y = p_y; }
protected:
MxU8 m_modifier; // 0x0c
MxS32 m_x; // 0x10
MxS32 m_y; // 0x14
MxU8 m_key; // 0x18
MxU32 m_unk0x1c; // 0x1c
LegoROI* m_roi; // 0x1c
};
// SYNTHETIC: LEGO1 0x10028770

View File

@ -7,7 +7,7 @@
class LegoExtraActor : public LegoAnimActor {
public:
// FUNCTION: LEGO1 0x1002b7a0
inline const char* ClassName() const override // vtable+0xc
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f3204
return "LegoExtraActor";

View File

@ -11,15 +11,15 @@ class LegoFlcTexturePresenter : public MxFlcPresenter {
LegoFlcTexturePresenter();
// FUNCTION: LEGO1 0x1005def0
inline const char* ClassName() const override // vtable+0xc
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0634
return "LegoFlcTexturePresenter";
}
virtual void StartingTickle() override; // vtable+0x1c
virtual void LoadFrame(MxStreamChunk* p_chunk) override; // vtable+0x68
virtual void PutFrame() override; // vtable+0x6c
void StartingTickle() override; // vtable+0x1c
void LoadFrame(MxStreamChunk* p_chunk) override; // vtable+0x68
void PutFrame() override; // vtable+0x6c
// SYNTHETIC: LEGO1 0x1005df00
// LegoFlcTexturePresenter::`scalar deleting destructor'

View File

@ -8,7 +8,7 @@
class LegoFullScreenMovie : public MxVariable {
public:
LegoFullScreenMovie(const char* p_key, const char* p_value);
virtual void SetValue(const char* p_option) override;
void SetValue(const char* p_option) override;
};
#endif // LEGOFULLSCREENMOVIE_H

Some files were not shown because too many files have changed in this diff Show More