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;