Merge remote-tracking branch 'upstream/master' into impl/legosoundmanager

This commit is contained in:
Misha 2024-02-02 18:20:43 -05:00
commit c1092ea2bc
No known key found for this signature in database
GPG Key ID: 8441D12AEF33FED8
758 changed files with 33092 additions and 12764 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,10 +4,11 @@ on: [push, pull_request]
jobs:
decomplint-isle:
name: 'ISLE annotations'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Install python libraries
run: |
@ -18,10 +19,11 @@ jobs:
python3 tools/decomplint/decomplint.py ISLE --module ISLE --warnfail
decomplint-lego1:
name: 'LEGO1 annotations'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Install python libraries
run: |

View File

@ -3,13 +3,66 @@ name: Build
on: [push, pull_request]
jobs:
build-current-toolchain:
name: 'Current ${{ matrix.toolchain.name }}'
runs-on: windows-latest
defaults:
run:
shell: ${{ matrix.toolchain.shell }}
strategy:
fail-fast: false
matrix:
toolchain:
- { name: 'MSVC', shell: 'sh', setup-cmake: true, setup-ninja: true, setup-msvc: 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.msystem }}
uses: msys2/setup-msys2@v2
with:
msystem: ${{ matrix.toolchain.msystem }}
install: >-
${{ 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
uses: jwlawson/actions-setup-cmake@v1.13
- name: Setup ninja
if: matrix.toolchain.setup-ninja
uses: ashutoshvarma/setup-ninja@master
- name: Setup vcvars
if: matrix.toolchain.setup-msvc
uses: ilammy/msvc-dev-cmd@v1
with:
arch: amd64_x86 # Use the 64-bit x64-native cross tools to build 32-bit x86 code
- uses: actions/checkout@v4
- name: Build
run: |
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
@ -28,10 +81,8 @@ jobs:
shell: cmd
run: |
call .\msvc420\bin\VCVARS32.BAT x86
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -G "NMake Makefiles"
cmake --build .
cmake -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo -G "NMake Makefiles"
cmake --build build
- name: Upload Artifact
uses: actions/upload-artifact@master
@ -44,6 +95,7 @@ jobs:
build/LEGO1.PDB
compare:
name: 'Compare with master'
needs: build
runs-on: windows-latest
steps:
@ -100,6 +152,12 @@ jobs:
run: |
python3 tools/verexp/verexp.py legobin/LEGO1.DLL build/LEGO1.DLL
- name: Check Vtables
shell: bash
run: |
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 .
- name: Upload Artifact
uses: actions/upload-artifact@master
with:
@ -109,11 +167,12 @@ jobs:
LEGO1PROGRESS.*
upload:
name: 'Upload artifacts'
needs: [build, compare]
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'

View File

@ -4,35 +4,32 @@ on: [push, pull_request]
jobs:
clang-format:
name: 'C++'
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 \
pipx run "clang-format>=17,<18" \
--Werror \
--dry-run \
--style=file \
ISLE/*.cpp ISLE/*.h \
LEGO1/*.cpp LEGO1/*.h \
LEGO1/mxstl/*.h \
LEGO1/realtime/*.cpp LEGO1/realtime/*.h \
LEGO1/tgl/*.h \
LEGO1/tgl/d3drm/*.cpp LEGO1/tgl/d3drm/*.h \
LEGO1/viewmanager/*.cpp LEGO1/viewmanager/*.h
-i
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

View File

@ -4,10 +4,11 @@ on: [push, pull_request]
jobs:
ncc:
name: 'C++'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Install LLVM and Clang
uses: KyleMayes/install-llvm-action@v1
@ -22,8 +23,14 @@ jobs:
run: |
python3 tools/ncc/ncc.py \
--clang-lib ${{ env.LLVM_PATH }}/lib/libclang.so \
--recurse \
--style tools/ncc/ncc.style \
--skip tools/ncc/skip.yml \
--definition WINAPI FAR HWND__=HWND \
--include util \
--path LEGO1
--definition WINAPI FAR BOOL CALLBACK HWND__=HWND \
--include \
util \
LEGO1 \
LEGO1/omni/include \
LEGO1/lego/legoomni/include \
LEGO1/lego/sources \
--path LEGO1/omni LEGO1/lego/legoomni

View File

@ -1,13 +1,14 @@
name: Unit Tests
name: Test
on: [push, pull_request]
jobs:
pytest-win:
name: 'Python Windows'
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Install python libraries
shell: bash
@ -20,10 +21,11 @@ jobs:
pytest tools/isledecomp
pytest-ubuntu:
name: 'Python Linux'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Install python libraries
shell: bash

2
.gitignore vendored
View File

@ -14,7 +14,7 @@ env.bak/
venv.bak/
ISLE.EXE
LEGO1.DLL
build/
/build/
*.swp
LEGO1PROGRESS.*
ISLEPROGRESS.*

View File

@ -136,8 +136,8 @@ typedef struct _D3DRMIMAGE
int bytes_per_line; /* number of bytes of memory for a
scanline. This must be a multiple
of 4. */
void* buffer1; /* memory to render into (first buffer). */
void* buffer2; /* second rendering buffer for double
char* buffer1; /* memory to render into (first buffer). */
char* buffer2; /* second rendering buffer for double
buffering, set to NULL for single
buffering. */
unsigned long red_mask;

866
3rdparty/flic/flic.asm vendored Normal file
View File

@ -0,0 +1,866 @@
.486
.387
option dotname
.model flat, c
assume fs:nothing
public FUN_100bd530
public FUN_100bd580
public FUN_100bd600
public FUN_100bd680
public FUN_100bd6e0
public FUN_100bd760
public FUN_100bd880
public FUN_100bd8a0
public FUN_100bd8f0
public FUN_100bd940
public FUN_100bd960
public FUN_100bda10
public FUN_100bdac0
public FUN_100bdc00
public FUN_100bdc90
public DecodeFLCFrame
; This is so reccmp can detect the end of DecodeFLCFrame
public EndOfSection
.text SEGMENT BYTE PUBLIC 'CODE'
FUN_100bd530 LABEL NEAR
mov ax, word ptr [esp+0CH] ; 100BD530 _ 66: 8B. 44 24, 0C
push esi ; 100BD535 _ 56
test ax, ax ; 100BD536 _ 66: 85. C0
push edi ; 100BD539 _ 57
jl ?_25163 ; 100BD53A _ 7C, 34
mov cx, word ptr [esp+18H] ; 100BD53C _ 66: 8B. 4C 24, 18
test cx, cx ; 100BD541 _ 66: 85. C9
jl ?_25163 ; 100BD544 _ 7C, 2A
mov edx, dword ptr [esp+0CH] ; 100BD546 _ 8B. 54 24, 0C
movsx edi, ax ; 100BD54A _ 0F BF. F8
mov esi, dword ptr [edx+4H] ; 100BD54D _ 8B. 72, 04
cmp esi, edi ; 100BD550 _ 3B. F7
jle ?_25163 ; 100BD552 _ 7E, 1C
movsx eax, cx ; 100BD554 _ 0F BF. C1
cmp dword ptr [edx+8H], eax ; 100BD557 _ 39. 42, 08
jle ?_25163 ; 100BD55A _ 7E, 14
add esi, 3 ; 100BD55C _ 83. C6, 03
mov cl, byte ptr [esp+1CH] ; 100BD55F _ 8A. 4C 24, 1C
and esi, 0FFFFFFFCH ; 100BD563 _ 83. E6, FC
imul esi, eax ; 100BD566 _ 0F AF. F0
add esi, dword ptr [esp+10H] ; 100BD569 _ 03. 74 24, 10
mov byte ptr [esi+edi], cl ; 100BD56D _ 88. 0C 3E
?_25163:pop edi ; 100BD570 _ 5F
pop esi ; 100BD571 _ 5E
ret ; 100BD572 _ C3
; Filling space: 0DH
; Filler type: INT 3 Debug breakpoint
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
FUN_100bd580 LABEL NEAR
lea eax, [esp+18H] ; 100BD580 _ 8D. 44 24, 18
push esi ; 100BD584 _ 56
mov si, word ptr [esp+10H] ; 100BD585 _ 66: 8B. 74 24, 10
push edi ; 100BD58A _ 57
lea ecx, [esp+18H] ; 100BD58B _ 8D. 4C 24, 18
push eax ; 100BD58F _ 50
lea edx, [esp+18H] ; 100BD590 _ 8D. 54 24, 18
push ecx ; 100BD594 _ 51
mov edi, dword ptr [esp+14H] ; 100BD595 _ 8B. 7C 24, 14
push edx ; 100BD599 _ 52
push edi ; 100BD59A _ 57
call FUN_100bd600 ; 100BD59B _ E8, 00000060
add esp, 16 ; 100BD5A0 _ 83. C4, 10
test eax, eax ; 100BD5A3 _ 85. C0
jz ?_25167 ; 100BD5A5 _ 74, 4A
mov ax, word ptr [esp+14H] ; 100BD5A7 _ 66: 8B. 44 24, 14
sub ax, si ; 100BD5AC _ 66: 2B. C6
jz ?_25165 ; 100BD5AF _ 74, 0B
movsx eax, ax ; 100BD5B1 _ 0F BF. C0
mov esi, dword ptr [esp+1CH] ; 100BD5B4 _ 8B. 74 24, 1C
add esi, eax ; 100BD5B8 _ 03. F0
jmp ?_25166 ; 100BD5BA _ EB, 04
?_25165:mov esi, dword ptr [esp+1CH] ; 100BD5BC _ 8B. 74 24, 1C
?_25166:movsx edx, word ptr [esp+20H] ; 100BD5C0 _ 0F BF. 54 24, 20
mov ecx, dword ptr [edi+4H] ; 100BD5C5 _ 8B. 4F, 04
movsx eax, word ptr [esp+18H] ; 100BD5C8 _ 0F BF. 44 24, 18
add ecx, 3 ; 100BD5CD _ 83. C1, 03
and ecx, 0FFFFFFFCH ; 100BD5D0 _ 83. E1, FC
movsx edi, word ptr [esp+14H] ; 100BD5D3 _ 0F BF. 7C 24, 14
imul ecx, eax ; 100BD5D8 _ 0F AF. C8
add ecx, edi ; 100BD5DB _ 03. CF
mov edi, dword ptr [esp+10H] ; 100BD5DD _ 8B. 7C 24, 10
add edi, ecx ; 100BD5E1 _ 03. F9
mov ecx, edx ; 100BD5E3 _ 8B. CA
shr ecx, 2 ; 100BD5E5 _ C1. E9, 02
rep movsd ; 100BD5E8 _ F3: A5
mov ecx, edx ; 100BD5EA _ 8B. CA
and ecx, 03H ; 100BD5EC _ 83. E1, 03
rep movsb ; 100BD5EF _ F3: A4
?_25167:pop edi ; 100BD5F1 _ 5F
pop esi ; 100BD5F2 _ 5E
ret ; 100BD5F3 _ C3
; Filling space: 0CH
; Filler type: INT 3 Debug breakpoint
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
db 0CCH, 0CCH, 0CCH, 0CCH
FUN_100bd600 LABEL NEAR
mov ecx, dword ptr [esp+8H] ; 100BD600 _ 8B. 4C 24, 08
push ebx ; 100BD604 _ 53
mov bx, word ptr [ecx] ; 100BD605 _ 66: 8B. 19
push esi ; 100BD608 _ 56
mov eax, dword ptr [esp+14H] ; 100BD609 _ 8B. 44 24, 14
push edi ; 100BD60D _ 57
mov ax, word ptr [eax] ; 100BD60E _ 66: 8B. 00
push ebp ; 100BD611 _ 55
test ax, ax ; 100BD612 _ 66: 85. C0
mov edx, dword ptr [esp+20H] ; 100BD615 _ 8B. 54 24, 20
mov si, word ptr [edx] ; 100BD619 _ 66: 8B. 32
lea edi, [ebx+esi] ; 100BD61C _ 8D. 3C 33
jl ?_25171 ; 100BD61F _ 7C, 50
movsx ebp, ax ; 100BD621 _ 0F BF. E8
mov eax, dword ptr [esp+14H] ; 100BD624 _ 8B. 44 24, 14
cmp dword ptr [eax+8H], ebp ; 100BD628 _ 39. 68, 08
jle ?_25171 ; 100BD62B _ 7E, 44
test di, di ; 100BD62D _ 66: 85. FF
jl ?_25171 ; 100BD630 _ 7C, 3F
movsx ebp, bx ; 100BD632 _ 0F BF. EB
cmp ebp, dword ptr [eax+4H] ; 100BD635 _ 3B. 68, 04
jge ?_25171 ; 100BD638 _ 7D, 37
test bx, bx ; 100BD63A _ 66: 85. DB
jge ?_25169 ; 100BD63D _ 7D, 0B
mov si, di ; 100BD63F _ 66: 8B. F7
mov word ptr [edx], di ; 100BD642 _ 66: 89. 3A
; Note: Length-changing prefix causes delay on Intel processors
mov word ptr [ecx], 0 ; 100BD645 _ 66: C7. 01, 0000
?_25169:movsx ecx, di ; 100BD64A _ 0F BF. CF
mov eax, dword ptr [eax+4H] ; 100BD64D _ 8B. 40, 04
cmp ecx, eax ; 100BD650 _ 3B. C8
jle ?_25170 ; 100BD652 _ 7E, 09
sub si, di ; 100BD654 _ 66: 2B. F7
add si, ax ; 100BD657 _ 66: 03. F0
mov word ptr [edx], si ; 100BD65A _ 66: 89. 32
?_25170:test si, si ; 100BD65D _ 66: 85. F6
mov eax, 0 ; 100BD660 _ B8, 00000000
jl ?_25172 ; 100BD665 _ 7C, 0C
pop ebp ; 100BD667 _ 5D
mov eax, 1 ; 100BD668 _ B8, 00000001
pop edi ; 100BD66D _ 5F
pop esi ; 100BD66E _ 5E
pop ebx ; 100BD66F _ 5B
ret ; 100BD670 _ C3
?_25171:xor eax, eax ; 100BD671 _ 33. C0
?_25172:pop ebp ; 100BD673 _ 5D
pop edi ; 100BD674 _ 5F
pop esi ; 100BD675 _ 5E
pop ebx ; 100BD676 _ 5B
ret ; 100BD677 _ C3
; Filling space: 8H
; Filler type: INT 3 Debug breakpoint
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
FUN_100bd680 LABEL NEAR
lea eax, [esp+18H] ; 100BD680 _ 8D. 44 24, 18
push esi ; 100BD684 _ 56
lea ecx, [esp+14H] ; 100BD685 _ 8D. 4C 24, 14
push eax ; 100BD689 _ 50
lea edx, [esp+14H] ; 100BD68A _ 8D. 54 24, 14
push ecx ; 100BD68E _ 51
mov esi, dword ptr [esp+10H] ; 100BD68F _ 8B. 74 24, 10
push edx ; 100BD693 _ 52
push esi ; 100BD694 _ 56
call FUN_100bd600 ; 100BD695 _ E8, FFFFFF66
add esp, 16 ; 100BD69A _ 83. C4, 10
test eax, eax ; 100BD69D _ 85. C0
jz ?_25175 ; 100BD69F _ 74, 33
movsx eax, word ptr [esp+14H] ; 100BD6A1 _ 0F BF. 44 24, 14
mov ecx, dword ptr [esi+4H] ; 100BD6A6 _ 8B. 4E, 04
add ecx, 3 ; 100BD6A9 _ 83. C1, 03
and ecx, 0FFFFFFFCH ; 100BD6AC _ 83. E1, FC
movsx edx, word ptr [esp+10H] ; 100BD6AF _ 0F BF. 54 24, 10
imul ecx, eax ; 100BD6B4 _ 0F AF. C8
add ecx, edx ; 100BD6B7 _ 03. CA
mov eax, dword ptr [esp+0CH] ; 100BD6B9 _ 8B. 44 24, 0C
add eax, ecx ; 100BD6BD _ 03. C1
dec word ptr [esp+1CH] ; 100BD6BF _ 66: FF. 4C 24, 1C
js ?_25175 ; 100BD6C4 _ 78, 0E
mov cl, byte ptr [esp+18H] ; 100BD6C6 _ 8A. 4C 24, 18
?_25174:mov byte ptr [eax], cl ; 100BD6CA _ 88. 08
inc eax ; 100BD6CC _ 40
dec word ptr [esp+1CH] ; 100BD6CD _ 66: FF. 4C 24, 1C
jns ?_25174 ; 100BD6D2 _ 79, F6
?_25175:pop esi ; 100BD6D4 _ 5E
ret ; 100BD6D5 _ C3
; Filling space: 0AH
; Filler type: INT 3 Debug breakpoint
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
db 0CCH, 0CCH
FUN_100bd6e0 LABEL NEAR
lea eax, [esp+18H] ; 100BD6E0 _ 8D. 44 24, 18
push ebx ; 100BD6E4 _ 53
lea ecx, [esp+14H] ; 100BD6E5 _ 8D. 4C 24, 14
push esi ; 100BD6E9 _ 56
lea edx, [esp+14H] ; 100BD6EA _ 8D. 54 24, 14
push eax ; 100BD6EE _ 50
mov esi, dword ptr [esp+10H] ; 100BD6EF _ 8B. 74 24, 10
push ecx ; 100BD6F3 _ 51
shl word ptr [esp+28H], 1 ; 100BD6F4 _ 66: C1. 64 24, 28, 01
push edx ; 100BD6FA _ 52
push esi ; 100BD6FB _ 56
call FUN_100bd600 ; 100BD6FC _ E8, FFFFFEFF
add esp, 16 ; 100BD701 _ 83. C4, 10
test eax, eax ; 100BD704 _ 85. C0
jz ?_25179 ; 100BD706 _ 74, 52
mov dx, word ptr [esp+20H] ; 100BD708 _ 66: 8B. 54 24, 20
mov ecx, dword ptr [esi+4H] ; 100BD70D _ 8B. 4E, 04
and dx, 01H ; 100BD710 _ 66: 83. E2, 01
add ecx, 3 ; 100BD714 _ 83. C1, 03
movsx eax, word ptr [esp+18H] ; 100BD717 _ 0F BF. 44 24, 18
movsx ebx, word ptr [esp+14H] ; 100BD71C _ 0F BF. 5C 24, 14
and ecx, 0FFFFFFFCH ; 100BD721 _ 83. E1, FC
sar word ptr [esp+20H], 1 ; 100BD724 _ 66: C1. 7C 24, 20, 01
imul ecx, eax ; 100BD72A _ 0F AF. C8
add ecx, ebx ; 100BD72D _ 03. CB
mov eax, dword ptr [esp+10H] ; 100BD72F _ 8B. 44 24, 10
add eax, ecx ; 100BD733 _ 03. C1
mov bl, byte ptr [esp+1CH] ; 100BD735 _ 8A. 5C 24, 1C
dec word ptr [esp+20H] ; 100BD739 _ 66: FF. 4C 24, 20
js ?_25178 ; 100BD73E _ 78, 13
?_25177:mov cx, word ptr [esp+1CH] ; 100BD740 _ 66: 8B. 4C 24, 1C
add eax, 2 ; 100BD745 _ 83. C0, 02
mov word ptr [eax-2H], cx ; 100BD748 _ 66: 89. 48, FE
dec word ptr [esp+20H] ; 100BD74C _ 66: FF. 4C 24, 20
jns ?_25177 ; 100BD751 _ 79, ED
?_25178:test dx, dx ; 100BD753 _ 66: 85. D2
jz ?_25179 ; 100BD756 _ 74, 02
mov byte ptr [eax], bl ; 100BD758 _ 88. 18
?_25179:pop esi ; 100BD75A _ 5E
pop ebx ; 100BD75B _ 5B
ret ; 100BD75C _ C3
; Filling space: 3H
; Filler type: INT 3 Debug breakpoint
db 0CCH, 0CCH, 0CCH
FUN_100bd760 LABEL NEAR
mov eax, dword ptr [esp+18H] ; 100BD760 _ 8B. 44 24, 18
sub esp, 4 ; 100BD764 _ 83. EC, 04
; Note: Length-changing prefix causes delay on Intel processors
mov word ptr [esp+2H], 0 ; 100BD767 _ 66: C7. 44 24, 02, 0000
mov ecx, dword ptr [esp+14H] ; 100BD76E _ 8B. 4C 24, 14
push ebx ; 100BD772 _ 53
push esi ; 100BD773 _ 56
mov byte ptr [eax], 0 ; 100BD774 _ C6. 00, 00
cmp word ptr [ecx+6H], 0 ; 100BD777 _ 66: 83. 79, 06, 00
push edi ; 100BD77C _ 57
push ebp ; 100BD77D _ 55
jle ?_25191 ; 100BD77E _ 0F 8E, 000000C1
mov esi, dword ptr [esp+18H] ; 100BD784 _ 8B. 74 24, 18
mov edi, dword ptr [esp+1CH] ; 100BD788 _ 8B. 7C 24, 1C
mov ebx, dword ptr [esp+20H] ; 100BD78C _ 8B. 5C 24, 20
mov ebp, dword ptr [esp+28H] ; 100BD790 _ 8B. 6C 24, 28
?_25181:mov ecx, ebp ; 100BD794 _ 8B. CD
xor edx, edx ; 100BD796 _ 33. D2
mov dx, word ptr [ecx+4H] ; 100BD798 _ 66: 8B. 51, 04
add ebp, dword ptr [ebp] ; 100BD79C _ 03. 6D, 00
sub edx, 4 ; 100BD79F _ 83. EA, 04
cmp edx, 12 ; 100BD7A2 _ 83. FA, 0C
ja ?_25190 ; 100BD7A5 _ 0F 87, 00000082
xor eax, eax ; 100BD7AB _ 33. C0
mov al, byte ptr [?_25193+edx] ; 100BD7AD _ 8A. 82, 100BD870(d)
jmp dword ptr [?_25192+eax*4] ; 100BD7B3 _ FF. 24 85, 100BD850(d)
?_25182 LABEL NEAR
add ecx, 6 ; 100BD7BA _ 83. C1, 06
push ecx ; 100BD7BD _ 51
push esi ; 100BD7BE _ 56
call FUN_100bd880 ; 100BD7BF _ E8, 000000BC
mov eax, dword ptr [esp+34H] ; 100BD7C4 _ 8B. 44 24, 34
add esp, 8 ; 100BD7C8 _ 83. C4, 08
mov byte ptr [eax], 1 ; 100BD7CB _ C6. 00, 01
jmp ?_25190 ; 100BD7CE _ EB, 5D
?_25183 LABEL NEAR
push ebx ; 100BD7D0 _ 53
add ecx, 6 ; 100BD7D1 _ 83. C1, 06
push ecx ; 100BD7D4 _ 51
push edi ; 100BD7D5 _ 57
push esi ; 100BD7D6 _ 56
call FUN_100bdac0 ; 100BD7D7 _ E8, 000002E4
jmp ?_25189 ; 100BD7DC _ EB, 4C
?_25184 LABEL NEAR
add ecx, 6 ; 100BD7DE _ 83. C1, 06
push ecx ; 100BD7E1 _ 51
push esi ; 100BD7E2 _ 56
call FUN_100bd940 ; 100BD7E3 _ E8, 00000158
mov eax, dword ptr [esp+34H] ; 100BD7E8 _ 8B. 44 24, 34
add esp, 8 ; 100BD7EC _ 83. C4, 08
mov byte ptr [eax], 1 ; 100BD7EF _ C6. 00, 01
jmp ?_25190 ; 100BD7F2 _ EB, 39
?_25185 LABEL NEAR
push ebx ; 100BD7F4 _ 53
add ecx, 6 ; 100BD7F5 _ 83. C1, 06
push ecx ; 100BD7F8 _ 51
push edi ; 100BD7F9 _ 57
push esi ; 100BD7FA _ 56
call FUN_100bda10 ; 100BD7FB _ E8, 00000210
jmp ?_25189 ; 100BD800 _ EB, 28
?_25186 LABEL NEAR
push ebx ; 100BD802 _ 53
add ecx, 6 ; 100BD803 _ 83. C1, 06
push ecx ; 100BD806 _ 51
push edi ; 100BD807 _ 57
push esi ; 100BD808 _ 56
call FUN_100bdc00 ; 100BD809 _ E8, 000003F2
jmp ?_25189 ; 100BD80E _ EB, 1A
?_25187 LABEL NEAR
push ebx ; 100BD810 _ 53
add ecx, 6 ; 100BD811 _ 83. C1, 06
push ecx ; 100BD814 _ 51
push edi ; 100BD815 _ 57
push esi ; 100BD816 _ 56
call FUN_100bd960 ; 100BD817 _ E8, 00000144
jmp ?_25189 ; 100BD81C _ EB, 0C
?_25188 LABEL NEAR
push ebx ; 100BD81E _ 53
add ecx, 6 ; 100BD81F _ 83. C1, 06
push ecx ; 100BD822 _ 51
push edi ; 100BD823 _ 57
push esi ; 100BD824 _ 56
call FUN_100bdc90 ; 100BD825 _ E8, 00000466
?_25189:add esp, 16 ; 100BD82A _ 83. C4, 10
?_25190 LABEL NEAR
inc word ptr [esp+12H] ; 100BD82D _ 66: FF. 44 24, 12
mov eax, dword ptr [esp+24H] ; 100BD832 _ 8B. 44 24, 24
mov cx, word ptr [esp+12H] ; 100BD836 _ 66: 8B. 4C 24, 12
cmp word ptr [eax+6H], cx ; 100BD83B _ 66: 39. 48, 06
jg ?_25181 ; 100BD83F _ 0F 8F, FFFFFF4F
?_25191:xor ax, ax ; 100BD845 _ 66: 33. C0
pop ebp ; 100BD848 _ 5D
pop edi ; 100BD849 _ 5F
pop esi ; 100BD84A _ 5E
pop ebx ; 100BD84B _ 5B
add esp, 4 ; 100BD84C _ 83. C4, 04
ret ; 100BD84F _ C3
?_25192 label dword ; switch/case jump table
dd ?_25182 ; 100BD850 _ 100BD7BA (d)
dd ?_25183 ; 100BD854 _ 100BD7D0 (d)
dd ?_25184 ; 100BD858 _ 100BD7DE (d)
dd ?_25185 ; 100BD85C _ 100BD7F4 (d)
dd ?_25186 ; 100BD860 _ 100BD802 (d)
dd ?_25187 ; 100BD864 _ 100BD810 (d)
dd ?_25188 ; 100BD868 _ 100BD81E (d)
dd ?_25190 ; 100BD86C _ 100BD82D (d)
?_25193 db 00H, 07H, 07H, 01H, 07H, 07H, 07H, 02H ; 100BD870 _ ........
db 03H, 04H, 07H, 05H, 06H, 0CCH, 0CCH, 0CCH ; 100BD878 _ ........
FUN_100bd880 LABEL NEAR
mov eax, dword ptr [esp+8H] ; 100BD880 _ 8B. 44 24, 08
mov ecx, dword ptr [esp+4H] ; 100BD884 _ 8B. 4C 24, 04
push eax ; 100BD888 _ 50
push ecx ; 100BD889 _ 51
call FUN_100bd8a0 ; 100BD88A _ E8, 00000011
add esp, 8 ; 100BD88F _ 83. C4, 08
ret ; 100BD892 _ C3
; Filling space: 0DH
; Filler type: INT 3 Debug breakpoint
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
FUN_100bd8a0 LABEL NEAR
mov eax, dword ptr [esp+8H] ; 100BD8A0 _ 8B. 44 24, 08
push ebx ; 100BD8A4 _ 53
mov bx, word ptr [eax] ; 100BD8A5 _ 66: 8B. 18
push esi ; 100BD8A8 _ 56
xor si, si ; 100BD8A9 _ 66: 33. F6
push edi ; 100BD8AC _ 57
dec bx ; 100BD8AD _ 66: 4B
push ebp ; 100BD8AF _ 55
lea edi, [eax+2H] ; 100BD8B0 _ 8D. 78, 02
js ?_25198 ; 100BD8B3 _ 78, 36
?_25196:movzx ax, byte ptr [edi] ; 100BD8B5 _ 66: 0F B6. 07
movzx bp, byte ptr [edi+1H] ; 100BD8B9 _ 66: 0F B6. 6F, 01
add si, ax ; 100BD8BE _ 66: 03. F0
inc edi ; 100BD8C1 _ 47
inc edi ; 100BD8C2 _ 47
test bp, bp ; 100BD8C3 _ 66: 85. ED
jnz ?_25197 ; 100BD8C6 _ 75, 04
; Note: Length-changing prefix causes delay on Intel processors
mov bp, 256 ; 100BD8C8 _ 66: BD, 0100
?_25197:mov eax, dword ptr [esp+14H] ; 100BD8CC _ 8B. 44 24, 14
push ebp ; 100BD8D0 _ 55
push esi ; 100BD8D1 _ 56
push edi ; 100BD8D2 _ 57
add si, bp ; 100BD8D3 _ 66: 03. F5
push eax ; 100BD8D6 _ 50
call FUN_100bd8f0 ; 100BD8D7 _ E8, 00000014
movsx eax, bp ; 100BD8DC _ 0F BF. C5
add esp, 16 ; 100BD8DF _ 83. C4, 10
lea ecx, [eax+eax*2] ; 100BD8E2 _ 8D. 0C 40
add edi, ecx ; 100BD8E5 _ 03. F9
dec bx ; 100BD8E7 _ 66: 4B
jns ?_25196 ; 100BD8E9 _ 79, CA
?_25198:pop ebp ; 100BD8EB _ 5D
pop edi ; 100BD8EC _ 5F
pop esi ; 100BD8ED _ 5E
pop ebx ; 100BD8EE _ 5B
ret ; 100BD8EF _ C3
FUN_100bd8f0 LABEL NEAR
mov dx, word ptr [esp+10H] ; 100BD8F0 _ 66: 8B. 54 24, 10
push esi ; 100BD8F5 _ 56
movsx ecx, word ptr [esp+10H] ; 100BD8F6 _ 0F BF. 4C 24, 10
shl ecx, 2 ; 100BD8FB _ C1. E1, 02
mov eax, dword ptr [esp+8H] ; 100BD8FE _ 8B. 44 24, 08
add ecx, dword ptr [eax] ; 100BD902 _ 03. 08
lea esi, [ecx+eax] ; 100BD904 _ 8D. 34 01
mov ax, dx ; 100BD907 _ 66: 8B. C2
dec dx ; 100BD90A _ 66: 4A
test ax, ax ; 100BD90C _ 66: 85. C0
jz ?_25201 ; 100BD90F _ 74, 25
mov eax, dword ptr [esp+0CH] ; 100BD911 _ 8B. 44 24, 0C
?_25200:mov cl, byte ptr [eax] ; 100BD915 _ 8A. 08
add esi, 4 ; 100BD917 _ 83. C6, 04
add eax, 3 ; 100BD91A _ 83. C0, 03
mov byte ptr [esi-2H], cl ; 100BD91D _ 88. 4E, FE
mov cl, byte ptr [eax-2H] ; 100BD920 _ 8A. 48, FE
mov byte ptr [esi-3H], cl ; 100BD923 _ 88. 4E, FD
mov cl, byte ptr [eax-1H] ; 100BD926 _ 8A. 48, FF
mov byte ptr [esi-4H], cl ; 100BD929 _ 88. 4E, FC
mov cx, dx ; 100BD92C _ 66: 8B. CA
dec dx ; 100BD92F _ 66: 4A
test cx, cx ; 100BD931 _ 66: 85. C9
jnz ?_25200 ; 100BD934 _ 75, DF
?_25201:pop esi ; 100BD936 _ 5E
ret ; 100BD937 _ C3
; Filling space: 8H
; Filler type: INT 3 Debug breakpoint
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
FUN_100bd940 LABEL NEAR
mov eax, dword ptr [esp+8H] ; 100BD940 _ 8B. 44 24, 08
mov ecx, dword ptr [esp+4H] ; 100BD944 _ 8B. 4C 24, 04
push eax ; 100BD948 _ 50
push ecx ; 100BD949 _ 51
call FUN_100bd8a0 ; 100BD94A _ E8, FFFFFF51
add esp, 8 ; 100BD94F _ 83. C4, 08
ret ; 100BD952 _ C3
; Filling space: 0DH
; Filler type: INT 3 Debug breakpoint
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
FUN_100bd960 LABEL NEAR
mov eax, dword ptr [esp+10H] ; 100BD960 _ 8B. 44 24, 10
sub esp, 8 ; 100BD964 _ 83. EC, 08
mov dx, word ptr [eax+8H] ; 100BD967 _ 66: 8B. 50, 08
push ebx ; 100BD96B _ 53
mov ecx, dword ptr [esp+18H] ; 100BD96C _ 8B. 4C 24, 18
push esi ; 100BD970 _ 56
push edi ; 100BD971 _ 57
push ebp ; 100BD972 _ 55
mov di, word ptr [eax+0AH] ; 100BD973 _ 66: 8B. 78, 0A
mov eax, dword ptr [esp+1CH] ; 100BD977 _ 8B. 44 24, 1C
mov esi, dword ptr [eax+4H] ; 100BD97B _ 8B. 70, 04
movsx eax, di ; 100BD97E _ 0F BF. C7
add esi, 3 ; 100BD981 _ 83. C6, 03
dec eax ; 100BD984 _ 48
and esi, 0FFFFFFFCH ; 100BD985 _ 83. E6, FC
imul esi, eax ; 100BD988 _ 0F AF. F0
add esi, dword ptr [esp+20H] ; 100BD98B _ 03. 74 24, 20
dec di ; 100BD98F _ 66: 4F
mov word ptr [esp+12H], di ; 100BD991 _ 66: 89. 7C 24, 12
js ?_25212 ; 100BD996 _ 78, 64
movsx eax, dx ; 100BD998 _ 0F BF. C2
mov dword ptr [esp+14H], eax ; 100BD99B _ 89. 44 24, 14
?_25204:xor di, di ; 100BD99F _ 66: 33. FF
inc ecx ; 100BD9A2 _ 41
test dx, dx ; 100BD9A3 _ 66: 85. D2
jle ?_25211 ; 100BD9A6 _ 7E, 3A
?_25205:mov al, byte ptr [ecx] ; 100BD9A8 _ 8A. 01
inc ecx ; 100BD9AA _ 41
test al, al ; 100BD9AB _ 84. C0
jl ?_25208 ; 100BD9AD _ 7C, 13
jle ?_25207 ; 100BD9AF _ 7E, 0E
movsx bp, al ; 100BD9B1 _ 66: 0F BE. E8
?_25206:mov bl, byte ptr [ecx] ; 100BD9B5 _ 8A. 19
inc esi ; 100BD9B7 _ 46
dec bp ; 100BD9B8 _ 66: 4D
mov byte ptr [esi-1H], bl ; 100BD9BA _ 88. 5E, FF
jnz ?_25206 ; 100BD9BD _ 75, F6
?_25207:inc ecx ; 100BD9BF _ 41
jmp ?_25210 ; 100BD9C0 _ EB, 14
?_25208:neg al ; 100BD9C2 _ F6. D8
test al, al ; 100BD9C4 _ 84. C0
jle ?_25210 ; 100BD9C6 _ 7E, 0E
movsx bp, al ; 100BD9C8 _ 66: 0F BE. E8
?_25209:mov bl, byte ptr [ecx] ; 100BD9CC _ 8A. 19
inc ecx ; 100BD9CE _ 41
mov byte ptr [esi], bl ; 100BD9CF _ 88. 1E
inc esi ; 100BD9D1 _ 46
dec bp ; 100BD9D2 _ 66: 4D
jnz ?_25209 ; 100BD9D4 _ 75, F6
?_25210:movsx ax, al ; 100BD9D6 _ 66: 0F BE. C0
add di, ax ; 100BD9DA _ 66: 03. F8
cmp dx, di ; 100BD9DD _ 66: 3B. D7
jg ?_25205 ; 100BD9E0 _ 7F, C6
?_25211:mov eax, dword ptr [esp+1CH] ; 100BD9E2 _ 8B. 44 24, 1C
mov eax, dword ptr [eax+4H] ; 100BD9E6 _ 8B. 40, 04
add eax, 3 ; 100BD9E9 _ 83. C0, 03
and eax, 0FFFFFFFCH ; 100BD9EC _ 83. E0, FC
add eax, dword ptr [esp+14H] ; 100BD9EF _ 03. 44 24, 14
sub esi, eax ; 100BD9F3 _ 2B. F0
dec word ptr [esp+12H] ; 100BD9F5 _ 66: FF. 4C 24, 12
jns ?_25204 ; 100BD9FA _ 79, A3
?_25212:pop ebp ; 100BD9FC _ 5D
pop edi ; 100BD9FD _ 5F
pop esi ; 100BD9FE _ 5E
pop ebx ; 100BD9FF _ 5B
add esp, 8 ; 100BDA00 _ 83. C4, 08
ret ; 100BDA03 _ C3
; Filling space: 0CH
; Filler type: INT 3 Debug breakpoint
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
db 0CCH, 0CCH, 0CCH, 0CCH
FUN_100bda10 LABEL NEAR
mov ecx, dword ptr [esp+0CH] ; 100BDA10 _ 8B. 4C 24, 0C
sub esp, 4 ; 100BDA14 _ 83. EC, 04
mov eax, dword ptr [esp+14H] ; 100BDA17 _ 8B. 44 24, 14
push ebx ; 100BDA1B _ 53
mov ax, word ptr [eax+0AH] ; 100BDA1C _ 66: 8B. 40, 0A
push esi ; 100BDA20 _ 56
sub ax, word ptr [ecx] ; 100BDA21 _ 66: 2B. 01
push edi ; 100BDA24 _ 57
dec ax ; 100BDA25 _ 66: 48
push ebp ; 100BDA27 _ 55
mov word ptr [esp+12H], ax ; 100BDA28 _ 66: 89. 44 24, 12
lea esi, [ecx+4H] ; 100BDA2D _ 8D. 71, 04
mov ax, word ptr [ecx+2H] ; 100BDA30 _ 66: 8B. 41, 02
dec ax ; 100BDA34 _ 66: 48
mov word ptr [esp+10H], ax ; 100BDA36 _ 66: 89. 44 24, 10
js ?_25219 ; 100BDA3B _ 78, 78
?_25214:xor di, di ; 100BDA3D _ 66: 33. FF
mov bl, byte ptr [esi] ; 100BDA40 _ 8A. 1E
inc esi ; 100BDA42 _ 46
test bl, bl ; 100BDA43 _ 84. DB
jz ?_25218 ; 100BDA45 _ 74, 62
?_25215:movzx ax, byte ptr [esi] ; 100BDA47 _ 66: 0F B6. 06
add di, ax ; 100BDA4B _ 66: 03. F8
inc esi ; 100BDA4E _ 46
mov al, byte ptr [esi] ; 100BDA4F _ 8A. 06
inc esi ; 100BDA51 _ 46
test al, al ; 100BDA52 _ 84. C0
jge ?_25216 ; 100BDA54 _ 7D, 27
mov ecx, esi ; 100BDA56 _ 8B. CE
mov edx, dword ptr [esp+1CH] ; 100BDA58 _ 8B. 54 24, 1C
neg al ; 100BDA5C _ F6. D8
movsx bp, al ; 100BDA5E _ 66: 0F BE. E8
inc esi ; 100BDA62 _ 46
push ebp ; 100BDA63 _ 55
mov al, byte ptr [ecx] ; 100BDA64 _ 8A. 01
mov ecx, dword ptr [esp+16H] ; 100BDA66 _ 8B. 4C 24, 16
push eax ; 100BDA6A _ 50
push ecx ; 100BDA6B _ 51
mov eax, dword ptr [esp+24H] ; 100BDA6C _ 8B. 44 24, 24
push edi ; 100BDA70 _ 57
push edx ; 100BDA71 _ 52
push eax ; 100BDA72 _ 50
call FUN_100bd680 ; 100BDA73 _ E8, FFFFFC08
add esp, 24 ; 100BDA78 _ 83. C4, 18
jmp ?_25217 ; 100BDA7B _ EB, 23
?_25216:mov ecx, dword ptr [esp+1CH] ; 100BDA7D _ 8B. 4C 24, 1C
mov edx, dword ptr [esp+18H] ; 100BDA81 _ 8B. 54 24, 18
movsx bp, al ; 100BDA85 _ 66: 0F BE. E8
mov eax, dword ptr [esp+12H] ; 100BDA89 _ 8B. 44 24, 12
push ebp ; 100BDA8D _ 55
push esi ; 100BDA8E _ 56
push eax ; 100BDA8F _ 50
push edi ; 100BDA90 _ 57
push ecx ; 100BDA91 _ 51
push edx ; 100BDA92 _ 52
call FUN_100bd580 ; 100BDA93 _ E8, FFFFFAE8
movsx ecx, bp ; 100BDA98 _ 0F BF. CD
add esp, 24 ; 100BDA9B _ 83. C4, 18
add esi, ecx ; 100BDA9E _ 03. F1
?_25217:add di, bp ; 100BDAA0 _ 66: 03. FD
dec bl ; 100BDAA3 _ FE. CB
test bl, bl ; 100BDAA5 _ 84. DB
jnz ?_25215 ; 100BDAA7 _ 75, 9E
?_25218:dec word ptr [esp+12H] ; 100BDAA9 _ 66: FF. 4C 24, 12
dec word ptr [esp+10H] ; 100BDAAE _ 66: FF. 4C 24, 10
jns ?_25214 ; 100BDAB3 _ 79, 88
?_25219:pop ebp ; 100BDAB5 _ 5D
pop edi ; 100BDAB6 _ 5F
pop esi ; 100BDAB7 _ 5E
pop ebx ; 100BDAB8 _ 5B
add esp, 4 ; 100BDAB9 _ 83. C4, 04
ret ; 100BDABC _ C3
; Filling space: 3H
; Filler type: INT 3 Debug breakpoint
db 0CCH, 0CCH, 0CCH
FUN_100bdac0 LABEL NEAR
mov edx, dword ptr [esp+10H] ; 100BDAC0 _ 8B. 54 24, 10
sub esp, 8 ; 100BDAC4 _ 83. EC, 08
mov ax, word ptr [edx+8H] ; 100BDAC7 _ 66: 8B. 42, 08
push ebx ; 100BDACB _ 53
dec ax ; 100BDACC _ 66: 48
push esi ; 100BDACE _ 56
mov word ptr [esp+8H], ax ; 100BDACF _ 66: 89. 44 24, 08
push edi ; 100BDAD4 _ 57
mov si, word ptr [edx+0AH] ; 100BDAD5 _ 66: 8B. 72, 0A
push ebp ; 100BDAD9 _ 55
dec si ; 100BDADA _ 66: 4E
mov ecx, dword ptr [esp+24H] ; 100BDADC _ 8B. 4C 24, 24
mov bx, word ptr [ecx] ; 100BDAE0 _ 66: 8B. 19
add ecx, 2 ; 100BDAE3 _ 83. C1, 02
mov word ptr [esp+12H], bx ; 100BDAE6 _ 66: 89. 5C 24, 12
mov dword ptr [esp+14H], ecx ; 100BDAEB _ 89. 4C 24, 14
?_25221:mov eax, dword ptr [esp+14H] ; 100BDAEF _ 8B. 44 24, 14
mov bx, word ptr [eax] ; 100BDAF3 _ 66: 8B. 18
add dword ptr [esp+14H], 2 ; 100BDAF6 _ 83. 44 24, 14, 02
test bx, bx ; 100BDAFB _ 66: 85. DB
jge ?_25223 ; 100BDAFE _ 7D, 49
test bh, 40H ; 100BDB00 _ F6. C7, 40
jz ?_25222 ; 100BDB03 _ 74, 05
add si, bx ; 100BDB05 _ 66: 03. F3
jmp ?_25221 ; 100BDB08 _ EB, E5
?_25222:mov eax, dword ptr [esp+10H] ; 100BDB0A _ 8B. 44 24, 10
push ebx ; 100BDB0E _ 53
mov ecx, dword ptr [esp+24H] ; 100BDB0F _ 8B. 4C 24, 24
push esi ; 100BDB13 _ 56
mov edx, dword ptr [esp+24H] ; 100BDB14 _ 8B. 54 24, 24
push eax ; 100BDB18 _ 50
push ecx ; 100BDB19 _ 51
push edx ; 100BDB1A _ 52
call FUN_100bd530 ; 100BDB1B _ E8, FFFFFA10
mov ecx, dword ptr [esp+28H] ; 100BDB20 _ 8B. 4C 24, 28
add esp, 20 ; 100BDB24 _ 83. C4, 14
mov bx, word ptr [ecx] ; 100BDB27 _ 66: 8B. 19
add dword ptr [esp+14H], 2 ; 100BDB2A _ 83. 44 24, 14, 02
test bx, bx ; 100BDB2F _ 66: 85. DB
jnz ?_25223 ; 100BDB32 _ 75, 15
dec si ; 100BDB34 _ 66: 4E
dec word ptr [esp+12H] ; 100BDB36 _ 66: FF. 4C 24, 12
cmp word ptr [esp+12H], 0 ; 100BDB3B _ 66: 83. 7C 24, 12, 00
jle ?_25226 ; 100BDB41 _ 0F 8E, 000000AE
jmp ?_25221 ; 100BDB47 _ EB, A6
?_25223:xor di, di ; 100BDB49 _ 66: 33. FF
?_25224:mov ecx, dword ptr [esp+14H] ; 100BDB4C _ 8B. 4C 24, 14
movzx ax, byte ptr [ecx] ; 100BDB50 _ 66: 0F B6. 01
add di, ax ; 100BDB54 _ 66: 03. F8
inc dword ptr [esp+14H] ; 100BDB57 _ FF. 44 24, 14
mov ecx, dword ptr [esp+14H] ; 100BDB5B _ 8B. 4C 24, 14
movsx bp, byte ptr [ecx] ; 100BDB5F _ 66: 0F BE. 29
add bp, bp ; 100BDB63 _ 66: 03. ED
inc dword ptr [esp+14H] ; 100BDB66 _ FF. 44 24, 14
test bp, bp ; 100BDB6A _ 66: 85. ED
jl ?_25225 ; 100BDB6D _ 7C, 3C
mov eax, dword ptr [esp+14H] ; 100BDB6F _ 8B. 44 24, 14
push ebp ; 100BDB73 _ 55
mov ecx, dword ptr [esp+24H] ; 100BDB74 _ 8B. 4C 24, 24
push eax ; 100BDB78 _ 50
mov edx, dword ptr [esp+24H] ; 100BDB79 _ 8B. 54 24, 24
push esi ; 100BDB7D _ 56
push edi ; 100BDB7E _ 57
push ecx ; 100BDB7F _ 51
add di, bp ; 100BDB80 _ 66: 03. FD
push edx ; 100BDB83 _ 52
call FUN_100bd580 ; 100BDB84 _ E8, FFFFF9F7
movsx ecx, bp ; 100BDB89 _ 0F BF. CD
add dword ptr [esp+2CH], ecx ; 100BDB8C _ 01. 4C 24, 2C
add esp, 24 ; 100BDB90 _ 83. C4, 18
dec bx ; 100BDB93 _ 66: 4B
jnz ?_25224 ; 100BDB95 _ 75, B5
dec si ; 100BDB97 _ 66: 4E
dec word ptr [esp+12H] ; 100BDB99 _ 66: FF. 4C 24, 12
cmp word ptr [esp+12H], 0 ; 100BDB9E _ 66: 83. 7C 24, 12, 00
jle ?_25226 ; 100BDBA4 _ 7E, 4F
jmp ?_25221 ; 100BDBA6 _ E9, FFFFFF44
?_25225:mov eax, dword ptr [esp+14H] ; 100BDBAB _ 8B. 44 24, 14
mov edx, dword ptr [esp+20H] ; 100BDBAF _ 8B. 54 24, 20
neg bp ; 100BDBB3 _ 66: F7. DD
add dword ptr [esp+14H], 2 ; 100BDBB6 _ 83. 44 24, 14, 02
mov cx, bp ; 100BDBBB _ 66: 8B. CD
sar cx, 1 ; 100BDBBE _ 66: C1. F9, 01
mov ax, word ptr [eax] ; 100BDBC2 _ 66: 8B. 00
push ecx ; 100BDBC5 _ 51
mov ecx, dword ptr [esp+20H] ; 100BDBC6 _ 8B. 4C 24, 20
push eax ; 100BDBCA _ 50
push esi ; 100BDBCB _ 56
push edi ; 100BDBCC _ 57
add di, bp ; 100BDBCD _ 66: 03. FD
push edx ; 100BDBD0 _ 52
push ecx ; 100BDBD1 _ 51
call FUN_100bd6e0 ; 100BDBD2 _ E8, FFFFFB09
add esp, 24 ; 100BDBD7 _ 83. C4, 18
dec bx ; 100BDBDA _ 66: 4B
jne ?_25224 ; 100BDBDC _ 0F 85, FFFFFF6A
dec si ; 100BDBE2 _ 66: 4E
dec word ptr [esp+12H] ; 100BDBE4 _ 66: FF. 4C 24, 12
cmp word ptr [esp+12H], 0 ; 100BDBE9 _ 66: 83. 7C 24, 12, 00
jg ?_25221 ; 100BDBEF _ 0F 8F, FFFFFEFA
?_25226:pop ebp ; 100BDBF5 _ 5D
pop edi ; 100BDBF6 _ 5F
pop esi ; 100BDBF7 _ 5E
pop ebx ; 100BDBF8 _ 5B
add esp, 8 ; 100BDBF9 _ 83. C4, 08
ret ; 100BDBFC _ C3
; Filling space: 3H
; Filler type: INT 3 Debug breakpoint
db 0CCH, 0CCH, 0CCH
FUN_100bdc00 LABEL NEAR
mov eax, dword ptr [esp+10H] ; 100BDC00 _ 8B. 44 24, 10
sub esp, 8 ; 100BDC04 _ 83. EC, 08
mov cx, word ptr [eax+8H] ; 100BDC07 _ 66: 8B. 48, 08
push ebx ; 100BDC0B _ 53
mov word ptr [esp+6H], cx ; 100BDC0C _ 66: 89. 4C 24, 06
push esi ; 100BDC11 _ 56
push edi ; 100BDC12 _ 57
xor ecx, ecx ; 100BDC13 _ 33. C9
mov byte ptr [esp+0DH], cl ; 100BDC15 _ 88. 4C 24, 0D
push ebp ; 100BDC19 _ 55
mov bp, word ptr [eax+0AH] ; 100BDC1A _ 66: 8B. 68, 0A
mov byte ptr [esp+10H], cl ; 100BDC1E _ 88. 4C 24, 10
dec bp ; 100BDC22 _ 66: 4D
js ?_25230 ; 100BDC24 _ 78, 56
movsx eax, word ptr [esp+12H] ; 100BDC26 _ 0F BF. 44 24, 12
mov si, word ptr [esp+12H] ; 100BDC2B _ 66: 8B. 74 24, 12
mov edi, dword ptr [esp+1CH] ; 100BDC30 _ 8B. 7C 24, 1C
cdq ; 100BDC34 _ 99
and si, 01H ; 100BDC35 _ 66: 83. E6, 01
sub eax, edx ; 100BDC39 _ 2B. C2
sar eax, 1 ; 100BDC3B _ C1. F8, 01
mov ebx, dword ptr [esp+20H] ; 100BDC3E _ 8B. 5C 24, 20
mov word ptr [esp+14H], ax ; 100BDC42 _ 66: 89. 44 24, 14
?_25228:mov eax, dword ptr [esp+14H] ; 100BDC47 _ 8B. 44 24, 14
mov ecx, dword ptr [esp+10H] ; 100BDC4B _ 8B. 4C 24, 10
push eax ; 100BDC4F _ 50
push ecx ; 100BDC50 _ 51
push ebp ; 100BDC51 _ 55
push 0 ; 100BDC52 _ 6A, 00
push ebx ; 100BDC54 _ 53
push edi ; 100BDC55 _ 57
call FUN_100bd6e0 ; 100BDC56 _ E8, FFFFFA85
add esp, 24 ; 100BDC5B _ 83. C4, 18
test si, si ; 100BDC5E _ 66: 85. F6
jz ?_25229 ; 100BDC61 _ 74, 15
mov ax, word ptr [esp+12H] ; 100BDC63 _ 66: 8B. 44 24, 12
push 0 ; 100BDC68 _ 6A, 00
dec ax ; 100BDC6A _ 66: 48
push ebp ; 100BDC6C _ 55
push eax ; 100BDC6D _ 50
push ebx ; 100BDC6E _ 53
push edi ; 100BDC6F _ 57
call FUN_100bd530 ; 100BDC70 _ E8, FFFFF8BB
add esp, 20 ; 100BDC75 _ 83. C4, 14
?_25229:dec bp ; 100BDC78 _ 66: 4D
jns ?_25228 ; 100BDC7A _ 79, CB
?_25230:pop ebp ; 100BDC7C _ 5D
pop edi ; 100BDC7D _ 5F
pop esi ; 100BDC7E _ 5E
pop ebx ; 100BDC7F _ 5B
add esp, 8 ; 100BDC80 _ 83. C4, 08
ret ; 100BDC83 _ C3
; Filling space: 0CH
; Filler type: INT 3 Debug breakpoint
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
db 0CCH, 0CCH, 0CCH, 0CCH
FUN_100bdc90 LABEL NEAR
mov eax, dword ptr [esp+10H] ; 100BDC90 _ 8B. 44 24, 10
sub esp, 4 ; 100BDC94 _ 83. EC, 04
push ebx ; 100BDC97 _ 53
push esi ; 100BDC98 _ 56
mov bx, word ptr [eax+0AH] ; 100BDC99 _ 66: 8B. 58, 0A
push edi ; 100BDC9D _ 57
mov di, word ptr [eax+8H] ; 100BDC9E _ 66: 8B. 78, 08
push ebp ; 100BDCA2 _ 55
dec bx ; 100BDCA3 _ 66: 4B
js ?_25233 ; 100BDCA5 _ 78, 2A
mov esi, dword ptr [esp+18H] ; 100BDCA7 _ 8B. 74 24, 18
mov ebp, dword ptr [esp+20H] ; 100BDCAB _ 8B. 6C 24, 20
movsx eax, di ; 100BDCAF _ 0F BF. C7
mov dword ptr [esp+10H], eax ; 100BDCB2 _ 89. 44 24, 10
?_25232:mov eax, dword ptr [esp+1CH] ; 100BDCB6 _ 8B. 44 24, 1C
push edi ; 100BDCBA _ 57
push ebp ; 100BDCBB _ 55
push ebx ; 100BDCBC _ 53
push 0 ; 100BDCBD _ 6A, 00
push eax ; 100BDCBF _ 50
push esi ; 100BDCC0 _ 56
call FUN_100bd580 ; 100BDCC1 _ E8, FFFFF8BA
add ebp, dword ptr [esp+28H] ; 100BDCC6 _ 03. 6C 24, 28
add esp, 24 ; 100BDCCA _ 83. C4, 18
dec bx ; 100BDCCD _ 66: 4B
jns ?_25232 ; 100BDCCF _ 79, E5
?_25233:pop ebp ; 100BDCD1 _ 5D
pop edi ; 100BDCD2 _ 5F
pop esi ; 100BDCD3 _ 5E
pop ebx ; 100BDCD4 _ 5B
add esp, 4 ; 100BDCD5 _ 83. C4, 04
ret ; 100BDCD8 _ C3
; Filling space: 7H
; Filler type: INT 3 Debug breakpoint
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
DecodeFLCFrame LABEL NEAR
mov ecx, dword ptr [esp+10H] ; 100BDCE0 _ 8B. 4C 24, 10
; Note: Length-changing prefix causes delay on Intel processors
cmp word ptr [ecx+4H], -3590 ; 100BDCE4 _ 66: 81. 79, 04, F1FA
jnz ?_25235 ; 100BDCEA _ 75, 21
mov eax, dword ptr [esp+14H] ; 100BDCEC _ 8B. 44 24, 14
lea edx, [ecx+10H] ; 100BDCF0 _ 8D. 51, 10
push eax ; 100BDCF3 _ 50
push edx ; 100BDCF4 _ 52
mov eax, dword ptr [esp+10H] ; 100BDCF5 _ 8B. 44 24, 10
push ecx ; 100BDCF9 _ 51
mov ecx, dword ptr [esp+18H] ; 100BDCFA _ 8B. 4C 24, 18
mov edx, dword ptr [esp+10H] ; 100BDCFE _ 8B. 54 24, 10
push ecx ; 100BDD02 _ 51
push eax ; 100BDD03 _ 50
push edx ; 100BDD04 _ 52
call FUN_100bd760 ; 100BDD05 _ E8, FFFFFA56
add esp, 24 ; 100BDD0A _ 83. C4, 18
?_25235:ret ; 100BDD0D _ C3
; Filling space: 2H
; Filler type: INT 3 Debug breakpoint
db 0CCH, 0CCH
EndOfSection LABEL NEAR
.text ENDS
END

63
3rdparty/flic/flic.h vendored
View File

@ -6,31 +6,42 @@
// A basic FLIC header structure from the "EGI" documentation. Source: https://www.compuphase.com/flic.htm#FLICHEADER
// This also goes over the FLIC structures: https://github.com/thinkbeforecoding/nomemalloc.handson/blob/master/flic.txt
typedef struct {
DWORD size; /* Size of FLIC including this header */
WORD type; /* File type 0xAF11, 0xAF12, 0xAF30, 0xAF44, ... */
WORD frames; /* Number of frames in first segment */
WORD width; /* FLIC width in pixels */
WORD height; /* FLIC height in pixels */
WORD depth; /* Bits per pixel (usually 8) */
WORD flags; /* Set to zero or to three */
DWORD speed; /* Delay between frames */
WORD reserved1; /* Set to zero */
DWORD created; /* Date of FLIC creation (FLC only) */
DWORD creator; /* Serial number or compiler id (FLC only) */
DWORD updated; /* Date of FLIC update (FLC only) */
DWORD updater; /* Serial number (FLC only), see creator */
WORD aspect_dx; /* Width of square rectangle (FLC only) */
WORD aspect_dy; /* Height of square rectangle (FLC only) */
WORD ext_flags; /* EGI: flags for specific EGI extensions */
WORD keyframes; /* EGI: key-image frequency */
WORD totalframes; /* EGI: total number of frames (segments) */
DWORD req_memory; /* EGI: maximum chunk size (uncompressed) */
WORD max_regions; /* EGI: max. number of regions in a CHK_REGION chunk */
WORD transp_num; /* EGI: number of transparent levels */
BYTE reserved2[24]; /* Set to zero */
DWORD oframe1; /* Offset to frame 1 (FLC only) */
DWORD oframe2; /* Offset to frame 2 (FLC only) */
BYTE reserved3[40]; /* Set to zero */
DWORD size; /* Size of FLIC including this header */
WORD type; /* File type 0xAF11, 0xAF12, 0xAF30, 0xAF44, ... */
WORD frames; /* Number of frames in first segment */
WORD width; /* FLIC width in pixels */
WORD height; /* FLIC height in pixels */
WORD depth; /* Bits per pixel (usually 8) */
WORD flags; /* Set to zero or to three */
DWORD speed; /* Delay between frames */
WORD reserved1; /* Set to zero */
DWORD created; /* Date of FLIC creation (FLC only) */
DWORD creator; /* Serial number or compiler id (FLC only) */
DWORD updated; /* Date of FLIC update (FLC only) */
DWORD updater; /* Serial number (FLC only), see creator */
WORD aspect_dx; /* Width of square rectangle (FLC only) */
WORD aspect_dy; /* Height of square rectangle (FLC only) */
WORD ext_flags; /* EGI: flags for specific EGI extensions */
WORD keyframes; /* EGI: key-image frequency */
WORD totalframes; /* EGI: total number of frames (segments) */
DWORD req_memory; /* EGI: maximum chunk size (uncompressed) */
WORD max_regions; /* EGI: max. number of regions in a CHK_REGION chunk */
WORD transp_num; /* EGI: number of transparent levels */
BYTE reserved2[24]; /* Set to zero */
DWORD oframe1; /* Offset to frame 1 (FLC only) */
DWORD oframe2; /* Offset to frame 2 (FLC only) */
BYTE reserved3[40]; /* Set to zero */
} FLIC_HEADER;
#endif FLIC_H // FLIC_H
extern "C"
{
void DecodeFLCFrame(
LPBITMAPINFOHEADER bitmapHeader,
void* pixelData,
FLIC_HEADER* flcHeader,
void* flcFrame,
unsigned char* decodedColorMap
);
}
#endif // FLIC_H

BIN
3rdparty/flic/flic.lib vendored Normal file

Binary file not shown.

View File

@ -82,7 +82,7 @@
#endif
#if !defined(__RADDOS__) && !defined(__RADWIN__) && !defined(__RADMAC__)
#error RAD.H didn'y detect your platform. Define __DOS__, __WINDOWS__, WIN32, macintosh, or powerc.
#error "RAD.H didn'y detect your platform. Define __DOS__, __WINDOWS__, WIN32, macintosh, or powerc."
#endif
#ifdef __RADMAC__

View File

@ -2,212 +2,93 @@ cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
project(isle CXX)
option(ISLE_BUILD_APP "Build ISLE.EXE application" ON)
option(ISLE_USE_SMARTHEAP "Build with SmartHeap" ${MSVC})
option(ISLE_USE_DX5 "Build with internal DirectX 5 SDK" ON)
include(CheckCXXSourceCompiles)
include(CMakeDependentOption)
include(CMakePushCheckState)
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/define.cpp
LEGO1/dllmain.cpp
LEGO1/dunebuggy.cpp
LEGO1/elevatorbottom.cpp
LEGO1/gasstation.cpp
LEGO1/gasstationentity.cpp
LEGO1/gasstationstate.cpp
LEGO1/gifmanager.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/lego3dview.cpp
LEGO1/legoact2state.cpp
LEGO1/legoactioncontrolpresenter.cpp
LEGO1/legoactor.cpp
LEGO1/legoactor.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/legoeventnotificationparam.cpp
LEGO1/legoflctexturepresenter.cpp
LEGO1/legofullscreenmovie.cpp
LEGO1/legogamestate.cpp
LEGO1/legohideanimpresenter.cpp
LEGO1/legoinputmanager.cpp
LEGO1/legojetski.cpp
LEGO1/legoloadcachesoundpresenter.cpp
LEGO1/legolocomotionanimpresenter.cpp
LEGO1/legometerpresenter.cpp
LEGO1/legomodelpresenter.cpp
LEGO1/legonavcontroller.cpp
LEGO1/legoobjectfactory.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/legostream.cpp
LEGO1/legotexturepresenter.cpp
LEGO1/legoutil.cpp
LEGO1/legounksavedatawriter.cpp
LEGO1/legovehiclebuildstate.cpp
LEGO1/legovideomanager.cpp
LEGO1/legoworld.cpp
LEGO1/legoworldpresenter.cpp
LEGO1/motorcycle.cpp
LEGO1/mxactionnotificationparam.cpp
LEGO1/mxatomid.cpp
LEGO1/mxatomidcounter.cpp
LEGO1/mxaudiomanager.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/mxdirect3d.cpp
LEGO1/mxdirectdraw.cpp
LEGO1/mxdiskstreamcontroller.cpp
LEGO1/mxdiskstreamprovider.cpp
LEGO1/mxdisplaysurface.cpp
LEGO1/mxdsaction.cpp
LEGO1/mxdsanim.cpp
LEGO1/mxdsbuffer.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/mxdsstreamingaction.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/mxmediamanager.cpp
LEGO1/mxmediapresenter.cpp
LEGO1/mxmidipresenter.cpp
LEGO1/mxmusicmanager.cpp
LEGO1/mxmusicpresenter.cpp
LEGO1/mxnotificationmanager.cpp
LEGO1/mxnotificationparam.cpp
LEGO1/mxobjectfactory.cpp
LEGO1/mxomni.cpp
LEGO1/mxomnicreateflags.cpp
LEGO1/mxomnicreateparam.cpp
LEGO1/mxpalette.cpp
LEGO1/mxparam.cpp
LEGO1/mxpresenter.cpp
LEGO1/mxramstreamcontroller.cpp
LEGO1/mxramstreamprovider.cpp
LEGO1/mxregion.cpp
LEGO1/mxscheduler.cpp
LEGO1/mxsemaphore.cpp
LEGO1/mxsmack.cpp
LEGO1/mxsmkpresenter.cpp
LEGO1/mxsoundmanager.cpp
LEGO1/mxsoundpresenter.cpp
LEGO1/mxstillpresenter.cpp
LEGO1/mxstreamchunk.cpp
LEGO1/mxstreamcontroller.cpp
LEGO1/mxstreamer.cpp
LEGO1/mxstreamlist.cpp
LEGO1/mxstreamprovider.cpp
LEGO1/mxstring.cpp
LEGO1/mxthread.cpp
LEGO1/mxticklemanager.cpp
LEGO1/mxtimer.cpp
LEGO1/mxtransitionmanager.cpp
LEGO1/mxtype17notificationparam.cpp
LEGO1/mxunknown100dbdbc.cpp
LEGO1/mxvariable.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/realtime/matrix.cpp
LEGO1/realtime/orientableroi.cpp
LEGO1/realtime/realtime.cpp
LEGO1/realtime/realtimeview.cpp
LEGO1/realtime/vector.cpp
LEGO1/registrationbook.cpp
LEGO1/score.cpp
LEGO1/scorestate.cpp
LEGO1/skateboard.cpp
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)
message(WARNING "Only 32-bit executables are supported")
endif()
set(MSVC_FOR_DECOMP FALSE)
if (MSVC)
# Visual C++ 4.2 -> cl version 10.2.0
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "11.0")
set(MSVC_FOR_DECOMP TRUE)
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)
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
@ -217,44 +98,317 @@ add_library(lego1 SHARED
LEGO1/tgl/d3drm/texture.cpp
LEGO1/tgl/d3drm/unk.cpp
LEGO1/tgl/d3drm/view.cpp
LEGO1/towtrack.cpp
LEGO1/towtrackmissionstate.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}/util")
target_link_libraries(roi PRIVATE)
add_library(misc STATIC
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}/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
LEGO1/lego/legoomni/src/act1/act1state.cpp
LEGO1/lego/legoomni/src/act2/act2brick.cpp
LEGO1/lego/legoomni/src/act2/act2policestation.cpp
LEGO1/lego/legoomni/src/act2/legoact2.cpp
LEGO1/lego/legoomni/src/act2/legoact2state.cpp
LEGO1/lego/legoomni/src/act3/act3.cpp
LEGO1/lego/legoomni/src/act3/act3shark.cpp
LEGO1/lego/legoomni/src/act3/act3state.cpp
LEGO1/lego/legoomni/src/audio/lego3dwavepresenter.cpp
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/legounknown100d6b4c.cpp
LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp
LEGO1/lego/legoomni/src/build/buildingentity.cpp
LEGO1/lego/legoomni/src/build/dunebuggy.cpp
LEGO1/lego/legoomni/src/build/helicopter.cpp
LEGO1/lego/legoomni/src/build/helicopterstate.cpp
LEGO1/lego/legoomni/src/build/jetski.cpp
LEGO1/lego/legoomni/src/build/legobuildingmanager.cpp
LEGO1/lego/legoomni/src/build/legocarbuild.cpp
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
LEGO1/lego/legoomni/src/common/legogamestate.cpp
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/legounksavedatawriter.cpp
LEGO1/lego/legoomni/src/common/legoutil.cpp
LEGO1/lego/legoomni/src/common/mxcompositemediapresenter.cpp
LEGO1/lego/legoomni/src/control/legocontrolmanager.cpp
LEGO1/lego/legoomni/src/control/mxcontrolpresenter.cpp
LEGO1/lego/legoomni/src/entity/legoactor.cpp
LEGO1/lego/legoomni/src/entity/legoactorpresenter.cpp
LEGO1/lego/legoomni/src/entity/legoanimactor.cpp
LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp
LEGO1/lego/legoomni/src/entity/legocarraceactor.cpp
LEGO1/lego/legoomni/src/entity/legoentity.cpp
LEGO1/lego/legoomni/src/entity/legoentitypresenter.cpp
LEGO1/lego/legoomni/src/entity/legojetski.cpp
LEGO1/lego/legoomni/src/entity/legojetskiraceactor.cpp
LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp
LEGO1/lego/legoomni/src/entity/legopathactor.cpp
LEGO1/lego/legoomni/src/entity/legopovcontroller.cpp
LEGO1/lego/legoomni/src/entity/legorace.cpp
LEGO1/lego/legoomni/src/entity/legoraceactor.cpp
LEGO1/lego/legoomni/src/entity/legoracecar.cpp
LEGO1/lego/legoomni/src/entity/legoworld.cpp
LEGO1/lego/legoomni/src/entity/legoworldpresenter.cpp
LEGO1/lego/legoomni/src/gasstation/gasstation.cpp
LEGO1/lego/legoomni/src/gasstation/gasstationentity.cpp
LEGO1/lego/legoomni/src/gasstation/gasstationstate.cpp
LEGO1/lego/legoomni/src/hospital/ambulance.cpp
LEGO1/lego/legoomni/src/hospital/ambulancemissionstate.cpp
LEGO1/lego/legoomni/src/hospital/hospital.cpp
LEGO1/lego/legoomni/src/hospital/hospitalentity.cpp
LEGO1/lego/legoomni/src/hospital/hospitalstate.cpp
LEGO1/lego/legoomni/src/infocenter/elevatorbottom.cpp
LEGO1/lego/legoomni/src/infocenter/infocenter.cpp
LEGO1/lego/legoomni/src/infocenter/infocenterdoor.cpp
LEGO1/lego/legoomni/src/infocenter/infocenterentity.cpp
LEGO1/lego/legoomni/src/infocenter/infocenterstate.cpp
LEGO1/lego/legoomni/src/infocenter/registrationbook.cpp
LEGO1/lego/legoomni/src/infocenter/score.cpp
LEGO1/lego/legoomni/src/infocenter/scorestate.cpp
LEGO1/lego/legoomni/src/input/legoinputmanager.cpp
LEGO1/lego/legoomni/src/isle/beachhouseentity.cpp
LEGO1/lego/legoomni/src/isle/bike.cpp
LEGO1/lego/legoomni/src/isle/bumpbouy.cpp
LEGO1/lego/legoomni/src/isle/doors.cpp
LEGO1/lego/legoomni/src/isle/historybook.cpp
LEGO1/lego/legoomni/src/isle/isleactor.cpp
LEGO1/lego/legoomni/src/isle/isle.cpp
LEGO1/lego/legoomni/src/isle/islepathactor.cpp
LEGO1/lego/legoomni/src/isle/jukebox.cpp
LEGO1/lego/legoomni/src/isle/jukeboxentity.cpp
LEGO1/lego/legoomni/src/isle/jukeboxstate.cpp
LEGO1/lego/legoomni/src/isle/motocycle.cpp
LEGO1/lego/legoomni/src/isle/radio.cpp
LEGO1/lego/legoomni/src/isle/radiostate.cpp
LEGO1/lego/legoomni/src/isle/skateboard.cpp
LEGO1/lego/legoomni/src/main/legoomni.cpp
LEGO1/lego/legoomni/src/notify/legoeventnotificationparam.cpp
LEGO1/lego/legoomni/src/paths/legopathcontroller.cpp
LEGO1/lego/legoomni/src/paths/legopathpresenter.cpp
LEGO1/lego/legoomni/src/pizzeria/pizza.cpp
LEGO1/lego/legoomni/src/pizzeria/pizzamissionstate.cpp
LEGO1/lego/legoomni/src/pizzeria/pizzeria.cpp
LEGO1/lego/legoomni/src/pizzeria/pizzeriastate.cpp
LEGO1/lego/legoomni/src/police/police.cpp
LEGO1/lego/legoomni/src/police/policeentity.cpp
LEGO1/lego/legoomni/src/police/policestate.cpp
LEGO1/lego/legoomni/src/race/carrace.cpp
LEGO1/lego/legoomni/src/race/jetskirace.cpp
LEGO1/lego/legoomni/src/race/racestandsentity.cpp
LEGO1/lego/legoomni/src/race/racestate.cpp
LEGO1/lego/legoomni/src/towtrack/towtrack.cpp
LEGO1/lego/legoomni/src/towtrack/towtrackmissionstate.cpp
LEGO1/lego/legoomni/src/unknown/legounknown100d7c88.cpp
LEGO1/lego/legoomni/src/video/legoanimationmanager.cpp
LEGO1/lego/legoomni/src/video/legoanimmmpresenter.cpp
LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp
LEGO1/lego/legoomni/src/video/legocarbuildanimpresenter.cpp
LEGO1/lego/legoomni/src/video/legoflctexturepresenter.cpp
LEGO1/lego/legoomni/src/video/legohideanimpresenter.cpp
LEGO1/lego/legoomni/src/video/legolocomotionanimpresenter.cpp
LEGO1/lego/legoomni/src/video/legoloopinganimpresenter.cpp
LEGO1/lego/legoomni/src/video/legometerpresenter.cpp
LEGO1/lego/legoomni/src/video/legomodelpresenter.cpp
LEGO1/lego/legoomni/src/video/legopalettepresenter.cpp
LEGO1/lego/legoomni/src/video/legopartpresenter.cpp
LEGO1/lego/legoomni/src/video/legophonemepresenter.cpp
LEGO1/lego/legoomni/src/video/legotexturepresenter.cpp
LEGO1/lego/legoomni/src/video/legovideomanager.cpp
LEGO1/lego/legoomni/src/video/mxtransitionmanager.cpp
LEGO1/main.cpp
)
register_lego1_target(lego1)
if (MINGW)
target_compile_definitions(lego1 PRIVATE DIRECTINPUT_VERSION=0x0500)
endif()
# Additional include directories
target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/util")
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/smack")
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/smack")
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 dxguid dinput winmm d3drm smack)
target_link_libraries(lego1 PRIVATE tglrl viewmanager realtime mxdirectx roi 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)
set_property(TARGET lego1 PROPERTY PREFIX "")
set_property(TARGET lego1 PROPERTY SUFFIX ".DLL")
if (ISLE_BUILD_APP)
@ -264,16 +418,8 @@ if (ISLE_BUILD_APP)
ISLE/define.cpp
)
target_include_directories(isle PRIVATE "${CMAKE_SOURCE_DIR}/util")
# Include LEGO1 headers in ISLE
target_include_directories(isle PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1")
# 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)
@ -288,13 +434,45 @@ if (ISLE_BUILD_APP)
endif()
if (MSVC)
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "15")
foreach(tgt IN LISTS lego1_targets)
target_compile_definitions(${tgt} PRIVATE _CRT_SECURE_NO_WARNINGS)
endforeach()
if (TARGET isle)
target_compile_definitions(isle 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")
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()
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")
endif()
endif()
if (MSVC_FOR_DECOMP)
# 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.
if (ISLE_BUILD_APP)
target_compile_options(isle PRIVATE "/ML$<$<CONFIG:Debug>:d>")
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>")
foreach(tgt IN LISTS lego1_targets)
target_compile_options(${tgt} PRIVATE "/MT$<$<CONFIG:Debug>:d>")
endforeach()
set(CMAKE_CXX_FLAGS "/W3 /GX /D \"WIN32\" /D \"_WINDOWS\"")
set(CMAKE_CXX_FLAGS_DEBUG "/Gm /Zi /Od /D \"_DEBUG\"")
@ -308,9 +486,50 @@ if (MSVC)
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")
set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "/incremental:no /debug")
set(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "/incremental:no")
# 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)
foreach(tgt IN LISTS lego1_taregets)
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()
find_program(CLANGFORMAT_BIN NAMES clang-format)
if(EXISTS "${CLANGFORMAT_BIN}")
execute_process(COMMAND "${CLANGFORMAT_BIN}" --version
OUTPUT_VARIABLE "CLANGFORMAT_VERSION_OUTPUT"
RESULT_VARIABLE "CLANGFORMAT_RESULT"
)
if(CLANGFORMAT_RESULT EQUAL 0 AND CLANGFORMAT_VERSION_OUTPUT MATCHES "version ([0-9\\.]+)")
set(CLANGFORMAT_VERSION "${CMAKE_MATCH_1}")
set(CLANGFORMAT_VERSION_REQUIRED "17.0")
message(DEBUG "Found clang-format version ${CLANGFORMAT_VERSION} (needs ${CLANGFORMAT_VERSION_REQUIRED}")
if(CLANGFORMAT_VERSION VERSION_GREATER_EQUAL "${CLANGFORMAT_VERSION_REQUIRED}")
file(GLOB_RECURSE isle_sources
"${PROJECT_SOURCE_DIR}/ISLE/*.cpp"
"${PROJECT_SOURCE_DIR}/ISLE/*.h"
"${PROJECT_SOURCE_DIR}/LEGO1/*.cpp"
"${PROJECT_SOURCE_DIR}/LEGO1/*.h"
)
string(REPLACE ";" "\n" isle_sources_lines "${isle_sources}")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/isle_sources.txt" "${isle_sources_lines}\n")
add_custom_target(clang-format ${CLANGFORMAT_BIN} -i "--files=${CMAKE_CURRENT_BINARY_DIR}/isle_sources.txt")
endif()
endif()
endif()

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

