Merge branch 'master' into ioinfo2

This commit is contained in:
MS 2023-07-02 16:09:01 -04:00 committed by GitHub
commit fd4959d516
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
364 changed files with 7566 additions and 2038 deletions

7
.editorconfig Normal file
View File

@ -0,0 +1,7 @@
root = true
[*.{cpp,h,py,txt,editorconfig}]
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true

View File

@ -1,10 +1,6 @@
name: Build
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
on: [push, pull_request]
jobs:
build:
@ -26,7 +22,7 @@ jobs:
key: dx5sdk
- name: Download DX5 SDK
if: steps.cache-dx5.outputs.cache-hit != 'true'
if: ${{ !steps.cache-dx5.outputs.cache-hit }}
run: |
cd dx5sdk
curl -fLOSs https://archive.org/download/idx5sdk/idx5sdk.exe
@ -34,8 +30,7 @@ jobs:
7z x .\DX5SDK.EXE
- name: Cache DX5 SDK
if: steps.cache-dx5.outputs.cache-hit != 'true'
id: save-dx5
if: ${{ !steps.cache-dx5.outputs.cache-hit }}
uses: actions/cache/save@v3
with:
path: dx5sdk
@ -47,22 +42,68 @@ jobs:
cd cdrom
.\SETUP.EXE /s
- name: Setup cmake
uses: jwlawson/actions-setup-cmake@v1.13
with:
# Use 2.8 for maximum backwards compatibility
cmake-version: '2.8.x'
- name: Build
shell: cmd
run: |
call .\msvc420\bin\VCVARS32.BAT x86
mkdir Release
.\msvc420\bin\NMAKE.EXE /f isle.mak CFG="ISLE - Win32 Release"
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -G "NMake Makefiles"
cmake --build .
- name: Upload Artifact
uses: actions/upload-artifact@master
with:
name: Win32
path: |
build/ISLE.EXE
build/ISLE.PDB
build/LEGO1.DLL
build/LEGO1.PDB
compare:
needs: build
runs-on: windows-latest
steps:
- uses: actions/checkout@master
- uses: actions/download-artifact@master
with:
name: Win32
path: build
- name: Restore cached original binaries
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:
path: legobin
key: legobin
- name: Summarize Accuracy
shell: bash
run: |
curl -fLOSs https://legoisland.org/download/ISLE.EXE
curl -fLOSs https://legoisland.org/download/LEGO1.DLL
pip install capstone
pip install colorama
python3 tools/reccmp/reccmp.py -S ISLEPROGRESS.SVG --svg-icon tools/reccmp/isle.png -H ISLEPROGRESS.HTML ISLE.EXE Release/ISLE.EXE Release/ISLE.PDB . | tee ISLEPROGRESS.TXT
python3 tools/reccmp/reccmp.py -S LEGO1PROGRESS.SVG -T 1929 --svg-icon tools/reccmp/lego1.png -H LEGO1PROGRESS.HTML LEGO1.DLL Release/LEGO1.DLL Release/LEGO1.PDB . | tee LEGO1PROGRESS.TXT
pip install -r tools/reccmp/requirements.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 1929 --svg-icon tools/reccmp/lego1.png -H LEGO1PROGRESS.HTML legobin/LEGO1.DLL build/LEGO1.DLL build/LEGO1.PDB . | tee LEGO1PROGRESS.TXT
- name: Compare Accuracy With Current Master
shell: bash
@ -71,41 +112,50 @@ jobs:
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
diff -u ISLEPROGRESS-OLD.TXT ISLEPROGRESS.TXT
diff -u LEGO1PROGRESS-OLD.TXT LEGO1PROGRESS.TXT
diff -u ISLEPROGRESS-OLD.TXT ISLEPROGRESS.TXT || true
diff -u LEGO1PROGRESS-OLD.TXT LEGO1PROGRESS.TXT || true
- name: Test Exports
shell: bash
run: |
python3 tools/verexp/verexp.py legobin/LEGO1.DLL build/LEGO1.DLL
- name: Upload Artifact
uses: actions/upload-artifact@master
with:
name: Win32
name: Accuracy Report
path: |
Release
ISLEPROGRESS.HTML
LEGO1PROGRESS.HTML
ISLEPROGRESS.SVG
LEGO1PROGRESS.SVG
ISLEPROGRESS.*
LEGO1PROGRESS.*
upload:
needs: [build, compare]
runs-on: ubuntu-latest
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
steps:
- uses: actions/checkout@v3
with:
repository: 'probonopd/uploadtool'
- uses: actions/download-artifact@master
with:
name: Win32
path: build
- uses: actions/download-artifact@master
with:
name: Accuracy Report
- name: Upload Continuous Release
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
UPLOAD_KEY: ${{ secrets.UPLOAD_KEY }}
run: |
# Convert SVGs to PNG
INKSCAPE_DIR=inkscape-1.2.2_2022-12-09_732a01da63-x64
curl -fLOSs https://inkscape.org/gallery/item/37364/$INKSCAPE_DIR.7z
7z x $INKSCAPE_DIR.7z
$INKSCAPE_DIR/bin/inkscape -w 1024 ISLEPROGRESS.SVG -o ISLEPROGRESS.PNG
$INKSCAPE_DIR/bin/inkscape -w 1024 LEGO1PROGRESS.SVG -o LEGO1PROGRESS.PNG
curl -fLOSs https://raw.githubusercontent.com/probonopd/uploadtool/master/upload.sh
./upload.sh \
Release/ISLE.EXE \
Release/LEGO1.DLL \
ISLEPROGRESS.HTML \
ISLEPROGRESS.TXT \
ISLEPROGRESS.SVG \
ISLEPROGRESS.PNG \
LEGO1PROGRESS.HTML \
LEGO1PROGRESS.TXT \
LEGO1PROGRESS.PNG \
LEGO1PROGRESS.SVG
build/ISLE.EXE \
build/LEGO1.DLL \
ISLEPROGRESS.* \
LEGO1PROGRESS.*
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/

1
.gitignore vendored
View File

@ -3,3 +3,4 @@ Release/
*.ncb
ISLE.EXE
LEGO1.DLL
build/

227
CMakeLists.txt Normal file
View File

