ksys/world: Fix WorldInfo, DungeonEnv, Manager structs

This commit is contained in:
Léo Lam 2021-04-26 22:28:06 +02:00
parent 92ed3dbddb
commit 34c85c322e
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
4 changed files with 123 additions and 53 deletions

View File

@ -89538,9 +89538,9 @@
0x00000071010f220c,sub_71010F220C,60,
0x00000071010f2248,sub_71010F2248,1536,
0x00000071010f2848,sub_71010F2848,8,
0x00000071010f2850,WorldMgr::destroyInstance,100,
0x00000071010f28b4,WorldMgr::destroyInstanceDelete,108,
0x00000071010f2920,WorldMgr::createInstance,136,
0x00000071010f2850,WorldMgr::destroyInstance,100,_ZN4ksys5world7Manager18SingletonDisposer_D1Ev
0x00000071010f28b4,WorldMgr::destroyInstanceDelete,108,_ZN4ksys5world7Manager18SingletonDisposer_D0Ev
0x00000071010f2920,WorldMgr::createInstance,136,_ZN4ksys5world7Manager14createInstanceEPN4sead4HeapE
0x00000071010f29a8,nullsub_5567,4,
0x00000071010f29ac,nullsub_5568,4,
0x00000071010f29b0,nullsub_5569,4,
@ -89576,7 +89576,7 @@
0x00000071010f3cdc,WorldMgr::isCurrentClimateForbidComeback,96,
0x00000071010f3d3c,WorldMgr::isClimateForbidComeback,92,
0x00000071010f3d98,WorldMgr::unloadDgnenvAndGetWeatherMgr,76,
0x00000071010f3de4,WorldMgr::ctor,728,
0x00000071010f3de4,WorldMgr::ctor,728,_ZN4ksys5world7ManagerC1Ev!
0x00000071010f40bc,WorldMgr::init,836,
0x00000071010f4400,WorldMgr::resetForStageUnload,84,
0x00000071010f4454,WorldMgr::loadBwinfo,148,
@ -89584,8 +89584,8 @@
0x00000071010f66c4,WorldMgr::updateRemainsType,268,
0x00000071010f67d0,WorldMgr::updateGraphicsMap,164,
0x00000071010f6874,sub_71010F6874,680,
0x00000071010f6b1c,sub_71010F6B1C,116,
0x00000071010f6b90,sub_71010F6B90,76,
0x00000071010f6b1c,sub_71010F6B1C,116,_ZN4ksys5world10DungeonEnvD2Ev
0x00000071010f6b90,sub_71010F6B90,76,_ZN4ksys5world9WorldInfoD2Ev
0x00000071010f6bdc,sub_71010F6BDC,36,
0x00000071010f6c00,WorldMgr::initBeforeStageGenB,32,
0x00000071010f6c20,WorldMgr::__auto4,32,
@ -89630,8 +89630,8 @@
0x00000071010f8438,WorldMgr::setIgnitedLevel,188,
0x00000071010f84f4,WorldMgr::__auto7,48,
0x00000071010f8524,WorldMgr::__auto17,32,
0x00000071010f8544,sub_71010F8544,64,
0x00000071010f8584,sub_71010F8584,104,
0x00000071010f8544,sub_71010F8544,64,_ZN4ksys5world9WorldInfoD0Ev
0x00000071010f8584,sub_71010F8584,104,_ZN4ksys5world10DungeonEnvD0Ev
0x00000071010f85ec,getDungeonSizeText,428,
0x00000071010f8798,j__ZdlPv_1204,4,
0x00000071010f879c,_ZN4sead15FixedSafeStringILi9EEaSERKNS_14SafeStringBaseIcEE,240,

Can't render this file because it is too large.

View File

@ -1,3 +1,4 @@
target_sources(uking PRIVATE
worldManager.cpp
worldManager.h
)

View File

@ -0,0 +1,10 @@
#include "KingSystem/World/worldManager.h"
namespace ksys::world {
SEAD_SINGLETON_DISPOSER_IMPL(Manager)
// NON_MATCHING: stores in a different order (handwritten assignments?) but should be equivalent
Manager::Manager() = default;
} // namespace ksys::world

View File

