Decompile most of E3mgr (#101)

This commit is contained in:
louist103 2022-10-09 05:21:08 -04:00 committed by GitHub
parent c1d60be485
commit 0bdc0c7611
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 300 additions and 29 deletions

1
.gitignore vendored
View File

@ -19,6 +19,7 @@ bin/
.idea/
.vscode/
.DS_Store
.cache/
# IDA
*.id0

View File

@ -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

@ -1 +1 @@
Subproject commit 79f528be96a3d7c844847ab6371e0ae6b38c83c7
Subproject commit 24d64b1255378c36299f84a28297e16e37b8e569

View File

@ -11,4 +11,6 @@ target_sources(uking PRIVATE
gameScene.h
gameStageInfo.cpp
gameStageInfo.h
E3Mgr.cpp
E3Mgr.h
)

181
src/Game/E3Mgr.cpp Normal file
View File

@ -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

87
src/Game/E3Mgr.h Normal file
View File

@ -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

View File

@ -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;