@ -0,0 +1,227 @@
cmake_minimum_required(VERSION 2.8...3.5 FATAL_ERROR)
project(isle CXX)
option(ISLE_BUILD_APP "Build ISLE.EXE application" ON)
add_library(lego1 SHARED
LEGO1/act1state.cpp
LEGO1/act2brick.cpp
LEGO1/act2policestation.cpp
LEGO1/act3.cpp
LEGO1/act3shark.cpp
LEGO1/act3state.cpp
LEGO1/ambulance.cpp
LEGO1/ambulancemissionstate.cpp
LEGO1/animstate.cpp
LEGO1/beachhouseentity.cpp
LEGO1/bike.cpp
LEGO1/buildingentity.cpp
LEGO1/bumpbouy.cpp
LEGO1/carrace.cpp
LEGO1/dllmain.cpp
LEGO1/dunebuggy.cpp
LEGO1/elevatorbottom.cpp
LEGO1/gasstation.cpp
LEGO1/gasstationentity.cpp
LEGO1/gasstationstate.cpp
LEGO1/helicopter.cpp
LEGO1/helicopterstate.cpp
LEGO1/historybook.cpp
LEGO1/hospital.cpp
LEGO1/hospitalentity.cpp
LEGO1/hospitalstate.cpp
LEGO1/infocenter.cpp
LEGO1/infocenterdoor.cpp
LEGO1/infocenterentity.cpp
LEGO1/infocenterstate.cpp
LEGO1/isle.cpp
LEGO1/isleactor.cpp
LEGO1/islepathactor.cpp
LEGO1/jetski.cpp
LEGO1/jetskirace.cpp
LEGO1/jukebox.cpp
LEGO1/jukeboxentity.cpp
LEGO1/jukeboxstate.cpp
LEGO1/legoact2state.cpp
LEGO1/legoactioncontrolpresenter.cpp
LEGO1/legoanimactor.cpp
LEGO1/legoanimationmanager.cpp
LEGO1/legoanimmmpresenter.cpp
LEGO1/legoanimpresenter.cpp
LEGO1/legobackgroundcolor.cpp
LEGO1/legobackgroundcolor.cpp
LEGO1/legobuildingmanager.cpp
LEGO1/legocachesound.cpp
LEGO1/legocameracontroller.cpp
LEGO1/legocarbuild.cpp
LEGO1/legocarbuildanimpresenter.cpp
LEGO1/legocontrolmanager.cpp
LEGO1/legoentity.cpp
LEGO1/legoentitypresenter.cpp
LEGO1/legoflctexturepresenter.cpp
LEGO1/legogamestate.cpp
LEGO1/legohideanimpresenter.cpp
LEGO1/legoinputmanager.cpp
LEGO1/legojetski.cpp
LEGO1/legoloadcachesoundpresenter.cpp
LEGO1/legolocomotionanimpresenter.cpp
LEGO1/legomodelpresenter.cpp
LEGO1/legonavcontroller.cpp
LEGO1/legoomni.cpp
LEGO1/legopalettepresenter.cpp
LEGO1/legopartpresenter.cpp
LEGO1/legopathactor.cpp
LEGO1/legopathcontroller.cpp
LEGO1/legopathpresenter.cpp
LEGO1/legophonemepresenter.cpp
LEGO1/legoplantmanager.cpp
LEGO1/legorace.cpp
LEGO1/legoroi.cpp
LEGO1/legosoundmanager.cpp
LEGO1/legostate.cpp
LEGO1/legotexturepresenter.cpp
LEGO1/legoutil.cpp
LEGO1/legovideomanager.cpp
LEGO1/legoworld.cpp
LEGO1/legoworldpresenter.cpp
LEGO1/motorcycle.cpp
LEGO1/mxatomid.cpp
LEGO1/mxaudiopresenter.cpp
LEGO1/mxautolocker.cpp
LEGO1/mxbackgroundaudiomanager.cpp
LEGO1/mxbitmap.cpp
LEGO1/mxcompositemediapresenter.cpp
LEGO1/mxcompositepresenter.cpp
LEGO1/mxcontrolpresenter.cpp
LEGO1/mxcore.cpp
LEGO1/mxcriticalsection.cpp
LEGO1/mxdirectdraw.cpp
LEGO1/mxdiskstreamcontroller.cpp
LEGO1/mxdiskstreamprovider.cpp
LEGO1/mxdsaction.cpp
LEGO1/mxdsanim.cpp
LEGO1/mxdschunk.cpp
LEGO1/mxdsevent.cpp
LEGO1/mxdsfile.cpp
LEGO1/mxdsmediaaction.cpp
LEGO1/mxdsmultiaction.cpp
LEGO1/mxdsobject.cpp
LEGO1/mxdsobjectaction.cpp
LEGO1/mxdsparallelaction.cpp
LEGO1/mxdsselectaction.cpp
LEGO1/mxdsserialaction.cpp
LEGO1/mxdssound.cpp
LEGO1/mxdssource.cpp
LEGO1/mxdsstill.cpp
LEGO1/mxdssubscriber.cpp
LEGO1/mxentity.cpp
LEGO1/mxeventmanager.cpp
LEGO1/mxeventpresenter.cpp
LEGO1/mxflcpresenter.cpp
LEGO1/mxioinfo.cpp
LEGO1/mxloopingflcpresenter.cpp
LEGO1/mxloopingmidipresenter.cpp
LEGO1/mxloopingsmkpresenter.cpp
LEGO1/mxmediapresenter.cpp
LEGO1/mxmidipresenter.cpp
LEGO1/mxmusicpresenter.cpp
LEGO1/mxnotificationmanager.cpp
LEGO1/mxobjectfactory.cpp
LEGO1/mxomni.cpp
LEGO1/mxomnicreateflags.cpp
LEGO1/mxomnicreateparam.cpp
LEGO1/mxomnicreateparambase.cpp
LEGO1/mxpalette.cpp
LEGO1/mxpresenter.cpp
LEGO1/mxscheduler.cpp
LEGO1/mxsmkpresenter.cpp
LEGO1/mxsoundmanager.cpp
LEGO1/mxsoundpresenter.cpp
LEGO1/mxstillpresenter.cpp
LEGO1/mxstreamer.cpp
LEGO1/mxstring.cpp
LEGO1/mxstringvariable.cpp
LEGO1/mxtimer.cpp
LEGO1/mxtransitionmanager.cpp
LEGO1/mxunknown100dc6b0.cpp
LEGO1/mxunknown100dc6e0.cpp
LEGO1/mxvariabletable.cpp
LEGO1/mxvideomanager.cpp
LEGO1/mxvideoparam.cpp
LEGO1/mxvideoparamflags.cpp
LEGO1/mxvideopresenter.cpp
LEGO1/mxwavepresenter.cpp
LEGO1/pizza.cpp
LEGO1/pizzamissionstate.cpp
LEGO1/pizzeria.cpp
LEGO1/pizzeriastate.cpp
LEGO1/police.cpp
LEGO1/policeentity.cpp
LEGO1/policestate.cpp
LEGO1/racecar.cpp
LEGO1/racestandsentity.cpp
LEGO1/racestate.cpp
LEGO1/radio.cpp
LEGO1/radiostate.cpp
LEGO1/realtimeview.cpp
LEGO1/registrationbook.cpp
LEGO1/score.cpp
LEGO1/scorestate.cpp
LEGO1/skateboard.cpp
LEGO1/towtrack.cpp
LEGO1/towtrackmissionstate.cpp
LEGO1/viewmanager.cpp
)
# Link libraries
target_link_libraries(lego1 PRIVATE ddraw dsound winmm)
# Make sure filenames are ALL CAPS
set_property(TARGET lego1 PROPERTY OUTPUT_NAME LEGO1)
set_property(TARGET lego1 PROPERTY SUFFIX ".DLL")
if (ISLE_BUILD_APP)
add_executable(isle WIN32
ISLE/res/isle.rc
ISLE/isleapp.cpp
ISLE/define.cpp
)
# Include LEGO1 headers in ISLE
target_include_directories(isle PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1")
# Link DSOUND, WINMM, and LEGO1
target_link_libraries(isle PRIVATE dsound winmm lego1)
# Make sure filenames are ALL CAPS
set_property(TARGET isle PROPERTY OUTPUT_NAME ISLE)
set_property(TARGET isle PROPERTY SUFFIX ".EXE")
endif()
if (MSVC)
# These flags have been taken from the defaults for a Visual C++ 4.20 project (the compiler the
# game was originally built with) and tweaked slightly to produce more debugging info for reccmp.
# They ensure a recompilation that can be byte/instruction accurate to the original binaries.
target_compile_options(isle PRIVATE "/ML$<$<CONFIG:Debug>:d>")
target_compile_options(lego1 PRIVATE "/MT$<$<CONFIG:Debug>:d>")
set(CMAKE_CXX_FLAGS "/W3 /GX /D \"WIN32\" /D \"_WINDOWS\"")
set(CMAKE_CXX_FLAGS_DEBUG "/Gm /Zi /Od /D \"_DEBUG\"")
set(CMAKE_CXX_FLAGS_RELEASE "/O2 /D \"NDEBUG\"")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/Zi /O2 /D \"NDEBUG\"")
set(CMAKE_CXX_FLAGS_MINSIZEREL "/Os /D \"NDEBUG\"")
set(CMAKE_EXE_LINKER_FLAGS "/machine:I386")
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "/incremental:yes /debug")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/incremental:no")
set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "/incremental:no /debug")
set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "/incremental:no")
set(CMAKE_SHARED_LINKER_FLAGS "/machine:I386")
set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "/incremental:yes /debug")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "/incremental:no")
set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "/incremental:no /debug")
set(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "/incremental:no")
endif()

View File

