Skip to content

Commit e6ecd7d

Browse files
committed
- Add cFishHotSpot class and functions GetTribeFishHotSpots(), GetTribeFishTimer(), GetTribeFishEndTime(), SetTribeFishEndTime()
- Add cTribe::GetToolByType() function, and rename functions funcB4h and funcB8h to CreateTool(), RemoveTool() - Add cTribeToolData class and functions LoadTribeToolsData(), GetTribeToolDataArray(), GetTribeToolData(), DisposeTribeToolsData() - Add functions GetToolClass(), GetRefundMoney() to cTribeTool - Add UI::AssetDiscoveryCard - Fix bug when using ResourceKey as the key in map structures
1 parent e64f1aa commit e6ecd7d

20 files changed

+448
-9
lines changed

Spore ModAPI/SourceCode/DLL/AddressesPalettes.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include <Spore\Palettes\PaletteIterator.h>
1515
#include <Spore\Palettes\StandardItemUI.h>
1616
#include <Spore\Palettes\SwatchManager.h>
17+
#include <Spore\Palettes\OutfitterItemUI.h>
1718

1819
namespace Palettes
1920
{
@@ -161,5 +162,9 @@ namespace Palettes
161162
DefineAddress(Start, SelectAddress(0x5C7F40, 0x5C7F70));
162163
DefineAddress(Next, SelectAddress(0x5C7EE0, 0x5C7F10));
163164
}
165+
166+
namespace Addresses(OutfitterItemUI) {
167+
DefineAddress(Initialize, SelectAddress(0x5EF6E0, 0x5EF8D0));
168+
}
164169
}
165170
#endif

Spore ModAPI/SourceCode/DLL/AddressesSimulator.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@
8484
#include <Spore\Simulator\cDefaultToolProjectile.h>
8585
#include <Spore\Simulator\cPlanetaryArtifact.h>
8686
#include <Spore\Simulator\cTribe.h>
87+
#include <Spore\Simulator\cTribeTool.h>
88+
#include <Spore\Simulator\cTribeToolData.h>
8789
#include <Spore\Simulator\SubSystem\cRelationshipManager.h>
8890
#include <Spore\Simulator\SubSystem\GameBehaviorManager.h>
8991
#include <Spore\Simulator\SubSystem\GameInputManager.h>
@@ -142,11 +144,20 @@ namespace Addresses(Simulator)
142144
DefineAddress(CreateUFO, SelectAddress(0x102BB50, 0x102AC60));
143145

144146
DefineAddress(SpawnNpcTribe, SelectAddress(0xC92860, 0xC932F0));
147+
DefineAddress(sTribeFishHotSpots_ptr, SelectAddress(0x157EB90 ,0x157ABB0));
148+
DefineAddress(sTribeFishTimer_ptr, SelectAddress(0x1699678 ,0x16953F8));
149+
DefineAddress(sTribeFishEndTime_ptr, SelectAddress(0x16995E8 ,0x1695368));
150+
151+
DefineAddress(LoadTribeToolsData, SelectAddress(0xC9D7F0, 0xC9DFE0));
152+
DefineAddress(sTribeToolDataArray_ptr, SelectAddress(0x169DC94 ,0x1699A14));
153+
DefineAddress(GetTribeToolData, SelectAddress(0xC9C860, 0xC9D050));
154+
DefineAddress(DisposeTribeToolsData, SelectAddress(0xC9DED0, 0xC9E6C0));
145155

146156
DefineAddress(GetMainSpeciesImageKey, SelectAddress(0x1066AF0, 0x1065F10));
147157

148158
DefineAddress(GetPlayerHomePlanet, SelectAddress(0x10223F0, 0x1021220));
149159

