mirror of https://github.com/zeldaret/botw.git
Decompile most of E3mgr (#101)
This commit is contained in:
parent
c1d60be485
commit
0bdc0c7611
|
@ -19,6 +19,7 @@ bin/
|
|||
.idea/
|
||||
.vscode/
|
||||
.DS_Store
|
||||
.cache/
|
||||
|
||||
# IDA
|
||||
*.id0
|
||||
|
|
|
@ -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,
|
||||
|
|
Can't render this file because it is too large.
|
|
@ -1 +1 @@
|
|||
Subproject commit 3077c49affa2770c5336764ca062ed50e7444b5b
|
||||
Subproject commit c355f876626638d265c7eb7bf90928e25e161bec
|
2
lib/sead
2
lib/sead
|
@ -1 +1 @@
|
|||
Subproject commit 79f528be96a3d7c844847ab6371e0ae6b38c83c7
|
||||
Subproject commit 24d64b1255378c36299f84a28297e16e37b8e569
|
|
@ -11,4 +11,6 @@ target_sources(uking PRIVATE
|
|||
gameScene.h
|
||||
gameStageInfo.cpp
|
||||
gameStageInfo.h
|
||||
E3Mgr.cpp
|
||||
E3Mgr.h
|
||||
)
|
||||
|
|
|
@ -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<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
|
|
@ -0,0 +1,87 @@
|
|||
#pragma once
|
||||
|
||||
#include <nn/os.h>
|
||||
|
||||
#include <basis/seadTypes.h>
|
||||
#include <heap/seadDisposer.h>
|
||||
#include <prim/seadSafeString.h>
|
||||
#include <time/seadTickSpan.h>
|
||||
#include <time/seadTickTime.h>
|
||||
|
||||
#include "KingSystem/Resource/resHandle.h"
|
||||
|
||||
namespace uking {
|
||||
|
||||
class E3Mgr {
|
||||
E3Mgr() = default;
|
||||
SEAD_SINGLETON_DISPOSER(E3Mgr)
|
||||
|
||||
public:
|
||||
bool isDemoMode() const;
|
||||
void setIsDemoMode(bool demoMode);
|
||||
bool isRidDemo() const;
|
||||
bool is2017Demo() const;
|
||||
|
||||
void clear28();
|
||||
void set28();
|
||||
bool isDemoMode0AndNotStageSelect() const;
|
||||
bool isDemoMode1AndNotStageSelect() const;
|
||||
bool isDemoMode2AndNotStageSelect() const;
|
||||
void _auto2();
|
||||
void _auto3();
|
||||
|
||||
void set6C(bool a2);
|
||||
|
||||
bool isRidDemoAnd28IsOne() const;
|
||||
bool isRidDemoAnd28IsOne_() const;
|
||||
bool isRidDemoAnd6fIsNonzero() const;
|
||||
|
||||
void setDemoStage(s32 demoStage);
|
||||
void setDemoMode(s32 demoMode);
|
||||
|
||||
void setTimerMaybe(s32 a2);
|
||||
s32 resIsReady();
|
||||
|
||||
s32 get2C() const;
|
||||
s32 getDemoStage() const;
|
||||
|
||||
bool is28One() const;
|
||||
|
||||
void loadBuildTimeStubbed();
|
||||
|
||||
void setEmptyStr();
|
||||
|
||||
void setIsRidDemo(bool a2);
|
||||
|
||||
E3Mgr* sub_71008A6EE8();
|
||||
|
||||
private:
|
||||
bool mForceDemoMode = false;
|
||||
u32 mDemoMode = 0;
|
||||
u32 _28 = 0;
|
||||
s32 _2C = 1200;
|
||||
s32 _30 = -2;
|
||||
sead::TickTime mTick1;
|
||||
sead::TickTime mTick2;
|
||||
sead::TickTime mTick3;
|
||||
sead::TickTime mTick4;
|
||||
sead::TickTime mTick5;
|
||||
sead::TickTime mTick6;
|
||||
u8 _68 = 0;
|
||||
u8 _69 = 0;
|
||||
u8 _6a = 0;
|
||||
bool mIsRidDemo = false;
|
||||
u8 _6c = 0;
|
||||
u8 _6d = 1;
|
||||
u8 _6e = 0;
|
||||
u8 _6f = 0;
|
||||
bool mIsRidDemo2 = false;
|
||||
|
||||
sead::FixedSafeString<32> mStr;
|
||||
|
||||
ksys::res::Handle mHandle;
|
||||
|
||||
s32 mDemoStage = -1;
|
||||
};
|
||||
|
||||
} // namespace uking
|
|
@ -78,7 +78,7 @@ public:
|
|||
|
||||
bool isGrudgeMerge() const { return sFlags.isOn(MgrStaticFlags::GrudgeMerge); }
|
||||
|
||||
static sead::TypedBitFlag<MgrStaticFlags, u32> sFlags;
|
||||
static sead::TypedBitFlag<MgrStaticFlags, u16> sFlags;
|
||||
|
||||
u32 _28;
|
||||
u32 _2c = 0;
|
||||
|
|
Loading…
Reference in New Issue