@ -6,13 +6,21 @@ Generally, decompilation is a fairly advanced skill. If you aren't already famil
## Ghidra Server
For documenting the original binaries and generating pseudocode that we decompile with, we primarily use [Ghidra](https://ghidra-sre.org/) (it's free and open source). To help with collaboration, we have a shared Ghidra repository with all of our current work. You are free to check it out and mess around with it locally, however to prevent sabotage, you will need to request permission before you can push back to the server (ask in the Matrix room).
For documenting the original binaries and generating pseudocode that we decompile with, we primarily use [Ghidra](https://ghidra-sre.org/) (it's free and open source). To help with collaboration, we have a shared Ghidra repository with all of our current work. You are free to check it out and mess around with it locally, however to prevent sabotage, you will need to request permission before you can push your changes back to the server (ask in the Matrix room).
To access the Ghidra repository, use the following details:
- Address: `server.mattkc.com`
- Port: `13100`
## 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.
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.
This repository currently has only one goal: accuracy to the original executables. We are byte/instruction matching as much as possible, which means the priority is making the original compiler (MSVC 4.20) produce code that matches the original game. As such, modernizations and bug fixes will probably be rejected for the time being.
## Code Style
In general, we're not exhaustively strict about coding style, but there are some preferable guidelines to follow that have been adopted from what we know about the original codebase:
@ -22,10 +30,7 @@ In general, we're not exhaustively strict about coding style, but there are some
- `m_camelCase` for member variables.
- `g_camelCase` for global variables.
- `p_camelCase` for function parameters.
## Kinds of Contributions
This repository has only one goal: accuracy to the original executables. As such, we are not likely to accept pull requests that attempt to modernize the code, or improve compatibility in a newer compiler that ends up reducing compatibility in MSVC 4.20. Essentially, accuracy is king, everything else is secondary. For modernizations and enhancements, it's recommended to create a fork downstream from this one instead.
- Instead of C++ primitives (e.g. `int`, `long`, etc.), use types in `mxtypes.h` instead. This will help us ensure that variables will be the correct size regardless of the underlying compiler/platform/architecture.
## Questions?

View File

@ -37,4 +37,4 @@ int g_reqEnableRMDevice = 0;
int g_startupDelay = 200;
// 0x4101c0
long g_lastFrameTime = 0;
MxLong g_lastFrameTime = 0;

View File

@ -1,6 +1,7 @@
#ifndef DEFINE_H
#define DEFINE_H
#include <mxtypes.h>
#include <windows.h>
class IsleApp;
@ -21,6 +22,6 @@ extern int g_targetHeight;
extern int g_targetDepth;
extern int g_reqEnableRMDevice;
extern int g_startupDelay;
extern long g_lastFrameTime;
extern MxLong g_lastFrameTime;
#endif // DEFINE_H

View File

@ -1,137 +0,0 @@
;
; Definition file of Lego1.dll
; Automatic generated by gendef
; written by Kai Tietz 2008
;
LIBRARY "Lego1.dll"
EXPORTS
??0LegoBackgroundColor@@QAE@PBD0@Z ; has WINAPI (@8)
??0LegoGameState@@QAE@XZ
??0LegoWorld@@QAE@XZ
??0MxAtomId@@QAE@PBDW4LookupMode@@@Z ; has WINAPI (@8)
??0MxBitmap@@QAE@XZ
??0MxCore@@QAE@XZ
??0MxCriticalSection@@QAE@XZ
??0MxDSAction@@QAE@XZ
??0MxDSFile@@QAE@PBDK@Z ; has WINAPI (@8)
??0MxOmniCreateFlags@@QAE@XZ
??0MxOmniCreateParam@@QAE@PBDPAUHWND__@@AAVMxVideoParam@@VMxOmniCreateFlags@@@Z ; has WINAPI (@16)
??0MxString@@QAE@ABV0@@Z ; has WINAPI (@4)
??0MxVideoParam@@QAE@AAV0@@Z ; has WINAPI (@4)
??0MxVideoParam@@QAE@AAVMxRect32@@PAVMxPalette@@KAAVMxVideoParamFlags@@@Z ; has WINAPI (@16)
??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 ; has WINAPI (@4)
??4MxString@@QAEABV0@PBD@Z ; has WINAPI (@4)
??4MxVideoParam@@QAEAAV0@ABV0@@Z ; has WINAPI (@4)
??8MxPalette@@QAEEAAV0@@Z ; has WINAPI (@4)
?BackgroundAudioManager@@YAPAVMxBackgroundAudioManager@@XZ
?Close@MxDSFile@@UAEJXZ
?Close@MxStreamer@@QAEJPBD@Z ; has WINAPI (@4)
?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 ; has WINAPI (@4)
?Enable@MxPresenter@@UAEXE@Z ; has WINAPI (@4)
?EnableFullScreenMovie@LegoVideoManager@@QAEXEE@Z ; has WINAPI (@8)
?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 ; has WINAPI (@4)
?Init@MxPresenter@@IAEXXZ
?InputManager@@YAPAVLegoInputManager@@XZ
?InvalidateRect@MxVideoManager@@QAEXAAVMxRect32@@@Z ; has WINAPI (@4)
?IsSound3D@MxOmni@@SAEXZ
?Lego@@YAPAVLegoOmni@@XZ
?Load@LegoGameState@@QAEJK@Z ; has WINAPI (@4)
?MSoundManager@@YAPAVMxSoundManager@@XZ
?MakeSourceName@@YAXPADPBD@Z
?MoveCursor@LegoVideoManager@@QAEXHH@Z ; has WINAPI (@8)
?MusicManager@@YAPAVMxMusicManager@@XZ
?NotificationManager@@YAPAVMxNotificationManager@@XZ
?Notify@MxCore@@UAEJAAVMxParam@@@Z ; has WINAPI (@4)
?Open@MxDSFile@@UAEJK@Z ; has WINAPI (@4)
?Open@MxStreamer@@QAEPAVMxStreamController@@PBDG@Z ; has WINAPI (@8)
?ParseExtra@MxPresenter@@MAEXXZ
?Pause@MxDirectDraw@@QAEHH@Z ; has WINAPI (@4)
?PickEntity@@YAPAVLegoEntity@@JJ@Z
?PickROI@@YAPAVLegoROI@@JJ@Z
?QueueEvent@LegoInputManager@@QAEXW4NotificationId@@EJJE@Z ; has WINAPI (@20)
?Read@MxBitmap@@UAEJPBD@Z ; has WINAPI (@4)
?Read@MxDSFile@@UAEJPAEK@Z ; has WINAPI (@8)
?RealizePalette@MxVideoManager@@UAEJPAVMxPalette@@@Z ; has WINAPI (@4)
?Register@LegoInputManager@@QAEXPAVMxCore@@@Z ; has WINAPI (@4)
?RemoveAll@ViewManager@@QAEXPAVViewROI@@@Z ; has WINAPI (@4)
?RemoveWorld@LegoOmni@@QAEXABVMxAtomId@@J@Z ; has WINAPI (@8)
?Save@LegoGameState@@QAEJK@Z ; has WINAPI (@4)
?Seek@MxDSFile@@UAEJJH@Z ; has WINAPI (@8)
?SerializePlayersInfo@LegoGameState@@QAEXF@Z ; has WINAPI (@4)
?SerializeScoreHistory@LegoGameState@@QAEXF@Z ; has WINAPI (@4)
?SetCD@MxOmni@@SAXPBD@Z
?SetDefaults@LegoNavController@@SAXHMMMMMMMMME@Z
?SetDeviceName@MxVideoParam@@QAEXPAD@Z ; has WINAPI (@4)
?SetDisplayBB@LegoROI@@QAEXH@Z ; has WINAPI (@4)
?SetDoMutex@MxCriticalSection@@SAXXZ
?SetHD@MxOmni@@SAXPBD@Z
?SetObjectName@MxDSObject@@QAEXPBD@Z ; has WINAPI (@4)
?SetOmniUserMessage@@YAXP6AXPBDH@Z@Z
?SetPartsThreshold@RealtimeView@@SAXM@Z
?SetSavePath@LegoGameState@@QAEXPAD@Z ; has WINAPI (@4)
?SetSound3D@MxOmni@@SAXE@Z
?SetUserMaxLOD@RealtimeView@@SAXM@Z
?SetVariable@MxVariableTable@@QAEXPAVMxVariable@@@Z ; has WINAPI (@4)
?SetVariable@MxVariableTable@@QAEXPBD0@Z ; has WINAPI (@8)
?SetWaitIndicator@MxTransitionManager@@QAEXPAVMxVideoPresenter@@@Z ; has WINAPI (@4)
?SoundManager@@YAPAVLegoSoundManager@@XZ
?Start@@YAJPAVMxDSAction@@@Z
?StartAction@MxPresenter@@UAEJPAVMxStreamController@@PAVMxDSAction@@@Z ; has WINAPI (@8)
?StartMultiTasking@MxScheduler@@QAEXK@Z ; has WINAPI (@4)
?Streamer@@YAPAVMxStreamer@@XZ
?Tickle@MxPresenter@@UAEJXZ
?TickleManager@@YAPAVMxTickleManager@@XZ
?Timer@@YAPAVMxTimer@@XZ
?TransitionManager@@YAPAVMxTransitionManager@@XZ
?UnRegister@LegoInputManager@@QAEXPAVMxCore@@@Z ; has WINAPI (@4)
?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@12

Binary file not shown.

Binary file not shown.

View File

@ -1,4 +1,4 @@
#include "isle.h"
#include "isleapp.h"
#include "define.h"
#include <dsound.h>
@ -95,7 +95,7 @@ void IsleApp::Close()
TransitionManager()->SetWaitIndicator(NULL);
Lego()->vtable3c();
long lVar8;
MxLong lVar8;
do {
lVar8 = Streamer()->Close(NULL);
} while (lVar8 == 0);
@ -571,7 +571,7 @@ BOOL IsleApp::ReadReg(LPCSTR name, LPSTR outValue, DWORD outSize)
DWORD valueType;
BOOL out = FALSE;
unsigned long size = outSize;
DWORD size = outSize;
if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Mindscape\\LEGO Island", 0, KEY_READ, &hKey) == ERROR_SUCCESS) {
if (RegQueryValueExA(hKey, name, NULL, &valueType, (LPBYTE) outValue, &size) == ERROR_SUCCESS) {
if (RegCloseKey(hKey) == ERROR_SUCCESS) {
@ -695,7 +695,7 @@ inline void IsleApp::Tick(BOOL sleepIfNotNextFrame)
if (!TickleManager()) return;
if (!Timer()) return;
long currentTime = Timer()->GetRealTime();
MxLong currentTime = Timer()->GetRealTime();
if (currentTime < g_lastFrameTime) {
g_lastFrameTime = -this->m_frameDelta;
}

View File

@ -1,9 +1,9 @@
#ifndef ISLE_H
#define ISLE_H
#ifndef ISLEAPP_H
#define ISLEAPP_H
#include <windows.h>
#include "mxresult.h"
#include "mxtypes.h"
#include "mxvideoparam.h"
class IsleApp
@ -56,7 +56,7 @@ class IsleApp
// 40
int m_islandTexture;
int m_gameStarted;
long m_frameDelta;
MxLong m_frameDelta;
// 4c
MxVideoParam m_videoParam;
@ -73,4 +73,4 @@ class IsleApp
HCURSOR m_cursorCurrent;
};
#endif // ISLE_H
#endif // ISLEAPP_H

View File

@ -1,9 +1,9 @@
#include "resource.h"
ISLE_ARROW CURSOR "ISLE/res/arrow.cur"
ISLE_NO CURSOR "ISLE/res/no.cur"
ISLE_BUSY CURSOR "ISLE/res/busy.cur"
APP_ICON ICON "ISLE/res/isle.ico"
ISLE_ARROW CURSOR "arrow.cur"
ISLE_NO CURSOR "no.cur"
ISLE_BUSY CURSOR "busy.cur"
APP_ICON ICON "isle.ico"
1 VERSIONINFO
FILEVERSION 1,1,0,0

8
LEGO1/act1state.cpp Normal file
View File

@ -0,0 +1,8 @@
#include "act1state.h"
// OFFSET: LEGO1 0x100334b0 STUB
Act1State::Act1State()
{
// TODO
}

27
LEGO1/act1state.h Normal file
View File

@ -0,0 +1,27 @@
#ifndef ACT1STATE_H
#define ACT1STATE_H
#include "legostate.h"
// VTABLE 0x100d7028
// SIZE 0x26c
class Act1State : public LegoState
{
public:
Act1State();
// OFFSET: LEGO1 0x100338a0
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f0154
return "Act1State";
};
// OFFSET: LEGO1 0x100338b0
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, Act1State::ClassName()) || LegoState::IsA(name);
};
};
#endif // ACT1STATE_H

