diff options
| author | TakaRikka <38417346+TakaRikka@users.noreply.github.com> | 2023-03-07 10:44:25 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-07 11:44:25 -0700 |
| commit | 6c2e18af70dcc392b49cacf77fdb6ff8a164c0a5 (patch) | |
| tree | f78d32c52dd468209db450f87e0a4eb2abde756f /src | |
| parent | d7ab9423ad4420e9c23b733e12ddc9bc581b69f2 (diff) | |
another d_a_alink pass (#305)
* big pass on many d_a_alink files
* remove asm
* fix d_a_tag_spring
* fix
---------
Co-authored-by: root <root@DESKTOP-BTVP2BC>
Diffstat (limited to 'src')
| -rw-r--r-- | src/d/a/d_a_alink.cpp | 1405 | ||||
| -rw-r--r-- | src/d/a/d_a_alink_bottle.inc | 5 | ||||
| -rw-r--r-- | src/d/a/d_a_alink_bow.inc | 22 | ||||
| -rw-r--r-- | src/d/a/d_a_alink_crawl.inc | 323 | ||||
| -rw-r--r-- | src/d/a/d_a_alink_damage.inc | 94 | ||||
| -rw-r--r-- | src/d/a/d_a_alink_demo.inc | 1263 | ||||
| -rw-r--r-- | src/d/a/d_a_alink_hvyboots.inc | 21 | ||||
| -rw-r--r-- | src/d/a/d_a_alink_link.inc | 20 | ||||
| -rw-r--r-- | src/d/d_camera.cpp | 2 |
9 files changed, 2010 insertions, 1145 deletions
diff --git a/src/d/a/d_a_alink.cpp b/src/d/a/d_a_alink.cpp index 57231ab88c..88a6e69d0e 100644 --- a/src/d/a/d_a_alink.cpp +++ b/src/d/a/d_a_alink.cpp @@ -1,7 +1,7 @@ -// -// Generated By: dol2asm -// Translation Unit: d/a/d_a_alink -// +/** + * d_a_alink.cpp + * Player (Link) Actor + */ #include "d/a/d_a_alink.h" #include "JSystem/J2DGraph/J2DAnmLoader.h" @@ -9,25 +9,19 @@ #include "JSystem/JMath/JMath.h" #include "JSystem/JStudio/JStudio/stb.h" #include "SSystem/SComponent/c_math.h" -#include "Z2AudioLib/Z2AudioMgr.h" #include "d/a/d_a_horse_static.h" #include "d/com/d_com_inf_game.h" #include "d/d_bomb.h" +#include "d/d_demo.h" #include "d/d_item.h" #include "d/d_path.h" #include "d/d_procname.h" -#include "d/d_demo.h" #include "d/msg/d_msg_object.h" #include "dol2asm.h" -#include "dolphin/types.h" -#include "f_op/f_op_actor_mng.h" -#include "m_Do/m_Do_audio.h" -#include "m_Do/m_Do_ext.h" -#include "m_Do/m_Do_mtx.h" #include "rel/d/a/d_a_crod/d_a_crod.h" #include "rel/d/a/d_a_horse/d_a_horse.h" -#include "rel/d/a/d_a_scene_exit/d_a_scene_exit.h" #include "rel/d/a/d_a_mg_rod/d_a_mg_rod.h" +#include "rel/d/a/d_a_scene_exit/d_a_scene_exit.h" #include "rel/d/a/d_a_spinner/d_a_spinner.h" #include "rel/d/a/obj/d_a_obj_carry/d_a_obj_carry.h" #include "rel/d/a/tag/d_a_tag_magne/d_a_tag_magne.h" @@ -76,10 +70,6 @@ struct dPaPoF_c { static u8 m_emitterFourData[60 + 28 /* padding */]; }; -struct dInsect_c { - /* 80110648 */ void Insect_Release(); -}; - struct JASKernel { /* 80290B08 */ void getAramHeap(); }; @@ -3124,27 +3114,17 @@ char* daAlink_c::getAlinkArcName() { /* 8009D88C-8009D8B8 0981CC 002C+00 1/1 0/0 0/0 .text * daAlink_tgHitCallback__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daAlink_tgHitCallback(fopAc_ac_c* param_0, dCcD_GObjInf* param_1, - fopAc_ac_c* param_2, dCcD_GObjInf* param_3) { - nofralloc -#include "asm/d/a/d_a_alink/daAlink_tgHitCallback__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf.s" +static void daAlink_tgHitCallback(fopAc_ac_c* param_0, dCcD_GObjInf* param_1, fopAc_ac_c* param_2, + dCcD_GObjInf* param_3) { + static_cast<daAlink_c*>(param_0)->tgHitCallback(param_2, param_1, param_3); } -#pragma pop /* 8009D8B8-8009D8E4 0981F8 002C+00 1/1 0/0 0/0 .text * daAlink_coHitCallback__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daAlink_coHitCallback(fopAc_ac_c* param_0, dCcD_GObjInf* param_1, - fopAc_ac_c* param_2, dCcD_GObjInf* param_3) { - nofralloc -#include "asm/d/a/d_a_alink/daAlink_coHitCallback__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf.s" +static void daAlink_coHitCallback(fopAc_ac_c* param_0, dCcD_GObjInf* param_1, fopAc_ac_c* param_2, + dCcD_GObjInf* param_3) { + static_cast<daAlink_c*>(param_0)->coHitCallback(param_2, param_1); } -#pragma pop /* ############################################################################################## */ /* 80450FC0-80450FC4 0004C0 0004+00 1/1 0/0 0/0 .sbss it$36766 */ @@ -3162,7 +3142,10 @@ static u8 struct_80450FC4[4]; static bool m_eye_move_flg; /* 80450FC9 0003+00 data_80450FC9 None */ -static u8 m_morf_frame; +#pragma push +#pragma force_active on +u8 daAlink_matAnm_c::m_morf_frame; +#pragma pop /* 80452C98-80452C9C 001298 0004+00 102/102 0/0 0/0 .sdata2 @5943 */ SECTION_SDATA2 static f32 lit_5943 = 0.5f; @@ -3200,8 +3183,12 @@ SECTION_SDATA2 static u8 lit_6108[4] = { }; // temporary for literal matching -bool daAlink_c::checkInputOnR() const { return field_0x33ac > /* 0.05f */ lit_6021; } -bool daAlink_c::checkWindSpeedOnXZ() const { return field_0x35b8.abs2XZ() > lit_6040 /* 1.0f */; } +bool daAlink_c::checkInputOnR() const { + return field_0x33ac > /* 0.05f */ lit_6021; +} +bool daAlink_c::checkWindSpeedOnXZ() const { + return field_0x35b8.abs2XZ() > lit_6040 /* 1.0f */; +} /* 8009D8E4-8009D90C 098224 0028+00 2/2 0/0 0/0 .text init__16daAlink_matAnm_cFv */ void daAlink_matAnm_c::init() { @@ -3356,44 +3343,32 @@ void daAlink_c::resetRootMtx() { } /* 8009EB58-8009EC28 099498 00D0+00 1/1 0/0 0/0 .text modelCallBack__9daAlink_cFi */ -#ifdef NONMATCHING -bool daAlink_c::modelCallBack(int param_0) { - jointControll(param_0); - if (param_0 == 0) { +bool daAlink_c::modelCallBack(int i_jointNo) { + jointControll(i_jointNo); + + if (i_jointNo == 0) { setUpperFront(); - } else if (param_0 == 0x1A) { - bool check = false; - if (mSpecialMode == 0 || mSpecialMode < 0x26) { - check = true; - } - if (!check) { + } else if (i_jointNo == 26) { + if (!i_getSumouMode()) { setFootMatrix(); } setArmMatrix(); } - if (field_0x2fb6 != 0 && - (param_0 == 0 || param_0 == 10 || param_0 - 4 < 1 || param_0 == 13 || param_0 == 15)) { - changeBlendRate(param_0); + + if (field_0x2fb6 != 0 && (i_jointNo == 0 || i_jointNo == 5 || i_jointNo == 10 || + i_jointNo == 4 || i_jointNo == 13 || i_jointNo == 15)) + { + changeBlendRate(i_jointNo); } return true; } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm bool daAlink_c::modelCallBack(int param_0) { - nofralloc -#include "asm/d/a/d_a_alink/modelCallBack__9daAlink_cFi.s" -} -#pragma pop -#endif /* 8009EC28-8009ECA0 099568 0078+00 1/1 0/0 0/0 .text daAlink_modelCallBack__FP8J3DJointi */ static int daAlink_modelCallBack(J3DJoint* p_joint, int param_1) { int jntNo = p_joint->getJntNo(); daAlink_c* alink = (daAlink_c*)j3dSys.getModel()->getUserArea(); - + if (param_1 == 0) { alink->modelCallBack(jntNo); } else if (param_1 == 1 && alink->checkResetRootMtx(jntNo)) { @@ -3426,11 +3401,7 @@ SECTION_SDATA2 static f32 lit_6399 = 202500.0f; SECTION_SDATA2 static f32 lit_6400 = 350.0f; /* 80452CE0-80452CE8 0012E0 0004+04 59/59 0/0 0/0 .sdata2 @6845 */ -SECTION_SDATA2 static f32 lit_6845[1 + 1 /* padding */] = { - 30.0f, - /* padding */ - 0.0f, -}; +SECTION_SDATA2 static f32 lit_6845 = 30.0f; /* 80452CE8-80452CF0 0012E8 0008+00 84/84 0/0 0/0 .sdata2 @6846 */ SECTION_SDATA2 static f64 lit_6846 = 0.5; @@ -3814,34 +3785,41 @@ asm void daAlink_c::headModelCallBack(int param_0) { #pragma pop /* 8009EF38-8009EF7C 099878 0044+00 1/1 0/0 0/0 .text daAlink_headModelCallBack__FP8J3DJointi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daAlink_headModelCallBack(J3DJoint* param_0, int param_1) { - nofralloc -#include "asm/d/a/d_a_alink/daAlink_headModelCallBack__FP8J3DJointi.s" +static int daAlink_headModelCallBack(J3DJoint* i_joint, int param_1) { + int joint_no = i_joint->getJntNo(); + daAlink_c* this_ = (daAlink_c*)j3dSys.getModel()->getUserArea(); + + if (param_1 == 0) { + this_->headModelCallBack(joint_no); + } + + return 1; } -#pragma pop /* 8009EF7C-8009EFF0 0998BC 0074+00 1/1 0/0 0/0 .text wolfModelCallBack__9daAlink_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::wolfModelCallBack(int param_0) { - nofralloc -#include "asm/d/a/d_a_alink/wolfModelCallBack__9daAlink_cFi.s" +int daAlink_c::wolfModelCallBack(int i_jointNo) { + jointControll(i_jointNo); + + if (i_jointNo == 36) { + setWolfFootMatrix(); + } else if (i_jointNo == 7 || i_jointNo == 2 || i_jointNo == 3) { + changeWolfBlendRate(i_jointNo); + } + + return 1; } -#pragma pop /* 8009EFF0-8009F034 099930 0044+00 1/1 0/0 0/0 .text daAlink_wolfModelCallBack__FP8J3DJointi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daAlink_wolfModelCallBack(J3DJoint* param_0, int param_1) { - nofralloc -#include "asm/d/a/d_a_alink/daAlink_wolfModelCallBack__FP8J3DJointi.s" +static int daAlink_wolfModelCallBack(J3DJoint* i_joint, int param_1) { + int joint_no = i_joint->getJntNo(); + daAlink_c* this_ = (daAlink_c*)j3dSys.getModel()->getUserArea(); + + if (param_1 == 0) { + this_->wolfModelCallBack(joint_no); + } + + return 1; } -#pragma pop /* ############################################################################################## */ /* 80452EE0-80452EE4 0014E0 0004+00 6/6 0/0 0/0 .sdata2 @19379 */ @@ -3911,14 +3889,9 @@ SECTION_SDATA2 static f32 lit_21736 = 45.0f; SECTION_SDATA2 static f32 lit_22146 = 0.18479956686496735f; /* 80452F38-80452F3C -00001 0004+00 1/1 0/0 0/0 .sdata2 None */ -SECTION_SDATA2 static u8 struct_80452F38[4] = { - /* 80452F38 0001+00 data_80452F38 None */ - 0x01, - /* 80452F39 0003+00 data_80452F39 None */ - 0x04, - 0x00, - 0x00, -}; +SECTION_SDATA2 static u8 data_80452F38 = 1; + +SECTION_SDATA2 static u8 data_80452F39 = 4; /* 80452F3C-80452F40 00153C 0004+00 1/1 0/0 0/0 .sdata2 @22608 */ SECTION_SDATA2 static f32 lit_22608 = 9025.0f; @@ -4601,9 +4574,9 @@ bool daAlink_c::checkAttentionPosAngle(cXyz* param_0) { int tmp; if (i_checkModeFlg(MODE_RIDING) || i_checkEndResetFlg0(ERFLG0_UNK_400)) { - tmp = daAlinkHIO_horse_c0::m.mSearchRangeAngle; + tmp = daAlinkHIO_horse_c0::m.mSearchRangeAngle; } else { - tmp = 0x6000; + tmp = 0x6000; } s16 targetY = cLib_targetAngleY(&field_0x34e0, param_0); @@ -4700,7 +4673,8 @@ bool daAlink_c::commonLineCheck(cXyz* i_startPos, cXyz* i_endPos) { * getMoveBGActorName__9daAlink_cFR13cBgS_PolyInfoi */ s16 daAlink_c::getMoveBGActorName(cBgS_PolyInfo& param_0, int param_1) { if ((param_1 != 0 || dComIfG_Bgsp().ChkPolySafe(param_0)) && - dComIfG_Bgsp().ChkMoveBG_NoDABg(param_0) && dComIfG_Bgsp().GetActorPointer(param_0)) { + dComIfG_Bgsp().ChkMoveBG_NoDABg(param_0) && dComIfG_Bgsp().GetActorPointer(param_0)) + { return fopAcM_GetName(dComIfG_Bgsp().GetActorPointer(param_0)); } @@ -4760,9 +4734,7 @@ COMPILER_STRIP_GATE(0x8038FA48, &l_crawlStartFrontOffset); #pragma pop /* 8038FA54-8038FA60 01C0B4 000C+00 1/2 0/0 0/0 .rodata l_crawlFrontOffset */ -SECTION_RODATA static u8 const l_crawlFrontOffset[12] = { - 0x00, 0x00, 0x00, 0x00, 0x41, 0xF0, 0x00, 0x00, 0x42, 0xA0, 0x00, 0x00, -}; +SECTION_RODATA static Vec const l_crawlFrontOffset = {0.0f, 30.0f, 80.0f}; COMPILER_STRIP_GATE(0x8038FA54, &l_crawlFrontOffset); /* 8038FA60-8038FA6C 01C0C0 000C+00 0/1 0/0 0/0 .rodata l_crawlBackOffset */ @@ -4775,9 +4747,7 @@ COMPILER_STRIP_GATE(0x8038FA60, &l_crawlBackOffset); #pragma pop /* 8038FA6C-8038FA78 01C0CC 000C+00 1/1 0/0 0/0 .rodata l_crawlTopOffset */ -SECTION_RODATA static u8 const l_crawlTopOffset[12] = { - 0x00, 0x00, 0x00, 0x00, 0x41, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; +SECTION_RODATA static Vec const l_crawlTopOffset = {0.0f, 30.0f, 0.0f}; COMPILER_STRIP_GATE(0x8038FA6C, &l_crawlTopOffset); /* 8038FA78-8038FA84 01C0D8 000C+00 1/2 0/0 0/0 .rodata l_crawlFrontUpOffset */ @@ -4829,9 +4799,7 @@ COMPILER_STRIP_GATE(0x8038FAB4, &l_wolfLieStandUpOffset); #pragma pop /* 8038FAC0-8038FACC 01C120 000C+00 1/2 0/0 0/0 .rodata l_crawlTopUpOffset */ -SECTION_RODATA static u8 const l_crawlTopUpOffset[12] = { - 0x00, 0x00, 0x00, 0x00, 0x42, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; +SECTION_RODATA static Vec const l_crawlTopUpOffset = {0.0f, 80.0f, 0.0f}; COMPILER_STRIP_GATE(0x8038FAC0, &l_crawlTopUpOffset); /* 8038FACC-8038FAD8 01C12C 000C+00 0/1 0/0 0/0 .rodata l_wolfLieTopUpOffset */ @@ -4864,36 +4832,28 @@ COMPILER_STRIP_GATE(0x8038FAE4, &l_wolfLieSideOffset); /* 8038FAF0-8038FAFC 01C150 000C+00 0/1 0/0 0/0 .rodata l_crawlLSideOffset */ #pragma push #pragma force_active on -SECTION_RODATA static u8 const l_crawlLSideOffset[12] = { - 0x42, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; +SECTION_RODATA static Vec const l_crawlLSideOffset = {55.0f, 0.0f, 0.0f}; COMPILER_STRIP_GATE(0x8038FAF0, &l_crawlLSideOffset); #pragma pop /* 8038FAFC-8038FB08 01C15C 000C+00 0/1 0/0 0/0 .rodata l_crawlRSideOffset */ #pragma push #pragma force_active on -SECTION_RODATA static u8 const l_crawlRSideOffset[12] = { - 0xC2, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; +SECTION_RODATA static Vec const l_crawlRSideOffset = {-55.0f, 0.0f, 0.0f}; COMPILER_STRIP_GATE(0x8038FAFC, &l_crawlRSideOffset); #pragma pop /* 8038FB08-8038FB14 01C168 000C+00 0/1 0/0 0/0 .rodata l_crawlLSideFrontOffset */ #pragma push #pragma force_active on -SECTION_RODATA static u8 const l_crawlLSideFrontOffset[12] = { - 0x42, 0x5C, 0x00, 0x00, 0x40, 0xA0, 0x00, 0x00, 0x42, 0xA0, 0x00, 0x00, -}; +SECTION_RODATA static Vec const l_crawlLSideFrontOffset = {55.0f, 5.0f, 80.0f}; COMPILER_STRIP_GATE(0x8038FB08, &l_crawlLSideFrontOffset); #pragma pop /* 8038FB14-8038FB20 01C174 000C+00 0/1 0/0 0/0 .rodata l_crawlRSideFrontOffset */ #pragma push #pragma force_active on -SECTION_RODATA static u8 const l_crawlRSideFrontOffset[12] = { - 0xC2, 0x5C, 0x00, 0x00, 0x40, 0xA0, 0x00, 0x00, 0x42, 0xA0, 0x00, 0x00, -}; +SECTION_RODATA static Vec const l_crawlRSideFrontOffset = {-55.0f, 5.0f, 80.0f}; COMPILER_STRIP_GATE(0x8038FB14, &l_crawlRSideFrontOffset); #pragma pop @@ -4932,7 +4892,9 @@ COMPILER_STRIP_GATE(0x8038FB44, &l_ironBallChainVec); /* 8038FB50-8038FB5C 01C1B0 000C+00 1/2 0/0 0/0 .rodata l_ironBallCenterVec */ SECTION_RODATA static Vec const l_ironBallCenterVec = { - 0.0f, 0.0f, 42.0f, + 0.0f, + 0.0f, + 42.0f, }; COMPILER_STRIP_GATE(0x8038FB50, &l_ironBallCenterVec); @@ -4949,10 +4911,8 @@ COMPILER_STRIP_GATE(0x8038FB5C, &l_wolfFootOnFrame); /* 8038FBBC-8038FBD4 01C21C 0018+00 1/1 0/0 0/0 .rodata l_insectNameList */ SECTION_RODATA static s16 const l_insectNameList[12] = { - PROC_Obj_Kabuto, PROC_Obj_Cho, PROC_Obj_Kuw, - PROC_Obj_Batta, PROC_Obj_Nan, PROC_Obj_Dan, - PROC_Obj_Kam, PROC_Obj_Ten, PROC_Obj_Kat, - PROC_Obj_Tombo, PROC_Obj_Ari, PROC_Obj_Kag, + PROC_Obj_Kabuto, PROC_Obj_Cho, PROC_Obj_Kuw, PROC_Obj_Batta, PROC_Obj_Nan, PROC_Obj_Dan, + PROC_Obj_Kam, PROC_Obj_Ten, PROC_Obj_Kat, PROC_Obj_Tombo, PROC_Obj_Ari, PROC_Obj_Kag, }; COMPILER_STRIP_GATE(0x8038FBBC, &l_insectNameList); @@ -4960,11 +4920,10 @@ COMPILER_STRIP_GATE(0x8038FBBC, &l_insectNameList); #pragma push #pragma force_active on SECTION_RODATA daAlink_BckData const daAlink_c::m_mainBckShield[20] = { - {0x0025, 0x0025}, {0x0023, 0x0023}, {0x0012, 0x001B}, {0x0010, 0x001B}, - {0x0021, 0x0021}, {0x001E, 0x001E}, {0x003C, 0x003C}, {0x002C, 0x002C}, - {0x003E, 0x003E}, {0x002E, 0x002E}, {0x0030, 0x0030}, {0x0028, 0x0028}, - {0x0032, 0x0032}, {0x002A, 0x002A}, {0x0274, 0x001B}, {0x0020, 0x001B}, - {0x001B, 0x001B}, {0x0026, 0x0026}, {0x0277, 0x001B}, {0x00CD, 0x001B}, + {0x0025, 0x0025}, {0x0023, 0x0023}, {0x0012, 0x001B}, {0x0010, 0x001B}, {0x0021, 0x0021}, + {0x001E, 0x001E}, {0x003C, 0x003C}, {0x002C, 0x002C}, {0x003E, 0x003E}, {0x002E, 0x002E}, + {0x0030, 0x0030}, {0x0028, 0x0028}, {0x0032, 0x0032}, {0x002A, 0x002A}, {0x0274, 0x001B}, + {0x0020, 0x001B}, {0x001B, 0x001B}, {0x0026, 0x0026}, {0x0277, 0x001B}, {0x00CD, 0x001B}, }; COMPILER_STRIP_GATE(0x8038FBD4, &daAlink_c::m_mainBckShield); #pragma pop @@ -4973,8 +4932,7 @@ COMPILER_STRIP_GATE(0x8038FBD4, &daAlink_c::m_mainBckShield); #pragma push #pragma force_active on SECTION_RODATA daAlink_BckData const daAlink_c::m_mainBckSword[5] = { - {0x001A, 0x001A}, {0x001C, 0x001C}, - {0x0277, 0x0277}, {0x00CD, 0x00CD}, {0x0243, 0x0244}, + {0x001A, 0x001A}, {0x001C, 0x001C}, {0x0277, 0x0277}, {0x00CD, 0x00CD}, {0x0243, 0x0244}, }; COMPILER_STRIP_GATE(0x8038FC24, &daAlink_c::m_mainBckSword); #pragma pop @@ -4983,13 +4941,12 @@ COMPILER_STRIP_GATE(0x8038FC24, &daAlink_c::m_mainBckSword); #pragma push #pragma force_active on SECTION_RODATA daAlink_BckData const daAlink_c::m_mainBckFishing[28] = { - {0x0025, 0x0273}, {0x0023, 0x00C8}, {0x0012, 0x0273}, {0x0010, 0x00C8}, - {0x0021, 0x0273}, {0x001E, 0x00C8}, {0x003C, 0x0273}, {0x002C, 0x0273}, - {0x003E, 0x0273}, {0x002E, 0x0273}, {0x0030, 0x00C8}, {0x0028, 0x00C8}, - {0x0032, 0x00C8}, {0x002A, 0x00C8}, {0x0274, 0x0273}, {0x0020, 0x0273}, - {0x001A, 0x0273}, {0x001C, 0x0273}, {0x0277, 0x0273}, {0x00CD, 0x00C8}, - {0x0243, 0x0244}, {0x0233, 0x0273}, {0x0234, 0x0273}, {0x0233, 0x0273}, - {0x0234, 0x0273}, {0x026A, 0x0273}, {0x0256, 0x0273}, {0x0257, 0x0273}, + {0x0025, 0x0273}, {0x0023, 0x00C8}, {0x0012, 0x0273}, {0x0010, 0x00C8}, {0x0021, 0x0273}, + {0x001E, 0x00C8}, {0x003C, 0x0273}, {0x002C, 0x0273}, {0x003E, 0x0273}, {0x002E, 0x0273}, + {0x0030, 0x00C8}, {0x0028, 0x00C8}, {0x0032, 0x00C8}, {0x002A, 0x00C8}, {0x0274, 0x0273}, + {0x0020, 0x0273}, {0x001A, 0x0273}, {0x001C, 0x0273}, {0x0277, 0x0273}, {0x00CD, 0x00C8}, + {0x0243, 0x0244}, {0x0233, 0x0273}, {0x0234, 0x0273}, {0x0233, 0x0273}, {0x0234, 0x0273}, + {0x026A, 0x0273}, {0x0256, 0x0273}, {0x0257, 0x0273}, }; COMPILER_STRIP_GATE(0x8038FC38, &daAlink_c::m_mainBckFishing); #pragma pop @@ -5491,48 +5448,35 @@ daAlink_WlAnmData const daAlink_c::m_wlAnmDataTable[147] = { }; /* 803914A8-80391734 01DB08 028C+00 2/2 0/0 0/0 .rodata m_faceTexDataTable__9daAlink_c */ -SECTION_RODATA u8 const daAlink_c::m_faceTexDataTable[652] = { - 0x03, 0xDF, 0x03, 0x79, 0x03, 0xE0, 0x03, 0x7A, 0x03, 0xE1, 0x03, 0x7B, 0x03, 0xDF, 0x03, 0x78, - 0x03, 0xDF, 0x03, 0x83, 0x03, 0xE2, 0x03, 0x2C, 0x03, 0xC6, 0x03, 0x6A, 0x03, 0xD5, 0x03, 0x6B, - 0x03, 0xB0, 0x03, 0x2D, 0x03, 0xB1, 0x03, 0x2E, 0x03, 0xE6, 0x03, 0x82, 0x03, 0xE5, 0x03, 0x81, - 0x03, 0xF2, 0x03, 0x98, 0x03, 0xC3, 0x03, 0x53, 0x03, 0xAF, 0x03, 0x98, 0x03, 0xF0, 0x03, 0x96, - 0x03, 0xF4, 0x03, 0x2C, 0x03, 0xF3, 0x03, 0x2C, 0x03, 0xC5, 0x03, 0x5C, 0x03, 0xAF, 0x03, 0x42, - 0x03, 0xAF, 0x03, 0x43, 0x03, 0xEE, 0x03, 0x8E, 0x03, 0xEF, 0x03, 0x8F, 0x03, 0xED, 0x03, 0x8D, - 0x03, 0xD8, 0x03, 0x6E, 0x03, 0xD9, 0x03, 0x6F, 0x03, 0xDB, 0x03, 0x73, 0x03, 0xD7, 0x03, 0x6D, - 0x03, 0xE9, 0x03, 0x88, 0x03, 0xE4, 0x03, 0x7D, 0x03, 0xD1, 0x03, 0x67, 0x03, 0xD2, 0x03, 0x68, - 0x03, 0xAF, 0x03, 0x4A, 0x03, 0xAF, 0x03, 0x4B, 0x03, 0xAF, 0x03, 0x4C, 0x03, 0xAF, 0x03, 0x4D, - 0x03, 0xAF, 0x03, 0x4E, 0x03, 0xAF, 0x03, 0x91, 0x03, 0xE7, 0x03, 0x86, 0x03, 0xB4, 0x03, 0x2C, - 0x03, 0xBC, 0x03, 0x2C, 0x03, 0xAF, 0x03, 0x90, 0x03, 0xC9, 0x03, 0x5E, 0x03, 0xC7, 0x03, 0x5D, - 0x03, 0xCA, 0x03, 0x5F, 0x03, 0xAF, 0x03, 0x95, 0x03, 0xAF, 0x03, 0x41, 0x03, 0xAF, 0x03, 0x51, - 0x03, 0xAF, 0x03, 0x52, 0x03, 0xAF, 0x03, 0x49, 0x03, 0xAF, 0x03, 0x44, 0x03, 0xAF, 0x03, 0x45, - 0x03, 0xAF, 0x03, 0x46, 0x03, 0xBD, 0x03, 0x2C, 0x03, 0xBE, 0x03, 0x2C, 0x03, 0xEA, 0x03, 0x89, - 0x03, 0xAF, 0x03, 0x8A, 0x03, 0xCB, 0x03, 0x2C, 0x03, 0xAF, 0x03, 0x55, 0x03, 0xAF, 0x03, 0x54, - 0x03, 0xAF, 0x03, 0x50, 0x03, 0xAF, 0x03, 0x4F, 0x03, 0xB8, 0x03, 0x34, 0x03, 0xB6, 0x03, 0x32, - 0x03, 0xB7, 0x03, 0x33, 0x03, 0xB5, 0x03, 0x31, 0x03, 0xAF, 0x03, 0x36, 0x03, 0xAF, 0x03, 0x37, - 0x03, 0xB9, 0x03, 0x2C, 0x03, 0xAF, 0x03, 0x38, 0x03, 0xAF, 0x03, 0x39, 0x03, 0xAF, 0x03, 0x35, - 0x03, 0xDC, 0x03, 0x35, 0x03, 0xDE, 0x03, 0x35, 0x03, 0xDA, 0x03, 0x70, 0x03, 0xAF, 0x03, 0x3E, - 0x03, 0xD3, 0x03, 0x2C, 0x03, 0xBB, 0x03, 0x3C, 0x03, 0xAF, 0x03, 0x3B, 0x03, 0xBA, 0x03, 0x3A, - 0x03, 0xCE, 0x03, 0x64, 0x03, 0xCF, 0x03, 0x65, 0x03, 0xEB, 0x03, 0x8B, 0x03, 0xEC, 0x03, 0x8C, - 0x03, 0xD4, 0x03, 0x69, 0x03, 0xC0, 0x03, 0x2C, 0x03, 0xC1, 0x03, 0x3F, 0x03, 0xC1, 0x03, 0x40, - 0x03, 0xD0, 0x03, 0x66, 0x03, 0xC2, 0x03, 0x2C, 0x03, 0xAF, 0x03, 0x5A, 0x03, 0xC4, 0x03, 0x5B, - 0x03, 0xBF, 0x03, 0x2C, 0x03, 0xC8, 0x03, 0x2C, 0x10, 0x45, 0x10, 0x3B, 0x10, 0x46, 0x03, 0x2C, - 0x10, 0x41, 0x10, 0x37, 0x10, 0x42, 0x10, 0x38, 0x10, 0x43, 0x10, 0x39, 0x10, 0x47, 0x10, 0x3C, - 0x10, 0x40, 0x10, 0x36, 0x10, 0x44, 0x10, 0x3A, 0x10, 0x3F, 0x03, 0x2C, 0x03, 0xAF, 0x20, 0x32, - 0x03, 0xAF, 0x20, 0x33, 0x20, 0x39, 0x20, 0x34, 0x03, 0xAF, 0x50, 0x54, 0x03, 0xAF, 0x50, 0x55, - 0x50, 0x59, 0x50, 0x56, 0x03, 0xE8, 0x03, 0x87, 0x03, 0xAF, 0x03, 0x72, 0x03, 0xAF, 0x03, 0x84, - 0x03, 0xAF, 0x03, 0x85, 0x03, 0xD6, 0x03, 0x6C, 0x03, 0xAF, 0x03, 0x92, 0x03, 0xAF, 0x03, 0x93, - 0x03, 0xAF, 0x03, 0x77, 0x03, 0xAF, 0x03, 0x61, 0x03, 0xAF, 0x03, 0x62, 0x03, 0xCD, 0x03, 0x63, - 0x03, 0xAF, 0x03, 0x3D, 0x03, 0xF1, 0x03, 0x97, 0x03, 0xDC, 0x03, 0x2C, 0x03, 0xDD, 0x03, 0x2C, - 0x03, 0xDE, 0x03, 0x2C, 0x03, 0xB3, 0x03, 0x30, 0x03, 0xCC, 0x03, 0x60, 0x03, 0xAF, 0x03, 0x48, - 0x03, 0xAF, 0x03, 0x47, 0x03, 0xAF, 0x03, 0x58, 0x03, 0xAF, 0x03, 0x59, 0x03, 0xAF, 0x03, 0x56, - 0x03, 0xAF, 0x03, 0x57, 0x60, 0x18, 0x60, 0x15, 0x03, 0xAF, 0x70, 0x70, 0x03, 0xAF, 0x70, 0x71, - 0x03, 0xE3, 0x03, 0x7C, 0x03, 0xB2, 0x03, 0x2F, 0x03, 0xAF, 0x03, 0x94, 0x04, 0x17, 0x03, 0xA9, - 0x04, 0x18, 0x03, 0xAA, 0x04, 0x1A, 0x03, 0xA7, 0x04, 0x1E, 0x03, 0xA7, 0x04, 0x1B, 0x03, 0xA7, - 0x04, 0x0E, 0x03, 0xA7, 0x04, 0x0C, 0x03, 0xA7, 0x04, 0x0F, 0x03, 0xA7, 0x04, 0x10, 0x03, 0xA7, - 0x04, 0x20, 0x03, 0xA7, 0x04, 0x15, 0x03, 0xA7, 0x04, 0x16, 0x03, 0xA7, 0x04, 0x0B, 0x03, 0xA7, - 0x04, 0x11, 0x03, 0xA7, 0x04, 0x1F, 0x03, 0xA7, 0x04, 0x0A, 0x03, 0xA7, 0x04, 0x09, 0x03, 0xA7, - 0x04, 0x12, 0x03, 0xA7, 0x04, 0x1C, 0x03, 0xA7, 0x04, 0x1D, 0x03, 0xA7, 0x04, 0x19, 0x03, 0xAB, - 0x04, 0x13, 0x03, 0xA8, 0x04, 0x14, 0x03, 0xA7, 0x04, 0x0D, 0x03, 0xA7, +SECTION_RODATA daAlink_FaceTexData const daAlink_c::m_faceTexDataTable[] = { + 0x03DF, 0x0379, 0x03E0, 0x037A, 0x03E1, 0x037B, 0x03DF, 0x0378, 0x03DF, 0x0383, 0x03E2, 0x032C, + 0x03C6, 0x036A, 0x03D5, 0x036B, 0x03B0, 0x032D, 0x03B1, 0x032E, 0x03E6, 0x0382, 0x03E5, 0x0381, + 0x03F2, 0x0398, 0x03C3, 0x0353, 0x03AF, 0x0398, 0x03F0, 0x0396, 0x03F4, 0x032C, 0x03F3, 0x032C, + 0x03C5, 0x035C, 0x03AF, 0x0342, 0x03AF, 0x0343, 0x03EE, 0x038E, 0x03EF, 0x038F, 0x03ED, 0x038D, + 0x03D8, 0x036E, 0x03D9, 0x036F, 0x03DB, 0x0373, 0x03D7, 0x036D, 0x03E9, 0x0388, 0x03E4, 0x037D, + 0x03D1, 0x0367, 0x03D2, 0x0368, 0x03AF, 0x034A, 0x03AF, 0x034B, 0x03AF, 0x034C, 0x03AF, 0x034D, + 0x03AF, 0x034E, 0x03AF, 0x0391, 0x03E7, 0x0386, 0x03B4, 0x032C, 0x03BC, 0x032C, 0x03AF, 0x0390, + 0x03C9, 0x035E, 0x03C7, 0x035D, 0x03CA, 0x035F, 0x03AF, 0x0395, 0x03AF, 0x0341, 0x03AF, 0x0351, + 0x03AF, 0x0352, 0x03AF, 0x0349, 0x03AF, 0x0344, 0x03AF, 0x0345, 0x03AF, 0x0346, 0x03BD, 0x032C, + 0x03BE, 0x032C, 0x03EA, 0x0389, 0x03AF, 0x038A, 0x03CB, 0x032C, 0x03AF, 0x0355, 0x03AF, 0x0354, + 0x03AF, 0x0350, 0x03AF, 0x034F, 0x03B8, 0x0334, 0x03B6, 0x0332, 0x03B7, 0x0333, 0x03B5, 0x0331, + 0x03AF, 0x0336, 0x03AF, 0x0337, 0x03B9, 0x032C, 0x03AF, 0x0338, 0x03AF, 0x0339, 0x03AF, 0x0335, + 0x03DC, 0x0335, 0x03DE, 0x0335, 0x03DA, 0x0370, 0x03AF, 0x033E, 0x03D3, 0x032C, 0x03BB, 0x033C, + 0x03AF, 0x033B, 0x03BA, 0x033A, 0x03CE, 0x0364, 0x03CF, 0x0365, 0x03EB, 0x038B, 0x03EC, 0x038C, + 0x03D4, 0x0369, 0x03C0, 0x032C, 0x03C1, 0x033F, 0x03C1, 0x0340, 0x03D0, 0x0366, 0x03C2, 0x032C, + 0x03AF, 0x035A, 0x03C4, 0x035B, 0x03BF, 0x032C, 0x03C8, 0x032C, 0x1045, 0x103B, 0x1046, 0x032C, + 0x1041, 0x1037, 0x1042, 0x1038, 0x1043, 0x1039, 0x1047, 0x103C, 0x1040, 0x1036, 0x1044, 0x103A, + 0x103F, 0x032C, 0x03AF, 0x2032, 0x03AF, 0x2033, 0x2039, 0x2034, 0x03AF, 0x5054, 0x03AF, 0x5055, + 0x5059, 0x5056, 0x03E8, 0x0387, 0x03AF, 0x0372, 0x03AF, 0x0384, 0x03AF, 0x0385, 0x03D6, 0x036C, + 0x03AF, 0x0392, 0x03AF, 0x0393, 0x03AF, 0x0377, 0x03AF, 0x0361, 0x03AF, 0x0362, 0x03CD, 0x0363, + 0x03AF, 0x033D, 0x03F1, 0x0397, 0x03DC, 0x032C, 0x03DD, 0x032C, 0x03DE, 0x032C, 0x03B3, 0x0330, + 0x03CC, 0x0360, 0x03AF, 0x0348, 0x03AF, 0x0347, 0x03AF, 0x0358, 0x03AF, 0x0359, 0x03AF, 0x0356, + 0x03AF, 0x0357, 0x6018, 0x6015, 0x03AF, 0x7070, 0x03AF, 0x7071, 0x03E3, 0x037C, 0x03B2, 0x032F, + 0x03AF, 0x0394, 0x0417, 0x03A9, 0x0418, 0x03AA, 0x041A, 0x03A7, 0x041E, 0x03A7, 0x041B, 0x03A7, + 0x040E, 0x03A7, 0x040C, 0x03A7, 0x040F, 0x03A7, 0x0410, 0x03A7, 0x0420, 0x03A7, 0x0415, 0x03A7, + 0x0416, 0x03A7, 0x040B, 0x03A7, 0x0411, 0x03A7, 0x041F, 0x03A7, 0x040A, 0x03A7, 0x0409, 0x03A7, + 0x0412, 0x03A7, 0x041C, 0x03A7, 0x041D, 0x03A7, 0x0419, 0x03AB, 0x0413, 0x03A8, 0x0414, 0x03A7, + 0x040D, 0x03A7, }; COMPILER_STRIP_GATE(0x803914A8, &daAlink_c::m_faceTexDataTable); @@ -5888,7 +5832,9 @@ COMPILER_STRIP_GATE(0x803919D8, &anmIdx); /* 803919E4-803919F0 01E044 000C+00 1/1 0/0 0/0 .rodata localPaddleTop$20605 */ SECTION_RODATA static Vec const localPaddleTop = { - 0.0f, 0.0f, -158.0f, + 0.0f, + 0.0f, + -158.0f, }; COMPILER_STRIP_GATE(0x803919E4, &localPaddleTop); @@ -6317,18 +6263,9 @@ COMPILER_STRIP_GATE(0x80391E3C, &wolfChainVec); /* 80391E48-80391E78 01E4A8 0030+00 1/1 0/0 0/0 .rodata label$45760 */ SECTION_RODATA static u32 const label[12] = { - Z2SE_WL_V_BREATH_SIT, - Z2SE_WL_V_BREATH_WAIT, - Z2SE_WL_V_BREATH_WALK, - Z2SE_WL_V_BREATH_TIRED, - Z2SE_WL_V_DASH, - Z2SE_WL_V_BREATH_JUMP, - Z2SE_WL_V_SLIP_CLIMB, - Z2SE_WL_V_PUSH_ROCK, - Z2SE_WL_V_TURN_BACK, - Z2SE_WL_V_HOLD_THROW, - Z2SE_WL_V_FAILED, - Z2SE_WL_V_NOSE, + Z2SE_WL_V_BREATH_SIT, Z2SE_WL_V_BREATH_WAIT, Z2SE_WL_V_BREATH_WALK, Z2SE_WL_V_BREATH_TIRED, + Z2SE_WL_V_DASH, Z2SE_WL_V_BREATH_JUMP, Z2SE_WL_V_SLIP_CLIMB, Z2SE_WL_V_PUSH_ROCK, + Z2SE_WL_V_TURN_BACK, Z2SE_WL_V_HOLD_THROW, Z2SE_WL_V_FAILED, Z2SE_WL_V_NOSE, }; COMPILER_STRIP_GATE(0x80391E48, &label); @@ -6433,14 +6370,20 @@ asm void daAlink_c::setFootMatrix() { #pragma pop /* 800A2C24-800A2CE0 09D564 00BC+00 3/3 0/0 0/0 .text setMatrixOffset__9daAlink_cFPff */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::setMatrixOffset(f32* param_0, f32 param_1) { - nofralloc -#include "asm/d/a/d_a_alink/setMatrixOffset__9daAlink_cFPff.s" +void daAlink_c::setMatrixOffset(f32* param_0, f32 param_1) { + if (param_0 != &mSinkShapeOffset) { + cLib_addCalc(param_0, param_1, lit_5943, lit_52234, lit_11470); + } else if (mProcID == PROC_TOOL_DEMO) { + return; + } + + mpLinkModel->getBaseTRMtx()[1][3] += *param_0; + mInvMtx[1][3] -= *param_0; + + mDoMtx_stack_c::XrotS(shape_angle.x); + mDoMtx_stack_c::concat(mInvMtx); + mDoMtx_copy(mDoMtx_stack_c::get(), field_0x2be8); } -#pragma pop /* 800A2CE0-800A3430 09D620 0750+00 3/3 0/0 0/0 .text * setLegAngle__9daAlink_cFfP18daAlink_footData_cPsPsi */ @@ -6566,7 +6509,7 @@ void* daAlink_c::getAnimeResource(daPy_anmHeap_c* p_anmHeap, u16 i_anmID, u32 bu if (arcNo == 0xFFFF) { return p_anmHeap->loadDataIdx(resID); } - + return p_anmHeap->loadDataDemoRID(resID, arcNo); } @@ -6614,15 +6557,16 @@ J3DModel* daAlink_c::initModelEnv(u16 param_0, u32 param_1) { int daAlink_c::initDemoModel(J3DModel** p_model, char const* resName, u32 param_2) { *p_model = NULL; - J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(dStage_roomControl_c::getDemoArcName(), resName); + J3DModelData* modelData = + (J3DModelData*)dComIfG_getObjectRes(dStage_roomControl_c::getDemoArcName(), resName); if (modelData != NULL) { *p_model = initModel(modelData, param_2); - + if (*p_model == NULL) { return 0; } } - + return 1; } @@ -6631,11 +6575,12 @@ int daAlink_c::initDemoModel(J3DModel** p_model, char const* resName, u32 param_ // matches with literals #ifdef NONMATCHING int daAlink_c::initDemoBck(mDoExt_bckAnm** p_bck, char const* resName) { - J3DAnmTransform* res = (J3DAnmTransform*)dComIfG_getObjectRes(dStage_roomControl_c::getDemoArcName(), resName); + J3DAnmTransform* res = + (J3DAnmTransform*)dComIfG_getObjectRes(dStage_roomControl_c::getDemoArcName(), resName); if (res != NULL) { *p_bck = new mDoExt_bckAnm(); - + if (*p_bck == NULL) { return 0; } @@ -6644,7 +6589,7 @@ int daAlink_c::initDemoBck(mDoExt_bckAnm** p_bck, char const* resName) { return 0; } } - + return 1; } #else @@ -11312,48 +11257,63 @@ SECTION_DATA u8 daAlink_c::m_demoInitTable[1140] = { }; /* 803B2754-803B2798 00F874 0044+00 0/1 0/0 0/0 .data l_cylSrc */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 l_cylSrc[68] = { - 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1A, 0xD8, 0xFF, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x73, - 0x04, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x42, 0x0C, 0x00, 0x00, 0x43, 0x34, 0x00, 0x00, +static dCcD_SrcCyl l_cylSrc = { + { + {0, {{AT_TYPE_WOLF_ATTACK, 3, 0x1A}, {0xD8FFFDFF, 5}, 0x73}}, + {dCcD_SE_WOLF_BITE, 3, 1, 0, {1}}, + {dCcD_SE_NONE, 6, 0, 0, {0}}, + {0}, + }, + { + {0.0f, 0.0f, 0.0f}, + 35.0f, + 180.0f, + }, }; -#pragma pop /* 803B2798-803B27D8 00F8B8 0040+00 1/2 0/0 0/0 .data l_sphSrc */ -SECTION_DATA static u8 l_sphSrc[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, - 0xD8, 0xFB, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x73, 0x01, 0x03, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00, +static dCcD_SrcSph l_sphSrc = { + { + {0, {{AT_TYPE_NORMAL_SWORD, 3, 0x1A}, {0xD8FBFDFF, 5}, 0x73}}, + {dCcD_SE_SWORD, 3, 1, 0, {1}}, + {dCcD_SE_NONE, 6, 0, 0, {0}}, + {0}, + }, + { + {0.0f, 0.0f, 0.0f}, + 40.0f, + }, }; /* 803B27D8-803B281C 00F8F8 0044+00 0/1 0/0 0/0 .data l_atCylSrc */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 l_atCylSrc[68] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x43, 0x34, 0x00, 0x00, 0x43, 0x02, 0x00, 0x00, +static dCcD_SrcCyl l_atCylSrc = { + { + {0, {{AT_TYPE_NORMAL_SWORD, 2, 0x1B}, {0, 0}, 0}}, + {dCcD_SE_SWORD, 3, 1, 0, {1}}, + {dCcD_SE_NONE, 0, 0, 0, {0}}, + {0}, + }, + { + {0.0f, 0.0f, 0.0f}, + 180.0f, + 130.0f, + }, }; -#pragma pop /* 803B281C-803B2868 00F93C 004C+00 0/1 0/0 0/0 .data l_atCpsSrc */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 l_atCpsSrc[76] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xA0, 0x00, 0x00, +static dCcD_SrcCps l_atCpsSrc = { + { + {0, {{AT_TYPE_NORMAL_SWORD, 1, 0x1B}, {0, 0}, 0}}, + {dCcD_SE_SWORD, 1, 0, 0, {1}}, + {dCcD_SE_NONE, 0, 0, 0, {0}}, + {0}, + }, + { + {0.0f, 0.0f, 0.0f}, + {0.0f, 0.0f, 0.0f}, + 20.0f, + }, }; -#pragma pop /* 803B2868-803B2880 00F988 0018+00 1/0 0/0 0/0 .data l_jntColPos0 */ SECTION_DATA static u8 l_jntColPos0[24] = { @@ -11694,43 +11654,47 @@ SECTION_DATA static char* headBrkName[3] = { "ml_head_power_up_b.brk", }; +// move these later +static int daAlink_Create(fopAc_ac_c* i_this); +static int daAlink_Delete(daAlink_c* i_this); +static int daAlink_Execute(daAlink_c* i_this); +static int daAlink_Draw(daAlink_c* i_this); + /* 803B2DAC-803B2DCC -00001 0020+00 1/0 0/0 0/0 .data l_daAlink_Method */ -SECTION_DATA static void* l_daAlink_Method[8] = { - (void*)daAlink_Create__FP10fopAc_ac_c, - (void*)daAlink_Delete__FP9daAlink_c, - (void*)daAlink_Execute__FP9daAlink_c, - (void*)NULL, - (void*)daAlink_Draw__FP9daAlink_c, - (void*)NULL, - (void*)NULL, - (void*)NULL, +static actor_method_class l_daAlink_Method = { + (process_method_func)daAlink_Create, (process_method_func)daAlink_Delete, + (process_method_func)daAlink_Execute, (process_method_func)NULL, + (process_method_func)daAlink_Draw, }; /* 803B2DCC-803B2E20 -00001 0030+24 0/0 0/0 1/0 .data g_profile_ALINK */ -SECTION_DATA extern void* g_profile_ALINK[12 + 9 /* padding */] = { - (void*)0xFFFFFFFD, - (void*)0x0005FFFD, - (void*)0x00FD0000, - (void*)&g_fpcLf_Method, - (void*)0x0000385C, - (void*)NULL, - (void*)NULL, - (void*)&g_fopAc_Method, - (void*)0x005B0000, - (void*)&l_daAlink_Method, - (void*)0x00060400, - (void*)0x01000000, - /* padding */ - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, -}; +extern actor_process_profile_definition g_profile_ALINK = { + -3, + 5, + -3, + PROC_ALINK, + 0, + &g_fpcLf_Method.mBase, + sizeof(daAlink_c), + 0, + 0, + &g_fopAc_Method.base, + 0x5B, + 0, + 0, + &l_daAlink_Method, + 0x00060400, + 1, + 0, + 0, + 0, +}; + +// tons of extra padding? not sure what this is +#pragma push +#pragma force_active on +SECTION_DATA static u8 data_803B2DFC[0x24] = {0}; +#pragma pop /* 803B2E20-803B2E80 00FF40 000C+54 2/2 0/0 0/0 .data __vt__16daPy_frameCtrl_c */ SECTION_DATA extern void* __vt__16daPy_frameCtrl_c[3 + 21 /* padding */] = { @@ -12314,7 +12278,8 @@ void daAlink_c::setSelectEquipItem(int param_0) { } if (mClothesChangeWaitTimer == 0 && - (temp != mSwordModel || i_checkNoResetFlg2(FLG2_STATUS_WINDOW_DRAW))) { + (temp != mSwordModel || i_checkNoResetFlg2(FLG2_STATUS_WINDOW_DRAW))) + { if (temp != mSwordModel) { mSwordChangeWaitTimer = 5; } @@ -12385,14 +12350,14 @@ void daAlink_c::playerInit() { dCcD_Cyl* cyl1 = field_0x850; dCcD_Cyl* cyl2 = field_0xC04; for (i = 0; i < 3; i++, cyl1++, cyl2++) { - cyl1->Set(*(dCcD_SrcCyl*)l_cylSrc); + cyl1->Set(l_cylSrc); cyl1->SetStts(&field_0x814); cyl1->OnTgNoConHit(); cyl1->SetTgShieldFrontRangeYAngle(&field_0x306c); cyl1->SetTgHitCallback(daAlink_tgHitCallback); cyl1->SetCoHitCallback(daAlink_coHitCallback); - cyl2->Set(*(dCcD_SrcCyl*)l_cylSrc); + cyl2->Set(l_cylSrc); cyl2->SetStts(&field_0x814); cyl2->OffCoSetBit(); cyl2->SetTgMtrl(3); @@ -12402,7 +12367,7 @@ void daAlink_c::playerInit() { } field_0x850[2].SetH(lit_14955); field_0x850[1].SetH(lit_14955); - field_0xFB8.Set(*(dCcD_SrcSph*)l_sphSrc); + field_0xFB8.Set(l_sphSrc); field_0xFB8.SetStts(&field_0x814); field_0xFB8.StartCAt(current.pos); @@ -12426,16 +12391,16 @@ void daAlink_c::playerInit() { field_0x306c = shape_angle.y + mBodyAngle.y; for (u16 i = 0; i < 3; i++) { - mAtCps[i].Set(*(dCcD_SrcCps*)l_atCpsSrc); + mAtCps[i].Set(l_atCpsSrc); mAtCps[i].SetStts(&field_0x814); } - mGuardAtCps.Set(*(dCcD_SrcCps*)l_atCpsSrc); + mGuardAtCps.Set(l_atCpsSrc); mGuardAtCps.SetStts(&field_0x814); mGuardAtCps.SetAtType(AT_TYPE_SHIELD_ATTACK); mGuardAtCps.OnAtNoHitMark(); mGuardAtCps.SetAtHitMark(0); mGuardAtCps.SetAtAtp(0); - mAtCyl.Set(*(dCcD_SrcCyl*)l_atCylSrc); + mAtCyl.Set(l_atCylSrc); mAtCyl.SetStts(&field_0x814); mLinkAcch.Set(this, 3, field_0x18B0); @@ -12465,9 +12430,9 @@ void daAlink_c::playerInit() { mUpperAnmHeap[i].createHeap(daPy_anmHeap_c::HEAP_TYPE_3); } - mAnmHeap5.createHeap(daPy_anmHeap_c::HEAP_TYPE_1); - mAnmHeap6.createHeap(daPy_anmHeap_c::HEAP_TYPE_2); - mAnmHeap7.createHeap(daPy_anmHeap_c::HEAP_TYPE_3); + mFaceBtpHeap.createHeap(daPy_anmHeap_c::HEAP_TYPE_1); + mFaceBtkHeap.createHeap(daPy_anmHeap_c::HEAP_TYPE_2); + mFaceBckHeap.createHeap(daPy_anmHeap_c::HEAP_TYPE_3); for (u16 i = 0; i < 2; i++) { mItemHeap[i].setBufferSize(0x13200); @@ -12612,7 +12577,7 @@ static s32 bgWaitFlg; /* 80450FD0-80450FD8 -00001 0008+00 2/2 0/0 0/0 .sbss None */ /* 80450FD0 0001+00 data_80450FD0 None */ /* 80450FD1 0007+00 data_80450FD1 None */ -static s8 struct_80450FD0; // init$ +static s8 struct_80450FD0; // init$ #pragma push #pragma force_active on @@ -12658,7 +12623,8 @@ int daAlink_c::create() { BOOL enteringCity = false; // Stage: City Room: Entrance Layer: 0 if (checkStageName("D_MN07") && dComIfGp_roomControl_getStayNo() == 0 && - dComIfG_play_c::getLayerNo(0) == 0 && current.pos.y > 7500.0f) { + dComIfG_play_c::getLayerNo(0) == 0 && current.pos.y > 7500.0f) + { enteringCity = true; } @@ -12683,7 +12649,8 @@ int daAlink_c::create() { } if ((!checkBossOctaIealRoom() && dComIfGs_Wolf_Change_Check() == 1) || startPoint == -4 || - sceneMode == 9) { + sceneMode == 9) + { mAttentionInfo.mPosition.set(current.pos.x + cM_ssin(shape_angle.y) * 70.0f, current.pos.y + 80.0f, current.pos.z + cM_scos(shape_angle.y) * 70.0f); @@ -12746,7 +12713,8 @@ int daAlink_c::create() { (!mLinkAcch.ChkWaterHit() || mLinkAcch.m_wtr.GetHeight() < current.pos.y)) || ((checkCarryStartLightBallA() || checkCarryStartLightBallB()) && !fopAcIt_Judge((fopAcIt_JudgeFunc)daAlink_searchLightBall, NULL)) || - (horseStart && i_dComIfGp_getHorseActor() == NULL)) { + (horseStart && i_dComIfGp_getHorseActor() == NULL)) + { return cPhs_ZERO_e; } @@ -12764,10 +12732,12 @@ int daAlink_c::create() { setWaterY(); if (checkStageName("F_SP102") && fopAcM_GetRoomNo(this) == 0 && - dComIfG_play_c::getLayerNo(0) == 4) { + dComIfG_play_c::getLayerNo(0) == 4) + { i_onNoResetFlg2(FLG2_UNK_800000); } else if (checkStageName("F_SP123") && fopAcM_GetRoomNo(this) == 13 && - dComIfG_play_c::getLayerNo(0) == 0) { + dComIfG_play_c::getLayerNo(0) == 0) + { i_onNoResetFlg2(FLG2_UNK_1000000); } @@ -12804,7 +12774,8 @@ int daAlink_c::create() { setItemActor(); if (dComIfGs_getLastSceneMode() & 0x400000 && !i_checkWolf() && !checkNotHeavyBootsStage() && - !horseStart && !enteringCity) { + !horseStart && !enteringCity) + { setHeavyBoots(1); } @@ -12818,8 +12789,7 @@ int daAlink_c::create() { 1, 1); } - fopAcM_create(PROC_MIDNA, prm, ¤t.pos, fopAcM_GetRoomNo(this), &shape_angle, - NULL, -1); + fopAcM_create(PROC_MIDNA, prm, ¤t.pos, fopAcM_GetRoomNo(this), &shape_angle, NULL, -1); checkSetNpcTks(¤t.pos, fopAcM_GetRoomNo(this), 1); if (startPoint == -4 && dComIfGp_TargetWarpPt_get() != -1 && !dComIfGp_TransportWarp_check()) { @@ -12828,7 +12798,8 @@ int daAlink_c::create() { if (i_dStage_stagInfo_GetSaveTbl(i_dComIfGp_getStage()->getStagInfo()) == 0x11) { if (!i_dComIfGs_isItemFirstBit(HYLIA_SHIELD) && !i_dComIfGs_isItemFirstBit(SHIELD) && - !i_dComIfGs_isItemFirstBit(WOOD_SHIELD)) { + !i_dComIfGs_isItemFirstBit(WOOD_SHIELD)) + { i_fopAcM_onSwitch(this, 0x6F); } else { i_fopAcM_offSwitch(this, 0x6F); @@ -12889,7 +12860,9 @@ s32 daAlink_c::setRoomInfo() { field_0x2fbd = 0; } - if (!checkEventRun() && (field_0x2fbd == 1 || field_0x2fbd == 3) && (checkBootsOrArmorHeavy() || mSinkShapeOffset < lit_6040 + field_0x3458)) { + if (!checkEventRun() && (field_0x2fbd == 1 || field_0x2fbd == 3) && + (checkBootsOrArmorHeavy() || mSinkShapeOffset < lit_6040 + field_0x3458)) + { field_0x2fbd = 2; } } else { @@ -12962,24 +12935,32 @@ asm void daAlink_c::setPolygonSpeed() { #pragma pop /* 800A7950-800A79EC 0A2290 009C+00 4/4 0/0 0/0 .text checkWindSpeedOnAngle__9daAlink_cCFv */ +// matches with literals +#ifdef NONMATCHING +bool daAlink_c::checkWindSpeedOnAngle() const { + if (!checkWindSpeedOnXZ()) { + return false; + } + + int tmp = cLib_distanceAngleS(field_0x30cc, shape_angle.y); + return tmp >= 0x6000 || (tmp >= 0x4000 && checkWindDashAnime()); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daAlink_c::checkWindSpeedOnAngle() const { +asm bool daAlink_c::checkWindSpeedOnAngle() const { nofralloc #include "asm/d/a/d_a_alink/checkWindSpeedOnAngle__9daAlink_cCFv.s" } #pragma pop +#endif /* 800A79EC-800A7A5C 0A232C 0070+00 2/2 0/0 0/0 .text checkWindSpeedOnAngleAnime__9daAlink_cCFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::checkWindSpeedOnAngleAnime(int param_0) const { - nofralloc -#include "asm/d/a/d_a_alink/checkWindSpeedOnAngleAnime__9daAlink_cCFi.s" +bool daAlink_c::checkWindSpeedOnAngleAnime(int param_0) const { + return checkWindSpeedOnAngle() && + ((field_0x2f8c == 1 || field_0x2f8c == 3) || (param_0 != 0 && field_0x2f8c == 2)); } -#pragma pop /* 800A7A5C-800A7ABC 0A239C 0060+00 7/7 0/0 0/0 .text checkDashAnime__9daAlink_cCFv */ bool daAlink_c::checkDashAnime() const { @@ -13223,7 +13204,7 @@ static u8 lit_4415[12]; #pragma pop /* 804255A4-804255B0 0522C4 000C+00 3/5 0/0 0/0 .bss l_boarBaseAnime */ -static u8 l_boarBaseAnime[12]; +static Vec l_boarBaseAnime; /* 804255B0-804255BC 0522D0 000C+00 0/1 0/0 0/0 .bss @4416 */ #pragma push @@ -13425,7 +13406,9 @@ void daAlink_c::setHandIndex(daAlink_c::daAlink_ANM i_anmID) { void daAlink_c::setSwordAtCollision(int param_0) { cXyz sp74; - if (checkCutDashAnime() && (checkCutDashEnemyHit(mAtCps[0]) || checkCutDashEnemyHit(mAtCps[1]) || checkCutDashEnemyHit(mAtCps[2]))) { + if (checkCutDashAnime() && (checkCutDashEnemyHit(mAtCps[0]) || + checkCutDashEnemyHit(mAtCps[1]) || checkCutDashEnemyHit(mAtCps[2]))) + { i_onNoResetFlg1(FLG1_UNK_4000000); } @@ -13482,9 +13465,12 @@ void daAlink_c::setSwordAtCollision(int param_0) { /* 800AA5E8-800AA6B4 0A4F28 00CC+00 4/4 0/0 0/0 .text checkNoCollisionCorret__9daAlink_cFv */ BOOL daAlink_c::checkNoCollisionCorret() { if (i_checkModeFlg(0x12800) || mDemo.getDemoType() == 1 || mProcID == PROC_DOOR_OPEN || - (checkEventRun() && (!strcmp(i_dComIfGp_getEventManager().getRunEventName(), "SCENE_EXIT") || - (fopAcM_getTalkEventPartner(this) && fopAcM_getTalkEventPartner(this) == getMidnaActor()))) || - mEvtInfo.i_checkCommandDoor()) { + (checkEventRun() && + (!strcmp(i_dComIfGp_getEventManager().getRunEventName(), "SCENE_EXIT") || + (fopAcM_getTalkEventPartner(this) && + fopAcM_getTalkEventPartner(this) == getMidnaActor()))) || + mEvtInfo.i_checkCommandDoor()) + { return true; } @@ -13505,7 +13491,9 @@ void daAlink_c::decSwordBlur() { */ void daAlink_c::resetWolfAtCollision() { if (i_checkNoResetFlg0(FLG0_UNK_40)) { - if (!setSwordHitVibration(&mAtCyl) && !setSwordHitVibration(&field_0x850[0]) && !setSwordHitVibration(&field_0x850[1])) { + if (!setSwordHitVibration(&mAtCyl) && !setSwordHitVibration(&field_0x850[0]) && + !setSwordHitVibration(&field_0x850[1])) + { setSwordHitVibration(&field_0x850[2]); } @@ -13528,7 +13516,9 @@ void daAlink_c::setWolfAtCollision() { cXyz sp8; if (i_checkResetFlg0(RFLG0_UNK_2)) { - if (!setSwordHitVibration(&mAtCyl) && !setSwordHitVibration(&field_0x850[0]) && !setSwordHitVibration(&field_0x850[1])) { + if (!setSwordHitVibration(&mAtCyl) && !setSwordHitVibration(&field_0x850[0]) && + !setSwordHitVibration(&field_0x850[1])) + { setSwordHitVibration(&field_0x850[2]); } @@ -13538,10 +13528,9 @@ void daAlink_c::setWolfAtCollision() { g_dComIfG_gameInfo.play.mCcs.Set(&mAtCyl); g_dComIfG_gameInfo.play.mCcs.SetMass(&mAtCyl, 1); } else { - sp8.set(current.pos.x + field_0x3438 * cM_ssin(shape_angle.y), - current.pos.y, - current.pos.z + field_0x3438 * cM_scos(shape_angle.y)); - + sp8.set(current.pos.x + field_0x3438 * cM_ssin(shape_angle.y), current.pos.y, + current.pos.z + field_0x3438 * cM_scos(shape_angle.y)); + if (!i_checkNoResetFlg0(FLG0_UNK_40)) { mAtCyl.StartCAt(sp8); @@ -13576,7 +13565,8 @@ void daAlink_c::setWolfAtCollision() { void daAlink_c::resetAtCollision(int param_0) { if (i_checkNoResetFlg0(FLG0_UNK_40)) { if (param_0 && !setSwordHitVibration(&mAtCps[0]) && !setSwordHitVibration(&mAtCps[1]) && - !setSwordHitVibration(&mAtCps[2]) && !setSwordHitVibration(&mAtCyl)) { + !setSwordHitVibration(&mAtCps[2]) && !setSwordHitVibration(&mAtCyl)) + { setSwordHitVibration(&field_0xFB8); } @@ -13659,7 +13649,7 @@ void daAlink_c::setCollisionPos() { } else { sp68.y = sp74.y; var_f31 = mHeadTopPos.y - sp74.y; - } + } if (var_f31 < lit_10040) { sp68.y -= lit_5943 * (lit_10040 - var_f31); @@ -13718,7 +13708,9 @@ void daAlink_c::setCollision() { } dCcD_Cyl* var_r31 = field_0x850; - if (checkIronBallWaitAnime() || (checkPlayerGuardAndAttack() && !i_checkEndResetFlg1(ERFLG1_UNK_20))) { + if (checkIronBallWaitAnime() || + (checkPlayerGuardAndAttack() && !i_checkEndResetFlg1(ERFLG1_UNK_20))) + { BOOL var_r27; if (field_0x3114 >= 0x3000 && field_0x3114 <= 0x5000) { var_r27 = 1; @@ -13734,7 +13726,7 @@ void daAlink_c::setCollision() { var_r31->OffTgSpShield(); var_r31->OnTgShield(); } - + if (checkHorseRide()) { var_r31->OffTgShieldFrontRange(); } else { @@ -13747,7 +13739,7 @@ void daAlink_c::setCollision() { for (int i = 0; i < 3; i++) { var_r31->OffTgShield(); var_r31->OffTgSpShield(); - + if (i_checkWolf()) { var_r31->OffTgShieldFrontRange(); } else { @@ -13825,7 +13817,6 @@ void daAlink_c::setCollision() { setAtCollision(); } - dCcD_Cyl* var_r27_2 = field_0x850; dCcD_Cyl* var_r26_6 = field_0xC04; for (int i = 0; i < 3; i++) { @@ -13883,8 +13874,8 @@ void daAlink_c::setAnimeFrame(f32 frame) { /* 800AC394-800AC450 0A6CD4 00BC+00 6/6 0/0 0/0 .text * setFrameCtrl__9daAlink_cFP16daPy_frameCtrl_cUcssff */ -void daAlink_c::setFrameCtrl(daPy_frameCtrl_c* i_ctrl, u8 i_attr, s16 i_start, s16 i_end, f32 i_rate, - f32 i_frame) { +void daAlink_c::setFrameCtrl(daPy_frameCtrl_c* i_ctrl, u8 i_attr, s16 i_start, s16 i_end, + f32 i_rate, f32 i_frame) { if (i_checkNoResetFlg0(FLG0_UNDERWATER)) { if (checkZoraWearAbility()) { i_rate *= daAlinkHIO_magneBoots_c0::m.mZoraWaterAnmSpeed; @@ -13920,7 +13911,9 @@ const daAlink_BckData* daAlink_c::getMainBckData(daAlink_c::daAlink_ANM i_anmID) return &m_mainBckShield[i_anmID]; } - if ((mEquipItem == 0x103 && i_anmID < 0x15 && i_anmID >= 0x10) || (i_anmID == ANM_SWIM_WAIT && mEquipItem != NO_ITEM)) { + if ((mEquipItem == 0x103 && i_anmID < 0x15 && i_anmID >= 0x10) || + (i_anmID == ANM_SWIM_WAIT && mEquipItem != NO_ITEM)) + { return &m_mainBckSword[i_anmID - 0x10]; } @@ -13931,17 +13924,18 @@ const daAlink_BckData* daAlink_c::getMainBckData(daAlink_c::daAlink_ANM i_anmID) return &m_anmDataTable[i_anmID].field_0x0; } - /* 800AC558-800AC5B4 0A6E98 005C+00 51/51 0/0 2/2 .text * checkUnderMove0BckNoArc__9daAlink_cCFQ29daAlink_c11daAlink_ANM */ BOOL daAlink_c::checkUnderMove0BckNoArc(daAlink_c::daAlink_ANM i_anmID) const { - return mUnderAnmHeap[0].checkNoSetArcNo() && mUnderAnmHeap[0].getIdx() == getMainBckData(i_anmID)->m_underID; + return mUnderAnmHeap[0].checkNoSetArcNo() && + mUnderAnmHeap[0].getIdx() == getMainBckData(i_anmID)->m_underID; } /* 800AC5B4-800AC610 0A6EF4 005C+00 4/4 0/0 0/0 .text * checkUnderMove1BckNoArc__9daAlink_cCFQ29daAlink_c11daAlink_ANM */ BOOL daAlink_c::checkUnderMove1BckNoArc(daAlink_c::daAlink_ANM i_anmID) const { - return mUnderAnmHeap[1].checkNoSetArcNo() && mUnderAnmHeap[1].getIdx() == getMainBckData(i_anmID)->m_underID; + return mUnderAnmHeap[1].checkNoSetArcNo() && + mUnderAnmHeap[1].getIdx() == getMainBckData(i_anmID)->m_underID; } /* 800AC610-800AC738 0A6F50 0128+00 3/3 0/0 0/0 .text @@ -13954,7 +13948,8 @@ int daAlink_c::getUnderUpperAnime(daAlink_c::daAlink_ANM i_anmID, J3DAnmTransfor const daAlink_BckData* bck_data = getMainBckData(i_anmID); i_offNoResetFlg0(FLG0_UNK_2); - *i_underBck = (J3DAnmTransform*)getAnimeResource(&mUnderAnmHeap[i_anmPackID], bck_data->m_underID, i_bufSize); + *i_underBck = (J3DAnmTransform*)getAnimeResource(&mUnderAnmHeap[i_anmPackID], + bck_data->m_underID, i_bufSize); if (*i_underBck != NULL) { var_r31 = 1; @@ -13968,7 +13963,8 @@ int daAlink_c::getUnderUpperAnime(daAlink_c::daAlink_ANM i_anmID, J3DAnmTransfor i_bufSize = (3 - i_anmPackID) * 0x2C00; } - *i_upperBck = (J3DAnmTransform*)getAnimeResource(&mUpperAnmHeap[i_anmPackID], bck_data->m_upperID, i_bufSize); + *i_upperBck = (J3DAnmTransform*)getAnimeResource(&mUpperAnmHeap[i_anmPackID], + bck_data->m_upperID, i_bufSize); if (*i_upperBck != NULL) { var_r31 |= 1; } else { @@ -14054,8 +14050,8 @@ void daAlink_c::setSingleAnimeBaseSpeed(daAlink_c::daAlink_ANM i_anmID, f32 para /* 800AD00C-800AD0F4 0A794C 00E8+00 58/58 0/0 0/0 .text * setSingleAnime__9daAlink_cFQ29daAlink_c11daAlink_ANMffsf */ -int daAlink_c::setSingleAnime(daAlink_c::daAlink_ANM i_anmID, f32 i_rate, f32 i_start, - s16 i_end, f32 i_morf) { +int daAlink_c::setSingleAnime(daAlink_c::daAlink_ANM i_anmID, f32 i_rate, f32 i_start, s16 i_end, + f32 i_morf) { J3DAnmTransform* under_bck; J3DAnmTransform* upper_bck; @@ -14076,7 +14072,8 @@ int daAlink_c::setSingleAnime(daAlink_c::daAlink_ANM i_anmID, f32 i_rate, f32 i_ * setSingleAnimeParam__9daAlink_cFQ29daAlink_c11daAlink_ANMPC16daAlinkHIO_anm_c */ int daAlink_c::setSingleAnimeParam(daAlink_c::daAlink_ANM i_anmID, daAlinkHIO_anm_c const* i_anmData) { - return setSingleAnime(i_anmID, i_anmData->mSpeed, i_anmData->mStartFrame, i_anmData->mEndFrame, i_anmData->mInterpolation); + return setSingleAnime(i_anmID, i_anmData->mSpeed, i_anmData->mStartFrame, i_anmData->mEndFrame, + i_anmData->mInterpolation); } /* 800AD128-800AD170 0A7A68 0048+00 1/1 0/0 0/0 .text @@ -14144,53 +14141,48 @@ void daAlink_c::allAnimePlay() { } /* 800AD2D8-800AD340 0A7C18 0068+00 2/2 0/0 0/0 .text setUpperAnimeMorf__9daAlink_cFf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::setUpperAnimeMorf(f32 param_0) { - nofralloc -#include "asm/d/a/d_a_alink/setUpperAnimeMorf__9daAlink_cFf.s" +void daAlink_c::setUpperAnimeMorf(f32 param_0) { + if (param_0 >= FLOAT_LABEL(lit_6108)) { + u16 temp_r29; + u16 temp_r28; + + if (field_0x2060->getOldFrameRate() > lit_9054 && + field_0x2060->getOldFrameStartJoint() == 0) + { + temp_r29 = 0; + temp_r28 = field_0x30c6; + } else { + temp_r29 = field_0x30a8; + temp_r28 = field_0x30aa; + } + + field_0x2060->initOldFrameMorf(param_0, temp_r29, temp_r28); + } } -#pragma pop /* 800AD340-800AD374 0A7C80 0034+00 15/15 0/0 0/0 .text setUpperAnimeBase__9daAlink_cFUs */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::setUpperAnimeBase(u16 param_0) { - nofralloc -#include "asm/d/a/d_a_alink/setUpperAnimeBase__9daAlink_cFUs.s" +void daAlink_c::setUpperAnimeBase(u16 i_anmResID) { + setUpperAnime(i_anmResID, UPPER_2, lit_6040, FLOAT_LABEL(lit_6108), -1, lit_6109); } -#pragma pop /* 800AD374-800AD3A8 0A7CB4 0034+00 7/7 0/0 0/0 .text setUpperAnimeBaseMorf__9daAlink_cFUsf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::setUpperAnimeBaseMorf(u16 param_0, f32 param_1) { - nofralloc -#include "asm/d/a/d_a_alink/setUpperAnimeBaseMorf__9daAlink_cFUsf.s" +void daAlink_c::setUpperAnimeBaseMorf(u16 i_anmResID, f32 i_morf) { + setUpperAnime(i_anmResID, UPPER_2, lit_6040, FLOAT_LABEL(lit_6108), -1, i_morf); } -#pragma pop /* 800AD3A8-800AD3D8 0A7CE8 0030+00 18/18 0/0 0/0 .text setUpperAnimeBaseSpeed__9daAlink_cFUsff */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::setUpperAnimeBaseSpeed(u16 param_0, f32 param_1, f32 param_2) { - nofralloc -#include "asm/d/a/d_a_alink/setUpperAnimeBaseSpeed__9daAlink_cFUsff.s" +void daAlink_c::setUpperAnimeBaseSpeed(u16 i_anmResID, f32 i_speed, f32 i_morf) { + setUpperAnime(i_anmResID, UPPER_2, i_speed, FLOAT_LABEL(lit_6108), -1, i_morf); } -#pragma pop /* 800AD3D8-800AD6F0 0A7D18 0318+00 13/13 0/0 0/0 .text * setUpperAnime__9daAlink_cFUsQ29daAlink_c13daAlink_UPPERffsf */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daAlink_c::setUpperAnime(u16 param_0, daAlink_c::daAlink_UPPER param_1, f32 param_2, - f32 param_3, s16 param_4, f32 param_5) { +asm void daAlink_c::setUpperAnime(u16 i_anmResID, daAlink_c::daAlink_UPPER param_1, f32 i_speed, + f32 i_startFrame, s16 i_endFrame, f32 i_morf) { nofralloc #include "asm/d/a/d_a_alink/setUpperAnime__9daAlink_cFUsQ29daAlink_c13daAlink_UPPERffsf.s" } @@ -14198,15 +14190,11 @@ asm void daAlink_c::setUpperAnime(u16 param_0, daAlink_c::daAlink_UPPER param_1, /* 800AD6F0-800AD724 0A8030 0034+00 21/21 0/0 0/0 .text * setUpperAnimeParam__9daAlink_cFUsQ29daAlink_c13daAlink_UPPERPC16daAlinkHIO_anm_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::setUpperAnimeParam(u16 param_0, daAlink_c::daAlink_UPPER param_1, - daAlinkHIO_anm_c const* param_2) { - nofralloc -#include "asm/d/a/d_a_alink/setUpperAnimeParam__9daAlink_cFUsQ29daAlink_c13daAlink_UPPERPC16daAlinkHIO_anm_c.s" +void daAlink_c::setUpperAnimeParam(u16 i_anmResID, daAlink_c::daAlink_UPPER param_1, + daAlinkHIO_anm_c const* i_anmParam) { + setUpperAnime(i_anmResID, param_1, i_anmParam->mSpeed, i_anmParam->mStartFrame, + i_anmParam->mEndFrame, i_anmParam->mInterpolation); } -#pragma pop /* 800AD724-800AD8F4 0A8064 01D0+00 65/65 0/0 0/0 .text * resetUpperAnime__9daAlink_cFQ29daAlink_c13daAlink_UPPERf */ @@ -14220,14 +14208,18 @@ asm void daAlink_c::resetUpperAnime(daAlink_c::daAlink_UPPER param_0, f32 param_ #pragma pop /* 800AD8F4-800AD964 0A8234 0070+00 2/2 0/0 0/0 .text setUnderAnimeMorf__9daAlink_cFf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::setUnderAnimeMorf(f32 param_0) { - nofralloc -#include "asm/d/a/d_a_alink/setUnderAnimeMorf__9daAlink_cFf.s" +void daAlink_c::setUnderAnimeMorf(f32 param_0) { + if (param_0 >= FLOAT_LABEL(lit_6108)) { + if (field_0x2060->getOldFrameRate() > lit_9054 && + (field_0x2060->getOldFrameStartJoint() == 0 || + field_0x2060->getOldFrameStartJoint() == 1)) + { + field_0x2060->initOldFrameMorf(param_0, 0, 35); + } else { + field_0x2060->initOldFrameMorf(param_0, 16, 35); + } + } } -#pragma pop /* 800AD964-800ADAB8 0A82A4 0154+00 5/5 0/0 0/0 .text * setUnderAnime__9daAlink_cFUsQ29daAlink_c13daAlink_UNDERffsf */ @@ -14235,7 +14227,7 @@ asm void daAlink_c::setUnderAnimeMorf(f32 param_0) { #pragma optimization_level 0 #pragma optimizewithasm off asm int daAlink_c::setUnderAnime(u16 param_0, daAlink_c::daAlink_UNDER param_1, f32 param_2, - f32 param_3, s16 param_4, f32 param_5) { + f32 param_3, s16 param_4, f32 param_5) { nofralloc #include "asm/d/a/d_a_alink/setUnderAnime__9daAlink_cFUsQ29daAlink_c13daAlink_UNDERffsf.s" } @@ -14245,29 +14237,39 @@ asm int daAlink_c::setUnderAnime(u16 param_0, daAlink_c::daAlink_UNDER param_1, * setUnderAnimeParam__9daAlink_cFUsQ29daAlink_c13daAlink_UNDERPC16daAlinkHIO_anm_c */ int daAlink_c::setUnderAnimeParam(u16 i_resID, daAlink_c::daAlink_UNDER i_packIdx, daAlinkHIO_anm_c const* i_anmData) { - return setUnderAnime(i_resID, i_packIdx, i_anmData->mSpeed, i_anmData->mStartFrame, i_anmData->mEndFrame, i_anmData->mInterpolation); + return setUnderAnime(i_resID, i_packIdx, i_anmData->mSpeed, i_anmData->mStartFrame, + i_anmData->mEndFrame, i_anmData->mInterpolation); } /* 800ADAEC-800ADB78 0A842C 008C+00 17/17 0/0 0/0 .text * resetUnderAnime__9daAlink_cFQ29daAlink_c13daAlink_UNDERf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::resetUnderAnime(daAlink_c::daAlink_UNDER param_0, f32 param_1) { - nofralloc -#include "asm/d/a/d_a_alink/resetUnderAnime__9daAlink_cFQ29daAlink_c13daAlink_UNDERf.s" +int daAlink_c::resetUnderAnime(daAlink_c::daAlink_UNDER param_0, f32 i_morf) { + mNowAnmPackUnder[param_0].setAnmTransform(NULL); + mNowAnmPackUnder[param_0].setRatio(FLOAT_LABEL(lit_6108)); + mUnderAnmHeap[param_0].resetIdx(); + mUnderFrameCtrl[param_0].init(0); + setUnderAnimeMorf(i_morf); + return 1; } -#pragma pop /* 800ADB78-800ADC50 0A84B8 00D8+00 34/34 0/0 0/0 .text setOldRootQuaternion__9daAlink_cFsss */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::setOldRootQuaternion(s16 param_0, s16 param_1, s16 param_2) { - nofralloc -#include "asm/d/a/d_a_alink/setOldRootQuaternion__9daAlink_cFsss.s" +void daAlink_c::setOldRootQuaternion(s16 param_0, s16 param_1, s16 param_2) { + Quaternion quat; + Quaternion quat2; + Quaternion* old_frame_quat = field_0x2060->getOldFrameQuaternion(0); + + if (param_0 != 0 || param_1 != 0) { + JMAEulerToQuat(param_0, param_1, 0, &quat); + quat2 = *old_frame_quat; + mDoMtx_QuatConcat(&quat, &quat2, old_frame_quat); + } + + if (param_2 != 0) { + JMAEulerToQuat(0, 0, param_2, &quat); + quat2 = *old_frame_quat; + mDoMtx_QuatConcat(&quat, &quat2, old_frame_quat); + } } -#pragma pop /* 800ADC50-800ADCEC 0A8590 009C+00 2/2 0/0 0/0 .text checkAtnLeftAnime__9daAlink_cFv */ BOOL daAlink_c::checkAtnLeftAnime() { @@ -14366,6 +14368,38 @@ asm void daAlink_c::setFaceBtp(u16 param_0, int param_1, u16 param_2) { #pragma pop /* 800AF7D0-800AF8A0 0AA110 00D0+00 6/6 0/0 0/0 .text setFaceBtk__9daAlink_cFUsiUs */ +// swapped instructions +#ifdef NONMATCHING +void daAlink_c::setFaceBtk(u16 i_resID, int param_1, u16 i_arcNo) { + int var_r4; + u16 arc_no; + u16 res_id; + + res_id = i_resID; + var_r4 = param_1; + arc_no = i_arcNo; + + setIdxMask(&arc_no, &res_id); + + J3DAnmTextureSRTKey* btk; + if (arc_no != 0xFFFF) { + btk = (J3DAnmTextureSRTKey*)mFaceBtkHeap.loadDataDemoRID(res_id, arc_no); + i_offNoResetFlg1(FLG1_UNK_2000); + } else if (var_r4 != 0) { + btk = (J3DAnmTextureSRTKey*)mFaceBtkHeap.loadDataPriIdx(res_id); + } else { + btk = (J3DAnmTextureSRTKey*)mFaceBtkHeap.loadDataIdx(res_id); + } + + if (btk != NULL) { + mpFaceBtk = btk; + mpFaceBtk->searchUpdateMaterialID(field_0x06c0); + field_0x06c0->entryTexMtxAnimator(mpFaceBtk); + daAlink_matAnm_c::setMorfFrame(3); + mpFaceBtk->setFrame(FLOAT_LABEL(lit_6108)); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -14374,6 +14408,7 @@ asm void daAlink_c::setFaceBtk(u16 param_0, int param_1, u16 param_2) { #include "asm/d/a/d_a_alink/setFaceBtk__9daAlink_cFUsiUs.s" } #pragma pop +#endif /* 800AF8A0-800AF9A8 0AA1E0 0108+00 31/31 0/0 0/0 .text * setFaceBasicTexture__9daAlink_cFQ29daAlink_c13daAlink_FTANM */ @@ -14399,76 +14434,77 @@ asm void daAlink_c::setFaceBasicAnime(daAlink_c::daAlink_ANM param_0) { /* 800AFAA8-800AFB14 0AA3E8 006C+00 16/16 0/0 0/0 .text * setFacePriTexture__9daAlink_cFQ29daAlink_c13daAlink_FTANM */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::setFacePriTexture(daAlink_c::daAlink_FTANM param_0) { - nofralloc -#include "asm/d/a/d_a_alink/setFacePriTexture__9daAlink_cFQ29daAlink_c13daAlink_FTANM.s" +void daAlink_c::setFacePriTexture(daAlink_c::daAlink_FTANM i_anmID) { + setFacePriBtp(getFaceTexData(i_anmID)->m_btpID); + setFacePriBtk(getFaceTexData(i_anmID)->m_btkID); } -#pragma pop /* 800AFB14-800AFB74 0AA454 0060+00 6/6 0/0 0/0 .text * setFacePriAnime__9daAlink_cFQ29daAlink_c11daAlink_ANM */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::setFacePriAnime(daAlink_c::daAlink_ANM param_0) { - nofralloc -#include "asm/d/a/d_a_alink/setFacePriAnime__9daAlink_cFQ29daAlink_c11daAlink_ANM.s" +void daAlink_c::setFacePriAnime(daAlink_c::daAlink_ANM i_anmID) { + const daAlink_AnmData* anm_data = getAnmData(i_anmID); + + setFacePriTexture((daAlink_FTANM)anm_data->m_faceTexID); + setFacePriBck(anm_data->m_faceBckID); } -#pragma pop /* 800AFB74-800AFBD0 0AA4B4 005C+00 1/1 0/0 0/0 .text resetFacePriBck__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::resetFacePriBck() { - nofralloc -#include "asm/d/a/d_a_alink/resetFacePriBck__9daAlink_cFv.s" +void daAlink_c::resetFacePriBck() { + if (!mFaceBckHeap.checkNoSetPriIdx()) { + mFaceBckHeap.resetPriIdx(); + u16 bck_idx = mFaceBckHeap.getIdx(); + + if (bck_idx == 0xFFFF) { + bck_idx = 0xDF; + } + + mFaceBckHeap.resetIdx(); + setFaceBasicBck(bck_idx); + } } -#pragma pop /* 800AFBD0-800AFC2C 0AA510 005C+00 1/1 0/0 0/0 .text resetFacePriBtp__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::resetFacePriBtp() { - nofralloc -#include "asm/d/a/d_a_alink/resetFacePriBtp__9daAlink_cFv.s" +void daAlink_c::resetFacePriBtp() { + if (!mFaceBtpHeap.checkNoSetPriIdx()) { + mFaceBtpHeap.resetPriIdx(); + u16 btp_idx = mFaceBtpHeap.getIdx(); + + if (btp_idx == 0xFFFF) { + btp_idx = 0x3DF; + } + + mFaceBtpHeap.resetIdx(); + setFaceBasicBtp(btp_idx); + } } -#pragma pop /* 800AFC2C-800AFC88 0AA56C 005C+00 1/1 0/0 0/0 .text resetFacePriBtk__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::resetFacePriBtk() { - nofralloc -#include "asm/d/a/d_a_alink/resetFacePriBtk__9daAlink_cFv.s" +void daAlink_c::resetFacePriBtk() { + if (!mFaceBtkHeap.checkNoSetPriIdx()) { + mFaceBtkHeap.resetPriIdx(); + u16 btk_idx = mFaceBtkHeap.getIdx(); + + if (btk_idx == 0xFFFF) { + btk_idx = 0x379; + } + + mFaceBtkHeap.resetIdx(); + setFaceBasicBtk(btk_idx); + } } -#pragma pop /* 800AFC88-800AFCBC 0AA5C8 0034+00 1/1 0/0 0/0 .text resetFacePriTexture__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::resetFacePriTexture() { - nofralloc -#include "asm/d/a/d_a_alink/resetFacePriTexture__9daAlink_cFv.s" +void daAlink_c::resetFacePriTexture() { + resetFacePriBtp(); + resetFacePriBtk(); } -#pragma pop /* 800AFCBC-800AFCF0 0AA5FC 0034+00 7/7 0/0 0/0 .text resetFacePriAnime__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::resetFacePriAnime() { - nofralloc -#include "asm/d/a/d_a_alink/resetFacePriAnime__9daAlink_cFv.s" +void daAlink_c::resetFacePriAnime() { + resetFacePriTexture(); + resetFacePriBck(); } -#pragma pop /* 800AFCF0-800B0098 0AA630 03A8+00 2/2 0/0 0/0 .text playFaceTextureAnime__9daAlink_cFv */ @@ -14510,14 +14546,27 @@ asm s16 daAlink_c::getGroundAngle(cBgS_PolyInfo* param_0, s16 param_1) { /* 800B0150-800B01FC 0AAA90 00AC+00 1/1 0/0 0/0 .text getRoofAngle__9daAlink_cFP13cBgS_PolyInfos */ +// matches with cM3dGPla vtable data +#ifdef NONMATCHING +s16 daAlink_c::getRoofAngle(cBgS_PolyInfo* param_0, s16 param_1) { + cM3dGPla plane; + + if (!dComIfG_Bgsp().GetTriPla(*param_0, &plane) || !dComIfG_Bgsp().ChkPolySafe(*param_0)) { + return 0; + } + + return fopAcM_getPolygonAngle(&plane, param_1) + 0x8000; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daAlink_c::getRoofAngle(cBgS_PolyInfo* param_0, s16 param_1) { +asm s16 daAlink_c::getRoofAngle(cBgS_PolyInfo* param_0, s16 param_1) { nofralloc #include "asm/d/a/d_a_alink/getRoofAngle__9daAlink_cFP13cBgS_PolyInfos.s" } #pragma pop +#endif /* 800B01FC-800B02BC 0AAB3C 00C0+00 2/2 0/0 0/0 .text * getWallEdgePos__9daAlink_cFRC4cXyzP8cM3dGPlaP8cM3dGPlaP4cXyzi */ @@ -14810,7 +14859,8 @@ void daAlink_c::setStickData() { if (checkEventRun() && mProcID != PROC_GRASS_WHISTLE_WAIT && mProcID != PROC_WOLF_DIG_THROUGH && mProcID != PROC_GOAT_CATCH && mProcID != PROC_WOLF_GANON_CATCH && - mProcID != PROC_TOOL_DEMO && (mProcID != PROC_METAMORPHOSE || mFallVoiceInit == 0)) { + mProcID != PROC_TOOL_DEMO && (mProcID != PROC_METAMORPHOSE || mFallVoiceInit == 0)) + { u32 demoMode = mDemo.getDemoMode(); if (checkDemoMoveMode(demoMode)) { @@ -14857,7 +14907,8 @@ void daAlink_c::setStickData() { bool usingFishRod = false; if (checkFishingRodAndLureItem() && mItemAcKeep.getActor() != NULL && - (checkCanoeRide() || mProcID == PROC_FISHING_CAST)) { + (checkCanoeRide() || mProcID == PROC_FISHING_CAST)) + { usingFishRod = true; } @@ -14877,16 +14928,16 @@ void daAlink_c::setStickData() { if (i_checkMagneBootsOn()) { if (field_0x2fb9 == 1 || - (field_0x2fb9 == 0 && field_0x3114 != -0x8000 && field_0x3114 <= 0x6000)) { + (field_0x2fb9 == 0 && field_0x3114 != -0x8000 && field_0x3114 <= 0x6000)) + { field_0x2fb9 = 1; } else { field_0x2fb9 = 2; } - if ((field_0x2fb9 == 1 && - (field_0x3114 > 0x6000 || field_0x3114 == -0x8000)) || - (field_0x2fb9 == 2 && field_0x3114 != -0x8000 && - field_0x3114 < 0x4000)) { + if ((field_0x2fb9 == 1 && (field_0x3114 > 0x6000 || field_0x3114 == -0x8000)) || + (field_0x2fb9 == 2 && field_0x3114 != -0x8000 && field_0x3114 < 0x4000)) + { field_0x2fe2 = getMagneBootsLocalAngleY(field_0x2fe2, 0) + 0x8000; } else { field_0x2fe2 = getMagneBootsLocalAngleY(field_0x2fe2, field_0x2fb9); @@ -14939,7 +14990,9 @@ void daAlink_c::setStickData() { mItemButton |= BTN_R; } - if (checkHeavyStateOn(1, 1) && (!checkBootsOrArmorHeavy() || !i_checkNoResetFlg0(FLG0_UNDERWATER))) { + if (checkHeavyStateOn(1, 1) && + (!checkBootsOrArmorHeavy() || !i_checkNoResetFlg0(FLG0_UNDERWATER))) + { if (i_checkWolf() && checkHeavyStateOn(1, 0) && mSinkShapeOffset < -30.0f) { mHeavySpeedMultiplier = daAlinkHIO_magneBoots_c0::m.mInputFactor * 0.4f; } else { @@ -14953,8 +15006,9 @@ void daAlink_c::setStickData() { mHeavySpeedMultiplier = daAlinkHIO_magneBoots_c0::m.mWaterInputFactor; } field_0x33a8 *= mHeavySpeedMultiplier; - } else if ((i_checkWolf() && - field_0x2fbc == 11 && checkWaterPolygonUnder()) || field_0x2fbb == 11) { + } else if ((i_checkWolf() && field_0x2fbc == 11 && checkWaterPolygonUnder()) || + field_0x2fbb == 11) + { i_onNoResetFlg0(FLG0_UNK_40000000); field_0x33a8 *= daAlinkHIO_wolf_c0::m.mUnderwaterInputRate; mHeavySpeedMultiplier = daAlinkHIO_wolf_c0::m.mUnderwaterInputRate; @@ -15038,14 +15092,19 @@ void daAlink_c::setBStatus(u8 status) { } /* 800B32B0-800B3358 0ADBF0 00A8+00 2/2 0/0 0/0 .text checkAtnWaitAnime__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm BOOL daAlink_c::checkAtnWaitAnime() { - nofralloc -#include "asm/d/a/d_a_alink/checkAtnWaitAnime__9daAlink_cFv.s" +BOOL daAlink_c::checkAtnWaitAnime() { + if ((mTargetedActor != NULL && + (checkEnemyGroup(mTargetedActor) || checkGoatCatchActor(mTargetedActor) || + fopAcM_GetName(mTargetedActor) == PROC_CROD || + fopAcM_GetName(mTargetedActor) == PROC_BOOMERANG)) || + (checkGrabAnimeUp() || checkGrabAnimeSide() || mDemo.getDemoMode() == 0x17 || + checkGoatStopGame())) + { + return true; + } + + return false; } -#pragma pop /* 800B3358-800B33E4 0ADC98 008C+00 2/2 0/0 0/0 .text * setTiredVoice__9daAlink_cFP16daPy_frameCtrl_c */ @@ -15060,14 +15119,16 @@ void daAlink_c::setTiredVoice(daPy_frameCtrl_c* i_frameCtrl) { } /* 800B33E4-800B3494 0ADD24 00B0+00 4/4 0/0 0/0 .text checkRestHPAnime__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::checkRestHPAnime() { - nofralloc -#include "asm/d/a/d_a_alink/checkRestHPAnime__9daAlink_cFv.s" +BOOL daAlink_c::checkRestHPAnime() { + if (!checkPlayerGuard() && (checkNoUpperAnime() || checkHorseTiredAnime()) && + mTargetedActor == NULL && !checkWindSpeedOnAngle() && + ((!checkPlayerDemoMode() && i_dComIfGs_getLife() <= 4) || mDemo.getDemoMode() == 0x12)) + { + return true; + } + + return false; } -#pragma pop /* 800B3494-800B3500 0ADDD4 006C+00 44/44 0/0 0/0 .text getDirectionFromAngle__9daAlink_cFs */ int daAlink_c::getDirectionFromAngle(s16 angle) { @@ -15119,6 +15180,18 @@ asm bool daAlink_c::setShapeAngleToAtnActor(int param_0) { /* 800B3844-800B3904 0AE184 00C0+00 9/9 0/0 0/0 .text initServiceWaitTime__9daAlink_cFv */ +// matches with literals +#ifdef NONMATCHING +void daAlink_c::initServiceWaitTime() { + field_0x30ca = cM_rndF(150.0f) + 300.0f; + + if (i_checkWolf()) { + field_0x30ca >>= 2; // divide by 4 + } else if (i_checkReinRide()) { + field_0x30ca *= 0.75f; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -15127,6 +15200,7 @@ asm void daAlink_c::initServiceWaitTime() { #include "asm/d/a/d_a_alink/initServiceWaitTime__9daAlink_cFv.s" } #pragma pop +#endif /* 800B3904-800B3924 0AE244 0020+00 50/50 0/0 0/0 .text checkZeroSpeedF__9daAlink_cCFv */ bool daAlink_c::checkZeroSpeedF() const { @@ -15144,14 +15218,25 @@ asm void daAlink_c::setNormalSpeedF(f32 param_0, f32 param_1) { #pragma pop /* 800B3F2C-800B3FD4 0AE86C 00A8+00 2/2 0/0 0/0 .text getStickAngleDistanceRate__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::getStickAngleDistanceRate() { - nofralloc -#include "asm/d/a/d_a_alink/getStickAngleDistanceRate__9daAlink_cFv.s" +f32 daAlink_c::getStickAngleDistanceRate() { + f32 rate; + + if (abs((s16)(mPrevStickAngle - mStickAngle)) > 0x1000) { + rate = cM_scos(field_0x2fe2 - current.angle.y); + + if (mNormalSpeed > lit_5943 * field_0x594) { + if (rate < lit_9652) { + rate = lit_9652; + } + } else if (rate < FLOAT_LABEL(lit_6108)) { + rate = FLOAT_LABEL(lit_6108); + } + } else { + rate = lit_6040; + } + + return rate; } -#pragma pop /* 800B3FD4-800B444C 0AE914 0478+00 3/3 0/0 0/0 .text setSpeedAndAngleNormal__9daAlink_cFv */ #pragma push @@ -15177,7 +15262,9 @@ asm void daAlink_c::setSpeedAndAngleAtn() { /* 800B477C-800B47B4 0AF0BC 0038+00 2/2 0/0 0/0 .text * checkRequestTalkActor__9daAlink_cFP10dAttList_cP10fopAc_ac_c */ int daAlink_c::checkRequestTalkActor(dAttList_c* param_0, fopAc_ac_c* param_1) { - if (param_0 != NULL && (param_0->mType == 3 || (param_0->mType == 1 && mTargetedActor == param_1))) { + if (param_0 != NULL && + (param_0->mType == 3 || (param_0->mType == 1 && mTargetedActor == param_1))) + { return true; } @@ -15238,7 +15325,8 @@ BOOL daAlink_c::notTalk() { (i_checkMagneBootsOn() && !cBgW_CheckBGround(mMagneBootsTopVec.y))) || !i_checkModeFlg(MODE_SWIMMING | MODE_ROPE_WALK | MODE_VINE_CLIMB | MODE_UNK_800 | MODE_RIDING | MODE_NO_COLLISION | MODE_CLIMB | MODE_JUMP) && - !safe_poly) { + !safe_poly) + { return true; } return false; @@ -15257,7 +15345,7 @@ BOOL daAlink_c::setTalkStatus() { if (field_0x27f4->mAttentionInfo.mFlags & 0x2000000) { return 0; } - + if (field_0x27f4->mAttentionInfo.mFlags & 0x800000) { setDoStatus(0x3B); } else if (field_0x27f4->mAttentionInfo.mFlags & 0x20000000) { @@ -15370,15 +15458,20 @@ BOOL daAlink_c::checkLandAction(int param_0) { f32 temp_f31 = lit_8782 * (mFallHeight - current.pos.y); int temp_r3 = getDirectionFromCurrentAngle(); int temp_r27 = getDirectionFromAngle(current.angle.y - shape_angle.y); - BOOL var_r29 = field_0x33a8 > lit_14064 && temp_r27 != 1 && !checkGrabAnime() && mProcID != PROC_CUT_HEAD && temp_r3 == DIR_FORWARD; + BOOL var_r29 = field_0x33a8 > lit_14064 && temp_r27 != 1 && !checkGrabAnime() && + mProcID != PROC_CUT_HEAD && temp_r3 == DIR_FORWARD; - if ((param_0 || temp_f31 >= daAlinkHIO_damFall_c0::m.mMinRollHeight) && temp_f31 < daAlinkHIO_damFall_c0::m.mMaxRollHeight && var_r29) { + if ((param_0 || temp_f31 >= daAlinkHIO_damFall_c0::m.mMinRollHeight) && + temp_f31 < daAlinkHIO_damFall_c0::m.mMaxRollHeight && var_r29) + { if (temp_r27 == DIR_FORWARD) { procFrontRollInit(); } else { procSideRollInit(temp_r27); } - } else if (checkNoLandDamageSlidePolygon() || temp_f31 < daAlinkHIO_damFall_c0::m.mSmallDmgHeight) { + } else if (checkNoLandDamageSlidePolygon() || + temp_f31 < daAlinkHIO_damFall_c0::m.mSmallDmgHeight) + { if (param_0) { procLandDamageInit(0); } else if (var_r29 && field_0x30f0 > 0x32) { @@ -15387,7 +15480,9 @@ BOOL daAlink_c::checkLandAction(int param_0) { } else { procSideRollInit(temp_r27); } - } else if (checkInputOnR() && temp_r27 == DIR_FORWARD && temp_r3 == DIR_FORWARD && mNormalSpeed > lit_7808) { + } else if (checkInputOnR() && temp_r27 == DIR_FORWARD && temp_r3 == DIR_FORWARD && + mNormalSpeed > lit_7808) + { if (mNormalSpeed > daAlinkHIO_move_c0::m.mMaxSpeed) { mNormalSpeed = daAlinkHIO_move_c0::m.mMaxSpeed; } @@ -15398,7 +15493,7 @@ BOOL daAlink_c::checkLandAction(int param_0) { field_0x2f9d = 4; resetBasAnime(); seStartMapInfo(0x30001); - + f32 tmp_0 = FLOAT_LABEL(lit_6108); dComIfGp_getVibration().StartShock(1, 15, cXyz(tmp_0, lit_6040, tmp_0)); } else { @@ -15507,16 +15602,38 @@ void daAlink_c::setFastShotTimer() { } /* 800B7190-800B71EC 0B1AD0 005C+00 9/9 0/0 0/0 .text cancelItemUseQuake__9daAlink_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::cancelItemUseQuake(int param_0) { - nofralloc -#include "asm/d/a/d_a_alink/cancelItemUseQuake__9daAlink_cFi.s" +void daAlink_c::cancelItemUseQuake(int param_0) { + if (i_checkNoResetFlg3(FLG3_UNK_4) && (param_0 != 0 || mProcID != PROC_HOOKSHOT_FLY)) { + i_offNoResetFlg3(FLG3_UNK_4); + dComIfGp_getVibration().StopQuake(31); + } } -#pragma pop /* 800B71EC-800B72E4 0B1B2C 00F8+00 6/6 0/0 0/0 .text cancelUpperItemReadyAnime__9daAlink_cFi */ +// matches with literals +#ifdef NONMATCHING +int daAlink_c::cancelUpperItemReadyAnime(int param_0) { + if ((i_dComIfGp_getDoStatus() == 0x12 || param_0 != 0) && + ((param_0 == 0 && doTrigger()) || + (checkCanoeSlider() && + (subjectCancelTrigger() || i_checkEndResetFlg1(ERFLG1_UNK_20000000))))) + { + seStartSystem(0x6F); + + if (mEquipItem == IRONBALL) { + field_0x3018 = 8; + procIronBallReturnInit(); + } else { + resetUpperAnime(UPPER_2, 3.0f); + checkWaitAction(); + } + + return 1; + } + + return 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -15525,6 +15642,7 @@ asm int daAlink_c::cancelUpperItemReadyAnime(int param_0) { #include "asm/d/a/d_a_alink/cancelUpperItemReadyAnime__9daAlink_cFi.s" } #pragma pop +#endif /* 800B72E4-800B7390 0B1C24 00AC+00 8/8 0/0 0/0 .text checkItemActorPointer__9daAlink_cFv */ @@ -15581,7 +15699,9 @@ void daAlink_c::checkItemButtonChange() { u8 temp_r0; for (u8 i = 0; i < 2; i++) { temp_r0 = (i + 1) % 2; - if (mEquipItem == dComIfGp_getSelectItem(i) && (mEquipItem != dComIfGp_getSelectItem(temp_r0) || mSelectItemId != temp_r0)) { + if (mEquipItem == dComIfGp_getSelectItem(i) && + (mEquipItem != dComIfGp_getSelectItem(temp_r0) || mSelectItemId != temp_r0)) + { mSelectItemId = i; } } @@ -15621,9 +15741,11 @@ int daAlink_c::orderTalk(int i_checkZTalk) { return 0; } - if ((i_dComIfGp_getDoStatus() == 0x1C || i_dComIfGp_getDoStatus() == 0x1B || i_dComIfGp_getDoStatus() == 0x80 || - i_dComIfGp_getDoStatus() == 0x3B || i_dComIfGp_getDoStatus() == 0x3C || i_dComIfGp_getDoStatus() == 0x8) && - talkTrigger()) { + if ((i_dComIfGp_getDoStatus() == 0x1C || i_dComIfGp_getDoStatus() == 0x1B || + i_dComIfGp_getDoStatus() == 0x80 || i_dComIfGp_getDoStatus() == 0x3B || + i_dComIfGp_getDoStatus() == 0x3C || i_dComIfGp_getDoStatus() == 0x8) && + talkTrigger()) + { fopAcM_orderTalkEvent(this, field_0x27f4, 0, 0); return 1; } @@ -15685,8 +15807,7 @@ asm int daAlink_c::orderZTalk() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm int daAlink_c::checkNormalAction(){ - nofralloc +asm int daAlink_c::checkNormalAction(){nofralloc #include "asm/d/a/d_a_alink/checkNormalAction__9daAlink_cFv.s" } #pragma pop @@ -15734,12 +15855,14 @@ asm BOOL daAlink_c::checkMoveDoAction() { #ifdef NONMATCHING BOOL daAlink_c::checkSideRollAction(int param_0) { if (checkNotJumpSinkLimit() || checkHeavyStateOn(1, 1) || checkInputOnR() || - checkCutBackState()) { + checkCutBackState()) + { return false; } else { if (mTargetedActor != NULL) { if (checkEnemyGroup(mTargetedActor) && - mTargetedActor->current.pos.abs2XZ(current.pos) <= lit_6237) { + mTargetedActor->current.pos.abs2XZ(current.pos) <= lit_6237) + { return procSideRollInit(param_0); } else { return procTurnMoveInit(param_0); @@ -15764,7 +15887,8 @@ asm BOOL daAlink_c::checkSideRollAction(int param_0) { /* 800B9254-800B92D0 0B3B94 007C+00 35/35 0/0 0/0 .text checkNoUpperAnime__9daAlink_cCFv */ BOOL daAlink_c::checkNoUpperAnime() const { - return checkNoSetUpperAnime() || checkSwimMoveHandAnime() || checkWindDashAnime() || checkSwordTwirlAnime() || checkKandelaarEquipAnime(); + return checkNoSetUpperAnime() || checkSwimMoveHandAnime() || checkWindDashAnime() || + checkSwordTwirlAnime() || checkKandelaarEquipAnime(); } /* 800B92D0-800B92F8 0B3C10 0028+00 1/1 0/0 0/0 .text checkOneHandItemEquipAnime__9daAlink_cCFv */ @@ -15820,8 +15944,8 @@ void daAlink_c::swordUnequip() { u16 anm_id = i_checkReinRide() ? (u16)0x261 : (u16)0x255; - setUpperAnime(anm_id, UPPER_2, anm_speed, - daAlinkHIO_cut_c0::m.mUnequipAnm.mStartFrame, daAlinkHIO_cut_c0::m.mUnequipAnm.mEndFrame, + setUpperAnime(anm_id, UPPER_2, anm_speed, daAlinkHIO_cut_c0::m.mUnequipAnm.mStartFrame, + daAlinkHIO_cut_c0::m.mUnequipAnm.mEndFrame, daAlinkHIO_cut_c0::m.mUnequipAnm.mInterpolation); setFacePriTexture(FTANM_UNK_2D); setFaceBck(0x15E, 1, 0xFFFF); @@ -15842,7 +15966,7 @@ void daAlink_c::itemEquip(u16 i_itemID) { * This handles setting the animation for both equipping and unequipping items * When `param_1` is positive, it will play the unequip animation * When `param_1` is negative, it will play the equip animation - * + * */ // matches with literals #ifdef NONMATCHING @@ -15851,7 +15975,8 @@ void daAlink_c::itemUnequip(u16 i_itemID, f32 i_playSpeed) { const daAlinkHIO_anm_c* anm_data; if (i_itemID == BOOMERANG || i_itemID == COPY_ROD || i_itemID == KANTERA || - i_itemID == HOOKSHOT || checkBottleItem(i_itemID)) { + i_itemID == HOOKSHOT || checkBottleItem(i_itemID)) + { anm_id = 0x247; anm_data = &daAlinkHIO_item_c0::m.mOneHandEquipAnm; } else if (checkBowAndSlingItem(i_itemID)) { @@ -15873,7 +15998,8 @@ void daAlink_c::itemUnequip(u16 i_itemID, f32 i_playSpeed) { anm_speed = anm_data->mSpeed * i_playSpeed; } - setUpperAnime(anm_id, UPPER_2, anm_speed, anm_data->mStartFrame, anm_data->mEndFrame, anm_data->mInterpolation); + setUpperAnime(anm_id, UPPER_2, anm_speed, anm_data->mStartFrame, anm_data->mEndFrame, + anm_data->mInterpolation); } #else #pragma push @@ -15893,7 +16019,9 @@ bool daAlink_c::checkFastUnequip() { /* 800B983C-800B994C 0B417C 0110+00 10/10 0/0 0/0 .text allUnequip__9daAlink_cFi */ void daAlink_c::allUnequip(int param_0) { - if (i_checkNoResetFlg2(FLG2_UNK_1) && param_0 != 0 && !checkCanoeRide() && mEquipItem != KANTERA) { + if (i_checkNoResetFlg2(FLG2_UNK_1) && param_0 != 0 && !checkCanoeRide() && + mEquipItem != KANTERA) + { for (u8 i = 0; i < 2; i++) { if (dComIfGp_getSelectItem(i) == KANTERA) { mSelectItemId = i; @@ -15917,17 +16045,20 @@ void daAlink_c::allUnequip(int param_0) { /* 800B994C-800B9D2C 0B428C 03E0+00 8/8 0/0 0/0 .text checkItemChangeFromButton__9daAlink_cFv */ BOOL daAlink_c::checkItemChangeFromButton() { if (i_checkModeFlg(4) && !checkEquipAnime() && !checkBoomerangThrowAnime() && - !checkCopyRodThrowAnime() && !checkKandelaarSwingAnime() && !checkKandelaarSwingAnime()) { - - if (dComIfGs_getSelectEquipSword() != NO_ITEM && !checkNotBattleStage() && !checkCanoeRide() && - (!i_checkModeFlg(0x40000) || i_checkEquipHeavyBoots()) && mEquipItem != 0x103 && swordTrigger()) { + !checkCopyRodThrowAnime() && !checkKandelaarSwingAnime() && !checkKandelaarSwingAnime()) + { + if (dComIfGs_getSelectEquipSword() != NO_ITEM && !checkNotBattleStage() && + !checkCanoeRide() && (!i_checkModeFlg(0x40000) || i_checkEquipHeavyBoots()) && + mEquipItem != 0x103 && swordTrigger()) + { if (i_checkEndResetFlg1(ERFLG1_UNK_40000000)) { return 0; } swordEquip(1); } else if (checkCanoeRide() && !checkStageName("F_SP103") && !checkCanoeSlider() && - !checkFisingRodLure() && swordTrigger()) { + !checkFisingRodLure() && swordTrigger()) + { itemEquip(0x105); } else { u8 i; @@ -15941,13 +16072,16 @@ BOOL daAlink_c::checkItemChangeFromButton() { if (doTrigger() && i_dComIfGp_getDoStatus() == 4) { if (mEquipItem != KANTERA && i_checkNoResetFlg2(FLG2_UNK_1)) { offKandelaarModel(); - } else if (mSwordFlourishTimer != 0 && mEquipItem == 0x103 && !checkWoodSwordEquip() && !i_checkModeFlg(0x402)) { + } else if (mSwordFlourishTimer != 0 && mEquipItem == 0x103 && + !checkWoodSwordEquip() && !i_checkModeFlg(0x402)) + { return procSwordUnequipSpInit(); } else { allUnequip(1); } } else if (mEquipItem == NO_ITEM && mThrowBoomerangAcKeep.getActor() == NULL && - !checkCanoeRide() && checkNoUpperAnime() && i_checkNoResetFlg2(FLG2_UNK_1)) { + !checkCanoeRide() && checkNoUpperAnime() && i_checkNoResetFlg2(FLG2_UNK_1)) + { for (i = 0; i < 2; i++) { if (dComIfGp_getSelectItem(i) == KANTERA) { mSelectItemId = i; @@ -15957,9 +16091,14 @@ BOOL daAlink_c::checkItemChangeFromButton() { itemEquip(KANTERA); i_onNoResetFlg1(FLG1_UNK_40); } else if (mEquipItem != 0x103 && mEquipItem != NO_ITEM && mEquipItem != 0x10B && - mEquipItem != 0x102 && (!checkCanoeRide() || !checkFisingRodLure())) { - if (!checkEventRun() || strcmp(i_dComIfGp_getEventManager().getRunEventName(), "ANGER")) { - if (strcmp(i_dComIfGp_getEventManager().getRunEventName(), "ANGER2") && checkItemSetButton(mEquipItem) == 2) { + mEquipItem != 0x102 && (!checkCanoeRide() || !checkFisingRodLure())) + { + if (!checkEventRun() || + strcmp(i_dComIfGp_getEventManager().getRunEventName(), "ANGER")) + { + if (strcmp(i_dComIfGp_getEventManager().getRunEventName(), "ANGER2") && + checkItemSetButton(mEquipItem) == 2) + { allUnequip(1); } } @@ -15990,9 +16129,10 @@ BOOL daAlink_c::checkNextActionFromButton() { } } else if (!i_checkModeFlg(0x40000)) { if ((i_checkWolf() && !checkWolfGrabAnime()) || - (!i_checkWolf() && getCopyRodControllActor() == NULL && (checkEquipAnime() || - i_checkNoResetFlg0(FLG0_UNK_1000000) || checkUpperGuardAnime() || - checkIronBallWaitAnime() || checkNoUpperAnime()))) { + (!i_checkWolf() && getCopyRodControllActor() == NULL && + (checkEquipAnime() || i_checkNoResetFlg0(FLG0_UNK_1000000) || checkUpperGuardAnime() || + checkIronBallWaitAnime() || checkNoUpperAnime()))) + { decideDoStatus(); if (checkNormalAction()) { @@ -16030,7 +16170,9 @@ BOOL daAlink_c::checkNextActionFromButton() { /* 800B9F50-800BA09C 0B4890 014C+00 14/14 0/0 0/0 .text checkGroundSpecialMode__9daAlink_cFv */ BOOL daAlink_c::checkGroundSpecialMode() { - if (mLinkAcch.ChkGroundHit() && !i_checkModeFlg(MODE_PLAYER_FLY) && !i_checkMagneBootsOn() && i_checkEndResetFlg0(ERFLG0_UNK_2)) { + if (mLinkAcch.ChkGroundHit() && !i_checkModeFlg(MODE_PLAYER_FLY) && !i_checkMagneBootsOn() && + i_checkEndResetFlg0(ERFLG0_UNK_2)) + { return procCoMetamorphoseInit(); } @@ -16097,12 +16239,18 @@ int daAlink_c::checkNextAction(int param_0) { } u32 procID = mProcID; - if (procID != PROC_MOVE_TURN && (param_0 == 0 || checkInputOnR()) && (procID != PROC_HOOKSHOT_MOVE || checkHookshotWait())) { + if (procID != PROC_MOVE_TURN && (param_0 == 0 || checkInputOnR()) && + (procID != PROC_HOOKSHOT_MOVE || checkHookshotWait())) + { if (mTargetedActor != NULL || i_checkAttentionLock()) { setSpeedAndAngleAtn(); } else if (((!checkUpperReadyThrowAnime() || mFastShotTime != 0) || - (checkBoomerangThrowAnime() && (mThrowBoomerangAcKeep.getActor() != NULL || mEquipItem == 0x102 || i_checkNoResetFlg1(FLG1_UNK_2)))) || - (checkCopyRodThrowAnime() && (mCopyRodAcKeep.getActor() != NULL || i_checkNoResetFlg1(FLG1_UNK_10000)))) { + (checkBoomerangThrowAnime() && + (mThrowBoomerangAcKeep.getActor() != NULL || mEquipItem == 0x102 || + i_checkNoResetFlg1(FLG1_UNK_2)))) || + (checkCopyRodThrowAnime() && + (mCopyRodAcKeep.getActor() != NULL || i_checkNoResetFlg1(FLG1_UNK_10000)))) + { setSpeedAndAngleNormal(); } } @@ -16124,7 +16272,9 @@ int daAlink_c::checkNextAction(int param_0) { field_0x594 = daAlinkHIO_move_c0::m.mMaxSpeed; } - if (i_checkEndResetFlg0(ERFLG0_UNK_100000) && mLinkAcch.ChkGroundHit() && !i_checkModeFlg(MODE_PLAYER_FLY)) { + if (i_checkEndResetFlg0(ERFLG0_UNK_100000) && mLinkAcch.ChkGroundHit() && + !i_checkModeFlg(MODE_PLAYER_FLY)) + { return procFloorDownReboundInit(); } @@ -16166,7 +16316,7 @@ int daAlink_c::checkNextAction(int param_0) { } } else { field_0x2f98 = 4; - + if (checkZeroSpeedF()) { if (cLib_distanceAngleS(field_0x2fe2, current.angle.y) > 0x7800 && checkInputOnR()) { ret = procWaitTurnInit(); @@ -16179,13 +16329,17 @@ int daAlink_c::checkNextAction(int param_0) { } else if (mProcID == PROC_MOVE_TURN && current.angle.y != shape_angle.y) { ret = procMoveTurnInit(0); } else if (checkInputOnR() && cLib_distanceAngleS(field_0x2fe2, current.angle.y) > 0x7800) { - if (speedF / field_0x594 > daAlinkHIO_move_c0::m.mSlideThresholdSpeed && field_0x2fa8 != 8 && - !checkGrabAnime() && getDirectionFromAngle(mPrevStickAngle - mStickAngle) == DIR_BACKWARD) { + if (speedF / field_0x594 > daAlinkHIO_move_c0::m.mSlideThresholdSpeed && + field_0x2fa8 != 8 && !checkGrabAnime() && + getDirectionFromAngle(mPrevStickAngle - mStickAngle) == DIR_BACKWARD) + { ret = procSlipInit(); } else { ret = procMoveTurnInit(1); } - } else if (checkInputOnR() && getDirectionFromAngle(field_0x2fe2 - current.angle.y) == DIR_BACKWARD) { + } else if (checkInputOnR() && + getDirectionFromAngle(field_0x2fe2 - current.angle.y) == DIR_BACKWARD) + { ret = procMoveTurnInit(1); } else { ret = procMoveInit(); @@ -16231,7 +16385,7 @@ asm void daAlink_c::setItemAction() { #pragma pop /* 800BAF08-800BAF80 0B5848 0078+00 2/2 0/0 0/0 .text checkNextActionFromCrouch__9daAlink_cFi */ -bool daAlink_c::checkNextActionFromCrouch(int param_0) { +BOOL daAlink_c::checkNextActionFromCrouch(int param_0) { if (checkNextAction(param_0)) { if (field_0x2f8c == 1 || field_0x2f8c == 2 || field_0x2f8c == 3) { field_0x2060->initOldFrameMorf(daAlinkHIO_crouch_c0::m.mStandInterpolation, 0, 0x23); @@ -16246,7 +16400,8 @@ bool daAlink_c::checkNextActionFromCrouch(int param_0) { /* 800BAF80-800BB020 0B58C0 00A0+00 18/18 0/0 0/0 .text checkUpperReadyThrowAnime__9daAlink_cCFv */ int daAlink_c::checkUpperReadyThrowAnime() const { - return checkBoomerangAnime() || checkCopyRodAnime() || checkHookshotAnime() || checkIronBallAnime() || checkBowAnime(); + return checkBoomerangAnime() || checkCopyRodAnime() || checkHookshotAnime() || + checkIronBallAnime() || checkBowAnime(); } /* 800BB020-800BB084 0B5960 0064+00 2/2 0/0 0/0 .text getBodyAngleXBasePos__9daAlink_cFP4cXyz */ @@ -16302,7 +16457,7 @@ void daAlink_c::setMagicArmorBrk(int param_0) { mMagicArmorHeadBrk->searchUpdateMaterialID(head_model_data); head_model_data->entryTevRegAnimator(mMagicArmorHeadBrk); mMagicArmorHeadBrk->setFrame(FLOAT_LABEL(lit_6108)); - + field_0x2fd7 = param_0; } @@ -16324,7 +16479,8 @@ BOOL daAlink_c::checkHeavyStateOn(int param_0, int param_1) { if (!checkEventRun()) { if ((param_1 != 0 && mSinkShapeOffset < lit_14614) || (param_0 != 0 && checkIronBallWaitAnime()) || checkIronBallAnime() || - checkMagicArmorHeavy() || getHeavyStateAndBoots()) { + checkMagicArmorHeavy() || getHeavyStateAndBoots()) + { return true; } } @@ -16333,7 +16489,9 @@ BOOL daAlink_c::checkHeavyStateOn(int param_0, int param_1) { /* 800BB560-800BB644 0B5EA0 00E4+00 1/0 0/0 0/0 .text setOutPower__9daAlink_cFfsi */ void daAlink_c::setOutPower(f32 param_0, s16 param_1, int param_2) { - if (!i_checkFmChainGrabAnime() || !checkBossRoom() || fopAcM_GetRoomNo(this) != 50 || !i_checkEquipHeavyBoots()) { + if (!i_checkFmChainGrabAnime() || !checkBossRoom() || fopAcM_GetRoomNo(this) != 50 || + !i_checkEquipHeavyBoots()) + { field_0x3400 += param_0 * cM_ssin(param_1); field_0x3404 += param_0 * cM_scos(param_1); @@ -16443,7 +16601,7 @@ SECTION_SDATA2 static f32 lit_70084 = 2.25f; #ifdef NONMATCHING void daAlink_c::posMove() { cXyz sp108; - + f32 temp_f30 = cM_ssin(shape_angle.y); f32 temp_f29 = cM_scos(shape_angle.y); @@ -16456,8 +16614,9 @@ void daAlink_c::posMove() { s16 var_r26; if (i_checkModeFlg(MODE_SWIMMING)) { var_r26 = field_0x3080; - } else if (!mLinkAcch.ChkGroundHit() || i_checkMagneBootsOn() || (i_checkModeFlg(MODE_PLAYER_FLY) && - !checkBoardRide()) || field_0x3174 == 8) { + } else if (!mLinkAcch.ChkGroundHit() || i_checkMagneBootsOn() || + (i_checkModeFlg(MODE_PLAYER_FLY) && !checkBoardRide()) || field_0x3174 == 8) + { var_r26 = 0; } else { var_r26 = getGroundAngle(&mLinkAcch.m_gnd, current.angle.y); @@ -16490,7 +16649,8 @@ void daAlink_c::posMove() { } if (mProcID == PROC_AUTO_JUMP && checkGrabGlide() && - (field_0xC04[0].ChkTgHit() || field_0xC04[1].ChkTgHit() || field_0xC04[2].ChkTgHit())) { + (field_0xC04[0].ChkTgHit() || field_0xC04[1].ChkTgHit() || field_0xC04[2].ChkTgHit())) + { speedF *= 0.5f; } @@ -16503,16 +16663,22 @@ void daAlink_c::posMove() { } BOOL eventRunning = checkEventRun(); - if (!i_checkEquipHeavyBoots() && mLinkAcch.ChkGroundHit() && !i_checkModeFlg(0x40) && !eventRunning) { + if (!i_checkEquipHeavyBoots() && mLinkAcch.ChkGroundHit() && !i_checkModeFlg(0x40) && + !eventRunning) + { if (checkLv2MiddleBossBgRide(getMoveBGActorName(mLinkAcch.m_gnd, 0))) { cM3dGPla plane; dComIfG_Bgsp().GetTriPla(mLinkAcch.m_gnd, &plane); f32 temp_f0 = cM_sht2d(cM_atan2s(plane.mNormal.absXZ(), plane.mNormal.y)); - if (temp_f0 >= daAlinkHIO_slide_c0::m.mLV2MinibossFloorWeakSlideAngle && temp_f0 <= daAlinkHIO_slide_c0::m.mLV2MinibossFloorSlideAngle) { - temp_f0 = ((temp_f0 - daAlinkHIO_slide_c0::m.mLV2MinibossFloorWeakSlideAngle) * daAlinkHIO_slide_c0::m.mLV2MinibossFloorWeakSlideSpeed) / - (daAlinkHIO_slide_c0::m.mLV2MinibossFloorSlideAngle - daAlinkHIO_slide_c0::m.mLV2MinibossFloorWeakSlideAngle); + if (temp_f0 >= daAlinkHIO_slide_c0::m.mLV2MinibossFloorWeakSlideAngle && + temp_f0 <= daAlinkHIO_slide_c0::m.mLV2MinibossFloorSlideAngle) + { + temp_f0 = ((temp_f0 - daAlinkHIO_slide_c0::m.mLV2MinibossFloorWeakSlideAngle) * + daAlinkHIO_slide_c0::m.mLV2MinibossFloorWeakSlideSpeed) / + (daAlinkHIO_slide_c0::m.mLV2MinibossFloorSlideAngle - + daAlinkHIO_slide_c0::m.mLV2MinibossFloorWeakSlideAngle); plane.mNormal.y = 0.0f; plane.mNormal.normalizeZP(); @@ -16528,7 +16694,9 @@ void daAlink_c::posMove() { if (i_checkNoResetFlg0(FLG0_UNK_100) && mProcID != PROC_SWIM_DIVE) { current.pos.y = mWaterY; - } else if (mDemo.getDemoType() == 4 || mProcID == PROC_ELEC_DAMAGE || i_dComIfGp_checkPlayerStatus0(0, 0x10)) { + } else if (mDemo.getDemoType() == 4 || mProcID == PROC_ELEC_DAMAGE || + i_dComIfGp_checkPlayerStatus0(0, 0x10)) + { speed.y = 0.0f; } else if (i_checkWolf()) { if (checkHeavyStateOn(1, 1)) { @@ -16546,7 +16714,8 @@ void daAlink_c::posMove() { } } else if (!i_checkEquipHeavyBoots() && getZoraSwim()) { speed.y = -var_f31 * cM_ssin(var_r26); - } else if ((checkBootsOrArmorHeavy() && mProcID != PROC_DEAD) || mProcID == PROC_SWIM_DIVE) { + } else if ((checkBootsOrArmorHeavy() && mProcID != PROC_DEAD) || mProcID == PROC_SWIM_DIVE) + { speed.y += mGravity; if (speed.y < mMaxFallSpeed) { @@ -16557,7 +16726,9 @@ void daAlink_c::posMove() { } else if (speed.y < mMaxFallSpeed) { speed.y += 1.0f; } else { - if (checkZoraWearAbility() && mWaterY > current.pos.y + daAlinkHIO_swim_c0::m.mNormalFloatDepth) { + if (checkZoraWearAbility() && + mWaterY > current.pos.y + daAlinkHIO_swim_c0::m.mNormalFloatDepth) + { speed.y += daAlinkHIO_swim_c0::m.mZoraFloatDepth; if (speed.y < 0.0f) { @@ -16572,7 +16743,9 @@ void daAlink_c::posMove() { } } } else if (!i_checkModeFlg(0x400)) { - if (checkHeavyStateOn(1, 1) && mProcID != PROC_SPINNER_READY && !i_checkNoResetFlg0(FLG0_UNDERWATER)) { + if (checkHeavyStateOn(1, 1) && mProcID != PROC_SPINNER_READY && + !i_checkNoResetFlg0(FLG0_UNDERWATER)) + { speed.y += mGravity * 2.25f; if (speed.y < mMaxFallSpeed * 1.5f) { @@ -16679,7 +16852,9 @@ void daAlink_c::posMove() { current.pos.y += temp_f31 - temp_f1; } } else if (!eventRunning && (mProcID == PROC_HANG_MOVE || mProcID == PROC_CLIMB_MOVE_SIDE || - mProcID == PROC_CLIMB_MOVE_UPDOWN || mProcID == PROC_CLIMB_WAIT || mProcID == PROC_HANG_WAIT)) { + mProcID == PROC_CLIMB_MOVE_UPDOWN || mProcID == PROC_CLIMB_WAIT || + mProcID == PROC_HANG_WAIT)) + { f32 temp_f31 = field_0x814.GetCCMoveP()->absXZ(); var_r27 = TRUE; @@ -16696,7 +16871,7 @@ void daAlink_c::posMove() { if (i_checkModeFlg(MODE_SWIMMING) && i_checkNoResetFlg0(FLG0_UNK_100)) { cXyz sp84 = current.pos - field_0x3798; - + f32 temp_f3 = sp84.absXZ(); s16 gnd_angle = getGroundAngle(&mLinkAcch.m_wtr, sp84.atan2sX_Z()); temp_f3 *= cM_ssin(gnd_angle); @@ -16800,7 +16975,9 @@ void daAlink_c::posMove() { } else if (var_r27) { cXyz sp9C = cXyz::Zero; - if (hangMoveBgCheck(shape_angle.y + 0x4000, &sp9C) || hangMoveBgCheck(shape_angle.y - 0x4000, &sp9C)) { + if (hangMoveBgCheck(shape_angle.y + 0x4000, &sp9C) || + hangMoveBgCheck(shape_angle.y - 0x4000, &sp9C)) + { current.pos.x += sp9C.x; current.pos.z += sp9C.z; } @@ -16846,7 +17023,8 @@ bool daAlink_c::startPeepChange() { dComIfGs_setTurnRestart(current.pos, shape_angle.y, roomNo, param); } - dStage_changeScene(mPeepExitID, FLOAT_LABEL(lit_6108), mode, fopAcM_GetRoomNo(this), shape_angle.y, -1); + dStage_changeScene(mPeepExitID, FLOAT_LABEL(lit_6108), mode, fopAcM_GetRoomNo(this), + shape_angle.y, -1); return 1; } @@ -16907,7 +17085,9 @@ void daAlink_c::setLastSceneMode(u32* o_mode) { // matches with literals #ifdef NONMATCHING int daAlink_c::startRestartRoom(u32 i_mode, int param_1, int i_dmgAmount, int i_eventRun) { - if (!i_checkNoResetFlg0(FLG0_UNK_4000) && (i_eventRun != 0 || dComIfGp_event_compulsory(this, NULL, 0xFFFF))) { + if (!i_checkNoResetFlg0(FLG0_UNK_4000) && + (i_eventRun != 0 || dComIfGp_event_compulsory(this, NULL, 0xFFFF))) + { if (!checkRestartDead(i_dmgAmount, i_mode == 4)) { i_onNoResetFlg0(FLG0_UNK_4000); @@ -16918,21 +17098,25 @@ int daAlink_c::startRestartRoom(u32 i_mode, int param_1, int i_dmgAmount, int i_ u32 tmp = getStartMode(); int start_mode = tmp; - if ((start_mode != 13 && start_mode != 2 && start_mode != 14) || checkFinalBattle() || field_0x3780.abs(dComIfGs_getRestartRoomPos()) > 0.1f) { + if ((start_mode != 13 && start_mode != 2 && start_mode != 14) || checkFinalBattle() || + field_0x3780.abs(dComIfGs_getRestartRoomPos()) > 0.1f) + { start_mode = 0; } // event flag 0x2008 = cleared snowpeak ruins if (!i_dComIfGs_isEventBit(0x2008) && (checkBoardRide() || checkBoardRestart())) { i_mode = 11; - } else if (i_checkBoarSingleBattle() || (start_mode == 2 && !checkFinalBattle() && i_mode == 5)) { + } else if (i_checkBoarSingleBattle() || + (start_mode == 2 && !checkFinalBattle() && i_mode == 5)) + { i_mode = 8; } setLastSceneDamage(i_dmgAmount, &i_mode); u32 params = setParamData(dComIfGs_getRestartRoomNo(), start_mode, param_1, 0); dStage_restartRoom(params, i_mode, 0); - + if (mProcID != PROC_DEAD) { seStartSystem(Z2SE_FORCE_BACK); } @@ -16957,7 +17141,8 @@ asm int daAlink_c::startRestartRoom(u32 param_0, int param_1, int param_2, int p /* 800BE26C-800BE2C0 0B8BAC 0054+00 2/2 0/0 0/0 .text checkCoachGuardGame__9daAlink_cFv */ BOOL daAlink_c::checkCoachGuardGame() { - return !i_checkBoarSingleBattle() && fopAcIt_Judge((fopAcIt_JudgeFunc)daAlink_searchCoach, NULL); + return !i_checkBoarSingleBattle() && + fopAcIt_Judge((fopAcIt_JudgeFunc)daAlink_searchCoach, NULL); } /* 800BE2C0-800BE3E4 0B8C00 0124+00 1/1 0/0 0/0 .text checkRoofRestart__9daAlink_cFv */ @@ -16972,9 +17157,12 @@ void daAlink_c::checkRoofRestart() { spinner = NULL; } - if (mLinkAcch.ChkRoofHit() && (mLinkAcch.ChkGroundHit() || - (spinner != NULL && spinner->checkGroundHit() && spinner->getJumpFlg() == 0)) && - !i_checkMagneBootsOn() && (mProcID != PROC_CRAWL_START && mProcID != PROC_CRAWL_END && !checkCoachGuardGame())) { + if (mLinkAcch.ChkRoofHit() && + (mLinkAcch.ChkGroundHit() || + (spinner != NULL && spinner->checkGroundHit() && spinner->getJumpFlg() == 0)) && + !i_checkMagneBootsOn() && + (mProcID != PROC_CRAWL_START && mProcID != PROC_CRAWL_END && !checkCoachGuardGame())) + { s16 ac_name = getMoveBGActorName(mLinkAcch.m_roof, 1); if (ac_name == PROC_OBJ_SO || ac_name == PROC_Obj_SCannon) { return; @@ -17053,7 +17241,8 @@ int daAlink_c::checkSceneChange(int exitID) { (i_checkModeFlg(0x40000) || i_checkModeFlg(0x400) || mLinkAcch.ChkGroundHit() || mProcID == PROC_DOOR_OPEN || mProcID == PROC_WARP || mProcID == PROC_WOLF_DIG_THROUGH || (field_0x3174 == 5 && field_0x33c8 - current.pos.y > 500.0f))) || - (mExitID & 0x8000 && i_checkModeFlg(2))) { + (mExitID & 0x8000 && i_checkModeFlg(2))) + { if (field_0x3174 == 5 || (mExitID & 0x8000 && mExitDirection == 0xFF)) { mLinkAcch.i_ClrGroundHit(); } @@ -17073,7 +17262,8 @@ int daAlink_c::checkSceneChange(int exitID) { fpoAcM_relativePos(hStop, ¤t.pos, &sp8); if (sp8.y >= -200.0f && sp8.y <= hStop->mScale.y + 600.0f && - fabsf(sp8.x) <= hStop->mScale.x && fabsf(sp8.z) <= hStop->mScale.z) { + fabsf(sp8.x) <= hStop->mScale.x && fabsf(sp8.z) <= hStop->mScale.z) + { return 0; } } @@ -17130,7 +17320,8 @@ int daAlink_c::checkSceneChange(int exitID) { if (mEvtInfo.i_checkCommandDoor() || mProcID == PROC_WARP || mProcID == WOLF_DIG || mProcID == PROC_WOLF_DIG_THROUGH || field_0x3106 != 0 || - dComIfGp_event_compulsory(this, NULL, -1)) { + dComIfGp_event_compulsory(this, NULL, -1)) + { s32 sceneChanged = 0; if (var_r3) { @@ -17151,9 +17342,8 @@ int daAlink_c::checkSceneChange(int exitID) { field_0x2f58 = dPath_GetRoomPath(mExitDirection, fopAcM_GetRoomNo(this)); } } else { - sceneChanged = - dStage_changeSceneExitId(mLinkAcch.m_gnd, exitSpeed, exitMode, - fopAcM_GetRoomNo(this), shape_angle.y); + sceneChanged = dStage_changeSceneExitId(mLinkAcch.m_gnd, exitSpeed, exitMode, + fopAcM_GetRoomNo(this), shape_angle.y); field_0x2f58 = dPath_GetRoomPath(dComIfG_Bgsp().GetRoomPathId(mLinkAcch.m_gnd), fopAcM_GetRoomNo(this)); } @@ -17282,13 +17472,14 @@ asm BOOL daAlink_c::checkSightLine(f32 param_0, cXyz* param_1) { /* 800BF79C-800BF854 0BA0DC 00B8+00 2/2 0/0 0/0 .text setMetamorphoseModel__9daAlink_cFi */ void daAlink_c::setMetamorphoseModel(int param_0) { - J3DAnmTransform* bck = (J3DAnmTransform*)mAnmHeap9.loadDataIdx(param_0 != 0 ? (u16)0x27C : (u16)0x27D); + J3DAnmTransform* bck = + (J3DAnmTransform*)mAnmHeap9.loadDataIdx(param_0 != 0 ? (u16)0x27C : (u16)0x27D); JKRHeap* heap = setItemHeap(); J3DModelData* model_data = loadAramBmd(0x31B, 0x6000); mHeldItemModel = initModel(model_data, 0); field_0x730.init(bck, 0, 2, lit_6040, 0, -1, false); - + mDoExt_setCurrentHeap(heap); mEquipItem = 0x106; field_0x33dc = mUnderFrameCtrl[0].getFrame(); @@ -17359,8 +17550,8 @@ BOOL daAlink_c::setItemModel() { #ifdef NONMATCHING BOOL daAlink_c::setItemActor() { if (mEquipItem == BOOMERANG) { - fopAc_ac_c* actor = (fopAc_ac_c*)fopAcM_fastCreate(PROC_BOOMERANG, 0, ¤t.pos, - -1, NULL, NULL, -1, NULL, NULL); + fopAc_ac_c* actor = (fopAc_ac_c*)fopAcM_fastCreate(PROC_BOOMERANG, 0, ¤t.pos, -1, + NULL, NULL, -1, NULL, NULL); if (actor == NULL) { deleteEquipItem(FALSE, FALSE); return 0; @@ -17372,8 +17563,8 @@ BOOL daAlink_c::setItemActor() { } if (mEquipItem == COPY_ROD) { - fopAc_ac_c* actor = (fopAc_ac_c*)fopAcM_fastCreate(PROC_CROD, 0, ¤t.pos, -1, - NULL, NULL, -1, NULL, NULL); + fopAc_ac_c* actor = (fopAc_ac_c*)fopAcM_fastCreate(PROC_CROD, 0, ¤t.pos, -1, NULL, + NULL, -1, NULL, NULL); if (actor == NULL) { deleteEquipItem(FALSE, FALSE); return 0; @@ -17415,7 +17606,8 @@ BOOL daAlink_c::setItemActor() { if (checkBombItem(mEquipItem)) { if (checkHorseRide()) { if (!i_dComIfGp_getHorseActor()->checkNoBombProc() && - (mProcID != PROC_HORSE_TURN || !i_checkModeFlg(MODE_DISABLE_ITEMS))) { + (mProcID != PROC_HORSE_TURN || !i_checkModeFlg(MODE_DISABLE_ITEMS))) + { mEquipItem = NO_ITEM; return 1; } @@ -17484,13 +17676,14 @@ BOOL daAlink_c::checkMagicArmorWearAbility() const { J3DModelData* daAlink_c::loadAramBmd(u16 i_resID, u32 i_bufSize) { JKRArchive* anm_arc = dComIfGp_getAnmArchive(); u8* tmpBuffer = new (0x20) u8[i_bufSize]; - + anm_arc->readIdxResource(tmpBuffer, i_bufSize, i_resID); u32 type = 'BMWR'; JKRArchive::SDIDirEntry* dir = anm_arc->mNodes; for (int i = 0; i < anm_arc->countDirectory(); i++) { - if (i_resID >= dir->first_file_index && i_resID < dir->first_file_index + dir->num_entries) { + if (i_resID >= dir->first_file_index && i_resID < dir->first_file_index + dir->num_entries) + { type = dir->type; break; } @@ -17511,7 +17704,7 @@ void* daAlink_c::loadAram(u16 i_resID, u32 i_bufSize) { J3DAnmTevRegKey* daAlink_c::loadAramItemBrk(u16 i_resID, J3DModel* i_model) { J3DModelData* model_data = i_model->getModelData(); J3DAnmTevRegKey* brk = (J3DAnmTevRegKey*)loadAram(i_resID, 0x400); - + brk->setFrame(FLOAT_LABEL(lit_6108)); brk->searchUpdateMaterialID(model_data); model_data->entryTevRegAnimator(brk); @@ -17523,7 +17716,7 @@ J3DAnmTevRegKey* daAlink_c::loadAramItemBrk(u16 i_resID, J3DModel* i_model) { J3DAnmTextureSRTKey* daAlink_c::loadAramItemBtk(u16 i_resID, J3DModel* i_model) { J3DModelData* model_data = i_model->getModelData(); J3DAnmTextureSRTKey* btk = (J3DAnmTextureSRTKey*)loadAram(i_resID, 0x400); - + btk->setFrame(FLOAT_LABEL(lit_6108)); btk->searchUpdateMaterialID(model_data); model_data->entryTexMtxAnimator(btk); @@ -17535,7 +17728,7 @@ J3DAnmTextureSRTKey* daAlink_c::loadAramItemBtk(u16 i_resID, J3DModel* i_model) J3DAnmTexPattern* daAlink_c::loadAramItemBtp(u16 i_resID, J3DModel* i_model) { J3DModelData* model_data = i_model->getModelData(); J3DAnmTexPattern* btp = (J3DAnmTexPattern*)loadAram(i_resID, 0x400); - + btp->setFrame(FLOAT_LABEL(lit_6108)); btp->searchUpdateMaterialID(model_data); model_data->entryTexNoAnimator(btp); @@ -17682,7 +17875,8 @@ bool daAlink_c::checkCastleTownUseItem(u16 item_id) { (checkRoomSpecial() && (item_id == EMPTY_BOTTLE || checkDungeonWarpItem(item_id))) || (checkStageName("R_SP128") && item_id == COPY_ROD) || (checkLv2DungeonRoomSpecial() && item_id == HVY_BOOTS) || - (checkBottleItem(item_id) && item_id != EMPTY_BOTTLE)) { + (checkBottleItem(item_id) && item_id != EMPTY_BOTTLE)) + { return true; } else { return false; @@ -17764,14 +17958,13 @@ asm void daAlink_c::setLight() { #pragma pop /* 800C1CEC-800C1DAC 0BC62C 00C0+00 3/3 0/0 0/0 .text setFrontRollCrashShock__9daAlink_cFUc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::setFrontRollCrashShock(u8 param_0) { - nofralloc -#include "asm/d/a/d_a_alink/setFrontRollCrashShock__9daAlink_cFUc.s" +void daAlink_c::setFrontRollCrashShock(u8 param_0) { + f32 tmp_0 = FLOAT_LABEL(lit_6108); + dComIfGp_getVibration().StartShock(5, 15, cXyz(tmp_0, lit_6040, tmp_0)); + + mZ2Link.startLinkSound(Z2SE_AL_BODYATTACK, param_0, mVoiceReverbIntensity); + dKy_Sound_set(current.pos, 100, fopAcM_GetID(this), 5); } -#pragma pop /* 800C1DAC-800C1DE0 0BC6EC 0034+00 1/0 0/0 0/0 .text getModelJointMtx__9daAlink_cFUs */ MtxP daAlink_c::getModelJointMtx(u16 param_0) { @@ -17881,7 +18074,9 @@ void daAlink_c::commonProcInit(daAlink_c::daAlink_PROC i_procID) { resetWolfBallGrab(); } else if (mProcID == PROC_CHAIN_STRONG_PULL) { mNowAnmPackUpper[2].setRatio(0.0f); - } else if (mProcID == PROC_SCREAM_WAIT || mProcID == PROC_WOLF_SCREAM_WAIT || mProcID == PROC_ELEC_DAMAGE) { + } else if (mProcID == PROC_SCREAM_WAIT || mProcID == PROC_WOLF_SCREAM_WAIT || + mProcID == PROC_ELEC_DAMAGE) + { dComIfGp_getVibration().StopQuake(0x1F); } else if (mProcID == PROC_GUARD_BREAK) { field_0x814.SetTgApid(-1); @@ -17898,7 +18093,9 @@ void daAlink_c::commonProcInit(daAlink_c::daAlink_PROC i_procID) { bool flg_400_set = checkModeFlag(0x400); if (flg_400_set && !checkBoardRide() && !checkSpinnerRide()) { field_0x2f99 = 0xA0; - } else if (checkModeFlg(0x40840) || mProcID == PROC_BOSS_BODY_HANG || mProcID == PROC_WOLF_CHAIN_WAIT) { + } else if (checkModeFlg(0x40840) || mProcID == PROC_BOSS_BODY_HANG || + mProcID == PROC_WOLF_CHAIN_WAIT) + { field_0x2f99 = 0x70; } @@ -17940,7 +18137,11 @@ void daAlink_c::commonProcInit(daAlink_c::daAlink_PROC i_procID) { } } - if (temp_r31 && (mItemAcKeep.getActor() == NULL || mItemAcKeep.getActor()->mEvtInfo.i_checkCommandDemoAccrpt()) && !i_checkEndResetFlg0(ERFLG0_UNK_1000)) { + if (temp_r31 && + (mItemAcKeep.getActor() == NULL || + mItemAcKeep.getActor()->mEvtInfo.i_checkCommandDemoAccrpt()) && + !i_checkEndResetFlg0(ERFLG0_UNK_1000)) + { deleteEquipItem(0, 0); resetUpperAnime(UPPER_2, -1.0f); } @@ -18134,7 +18335,9 @@ void daAlink_c::commonProcInit(daAlink_c::daAlink_PROC i_procID) { } if (flg_20000_set && !i_checkModeFlg(MODE_SWIMMING)) { - if (mProcID != PROC_CAUGHT && mProcID != PROC_HOOKSHOT_FLY && !i_checkNoResetFlg0(FLG0_UNDERWATER)) { + if (mProcID != PROC_CAUGHT && mProcID != PROC_HOOKSHOT_FLY && + !i_checkNoResetFlg0(FLG0_UNDERWATER)) + { swimOutAfter(0); } } @@ -18229,14 +18432,33 @@ asm void daAlink_c::setGoatStopGameFail(fopAc_ac_c* param_0) { #pragma pop /* 800E9344-800E9434 0E3C84 00F0+00 1/1 0/0 0/0 .text procGoatMoveInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procGoatMoveInit() { - nofralloc -#include "asm/d/a/d_a_alink/procGoatMoveInit__9daAlink_cFv.s" +int daAlink_c::procGoatMoveInit() { + if (!commonProcInitNotSameProc(PROC_GOAT_MOVE)) { + return 0; + } + + if (checkZeroSpeedF()) { + onModeFlg(1); + } + + mNormalSpeed = FLOAT_LABEL(lit_6108); + field_0x37c8 = current.pos; + field_0x2f98 = 3; + current.angle.y = shape_angle.y + -0x4000; + field_0x594 = daAlinkHIO_atnMove_c0::m.mMaxSpeed; + + setSingleAnimeBase(ANM_ATN_COW); + field_0x300c = 0; + + fopAc_ac_c* goat_p = (fopAc_ac_c*)fopAcIt_Judge((fopAcIt_JudgeFunc)daAlink_searchGoat, NULL); + if (goat_p != NULL) { + field_0x280c.setData(goat_p); + } + + field_0x300e = 0; + deleteEquipItem(FALSE, FALSE); + return 1; } -#pragma pop /* 800E9434-800E9894 0E3D74 0460+00 1/0 0/0 0/0 .text procGoatMove__9daAlink_cFv */ #pragma push @@ -18284,7 +18506,7 @@ int daAlink_c::procGoatStroke() { if (mUnderFrameCtrl[0].checkAnmEnd()) { checkNextAction(0); } - + return 1; } @@ -18365,7 +18587,9 @@ void daAlink_c::commonWaitTurnInit() { /* 80120474-80120500 11ADB4 008C+00 2/1 0/0 0/0 .text commonGrabPutInit__9daAlink_cFv */ int daAlink_c::commonGrabPutInit() { if (mGrabItemAcKeep.getActor() == NULL) { - if (mProcID != PROC_GRAB_STAND && (mProcID != PROC_WOLF_GRAB_PUT || !(mUnderFrameCtrl[0].getFrame() < field_0x3478))) { + if (mProcID != PROC_GRAB_STAND && + (mProcID != PROC_WOLF_GRAB_PUT || !(mUnderFrameCtrl[0].getFrame() < field_0x3478))) + { dComIfGp_evmng_cutEnd(field_0x3184); return 1; } @@ -18550,7 +18774,8 @@ int daAlink_c::loadShieldModelDVD() { field_0x0648->freeAll(); setShieldArcName(); } else if (mShieldChangeWaitTimer == 1) { - if (dComIfG_resLoad(&mShieldPhaseReq, mShieldArcName, field_0x0648) == cPhs_COMPLEATE_e) { + if (dComIfG_resLoad(&mShieldPhaseReq, mShieldArcName, field_0x0648) == cPhs_COMPLEATE_e) + { mShieldChangeWaitTimer = 0; setShieldModel(); } else { diff --git a/src/d/a/d_a_alink_bottle.inc b/src/d/a/d_a_alink_bottle.inc index bc0d22c6f7..05393eb67f 100644 --- a/src/d/a/d_a_alink_bottle.inc +++ b/src/d/a/d_a_alink_bottle.inc @@ -1,3 +1,5 @@ +#include "d/d_insect.h" + /* 8010E48C-8010E52C 108DCC 00A0+00 1/1 0/0 0/0 .text bottleModelCallBack__9daAlink_cFv */ int daAlink_c::bottleModelCallBack() { @@ -322,7 +324,8 @@ int daAlink_c::procBottleGet() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dInsect_c::Insect_Release() { +// asm void dInsect_c::Insect_Release() { +extern "C" asm void Insect_Release__9dInsect_cFv() { nofralloc #include "asm/d/a/d_a_alink/Insect_Release__9dInsect_cFv.s" } diff --git a/src/d/a/d_a_alink_bow.inc b/src/d/a/d_a_alink_bow.inc index aa5c3b0b36..6d57df109c 100644 --- a/src/d/a/d_a_alink_bow.inc +++ b/src/d/a/d_a_alink_bow.inc @@ -129,7 +129,8 @@ void daAlink_c::deleteArrow() { if (arrow != NULL && fopAcM_GetName(arrow) == PROC_ARROW) { if (arrow->checkBombArrow() && - (mDamageTimer == daAlinkHIO_damage_c0::m.mInvincibleTime || i_checkModeFlg(8))) { + (mDamageTimer == daAlinkHIO_damage_c0::m.mInvincibleTime || i_checkModeFlg(8))) + { arrow->setBombArrowExplode(); dComIfGp_addSelectItemNum(mSelectItemId, -1); dComIfGp_setItemArrowNumCount(-1); @@ -173,7 +174,8 @@ BOOL daAlink_c::cancelBowMoveRideNotAtn() { #pragma optimization_level 2 BOOL daAlink_c::cancelBowMove() { if (mTargetedActor == NULL && !i_checkAttentionLock() && mFastShotTime == 0 && - !checkBowReadyAnime() && (!checkBowShootAnime() || mUpperFrameCtrl[2].checkAnmEnd())) { + !checkBowReadyAnime() && (!checkBowShootAnime() || mUpperFrameCtrl[2].checkAnmEnd())) + { resetUpperAnime(UPPER_2, lit_6041); return true; } @@ -266,6 +268,21 @@ asm int daAlink_c::checkNextActionBow() { #pragma pop /* 800DFAE8-800DFBC8 0DA428 00E0+00 1/1 0/0 0/0 .text setBowModel__9daAlink_cFv */ +// matches with literals +#ifdef NONMATCHING +void daAlink_c::setBowModel() { + J3DAnmTransform* bck = (J3DAnmTransform*)mAnmHeap9.loadDataIdx(0x59); + JKRHeap* old_heap = setItemHeap(); + + mHeldItemModel = initModel(loadAramBmd(0x314, 0x4C00), 0); + field_0x730.init(bck, FALSE, 2, 1.0f, 0, -1, false); + + mDoExt_setCurrentHeap(old_heap); + field_0x33dc = field_0x730.getBckAnm()->getFrameMax() - 0.001f; + field_0x2f95 = 5; + field_0x2f94 = 0x67; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -274,6 +291,7 @@ asm void daAlink_c::setBowModel() { #include "asm/d/a/d_a_alink/setBowModel__9daAlink_cFv.s" } #pragma pop +#endif /* 800DFBC8-800DFC28 0DA508 0060+00 4/4 0/0 0/0 .text checkBowGrabLeftHand__9daAlink_cCFv */ diff --git a/src/d/a/d_a_alink_crawl.inc b/src/d/a/d_a_alink_crawl.inc index fa8986da38..4b5d3b5841 100644 --- a/src/d/a/d_a_alink_crawl.inc +++ b/src/d/a/d_a_alink_crawl.inc @@ -1,33 +1,75 @@ /* 800F7C50-800F7C74 0F2590 0024+00 2/2 0/0 0/0 .text getCrawlMoveAnmSpeed__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::getCrawlMoveAnmSpeed() { - nofralloc -#include "asm/d/a/d_a_alink/getCrawlMoveAnmSpeed__9daAlink_cFv.s" +f32 daAlink_c::getCrawlMoveAnmSpeed() { + return getAnmSpeedStickRate(daAlinkHIO_crouch_c0::m.mCrawlAnmSpeedMin, + daAlinkHIO_crouch_c0::m.mCrawlAnmSpeedMax); } -#pragma pop /* 800F7C74-800F7CE8 0F25B4 0074+00 2/2 0/0 0/0 .text getCrawlMoveSpeed__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::getCrawlMoveSpeed() { - nofralloc -#include "asm/d/a/d_a_alink/getCrawlMoveSpeed__9daAlink_cFv.s" +f32 daAlink_c::getCrawlMoveSpeed() { + daPy_frameCtrl_c* frame_ctrl = mUnderFrameCtrl; + + f32 frame = frame_ctrl->getFrame(); + if (frame >= lit_16210) { + frame = frame_ctrl->getFrame() - lit_16210; + } else { + frame = frame_ctrl->getFrame(); + } + + return frame_ctrl->getRate() * daAlinkHIO_crouch_c0::m.mCrawlMoveRate * + cM_fsin(lit_22146 * frame); } -#pragma pop /* 800F7CE8-800F7E48 0F2628 0160+00 4/4 0/0 0/0 .text setCrawlMoveDirectionArrow__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::setCrawlMoveDirectionArrow() { - nofralloc -#include "asm/d/a/d_a_alink/setCrawlMoveDirectionArrow__9daAlink_cFv.s" +void daAlink_c::setCrawlMoveDirectionArrow() { + u8 direction = 0; + camera_class* camera = dComIfGp_getCamera(field_0x317c); + BOOL bvar = cLib_distanceAngleS(fopCamM_GetAngleY(camera), shape_angle.y) > 0x4000; + + if (field_0x3198 & 4) { + if (!bvar) { + direction = data_80452F38; + } else { + direction = data_80452F39; + } + } + + if (field_0x3198 & 8) { + if (!bvar) { + direction |= data_80452F39; + } else { + direction |= data_80452F38; + } + } + + if (field_0x3198 & 1) { + if (shape_angle.y == current.angle.y) { + if (!bvar) { + direction |= 8; + } else { + direction |= 2; + } + } else if (!bvar) { + direction |= 2; + } else { + direction |= 8; + } + } + + if (shape_angle.y == current.angle.y) { + if (!bvar) { + direction |= 2; + } else { + direction |= 8; + } + } else if (!bvar) { + direction |= 8; + } else { + direction |= 2; + } + + dComIfGp_setAdvanceDirection(direction); } -#pragma pop /* 800F7E48-800F81C0 0F2788 0378+00 2/2 0/0 0/0 .text changeCrawlAutoMoveProc__9daAlink_cFP4cXyz */ @@ -45,22 +87,37 @@ asm void daAlink_c::changeCrawlAutoMoveProc(cXyz* param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daAlink_c::getCrawlMoveVec(cXyz* param_0, cXyz* param_1, cXyz* param_2, int param_3, - int param_4, u8* param_5) { +asm int daAlink_c::getCrawlMoveVec(cXyz* param_0, cXyz* param_1, cXyz* param_2, int param_3, + int param_4, u8* param_5) { nofralloc #include "asm/d/a/d_a_alink/getCrawlMoveVec__9daAlink_cFP4cXyzP4cXyzP4cXyziiPUc.s" } #pragma pop /* 800F85C0-800F8700 0F2F00 0140+00 2/2 0/0 0/0 .text crawlBgCheck__9daAlink_cFP4cXyzP4cXyzi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::crawlBgCheck(cXyz* param_0, cXyz* param_1, int param_2) { - nofralloc -#include "asm/d/a/d_a_alink/crawlBgCheck__9daAlink_cFP4cXyzP4cXyzi.s" +void daAlink_c::crawlBgCheck(cXyz* param_0, cXyz* param_1, int param_2) { + cXyz sp28; + cXyz sp34; + cXyz sp40; + + cMtx_multVec(mpLinkModel->getBaseTRMtx(), &l_crawlTopOffset, &sp28); + int temp_r30 = getCrawlMoveVec(&sp28, param_0, &sp34, 1, param_2, NULL); + + cMtx_multVec(mpLinkModel->getBaseTRMtx(), &l_crawlTopUpOffset, &sp28); + int temp_r29 = getCrawlMoveVec(&sp28, param_1, &sp40, 1, param_2, NULL); + + if (temp_r30 != 0 && temp_r29 != 0) { + if (sp34.abs2() > sp40.abs2()) { + current.pos -= sp34; + } else { + current.pos -= sp40; + } + } else if (temp_r30 != 0) { + current.pos -= sp34; + } else if (temp_r29 != 0) { + current.pos -= sp40; + } } -#pragma pop /* 800F8700-800F88F8 0F3040 01F8+00 2/2 0/0 0/0 .text * checkCrawlSideWall__9daAlink_cFP4cXyzP4cXyzP4cXyzP4cXyzPsPs */ @@ -76,35 +133,47 @@ asm void daAlink_c::checkCrawlSideWall(cXyz* param_0, cXyz* param_1, cXyz* param /* 800F88F8-800F89E0 0F3238 00E8+00 6/6 0/0 0/0 .text decideCrawlDoStatus__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::decideCrawlDoStatus() { - nofralloc -#include "asm/d/a/d_a_alink/decideCrawlDoStatus__9daAlink_cFv.s" +void daAlink_c::decideCrawlDoStatus() { + if (dComIfGp_checkCameraAttentionStatus(field_0x317c, 0x80)) { + if (checkSubjectEnd(1) || mWaterY > current.pos.y) { + dComIfGp_clearPlayerStatus0(0, 0x2000); + } + } else { + dCamera_c* camera = dCam_getBody(); + + if (camera->ChangeModeOK(4) && mWaterY <= current.pos.y) { + i_onResetFlg0(RFLG0_UNK_4000000); + + if (dComIfGp_checkCameraAttentionStatus(field_0x317c, 0x1000) && !checkEventRun()) { + setSubjectMode(); + } + } + } } -#pragma pop /* 800F89E0-800F8A50 0F3320 0070+00 3/3 0/0 0/0 .text checkNotCrawlStand__9daAlink_cFP4cXyz */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::checkNotCrawlStand(cXyz* param_0) { - nofralloc -#include "asm/d/a/d_a_alink/checkNotCrawlStand__9daAlink_cFP4cXyz.s" +BOOL daAlink_c::checkNotCrawlStand(cXyz* param_0) { + mLinkRoofChk.i_SetPos(*param_0); + return dComIfG_Bgsp().RoofChk(&mLinkRoofChk) - current.pos.y <= field_0x598; } -#pragma pop /* 800F8A50-800F8B00 0F3390 00B0+00 2/2 0/0 0/0 .text checkNotCrawlStand__9daAlink_cFP4cXyzP4cXyz */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::checkNotCrawlStand(cXyz* param_0, cXyz* param_1) { - nofralloc -#include "asm/d/a/d_a_alink/checkNotCrawlStand__9daAlink_cFP4cXyzP4cXyz.s" +BOOL daAlink_c::checkNotCrawlStand(cXyz* param_0, cXyz* param_1) { + cXyz sp20; + + sp20 = *param_0 + *param_1; + if (checkNotCrawlStand(&sp20)) { + return true; + } + + sp20 = *param_0 - *param_1; + if (checkNotCrawlStand(&sp20)) { + return true; + } + + return false; } -#pragma pop /* 800F8B00-800F8D04 0F3440 0204+00 2/2 0/0 0/0 .text * checkCrawlInHoll__9daAlink_cFP4cXyzP4cXyzP4cXyzi */ @@ -118,34 +187,69 @@ asm void daAlink_c::checkCrawlInHoll(cXyz* param_0, cXyz* param_1, cXyz* param_2 #pragma pop /* 800F8D04-800F8DBC 0F3644 00B8+00 2/2 0/0 0/0 .text setCrawlMoveHoll__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::setCrawlMoveHoll() { - nofralloc -#include "asm/d/a/d_a_alink/setCrawlMoveHoll__9daAlink_cFv.s" +void daAlink_c::setCrawlMoveHoll() { + f32 frame_ctrl_rate = mUnderFrameCtrl[0].getRate(); + + if (frame_ctrl_rate != FLOAT_LABEL(lit_6108)) { + cLib_addCalcAngleS(&shape_angle.y, field_0x300c, 5, 0x1000, 0x800); + current.angle.y = shape_angle.y; + } + + if (fabsf(current.pos.x - field_0x37c8.x) > lit_6040) { + cLib_addCalc(¤t.pos.x, field_0x37c8.x, lit_5943, lit_7625, lit_6040); + } + + if (fabsf(current.pos.z - field_0x37c8.z) > lit_6040) { + cLib_addCalc(¤t.pos.z, field_0x37c8.z, lit_5943, lit_7625, lit_6040); + } } -#pragma pop /* 800F8DBC-800F8F08 0F36FC 014C+00 1/1 0/0 0/0 .text setCrawlMoveAngle__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::setCrawlMoveAngle() { - nofralloc -#include "asm/d/a/d_a_alink/setCrawlMoveAngle__9daAlink_cFv.s" +void daAlink_c::setCrawlMoveAngle() { + cXyz sp20; + cXyz sp2C; + cXyz sp38; + + cLib_addCalcAngleS(&shape_angle.y, field_0x2fe2, daAlinkHIO_crouch_c0::m.mCrawlTurnRate, + daAlinkHIO_crouch_c0::m.mCrawlTurnMax, + daAlinkHIO_crouch_c0::m.mCrawlTurnMin); + + if (shape_angle.y != current.angle.y) { + if ((s16)(shape_angle.y - current.angle.y) > 0) { + cMtx_multVec(mpLinkModel->getBaseTRMtx(), &l_crawlLSideFrontOffset, &sp20); + cMtx_multVec(mpLinkModel->getBaseTRMtx(), &l_crawlLSideOffset, &sp38); + } else { + cMtx_multVec(mpLinkModel->getBaseTRMtx(), &l_crawlRSideFrontOffset, &sp20); + cMtx_multVec(mpLinkModel->getBaseTRMtx(), &l_crawlRSideOffset, &sp38); + } + + mLinkGndChk.SetPos(&sp20); + sp2C.set(sp20.x - sp38.x, dComIfG_Bgsp().GroundCross(&mLinkGndChk) - sp38.y, + sp20.z - sp38.z); + + if (cLib_distanceAngleS(sp2C.atan2sY_XZ(), shape_angle.x) > 0x800) { + shape_angle.y = current.angle.y; + } else { + current.angle.y = shape_angle.y; + } + } } -#pragma pop /* 800F8F08-800F8F84 0F3848 007C+00 6/6 0/0 0/0 .text stopHalfMoveAnime__9daAlink_cFf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::stopHalfMoveAnime(f32 param_0) { - nofralloc -#include "asm/d/a/d_a_alink/stopHalfMoveAnime__9daAlink_cFf.s" +void daAlink_c::stopHalfMoveAnime(f32 param_0) { + daPy_frameCtrl_c* frame_ctrl = mUnderFrameCtrl; + + f32 frame; + if (frame_ctrl->checkPass(FLOAT_LABEL(lit_6108))) { + frame = FLOAT_LABEL(lit_6108); + } else { + frame = param_0; + } + + frame_ctrl->setRate(FLOAT_LABEL(lit_6108)); + frame_ctrl->setFrame(frame); + getNowAnmPackUnder(UNDER_0)->setFrame(frame); } -#pragma pop /* 800F8F84-800F9210 0F38C4 028C+00 2/2 0/0 0/0 .text setCrawlAutoMoveAimPos__9daAlink_cFv */ #pragma push @@ -168,14 +272,29 @@ asm int daAlink_c::procCrawlStartInit() { #pragma pop /* 800F9384-800F9474 0F3CC4 00F0+00 1/0 0/0 0/0 .text procCrawlStart__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procCrawlStart() { - nofralloc -#include "asm/d/a/d_a_alink/procCrawlStart__9daAlink_cFv.s" +int daAlink_c::procCrawlStart() { + daPy_frameCtrl_c* frame_ctrl = mUnderFrameCtrl; + + decideCrawlDoStatus(); + field_0x33cc = lit_6040 - field_0x3478 * (field_0x347c - frame_ctrl->getFrame()); + + cXyz sp20(l_crawlFrontOffset.x, l_crawlFrontOffset.y, l_crawlFrontOffset.z * field_0x33cc); + cXyz sp2C; + cXyz sp38; + + cMtx_multVec(mpLinkModel->getBaseTRMtx(), &sp20, &sp2C); + sp20.y = lit_10039; + + cMtx_multVec(mpLinkModel->getBaseTRMtx(), &sp20, &sp38); + crawlBgCheck(&sp2C, &sp38, 0); + + field_0x2f99 = 4; + if (checkAnmEnd(frame_ctrl)) { + procCrawlMoveInit(shape_angle.x, shape_angle.z); + } + + return 1; } -#pragma pop /* 800F9474-800F95B8 0F3DB4 0144+00 3/3 0/0 0/0 .text procCrawlMoveInit__9daAlink_cFss */ #pragma push @@ -198,6 +317,29 @@ asm int daAlink_c::procCrawlMove() { #pragma pop /* 800F99FC-800F9ABC 0F433C 00C0+00 1/1 0/0 0/0 .text procCrawlAutoMoveInit__9daAlink_cFiP4cXyz */ +// r30 / r31 swap +#ifdef NONMATCHING +int daAlink_c::procCrawlAutoMoveInit(int param_0, cXyz* param_1) { + BOOL var_r30 = i_dComIfGp_checkPlayerStatus0(0, 0x2000); + commonProcInit(PROC_CRAWL_AUTO_MOVE); + field_0x37c8 = *param_1; + field_0x33cc = lit_6040; + field_0x3198 = param_0; + field_0x3008 = 20; + field_0x300a = 300; + + dComIfGp_setPlayerStatus0(0, 0x8000000); + setCrawlMoveDirectionArrow(); + mNormalSpeed = FLOAT_LABEL(lit_6108); + field_0x2f99 = 12; + + if (var_r30) { + dComIfGp_setPlayerStatus0(0, 0x2000); + } + + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -206,6 +348,7 @@ asm int daAlink_c::procCrawlAutoMoveInit(int param_0, cXyz* param_1) { #include "asm/d/a/d_a_alink/procCrawlAutoMoveInit__9daAlink_cFiP4cXyz.s" } #pragma pop +#endif /* 800F9ABC-800F9D7C 0F43FC 02C0+00 1/0 0/0 0/0 .text procCrawlAutoMove__9daAlink_cFv */ #pragma push @@ -228,11 +371,19 @@ asm int daAlink_c::procCrawlEndInit(int param_0, s16 param_1, s16 param_2) { #pragma pop /* 800F9F30-800F9FDC 0F4870 00AC+00 1/0 0/0 0/0 .text procCrawlEnd__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procCrawlEnd() { - nofralloc -#include "asm/d/a/d_a_alink/procCrawlEnd__9daAlink_cFv.s" +int daAlink_c::procCrawlEnd() { + daPy_frameCtrl_c* frame_ctrl = mUnderFrameCtrl; + + field_0x33cc = field_0x3478 * (frame_ctrl->getFrame() - field_0x347c); + field_0x2f99 = 4; + + if (checkAnmEnd(frame_ctrl)) { + if (!checkNextActionFromCrouch(0)) { + procWaitInit(); + } + } else if (frame_ctrl->getFrame() < daAlinkHIO_crouch_c0::m.mCrawlEndAnm.mCheckFrame) { + checkNextActionFromCrouch(1); + } + + return 1; } -#pragma pop
\ No newline at end of file diff --git a/src/d/a/d_a_alink_damage.inc b/src/d/a/d_a_alink_damage.inc index d621033fe6..f76027058c 100644 --- a/src/d/a/d_a_alink_damage.inc +++ b/src/d/a/d_a_alink_damage.inc @@ -57,6 +57,25 @@ void daAlink_c::onPressedDamage(cXyz const& param_0, s16 param_1) { /* 800D6F2C-800D6FE0 0D186C 00B4+00 3/3 0/0 0/0 .text checkNoLandDamageSlidePolygon__9daAlink_cFv */ +// matches with cM3dGPla vtable +#ifdef NONMATCHING +BOOL daAlink_c::checkNoLandDamageSlidePolygon() { + if (field_0x2fbb == 3) { + return true; + } + + if (dComIfG_Bgsp().ChkPolySafe(mLinkAcch.m_gnd)) { + cM3dGPla poly; + dComIfG_Bgsp().GetTriPla(mLinkAcch.m_gnd, &poly); + + if (poly.mNormal.y < field_0x3470) { + return true; + } + } + + return false; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -65,13 +84,15 @@ asm BOOL daAlink_c::checkNoLandDamageSlidePolygon() { #include "asm/d/a/d_a_alink/checkNoLandDamageSlidePolygon__9daAlink_cFv.s" } #pragma pop +#endif /* 800D6FE0-800D70A0 0D1920 00C0+00 6/6 0/0 0/0 .text checkCutLandDamage__9daAlink_cFv */ void daAlink_c::checkCutLandDamage() { if (!checkEventRun()) { f32 var_f31 = (mFallHeight - current.pos.y) * lit_8782; - if (var_f31 >= daAlinkHIO_damFall_c0::m.mSmallDmgHeight && !checkNoLandDamageSlidePolygon()) { + if (var_f31 >= daAlinkHIO_damFall_c0::m.mSmallDmgHeight && !checkNoLandDamageSlidePolygon()) + { if (var_f31 >= daAlinkHIO_damFall_c0::m.mBigDmgHeight) { setLandDamagePoint(8); } else { @@ -85,7 +106,9 @@ void daAlink_c::checkCutLandDamage() { /* 800D70A0-800D7160 0D19E0 00C0+00 2/2 0/0 0/0 .text checkCaughtEscapeCutTurn__9daAlink_cFv */ BOOL daAlink_c::checkCaughtEscapeCutTurn() { - if (mLinkAcch.ChkGroundHit() && (i_checkSwordGet() || i_checkWolf()) && checkCutTurnInputTrigger()) { + if (mLinkAcch.ChkGroundHit() && (i_checkSwordGet() || i_checkWolf()) && + checkCutTurnInputTrigger()) + { if (i_checkWolf()) { return procWolfRollAttackInit(2, 0); } @@ -104,7 +127,7 @@ BOOL daAlink_c::checkCaughtEscapeCutTurn() { /* 800D7160-800D7208 0D1AA0 00A8+00 1/0 0/0 0/0 .text setThrowDamage__9daAlink_cFsffiii */ bool daAlink_c::setThrowDamage(s16 param_0, f32 param_1, f32 param_2, int param_3, int param_4, - int param_5) { + int param_5) { field_0x3408 = param_1; field_0x340c = param_2; field_0x318c = param_3; @@ -134,10 +157,12 @@ bool daAlink_c::setThrowDamage(s16 param_0, f32 param_1, f32 param_2, int param_ f32 daAlink_c::damageMagnification(int i_checkZoraMag, int param_1) { f32 base_mag; - if (param_1 == 0 && i_checkNoResetFlg3(FLG3_UNK_40000000) && !i_checkEndResetFlg2(ERFLG2_UNK_40)) { - base_mag = lit_7624; /* 1.5 */ + if (param_1 == 0 && i_checkNoResetFlg3(FLG3_UNK_40000000) && + !i_checkEndResetFlg2(ERFLG2_UNK_40)) + { + base_mag = lit_7624; /* 1.5 */ } else { - base_mag = lit_6040; /* 1.0 */ + base_mag = lit_6040; /* 1.0 */ } if (i_checkWolf() && !checkCargoCarry() && param_1 == 0) { @@ -260,14 +285,18 @@ asm void daAlink_c::checkPolyDamage() { /* 800D7A98-800D7B18 0D23D8 0080+00 1/1 0/0 0/0 .text * checkElecReturnDamage__9daAlink_cFR12dCcD_GObjInfPP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::checkElecReturnDamage(dCcD_GObjInf& param_0, fopAc_ac_c** param_1) { - nofralloc -#include "asm/d/a/d_a_alink/checkElecReturnDamage__9daAlink_cFR12dCcD_GObjInfPP10fopAc_ac_c.s" +bool daAlink_c::checkElecReturnDamage(dCcD_GObjInf& param_0, fopAc_ac_c** param_1) { + if (param_0.ChkAtHit() && param_0.GetAtHitGObj() != NULL) { + dCcD_GObjInf* gobj_p = (dCcD_GObjInf*)param_0.GetAtHitGObj(); + + if (gobj_p->GetTgSpl() == dCcG_Tg_Spl_UNK_1) { + *param_1 = param_0.GetAtHitAc(); + return true; + } + } + + return false; } -#pragma pop /* 800D7B18-800D7BE8 0D2458 00D0+00 1/1 0/0 0/0 .text damageTimerCount__9daAlink_cFv */ void daAlink_c::damageTimerCount() { @@ -340,7 +369,7 @@ asm int daAlink_c::procDamage() { #pragma optimization_level 0 #pragma optimizewithasm off asm int daAlink_c::procCoLargeDamageInit(int param_0, int param_1, s16 param_2, s16 param_3, - dCcD_GObjInf* param_4, int param_5) { + dCcD_GObjInf* param_4, int param_5) { nofralloc #include "asm/d/a/d_a_alink/procCoLargeDamageInit__9daAlink_cFiissP12dCcD_GObjInfi.s" } @@ -453,15 +482,15 @@ asm int daAlink_c::procLandDamageInit(int param_0) { /* 800DB060-800DB140 0D59A0 00E0+00 1/0 0/0 0/0 .text procLandDamage__9daAlink_cFv */ int daAlink_c::procLandDamage() { daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl; - + if (field_0x3198 != 0) { if (frameCtrl->checkAnmEnd()) { checkNextAction(0); } else if (frameCtrl->getFrame() > daAlinkHIO_damFall_c0::m.mStandAnm.mCheckFrame) { onModeFlg(4); checkNextAction(1); - } - } else { + } + } else { if (frameCtrl->checkAnmEnd()) { if (field_0x3008 > 0) { field_0x3008--; @@ -561,7 +590,8 @@ int daAlink_c::procScreamWaitInit() { if (i_checkEndResetFlg1(ERFLG1_UNK_2)) { setScreamWaitAnime(); } else { - setSingleAnimeBaseSpeed(ANM_WAIT, daAlinkHIO_move_c0::m.mWaitAnmSpeed, daAlinkHIO_basic_c0::m.mAnmBlendFactor); + setSingleAnimeBaseSpeed(ANM_WAIT, daAlinkHIO_move_c0::m.mWaitAnmSpeed, + daAlinkHIO_basic_c0::m.mAnmBlendFactor); field_0x300c = 0; } @@ -655,14 +685,16 @@ int daAlink_c::procCoSwimFreezeReturnInit() { f32 var_f31; if (i_checkWolf()) { - setSingleAnimeWolfBaseSpeed(WANM_SWIM_WAIT, daAlinkHIO_wlDamNormal_c0::m.field_0x5C, lit_7625); + setSingleAnimeWolfBaseSpeed(WANM_SWIM_WAIT, daAlinkHIO_wlDamNormal_c0::m.field_0x5C, + lit_7625); mUnderFrameCtrl[0].setEnd(3); mUnderFrameCtrl[0].setAttribute(0); setFaceBasicTexture(FTANM_UNK_90); field_0x2f9b = 1; var_f31 = daAlinkHIO_wlSwim_c0::m.field_0x48; } else { - setSingleAnime(ANM_SWIM_DMG_FREEZE, daAlinkHIO_damNormal_c0::m.field_0x60, FLOAT_LABEL(lit_6108), 5, lit_7625); + setSingleAnime(ANM_SWIM_DMG_FREEZE, daAlinkHIO_damNormal_c0::m.field_0x60, + FLOAT_LABEL(lit_6108), 5, lit_7625); voiceStart(Z2SE_AL_V_DAMAGE_FREEZE); var_f31 = daAlinkHIO_swim_c0::m.mInitHeight; } @@ -687,6 +719,25 @@ int daAlink_c::procCoSwimFreezeReturnInit() { } /* 800DC474-800DC548 0D6DB4 00D4+00 1/0 0/0 0/0 .text procCoSwimFreezeReturn__9daAlink_cFv */ +// matches with literals +#ifdef NONMATCHING +int daAlink_c::procCoSwimFreezeReturn() { + if (field_0x300c == 0) { + if (checkRestartDead(4, 1)) { + i_onNoResetFlg1(FLG1_UNK_40000000); + } else { + u32 mode = 4; + setLastSceneDamage(4, &mode); + seStartSystem(Z2SE_FORCE_BACK); + dStage_changeScene(3, 0.0f, mode, fopAcM_GetRoomNo(this), shape_angle.y, -1); + } + } else { + field_0x300c--; + } + + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -694,4 +745,5 @@ asm int daAlink_c::procCoSwimFreezeReturn() { nofralloc #include "asm/d/a/d_a_alink/procCoSwimFreezeReturn__9daAlink_cFv.s" } -#pragma pop
\ No newline at end of file +#pragma pop +#endif diff --git a/src/d/a/d_a_alink_demo.inc b/src/d/a/d_a_alink_demo.inc index 18c62666bb..6be8821b59 100644 --- a/src/d/a/d_a_alink_demo.inc +++ b/src/d/a/d_a_alink_demo.inc @@ -75,20 +75,22 @@ asm void daAlink_c::setDemoData() { /* 80117B90-80117C34 1124D0 00A4+00 1/1 0/0 0/0 .text resetDemoBck__9daAlink_cFv */ void daAlink_c::resetDemoBck() { - mAnmHeap7.resetArcNo(); - mAnmHeap5.resetArcNo(); - mAnmHeap6.resetArcNo(); + mFaceBckHeap.resetArcNo(); + mFaceBtpHeap.resetArcNo(); + mFaceBtkHeap.resetArcNo(); mUnderAnmHeap[0].resetArcNo(); mUnderAnmHeap[0].resetIdx(); - mAnmHeap7.resetIdx(); - mAnmHeap5.resetIdx(); - mAnmHeap6.resetIdx(); + mFaceBckHeap.resetIdx(); + mFaceBtpHeap.resetIdx(); + mFaceBtkHeap.resetIdx(); if (i_checkWolf()) { - setSingleAnimeWolfBaseSpeed(WANM_WAIT, daAlinkHIO_wlMoveNoP_c0::m.field_0x14, daAlinkHIO_wlMove_c0::m.field_0x94); + setSingleAnimeWolfBaseSpeed(WANM_WAIT, daAlinkHIO_wlMoveNoP_c0::m.field_0x14, + daAlinkHIO_wlMove_c0::m.field_0x94); setFaceBasicAnime(ANM_WAIT); } else { - setSingleAnimeBaseSpeed(ANM_WAIT, daAlinkHIO_move_c0::m.mWaitAnmSpeed, daAlinkHIO_basic_c0::m.mAnmBlendFactor); + setSingleAnimeBaseSpeed(ANM_WAIT, daAlinkHIO_move_c0::m.mWaitAnmSpeed, + daAlinkHIO_basic_c0::m.mAnmBlendFactor); } } @@ -167,7 +169,8 @@ asm void daAlink_c::setGetItemFace(u16 param_0) { */ BOOL daAlink_c::checkGrabTalkActor(fopAc_ac_c* i_actor) { s16 name = fopAcM_GetName(i_actor); - return name == PROC_NPC_KYURY || name == PROC_MYNA || name == PROC_OBJ_SSITEM || name == PROC_TAG_MSG; + return name == PROC_NPC_KYURY || name == PROC_MYNA || name == PROC_OBJ_SSITEM || + name == PROC_TAG_MSG; } /* 80118308-8011856C 112C48 0264+00 2/2 0/0 0/0 .text setTalkStartBack__9daAlink_cFP4cXyz @@ -175,7 +178,7 @@ BOOL daAlink_c::checkGrabTalkActor(fopAc_ac_c* i_actor) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daAlink_c::setTalkStartBack(cXyz* param_0) { +asm int daAlink_c::setTalkStartBack(cXyz* param_0) { nofralloc #include "asm/d/a/d_a_alink/setTalkStartBack__9daAlink_cFP4cXyz.s" } @@ -192,35 +195,50 @@ asm void daAlink_c::setShapeAngleToTalkActor() { #pragma pop /* 80118654-801186D4 112F94 0080+00 2/2 0/0 0/0 .text setTalkAnime__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::setTalkAnime() { - nofralloc -#include "asm/d/a/d_a_alink/setTalkAnime__9daAlink_cFv.s" +void daAlink_c::setTalkAnime() { + if (mDemo.getDemoMode() == 8 || mEquipItem == KANTERA || + (i_checkNoResetFlg2(FLG2_UNK_1) && field_0x2fde == 0x48)) + { + setDoubleAnime(FLOAT_LABEL(lit_6108), daAlinkHIO_move_c0::m.mWaitAnmSpeed, + daAlinkHIO_move_c0::m.mWaitAnmSpeed, ANM_WAIT, ANM_WAIT, 2, lit_6109); + } else { + setSingleAnimeBase(ANM_TALK); + } } -#pragma pop /* 801186D4-80118778 113014 00A4+00 2/2 0/0 0/0 .text setTradeItemAnime__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::setTradeItemAnime() { - nofralloc -#include "asm/d/a/d_a_alink/setTradeItemAnime__9daAlink_cFv.s" +u8 daAlink_c::setTradeItemAnime() { + setSingleAnimeBase(ANM_TRADE_ITEM_PULL_OUT); + offModeFlg(0x100); + + if (mDemo.getParam0() != 1) { + int item_no; + if (mDemo.getParam0() == 2) { + item_no = mDemo.getParam1(); + } else { + item_no = dComIfGp_event_getPreItemNo(); + } + + u32 partner_id = fopAcM_createItemForPresentDemo( + ¤t.pos, item_no, 3, -1, fopAcM_GetRoomNo(this), &shape_angle, &mScale); + dComIfGp_event_setItemPartnerId(partner_id); + } + + keepItemData(); + return 1; } -#pragma pop /* 80118778-801187B4 1130B8 003C+00 3/3 0/0 0/0 .text setTradeItemOutHand__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::setTradeItemOutHand() { - nofralloc -#include "asm/d/a/d_a_alink/setTradeItemOutHand__9daAlink_cFv.s" +void daAlink_c::setTradeItemOutHand() { + daPy_frameCtrl_c* frame_ctrl = mUnderFrameCtrl; + + if (frame_ctrl->getFrame() >= lit_24590) { + field_0x2f92 = 4; + } else if (frame_ctrl->getFrame() >= lit_8676) { + field_0x2f92 = 0; + } } -#pragma pop /* 801187B4-80118840 1130F4 008C+00 5/5 0/0 0/0 .text checkEndMessage__9daAlink_cFUl */ BOOL daAlink_c::checkEndMessage(u32 param_0) { @@ -243,38 +261,92 @@ BOOL daAlink_c::checkEndMessage(u32 param_0) { } /* 80118840-801188B0 113180 0070+00 1/1 0/0 0/0 .text setDemoRightHandIndex__9daAlink_cFUs */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::setDemoRightHandIndex(u16 param_0) { - nofralloc -#include "asm/d/a/d_a_alink/setDemoRightHandIndex__9daAlink_cFUs.s" +u8 daAlink_c::setDemoRightHandIndex(u16 param_0) { + if (param_0 == 0xFD) { + field_0x3010 = 1; + return 6; + } else if (param_0 == 0xFC) { + field_0x2fab |= 0x10; + return 5; + } else if (param_0 == 0xFB) { + if (mpDemoHRTmpModel != NULL) { + return 0xFB; + } else { + return 0xFE; + } + } else if (param_0 != 0xFE) { + return param_0 + 5; + } else { + return param_0 & 0xFF; + } } -#pragma pop /* 801188B0-8011894C 1131F0 009C+00 1/1 0/0 0/0 .text setDemoLeftHandIndex__9daAlink_cFUs */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::setDemoLeftHandIndex(u16 param_0) { - nofralloc -#include "asm/d/a/d_a_alink/setDemoLeftHandIndex__9daAlink_cFUs.s" +u8 daAlink_c::setDemoLeftHandIndex(u16 param_0) { + if (param_0 == 0xFD) { + if (mEquipItem != 0x103) { + deleteEquipItem(FALSE, TRUE); + setSwordModel(); + } + return 0; + } else if (param_0 == 0xFC) { + field_0x2fab |= 0x8; + return 0; + } else if (param_0 == 0xFB) { + if (mpDemoHLTmpModel != NULL) { + return 0xFB; + } else { + return 0xFE; + } + } else { + return param_0 & 0xFF; + } } -#pragma pop /* 8011894C-801189F8 11328C 00AC+00 1/1 0/0 0/0 .text setDemoRide__9daAlink_cFUs */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::setDemoRide(u16 param_0) { - nofralloc -#include "asm/d/a/d_a_alink/setDemoRide__9daAlink_cFUs.s" +void daAlink_c::setDemoRide(u16 param_0) { + daHorse_c* horse_p = i_dComIfGp_getHorseActor(); + + if (param_0 == 1) { + if (horse_p != NULL && !i_checkModeFlg(0x400)) { + onModeFlg(0x400); + horse_p->onRideFlg(); + field_0x384c = (cXyz*)&l_horseBaseAnime; + mRideStatus = 1; + } + } else { + if (horse_p != NULL) { + horse_p->offRideFlg(); + } + + mRideStatus = 0; + offModeFlg(0x400); + } } -#pragma pop /* 801189F8-80118AD0 113338 00D8+00 1/1 0/0 0/0 .text * setDemoBodyBck__9daAlink_cFP13dDemo_actor_cUs */ +// matches with literals +#ifdef NONMATCHING +void daAlink_c::setDemoBodyBck(dDemo_actor_c* param_0, u16 param_1) { + J3DAnmTransform* bck = (J3DAnmTransform*)mUnderAnmHeap[0].loadDataDemoRID(param_1, 0); + if (bck != NULL) { + setFrameCtrl(mUnderFrameCtrl, bck->getAttribute(), 0, bck->getFrameMax(), 1.0f, 0.0f); + mNowAnmPackUnder[0].setAnmTransform(bck); + mNowAnmPackUpper[0].setAnmTransform(bck); + + dDemo_actor_c* demo_actor_p = dDemo_c::getActor(mDemoActorId); + if (demo_actor_p->checkEnable(0x80)) { + field_0x2060->initOldFrameMorf(demo_actor_p->getPrm_Morf(), 0, field_0x30c6); + } + + field_0x2f8c = 0; + param_0->setAnmFrameMax(bck->getFrameMax()); + setBasAnime(UNDER_0); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -283,6 +355,7 @@ asm void daAlink_c::setDemoBodyBck(dDemo_actor_c* param_0, u16 param_1) { #include "asm/d/a/d_a_alink/setDemoBodyBck__9daAlink_cFP13dDemo_actor_cUs.s" } #pragma pop +#endif /* 80118AD0-80118B34 113410 0064+00 1/1 0/0 0/0 .text checkFinalBattle__9daAlink_cFv */ BOOL daAlink_c::checkFinalBattle() { @@ -294,7 +367,8 @@ BOOL daAlink_c::checkRestartDead(int i_dmgAmount, int i_checkZoraMag) { i_dmgAmount *= (int)damageMagnification(i_checkZoraMag, 1); if (mProcID != PROC_DEAD && i_dmgAmount >= i_dComIfGs_getLife() && !checkMagicArmorNoDamage() && - !dComIfGs_checkBottle(FAIRY)) { + !dComIfGs_checkBottle(FAIRY)) + { i_onNoResetFlg2(FLG2_UNK_40000); procCoDeadInit(0); return 1; @@ -336,17 +410,38 @@ asm BOOL daAlink_c::checkDeadAction(int param_0) { /* 80118FF8-801190A4 113938 00AC+00 1/1 0/0 0/0 .text * setHighModelBck__9daAlink_cFP13mDoExt_bckAnmUs */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::setHighModelBck(mDoExt_bckAnm* param_0, u16 param_1) { - nofralloc -#include "asm/d/a/d_a_alink/setHighModelBck__9daAlink_cFP13mDoExt_bckAnmUs.s" +void daAlink_c::setHighModelBck(mDoExt_bckAnm* i_bck, u16 param_1) { + if (i_bck != NULL) { + J3DAnmTransform* bck = (J3DAnmTransform*)dComIfG_getObjectIDRes( + dStage_roomControl_c::getDemoArcName(), param_1); + + if (bck != NULL && i_bck->getBckAnm() != bck) { + if (field_0x06b4 == bck) { + mpDemoHDTmpBck->changeBckOnly(NULL); + } else { + i_bck->init(bck, TRUE, -1, lit_6040, 0, -1, true); + } + } + } } -#pragma pop /* 801190A4-80119134 1139E4 0090+00 1/1 0/0 0/0 .text setHighModelFaceBtk__9daAlink_cFUs */ +// extra mr +#ifdef NONMATCHING +void daAlink_c::setHighModelFaceBtk(u16 param_0) { + J3DAnmTextureSRTKey* btk = (J3DAnmTextureSRTKey*)dComIfG_getObjectIDRes( + dStage_roomControl_c::getDemoArcName(), param_0); + + if (btk != NULL && field_0x068c != btk) { + btk->searchUpdateMaterialID(mpDemoFCTongueModel->getModelData()); + mpDemoFCTongueModel->getModelData()->entryTexMtxAnimator(btk); + + btk->setFrame(FLOAT_LABEL(lit_6108)); + field_0x068c = btk; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -355,9 +450,25 @@ asm void daAlink_c::setHighModelFaceBtk(u16 param_0) { #include "asm/d/a/d_a_alink/setHighModelFaceBtk__9daAlink_cFUs.s" } #pragma pop +#endif /* 80119134-801191C4 113A74 0090+00 1/1 0/0 0/0 .text * setDemoBrk__9daAlink_cFPP15J3DAnmTevRegKeyP8J3DModelUs */ +// extra mr +#ifdef NONMATCHING +void daAlink_c::setDemoBrk(J3DAnmTevRegKey** param_0, J3DModel* param_1, u16 param_2) { + J3DAnmTevRegKey* brk = + (J3DAnmTevRegKey*)dComIfG_getObjectIDRes(dStage_roomControl_c::getDemoArcName(), param_2); + + if (brk != NULL && *param_0 != brk) { + brk->searchUpdateMaterialID(param_1->getModelData()); + param_1->getModelData()->entryTevRegAnimator(brk); + + brk->setFrame(FLOAT_LABEL(lit_6108)); + *param_0 = brk; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -366,6 +477,7 @@ asm void daAlink_c::setDemoBrk(J3DAnmTevRegKey** param_0, J3DModel* param_1, u16 #include "asm/d/a/d_a_alink/setDemoBrk__9daAlink_cFPP15J3DAnmTevRegKeyP8J3DModelUs.s" } #pragma pop +#endif /* 801191C4-80119464 113B04 02A0+00 1/1 0/0 0/0 .text * setStickAnmData__9daAlink_cFP10J3DAnmBaseiiUsi */ @@ -402,14 +514,38 @@ int daAlink_c::procDemoCommon() { } /* 801195F8-801196D8 113F38 00E0+00 1/1 0/0 0/0 .text procCoToolDemoInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procCoToolDemoInit() { - nofralloc -#include "asm/d/a/d_a_alink/procCoToolDemoInit__9daAlink_cFv.s" +int daAlink_c::procCoToolDemoInit() { + if (!commonProcInitNotSameProc(PROC_TOOL_DEMO)) { + return 1; + } + + f32 tmp_0 = FLOAT_LABEL(lit_6108); + mNormalSpeed = tmp_0; + speedF = tmp_0; + speed.y = tmp_0; + + mUnderAnmHeap[0].resetArcNo(); + mUnderAnmHeap[0].resetIdx(); + mUpperAnmHeap[0].resetIdx(); + mUnderAnmHeap[1].resetIdx(); + mUpperAnmHeap[1].resetIdx(); + + setDoubleAnimeBlendRatio(tmp_0); + mNowAnmPackUnder[1].setAnmTransform(NULL); + mNowAnmPackUpper[1].setAnmTransform(NULL); + + field_0x3198 = 0; + field_0x3010 = 0; + field_0x2fab = 0; + deleteEquipItem(FALSE, TRUE); + mUnderAnmHeap[0].setBufferSize(0x10800); + field_0x300c = 0; + field_0x3478 = FLOAT_LABEL(lit_6108); + field_0x37c8 = current.pos; + + i_onEndResetFlg1(ERFLG1_GANON_FINISH); + return 1; } -#pragma pop /* 801196D8-80119D98 114018 06C0+00 1/0 0/0 0/0 .text procCoToolDemo__9daAlink_cFv */ #pragma push @@ -452,14 +588,23 @@ asm int daAlink_c::procCoOpenTreasureInit() { #pragma pop /* 8011A42C-8011A4C0 114D6C 0094+00 1/0 0/0 0/0 .text procCoOpenTreasure__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procCoOpenTreasure() { - nofralloc -#include "asm/d/a/d_a_alink/procCoOpenTreasure__9daAlink_cFv.s" +int daAlink_c::procCoOpenTreasure() { + i_onEndResetFlg1(ERFLG1_UNK_8); + + if (field_0x300c == 0) { + field_0x300c = 1; + } else { + field_0x2f99 = 4; + } + + if (checkAnmEnd(mUnderFrameCtrl)) { + dComIfGp_evmng_cutEnd(field_0x3184); + mLinkAcch.ClrWallNone(); + mLinkAcch.OnLineCheck(); + } + + return 1; } -#pragma pop /* 8011A4C0-8011A5CC 114E00 010C+00 1/0 0/0 0/0 .text procCoUnequipInit__9daAlink_cFv */ #pragma push @@ -472,14 +617,30 @@ asm int daAlink_c::procCoUnequipInit() { #pragma pop /* 8011A5CC-8011A688 114F0C 00BC+00 1/0 0/0 0/0 .text procCoUnequip__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procCoUnequip() { - nofralloc -#include "asm/d/a/d_a_alink/procCoUnequip__9daAlink_cFv.s" +int daAlink_c::procCoUnequip() { + if (field_0x300c != 0) { + if (checkAnmEnd(mUnderFrameCtrl)) { + setBlendMoveAnime(lit_6109); + itemEquip(COPY_ROD); + + f32 tmp_6 = lit_7977; + mUpperFrameCtrl[2].setFrame(tmp_6); + getNowAnmPackUpper(UPPER_2)->setFrame(tmp_6); + commonChangeItem(); + field_0x300c = 0; + } + } else { + if (!i_checkWolf()) { + setBlendMoveAnime(lit_6041); + } + + if (checkNoUpperAnime()) { + dComIfGp_evmng_cutEnd(field_0x3184); + } + } + + return 1; } -#pragma pop /* 8011A688-8011A6FC 114FC8 0074+00 4/4 0/0 0/0 .text setGetSubBgm__9daAlink_cFi */ void daAlink_c::setGetSubBgm(int param_0) { @@ -496,32 +657,18 @@ void daAlink_c::setGetSubBgm(int param_0) { } /* 8011A6FC-8011A798 11503C 009C+00 1/0 0/0 0/0 .text checkTreasureRupeeReturn__9daAlink_cCFi */ -// register issues. probably wrong order of operations -#ifdef NONMATCHING bool daAlink_c::checkTreasureRupeeReturn(int i_itemNo) const { - int itemNo = i_itemNo; - if (itemNo == LINKS_SAVINGS) { - itemNo = PURPLE_RUPEE; + if (i_itemNo == LINKS_SAVINGS) { + i_itemNo = PURPLE_RUPEE; } - if (itemNo - 4 < 0 || itemNo - 4 >= 4) { + i_itemNo -= 4; + if (i_itemNo < 0 || i_itemNo >= 4) { return false; } - u16 curRupees = i_dComIfGs_getRupee(); - int tmp = itemNo - 4; - return dComIfGs_getRupeeMax() > (u16)rupeeCount[tmp] + curRupees; -} -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm bool daAlink_c::checkTreasureRupeeReturn(int param_0) const { - nofralloc -#include "asm/d/a/d_a_alink/checkTreasureRupeeReturn__9daAlink_cCFi.s" + return dComIfGs_getRupeeMax() < rupeeCount[i_itemNo] + i_dComIfGs_getRupee(); } -#pragma pop -#endif /* 8011A798-8011AC28 1150D8 0490+00 2/1 0/0 0/0 .text procCoGetItemInit__9daAlink_cFv */ #pragma push @@ -544,14 +691,21 @@ asm int daAlink_c::procCoGetItem() { #pragma pop /* 8011B3F0-8011B46C 115D30 007C+00 1/0 0/0 0/0 .text procCoTurnBackInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procCoTurnBackInit() { - nofralloc -#include "asm/d/a/d_a_alink/procCoTurnBackInit__9daAlink_cFv.s" +int daAlink_c::procCoTurnBackInit() { + if (!commonProcInitNotSameProc(PROC_TURN_BACK)) { + return 0; + } + + mNormalSpeed = FLOAT_LABEL(lit_6108); + if (i_checkWolf()) { + setSingleAnimeWolfBase(WANM_TURN_BACK); + } else { + setSingleAnimeBase(ANM_TURN_BACK); + } + + field_0x300c = 0; + return 1; } -#pragma pop /* 8011B46C-8011B57C 115DAC 0110+00 1/0 0/0 0/0 .text procCoTurnBack__9daAlink_cFv */ #pragma push @@ -594,84 +748,145 @@ asm int daAlink_c::procCoLookWaitInit() { #pragma pop /* 8011BA20-8011BABC 116360 009C+00 1/0 0/0 0/0 .text procCoLookWait__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procCoLookWait() { - nofralloc -#include "asm/d/a/d_a_alink/procCoLookWait__9daAlink_cFv.s" +int daAlink_c::procCoLookWait() { + fopAc_ac_c* look_actor_p = getDemoLookActor(); + + if (look_actor_p != NULL) { + s16 target_angle; + s16 svar1 = cLib_targetAngleY(&field_0x34e0, &look_actor_p->mEyePos) - shape_angle.y; + + if (svar1 > 0x6000) { + target_angle = shape_angle.y + 0x6000; + } else if (svar1 < -0x6000) { + target_angle = shape_angle.y + -0x6000; + } else { + target_angle = shape_angle.y; + } + + cLib_addCalcAngleS(&shape_angle.y, target_angle, 2, 0x800, 0x100); + } + + dComIfGp_evmng_cutEnd(field_0x3184); + return 1; } -#pragma pop /* 8011BABC-8011BB40 1163FC 0084+00 1/0 0/0 0/0 .text procCoDemoPushPullWaitInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procCoDemoPushPullWaitInit() { - nofralloc -#include "asm/d/a/d_a_alink/procCoDemoPushPullWaitInit__9daAlink_cFv.s" +int daAlink_c::procCoDemoPushPullWaitInit() { + if (!commonProcInitNotSameProc(PROC_DEMO_PUSH_PULL_WAIT)) { + return 0; + } + + if (i_checkWolf()) { + setSingleAnimeWolfBase(WANM_WAIT_PP); + } else { + setSingleAnimeBaseSpeed(ANM_WAIT_PUSH_PULL, daAlinkHIO_pushpull_c0::m.field_0x10, + daAlinkHIO_pushpull_c0::m.field_0x14); + } + + mNormalSpeed = FLOAT_LABEL(lit_6108); + return 1; } -#pragma pop /* 8011BB40-8011BC14 116480 00D4+00 1/0 0/0 0/0 .text procCoDemoPushMoveInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procCoDemoPushMoveInit() { - nofralloc -#include "asm/d/a/d_a_alink/procCoDemoPushMoveInit__9daAlink_cFv.s" +int daAlink_c::procCoDemoPushMoveInit() { + if (!commonProcInitNotSameProc(PROC_DEMO_PUSH_MOVE)) { + return 0; + } + + if (i_checkWolf()) { + if (mDemo.getParam0() != 0) { + setSingleAnimeWolfBase(WANM_PUSH); + } else { + setSingleAnimeWolf(WANM_PUSH_LIGHT, daAlinkHIO_wlPush_c0::m.field_0x8, + FLOAT_LABEL(lit_6108), 24, daAlinkHIO_wlPush_c0::m.field_0xC); + } + } else { + if (mDemo.getParam0() != 0) { + setSingleAnimeBase(ANM_PUSH); + } else { + setSingleAnimeBaseSpeed(ANM_PUSH_LIGHT, daAlinkHIO_pushpull_c0::m.field_0x18, + daAlinkHIO_pushpull_c0::m.field_0x1C); + } + } + + mNormalSpeed = FLOAT_LABEL(lit_6108); + return 1; } -#pragma pop /* 8011BC14-8011BC74 116554 0060+00 2/2 0/0 0/0 .text setMonkeyMoveAnime__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::setMonkeyMoveAnime() { - nofralloc -#include "asm/d/a/d_a_alink/setMonkeyMoveAnime__9daAlink_cFv.s" +void daAlink_c::setMonkeyMoveAnime() { + daPy_frameCtrl_c* frame_ctrl = mUnderFrameCtrl; + + if (mDemo.getParam0() == 0) { + field_0x2f92 = 0xFE; + field_0x2f93 = 0xFE; + frame_ctrl->setFrame(FLOAT_LABEL(lit_6108)); + } else { + field_0x2f92 = 2; + field_0x2f93 = 5; + frame_ctrl->setFrame(lit_6040); + } + + getNowAnmPackUnder(UNDER_0)->setFrame(frame_ctrl->getFrame()); + field_0x3088 = mDemo.getParam1(); + shape_angle.x = field_0x3088 >> 1; // divide by 2 } -#pragma pop /* 8011BC74-8011BD18 1165B4 00A4+00 1/0 0/0 0/0 .text procMonkeyMoveInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procMonkeyMoveInit() { - nofralloc -#include "asm/d/a/d_a_alink/procMonkeyMoveInit__9daAlink_cFv.s" +int daAlink_c::procMonkeyMoveInit() { + if (!commonProcInitNotSameProc(PROC_MONKEY_MOVE)) { + return 0; + } + + current.angle.y = shape_angle.y; + setSpecialGravity(FLOAT_LABEL(lit_6108), mMaxFallSpeed, 0); + + f32 tmp_0 = FLOAT_LABEL(lit_6108); + speed.y = tmp_0; + mNormalSpeed = tmp_0; + deleteEquipItem(FALSE, FALSE); + + if (!i_checkWolf()) { + setSingleAnimeBaseSpeed(ANM_ROPE_SWING, FLOAT_LABEL(lit_6108), lit_6109); + setMonkeyMoveAnime(); + } + + return 1; } -#pragma pop /* 8011BD18-8011BD6C 116658 0054+00 1/0 0/0 0/0 .text procMonkeyMove__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procMonkeyMove() { - nofralloc -#include "asm/d/a/d_a_alink/procMonkeyMove__9daAlink_cFv.s" +int daAlink_c::procMonkeyMove() { + dComIfGp_evmng_cutEnd(field_0x3184); + + if (!i_checkWolf()) { + setMonkeyMoveAnime(); + } + return 1; } -#pragma pop /* 8011BD6C-8011BDF0 1166AC 0084+00 1/0 0/0 0/0 .text procDemoBoomerangCatchInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procDemoBoomerangCatchInit() { - nofralloc -#include "asm/d/a/d_a_alink/procDemoBoomerangCatchInit__9daAlink_cFv.s" +int daAlink_c::procDemoBoomerangCatchInit() { + if (!commonProcInitNotSameProc(PROC_DEMO_BOOMERANG_CATCH)) { + return 0; + } + + mNormalSpeed = FLOAT_LABEL(lit_6108); + deleteEquipItem(FALSE, FALSE); + mEquipItem = BOOMERANG; + setItemActor(); + setSingleAnimeParam(ANM_BOOMERANG_CATCH, &daAlinkHIO_boom_c0::m.mCatchAnm); + return 1; } -#pragma pop /* 8011BDF0-8011BE54 116730 0064+00 1/0 0/0 0/0 .text procDemoBoomerangCatch__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procDemoBoomerangCatch() { - nofralloc -#include "asm/d/a/d_a_alink/procDemoBoomerangCatch__9daAlink_cFv.s" +int daAlink_c::procDemoBoomerangCatch() { + dComIfGp_evmng_cutEnd(field_0x3184); + + if (checkAnmEnd(mUnderFrameCtrl)) { + setBlendMoveAnime(daAlinkHIO_basic_c0::m.mAnmBlendFactor); + } + return 1; } -#pragma pop /* 8011BE54-8011C1B4 116794 0360+00 2/2 0/0 0/0 .text procCoDeadInit__9daAlink_cFi */ #pragma push @@ -705,97 +920,155 @@ asm int daAlink_c::procCoLookAroundInit() { #pragma pop /* 8011C760-8011C81C 1170A0 00BC+00 1/0 0/0 0/0 .text procCoLookAround__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procCoLookAround() { - nofralloc -#include "asm/d/a/d_a_alink/procCoLookAround__9daAlink_cFv.s" +int daAlink_c::procCoLookAround() { + daPy_frameCtrl_c* frame_ctrl = mUnderFrameCtrl; + + if (field_0x300c == 0) { + field_0x300c = 1; + } else { + field_0x2f99 = 4; + } + + if (checkAnmEnd(frame_ctrl)) { + dComIfGp_evmng_cutEnd(field_0x3184); + } else if (field_0x300e != 0 && frame_ctrl->checkPass(lit_7808)) { + voiceStart(Z2SE_AL_V_ENTRANCE); + } + + return 1; } -#pragma pop /* 8011C81C-8011C890 11715C 0074+00 1/0 0/0 0/0 .text procBossAtnWaitInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procBossAtnWaitInit() { - nofralloc -#include "asm/d/a/d_a_alink/procBossAtnWaitInit__9daAlink_cFv.s" +int daAlink_c::procBossAtnWaitInit() { + if (!commonProcInitNotSameProc(PROC_BOSS_ATN_WAIT)) { + return 0; + } + + setSingleAnimeBase(ANM_APPEARANCE); + voiceStart(Z2SE_AL_V_APPEARANCE); + mNormalSpeed = FLOAT_LABEL(lit_6108); + return 1; } -#pragma pop /* 8011C890-8011C904 1171D0 0074+00 1/0 0/0 0/0 .text procCoQuakeWaitInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procCoQuakeWaitInit() { - nofralloc -#include "asm/d/a/d_a_alink/procCoQuakeWaitInit__9daAlink_cFv.s" +int daAlink_c::procCoQuakeWaitInit() { + if (!commonProcInitNotSameProc(PROC_QUAKE_WAIT)) { + return 0; + } + + if (i_checkWolf()) { + setSingleAnimeWolfBase(WANM_WAIT_WIND); + } else { + setSingleAnimeBase(ANM_WAIT_WIND); + } + + mNormalSpeed = FLOAT_LABEL(lit_6108); + return 1; } -#pragma pop /* 8011C904-8011C9D0 117244 00CC+00 1/0 0/0 0/0 .text procCoCaughtInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procCoCaughtInit() { - nofralloc -#include "asm/d/a/d_a_alink/procCoCaughtInit__9daAlink_cFv.s" +int daAlink_c::procCoCaughtInit() { + u32 chk_40000 = i_checkModeFlg(0x40000); + if (!commonProcInitNotSameProc(PROC_CAUGHT)) { + return 0; + } + + if (i_checkWolf()) { + setSingleAnimeWolfBaseMorf(WANM_WAIT_START, daAlinkHIO_wlDamCaught_c0::m.field_0x8); + } else { + setSingleAnimeBaseMorf(ANM_WAIT_START, daAlinkHIO_damCaught_c0::m.field_0x1C); + } + + if (chk_40000) { + onModeFlg(0x40000); + } + + f32 tmp_0 = FLOAT_LABEL(lit_6108); + mNormalSpeed = tmp_0; + speed.y = tmp_0; + setSpecialGravity(tmp_0, mMaxFallSpeed, 0); + mBodyAngle.z = 0; + return 1; } -#pragma pop /* 8011C9D0-8011CA4C 117310 007C+00 1/0 0/0 0/0 .text procLookUpInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procLookUpInit() { - nofralloc -#include "asm/d/a/d_a_alink/procLookUpInit__9daAlink_cFv.s" +int daAlink_c::procLookUpInit() { + if (!commonProcInitNotSameProc(PROC_LOOK_UP)) { + return 0; + } + + setSingleAnimeBase(ANM_GET_A_WAIT2); + mNormalSpeed = FLOAT_LABEL(lit_6108); + field_0x3588 = l_waitBaseAnime; + field_0x2f99 = 12; + return 1; } -#pragma pop /* 8011CA4C-8011CA98 11738C 004C+00 1/0 0/0 0/0 .text procLookUp__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procLookUp() { - nofralloc -#include "asm/d/a/d_a_alink/procLookUp__9daAlink_cFv.s" +int daAlink_c::procLookUp() { + if (field_0x2f99 != 12) { + field_0x2f99 = 4; + } + + dComIfGp_evmng_cutEnd(field_0x3184); + return 1; } -#pragma pop /* 8011CA98-8011CB20 1173D8 0088+00 1/0 0/0 0/0 .text procLookUpToGetItemInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procLookUpToGetItemInit() { - nofralloc -#include "asm/d/a/d_a_alink/procLookUpToGetItemInit__9daAlink_cFv.s" +int daAlink_c::procLookUpToGetItemInit() { + if (!commonProcInitNotSameProc(PROC_LOOK_UP_TO_GET_ITEM)) { + return 0; + } + + setSingleAnimeBaseMorf(ANM_GET_HOLDOUT, lit_7307); + field_0x300c = 0; + mNormalSpeed = FLOAT_LABEL(lit_6108); + field_0x3588 = l_waitBaseAnime; + field_0x2f99 = 12; + return 1; } -#pragma pop /* 8011CB20-8011CBD4 117460 00B4+00 1/0 0/0 0/0 .text procLookUpToGetItem__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procLookUpToGetItem() { - nofralloc -#include "asm/d/a/d_a_alink/procLookUpToGetItem__9daAlink_cFv.s" +int daAlink_c::procLookUpToGetItem() { + if (field_0x2f99 != 12) { + field_0x2f99 = 4; + } + + if (field_0x300c == 0 && checkAnmEnd(mUpperFrameCtrl)) { + field_0x300c = 1; + setSingleAnimeBase(ANM_GET_A_WAIT); + setFaceBasicBck(0x133); + field_0x2f99 = 12; + } else if (field_0x300c != 0) { + dComIfGp_evmng_cutEnd(field_0x3184); + } + + return 1; } -#pragma pop /* 8011CBD4-8011CCA8 117514 00D4+00 1/0 0/0 0/0 .text procHandPatInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procHandPatInit() { - nofralloc -#include "asm/d/a/d_a_alink/procHandPatInit__9daAlink_cFv.s" +int daAlink_c::procHandPatInit() { + if (!commonProcInitNotSameProc(PROC_HAND_PAT)) { + return 0; + } + + setSingleAnime(ANM_COW_THROW_LEFT, lit_6040, lit_6895, -1, lit_6109); + field_0x2f92 = 0xFE; + field_0x2f93 = 0xFE; + field_0x2f99 = 13; + field_0x3588.set(-l_halfAtnWaitBaseAnime.x, l_halfAtnWaitBaseAnime.y, + -l_halfAtnWaitBaseAnime.z); + mNormalSpeed = FLOAT_LABEL(lit_6108); + + setOldRootQuaternion(0, -0x8000, 0); + shape_angle.y += 0x8000; + field_0x300c = 0; + field_0x300e = 0; + return 1; } -#pragma pop /* 8011CCA8-8011CDE0 1175E8 0138+00 1/0 0/0 0/0 .text procHandPat__9daAlink_cFv */ #pragma push @@ -829,85 +1102,152 @@ asm int daAlink_c::procCoFogDead() { /* 8011D0A0-8011D110 1179E0 0070+00 1/0 0/0 0/0 .text procWolfSmellWaitInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procWolfSmellWaitInit() { - nofralloc -#include "asm/d/a/d_a_alink/procWolfSmellWaitInit__9daAlink_cFv.s" +int daAlink_c::procWolfSmellWaitInit() { + if (!commonProcInitNotSameProc(PROC_WOLF_SMELL_WAIT)) { + return 1; + } + + setSingleAnimeWolfBaseSpeed(WANM_SMELL, daAlinkHIO_wlChain_c0::m.field_0x54, + daAlinkHIO_wlChain_c0::m.field_0x58); + current.angle.y = shape_angle.y; + mNormalSpeed = FLOAT_LABEL(lit_6108); + return 1; } -#pragma pop /* 8011D110-8011D1F4 117A50 00E4+00 1/0 0/0 0/0 .text procCoNodInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procCoNodInit() { - nofralloc -#include "asm/d/a/d_a_alink/procCoNodInit__9daAlink_cFv.s" +int daAlink_c::procCoNodInit() { + if (!commonProcInitNotSameProc(PROC_NOD)) { + return 1; + } + + if (i_checkWolf()) { + field_0x300c = 1; + } else { + if (mDemo.getParam0() == 1) { + setUpperAnimeBase(0x24E); + setFacePriBck(0x15B); + setFacePriTexture(FTANM_UNK_8A); + } else { + setUpperAnimeBase(0xD1); + setUpperAnimeBase(0xD1); + setFacePriTexture(FTANM_UNK_75); + } + + field_0x2f96 = 4; + field_0x2f97 = 10; + i_onNoResetFlg1(0x10100000); + field_0x300c = 0; + } + + return 1; } -#pragma pop /* 8011D1F4-8011D268 117B34 0074+00 1/0 0/0 0/0 .text procCoNod__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procCoNod() { - nofralloc -#include "asm/d/a/d_a_alink/procCoNod__9daAlink_cFv.s" +int daAlink_c::procCoNod() { + if (checkAnmEnd(&mUpperFrameCtrl[2])) { + field_0x300c = 1; + resetUpperAnime(UPPER_2, lit_6109); + } + + if (field_0x300c != 0) { + dComIfGp_evmng_cutEnd(field_0x3184); + } + + return 1; } -#pragma pop /* 8011D268-8011D304 117BA8 009C+00 1/0 0/0 0/0 .text procCoEyeAwayInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procCoEyeAwayInit() { - nofralloc -#include "asm/d/a/d_a_alink/procCoEyeAwayInit__9daAlink_cFv.s" +int daAlink_c::procCoEyeAwayInit() { + if (!commonProcInitNotSameProc(PROC_EYE_AWAY)) { + return 1; + } + + if (!i_checkWolf()) { + setUpperAnimeBase(0xD3); + setFacePriTexture(FTANM_UNK_77); + setFacePriBck(0x129); + field_0x2f96 = 4; + field_0x2f97 = 10; + i_onNoResetFlg1(0x10100000); + } + + return 1; } -#pragma pop /* 8011D304-8011D3CC 117C44 00C8+00 1/0 0/0 0/0 .text procCoGlareInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procCoGlareInit() { - nofralloc -#include "asm/d/a/d_a_alink/procCoGlareInit__9daAlink_cFv.s" +int daAlink_c::procCoGlareInit() { + if (!commonProcInitNotSameProc(PROC_GLARE)) { + return 1; + } + + if (i_checkWolf()) { + field_0x300c = 1; + } else { + setUpperAnimeBase(0xD2); + mUpperFrameCtrl[2].setAttribute(2); + mUpperFrameCtrl[2].setLoop(45); + setFacePriTexture(FTANM_UNK_76); + setFacePriBck(0x128); + field_0x300c = 0; + field_0x3478 = lit_6041; + field_0x2f96 = 4; + field_0x2f97 = 10; + i_onNoResetFlg1(0x10100000); + } + + return 1; } -#pragma pop /* 8011D3CC-8011D474 117D0C 00A8+00 1/0 0/0 0/0 .text procCoGlare__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procCoGlare() { - nofralloc -#include "asm/d/a/d_a_alink/procCoGlare__9daAlink_cFv.s" +int daAlink_c::procCoGlare() { + daPy_frameCtrl_c* frame_ctrl = &mUpperFrameCtrl[2]; + + if (!i_checkWolf()) { + if (field_0x3478 > frame_ctrl->getFrame()) { + field_0x300c = 1; + } else { + field_0x3478 = frame_ctrl->getFrame(); + } + } + + if (field_0x300c != 0) { + dComIfGp_evmng_cutEnd(field_0x3184); + } + + if (!i_checkWolf() && frame_ctrl->getFrame() >= lit_7449) { + field_0x2f96 = 0; + field_0x2f97 = 5; + } + + return 1; } -#pragma pop /* 8011D474-8011D4D4 117DB4 0060+00 1/0 0/0 0/0 .text procGoatStopReadyInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procGoatStopReadyInit() { - nofralloc -#include "asm/d/a/d_a_alink/procGoatStopReadyInit__9daAlink_cFv.s" +int daAlink_c::procGoatStopReadyInit() { + if (!commonProcInitNotSameProc(PROC_GOAT_STOP_READY)) { + return 1; + } + + setSingleAnimeBase(ANM_ATN_COW); + mNormalSpeed = FLOAT_LABEL(lit_6108); + field_0x300c = 0; + return 1; } -#pragma pop /* 8011D4D4-8011D544 117E14 0070+00 1/0 0/0 0/0 .text procGoatStopReady__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procGoatStopReady() { - nofralloc -#include "asm/d/a/d_a_alink/procGoatStopReady__9daAlink_cFv.s" +int daAlink_c::procGoatStopReady() { + if (checkAnmEnd(mUnderFrameCtrl)) { + setSingleAnimeBase(ANM_COW_MOVE_LEFT_RIGHT); + field_0x300c = 1; + } + + if (field_0x300c != 0) { + dComIfGp_evmng_cutEnd(field_0x3184); + } + + return 1; } -#pragma pop /* 8011D544-8011D64C 117E84 0108+00 2/1 0/0 0/0 .text procCoGetReadySitInit__9daAlink_cFv */ @@ -921,14 +1261,21 @@ asm int daAlink_c::procCoGetReadySitInit() { #pragma pop /* 8011D64C-8011D6D0 117F8C 0084+00 1/0 0/0 0/0 .text procCoGetReadySit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procCoGetReadySit() { - nofralloc -#include "asm/d/a/d_a_alink/procCoGetReadySit__9daAlink_cFv.s" +int daAlink_c::procCoGetReadySit() { + if (checkAnmEnd(mUnderFrameCtrl)) { + field_0x300c = 1; + } + + if (!i_checkWolf() && field_0x2f99 != 12) { + field_0x2f99 = 4; + } + + if (field_0x300c != 0) { + dComIfGp_evmng_cutEnd(field_0x3184); + } + + return 1; } -#pragma pop /* 8011D6D0-8011D7D4 118010 0104+00 1/0 0/0 0/0 .text procCoTwGateInit__9daAlink_cFv */ #pragma push @@ -951,14 +1298,22 @@ int daAlink_c::procCoTwGate() { } /* 8011D82C-8011D8F8 11816C 00CC+00 1/0 0/0 0/0 .text procWolfSnowEscapeInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procWolfSnowEscapeInit() { - nofralloc -#include "asm/d/a/d_a_alink/procWolfSnowEscapeInit__9daAlink_cFv.s" +int daAlink_c::procWolfSnowEscapeInit() { + if (!commonProcInitNotSameProc(PROC_WOLF_SNOW_ESCAPE)) { + return 1; + } + + current.angle.y = shape_angle.y + 0x8000; + setSingleAnimeWolf(WANM_TURN, lit_6040, lit_7808, 11, lit_6109); + voiceStart(Z2SE_WL_V_BREATH_JUMP); + field_0x2f99 = 13; + field_0x3588 = l_wolfBaseAnime; + field_0x3478 = lit_37528; + field_0x300c = 0; + field_0x300e = 0; + mNormalSpeed = lit_6845; + return 1; } -#pragma pop /* 8011D8F8-8011DB04 118238 020C+00 1/0 0/0 0/0 .text procWolfSnowEscape__9daAlink_cFv */ #pragma push @@ -971,14 +1326,23 @@ asm int daAlink_c::procWolfSnowEscape() { #pragma pop /* 8011DB04-8011DB9C 118444 0098+00 1/0 0/0 0/0 .text procZoraMoveInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procZoraMoveInit() { - nofralloc -#include "asm/d/a/d_a_alink/procZoraMoveInit__9daAlink_cFv.s" +int daAlink_c::procZoraMoveInit() { + if (!commonProcInitNotSameProc(PROC_ZORA_MOVE)) { + return 1; + } + + setSingleAnimeBase(ANM_HORSE_TAME_WAIT_B); + f32 tmp_0 = FLOAT_LABEL(lit_6108); + speed.y = tmp_0; + mNormalSpeed = tmp_0; + setSpecialGravity(tmp_0, mMaxFallSpeed, 0); + + deleteEquipItem(FALSE, TRUE); + field_0x3010 = 5000; + field_0x3012 = 0; + field_0x384c = (cXyz*)&l_boarBaseAnime; + return 1; } -#pragma pop /* 8011DB9C-8011DDD4 1184DC 0238+00 1/0 0/0 0/0 .text procZoraMove__9daAlink_cFv */ #pragma push @@ -1001,25 +1365,53 @@ asm int daAlink_c::procLookAroundTurnInit() { #pragma pop /* 8011DED8-8011DF68 118818 0090+00 1/0 0/0 0/0 .text procLookAroundTurn__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procLookAroundTurn() { - nofralloc -#include "asm/d/a/d_a_alink/procLookAroundTurn__9daAlink_cFv.s" +int daAlink_c::procLookAroundTurn() { + daPy_frameCtrl_c* frame_ctrl = mUnderFrameCtrl; + + if (checkAnmEnd(frame_ctrl)) { + dComIfGp_evmng_cutEnd(field_0x3184); + } else if (frame_ctrl->checkPass(lit_8248)) { + voiceStart(Z2SE_AL_V_D_MHOP); + } + + return 1; } -#pragma pop /* 8011DF68-8011E060 1188A8 00F8+00 1/0 0/0 0/0 .text procTradeItemOutInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procTradeItemOutInit() { - nofralloc -#include "asm/d/a/d_a_alink/procTradeItemOutInit__9daAlink_cFv.s" +int daAlink_c::procTradeItemOutInit() { + if (!commonProcInitNotSameProc(PROC_TRADE_ITEM_OUT)) { + return 0; + } + + field_0x3198 = setTalkStartBack(&field_0x37c8); + + if (field_0x3198 == 0) { + field_0x300c = setTradeItemAnime(); + mNormalSpeed = FLOAT_LABEL(lit_6108); + } else { + field_0x300c = 0; + } + + field_0x300e = 0; + dComIfGp_setPlayerStatus0(0, 0x10); + field_0x3010 = 1; + + if (mDemo.getParam0() != 1) { + if (mDemo.getParam0() == 2) { + if (checkLetterItem(mDemo.getParam1())) { + field_0x3010 = 0; + } + } else { + if (checkLetterItem(dComIfGp_event_getPreItemNo())) { + field_0x3010 = 0; + } + } + } + + field_0x3008 = 30; + return 1; } -#pragma pop /* 8011E060-8011E3D8 1189A0 0378+00 1/0 0/0 0/0 .text procTradeItemOut__9daAlink_cFv */ #pragma push @@ -1032,14 +1424,10 @@ asm int daAlink_c::procTradeItemOut() { #pragma pop /* 8011E3D8-8011E448 118D18 0070+00 2/2 0/0 0/0 .text checkLetterItem__9daAlink_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::checkLetterItem(int param_0) { - nofralloc -#include "asm/d/a/d_a_alink/checkLetterItem__9daAlink_cFi.s" +BOOL daAlink_c::checkLetterItem(int i_itemNo) { + return i_itemNo == LETTER || i_itemNo == BILL || i_itemNo == RAFRELS_MEMO || + i_itemNo == TKS_LETTER || i_itemNo == ASHS_SCRIBBLING; } -#pragma pop /* 8011E448-8011E57C 118D88 0134+00 1/1 0/0 0/0 .text procNotUseItemInit__9daAlink_cFi */ #pragma push @@ -1062,90 +1450,137 @@ asm int daAlink_c::procNotUseItem() { #pragma pop /* 8011E6E0-8011E748 119020 0068+00 1/0 0/0 0/0 .text procSwordReadyInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procSwordReadyInit() { - nofralloc -#include "asm/d/a/d_a_alink/procSwordReadyInit__9daAlink_cFv.s" +int daAlink_c::procSwordReadyInit() { + if (!commonProcInitNotSameProc(PROC_SWORD_READY)) { + return 0; + } + + mNormalSpeed = FLOAT_LABEL(lit_6108); + current.angle.y = shape_angle.y; + setSingleAnimeBase(ANM_DEMO_KAMAE); + field_0x300c = 0; + return 1; } -#pragma pop /* 8011E748-8011E83C 119088 00F4+00 1/0 0/0 0/0 .text procSwordReady__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procSwordReady() { - nofralloc -#include "asm/d/a/d_a_alink/procSwordReady__9daAlink_cFv.s" +int daAlink_c::procSwordReady() { + daPy_frameCtrl_c* frame_ctrl = mUnderFrameCtrl; + + if (checkAnmEnd(frame_ctrl)) { + if (field_0x300c == 0) { + setDoubleAnime(FLOAT_LABEL(lit_6108), daAlinkHIO_noActAtnMove_c0::m.mWaitAnmSpeed, + daAlinkHIO_noActAtnMove_c0::m.mWaitAnmSpeed, ANM_WAIT_B, ANM_WAIT_B, 2, + lit_6109); + } + + field_0x300c = 1; + dComIfGp_evmng_cutEnd(field_0x3184); + } else if (field_0x300c != 0) { + dComIfGp_evmng_cutEnd(field_0x3184); + } else if (frame_ctrl->checkPass(lit_7625)) { + voiceStart(Z2SE_AL_V_OUGI_KAMAE); + } + + return 1; } -#pragma pop /* 8011E83C-8011E8E0 11917C 00A4+00 2/2 0/0 0/0 .text setSwordPushAnime__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::setSwordPushAnime() { - nofralloc -#include "asm/d/a/d_a_alink/setSwordPushAnime__9daAlink_cFv.s" +void daAlink_c::setSwordPushAnime() { + daAlink_ANM anm_id = (daAlink_ANM)(mDemo.getParam0() + ANM_GANON_CHANCE); + if (field_0x3198 != anm_id) { + setSingleAnimeBase(anm_id); + field_0x2f99 = 13; + field_0x3198 = anm_id; + + if (anm_id == ANM_GANON_CHANCE_WIN) { + voiceStart(Z2SE_AL_V_VS_GND_TUBA_WIN); + } else if (anm_id == ANM_GANON_CHANCE_LOSE) { + voiceStart(Z2SE_AL_V_VS_GND_TUBA_LOSE); + } + } } -#pragma pop /* 8011E8E0-8011E960 119220 0080+00 1/0 0/0 0/0 .text procSwordPushInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procSwordPushInit() { - nofralloc -#include "asm/d/a/d_a_alink/procSwordPushInit__9daAlink_cFv.s" +int daAlink_c::procSwordPushInit() { + if (!commonProcInitNotSameProc(PROC_SWORD_PUSH)) { + return 1; + } + + mNormalSpeed = FLOAT_LABEL(lit_6108); + current.angle.y = shape_angle.y; + field_0x3198 = 0; + setSwordPushAnime(); + field_0x3588 = l_halfAtnWaitBaseAnime; + return 1; } -#pragma pop /* 8011E960-8011E9F8 1192A0 0098+00 1/0 0/0 0/0 .text procSwordPush__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procSwordPush() { - nofralloc -#include "asm/d/a/d_a_alink/procSwordPush__9daAlink_cFv.s" +int daAlink_c::procSwordPush() { + field_0x2f99 = 4; + i_onEndResetFlg0(ERFLG0_UNK_8000000); + setSwordPushAnime(); + + if (field_0x3198 == 0x193) { + voiceStartLevel(Z2SE_AL_V_VS_GND_TUBA_A); + } else if (field_0x3198 == 0x194) { + voiceStartLevel(Z2SE_AL_V_VS_GND_TUBA_C); + } else if (field_0x3198 == 0x192) { + voiceStartLevel(Z2SE_AL_V_VS_GND_TUBA_B); + } + + return 1; } -#pragma pop /* 8011E9F8-8011EA78 119338 0080+00 1/0 0/0 0/0 .text procGanonFinishInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procGanonFinishInit() { - nofralloc -#include "asm/d/a/d_a_alink/procGanonFinishInit__9daAlink_cFv.s" +int daAlink_c::procGanonFinishInit() { + if (!commonProcInitNotSameProc(PROC_GANON_FINISH)) { + return 1; + } + + setSingleAnimeBase(ANM_GANON_FINISH); + + f32 tmp_0 = FLOAT_LABEL(lit_6108); + mNormalSpeed = tmp_0; + speed.y = tmp_0; + + field_0x37c8 = current.pos; + i_onEndResetFlg1(ERFLG1_GANON_FINISH); + return 1; } -#pragma pop /* 8011EA78-8011EAE8 1193B8 0070+00 1/0 0/0 0/0 .text procGanonFinish__9daAlink_cFv */ -bool daAlink_c::procGanonFinish() { +int daAlink_c::procGanonFinish() { i_onEndResetFlg1(ERFLG1_GANON_FINISH); current.pos = field_0x37c8; - if (mUnderFrameCtrl[0].checkAnmEnd()) { + + if (checkAnmEnd(mUnderFrameCtrl)) { setSingleAnimeBaseMorf(ANM_GANON_FINISH_WAIT, lit_6041); } - return true; + + return 1; } /* 8011EAE8-8011EB8C 119428 00A4+00 1/0 0/0 0/0 .text procCutFastReadyInit__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procCutFastReadyInit() { - nofralloc -#include "asm/d/a/d_a_alink/procCutFastReadyInit__9daAlink_cFv.s" +int daAlink_c::procCutFastReadyInit() { + if (!commonProcInitNotSameProc(PROC_CUT_FAST_READY)) { + return 0; + } + + mNormalSpeed = FLOAT_LABEL(lit_6108); + current.angle.y = shape_angle.y; + setSingleAnimeBaseSpeed(ANM_WAIT, daAlinkHIO_move_c0::m.mWaitAnmSpeed, lit_6109); + setUpperAnime(0x255, UPPER_2, daAlinkHIO_cut_c0::m.mEquipAnm.mSpeed, lit_7448, + daAlinkHIO_cut_c0::m.mEquipAnm.mEndFrame, + daAlinkHIO_cut_c0::m.mEquipAnm.mInterpolation); + i_onNoResetFlg0(FLG0_UNK_1000000); + return 1; } -#pragma pop /* 8011EB8C-8011EBDC 1194CC 0050+00 1/0 0/0 0/0 .text procCutFastReady__9daAlink_cFv */ int daAlink_c::procCutFastReady() { - if (mUpperFrameCtrl[2].checkAnmEnd()) { + if (checkAnmEnd(&mUpperFrameCtrl[2])) { dComIfGp_evmng_cutEnd(field_0x3184); } @@ -1170,15 +1605,15 @@ int daAlink_c::procMasterSwordStickInit() { /* 8011EC60-8011ED18 1195A0 00B8+00 1/0 0/0 0/0 .text procMasterSwordStick__9daAlink_cFv */ int daAlink_c::procMasterSwordStick() { - daPy_frameCtrl_c* fCtrl = &mUnderFrameCtrl[0]; + daPy_frameCtrl_c* frame_ctrl = mUnderFrameCtrl; if (field_0x300c != 0) { dComIfGp_evmng_cutEnd(field_0x3184); - } else if (fCtrl->checkAnmEnd()) { + } else if (checkAnmEnd(frame_ctrl)) { field_0x300c = 1; setSingleAnimeBaseMorf(ANM_DEMO_MASTER_SWORD_WAIT, lit_6041); dComIfGp_evmng_cutEnd(field_0x3184); - } else if (fCtrl->getFrame() >= lit_14621) { + } else if (frame_ctrl->getFrame() >= lit_14621) { field_0x2f93 = 5; } @@ -1200,14 +1635,21 @@ int daAlink_c::procMasterSwordPullInit() { /* 8011ED8C-8011EE40 1196CC 00B4+00 1/0 0/0 0/0 .text procMasterSwordPull__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procMasterSwordPull() { - nofralloc -#include "asm/d/a/d_a_alink/procMasterSwordPull__9daAlink_cFv.s" +int daAlink_c::procMasterSwordPull() { + daPy_frameCtrl_c* frame_ctrl = mUnderFrameCtrl; + + if (checkAnmEnd(frame_ctrl)) { + dComIfGp_evmng_cutEnd(field_0x3184); + } else if (frame_ctrl->getFrame() >= lit_8780) { + field_0x2f93 = 10; + } else if (frame_ctrl->getFrame() >= lit_7710) { + field_0x3010 = 0; + } else if (frame_ctrl->getFrame() >= lit_6040) { + field_0x3010 = 4; + } + + return 1; } -#pragma pop /* 8011EE40-8011EE94 119780 0054+00 5/5 0/0 0/0 .text checkLv7DungeonShop__9daAlink_cFv */ @@ -1259,28 +1701,19 @@ asm int daAlink_c::procDungeonWarpReady() { /* 8011F084-8011F0F4 1199C4 0070+00 1/0 0/0 0/0 .text procDungeonWarpInit__9daAlink_cFv */ -#ifdef NONMATCHING -bool daAlink_c::procDungeonWarpInit() { - if (!commonProcInitNotSameProc(DUNEGON_WARP_START) { - field_0x300c = 0; - field_0x3012 = 0; - setSpecialGravity(0.0f, mMaxFallSpeed, 0); - field_0x300e = 0; - field_0x3010 = 0; +int daAlink_c::procDungeonWarpInit() { + if (!commonProcInitNotSameProc(PROC_DUNGEON_WARP)) { + return 0; } + field_0x300c = 0; + field_0x3012 = 0; + setSpecialGravity(FLOAT_LABEL(lit_6108), mMaxFallSpeed, 0); + field_0x300e = 0; + field_0x3010 = 0; + return 1; } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daAlink_c::procDungeonWarpInit() { - nofralloc -#include "asm/d/a/d_a_alink/procDungeonWarpInit__9daAlink_cFv.s" -} -#pragma pop -#endif /* 8011F0F4-8011F360 119A34 026C+00 1/0 0/0 0/0 .text procDungeonWarp__9daAlink_cFv */ // matches with literals @@ -1399,15 +1832,17 @@ bool daAlink_c::checkAcceptWarp() { cM3dGPla plane; if (mLinkAcch.ChkGroundHit() && !i_checkModeFlg(MODE_PLAYER_FLY) && - !i_checkNoResetFlg0(FLG0_UNDERWATER)) { + !i_checkNoResetFlg0(FLG0_UNDERWATER)) + { if (!getSlidePolygon(&plane) && !checkForestOldCentury()) { if (i_checkMidnaRide() || getMidnaActor()->checkPortalObjRide()) { if ((checkField() || checkCastleTown()) && !checkStageName("R_SP161")) { - if ((i_checkWolf() && - (i_checkModeFlg(MODE_UNK_1000) || i_dComIfGp_checkPlayerStatus0(0, 0x10))) || + if ((i_checkWolf() && (i_checkModeFlg(MODE_UNK_1000) || + i_dComIfGp_checkPlayerStatus0(0, 0x10))) || (!i_checkWolf() && (checkEventRun() || getMidnaActor()->checkMetamorphoseEnable()) && - (i_checkModeFlg(4) || i_dComIfGp_checkPlayerStatus0(0, 0x10)))) { + (i_checkModeFlg(4) || i_dComIfGp_checkPlayerStatus0(0, 0x10)))) + { return true; } } @@ -1450,9 +1885,9 @@ void daAlink_c::skipPortalObjWarp() { } if (i_checkNoResetFlg3(FLG3_UNK_2000000) && - (dComIfGp_TargetWarpPt_get() == 9 && dComIfGp_TransportWarp_check())) { - dStage_changeScene(2, FLOAT_LABEL(lit_6108), 0, fopAcM_GetRoomNo(this), shape_angle.y, - -1); + (dComIfGp_TargetWarpPt_get() == 9 && dComIfGp_TransportWarp_check())) + { + dStage_changeScene(2, FLOAT_LABEL(lit_6108), 0, fopAcM_GetRoomNo(this), shape_angle.y, -1); } else { u32 data = setParamData(dMeter2Info_getWarpRoomNo(), 0, 0xCA, 0); dComIfGs_setTurnRestart(dMeter2Info_getWarpPos(), dMeter2Info_getWarpPlayerNo(), @@ -1469,7 +1904,9 @@ void daAlink_c::skipPortalObjWarp() { /* 8011F9EC-8011FBC0 11A32C 01D4+00 1/1 0/0 0/0 .text checkWarpStart__9daAlink_cFv */ void daAlink_c::checkWarpStart() { if (dMeter2Info_getWarpStatus() != 0) { - if (dMeter2Info_getWarpStatus() == WARP_DECIDED || dComIfGp_event_compulsory(this, 0, 0xFFFF)) { + if (dMeter2Info_getWarpStatus() == WARP_DECIDED || + dComIfGp_event_compulsory(this, 0, 0xFFFF)) + { i_onNoResetFlg0(FLG0_UNK_4000); if (dMeter2Info_getWarpStatus() == WARP_DECIDED) { const char* portal; diff --git a/src/d/a/d_a_alink_hvyboots.inc b/src/d/a/d_a_alink_hvyboots.inc index 61afe884e9..ab287610eb 100644 --- a/src/d/a/d_a_alink_hvyboots.inc +++ b/src/d/a/d_a_alink_hvyboots.inc @@ -1,24 +1,3 @@ -#include "dolphin/types.h" -#include "d/a/d_a_alink.h" -#include "JSystem/J2DGraph/J2DAnmLoader.h" -#include "JSystem/J3DGraphLoader/J3DAnmLoader.h" -#include "JSystem/JMath/JMath.h" -#include "SSystem/SComponent/c_math.h" -#include "Z2AudioLib/Z2AudioMgr.h" -#include "d/com/d_com_inf_game.h" -#include "d/msg/d_msg_object.h" -#include "f_op/f_op_actor_mng.h" -#include "m_Do/m_Do_audio.h" -#include "m_Do/m_Do_ext.h" -#include "m_Do/m_Do_mtx.h" -#include "rel/d/a/d_a_crod/d_a_crod.h" -#include "rel/d/a/d_a_horse/d_a_horse.h" -#include "rel/d/a/d_a_scene_exit/d_a_scene_exit.h" -#include "rel/d/a/d_a_mg_rod/d_a_mg_rod.h" -#include "rel/d/a/d_a_spinner/d_a_spinner.h" -#include "rel/d/a/obj/d_a_obj_carry/d_a_obj_carry.h" -#include "rel/d/a/tag/d_a_tag_magne/d_a_tag_magne.h" - /* 800E23FC-800E243C 0DCD3C 0040+00 6/6 0/0 0/0 .text concatMagneBootMtx__9daAlink_cFv */ void daAlink_c::concatMagneBootMtx() { if (i_checkMagneBootsOn()) { diff --git a/src/d/a/d_a_alink_link.inc b/src/d/a/d_a_alink_link.inc index 36bfbc8cb4..ea2fb7b208 100644 --- a/src/d/a/d_a_alink_link.inc +++ b/src/d/a/d_a_alink_link.inc @@ -3003,23 +3003,23 @@ asm daAlink_c::~daAlink_c() { /* 800CE208-800CE294 0C8B48 008C+00 1/0 0/0 0/0 .text daAlink_Delete__FP9daAlink_c */ // destructor issue #ifdef NONMATCHING -static bool daAlink_Delete(daAlink_c* p_link) { - if (p_link->getClothesChangeWaitTimer() != 0) { - p_link->loadModelDVD(); - return false; - } else if (p_link->getShieldChangeWaitTimer() != 0) { - p_link->loadShieldModelDVD(); - return false; +static int daAlink_Delete(daAlink_c* i_this) { + if (i_this->getClothesChangeWaitTimer() != 0) { + i_this->loadModelDVD(); + return 0; + } else if (i_this->getShieldChangeWaitTimer() != 0) { + i_this->loadShieldModelDVD(); + return 0; } else { - delete p_link; - return true; + delete i_this; + return 1; } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm bool daAlink_Delete(daAlink_c* param_0) { +static asm int daAlink_Delete(daAlink_c* i_this) { nofralloc #include "asm/d/a/d_a_alink/daAlink_Delete__FP9daAlink_c.s" } diff --git a/src/d/d_camera.cpp b/src/d/d_camera.cpp index ff1c6fe29d..b6b987f295 100644 --- a/src/d/d_camera.cpp +++ b/src/d/d_camera.cpp @@ -1711,7 +1711,7 @@ asm void dCamera_c::Stay() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dCamera_c::ChangeModeOK(s32 param_0) { +asm u8 dCamera_c::ChangeModeOK(s32 param_0) { nofralloc #include "asm/d/d_camera/ChangeModeOK__9dCamera_cFl.s" } |
