Attempt d_a_obj_tower_hand_D101 (#96)

* Attempt d_a_obj_tower_hand_D101

* dAcOTowerHandD101_c probably equivalent

* just two funcs, couldnt really do much to the rest

---------

Co-authored-by: elijah-thomas774 <elijahthomas774@gmail.com>
This commit is contained in:
robojumper
2024-11-09 17:44:05 +01:00
committed by GitHub
parent 74db770697
commit a3472ab02d
16 changed files with 1039 additions and 136 deletions
+3 -1
View File
@@ -1,5 +1,7 @@
# https://clangd.llvm.org/config
CompileFlags:
Add: [
"-Wno-c++11-compat-deprecated-writable-strings"
"-Wno-c++11-compat-deprecated-writable-strings",
"-Wno-trigraphs",
"-fno-trigraphs"
]
@@ -17,3 +17,6 @@ REL/global_destructor_chain.c:
REL/d/a/obj/d_a_obj_tower_hand_D101.cpp:
.text start:0x000000F0 end:0x00003028
.ctors start:0x00000000 end:0x00000004
.rodata start:0x00000000 end:0x000000FC
.data start:0x00000000 end:0x0000038C
.bss start:0x00000008 end:0x00000198
@@ -8,66 +8,64 @@ __dt__32sFState_c<19dAcOTowerHandD101_c>Fv = .text:0x00000230; // type:function
__dt__35sFStateFct_c<19dAcOTowerHandD101_c>Fv = .text:0x00000290; // type:function size:0x6C
__dt__88sStateMgr_c<19dAcOTowerHandD101_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000300; // type:function size:0xA0
__dt__58sFStateMgr_c<19dAcOTowerHandD101_c,20sStateMethodUsr_FI_c>Fv = .text:0x000003A0; // type:function size:0xA4
fn_510_450 = .text:0x00000450; // type:function size:0x74
fn_510_4D0 = .text:0x000004D0; // type:function size:0xC
fn_510_4E0 = .text:0x000004E0; // type:function size:0xC
fn_510_4F0 = .text:0x000004F0; // type:function size:0x20
fn_510_510 = .text:0x00000510; // type:function size:0xA4
fn_510_5C0 = .text:0x000005C0; // type:function size:0x8
fn_510_5D0 = .text:0x000005D0; // type:function size:0x20
fn_510_5F0 = .text:0x000005F0; // type:function size:0x2BC
fn_510_8B0 = .text:0x000008B0; // type:function size:0x130
fn_510_9E0 = .text:0x000009E0; // type:function size:0x120
getScale__19dAcOTowerHandD101_cFiR7mVec3_c = .text:0x00000450; // type:function size:0x74
getBoundingLower__19dAcOTowerHandD101_cFv = .text:0x000004D0; // type:function size:0xC
getBoundingUpper__19dAcOTowerHandD101_cFv = .text:0x000004E0; // type:function size:0xC
isValidDirectionParam__19dAcOTowerHandD101_cFi = .text:0x000004F0; // type:function size:0x20
transformMtx__19dAcOTowerHandD101_cFRC7mVec3_cRC7mAng3_cRC7mVec3_cR7mVec3_c = .text:0x00000510; // type:function size:0xA4
f32Sq__19dAcOTowerHandD101_cFf = .text:0x000005C0; // type:function size:0x8
isValidBgWIndex__19dAcOTowerHandD101_cFi = .text:0x000005D0; // type:function size:0x20
createHeap__19dAcOTowerHandD101_cFv = .text:0x000005F0; // type:function size:0x2BC
actorCreate__19dAcOTowerHandD101_cFv = .text:0x000008B0; // type:function size:0x130
actorPostCreate__19dAcOTowerHandD101_cFv = .text:0x000009E0; // type:function size:0x120
changeState__88sStateMgr_c<19dAcOTowerHandD101_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000B00; // type:function size:0x10
fn_510_B10 = .text:0x00000B10; // type:function size:0x2C8
actorExecute__19dAcOTowerHandD101_cFv = .text:0x00000B10; // type:function size:0x2C8
executeState__88sStateMgr_c<19dAcOTowerHandD101_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000DE0; // type:function size:0x10
fn_510_DF0 = .text:0x00000DF0; // type:function size:0x354
actorExecuteInEvent__19dAcOTowerHandD101_cFv = .text:0x00000DF0; // type:function size:0x354
getStateID__88sStateMgr_c<19dAcOTowerHandD101_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00001150; // type:function size:0x10
fn_510_1160 = .text:0x00001160; // type:function size:0x28
fn_510_1190 = .text:0x00001190; // type:function size:0x6C
fn_510_1200 = .text:0x00001200; // type:function size:0x8
fn_510_1210 = .text:0x00001210; // type:function size:0xC
fn_510_1220 = .text:0x00001220; // type:function size:0xC
fn_510_1230 = .text:0x00001230; // type:function size:0xC
fn_510_1240 = .text:0x00001240; // type:function size:0xC
fn_510_1250 = .text:0x00001250; // type:function size:0xC
fn_510_1260 = .text:0x00001260; // type:function size:0xC
fn_510_1270 = .text:0x00001270; // type:function size:0xC
fn_510_1280 = .text:0x00001280; // type:function size:0xC
fn_510_1290 = .text:0x00001290; // type:function size:0xC
fn_510_12A0 = .text:0x000012A0; // type:function size:0xC
fn_510_12B0 = .text:0x000012B0; // type:function size:0xC
fn_510_12C0 = .text:0x000012C0; // type:function size:0xC
fn_510_12D0 = .text:0x000012D0; // type:function size:0xC
fn_510_12E0 = .text:0x000012E0; // type:function size:0x8
fn_510_12F0 = .text:0x000012F0; // type:function size:0xC
fn_510_1300 = .text:0x00001300; // type:function size:0xC
fn_510_1310 = .text:0x00001310; // type:function size:0xC
fn_510_1320 = .text:0x00001320; // type:function size:0xC
fn_510_1330 = .text:0x00001330; // type:function size:0x54
fn_510_1390 = .text:0x00001390; // type:function size:0xD0
fn_510_1460 = .text:0x00001460; // type:function size:0x10
fn_510_1470 = .text:0x00001470; // type:function size:0x10
fn_510_1480 = .text:0x00001480; // type:function size:0x58
fn_510_14E0 = .text:0x000014E0; // type:function size:0x4C
fn_510_1530 = .text:0x00001530; // type:function size:0x24
fn_510_1560 = .text:0x00001560; // type:function size:0x3C
fn_510_15A0 = .text:0x000015A0; // type:function size:0x24
fn_510_15D0 = .text:0x000015D0; // type:function size:0x24
fn_510_1600 = .text:0x00001600; // type:function size:0x58
fn_510_1660 = .text:0x00001660; // type:function size:0x5C
fn_510_16C0 = .text:0x000016C0; // type:function size:0x54
fn_510_1720 = .text:0x00001720; // type:function size:0x24
fn_510_1744 = .text:0x00001744; // type:function size:0x4
fn_510_1750 = .text:0x00001750; // type:function size:0x24
fn_510_1774 = .text:0x00001774; // type:function size:0x4
fn_510_1780 = .text:0x00001780; // type:function size:0x74
fn_510_1800 = .text:0x00001800; // type:function size:0x38
fn_510_1840 = .text:0x00001840; // type:function size:0x38
fn_510_1880 = .text:0x00001880; // type:function size:0x48
fn_510_18D0 = .text:0x000018D0; // type:function size:0x8C
fn_510_1960 = .text:0x00001960; // type:function size:0x84
fn_510_19F0 = .text:0x000019F0; // type:function size:0x18
draw__19dAcOTowerHandD101_cFv = .text:0x00001160; // type:function size:0x28
getBgW__19dAcOTowerHandD101_cFiRP4dBgW = .text:0x00001190; // type:function size:0x6C
getEventStuff__19dAcOTowerHandD101_cFv = .text:0x00001200; // type:function size:0x8
getItemOffsetX__19dAcOTowerHandD101_cFv = .text:0x00001210; // type:function size:0xC
getItemOffsetY__19dAcOTowerHandD101_cFv = .text:0x00001220; // type:function size:0xC
getItemOffsetZ__19dAcOTowerHandD101_cFv = .text:0x00001230; // type:function size:0xC
getDist1__19dAcOTowerHandD101_cFv = .text:0x00001240; // type:function size:0xC
getDist2__19dAcOTowerHandD101_cFv = .text:0x00001250; // type:function size:0xC
getDist3__19dAcOTowerHandD101_cFv = .text:0x00001260; // type:function size:0xC
getLinkOffsetX__19dAcOTowerHandD101_cFv = .text:0x00001270; // type:function size:0xC
getLinkOffsetY__19dAcOTowerHandD101_cFv = .text:0x00001280; // type:function size:0xC
getLinkOffsetZ__19dAcOTowerHandD101_cFv = .text:0x00001290; // type:function size:0xC
getFrame1__19dAcOTowerHandD101_cFv = .text:0x000012A0; // type:function size:0xC
getFrame2__19dAcOTowerHandD101_cFv = .text:0x000012B0; // type:function size:0xC
getCloseRate__19dAcOTowerHandD101_cFv = .text:0x000012C0; // type:function size:0xC
getOpenRate__19dAcOTowerHandD101_cFv = .text:0x000012D0; // type:function size:0xC
doSomethingHold__19dAcOTowerHandD101_cFf = .text:0x000012E0; // type:function size:0x8
getDirection__19dAcOTowerHandD101_cCFv = .text:0x000012F0; // type:function size:0xC
getHoldFlag__19dAcOTowerHandD101_cCFv = .text:0x00001300; // type:function size:0xC
getSceneFlag__19dAcOTowerHandD101_cCFv = .text:0x00001310; // type:function size:0xC
getEventId__19dAcOTowerHandD101_cCFv = .text:0x00001320; // type:function size:0xC
getBgWMtx__19dAcOTowerHandD101_cFiRP6mMtx_c = .text:0x00001330; // type:function size:0x54
getNodeMtx__19dAcOTowerHandD101_cCFPCcR6mMtx_c = .text:0x00001390; // type:function size:0xD0
getLoc1Mtx__19dAcOTowerHandD101_cCFR6mMtx_c = .text:0x00001460; // type:function size:0x10
getLoc2Mtx__19dAcOTowerHandD101_cCFR6mMtx_c = .text:0x00001470; // type:function size:0x10
getItemOffset__19dAcOTowerHandD101_cFv = .text:0x00001480; // type:function size:0x58
getItemPos__19dAcOTowerHandD101_cCFR7mVec3_c = .text:0x000014E0; // type:function size:0x4C
getDist1Sq__19dAcOTowerHandD101_cFv = .text:0x00001530; // type:function size:0x24
getDist1PlusDist2__19dAcOTowerHandD101_cFv = .text:0x00001560; // type:function size:0x3C
getDist1PlusDist2Sq__19dAcOTowerHandD101_cFv = .text:0x000015A0; // type:function size:0x24
getDist3Sq__19dAcOTowerHandD101_cFv = .text:0x000015D0; // type:function size:0x24
getLinkOffsetNormal__19dAcOTowerHandD101_cFR7mVec3_c = .text:0x00001600; // type:function size:0x58
getLinkOffsetMirror__19dAcOTowerHandD101_cFR7mVec3_c = .text:0x00001660; // type:function size:0x5C
getLinkOffset__19dAcOTowerHandD101_cCFR7mVec3_c = .text:0x000016C0; // type:function size:0x54
setSceneFlag__19dAcOTowerHandD101_cCFi = .text:0x00001720; // type:function size:0x28
unsetSceneFlag__19dAcOTowerHandD101_cCFi = .text:0x00001750; // type:function size:0x28
checkSceneFlag1__19dAcOTowerHandD101_cCFiRb = .text:0x00001780; // type:function size:0x74
setHoldFlag__19dAcOTowerHandD101_cFv = .text:0x00001800; // type:function size:0x38
unsetHoldFlag__19dAcOTowerHandD101_cFv = .text:0x00001840; // type:function size:0x38
checkFlag__19dAcOTowerHandD101_cCFRb = .text:0x00001880; // type:function size:0x48
doEvent__19dAcOTowerHandD101_cFv = .text:0x000018D0; // type:function size:0x8C
eventCallback__19dAcOTowerHandD101_cFPv = .text:0x00001960; // type:function size:0x84
calcItemPosition__19dAcOTowerHandD101_cCFRC7mVec3_cR7mVec3_c = .text:0x000019F0; // type:function size:0x18
initializeState_RemainOpen__19dAcOTowerHandD101_cFv = .text:0x00001A10; // type:function size:0x18
executeState_RemainOpen__19dAcOTowerHandD101_cFv = .text:0x00001A30; // type:function size:0x194
finalizeState_RemainOpen__19dAcOTowerHandD101_cFv = .text:0x00001BD0; // type:function size:0x4
@@ -104,47 +102,48 @@ isSameName__34sFStateID_c<19dAcOTowerHandD101_c>CFPCc = .text:0x00002FA0; // typ
_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_510_rodata_0 = .rodata:0x00000000; // type:object size:0x8 data:float
lbl_510_rodata_8 = .rodata:0x00000008; // type:object size:0x20 data:4byte
lbl_510_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:4byte
lbl_510_rodata_2C = .rodata:0x0000002C; // type:object size:0x64 data:4byte
lbl_510_rodata_90 = .rodata:0x00000090; // type:object size:0x4 data:float
lbl_510_rodata_94 = .rodata:0x00000094; // type:object size:0x4 data:float
lbl_510_rodata_98 = .rodata:0x00000098; // type:object size:0x4 data:float
lbl_510_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 data:float
lbl_510_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 data:float
lbl_510_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 data:float
lbl_510_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 data:float
lbl_510_rodata_AC = .rodata:0x000000AC; // type:object size:0x10 data:float
lbl_510_rodata_BC = .rodata:0x000000BC; // type:object size:0x4 data:float
lbl_510_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 data:float
lbl_510_rodata_C4 = .rodata:0x000000C4; // type:object size:0x4 data:float
lbl_510_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 data:float
lbl_510_rodata_CC = .rodata:0x000000CC; // type:object size:0x30 data:float
lbl_510_rodata_0 = .rodata:0x00000000; // type:object size:0x8 scope:local data:float
lbl_510_rodata_8 = .rodata:0x00000008; // type:object size:0x20 scope:local data:4byte
lbl_510_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:4byte
lbl_510_rodata_2C = .rodata:0x0000002C; // type:object size:0x64 scope:local data:4byte
lbl_510_rodata_90 = .rodata:0x00000090; // type:object size:0x4 scope:local data:float
lbl_510_rodata_94 = .rodata:0x00000094; // type:object size:0x4 scope:local data:float
lbl_510_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:float
lbl_510_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 scope:local data:float
lbl_510_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 scope:local data:float
lbl_510_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 scope:local data:float
lbl_510_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 scope:local data:float
lbl_510_rodata_AC = .rodata:0x000000AC; // type:object size:0x10 scope:local data:float
lbl_510_rodata_BC = .rodata:0x000000BC; // type:object size:0x4 scope:local data:float
lbl_510_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 scope:local data:float
lbl_510_rodata_C4 = .rodata:0x000000C4; // type:object size:0x4 scope:local data:float
lbl_510_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 scope:local data:float
lbl_510_rodata_CC = .rodata:0x000000CC; // type:object size:0x30 scope:local data:float
g_profile_OBJ_TOWER_HAND_D101 = .data:0x00000000; // type:object size:0x10 data:4byte
lbl_510_data_10 = .data:0x00000010; // type:object size:0x10
lbl_510_data_20 = .data:0x00000020; // type:object size:0x10
lbl_510_data_30 = .data:0x00000030; // type:object size:0x10
lbl_510_data_40 = .data:0x00000040; // type:object size:0x10
lbl_510_data_50 = .data:0x00000050; // type:object size:0x14
lbl_510_data_64 = .data:0x00000064; // type:object size:0x14
lbl_510_data_78 = .data:0x00000078; // type:object size:0x14
lbl_510_data_8C = .data:0x0000008C; // type:object size:0xC
lbl_510_data_98 = .data:0x00000098; // type:object size:0xC
lbl_510_data_A4 = .data:0x000000A4; // type:object size:0x24
lbl_510_data_C8 = .data:0x000000C8; // type:object size:0x4 data:4byte
lbl_510_data_CC = .data:0x000000CC; // type:object size:0x4 data:4byte
lbl_510_data_D0 = .data:0x000000D0; // type:object size:0x80
lbl_510_data_150 = .data:0x00000150; // type:object size:0x30
lbl_510_data_180 = .data:0x00000180; // type:object size:0x30
lbl_510_data_1B0 = .data:0x000001B0; // type:object size:0x18
lbl_510_data_1C8 = .data:0x000001C8; // type:object size:0x190
lbl_510_data_358 = .data:0x00000358; // type:object size:0x34
lbl_510_data_10 = .data:0x00000010; // type:object size:0x10 scope:local
lbl_510_data_20 = .data:0x00000020; // type:object size:0x10 scope:local
lbl_510_data_30 = .data:0x00000030; // type:object size:0x10 scope:local
lbl_510_data_40 = .data:0x00000040; // type:object size:0x10 scope:local
lbl_510_data_50 = .data:0x00000050; // type:object size:0x14 scope:local
lbl_510_data_64 = .data:0x00000064; // type:object size:0x14 scope:local
lbl_510_data_78 = .data:0x00000078; // type:object size:0x14 scope:local
lbl_510_data_8C = .data:0x0000008C; // type:object size:0xC scope:local
lbl_510_data_98 = .data:0x00000098; // type:object size:0xC scope:local
lbl_510_data_A4 = .data:0x000000A4; // type:object size:0x24 scope:local
@LOCAL@getFlags__Fv@FLAGS_1 = .data:0x000000C8; // type:object size:0x4 data:4byte
@LOCAL@getFlags__Fv@FLAGS_2@0 = .data:0x000000CC; // type:object size:0x4 data:4byte
__vt__19dAcOTowerHandD101_c = .data:0x000000D0; // type:object size:0x80
__vt__58sFStateMgr_c<19dAcOTowerHandD101_c,20sStateMethodUsr_FI_c> = .data:0x00000150; // type:object size:0x30
__vt__88sStateMgr_c<19dAcOTowerHandD101_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x00000180; // type:object size:0x30
__vt__35sFStateFct_c<19dAcOTowerHandD101_c> = .data:0x000001B0; // type:object size:0x14
__vt__32sFState_c<19dAcOTowerHandD101_c> = .data:0x000001C8; // type:object size:0x18
__vt__34sFStateID_c<19dAcOTowerHandD101_c> = .data:0x00000358; // type:object size:0x34
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
lbl_510_bss_8 = .bss:0x00000008; // type:object size:0x18 data:4byte
lbl_510_bss_20 = .bss:0x00000020; // type:object size:0xC data:float
lbl_510_bss_2C = .bss:0x0000002C; // type:object size:0x3C data:float
lbl_510_bss_68 = .bss:0x00000068; // type:object size:0x40 data:4byte
lbl_510_bss_A8 = .bss:0x000000A8; // type:object size:0x40 data:4byte
lbl_510_bss_E8 = .bss:0x000000E8; // type:object size:0x40 data:4byte
lbl_510_bss_128 = .bss:0x00000128; // type:object size:0x70 data:4byte
lbl_510_bss_8 = .bss:0x00000008; // type:object size:0x18 scope:local data:4byte
lbl_510_bss_20 = .bss:0x00000020; // type:object size:0xC scope:local data:float
lbl_510_bss_2C = .bss:0x0000002C; // type:object size:0x3C scope:local data:float
StateID_RemainOpen__19dAcOTowerHandD101_c = .bss:0x00000068; // type:object size:0x30 data:4byte
StateID_Close__19dAcOTowerHandD101_c = .bss:0x000000A8; // type:object size:0x30 data:4byte
StateID_RemainClosed__19dAcOTowerHandD101_c = .bss:0x000000E8; // type:object size:0x30 data:4byte
StateID_Open__19dAcOTowerHandD101_c = .bss:0x00000128; // type:object size:0x30 data:4byte
StateID_Hold__19dAcOTowerHandD101_c = .bss:0x00000168; // type:object size:0x30 data:4byte
+11 -11
View File
@@ -908,7 +908,7 @@ fn_80026F50 = .text:0x80026F50; // type:function size:0xD8
fn_80027030 = .text:0x80027030; // type:function size:0xD8
fn_80027110 = .text:0x80027110; // type:function size:0xC8
fn_800271E0 = .text:0x800271E0; // type:function size:0x44
fn_80027230 = .text:0x80027230; // type:function size:0x78
setMtx__13EffectsStructFRC6mMtx_c = .text:0x80027230; // type:function size:0x78
fn_800272B0 = .text:0x800272B0; // type:function size:0x70
fn_80027320 = .text:0x80027320; // type:function size:0x40
fn_80027360 = .text:0x80027360; // type:function size:0x40
@@ -920,7 +920,7 @@ fn_800274D0 = .text:0x800274D0; // type:function size:0x40
fn_80027510 = .text:0x80027510; // type:function size:0x4C
fn_80027560 = .text:0x80027560; // type:function size:0x5C
__ct__13EffectsStructFv = .text:0x800275C0; // type:function size:0x44
__ct__13EffectsStructFP9dAcBase_c = .text:0x80027610; // type:function size:0x44
__ct__13EffectsStructFP7dBase_c = .text:0x80027610; // type:function size:0x44
__dt__13EffectsStructFv = .text:0x80027660; // type:function size:0x78
remove__13EffectsStructFb = .text:0x800276E0; // type:function size:0x84
fn_80027770 = .text:0x80027770; // type:function size:0xE8
@@ -1121,7 +1121,7 @@ restorePosRotFromCopy__12dAcObjBase_cFv = .text:0x8002E5C0; // type:function siz
create__12dAcObjBase_cFQ28fProfile14PROFILE_NAME_eUlUlP7mVec3_cP7mAng3_cP7mVec3_cUl = .text:0x8002E630; // type:function size:0x98
create__12dAcObjBase_cFPcUlUlP7mVec3_cP7mAng3_cP7mVec3_cUlUsSc = .text:0x8002E6D0; // type:function size:0xA0
ActorObjectBase__findObject = .text:0x8002E770; // type:function size:0x7C
getNextActorInList = .text:0x8002E7F0; // type:function size:0x58
getNextObject__12dAcObjBase_cFP9fLiMgBa_cP12dAcObjBase_c = .text:0x8002E7F0; // type:function size:0x58
isLinkPointer = .text:0x8002E850; // type:function size:0x14
ActorObjectBase__calcVelocity = .text:0x8002E870; // type:function size:0x68
calcVelocity__12dAcObjBase_cFv = .text:0x8002E8E0; // type:function size:0xB8
@@ -2452,7 +2452,7 @@ isSpinAttackingVertically = .text:0x8005B850; // type:function size:0x20
fn_8005B870 = .text:0x8005B870; // type:function size:0x28
fn_8005B8A0 = .text:0x8005B8A0; // type:function size:0xC0
ActorLink__setPosYRot = .text:0x8005B960; // type:function size:0x44
fn_8005B9B0 = .text:0x8005B9B0; // type:function size:0x98
setTransform__7dAcPy_cFRC6mMtx_ciii = .text:0x8005B9B0; // type:function size:0x98
fn_8005BA50 = .text:0x8005BA50; // type:function size:0x30
fn_8005BA80 = .text:0x8005BA80; // type:function size:0x8
fn_8005BA90 = .text:0x8005BA90; // type:function size:0x8
@@ -3523,7 +3523,7 @@ ActorEventRelated__cutEnd = .text:0x8009CEB0; // type:function size:0x30
ActorEventRelated__getCurrentStepIndex = .text:0x8009CEE0; // type:function size:0x30
getCurrentEventCommand__17ActorEventRelatedCFv = .text:0x8009CF10; // type:function size:0x84
ActorEventRelated__getSomeEventRelatedNumber = .text:0x8009CFA0; // type:function size:0x80
ActorEventRelated__isAdvance = .text:0x8009D020; // type:function size:0x34
isAdvance__17ActorEventRelatedFv = .text:0x8009D020; // type:function size:0x34
advanceNext__17ActorEventRelatedFv = .text:0x8009D060; // type:function size:0x50
ActorEventRelated__getSingleIntData2 = .text:0x8009D0B0; // type:function size:0x8C
ActorEventRelated__getSingleIntData = .text:0x8009D140; // type:function size:0x8C
@@ -13452,10 +13452,10 @@ AcItem__stateWaitTurnOffLeave = .text:0x80250630; // type:function size:0x4
AcItem__stateWaitSacredDewGetEffectEnter = .text:0x80250640; // type:function size:0x64
AcItem__stateWaitSacredDewGetEffectUpdate = .text:0x802506B0; // type:function size:0x80
AcItem__stateWaitSacredDewGetEffectLeave = .text:0x80250730; // type:function size:0x4
getItemFromBWheelItem = .text:0x80250740; // type:function size:0xEC
fn_80250830 = .text:0x80250830; // type:function size:0x40
getItemFromBWheelItem__9dAcItem_cFv = .text:0x80250740; // type:function size:0xEC
setItemPosition__9dAcItem_cFRC7mVec3_c = .text:0x80250830; // type:function size:0x40
fn_80250870 = .text:0x80250870; // type:function size:0x38
AcItem__isStateWait = .text:0x802508B0; // type:function size:0x50
isStateWait__9dAcItem_cFv = .text:0x802508B0; // type:function size:0x50
AcItem__setCarriedAndTransitionToGetState = .text:0x80250900; // type:function size:0x50
AcItem__isGreenRupee = .text:0x80250950; // type:function size:0x10
AcItem__isBlueRupee = .text:0x80250960; // type:function size:0x10
@@ -17846,7 +17846,7 @@ YrotM__6mMtx_cFRC4mAng = .text:0x802F1880; // type:function size:0x4C
mMtx__ZrotS = .text:0x802F18D0; // type:function size:0xBC
ZrotM__6mMtx_cFRC4mAng = .text:0x802F1990; // type:function size:0x4C
ZXYrotS__6mMtx_cFRC4mAngRC4mAngRC4mAng = .text:0x802F19E0; // type:function size:0x60
mMtx__ZXYrotM = .text:0x802F1A40; // type:function size:0x60
ZXYrotM__6mMtx_cFRC4mAngRC4mAngRC4mAng = .text:0x802F1A40; // type:function size:0x60
mMtx__XYZrotS = .text:0x802F1AA0; // type:function size:0x60
mMtx__ZYXrotM = .text:0x802F1B00; // type:function size:0x60
toRot__6mMtx_cCFR7mAng3_c = .text:0x802F1B60; // type:function size:0xDC
@@ -39924,7 +39924,7 @@ GROOSENATOR_REF = .sbss:0x80575360; // type:object size:0x4 data:4byte
lbl_80575364 = .sbss:0x80575364; // type:object size:0x4 data:4byte
lbl_80575368 = .sbss:0x80575368; // type:object size:0x8 data:4byte
sInstance__16AttentionManager = .sbss:0x80575370; // type:object size:0x8 data:4byte
EVENT_RELATED = .sbss:0x80575378; // type:object size:0x4 data:4byte
sInstance__12EventManager = .sbss:0x80575378; // type:object size:0x4 data:4byte
lbl_8057537C = .sbss:0x8057537C; // type:object size:0xC data:byte
lbl_80575388 = .sbss:0x80575388; // type:object size:0x8 data:byte
lbl_80575390 = .sbss:0x80575390; // type:object size:0x4 data:4byte
@@ -40217,7 +40217,7 @@ lbl_805758B6 = .sbss:0x805758B6; // type:object size:0x1 data:byte
lbl_805758B7 = .sbss:0x805758B7; // type:object size:0x1 data:byte
lbl_805758B8 = .sbss:0x805758B8; // type:object size:0x4 data:float
lbl_805758BC = .sbss:0x805758BC; // type:object size:0x4 data:float
ITEM_ACTOR_LIST = .sbss:0x805758C0; // type:object size:0x8 data:4byte
sItemList__9dAcItem_c = .sbss:0x805758C0; // type:object size:0x8 data:4byte
lbl_805758C8 = .sbss:0x805758C8; // type:object size:0x8 data:4byte
NUMBER_OF_ITEMS = .sbss:0x805758D0; // type:object size:0x4 data:4byte
lbl_805758D4 = .sbss:0x805758D4; // type:object size:0x1 data:byte
+1 -1
View File
@@ -117,7 +117,7 @@ typedef volatile f32 vf32;
typedef volatile f64 vf64;
// Necesary for CW
#if __cplusplus < 201103L && !defined(_WIN32)
#if __MWERKS__
#define override
#define noexcept
#define nullptr NULL
+3
View File
@@ -58,6 +58,9 @@ public:
const T *get() const {
return static_cast<const T *>(p_owner);
}
BOOL isLinked() const {
return get() != nullptr;
}
};
// Ghidra: ActorBase
+8 -4
View File
@@ -1,4 +1,6 @@
#include "d/a/d_a_base.h"
#include "d/a/obj/d_a_obj_base.h"
#include "m/m_mtx.h"
class dAcPy_c : public dAcObjBase_c {
// See Below for some info
@@ -47,11 +49,13 @@ public:
dAcPy_c();
virtual ~dAcPy_c();
/* vt 0x080 */ virtual void IfCurrentActionToActor();
/* vt 0x084 */ virtual void vt_0x084();
/* vt 0x088 */ virtual void set0x439F();
void setTransform(const mMtx_c &mtx, UNKWORD, UNKWORD, UNKWORD);
/* vt 0x080 */ virtual UNKWORD IfCurrentActionToActor(dAcBase_c *ac, UNKWORD);
/* vt 0x084 */ virtual void vt_0x084(dAcBase_c *ac, UNKWORD);
/* vt 0x088 */ virtual void set0x439F(dAcBase_c *ac, UNKWORD);
/* vt 0x08C */ virtual void set0x43DE();
/* vt 0x090 */ virtual void vt_0x090();
/* vt 0x090 */ virtual f32 vt_0x090();
/* vt 0x094 */ virtual void relatedToUsingItem0x11();
/* vt 0x098 */ virtual void setPosRot();
/* vt 0x09C */ virtual void isLiftingObject();
+1 -1
View File
@@ -133,7 +133,7 @@ public:
);
/* 8002e770 */ static dAcObjBase_c *
findObject(fProfile::PROFILE_NAME_e actorId, fLiNdBa_c *refList, dAcObjBase_c *parent);
/* 8002e7f0 */ static dAcObjBase_c *getNextObject(fLiNdBa_c *ref, dAcObjBase_c *parent);
/* 8002e7f0 */ static dAcObjBase_c *getNextObject(fLiMgBa_c *ref, dAcObjBase_c *parent);
/* 8002e850 */ bool isPlayer();
/* 8002e870 */ void calcVelocity(mVec3_c &pos, f32 speed);
/* 8002e8e0 */ void calcVelocity();
+6
View File
@@ -2,6 +2,7 @@
#define D_A_ITEM_BASE_H
#include "d/a/obj/d_a_obj_base.h"
#include "m/m_vec.h"
// Ghidra: AcItem
// Size: 0xd68
@@ -14,6 +15,11 @@ public:
static void spawnDrop(u16 item, u32 room, const mVec3_c &pos, const mAng3_c &rot);
static u32 checkFlag(u32 flag);
void setItemPosition(const mVec3_c &);
void getItemFromBWheelItem();
bool isStateWait();
static fLiMgBa_c sItemList;
};
#endif
+99 -2
View File
@@ -1,13 +1,23 @@
#ifndef D_A_OBJ_TOWER_HAND_D101_H
#define D_A_OBJ_TOWER_HAND_D101_H
#include "common.h"
#include "d/a/d_a_base.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/a/obj/d_a_obj_item.h"
#include "d/col/bg/d_bg_w.h"
#include "m/m3d/m_anmmdl.h"
#include "m/m_angle.h"
#include "m/m_mtx.h"
#include "m/m_vec.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
#include "toBeSorted/actor_event.h"
#include "toBeSorted/effects_struct.h"
class dAcOTowerHandD101_c : public dAcObjBase_c {
public:
dAcOTowerHandD101_c() : mStateMgr(*this, sStateID::null) {}
dAcOTowerHandD101_c() : mStateMgr(*this, sStateID::null), mEffects(this), mEvent(*this, nullptr), mFlags(0) {}
virtual ~dAcOTowerHandD101_c() {}
STATE_FUNC_DECLARE(dAcOTowerHandD101_c, RemainOpen);
@@ -16,8 +26,95 @@ public:
STATE_FUNC_DECLARE(dAcOTowerHandD101_c, Open);
STATE_FUNC_DECLARE(dAcOTowerHandD101_c, Hold);
virtual bool createHeap() override;
virtual int actorCreate() override;
virtual int actorPostCreate() override;
virtual int actorExecute() override;
virtual int actorExecuteInEvent() override;
virtual int draw() override;
private:
/* 0x??? */ STATE_MGR_DECLARE(dAcOTowerHandD101_c);
int getDirection() const;
int getHoldFlag() const;
int getSceneFlag() const;
u32 getEventId() const;
inline bool getItem(dAcItem_c *&outItem, bool &outIsWait);
inline bool getItem(dAcItem_c *&outItem);
static bool isValidDirectionParam(int param);
static bool getScale(int direction, mVec3_c &outScale);
bool getNodeMtx(const char *nodeName, mMtx_c &outMtx) const;
bool getLoc1Mtx(mMtx_c &outMtx) const;
bool getLoc2Mtx(mMtx_c &outMtx) const;
static const mVec3_c &getBoundingLower();
static const mVec3_c &getBoundingUpper();
static bool isValidBgWIndex(int index);
bool getBgW(int index, dBgW *&outBgW);
bool getBgWMtx(int index, mMtx_c *&outMtx);
static f32 getFrame1();
static f32 getFrame2();
void doSomethingHold(f32 flag);
void getItemPos(mVec3_c &vec) const;
ActorEventRelated &getEventStuff();
void doEvent();
static f32 getDist1();
static f32 getDist2();
static f32 getDist3();
static f32 getDist1Sq();
static f32 getDist1PlusDist2();
static f32 getDist1PlusDist2Sq();
static f32 getDist3Sq();
static f32 getCloseRate();
static f32 getOpenRate();
bool checkFlag(bool &result) const;
void setSceneFlag(int flag) const;
void unsetSceneFlag(int flag) const;
bool checkSceneFlag1(int flag, bool &result) const;
void setHoldFlag();
void unsetHoldFlag();
static void eventCallback(void *self);
static void
transformMtx(const mVec3_c &localTranslation, const mAng3_c &rotation, const mVec3_c &offset, mVec3_c &result);
static f32 f32Sq(f32 val);
static f32 getItemOffsetX();
static f32 getItemOffsetY();
static f32 getItemOffsetZ();
static mVec3_c getItemOffset();
void calcItemPosition(const mVec3_c &offset, mVec3_c &outPosition) const;
static f32 getLinkOffsetX();
static f32 getLinkOffsetY();
static f32 getLinkOffsetZ();
static void getLinkOffsetNormal(mVec3_c &out);
static void getLinkOffsetMirror(mVec3_c &out);
void getLinkOffset(mVec3_c &out) const;
/* 0x330 */ m3d::mdlAnmChr mMdl;
/* 0x398 */ EffectsStruct mEffects;
/* 0x3CC */ dBgW mBgWs[3];
/* 0x9FC */ STATE_MGR_DECLARE(dAcOTowerHandD101_c);
/* 0xA38 */ ActorEventRelated mEvent;
/* 0xA88 */ mMtx_c mLoc1Mtx;
/* 0xAB8 */ mMtx_c mLoc2Mtx;
/* 0xAE8 */ dAcRef_c<dAcItem_c> mHeldItem;
/* 0xAF4 */ f32 field_0xAF4;
/* 0xAF8 */ u8 field_0xAF8[0xB04 - 0xAF8];
/* 0xB04 */ u32 mFlags;
/* 0xB08 */ u16 field_0xB08;
};
#endif
+8
View File
@@ -45,10 +45,18 @@ public:
return mMdl;
}
inline const mdl_c &getModel() const {
return mMdl;
}
inline anmChr_c &getAnm() {
return mAnm;
}
inline const anmChr_c &getAnm() const {
return mAnm;
}
private:
nw4r::g3d::ResFile mMdlFile;
nw4r::g3d::ResFile mAnmFile;
+2 -2
View File
@@ -65,10 +65,10 @@ public:
void rot(int, int); // does some werrd operation to rotate the matrix
bool quatRelated();
void trans(const mVec3_c &v) {
void transS(const mVec3_c &v) {
PSMTXTrans(*this, v.x, v.y, v.z);
}
void trans(f32 x, f32 y, f32 z) {
void transS(f32 x, f32 y, f32 z) {
PSMTXTrans(*this, x, y, z);
}
mVec3_c multVec(const mVec3_c &v) const {
+1
View File
@@ -14,6 +14,7 @@ public:
void scheduleEvent(Event &, u32);
u32 getCurrentEventCommand() const;
void advanceNext();
bool isAdvance();
private:
u8 field_0x00[0x50 - 0x00];
+10 -1
View File
@@ -3,10 +3,13 @@
#include "common.h"
#include "d/d_base.h"
#include "m/m_mtx.h"
#include "m/m_vec.h"
class EffectsStruct {
private:
u8 field_0x00[0x1C - 0x00];
s32 field_0x00;
u8 field_0x04[0x1C - 0x04];
public:
// vt at 0x1C
@@ -19,6 +22,12 @@ public:
}
void remove(bool);
void fn_80029929(u16 effect, mVec3_c *pos, void *, void *, void *, void *);
void setMtx(const mMtx_c&);
bool checkField0x00() const {
return field_0x00 != 0;
}
private:
u8 field_0x20[0x28 - 0x20];
+783 -12
View File
@@ -1,25 +1,796 @@
#include "d/a/obj/d_a_obj_tower_hand_D101.h"
#include "common.h"
#include "d/a/d_a_player.h"
#include "d/a/obj/d_a_obj_item.h"
#include "d/col/bg/d_bg_s.h"
#include "d/col/bg/d_bg_w.h"
#include "d/flag/sceneflag_manager.h"
#include "f/f_base.h"
#include "m/m3d/m_fanm.h"
#include "m/m_angle.h"
#include "m/m_mtx.h"
#include "m/m_vec.h"
#include "nw4r/g3d/g3d_resfile.h"
#include "rvl/MTX/mtx.h"
#include "rvl/MTX/vec.h"
#include "s/s_Math.h"
#include "toBeSorted/actor_event.h"
#include "toBeSorted/event_manager.h"
#include "toBeSorted/room_manager.h"
SPECIAL_ACTOR_PROFILE(OBJ_TOWER_HAND_D101, dAcOTowerHandD101_c, fProfile::OBJ_TOWER_HAND_D101, 0x180, 0, 6);
const mVec3_c sScales[2] = {mVec3_c(1.0f, 1.0f, 1.0f), mVec3_c(-1.0f, 1.0f, 1.0f)};
const mVec3_c sBoundingLower = mVec3_c(-1000.0f, 0.0f, -600.0f);
const mVec3_c sBoundingUpper = mVec3_c(1000.0f, 1000.0f, 1000.0f);
const mVec3_c v1 = mVec3_c::Ex * 50.0f;
const mVec3_c v2 = mVec3_c::Ey * 50.0f;
const mVec3_c v3 = mVec3_c::Ez * 50.0f;
STATE_DEFINE(dAcOTowerHandD101_c, RemainOpen);
STATE_DEFINE(dAcOTowerHandD101_c, Close);
STATE_DEFINE(dAcOTowerHandD101_c, RemainClosed);
STATE_DEFINE(dAcOTowerHandD101_c, Open);
STATE_DEFINE(dAcOTowerHandD101_c, Hold);
void dAcOTowerHandD101_c::initializeState_RemainOpen() {}
void dAcOTowerHandD101_c::executeState_RemainOpen() {}
static const char *const sOarcName = "TowerHandD101";
static const char *const sMdlName = "TowerHandD101";
static const char *const sAnmName = "TowerHandD101";
static const char *const sCollisionParts[2][3] = {
{ "TowerHandD101A", "TowerHandD101B", "TowerHandD101C"},
{"TowerHandD101A_R", "TowerHandD101B_R", "TowerHandD101C_R"},
};
static const char *const sLocator1 = "locator1";
static const char *const sLocator2 = "locator2";
// TODO there are tons of unused floats in the rodata section
bool dAcOTowerHandD101_c::getScale(int direction, mVec3_c &outScale) {
if (!isValidDirectionParam(direction)) {
return false;
}
outScale.x = sScales[direction].x;
outScale.y = sScales[direction].y;
outScale.z = sScales[direction].z;
return true;
}
const mVec3_c &dAcOTowerHandD101_c::getBoundingLower() {
return sBoundingLower;
}
const mVec3_c &dAcOTowerHandD101_c::getBoundingUpper() {
return sBoundingUpper;
}
bool dAcOTowerHandD101_c::isValidDirectionParam(int param) {
return 0 <= param && param <= 1;
}
void dAcOTowerHandD101_c::transformMtx(
const mVec3_c &localTranslation, const mAng3_c &rotation, const mVec3_c &offset, mVec3_c &result
) {
mMtx_c tmp1, tmp2;
tmp1.transS(localTranslation);
tmp1.ZXYrotM(rotation.x, rotation.y, rotation.z);
tmp2.transS(offset);
tmp1 += tmp2;
tmp1.getTranslation(result);
}
f32 dAcOTowerHandD101_c::f32Sq(f32 value) {
return value * value;
}
bool dAcOTowerHandD101_c::isValidBgWIndex(int index) {
return 0 <= index && index <= 2;
}
bool dAcOTowerHandD101_c::createHeap() {
const char *oarcName = sOarcName;
void *resP = getOarcResFile(oarcName);
if (resP == nullptr) {
return false;
}
if (!mMdl.create(resP, sMdlName, sAnmName, &heap_allocator, 0x130)) {
return false;
}
int direction = getDirection();
if (!isValidDirectionParam(direction)) {
return false;
}
nw4r::g3d::ResFile res = resP;
if (!res.mFile.IsValid()) {
return false;
}
RoomManager::bindStageResToFile(&res);
if (direction == 1) {
mMdl.getModel().setCullModeAll(GX_CULL_FRONT, false);
}
updateMatrix();
mMdl.getModel().setLocalMtx(mWorldMtx);
mVec3_c newScale;
if (!getScale(direction, newScale)) {
return false;
}
mMdl.getModel().setScale(newScale);
mMdl.getModel().calc(false);
mMtx_c loc1Mtx;
getLoc1Mtx(loc1Mtx);
mLoc1Mtx.copyFrom(loc1Mtx);
mMtx_c loc2Mtx;
getLoc2Mtx(loc2Mtx);
mLoc2Mtx.copyFrom(loc2Mtx);
const char *const *parts = sCollisionParts[direction];
for (int i = 0; i <= 2; i++) {
void *dzb = getOarcDZB(oarcName, parts[i]);
if (dzb == nullptr) {
return false;
}
void *plc = getOarcPLC(oarcName, parts[i]);
if (plc == nullptr) {
return false;
}
dBgW *bgW = nullptr;
getBgW(i, bgW);
mMtx_c *bgWMtx;
getBgWMtx(i, bgWMtx);
bool ok = !(BOOL)bgW->Set((cBgD_t *)dzb, (PLC *)plc, cBgW::MOVE_BG_e, bgWMtx, &mScale);
if (!ok) {
return false;
}
}
return true;
}
int dAcOTowerHandD101_c::actorCreate() {
CREATE_ALLOCATOR(dAcOTowerHandD101_c);
mMdl.getModel().setLocalMtx(mWorldMtx);
mMdl.setAnm(sAnmName, m3d::PLAY_MODE_4, 0.0f);
mMdl.getModel().setPriorityDraw(0x1C, 0);
for (int i = 0; i <= 2; i++) {
dBgW *bgW = nullptr;
getBgW(i, bgW);
bgW->SetCrrFunc(dBgS_MoveBGProc_Typical);
dBgS::GetInstance()->Regist(bgW, this);
}
boundingBox.Set(getBoundingLower(), getBoundingUpper());
return SUCCEEDED;
}
int dAcOTowerHandD101_c::actorPostCreate() {
mVec3_c pos;
getItemPos(pos);
bool handClosed = true;
dAcObjBase_c *ac = dAcObjBase_c::getNextObject(&dAcItem_c::sItemList, nullptr);
f32 distLimit = 90000.0f;
while (handClosed && ac != nullptr) {
if (PSVECSquareDistance(pos, ac->position) < distLimit) {
handClosed = false;
mHeldItem.link(static_cast<dAcItem_c *>(ac));
} else {
ac = dAcObjBase_c::getNextObject(&dAcItem_c::sItemList, ac);
}
}
if (handClosed) {
mFlags |= 1;
}
if (handClosed) {
mStateMgr.changeState(StateID_RemainClosed);
} else {
mStateMgr.changeState(StateID_RemainOpen);
}
return SUCCEEDED;
}
inline bool dAcOTowerHandD101_c::getItem(dAcItem_c *&outItem) {
outItem = !mHeldItem.isLinked() ? nullptr : mHeldItem.get();
bool ret = outItem == nullptr;
return ret;
}
int dAcOTowerHandD101_c::actorExecute() {
dAcPy_c *link;
dAcItem_c *item;
link = dAcPy_c::LINK;
UNKWORD w = link->IfCurrentActionToActor(this, 0x3D);
bool b = getItem(item);
if (!b && item->isStateWait()) {
f32 dist = PSVECSquareDistance(item->position, link->position);
if (w == 0 && dist < 15625.0f) {
item->getItemFromBWheelItem();
} else {
item->setItemPosition(item->position);
}
}
bool doSomething;
if (b) {
doSomething = true;
} else {
doSomething = !item->isStateWait();
}
if (b || doSomething) {
link->vt_0x084(this, 0x3D);
}
mStateMgr.executeState();
mVec3_c newScale;
int direction = getDirection();
getScale(direction, newScale);
mMdl.getModel().calc(false);
mMtx_c tmpMtx2;
mMtx_c tmpMtx3;
mMtx_c tmpMtx1;
mMtx_c tmpMtx4;
getLoc1Mtx(tmpMtx2);
PSMTXScale(tmpMtx1, newScale.x, newScale.y, newScale.z);
PSMTXConcat(tmpMtx2, tmpMtx1, tmpMtx2);
mLoc1Mtx.copyFrom(tmpMtx2);
getLoc2Mtx(tmpMtx3);
PSMTXScale(tmpMtx4, newScale.x, newScale.y, newScale.z);
PSMTXConcat(tmpMtx3, tmpMtx4, tmpMtx3);
mLoc2Mtx.copyFrom(tmpMtx3);
if (mEffects.checkField0x00()) {
if (direction == 1) {
tmpMtx3.YrotM(-0x8000);
}
mEffects.setMtx(tmpMtx3);
}
for (int i = 0; i <= 2; i++) {
dBgW *bgW = nullptr;
getBgW(i, bgW);
bgW->Move();
}
return SUCCEEDED;
}
int dAcOTowerHandD101_c::actorExecuteInEvent() {
u32 cmd = getEventStuff().getCurrentEventCommand();
switch (cmd) {
case 'wait': getEventStuff().advanceNext(); break;
case 'clos': {
if (getEventStuff().isAdvance()) {
if (mStateMgr.isState(StateID_Close) || mStateMgr.isState(StateID_RemainClosed)) {
mStateMgr.changeState(StateID_Open);
}
}
mStateMgr.executeState();
if (mStateMgr.isState(StateID_RemainClosed)) {
getEventStuff().advanceNext();
}
mVec3_c newScale;
int direction = getDirection();
getScale(direction, newScale);
mMdl.getModel().calc(false);
mMtx_c tmpMtx2;
mMtx_c tmpMtx3;
mMtx_c tmpMtx1;
mMtx_c tmpMtx4;
getLoc1Mtx(tmpMtx2);
PSMTXScale(tmpMtx1, newScale.x, newScale.y, newScale.z);
PSMTXConcat(tmpMtx2, tmpMtx1, tmpMtx2);
mLoc1Mtx.copyFrom(tmpMtx2);
getLoc2Mtx(tmpMtx3);
PSMTXScale(tmpMtx4, newScale.x, newScale.y, newScale.z);
PSMTXConcat(tmpMtx3, tmpMtx4, tmpMtx3);
mLoc2Mtx.copyFrom(tmpMtx3);
if (mEffects.checkField0x00()) {
if (direction == 1) {
tmpMtx3.YrotM(-0x8000);
}
mEffects.setMtx(tmpMtx3);
}
for (int i = 0; i <= 2; i++) {
dBgW *bgW = nullptr;
getBgW(i, bgW);
bgW->Move();
}
} break;
case '????': actorExecute(); break;
default:
actorExecute();
// Cool and here we're NOT using getEventStuff. Why even bother?
mEvent.advanceNext();
}
return SUCCEEDED;
}
int dAcOTowerHandD101_c::draw() {
drawModelType1(&mMdl.getModel());
return SUCCEEDED;
}
bool dAcOTowerHandD101_c::getBgW(int index, dBgW *&outBgW) {
if (isValidBgWIndex(index)) {
outBgW = &mBgWs[index];
return true;
}
return false;
}
ActorEventRelated &dAcOTowerHandD101_c::getEventStuff() {
return mEvent;
}
f32 dAcOTowerHandD101_c::getItemOffsetX() {
return 0.0f;
}
f32 dAcOTowerHandD101_c::getItemOffsetY() {
return 100.0f;
}
f32 dAcOTowerHandD101_c::getItemOffsetZ() {
return 0.0f;
}
f32 dAcOTowerHandD101_c::getDist1() {
return 300.0f;
}
f32 dAcOTowerHandD101_c::getDist2() {
return 200.0f;
}
f32 dAcOTowerHandD101_c::getDist3() {
return 300.0f;
}
f32 dAcOTowerHandD101_c::getLinkOffsetX() {
return 0.0f;
}
f32 dAcOTowerHandD101_c::getLinkOffsetY() {
return 180.0f;
}
f32 dAcOTowerHandD101_c::getLinkOffsetZ() {
return -180.0f;
}
f32 dAcOTowerHandD101_c::getFrame1() {
return 15.0f;
}
f32 dAcOTowerHandD101_c::getFrame2() {
return 30.0f;
}
f32 dAcOTowerHandD101_c::getCloseRate() {
return 3.65f;
}
f32 dAcOTowerHandD101_c::getOpenRate() {
return 1.0f;
}
void dAcOTowerHandD101_c::doSomethingHold(f32 arg) {
field_0xAF4 = arg;
}
int dAcOTowerHandD101_c::getDirection() const {
return params & 0xFF;
}
int dAcOTowerHandD101_c::getHoldFlag() const {
return (params >> 8) & 0xFF;
}
int dAcOTowerHandD101_c::getSceneFlag() const {
return (params >> 16) & 0xFF;
}
u32 dAcOTowerHandD101_c::getEventId() const {
return (params >> 24) & 0xFF;
}
bool dAcOTowerHandD101_c::getBgWMtx(int index, mMtx_c *&outMtx) {
switch (index) {
case 0: outMtx = &mWorldMtx; return true;
case 1: outMtx = &mLoc1Mtx; return true;
case 2: outMtx = &mLoc2Mtx; return true;
default: return false;
}
}
bool dAcOTowerHandD101_c::getNodeMtx(const char *nodeName, mMtx_c &outMtx) const {
int nodeId = mMdl.getModel().getNodeID(nodeName);
if (nodeId == -1) {
return false;
}
mMtx_c mtx;
if (mMdl.getModel().getNodeWorldMtx(nodeId, mtx)) {
outMtx.copyFrom(mtx);
return true;
}
return false;
}
bool dAcOTowerHandD101_c::getLoc1Mtx(mMtx_c &outMtx) const {
return getNodeMtx(sLocator1, outMtx);
}
bool dAcOTowerHandD101_c::getLoc2Mtx(mMtx_c &outMtx) const {
return getNodeMtx(sLocator2, outMtx);
}
mVec3_c dAcOTowerHandD101_c::getItemOffset() {
return mVec3_c(getItemOffsetX(), getItemOffsetY(), getItemOffsetZ());
}
void dAcOTowerHandD101_c::getItemPos(mVec3_c &outVec) const {
calcItemPosition(getItemOffset(), outVec);
}
f32 dAcOTowerHandD101_c::getDist1Sq() {
return f32Sq(getDist1());
}
f32 dAcOTowerHandD101_c::getDist1PlusDist2() {
return getDist1() + getDist2();
}
f32 dAcOTowerHandD101_c::getDist1PlusDist2Sq() {
return f32Sq(getDist1PlusDist2());
}
f32 dAcOTowerHandD101_c::getDist3Sq() {
return f32Sq(getDist3());
}
void dAcOTowerHandD101_c::getLinkOffsetNormal(mVec3_c &out) {
out.set(getLinkOffsetX(), getLinkOffsetY(), getLinkOffsetZ());
}
void dAcOTowerHandD101_c::getLinkOffsetMirror(mVec3_c &out) {
out.set(-getLinkOffsetX(), getLinkOffsetY(), getLinkOffsetZ());
}
void dAcOTowerHandD101_c::getLinkOffset(mVec3_c &out) const {
switch (getDirection()) {
case 0: getLinkOffsetNormal(out); break;
case 1: getLinkOffsetMirror(out); break;
}
}
void dAcOTowerHandD101_c::setSceneFlag(int flag) const {
u16 theFlag = flag;
if (theFlag >= 255) {
return;
}
SceneflagManager::sInstance->setFlag(roomid, theFlag);
}
void dAcOTowerHandD101_c::unsetSceneFlag(int flag) const {
u16 theFlag = flag;
if (theFlag >= 255) {
return;
}
SceneflagManager::sInstance->unsetFlag(roomid, theFlag);
}
bool dAcOTowerHandD101_c::checkSceneFlag1(int flag, bool &result) const {
u16 theFlag = flag;
// I guess 255 is not a valid scene flag
bool isValidSceneFlag = theFlag < 255;
if (isValidSceneFlag) {
result = SceneflagManager::sInstance->checkBoolFlag(roomid, theFlag);
}
return isValidSceneFlag;
}
void dAcOTowerHandD101_c::setHoldFlag() {
setSceneFlag(getHoldFlag());
}
void dAcOTowerHandD101_c::unsetHoldFlag() {
unsetSceneFlag(getHoldFlag());
}
bool dAcOTowerHandD101_c::checkFlag(bool &result) const {
return checkSceneFlag1(getSceneFlag(), result);
}
// ???
inline u32 getFlags() {
static volatile u32 FLAGS_1 = 0x00000001;
static u32 FLAGS_2 = 0x00100001;
// The remarkable bit here is that this does not use an `andc` instruction,
// but rather `nor`s FLAGS_1, contrary to the other usages so far
u32 f1 = ~FLAGS_1;
u32 f2 = FLAGS_2;
return f2 & f1;
}
void dAcOTowerHandD101_c::doEvent() {
Event e = Event(getEventId(), roomid, getFlags(), (void *)&eventCallback, nullptr);
getEventStuff().scheduleEvent(e, 0);
}
void dAcOTowerHandD101_c::eventCallback(void *arg) {
dAcOTowerHandD101_c *self = static_cast<dAcOTowerHandD101_c *>(arg);
self->mFlags |= 1;
dAcPy_c *link = dAcPy_c::LINK;
if (link->IfCurrentActionToActor(self, 0x3D)) {
link->vt_0x084(self, 0x3D);
}
}
void dAcOTowerHandD101_c::calcItemPosition(const mVec3_c &offset, mVec3_c &outPosition) const {
transformMtx(position, rotation, offset, outPosition);
}
void dAcOTowerHandD101_c::initializeState_RemainOpen() {
mMdl.setFrame(mMdl.getAnm().getStartFrame());
}
inline bool dAcOTowerHandD101_c::getItem(dAcItem_c *&outItem, bool &outIsNotWait) {
dAcItem_c *item = mHeldItem.get();
if (item == nullptr) {
outItem = nullptr;
} else {
outItem = item;
}
bool ret = item == nullptr;
if (ret) {
outIsNotWait = true;
} else {
outIsNotWait = !outItem->isStateWait();
}
return ret;
}
void dAcOTowerHandD101_c::executeState_RemainOpen() {
dAcPy_c *link = dAcPy_c::LINK;
mVec3_c pos;
getItemPos(pos);
f32 linkDistToItem = PSVECSquareDistance(pos, link->position);
if (EventManager::isInEvent() && getEventStuff().getCurrentEventCommand() == 'wait') {
return;
}
if (EventManager::isInEvent() && getEventStuff().getCurrentEventCommand() == 'clos') {
mStateMgr.changeState(StateID_Close);
return;
}
bool isNotWait;
dAcItem_c *item;
if (getItem(item, isNotWait)) {
if (160000.0f < linkDistToItem) {
doEvent();
}
} else if (!isNotWait) {
if (linkDistToItem < getDist1Sq()) {
mStateMgr.changeState(StateID_Close);
}
}
}
void dAcOTowerHandD101_c::finalizeState_RemainOpen() {}
void dAcOTowerHandD101_c::initializeState_Close() {}
void dAcOTowerHandD101_c::executeState_Close() {}
extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_573;
// extern "C" void fn_80029929()
void dAcOTowerHandD101_c::initializeState_Close() {
mMdl.getAnm().setPlayState(m3d::PLAY_MODE_1);
mMdl.setRate(getCloseRate());
mEffects.fn_80029929(PARTICLE_RESOURCE_ID_MAPPING_573, &position, nullptr, nullptr, nullptr, nullptr);
playSound(0xC0C);
}
void dAcOTowerHandD101_c::executeState_Close() {
dAcPy_c *link = dAcPy_c::LINK;
mVec3_c pos;
getItemPos(pos);
f32 linkDistToItem = PSVECSquareDistance(pos, link->position);
if (EventManager::isInEvent() && getEventStuff().getCurrentEventCommand() == 'wait') {
mStateMgr.changeState(StateID_Open);
return;
}
if (EventManager::isInEvent() && getEventStuff().getCurrentEventCommand() == 'clos') {
mMdl.play();
if (mMdl.getAnm().isStop()) {
mStateMgr.changeState(StateID_RemainClosed);
}
return;
}
bool isNotWait;
dAcItem_c *item;
if (getItem(item, isNotWait)) {
if (160000.0f < linkDistToItem) {
doEvent();
}
mStateMgr.changeState(StateID_Open);
} else if (isNotWait) {
mStateMgr.changeState(StateID_Open);
} else if (link->IfCurrentActionToActor(this, 0x3D)) {
mStateMgr.changeState(StateID_Hold);
} else {
if (mMdl.getAnm().isStop()) {
mStateMgr.changeState(StateID_RemainClosed);
} else {
if (getFrame1() <= mMdl.getAnm().getFrame() && getFrame2() <= mMdl.getAnm().getFrame() &&
linkDistToItem < getDist1PlusDist2Sq()) {
link->set0x439F(this, 5);
}
mMdl.play();
}
}
}
void dAcOTowerHandD101_c::finalizeState_Close() {}
void dAcOTowerHandD101_c::initializeState_RemainClosed() {}
void dAcOTowerHandD101_c::executeState_RemainClosed() {}
void dAcOTowerHandD101_c::finalizeState_RemainClosed() {}
void dAcOTowerHandD101_c::initializeState_Open() {}
void dAcOTowerHandD101_c::executeState_Open() {}
void dAcOTowerHandD101_c::initializeState_Open() {
bool isFlagSet;
checkFlag(isFlagSet);
if (!isFlagSet) {
mMdl.getAnm().setPlayState(m3d::PLAY_MODE_3);
mMdl.setRate(getOpenRate());
}
playSound(0xC0D);
}
void dAcOTowerHandD101_c::executeState_Open() {
dAcPy_c *link = dAcPy_c::LINK;
mVec3_c pos;
getItemPos(pos);
f32 linkDistToItem = PSVECSquareDistance(pos, link->position);
if (EventManager::isInEvent() && getEventStuff().getCurrentEventCommand() == 'wait') {
if (mMdl.getAnm().isStop()) {
mStateMgr.changeState(StateID_RemainOpen);
} else {
mMdl.play();
}
return;
}
if (EventManager::isInEvent() && getEventStuff().getCurrentEventCommand() == 'clos') {
if (mMdl.getAnm().isStop()) {
mStateMgr.changeState(StateID_Close);
} else {
mMdl.play();
}
return;
}
bool isNotWait;
dAcItem_c *item;
if (getItem(item, isNotWait)) {
if (160000.0f < linkDistToItem) {
doEvent();
}
if (mMdl.getAnm().isStop()) {
mStateMgr.changeState(StateID_Close);
} else {
mMdl.play();
}
} else if (isNotWait) {
if (mMdl.getAnm().isStop()) {
mStateMgr.changeState(StateID_Close);
} else {
mMdl.play();
}
} else {
if (mMdl.getAnm().isStop()) {
mStateMgr.changeState(StateID_Close);
} else {
mMdl.play();
}
}
}
void dAcOTowerHandD101_c::finalizeState_Open() {}
void dAcOTowerHandD101_c::initializeState_Hold() {}
void dAcOTowerHandD101_c::executeState_Hold() {}
void dAcOTowerHandD101_c::finalizeState_Hold() {}
void dAcOTowerHandD101_c::initializeState_RemainClosed() {
mMdl.setFrame(mMdl.getAnm().getEndFrame());
bool isFlagSet = false;
checkFlag(isFlagSet);
if (isFlagSet) {
mFlags |= 1;
}
field_0xB08 = 0;
}
void dAcOTowerHandD101_c::executeState_RemainClosed() {
dAcPy_c *link = dAcPy_c::LINK;
mVec3_c pos;
getItemPos(pos);
f32 linkDistToItem = PSVECSquareDistance(pos, link->position);
if (EventManager::isInEvent() && getEventStuff().getCurrentEventCommand() == 'wait') {
mStateMgr.changeState(StateID_Open);
return;
}
if (EventManager::isInEvent() && getEventStuff().getCurrentEventCommand() == 'clos') {
return;
}
if ((mFlags & 1) == 0) {
bool isNotWait;
dAcItem_c *item;
// Okay here the inline theory completely falls apart because
// the 160000.0f is only being loaded once in the middle of that
// this suspected inline body does
if (getItem(item, isNotWait)) {
if (160000.0f < linkDistToItem) {
doEvent();
}
mStateMgr.changeState(StateID_Open);
} else if (isNotWait) {
mStateMgr.changeState(StateID_Open);
} else {
if (getDist1PlusDist2Sq() < 160000.0f) {
mStateMgr.changeState(StateID_Open);
}
}
}
}
void dAcOTowerHandD101_c::finalizeState_RemainClosed() {}
void dAcOTowerHandD101_c::initializeState_Hold() {
mMdl.getAnm().setPlayState(m3d::PLAY_MODE_1);
mMdl.setRate(getCloseRate());
setHoldFlag();
doSomethingHold(0.0f);
}
void dAcOTowerHandD101_c::executeState_Hold() {
dAcPy_c *link = dAcPy_c::LINK;
if (link->IfCurrentActionToActor(this, 0x3D)) {
mMdl.play();
f32 linkValue = link->vt_0x090();
u32 i = 0;
bool keepGoing = true;
f32 counter = 0.8f;
while (keepGoing == true && i < 4) {
if (counter < linkValue) {
keepGoing = false;
} else {
counter -= 0.2f;
i++;
}
}
f32 value = field_0xAF4;
sLib::addCalcScaledDiff(&value, i * 0.25f, 0.5f, 1.0f);
doSomethingHold(value);
mMtx_c tmpMtx1;
tmpMtx1.transS(position);
// Different address calculation here
tmpMtx1.ZXYrotM(rotation.x, rotation.y, rotation.z);
mVec3_c linkVec;
getLinkOffset(linkVec);
mMtx_c tmpMtx2;
tmpMtx2.transS(linkVec);
tmpMtx1 += tmpMtx2;
tmpMtx1.YrotM(-0x8000);
mMtx_c tmpMtx3;
f32 transScale = 100.0f;
tmpMtx3.transS(0.0f, 0.0f, field_0xAF4 * transScale);
tmpMtx1 += tmpMtx3;
tmpMtx1.XrotM(0x4000);
link->setTransform(tmpMtx1, 1, 0, 0);
} else {
mStateMgr.changeState(StateID_Open);
}
}
void dAcOTowerHandD101_c::finalizeState_Hold() {
unsetHoldFlag();
}
+2 -2
View File
@@ -293,10 +293,10 @@ void dAcOTumbleWeed_c::calcMatrix() {
mMtx_c mtx0, mtx1, mtx2;
mShadowMtx.copyFrom(mWorldMtx);
mtx1.trans(getPosition() - position);
mtx1.transS(getPosition() - position);
mShadowMtx += mtx1;
mtx0.fromQuat(mField_0x910);
mtx2.trans(0.f, 40.f, 0.f);
mtx2.transS(0.f, 40.f, 0.f);
mWorldMtx += mtx2;
mWorldMtx += mtx0;
}