29
LEGO1/act2brick.cpp Normal file
View File

@ -0,0 +1,29 @@
#include "act2brick.h"
// OFFSET: LEGO1 0x1007a2b0 STUB
Act2Brick::Act2Brick()
{
// TODO
}
// OFFSET: LEGO1 0x1007a470 STUB
Act2Brick::~Act2Brick()
{
// TODO
}
// STUB OFFSET: LEGO1 0x1007a8c0 STUB
MxLong Act2Brick::Notify(MxParam &p)
{
// TODO
return 0;
}
// OFFSET: LEGO1 0x1007a7f0 STUB
MxLong Act2Brick::Tickle()
{
// TODO
return 0;
}

32
LEGO1/act2brick.h Normal file
View File

@ -0,0 +1,32 @@
#ifndef ACT2BRICK_H
#define ACT2BRICK_H
#include "legopathactor.h"
// VTABLE 0x100d9b60
// SIZE 0x194
class Act2Brick : public LegoPathActor
{
public:
Act2Brick();
virtual ~Act2Brick() override; // vtable+0x0
virtual MxLong Notify(MxParam &p) override; // vtable+0x4
virtual MxLong Tickle() override; // vtable+0x08
// OFFSET: LEGO1 0x1007a360
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f0438
return "Act2Brick";
}
// OFFSET: LEGO1 0x1007a370
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(Act2Brick::ClassName(), name) || LegoEntity::IsA(name);
}
};
#endif // ACT2BRICK_H

View File

@ -0,0 +1,9 @@
#include "act2policestation.h"
// OFFSET: LEGO1 0x1004e0e0 STUB
MxLong Act2PoliceStation::Notify(MxParam &p)
{
// TODO
return 0;
}

27
LEGO1/act2policestation.h Normal file
View File

@ -0,0 +1,27 @@
#ifndef ACT2POLICESTATION_H
#define ACT2POLICESTATION_H
#include "legoentity.h"
// VTABLE 0x100d53a8
// SIZE 0x68
class Act2PoliceStation : public LegoEntity
{
public:
virtual MxLong Notify(MxParam &p) override; // vtable+0x4
// OFFSET: LEGO1 0x1000e200
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f03fc
return "Act2PoliceStation";
}
// OFFSET: LEGO1 0x1000e210
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, Act2PoliceStation::ClassName()) || LegoEntity::IsA(name);
}
};
#endif // ACT2POLICESTATION_H

13
LEGO1/act3.cpp Normal file
View File

@ -0,0 +1,13 @@
#include "act3.h"
// OFFSET: LEGO1 0x10072270 STUB
Act3::Act3()
{
// TODO
}
// OFFSET: LEGO1 0x100726a0 STUB
Act3::~Act3()
{
// TODO
}

31
LEGO1/act3.h Normal file
View File

@ -0,0 +1,31 @@
#ifndef ACT3_H
#define ACT3_H
#include "legoworld.h"
// VTABLE 0x100d9628
// SIZE 0x4274
class Act3 : public LegoWorld
{
public:
Act3();
virtual ~Act3() override; // vtable+00
// OFFSET: LEGO1 0x10072510
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f013c
return "Act3";
}
// OFFSET: LEGO1 0x10072520
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, Act3::ClassName()) || LegoWorld::IsA(name);
}
};
#endif // ACT3_H

18
LEGO1/act3actor.h Normal file
View File

@ -0,0 +1,18 @@
#ifndef ACT3ACTOR_H
#define ACT3ACTOR_H
// FIXME: Uncertain location. There are three vtables which eventually call this
// class' ClassName() function, but none of them call it directly.
class Act3Actor
{
public:
// OFFSET: LEGO1 0x100431b0
inline virtual const char *ClassName() override
{
// 0x100f03ac
return "Act3Actor";
}
};
#endif // ACT3ACTOR_H

1
LEGO1/act3shark.cpp Normal file
View File

@ -0,0 +1 @@
#include "act3shark.h"

18
LEGO1/act3shark.h Normal file
View File

@ -0,0 +1,18 @@
#ifndef ACT3SHARK_H
#define ACT3SHARK_H
#include "legoanimactor.h"
// VTABLE 0x100d7920
class Act3Shark : public LegoAnimActor
{
public:
// OFFSET: LEGO1 0x100430c0
inline virtual const char *ClassName() const override
{
// 0x100f03a0
return "Act3Shark";
}
};
#endif // ACT3SHARK_H

7
LEGO1/act3state.cpp Normal file
View File

@ -0,0 +1,7 @@
#include "act3state.h"
// OFFSET: LEGO1 0x1000e2f0
MxBool Act3State::VTable0x14()
{
return FALSE;
}

37
LEGO1/act3state.h Normal file
View File

@ -0,0 +1,37 @@
#ifndef ACT3STATE_H
#define ACT3STATE_H
#include "legostate.h"
// VTABLE 0x100d4fc8
// SIZE 0xc
class Act3State : public LegoState
{
public:
inline Act3State()
{
m_unk08 = 0;
}
// OFFSET: LEGO1 0x1000e300
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f03f0
return "Act3State";
}
// OFFSET: LEGO1 0x1000e310
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, Act3State::ClassName()) || LegoState::IsA(name);
}
virtual MxBool VTable0x14() override;
private:
// FIXME: May be part of LegoState? Uncertain...
MxU32 m_unk08;
};
#endif // ACT3STATE_H