160+
150161
#ifndef SDK_TO_GHIDRA
151162
DefineAddress(LightingWorld_ptr, SelectAddress(0x1682CD4, 0x167EA54));
152163
DefineAddress(PrecalculatedSolarStarRadius_ptr, SelectAddress(0x157DCF0, 0x1579D10));
@@ -1115,6 +1126,15 @@ namespace Simulator
11151126
DefineAddress(Get, SelectAddress(0xB3D430, 0xB3D5D0));
11161127
DefineAddress(PlayCinematic, SelectAddress(0xAE0480, 0xAE08B0));
11171128
}
1129+
1130+
namespace Addresses(cTribe) {
1131+
DefineAddress(GetToolByType, SelectAddress(0xC8ED20, 0xC8F870));
1132+
}
1133+
1134+
namespace Addresses(cTribeTool) {
1135+
DefineAddress(GetToolClass, SelectAddress(0xC9CAB0, 0xC9D2A0));
1136+
DefineAddress(GetRefundMoney, SelectAddress(0xC9C970, 0xC9D160));
1137+
}
11181138
}
11191139

11201140
#ifdef SDK_TO_GHIDRA

Spore ModAPI/SourceCode/Simulator/cTribe.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#ifndef MODAPI_DLL_EXPORT
22
#include <Spore\Simulator\cTribeArchetype.h>
33
#include <Spore\Simulator\cTribe.h>
4+
#include <Spore\Simulator\cTribeTool.h>
5+
#include <Spore\Simulator\cTribeToolData.h>
46

57
namespace Simulator
68
{
@@ -11,5 +13,38 @@ namespace Simulator
1113
auto_STATIC_METHOD(Simulator, cTribe*, SpawnNpcTribe,
1214
Args(const Math::Vector3& position, int tribeArchetype, int numMembers, int arg0, bool arg1, cSpeciesProfile* species),
1315
Args(position, tribeArchetype, numMembers, arg0, arg1, species));
16+
17+
auto_METHOD(cTribe, cTribeTool*, GetToolByType, Args(int toolType), Args(toolType));
18+
19+
eastl::vector<cFishHotSpotUnk>& GetTribeFishHotSpots() {
20+
return *(eastl::vector<cFishHotSpotUnk>*)(GetAddress(Simulator, sTribeFishHotSpots_ptr));
21+
}
22+
23+
cGonzagoTimer& GetTribeFishTimer() {
24+
return *(cGonzagoTimer*)(GetAddress(Simulator, sTribeFishTimer_ptr));
25+
}
26+
27+
uint64_t GetTribeFishEndTime() {
28+
return *(uint64_t*)(GetAddress(Simulator, sTribeFishEndTime_ptr));
29+
}
30+
void SetTribeFishEndTime(uint64_t value) {
31+
*(uint64_t*)(GetAddress(Simulator, sTribeFishEndTime_ptr)) = value;
32+
}
33+
34+
35+
auto_METHOD_(cTribeTool, int, GetToolClass);
36+
auto_METHOD_(cTribeTool, int, GetRefundMoney);
37+
38+
39+
auto_STATIC_METHOD_VOID_(Simulator, LoadTribeToolsData);
40+
41+
eastl::array<cTribeToolData*, 12> GetTribeToolDataArray() {
42+
return *(eastl::array<cTribeToolData*, 12>*)(GetAddress(Simulator, sTribeToolDataArray_ptr));
43+
}
44+
45+
auto_STATIC_METHOD(Simulator, cTribeToolData*, GetTribeToolData, Args(int a), Args(a));
46+
47+
auto_STATIC_METHOD_VOID_(Simulator, DisposeTribeToolsData);
48+
1449
}
1550
#endif

Spore ModAPI/SourceCode/Sporepedia/AssetData.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include <Spore\Sporepedia\ObjectTemplateDB.h>
33
#include <Spore\Sporepedia\AssetData.h>
44
#include <Spore\Sporepedia\AssetViewManager.h>
5+
#include <Spore\Simulator\SubSystem\StarManager.h>
56

