Skip to content

Commit af63174

Browse files
committed
Custom asset types and PNG saving
1 parent 9eff34c commit af63174

18 files changed

+820
-92
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,25 @@
11
#ifndef MODAPI_DLL_EXPORT
22
#include <Spore\App\Thumbnail_cImportExport.h>
3+
#include <Spore\App\AppData.h>
34

45
namespace App
56
{
67
auto_STATIC_METHOD_(Thumbnail_cImportExport, Thumbnail_cImportExport*, Get);
78

89
auto_METHOD(Thumbnail_cImportExport, bool, GetFolderPath,
910
Args(uint32_t creationType, string16& dst), Args(creationType, dst));
11+
12+
auto_METHOD(Thumbnail_cImportExport, bool, FolderPathFromLocale,
13+
Args(uint32_t instanceID, string16& dst, uint32_t tableID), Args(instanceID, dst, tableID));
14+
15+
auto_METHOD(Thumbnail_cImportExport, bool, SavePNG,
16+
Args(Resource::ResourceObject* pResource, RenderWare::Raster* pImage, Resource::DBPF* pDBPF,
17+
bool forceReplace, bool disableSteganography),
18+
Args(pResource, pImage, pDBPF, forceReplace, disableSteganography));
19+
20+
21+
auto_STATIC_METHOD(AppData, Resource::DBPF*, GetPackageForSaveDirectory, Args(uint32_t arg), Args(arg));
22+
auto_STATIC_METHOD_VOID(AppData, SetPackageForSaveDirectory,
23+
Args(uint32_t arg, Resource::DBPF* package, bool b), Args(arg, package, b));
1024
}
1125
#endif

Spore ModAPI/SourceCode/DLL/AddressesApp.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include <Spore\App\ScenarioMode.h>
2020
#include <Spore\App\Thumbnail_cImportExport.h>
2121
#include <Spore\App\cLocaleManager.h>
22+
#include <Spore\App\AppData.h>
2223

2324
namespace Addresses(App)
2425
{
@@ -346,11 +347,19 @@ namespace App
346347
{
347348
DefineAddress(Get, SelectAddress(0x5F7750, , 0x5F79C0));
348349
DefineAddress(GetFolderPath, SelectAddress(0x5F9140, , 0x5F92C0));
350+
DefineAddress(FolderPathFromLocale, SelectAddress(0x5F9220, , 0x5F93A0));
351+
DefineAddress(SavePNG, SelectAddress(0x5FA7E0, , 0x5FA960));
349352
}
350353

351354
namespace Addresses(cLocaleManager)
352355
{
353356
DefineAddress(Get, SelectAddress(0x67DF60, , 0x67DE00));
354357
}
358+
359+
namespace Addresses(AppData)
360+
{
361+
DefineAddress(GetPackageForSaveDirectory, SelectAddress(0x6B22C0, , 0x6B1F20));
362+
DefineAddress(SetPackageForSaveDirectory, SelectAddress(0x6B3A90, , 0x6B36F0));
363+
}
355364
}
356365
#endif
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#ifdef MODAPI_DLL_EXPORT
2+
#include <Spore\Pollinator\cAssetMetadata.h>
3+
4+
namespace Pollinator
5+
{
6+
namespace Addresses(cAssetMetadata)
7+
{
8+
DefineAddress(Set, SelectAddress(0x5511D0, , 0x551240));
9+
}
10+
}
11+
#endif

Spore ModAPI/SourceCode/DLL/AddressesSporepedia.cpp

Lines changed: 63 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22
#include "stdafx.h"
33
#include <Spore\Sporepedia\ShopperRequest.h>
44
#include <Spore\Sporepedia\AssetBrowserQuery.h>
5+
#include <Spore\Sporepedia\AssetData.h>
56
#include <Spore\Sporepedia\ObjectTemplateDB.h>
6-
7+
#include <Spore\Sporepedia\AssetViewManager.h>
78

89
namespace Sporepedia
910
{
@@ -12,9 +13,68 @@ namespace Sporepedia
1213
DefineAddress(Show, SelectAddress(0x64A700, , 0x64A900));
1314
}
1415

