diff --git a/src/Components/Modules/AssetHandler.cpp b/src/Components/Modules/AssetHandler.cpp index 3e7e9b90..61e7c326 100644 --- a/src/Components/Modules/AssetHandler.cpp +++ b/src/Components/Modules/AssetHandler.cpp @@ -388,6 +388,7 @@ namespace Components AssetHandler::RegisterInterface(new Assets::IMapEnts()); AssetHandler::RegisterInterface(new Assets::IRawFile()); AssetHandler::RegisterInterface(new Assets::IGfxImage()); + AssetHandler::RegisterInterface(new Assets::ISndCurve()); AssetHandler::RegisterInterface(new Assets::IMaterial()); AssetHandler::RegisterInterface(new Assets::IPhysPreset()); AssetHandler::RegisterInterface(new Assets::IXAnimParts()); diff --git a/src/Components/Modules/AssetHandler.hpp b/src/Components/Modules/AssetHandler.hpp index ceb43cbb..de41dfd9 100644 --- a/src/Components/Modules/AssetHandler.hpp +++ b/src/Components/Modules/AssetHandler.hpp @@ -73,6 +73,7 @@ namespace Components #include "AssetInterfaces\IRawFile.hpp" #include "AssetInterfaces\IGfxImage.hpp" #include "AssetInterfaces\IMaterial.hpp" +#include "AssetInterfaces\ISndCurve.hpp" #include "AssetInterfaces\IPhysPreset.hpp" #include "AssetInterfaces\IXAnimParts.hpp" #include "AssetInterfaces\IFxEffectDef.hpp" diff --git a/src/Components/Modules/AssetInterfaces/ISndCurve.cpp b/src/Components/Modules/AssetInterfaces/ISndCurve.cpp new file mode 100644 index 00000000..30dcfd94 --- /dev/null +++ b/src/Components/Modules/AssetInterfaces/ISndCurve.cpp @@ -0,0 +1,24 @@ +#include + +namespace Assets +{ + void ISndCurve::save(Game::XAssetHeader header, Components::ZoneBuilder::Zone* builder) + { + AssertSize(Game::SndCurve, 136); + + Utils::Stream* buffer = builder->getBuffer(); + Game::SndCurve* asset = header.sndCurve; + Game::SndCurve* dest = buffer->dest(); + buffer->save(asset); + + buffer->pushBlock(Game::XFILE_BLOCK_VIRTUAL); + + if (asset->filename) + { + buffer->saveString(builder->getAssetName(this->getType(), asset->filename)); + Utils::Stream::ClearPointer(&dest->filename); + } + + buffer->popBlock(); + } +} diff --git a/src/Components/Modules/AssetInterfaces/ISndCurve.hpp b/src/Components/Modules/AssetInterfaces/ISndCurve.hpp new file mode 100644 index 00000000..f72778f3 --- /dev/null +++ b/src/Components/Modules/AssetInterfaces/ISndCurve.hpp @@ -0,0 +1,10 @@ +namespace Assets +{ + class ISndCurve : public Components::AssetHandler::IAsset + { + public: + virtual Game::XAssetType getType() override { return Game::XAssetType::ASSET_TYPE_SNDCURVE; }; + + virtual void save(Game::XAssetHeader header, Components::ZoneBuilder::Zone* builder) override; + }; +} diff --git a/src/Game/Structs.hpp b/src/Game/Structs.hpp index 78cd700d..cc0f88b7 100644 --- a/src/Game/Structs.hpp +++ b/src/Game/Structs.hpp @@ -1215,6 +1215,15 @@ namespace Game char * compressedData; }; +#pragma pack(push, 4) + struct SndCurve + { + const char *filename; + unsigned __int16 knotCount; + vec2_t knots[16]; + }; +#pragma pack(pop) + struct FontEntry { unsigned short character; @@ -2888,6 +2897,7 @@ namespace Game TracerDef* tracer; VehicleDef* vehicle; GfxWorld* gfxMap; + SndCurve* sndCurve; }; struct XAsset