67
namespace Sporepedia
78
{
@@ -142,5 +143,39 @@ namespace Sporepedia
142143
auto_METHOD_VIRTUAL_VOID(cSPAssetDataOTDB, IAssetData, SetSummary, Args(bool asyncLoad), Args(asyncLoad));
143144
auto_METHOD_VIRTUAL_VOID(cSPAssetDataOTDB, IAssetData, ProcessSummary, Args(OTDB::ParameterResource* pSummary), Args(pSummary));
144145
auto_METHOD_VIRTUAL_VOID(cSPAssetDataOTDB, IAssetData, SetParameter, Args(const OTDB::Parameter& parameter), Args(parameter));
146+
147+
148+
149+
Simulator::cPlanetRecord* cSPSpaceAssetDataOTDB::GetPlanetRecord() {
150+
if (Simulator::cStarManager::Get() && mPlanetID.internalValue != 0) {
151+
return StarManager.GetPlanetRecord(mPlanetID);
152+
}
153+
else {
154+
return nullptr;
155+
}
156+
}
157+
void cSPSpaceAssetDataOTDB::SetIsPlayable(bool isPlayable) {
158+
mIsPlayable = isPlayable;
159+
}
160+
void cSPSpaceAssetDataOTDB::SetSubtype(uint32_t subtype) {
161+
mSubtype = subtype;
162+
}
163+
void cSPSpaceAssetDataOTDB::funcC4h() {
164+
CALL(Address(0xDCFB70), void, Args(cSPSpaceAssetDataOTDB*), Args(this));
165+
}
166+
167+
cSPSpaceAssetDataOTDB::cSPSpaceAssetDataOTDB()
168+
: field_78()
169+
, field_7C()
170+
, mPlanetID(-1)
171+
, field_84()
172+
, field_88()
173+
, field_8C(0x7fffffff)
174+
, field_90(-1.0f)
175+
, field_94()
176+
, field_98()
177+
{
178+
179+
}
145180
}
146181
#endif

Spore ModAPI/SourceCode/UI/UI.cpp

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#ifndef MODAPI_DLL_EXPORT
22
#include <Spore\UI\GameSettings.h>
33
#include <Spore\UI\EditorNamePanel.h>
4+
#include <Spore\UI\cSPAssetView.h>
5+
#include <Spore\UI\AssetDiscoveryCard.h>
46

57
namespace UI
68
{
@@ -52,5 +54,47 @@ namespace UI
5254
Args(pEntity, pContainer, layoutID, arg, randomNameType));
5355

5456
auto_METHOD_VOID_(EditorNamePanel, Dispose);
57+
58+
59+
cSPAssetView::cSPAssetView() {
60+
//CALL(GetAddress(cSPAssetView, _ctor), void, Args(cSPAssetView*), Args(this));
61+
CALL(Address(0x657DA0), void, Args(cSPAssetView*), Args(this));
62+
}
63+
// Leave empty implementations for everything, as these methods are never called
64+
// We sue Spore's vftable by calling the original constructor
65+
66+
int cSPAssetView::AddRef() {
67+
return DefaultRefCounted::AddRef();
68+
}
69+
int cSPAssetView::Release() {
70+
return DefaultRefCounted::Release();
71+
}
72+
void* cSPAssetView::Cast(uint32_t) const {
73+
return 0;
74+
}
75+
int cSPAssetView::GetEventFlags() const {
76+
return 0;
77+
}
78+
bool cSPAssetView::HandleUIMessage(UTFWin::IWindow* pWindow, const UTFWin::Message& message) {
79+
return false;
80+
}
81+
82+
void cSPAssetView::Load(UTFWin::IWindow* window, Sporepedia::IAssetData* assetData, bool, bool) {
83+
}
84+
void cSPAssetView::func20h() {
85+
}
86+
void cSPAssetView::func24h(int, int) {
87+
}
88+
void cSPAssetView::SetVisible(bool visible) {
89+
}
90+
91+
AssetDiscoveryCard::AssetDiscoveryCard()
92+
: mLayout()
93+
, mAssetData()
94+
, mAssetView()
95+
, mContainerWindow()
96+
, mAssetWindow()
97+
{
98+
}
5599
}
56100
#endif

