From 0369025df083dff9c85b5ecfc6b1a772b6c9a1e2 Mon Sep 17 00:00:00 2001 From: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Date: Sat, 3 May 2025 00:33:31 -0700 Subject: [PATCH] canoe done (#2417) * d_a_canoe done * fix debug --- configure.py | 2 +- include/d/actor/d_a_alink.h | 11 + include/d/actor/d_a_canoe.h | 73 +- include/d/actor/d_a_player.h | 2 + include/d/d_meter2_info.h | 8 +- src/d/actor/d_a_L7demo_dr.cpp | 2 +- src/d/actor/d_a_canoe.cpp | 2001 +++++++++++++++------------------ src/d/actor/d_a_npc_zra.inc | 19 +- src/d/d_msg_class.cpp | 3 +- src/f_op/f_op_actor_mng.cpp | 16 +- 10 files changed, 969 insertions(+), 1168 deletions(-) diff --git a/configure.py b/configure.py index 26487e9bd3..fe7d68b619 100755 --- a/configure.py +++ b/configure.py @@ -1524,7 +1524,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01"), "d_a_alldie"), ActorRel(MatchingFor("GZ2E01"), "d_a_andsw2"), ActorRel(NonMatching, "d_a_bd"), - ActorRel(NonMatching, "d_a_canoe"), + ActorRel(MatchingFor("GZ2E01"), "d_a_canoe"), ActorRel(NonMatching, "d_a_cstaF"), ActorRel(NonMatching, "d_a_demo_item"), ActorRel(MatchingFor("GZ2E01"), "d_a_door_bossL1"), diff --git a/include/d/actor/d_a_alink.h b/include/d/actor/d_a_alink.h index dbbea01dd9..76bc3ec156 100644 --- a/include/d/actor/d_a_alink.h +++ b/include/d/actor/d_a_alink.h @@ -3281,6 +3281,14 @@ public: 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 FALSE; + } + u32 checkModeFlg(u32 pFlag) const { return mModeFlg & pFlag; } BOOL checkSmallUpperGuardAnime() const { return checkUpperAnime(0x16); } BOOL checkFmChainGrabAnime() const { return checkUpperAnime(0x62) || checkUpperAnime(0x2A0); } @@ -3538,6 +3546,8 @@ public: return mProcID == PROC_SPINNER_WAIT && mProcVar2.field_0x300c == 0; } 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; } fopAc_ac_c* getCopyRodActor() { return mCopyRodAcKeep.getActor(); } fopAc_ac_c* getHookshotRoofWaitActor() { return mCargoCarryAcKeep.getActor(); } @@ -3555,6 +3565,7 @@ public: void seStartSystem(u32 i_seID) { mDoAud_seStart(i_seID, NULL, 0, 0); } bool checkIronBallEquip() const { return mEquipItem == fpcNm_ITEM_IRONBALL; } + BOOL checkFishingRodEquip() const { return checkFishingRodItem(mEquipItem); } f32 getAnmSpeedStickRate(f32 param_0, f32 param_1) const { return param_0 + (field_0x33a8 * (param_1 - param_0)); diff --git a/include/d/actor/d_a_canoe.h b/include/d/actor/d_a_canoe.h index 60eaec3a70..991ca24afb 100644 --- a/include/d/actor/d_a_canoe.h +++ b/include/d/actor/d_a_canoe.h @@ -16,8 +16,8 @@ */ class daCanoe_c : public fopAc_ac_c { public: - /* 804DA5F4 */ void createHeap(); - /* 804DA740 */ void create(); + /* 804DA5F4 */ int createHeap(); + /* 804DA740 */ int create(); /* 804DAEA8 */ ~daCanoe_c(); /* 804DB008 */ void setRoomInfo(); /* 804DB0B0 */ void setMatrix(); @@ -28,8 +28,8 @@ public: /* 804DB828 */ void frontBackBgCheck(); /* 804DC330 */ void setPaddleEffect(); /* 804DC554 */ void setCanoeSliderEffect(); - /* 804DC7B4 */ void execute(); - /* 804DD35C */ void draw(); + /* 804DC7B4 */ int execute(); + /* 804DD35C */ int draw(); J3DModel* getModel() { return mpModel; } MtxP getModelMtx() { return mpModel->getBaseTRMtx(); } @@ -38,7 +38,7 @@ public: void incShapeOffsetY(f32 offset) { mShapeOffsetY += offset; } void incShapeAngleZ(s16 incZ) { shape_angle.z += incZ; } void onRodID(fpc_ProcID i_rodID) { mRodID = i_rodID; } - void setWaterFallDownSe() { field_0x141c.startSound(Z2SE_AL_CANOE_FALL_DW, 0, -1); } + void setWaterFallDownSe() { mSound.startSound(Z2SE_AL_CANOE_FALL_DW, 0, -1); } bool checkPaddleChangeWater() { return mPaddleWaterType == 3; } void startInitPaddleWater() { mPaddleWaterType = 4; } fpc_ProcID getRodID() { return mRodID; } @@ -46,23 +46,23 @@ public: void setAimSpeed(f32 i_speed) { mAimSpeed = i_speed; } void setAimAngle(s16 i_angle) { mAimAngle = i_angle; - field_0x1442 = 1; + mIsForceAimAngle = TRUE; } void setPosAndAngle(cXyz const* i_pos, s16 i_angle) { - field_0x14d0 = *i_pos; - field_0x144a = i_angle; - field_0x1446 = 1; + mForcePos = *i_pos; + mForceAngle = i_angle; + mIsForcePosAngle = TRUE; } void setPaddleOffsetRight() { - field_0x1454 = 0x40; - field_0x1456 = 0xF; + field_0x1454 = 64; + field_0x1456 = 15; } void setPaddleOffsetLeft() { - field_0x1454 = -0x40; - field_0x1456 = 0xF; + field_0x1454 = -64; + field_0x1456 = 15; } private: @@ -70,22 +70,23 @@ private: /* 0x0570 */ J3DModel* mpModel; /* 0x0574 */ J3DModel* mpPaddleModel; /* 0x0578 */ J3DModel* mpMaskModel; - /* 0x057C */ dCcD_Stts field_0x57c; - /* 0x05B8 */ dBgS_AcchCir field_0x5b8[9]; - /* 0x07F8 */ dBgS_LinkAcch field_0x7f8[3]; - /* 0x0D80 */ dCcD_Cyl field_0xd80[5]; - /* 0x13AC */ dBgS_LinkLinChk field_0x13ac; - /* 0x141C */ Z2SoundObjSimple field_0x141c; - /* 0x143C */ char* mResName; + /* 0x057C */ dCcD_Stts mCcStts; + /* 0x05B8 */ dBgS_AcchCir mAcchCir[3][3]; + /* 0x07F8 */ dBgS_LinkAcch mAcch[3]; + /* 0x0D80 */ dCcD_Cyl mCcCyl[5]; + /* 0x13AC */ dBgS_LinkLinChk mLineChk; + /* 0x141C */ Z2SoundObjSimple mSound; + /* 0x143C */ const char* mArcName; /* 0x1440 */ u8 mPaddleWaterType; /* 0x1441 */ u8 field_0x1441; - /* 0x1442 */ u8 field_0x1442; + /* 0x1442 */ u8 mIsForceAimAngle; /* 0x1443 */ u8 mJumpRideFlg; /* 0x1444 */ u8 field_0x1444; - /* 0x1445 */ u8 mReverb; - /* 0x1446 */ u8 field_0x1446; + /* 0x1445 */ s8 mReverb; + /* 0x1446 */ u8 mIsForcePosAngle; + /* 0x1447 */ u8 mIsSliderHit; /* 0x1448 */ s16 field_0x1448; - /* 0x144A */ s16 field_0x144a; + /* 0x144A */ s16 mForceAngle; /* 0x144C */ s16 mAimAngle; /* 0x144E */ s16 field_0x144e; /* 0x1450 */ s16 field_0x1450; @@ -94,24 +95,26 @@ private: /* 0x1456 */ s16 field_0x1456; /* 0x1458 */ s16 field_0x1458; /* 0x145A */ s16 field_0x145a; - /* 0x145C */ s16 field_0x145c; - /* 0x145E */ s16 field_0x145e; + /* 0x145C */ s16 mHitInvulnerabilityTimer; + /* 0x145E */ u16 mHitCount; /* 0x1460 */ s16 field_0x1460; /* 0x1464 */ fpc_ProcID mRodID; /* 0x1468 */ f32 mAimSpeed; /* 0x146C */ f32 mShapeOffsetY; /* 0x1470 */ f32 field_0x1470; - /* 0x1474 */ u32 field_0x1474; - /* 0x1478 */ u8 field_0x1478[0x1480 - 0x1478]; + /* 0x1474 */ u32 mShadowId; + /* 0x1478 */ u32 field_0x1478; + /* 0x147C */ u8 field_0x147c[0x1480 - 0x147C]; /* 0x1480 */ u32 field_0x1480; - /* 0x1484 */ u8 field_0x1484[0x1490 - 0x1484]; + /* 0x1484 */ u8 field_0x1484[0x1488 - 0x1484]; + /* 0x1488 */ u32 field_0x1488[2]; /* 0x1490 */ u32 field_0x1490; - /* 0x1494 */ cXyz field_0x1494; - /* 0x14A0 */ cXyz field_0x14a0; - /* 0x14AC */ cXyz field_0x14ac; - /* 0x14B8 */ cXyz field_0x14b8; - /* 0x14C4 */ cXyz field_0x14c4; - /* 0x14D0 */ cXyz field_0x14d0; + /* 0x1494 */ cXyz mFrontPos; + /* 0x14A0 */ cXyz mBackPos; + /* 0x14AC */ cXyz mOldFrontPos; + /* 0x14B8 */ cXyz mOldBackPos; + /* 0x14C4 */ cXyz mWaterSpeed; + /* 0x14D0 */ cXyz mForcePos; }; STATIC_ASSERT(sizeof(daCanoe_c) == 0x14dc); diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 6e21eae098..340638859c 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -1046,6 +1046,8 @@ public: void onForceSubjectCancel() { onEndResetFlg0(ERFLG0_FORCE_SUBJECT_CANCEL); } void onEnemyDead() { onEndResetFlg0(ERFLG0_ENEMY_DEAD); } void offDkCaught2() { offNoResetFlg0(FLG0_UNK_20000); } + void onWaterFallFrontHit() { onEndResetFlg1(ERFLG1_UNK_800); } + void onCanoeItemCancel() { onEndResetFlg1(ERFLG1_UNK_20000000); } u32 checkBoarSingleBattle() const { return checkNoResetFlg2(daPy_FLG2(FLG2_UNK_1000000 | FLG2_BOAR_SINGLE_BATTLE)); } u32 checkWolfDashAutoJump() const { return checkNoResetFlg2(FLG2_WOLF_DASH_AUTO_JUMP); } diff --git a/include/d/d_meter2_info.h b/include/d/d_meter2_info.h index 1151925e82..3d8e2b4c81 100644 --- a/include/d/d_meter2_info.h +++ b/include/d/d_meter2_info.h @@ -156,7 +156,7 @@ public: void setMsgTimeMs(u32 msgTime) { mMsgTimeMs = msgTime; } void setTimeMs(s32 i_time) { mTimeMs = i_time; } u32 getTimeMs() { return mTimeMs; } - int getNowCount() { return mNowCount; } + u8 getNowCount() { return mNowCount; } int getMaxCount() { return mMaxCount; } void setScopeZoomPointer(u8 param_0) { mScopeZoomPointer = param_0; } u8 getItemExplainWindowStatus() { return mItemExplainWindowStatus; } @@ -635,7 +635,7 @@ inline void dMeter2Info_setTimeMs(s32 i_time) { g_meter2_info.setTimeMs(i_time); } -inline int dMeter2Info_getNowCount() { +inline u8 dMeter2Info_getNowCount() { return g_meter2_info.getNowCount(); } @@ -816,6 +816,10 @@ inline void dMeter2Info_setFloatingMessage(u16 pMessageID, s16 pMessageTimer, bo g_meter2_info.setFloatingMessage(pMessageID, pMessageTimer, pWakuVisible); } +inline void dMeter2Info_setMiniGameCount(s8 i_count) { + g_meter2_info.setMiniGameCount(i_count); +} + const char* dMeter2Info_getPlusTextureName(); const char* dMeter2Info_getNumberTextureName(int pIndex); int dMeter2Info_recieveLetter(); diff --git a/src/d/actor/d_a_L7demo_dr.cpp b/src/d/actor/d_a_L7demo_dr.cpp index c965fbc645..5de9ec0ac0 100644 --- a/src/d/actor/d_a_L7demo_dr.cpp +++ b/src/d/actor/d_a_L7demo_dr.cpp @@ -364,7 +364,7 @@ int daDr_c::create() { if (dComIfG_play_c::getLayerNo(0) == 3) { phase_state = dComIfG_resLoad(&mPhase, "B_dr"); if (phase_state == cPhs_COMPLEATE_e) { - OS_REPORT("dr PARAM %x\n", fopAcM_GetParam()); + OS_REPORT("dr PARAM %x\n", fopAcM_GetParam(this)); OS_REPORT("dr//////////////DR SET 1 !!\n"); if (!fopAcM_entrySolidHeap(this, useHeapInit, 0x68C0)) { diff --git a/src/d/actor/d_a_canoe.cpp b/src/d/actor/d_a_canoe.cpp index 53913a57cb..ad8b805dce 100644 --- a/src/d/actor/d_a_canoe.cpp +++ b/src/d/actor/d_a_canoe.cpp @@ -4,332 +4,81 @@ */ #include "d/actor/d_a_canoe.h" -#include "dol2asm.h" #include "d/d_com_inf_game.h" #include "d/d_meter2_info.h" +#include "d/actor/d_a_alink.h" +#include "d/actor/d_a_tag_waterfall.h" +#include "d/actor/d_a_obj_gomikabe.h" +#include "f_op/f_op_kankyo_mng.h" +#include "JSystem/JAudio2/JAUSectionHeap.h" +#include "Z2AudioLib/Z2Instances.h" - - -// -// Forward References: -// - -extern "C" static void daCanoe_searchTagWaterFall__FP10fopAc_ac_cPv(); -extern "C" void __dt__4cXyzFv(); -extern "C" void createHeap__9daCanoe_cFv(); -extern "C" static void daCanoe_createHeap__FP10fopAc_ac_c(); -extern "C" void create__9daCanoe_cFv(); -extern "C" void __dt__8dCcD_CylFv(); -extern "C" void __ct__8dCcD_CylFv(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__13dBgS_LinkAcchFv(); -extern "C" void __ct__13dBgS_LinkAcchFv(); -extern "C" void __dt__12dBgS_AcchCirFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" static void daCanoe_Create__FP10fopAc_ac_c(); -extern "C" void __dt__9daCanoe_cFv(); -extern "C" static void daCanoe_Delete__FP9daCanoe_c(); -extern "C" void setRoomInfo__9daCanoe_cFv(); -extern "C" void setMatrix__9daCanoe_cFv(); -extern "C" void setCollision__9daCanoe_cFv(); -extern "C" void posMove__9daCanoe_cFv(); -extern "C" void checkGomikabe__9daCanoe_cFR13cBgS_PolyInfo(); -extern "C" void setFrontBackPos__9daCanoe_cFv(); -extern "C" void frontBackBgCheck__9daCanoe_cFv(); -extern "C" void __dt__8cM3dGPlaFv(); -extern "C" void setPaddleEffect__9daCanoe_cFv(); -extern "C" void setCanoeSliderEffect__9daCanoe_cFv(); -extern "C" void execute__9daCanoe_cFv(); -extern "C" static void daCanoe_Execute__FP9daCanoe_c(); -extern "C" void draw__9daCanoe_cFv(); -extern "C" static void daCanoe_Draw__FP9daCanoe_c(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" static void func_804DD5BC(); -extern "C" static void func_804DD5C4(); -extern "C" extern char const* const d_a_canoe__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_XYZrotM__FPA4_fsss(); -extern "C" void transM__14mDoMtx_stack_cFfff(); -extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void __dt__10fopAc_ac_cFv(); -extern "C" void fopAcIt_Executor__FPFPvPv_iPv(); -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_getWaterStream__FPC4cXyzRC13cBgS_PolyInfoP4cXyzPii(); -extern "C" void waterCheck__11fopAcM_wt_cFPC4cXyz(); -extern "C" void fopKyM_createWpillar__FPC4cXyzfi(); -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 isEventBit__11dSv_event_cCFUs(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void getEmitter__Q213dPa_control_c7level_cFUl(); -extern "C" void -setWaterRipple__13dPa_control_cFPUlR13cBgS_PolyInfoPC4cXyzfPC12dKy_tevstr_cPC4cXyzSc(); -extern "C" void -set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void addReal__21dDlst_shadowControl_cFUlP8J3DModel(); -extern "C" void StartShock__12dVibration_cFii4cXyz(); -extern "C" void LineCross__4cBgSFP11cBgS_LinChk(); -extern "C" void GetActorPointer__4cBgSCFi(); -extern "C" void GetTriPla__4cBgSCFRC13cBgS_PolyInfoP8cM3dGPla(); -extern "C" void GetPolyColor__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_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz(); -extern "C" void Set__9dBgS_AcchFP10fopAc_ac_ciP12dBgS_AcchCir(); -extern "C" void CrrPos__9dBgS_AcchFR4dBgS(); -extern "C" void Set__11dBgS_LinChkFPC4cXyzPC4cXyzPC10fopAc_ac_c(); -extern "C" void __ct__15dBgS_LinkLinChkFv(); -extern "C" void __dt__15dBgS_LinkLinChkFv(); -extern "C" void SetLink__16dBgS_PolyPassChkFv(); -extern "C" void GetAc__22dCcD_GAtTgCoCommonBaseFv(); -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 ChkCoHit__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl(); -extern "C" void getMoveBGActorName__9daAlink_cFR13cBgS_PolyInfoi(); -extern "C" void getCanoeMaxSpeed__9daAlink_cCFv(); -extern "C" void getCanoeBackMaxSpeed__9daAlink_cCFv(); -extern "C" void getCanoeCres__9daAlink_cCFv(); -extern "C" void getCanoeMaxRotSpeed__9daAlink_cCFv(); -extern "C" void getCanoeLocalPaddleTop__9daAlink_cFv(); -extern "C" void getCanoePaddleMatrix__9daAlink_cFv(); -extern "C" void checkCanoePaddleGrab__9daAlink_cCFP10fopAc_ac_c(); -extern "C" void checkFishingRodItem__9daPy_py_cFi(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void setMiniGameCount__13dMeter2Info_cFSc(); -extern "C" void ClrCcMove__9cCcD_SttsFv(); -extern "C" void SetVsGrp__10cCcD_ObjCoFUl(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void __pl__4cXyzCFRC3Vec(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void __ml__4cXyzCFf(); -extern "C" void atan2sX_Z__4cXyzCFv(); -extern "C" void atan2sY_XZ__4cXyzCFv(); -extern "C" void cM_rad2s__Ff(); -extern "C" void cM_atan2s__Fff(); -extern "C" void cM_rndF__Ff(); -extern "C" void __dt__13cBgS_PolyInfoFv(); -extern "C" void __dt__8cM3dGCirFv(); -extern "C" void SetC__8cM3dGCylFRC4cXyz(); -extern "C" void cLib_addCalc__FPfffff(); -extern "C" void cLib_addCalcPosXZ__FP4cXyzRC4cXyzfff(); -extern "C" void cLib_addCalcAngleS__FPsssss(); -extern "C" void cLib_addCalcAngleS2__FPssss(); -extern "C" void cLib_chaseF__FPfff(); -extern "C" void cLib_distanceAngleS__Fss(); -extern "C" void func_802807E0(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void __dt__14Z2SoundObjBaseFv(); -extern "C" void deleteObject__14Z2SoundObjBaseFv(); -extern "C" void __ct__16Z2SoundObjSimpleFv(); -extern "C" void __dl__FPv(); -extern "C" void __destroy_arr(); -extern "C" void __construct_array(); -extern "C" void __cvt_fp2unsigned(); -extern "C" void _savegpr_19(); -extern "C" void _savegpr_24(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_19(); -extern "C" void _restgpr_24(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" u8 saveBitLabels__16dSv_event_flag_c[1644 + 4 /* padding */]; -extern "C" extern void* __vt__8dCcD_Cyl[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__12cCcD_CylAttr[25]; -extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; -extern "C" extern void* __vt__9cCcD_Stts[8]; -extern "C" extern void* __vt__16Z2SoundObjSimple[8]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" u8 mWaterCheck__11fopAcM_wt_c[84 + 4 /* padding */]; -extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32]; -extern "C" f32 Zero__4cXyz[3]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" f32 mWaterY__11fopAcM_wt_c[1 + 1 /* padding */]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" void __register_global_object(); -extern "C" void BreakSet__15daObjGOMIKABE_cFv(); -extern "C" void checkHitWaterFall__16daTagWaterFall_cF4cXyz(); - -// -// Declarations: -// +#ifdef DEBUG +static BOOL l_debugMode; +#endif /* 804DA54C-804DA5B8 0000EC 006C+00 1/1 0/0 0/0 .text daCanoe_searchTagWaterFall__FP10fopAc_ac_cPv */ -static void daCanoe_searchTagWaterFall(fopAc_ac_c* param_0, void* param_1) { - // NONMATCHING -} +static BOOL daCanoe_searchTagWaterFall(fopAc_ac_c* i_actor, void* i_data) { + if (fopAcM_GetName(i_actor) == PROC_Tag_WaterFall) { + if (((daTagWaterFall_c*)i_actor)->checkHitWaterFall(*(cXyz*)i_data)) { + daAlink_getAlinkActorClass()->onWaterFallFrontHit(); + } + } -/* 804DA5B8-804DA5F4 000158 003C+00 2/2 0/0 0/0 .text __dt__4cXyzFv */ -// cXyz::~cXyz() { -extern "C" void __dt__4cXyzFv() { - // NONMATCHING + return TRUE; } /* 804DA5F4-804DA720 000194 012C+00 1/1 0/0 0/0 .text createHeap__9daCanoe_cFv */ -void daCanoe_c::createHeap() { - // NONMATCHING +int daCanoe_c::createHeap() { + void* modelData = dComIfG_getObjectRes(mArcName, 4); + void* paddleModelData = dComIfG_getObjectRes(mArcName, 3); + void* maskModelData = dComIfG_getObjectRes(mArcName, 5); + JUT_ASSERT(161, modelData); + JUT_ASSERT(162, paddleModelData); + JUT_ASSERT(163, maskModelData); + + mpModel = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x11000084); + if (mpModel == NULL) { + return 0; + } + + mpPaddleModel = mDoExt_J3DModel__create((J3DModelData*)paddleModelData, 0x80000, 0x11000084); + if (mpPaddleModel == NULL) { + return 0; + } + + mpMaskModel = mDoExt_J3DModel__create((J3DModelData*)maskModelData, 0x80000, 0x11000084); + if (mpMaskModel == NULL) { + return 0; + } + + mSound.init(¤t.pos, 1); + return 1; } /* 804DA720-804DA740 0002C0 0020+00 1/1 0/0 0/0 .text daCanoe_createHeap__FP10fopAc_ac_c */ -static void daCanoe_createHeap(fopAc_ac_c* param_0) { - // NONMATCHING +static int daCanoe_createHeap(fopAc_ac_c* i_this) { + return ((daCanoe_c*)i_this)->createHeap(); } -/* ############################################################################################## */ /* 804DD5DC-804DD5E8 000000 000C+00 8/8 0/0 0/0 .rodata @3766 */ -SECTION_RODATA static u8 const lit_3766[12] = { +static u8 const lit_3766[12] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -COMPILER_STRIP_GATE(0x804DD5DC, &lit_3766); /* 804DD5E8-804DD5F0 00000C 0006+02 0/1 0/0 0/0 .rodata l_arcName */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_arcName[6 + 2 /* padding */] = { - 0x43, - 0x61, - 0x6E, - 0x6F, - 0x65, - 0x00, - /* padding */ - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x804DD5E8, &l_arcName); -#pragma pop +static const char l_arcName[] = "Canoe"; /* 804DD5F0-804DD5F8 000014 0007+01 0/1 0/0 0/0 .rodata l_arcName2 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_arcName2[7 + 1 /* padding */] = { - 0x43, - 0x61, - 0x6E, - 0x6F, - 0x65, - 0x42, - 0x00, - /* padding */ - 0x00, -}; -COMPILER_STRIP_GATE(0x804DD5F0, &l_arcName2); -#pragma pop +static const char l_arcName2[] = "CanoeB"; /* 804DD5F8-804DD600 00001C 0008+00 0/1 0/0 0/0 .rodata l_arcName3 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_arcName3[8] = { - 0x43, 0x61, 0x6E, 0x6F, 0x65, 0x45, 0x33, 0x00, -}; -COMPILER_STRIP_GATE(0x804DD5F8, &l_arcName3); -#pragma pop +static const char l_arcName3[] = "CanoeE3"; /* 804DD600-804DD614 000024 0014+00 2/3 0/0 0/0 .rodata l_cylOffsetZ */ -SECTION_RODATA static u8 const l_cylOffsetZ[20] = { - 0x43, 0x48, 0x00, 0x00, 0x42, 0xDC, 0x00, 0x00, 0x41, 0xA0, - 0x00, 0x00, 0xC2, 0x8C, 0x00, 0x00, 0xC3, 0x20, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x804DD600, &l_cylOffsetZ); - -/* 804DD614-804DD618 000038 0004+00 0/1 0/0 0/0 .rodata @4328 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4328 = -80.0f; -COMPILER_STRIP_GATE(0x804DD614, &lit_4328); -#pragma pop - -/* 804DD618-804DD61C 00003C 0004+00 0/1 0/0 0/0 .rodata @4329 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4329 = -40.0f; -COMPILER_STRIP_GATE(0x804DD618, &lit_4329); -#pragma pop - -/* 804DD61C-804DD620 000040 0004+00 0/1 0/0 0/0 .rodata @4330 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4330 = -230.0f; -COMPILER_STRIP_GATE(0x804DD61C, &lit_4330); -#pragma pop - -/* 804DD620-804DD624 000044 0004+00 0/1 0/0 0/0 .rodata @4331 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4331 = 80.0f; -COMPILER_STRIP_GATE(0x804DD620, &lit_4331); -#pragma pop - -/* 804DD624-804DD628 000048 0004+00 0/1 0/0 0/0 .rodata @4332 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4332 = 90.0f; -COMPILER_STRIP_GATE(0x804DD624, &lit_4332); -#pragma pop - -/* 804DD628-804DD62C 00004C 0004+00 0/1 0/0 0/0 .rodata @4333 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4333 = 280.0f; -COMPILER_STRIP_GATE(0x804DD628, &lit_4333); -#pragma pop - -/* 804DD62C-804DD630 000050 0004+00 0/1 0/0 0/0 .rodata @4334 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4334 = 10.0f; -COMPILER_STRIP_GATE(0x804DD62C, &lit_4334); -#pragma pop - -/* 804DD630-804DD634 000054 0004+00 0/2 0/0 0/0 .rodata @4335 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4335 = 60.0f; -COMPILER_STRIP_GATE(0x804DD630, &lit_4335); -#pragma pop - -/* 804DD634-804DD638 000058 0004+00 0/3 0/0 0/0 .rodata @4336 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4336 = 40.0f; -COMPILER_STRIP_GATE(0x804DD634, &lit_4336); -#pragma pop - -/* 804DD6E8-804DD6E8 00010C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_804DD6E8 = "F_SP127"; -#pragma pop +static const f32 l_cylOffsetZ[5] = {200.0f, 110.0f, 20.0f, -70.0f, -160.0f}; /* 804DD6F0-804DD734 000000 0044+00 1/1 0/0 0/0 .data l_cylSrc */ static dCcD_SrcCyl l_cylSrc = { @@ -347,18 +96,851 @@ static dCcD_SrcCyl l_cylSrc = { }; /* 804DA740-804DAB18 0002E0 03D8+00 1/1 0/0 0/0 .text create__9daCanoe_cFv */ -void daCanoe_c::create() { - // NONMATCHING +int daCanoe_c::create() { + fopAcM_SetupActor(this, daCanoe_c); + + if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0) { + if (!dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[463])) { + return cPhs_ERROR_e; + } + + if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[464])) { + fopAcM_SetParam(this, 2); + } else { + fopAcM_SetParam(this, 1); + } + } + + u32 heap_size = 0x1810; + if (fopAcM_GetParam(this) == 2) { + mArcName = l_arcName3; + } else if (fopAcM_GetParam(this) == 1) { + mArcName = l_arcName; + heap_size = 0x1EB0; + } else { + mArcName = l_arcName2; + } + + int phase_state = dComIfG_resLoad(&mPhaseReq, mArcName); + if (phase_state == cPhs_COMPLEATE_e) { + if (!fopAcM_entrySolidHeap(this, daCanoe_createHeap, heap_size)) { + return cPhs_ERROR_e; + } + + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + fopAcM_SetMin(this, -80.0f, -40.0f, -230.0f); + fopAcM_SetMax(this, 80.0f, 90.0f, 280.0f); + + mCcStts.Init(200, 0, this); + mCcStts.SetRoomId(fopAcM_GetRoomNo(this)); + + setFrontBackPos(); + mOldFrontPos = mFrontPos; + mOldBackPos = mBackPos; + + for (int i = 0; i < 3; i++) { + mAcchCir[i][0].SetWall(10.0f, 60.0f); + mAcchCir[i][1].SetWall(40.0f, 60.0f); + mAcchCir[i][2].SetWall(80.0f, 60.0f); + } + + mAcch[0].Set(this, 3, mAcchCir[0]); + mAcch[1].Set(&mFrontPos, &mOldFrontPos, this, 3, mAcchCir[1], fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); + mAcch[2].Set(&mBackPos, &mOldBackPos, this, 3, mAcchCir[2], fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); + + mAcch[1].ClrWaterNone(); + mAcch[1].SetWtrChkMode(2); + mAcch[2].ClrWaterNone(); + mAcch[2].SetWtrChkMode(2); + mAcch[0].ClrWaterNone(); + mAcch[0].SetWtrChkMode(2); + + dCcD_Cyl* cyl = mCcCyl; + for (int i = 0; i < 5; i++, cyl++) { + cyl->Set(l_cylSrc); + cyl->SetStts(&mCcStts); + } + + tevStr.room_no = fopAcM_GetRoomNo(this); + mReverb = dComIfGp_getReverb(fopAcM_GetRoomNo(this)); + mAimAngle = shape_angle.y; + attention_info.distances[fopAc_attn_ETC_e] = 32; + mRodID = fpcM_ERROR_PROCESS_ID_e; + setMatrix(); + } + + return phase_state; +} + +/* 804DAE88-804DAEA8 000A28 0020+00 1/0 0/0 0/0 .text daCanoe_Create__FP10fopAc_ac_c */ +static int daCanoe_Create(fopAc_ac_c* i_this) { + daCanoe_c* a_this = (daCanoe_c*)i_this; + fpc_ProcID id = fopAcM_GetID(i_this); + return a_this->create(); +} + +/* 804DAEA8-804DAFE0 000A48 0138+00 1/1 0/0 0/0 .text __dt__9daCanoe_cFv */ +daCanoe_c::~daCanoe_c() { + dComIfG_resDelete(&mPhaseReq, mArcName); + mSound.deleteObject(); +} + +/* 804DAFE0-804DB008 000B80 0028+00 1/0 0/0 0/0 .text daCanoe_Delete__FP9daCanoe_c */ +static int daCanoe_Delete(daCanoe_c* i_this) { + fpc_ProcID id = fopAcM_GetID(i_this); + i_this->~daCanoe_c(); + return 1; +} + +/* 804DB008-804DB0B0 000BA8 00A8+00 1/1 0/0 0/0 .text setRoomInfo__9daCanoe_cFv */ +void daCanoe_c::setRoomInfo() { + int room_no; + if (mAcch[0].GetGroundH() != -1000000000.0f) { + room_no = dComIfG_Bgsp().GetRoomId(mAcch[0].m_gnd); + tevStr.YukaCol = dComIfG_Bgsp().GetPolyColor(mAcch[0].m_gnd); + } else { + room_no = dComIfGp_roomControl_getStayNo(); + } + + if (room_no != fopAcM_GetRoomNo(this)) { + tevStr.room_no = room_no; + mReverb = dComIfGp_getReverb(room_no); + mCcStts.SetRoomId(room_no); + fopAcM_SetRoomNo(this, room_no); + } +} + +/* 804DB0B0-804DB3F4 000C50 0344+00 2/2 0/0 0/0 .text setMatrix__9daCanoe_cFv */ +void daCanoe_c::setMatrix() { + f32 var_f29; + if (mShapeOffsetY > 5.0f) { + var_f29 = 5.0f; + } else if (mShapeOffsetY < -5.0f) { + var_f29 = -5.0f; + } else { + var_f29 = mShapeOffsetY; + } + + f32 var_f31 = 0.1f; + if (fabsf(speedF) < 1.0f) { + var_f31 *= 0.65f; + } + + if (!daAlink_getAlinkActorClass()->checkCanoeRideOwn(this) || daAlink_getAlinkActorClass()->checkFishingRodEquip()) { + var_f31 *= 0.5f; + } + + field_0x1470 -= var_f31 * cM_fsin(0.31415927f * var_f29); + + if (fabsf(mShapeOffsetY) < 0.05f && fabsf(field_0x1470) < 0.5f) { + field_0x1470 *= 1.4f; + + f32 var_f28; + if (field_0x1470 >= 0.0f) { + var_f28 = -1.0f; + } else { + var_f28 = 1.0f; + } + + if (fabsf(field_0x1470) < 0.0001f) { + field_0x1470 = 0.5f * var_f28; + } + } else if (fabsf(field_0x1470) < 0.0001f && fabsf(mShapeOffsetY) >= 0.05f) { + if (mShapeOffsetY > 0.0f) { + field_0x1470 = -0.5f; + } else { + field_0x1470 = 0.5f; + } + } + + mShapeOffsetY += field_0x1470; + + f32 temp_f30 = 5.0f; + if (mShapeOffsetY > temp_f30) { + mShapeOffsetY = temp_f30; + field_0x1470 = 0.0f; + } else if (mShapeOffsetY < -temp_f30) { + mShapeOffsetY = -temp_f30; + field_0x1470 = 0.0f; + } else if (fabsf(mShapeOffsetY) > 3.0f) { + cLib_chaseF(&mShapeOffsetY, 0.0f, 0.015f); + field_0x1470 *= 0.97f; + } + + mDoMtx_stack_c::transS(current.pos.x, current.pos.y + mShapeOffsetY, current.pos.z); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); + mpMaskModel->setBaseTRMtx(mDoMtx_stack_c::get()); + + attention_info.position.set(current.pos.x - (35.0f * cM_ssin(shape_angle.y)), 40.0f + current.pos.y, current.pos.z - (35.0f * cM_scos(shape_angle.y))); + eyePos = attention_info.position; +} + +/* 804DB3F4-804DB578 000F94 0184+00 1/1 0/0 0/0 .text setCollision__9daCanoe_cFv */ +void daCanoe_c::setCollision() { + mCcStts.Move(); + + f32 temp_f31 = cM_ssin(shape_angle.y); + f32 temp_f30 = cM_scos(shape_angle.y); + + cXyz cyl_center; + cyl_center.y = current.pos.y - 30.0f; + + dCcD_Cyl* cyl = mCcCyl; + const f32* offset_z = l_cylOffsetZ; + + if (daAlink_getAlinkActorClass()->checkCanoeRideOwn(this)) { + field_0x1441 = 5; + } else if (field_0x1441 != 0) { + field_0x1441--; + } + + for (int i = 0; i < 5; i++, cyl++, offset_z++) { + cyl_center.x = current.pos.x + (*offset_z * temp_f31); + cyl_center.z = current.pos.z + (*offset_z * temp_f30); + cyl->SetC(cyl_center); + dComIfG_Ccsp()->Set(cyl); + + if (field_0x1441 != 0) { + cyl->SetCoVsGrp(0x60); + } else { + cyl->SetCoVsGrp(0x70); + } + } +} + +/* 804DB578-804DB754 001118 01DC+00 1/1 0/0 0/0 .text posMove__9daCanoe_cFv */ +void daCanoe_c::posMove() { + f32 move_speed = speedF * cM_scos(field_0x1448); + current.pos.x += move_speed * cM_ssin(current.angle.y); + current.pos.y -= speedF * cM_ssin(field_0x1448); + current.pos.z += move_speed * cM_scos(current.angle.y); + + current.pos += *mCcStts.GetCCMoveP(); + mCcStts.ClrCcMove(); + + cXyz stream_speed; + int stream_power; + f32 speed_step; + if (fopAcM_getWaterStream(¤t.pos, mAcch[0].m_gnd, &stream_speed, &stream_power, TRUE)) { + stream_speed *= stream_power; + if (mWaterSpeed.abs2XZ() > stream_speed.abs2XZ()) { + speed_step = 3.0f; + } else { + speed_step = 1.0f; + } + } else { + stream_speed = cXyz::Zero; + speed_step = 5.0f; + } + + cLib_addCalcPosXZ(&mWaterSpeed, stream_speed, 0.5f, speed_step, 0.5f); + current.pos.x += mWaterSpeed.x; + current.pos.z += mWaterSpeed.z; +} + +/* 804DB754-804DB7AC 0012F4 0058+00 2/2 0/0 0/0 .text checkGomikabe__9daCanoe_cFR13cBgS_PolyInfo + */ +void daCanoe_c::checkGomikabe(cBgS_PolyInfo& i_polyinfo) { + if (daAlink_c::getMoveBGActorName(i_polyinfo, 1) == PROC_Obj_GOMIKABE) { + ((daObjGOMIKABE_c*)dComIfG_Bgsp().GetActorPointer(i_polyinfo))->BreakSet(); + } +} + +/* 804DB7AC-804DB828 00134C 007C+00 3/3 0/0 0/0 .text setFrontBackPos__9daCanoe_cFv */ +void daCanoe_c::setFrontBackPos() { + f32 temp_f31 = cM_ssin(shape_angle.y); + f32 temp_f1 = cM_scos(shape_angle.y); + mFrontPos.set(current.pos.x + (l_cylOffsetZ[0] * temp_f31), current.pos.y, current.pos.z + (l_cylOffsetZ[0] * temp_f1)); + mBackPos.set(current.pos.x + (l_cylOffsetZ[4] * temp_f31), current.pos.y, current.pos.z + (l_cylOffsetZ[4] * temp_f1)); +} + +/* 804DB828-804DC2E8 0013C8 0AC0+00 1/1 0/0 0/0 .text frontBackBgCheck__9daCanoe_cFv */ +void daCanoe_c::frontBackBgCheck() { + setFrontBackPos(); + mAcch[1].CrrPos(dComIfG_Bgsp()); + mAcch[2].CrrPos(dComIfG_Bgsp()); + + int sp20; + int sp1C; + BOOL front_hit = FALSE; + BOOL back_hit = FALSE; + cM3dGPla sp78; + + if ((mFrontPos.y - mAcch[1].GetGroundH()) < 30.0f) { + mFrontPos = mOldFrontPos; + sp20 = 1; + } else { + sp20 = 0; + } + + if ((mBackPos.y - mAcch[2].GetGroundH()) < 30.0f) { + mBackPos = mOldBackPos; + sp1C = 1; + } else { + sp1C = 0; + } + + cXyz sp6C; + f32 temp_f28 = 60.0f * cM_ssin(shape_angle.y); + f32 temp_f27 = 60.0f * cM_scos(shape_angle.y); + + s16 spA, sp8; + if (sp20 == 0) { + sp6C.set(mFrontPos.x + temp_f28, mFrontPos.y, mFrontPos.z + temp_f27); + mLineChk.Set(¤t.pos, &sp6C, this); + + if (dComIfG_Bgsp().LineCross(&mLineChk)) { + sp6C -= mLineChk.GetCross(); + dComIfG_Bgsp().GetTriPla(mLineChk, &sp78); + + f32 temp_f30 = -sp6C.absXZ() * cM_scos(sp6C.atan2sX_Z() - cM_atan2s(-sp78.mNormal.x, -sp78.mNormal.z)); + mFrontPos.x -= temp_f30 * sp78.mNormal.x; + mFrontPos.y -= sp6C.y; + mFrontPos.z -= temp_f30 * sp78.mNormal.z; + front_hit = TRUE; + + spA = sp78.mNormal.atan2sX_Z(); + checkGomikabe(mLineChk); + } else if (mAcch[1].ChkWallHit()) { + front_hit = TRUE; + for (int i = 0; i < 3; i++) { + if (mAcchCir[1][i].ChkWallHit()) { + spA = mAcchCir[1][i].GetWallAngleY(); + checkGomikabe(mAcchCir[1][i]); + } + } + } + } + + if (sp1C == 0) { + sp6C.set(mBackPos.x - temp_f28, mBackPos.y, mBackPos.z - temp_f27); + mLineChk.Set(¤t.pos, &sp6C, this); + + if (dComIfG_Bgsp().LineCross(&mLineChk)) { + sp6C -= mLineChk.GetCross(); + dComIfG_Bgsp().GetTriPla(mLineChk, &sp78); + + f32 temp_f30_2 = -sp6C.absXZ() * cM_scos(sp6C.atan2sX_Z() - cM_atan2s(-sp78.mNormal.x, -sp78.mNormal.z)); + mBackPos.x -= temp_f30_2 * sp78.mNormal.x; + mBackPos.y -= sp6C.y; + mBackPos.z -= temp_f30_2 * sp78.mNormal.z; + back_hit = TRUE; + + sp8 = sp78.mNormal.atan2sX_Z(); + checkGomikabe(mLineChk); + } else if (mAcch[2].ChkWallHit()) { + back_hit = TRUE; + for (int i = 0; i < 3; i++) { + if (mAcchCir[2][i].ChkWallHit()) { + sp8 = mAcchCir[2][i].GetWallAngleY(); + checkGomikabe(mAcchCir[2][i]); + } + } + } + } + + if (mHitInvulnerabilityTimer > 0) { + mHitInvulnerabilityTimer--; + } + + if (daAlink_getAlinkActorClass()->checkCanoeSlider()) { + for (int i = 0; i < 3; i++) { + mAcchCir[i][1].SetWall(-50.0f, 60.0f); + } + + if (mWaterSpeed.abs2XZ() > 400.0f && (front_hit || back_hit)) { + if (!mIsSliderHit && mHitInvulnerabilityTimer == 0) { + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER6, 0xF, cXyz(0.0f, 1.0f, 0.0f)); + mIsSliderHit = TRUE; + mHitInvulnerabilityTimer = 30; + field_0x1490 = 0; + mHitCount++; + dMeter2Info_setMiniGameCount(mHitCount); + + if (field_0x1450 < 0) { + field_0x1450 -= 0x100; + } else { + field_0x1450 += 0x100; + } + + if (front_hit != 0) { + field_0x1460 = spA; + } else { + field_0x1460 = sp8; + } + + mWaterSpeed *= 0.6f; + daAlink_getAlinkActorClass()->onCanoeItemCancel(); + + if (dMeter2Info_getNowCount() != 0) { + dMeter2Info_setNowCount(dMeter2Info_getNowCount() - 1); + mDoAud_seStart(Z2SE_SY_MG_CANOE_SCORE_DW, NULL, 0, 0); + } + + mSound.startSound(Z2SE_AL_CANOE_COL, 0, -1); + } + } else { + mIsSliderHit = FALSE; + } + } + + cXyz sp60 = mFrontPos - mBackPos; + f32 var_f29 = sp60.absXZ(); + if (var_f29 > 1.0f) { + var_f29 = 1.0f / var_f29; + } else { + var_f29 = 1.0f; + } + + shape_angle.y = sp60.atan2sX_Z(); + current.angle.y = shape_angle.y; + + f32 max_speed = daAlink_getAlinkActorClass()->getCanoeMaxSpeed(); + s16 var_r27; + if (front_hit != 0 || sp20 != 0) { + current.pos = mFrontPos - (sp60 * (l_cylOffsetZ[0] / (l_cylOffsetZ[0] - l_cylOffsetZ[4]))); + setFrontBackPos(); + + if (speedF > 0.0f) { + if (sp20 != 0) { + speedF = 0.0f; + } else { + var_r27 = (shape_angle.y + 0x8000) - spA; + if (abs(var_r27) < 0x4000) { + max_speed *= 1.0f - (0.6f * cM_scos(var_r27)); + if (speedF > max_speed) { + speedF = max_speed; + } + } + } + } + } else if (sp1C != 0 || back_hit != 0) { + current.pos = mBackPos - (sp60 * (l_cylOffsetZ[4] / (l_cylOffsetZ[0] - l_cylOffsetZ[4]))); + setFrontBackPos(); + + if (speedF < 0.0f) { + if (sp1C != 0) { + speedF = 0.0f; + } else { + var_r27 = shape_angle.y - sp8; + if (abs(var_r27) < 0x4000) { + max_speed *= -(1.0f - (0.6f * cM_scos(var_r27))); + if (speedF < max_speed) { + speedF = max_speed; + } + } + } + } + } + + if (mHitInvulnerabilityTimer != 0) { + if ((s16)(shape_angle.y - field_0x1460) >= 0) { + var_r27 = field_0x1460 + 0x4000; + } else { + var_r27 = field_0x1460 - 0x4000; + } + cLib_addCalcAngleS2(&shape_angle.y, var_r27, 4, 0x400); + current.angle.y = shape_angle.y; + + current.pos.x += mHitInvulnerabilityTimer * cM_ssin(field_0x1460); + current.pos.z += mHitInvulnerabilityTimer * cM_scos(field_0x1460); + setFrontBackPos(); + } +} + +UNK_REL_BSS + +/* 804DC330-804DC554 001ED0 0224+00 1/1 0/0 0/0 .text setPaddleEffect__9daCanoe_cFv */ +void daCanoe_c::setPaddleEffect() { + static cXyz paddleRippleScale(0.7f, 0.7f, 0.7f); + + daAlink_c* player = daAlink_getAlinkActorClass(); + if (player->checkCanoePaddleGrab(this)) { + if (mPaddleWaterType == 4) { + mPaddleWaterType = 1; + return; + } + + if (mPaddleWaterType == 0) { + mPaddleWaterType = 2; + return; + } + + cXyz paddle_top; + cXyz sp20; + cXyz* local_paddle_top = daAlink_c::getCanoeLocalPaddleTop(); + mDoMtx_multVec(mpPaddleModel->getBaseTRMtx(), local_paddle_top, &paddle_top); + + if (fopAcM_wt_c::waterCheck(&paddle_top) && paddle_top.y < fopAcM_wt_c::getWaterY()) { + cXyz sp14; + mDoMtx_multVecZero(mpPaddleModel->getBaseTRMtx(), &sp14); + + cXyz sp8 = paddle_top - sp14; + if (sp8.y > -1.0f) { + sp8.y = -1.0f; + } + + sp8 *= (fopAcM_wt_c::getWaterY() - sp14.y) / sp8.y; + sp14 += sp8; + sp14.y = fopAcM_wt_c::getWaterY(); + + dComIfGp_particle_setWaterRipple(&field_0x1480, *fopAcM_wt_c::getWaterCheck(), &sp14, speedF, &tevStr, &paddleRippleScale, fopAcM_GetRoomNo(this)); + + if (mPaddleWaterType == 2) { + if (!player->checkCanoeWait() && !player->checkCanoeSubjectivity()) { + fopKyM_createWpillar(&sp14, 0.3f, 2); + } + mPaddleWaterType = 3; + } else { + mPaddleWaterType = 1; + } + } else { + mPaddleWaterType = 2; + } + } else { + mPaddleWaterType = 0; + } +} + +/* 804DC554-804DC7B4 0020F4 0260+00 1/1 0/0 0/0 .text setCanoeSliderEffect__9daCanoe_cFv + */ +void daCanoe_c::setCanoeSliderEffect() { + if (daAlink_getAlinkActorClass()->checkCanoeSlider()) { + if (mWaterSpeed.abs2XZ() > 25.0f || fabsf(speedF) > 5.0f) { + u32* emitter_id = field_0x1488; + for (int i = 0; i < 2; i++, emitter_id++) { + static u16 const effName[] = {0x8A5A, 0x8A5B}; + *emitter_id = dComIfGp_particle_set(*emitter_id, effName[i], ¤t.pos, &tevStr, &shape_angle, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(*emitter_id); + if (emitter != NULL) { + emitter->setGlobalRTMatrix(mpModel->getBaseTRMtx()); + } + } + } + + JPABaseEmitter* temp_r3_3 = dComIfGp_particle_getEmitter(field_0x1490); + if ((temp_r3_3 != NULL && !temp_r3_3->isEnableDeleteEmitter()) || mHitInvulnerabilityTimer == 30) { + field_0x1490 = dComIfGp_particle_set(field_0x1490, 0x8AA6, ¤t.pos, &tevStr, &shape_angle, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + + JPABaseEmitter* temp_r3_4 = dComIfGp_particle_getEmitter(field_0x1490); + if (temp_r3_4 != NULL) { + temp_r3_4->setGlobalRTMatrix(mpModel->getBaseTRMtx()); + } + } + + cXyz sp28 = daAlink_getAlinkActorClass()->current.pos + (current.pos - old.pos); + fopAcIt_Executor((fopAcIt_ExecutorFunc)daCanoe_searchTagWaterFall, &sp28); + } +} + +/* 804DC7B4-804DD33C 002354 0B88+00 1/1 0/0 0/0 .text execute__9daCanoe_cFv */ +int daCanoe_c::execute() { + daAlink_c* player = daAlink_getAlinkActorClass(); + mOldFrontPos = mFrontPos; + mOldBackPos = mBackPos; + +#ifdef DEBUG + if (player->checkCanoeRideOwn(this) && daAlink_c::checkDebugMoveInput()) { + if (l_debugMode) { + l_debugMode = FALSE; + } else { + l_debugMode = TRUE; + } + } + + if (l_debugMode && player->checkCanoeRideOwn(this)) { + f32 move_speed = 50.0f; + if (mDoCPd_c::getHoldLockR(PAD_1)) { + move_speed = 100.0f; + } + + if (mDoCPd_c::getHoldY(PAD_1)) { + current.pos.y += move_speed; + mFrontPos.y += move_speed; + mBackPos.y += move_speed; + } else if (mDoCPd_c::getHoldX(PAD_1)) { + current.pos.y -= move_speed; + mFrontPos.y -= move_speed; + mBackPos.y -= move_speed; + } + + s16 temp_r26 = mDoCPd_c::getStickAngle3D(PAD_1); + s16 move_angle = (dCam_getControledAngleY(dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0))) + temp_r26) - 0x8000; + + current.pos.x += move_speed * mDoCPd_c::getStickValue(PAD_1) * cM_ssin(move_angle); + mFrontPos.x += move_speed * mDoCPd_c::getStickValue(PAD_1) * cM_ssin(move_angle); + mBackPos.x += move_speed * mDoCPd_c::getStickValue(PAD_1) * cM_ssin(move_angle); + current.pos.z += move_speed * mDoCPd_c::getStickValue(PAD_1) * cM_scos(move_angle); + mFrontPos.z += move_speed * mDoCPd_c::getStickValue(PAD_1) * cM_scos(move_angle); + mBackPos.z += move_speed * mDoCPd_c::getStickValue(PAD_1) * cM_scos(move_angle); + + old.pos = current.pos; + mOldFrontPos = mFrontPos; + mOldBackPos = mBackPos; + } else +#endif + { + s16 sp12 = shape_angle.y; + s16 var_r27; + if (mIsForceAimAngle) { + var_r27 = mAimAngle - shape_angle.y; + s16 sp10 = player->getCanoeMaxRotSpeed(); + if (var_r27 > sp10) { + var_r27 = sp10; + } else if (var_r27 < -sp10) { + var_r27 = -sp10; + } + mIsForceAimAngle = FALSE; + } else { + var_r27 = 0; + if (player->checkCanoeSlider() && mWaterSpeed.abs2XZ() > 400.0f) { + s16 spE = mWaterSpeed.atan2sX_Z(); + if (cLib_distanceAngleS(shape_angle.y, spE) > 0x4000) { + spE += 0x8000; + } + cLib_addCalcAngleS2(&shape_angle.y, spE, 4, 75); + } + } + + cLib_addCalcAngleS(&field_0x144e, var_r27, 5, 15, 5); + shape_angle.y += field_0x144e; + current.angle.y = shape_angle.y; + + if (field_0x1456 != 0) { + field_0x1456--; + shape_angle.z += field_0x1454 * cM_fsin(0.20943952f * field_0x1456); + } + + if (speedF >= 0.0f) { + var_r27 = 6.0f * (s16)(shape_angle.y - sp12); + } else { + var_r27 = 6.0f * (s16)(sp12 - shape_angle.y); + } + + var_r27 -= shape_angle.z; + if (var_r27 > 0x2000) { + var_r27 = 0x2000; + } else if (var_r27 < -0x2000) { + var_r27 = -0x2000; + } + + var_r27 *= 2; + + s16 spC, spA; + if (!player->checkCanoeRideOwn(this) && player->checkFishingRodEquip()) { + spC = 25; + spA = 30; + } else { + spC = 50; + spA = 65; + } + + field_0x1450 += spA * cM_ssin(var_r27); + + if (abs(var_r27) < 0x100 && abs(field_0x1450) < spC) { + field_0x1450 = field_0x1450 * (1.4f + cM_rndF(1.0f)); + + f32 var_f30; + if (field_0x1450 >= 0.0f) { + var_f30 = -1.0f; + } else { + var_f30 = 1.0f; + } + + if (fabsf(speedF) < 1.0f) { + field_0x1450 *= 0.65f; + } + + if (!player->checkCanoeRideOwn(this) && player->checkFishingRodEquip()) { + field_0x1450 *= 0.5f; + } + + if (field_0x1450 == 0) { + field_0x1450 = spC * var_f30; + } + } + + s16 sp8; + if (player->checkCanoeRideOwn(this) && player->checkFishingRodEquip()) { + sp8 = 0x40; + } else { + sp8 = 0x100; + } + + if (field_0x1450 > sp8) { + field_0x1450 = sp8; + } else if (field_0x1450 < -sp8) { + field_0x1450 = -sp8; + } + + shape_angle.z += field_0x1450; + field_0x1452 = field_0x1452 - (40.0f * cM_ssin(field_0x145a)); + + if (abs(field_0x145a) < 0x164 && abs(field_0x1452) < 5) { + field_0x1452 = field_0x1452 * (1.4f + cM_rndF(1.0f)); + if (field_0x1452 == 0) { + field_0x1452 = 5; + } + } else if (field_0x1452 == 0 && abs(field_0x145a) >= 0x164) { + if (field_0x145a > 0) { + field_0x1452 = -5; + } else { + field_0x1452 = 5; + } + } + + field_0x145a += field_0x1452; + if (!player->checkCanoeRideOwn(this) || player->checkCanoeWait()) { + mAimSpeed = 0.0f; + } + + cLib_addCalc(&speedF, mAimSpeed, 0.5f, player->getCanoeCres(), 0.01f); + + if (speedF > player->getCanoeMaxSpeed()) { + speedF = player->getCanoeMaxSpeed(); + } else if (speedF < -player->getCanoeBackMaxSpeed()) { + speedF = -player->getCanoeBackMaxSpeed(); + } + + posMove(); + frontBackBgCheck(); + mAcch[0].CrrPos(dComIfG_Bgsp()); + + static cXyz bodyRippleScale(2.0f, 2.0f, 2.0f); + + if (mAcch[0].ChkWaterHit()) { + current.pos.y = mAcch[0].m_wtr.GetHeight(); + + if (field_0x1444 != 0 && (!player->checkCanoeSlider() || (dComIfGp_particle_getEmitter(field_0x1488[0]) == NULL && dComIfGp_particle_getEmitter(field_0x1488[1]) == NULL))) { + dComIfGp_particle_setWaterRipple(&field_0x1478, mAcch[0].m_wtr, ¤t.pos, fabsf(speedF), &tevStr, &bodyRippleScale, fopAcM_GetRoomNo(this)); + } + + for (int i = 0; i < 3; i++) { + if (mAcchCir[0][i].ChkWallHit()) { + checkGomikabe(mAcchCir[0][i]); + } + } + } else { + current.pos = old.pos; + setFrontBackPos(); + } + } + + cXyz sp34(mFrontPos); + cXyz sp28(mBackPos); + + if (fopAcM_wt_c::waterCheck(&sp34)) { + sp34.y = fopAcM_wt_c::getWaterY(); + } + + if (fopAcM_wt_c::waterCheck(&sp28)) { + sp28.y = fopAcM_wt_c::getWaterY(); + } + + sp34 -= sp28; + field_0x1448 = sp34.atan2sY_XZ(); + shape_angle.x = field_0x1448 + field_0x145a; + + if (mIsForcePosAngle) { + current.pos = mForcePos; + shape_angle.y = mForceAngle; + current.angle.y = mForceAngle; + setFrontBackPos(); + mIsForcePosAngle = FALSE; + } + + dCcD_Cyl* cyl; + if (checkTandem()) { + cyl = &mCcCyl[1]; + } else { + cyl = &mCcCyl[3]; + } + + if ((mCcCyl[2].ChkCoHit() && mCcCyl[2].GetCoHitAc() == (fopAc_ac_c*)player) || (cyl->ChkCoHit() && cyl->GetCoHitAc() == (fopAc_ac_c*)player)) { + mJumpRideFlg = TRUE; + } else { + mJumpRideFlg = FALSE; + } + + setPaddleEffect(); + setMatrix(); + setCollision(); + setRoomInfo(); + setCanoeSliderEffect(); + + if (!player->checkCanoeRideOwn(this) && speedF < 0.1f && mWaterSpeed.abs2XZ() < 0.1f && !player->checkFishingRodEquip()) { + attention_info.flags |= 0x80; + } else { + attention_info.flags &= ~0x80; + } + + u32 sp1C = 127.0f * (fabsf(speedF) / player->getCanoeMaxSpeed()); + if (sp1C > 127) { + sp1C = 127; + } + + mSound.startLevelSound(Z2SE_OBJ_CANOE_WAVE, sp1C, -1); + mSound.framework(0, mReverb); + return 1; +} + +/* 804DD33C-804DD35C 002EDC 0020+00 1/0 0/0 0/0 .text daCanoe_Execute__FP9daCanoe_c */ +static int daCanoe_Execute(daCanoe_c* i_this) { + return i_this->execute(); +} + +/* 804DD35C-804DD554 002EFC 01F8+00 1/1 0/0 0/0 .text draw__9daCanoe_cFv */ +int daCanoe_c::draw() { + field_0x1444 = 1; + + g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr); + mDoExt_modelUpdateDL(mpModel); + + dComIfGd_setXluListBG(); + mDoExt_modelUpdateDL(mpMaskModel); + dComIfGd_setList(); + + daAlink_c* player = daAlink_getAlinkActorClass(); + if (!player->checkPlayerNoDraw() || !player->checkCanoePaddleGrab(this)) { + if (player->checkCanoePaddleGrab(this)) { + mpPaddleModel->setBaseTRMtx(player->getCanoePaddleMatrix()); + } else { + mDoMtx_stack_c::copy(mpModel->getBaseTRMtx()); + + f32 trans_z = 23.0f; + if (checkTandem()) { + trans_z += 175.0f; + } + + mDoMtx_stack_c::transM(20.0f, 29.0f, trans_z); + mDoMtx_stack_c::XYZrotM(cM_deg2s(-2.0f), cM_deg2s(12.0f), cM_deg2s(177.0f)); + mpPaddleModel->setBaseTRMtx(mDoMtx_stack_c::get()); + } + + g_env_light.setLightTevColorType_MAJI(mpPaddleModel, &tevStr); + mDoExt_modelUpdateDL(mpPaddleModel); + } + + mShadowId = dComIfGd_setShadow(mShadowId, 1, mpModel, ¤t.pos, 800.0f, 0.0f, current.pos.y, mAcch[0].GetGroundH(), mAcch[0].m_gnd, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); + dComIfGd_addRealShadow(mShadowId, mpPaddleModel); + return 1; +} + +/* 804DD554-804DD574 0030F4 0020+00 1/0 0/0 0/0 .text daCanoe_Draw__FP9daCanoe_c */ +static int daCanoe_Draw(daCanoe_c* i_this) { + return i_this->draw(); } -/* ############################################################################################## */ /* 804DD734-804DD754 -00001 0020+00 1/0 0/0 0/0 .data l_daCanoe_Method */ static actor_method_class l_daCanoe_Method = { - (process_method_func)daCanoe_Create__FP10fopAc_ac_c, - (process_method_func)daCanoe_Delete__FP9daCanoe_c, - (process_method_func)daCanoe_Execute__FP9daCanoe_c, + (process_method_func)daCanoe_Create, + (process_method_func)daCanoe_Delete, + (process_method_func)daCanoe_Execute, 0, - (process_method_func)daCanoe_Draw__FP9daCanoe_c, + (process_method_func)daCanoe_Draw, }; /* 804DD754-804DD784 -00001 0030+00 0/0 0/0 1/0 .data g_profile_CANOE */ @@ -379,808 +961,5 @@ extern actor_process_profile_definition g_profile_CANOE = { fopAc_CULLBOX_CUSTOM_e, // cullType }; -/* 804DD784-804DD790 000094 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGPla */ -SECTION_DATA extern void* __vt__8cM3dGPla[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGPlaFv, -}; - -/* 804DD790-804DD79C 0000A0 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, -}; - -/* 804DD79C-804DD7A8 0000AC 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, -}; - -/* 804DD7A8-804DD7B4 0000B8 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, -}; - -/* 804DD7B4-804DD7D8 0000C4 0024+00 2/2 0/0 0/0 .data __vt__13dBgS_LinkAcch */ -SECTION_DATA extern void* __vt__13dBgS_LinkAcch[9] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__13dBgS_LinkAcchFv, - (void*)NULL, - (void*)NULL, - (void*)func_804DD5C4, - (void*)NULL, - (void*)NULL, - (void*)func_804DD5BC, -}; - -/* 804DD7D8-804DD7E4 0000E8 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGAab */ -SECTION_DATA extern void* __vt__8cM3dGAab[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGAabFv, -}; - -/* 804DD7E4-804DD7F0 0000F4 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGCyl */ -SECTION_DATA extern void* __vt__8cM3dGCyl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGCylFv, -}; - -/* 804DAB18-804DABE4 0006B8 00CC+00 2/2 0/0 0/0 .text __dt__8dCcD_CylFv */ -// dCcD_Cyl::~dCcD_Cyl() { -extern "C" void __dt__8dCcD_CylFv() { - // NONMATCHING -} - -/* 804DABE4-804DAC68 000784 0084+00 1/1 0/0 0/0 .text __ct__8dCcD_CylFv */ -// dCcD_Cyl::dCcD_Cyl() { -extern "C" void __ct__8dCcD_CylFv() { - // NONMATCHING -} - -/* 804DAC68-804DACB0 000808 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ -// cM3dGCyl::~cM3dGCyl() { -extern "C" void __dt__8cM3dGCylFv() { - // NONMATCHING -} - -/* 804DACB0-804DACF8 000850 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 804DACF8-804DAD68 000898 0070+00 5/4 0/0 0/0 .text __dt__13dBgS_LinkAcchFv */ -// dBgS_LinkAcch::~dBgS_LinkAcch() { -extern "C" void __dt__13dBgS_LinkAcchFv() { - // NONMATCHING -} - -/* 804DAD68-804DADBC 000908 0054+00 1/1 0/0 0/0 .text __ct__13dBgS_LinkAcchFv */ -// dBgS_LinkAcch::dBgS_LinkAcch() { -extern "C" void __ct__13dBgS_LinkAcchFv() { - // NONMATCHING -} - -/* 804DADBC-804DAE2C 00095C 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_AcchCirFv */ -// dBgS_AcchCir::~dBgS_AcchCir() { -extern "C" void __dt__12dBgS_AcchCirFv() { - // NONMATCHING -} - -/* 804DAE2C-804DAE88 0009CC 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING -} - -/* 804DAE88-804DAEA8 000A28 0020+00 1/0 0/0 0/0 .text daCanoe_Create__FP10fopAc_ac_c */ -static void daCanoe_Create(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 804DAEA8-804DAFE0 000A48 0138+00 1/1 0/0 0/0 .text __dt__9daCanoe_cFv */ -daCanoe_c::~daCanoe_c() { - // NONMATCHING -} - -/* 804DAFE0-804DB008 000B80 0028+00 1/0 0/0 0/0 .text daCanoe_Delete__FP9daCanoe_c */ -static void daCanoe_Delete(daCanoe_c* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804DD638-804DD63C 00005C 0004+00 1/1 0/0 0/0 .rodata @4480 */ -SECTION_RODATA static f32 const lit_4480 = -1000000000.0f; -COMPILER_STRIP_GATE(0x804DD638, &lit_4480); - -/* 804DB008-804DB0B0 000BA8 00A8+00 1/1 0/0 0/0 .text setRoomInfo__9daCanoe_cFv */ -void daCanoe_c::setRoomInfo() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804DD63C-804DD640 000060 0004+00 0/3 0/0 0/0 .rodata @4626 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4626 = 5.0f; -COMPILER_STRIP_GATE(0x804DD63C, &lit_4626); -#pragma pop - -/* 804DD640-804DD644 000064 0004+00 0/1 0/0 0/0 .rodata @4627 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4627 = -5.0f; -COMPILER_STRIP_GATE(0x804DD640, &lit_4627); -#pragma pop - -/* 804DD644-804DD648 000068 0004+00 0/2 0/0 0/0 .rodata @4628 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4628 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x804DD644, &lit_4628); -#pragma pop - -/* 804DD648-804DD64C 00006C 0004+00 0/2 0/0 0/0 .rodata @4629 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4629 = 13.0f / 20.0f; -COMPILER_STRIP_GATE(0x804DD648, &lit_4629); -#pragma pop - -/* 804DD64C-804DD650 000070 0004+00 0/6 0/0 0/0 .rodata @4630 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4630 = 1.0f; -COMPILER_STRIP_GATE(0x804DD64C, &lit_4630); -#pragma pop - -/* 804DD650-804DD654 000074 0004+00 0/3 0/0 0/0 .rodata @4631 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4631 = 0.5f; -COMPILER_STRIP_GATE(0x804DD650, &lit_4631); -#pragma pop - -/* 804DD654-804DD658 000078 0004+00 0/1 0/0 0/0 .rodata @4632 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_4632 = 0x3EA0D97C; -COMPILER_STRIP_GATE(0x804DD654, &lit_4632); -#pragma pop - -/* 804DD658-804DD65C 00007C 0004+00 0/1 0/0 0/0 .rodata @4633 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4633 = 1.0f / 20.0f; -COMPILER_STRIP_GATE(0x804DD658, &lit_4633); -#pragma pop - -/* 804DD65C-804DD660 000080 0004+00 0/2 0/0 0/0 .rodata @4634 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4634 = 7.0f / 5.0f; -COMPILER_STRIP_GATE(0x804DD65C, &lit_4634); -#pragma pop - -/* 804DD660-804DD664 000084 0004+00 0/4 0/0 0/0 .rodata @4635 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4635 = -1.0f; -COMPILER_STRIP_GATE(0x804DD660, &lit_4635); -#pragma pop - -/* 804DD664-804DD668 000088 0004+00 0/6 0/0 0/0 .rodata @4636 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4636[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x804DD664, &lit_4636); -#pragma pop - -/* 804DD668-804DD66C 00008C 0004+00 0/1 0/0 0/0 .rodata @4637 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_4637 = 0x38D1B717; -COMPILER_STRIP_GATE(0x804DD668, &lit_4637); -#pragma pop - -/* 804DD66C-804DD670 000090 0004+00 0/1 0/0 0/0 .rodata @4638 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4638 = -0.5f; -COMPILER_STRIP_GATE(0x804DD66C, &lit_4638); -#pragma pop - -/* 804DD670-804DD674 000094 0004+00 0/2 0/0 0/0 .rodata @4639 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4639 = 3.0f; -COMPILER_STRIP_GATE(0x804DD670, &lit_4639); -#pragma pop - -/* 804DD674-804DD678 000098 0004+00 0/1 0/0 0/0 .rodata @4640 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_4640 = 0x3C75C28F; -COMPILER_STRIP_GATE(0x804DD674, &lit_4640); -#pragma pop - -/* 804DD678-804DD67C 00009C 0004+00 0/1 0/0 0/0 .rodata @4641 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4641 = 97.0f / 100.0f; -COMPILER_STRIP_GATE(0x804DD678, &lit_4641); -#pragma pop - -/* 804DD67C-804DD680 0000A0 0004+00 0/1 0/0 0/0 .rodata @4642 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4642 = 35.0f; -COMPILER_STRIP_GATE(0x804DD67C, &lit_4642); -#pragma pop - -/* 804DB0B0-804DB3F4 000C50 0344+00 2/2 0/0 0/0 .text setMatrix__9daCanoe_cFv */ -void daCanoe_c::setMatrix() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804DD680-804DD684 0000A4 0004+00 1/2 0/0 0/0 .rodata @4683 */ -SECTION_RODATA static f32 const lit_4683 = 30.0f; -COMPILER_STRIP_GATE(0x804DD680, &lit_4683); - -/* 804DB3F4-804DB578 000F94 0184+00 1/1 0/0 0/0 .text setCollision__9daCanoe_cFv */ -void daCanoe_c::setCollision() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804DD684-804DD68C 0000A8 0008+00 0/3 0/0 0/0 .rodata @4738 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4738[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x804DD684, &lit_4738); -#pragma pop - -/* 804DB578-804DB754 001118 01DC+00 1/1 0/0 0/0 .text posMove__9daCanoe_cFv */ -void daCanoe_c::posMove() { - // NONMATCHING -} - -/* 804DB754-804DB7AC 0012F4 0058+00 2/2 0/0 0/0 .text checkGomikabe__9daCanoe_cFR13cBgS_PolyInfo - */ -void daCanoe_c::checkGomikabe(cBgS_PolyInfo& param_0) { - // NONMATCHING -} - -/* 804DB7AC-804DB828 00134C 007C+00 3/3 0/0 0/0 .text setFrontBackPos__9daCanoe_cFv */ -void daCanoe_c::setFrontBackPos() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804DD68C-804DD694 0000B0 0008+00 0/1 0/0 0/0 .rodata @5087 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_5087[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x804DD68C, &lit_5087); -#pragma pop - -/* 804DD694-804DD69C 0000B8 0008+00 0/1 0/0 0/0 .rodata @5088 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_5088[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x804DD694, &lit_5088); -#pragma pop - -/* 804DD69C-804DD6A4 0000C0 0008+00 0/1 0/0 0/0 .rodata @5089 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_5089[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x804DD69C, &lit_5089); -#pragma pop - -/* 804DD6A4-804DD6A8 0000C8 0004+00 0/1 0/0 0/0 .rodata @5090 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5090 = -50.0f; -COMPILER_STRIP_GATE(0x804DD6A4, &lit_5090); -#pragma pop - -/* 804DD6A8-804DD6AC 0000CC 0004+00 0/2 0/0 0/0 .rodata @5091 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5091 = 400.0f; -COMPILER_STRIP_GATE(0x804DD6A8, &lit_5091); -#pragma pop - -/* 804DD6AC-804DD6B0 0000D0 0004+00 0/1 0/0 0/0 .rodata @5092 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5092 = 3.0f / 5.0f; -COMPILER_STRIP_GATE(0x804DD6AC, &lit_5092); -#pragma pop - -/* 804DB828-804DC2E8 0013C8 0AC0+00 1/1 0/0 0/0 .text frontBackBgCheck__9daCanoe_cFv */ -void daCanoe_c::frontBackBgCheck() { - // NONMATCHING -} - -/* 804DC2E8-804DC330 001E88 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGPlaFv */ -// cM3dGPla::~cM3dGPla() { -extern "C" void __dt__8cM3dGPlaFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804DD6B0-804DD6B4 0000D4 0004+00 0/1 0/0 0/0 .rodata @5172 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5172 = 7.0f / 10.0f; -COMPILER_STRIP_GATE(0x804DD6B0, &lit_5172); -#pragma pop - -/* 804DD6B4-804DD6B8 0000D8 0004+00 0/1 0/0 0/0 .rodata @5173 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5173 = 3.0f / 10.0f; -COMPILER_STRIP_GATE(0x804DD6B4, &lit_5173); -#pragma pop - -/* 804DD7F8-804DD7FC 000008 0001+03 2/2 0/0 0/0 .bss @1109 */ -static u8 lit_1109[1 + 3 /* padding */]; - -/* 804DD7FC-804DD800 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 - -/* 804DD800-804DD804 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 - -/* 804DD804-804DD808 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 - -/* 804DD808-804DD80C 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 - -/* 804DD80C-804DD810 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 - -/* 804DD810-804DD814 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 - -/* 804DD814-804DD818 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 - -/* 804DD818-804DD81C 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 - -/* 804DD81C-804DD820 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 - -/* 804DD820-804DD824 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 - -/* 804DD824-804DD828 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 - -/* 804DD828-804DD82C 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 - -/* 804DD82C-804DD830 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 - -/* 804DD830-804DD834 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 - -/* 804DD834-804DD838 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 - -/* 804DD838-804DD848 000048 000C+04 0/1 0/0 0/0 .bss @5103 */ -#pragma push -#pragma force_active on -static u8 lit_5103[12 + 4 /* padding */]; -#pragma pop - -/* 804DD848-804DD854 000058 000C+00 0/1 0/0 0/0 .bss paddleRippleScale$5102 */ -#pragma push -#pragma force_active on -static u8 paddleRippleScale[12]; -#pragma pop - -/* 804DC330-804DC554 001ED0 0224+00 1/1 0/0 0/0 .text setPaddleEffect__9daCanoe_cFv */ -void daCanoe_c::setPaddleEffect() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804DD6B8-804DD6BC 0000DC 0004+00 0/1 0/0 0/0 .rodata effName$5177 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const effName[4] = { - 0x8A, - 0x5A, - 0x8A, - 0x5B, -}; -COMPILER_STRIP_GATE(0x804DD6B8, &effName); -#pragma pop - -/* 804DD6BC-804DD6C0 0000E0 0004+00 0/1 0/0 0/0 .rodata @5280 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5280 = 25.0f; -COMPILER_STRIP_GATE(0x804DD6BC, &lit_5280); -#pragma pop - -/* 804DC554-804DC7B4 0020F4 0260+00 1/1 0/0 0/0 .text setCanoeSliderEffect__9daCanoe_cFv - */ -void daCanoe_c::setCanoeSliderEffect() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804DD6C0-804DD6C4 0000E4 0004+00 0/1 0/0 0/0 .rodata @5504 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_5504 = 0x3E567750; -COMPILER_STRIP_GATE(0x804DD6C0, &lit_5504); -#pragma pop - -/* 804DD6C4-804DD6C8 0000E8 0004+00 0/1 0/0 0/0 .rodata @5505 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5505 = 6.0f; -COMPILER_STRIP_GATE(0x804DD6C4, &lit_5505); -#pragma pop - -/* 804DD6C8-804DD6CC 0000EC 0004+00 0/1 0/0 0/0 .rodata @5506 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5506 = 1.0f / 100.0f; -COMPILER_STRIP_GATE(0x804DD6C8, &lit_5506); -#pragma pop - -/* 804DD6CC-804DD6D0 0000F0 0004+00 0/1 0/0 0/0 .rodata @5507 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5507 = 2.0f; -COMPILER_STRIP_GATE(0x804DD6CC, &lit_5507); -#pragma pop - -/* 804DD6D0-804DD6D4 0000F4 0004+00 0/1 0/0 0/0 .rodata @5508 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5508 = 127.0f; -COMPILER_STRIP_GATE(0x804DD6D0, &lit_5508); -#pragma pop - -/* 804DD854-804DD864 000064 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 - -/* 804DD864-804DD870 000074 000C+00 0/1 0/0 0/0 .bss bodyRippleScale$5355 */ -#pragma push -#pragma force_active on -static u8 bodyRippleScale[12]; -#pragma pop - -/* 804DC7B4-804DD33C 002354 0B88+00 1/1 0/0 0/0 .text execute__9daCanoe_cFv */ -void daCanoe_c::execute() { - // NONMATCHING -} - -/* 804DD33C-804DD35C 002EDC 0020+00 1/0 0/0 0/0 .text daCanoe_Execute__FP9daCanoe_c */ -static void daCanoe_Execute(daCanoe_c* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804DD6D4-804DD6D8 0000F8 0004+00 0/1 0/0 0/0 .rodata @5573 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5573 = 23.0f; -COMPILER_STRIP_GATE(0x804DD6D4, &lit_5573); -#pragma pop - -/* 804DD6D8-804DD6DC 0000FC 0004+00 0/1 0/0 0/0 .rodata @5574 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5574 = 175.0f; -COMPILER_STRIP_GATE(0x804DD6D8, &lit_5574); -#pragma pop - -/* 804DD6DC-804DD6E0 000100 0004+00 0/1 0/0 0/0 .rodata @5575 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5575 = 20.0f; -COMPILER_STRIP_GATE(0x804DD6DC, &lit_5575); -#pragma pop - -/* 804DD6E0-804DD6E4 000104 0004+00 0/1 0/0 0/0 .rodata @5576 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5576 = 29.0f; -COMPILER_STRIP_GATE(0x804DD6E0, &lit_5576); -#pragma pop - -/* 804DD6E4-804DD6E8 000108 0004+00 0/1 0/0 0/0 .rodata @5577 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5577 = 800.0f; -COMPILER_STRIP_GATE(0x804DD6E4, &lit_5577); -#pragma pop - -/* 804DD35C-804DD554 002EFC 01F8+00 1/1 0/0 0/0 .text draw__9daCanoe_cFv */ -void daCanoe_c::draw() { - // NONMATCHING -} - -/* 804DD554-804DD574 0030F4 0020+00 1/0 0/0 0/0 .text daCanoe_Draw__FP9daCanoe_c */ -static void daCanoe_Draw(daCanoe_c* param_0) { - // NONMATCHING -} - -/* 804DD574-804DD5BC 003114 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} - -/* 804DD5BC-804DD5C4 00315C 0008+00 1/0 0/0 0/0 .text @36@__dt__13dBgS_LinkAcchFv */ -static void func_804DD5BC() { - // NONMATCHING -} - -/* 804DD5C4-804DD5CC 003164 0008+00 1/0 0/0 0/0 .text @20@__dt__13dBgS_LinkAcchFv */ -static void func_804DD5C4() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804DD870-804DD874 000080 0004+00 0/0 0/0 0/0 .bss - * sInstance__40JASGlobalInstance<19JASDefaultBankTable> */ -#pragma push -#pragma force_active on -static u8 data_804DD870[4]; -#pragma pop - -/* 804DD874-804DD878 000084 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14JASAudioThread> */ -#pragma push -#pragma force_active on -static u8 data_804DD874[4]; -#pragma pop - -/* 804DD878-804DD87C 000088 0004+00 0/0 0/0 0/0 .bss sInstance__27JASGlobalInstance<7Z2SeMgr> */ -#pragma push -#pragma force_active on -static u8 data_804DD878[4]; -#pragma pop - -/* 804DD87C-804DD880 00008C 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8Z2SeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_804DD87C[4]; -#pragma pop - -/* 804DD880-804DD884 000090 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SceneMgr> - */ -#pragma push -#pragma force_active on -static u8 data_804DD880[4]; -#pragma pop - -/* 804DD884-804DD888 000094 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2StatusMgr> - */ -#pragma push -#pragma force_active on -static u8 data_804DD884[4]; -#pragma pop - -/* 804DD888-804DD88C 000098 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2DebugSys> - */ -#pragma push -#pragma force_active on -static u8 data_804DD888[4]; -#pragma pop - -/* 804DD88C-804DD890 00009C 0004+00 0/0 0/0 0/0 .bss - * sInstance__36JASGlobalInstance<15JAISoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_804DD88C[4]; -#pragma pop - -/* 804DD890-804DD894 0000A0 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14Z2SoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_804DD890[4]; -#pragma pop - -/* 804DD894-804DD898 0000A4 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12Z2SpeechMgr2> */ -#pragma push -#pragma force_active on -static u8 data_804DD894[4]; -#pragma pop - -/* 804DD898-804DD89C 0000A8 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8JAISeMgr> */ -#pragma push -#pragma force_active on -static u8 data_804DD898[4]; -#pragma pop - -/* 804DD89C-804DD8A0 0000AC 0004+00 0/0 0/0 0/0 .bss sInstance__29JASGlobalInstance<9JAISeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_804DD89C[4]; -#pragma pop - -/* 804DD8A0-804DD8A4 0000B0 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAIStreamMgr> */ -#pragma push -#pragma force_active on -static u8 data_804DD8A0[4]; -#pragma pop - -/* 804DD8A4-804DD8A8 0000B4 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SoundMgr> - */ -#pragma push -#pragma force_active on -static u8 data_804DD8A4[4]; -#pragma pop - -/* 804DD8A8-804DD8AC 0000B8 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAISoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_804DD8A8[4]; -#pragma pop - -/* 804DD8AC-804DD8B0 0000BC 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13JAUSoundTable> */ -#pragma push -#pragma force_active on -static u8 data_804DD8AC[4]; -#pragma pop - -/* 804DD8B0-804DD8B4 0000C0 0004+00 0/0 0/0 0/0 .bss - * sInstance__38JASGlobalInstance<17JAUSoundNameTable> */ -#pragma push -#pragma force_active on -static u8 data_804DD8B0[4]; -#pragma pop - -/* 804DD8B4-804DD8B8 0000C4 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAUSoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_804DD8B4[4]; -#pragma pop - -/* 804DD8B8-804DD8BC 0000C8 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SoundInfo> - */ -#pragma push -#pragma force_active on -static u8 data_804DD8B8[4]; -#pragma pop - -/* 804DD8BC-804DD8C0 0000CC 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2SoundObjMgr> */ -#pragma push -#pragma force_active on -static u8 data_804DD8BC[4]; -#pragma pop - -/* 804DD8C0-804DD8C4 0000D0 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2Audience> - */ -#pragma push -#pragma force_active on -static u8 data_804DD8C0[4]; -#pragma pop - -/* 804DD8C4-804DD8C8 0000D4 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2FxLineMgr> - */ -#pragma push -#pragma force_active on -static u8 data_804DD8C4[4]; -#pragma pop - -/* 804DD8C8-804DD8CC 0000D8 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2EnvSeMgr> - */ -#pragma push -#pragma force_active on -static u8 data_804DD8C8[4]; -#pragma pop - -/* 804DD8CC-804DD8D0 0000DC 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SpeechMgr> - */ -#pragma push -#pragma force_active on -static u8 data_804DD8CC[4]; -#pragma pop - -/* 804DD8D0-804DD8D4 0000E0 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2WolfHowlMgr> */ -#pragma push -#pragma force_active on -static u8 data_804DD8D0[4]; -#pragma pop - -/* 804DD8D4-804DD8D8 0000E4 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14JAUSectionHeap> */ -#pragma push -#pragma force_active on -static u8 data_804DD8D4[4]; -#pragma pop - -/* 804DD6E8-804DD6E8 00010C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +AUDIO_INSTANCES +JAUSectionHeap* JASGlobalInstance::sInstance; diff --git a/src/d/actor/d_a_npc_zra.inc b/src/d/actor/d_a_npc_zra.inc index 4f9b1c2044..492150b24d 100644 --- a/src/d/actor/d_a_npc_zra.inc +++ b/src/d/actor/d_a_npc_zra.inc @@ -2236,15 +2236,18 @@ BOOL daNpc_zrA_c::swimGoalRiverDescend(void* param_0) { if (player->current.pos.y < -14100.0f) { if (!daNpcF_chkEvtBit(0x60)) { mOrderEvtNo = EVT_THANKS_BLAST; - } else if (dMeter2Info_getNowCount() >= 30) { - dComIfGs_onSwitch(mSwitch1, fopAcM_GetRoomNo(this)); - dComIfGs_onSwitch(mSwitch2, fopAcM_GetRoomNo(this)); - mOrderEvtNo = EVT_THANKS_BLAST; - } else if (dMeter2Info_getNowCount() >= 25) { - dComIfGs_onSwitch(mSwitch1, fopAcM_GetRoomNo(this)); - mOrderEvtNo = EVT_THANKS_BLAST; } else { - mOrderEvtNo = EVT_RESULT_ANNOUNCE; + int count = dMeter2Info_getNowCount(); + if (count >= 30) { + dComIfGs_onSwitch(mSwitch1, fopAcM_GetRoomNo(this)); + dComIfGs_onSwitch(mSwitch2, fopAcM_GetRoomNo(this)); + mOrderEvtNo = EVT_THANKS_BLAST; + } else if (count >= 25) { + dComIfGs_onSwitch(mSwitch1, fopAcM_GetRoomNo(this)); + mOrderEvtNo = EVT_THANKS_BLAST; + } else { + mOrderEvtNo = EVT_RESULT_ANNOUNCE; + } } } else { mPath.getDstPos(current.pos, pos); diff --git a/src/d/d_msg_class.cpp b/src/d/d_msg_class.cpp index fe39b46ffe..e20d3f84ab 100644 --- a/src/d/d_msg_class.cpp +++ b/src/d/d_msg_class.cpp @@ -1688,8 +1688,7 @@ bool jmessage_tMeasureProcessor::do_tag(u32 i_tag, void const* i_data, u32 i_siz dMsgUnit_setTag(0x10001, (u32)dComIfGp_getMessageCountNumber(), buffer_0); break; case 7: - u8 now_count = dMeter2Info_getNowCount(); - dMsgUnit_setTag(8, now_count, buffer_0); + dMsgUnit_setTag(8, dMeter2Info_getNowCount(), buffer_0); break; default: return false; diff --git a/src/f_op/f_op_actor_mng.cpp b/src/f_op/f_op_actor_mng.cpp index 919c0997c0..655aafbb6e 100644 --- a/src/f_op/f_op_actor_mng.cpp +++ b/src/f_op/f_op_actor_mng.cpp @@ -2023,16 +2023,16 @@ void fpoAcM_relativePos(fopAc_ac_c const* i_actor, cXyz const* i_pos, cXyz* o_po /* 8001D9A8-8001DAE4 0182E8 013C+00 0/0 1/1 9/9 .text * fopAcM_getWaterStream__FPC4cXyzRC13cBgS_PolyInfoP4cXyzPii */ -s32 fopAcM_getWaterStream(cXyz const* param_0, cBgS_PolyInfo const& param_1, cXyz* speed, - int* param_3, int param_4) { +s32 fopAcM_getWaterStream(cXyz const* pos, cBgS_PolyInfo const& polyinfo, cXyz* speed, + int* power, BOOL param_4) { daTagStream_c* stream = daTagStream_c::getTop(); if (stream != NULL) { for (stream = daTagStream_c::getTop(); stream != NULL; stream = stream->getNext()) { - if (stream->checkStreamOn() && (param_4 == 0 || stream->checkCanoeOn()) && - stream->checkArea(param_0)) + if (stream->checkStreamOn() && (!param_4 || stream->checkCanoeOn()) && + stream->checkArea(pos)) { *speed = stream->speed; - *param_3 = stream->getPower() & 0xff; + *power = stream->getPower() & 0xff; return 1; } } @@ -2042,14 +2042,14 @@ s32 fopAcM_getWaterStream(cXyz const* param_0, cBgS_PolyInfo const& param_1, cXy return 0; } - if (dComIfG_Bgsp().ChkPolySafe(param_1)) { - if (dPath_GetPolyRoomPathVec(param_1, speed, param_3)) { + if (dComIfG_Bgsp().ChkPolySafe(polyinfo)) { + if (dPath_GetPolyRoomPathVec(polyinfo, speed, power)) { speed->normalizeZP(); return 1; } } else { *speed = cXyz::Zero; - *param_3 = 0; + *power = 0; } return 0;