From b1e63e45fca4defb31f58048782ff7bf22ea1819 Mon Sep 17 00:00:00 2001 From: RootCubed Date: Fri, 28 Aug 2026 15:27:23 +0200 Subject: [PATCH 1/3] Match and link `daBossDemo_c` --- include/game/bases/d_a_boss_demo.hpp | 57 +++++++ .../game/bases/d_a_player_demo_manager.hpp | 1 + include/game/bases/d_a_player_manager.hpp | 3 +- include/game/bases/d_actor_manager.hpp | 8 +- include/game/bases/d_game_com.hpp | 1 + include/game/bases/d_otehon_clear.hpp | 12 ++ include/game/bases/d_s_stage.hpp | 4 +- slices/wiimj2d.json | 13 ++ source/dol/bases/d_a_boss_demo.cpp | 153 ++++++++++++++++++ source/dol/bases/d_a_player.cpp | 8 +- syms.txt | 14 +- 11 files changed, 255 insertions(+), 19 deletions(-) create mode 100644 include/game/bases/d_a_boss_demo.hpp create mode 100644 include/game/bases/d_otehon_clear.hpp create mode 100644 source/dol/bases/d_a_boss_demo.cpp diff --git a/include/game/bases/d_a_boss_demo.hpp b/include/game/bases/d_a_boss_demo.hpp new file mode 100644 index 000000000..ff1582c04 --- /dev/null +++ b/include/game/bases/d_a_boss_demo.hpp @@ -0,0 +1,57 @@ +#pragma once + +#include +#include +#include + +/// @brief Base class for boss battle cutscene managers. +/// @statetable +/// @ingroup bases +class daBossDemo_c : public dActorState_c { +public: + struct GlobalData_t { + bool mForceOtehonClear; + }; + + daBossDemo_c() : dActorState_c() {} + ~daBossDemo_c() {} + + virtual int create() override; + virtual int doDelete() override; + virtual int execute() override; + virtual int draw() override; + virtual void deleteReady() override; + + STATE_VIRTUAL_FUNC_DECLARE(daBossDemo_c, Ready); ///< Ready for the boss battle cutscene to start. + STATE_VIRTUAL_FUNC_DECLARE(daBossDemo_c, BattleStDemo); ///< In the boss battle starting cutscene. + STATE_VIRTUAL_FUNC_DECLARE(daBossDemo_c, BattleIn); ///< In the boss battle. + STATE_VIRTUAL_FUNC_DECLARE(daBossDemo_c, BattleEdDemo); ///< In the boss battle ending cutscene. + + /// @brief Returns to the world map and clears the course after finishing it with Super Guide. + virtual bool abandonRetryAfterOtehonClear(); + + /// @brief Returns to the world map without clearing the course after finishing it with Super Guide. + virtual void retryAfterOtehonClear(); + + virtual void startBGM() {} ///< Starts the boss battle background music. + virtual void stopBGM() {} ///< Stops the boss battle background music. + + virtual fBaseID_e getBossID() { return mBossID; } + virtual void setBossID(fBaseID_e bossID) { mBossID = bossID; } + + virtual BOOL checkBattleStDemo() { return false; } ///< Returns whether the boss battle start cutscene is ready to play. + virtual BOOL checkBattleEdDemo() { return mBattleEnd; } ///< Returns whether the boss battle end cutscene is ready to play. + virtual bool demoScroll() { return true; } ///< Returns whether the camera has finished scrolling to the boss. + virtual dEnBoss_c *bossSearch() { return nullptr; } ///< Returns the corresponding boss actor. + virtual void initialize() {} ///< Subclass-specific initialization code. + + void setBattleResult(); ///< Saves the star coins collected and the remaining lives of each player. + void setMultiCourseClear(); ///< Marks the course as cleared. + bool checkStartRetry(bool b); ///< Returns whether to show the "Want to try without Super Guide?" prompt. + + bool isOtehonClear(); ///< Returns whether this course was only cleared by the Super Guide. @unofficial + + u32 m_3d0; + BOOL mBattleEnd; ///< Whether the boss battle has ended. + fBaseID_e mBossID; ///< The ID of the boss actor. +}; diff --git a/include/game/bases/d_a_player_demo_manager.hpp b/include/game/bases/d_a_player_demo_manager.hpp index 6fca6364d..93cc7e9c8 100644 --- a/include/game/bases/d_a_player_demo_manager.hpp +++ b/include/game/bases/d_a_player_demo_manager.hpp @@ -21,6 +21,7 @@ class daPyDemoMng_c { int getPoleBelowPlayer(int playerNo); int getControlDemoPlayerNum() const; int getNextDemoNo(); + void releaseDemoMode(int); void setBossDownPlayerNo(int plNo); void setBossDown(daPlBase_c *player) { diff --git a/include/game/bases/d_a_player_manager.hpp b/include/game/bases/d_a_player_manager.hpp index c82490dcd..a8b57c71d 100644 --- a/include/game/bases/d_a_player_manager.hpp +++ b/include/game/bases/d_a_player_manager.hpp @@ -23,7 +23,7 @@ class daPyMng_c { static bool decNum(int); static bool addRest(int); static bool decRest(int); - static u32 getEntryNum(); + static int getEntryNum(); static bool isEntryNum1() { return getEntryNum() == 1; } static void startYoshiBGM(); static void stopYoshiBGM(); @@ -44,6 +44,7 @@ class daPyMng_c { return res; } + static int getNum() { return mNum; } static bool checkPlayer(u8 plrNo) { return mActPlayerInfo & (1 << plrNo); } static int getRest(PLAYER_TYPE_e plrNo) { return mRest[plrNo]; } static PLAYER_TYPE_e getPlayerType(int plrNo) { return mPlayerType[plrNo]; } diff --git a/include/game/bases/d_actor_manager.hpp b/include/game/bases/d_actor_manager.hpp index 711813ad1..fcf7974dd 100644 --- a/include/game/bases/d_actor_manager.hpp +++ b/include/game/bases/d_actor_manager.hpp @@ -2,11 +2,15 @@ #include +class daBossDemo_c; + class dActorMng_c { public: - u8 mPad1[0x28]; + u8 mPad1[0x18]; + daBossDemo_c *mpCurrBossDemo; + u8 mPad2[0xc]; int mGoombaZOrderThing; - u8 mPad2[0x218]; + u8 mPad3[0x218]; void createUpCoin(const mVec3_c &pos, u8 dir, u8 count, u8 layer); void allEnemyDeath(int); diff --git a/include/game/bases/d_game_com.hpp b/include/game/bases/d_game_com.hpp index bfabd332f..a2ff1ea64 100644 --- a/include/game/bases/d_game_com.hpp +++ b/include/game/bases/d_game_com.hpp @@ -113,6 +113,7 @@ namespace dGameCom { void LayoutDispNumber(const int &value, const int &fillLeft, LytTextBox_c *textBox, bool fillWidth); bool isNowCourseClear(); + void setMultiCourseClear(int); void initGame(); void AreaLanguageFolder(const char *, char *); diff --git a/include/game/bases/d_otehon_clear.hpp b/include/game/bases/d_otehon_clear.hpp new file mode 100644 index 000000000..ae4ec992b --- /dev/null +++ b/include/game/bases/d_otehon_clear.hpp @@ -0,0 +1,12 @@ +#pragma once + +#include + +class dOtehonClear_c { +public: + u8 mPad1[0xb5]; + bool m_b5; + u8 mPad2[0x2]; + bool m_b8; + bool m_b9; +}; diff --git a/include/game/bases/d_s_stage.hpp b/include/game/bases/d_s_stage.hpp index 6f113f1b6..682fc98a3 100644 --- a/include/game/bases/d_s_stage.hpp +++ b/include/game/bases/d_s_stage.hpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -29,7 +30,7 @@ class dScStage_c : public dScene_c { static void setTitleReplayRandomTable(); - static void setNextScene(u16, int, Exit_e, dFader_c::fader_type_e); + static void setNextScene(ProfileName, int, Exit_e, dFader_c::fader_type_e); static void createReplayDataHeap(EGG::Heap *heap, ulong size, int options); @@ -56,6 +57,7 @@ class dScStage_c : public dScene_c { static const char mCdArcName[]; static bool m_isCourseOut; ///< Whether the game is transitioning from a stage scene to a non-stage scene. + static dOtehonClear_c *m_OtehonClear_p; static bool m_KoopaJrEscape; static dInfo_c::GameMode_e m_gameMode; static Exit_e m_exitMode; diff --git a/slices/wiimj2d.json b/slices/wiimj2d.json index 755d362ec..0ad2a7e48 100644 --- a/slices/wiimj2d.json +++ b/slices/wiimj2d.json @@ -146,6 +146,19 @@ ".sdata2": "0x180-0x188" } }, + { + "source": "dol/bases/d_a_boss_demo.cpp", + "memoryRanges": { + ".text": "0x16430-0x172d0", + ".ctors": "0x20-0x24", + ".data": "0x3140-0x3420", + ".bss": "0xfd8-0x10e8", + ".sdata": "0x180-0x190", + ".sbss": "0x90-0x98", + ".sdata2": "0x188-0x198", + ".sbss2": "0x0-0x8" + } + }, { "source": "dol/bases/d_a_bullet.cpp", "memoryRanges": { diff --git a/source/dol/bases/d_a_boss_demo.cpp b/source/dol/bases/d_a_boss_demo.cpp new file mode 100644 index 000000000..eaccf748d --- /dev/null +++ b/source/dol/bases/d_a_boss_demo.cpp @@ -0,0 +1,153 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +STATE_VIRTUAL_DEFINE(daBossDemo_c, Ready); +STATE_VIRTUAL_DEFINE(daBossDemo_c, BattleStDemo); +STATE_VIRTUAL_DEFINE(daBossDemo_c, BattleIn); +STATE_VIRTUAL_DEFINE(daBossDemo_c, BattleEdDemo); + +GLOBAL_DATA_DEF(daBossDemo_c, { + false +}); + +int daBossDemo_c::create() { + if (dActorMng_c::m_instance->mpCurrBossDemo != nullptr) { + deleteRequest(); + return NOT_READY; + } + + dActorMng_c::m_instance->mpCurrBossDemo = this; + initialize(); + mStateMgr.changeState(StateID_Ready); + mStateMgr.refreshState(); + return SUCCEEDED; +} + +int daBossDemo_c::execute() { + mStateMgr.executeState(); + return SUCCEEDED; +} + +int daBossDemo_c::draw() { + return SUCCEEDED; +} + +void daBossDemo_c::deleteReady() {} + +int daBossDemo_c::doDelete() { + return SUCCEEDED; +} + +void daBossDemo_c::setBattleResult() { + dMultiMng_c *multiMng = dMultiMng_c::mspInstance; + if (multiMng == nullptr) { + return; + } + + multiMng->setCollectionCoin(); + for (int i = 0; i < PLAYER_COUNT; i++) { + int rest = daPyMng_c::getRest(daPyMng_c::getPlayerType(i)); + multiMng->setRest(rest, i); + } +} + +void daBossDemo_c::setMultiCourseClear() { + if (daPyMng_c::getNum() == daPyMng_c::getEntryNum()) { + dGameCom::setMultiCourseClear(3); + } else { + dGameCom::setMultiCourseClear(1); + } +} + +bool daBossDemo_c::abandonRetryAfterOtehonClear() { + dScStage_c::setNextScene(fProf::WORLD_MAP, 0, dScStage_c::EXIT_0, dFader_c::FADER_MARIO); + return false; +} + +void daBossDemo_c::retryAfterOtehonClear() { + dScStage_c::setNextScene(fProf::WORLD_MAP, 0, dScStage_c::EXIT_2, dFader_c::FADER_CIRCLE_MIDDLE); +} + +bool daBossDemo_c::checkStartRetry(bool b) { + if (GLOBAL_DATA.mForceOtehonClear) { + dOtehonClear_c *otehon = dScStage_c::m_OtehonClear_p; + otehon->m_b9 = b; + otehon->m_b8 = true; + otehon->m_b5 = true; + return true; + } + + if (isOtehonClear()) { + dOtehonClear_c *otehon = dScStage_c::m_OtehonClear_p; + otehon->m_b9 = b; + otehon->m_b8 = true; + otehon->m_b5 = true; + return true; + } + + return false; +} + +bool daBossDemo_c::isOtehonClear() { + if (GLOBAL_DATA.mForceOtehonClear) { + return true; + } + + bool res = false; + int world = dScStage_c::m_instance->mCurrWorld; + int course = dScStage_c::m_instance->mCurrCourse; + if ( + dInfo_c::m_startGameInfo.mGameMode == dInfo_c::GAME_MODE_SUPER_GUIDE && + !dWmLib::IsCourseClear(world, course) + ) { + res = true; + } + return res; +} + +void daBossDemo_c::initializeState_Ready() {} +void daBossDemo_c::finalizeState_Ready() {} +void daBossDemo_c::executeState_Ready() { + if (mBossID == BASE_ID_NULL) { + dEnBoss_c *boss = bossSearch(); + if (boss != nullptr) { + mBossID = boss->getID(); + } + } + + if (mBossID != BASE_ID_NULL && checkBattleStDemo() && demoScroll()) { + mStateMgr.changeState(StateID_BattleStDemo); + } +} + +void daBossDemo_c::initializeState_BattleStDemo() {} +void daBossDemo_c::finalizeState_BattleStDemo() {} +void daBossDemo_c::executeState_BattleStDemo() {} + +void daBossDemo_c::initializeState_BattleIn() { + daPyDemoMng_c::mspInstance->releaseDemoMode(1); + + dEnBoss_c *boss = (dEnBoss_c *) fManager_c::searchBaseByID(mBossID); + if (boss != nullptr) { + boss->setBattleReady(); + } + + mBattleEnd = false; +} +void daBossDemo_c::finalizeState_BattleIn() {} +void daBossDemo_c::executeState_BattleIn() { + if (checkBattleEdDemo()) { + mStateMgr.changeState(StateID_BattleEdDemo); + } +} + +void daBossDemo_c::initializeState_BattleEdDemo() {} +void daBossDemo_c::finalizeState_BattleEdDemo() {} +void daBossDemo_c::executeState_BattleEdDemo() {} diff --git a/source/dol/bases/d_a_player.cpp b/source/dol/bases/d_a_player.cpp index 8b93adab1..ba8ca3ff0 100644 --- a/source/dol/bases/d_a_player.cpp +++ b/source/dol/bases/d_a_player.cpp @@ -6383,7 +6383,7 @@ bool dAcPy_c::setBalloonButtonA() { bool dAcPy_c::checkAllBalloonFade() { if (!isStatus(STATUS_ALL_DOWN_FADE)) { onStatus(STATUS_ALL_DOWN_FADE); - dScStage_c::setNextScene(3, 0, dScStage_c::EXIT_1, dFader_c::FADER_BOWSER); + dScStage_c::setNextScene(fProf::WORLD_MAP, 0, dScStage_c::EXIT_1, dFader_c::FADER_BOWSER); return true; } return false; @@ -7836,9 +7836,9 @@ void dAcPy_c::checkRest() { } } if (!allDown) { - dScStage_c::setNextScene(3, 0, dScStage_c::EXIT_1, dFader_c::FADER_BOWSER); + dScStage_c::setNextScene(fProf::WORLD_MAP, 0, dScStage_c::EXIT_1, dFader_c::FADER_BOWSER); } else { - dScStage_c::setNextScene(9, 0, dScStage_c::EXIT_1, dFader_c::FADER_BOWSER); + dScStage_c::setNextScene(fProf::GAMEOVER, 0, dScStage_c::EXIT_1, dFader_c::FADER_BOWSER); } } @@ -8998,7 +8998,7 @@ void dAcPy_c::executeState_DemoCannonWarp() { case 3: if (mDemoSubstateTimer == 0) { mDemoSubstate = 4; - dScStage_c::setNextScene(3, 0, dScStage_c::EXIT_0, dFader_c::FADER_CIRCLE_TARGET); + dScStage_c::setNextScene(fProf::WORLD_MAP, 0, dScStage_c::EXIT_0, dFader_c::FADER_CIRCLE_TARGET); if (daPyDemoMng_c::mspInstance->mPlayerNo < 0) { daPyDemoMng_c::mspInstance->mPlayerNo = mPlayerNo; } diff --git a/syms.txt b/syms.txt index 8497eebed..a6136760c 100644 --- a/syms.txt +++ b/syms.txt @@ -2,17 +2,6 @@ memcpy=0x80004364 memset=0x800046B4 DVDDiskCheck=0x80006780 __ct__7mVec3_cFv=0x80015E30 -changeState__82sStateMgr_c<13dActorState_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c=0x8001CC90 -refreshState__82sStateMgr_c<13dActorState_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv=0x8001CCA0 -executeState__82sStateMgr_c<13dActorState_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv=0x8001CCE0 -setBattleReady__9dEnBoss_cFv=0x8001D0F0 -finalUpdate__12dBaseActor_cFv=0x8001D1B0 -GetActorType__12dBaseActor_cFv=0x8001D1C0 -funsuiMoveX__8dActor_cFv=0x8001D1D0 -setCarryFall__8dActor_cFP8dActor_ci=0x8001D1E0 -isSpinLiftUpEnable__8dActor_cFv=0x8001D1F0 -getPlrNo__8dActor_cFv=0x8001D200 -vf68__8dActor_cFP9dBg_ctr_c=0x8001D210 isFunsui__5dEn_cCFv=0x80020690 endFunsui__5dEn_cFv=0x800206A0 beginFunsui__5dEn_cFv=0x800206B0 @@ -35,6 +24,7 @@ refreshState__99sStateStateMgr_c<18dActorMultiState_c,12sFStateMgr_c,20sStateMet getStateID__82sStateMgr_c<13dActorState_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv=0x80040BC0 __dt__18dCircleLightMask_cFv=0x800414A0 setDemoMode__13daPyDemoMng_cFQ213daPyDemoMng_c6Mode_ei=0x8005B5C0 +releaseDemoMode__13daPyDemoMng_cFi=0x8005B5D0 setGoalDemoList__13daPyDemoMng_cFi=0x8005B780 stopBgmGoalDemo__13daPyDemoMng_cFv=0x8005B810 getPoleBelowPlayer__13daPyDemoMng_cFi=0x8005B840 @@ -240,6 +230,7 @@ AreaLanguageFolder__8dGameComFPCcPc=0x800B4670 PlayerEnterCheck__8dGameComFi=0x800B4760 Player1upColor__8dGameComFP12LytTextBox_ci=0x800B4780 isNowCourseClear__8dGameComFv=0x800B4E30 +setMultiCourseClear__8dGameComFi=0x800B5000 DispSizeScale__8dGameComFRQ34nw4r4math4VEC2=0x800B5140 GetAspectRatio__8dGameComFv=0x800B5500 someCheck__8dGameComFP7mVec3_cP11sRangeDataF=0x800B5640 @@ -972,6 +963,7 @@ ms_instance__11dCsSeqMng_c=0x8042A48C m_isDispOff__10dScCrsin_c=0x8042A490 m_instance__10dScMovie_c=0x8042A498 m_instance__10dScStage_c=0x8042A4A8 +m_OtehonClear_p__10dScStage_c=0x8042A4D0 m_titleCount__10dScStage_c=0x8042A4D8 m_exeFrame__10dScStage_c=0x8042A4E0 m_gameMode__10dScStage_c=0x8042A4E4 From 68f9e36bf719e7def7f228f4d0bf5247dbccc175 Mon Sep 17 00:00:00 2001 From: RootCubed Date: Fri, 28 Aug 2026 15:28:06 +0200 Subject: [PATCH 2/3] Use global constants in `daEnNoko_c` --- include/game/bases/d_a_en_noko.hpp | 4 ++++ source/d_enemiesNP/bases/d_a_en_noko.cpp | 26 ++++++++++++------------ 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/include/game/bases/d_a_en_noko.hpp b/include/game/bases/d_a_en_noko.hpp index a7579d662..534ebe3b7 100644 --- a/include/game/bases/d_a_en_noko.hpp +++ b/include/game/bases/d_a_en_noko.hpp @@ -143,4 +143,8 @@ class daEnNoko_c : public daEnShell_c { ACTOR_PARAM_CONFIG(BlockHitPlayer, 24, 2); ///< The player number that hit the block from which this Koopa spawned. ACTOR_PARAM_CONFIG(BlockAppear, 28, 1); ///< Whether the Koopa should spawn from a block. ACTOR_PARAM_CONFIG(SpitOut, 29, 1); ///< Whether this Koopa was spat out by Yoshi. + + static const float smc_WALK_SPEED[]; + static const s16 smc_TURN_SPEED[]; + static const s16 smc_TURN_TARGET_ANGLE[]; }; diff --git a/source/d_enemiesNP/bases/d_a_en_noko.cpp b/source/d_enemiesNP/bases/d_a_en_noko.cpp index 93f0c23cb..6b051243b 100644 --- a/source/d_enemiesNP/bases/d_a_en_noko.cpp +++ b/source/d_enemiesNP/bases/d_a_en_noko.cpp @@ -21,9 +21,9 @@ const sCcDatNewF l_noko_cc = { dEn_c::normal_collcheck }; -const float l_walk_speed[2] = { 0.5f, -0.5f }; -const s16 l_turn_speed[2] = { ANGLE_360_DIV(32), -ANGLE_360_DIV(32) }; -const s16 l_turn_target_angle[2] = { DEG_TO_ANGLE(90), -DEG_TO_ANGLE(90) }; +const float daEnNoko_c::smc_WALK_SPEED[2] = { 0.5f, -0.5f }; +const s16 daEnNoko_c::smc_TURN_SPEED[2] = { ANGLE_360_DIV(32), -ANGLE_360_DIV(32) }; +const s16 daEnNoko_c::smc_TURN_TARGET_ANGLE[2] = { DEG_TO_ANGLE(90), -DEG_TO_ANGLE(90) }; STATE_DEFINE(daEnNoko_c, BlockAppear); STATE_DEFINE(daEnNoko_c, Walk); @@ -52,7 +52,7 @@ int daEnNoko_c::create() { u8 dir = getPl_LRflag(mPos); mDirection = dir; mAmiLayer = ACTOR_PARAM(SubLayer); - mAngle.y = l_turn_target_angle[dir]; + mAngle.y = smc_TURN_TARGET_ANGLE[dir]; mCreatePos = mPos; mFlags |= dEn_c::EN_FLAG_16; mPos.z = l_Ami_Zpos[ACTOR_PARAM(SubLayer)]; @@ -269,7 +269,7 @@ bool daEnNoko_c::playerDamageTurn(dActor_c *actor) { } mDirection = dir; - mAngle.y = l_turn_target_angle[dir]; + mAngle.y = smc_TURN_TARGET_ANGLE[dir]; mHeadAngle *= -1; turnAround(); @@ -297,7 +297,7 @@ bool daEnNoko_c::turnProc() { doTurn(&turnDir, &turnSpeed); mAngle.y += turnSpeed; - mAng target = l_turn_target_angle[turnDir]; + mAng target = smc_TURN_TARGET_ANGLE[turnDir]; if (mAngle.y.abs() >= target.abs()) { mAngle.y = target; return true; @@ -308,7 +308,7 @@ bool daEnNoko_c::turnProc() { void daEnNoko_c::doTurn(int *dir, s16 *turnSpeed) { *dir = mDirection; - *turnSpeed = l_turn_speed[*dir]; + *turnSpeed = smc_TURN_SPEED[*dir]; } void daEnNoko_c::setZPos() { @@ -473,9 +473,9 @@ void daEnNoko_c::initializeState_Walk() { mShellMode = SHELL_MODE_NOKO_WALK; mAccelY = -0.1875f; mAccelF = 0.05f; - mSpeedMax.set(l_walk_speed[mDirection], -4.0f, 0.0f); + mSpeedMax.set(smc_WALK_SPEED[mDirection], -4.0f, 0.0f); mSensorFootNormal = l_noko_foot; - mSpeed.x = l_walk_speed[mDirection]; + mSpeed.x = smc_WALK_SPEED[mDirection]; m_8c8 = 0; } @@ -493,7 +493,7 @@ void daEnNoko_c::executeState_Walk() { mSpeedMax.x = 0.0f; } } else { - mSpeedMax.x = l_walk_speed[mDirection]; + mSpeedMax.x = smc_WALK_SPEED[mDirection]; } calcSpeedX(); @@ -688,7 +688,7 @@ void daEnNoko_c::initializeState_BgmDanceEd() { setMoveAnimation("walkA", m3d::FORWARD_ONCE, 4.0f); mSpeed.x = 0.0f; mDanceTimer = 4; - mBgmDanceRotSpeed = abs(l_turn_target_angle[mDirection]) / mDanceTimer; + mBgmDanceRotSpeed = abs(smc_TURN_TARGET_ANGLE[mDirection]) / mDanceTimer; } void daEnNoko_c::finalizeState_BgmDanceEd() {} @@ -704,10 +704,10 @@ void daEnNoko_c::executeState_BgmDanceEd() { if (mDanceTimer > 0) { mDanceTimer--; - sLib::chaseAngle(&mAngle.y.mAngle, l_turn_target_angle[mDirection], mBgmDanceRotSpeed); + sLib::chaseAngle(&mAngle.y.mAngle, smc_TURN_TARGET_ANGLE[mDirection], mBgmDanceRotSpeed); if (mDanceTimer <= 0) { - mAngle.y = l_turn_target_angle[mDirection]; + mAngle.y = smc_TURN_TARGET_ANGLE[mDirection]; changeState(StateID_Walk); } } From c8394960831a50660fc4b3b1cf38149a929310b4 Mon Sep 17 00:00:00 2001 From: RootCubed Date: Wed, 2 Sep 2026 07:08:37 +0200 Subject: [PATCH 3/3] Apply code review --- include/game/bases/d_a_boss_demo.hpp | 4 ++-- source/dol/bases/d_a_boss_demo.cpp | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/game/bases/d_a_boss_demo.hpp b/include/game/bases/d_a_boss_demo.hpp index ff1582c04..9dab09673 100644 --- a/include/game/bases/d_a_boss_demo.hpp +++ b/include/game/bases/d_a_boss_demo.hpp @@ -13,8 +13,8 @@ class daBossDemo_c : public dActorState_c { bool mForceOtehonClear; }; - daBossDemo_c() : dActorState_c() {} - ~daBossDemo_c() {} + daBossDemo_c() : dActorState_c() {} ///< @copydoc dActorState_c::dActorState_c + ~daBossDemo_c() {} ///< @copydoc dActorState_c::~dActorState_c virtual int create() override; virtual int doDelete() override; diff --git a/source/dol/bases/d_a_boss_demo.cpp b/source/dol/bases/d_a_boss_demo.cpp index eaccf748d..8473a15d9 100644 --- a/source/dol/bases/d_a_boss_demo.cpp +++ b/source/dol/bases/d_a_boss_demo.cpp @@ -100,16 +100,16 @@ bool daBossDemo_c::isOtehonClear() { return true; } - bool res = false; + bool result = false; int world = dScStage_c::m_instance->mCurrWorld; int course = dScStage_c::m_instance->mCurrCourse; if ( dInfo_c::m_startGameInfo.mGameMode == dInfo_c::GAME_MODE_SUPER_GUIDE && !dWmLib::IsCourseClear(world, course) ) { - res = true; + result = true; } - return res; + return result; } void daBossDemo_c::initializeState_Ready() {}