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

This commit is contained in:
Misha 2024-01-20 14:59:03 -05:00
commit dc87da71e7
No known key found for this signature in database
GPG Key ID: 8441D12AEF33FED8
389 changed files with 8892 additions and 3400 deletions

View File

@ -4,6 +4,7 @@ on: [push, pull_request]
jobs:
decomplint-isle:
name: 'ISLE annotations'
runs-on: ubuntu-latest
steps:
@ -18,6 +19,7 @@ jobs:
python3 tools/decomplint/decomplint.py ISLE --module ISLE --warnfail
decomplint-lego1:
name: 'LEGO1 annotations'
runs-on: ubuntu-latest
steps:

View File

@ -3,7 +3,53 @@ 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}', setup-msys2: true }
steps:
- name: Set up MSYS2
if: matrix.toolchain.setup-msys2
uses: msys2/setup-msys2@v2
with:
msystem: mingw32
install: >-
mingw-w64-i686-cc
mingw-w64-i686-cmake
mingw-w64-i686-ninja
- 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@v3
- name: Build
run: |
cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -GNinja -Werror=dev
cmake --build build
build:
name: 'MSVC 4.20'
runs-on: windows-latest
steps:
@ -28,10 +74,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 +88,7 @@ jobs:
build/LEGO1.PDB
compare:
name: 'Compare with master'
needs: build
runs-on: windows-latest
steps:
@ -109,6 +154,7 @@ 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' }}

View File

@ -4,6 +4,7 @@ on: [push, pull_request]
jobs:
clang-format:
name: 'C++'
runs-on: ubuntu-latest
steps:
@ -19,6 +20,7 @@ jobs:
-i
python-format:
name: 'Python'
runs-on: ubuntu-latest
steps:

View File

@ -4,6 +4,7 @@ on: [push, pull_request]
jobs:
ncc:
name: 'C++'
runs-on: ubuntu-latest
steps:

View File

@ -1,9 +1,10 @@
name: Unit Tests
name: Test
on: [push, pull_request]
jobs:
pytest-win:
name: 'Python Windows'
runs-on: windows-latest
steps:
@ -20,6 +21,7 @@ jobs:
pytest tools/isledecomp
pytest-ubuntu:
name: 'Python Linux'
runs-on: ubuntu-latest
steps:

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

@ -0,0 +1,851 @@
.486
.387
option dotname
.model flat, c
assume fs:nothing
public DecodeFLCFrame
; This is so reccmp can detect the end of DecodeFLCFrame
public EndOfSection
.text SEGMENT BYTE PUBLIC 'CODE'
?_25162 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
?_25164 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 ?_25168 ; 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
?_25168 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
?_25173 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 ?_25168 ; 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
?_25176 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 ?_25168 ; 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
?_25180 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 ?_25194 ; 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 ?_25220 ; 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 ?_25202 ; 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 ?_25213 ; 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 ?_25227 ; 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 ?_25203 ; 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 ?_25231 ; 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 _ ........
?_25194 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 ?_25195 ; 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
?_25195 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 ?_25199 ; 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
?_25199 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
?_25202 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 ?_25195 ; 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
?_25203 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
?_25213 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 ?_25173 ; 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 ?_25164 ; 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
?_25220 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 ?_25162 ; 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 ?_25164 ; 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 ?_25176 ; 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
?_25227 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 ?_25176 ; 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 ?_25162 ; 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
?_25231 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 ?_25164 ; 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 ?_25180 ; 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

61
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;
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

