diff --git a/CMakeLists.txt b/CMakeLists.txt index 217aba43..d349bb4e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,6 +52,8 @@ add_executable(uking src/KingSystem/Map/mapTypes.h src/KingSystem/Map/mapMubinIter.cpp src/KingSystem/Map/mapMubinIter.h + src/KingSystem/Map/mapObject.cpp + src/KingSystem/Map/mapObject.h src/KingSystem/MessageSystem/mesTransceiver.h diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 9ccd3e35..ceecf691 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -72147,7 +72147,7 @@ 0x0000007100d49af0,sub_7100D49AF0,32, 0x0000007100d49b10,sub_7100D49B10,416, 0x0000007100d49cb0,sub_7100D49CB0,56, -0x0000007100d49ce8,PlacementObj::ctor,124, +0x0000007100d49ce8,PlacementObj::ctor,124,_ZN4ksys3map6ObjectC1Ev! 0x0000007100d49d64,PlacementObj::dtor,52, 0x0000007100d49d98,PlacementObj::initData,380, 0x0000007100d49f14,PlacementObj::initRevivalGameDataFlagAndMiscFlags,620, diff --git a/src/KingSystem/Map/mapObject.cpp b/src/KingSystem/Map/mapObject.cpp new file mode 100644 index 00000000..0fc9714a --- /dev/null +++ b/src/KingSystem/Map/mapObject.cpp @@ -0,0 +1,7 @@ +#include "KingSystem/Map/mapObject.h" + +namespace ksys::map { + +Object::Object() = default; + +} diff --git a/src/KingSystem/Map/mapObject.h b/src/KingSystem/Map/mapObject.h new file mode 100644 index 00000000..648ad3a2 --- /dev/null +++ b/src/KingSystem/Map/mapObject.h @@ -0,0 +1,111 @@ +#pragma once + +#include +#include +#include "KingSystem/Map/mapMubinIter.h" +#include "KingSystem/Utils/Types.h" + +namespace ksys::act { +class BaseProc; +} + +namespace ksys::map { + +class LinkData; + +// FIXME: incomplete +class Object { +public: + // TODO: rename + enum class Flag0 { + + }; + + enum class Flag { + IsLinkTag = 0x1, + IncrementSave = 0x2, + IsLinkTagNAndOrNOr = 0x4, + _8 = 0x8, + ShapeCapsuleOrCylinder = 0x10, + SheikSensorTargetDeadOrAlive = 0x20, + UnderGodForest = 0x40, + UnderGodForestOff = 0x80, + CreateNotRain = 0x100, + ActorCreated = 0x200, + HasTraversePos = 0x400, + HasUniqueName = 0x800, + IsCreateSharpWeapon = 0x1000, + // TODO: rename this. This name is too long... + IsTurnActorBowChargeAndHasBasicSigLink = 0x8000, + }; + + // TODO: rename + enum class ActorFlag8 { + + }; + + enum class HardModeFlag { + ActorCreated = 0x1, + /// This actor only spawns in master mode (hard mode). + IsHardModeActor = 0x2, + /// This actor only spawns during the One-Hit Obliterator (Ichigeki/一撃) challenge. + IsOneHitChallengeActor = 0x4, + /// This actor does not rank up in master mode. + DisableRankup = 0x8, + }; + + Object(); + ~Object(); + + auto getFlags0() const { return mFlags0; } + auto getFlags() const { return mFlags; } + auto getActorFlags8() const { return mActorFlags8; } + auto getHardModeFlags() const { return mHardModeFlags; } + + auto getActorDataIdx() const { return mActorDataIdx; } + auto getIdx() const { return mIdx; } + auto getId() const { return mId; } + auto getStaticCompoundId() const { return mStaticCompoundId; } + + u8 getNumLinksPointingToMe() const { return mNumLinksPointingToMe; } + + const MubinIter& getMubinIter() const { return mMubinIter; } + act::BaseProc* getProc() const { return mProc; } + LinkData* getLinkData() const { return mLinkData; } + + u32 getRevivalGameDataFlagHash() const { return mRevivalGameDataFlagHash; } + u32 getHashId() const { return mHashId; } + + const sead::Vector3f& getTranslate() const { return mTranslate; } + void setTranslate(const sead::Vector3f& translate); + + auto getTraverseDist() const { return mTraverseDist; } + auto getTraverseDistInt() const { return mTraverseDistInt; } + +private: + sead::TypedBitFlag mFlags0; + u16 mActorDataIdx = 0xffff; + sead::TypedBitFlag mFlags; + u8 mIdx = 0; + u8 mNumLinksPointingToMe = 0; + sead::TypedBitFlag mActorFlags8; + u8 _b = 0xff; + u16 mId = 0; + u16 mStaticCompoundId = 0xffff; + void* _10 = nullptr; + void* _18 = nullptr; + void* _20 = nullptr; + MubinIter mMubinIter; + act::BaseProc* mProc = nullptr; + LinkData* mLinkData = nullptr; + u32 mRevivalGameDataFlagHash = 0xffffffff; + void* _50 = nullptr; + u32 mHashId = 0; + sead::Vector3f mTranslate; + f32 mTraverseDist = 0.0; + u16 mTraverseDistInt = 0; + sead::TypedBitFlag mHardModeFlags; +}; +KSYS_CHECK_SIZE_NX150(Object, 0x70); + +} // namespace ksys::map