summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKiritoDv <kiritodev01@gmail.com>2023-09-18 03:39:03 -0600
committerKiritoDv <kiritodev01@gmail.com>2023-09-18 03:39:03 -0600
commit16374cd98fe49163520d211bff04d6302a63d4f8 (patch)
tree9350fd34bae193925b4aa0925bb9d331500f8c7f
parent396f732bc58080430562ea60fd345bf2e51cfc0b (diff)
Added first multiversion support
-rw-r--r--src/Companion.cpp13
-rw-r--r--src/factories/AnimFactory.cpp4
-rw-r--r--src/factories/RawFactory.cpp4
-rw-r--r--src/factories/RawFactory.h2
-rw-r--r--src/n64/Cartridge.cpp6
-rw-r--r--src/n64/Cartridge.h2
-rw-r--r--tools/gen_samples.js6
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::string>();
- 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<uint8_t>& 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<uint8_t> 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]
}
})