Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions Spore ModAPI/SourceCode/App/App.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,9 @@ namespace App
Args(const eastl::string16& path, eastl::hash_set<eastl::string16>& dstSkippedPaths, int& dstCount),
Args(path, dstSkippedPaths, dstCount));

auto_METHOD(PngEncoder, bool, EncodePNG,
Args(IO::IStream* stream, int mode),
Args(stream, mode));
auto_METHOD(PngEncoder, bool, WriteImageToStream,
Args(IO::IStream* stream, App::PngEncoder::Format format),
Args(stream, format));


auto_STATIC_METHOD_(cIDGenerator, cIDGenerator*, Get);
Expand Down
3 changes: 2 additions & 1 deletion Spore ModAPI/SourceCode/DLL/AddressesApp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -416,7 +416,8 @@ namespace App

namespace Addresses(PngEncoder)
{
DefineAddress(EncodePNG, SelectAddress(0x68E660, 0x68e190));
DefineAddress(WriteImageToStream, SelectAddress(0x68E660, 0x68e190));
DefineAddressAlias(EncodePNG, WriteImageToStream);
}

namespace Addresses(cLocaleManager)
Expand Down
48 changes: 48 additions & 0 deletions Spore ModAPI/SourceCode/DLL/AddressesIO.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include <Spore\IO\StreamFixedMemory.h>
#include <Spore\IO\StreamMemory.h>
#include <Spore\IO\StreamNull.h>
#include <Spore\IO\StreamCompressionZLib.h>
#include <Spore\IO\XmlWriter.h>

namespace Addresses(IO)
Expand Down Expand Up @@ -220,5 +221,52 @@ namespace IO
DefineAddress(Exists, SelectAddress(0x9327F0, 0x932280));
DefineAddress(Remove, SelectAddress(0x932510, 0x932860));
}

namespace Addresses(StreamCompressionZLib)
{
DefineAddress(AddRef, SelectAddress(0x614940, 0x7685A0));
DefineAddress(Release, SelectAddress(0x707F90, 0x67D9F0));
DefineAddress(GetType, SelectAddress(0x672FC0, 0x67DAB0));
DefineAddress(GetAccessFlags, SelectAddress(0x672850, 0x67D2C0));
DefineAddress(GetState, SelectAddress(0x672860, 0x67D2D0));
DefineAddress(Close, SelectAddress(0x672C70, 0x67D6E0));
DefineAddress(GetSize, SelectAddress(0x672A70, 0x67D3A0));
DefineAddress(SetSize, SelectAddress(0x9F8EB0, 0xDDE930));
DefineAddress(GetPosition, SelectAddress(0x672930, 0x67D3B0));
DefineAddress(SetPosition, SelectAddress(0x7A4230, 0x950E00));
DefineAddress(GetAvailable, SelectAddress(0x60C030, 0xE21A90));
DefineAddress(Read, SelectAddress(0xF95C60, 0x1097390));
DefineAddress(Flush, SelectAddress(0xC65B10, 0xB1FB30));
DefineAddress(Write, SelectAddress(0x672BD0, 0x67D640));
DefineAddress(SetCompressedFormat, SelectAddress(0x6727D0, 0x67D240));
DefineAddress(SetBufferSize, SelectAddress(0x6727F0, 0x67D260));
DefineAddress(SetCompressionHint, SelectAddress(0x672830, 0x67D2A0));
DefineAddress(Open, SelectAddress(0x672AA0, 0x67D510));
// destructor; private for ModAPI
DefineAddress(Dispose, SelectAddress(0x67DC30, 0x67DAD0));
}

namespace Addresses(StreamDecompressionZLib)
{
DefineAddress(AddRef, SelectAddress(0x614940, 0x7685A0));
DefineAddress(Release, SelectAddress(0x707F90, 0x67D9F0));
DefineAddress(GetType, SelectAddress(0x672DA0, 0x67D830));
DefineAddress(GetAccessFlags, SelectAddress(0x6729A0, 0x67D420));
DefineAddress(GetState, SelectAddress(0x6729B0, 0x67D430));
DefineAddress(Close, SelectAddress(0x672F40, 0x67D9D0));
DefineAddress(GetSize, SelectAddress(0x672A70, 0x67D3A0));
DefineAddress(SetSize, SelectAddress(0x9F8EB0, 0xDDE930));
DefineAddress(GetPosition, SelectAddress(0x672A80, 0x67D4F0));
DefineAddress(SetPosition, SelectAddress(0x7A4230, 0x950E00));
DefineAddress(GetAvailable, SelectAddress(0x60C030, 0xE21A90));
DefineAddress(Read, SelectAddress(0x672E90, 0x67D920));
DefineAddress(Flush, SelectAddress(0xAF5C80, 0xB1E410));
DefineAddress(Write, SelectAddress(0x7A4230, 0x950E00));
DefineAddress(SetCompressedFormat, SelectAddress(0x672950, 0x67D3D0));
DefineAddress(SetBufferSize, SelectAddress(0x672960, 0x67D3E0));
DefineAddress(Open, SelectAddress(0x672DC0, 0x67D850));
// destructor; private for ModAPI
DefineAddress(Dispose, SelectAddress(0x67DCE0, 0x67DB80));
}
}
#endif
97 changes: 97 additions & 0 deletions Spore ModAPI/SourceCode/IO/StreamDefinitions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include <Spore\IO\StreamFixedMemory.h>
#include <Spore\IO\StreamMemory.h>
#include <Spore\IO\StreamNull.h>
#include <Spore\IO\StreamCompressionZLib.h>