@ -1,45 +1,43 @@
#pragma once
#include <agl/Utils/aglAtomicPtrArray.h>
#include <agl/Utils/aglParameter.h>
#include <agl/Utils/aglParameterIO.h>
#include <agl/Utils/aglParameterObj.h>
#include <container/seadBuffer.h>
#include <container/seadPtrArray.h>
#include <hostio/seadHostIONode.h>
#include <mc/seadJobQueue.h>
#include "KingSystem/Resource/resHandle.h"
#include "KingSystem/Utils/ParamIO.h"
#include "agl/Utils/aglAtomicPtrArray.h"
#include "agl/Utils/aglParameter.h"
#include "agl/Utils/aglParameterObj.h"
#include "KingSystem/Utils/Types.h"
namespace ksys::world {
// FIXME
class Climate {};
class WorldInfo : public ParamIO {
class WorldInfo : public agl::utl::IParameterIO, public sead::hostio::Node {
public:
WorldInfo() : ParamIO("winfo", 0) {}
~WorldInfo();
bool ParamIO_m0() override { return true; }
WorldInfo() : agl::utl::IParameterIO("winfo", 0) {}
u8 _1d8[0x20];
res::Handle mResHandle;
u32 mNumClimates = 0;
Climate* mClimates = nullptr;
sead::Buffer<Climate> mClimates;
};
KSYS_CHECK_SIZE_NX150(WorldInfo, 0x258);
class DungeonEnv : public ParamIO {
class DungeonEnv : public agl::utl::IParameterIO, public sead::hostio::Node {
public:
DungeonEnv() : ParamIO("dgenv", 0) {}
~DungeonEnv();
bool ParamIO_m0() override { return true; }
DungeonEnv() : agl::utl::IParameterIO("dgnenv", 0) {}
u8 _1d8[0x20];
res::Handle mResHandle;
agl::utl::Parameter<f32> mLightLongitude;
agl::utl::Parameter<float> mLightLongitude;
agl::utl::Parameter<sead::FixedSafeString<32>> mDungeonSize;
agl::utl::Parameter<sead::FixedSafeString<32>> mString538;
agl::utl::ParameterObj mDungeonEnvObj;
sead::PtrArray<void*> mgrs{};
sead::DirectResource* mInfoRes = nullptr;
};
KSYS_CHECK_SIZE_NX150(DungeonEnv, 0x338);
// FIXME: incomplete
class Manager : public sead::hostio::Node {
@ -48,41 +46,102 @@ class Manager : public sead::hostio::Node {
virtual ~Manager();
public:
enum class CalcType {
_3 = 3,
};
enum class StageType {
};
enum class RemainsType {
};
enum class FieldType {
};
enum class ScalingMode {
};
bool isRaining(const sead::Vector3f& pos) const;
WorldInfo mWorldInfo;
DungeonEnv mDungeonEnv;
sead::DirectResource* mInfoRes{};
agl::utl::AtomicPtrArray<void*> mAtomicPtrArray{0, 0};
u32 _5e0 = 1;
u32 mCalcType = 3;
sead::PtrArray<void*> mMgrs;
agl::utl::AtomicPtrArray<void*> mAtomicPtrArray;
sead::BitFlag32 _5e0 = 1;
CalcType mCalcType = CalcType::_3;
sead::FixedSizeJQ mJobQueue;
f32 mWindPowerIf78C = 5.0;
f32 mTempDirectDayExtra = 100000.0;
f32 mTempDirectNightExtra = 100000.0;
f32 mTempDirectDay = 100000.0;
f32 mTempDirectNight = 100000.0;
s32 _794;
s32 mStageType = 0;
s32 mStageType2 = 0;
u8 mGameSceneInitialised = 0;
sead::Vector3f mPrevPlayerPos{};
sead::Vector3f mPlayerPos{};
sead::Vector3f mPrevCameraPos{};
sead::Vector3f mCameraPos{};
f32 _770 = 0.0;
s32 _778 = 0;
s32 _78c = 0;
s32 _7ac = 0;
void* _7a4 = nullptr;
void* _79c = nullptr;
f32 mWindPowerAocField = 0.75;
u8 mWorldInfoLoaded = 0;
sead::Vector3f mCameraPos{0, 0, 0};
sead::Vector3f mPrevCameraPos{0, 0, 0};
sead::Vector3f mPlayerPos{0, 0, 0};
sead::Vector3f mPrevPlayerPos{0, 0, 0};
StageType mStageType{};
StageType mStageType2{};
u32 _6c0 = 0;
u32 _6c4 = 30;
u32 _6c8 = 0;
bool _6cc = false;
bool mGameSceneInitialized = false;
float mFloatsPerClimate[20];
u32 _720 = 0;
sead::Vector3f mWindDir{0, 0, -1};
sead::Vector3f mDirectionalLightVecA{0, 1, 0};
sead::Vector3f mDirectionalLightVecB{0, 1, 0};
sead::Vector3f _748{0, 0, 0};
float _754 = 1.0;
float mWindPowerIf7D4 = 1.0;
float mWindPowerIf78C = 5.0;
float mTempDirectDayExtra = 99999.9;
float mTempDirectNightExtra = 99999.9;
float mTempDirectDay = 99999.9;
float mTempDirectNight = 99999.9;
float _770 = 0.0;
float mFocusDist = 100.0;
float _778 = -1.0;
u32 _77c = 9;
u32 mCurrentArea = 0;
u32 mPrevArea = 0;
u32 _788 = 0;
u32 _78c = 0;
u32 _790 = 0;
u32 _794 = 0;
int _798 = -1;
u32 _79c = 0;
u32 _7a0 = 0;
u32 _7a4 = 0;
u32 _7a8 = 0;
u32 _7ac = 0;
u32 _7b0 = 0;
u32 mIgnitedLevel = 0;
u32 _7b8 = 0;
RemainsType mRemainsType{};
FieldType mFieldType{};
ScalingMode mScalingMode{};
u32 _7c8 = 0;
float mWindPowerAocField = 0.75;
bool mWorldInfoLoaded = false;
u8 mWeatherType = 0xFF;
u8 _7d2 = 0;
u8 _7d3 = 1;
u8 _7d4 = 0;
u8 mInFinalTrialBossBattleArea = 0;
u8 _7d5 = 0;
u8 _7d6 = 0;
u8 _7d7 = 0;
bool mIsDemo = false;
bool mIsMainField = false;
bool mIsBattleCurseR = false;
bool mInFinalTrialBossBattleArea = false;
};
KSYS_CHECK_SIZE_NX150(Manager, 0x7e0);
} // namespace ksys::world