@ -8,9 +8,9 @@ class IsleApp;
extern IsleApp* g_isle;
extern int g_closed;
// GLOBAL: ISLE 0x4101c4
// STRING: ISLE 0x4101c4
#define WNDCLASS_NAME "Lego Island MainNoM App"
// GLOBAL: ISLE 0x4101dc
// STRING: ISLE 0x4101dc
#define WINDOW_TITLE "LEGO\xAE"
extern unsigned char g_mousedown;
extern unsigned char g_mousemoved;

View File

@ -8,11 +8,9 @@
#include "legomodelpresenter.h"
#include "legoomni.h"
#include "legopartpresenter.h"
#include "legoroi.h"
#include "legovideomanager.h"
#include "legoworldpresenter.h"
#include "mxbackgroundaudiomanager.h"
#include "mxdirectdraw.h"
#include "mxdsaction.h"
#include "mxomnicreateflags.h"
#include "mxomnicreateparam.h"
@ -21,6 +19,7 @@
#include "mxtimer.h"
#include "mxtransitionmanager.h"
#include "res/resource.h"
#include "viewmanager/viewmanager.h"
#include <dsound.h>
@ -53,7 +52,15 @@ IsleApp::IsleApp()
m_frameDelta = 10;
m_windowActive = 1;
#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;
@ -132,9 +139,18 @@ BOOL IsleApp::SetupLegoOmni()
char mediaPath[256];
GetProfileStringA("LEGO Island", "MediaPath", "", mediaPath, sizeof(mediaPath));
#ifdef COMPAT_MODE
BOOL failure;
{
MxOmniCreateParam param(mediaPath, (struct HWND__*) m_windowHandle, m_videoParam, MxOmniCreateFlags());
failure = Lego()->Create(param) == FAILURE;
}
#else
BOOL failure =
Lego()->Create(MxOmniCreateParam(mediaPath, (struct HWND__*) m_windowHandle, m_videoParam, MxOmniCreateFlags())
) == FAILURE;
#endif
if (!failure) {
VariableTable()->SetVariable("ACTOR_01", "");
TickleManager()->SetClientTickleInterval(VideoManager(), 10);
@ -388,7 +404,7 @@ LRESULT WINAPI WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
return DefWindowProcA(hWnd, uMsg, wParam, lParam);
case WM_DISPLAYCHANGE:
if (g_isle && VideoManager() && g_isle->m_fullScreen && VideoManager()->GetDirect3D()) {
if (VideoManager()->GetDirect3D()->GetDeviceModeFinder()) {
if (VideoManager()->GetDirect3D()->GetAssignedDevice()) {
int targetDepth = wParam;
int targetWidth = LOWORD(lParam);
int targetHeight = HIWORD(lParam);
@ -606,8 +622,8 @@ MxResult IsleApp::SetupWindow(HINSTANCE hInstance, LPSTR lpCmdLine)
LegoAnimationManager::configureLegoAnimationManager(m_islandQuality);
if (LegoOmni::GetInstance()) {
if (LegoOmni::GetInstance()->GetInputManager()) {
LegoOmni::GetInstance()->GetInputManager()->m_useJoystick = m_useJoystick;
LegoOmni::GetInstance()->GetInputManager()->m_joystickIndex = m_joystickIndex;
LegoOmni::GetInstance()->GetInputManager()->SetUseJoystick(m_useJoystick);
LegoOmni::GetInstance()->GetInputManager()->SetJoystickIndex(m_joystickIndex);
}
}
if (m_fullScreen) {
@ -754,12 +770,15 @@ inline void IsleApp::Tick(BOOL sleepIfNotNextFrame)
return;
}
if (!Lego())
if (!Lego()) {
return;
if (!TickleManager())
}
if (!TickleManager()) {
return;
if (!Timer())
}
if (!Timer()) {
return;
}
MxLong currentTime = Timer()->GetRealTime();
if (currentTime < g_lastFrameTime) {
@ -784,11 +803,11 @@ inline void IsleApp::Tick(BOOL sleepIfNotNextFrame)
LegoOmni::GetInstance()->CreateBackgroundAudio();
BackgroundAudioManager()->Enable(this->m_useMusic);
MxStreamController* stream = Streamer()->Open("\\lego\\scripts\\isle\\isle", MxStreamer::e_DiskStream);
MxStreamController* stream = Streamer()->Open("\\lego\\scripts\\isle\\isle", MxStreamer::e_diskStream);
MxDSAction ds;
if (!stream) {
stream = Streamer()->Open("\\lego\\scripts\\nocd", MxStreamer::e_DiskStream);
stream = Streamer()->Open("\\lego\\scripts\\nocd", MxStreamer::e_diskStream);
if (!stream) {
return;
}
@ -812,8 +831,9 @@ inline void IsleApp::Tick(BOOL sleepIfNotNextFrame)
this->m_gameStarted = 1;
}
}
else if (sleepIfNotNextFrame != 0)
else if (sleepIfNotNextFrame != 0) {
Sleep(0);
}
}
// FUNCTION: ISLE 0x402e80

63
ISLE/library_msvc.h Normal file
View File

@ -0,0 +1,63 @@
#ifdef 0
// For ISLE symbols only
// aka `operator new`
// LIBRARY: ISLE 0x402f80
// ??2@YAPAXI@Z
// aka `operator delete`
// LIBRARY: ISLE 0x402fa0
// ??3@YAXPAX@Z
// LIBRARY: ISLE 0x406dd0
// _malloc
// LIBRARY: ISLE 0x406f00
// _free
// LIBRARY: ISLE 0x407ec0
// ___CxxFrameHandler
// LIBRARY: ISLE 0x4081e0
// _srand
// LIBRARY: ISLE 0x4081f0
// _rand
// LIBRARY: ISLE 0x408220
// _atol
// LIBRARY: ISLE 0x4082d0
// _atoi
// LIBRARY: ISLE 0x4084c0
// ?_query_new_handler@@YAP6AHI@ZXZ
// LIBRARY: ISLE 0x4084d0
// ?_query_new_mode@@YAHXZ
// LIBRARY: ISLE 0x4085c0
// _sprintf
// LIBRARY: ISLE 0x408630
// _abort
// LIBRARY: ISLE 0x409110
// __mtinit
// LIBRARY: ISLE 0x409190
// __getptd
// GLOBAL: ISLE 0x4108e8
// __osver
// GLOBAL: ISLE 0x4108f0
// __winmajor
// GLOBAL: ISLE 0x4108f4
// __winminor
// GLOBAL: ISLE 0x410d50
// __newmode
#endif

312
ISLE/library_smartheap.h Normal file
View File

@ -0,0 +1,312 @@
#ifdef 0
// LIBRARY: ISLE 0x402f10
// ?shi_New@@YAPAXKIPAU_SHI_Pool@@@Z
// LIBRARY: ISLE 0x402fb0
// _MemInitDefaultPool@0
// LIBRARY: ISLE 0x403020
// _shi_call_new_handler_msc
// LIBRARY: ISLE 0x403050
// _MemPoolShrink@4
// LIBRARY: ISLE 0x403180
// _MemPoolPreAllocate@12
// LIBRARY: ISLE 0x403300
// @_shi_initPageHeaders@4
// LIBRARY: ISLE 0x403570
// @shi_allocPageHeader@4
// LIBRARY: ISLE 0x4035a0
// @shi_freePageHeader@8
// LIBRARY: ISLE 0x403750
// @_shi_deletePage@8
// LIBRARY: ISLE 0x403830
// @_shi_allocExternal@12
// LIBRARY: ISLE 0x403a50
// @_shi_initPageVariable@8
// LIBRARY: ISLE 0x403b00
// _MemAllocPtr@12
// LIBRARY: ISLE 0x403d60
// @_shi_allocVar@12
// LIBRARY: ISLE 0x403ef0
// @_shi_allocBlock@12
// LIBRARY: ISLE 0x4040c0
// _MemFreePtr@4
// LIBRARY: ISLE 0x404170
// @_shi_freeVar@4
// LIBRARY: ISLE 0x404260
// _MemReAllocPtr@12
// LIBRARY: ISLE 0x4043b0
// @_shi_resizeAny@16
// LIBRARY: ISLE 0x404650
// @_shi_resizeVar@8
// LIBRARY: ISLE 0x404820
// _MemSizePtr@4
// LIBRARY: ISLE 0x4048d0
// @shi_findAllocAddress@4
// LIBRARY: ISLE 0x404910
// @_shi_sysAlloc@8
// LIBRARY: ISLE 0x4049a0
// @_shi_sysFree@4
// LIBRARY: ISLE 0x404a00
// @_shi_sysRealloc@12
// LIBRARY: ISLE 0x404ab0
// @_shi_sysResize@12
// LIBRARY: ISLE 0x404b90
// @_shi_sysSize@4
// LIBRARY: ISLE 0x404bd0
// @_shi_sysAllocNear@4
// LIBRARY: ISLE 0x404bf0
// @_shi_sysFreeNear@4
// LIBRARY: ISLE 0x404c10
// @_shi_sysValidatePtr@12
// LIBRARY: ISLE 0x404d10
// @_shi_sysValidateFunction@4
// LIBRARY: ISLE 0x405300
// @_shi_sysAllocPool@12
// LIBRARY: ISLE 0x405520
// @_shi_sysResizePool@16
// LIBRARY: ISLE 0x405690
// @_shi_sysFreePage@4
// LIBRARY: ISLE 0x4057b0
// @_shi_sysSizePage@4
// LIBRARY: ISLE 0x4057e0
// @_shi_sysSizePool@8
// LIBRARY: ISLE 0x405800
// @_shi_registerShared@16
// LIBRARY: ISLE 0x405a00
// @_shi_unregisterShared@8
// LIBRARY: ISLE 0x405b20
// @_shi_getNextPool@4
// LIBRARY: ISLE 0x405b30
// @shi_delNextPool@4
// LIBRARY: ISLE 0x405d30
// @shi_createAndEnterMutexShr@12
// LIBRARY: ISLE 0x405e20
// @shi_termPoolMutexShr@4
// LIBRARY: ISLE 0x405e40
// @shi_enterPoolMutexShr@4
// LIBRARY: ISLE 0x405e60
// @shi_leavePoolMutexShr@4
// LIBRARY: ISLE 0x405e80
// __shi_enterCriticalSection@0
// LIBRARY: ISLE 0x405ea0
// __shi_leaveCriticalSection@0
// LIBRARY: ISLE 0x405ec0
// __shi_createAndEnterMutex
// LIBRARY: ISLE 0x405ef0
// _shi_enterPoolMutexSafely
// LIBRARY: ISLE 0x405fd0
// _shi_enterPoolInitMutexReader
// LIBRARY: ISLE 0x406060
// _shi_leavePoolInitMutexReader
// LIBRARY: ISLE 0x406090
// _shi_enterPoolInitMutexWriter
// LIBRARY: ISLE 0x406160
// _shi_leavePoolInitMutexWriter
// LIBRARY: ISLE 0x406180
// _shi_isNT
// LIBRARY: ISLE 0x4061b0
// _MemPoolInit@4
// LIBRARY: ISLE 0x406520
// _MemPoolSetPageSize@8
// LIBRARY: ISLE 0x406630
// _MemPoolSetBlockSizeFS@8
// LIBRARY: ISLE 0x406710
// @_shi_poolFree@8
// LIBRARY: ISLE 0x4068c0
// @_shi_invokeErrorHandler1@8
// LIBRARY: ISLE 0x406be0
// _MemErrorUnwind@0
// LIBRARY: ISLE 0x406c30
// _MemDefaultErrorHandler@4
// LIBRARY: ISLE 0x406cb0
// @_shi_taskRemovePool@4
// LIBRARY: ISLE 0x406d50
// @_shi_getCurrentThreadContext@8
// LIBRARY: ISLE 0x406db0
// @_shi_deleteThreadContext@8
// LIBRARY: ISLE 0x406e40
// _calloc
// LIBRARY: ISLE 0x406ea0
// _realloc
// LIBRARY: ISLE 0x406f10
// __expand
// LIBRARY: ISLE 0x406f50
// __heapadd
// LIBRARY: ISLE 0x406f60
// __heapwalk
// LIBRARY: ISLE 0x406ff0
// __heapused
// LIBRARY: ISLE 0x407020
// __heapmin
// LIBRARY: ISLE 0x407040
// __msize
// LIBRARY: ISLE 0x407050
// __heapchk
// LIBRARY: ISLE 0x407080
// __heapset
// LIBRARY: ISLE 0x407090
// @_shi_sysReportError@16
// LIBRARY: ISLE 0x407110
// _MemPoolSize@4
// LIBRARY: ISLE 0x4071a0
// _MemPoolWalk@8
// LIBRARY: ISLE 0x407240
// @_shi_walkPool@16
// LIBRARY: ISLE 0x407540
// @shi_isBlockInUseSmall@8
// LIBRARY: ISLE 0x407800
// @_shi_isBlockInUseFS@12
// LIBRARY: ISLE 0x407880
// _MemPoolCheck@4
// LIBRARY: ISLE 0x407b20
// _MemCheckPtr@8
// LIBRARY: ISLE 0x4084e0
// __except_handler3
// GLOBAL: ISLE 0x40f0a0
// _szLibName
// GLOBAL: ISLE 0x4102f4
// ?_new_handler@@3P6AXXZA
// GLOBAL: ISLE 0x4102fc
// _MemDefaultPool
// GLOBAL: ISLE 0x41031c
// __shi_compactPoolFn
// GLOBAL: ISLE 0x410320
// __shi_compactPageFn
// GLOBAL: ISLE 0x410324
// _MemDefaultPoolFlags
// GLOBAL: ISLE 0x41032c
// __shi_mutexGlobalInit
// GLOBAL: ISLE 0x410330
// __shi_mutexMovInit
// GLOBAL: ISLE 0x410334
// __shi_mutexMovLockCount
// GLOBAL: ISLE 0x410338
// _shi_initPoolReaders
// GLOBAL: ISLE 0x41033c
// _shi_eventInitPool
// GLOBAL: ISLE 0x410340
// _shi_mutexMovShr
// GLOBAL: ISLE 0x410368
// _shi_deferFreePools
// GLOBAL: ISLE 0x410378
// __shi_poolTerminating
// GLOBAL: ISLE 0x41037c
// _MemDefaultPoolBlockSizeFS
// GLOBAL: ISLE 0x410380
// _MemDefaultPoolPageSize
// GLOBAL: ISLE 0x410384
// _SmartHeap_malloc
// GLOBAL: ISLE 0x4105b0
// __shi_TaskRecord
// GLOBAL: ISLE 0x4125f8
// ?_pnhHeap@@3P6AHI@ZA
// GLOBAL: ISLE 0x412830
// __shi_mutexMov
// GLOBAL: ISLE 0x412850
// _shi_mutexPoolSynch
// GLOBAL: ISLE 0x412870
// __shi_mutexGlobal
#endif

View File

@ -1,5 +1,5 @@
#define ISLE_ARROW 102
#define ISLE_NO 103
#define ISLE_BUSY 104
#define ISLE_ARROW 102
#define ISLE_NO 103
#define ISLE_BUSY 104
#define APP_ICON 105
#define APP_ICON 105

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

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

View File

@ -1,33 +0,0 @@
#ifndef ACT1STATE_H
#define ACT1STATE_H
#include "legostate.h"
// VTABLE: LEGO1 0x100d7028
// SIZE 0x26c
class Act1State : public LegoState {
public:
Act1State();
// FUNCTION: LEGO1 0x100338a0
inline virtual const char* ClassName() const override // vtable+0x0c
{
// GLOBAL: LEGO1 0x100f0154
return "Act1State";
};
// FUNCTION: LEGO1 0x100338b0
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Act1State::ClassName()) || LegoState::IsA(p_name);
};
inline void SetUnknown18(MxU32 p_unk0x18) { m_unk0x18 = p_unk0x18; }
inline MxU32 GetUnknown18() { return m_unk0x18; }
protected:
undefined m_unk0x8[0x10]; // 0x8
MxU32 m_unk0x18; // 0x18
};
#endif // ACT1STATE_H

View File

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

View File

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

View File

@ -1,37 +0,0 @@
#ifndef ACT3_H
#define ACT3_H
#include "legoworld.h"
// VTABLE: LEGO1 0x100d9628
// SIZE 0x4274
class Act3 : public LegoWorld {
public:
Act3();
virtual ~Act3() override; // vtable+00
// FUNCTION: LEGO1 0x10072510
inline virtual const char* ClassName() const override // vtable+0x0c
{
// GLOBAL: LEGO1 0x100f013c
return "Act3";
}
// FUNCTION: LEGO1 0x10072520
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Act3::ClassName()) || LegoWorld::IsA(p_name);
}
inline void SetUnkown420c(MxEntity* p_entity) { m_unk0x420c = p_entity; }
inline void SetUnkown4270(MxU32 p_unk0x4270) { m_unk0x4270 = p_unk0x4270; }
protected:
undefined m_unk0xf8[0x4114]; // 0xf8
MxEntity* m_unk0x420c; // 0x420c
undefined m_unk0x4210[0x60]; // 0x4210
MxU32 m_unk0x4270; // 0x4270
};
#endif // ACT3_H

