Skip to content

Commit 9f5f558

Browse files
authored
Add more serialization-related classes (#110)
* Cleanup `IniFile.h` * Add `ReadImageData` function to `PngEncoder` * Side improvements * Add `Simulator::COMSerializer` & `Simulator::SerializerDatabase` * Improve serialization (not tested much yet)
1 parent 1f69873 commit 9f5f558

14 files changed

Lines changed: 850 additions & 41 deletions

Spore ModAPI/SourceCode/App/App.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ namespace App
4343
Args(const eastl::string16& path, eastl::hash_set<eastl::string16>& dstSkippedPaths, int& dstCount),
4444
Args(path, dstSkippedPaths, dstCount));
4545

46+
auto_METHOD(PngEncoder, bool, ReadImageData,
47+
Args(IO::IStream* inputStream),
48+
Args(inputStream));
49+
4650
auto_METHOD(PngEncoder, bool, WriteImageToStream,
4751
Args(IO::IStream* stream, App::PngEncoder::Format format),
4852
Args(stream, format));

Spore ModAPI/SourceCode/DLL/AddressesApp.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,7 @@ namespace App
416416

417417
namespace Addresses(PngEncoder)
418418
{
419+
DefineAddress(ReadImageData, SelectAddress(0x682470, 0x68eb40));
419420
DefineAddress(WriteImageToStream, SelectAddress(0x68E660, 0x68e190));
420421
DefineAddressAlias(EncodePNG, WriteImageToStream);
421422
}

Spore ModAPI/SourceCode/DLL/AddressesSimulator.cpp

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -672,6 +672,107 @@ namespace Simulator
672672
DefineAddress(AttributesToXml, SelectAddress(0x695D40, 0x695B20));
673673
}
674674