7
LEGO1/ambulance.cpp Normal file
View File

@ -0,0 +1,7 @@
#include "ambulance.h"
// OFFSET: LEGO1 0x10035ee0 STUB
Ambulance::Ambulance()
{
// TODO
}

28
LEGO1/ambulance.h Normal file
View File

@ -0,0 +1,28 @@
#ifndef AMBULANCE_H
#define AMBULANCE_H
#include "islepathactor.h"
// VTABLE 0x100d71a8
// SIZE 0x184
class Ambulance : public IslePathActor
{
public:
Ambulance();
// OFFSET: LEGO1 0x10035fa0
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f03c4
return "Ambulance";
}
// OFFSET: LEGO1 0x10035fb0
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, Ambulance::ClassName()) || IslePathActor::IsA(name);
}
};
#endif // AMBULANCE_H

View File

@ -0,0 +1,7 @@
#include "ambulancemissionstate.h"
// OFFSET: LEGO1 0x100373a0 STUB
AmbulanceMissionState::AmbulanceMissionState()
{
// TODO
}

View File

@ -0,0 +1,29 @@
#ifndef AMBULANCEMISSIONSTATE_H
#define AMBULANCEMISSIONSTATE_H
#include "legostate.h"
// VTABLE 0x100d72a0
// SIZE 0x24
class AmbulanceMissionState : public LegoState
{
public:
AmbulanceMissionState();
// OFFSET: LEGO1 0x10037600
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f00e8
return "AmbulanceMissionState";
}
// OFFSET: LEGO1 0x10037610
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, AmbulanceMissionState::ClassName()) || LegoState::IsA(name);
}
};
#endif // AMBULANCEMISSIONSTATE_H

13
LEGO1/animstate.cpp Normal file
View File

@ -0,0 +1,13 @@
#include "animstate.h"
// OFFSET: LEGO1 0x10064ff0 STUB
AnimState::AnimState()
{
// TODO
}
// OFFSET: LEGO1 0x10065150 STUB
AnimState::~AnimState()
{
// TODO
}

29
LEGO1/animstate.h Normal file
View File

@ -0,0 +1,29 @@
#ifndef ANIMSTATE_H
#define ANIMSTATE_H
#include "legostate.h"
// VTABLE 0x100d8d80
// SIZE 0x1c
class AnimState : public LegoState
{
public:
AnimState();
virtual ~AnimState() override; // vtable+0x0
// OFFSET: LEGO1 0x10065070
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f0460
return "AnimState";
}
// OFFSET: LEGO1 0x10065080
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, AnimState::ClassName()) || LegoState::IsA(name);
}
};
#endif // ANIMSTATE_H

View File

@ -0,0 +1,9 @@
#include "beachhouseentity.h"
// OFFSET: LEGO1 0x100150a0 STUB
MxLong BeachHouseEntity::Notify(MxParam &p)
{
// TODO
return 0;
}

27
LEGO1/beachhouseentity.h Normal file
View File

@ -0,0 +1,27 @@
#ifndef BEACHHOUSEENTITY_H
#define BEACHHOUSEENTITY_H
#include "buildingentity.h"
// VTABLE 0x100d4a18
// SIZE 0x68
class BeachHouseEntity : public BuildingEntity
{
public:
virtual MxLong Notify(MxParam &p) override; // vtable+04
// OFFSET: LEGO1 0x1000ee80
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f0314
return "BeachHouseEntity";
}
// OFFSET: LEGO1 0x1000ee90
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, BeachHouseEntity::ClassName()) || BuildingEntity::IsA(name);
}
};
#endif // BEACHHOUSEENTITY_H

8
LEGO1/bike.cpp Normal file
View File

@ -0,0 +1,8 @@
#include "bike.h"
// OFFSET: LEGO1 0x10076670 STUB
Bike::Bike()
{
// TODO
}

29
LEGO1/bike.h Normal file
View File

@ -0,0 +1,29 @@
#ifndef BIKE_H
#define BIKE_H
#include "islepathactor.h"
// VTABLE 0x100d9808
// SIZE 0x164
class Bike : public IslePathActor
{
public:
Bike();
// OFFSET: LEGO1 0x100766f0
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f03d0
return "Bike";
}
// OFFSET: LEGO1 0x10076700
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, Bike::ClassName()) || IslePathActor::IsA(name);
}
};
#endif // BIKE_H

13
LEGO1/buildingentity.cpp Normal file
View File

@ -0,0 +1,13 @@
#include "buildingentity.h"
// OFFSET: LEGO1 0x10014e20 STUB
BuildingEntity::BuildingEntity()
{
// TODO
}
// OFFSET: LEGO1 0x10015030 STUB
BuildingEntity::~BuildingEntity()
{
// TODO
}

28
LEGO1/buildingentity.h Normal file
View File

@ -0,0 +1,28 @@
#ifndef BUILDINGENTITY_H
#define BUILDINGENTITY_H
#include "legoentity.h"
// VTABLE 0x100d5c88
// SIZE <= 0x68, hard to tell because it's always constructed as a derivative
class BuildingEntity : public LegoEntity
{
public:
BuildingEntity();
virtual ~BuildingEntity() override; // vtable+0x0
// OFFSET: LEGO1 0x10014f20
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f07e8
return "BuildingEntity";
}
// OFFSET: LEGO1 0x10014f30
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, BuildingEntity::ClassName()) || LegoEntity::IsA(name);
}
};
#endif // BUILDINGENTITY_H

1
LEGO1/bumpbouy.cpp Normal file
View File

@ -0,0 +1 @@
#include "bumpbouy.h"

25
LEGO1/bumpbouy.h Normal file
View File

@ -0,0 +1,25 @@
#ifndef BUMPBOUY_H
#define BUMPBOUY_H
#include "legoanimactor.h"
#include "mxtypes.h"
// VTABLE 0x100d6790
class BumpBouy : public LegoAnimActor
{
public:
// OFFSET: LEGO1 0x100274e0
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f0394
return "BumpBouy";
}
// OFFSET: LEGO1 0x10027500
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, BumpBouy::ClassName()) || LegoAnimActor::IsA(name);
}
};
#endif // BUMPBOUY_H

7
LEGO1/carrace.cpp Normal file
View File

@ -0,0 +1,7 @@
#include "carrace.h"
// OFFSET: LEGO1 0x10016a90 STUB
CarRace::CarRace()
{
// TODO
}

27
LEGO1/carrace.h Normal file
View File

@ -0,0 +1,27 @@
#ifndef CARRACE_H
#define CARRACE_H
#include "legorace.h"
// VTABLE 0x100d5e50
// SIZE 0x154
class CarRace : public LegoRace
{
public:
CarRace();
// OFFSET: LEGO1 0x10016b20
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f0528
return "CarRace";
}
// OFFSET: LEGO1 0x10016b30
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, CarRace::ClassName()) || LegoRace::IsA(name);
}
};
#endif // CARRACE_H

25
LEGO1/carracestate.h Normal file
View File

@ -0,0 +1,25 @@
#ifndef CARRACESTATE_H
#define CARRACESTATE_H
#include "racestate.h"
// VTABLE 0x100d4b70
// SIZE 0x2c
class CarRaceState : public RaceState
{
public:
// OFFSET: LEGO1 0x1000dd30
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f009c
return "CarRaceState";
}
// OFFSET: LEGO1 0x1000dd40
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, CarRaceState::ClassName()) || RaceState::IsA(name);
}
};
#endif // CARRACESTATE_H

14
LEGO1/compat.h Normal file
View File

@ -0,0 +1,14 @@
#ifndef ISLECOMPAT_H
#define ISLECOMPAT_H
// Various macros to enable compiling with other/newer compilers.
// Use `COMPAT_CONST` where something ought to be 'const', and a newer compiler would complain if it
// wasn't, but we know it isn't 'const' in the original code.
#ifdef __MINGW32__
#define COMPAT_CONST const
#else
#define COMPAT_CONST
#endif
#endif // ISLECOMPAT_H

11
LEGO1/decomp.h Normal file
View File

@ -0,0 +1,11 @@
#ifndef DECOMP_H
#define DECOMP_H
#define DECOMP_STATIC_ASSERT(V) namespace { typedef int foo[(V)?1:-1]; }
#define DECOMP_SIZE_ASSERT(T, S) DECOMP_STATIC_ASSERT(sizeof(T) == S)
typedef unsigned char undefined;
typedef unsigned short undefined2;
typedef unsigned int undefined4;
#endif // DECOMP_H