View File

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

View File

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

View File

@ -1,21 +0,0 @@
#include "ambulance.h"
#include "decomp.h"
DECOMP_SIZE_ASSERT(Ambulance, 0x184);
// FUNCTION: LEGO1 0x10035ee0
Ambulance::Ambulance()
{
this->m_unk0x168 = 0;
this->m_unk0x16a = -1;
this->m_unk0x164 = 0;
this->m_unk0x16c = 0;
this->m_unk0x174 = -1;
this->m_unk0x16e = 0;
this->m_unk0x178 = -1;
this->m_unk0x170 = 0;
this->m_unk0x172 = 0;
this->m_unk0x13c = 40.0;
this->m_unk0x17c = 1.0;
}

View File

@ -1,41 +0,0 @@
#ifndef AMBULANCE_H
#define AMBULANCE_H
#include "islepathactor.h"
// VTABLE: LEGO1 0x100d71a8
// SIZE 0x184
class Ambulance : public IslePathActor {
public:
Ambulance();
// FUNCTION: LEGO1 0x10035fa0
inline virtual const char* ClassName() const override // vtable+0x0c
{
// GLOBAL: LEGO1 0x100f03c4
return "Ambulance";
}
// FUNCTION: LEGO1 0x10035fb0
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Ambulance::ClassName()) || IslePathActor::IsA(p_name);
}
private:
// TODO: Ambulance fields
undefined m_unk0x160[4];
MxS32 m_unk0x164;
MxS16 m_unk0x168;
MxS16 m_unk0x16a;
MxS16 m_unk0x16c;
MxS16 m_unk0x16e;
MxS16 m_unk0x170;
MxS16 m_unk0x172;
MxS32 m_unk0x174;
MxS32 m_unk0x178;
MxFloat m_unk0x17c;
undefined m_unk0x180[4];
};
#endif // AMBULANCE_H