675+
namespace Addresses(COMSerializer)
676+
{
677+
DefineAddress(Open, SelectAddress(0x6902d0, 0x69dfc0));
678+
DefineAddress(Close, SelectAddress(0x691910, 0x69f940));
679+
DefineAddress(LoadClassObjects, SelectAddress(0x691240, 0x69f1d0));
680+
DefineAddress(SaveClassObjects, SelectAddress(0x691af0, 0x69fb90));
681+
DefineAddress(Write, SelectAddress(0x692440, 0x6a05f0));
682+
DefineAddress(Read, SelectAddress(0x6924f0, 0x6a06a0));
683+
684+
DefineAddress(GetCRC, SelectAddress(0x690d40, 0x69ec20));
685+
DefineAddress(reset, SelectAddress(0x6911d0, 0x69f160));
686+
DefineAddress(onSetSPSerializable, SelectAddress(0x691ff0, 0x6a0110));
687+
DefineAddress(onGetSPSerializable, SelectAddress(0x690bb0, 0x69e9e0));
688+
DefineAddress(loadSingleObject, SelectAddress(0x6921e0, 0x6a0360));
689+
}
690+
691+
namespace Addresses(SerializerDatabase)
692+
{
693+
DefineAddress(AsDatabase, SelectAddress(0x8fac50, 0x7f3190));
694+
DefineAddress(GetCOMSerializer, SelectAddress(0x5a6210, 0x985d70));
695+
DefineAddress(OpenReadStream, SelectAddress(0x690640, 0x69e3a0));
696+
DefineAddress(CloseReadStream, SelectAddress(0x68f6e0, 0x69d2c0));
697+
DefineAddress(LoadClassObjects, SelectAddress(0x690190, 0x69de80));
698+
DefineAddress(OpenWriteStream, SelectAddress(0x6906d0, 0x69e470));
699+
DefineAddress(CloseWriteStream, SelectAddress(0x68f6e0, 0x69d2c0));
700+
DefineAddress(SaveClassObjects, SelectAddress(0x6901b0, 0x69dea0));
701+
DefineAddress(HasKey, SelectAddress(0x6907d0, 0x69e5d0));
702+
DefineAddress(GetPercentageCompletion, SelectAddress(0x109ffe0, 0xc06490));
703+
DefineAddress(SetPercentageCompletion, SelectAddress(0x68f710, 0x69d2f0));
704+
DefineAddress(OpenAsSerializer, SelectAddress(0x690230, 0x69df20));
705+
706+
DefineAddress(Initialize, SelectAddress(0x6901d0, 0x69dec0));
707+
DefineAddress(Dispose, SelectAddress(0x6901e0, 0x69ded0));
708+
DefineAddress(GetDatabaseType, SelectAddress(0x6900a0, 0x69dd90));
709+
DefineAddress(GetRefCount, SelectAddress(0x68f800, 0x69d3f0));
710+
DefineAddress(Lock, SelectAddress(0x6900b0, 0x69dda0));
711+
DefineAddress(Open, SelectAddress(0x6900c0, 0x69ddb0));
712+
DefineAddress(Close, SelectAddress(0x6902a0, 0x69df90));
713+
DefineAddress(GetAccessFlags, SelectAddress(0x6900d0, 0x69ddc0));
714+
DefineAddress(Flush, SelectAddress(0x6900f0, 0x69dde0));
715+
DefineAddress(GetLocation, SelectAddress(0x690100, 0x69ddf0));
716+
DefineAddress(SetLocation, SelectAddress(0x690110, 0x69de00));
717+
DefineAddress(GetKeyList, SelectAddress(0x690120, 0x69de10));
718+
DefineAddress(OpenRecord, SelectAddress(0x690130, 0x69de20));
719+
DefineAddress(GetOpenCount, SelectAddress(0x690140, 0x69de30));
720+
DefineAddress(CloseRecord, SelectAddress(0x690150, 0x69de40));
721+
DefineAddress(DeleteRecord, SelectAddress(0x690160, 0x69de50));
722+
DefineAddress(Attach, SelectAddress(0x690170, 0x69de60));
723+
DefineAddress(GetAllocator, SelectAddress(0x690180, 0x69de70));
724+
}
725+
726+
namespace Addresses(SerializerReadStream)
727+
{
728+
DefineAddress(Open, SelectAddress(0x6903b0, 0x69e090));
729+
DefineAddress(Close, SelectAddress(0x68f860, 0x69d480));
730+
DefineAddress(IsOpen, SelectAddress(0x68f8b0, 0x69d4d0));
731+
DefineAddress(IsGood, SelectAddress(0x5a2c00, 0x950190));
732+
DefineAddress(GetRecord, SelectAddress(0x69f450, 0xfc7910));
733+
DefineAddress(GetDatabase, SelectAddress(0xf5c360, 0x7f55c0));
734+
DefineAddress(ReadObjectPointer, SelectAddress(0x690450, 0x69e170));
735+
DefineAddress(ReadPointer, SelectAddress(0x68f8d0, 0x69d4f0));
736+
DefineAddress(ReadProperty, SelectAddress(0x68f920, 0x69d540));
737+
DefineAddress(ReadRawData, SelectAddress(0x68fbb0, 0x69d830));
738+
DefineAddress(ReadPropertyByID, SelectAddress(0x68f5e0, 0x69d1d0));
739+
DefineAddress(GetSerializationVersion, SelectAddress(0x95a4f0, 0x93b630));
740+
DefineAddress(SetSerializationVersion, SelectAddress(0x1054390, 0xfcc100));
741+
742+
DefineAddress(Skip, SelectAddress(0x68f620, 0x69d210));
743+
}
744+
745+
namespace Addresses(SerializerWriteStream)
746+
{
747+
DefineAddress(Open, SelectAddress(0x690540, 0x69e260));
748+
DefineAddress(Close, SelectAddress(0x68fc30, 0x69d8e0));
749+
DefineAddress(IsOpen, SelectAddress(0x68fc80, 0x69d930));
750+
DefineAddress(IsGood, SelectAddress(0x68f690, 0xab2ff0));
751+
DefineAddress(GetRecord, SelectAddress(0x959a00, 0xfcc1d0));
752+
DefineAddress(GetDatabase, SelectAddress(0x95a4f0, 0x93b630));
753+
DefineAddress(WriteObjectPointer, SelectAddress(0x68fca0, 0x69d950));
754+
DefineAddress(WritePointer, SelectAddress(0x68fcd0, 0x69d980));
755+
DefineAddress(WriteProperty, SelectAddress(0x68fd20, 0x69d9d0));
756+
DefineAddress(WriteRawData, SelectAddress(0x68ffb0, 0x69dc60));
757+
DefineAddress(WritePropertyWithID, SelectAddress(0x68f6a0, 0x69d280));
758+
}
759+
760+
namespace Addresses(SerializerReadStreamPrivate)
761+
{
762+
DefineAddress(IsOpen, SelectAddress(0x685e30, 0x692e60));
763+
DefineAddress(SetSerializationVersion, SelectAddress(0x685e10, 0x692e80));
764+
DefineAddress(GetSerializationVersion, SelectAddress(0x685e20, 0x692e90));
765+
766+
DefineAddress(openStream, SelectAddress(0x686770, 0x6938d0));
767+
}
768+
769+
namespace Addresses(SerializerWriteStreamPrivate)
770+
{
771+
DefineAddress(IsOpen, SelectAddress(0x685e30, 0x692e60));
772+
773+
DefineAddress(openStream, SelectAddress(0x686890, 0x693a70));
774+
}
775+
675776
namespace Addresses(cGameData)
676777
{
677778
DefineAddress(Write, SelectAddress(0xB18430, 0xB184D0));

Spore ModAPI/SourceCode/IO/IODefinitions.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ namespace Resource
220220
auto_METHOD_VIRTUAL_const_(DatabasePackedFile, DatabasePackedFile, uint32_t, GetDatabaseType);
221221
auto_METHOD_VIRTUAL_const_(DatabasePackedFile, DatabasePackedFile, int, GetRefCount);
222222
auto_METHOD_VIRTUAL_VOID(DatabasePackedFile, DatabasePackedFile, Lock, Args(bool bLock), Args(bLock));
223-
auto_METHOD_VIRTUAL(DatabasePackedFile, DatabasePackedFile, bool, Open, Args(IO::AccessFlags nDesiredAccess, IO::CD nCreateDisposition, bool arg_8), Args(nDesiredAccess, nCreateDisposition, arg_8));
223+
auto_METHOD_VIRTUAL(DatabasePackedFile, DatabasePackedFile, bool, Open, Args(IO::AccessFlags nDesiredAccess, IO::CD nCreateDisposition, bool bAutoOpen), Args(nDesiredAccess, nCreateDisposition, bAutoOpen));
224224
auto_METHOD_VIRTUAL_(DatabasePackedFile, DatabasePackedFile, bool, Close);
225225
auto_METHOD_VIRTUAL_const_(DatabasePackedFile, DatabasePackedFile, IO::AccessFlags, GetAccessFlags);
226226
auto_METHOD_VIRTUAL_(DatabasePackedFile, DatabasePackedFile, bool, Flush);
@@ -540,7 +540,7 @@ namespace Resource
540540
//auto_METHOD_VIRTUAL_const_(DatabaseDirectoryFiles, DatabaseDirectoryFiles, uint32_t, GetDatabaseType);
541541
auto_METHOD_VIRTUAL_const_(DatabaseDirectoryFiles, DatabaseDirectoryFiles, int, GetRefCount);
542542
auto_METHOD_VIRTUAL_VOID(DatabaseDirectoryFiles, DatabaseDirectoryFiles, Lock, Args(bool bLock), Args(bLock));
543-
auto_METHOD_VIRTUAL(DatabaseDirectoryFiles, DatabaseDirectoryFiles, bool, Open, Args(IO::AccessFlags nDesiredAccess, IO::CD nCreateDisposition, bool arg_8), Args(nDesiredAccess, nCreateDisposition, arg_8));
543+
auto_METHOD_VIRTUAL(DatabaseDirectoryFiles, DatabaseDirectoryFiles, bool, Open, Args(IO::AccessFlags nDesiredAccess, IO::CD nCreateDisposition, bool bAutoOpen), Args(nDesiredAccess, nCreateDisposition, bAutoOpen));
544544
auto_METHOD_VIRTUAL_(DatabaseDirectoryFiles, DatabaseDirectoryFiles, bool, Close);
545545
//auto_METHOD_VIRTUAL_const_(DatabaseDirectoryFiles, DatabaseDirectoryFiles, int, GetAccessFlags);
546546
auto_METHOD_VIRTUAL_(DatabaseDirectoryFiles, DatabaseDirectoryFiles, bool, Flush);

Spore ModAPI/SourceCode/IO/IniFile.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ namespace IO
3333
mPath[0] = L'\0';
3434
}
3535

36+
IniFile::~IniFile() = default;
37+
3638
auto_METHOD_VIRTUAL_const(IniFile, IniFile, int, GetOption, Args(Options option), Args(option));
3739
auto_METHOD_VIRTUAL_VOID(IniFile, IniFile, SetOption, Args(Options option, int value), Args(option, value));
3840
auto_METHOD_VIRTUAL_const_(IniFile, IniFile, wchar_t const*, GetPath);

0 commit comments

Comments
 (0)