isle-portable/assets/main.cpp
Christian Semmler d10ac7e77c
Add hdmusic.si asset pack, extend SiLoader with Replace directive (#671)
* Replace SI objects

* Changes

* Fix

* Remove obsolete file

* Add delete handler

* Updates

* Update assets

* Configure git LFS

* Add HD music

* Move files to LFS

* chmod files

* fix gitattributes

* Fixes

* Fixes

* Add other HD music

* Fix file perms

* Add comment

* Minor update

* Refactor

* Fix

* Add LFS flag

* Add check for file replace

* Exclude assets from CPack

* Attempt fix

* Update libweaver

* Fix MxDSBuffer leak

* Add .lfsconfig

* Set LFS URL

* Fix LFS CI

* Fix

* Space
2025-08-16 21:21:39 +02:00

212 lines
5.8 KiB
C++

#include "mxdsaction.h"
#include <file.h>
#include <filesystem>
#include <fstream>
#include <interleaf.h>
#include <object.h>
si::Interleaf::Version version = si::Interleaf::Version2_2;
uint32_t bufferSize = 65536;
uint32_t bufferCount = 8;
std::string out;
std::ofstream depfile;
si::MemoryBuffer mxHd;
void CreateWidescreen()
{
std::string result = out + "/widescreen.si";
struct AssetView {
std::string name;
std::string extra;
};
const AssetView widescreenBitmaps[] = {
{"GaraDoor_Background_Wide",
"World:current, StartWith:\\Lego\\Scripts\\Isle\\Isle;1160, RemoveWith:\\Lego\\Scripts\\Isle\\Isle;1161"}
};
si::Interleaf si;
mxHd.seek(0, si::MemoryBuffer::SeekStart);
si.Read(&mxHd);
int i = 0;
for (const AssetView& asset : widescreenBitmaps) {
si::Object* object = new si::Object;
std::string file = std::string("widescreen/") + asset.name + ".bmp";
object->id_ = i;
object->type_ = si::MxOb::Bitmap;
object->flags_ = MxDSAction::c_enabled | MxDSAction::c_bit4;
object->duration_ = -1;
object->loops_ = 1;
object->extra_ = si::bytearray(asset.extra.c_str(), asset.extra.length() + 1);
object->presenter_ = "MxStillPresenter";
object->name_ = asset.name;
object->filetype_ = si::MxOb::STL;
object->location_ = si::Vector3(-240.0, 0.0, -1.0);
object->direction_ = si::Vector3(0, 0, 0);
object->up_ = si::Vector3(0, 1.0, 0);
if (!object->ReplaceWithFile(file.c_str())) {
abort();
}
si.AppendChild(object);
depfile << result << ": " << (std::filesystem::current_path() / file).string() << std::endl;
i++;
}
si.Write(result.c_str());
}
void CreateHDMusic()
{
std::string result = out + "/hdmusic.si";
struct AssetView {
std::string name;
std::string extra;
uint32_t duration;
uint32_t loops;
uint32_t flags;
};
const AssetView wavAudio[] = {
{"BrickstrChase_HD",
"Replace:\\Lego\\Scripts\\Isle\\Jukebox;3",
82850,
10000,
MxDSAction::c_enabled | MxDSAction::c_bit3},
{"BrickHunt_HD",
"Replace:\\Lego\\Scripts\\Isle\\Jukebox;4",
192630,
10000,
MxDSAction::c_enabled | MxDSAction::c_bit3},
{"ResidentalArea_Music_HD",
"Replace:\\Lego\\Scripts\\Isle\\Jukebox;5",
89540,
10000,
MxDSAction::c_enabled | MxDSAction::c_bit3},
{"BeachBlvd_Music_HD",
"Replace:\\Lego\\Scripts\\Isle\\Jukebox;6",
152600,
10000,
MxDSAction::c_enabled | MxDSAction::c_bit3},
{"Cave_Music_HD",
"Replace:\\Lego\\Scripts\\Isle\\Jukebox;7",
69240,
10000,
MxDSAction::c_enabled | MxDSAction::c_bit3},
{"CentralRoads_Music_HD",
"Replace:\\Lego\\Scripts\\Isle\\Jukebox;8",
193380,
10000,
MxDSAction::c_enabled | MxDSAction::c_bit3},
{"Jail_Music_HD",
"Replace:\\Lego\\Scripts\\Isle\\Jukebox;9",
68820,
10000,
MxDSAction::c_enabled | MxDSAction::c_bit3},
{"Hospital_Music_HD",
"Replace:\\Lego\\Scripts\\Isle\\Jukebox;10",
211990,
10000,
MxDSAction::c_enabled | MxDSAction::c_bit3},
{"InformationCenter_Music_HD",
"Replace:\\Lego\\Scripts\\Isle\\Jukebox;11",
154510,
10000,
MxDSAction::c_enabled | MxDSAction::c_bit3},
{"PoliceStation_Music_HD",
"Replace:\\Lego\\Scripts\\Isle\\Jukebox;12",
57090,
10000,
MxDSAction::c_enabled | MxDSAction::c_bit3},
{"Park_Music_HD",
"Replace:\\Lego\\Scripts\\Isle\\Jukebox;13",
91210,
10000,
MxDSAction::c_enabled | MxDSAction::c_bit3},
{"RaceTrackRoad_Music_HD",
"Replace:\\Lego\\Scripts\\Isle\\Jukebox;16",
189000,
10000,
MxDSAction::c_enabled | MxDSAction::c_bit3},
{"Beach_Music_HD",
"Replace:\\Lego\\Scripts\\Isle\\Jukebox;17",
127490,
10000,
MxDSAction::c_enabled | MxDSAction::c_bit3},
{"JetskiRace_Music_HD",
"Replace:\\Lego\\Scripts\\Isle\\Jukebox;19",
64440,
10000,
MxDSAction::c_enabled | MxDSAction::c_bit3},
{"Act3Music_HD",
"Replace:\\Lego\\Scripts\\Isle\\Jukebox;20",
80510,
10000,
MxDSAction::c_enabled | MxDSAction::c_bit3},
{"JBMusic1_HD", "Replace:\\Lego\\Scripts\\Isle\\Jukebox;55", 125850, 1, MxDSAction::c_enabled},
{"JBMusic2_HD", "Replace:\\Lego\\Scripts\\Isle\\Jukebox;56", 162900, 1, MxDSAction::c_enabled},
{"JBMusic3_HD", "Replace:\\Lego\\Scripts\\Isle\\Jukebox;57", 122750, 1, MxDSAction::c_enabled},
{"JBMusic4_HD", "Replace:\\Lego\\Scripts\\Isle\\Jukebox;58", 140000, 1, MxDSAction::c_enabled},
{"JBMusic5_HD", "Replace:\\Lego\\Scripts\\Isle\\Jukebox;59", 72720, 1, MxDSAction::c_enabled},
{"JBMusic6_HD", "Replace:\\Lego\\Scripts\\Isle\\Jukebox;60", 57030, 1, MxDSAction::c_enabled},
{"InfoCenter_3rd_Floor_Music_HD",
"Replace:\\Lego\\Scripts\\Isle\\Jukebox;61",
114520,
10000,
MxDSAction::c_enabled | MxDSAction::c_bit3}
};
si::Interleaf si;
mxHd.seek(0, si::MemoryBuffer::SeekStart);
si.Read(&mxHd);
int i = 0;
for (const AssetView& asset : wavAudio) {
si::Object* object = new si::Object;
std::string file = std::string("hdmusic/") + asset.name + ".wav";
object->id_ = i;
object->type_ = si::MxOb::Sound;
object->flags_ = asset.flags;
object->duration_ = asset.duration * asset.loops;
object->loops_ = asset.loops;
object->extra_ = si::bytearray(asset.extra.c_str(), asset.extra.length() + 1);
object->presenter_ = "MxWavePresenter";
object->name_ = asset.name;
object->filetype_ = si::MxOb::WAV;
object->location_ = si::Vector3(0, 0, 0);
object->direction_ = si::Vector3(0, 0, 1);
object->up_ = si::Vector3(0, 1, 0);
object->volume_ = 79;
if (!object->ReplaceWithFile(file.c_str())) {
abort();
}
si.AppendChild(object);
depfile << result << ": " << (std::filesystem::current_path() / file).string() << std::endl;
i++;
}
si.Write(result.c_str());
}
int main(int argc, char* argv[])
{
out = argv[1];
depfile = std::ofstream(argv[2]);
mxHd.WriteU32(si::RIFF::MxHd);
mxHd.WriteU32(3 * sizeof(uint32_t));
mxHd.WriteU32(version);
mxHd.WriteU32(bufferSize);
mxHd.WriteU32(bufferCount);
CreateWidescreen();
CreateHDMusic();
return 0;
}