botw/src/Game/E3Mgr.cpp

182 lines
3.5 KiB
C++

#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<char>::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