View File

@ -1,37 +0,0 @@
#ifndef ANIMSTATE_H
#define ANIMSTATE_H
#include "legostate.h"
// VTABLE: LEGO1 0x100d8d80
// SIZE 0x1c
class AnimState : public LegoState {
public:
AnimState();
virtual ~AnimState() override; // vtable+0x0
// FUNCTION: LEGO1 0x10065070
inline virtual const char* ClassName() const override // vtable+0x0c
{
// GLOBAL: LEGO1 0x100f0460
return "AnimState";
}
// FUNCTION: LEGO1 0x10065080
inline virtual 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
private:
undefined4 m_unk0x8;
undefined4 m_unk0xc;
void* m_unk0x10;
undefined4 m_unk0x14;
void* m_unk0x18;
};
#endif // ANIMSTATE_H

View File

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

View File

@ -1,11 +0,0 @@
#include "bike.h"
DECOMP_SIZE_ASSERT(Bike, 0x164);
// FUNCTION: LEGO1 0x10076670
Bike::Bike()
{
this->m_unk0x13c = 20.0;
this->m_unk0x150 = 3.0;
this->m_unk0x148 = 1;
}

View File

@ -1,31 +0,0 @@
#ifndef BIKE_H
#define BIKE_H
#include "decomp.h"
#include "islepathactor.h"
// VTABLE: LEGO1 0x100d9808
// SIZE 0x164
class Bike : public IslePathActor {
public:
Bike();
// FUNCTION: LEGO1 0x100766f0
inline virtual const char* ClassName() const override // vtable+0x0c
{
// GLOBAL: LEGO1 0x100f03d0
return "Bike";
}
// FUNCTION: LEGO1 0x10076700
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Bike::ClassName()) || IslePathActor::IsA(p_name);
}
private:
// TODO: Bike fields
undefined m_unk0x160[4];
};
#endif // BIKE_H

