Merge remote-tracking branch 'upstream/main' into d_a_obj_boomerang

This commit is contained in:
elijah-thomas774
2025-06-08 13:25:02 -04:00
253 changed files with 13691 additions and 3734 deletions
+2 -2
View File
@@ -91,7 +91,7 @@ fn_129_8390 = .text:0x00008390; // type:function size:0x374
fn_129_8710 = .text:0x00008710; // type:function size:0x29C
fn_129_89B0 = .text:0x000089B0; // type:function size:0x3C4
fn_129_8D80 = .text:0x00008D80; // type:function size:0x4C
fn_129_8DD0 = .text:0x00008DD0; // type:function size:0xB8
accelerateTowards__7dBird_cFR7mVec3_c = .text:0x00008DD0; // type:function size:0xB8
fn_129_8E90 = .text:0x00008E90; // type:function size:0x2B4
changesRot = .text:0x00009150; // type:function size:0x74
fn_129_91D0 = .text:0x000091D0; // type:function size:0x374
@@ -252,7 +252,7 @@ lbl_129_data_B50 = .data:0x00000B50; // type:object size:0xC data:string
lbl_129_data_B5C = .data:0x00000B5C; // type:object size:0xC
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
lbl_129_bss_8 = .bss:0x00000008; // type:object size:0x14 data:4byte
LOFTWING_POINTER = .bss:0x0000001C; // type:object size:0x94 data:4byte
spInstance__7dBird_c = .bss:0x0000001C; // type:object size:0x94 data:4byte
AcBird__STATE_MOVE = .bss:0x000000B0; // type:object size:0x40 data:4byte
AcBird__STATE_HIDE = .bss:0x000000F0; // type:object size:0x40 data:4byte
AcBird__STATE_RIDE_DEMO = .bss:0x00000130; // type:object size:0xC0 data:4byte
@@ -2,14 +2,14 @@ _prolog = .text:0x00000000; // type:function size:0x2C scope:global
_epilog = .text:0x00000030; // type:function size:0x2C scope:global
_unresolved = .text:0x00000060; // type:function size:0x4 scope:global
dAcOF400GateLeaf_c_classInit__Fv = .text:0x00000070; // type:function size:0x54
fn_628_D0 = .text:0x000000D0; // type:function size:0x98
AcOF400GateLeaf__init = .text:0x00000170; // type:function size:0xE4
AcOF400GateLeaf__draw = .text:0x00000260; // type:function size:0x6C
AcOF400GateLeaf__getStoryflag = .text:0x000002D0; // type:function size:0xC
createHeap__18dAcOF400GateLeaf_cFv = .text:0x000000D0; // type:function size:0x98
create__18dAcOF400GateLeaf_cFv = .text:0x00000170; // type:function size:0xE4
draw__18dAcOF400GateLeaf_cFv = .text:0x00000260; // type:function size:0x6C
getStoryflag__18dAcOF400GateLeaf_cFv = .text:0x000002D0; // type:function size:0xC
__dt__18dAcOF400GateLeaf_cFv = .text:0x000002E0; // type:function size:0x68
_ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
g_profile_OBJ_F400_GATE_LEAF = .data:0x00000000; // type:object size:0x10
lbl_628_section4_10 = .data:0x00000010; // type:object size:0x10
lbl_628_section4_20 = .data:0x00000020; // type:object size:0x20 data:string
lbl_628_section4_40 = .data:0x00000040; // type:object size:0x80
lbl_628_section4_10 = .data:0x00000010; // type:object size:0x10 scope:local
lbl_628_section4_20 = .data:0x00000020; // type:object size:0x20 scope:local data:string
__vt__18dAcOF400GateLeaf_c = .data:0x00000040; // type:object size:0x80
@@ -2,16 +2,16 @@ _prolog = .text:0x00000000; // type:function size:0x2C scope:global
_epilog = .text:0x00000030; // type:function size:0x2C scope:global
_unresolved = .text:0x00000060; // type:function size:0x4 scope:global
dAcOF400GateSeal_c_classInit__Fv = .text:0x00000070; // type:function size:0x98
AcOF400GateSeal__initModels = .text:0x00000110; // type:function size:0x11C
fn_629_230 = .text:0x00000230; // type:function size:0x8
AcOF400GateSeal__init = .text:0x00000240; // type:function size:0x1A4
fn_629_3F0 = .text:0x000003F0; // type:function size:0xD8
AcOF400GateSeal__draw = .text:0x000004D0; // type:function size:0x28
createHeap__18dAcOF400GateSeal_cFv = .text:0x00000110; // type:function size:0x11C
actorCreate__18dAcOF400GateSeal_cFv = .text:0x00000230; // type:function size:0x8
actorPostCreate__18dAcOF400GateSeal_cFv = .text:0x00000240; // type:function size:0x1A4
actorExecute__18dAcOF400GateSeal_cFv = .text:0x000003F0; // type:function size:0xD8
draw__18dAcOF400GateSeal_cFv = .text:0x000004D0; // type:function size:0x28
__dt__18dAcOF400GateSeal_cFv = .text:0x00000500; // type:function size:0x84
_ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
lbl_629_rodata_0 = .rodata:0x00000000; // type:object size:0x4 data:float
lbl_629_rodata_0 = .rodata:0x00000000; // type:object size:0x4 scope:local data:float
g_profile_OBJ_F400_GATE_SEAL = .data:0x00000000; // type:object size:0x10
lbl_629_data_10 = .data:0x00000010; // type:object size:0x10
lbl_629_data_20 = .data:0x00000020; // type:object size:0x20 data:string
AcOF400GateSeal__vtable = .data:0x00000040; // type:object size:0x80
lbl_629_data_10 = .data:0x00000010; // type:object size:0x10 scope:local
lbl_629_data_20 = .data:0x00000020; // type:object size:0x20 scope:local data:string
__vt__18dAcOF400GateSeal_c = .data:0x00000040; // type:object size:0x80
@@ -2,15 +2,15 @@ _prolog = .text:0x00000000; // type:function size:0x2C scope:global
_epilog = .text:0x00000030; // type:function size:0x2C scope:global
_unresolved = .text:0x00000060; // type:function size:0x4 scope:global
dAcObjBirdSp_c_classInit__Fv = .text:0x00000070; // type:function size:0x54
fn_241_D0 = .text:0x000000D0; // type:function size:0x8
AcObjBirdSp__init = .text:0x000000E0; // type:function size:0xC4
AcObjBirdSp__update = .text:0x000001B0; // type:function size:0x230
fn_241_3E0 = .text:0x000003E0; // type:function size:0x8
createHeap__14dAcObjBirdSp_cFv = .text:0x000000D0; // type:function size:0x8
create__14dAcObjBirdSp_cFv = .text:0x000000E0; // type:function size:0xC4
actorExecute__14dAcObjBirdSp_cFv = .text:0x000001B0; // type:function size:0x230
draw__14dAcObjBirdSp_cFv = .text:0x000003E0; // type:function size:0x8
__dt__14dAcObjBirdSp_cFv = .text:0x000003F0; // type:function size:0x68
_ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
lbl_241_rodata_0 = .rodata:0x00000000; // type:object size:0x18 data:float
AcObjBirdSp__colliderInit = .data:0x00000000; // type:object size:0x30
lbl_241_rodata_0 = .rodata:0x00000000; // type:object size:0x18 scope:local data:float
sCcSrc__14dAcObjBirdSp_c = .data:0x00000000; // type:object size:0x30
g_profile_OBJ_BIRD_SP_UP = .data:0x00000030; // type:object size:0x10
lbl_241_data_40 = .data:0x00000040; // type:object size:0x20
AcObjBirdSp__vtable = .data:0x00000060; // type:object size:0x80
@14827 = .data:0x00000040; // type:object size:0x20 scope:local
__vt__14dAcObjBirdSp_c = .data:0x00000060; // type:object size:0x80
@@ -9,6 +9,6 @@ __dt__16dAcOBirdStatue_cFv = .text:0x00000250; // type:function size:0x68
_ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
g_profile_OBJ_BIRD_STATUE = .data:0x00000000; // type:object size:0x10
lbl_627_section4_10 = .data:0x00000010; // type:object size:0xC
lbl_627_section4_1C = .data:0x0000001C; // type:object size:0x24
lbl_627_section4_40 = .data:0x00000040; // type:object size:0x80
lbl_627_section4_10 = .data:0x00000010; // type:object size:0xC scope:local
lbl_627_section4_1C = .data:0x0000001C; // type:object size:0x24 scope:local
__vt__16dAcOBirdStatue_c = .data:0x00000040; // type:object size:0x80
+11 -11
View File
@@ -2,18 +2,18 @@ _prolog = .text:0x00000000; // type:function size:0x2C scope:global
_epilog = .text:0x00000030; // type:function size:0x2C scope:global
_unresolved = .text:0x00000060; // type:function size:0x4 scope:global
dAcOblade_c_classInit__Fv = .text:0x00000070; // type:function size:0x90
fn_382_100 = .text:0x00000100; // type:function size:0x98
fn_382_1A0 = .text:0x000001A0; // type:function size:0xC4
fn_382_270 = .text:0x00000270; // type:function size:0x8
fn_382_280 = .text:0x00000280; // type:function size:0x30
fn_382_2B0 = .text:0x000002B0; // type:function size:0x28
createHeap__11dAcOblade_cFv = .text:0x00000100; // type:function size:0x98
create__11dAcOblade_cFv = .text:0x000001A0; // type:function size:0xC4
doDelete__11dAcOblade_cFv = .text:0x00000270; // type:function size:0x8
actorExecute__11dAcOblade_cFv = .text:0x00000280; // type:function size:0x30
draw__11dAcOblade_cFv = .text:0x000002B0; // type:function size:0x28
__dt__11dAcOblade_cFv = .text:0x000002E0; // type:function size:0x68
_ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
lbl_382_rodata_0 = .rodata:0x00000000; // type:object size:0x4 data:float
lbl_382_rodata_4 = .rodata:0x00000004; // type:object size:0x4 align:4 data:float
lbl_382_rodata_0 = .rodata:0x00000000; // type:object size:0x4 scope:local data:float
lbl_382_rodata_4 = .rodata:0x00000004; // type:object size:0x4 scope:local align:4 data:float
g_profile_OBJ_BLADE = .data:0x00000000; // type:object size:0x10
lbl_382_data_10 = .data:0x00000010; // type:object size:0x10 data:string
lbl_382_data_20 = .data:0x00000020; // type:object size:0x10
lbl_382_data_30 = .data:0x00000030; // type:object size:0x20
lbl_382_data_50 = .data:0x00000050; // type:object size:0x80
lbl_382_data_10 = .data:0x00000010; // type:object size:0x10 scope:local data:string
lbl_382_data_20 = .data:0x00000020; // type:object size:0x10 scope:local
lbl_382_data_30 = .data:0x00000030; // type:object size:0x20 scope:local
__vt__11dAcOblade_c = .data:0x00000050; // type:object size:0x80
@@ -2,20 +2,20 @@ _prolog = .text:0x00000000; // type:function size:0x2C scope:global
_epilog = .text:0x00000030; // type:function size:0x2C scope:global
_unresolved = .text:0x00000060; // type:function size:0x4 scope:global
dAcOdistantShip_c_classInit__Fv = .text:0x00000070; // type:function size:0x5C
AcOdistantShip__initModels = .text:0x000000D0; // type:function size:0x90
AcOdistantShip__init = .text:0x00000160; // type:function size:0x100
fn_616_260 = .text:0x00000260; // type:function size:0x8
fn_616_270 = .text:0x00000270; // type:function size:0x8
AcOdistantShip__draw = .text:0x00000280; // type:function size:0x34
AcOdistantShip__getModelName = .text:0x000002C0; // type:function size:0x38
createHeap__17dAcOdistantShip_cFv = .text:0x000000D0; // type:function size:0x90
create__17dAcOdistantShip_cFv = .text:0x00000160; // type:function size:0x100
doDelete__17dAcOdistantShip_cFv = .text:0x00000260; // type:function size:0x8
actorExecute__17dAcOdistantShip_cFv = .text:0x00000270; // type:function size:0x8
draw__17dAcOdistantShip_cFv = .text:0x00000280; // type:function size:0x34
getModelName__17dAcOdistantShip_cFv = .text:0x000002C0; // type:function size:0x38
__dt__17dAcOdistantShip_cFv = .text:0x00000300; // type:function size:0x68
_ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
lbl_616_rodata_0 = .rodata:0x00000000; // type:object size:0x4 data:float
lbl_616_rodata_4 = .rodata:0x00000004; // type:object size:0x4 align:4 data:float
lbl_616_rodata_0 = .rodata:0x00000000; // type:object size:0x4 scope:local data:float
lbl_616_rodata_4 = .rodata:0x00000004; // type:object size:0x4 scope:local align:4 data:float
g_profile_OBJ_DIS_SHIP = .data:0x00000000; // type:object size:0x10
lbl_616_data_10 = .data:0x00000010; // type:object size:0x10 data:string
lbl_616_data_20 = .data:0x00000020; // type:object size:0x20
lbl_616_data_40 = .data:0x00000040; // type:object size:0x10
lbl_616_data_50 = .data:0x00000050; // type:object size:0x18
AcOdistantShip__vtable = .data:0x00000068; // type:object size:0x80
lbl_616_data_10 = .data:0x00000010; // type:object size:0x10 scope:local data:string
lbl_616_data_20 = .data:0x00000020; // type:object size:0x20 scope:local
lbl_616_data_40 = .data:0x00000040; // type:object size:0x10 scope:local
lbl_616_data_50 = .data:0x00000050; // type:object size:0x18 scope:local
__vt__17dAcOdistantShip_c = .data:0x00000068; // type:object size:0x80
@@ -20,7 +20,7 @@ fn_572_1250 = .text:0x00001250; // type:function size:0x16C4
fn_572_2920 = .text:0x00002920; // type:function size:0x1C
AcODoor__update = .text:0x00002940; // type:function size:0x808
fn_572_3150 = .text:0x00003150; // type:function size:0x98
AcODoor__isLocked = .text:0x000031F0; // type:function size:0x158
isLocked__10dAcOdoor_cFv = .text:0x000031F0; // type:function size:0x158
fn_572_3350 = .text:0x00003350; // type:function size:0x84
fn_572_33E0 = .text:0x000033E0; // type:function size:0xC
fn_572_33F0 = .text:0x000033F0; // type:function size:0x78
@@ -4,22 +4,21 @@ _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
dAcOgirahimFoot_c_classInit__Fv = .text:0x000000F0; // type:function size:0xD0
fn_425_1C0 = .text:0x000001C0; // type:function size:0x58
__dt__15dShadowCircle_cFv = .text:0x000001C0; // type:function size:0x58
__dt__30sFState_c<17dAcOgirahimFoot_c>Fv = .text:0x00000220; // type:function size:0x58
__dt__33sFStateFct_c<17dAcOgirahimFoot_c>Fv = .text:0x00000280; // type:function size:0x6C
__dt__86sStateMgr_c<17dAcOgirahimFoot_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000002F0; // type:function size:0xA0
__dt__56sFStateMgr_c<17dAcOgirahimFoot_c,20sStateMethodUsr_FI_c>Fv = .text:0x00000390; // type:function size:0xA4
fn_425_440 = .text:0x00000440; // type:function size:0x80
fn_425_4C0 = .text:0x000004C0; // type:function size:0xE8
createHeap__17dAcOgirahimFoot_cFv = .text:0x00000440; // type:function size:0x80
create__17dAcOgirahimFoot_cFv = .text:0x000004C0; // type:function size:0xE8
changeState__86sStateMgr_c<17dAcOgirahimFoot_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x000005B0; // type:function size:0x10
fn_425_5C0 = .text:0x000005C0; // type:function size:0x8
fn_425_5D0 = .text:0x000005D0; // type:function size:0x30
doDelete__17dAcOgirahimFoot_cFv = .text:0x000005C0; // type:function size:0x8
actorExecute__17dAcOgirahimFoot_cFv = .text:0x000005D0; // type:function size:0x30
executeState__86sStateMgr_c<17dAcOgirahimFoot_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000600; // type:function size:0x10
fn_425_610 = .text:0x00000610; // type:function size:0xF4
draw__17dAcOgirahimFoot_cFv = .text:0x00000610; // type:function size:0xF4
getStateID__86sStateMgr_c<17dAcOgirahimFoot_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000710; // type:function size:0x10
initializeState_Wait__17dAcOgirahimFoot_cFv = .text:0x00000720; // type:function size:0xC
executeState_Wait__17dAcOgirahimFoot_cFv = .text:0x00000730; // type:function size:0x24
fn_425_754 = .text:0x00000754; // type:function size:0x4
executeState_Wait__17dAcOgirahimFoot_cFv = .text:0x00000730; // type:function size:0x28
finalizeState_Wait__17dAcOgirahimFoot_cFv = .text:0x00000760; // type:function size:0x4
initializeState_Appear__17dAcOgirahimFoot_cFv = .text:0x00000770; // type:function size:0xC
executeState_Appear__17dAcOgirahimFoot_cFv = .text:0x00000780; // type:function size:0x68
@@ -47,15 +46,15 @@ _dtors = .dtors:0x00000000; // type:label scope:global
__destroy_global_chain_reference = .dtors:0x00000000; // type:object size:0x4 scope:global
lbl_425_rodata_0 = .rodata:0x00000000; // type:object size:0x18 data:float
g_profile_OBJ_GIRAHIM_FOOT = .data:0x00000000; // type:object size:0x10 data:4byte
lbl_425_data_10 = .data:0x00000010; // type:object size:0x10
lbl_425_data_20 = .data:0x00000020; // type:object size:0x20
lbl_425_data_40 = .data:0x00000040; // type:object size:0x80
lbl_425_data_C0 = .data:0x000000C0; // type:object size:0x30
lbl_425_data_F0 = .data:0x000000F0; // type:object size:0x30
lbl_425_data_120 = .data:0x00000120; // type:object size:0x18
lbl_425_data_138 = .data:0x00000138; // type:object size:0x18
lbl_425_data_150 = .data:0x00000150; // type:object size:0x9C
lbl_425_data_1EC = .data:0x000001EC; // type:object size:0x34
lbl_425_data_10 = .data:0x00000010; // type:object size:0x10 scope:local
lbl_425_data_20 = .data:0x00000020; // type:object size:0x20 scope:local
__vt__17dAcOgirahimFoot_c = .data:0x00000040; // type:object size:0x80
lbl_425_data_C0 = .data:0x000000C0; // type:object size:0x30 scope:local
lbl_425_data_F0 = .data:0x000000F0; // type:object size:0x30 scope:local
lbl_425_data_120 = .data:0x00000120; // type:object size:0x18 scope:local
lbl_425_data_138 = .data:0x00000138; // type:object size:0x18 scope:local
lbl_425_data_150 = .data:0x00000150; // type:object size:0x9C scope:local
lbl_425_data_1EC = .data:0x000001EC; // type:object size:0x34 scope:local
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
lbl_425_bss_8 = .bss:0x00000008; // type:object size:0x10 data:4byte
lbl_425_bss_18 = .bss:0x00000018; // type:object size:0x40 data:4byte
@@ -8,13 +8,13 @@ __dt__27sFState_c<14dAcOimpaDoor_c>Fv = .text:0x000001B0; // type:function size:
__dt__30sFStateFct_c<14dAcOimpaDoor_c>Fv = .text:0x00000210; // type:function size:0x6C
__dt__83sStateMgr_c<14dAcOimpaDoor_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000280; // type:function size:0xA0
__dt__53sFStateMgr_c<14dAcOimpaDoor_c,20sStateMethodUsr_FI_c>Fv = .text:0x00000320; // type:function size:0xA4
fn_421_3D0 = .text:0x000003D0; // type:function size:0x88
fn_421_460 = .text:0x00000460; // type:function size:0xE8
createHeap__14dAcOimpaDoor_cFv = .text:0x000003D0; // type:function size:0x88
create__14dAcOimpaDoor_cFv = .text:0x00000460; // type:function size:0xE8
changeState__83sStateMgr_c<14dAcOimpaDoor_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000550; // type:function size:0x10
fn_421_560 = .text:0x00000560; // type:function size:0x8
fn_421_570 = .text:0x00000570; // type:function size:0x30
doDelete__14dAcOimpaDoor_cFv = .text:0x00000560; // type:function size:0x8
actorExecute__14dAcOimpaDoor_cFv = .text:0x00000570; // type:function size:0x30
executeState__83sStateMgr_c<14dAcOimpaDoor_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000005A0; // type:function size:0x10
fn_421_5B0 = .text:0x000005B0; // type:function size:0x28
draw__14dAcOimpaDoor_cFv = .text:0x000005B0; // type:function size:0x28
initializeState_Wait__14dAcOimpaDoor_cFv = .text:0x000005E0; // type:function size:0x4
executeState_Wait__14dAcOimpaDoor_cFv = .text:0x000005F0; // type:function size:0x4
finalizeState_Wait__14dAcOimpaDoor_cFv = .text:0x00000600; // type:function size:0x4
@@ -40,17 +40,17 @@ isSameName__29sFStateID_c<14dAcOimpaDoor_c>CFPCc = .text:0x00000A20; // type:fun
_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_421_rodata_0 = .rodata:0x00000000; // type:object size:0x18 data:float
lbl_421_rodata_0 = .rodata:0x00000000; // type:object size:0x18 scope:local data:float
g_profile_OBJ_IMPA_DOOR = .data:0x00000000; // type:object size:0x10 data:4byte
lbl_421_data_10 = .data:0x00000010; // type:object size:0x8
lbl_421_data_18 = .data:0x00000018; // type:object size:0x10 data:string
lbl_421_data_28 = .data:0x00000028; // type:object size:0x20
lbl_421_data_48 = .data:0x00000048; // type:object size:0x80
lbl_421_data_C8 = .data:0x000000C8; // type:object size:0x30
lbl_421_data_F8 = .data:0x000000F8; // type:object size:0x30
lbl_421_data_128 = .data:0x00000128; // type:object size:0x18
lbl_421_data_140 = .data:0x00000140; // type:object size:0x5C
lbl_421_data_19C = .data:0x0000019C; // type:object size:0x34
lbl_421_data_10 = .data:0x00000010; // type:object size:0x8 scope:local
lbl_421_data_18 = .data:0x00000018; // type:object size:0x10 scope:local data:string
lbl_421_data_28 = .data:0x00000028; // type:object size:0x20 scope:local
__vt__14dAcOimpaDoor_c = .data:0x00000048; // type:object size:0x80
__vt__53sFStateMgr_c<14dAcOimpaDoor_c,20sStateMethodUsr_FI_c> = .data:0x000000C8; // type:object size:0x30
__vt__83sStateMgr_c<14dAcOimpaDoor_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x000000F8; // type:object size:0x30
__vt__30sFStateFct_c<14dAcOimpaDoor_c> = .data:0x00000128; // type:object size:0x18
__vt__27sFState_c<14dAcOimpaDoor_c> = .data:0x00000140; // type:object size:0x5C
__vt__29sFStateID_c<14dAcOimpaDoor_c> = .data:0x0000019C; // type:object size:0x34
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
lbl_421_bss_8 = .bss:0x00000008; // type:object size:0x10
lbl_421_bss_18 = .bss:0x00000018; // type:object size:0x30 data:4byte
lbl_421_bss_8 = .bss:0x00000008; // type:object size:0x10 scope:local
lbl_421_bss_18 = .bss:0x00000018; // type:object size:0x30 scope:local data:4byte
@@ -2,22 +2,22 @@ _prolog = .text:0x00000000; // type:function size:0x2C scope:global
_epilog = .text:0x00000030; // type:function size:0x2C scope:global
_unresolved = .text:0x00000060; // type:function size:0x4 scope:global
dAcOislandLOD_c_classInit__Fv = .text:0x00000070; // type:function size:0x5C
fn_426_D0 = .text:0x000000D0; // type:function size:0xAC
fn_426_180 = .text:0x00000180; // type:function size:0xB0
fn_426_230 = .text:0x00000230; // type:function size:0x8
fn_426_240 = .text:0x00000240; // type:function size:0x8
fn_426_250 = .text:0x00000250; // type:function size:0x78
createHeap__15dAcOislandLOD_cFv = .text:0x000000D0; // type:function size:0xAC
create__15dAcOislandLOD_cFv = .text:0x00000180; // type:function size:0xB0
doDelete__15dAcOislandLOD_cFv = .text:0x00000230; // type:function size:0x8
actorExecute__15dAcOislandLOD_cFv = .text:0x00000240; // type:function size:0x8
draw__15dAcOislandLOD_cFv = .text:0x00000250; // type:function size:0x78
__dt__15dAcOislandLOD_cFv = .text:0x000002D0; // type:function size:0x68
_ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
dAcOislandLOD__resFilenames = .rodata:0x00000000; // type:object size:0x14
dAcOislandLOD__resMdlNames = .rodata:0x00000014; // type:object size:0x14
dAcOislandLOD__cullingDist = .rodata:0x00000028; // type:object size:0x4 align:4 data:float
lbl_426_data_0 = .data:0x00000000; // type:object size:0x8 data:string
lbl_426_data_8 = .data:0x00000008; // type:object size:0x8 data:string
lbl_426_data_10 = .data:0x00000010; // type:object size:0x8 data:string
lbl_426_data_18 = .data:0x00000018; // type:object size:0x8 data:string
lbl_426_data_20 = .data:0x00000020; // type:object size:0x8 data:string
resFilenames__15dAcOislandLOD_c = .rodata:0x00000000; // type:object size:0x14
resMdlNames__15dAcOislandLOD_c = .rodata:0x00000014; // type:object size:0x14
dAcOislandLOD__cullingDist = .rodata:0x00000028; // type:object size:0x4 scope:local align:4 data:float
lbl_426_data_0 = .data:0x00000000; // type:object size:0x8 scope:local data:string
lbl_426_data_8 = .data:0x00000008; // type:object size:0x8 scope:local data:string
lbl_426_data_10 = .data:0x00000010; // type:object size:0x8 scope:local data:string
lbl_426_data_18 = .data:0x00000018; // type:object size:0x8 scope:local data:string
lbl_426_data_20 = .data:0x00000020; // type:object size:0x8 scope:local data:string
g_profile_OBJ_ISLAND_LOD = .data:0x00000028; // type:object size:0x10
lbl_426_data_38 = .data:0x00000038; // type:object size:0x20
lbl_426_data_58 = .data:0x00000058; // type:object size:0x80
lbl_426_data_38 = .data:0x00000038; // type:object size:0x20 scope:local
__vt__15dAcOislandLOD_c = .data:0x00000058; // type:object size:0x80
@@ -2,9 +2,9 @@ _prolog = .text:0x00000000; // type:function size:0x2C scope:global
_epilog = .text:0x00000030; // type:function size:0x2C scope:global
_unresolved = .text:0x00000060; // type:function size:0x4 scope:global
dAcOMapparts_c_classInit__Fv = .text:0x00000070; // type:function size:0x4C
AcOMapparts__init = .text:0x000000C0; // type:function size:0x8
create__14dAcOMapparts_cFv = .text:0x000000C0; // type:function size:0x8
__dt__14dAcOMapparts_cFv = .text:0x000000D0; // type:function size:0x58
_ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
g_profile_OBJ_MAPPARTS = .data:0x00000000; // type:object size:0x10
lbl_633_section4_10 = .data:0x00000010; // type:object size:0x80
__vt__14dAcOMapparts_c = .data:0x00000010; // type:object size:0x80
@@ -2,15 +2,15 @@ _prolog = .text:0x00000000; // type:function size:0x2C scope:global
_epilog = .text:0x00000030; // type:function size:0x2C scope:global
_unresolved = .text:0x00000060; // type:function size:0x4 scope:global
dAcOmoleCover_c_classInit__Fv = .text:0x00000070; // type:function size:0x64
AcOmoleCover__initModels = .text:0x000000E0; // type:function size:0x110
AcOmoleCover__init = .text:0x000001F0; // type:function size:0xD0
fn_424_2C0 = .text:0x000002C0; // type:function size:0x8
fn_424_2D0 = .text:0x000002D0; // type:function size:0x8
AcOmoleCover__draw = .text:0x000002E0; // type:function size:0x28
createHeap__15dAcOmoleCover_cFv = .text:0x000000E0; // type:function size:0x110
create__15dAcOmoleCover_cFv = .text:0x000001F0; // type:function size:0xD0
doDelete__15dAcOmoleCover_cFv = .text:0x000002C0; // type:function size:0x8
actorExecute__15dAcOmoleCover_cFv = .text:0x000002D0; // type:function size:0x8
draw__15dAcOmoleCover_cFv = .text:0x000002E0; // type:function size:0x28
__dt__15dAcOmoleCover_cFv = .text:0x00000310; // type:function size:0x74
_ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
lbl_424_rodata_0 = .rodata:0x00000000; // type:object size:0x1C data:float
lbl_424_rodata_0 = .rodata:0x00000000; // type:object size:0x1C scope:local data:float
g_profile_OBJ_MOLE_COVER = .data:0x00000000; // type:object size:0x6C
lbl_424_data_6C = .data:0x0000006C; // type:object size:0x24
AcOmoleCover__vtable = .data:0x00000090; // type:object size:0x80
lbl_424_data_6C = .data:0x0000006C; // type:object size:0x24 scope:local
__vt__15dAcOmoleCover_c = .data:0x00000090; // type:object size:0x80
@@ -2,16 +2,16 @@ _prolog = .text:0x00000000; // type:function size:0x2C scope:global
_epilog = .text:0x00000030; // type:function size:0x2C scope:global
_unresolved = .text:0x00000060; // type:function size:0x4 scope:global
dAcOpuzzleIsland_c_classInit__Fv = .text:0x00000070; // type:function size:0x64
AcOpuzzleIsland__bgInteractFunc = .text:0x000000E0; // type:function size:0x7C
AcOpuzzleIsland__initModels = .text:0x00000160; // type:function size:0x10C
AcOpuzzleIsland__init = .text:0x00000270; // type:function size:0xD4
fn_369_350 = .text:0x00000350; // type:function size:0x8
AcOpuzzleIsland__update = .text:0x00000360; // type:function size:0x28
fn_369_390 = .text:0x00000390; // type:function size:0x28
rideCallback__18dAcOpuzzleIsland_cFP4dBgWP12dAcObjBase_cP12dAcObjBase_c = .text:0x000000E0; // type:function size:0x7C
createHeap__18dAcOpuzzleIsland_cFv = .text:0x00000160; // type:function size:0x10C
create__18dAcOpuzzleIsland_cFv = .text:0x00000270; // type:function size:0xD4
doDelete__18dAcOpuzzleIsland_cFv = .text:0x00000350; // type:function size:0x8
actorExecute__18dAcOpuzzleIsland_cFv = .text:0x00000360; // type:function size:0x28
draw__18dAcOpuzzleIsland_cFv = .text:0x00000390; // type:function size:0x28
__dt__18dAcOpuzzleIsland_cFv = .text:0x000003C0; // type:function size:0x74
_ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
lbl_369_rodata_0 = .rodata:0x00000000; // type:object size:0x4 data:float
lbl_369_rodata_0 = .rodata:0x00000000; // type:object size:0x4 scope:local data:float
g_profile_OBJ_PUZZLE_ISLAND = .data:0x00000000; // type:object size:0x38
lbl_369_data_38 = .data:0x00000038; // type:object size:0x20 data:string
AcOpuzzleIsland__vtable = .data:0x00000058; // type:object size:0x80
lbl_369_data_38 = .data:0x00000038; // type:object size:0x20 scope:local data:string
__vt__18dAcOpuzzleIsland_c = .data:0x00000058; // type:object size:0x80
@@ -4,15 +4,15 @@ _unresolved = .text:0x00000060; // type:function size:0x4 scope:global
dAcORailPost_classInit__Fv = .text:0x00000070; // type:function size:0x30
__ct__12dAcORailPostFv = .text:0x000000A0; // type:function size:0x4C
__dt__12dAcORailPostFv = .text:0x000000F0; // type:function size:0x74
AcORailPost__initModels = .text:0x00000170; // type:function size:0x118
AcORailPost__init = .text:0x00000290; // type:function size:0xA4
AcORailPost__destroy = .text:0x00000340; // type:function size:0x38
fn_524_380 = .text:0x00000380; // type:function size:0x8
AcORailPost__draw = .text:0x00000390; // type:function size:0x34
createHeap__12dAcORailPostFv = .text:0x00000170; // type:function size:0x118
create__12dAcORailPostFv = .text:0x00000290; // type:function size:0xA4
doDelete__12dAcORailPostFv = .text:0x00000340; // type:function size:0x38
actorExecute__12dAcORailPostFv = .text:0x00000380; // type:function size:0x8
draw__12dAcORailPostFv = .text:0x00000390; // type:function size:0x34
_ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
lbl_524_rodata_0 = .rodata:0x00000000; // type:object size:0x4 data:float
@15367 = .rodata:0x00000000; // type:object size:0x4 scope:local data:float
g_profile_OBJ_RAIL_POST = .data:0x00000000; // type:object size:0x10
lbl_524_data_10 = .data:0x00000010; // type:object size:0xC
lbl_524_data_1C = .data:0x0000001C; // type:object size:0x1C
AcORailPost__vtable = .data:0x00000038; // type:object size:0x80
@15350 = .data:0x00000010; // type:object size:0xC scope:local
@15366 = .data:0x0000001C; // type:object size:0x1C scope:local
__vt__12dAcORailPost = .data:0x00000038; // type:object size:0x80
@@ -2,15 +2,15 @@ _prolog = .text:0x00000000; // type:function size:0x2C scope:global
_epilog = .text:0x00000030; // type:function size:0x2C scope:global
_unresolved = .text:0x00000060; // type:function size:0x4 scope:global
dAcOropeBase_c_classInit__Fv = .text:0x00000070; // type:function size:0x5C
fn_431_D0 = .text:0x000000D0; // type:function size:0xD0
fn_431_1A0 = .text:0x000001A0; // type:function size:0xBC
fn_431_260 = .text:0x00000260; // type:function size:0x8
fn_431_270 = .text:0x00000270; // type:function size:0x28
fn_431_2A0 = .text:0x000002A0; // type:function size:0x28
createHeap__14dAcOropeBase_cFv = .text:0x000000D0; // type:function size:0xD0
create__14dAcOropeBase_cFv = .text:0x000001A0; // type:function size:0xBC
doDelete__14dAcOropeBase_cFv = .text:0x00000260; // type:function size:0x8
actorExecute__14dAcOropeBase_cFv = .text:0x00000270; // type:function size:0x28
draw__14dAcOropeBase_cFv = .text:0x000002A0; // type:function size:0x28
__dt__14dAcOropeBase_cFv = .text:0x000002D0; // type:function size:0x68
_ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
lbl_431_rodata_0 = .rodata:0x00000000; // type:object size:0x18 data:float
lbl_431_rodata_0 = .rodata:0x00000000; // type:object size:0x18 scope:local data:float
g_profile_OBJ_ROPE_BASE = .data:0x00000000; // type:object size:0x38
lbl_431_data_38 = .data:0x00000038; // type:object size:0x20
lbl_431_data_58 = .data:0x00000058; // type:object size:0x80
lbl_431_data_38 = .data:0x00000038; // type:object size:0x20 scope:local
__vt__14dAcOropeBase_c = .data:0x00000058; // type:object size:0x80
@@ -8,14 +8,14 @@ __dt__29sFState_c<16dAcOstreamLava_c>Fv = .text:0x00000230; // type:function siz
__dt__32sFStateFct_c<16dAcOstreamLava_c>Fv = .text:0x00000290; // type:function size:0x6C
__dt__85sStateMgr_c<16dAcOstreamLava_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000300; // type:function size:0xA0
__dt__55sFStateMgr_c<16dAcOstreamLava_c,20sStateMethodUsr_FI_c>Fv = .text:0x000003A0; // type:function size:0xA4
fn_405_450 = .text:0x00000450; // type:function size:0x40
AcOstreamLava__initModels = .text:0x00000490; // type:function size:0x200
AcOstreamLava__init = .text:0x00000690; // type:function size:0x1A4
__dt__14dScnCallback_cFv = .text:0x00000450; // type:function size:0x40
createHeap__16dAcOstreamLava_cFv = .text:0x00000490; // type:function size:0x200
create__16dAcOstreamLava_cFv = .text:0x00000690; // type:function size:0x1A4
changeState__85sStateMgr_c<16dAcOstreamLava_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000840; // type:function size:0x10
AcOstreamLava__destroy = .text:0x00000850; // type:function size:0x40
AcOstreamLava__update = .text:0x00000890; // type:function size:0x94
doDelete__16dAcOstreamLava_cFv = .text:0x00000850; // type:function size:0x40
actorExecute__16dAcOstreamLava_cFv = .text:0x00000890; // type:function size:0x94
executeState__85sStateMgr_c<16dAcOstreamLava_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000930; // type:function size:0x10
AcOstreamLava__draw = .text:0x00000940; // type:function size:0x34
draw__16dAcOstreamLava_cFv = .text:0x00000940; // type:function size:0x34
initializeState_Wait__16dAcOstreamLava_cFv = .text:0x00000980; // type:function size:0x54
executeState_Wait__16dAcOstreamLava_cFv = .text:0x000009E0; // type:function size:0x88
finalizeState_Wait__16dAcOstreamLava_cFv = .text:0x00000A70; // type:function size:0x7C
@@ -24,11 +24,11 @@ executeState_Stream__16dAcOstreamLava_cFv = .text:0x00000B50; // type:function s
finalizeState_Stream__16dAcOstreamLava_cFv = .text:0x00000BE0; // type:function size:0x4
__dt__16dAcOstreamLava_cFv = .text:0x00000BF0; // type:function size:0xFC
getStateID__85sStateMgr_c<16dAcOstreamLava_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000CF0; // type:function size:0x10
fn_405_D00 = .text:0x00000D00; // type:function size:0x4
fn_405_D10 = .text:0x00000D10; // type:function size:0x4
fn_405_D20 = .text:0x00000D20; // type:function size:0x4
fn_405_D30 = .text:0x00000D30; // type:function size:0x4
fn_405_D40 = .text:0x00000D40; // type:function size:0x4
ExecCallback_DRAW_XLU__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x00000D00; // type:function size:0x4
ExecCallback_DRAW_OPA__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x00000D10; // type:function size:0x4
ExecCallback_CALC_MAT__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x00000D20; // type:function size:0x4
ExecCallback_CALC_WORLD__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x00000D30; // type:function size:0x4
ExecCallback_CALC_VIEW__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x00000D40; // type:function size:0x4
build__32sFStateFct_c<16dAcOstreamLava_c>FRC12sStateIDIf_c = .text:0x00000D50; // type:function size:0x60
dispose__32sFStateFct_c<16dAcOstreamLava_c>FRP10sStateIf_c = .text:0x00000DB0; // type:function size:0xC
initialize__29sFState_c<16dAcOstreamLava_c>Fv = .text:0x00000DC0; // type:function size:0x1C
@@ -49,32 +49,37 @@ isSameName__31sFStateID_c<16dAcOstreamLava_c>CFPCc = .text:0x00001130; // type:f
_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_405_rodata_0 = .rodata:0x00000000; // type:object size:0x68
lbl_405_rodata_68 = .rodata:0x00000068; // type:object size:0x4 align:4 data:float
lbl_405_data_0 = .data:0x00000000; // type:object size:0xC data:4byte
lbl_405_data_C = .data:0x0000000C; // type:object size:0x10
lbl_405_data_1C = .data:0x0000001C; // type:object size:0x10
lbl_405_data_2C = .data:0x0000002C; // type:object size:0x14
lbl_405_rodata_00 = .rodata:0x00000000; // type:object size:0x4 data:float
lbl_405_rodata_04 = .rodata:0x00000004; // type:object size:0x14 scope:local
lbl_405_rodata_18 = .rodata:0x00000018; // type:object size:0x14 scope:local
lbl_405_rodata_2C = .rodata:0x0000002C; // type:object size:0x14 scope:local
lbl_405_rodata_40 = .rodata:0x00000040; // type:object size:0x14 scope:local
lbl_405_rodata_54 = .rodata:0x00000054; // type:object size:0x14 scope:local
lbl_405_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local align:4 data:float
lbl_405_data_00 = .data:0x00000000; // type:object size:0xC data:string
lbl_405_data_0C = .data:0x0000000C; // type:object size:0x10 data:string
lbl_405_data_1C = .data:0x0000001C; // type:object size:0x10 data:string
lbl_405_data_2C = .data:0x0000002C; // type:object size:0x14 data:string
lbl_405_data_40 = .data:0x00000040; // type:object size:0x10 data:string
lbl_405_data_50 = .data:0x00000050; // type:object size:0x10 data:string
lbl_405_data_60 = .data:0x00000060; // type:object size:0x10 data:string
lbl_405_data_70 = .data:0x00000070; // type:object size:0x18
lbl_405_data_88 = .data:0x00000088; // type:object size:0x18
lbl_405_data_70 = .data:0x00000070; // type:object size:0x18 data:string
lbl_405_data_88 = .data:0x00000088; // type:object size:0x18 data:string
lbl_405_data_A0 = .data:0x000000A0; // type:object size:0x18 data:string
lbl_405_data_B8 = .data:0x000000B8; // type:object size:0x18 data:string
lbl_405_data_D0 = .data:0x000000D0; // type:object size:0x18 data:string
lbl_405_data_E8 = .data:0x000000E8; // type:object size:0x18
lbl_405_data_100 = .data:0x00000100; // type:object size:0x18
lbl_405_data_E8 = .data:0x000000E8; // type:object size:0x18 data:string
lbl_405_data_100 = .data:0x00000100; // type:object size:0x18 data:string
lbl_405_data_118 = .data:0x00000118; // type:object size:0x18 data:string
lbl_405_data_130 = .data:0x00000130; // type:object size:0x18 data:string
lbl_405_data_148 = .data:0x00000148; // type:object size:0x18 data:string
g_profile_OBJ_STREAM_LAVA = .data:0x00000160; // type:object size:0x10
lbl_405_data_170 = .data:0x00000170; // type:object size:0x8
lbl_405_data_178 = .data:0x00000178; // type:object size:0x20
lbl_405_data_198 = .data:0x00000198; // type:object size:0x4 data:4byte
lbl_405_data_19C = .data:0x0000019C; // type:object size:0x4 data:4byte
lbl_405_data_1A0 = .data:0x000001A0; // type:object size:0x8
AcOstreamLava__vtable = .data:0x000001A8; // type:object size:0x80
lbl_405_data_170 = .data:0x00000170; // type:object size:0x8 data:string
lbl_405_data_178 = .data:0x00000178; // type:object size:0x20 data:string
lbl_405_data_198 = .data:0x00000198; // type:object size:0x4 data:int
lbl_405_data_19C = .data:0x0000019C; // type:object size:0x4 data:int
lbl_405_data_1A0 = .data:0x000001A0; // type:object size:0x8 data:string
__vt__16dAcOstreamLava_c = .data:0x000001A8; // type:object size:0x80
lbl_405_data_228 = .data:0x00000228; // type:object size:0x30
lbl_405_data_258 = .data:0x00000258; // type:object size:0x30
lbl_405_data_288 = .data:0x00000288; // type:object size:0x18
@@ -82,5 +87,5 @@ lbl_405_data_2A0 = .data:0x000002A0; // type:object size:0xC4
lbl_405_data_364 = .data:0x00000364; // type:object size:0x34
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
lbl_405_bss_8 = .bss:0x00000008; // type:object size:0x10 data:4byte
AcOstreamLava__STATE_WAIT = .bss:0x00000018; // type:object size:0x40 data:4byte
AcOstreamLava__STATE_STREAM = .bss:0x00000058; // type:object size:0x30 data:4byte
StateID_Wait__16dAcOstreamLava_c = .bss:0x00000018; // type:object size:0x40 data:4byte
StateID_Stream__16dAcOstreamLava_c = .bss:0x00000058; // type:object size:0x30 data:4byte
@@ -2,17 +2,17 @@ _prolog = .text:0x00000000; // type:function size:0x2C scope:global
_epilog = .text:0x00000030; // type:function size:0x2C scope:global
_unresolved = .text:0x00000060; // type:function size:0x4 scope:global
dAcOTarzanPole_c_classInit__Fv = .text:0x00000070; // type:function size:0x6C
AcOTarzanPole__initModels = .text:0x000000E0; // type:function size:0xCC
AcOTarzanPole__init = .text:0x000001B0; // type:function size:0x16C
fn_288_320 = .text:0x00000320; // type:function size:0x8
AcOTarzanPole__update = .text:0x00000330; // type:function size:0x224
AcOTarzanPole__draw = .text:0x00000560; // type:function size:0x28
createHeap__16dAcOTarzanPole_cFv = .text:0x000000E0; // type:function size:0xCC
create__16dAcOTarzanPole_cFv = .text:0x000001B0; // type:function size:0x16C
doDelete__16dAcOTarzanPole_cFv = .text:0x00000320; // type:function size:0x8
actorExecute__16dAcOTarzanPole_cFv = .text:0x00000330; // type:function size:0x224
draw__16dAcOTarzanPole_cFv = .text:0x00000560; // type:function size:0x28
__dt__16dAcOTarzanPole_cFv = .text:0x00000590; // type:function size:0x80
_ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
lbl_288_rodata_0 = .rodata:0x00000000; // type:object size:0x4C data:float
lbl_288_rodata_0 = .rodata:0x00000000; // type:object size:0x4C scope:local data:float
g_profile_OBJ_TARZAN_POLE = .data:0x00000000; // type:object size:0x10
lbl_288_data_10 = .data:0x00000010; // type:object size:0x30
lbl_288_data_40 = .data:0x00000040; // type:object size:0x8 data:string
lbl_288_data_48 = .data:0x00000048; // type:object size:0x20
AcOTarzanPole__vtable = .data:0x00000068; // type:object size:0x80
sCcSrc__16dAcOTarzanPole_c = .data:0x00000010; // type:object size:0x30
@23333 = .data:0x00000040; // type:object size:0x8 scope:local data:string
@23358 = .data:0x00000048; // type:object size:0x20 scope:local
__vt__16dAcOTarzanPole_c = .data:0x00000068; // type:object size:0x80
@@ -4,10 +4,10 @@ _unresolved = .text:0x00000060; // type:function size:0x4 scope:global
dTgShutterFenceForbiddance_c_classInit__Fv = .text:0x00000070; // type:function size:0x30
__ct__28dTgShutterFenceForbiddance_cFv = .text:0x000000A0; // type:function size:0x50
__dt__28dTgShutterFenceForbiddance_cFv = .text:0x000000F0; // type:function size:0x7C
TgShutterFenceForbiddance__init = .text:0x00000170; // type:function size:0x20
fn_631_190 = .text:0x00000190; // type:function size:0x60
create__28dTgShutterFenceForbiddance_cFv = .text:0x00000170; // type:function size:0x20
actorExecute__28dTgShutterFenceForbiddance_cFv = .text:0x00000190; // type:function size:0x60
_ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
g_profile_TAG_SHUTTER_FENCE_FORBIDDANCE = .data:0x00000000; // type:object size:0x10
lbl_631_section4_10 = .data:0x00000010; // type:object size:0x74
__vt__28dTgShutterFenceForbiddance_c = .data:0x00000010; // type:object size:0x74
TgShutterFenceForbiddance__FIRST_PTR = .bss:0x00000008; // type:object size:0x4 data:4byte
+222 -28
View File
@@ -98,9 +98,10 @@ toBeSorted/d_unk_mdl_stuff_2.cpp:
.ctors start:0x804DB658 end:0x804DB65C
.sbss start:0x80575058 end:0x80575068
toBeSorted/blur_and_palette_manager.cpp:
d/d_light_env.cpp:
.text start:0x800221A0 end:0x800268AC align:16
.ctors start:0x804DB65C end:0x804DB660
.data start:0x80500E80 end:0x80500E98
.sbss start:0x80575068 end:0x80575070
.sdata2 start:0x80576BA0 end:0x80576C18
.bss start:0x8058F210 end:0x80594FA0
@@ -360,8 +361,10 @@ toBeSorted/arc_managers/layout_arc_manager.cpp:
toBeSorted/arc_managers/layout_arc_control.cpp:
.text start:0x8006A2E0 end:0x8006A544 align:16
toBeSorted/base_tables.cpp:
toBeSorted/actor_info.cpp:
.text start:0x8006A550 end:0x8006A8C8 align:16
.rodata start:0x804E0FA8 end:0x804E3418
.sdata2 start:0x805779F8 end:0x80579210
toBeSorted/unk_vec_math.cpp:
.text start:0x8006A8D0 end:0x8006B3A4 align:16
@@ -2346,67 +2349,152 @@ toBeSorted/col/cc/misc_unks.cpp:
.text start:0x803598D0 end:0x80359D20 align:16
.sbss start:0x80575D28 end:0x80575D30
d/snd/d_snd.cpp:
d/snd/d_snd_mgr.cpp:
.text start:0x80359D20 end:0x8035A558 align:16
.data start:0x805485D0 end:0x80548678
.sbss start:0x80575D30 end:0x80575D38
d/snd/d_snd_actor.cpp:
.text start:0x8035A560 end:0x8035BB78 align:16
.text start:0x8035A560 end:0x8035A898 align:16
.data start:0x80548678 end:0x805486A0
d/snd/d_snd_engine.cpp:
d/snd/d_snd_3d_actor.cpp:
.text start:0x8035A8A0 end:0x8035BB78 align:16
.data start:0x805486A0 end:0x80548710
.sdata2 start:0x8057D2C0 end:0x8057D308
d/snd/d_snd_3d_engine.cpp:
.text start:0x8035BB80 end:0x8035C3F0 align:16
.data start:0x80548710 end:0x80548730
.sdata2 start:0x8057D308 end:0x8057D368
d/snd/d_snd_unk_component_1.cpp:
d/snd/d_snd_sound.cpp:
.text start:0x8035C3F0 end:0x8035DA88 align:16
.data start:0x80548730 end:0x80548758
.sdata2 start:0x8057D368 end:0x8057D380
d/snd/mgr/d_snd_mgr_bgm.cpp:
.text start:0x8035DA90 end:0x8035F010 align:16
d/snd/d_snd_player_mgr.cpp:
.text start:0x8035DA90 end:0x8035F04C align:16
.data start:0x80548758 end:0x805487A0
.sbss start:0x80575D38 end:0x80575D40
.sdata2 start:0x8057D380 end:0x8057D390
d/snd/mgr/d_snd_mgr_unk1.cpp:
.text start:0x8035F010 end:0x80360C28 align:16
d/snd/d_snd_control_player_mgr.cpp:
.text start:0x8035F050 end:0x80360C28 align:16
.ctors start:0x804DB914 end:0x804DB918
.data start:0x805487A0 end:0x805487D0
.sbss start:0x80575D40 end:0x80575D58
.sdata2 start:0x8057D390 end:0x8057D3B8
d/snd/mgr/d_snd_mgr_unk3.cpp:
d/snd/d_snd_3d_manager.cpp:
.text start:0x80360C30 end:0x8036145C align:16
.data start:0x805487D0 end:0x805487E0
.sbss start:0x80575D58 end:0x80575D60
.sdata2 start:0x8057D3B8 end:0x8057D3F8
d/snd/mgr/d_snd_mgr_enemy.cpp:
d/snd/d_snd_stage_mgr.cpp:
.text start:0x80361460 end:0x8036642C align:16
.ctors start:0x804DB918 end:0x804DB91C
d/snd/d_snd_unk_component_2.cpp:
.text start:0x80366430 end:0x8037D800 align:16
.text start:0x80366430 end:0x8036A3A4 align:16
d/snd/mgr/d_snd_mgr_effect.cpp:
d/snd/d_snd_area_sound_effect_mgr.cpp:
.text start:0x8036A3B0 end:0x8036B8D0 align:16
.data start:0x80548B38 end:0x80548B48
.sbss start:0x80575D78 end:0x80575D80
.sdata2 start:0x8057D8B0 end:0x8057D8E8
d/snd/d_snd_area_sound.cpp:
.text start:0x8036B8D0 end:0x8036C090 align:16
.data start:0x80548B48 end:0x80548B78
.sdata2 start:0x8057D8E8 end:0x8057D920
d/snd/d_snd_control_sound.cpp:
.text start:0x8036C090 end:0x8036C444 align:16
.data start:0x80548B78 end:0x80548C38
.sdata2 start:0x8057D920 end:0x8057D938
d/snd/d_snd_control_player.cpp:
.text start:0x8036C450 end:0x8036C6A8 align:16
.data start:0x80548C38 end:0x80548CC8
.sdata2 start:0x8057D938 end:0x8057D940
d/snd/d_snd_bgm_mgr.cpp:
.text start:0x8036C6B0 end:0x803739CC align:16
.sbss start:0x80575D80 end:0x80575D88
.sdata2 start:0x8057D940 end:0x8057D970
d/snd/d_snd_bgm_sound_callbacks.cpp:
.text start:0x803739D0 end:0x80378ECC align:16
.sdata2 start:0x8057D970 end:0x8057DA50
d/snd/d_snd_bgm_sound_boss_callbacks.cpp:
.text start:0x80378ED0 end:0x80379D20 align:16
.sdata2 start:0x8057DA50 end:0x8057DA58
d/snd/d_snd_bgm_sound.cpp:
.text start:0x80379D20 end:0x8037BA68 align:16
.sbss start:0x80575D88 end:0x80575D90
d/snd/d_snd_unk_15.cpp:
.text start:0x8037BA70 end:0x8037D800 align:16
d/snd/d_snd_small_effect_mgr.cpp:
.text start:0x8037D800 end:0x8037F8B4 align:16
.data start:0x805491B8 end:0x805491D0
.sbss start:0x80575D98 end:0x80575DA0
.sdata2 start:0x8057DA80 end:0x8057DAD0
d/snd/mgr/d_snd_mgr_unk_5.cpp:
.text start:0x8037F8C0 end:0x803864C8 align:16
d/snd/d_snd_harp_mgr.cpp:
.text start:0x8037F8C0 end:0x80382150 align:16
.data start:0x805491D0 end:0x805491E0
.sbss start:0x80575DA0 end:0x80575DA8
.sdata2 start:0x8057DAD0 end:0x8057DB48
d/snd/d_snd_anim_sound.cpp:
.text start:0x80382150 end:0x8038240C align:16
.sdata2 start:0x8057DB50 end:0x8057DB68
d/snd/d_snd_source_mgr.cpp:
.text start:0x80382410 end:0x803864C8 align:16
.ctors start:0x804DB91C end:0x804DB920
.sdata start:0x80574310 end:0x805743D0
.sbss start:0x80575DA8 end:0x80575DB0
.sdata2 start:0x8057DB68 end:0x8057DBC0
d/snd/mgr/d_snd_mgr_unk_6.cpp:
.text start:0x803864D0 end:0x8038C408 align:16
d/snd/d_snd_source_group.cpp:
.text start:0x803864D0 end:0x803889BC align:16
.data start:0x8054A680 end:0x8054A7D0
.sdata start:0x805743D0 end:0x80574708
.sdata2 start:0x8057DBC0 end:0x8057DCB0
d/snd/d_snd_source.cpp:
.text start:0x803889C0 end:0x8038C408 align:16
.ctors start:0x804DB920 end:0x804DB924
.data start:0x8054A7D0 end:0x8054AAE8
d/snd/mgr/d_snd_mgr_unk_7.cpp:
d/snd/d_snd_mgr_unk_7.cpp:
.text start:0x8038C410 end:0x8038EBF0 align:16
.ctors start:0x804DB924 end:0x804DB928
d/snd/mgr/d_snd_mgr_unk_8.cpp:
d/snd/d_snd_mgr_unk_8.cpp:
.text start:0x8038EBF0 end:0x8038FF18 align:16
.ctors start:0x804DB928 end:0x804DB92C
d/snd/mgr/d_snd_mgr_unk_9.cpp:
d/snd/d_snd_mgr_unk_9.cpp:
.text start:0x8038FF20 end:0x80390A18 align:16
.ctors start:0x804DB92C end:0x804DB930
d/snd/mgr/d_snd_mgr_unk_10.cpp:
d/snd/d_snd_mgr_unk_10.cpp:
.text start:0x80390A20 end:0x80393DF4 align:16
.ctors start:0x804DB930 end:0x804DB934
d/snd/mgr/d_snd_mgr_unk_11.cpp:
d/snd/d_snd_mgr_unk_11.cpp:
.text start:0x80393E00 end:0x8039A848 align:16
.ctors start:0x804DB934 end:0x804DB938
d/snd/mgr/d_snd_mgr_unk_12.cpp:
d/snd/d_snd_calc_pitch.cpp:
.text start:0x8039A850 end:0x8039A960 align:16
RVL_SDK/kpr/KPR.c:
@@ -2866,6 +2954,9 @@ nw4r/g3d/g3d_scnmdl.cpp:
.rodata start:0x804F7B48 end:0x804F7B58
.data start:0x8056DA70 end:0x8056DAB8
nw4r/g3d/g3d_scnmdl1mat1shp.cpp:
.rodata start:0x804F7B58 end:0x804F7B70
nw4r/g3d/g3d_calcmaterial.cpp:
.text start:0x8045FDB0 end:0x8045FFE4 align:16
@@ -2893,48 +2984,77 @@ nw4r/g3d/g3d_calcvtx.cpp:
.sdata2 start:0x8057EEF0 end:0x8057EEF8
nw4r/snd/snd_AnimSound.cpp:
.text start:0x80461700 end:0x804630D4 align:16
.text start:0x80461700 end:0x80462F18 align:16
.sdata2 start:0x8057EEF8 end:0x8057EF18
nw4r/snd/snd_AnimSoundReader.cpp:
.text start:0x80462F20 end:0x804630D4 align:16
nw4r/snd/snd_AxManager.cpp:
.text start:0x804630E0 end:0x80464880 align:16
.ctors start:0x804DB958 end:0x804DB95C
.sbss start:0x80576650 end:0x80576668
.sdata2 start:0x8057EF18 end:0x8057EF30
.bss start:0x80658F80 end:0x80659390
nw4r/snd/snd_AxVoice.cpp:
.text start:0x80464880 end:0x80467634 align:16
.sdata2 start:0x8057EF30 end:0x8057EF58
nw4r/snd/snd_AxVoiceManager.cpp:
.text start:0x80467640 end:0x80467DC8 align:16
.sbss start:0x80576668 end:0x80576670
.bss start:0x80659390 end:0x806593C8
nw4r/snd/snd_AxfxImpl.cpp:
.text start:0x80467DD0 end:0x80467FC8 align:16
.sbss start:0x80576670 end:0x80576678
nw4r/snd/snd_Bank.cpp:
.text start:0x80467FD0 end:0x80468248 align:16
.sdata2 start:0x8057EF58 end:0x8057EF78
nw4r/snd/snd_BankFile.cpp:
.text start:0x80468250 end:0x8046890C align:16
.sdata2 start:0x8057EF78 end:0x8057EF80
nw4r/snd/snd_BasicPlayer.cpp:
.text start:0x80468910 end:0x80468B50 align:16
.data start:0x8056DB38 end:0x8056DB60
.sdata2 start:0x8057EF80 end:0x8057EF88
nw4r/snd/snd_BasicSound.cpp:
.text start:0x80468B50 end:0x8046A36C align:16
.ctors start:0x804DB95C end:0x804DB960
.data start:0x8056DB60 end:0x8056DB98
.sbss start:0x80576678 end:0x80576680
.sdata2 start:0x8057EF88 end:0x8057EF98
nw4r/snd/snd_BiquadFilterPreset.cpp:
.text start:0x8046A370 end:0x8046A7B0 align:16
.rodata start:0x804F7B80 end:0x804F8FB8
.data start:0x8056DB98 end:0x8056DBE8
.sdata2 start:0x8057EF98 end:0x8057EFA8
nw4r/snd/snd_Channel.cpp:
.text start:0x8046A7B0 end:0x8046B7C8 align:16
.sbss start:0x80576680 end:0x80576688
.sdata2 start:0x8057EFA8 end:0x8057EFD0
.bss start:0x806593C8 end:0x806593F8
nw4r/snd/snd_DisposeCallbackManager.cpp:
.text start:0x8046B7D0 end:0x8046BB5C align:16
.sbss start:0x80576688 end:0x80576690
.bss start:0x806593F8 end:0x80659410
nw4r/snd/snd_DvdSoundArchive.cpp:
.text start:0x8046BB60 end:0x8046C1C8 align:16
.data start:0x8056DBE8 end:0x8056DC70
nw4r/snd/snd_EnvGenerator.cpp:
.text start:0x8046C1D0 end:0x8046C5A0 align:16
.rodata start:0x804F8FB8 end:0x804F92B8
.sdata2 start:0x8057EFD0 end:0x8057F000
nw4r/snd/snd_ExternalSoundPlayer.cpp:
.text start:0x8046C5A0 end:0x8046CB18 align:16
@@ -2944,77 +3064,114 @@ nw4r/snd/snd_FrameHeap.cpp:
nw4r/snd/snd_FxReverbStdDpl2.cpp:
.text start:0x8046D2E0 end:0x8046DA10 align:16
.data start:0x8056DC70 end:0x8056DC98
.sdata2 start:0x8057F000 end:0x8057F018
nw4r/snd/snd_InstancePool.cpp:
.text start:0x8046DA10 end:0x8046DCF8 align:16
nw4r/snd/snd_Lfo.cpp:
.text start:0x8046DD00 end:0x8046DF08 align:16
.rodata start:0x804F92B8 end:0x804F92E0
.sdata2 start:0x8057F018 end:0x8057F048
nw4r/snd/snd_MemorySoundArchive.cpp:
.text start:0x8046DF10 end:0x8046E3B0 align:16
.data start:0x8056DC98 end:0x8056DD18
nw4r/snd/snd_MidiSeqPlayer.cpp:
.text start:0x8046E3B0 end:0x8046E458 align:16
nw4r/snd/snd_MmlParser.cpp:
.text start:0x8046E460 end:0x8046F63C align:16
.data start:0x8056DD18 end:0x8056DF48
.sdata start:0x80574E90 end:0x80574EA0
.sbss start:0x80576690 end:0x80576698
.sdata2 start:0x8057F048 end:0x8057F068
nw4r/snd/snd_MmlSeqTrack.cpp:
.text start:0x8046F640 end:0x8046F6F8 align:16
.data start:0x8056DF48 end:0x8056DF58
nw4r/snd/snd_MmlSeqTrackAllocator.cpp:
.text start:0x8046F700 end:0x8046F850 align:16
.data start:0x8056DF58 end:0x8056DF70
nw4r/snd/snd_NandSoundArchive.cpp:
.text start:0x8046F850 end:0x804700B8 align:16
.data start:0x8056DF70 end:0x8056DFF0
.sbss start:0x80576698 end:0x805766A0
nw4r/snd/snd_PlayerHeap.cpp:
.text start:0x804700C0 end:0x804702DC align:16
.data start:0x8056DFF0 end:0x8056E000
nw4r/snd/snd_RemoteSpeaker.cpp:
.text start:0x804702E0 end:0x80470C90 align:16
nw4r/snd/snd_RemoteSpeakerManager.cpp:
.text start:0x80470C90 end:0x80470ED8 align:16
.sbss start:0x805766A0 end:0x805766A8
.bss start:0x80659410 end:0x806596E8
nw4r/snd/snd_SeqFile.cpp:
.text start:0x80470EE0 end:0x80471018 align:16
nw4r/snd/snd_SeqPlayer.cpp:
.text start:0x80471020 end:0x804727F8 align:16
.data start:0x8056E000 end:0x8056E088
.sdata2 start:0x8057F068 end:0x8057F080
.bss start:0x806596E8 end:0x80659708
nw4r/snd/snd_SeqSound.cpp:
.text start:0x80472800 end:0x8047316C align:16
.ctors start:0x804DB960 end:0x804DB964
.data start:0x8056E088 end:0x8056E0D8
.sbss start:0x805766A8 end:0x805766B0
nw4r/snd/snd_SeqSoundHandle.cpp:
.text start:0x80473170 end:0x804732A8 align:16
nw4r/snd/snd_SeqTrack.cpp:
.text start:0x804732B0 end:0x80474818 align:16
.rodata start:0x804F92E0 end:0x804F9308
.data start:0x8056E0D8 end:0x8056E0E8
.sdata2 start:0x8057F080 end:0x8057F0B0
nw4r/snd/snd_Sound3DActor.cpp:
.text start:0x80474820 end:0x80474BD8 align:16
.rodata start:0x804F9308 end:0x804F9320
.data start:0x8056E0E8 end:0x8056E118
.sdata2 start:0x8057F0B0 end:0x8057F0B8
nw4r/snd/snd_Sound3DCalculator.cpp:
.text start:0x80474BE0 end:0x804756B0 align:16
.sdata2 start:0x8057F0B8 end:0x8057F100
nw4r/snd/snd_Sound3DEngine.cpp:
.text start:0x804756B0 end:0x804759F8 align:16
.data start:0x8056E118 end:0x8056E138
.sdata2 start:0x8057F100 end:0x8057F118
nw4r/snd/snd_Sound3DListener.cpp:
.text start:0x80475A00 end:0x80475C88 align:16
.sdata2 start:0x8057F118 end:0x8057F128
nw4r/snd/snd_Sound3DManager.cpp:
.text start:0x80475C90 end:0x80475F78 align:16
.ctors start:0x804DB964 end:0x804DB968
.data start:0x8056E138 end:0x8056E170
.sdata2 start:0x8057F128 end:0x8057F130
.bss start:0x80659708 end:0x80659720
nw4r/snd/snd_SoundActor.cpp:
.text start:0x80475F80 end:0x80476264 align:16
.text start:0x80475F80 end:0x80476278 align:16
.data start:0x8056E170 end:0x8056E190
.sdata2 start:0x8057F130 end:0x8057F138
nw4r/snd/snd_SoundArchive.cpp:
.text start:0x80476270 end:0x8047697C align:16
.text start:0x80476280 end:0x8047697C align:16
.data start:0x8056E190 end:0x8056E1B0
nw4r/snd/snd_SoundArchiveFile.cpp:
.text start:0x80476980 end:0x80477C90 align:16
@@ -3024,15 +3181,21 @@ nw4r/snd/snd_SoundArchiveLoader.cpp:
nw4r/snd/snd_SoundArchivePlayer.cpp:
.text start:0x80478560 end:0x8047B018 align:16
.data start:0x8056E1B0 end:0x8056E200
.sdata2 start:0x8057F138 end:0x8057F148
nw4r/snd/snd_SoundHandle.cpp:
.text start:0x8047B020 end:0x8047B110 align:16
nw4r/snd/snd_SoundHeap.cpp:
.text start:0x8047B110 end:0x8047B418 align:16
.data start:0x8056E200 end:0x8056E210
nw4r/snd/snd_SoundPlayer.cpp:
.text start:0x8047B420 end:0x8047C050 align:16
.sbss start:0x805766B0 end:0x805766B8
.sdata2 start:0x8057F148 end:0x8057F150
.bss start:0x80659720 end:0x80659D40
nw4r/snd/snd_SoundStartable.cpp:
.text start:0x8047C050 end:0x8047C3AC align:16
@@ -3040,9 +3203,15 @@ nw4r/snd/snd_SoundStartable.cpp:
nw4r/snd/snd_SoundSystem.cpp:
.text start:0x8047C3B0 end:0x8047C708 align:16
.ctors start:0x804DB968 end:0x804DB96C
.data start:0x8056E210 end:0x8056E258
.sdata start:0x80574EA0 end:0x80574EA8
.sbss start:0x805766B8 end:0x805766C0
.bss start:0x80659D40 end:0x8066F660
nw4r/snd/snd_SoundThread.cpp:
.text start:0x8047C710 end:0x8047CD10 align:16
.sbss start:0x805766C0 end:0x805766C8
.bss start:0x8066F660 end:0x8066FA20
nw4r/snd/snd_StrmChannel.cpp:
.text start:0x8047CD10 end:0x8047CF50 align:16
@@ -3052,10 +3221,17 @@ nw4r/snd/snd_StrmFile.cpp:
nw4r/snd/snd_StrmPlayer.cpp:
.text start:0x8047D8E0 end:0x80480588 align:16
.data start:0x8056E258 end:0x8056E2D0
.sbss start:0x805766C8 end:0x805766D0
.sdata2 start:0x8057F150 end:0x8057F178
.bss start:0x8066FA20 end:0x80673A38
nw4r/snd/snd_StrmSound.cpp:
.text start:0x80480590 end:0x80480D8C align:16
.ctors start:0x804DB96C end:0x804DB970
.data start:0x8056E2D0 end:0x8056E308
.sbss start:0x805766D0 end:0x805766D8
.sdata2 start:0x8057F178 end:0x8057F188
nw4r/snd/snd_StrmSoundHandle.cpp:
.text start:0x80480D90 end:0x80480EC8 align:16
@@ -3065,34 +3241,52 @@ nw4r/snd/snd_Task.cpp:
nw4r/snd/snd_TaskManager.cpp:
.text start:0x80480F10 end:0x804815D0 align:16
.sbss start:0x805766D8 end:0x805766E0
.bss start:0x80673A38 end:0x80673A80
nw4r/snd/snd_TaskThread.cpp:
.text start:0x804815D0 end:0x80481798 align:16
nw4r/snd/snd_Voice.cpp:
.text start:0x804817A0 end:0x80484034 align:16
.data start:0x8056E308 end:0x8056E340
.sdata2 start:0x8057F188 end:0x8057F1C0
nw4r/snd/snd_VoiceManager.cpp:
.text start:0x80484040 end:0x804846F4 align:16
.sbss start:0x805766E0 end:0x805766E8
.bss start:0x80673A80 end:0x80673AA8
nw4r/snd/snd_Util.cpp:
.text start:0x80484700 end:0x80484BD4 align:16
.rodata start:0x804F9320 end:0x804FB7A0
.data start:0x8056E340 end:0x8056E350
.sdata start:0x80574EA8 end:0x80574EB0
.sdata2 start:0x8057F1C0 end:0x8057F1F0
nw4r/snd/snd_WaveArchive.cpp:
.text start:0x80484BE0 end:0x80484CE8 align:16
nw4r/snd/snd_WaveFile.cpp:
.text start:0x80484BE0 end:0x80484F54 align:16
.text start:0x80484CF0 end:0x80484F54 align:16
nw4r/snd/snd_WaveSound.cpp:
.text start:0x80484F60 end:0x8048531C align:16
.ctors start:0x804DB970 end:0x804DB974
.data start:0x8056E350 end:0x8056E388
.sbss start:0x805766E8 end:0x805766F0
nw4r/snd/snd_WaveSoundHandle.cpp:
.text start:0x80485320 end:0x80485458 align:16
nw4r/snd/snd_WsdFile.cpp:
.text start:0x80485460 end:0x80485824 align:16
.sdata2 start:0x8057F1F0 end:0x8057F1F8
nw4r/snd/snd_WsdPlayer.cpp:
.text start:0x80485830 end:0x804869D8 align:16
.data start:0x8056E388 end:0x8056E3E8
.sdata2 start:0x8057F1F8 end:0x8057F220
nw4r/snd/snd_adpcm.cpp:
.text start:0x804869E0 end:0x80486A6C align:16
+1857 -1859
View File
File diff suppressed because it is too large Load Diff
+126 -115
View File
@@ -313,10 +313,10 @@ def EGGLib(lib_name, objects):
}
def nw4rLib(lib_name, objects, extra_cflags=[]):
def nw4rLib(lib_name, objects, extra_cflags=[], mw_version=None):
return {
"lib": lib_name,
"mw_version": "Wii/1.3", # most seem to be around 1.2, snd is 1.6
"mw_version": mw_version or "Wii/1.3", # most seem to be around 1.2, snd is 1.6
"cflags": cflags_nw4r + extra_cflags,
"progress_category": "nw4r",
"host": False,
@@ -387,7 +387,7 @@ config.libs = [
Object(NonMatching, "toBeSorted/d_shadow.cpp"),
Object(NonMatching, "toBeSorted/d_unk_mdl_stuff_1.cpp"),
Object(NonMatching, "toBeSorted/d_unk_mdl_stuff_2.cpp"),
Object(NonMatching, "toBeSorted/blur_and_palette_manager.cpp"),
Object(Matching, "d/d_light_env.cpp"),
Object(NonMatching, "toBeSorted/d_emitter.cpp"),
Object(NonMatching, "toBeSorted/d_effects_2.cpp"),
Object(NonMatching, "toBeSorted/sound_info.cpp"),
@@ -435,7 +435,7 @@ config.libs = [
Object(NonMatching, "toBeSorted/arc_managers/oarc_control.cpp"),
Object(Matching, "toBeSorted/arc_managers/layout_arc_manager.cpp"),
Object(NonMatching, "toBeSorted/arc_managers/layout_arc_control.cpp"),
Object(NonMatching, "toBeSorted/base_tables.cpp"),
Object(Matching, "toBeSorted/actor_info.cpp"),
Object(NonMatching, "toBeSorted/unk_vec_math.cpp"),
Object(NonMatching, "toBeSorted/unk_mdl_cc.cpp"),
Object(NonMatching, "toBeSorted/d_camera.cpp"),
@@ -700,26 +700,39 @@ config.libs = [
"progress_category": "game",
"host": False,
"objects": [
# These are very low quality splits since nobody has figured
# out enough detail. Need to look into nw4r::snd first
Object(NonMatching, "d/snd/d_snd.cpp"),
Object(NonMatching, "d/snd/d_snd_actor.cpp"),
Object(NonMatching, "d/snd/d_snd_engine.cpp"),
Object(NonMatching, "d/snd/d_snd_unk_component_1.cpp"),
Object(NonMatching, "d/snd/mgr/d_snd_mgr_bgm.cpp"),
Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk1.cpp"),
Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk3.cpp"),
Object(NonMatching, "d/snd/mgr/d_snd_mgr_enemy.cpp"),
Object(NonMatching, "d/snd/d_snd_mgr.cpp"),
Object(Matching, "d/snd/d_snd_actor.cpp"),
Object(NonMatching, "d/snd/d_snd_3d_actor.cpp"),
Object(NonMatching, "d/snd/d_snd_3d_engine.cpp"),
Object(Matching, "d/snd/d_snd_sound.cpp"),
Object(NonMatching, "d/snd/d_snd_player_mgr.cpp"),
Object(NonMatching, "d/snd/d_snd_control_player_mgr.cpp"),
Object(Matching, "d/snd/d_snd_3d_manager.cpp"),
# this one is a bit weird. it deals with all the stage definitions,
# but it's not actually the bgm manager?
Object(NonMatching, "d/snd/d_snd_stage_mgr.cpp"),
Object(NonMatching, "d/snd/d_snd_unk_component_2.cpp"),
Object(NonMatching, "d/snd/mgr/d_snd_mgr_effect.cpp"),
Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk_5.cpp"),
Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk_6.cpp"),
Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk_7.cpp"),
Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk_8.cpp"),
Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk_9.cpp"),
Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk_10.cpp"),
Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk_11.cpp"),
Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk_12.cpp"),
Object(NonMatching, "d/snd/d_snd_area_sound_effect_mgr.cpp"),
Object(NonMatching, "d/snd/d_snd_area_sound.cpp"),
Object(Matching, "d/snd/d_snd_control_sound.cpp"),
Object(Matching, "d/snd/d_snd_control_player.cpp"),
Object(NonMatching, "d/snd/d_snd_bgm_mgr.cpp"),
Object(NonMatching, "d/snd/d_snd_bgm_sound_callbacks.cpp"),
Object(NonMatching, "d/snd/d_snd_bgm_sound_boss_callbacks.cpp"),
Object(NonMatching, "d/snd/d_snd_bgm_sound.cpp"),
Object(NonMatching, "d/snd/d_snd_unk_15.cpp"),
Object(NonMatching, "d/snd/d_snd_small_effect_mgr.cpp"),
Object(NonMatching, "d/snd/d_snd_harp_mgr.cpp"),
Object(NonMatching, "d/snd/d_snd_anim_sound.cpp"),
Object(NonMatching, "d/snd/d_snd_source_mgr.cpp"),
Object(NonMatching, "d/snd/d_snd_source_group.cpp"),
Object(NonMatching, "d/snd/d_snd_source.cpp"),
Object(NonMatching, "d/snd/d_snd_mgr_unk_7.cpp"),
Object(NonMatching, "d/snd/d_snd_mgr_unk_8.cpp"),
Object(NonMatching, "d/snd/d_snd_mgr_unk_9.cpp"),
Object(NonMatching, "d/snd/d_snd_mgr_unk_10.cpp"),
Object(NonMatching, "d/snd/d_snd_mgr_unk_11.cpp"),
Object(NonMatching, "d/snd/d_snd_calc_pitch.cpp"),
],
},
{
@@ -999,7 +1012,7 @@ config.libs = [
Object(Matching, "nw4r/g3d/g3d_scnmdl.cpp"),
# Object(NonMatching, "nw4r/g3d/g3d_scnchoice.cpp"),
# Object(NonMatching, "nw4r/g3d/g3d_scngroupex.cpp"),
# Object(NonMatching, "nw4r/g3d/g3d_scnmdl1mat1shp.cpp"),
Object(Matching, "nw4r/g3d/g3d_scnmdl1mat1shp.cpp"),
# Object(NonMatching, "nw4r/g3d/g3d_scnmdlexpand.cpp"),
Object(Matching, "nw4r/g3d/g3d_calcmaterial.cpp"),
Object(Matching, "nw4r/g3d/g3d_init.cpp"),
@@ -1012,81 +1025,83 @@ config.libs = [
nw4rLib(
"snd",
[
Object(NonMatching, "nw4r/snd/snd_AnimSound.cpp"),
Object(NonMatching, "nw4r/snd/snd_AxManager.cpp"),
Object(NonMatching, "nw4r/snd/snd_AxVoice.cpp"),
Object(NonMatching, "nw4r/snd/snd_AxVoiceManager.cpp"),
Object(NonMatching, "nw4r/snd/snd_AxfxImpl.cpp"),
Object(NonMatching, "nw4r/snd/snd_Bank.cpp"),
Object(NonMatching, "nw4r/snd/snd_BankFile.cpp"),
Object(NonMatching, "nw4r/snd/snd_BasicPlayer.cpp"),
Object(NonMatching, "nw4r/snd/snd_BasicSound.cpp"),
Object(NonMatching, "nw4r/snd/snd_BiquadFilterPreset.cpp"),
Object(NonMatching, "nw4r/snd/snd_Channel.cpp"),
Object(NonMatching, "nw4r/snd/snd_DisposeCallbackManager.cpp"),
Object(NonMatching, "nw4r/snd/snd_debug.cpp"),
Object(NonMatching, "nw4r/snd/snd_DvdSoundArchive.cpp"),
Object(NonMatching, "nw4r/snd/snd_EnvGenerator.cpp"),
Object(NonMatching, "nw4r/snd/snd_ExternalSoundPlayer.cpp"),
Object(NonMatching, "nw4r/snd/snd_FrameHeap.cpp"),
Object(NonMatching, "nw4r/snd/snd_FxBase.cpp"),
Object(NonMatching, "nw4r/snd/snd_FxChorus.cpp"),
Object(NonMatching, "nw4r/snd/snd_FxDelay.cpp"),
Object(NonMatching, "nw4r/snd/snd_FxReverbHi.cpp"),
Object(NonMatching, "nw4r/snd/snd_FxReverbHiDpl2.cpp"),
Object(NonMatching, "nw4r/snd/snd_FxReverbStd.cpp"),
Object(NonMatching, "nw4r/snd/snd_FxReverbStdDpl2.cpp"),
Object(NonMatching, "nw4r/snd/snd_InstancePool.cpp"),
Object(NonMatching, "nw4r/snd/snd_Lfo.cpp"),
Object(NonMatching, "nw4r/snd/snd_MemorySoundArchive.cpp"),
Object(NonMatching, "nw4r/snd/snd_MidiSeqPlayer.cpp"),
Object(NonMatching, "nw4r/snd/snd_MmlParser.cpp"),
Object(NonMatching, "nw4r/snd/snd_MmlSeqTrack.cpp"),
Object(NonMatching, "nw4r/snd/snd_MmlSeqTrackAllocator.cpp"),
Object(NonMatching, "nw4r/snd/snd_NandSoundArchive.cpp"),
Object(NonMatching, "nw4r/snd/snd_PlayerHeap.cpp"),
Object(NonMatching, "nw4r/snd/snd_RemoteSpeaker.cpp"),
Object(NonMatching, "nw4r/snd/snd_RemoteSpeakerManager.cpp"),
Object(NonMatching, "nw4r/snd/snd_SeqFile.cpp"),
Object(NonMatching, "nw4r/snd/snd_SeqPlayer.cpp"),
Object(NonMatching, "nw4r/snd/snd_SeqSound.cpp"),
Object(NonMatching, "nw4r/snd/snd_SeqSoundHandle.cpp"),
Object(NonMatching, "nw4r/snd/snd_SeqTrack.cpp"),
Object(NonMatching, "nw4r/snd/snd_Sound3DActor.cpp"),
Object(NonMatching, "nw4r/snd/snd_Sound3DCalculator.cpp"),
Object(NonMatching, "nw4r/snd/snd_Sound3DEngine.cpp"),
Object(NonMatching, "nw4r/snd/snd_Sound3DListener.cpp"),
Object(NonMatching, "nw4r/snd/snd_Sound3DManager.cpp"),
Object(NonMatching, "nw4r/snd/snd_SoundActor.cpp"),
Object(NonMatching, "nw4r/snd/snd_SoundArchive.cpp"),
Object(NonMatching, "nw4r/snd/snd_SoundArchiveFile.cpp"),
Object(NonMatching, "nw4r/snd/snd_SoundArchiveLoader.cpp"),
Object(NonMatching, "nw4r/snd/snd_SoundArchivePlayer.cpp"),
Object(NonMatching, "nw4r/snd/snd_SoundHandle.cpp"),
Object(NonMatching, "nw4r/snd/snd_SoundHeap.cpp"),
Object(NonMatching, "nw4r/snd/snd_SoundPlayer.cpp"),
Object(NonMatching, "nw4r/snd/snd_SoundStartable.cpp"),
Object(NonMatching, "nw4r/snd/snd_SoundSystem.cpp"),
Object(NonMatching, "nw4r/snd/snd_SoundThread.cpp"),
Object(NonMatching, "nw4r/snd/snd_StrmChannel.cpp"),
Object(NonMatching, "nw4r/snd/snd_StrmFile.cpp"),
Object(NonMatching, "nw4r/snd/snd_StrmPlayer.cpp"),
Object(NonMatching, "nw4r/snd/snd_StrmSound.cpp"),
Object(NonMatching, "nw4r/snd/snd_StrmSoundHandle.cpp"),
Object(NonMatching, "nw4r/snd/snd_Task.cpp"),
Object(NonMatching, "nw4r/snd/snd_TaskManager.cpp"),
Object(NonMatching, "nw4r/snd/snd_TaskThread.cpp"),
Object(NonMatching, "nw4r/snd/snd_Voice.cpp"),
Object(NonMatching, "nw4r/snd/snd_VoiceManager.cpp"),
Object(NonMatching, "nw4r/snd/snd_Util.cpp"),
Object(NonMatching, "nw4r/snd/snd_WaveArchive.cpp"),
Object(NonMatching, "nw4r/snd/snd_WaveFile.cpp"),
Object(NonMatching, "nw4r/snd/snd_WaveSound.cpp"),
Object(NonMatching, "nw4r/snd/snd_WaveSoundHandle.cpp"),
Object(NonMatching, "nw4r/snd/snd_WsdFile.cpp"),
Object(NonMatching, "nw4r/snd/snd_WsdPlayer.cpp"),
Object(NonMatching, "nw4r/snd/snd_adpcm.cpp"),
Object(Matching, "nw4r/snd/snd_AnimSound.cpp"),
Object(Matching, "nw4r/snd/snd_AnimSoundReader.cpp"),
Object(Matching, "nw4r/snd/snd_AxManager.cpp"),
Object(Matching, "nw4r/snd/snd_AxVoice.cpp"),
Object(Matching, "nw4r/snd/snd_AxVoiceManager.cpp"),
Object(Matching, "nw4r/snd/snd_AxfxImpl.cpp"),
Object(Matching, "nw4r/snd/snd_Bank.cpp"),
Object(Matching, "nw4r/snd/snd_BankFile.cpp"),
Object(Matching, "nw4r/snd/snd_BasicPlayer.cpp"),
Object(Matching, "nw4r/snd/snd_BasicSound.cpp"),
Object(Matching, "nw4r/snd/snd_BiquadFilterPreset.cpp"),
Object(Matching, "nw4r/snd/snd_Channel.cpp"),
Object(Matching, "nw4r/snd/snd_DisposeCallbackManager.cpp"),
# Object(NonMatching, "nw4r/snd/snd_debug.cpp"),
Object(Matching, "nw4r/snd/snd_DvdSoundArchive.cpp"),
Object(Matching, "nw4r/snd/snd_EnvGenerator.cpp"),
Object(Matching, "nw4r/snd/snd_ExternalSoundPlayer.cpp"),
Object(Matching, "nw4r/snd/snd_FrameHeap.cpp"),
# Object(NonMatching, "nw4r/snd/snd_FxBase.cpp"),
# Object(NonMatching, "nw4r/snd/snd_FxChorus.cpp"),
# Object(NonMatching, "nw4r/snd/snd_FxDelay.cpp"),
# Object(NonMatching, "nw4r/snd/snd_FxReverbHi.cpp"),
# Object(NonMatching, "nw4r/snd/snd_FxReverbHiDpl2.cpp"),
# Object(NonMatching, "nw4r/snd/snd_FxReverbStd.cpp"),
Object(Matching, "nw4r/snd/snd_FxReverbStdDpl2.cpp"),
Object(Matching, "nw4r/snd/snd_InstancePool.cpp"),
Object(Matching, "nw4r/snd/snd_Lfo.cpp"),
Object(Matching, "nw4r/snd/snd_MemorySoundArchive.cpp"),
Object(Matching, "nw4r/snd/snd_MidiSeqPlayer.cpp"),
Object(Matching, "nw4r/snd/snd_MmlParser.cpp"),
Object(Matching, "nw4r/snd/snd_MmlSeqTrack.cpp"),
Object(Matching, "nw4r/snd/snd_MmlSeqTrackAllocator.cpp"),
Object(Matching, "nw4r/snd/snd_NandSoundArchive.cpp"),
Object(Matching, "nw4r/snd/snd_PlayerHeap.cpp"),
Object(Matching, "nw4r/snd/snd_RemoteSpeaker.cpp"),
Object(Matching, "nw4r/snd/snd_RemoteSpeakerManager.cpp"),
Object(Matching, "nw4r/snd/snd_SeqFile.cpp"),
Object(Matching, "nw4r/snd/snd_SeqPlayer.cpp"),
Object(Matching, "nw4r/snd/snd_SeqSound.cpp"),
Object(Matching, "nw4r/snd/snd_SeqSoundHandle.cpp"),
Object(Matching, "nw4r/snd/snd_SeqTrack.cpp"),
Object(Matching, "nw4r/snd/snd_Sound3DActor.cpp"),
Object(Matching, "nw4r/snd/snd_Sound3DCalculator.cpp"),
Object(Matching, "nw4r/snd/snd_Sound3DEngine.cpp"),
Object(Matching, "nw4r/snd/snd_Sound3DListener.cpp"),
Object(Matching, "nw4r/snd/snd_Sound3DManager.cpp"),
Object(Matching, "nw4r/snd/snd_SoundActor.cpp"),
Object(Matching, "nw4r/snd/snd_SoundArchive.cpp"),
Object(Matching, "nw4r/snd/snd_SoundArchiveFile.cpp"),
Object(Matching, "nw4r/snd/snd_SoundArchiveLoader.cpp"),
Object(Matching, "nw4r/snd/snd_SoundArchivePlayer.cpp"),
Object(Matching, "nw4r/snd/snd_SoundHandle.cpp"),
Object(Matching, "nw4r/snd/snd_SoundHeap.cpp"),
Object(Matching, "nw4r/snd/snd_SoundPlayer.cpp"),
Object(Matching, "nw4r/snd/snd_SoundStartable.cpp"),
Object(Matching, "nw4r/snd/snd_SoundSystem.cpp"),
Object(Matching, "nw4r/snd/snd_SoundThread.cpp"),
Object(Matching, "nw4r/snd/snd_StrmChannel.cpp"),
Object(Matching, "nw4r/snd/snd_StrmFile.cpp"),
Object(Matching, "nw4r/snd/snd_StrmPlayer.cpp"),
Object(Matching, "nw4r/snd/snd_StrmSound.cpp"),
Object(Matching, "nw4r/snd/snd_StrmSoundHandle.cpp"),
Object(Matching, "nw4r/snd/snd_Task.cpp"),
Object(Matching, "nw4r/snd/snd_TaskManager.cpp"),
Object(Matching, "nw4r/snd/snd_TaskThread.cpp"),
Object(Matching, "nw4r/snd/snd_Voice.cpp"),
Object(Matching, "nw4r/snd/snd_VoiceManager.cpp"),
Object(Matching, "nw4r/snd/snd_Util.cpp"),
Object(Matching, "nw4r/snd/snd_WaveArchive.cpp"),
Object(Matching, "nw4r/snd/snd_WaveFile.cpp"),
Object(Matching, "nw4r/snd/snd_WaveSound.cpp"),
Object(Matching, "nw4r/snd/snd_WaveSoundHandle.cpp"),
Object(Matching, "nw4r/snd/snd_WsdFile.cpp"),
Object(Matching, "nw4r/snd/snd_WsdPlayer.cpp"),
Object(Matching, "nw4r/snd/snd_adpcm.cpp"),
],
mw_version="Wii/1.6",
),
nw4rLib(
"lyt",
@@ -1957,9 +1972,9 @@ config.libs = [
Rel(
NonMatching, "d_a_obj_bigbomb_flower", "REL/d/a/obj/d_a_obj_bigbomb_flower.cpp"
),
Rel(NonMatching, "d_a_obj_bird_sp", "REL/d/a/obj/d_a_obj_bird_sp.cpp"),
Rel(Matching, "d_a_obj_bird_sp", "REL/d/a/obj/d_a_obj_bird_sp.cpp"),
Rel(Matching, "d_a_obj_bird_statue", "REL/d/a/obj/d_a_obj_bird_statue.cpp"),
Rel(NonMatching, "d_a_obj_blade", "REL/d/a/obj/d_a_obj_blade.cpp"),
Rel(Matching, "d_a_obj_blade", "REL/d/a/obj/d_a_obj_blade.cpp"),
Rel(NonMatching, "d_a_obj_blast_rock", "REL/d/a/obj/d_a_obj_blast_rock.cpp"),
Rel(NonMatching, "d_a_obj_block_rope", "REL/d/a/obj/d_a_obj_block_rope.cpp"),
Rel(
@@ -2017,7 +2032,7 @@ config.libs = [
"d_a_obj_display_only_nbs",
"REL/d/a/obj/d_a_obj_display_only_nbs.cpp",
),
Rel(NonMatching, "d_a_obj_distant_ship", "REL/d/a/obj/d_a_obj_distant_ship.cpp"),
Rel(Matching, "d_a_obj_distant_ship", "REL/d/a/obj/d_a_obj_distant_ship.cpp"),
Rel(
NonMatching,
"d_a_obj_diviner_crystal",
@@ -2043,12 +2058,8 @@ config.libs = [
),
Rel(NonMatching, "d_a_obj_evil_field", "REL/d/a/obj/d_a_obj_evil_field.cpp"),
Rel(NonMatching, "d_a_obj_F302_light", "REL/d/a/obj/d_a_obj_F302_light.cpp"),
Rel(
NonMatching, "d_a_obj_F400_gate_leaf", "REL/d/a/obj/d_a_obj_F400_gate_leaf.cpp"
),
Rel(
NonMatching, "d_a_obj_F400_gate_seal", "REL/d/a/obj/d_a_obj_F400_gate_seal.cpp"
),
Rel(Matching, "d_a_obj_F400_gate_leaf", "REL/d/a/obj/d_a_obj_F400_gate_leaf.cpp"),
Rel(Matching, "d_a_obj_F400_gate_seal", "REL/d/a/obj/d_a_obj_F400_gate_seal.cpp"),
Rel(NonMatching, "d_a_obj_farmland", "REL/d/a/obj/d_a_obj_farmland.cpp"),
Rel(NonMatching, "d_a_obj_fence", "REL/d/a/obj/d_a_obj_fence.cpp"),
Rel(Matching, "d_a_obj_fence_boko2", "REL/d/a/obj/d_a_obj_fence_boko2.cpp"),
@@ -2104,11 +2115,11 @@ config.libs = [
Rel(NonMatching, "d_a_obj_hit_lever_sw", "REL/d/a/obj/d_a_obj_hit_lever_sw.cpp"),
Rel(NonMatching, "d_a_obj_hole", "REL/d/a/obj/d_a_obj_hole.cpp"),
Rel(NonMatching, "d_a_obj_hole_minigame", "REL/d/a/obj/d_a_obj_hole_minigame.cpp"),
Rel(NonMatching, "d_a_obj_impa_door", "REL/d/a/obj/d_a_obj_impa_door.cpp"),
Rel(Matching, "d_a_obj_impa_door", "REL/d/a/obj/d_a_obj_impa_door.cpp"),
Rel(NonMatching, "d_a_obj_insect_island", "REL/d/a/obj/d_a_obj_insect_island.cpp"),
Rel(NonMatching, "d_a_obj_into_hole", "REL/d/a/obj/d_a_obj_into_hole.cpp"),
Rel(Matching, "d_a_obj_iron_stage", "REL/d/a/obj/d_a_obj_iron_stage.cpp"),
Rel(NonMatching, "d_a_obj_island_LOD", "REL/d/a/obj/d_a_obj_island_LOD.cpp"),
Rel(Matching, "d_a_obj_island_LOD", "REL/d/a/obj/d_a_obj_island_LOD.cpp"),
Rel(Matching, "d_a_obj_island_nusi", "REL/d/a/obj/d_a_obj_island_nusi.cpp"),
Rel(
NonMatching,
@@ -2147,10 +2158,10 @@ config.libs = [
Rel(NonMatching, "d_a_obj_lotus", "REL/d/a/obj/d_a_obj_lotus.cpp"),
Rel(NonMatching, "d_a_obj_lotus_flower", "REL/d/a/obj/d_a_obj_lotus_flower.cpp"),
Rel(NonMatching, "d_a_obj_lotus_seed", "REL/d/a/obj/d_a_obj_lotus_seed.cpp"),
Rel(NonMatching, "d_a_obj_mapparts", "REL/d/a/obj/d_a_obj_mapparts.cpp"),
Rel(Matching, "d_a_obj_mapparts", "REL/d/a/obj/d_a_obj_mapparts.cpp"),
Rel(Matching, "d_a_obj_megami_island", "REL/d/a/obj/d_a_obj_megami_island.cpp"),
Rel(NonMatching, "d_a_obj_mg_pumpkin", "REL/d/a/obj/d_a_obj_mg_pumpkin.cpp"),
Rel(NonMatching, "d_a_obj_mole_cover", "REL/d/a/obj/d_a_obj_mole_cover.cpp"),
Rel(Matching, "d_a_obj_mole_cover", "REL/d/a/obj/d_a_obj_mole_cover.cpp"),
Rel(Matching, "d_a_obj_mole_soil", "REL/d/a/obj/d_a_obj_mole_soil.cpp"),
Rel(NonMatching, "d_a_obj_move_elec", "REL/d/a/obj/d_a_obj_move_elec.cpp"),
Rel(NonMatching, "d_a_obj_move_lift_vol", "REL/d/a/obj/d_a_obj_move_lift_vol.cpp"),
@@ -2180,9 +2191,9 @@ config.libs = [
Rel(Matching, "d_a_obj_pumpkin_bar", "REL/d/a/obj/d_a_obj_pumpkin_bar.cpp"),
Rel(Matching, "d_a_obj_pumpkin_leaf", "REL/d/a/obj/d_a_obj_pumpkin_leaf.cpp"),
Rel(NonMatching, "d_a_obj_push_block", "REL/d/a/obj/d_a_obj_push_block.cpp"),
Rel(NonMatching, "d_a_obj_puzzle_island", "REL/d/a/obj/d_a_obj_puzzle_island.cpp"),
Rel(Matching, "d_a_obj_puzzle_island", "REL/d/a/obj/d_a_obj_puzzle_island.cpp"),
Rel(NonMatching, "d_a_obj_rail_end", "REL/d/a/obj/d_a_obj_rail_end.cpp"),
Rel(NonMatching, "d_a_obj_rail_post", "REL/d/a/obj/d_a_obj_rail_post.cpp"),
Rel(Matching, "d_a_obj_rail_post", "REL/d/a/obj/d_a_obj_rail_post.cpp"),
Rel(NonMatching, "d_a_obj_ride_rock", "REL/d/a/obj/d_a_obj_ride_rock.cpp"),
Rel(Matching, "d_a_obj_ring", "REL/d/a/obj/d_a_obj_ring.cpp"),
Rel(NonMatching, "d_a_obj_rock_boat", "REL/d/a/obj/d_a_obj_rock_boat.cpp"),
@@ -2190,7 +2201,7 @@ config.libs = [
Rel(NonMatching, "d_a_obj_rock_sky", "REL/d/a/obj/d_a_obj_rock_sky.cpp"),
Rel(NonMatching, "d_a_obj_roll_pillar", "REL/d/a/obj/d_a_obj_roll_pillar.cpp"),
Rel(NonMatching, "d_a_obj_roll_rock", "REL/d/a/obj/d_a_obj_roll_rock.cpp"),
Rel(NonMatching, "d_a_obj_rope_base", "REL/d/a/obj/d_a_obj_rope_base.cpp"),
Rel(Matching, "d_a_obj_rope_base", "REL/d/a/obj/d_a_obj_rope_base.cpp"),
Rel(NonMatching, "d_a_obj_rope_igaiga", "REL/d/a/obj/d_a_obj_rope_igaiga.cpp"),
Rel(
NonMatching, "d_a_obj_rotation_light", "REL/d/a/obj/d_a_obj_rotation_light.cpp"
@@ -2293,7 +2304,7 @@ config.libs = [
Rel(NonMatching, "d_a_obj_syako_shutter", "REL/d/a/obj/d_a_obj_syako_shutter.cpp"),
Rel(NonMatching, "d_a_obj_tableware", "REL/d/a/obj/d_a_obj_tableware.cpp"),
Rel(NonMatching, "d_a_obj_tackle", "REL/d/a/obj/d_a_obj_tackle.cpp"),
Rel(NonMatching, "d_a_obj_tarzan_pole", "REL/d/a/obj/d_a_obj_tarzan_pole.cpp"),
Rel(Matching, "d_a_obj_tarzan_pole", "REL/d/a/obj/d_a_obj_tarzan_pole.cpp"),
Rel(NonMatching, "d_a_obj_tenijima", "REL/d/a/obj/d_a_obj_tenijima.cpp"),
Rel(NonMatching, "d_a_obj_teni_rail", "REL/d/a/obj/d_a_obj_teni_rail.cpp"),
Rel(
-37
View File
@@ -1,37 +0,0 @@
#ifndef DECOMP_UNKNOWN_TYPES_H
#define DECOMP_UNKNOWN_TYPES_H
#include "common.h"
// MOST LIKELY mVEC
struct Vec3f {
f32 x, y, z;
};
struct Vec2f {
f32 x, y;
};
struct Vec3s {
s16 x, y, z;
};
struct ObjInfo {
/* 0x00 */ char *name;
/* 0x04 */ u16 obj_id;
/* 0x06 */ u16 obj_id2;
/* 0x08 */ u16 fiTextEntryId;
/* 0x0A */ s8 unk_0xA;
/* 0x0B */ u8 subtype;
};
// is now fLiNdBa_c
// struct ActorReference {
// ActorReference* prev;
// ActorReference* next;
// fBase_c* link;
// };
class UnkCollider {};
#endif
+9 -82
View File
@@ -1,95 +1,22 @@
#ifndef D_A_BASE_H
#define D_A_BASE_H
#include "UnknownTypeBelongings.h"
#include "common.h"
#include "d/d_base.h"
#include "d/snd/d_snd_source_if.h"
#include "m/m_allocator.h"
#include "m/m_angle.h"
#include "m/m_vec.h"
#include "toBeSorted/actor_info.h"
#include "toBeSorted/raii_ptr.h"
#include "toBeSorted/tlist.h"
class dAcBase_c;
struct cBgS_PolyInfo;
struct SoundSource {
virtual ~SoundSource() {}
// TODO there's probably multiple inheritance involved and stuff
#define SOUNDSOURCE_VIRTUAL(offset) virtual void vt_##offset();
SOUNDSOURCE_VIRTUAL(0x0C);
SOUNDSOURCE_VIRTUAL(0x10);
SOUNDSOURCE_VIRTUAL(0x14);
SOUNDSOURCE_VIRTUAL(0x18);
SOUNDSOURCE_VIRTUAL(0x1C);
SOUNDSOURCE_VIRTUAL(0x20);
SOUNDSOURCE_VIRTUAL(0x24);
SOUNDSOURCE_VIRTUAL(0x28);
SOUNDSOURCE_VIRTUAL(0x2C);
SOUNDSOURCE_VIRTUAL(0x30);
SOUNDSOURCE_VIRTUAL(0x34);
SOUNDSOURCE_VIRTUAL(0x38);
SOUNDSOURCE_VIRTUAL(0x3C);
virtual void vt_0x40(s32);
SOUNDSOURCE_VIRTUAL(0x44);
virtual bool shutdown(); // 0x48
SOUNDSOURCE_VIRTUAL(0x4C);
SOUNDSOURCE_VIRTUAL(0x50);
SOUNDSOURCE_VIRTUAL(0x54);
SOUNDSOURCE_VIRTUAL(0x58);
SOUNDSOURCE_VIRTUAL(0x5C);
SOUNDSOURCE_VIRTUAL(0x60);
SOUNDSOURCE_VIRTUAL(0x64);
SOUNDSOURCE_VIRTUAL(0x68);
SOUNDSOURCE_VIRTUAL(0x6C);
SOUNDSOURCE_VIRTUAL(0x70);
SOUNDSOURCE_VIRTUAL(0x74);
SOUNDSOURCE_VIRTUAL(0x78);
SOUNDSOURCE_VIRTUAL(0x7C);
SOUNDSOURCE_VIRTUAL(0x80);
SOUNDSOURCE_VIRTUAL(0x84);
SOUNDSOURCE_VIRTUAL(0x88);
SOUNDSOURCE_VIRTUAL(0x8C);
SOUNDSOURCE_VIRTUAL(0x90);
SOUNDSOURCE_VIRTUAL(0x94);
SOUNDSOURCE_VIRTUAL(0x98);
SOUNDSOURCE_VIRTUAL(0x9C);
SOUNDSOURCE_VIRTUAL(0xA0);
SOUNDSOURCE_VIRTUAL(0xA4);
SOUNDSOURCE_VIRTUAL(0xA8);
SOUNDSOURCE_VIRTUAL(0xAC);
SOUNDSOURCE_VIRTUAL(0xB0);
SOUNDSOURCE_VIRTUAL(0xB4);
SOUNDSOURCE_VIRTUAL(0xB8);
SOUNDSOURCE_VIRTUAL(0xBC);
SOUNDSOURCE_VIRTUAL(0xC0);
SOUNDSOURCE_VIRTUAL(0xC4);
SOUNDSOURCE_VIRTUAL(0xC8);
SOUNDSOURCE_VIRTUAL(0xCC);
SOUNDSOURCE_VIRTUAL(0xD0);
SOUNDSOURCE_VIRTUAL(0xD4);
SOUNDSOURCE_VIRTUAL(0xD8);
SOUNDSOURCE_VIRTUAL(0xDC);
SOUNDSOURCE_VIRTUAL(0xE0);
SOUNDSOURCE_VIRTUAL(0xE4);
SOUNDSOURCE_VIRTUAL(0xE8);
SOUNDSOURCE_VIRTUAL(0xEC);
SOUNDSOURCE_VIRTUAL(0xF0);
SOUNDSOURCE_VIRTUAL(0xF4);
SOUNDSOURCE_VIRTUAL(0xF8);
SOUNDSOURCE_VIRTUAL(0xFC);
virtual bool isReadyMaybe(); // 0x100
virtual bool load(void *data, const char *name); // 0x104
virtual void setFrame(f32 frame); // 0x108
virtual void setRate(f32 frame); // 0x10C
virtual void set_0x164(UNKWORD val); // 0x114
};
struct SoundInfo {
dAcBase_c *actor;
SoundSource *sound_source;
dSoundSourceIf_c *sound_source;
mVec3_c *obj_pos;
TListNode<SoundInfo> mLink;
};
@@ -141,9 +68,9 @@ public:
class dAcBase_c : public dBase_c {
public:
/* 0x68 */ mHeapAllocator_c heap_allocator;
/* 0x84 */ ObjInfo *obj_info;
/* 0x84 */ const ActorInfo *mpActorInfo;
/* 0x88 */ TList<SoundInfo, 12> sound_list;
/* 0x94 */ RaiiPtr<SoundSource> sound_source;
/* 0x94 */ RaiiPtr<dSoundSourceIf_c> sound_source;
/* 0x98 */ mVec3_c *obj_pos;
/* 0x9C */ mVec3_c pos_copy;
/* 0xA8 */ u32 params2;
@@ -249,10 +176,10 @@ public:
// funcs found in TU
/* 8002c650 */ static void setTempCreateParams(
mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, s32 roomId, u32 params2, dAcBase_c *parent, u8 subtype, u16 unkFlag,
s8 viewClipIdx, ObjInfo *objInfo
s8 viewClipIdx, const ActorInfo *actorInfo
);
/* 8002c690 */ SoundSource *FUN_8002c690();
/* 8002c690 */ dSoundSourceIf_c *createSoundSource();
/* 8002c710 */ int initAllocatorWork1Heap(int size, char *name, int align);
/* 8002c720 */ int initAllocator(int size, char *name, EGG::Heap *heap, int align);
/* 8002c7b0 */ bool addActorToRoom(s32 roomId);
@@ -301,7 +228,7 @@ public:
/* 8002d810 */ void FUN_8002d810();
/* 8002d830 */ void FUN_8002d830();
/* 8002d860 */ void FUN_8002d860(UNKWORD val);
/* 8002d880 */ SoundSource *getSoundSource();
/* 8002d880 */ dSoundSourceIf_c *getSoundSource();
// End of SoundSource stuff
/* 8002d890 */ void removeSoundInfo(SoundInfo *);
@@ -339,7 +266,7 @@ public:
/* 80575084 */ static mAng3_c *s_Create_Rotation;
/* 80575088 */ static mVec3_c *s_Create_Scale;
/* 8057508C */ static dAcBase_c *s_Create_Parent;
/* 80575090 */ static ObjInfo *s_Create_ObjInfo;
/* 80575090 */ static const ActorInfo *s_Create_ActorInfo;
/* 80575094 */ static u8 s_Create_Subtype;
};
+8
View File
@@ -26,11 +26,19 @@ public:
STATE_FUNC_DECLARE(dBird_c, MiniGameEnd);
STATE_FUNC_DECLARE(dBird_c, MiniGameLevelUpDemo);
// fn_129_8DD0, only referenced by d_a_obj_bird_sp
void accelerateTowards(mVec3_c &targetDirection);
s16 getNumDashes() const {
return mNumDashes;
}
static dBird_c *getInstance() {
return spInstance;
}
private:
static dBird_c *spInstance;
/* 0x??? */ STATE_MGR_DECLARE(dBird_c);
u8 _0x36C[0xF8E - 0x36C];
/* 0xF8E */ s16 mNumDashes;
+3 -2
View File
@@ -8,18 +8,19 @@
#include "d/col/bg/d_bg_s_acch.h"
#include "d/col/cc/d_cc_d.h"
#include "d/d_jnt_col.h"
#include "d/d_light_env.h"
#include "d/d_shadow.h"
#include "m/m3d/m_anmmatclr.h"
#include "m/m3d/m_anmtexpat.h"
#include "m/m_angle.h"
#include "m/m_vec.h"
#include "s/s_State.hpp"
#include "toBeSorted/blur_and_palette_manager.h"
#include "toBeSorted/d_d3d.h"
#include "toBeSorted/d_emitter.h"
#include "toBeSorted/stage_render_stuff.h"
#include "toBeSorted/time_area_mgr.h"
class dAcEsm_c : public dAcEnBase_c {
public:
enum SmColor_e {
@@ -213,7 +214,7 @@ private:
/* 0xBCC */ u8 field_0xBCC;
/* 0xBCD */ u8 field_0xBCD;
/* 0xBCE */ u8 field_0xBCE;
/* 0xBD0 */ LightParams mLightInfo;
/* 0xBD0 */ LIGHT_INFLUENCE mLightInfo;
static bool sSomeArrayInit;
static bool sSomeArray[9];
+7
View File
@@ -8,7 +8,14 @@ public:
dAcOF400GateLeaf_c() {}
virtual ~dAcOF400GateLeaf_c() {}
virtual bool createHeap() override;
virtual int create() override;
virtual int draw() override;
u16 getStoryflag();
private:
/* 0x330 */ m3d::smdl_c mMdl;
};
#endif
+12
View File
@@ -2,13 +2,25 @@
#define D_A_OBJ_F400_GATE_SEAL_H
#include "d/a/obj/d_a_obj_base.h"
#include "d/a/obj/d_a_obj_door.h"
#include "m/m3d/m_anmmatclr.h"
#include "m/m3d/m_smdl.h"
class dAcOF400GateSeal_c : public dAcObjBase_c {
public:
dAcOF400GateSeal_c() {}
virtual ~dAcOF400GateSeal_c() {}
virtual bool createHeap() override;
virtual int actorCreate() override;
virtual int actorPostCreate() override;
virtual int actorExecute() override;
virtual int draw() override;
private:
/* 0x330 */ m3d::smdl_c mMdl;
/* 0x34C */ m3d::anmMatClr_c mAnmClr;
/* 0x378 */ dAcRef_c<dAcOdoor_c> mDoor;
};
#endif
+3 -28
View File
@@ -7,6 +7,7 @@
#include "d/col/c/c_cc_d.h"
#include "d/col/c/c_m3d_g_aab.h"
#include "d/d_jnt_col.h"
#include "d/d_light_env.h"
#include "d/d_linkage.h"
#include "egg/math/eggMath.h"
#include "m/m3d/m_shadow.h"
@@ -17,32 +18,6 @@
#include "m/m_vec.h"
#include "m/types_m.h"
// Ghidra has it as `unk_ActorObjectBase`
struct LightingInfo {
/* 0x00 */ u8 mField_0x00[0x40 - 0x00];
/* 0x40 */ mColor mTev0Color;
/* 0x44 */ mColor mTev1Color;
/* 0x48 */ mColor mTev2Color;
/* 0x4C */ mColor mTevPrevColor;
/* 0x50 */ mColor mTevK0Color;
/* 0x54 */ mColor mTevK1Color;
/* 0x58 */ mColor mTevK2Color;
/* 0x5C */ mColor mTevK3Color;
/* 0x60 */ u8 mLightingCode;
/* 0x61 */ u8 _0x61;
/* 0x62 */ u8 _0x62;
/* 0x63 */ u8 _0x63;
/* 0x64 */ u8 _0x64;
/* 0x65 */ bool mUseTev0;
/* 0x66 */ bool mUseTev1;
/* 0x67 */ bool mUseTev2;
/* 0x68 */ bool mUseTevPrev;
/* 0x69 */ bool mUseTevK0;
/* 0x6A */ bool mUseTevK1;
/* 0x6B */ bool mUseTevK2;
/* 0x6C */ bool mUseTevK3;
/* 0x6D */ u8 mField_0x69[0x70 - 0x6D];
};
// Ghidra: ActorObjectBase
// size: 0x330
@@ -76,7 +51,7 @@ public:
/* 0x208 */ mAng3_c mStartingRot;
/* 0x210 */ dLinkage_c mLinkage;
/* 0x2B8 */ u32 mField_0x2B8;
/* 0x2BC */ LightingInfo mLightingInfo;
/* 0x2BC */ ActorLighting mLightingInfo;
/* 0x32C */ u32 mField_0x32C;
public:
@@ -195,7 +170,7 @@ public:
u32 roomId
);
/* 8002efa0 */ void fn_8002efa0();
/* 8002eff0 */ bool fn_8002eff0(f32 *, s16 *, UnkCollider *, f32 *, f32 *);
/* 8002eff0 */ bool fn_8002eff0(f32 *, s16 *, f32 *, f32 *, f32 *);
/* 8002f190 */ void createChildAttached2(
fProfile::PROFILE_NAME_e actorId, u32 params1, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, u32 params2,
u32 roomId
+8
View File
@@ -2,13 +2,21 @@
#define D_A_OBJ_BIRD_SP_H
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/cc/d_cc_d.h"
class dAcObjBirdSp_c : public dAcObjBase_c {
public:
dAcObjBirdSp_c() {}
virtual ~dAcObjBirdSp_c() {}
virtual bool createHeap() override;
virtual int create() override;
virtual int actorExecute() override;
virtual int draw() override;
private:
static dCcD_SrcSph sCcSrc;
/* 0x330 */ dCcD_Sph mCollider;
};
#endif
+10
View File
@@ -2,13 +2,23 @@
#define D_A_OBJ_BLADE_H
#include "d/a/obj/d_a_obj_base.h"
#include "m/m3d/m_anmmdl.h"
#include "nw4r/g3d/res/g3d_resfile.h"
class dAcOblade_c : public dAcObjBase_c {
public:
dAcOblade_c() {}
virtual ~dAcOblade_c() {}
virtual bool createHeap() override;
virtual int create() override;
virtual int doDelete() override;
virtual int actorExecute() override;
virtual int draw() override;
private:
/* 0x330 */ nw4r::g3d::ResFile mResFile;
/* 0x334 */ m3d::mdlAnmChr mMdl;
};
#endif
+12
View File
@@ -2,13 +2,25 @@
#define D_A_OBJ_DISTANT_SHIP_H
#include "d/a/obj/d_a_obj_base.h"
#include "m/m3d/m_smdl.h"
#include "nw4r/g3d/res/g3d_resfile.h"
class dAcOdistantShip_c : public dAcObjBase_c {
public:
dAcOdistantShip_c() {}
virtual ~dAcOdistantShip_c() {}
virtual int create() override;
virtual int doDelete() override;
virtual int draw() override;
virtual bool createHeap() override;
virtual int actorExecute() override;
const char *getModelName();
private:
/* 0x330 */ nw4r::g3d::ResFile mBrres;
/* 0x334 */ m3d::smdl_c mModel;
/* 0x350 */ u8 mSubtype;
/* 0x351 */ bool mIsVisible;
};
#endif
+2
View File
@@ -8,6 +8,8 @@ public:
dAcOdoor_c() {}
virtual ~dAcOdoor_c() {}
bool isLocked();
private:
};
+15 -2
View File
@@ -2,19 +2,32 @@
#define D_A_OBJ_GIRAHIM_FOOT_H
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_s_acch.h"
#include "d/d_shadow.h"
#include "m/m3d/m_smdl.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
class dAcOgirahimFoot_c : public dAcObjBase_c {
public:
dAcOgirahimFoot_c() : mStateMgr(*this, sStateID::null) {}
virtual ~dAcOgirahimFoot_c() {}
virtual int create() override;
virtual int doDelete() override;
virtual int draw() override;
virtual bool createHeap() override;
virtual int actorExecute() override;
STATE_FUNC_DECLARE(dAcOgirahimFoot_c, Wait);
STATE_FUNC_DECLARE(dAcOgirahimFoot_c, Appear);
private:
/* 0x??? */ STATE_MGR_DECLARE(dAcOgirahimFoot_c);
/* 0x330 */ nw4r::g3d::ResFile mRes;
/* 0x334 */ m3d::smdl_c mMdl;
/* 0x350 */ dShadowCircle_c mShadow;
/* 0x358 */ STATE_MGR_DECLARE(dAcOgirahimFoot_c);
/* 0x394 */ bool field_0x394;
};
#endif
+11 -2
View File
@@ -2,8 +2,9 @@
#define D_A_OBJ_IMPA_DOOR_H
#include "d/a/obj/d_a_obj_base.h"
#include "m/m3d/m_smdl.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
class dAcOimpaDoor_c : public dAcObjBase_c {
public:
@@ -12,8 +13,16 @@ public:
STATE_FUNC_DECLARE(dAcOimpaDoor_c, Wait);
virtual bool createHeap() override;
virtual int create() override;
virtual int doDelete() override;
virtual int actorExecute() override;
virtual int draw() override;
private:
/* 0x??? */ STATE_MGR_DECLARE(dAcOimpaDoor_c);
/* 0x330 */ nw4r::g3d::ResFile mResFile;
/* 0x334 */ m3d::smdl_c mMdl;
/* 0x350 */ STATE_MGR_DECLARE(dAcOimpaDoor_c);
};
#endif
+12
View File
@@ -8,7 +8,19 @@ public:
dAcOislandLOD_c() {}
virtual ~dAcOislandLOD_c() {}
virtual bool createHeap() override;
virtual int create() override;
virtual int doDelete() override;
virtual int actorExecute() override;
virtual int draw() override;
private:
static const char* const resFilenames[5];
static const char* const resMdlNames[5];
/* 0x330 */ nw4r::g3d::ResFile mResFile;
/* 0x334 */ m3d::smdl_c mMdl;
/* 0x350 */ u8 mMdlLodIdx;
};
#endif
+2
View File
@@ -8,6 +8,8 @@ public:
dAcOMapparts_c() {}
virtual ~dAcOMapparts_c() {}
virtual int create() override;
private:
};
+12
View File
@@ -2,13 +2,25 @@
#define D_A_OBJ_MOLE_COVER_H
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_w.h"
#include "m/m3d/m_smdl.h"
#include "nw4r/g3d/res/g3d_resfile.h"
class dAcOmoleCover_c : public dAcObjBase_c {
public:
dAcOmoleCover_c() {}
virtual ~dAcOmoleCover_c() {}
virtual bool createHeap() override;
virtual int create() override;
virtual int doDelete() override;
virtual int actorExecute() override;
virtual int draw() override;
private:
/* 0x330 */ nw4r::g3d::ResFile mResFile;
/* 0x334 */ m3d::smdl_c mMdl;
/* 0x350 */ dBgW mBgW;
};
#endif
+13
View File
@@ -2,13 +2,26 @@
#define D_A_OBJ_PUZZLE_ISLAND_H
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_w.h"
#include "m/m3d/m_smdl.h"
class dAcOpuzzleIsland_c : public dAcObjBase_c {
public:
dAcOpuzzleIsland_c() {}
virtual ~dAcOpuzzleIsland_c() {}
virtual bool createHeap() override;
virtual int create() override;
virtual int doDelete() override;
virtual int actorExecute() override;
virtual int draw() override;
static void rideCallback(dBgW *, dAcObjBase_c *, dAcObjBase_c *);
private:
/* 0x330 */ m3d::smdl_c mMdl;
/* 0x34C */ nw4r::g3d::ResFile mResFile;
/* 0x350 */ dBgW mBgW;
};
#endif
+9
View File
@@ -2,13 +2,22 @@
#define D_A_OBJ_RAIL_POST_H
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_w.h"
class dAcORailPost : public dAcObjBase_c {
public:
dAcORailPost();
virtual ~dAcORailPost();
virtual bool createHeap() override;
virtual int create() override;
virtual int doDelete() override;
virtual int actorExecute() override;
virtual int draw() override;
private:
/* 0x330 */ m3d::smdl_c mMdl;
/* 0x350 */ dBgW mBgW;
};
#endif
+13
View File
@@ -2,13 +2,26 @@
#define D_A_OBJ_ROPE_BASE_H
#include "d/a/obj/d_a_obj_base.h"
#include "m/m3d/m_smdl.h"
#include "m/m_vec.h"
#include "nw4r/g3d/res/g3d_resfile.h"
class dAcOropeBase_c : public dAcObjBase_c {
public:
dAcOropeBase_c() {}
virtual ~dAcOropeBase_c() {}
virtual bool createHeap() override;
virtual int create() override;
virtual int doDelete() override;
virtual int actorExecute() override;
virtual int draw() override;
private:
/* 0x330 */ nw4r::g3d::ResFile mResFile;
/* 0x334 */ m3d::smdl_c mMdl;
/* 0x350 */ mVec3_c mRopePos;
/* 0x35C */ bool field_0x35C;
};
#endif
+30 -3
View File
@@ -1,20 +1,47 @@
#ifndef D_A_OBJ_STREAM_LAVA_H
#define D_A_OBJ_STREAM_LAVA_H
#include "common.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_w.h"
#include "m/m3d/m_anmmatclr.h"
#include "m/m3d/m_anmtexsrt.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
#include "toBeSorted/actor_event.h"
#include "toBeSorted/stage_render_stuff.h"
class dAcOstreamLava_c : public dAcObjBase_c {
public:
dAcOstreamLava_c() : mStateMgr(*this, sStateID::null) {}
dAcOstreamLava_c() : mStateMgr(*this, sStateID::null), mEvent(*this, nullptr), mScnCallback(this) {}
virtual int create() override;
virtual int doDelete() override;
virtual int draw() override;
virtual bool createHeap() override;
virtual ~dAcOstreamLava_c() {}
virtual int actorExecute() override;
STATE_FUNC_DECLARE(dAcOstreamLava_c, Wait);
STATE_FUNC_DECLARE(dAcOstreamLava_c, Stream);
private:
/* 0x??? */ STATE_MGR_DECLARE(dAcOstreamLava_c);
const static f32 unkFloat0;
static u32 eventFlags1;
static u32 eventFlags2;
/* 0x330 */ nw4r::g3d::ResFile mResFile;
/* 0x334 */ m3d::smdl_c mModel;
/* 0x350 */ m3d::anmTexSrt_c mAnmTexSrtWait;
/* 0x37C */ m3d::anmMatClr_c mAnmMatClr;
/* 0x3A8 */ dBgW mCollision;
/* 0x5B8 */ STATE_MGR_DECLARE(dAcOstreamLava_c);
/* 0x5F4 */ ActorEventRelated mEvent;
/* 0x644 */ dScnCallback_c mScnCallback;
/* 0x650 */ u8 mSubtype;
/* 0x651 */ u8 mShouldStreamSceneflag;
/* 0x652 */ u8 mEventId;
/* 0x653 */ bool mHideActor;
};
#endif
+22
View File
@@ -2,13 +2,35 @@
#define D_A_OBJ_TARZAN_POLE_H
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_w.h"
#include "d/col/cc/d_cc_d.h"
#include "m/m3d/m_smdl.h"
#include "m/m_vec.h"
#include "nw4r/g3d/res/g3d_resfile.h"
class dAcOTarzanPole_c : public dAcObjBase_c {
public:
dAcOTarzanPole_c() {}
virtual ~dAcOTarzanPole_c() {}
virtual bool createHeap() override;
virtual int create() override;
virtual int doDelete() override;
virtual int actorExecute() override;
virtual int draw() override;
private:
static dCcD_SrcSph sCcSrc;
static const f32 sXOffset;
static const f32 sYOffset;
/* 0x330 */ nw4r::g3d::ResFile mBrres;
/* 0x334 */ m3d::smdl_c mMdl;
/* 0x350 */ dBgW mBgCollider;
/* 0x560 */ dCcD_Sph mCollider;
/* 0x6b0 */ mVec3_c mVec; // TODO: Find better name, once we've figured out it's purpose
/* 0x6bc */ f32 mFloat; // TODO: No usage found yet
};
#endif
+3 -2
View File
@@ -8,6 +8,7 @@
#include "d/col/bg/d_bg_w.h"
#include "d/col/cc/d_cc_d.h"
#include "d/d_cc.h"
#include "d/d_light_env.h"
#include "d/d_shadow.h"
#include "m/m3d/m_anmchr.h"
#include "m/m3d/m_anmmatclr.h"
@@ -20,10 +21,10 @@
#include "s/s_State.hpp"
#include "toBeSorted/actor_event.h"
#include "toBeSorted/attention.h"
#include "toBeSorted/blur_and_palette_manager.h"
#include "toBeSorted/dowsing_target.h"
#include "toBeSorted/stage_render_stuff.h"
class dAcTbox_c : public dAcObjBase_c {
public:
enum TboxVariant_e {
@@ -139,7 +140,7 @@ private:
/* 0x049C */ m3d::anmTexPat_c mAnmGoddessPat;
/* 0x04C8 */ dScnCallback_c mScnCallback;
/* 0x04D4 */ dShadowCircle_c mShadowCircle;
/* 0x04DC */ LightParams mLightInfo;
/* 0x04DC */ LIGHT_INFLUENCE mLightInfo;
/* 0x04F8 */ dBgW mBgWs[2];
/* 0x0918 */ dCcD_Linked_Unk mCcD1;
/* 0x0B30 */ dCcD_Linked_Unk mCcD2;
+496
View File
@@ -0,0 +1,496 @@
#ifndef D_LIGHT_ENV_H
#define D_LIGHT_ENV_H
#include "common.h"
#include "m/m_color.h"
#include "m/m_vec.h"
#include "toBeSorted/tlist.h"
class ActorLighting {
public:
typedef TList<ActorLighting, 0> ListType;
/* 0x00 */ TListNode<ActorLighting> mNode;
static ListType sList;
static void fn_80026500();
static const mColor &getLightTev2Color();
static const mColor &getLightTev1Color();
static const mColor &getLightTev0Color();
static const mColor &getLightTevKColor();
public:
virtual ~ActorLighting();
void reset();
public:
/* 0x0C */ f32 field_0x0C;
/* 0x10 */ f32 field_0x10;
/* 0x14 */ f32 field_0x14;
/* 0x18 */ f32 field_0x18;
/* 0x1C */ f32 field_0x1C;
/* 0x20 */ f32 field_0x20;
/* 0x24 */ f32 field_0x24;
/* 0x28 */ f32 field_0x28;
/* 0x2C */ f32 field_0x2C;
/* 0x30 */ f32 field_0x30;
/* 0x34 */ f32 field_0x34;
/* 0x38 */ f32 field_0x38;
/* 0x3C */ s32 mLightSetIdx;
/* 0x40 */ mColor mTev0Color;
/* 0x44 */ mColor mTev1Color;
/* 0x48 */ mColor mTev2Color;
/* 0x4C */ mColor mTevPrevColor;
/* 0x50 */ mColor mTevK0Color;
/* 0x54 */ mColor mTevK1Color;
/* 0x58 */ mColor mTevK2Color;
/* 0x5C */ mColor mTevK3Color;
/* 0x60 */ u8 mLightingCode;
/* 0x61 */ u8 field_0x61;
/* 0x62 */ u8 field_0x62;
/* 0x63 */ u8 field_0x63;
/* 0x64 */ u8 field_0x64;
/* 0x65 */ bool mUseTev0;
/* 0x66 */ bool mUseTev1;
/* 0x67 */ bool mUseTev2;
/* 0x68 */ bool mUseTevPrev;
/* 0x69 */ bool mUseTevK0;
/* 0x6A */ bool mUseTevK1;
/* 0x6B */ bool mUseTevK2;
/* 0x6C */ bool mUseTevK3;
};
struct LIGHT_INFLUENCE {
void SetColor(mColor clr) {
mClr = clr;
}
void SetScale(f32 scale) {
mScale = scale;
}
void SetPosition(const mVec3_c &pos) {
mPos.x = pos.x;
mPos.y = pos.y;
mPos.z = pos.z;
}
/* 0x00 */ mVec3_c mPos;
/* 0x0C */ mColor mClr;
/* 0x10 */ f32 mScale;
/* 0x14 */ s32 mIdx;
/* 0x18 */ bool field_0x18;
};
// This is a weird one - mColor / nw4r::ut::Color are assumed
// to be 4-byte-aligned so that all the u32 type punning works
// correctly, but field_0x1D5 is unaligned and uses a separate
// assignment operator! So we'll go with a separate type for now.
struct UnalignedColor {
UnalignedColor &operator=(const mColor &color) {
r = color.r;
g = color.g;
b = color.b;
a = color.a;
return *this;
}
u8 r, g, b, a;
};
struct PaletteDefaultMCF {
/* 0x00 */ mColor MA00_kColor3;
/* 0x04 */ mColor MA01_tevReg1;
/* 0x08 */ mColor MA01_kColor2;
/* 0x0C */ mColor MA02_tevReg1;
/* 0x10 */ mColor MA02_kColor2;
/* 0x14 */ mColor MA03_kColor3;
/* 0x18 */ mColor MA06_kColor3;
/* 0x1C */ mColor field_0x1C;
};
struct TwoPaletteDefaultMCF {
/* 0x00 */ PaletteDefaultMCF field_0x00;
/* 0x20 */ PaletteDefaultMCF field_0x20;
};
struct ActorPalette {
/* 0x000 */ mColor mAmbientClr;
/* 0x004 */ mColor mDiffuseClr;
/* 0x008 */ mColor mBrightnessClr;
/* 0x00C */ mColor mSpecularClr;
/* 0x010 */ mColor mDarkShadowClr;
/* 0x014 */ mColor mDarkLightClr;
/* 0x018 */ f32 mSpecular;
/* 0x01C */ mColor field_0x01C;
/* 0x020 */ f32 mTemperature; // -1 cool, 1 warm
/* 0x024 */ f32 field_0x24;
/* 0x028 */ mColor mShadowClr;
/* 0x02C */ mColor field_0x02C;
};
struct StagePalette {
/* 0x000 */ f32 mBrightness;
/* 0x004 */ mColor mShadowClr;
/* 0x008 */ mColor mLightClr;
/* 0x00C */ f32 mSunMoonAngle1;
/* 0x010 */ f32 mSunMoonAngle2;
/* 0x014 */ mColor field_0x014;
/* 0x018 */ u8 field_0x018[5];
/* 0x020 */ mColor field_0x020[5];
/* 0x034 */ f32 field_0x034[5];
/* 0x048 */ f32 field_0x048[5];
/* 0x05C */ f32 field_0x05C;
/* 0x060 */ mColor field_0x060;
/* 0x064 */ u8 field_0x064[5];
/* 0x06C */ mColor field_0x06C[5];
/* 0x080 */ f32 field_0x080[5];
/* 0x094 */ f32 field_0x094[5];
/* 0x0A8 */ f32 field_0x0A8;
/* 0x0AC */ mColor field_0x0AC;
/* 0x0B0 */ u8 field_0x0B0[5];
/* 0x0B8 */ mColor field_0x0B8[5];
/* 0x0CC */ f32 field_0x0CC[5];
/* 0x0E0 */ f32 field_0x0E0[5];
/* 0x0F4 */ f32 field_0x0F4;
/* 0x0F8 */ mColor field_0x0F8;
/* 0x0FC */ u8 field_0x0FC[5];
/* 0x104 */ mColor field_0x104[5];
/* 0x118 */ f32 field_0x118[5];
/* 0x12C */ f32 field_0x12C[5];
};
struct SkyPalette {
/* 0x000 */ mColor field_0x00;
/* 0x004 */ mColor field_0x04;
/* 0x008 */ mColor field_0x08;
/* 0x00C */ mColor mCloudColor;
/* 0x010 */ mColor mSkyColor;
/* 0x014 */ mColor field_0x14;
/* 0x018 */ mColor mSkyFilter;
/* 0x01C */ mVec3_c mSkyCenter;
/* 0x028 */ mVec3_c mSkyScale;
};
struct SffSub {
mColor field_0x00;
f32 field_0x04;
f32 field_0x08;
};
struct SpfSubUnk0 {
/* 0x00 */ SffSub field_0x00;
/* 0x0C */ f32 field_0x0C[3];
};
struct SpfSubUnk1 {
/* 0x00 */ u8 field_0x00;
/* 0x04 */ f32 field_0x04;
/* 0x08 */ f32 field_0x08;
/* 0x0C */ u8 field_0x0C;
/* 0x10 */ f32 field_0x10;
/* 0x14 */ f32 field_0x14;
/* 0x18 */ u8 field_0x18;
/* 0x19 */ UnalignedColor field_0x19; // Bloom Color
/* 0x1D */ u8 field_0x1D;
};
struct SpfSubUnk2 {
/* 0x00 */ f32 field_0x00; // Blur Dist
/* 0x04 */ f32 field_0x04; // Blur Diffuse
/* 0x08 */ f32 field_0x08; // Softness Distance
/* 0x0C */ f32 field_0x0C; // Softness diffuse
/* 0x10 */ u8 field_0x10;
/* 0x11 */ u8 field_0x11; // Turning this to not 0 disables effects
/* 0x12 */ u16 field_0x12;
/* 0x14 */ f32 field_0x14;
/* 0x18 */ f32 field_0x18;
/* 0x1C */ f32 field_0x1C; // Blur?
/* 0x20 */ f32 field_0x20; // Fog? Shadow?
};
// Broken up in a way to get the assignment operator to match.
// Not 100% certain
struct Spf {
/* 0x000 */ ActorPalette mActorPalette;
/* 0x030 */ StagePalette mStagePalette;
/* 0x170 */ SkyPalette mSkyPalette;
/* 0x1A4 */ SpfSubUnk0 field_0x1A4;
/* 0x1BC */ SpfSubUnk1 field_0x1BC;
/* 0x1DC */ SpfSubUnk2 field_0x1D4;
/* 0x200 */ mColor mParticleTransparentClr;
/* 0x204 */ mColor mParticleSolidClr;
};
struct Sff {
SffSub field_0x00[3];
};
struct EFLIGHT_PROC {
/* 0x00 */ u8 mState;
/* 0x01 */ u8 mFrame;
/* 0x04 */ int mLightType;
/* 0x08 */ LIGHT_INFLUENCE field_0x8;
};
// Deals with the direction wind particles go?
struct WIND_INFLUENCE {
/* 0x00 */ mVec3_c mVel;
/* 0x0C */ f32 field_0x0C;
/* 0x10 */ f32 field_0x10;
};
struct PaletteEAF_smol_entry {
mColor field_0x00;
mColor field_0x04;
mColor field_0x08;
mColor field_0x0C;
};
struct PaletteEAF_smol {
PaletteEAF_smol_entry field_0x00[8];
};
struct PaletteEAF_big_entry {
mColor field_0x00;
mColor field_0x04;
mColor field_0x08;
mColor field_0x0C;
u8 field_0x10;
};
struct PaletteEAF_big {
/* 0x00 */ PaletteEAF_big_entry field_0x00[8];
};
// Apparently particle color related
struct Bpm3 {
/* 0x00 */ PaletteEAF_smol field_0x00[0x20];
};
struct Bpm4 {
/* 0x00 */ PaletteEAF_big field_0x00[0x20];
};
struct SHADOW_INFLUENCE {
/* 0x00 */ mVec3_c mPos;
/* 0x0C */ f32 mRadius;
/* 0x10 */ s16 mIdx;
};
struct Bpm8 {
/* 0x00 */ mVec3_c mPos;
/* 0x0C */ f32 mRadius;
/* 0x10 */ s32 field_0x10;
};
struct Bpm9 {
/* 0x00 */ bool field_0x00;
/* 0x04 */ mVec3_c mPos;
/* 0x10 */ f32 mRadius;
};
struct Mist {
/* 0x00 */ u8 mMode;
/* 0x01 */ u8 mDecay;
/* 0x02 */ u8 mAlpha;
/* 0x04 */ f32 mDirection;
/* 0x08 */ f32 mSpeed;
};
struct SpfSetting {
s16 mIdxStart;
s16 mIdxEnd;
f32 mRatio;
};
struct SpfTransitionSetting {
s16 mIdxBefore;
s16 mIdxAfter;
s32 mNumFrames;
};
class dLightEnv_c {
public:
dLightEnv_c();
virtual ~dLightEnv_c();
static dLightEnv_c &GetInstance() {
return sInstance;
}
static dLightEnv_c *GetPInstance() {
return sPInstance;
}
void get_vectle_calc(const mVec3_c *, const mVec3_c *, mVec3_c *);
void sphere_to_cartesian(f32 ang_y, f32 ang_xz, mVec3_c *);
void efplight_set(LIGHT_INFLUENCE *pLightInfo);
void efplight_cut(LIGHT_INFLUENCE *pLightInfo);
LIGHT_INFLUENCE *eflight_influence(const mVec3_c *);
// Name is guess based on closest func in tp
void SordFlush_set(const mVec3_c *pPos, s32 lightType);
void plight_set(LIGHT_INFLUENCE *pLightInfo);
void plight_cut(LIGHT_INFLUENCE *pLightInfo);
LIGHT_INFLUENCE *light_influence(const mVec3_c *, bool param2);
LIGHT_INFLUENCE *light_influence2(const mVec3_c *, bool param2);
void shadow_set(SHADOW_INFLUENCE *pShadowInfo);
void shadow_cut(SHADOW_INFLUENCE *pShadowInfo);
SHADOW_INFLUENCE *shadow_influence(const mVec3_c *);
void setLightFilter(f32 ratio);
void set0x35B0(f32 f);
// Params are guesses
void setBPM8(const mVec3_c *pos, u32 type, f32 radius);
void setBPM8_Type4(const mVec3_c *pos);
void setBPM8_Type6(const mVec3_c *pos);
void setBPM8_Type10(const mVec3_c *pos);
void setBPM8_Type10_2(const mVec3_c *pos);
void setBPM8_Type6_2(const mVec3_c *pos);
bool check_BPM8(const mVec3_c *pos, mVec3_c *pOutPos);
bool check_BPM8_1001(const mVec3_c *pos, mVec3_c *pOutPos);
bool check_BPM8_501(const mVec3_c *pos, mVec3_c *pOutPos);
bool setUnk(const mVec3_c *pos, f32 radius);
void setBPM9(const mVec3_c *pos, f32 radius);
bool check_BPM9(const mVec3_c *pos);
s32 checkBPM9_Entity(mVec3_c *pOutPos);
void setAlternateRoomId(s32 roomId);
s32 getAlterateRoomId();
mColor color_ratio_set(const mColor &start, const mColor &end, f32 ratio);
mVec3_c vec_ratio_set(const mVec3_c &start, const mVec3_c &end, f32 ratio);
f32 f32_ratio_set(const f32 start, const f32 end, f32 ratio);
u16 u16_ratio_set(const u16 start, const u16 end, f32 ratio);
u8 u8_ratio_set(const u8 start, const u8 end, f32 ratio);
void spf_ratio_set(Spf &out, const Spf &start, const Spf &end, f32 ratio);
void light_influence_ratio_set(
LIGHT_INFLUENCE &out, const LIGHT_INFLUENCE &start, const LIGHT_INFLUENCE &end, f32 ratio
);
void sff_ratio_set(Sff &out, const Sff &start, const Sff &end, f32 ratio);
void set_override_spf(s16 start, s16 end, f32 ratio);
void setMist(u8 mode, u8 decay, u8 alpha, f32 dir, f32 speed);
void setMistMode3(const mVec3_c &vel, f32 value);
void setDOF(f32 dof);
void disableDOF();
void setWind(mVec3_c mPos, f32 f);
void setField_0x2F20(f32 arg) {
field_0x2F20 = arg;
}
void set_palette_transition(s16 before, s16 after, s32 numFrames);
// All related
void fn_80024740(u8, u8);
bool fn_80024770(u8);
bool fn_800247A0(u8);
u8 get0x2DE8() const {
return field_0x2DE8[0];
}
const PaletteDefaultMCF &GetCurrentDefaultMcf() const {
return field_0x5CE4;
}
const Spf &GetCurrentSpf() const {
return currentSpf;
}
const PaletteEAF_smol_entry &getSmallEAF(s32 idx1, s32 idx2) {
return field_0x38E4.field_0x00[idx1].field_0x00[idx2];
}
f32 getfield_0x2F14() const {
return field_0x2F14;
}
f32 getfield_0x2F18() const {
return field_0x2F18;
}
f32 getfield_0x2F1C() const {
return field_0x2F1C;
}
private:
/* 0x0004 */ Spf currentSpf;
/* 0x020C */ Spf spfs[20];
/* 0x2AAC */ Sff currentSff;
/* 0x2AD0 */ Sff sffs[20];
/* 0x2DA0 */ SpfSetting mCurrentSpfSetting;
/* 0x2DA8 */ u8 field_0x2DA8[0x2DB4 - 0x2DA8];
/* 0x2DB4 */ SpfTransitionSetting mTransitionSpfSetting;
/* 0x2DBC */ u8 field_0x2DBC[0x2DC0 - 0x2DBC];
/* 0x2DC0 */ SpfSetting mOverrideSpfSetting;
/* 0x2DC8 */ Mist mMistInfo;
/* 0x2DD4 */ mVec3_c mMistPos;
/* 0x2DE0 */ bool mDofEnabled;
/* 0x2DE4 */ f32 mDof;
/* 0x2DE8 */ u8 field_0x2DE8[0x2DEC - 0x2DE8];
/* 0x2DEC */ mColor field_0x2DEC;
/* 0x2DF0 */ u8 field_0x2DF0[0x2DF4 - 0x2DF0];
/* 0x2DF4 */ mColor field_0x2DF4;
/* 0x2DF8 */ mVec3_c field_0x2DF8;
/* 0x2E04 */ u8 field_0x2E04[0x2E08 - 0x2E04];
/* 0x2E08 */ mVec3_c field_0x2E08[5];
/* 0x2E44 */ mVec3_c field_0x2E44[5];
/* 0x2E80 */ mVec3_c field_0x2E80[5];
/* 0x2EBC */ mVec3_c field_0x2EBC[5];
/* 0x2EF8 */ mColor field_0x2EF8;
/* 0x2EFC */ mColor field_0x2EFC;
/* 0x2F00 */ mVec3_c field_0x2F00;
/* 0x2F0C */ s16 field_0x2F0C;
/* 0x2F0E */ s16 field_0x2F0E;
/* 0x2F10 */ u8 field_0x2F10;
/* 0x2F14 */ f32 field_0x2F14;
/* 0x2F18 */ f32 field_0x2F18;
/* 0x2F1C */ f32 field_0x2F1C;
/* 0x2F20 */ f32 field_0x2F20;
/* 0x2F24 */ u8 field_0x2F24[4];
/* 0x2F28 */ LIGHT_INFLUENCE *efplight[5];
/* 0x2F3C */ LIGHT_INFLUENCE *pointlight[200];
/* 0x325C */ SHADOW_INFLUENCE *pshadow[200];
/* 0x357C */ EFLIGHT_PROC eflight;
/* 0x35A0 */ WIND_INFLUENCE mWind;
/* 0x35B4 */ SHADOW_INFLUENCE field_0x35B4[8];
/* 0x3654 */ Bpm8 field_0x3654[10];
/* 0x371C */ Bpm9 field_0x371C[20];
/* 0x387C */ u32 field_0x387C;
/* 0x38B0 */ bool field_0x38B0;
/* 0x38B4 */ mVec3_c field_0x38B4;
/* 0x38C0 */ f32 field_0x38C0;
/* 0x38C4 */ s32 field_0x38C4;
/* 0x38C8 */ mVec3_c field_0x38C8;
/* 0x38D4 */ u32 mPlayerRoomId;
/* 0x38D8 */ s32 mAlternateRoomId;
/* 0x38D8 */ u32 field_0x38DC;
/* 0x38D8 */ s32 field_0x38E0;
/* 0x38E4 */ Bpm3 field_0x38E4;
/* 0x48E4 */ Bpm4 field_0x48E4;
/* 0x5CE4 */ PaletteDefaultMCF field_0x5CE4;
/* 0x5D04 */ TwoPaletteDefaultMCF field_0x5D04;
/* 0x5D44 */ u8 field_0x5D44[0x5D59 - 0x5D44];
/* 0x5D59 */ struct { // Anonymous until more is known
bool mEnabled;
u8 mValue;
} field_0x5D59[9];
/* 0x5D6C */ u8 field_0x5D6C[0x5D70 - 0x5D6C];
static dLightEnv_c sInstance;
static dLightEnv_c *sPInstance;
};
#endif
+51
View File
@@ -0,0 +1,51 @@
#ifndef D_OBJ_LIGHT_H
#define D_OBJ_LIGHT_H
#include "d/d_base.h"
#include "f/f_base.h"
#include "m/m_color.h"
#include "toBeSorted/d_emitter.h"
struct UnkLightThing /* : Inheritance Chain TODO */ {
UnkLightThing();
virtual ~UnkLightThing();
/* 0x04 */ u8 _0x04[0x40 - 0x04];
};
class dObjLight_c : public dBase_c {
public:
dObjLight_c();
virtual ~dObjLight_c() {}
virtual int create() override;
virtual int doDelete() override;
virtual int execute() override;
virtual int draw() override;
public:
static bool CreateInstance();
static dObjLight_c *GetInstance();
mColor &GetColor0x68();
mColor &GetColor0x6C();
mColor &GetColor0x100();
mColor &GetColor0x104();
private:
/* 0x068 */ mColor field_0x68[1][3];
/* 0x074 */ EffectsStruct mEff;
/* 0x0A8 */ u8 _0xA8[0xB4 - 0xA8];
/* 0x0B4 */ mColor field_0xB4;
/* 0x0B8 */ u8 _0xB8[0xD0 - 0xB8];
/* 0x0D0 */ mColor field_0xD0;
/* 0x0D4 */ u8 _0xD4[0x100 - 0xD4];
/* 0x100 */ mColor field_0x100;
/* 0x104 */ mColor field_0x104;
/* 0x108 */ u8 _0x108[0x10C - 0x108];
/* 0x10C */ UnkLightThing field_0x10C[8];
private:
static dObjLight_c sInstance;
};
#endif
+4
View File
@@ -35,6 +35,10 @@ public:
u16 getUncommittedValue_Priv(u16 flag) const;
u32 checkFlagValid(u16 counterIdx) const {
return mpFlagIndex->checkFlagValid(counterIdx, mFlagCount);
}
protected:
void setFlagSizes(u16 flagCount, u16 flagSizeBytes);
+96
View File
@@ -0,0 +1,96 @@
#ifndef D_SND_ACTOR_H
#define D_SND_ACTOR_H
#include "common.h"
#include "d/snd/d_snd_misc.h"
#include "nw4r/math/math_types.h"
#include "nw4r/snd/snd_Sound3DActor.h"
class dSnd3DActor_c : public nw4r::snd::Sound3DActor {
public:
dSnd3DActor_c(dSndSourceParam *pSourceParam, u8 sourceType);
virtual ~dSnd3DActor_c() {}
virtual bool d_vt_0x30() {
return true;
}
virtual void d_vt_0x34(const nw4r::math::VEC3 &);
virtual void d_vt_0x38(bool flag, int fadeFrames) = 0;
virtual UNKWORD d_vt_0x3C() {
return 0;
}
virtual UNKWORD d_vt_0x40() {
return 0;
}
virtual UNKWORD d_vt_0x44() {
return 0;
}
virtual const nw4r::math::VEC3 &getPositionRelativeToPlayer();
virtual f32 getDistanceToPlayer(); // vt 0x4C
virtual void updatePositionRelativeToPlayer(); // vt 0x50
virtual void updateDistanceToPlayer(); // vt 0x54
virtual void d_vt_0x58() = 0;
virtual void d_vt_0x5C() = 0;
void resetCachedRelativePositions();
void updatePositionTransformedByListener();
void updateCameraDirectionDot();
void updatePositionRelativeToCameraTarget();
void calculatePositionRelativeToCameraTarget();
void updateDistanceToCameraTarget();
void calculatePositionRelativeToListener();
void updatePositionRelativeToListener();
void updateDistanceToListener();
bool checkFlag(u16 flag) const {
return (mFlags & flag);
}
void setFlag(u16 flag) {
mFlags |= flag;
}
f32 getDistanceToListener() {
updateDistanceToListener();
return mDistanceToListener;
}
bool hasPlayingSounds() const;
bool isPlayingSound(u32 id);
const char *soundIdToSoundLabel(u32 soundId) const;
u32 soundLabelToSoundId(const char *soundLabel) const;
protected:
// a_ prefix to prevent multiple inheritance clashes
/* 0x7D */ u8 a_field_0x7D;
/* 0x7E */ u8 a_field_0x7E;
/* 0x7F */ u8 a_field_0x7F;
/* 0x80 */ u8 a_field_0x80;
/* 0x84 */ f32 a_field_0x84;
/* 0x88 */ f32 a_field_0x88;
/* 0x8C */ f32 a_field_0x8C;
/* 0x90 */ f32 a_field_0x90;
/* 0x94 */ f32 mDistanceToListener;
/* 0x98 */ f32 mCameraDirectionDot;
/* 0x9C */ f32 a_field_0x9C;
/* 0xA0 */ nw4r::math::VEC3 mPositionRelativeToListener;
/* 0xAC */ nw4r::math::VEC3 mPositionTransformedByListener;
/* 0xB8 */ f32 mDistanceToCameraTarget;
/* 0xBC */ nw4r::math::VEC3 mPositionRelativeToCameraTarget;
/* 0xC8 */ dSndSourceParam *mpSourceParam;
/* 0xCC */ u16 mFlags;
/* 0xD0 */ nw4r::math::VEC3 mPositionRelativeToPlayer;
/* 0xDC */ f32 mDistanceToPlayer;
/* 0xE0 */ f32 a_field_0xE0;
};
#endif
+18
View File
@@ -0,0 +1,18 @@
#ifndef D_SND_3D_ENGINE
#define D_SND_3D_ENGINE
#include "nw4r/snd/snd_BasicSound.h"
#include "nw4r/snd/snd_Sound3DEngine.h"
#include "nw4r/snd/snd_Sound3DManager.h"
class dSnd3DEngine_c : public nw4r::snd::Sound3DEngine {
public:
dSnd3DEngine_c();
virtual void UpdateAmbientParam(
const nw4r::snd::Sound3DManager *mgr, const nw4r::snd::Sound3DParam *param3d, u32 unk, u32 flags,
nw4r::snd::SoundAmbientParam *paramAmb
) override;
};
#endif
+63
View File
@@ -0,0 +1,63 @@
#ifndef D_SND_3D_MANAGER_H
#define D_SND_3D_MANAGER_H
#include "d/snd/d_snd_3d_engine.h"
#include "d/snd/d_snd_util.h"
#include "egg/gfx/eggCamera.h"
#include "m/m_vec.h"
#include "nw4r/math/math_types.h"
#include "nw4r/snd/snd_Sound3DListener.h"
#include "nw4r/snd/snd_Sound3DManager.h"
SND_DISPOSER_FORWARD_DECL(dSnd3DManager_c);
class dSnd3DManager_c {
SND_DISPOSER_MEMBERS(dSnd3DManager_c);
public:
dSnd3DManager_c();
void setup();
void updateFromCamera(EGG::LookAtCamera &camera);
void setCamDistance(f32 value);
void resetCamDistance();
void calc();
void clearState();
nw4r::snd::Sound3DManager &getManager() {
return mManager;
}
const mVec3_c &getCameraTargetPos() const {
return mCameraTargetPosition;
}
const mVec3_c &getNrmCameraDirection() const {
return mCameraDirectionNormalized;
}
const nw4r::math::VEC3 &getSndListenerPos() const {
return mListener.GetPosition();
}
const nw4r::math::MTX34 &getSndListenerMatrix() const {
return mListener.GetMatrix();
}
private:
void updateListenerPos(f32);
/* 0x010 */ bool mIsSetup;
/* 0x011 */ bool mCalculationsFresh;
/* 0x014 */ dSnd3DEngine_c *mpEngine;
/* 0x018 */ nw4r::snd::Sound3DManager mManager;
/* 0x044 */ nw4r::snd::Sound3DListener mListener;
/* 0xB0 */ EGG::LookAtCamera mCamera;
/* 0x138 */ mVec3_c mCameraDirectionNormalized;
/* 0x144 */ mVec3_c mCameraTargetPosition;
/* 0x150 */ f32 mCameraPosSqVelocity;
/* 0x154 */ f32 mCameraAtSqVelocity;
/* 0x158 */ f32 mCamDistance;
/* 0x15C */ s16 mTimer;
};
#endif
+14
View File
@@ -0,0 +1,14 @@
#ifndef D_SND_3D_ACTOR_H
#define D_SND_3D_ACTOR_H
#include "nw4r/snd/snd_SoundActor.h"
class dSndActor_c : public nw4r::snd::SoundActor {
public:
dSndActor_c(nw4r::snd::SoundArchivePlayer &rPlayer);
private:
void doesSomethingWithForeachSound();
};
#endif
+38
View File
@@ -0,0 +1,38 @@
#ifndef D_SND_AREA_SOUND_H
#define D_SND_AREA_SOUND_H
#include "common.h"
#include "d/snd/d_snd_sound.h"
/** A sound class used for dSndAreaSoundEffectMgr */
class dSndAreaSound_c : public dSndSound_c {
public:
dSndAreaSound_c();
virtual void cancel() override; // 0x08
virtual void calc() override; // 0x0C
virtual void fadeIn(u32 id, s32 fadeFrames) override; // 0x10
virtual void initCallback(u32 id); // 0x28
typedef void (*Callback)(dSndAreaSound_c &sound);
using dSndSound_c::pause;
void pause(s32 fadeFrames);
void unpause(s32 fadeFrames);
private:
bool isFadingOut() const {
return mIsFadingOut && IsAttachedSound();
}
/* 0x0F0 */ bool field_0xF0;
/* 0x0F4 */ Callback mpCalcCallback;
/* 0x0F8 */ UNKWORD field_0xF8;
/* 0x0FC */ UNKWORD field_0xFC;
/* 0x100 */ UNKWORD field_0x100;
/* 0x104 */ UNKWORD field_0x104;
};
#endif
@@ -0,0 +1,39 @@
#ifndef D_SND_AREA_SOUND_EFFECT_MGR_H
#define D_SND_AREA_SOUND_EFFECT_MGR_H
#include "common.h"
#include "d/snd/d_snd_actor.h"
#include "d/snd/d_snd_area_sound.h"
#include "d/snd/d_snd_util.h"
SND_DISPOSER_FORWARD_DECL(dSndAreaSoundEffectMgr_c);
/**
* A singleton sound actor for playing persistent environmental background
* sound effects. Turn this off and the Faron birds will stop singing.
*
* Plays sounds like SE_A_F100 (hence the name, not sure if it's the real meaning).
*/
class dSndAreaSoundEffectMgr_c {
SND_DISPOSER_MEMBERS(dSndAreaSoundEffectMgr_c)
public:
dSndAreaSoundEffectMgr_c();
bool startSound(u32 soundId, u32 handleIdx);
void calc();
void stopSounds(s32 fadeFrames);
private:
bool isPlayingAnySound() const;
bool isPlayingSound(u32 soundId) const;
/* 0x010 */ dSndAreaSound_c mSounds[3];
/* 0x328 */ UNKWORD field_0x328;
/* 0x32C */ f32 field_0x32C;
/* 0x330 */ f32 field_0x330;
/* 0x334 */ dSndActor_c mActor;
/* 0x388 */ f32 field_0x388;
};
#endif
+10
View File
@@ -0,0 +1,10 @@
#ifndef D_SND_CALC_PITCH_H
#define D_SND_CALC_PITCH_H
#include "common.h"
f32 pitchScaleForPitchIdx(s32 idx);
f32 pitchScaleForPitchIdxTenths(f32 idx);
f32 pitchIdxTenthsForPitchScale(f32 scale);
#endif
+107
View File
@@ -0,0 +1,107 @@
#ifndef D_SND_CHECKERS_H
#define D_SND_CHECKERS_H
#include "nw4r/snd/snd_SoundHandle.h"
#include "toBeSorted/music_mgrs.h"
class SoundPropertiesChecker {
public:
virtual void operator()(nw4r::snd::SoundHandle &pHandle) {
if (mSoundId != -1 && mSoundId != pHandle.GetId()) {
return;
}
if (mpPlayCounter != nullptr) {
(*mpPlayCounter)++;
} else {
mPlayCounter++;
}
if (pHandle.IsPause()) {
if (mpPauseCounter != nullptr) {
(*mpPauseCounter)++;
} else {
mPauseCounter++;
}
return;
}
if (fn_803721F0(FANFARE_SOUND_MGR, pHandle.GetId())) {
if (mpCounter3 != nullptr) {
(*mpCounter3)++;
} else {
mCounter3++;
}
return;
}
if (fn_803720E0(FANFARE_SOUND_MGR, pHandle.GetId())) {
if (mpCounter3 != nullptr) {
(*mpCounter3)++;
} else {
mCounter3++;
}
return;
}
if (fn_80372070(FANFARE_SOUND_MGR, pHandle.GetId())) {
if (mpCounter4 != nullptr) {
(*mpCounter4)++;
} else {
mCounter4++;
}
return;
}
if (fn_803734C0(FANFARE_SOUND_MGR, pHandle.GetId()) && !fn_80373550(FANFARE_SOUND_MGR, pHandle.GetId())) {
mCounter3++;
}
}
private:
/* 0x04 */ u32 mSoundId;
/* 0x08 */ u32 mPlayCounter;
/* 0x0C */ u32 mPauseCounter;
/* 0x10 */ u32 mCounter3;
/* 0x14 */ u32 mCounter4;
/* 0x18 */ u32 *mpPlayCounter;
/* 0x1C */ u32 *mpPauseCounter;
/* 0x20 */ u32 *mpCounter3;
/* 0x24 */ u32 *mpCounter4;
};
// used at the very least when trying to finish Demise
class IsCurrentSoundIdChecker {
public:
IsCurrentSoundIdChecker(u32 id, bool *pResult) : mSoundId(id), mpResult(pResult) {}
~IsCurrentSoundIdChecker() {}
virtual void operator()(nw4r::snd::SoundHandle &pHandle) {
if (mSoundId == pHandle.GetId()) {
*mpResult = true;
}
}
private:
/* 0x04 */ u32 mSoundId;
/* 0x08 */ bool *mpResult;
};
class SoundStopper {
public:
SoundStopper(u32 id, s32 fadeFrames) : mSoundId(id), mFadeFrames(fadeFrames) {}
~SoundStopper() {}
virtual void operator()(nw4r::snd::SoundHandle &pHandle) {
if (mSoundId == pHandle.GetId()) {
pHandle.Stop(mFadeFrames);
}
}
private:
/* 0x04 */ u32 mSoundId;
/* 0x08 */ s32 mFadeFrames;
};
#endif
+53
View File
@@ -0,0 +1,53 @@
#ifndef D_SND_CONTROL_PLAYER_H
#define D_SND_CONTROL_PLAYER_H
#include "d/snd/d_snd_sound.h"
#include "nw4r/snd/snd_SoundPlayer.h"
class dSndControlPlayer_c : public dSndControl_c {
public:
dSndControlPlayer_c(f32 value, f32 min, f32 max) : dSndControl_c(value, min, max) {}
virtual void reset() override; // vt 0x0C
virtual void stop() override; // vt 0x18
virtual void apply() = 0; // vt 0x1C
virtual f32 getAppliedValue() = 0; // vt 0x20
void setIndex1(u32 idx);
void setIndex2(u32 idx);
protected:
/* 0x30 */ nw4r::snd::SoundPlayer *mpPlayer;
/* 0x34 */ u32 mIndex;
};
class dSndControlPlayerVolumeBase_c : public dSndControlPlayer_c {
public:
dSndControlPlayerVolumeBase_c();
};
class dSndControlPlayerVolume_c : public dSndControlPlayerVolumeBase_c {
public:
dSndControlPlayerVolume_c() {}
virtual void apply() override; // vt 0x1C
virtual f32 getAppliedValue() override; // vt 0x20
};
class dSndControlPlayerLpfFreq_c : public dSndControlPlayer_c {
public:
dSndControlPlayerLpfFreq_c() : dSndControlPlayer_c(0.0f, -1.0f, 0.0f) {}
virtual void apply() override; // vt 0x1C
virtual f32 getAppliedValue() override; // vt 0x20
};
class dSndControlPlayerFxSend_c : public dSndControlPlayer_c {
public:
dSndControlPlayerFxSend_c() : dSndControlPlayer_c(0.0f, 0.0f, 1.0f) {}
virtual void apply() override; // vt 0x1C
virtual f32 getAppliedValue() override; // vt 0x20
};
#endif
+95
View File
@@ -0,0 +1,95 @@
#ifndef D_SND_CONTROL_PLAYER_MGR_H
#define D_SND_CONTROL_PLAYER_MGR_H
#include "d/snd/d_snd_control_player.h"
#include "d/snd/d_snd_util.h"
#include "nw4r/snd/snd_SoundPlayer.h"
#include "nw4r/ut/ut_list.h"
SND_DISPOSER_FORWARD_DECL(dSndControlPlayerMgr_c);
class dSndControlPlayerMgr_c {
SND_DISPOSER_MEMBERS(dSndControlPlayerMgr_c);
public:
enum PlayerCtrl_e {
CTRL_VOLUME = 0,
CTRL_LPF_FREQ = 1,
CTRL_FX_SEND = 2,
CTRL_MAX = 3,
};
dSndControlPlayerMgr_c();
void calc();
static const s32 sNumPlayers;
static const s32 sPlayerMax;
nw4r::snd::SoundPlayer *getPlayer1(u32) const;
nw4r::snd::SoundPlayer *getPlayer2(u32) const;
void setVolume(u32 playerIdx, f32 value, s32 frames);
void setLpfFreq(u32 playerIdx, f32 value, s32 frames);
void setFxSend(u32 playerIdx, f32 value, s32 frames);
void overrideVolume(u32 playerIdx, f32 volume, s32 frames);
void restoreVolume(u32 playerIdx, s32 frames);
void muteAllWorldSounds(s32 fadeFrames);
void unmuteAllWorldSounds(s32 fadeFrames);
enum MuteLevel {
MUTE_FULL = 0,
MUTE_PARTIAL = 1,
MUTE_MAX = 2,
};
enum VolumeControlGroup {
/** PLAYER_BGM, PLAYER_BGM_BOSS */
CTRL_GROUP_BGM = 0,
/** PLAYER_TG_SOUND - PLAYER_AREA_IN_WATER_LV */
CTRL_GROUP_STAGE_EFFECTS = 1,
/** PLAYER_ENEMY - PLAYER_ENEMY_FOOTSTEP */
CTRL_GROUP_ENEMY = 2,
/* PLAYER_OBJECT_1 - PLAYER_TG_SOUND, but not PLAYER_NPC_VOICE */
CTRL_GROUP_OBJECTS = 3,
CTRL_GROUP_MAX = 4,
};
void setGroupVolumeFlag(VolumeControlGroup group, MuteLevel level);
void setBgmVolumeDecreaseSpeed(f32 speed);
void setStageEffectsVolume(f32 volume, s32 fadeFrames);
private:
void setBgmMuteVolume(f32 volume);
void setStageEffectsMuteVolume(f32 volume);
void setEnemyMuteVolume(f32 volume);
void setObjectMuteVolume(f32 volume);
void setPlayerVolumeInternal(u32 playerIdx, f32 volume);
void resetControls();
void calcVolumes();
void calcMuteFlags();
void executeControls();
void linkCtrl(dSndControlPlayer_c *);
void unlinkCtrl(dSndControlPlayer_c *);
void setControlValue(PlayerCtrl_e ctrlType, u32 playerIdx, f32 value, s32 frames);
f32 getAppliedPlayerVolume(u32 playerIdx) const;
f32 getControlTarget(PlayerCtrl_e ctrlType, u32 playerIdx) const;
/* 0x10 */ dSndControlPlayer_c *mpCtrls[CTRL_MAX];
/* 0x1C */ f32 *mpTargetVolumes;
/* 0x20 */ f32 *mpMaxVolumeDecreases;
/* 0x24 */ f32 *mpMaxVolumeIncreases;
/* 0x28 */ f32 *mpSavedVolumes;
/* 0x2C */ u32 mOverrideVolumeMask;
/* 0x30 */ nw4r::ut::List mActiveControls;
/* 0x3C */ s16 mTimersForGroupVolume[4][2];
};
#endif
+33
View File
@@ -0,0 +1,33 @@
#ifndef D_SND_MGR_H
#define D_SND_MGR_H
#include "egg/audio/eggAudioMgr.h"
#include "nw4r/snd/snd_SoundArchivePlayer.h"
/** The core audio manager used for most sounds. */
class dSndMgr_c : public EGG::SimpleAudioMgr {
public:
dSndMgr_c();
virtual void calc() override;
void initialize(EGG::Heap *heap, u32 size);
void initHbm(u32 frame);
static void restoreEffectsCallback();
static dSndMgr_c *GetInstance() {
return sInstance;
}
static nw4r::snd::SoundArchivePlayer* getPlayer() {
return sInstance->ArcPlayer::getPlayer();
}
private:
static dSndMgr_c *sInstance;
/* 0x6C8 */ u8 _0x6C8[0x6CC - 0x6C8];
/* 0x6CC */ u8 field_0x6CC;
};
#endif
+29
View File
@@ -0,0 +1,29 @@
#ifndef D_SND_MISC_H
#define D_SND_MISC_H
#include "common.h"
// This is at least accessed by dSnd3DEngine_c's functions that
// are called as part of UpdateAmbientParam. Appears to be
// related to the biquadFilterValue.
struct dSndSourceParam {
dSndSourceParam() {
reset();
}
void reset() {
field_0x00 = 300.0;
field_0x04 = 1000.0f;
field_0x08 = 100.0f;
field_0x0C = 400.0f;
field_0x10 = 5000.0f;
}
/* 0x00 */ f32 field_0x00;
/* 0x04 */ f32 field_0x04;
/* 0x08 */ f32 field_0x08;
/* 0x0C */ f32 field_0x0C;
/* 0x10 */ f32 field_0x10;
};
#endif
+169
View File
@@ -0,0 +1,169 @@
#ifndef D_SND_PLAYER_MGR_H
#define D_SND_PLAYER_MGR_H
#include "d/snd/d_snd_mgr.h"
#include "d/snd/d_snd_util.h"
#include "nw4r/snd/snd_MemorySoundArchive.h"
#include "nw4r/snd/snd_SoundArchivePlayer.h"
#include "nw4r/snd/snd_SoundHandle.h"
#include "nw4r/snd/snd_SoundStartable.h"
SND_DISPOSER_FORWARD_DECL(dSndPlayerMgr_c);
/**
* The main interface for managing sound stuff. Will delegate to dSndMgr_c for
* most things, but handles demo (cutscene) sound effects (SE_DEMO*) by itself.
*
* Previous Ghidra name: BgmMgr
*/
class dSndPlayerMgr_c {
public:
SND_DISPOSER_MEMBERS(dSndPlayerMgr_c);
public:
dSndPlayerMgr_c();
void shutdown();
void calc();
void enterMenu();
void leaveMenu();
void enterMap();
void leaveMap();
void enterHelp();
void leaveHelp();
void enterHbm();
void leaveHbm();
u32 getFreeSize();
bool loadDemoArchive(const char *demoArchiveName);
const char *getSoundArchivePath();
u32 convertLabelStringToSoundId(const char *label) const;
nw4r::snd::SoundArchivePlayer &getSoundArchivePlayerForType(u8 sourceType);
bool canUseThisPlayer(u8 sourceType) const;
enum PlayerMgrFlag_e {
MGR_HBM = 0x1,
MGR_UNK_0x2 = 0x2,
MGR_PAUSE = 0x4,
MGR_MAP = 0x8,
MGR_HELP = 0x10,
};
bool checkFlag(u32 mask) const {
return mFlags & mask;
}
void onFlag(u32 mask) {
mFlags |= mask;
}
void offFlag(u32 mask) {
mFlags &= ~mask;
}
u32 getEventMuteMask(u32 id) {
nw4r::snd::SoundArchive *archive;
if (mSoundArchivePlayer.IsAvailable()) {
archive = &mSoundArchive;
} else {
archive = dSndMgr_c::GetInstance()->getArchive();
}
return archive->GetSoundUserParam(id) & sEventMuteFlagsMask;
}
enum FanfareUnmuteParam_e {
FANFARE_UNMUTE_BGM = 0x10000,
FANFARE_UNMUTE_STAGE_EFFECTS = 0x20000,
FANFARE_UNMUTE_ENEMY = 0x40000,
FANFARE_UNMUTE_OBJECTS = 0x80000,
};
// seem to be used for Small and Event sounds
enum UserParamEventSmall_e {
MUTE_BGM_PART = 0x10000,
MUTE_BGM_FULL = 0x20000,
MUTE_STAGE_EFFECTS_PART = 0x40000,
MUTE_STAGE_EFFECTS_FULL = 0x80000,
MUTE_ENEMY_PART = 0x100000,
MUTE_ENEMY_FULL = 0x200000,
MUTE_OBJECTS_PART = 0x400000,
MUTE_OBJECTS_FULL = 0x800000,
};
static const u32 sEventMuteFlagsMask;
// For a full overview over which sounds are played by which players,
// see https://gist.github.com/robojumper/f81a55857cebed2c79cf3cf3c1ec8f04
enum PlayerIndex_e {
/** Background music */
PLAYER_BGM = 0,
/** Background music, boss battle */
PLAYER_BGM_BOSS = 1,
/** "fanfare?" */
PLAYER_FAN = 2,
/** small sound effects, only a few (UI navigation related) */
PLAYER_SMALL_IMPORTANT = 3,
/** small sound, often UI related */
PLAYER_SMALL_NORMAL = 4,
/** hit, roll attack, cloth, sink */
PLAYER_LINK_BODY = 5,
/** Link voice */
PLAYER_LINK_VOICE = 6,
/** Link footstep, swimming */
PLAYER_LINK_FOOTSTEP = 7,
/** Sword, beetle, ... */
PLAYER_LINK_EQUIPMENT = 8,
/** Enemy sound effects */
PLAYER_ENEMY = 9,
/** Enemy voices */
PLAYER_ENEMY_VOICE = 10,
/** Enemy footstep */
PLAYER_ENEMY_FOOTSTEP = 11,
/** Misc objects */
PLAYER_OBJECT_1 = 12,
/** Misc objects */
PLAYER_OBJECT_2 = 13,
/** NPC footsteps */
PLAYER_NPC_FOOTSTEP = 14,
/** NPC voices */
PLAYER_NPC_VOICE = 15,
/** leaves, grass */
PLAYER_FOLIAGE = 16,
/** misc TgSound environmental effects */
PLAYER_TG_SOUND = 17,
/** area sound effects (Faron birds...) */
PLAYER_AREA = 18,
/** not sure, only SE_A_IN_WATER_LV */
PLAYER_AREA_IN_WATER_LV = 19,
/** event */
PLAYER_EVENT = 20,
/** not sure */
PLAYER_UNK_21 = 21,
};
private:
/* 0x010 */ u8 field_0x010;
/* 0x011 */ u8 field_0x011;
/* 0x014 */ s32 field_0x014;
/* 0x018 */ s32 field_0x018;
/* 0x01C */ s32 field_0x01C;
/* 0x020 */ u32 mFlags;
// system menu, inventory, map
void enterPauseState();
void leavePauseState();
virtual nw4r::snd::SoundStartable::StartResult
startSound(nw4r::snd::SoundHandle *pHandle, u32 soundId, const nw4r::snd::SoundStartable::StartInfo *pStartInfo);
virtual nw4r::snd::SoundStartable::StartResult startSound(
nw4r::snd::SoundHandle *pHandle, const char *soundLabel, const nw4r::snd::SoundStartable::StartInfo *pStartInfo
);
/* 0x028 */ nw4r::snd::MemorySoundArchive mSoundArchive;
/* 0x178 */ nw4r::snd::SoundArchivePlayer mSoundArchivePlayer;
};
#endif
+56
View File
@@ -0,0 +1,56 @@
#ifndef D_SND_SMALL_EFFECT_MGR_H
#define D_SND_SMALL_EFFECT_MGR_H
#include "d/snd/d_snd_source.h"
#include "d/snd/d_snd_util.h"
#include "d/snd/d_snd_wzsound.h" // IWYU pragma: export
#include "nw4r/snd/snd_SoundHandle.h"
SND_DISPOSER_FORWARD_DECL(dSndSmallEffectMgr_c);
/**
* An interface for playing the SE_S ("sound effect, small"?) sounds.
*/
class dSndSmallEffectMgr_c {
SND_DISPOSER_MEMBERS(dSndSmallEffectMgr_c)
public:
dSndSmallEffectMgr_c();
bool playSound(u32 soundId);
bool playSoundWithPan(u32 soundId, f32 pan);
void playSoundWithPitch(u32 soundId, f32 pitch);
bool playButtonPressSoundWhenAdvancingTextBoxes(f32);
void resetButtonPressSound();
void setButtonPressSound(dSoundSource_c *source);
private:
bool playSoundInternal(u32 soundId);
void stopSounds(u32 playerIdx, u32 soundId, s32 fadeFrames);
void stopSounds(u32 soundId, s32 fadeFrames);
bool isPlayingSound(u32 playerIdx, u32 soundId);
bool isPlayingSound(u32 soundId);
/* 0x10 */ nw4r::snd::SoundHandle mHandle1;
// used for most sounds
/* 0x14 */ nw4r::snd::SoundHandle mNormalSound;
/* 0x18 */ nw4r::snd::SoundHandle mHandle3;
// apparently used for shield gauge sounds, but maybe not given
// that the callers appear unreachable
/* 0x1C */ nw4r::snd::SoundHandle mShieldGaugeHandles[3];
/* 0x28 */ s32 field_0x28;
/* 0x2C */ s32 field_0x2C;
/* 0x30 */ s32 field_0x30;
/* 0x34 */ s32 field_0x34;
/* 0x38 */ u32 mTextboxAdvanceSound;
/* 0x3C */ nw4r::snd::SoundHandle mHandle4;
/* 0x40 */ u16 field_0x40;
/* 0x42 */ u16 field_0x42;
/* 0x44 */ s32 field_0x44;
};
#endif
+225
View File
@@ -0,0 +1,225 @@
#ifndef D_SND_SOUND_H
#define D_SND_SOUND_H
#include "common.h"
#include "nw4r/snd/snd_SeqTrack.h"
#include "nw4r/snd/snd_SoundHandle.h"
#include "nw4r/snd/snd_SoundStartable.h"
#include "nw4r/ut/ut_list.h"
class dSndSound_c;
// Not sure, handles a bunch of floats, exists in a ton of variants
class dSndControl_c {
public:
dSndControl_c(f32 value, f32 min, f32 max)
: mResetValue(value),
mMax(max),
mMin(min),
mCurrValue(value),
mStartValue(value),
mTargetValue(value),
mDuration(0),
mTimer(0),
mIsLinked(false) {}
~dSndControl_c() {}
virtual void configure(f32 value, f32 min, f32 max); // vt 0x08
virtual void reset(); // vt 0x0C
virtual void set(f32 value, s32 frames); // vt 0x10
virtual void calc(); // vt 0x14
virtual void stop(); // vt 0x18
bool isLinked() const {
return mIsLinked;
}
void setLinked(bool linked) {
mIsLinked = linked;
}
f32 getCurrentValue() const {
return mCurrValue;
}
f32 getTargetValue() const {
return mTargetValue;
}
bool isFinished() const {
return mTimer >= mDuration;
}
protected:
/* 0x04 */ f32 mResetValue;
/* 0x08 */ f32 mMax;
/* 0x0C */ f32 mMin;
/* 0x10 */ f32 mCurrValue;
/* 0x14 */ f32 mStartValue;
/* 0x18 */ f32 mTargetValue;
/* 0x1C */ s32 mDuration;
/* 0x20 */ s32 mTimer;
/* 0x24 */ nw4r::ut::Node mNode;
/* 0x2C */ bool mIsLinked;
};
class dSndControlSound_c : public dSndControl_c {
public:
dSndControlSound_c(f32 value, f32 min, f32 max) : dSndControl_c(value, min, max) {}
virtual void apply(dSndSound_c *pHandle) = 0; // vt 0x1C
private:
};
class dSndControlSoundVolume_c : public dSndControlSound_c {
public:
dSndControlSoundVolume_c() : dSndControlSound_c(1.0f, 0.0f, 2.0f) {}
virtual void apply(dSndSound_c *pHandle) override;
};
class dSndControlSoundPitch_c : public dSndControlSound_c {
public:
dSndControlSoundPitch_c() : dSndControlSound_c(1.0f, 0.25f, 4.0f) {}
virtual void apply(dSndSound_c *pHandle) override;
};
/** Stores pitch as a value from -24 to 24, exponentially scaling it to 0.25-4.0 */
class dSndControlSoundPitchLinear_c : public dSndControlSound_c {
public:
dSndControlSoundPitchLinear_c();
virtual void apply(dSndSound_c *pHandle) override;
virtual void set(f32 value, s32 frames) override;
void setControl(dSndControlSound_c *ctrl) {
mpOtherControl = ctrl;
}
private:
/* 0x30 */ dSndControlSound_c *mpOtherControl;
};
class dSndControlSoundSeqTempoRatio_c : public dSndControlSound_c {
public:
dSndControlSoundSeqTempoRatio_c() : dSndControlSound_c(1.0f, 0.25f, 4.0f) {}
virtual void apply(dSndSound_c *pHandle) override;
};
class dSndControlSoundSeqTrackVolume_c : public dSndControlSound_c {
public:
dSndControlSoundSeqTrackVolume_c() : dSndControlSound_c(1.0f, 0.0f, 2.0f) {}
virtual void apply(dSndSound_c *pHandle) override;
void setMask(u16 mask) {
mMask = mask;
}
private:
/* 0x2E */ u16 mMask;
};
class dSndControlSoundStrmTrackVolume_c : public dSndControlSound_c {
public:
dSndControlSoundStrmTrackVolume_c() : dSndControlSound_c(1.0f, 0.0f, 2.0f) {}
virtual void apply(dSndSound_c *pHandle) override;
void setMask(u16 mask) {
mMask = mask;
}
private:
/* 0x2E */ u16 mMask;
};
class dSndSound_c : public nw4r::snd::SoundHandle {
public:
dSndSound_c();
~dSndSound_c();
virtual void cancel(); // 0x08
virtual void calc(); // 0x0C
virtual void fadeIn(u32 id, s32 fadeFrames); // 0x10
virtual nw4r::snd::SoundStartable::StartResult prepareSound(u32 soundId, u32 startOffset); // 0x14
virtual nw4r::snd::SoundStartable::StartResult prepareSound(const char *label, u32 startOffset); // 0x18
virtual void onPreparing(u32 soundId, u32 startOffset); // 0x1C
virtual void stop(s32 fadeFrames); // 0x20
virtual void pause(bool pauseFlag, s32 fadeFrames); // 0x24
bool isStrmSound();
bool isWaveSound();
bool isSeqSound();
f32 getCurrentStrmTrackVolume(u32 index) const;
void setVolume(f32 volume, s32 frames);
void setPitchRelated(f32 pitch, s32 frames);
void setLinearPitch(f32 pitch, s32 frames);
void setTrackVolume(u32 trackFlags, f32 volume, s32 frames);
void setStrmTrackVolume(u32 trackFlags, f32 volume, s32 frames);
void setSingleSeqTrackVolume(u16 index, f32 volume, s32 frames);
void setSingleStrmTrackVolume(u16 index, f32 volume, s32 frames);
// why f32 frames?
void setEachSeqTrackVolume(u32 trackFlags, f32 frames);
void setEachStrmTrackVolume(u32 trackFlags, f32 frames);
void setSeqTempoRatio(f32 ratio, s32 frames);
void setSeqTrackMute(u32 trackFlags, nw4r::snd::SeqMute mute);
void forceStop();
s16 readSeqTrackVariable(int varNo);
void writeSeqTrackVariable(int varNo, s16 value);
void linkCtrl(dSndControlSound_c *);
void unlinkCtrl(dSndControlSound_c *);
protected:
bool cannotStart() const {
return mIsRunning && !mIsFadingOut && IsAttachedSound();
}
bool isRunning() const {
return mIsRunning && IsAttachedSound();
}
bool isPreparing() const {
return mIsPreparing && !mIsRunning;
}
bool canCancel() const {
return mIsRunning || mIsPreparing || IsAttachedSound();
}
bool isPreparingSoundId(u32 soundId) const {
bool ret = mIsPreparing;
if (ret) {
ret = !mIsRunning;
}
if (ret) {
ret = GetId() == soundId;
}
return ret;
}
void resetControls();
void resetTrackVolumes();
void setControlValue(dSndControlSound_c *ctrl, f32 value, s32 frames);
/* 0x08 */ u8 _0x08[0x10 - 0x08];
/* 0x10 */ u32 mPrevStartOffset;
/* 0x14 */ bool mIsPreparing;
/* 0x15 */ bool mPauseFlag;
/* 0x16 */ bool mIsRunning;
/* 0x17 */ bool mIsFadingOut;
/* 0x18 */ dSndControlSoundVolume_c mCtrlVolume;
/* 0x48 */ dSndControlSoundPitch_c mCtrlPitch;
/* 0x78 */ dSndControlSoundPitchLinear_c mLinearPitch;
/* 0xAC */ dSndControlSoundSeqTrackVolume_c *mpCtrlSeqTrackVolume;
/* 0xB0 */ dSndControlSoundStrmTrackVolume_c *mpCtrlStrmTrackVolume;
/* 0xB4 */ dSndControlSoundSeqTempoRatio_c mpCtrlSeqTempoRatio;
/* 0xE4 */ nw4r::ut::List mList;
};
#endif
+115
View File
@@ -0,0 +1,115 @@
#ifndef D_SOUND_SOURCE_H
#define D_SOUND_SOURCE_H
#include "common.h"
#include "d/snd/d_snd_3d_actor.h"
#include "d/snd/d_snd_source_if.h"
#include "nw4r/ut/ut_list.h"
#include <cstring>
class dSndSourceGroup_c;
/** Manages sound relating to a particular actor. */
/** Size: probably 0x15C */
class dSoundSource_c : public dSoundSourceIf_c, public dSnd3DActor_c {
public:
dSoundSource_c(u8 sourceType, dAcBase_c *, const char *name, dSndSourceGroup_c *pOwnerGroup);
virtual ~dSoundSource_c();
static u32 getCharacterTalkSoundId(u32 baseSoundId, dSoundSource_c *source);
u32 getRemoConSoundVariant(u32 soundId) const;
// This is where it gets a bit wild and this class starts mixing in overrides between
// new virtual functions, which causes the vtable to list these functions in exactly this
// order.
virtual const char *getName() const;
bool isName(const char *name) const {
return !std::strcmp(getName(), name);
}
virtual void d_s_vt_0x180();
virtual void d_s_vt_0x184();
virtual void d_s_vt_0x188();
virtual void d_s_vt_0x18C();
virtual void d_s_vt_0x190();
virtual void d_s_vt_0x194();
virtual void d_vt_0x58() override;
virtual void d_s_vt_0x19C();
virtual void d_s_vt_0x1A0();
virtual void d_vt_0x5C() override;
virtual StartResult
SetupSound(nw4r::snd::SoundHandle *pHandle, u32 soundId, const StartInfo *pStartInfo, void *) override;
virtual void d_s_vt_0x1AC();
virtual void d_s_vt_0x1B0();
virtual void d_s_vt_0x1B4();
virtual void d_s_vt_0x1B8();
virtual void d_s_vt_0x1BC();
virtual void d_s_vt_0x1C0();
virtual void d_s_vt_0x1C4(bool flag, int fadeFrames);
virtual void d_s_vt_0x1C8();
virtual void d_s_vt_0x1CC();
virtual void d_vt_0x38(bool flag, int fadeFrames) override;
virtual void d_s_vt_0x1D4();
virtual void d_s_vt_0x1D8();
virtual void d_s_vt_0x1DC();
virtual void d_s_vt_0x1E0();
virtual void d_s_vt_0x1E4();
virtual void d_s_vt_0x1E8();
// Overrides of dSoundSourceIf_c - always in the first section of
// the vtable, so the order is not certain. May have to reorder for weak
// function order.
virtual s32 getCategory() const override {
return mSourceCategory;
}
virtual const nw4r::math::VEC3 &getListenerPosition() const override;
virtual bool hasPlayingSounds() const override; // 0x48
virtual bool isPlayingSound(u32 soundId) override; // 0x4C
virtual bool isPlayingSound(const char *soundId) override; // 0x50
virtual bool isReadyMaybe() override {
return false;
} // 0x100
virtual void load(void *data, const char *name) override {} // 0x104
virtual void setFrame(f32 frame) override {} // 0x108
virtual void setRate(f32 frame) override {} // 0x10C
private:
// at 0x00: dSoundSourceIf_c vtable
// at 0x04: dSnd3DActor_c sub-object
// at 0x58: thunk-vtable
/* 0xE8 */ nw4r::ut::Node mMgrLink;
/* 0x0F0 */ const char *mpName;
/* 0x0F4 */ UNKWORD field_0x0F4;
/* 0x0F8 */ dAcBase_c *mpPlayer;
/* 0x0FC */ u8 mSourceCategory;
/* 0x0FD */ u8 mSourceType;
/* 0x0FE */ u8 field_0x0FE;
/* 0x0FF */ u8 field_0x0FF;
/* 0x100 */ u8 field_0x100;
/* 0x101 */ u8 field_0x101;
/* 0x102 */ u8 field_0x102;
/* 0x104 */ UNKWORD field_0x104;
/* 0x108 */ UNKWORD field_0x108;
/* 0x10C */ UNKWORD field_0x10C;
/* 0x110 */ nw4r::ut::List field_0x110; // node offset 0xEC
/* 0x11C */ UNKWORD field_0x11C;
/* 0x120 */ nw4r::ut::List field_0x120; // node offset 0x4
/* 0x12C */ nw4r::ut::List field_0x12C; // node offset 0x4
/* 0x138 */ nw4r::ut::Node mGroupLink; // node for list in dSndSourceGroup_c
/* 0x140 */ dSndSourceGroup_c *mpOwnerGroup;
/* 0x144 */ u8 _0x144[0x154 - 0x144];
/* 0x154 */ UNKWORD field_0x154;
/* 0x158 */ s16 field_0x158;
/* 0x15A */ s16 field_0x15A;
};
#endif
+74
View File
@@ -0,0 +1,74 @@
#ifndef D_SND_SOURCE_ENUMS_H
#define D_SND_SOURCE_ENUMS_H
// TODO: Expand when we figure out what the other entries have in common
enum SoundSourceType_e {
// 0-1: Player (0)
SND_SOURCE_PLAYER = 0,
SND_SOURCE_PLAYER_HEAD = 1,
// 2-9: Equipment (1)
SND_SOURCE_NET = 2,
SND_SOURCE_BLADE = 3,
SND_SOURCE_SHIELD = 4,
SND_SOURCE_WHIP = 5,
SND_SOURCE_BOOMERANG = 6,
SND_SOURCE_ARROW = 7,
SND_SOURCE_BOMB = 8,
SND_SOURCE_HOOKSHOT = 9,
// 10-31: Enemy? (2)
SND_SOURCE_ENEMY_10 = 10,
SND_SOURCE_BIGBOSS = 20,
SND_SOURCE_GIRAHUMU_3 = 24,
SND_SOURCE_BULLET = 29,
SND_SOURCE_ENEMY_31 = 31,
// 32-42: Object? (3)
SND_SOURCE_OBJECT = 32,
SND_SOURCE_BAMBOO = 34,
SND_SOURCE_ITEM = 35,
SND_SOURCE_TERRY_SHOP = 36,
SND_SOURCE_TIME_STONE = 37,
SND_SOURCE_CLEF = 38,
SND_SOURCE_SHUTTER = 39,
SND_SOURCE_OBJECT_42 = 42,
// 43-52: Npc (4)
SND_SOURCE_NPC_43 = 43,
SND_SOURCE_KENSEI = 44,
SND_SOURCE_PLAYER_BIRD = 45,
SND_SOURCE_NPC_48 = 48,
SND_SOURCE_INSECT = 49,
SND_SOURCE_NPC_NRM = 51,
SND_SOURCE_NPC_DRAGON = 52,
// 53: TagSound (5)
SND_SOURCE_TG_SOUND = 53,
// 54-57: Harp Related (6)
SND_SOURCE_54 = 54,
SND_SOURCE_OBJECT_WARP = 55,
SND_SOURCE_SW_HARP = 56,
SND_SOURCE_57 = 57,
// 58: ? (7)
SND_SOURCE_58 = 58,
// 59: ? (9)
SND_SOURCE_59 = 59,
};
enum SoundSourceCategory_e {
SND_SOURCE_CATEGORY_PLAYER = 0,
SND_SOURCE_CATEGORY_EQUIPMENT = 1,
SND_SOURCE_CATEGORY_ENEMY = 2,
SND_SOURCE_CATEGORY_OBJECT = 3,
SND_SOURCE_CATEGORY_NPC = 4,
SND_SOURCE_CATEGORY_TG_SOUND = 5,
SND_SOURCE_CATEGORY_6 = 6,
SND_SOURCE_CATEGORY_7 = 7,
SND_SOURCE_CATEGORY_9 = 9,
};
#endif
+63
View File
@@ -0,0 +1,63 @@
#ifndef D_SND_SOURCE_GROUP_H
#define D_SND_SOURCE_GROUP_H
#include "common.h"
#include "d/snd/d_snd_misc.h"
#include "nw4r/ut/ut_list.h"
#include "sized_string.h"
class dSoundSource_c;
/**
* All similar dSoundSource_c's are put in a group. The game can then find the closest
* source for a given type by name/id, for example for changing things about the music
* depending on proximity to a certain object or enemy.
*
* Through its dSndSourceParam, it can also "send" parameters to all dSnd3DActors
* corresponding to these sound sources.
*
* Size: 0x70
*/
class dSndSourceGroup_c {
public:
dSndSourceGroup_c();
dSndSourceGroup_c(s32 sourceType, const char*, u32, s32 mSubtype);
~dSndSourceGroup_c();
void registerSource(dSoundSource_c *);
void unregisterSource(dSoundSource_c *);
dSndSourceParam* getAmbientParam() {
return &mParam;
}
dSoundSource_c *getSourceClosestToListener();
dSoundSource_c *getSourceClosestToPlayer();
s32 getNumSources() const;
void set(s32 type, const char *name);
void calc();
private:
bool setParamFromName(const char *name);
void resetSoundSourceParam();
void clearList();
/* 0x00 */ nw4r::ut::Node mNode1;
/* 0x08 */ nw4r::ut::Node mNode2;
/* 0x10 */ UNKWORD field_0x10;
/* 0x14 */ s32 mSourceCategory;
/* 0x18 */ s32 mSubtype;
/* 0x1C */ u8 field_0x1C;
/* 0x1D */ u8 field_0x1D;
/* 0x1E */ SizedString<32> mName;
/* 0x40 */ UNKWORD field_0x40;
/* 0x44 */ nw4r::ut::List mSourceList;
/* 0x50 */ dSndSourceParam mParam;
/* 0x64 */ dSoundSource_c *mpCachedClosestSourceToListener;
/* 0x68 */ dSoundSource_c *mpCachedClosestSourceToPlayer;
/* 0x6C */ bool mCalculatedClosestToListener;
/* 0x6D */ bool mCalculatedClosestToPlayer;
};
#endif
+87
View File
@@ -0,0 +1,87 @@
#ifndef D_SOUND_SOURCE_IF_H
#define D_SOUND_SOURCE_IF_H
#include "common.h"
#include "nw4r/math/math_types.h"
class dAcBase_c;
/** An abstract interface for sound relating to a particular actor. */
class dSoundSourceIf_c {
public:
virtual ~dSoundSourceIf_c() {}
#define SOUNDSOURCE_VIRTUAL(offset) virtual void vt_##offset() = 0;
SOUNDSOURCE_VIRTUAL(0x0C);
virtual s32 getCategory() const = 0; // 0x10
SOUNDSOURCE_VIRTUAL(0x14);
virtual s32 getActorType() const = 0;
SOUNDSOURCE_VIRTUAL(0x1C);
SOUNDSOURCE_VIRTUAL(0x20);
SOUNDSOURCE_VIRTUAL(0x24);
virtual const nw4r::math::VEC3 &getListenerPosition() const = 0; // 0x28
SOUNDSOURCE_VIRTUAL(0x2C);
SOUNDSOURCE_VIRTUAL(0x30);
SOUNDSOURCE_VIRTUAL(0x34);
SOUNDSOURCE_VIRTUAL(0x38);
SOUNDSOURCE_VIRTUAL(0x3C);
SOUNDSOURCE_VIRTUAL(0x40);
SOUNDSOURCE_VIRTUAL(0x44);
virtual bool hasPlayingSounds() const = 0; // 0x48
virtual bool isPlayingSound(u32 soundId) = 0; // 0x4C
virtual bool isPlayingSound(const char *soundId) = 0; // 0x50
SOUNDSOURCE_VIRTUAL(0x54);
SOUNDSOURCE_VIRTUAL(0x58);
SOUNDSOURCE_VIRTUAL(0x5C);
SOUNDSOURCE_VIRTUAL(0x60);
SOUNDSOURCE_VIRTUAL(0x64);
SOUNDSOURCE_VIRTUAL(0x68);
SOUNDSOURCE_VIRTUAL(0x6C);
SOUNDSOURCE_VIRTUAL(0x70);
SOUNDSOURCE_VIRTUAL(0x74);
SOUNDSOURCE_VIRTUAL(0x78);
SOUNDSOURCE_VIRTUAL(0x7C);
SOUNDSOURCE_VIRTUAL(0x80);
SOUNDSOURCE_VIRTUAL(0x84);
SOUNDSOURCE_VIRTUAL(0x88);
SOUNDSOURCE_VIRTUAL(0x8C);
SOUNDSOURCE_VIRTUAL(0x90);
SOUNDSOURCE_VIRTUAL(0x94);
SOUNDSOURCE_VIRTUAL(0x98);
SOUNDSOURCE_VIRTUAL(0x9C);
SOUNDSOURCE_VIRTUAL(0xA0);
SOUNDSOURCE_VIRTUAL(0xA4);
SOUNDSOURCE_VIRTUAL(0xA8);
SOUNDSOURCE_VIRTUAL(0xAC);
SOUNDSOURCE_VIRTUAL(0xB0);
SOUNDSOURCE_VIRTUAL(0xB4);
SOUNDSOURCE_VIRTUAL(0xB8);
SOUNDSOURCE_VIRTUAL(0xBC);
SOUNDSOURCE_VIRTUAL(0xC0);
SOUNDSOURCE_VIRTUAL(0xC4);
SOUNDSOURCE_VIRTUAL(0xC8);
SOUNDSOURCE_VIRTUAL(0xCC);
SOUNDSOURCE_VIRTUAL(0xD0);
SOUNDSOURCE_VIRTUAL(0xD4);
SOUNDSOURCE_VIRTUAL(0xD8);
SOUNDSOURCE_VIRTUAL(0xDC);
SOUNDSOURCE_VIRTUAL(0xE0);
SOUNDSOURCE_VIRTUAL(0xE4);
SOUNDSOURCE_VIRTUAL(0xE8);
SOUNDSOURCE_VIRTUAL(0xEC);
SOUNDSOURCE_VIRTUAL(0xF0);
SOUNDSOURCE_VIRTUAL(0xF4);
SOUNDSOURCE_VIRTUAL(0xF8);
SOUNDSOURCE_VIRTUAL(0xFC);
virtual bool isReadyMaybe() = 0; // 0x100
virtual void load(void *data, const char *name) = 0; // 0x104
virtual void setFrame(f32 frame) = 0; // 0x108
virtual void setRate(f32 frame) = 0; // 0x10C
SOUNDSOURCE_VIRTUAL(0x110);
SOUNDSOURCE_VIRTUAL(0x114);
SOUNDSOURCE_VIRTUAL(0x118);
};
#endif
+60
View File
@@ -0,0 +1,60 @@
#ifndef D_SND_SOURCE_MGR_H
#define D_SND_SOURCE_MGR_H
#include "d/snd/d_snd_source.h"
#include "d/snd/d_snd_source_group.h"
#include "d/snd/d_snd_util.h"
#include "nw4r/ut/ut_list.h"
SND_DISPOSER_FORWARD_DECL(dSndSourceMgr_c);
class dSndSourceMgr_c {
SND_DISPOSER_MEMBERS(dSndSourceMgr_c);
static const u32 NUM_GROUPS = 128;
public:
dSndSourceMgr_c();
void registerSource(dSoundSource_c *source);
void unregisterSource(dSoundSource_c *source);
void playFlowSound(u32 id);
static s32 getSourceCategoryForSourceType(s32 sourceType, const char *name);
private:
static bool isCertainEnemyType(dSoundSource_c *source);
void removeSourceFromList(dSoundSource_c *source, nw4r::ut::List *list);
void clearSourceLists();
void clearSourceList(nw4r::ut::List *list);
/* 0x0010 */ u8 field_0x0010;
/* 0x0011 */ u8 field_0x0011;
/* 0x0012 */ u8 field_0x0012;
/* 0x0013 */ u8 field_0x0013;
/* 0x0014 */ dSndSourceGroup_c *mpDefaultGroup;
/* 0x0018 */ nw4r::ut::List mGroupList1;
/* 0x0024 */ nw4r::ut::List mGroupList2;
/* 0x0030 */ nw4r::ut::List mGroupList3;
/* 0x003C */ dSndSourceGroup_c mGroups[NUM_GROUPS];
// Not sure what these are for
/* 0x383C */ nw4r::ut::List mAllSources; // node offset 0xE8, probably into dSoundSource::mMgrLink
/* 0x3848 */ nw4r::ut::List field_0x3848; // node offset 0x15C, possibly a subset of source types
/* 0x3854 */ nw4r::ut::List field_0x3854; // node offset 0x160
/* 0x3860 */ UNKWORD field_0x3860;
/* 0x3864 */ UNKWORD field_0x3864;
/* 0x3868 */ UNKWORD field_0x3868;
/* 0x386C */ f32 field_0x386C;
/* 0x3870 */ dSoundSource_c *mpPlayerSource;
/* 0x3874 */ dSoundSource_c *mpKenseiSource;
/* 0x3878 */ dSoundSource_c *mpBoomerangSource;
/* 0x387C */ dSoundSource_c *mpTBoatSource;
/* 0x3880 */ dSoundSource_c *field_0x3880; // fi singing related?
/* 0x3884 */ dSoundSource_c *field_0x3884;
};
#endif
+71
View File
@@ -0,0 +1,71 @@
#ifndef D_SND_UTIL_H
#define D_SND_UTIL_H
#include "common.h"
#include "egg/core/eggDisposer.h"
// This setup is only inferred. d/snd uses it all over the place.
// This works for dSndPlayerMgr_c, which has a vtable of its own but the Disposer at offset 0.
// It also works for the factory at 0x80399c20, which calls a base class ctor,
// an inline ctor, and has the Disposer at offset 0x18
template <typename T>
struct SndMgrDisposer : public EGG::Disposer {
virtual ~SndMgrDisposer();
static T *create();
static void remove();
};
template <typename T>
SndMgrDisposer<T>::~SndMgrDisposer() {
if (this == T::sDisposer) {
remove();
}
}
template <typename T>
T *SndMgrDisposer<T>::create() {
if (T::sInstance == nullptr) {
T::sInstance = new T();
T::sDisposer = T::sInstance->GetDisposer();
}
return T::sInstance;
}
template <typename T>
void SndMgrDisposer<T>::remove() {
T::sInstance = nullptr;
T::sDisposer = nullptr;
}
#define SND_DISPOSER_FORWARD_DECL(class_name) \
class class_name; \
extern template class SndMgrDisposer<class_name>;
#define SND_DISPOSER_DEFINE(class_name) \
template class SndMgrDisposer<class_name>; \
class_name *class_name::sInstance; \
SndMgrDisposer<class_name> *class_name::sDisposer;
#define SND_DISPOSER_MEMBERS(class_name) \
public: \
SndMgrDisposer<class_name> *GetDisposer() { \
return &mDisposer; \
} \
\
static class_name *GetInstance() { \
return sInstance; \
} \
\
static void create() { \
SndMgrDisposer<class_name>::create(); \
} \
\
static class_name *sInstance; \
static SndMgrDisposer<class_name> *sDisposer; \
\
private: \
SndMgrDisposer<class_name> mDisposer;
#endif
@@ -1,9 +1,8 @@
#ifndef SMALL_SOUND_MGR_H
#define SMALL_SOUND_MGR_H
#ifndef D_SND_WZSOUND_H
#define D_SND_WZSOUND_H
// Thanks kiwi! https://gist.github.com/kiwi515/47bb17b07ed502bdfa7faa60bc48a3c7
#include "common.h"
enum WZSound {
/* 0x0000 */ SE_L_FLIPED,
/* 0x0001 */ SE_L_FS_START,
@@ -6469,18 +6468,4 @@ enum WZSound {
/* 0x193D */ LABEL_SOUND_END
};
class SmallSoundManager {
public:
void playSound(WZSound id);
void playSoundWithPitch(WZSound id, f32 pitch);
void playButtonPressSoundWhenAdvancingTextBoxes(f32);
static SmallSoundManager *GetInstance() {
return sInstance;
}
private:
static SmallSoundManager *sInstance;
};
#endif
+5 -2
View File
@@ -1,13 +1,16 @@
#ifndef D_T_SHUTTER_FENCE_FORBIDDANCE_H
#define D_T_SHUTTER_FENCE_FORBIDDANCE_H
#include "d/a/d_a_base.h"
#include "d/t/d_tg.h"
class dTgShutterFenceForbiddance_c : public dAcBase_c {
class dTgShutterFenceForbiddance_c : public dTg_c {
public:
dTgShutterFenceForbiddance_c();
virtual ~dTgShutterFenceForbiddance_c();
virtual int create() override;
virtual int actorExecute() override;
private:
};
+12 -19
View File
@@ -26,12 +26,20 @@ public:
void stopAllSound();
u32 changeNameToId(const char *name) {
return mOpenSndArchive->ConvertLabelStringToSoundId(name);
u32 id = -1;
if (mOpenSndArchive != nullptr) {
id = mOpenSndArchive->ConvertLabelStringToSoundId(name);
}
return id;
}
nw4r::snd::SoundArchivePlayer *getPlayer() {
return mActiveSndArchivePlayer;
}
nw4r::snd::SoundArchive *getArchive() {
return mOpenSndArchive;
}
void setLoadStringLabels(bool bLoad) {
mLoadLabelStringData = bLoad;
}
@@ -65,12 +73,7 @@ public:
virtual bool startSound(nw4r::snd::SoundHandle *handle, const char *name) // at 0x40
{
u32 id = -1;
if (mOpenSndArchive) {
id = changeNameToId(name);
}
return ArcPlayer::startSound(handle, id);
return ArcPlayer::startSound(handle, changeNameToId(name));
}
virtual bool prepareSound(nw4r::snd::SoundHandle *handle, u32 id) // at 0x44
@@ -85,12 +88,7 @@ public:
virtual bool prepareSound(nw4r::snd::SoundHandle *handle, const char *name) // at 0x4C
{
u32 id = -1;
if (mOpenSndArchive) {
id = changeNameToId(name);
}
return ArcPlayer::prepareSound(handle, id);
return ArcPlayer::prepareSound(handle, changeNameToId(name));
}
virtual bool holdSound(nw4r::snd::SoundHandle *handle, u32 id) // at 0x50
@@ -105,12 +103,7 @@ public:
virtual bool holdSound(nw4r::snd::SoundHandle *handle, const char *name) // at 0x58
{
u32 id = -1;
if (mOpenSndArchive) {
id = changeNameToId(name);
}
return ArcPlayer::holdSound(handle, id);
return ArcPlayer::holdSound(handle, changeNameToId(name));
}
private:
+35 -4
View File
@@ -21,9 +21,38 @@ public:
~SoundHeapMgr() {
destroySoundHeap();
}
virtual bool loadState(s32 id) {}
virtual int getCurrentLevel() {}
virtual void stateProc() {}
int saveState() {
return mSoundHeap.SaveState();
}
virtual bool loadState(s32 id) {
s32 level = mSoundHeap.GetCurrentLevel();
if (id > 0 && level >= id) {
mSoundHeap.LoadState(id);
return true;
} else {
return false;
}
}
virtual int getCurrentLevel() {
return mSoundHeap.GetCurrentLevel();
}
virtual void stateProc() {
OSMessage msg;
if (OSReceiveMessage(&mQueue1.mQueue, &msg, 0)) {
bool ok = loadState((s32)msg);
OSSendMessage(&mQueue3.mQueue, (OSMessage)ok, 0);
}
if (OSReceiveMessage(&mQueue2.mQueue, &msg, 0)) {
int ok = mSoundHeap.SaveState();
OSSendMessage(&mQueue3.mQueue, (OSMessage)ok, 0);
}
if (OSReceiveMessage(&mQueue, &msg, 0)) {
int level = getCurrentLevel();
OSSendMessage(&mQueue3.mQueue, (OSMessage)level, 0);
}
}
void createSoundHeap(Allocator *allocator, u32 size);
void destroySoundHeap();
@@ -34,7 +63,9 @@ public:
private:
nw4r::snd::SoundHeap mSoundHeap;
u8 unk[0x68 - 0x38];
// I guess we're not initializing this queue?
OSMessageQueue mQueue;
OSMessage mBuffer[4];
SoundMessageQueue mQueue1;
SoundMessageQueue mQueue2;
SoundMessageQueue mQueue3;
+1 -1
View File
@@ -12,7 +12,7 @@ namespace EGG {
struct MultiArcSimpleAudioMgr {
u8 field_0x000[0x0FC - 0x000];
s32 field_0x0FC;
ArcPlayer players[];
ArcPlayer players[1];
nw4r::snd::SoundArchivePlayer *getPlayer(int i) {
return players[i].getPlayer();
+23 -1
View File
@@ -6,7 +6,6 @@
#include "egg/core/eggHeap.h"
#include "egg/core/eggStreamDecomp.h"
namespace EGG {
class DvdRipper {
@@ -28,6 +27,29 @@ public:
typedef void (*UnkCallback)(void *);
public:
// Not sure
struct Arg {
Arg(const char *path, u8 *pOut, Heap *pHeap, EAllocDirection allocDir, u32 offset, u32 *pRead, u32 *fileSize)
: path(path),
pOut(pOut),
pHeap(pHeap),
allocDir(allocDir),
offset(offset),
pRead(pRead),
fileSize(fileSize) {}
const char *path;
u8 *pOut;
Heap *pHeap;
EAllocDirection allocDir;
u32 offset;
u32 *pRead;
u32 *fileSize;
};
static u8 *loadToMainRAM(Arg &arg) {
return loadToMainRAM(arg.path, arg.pOut, arg.pHeap, arg.allocDir, arg.offset, arg.pRead, arg.fileSize);
}
static u8 *
loadToMainRAM(s32 entryNum, u8 *pOut, Heap *pHeap, EAllocDirection allocDir, u32 offset, u32 *pRead, u32 *fileSize);
+18 -1
View File
@@ -35,6 +35,15 @@ protected:
class LookAtCamera : public BaseCamera {
public:
LookAtCamera() : mPos(0.0f, 10.0f, 0.0f), mAt(0.0f, 0.0f, 0.0f), mUp(0.0f, 1.0f, 0.0f) {}
LookAtCamera& operator=(const LookAtCamera &other) {
mViewMtx.copyFrom(other.mViewMtx);
mOtherMtx.copyFrom(other.mOtherMtx);
mPos = other.mPos;
mAt = other.mAt;
mUp = other.mUp;
return *this;
}
// Which way around?
virtual Matrix34f &getViewMatrix() override {
return mViewMtx;
@@ -53,7 +62,15 @@ public:
virtual void doDraw() override;
virtual Matrix34f &getViewMatrixOld() override;
protected:
Vector3f getDirection() const {
return mAt - mPos;
}
Vector3f getOtherDirection() const {
return mPos - mAt;
}
public:
/* 0x64 */ Vector3f mPos;
/* 0x70 */ Vector3f mAt;
/* 0x7C */ Vector3f mUp;
+9
View File
@@ -4,6 +4,7 @@
#include "common.h"
#include "egg/math/eggQuat.h"
#include "egg/math/eggVector.h"
#include "nw4r/math/math_types.h"
namespace EGG {
@@ -55,6 +56,14 @@ struct Matrix34f {
void multiplyTo(const Matrix34f &m2, Matrix34f &to) const;
void dump();
operator nw4r::math::MTX34 *() {
return (nw4r::math::MTX34 *)this;
}
operator const nw4r::math::MTX34 *() const {
return (nw4r::math::MTX34 *)this;
}
public:
void concat(const Matrix34f &, Matrix34f &) const;
void rotate(const Vector3f &rpy) const;
+2 -2
View File
@@ -39,14 +39,14 @@ struct Quatf {
/* 8049b3b0 */ void setAxisRotation(const Vector3f &, f32);
/* 8049b450 */ f32 norm();
/* 8049b480 */ void normalise();
/* 8049b500 */ Quatf conjugate();
/* 8049b500 */ Quatf conjugate() const;
/* */ Quatf inverse();
/* 8049b550 */ Vector3f rotateVector(const Vector3f &);
/* */ Vector3f rotateVectorInv(const Vector3f &);
/* 8049b800 */ void slerpTo(const Quatf &, f32, Quatf &out) const;
/* 8049b800 */ void limitSlerpTo(const Quatf &, f32, f32, Quatf &out) const;
/* */ void makeVectorRotationLimit(Vector3f &, Vector3f &, f32);
/* 8049bbb0 */ void makeVectorRotation(Vector3f &, Vector3f &);
/* 8049bbb0 */ void makeVectorRotation(const Vector3f &, const Vector3f &);
void multScalar(f32 s) {
w *= s;
+4 -1
View File
@@ -15,7 +15,6 @@
#include "f/f_manager.h"
#include "f/f_profile.h"
// Ghidra: fBase
// size: 0x64
// official name
@@ -91,6 +90,10 @@ public:
group_type = m_tmpCtData.group_type;
}
u32 getFromParams(u8 shift, u32 mask) {
return (params >> shift) & mask;
}
public:
/* 802e12f0 */ fBase_c();
/* 802e23b0 */ static void *operator new(size_t);
+1 -1
View File
@@ -2,11 +2,11 @@
#define NW4R_LYT_LAYOUT_H
#include "common.h"
#include "new.h"
#include "nw4r/lyt/lyt_animation.h"
#include "nw4r/lyt/lyt_types.h"
#include "rvl/MEM/mem_allocator.h"
#include <new>
namespace nw4r {
namespace lyt {
+4 -2
View File
@@ -5,6 +5,8 @@
#include "nw4r/types_nw4r.h" // IWYU pragma: export
#include "rvl/OS.h" // IWYU pragma: export
#include <cmath>
#define NW4R_MATH_QNAN (-(0.0f / 0.0f))
#define NW4R_MATH_FLT_MAX 3.402823466e+38f
@@ -30,7 +32,7 @@ inline f32 FAbs(register f32 x) {
}
inline f32 FCeil(f32 x) {
return ceilf(x);
return std::ceilf(x);
}
inline f32 FExp(f32 x) {
@@ -38,7 +40,7 @@ inline f32 FExp(f32 x) {
}
inline f32 FFloor(f32 x) {
return floorf(x);
return std::floorf(x);
}
inline f32 FInv(register f32 x) {
+128
View File
@@ -1 +1,129 @@
/* Only implemented to the extent necessary to match data sections. */
#include "nw4r/snd/snd_AnimSoundReader.h"
#include "nw4r/snd/snd_BasicSound.h"
#include "nw4r/snd/snd_SoundHandle.h"
#include "nw4r/snd/snd_SoundStartable.h"
// Class and non-inlined function names from InazumaWii
// Names of automatically inlined functions from BBA
namespace nw4r {
namespace snd {
namespace detail {
class AnimEventPlayer {
public:
AnimEventPlayer();
~AnimEventPlayer();
SoundHandle *GetHandle() {
return &mHandle;
}
bool IsAttachedSound() const {
return mHandle.IsAttachedSound();
}
bool IsCurrentEvent(const AnimEvent *event) const {
return event == mpEvent;
}
int GetPriority() const {
if (!IsAttachedSound()) {
return 0;
}
return mHandle.detail_GetAttachedSound()->GetPriority();
}
bool IsRunning() const {
return mIsRunning;
}
void UpdateFrame();
void ForceStop();
void StopEvent(const AnimEvent *event) {
if (mpEvent == event) {
ForceStop();
}
}
void SetVolume(f32 volume) {
if (IsAttachedSound()) {
mHandle.detail_GetAttachedSound()->SetVolume(volume, 0);
}
}
void SetPitch(f32 pitch) {
if (IsAttachedSound()) {
mHandle.detail_GetAttachedSound()->SetPitch(pitch);
}
}
void StartEvent(const AnimEvent *event, SoundStartable *startable, bool b);
void HoldEvent(const AnimEvent *event, SoundStartable *startable, bool b);
// Not sure about these, this could be related to
// InitParam__Q44nw4r3snd6detail15AnimEventPlayerFPCQ44nw4r3snd6detail9AnimEventb
// from BBA, but SetVariable is almost certainly an inline (duplicated code)
// but the float argument is read from AnimSoundImpl so something seems to have
// changed.
void SetVolumePitch(const AnimEvent *event, bool b);
void SetVariable(const AnimEvent *event, u32 varNo, f32 f);
private:
SoundHandle mHandle; // at 0x00
const AnimEvent *mpEvent; // at 0x04
bool mIsRunning; // at 0x08
};
class AnimSoundImpl {
public:
enum PlayDirection {
FORWARD,
BACKWARD,
};
AnimSoundImpl(SoundStartable &startable, AnimEventPlayer *player, int);
~AnimSoundImpl();
bool Setup(const void *data);
void Shutdown();
void ResetFrame(f32, int);
void UpdateFrame(f32 frame, PlayDirection dir);
void UpdateForward(f32 frame);
void UpdateBackward(f32 frame);
void UpdateOneFrame(s32 duration, PlayDirection direction);
void UpdateTrigger(const AnimEventRef *, s32, PlayDirection);
void UpdateForwardRange(const AnimEventRef *, s32);
void UpdateBackwardRange(const AnimEventRef *, s32);
void StartEvent(const AnimEvent *, bool);
void HoldEvent(const AnimEvent *, bool);
void StopEvent(const AnimEvent *);
bool IsPlayableLoopCount(const nw4r::snd::detail::AnimEventFrameInfo&);
typedef void (*Callback)(int, s32, const char *, UNKWORD, UNKWORD);
private:
/* 0x00 */ SoundStartable &mStartable;
/* 0x04 */ AnimSoundFileReader mReader;
/* 0x0C */ f32 field_0x0C;
/* 0x10 */ AnimEventPlayer *mpSounds;
/* 0x14 */ int mNumSounds;
/* 0x18 */ bool mIsActive;
/* 0x19 */ u8 field_0x19;
/* 0x1A */ u8 field_0x1A;
/* 0x1C */ UNKWORD field_0x1C;
/* 0x20 */ Callback mCallback;
/* 0x24 */ UNKWORD field_0x24;
/* 0x28 */ f32 field_0x28;
/* 0x2C */ f32 mVariableValue;
};
} // namespace detail
} // namespace snd
} // namespace nw4r
+111
View File
@@ -0,0 +1,111 @@
#include "nw4r/snd/snd_Util.h"
#include "nw4r/ut/ut_binaryFileFormat.h"
namespace nw4r {
namespace snd {
namespace detail {
// Type and name revealed by BBA
struct AnimEventFrameInfo {
int field_0x00; // at 0x00
int field_0x04; // at 0x04
u8 flags; // at 0x08
s8 field_0x09; // at 0x09
u8 field_0x0A; // at 0x0A
};
struct AnimEvent {
u32 flags; // at 0x00
u32 soundId; // at 0x04
detail::Util::DataRef<const char> soundLabelRef; // at 0x08
u8 volume; // at 0x10
u8 field_0x11; // at 0x11
u8 varNo; // at 0x12
f32 pitch; // at 0x14
UNKWORD field_0x18; // at 0x18
UNKWORD field_0x1C; // at 0x1C
bool ShouldPreventStart() const {
return flags & 1;
}
const char *GetSoundLabel() const {
return Util::GetDataRefAddress0(soundLabelRef, this);
}
bool GetVarNo(u32 *var) const {
if (flags & 2) {
*var = varNo;
return true;
}
return false;
}
bool MatchesDirection(int playDirection) const {
bool ret = 0;
u32 config = field_0x11;
if ((config == 0 || (playDirection == 0 && config == 1) || (playDirection == 1 && config == 2))) {
ret = true;
}
return ret;
}
};
// Name from Inazuma, BBA
struct AnimEventRef {
AnimEventFrameInfo mInfo; // at 0x00
Util::DataRef<AnimEvent> event; // at 0x0C
};
// Names unknown
struct AnimSoundFile {
static u32 const SIGNATURE_FILE = NW4R_FOUR_BYTE('R', 'A', 'S', 'D');
static int const FILE_VERSION = NW4R_FILE_VERSION(1, 0);
struct Header {
ut::BinaryFileHeader fileHeader; // size 0x10, offset 0x00
u32 blockOffset; // at 0x10
};
struct EventTable {
Util::Table<AnimEventRef> eventRef; // at 0x00
};
struct Block {
ut::BinaryBlockHeader blockHeader; // at 0x00
u32 duration; // at 0x08
Util::DataRef<EventTable> eventTable; // at 0x0C
};
};
// Name from Inazuma
class AnimSoundFileReader {
public:
AnimSoundFileReader();
bool Setup(const void *buf);
void Shutdown();
u32 GetEventCount() const;
const AnimSoundFile::EventTable *GetEventTable() const;
const AnimEventRef *GetEventRef(u32 id) const;
const AnimEvent *GetEvent(const AnimEventRef *ref) const;
bool IsValid() const {
return mpHeader != NULL;
}
u32 GetAnimDuration() const {
if (!IsValid()) {
return 0;
}
return mpBlock->duration;
}
private:
const AnimSoundFile::Header *mpHeader; // at 0x00
const AnimSoundFile::Block *mpBlock; // at 0x04
};
} // namespace detail
} // namespace snd
} // namespace nw4r
+12 -6
View File
@@ -7,6 +7,7 @@
#include "common.h"
#include "nw4r/snd/snd_AxVoice.h"
#include "nw4r/snd/snd_global.h"
#include "nw4r/snd/snd_FxBase.h"
@@ -106,6 +107,10 @@ namespace nw4r { namespace snd { namespace detail
return mResetReadyCounter == 0;
}
AxVoice::SrcType GetSrcType() const {
return mSrcType;
}
private:
// cdtors
AxManager();
@@ -117,11 +122,11 @@ namespace nw4r { namespace snd { namespace detail
// static members
private:
static u8 const AUX_CALLBACK_WAIT_FRAME;
static u8 const AUX_CALLBACK_WAIT_FRAME = 6;
static u16 const AUX_RETURN_VOLUME_MAX = AX_MAX_VOLUME;
static int const FX_SAMPLE_RATE;
static SampleFormat const FX_SAMPLE_FORMAT;
static int const FX_BUFFER_SIZE;
static int const FX_SAMPLE_RATE = 32000;
static SampleFormat const FX_SAMPLE_FORMAT = SAMPLE_FORMAT_PCM_S32;
static int const FX_BUFFER_SIZE = 0x180;
static int const ZERO_BUFFER_SIZE = 256;
static int const SAMPLES_PAR_AUDIO_FRAME;
static int const AUDIO_FRAME_INTERVAL;
@@ -147,7 +152,7 @@ namespace nw4r { namespace snd { namespace detail
MoveValue<f32, int> mMainOutVolume; // size 0x10, offset 0x2c
MoveValue<f32, int> mVolumeForReset; // size 0x10, offset 0x3c
AIDMACallback mOldAidCallback; // size 0x04, offset 0x4c
s32 mResetReadyCounter; // size 0x04, offset 0x50
volatile s32 mResetReadyCounter; // size 0x04, offset 0x50
MoveValue<f32, int> mAuxFadeVolume[AUX_BUS_NUM]; // size 0x30, offset 0x54
MoveValue<f32, int> mAuxUserVolume[AUX_BUS_NUM]; // size 0x30, offset 0x84
FxBase::LinkList mFxList[AUX_BUS_NUM]; // size 0x24, offset 0xb4
@@ -156,7 +161,8 @@ namespace nw4r { namespace snd { namespace detail
u8 mAuxCallbackWaitCounter[AUX_BUS_NUM]; // size 0x03, offset 0xf0
/* 1 byte padding */
u32 mEffectProcessTick[AUX_BUS_NUM]; // size 0x0c, offset 0xf4
}; // size 0x100
AxVoice::SrcType mSrcType;
}; // size 0x104
}}} // namespace nw4r::snd::detail
#endif // NW4R_SND_AX_MANAGER_H
+5 -1
View File
@@ -121,6 +121,8 @@ namespace nw4r { namespace snd { namespace detail
void SetVoiceBiquad(AXPBBIQUAD const &biquad);
void SetVoiceBiquadCoefs(u16 b0, u16 b1, u16 b2, u16 a1, u16 a2);
void SetVoiceRmtIIR(__AXPBRMTIIR const &iir);
void SetVoiceRmtOn(u16 on);
void SetVoiceRmtMix(_AXPBRMTMIX const &iir);
void SetVoiceRmtIIRCoefs(u16 type, ...);
void Set(AXVPB *vpb);
@@ -235,6 +237,7 @@ namespace nw4r { namespace snd { namespace detail
void SetLoopFlag(bool loopFlag);
void SetPriority(u32 priority);
void SetVoiceType(VoiceType type);
void EnableRemote(bool enable);
void ResetDelta();
void SetAddr(bool loopFlag, void const *waveAddr, u32 startOffset,
u32 loopStart, u32 loopEnd);
@@ -242,6 +245,7 @@ namespace nw4r { namespace snd { namespace detail
void SetAdpcm(AdpcmParam const *param);
void SetAdpcmLoop(AdpcmLoopParam const *param);
bool SetMix(MixParam const &param);
void SetRmtMix(const RemoteMixParam &param);
void SetSrc(f32 ratio, bool initialUpdate);
void SetVe(f32 volume, f32 initVolume);
void SetLpf(u16 freq);
@@ -269,7 +273,7 @@ namespace nw4r { namespace snd { namespace detail
static void CalcOffsetAdpcmParam(u16 *outPredScale, u16 *outYn1,
u16 *outYn2, u32 offset,
void *dataAddr,
const void *dataAddr,
AdpcmParam const &adpcmParam);
private:
+2 -3
View File
@@ -9,13 +9,12 @@ namespace snd {
namespace detail {
struct AxfxImpl {
bool mIsActive; // at 0x0
MEMiHeapHead *mHeap; // at 0x4
u32 mAllocCount; // at 0x8
static const u32 HEAP_SIZE_MIN = MEM_FRM_HEAP_MIN_SIZE + 32;
AxfxImpl() : mIsActive(false), mHeap(NULL), mAllocCount(0) {}
AxfxImpl() : mHeap(NULL), mAllocCount(0) {}
bool CreateHeap(void *pBuffer, u32 size);
void DestroyHeap();
@@ -29,7 +28,7 @@ struct AxfxImpl {
}
void HookAlloc(AXFXAllocHook *pAllocHook, AXFXFreeHook *pFreeHook);
void RestoreAlloc(AXFXAllocHook allocHook, AXFXFreeHook freeHook);
u32 RestoreAlloc(AXFXAllocHook allocHook, AXFXFreeHook freeHook);
static void *Alloc(u32 size);
static void Free(void *pBlock);
+4 -1
View File
@@ -44,7 +44,8 @@ namespace nw4r { namespace snd { namespace detail
PanMode panMode; // size 0x04, offset 0x28
PanCurve panCurve; // size 0x04, offset 0x2c
f32 fxSend[AUX_BUS_NUM]; // size 0x0c, offset 0x30
VoiceOutParam voiceOutParam[4]; // size 0x60, offset 0x3c
f32 remoteOutVolume[4]; // size 0x04, offset 0x3c
VoiceOutParam voiceOutParam[4]; // size 0x60, offset 0x5c
}; // size 0x9c
}}} // namespace nw4r::snd::detail
@@ -75,6 +76,8 @@ namespace nw4r { namespace snd { namespace detail
// methods
void InitParam();
void SetRemoteOutVolume(int remote, f32 volume);
f32 GetRemoteOutVolume(int remote) const;
f32 GetVolume() const { return mPlayerParamSet.volume; }
f32 GetPitch() const { return mPlayerParamSet.pitch; }
+66 -48
View File
@@ -44,7 +44,8 @@ namespace nw4r { namespace snd
lpf (0.0f),
biquadFilterValue (0.0f),
biquadFilterType (0),
priority (0)
priority (0),
field_0x24 (0)
{
}
@@ -59,6 +60,7 @@ namespace nw4r { namespace snd
f32 biquadFilterValue; // size 0x04, offset 0x18
int biquadFilterType; // size 0x04, offset 0x1c
int priority; // size 0x04, offset 0x20
UNKWORD field_0x24;
}; // size 0x24
// [R89JEL]:/bin/RVL/Debug/mainD.elf:.debug::0x27514
@@ -76,7 +78,8 @@ namespace nw4r { namespace snd
lpf (0.0f),
biquadFilterValue (0.0f),
biquadFilterType (0),
priority (0)
priority (0),
field_0x24 (0)
{
}
@@ -91,6 +94,7 @@ namespace nw4r { namespace snd
f32 biquadFilterValue; // size 0x04, offset 0x18
int biquadFilterType; // size 0x04, offset 0x1c
int priority; // size 0x04, offset 0x20
UNKWORD field_0x24;
VoiceOutParam voiceOutParam[4]; // size 0x60, offset 0x24
}; // size 0x84
@@ -141,10 +145,10 @@ namespace nw4r { namespace snd { namespace detail
// typedefs
public:
typedef ut::LinkList<BasicSound, 0xe0> PriorityLinkList;
typedef ut::LinkList<BasicSound, 0xe8> SoundPlayerPlayLinkList;
typedef ut::LinkList<BasicSound, 0xf0> SoundPlayerPriorityLinkList;
typedef ut::LinkList<BasicSound, 0xf8> ExtSoundPlayerPlayLinkList;
typedef ut::LinkList<BasicSound, 0xf0> PriorityLinkList;
typedef ut::LinkList<BasicSound, 0xf8> SoundPlayerPlayLinkList;
typedef ut::LinkList<BasicSound, 0x100> SoundPlayerPriorityLinkList;
typedef ut::LinkList<BasicSound, 0x108> ExtSoundPlayerPlayLinkList;
// nested types
public:
@@ -165,10 +169,10 @@ namespace nw4r { namespace snd { namespace detail
};
// methods
public:
virtual void at_0x08();
virtual void at_0x0c(void *, int, int, void *);
virtual int at_0x10(void *, int);
virtual int at_0x14(void *, int);
virtual ~AmbientParamUpdateCallback() {}
virtual void detail_UpdateAmbientParam(const void*, u32, int, SoundAmbientParam*);
virtual int detail_GetAmbientPriority(const void*, u32);
virtual int detail_GetRequiredVoiceOutCount(const void*, u32);
// members
private:
@@ -182,8 +186,8 @@ namespace nw4r { namespace snd { namespace detail
public:
// virtual function ordering
// vtable AmbientArgUpdateCallback
virtual void at_0x08();
virtual void at_0x0c(void *, void *);
virtual ~AmbientArgUpdateCallback() {}
virtual void at_0x0c(void *, BasicSound *);
// members
private:
@@ -198,9 +202,11 @@ namespace nw4r { namespace snd { namespace detail
public:
// virtual function ordering
// vtable AmbientArgAllocaterCallback
virtual void at_0x08();
virtual void *at_0x0c(int);
virtual void at_0x10(void *, void *);
virtual ~AmbientArgAllocaterCallback() {}
virtual void *detail_AllocAmbientArg(u32 size); // at 0x8
virtual void detail_FreeAmbientArg(void *pArg,
const detail::BasicSound *pSound); // at 0xC
// members
private:
@@ -244,25 +250,32 @@ namespace nw4r { namespace snd { namespace detail
void StartPrepared();
void Update();
void Pause(bool flag, int fadeFrames);
bool IsPaused() const;
bool IsPause() const;
void Stop(int fadeFrames);
void SetAutoStopCounter(int count);
void FadeIn(int fadeFrames);
bool GetStartedFlag() const { return mStartedFlag; }
u32 GetId() const { return mId; }
PlayerHeap *GetPlayerHeap() { return mPlayerHeap; }
SoundPlayer *GetSoundPlayer() { return mSoundPlayer; }
int GetVoiceOutCount() const;
int GetPriority() const { return mPriority; }
void SetPlayerPriority(int priority);
void SetInitialVolume(f32 volume);
void SetVolume(f32 volume, int frames);
void SetPitch(f32 pitch);
void SetPan(f32 pan);
void SetSurroundPan(f32 pan);
void SetLpfFreq(f32 freq);
void SetFxSend(AuxBus bus, f32 send);
void SetRemoteFilter(int filter);
void SetPanMode(PanMode mode);
void SetPanCurve(PanCurve curve);
void SetAmbientInfo(AmbientInfo const &ambientArgInfo);
void SetId(u32 id);
void SetOutputLineFlag(int flag);
void AttachPlayerHeap(PlayerHeap *heap);
void AttachSoundPlayer(SoundPlayer *player);
@@ -279,12 +292,18 @@ namespace nw4r { namespace snd { namespace detail
void DetachGeneralHandle();
void DetachTempGeneralHandle();
int GetRemainingFadeFrames() const;
int CalcCurrentPlayerPriority() const
{
return ut::Clamp(mPriority + mAmbientParam.priority, PRIORITY_MIN,
PRIORITY_MAX);
}
void ClearAmbientArgUpdateCallback() {
mAmbientInfo.argUpdateCallback = NULL;
}
static int GetAmbientPriority(AmbientInfo const &ambientInfo,
u32 soundId);
@@ -308,41 +327,40 @@ namespace nw4r { namespace snd { namespace detail
ExternalSoundPlayer *mExtSoundPlayer; // size 0x04, offset 0x18
AmbientInfo mAmbientInfo; // size 0x14, offset 0x1c
SoundParam mAmbientParam; // size 0x24, offset 0x30
SoundActorParam mActorParam; // size 0x0c, offset 0x54
MoveValue<f32, int> mFadeVolume; // size 0x10, offset 0x60
MoveValue<f32, int> mPauseFadeVolume; // size 0x10, offset 0x70
bool mStartFlag; // size 0x01, offset 0x80
bool mStartedFlag; // size 0x01, offset 0x81
bool mAutoStopFlag; // size 0x01, offset 0x82
bool mFadeOutFlag; // size 0x01, offset 0x83
PauseState mPauseState; // size 0x04, offset 0x84
bool mUnPauseFlag; // size 0x01, offset 0x88
SoundActorParam mActorParam; // size 0x0c, offset 0x58
MoveValue<f32, int> mFadeVolume; // size 0x10, offset 0x64
MoveValue<f32, int> mPauseFadeVolume; // size 0x10, offset 0x74
bool mStartFlag; // size 0x01, offset 0x84
bool mStartedFlag; // size 0x01, offset 0x85
bool mAutoStopFlag; // size 0x01, offset 0x86
bool mFadeOutFlag; // size 0x01, offset 0x87
PauseState mPauseState; // size 0x04, offset 0x88
bool mUnPauseFlag; // size 0x01, offset 0x8c
/* 3 bytes padding */
s32 mAutoStopCounter; // size 0x04, offset 0x8c
u32 mUpdateCounter; // size 0x04, offset 0x90
u8 mPriority; // size 0x01, offset 0x94
u8 mVoiceOutCount; // size 0x01, offset 0x95
u8 mBiquadFilterType; // size 0x01, offset 0x96
s32 mAutoStopCounter; // size 0x04, offset 0x90
u32 mUpdateCounter; // size 0x04, offset 0x94
u8 mPriority; // size 0x01, offset 0x98
u8 mVoiceOutCount; // size 0x01, offset 0x99
u8 mBiquadFilterType; // size 0x01, offset 0x9a
/* 1 byte padding */
u32 mId; // size 0x04, offset 0x98
MoveValue<f32, int> mExtMoveVolume; // size 0x10, offset 0x9c
f32 mInitVolume; // size 0x04, offset 0xac
f32 mExtPan; // size 0x04, offset 0xb0
f32 mExtSurroundPan; // size 0x04, offset 0xb4
f32 mExtPitch; // size 0x04, offset 0xb8
f32 mLpfFreq; // size 0x04, offset 0xbc
f32 mBiquadFilterValue; // size 0x04, offset 0xc0
int mOutputLineFlag; // size 0x04, offset 0xc4
f32 mMainOutVolume; // size 0x04, offset 0xc8
f32 mMainSend; // size 0x04, offset 0xcc
f32 mFxSend[AUX_BUS_NUM]; // size 0x0c, offset 0xd0
// NOTE: Name is not from DWARF; derived from usage and other nearby names
u32 mPauseNestCounter; // size 0x04, offset 0xdc
u32 mId; // size 0x04, offset 0x9c
MoveValue<f32, int> mExtMoveVolume; // size 0x10, offset 0xa0
f32 mInitVolume; // size 0x04, offset 0xb0
f32 mExtPan; // size 0x04, offset 0xb4
f32 mExtSurroundPan; // size 0x04, offset 0xb8
f32 mExtPitch; // size 0x04, offset 0xbc
f32 mLpfFreq; // size 0x04, offset 0xc0
f32 mBiquadFilterValue; // size 0x04, offset 0xc4
int mOutputLineFlag; // size 0x04, offset 0xc8
f32 mMainOutVolume; // size 0x04, offset 0xcc
f32 mMainSend; // size 0x04, offset 0xd0
f32 mFxSend[AUX_BUS_NUM]; // size 0x0c, offset 0xd4
f32 mRemoteOutVolume[4]; // size 0x10, offset 0xe0
public:
ut::LinkListNode mPriorityLink; // size 0x08, offset 0xe0
ut::LinkListNode mSoundPlayerPlayLink; // size 0x08, offset 0xe8
ut::LinkListNode mSoundPlayerPriorityLink; // size 0x08, offset 0xf0
ut::LinkListNode mExtSoundPlayerPlayLink; // size 0x08, offset 0xf8
ut::LinkListNode mPriorityLink; // size 0x08, offset 0xf0
ut::LinkListNode mSoundPlayerPlayLink; // size 0x08, offset 0xf8
ut::LinkListNode mSoundPlayerPriorityLink; // size 0x08, offset 0x100
ut::LinkListNode mExtSoundPlayerPlayLink; // size 0x08, offset 0x108
// friends
private:
+6 -1
View File
@@ -63,7 +63,7 @@ namespace nw4r { namespace snd { namespace detail
ChannelCallbackStatus status,
u32 userData);
typedef ut::LinkList<Channel, 0xc8> LinkList;
typedef ut::LinkList<Channel, 0xd8> LinkList;
// methods
public:
@@ -115,6 +115,10 @@ namespace nw4r { namespace snd { namespace detail
{
mUserSurroundPan = surroundPan;
}
void SetRemoteOutVolume(int channel, f32 volume)
{
mRemoteOutVolume[channel] = volume;
}
void SetUserLpfFreq(f32 lpfFreq) { mUserLpfFreq = lpfFreq; }
void SetOutputLine(int lineFlag) { mOutputLineFlag = lineFlag; }
void SetMainOutVolume(f32 volume) { mMainOutVolume = volume; }
@@ -208,6 +212,7 @@ namespace nw4r { namespace snd { namespace detail
f32 mMainOutVolume; // size 0x04, offset 0x5c
f32 mMainSend; // size 0x04, offset 0x60
f32 mFxSend[AUX_BUS_NUM]; // size 0x0c, offset 0x64
f32 mRemoteOutVolume[4];
f32 mUserPitch; // size 0x04, offset 0x70
f32 mSweepPitch; // size 0x04, offset 0x74
s32 mSweepCounter; // size 0x04, offset 0x78
@@ -6,11 +6,15 @@
*/
#include "nw4r/snd/snd_BasicSound.h"
#include "nw4r/snd/snd_SoundHandle.h"
#include "nw4r/snd/snd_global.h"
/*******************************************************************************
* classes and functions
*/
namespace nw4r { namespace snd { class SoundActor; }}
namespace nw4r { namespace snd { namespace detail
{
// [R89JEL]:/bin/RVL/Debug/mainD.elf:.debug::0x27049
@@ -24,12 +28,43 @@ namespace nw4r { namespace snd { namespace detail
int GetPlayingSoundCount() const { return mSoundList.GetSize(); }
int GetPlayableSoundCount() const { return mPlayableCount; }
void SetPlayableSoundCount(int count);
void StopAllSound(int fadeFrames);
void PauseAllSound(bool flag, int fadeFrames);
void DetachSoundActorAll(SoundActor *sound);
bool AppendSound(BasicSound *sound);
void RemoveSound(BasicSound *sound);
bool detail_CanPlaySound(int startPriority);
template <typename TForEachFunc>
TForEachFunc ForEachSound(TForEachFunc pFunc, bool reverse) {
if (reverse) {
detail::BasicSound::ExtSoundPlayerPlayLinkList::ReverseIterator it = mSoundList.GetBeginReverseIter();
while (it != mSoundList.GetEndReverseIter()) {
detail::BasicSound::ExtSoundPlayerPlayLinkList::ReverseIterator curr = it;
SoundHandle handle;
handle.detail_AttachSoundAsTempHandle(&*curr);
pFunc(handle);
if (handle.IsAttachedSound()) {
++it;
}
}
} else {
NW4R_RANGE_FOR_NO_AUTO_INC(it, mSoundList) {
decltype(it) curItr = it++;
SoundHandle handle;
handle.detail_AttachSoundAsTempHandle(&*curItr);
pFunc(handle);
}
}
return pFunc;
}
private:
BasicSound *GetLowestPrioritySound();
+7 -10
View File
@@ -34,22 +34,19 @@ public:
private:
struct Block {
NW4R_UT_LIST_NODE_DECL(); // at 0x0
u32 mSize; // at 0x8
FreeCallback mCallback; // at 0xc
void *mCallbackArg; // at 0x10
void *mpBuffer; // at 0x8
u32 mSize; // at 0xC
FreeCallback mCallback; // at 0x10
void *mCallbackArg; // at 0x14
Block(u32 size, FreeCallback pCallback, void *pCallbackArg)
: mSize(size), mCallback(pCallback), mCallbackArg(pCallbackArg) {}
Block(void *pBuffer2, u32 size, FreeCallback pCallback, void *pCallbackArg)
: mSize(size), mCallback(pCallback), mCallbackArg(pCallbackArg), mpBuffer(pBuffer2) {}
~Block() {
if (mCallback != NULL) {
mCallback(GetBufferAddr(), mSize, mCallbackArg);
mCallback(mpBuffer, mSize, mCallbackArg);
}
}
void *GetBufferAddr() {
return ut::AddOffsetToPtr(this, BLOCK_BUFFER_SIZE);
}
};
NW4R_UT_LIST_TYPEDEF_DECL(Block);
+1 -1
View File
@@ -34,7 +34,7 @@ namespace nw4r { namespace snd
// vtable FxBase
virtual bool StartUp();
virtual void Shutdown();
virtual void UpdateBuffer(int, void *, u32, SampleFormat, f32,
virtual void UpdateBuffer(int, void **, u32, SampleFormat, f32,
OutputMode);
virtual void OnChangeOutputMode();
+78
View File
@@ -0,0 +1,78 @@
#ifndef NW4R_SND_FX_REVERB_STD_DPL2_H
#define NW4R_SND_FX_REVERB_STD_DPL2_H
#include "nw4r/snd/snd_AxfxImpl.h"
#include "nw4r/snd/snd_FxBase.h"
#include "nw4r/types_nw4r.h"
#include "rvl/AXFX.h" // IWYU pragma: export
namespace nw4r {
namespace snd {
namespace detail {
struct FxReverbStdParam {
f32 field_0x00;
f32 field_0x04;
f32 field_0x08;
f32 field_0x0C;
f32 field_0x10;
int field_0x14;
f32 field_0x18;
int field_0x1C;
f32 field_0x20;
f32 field_0x24;
FxReverbStdParam()
: field_0x00(0.02f),
field_0x04(3.0f),
field_0x08(0.6f),
field_0x0C(0.4f),
field_0x10(1.0f),
field_0x14(5),
field_0x18(0.02f),
field_0x1C(0),
field_0x20(0.0f),
field_0x24(1.0f) {}
};
} // namespace detail
class FxReverbStdDpl2 : public FxBase {
public:
public:
FxReverbStdDpl2();
virtual ~FxReverbStdDpl2() {
Shutdown();
ReleaseWorkBuffer();
} // at 0x8
virtual bool StartUp() override; // at 0xC
virtual void Shutdown() override; // at 0x10
virtual void UpdateBuffer(
int channels, void **ppBuffer, u32 size, SampleFormat format, f32 sampleRate,
OutputMode mode
) override; // at 0x14
virtual bool AssignWorkBuffer(void *pBuffer, u32 size); // at 0x18
virtual void ReleaseWorkBuffer(); // at 0x1C
u32 GetRequiredMemSize();
bool SetParam(const detail::FxReverbStdParam &rParam);
void OnChangeOutputMode() override;
private:
u8 mIsActive;
int mOutputMode; // at 0x10
detail::AxfxImpl mImpl; // at 0x14
detail::FxReverbStdParam mParam; // at 0x1C
AXFX_REVERBSTD_EXP mAxfxParam; // at 0x44
AXFX_REVERBSTD_EXP_DPL2 mAxfxParamDpl; // at 0x12C
};
} // namespace snd
} // namespace nw4r
#endif
+4
View File
@@ -41,6 +41,10 @@ namespace nw4r { namespace snd { namespace detail
bool IsFinished() const { return mCounter >= mFrame; }
TTime GetRemainingTime() const {
return IsFinished() ? 0 : mFrame - mCounter;
}
void InitValue(TValue value)
{
mOrigin = value;
+3 -2
View File
@@ -21,8 +21,9 @@ public:
private:
static const int SPEAKER_ALARM_HZ = 150;
static const int SPEAKER_ALARM_PERIOD_NSEC = static_cast<int>(1.0f / SPEAKER_ALARM_HZ * 1000 * 1000 * 1000);
// commented out since it causes compiler warnings
// static const int SPEAKER_ALARM_PERIOD_NSEC = static_cast<int>(1.0f / SPEAKER_ALARM_HZ * 1000 * 1000 * 1000);
static const int SPEAKER_ALARM_PERIOD_NSEC = 6666667;
private:
RemoteSpeakerManager();
+50
View File
@@ -9,7 +9,9 @@
#include "nw4r/snd/snd_BasicPlayer.h"
#include "nw4r/snd/snd_DisposeCallbackManager.h" // DisposeCallback
#include "nw4r/snd/snd_SeqTrack.h"
#include "nw4r/snd/snd_SoundThread.h"
#include "nw4r/ut/ut_Lock.h"
/*******************************************************************************
* types
@@ -128,6 +130,10 @@ namespace nw4r { namespace snd { namespace detail
SeqTrack *GetPlayerTrack(int trackNo);
s16 volatile *GetVariablePtr(int varNo);
s16 GetLocalVariable(int varNo) const;
void SetLocalVariable(int varNo, s16 value);
static void SetGlobalVariable(int varNo, s16 value);
void SetTempoRatio(f32 tempo);
void SetReleasePriorityFix(bool fix);
void SetChannelPriority(int priority);
@@ -143,11 +149,19 @@ namespace nw4r { namespace snd { namespace detail
return mParserParam.timebase * mParserParam.tempo * mTempoRatio;
}
u32 GetTickCounter() const {
return mTickCounter;
}
void SetSeqData(void const *seqBase, s32 seqOffset);
void CallSeqUserprocCallback(u16 procId, SeqTrack *track);
Channel *NoteOn(int bankNo, NoteOnInfo const &noteOnInfo);
void SetTrackMute(u32 trackFlags, SeqMute mute);
void SetTrackSilence(u32 trackFlags, bool silence, int fadeFrames);
void SetTrackVolume(u32 trackFlags, f32 volume);
static void InitSeqPlayer();
private:
@@ -162,6 +176,40 @@ namespace nw4r { namespace snd { namespace detail
void UpdateTick(int msec);
void SkipTick();
template <typename T>
void SetTrackParam(u32 trackFlags, void (SeqTrack::*pSetter)(T), T param) {
ut::AutoInterruptLock lock;
for (int i = 0; i < TRACK_NUM && trackFlags != 0;
trackFlags >>= 1, i++) {
if (trackFlags & 1) {
SeqTrack* pTrack = GetPlayerTrack(i);
if (pTrack != NULL) {
(pTrack->*pSetter)(param);
}
}
}
}
template <typename T, typename U>
void SetTrackParam(u32 trackFlags, void (SeqTrack::*pSetter)(T, U), T param, U param2) {
ut::AutoInterruptLock lock;
for (int i = 0; i < TRACK_NUM && trackFlags != 0;
trackFlags >>= 1, i++) {
if (trackFlags & 1) {
SeqTrack* pTrack = GetPlayerTrack(i);
if (pTrack != NULL) {
(pTrack->*pSetter)(param, param2);
}
}
}
}
// static members
public:
static int const MAX_SKIP_TICK_PER_FRAME = 768;
@@ -172,6 +220,8 @@ namespace nw4r { namespace snd { namespace detail
static int const GLOBAL_VARIABLE_NUM = 16;
static int const PLAYER_VARIABLE_NUM = 16;
static const int TRACK_NUM = 16;
private:
static s16 mGlobalVariable[GLOBAL_VARIABLE_NUM];
+10 -1
View File
@@ -41,7 +41,7 @@ namespace nw4r { namespace snd { namespace detail
/* redeclare with this class instead of BasicSound for
* SoundInstanceManager
*/
typedef ut::LinkList<SeqSound, 0xe0> PriorityLinkList;
typedef ut::LinkList<SeqSound, 0xf0> PriorityLinkList;
// nested types
public:
@@ -121,6 +121,15 @@ namespace nw4r { namespace snd { namespace detail
static void NotifyLoadAsyncEndSeqData(bool result, void const *seqBase,
void *userData);
void SetTrackMute(u32 trackFlags, SeqMute mute);
void SetTrackSilence(u32 trackFlags, bool silence, int fadeFrames);
void SetTrackVolume(u32 trackFlags, f32 volume);
bool ReadVariable(int varNo, s16 *value) const;
bool WriteVariable(int varNo, s16 value);
static bool WriteGlobalVariable(int varNo, s16 value);
bool WriteTrackVariable(int trackNo, int varNo, s16 value);
u32 GetTick() const;
static DebugSoundType GetSoundType()
{
return DEBUG_SOUND_TYPE_SEQSOUND;
+29
View File
@@ -7,6 +7,8 @@
#include "common.h" // nullptr
#include "nw4r/snd/snd_SeqSound.h"
#include "nw4r/snd/snd_SeqTrack.h"
#include "nw4r/ut/ut_NonCopyable.h" // ut::NonCopyable
/*******************************************************************************
@@ -27,11 +29,38 @@ namespace nw4r { namespace snd
{
// methods
public:
SeqSoundHandle(SoundHandle*);
~SeqSoundHandle() { DetachSound(); }
// methods
bool IsAttachedSound() const { return mSound != nullptr; }
void DetachSound();
void WriteVariable(int varNo, s16 value) {
if (IsAttachedSound())
mSound->WriteVariable(varNo, value);
}
void ReadVariable(int varNo, s16 *value) {
if (IsAttachedSound())
mSound->ReadVariable(varNo, value);
}
void SetTrackMute(u32 trackFlags, SeqMute mute) {
if (IsAttachedSound())
mSound->SetTrackMute(trackFlags, mute);
}
void SetTempoRatio(f32 tempoRatio) {
if (IsAttachedSound())
mSound->SetTempoRatio(tempoRatio);
}
void SetVolume(u32 trackFlags, f32 volume) {
if (IsAttachedSound())
mSound->SetTrackVolume(trackFlags, volume);
}
// members
private:
/* base ut::NonCopyable */ // size 0x00, offset 0x00
+2 -1
View File
@@ -93,9 +93,9 @@ namespace nw4r { namespace snd { namespace detail
MoveValue<u8, s16> volume; // size 0x06, offset 0x54
MoveValue<s8, s16> pan; // size 0x06, offset 0x5a
MoveValue<s8, s16> surroundPan; // size 0x06, offset 0x60
MoveValue<s8, s16> pitchBend; // size 0x01, offset 0x68
u8 volume2; // size 0x01, offset 0x66
u8 velocityRange; // size 0x01, offset 0x67
s8 pitchBend; // size 0x01, offset 0x68
u8 bendRange; // size 0x01, offset 0x69
s8 initPan; // size 0x01, offset 0x6a
s8 transpose; // size 0x01, offset 0x6b
@@ -141,6 +141,7 @@ namespace nw4r { namespace snd { namespace detail
void SetPlayerTrackNo(int playerTrackNo);
void SetVolume(f32);
void SetTrackVariable(int variable, s16 value);
void SetPitch(f32);
void SetPan(f32);
void SetSurroundPan(f32);
+18 -13
View File
@@ -2,11 +2,11 @@
#ifndef NW4R_SND_SOUND_3D_ACTOR_H
#define NW4R_SND_SOUND_3D_ACTOR_H
#include "nw4r/math.h"
#include "nw4r/snd/snd_BasicSound.h"
#include "nw4r/snd/snd_SoundActor.h"
#include "nw4r/types_nw4r.h"
#include "nw4r/math.h"
namespace nw4r {
namespace snd {
@@ -14,27 +14,32 @@ namespace snd {
class Sound3DActor : public SoundActor, public detail::BasicSound::AmbientInfo::AmbientArgUpdateCallback {
public:
Sound3DActor(SoundArchivePlayer &rPlayer, Sound3DManager &rManager);
virtual ~Sound3DActor(); // at 0x8
virtual ~Sound3DActor();
virtual StartResult detail_SetupSound(
SoundHandle *pHandle, u32 id, detail::BasicSound::AmbientInfo *pArgInfo,
detail::ExternalSoundPlayer *pPlayer, bool hold,
const StartInfo *pStartInfo
); // at 0xC
virtual StartResult SetupSound(SoundHandle *pHandle, u32 soundId, const StartInfo *pStartInfo, void *) override;
virtual void detail_Update(void *pArg,
const detail::BasicSound *pSound); // at 0xC
// AmbientArgUpdateCallback
virtual void at_0x0c(void *arg, detail::BasicSound* sound) override;
const nw4r::math::VEC3 &GetPosition() const {
return mPosition;
}
void SetPosition(const math::VEC3 &rPosition);
void SetUserParam(u32 userParam) {
mUserParam = userParam;
}
private:
static void ClearUpdateCallback(SoundHandle &rHandle);
private:
Sound3DManager &m3DManager; // at 0xAC
SoundArchivePlayer &mSoundArchivePlayer; // at 0xB0
u32 mUserParam; // at 0xB4
math::VEC3 mPosition; // at 0xB8
Sound3DManager &m3DManager; // at 0x58
SoundArchivePlayer *mSoundArchivePlayer; // at 0x5C
u32 mUserParam; // at 0x60
math::VEC3 mPosition; // at 0x64
math::VEC3 mVelocity; // at 0x70
bool mSkipVelocityUpdate; // at 0x7C
};
} // namespace snd
+44
View File
@@ -0,0 +1,44 @@
#ifndef NW4R_SND_SOUND_3D_CALCULATOR_H
#define NW4R_SND_SOUND_3D_CALCULATOR_H
#include "common.h"
#include "nw4r/math/math_triangular.h"
namespace nw4r {
namespace snd {
class Sound3DManager;
class Sound3DParam;
class Sound3DCalculator {
public:
struct CalcPanParam {
f32 speakerAngleStereo; // at 0x00
f32 frontSpeakerAngleDpl2; // at 0x04
f32 rearSpeakerAngleDpl2; // at 0x08
f32 initPan; // at 0x0C
CalcPanParam()
: speakerAngleStereo(NW4R_MATH_PI / 4),
frontSpeakerAngleDpl2(NW4R_MATH_PI / 6),
rearSpeakerAngleDpl2(2 * NW4R_MATH_PI / 3),
initPan(0.0f) {}
};
static void
CalcVolumeAndPriority(const Sound3DManager &, const Sound3DListener &, const Sound3DParam &, float *, int *);
static void CalcPan(
const Sound3DManager &, const Sound3DListener &, const Sound3DParam &, const Sound3DCalculator::CalcPanParam &,
float *pan, float *surroundPan
);
static void CalcPitch(const Sound3DManager &, const Sound3DListener &, const Sound3DParam &, float *);
static void CalcBiquadFilterValue(const Sound3DManager &, const Sound3DListener &, const Sound3DParam &, float *);
static void CalcPanDpl2(const nw4r::math::VEC3 &, float, float, float, float, float, float, float *, float *);
static void CalcPanStereo(const nw4r::math::VEC3 &, float, float, float, float, float *, float *);
static void CalcAngleAndDistance(const nw4r::math::VEC3 &, float, float, float *, float *);
};
} // namespace snd
} // namespace nw4r
#endif

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