diff --git a/.gitignore b/.gitignore index 9a0a2daf..fe9459bb 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ bin/ .idea/ .vscode/ .DS_Store +.cache/ # IDA *.id0 diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 335f4fe0..dabd36db 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -53057,32 +53057,32 @@ Address,Quality,Size,Name 0x00000071008a5c94,O,000152,_ZN4ksys3res12EntryFactoryINS0_7ArchiveEE12newResource_EPN4sead4HeapEi 0x00000071008a5d2c,O,000008,_ZNK4ksys3res12EntryFactoryINS0_7ArchiveEE15getResourceSizeEv 0x00000071008a5d34,O,000008,_ZNK4ksys3res12EntryFactoryINS0_7ArchiveEE20getLoadDataAlignmentEv -0x00000071008a5d3c,U,000096, -0x00000071008a5d9c,U,000104, -0x00000071008a5e04,U,000312,E3Mgr::createInstance -0x00000071008a5f3c,U,000268,E3Mgr::isDemoMode -0x00000071008a6048,U,000048,E3Mgr::setIsDemoMode -0x00000071008a6078,U,000144,isRID_Demo -0x00000071008a6108,U,000064,E3Mgr::__auto1 -0x00000071008a6148,U,000068,E3Mgr::__auto0 -0x00000071008a618c,U,000068,E3Mgr::__auto9 -0x00000071008a61d0,U,000164,E3Mgr::isRID_Demo_and_a1x28_is_one -0x00000071008a6274,U,000164,isRID_Demo_and_a1x28_is_one_ -0x00000071008a6318,U,000156,isRID_Demo_and_a1x6f_is_nonzero -0x00000071008a63b4,U,000068,E3Mgr::__auto4 -0x00000071008a63f8,U,000008,E3Mgr::setDemoStage -0x00000071008a6400,U,000008,E3Mgr::setDemoMode -0x00000071008a6408,U,000008, -0x00000071008a6410,U,000012, -0x00000071008a641c,U,000008,E3Mgr::setTimerMaybe -0x00000071008a6424,U,000008,E3Mgr::__auto5 -0x00000071008a642c,U,000128,E3Mgr::loadBuildTimeStubbed -0x00000071008a64ac,U,000008,E3Mgr::resIsReady -0x00000071008a64b4,U,000232,E3Mgr::setEmptyStr -0x00000071008a659c,U,000160,E3Mgr::setIsRIDDemo -0x00000071008a663c,U,000012,E3Mgr::__auto8 -0x00000071008a6648,U,000036,E3Mgr::__auto2 -0x00000071008a666c,U,000240,E3Mgr::__auto3 +0x00000071008a5d3c,O,000096,_ZN5uking5E3Mgr18SingleE3tonDisposer_D1Ev +0x00000071008a5d9c,O,000104,_ZN5uking5E3Mgr18SingletonDisposer_D0Ev +0x00000071008a5e04,O,000312,_ZN5uking5E3Mgr14createInstanceEPN4sead4HeapE +0x00000071008a5f3c,O,000268,_ZNK5uking5E3Mgr10isDemoModeEv +0x00000071008a6048,O,000048,_ZN5uking5E3Mgr13setIsDemoModeEb +0x00000071008a6078,O,000144,_ZNK5uking5E3Mgr10is2017DemoEv +0x00000071008a6108,O,000064,_ZNK5uking5E3Mgr28isDemoMode0AndNotStageSelectEv +0x00000071008a6148,O,000068,_ZNK5uking5E3Mgr28isDemoMode1AndNotStageSelectEv +0x00000071008a618c,O,000068,_ZNK5uking5E3Mgr28isDemoMode2AndNotStageSelectEv +0x00000071008a61d0,O,000164,_ZNK5uking5E3Mgr19isRidDemoAnd28IsOneEv +0x00000071008a6274,O,000164,_ZNK5uking5E3Mgr20isRidDemoAnd28IsOne_Ev +0x00000071008a6318,O,000156,_ZNK5uking5E3Mgr23isRidDemoAnd6fIsNonzeroEv +0x00000071008a63b4,O,000068,_ZNK5uking5E3Mgr12getDemoStageEv +0x00000071008a63f8,O,000008,_ZN5uking5E3Mgr12setDemoStageEi +0x00000071008a6400,O,000008,_ZN5uking5E3Mgr11setDemoModeEi +0x00000071008a6408,O,000008,_ZN5uking5E3Mgr7clear28Ev +0x00000071008a6410,O,000012,_ZN5uking5E3Mgr5set28Ev +0x00000071008a641c,O,000008,_ZN5uking5E3Mgr13setTimerMaybeEi +0x00000071008a6424,O,000008,_ZNK5uking5E3Mgr5get2CEv +0x00000071008a642c,O,000128,_ZN5uking5E3Mgr20loadBuildTimeStubbedEv +0x00000071008a64ac,O,000008,_ZN5uking5E3Mgr10resIsReadyEv +0x00000071008a64b4,O,000232,_ZN5uking5E3Mgr11setEmptyStrEv +0x00000071008a659c,O,000160,_ZN5uking5E3Mgr12setIsRidDemoEb +0x00000071008a663c,O,000012,_ZN5uking5E3Mgr5set6CEb +0x00000071008a6648,O,000036,_ZN5uking5E3Mgr6_auto2Ev +0x00000071008a666c,O,000240,_ZN5uking5E3Mgr6_auto3Ev 0x00000071008a675c,U,001932,E3Mgr::calc 0x00000071008a6ee8,U,000428, 0x00000071008a7094,U,000360, diff --git a/lib/NintendoSDK b/lib/NintendoSDK index 3077c49a..c355f876 160000 --- a/lib/NintendoSDK +++ b/lib/NintendoSDK @@ -1 +1 @@ -Subproject commit 3077c49affa2770c5336764ca062ed50e7444b5b +Subproject commit c355f876626638d265c7eb7bf90928e25e161bec diff --git a/lib/sead b/lib/sead index 79f528be..24d64b12 160000 --- a/lib/sead +++ b/lib/sead @@ -1 +1 @@ -Subproject commit 79f528be96a3d7c844847ab6371e0ae6b38c83c7 +Subproject commit 24d64b1255378c36299f84a28297e16e37b8e569 diff --git a/src/Game/CMakeLists.txt b/src/Game/CMakeLists.txt index 944173ae..8b2a312e 100644 --- a/src/Game/CMakeLists.txt +++ b/src/Game/CMakeLists.txt @@ -11,4 +11,6 @@ target_sources(uking PRIVATE gameScene.h gameStageInfo.cpp gameStageInfo.h + E3Mgr.cpp + E3Mgr.h ) diff --git a/src/Game/E3Mgr.cpp b/src/Game/E3Mgr.cpp new file mode 100644 index 00000000..61b7e60b --- /dev/null +++ b/src/Game/E3Mgr.cpp @@ -0,0 +1,181 @@ +#include "E3Mgr.h" +#include "KingSystem/Map/mapAutoPlacementMgr.h" +#include "KingSystem/Map/mapPlacementMgr.h" +#include "KingSystem/Resource/resLoadRequest.h" +#include "controller/seadController.h" +#include "devenv/seadEnvUtil.h" +#include "prim/seadSafeString.h" + +/* Not yet attempted: + * E3Mgr::calc - Requires SeadController and globals + * sub_71008A6EE8 - Requires SeadController + * sub_71008A7094 - Requires RTTI from not decompiled classes + */ + +extern bool isStageSelectState(); + +using PlacementMgr = ksys::map::PlacementMgr; + +namespace uking { + +SEAD_SINGLETON_DISPOSER_IMPL(E3Mgr) + +bool E3Mgr::isDemoMode() const { + if (E3Mgr::is2017Demo()) { + return true; + } + if (E3Mgr::isRidDemo()) { + return true; + } + + return mForceDemoMode; +} + +void E3Mgr::setIsDemoMode(bool demoMode) { + mForceDemoMode = demoMode; + PlacementMgr::sFlags.set(PlacementMgr::MgrStaticFlags::DemoMode); + if (!demoMode) { + PlacementMgr::sFlags.reset(PlacementMgr::MgrStaticFlags::DemoMode); + } +} + +bool E3Mgr::is2017Demo() const { + return sead::EnvUtil::getRomType() == "Show_2017_1st"; +} + +bool E3Mgr::isRidDemo() const { + return sead::EnvUtil::getRomType() == "RID_Demo"; +} + +void E3Mgr::clear28() { + _28 = 0; +} + +void E3Mgr::set28() { + _28 = 1; +} + +bool E3Mgr::isDemoMode0AndNotStageSelect() const { + return E3Mgr::isDemoMode() && mDemoMode == 0 && !isStageSelectState(); +} + +bool E3Mgr::isDemoMode1AndNotStageSelect() const { + return E3Mgr::isDemoMode() && mDemoMode == 1 && !isStageSelectState(); +} + +bool E3Mgr::isDemoMode2AndNotStageSelect() const { + return E3Mgr::isDemoMode() && mDemoMode == 2 && !isStageSelectState(); +} + +bool E3Mgr::is28One() const { + return _28 == 1; +} + +bool E3Mgr::isRidDemoAnd28IsOne() const { + if (isRidDemo() && is28One()) { + return true; + } + return false; +} + +bool E3Mgr::isRidDemoAnd28IsOne_() const { + if ((isRidDemo() && is28One())) { + return true; + } + return false; +} + +bool E3Mgr::isRidDemoAnd6fIsNonzero() const { + return isRidDemo() && _6f != 0; +} + +s32 E3Mgr::getDemoStage() const { + if ((isDemoMode()) && (mDemoMode == 2) && (isStageSelectState() == 0)) { + return mDemoStage; + } + return -1; +} + +void E3Mgr::setDemoStage(s32 demoStage) { + mDemoStage = demoStage; +} + +void E3Mgr::setDemoMode(s32 demoMode) { + mDemoMode = demoMode; +} + +void E3Mgr::setTimerMaybe(s32 a2) { + _2C = a2; +} + +s32 E3Mgr::get2C() const { + return _2C; +} + +void E3Mgr::loadBuildTimeStubbed() { + ksys::res::LoadRequest req; + + req._21 = true; + req._22 = true; + req.mLoadCompressed = true; + req.mRequester = "E3Mgr"; + req.mPath = "System/BuildTime.txt"; +} + +s32 E3Mgr::resIsReady() { + return true; +} + +void E3Mgr::setEmptyStr() { + mStr = sead::SafeStringBase::cEmptyString; +} + +void E3Mgr::setIsRidDemo(bool a2) { + if (isRidDemo()) { + mIsRidDemo2 = a2; + } +} + +void E3Mgr::set6C(bool a2) { + _6c = a2; +} + +void E3Mgr::_auto2() { + E3Mgr::_auto3(); + _6d = 0; +} + +//! TODO : this should be a real struct +struct Dummy { + char _0[0xA00]; + u32 a00; +}; + +extern Dummy* test; + +void E3Mgr::_auto3() { + bool isDemo; + + _6a = 0; + _68 = 0; + _69 = 0; + _6e = 0; + _6f = 0; + mIsRidDemo = false; + mIsRidDemo2 = false; + + if (!isRidDemo() || !_6c) { + mTick1.setNow(); + } + mTick2.setNow(); + mTick3.setNow(); + mTick4.setNow(); + _30 = -2; + isDemo = E3Mgr::isDemoMode(); + if (isDemo) { + if (test) + test->a00 |= 0x40; + } +} + +} // namespace uking diff --git a/src/Game/E3Mgr.h b/src/Game/E3Mgr.h new file mode 100644 index 00000000..dcc75e40 --- /dev/null +++ b/src/Game/E3Mgr.h @@ -0,0 +1,87 @@ +#pragma once + +#include + +#include +#include +#include +#include