View File

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

View File

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

View File

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

View File

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

View File

@ -1,7 +1,7 @@
#include "define.h"
// GLOBAL: LEGO1 0x1010141c
MxU32 g_mxcoreCount[101] = {0, -6643, -5643, -5058, -4643, -4321, -4058, -3836, -3643, -3473, -3321, -3184, -3058,
MxS32 g_mxcoreCount[101] = {0, -6643, -5643, -5058, -4643, -4321, -4058, -3836, -3643, -3473, -3321, -3184, -3058,
-2943, -2836, -2736, -2643, -2556, -2473, -2395, -2321, -2251, -2184, -2120, -2058, -2000,
-1943, -1888, -1836, -1785, -1736, -1689, -1643, -1599, -1556, -1514, -1473, -1434, -1395,
-1358, -1321, -1286, -1251, -1217, -1184, -1152, -1120, -1089, -1058, -1029, -1000, -971,
@ -10,17 +10,26 @@ MxU32 g_mxcoreCount[101] = {0, -6643, -5643, -5058, -4643, -4321, -4058, -38
-358, -340, -321, -304, -286, -268, -251, -234, -217, -200, -184, -168, -152,
-136, -120, -104, -89, -74, -58, -43, -29, -14, 0};
// GLOBAL: LEGO1 0x10101eac
const char* g_parseExtraTokens = ":;";
// GLOBAL: LEGO1 0x10101edc
const char* g_strWORLD = "WORLD";
// GLOBAL: LEGO1 0x10101f20
const char* g_strSOUND = "SOUND";
// GLOBAL: LEGO1 0x10102040
// GLOBAL: LEGO1 0x10102048
// STRING: LEGO1 0x10102040
const char* g_strACTION = "ACTION";
// GLOBAL: LEGO1 0x1010209c
// STRING: LEGO1 0x10101f58
const char* g_strOBJECT = "OBJECT";
// GLOBAL: LEGO1 0x101020b0
// STRING: LEGO1 0x10101f20
const char* g_strSOUND = "SOUND";
// GLOBAL: LEGO1 0x101020cc
// STRING: LEGO1 0x100f3808
const char* g_strVISIBILITY = "VISIBILITY";
// GLOBAL: LEGO1 0x101020d0
// STRING: LEGO1 0x10101edc
const char* g_strWORLD = "WORLD";
// GLOBAL: LEGO1 0x101020e4
// STRING: LEGO1 0x10101eac
const char* g_parseExtraTokens = ":;";

View File

@ -3,10 +3,11 @@
#include "mxtypes.h"
extern MxU32 g_mxcoreCount[101];
extern MxS32 g_mxcoreCount[101];
extern const char* g_parseExtraTokens;
extern const char* g_strWORLD;
extern const char* g_strSOUND;
extern const char* g_strOBJECT;
extern const char* g_strACTION;
extern const char* g_strVISIBILITY;

View File

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

View File

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

View File

@ -1,12 +0,0 @@
#include "dunebuggy.h"
#include "decomp.h"
DECOMP_SIZE_ASSERT(DuneBuggy, 0x16c);
// FUNCTION: LEGO1 0x10067bb0
DuneBuggy::DuneBuggy()
{
this->m_unk0x13c = 25.0;
this->m_unk0x164 = 1.0;
}

View File

@ -1,33 +0,0 @@
#ifndef DUNEBUGGY_H
#define DUNEBUGGY_H
#include "decomp.h"
#include "islepathactor.h"
// VTABLE: LEGO1 0x100d8f98
// SIZE 0x16c
class DuneBuggy : public IslePathActor {
public:
DuneBuggy();
// FUNCTION: LEGO1 0x10067c30
inline virtual const char* ClassName() const override // vtable+0x0c
{
// GLOBAL: LEGO1 0x100f0410
return "DuneBuggy";
}
// FUNCTION: LEGO1 0x10067c40
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, DuneBuggy::ClassName()) || IslePathActor::IsA(p_name);
}
private:
// TODO: Double check DuneBuggy field types
undefined4 m_unk0x160;
MxFloat m_unk0x164;
undefined4 m_unk0x168;
};
#endif // DUNEBUGGY_H