View File

@ -1,7 +1,7 @@
#include <windows.h>
// OFFSET: LEGO1 0x10091ee0
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
__declspec(dllexport) BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
return TRUE;
}

26
LEGO1/doors.h Normal file
View File

@ -0,0 +1,26 @@
#ifndef DOORS_H
#define DOORS_H
#include "legopathactor.h"
// VTABLE 0x100d4788
// SIZE 0x1f8
class Doors : public LegoPathActor
{
public:
// OFFSET: LEGO1 0x1000e430
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f03e8
return "Doors";
}
// OFFSET: LEGO1 0x1000e440
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, Doors::ClassName()) || LegoPathActor::IsA(name);
}
};
#endif // DOORS_H

7
LEGO1/dunebuggy.cpp Normal file
View File

@ -0,0 +1,7 @@
#include "dunebuggy.h"
// OFFSET: LEGO1 0x10067bb0 STUB
DuneBuggy::DuneBuggy()
{
// TODO
}

28
LEGO1/dunebuggy.h Normal file
View File

@ -0,0 +1,28 @@
#ifndef DUNEBUGGY_H
#define DUNEBUGGY_H
#include "islepathactor.h"
// VTABLE 0x100d8f98
// SIZE 0x16c
class DuneBuggy : public IslePathActor
{
public:
DuneBuggy();
// OFFSET: LEGO1 0x10067c30
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f0410
return "DuneBuggy";
}
// OFFSET: LEGO1 0x10067c40
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, DuneBuggy::ClassName()) || IslePathActor::IsA(name);
}
};
#endif // DUNEBUGGY_H

21
LEGO1/elevatorbottom.cpp Normal file
View File

@ -0,0 +1,21 @@
#include "elevatorbottom.h"
// OFFSET: LEGO1 0x10017e90 STUB
ElevatorBottom::ElevatorBottom()
{
// TODO
}
// OFFSET: LEGO1 0x10018060 STUB
ElevatorBottom::~ElevatorBottom()
{
// TODO
}
// OFFSET: LEGO1 0x10018150 STUB
MxLong ElevatorBottom::Notify(MxParam &p)
{
// TODO
return 0;
}

30
LEGO1/elevatorbottom.h Normal file
View File

@ -0,0 +1,30 @@
#ifndef ELEVATORBOTTOM_H
#define ELEVATORBOTTOM_H
#include "legoworld.h"
// VTABLE 0x100d5f20
class ElevatorBottom : public LegoWorld
{
public:
ElevatorBottom();
virtual ~ElevatorBottom() override; // vtable+0x0
virtual MxLong Notify(MxParam &p) override; // vtable+0x4
// OFFSET: LEGO1 0x10017f20
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f04ac
return "ElevatorBottom";
}
// OFFSET: LEGO1 0x10017f30
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, ElevatorBottom::ClassName()) || LegoWorld::IsA(name);
}
};
#endif // ELEVATORBOTTOM_H

29
LEGO1/gasstation.cpp Normal file
View File

@ -0,0 +1,29 @@
#include "gasstation.h"
// OFFSET: LEGO1 0x100046a0 STUB
GasStation::GasStation()
{
// TODO
}
// OFFSET: LEGO1 0x100048c0 STUB
GasStation::~GasStation()
{
// TODO
}
// OFFSET: LEGO1 0x10004a60 STUB
MxLong GasStation::Notify(MxParam &p)
{
// TODO
return 0;
}
// OFFSET: LEGO1 0x10005c90 STUB
MxLong GasStation::Tickle()
{
// TODO
return 0;
}

33
LEGO1/gasstation.h Normal file
View File

@ -0,0 +1,33 @@
#ifndef GASSTATION_H
#define GASSTATION_H
#include "legoworld.h"
// VTABLE 0x100d4650
// SIZE 0x128
// Radio variable at 0x46, in constructor
class GasStation : public LegoWorld
{
public:
GasStation();
virtual ~GasStation() override; // vtable+0x0
virtual MxLong Notify(MxParam &p) override; // vtable+0x4
virtual MxLong Tickle() override; // vtable+0x8
// OFFSET: LEGO1 0x10004780
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f0168
return "GasStation";
}
// OFFSET: LEGO1 0x10004790
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, GasStation::ClassName()) || LegoWorld::IsA(name);
}
};
#endif // GASSTATION_H

View File

@ -0,0 +1 @@
#include "gasstationentity.h"

25
LEGO1/gasstationentity.h Normal file
View File

@ -0,0 +1,25 @@
#ifndef GASSTATIONENTITY_H
#define GASSTATIONENTITY_H
#include "buildingentity.h"
// VTABLE 0x100d5258
// SIZE 0x68
class GasStationEntity : public BuildingEntity
{
public:
// OFFSET: LEGO1 0x1000eb20
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f0348
return "GasStationEntity";
}
// OFFSET: LEGO1 0x1000eb30
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, GasStationEntity::ClassName()) || BuildingEntity::IsA(name);
}
};
#endif // GASSTATIONENTITY_H

View File

@ -0,0 +1,7 @@
#include "gasstationstate.h"
// OFFSET: LEGO1 0x10005eb0 STUB
GasStationState::GasStationState()
{
// TODO
}

28
LEGO1/gasstationstate.h Normal file
View File

@ -0,0 +1,28 @@
#ifndef GASSTATIONSTATE_H
#define GASSTATIONSTATE_H
#include "legostate.h"
// VTABLE 0x100d46e0
// SIZE 0x24
class GasStationState : public LegoState
{
public:
GasStationState();
// OFFSET: LEGO1 0x100061d0
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f0174
return "GasStationState";
}
// OFFSET: LEGO1 0x100061e0
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, GasStationState::ClassName()) || LegoState::IsA(name);
}
};
#endif // GASSTATIONSTATE_H

13
LEGO1/helicopter.cpp Normal file
View File

@ -0,0 +1,13 @@
#include "helicopter.h"
// OFFSET: LEGO1 0x10001e60 STUB
Helicopter::Helicopter()
{
// TODO
}
// OFFSET: LEGO1 0x10003230 STUB
Helicopter::~Helicopter()
{
// TODO
}

29
LEGO1/helicopter.h Normal file
View File

@ -0,0 +1,29 @@
#ifndef HELICOPTER_H
#define HELICOPTER_H
#include "islepathactor.h"
// VTABLE 0x100d40f8
// SIZE 0x230
class Helicopter : public IslePathActor
{
public:
Helicopter();
virtual ~Helicopter(); // vtable+0x0
// OFFSET: LEGO1 0x10003070
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f0130
return "Helicopter";
}
// OFFSET: LEGO1 0x10003080
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, Helicopter::ClassName()) || IslePathActor::IsA(name);
}
};
#endif // HELICOPTER_H

View File

@ -0,0 +1 @@
#include "helicopterstate.h"

25
LEGO1/helicopterstate.h Normal file
View File

@ -0,0 +1,25 @@
#ifndef HELICOPTERSTATE_H
#define HELICOPTERSTATE_H
#include "legostate.h"
// VTABLE 0x100d5418
// SIZE 0xc
class HelicopterState : public LegoState
{
public:
// OFFSET: LEGO1 0x1000e0d0
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f0144
return "HelicopterState";
}
// OFFSET: LEGO1 0x1000e0e0
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, HelicopterState::ClassName()) || LegoState::IsA(name);
}
};
#endif // HELICOPTERSTATE_H

21
LEGO1/historybook.cpp Normal file
View File

@ -0,0 +1,21 @@
#include "historybook.h"
// OFFSET: LEGO1 0x100822f0 STUB
HistoryBook::HistoryBook()
{
// TODO
}
// OFFSET: LEGO1 0x100824d0 STUB
HistoryBook::~HistoryBook()
{
// TODO
}
// OFFSET: LEGO1 0x10082680 STUB
MxLong HistoryBook::Notify(MxParam &p)
{
// TODO
return 0;
}

30
LEGO1/historybook.h Normal file
View File

@ -0,0 +1,30 @@
#ifndef HISTORYBOOK_H
#define HISTORYBOOK_H
#include "legoworld.h"
// VTABLE 0x100da328
// SIZE 0x3e4
class HistoryBook : public LegoWorld
{
public:
HistoryBook();
virtual ~HistoryBook() override; // vtable+0x0
virtual MxLong Notify(MxParam &p) override; // vtable+0x4
// OFFSET: LEGO1 0x10082390
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f04bc
return "HistoryBook";
}
// OFFSET: LEGO1 0x100823a0
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, HistoryBook::ClassName()) || LegoWorld::IsA(name);
}
};
#endif // HISTORYBOOK_H

