From a6d621e0c36f8c310b4a93e669c40f4bd55e7651 Mon Sep 17 00:00:00 2001 From: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Date: Wed, 29 Nov 2023 09:27:08 -0800 Subject: [PATCH] daAlink bottle / sumou done (#1996) * link_bottle done * link_sumou done * remove asm --- include/d/a/d_a_alink.h | 19 +- include/d/com/d_com_inf_game.h | 22 +- include/d/d_attention.h | 8 +- include/d/meter/d_meter2_info.h | 5 + .../a/npc/d_a_npc_wrestler/d_a_npc_wrestler.h | 88 +- .../npc/d_a_npc_wrestler/d_a_npc_wrestler.cpp | 3 +- src/d/a/d_a_alink.cpp | 6 +- src/d/a/d_a_alink_boom.inc | 14 +- src/d/a/d_a_alink_bottle.inc | 562 +++++++++++- src/d/a/d_a_alink_bow.inc | 2 +- src/d/a/d_a_alink_canoe.inc | 2 +- src/d/a/d_a_alink_copyrod.inc | 4 +- src/d/a/d_a_alink_demo.inc | 2 +- src/d/a/d_a_alink_hook.inc | 10 +- src/d/a/d_a_alink_ironball.inc | 44 +- src/d/a/d_a_alink_link.inc | 2 +- src/d/a/d_a_alink_sumou.inc | 813 +++++++++++++++++- src/d/a/d_a_alink_swim.inc | 4 +- src/d/a/d_a_alink_wolf.inc | 4 +- 19 files changed, 1541 insertions(+), 73 deletions(-) diff --git a/include/d/a/d_a_alink.h b/include/d/a/d_a_alink.h index 992afb7fdfc..09549f3264b 100644 --- a/include/d/a/d_a_alink.h +++ b/include/d/a/d_a_alink.h @@ -2032,7 +2032,7 @@ public: /* 800EA4CC */ int procGoronMove(); /* 800EA844 */ BOOL checkSumouVsActor(); /* 800EA8D0 */ void cancelSumouMode(); - /* 800EA908 */ void sumouPunchTrigger(); + /* 800EA908 */ BOOL sumouPunchTrigger(); /* 800EA92C */ void setSumouPunchStatus(); /* 800EA950 */ int procSumouReadyInit(); /* 800EAA28 */ int procSumouReady(); @@ -2040,7 +2040,7 @@ public: /* 800EAD84 */ int procSumouMove(); /* 800EB208 */ int procSumouSideMoveInit(); /* 800EB2BC */ int procSumouSideMove(); - /* 800EB624 */ int procSumouActionInit(int, int, int); + /* 800EB624 */ int procSumouActionInit(BOOL i_doTrigger, BOOL i_punchTrigger, int unused); /* 800EBCE0 */ int procSumouAction(); /* 800EC0F8 */ int procSumouStaggerInit(); /* 800EC170 */ int procSumouStagger(); @@ -3206,7 +3206,7 @@ public: daPy_actorKeep_c* getThrowBoomerangAcKeep() { return &mThrowBoomerangAcKeep; } s32 getStartRoomNo() { return fopAcM_GetParam(this) & 0x3F; } bool checkFisingRodLure() const { return mEquipItem == noentry73; } - bool doTrigger() const { return mItemTrigger & BTN_A; } + BOOL doTrigger() const { return mItemTrigger & BTN_A; } bool swordTrigger() { return itemTriggerCheck(BTN_B); } bool peepSubjectCancelTrigger() { return itemTriggerCheck(0x8); } u32 getStartMode() { return (fopAcM_GetParam(this) >> 0xC) & 0x1F; } @@ -3448,11 +3448,11 @@ private: /* 0x00710 */ J3DModel* field_0x0710; // related to held item /* 0x00714 */ J3DModel* field_0x0714; // related to held item /* 0x00718 */ J3DAnmTextureSRTKey* field_0x0718; - /* 0x0071C */ J3DAnmBase* field_0x071c; - /* 0x00720 */ J3DAnmBase* field_0x0720; + /* 0x0071C */ J3DAnmTextureSRTKey* field_0x071c; + /* 0x00720 */ J3DAnmTextureSRTKey* field_0x0720; /* 0x00724 */ J3DAnmTevRegKey* field_0x0724; /* 0x00728 */ J3DAnmBase* field_0x0728; - /* 0x0072C */ J3DAnmBase* field_0x072c; + /* 0x0072C */ J3DAnmTexPattern* field_0x072c; /* 0x00730 */ mDoExt_bckAnm mItemBck; /* 0x0074C */ mDoExt_bckAnm mHookTipBck; /* 0x00768 */ J3DModelData* mpHookKusariModelData; @@ -3703,7 +3703,10 @@ private: } /* 0x0300E */ mProcVar3; /* 0x03014 */ s16 mFallVoiceInit; /* 0x03016 */ u8 field_0x3016[2]; - /* 0x03018 */ s16 field_0x3018; + union { + s16 field_0x3018; + s16 mBottleItemHealAmount; + } /* 0x03018 */ mItemVar0; /* 0x0301A */ s16 mItemMode; /* 0x0301C */ s16 field_0x301c; /* 0x0301E */ s16 field_0x301e; @@ -6020,7 +6023,7 @@ public: /* 0x50 */ daAlinkHIO_anm_c mSwingDownAnm; /* 0x64 */ daAlinkHIO_anm_c mSwingSideAnm; /* 0x78 */ daAlinkHIO_anm_c mGetAnm; - /* 0x8C */ daAlinkHIO_anm_c field_0x8C; + /* 0x8C */ daAlinkHIO_anm_c mDrinkNastyAnm; /* 0xA0 */ daAlinkHIO_anm_c mScoopAnm; }; // Size: 0xB4 diff --git a/include/d/com/d_com_inf_game.h b/include/d/com/d_com_inf_game.h index a70f4c553e3..9daf5f8dfba 100644 --- a/include/d/com/d_com_inf_game.h +++ b/include/d/com/d_com_inf_game.h @@ -370,6 +370,7 @@ public: } u8& getItemLifeCountType() { return mItemLifeCountType; } + u16 getItemNowLife() { return mItemNowLife; } s16 getItemPachinkoNumCount() { return mItemPachinkoNumCount; } void clearItemPachinkoNumCount() { mItemPachinkoNumCount = 0; } u8 getNeedLightDropNum() { return mNeedLightDropNum; } @@ -1780,6 +1781,14 @@ inline void dComIfGs_setTransformStatus(u8 i_status) { g_dComIfG_gameInfo.info.getPlayer().getPlayerStatusA().setTransformStatus(i_status); } +inline void dComIfGs_setEquipBottleItemIn(u8 i_curItem, u8 i_newItem) { + g_dComIfG_gameInfo.info.getPlayer().getItem().setEquipBottleItemIn(i_curItem, i_newItem); +} + +inline void dComIfGs_setEquipBottleItemEmpty(u8 i_curItem) { + g_dComIfG_gameInfo.info.getPlayer().getItem().setEquipBottleItemEmpty(i_curItem); +} + void dComIfGp_setSelectItem(int index); s32 dComIfGp_offHeapLockFlag(int flag); void dComIfGp_createSubExpHeap2D(); @@ -1825,6 +1834,7 @@ static u8 dComIfGp_getRStatus(); static dAttCatch_c* dComIfGp_att_getCatghTarget(); static void dComIfGp_setBottleStatus(u8 param_0, u8 param_1); bool dComIfGp_getMapTrans(int i_roomNo, f32* o_transX, f32* o_transY, s16* o_angle); +void dComIfGp_setSelectItemNum(int i_selItemIdx, s16 i_num); inline void dComIfGp_itemDataInit() { g_dComIfG_gameInfo.play.itemInit(); @@ -1862,6 +1872,10 @@ inline u8 dComIfGp_att_getCatchChgItem() { return dComIfGp_getAttention().getCatchChgItem(); } +inline fopAc_ac_c* i_dComIfGp_att_getCatghTarget() { + return dComIfGp_getAttention().getCatghTarget(); +} + inline int dComIfGp_att_ZHintRequest(fopAc_ac_c* param_1, int param_2) { return dComIfGp_getAttention().ZHintRequest(param_1, param_2); } @@ -1874,8 +1888,8 @@ inline void dComIfGp_att_LookRequest(fopAc_ac_c* param_0, f32 i_horizontalDist, inline void dComIfGp_att_CatchRequest(fopAc_ac_c* param_0, u8 param_1, f32 i_horizontalDist, f32 i_upDist, f32 i_downDist, s16 i_angle, int param_5) { - dComIfGp_getAttention().getCatghTarget().request(param_0, param_1, i_horizontalDist, i_upDist, - i_downDist, i_angle, param_5); + dComIfGp_getAttention().CatchRequest(param_0, param_1, i_horizontalDist, i_upDist, + i_downDist, i_angle, param_5); } inline J2DGrafContext* dComIfGp_getCurrentGrafPort() { @@ -2755,6 +2769,10 @@ inline u8 dComIfGp_getItemLifeCountType() { return g_dComIfG_gameInfo.play.getItemLifeCountType(); } +inline u16 dComIfGp_getItemNowLife() { + return g_dComIfG_gameInfo.play.getItemNowLife(); +} + inline int dComIfGp_getMessageCountNumber() { return g_dComIfG_gameInfo.play.getMessageCountNumber(); } diff --git a/include/d/d_attention.h b/include/d/d_attention.h index 298a81c27b0..0d9e9733a96 100644 --- a/include/d/d_attention.h +++ b/include/d/d_attention.h @@ -205,7 +205,7 @@ public: /* 80182AD0 */ void keepLock(int); /* 8014B010 */ static dist_entry& getDistTable(int); - dAttCatch_c& getCatghTarget() { return mCatghTarget; } + fopAc_ac_c* getCatghTarget() { return mCatghTarget.getCatghTarget(); } u8 getCatchChgItem() { return mCatghTarget.getChangeItem(); } BOOL chkFlag(u32 flag) { return (mFlags & flag) ? TRUE : FALSE; } void setFlag(u32 flag) { mFlags |= flag; } @@ -222,6 +222,12 @@ public: mLookTarget.request(param_0, i_horizontalDist, i_upDist, i_downDist, i_angle, param_5); } + void CatchRequest(fopAc_ac_c* param_0, u8 param_1, f32 i_horizontalDist, f32 i_upDist, + f32 i_downDist, s16 i_angle, int param_5) { + mCatghTarget.request(param_0, param_1, i_horizontalDist, i_upDist, i_downDist, i_angle, + param_5); + } + static dist_entry& i_getDistTable(int i_no) { return dist_table[i_no]; } static type_tbl_entry loc_type_tbl[3]; diff --git a/include/d/meter/d_meter2_info.h b/include/d/meter/d_meter2_info.h index 1fce97bb83a..ab6ca68f17c 100644 --- a/include/d/meter/d_meter2_info.h +++ b/include/d/meter/d_meter2_info.h @@ -157,6 +157,7 @@ public: void setItemExplainWindowStatus(u8 i_value) { mItemExplainWindowStatus = i_value; } void resetDirectUseItem() { mDirectUseItem = 0; } u16 getFloatingFlowID() { return mFloatingFlowID; } + void onBlinkButton(int i_flag) { mBlinkButton |= i_flag; } void setCollectCursorPosXY(u8 x, u8 y) { mCollectCursorPosX = x; mCollectCursorPosY = y; @@ -609,6 +610,10 @@ inline void dMeter2Info_setCollectCursorPosXY(u8 x, u8 y) { g_meter2_info.setCollectCursorPosXY(x, y); } +inline void dMeter2Info_onBlinkButton(int i_flag) { + g_meter2_info.onBlinkButton(i_flag); +} + const char* dMeter2Info_getNumberTextureName(int pIndex); void dMeter2Info_recieveLetter(); u8 dMeter2Info_getNewLetterNum(); diff --git a/include/rel/d/a/npc/d_a_npc_wrestler/d_a_npc_wrestler.h b/include/rel/d/a/npc/d_a_npc_wrestler/d_a_npc_wrestler.h index 59a28391254..f65b5c59bcd 100644 --- a/include/rel/d/a/npc/d_a_npc_wrestler/d_a_npc_wrestler.h +++ b/include/rel/d/a/npc/d_a_npc_wrestler/d_a_npc_wrestler.h @@ -1,6 +1,92 @@ #ifndef D_A_NPC_WRESTLER_H #define D_A_NPC_WRESTLER_H -#include "dolphin/types.h" +#include "f_op/f_op_actor_mng.h" +#include "d/a/d_a_npc.h" + +class daNpcWrestler_c : public daNpcF_c { +public: + /* 80B2F28C */ daNpcWrestler_c(); + /* 80B2F688 */ void Create(); + /* 80B2F974 */ void CreateHeap(); + /* 80B2FDB0 */ void Delete(); + /* 80B2FDE4 */ void Execute(); + /* 80B2FE1C */ void Draw(); + /* 80B2FE84 */ void ctrlJoint(J3DJoint*, J3DModel*); + /* 80B30150 */ void createHeapCallBack(fopAc_ac_c*); + /* 80B30170 */ void ctrlJointCallBack(J3DJoint*, int); + /* 80B301BC */ void checkStartUp(); + /* 80B308B0 */ void reset(); + /* 80B30AD8 */ void setAction(bool (daNpcWrestler_c::*)(void*)); + /* 80B30BEC */ void checkArenaInfo(); + /* 80B30CA4 */ void checkArenaSub(fopAc_ac_c*); + /* 80B30D48 */ void setOnToArena(f32); + /* 80B30F00 */ void wait(void*); + /* 80B316F4 */ void talk(void*); + /* 80B31EB0 */ void demo(void*); + /* 80B32058 */ void gotoArena(void*); + /* 80B32444 */ void gotoLiving(void*); + /* 80B32850 */ void sumouReady(void*); + /* 80B331CC */ void sumouWait(void*); + /* 80B339EC */ void checkOutOfArenaP(); + /* 80B33B3C */ void setNextAction(); + /* 80B34654 */ void sumouPunchHit(void*); + /* 80B34CD0 */ void sumouPunchChaseHit(void*); + /* 80B35364 */ void sumouPunchMiss(void*); + /* 80B35780 */ void checkOutOfArenaW(); + /* 80B358F0 */ void getJointPos(int); + /* 80B35968 */ void sumouPunchDraw(void*); + /* 80B3606C */ void sumouTackleHit(void*); + /* 80B36908 */ void sumouTackleMiss(void*); + /* 80B36C8C */ void sumouTackleDraw(void*); + /* 80B37270 */ void sumouSideStep(void*); + /* 80B378F4 */ void sumouLostBalance(void*); + /* 80B37C30 */ void sumouPunchShock(void*); + /* 80B37FB8 */ void sumouPunchChaseShock(void*); + /* 80B38518 */ void sumouPunchStagger(void*); + /* 80B389A4 */ void sumouTackleShock(void*); + /* 80B38C90 */ void sumouTackleStagger(void*); + /* 80B39334 */ void sumouTackleStaggerRelease(void*); + /* 80B39554 */ void sumouTacklePush(void*); + /* 80B39C18 */ void sumouTackleRelease(void*); + /* 80B39F88 */ void demoSumouReady(void*); + /* 80B3AE24 */ void demoSumouWin(void*); + /* 80B3B4B4 */ void demoSumouLose(void*); + /* 80B3BC84 */ void demoSumouWin2(void*); + /* 80B3C278 */ void demoSumouLose2(void*); + /* 80B3CA2C */ void demoSumouUnilateralWin(void*); + /* 80B3D0C0 */ void demoTalkAfterLose(void*); + /* 80B3D584 */ void EvCut_grDSEntry(int); + /* 80B3DB50 */ void EvCut_grDSEntry2(int); + /* 80B3DCE8 */ void EvCut_grDSEntry3_4(int); + /* 80B3E0FC */ void EvCut_grDSEntry5(int); + /* 80B3E584 */ void EvCut_grDSLose(int); + /* 80B3EF10 */ void setWrestlerVoice(); + /* 80B3FCE8 */ void playMotion(); + /* 80B40B3C */ void lookat(); + + /* 80B2F4A0 */ virtual ~daNpcWrestler_c(); + /* 80B3EAE4 */ virtual void setParam(); + /* 80B3EB94 */ virtual BOOL main(); + /* 80B404FC */ virtual BOOL ctrlBtk(); + /* 80B4166C */ virtual void adjustShapeAngle(); + /* 80B405E8 */ virtual void setAttnPos(); + /* 80B3023C */ virtual bool setExpressionAnm(int, bool); + /* 80B30654 */ virtual bool setExpressionBtp(int); + /* 80B316C8 */ virtual void setExpression(int, f32); + /* 80B3074C */ virtual void setMotionAnm(int, f32); + /* 80B31680 */ virtual void setMotion(int, f32, int); + /* 80B40D1C */ virtual BOOL drawDbgInfo(); + /* 80B40D24 */ virtual void drawOtherMdls(); + + int getWrestlerAction() { return mWrestlerAction; } + u8 getType() { return mSubtype & 0x7F; } + u8 getWrestlerType() { return getType(); } + + static u8 mEvtSeqList[84]; + + /* 0xB48 */ u8 field_0xb48[0xE74 - 0xB48]; + /* 0xE74 */ int mWrestlerAction; +}; #endif /* D_A_NPC_WRESTLER_H */ diff --git a/rel/d/a/npc/d_a_npc_wrestler/d_a_npc_wrestler.cpp b/rel/d/a/npc/d_a_npc_wrestler/d_a_npc_wrestler.cpp index f211b1ae923..515106cb671 100644 --- a/rel/d/a/npc/d_a_npc_wrestler/d_a_npc_wrestler.cpp +++ b/rel/d/a/npc/d_a_npc_wrestler/d_a_npc_wrestler.cpp @@ -3,7 +3,8 @@ // Translation Unit: d_a_npc_wrestler // -#include "rel/d/a/npc/d_a_npc_wrestler/d_a_npc_wrestler.h" +// #include "rel/d/a/npc/d_a_npc_wrestler/d_a_npc_wrestler.h" +#include "dolphin/types.h" #include "dol2asm.h" // diff --git a/src/d/a/d_a_alink.cpp b/src/d/a/d_a_alink.cpp index 557fa37ba7a..a36c492fffc 100644 --- a/src/d/a/d_a_alink.cpp +++ b/src/d/a/d_a_alink.cpp @@ -5814,8 +5814,8 @@ SECTION_RODATA static Vec const hookRoot = { COMPILER_STRIP_GATE(0x80391A08, &hookRoot); /* 80391A14-80391A20 01E074 000C+00 1/1 0/0 0/0 .rodata bottleTop$32160 */ -SECTION_RODATA static u8 const bottleTop[12] = { - 0x00, 0x00, 0x00, 0x00, 0x41, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +SECTION_RODATA static Vec const bottleTop = { + 0.0f, 25.0f, 0.0f, }; COMPILER_STRIP_GATE(0x80391A14, &bottleTop); @@ -16253,7 +16253,7 @@ int daAlink_c::cancelUpperItemReadyAnime(int param_0) { seStartSystem(0x6F); if (mEquipItem == IRONBALL) { - field_0x3018 = 8; + mItemVar0.field_0x3018 = 8; procIronBallReturnInit(); } else { resetUpperAnime(UPPER_2, 3.0f); diff --git a/src/d/a/d_a_alink_boom.inc b/src/d/a/d_a_alink_boom.inc index 9f434cbec50..42fc8873f34 100644 --- a/src/d/a/d_a_alink_boom.inc +++ b/src/d/a/d_a_alink_boom.inc @@ -110,7 +110,7 @@ BOOL daAlink_c::checkBoomerangCarry(fopAc_ac_c* i_grabActor) { if (i_checkNoResetFlg0(FLG0_UNK_20) && !checkEventRun() && !i_checkWolf() && i_checkModeFlg(0x10000000) && (checkHorseNoUpperAnime() || checkHorseTurnAnime() || checkBoomerangThrowAnime())) { - deleteEquipItem(0, 0); + deleteEquipItem(FALSE, FALSE); seStartOnlyReverb(JA_SE_LK_BOOM_CATCH); i_offNoResetFlg0(FLG0_UNK_20); @@ -156,7 +156,7 @@ void daAlink_c::setBoomerangReadyQuake() { dComIfGp_getVibration().StartQuake(1, 1, cXyz(tmp_0, lit_6040, tmp_0)); i_onNoResetFlg3(FLG3_UNK_4); - field_0x3018 = daAlinkHIO_boom_c0::m.mChargeTime; + mItemVar0.field_0x3018 = daAlinkHIO_boom_c0::m.mChargeTime; } /* 800E055C-800E05E8 0DAE9C 008C+00 2/2 0/0 0/0 .text setBoomerangReadyAnime__9daAlink_cFv */ @@ -283,10 +283,10 @@ int daAlink_c::returnBoomerang(int param_0) { /* 800E0A9C-800E0B58 0DB3DC 00BC+00 2/2 0/0 0/0 .text checkUpperItemActionBoomerang__9daAlink_cFv */ int daAlink_c::checkUpperItemActionBoomerang() { - if (field_0x3018 != 0) { - field_0x3018--; + if (mItemVar0.field_0x3018 != 0) { + mItemVar0.field_0x3018--; - if (field_0x3018 == 0) { + if (mItemVar0.field_0x3018 == 0) { cancelItemUseQuake(0); } } @@ -367,7 +367,7 @@ int daAlink_c::checkBoomerangCatchAction() { i_offNoResetFlg0(FLG0_UNK_20); } - return 0; + return FALSE; } /* 800E0E64-800E0F10 0DB7A4 00AC+00 3/3 0/0 0/0 .text setBoomerangSight__9daAlink_cFv */ @@ -506,4 +506,4 @@ int daAlink_c::procBoomerangCatch() { } return 1; -} \ No newline at end of file +} diff --git a/src/d/a/d_a_alink_bottle.inc b/src/d/a/d_a_alink_bottle.inc index 4a8ab476db3..f2eb15aeab3 100644 --- a/src/d/a/d_a_alink_bottle.inc +++ b/src/d/a/d_a_alink_bottle.inc @@ -3,6 +3,8 @@ * Player Bottle action handling */ +#include "d/a/d_a_alink.h" +#include "d/com/d_com_inf_game.h" #include "d/d_insect.h" /* 8010E48C-8010E52C 108DCC 00A0+00 1/1 0/0 0/0 .text bottleModelCallBack__9daAlink_cFv @@ -20,10 +22,10 @@ int daAlink_c::bottleModelCallBack() { /* 8010E52C-8010E568 108E6C 003C+00 1/1 0/0 0/0 .text daAlink_bottleModelCallBack__FP8J3DJointi */ static int daAlink_bottleModelCallBack(J3DJoint* i_joint, int param_1) { - daAlink_c* link = (daAlink_c*)j3dSys.getModel()->getUserArea(); + daAlink_c* player_p = (daAlink_c*)j3dSys.getModel()->getUserArea(); if (param_1 == 0) { - link->bottleModelCallBack(); + player_p->bottleModelCallBack(); } return 1; @@ -45,6 +47,103 @@ BOOL daAlink_c::checkOilBottleItemNotGet(u16 i_itemNo) { } /* 8010E5D8-8010EAC4 108F18 04EC+00 7/7 0/0 0/0 .text setBottleModel__9daAlink_cFUs */ +// matches with literals +#ifdef NONMATCHING +void daAlink_c::setBottleModel(u16 i_itemNo) { + JKRHeap* prev_heap = setItemHeap(); + mHeldItemModel = initModelEnv(loadAramBmd(0x310, 0x5C00), 0x1020200); + field_0x072c = loadAramItemBtp(0x3AE, mHeldItemModel); + field_0x0724 = loadAramItemBrk(0x322, mHeldItemModel); + + if (checkDrinkBottleItem(i_itemNo) || checkOilBottleItemNotGet(i_itemNo)) { + field_0x071c = loadAramItemBtk(0x328, mHeldItemModel); + field_0x0720 = loadAramItemBtk(0x327, mHeldItemModel); + } else { + field_0x071c = loadAramItemBtk(0x32A, mHeldItemModel); + field_0x0720 = loadAramItemBtk(0x329, mHeldItemModel); + } + + field_0x0718 = loadAramItemBtk(0x32B, mHeldItemModel); + + if (i_itemNo == FAIRY) { + J3DAnmTransform* bck = (J3DAnmTransform*)loadAram(0x1E8, 0xC00); + mpHookTipModel = initModel(loadAramBmd(0x31D, 0x1400), 0); + if (!mHookTipBck.init(bck, FALSE, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false)) { + JUT_ASSERT(142, 0); + } + mHookTipBck.entry(mpHookTipModel->getModelData(), 0.0f); + } else if (i_itemNo == WORM) { + J3DAnmTransform* bck = (J3DAnmTransform*)loadAram(0x1E9, 0xC00); + mpHookTipModel = initModel(loadAramBmd(0x31E, 0x2400), 0); + if (!mHookTipBck.init(bck, FALSE, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false)) { + JUT_ASSERT(151, 0); + } + mHookTipBck.entry(mpHookTipModel->getModelData(), 0.0f); + } else if (i_itemNo == BEE_CHILD) { + mpHookTipModel = initModel(loadAramBmd(0x31C, 0x1000), 0); + } + + mDoExt_setCurrentHeap(prev_heap); + + J3DModelData* item_model_data = mHeldItemModel->getModelData(); + mEquipItem = i_itemNo; + + if (checkOilBottleItemNotGet(i_itemNo)) { + item_model_data->getJointNodePointer(1)->setCallBack(NULL); + field_0x2f95 = 9; + } else { + item_model_data->getJointNodePointer(1)->setCallBack(daAlink_bottleModelCallBack); + mHeldItemModel->setUserArea((u32)this); + field_0x2f94 = 3; + mItemMode = 0; + } + + if ((checkDrinkBottleItem(i_itemNo) && i_itemNo != BEE_CHILD) || checkOilBottleItem(i_itemNo)) { + item_model_data->getMaterialNodePointer(0)->getShape()->hide(); + + if (i_itemNo == RED_BOTTLE || i_itemNo == CHUCHU_RED || i_itemNo == RED_BOTTLE_2) { + field_0x0724->setFrame(0.0f); + } else if (i_itemNo == GREEN_BOTTLE || i_itemNo == CHUCHU_GREEN) { + field_0x0724->setFrame(1.0f); + } else if (i_itemNo == BLUE_BOTTLE || i_itemNo == CHUCHU_BLUE) { + field_0x0724->setFrame(2.0f); + } else if (checkOilBottleItem(i_itemNo)) { + field_0x0724->setFrame(4.0f); + } else if (i_itemNo == HOT_SPRING) { + field_0x0724->setFrame(5.0f); + } else if (i_itemNo == CHUCHU_PURPLE) { + field_0x0724->setFrame(6.0f); + } else if (i_itemNo == CHUCHU_RARE) { + field_0x0724->setFrame(7.0f); + } else if (i_itemNo == UGLY_SOUP || i_itemNo == CHUCHU_BLACK) { + field_0x0724->setFrame(8.0f); + } else if (i_itemNo == LV1_SOUP) { + field_0x0724->setFrame(9.0f); + } else if (i_itemNo == LV2_SOUP || i_itemNo == LV3_SOUP) { + field_0x0724->setFrame(10.0f); + } else if (i_itemNo == FAIRY_DROP) { + field_0x0724->setFrame(11.0f); + } else { + field_0x0724->setFrame(3.0f); + + if (i_itemNo == HALF_MILK_BOTTLE) { + field_0x072c->setFrame(1.0f); + } + } + } else if (checkOpenBottleItem(i_itemNo)) { + if (i_itemNo == WATER_BOTTLE) { + field_0x0724->setFrame(5.0f); + } else { + field_0x072c->setFrame(2.0f); + } + + item_model_data->getMaterialNodePointer(0)->getShape()->show(); + } else { + field_0x072c->setFrame(2.0f); + item_model_data->getMaterialNodePointer(0)->getShape()->hide(); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -53,8 +152,200 @@ asm void daAlink_c::setBottleModel(u16 param_0) { #include "asm/d/a/d_a_alink/setBottleModel__9daAlink_cFUs.s" } #pragma pop +#endif /* 8010EAC4-8010F45C 109404 0998+00 3/3 0/0 0/0 .text commonBottleDrink__9daAlink_cFi */ +// matches with literals +#ifdef NONMATCHING +int daAlink_c::commonBottleDrink(int param_0) { + simpleAnmPlay(field_0x0718); + simpleAnmPlay(field_0x071c); + + daPy_frameCtrl_c* frameCtrl_p; + u16 current_anm; + if (param_0 || mUpperAnmHeap[2].getIdx() == 0x247) { + frameCtrl_p = &mUpperFrameCtrl[2]; + current_anm = mUpperAnmHeap[2].getIdx(); + } else { + frameCtrl_p = &mUnderFrameCtrl[0]; + current_anm = mUnderAnmHeap[0].getIdx(); + } + + if (current_anm == getMainBckData(ANM_BOTTLE_DRINK_START)->m_underID) { + if (checkAnmEnd(frameCtrl_p)) { + if (param_0) { + setUpperAnimeBaseMorf(getMainBckData(ANM_BOTTLE_DRINK)->m_upperID, 0.0f); + setFacePriAnime(ANM_BOTTLE_DRINK); + } else { + setSingleAnimeBaseMorf(ANM_BOTTLE_DRINK, 0.0f); + } + + mItemVar0.mBottleItemHealAmount = 0; + + if (mEquipItem != UGLY_SOUP && mEquipItem != CHUCHU_BLACK && + mEquipItem != CHUCHU_PURPLE) + { + if (mEquipItem == LV1_SOUP) { + i_dComIfGp_setItemLifeCount(8, 0); + } else if (mEquipItem == LV2_SOUP) { + i_dComIfGp_setItemLifeCount(16, 0); + } else if (mEquipItem == LV3_SOUP) { + i_dComIfGp_setItemLifeCount(32, 0); + } else if (mEquipItem == BEE_CHILD) { + field_0x2fd3 = 3; + i_dComIfGp_setItemLifeCount(dComIfGp_getSelectItemNum(mSelectItemId), 0); + } else if (mEquipItem == RED_BOTTLE || mEquipItem == CHUCHU_RED || + mEquipItem == RED_BOTTLE_2) + { + i_dComIfGp_setItemLifeCount(32, 0); + } else if (mEquipItem == MILK_BOTTLE || mEquipItem == HALF_MILK_BOTTLE) { + i_dComIfGp_setItemLifeCount(12, 0); + } else if (mEquipItem == BLUE_BOTTLE || mEquipItem == CHUCHU_BLUE || + mEquipItem == HOT_SPRING) + { + i_dComIfGp_setItemLifeCount(dComIfGs_getMaxLifeGauge(), 0); + } else if (mEquipItem == CHUCHU_RARE || mEquipItem == FAIRY_DROP) { + i_dComIfGp_setItemLifeCount(dComIfGs_getMaxLifeGauge(), 0); + } + } + voiceStart(Z2SE_AL_V_DRINK); + } else if (frameCtrl_p->checkPass(50.0f)) { + field_0x071c->setFrame(0.0f); + mHeldItemModel->getModelData()->entryTexMtxAnimator(field_0x071c); + } + } else if (current_anm == getMainBckData(ANM_BOTTLE_DRINK)->m_underID) { + if (dComIfGp_getItemNowLife() == i_dComIfGs_getLife()) { + mpHookTipModel = NULL; + + if (mEquipItem == MILK_BOTTLE) { + if (param_0) { + setUpperAnimeParam(getMainBckData(ANM_BOTTLE_DRINK_END)->m_upperID, UPPER_2, + &daAlinkHIO_bottle_c0::m.mEndDrinkAnm); + setFacePriAnime(ANM_BOTTLE_DRINK_END); + } else { + setSingleAnimeParam(ANM_BOTTLE_DRINK_END, + &daAlinkHIO_bottle_c0::m.mEndDrinkAnm); + } + + field_0x072c->setFrame(1.0f); + if (mDemo.getDemoType() == 5) { + dComIfGs_setEquipBottleItemIn(mSelectItemId, HALF_MILK_BOTTLE); + } + } else if (mProcVar2.field_0x300c == 0) { + mProcVar2.field_0x300c = 1; + mHeldItemModel->getModelData()->entryTexMtxAnimator(field_0x0720); + } else if (simpleAnmPlay(field_0x0720)) { + if (mEquipItem == UGLY_SOUP) { + if (i_dComIfGs_getLife() <= 2) { + mItemVar0.mBottleItemHealAmount = dComIfGs_getMaxLifeGauge(); + } else if (i_dComIfGs_getLife() <= 4) { + mItemVar0.mBottleItemHealAmount = + (dComIfGs_getMaxLifeGauge() / 2) - i_dComIfGs_getLife(); + } else if (i_dComIfGs_getLife() == dComIfGs_getMaxLifeGauge() || + cM_rnd() < 0.5f) + { + mItemVar0.mBottleItemHealAmount = -4; + } else { + mItemVar0.mBottleItemHealAmount = 4; + } + } else if (mEquipItem == CHUCHU_PURPLE) { + f32 rnd = cM_rndF(6.0f); + + if (rnd < 1.0f) { + mItemVar0.mBottleItemHealAmount = dComIfGs_getMaxLifeGauge(); + } else if (rnd < 2.0f) { + mItemVar0.mBottleItemHealAmount = -(i_dComIfGs_getLife() - 1); + if (mItemVar0.mBottleItemHealAmount == 0) { + mItemVar0.mBottleItemHealAmount = -1; + } + } else if (rnd < 4.0f) { + mItemVar0.mBottleItemHealAmount = -4; + } else { + mItemVar0.mBottleItemHealAmount = 4; + } + } else if (mEquipItem == CHUCHU_BLACK) { + mItemVar0.mBottleItemHealAmount = -4; + } + + if (mItemVar0.mBottleItemHealAmount < 0 || mEquipItem == BEE_CHILD) { + if (param_0) { + setUpperAnimeParam(getMainBckData(ANM_BOTTLE_DRINK_NASTY)->m_upperID, + UPPER_2, &daAlinkHIO_bottle_c0::m.mDrinkNastyAnm); + setFacePriAnime(ANM_BOTTLE_DRINK_NASTY); + } else { + setSingleAnimeParam(ANM_BOTTLE_DRINK_NASTY, + &daAlinkHIO_bottle_c0::m.mDrinkNastyAnm); + } + } else if (param_0) { + setUpperAnimeParam(getMainBckData(ANM_BOTTLE_DRINK_END)->m_upperID, UPPER_2, + &daAlinkHIO_bottle_c0::m.mEndDrinkAnm); + setFacePriAnime(ANM_BOTTLE_DRINK_END); + } else { + setSingleAnimeParam(ANM_BOTTLE_DRINK_END, + &daAlinkHIO_bottle_c0::m.mEndDrinkAnm); + } + + field_0x072c->setFrame(2.0f); + if (mDemo.getDemoType() == 5) { + dComIfGs_setEquipBottleItemEmpty(mSelectItemId); + } + + if (mEquipItem == CHUCHU_RARE || mEquipItem == FAIRY_DROP) { + mSwordUpTimer = 510; + } + } + } + } else if (current_anm == getMainBckData(ANM_BOTTLE_DRINK_END)->m_underID || + current_anm == getMainBckData(ANM_BOTTLE_DRINK_NASTY)->m_underID) + { + if (checkAnmEnd(frameCtrl_p)) { + if (mDemo.getDemoMode() == 0x2A) { + setSingleAnimeParam(ANM_PICK_UP, &daAlinkHIO_pickUp_c0::m.field_0x14); + } else { + allUnequip(mKeepItem == KANTERA); + } + } else if (frameCtrl_p->checkPass(11.0f)) { + mHeldItemModel->getModelData()->entryTexMtxAnimator(field_0x0718); + } else if (mItemVar0.mBottleItemHealAmount >= 0 && frameCtrl_p->checkPass(21.0f)) { + if (mItemVar0.mBottleItemHealAmount > 0) { + i_dComIfGp_setItemLifeCount(mItemVar0.mBottleItemHealAmount, 0); + } + + voiceStart(Z2SE_AL_V_DRINK_2); + } else if (mItemVar0.mBottleItemHealAmount < 0) { + if (frameCtrl_p->checkPass(25.0f)) { + voiceStart(Z2SE_AL_V_DRINK_DAMAGE); + } else if (frameCtrl_p->checkPass(17.0f)) { + mDoAud_seStart(Z2SE_AL_DAMAGE_SMALL, NULL, 0, 0); + + if (i_dComIfGs_getLife() <= -mItemVar0.mBottleItemHealAmount) { + i_dComIfGp_setItemLifeCount(-(i_dComIfGs_getLife() - 1), 0); + } else { + i_dComIfGp_setItemLifeCount(mItemVar0.mBottleItemHealAmount, 0); + } + } + } + } else if (current_anm == getMainBckData(ANM_PICK_UP)->m_underID) { + if (checkAnmEnd(frameCtrl_p)) { + resetUpperAnime(UPPER_2, 3.0f); + dCam_getBody()->EndEventCamera(fopAcM_GetID(this)); + return 1; + } else if (frameCtrl_p->checkPass(9.0f)) { + returnKeepItemData(); + } + } else if (mEquipItem == NO_ITEM || mEquipItem == KANTERA) { + resetUpperAnime(UPPER_2, 3.0f); + if (mEquipItem == NO_ITEM) { + returnKeepItemData(); + } + + resetSpecialEvent(); + return 1; + } + + return 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -63,6 +354,7 @@ asm int daAlink_c::commonBottleDrink(int param_0) { #include "asm/d/a/d_a_alink/commonBottleDrink__9daAlink_cFi.s" } #pragma pop +#endif /* 8010F45C-8010F54C 109D9C 00F0+00 2/2 0/0 0/0 .text makeFairy__9daAlink_cFP4cXyzUl */ fopAc_ac_c* daAlink_c::makeFairy(cXyz* i_pos, u32 i_params) { @@ -96,7 +388,7 @@ fopAc_ac_c* daAlink_c::makeFairy(cXyz* i_pos, u32 i_params) { /* 8010F54C-8010F698 109E8C 014C+00 2/2 0/0 0/0 .text procBottleDrinkInit__9daAlink_cFUs */ -int daAlink_c::procBottleDrinkInit(u16 param_0) { +int daAlink_c::procBottleDrinkInit(u16 i_itemNo) { if (mDemo.getDemoMode() == 0x2A) { if (mProcID == PROC_BOTTLE_DRINK) { return 1; @@ -116,7 +408,7 @@ int daAlink_c::procBottleDrinkInit(u16 param_0) { setSingleAnimeParam(ANM_BOTTLE_DRINK_START, &daAlinkHIO_bottle_c0::m.mStartDrinkAnm); keepItemData(); - setBottleModel(param_0); + setBottleModel(i_itemNo); dComIfGp_setPlayerStatus1(0, 0x2000); field_0x3194 = 1; mProcVar0.field_0x3008 = 0; @@ -141,7 +433,7 @@ int daAlink_c::procBottleDrink() { /* 8010F6F4-8010F8E4 10A034 01F0+00 1/1 0/0 0/0 .text procBottleOpenInit__9daAlink_cFUs */ -// literals +// matches with literals #ifdef NONMATCHING int daAlink_c::procBottleOpenInit(u16 param_0) { if (!dComIfGp_event_compulsory(this, 0, 0xFFFF)) { @@ -202,6 +494,91 @@ asm int daAlink_c::procBottleOpenInit(u16 param_0) { #endif /* 8010F8E4-8010FC38 10A224 0354+00 1/0 0/0 0/0 .text procBottleOpen__9daAlink_cFv */ +// matches with literals +#ifdef NONMATCHING +int daAlink_c::procBottleOpen() { + daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl; + + if (mProcVar2.field_0x300c == 0) { + simpleAnmPlay(field_0x0718); + } else if (mProcVar2.field_0x300c == 2) { + if (simpleAnmPlay(field_0x0720)) { + field_0x072c->setFrame(2.0f); + } + } else if (simpleAnmPlay(field_0x071c)) { + mHeldItemModel->getModelData()->entryTexMtxAnimator(field_0x0718); + mProcVar2.field_0x300c = 0; + } + + if (checkUnderMove0BckNoArc(ANM_BOTTLE_OPEN)) { + if (checkAnmEnd(frameCtrl_p)) { + if (mEquipItem == FAIRY) { + setSingleAnimeBaseMorf(ANM_BOTTLE_FAIRY, -1.0f); + } else { + setSingleAnimeParam(ANM_BOTTLE_POUR, &daAlinkHIO_bottle_c0::m.mPourAnm); + + if (mEquipItem == WATER_BOTTLE) { + if (mWaterY > mLeftHandPos.y) { + mProcVar3.field_0x300e.x = 0; + } else { + mProcVar3.field_0x300e.x = 1; + } + } + } + } else if (frameCtrl_p->checkPass(30.0f)) { + mItemMode = 1; + mProcVar2.field_0x300c = 1; + mHeldItemModel->getModelData()->entryTexMtxAnimator(field_0x071c); + + if (mEquipItem == FAIRY) { + cXyz spC; + mDoMtx_multVec(mHeldItemModel->getBaseTRMtx(), &bottleTop, &spC); + + if (makeFairy(&spC, 0)) { + onModeFlg(0x8000000); + mpHookTipModel = NULL; + resetFairyEffect(); + } + } + } else if (frameCtrl_p->getFrame() >= 18.0f) { + field_0x2f93 = 5; + } + } else { + if (checkAnmEnd(frameCtrl_p) && mProcVar0.field_0x3008 != 0) { + returnKeepItemData(); + resetSpecialEvent(); + } else if (frameCtrl_p->checkPass(11.0f)) { + mHeldItemModel->getModelData()->entryTexMtxAnimator(field_0x0720); + mProcVar2.field_0x300c = 2; + dComIfGs_setEquipBottleItemEmpty(mSelectItemId); + + if (mEquipItem == WATER_BOTTLE && mProcVar3.field_0x300e.x != 0) { + seStartOnlyReverb(Z2SE_LK_SPRINKLE_WATER); + } + } else if (frameCtrl_p->getFrame() > 16.0f && frameCtrl_p->getFrame() < 31.0f) { + mProcVar3.field_0x300e.y = 1; + } else { + mProcVar3.field_0x300e.y = 0; + } + + if (mProcVar0.field_0x3008 == 0 && frameCtrl_p->getFrame() >= 25.0f) { + dInsect_c* insect_p = (dInsect_c*)fopAcM_SearchByID(field_0x32cc); + if (insect_p != NULL) { + mpHookTipModel = NULL; + mProcVar0.field_0x3008 = 1; + mDoMtx_multVec(mHeldItemModel->getBaseTRMtx(), &bottleTop, &insect_p->current.pos); + fopAcM_OnStatus(insect_p, 0x800); + + if (mProcVar1.field_0x300a != 0) { + insect_p->Insect_Release(); + } + } + } + } + + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -210,9 +587,99 @@ asm int daAlink_c::procBottleOpen() { #include "asm/d/a/d_a_alink/procBottleOpen__9daAlink_cFv.s" } #pragma pop +#endif /* 8010FC38-8010FF58 10A578 0320+00 4/4 0/0 0/0 .text * procBottleSwingInit__9daAlink_cFP10fopAc_ac_ci */ +// matches with literals +#ifdef NONMATCHING +int daAlink_c::procBottleSwingInit(fopAc_ac_c* param_0, int param_1) { + fopAc_ac_c* var_r31 = param_0; + if (var_r31 != NULL && mEquipItem != KANTERA) { + return procPreActionUnequipInit(PROC_BOTTLE_SWING, NULL); + } + + if (var_r31 == NULL && getReadyItem() != EMPTY_BOTTLE) { + return checkWaitAction(); + } + + commonProcInit(PROC_BOTTLE_SWING); + current.angle.y = shape_angle.y; + mNormalSpeed = 0.0f; + field_0x2f98 = 4; + mProcVar3.field_0x300e.y = param_1; + + if (var_r31 != NULL) { + field_0x280c.setData(var_r31); + } else { + var_r31 = i_dComIfGp_att_getCatghTarget(); + } + + BOOL temp_r3; + s16 temp_r30; + if (var_r31 != NULL) { + if (var_r31->mAttentionInfo.mPosition.y > field_0x3834.y - 30.0f) { + temp_r3 = false; + } else { + temp_r3 = true; + } + + temp_r30 = fopAcM_GetName(var_r31); + } else { + if (field_0x2fbc != 11 && field_0x2fbc != 6 && mWaterY > current.pos.y + 10.0f) { + temp_r3 = true; + } else { + temp_r3 = false; + } + + temp_r30 = PROC_ALINK; + } + + if (temp_r30 == PROC_OBJ_OILTUBO || temp_r30 == PROC_TAG_SSDRINK || + temp_r30 == PROC_TAG_BTLITM || mEquipItem == KANTERA) + { + setSingleAnimeParam(ANM_BOTTLE_SCOOP, &daAlinkHIO_bottle_c0::m.mScoopAnm); + + if (mEquipItem == KANTERA) { + i_onNoResetFlg2(FLG2_UNK_10000000); + + JPABaseEmitter* emitter_p = dComIfGp_particle_getEmitter(field_0x31c4); + if (emitter_p != NULL) { + emitter_p->stopDrawParticle(); + } + } + + field_0x3478 = daAlinkHIO_bottle_c0::m.mScoopAnm.mCheckFrame; + field_0x347c = 14.0f; + + if (var_r31 != NULL) { + shape_angle.y = cLib_targetAngleY(¤t.pos, &var_r31->current.pos); + current.angle.y = shape_angle.y; + + current.pos.x = var_r31->current.pos.x - cM_ssin(shape_angle.y) * 70.0f; + current.pos.z = var_r31->current.pos.z - cM_scos(shape_angle.y) * 70.0f; + } + + if (temp_r30 == PROC_OBJ_OILTUBO) { + onModeFlg(0x2000); + } + } else if (temp_r3) { + setSingleAnimeParam(ANM_BOTTLE_SWING_DOWN, &daAlinkHIO_bottle_c0::m.mSwingDownAnm); + field_0x3478 = daAlinkHIO_bottle_c0::m.mSwingDownAnm.mCheckFrame; + field_0x347c = 8.0f; + } else { + setSingleAnimeParam(ANM_BOTTLE_SWING, &daAlinkHIO_bottle_c0::m.mSwingSideAnm); + field_0x3478 = daAlinkHIO_bottle_c0::m.mSwingSideAnm.mCheckFrame; + field_0x347c = 4.0f; + } + + mProcVar2.field_0x300c = 0; + voiceStart(Z2SE_AL_V_SWING_BOTTLE); + seStartOnlyReverb(Z2SE_AL_SWING_BOTTLE); + mProcVar3.field_0x300e.x = 0; + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -221,8 +688,90 @@ asm int daAlink_c::procBottleSwingInit(fopAc_ac_c* param_0, int param_1) { #include "asm/d/a/d_a_alink/procBottleSwingInit__9daAlink_cFP10fopAc_ac_ci.s" } #pragma pop +#endif /* 8010FF58-801102D0 10A898 0378+00 1/0 0/0 0/0 .text procBottleSwing__9daAlink_cFv */ +// matches with literals +#ifdef NONMATCHING +int daAlink_c::procBottleSwing() { + daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl; + + if (mProcVar2.field_0x300c == 0) { + if (mEvtInfo.i_checkCommandCatch()) { + if (mProcVar3.field_0x300e.x == 0) { + dComIfGp_getVibration().StartShock(1, 1, cXyz(0.0f, 1.0f, 0.0f)); + mProcVar3.field_0x300e.x = 1; + } + + dComIfGp_setPlayerStatus1(0, 0x4000000); + + if (i_dComIfGp_att_getCatghTarget() != NULL) { + fopAcM_OnStatus(i_dComIfGp_att_getCatghTarget(), 0x800); + } else if (field_0x280c.getActor() != NULL) { + fopAcM_OnStatus(field_0x280c.getActor(), 0x800); + } + + if (frameCtrl_p->getFrame() > field_0x347c) { + mProcVar2.field_0x300c = 1; + offModeFlg(4); + + if (mEquipItem != KANTERA) { + u16 bottle_item = dComIfGp_event_getPreItemNo(); + + if (bottle_item == WATER_BOTTLE && + getMoveBGActorName(mLinkAcch.m_wtr, 0) == PROC_Obj_Onsen) + { + bottle_item = HOT_SPRING; + } + + dComIfGs_setEquipBottleItemIn(mSelectItemId, bottle_item); + + if (bottle_item == BEE_CHILD) { + dComIfGp_setSelectItemNum(mSelectItemId, dComIfGs_getBottleMax()); + } else if (bottle_item == WATER_BOTTLE) { + seStartOnlyReverb(Z2SE_LK_SCOOP_WATER); + } else if (checkOilBottleItem(bottle_item)) { + seStartOnlyReverb(Z2SE_AL_SCOOP_OIL); + } else if (bottle_item == LV1_SOUP || bottle_item == LV2_SOUP || + bottle_item == LV3_SOUP) + { + seStartOnlyReverb(Z2SE_AL_SCOOP_SOUP); + } + + setBottleModel(bottle_item); + mHeldItemModel->getModelData()->getMaterialNodePointer(0)->getShape()->hide(); + } + + mDemo.i_setSpecialDemoType(); + } + } else if (frameCtrl_p->getFrame() <= field_0x347c) { + if (getReadyItem() == EMPTY_BOTTLE && + (i_dComIfGp_att_getCatghTarget() != NULL || + (field_0x2fbc != 11 && field_0x2fbc != 6 && mWaterY > current.pos.y + 10.0f))) + { + fopAcM_orderCatchEvent(this, i_dComIfGp_att_getCatghTarget(), 0, 0); + } else if (mEquipItem == KANTERA) { + if (field_0x280c.getActor() != NULL) { + fopAcM_orderCatchEvent(this, field_0x280c.getActor(), 0, 0); + } + } + } + } + + if (checkAnmEnd(frameCtrl_p)) { + if (mProcVar2.field_0x300c != 0) { + procBottleGetInit(mProcVar3.field_0x300e.y); + } else { + checkNextAction(0); + } + } else if (frameCtrl_p->getFrame() > field_0x3478 && mProcVar2.field_0x300c == 0) { + onModeFlg(4); + checkNextAction(1); + } + + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -231,6 +780,7 @@ asm int daAlink_c::procBottleSwing() { #include "asm/d/a/d_a_alink/procBottleSwing__9daAlink_cFv.s" } #pragma pop +#endif /* 801102D0-80110518 10AC10 0248+00 2/2 0/0 0/0 .text procBottleGetInit__9daAlink_cFi */ int daAlink_c::procBottleGetInit(int param_0) { @@ -304,7 +854,7 @@ int daAlink_c::procBottleGet() { if (frameCtrl->checkAnmEnd() && checkEndMessage(field_0x32cc)) { resetFairyEffect(); if (mEquipItem != KANTERA) { - deleteEquipItem(0, 0); + deleteEquipItem(FALSE, FALSE); } resetSpecialEvent(); diff --git a/src/d/a/d_a_alink_bow.inc b/src/d/a/d_a_alink_bow.inc index c5952f1b5e1..cd8b3052568 100644 --- a/src/d/a/d_a_alink_bow.inc +++ b/src/d/a/d_a_alink_bow.inc @@ -125,7 +125,7 @@ void daAlink_c::makeArrow() { mItemAcKeep.setData(arrow_actor); } - field_0x3018 = 0; + mItemVar0.field_0x3018 = 0; } /* 800DEAE4-800DEB8C 0D9424 00A8+00 3/3 0/0 0/0 .text deleteArrow__9daAlink_cFv */ diff --git a/src/d/a/d_a_alink_canoe.inc b/src/d/a/d_a_alink_canoe.inc index c139af8da40..67351d57bbf 100644 --- a/src/d/a/d_a_alink_canoe.inc +++ b/src/d/a/d_a_alink_canoe.inc @@ -85,7 +85,7 @@ BOOL daAlink_c::checkFishingRodAndLureItem() const { void daAlink_c::initFishingRodHand() { field_0x2f94 = 0x65; field_0x2f95 = 0x65; - field_0x3018 = 1; + mItemVar0.field_0x3018 = 1; if (mEquipItem == JEWEL_WORM_ROD || mEquipItem == WORM_ROD) { mItemMode = 0x74; diff --git a/src/d/a/d_a_alink_copyrod.inc b/src/d/a/d_a_alink_copyrod.inc index 8014128598a..02c7723c3bd 100644 --- a/src/d/a/d_a_alink_copyrod.inc +++ b/src/d/a/d_a_alink_copyrod.inc @@ -196,8 +196,8 @@ int daAlink_c::returnCopyRod() { /* 800E1ADC-800E1BB4 0DC41C 00D8+00 2/2 0/0 0/0 .text checkUpperItemActionCopyRod__9daAlink_cFv */ BOOL daAlink_c::checkUpperItemActionCopyRod() { - if (field_0x3018 != 0) { - field_0x3018--; + if (mItemVar0.field_0x3018 != 0) { + mItemVar0.field_0x3018--; } if (checkReadyItem() && !itemButton() && checkCopyRodReadyAnime()) { diff --git a/src/d/a/d_a_alink_demo.inc b/src/d/a/d_a_alink_demo.inc index 462fab2cdc8..3601237f101 100644 --- a/src/d/a/d_a_alink_demo.inc +++ b/src/d/a/d_a_alink_demo.inc @@ -2961,7 +2961,7 @@ int daAlink_c::procCoDead() { } if (!i_checkNoResetFlg2(FLG2_UNK_40000)) { - mProcVar3.field_0x300e.x++; + mProcVar3.field_0x300e++; if (mProcVar3.field_0x300e.x == 2) { dCam_getBody()->StartEventCamera(9, fopAcM_GetID(this), 0); } else if (mProcVar3.field_0x300e.x > 10) { diff --git a/src/d/a/d_a_alink_hook.inc b/src/d/a/d_a_alink_hook.inc index fb0ce5bf246..af99b8e0646 100644 --- a/src/d/a/d_a_alink_hook.inc +++ b/src/d/a/d_a_alink_hook.inc @@ -435,7 +435,7 @@ void daAlink_c::initHookshotReady() { dComIfGp_getVibration().StartShock(1, 1, cXyz(tmp_0, lit_6040, tmp_0)); - field_0x3018 = 3; + mItemVar0.field_0x3018 = 3; field_0x3494 = lit_6041; } @@ -462,7 +462,7 @@ int daAlink_c::checkUpperItemActionHookshot() { } if (mItemMode == HS_MODE_READY_e) { - if (!itemButton() && field_0x3018 == 0 && checkReadyItem()) { + if (!itemButton() && mItemVar0.field_0x3018 == 0 && checkReadyItem()) { mItemMode = 2; field_0x3026 = 0; field_0x3494 = lit_6041; @@ -543,8 +543,8 @@ int daAlink_c::checkUpperItemActionHookshot() { return procHookshotFlyInit(); } - if (field_0x3018 > 0) { - field_0x3018--; + if (mItemVar0.field_0x3018 > 0) { + mItemVar0.field_0x3018--; } return cancelUpperItemReadyAnime(0); @@ -803,7 +803,7 @@ void daAlink_c::setHookshotPos() { if (checkHookshotWait() || mItemMode == 2) { csXyz* var_r28; if (mProcID == PROC_HOOKSHOT_WALL_SHOOT || mProcID == PROC_HOOKSHOT_ROOF_SHOOT) { - var_r28 = &mProcVar3.field_0x300e; + var_r28 = &mProcVar3.field_0x300e.x; } else { var_r28 = &mBodyAngle; } diff --git a/src/d/a/d_a_alink_ironball.inc b/src/d/a/d_a_alink_ironball.inc index 6149067abfa..35361470725 100644 --- a/src/d/a/d_a_alink_ironball.inc +++ b/src/d/a/d_a_alink_ironball.inc @@ -25,38 +25,38 @@ s16 daAlink_c::getIronBallBgHit() const { /* 80112474-801124B4 10CDB4 0040+00 0/0 2/2 1/1 .text checkIronBallThrowMode__9daAlink_cCFv */ bool daAlink_c::checkIronBallThrowMode() const { return mEquipItem == IRONBALL && - (field_0x3018 == 4 || field_0x3018 == 5 || field_0x3018 == 6 || field_0x3018 == 3); + (mItemVar0.field_0x3018 == 4 || mItemVar0.field_0x3018 == 5 || mItemVar0.field_0x3018 == 6 || mItemVar0.field_0x3018 == 3); } /* 801124B4-801124FC 10CDF4 0048+00 0/0 1/1 1/1 .text checkIronBallThrowReturnMode__9daAlink_cCFv */ bool daAlink_c::checkIronBallThrowReturnMode() const { - return mEquipItem == IRONBALL && (field_0x3018 == 4 || field_0x3018 == 5 || field_0x3018 == 6 || - field_0x3018 == 7 || field_0x3018 == 3); + return mEquipItem == IRONBALL && (mItemVar0.field_0x3018 == 4 || mItemVar0.field_0x3018 == 5 || mItemVar0.field_0x3018 == 6 || + mItemVar0.field_0x3018 == 7 || mItemVar0.field_0x3018 == 3); } /* 801124FC-80112524 10CE3C 0028+00 1/0 0/0 0/0 .text checkIronBallReturn__9daAlink_cCFv */ bool daAlink_c::checkIronBallReturn() const { - return mEquipItem == IRONBALL && field_0x3018 == 7; + return mEquipItem == IRONBALL && mItemVar0.field_0x3018 == 7; } /* 80112524-80112568 10CE64 0044+00 1/0 0/0 0/0 .text checkIronBallGroundStop__9daAlink_cCFv */ bool daAlink_c::checkIronBallGroundStop() const { - return mEquipItem == IRONBALL && field_0x3018 != 0 && field_0x3018 != 8 && field_0x301e == 0 && + return mEquipItem == IRONBALL && mItemVar0.field_0x3018 != 0 && mItemVar0.field_0x3018 != 8 && field_0x301e == 0 && field_0x301e < 10; } /* 80112568-80112628 10CEA8 00C0+00 5/5 0/0 0/0 .text setIronBallWaitUpperAnime__9daAlink_cFi */ void daAlink_c::setIronBallWaitUpperAnime(int param_0) { if (!checkIronBallWaitAnime() && !checkIronBallPreSwingAnime() && - (field_0x3018 == 0 || field_0x3018 == 8) && (param_0 || checkNoUpperAnime())) { + (mItemVar0.field_0x3018 == 0 || mItemVar0.field_0x3018 == 8) && (param_0 || checkNoUpperAnime())) { setUpperAnimeBaseSpeed(0x19C, daAlinkHIO_ironBall_c0::m.mWaitAnmSpeed, daAlinkHIO_basic_c0::m.mAnmBlendFactor); setFacePriBck(0xE8); field_0x2f96 = 254; field_0x2f97 = 5; - field_0x3018 = 0; + mItemVar0.field_0x3018 = 0; } } @@ -68,8 +68,8 @@ void daAlink_c::checkIronBallDelete() { return; } - if (field_0x3018 == 1 || field_0x3018 == 2 || field_0x3018 == 3 || - ((field_0x3018 == 0 || field_0x3018 == 8) && !checkIronBallWaitAnime() && + if (mItemVar0.field_0x3018 == 1 || mItemVar0.field_0x3018 == 2 || mItemVar0.field_0x3018 == 3 || + ((mItemVar0.field_0x3018 == 0 || mItemVar0.field_0x3018 == 8) && !checkIronBallWaitAnime() && !checkEquipAnime() && (!i_checkModeFlg(4) || i_checkModeFlg(0x70C52) || !mLinkAcch.ChkGroundHit()))) { deleteEquipItem(1, 0); @@ -80,8 +80,8 @@ void daAlink_c::checkIronBallDelete() { void daAlink_c::setIronBallReturn(int param_0) { if (param_0 && field_0x301e != 0) { field_0x301e--; - } else if (field_0x3018 != 7) { - field_0x3018 = 7; + } else if (mItemVar0.field_0x3018 != 7) { + mItemVar0.field_0x3018 = 7; field_0x301e = 0; seStartOnlyReverb(Z2SE_AL_IB_PULLBACK); } @@ -214,13 +214,13 @@ BOOL daAlink_c::checkUpperItemActionIronBall() { u16 upperId = getMainBckData(ANM_IRONBALL_TURN)->m_upperID; setUpperAnimeBaseSpeed(upperId, daAlinkHIO_ironBall_c0::m.mTurnAnmSpeed, daAlinkHIO_ironBall_c0::m.mTurnInterpolation); - field_0x3018 = 2; + mItemVar0.field_0x3018 = 2; seStartOnlyReverb(Z2SE_AL_IB_SWING); return 1; } if (frameCtrl->getFrame() > lit_8781) { - field_0x3018 = 1; + mItemVar0.field_0x3018 = 1; } } else { daPy_frameCtrl_c* frameCtrl = &mUpperFrameCtrl[2]; @@ -283,7 +283,7 @@ int daAlink_c::procIronBallSubject() { setShapeAngleToAtnActor(0); - if (!checkNextAction(0) && itemButton() && field_0x3018 == 2) { + if (!checkNextAction(0) && itemButton() && mItemVar0.field_0x3018 == 2) { setBodyAngleToCamera(); } @@ -357,7 +357,7 @@ int daAlink_c::procIronBallThrowInit() { mNormalSpeed = FLOAT_LABEL(lit_6108); current.angle.y = shape_angle.y; mProcVar2.field_0x300c = 0; - field_0x3018 = 3; + mItemVar0.field_0x3018 = 3; field_0x3024 = 0; field_0x3026 = 0; @@ -381,7 +381,7 @@ asm int daAlink_c::procIronBallThrow() { int daAlink_c::procIronBallReturnInit() { commonProcInit(PROC_IRON_BALL_RETURN); - if (field_0x3018 == 8) { + if (mItemVar0.field_0x3018 == 8) { mProcVar2.field_0x300c = 1; setSingleAnimeParam(ANM_IRONBALL_CATCH, &daAlinkHIO_ironBall_c0::m.mCatchAnm); field_0x2f99 = 12; @@ -405,7 +405,7 @@ int daAlink_c::procIronBallReturn() { field_0x2f99 = 4; - if (field_0x3018 == 8 && mProcVar2.field_0x300c == 0) { + if (mItemVar0.field_0x3018 == 8 && mProcVar2.field_0x300c == 0) { mProcVar2.field_0x300c = 1; setSingleAnimeParam(ANM_IRONBALL_CATCH, &daAlinkHIO_ironBall_c0::m.mCatchAnm); field_0x2f99 = 12; @@ -414,17 +414,17 @@ int daAlink_c::procIronBallReturn() { f32 tmp_0 = FLOAT_LABEL(lit_6108); dComIfGp_getVibration().StartShock(3, 1, cXyz(tmp_0, lit_6040, tmp_0)); } else if (frameCtrl->checkAnmEnd()) { - if (field_0x3018 == 8) { - field_0x3018 = 0; + if (mItemVar0.field_0x3018 == 8) { + mItemVar0.field_0x3018 = 0; setIronBallWaitUpperAnime(1); checkNextAction(0); } - } else if (field_0x3018 == 8 && frameCtrl->getFrame() > daAlinkHIO_ironBall_c0::m.mCatchAnm.mCheckFrame) { - field_0x3018 = 0; + } else if (mItemVar0.field_0x3018 == 8 && frameCtrl->getFrame() > daAlinkHIO_ironBall_c0::m.mCatchAnm.mCheckFrame) { + mItemVar0.field_0x3018 = 0; setIronBallWaitUpperAnime(1); if (!checkNextAction(1)) { - field_0x3018 = 8; + mItemVar0.field_0x3018 = 8; resetUpperAnime(UPPER_2, FLOAT_LABEL(lit_6108)); } } diff --git a/src/d/a/d_a_alink_link.inc b/src/d/a/d_a_alink_link.inc index 26965e921eb..da91ba1dc1a 100644 --- a/src/d/a/d_a_alink_link.inc +++ b/src/d/a/d_a_alink_link.inc @@ -3711,7 +3711,7 @@ int daAlink_c::draw() { if (mClothesChangeWaitTimer != 0) { if (mProcID == PROC_METAMORPHOSE) { - if (mProcVar3.field_0x300e > 0) { + if (mProcVar3.field_0x300e.x > 0) { mTevStr.mFogColor.r = 255; } else { mTevStr.mFogColor.r = -255; diff --git a/src/d/a/d_a_alink_sumou.inc b/src/d/a/d_a_alink_sumou.inc index 14cc8d54845..7c0ce76e690 100644 --- a/src/d/a/d_a_alink_sumou.inc +++ b/src/d/a/d_a_alink_sumou.inc @@ -3,6 +3,10 @@ * Player Sumo action handling */ +#include "d/a/d_a_alink.h" +#include "d/com/d_com_inf_game.h" +#include "rel/d/a/npc/d_a_npc_wrestler/d_a_npc_wrestler.h" + /* 800EA844-800EA8D0 0E5184 008C+00 5/5 0/0 0/0 .text checkSumouVsActor__9daAlink_cFv */ BOOL daAlink_c::checkSumouVsActor() { mCargoCarryAcKeep.setActor(); @@ -28,8 +32,8 @@ void daAlink_c::cancelSumouMode() { } /* 800EA908-800EA92C 0E5248 0024+00 2/2 0/0 0/0 .text sumouPunchTrigger__9daAlink_cFv */ -void daAlink_c::sumouPunchTrigger() { - itemTriggerCheck(BTN_B); +BOOL daAlink_c::sumouPunchTrigger() { + return itemTriggerCheck(BTN_B); } /* 800EA92C-800EA950 0E526C 0024+00 5/5 0/0 0/0 .text setSumouPunchStatus__9daAlink_cFv @@ -53,7 +57,7 @@ int daAlink_c::procSumouReadyInit() { mSpecialMode = 1; mProcVar2.field_0x300c = 0; mProcVar3.field_0x300e.x = 0; - deleteEquipItem(0, 1); + deleteEquipItem(FALSE, TRUE); if (mThrowBoomerangAcKeep.getActor() != NULL) { static_cast(mThrowBoomerangAcKeep.getActor())->onForceDelete(); @@ -63,6 +67,73 @@ int daAlink_c::procSumouReadyInit() { } /* 800EAA28-800EAC4C 0E5368 0224+00 1/0 0/0 0/0 .text procSumouReady__9daAlink_cFv */ +// matches with literals +#ifdef NONMATCHING +int daAlink_c::procSumouReady() { + field_0x2f99 = 4; + + if (!checkSumouVsActor()) { + return 1; + } + + if (mSpecialMode == 2 || mSpecialMode == 3 || mSpecialMode == 4) { + setSumouPunchStatus(); + setDoStatusEmphasys(0x15); + dComIfGp_setAdvanceDirection(5); + + if (doTrigger()) { + mProcVar2.field_0x300c = 1; + } + + if (sumouPunchTrigger()) { + mProcVar3.field_0x300e.x = 1; + } + } + + if (mUnderAnmHeap[0].getIdx() == getMainBckData(ANM_SUMOU_HAKEYOI)->m_underID && + mUnderFrameCtrl[0].checkPass(7.0f)) + { + field_0x2f92 = 0xFE; + field_0x2f93 = 0xFE; + } + + if (mSpecialMode == 3) { + setSingleAnimeBase(ANM_SUMOU_HAKEYOI); + field_0x2f99 = 12; + mSpecialMode = 4; + dComIfGp_clearPlayerStatus0(0, 0x2000); + } else if (checkAnmEnd(mUnderFrameCtrl)) { + if (checkInputOnR()) { + s16 temp_r29 = (s16)(field_0x2fe2 - shape_angle.y); + int var_r30 = abs(temp_r29); + cLib_distanceAngleS(field_0x2fe2, shape_angle.y); + + if (var_r30 > 0x800 && var_r30 < 0x7800) { + mNormalSpeed = 1.0f; + + if (temp_r29 > 0) { + field_0x2f98 = 2; + } else { + field_0x2f98 = 3; + } + } + } + + if (mSpecialMode == 0x1C || mSpecialMode == 0x1B || mProcVar2.field_0x300c != 0 || + mProcVar3.field_0x300e.x != 0 || + (static_cast(mCargoCarryAcKeep.getActor())->getWrestlerAction() == + 3 && + !checkZeroSpeedF())) + { + procSumouActionInit(mProcVar2.field_0x300c, mProcVar3.field_0x300e.x, 0); + } else { + procSumouSideMoveInit(); + } + } + + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -71,8 +142,58 @@ asm int daAlink_c::procSumouReady() { #include "asm/d/a/d_a_alink/procSumouReady__9daAlink_cFv.s" } #pragma pop +#endif /* 800EAC4C-800EAD84 0E558C 0138+00 1/1 0/0 0/0 .text procSumouMoveInit__9daAlink_cFv */ +// matches with literals +#ifdef NONMATCHING +int daAlink_c::procSumouMoveInit() { + daNpcWrestler_c* wrestler_p = (daNpcWrestler_c*)mCargoCarryAcKeep.getActor(); + commonProcInit(PROC_SUMOU_MOVE); + + field_0x2f99 = 12; + field_0x3478 = 1000.0f; + + daAlink_ANM anm; + if (mSpecialMode == 15 || mSpecialMode == 16) { + if (wrestler_p->getWrestlerType() != 0) { + anm = ANM_SUMOU_TACKLE_WAIT_GORON; + } else { + anm = ANM_SUMOU_TACKLE_WAIT; + } + + setSingleAnimeBase(anm); + mSpeedModifier = 1.0f; + mSpecialMode = 7; + mProcVar2.field_0x300c = 0xFFFF; + mProcVar0.field_0x3008 = 10; + field_0x3478 = 5.0f; + field_0x32cc = Z2SE_AL_V_SUMO_PUSH; + } else { + if (wrestler_p->getWrestlerType() != 0) { + anm = ANM_SUMOU_TACKLE_STAGGER_GORON; + } else { + anm = ANM_SUMOU_TACKLE_STAGGER; + } + + setSingleAnimeBase(anm); + mSpeedModifier = -1.0f; + mSpecialMode = 8; + mProcVar2.field_0x300c = 10; + mProcVar0.field_0x3008 = 15; + field_0x2f9d = 0x60; + } + + field_0x3198 = anm; + current.angle.y = shape_angle.y; + mProcVar3.field_0x300e.x = 0; + mProcVar3.field_0x300e.y = 0; + mNormalSpeed = 0.0f; + mProcVar1.field_0x300a = 0x4B; + setFootEffectProcType(5); + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -81,8 +202,147 @@ asm int daAlink_c::procSumouMoveInit() { #include "asm/d/a/d_a_alink/procSumouMoveInit__9daAlink_cFv.s" } #pragma pop +#endif /* 800EAD84-800EB208 0E56C4 0484+00 1/0 0/0 0/0 .text procSumouMove__9daAlink_cFv */ +// matches with literals +#ifdef NONMATCHING +int daAlink_c::procSumouMove() { + field_0x2f99 = 4; + + if (!checkSumouVsActor()) { + return 1; + } + + daNpcWrestler_c* wrestler_p = (daNpcWrestler_c*)mCargoCarryAcKeep.getActor(); + daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl; + f32 sp8; + + if (frameCtrl_p->checkPass(field_0x3478)) { + voiceStart(field_0x32cc); + } + + if (mSpecialMode == 9 || mSpecialMode == 10) { + if (mProcVar1.field_0x300a != 0) { + mProcVar1.field_0x300a--; + } + + sp8 = frameCtrl_p->getRate(); + if (mProcVar0.field_0x3008 != 0) { + if (doTrigger()) { + mProcVar0.field_0x3008--; + } + + f32 var_f1; + if (mSpecialMode == 10 && mProcVar1.field_0x300a == 0) { + var_f1 = 1.5f; + } else { + var_f1 = 0.2f; + } + + cLib_chaseF(&sp8, var_f1, 0.3f); + frameCtrl_p->setRate(sp8); + } else if (mSpecialMode == 9) { + cLib_chaseF(&sp8, 1.5f, 0.3f); + } else { + setSingleAnimeBase(ANM_SUMOU_PUSH_BACK); + mSpecialMode = 0x23; + mSpeedModifier = 0.0f; + field_0x3478 = 13.0f; + field_0x32cc = Z2SE_AL_V_SUMO_HOLD_BACK; + field_0x3198 = ANM_SUMOU_PUSH_BACK; + } + } else if (mProcVar3.field_0x300e.x == 0) { + if (mProcVar2.field_0x300c > 0 && doTrigger()) { + mProcVar2.field_0x300c--; + } + + setDoStatusContinuation(0x64); + if (mSpeedModifier > 0.0f) { + sp8 = frameCtrl_p->getRate(); + + if (doTrigger()) { + cLib_chaseF(&sp8, 1.5f, 0.1f); + } else { + cLib_addCalc(&sp8, 1.0f, 0.5f, 0.05f, 0.02f); + } + + frameCtrl_p->setRate(sp8); + } + + dMeter2Info_onBlinkButton(1); + + if (mSpecialMode == 0x24 || (mSpeedModifier < 0.0f && mProcVar2.field_0x300c == 0)) { + mProcVar3.field_0x300e.x = 1; + field_0x2f99 = 12; + + if (mSpeedModifier > 0.0f) { + daAlink_ANM anm; + if (wrestler_p->getWrestlerType() != 0) { + anm = ANM_SUMOU_PULL_BACK_GORON; + } else { + anm = ANM_SUMOU_PULL_BACK; + } + + setSingleAnimeBase(anm); + mSpecialMode = 0x24; + field_0x3478 = 13.0f; + field_0x32cc = Z2SE_AL_V_SUMO_PUSHED_BACK; + field_0x3198 = anm; + } else { + setSingleAnimeBase(ANM_SUMOU_PUSH_BACK); + mSpecialMode = 0x23; + field_0x3478 = 13.0f; + field_0x32cc = Z2SE_AL_V_SUMO_HOLD_BACK; + field_0x3198 = ANM_SUMOU_PUSH_BACK; + } + + mSpeedModifier = 0.0f; + } else { + s16 var_r31 = 0; + + if (mSpeedModifier > 0.0f && checkInputOnR()) { + int direction = getDirectionFromAngle(mStickAngle); + if (direction == DIR_LEFT || direction == DIR_RIGHT) { + var_r31 = field_0x33ac * (daAlinkHIO_pushpull_c0::m.field_0xE * field_0x33ac); + + if (direction == DIR_RIGHT) { + var_r31 = -var_r31; + } + } + } else if (mSpeedModifier < 0.0f) { + var_r31 = mProcVar3.field_0x300e.y; + mProcVar3.field_0x300e.y = 0; + } + + if (var_r31 != 0) { + f32 temp_f3 = current.pos.x + cM_ssin(shape_angle.y) * 40.0f; + f32 temp_f1 = current.pos.z + cM_scos(shape_angle.y) * 40.0f; + + shape_angle.y += var_r31; + current.angle.y = shape_angle.y; + current.pos.x = temp_f3 - (cM_ssin(shape_angle.y) * 40.0f); + current.pos.z = temp_f1 - (cM_scos(shape_angle.y) * 40.0f); + } + } + } else if (checkAnmEnd(frameCtrl_p)) { + return procSumouSideMoveInit(); + } + + if (field_0x3198 == ANM_SUMOU_TACKLE_STAGGER || + field_0x3198 == ANM_SUMOU_TACKLE_STAGGER_GORON || + field_0x3198 == ANM_SUMOU_TACKLE_WAIT_GORON || field_0x3198 == ANM_SUMOU_TACKLE_WAIT) + { + field_0x2f9d = 0x60; + } else if ((field_0x3198 == ANM_SUMOU_PULL_BACK || field_0x3198 == ANM_SUMOU_PULL_BACK_GORON) && + frameCtrl_p->getFrame() >= 16.0f && frameCtrl_p->getFrame() < 28.0f) + { + field_0x2f9d = 0x60; + } + + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -91,6 +351,7 @@ asm int daAlink_c::procSumouMove() { #include "asm/d/a/d_a_alink/procSumouMove__9daAlink_cFv.s" } #pragma pop +#endif /* 800EB208-800EB2BC 0E5B48 00B4+00 4/4 0/0 0/0 .text procSumouSideMoveInit__9daAlink_cFv */ @@ -115,6 +376,107 @@ int daAlink_c::procSumouSideMoveInit() { } /* 800EB2BC-800EB624 0E5BFC 0368+00 1/0 0/0 0/0 .text procSumouSideMove__9daAlink_cFv */ +// matches with literals +#ifdef NONMATCHING +int daAlink_c::procSumouSideMove() { + field_0x2f99 = 4; + + if (!checkSumouVsActor()) { + return 1; + } + + if (mProcVar0.field_0x3008 != 0) { + mProcVar0.field_0x3008--; + } + + cLib_addCalcAngleS(&shape_angle.y, + cLib_targetAngleY(¤t.pos, &mCargoCarryAcKeep.getActor()->current.pos), + 2, 0x2000, 0x800); + + if (field_0x2f98 == 3) { + current.angle.y = shape_angle.y - 0x4000; + } else { + current.angle.y = shape_angle.y + 0x4000; + } + + int temp_r30_2 = cLib_distanceAngleS(field_0x2fe2, shape_angle.y); + if (mSpecialMode == 0x1C || mSpecialMode == 0x1B || doTrigger() || sumouPunchTrigger() || + (static_cast(mCargoCarryAcKeep.getActor())->getWrestlerAction() == 3 && + !checkZeroSpeedF())) + { + return procSumouActionInit(doTrigger(), sumouPunchTrigger(), mProcVar0.field_0x3008); + } + + setSumouPunchStatus(); + setDoStatusEmphasys(0x15); + dComIfGp_setAdvanceDirection(5); + + f32 var_f1; + if (checkInputOnR() && temp_r30_2 > 0x800 && temp_r30_2 < 0x7800) { + if (abs((s16)(field_0x2fe2 - current.angle.y)) > 0x4000) { + current.angle.y += 0x8000; + mNormalSpeed *= -1.0f; + + if (field_0x2f98 == 3) { + field_0x2f98 = 2; + } else { + field_0x2f98 = 3; + } + } + + if (field_0x33ac > (1.0f - fabsf(mNormalSpeed / field_0x594)) * 0.3f) { + var_f1 = daAlinkHIO_atnMove_c0::m.mAcceleration * field_0x33ac; + } else { + var_f1 = 0.0f; + } + } else { + var_f1 = 0.0f; + } + + setNormalSpeedF(var_f1, daAlinkHIO_atnMove_c0::m.mDeceleration); + + if (checkZeroSpeedF()) { + onModeFlg(1); + mSpecialMode = 0x16; + field_0x2f98 = 3; + current.angle.y = shape_angle.y - 0x4000; + + if (mUnderAnmHeap[0].getIdx() != (getMainBckData(ANM_SUMOU_FIGHT_WAIT)->m_underID & 0xFFF)) + { + setSingleAnimeBase(ANM_SUMOU_FIGHT_WAIT); + mSpeedModifier = 0.0f; + field_0x3198 = 0x141; + } + } else { + offModeFlg(1); + + daAlink_ANM anm; + if (field_0x2f98 == 3) { + anm = ANM_SUMOU_FIGHT_STEP_RIGHT; + } else { + anm = ANM_SUMOU_FIGHT_STEP_LEFT; + } + + if (mUnderAnmHeap[0].getIdx() != (getMainBckData(anm)->m_underID & 0xFFF)) { + setSingleAnime(anm, 1.0f, 0.0f, 24, 3.0f); + field_0x3198 = anm; + mSpeedModifier = 1.0f; + } + + if (field_0x2f98 == 3) { + mSpecialMode = 0x18; + } else { + mSpecialMode = 0x17; + } + + mUnderFrameCtrl[0].setRate(mNormalSpeed / field_0x594); + initBasAnime(); + field_0x2f9d = 0x60; + } + + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -123,19 +485,317 @@ asm int daAlink_c::procSumouSideMove() { #include "asm/d/a/d_a_alink/procSumouSideMove__9daAlink_cFv.s" } #pragma pop +#endif /* 800EB624-800EBCE0 0E5F64 06BC+00 4/4 0/0 0/0 .text procSumouActionInit__9daAlink_cFiii */ +// matches with literals +#ifdef NONMATCHING +int daAlink_c::procSumouActionInit(BOOL i_doTrigger, BOOL i_punchTrigger, int unused) { + commonProcInit(PROC_SUMOU_ACTION); + + daNpcWrestler_c* wrestler_p = (daNpcWrestler_c*)mCargoCarryAcKeep.getActor(); + int wrestler_action = wrestler_p->getWrestlerAction(); + mProcVar3.field_0x300e.z = 0; + + daAlink_ANM anm; + if (mSpecialMode == 0x21) { + mSpecialMode = 0x22; + anm = ANM_SUMOU_PUNCH_SHOCK; + } else if (mSpecialMode == 0x1C) { + i_doTrigger = FALSE; + i_punchTrigger = FALSE; + mSpecialMode = 0x1E; + + if (!checkZeroSpeedF()) { + daAlink_ANM var_r0; + if (field_0x2f98 == 2) { + var_r0 = ANM_SUMOU_FIGHT_STEP_LEFT; + } else { + var_r0 = ANM_SUMOU_FIGHT_STEP_RIGHT; + } + + anm = var_r0; + mProcVar3.field_0x300e.z = 1; + } else { + anm = ANM_SUMOU_PUNCH_SHOCK; + } + } else if (mSpecialMode == 0x1B) { + i_doTrigger = FALSE; + i_punchTrigger = FALSE; + mSpecialMode = 0x1D; + anm = ANM_SUMOU_TACKLE_SHOCK; + } else if (wrestler_action == 2) { + if (i_doTrigger) { + mSpecialMode = 0x10; + anm = ANM_SUMOU_DODGE_TACKLE; + } else if (i_punchTrigger) { + mSpecialMode = 0x15; + anm = ANM_SUMOU_PUNCH_MISS_SHOCK_RETURN; + } else { + mSpecialMode = 0x1E; + + if (!checkZeroSpeedF()) { + daAlink_ANM var_r0_2; + if (field_0x2f98 == 2) { + var_r0_2 = ANM_SUMOU_FIGHT_STEP_LEFT; + } else { + var_r0_2 = ANM_SUMOU_FIGHT_STEP_RIGHT; + } + + anm = var_r0_2; + mProcVar3.field_0x300e.z = 1; + } else { + anm = ANM_SUMOU_PUNCH_SHOCK; + } + } + } else if (wrestler_action == 3) { + if (i_doTrigger) { + mSpecialMode = 0x12; + anm = ANM_SUMOU_TACKLE_SHOCK_RETURN; + } else if (i_punchTrigger) { + mSpecialMode = 0x14; + anm = ANM_SUMOU_PUNCH_MISS_SHOCK; + } else if (!checkZeroSpeedF()) { + if (field_0x2f98 == 3) { + mSpecialMode = 0x1A; + anm = ANM_SUMOU_FIGHT_STEP_RIGHT; + } else { + mSpecialMode = 0x19; + anm = ANM_SUMOU_FIGHT_STEP_LEFT; + } + } else { + mSpecialMode = 0x1D; + anm = ANM_SUMOU_TACKLE_SHOCK; + } + } else if (wrestler_action == 1) { + if (i_doTrigger) { + mSpecialMode = 0x11; + anm = ANM_SUMOU_TACKLE_MISS; + } else { + mSpecialMode = 0x13; + anm = ANM_SUMOU_PUNCH; + } + } else if (wrestler_p->getWrestlerType() != 0 && !i_checkEquipHeavyBoots()) { + if (i_doTrigger) { + mSpecialMode = 0x12; + anm = ANM_SUMOU_TACKLE_SHOCK_RETURN; + } else { + mSpecialMode = 0x15; + anm = ANM_SUMOU_PUNCH_MISS_SHOCK_RETURN; + } + } else if (i_doTrigger) { + mSpecialMode = 0xF; + if (wrestler_p->getWrestlerType() == 0) { + anm = ANM_SUMOU_TACKLE; + } else { + anm = ANM_SUMOU_TACKLE_GORON; + } + } else { + mSpecialMode = 0x13; + anm = ANM_SUMOU_PUNCH; + } + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(shape_angle.y); + mProcVar3.field_0x300e.x = 0x82; + + if (mSpecialMode == 0x19) { + dComIfGp_setAdvanceDirection(1); + mProcVar3.field_0x300e.y = shape_angle.y - 0x2800; + field_0x2f98 = 2; + } else if (mSpecialMode == 0x1A) { + field_0x2f98 = 3; + dComIfGp_setAdvanceDirection(4); + mProcVar3.field_0x300e.y = shape_angle.y + 0x2800; + } else if (i_doTrigger) { + setDoStatusEmphasys(0x15); + mProcVar3.field_0x300e.x = 0x15; + field_0x2f98 = 4; + } else if (i_punchTrigger) { + setSumouPunchStatus(); + mProcVar3.field_0x300e.x = 0x44; + field_0x2f98 = 4; + } else if (!checkZeroSpeedF()) { + if (field_0x2f98 == 2) { + mProcVar3.field_0x300e.y = shape_angle.y - 0x2800; + } else { + mProcVar3.field_0x300e.y = shape_angle.y + 0x2800; + } + } else { + field_0x2f98 = 4; + } + + f32 var_f31; + if ((anm == ANM_SUMOU_FIGHT_STEP_RIGHT || anm == ANM_SUMOU_FIGHT_STEP_LEFT) && + mUnderAnmHeap[0].getIdx() != (getMainBckData(anm)->m_underID & 0xFFF)) + { + var_f31 = mUnderFrameCtrl[0].getFrame(); + } else { + var_f31 = 0.0f; + } + + mProcVar2.field_0x300c = 0; + field_0x3198 = anm; + + int end_frame; + if (anm == ANM_SUMOU_FIGHT_STEP_LEFT) { + end_frame = 24; + } else { + end_frame = -1; + } + + setSingleAnime(anm, 1.0f, 0.0f, end_frame, 3.0f); + mUnderFrameCtrl[0].setFrame(var_f31); + getNowAnmPackUnder(UNDER_0)->setFrame(var_f31); + + cLib_addCalcAngleS(&shape_angle.y, + cLib_targetAngleY(¤t.pos, &mCargoCarryAcKeep.getActor()->current.pos), + 2, 0x2000, 0x800); + current.angle.y = shape_angle.y; + mNormalSpeed = 0.0f; + + field_0x3478 = current.pos.absXZ(wrestler_p->current.pos); + field_0x37c8 = wrestler_p->current.pos; + field_0x2f99 = 0xC; + field_0x347c = 1000.0f; + field_0x3480 = 1000.0f; + + if (anm == ANM_SUMOU_PUNCH_SHOCK || anm == ANM_SUMOU_PUNCH_MISS_SHOCK_RETURN) { + field_0x347c = 12.0f; + field_0x32cc = Z2SE_AL_V_SUMO_HARITE_DMG; + } else if (anm == ANM_SUMOU_PUNCH_MISS_SHOCK) { + field_0x347c = 11.0f; + field_0x32cc = Z2SE_AL_V_SUMO_HARITE_ATK; + field_0x3480 = 35.0f; + } else if (anm == ANM_SUMOU_PUNCH) { + field_0x347c = 11.0f; + field_0x32cc = Z2SE_AL_V_SUMO_HARITE_ATK; + } else if (anm == ANM_SUMOU_TACKLE || anm == ANM_SUMOU_TACKLE_GORON || + anm == ANM_SUMOU_TACKLE_MISS) + { + field_0x347c = 2.0f; + field_0x32cc = Z2SE_AL_V_SUMO_TUCKLE_ATK; + } else if (anm == ANM_SUMOU_DODGE_TACKLE) { + field_0x347c = 32.0f; + field_0x32cc = Z2SE_AL_V_SUMO_TUCKLE_ATK; + } else if (anm == ANM_SUMOU_TACKLE_SHOCK || anm == ANM_SUMOU_TACKLE_SHOCK_RETURN) { + field_0x347c = 7.0f; + field_0x32cc = Z2SE_AL_V_SUMO_HOLDED; + } + + setFootEffectProcType(5); + + if (field_0x3198 == ANM_SUMOU_FIGHT_STEP_LEFT || field_0x3198 == ANM_SUMOU_FIGHT_STEP_RIGHT) { + field_0x2f9d = 0x60; + } + + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm int daAlink_c::procSumouActionInit(int param_0, int param_1, int param_2) { +asm int daAlink_c::procSumouActionInit(BOOL i_doTrigger, BOOL i_punchTrigger, int param_2) { nofralloc #include "asm/d/a/d_a_alink/procSumouActionInit__9daAlink_cFiii.s" } #pragma pop +#endif /* 800EBCE0-800EC0F8 0E6620 0418+00 1/0 0/0 0/0 .text procSumouAction__9daAlink_cFv */ +// matches with literals +#ifdef NONMATCHING +int daAlink_c::procSumouAction() { + field_0x2f99 = 4; + + if (!checkSumouVsActor()) { + return 1; + } + + if (field_0x2f98 == 2) { + dComIfGp_setAdvanceDirection(1); + } else if (field_0x2f98 == 3) { + dComIfGp_setAdvanceDirection(4); + } + + mProcVar2.field_0x300c++; + + if (mSpecialMode == 0x1C || mSpecialMode == 0x1B) { + return procSumouActionInit(FALSE, FALSE, 0); + } + + if (mSpecialMode == 0x19 || mSpecialMode == 0x1A) { + cLib_addCalcAngleS(&shape_angle.y, mProcVar3.field_0x300e.y, 2, 0x400, 0x40); + current.angle.y = shape_angle.y; + + current.pos.set(field_0x37c8.x - field_0x3478 * cM_ssin(current.angle.y), field_0x37c8.y, + field_0x37c8.z - field_0x3478 * cM_scos(current.angle.y)); + if (mProcVar2.field_0x300c >= 29 || shape_angle.y == mProcVar3.field_0x300e.y) { + procSumouSideMoveInit(); + } + } else { + if (mSpecialMode == 0x13) { + cLib_addCalcAngleS( + &shape_angle.y, + cLib_targetAngleY(¤t.pos, &mCargoCarryAcKeep.getActor()->current.pos), 2, + 0x2000, 0x800); + current.angle.y = shape_angle.y; + } else if (mSpecialMode == 0x1E && mProcVar3.field_0x300e.z != 0) { + cLib_addCalcAngleS(&shape_angle.y, mProcVar3.field_0x300e.y, 2, 0x400, 0x40); + current.angle.y = shape_angle.y; + + current.pos.set(field_0x37c8.x - field_0x3478 * cM_ssin(current.angle.y), + field_0x37c8.y, + field_0x37c8.z - field_0x3478 * cM_scos(current.angle.y)); + } else if (mSpecialMode == 0x1E || mSpecialMode == 0x1D) { + cLib_addCalcAngleS( + &shape_angle.y, + cLib_targetAngleY(¤t.pos, &mCargoCarryAcKeep.getActor()->current.pos), 2, + 0x600, 0x40); + current.angle.y = shape_angle.y; + } + + if (mProcVar3.field_0x300e.x == 0x15) { + setDoStatusEmphasys(0x15); + } else if (mProcVar3.field_0x300e.x == 0x44) { + setSumouPunchStatus(); + } + + daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl; + if (checkAnmEnd(frameCtrl_p)) { + if (mSpecialMode == 0x1E) { + procSumouStaggerInit(); + } else if (mSpecialMode == 0x12 || mSpecialMode == 0x22 || mSpecialMode == 0x13 || + mSpecialMode == 0x1A || mSpecialMode == 0x19 || mSpecialMode == 0x11 || + mSpecialMode == 0x15) + { + procSumouSideMoveInit(); + } else { + procSumouMoveInit(); + } + } else if (mProcVar3.field_0x300e.z != 0) { + if (mProcVar2.field_0x300c > 12.0f) { + setSingleAnime(ANM_SUMOU_PUNCH_SHOCK, 1.0f, mProcVar2.field_0x300c, -1, 3.0f); + field_0x2f99 = 12; + mProcVar3.field_0x300e.z = 0; + voiceStart(Z2SE_AL_V_SUMO_HARITE_DMG); + field_0x3198 = 0x152; + } + } else if (frameCtrl_p->checkPass(field_0x347c)) { + voiceStart(field_0x32cc); + } else if (frameCtrl_p->checkPass(field_0x3480)) { + voiceStart(Z2SE_AL_V_SUMO_HOLDED); + } + } + + if (field_0x3198 == 0x142 || field_0x3198 == 0x143) { + field_0x2f9d = 0x60; + } + + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -144,12 +804,13 @@ asm int daAlink_c::procSumouAction() { #include "asm/d/a/d_a_alink/procSumouAction__9daAlink_cFv.s" } #pragma pop +#endif /* 800EC0F8-800EC170 0E6A38 0078+00 1/1 0/0 0/0 .text procSumouStaggerInit__9daAlink_cFv */ int daAlink_c::procSumouStaggerInit() { commonProcInit(PROC_SUMOU_STAGGER); - + if (mSpecialMode == 0x11) { mSpecialMode = 0x20; } else { @@ -183,6 +844,67 @@ int daAlink_c::procSumouStagger() { /* 800EC20C-800EC3D8 0E6B4C 01CC+00 1/1 0/0 0/0 .text procSumouWinLoseInit__9daAlink_cFv */ +// matches with literals +#ifdef NONMATCHING +int daAlink_c::procSumouWinLoseInit() { + if (mSpecialMode == 0xB && mUnderFrameCtrl[0].getAttribute() == 2) { + cancelSumouMode(); + return procWaitInit(); + } + + daNpcWrestler_c* wrestler_p = (daNpcWrestler_c*)mCargoCarryAcKeep.getActor(); + commonProcInit(PROC_SUMOU_WIN_LOSE); + field_0x3478 = 1000.0f; + + daAlink_ANM anm = ANM_WAIT; + if (mSpecialMode == 0xB) { + mProcVar2.field_0x300c = 1; + } else if (mSpecialMode == 0xD) { + field_0x2f99 = 12; + if (wrestler_p->getWrestlerType() != 0) { + anm = ANM_SUMOU_WIN_GORON; + } else { + anm = ANM_SUMOU_WIN; + } + + setSingleAnimeBase(anm); + mProcVar2.field_0x300c = 1; + field_0x3478 = 10.0f; + field_0x32cc = Z2SE_AL_V_SUMO_PUSH_LAST; + field_0x3198 = 13; + } else { + f32 start_frame; + if (mSpecialMode == 12) { + start_frame = 24.0f; + voiceStart(Z2SE_AL_V_SUMO_FALL_LOSE); + } else { + start_frame = 0.0f; + field_0x3478 = 23.0f; + field_0x32cc = Z2SE_AL_V_SUMO_FALL_LOSE; + } + + if (wrestler_p->getWrestlerType() != 0) { + anm = ANM_SUMOU_LOSE_GORON; + } else { + anm = ANM_SUMOU_LOSE; + } + + setSingleAnime(anm, 1.0f, start_frame, -1, 3.0f); + field_0x2f99 = 15; + mProcVar2.field_0x300c = 0; + current.pos.y += 70.0f; + } + + field_0x3198 = anm; + mNormalSpeed = 0.0f; + setSpecialGravity(0.0f, mMaxFallSpeed, 0); + speed.y = 0.0f; + setFootEffectProcType(5); + mProcVar3.field_0x300e.x = 0; + field_0x33b0 = 20.0f; + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -191,8 +913,52 @@ asm int daAlink_c::procSumouWinLoseInit() { #include "asm/d/a/d_a_alink/procSumouWinLoseInit__9daAlink_cFv.s" } #pragma pop +#endif /* 800EC3D8-800EC538 0E6D18 0160+00 1/0 0/0 0/0 .text procSumouWinLose__9daAlink_cFv */ +// matches with literals +#ifdef NONMATCHING +int daAlink_c::procSumouWinLose() { + if (mProcVar3.field_0x300e.x == 0) { + if (mProcVar2.field_0x300c != 0) { + field_0x2f99 = 4; + } else { + field_0x2f99 = 7; + } + } + + daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl; + + if (frameCtrl_p->checkPass(field_0x3478)) { + voiceStart(field_0x32cc); + } + + if (checkAnmEnd(frameCtrl_p)) { + if (mProcVar2.field_0x300c != 0 || mProcVar3.field_0x300e.x != 0) { + cancelSumouMode(); + procWaitInit(); + } else { + setSingleAnimeBase(ANM_SUMOU_KNOCKED_DOWN); + field_0x2f99 = 12; + field_0x3478 = 1000.0f; + field_0x3198 = ANM_SUMOU_KNOCKED_DOWN; + } + } else if (mProcVar3.field_0x300e.x == 0 && mSpecialMode == 0x25) { + setSingleAnimeBase(ANM_SUMOU_GET_UP); + mProcVar3.field_0x300e.x = 1; + field_0x3478 = 1000.0f; + field_0x3198 = ANM_SUMOU_GET_UP; + } + + if ((field_0x3198 == ANM_SUMOU_LOSE || field_0x3198 == ANM_SUMOU_LOSE_GORON) && + frameCtrl_p->checkPass(37.0f)) + { + field_0x2f9d = 4; + } + + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -201,6 +967,7 @@ asm int daAlink_c::procSumouWinLose() { #include "asm/d/a/d_a_alink/procSumouWinLose__9daAlink_cFv.s" } #pragma pop +#endif /* 800EC538-800EC5F4 0E6E78 00BC+00 1/0 0/0 0/0 .text procSumouShikoInit__9daAlink_cFv */ int daAlink_c::procSumouShikoInit() { @@ -218,11 +985,42 @@ int daAlink_c::procSumouShikoInit() { setFootEffectProcType(5); deleteEquipItem(0, 1); - return 1; } /* 800EC5F4-800EC724 0E6F34 0130+00 1/0 0/0 0/0 .text procSumouShiko__9daAlink_cFv */ +// matches with literals +#ifdef NONMATCHING +int daAlink_c::procSumouShiko() { + daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl; + if (field_0x2f99 != 12) { + field_0x2f99 = 4; + } + + if (mSpecialMode == 1) { + return procSumouReadyInit(); + } + + if (mProcVar2.field_0x300c == 0) { + if (checkAnmEnd(frameCtrl_p)) { + setSingleAnimeBaseMorf(ANM_SUMOU_SHIKO_WAIT, -1.0f); + field_0x2f99 = 12; + mProcVar2.field_0x300c = 1; + } else if (frameCtrl_p->checkPass(127.0f)) { + field_0x2f9d = 0x20; + } else if (frameCtrl_p->checkPass(65.0f)) { + voiceStart(Z2SE_AL_V_SUMO_SHIKO); + } else if (frameCtrl_p->checkPass(9.0f)) { + field_0x2f92 = 0xFE; + field_0x2f93 = 0xFE; + } + } else { + dComIfGp_evmng_cutEnd(field_0x3184); + } + + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -230,4 +1028,5 @@ asm int daAlink_c::procSumouShiko() { nofralloc #include "asm/d/a/d_a_alink/procSumouShiko__9daAlink_cFv.s" } -#pragma pop \ No newline at end of file +#pragma pop +#endif diff --git a/src/d/a/d_a_alink_swim.inc b/src/d/a/d_a_alink_swim.inc index 832fb6f2312..353d8ace474 100644 --- a/src/d/a/d_a_alink_swim.inc +++ b/src/d/a/d_a_alink_swim.inc @@ -809,7 +809,7 @@ int daAlink_c::procSwimHookshotMoveInit() { field_0x3198 = -1; field_0x2f98 = 5; - if (field_0x3018 == 0) { + if (mItemVar0.field_0x3018 == 0) { setSwimMoveAnime(); } @@ -842,7 +842,7 @@ int daAlink_c::procSwimHookshotMove() { setDoStatus(0x12); } - if (field_0x3018 == 0) { + if (mItemVar0.field_0x3018 == 0) { setSpeedAndAngleSwim(); setSwimMoveAnime(); } diff --git a/src/d/a/d_a_alink_wolf.inc b/src/d/a/d_a_alink_wolf.inc index 5a38cc0ee81..631b8c9c2cd 100644 --- a/src/d/a/d_a_alink_wolf.inc +++ b/src/d/a/d_a_alink_wolf.inc @@ -5496,7 +5496,7 @@ void daAlink_c::setWolfLockDomeModel() { mDoExt_setCurrentHeap(prev_heap); mEquipItem = 0x109; - field_0x3018 = 0; + mItemVar0.field_0x3018 = 0; mSearchBallScale = daAlinkHIO_wlAtLock_c0::m.field_0x28.mSpeed; dComIfGp_setPlayerStatus1(0, 0x800000); @@ -5894,7 +5894,7 @@ int daAlink_c::procWolfRollAttackMove() { cLib_chaseF(&mSearchBallScale, daAlinkHIO_wlAtLock_c0::m.field_0x28.mStartFrame, daAlinkHIO_wlAtLock_c0::m.field_0x28.mInterpolation)) { - field_0x3018 = 1; + mItemVar0.field_0x3018 = 1; } if (mWolfLockNum < 10) {