From 885981cd0ba8a0481734cdb6ed82290a0efee02e Mon Sep 17 00:00:00 2001 From: soruh <33131839+soruh@users.noreply.github.com> Date: Mon, 5 May 2025 18:56:03 +0200 Subject: [PATCH] d_a_cstatue Matching (#2419) * d_a_cstatue * fix includes in d_com_inf_game * remove todos * create daCstatue_TYPE enum * name fields and add enums * fix procCopyRodSwingInit * apply suggestions --- configure.py | 2 +- include/d/actor/d_a_alink.h | 237 ++- include/d/actor/d_a_cstatue.h | 157 +- include/d/d_bg_s_acch.h | 2 +- include/d/d_com_inf_game.h | 63 +- include/d/d_tresure.h | 4 + include/f_op/f_op_actor_mng.h | 20 +- src/d/actor/d_a_alink_copyrod.inc | 11 +- src/d/actor/d_a_cstatue.cpp | 2700 +++++++++++++---------------- 9 files changed, 1473 insertions(+), 1723 deletions(-) diff --git a/configure.py b/configure.py index 51be3c89452..b3abc9d0eee 100755 --- a/configure.py +++ b/configure.py @@ -1627,7 +1627,7 @@ config.libs = [ ActorRel(Equivalent, "d_a_coach_2D"), # weak func order ActorRel(MatchingFor("GZ2E01"), "d_a_coach_fire"), ActorRel(Equivalent, "d_a_cow"), - ActorRel(NonMatching, "d_a_cstatue"), + ActorRel(MatchingFor("GZ2E01"), "d_a_cstatue"), ActorRel(Equivalent, "d_a_do"), # Z2SoundObjSimple dtor ActorRel(MatchingFor("GZ2E01"), "d_a_door_boss"), ActorRel(MatchingFor("GZ2E01"), "d_a_door_bossL5"), diff --git a/include/d/actor/d_a_alink.h b/include/d/actor/d_a_alink.h index 76bc3ec1569..d929ca105f9 100644 --- a/include/d/actor/d_a_alink.h +++ b/include/d/actor/d_a_alink.h @@ -2,18 +2,18 @@ #define D_A_D_A_ALINK_H #include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" -#include "JSystem/J3DGraphBase/J3DMaterial.h" #include "JSystem/J3DGraphBase/J3DMatBlock.h" +#include "JSystem/J3DGraphBase/J3DMaterial.h" #include "Z2AudioLib/Z2Creature.h" #include "Z2AudioLib/Z2WolfHowlMgr.h" #include "d/actor/d_a_player.h" +#include "d/actor/d_a_tag_mmsg.h" #include "d/d_eye_hl.h" #include "d/d_jnt_col.h" #include "d/d_msg_flow.h" #include "d/d_particle_copoly.h" #include "d/d_save.h" #include "f_op/f_op_actor_mng.h" -#include "d/actor/d_a_tag_mmsg.h" class J2DAnmColorKey; class J2DAnmTransformKey; @@ -147,9 +147,7 @@ public: daAlink_matAnm_c() { init(); } /* 8009D8E4 */ void init(); - /* 800D0180 */ void offSetFlg() { - mSetFlag = FALSE; - } + /* 800D0180 */ void offSetFlg() { mSetFlag = FALSE; } /* 800D0B8C */ virtual ~daAlink_matAnm_c() {} /* 8009D90C */ virtual void calc(J3DMaterial*) const; @@ -157,7 +155,7 @@ public: static void decMorfFrame() { cLib_calcTimer(&m_morf_frame); } static void setMorfFrame(u8 i_frame) { m_morf_frame = i_frame; } static u8 getMorfFrame() { return m_morf_frame; } - + static void onEyeMoveFlg() { m_eye_move_flg = true; } static void offEyeMoveFlg() { m_eye_move_flg = false; } static bool getEyeMoveFlg() { return m_eye_move_flg; } @@ -895,7 +893,8 @@ public: /* 0x00000100 */ MODE_UNK_100 = 0x100, /* 0x00000400 */ MODE_RIDING = 0x400, /* 0x00000800 */ MODE_UNK_800 = 0x800, - /* 0x00001000 */ MODE_UNK_1000 = 0x1000, // affects things like anim set when controlling rod statue + /* 0x00001000 */ MODE_UNK_1000 = + 0x1000, // affects things like anim set when controlling rod statue /* 0x00002000 */ MODE_UNK_2000 = 0x2000, /* 0x00004000 */ MODE_UNK_4000 = 0x4000, /* 0x00008000 */ MODE_UNK_8000 = 0x8000, @@ -1408,8 +1407,8 @@ public: /* 800AC738 */ void setDoubleAnimeBlendRatio(f32); /* 800AC754 */ void commonDoubleAnime(J3DAnmTransform*, J3DAnmTransform*, J3DAnmTransform*, J3DAnmTransform*, f32, f32, f32, int); - /* 800ACA14 */ int setDoubleAnime(f32, f32, f32, daAlink_c::daAlink_ANM, - daAlink_c::daAlink_ANM, int, f32); + /* 800ACA14 */ int setDoubleAnime(f32, f32, f32, daAlink_c::daAlink_ANM, daAlink_c::daAlink_ANM, + int, f32); /* 800ACD40 */ void commonSingleAnime(J3DAnmTransform*, J3DAnmTransform*, f32, f32, s16); /* 800ACF80 */ void setSingleAnimeBase(daAlink_c::daAlink_ANM anmID); /* 800ACFB0 */ void setSingleAnimeBaseMorf(daAlink_c::daAlink_ANM anmID, f32); @@ -1725,10 +1724,10 @@ public: /* 800D0110 */ BOOL checkWolfEnemyThrowAnime() const { return checkUpperAnime(0x2BD) || checkUpperAnime(0x2BE); } - /* 800D014C */ void setMidnaTalkStatus(u8 status) { - dComIfGp_setZStatus(status, 0); + /* 800D014C */ void setMidnaTalkStatus(u8 status) { dComIfGp_setZStatus(status, 0); } + /* 800D0164 */ void set3DStatus(u8 status, u8 direction) { + dComIfGp_set3DStatus(status, direction, 0); } - /* 800D0164 */ void set3DStatus(u8 status, u8 direction) { dComIfGp_set3DStatus(status, direction, 0); } /* 800D2684 */ void checkCutTurnCharge(); /* 800D0E08 */ void checkLightSwordMtrl(); /* 800D0E98 */ BOOL checkSwordEquipAnime() const; @@ -1748,8 +1747,8 @@ public: /* 800D1454 */ void checkComboCnt(); /* 800D152C */ void setCutType(u8); /* 800D1540 */ void setCylAtParam(u32, dCcG_At_Spl, u8, u8, int, f32, f32); - /* 800D1688 */ void setSwordAtParam(dCcG_At_Spl i_spl, u8 i_hitMark, u8 i_AtSe, int i_atp, f32 param_4, - f32 i_radius); + /* 800D1688 */ void setSwordAtParam(dCcG_At_Spl i_spl, u8 i_hitMark, u8 i_AtSe, int i_atp, + f32 param_4, f32 i_radius); /* 800D1788 */ static BOOL notSwordHitVibActor(fopAc_ac_c*); /* 800D17EC */ BOOL setSwordHitVibration(dCcD_GObjInf*); /* 800D1920 */ BOOL checkAtShieldHit(dCcD_GObjInf&); @@ -2717,7 +2716,8 @@ public: /* 80120500 */ int commonLargeDamageUpInit(int, int, s16, s16); /* 80120534 */ int commonFallInit(int); /* 80120580 */ JPABaseEmitter* setEmitter(u32*, u16, cXyz const*, csXyz const*); - /* 80120634 */ JPABaseEmitter* setEmitterPolyColor(u32*, u16, cBgS_PolyInfo&, cXyz const*, csXyz const*); + /* 80120634 */ JPABaseEmitter* setEmitterPolyColor(u32*, u16, cBgS_PolyInfo&, cXyz const*, + csXyz const*); /* 801206C4 */ JPABaseEmitter* setEmitterColor(u32*, u16, cXyz const*, csXyz const*); /* 80120778 */ void stopDrawParticle(u32); /* 801207BC */ void setEffectFrontRollParam(); @@ -2788,7 +2788,7 @@ public: /* 80129114 */ void setBlendWolfAtnMoveAnime(f32); /* 8012933C */ void setBlendWolfAtnBackMoveAnime(f32); /* 8012948C */ int setDoubleAnimeWolf(f32, f32, f32, daAlink_c::daAlink_WANM, - daAlink_c::daAlink_WANM, int, f32); + daAlink_c::daAlink_WANM, int, f32); /* 80129678 */ void setSingleAnimeWolfBase(daAlink_c::daAlink_WANM); /* 801296A8 */ void setSingleAnimeWolfBaseMorf(daAlink_c::daAlink_WANM, f32); /* 801296D8 */ void setSingleAnimeWolfBaseSpeed(daAlink_c::daAlink_WANM, f32, f32); @@ -3022,8 +3022,13 @@ public: /* 80140984 */ void statusWindowDraw(); /* 80140AC8 */ void resetStatusWindow(); /* 8018280C */ fopAc_ac_c* getChainGrabActor() { return field_0x2844.getActor(); } - /* 80182814 */ bool checkCokkoGlide() const { return mProcID == PROC_AUTO_JUMP && mProcVar2.field_0x300c != 0; } - /* 8018283C */ BOOL checkCameraLargeDamage() const { return mProcID == PROC_LARGE_DAMAGE || mProcID == PROC_LARGE_DAMAGE_WALL || mProcID == PROC_LARGE_DAMAGE_UP || mProcID == PROC_WOLF_LARGE_DAMAGE_UP; } + /* 80182814 */ bool checkCokkoGlide() const { + return mProcID == PROC_AUTO_JUMP && mProcVar2.field_0x300c != 0; + } + /* 8018283C */ BOOL checkCameraLargeDamage() const { + return mProcID == PROC_LARGE_DAMAGE || mProcID == PROC_LARGE_DAMAGE_WALL || + mProcID == PROC_LARGE_DAMAGE_UP || mProcID == PROC_WOLF_LARGE_DAMAGE_UP; + } /* 80182870 */ const cXyz& getHsSubChainTopPos() const { return mIronBallBgChkPos; } /* 80182888 */ BOOL checkCutHeadProc() const { return mProcID == PROC_CUT_HEAD; } /* 8018289C */ fopAc_ac_c* getRideActor() { return mRideAcKeep.getActor(); } @@ -3048,29 +3053,47 @@ public: if (mHeldItemModel != NULL && checkBottleItem(mEquipItem)) { return mHeldItemModel->getBaseTRMtx(); } - + return NULL; } virtual BOOL checkPlayerGuard() const; virtual u32 checkPlayerFly() const { - return checkModeFlg(MODE_SWIMMING | MODE_ROPE_WALK | MODE_VINE_CLIMB | MODE_UNK_800 | MODE_NO_COLLISION | MODE_CLIMB | MODE_JUMP); + return checkModeFlg(MODE_SWIMMING | MODE_ROPE_WALK | MODE_VINE_CLIMB | MODE_UNK_800 | + MODE_NO_COLLISION | MODE_CLIMB | MODE_JUMP); } virtual BOOL checkFrontRoll() const { return mProcID == PROC_FRONT_ROLL; } virtual BOOL checkWolfDash() const { return mProcID == PROC_WOLF_DASH; } - virtual BOOL checkAutoJump() const { return mProcID == PROC_AUTO_JUMP || mProcID == PROC_WOLF_AUTO_JUMP; } - virtual bool checkSideStep() const { return (mProcID == PROC_SIDESTEP || mProcID == PROC_WOLF_SIDESTEP) && mProcVar1.field_0x300a != 0; } - virtual bool checkWolfTriggerJump() const { return mProcID == PROC_WOLF_SIDESTEP || mProcID == PROC_WOLF_JUMP_ATTACK; } + virtual BOOL checkAutoJump() const { + return mProcID == PROC_AUTO_JUMP || mProcID == PROC_WOLF_AUTO_JUMP; + } + virtual bool checkSideStep() const { + return (mProcID == PROC_SIDESTEP || mProcID == PROC_WOLF_SIDESTEP) && + mProcVar1.field_0x300a != 0; + } + virtual bool checkWolfTriggerJump() const { + return mProcID == PROC_WOLF_SIDESTEP || mProcID == PROC_WOLF_JUMP_ATTACK; + } virtual BOOL checkGuardBreakMode() const { return mProcID == PROC_GUARD_BREAK; } - virtual bool checkLv3Slide() const { return mProcID == PROC_SLIDE && mProcVar3.field_0x300e != 0; } + virtual bool checkLv3Slide() const { + return mProcID == PROC_SLIDE && mProcVar3.field_0x300e != 0; + } virtual bool checkWolfHowlDemoMode() const { return mProcID == PROC_WOLF_HOWL_DEMO; } virtual bool checkChainBlockPushPull(); virtual BOOL checkElecDamage() const { return mProcID == PROC_ELEC_DAMAGE; } - virtual BOOL checkEmptyBottleSwing() const { return mEquipItem == fpcNm_ITEM_EMPTY_BOTTLE && mProcID == PROC_BOTTLE_SWING; } + virtual BOOL checkEmptyBottleSwing() const { + return mEquipItem == fpcNm_ITEM_EMPTY_BOTTLE && mProcID == PROC_BOTTLE_SWING; + } virtual BOOL checkBottleSwingMode() const { return mProcID == PROC_BOTTLE_SWING; } virtual BOOL checkHawkWait() const { return mProcID == PROC_HAWK_SUBJECT; } - virtual BOOL checkGoatThrow() const { return mProcID == PROC_GOAT_CATCH && mProcVar2.field_0x300c != 0; } - virtual BOOL checkGoatThrowAfter() const { return mProcID == PROC_GOAT_CATCH && field_0x3478 > 0.0f; } - virtual BOOL checkWolfTagLockJump() const { return mProcID == PROC_WOLF_TAG_JUMP && field_0x3198 == 0; } + virtual BOOL checkGoatThrow() const { + return mProcID == PROC_GOAT_CATCH && mProcVar2.field_0x300c != 0; + } + virtual BOOL checkGoatThrowAfter() const { + return mProcID == PROC_GOAT_CATCH && field_0x3478 > 0.0f; + } + virtual BOOL checkWolfTagLockJump() const { + return mProcID == PROC_WOLF_TAG_JUMP && field_0x3198 == 0; + } virtual BOOL checkWolfTagLockJumpLand() const { return mProcID == PROC_WOLF_TAG_JUMP_LAND; } virtual BOOL checkWolfRope(); virtual BOOL checkWolfRopeHang() const { return mProcID == PROC_WOLF_ROPE_HANG; } @@ -3080,13 +3103,24 @@ public: virtual BOOL checkWolfWait() const { return mProcID == PROC_WOLF_WAIT; } virtual BOOL checkWolfJumpAttack() const { return mProcID == PROC_WOLF_JUMP_ATTACK; } virtual BOOL checkWolfRSit() const { return mProcID == PROC_WOLF_SIT; } - virtual BOOL checkBottleDrinkEnd() const { return mProcID == PROC_BOTTLE_DRINK && mProcVar3.field_0x300e != 0; } + virtual BOOL checkBottleDrinkEnd() const { + return mProcID == PROC_BOTTLE_DRINK && mProcVar3.field_0x300e != 0; + } virtual BOOL checkWolfDig() const { return mProcID == PROC_WOLF_DIG; } virtual BOOL checkCutCharge() const { return mProcID == PROC_CUT_TURN_MOVE; } - virtual BOOL checkCutTurnCharge() const { return mProcID == PROC_CUT_TURN_MOVE && mProcVar2.field_0x300c == 0; } - virtual BOOL checkCutLargeJumpCharge() const { return mProcID == PROC_CUT_TURN_MOVE && mProcVar2.field_0x300c != 0; } - virtual BOOL checkComboCutTurn() const { return mProcID == PROC_CUT_TURN && mComboCutCount != 0; } - virtual BOOL checkClimbMove() const { return mProcID == PROC_CLIMB_MOVE_UPDOWN || mProcID == PROC_LADDER_MOVE || mProcID == PROC_CLIMB_MOVE_SIDE; } + virtual BOOL checkCutTurnCharge() const { + return mProcID == PROC_CUT_TURN_MOVE && mProcVar2.field_0x300c == 0; + } + virtual BOOL checkCutLargeJumpCharge() const { + return mProcID == PROC_CUT_TURN_MOVE && mProcVar2.field_0x300c != 0; + } + virtual BOOL checkComboCutTurn() const { + return mProcID == PROC_CUT_TURN && mComboCutCount != 0; + } + virtual BOOL checkClimbMove() const { + return mProcID == PROC_CLIMB_MOVE_UPDOWN || mProcID == PROC_LADDER_MOVE || + mProcID == PROC_CLIMB_MOVE_SIDE; + } virtual BOOL checkGrassWhistle() const { return mProcID == PROC_GRASS_WHISTLE_WAIT; } virtual BOOL checkBoarRun() const { return mProcID == PROC_BOAR_RUN; } virtual f32 getBaseAnimeFrameRate() const { return mUnderFrameCtrl[0].getRate(); } @@ -3118,13 +3152,18 @@ public: virtual void onFrollCrashFlg(u8, int); virtual MtxP getModelJointMtx(u16); virtual MtxP getHeadMtx() { - return mpLinkModel->getAnmMtx(field_0x30b4);; + return mpLinkModel->getAnmMtx(field_0x30b4); + ; } virtual bool setHookshotCarryOffset(fpc_ProcID, cXyz const*); - virtual BOOL checkCutJumpCancelTurn() const { return (mProcID == PROC_CUT_JUMP || mProcID == PROC_CUT_JUMP_LAND) && field_0x3198 != 2; } + virtual BOOL checkCutJumpCancelTurn() const { + return (mProcID == PROC_CUT_JUMP || mProcID == PROC_CUT_JUMP_LAND) && field_0x3198 != 2; + } virtual bool checkIronBallReturn() const; virtual bool checkIronBallGroundStop() const; - virtual BOOL checkSingleBoarBattleSecondBowReady() const { return mProcID == PROC_HORSE_BOW_SUBJECT && mProcVar2.field_0x300c != 0; } + virtual BOOL checkSingleBoarBattleSecondBowReady() const { + return mProcID == PROC_HORSE_BOW_SUBJECT && mProcVar2.field_0x300c != 0; + } virtual void setClothesChange(int); virtual void setPlayerPosAndAngle(cXyz const*, short, int); virtual void setPlayerPosAndAngle(cXyz const*, csXyz const*); @@ -3132,7 +3171,9 @@ public: virtual bool setThrowDamage(short, f32, f32, int, int, int); virtual bool checkSetNpcTks(cXyz*, int, int); virtual int setRollJump(f32, f32, short); - virtual void playerStartCollisionSE(u32 param_0, u32 param_1) { mZ2Link.startCollisionSE(param_0, param_1); } + virtual void playerStartCollisionSE(u32 param_0, u32 param_1) { + mZ2Link.startCollisionSE(param_0, param_1); + } virtual void cancelDungeonWarpReadyNeck() { if (mProcID != PROC_DUNGEON_WARP_READY) { return; @@ -3166,7 +3207,9 @@ public: } return (daSpinner_c*)spinnerActor; } - virtual BOOL checkHorseRideNotReady() const { return checkHorseRide() && mProcID != PROC_HORSE_RIDE && mProcID != PROC_HORSE_GETOFF; } + virtual BOOL checkHorseRideNotReady() const { + return checkHorseRide() && mProcID != PROC_HORSE_RIDE && mProcID != PROC_HORSE_GETOFF; + } virtual bool checkArrowChargeEnd() const; virtual f32 getSearchBallScale() const { return mSearchBallScale; } virtual int checkFastShotTime() { return mFastShotTime; } @@ -3183,9 +3226,13 @@ public: virtual bool checkUseKandelaar(int); virtual void setDkCaught(fopAc_ac_c*); virtual void onPressedDamage(cXyz const&, short); - virtual bool checkPriActorOwn(fopAc_ac_c const* p_actor) const { return field_0x27f4 == p_actor; } + virtual bool checkPriActorOwn(fopAc_ac_c const* p_actor) const { + return field_0x27f4 == p_actor; + } virtual bool onWolfEnemyBiteAll(fopAc_ac_c*, daPy_FLG2); - virtual bool checkWolfEnemyBiteAllOwn(fopAc_ac_c const* p_actor) const { return field_0x281c.getActorConst() == p_actor; } + virtual bool checkWolfEnemyBiteAllOwn(fopAc_ac_c const* p_actor) const { + return field_0x281c.getActorConst() == p_actor; + } virtual void setWolfEnemyHangBiteAngle(short angle) { if (mProcID != PROC_WOLF_ENEMY_HANG_BITE) { return; @@ -3199,8 +3246,12 @@ public: virtual void onSpinnerPathForceRemove(); virtual int getIronBallBgHit() const; virtual cXyz* getIronBallCenterPos(); - virtual bool checkCanoeFishingGetLeft() const { return mProcID == PROC_CANOE_FISHING_GET && mProcVar3.field_0x300e == 0; } - virtual bool checkCanoeFishingGetRight() const { return mProcID == PROC_CANOE_FISHING_GET && mProcVar3.field_0x300e == 1; } + virtual bool checkCanoeFishingGetLeft() const { + return mProcID == PROC_CANOE_FISHING_GET && mProcVar3.field_0x300e == 0; + } + virtual bool checkCanoeFishingGetRight() const { + return mProcID == PROC_CANOE_FISHING_GET && mProcVar3.field_0x300e == 1; + } virtual u8 checkBeeChildDrink() const { return field_0x2fd3; } virtual void skipPortalObjWarp(); virtual BOOL checkTreasureRupeeReturn(int) const; @@ -3243,7 +3294,9 @@ public: virtual cXyz* getHookshotTopPos(); virtual bool checkHookshotReturnMode() const; virtual bool checkHookshotShootReturnMode() const; - virtual bool checkOctaIealHang() const { return mProcID == PROC_BOSS_BODY_HANG && field_0x32cc == 0; } + virtual bool checkOctaIealHang() const { + return mProcID == PROC_BOSS_BODY_HANG && field_0x32cc == 0; + } virtual void cancelOctaIealHang() { if (mProcID != PROC_BOSS_BODY_HANG) { return; @@ -3262,12 +3315,16 @@ public: } mProcVar0.field_0x3008 = 1; } - virtual bool checkDragonHangRide() const { return mProcID == PROC_BOSS_BODY_HANG && field_0x32cc != 0; } + virtual bool checkDragonHangRide() const { + return mProcID == PROC_BOSS_BODY_HANG && field_0x32cc != 0; + } virtual void changeDragonActor(fopAc_ac_c*); virtual u8 getClothesChangeWaitTimer() const { return mClothesChangeWaitTimer; } virtual u8 getShieldChangeWaitTimer() const { return mShieldChangeWaitTimer; } virtual u8 getSwordChangeWaitTimer() const { return mSwordChangeWaitTimer; } - virtual BOOL checkMetamorphose() const { return mProcID == PROC_METAMORPHOSE && mProcVar1.field_0x300a == 0; } + virtual BOOL checkMetamorphose() const { + return mProcID == PROC_METAMORPHOSE && mProcVar1.field_0x300a == 0; + } virtual BOOL checkWolfDownAttackPullOut() const { return mProcID == PROC_WOLF_DOWN_AT_LAND; } virtual BOOL checkBootsOrArmorHeavy() const; virtual s32 getBottleOpenAppearItem() const; @@ -3276,14 +3333,17 @@ public: virtual BOOL checkSinkDead() const { return field_0x2fbd == 0xFF; } virtual BOOL checkHorseStart() { return checkHorseStart(getLastSceneMode(), getStartMode()); } virtual Z2WolfHowlMgr* getWolfHowlMgrP() { return &mZ2WolfHowlMgr; } - virtual BOOL checkWolfHowlSuccessAnime() const { return checkUnderMove0BckNoArcWolf(WANM_HOWL_SUCCESS); } + virtual BOOL checkWolfHowlSuccessAnime() const { + return checkUnderMove0BckNoArcWolf(WANM_HOWL_SUCCESS); + } virtual BOOL checkCopyRodTopUse(); virtual bool checkCopyRodEquip() const { return mEquipItem == fpcNm_ITEM_COPY_ROD; } virtual BOOL checkCutJumpMode() const { return mProcID == PROC_CUT_JUMP; } static BOOL checkDebugMoveInput() { if (mDoCPd_c::isConnect(PAD_3)) { - return mDoCPd_c::getHoldB(PAD_1) && mDoCPd_c::getAnalogR(PAD_1) > 0.8f && mDoCPd_c::getTrigA(PAD_1); + return mDoCPd_c::getHoldB(PAD_1) && mDoCPd_c::getAnalogR(PAD_1) > 0.8f && + mDoCPd_c::getTrigA(PAD_1); } return FALSE; @@ -3292,7 +3352,6 @@ public: u32 checkModeFlg(u32 pFlag) const { return mModeFlg & pFlag; } BOOL checkSmallUpperGuardAnime() const { return checkUpperAnime(0x16); } BOOL checkFmChainGrabAnime() const { return checkUpperAnime(0x62) || checkUpperAnime(0x2A0); } - // this might be a fake match, but helps fix usage in many functions #pragma push @@ -3319,7 +3378,9 @@ public: return (mEquipItem == fpcNm_ITEM_BOOMERANG || mEquipItem == 0x102) && checkUpperAnime(0x54); } bool checkDkCaught2Anime() const { return checkUpperAnime(0x262); } - BOOL checkCopyRodThrowAnime() const { return mEquipItem == fpcNm_ITEM_COPY_ROD && checkUpperAnime(0x53); } + BOOL checkCopyRodThrowAnime() const { + return mEquipItem == fpcNm_ITEM_COPY_ROD && checkUpperAnime(0x53); + } BOOL checkCutDashChargeAnime() const { return checkUpperAnime(0x83); } BOOL checkBoomerangAnimeAndReturnWait() const { return checkBoomerangAnime(); } BOOL checkTwoHandItemEquipAnime() const { return checkUpperAnime(0x245); } @@ -3334,7 +3395,9 @@ public: bool checkBowShootAnime() const { return checkUpperAnime(0xC); } bool checkBowWaitAnime() const { return checkUpperAnime(0xD); } BOOL checkGrabUpThrowAnime() const { return checkUpperAnime(0x170); } - BOOL checkGrabSideThrowAnime() const { return checkUpperAnime(0x51) || mUpperAnmHeap[0].getIdx() == 0x51; } + BOOL checkGrabSideThrowAnime() const { + return checkUpperAnime(0x51) || mUpperAnmHeap[0].getIdx() == 0x51; + } BOOL checkGrabHeavyThrowAnime() const { return checkUpperAnime(0x17B); } BOOL checkGrabAnimeUp() const { return checkUpperAnime(0x16C); } BOOL checkGrabAnimeSide() const { return checkUpperAnime(0x50); } @@ -3350,8 +3413,12 @@ public: bool checkIronBallSwingAnime() const { return checkUpperAnime(0x19B); } bool checkDashDamageAnime() const { return checkUpperAnime(0xAD); } bool checkBoomerangCatchAnime() const { return checkUpperAnime(0x52); } - BOOL checkCopyRodReadyAnime() const { return mEquipItem == fpcNm_ITEM_COPY_ROD && checkUpperAnime(0x54); } - BOOL checkCanoeFishingWaitAnime() const { return checkUpperAnime(0x5D) || checkUpperAnime(0x260); } + BOOL checkCopyRodReadyAnime() const { + return mEquipItem == fpcNm_ITEM_COPY_ROD && checkUpperAnime(0x54); + } + BOOL checkCanoeFishingWaitAnime() const { + return checkUpperAnime(0x5D) || checkUpperAnime(0x260); + } BOOL checkCopyRodControllAnime() const { return checkUpperAnime(0x202); } BOOL checkWolfHeadDamageAnime() const { return checkUpperAnime(0x2A7); } BOOL checkExchangeRodAnime() const { return checkUpperAnime(0x68); } @@ -3444,7 +3511,9 @@ public: cXyz* getMidnaHairAtnPos() { return &mMidnaHairAtnPos; } const daAlink_AnmData* getAnmData(daAlink_ANM anmID) const { return &m_anmDataTable[anmID]; } - const daAlink_FaceTexData* getFaceTexData(daAlink_FTANM i_anmID) const { return &m_faceTexDataTable[i_anmID]; } + const daAlink_FaceTexData* getFaceTexData(daAlink_FTANM i_anmID) const { + return &m_faceTexDataTable[i_anmID]; + } s16 getCameraAngleX() const { return field_0x310a; } s16 getCameraAngleY() const { return field_0x310c; } @@ -3466,7 +3535,8 @@ public: var_r5 = 0; if (mItemAcKeep.getActor() != NULL && - mItemAcKeep.getActor()->eventInfo.checkCommandDemoAccrpt() != 0) { + mItemAcKeep.getActor()->eventInfo.checkCommandDemoAccrpt() != 0) + { var_r5 = 1; } @@ -3490,10 +3560,8 @@ public: } BOOL checkSlideMode() { - return mProcID == PROC_SLIDE || - mProcID == PROC_SLIDE_LAND || - mProcID == PROC_WOLF_SLIDE_READY || - mProcID == PROC_WOLF_SLIDE_LAND || + return mProcID == PROC_SLIDE || mProcID == PROC_SLIDE_LAND || + mProcID == PROC_WOLF_SLIDE_READY || mProcID == PROC_WOLF_SLIDE_LAND || mProcID == PROC_WOLF_SLIDE; } @@ -3517,7 +3585,9 @@ public: f32 getCopyRodBallDisFlyMax() const { return mSearchBallScale; } void clearIronBallActor() { field_0x173c.SetActor(this); } - BOOL checkCanoeRideOwn(const fopAc_ac_c* param_0) const { return checkCanoeRide() && mRideAcKeep.getActorConst() == param_0; } + BOOL checkCanoeRideOwn(const fopAc_ac_c* param_0) const { + return checkCanoeRide() && mRideAcKeep.getActorConst() == param_0; + } bool checkWolfDashMode() const { return checkNoResetFlg1(FLG1_DASH_MODE); } bool checkWolfLieWaterIn() const { return mWaterY > current.pos.y + 20.5f; } @@ -3545,6 +3615,12 @@ public: bool checkSpinnerRideWait() const { return mProcID == PROC_SPINNER_WAIT && mProcVar2.field_0x300c == 0; } + bool checkCopyRodSwingMode() { return mProcID == PROC_COPY_ROD_SWING; } + bool checkCopyRodSwingModeInit() { + return mProcID == PROC_COPY_ROD_SWING && mProcVar2.field_0x300c != 0; + } + float transAnimeMoveX() { return field_0x3464; } + float transAnimeMoveZ() { return field_0x3468; } bool checkRoofSwitchHang() const { return mProcID == PROC_ROOF_SWITCH_HANG; } bool checkCanoeWait() const { return mProcID == PROC_CANOE_WAIT; } bool checkCanoeSubjectivity() const { return mProcID == PROC_CANOE_SUBJECTIVITY; } @@ -3578,9 +3654,7 @@ public: void clearComboReserb() { offNoResetFlg2(FLG2_UNK_2); } - void setDamageColorTime() { - mDamageColorTime = 32 - (mDamageTimer % 16); - } + void setDamageColorTime() { mDamageColorTime = 32 - (mDamageTimer % 16); } BOOL setEnemyBomb(fopAc_ac_c* i_actor) { return exchangeGrabActor(i_actor); } @@ -3606,9 +3680,7 @@ public: return getDirectionFromAngle(field_0x2fe2 - current.angle.y); } - bool checkAnmEnd(daPy_frameCtrl_c* i_frameCtrl) { - return i_frameCtrl->checkAnmEnd(); - } + bool checkAnmEnd(daPy_frameCtrl_c* i_frameCtrl) { return i_frameCtrl->checkAnmEnd(); } BOOL checkCrawlWaterIn() { return mWaterY > current.pos.y + 15.5f; } @@ -3632,7 +3704,7 @@ public: bool checkRootTransXClearMode() { return field_0x2f99 & 1; } bool checkRootTransYClearMode() { return field_0x2f99 & 2; } bool checkRootTransClearContinueMode() { return field_0x2f99 & 8; } - s16 checkWindStoneHowl() {return mProcVar4.field_0x3010; } + s16 checkWindStoneHowl() { return mProcVar4.field_0x3010; } u8 getCorrectCurveID() { return mZ2WolfHowlMgr.getCorrectCurveID(); } u8 getCorrectLineNum() { return mZ2WolfHowlMgr.getCorrectLineNum(); } u32 getWolfHowlTimer() { return mZ2WolfHowlMgr.getTimer(); } @@ -3648,7 +3720,9 @@ public: fopAc_ac_c* getAtnActor() { return mTargetedActor; } - void itemHitSE(u32 param_1, u32 param_2, Z2SoundObjBase* param_3) { mZ2Link.startHitItemSE(param_1, param_2, param_3, -1.0f); } + void itemHitSE(u32 param_1, u32 param_2, Z2SoundObjBase* param_3) { + mZ2Link.startHitItemSE(param_1, param_2, param_3, -1.0f); + } BOOL checkStartFall() { return getStartMode() == 3; } @@ -3667,21 +3741,13 @@ public: mDoMtx_multVec(getRightHandMatrix(), &m_handRightInSidePos, o_pos); } - cXyz* getLineTopPosP() { - return mSight.getPosP(); - } + cXyz* getLineTopPosP() { return mSight.getPosP(); } - cXyz* getBoomerangLockPosP() { - return &mHeldItemRootPos; - } + cXyz* getBoomerangLockPosP() { return &mHeldItemRootPos; } - BOOL boomerangLockTrigger() { - return itemActionTrigger(); - } + BOOL boomerangLockTrigger() { return itemActionTrigger(); } - BOOL checkBoomerangLockTrigger() { - return boomerangLockTrigger(); - } + BOOL checkBoomerangLockTrigger() { return boomerangLockTrigger(); } BOOL checkDemoSpinnerKeep() const { return mDemo.getDemoMode() == 14 && mDemo.getParam0() == 1; @@ -3705,9 +3771,7 @@ public: inline void startRestartRoomFromOut(int, u32, int); - u16 getReadyItem() { - return dComIfGp_getSelectItem(mSelectItemId); - } + u16 getReadyItem() { return dComIfGp_getSelectItem(mSelectItemId); } static daAlink_BckData const m_mainBckShield[20]; static daAlink_BckData const m_mainBckSword[5]; @@ -3720,7 +3784,6 @@ public: static Vec const m_handLeftInSidePos; static Vec const m_handRightInSidePos; - static daAlink_procInitTable m_procInitTable[]; static daAlink_procFunc m_demoInitTable[]; static EffParamProc m_fEffParamProc[]; @@ -3780,8 +3843,8 @@ public: /* 0x00704 */ J3DAnmTextureSRTKey* mpKanteraGlowBtk; /* 0x00708 */ J3DModel* mHeldItemModel; /* 0x0070C */ J3DModel* mpHookTipModel; // related to held item - /* 0x00710 */ J3DModel* field_0x0710; // related to held item - /* 0x00714 */ J3DModel* field_0x0714; // related to held item + /* 0x00710 */ J3DModel* field_0x0710; // related to held item + /* 0x00714 */ J3DModel* field_0x0714; // related to held item /* 0x00718 */ J3DAnmTextureSRTKey* field_0x0718; /* 0x0071C */ J3DAnmTextureSRTKey* field_0x071c; /* 0x00720 */ J3DAnmTextureSRTKey* field_0x0720; @@ -4377,7 +4440,7 @@ struct daAlinkHIO_anm_c { /* 0x08 */ f32 mStartFrame; /* 0x0C */ f32 mInterpolation; /* 0x10 */ f32 mCancelFrame; -}; // size: 0x14 +}; // size: 0x14 struct daAlinkHIO_basic_c1 { /* 0x00 */ bool mOneHitKill; @@ -4833,7 +4896,7 @@ public: /* 0x54 */ s16 mGuardBodyInterpolation; /* 0x56 */ s16 mSmallGuardLRAngleMax; /* 0x58 */ s16 mSmallGuardFBAngleMax; - /* 0x5C */ f32 mCrouchGuardAnmSpeed; // Unused + /* 0x5C */ f32 mCrouchGuardAnmSpeed; // Unused /* 0x60 */ f32 mCrouchGuardInterpolation; // Unused /* 0x64 */ f32 mGuardSpeedNormal; /* 0x68 */ f32 mGuardSpeedLarge; diff --git a/include/d/actor/d_a_cstatue.h b/include/d/actor/d_a_cstatue.h index d9dbbdcbd50..15f9c12334e 100644 --- a/include/d/actor/d_a_cstatue.h +++ b/include/d/actor/d_a_cstatue.h @@ -5,10 +5,54 @@ #include "d/d_particle_copoly.h" #include "f_op/f_op_actor.h" +enum daCstatue_FLG0 { + daCstatue_FLG0_1 = 0x1, + daCstatue_FLG0_2 = 0x2, + daCstatue_FLG0_4 = 0x4, + daCstatue_FLG0_8 = 0x8, + daCstatue_FLG0_10 = 0x10, + daCstatue_FLG0_20 = 0x20, + daCstatue_FLG0_Demo = 0x40, + daCstatue_FLG0_80 = 0x80, + daCstatue_FLG0_100 = 0x100, + daCstatue_FLG0_200 = 0x200, + daCstatue_FLG0_400 = 0x400, + daCstatue_FLG0_800 = 0x800, + daCstatue_FLG0_1000 = 0x1000, +}; + +enum daCstatue_MoveMode { + daCstatue_MoveMode_0, + daCstatue_MoveMode_1, + daCstatue_MoveMode_2, + daCstatue_MoveMode_3, +}; + +enum daCstatue_DemoMode { + daCstatue_DemoMode_0, + daCstatue_DemoMode_1, + daCstatue_DemoMode_2, + daCstatue_DemoMode_3, +}; + +enum daCstatueWarpMode { + daCstatueWarpMode_Active = 0x1, + daCstatueWarpMode_Ground = 0x2, +}; + +enum daCstatueType { + daCstatueType_Normal, + daCstatueType_Small, + daCstatueType_Normal2, + daCstatueType_BossRight, + daCstatueType_BossLeft, + daCstatueType_N, +}; + /** * @ingroup actors-unsorted * @class daCstatue_c - * @brief Dominion Rod Statue (small?) + * @brief Dominion Rod Statue * * @details * @@ -16,84 +60,85 @@ class daCstatue_c : public fopAc_ac_c { public: /* 806636AC */ void atHitCallback(fopAc_ac_c*); - /* 806636EC */ void createHeap(); - /* 80663D28 */ void create(); + /* 806636EC */ int createHeap(); + /* 80663D28 */ int create(); /* 80664840 */ ~daCstatue_c(); /* 80664AA0 */ void setRoomInfo(); /* 80664B38 */ void setMatrix(); /* 80664C9C */ void posMove(); /* 8066555C */ void setCollision(); - /* 80665E14 */ void checkHammerReverse(); + /* 80665E14 */ BOOL checkHammerReverse(); /* 80665F80 */ void setDemo(); /* 80666390 */ void setAnime(); - /* 80666B80 */ void initBrk(u16); + /* 80666B80 */ int initBrk(u16); /* 80666BF8 */ void initStopBrkBtk(); /* 80666C38 */ void initStartBrkBtk(); - /* 80666DE8 */ void execute(); - /* 80667438 */ void draw(); + /* 80666DE8 */ int execute(); + /* 80667438 */ int draw(); - bool checkNormalType() const { return mType == 0; } - bool checkNotSmallType() const { return mType == 1; } - bool checkBossType() const { return mType == 4 || mType == 3; } + bool checkBossAtGroundHit() const { return mBossAtGndHit == 1; } + bool checkNormalType() const { return mType == daCstatueType_Normal; } + bool checkNotSmallType() const { return mType != daCstatueType_Small; } + bool checkBossType() const { + return mType == daCstatueType_BossLeft || mType == daCstatueType_BossRight; + } cXyz& getBallPos() { return mBallPos; } - void onWarpGround(const cXyz& pos) { - field_0xb14 = pos; - field_0xae1 = 3; + void onWarpGround(const cXyz& pos) { + mWarpTarget = pos; + mWarpMode = daCstatueWarpMode_Active | daCstatueWarpMode_Ground; } void warpStart(const cXyz& pos) { - field_0xb14 = pos; - field_0xae1 = 1; - } - void onStateFlg0(int flg) { - mStateFlg0 |= flg; + mWarpTarget = pos; + mWarpMode = daCstatueWarpMode_Active; } + void onStateFlg0(daCstatue_FLG0 flg) { mStateFlg0 |= flg; } + void offStateFlg0(daCstatue_FLG0 flg) { mStateFlg0 &= ~flg; } + bool checkStateFlg0(daCstatue_FLG0 flg) const { return mStateFlg0 & flg; } void warpDelete() { - onStateFlg0(1); - field_0xae1 = 1; + onStateFlg0(daCstatue_FLG0_1); + mWarpMode = daCstatueWarpMode_Active; } - static u8 const m_bckIdxTable[70 + 2 /* padding */]; + static u16 const m_bckIdxTable[daCstatueType_N][7]; private: - /* 0x568 */ char* mResName; + /* 0x568 */ const char* mResName; /* 0x56C */ request_of_phase_process_class mPhaseReq; - /* 0x574 */ J3DModel* field_0x574; - /* 0x578 */ mDoExt_McaMorfSO* field_0x578; - /* 0x57C */ mDoExt_btkAnm field_0x57c; - /* 0x594 */ mDoExt_brkAnm field_0x594; - /* 0x5AC */ dBgS_AcchCir field_0x5ac[4]; - /* 0x6AC */ dBgS_StatueAcch field_0x6ac; - /* 0x884 */ dCcD_Stts field_0x884; - /* 0x8C0 */ dCcD_Cyl field_0x8c0; - /* 0x9FC */ dCcD_Cyl* field_0x9fc; - /* 0xA00 */ dCcD_Cps* field_0xa00; - /* 0xA04 */ dCcD_Cps* field_0xa04; - /* 0xA08 */ dCcD_Sph* field_0xa08; - /* 0xA0C */ mDoExt_invisibleModel field_0xa0c; - /* 0xA14 */ Z2Creature field_0xa14; - /* 0xAA4 */ dPaPo_c field_0xaa4; - /* 0xADC */ u8 mReverb; + /* 0x574 */ J3DModel* mModel; + /* 0x578 */ mDoExt_McaMorfSO* mpMorf; + /* 0x57C */ mDoExt_btkAnm mAnim1; + /* 0x594 */ mDoExt_brkAnm mAnim2; + /* 0x5AC */ dBgS_AcchCir mAcchCir[4]; + /* 0x6AC */ dBgS_StatueAcch mStatueAcch; + /* 0x884 */ dCcD_Stts mStts; + /* 0x8C0 */ dCcD_Cyl mCyl1; + /* 0x9FC */ dCcD_Cyl* mCyl2; + /* 0xA00 */ dCcD_Cps* mCps1; + /* 0xA04 */ dCcD_Cps* mCps2; + /* 0xA08 */ dCcD_Sph* mSph; + /* 0xA0C */ mDoExt_invisibleModel mInvisible; + /* 0xA14 */ Z2Creature mSound; + /* 0xAA4 */ dPaPo_c mPaPo; + /* 0xADC */ s8 mReverb; /* 0xADD */ u8 mType; - /* 0xADE */ u8 field_0xade; - /* 0xADF */ u8 field_0xadf; - /* 0xAE0 */ u8 field_0xae0; - /* 0xAE1 */ u8 field_0xae1; - /* 0xAE2 */ u8 field_0xae2; - /* 0xAE3 */ u8 field_0xae3; - /* 0xAE4 */ u8 field_0xae4; + /* 0xADE */ u8 mParam0; + /* 0xADF */ u8 mCurrentAnim; + /* 0xAE0 */ u8 mMoveMode; + /* 0xAE1 */ u8 mWarpMode; + /* 0xAE2 */ u8 mParam1; + /* 0xAE3 */ u8 mDemoMode; + /* 0xAE4 */ u8 mParam2; /* 0xAE5 */ u8 mBossAtGndHit; - /* 0xAE6 */ u8 field_0xae6[0xAE8 - 0xAE6]; - /* 0xAE8 */ s16 field_0xae8; - /* 0xAEA */ s16 field_0xaea; + /* 0xAE6 */ u16 unused; + /* 0xAE8 */ s16 mDemoTimer; + /* 0xAEA */ s16 mTimer1; /* 0xAEC */ u32 mStateFlg0; - /* 0xAF0 */ u32 field_0xaf0; - /* 0xAF4 */ f32 field_0xaf4; - /* 0xAF8 */ f32 field_0xaf8; - /* 0xAFC */ f32 field_0xafc; - /* 0xB00 */ f32 field_0xb00; - /* 0xB04 */ f32 field_0xb04; - /* 0xB08 */ cXyz field_0xb08; - /* 0xB14 */ cXyz field_0xb14; + /* 0xAF0 */ u32 mShadowKey; + /* 0xAF4 */ cXyz mSomePos; + /* 0xB00 */ f32 mControlDistanceOffset; + /* 0xB04 */ f32 mTargetFrame; + /* 0xB08 */ cXyz mLinkPos; + /* 0xB14 */ cXyz mWarpTarget; /* 0xB20 */ cXyz mBallPos; }; diff --git a/include/d/d_bg_s_acch.h b/include/d/d_bg_s_acch.h index 0c357afd9d0..7ab36993482 100644 --- a/include/d/d_bg_s_acch.h +++ b/include/d/d_bg_s_acch.h @@ -257,7 +257,7 @@ public: SetStatue(); } - /* 806646F8 */ virtual ~dBgS_StatueAcch(); + /* 806646F8 */ virtual ~dBgS_StatueAcch() {} }; class dBgS_BombAcch : public dBgS_Acch { diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 98cf2f78139..f513354310b 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -1,17 +1,17 @@ #ifndef D_COM_D_COM_INF_GAME_H #define D_COM_D_COM_INF_GAME_H -#include "d/d_cc_s.h" #include "d/d_attention.h" -#include "d/d_resorce.h" -#include "d/d_vibration.h" +#include "d/d_cc_s.h" #include "d/d_event.h" #include "d/d_event_manager.h" #include "d/d_particle.h" +#include "d/d_resorce.h" #include "d/d_save.h" +#include "d/d_vibration.h" #include "f_op/f_op_camera_mng.h" -#include "m_Do/m_Do_controller_pad.h" #include "global.h" +#include "m_Do/m_Do_controller_pad.h" class JKRAramArchive; class dSmplMdl_draw_c; @@ -681,7 +681,9 @@ public: } f32 getCameraZoomForcus(int i_no) { return mCameraInfo[i_no].mCameraZoomForcus; } - void setCameraZoomForcus(int i_no, f32 i_focus) { mCameraInfo[i_no].mCameraZoomForcus = i_focus; } + void setCameraZoomForcus(int i_no, f32 i_focus) { + mCameraInfo[i_no].mCameraZoomForcus = i_focus; + } f32 getCameraZoomScale(int i_no) { return mCameraInfo[i_no].mCameraZoomScale; } void setCameraZoomScale(int i_no, f32 i_scale) { mCameraInfo[i_no].mCameraZoomScale = i_scale; } @@ -916,7 +918,8 @@ inline BOOL dComIfG_isDebugMode() { /** * Attempts to add a new Object Resource Archive (*.arc) into the Resource Control. * @param i_arcName Name of archive to be added - * @param i_mountDirection The direction to mount the archive. mDoDvd_MOUNT_DIRECTION_HEAD or mDoDvd_MOUNT_DIRECTION_TAIL + * @param i_mountDirection The direction to mount the archive. mDoDvd_MOUNT_DIRECTION_HEAD or + * mDoDvd_MOUNT_DIRECTION_TAIL * @param i_heap Pointer to heap to load resources into * @return TRUE if successful, FALSE otherwise */ @@ -1397,6 +1400,10 @@ inline void dComIfGs_onTbox(int i_no) { g_dComIfG_gameInfo.info.getMemory().getBit().onTbox(i_no); } +inline void dComIfGs_offTbox(int i_no) { + g_dComIfG_gameInfo.info.getMemory().getBit().offTbox(i_no); +} + inline BOOL dComIfGs_isSaveItem(int i_no) { return g_dComIfG_gameInfo.info.getMemory().getBit().isItem(i_no); } @@ -1641,7 +1648,8 @@ inline s8 dComIfGs_getHorseRestartRoomNo() { return g_dComIfG_gameInfo.info.getPlayer().getHorsePlace().getRoomNo(); } -inline void dComIfGs_setHorseRestart(const char* i_stageName, cXyz& i_pos, s16 i_angle, s8 i_roomNo) { +inline void dComIfGs_setHorseRestart(const char* i_stageName, cXyz& i_pos, s16 i_angle, + s8 i_roomNo) { g_dComIfG_gameInfo.info.getPlayer().getHorsePlace().set(i_stageName, i_pos, i_angle, i_roomNo); } @@ -2176,8 +2184,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().CatchRequest(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 fopAc_ac_c* dComIfGp_att_getLookTarget() { @@ -2873,11 +2881,13 @@ inline u32 dComIfGp_getCameraAttentionStatus(int i_no) { return g_dComIfG_gameInfo.play.getCameraAttentionStatus(i_no); } -inline void dComIfGp_saveCameraPosition(int i, cXyz* i_pos, cXyz* i_target, f32 i_fovy, s16 i_bank) { +inline void dComIfGp_saveCameraPosition(int i, cXyz* i_pos, cXyz* i_target, f32 i_fovy, + s16 i_bank) { g_dComIfG_gameInfo.play.saveCameraPosition(i, i_pos, i_target, i_fovy, i_bank); } -inline void dComIfGp_loadCameraPosition(int i, cXyz* o_pos, cXyz* o_target, f32* o_fovy, s16* o_bank) { +inline void dComIfGp_loadCameraPosition(int i, cXyz* o_pos, cXyz* o_target, f32* o_fovy, + s16* o_bank) { g_dComIfG_gameInfo.play.loadCameraPosition(i, o_pos, o_target, o_fovy, o_bank); } @@ -3049,8 +3059,9 @@ inline void dComIfGp_setMesgBgmOff() { g_dComIfG_gameInfo.play.setMesgBgm(0); } -inline bool dComIfGp_checkMesgBgm() { - return g_dComIfG_gameInfo.play.checkMesgBgm(); } +inline bool dComIfGp_checkMesgBgm() { + return g_dComIfG_gameInfo.play.checkMesgBgm(); +} inline void dComIfGp_setMessageCountNumber(u32 number) { g_dComIfG_gameInfo.play.setMessageCountNumber(number); @@ -3246,11 +3257,10 @@ inline void dComIfGp_drawSimpleModel() { g_dComIfG_gameInfo.play.drawSimpleModel(); } -inline void dComIfGp_entrySimpleModel(J3DModel *model,int roomNo) { +inline void dComIfGp_entrySimpleModel(J3DModel* model, int roomNo) { g_dComIfG_gameInfo.play.entrySimpleModel(model, roomNo); } - inline dStage_Multi_c* dComIfGp_getMulti() { return g_dComIfG_gameInfo.play.getStage().getMulti(); } @@ -3288,7 +3298,7 @@ inline void dComIfGp_deleteSimpleModel() { } inline void dComIfGp_setHitMark(u16 i_hitmark, fopAc_ac_c* param_1, const cXyz* param_2, - const csXyz* param_3, const cXyz* param_4, u32 i_atType) { + const csXyz* param_3, const cXyz* param_4, u32 i_atType) { g_dComIfG_gameInfo.play.getParticle()->setHitMark(i_hitmark, param_1, param_2, param_3, param_4, i_atType); } @@ -3321,7 +3331,7 @@ inline void dComIfGp_setMesgCameraInfoActor(fopAc_ac_c* param_1, fopAc_ac_c* par } inline void dComIfGp_setMesgCameraAttrInfo(int param_1) { - g_dComIfG_gameInfo.play.setMesgCamInfoBasicID(param_1); + g_dComIfG_gameInfo.play.setMesgCamInfoBasicID(param_1); } inline dComIfG_MesgCamInfo_c* dComIfGp_getMesgCameraInfo() { @@ -3482,7 +3492,6 @@ inline void dComIfGp_event_offHindFlag(u16 i_flag) { g_dComIfG_gameInfo.play.getEvent().offHindFlag(i_flag); } - inline void dComIfGp_evmng_cutEnd(int param_0) { dComIfGp_getPEvtManager()->cutEnd(param_0); } @@ -3977,13 +3986,13 @@ inline u32 dComIfGp_particle_setPolyColor(u32 param_0, u16 param_1, cBgS_PolyInf } inline JPABaseEmitter* dComIfGp_particle_setPolyColor(u16 param_1, cBgS_PolyInfo& param_2, - const cXyz* param_3, const dKy_tevstr_c* param_4, - const csXyz* param_5, const cXyz* param_6, int param_7, - dPa_levelEcallBack* param_8, s8 param_9, - const cXyz* param_10) { - return g_dComIfG_gameInfo.play.getParticle()->setPoly(param_1, param_2, param_3, - param_4, param_5, param_6, param_7, - param_8, param_9, param_10); + const cXyz* param_3, + const dKy_tevstr_c* param_4, + const csXyz* param_5, const cXyz* param_6, + int param_7, dPa_levelEcallBack* param_8, + s8 param_9, const cXyz* param_10) { + return g_dComIfG_gameInfo.play.getParticle()->setPoly( + param_1, param_2, param_3, param_4, param_5, param_6, param_7, param_8, param_9, param_10); } int dComIfGd_setSimpleShadow(cXyz* pos, f32 param_1, f32 param_2, cBgS_PolyInfo& param_3, s16 angle, @@ -4294,11 +4303,11 @@ inline void dComIfGd_imageDrawShadow(Mtx param_0) { g_dComIfG_gameInfo.drawlist.imageDrawShadow(param_0); } -inline void dComIfGd_set3DlineMat(mDoExt_3DlineMat_c *param_0) { +inline void dComIfGd_set3DlineMat(mDoExt_3DlineMat_c* param_0) { g_dComIfG_gameInfo.drawlist.set3DlineMat(param_0); } -inline void dComIfGd_set3DlineMatDark(mDoExt_3DlineMat_c *param_0) { +inline void dComIfGd_set3DlineMatDark(mDoExt_3DlineMat_c* param_0) { g_dComIfG_gameInfo.drawlist.set3DlineMatDark(param_0); } diff --git a/include/d/d_tresure.h b/include/d/d_tresure.h index 3e92b3c74aa..78e91535500 100644 --- a/include/d/d_tresure.h +++ b/include/d/d_tresure.h @@ -82,6 +82,10 @@ public: setPosition(i_tboxNo, 12, i_pos, param_2); } + static void setIconPositionOfCstatue(int i_tboxNo, const Vec* i_pos) { + setPosition(i_tboxNo, 15, i_pos, -1); + } + static void setCarryIron(int i_tboxNo, const Vec* i_pos) { setPosition(i_tboxNo, 11, i_pos, -1); } diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index e24955e55a8..42deede2c84 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -33,8 +33,7 @@ const fpc_ProcID procID = fopAcM_GetID(i_this); \ "Create -> " actor_name_str "(id=%d)\n" -#define fopAcM_RegisterDelete(i_this, actor_name_str) \ - "Delete -> " actor_name_str "\n" +#define fopAcM_RegisterDelete(i_this, actor_name_str) "Delete -> " actor_name_str "\n" #define fopAcM_RegisterCreate(actor_class, i_this, actor_name_str) \ static_cast(i_this); \ @@ -380,7 +379,8 @@ inline int fopAcM_GetCullSize(const fopAc_ac_c* i_actor) { } inline BOOL fopAcM_CULLSIZE_IS_BOX(int i_culltype) { - return (i_culltype >= 0 && i_culltype < fopAc_CULLBOX_CUSTOM_e) || i_culltype == fopAc_CULLBOX_CUSTOM_e; + return (i_culltype >= 0 && i_culltype < fopAc_CULLBOX_CUSTOM_e) || + i_culltype == fopAc_CULLBOX_CUSTOM_e; } inline const cXyz& fopAcM_getCullSizeSphereCenter(const fopAc_ac_c* i_actor) { @@ -602,8 +602,7 @@ fpc_ProcID fopAcM_createItemFromTable(cXyz const* i_pos, int i_tableNo, int i_it bool i_createDirect); fpc_ProcID fopAcM_createDemoItem(const cXyz* i_pos, int i_itemNo, int i_itemBitNo, - const csXyz* i_angle, int i_roomNo, const cXyz* scale, - u8 param_7); + const csXyz* i_angle, int i_roomNo, const cXyz* scale, u8 param_7); fpc_ProcID fopAcM_createItemForBoss(const cXyz* i_pos, int i_itemNo, int i_roomNo, const csXyz* i_angle, const cXyz* i_scale, f32 i_speedF, @@ -767,21 +766,23 @@ inline void fopAcM_effSmokeSet2(u32* param_0, u32* param_1, cXyz const* param_2, fopAcM_effSmokeSet1(param_0, param_1, param_2, param_3, param_4, param_5, 0); } -inline void fopAcM_setWarningMessage_f(const fopAc_ac_c* i_actor, const char* i_filename, int i_line, const char* i_msg, ...) { +inline void fopAcM_setWarningMessage_f(const fopAc_ac_c* i_actor, const char* i_filename, + int i_line, const char* i_msg, ...) { #ifdef DEBUG /* va_list args; va_start(args, i_msg); char buf[64]; - snprintf(buf, sizeof(buf), "<%s> %s", dStage_getName(fopAcM_GetProfName(i_actor), i_actor->subtype), i_msg); - setWarningMessage_f_va(JUTAssertion::getSDevice(), i_filename, i_line, buf, args); + snprintf(buf, sizeof(buf), "<%s> %s", dStage_getName(fopAcM_GetProfName(i_actor), + i_actor->subtype), i_msg); setWarningMessage_f_va(JUTAssertion::getSDevice(), i_filename, + i_line, buf, args); va_end(args); */ #endif } #ifdef DEBUG -#define fopAcM_setWarningMessage(i_actor, i_filename, i_line, i_msg) \ +#define fopAcM_setWarningMessage(i_actor, i_filename, i_line, i_msg) \ fopAcM_setWarningMessage_f(i_actor, i_filename, i_line, i_msg) #else #define fopAcM_setWarningMessage(...) @@ -798,6 +799,7 @@ public: static cXyz* getCrossP() { return mLineCheck.GetCrossP(); } static bool lineCheck(const cXyz*, const cXyz*, const fopAc_ac_c*); static bool getTriPla(cM3dGPla* o_tri) { return dComIfG_Bgsp().GetTriPla(mLineCheck, o_tri); } + static s32 getWallCode() { return dComIfG_Bgsp().GetWallCode(mLineCheck); } static bool checkWallHit() { cM3dGPla poly; getTriPla(&poly); diff --git a/src/d/actor/d_a_alink_copyrod.inc b/src/d/actor/d_a_alink_copyrod.inc index f1415e827e0..920685ea6c9 100644 --- a/src/d/actor/d_a_alink_copyrod.inc +++ b/src/d/actor/d_a_alink_copyrod.inc @@ -74,7 +74,8 @@ BOOL daAlink_c::checkForestOldCentury() { /* 800E145C-800E1530 0DBD9C 00D4+00 1/0 0/0 0/0 .text checkCopyRodTopUse__9daAlink_cFv */ BOOL daAlink_c::checkCopyRodTopUse() { // Event flag 0x2580: Dominion Rod power restored - return (dComIfGs_isEventBit(0x2580) && !(mProcID == PROC_UNEQUIP && mProcVar3.field_0x300e != 0)) || + return (dComIfGs_isEventBit(0x2580) && + !(mProcID == PROC_UNEQUIP && mProcVar3.field_0x300e != 0)) || dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == 0x15 || checkForestOldCentury(); } @@ -252,7 +253,8 @@ void daAlink_c::checkUpperItemActionCopyRodFly() { int daAlink_c::checkNextActionCopyRod() { if ((checkBoomerangCatchAnime() && mUpperFrameCtrl[2].getFrame() <= daAlinkHIO_boom_c0::m.mCatchAnm.mCancelFrame) || - checkNoResetFlg1(FLG1_UNK_10000)) { + checkNoResetFlg1(FLG1_UNK_10000)) + { return 0; } @@ -382,7 +384,10 @@ int daAlink_c::procCopyRodSwingInit() { commonProcInit(PROC_COPY_ROD_SWING); daCstatue_c* statue = (daCstatue_c*)getCopyRodControllActor(); - if (statue != NULL && ((fopAcM_GetName(statue) == PROC_CSTATUE && !statue->checkNotSmallType()) || fopAcM_GetName(statue) != PROC_CSTATUE)) { + if (statue != NULL && + ((fopAcM_GetName(statue) == PROC_CSTATUE && statue->checkNotSmallType()) || + fopAcM_GetName(statue) != PROC_CSTATUE)) + { setSingleAnimeParam(ANM_COPYROD_SWING_LARGE, &daAlinkHIO_copyRod_c0::m.mBigSwingAnm); field_0x3478 = 13.0f; field_0x347c = 21.0f; diff --git a/src/d/actor/d_a_cstatue.cpp b/src/d/actor/d_a_cstatue.cpp index 13223c57ded..73ef0cdb583 100644 --- a/src/d/actor/d_a_cstatue.cpp +++ b/src/d/actor/d_a_cstatue.cpp @@ -1,1640 +1,1262 @@ /** * @file d_a_cstatue.cpp - * -*/ + * + */ #include "d/actor/d_a_cstatue.h" -#include "dol2asm.h" +#include +#include "d/actor/d_a_alink.h" +#include "d/actor/d_a_crod.h" +#include "d/actor/d_a_player.h" +#include "d/d_cc_d.h" +#include "d/d_tresure.h" -// -// Forward References: -// +UNK_REL_BSS; +UNK_REL_DATA; -extern "C" void atHitCallback__11daCstatue_cFP10fopAc_ac_c(); -extern "C" static void -daCstatue_atHitCallback__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf(); -extern "C" void createHeap__11daCstatue_cFv(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__4cXyzFv(); -extern "C" void __dt__8dCcD_SphFv(); -extern "C" void __ct__8dCcD_SphFv(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" static void daCstatue_createHeap__FP10fopAc_ac_c(); -extern "C" void create__11daCstatue_cFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" void __dt__15dBgS_StatueAcchFv(); -extern "C" void __dt__12dBgS_AcchCirFv(); -extern "C" void __dt__12J3DFrameCtrlFv(); -extern "C" static void daCstatue_Create__FP10fopAc_ac_c(); -extern "C" void __dt__11daCstatue_cFv(); -extern "C" static void daCstatue_Delete__FP11daCstatue_c(); -extern "C" void setRoomInfo__11daCstatue_cFv(); -extern "C" void setMatrix__11daCstatue_cFv(); -extern "C" void posMove__11daCstatue_cFv(); -extern "C" void __dt__8cM3dGPlaFv(); -extern "C" void setCollision__11daCstatue_cFv(); -extern "C" void checkHammerReverse__11daCstatue_cFv(); -extern "C" void setDemo__11daCstatue_cFv(); -extern "C" void setAnime__11daCstatue_cFv(); -extern "C" void initBrk__11daCstatue_cFUs(); -extern "C" void initStopBrkBtk__11daCstatue_cFv(); -extern "C" void initStartBrkBtk__11daCstatue_cFv(); -extern "C" void execute__11daCstatue_cFv(); -extern "C" static void daCstatue_Execute__FP11daCstatue_c(); -extern "C" void draw__11daCstatue_cFv(); -extern "C" static void daCstatue_Draw__FP11daCstatue_c(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" static void func_80667678(); -extern "C" static void func_80667680(); -extern "C" u8 const m_bckIdxTable__11daCstatue_c[70 + 2 /* padding */]; +static u8 const unused[12] = {}; -// -// External References: -// +/* 806676A4-806676AC 00000C 0008+00 0/1 0/0 0/0 .rodata l_arcName */ +static char const l_arcName[8] = "Cstatue"; -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void transM__14mDoMtx_stack_cFfff(); -extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void play__14mDoExt_baseAnmFv(); -extern "C" void init__13mDoExt_btkAnmFP16J3DMaterialTableP19J3DAnmTextureSRTKeyiifss(); -extern "C" void entry__13mDoExt_btkAnmFP16J3DMaterialTablef(); -extern "C" void init__13mDoExt_brkAnmFP16J3DMaterialTableP15J3DAnmTevRegKeyiifss(); -extern "C" void entry__13mDoExt_brkAnmFP16J3DMaterialTablef(); -extern "C" void mDoExt_modelEntryDL__FP8J3DModel(); -extern "C" void create__21mDoExt_invisibleModelFP8J3DModelUc(); -extern "C" void entryDL__21mDoExt_invisibleModelFP4cXyz(); -extern "C" void setMorf__13mDoExt_morf_cFf(); -extern "C" void -__ct__16mDoExt_McaMorfSOFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiP10Z2CreatureUlUl(); -extern "C" void setAnm__16mDoExt_McaMorfSOFP15J3DAnmTransformiffff(); -extern "C" void play__16mDoExt_McaMorfSOFUlSc(); -extern "C" void modelCalc__16mDoExt_McaMorfSOFv(); -extern "C" void stopZelAnime__16mDoExt_McaMorfSOFv(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void __dt__10fopAc_ac_cFv(); -extern "C" void fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_SetMin__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_SetMax__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_orderPotentialEvent__FP10fopAc_ac_cUsUsUs(); -extern "C" void fopAcM_getPolygonAngle__FPC8cM3dGPlas(); -extern "C" void lineCheck__11fopAcM_lc_cFPC4cXyzPC4cXyzPC10fopAc_ac_c(); -extern "C" void gndCheck__11fopAcM_gc_cFPC4cXyz(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfGp_getReverb__Fi(); -extern "C" void -dComIfGd_setShadow__FUlScP8J3DModelP4cXyzffffR13cBgS_PolyInfoP12dKy_tevstr_csfP9_GXTexObj(); -extern "C" void dComIfGs_wolfeye_effect_check__Fv(); -extern "C" void onTbox__12dSv_memBit_cFi(); -extern "C" void offTbox__12dSv_memBit_cFi(); -extern "C" void isTbox__12dSv_memBit_cCFi(); -extern "C" void onEventBit__11dSv_event_cFUs(); -extern "C" void onSwitch__10dSv_info_cFii(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void reset__14dEvt_control_cFv(); -extern "C" void -set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void init__7dPaPo_cFP9dBgS_Acchff(); -extern "C" void setEffectCenter__7dPaPo_cFPC12dKy_tevstr_cPC4cXyzUlUlPC4cXyzPC5csXyzPC4cXyzScff(); -extern "C" void StartShock__12dVibration_cFii4cXyz(); -extern "C" void GetTriPla__4cBgSCFRC13cBgS_PolyInfoP8cM3dGPla(); -extern "C" void ChkMoveBG_NoDABg__4dBgSFRC13cBgS_PolyInfo(); -extern "C" void GetPolyColor__4dBgSFRC13cBgS_PolyInfo(); -extern "C" void GetWallCode__4dBgSFRC13cBgS_PolyInfo(); -extern "C" void GetRoomId__4dBgSFRC13cBgS_PolyInfo(); -extern "C" void __ct__12dBgS_AcchCirFv(); -extern "C" void SetWall__12dBgS_AcchCirFff(); -extern "C" void __dt__9dBgS_AcchFv(); -extern "C" void __ct__9dBgS_AcchFv(); -extern "C" void Set__9dBgS_AcchFP10fopAc_ac_ciP12dBgS_AcchCir(); -extern "C" void CrrPos__9dBgS_AcchFR4dBgS(); -extern "C" void SetStatue__16dBgS_PolyPassChkFv(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Move__10dCcD_GSttsFv(); -extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void __dt__12dCcD_GObjInfFv(); -extern "C" void ResetAtHit__12dCcD_GObjInfFv(); -extern "C" void ChkTgHit__12dCcD_GObjInfFv(); -extern "C" void ResetTgHit__12dCcD_GObjInfFv(); -extern "C" void GetTgHitGObj__12dCcD_GObjInfFv(); -extern "C" void GetTgHitObjSe__12dCcD_GObjInfFv(); -extern "C" void getHitSeID__12dCcD_GObjInfFUci(); -extern "C" void ResetCoHit__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_CpsFRC11dCcD_SrcCps(); -extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl(); -extern "C" void StartCAt__8dCcD_CylFR4cXyz(); -extern "C" void MoveCAt__8dCcD_CylFR4cXyz(); -extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph(); -extern "C" void MoveCAt__8dCcD_SphFR4cXyz(); -extern "C" void setPosition__7dTres_cFiUcPC3Veci(); -extern "C" void getCopyRodBallDisMax__9daAlink_cCFv(); -extern "C" void getCopyRodControllActor__9daAlink_cFv(); -extern "C" void clearData__16daPy_actorKeep_cFv(); -extern "C" void Start__9dCamera_cFv(); -extern "C" void Stop__9dCamera_cFv(); -extern "C" void SetTrimSize__9dCamera_cFl(); -extern "C" void Set__9dCamera_cF4cXyz4cXyz(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void dKy_pol_sound_get__FPC13cBgS_PolyInfo(); -extern "C" void ClrCcMove__9cCcD_SttsFv(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void __pl__4cXyzCFRC3Vec(); -extern "C" void __ml__4cXyzCFf(); -extern "C" void atan2sX_Z__4cXyzCFv(); -extern "C" void __ct__5csXyzFsss(); -extern "C" void cM_atan2s__Fff(); -extern "C" void __dt__13cBgS_PolyInfoFv(); -extern "C" void cBgW_CheckBWall__Ff(); -extern "C" void __dt__8cM3dGCirFv(); -extern "C" void __ct__8cM3dGCpsFv(); -extern "C" void SetC__8cM3dGCylFRC4cXyz(); -extern "C" void SetH__8cM3dGCylFf(); -extern "C" void SetR__8cM3dGCylFf(); -extern "C" void SetStartEnd__8cM3dGLinFRC4cXyzRC4cXyz(); -extern "C" void SetR__8cM3dGSphFf(); -extern "C" void cLib_addCalcPosXZ__FP4cXyzRC4cXyzfff(); -extern "C" void cLib_chaseF__FPfff(); -extern "C" void __ct__10Z2CreatureFv(); -extern "C" void __dt__10Z2CreatureFv(); -extern "C" void init__10Z2CreatureFP3VecP3VecUcUc(); -extern "C" void* __nw__FUl(); -extern "C" void* __nwa__FUl(); -extern "C" void __dl__FPv(); -extern "C" void init__12J3DFrameCtrlFs(); -extern "C" void checkPass__12J3DFrameCtrlFf(); -extern "C" void __destroy_arr(); -extern "C" void __construct_array(); -extern "C" void __construct_new_array(); -extern "C" void _savegpr_21(); -extern "C" void _savegpr_23(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_21(); -extern "C" void _restgpr_23(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" extern void* __vt__8dCcD_Sph[36]; -extern "C" extern void* __vt__8dCcD_Cyl[36]; -extern "C" extern void* __vt__8dCcD_Cps[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__12cCcD_SphAttr[25]; -extern "C" extern void* __vt__12cCcD_CylAttr[25]; -extern "C" extern void* __vt__12cCcD_CpsAttr[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" u8 mLineCheck__11fopAcM_lc_c[112]; -extern "C" u8 mGndCheck__11fopAcM_gc_c[84]; -extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" f32 mGroundY__11fopAcM_gc_c; -extern "C" u8 Zero__5csXyz[4]; -extern "C" void __register_global_object(); +/* 806676AC-806676B4 000014 0007+01 0/1 0/0 0/0 .rodata l_arcNameBS */ +static char const l_arcNameBS[7] = "CstaBS"; -// -// Declarations: -// +enum CStatueAnim { + CStatueAnimBFall = 7, // Copy Statue - B - Fall + CStatueAnimBJump, // Copy Statue - B - Jump + CStatueAnimBWalk, // Copy Statue - B - Walk + CStatueAnimFall, // Copy Statue - Fall + CStatueAnimStart, // Copy Statue - Start + CStatueAnimStart_demo, // Copy Statue - Start - Demo + CStatueAnimStop, // Copy Statue - Stop + CStatueAnimSwing, // Copy Statue - Swing + CStatueAnimSwingre, // Copy Statue - Swing Re + CStatueAnimWalk, // Copy Statue - Walk +}; -/* 806636AC-806636C8 0000EC 001C+00 1/1 0/0 0/0 .text atHitCallback__11daCstatue_cFP10fopAc_ac_c - */ -void daCstatue_c::atHitCallback(fopAc_ac_c* param_0) { - // NONMATCHING +enum CStatueBossAnim { + CStatueBossAnimAttackL = 6, // Copy Statue - Boss - Attack - Left + CStatueBossAnimAttackR, // Copy Statue - Boss - Attack - Right + CStatueBossAnimReturnWaitHitL, // Copy Statue - Boss - Return - Wait - Hit - Left + CStatueBossAnimReturnWaitHitR, // Copy Statue - Boss - Return - Wait - Hit - Right + CStatueBossAnimReturnWaitL, // Copy Statue - Boss - Return - Wait - Left + CStatueBossAnimReturnWaitR, // Copy Statue - Boss - Return - Wait - Right +}; + +// this enum may need to be split for boss/non boss types +enum CStatueAnimIndex { + CStatueAnimIndex_0, + CStatueAnimIndex_1, + CStatueAnimIndex_2, + CStatueAnimIndex_3, + CStatueAnimIndex_4, + CStatueAnimIndex_5, + CStatueAnimIndex_6, + CStatueAnimIndex_N, +}; + +u16 const daCstatue_c::m_bckIdxTable[daCstatueType_N][CStatueAnimIndex_N] = { + // daCstatueType_NORMAL + {CStatueAnimSwing, CStatueAnimWalk, CStatueAnimSwing, CStatueAnimFall, CStatueAnimStop, + CStatueAnimStart, CStatueAnimSwingre}, + // daCstatueType_SMALL + {CStatueAnimBJump, CStatueAnimBWalk, CStatueAnimBJump, CStatueAnimBFall, CStatueAnimBWalk, + CStatueAnimBWalk, CStatueAnimBJump}, + // daCstatueType_NORMAL_2 + {CStatueAnimSwing, CStatueAnimWalk, CStatueAnimSwing, CStatueAnimFall, CStatueAnimStop, + CStatueAnimStart, CStatueAnimSwingre}, + // daCstatueType_BOSS_RIGHT + {CStatueBossAnimReturnWaitR, CStatueBossAnimReturnWaitHitR, CStatueBossAnimAttackR, + CStatueBossAnimReturnWaitR, CStatueBossAnimReturnWaitR, CStatueBossAnimReturnWaitR, + CStatueBossAnimReturnWaitR}, + // daCstatueType_BOSS_LEFT + {CStatueBossAnimReturnWaitL, CStatueBossAnimReturnWaitHitL, CStatueBossAnimAttackL, + CStatueBossAnimReturnWaitL, CStatueBossAnimReturnWaitL, CStatueBossAnimReturnWaitL, + CStatueBossAnimReturnWaitL}, +}; + +struct CStatueTblData { + u16 modelIndex; + u16 transformIndex; + u16 brkIndex; + u16 textureIndex; + u32 morfIndex; +}; + +static dCcD_SrcCps l_atCpsSrc = { + { + {0x0, {{AT_TYPE_CSTATUE_SWING, 0x4, 0x1f}, {0x0, 0x0}, 0x0}}, // mObj + {dCcD_SE_STATUE_HAMMER, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}, 88.0f}, // mCps + } // mCpsAttr +}; + +static dCcD_SrcCyl l_cylSrc = { + { + {0x0, {{AT_TYPE_THROW_OBJ, 0x2, 0x12}, {0xd97afddf, 0x11}, 0x79}}, // mObj + {dCcD_SE_STONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x5, 0x0, 0x0, 0x3}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {0.0f, 0.0f, 0.0f}, // mCenter + 88.0f, // mRadius + 392.0f // mHeight + } // mCyl +}; + +static dCcD_SrcSph l_sphSrc = { + { + {0x0, {{AT_TYPE_CSTATUE_BOSS_SWING, 0x4, 0x1e}, {0xd8fafddf, 0x11}, 0x79}}, // mObj + {dCcD_SE_STONE, 0x0, 0x1, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x5, 0x0, 0x0, 0x3}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 100.0f} // mSph + } // mSphAttr +}; + +/* 806636AC-806636C8 0000EC 001C+00 1/1 0/0 0/0 .text atHitCallback__11daCstatue_cFP10fopAc_ac_c */ +void daCstatue_c::atHitCallback(fopAc_ac_c* actor) { + if (fopAcM_GetName(actor) == PROC_B_GM) { + onStateFlg0(daCstatue_FLG0_100); + } } /* 806636C8-806636EC 000108 0024+00 1/1 0/0 0/0 .text * daCstatue_atHitCallback__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */ -static void daCstatue_atHitCallback(fopAc_ac_c* param_0, dCcD_GObjInf* param_1, - fopAc_ac_c* param_2, dCcD_GObjInf* param_3) { - // NONMATCHING +static void daCstatue_atHitCallback(fopAc_ac_c* statue, dCcD_GObjInf* _objInfA, fopAc_ac_c* actor, + dCcD_GObjInf* _objInfB) { + static_cast(statue)->atHitCallback(actor); } -/* ############################################################################################## */ -/* 80667698-806676A4 000000 000C+00 10/10 0/0 0/0 .rodata @3768 */ -SECTION_RODATA static u8 const lit_3768[12] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80667698, &lit_3768); - -/* 806676A4-806676AC 00000C 0008+00 0/1 0/0 0/0 .rodata l_arcName */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_arcName[8] = { - 0x43, 0x73, 0x74, 0x61, 0x74, 0x75, 0x65, 0x00, -}; -COMPILER_STRIP_GATE(0x806676A4, &l_arcName); -#pragma pop - -/* 806676AC-806676B4 000014 0007+01 0/1 0/0 0/0 .rodata l_arcNameBS */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_arcNameBS[7 + 1 /* padding */] = { - 0x43, - 0x73, - 0x74, - 0x61, - 0x42, - 0x53, - 0x00, - /* padding */ - 0x00, -}; -COMPILER_STRIP_GATE(0x806676AC, &l_arcNameBS); -#pragma pop - -/* 806676B4-806676FC 00001C 0046+02 0/2 0/0 0/0 .rodata m_bckIdxTable__11daCstatue_c */ -#pragma push -#pragma force_active on -SECTION_RODATA u8 const daCstatue_c::m_bckIdxTable[70 + 2 /* padding */] = { - 0x00, - 0x0E, - 0x00, - 0x10, - 0x00, - 0x0E, - 0x00, - 0x0A, - 0x00, - 0x0D, - 0x00, - 0x0B, - 0x00, - 0x0F, - 0x00, - 0x08, - 0x00, - 0x09, - 0x00, - 0x08, - 0x00, - 0x07, - 0x00, - 0x09, - 0x00, - 0x09, - 0x00, - 0x08, - 0x00, - 0x0E, - 0x00, - 0x10, - 0x00, - 0x0E, - 0x00, - 0x0A, - 0x00, - 0x0D, - 0x00, - 0x0B, - 0x00, - 0x0F, - 0x00, - 0x0B, - 0x00, - 0x09, - 0x00, - 0x07, - 0x00, - 0x0B, - 0x00, - 0x0B, - 0x00, - 0x0B, - 0x00, - 0x0B, - 0x00, - 0x0A, - 0x00, - 0x08, - 0x00, - 0x06, - 0x00, - 0x0A, - 0x00, - 0x0A, - 0x00, - 0x0A, - 0x00, - 0x0A, - /* padding */ - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x806676B4, &daCstatue_c::m_bckIdxTable); -#pragma pop - -/* 806676FC-80667738 000064 003C+00 0/1 0/0 0/0 .rodata dataTbl$4169 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const dataTbl[60] = { - 0x00, 0x13, 0x00, 0x0D, 0x00, 0x1F, 0x00, 0x23, 0x11, 0x00, 0x02, 0x84, 0x00, 0x14, 0x00, - 0x08, 0x00, 0x1C, 0x00, 0x00, 0x11, 0x00, 0x00, 0x84, 0x00, 0x18, 0x00, 0x0D, 0x00, 0x1D, - 0x00, 0x22, 0x11, 0x00, 0x02, 0x84, 0x00, 0x0E, 0x00, 0x0B, 0x00, 0x12, 0x00, 0x15, 0x11, - 0x00, 0x02, 0x84, 0x00, 0x0E, 0x00, 0x0A, 0x00, 0x12, 0x00, 0x15, 0x11, 0x00, 0x02, 0x84, -}; -COMPILER_STRIP_GATE(0x806676FC, &dataTbl); -#pragma pop - -/* 80667738-8066773C 0000A0 0004+00 1/11 0/0 0/0 .rodata @4286 */ -SECTION_RODATA static u8 const lit_4286[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80667738, &lit_4286); - -/* 8066773C-80667740 0000A4 0004+00 1/10 0/0 0/0 .rodata @4287 */ -SECTION_RODATA static f32 const lit_4287 = 1.0f; -COMPILER_STRIP_GATE(0x8066773C, &lit_4287); - -/* 806679B0-806679BC 000000 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */ -SECTION_DATA static u8 cNullVec__6Z2Calc[12] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; - -/* 806679BC-806679D0 00000C 0004+10 0/0 0/0 0/0 .data @1787 */ -#pragma push -#pragma force_active on -SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = { - 0x02000201, - /* padding */ - 0x40080000, - 0x00000000, - 0x3FE00000, - 0x00000000, -}; -#pragma pop - -/* 806679D0-80667A1C 000020 004C+00 0/1 0/0 0/0 .data l_atCpsSrc */ -#pragma push -#pragma force_active on -static dCcD_SrcCps l_atCpsSrc = { - { - {0x0, {{AT_TYPE_CSTATUE_SWING, 0x4, 0x1f}, {0x0, 0x0}, 0x0}}, // mObj - {dCcD_SE_STATUE_HAMMER, 0x0, 0x0, 0x0, 0x0}, // mGObjAt - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf - { - {{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}, 88.0f}, // mCps - } // mCpsAttr -}; -#pragma pop - -/* 80667A1C-80667A60 00006C 0044+00 0/1 0/0 0/0 .data l_cylSrc */ -#pragma push -#pragma force_active on -static dCcD_SrcCyl l_cylSrc = { - { - {0x0, {{AT_TYPE_THROW_OBJ, 0x2, 0x12}, {0xd97afddf, 0x11}, 0x79}}, // mObj - {dCcD_SE_STONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt - {dCcD_SE_NONE, 0x5, 0x0, 0x0, 0x3}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf - { - {0.0f, 0.0f, 0.0f}, // mCenter - 88.0f, // mRadius - 392.0f // mHeight - } // mCyl -}; -#pragma pop - -/* 80667A60-80667AA0 0000B0 0040+00 0/1 0/0 0/0 .data l_sphSrc */ -#pragma push -#pragma force_active on -static dCcD_SrcSph l_sphSrc = { - { - {0x0, {{AT_TYPE_CSTATUE_BOSS_SWING, 0x4, 0x1e}, {0xd8fafddf, 0x11}, 0x79}}, // mObj - {dCcD_SE_STONE, 0x0, 0x1, 0x0, 0x0}, // mGObjAt - {dCcD_SE_NONE, 0x5, 0x0, 0x0, 0x3}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf - { - {{0.0f, 0.0f, 0.0f}, 100.0f} // mSph - } // mSphAttr -}; -#pragma pop - -/* 80667AA0-80667AC0 -00001 0020+00 1/0 0/0 0/0 .data l_daCstatue_Method */ -static actor_method_class l_daCstatue_Method = { - (process_method_func)daCstatue_Create__FP10fopAc_ac_c, - (process_method_func)daCstatue_Delete__FP11daCstatue_c, - (process_method_func)daCstatue_Execute__FP11daCstatue_c, - 0, - (process_method_func)daCstatue_Draw__FP11daCstatue_c, -}; - -/* 80667AC0-80667AF0 -00001 0030+00 0/0 0/0 1/0 .data g_profile_CSTATUE */ -extern actor_process_profile_definition g_profile_CSTATUE = { - fpcLy_CURRENT_e, // mLayerID - 7, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_CSTATUE, // mProcName - &g_fpcLf_Method.base, // sub_method - 0x00000B2C, // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 271, // mPriority - &l_daCstatue_Method, // sub_method - 0x00060520, // mStatus - fopAc_ENV_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType -}; - -/* 80667AF0-80667AFC 000140 000C+00 4/4 0/0 0/0 .data __vt__8cM3dGPla */ -SECTION_DATA extern void* __vt__8cM3dGPla[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGPlaFv, -}; - -/* 80667AFC-80667B08 00014C 000C+00 1/1 0/0 0/0 .data __vt__12dBgS_AcchCir */ -SECTION_DATA extern void* __vt__12dBgS_AcchCir[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_AcchCirFv, -}; - -/* 80667B08-80667B14 000158 000C+00 3/3 0/0 0/0 .data __vt__10cCcD_GStts */ -SECTION_DATA extern void* __vt__10cCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10cCcD_GSttsFv, -}; - -/* 80667B14-80667B20 000164 000C+00 2/2 0/0 0/0 .data __vt__10dCcD_GStts */ -SECTION_DATA extern void* __vt__10dCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10dCcD_GSttsFv, -}; - -/* 80667B20-80667B44 000170 0024+00 3/3 0/0 0/0 .data __vt__15dBgS_StatueAcch */ -SECTION_DATA extern void* __vt__15dBgS_StatueAcch[9] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__15dBgS_StatueAcchFv, - (void*)NULL, - (void*)NULL, - (void*)func_80667680, - (void*)NULL, - (void*)NULL, - (void*)func_80667678, -}; - -/* 80667B44-80667B50 000194 000C+00 3/3 0/0 0/0 .data __vt__12J3DFrameCtrl */ -SECTION_DATA extern void* __vt__12J3DFrameCtrl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12J3DFrameCtrlFv, -}; - -/* 80667B50-80667B5C 0001A0 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGSph */ -SECTION_DATA extern void* __vt__8cM3dGSph[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGSphFv, -}; - -/* 80667B5C-80667B68 0001AC 000C+00 4/4 0/0 0/0 .data __vt__8cM3dGCyl */ -SECTION_DATA extern void* __vt__8cM3dGCyl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGCylFv, -}; - -/* 80667B68-80667B74 0001B8 000C+00 6/6 0/0 0/0 .data __vt__8cM3dGAab */ -SECTION_DATA extern void* __vt__8cM3dGAab[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGAabFv, -}; - /* 806636EC-80663AA4 00012C 03B8+00 1/1 0/0 0/0 .text createHeap__11daCstatue_cFv */ -void daCstatue_c::createHeap() { - // NONMATCHING -} +int daCstatue_c::createHeap() { + static struct CStatueTblData const dataTbl[daCstatueType_N] = { + // daCstatueType_NORMAL + {19, 13, 31, 35, 0x11000284}, + // daCstatueType_SMALL + {20, 8, 28, 0, 0x11000084}, + // daCstatueType_NORMAL_2 + {24, 13, 29, 34, 0x11000284}, + // daCstatueType_BOSS_RIGHT + {14, 11, 18, 21, 0x11000284}, + // daCstatueType_BOSS_LEFT + {14, 10, 18, 21, 0x11000284}, + }; -/* 80663AA4-80663AEC 0004E4 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ -// cM3dGCyl::~cM3dGCyl() { -extern "C" void __dt__8cM3dGCylFv() { - // NONMATCHING -} + const struct CStatueTblData* data = &dataTbl[mType]; -/* 80663AEC-80663B34 00052C 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} + J3DAnmTransform* animation = + static_cast(dComIfG_getObjectRes(mResName, data->transformIndex)); -/* 80663B34-80663B70 000574 003C+00 1/1 0/0 0/0 .text __dt__4cXyzFv */ -// cXyz::~cXyz() { -extern "C" void __dt__4cXyzFv() { - // NONMATCHING -} + int resource_index; + if (checkStateFlg0(daCstatue_FLG0_400)) { + resource_index = 21; + } else { + resource_index = data->modelIndex; + } -/* 80663B70-80663C3C 0005B0 00CC+00 1/1 0/0 0/0 .text __dt__8dCcD_SphFv */ -// dCcD_Sph::~dCcD_Sph() { -extern "C" void __dt__8dCcD_SphFv() { - // NONMATCHING -} + mpMorf = new mDoExt_McaMorfSO( + static_cast(dComIfG_getObjectRes(mResName, (u16)resource_index)), NULL, NULL, + animation, 0, 0.0f, animation->getFrameMax(), -1, &mSound, + mType == daCstatueType_Normal2 ? J3DMdlFlag_None : J3DMdlFlag_Unk80000, data->morfIndex); -/* 80663C3C-80663CC0 00067C 0084+00 1/1 0/0 0/0 .text __ct__8dCcD_SphFv */ -// dCcD_Sph::dCcD_Sph() { -extern "C" void __ct__8dCcD_SphFv() { - // NONMATCHING -} + if (mpMorf == NULL || mpMorf->mpModel == NULL) { + return cPhs_INIT_e; + } -/* 80663CC0-80663D08 000700 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING + mModel = mpMorf->mpModel; + if (!initBrk(data->brkIndex)) { + return cPhs_INIT_e; + } + if (data->textureIndex) { + J3DAnmTextureSRTKey* key = + (J3DAnmTextureSRTKey*)(dComIfG_getObjectRes(mResName, data->textureIndex)); + if (!mAnim1.init(mModel->getModelData(), key, 1, -1, 1.0f, 0, -1)) { + return cPhs_INIT_e; + } + } + + if (checkBossType()) { + mSph = new dCcD_Sph[9](); + if (!mSph) { + return cPhs_INIT_e; + } + } else if (mType == daCstatueType_Normal) { + mCps1 = new dCcD_Cps(); + if (!mCps1) { + return cPhs_INIT_e; + } + mCps2 = new dCcD_Cps(); + if (!mCps2) { + return cPhs_INIT_e; + } + mCyl2 = new dCcD_Cyl(); + if (!mCyl2) { + return cPhs_INIT_e; + } + } else if (mType == daCstatueType_Normal2 && !mInvisible.create(mpMorf->getModel(), 1)) { + return cPhs_INIT_e; + } + return cPhs_LOADING_e; } /* 80663D08-80663D28 000748 0020+00 1/1 0/0 0/0 .text daCstatue_createHeap__FP10fopAc_ac_c */ -static void daCstatue_createHeap(fopAc_ac_c* param_0) { - // NONMATCHING +static int daCstatue_createHeap(fopAc_ac_c* actor) { + return static_cast(actor)->createHeap(); } -/* ############################################################################################## */ -/* 80667740-80667764 0000A8 0024+00 0/1 0/0 0/0 .rodata bossSphR$4389 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const bossSphR[36] = { - 0x43, 0xE1, 0x00, 0x00, 0x43, 0x48, 0x00, 0x00, 0x43, 0x7A, 0x00, 0x00, - 0x43, 0x5C, 0x00, 0x00, 0x43, 0x8C, 0x00, 0x00, 0x43, 0x48, 0x00, 0x00, - 0x43, 0x7A, 0x00, 0x00, 0x43, 0x5C, 0x00, 0x00, 0x43, 0x8C, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80667740, &bossSphR); -#pragma pop - -/* 80667764-80667778 0000CC 0014+00 0/1 0/0 0/0 .rodata heapSize$4390 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const heapSize[20] = { - 0x00, 0x00, 0x11, 0x10, 0x00, 0x00, 0x08, 0xA0, 0x00, 0x00, - 0x12, 0x50, 0x00, 0x00, 0x18, 0x60, 0x00, 0x00, 0x18, 0x60, -}; -COMPILER_STRIP_GATE(0x80667764, &heapSize); -#pragma pop - -/* 80667778-8066777C 0000E0 0004+00 0/1 0/0 0/0 .rodata @4735 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4735 = 8.0f / 5.0f; -COMPILER_STRIP_GATE(0x80667778, &lit_4735); -#pragma pop - -/* 8066777C-80667780 0000E4 0004+00 0/1 0/0 0/0 .rodata @4736 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4736 = 88.0f; -COMPILER_STRIP_GATE(0x8066777C, &lit_4736); -#pragma pop - -/* 80667780-80667784 0000E8 0004+00 0/2 0/0 0/0 .rodata @4737 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4737 = 384.0f; -COMPILER_STRIP_GATE(0x80667780, &lit_4737); -#pragma pop - -/* 80667784-80667788 0000EC 0004+00 0/2 0/0 0/0 .rodata @4738 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4738 = 200.0f; -COMPILER_STRIP_GATE(0x80667784, &lit_4738); -#pragma pop - -/* 80667788-8066778C 0000F0 0004+00 0/1 0/0 0/0 .rodata @4739 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_4739 = 0x41F0147B; -COMPILER_STRIP_GATE(0x80667788, &lit_4739); -#pragma pop - -/* 8066778C-80667790 0000F4 0004+00 0/1 0/0 0/0 .rodata @4740 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4740 = 208.0f; -COMPILER_STRIP_GATE(0x8066778C, &lit_4740); -#pragma pop - -/* 80667790-80667794 0000F8 0004+00 0/1 0/0 0/0 .rodata @4741 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4741 = 288.0f; -COMPILER_STRIP_GATE(0x80667790, &lit_4741); -#pragma pop - -/* 80667794-80667798 0000FC 0004+00 0/1 0/0 0/0 .rodata @4742 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4742 = 392.0f; -COMPILER_STRIP_GATE(0x80667794, &lit_4742); -#pragma pop - -/* 80667798-8066779C 000100 0004+00 0/1 0/0 0/0 .rodata @4743 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_4743 = 0x43D4CCCD; -COMPILER_STRIP_GATE(0x80667798, &lit_4743); -#pragma pop - -/* 8066779C-806677A0 000104 0004+00 0/1 0/0 0/0 .rodata @4744 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4744 = 528.0f; -COMPILER_STRIP_GATE(0x8066779C, &lit_4744); -#pragma pop - -/* 806677A0-806677A4 000108 0004+00 0/1 0/0 0/0 .rodata @4745 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_4745 = 0xC3D4CCCD; -COMPILER_STRIP_GATE(0x806677A0, &lit_4745); -#pragma pop - -/* 806677A4-806677A8 00010C 0004+00 0/1 0/0 0/0 .rodata @4746 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4746 = 1440.0f; -COMPILER_STRIP_GATE(0x806677A4, &lit_4746); -#pragma pop - -/* 806677A8-806677AC 000110 0004+00 0/1 0/0 0/0 .rodata @4747 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4747 = -8.0f; -COMPILER_STRIP_GATE(0x806677A8, &lit_4747); -#pragma pop - -/* 806677AC-806677B0 000114 0004+00 0/1 0/0 0/0 .rodata @4748 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4748 = -100.0f; -COMPILER_STRIP_GATE(0x806677AC, &lit_4748); -#pragma pop - -/* 806677B0-806677B4 000118 0004+00 0/1 0/0 0/0 .rodata @4749 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4749 = 3.0f / 5.0f; -COMPILER_STRIP_GATE(0x806677B0, &lit_4749); -#pragma pop - -/* 806677B4-806677B8 00011C 0004+00 0/1 0/0 0/0 .rodata @4750 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4750 = 35.0f; -COMPILER_STRIP_GATE(0x806677B4, &lit_4750); -#pragma pop - -/* 806677B8-806677BC 000120 0004+00 0/3 0/0 0/0 .rodata @4751 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4751 = 100.0f; -COMPILER_STRIP_GATE(0x806677B8, &lit_4751); -#pragma pop - -/* 806677BC-806677C0 000124 0004+00 0/1 0/0 0/0 .rodata @4752 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4752 = 145.0f; -COMPILER_STRIP_GATE(0x806677BC, &lit_4752); -#pragma pop - -/* 806677C0-806677C4 000128 0004+00 0/1 0/0 0/0 .rodata @4753 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4753 = 250.0f; -COMPILER_STRIP_GATE(0x806677C0, &lit_4753); -#pragma pop - -/* 806677C4-806677C8 00012C 0004+00 0/1 0/0 0/0 .rodata @4754 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4754 = -145.0f; -COMPILER_STRIP_GATE(0x806677C4, &lit_4754); -#pragma pop - -/* 806677C8-806677CC 000130 0004+00 0/1 0/0 0/0 .rodata @4755 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4755 = 300.0f; -COMPILER_STRIP_GATE(0x806677C8, &lit_4755); -#pragma pop - -/* 806677CC-806677D0 000134 0004+00 0/1 0/0 0/0 .rodata @4756 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4756 = -5.0f; -COMPILER_STRIP_GATE(0x806677CC, &lit_4756); -#pragma pop - -/* 806677D0-806677D4 000138 0004+00 0/1 0/0 0/0 .rodata @4757 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4757 = 4825.0f; -COMPILER_STRIP_GATE(0x806677D0, &lit_4757); -#pragma pop - -/* 806677D4-806677D8 00013C 0004+00 0/2 0/0 0/0 .rodata @4758 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4758 = 21.0f; -COMPILER_STRIP_GATE(0x806677D4, &lit_4758); -#pragma pop - -/* 806677D8-806677DC 000140 0004+00 0/1 0/0 0/0 .rodata @4759 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4759 = 600.0f; -COMPILER_STRIP_GATE(0x806677D8, &lit_4759); -#pragma pop - -/* 806677DC-806677E0 000144 0004+00 0/1 0/0 0/0 .rodata @4760 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4760 = 5500.0f; -COMPILER_STRIP_GATE(0x806677DC, &lit_4760); -#pragma pop - -/* 806677E0-806677E4 000148 0004+00 0/1 0/0 0/0 .rodata @4761 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4761 = 650000.0f; -COMPILER_STRIP_GATE(0x806677E0, &lit_4761); -#pragma pop - -/* 806677E4-806677E8 00014C 0004+00 0/4 0/0 0/0 .rodata @4762 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4762 = 30.0f; -COMPILER_STRIP_GATE(0x806677E4, &lit_4762); -#pragma pop - -/* 806677E8-806677F0 000150 0008+00 0/4 0/0 0/0 .rodata @4764 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4764[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x806677E8, &lit_4764); -#pragma pop - /* 80663D28-8066469C 000768 0974+00 1/1 0/0 0/0 .text create__11daCstatue_cFv */ -void daCstatue_c::create() { - // NONMATCHING -} +int daCstatue_c::create() { + static f32 const bossSphR[9] = {450.0f, 200.0f, 250.0f, 220.0f, 280.0f, + 200.0f, 250.0f, 220.0f, 280.0f}; -/* 8066469C-806646F8 0010DC 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING -} + static int const heapSize[daCstatueType_N] = {4368, 2208, 4688, 6240, 6240}; -/* 806646F8-80664768 001138 0070+00 3/2 0/0 0/0 .text __dt__15dBgS_StatueAcchFv */ -// dBgS_StatueAcch::~dBgS_StatueAcch() { -extern "C" void __dt__15dBgS_StatueAcchFv() { - // NONMATCHING -} + fopAcM_SetupActor(this, daCstatue_c); + mType = (fopAcM_GetParam(this) >> 8) & 0xf; + if (mType == daCstatueType_Normal2) { + mType = daCstatueType_Small; + onStateFlg0(daCstatue_FLG0_8); + } else if (mType == daCstatueType_BossRight) { + mType = daCstatueType_Normal; + onStateFlg0(daCstatue_FLG0_400); + } else if (mType > daCstatueType_Normal2) { + // if the type is a boss type, try to map it to a non-boss type + mType -= daCstatueType_Normal2; + // or, if it is completely out-of-bounds make a normal type + if (mType >= daCstatueType_N) { + mType = daCstatueType_Normal; + } + } + if (checkBossType()) { + mResName = l_arcNameBS; + } else { + mResName = l_arcName; + } + int result = dComIfG_resLoad(&mPhaseReq, mResName); + if (result == cPhs_COMPLEATE_e) { + mParam0 = fopAcM_GetParam(this) & 0xff; + mParam1 = (fopAcM_GetParam(this) >> 12) & 0xff; + mParam2 = (fopAcM_GetParam(this) >> 20) & 0x3f; -/* 80664768-806647D8 0011A8 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_AcchCirFv */ -// dBgS_AcchCir::~dBgS_AcchCir() { -extern "C" void __dt__12dBgS_AcchCirFv() { - // NONMATCHING -} + if (mType == daCstatueType_Normal && !checkStateFlg0(daCstatue_FLG0_400)) { + if (mParam0 != 0xff && !fopAcM_isSwitch(this, mParam0)) { + return cPhs_ERROR_e; + } + int minSwitch; + if (mParam0 == 0xff) { + minSwitch = 0; + } else { + minSwitch = mParam0 + 1; + } + for (int iSwitch = 6; iSwitch >= minSwitch; iSwitch--) { + if (fopAcM_isSwitch(this, iSwitch)) { + return cPhs_ERROR_e; + } + } + } else if (mType == daCstatueType_Normal2 && mParam0 != 0xff && + fopAcM_isSwitch(this, this->mParam0)) + { + return cPhs_ERROR_e; + } -/* 806647D8-80664820 001218 0048+00 1/0 0/0 0/0 .text __dt__12J3DFrameCtrlFv */ -// J3DFrameCtrl::~J3DFrameCtrl() { -extern "C" void __dt__12J3DFrameCtrlFv() { - // NONMATCHING + if (!fopAcM_entrySolidHeap(this, daCstatue_createHeap, heapSize[mType])) { + return cPhs_ERROR_e; + } + + mpMorf->setMorf(1.0f); + if (mType == daCstatueType_Normal) { + mCurrentAnim = CStatueAnimIndex_4; + } else { + mCurrentAnim = CStatueAnimIndex_0; + } + if (mType == daCstatueType_Normal || mType == daCstatueType_Normal2) { + scale.set(1.6f, 1.6f, 1.6f); + } + mModel->setBaseScale(scale); + mpMorf->play(0, 0); + mCyl1.Set(l_cylSrc); + mCyl1.SetStts(&mStts); + mCyl1.StartCAt(current.pos); + if (checkStateFlg0(daCstatue_FLG0_400)) { + mCyl1.SetTgType(mCyl1.GetTgType() & ~0x01000000); + } + if (mType == daCstatueType_Normal) { + mCps1->Set(l_atCpsSrc); + mCps1->SetStts(&mStts); + mCps2->Set(l_atCpsSrc); + mCps2->SetStts(&mStts); + mCps2->SetR(88.0f); + mCyl2->Set(l_cylSrc); + mCyl2->SetStts(&mStts); + mCyl2->SetAtType(0x2000000); + mCyl2->SetAtAtp(1); + mCyl2->OffTgSetBit(); + mCyl2->OffCoSetBit(); + mCyl2->SetAtSe(21); + mCyl2->SetR(384.0f); + mCyl2->SetH(200.0f); + if (mParam2 != 0x3f) { + onStateFlg0(daCstatue_FLG0_1000); + dComIfGs_onTbox(mParam2); + dComIfGs_offTbox(mParam2 - 1); + } + } else if (mType == daCstatueType_Normal2) { + int anyTbox = false; + for (int iBox = 21; iBox <= 31; iBox += 2) { + if (dComIfGs_isTbox(iBox)) { + dComIfGs_onTbox(iBox + -1); + dComIfGs_offTbox(iBox); + break; + } + } + for (int iBox = 21; iBox <= 33; iBox++) { + if (dComIfGs_isTbox(iBox)) { + anyTbox = true; + break; + } + } + if (!anyTbox) { + dComIfGs_onTbox(20); + } + } + attention_info.distances[4] = 8; + fopAcM_SetMtx(this, mModel->getBaseTRMtx()); + int acchTblSize; + if (mType == daCstatueType_Normal || mType == daCstatueType_Normal2) { + mAcchCir[0].SetWall(30.01f, 88.0f); + mAcchCir[1].SetWall(208.0f, 88.0f); + mAcchCir[2].SetWall(288.0f, 88.0f); + mAcchCir[3].SetWall(392.0f, 88.0f); + if (checkStateFlg0(daCstatue_FLG0_400)) { + mStts.Init(0xff, 0, this); + } else { + mStts.Init((u8)-2, 0, this); + } + fopAcM_SetMax(this, 425.6f, 528.0f, 425.6f); + fopAcM_SetMin(this, -425.6f, 0.0f, -425.6f); + mSomePos.x = 1440.0f; + gravity = -8.0f; + maxFallSpeed = -100.0f; + acchTblSize = 4; + mControlDistanceOffset = JMAFastSqrt(mCyl1.GetR() * mCyl1.GetR() + + mCyl1.GetH() * mCyl1.GetH() * 0.6f * 0.6f); + mTargetFrame = 35.0f; + } else if (mType == daCstatueType_Small) { + mAcchCir[0].SetWall(30.01f, 35.0f); + mCyl1.SetR(35.0f); + mCyl1.SetH(100.0f); + mStts.Init((u8)-76, 0, this); + fopAcM_SetMax(this, 145.0f, 250.0f, 145.0f); + fopAcM_SetMin(this, -145.0f, 0.0f, -145.0f); + mSomePos.x = 300.0f; + gravity = -5.0f; + maxFallSpeed = -100.0f; + fopAcM_OnCarryType(this, fopAcM_CARRY_HEAVY); + acchTblSize = 1; + mControlDistanceOffset = JMAFastSqrt(4825.0f); + mTargetFrame = 21.0f; + } else { + fopAcM_OffStatus(this, 0x100); + mCyl1.SetR(300.0f); + mCyl1.SetH(600.0f); + mAcchCir[0].SetWall(30.01f, 300.0f); + mStts.Init((u8)-2, 0, this); + mSomePos.x = 5500.0f; + gravity = -8.0f; + maxFallSpeed = -100.0f; + acchTblSize = 1; + dCcD_Sph* obj = mSph; + for (int iSph = 0; iSph < 9; iSph++, obj++) { + obj->Set(l_sphSrc); + obj->SetStts(&mStts); + obj->SetR(bossSphR[iSph]); + obj->SetAtHitCallback(daCstatue_atHitCallback); + } + mSph->SetTgType(0xd97afddf); + mControlDistanceOffset = JMAFastSqrt(650000.0f); + attention_info.distances[0] = 92; + cLib_onBit(attention_info.flags, 1); + mTargetFrame = 35.0f; + } + mControlDistanceOffset += 100.0f; + mSomePos.y = current.pos.y; + mStatueAcch.Set(this, acchTblSize, mAcchCir); + model = mModel; + initStopBrkBtk(); + mAnim2.setFrame(mAnim2.getEndFrame()); + mStatueAcch.CrrPos(dComIfG_Bgsp()); + setMatrix(); + setRoomInfo(); + mLinkPos = daPy_getLinkPlayerActorClass()->current.pos; + + mPaPo.init(&mStatueAcch, 30.0f, mCyl1.GetH()); + mSound.init(¤t.pos, &eyePos, 4, 1); + // todo: debug rom + // ::mDoHIO_entry_c::entryHIO((mDoHIO_entry_c*)&d_a_cstatue::l_HIO, &d_a_cstatue::@129695); + } + return result; } /* 80664820-80664840 001260 0020+00 1/0 0/0 0/0 .text daCstatue_Create__FP10fopAc_ac_c */ -static void daCstatue_Create(fopAc_ac_c* param_0) { - // NONMATCHING +static int daCstatue_Create(void* actor) { + return static_cast(actor)->create(); } /* 80664840-80664A78 001280 0238+00 1/1 0/0 0/0 .text __dt__11daCstatue_cFv */ daCstatue_c::~daCstatue_c() { - // NONMATCHING + mSound.deleteObject(); + if (mpMorf) { + mpMorf->stopZelAnime(); + } + if (checkStateFlg0(daCstatue_FLG0_1000)) { + dComIfGs_offTbox(mParam2); + dComIfGs_onTbox(mParam2 - 1); + } + dComIfG_resDelete(&mPhaseReq, mResName); } /* 80664A78-80664AA0 0014B8 0028+00 1/0 0/0 0/0 .text daCstatue_Delete__FP11daCstatue_c */ -static void daCstatue_Delete(daCstatue_c* param_0) { - // NONMATCHING +static int daCstatue_Delete(void* actor) { + static_cast(actor)->~daCstatue_c(); + return cPhs_LOADING_e; } -/* ############################################################################################## */ -/* 806677F0-806677F4 000158 0004+00 1/3 0/0 0/0 .rodata @4907 */ -SECTION_RODATA static f32 const lit_4907 = -1000000000.0f; -COMPILER_STRIP_GATE(0x806677F0, &lit_4907); - /* 80664AA0-80664B38 0014E0 0098+00 2/2 0/0 0/0 .text setRoomInfo__11daCstatue_cFv */ void daCstatue_c::setRoomInfo() { - // NONMATCHING + int roomId; + if (mStatueAcch.GetGroundH() != -1000000000.0f) { + roomId = dComIfG_Bgsp().GetRoomId(mStatueAcch.m_gnd); + tevStr.YukaCol = dComIfG_Bgsp().GetPolyColor(mStatueAcch.m_gnd); + } else { + roomId = dComIfGp_roomControl_getStayNo(); + } + tevStr.room_no = roomId; + mReverb = dComIfGp_getReverb(roomId); + mStts.SetRoomId(roomId); + fopAcM_SetRoomNo(this, roomId); } -/* ############################################################################################## */ -/* 806677F4-80667800 00015C 000C+00 0/1 0/0 0/0 .rodata normalLocalBallPos$4911 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const normalLocalBallPos[12] = { - 0x42, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x806677F4, &normalLocalBallPos); -#pragma pop - -/* 80667800-8066780C 000168 000C+00 0/1 0/0 0/0 .rodata smallLocalBallPos$4912 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const smallLocalBallPos[12] = { - 0x00, 0x00, 0x00, 0x00, 0x42, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80667800, &smallLocalBallPos); -#pragma pop - -/* 8066780C-80667818 000174 000C+00 0/1 0/0 0/0 .rodata bossLocalBallPos$4913 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const bossLocalBallPos[12] = { - 0x43, 0xD2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x8066780C, &bossLocalBallPos); -#pragma pop - -/* 80667818-8066781C 000180 0004+00 0/1 0/0 0/0 .rodata @4965 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4965 = 140.0f; -COMPILER_STRIP_GATE(0x80667818, &lit_4965); -#pragma pop - /* 80664B38-80664C9C 001578 0164+00 2/2 0/0 0/0 .text setMatrix__11daCstatue_cFv */ void daCstatue_c::setMatrix() { - // NONMATCHING + static Vec const normalLocalBallPos = {70.0f, 0.0f, 0.0f}; + static Vec const smallLocalBallPos = {0.0f, 35.0f, 0.0f}; + static Vec const bossLocalBallPos = {420.0f, 0.0f, 0.0f}; + + // todo: there is an additional block here in the debug rom + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mDoMtx_stack_c::transM(0.0f, mSomePos.z, 0.0f); + mModel->setBaseTRMtx(mDoMtx_stack_c::get()); + mpMorf->modelCalc(); + if (mType == daCstatueType_Normal || mType == daCstatueType_Normal2) { + attention_info.position.set(current.pos.x, current.pos.y + scale.y * 140.0f, current.pos.z); + mDoMtx_multVec(mModel->getAnmMtx(1), &normalLocalBallPos, &mBallPos); + } else if (mType == daCstatueType_Small) { + attention_info.position.set(current.pos.x, current.pos.y + mCyl1.GetH(), current.pos.z); + mDoMtx_multVec(mModel->getAnmMtx(0), &smallLocalBallPos, &mBallPos); + } else { + attention_info.position.set(current.pos.x, current.pos.y + bossLocalBallPos.x, + current.pos.z); + mDoMtx_multVec(mModel->getAnmMtx(0), &bossLocalBallPos, &mBallPos); + } + eyePos = attention_info.position; } -/* ############################################################################################## */ -/* 8066781C-80667820 000184 0004+00 0/1 0/0 0/0 .rodata @5281 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5281 = 18.0f; -COMPILER_STRIP_GATE(0x8066781C, &lit_5281); -#pragma pop - -/* 80667820-80667824 000188 0004+00 1/4 0/0 0/0 .rodata @5282 */ -SECTION_RODATA static f32 const lit_5282 = 0.5f; -COMPILER_STRIP_GATE(0x80667820, &lit_5282); - -/* 80667824-80667828 00018C 0004+00 0/1 0/0 0/0 .rodata @5283 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5283 = 1.0f / 5.0f; -COMPILER_STRIP_GATE(0x80667824, &lit_5283); -#pragma pop - -/* 80667828-8066782C 000190 0004+00 0/3 0/0 0/0 .rodata @5284 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5284 = -1.0f; -COMPILER_STRIP_GATE(0x80667828, &lit_5284); -#pragma pop - -/* 8066782C-80667830 000194 0004+00 0/1 0/0 0/0 .rodata @5285 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5285 = 6.0f; -COMPILER_STRIP_GATE(0x8066782C, &lit_5285); -#pragma pop - -/* 80667830-80667834 000198 0004+00 0/1 0/0 0/0 .rodata @5286 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5286 = 0.25f; -COMPILER_STRIP_GATE(0x80667830, &lit_5286); -#pragma pop - -/* 80667834-80667838 00019C 0004+00 0/2 0/0 0/0 .rodata @5287 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5287 = 7.0f; -COMPILER_STRIP_GATE(0x80667834, &lit_5287); -#pragma pop - -/* 80667838-8066783C 0001A0 0004+00 0/3 0/0 0/0 .rodata @5288 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5288 = 3.0f; -COMPILER_STRIP_GATE(0x80667838, &lit_5288); -#pragma pop - -/* 8066783C-80667840 0001A4 0004+00 0/1 0/0 0/0 .rodata @5289 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5289 = 12.0f; -COMPILER_STRIP_GATE(0x8066783C, &lit_5289); -#pragma pop - -/* 80667840-80667848 0001A8 0004+04 0/1 0/0 0/0 .rodata @5290 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5290[1 + 1 /* padding */] = { - 2.0f / 5.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x80667840, &lit_5290); -#pragma pop - -/* 80667848-80667850 0001B0 0008+00 0/2 0/0 0/0 .rodata @5291 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_5291[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80667848, &lit_5291); -#pragma pop - -/* 80667850-80667858 0001B8 0008+00 0/2 0/0 0/0 .rodata @5292 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_5292[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80667850, &lit_5292); -#pragma pop - -/* 80667858-80667860 0001C0 0008+00 0/2 0/0 0/0 .rodata @5293 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_5293[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80667858, &lit_5293); -#pragma pop - -/* 80667860-80667864 0001C8 0004+00 0/2 0/0 0/0 .rodata @5294 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5294 = -30.0f; -COMPILER_STRIP_GATE(0x80667860, &lit_5294); -#pragma pop - -/* 80667864-80667868 0001CC 0004+00 0/2 0/0 0/0 .rodata @5295 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5295 = 10.0f; -COMPILER_STRIP_GATE(0x80667864, &lit_5295); -#pragma pop - -/* 80667868-8066786C 0001D0 0004+00 0/1 0/0 0/0 .rodata @5296 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5296 = 0.75f; -COMPILER_STRIP_GATE(0x80667868, &lit_5296); -#pragma pop - /* 80664C9C-80665514 0016DC 0878+00 1/1 0/0 0/0 .text posMove__11daCstatue_cFv */ void daCstatue_c::posMove() { - // NONMATCHING + if (checkStateFlg0(daCstatue_FLG0_8)) { + mStatueAcch.CrrPos(dComIfG_Bgsp()); + if (mStatueAcch.GetGroundH() == -1000000000.0f) { + return; + } + if (dComIfG_Bgsp().ChkMoveBG_NoDABg(mStatueAcch.m_gnd)) { + offStateFlg0(daCstatue_FLG0_8); + current.pos.y = mStatueAcch.GetGroundH(); + mSomePos.y = current.pos.y; + } else { + return; + } + } + int groundHit = mStatueAcch.ChkGroundHit(); + mStatueAcch.OffLineCheck(); + if (!fopAcM_checkCarryNow(this)) { + speed.y += gravity; + if (speed.y < maxFallSpeed) { + speed.y = maxFallSpeed; + } + current.pos.y += speed.y; + } + daAlink_c* link = daAlink_getAlinkActorClass(); + if (!checkStateFlg0(daCstatue_FLG0_Demo) && !mWarpMode && + link->getCopyRodControllActor() == this) + { + if (!checkStateFlg0(daCstatue_FLG0_800)) { + shape_angle.y = link->shape_angle.y; + } + if (mCurrentAnim == CStatueAnimIndex_6) { + speedF = 0.0f; + } else if (mStatueAcch.ChkGroundHit() && mCurrentAnim != CStatueAnimIndex_3) { + current.pos.x = current.pos.x + speed.x; + current.pos.z = current.pos.z + speed.z; + speedF = JMAFastSqrt(speed.x * speed.x + speed.z * speed.z); + if (mCurrentAnim == CStatueAnimIndex_1) { + f32 playSpeed = mpMorf->getPlaySpeed(); + f32 targetSpeed; + if (speedF >= 1.0f) { + current.angle.y = speed.atan2sX_Z(); + targetSpeed = speedF / 18.0f; + if (targetSpeed > 1.0f) { + targetSpeed = 1.0f; + } + + if (mType != daCstatueType_Small) { + targetSpeed = 0.5f + targetSpeed; + } else { + targetSpeed = 0.5f + targetSpeed; + } + } else { + current.angle.y = shape_angle.y; + targetSpeed = 0.0f; + } + cLib_chaseF(&playSpeed, targetSpeed, 0.2f); + mpMorf->setPlaySpeed(playSpeed); + } + } + } else { + if (!fopAcM_checkCarryNow(this) && mMoveMode != daCstatue_MoveMode_0) { + if (mStatueAcch.ChkGroundHit()) { + if (mMoveMode != daCstatue_MoveMode_3) { + mpMorf->setAnm(static_cast(dComIfG_getObjectRes(mResName, 7)), + -1, 0.0f, 1.0f, 0.0f, -1.0f); + mCurrentAnim = CStatueAnimIndex_3; + if (speedF > 1.0f) { + speedF = 6.0f; + onStateFlg0(daCstatue_FLG0_200); + } else { + speedF = 0.0f; + } + } else { + speedF = 0.0f; + } + mMoveMode = daCstatue_MoveMode_0; + } else { + if (mStatueAcch.ChkWallHit()) { + speedF *= 0.25f; + current.angle.y = + 2 * mAcchCir[0].GetWallAngleY() - (current.angle.y - (s16)0x8000); + } + current.pos.x += speedF * cM_ssin(current.angle.y); + current.pos.z += speedF * cM_scos(current.angle.y); + if (mMoveMode == daCstatue_MoveMode_1) { + mMoveMode = daCstatue_MoveMode_2; + mStatueAcch.OnLineCheck(); + } + } + } + if (mCurrentAnim == CStatueAnimIndex_0) { + mpMorf->setPlaySpeed(0.0f); + if (mMoveMode == daCstatue_MoveMode_0) { + speedF = 0.0f; + } + } else if (mCurrentAnim == CStatueAnimIndex_3 && checkStateFlg0(daCstatue_FLG0_200)) { + if (mpMorf->checkFrame(7.0f)) { + speedF = 3.0f; + } else if (mpMorf->getFrame() > 12.0f) { + speedF = 0.0f; + } else if (mpMorf->getFrame() > 7.0f) { + cLib_chaseF(&speedF, 0.0f, 0.4f); + } + current.pos.x = current.pos.x + speedF * cM_ssin(current.angle.y); + current.pos.z = current.pos.z + speedF * cM_scos(current.angle.y); + } + } + mLinkPos = link->current.pos; + if (!fopAcM_checkCarryNow(this)) { + current.pos += *mStts.GetCCMoveP(); + mStts.ClrCcMove(); + mStatueAcch.CrrPos(dComIfG_Bgsp()); + if (groundHit && !mStatueAcch.ChkGroundHit() && mStatueAcch.GetGroundH() != -1000000000.0f) + { + f32 groundDistance = mStatueAcch.GetGroundH() - current.pos.y; + cM3dGPla plane; + dComIfG_Bgsp().GetTriPla(mStatueAcch.m_gnd, &plane); + s16 polyAngle = fopAcM_getPolygonAngle(&plane, current.angle.y); + f32 angle = current.pos.absXZ(old.pos) * cM_ssin(polyAngle); + if (angle < 0.0f) { + angle = 0.0f; + } + if (groundDistance < 0.0f && groundDistance >= -30.0f - angle) { + current.pos.y = mStatueAcch.GetGroundH(); + mStatueAcch.SetGroundHit(); + speed.y = 0.0f; + } else { + mSomePos.y = old.pos.y; + } + } + if (!groundHit && mStatueAcch.ChkGroundHit() && mSomePos.y - current.pos.y >= 100.0f) { + J3DAnmTransform* animation = static_cast( + dComIfG_getObjectRes(mResName, m_bckIdxTable[mType][CStatueAnimIndex_3])); + mpMorf->setAnm(animation, -1, 0.0f, 1.0f, 0.0f, -1.0f); + mCurrentAnim = CStatueAnimIndex_3; + offStateFlg0(daCstatue_FLG0_200); + } + offStateFlg0(daCstatue_FLG0_80); + mSomePos.z = 0.0f; + } else { + speed.y = 0.0f; + mMoveMode = daCstatue_MoveMode_1; + cXyz pos(current.pos); + mStatueAcch.CrrPos(dComIfG_Bgsp()); + (link->setGrabCollisionOffset)(current.pos.x - pos.x, current.pos.z - pos.z, 0); + current.pos = pos; + mSomePos.y = current.pos.y; + if (link->getGrabUpStart()) { + onStateFlg0(daCstatue_FLG0_80); + } else if (link->getGrabPutStart()) { + offStateFlg0(daCstatue_FLG0_80); + } + f32 targetZ; + if (checkStateFlg0(daCstatue_FLG0_80)) { + targetZ = 10.0f; + } else { + targetZ = 0.0f; + } + cLib_chaseF(&mSomePos.z, targetZ, 0.75f); + } } -/* 80665514-8066555C 001F54 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGPlaFv */ -// cM3dGPla::~cM3dGPla() { -extern "C" void __dt__8cM3dGPlaFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8066786C-80667878 0001D4 000C+00 0/1 0/0 0/0 .rodata localTop$5304 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const localTop[12] = { - 0x00, 0x00, 0x00, 0x00, 0x42, 0xB4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x8066786C, &localTop); -#pragma pop - -/* 80667878-80667884 0001E0 000C+00 0/1 0/0 0/0 .rodata localRoot$5305 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const localRoot[12] = { - 0x00, 0x00, 0x00, 0x00, 0xC1, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80667878, &localRoot); -#pragma pop - -/* 80667884-80667890 0001EC 000C+00 0/1 0/0 0/0 .rodata hammerSide0$5306 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const hammerSide0[12] = { - 0xC2, 0x20, 0x00, 0x00, 0x42, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80667884, &hammerSide0); -#pragma pop - -/* 80667890-8066789C 0001F8 000C+00 0/1 0/0 0/0 .rodata hammerSide1$5307 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const hammerSide1[12] = { - 0x42, 0x20, 0x00, 0x00, 0x42, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80667890, &hammerSide1); -#pragma pop - -/* 8066789C-806678A4 000204 0008+00 0/1 0/0 0/0 .rodata effName$5309 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const effName[8] = { - 0x09, 0xD0, 0x09, 0xD1, 0x09, 0xD2, 0x09, 0xD5, -}; -COMPILER_STRIP_GATE(0x8066789C, &effName); -#pragma pop - -/* 806678A4-806678B8 00020C 0012+02 0/1 0/0 0/0 .rodata bossJntIdx$5353 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const bossJntIdx[18 + 2 /* padding */] = { - 0x00, - 0x02, - 0x00, - 0x06, - 0x00, - 0x07, - 0x00, - 0x07, - 0x00, - 0x08, - 0x00, - 0x03, - 0x00, - 0x04, - 0x00, - 0x04, - 0x00, - 0x05, - /* padding */ - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x806678A4, &bossJntIdx); -#pragma pop - -/* 806678B8-80667924 000220 006C+00 0/1 0/0 0/0 .rodata bossLocalOffset$5354 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const bossLocalOffset[108] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x48, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x43, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x43, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xA0, 0x00, 0x00, 0x43, 0x48, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x43, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x43, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xA0, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x806678B8, &bossLocalOffset); -#pragma pop - -/* 80667924-80667928 00028C 0004+00 0/1 0/0 0/0 .rodata @5620 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5620 = 36.0f; -COMPILER_STRIP_GATE(0x80667924, &lit_5620); -#pragma pop - -/* 80667928-8066792C 000290 0004+00 0/1 0/0 0/0 .rodata @5621 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5621 = 13.0f; -COMPILER_STRIP_GATE(0x80667928, &lit_5621); -#pragma pop - -/* 8066792C-80667930 000294 0004+00 0/1 0/0 0/0 .rodata @5622 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5622 = 17.0f; -COMPILER_STRIP_GATE(0x8066792C, &lit_5622); -#pragma pop - -/* 80667930-80667934 000298 0004+00 0/1 0/0 0/0 .rodata @5623 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5623 = 160000.0f; -COMPILER_STRIP_GATE(0x80667930, &lit_5623); -#pragma pop - -/* 80667934-80667938 00029C 0004+00 0/1 0/0 0/0 .rodata @5624 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5624 = 640000.0f; -COMPILER_STRIP_GATE(0x80667934, &lit_5624); -#pragma pop - -/* 80667938-8066793C 0002A0 0004+00 0/1 0/0 0/0 .rodata @5625 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5625 = 240.0f; -COMPILER_STRIP_GATE(0x80667938, &lit_5625); -#pragma pop - -/* 8066793C-80667940 0002A4 0004+00 0/1 0/0 0/0 .rodata @5626 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5626 = 2.0f; -COMPILER_STRIP_GATE(0x8066793C, &lit_5626); -#pragma pop - -/* 80667B80-80667B84 000008 0001+03 1/1 0/0 0/0 .bss @1109 */ -static u8 lit_1109[1 + 3 /* padding */]; - -/* 80667B84-80667B88 00000C 0001+03 0/0 0/0 0/0 .bss @1107 */ -#pragma push -#pragma force_active on -static u8 lit_1107[1 + 3 /* padding */]; -#pragma pop - -/* 80667B88-80667B8C 000010 0001+03 0/0 0/0 0/0 .bss @1105 */ -#pragma push -#pragma force_active on -static u8 lit_1105[1 + 3 /* padding */]; -#pragma pop - -/* 80667B8C-80667B90 000014 0001+03 0/0 0/0 0/0 .bss @1104 */ -#pragma push -#pragma force_active on -static u8 lit_1104[1 + 3 /* padding */]; -#pragma pop - -/* 80667B90-80667B94 000018 0001+03 0/0 0/0 0/0 .bss @1099 */ -#pragma push -#pragma force_active on -static u8 lit_1099[1 + 3 /* padding */]; -#pragma pop - -/* 80667B94-80667B98 00001C 0001+03 0/0 0/0 0/0 .bss @1097 */ -#pragma push -#pragma force_active on -static u8 lit_1097[1 + 3 /* padding */]; -#pragma pop - -/* 80667B98-80667B9C 000020 0001+03 0/0 0/0 0/0 .bss @1095 */ -#pragma push -#pragma force_active on -static u8 lit_1095[1 + 3 /* padding */]; -#pragma pop - -/* 80667B9C-80667BA0 000024 0001+03 0/0 0/0 0/0 .bss @1094 */ -#pragma push -#pragma force_active on -static u8 lit_1094[1 + 3 /* padding */]; -#pragma pop - -/* 80667BA0-80667BA4 000028 0001+03 0/0 0/0 0/0 .bss @1057 */ -#pragma push -#pragma force_active on -static u8 lit_1057[1 + 3 /* padding */]; -#pragma pop - -/* 80667BA4-80667BA8 00002C 0001+03 0/0 0/0 0/0 .bss @1055 */ -#pragma push -#pragma force_active on -static u8 lit_1055[1 + 3 /* padding */]; -#pragma pop - -/* 80667BA8-80667BAC 000030 0001+03 0/0 0/0 0/0 .bss @1053 */ -#pragma push -#pragma force_active on -static u8 lit_1053[1 + 3 /* padding */]; -#pragma pop - -/* 80667BAC-80667BB0 000034 0001+03 0/0 0/0 0/0 .bss @1052 */ -#pragma push -#pragma force_active on -static u8 lit_1052[1 + 3 /* padding */]; -#pragma pop - -/* 80667BB0-80667BB4 000038 0001+03 0/0 0/0 0/0 .bss @1014 */ -#pragma push -#pragma force_active on -static u8 lit_1014[1 + 3 /* padding */]; -#pragma pop - -/* 80667BB4-80667BB8 00003C 0001+03 0/0 0/0 0/0 .bss @1012 */ -#pragma push -#pragma force_active on -static u8 lit_1012[1 + 3 /* padding */]; -#pragma pop - -/* 80667BB8-80667BBC 000040 0001+03 0/0 0/0 0/0 .bss @1010 */ -#pragma push -#pragma force_active on -static u8 lit_1010[1 + 3 /* padding */]; -#pragma pop - -/* 80667BBC-80667BC0 000044 0001+03 0/0 0/0 0/0 .bss @1009 */ -#pragma push -#pragma force_active on -static u8 lit_1009[1 + 3 /* padding */]; -#pragma pop - -/* 80667BC0-80667BD0 000048 000C+04 0/1 0/0 0/0 .bss @5356 */ -#pragma push -#pragma force_active on -static u8 lit_5356[12 + 4 /* padding */]; -#pragma pop - -/* 80667BD0-80667BDC 000058 000C+00 0/1 0/0 0/0 .bss effScale$5355 */ -#pragma push -#pragma force_active on -static u8 effScale[12]; -#pragma pop - /* 8066555C-80665E14 001F9C 08B8+00 1/1 0/0 0/0 .text setCollision__11daCstatue_cFv */ void daCstatue_c::setCollision() { - // NONMATCHING + static Vec const localTop = {0.0f, 90.0f, 0.0f}; + static Vec const localRoot = {0.0f, -30.0f, 0.0f}; + static Vec const hammerSide0 = {-40.0f, 120.0f, 0.0f}; + static Vec const hammerSide1 = {40.0f, 120.0f, 0.0f}; + static u16 const effName[4] = {0x09D0, 0x09D1, 0x09D2, 0x09D5}; + static u16 const bossJntIdx[9] = {2, 6, 7, 7, 8, 3, 4, 4, 5}; + + static Vec const bossLocalOffset[9] = { + {0.0f, 0.0f, 0.0f}, {200.0f, 0.0f, 0.0f}, {50.0f, 0.0f, 0.0f}, + {380.0f, 0.0f, 0.0f}, {200.0f, 0.0f, -20.0f}, {200.0f, 0.0f, 0.0f}, + {50.0f, 0.0f, 0.0f}, {380.0f, 0.0f, 0.0f}, {200.0f, 0.0f, -20.0f}, + }; + + mStts.Move(); + if (!fopAcM_checkCarryNow(this) && mType != daCstatueType_Normal2) { + if (mMoveMode == daCstatue_MoveMode_2 && speedF > 1.0f) { + mCyl1.OnAtSetBit(); + } else { + mCyl1.OffAtSetBit(); + } + mCyl1.MoveCAt(current.pos); + dComIfG_Ccsp()->Set(&mCyl1); + } else { + mCyl1.ResetTgHit(); + mCyl1.ResetAtHit(); + mCyl1.ResetCoHit(); + } + if (mType == daCstatueType_Normal) { + if (mCyl2->ChkAtSet()) { + f32 radius = mCyl2->GetR(); + cLib_chaseF(&radius, 384.0f, 36.0f); + mCyl2->SetR(radius); + } + + if (mCurrentAnim == CStatueAnimIndex_2 && mpMorf->getFrame() >= 13.0f && + mpMorf->getFrame() < 21.0f) + { + cXyz direction(cM_ssin(shape_angle.y) * 10.0f, 0.0f, cM_scos(shape_angle.y) * 10.0f); + cXyz startPos; + cXyz endPos; + mDoMtx_multVec(mModel->getAnmMtx(5), &localTop, &endPos); + mDoMtx_multVec(mModel->getAnmMtx(5), &localRoot, &startPos); + mCps1->SetStartEnd(startPos, endPos); + mCps1->SetAtVec(direction); + dComIfG_Ccsp()->Set(mCps1); + mDoMtx_multVec(mModel->getAnmMtx(5), &hammerSide0, &startPos); + mDoMtx_multVec(mModel->getAnmMtx(5), &hammerSide1, &endPos); + mCps2->SetStartEnd(startPos, endPos); + mCps2->SetAtVec(direction); + dComIfG_Ccsp()->Set(mCps2); + onStateFlg0(daCstatue_FLG0_10); + + if (mpMorf->checkFrame(17.0f)) { + cXyz center = (mCps2->GetStart() + mCps2->GetEnd()) * 0.5f; + if (!fopAcM_gc_c::gndCheck(¢er) || + fopAcM_gc_c::getGroundY() < current.pos.y - 10.0f) + { + onStateFlg0(daCstatue_FLG0_20); + } else { + dBgS_ObjGndChk* gndCheck = fopAcM_gc_c::getGroundCheck(); + mSound.startCollisionSE(Z2SE_HIT_STATUE_HAMMER, dKy_pol_sound_get(gndCheck)); + f32 distance = mCps2->GetEnd().abs2(daAlink_getAlinkActorClass()->current.pos); + if (distance < 160000.0f) { + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER4, 0x1f, + cXyz(0.0f, 1.0f, 0.0f)); + } else if (distance < 640000.0f) { + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER2, 0x1f, + cXyz(0.0f, 1.0f, 0.0f)); + } + center.y = fopAcM_gc_c::getGroundY() - 100.0f; + mCyl2->SetC(center); + mCyl2->OnAtSetBit(); + mCyl2->SetR(240.0f); + dComIfG_Ccsp()->Set(mCyl2); + cM3dGPla plane; + fopAcM_gc_c::getTriPla(&plane); + csXyz rotation(cM_atan2s(plane.mNormal.absXZ(), plane.mNormal.y), + plane.mNormal.atan2sX_Z(), 0); + center.y = fopAcM_gc_c::getGroundY(); + for (int iEffect = 0; iEffect < 4; iEffect++) { + dComIfGp_particle_set(effName[iEffect], ¢er, &tevStr, &rotation, 0); + } + } + } else { + if (mCyl2->ChkAtSet()) { + dComIfG_Ccsp()->Set(mCyl2); + } else { + mCyl2->OffAtSetBit(); + mCyl2->ResetAtHit(); + } + } + } else { + if (mCurrentAnim == CStatueAnimIndex_2 && mCyl2->ChkAtSet() && + mpMorf->getFrame() < 30.0f) + { + dComIfG_Ccsp()->Set(mCyl2); + } else { + mCps1->ResetAtHit(); + mCps2->ResetAtHit(); + mCyl2->OffAtSetBit(); + mCyl2->ResetAtHit(); + offStateFlg0(daCstatue_FLG0_10); + } + } + } + static cXyz effScale(2.0f, 2.0f, 2.0f); + if (!mSph) { + return; + } + cXyz spherePos; + dCcD_Sph* sphere; + if (mType == daCstatueType_BossLeft) { + sphere = &mSph[7]; + } else { + sphere = &mSph[3]; + } + for (int iSphere = 0; iSphere < 2; iSphere++) { + if (mCurrentAnim == CStatueAnimIndex_2) { + sphere->OnAtSetBit(); + } else { + sphere->OffAtSetBit(); + } + sphere++; + } + + sphere = &mSph[0]; + int index; + for (index = 0; index < 9; index++, sphere++) { + MtxP mtx = mModel->getAnmMtx(bossJntIdx[index]); + mDoMtx_multVec(mtx, &bossLocalOffset[index], &spherePos); + sphere->MoveCAt(spherePos); + dComIfG_Ccsp()->Set(sphere); + } + if (mBossAtGndHit) { + if (mType == daCstatueType_BossLeft) { + sphere = &mSph[8]; + } else { + sphere = &mSph[4]; + } + cXyz particlePos(sphere->GetC().x, current.pos.y, sphere->GetC().z); + for (index = 0; index < 4; index++) { + dComIfGp_particle_set(effName[index], &particlePos, &tevStr, &csXyz::Zero, &effScale); + mSound.startCreatureSound(Z2SE_CSTATUE_GM_HIT_GROUND, 0, mReverb); + } + } } /* 80665E14-80665F80 002854 016C+00 1/1 0/0 0/0 .text checkHammerReverse__11daCstatue_cFv */ -void daCstatue_c::checkHammerReverse() { - // NONMATCHING +BOOL daCstatue_c::checkHammerReverse() { + if (!checkStateFlg0(daCstatue_FLG0_10)) { + return false; + } + + cXyz start(current.pos.x, current.pos.y + mCyl1.GetH() * 0.5f, current.pos.z); + cXyz end = (mCps2->GetStart() + mCps2->GetEnd()) * 0.5f; + + if (fopAcM_lc_c::lineCheck(&start, &end, this) && fopAcM_lc_c::getWallCode() != 7 && + fopAcM_lc_c::checkWallHit()) + { + dBgS_LinChk* lineCheck = fopAcM_lc_c::getLineCheck(); + mSound.startCollisionSE(Z2SE_HIT_STATUE_HAMMER, dKy_pol_sound_get(lineCheck)); + return true; + } + return false; } -/* ############################################################################################## */ -/* 80667940-8066794C 0002A8 000C+00 0/1 0/0 0/0 .rodata hitEffectCenter$5688 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const hitEffectCenter[12] = { - 0xC0, 0x01, 0xFB, 0xE7, 0x42, 0xF0, 0xE0, 0xC4, 0x43, 0xA0, 0x3B, 0xC8, -}; -COMPILER_STRIP_GATE(0x80667940, &hitEffectCenter); -#pragma pop - -/* 8066794C-80667958 0002B4 000C+00 0/1 0/0 0/0 .rodata hitEffectEye$5689 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const hitEffectEye[12] = { - 0xC0, 0x01, 0xFB, 0xE7, 0xC2, 0xA1, 0x85, 0xA2, 0x44, 0x20, 0xB4, 0xFE, -}; -COMPILER_STRIP_GATE(0x8066794C, &hitEffectEye); -#pragma pop - -/* 80667958-80667964 0002C0 000C+00 0/1 0/0 0/0 .rodata behindCenter$5690 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const behindCenter[12] = { - 0x41, 0xC3, 0xF9, 0xDB, 0x43, 0x4B, 0x1D, 0x30, 0xC2, 0xBE, 0xFA, 0x60, -}; -COMPILER_STRIP_GATE(0x80667958, &behindCenter); -#pragma pop - -/* 80667964-80667970 0002CC 000C+00 0/1 0/0 0/0 .rodata behindEye$5691 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const behindEye[12] = { - 0x42, 0xF8, 0xCC, 0x4A, 0x43, 0x46, 0x44, 0x9C, 0xC3, 0xE7, 0x0B, 0x20, -}; -COMPILER_STRIP_GATE(0x80667964, &behindEye); -#pragma pop - -/* 80667970-8066797C 0002D8 000C+00 0/1 0/0 0/0 .rodata startAnimeCenter$5692 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const startAnimeCenter[12] = { - 0x42, 0xA1, 0x35, 0x3F, 0x43, 0x86, 0x81, 0xCA, 0x43, 0x93, 0x19, 0xFC, -}; -COMPILER_STRIP_GATE(0x80667970, &startAnimeCenter); -#pragma pop - -/* 8066797C-80667988 0002E4 000C+00 0/1 0/0 0/0 .rodata startAnimeEye$5693 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const startAnimeEye[12] = { - 0x43, 0x2A, 0xFE, 0xFA, 0x43, 0x88, 0x52, 0x6E, 0x44, 0x23, 0x8C, 0x18, -}; -COMPILER_STRIP_GATE(0x8066797C, &startAnimeEye); -#pragma pop - /* 80665F80-80666390 0029C0 0410+00 1/1 0/0 0/0 .text setDemo__11daCstatue_cFv */ void daCstatue_c::setDemo() { - // NONMATCHING + static Vec const hitEffectCenter = {-2.031f, 120.438995f, 320.46704f}; + static Vec const hitEffectEye = {-2.031f, -80.761f, 642.828f}; + static Vec const behindCenter = {24.497f, 203.11401f, -95.48901f}; + static Vec const behindEye = {124.399f, 198.268f, -462.0869f}; + static Vec const startAnimeCenter = {80.604f, 269.01398f, 294.203f}; + static Vec const startAnimeEye = {170.996f, 272.64398f, 654.18896f}; + + onStateFlg0(daCstatue_FLG0_Demo); + cXyz eyePos; + cXyz centerPos; + if (eventInfo.checkCommandDemoAccrpt()) { + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + fopAcM_onSwitch(this, mParam1); + if (mDemoMode == daCstatue_DemoMode_0) { + camera->mCamera.Stop(); + camera->mCamera.SetTrimSize(3); + mDoMtx_multVec(mModel->getBaseTRMtx(), &hitEffectCenter, ¢erPos); + mDoMtx_multVec(mModel->getBaseTRMtx(), &hitEffectEye, &eyePos); + camera->mCamera.Set(centerPos, eyePos); + mDemoMode = daCstatue_DemoMode_1; + mDemoTimer = 100; + } else if (mDemoMode == daCstatue_DemoMode_1) { + if (mDemoTimer != 0) { + mDemoTimer--; + } else { + mDoMtx_multVec(mModel->getBaseTRMtx(), &behindCenter, ¢erPos); + mDoMtx_multVec(mModel->getBaseTRMtx(), &behindEye, &eyePos); + camera->mCamera.Set(centerPos, eyePos); + initStartBrkBtk(); + mDemoMode = daCstatue_DemoMode_2; + mDemoTimer = 30; + } + } else { + if (mAnim2.checkFrame(mTargetFrame)) { + mSound.startCreatureSound(Z2SE_CSTATUE_L_START, 0, mReverb); + } else if (mAnim2.getFrame() >= mTargetFrame) { + mSound.startCreatureVoiceLevel(Z2SE_CSTATUE_ACTIVE_LOOP, mReverb); + } + if (mDemoMode == daCstatue_DemoMode_2) { + mAnim1.play(); + mAnim2.play(); + + if (mAnim1.isStop() && mAnim2.isStop()) { + if (mDemoTimer) { + mDemoTimer--; + } else { + mDoMtx_multVec(mModel->getBaseTRMtx(), &startAnimeCenter, ¢erPos); + mDoMtx_multVec(mModel->getBaseTRMtx(), &startAnimeEye, &eyePos); + camera->mCamera.Set(centerPos, eyePos); + J3DAnmTransform* animation = + static_cast(dComIfG_getObjectRes(mResName, 12)); + mpMorf->mDoExt_McaMorfSO::setAnm(animation, -1, 3.0f, 1.0f, 0.0f, -1.0f); + // this is out-of-bounds of the animation table + mCurrentAnim = CStatueAnimIndex_N; + mDemoTimer = 30; + mDemoMode = daCstatue_DemoMode_3; + } + } + } else if (mpMorf->isStop()) { + if (mDemoTimer) { + mDemoTimer--; + } else { + camera->mCamera.Start(); + dComIfGp_event_reset(); + } + } + } + } else { + fopAcM_orderPotentialEvent(this, 2, (u16)-1, 0); + eventInfo.onCondition(2); + } } -/* ############################################################################################## */ -/* 80667988-8066798C 0002F0 0004+00 0/1 0/0 0/0 .rodata @6088 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6088 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x80667988, &lit_6088); -#pragma pop - -/* 8066798C-80667990 0002F4 0004+00 0/1 0/0 0/0 .rodata @6089 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_6089 = 0x3A83126F; -COMPILER_STRIP_GATE(0x8066798C, &lit_6089); -#pragma pop - -/* 80667990-80667994 0002F8 0004+00 0/2 0/0 0/0 .rodata @6090 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6090 = 5.0f; -COMPILER_STRIP_GATE(0x80667990, &lit_6090); -#pragma pop - /* 80666390-80666B80 002DD0 07F0+00 1/1 0/0 0/0 .text setAnime__11daCstatue_cFv */ void daCstatue_c::setAnime() { - // NONMATCHING + daAlink_c* link = daAlink_getAlinkActorClass(); + daCstatue_c* controlledActor = static_cast(link->getCopyRodControllActor()); + if (eventInfo.checkCommandDemoAccrpt() || + (mParam1 != 0xff && !fopAcM_isSwitch(this, mParam1) && controlledActor == this)) + { + setDemo(); + return; + } + + if (controlledActor == this) { + f32 maxDistance = mControlDistanceOffset + link->getCopyRodBallDisMax(); + if (link->getCopyRodActor()->current.pos.abs2(link->current.pos) > SQUARE(maxDistance)) { + static_cast(link->getCopyRodActor())->offControll(); + controlledActor = NULL; + } + } + if (link->checkCopyRodSwingModeInit()) { + offStateFlg0(daCstatue_FLG0_20); + } + int mNewAnim; + if (checkBossType()) { + if ((mCurrentAnim == CStatueAnimIndex_6 || mCurrentAnim == CStatueAnimIndex_1) && + !mpMorf->isStop()) + { + mNewAnim = mCurrentAnim; + } else if (mCurrentAnim == CStatueAnimIndex_2) { + if (mpMorf->isStop()) { + mNewAnim = CStatueAnimIndex_6; + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + mBossAtGndHit = true; + } else if (checkStateFlg0(daCstatue_FLG0_100)) { + mTimer1 = 15; + mNewAnim = CStatueAnimIndex_1; + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + static_cast(link->getCopyRodActor())->offControll(); + mSound.startCreatureSound(Z2SE_CSTATUE_GM_HIT_GROUND, 0, mReverb); + } else { + mNewAnim = CStatueAnimIndex_2; + } + } else if (link->checkCopyRodSwingMode() && controlledActor == this) { + mNewAnim = CStatueAnimIndex_2; + fopAcM_onSwitch(this, 0xe2); + } else { + mNewAnim = CStatueAnimIndex_0; + } + } else if (!mWarpMode && controlledActor == this) { + if (dComIfGp_event_runCheck()) { + speed.x = 0.0f; + speed.z = 0.0f; + } else { + speed.x = link->speed.x + (f32)link->transAnimeMoveX(); + speed.z = link->speed.z + (f32)link->transAnimeMoveZ(); + } + if (mCurrentAnim == CStatueAnimIndex_6 && !mpMorf->isStop()) { + offStateFlg0(daCstatue_FLG0_800); + if (link->checkCopyRodSwingModeInit()) { + mNewAnim = CStatueAnimIndex_2; + } else { + mNewAnim = CStatueAnimIndex_6; + } + } else if (link->checkCopyRodSwingMode()) { + offStateFlg0(daCstatue_FLG0_800); + if (checkStateFlg0(daCstatue_FLG0_20)) { + mNewAnim = CStatueAnimIndex_0; + } else { + if (checkHammerReverse()) { + mNewAnim = CStatueAnimIndex_6; + } else { + mNewAnim = CStatueAnimIndex_2; + } + } + } else if (mCurrentAnim == CStatueAnimIndex_3 && !mpMorf->isStop()) { + offStateFlg0(daCstatue_FLG0_800); + mNewAnim = CStatueAnimIndex_3; + } else if (fabsf(speed.x) + fabsf(speed.z) > 0.1f && mStatueAcch.ChkGroundHit()) { + offStateFlg0(daCstatue_FLG0_800); + mNewAnim = CStatueAnimIndex_1; + } else { + if (mCurrentAnim == CStatueAnimIndex_4 || + (mCurrentAnim == CStatueAnimIndex_5 && !mpMorf->isStop())) + { + mNewAnim = CStatueAnimIndex_5; + } else { + mNewAnim = CStatueAnimIndex_0; + } + } + } else if (mType == daCstatueType_Normal) { + mNewAnim = CStatueAnimIndex_4; + } else if (mCurrentAnim == CStatueAnimIndex_3 && !mpMorf->isStop()) { + mNewAnim = CStatueAnimIndex_3; + } else { + mNewAnim = CStatueAnimIndex_0; + } + if (mNewAnim != mCurrentAnim || + (mNewAnim == CStatueAnimIndex_2 && mpMorf->isStop() && link->checkCopyRodSwingModeInit())) + { + J3DAnmTransform* animation = static_cast( + dComIfG_getObjectRes(mResName, m_bckIdxTable[mType][mNewAnim])); + + f32 animStartFrame = + mNewAnim == CStatueAnimIndex_0 ? animation->getFrameMax() - 0.001f : 0.0f; + f32 animSpeed = 1.0f; + if (mSph) { + if (mNewAnim == CStatueAnimIndex_2) { + animSpeed = 5.0f; + } else if (mNewAnim == CStatueAnimIndex_6 || mNewAnim == CStatueAnimIndex_1) { + animSpeed = 3.0f; + } + } + mpMorf->setAnm(animation, -1, 3.0f, animSpeed, animStartFrame, -1.0f); + mpMorf->setFrameF(animStartFrame); + mCurrentAnim = mNewAnim; + } + if (controlledActor == this) { + if (checkStateFlg0(daCstatue_FLG0_4)) { + u32 creatureSoundId; + u32 creatureVoiceId = Z2SE_CSTATUE_ACTIVE_LOOP; + if (mType != daCstatueType_Small) { + mAnim1.play(); + if (mType == daCstatueType_Normal) { + creatureSoundId = Z2SE_CSTATUE_L_START; + } else { + creatureSoundId = Z2SE_CSTATUE_GM_START; + creatureVoiceId = Z2SE_CSTATUE_GM_ACTIVE_LP; + } + } else { + creatureSoundId = Z2SE_CSTATUE_S_START; + } + if (mAnim2.checkFrame(mTargetFrame)) { + mSound.startCreatureSound(creatureSoundId, 0, mReverb); + } else if (mAnim2.getFrame() >= mTargetFrame) { + mSound.startCreatureVoiceLevel(creatureVoiceId, mReverb); + } + } else { + initStartBrkBtk(); + } + } else if (checkStateFlg0(daCstatue_FLG0_4)) { + offStateFlg0(daCstatue_FLG0_4); + initStopBrkBtk(); + u32 soundId; + if (checkBossType()) { + soundId = Z2SE_CSTATUE_GM_STOP; + } else if (mType == daCstatueType_Small) { + soundId = Z2SE_CSTATUE_S_STOP; + } else { + soundId = Z2SE_CSTATUE_L_STOP; + } + mSound.startCreatureSound(soundId, 0, mReverb); + } + if (mType == daCstatueType_Normal2) { + mAnim1.play(); + } + mAnim2.play(); } /* 80666B80-80666BF8 0035C0 0078+00 3/3 0/0 0/0 .text initBrk__11daCstatue_cFUs */ -void daCstatue_c::initBrk(u16 param_0) { - // NONMATCHING +int daCstatue_c::initBrk(u16 i_index) { + J3DAnmTevRegKey* key = (J3DAnmTevRegKey*)::dComIfG_getObjectRes(mResName, i_index); + J3DModelData* ctx = mModel->getModelData(); + return mAnim2.init(ctx, key, 1, -1, 1.0f, 0, -1); } -/* ############################################################################################## */ -/* 80667994-806679A0 0002FC 000A+02 1/1 0/0 0/0 .rodata brkIdx$6108 */ -SECTION_RODATA static u8 const brkIdx_6108[10 + 2 /* padding */] = { - 0x00, - 0x1F, - 0x00, - 0x1C, - 0x00, - 0x1D, - 0x00, - 0x12, - 0x00, - 0x12, - /* padding */ - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80667994, &brkIdx_6108); - /* 80666BF8-80666C38 003638 0040+00 2/2 0/0 0/0 .text initStopBrkBtk__11daCstatue_cFv */ void daCstatue_c::initStopBrkBtk() { - // NONMATCHING -} + static const u16 brkIdx[daCstatueType_N] = {0x1F, 0x1C, 0x1D, 0x12, 0x12}; -/* ############################################################################################## */ -/* 806679A0-806679AC 000308 000A+02 0/1 0/0 0/0 .rodata brkIdx$6115 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const brkIdx_6115[10 + 2 /* padding */] = { - 0x00, - 0x1E, - 0x00, - 0x1B, - 0x00, - 0x1D, - 0x00, - 0x11, - 0x00, - 0x11, - /* padding */ - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x806679A0, &brkIdx_6115); -#pragma pop + mAnim1.setFrame(0.0f); + initBrk(brkIdx[mType]); +} /* 80666C38-80666DE8 003678 01B0+00 2/2 0/0 0/0 .text initStartBrkBtk__11daCstatue_cFv */ void daCstatue_c::initStartBrkBtk() { - // NONMATCHING + static const u16 brkIdx[daCstatueType_N] = {0x1E, 0x1B, 0x1D, 0x11, 0x11}; + + int soundId = checkBossType() ? Z2SE_CSTATUE_GM_HIT_BALL : Z2SE_CSTATUE_HIT_BALL; + mSound.startCreatureSound(soundId, 0, mReverb); + onStateFlg0((daCstatue_FLG0)(daCstatue_FLG0_800 | daCstatue_FLG0_4)); + mAnim1.setFrame(0.0f); + mAnim1.reset(); + initBrk(brkIdx[mType]); + csXyz angle(shape_angle); + for (int iParticle = 0; iParticle < 2; iParticle++) { + dComIfGp_particle_set(0x88bb, &mBallPos, &angle, NULL); + dComIfGp_particle_set(0x88bc, &mBallPos, &angle, NULL); + angle.y -= (s16)0x8000; + } } -/* ############################################################################################## */ -/* 806679AC-806679B0 000314 0004+00 0/1 0/0 0/0 .rodata @6396 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6396 = 50.0f; -COMPILER_STRIP_GATE(0x806679AC, &lit_6396); -#pragma pop - /* 80666DE8-80667418 003828 0630+00 1/1 0/0 0/0 .text execute__11daCstatue_cFv */ -void daCstatue_c::execute() { - // NONMATCHING +int daCstatue_c::execute() { + daAlink_c* link = daAlink_getAlinkActorClass(); + mBossAtGndHit = 0; + // todo: there is any extra block here in the debug rom setting gravity and mMaxFallSpeed + if (checkStateFlg0(daCstatue_FLG0_2) && !fopAcM_checkCarryNow(this)) { + if (speedF > 1.0f) { + speedF = 30.0f; + speed.y = 50.0f; + } else { + mMoveMode = daCstatue_MoveMode_3; + if (mStatueAcch.ChkGroundHit() || mStatueAcch.GetGroundH() - current.pos.y > -30.0f) { + mSound.startCreatureSound(Z2SE_CSTATUE_S_WALK_A, 0, mReverb); + } + } + } + if (mWarpMode) { + if (checkStateFlg0(daCstatue_FLG0_1)) { + fopAcM_delete(this); + if (checkStateFlg0(daCstatue_FLG0_1000)) { + offStateFlg0(daCstatue_FLG0_1000); + dComIfGs_offTbox(mParam2); + dComIfGs_onTbox(mParam2 + 1); + } + return 1; + } + if (mWarpMode == (daCstatueWarpMode_Active | daCstatueWarpMode_Ground)) { + daCstatue_c* controlledActor = + static_cast(link->getCopyRodControllActor()); + if (controlledActor == this && link->getCopyRodActor()) { + static_cast(link->getCopyRodActor())->offControll(); + } + cLib_addCalcPosXZ(¤t.pos, mWarpTarget, 0.5f, 5.0f, 1.0f); + } else if (mWarpMode == daCstatueWarpMode_Active) { + current.pos = mWarpTarget; + old.pos = mWarpTarget; + mWarpMode = 0; + } + } + setAnime(); + int bossType = checkBossType(); + if (bossType != 0) { + mStatueAcch.CrrPos(dComIfG_Bgsp()); + } else { + if (mType == daCstatueType_Normal2) { + if (mParam0 != 0xff && fopAcM_isSwitch(this, mParam0)) { + fopAcM_delete(this); + return 1; + } + if (dComIfGs_wolfeye_effect_check() && fopAcM_isSwitch(this, 0x1f) && + !fopAcM_CheckCondition(this, 4)) + { + if (!fopAcM_lc_c::lineCheck(&eyePos, &link->eyePos, this)) { + dComIfGs_onEventBit(0x5440); + } + } + } else { + if (mType == daCstatueType_Normal && fopAcM_isSwitch(this, 6)) { + mCyl1.SetTgType(0xd87afddf); + if (checkStateFlg0(daCstatue_FLG0_1000)) { + offStateFlg0(daCstatue_FLG0_1000); + dComIfGs_offTbox(mParam2); + } + } + posMove(); + } + } + u32 morf = + mStatueAcch.GetGroundH() != -1000000000.0f ? dKy_pol_sound_get(&mStatueAcch.m_gnd) : 0; + mpMorf->play(morf, mReverb); + if (!bossType && mCurrentAnim == CStatueAnimIndex_2 && link->checkCopyRodSwingMode()) { + if (mpMorf->getEndFrame() > link->getBaseAnimeFrame()) { + mpMorf->setFrame(link->getBaseAnimeFrame()); + } else { + mpMorf->setFrame(mpMorf->getEndFrame()); + } + } else if (mTimer1) { + mTimer1--; + mpMorf->setFrame(0.0f); + } + setRoomInfo(); + setMatrix(); + if (mCyl1.ChkTgHit()) { + dCcD_GObjInf* hitObject = mCyl1.GetTgHitGObj(); + if (hitObject && hitObject->GetAtType() != AT_TYPE_1000000) { + mSound.startCollisionSE(mCyl1.GetTgHitObjHitSeID(1), 0x2a); + } + } + setCollision(); + if (mType == daCstatueType_Small) { + if (mStatueAcch.ChkGroundHit() && !fopAcM_checkCarryNow(this)) { + cLib_onBit(attention_info.flags, 0x10); // this is 0x80 in the debug rom + } else { + cLib_offBit(attention_info.flags, 0x10); // this is 0x80 in the debug rom + } + } + + u32 effect = 0; + if (mStatueAcch.ChkGroundLanding() || + (mType == daCstatueType_Small && mCurrentAnim == CStatueAnimIndex_2 && + mpMorf->checkFrame(7.0f))) + { + effect = 7; + } + cXyz* effectPos = effect ? ¤t.pos : NULL; + mPaPo.setEffectCenter(&tevStr, ¤t.pos, effect, 0, effectPos, ¤t.angle, &scale, + fopAcM_GetRoomNo(this), 1.0f, speedF); + if (fopAcM_checkCarryNow(this)) { + onStateFlg0(daCstatue_FLG0_2); + fopAcM_OffStatus(this, 0x400); + } else { + offStateFlg0(daCstatue_FLG0_2); + fopAcM_OnStatus(this, 0x400); + } + if (mParam2 != 0x3f) { + dTres_c::setIconPositionOfCstatue(mParam2, ¤t.pos); + } + offStateFlg0((daCstatue_FLG0)(daCstatue_FLG0_Demo | daCstatue_FLG0_100)); + return 1; } /* 80667418-80667438 003E58 0020+00 1/0 0/0 0/0 .text daCstatue_Execute__FP11daCstatue_c */ -static void daCstatue_Execute(daCstatue_c* param_0) { - // NONMATCHING +static int daCstatue_Execute(void* actor) { + return static_cast(actor)->execute(); } /* 80667438-80667610 003E78 01D8+00 1/1 0/0 0/0 .text draw__11daCstatue_cFv */ -void daCstatue_c::draw() { - // NONMATCHING +int daCstatue_c::draw() { + int tevstrType = checkBossType() ? 0x10 : 8; + g_env_light.settingTevStruct(tevstrType, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mModel, &tevStr); + mAnim2.entry(mModel->getModelData()); + if (mType != daCstatueType_Small) { + mAnim1.entry(mModel->getModelData()); + } + if (mType == daCstatueType_Normal2) { + if (dComIfGs_wolfeye_effect_check()) { + MtxP mtx = mModel->getAnmMtx(0); + cXyz position(mtx[0][3], mtx[1][3], mtx[2][3]); + cMtx_multVec(dComIfGd_getViewMtx(), &position, &position); + position.z -= 200.0f; + cMtx_multVec(dComIfGd_getInvViewMtx(), &position, &position); + mInvisible.entryDL(&position); + } + } else { + mDoExt_modelEntryDL(mModel); + if (!fopAcM_checkCarryNow(this)) { + cXyz shadowPos(current.pos.x, mModel->getAnmMtx(0)[1][3] + 30.0f, current.pos.z); + mShadowKey = + dComIfGd_setShadow(mShadowKey, 1, mModel, &shadowPos, mSomePos.x, 0.0f, + current.pos.y, mStatueAcch.GetGroundH(), mStatueAcch.m_gnd, + &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); + } + } + return 1; } /* 80667610-80667630 004050 0020+00 1/0 0/0 0/0 .text daCstatue_Draw__FP11daCstatue_c */ -static void daCstatue_Draw(daCstatue_c* param_0) { - // NONMATCHING +static int daCstatue_Draw(void* actor) { + return static_cast(actor)->draw(); } -/* 80667630-80667678 004070 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} +/* 80667AA0-80667AC0 -00001 0020+00 1/0 0/0 0/0 .data l_daCstatue_Method */ +static actor_method_class l_daCstatue_Method = { + daCstatue_Create, daCstatue_Delete, daCstatue_Execute, NULL, daCstatue_Draw, +}; -/* 80667678-80667680 0040B8 0008+00 1/0 0/0 0/0 .text @36@__dt__15dBgS_StatueAcchFv */ -static void func_80667678() { - // NONMATCHING -} +/* 80667AC0-80667AF0 -00001 0030+00 0/0 0/0 1/0 .data g_profile_CSTATUE */ +extern actor_process_profile_definition g_profile_CSTATUE = { + fpcLy_CURRENT_e, // mLayerID + 7, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_CSTATUE, // mProcName + &g_fpcLf_Method.base, // sub_method + 0x00000B2C, // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 271, // mPriority + &l_daCstatue_Method, // sub_method + 0x00060520, // mStatus + fopAc_ENV_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType +}; -/* 80667680-80667688 0040C0 0008+00 1/0 0/0 0/0 .text @20@__dt__15dBgS_StatueAcchFv */ -static void func_80667680() { - // NONMATCHING -} +AUDIO_INSTANCES; -/* ############################################################################################## */ -/* 80667BDC-80667BE0 000064 0004+00 0/0 0/0 0/0 .bss - * sInstance__40JASGlobalInstance<19JASDefaultBankTable> */ -#pragma push -#pragma force_active on -static u8 data_80667BDC[4]; -#pragma pop - -/* 80667BE0-80667BE4 000068 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14JASAudioThread> */ -#pragma push -#pragma force_active on -static u8 data_80667BE0[4]; -#pragma pop - -/* 80667BE4-80667BE8 00006C 0004+00 0/0 0/0 0/0 .bss sInstance__27JASGlobalInstance<7Z2SeMgr> */ -#pragma push -#pragma force_active on -static u8 data_80667BE4[4]; -#pragma pop - -/* 80667BE8-80667BEC 000070 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8Z2SeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_80667BE8[4]; -#pragma pop - -/* 80667BEC-80667BF0 000074 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SceneMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80667BEC[4]; -#pragma pop - -/* 80667BF0-80667BF4 000078 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2StatusMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80667BF0[4]; -#pragma pop - -/* 80667BF4-80667BF8 00007C 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2DebugSys> - */ -#pragma push -#pragma force_active on -static u8 data_80667BF4[4]; -#pragma pop - -/* 80667BF8-80667BFC 000080 0004+00 0/0 0/0 0/0 .bss - * sInstance__36JASGlobalInstance<15JAISoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_80667BF8[4]; -#pragma pop - -/* 80667BFC-80667C00 000084 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14Z2SoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_80667BFC[4]; -#pragma pop - -/* 80667C00-80667C04 000088 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12Z2SpeechMgr2> */ -#pragma push -#pragma force_active on -static u8 data_80667C00[4]; -#pragma pop - -/* 80667C04-80667C08 00008C 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8JAISeMgr> */ -#pragma push -#pragma force_active on -static u8 data_80667C04[4]; -#pragma pop - -/* 80667C08-80667C0C 000090 0004+00 0/0 0/0 0/0 .bss sInstance__29JASGlobalInstance<9JAISeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_80667C08[4]; -#pragma pop - -/* 80667C0C-80667C10 000094 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAIStreamMgr> */ -#pragma push -#pragma force_active on -static u8 data_80667C0C[4]; -#pragma pop - -/* 80667C10-80667C14 000098 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SoundMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80667C10[4]; -#pragma pop - -/* 80667C14-80667C18 00009C 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAISoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_80667C14[4]; -#pragma pop - -/* 80667C18-80667C1C 0000A0 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13JAUSoundTable> */ -#pragma push -#pragma force_active on -static u8 data_80667C18[4]; -#pragma pop - -/* 80667C1C-80667C20 0000A4 0004+00 0/0 0/0 0/0 .bss - * sInstance__38JASGlobalInstance<17JAUSoundNameTable> */ -#pragma push -#pragma force_active on -static u8 data_80667C1C[4]; -#pragma pop - -/* 80667C20-80667C24 0000A8 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAUSoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_80667C20[4]; -#pragma pop - -/* 80667C24-80667C28 0000AC 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SoundInfo> - */ -#pragma push -#pragma force_active on -static u8 data_80667C24[4]; -#pragma pop - -/* 80667C28-80667C2C 0000B0 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2SoundObjMgr> */ -#pragma push -#pragma force_active on -static u8 data_80667C28[4]; -#pragma pop - -/* 80667C2C-80667C30 0000B4 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2Audience> - */ -#pragma push -#pragma force_active on -static u8 data_80667C2C[4]; -#pragma pop - -/* 80667C30-80667C34 0000B8 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2FxLineMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80667C30[4]; -#pragma pop - -/* 80667C34-80667C38 0000BC 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2EnvSeMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80667C34[4]; -#pragma pop - -/* 80667C38-80667C3C 0000C0 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SpeechMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80667C38[4]; -#pragma pop - -/* 80667C3C-80667C40 0000C4 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2WolfHowlMgr> */ -#pragma push -#pragma force_active on -static u8 data_80667C3C[4]; -#pragma pop - -/* 80667C40-80667C44 0000C8 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14JAUSectionHeap> */ -#pragma push -#pragma force_active on -static u8 data_80667C40[4]; -#pragma pop +#include "JSystem/JAudio2/JAUSectionHeap.h" +template <> +JAUSectionHeap* JASGlobalInstance::sInstance;