View File

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

View File

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

View File

@ -1,21 +0,0 @@
#ifndef EXTRA_H
#define EXTRA_H
// Items related to the Extra string of key-value pairs found in MxOb
enum ExtraActionType {
ExtraActionType_none = 0,
ExtraActionType_opendisk = 1,
ExtraActionType_openram = 2,
ExtraActionType_close = 3,
ExtraActionType_start = 4,
ExtraActionType_stop = 5,
ExtraActionType_run = 6,
ExtraActionType_exit = 7,
ExtraActionType_enable = 8,
ExtraActionType_disable = 9,
ExtraActionType_notify = 10,
ExtraActionType_unknown = 11,
};
#endif // EXTRA_H

View File

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

View File

@ -1,31 +0,0 @@
#ifndef GASSTATION_H
#define GASSTATION_H
#include "legoworld.h"
// VTABLE: LEGO1 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_param) override; // vtable+0x4
virtual MxResult Tickle() override; // vtable+0x8
// FUNCTION: LEGO1 0x10004780
inline virtual const char* ClassName() const override // vtable+0x0c
{
// GLOBAL: LEGO1 0x100f0168
return "GasStation";
}
// FUNCTION: LEGO1 0x10004790
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, GasStation::ClassName()) || LegoWorld::IsA(p_name);
}
};
#endif // GASSTATION_H