21
LEGO1/hospital.cpp Normal file
View File

@ -0,0 +1,21 @@
#include "hospital.h"
// OFFSET: LEGO1 0x100745e0 STUB
Hospital::Hospital()
{
// TODO
}
// OFFSET: LEGO1 0x100747f0 STUB
Hospital::~Hospital()
{
// TODO
}
// OFFSET: LEGO1 0x10074990 STUB
MxLong Hospital::Notify(MxParam &p)
{
// TODO
return 0;
}

31
LEGO1/hospital.h Normal file
View File

@ -0,0 +1,31 @@
#ifndef HOSPITAL_H
#define HOSPITAL_H
#include "legoworld.h"
// VTABLE 0x100d9730
// SIZE 0x12c
class Hospital : public LegoWorld
{
public:
Hospital();
virtual ~Hospital() override; // vtable+0x0
virtual MxLong Notify(MxParam &p) override; // vtable+0x04
// OFFSET: LEGO1 0x100746b0
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f0490
return "Hospital";
}
// OFFSET: LEGO1 0x100746c0
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, Hospital::ClassName()) || LegoWorld::IsA(name);
}
};
#endif // HOSPITAL_H

1
LEGO1/hospitalentity.cpp Normal file
View File

@ -0,0 +1 @@
#include "hospitalentity.h"

26
LEGO1/hospitalentity.h Normal file
View File

@ -0,0 +1,26 @@
#ifndef HOSPITALENTITY_H
#define HOSPITALENTITY_H
#include "buildingentity.h"
// VTABLE 0x100d5068
// SIZE 0x68
class HospitalEntity : public BuildingEntity
{
public:
// OFFSET: LEGO1 0x1000ec40
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f0338
return "HospitalEntity";
}
// OFFSET: LEGO1 0x1000ec50
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, HospitalEntity::ClassName()) || BuildingEntity::IsA(name);
}
};
#endif // HOSPITALENTITY_H

7
LEGO1/hospitalstate.cpp Normal file
View File

@ -0,0 +1,7 @@
#include "hospitalstate.h"
// OFFSET: LEGO1 0x10076370 STUB
HospitalState::HospitalState()
{
// TODO
}

28
LEGO1/hospitalstate.h Normal file
View File

@ -0,0 +1,28 @@
#ifndef HOSPITALSTATE_H
#define HOSPITALSTATE_H
#include "legostate.h"
// VTABLE 0x100d97a0
// SIZE 0x18
class HospitalState : public LegoState
{
public:
HospitalState();
// OFFSET: LEGO1 0x10076400
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f0480
return "HospitalState";
}
// OFFSET: LEGO1 0x10076410
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, HospitalState::ClassName()) || LegoState::IsA(name);
}
};
#endif // HOSPITALSTATE_H

29
LEGO1/infocenter.cpp Normal file
View File

@ -0,0 +1,29 @@
#include "infocenter.h"
// OFFSET: LEGO1 0x1006ea20 STUB
Infocenter::Infocenter()
{
// TODO
}
// OFFSET: LEGO1 0x1006ec90 STUB
Infocenter::~Infocenter()
{
// TODO
}
// OFFSET: LEGO1 0x1006ef10 STUB
MxLong Infocenter::Notify(MxParam &p)
{
// TODO
return 0;
}
// OFFSET: LEGO1 0x10070af0 STUB
MxLong Infocenter::Tickle()
{
// TODO
return 0;
}

32
LEGO1/infocenter.h Normal file
View File

@ -0,0 +1,32 @@
#ifndef INFOCENTER_H
#define INFOCENTER_H
#include "legoworld.h"
// VTABLE 0x100d9338
// SIZE 0x1d8
class Infocenter : public LegoWorld
{
public:
Infocenter();
virtual ~Infocenter() override;
virtual MxLong Notify(MxParam &p) override; // vtable+0x4
virtual MxLong Tickle() override; // vtable+0x8
// OFFSET: LEGO1 0x1006eb40
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f04ec
return "Infocenter";
}
// OFFSET: LEGO1 0x1006eb50
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, Infocenter::ClassName()) || LegoWorld::IsA(name);
}
};
#endif // INFOCENTER_H

21
LEGO1/infocenterdoor.cpp Normal file
View File

@ -0,0 +1,21 @@
#include "infocenterdoor.h"
// OFFSET: LEGO1 0x10037730 STUB
InfocenterDoor::InfocenterDoor()
{
// TODO
}
// OFFSET: LEGO1 0x100378f0 STUB
InfocenterDoor::~InfocenterDoor()
{
// TODO
}
// OFFSET: LEGO1 0x100379e0 STUB
MxLong InfocenterDoor::Notify(MxParam &p)
{
// TODO
return 0;
}

31
LEGO1/infocenterdoor.h Normal file
View File

@ -0,0 +1,31 @@
#ifndef INFOCENTERDOOR_H
#define INFOCENTERDOOR_H
#include "legoworld.h"
// VTABLE 0x100d72d8
// SIZE 0xfc
class InfocenterDoor : public LegoWorld
{
public:
InfocenterDoor();
virtual ~InfocenterDoor(); // vtable+0x0
virtual MxLong Notify(MxParam &p) override; // vtable+0x4
// OFFSET: LEGO1 0x100377b0
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f049c
return "InfocenterDoor";
}
// OFFSET: LEGO1 0x100377c0
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, InfocenterDoor::ClassName()) || LegoWorld::IsA(name);
}
};
#endif // INFOCENTERDOOR_H

View File

@ -0,0 +1 @@
#include "infocenterentity.h"

26
LEGO1/infocenterentity.h Normal file
View File

@ -0,0 +1,26 @@
#ifndef INFOCENTERENTITY_H
#define INFOCENTERENTITY_H
#include "buildingentity.h"
// VTABLE 0x100d4b90
// SIZE 0x68
class InfoCenterEntity : public BuildingEntity
{
public:
// OFFSET: LEGO1 0x1000ea00
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f035c
return "InfoCenterEntity";
}
// OFFSET: LEGO1 0x1000ea10
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, InfoCenterEntity::ClassName()) || BuildingEntity::IsA(name);
}
};
#endif // INFOCENTERENTITY_H

14
LEGO1/infocenterstate.cpp Normal file
View File

@ -0,0 +1,14 @@
#include "infocenterstate.h"
// OFFSET: LEGO1 0x10071600 STUB
InfocenterState::InfocenterState()
{
// TODO
}
// OFFSET: LEGO1 0x10071920 STUB
InfocenterState::~InfocenterState()
{
// TODO
}

28
LEGO1/infocenterstate.h Normal file
View File

@ -0,0 +1,28 @@
#ifndef INFOCENTERSTATE_H
#define INFOCENTERSTATE_H
#include "legostate.h"
// VTABLE 0x100d93a8
// SIZE 0x94
class InfocenterState : public LegoState
{
public:
InfocenterState();
virtual ~InfocenterState();
// OFFSET: LEGO1 0x10071840
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f04dc
return "InfocenterState";
}
// OFFSET: LEGO1 0x10071850
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, InfocenterState::ClassName()) || LegoState::IsA(name);
}
};
#endif // INFOCENTERSTATE_H

7
LEGO1/isle.cpp Normal file
View File

@ -0,0 +1,7 @@
#include "isle.h"
// OFFSET: LEGO1 0x10030820 STUB
Isle::Isle()
{
// TODO
}

28
LEGO1/isle.h Normal file
View File

@ -0,0 +1,28 @@
#ifndef ISLE_H
#define ISLE_H
#include "legoworld.h"
// VTABLE 0x100d6fb8
// SIZE 0x140
// Radio at 0x12c
class Isle : public LegoWorld
{
public:
Isle();
// OFFSET: LEGO1 0x10030910
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f0458
return "Isle";
}
// OFFSET: LEGO1 0x10030920
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, Isle::ClassName()) || LegoWorld::IsA(name);
}
};
#endif // ISLE_H

1
LEGO1/isleactor.cpp Normal file
View File

@ -0,0 +1 @@
#include "isleactor.h"

24
LEGO1/isleactor.h Normal file
View File