Spore ModAPI/Spore ModAPI.vcxproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,7 @@
328328
<ClInclude Include="Spore\App\JobManager.h" />
329329
<ClInclude Include="Spore\App\Thumbnail_cImportExport.h" />
330330
<ClInclude Include="Spore\Simulator\SubSystem\CinematicManager.h" />
331+
<ClInclude Include="Spore\Simulator\SubSystem\UIAssetDiscoveryManager.h" />
331332
<ClInclude Include="Spore\Simulator\UIStateMachine.h" />
332333
<ClInclude Include="Spore\BasicIncludes.h" />
333334
<ClInclude Include="Spore\Cell.h" />
@@ -828,7 +829,9 @@
828829
<ClInclude Include="Spore\Swarm\Components\cTextureSlot.h" />
829830
<ClInclude Include="Spore\Terrain\cTerrainSphere.h" />
830831
<ClInclude Include="Spore\Terrain\cTerrainSphereQuad.h" />
832+
<ClInclude Include="Spore\UI\AssetDiscoveryCard.h" />
831833
<ClInclude Include="Spore\UI\CivCommCursorAttachment.h" />
834+
<ClInclude Include="Spore\UI\cSPAssetView.h" />
832835
<ClInclude Include="Spore\UI\cUINewProgressBar.h" />
833836
<ClInclude Include="Spore\UI\CursorAttachment.h" />
834837
<ClInclude Include="Spore\UI\EditorNamePanel.h" />

Spore ModAPI/Spore ModAPI.vcxproj.filters

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2196,6 +2196,15 @@
21962196
<ClInclude Include="Spore\Simulator\SubSystem\CinematicManager.h">
21972197
<Filter>Header Files</Filter>
21982198
</ClInclude>
2199+
<ClInclude Include="Spore\Simulator\SubSystem\UIAssetDiscoveryManager.h">
2200+
<Filter>Header Files</Filter>
2201+
</ClInclude>
2202+
<ClInclude Include="Spore\UI\cSPAssetView.h">
2203+
<Filter>Header Files</Filter>
2204+
</ClInclude>
2205+
<ClInclude Include="Spore\UI\AssetDiscoveryCard.h">
2206+
<Filter>Header Files</Filter>
2207+
</ClInclude>
21992208
</ItemGroup>
22002209
<ItemGroup>
22012210
<ClCompile Include="SourceCode\Allocator.cpp">

Spore ModAPI/Spore/Palettes/OutfitterItemUI.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ namespace Palettes
3939
class OutfitterItemUI : public DefaultItemFrameUI, public App::IMessageListener
4040
{
4141
public:
42+
virtual void Initialize(PaletteItem* pItem, UTFWin::IWindow* pWindow, UTFWin::IWindow* pItemsPanel, PaletteInfo* pInfo) override;
4243

4344
public:
4445
/* 24h */ IWindowPtr field_24; // possible display of the creature
@@ -59,6 +60,10 @@ namespace Palettes
5960
/* 68h */ int field_68; // not initialized
6061
/// If this palette item happens to be an editor model, this will point to the model type.
6162
/* 6Ch */ uint32_t mItemModelTypeID; // -1
63+
/// `toolData_ToolType`
6264
/* 70h */ uint32_t mToolTypeID;
6365
};
66+
namespace Addresses(OutfitterItemUI) {
67+
DeclareAddress(Initialize); // 0x5EF6E0 0x5EF8D0
68+
}
6469
}

Spore ModAPI/Spore/ResourceKey.h

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,12 +122,22 @@ inline bool ResourceKey::operator !=(const ResourceKey &b) const
122122

123123
inline bool ResourceKey::operator >(const ResourceKey &b) const
124124
{
125-
return groupID > b.groupID;
125+
return b < *this;
126126
}
127127

128128
inline bool ResourceKey::operator <(const ResourceKey &b) const
129129
{
130-
return groupID < b.groupID;
130+
if (instanceID == b.instanceID) {
131+
if (typeID == b.typeID) {
132+
return groupID < b.groupID;
133+
}
134+
else {
135+
return typeID < b.typeID;
136+
}
137+
}
138+
else {
139+
return instanceID < b.instanceID;
140+
}
131141
}
132142

133143
namespace eastl

Spore ModAPI/Spore/Simulator.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
#include <Spore\Simulator\SubSystem\SpaceTrading.h>
3939
#include <Spore\Simulator\SubSystem\TerraformingManager.h>
4040
#include <Spore\Simulator\SubSystem\CinematicManager.h>
41+
#include <Spore\Simulator\SubSystem\UIAssetDiscoveryManager.h>
4142

4243
#include <Spore\Simulator\cGameData.h>
4344
#include <Spore\Simulator\cGonzagoSimulator.h>

0 commit comments

Comments
 (0)