Added multiversion support - SM64:JP

This commit is contained in:
KiritoDv
2023-09-18 18:46:26 -06:00
parent 16374cd98f
commit 820ccb1996
6 changed files with 1177 additions and 522 deletions
+2 -2
View File
@@ -398,7 +398,7 @@ castle_inside/22:
offset: 3634560
mio0: 63488
format: RGBA16
castle_inside/23_us:
castle_inside/23:
type: TEXTURE
size: 4096
width: 64
@@ -406,7 +406,7 @@ castle_inside/23_us:
offset: 3634560
mio0: 67584
format: RGBA16
castle_inside/24_us:
castle_inside/24:
type: TEXTURE
size: 4096
width: 64
+2 -2
View File
@@ -398,7 +398,7 @@ castle_inside/22:
offset: 3760960
mio0: 63488
format: RGBA16
castle_inside/23_us:
castle_inside/23:
type: TEXTURE
size: 4096
width: 64
@@ -406,7 +406,7 @@ castle_inside/23_us:
offset: 3760960
mio0: 67584
format: RGBA16
castle_inside/24_us:
castle_inside/24:
type: TEXTURE
size: 4096
width: 64
+8 -8
View File
@@ -2,7 +2,6 @@
#include "storm/SWrapper.h"
#include "utils/MIODecoder.h"
#include "audio/AudioManager.h"
#include "factories/RawFactory.h"
#include "factories/BlobFactory.h"
#include "factories/AudioHeaderFactory.h"
@@ -11,7 +10,6 @@
#include "factories/BankFactory.h"
#include "factories/TextureFactory.h"
#include "factories/AnimFactory.h"
#include "n64/Cartridge.h"
#include <fstream>
#include <iostream>
@@ -41,17 +39,17 @@ void Companion::Process() {
this->gRomData = std::vector<uint8_t>( std::istreambuf_iterator<char>( input ), {} );
input.close();
N64::Cartridge cartridge = N64::Cartridge(this->gRomData);
cartridge.Initialize();
this->cartridge = new N64::Cartridge(this->gRomData);
cartridge->Initialize();
YAML::Node config = YAML::LoadFile("config.yml");
if(!config[cartridge.GetHash()]){
std::cout << "No config found for " << cartridge.GetHash() << '\n';
if(!config[cartridge->GetHash()]){
std::cout << "No config found for " << cartridge->GetHash() << '\n';
return;
}
auto cfg = config[cartridge.GetHash()];
auto cfg = config[cartridge->GetHash()];
auto path = cfg["path"].as<std::string>();
auto otr = cfg["output"].as<std::string>();
@@ -60,7 +58,7 @@ void Companion::Process() {
auto vWriter = LUS::BinaryWriter();
vWriter.SetEndianness(LUS::Endianness::Big);
vWriter.Write((uint8_t) LUS::Endianness::Big);
vWriter.Write(cartridge.GetCRC());
vWriter.Write(cartridge->GetCRC());
for (const auto & entry : fs::directory_iterator(path)){
std::cout << "Processing " << entry.path() << '\n';
@@ -101,6 +99,8 @@ void Companion::Process() {
MIO0Decoder::ClearCache();
wrapper.Close();
this->cartridge = nullptr;
Companion::Instance = nullptr;
}
void Companion::RegisterFactory(const std::string &extension, RawFactory *factory) {
+3
View File
@@ -6,6 +6,7 @@
#include <unordered_map>
#include <filesystem>
#include "factories/RawFactory.h"
#include "n64/Cartridge.h"
class Companion {
public:
@@ -13,10 +14,12 @@ public:
explicit Companion(std::filesystem::path rom) : gRomPath(std::move(rom)) {}
void Init();
void Process();
N64::Cartridge* GetCartridge() { return this->cartridge; }
private:
std::filesystem::path gRomPath;
std::vector<uint8_t> gRomData;
std::unordered_map<std::string, RawFactory*> gFactories;
N64::Cartridge* cartridge;
void RegisterFactory(const std::string& type, RawFactory* factory);
RawFactory* GetFactory(const std::string& type);
+1159 -510
View File
File diff suppressed because it is too large Load Diff
+3
View File
@@ -4,12 +4,15 @@
#include "audio/AudioManager.h"
#include "audio/samples_table.h"
#include "binarytools/BinaryReader.h"
#include "Companion.h"
bool BankFactory::process(LUS::BinaryWriter* writer, YAML::Node& data, std::vector<uint8_t>& buffer) {
auto banks = AudioManager::Instance->get_banks();
auto bankId = data["id"].as<uint32_t>();
auto bank = banks[bankId];
auto gSampleTable = Companion::Instance->GetCartridge()->GetCountry() == N64::CountryCode::Japan ? gJPSampleTable : gUSSampleTable;
WRITE_HEADER(LUS::ResourceType::Bank, 0);
WRITE_U32(bank.insts.size());