@ -2,8 +2,24 @@ cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
project(isle CXX)
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()
message(STATUS "MSVC for decompilation: ${MSVC_FOR_DECOMP}")
option(ISLE_BUILD_APP "Build ISLE.EXE application" ON)
option(ISLE_USE_SMARTHEAP "Build with SmartHeap" ${MSVC})
option(ISLE_USE_SMARTHEAP "Build with SmartHeap" ${MSVC_FOR_DECOMP})
option(ISLE_USE_DX5 "Build with internal DirectX 5 SDK" ON)
add_library(lego1 SHARED
@ -42,7 +58,9 @@ add_library(lego1 SHARED
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/legoentity.cpp
@ -81,7 +99,7 @@ add_library(lego1 SHARED
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/motorcycle.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
@ -123,8 +141,11 @@ add_library(lego1 SHARED
LEGO1/lego/sources/3dmanager/legoview1.cpp
LEGO1/lego/sources/3dmanager/tglsurface.cpp
LEGO1/lego/sources/roi/legoroi.cpp
LEGO1/main.cpp
LEGO1/mxdirectx/mxdirect3d.cpp
LEGO1/mxdirectx/mxdirectdraw.cpp
LEGO1/mxgeometry/mxgeometry3d.cpp
LEGO1/mxgeometry/mxmatrix.cpp
LEGO1/omni/src/action/mxdsaction.cpp
LEGO1/omni/src/action/mxdsanim.cpp
LEGO1/omni/src/action/mxdsevent.cpp
@ -161,11 +182,9 @@ add_library(lego1 SHARED
LEGO1/omni/src/common/mxutil.cpp
LEGO1/omni/src/common/mxvariable.cpp
LEGO1/omni/src/common/mxvariabletable.cpp
LEGO1/omni/src/control/mxcontrolpresenter.cpp
LEGO1/omni/src/entity/mxentity.cpp
LEGO1/omni/src/event/mxeventmanager.cpp
LEGO1/omni/src/event/mxeventpresenter.cpp
LEGO1/omni/src/main/mxmain.cpp
LEGO1/omni/src/main/mxomni.cpp
LEGO1/omni/src/main/mxomnicreateflags.cpp
LEGO1/omni/src/main/mxomnicreateparam.cpp
@ -259,9 +278,10 @@ if (ISLE_USE_DX5)
endif()
target_link_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/3rdparty/smacker")
target_link_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/3rdparty/flic")
# Link libraries
target_link_libraries(lego1 PRIVATE ddraw dsound dinput dxguid winmm d3drm smack)
target_link_libraries(lego1 PRIVATE ddraw dsound dinput dxguid winmm d3drm smack flic)
# Make sure filenames are ALL CAPS
set_property(TARGET lego1 PROPERTY OUTPUT_NAME LEGO1)
@ -275,6 +295,8 @@ if (ISLE_BUILD_APP)
ISLE/define.cpp
)
target_compile_definitions(isle PRIVATE ISLE_APP)
target_include_directories(isle PRIVATE "${CMAKE_SOURCE_DIR}/util")
target_include_directories(isle PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1")
target_include_directories(isle PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1/omni/include")
@ -300,6 +322,29 @@ if (ISLE_BUILD_APP)
endif()
if (MSVC)
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "15")
target_compile_definitions(lego1 PRIVATE _CRT_SECURE_NO_WARNINGS)
if (ISLE_BUILD_APP)
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")
target_compile_options(lego1 PRIVATE "-Zc:__cplusplus")
if (ISLE_BUILD_APP)
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.

View File

@ -614,8 +614,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) {
@ -792,11 +792,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;
}

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

@ -10,20 +10,26 @@ MxS32 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 0x10101f58
const char* g_strOBJECT = "OBJECT";
// 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

@ -24,10 +24,24 @@ class Act1State : public LegoState {
inline void SetUnknown18(MxU32 p_unk0x18) { m_unk0x18 = p_unk0x18; }
inline MxU32 GetUnknown18() { return m_unk0x18; }
inline void SetUnknown21(MxS16 p_unk0x21) { m_unk0x21 = p_unk0x21; }
inline MxS16 GetUnknown21() { return m_unk0x21; }
void FUN_10034d00();
// SYNTHETIC: LEGO1 0x10033960
// Act1State::`scalar deleting destructor'
protected:
undefined m_unk0x8[0x10]; // 0x8
MxU32 m_unk0x18; // 0x18
undefined2 m_unk0x1c; // 0x1c
undefined m_unk0x1e; // 0x1e
undefined m_unk0x1f; // 0x1f
undefined m_unk0x20; // 0x20
MxBool m_unk0x21; // 0x21
undefined m_unk0x22; // 0x22
// TODO
};
#endif // ACT1STATE_H

View File

@ -25,6 +25,9 @@ class Act2Brick : public LegoPathActor {
{
return !strcmp(p_name, Act2Brick::ClassName()) || LegoEntity::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x1007a450
// Act2Brick::`scalar deleting destructor'
};
#endif // ACT2BRICK_H

View File

@ -21,6 +21,9 @@ class Act2PoliceStation : public LegoEntity {
{
return !strcmp(p_name, Act2PoliceStation::ClassName()) || LegoEntity::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x1000f610
// Act2PoliceStation::`scalar deleting destructor'
};
#endif // ACT2POLICESTATION_H

View File

@ -27,6 +27,9 @@ class Act3 : public LegoWorld {
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'
protected:
undefined m_unk0xf8[0x4114]; // 0xf8
MxEntity* m_unk0x420c; // 0x420c

View File

@ -12,6 +12,9 @@ class Act3Shark : public LegoAnimActor {
// STRING: LEGO1 0x100f03a0
return "Act3Shark";
}
// SYNTHETIC: LEGO1 0x10043020
// Act3Shark::`scalar deleting destructor'
};
#endif // ACT3SHARK_H

View File

@ -24,6 +24,9 @@ class Act3State : public LegoState {
virtual MxBool VTable0x14() override;
// SYNTHETIC: LEGO1 0x1000e3c0
// Act3State::`scalar deleting destructor'
private:
// FIXME: May be part of LegoState? Uncertain...
MxU32 m_unk0x08;

View File

@ -22,6 +22,9 @@ class Ambulance : public IslePathActor {
return !strcmp(p_name, Ambulance::ClassName()) || IslePathActor::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x10036130
// Ambulance::`scalar deleting destructor'
private:
// TODO: Ambulance fields
undefined m_unk0x160[4];

View File

@ -40,6 +40,9 @@ class AmbulanceMissionState : public LegoState {
}
}
// SYNTHETIC: LEGO1 0x100376c0
// AmbulanceMissionState::`scalar deleting destructor'
protected:
undefined4 m_unk0x8; // 0x08
undefined4 m_unk0xc; // 0x0c

View File

@ -26,6 +26,9 @@ class AnimState : public LegoState {
virtual MxBool SetFlag() override; // vtable+0x18
virtual MxResult VTable0x1c(LegoFileStream* p_legoFileStream) override; // vtable+0x1C
// SYNTHETIC: LEGO1 0x10065130
// AnimState::`scalar deleting destructor'
private:
undefined4 m_unk0x8;
undefined4 m_unk0xc;

View File

@ -7,8 +7,6 @@
// 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
{
@ -21,6 +19,9 @@ class BeachHouseEntity : public BuildingEntity {
{
return !strcmp(p_name, BeachHouseEntity::ClassName()) || BuildingEntity::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x1000f970
// BeachHouseEntity::`scalar deleting destructor'
};
#endif // BEACHHOUSEENTITY_H

View File

@ -23,6 +23,9 @@ class Bike : public IslePathActor {
return !strcmp(p_name, Bike::ClassName()) || IslePathActor::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x10076880
// Bike::`scalar deleting destructor'
private:
// TODO: Bike fields
undefined m_unk0x160[4];

View File

@ -10,6 +10,8 @@ class BuildingEntity : public LegoEntity {
BuildingEntity();
virtual ~BuildingEntity() override; // vtable+0x0
virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4
// FUNCTION: LEGO1 0x10014f20
inline virtual const char* ClassName() const override // vtable+0x0c
{
@ -22,6 +24,9 @@ class BuildingEntity : public LegoEntity {
{
return !strcmp(p_name, BuildingEntity::ClassName()) || LegoEntity::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x10015010
// BuildingEntity::`scalar deleting destructor'
};
#endif // BUILDINGENTITY_H

View File

@ -19,6 +19,9 @@ class BumpBouy : public LegoAnimActor {
{
return !strcmp(p_name, BumpBouy::ClassName()) || LegoAnimActor::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x10027490
// BumpBouy::`scalar deleting destructor'
};
#endif // BUMPBOUY_H

View File

@ -23,6 +23,9 @@ class CarRace : public LegoRace {
return !strcmp(p_name, CarRace::ClassName()) || LegoRace::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x10016c70
// CarRace::`scalar deleting destructor'
private:
undefined m_unk0x144[12]; // 0x144
undefined4 m_unk0x150; // 0x150

View File

@ -19,6 +19,9 @@ class CarRaceState : public RaceState {
{
return !strcmp(p_name, CarRaceState::ClassName()) || RaceState::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x1000f740
// CarRaceState::`scalar deleting destructor'
};
#endif // CARRACESTATE_H

View File

@ -19,6 +19,9 @@ class Doors : public LegoPathActor {
{
return !strcmp(p_name, Doors::ClassName()) || LegoPathActor::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x1000e580
// Doors::`scalar deleting destructor'
};
#endif // DOORS_H

View File

@ -23,6 +23,9 @@ class DuneBuggy : public IslePathActor {
return !strcmp(p_name, DuneBuggy::ClassName()) || IslePathActor::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x10067dc0
// DuneBuggy::`scalar deleting destructor'
private:
// TODO: Double check DuneBuggy field types
undefined4 m_unk0x160;

View File

@ -1,9 +1,11 @@
#ifndef ELEVATORBOTTOM_H
#define ELEVATORBOTTOM_H
#include "decomp.h"
#include "legoworld.h"
// VTABLE: LEGO1 0x100d5f20
// SIZE: 0xfc (from inlined ctor at 0x1000a8aa)
class ElevatorBottom : public LegoWorld {
public:
ElevatorBottom();
@ -23,6 +25,23 @@ class ElevatorBottom : public LegoWorld {
{
return !strcmp(p_name, ElevatorBottom::ClassName()) || LegoWorld::IsA(p_name);
}
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
virtual void VTable0x50() override; // vtable+0x50
// FUNCTION: LEGO1 0x10017f10
virtual MxBool VTable0x5c() override { return TRUE; } // vtable+0x5c
virtual MxBool VTable0x64() override; // vtable+0x64
virtual void VTable0x68(MxBool p_add) override; // vtable+0x68
// SYNTHETIC: LEGO1 0x10018040
// ElevatorBottom::`scalar deleting destructor'
private:
undefined4 m_unk0xf8; // 0xf8
MxLong HandleNotification17(MxParam& p_param);
};
#endif // ELEVATORBOTTOM_H

View File

@ -3,19 +3,21 @@
// 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,
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

@ -1,7 +1,9 @@
#ifndef GASSTATION_H
#define GASSTATION_H
#include "decomp.h"
#include "legoworld.h"
#include "radio.h"
// VTABLE: LEGO1 0x100d4650
// SIZE 0x128
@ -26,6 +28,23 @@ class GasStation : public LegoWorld {
{
return !strcmp(p_name, GasStation::ClassName()) || LegoWorld::IsA(p_name);
}
// 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

@ -19,6 +19,9 @@ class GasStationEntity : public BuildingEntity {
{
return !strcmp(p_name, GasStationEntity::ClassName()) || BuildingEntity::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x1000f890
// GasStationEntity::`scalar deleting destructor'
};
#endif // GASSTATIONENTITY_H

View File

@ -22,6 +22,9 @@ class GasStationState : public LegoState {
return !strcmp(p_name, GasStationState::ClassName()) || LegoState::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x10006290
// GasStationState::`scalar deleting destructor'
private:
undefined4 m_unk0x08[3];
undefined4 m_unk0x14;

View File

@ -1,69 +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:
const char* m_name;
LPDIRECTDRAWSURFACE m_surface;
LPDIRECTDRAWPALETTE m_palette;
LPDIRECT3DRMTEXTURE2 m_texture;
MxU8* m_data;
char* m_name; // 0x00
LPDIRECTDRAWSURFACE m_surface; // 0x04
LPDIRECTDRAWPALETTE m_palette; // 0x08
LPDIRECT3DRMTEXTURE2 m_texture; // 0x0c
MxU8* m_data; // 0x10
~GifData();
};
struct GifMapEntry {
public:
GifMapEntry* m_right;
GifMapEntry* m_parent;
GifMapEntry* m_left;
const char* m_key;
GifData* m_value;
struct GifMapComparator {
bool operator()(const char* const& p_key0, const char* const& p_key1) const { return strcmp(p_key0, p_key1) > 0; }
};
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;
// 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:
// STUB: LEGO1 0x1005a310
virtual ~GifManagerBase() {} // vtable+00
// 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);
inline GifData* Get(const char* p_name) { return m_unk0x8.Get(p_name); }
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:
undefined4 m_unk0x0;
undefined4 m_unk0x4;
GifMap m_unk0x8;
MxBool m_ownership; // 0x04
GifMap m_map; // 0x08
};
// VTABLE: LEGO1 0x100d86fc
// SIZE 0x24
class GifManager : public GifManagerBase {
public:
// STUB: LEGO1 0x1005a580
virtual ~GifManager() {} // vtable+00
GifManager() { m_ownership = TRUE; };
virtual ~GifManager() override;
// SYNTHETIC: LEGO1 0x1005a580
// GifManager::`scalar deleting destructor'
void FUN_10099cc0(GifData* p_data);
protected:
undefined m_unk0x14[0x1c];
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

@ -9,12 +9,12 @@
class HelicopterSubclass {
public:
inline HelicopterSubclass() : m_unk0x30(0) {}
MxResult FUN_100040a0(Vector4Impl& p_v, float p_f);
MxResult FUN_100040a0(Vector4& p_v, float p_f);
private:
Vector4Data m_unk0x0; // 0x0
Vector4Data m_unk0x18; // 0x18
undefined4 m_unk0x30; // 0x30
Mx4DPointFloat m_unk0x0; // 0x0
Mx4DPointFloat m_unk0x18; // 0x18
undefined4 m_unk0x30; // 0x30
};
// VTABLE: LEGO1 0x100d40f8
@ -37,9 +37,9 @@ class Helicopter : public IslePathActor {
return !strcmp(p_name, Helicopter::ClassName()) || IslePathActor::IsA(p_name);
}
virtual MxResult Create(MxDSObject& p_dsObject) override; // vtable+0x18
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void VTable0x70(float p_float) override; // vtable+0x70
void VTable0x74(Matrix4Impl& p_transform) override; // vtable+0x74
void VTable0x74(Matrix4& p_transform) override; // vtable+0x74
virtual MxU32 VTable0xcc() override; // vtable+0xcc
virtual MxU32 VTable0xd4(MxType17NotificationParam& p_param) override; // vtable+0xd4
virtual MxU32 VTable0xd8(MxType18NotificationParam& p_param) override; // vtable+0xd8
@ -49,8 +49,8 @@ class Helicopter : public IslePathActor {
// Helicopter::`scalar deleting destructor'
protected:
Matrix4Data m_unk0x160; // 0x160
Matrix4Data m_unk0x1a8; // 0x1a8
MxMatrix m_unk0x160; // 0x160
MxMatrix m_unk0x1a8; // 0x1a8
float m_unk0x1f0; // 0x1f0
HelicopterSubclass m_unk0x1f4; // 0x1f4
HelicopterState* m_state; // 0x228

View File

@ -24,6 +24,9 @@ class HelicopterState : public LegoState {
inline void SetUnknown8(MxU32 p_unk0x8) { m_unk0x8 = p_unk0x8; }
inline MxU32 GetUnkown8() { return m_unk0x8; }
// SYNTHETIC: LEGO1 0x1000e190
// HelicopterState::`scalar deleting destructor'
protected:
MxU32 m_unk0x8; // 0x8
};

View File

@ -24,6 +24,9 @@ class HistoryBook : public LegoWorld {
{
return !strcmp(p_name, HistoryBook::ClassName()) || LegoWorld::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x100824b0
// HistoryBook::`scalar deleting destructor'
};
#endif // HISTORYBOOK_H

View File

@ -26,6 +26,9 @@ class Hospital : public LegoWorld {
return !strcmp(p_name, Hospital::ClassName()) || LegoWorld::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x100747d0
// Hospital::`scalar deleting destructor'
private:
undefined2 m_unk0xf8; // 0xf8
undefined4 m_unk0xfc; // 0xfc

View File

@ -19,6 +19,9 @@ class HospitalEntity : public BuildingEntity {
{
return !strcmp(p_name, HospitalEntity::ClassName()) || BuildingEntity::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x1000f820
// HospitalEntity::`scalar deleting destructor'
};
#endif // HOSPITALENTITY_H

View File

@ -23,6 +23,9 @@ class HospitalState : public LegoState {
return !strcmp(p_name, HospitalState::ClassName()) || LegoState::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x100764c0
// HospitalState::`scalar deleting destructor'
private:
undefined m_unk0x8[4]; // 0x8
undefined2 m_unk0xc; // 0xc

View File

@ -2,11 +2,111 @@
#define INFOCENTER_H
#include "legoworld.h"
#include "radio.h"
class InfocenterState;
// SIZE 0x18
struct InfocenterUnkDataEntry {
// FUNCTION: LEGO1 0x1006ec80
InfocenterUnkDataEntry() {}
undefined m_pad[0x18];
};
// VTABLE: LEGO1 0x100d9338
// SIZE 0x1d8
class Infocenter : public LegoWorld {
public:
enum Cutscene {
e_noIntro = -1,
e_legoMovie,
e_mindscapeMovie,
e_introMovie,
e_outroMovie,
e_badEndMovie,
e_goodEndMovie
};
enum InfomainScript {
c_noInfomain = -1,
c_welcomeDialogue = 500,
c_goodJobDialogue = 501,
c_clickOnInfomanDialogue = 502,
c_tickleInfomanDialogue = 503,
c_letsGetStartedDialogue = 504,
c_clickOnObjectsGuidanceDialogue = 505,
c_arrowNavigationGuidanceDialogue = 506,
c_elevatorGuidanceDialogue = 507,
c_radioGuidanceDialogue = 508,
c_exitGuidanceDialogue1 = 509,
c_exitGuidanceDialogue2 = 510,
c_goOutsideGuidanceDialogue = 511,
c_experimentGuidanceDialogue = 512,
c_returnBackGuidanceDialogue1 = 513,
c_returnBackGuidanceDialogue2 = 514,
c_bricksterWarningDialogue = 515,
c_newGameGuidanceDialogue = 516,
c_returnBackGuidanceDialogue3 = 517,
c_reenterInfoCenterDialogue1 = 518,
c_reenterInfoCenterDialogue2 = 519,
c_reenterInfoCenterDialogue3 = 520,
c_reenterInfoCenterDialogue4 = 521,
c_exitConfirmationDialogue = 522,
c_saveGameOptionsDialogueUnused = 523,
c_exitGameDialogue = 524,
c_bricksterEscapedDialogue1 = 525,
c_bricksterEscapedDialogue2 = 526,
c_bricksterEscapedDialogue3 = 527,
c_bricksterEscapedDialogue4 = 528,
c_bricksterEscapedDialogue5 = 529,
c_bricksterEscapedDialogue6 = 530,
c_bricksterEscapedDialogue7 = 531,
c_infomanHiccup = 532,
c_infomanWalkOffScreenLeftUnused = 533,
c_infomanSneeze = 534,
c_infomanWalkOffScreenRightUnused = 535,
c_infomanLaughs = 536,
c_infomanLooksBehindAtScreenUnused = 537,
c_infomanReturnsFromScreenUnused = 538,
c_goodEndingDialogue = 539,
c_badEndingDialogue = 540,
c_pepperCharacterSelect = 541,
c_mamaCharacterSelect = 542,
c_papaCharacterSelect = 543,
c_nickCharacterSelect = 544,
c_lauraCharacterSelect = 545,
c_creditsDialogue = 551,
c_noCDDialogueUnused1 = 552,
c_noCDDialogueUnused2 = 553,
c_leaveInfoCenterDialogue1 = 562,
c_leaveInfoCenterDialogue2 = 563,
c_leaveInfoCenterDialogue3 = 564,
c_leaveInfoCenterDialogue4 = 565,
c_registerToContinueDialogue = 573,
c_bricksterDialogue = 574,
c_bricksterLaughs = 575,
};
enum SndAmimScript {
c_bookWig = 400
};
Infocenter();
virtual ~Infocenter() override;
@ -26,11 +126,54 @@ class Infocenter : public LegoWorld {
return !strcmp(p_name, Infocenter::ClassName()) || LegoWorld::IsA(p_name);
}
virtual MxResult Create(MxDSObject& p_dsObject) override; // vtable+0x18
virtual void Stop() override; // vtable+0x50
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
virtual void VTable0x50() override; // vtable+0x50
virtual MxBool VTable0x5c() override; // vtable+0x5c
virtual MxBool VTable0x64() override; // vtable+0x64
virtual void VTable0x68(MxBool p_add) override; // vtable+0x68
// SYNTHETIC: LEGO1 0x1006ec60
// Infocenter::`scalar deleting destructor'
private:
void InitializeBitmaps();
MxLong HandleKeyPress(MxS8 p_key);
MxU8 HandleMouseMove(MxS32 p_x, MxS32 p_y);
MxU8 HandleButtonUp(MxS32 p_x, MxS32 p_y);
MxU8 HandleNotification17(MxParam&);
MxLong HandleEndAction(MxParam& p_param);
MxLong HandleNotification0(MxParam&);
void FUN_10070dc0(MxBool);
void FUN_10070e90();
void PlayCutscene(Cutscene p_entityId, MxBool p_scale);
void StopCutscene();
void StartCredits();
void StopCredits();
void PlayAction(InfomainScript p_objectId);
void StopCurrentAction();
void PlayBookAnimation();
void StopBookAnimation();
InfomainScript m_currentInfomainScript; // 0xf8
MxS16 m_unk0xfc; // 0xfc
InfocenterState* m_infocenterState; // 0x100
undefined4 m_unk0x104; // 0x104
Cutscene m_currentCutscene; // 0x108
Radio m_radio; // 0x10c
undefined4 m_unk0x11c; // 0x11c
InfocenterUnkDataEntry m_entries[7]; // 0x120
MxS16 m_unk0x1c8; // 0x1c8
undefined4 m_unk0x1cc; // 0x1cc
MxS16 m_infoManDialogueTimer; // 0x1d0
MxS16 m_bookAnimationTimer; // 0x1d2
MxU16 m_unk0x1d4; // 0x1d4
MxS16 m_unk0x1d6; // 0x1d6
};
#endif // INFOCENTER_H

View File

@ -24,6 +24,21 @@ class InfocenterDoor : public LegoWorld {
{
return !strcmp(p_name, InfocenterDoor::ClassName()) || LegoWorld::IsA(p_name);
}
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
virtual void VTable0x50() override; // vtable+0x50
// FUNCTION: LEGO1 0x100377a0
virtual MxBool VTable0x5c() override { return TRUE; } // vtable+0x5c
virtual MxBool VTable0x64() override; // vtable+0x64
virtual void VTable0x68(MxBool p_add) override; // vtable+0x68
// SYNTHETIC: LEGO1 0x100378d0
// InfocenterDoor::`scalar deleting destructor'
private:
MxS32 m_unk0xf8; // 0xf8
};
#endif // INFOCENTERDOOR_H

View File

@ -19,6 +19,9 @@ class InfoCenterEntity : public BuildingEntity {
{
return !strcmp(p_name, InfoCenterEntity::ClassName()) || BuildingEntity::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x1000f7b0
// InfoCenterEntity::`scalar deleting destructor'
};
#endif // INFOCENTERENTITY_H

View File

@ -3,6 +3,7 @@
#include "decomp.h"
#include "legostate.h"
#include "mxstillpresenter.h"
// VTABLE: LEGO1 0x100d93a8
// SIZE 0x94
@ -24,7 +25,17 @@ class InfocenterState : public LegoState {
return !strcmp(p_name, InfocenterState::ClassName()) || LegoState::IsA(p_name);
}
inline MxU32 GetInfocenterBufferElement(MxS32 p_index) { return m_buffer[p_index]; }
// FUNCTION: LEGO1 0x10071830
virtual MxBool VTable0x14() override { return FALSE; } // vtable+0x14
inline MxS16 GetInfocenterBufferSize() { return sizeof(m_buffer) / sizeof(m_buffer[0]); }
inline MxStillPresenter* GetInfocenterBufferElement(MxS32 p_index) { return m_buffer[p_index]; }
inline MxU32 GetUnknown0x74() { return m_unk0x74; }
inline void SetUnknown0x74(MxU32 p_unk0x74) { m_unk0x74 = p_unk0x74; }
// SYNTHETIC: LEGO1 0x10071900
// InfocenterState::`scalar deleting destructor'
private:
// Members should be renamed with their offsets before use
@ -55,8 +66,9 @@ class InfocenterState : public LegoState {
undefined4 unk13;
*/
undefined m_pad[0x70];
MxU32 m_buffer[7]; // 0x78
undefined m_pad[0x6c];
MxU32 m_unk0x74; // 0x74
MxStillPresenter* m_buffer[7]; // 0x78
};
#endif // INFOCENTERSTATE_H

View File

@ -12,7 +12,7 @@ class JukeBoxEntity;
class Helicopter;
class Bike;
class DuneBuggy;
class Motorcycle;
class Motocycle;
class SkateBoard;
class RaceCar;
class Jetski;
@ -40,8 +40,8 @@ class Isle : public LegoWorld {
return !strcmp(p_name, Isle::ClassName()) || LegoWorld::IsA(p_name);
}
virtual MxResult Create(MxDSObject& p_dsObject) override; // vtable+0x18
virtual void Stop() override; // vtable+50
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
virtual void VTable0x50() override; // vtable+50
virtual void VTable0x58(MxCore* p_object) override; // vtable+58
// FUNCTION: LEGO1 0x10030900
virtual MxBool VTable0x5c() override { return TRUE; } // vtable+5c
@ -57,6 +57,10 @@ class Isle : public LegoWorld {
MxLong HandleType17Notification(MxParam& p_param);
MxLong HandleType19Notification(MxParam& p_param);
MxLong HandleTransitionEnd();
void FUN_10032620();
// SYNTHETIC: LEGO1 0x10030a30
// Isle::`scalar deleting destructor'
protected:
Act1State* m_act1state; // 0xf8
@ -68,7 +72,7 @@ class Isle : public LegoWorld {
Helicopter* m_helicopter; // 0x110
Bike* m_bike; // 0x114
DuneBuggy* m_dunebuggy; // 0x118
Motorcycle* m_motorcycle; // 0x11c
Motocycle* m_motocycle; // 0x11c
SkateBoard* m_skateboard; // 0x120
RaceCar* m_racecar; // 0x124
Jetski* m_jetski; // 0x128

View File

@ -20,4 +20,10 @@ class IsleActor : public LegoActor {
}
};
// SYNTHETIC: LEGO1 0x1000e940
// IsleActor::~IsleActor
// SYNTHETIC: LEGO1 0x1000e990
// IsleActor::`scalar deleting destructor'
#endif // ISLEACTOR_H

View File

@ -13,6 +13,8 @@
class IslePathActor : public LegoPathActor {
public:
IslePathActor();
// FUNCTION: LEGO1 0x10002e10
inline virtual ~IslePathActor() override { IslePathActor::Destroy(TRUE); } // vtable+0x0
// FUNCTION: LEGO1 0x10002ea0
@ -28,7 +30,8 @@ class IslePathActor : public LegoPathActor {
return !strcmp(p_name, IslePathActor::ClassName()) || LegoPathActor::IsA(p_name);
}
virtual MxResult Create(MxDSObject& p_dsObject) override; // vtable+0x18
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
virtual void Destroy(MxBool p_fromDestructor) override; // vtable+0x1c
// FUNCTION: LEGO1 0x10002e70
virtual MxU32 VTable0xcc() { return 0; } // vtable+0xcc
// FUNCTION: LEGO1 0x10002df0

View File

@ -23,6 +23,9 @@ class Jetski : public IslePathActor {
return !strcmp(p_name, Jetski::ClassName()) || IslePathActor::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x1007e5c0
// Jetski::`scalar deleting destructor'
private:
// TODO: Jetski fields
undefined m_unk0x160[4];

View File

@ -19,6 +19,9 @@ class JetskiRaceState : public RaceState {
{
return !strcmp(p_name, JetskiRaceState::ClassName()) || RaceState::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x1000f680
// JetskiRaceState::`scalar deleting destructor'
};
#endif // JETSKIRACESTATE_H

View File

@ -23,6 +23,92 @@ class JukeBox : public LegoWorld {
return !strcmp(p_name, JukeBox::ClassName()) || LegoWorld::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x1005d810
// JukeBox::`scalar deleting destructor'
enum JukeBoxScript {
e_mamaPapaBrickolini,
e_jailUnused,
e_act2Cave,
e_bricksterChase,
e_brickHunt,
e_residentialArea,
e_beachBlvd,
e_cave,
e_centralRoads,
e_jail,
e_hospital,
e_informationCenter,
e_policeStation,
e_park,
e_centralNorthRoad,
e_garageArea,
e_raceTrack,
e_beach,
e_quietChirping,
e_jetskiRace,
e_act3Pursuit,
e_legoRadioReminder1,
e_legoRadioJingle1,
e_legoRadioJingle2,
e_legoRadioJingle3,
e_legoRadioJingle4,
e_legoRadioReminder2,
e_legoRadioRacingAd,
e_legoRadioNews1,
e_legoRadioNews2,
e_legoRadioPizzaAd1,
e_legoRadioBricksterPSA,
e_legoRadioSports1,
e_legoRadioIntermission1,
e_legoRadioIntermission2,
e_legoRadioPizzaAd2,
e_legoRadioWeatherReport,
e_legoRadioSports2,
e_legoRadioPizzaAd3,
e_legoRadioIntermission3,
e_legoRadioSuperStoreAd,
e_legoRadioLuckyYou,
e_legoRadioJazzInterlude,
e_legoRadioPianoInterlude1,
e_legoRadioPoliceStation,
e_legoRadioPianoInterlude2,
e_legoRadioCredits,
e_helicopterBuild,
e_padding1,
e_duneBuggyBuild,
e_padding2,
e_jetskiBuild,
e_padding3,
e_raceCarBuild,
e_padding4,
e_jukeBoxMamaPapaBrickolini,
e_jukeBoxBrickByBrick,
e_jukeBoxTheBrickster,
e_jukeBoxBuildMeABridgeToday,
e_jukeBoxBaroqueInBrick,
e_jukeBoxMantaRay,
e_observationDeck,
e_elevator,
e_pizzaMission,
};
private:
undefined m_unk0xf8[4]; // 0xf8
undefined4 m_unk0xfc; // 0xfc

View File

@ -22,6 +22,9 @@ class JukeBoxEntity : public LegoEntity {
{
return !strcmp(p_name, JukeBoxEntity::ClassName()) || LegoEntity::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x10085db0
// JukeBoxEntity::`scalar deleting destructor'
};
#endif // JUKEBOXENTITY_H

View File

@ -21,6 +21,9 @@ class JukeBoxState : public LegoState {
}
virtual MxBool VTable0x14() override; // vtable+0x14
// SYNTHETIC: LEGO1 0x1000f3d0
// JukeBoxState::`scalar deleting destructor'
};
#endif // JUKEBOXSTATE_H

View File

@ -19,6 +19,9 @@ class Lego3DWavePresenter : public MxWavePresenter {
{
return !strcmp(p_name, Lego3DWavePresenter::ClassName()) || MxWavePresenter::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x1000f4b0
// Lego3DWavePresenter::`scalar deleting destructor'
};
#endif // LEGO3DWAVEPRESENTER_H

View File

@ -6,6 +6,9 @@
// VTABLE: LEGO1 0x100d82e0
// SIZE 0x1154
class LegoAct2 : public LegoWorld {};
class LegoAct2 : public LegoWorld {
// SYNTHETIC: LEGO1 0x1004fe20
// LegoAct2::`scalar deleting destructor'
};
#endif // LEGOACT2_H

View File

@ -19,6 +19,9 @@ class LegoAct2State : public LegoState {
{
return !strcmp(p_name, LegoAct2State::ClassName()) || LegoState::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x1000e040
// LegoAct2State::`scalar deleting destructor'
};
#endif // LEGOACT2STATE_H

View File

@ -9,7 +9,7 @@
// SIZE 0x68
class LegoActionControlPresenter : public MxMediaPresenter {
public:
inline LegoActionControlPresenter() { m_unk0x50 = ExtraActionType_none; }
inline LegoActionControlPresenter() { m_unk0x50 = Extra::ActionType::e_none; }
virtual ~LegoActionControlPresenter() override { Destroy(TRUE); }; // vtable+0x00
// FUNCTION: LEGO1 0x1000d0e0
@ -32,9 +32,9 @@ class LegoActionControlPresenter : public MxMediaPresenter {
virtual void Destroy(MxBool p_fromDestructor); // vtable+0x5c
private:
ExtraActionType m_unk0x50; // 0x50
MxString m_unk0x54; // 0x54
undefined4 m_unk0x64; // 0x64
Extra::ActionType m_unk0x50; // 0x50
MxString m_unk0x54; // 0x54
undefined4 m_unk0x64; // 0x64
};
// SYNTHETIC: LEGO1 0x1000d1d0

View File

@ -9,6 +9,7 @@
class LegoActor : public LegoEntity {
public:
LegoActor();
virtual ~LegoActor() override;
// FUNCTION: LEGO1 0x1002d210
inline virtual const char* ClassName() const override // vtable+0x0c
@ -43,4 +44,7 @@ class LegoActor : public LegoEntity {
MxU8 m_unk0x74; // 0x74
};
// SYNTHETIC: LEGO1 0x1002d300
// LegoActor::`scalar deleting destructor'
#endif // LEGOACTOR_H

View File

@ -7,6 +7,8 @@
// SIZE 0x50
class LegoActorPresenter : public LegoEntityPresenter {
public:
virtual ~LegoActorPresenter() override{};
// FUNCTION: LEGO1 0x1000cb10
inline virtual const char* ClassName() const override // vtable+0x0c
{
@ -19,6 +21,13 @@ class LegoActorPresenter : public LegoEntityPresenter {
{
return !strcmp(p_name, LegoActorPresenter::ClassName()) || LegoEntityPresenter::IsA(p_name);
}
virtual void ReadyTickle() override; // vtable+0x18
virtual void StartingTickle() override; // vtable+0x1c
virtual void ParseExtra() override; // vtable+0x30
};
// SYNTHETIC: LEGO1 0x1000cc30
// LegoActorPresenter::`scalar deleting destructor'
#endif // LEGOACTORPRESENTER_H

View File

@ -1,6 +1,7 @@
#ifndef LEGOANIMATIONMANAGER_H
#define LEGOANIMATIONMANAGER_H
#include "decomp.h"
#include "mxcore.h"
// VTABLE: LEGO1 0x100d8c18
@ -26,11 +27,16 @@ class LegoAnimationManager : public MxCore {
return !strcmp(p_name, ClassName()) || MxCore::IsA(p_name);
}
void FUN_1005ef10();
void FUN_1005f6d0(MxBool);
void FUN_1005f720(undefined4);
void FUN_10064670(MxBool);
__declspec(dllexport) static void configureLegoAnimationManager(MxS32 p_legoAnimationManagerConfig);
// SYNTHETIC: LEGO1 0x1005ed10
// LegoAnimationManager::`scalar deleting destructor'
private:
void Init();
};

View File

@ -21,6 +21,9 @@ class LegoAnimMMPresenter : public MxCompositePresenter {
{
return !strcmp(p_name, LegoAnimMMPresenter::ClassName()) || MxCompositePresenter::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x1004aa40
// LegoAnimMMPresenter::`scalar deleting destructor'
};
#endif // LEGOANIMMMPRESENTER_H

View File

@ -1,12 +1,19 @@
#ifndef LEGOANIMPRESENTER_H
#define LEGOANIMPRESENTER_H
#include "mxgeometry/mxgeometry3d.h"
#include "mxvideopresenter.h"
class LegoWorld;
class LegoMemoryStream;
class LegoAnimClass;
// VTABLE: LEGO1 0x100d90c8
// SIZE 0xc0
class LegoAnimPresenter : public MxVideoPresenter {
public:
LegoAnimPresenter();
virtual ~LegoAnimPresenter() override;
// FUNCTION: LEGO1 0x10068530
inline virtual const char* ClassName() const override // vtable+0x0c
@ -21,8 +28,84 @@ class LegoAnimPresenter : public MxVideoPresenter {
return !strcmp(p_name, LegoAnimPresenter::ClassName()) || MxVideoPresenter::IsA(p_name);
}
virtual void ReadyTickle() override; // vtable+0x18
virtual void StartingTickle() override; // vtable+0x1c
virtual void StreamingTickle() override; // vtable+0x20
virtual void ParseExtra() override; // vtable+0x30
virtual void Destroy() override; // vtable+0x38
virtual MxResult StartAction(MxStreamController* p_controller, MxDSAction* p_action) override; // vtable+0x3c
virtual void EndAction() override; // vtable+0x40
virtual void PutFrame() override; // vtable+0x6c
virtual MxResult VTable0x88(MxStreamChunk* p_chunk); // vtable+0x88
// 6 more virtual functions here
private:
void Init();
void Destroy(MxBool p_fromDestructor);
LegoAnimClass* m_unk0x64; // 0x64
undefined4 m_unk0x68; // 0x68
undefined4 m_unk0x6c; // 0x6c
undefined4 m_unk0x70; // 0x70
undefined4 m_unk0x74; // 0x74
undefined4 m_unk0x78; // 0x78
undefined4 m_unk0x7c; // 0x7c
LegoWorld* m_currentWorld; // 0x80
MxAtomId m_animAtom; // 0x84
undefined4 m_unk0x88; // 0x88
undefined4 m_unk0x8c; // 0x8c
undefined4 m_unk0x90; // 0x90
undefined m_unk0x94; // 0x94
undefined m_unk0x95; // 0x95
undefined m_unk0x96; // 0x96
undefined m_unk0x97; // 0x97
undefined4 m_unk0x98; // 0x98
MxS16 m_unk0x9c; // 0x9c
undefined4 m_unk0xa0; // 0xa0
undefined4 m_unk0xa4; // 0xa4
Mx3DPointFloat m_unk0xa8; // 0xa8
undefined4 m_unk0xbc; // 0xbc
};
// SYNTHETIC: LEGO1 0x10068650
// LegoAnimPresenter::`scalar deleting destructor'
// VTABLE: LEGO1 0x100db768
// SIZE 0x08
class LegoAnimClassBase {
public:
LegoAnimClassBase();
virtual ~LegoAnimClassBase();
virtual void VTable0x4(); // vtable+0x04
virtual void VTable0x8(); // vtable+0x08
virtual void VTable0xc(); // vtable+0x0c
undefined4 m_unk0x4; // 0x04
};
// SYNTHETIC: LEGO1 0x10099de0
// LegoAnimClassBase::`scalar deleting destructor'
// VTABLE: LEGO1 0x100db8d8
// SIZE 0x18
class LegoAnimClass : public LegoAnimClassBase {
public:
LegoAnimClass();
virtual ~LegoAnimClass() override;
virtual void VTable0x8() override; // vtable+0x08
virtual void VTable0xc() override; // vtable+0x0c
virtual MxResult VTable0x10(LegoMemoryStream* p_stream, MxS32); // vtable+0x10
MxLong m_unk0x8; // 0x08
undefined4 m_unk0xc; // 0x0c
undefined4 m_unk0x10; // 0x10
undefined4 m_unk0x14; // 0x14
};
// SYNTHETIC: LEGO1 0x100a0ba0
// LegoAnimClass::`scalar deleting destructor'
#endif // LEGOANIMPRESENTER_H

View File

@ -19,6 +19,11 @@ class LegoBuildingManager : public MxCore {
__declspec(dllexport) static void configureLegoBuildingManager(MxS32);
void FUN_1002fa00();
// SYNTHETIC: LEGO1 0x1002f940
// LegoBuildingManager::`scalar deleting destructor'
private:
void Init();
};

View File

@ -23,6 +23,9 @@ class LegoCacheSound : public MxCore {
return !strcmp(p_name, LegoCacheSound::ClassName()) || MxCore::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x10006610
// LegoCacheSound::`scalar deleting destructor'
private:
void Init();
};

View File

@ -3,9 +3,9 @@
#include "legopointofviewcontroller.h"
#include "mxcore.h"
#include "mxgeometry/mxgeometry3d.h"
#include "mxgeometry/mxmatrix.h"
#include "mxpoint32.h"
#include "realtime/matrix.h"
#include "realtime/vector.h"
// VTABLE: LEGO1 0x100d57b0
// SIZE 0xc8
@ -29,22 +29,22 @@ class LegoCameraController : public LegoPointOfViewController {
return !strcmp(p_name, ClassName()) || MxCore::IsA(p_name);
}
virtual void OnLButtonDown(MxPoint32 p_point) override; // vtable+0x30
virtual void OnLButtonUp(MxPoint32 p_point) override; // vtable+0x34
virtual void OnRButtonDown(MxPoint32 p_point) override; // vtable+0x38
virtual void OnRButtonUp(MxPoint32 p_point) override; // vtable+0x3c
virtual void OnMouseMove(MxU8 p_modifier, MxPoint32 p_point) override; // vtable+0x40
virtual MxResult Create(); // vtable+0x44
virtual void OnLButtonDown(MxPoint32 p_point); // vtable+0x30
virtual void OnLButtonUp(MxPoint32 p_point); // vtable+0x34
virtual void OnRButtonDown(MxPoint32 p_point); // vtable+0x38
virtual void OnRButtonUp(MxPoint32 p_point); // vtable+0x3c
virtual void OnMouseMove(MxU8 p_modifier, MxPoint32 p_point); // vtable+0x40
virtual MxResult Create(); // vtable+0x44
void SetWorldTransform(Vector3Impl& p_at, Vector3Impl& p_dir, Vector3Impl& p_up);
void FUN_100123e0(Matrix4Data& p_transform, MxU32);
Vector3Data& FUN_10012740();
Vector3Data& FUN_100127f0();
Vector3Data& FUN_100128a0();
void SetWorldTransform(const Vector3& p_at, const Vector3& p_dir, const Vector3& p_up);
void FUN_100123e0(const MxMatrix& p_transform, MxU32);
Mx3DPointFloat GetWorldUp();
Mx3DPointFloat GetWorldLocation();
Mx3DPointFloat GetWorldDirection();
private:
Matrix4Data m_matrix1; // 0x38
Matrix4Data m_matrix2; // 0x80
MxMatrix m_matrix1; // 0x38
MxMatrix m_matrix2; // 0x80
};
// SYNTHETIC: LEGO1 0x10011f50

View File

@ -25,6 +25,9 @@ class LegoCarBuild : public LegoWorld {
{
return !strcmp(p_name, LegoCarBuild::ClassName()) || LegoWorld::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x10022a60
// LegoCarBuild::`scalar deleting destructor'
};
#endif // LEGOCARBUILD_H

View File

@ -22,6 +22,9 @@ class LegoCarBuildAnimPresenter : public LegoAnimPresenter {
{
return !strcmp(p_name, LegoCarBuildAnimPresenter::ClassName()) || LegoAnimPresenter::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x10078660
// LegoCarBuildAnimPresenter::`scalar deleting destructor'
};
#endif // LEGOCARBUILDANIMPRESENTER_H

View File

@ -18,6 +18,9 @@ class LegoCarRaceActor : public LegoRaceActor {
{
return !strcmp(p_name, LegoCarRaceActor::ClassName()) || LegoRaceActor::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x10081610
// LegoCarRaceActor::`scalar deleting destructor'
};
#endif // LEGOCARRACEACTOR_H

View File

@ -2,6 +2,7 @@
#define LEGOCONTROLMANAGER_H
#include "mxcore.h"
#include "mxpresenterlist.h"
// VTABLE: LEGO1 0x100d6a80
class LegoControlManager : public MxCore {
@ -24,8 +25,13 @@ class LegoControlManager : public MxCore {
return !strcmp(p_name, LegoControlManager::ClassName()) || MxCore::IsA(p_name);
}
void FUN_10028df0(MxPresenterList* p_presenterList);
void Register(MxCore* p_listener);
void Unregister(MxCore* p_listener);
void FUN_100293c0(undefined4, const char*, undefined2);
// SYNTHETIC: LEGO1 0x10028d40
// LegoControlManager::`scalar deleting destructor'
};
#endif // LEGOCONTROLMANAGER_H

View File

@ -3,7 +3,7 @@
#include "decomp.h"
#include "extra.h"
#include "mxdsobject.h"
#include "mxdsaction.h"
#include "mxentity.h"
#include "realtime/vector.h"
#include "roi/legoroi.h"
@ -12,10 +12,19 @@
// SIZE 0x68 (probably)
class LegoEntity : public MxEntity {
public:
enum {
c_bit1 = 0x01
};
// Inlined at 0x100853f7
inline LegoEntity() { Init(); }
__declspec(dllexport) virtual ~LegoEntity() override; // vtable+0x0
#ifdef ISLE_APP
__declspec(dllexport) virtual ~LegoEntity() override;
#else
// FUNCTION: LEGO1 0x1000c290
__declspec(dllexport) virtual ~LegoEntity() override { Destroy(TRUE); }
#endif
virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4
@ -32,12 +41,13 @@ class LegoEntity : public MxEntity {
return !strcmp(p_name, LegoEntity::ClassName()) || MxEntity::IsA(p_name);
}
virtual MxResult Create(MxDSObject& p_dsObject); // vtable+0x18
virtual void Destroy(MxBool p_fromDestructor); // vtable+0x1c
virtual void ParseAction(char*); // vtable+0x20
virtual void SetROI(LegoROI* p_roi, MxBool p_bool1, MxBool p_bool2); // vtable+0x24
virtual void SetWorldTransform(Vector3Impl& p_loc, Vector3Impl& p_dir, Vector3Impl& p_up); // vtable+0x28
virtual void ResetWorldTransform(MxBool p_inVehicle); // vtable+0x2c
virtual MxResult Create(MxDSAction& p_dsAction); // vtable+0x18
virtual void Destroy(MxBool p_fromDestructor); // vtable+0x1c
virtual void ParseAction(char*); // vtable+0x20
virtual void SetROI(LegoROI* p_roi, MxBool p_bool1, MxBool p_bool2); // vtable+0x24
virtual void SetWorldTransform(const Vector3& p_loc, const Vector3& p_dir,
const Vector3& p_up); // vtable+0x28
virtual void ResetWorldTransform(MxBool p_inVehicle); // vtable+0x2c
// FUNCTION: LEGO1 0x10001090
virtual void SetWorldSpeed(MxFloat p_worldSpeed) { m_worldSpeed = p_worldSpeed; } // vtable+0x30
virtual void VTable0x34(); // vtable+0x34
@ -49,26 +59,31 @@ class LegoEntity : public MxEntity {
virtual void VTable0x4c(); // vtable+0x4c
void FUN_10010c30();
void SetLocation(Vector3Data& p_location, Vector3Data& p_direction, Vector3Data& p_up, MxBool);
void SetLocation(Mx3DPointFloat& p_location, Mx3DPointFloat& p_direction, Mx3DPointFloat& p_up, MxBool);
inline LegoROI* GetROI() { return m_roi; }
protected:
void Init();
void SetWorld();
undefined m_unk0x10;
undefined m_unk0x11;
Vector3Data m_worldLocation; // 0x14
Vector3Data m_worldDirection; // 0x28
Vector3Data m_worldUp; // 0x3c
MxFloat m_worldSpeed; // 0x50
LegoROI* m_roi; // 0x54
MxBool m_cameraFlag; // 0x58
undefined m_unk0x59;
undefined m_unk0x10; // 0x10
MxU8 m_flags; // 0x11
Mx3DPointFloat m_worldLocation; // 0x14
Mx3DPointFloat m_worldDirection; // 0x28
Mx3DPointFloat m_worldUp; // 0x3c
MxFloat m_worldSpeed; // 0x50
LegoROI* m_roi; // 0x54
MxBool m_cameraFlag; // 0x58
undefined m_unk0x59; // 0x59
// For tokens from the extra string that look like this:
// "Action:openram;\lego\scripts\Race\CarRaceR;0"
ExtraActionType m_actionType; // 0x5c
char* m_actionArgString; // 0x60
MxS32 m_actionArgNumber; // 0x64
Extra::ActionType m_actionType; // 0x5c
char* m_actionArgString; // 0x60
MxS32 m_actionArgNumber; // 0x64
};
// SYNTHETIC: LEGO1 0x1000c3b0
// LegoEntity::`scalar deleting destructor'
#endif // LEGOENTITY_H

View File

@ -0,0 +1,92 @@
#ifndef LEGOENTITYLIST_H
#define LEGOENTITYLIST_H
#include "mxlist.h"
#include "mxtypes.h"
class LegoEntity;
// VTABLE: LEGO1 0x100d6410
// class MxCollection<LegoEntity *>
// VTABLE: LEGO1 0x100d6428
// class MxList<LegoEntity *>
// VTABLE: LEGO1 0x100d6440
// class MxPtrList<LegoEntity>
// VTABLE: LEGO1 0x100d6458
// SIZE 0x18
class LegoEntityList : public MxPtrList<LegoEntity> {
public:
LegoEntityList(MxBool p_ownership = FALSE) : MxPtrList<LegoEntity>(p_ownership) {}
// FUNCTION: LEGO1 0x1001e2d0
virtual MxS8 Compare(LegoEntity* p_a, LegoEntity* p_b) override
{
return p_a == p_b ? 0 : p_a < p_b ? -1 : 1;
}; // vtable+0x14
};
// VTABLE: LEGO1 0x100d64e8
// class MxListCursor<LegoEntity *>
// VTABLE: LEGO1 0x100d64b8
// class MxPtrListCursor<LegoEntity>
// VTABLE: LEGO1 0x100d64d0
// SIZE 0x10
class LegoEntityListCursor : public MxPtrListCursor<LegoEntity> {
public:
LegoEntityListCursor(LegoEntityList* p_list) : MxPtrListCursor<LegoEntity>(p_list){};
};
// TEMPLATE: LEGO1 0x1001e2f0
// MxCollection<LegoEntity *>::Compare
// TEMPLATE: LEGO1 0x1001e300
// MxCollection<LegoEntity *>::~MxCollection<LegoEntity *>
// TEMPLATE: LEGO1 0x1001e350
// MxCollection<LegoEntity *>::Destroy
// TEMPLATE: LEGO1 0x1001e360
// MxList<LegoEntity *>::~MxList<LegoEntity *>
// TEMPLATE: LEGO1 0x1001e3f0
// MxPtrList<LegoEntity>::Destroy
// SYNTHETIC: LEGO1 0x1001e400
// LegoEntityList::`scalar deleting destructor'
// TEMPLATE: LEGO1 0x1001e470
// MxPtrList<LegoEntity>::~MxPtrList<LegoEntity>
// SYNTHETIC: LEGO1 0x1001e4c0
// MxCollection<LegoEntity *>::`scalar deleting destructor'
// SYNTHETIC: LEGO1 0x1001e530
// MxList<LegoEntity *>::`scalar deleting destructor'
// SYNTHETIC: LEGO1 0x1001e5e0
// MxPtrList<LegoEntity>::`scalar deleting destructor'
// SYNTHETIC: LEGO1 0x1001f110
// LegoEntityListCursor::`scalar deleting destructor'
// FUNCTION: LEGO1 0x1001f180
// MxPtrListCursor<LegoEntity>::~MxPtrListCursor<LegoEntity>
// SYNTHETIC: LEGO1 0x1001f1d0
// MxListCursor<LegoEntity *>::`scalar deleting destructor'
// SYNTHETIC: LEGO1 0x1001f240
// MxPtrListCursor<LegoEntity>::`scalar deleting destructor'
// FUNCTION: LEGO1 0x1001f2b0
// MxListCursor<LegoEntity *>::~MxListCursor<LegoEntity *>
// FUNCTION: LEGO1 0x1001edc6
// LegoEntityListCursor::~LegoEntityListCursor
#endif // LEGOENTITYLIST_H

View File

@ -26,20 +26,23 @@ class LegoEntityPresenter : public MxCompositePresenter {
}
virtual void ReadyTickle() override; // vtable+0x18
virtual void RepeatingTickle(); // vtable+0x24
virtual void ParseExtra(); // vtable+0x30
virtual void RepeatingTickle() override; // vtable+0x24
virtual void ParseExtra() override; // vtable+0x30
virtual void Destroy() override; // vtable+0x38
virtual MxResult StartAction(MxStreamController* p_controller, MxDSAction* p_action) override; // vtable+0x3c
virtual void Init(); // vtable+0x68
virtual undefined4 SetBackend(LegoEntity* p_unk0x4c); // vtable+0x6c
virtual undefined4 SetEntity(LegoEntity* p_entity); // vtable+0x6c
void SetBackendLocation(Vector3Data& p_location, Vector3Data& p_direction, Vector3Data& p_up);
void SetEntityLocation(Mx3DPointFloat& p_location, Mx3DPointFloat& p_direction, Mx3DPointFloat& p_up);
// SYNTHETIC: LEGO1 0x100535a0
// LegoEntityPresenter::`scalar deleting destructor'
private:
void Destroy(MxBool p_fromDestructor);
protected:
LegoEntity* m_objectBackend; // 0x4c
LegoEntity* m_entity; // 0x4c
};
#endif // LEGOENTITYPRESENTER_H

View File

@ -7,9 +7,10 @@
#include <stdlib.h>
// VTABLE: LEGO1 0x100d6aa0
// SIZE 0x20
class LegoEventNotificationParam : public MxNotificationParam {
public:
inline LegoEventNotificationParam() : MxNotificationParam(PARAM_NONE, NULL) {}
inline LegoEventNotificationParam() : MxNotificationParam(c_notificationType0, NULL) {}
inline LegoEventNotificationParam(
NotificationId p_type,
MxCore* p_sender,
@ -22,8 +23,9 @@ class LegoEventNotificationParam : public MxNotificationParam {
{
}
virtual ~LegoEventNotificationParam() override {} // vtable+0x0 (scalar deleting destructor)
inline MxU8 GetKey() const { return m_key; }
inline MxS32 GetX() const { return m_x; }
inline MxS32 GetY() const { return m_y; }
protected:
MxU8 m_modifier; // 0x0c
@ -33,4 +35,10 @@ class LegoEventNotificationParam : public MxNotificationParam {
MxU32 m_unk0x1c; // 0x1c
};
// SYNTHETIC: LEGO1 0x10028770
// LegoEventNotificationParam::`scalar deleting destructor'
// SYNTHETIC: LEGO1 0x100287e0
// LegoEventNotificationParam::~LegoEventNotificationParam
#endif // LEGOEVENTNOTIFICATIONPARAM_H

View File

@ -17,6 +17,9 @@ class LegoFlcTexturePresenter : public MxFlcPresenter {
return "LegoFlcTexturePresenter";
}
// SYNTHETIC: LEGO1 0x1005df00
// LegoFlcTexturePresenter::`scalar deleting destructor'
private:
void Init();

View File

@ -43,6 +43,7 @@ class LegoGameState {
void SetSomeEnumState(undefined4 p_state);
void FUN_1003ceb0();
void FUN_10039780(MxU8);
struct ScoreStruct {
void WriteScoreHistory();
@ -72,7 +73,7 @@ class LegoGameState {
undefined m_unk0x41a[8]; // 0x41a - might be part of the structure at 0xa6
MxBool m_isDirty; // 0x420
undefined4 m_unk0x424; // 0x424
undefined4 m_unk0x428; // 0x428
undefined4 m_prevArea; // 0x428
undefined4 m_unk0x42c; // 0x42c
};

View File

@ -1,6 +1,7 @@
#ifndef LEGOHIDEANIMPRESENTER_H
#define LEGOHIDEANIMPRESENTER_H
#include "decomp.h"
#include "legoloopinganimpresenter.h"
// VTABLE: LEGO1 0x100d9278
@ -8,6 +9,7 @@
class LegoHideAnimPresenter : public LegoLoopingAnimPresenter {
public:
LegoHideAnimPresenter();
virtual ~LegoHideAnimPresenter() override;
// FUNCTION: LEGO1 0x1006d880
inline const char* ClassName() const override // vtable+0xc
@ -22,8 +24,16 @@ class LegoHideAnimPresenter : public LegoLoopingAnimPresenter {
return !strcmp(p_name, ClassName()) || LegoAnimPresenter::IsA(p_name);
}
virtual void Destroy() override; // vtable+0x38
private:
void Init();
void Destroy(MxBool p_fromDestructor);
undefined4* m_unk0xc0; // 0xc0
};
// SYNTHETIC: LEGO1 0x1006d9d0
// LegoHideAnimPresenter::`scalar deleting destructor'
#endif // LEGOHIDEANIMPRESENTER_H

View File

@ -46,13 +46,23 @@ class LegoInputManager : public MxPresenter {
MxResult GetJoystickState(MxU32* p_joystickX, MxU32* p_joystickY, DWORD* p_buttonsState, MxU32* p_povPosition);
void SetTimer();
void KillTimer();
void EnableInputProcessing();
void SetCamera(LegoCameraController* p_camera);
void ClearCamera();
void SetWorld(LegoWorld* p_world);
void ClearWorld();
inline void SetUnknown88(MxBool p_unk0x88) { m_unk0x88 = p_unk0x88; }
inline void SetUnknown335(MxBool p_unk0x335) { m_unk0x335 = p_unk0x335; }
inline void SetUnknown336(MxBool p_unk0x336) { m_unk0x336 = p_unk0x336; }
inline void SetUseJoystick(MxBool p_useJoystick) { m_useJoystick = p_useJoystick; }
inline void SetJoystickIndex(MxS32 p_joystickIndex) { m_joystickIndex = p_joystickIndex; }
inline void DisableInputProcessing()
{
m_unk0x88 = TRUE;
m_unk0x336 = FALSE;
}
inline LegoControlManager* GetControlManager() { return m_controlManager; }
inline LegoWorld* GetWorld() { return m_world; }
@ -61,7 +71,10 @@ class LegoInputManager : public MxPresenter {
void ProcessEvents();
MxBool ProcessOneEvent(LegoEventNotificationParam& p_param);
// private:
// SYNTHETIC: LEGO1 0x1005b8d0
// LegoInputManager::`scalar deleting destructor'
private:
MxCriticalSection m_criticalSection;
MxList<undefined4>* m_unk0x5c; // list or hash table
LegoCameraController* m_camera;
@ -94,6 +107,9 @@ class LegoInputManager : public MxPresenter {
// TEMPLATE: LEGO1 0x1005bb80
// MxCollection<LegoEventNotificationParam>::Compare
// TEMPLATE: LEGO1 0x1005bbe0
// MxCollection<LegoEventNotificationParam>::~MxCollection<LegoEventNotificationParam>
// TEMPLATE: LEGO1 0x1005bc30
// MxCollection<LegoEventNotificationParam>::Destroy
@ -109,6 +125,9 @@ class LegoInputManager : public MxPresenter {
// SYNTHETIC: LEGO1 0x1005beb0
// LegoEventQueue::`scalar deleting destructor'
// TEMPLATE: LEGO1 0x1005bf20
// MxQueue<LegoEventNotificationParam>::~MxQueue<LegoEventNotificationParam>
// SYNTHETIC: LEGO1 0x1005bf70
// MxQueue<LegoEventNotificationParam>::`scalar deleting destructor'

View File

@ -18,6 +18,9 @@ class LegoJetski : public LegoJetskiRaceActor {
{
return !strcmp(p_name, LegoJetski::ClassName()) || LegoJetskiRaceActor::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x10013e20
// LegoJetski::`scalar deleting destructor'
};
#endif // LEGOJETSKI_H

View File

@ -18,6 +18,9 @@ class LegoJetskiRaceActor : public LegoCarRaceActor {
{
return !strcmp(p_name, LegoJetskiRaceActor::ClassName()) || LegoCarRaceActor::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x10081d40
// LegoJetskiRaceActor::`scalar deleting destructor'
};
#endif // LEGOJETSKIRACEACTOR_H

View File

@ -21,6 +21,9 @@ class LegoLocomotionAnimPresenter : public LegoLoopingAnimPresenter {
return !strcmp(p_name, ClassName()) || LegoLoopingAnimPresenter::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x1006cfe0
// LegoLocomotionAnimPresenter::`scalar deleting destructor'
private:
void Init();
};

View File

@ -21,4 +21,10 @@ class LegoLoopingAnimPresenter : public LegoAnimPresenter {
}
};
// SYNTHETIC: LEGO1 0x1006d000
// LegoLoopingAnimPresenter::~LegoLoopingAnimPresenter
// SYNTHETIC: LEGO1 0x1000f440
// LegoLoopingAnimPresenter::`scalar deleting destructor'
#endif // LEGOLOOPINGANIMPRESENTER_H

View File

@ -7,7 +7,30 @@
// SIZE 0x94 (from 0x1000a163)
class LegoMeterPresenter : public MxStillPresenter {
public:
LegoMeterPresenter();
virtual ~LegoMeterPresenter() override;
// MxStillPresenter's `::ClassName` and `::IsA` are used.
virtual void StreamingTickle() override; // vtable+0x20
virtual void RepeatingTickle() override; // vtable+0x24
virtual void ParseExtra() override; // vtable+0x30
private:
void FUN_10043a50();
MxU8* m_unk0x6c; // 0x6c
MxU16 m_type; // 0x70
MxString m_variable; // 0x74
MxFloat m_unk0x84; // 0x84
MxU16 m_unk0x88; // 0x88
MxU16 m_unk0x8a; // 0x8a
MxU16 m_unk0x8c; // 0x8c
MxU16 m_unk0x8e; // 0x8e
MxU16 m_layout; // 0x90
};
// SYNTHETIC: LEGO1 0x10043760
// LegoMeterPresenter::`scalar deleting destructor'
#endif // LEGOMETERPRESENTER_H

View File

@ -26,8 +26,15 @@ class LegoModelPresenter : public MxVideoPresenter {
virtual void ParseExtra() override; // vtable+0x30
virtual void Destroy() override; // vtable+0x38
// SYNTHETIC: LEGO1 0x1000cdd0
// LegoModelPresenter::`scalar deleting destructor'
protected:
void Destroy(MxBool p_fromDestructor);
private:
undefined4 m_unk0x64; // 0x64
MxBool m_addedToView; // 0x68
};
#endif // LEGOMODELPRESENTER_H

View File

@ -61,6 +61,9 @@ class LegoNavController : public MxCore {
inline void SetTrackDefaultParams(MxBool p_trackDefault) { m_trackDefault = p_trackDefault; }
// SYNTHETIC: LEGO1 0x10054c10
// LegoNavController::`scalar deleting destructor'
private:
int m_hMax;
int m_vMax;

View File

@ -70,7 +70,7 @@
X(RaceCar) \
X(Jetski) \
X(Bike) \
X(Motorcycle) \
X(Motocycle) \
X(Ambulance) \
X(AmbulanceMissionState) \
X(TowTrack) \
@ -108,6 +108,9 @@ class LegoObjectFactory : public MxObjectFactory {
virtual MxCore* Create(const char* p_name) override; // vtable 0x14
virtual void Destroy(MxCore* p_object) override; // vtable 0x18
// SYNTHETIC: LEGO1 0x10009000
// LegoObjectFactory::`scalar deleting destructor'
private:
#define X(V) MxAtomId m_id##V;
FOR_LEGOOBJECTFACTORY_OBJECTS(X)

View File

@ -62,6 +62,12 @@ extern MxAtomId* g_nocdSourceName;
// SIZE 0x140
class LegoOmni : public MxOmni {
public:
enum {
c_disableInput = 0x01,
c_disable3d = 0x02,
c_clearScreen = 0x04
};
__declspec(dllexport) void CreateBackgroundAudio();
__declspec(dllexport) void RemoveWorld(const MxAtomId&, MxLong);
__declspec(dllexport) static int GetCurrPathInfo(LegoPathBoundary**, MxS32&);
@ -99,6 +105,7 @@ class LegoOmni : public MxOmni {
LegoEntity* FindByEntityIdOrAtomId(const MxAtomId& p_atom, MxS32 p_entityid);
void AddWorld(LegoWorld* p_world);
void FUN_1005b4f0(MxBool p_disable, MxU16 p_flags);
LegoVideoManager* GetVideoManager() { return (LegoVideoManager*) m_videoManager; }
LegoSoundManager* GetSoundManager() { return (LegoSoundManager*) m_soundManager; }
@ -114,11 +121,17 @@ class LegoOmni : public MxOmni {
MxBackgroundAudioManager* GetBackgroundAudioManager() { return m_bkgAudioManager; }
MxTransitionManager* GetTransitionManager() { return m_transitionManager; }
MxDSAction& GetCurrentAction() { return m_action; }
LegoUnkSaveDataWriter* GetUnkSaveDataWriter() { return m_saveDataWriter; }
inline void SetNavController(LegoNavController* p_navController) { m_navController = p_navController; }
inline void SetWorld(LegoWorld* p_currentWorld) { m_currentWorld = p_currentWorld; }
inline void SetExit(MxBool p_exit) { m_exit = p_exit; };
inline void CloseMainWindow() { PostMessageA(m_windowHandle, WM_CLOSE, 0, 0); }
// SYNTHETIC: LEGO1 0x10058b30
// LegoOmni::`scalar deleting destructor'
private:
undefined4* m_unk0x68; // 0x68
ViewLODListManager* m_viewLODListManager; // 0x6c
@ -148,7 +161,6 @@ __declspec(dllexport) LegoOmni* Lego();
__declspec(dllexport) LegoEntity* PickEntity(MxLong, MxLong);
__declspec(dllexport) LegoROI* PickROI(MxLong, MxLong);
__declspec(dllexport) LegoSoundManager* SoundManager();
__declspec(dllexport) MxResult Start(MxDSAction*);
__declspec(dllexport) MxTransitionManager* TransitionManager();
__declspec(dllexport) LegoVideoManager* VideoManager();
@ -158,14 +170,18 @@ LegoControlManager* ControlManager();
IslePathActor* GetCurrentVehicle();
LegoPlantManager* PlantManager();
LegoWorld* GetCurrentWorld();
LegoUnkSaveDataWriter* GetUnkSaveDataWriter();
GifManager* GetGifManager();
void FUN_10015820(MxU32, MxU32);
void FUN_10015820(MxBool p_disable, MxU16 p_flags);
void FUN_10015860(const char*, MxU8);
LegoEntity* FindEntityByAtomIdOrEntityId(const MxAtomId& p_atom, MxS32 p_entityid);
MxDSAction& GetCurrentAction();
void PlayMusic(MxU32 p_index);
void SetIsWorldActive(MxBool p_isWorldActive);
void DeleteObjects(MxAtomId* p_id, MxS32 p_first, MxS32 p_last);
void RegisterScripts();
void UnregisterScripts();
void SetCurrentWorld(LegoWorld* p_world);
#endif // LEGOOMNI_H

View File

@ -30,6 +30,9 @@ class LegoPalettePresenter : public MxVideoPresenter {
MxResult ParsePalette(MxStreamChunk* p_chunk);
// SYNTHETIC: LEGO1 0x1007a050
// LegoPalettePresenter::`scalar deleting destructor'
private:
void Init();
void Destroy(MxBool p_fromDestructor);

View File

@ -21,6 +21,9 @@ class LegoPartPresenter : public MxMediaPresenter {
}
__declspec(dllexport) static void configureLegoPartPresenter(MxS32, MxS32);
// SYNTHETIC: LEGO1 0x1000d060
// LegoPartPresenter::`scalar deleting destructor'
};
#endif // LEGOPARTPRESENTER_H

View File

@ -25,10 +25,10 @@ class LegoPathActor : public LegoActor {
return !strcmp(p_name, LegoPathActor::ClassName()) || LegoActor::IsA(p_name);
}
virtual void VTable0x68(); // vtable+0x68
virtual void VTable0x6c(); // vtable+0x6c
virtual void VTable0x70(float p_float); // vtable+0x70
virtual void VTable0x74(Matrix4Impl& p_transform); // vtable+0x74
virtual void VTable0x68(); // vtable+0x68
virtual void VTable0x6c(); // vtable+0x6c
virtual void VTable0x70(float p_float); // vtable+0x70
virtual void VTable0x74(Matrix4& p_transform); // vtable+0x74
// FUNCTION: LEGO1 0x10002d20
virtual void VTable0x78(MxU8 p_unk0xea) { m_unk0xea = p_unk0xea; } // vtable+0x78
// FUNCTION: LEGO1 0x10002d30
@ -66,6 +66,9 @@ class LegoPathActor : public LegoActor {
inline void SetUnknownDC(MxU32 p_unk0xdc) { m_unk0xdc = p_unk0xdc; }
// SYNTHETIC: LEGO1 0x1002d800
// LegoPathActor::`scalar deleting destructor'
protected:
undefined m_unk0x78[0x64]; // 0x78
MxU32 m_unk0xdc; // 0xdc

View File

@ -8,7 +8,7 @@
class LegoPathController : public MxCore {
public:
LegoPathController();
virtual ~LegoPathController() override;
virtual ~LegoPathController() override { Destroy(); };
virtual MxResult Tickle() override; // vtable+08
@ -24,6 +24,12 @@ class LegoPathController : public MxCore {
{
return !strcmp(p_name, LegoPathController::ClassName()) || MxCore::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x10045740
// LegoPathController::`scalar deleting destructor'
virtual void VTable0x14(); // vtable+0x14
virtual void Destroy(); // vtable+0x18
};
#endif // LEGOPATHCONTROLLER_H

View File

@ -19,6 +19,9 @@ class LegoPathControllerList : public MxPtrList<LegoPathController> {
{
return p_a == p_b ? 0 : p_a < p_b ? -1 : 1;
} // vtable+0x14
// SYNTHETIC: LEGO1 0x1001d3d0
// LegoPathControllerList::`scalar deleting destructor'
};
// VTABLE: LEGO1 0x100d6380

View File

@ -8,6 +8,7 @@
class LegoPathPresenter : public MxMediaPresenter {
public:
LegoPathPresenter();
virtual ~LegoPathPresenter() override;
// FUNCTION: LEGO1 0x100449a0
inline const char* ClassName() const override // vtable+0xc
@ -22,11 +23,16 @@ class LegoPathPresenter : public MxMediaPresenter {
return !strcmp(p_name, LegoPathPresenter::ClassName()) || MxMediaPresenter::IsA(p_name);
}
virtual void ReadyTickle() override; // vtable+0x18
virtual void StreamingTickle() override; // vtable+0x20
virtual void RepeatingTickle() override; // vtable+0x24
virtual void ParseExtra() override; // vtable+0x30
virtual MxResult AddToManager() override; // vtable+0x34
virtual void Destroy() override; // vtable+0x38
// SYNTHETIC: LEGO1 0x10044a90
// LegoPathPresenter::`scalar deleting destructor'
private:
void Init();

View File

@ -20,6 +20,9 @@ class LegoPhonemePresenter : public MxFlcPresenter {
return "LegoPhonemePresenter";
}
// SYNTHETIC: LEGO1 0x1004e320
// LegoPhonemePresenter::`scalar deleting destructor'
private:
void Init();
int m_unk0x68;

View File

@ -1,6 +1,7 @@
#ifndef LEGOPLANTMANAGER_H
#define LEGOPLANTMANAGER_H
#include "decomp.h"
#include "mxcore.h"
// VTABLE: LEGO1 0x100d6758
@ -19,6 +20,11 @@ class LegoPlantManager : public MxCore {
return "LegoPlantManager";
}
void FUN_10026360(undefined4 p_world);
// SYNTHETIC: LEGO1 0x100262a0
// LegoPlantManager::`scalar deleting destructor'
private:
void Init();
};

View File

@ -3,6 +3,7 @@
#include "decomp.h"
#include "mxcore.h"
#include "mxpoint32.h"
#include <windows.h>
@ -82,6 +83,7 @@ class LegoPointOfViewController : public LegoMouseController {
virtual void SetEntity(LegoEntity* p_entity); // vtable+0x2c
MxResult Create(Lego3DView* p_lego3DView);
void OnViewSize(int p_width, int p_height);
inline LegoEntity* GetEntity() { return m_entity; }

View File

@ -28,7 +28,7 @@ class LegoRace : public LegoWorld {
return !strcmp(p_name, LegoRace::ClassName()) || LegoWorld::IsA(p_name);
}
virtual MxResult Create(MxDSObject& p_dsObject) override; // vtable+0x18
virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
virtual MxBool VTable0x5c() override; // vtable+0x5c
virtual MxBool VTable0x64() override; // vtable+0x64
virtual void VTable0x68(MxBool p_add) override; // vtable+0x68
@ -38,6 +38,9 @@ class LegoRace : public LegoWorld {
virtual undefined4 VTable0x78(undefined4); // vtable+0x78
virtual void VTable0x7c(undefined4, undefined4); // vtable+0x7c
// SYNTHETIC: LEGO1 0x10015cc0
// LegoRace::`scalar deleting destructor'
private:
undefined4 m_unk0xf8; // 0xf8
undefined4 m_unk0xfc; // 0xfc

View File

@ -18,6 +18,9 @@ class LegoRaceActor : public LegoAnimActor {
{
return !strcmp(p_name, LegoRaceActor::ClassName()) || LegoAnimActor::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x10014ab0
// LegoRaceActor::`scalar deleting destructor'
};
#endif // LEGORACEACTOR_H

View File

@ -20,6 +20,9 @@ class LegoRaceCar : public LegoCarRaceActor {
{
return !strcmp(p_name, LegoCarRaceActor::ClassName()) || LegoCarRaceActor::IsA(p_name);
}
// SYNTHETIC: LEGO1 0x10014230
// LegoRaceCar::`scalar deleting destructor'
};
#endif // LEGOCARRACE_H

View File

@ -14,6 +14,9 @@ class LegoSoundManager : public MxSoundManager {
virtual void Destroy() override; // vtable+18
virtual MxResult Create(MxU32 p_frequencyMS, MxBool p_createThread) override; // vtable+0x30
// SYNTHETIC: LEGO1 0x10029920
// LegoSoundManager::`scalar deleting destructor'
private:
void Init();
void Destroy(MxBool p_fromDestructor);

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