View File

@ -1,35 +0,0 @@
#ifndef GASSTATIONSTATE_H
#define GASSTATIONSTATE_H
#include "legostate.h"
// VTABLE: LEGO1 0x100d46e0
// SIZE 0x24
class GasStationState : public LegoState {
public:
GasStationState();
// FUNCTION: LEGO1 0x100061d0
inline virtual const char* ClassName() const override // vtable+0x0c
{
// GLOBAL: LEGO1 0x100f0174
return "GasStationState";
}
// FUNCTION: LEGO1 0x100061e0
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, GasStationState::ClassName()) || LegoState::IsA(p_name);
}
private:
undefined4 m_unk0x08[3];
undefined4 m_unk0x14;
undefined2 m_unk0x18;
undefined2 m_unk0x1a;
undefined2 m_unk0x1c;
undefined2 m_unk0x1e;
undefined2 m_unk0x20;
};
#endif // GASSTATIONSTATE_H

View File

@ -1,25 +0,0 @@
#include "gifmanager.h"
DECOMP_SIZE_ASSERT(GifData, 0x14);
DECOMP_SIZE_ASSERT(GifMapEntry, 0x14);
DECOMP_SIZE_ASSERT(GifMap, 0x08);
DECOMP_SIZE_ASSERT(GifManagerBase, 0x14);
DECOMP_SIZE_ASSERT(GifManager, 0x30);
GifMapEntry* g_unk0x100f0100;
// FUNCTION: LEGO1 0x10001cc0
GifMapEntry* GifMap::FindNode(const char*& p_string)
{
GifMapEntry* ret = m_unk0x4;
GifMapEntry* current = ret->m_parent;
while (current != g_unk0x100f0100) {
if (strcmp(current->m_key, p_string) <= 0) {
ret = current;
current = current->m_right;
}
else
current = current->m_left;
}
return ret;
}

View File

@ -1,69 +0,0 @@
#ifndef GIFMANAGER_H
#define GIFMANAGER_H
#include "decomp.h"
#include "mxtypes.h"
#include <d3drmobj.h>
#include <ddraw.h>
struct GifData {
public:
const char* m_name;
LPDIRECTDRAWSURFACE m_surface;
LPDIRECTDRAWPALETTE m_palette;
LPDIRECT3DRMTEXTURE2 m_texture;
MxU8* m_data;
};
struct GifMapEntry {
public:
GifMapEntry* m_right;
GifMapEntry* m_parent;
GifMapEntry* m_left;
const char* m_key;
GifData* m_value;
};
class GifMap {
public:
GifMapEntry* FindNode(const char*& p_string);
inline GifData* Get(const char* p_string)
{
GifData* ret = NULL;
GifMapEntry* entry = FindNode(p_string);
if (((m_unk0x4 == entry || strcmp(p_string, entry->m_key) > 0) ? m_unk0x4 : entry) != entry)
ret = entry->m_value;
return ret;
}
undefined4 m_unk0x0;
GifMapEntry* m_unk0x4;
};
// VTABLE: LEGO1 0x100d86d4
class GifManagerBase {
public:
// STUB: LEGO1 0x1005a310
virtual ~GifManagerBase() {} // vtable+00
inline GifData* Get(const char* p_name) { return m_unk0x8.Get(p_name); }
protected:
undefined4 m_unk0x0;
undefined4 m_unk0x4;
GifMap m_unk0x8;
};
// VTABLE: LEGO1 0x100d86fc
class GifManager : public GifManagerBase {
public:
// STUB: LEGO1 0x1005a580
virtual ~GifManager() {} // vtable+00
protected:
undefined m_unk0x14[0x1c];
};
#endif // GIFMANAGER_H

View File

@ -1,63 +0,0 @@
#ifndef HELICOPTER_H
#define HELICOPTER_H
#include "helicopterstate.h"
#include "islepathactor.h"
#include "realtime/matrix.h"
// SIZE 0x34
class HelicopterSubclass {
public:
inline HelicopterSubclass() : m_unk0x30(0) {}
MxResult FUN_100040a0(Vector4Impl& p_v, float p_f);
private:
Vector4Data m_unk0x0; // 0x0
Vector4Data m_unk0x18; // 0x18
undefined4 m_unk0x30; // 0x30
};
// VTABLE: LEGO1 0x100d40f8
// SIZE 0x230
class Helicopter : public IslePathActor {
public:
Helicopter();
virtual ~Helicopter() override; // vtable+0x0
// FUNCTION: LEGO1 0x10003070
inline virtual const char* ClassName() const override // vtable+0x0c
{
// GLOBAL: LEGO1 0x100f0130
return "Helicopter";
}
// FUNCTION: LEGO1 0x10003080
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Helicopter::ClassName()) || IslePathActor::IsA(p_name);
}
virtual MxResult Create(MxDSObject& p_dsObject) override; // vtable+0x18
void VTable0x70(float p_float) override; // vtable+0x70
void VTable0x74(Matrix4Impl& 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
// SYNTHETIC: LEGO1 0x10003210
// Helicopter::`scalar deleting destructor'
protected:
Matrix4Data m_unk0x160; // 0x160
Matrix4Data m_unk0x1a8; // 0x1a8
float m_unk0x1f0; // 0x1f0
HelicopterSubclass m_unk0x1f4; // 0x1f4
HelicopterState* m_state; // 0x228
MxAtomId m_script; // 0x22c
private:
void GetState();
};
#endif // HELICOPTER_H

View File

@ -1,31 +0,0 @@
#ifndef HELICOPTERSTATE_H
#define HELICOPTERSTATE_H
#include "decomp.h"
#include "legostate.h"
// VTABLE: LEGO1 0x100d5418
// SIZE 0xc
class HelicopterState : public LegoState {
public:
// FUNCTION: LEGO1 0x1000e0d0
inline virtual const char* ClassName() const override // vtable+0x0c
{
// GLOBAL: LEGO1 0x100f0144
return "HelicopterState";
}
// FUNCTION: LEGO1 0x1000e0e0
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, HelicopterState::ClassName()) || LegoState::IsA(p_name);
}
inline void SetUnknown8(MxU32 p_unk0x8) { m_unk0x8 = p_unk0x8; }
inline MxU32 GetUnkown8() { return m_unk0x8; }
protected:
MxU32 m_unk0x8; // 0x8
};
#endif // HELICOPTERSTATE_H

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,62 +0,0 @@
#ifndef INFOCENTERSTATE_H
#define INFOCENTERSTATE_H
#include "decomp.h"
#include "legostate.h"
// VTABLE: LEGO1 0x100d93a8
// SIZE 0x94
class InfocenterState : public LegoState {
public:
InfocenterState();
virtual ~InfocenterState();
// FUNCTION: LEGO1 0x10071840
inline virtual const char* ClassName() const override // vtable+0x0c
{
// GLOBAL: LEGO1 0x100f04dc
return "InfocenterState";
}
// FUNCTION: LEGO1 0x10071850
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, InfocenterState::ClassName()) || LegoState::IsA(p_name);
}
inline MxU32 GetInfocenterBufferElement(MxS32 p_index) { return m_buffer[p_index]; }
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[0x70];
MxU32 m_buffer[7]; // 0x78
};
#endif // INFOCENTERSTATE_H

View File

@ -1,4 +0,0 @@
#include "isleactor.h"
// NOTE: This is copied from base class LegoActor. IsleActor may in fact be larger but we don't know yet.
DECOMP_SIZE_ASSERT(IsleActor, 0x78)

View File

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

View File

@ -1,11 +0,0 @@
#include "jetski.h"
DECOMP_SIZE_ASSERT(Jetski, 0x164);
// FUNCTION: LEGO1 0x1007e3b0
Jetski::Jetski()
{
this->m_unk0x13c = 25.0;
this->m_unk0x150 = 2.0;
this->m_unk0x148 = 1;
}

View File

@ -1,31 +0,0 @@
#ifndef JETSKI_H
#define JETSKI_H
#include "decomp.h"
#include "islepathactor.h"
// VTABLE: LEGO1 0x100d9ec8
// SIZE 0x164
class Jetski : public IslePathActor {
public:
Jetski();
// FUNCTION: LEGO1 0x1007e430
inline virtual const char* ClassName() const override // vtable+0x0c
{
// GLOBAL: LEGO1 0x100f03d8
return "Jetski";
}
// FUNCTION: LEGO1 0x1007e440
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Jetski::ClassName()) || IslePathActor::IsA(p_name);
}
private:
// TODO: Jetski fields
undefined m_unk0x160[4];
};
#endif // JETSKI_H

View File

@ -1,14 +0,0 @@
#include "jukebox.h"
#include "mxnotificationmanager.h"
#include "mxomni.h"
DECOMP_SIZE_ASSERT(JukeBox, 0x104)
// FUNCTION: LEGO1 0x1005d660
JukeBox::JukeBox()
{
m_unk0x100 = 0;
m_unk0xfc = 0;
NotificationManager()->Register(this);
}

View File

