From 522c051b1a3ad1ab9f97d1ee89681aa92954b735 Mon Sep 17 00:00:00 2001 From: Pheenoh Date: Sat, 18 May 2024 19:23:02 -0600 Subject: [PATCH] Misc changes (#2156) * daB_YO_Draw & onIceBreak * misc changes * remove asm / progress --- Progress.md | 8 +- .../d_a_b_yo/daB_YO_Draw__FP8daB_YO_c.s | 9 - .../d_a_b_yo/onIceBreak__8daB_YO_cFUs.s | 8 - include/d/a/d_a_alink.h | 3 +- include/d/meter/d_meter2_info.h | 2 +- include/rel/d/a/b/d_a_b_yo/d_a_b_yo.h | 8 +- include/rel/d/a/e/d_a_e_ymb/d_a_e_ymb.h | 74 ++++ rel/d/a/b/d_a_b_yo/d_a_b_yo.cpp | 98 ++-- rel/d/a/e/d_a_e_ymb/d_a_e_ymb.cpp | 418 +----------------- src/d/a/d_a_alink.cpp | 2 +- src/d/a/d_a_alink_cut.inc | 10 +- src/d/a/d_a_alink_wolf.inc | 69 +++ 12 files changed, 252 insertions(+), 457 deletions(-) delete mode 100644 asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/daB_YO_Draw__FP8daB_YO_c.s delete mode 100644 asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/onIceBreak__8daB_YO_cFUs.s diff --git a/Progress.md b/Progress.md index 729b4246ccb..e1ab55edc6f 100644 --- a/Progress.md +++ b/Progress.md @@ -21,8 +21,8 @@ Total | 54.954197% | 2209528 | 4020672 Section | Percentage | Decompiled (bytes) | Total (bytes) ---|---|---|--- main.dol | 54.954197% | 2209528 | 4020672 -RELs | 38.671154% | 4447308 | 11500324 -Total | 42.889232% | 6656836 | 15520996 +RELs | 38.671676% | 4447368 | 11500324 +Total | 42.889619% | 6656896 | 15520996 ## RELs @@ -50,7 +50,7 @@ d_a_b_ob | 31.572858% | 18556 | 58772 d_a_b_oh | 35.387431% | 4640 | 13112 d_a_b_oh2 | 100.000000% | 5532 | 5532 d_a_b_tn | 24.850960% | 21176 | 85212 -d_a_b_yo | 25.613486% | 14404 | 56236 +d_a_b_yo | 25.720179% | 14464 | 56236 d_a_b_yo_ice | 28.297953% | 5972 | 21104 d_a_b_zant | 22.203940% | 19432 | 87516 d_a_b_zant_magic | 42.453480% | 2464 | 5804 @@ -785,4 +785,4 @@ d_a_vrbox2 | 44.907111% | 2804 | 6244 d_a_warp_bug | 100.000000% | 2024 | 2024 d_a_ykgr | 44.400631% | 2252 | 5072 f_pc_profile_lst | 100.000000% | 28156 | 28156 -Total | 38.671154% | 4447308 | 11500324 +Total | 38.671676% | 4447368 | 11500324 diff --git a/asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/daB_YO_Draw__FP8daB_YO_c.s b/asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/daB_YO_Draw__FP8daB_YO_c.s deleted file mode 100644 index f3d78a10fc6..00000000000 --- a/asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/daB_YO_Draw__FP8daB_YO_c.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_8062FBCC: -/* 8062FBCC 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 8062FBD0 7C 08 02 A6 */ mflr r0 -/* 8062FBD4 90 01 00 14 */ stw r0, 0x14(r1) -/* 8062FBD8 4B FF F9 45 */ bl draw__8daB_YO_cFv -/* 8062FBDC 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8062FBE0 7C 08 03 A6 */ mtlr r0 -/* 8062FBE4 38 21 00 10 */ addi r1, r1, 0x10 -/* 8062FBE8 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/onIceBreak__8daB_YO_cFUs.s b/asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/onIceBreak__8daB_YO_cFUs.s deleted file mode 100644 index 3141a441712..00000000000 --- a/asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/onIceBreak__8daB_YO_cFUs.s +++ /dev/null @@ -1,8 +0,0 @@ -lbl_8062FBEC: -/* 8062FBEC A0 C3 0F 6E */ lhz r6, 0xf6e(r3) -/* 8062FBF0 38 A0 00 01 */ li r5, 1 -/* 8062FBF4 54 80 04 3E */ clrlwi r0, r4, 0x10 -/* 8062FBF8 7C A0 00 30 */ slw r0, r5, r0 -/* 8062FBFC 7C C0 03 78 */ or r0, r6, r0 -/* 8062FC00 B0 03 0F 6E */ sth r0, 0xf6e(r3) -/* 8062FC04 4E 80 00 20 */ blr diff --git a/include/d/a/d_a_alink.h b/include/d/a/d_a_alink.h index 7c06fa2c6fb..ab9efe8bb96 100644 --- a/include/d/a/d_a_alink.h +++ b/include/d/a/d_a_alink.h @@ -3720,7 +3720,8 @@ public: /* 0x03062 */ s16 field_0x3062; /* 0x03064 */ s16 field_0x3064; /* 0x03066 */ s16 field_0x3066; - /* 0x03068 */ u8 field_0x3068[4]; + /* 0x03068 */ u8 field_0x3068[2]; + /* 0x0306A */ s16 field_0x306a; /* 0x0306C */ s16 field_0x306c; /* 0x0306E */ s16 field_0x306e; /* 0x03070 */ s16 field_0x3070; diff --git a/include/d/meter/d_meter2_info.h b/include/d/meter/d_meter2_info.h index 3556917b9af..266c4ffb64b 100644 --- a/include/d/meter/d_meter2_info.h +++ b/include/d/meter/d_meter2_info.h @@ -224,7 +224,7 @@ public: /* 0xB4 */ u16 mWindowAccept; /* 0xB6 */ u16 mOilGaugeBackUp; /* 0xB8 */ u8 mDirectUseItem; - /* 0xB9 */ u8 mWindowStatus; + /* 0xB9 */ u8 mWindowStatus; // 0: normal play, 2: item wheel, 3: pause menu, 4: map, 10: pause menu submenus, 11: map in dungeon /* 0xBA */ u8 unk186; /* 0xBB */ u8 mMaxCount; /* 0xBC */ u8 mNowCount; diff --git a/include/rel/d/a/b/d_a_b_yo/d_a_b_yo.h b/include/rel/d/a/b/d_a_b_yo/d_a_b_yo.h index 7dbc8b52836..98ef985bfa5 100644 --- a/include/rel/d/a/b/d_a_b_yo/d_a_b_yo.h +++ b/include/rel/d/a/b/d_a_b_yo/d_a_b_yo.h @@ -14,7 +14,7 @@ */ class daB_YO_c : public fopEn_enemy_c { public: - /* 8062F51C */ void draw(); + /* 8062F51C */ s32 draw(); /* 8062FBEC */ void onIceBreak(u16); /* 8062FC08 */ void setBck(int, u8, f32, f32); /* 8062FE0C */ void setActionMode(int, int); @@ -71,11 +71,15 @@ private: /* 0xF54 */ f32 mModeRarius; /* 0xF58 */ u8 field_0xf58[0xF5C - 0xF58]; /* 0xF5C */ s16 mRollAngle; - /* 0xF5E */ u8 field_0xf5e[0xFA8 - 0xF5E]; + /* 0xF5E */ u8 field_0xf5e[0xF6E - 0xF5E]; + /* 0xF6E */ u16 field_0xf6e; + /* 0xF70 */ u8 field_0xf70[0xFA8 - 0xF70]; /* 0xFA8 */ u8 mModelNo; /* 0xFA9 */ u8 field_0xfa9[0xFAD - 0xFA9]; /* 0xFAD */ u8 mFrizadAttack; + /* 0xFAE */ u8 field_0xfae[0x1B88 - 0xFAE]; }; +STATIC_ASSERT(sizeof(daB_YO_c) == 0x1B88); struct daB_YO_HIO_c { /* 8062F46C */ daB_YO_HIO_c(); diff --git a/include/rel/d/a/e/d_a_e_ymb/d_a_e_ymb.h b/include/rel/d/a/e/d_a_e_ymb/d_a_e_ymb.h index 1a177fefcd9..39298962107 100644 --- a/include/rel/d/a/e/d_a_e_ymb/d_a_e_ymb.h +++ b/include/rel/d/a/e/d_a_e_ymb/d_a_e_ymb.h @@ -2,5 +2,79 @@ #define D_A_E_YMB_H #include "dolphin/types.h" +#include "f_op/f_op_actor_mng.h" + +class daE_YMB_c : public fopEn_enemy_c { +public: + /* 8081615C */ void ctrlJoint(J3DJoint*, J3DModel*); + /* 808164F0 */ void JointCallBack(J3DJoint*, int); + /* 80816554 */ void draw(); + /* 8081697C */ void setBck(int, u8, f32, f32); + /* 80816A20 */ void checkBck(int); + /* 80816A7C */ void setActionMode(int, int); + /* 80816A88 */ void setLastDamage(); + /* 80816B7C */ void damage_check(); + /* 80816E78 */ void setCameraSwitch(); + /* 80817064 */ void checkWaterPos(); + /* 80817164 */ void checkGroundPos(); + /* 80817200 */ void setFlyWaitVoice(); + /* 8081727C */ void setDownWaitVoice(); + /* 808172F8 */ void setHitBoardSe(); + /* 808173B0 */ void setElecEffect1(); + /* 8081756C */ void setElecEffect2(); + /* 80817744 */ void setWaterEffect1(); + /* 8081785C */ void setWaterEffect2(); + /* 80817974 */ void setBoilEffect(int); + /* 80817AEC */ void setDamageEffect(int); + /* 80817BD8 */ void setDownHamonEffect(); + /* 80817CF0 */ void setFlyBlurEffect(); + /* 80817E7C */ void setRockDamageEffect(); + /* 80817FDC */ void setDeathEffect(); + /* 808181F4 */ void executeWait(); + /* 80818328 */ void setBitePos(int); + /* 80818370 */ void setInclination(); + /* 80818518 */ void setBodyAngle(); + /* 80818930 */ void checkWolfLockIn(); + /* 80818AE8 */ void executeFly(); + /* 80819610 */ void executeFlyAttack(); + /* 80819FD0 */ void executeRunAway(); + /* 8081A718 */ void executeGuard(); + /* 8081A88C */ void executeSwim(); + /* 8081B78C */ void executeWaterJump(); + /* 8081BC10 */ void getNearDownPos(); + /* 8081BEE8 */ void executeDamage(); + /* 8081C4EC */ void setMidnaBindInit(cXyz*); + /* 8081C7D0 */ void setMidnaBindLevel(int); + /* 8081C908 */ void setWolfLockEffect(); + /* 8081CC14 */ void initDownToWater(); + /* 8081CD00 */ void calcDownToWater(); + /* 8081CE6C */ void executeDown(); + /* 8081D4D8 */ void setCreateDrop(); + /* 8081D594 */ void executeDeath(); + /* 8081DBD0 */ void demo_skip(int); + /* 8081DDE0 */ void DemoSkipCallBack(void*, int); + /* 8081DE14 */ void calcLakeDemoPlayerPos(); + /* 8081DE84 */ void executeLakeDemo(); + /* 8081E5B4 */ void executeStartDemo(); + /* 8081F140 */ void checkStartBattleDemo(); + /* 8081F2E0 */ void executeBattleDemo(); + /* 8081FAC8 */ void action(); + /* 8081FF88 */ void mtx_set(); + /* 808200A0 */ void getBellyBitePos(cXyz*); + /* 80820128 */ void getDownLockPoint(); + /* 808203D8 */ void setAttentionPos(); + /* 80820668 */ void cc_set(); + /* 808207AC */ void execute(); + /* 80820A40 */ void _delete(); + /* 80820AF0 */ void CreateHeap(); + /* 80820DD0 */ void create(); + + int getMaxLockAttack() { return 6; } +}; + +struct daE_YMB_HIO_c { + /* 8081610C */ daE_YMB_HIO_c(); + /* 80821460 */ ~daE_YMB_HIO_c(); +}; #endif /* D_A_E_YMB_H */ diff --git a/rel/d/a/b/d_a_b_yo/d_a_b_yo.cpp b/rel/d/a/b/d_a_b_yo/d_a_b_yo.cpp index 7e043df71b3..73c01c4b40b 100644 --- a/rel/d/a/b/d_a_b_yo/d_a_b_yo.cpp +++ b/rel/d/a/b/d_a_b_yo/d_a_b_yo.cpp @@ -1,10 +1,12 @@ -// -// Generated By: dol2asm -// Translation Unit: d_a_b_yo -// +/** + * @file d_a_b_yo.cpp + * @brief Actor - Blizzeta (Boss) + * + */ #include "rel/d/a/b/d_a_b_yo/d_a_b_yo.h" #include "rel/d/a/obj/d_a_obj_ystone/d_a_obj_ystone.h" +#include "d/com/d_com_inf_game.h" #include "dol2asm.h" // @@ -274,7 +276,6 @@ extern "C" extern void* __vt__12cCcD_CylAttr[25]; extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; extern "C" extern void* __vt__9cCcD_Stts[8]; extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32]; // extern "C" extern u8 g_env_light[4880]; // extern "C" extern u8 j3dSys[284]; @@ -477,12 +478,26 @@ SECTION_DATA static u8 yo_material_draw[27 + 1 /* padding */] = { /* 80639B60-80639BAC 000100 004C+00 0/1 0/0 0/0 .data yo_demo_bck_idx */ #pragma push #pragma force_active on -SECTION_DATA static u8 yo_demo_bck_idx[76] = { - 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x11, - 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x15, - 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x17, - 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0A, - 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x09, +static u32 yo_demo_bck_idx[19] = { + 0x00000007, + 0x00000008, + 0x0000000D, + 0x00000011, + 0x00000012, + 0x00000013, + 0x00000014, + 0x00000015, + 0x00000019, + 0x0000000F, + 0x00000010, + 0x00000017, + 0x00000016, + 0x0000000E, + 0x00000018, + 0x0000000A, + 0x0000000B, + 0x0000000C, + 0x00000009, }; #pragma pop @@ -820,7 +835,7 @@ COMPILER_STRIP_GATE(0x80639834, &lit_4080); #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daB_YO_c::draw() { +asm s32 daB_YO_c::draw() { nofralloc #include "asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/draw__8daB_YO_cFv.s" } @@ -838,24 +853,14 @@ asm void __dt__4cXyzFv() { #pragma pop /* 8062FBCC-8062FBEC 00084C 0020+00 1/0 0/0 0/0 .text daB_YO_Draw__FP8daB_YO_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daB_YO_Draw(daB_YO_c* param_0) { - nofralloc -#include "asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/daB_YO_Draw__FP8daB_YO_c.s" +static s32 daB_YO_Draw(daB_YO_c* i_this) { + return i_this->draw(); } -#pragma pop /* 8062FBEC-8062FC08 00086C 001C+00 0/0 0/0 4/4 .text onIceBreak__8daB_YO_cFUs */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daB_YO_c::onIceBreak(u16 param_0) { - nofralloc -#include "asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/onIceBreak__8daB_YO_cFUs.s" +void daB_YO_c::onIceBreak(u16 param_0) { + field_0xf6e |= (1 << param_0); } -#pragma pop /* ############################################################################################## */ /* 80639838-8063983C 000044 0004+00 0/4 0/0 0/0 .rodata @4149 */ @@ -872,6 +877,46 @@ SECTION_DEAD static char const* const stringBase_80639A34 = "B_YO"; #pragma pop /* 8062FC08-8062FE0C 000888 0204+00 4/4 0/0 0/0 .text setBck__8daB_YO_cFiUcff */ +#ifdef NONMATCHING +void daB_YO_c::setBck(int i_bckIdx, u8 param_1, f32 param_2, f32 param_3) { + J3DModel* l_model = (J3DModel*)dComIfG_getObjectRes("B_YO",yo_demo_bck_idx[i_bckIdx]); + setAnm(); + (*(mDoExt_McaMorfSO **)(this + 0x5fc),pJVar3,(uint)param_2,param_3,(float)dVar8,0.0,-1.0 + ); + this_00 = (J3DModel *)mDoExt_McaMorfSO::getModel(*(mDoExt_McaMorfSO **)(this + 0x5fc)); + ctx = (J3DModelData *)J3DModel::getModelData(this_00); + mDoExt_btkAnm::remove(*(mDoExt_btkAnm **)(this + 0x5e0),(char *)ctx); + iVar5 = *(int *)(&d_a_b_yo::yo_demo_btk_idx + param_1 * 4); + if (iVar5 == 0xff) { + this[0x1005] = (daB_YO_c)0x0; + } + else { + this[0x1005] = (daB_YO_c)0x1; + pJVar4 = (J3DAnmTextureSRTKey *)f_op_actor::dComIfG_getObjectRes(&d_a_b_yo::@118744,iVar5); + mDoExt_btkAnm::init(*(mDoExt_btkAnm **)(this + 0x5e0),ctx,pJVar4,1,(float)dVar8,(ushort)param_2, + 0); + } + mDoExt_btpAnm::remove(*(mDoExt_btpAnm **)(this + 0x5e4),(char *)ctx); + f_op_actor::dComIfG_getObjectRes + (&d_a_b_yo::@118744,*(undefined4 *)(&d_a_b_yo::yo_demo_btp_idx + param_1 * 4)); + mDoExt_btpAnm::init(*(mDoExt_btpAnm **)(this + 0x5e4),(EVP_PKEY_CTX *)ctx); + if (param_1 == 0) { + this[0x1004] = (daB_YO_c)0x1; + uVar6 = 0x25; + } + else if (param_1 == 1) { + uVar6 = 0x26; + } + else if (this[0x1004] == (daB_YO_c)0x0) { + uVar6 = 0x25; + } + else { + uVar6 = 0x24; + } + f_op_actor::dComIfG_getObjectRes(&d_a_b_yo::@118744,uVar6); + ::mDoExt_brkAnm::init(*(mDoExt_brkAnm **)(this + 0x5e8),(EVP_PKEY_CTX *)ctx); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -880,6 +925,7 @@ asm void daB_YO_c::setBck(int param_0, u8 param_1, f32 param_2, f32 param_3) { #include "asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/setBck__8daB_YO_cFiUcff.s" } #pragma pop +#endif /* 8062FE0C-8062FE18 000A8C 000C+00 11/11 0/0 0/0 .text setActionMode__8daB_YO_cFii */ #pragma push diff --git a/rel/d/a/e/d_a_e_ymb/d_a_e_ymb.cpp b/rel/d/a/e/d_a_e_ymb/d_a_e_ymb.cpp index fccf102f7ac..f3423f5d13f 100644 --- a/rel/d/a/e/d_a_e_ymb/d_a_e_ymb.cpp +++ b/rel/d/a/e/d_a_e_ymb/d_a_e_ymb.cpp @@ -6,386 +6,6 @@ #include "rel/d/a/e/d_a_e_ymb/d_a_e_ymb.h" #include "dol2asm.h" -// -// Types: -// - -struct request_of_phase_process_class {}; - -struct csXyz {}; - -struct Vec {}; - -struct cXyz { - /* 80266AE4 */ void operator+(Vec const&) const; - /* 80266B34 */ void operator-(Vec const&) const; - /* 80266B84 */ void operator*(f32) const; - /* 808164B4 */ ~cXyz(); -}; - -struct mDoMtx_stack_c { - /* 8000CD64 */ void transS(cXyz const&); - /* 8000CD9C */ void transM(f32, f32, f32); - /* 8000CE38 */ void scaleM(f32, f32, f32); - /* 8000CF44 */ void ZXYrotM(csXyz const&); - - static u8 now[48]; -}; - -struct J3DModel {}; - -struct mDoExt_invisibleModel { - /* 8000E53C */ void create(J3DModel*, u8); - /* 8000E7C0 */ void entryDL(cXyz*); -}; - -struct J3DMaterialTable {}; - -struct J3DAnmTevRegKey {}; - -struct mDoExt_brkAnm { - /* 8000D70C */ void init(J3DMaterialTable*, J3DAnmTevRegKey*, int, int, f32, s16, s16); - /* 8000D7A8 */ void entry(J3DMaterialTable*, f32); -}; - -struct mDoExt_baseAnm { - /* 8000D428 */ void play(); -}; - -struct mDoExt_McaMorfCallBack2_c {}; - -struct mDoExt_McaMorfCallBack1_c {}; - -struct J3DAnmTransform {}; - -struct J3DModelData {}; - -struct Z2Creature {}; - -struct mDoExt_McaMorfSO { - /* 800107D0 */ mDoExt_McaMorfSO(J3DModelData*, mDoExt_McaMorfCallBack1_c*, - mDoExt_McaMorfCallBack2_c*, J3DAnmTransform*, int, f32, int, - int, Z2Creature*, u32, u32); - /* 80010E70 */ void setAnm(J3DAnmTransform*, int, f32, f32, f32, f32); - /* 800110B0 */ void play(u32, s8); - /* 800111C0 */ void entryDL(); - /* 800111EC */ void modelCalc(); -}; - -struct fopAc_ac_c { - /* 80018B64 */ fopAc_ac_c(); -}; - -struct daPy_py_c { - /* 8015F424 */ void checkNowWolfEyeUp(); - - static u8 m_midnaActor[4]; -}; - -struct daObjDrop_c { - /* 8082187C */ void setPos(cXyz); -}; - -struct J3DJoint {}; - -struct daE_YMB_c { - /* 8081615C */ void ctrlJoint(J3DJoint*, J3DModel*); - /* 808164F0 */ void JointCallBack(J3DJoint*, int); - /* 80816554 */ void draw(); - /* 8081697C */ void setBck(int, u8, f32, f32); - /* 80816A20 */ void checkBck(int); - /* 80816A7C */ void setActionMode(int, int); - /* 80816A88 */ void setLastDamage(); - /* 80816B7C */ void damage_check(); - /* 80816E78 */ void setCameraSwitch(); - /* 80817064 */ void checkWaterPos(); - /* 80817164 */ void checkGroundPos(); - /* 80817200 */ void setFlyWaitVoice(); - /* 8081727C */ void setDownWaitVoice(); - /* 808172F8 */ void setHitBoardSe(); - /* 808173B0 */ void setElecEffect1(); - /* 8081756C */ void setElecEffect2(); - /* 80817744 */ void setWaterEffect1(); - /* 8081785C */ void setWaterEffect2(); - /* 80817974 */ void setBoilEffect(int); - /* 80817AEC */ void setDamageEffect(int); - /* 80817BD8 */ void setDownHamonEffect(); - /* 80817CF0 */ void setFlyBlurEffect(); - /* 80817E7C */ void setRockDamageEffect(); - /* 80817FDC */ void setDeathEffect(); - /* 808181F4 */ void executeWait(); - /* 80818328 */ void setBitePos(int); - /* 80818370 */ void setInclination(); - /* 80818518 */ void setBodyAngle(); - /* 80818930 */ void checkWolfLockIn(); - /* 80818AE8 */ void executeFly(); - /* 80819610 */ void executeFlyAttack(); - /* 80819FD0 */ void executeRunAway(); - /* 8081A718 */ void executeGuard(); - /* 8081A88C */ void executeSwim(); - /* 8081B78C */ void executeWaterJump(); - /* 8081BC10 */ void getNearDownPos(); - /* 8081BEE8 */ void executeDamage(); - /* 8081C4EC */ void setMidnaBindInit(cXyz*); - /* 8081C7D0 */ void setMidnaBindLevel(int); - /* 8081C908 */ void setWolfLockEffect(); - /* 8081CC14 */ void initDownToWater(); - /* 8081CD00 */ void calcDownToWater(); - /* 8081CE6C */ void executeDown(); - /* 8081D4D8 */ void setCreateDrop(); - /* 8081D594 */ void executeDeath(); - /* 8081DBD0 */ void demo_skip(int); - /* 8081DDE0 */ void DemoSkipCallBack(void*, int); - /* 8081DE14 */ void calcLakeDemoPlayerPos(); - /* 8081DE84 */ void executeLakeDemo(); - /* 8081E5B4 */ void executeStartDemo(); - /* 8081F140 */ void checkStartBattleDemo(); - /* 8081F2E0 */ void executeBattleDemo(); - /* 8081FAC8 */ void action(); - /* 8081FF88 */ void mtx_set(); - /* 808200A0 */ void getBellyBitePos(cXyz*); - /* 80820128 */ void getDownLockPoint(); - /* 808203D8 */ void setAttentionPos(); - /* 80820668 */ void cc_set(); - /* 808207AC */ void execute(); - /* 80820A40 */ void _delete(); - /* 80820AF0 */ void CreateHeap(); - /* 80820DD0 */ void create(); -}; - -struct daE_YMB_HIO_c { - /* 8081610C */ daE_YMB_HIO_c(); - /* 80821460 */ ~daE_YMB_HIO_c(); -}; - -struct dVibration_c { - /* 8006FA24 */ void StartShock(int, int, cXyz); - /* 8006FB10 */ void StartQuake(int, int, cXyz); - /* 8006FC0C */ void StartQuake(u8 const*, int, int, cXyz); - /* 8006FD94 */ void StopQuake(int); -}; - -struct dSv_memBit_c { - /* 80034810 */ void onSwitch(int); - /* 80034860 */ void isSwitch(int) const; -}; - -struct dSv_info_c { - /* 80035200 */ void onSwitch(int, int); - /* 800352B0 */ void offSwitch(int, int); - /* 80035360 */ void isSwitch(int, int) const; -}; - -struct dSv_event_flag_c { - static u8 saveBitLabels[1644 + 4 /* padding */]; -}; - -struct dSv_event_c { - /* 8003498C */ void onEventBit(u16); - /* 800349BC */ void isEventBit(u16) const; -}; - -struct dKy_tevstr_c {}; - -struct dScnKy_env_light_c { - /* 801A37C4 */ void settingTevStruct(int, cXyz*, dKy_tevstr_c*); - /* 801A4DA0 */ void setLightTevColorType_MAJI(J3DModelData*, dKy_tevstr_c*); -}; - -struct dRes_info_c {}; - -struct dRes_control_c { - /* 8003C2EC */ void getRes(char const*, s32, dRes_info_c*, int); -}; - -struct dPa_levelEcallBack {}; - -struct _GXColor {}; - -struct dPa_control_c { - struct level_c { - /* 8004B918 */ void getEmitter(u32); - }; - - /* 8004C218 */ void setHitMark(u16, fopAc_ac_c*, cXyz const*, csXyz const*, cXyz const*, u32); - /* 8004D4CC */ void set(u32, u8, u16, cXyz const*, dKy_tevstr_c const*, csXyz const*, - cXyz const*, u8, dPa_levelEcallBack*, s8, _GXColor const*, - _GXColor const*, cXyz const*, f32); - /* 8004CA90 */ void set(u8, u16, cXyz const*, dKy_tevstr_c const*, csXyz const*, cXyz const*, - u8, dPa_levelEcallBack*, s8, _GXColor const*, _GXColor const*, - cXyz const*, f32); -}; - -struct dEvt_control_c { - /* 80042468 */ void reset(); - /* 80042914 */ void setSkipProc(void*, int (*)(void*, int), int); - /* 8004368C */ void setPtT(void*); -}; - -struct dDlst_shadowControl_c { - static u8 mSimpleTexObj[32]; -}; - -struct dCcU_AtInfo {}; - -struct dCcD_Stts { - /* 80083860 */ void Init(int, int, fopAc_ac_c*); -}; - -struct dCcD_SrcSph {}; - -struct dCcD_Sph { - /* 80084A34 */ void Set(dCcD_SrcSph const&); - /* 8082124C */ ~dCcD_Sph(); - /* 80821318 */ dCcD_Sph(); -}; - -struct dCcD_GStts { - /* 80083760 */ dCcD_GStts(); - /* 8082139C */ ~dCcD_GStts(); -}; - -struct dCcD_GObjInf { - /* 80083A28 */ dCcD_GObjInf(); - /* 800840E4 */ ~dCcD_GObjInf(); - /* 800842C0 */ void ChkAtHit(); - /* 80084358 */ void GetAtHitObj(); - /* 80084460 */ void ChkTgHit(); - /* 800844B8 */ void ResetTgHit(); - /* 800844F8 */ void GetTgHitObj(); -}; - -struct dCamera_c { - /* 801614AC */ void Start(); - /* 801614D0 */ void Stop(); - /* 8016300C */ void SetTrimSize(s32); - /* 80180AE0 */ void Set(cXyz, cXyz, f32, s16); - /* 80180C18 */ void Reset(cXyz, cXyz); - /* 80181E64 */ void Eye(); - /* 80181E98 */ void Center(); -}; - -struct dBgW_Base {}; - -struct dBgW { - /* 8007B970 */ dBgW(); - /* 8007B9C0 */ void Move(); -}; - -struct dBgS_ObjGndChk_Spl { - /* 800777B0 */ dBgS_ObjGndChk_Spl(); - /* 80077848 */ ~dBgS_ObjGndChk_Spl(); -}; - -struct dBgS_GndChk { - /* 8007757C */ dBgS_GndChk(); -}; - -struct dBgS { - /* 80074A08 */ void Regist(dBgW_Base*, fopAc_ac_c*); -}; - -struct dAttention_c { - /* 8007353C */ void LockonTarget(s32); - /* 800737E4 */ void LockonTruth(); -}; - -struct cM3dGSph { - /* 8026F648 */ void SetC(cXyz const&); - /* 8026F708 */ void SetR(f32); - /* 808211BC */ ~cM3dGSph(); -}; - -struct cM3dGAab { - /* 80821204 */ ~cM3dGAab(); -}; - -struct cCcD_Obj { - /* 80263A48 */ void GetAc(); -}; - -struct cCcS { - /* 80264BA8 */ void Set(cCcD_Obj*); -}; - -struct cCcD_GStts { - /* 80821418 */ ~cCcD_GStts(); -}; - -struct cBgW_BgId { - /* 802681D4 */ void ChkUsed() const; -}; - -struct cBgD_t {}; - -struct cBgW { - /* 80079F38 */ void Set(cBgD_t*, u32, f32 (*)[3][4]); -}; - -struct cBgS_PolyInfo {}; - -struct cBgS_GndChk { - /* 80267D28 */ void SetPos(cXyz const*); - /* 80267D0C */ void SetPos(Vec const*); -}; - -struct cBgS { - /* 80074250 */ void Release(dBgW_Base*); - /* 800744A0 */ void GroundCross(cBgS_GndChk*); -}; - -struct _GXTexObj {}; - -struct Z2SoundObjMgr { - /* 802BF980 */ void setForceBattleArea(bool, u16, u16, u16); -}; - -struct Z2SeqMgr { - /* 802AF49C */ void subBgmStart(u32); - /* 802AF884 */ void subBgmStop(); - /* 802B1DF4 */ void changeSubBgmStatus(s32); - /* 802B4164 */ void setBattleBgmOff(bool); -}; - -struct JAISoundID {}; - -struct Z2SeMgr { - /* 802AB984 */ void seStart(JAISoundID, Vec const*, u32, s8, f32, f32, f32, f32, u8); - /* 802AC50C */ void seStartLevel(JAISoundID, Vec const*, u32, s8, f32, f32, f32, f32, u8); -}; - -struct Z2CreatureEnemy { - /* 802C0F64 */ Z2CreatureEnemy(); - /* 802C1094 */ void init(Vec*, Vec*, u8, u8); - /* 802C1B7C */ void setLinkSearch(bool); - /* 802C1B90 */ void setEnemyName(char const*); -}; - -struct Z2AudioMgr { - static u8 mAudioMgrPtr[4 + 4 /* padding */]; -}; - -struct JMath { - static u8 sincosTable_[65536]; -}; - -struct JGeometry { - template - struct TVec3 {}; - /* TVec3 */ - struct TVec3__template0 {}; -}; - -struct J3DSys { - static u8 mCurrentMtx[48]; -}; - -struct J3DFrameCtrl { - /* 803283FC */ void init(s16); - /* 8032842C */ void checkPass(f32); - /* 80820D68 */ ~J3DFrameCtrl(); -}; - // // Forward References: // @@ -607,11 +227,6 @@ extern "C" void* __nw__FUl(); extern "C" void __dl__FPv(); extern "C" void init__12J3DFrameCtrlFs(); extern "C" void checkPass__12J3DFrameCtrlFf(); -extern "C" void PSMTXCopy(); -extern "C" void PSMTXTrans(); -extern "C" void PSVECAdd(); -extern "C" void PSVECSquareMag(); -extern "C" void PSVECSquareDistance(); extern "C" void __construct_array(); extern "C" void _savegpr_22(); extern "C" void _savegpr_23(); @@ -629,9 +244,6 @@ extern "C" void _restgpr_26(); extern "C" void _restgpr_27(); extern "C" void _restgpr_28(); extern "C" void _restgpr_29(); -extern "C" void abs(); -extern "C" extern void* g_fopAc_Method[8]; -extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; extern "C" u8 saveBitLabels__16dSv_event_flag_c[1644 + 4 /* padding */]; extern "C" extern void* __vt__8dCcD_Sph[36]; extern "C" extern void* __vt__9dCcD_Stts[11]; @@ -641,12 +253,9 @@ extern "C" extern void* __vt__9cCcD_Stts[8]; extern "C" u8 now__14mDoMtx_stack_c[48]; extern "C" extern u8 g_dComIfG_gameInfo[122384]; extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32]; -extern "C" extern u8 g_env_light[4880]; -extern "C" extern u8 j3dSys[284]; extern "C" u8 mCurrentMtx__6J3DSys[48]; extern "C" extern u8 j3dZModeTable[96]; extern "C" u8 sincosTable___5JMath[65536]; -extern "C" extern u32 __float_nan; extern "C" u8 m_midnaActor__9daPy_py_c[4]; extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; extern "C" void __register_global_object(); @@ -1096,7 +705,8 @@ asm void daE_YMB_c::ctrlJoint(J3DJoint* param_0, J3DModel* param_1) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cXyz::~cXyz() { +// asm cXyz::~cXyz() { +extern "C" asm void __dt__4cXyzFv(void) { nofralloc #include "asm/rel/d/a/e/d_a_e_ymb/d_a_e_ymb/__dt__4cXyzFv.s" } @@ -2803,7 +2413,8 @@ asm void daE_YMB_c::CreateHeap() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DFrameCtrl::~J3DFrameCtrl() { +// asm J3DFrameCtrl::~J3DFrameCtrl() { +extern "C" asm void __dt__12J3DFrameCtrlFv() { nofralloc #include "asm/rel/d/a/e/d_a_e_ymb/d_a_e_ymb/__dt__12J3DFrameCtrlFv.s" } @@ -2847,7 +2458,8 @@ asm void daE_YMB_c::create() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cM3dGSph::~cM3dGSph() { +// asm cM3dGSph::~cM3dGSph() { +extern "C" asm void __dt__8cM3dGSphFv() { nofralloc #include "asm/rel/d/a/e/d_a_e_ymb/d_a_e_ymb/__dt__8cM3dGSphFv.s" } @@ -2857,7 +2469,8 @@ asm cM3dGSph::~cM3dGSph() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cM3dGAab::~cM3dGAab() { +// asm cM3dGAab::~cM3dGAab() { +extern "C" asm void __dt__8cM3dGAabFv() { nofralloc #include "asm/rel/d/a/e/d_a_e_ymb/d_a_e_ymb/__dt__8cM3dGAabFv.s" } @@ -2867,7 +2480,8 @@ asm cM3dGAab::~cM3dGAab() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm dCcD_Sph::~dCcD_Sph() { +// asm dCcD_Sph::~dCcD_Sph() { +extern "C" asm void __dt__8dCcD_SphFv() { nofralloc #include "asm/rel/d/a/e/d_a_e_ymb/d_a_e_ymb/__dt__8dCcD_SphFv.s" } @@ -2877,7 +2491,8 @@ asm dCcD_Sph::~dCcD_Sph() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm dCcD_Sph::dCcD_Sph() { +// asm dCcD_Sph::dCcD_Sph() { +extern "C" asm void __ct__8dCcD_SphFv() { nofralloc #include "asm/rel/d/a/e/d_a_e_ymb/d_a_e_ymb/__ct__8dCcD_SphFv.s" } @@ -2887,7 +2502,8 @@ asm dCcD_Sph::dCcD_Sph() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm dCcD_GStts::~dCcD_GStts() { +// asm dCcD_GStts::~dCcD_GStts() { +extern "C" asm void __dt__10dCcD_GSttsFv() { nofralloc #include "asm/rel/d/a/e/d_a_e_ymb/d_a_e_ymb/__dt__10dCcD_GSttsFv.s" } @@ -2907,7 +2523,8 @@ static asm void daE_YMB_Create(daE_YMB_c* param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cCcD_GStts::~cCcD_GStts() { +// asm cCcD_GStts::~cCcD_GStts() { +extern "C" asm void __dt__10cCcD_GSttsFv() { nofralloc #include "asm/rel/d/a/e/d_a_e_ymb/d_a_e_ymb/__dt__10cCcD_GSttsFv.s" } @@ -3167,7 +2784,8 @@ REGISTER_CTORS(0x808214A8, __sinit_d_a_e_ymb_cpp); #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daObjDrop_c::setPos(cXyz param_0) { +// asm void daObjDrop_c::setPos(cXyz param_0) { +extern "C" asm void setPos__11daObjDrop_cF4cXyz() { nofralloc #include "asm/rel/d/a/e/d_a_e_ymb/d_a_e_ymb/setPos__11daObjDrop_cF4cXyz.s" } diff --git a/src/d/a/d_a_alink.cpp b/src/d/a/d_a_alink.cpp index 3f004b4466e..7579a3c9f78 100644 --- a/src/d/a/d_a_alink.cpp +++ b/src/d/a/d_a_alink.cpp @@ -17522,7 +17522,7 @@ void daAlink_c::posMove() { speed.y = daAlinkHIO_swim_c0::m.mMaxFloatUpSpeed; } } - } else if (!checkModeFlg(0x400)) { + } else if (!checkModeFlg(MODE_RIDE)) { if (checkHeavyStateOn(1, 1) && mProcID != PROC_SPINNER_READY && !checkNoResetFlg0(FLG0_UNDERWATER)) { diff --git a/src/d/a/d_a_alink_cut.inc b/src/d/a/d_a_alink_cut.inc index 8d0ec5e45a0..48e7e31967f 100644 --- a/src/d/a/d_a_alink_cut.inc +++ b/src/d/a/d_a_alink_cut.inc @@ -762,15 +762,15 @@ void daAlink_c::setCutJumpSpeed(int i_airAt) { targetPos.y = mTargetedActor->eyePos.y; } - f32 dvar12 = speed.y + gravity; - f32 dvar10 = 1.0f / gravity; - f32 fvar1 = targetPos.y - (current.pos.y - (dvar10 * (dvar12 * dvar12) * 0.5f)); + f32 speed_y_delta = speed.y + gravity; // 23.6 + f32 inverse_gravity = 1.0f / gravity; // -0.29 + f32 fvar1 = targetPos.y - (current.pos.y - (inverse_gravity * (speed_y_delta * speed_y_delta) * 0.5f)); if (fvar1 > 0.0f) { fvar1 = 0.0f; } - f32 sqrt = JMAFastSqrt(fvar1 * 2.0f * dvar10); - f32 speedDiv = sqrt - (dvar12 * dvar10); + f32 sqrt = JMAFastSqrt(fvar1 * 2.0f * inverse_gravity); + f32 speedDiv = sqrt - (speed_y_delta * inverse_gravity); f32 squareDist = current.pos.absXZ(targetPos); if (squareDist > 500.0f) { diff --git a/src/d/a/d_a_alink_wolf.inc b/src/d/a/d_a_alink_wolf.inc index 776af7a91a9..07ed3df93ac 100644 --- a/src/d/a/d_a_alink_wolf.inc +++ b/src/d/a/d_a_alink_wolf.inc @@ -24,6 +24,7 @@ #include "rel/d/a/tag/d_a_tag_howl/d_a_tag_howl.h" #include "rel/d/a/tag/d_a_tag_wara_howl/d_a_tag_wara_howl.h" #include "rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump.h" +#include "rel/d/a/e/d_a_e_ymb/d_a_e_ymb.h" /* 80126740-80126928 121080 01E8+00 2/2 0/0 0/0 .text changeCommon__9daAlink_cFv */ // matches with literals @@ -6715,6 +6716,69 @@ int daAlink_c::procWolfDownAtMissLand() { } /* 8013BE24-8013C3E4 136764 05C0+00 2/2 0/0 0/0 .text procWolfLockAttackInit__9daAlink_cFi */ +#ifdef NONMATCHING +// wrong float regist + float literals +int daAlink_c::procWolfLockAttackInit(int param_0) { + commonProcInit(PROC_WOLF_LOCK_ATTACK); + setSingleAnimeWolfParam(WANM_ATTACK_A_START, &daAlinkHIO_wlAtLock_c0::m.field_0x0); + + if (fopAcM_GetName(mWolfLockAcKeep[0].getActor()) == PROC_E_YMB) { + mProcVar3.field_0x300e.z = 1; + + if (param_0 == 0) { + mProcVar1.field_0x300a = static_cast(mWolfLockAcKeep[0].getActor())->getMaxLockAttack(); + } + + mProcVar1.field_0x300a--; + field_0x37c8 = mWolfLockAcKeep[0].getActor()->eyePos; + + if (mProcVar1.field_0x300a == 0) { + mWolfLockAcKeep[0].clearData(); + } + } else { + field_0x37c8 = mWolfLockAcKeep[0].getActor()->eyePos; + mWolfLockAcKeep[0].clearData(); + mProcVar3.field_0x300e.z = 0; + } + + shape_angle.y = cLib_targetAngleY(¤t.pos,&field_0x37c8); + current.angle.y = shape_angle.y; + cXyz l_eyePosDelta = field_0x37c8 - eyePos; + + if (l_eyePosDelta.y < 10.0f) { + l_eyePosDelta.y = 10.0f; + } else { + if (l_eyePosDelta.y > daAlinkHIO_wlAtLock_c0::m.field_0x4C) + l_eyePosDelta.y = daAlinkHIO_wlAtLock_c0::m.field_0x4C; + } + + f32 tmp_f = l_eyePosDelta.absXZ(); + + if (tmp_f > daAlinkHIO_wlAtLock_c0::m.field_0x50) { + f32 tmp = daAlinkHIO_wlAtLock_c0::m.field_0x50 / tmp_f; + l_eyePosDelta.x *= tmp; + l_eyePosDelta.z *= tmp; + } + + f32 abs = l_eyePosDelta.abs() / daAlinkHIO_wlAtLock_c0::m.field_0x28.mCheckFrame; + + if (abs < 1.0f) + abs = 1.0f; + + f32 check_frame = daAlinkHIO_wlAtLock_c0::m.field_0x28.mCheckFrame / abs; + mNormalSpeed = check_frame * l_eyePosDelta.absXZ(); + setSpecialGravity((l_eyePosDelta.y * -2.0f) / (abs * abs), maxFallSpeed, 0); + speed.y = -gravity * abs; + mProcVar0.field_0x3008 = abs; + setCylAtParam(0x8000000,dCcG_At_Spl_UNK_0,1,4,6,daAlinkHIO_wlAtLock_c0::m.field_0x40,daAlinkHIO_wlAtLock_c0::m.field_0x44); + field_0x3438 = daAlinkHIO_wlAtLock_c0::m.field_0x3C; + setCutType(CUT_TYPE_WOLF_LOCK); + voiceStart(Z2SE_WL_V_ATTACK_THRUST); + dComIfGp_setPlayerStatus1(0,0x1000000); + dComIfGp_particle_set(0x247,¤t.pos,¤t.angle,0); + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -6723,12 +6787,15 @@ asm int daAlink_c::procWolfLockAttackInit(int param_0) { #include "asm/d/a/d_a_alink/procWolfLockAttackInit__9daAlink_cFi.s" } #pragma pop +#endif /* 8013C3E4-8013C630 136D24 024C+00 1/0 0/0 0/0 .text procWolfLockAttack__9daAlink_cFv */ // matches with literals #ifdef NONMATCHING int daAlink_c::procWolfLockAttack() { BOOL var_r29 = false; + + // check if any field_0x850 clylinders collided with at shields for (int i = 0; i < 3; i++) { if (checkAtShieldHit(field_0x850[i])) { var_r29 = true; @@ -6736,6 +6803,8 @@ int daAlink_c::procWolfLockAttack() { } } + + // early return checks for colliding with at shields or if the actor hit is not freezard if (var_r29 || (checkAtShieldHit(mAtCyl) && (mAtCyl.GetAtHitAc() == NULL || fopAcM_GetName(mAtCyl.GetAtHitAc()) != PROC_E_FB))) {