15-
namespace Addresses(cObjectTemplateDB)
16+
namespace Addresses(cSPAssetDataOTDB)
17+
{
18+
DefineAddress(SetKey, SelectAddress(0x641020, , 0x641330));
19+
20+
DefineAddress(GetName, SelectAddress(0x6414F0, , 0x641800));
21+
DefineAddress(GetAuthorName, SelectAddress(0x641500, , 0x641810));
22+
DefineAddress(GetDescription, SelectAddress(0x641530, , 0x641840));
23+
DefineAddress(GetImageKey, SelectAddress(0x6411C0, , 0x6414D0));
24+
DefineAddress(GetBackgroundImageKey, SelectAddress(0x6411E0, , 0x6414F0));
25+
DefineAddress(GetTags, SelectAddress(0x641540, , 0x641850));
26+
27+
DefineAddress(GetTimeCreated, SelectAddress(0x641550, , 0x641860));
28+
DefineAddress(HasName, SelectAddress(0x641460, , 0x641770));
29+
30+
DefineAddress(func38h, SelectAddress(0x641490, , 0x6417A0));
31+
DefineAddress(func3Ch, SelectAddress(0x6414A0, , 0x6417B0));
32+
33+
DefineAddress(AsyncSetKey, SelectAddress(0x641040, , 0x641350));
34+
DefineAddress(func48h, SelectAddress(0x6417D0, , 0x641AE0));
35+
DefineAddress(func4Ch, SelectAddress(0x6418D0, , 0x641BE0));
36+
DefineAddress(LoadData, SelectAddress(0x6410B0, , 0x6413C0));
37+
DefineAddress(GetAuthorID, SelectAddress(0x641510, , 0x641820));
38+
39+
DefineAddress(IsEditable, SelectAddress(0x6410F0, , 0x641400));
40+
DefineAddress(func64h, SelectAddress(0x6410E0, , 0x6413F0));
41+
DefineAddress(IsShareable, SelectAddress(0x641590, , 0x6418A0));
42+
43+
DefineAddress(IsShared, SelectAddress(0x641C80, , 0x641F90));
44+
DefineAddress(func74h, SelectAddress(0xDD4D00, , 0x5C0EC0));
45+
DefineAddress(func78h, SelectAddress(0x641140, , 0x641450));
46+
DefineAddress(func7Ch, SelectAddress(0x641150, , 0x641460));
47+
DefineAddress(func80h, SelectAddress(0x641170, , 0x641480));
48+
49+
DefineAddress(GetConsequenceTraits, SelectAddress(0x6424E0, , 0x6426C0));
50+
DefineAddress(GetAssetID, SelectAddress(0x6414B0, , 0x6417C0));
51+
DefineAddress(GetTimeDownloaded, SelectAddress(0x641570, , 0x641880));
52+
53+
DefineAddress(func9Ch, SelectAddress(0x641CB0, , 0x641FC0));
54+
DefineAddress(SetKeyInternal, SelectAddress(0x641060, , 0x641370));
55+
DefineAddress(SetAssetMetadata, SelectAddress(0x6419B0, , 0x641CC0));
56+
DefineAddress(funcA8h, SelectAddress(0x641AF0, , 0x641E00));
57+
DefineAddress(SetSummary, SelectAddress(0x641B20, , 0x641E30));
58+
DefineAddress(ProcessSummary, SelectAddress(0x642010, , 0x6421F0));
59+
DefineAddress(SetParameter, SelectAddress(0x642310, , 0x6424F0));
60+
}
61+
62+
namespace Addresses(cAssetViewManager)
63+
{
64+
DefineAddress(Get, SelectAddress(0x401030, , 0x401030));
65+
}
66+
67+
namespace Addresses(class_B8)
68+
{
69+
DefineAddress(SetAssetDataFactory, SelectAddress(0x6442C0, , 0x6444D0));
70+
}
71+
72+
namespace OTDB
1673
{
17-
DefineAddress(Get, SelectAddress(0x67CC90, , 0x67CB00));
74+
namespace Addresses(cObjectTemplateDB)
75+
{
76+
DefineAddress(Get, SelectAddress(0x67CC90, , 0x67CB00));
77+
}
1878
}
1979
}
2080

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#ifndef MODAPI_DLL_EXPORT
2+
#include <Spore\Pollinator\cAssetMetadata.h>
3+
4+
namespace Pollinator
5+
{
6+
auto_METHOD(cAssetMetadata, bool, Set,
7+
Args(const ResourceKey& key, const char16_t* pName, const char16_t* pDescription, const char16_t* pTags,
8+
const ResourceKey& parentAssetKey, bool isPollinated),
9+
Args(key, pName, pDescription, pTags, parentAssetKey, isPollinated));
10+
11+
void* cAssetMetadata::Cast(uint32_t type) const
12+
{
13+
CLASS_CAST(cAssetMetadata);
14+
PARENT_CAST(Resource::ResourceObject);
15+
return nullptr;
16+
}
17+
}
18+
#endif
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
#ifndef MODAPI_DLL_EXPORT
2+
#include <Spore\Sporepedia\ObjectTemplateDB.h>
3+
#include <Spore\Sporepedia\AssetData.h>
4+
#include <Spore\Sporepedia\AssetViewManager.h>
5+
6+
namespace Sporepedia
7+
{
8+
namespace OTDB
9+
{
10+
auto_STATIC_METHOD_(cObjectTemplateDB, cObjectTemplateDB*, Get);
11+
}
12+
13+
auto_STATIC_METHOD_(cAssetViewManager, cAssetViewManager*, Get);
14+
15+
auto_METHOD_VOID(class_B8, SetAssetDataFactory, Args(uint32_t typeID, AssetDataFactory factory),
16+
Args(typeID, factory));
17+
18+
19+
IAssetData::IAssetData()
20+
: mKey() {}
21+
22+
IAssetData::~IAssetData() {}
23+
24+
cSPAssetDataOTDB::cSPAssetDataOTDB()
25+
: mpMetadata()
26+
, field_20()
27+
, mIsPlayable()
28+
, mIsViewableLarge()
29+
, mIsEditable()
30+
, mSubtype()
31+
, field_2C(2)
32+
, field_3C()
33+
, field_40()
34+
, field_6C()
35+
, mpAsyncMetadata()
36+
, mpAsyncSummary()
37+
{
38+
}
39+
40+
cSPAssetDataOTDB::~cSPAssetDataOTDB()
41+
{
42+
}
43+
44+
int cSPAssetDataOTDB::AddRef() {
45+
return DefaultRefCounted::AddRef();
46+
}
47+
int cSPAssetDataOTDB::Release() {
48+
return DefaultRefCounted::Release();
49+
}
50+
void* cSPAssetDataOTDB::Cast(uint32_t type) const {
51+
CLASS_CAST(Object);
52+
CLASS_CAST(IAssetData);
53+
CLASS_CAST(cSPAssetDataOTDB);
54+
return nullptr;
55+
}
56+
57+
58+
auto_METHOD_VIRTUAL_VOID(cSPAssetDataOTDB, IAssetData, SetKey, Args(const ResourceKey& key), Args(key));
59+
60+
void cSPAssetDataOTDB::func08h() {}
61+
62+
auto_METHOD_VIRTUAL_(cSPAssetDataOTDB, IAssetData, const char16_t*, GetName);
63+
auto_METHOD_VIRTUAL_(cSPAssetDataOTDB, IAssetData, const char16_t*, GetAuthorName);
64+
auto_METHOD_VIRTUAL_(cSPAssetDataOTDB, IAssetData, const char16_t*, GetDescription);
65+
RedirectVirtualMethod_noargs_structret(cSPAssetDataOTDB, IAssetData, GetImageKey, ResourceKey);
66+
RedirectVirtualMethod_noargs_structret(cSPAssetDataOTDB, IAssetData, GetBackgroundImageKey, ResourceKey);
67+
auto_METHOD_VIRTUAL_VOID(cSPAssetDataOTDB, IAssetData, GetTags, Args(string16& dst), Args(dst));
68+
69+
uint32_t cSPAssetDataOTDB::GetAssetSubtype() {
70+
return mSubtype;
71+
}
72+
73+
auto_METHOD_VIRTUAL_(cSPAssetDataOTDB, IAssetData, int64_t, GetTimeCreated);
74+
auto_METHOD_VIRTUAL_(cSPAssetDataOTDB, IAssetData, bool, HasName);
75+
76+
int cSPAssetDataOTDB::func30h() {
77+
return 0;
78+
}
79+
int cSPAssetDataOTDB::func34h() {
80+
return 0;
81+
}
82+
83+
auto_METHOD_VIRTUAL_(cSPAssetDataOTDB, IAssetData, int, func38h);
84+
auto_METHOD_VIRTUAL_(cSPAssetDataOTDB, IAssetData, float, func3Ch);
85+
86+
const ResourceKey& cSPAssetDataOTDB::GetKey() {
87+
return mKey;
88+
}
89+
90+
auto_METHOD_VIRTUAL_VOID(cSPAssetDataOTDB, IAssetData, AsyncSetKey, Args(const ResourceKey& key), Args(key));
91+
auto_METHOD_VIRTUAL_(cSPAssetDataOTDB, IAssetData, bool, func48h);
92+
auto_METHOD_VIRTUAL_VOID_(cSPAssetDataOTDB, IAssetData, func4Ch);
93+
auto_METHOD_VIRTUAL_VOID_(cSPAssetDataOTDB, IAssetData, LoadData);
94+
auto_METHOD_VIRTUAL_(cSPAssetDataOTDB, IAssetData, int64_t, GetAuthorID);
95+
96+
bool cSPAssetDataOTDB::func58h() {
97+
return false;
98+
}
99+
bool cSPAssetDataOTDB::func5Ch() {
100+
return true;
101+
}
102+
103+
auto_METHOD_VIRTUAL_(cSPAssetDataOTDB, IAssetData, bool, IsEditable);
104+
auto_METHOD_VIRTUAL_(cSPAssetDataOTDB, IAssetData, bool, func64h);
105+
auto_METHOD_VIRTUAL_(cSPAssetDataOTDB, IAssetData, bool, IsShareable);
106+
107+
bool cSPAssetDataOTDB::func6Ch() {
108+
return true;
109+
}
110+
111+
auto_METHOD_VIRTUAL_(cSPAssetDataOTDB, IAssetData, bool, IsShared);
112+
113+
bool cSPAssetDataOTDB::IsPlayable() {
114+
return mIsPlayable;
115+
}
116+
bool cSPAssetDataOTDB::IsViewableLarge() {
117+
return mIsViewableLarge;
118+
}
119+
120+
auto_METHOD_VIRTUAL_(cSPAssetDataOTDB, IAssetData, bool, func7Ch);
121+
auto_METHOD_VIRTUAL_(cSPAssetDataOTDB, IAssetData, bool, func80h);
122+
123+
bool cSPAssetDataOTDB::func84h() {
124+
return false;
125+
}
126+
int cSPAssetDataOTDB::func88h() {
127+
return field_6C;
128+
}
129+
130+
auto_METHOD_VIRTUAL(cSPAssetDataOTDB, IAssetData, bool, GetConsequenceTraits, Args(vector<uint32_t>& dst), Args(dst));
131+
auto_METHOD_VIRTUAL(cSPAssetDataOTDB, IAssetData, bool, GetAssetID, Args(uint64_t& dst), Args(dst));
132+
auto_METHOD_VIRTUAL_(cSPAssetDataOTDB, IAssetData, int64_t, GetTimeDownloaded);
133+
134+
void* cSPAssetDataOTDB::func98h() {
135+
return &field_2C;
136+
}
137+
138+
auto_METHOD_VIRTUAL_(cSPAssetDataOTDB, IAssetData, int, func9Ch);
139+
auto_METHOD_VIRTUAL_VOID(cSPAssetDataOTDB, IAssetData, SetKeyInternal, Args(const ResourceKey& key, bool asyncLoad), Args(key, asyncLoad));
140+
auto_METHOD_VIRTUAL_VOID(cSPAssetDataOTDB, IAssetData, SetAssetMetadata, Args(bool asyncLoad), Args(asyncLoad));
141+
auto_METHOD_VIRTUAL_(cSPAssetDataOTDB, IAssetData, bool, funcA8h);
142+
auto_METHOD_VIRTUAL_VOID(cSPAssetDataOTDB, IAssetData, SetSummary, Args(bool asyncLoad), Args(asyncLoad));
143+
auto_METHOD_VIRTUAL_VOID(cSPAssetDataOTDB, IAssetData, ProcessSummary, Args(OTDB::ParameterResource* pSummary), Args(pSummary));
144+
auto_METHOD_VIRTUAL_VOID(cSPAssetDataOTDB, IAssetData, SetParameter, Args(const OTDB::Parameter& parameter), Args(parameter));
145+
}
146+
#endif
Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
11
#ifndef MODAPI_DLL_EXPORT
22
#include <Spore\Internal.h>
33
#include <Spore\Sporepedia\AssetBrowserQuery.h>
4-
#include <Spore\Sporepedia\ObjectTemplateDB.h>
54

65
auto_STATIC_METHOD_VOID(Sporepedia, ProcessAssetFilter,
76
Args(uint32_t filterID, eastl::vector<AssetBrowserQuery>& dst),
87
Args(filterID, dst));
98

10-
namespace Sporepedia
11-
{
12-
auto_STATIC_METHOD_(cObjectTemplateDB, cObjectTemplateDB*, Get);
13-
}
14-
159
#endif

0 commit comments

Comments
 (0)