@ -0,0 +1,24 @@
#ifndef ISLEACTOR_H
#define ISLEACTOR_H
#include "legoactor.h"
// VTABLE 0x100d5178
class IsleActor : public LegoActor
{
public:
// OFFSET: LEGO1 0x1000e660
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f07dc
return "IsleActor";
}
// OFFSET: LEGO1 0x1000e670
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, IsleActor::ClassName()) || LegoActor::IsA(name);
}
};
#endif // ISLEACTOR_H

1
LEGO1/islepathactor.cpp Normal file
View File

@ -0,0 +1 @@
#include "islepathactor.h"

25
LEGO1/islepathactor.h Normal file
View File

@ -0,0 +1,25 @@
#ifndef ISLEPATHACTOR_H
#define ISLEPATHACTOR_H
#include "legopathactor.h"
// VTABLE 0x100d4398
// SIZE >= 0x230
class IslePathActor : public LegoPathActor
{
public:
// OFFSET: LEGO1 0x10002ea0
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f0104
return "IslePathActor";
}
// OFFSET: LEGO1 0x10002eb0
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, IslePathActor::ClassName()) || LegoPathActor::IsA(name);
}
};
#endif // ISLEPATHACTOR_H

7
LEGO1/jetski.cpp Normal file
View File

@ -0,0 +1,7 @@
#include "jetski.h"
// OFFSET: LEGO1 0x1007e3b0 STUB
Jetski::Jetski()
{
// TODO
}

29
LEGO1/jetski.h Normal file
View File

@ -0,0 +1,29 @@
#ifndef JETSKI_H
#define JETSKI_H
#include "islepathactor.h"
// VTABLE 0x100d9ec8
// SIZE 0x164
class Jetski : public IslePathActor
{
public:
Jetski();
// OFFSET: LEGO1 0x1007e430
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f03d8
return "Jetski";
}
// OFFSET: LEGO1 0x1007e440
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, Jetski::ClassName()) || IslePathActor::IsA(name);
}
};
#endif // JETSKI_H

1
LEGO1/jetskirace.cpp Normal file
View File

@ -0,0 +1 @@
#include "jetskirace.h"

26
LEGO1/jetskirace.h Normal file
View File

@ -0,0 +1,26 @@
#ifndef JETSKIRACE_H
#define JETSKIRACE_H
#include "legorace.h"
// VTABLE 0x100d4fe8
// SIZE 0x144
class JetskiRace : public LegoRace
{
public:
// OFFSET: LEGO1 0x1000daf0
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f0530
return "JetskiRace";
}
// OFFSET: LEGO1 0x1000db00
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, JetskiRace::ClassName()) || LegoRace::IsA(name);
}
};
#endif // JETSKIRACE_H

26
LEGO1/jetskiracestate.h Normal file
View File

@ -0,0 +1,26 @@
#ifndef JETSKIRACESTATE_H
#define JETSKIRACESTATE_H
#include "racestate.h"
// VTABLE 0x100d4fa8
// SIZE 0x2c
class JetskiRaceState : public RaceState
{
public:
// OFFSET: LEGO1 0x1000dc40
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f00ac
return "JetskiRaceState";
}
// OFFSET: LEGO1 0x1000dc50
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, JetskiRaceState::ClassName()) || RaceState::IsA(name);
}
};
#endif // JETSKIRACESTATE_H

7
LEGO1/jukebox.cpp Normal file
View File

@ -0,0 +1,7 @@
#include "jukebox.h"
// OFFSET: LEGO1 0x1005d660 STUB
JukeBox::JukeBox()
{
// TODO
}

28
LEGO1/jukebox.h Normal file
View File

@ -0,0 +1,28 @@
#ifndef JUKEBOX_H
#define JUKEBOX_H
#include "legoworld.h"
// VTABLE 0x100d8958
// SIZE 0x104
class JukeBox : public LegoWorld
{
public:
JukeBox();
// OFFSET: LEGO1 0x1005d6f0
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f02cc
return "JukeBox";
}
// OFFSET: LEGO1 0x1005d700
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, JukeBox::ClassName()) || LegoWorld::IsA(name);
}
};
#endif // JUKEBOX_H

13
LEGO1/jukeboxentity.cpp Normal file
View File

@ -0,0 +1,13 @@
#include "jukeboxentity.h"
// OFFSET: LEGO1 0x10085bc0 STUB
JukeBoxEntity::JukeBoxEntity()
{
// TODO
}
// OFFSET: LEGO1 0x10085dd0 STUB
JukeBoxEntity::~JukeBoxEntity()
{
// TODO
}

29
LEGO1/jukeboxentity.h Normal file
View File

@ -0,0 +1,29 @@
#ifndef JUKEBOXENTITY_H
#define JUKEBOXENTITY_H
#include "legoentity.h"
// VTABLE 0x100da8a0
// SIZE 0x6c
class JukeBoxEntity : public LegoEntity
{
public:
JukeBoxEntity();
virtual ~JukeBoxEntity() override; // vtable+0x0
// OFFSET: LEGO1 0x10085cc0
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f02f0
return "JukeBoxEntity";
}
// OFFSET: LEGO1 0x10085cd0
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, JukeBoxEntity::ClassName()) || LegoEntity::IsA(name);
}
};
#endif // JUKEBOXENTITY_H

1
LEGO1/jukeboxstate.cpp Normal file
View File

@ -0,0 +1 @@
#include "jukeboxstate.h"

26
LEGO1/jukeboxstate.h Normal file
View File

@ -0,0 +1,26 @@
#ifndef JUKEBOXSTATE_H
#define JUKEBOXSTATE_H
#include "legostate.h"
// VTABLE 0x100d4a90
// SIZE 0x10
class JukeBoxState : public LegoState
{
public:
// OFFSET: LEGO1 0x1000f310
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f02bc
return "JukeBoxState";
}
// OFFSET: LEGO1 0x1000f320
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, JukeBoxState::ClassName()) || LegoState::IsA(name);
}
};
#endif // JUKEBOXSTATE_H

View File

@ -0,0 +1,25 @@
#ifndef LEGO3DWAVEPRESENTER_H
#define LEGO3DWAVEPRESENTER_H
#include "legowavepresenter.h"
// VTABLE 0x100d52b0
// SIZE 0xa0
class Lego3DWavePresenter : public LegoWavePresenter
{
public:
// OFFSET: LEGO1 0x1000d890
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f058c
return "Lego3DWavePresenter";
}
// OFFSET: LEGO1 0x1000d8a0
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, Lego3DWavePresenter::ClassName()) || MxWavePresenter::IsA(name);
}
};
#endif // LEGO3DWAVEPRESENTER_H

1
LEGO1/legoact2state.cpp Normal file
View File

@ -0,0 +1 @@
#include "legoact2state.h"

26
LEGO1/legoact2state.h Normal file
View File

@ -0,0 +1,26 @@
#ifndef LEGOACT2STATE_H
#define LEGOACT2STATE_H
#include "legostate.h"
// VTABLE 0x100d4a70
// SIZE 0x10
class LegoAct2State : public LegoState
{
public:
// OFFSET: LEGO1 0x1000df80
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f0428
return "LegoAct2State";
}
// OFFSET: LEGO1 0x1000df90
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, LegoAct2State::ClassName()) || LegoState::IsA(name);
}
};
#endif // LEGOACT2STATE_H

View File

@ -0,0 +1 @@
#include "legoactioncontrolpresenter.h"

View File

@ -0,0 +1,25 @@
#ifndef LEGOACTIONCONTROLPRESENTER_H
#define LEGOACTIONCONTROLPRESENTER_H
#include "mxmediapresenter.h"
// VTABLE 0x100d5118
// SIZE 0x68
class LegoActionControlPresenter : public MxMediaPresenter
{
public:
// OFFSET: LEGO1 0x1000d0e0
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f05bc
return "LegoActionControlPresenter";
}
// OFFSET: LEGO1 0x1000d0f0
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, LegoActionControlPresenter::ClassName()) || MxMediaPresenter::IsA(name);
}
};
#endif // LEGOACTIONCONTROLPRESENTER_H

25
LEGO1/legoactor.h Normal file
View File

@ -0,0 +1,25 @@
#ifndef LEGOACTOR_H
#define LEGOACTOR_H
#include "legoentity.h"
// VTABLE 0x100d6d68
// SIZE 0x78
class LegoActor : public LegoEntity
{
public:
// OFFSET: LEGO1 0x1002d210
inline virtual const char *ClassName() const override // vtable+0x0c
{
// 0x100f0124
return "LegoActor";
}
// OFFSET: LEGO1 0x1002d220
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, LegoActor::ClassName()) || LegoEntity::IsA(name);
}
};
#endif // LEGOACTOR_H

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