Skip to content

Commit

Permalink
d_a_obj_appear_bridge - weak function order issue
Browse files Browse the repository at this point in the history
  • Loading branch information
robojumper committed Sep 26, 2024
1 parent 0f9ef3d commit 018389d
Show file tree
Hide file tree
Showing 12 changed files with 290 additions and 75 deletions.
3 changes: 3 additions & 0 deletions config/SOUE01/rels/d_a_obj_appear_bridgeNP/splits.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,6 @@ REL/global_destructor_chain.c:
REL/d/a/obj/d_a_obj_appear_bridge.cpp:
.text start:0x000000F0 end:0x000012D8
.ctors start:0x00000000 end:0x00000004
.rodata start:0x00000000 end:0x00000034
.data start:0x00000000 end:0x000002B0
.bss start:0x00000008 end:0x000000D0
129 changes: 65 additions & 64 deletions config/SOUE01/rels/d_a_obj_appear_bridgeNP/symbols.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,71 +3,72 @@ _epilog = .text:0x00000030; // type:function size:0x2C scope:global
_unresolved = .text:0x00000060; // type:function size:0x4 scope:global
__register_global_object = .text:0x00000070; // type:function size:0x1C scope:global
__destroy_global_chain = .text:0x00000090; // type:function size:0x54 scope:global
fn_407_F0 = .text:0x000000F0; // type:function size:0x140
fn_407_230 = .text:0x00000230; // type:function size:0x58
fn_407_290 = .text:0x00000290; // type:function size:0x6C
fn_407_300 = .text:0x00000300; // type:function size:0xA0
fn_407_3A0 = .text:0x000003A0; // type:function size:0xA4
fn_407_450 = .text:0x00000450; // type:function size:0x40
fn_407_490 = .text:0x00000490; // type:function size:0x174
fn_407_610 = .text:0x00000610; // type:function size:0x194
fn_407_7B0 = .text:0x000007B0; // type:function size:0x10
fn_407_7C0 = .text:0x000007C0; // type:function size:0x8
fn_407_7D0 = .text:0x000007D0; // type:function size:0x30
fn_407_800 = .text:0x00000800; // type:function size:0x10
fn_407_810 = .text:0x00000810; // type:function size:0x28
fn_407_840 = .text:0x00000840; // type:function size:0x34
fn_407_880 = .text:0x00000880; // type:function size:0x6C
fn_407_8F0 = .text:0x000008F0; // type:function size:0x7C
fn_407_970 = .text:0x00000970; // type:function size:0x70
fn_407_9E0 = .text:0x000009E0; // type:function size:0xCC
fn_407_AB0 = .text:0x00000AB0; // type:function size:0x4
fn_407_AC0 = .text:0x00000AC0; // type:function size:0x54
fn_407_B20 = .text:0x00000B20; // type:function size:0xF4
fn_407_C20 = .text:0x00000C20; // type:function size:0x4
fn_407_C30 = .text:0x00000C30; // type:function size:0xFC
fn_407_D30 = .text:0x00000D30; // type:function size:0x10
fn_407_D40 = .text:0x00000D40; // type:function size:0x4
fn_407_D50 = .text:0x00000D50; // type:function size:0x4
fn_407_D60 = .text:0x00000D60; // type:function size:0x4
fn_407_D70 = .text:0x00000D70; // type:function size:0x4
fn_407_D80 = .text:0x00000D80; // type:function size:0x4
fn_407_D90 = .text:0x00000D90; // type:function size:0x60
fn_407_DF0 = .text:0x00000DF0; // type:function size:0xC
fn_407_E00 = .text:0x00000E00; // type:function size:0x1C
fn_407_E20 = .text:0x00000E20; // type:function size:0x1C
fn_407_E40 = .text:0x00000E40; // type:function size:0x1C
fn_407_E60 = .text:0x00000E60; // type:function size:0x10
fn_407_E70 = .text:0x00000E70; // type:function size:0x10
fn_407_E80 = .text:0x00000E80; // type:function size:0x10
fn_407_E90 = .text:0x00000E90; // type:function size:0x10
fn_407_EA0 = .text:0x00000EA0; // type:function size:0x10
fn_407_EB0 = .text:0x00000EB0; // type:function size:0x10
fn_407_EC0 = .text:0x00000EC0; // type:function size:0x30
fn_407_EF0 = .text:0x00000EF0; // type:function size:0x30
fn_407_F20 = .text:0x00000F20; // type:function size:0x30
fn_407_F50 = .text:0x00000F50; // type:function size:0x2A0
fn_407_11F0 = .text:0x000011F0; // type:function size:0x58
fn_407_1250 = .text:0x00001250; // type:function size:0x88
dAcOappearBridge_c_classInit__Fv = .text:0x000000F0; // type:function size:0x140
__dt__31sFState_c<18dAcOappearBridge_c>Fv = .text:0x00000230; // type:function size:0x58
__dt__34sFStateFct_c<18dAcOappearBridge_c>Fv = .text:0x00000290; // type:function size:0x6C
__dt__87sStateMgr_c<18dAcOappearBridge_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000300; // type:function size:0xA0
__dt__57sFStateMgr_c<18dAcOappearBridge_c,20sStateMethodUsr_FI_c>Fv = .text:0x000003A0; // type:function size:0xA4
__dt__Q34nw4r3g3d15IScnObjCallbackFv = .text:0x00000450; // type:function size:0x40
createHeap__18dAcOappearBridge_cFv = .text:0x00000490; // type:function size:0x174
create__18dAcOappearBridge_cFv = .text:0x00000610; // type:function size:0x194
changeState__87sStateMgr_c<18dAcOappearBridge_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x000007B0; // type:function size:0x10
doDelete__18dAcOappearBridge_cFv = .text:0x000007C0; // type:function size:0x8
actorExecute__18dAcOappearBridge_cFv = .text:0x000007D0; // type:function size:0x30
executeState__87sStateMgr_c<18dAcOappearBridge_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000800; // type:function size:0x10
draw__18dAcOappearBridge_cFv = .text:0x00000810; // type:function size:0x28
initializeState_Wait__18dAcOappearBridge_cFv = .text:0x00000840; // type:function size:0x34
executeState_Wait__18dAcOappearBridge_cFv = .text:0x00000880; // type:function size:0x6C
finalizeState_Wait__18dAcOappearBridge_cFv = .text:0x000008F0; // type:function size:0x7C
initializeState_Appear__18dAcOappearBridge_cFv = .text:0x00000970; // type:function size:0x70
executeState_Appear__18dAcOappearBridge_cFv = .text:0x000009E0; // type:function size:0xCC
finalizeState_Appear__18dAcOappearBridge_cFv = .text:0x00000AB0; // type:function size:0x4
initializeState_Disappear__18dAcOappearBridge_cFv = .text:0x00000AC0; // type:function size:0x54
executeState_Disappear__18dAcOappearBridge_cFv = .text:0x00000B20; // type:function size:0xF4
finalizeState_Disappear__18dAcOappearBridge_cFv = .text:0x00000C20; // type:function size:0x4
__dt__18dAcOappearBridge_cFv = .text:0x00000C30; // type:function size:0xFC
getStateID__87sStateMgr_c<18dAcOappearBridge_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000D30; // type:function size:0x10
ExecCallback_CALC_0x1C__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x00000D40; // type:function size:0x4
ExecCallback_CALC_0x18__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x00000D50; // type:function size:0x4
ExecCallback_CALC_MAT__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x00000D60; // type:function size:0x4
ExecCallback_CALC_WORLD__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x00000D70; // type:function size:0x4
ExecCallback_CALC_VIEW__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x00000D80; // type:function size:0x4
build__34sFStateFct_c<18dAcOappearBridge_c>FRC12sStateIDIf_c = .text:0x00000D90; // type:function size:0x60
dispose__34sFStateFct_c<18dAcOappearBridge_c>FRP10sStateIf_c = .text:0x00000DF0; // type:function size:0xC
initialize__31sFState_c<18dAcOappearBridge_c>Fv = .text:0x00000E00; // type:function size:0x1C
execute__31sFState_c<18dAcOappearBridge_c>Fv = .text:0x00000E20; // type:function size:0x1C
finalize__31sFState_c<18dAcOappearBridge_c>Fv = .text:0x00000E40; // type:function size:0x1C
initializeState__87sStateMgr_c<18dAcOappearBridge_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000E60; // type:function size:0x10
finalizeState__87sStateMgr_c<18dAcOappearBridge_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000E70; // type:function size:0x10
refreshState__87sStateMgr_c<18dAcOappearBridge_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000E80; // type:function size:0x10
getState__87sStateMgr_c<18dAcOappearBridge_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000E90; // type:function size:0x10
getNewStateID__87sStateMgr_c<18dAcOappearBridge_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000EA0; // type:function size:0x10
getOldStateID__87sStateMgr_c<18dAcOappearBridge_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000EB0; // type:function size:0x10
finalizeState__33sFStateID_c<18dAcOappearBridge_c>CFR18dAcOappearBridge_c = .text:0x00000EC0; // type:function size:0x30
executeState__33sFStateID_c<18dAcOappearBridge_c>CFR18dAcOappearBridge_c = .text:0x00000EF0; // type:function size:0x30
initializeState__33sFStateID_c<18dAcOappearBridge_c>CFR18dAcOappearBridge_c = .text:0x00000F20; // type:function size:0x30
__sinit_\d_a_obj_appear_bridge_cpp = .text:0x00000F50; // type:function size:0x2A0 scope:local
__dt__33sFStateID_c<18dAcOappearBridge_c>Fv = .text:0x000011F0; // type:function size:0x58
isSameName__33sFStateID_c<18dAcOappearBridge_c>CFPCc = .text:0x00001250; // type:function size:0x88
_ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
__destroy_global_chain_reference = .dtors:0x00000000; // type:object size:0x4 scope:global
lbl_407_rodata_0 = .rodata:0x00000000; // type:object size:0x20 data:float
lbl_407_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float
lbl_407_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float
lbl_407_rodata_28 = .rodata:0x00000028; // type:object size:0xC data:float
lbl_407_data_0 = .data:0x00000000; // type:object size:0x48 data:4byte
lbl_407_data_48 = .data:0x00000048; // type:object size:0x20 data:string
lbl_407_data_68 = .data:0x00000068; // type:object size:0x4 data:4byte
lbl_407_data_6C = .data:0x0000006C; // type:object size:0x4 data:4byte
lbl_407_data_70 = .data:0x00000070; // type:object size:0x80
lbl_407_data_F0 = .data:0x000000F0; // type:object size:0x30
lbl_407_data_120 = .data:0x00000120; // type:object size:0x30
lbl_407_data_150 = .data:0x00000150; // type:object size:0x18
lbl_407_data_168 = .data:0x00000168; // type:object size:0x114
lbl_407_data_27C = .data:0x0000027C; // type:object size:0x34
lbl_407_rodata_0 = .rodata:0x00000000; // type:object size:0x20 scope:local data:float
lbl_407_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float
lbl_407_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float
lbl_407_rodata_28 = .rodata:0x00000028; // type:object size:0xC scope:local data:float
g_profile_OBJ_APPEAR_BRIDGE = .data:0x00000000; // type:object size:0x10 data:4byte
lbl_407_data_48 = .data:0x00000048; // type:object size:0x20 scope:local data:string
FLAGS_1 = .data:0x00000068; // type:object size:0x4 data:4byte
FLAGS_2 = .data:0x0000006C; // type:object size:0x4 data:4byte
__vt__18dAcOappearBridge_c = .data:0x00000070; // type:object size:0x80
__vt__57sFStateMgr_c<18dAcOappearBridge_c,20sStateMethodUsr_FI_c> = .data:0x000000F0; // type:object size:0x30
__vt__87sStateMgr_c<18dAcOappearBridge_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x00000120; // type:object size:0x30
__vt__34sFStateFct_c<18dAcOappearBridge_c> = .data:0x00000150; // type:object size:0x14
__vt__31sFState_c<18dAcOappearBridge_c> = .data:0x00000168; // type:object size:0x18
__vt__Q34nw4r3g3d15IScnObjCallback = .data:0x00000180; // type:object size:0x20
__vt__33sFStateID_c<18dAcOappearBridge_c> = .data:0x0000027C; // type:object size:0x34
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
lbl_407_bss_8 = .bss:0x00000008; // type:object size:0x18 data:4byte
lbl_407_bss_20 = .bss:0x00000020; // type:object size:0x40 data:4byte
lbl_407_bss_60 = .bss:0x00000060; // type:object size:0x40 data:4byte
lbl_407_bss_A0 = .bss:0x000000A0; // type:object size:0x30 data:4byte
lbl_407_bss_8 = .bss:0x00000008; // type:object size:0x18 scope:local data:4byte
StateID_Wait__18dAcOappearBridge_c = .bss:0x00000020; // type:object size:0x30 data:4byte
StateID_Appear__18dAcOappearBridge_c = .bss:0x00000060; // type:object size:0x30 data:4byte
StateID_Disappear__18dAcOappearBridge_c = .bss:0x000000A0; // type:object size:0x30 data:4byte
14 changes: 7 additions & 7 deletions config/SOUE01/symbols.txt
Original file line number Diff line number Diff line change
Expand Up @@ -630,7 +630,7 @@ fn_80019D70 = .text:0x80019D70; // type:function size:0x58
fn_80019DD0 = .text:0x80019DD0; // type:function size:0x5C
fn_80019E30 = .text:0x80019E30; // type:function size:0x44
fn_80019E80 = .text:0x80019E80; // type:function size:0x3A8
fn_8001A230 = .text:0x8001A230; // type:function size:0x50
attach__14dScnCallback_cFRQ23m3d9scnLeaf_c = .text:0x8001A230; // type:function size:0x50
fn_8001A280 = .text:0x8001A280; // type:function size:0x144
fn_8001A3D0 = .text:0x8001A3D0; // type:function size:0x140
fn_8001A510 = .text:0x8001A510; // type:function size:0x4
Expand Down Expand Up @@ -1103,7 +1103,7 @@ FUN_8002dd50__9dAcBase_cFv = .text:0x8002DD50; // type:function size:0x34
FUN_8002dd90__9dAcBase_cFv = .text:0x8002DD90; // type:function size:0x3C
FUN_8002ddd0__9dAcBase_cFv = .text:0x8002DDD0; // type:function size:0x54
FUN_8002de30__9dAcBase_cFv = .text:0x8002DE30; // type:function size:0x4
fn_8002DE40 = .text:0x8002DE40; // type:function size:0x14
getOarcFile__12dAcObjBase_cFPCcPCc = .text:0x8002DE40; // type:function size:0x14
fn_8002DE60 = .text:0x8002DE60; // type:function size:0x14
getOarcResFile__12dAcObjBase_cFPCc = .text:0x8002DE80; // type:function size:0xC
fn_8002DE90 = .text:0x8002DE90; // type:function size:0xC
Expand Down Expand Up @@ -3598,7 +3598,7 @@ fn_800A0B90 = .text:0x800A0B90; // type:function size:0x10
fn_800A0BA0 = .text:0x800A0BA0; // type:function size:0x94
__ct__5EventFPcUlUlPvPv = .text:0x800A0C40; // type:function size:0xEC
fn_800A0D30 = .text:0x800A0D30; // type:function size:0xEC
fn_800A0E20 = .text:0x800A0E20; // type:function size:0x208
__ct__5EventFUllUlPvPv = .text:0x800A0E20; // type:function size:0x208
fn_800A1030 = .text:0x800A1030; // type:function size:0x208
__dt__5EventFv = .text:0x800A1240; // type:function size:0x40
fn_800A1280 = .text:0x800A1280; // type:function size:0x2E4
Expand Down Expand Up @@ -3722,7 +3722,7 @@ fn_800A99D0 = .text:0x800A99D0; // type:function size:0xE0
fn_800A9AB0 = .text:0x800A9AB0; // type:function size:0x50
fn_800A9B00 = .text:0x800A9B00; // type:function size:0xC4
fn_800A9BD0 = .text:0x800A9BD0; // type:function size:0x78
fn_800A9C50 = .text:0x800A9C50; // type:function size:0xD4
checkPosInArea__FllRC7mVec3_cPPv = .text:0x800A9C50; // type:function size:0xD4
fn_800A9D30 = .text:0x800A9D30; // type:function size:0x60
fn_800A9D90 = .text:0x800A9D90; // type:function size:0x90
fn_800A9E20 = .text:0x800A9E20; // type:function size:0x12C
Expand Down Expand Up @@ -19096,7 +19096,7 @@ fn_80339CF0 = .text:0x80339CF0; // type:function size:0x68
fn_80339D60 = .text:0x80339D60; // type:function size:0x78
fn_80339DE0 = .text:0x80339DE0; // type:function size:0x58
fn_80339E40 = .text:0x80339E40; // type:function size:0x100
fn_80339F40 = .text:0x80339F40; // type:function size:0xEC
destroyActorBgCollision__21CollisionCheckContextFR14ActorCollision = .text:0x80339F40; // type:function size:0xEC
fn_8033A030 = .text:0x8033A030; // type:function size:0x88
fn_8033A0C0 = .text:0x8033A0C0; // type:function size:0x74
fn_8033A140 = .text:0x8033A140; // type:function size:0xA0
Expand Down Expand Up @@ -19437,7 +19437,7 @@ fn_80344E00 = .text:0x80344E00; // type:function size:0x114
fn_80344F20 = .text:0x80344F20; // type:function size:0x14C
fn_80345070 = .text:0x80345070; // type:function size:0x220
fn_80345290 = .text:0x80345290; // type:function size:0x244
fn_803454E0 = .text:0x803454E0; // type:function size:0x38
init__14ActorCollisionFv = .text:0x803454E0; // type:function size:0x38
fn_80345520 = .text:0x80345520; // type:function size:0x4C
fn_80345570 = .text:0x80345570; // type:function size:0x254
fn_803457D0 = .text:0x803457D0; // type:function size:0x8
Expand Down Expand Up @@ -29879,7 +29879,7 @@ lbl_80500A20 = .data:0x80500A20; // type:object size:0x50
lbl_80500A70 = .data:0x80500A70; // type:object size:0x2C
lbl_80500A9C = .data:0x80500A9C; // type:object size:0xC
lbl_80500AA8 = .data:0x80500AA8; // type:object size:0x10 data:string
lbl_80500AB8 = .data:0x80500AB8; // type:object size:0x20
__vt__14dScnCallback_c = .data:0x80500AB8; // type:object size:0x20
lbl_80500AD8 = .data:0x80500AD8; // type:object size:0x44
lbl_80500B1C = .data:0x80500B1C; // type:object size:0x2C
lbl_80500B48 = .data:0x80500B48; // type:object size:0xC
Expand Down
2 changes: 1 addition & 1 deletion configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -948,7 +948,7 @@ def nw4rLib(lib_name, objects, extra_cflags=[]):
Rel(NonMatching, "d_a_nusi_npc", "REL/d/a/d_a_nusi_npc.cpp"),
Rel(NonMatching, "d_a_obj_amber", "REL/d/a/obj/d_a_obj_amber.cpp"),
Rel(NonMatching, "d_a_obj_ancient_jewels", "REL/d/a/obj/d_a_obj_ancient_jewels.cpp"),
Rel(NonMatching, "d_a_obj_appear_bridge", "REL/d/a/obj/d_a_obj_appear_bridge.cpp"),
Rel(Matching, "d_a_obj_appear_bridge", "REL/d/a/obj/d_a_obj_appear_bridge.cpp"),
Rel(NonMatching, "d_a_obj_arrow_switch", "REL/d/a/obj/d_a_obj_arrow_switch.cpp"),
Rel(NonMatching, "d_a_obj_asura_pillar", "REL/d/a/obj/d_a_obj_asura_pillar.cpp"),
Rel(NonMatching, "d_a_obj_asura_sword", "REL/d/a/obj/d_a_obj_asura_sword.cpp"),
Expand Down
6 changes: 3 additions & 3 deletions include/d/a/d_a_base.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,9 @@ class dAcBase_c : public dBase_c {
/* 0x84 */ ObjInfo *obj_info;
/* 0x88 */ TList<SoundInfo, 0xC> sound_list;
/* 0x94 */ SoundSource *sound_source;
/* 0x9C */ mVec3_c *obj_pos;
/* 0x9c */ mVec3_c pos_copy;
/* 0xa8 */ u32 params2;
/* 0x98 */ mVec3_c *obj_pos;
/* 0x9C */ mVec3_c pos_copy;
/* 0xA8 */ u32 params2;
/* 0xAC */ mAng3_c rot_copy;
/* 0xB2 */ u16 obj_id; // enemydefeat flag / id on obj-map
/* 0xB4 */ s8 room_id_copy;
Expand Down
50 changes: 50 additions & 0 deletions include/d/a/obj/d_a_obj_appear_bridge.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#ifndef D_A_OBJ_APPEAR_BRIDGE_H
#define D_A_OBJ_APPEAR_BRIDGE_H

#include <d/a/obj/d_a_obj_base.h>
#include <m/m3d/m_anmmatclr.h>
#include <m/m3d/m_anmtexsrt.h>
#include <m/m3d/m_smdl.h>
#include <s/s_State.hpp>
#include <s/s_StateMgr.hpp>
#include <toBeSorted/actor_collision.h>
#include <toBeSorted/actor_event.h>
#include <toBeSorted/stage_render_stuff.h>

class dAcOappearBridge_c : public dAcObjBase_c {
public:
dAcOappearBridge_c() : mStateMgr(*this, sStateID::null), mActorEvent(*this, nullptr), mSceneCallback(this) {}
virtual ~dAcOappearBridge_c() {}
virtual bool createHeap() override;
virtual int create() override;
virtual int actorExecute() override;
virtual int draw() override;
virtual int doDelete() override;

STATE_FUNC_DECLARE(dAcOappearBridge_c, Wait);
STATE_FUNC_DECLARE(dAcOappearBridge_c, Appear);
STATE_FUNC_DECLARE(dAcOappearBridge_c, Disappear);

private:
static const f32 sMovementRate;

nw4r::g3d::ResFile mResFile;
m3d::smdl_c mModel;
m3d::anmTexSrt_c mSrtAnm;
m3d::anmMatClr_c mClrAnm;
ActorCollision mCollision;
STATE_MGR_DECLARE(dAcOappearBridge_c);
ActorEventRelated mActorEvent;

// TODO the weak IScnObjCallback functions are in the wrong order.
// The vtable order is dtor, World, Mat, View, 0x18, 0x1C
// and the emitted order is dtor, 0x1C, 0x18, View, Mat, World
// but the order in the binary is dtor, 0x1C, 0x18, Mat, World, View
dScnCallback_c mSceneCallback;
/* 0x650 */ mVec3_c mSoundPosition;
/* 0x65C */ f32 field_0x65C;
/* 0x660 */ u8 mAreaIdx;
/* 0x661 */ u8 mEventId;
};

#endif
3 changes: 3 additions & 0 deletions include/nw4r/g3d/g3d_scnobj.h
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,9 @@ struct IScnObjCallback {
virtual void ExecCallback_CALC_WORLD(ScnObj::Timing, ScnObj *, u32, void *) {} // at 0xC
virtual void ExecCallback_CALC_MAT(ScnObj::Timing, ScnObj *, u32, void *) {} // at 0x10
virtual void ExecCallback_CALC_VIEW(ScnObj::Timing, ScnObj *, u32, void *) {} // at 0x14
// SS: We apparently have two more members
virtual void ExecCallback_CALC_0x18(ScnObj::Timing, ScnObj *, u32, void *) {} // at 0x18
virtual void ExecCallback_CALC_0x1C(ScnObj::Timing, ScnObj *, u32, void *) {} // at 0x1C
};

// Is there a better way of resolving this dependency?
Expand Down
2 changes: 2 additions & 0 deletions include/toBeSorted/actor_collision.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class ActorCollision {
multMatrix = callback;
return result;
}
void init();
void execute();

u8 field_0x00[0x1FC - 0x000];
Expand All @@ -31,6 +32,7 @@ class CollisionCheckContext {

static CollisionCheckContext* get();
void registerActorBgCollision(ActorCollision&, dAcObjBase_c*);
void destroyActorBgCollision(ActorCollision&);
};

#endif
10 changes: 10 additions & 0 deletions include/toBeSorted/area_utils.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#ifndef AREA_UTILS_H
#define AREA_UTILS_H

#include <m/m_vec.h>

/* 800a9b00 */ bool checkPosInArea(void **AREA, const mVec3_c& pos);
/* 800a9bd0 */ void *getAreaForIndexInRoom(s32 areaIndex, s32 roomId);
/* 800a9c50 */ bool *checkPosInArea(s32 areaIndex, s32 roomId, const mVec3_c& pos, void **AREA);

#endif
Loading

0 comments on commit 018389d

Please sign in to comment.