diff --git a/Spore ModAPI/SourceCode/Simulator/SimulatorSystem.cpp b/Spore ModAPI/SourceCode/Simulator/SimulatorSystem.cpp index af154e5d..f4d6eafa 100644 --- a/Spore ModAPI/SourceCode/Simulator/SimulatorSystem.cpp +++ b/Spore ModAPI/SourceCode/Simulator/SimulatorSystem.cpp @@ -66,8 +66,8 @@ namespace Simulator : mnRefCount(0) , mLastGameMode(0xFFFFFFFF) , mCurrentGameMode(0xFFFFFFFF) - , field_14(0xFFFFFFFF) - , field_18(0) + , mCurrentTransition(0xFFFFFFFF) + , mCurrentTransitionPhase(0) {} cStrategy::~cStrategy() {} @@ -102,7 +102,7 @@ namespace Simulator return mCurrentGameMode; } bool cStrategy::func24h(uint32_t mode) { - return mode == GetCurrentGameMode() && mode == GetLastGameMode() && field_14 == 0xFFFFFFFF; + return mode == GetCurrentGameMode() && mode == GetLastGameMode() && mCurrentTransition == 0xFFFFFFFF; } void cStrategy::OnLoad(const cSavedGameHeader& savedGame) {} @@ -111,22 +111,22 @@ namespace Simulator void cStrategy::PostUpdate(int deltaTime, int deltaGameTime) {} void cStrategy::func40h(uint32_t mode) { - field_18 = 1; - if (field_14 == 0xFFFFFFFF) field_14 = mode; + mCurrentTransitionPhase = 1; + if (mCurrentTransition == 0xFFFFFFFF) mCurrentTransition = mode; } void cStrategy::func44h(uint32_t mode) { - field_18 = 2; - if (field_14 == 0xFFFFFFFF) field_14 = mode; + mCurrentTransitionPhase = 2; + if (mCurrentTransition == 0xFFFFFFFF) mCurrentTransition = mode; } void cStrategy::func48h() { - mLastGameMode = field_14; - field_14 = 0xFFFFFFFF; - field_18 = 0; + mLastGameMode = mCurrentTransition; + mCurrentTransition = 0xFFFFFFFF; + mCurrentTransitionPhase = 0; } void cStrategy::func4Ch() { - mCurrentGameMode = field_14; - field_14 = 0xFFFFFFFF; - field_18 = 0; + mCurrentGameMode = mCurrentTransition; + mCurrentTransition = 0xFFFFFFFF; + mCurrentTransitionPhase = 0; } } #endif diff --git a/Spore ModAPI/Spore ModAPI.vcxproj b/Spore ModAPI/Spore ModAPI.vcxproj index 9bdc5997..95eac88c 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 c4069454..24a02a51 100644 --- a/Spore ModAPI/Spore ModAPI.vcxproj.filters +++ b/Spore ModAPI/Spore ModAPI.vcxproj.filters @@ -2304,6 +2304,9 @@ Header Files + + Header Files + diff --git a/Spore ModAPI/Spore/Graphics/cCubeMapIndex.h b/Spore ModAPI/Spore/Graphics/cCubeMapIndex.h new file mode 100644 index 00000000..3188cc5d --- /dev/null +++ b/Spore ModAPI/Spore/Graphics/cCubeMapIndex.h @@ -0,0 +1,14 @@ +#pragma once + +#include + +namespace Graphics +{ + struct cCubeMapIndex + { + /* 00h */ int mCol; + /* 04h */ int mRow; + /* 08h */ int mFace; + }; + ASSERT_SIZE(cCubeMapIndex, 0x0C); +} \ No newline at end of file diff --git a/Spore ModAPI/Spore/Simulator/SubSystem/PlanetModel.h b/Spore ModAPI/Spore/Simulator/SubSystem/PlanetModel.h index eb8fe064..39c8ee34 100644 --- a/Spore ModAPI/Spore/Simulator/SubSystem/PlanetModel.h +++ b/Spore ModAPI/Spore/Simulator/SubSystem/PlanetModel.h @@ -18,9 +18,10 @@ ****************************************************************************/ #pragma once +#include #include #include -#include +#include #include /// Access the active Simulator planet manager. @@ -29,6 +30,15 @@ namespace Simulator { using namespace Math; + + struct cPoliticalZone + { + uint32_t mPoliticalID; + Vector3 mCenter; + bool mCityZone; + bool mVisible; + cCity* mCity; + }; //sizeof 0x13208 class cPlanetModel @@ -36,6 +46,36 @@ namespace Simulator , public cStrategy { public: + struct cLandTradeRoute + { + cCity* city1; + cCity* city2; + eastl::vector path; + }; + + struct cBoundaryPointInfo + { + Vector3 mDisplacedPoint; + int8_t mZoneIdxs[4]; + bool mVisited[4]; + }; + + struct cCubeCornerHash + { + size_t operator()(const Graphics::cCubeMapIndex& c) const + { + return c.mFace * 0xfd + c.mCol * 0x25 + c.mRow; + } + }; + + struct cCubeMapIndexEqual + { + bool operator()(const Graphics::cCubeMapIndex& a, const Graphics::cCubeMapIndex& b) const + { + return (a.mFace == b.mFace) && (a.mCol == b.mCol) && (a.mRow == b.mRow); + } + }; + //TODO PLACEHOLDER // B7DC40 Get water level? @@ -63,19 +103,30 @@ namespace Simulator public: //TODO - /* 1Ch */ int field_1C; // not initialized - // one of these is cTerrainSphere*? - /* 20h */ ITerrainPtr mpTerrain; - /* 24h */ Terrain::ITerrain* mpTerrain2; - /* 28h */ float field_28; + /* 20h */ cTerrainSpherePtr mpSphere; + /* 24h */ ITerrainPtr mpTerrain; + /* 28h */ float mWaterFraction; /* 2Ch */ ResourceKey mPlanetKey; - /* 38h */ eastl::string16 field_38; + /* 38h */ eastl::string16 mPlanetName; /* 48h */ bool mbAddedMessageListeners; - /* 4Ch */ void* mpPlanetAStarInfo; - - /* 7Ch */ void* mpPlanetObstacles; + /* 4Ch */ uint32_t* mContinentMap; + /* 50h */ eastl::vector mContinentAreas; + /* 64h */ eastl::vector mContinentAboveWater; + /* 78h */ bool mContinentMapDirty; + /* 7Ch */ uint8_t* mObstacleBitMap; + /* 80h */ eastl::vector mPoliticalZones; + /* 94h */ eastl::vector mPoliticalZoneIdxMap; + /* A8h */ void* mPlanetRibbonGfx; // cPlanetRibbonGfx + /* ACh */ eastl::vector> mSeaTradeRoutes; + /* C0h */ eastl::vector> mAirTradeRoutes; + /* D4h */ eastl::vector mLandTradeRoutes; + /* E8h */ bool mSeaTradeRoutesDirty; + /* E9h */ bool mAirTradeRoutesDirty; + /* EAh */ bool mLandTradeRoutesDirty; + /* ECh */ uint32_t mGameMode; + // eastl::fixed_hash_map mPoliticalBoundaryPoints; + // Graphics::cCubeMapIndex mPoliticalBoundaryStartCorner[15]; - /* A8h */ void* mpPlanetRibbonGfx; //PLACEHODER more things }; diff --git a/Spore ModAPI/Spore/Simulator/SubSystem/cStrategy.h b/Spore ModAPI/Spore/Simulator/SubSystem/cStrategy.h index 39c45dd7..a7c88537 100644 --- a/Spore ModAPI/Spore/Simulator/SubSystem/cStrategy.h +++ b/Spore ModAPI/Spore/Simulator/SubSystem/cStrategy.h @@ -84,8 +84,8 @@ namespace Simulator // NOTE: These 2 mode values can sometimes appear swapped when changing modes. /* 0Ch */ uint32_t mLastGameMode; // -1 /* 10h */ uint32_t mCurrentGameMode; // -1 - /* 14h */ uint32_t field_14; // -1 - /* 18h */ int field_18; + /* 14h */ uint32_t mCurrentTransition; // -1 + /* 18h */ int mCurrentTransitionPhase; }; ASSERT_SIZE(cStrategy, 0x1C); } diff --git a/Spore ModAPI/Spore/Terrain/cTerrainDecal.h b/Spore ModAPI/Spore/Terrain/cTerrainDecal.h index 83ab86cb..bb9aebe9 100644 --- a/Spore ModAPI/Spore/Terrain/cTerrainDecal.h +++ b/Spore ModAPI/Spore/Terrain/cTerrainDecal.h @@ -7,7 +7,8 @@ namespace Terrain struct cTerrainDecal : public Swarm::cDecal { - /* 68h */ Swarm::DecalType mType = Swarm::DecalType::kDecalTypeTerrain; + /* 68h */ float field_68; + // /* 68h */ Swarm::DecalType mType = Swarm::DecalType::kDecalTypeTerrain; }; ASSERT_SIZE(cTerrainDecal, 0x6C); } \ No newline at end of file diff --git a/Spore ModAPI/Spore/Terrain/cTerrainSphere.h b/Spore ModAPI/Spore/Terrain/cTerrainSphere.h index b8f1877b..30776312 100644 --- a/Spore ModAPI/Spore/Terrain/cTerrainSphere.h +++ b/Spore ModAPI/Spore/Terrain/cTerrainSphere.h @@ -34,6 +34,8 @@ #include #include +#define cTerrainSpherePtr eastl::intrusive_ptr + namespace Terrain { enum TerrainGameMode @@ -138,11 +140,11 @@ namespace Terrain struct TerrainModification { - /* 00h */ Transform transform; - /* 38h */ char field_38[0x60]; // floats - /* 98h */ ResourceKey key; - /* A4h */ int field_A4; - /* A8h */ uint32_t modid; + /* 00h */ Transform mTransform; + /* 38h */ Math::Rectangle mBounds[6]; + /* 98h */ ResourceKey mKey; + /* A4h */ uint32_t mFlagsAndBits; + /* A8h */ uint32_t mModId; }; ASSERT_SIZE(TerrainModification, 0xAC); @@ -188,7 +190,7 @@ namespace Terrain /* 20Ch */ cTerrainStateMgr* mpTerrainStateMgr; /* 210h */ cWeatherManagerPtr mpWeatherManager; /* 214h */ int field_214; - /* 218h */ eastl::vector mpDecalList[4]; + /* 218h */ eastl::vector mpDecalList[4]; /* 268h */ eastl::vector mDecalIdFreeList[4]; /* 2B8h */ eastl::vector mpDecalSegList; /* 2CCh */ eastl::vector mDecalSegListIdFreeList; diff --git a/Spore ModAPI/Spore/Terrain/cTerrainSphereDecal.h b/Spore ModAPI/Spore/Terrain/cTerrainSphereDecal.h index 77e0b1ab..c30a64bd 100644 --- a/Spore ModAPI/Spore/Terrain/cTerrainSphereDecal.h +++ b/Spore ModAPI/Spore/Terrain/cTerrainSphereDecal.h @@ -99,7 +99,7 @@ namespace Terrain } public: - /* 74h */ int field_74; // -1 + /* 74h */ int field_74; // -1, index? /* 78h */ cTerrainSphere* mpParentSphere; /* 7Ch */ cTerrainMapSet* mpTerrainMapSet; /* 80h */ eastl::vector mFaceArray;