From a715461ec695c3c0cf9c1ec7cc3661c49b56441d Mon Sep 17 00:00:00 2001 From: emd4600 Date: Fri, 25 Oct 2024 18:58:23 +0200 Subject: [PATCH] Add cNpcTribeController class --- .../SourceCode/DLL/AddressesSimulator.cpp | 5 +++ .../SourceCode/Simulator/SimulatorMisc.cpp | 5 +++ Spore ModAPI/Spore ModAPI.vcxproj | 1 + Spore ModAPI/Spore ModAPI.vcxproj.filters | 3 ++ Spore ModAPI/Spore/Simulator.h | 1 + .../Spore/Simulator/cNpcTribeController.h | 38 +++++++++++++++++++ 6 files changed, 53 insertions(+) create mode 100644 Spore ModAPI/Spore/Simulator/cNpcTribeController.h diff --git a/Spore ModAPI/SourceCode/DLL/AddressesSimulator.cpp b/Spore ModAPI/SourceCode/DLL/AddressesSimulator.cpp index 7aa9e50d..3875b3ad 100644 --- a/Spore ModAPI/SourceCode/DLL/AddressesSimulator.cpp +++ b/Spore ModAPI/SourceCode/DLL/AddressesSimulator.cpp @@ -87,6 +87,7 @@ #include #include #include +#include #include #include #include @@ -1181,6 +1182,10 @@ namespace Simulator namespace Addresses(cObstacleManager) { DefineAddress(Get, SelectAddress(0xB3D320, 0xB3D4C0)); } + + namespace Addresses(cNpcTribeController) { + DefineAddress(Get, SelectAddress(0xCC8330, 0xCC8C90)); + } } #ifdef SDK_TO_GHIDRA diff --git a/Spore ModAPI/SourceCode/Simulator/SimulatorMisc.cpp b/Spore ModAPI/SourceCode/Simulator/SimulatorMisc.cpp index a60529c6..818d452e 100644 --- a/Spore ModAPI/SourceCode/Simulator/SimulatorMisc.cpp +++ b/Spore ModAPI/SourceCode/Simulator/SimulatorMisc.cpp @@ -20,6 +20,7 @@ #include #include #include +#include namespace Simulator { @@ -234,6 +235,10 @@ namespace Simulator /// ObstacleManager /// auto_STATIC_METHOD_(cObstacleManager, cObstacleManager*, Get); + + /// cNpcTribeController /// + + auto_STATIC_METHOD_(cNpcTribeController, cNpcTribeController*, Get); } #endif \ No newline at end of file diff --git a/Spore ModAPI/Spore ModAPI.vcxproj b/Spore ModAPI/Spore ModAPI.vcxproj index 4cfbea8f..29486064 100644 --- a/Spore ModAPI/Spore ModAPI.vcxproj +++ b/Spore ModAPI/Spore ModAPI.vcxproj @@ -331,6 +331,7 @@ + diff --git a/Spore ModAPI/Spore ModAPI.vcxproj.filters b/Spore ModAPI/Spore ModAPI.vcxproj.filters index 0f8ce111..34c2ac02 100644 --- a/Spore ModAPI/Spore ModAPI.vcxproj.filters +++ b/Spore ModAPI/Spore ModAPI.vcxproj.filters @@ -2235,6 +2235,9 @@ Header Files + + Header Files + diff --git a/Spore ModAPI/Spore/Simulator.h b/Spore ModAPI/Spore/Simulator.h index 83dbfd0b..f13251a2 100644 --- a/Spore ModAPI/Spore/Simulator.h +++ b/Spore ModAPI/Spore/Simulator.h @@ -91,6 +91,7 @@ #include #include #include +#include #include diff --git a/Spore ModAPI/Spore/Simulator/cNpcTribeController.h b/Spore ModAPI/Spore/Simulator/cNpcTribeController.h new file mode 100644 index 00000000..3d3f4ebb --- /dev/null +++ b/Spore ModAPI/Spore/Simulator/cNpcTribeController.h @@ -0,0 +1,38 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +#define NpcTribeController (*Simulator::cNpcTribeController::Get()) + +namespace Simulator +{ + class cNpcTribeController + : public cGonzagoSimulator + { + public: + static const uint32_t TYPE = 0x11418FF; + + /// Returns the only cNpcTribeController instance; this function also creates + /// that instance the first time it is called. + static cNpcTribeController* Get(); + + public: + /* 10h */ cGonzagoTimer mPostTutorialDelayTimer_Mating; + /* 30h */ cGonzagoTimer mPostTutorialDelayTimer_Food; + /* 50h */ eastl::string16 field_50; + /* 60h */ eastl::map mBabyGrowthTimers; + /* 7Ch */ eastl::fixed_vector mNPCTribeSpeciesKeys; + /* D0h */ eastl::fixed_vector mNPCTribeSpecies; + /* FCh */ int mTribeAppearanceProperty; + }; + ASSERT_SIZE(cNpcTribeController, 0x100); + + namespace Addresses(cNpcTribeController) { + DeclareAddress(Get); // 0xCC8330 0xCC8C90 + } +} \ No newline at end of file