namespace IO
{
Expand Down Expand Up @@ -395,5 +396,101 @@ namespace IO
auto_METHOD(StreamNull, int, Write, Args(const void* pData, size_t nSize), Args(pData, nSize));

//////////////////////


/////////////////////////////////
//// StreamCompressionZLib.h ////
/////////////////////////////////

StreamCompressionZLib::StreamCompressionZLib(IStream* pOutputStream, int nHint)
: mpOutputStream(NULL),
mbOpen(false),
mbInited(false),
mpZLibStream(NULL),
mFormat(kCompressedFormatZLib),
mHint(nHint),
mpOutputBuffer(NULL),
mnOutputBufferSize(0x2000)
{
if (pOutputStream)
StreamCompressionZLib::Open(pOutputStream, nHint);
}

StreamCompressionZLib::~StreamCompressionZLib()
{
Dispose();
}

auto_METHOD_(StreamCompressionZLib, int, AddRef);
auto_METHOD_(StreamCompressionZLib, int, Release);

auto_METHOD_const_(StreamCompressionZLib, uint32_t, GetType);
auto_METHOD_const_(StreamCompressionZLib, AccessFlags, GetAccessFlags);
auto_METHOD_const_(StreamCompressionZLib, FileError, GetState);
auto_METHOD_(StreamCompressionZLib, bool, Close);

auto_METHOD_const_(StreamCompressionZLib, size_type, GetSize);
auto_METHOD(StreamCompressionZLib, bool, SetSize, Args(size_type size), Args(size));
auto_METHOD_const(StreamCompressionZLib, int, GetPosition, Args(PositionType positionType), Args(positionType));
auto_METHOD(StreamCompressionZLib, bool, SetPosition, Args(int distance, PositionType positionType), Args(distance, positionType));
auto_METHOD_const_(StreamCompressionZLib, int, GetAvailable);

auto_METHOD(StreamCompressionZLib, int, Read, Args(void* pData, size_t nSize), Args(pData, nSize));
auto_METHOD_(StreamCompressionZLib, bool, Flush);
auto_METHOD(StreamCompressionZLib, int, Write, Args(const void* pData, size_t nSize), Args(pData, nSize));

auto_METHOD(StreamCompressionZLib, bool, SetCompressedFormat, Args(CompressedFormat format), Args(format));
auto_METHOD(StreamCompressionZLib, bool, SetBufferSize, Args(size_t nOutputBufferSize), Args(nOutputBufferSize));
auto_METHOD(StreamCompressionZLib, bool, SetCompressionHint, Args(int hint), Args(hint));

auto_METHOD(StreamCompressionZLib, bool, Open, Args(IStream* pOutputStream, int nHint), Args(pOutputStream, nHint));

// destructor, private for ModAPI
auto_METHOD_VOID_(StreamCompressionZLib, Dispose);

StreamDecompressionZLib::StreamDecompressionZLib(IStream* pInputStream)
: mpInputStream(NULL),
mFormat(kCompressedFormatZLib),
mbOpen(false),
mbEOF(false),
mbInited(false),
mpZLibStream(NULL),
mpInputBuffer(NULL),
mnInputBufferSize(0x2000)
{}

StreamDecompressionZLib::~StreamDecompressionZLib()
{
Dispose();
}

auto_METHOD_(StreamDecompressionZLib, int, AddRef);
auto_METHOD_(StreamDecompressionZLib, int, Release);

auto_METHOD_const_(StreamDecompressionZLib, uint32_t, GetType);
auto_METHOD_const_(StreamDecompressionZLib, AccessFlags, GetAccessFlags);
auto_METHOD_const_(StreamDecompressionZLib, FileError, GetState);
auto_METHOD_(StreamDecompressionZLib, bool, Close);

auto_METHOD_const_(StreamDecompressionZLib, size_type, GetSize);
auto_METHOD(StreamDecompressionZLib, bool, SetSize, Args(size_type size), Args(size));
auto_METHOD_const(StreamDecompressionZLib, int, GetPosition, Args(PositionType positionType), Args(positionType));
auto_METHOD(StreamDecompressionZLib, bool, SetPosition, Args(int distance, PositionType positionType), Args(distance, positionType));
auto_METHOD_const_(StreamDecompressionZLib, int, GetAvailable);

auto_METHOD(StreamDecompressionZLib, int, Read, Args(void* pData, size_t nSize), Args(pData, nSize));
auto_METHOD_(StreamDecompressionZLib, bool, Flush);
auto_METHOD(StreamDecompressionZLib, int, Write, Args(const void* pData, size_t nSize), Args(pData, nSize));

auto_METHOD(StreamDecompressionZLib, bool, SetCompressedFormat, Args(CompressedFormat format), Args(format));
auto_METHOD(StreamDecompressionZLib, bool, SetBufferSize, Args(size_t nInputBufferSize), Args(nInputBufferSize));

auto_METHOD(StreamDecompressionZLib, bool, Open, Args(IStream* pInputStream), Args(pInputStream));

// destructor, private for ModAPI
auto_METHOD_VOID_(StreamDecompressionZLib, Dispose);

/////////////////////////////////

#endif
}
1 change: 1 addition & 0 deletions Spore ModAPI/Spore ModAPI.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,7 @@
<ClInclude Include="Spore\Editors\cSPEditorVerbTrayCollection.h" />
<ClInclude Include="Spore\Editors\cSPEditorVerbIcon.h" />
<ClInclude Include="Spore\Editors\cSPEditorVerbIconTray.h" />
<ClInclude Include="Spore\IO\StreamCompressionZLib.h" />
<ClInclude Include="Spore\UI\cSPUIPropertyLayout.h" />
<ClInclude Include="Spore\Editors\cSPVerbIconRollover.h" />
<ClInclude Include="Spore\Editors\cSPVerbTrayCollection.h" />
Expand Down
3 changes: 3 additions & 0 deletions Spore ModAPI/Spore ModAPI.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -2286,6 +2286,9 @@
<ClInclude Include="Spore\UI\cSPUIPropertyLayout.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Spore\IO\StreamCompressionZLib.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="SourceCode\Allocator.cpp">
Expand Down
16 changes: 11 additions & 5 deletions Spore ModAPI/Spore/App/Thumbnail_cImportExport.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,13 @@ namespace App
{
struct PngEncoder {

bool EncodePNG(IO::IStream* outputStream, int mode);
enum Format {
kImageFormatPNG,
kImageFormatTGA,
kImageFormatBMP
};

bool WriteImageToStream(IO::IStream* outputStream, Format format);

/* 00h */ eastl::vector<int> mPixelBuf;
/* 14h */ uint32_t mnImageWidth;
Expand Down Expand Up @@ -83,11 +89,11 @@ namespace App
/// @param[out] dst The eastl::string where the path will be written.
bool GetFolderPath(uint32_t creationType, eastl::string16& dst);

/// Used to obtain a path from a locale file, by default `0x19F76D11.locale`, similar to the one that would
/// Used to obtain a path from a locale file, by default `SaveDataFolders.locale`, similar to the one that would
/// return GetFolderPath()
bool FolderPathFromLocale(uint32_t instanceID, eastl::string16& dst, uint32_t tableID = 0xFFFFFFFF);

/// Encodes the given resource into a `.png` image and saves it, both in the given package and in the
/// Encodes the given resource into a `.png` Model-in-Picture and saves it, both in the given package and in the
/// "My Spore Creations" in the user Documents folder.
///
/// In the package, the image will be saved using the same ResourceKey as the resource, but with a TypeIDs::png type.
Expand All @@ -110,7 +116,7 @@ namespace App
/// @returns 'true' on success, 'false' if something failed.
bool ImportPNG(const char16_t* path, ResourceKey& key);

/// Extracts information from a PNG file. It extracts both the metadata, and the data encoded within the image.
/// Extracts information from a Model-in-Picture PNG file. It extracts both the metadata, and the data encoded within the image.
/// @param[out] dstMetadata
/// @param[out] dstDataStream
/// @returns true on success, false if something failed
Expand Down Expand Up @@ -168,6 +174,6 @@ namespace App

namespace Addresses(PngEncoder)
{
DeclareAddress(EncodePNG); // 0x68E660 0x68e190
DeclareAddress(WriteImageToStream); // 0x68E660 0x68e190
}
}
Loading
Loading