From 16374cd98fe49163520d211bff04d6302a63d4f8 Mon Sep 17 00:00:00 2001 From: KiritoDv Date: Mon, 18 Sep 2023 03:39:03 -0600 Subject: Added first multiversion support --- src/Companion.cpp | 13 ++++++++++--- src/factories/AnimFactory.cpp | 4 ++-- src/factories/RawFactory.cpp | 4 ++-- src/factories/RawFactory.h | 2 +- src/n64/Cartridge.cpp | 6 ++++++ src/n64/Cartridge.h | 2 ++ tools/gen_samples.js | 6 +++--- 7 files changed, 26 insertions(+), 11 deletions(-) diff --git a/src/Companion.cpp b/src/Companion.cpp index d234ee7..82f3a3b 100644 --- a/src/Companion.cpp +++ b/src/Companion.cpp @@ -57,6 +57,11 @@ void Companion::Process() { auto wrapper = SWrapper(otr); + auto vWriter = LUS::BinaryWriter(); + vWriter.SetEndianness(LUS::Endianness::Big); + vWriter.Write((uint8_t) LUS::Endianness::Big); + vWriter.Write(cartridge.GetCRC()); + for (const auto & entry : fs::directory_iterator(path)){ std::cout << "Processing " << entry.path() << '\n'; YAML::Node root = YAML::LoadFile(entry.path()); @@ -73,11 +78,10 @@ void Companion::Process() { auto buffer = write.ToVector(); auto output = entry.path().stem() / asset->first.as(); - std::cout << "Writing " << output << '\n'; wrapper.CreateFile(output, buffer); if(type != "TEXTURE") { - std::string dpath = "debug/" + path; + std::string dpath = "debug/" + output.string(); if(!fs::exists(fs::path(dpath).parent_path())){ fs::create_directories(fs::path(dpath).parent_path()); } @@ -86,12 +90,15 @@ void Companion::Process() { stream.close(); } - std::cout << "Processed " << path << std::endl; + std::cout << "Processed " << output << std::endl; write.Close(); } } + wrapper.CreateFile("version", vWriter.ToVector()); + vWriter.Close(); + MIO0Decoder::ClearCache(); wrapper.Close(); } diff --git a/src/factories/AnimFactory.cpp b/src/factories/AnimFactory.cpp index 5acd0ab..0e5d01b 100644 --- a/src/factories/AnimFactory.cpp +++ b/src/factories/AnimFactory.cpp @@ -71,8 +71,8 @@ bool AnimFactory::process(LUS::BinaryWriter* writer, YAML::Node& data, std::vect auto index = data["indices"]; WriteAnimationHeader(writer, header, buffer); - WriteAnimationIndex(writer, values, buffer); - WriteAnimationValues(writer, index, buffer); + WriteAnimationIndex(writer, index, buffer); + WriteAnimationValues(writer, values, buffer); return true; } diff --git a/src/factories/RawFactory.cpp b/src/factories/RawFactory.cpp index f997238..f737a9f 100644 --- a/src/factories/RawFactory.cpp +++ b/src/factories/RawFactory.cpp @@ -1,7 +1,7 @@ #include "RawFactory.h" -void RawFactory::WriteHeader(LUS::BinaryWriter* writer, LUS::ResourceType resType, int32_t version, bool bigEndian) { - writer->Write((uint8_t)(bigEndian ? LUS::Endianness::Big : LUS::Endianness::Little)); // 0x00 +void RawFactory::WriteHeader(LUS::BinaryWriter* writer, LUS::ResourceType resType, int32_t version) { + writer->Write((uint8_t)(LUS::Endianness::Native)); // 0x00 writer->Write((uint8_t)0); // 0x01 writer->Write((uint8_t)0); // 0x02 writer->Write((uint8_t)0); // 0x03 diff --git a/src/factories/RawFactory.h b/src/factories/RawFactory.h index fba32e0..16a78ce 100644 --- a/src/factories/RawFactory.h +++ b/src/factories/RawFactory.h @@ -22,5 +22,5 @@ class RawFactory { public: RawFactory() = default; virtual bool process(LUS::BinaryWriter* write, YAML::Node& data, std::vector& buffer) = 0; - void WriteHeader(LUS::BinaryWriter* write, LUS::ResourceType resType, int32_t version, bool bigEndian = false); + void WriteHeader(LUS::BinaryWriter* write, LUS::ResourceType resType, int32_t version); }; \ No newline at end of file diff --git a/src/n64/Cartridge.cpp b/src/n64/Cartridge.cpp index 96e150c..97fdef4 100644 --- a/src/n64/Cartridge.cpp +++ b/src/n64/Cartridge.cpp @@ -6,6 +6,8 @@ void N64::Cartridge::Initialize() { LUS::BinaryReader reader((char*) this->gRomData.data(), this->gRomData.size()); reader.SetEndianness(LUS::Endianness::Big); + reader.Seek(0x10, LUS::SeekOffsetType::Start); + this->gRomCRC = BSWAP32(reader.ReadUInt32()); reader.Seek(0x20, LUS::SeekOffsetType::Start); this->gGameTitle = std::string(reader.ReadCString()); reader.Seek(0x3E, LUS::SeekOffsetType::Start); @@ -57,3 +59,7 @@ std::string N64::Cartridge::GetCountryCode() { return "unk"; } } + +uint32_t N64::Cartridge::GetCRC() { + return this->gRomCRC; +} diff --git a/src/n64/Cartridge.h b/src/n64/Cartridge.h index e53b8ef..9450239 100644 --- a/src/n64/Cartridge.h +++ b/src/n64/Cartridge.h @@ -20,11 +20,13 @@ public: CountryCode GetCountry(); uint8_t GetVersion() const; std::string GetHash(); + uint32_t GetCRC(); private: std::vector gRomData; CountryCode gCountryCode; uint8_t gVersion; std::string gGameTitle; std::string gHash; + uint32_t gRomCRC; }; } \ No newline at end of file diff --git a/tools/gen_samples.js b/tools/gen_samples.js index 56cead5..3563015 100644 --- a/tools/gen_samples.js +++ b/tools/gen_samples.js @@ -1,5 +1,5 @@ const fs = require('fs'); -const data = require('../assets.json'); +const data = require('./assets.json'); const header = [ '#pragma once', @@ -9,10 +9,10 @@ const header = [ const samples = [] async function main(){ - const files = Object.keys(data).filter(f => f.endsWith(".aiff") && data[f][1]['us'] != undefined).map(m => { + const files = Object.keys(data).filter(f => f.endsWith(".aiff") && data[f][1]['jp'] != undefined).map(m => { return { file: m, - offset: data[m][1]['us'][1] + offset: data[m][1]['jp'][1] } }) -- cgit v1.2.3