diff --git a/config/S72E01/splits.txt b/config/S72E01/splits.txt index f40e7e7..39848d5 100644 --- a/config/S72E01/splits.txt +++ b/config/S72E01/splits.txt @@ -1960,6 +1960,10 @@ donut/scn/step/GridPos.cpp: donut/scn/step/boss/IState.cpp: .text start:0x80230D3C end:0x80230D98 +donut/scn/step/chara/Invincible.cpp: + .text start:0x8026EE48 end:0x8026EFA8 + .rodata start:0x80417960 end:0x80417988 + donut/scn/step/enemy/CustomBase.cpp: .text start:0x80281E20 end:0x80281FBC .data start:0x80471B80 end:0x80471BD8 @@ -1968,6 +1972,10 @@ donut/scn/step/enemy/CustomBase.cpp: donut/scn/step/enemy/Desc.cpp: .text start:0x802845E0 end:0x802846F0 +donut/scn/step/enemy/Enemy.cpp: + .text start:0x80284898 end:0x80288214 + .data start:0x80471E30 end:0x80471F00 + donut/scn/step/enemy/IState.cpp: .text start:0x80288D8C end:0x80288D8C @@ -1979,6 +1987,10 @@ donut/scn/step/enemy/StateBase.cpp: .text start:0x8028DDC4 end:0x8028DE48 .data start:0x80472C30 end:0x80472C50 +donut/scn/step/enemy/SuperStop.cpp: + .text start:0x8028DF54 end:0x8028E0D4 + .data start:0x80472C60 end:0x80472C78 + donut/scn/step/enemy/damage/StateDeadInWater.cpp: .text start:0x802AA9B4 end:0x802AAF74 .data start:0x80475D20 end:0x80475D40 @@ -2001,11 +2013,18 @@ donut/scn/step/enemy/waddledoo/ModelDesc.cpp: donut/scn/step/block/BlockInfo.cpp: .text start:0x80300700 end:0x80300760 +donut/scn/step/hero/Guard.cpp: + .text start:0x803385F8 end:0x803386B4 + .rodata start:0x80419D00 end:0x80419D50 + donut/scn/step/hero/IndiviUtil.cpp: .text start:0x803418A4 end:0x80341C74 .data start:0x80484CD0 end:0x80484D28 .sdata2 start:0x80562C10 end:0x80562C20 +donut/scn/step/spstop/Manager.cpp: + .text start:0x803D0B9C end:0x803D0E90 + donut/scn/vc/Loader.cpp: .text start:0x803F2834 end:0x803F2894 .data start:0x80495548 end:0x804955F0 diff --git a/config/S72E01/symbols.txt b/config/S72E01/symbols.txt index 6badc67..78cfe57 100644 --- a/config/S72E01/symbols.txt +++ b/config/S72E01/symbols.txt @@ -28076,7 +28076,7 @@ lbl_804176C8 = .rodata:0x804176C8; // type:object size:0x18 lbl_804176E0 = .rodata:0x804176E0; // type:object size:0x20 lbl_80417700 = .rodata:0x80417700; // type:object size:0xA8 lbl_804177A8 = .rodata:0x804177A8; // type:object size:0x1B8 -lbl_80417960 = .rodata:0x80417960; // type:object size:0x28 +T_ALPHA_ANIM_TABLE__Q43scn4step5chara24@unnamed@Invincible_cpp@ = .rodata:0x80417960; // type:object size:0x28 lbl_80417988 = .rodata:0x80417988; // type:object size:0x10 lbl_80417998 = .rodata:0x80417998; // type:object size:0x10 lbl_804179A8 = .rodata:0x804179A8; // type:object size:0x18 @@ -28178,7 +28178,7 @@ lbl_80419C68 = .rodata:0x80419C68; // type:object size:0x10 lbl_80419C78 = .rodata:0x80419C78; // type:object size:0x18 lbl_80419C90 = .rodata:0x80419C90; // type:object size:0x58 lbl_80419CE8 = .rodata:0x80419CE8; // type:object size:0x18 -lbl_80419D00 = .rodata:0x80419D00; // type:object size:0x50 +T_ALPHA_TABLE__19@unnamed@Guard_cpp@ = .rodata:0x80419D00; // type:object size:0x50 lbl_80419D50 = .rodata:0x80419D50; // type:object size:0x50 data:4byte lbl_80419DA0 = .rodata:0x80419DA0; // type:object size:0x240 lbl_80419FE0 = .rodata:0x80419FE0; // type:object size:0x30 @@ -31868,7 +31868,7 @@ lbl_804726D8 = .data:0x804726D8; // type:object size:0x540 lbl_80472C18 = .data:0x80472C18; // type:object size:0x18 __vt__Q43scn4step5enemy9StateBase = .data:0x80472C30; // type:object size:0x20 lbl_80472C50 = .data:0x80472C50; // type:object size:0x10 -lbl_80472C60 = .data:0x80472C60; // type:object size:0x18 +__vt__Q43scn4step5enemy9SuperStop = .data:0x80472C60; // type:object size:0x18 jumptable_80472C78 = .data:0x80472C78; // type:object size:0x28 scope:local jumptable_80472CA0 = .data:0x80472CA0; // type:object size:0x28 scope:local lbl_80472CC8 = .data:0x80472CC8; // type:object size:0x10 diff --git a/configure.py b/configure.py index d510c3b..3f76998 100755 --- a/configure.py +++ b/configure.py @@ -1172,6 +1172,15 @@ def MatchingFor(*versions): Object(Equivalent, "donut/scn/step/boss/IState.cpp", extra_cflags=["-O3,s"]), ], }, + { + "lib": "scn/step/chara", + "mw_version": config.linker_version, + "cflags": cflags_donut, + "progress_category": "donut", + "objects": [ + Object(Equivalent, "donut/scn/step/chara/Invincible.cpp"), + ], + }, { "lib": "scn/step/enemy", "mw_version": config.linker_version, @@ -1180,9 +1189,11 @@ def MatchingFor(*versions): "objects": [ Object(NonMatching, "donut/scn/step/enemy/CustomBase.cpp", extra_cflags=["-O3,s"]), Object(Equivalent, "donut/scn/step/enemy/Desc.cpp", extra_cflags=["-O3,s"]), + Object(NonMatching, "donut/scn/step/enemy/Enemy.cpp"), Object(Equivalent, "donut/scn/step/enemy/IState.cpp", extra_cflags=["-O3,s"]), Object(NonMatching, "donut/scn/step/enemy/Param.cpp", extra_cflags=["-O3,s"]), Object(Equivalent, "donut/scn/step/enemy/StateBase.cpp", extra_cflags=["-O3,s"]), + Object(NonMatching, "donut/scn/step/enemy/SuperStop.cpp"), Object(NonMatching, "donut/scn/step/enemy/damage/StateDeadInWater.cpp", extra_cflags=["-O3,s"]), Object(Equivalent, "donut/scn/step/enemy/waddledoo/Custom.cpp", extra_cflags=["-O3,s"]), @@ -1195,11 +1206,17 @@ def MatchingFor(*versions): "cflags": cflags_donut, "progress_category": "donut", "objects": [ - Object( - NonMatching, - "donut/scn/step/hero/IndiviUtil.cpp", - extra_cflags=["-O3"], - ), + Object(NonMatching, "donut/scn/step/hero/Guard.cpp"), + Object(NonMatching, "donut/scn/step/hero/IndiviUtil.cpp", extra_cflags=["-O3"]), + ], + }, + { + "lib": "scn/step/spstop", + "mw_version": config.linker_version, + "cflags": cflags_donut, + "progress_category": "donut", + "objects": [ + Object(NonMatching, "donut/scn/step/spstop/Manager.cpp", extra_cflags=["-O3,s"]), ], }, { diff --git a/src/donut/scn/step/Component.cpp b/src/donut/scn/step/Component.cpp index 71d296d..01a9625 100644 --- a/src/donut/scn/step/Component.cpp +++ b/src/donut/scn/step/Component.cpp @@ -5,16 +5,26 @@ using namespace scn::step; using mem::ExplicitScopedPtrUtil::CheckPointerIsValid; -Component::~Component() { } +Component::~Component() +{ +} -core::SphereAccessor* Component::sphereAccessor() { +core::SphereAccessor *Component::sphereAccessor() +{ return mSphereAccessor.operator->(); } -debug::GeneralDrawer* Component::debugGeneralDrawer() { +spstop::Manager *Component::superStopManager() +{ + return mSuperStopManager.operator->(); +} + +debug::GeneralDrawer *Component::debugGeneralDrawer() +{ return mDebugGeneralDrawer.operator->(); } -debug::ObjInfoRepos* Component::debugObjInfoRepos() { +debug::ObjInfoRepos *Component::debugObjInfoRepos() +{ return mDebugObjInfoRepos.operator->(); } diff --git a/src/donut/scn/step/Component.hpp b/src/donut/scn/step/Component.hpp index 01f7b0a..1af13fe 100644 --- a/src/donut/scn/step/Component.hpp +++ b/src/donut/scn/step/Component.hpp @@ -1,16 +1,19 @@ #ifndef DONUT_SCN_STEP_COMPONENT_HPP #define DONUT_SCN_STEP_COMPONENT_HPP -#include +#include "g3d/ResFileRepository.hpp" #include "scn/step/Context.hpp" #include "scn/step/core/SphereAccessor.hpp" -#include "scn/step/debug/ShowGrid.hpp" -#include "scn/step/debug/ShowPegFrame.hpp" #include "scn/step/debug/GeneralDrawer.hpp" #include "scn/step/debug/ObjInfoRepos.hpp" -#include "scn/step/map/DataFile.hpp" +#include "scn/step/debug/ShowGrid.hpp" +#include "scn/step/debug/ShowPegFrame.hpp" #include "scn/step/hero/Manager.hpp" -#include "g3d/ResFileRepository.hpp" +#include "scn/step/map/DataFile.hpp" +#include "scn/step/spstop/Manager.hpp" +#include + +// clang-format off namespace scn { namespace step { namespace core { @@ -36,10 +39,6 @@ namespace scn { namespace step { class Manager { }; } - namespace spstop { - class Manager { }; - } - namespace sfx { class BGFade { }; class ScreenFade { }; @@ -209,4 +208,6 @@ class Component { }} +// clang-format on + #endif diff --git a/src/donut/scn/step/chara/Invincible.cpp b/src/donut/scn/step/chara/Invincible.cpp new file mode 100644 index 0000000..b866436 --- /dev/null +++ b/src/donut/scn/step/chara/Invincible.cpp @@ -0,0 +1,97 @@ +#include "scn/step/chara/Invincible.hpp" + +using namespace scn::step::chara; + +Invincible::Invincible() +{ + mInvincibleFrames = 0; + mFlashCycle = 0; + mUsingIntangibleMove = 0; + mIsCandyActive = 0; +} + +void Invincible::update() +{ + u32 nextFlash; + if (isInvincible()) + { + updateFrame(); + nextFlash = mFlashCycle + 1; + mFlashCycle = nextFlash; + if (nextFlash == 0x14) + { + mFlashCycle = 0x10; + } + } +} + +bool Invincible::isInvincible() const +{ + bool result = false; + if ((mUsingIntangibleMove != false) || (mIsCandyActive != false) || (mInvincibleFrames != 0)) + { + result = true; + } + + return result; +} + +void Invincible::set(u32 frames) +{ + if (mInvincibleFrames < frames) + { + mInvincibleFrames = frames; + } + + mFlashCycle = 0; + return; +} + +void Invincible::clear() +{ + mInvincibleFrames = 0; + mUsingIntangibleMove = false; +} + +void Invincible::setPerm() +{ + mUsingIntangibleMove = true; + mFlashCycle = 0; +} + +void Invincible::unsetMighty() +{ + mIsCandyActive = false; +} + +bool Invincible::isMighty() const +{ + return mIsCandyActive; +} + +#pragma peephole off +u32 Invincible::getFlashAlpha() const +{ + bool result = isInvincible(); + u32 alpha; + + if (result) + { + alpha = T_ALPHA_ANIM_TABLE[mFlashCycle / 2]; + } + else + { + alpha = 0; + } + + return alpha; +} + +void Invincible::updateFrame() +{ + u32 currentFrames = mInvincibleFrames; + if (currentFrames != 0) + { + mInvincibleFrames = currentFrames - 1; + } +} diff --git a/src/donut/scn/step/chara/Invincible.hpp b/src/donut/scn/step/chara/Invincible.hpp new file mode 100644 index 0000000..63ae53c --- /dev/null +++ b/src/donut/scn/step/chara/Invincible.hpp @@ -0,0 +1,46 @@ +#ifndef DONUT_SCN_STEP_CHARA_INVINCIBLE_HPP +#define DONUT_SCN_STEP_CHARA_INVINCIBLE_HPP + +#include + +/* clang-format off */ +namespace scn { namespace step { namespace chara { + +const u32 T_ALPHA_ANIM_TABLE[10] = { + 0xF0, + 0x50, + 0xA0, + 0x14, + 0x8C, + 0x0A, + 0x78, + 0x00, + 0x64, + 0x00 +}; + +class Invincible +{ +public: + Invincible(); + void update(); + bool isInvincible() const; + void set(u32 frames); + void clear(); + void setPerm(); + void unsetMighty(); + bool isMighty() const; + u32 getFlashAlpha() const; + void updateFrame(); +private: + /* 0x00 */ u32 mInvincibleFrames; + /* 0x04 */ u32 mFlashCycle; + /* 0x08 */ bool mUsingIntangibleMove; + /* 0x09 */ bool mIsCandyActive; +}; + +}}} + +/* clang-format on */ + +#endif diff --git a/src/donut/scn/step/enemy/Enemy.cpp b/src/donut/scn/step/enemy/Enemy.cpp new file mode 100644 index 0000000..1cb67b6 --- /dev/null +++ b/src/donut/scn/step/enemy/Enemy.cpp @@ -0,0 +1 @@ +#include "scn/step/enemy/Enemy.hpp" diff --git a/src/donut/scn/step/enemy/Enemy.hpp b/src/donut/scn/step/enemy/Enemy.hpp index 12e37e0..7e98154 100644 --- a/src/donut/scn/step/enemy/Enemy.hpp +++ b/src/donut/scn/step/enemy/Enemy.hpp @@ -1,16 +1,17 @@ #ifndef DONUT_SCN_STEP_ENEMY_ENEMY_HPP #define DONUT_SCN_STEP_ENEMY_ENEMY_HPP +#include "scn/step/Component.hpp" #include "scn/step/enemy/IState.hpp" #include "util/StateChanger.hpp" +// clang-format off + namespace gobj { class FootState; } namespace scn { namespace step { - class Component; - namespace chara { class Model; } @@ -26,9 +27,11 @@ namespace scn { namespace step { util::StateChanger* stateChanger(); public: - STRUCT_FILL(0x1B8); + Component *mComponent; }; }}}; +// clang-format on + #endif diff --git a/src/donut/scn/step/enemy/SuperStop.cpp b/src/donut/scn/step/enemy/SuperStop.cpp new file mode 100644 index 0000000..40addf4 --- /dev/null +++ b/src/donut/scn/step/enemy/SuperStop.cpp @@ -0,0 +1,43 @@ +#include "scn/step/enemy/SuperStop.hpp" + +using namespace scn::step::enemy; + +SuperStop::SuperStop(Enemy &rEnemy) +{ + scn::step::spstop::Manager *pSuperStopManager; + + mEnemy = &rEnemy; + m_8 = false; + + pSuperStopManager = mEnemy->mComponent->superStopManager(); + pSuperStopManager->registerEventReceiver(*this); +} + +SuperStop::~SuperStop() +{ + scn::step::spstop::Manager *pSuperStopManager = mEnemy->mComponent->superStopManager(); + pSuperStopManager->unregisterEventReceiver(*this); +} + +void SuperStop::onObjCollReactHit() +{ + scn::step::spstop::Manager *pSuperStopManager = mEnemy->mComponent->superStopManager(); + + if (pSuperStopManager->isStopped()) + { + // mEnemy->objStop(); + } +} + +inline void SuperStop::onSuperStopStarted(const scn::step::spstop::Manager &rManager) +{ + m_8 = false; +} + +void SuperStop::onSuperStopFinished(const scn::step::spstop::Manager &rManager) +{ + if (m_8 == false) + { + // mEnemy->objStop(); + } +} diff --git a/src/donut/scn/step/enemy/SuperStop.hpp b/src/donut/scn/step/enemy/SuperStop.hpp new file mode 100644 index 0000000..487d1b8 --- /dev/null +++ b/src/donut/scn/step/enemy/SuperStop.hpp @@ -0,0 +1,28 @@ +#ifndef DONUT_SCN_STEP_ENEMY_SUPERSTOP_HPP +#define DONUT_SCN_STEP_ENEMY_SUPERSTOP_HPP + +#include "scn/step/enemy/Enemy.hpp" +#include "scn/step/spstop/Manager.hpp" + +/* clang-format off */ +namespace scn { namespace step { namespace enemy { + +class SuperStop : public scn::step::spstop::IEventReceiver +{ +public: + SuperStop(Enemy &rEnemy); + virtual ~SuperStop(); + + void onObjCollReactHit(); + virtual inline void onSuperStopStarted(const scn::step::spstop::Manager &rManager); + virtual void onSuperStopFinished(const scn::step::spstop::Manager &rManager); +private: + /* 0x4 */ Enemy *mEnemy; + /* 0x8 */ bool m_8; +}; + +}}} + +/* clang-format on */ + +#endif diff --git a/src/donut/scn/step/hero/Guard.cpp b/src/donut/scn/step/hero/Guard.cpp new file mode 100644 index 0000000..e57d99a --- /dev/null +++ b/src/donut/scn/step/hero/Guard.cpp @@ -0,0 +1,58 @@ +#include "scn/step/hero/Guard.hpp" + +using namespace scn::step::hero; + +Guard::Guard(Hero &hero) + : mHero(&hero) +{ + mEnableGuardState = false; + mEnableGuardFlash = false; + mGuardFlashCycle = 0; +} + +void Guard::update() +{ + if (mEnableGuardState != false) + { + u32 guardFlashCycle = mGuardFlashCycle + 1; + mGuardFlashCycle = guardFlashCycle; + + if (guardFlashCycle >= 20) + { + mGuardFlashCycle = 12; + } + } + + mEnableGuardFlash = mEnableGuardState; +} + +void Guard::setGuard(bool flag) +{ + mEnableGuardState = flag; + + if ((mEnableGuardFlash == false) && (mEnableGuardState == true)) + { + return; + } + + mGuardFlashCycle = 0; +} + +#pragma peephole off +_GXColor Guard::getColor() const +{ + _GXColor color; + u32 alpha = 0; + + if (mEnableGuardState != false) + { + alpha = T_ALPHA_TABLE[mGuardFlashCycle]; + } + + color.r = 0xFF; + color.g = 0xFF; + color.b = 0xFF; + color.a = alpha; + + return color; +} diff --git a/src/donut/scn/step/hero/Guard.hpp b/src/donut/scn/step/hero/Guard.hpp new file mode 100644 index 0000000..1dd60fa --- /dev/null +++ b/src/donut/scn/step/hero/Guard.hpp @@ -0,0 +1,51 @@ +#ifndef DONUT_SCN_STEP_HERO_GUARD_HPP +#define DONUT_SCN_STEP_HERO_GUARD_HPP + +#include +#include + +#include "scn/step/hero/Hero.hpp" + +/* clang-format off */ +namespace scn { namespace step { namespace hero { + +const u32 T_ALPHA_TABLE[20] = { + 0xC0, + 0xC0, + 0xA0, + 0x90, + 0x80, + 0x60, + 0x40, + 0x20, + 0x00, + 0x00, + 0x00, + 0x00, + 0x40, + 0x60, + 0x40, + 0x20, + 0x00, + 0x00, + 0x00, + 0x00 +}; + +class Guard +{ +public: + Guard(Hero &hero); + void update(); + void setGuard(bool flag); + _GXColor getColor() const; +private: + /* 0x00 */ Hero *mHero; + /* 0x04 */ bool mEnableGuardState; + /* 0x05 */ bool mEnableGuardFlash; + /* 0x08 */ u32 mGuardFlashCycle; +}; + +}}} + +#endif diff --git a/src/donut/scn/step/spstop/IEventReceiver.hpp b/src/donut/scn/step/spstop/IEventReceiver.hpp new file mode 100644 index 0000000..ccf55c5 --- /dev/null +++ b/src/donut/scn/step/spstop/IEventReceiver.hpp @@ -0,0 +1,19 @@ +#ifndef DONUT_SCN_STEP_SPSTOP_IEVENTRECEIVER_HPP +#define DONUT_SCN_STEP_SPSTOP_IEVENTRECEIVER_HPP + +/* clang-format off */ + +namespace scn { namespace step { namespace spstop { + +class Manager; + +class IEventReceiver +{ +public: + /* 0x8 */ virtual void onSuperStopStarted(const Manager &rManager); + /* 0xC */ virtual void onSuperStopFinished(const Manager &rManager); +}; + +}}} + +#endif diff --git a/src/donut/scn/step/spstop/Manager.cpp b/src/donut/scn/step/spstop/Manager.cpp new file mode 100644 index 0000000..7577d49 --- /dev/null +++ b/src/donut/scn/step/spstop/Manager.cpp @@ -0,0 +1,65 @@ +#include "scn/step/spstop/Manager.hpp" + +using namespace scn::step::spstop; + +Manager::Manager() +{ + m_204 = false; + mIsStopped = false; +} + +Manager::~Manager() +{ +} + +bool Manager::isStopped() const +{ + return mIsStopped; +} + +void Manager::update() +{ + u32 index; + IEventReceiver *pEventReceiver; + + if (m_204 != mIsStopped) + { + mIsStopped = m_204; + if (m_204 == false) + { + for (index = 0; index < mEventReceiver.mEntries; index++) + { + pEventReceiver = mEventReceiver[index]; + pEventReceiver->onSuperStopStarted(*this); + } + } + else + { + for (index = 0; index < mEventReceiver.mEntries; index++) + { + pEventReceiver = mEventReceiver[index]; + pEventReceiver->onSuperStopFinished(*this); + } + } + } + + return; +} + +void Manager::registerEventReceiver(IEventReceiver &rEventReceiver) +{ + if (mEventReceiver.mEntries != 128) + { + IEventReceiver *eventReceiver = mEventReceiver.mArray[mEventReceiver.mEntries]; + *eventReceiver = rEventReceiver; + mEventReceiver.mEntries = mEventReceiver.mEntries + 1; + } + + if (mIsStopped != false) + { + } +} + +void Manager::unregisterEventReceiver(IEventReceiver &rEventReceiver) +{ +} diff --git a/src/donut/scn/step/spstop/Manager.hpp b/src/donut/scn/step/spstop/Manager.hpp new file mode 100644 index 0000000..3fd8fe2 --- /dev/null +++ b/src/donut/scn/step/spstop/Manager.hpp @@ -0,0 +1,31 @@ +#ifndef DONUT_SCN_STEP_SPSTOP_MANAGER_HPP +#define DONUT_SCN_STEP_SPSTOP_MANAGER_HPP + +#include + +#include "hel/common/MutableArray.hpp" +#include "scn/step/spstop/IEventReceiver.hpp" + +// clang-format off +namespace scn { namespace step { namespace spstop { + +class Manager +{ +public: + Manager(); + ~Manager(); + bool isStopped() const; + void update(); + void registerEventReceiver(IEventReceiver &rEventReceiver); + void unregisterEventReceiver(IEventReceiver &rEventReceiver); +private: + /* 0x000 */ hel::common::MutableArray mEventReceiver; + /* 0x204 */ bool m_204; + /* 0x205 */ bool mIsStopped; +}; + +}}} + +// clang-format on + +#endif diff --git a/src/donut/seq/ISequence.hpp b/src/donut/seq/ISequence.hpp index 00ca9fb..8b838d0 100644 --- a/src/donut/seq/ISequence.hpp +++ b/src/donut/seq/ISequence.hpp @@ -1,8 +1,18 @@ #ifndef DONUT_SEQ_ISEQUENCE_HPP #define DONUT_SEQ_ISEQUENCE_HPP +#include + +/* clang-format off */ + namespace seq { - class ISequence; + +class ISequence +{ +public: + ~ISequence(); +}; + } #endif diff --git a/src/donut/seq/SequenceLvMapRoot.cpp b/src/donut/seq/SequenceLvMapRoot.cpp new file mode 100644 index 0000000..5ffdcd4 --- /dev/null +++ b/src/donut/seq/SequenceLvMapRoot.cpp @@ -0,0 +1,52 @@ +#include "seq/SequenceLvMapRoot.hpp" + +using namespace seq; + +SequenceLvMapRoot::SequenceLvMapRoot() +{ +} + +SequenceLvMapRoot::~SequenceLvMapRoot() +{ +} + +u32 SequenceLvMapRoot::nextAction() const +{ +} + +void SequenceLvMapRoot::createChildSequence() const +{ +} + +void SequenceLvMapRoot::onChildSequenceEnd() +{ +} + +void SequenceLvMapRoot::createScene() const +{ +} + +void SequenceLvMapRoot::onSceneEnd(scn::IScene &scene) +{ + return; +} + +void SequenceLvMapRoot::setupForLeaveDoor() +{ +} + +void SequenceLvMapRoot::resetContextHero(bool param_1) +{ +} + +void SequenceLvMapRoot::onChildSequenceEndForLvMap(ISequence &sequence) +{ +} + +void SequenceLvMapRoot::onChildsequenceEndForChallenge(ISequence &sequence) +{ +} + +void SequenceLvMapRoot::GetRuntimeTypeInfo() const +{ +} diff --git a/src/donut/seq/SequenceLvMapRoot.hpp b/src/donut/seq/SequenceLvMapRoot.hpp new file mode 100644 index 0000000..3a4527f --- /dev/null +++ b/src/donut/seq/SequenceLvMapRoot.hpp @@ -0,0 +1,30 @@ +#ifndef DONUT_SEQ_SEQUENCELVMAPROOT_HPP +#define DONUT_SEQ_SEQUENCELVMAPROOT_HPP + +#include "scn/IScene.hpp" +#include "seq/ISequence.hpp" + +/* clang-format off */ + +namespace seq { + +class SequenceLvMapRoot +{ +public: + SequenceLvMapRoot(); + ~SequenceLvMapRoot(); + u32 nextAction() const; + void createChildSequence() const; + void onChildSequenceEnd(); + void createScene() const; + void onSceneEnd(scn::IScene & scene); + void setupForLeaveDoor(); + void resetContextHero(bool param_1); + void onChildSequenceEndForLvMap(ISequence & sequence); + void onChildsequenceEndForChallenge(ISequence & sequence); + void GetRuntimeTypeInfo() const; +}; + +} + +#endif diff --git a/src/hel/common/MutableArray.hpp b/src/hel/common/MutableArray.hpp index 5893403..ebbf7b2 100644 --- a/src/hel/common/MutableArray.hpp +++ b/src/hel/common/MutableArray.hpp @@ -1,16 +1,20 @@ #ifndef HEL_COMMON_MUTABLEARRAY_HPP #define HEL_COMMON_MUTABLEARRAY_HPP -#include +#include "hel/common/Array.hpp" +/* clang-format off */ namespace hel { namespace common { template class MutableArray { public: + MutableArray() : mEntries(0), mArray() {}; ~MutableArray(); -private: - /* 0x0 */ T mArray[S]; + T &operator[](size_t size); +public: + /* 0x0 */ u32 mEntries; + /* 0x4 */ Array mArray; }; }} #endif