@ -1,32 +0,0 @@
#ifndef JUKEBOX_H
#define JUKEBOX_H
#include "decomp.h"
#include "legoworld.h"
// VTABLE: LEGO1 0x100d8958
// SIZE 0x104
class JukeBox : public LegoWorld {
public:
JukeBox();
// FUNCTION: LEGO1 0x1005d6f0
inline virtual const char* ClassName() const override // vtable+0x0c
{
// GLOBAL: LEGO1 0x100f02cc
return "JukeBox";
}
// FUNCTION: LEGO1 0x1005d700
inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, JukeBox::ClassName()) || LegoWorld::IsA(p_name);
}
private:
undefined m_unk0xf8[4]; // 0xf8
undefined4 m_unk0xfc; // 0xfc
undefined2 m_unk0x100; // 0x100
};
#endif // JUKEBOX_H

View File

@ -0,0 +1,53 @@
#ifndef ACT1STATE_H
#define ACT1STATE_H
#include "legostate.h"
// VTABLE: LEGO1 0x100d7028
// SIZE 0x26c
class Act1State : public LegoState {
public:
Act1State();
// FUNCTION: LEGO1 0x100338a0
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0154
return "Act1State";
}
// FUNCTION: LEGO1 0x100338b0
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Act1State::ClassName()) || LegoState::IsA(p_name);
}
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 MxU32 GetUnknown1c() { return m_unk0x1c; }
inline MxS16 GetUnknown21() { return m_unk0x21; }
inline void SetUnknown1c(MxU32 p_unk0x1c) { m_unk0x1c = p_unk0x1c; }
inline void SetUnknown21(MxS16 p_unk0x21) { m_unk0x21 = p_unk0x21; }
void FUN_10034d00();
// SYNTHETIC: LEGO1 0x10033960
// Act1State::`scalar deleting destructor'
protected:
undefined m_unk0x08[0x10]; // 0x08
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
};
#endif // ACT1STATE_H

View File

@ -0,0 +1,35 @@
#ifndef ACT2BRICK_H
#define ACT2BRICK_H
#include "legopathactor.h"
// VTABLE: LEGO1 0x100d9b60
// SIZE 0x194
class Act2Brick : public LegoPathActor {
public:
Act2Brick();
~Act2Brick() override; // vtable+0x00
MxLong Notify(MxParam& p_param) override; // vtable+0x04
MxResult Tickle() override; // vtable+0x08
// FUNCTION: LEGO1 0x1007a360
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0438
return "Act2Brick";
}
// FUNCTION: LEGO1 0x1007a370
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Act2Brick::ClassName()) || LegoEntity::IsA(p_name);
}
MxS32 VTable0x94() override; // vtable+0x94
// SYNTHETIC: LEGO1 0x1007a450
// Act2Brick::`scalar deleting destructor'
};
#endif // ACT2BRICK_H

View File

@ -7,20 +7,23 @@
// 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
{
// GLOBAL: LEGO1 0x100f03fc
// 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);
}
// SYNTHETIC: LEGO1 0x1000f610
// Act2PoliceStation::`scalar deleting destructor'
};
#endif // ACT2POLICESTATION_H

View File

@ -0,0 +1,56 @@
#ifndef ACT3_H
#define ACT3_H
#include "legoworld.h"
// VTABLE: LEGO1 0x100d9628
// SIZE 0x4274
class Act3 : public LegoWorld {
public:
Act3();
~Act3() override; // vtable+00
MxLong Notify(MxParam& p_param) override; // vtable+0x04
MxResult Tickle() override; // vtable+0x08
// FUNCTION: LEGO1 0x10072510
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f013c
return "Act3";
}
// FUNCTION: LEGO1 0x10072520
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Act3::ClassName()) || LegoWorld::IsA(p_name);
}
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; }
// 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
undefined m_unk0x4210[0x60]; // 0x4210
MxU32 m_unk0x4270; // 0x4270
};
#endif // ACT3_H

View File

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

View File

@ -0,0 +1,31 @@
#ifndef ACT3SHARK_H
#define ACT3SHARK_H
#include "legoanimactor.h"
// VTABLE: LEGO1 0x100d7920
class Act3Shark : public LegoAnimActor {
public:
// FUNCTION: LEGO1 0x100430c0
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f03a0
return "Act3Shark";
}
// FUNCTION: LEGO1 0x1001a130
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Act3Shark::ClassName()) || LegoAnimActor::IsA(p_name);
}
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'
};
#endif // ACT3SHARK_H

View File

@ -4,25 +4,28 @@
#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
{
// GLOBAL: LEGO1 0x100f03f0
// 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'
private:
// FIXME: May be part of LegoState? Uncertain...

View File

@ -0,0 +1,55 @@
#ifndef AMBULANCE_H
#define AMBULANCE_H
#include "islepathactor.h"
// VTABLE: LEGO1 0x100d71a8
// SIZE 0x184
class Ambulance : public IslePathActor {
public:
Ambulance();
MxLong Notify(MxParam& p_param) override; // vtable+0x04
MxResult Tickle() override; // vtable+0x08
// FUNCTION: LEGO1 0x10035fa0
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f03c4
return "Ambulance";
}
// FUNCTION: LEGO1 0x10035fb0
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Ambulance::ClassName()) || IslePathActor::IsA(p_name);
}
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'
private:
// TODO: Ambulance fields
undefined m_unk0x160[4];
MxS32 m_unk0x164;
MxS16 m_unk0x168;
MxS16 m_unk0x16a;
MxS16 m_unk0x16c;
MxS16 m_unk0x16e;
MxS16 m_unk0x170;
MxS16 m_unk0x172;
MxS32 m_unk0x174;
MxS32 m_unk0x178;
MxFloat m_unk0x17c;
undefined m_unk0x180[4];
};
#endif // AMBULANCE_H

View File

@ -10,18 +10,20 @@ 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
{
// GLOBAL: LEGO1 0x100f00e8
// 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);
}
MxResult VTable0x1c(LegoFile* p_legoFile) override; // vtable+0x1c
inline MxU16 GetColor(MxU8 p_id)
{
switch (p_id) {
@ -40,19 +42,22 @@ class AmbulanceMissionState : public LegoState {
}
}
// SYNTHETIC: LEGO1 0x100376c0
// 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

@ -0,0 +1,40 @@
#ifndef ANIMSTATE_H
#define ANIMSTATE_H
#include "legostate.h"
// VTABLE: LEGO1 0x100d8d80
// SIZE 0x1c
class AnimState : public LegoState {
public:
AnimState();
~AnimState() override; // vtable+0x00
// FUNCTION: LEGO1 0x10065070
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0460
return "AnimState";
}
// FUNCTION: LEGO1 0x10065080
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, AnimState::ClassName()) || LegoState::IsA(p_name);
}
MxBool SetFlag() override; // vtable+0x18
MxResult VTable0x1c(LegoFile* p_legoFile) override; // vtable+0x1C
// SYNTHETIC: LEGO1 0x10065130
// AnimState::`scalar deleting destructor'
private:
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

@ -7,20 +7,21 @@
// SIZE 0x68
class BeachHouseEntity : public BuildingEntity {
public:
virtual MxLong Notify(MxParam& p_param) override; // vtable+04
// FUNCTION: LEGO1 0x1000ee80
inline virtual const char* ClassName() const override // vtable+0x0c
inline const char* ClassName() const override // vtable+0x0c
{
// GLOBAL: LEGO1 0x100f0314
// 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);
}
// SYNTHETIC: LEGO1 0x1000f970
// BeachHouseEntity::`scalar deleting destructor'
};
#endif // BEACHHOUSEENTITY_H

View File

@ -0,0 +1,39 @@
#ifndef BIKE_H
#define BIKE_H
#include "decomp.h"
#include "islepathactor.h"
// VTABLE: LEGO1 0x100d9808
// SIZE 0x164
class Bike : public IslePathActor {
public:
Bike();
// FUNCTION: LEGO1 0x100766f0
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f03d0
return "Bike";
}
// FUNCTION: LEGO1 0x10076700
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Bike::ClassName()) || IslePathActor::IsA(p_name);
}
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'
private:
// TODO: Bike fields
undefined m_unk0x160[4];
};
#endif // BIKE_H

View File

@ -8,20 +8,25 @@
class BuildingEntity : public LegoEntity {
public:
BuildingEntity();
virtual ~BuildingEntity() override; // vtable+0x0
~BuildingEntity() override; // vtable+0x00
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
{
// GLOBAL: LEGO1 0x100f07e8
// 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);
}
// SYNTHETIC: LEGO1 0x10015010
// BuildingEntity::`scalar deleting destructor'
};
#endif // BUILDINGENTITY_H

View File

@ -0,0 +1,34 @@
#ifndef BUMPBOUY_H
#define BUMPBOUY_H
#include "legoanimactor.h"
#include "mxtypes.h"
// VTABLE: LEGO1 0x100d6790
class BumpBouy : public LegoAnimActor {
public:
MxLong Notify(MxParam& p_param) override; // vtable+0x04
// FUNCTION: LEGO1 0x100274e0
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0394
return "BumpBouy";
}
// FUNCTION: LEGO1 0x10027500
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, BumpBouy::ClassName()) || LegoAnimActor::IsA(p_name);
}
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'
};
#endif // BUMPBOUY_H

View File

@ -0,0 +1,42 @@
#ifndef CARRACE_H
#define CARRACE_H
#include "decomp.h"
#include "legorace.h"
// VTABLE: LEGO1 0x100d5e50
// SIZE 0x154
class CarRace : public LegoRace {
public:
CarRace();
// FUNCTION: LEGO1 0x10016b20
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0528
return "CarRace";
}
// FUNCTION: LEGO1 0x10016b30
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, CarRace::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
undefined4 VTable0x78(undefined4) override; // vtable+0x78
// SYNTHETIC: LEGO1 0x10016c70
// CarRace::`scalar deleting destructor'
private:
undefined m_unk0x144[12]; // 0x144
undefined4 m_unk0x150; // 0x150
};
#endif // CARRACE_H

View File

@ -8,17 +8,20 @@
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
{
// GLOBAL: LEGO1 0x100f009c
// 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);
}
// SYNTHETIC: LEGO1 0x1000f740
// CarRaceState::`scalar deleting destructor'
};
#endif // CARRACESTATE_H

View File

@ -0,0 +1,31 @@
#ifndef DOORS_H
#define DOORS_H
#include "legopathactor.h"
// VTABLE: LEGO1 0x100d4788
// SIZE 0x1f8
class Doors : public LegoPathActor {
public:
// FUNCTION: LEGO1 0x1000e430
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f03e8
return "Doors";
}
// FUNCTION: LEGO1 0x1000e440
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Doors::ClassName()) || LegoPathActor::IsA(p_name);
}
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'
};
#endif // DOORS_H

View File

@ -0,0 +1,43 @@
#ifndef DUNEBUGGY_H
#define DUNEBUGGY_H
#include "decomp.h"
#include "islepathactor.h"
// VTABLE: LEGO1 0x100d8f98
// SIZE 0x16c
class DuneBuggy : public IslePathActor {
public:
DuneBuggy();
// FUNCTION: LEGO1 0x10067c30
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0410
return "DuneBuggy";
}
// FUNCTION: LEGO1 0x10067c40
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, DuneBuggy::ClassName()) || IslePathActor::IsA(p_name);
}
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'
private:
// TODO: Double check DuneBuggy field types
undefined4 m_unk0x160;
MxFloat m_unk0x164;
undefined4 m_unk0x168;
};
#endif // DUNEBUGGY_H

View File

@ -0,0 +1,49 @@
#ifndef ELEVATORBOTTOM_H
#define ELEVATORBOTTOM_H
#include "decomp.h"
#include "legoworld.h"
class LegoControlManagerEvent;
// VTABLE: LEGO1 0x100d5f20
// SIZE: 0xfc (from inlined ctor at 0x1000a8aa)
class ElevatorBottom : public LegoWorld {
public:
ElevatorBottom();
~ElevatorBottom() override; // vtable+0x00
MxLong Notify(MxParam& p_param) override; // vtable+0x04
// FUNCTION: LEGO1 0x10017f20
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f04ac
return "ElevatorBottom";
}
// FUNCTION: LEGO1 0x10017f30
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, ElevatorBottom::ClassName()) || LegoWorld::IsA(p_name);
}
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50
// FUNCTION: LEGO1 0x10017f10
MxBool VTable0x5c() override { return TRUE; } // vtable+0x5c
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
MxLong HandleClick(LegoControlManagerEvent& p_param);
};
#endif // ELEVATORBOTTOM_H

View File

@ -0,0 +1,23 @@
#ifndef EXTRA_H
#define EXTRA_H
// Items related to the Extra string of key-value pairs found in MxOb
struct Extra {
enum ActionType {
e_none = 0,
e_opendisk,
e_openram,
e_close,
e_start,
e_stop,
e_run,
e_exit,
e_enable,
e_disable,
e_notify,
e_unknown,
};
};
#endif // EXTRA_H

View File

@ -0,0 +1,56 @@
#ifndef GASSTATION_H
#define GASSTATION_H
#include "decomp.h"
#include "legoworld.h"
#include "radio.h"
// VTABLE: LEGO1 0x100d4650
// SIZE 0x128
// Radio variable at 0x46, in constructor
class GasStation : public LegoWorld {
public:
GasStation();
~GasStation() override; // vtable+0x00
MxLong Notify(MxParam& p_param) override; // vtable+0x04
MxResult Tickle() override; // vtable+0x08
// FUNCTION: LEGO1 0x10004780
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0168
return "GasStation";
}
// FUNCTION: LEGO1 0x10004790
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, GasStation::ClassName()) || LegoWorld::IsA(p_name);
}
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 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
};
#endif // GASSTATION_H

View File

@ -8,17 +8,20 @@
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
{
// GLOBAL: LEGO1 0x100f0348
// 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);
}
// SYNTHETIC: LEGO1 0x1000f890
// GasStationEntity::`scalar deleting destructor'
};
#endif // GASSTATIONENTITY_H

View File

@ -0,0 +1,40 @@
#ifndef GASSTATIONSTATE_H
#define GASSTATIONSTATE_H
#include "legostate.h"
// VTABLE: LEGO1 0x100d46e0
// SIZE 0x24
class GasStationState : public LegoState {
public:
GasStationState();
// FUNCTION: LEGO1 0x100061d0
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0174
return "GasStationState";
}
// FUNCTION: LEGO1 0x100061e0
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, GasStationState::ClassName()) || LegoState::IsA(p_name);
}
MxResult VTable0x1c(LegoFile* p_legoFile) override; // vtable+0x1c
// SYNTHETIC: LEGO1 0x10006290
// GasStationState::`scalar deleting destructor'
private:
undefined4 m_unk0x08[3]; // 0x08
undefined4 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

@ -0,0 +1,141 @@
#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; }
~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

@ -0,0 +1,63 @@
#ifndef HELICOPTER_H
#define HELICOPTER_H
#include "helicopterstate.h"
#include "islepathactor.h"
#include "realtime/matrix.h"
// SIZE 0x34
class HelicopterSubclass {
public:
inline HelicopterSubclass() : m_unk0x30(0) {}
MxResult FUN_100040a0(Vector4& p_v, float p_f);
private:
Mx4DPointFloat m_unk0x00; // 0x00
Mx4DPointFloat m_unk0x18; // 0x18
undefined4 m_unk0x30; // 0x30
};
// VTABLE: LEGO1 0x100d40f8
// SIZE 0x230
class Helicopter : public IslePathActor {
public:
Helicopter();
~Helicopter() override; // vtable+0x00
// FUNCTION: LEGO1 0x10003070
inline const char* ClassName() const override // vtable+0x0c
{
// STRING: LEGO1 0x100f0130
return "Helicopter";
}
// FUNCTION: LEGO1 0x10003080
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, Helicopter::ClassName()) || IslePathActor::IsA(p_name);
}
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'
protected:
MxMatrix m_unk0x160; // 0x160
MxMatrix m_unk0x1a8; // 0x1a8
float m_unk0x1f0; // 0x1f0
HelicopterSubclass m_unk0x1f4; // 0x1f4
HelicopterState* m_state; // 0x228
MxAtomId m_script; // 0x22c
private:
void GetState();
};
#endif // HELICOPTER_H

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