1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-07-03 06:24:30 +00:00

ZAPD update (#612)

* remove roompoly

* git subrepo pull --force tools/ZAPD

subrepo:
  subdir:   "tools/ZAPD"
  merged:   "fd4d53a26"
upstream:
  origin:   "https://github.com/zeldaret/ZAPD.git"
  branch:   "master"
  commit:   "fd4d53a26"
git-subrepo:
  version:  "0.4.3"
  origin:   "https://github.com/ingydotnet/git-subrepo.git"
  commit:   "2f68596"
This commit is contained in:
fig02 2021-01-08 19:38:28 -05:00 committed by GitHub
parent 5c6335f9fb
commit 1ff2f0f849
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
171 changed files with 1567 additions and 826 deletions

View file

@ -25,7 +25,6 @@ struct DynaPolyActor;
#define FUNC_80041EA4_VOID_OUT 12 #define FUNC_80041EA4_VOID_OUT 12
#define WATERBOX_ROOM(p) ((p >> 13) & 0x3F) #define WATERBOX_ROOM(p) ((p >> 13) & 0x3F)
#define RoomPoly CollisionPoly // FIXME: Update ZAP to remove RoomPoly
typedef struct { typedef struct {
Vec3f scale; Vec3f scale;

View file

@ -6,7 +6,7 @@
[subrepo] [subrepo]
remote = https://github.com/zeldaret/ZAPD.git remote = https://github.com/zeldaret/ZAPD.git
branch = master branch = master
commit = 440ed2684bb9d02837bfef0c41e6c59e479897a4 commit = fd4d53a2684871a1ac28668515d025470a45ef7f
parent = 1f7bebfc05c42cc4f100a1992970e78ef7055dbd parent = cbe216b1810f9274242d0088a7e3b15b0f95f55d
method = merge method = merge
cmdver = 0.4.3 cmdver = 0.4.3

45
tools/ZAPD/Jenkinsfile vendored Normal file
View file

@ -0,0 +1,45 @@
pipeline {
agent any
stages {
stage('Build ZAPD') {
steps {
sh 'make -j'
}
}
stage('Checkout oot') {
steps {
dir('oot') {
git url: 'https://github.com/zeldaret/oot.git'
}
}
}
stage('Set up oot') {
steps {
dir('oot') {
sh 'cp /usr/local/etc/roms/baserom_oot.z64 baserom_original.z64'
// Identical to `make setup` except for copying our newer ZAPD.out into oot
sh 'git submodule update --init --recursive'
sh 'make -C tools'
sh 'cp ../ZAPD.out tools/ZAPD/'
sh 'python3 fixbaserom.py'
sh 'python3 extract_baserom.py'
sh 'python3 extract_assets.py'
}
}
}
stage('Build oot') {
steps {
dir('oot') {
sh 'make -j'
}
}
}
}
post {
always {
cleanWs()
}
}
}

View file

@ -4,16 +4,24 @@ ifneq (, $(shell which ccache))
CC := ccache $(CC) CC := ccache $(CC)
endif endif
CFLAGS := -g -std=c++17 -I ZAPD -I ZAPD/sqlite -O2 -rdynamic CFLAGS := -g -std=c++17 -I ZAPD -I lib/assimp/include -I lib/elfio -I lib/json/include -I lib/stb -I lib/tinygltf -I lib/tinyxml2 -O2 -rdynamic
UNAME := $(shell uname)
FS_INC =
ifneq ($(UNAME), Darwin)
FS_INC += -lstdc++fs
endif
SRC_DIRS := ZAPD ZAPD/ZRoom ZAPD/ZRoom/Commands ZAPD/Overlays ZAPD/HighLevel ZAPD/OpenFBX SRC_DIRS := ZAPD ZAPD/ZRoom ZAPD/ZRoom/Commands ZAPD/Overlays ZAPD/HighLevel ZAPD/OpenFBX
CPP_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.cpp)) CPP_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.cpp))
CPP_FILES += lib/tinyxml2/tinyxml2.cpp
O_FILES := $(CPP_FILES:.cpp=.o) O_FILES := $(CPP_FILES:.cpp=.o)
all: ZAPD.out all: ZAPD.out
clean: clean:
rm -f $(O_FILES) ZAPD.out rm -f $(O_FILES) ZAPD.out
rebuild: clean all rebuild: clean all
@ -22,4 +30,4 @@ rebuild: clean all
$(CC) $(CFLAGS) -c $< -o $@ $(CC) $(CFLAGS) -c $< -o $@
ZAPD.out: $(O_FILES) ZAPD.out: $(O_FILES)
$(CC) $(CFLAGS) $(O_FILES) -o $@ -lstdc++fs $(CC) $(CFLAGS) $(O_FILES) -o $@ $(FS_INC)

View file

@ -1,43 +1,129 @@
#pragma once #pragma once
#include <limits>
#include <stdint.h> #include <stdint.h>
#include <vector> #include <vector>
class BitConverter class BitConverter
{ {
public: public:
static inline int16_t ToInt16BE(uint8_t* data, int offset) static inline int8_t ToInt8BE(const uint8_t* data, int offset)
{ {
return (data[offset + 0] << 8) + data[offset + 1]; return (uint8_t)data[offset + 0];
} }
static inline int16_t ToInt16BE(std::vector<uint8_t> data, int offset) static inline int8_t ToInt8BE(const std::vector<uint8_t>& data, int offset)
{ {
return (data[offset + 0] << 8) + data[offset + 1]; return (uint8_t)data[offset + 0];
} }
static inline int32_t ToInt32BE(std::uint8_t* data, int offset) static inline uint8_t ToUInt8BE(const uint8_t* data, int offset)
{ {
return (data[offset + 0] << 24) + (data[offset + 1] << 16) + (data[offset + 2] << 8) + data[offset + 3]; return (uint8_t)data[offset + 0];
} }
static inline int32_t ToInt32BE(std::vector<uint8_t> data, int offset) static inline uint8_t ToUInt8BE(const std::vector<uint8_t>& data, int offset)
{ {
return (data[offset + 0] << 24) + (data[offset + 1] << 16) + (data[offset + 2] << 8) + data[offset + 3]; return (uint8_t)data[offset + 0];
} }
static inline uint64_t ToInt64BE(uint8_t* data, int offset) static inline int16_t ToInt16BE(const uint8_t* data, int offset)
{
return ((uint16_t)data[offset + 0] << 8) + (uint16_t)data[offset + 1];
}
static inline int16_t ToInt16BE(const std::vector<uint8_t>& data, int offset)
{
return ((uint16_t)data[offset + 0] << 8) + (uint16_t)data[offset + 1];
}
static inline uint16_t ToUInt16BE(const uint8_t* data, int offset)
{
return ((uint16_t)data[offset + 0] << 8) + (uint16_t)data[offset + 1];
}
static inline uint16_t ToUInt16BE(const std::vector<uint8_t>& data, int offset)
{
return ((uint16_t)data[offset + 0] << 8) + (uint16_t)data[offset + 1];
}
static inline int32_t ToInt32BE(const uint8_t* data, int offset)
{
return ((uint32_t)data[offset + 0] << 24) + ((uint32_t)data[offset + 1] << 16) + ((uint32_t)data[offset + 2] << 8) + (uint32_t)data[offset + 3];
}
static inline int32_t ToInt32BE(const std::vector<uint8_t>& data, int offset)
{
return ((uint32_t)data[offset + 0] << 24) + ((uint32_t)data[offset + 1] << 16) + ((uint32_t)data[offset + 2] << 8) + (uint32_t)data[offset + 3];
}
static inline uint32_t ToUInt32BE(const uint8_t* data, int offset)
{
return ((uint32_t)data[offset + 0] << 24) + ((uint32_t)data[offset + 1] << 16) + ((uint32_t)data[offset + 2] << 8) + (uint32_t)data[offset + 3];
}
static inline uint32_t ToUInt32BE(const std::vector<uint8_t>& data, int offset)
{
return ((uint32_t)data[offset + 0] << 24) + ((uint32_t)data[offset + 1] << 16) + ((uint32_t)data[offset + 2] << 8) + (uint32_t)data[offset + 3];
}
static inline int64_t ToInt64BE(const uint8_t* data, int offset)
{ {
return ((uint64_t)data[offset + 0] << 56) + ((uint64_t)data[offset + 1] << 48) + ((uint64_t)data[offset + 2] << 40) + ((uint64_t)data[offset + 3] << 32) + ((uint64_t)data[offset + 4] << 24) + ((uint64_t)data[offset + 5] << 16) + ((uint64_t)data[offset + 6] << 8) + ((uint64_t)data[offset + 7]); return ((uint64_t)data[offset + 0] << 56) + ((uint64_t)data[offset + 1] << 48) + ((uint64_t)data[offset + 2] << 40) + ((uint64_t)data[offset + 3] << 32) + ((uint64_t)data[offset + 4] << 24) + ((uint64_t)data[offset + 5] << 16) + ((uint64_t)data[offset + 6] << 8) + ((uint64_t)data[offset + 7]);
} }
static inline uint64_t ToInt64BE(std::vector<uint8_t> data, int offset) static inline int64_t ToInt64BE(const std::vector<uint8_t>& data, int offset)
{ {
return ((uint64_t)data[offset + 0] << 56) + ((uint64_t)data[offset + 1] << 48) + ((uint64_t)data[offset + 2] << 40) + ((uint64_t)data[offset + 3] << 32) + ((uint64_t)data[offset + 4] << 24) + ((uint64_t)data[offset + 5] << 16) + ((uint64_t)data[offset + 6] << 8) + ((uint64_t)data[offset + 7]); return ((uint64_t)data[offset + 0] << 56) + ((uint64_t)data[offset + 1] << 48) + ((uint64_t)data[offset + 2] << 40) + ((uint64_t)data[offset + 3] << 32) + ((uint64_t)data[offset + 4] << 24) + ((uint64_t)data[offset + 5] << 16) + ((uint64_t)data[offset + 6] << 8) + ((uint64_t)data[offset + 7]);
} }
static inline float ToFloatBE(std::vector<uint8_t> data, int offset) static inline uint64_t ToUInt64BE(const uint8_t* data, int offset)
{ {
return (float)(data[offset + 0] << 24) + (data[offset + 1] << 16) + (data[offset + 2] << 8) + data[offset + 3]; return ((uint64_t)data[offset + 0] << 56) + ((uint64_t)data[offset + 1] << 48) + ((uint64_t)data[offset + 2] << 40) + ((uint64_t)data[offset + 3] << 32) + ((uint64_t)data[offset + 4] << 24) + ((uint64_t)data[offset + 5] << 16) + ((uint64_t)data[offset + 6] << 8) + ((uint64_t)data[offset + 7]);
} }
};
static inline uint64_t ToUInt64BE(const std::vector<uint8_t>& data, int offset)
{
return ((uint64_t)data[offset + 0] << 56) + ((uint64_t)data[offset + 1] << 48) + ((uint64_t)data[offset + 2] << 40) + ((uint64_t)data[offset + 3] << 32) + ((uint64_t)data[offset + 4] << 24) + ((uint64_t)data[offset + 5] << 16) + ((uint64_t)data[offset + 6] << 8) + ((uint64_t)data[offset + 7]);
}
static inline float ToFloatBE(const uint8_t* data, int offset)
{
float value;
uint32_t floatData = ((uint32_t)data[offset + 0] << 24) + ((uint32_t)data[offset + 1] << 16) + ((uint32_t)data[offset + 2] << 8) + (uint32_t)data[offset + 3];
static_assert(sizeof(uint32_t) == sizeof(float));
std::memcpy(&value, &floatData, sizeof(value));
return value;
}
static inline float ToFloatBE(const std::vector<uint8_t>& data, int offset)
{
float value;
uint32_t floatData = ((uint32_t)data[offset + 0] << 24) + ((uint32_t)data[offset + 1] << 16) + ((uint32_t)data[offset + 2] << 8) + (uint32_t)data[offset + 3];
static_assert(sizeof(uint32_t) == sizeof(float));
std::memcpy(&value, &floatData, sizeof(value));
return value;
}
static inline double ToDoubleBE(const uint8_t* data, int offset)
{
double value;
uint64_t floatData = ((uint64_t)data[offset + 0] << 56) + ((uint64_t)data[offset + 1] << 48) + ((uint64_t)data[offset + 2] << 40) + ((uint64_t)data[offset + 3] << 32) + ((uint64_t)data[offset + 4] << 24) + ((uint64_t)data[offset + 5] << 16) + ((uint64_t)data[offset + 6] << 8) + ((uint64_t)data[offset + 7]);
static_assert(sizeof(uint64_t) == sizeof(double));
// Checks if the float format on the platform the ZAPD binary is running on supports the same float format as the object file.
static_assert(std::numeric_limits<float>::is_iec559);
std::memcpy(&value, &floatData, sizeof(value));
return value;
}
static inline double ToDoubleBE(const std::vector<uint8_t>& data, int offset)
{
double value;
uint64_t floatData = ((uint64_t)data[offset + 0] << 56) + ((uint64_t)data[offset + 1] << 48) + ((uint64_t)data[offset + 2] << 40) + ((uint64_t)data[offset + 3] << 32) + ((uint64_t)data[offset + 4] << 24) + ((uint64_t)data[offset + 5] << 16) + ((uint64_t)data[offset + 6] << 8) + ((uint64_t)data[offset + 7]);
static_assert(sizeof(uint64_t) == sizeof(double));
// Checks if the float format on the platform the ZAPD binary is running on supports the same float format as the object file.
static_assert(std::numeric_limits<double>::is_iec559);
std::memcpy(&value, &floatData, sizeof(value));
return value;
}
};

View file

@ -3,7 +3,7 @@
#include <string> #include <string>
#include <iostream> #include <iostream>
#if defined(_MSC_VER) || defined(__clang__) #if __has_include(<filesystem>)
#include <filesystem> #include <filesystem>
namespace fs = std::filesystem; namespace fs = std::filesystem;
#else #else
@ -19,13 +19,13 @@ public:
return fs::current_path().u8string(); return fs::current_path().u8string();
} }
static bool Exists(std::string path) static bool Exists(const std::string& path)
{ {
return fs::exists(fs::path(path)); return fs::exists(fs::path(path));
} }
static void CreateDirectory(std::string path) static void CreateDirectory(const std::string& path)
{ {
fs::create_directory(path); fs::create_directory(path);
} }
}; };

View file

@ -11,23 +11,26 @@
class File class File
{ {
public: public:
static bool Exists(std::string filePath) static bool Exists(const std::string& filePath)
{ {
std::ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate); std::ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate);
return file.good(); return file.good();
} }
static std::vector<uint8_t> ReadAllBytes(std::string filePath) static std::vector<uint8_t> ReadAllBytes(const std::string& filePath)
{ {
std::ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate); std::ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate);
int fileSize = (int)file.tellg(); int fileSize = (int)file.tellg();
file.seekg(0); file.seekg(0);
char* data = new char[fileSize]; char* data = new char[fileSize];
file.read(data, fileSize); file.read(data, fileSize);
return std::vector<uint8_t>(data, data + fileSize); std::vector<uint8_t> result = std::vector<uint8_t>(data, data + fileSize);
delete data;
return result;
}; };
static std::string ReadAllText(std::string filePath) static std::string ReadAllText(const std::string& filePath)
{ {
std::ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate); std::ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate);
int fileSize = (int)file.tellg(); int fileSize = (int)file.tellg();
@ -35,10 +38,13 @@ public:
char* data = new char[fileSize+1]; char* data = new char[fileSize+1];
memset(data, 0, fileSize + 1); memset(data, 0, fileSize + 1);
file.read(data, fileSize); file.read(data, fileSize);
return std::string((const char*)data); std::string str = std::string((const char*)data);
delete data;
return str;
}; };
static std::vector<std::string> ReadAllLines(std::string filePath) static std::vector<std::string> ReadAllLines(const std::string& filePath)
{ {
std::string text = ReadAllText(filePath); std::string text = ReadAllText(filePath);
std::vector<std::string> lines = StringHelper::Split(text, "\n"); std::vector<std::string> lines = StringHelper::Split(text, "\n");
@ -46,15 +52,15 @@ public:
return lines; return lines;
}; };
static void WriteAllBytes(std::string filePath, std::vector<uint8_t> data) static void WriteAllBytes(const std::string& filePath, const std::vector<uint8_t>& data)
{ {
std::ofstream file(filePath, std::ios::binary); std::ofstream file(filePath, std::ios::binary);
file.write((char*)data.data(), data.size()); file.write((char*)data.data(), data.size());
}; };
static void WriteAllText(std::string filePath, std::string text) static void WriteAllText(const std::string& filePath, const std::string& text)
{ {
std::ofstream file(filePath, std::ios::out); std::ofstream file(filePath, std::ios::out);
file.write(text.c_str(), text.size()); file.write(text.c_str(), text.size());
} }
}; };

View file

@ -19,11 +19,11 @@ Globals::Globals()
segmentRefFiles = map<int, ZFile*>(); segmentRefFiles = map<int, ZFile*>();
genSourceFile = true; genSourceFile = true;
testMode = false; testMode = false;
debugMessages = false;
profile = false; profile = false;
includeFilePrefix = false; includeFilePrefix = false;
useExternalResources = true; useExternalResources = true;
lastScene = nullptr; lastScene = nullptr;
verbosity = VERBOSITY_SILENT;
} }
string Globals::FindSymbolSegRef(int segNumber, uint32_t symbolAddress) string Globals::FindSymbolSegRef(int segNumber, uint32_t symbolAddress)
@ -64,7 +64,7 @@ string Globals::FindSymbolSegRef(int segNumber, uint32_t symbolAddress)
return "ERROR"; return "ERROR";
} }
void Globals::ReadConfigFile(string configFilePath) void Globals::ReadConfigFile(const std::string& configFilePath)
{ {
XMLDocument doc; XMLDocument doc;
XMLError eResult = doc.LoadFile(configFilePath.c_str()); XMLError eResult = doc.LoadFile(configFilePath.c_str());
@ -93,7 +93,7 @@ void Globals::ReadConfigFile(string configFilePath)
} }
} }
void Globals::GenSymbolMap(string symbolMapPath) void Globals::GenSymbolMap(const std::string& symbolMapPath)
{ {
auto symbolLines = File::ReadAllLines(symbolMapPath); auto symbolLines = File::ReadAllLines(symbolMapPath);

View file

@ -1,11 +1,18 @@
#pragma once #pragma once
#include <map>
#include <string> #include <string>
#include <vector> #include <vector>
#include "ZFile.h" #include "ZFile.h"
#include "ZTexture.h" #include "ZTexture.h"
#include "ZRoom/ZRoom.h" #include "ZRoom/ZRoom.h"
typedef enum VerbosityLevel {
VERBOSITY_SILENT,
VERBOSITY_INFO,
VERBOSITY_DEBUG
} VerbosityLevel;
class Globals class Globals
{ {
public: public:
@ -14,9 +21,9 @@ public:
bool genSourceFile; // Used for extraction bool genSourceFile; // Used for extraction
bool useExternalResources; bool useExternalResources;
bool testMode; // Enables certain experimental features bool testMode; // Enables certain experimental features
bool debugMessages; // Enables certain printfs
bool profile; // Measure performance of certain operations bool profile; // Measure performance of certain operations
bool includeFilePrefix; // Include the file prefix in symbols bool includeFilePrefix; // Include the file prefix in symbols
VerbosityLevel verbosity; // ZAPD outputs additional information
ZFileMode fileMode; ZFileMode fileMode;
std::string baseRomPath, inputPath, outputPath, cfgPath; std::string baseRomPath, inputPath, outputPath, cfgPath;
TextureType texType; TextureType texType;
@ -30,8 +37,8 @@ public:
Globals(); Globals();
std::string FindSymbolSegRef(int segNumber, uint32_t symbolAddress); std::string FindSymbolSegRef(int segNumber, uint32_t symbolAddress);
void ReadConfigFile(std::string configFilePath); void ReadConfigFile(const std::string& configFilePath);
void GenSymbolMap(std::string symbolMapPath); void GenSymbolMap(const std::string& symbolMapPath);
void AddSegment(int segment); void AddSegment(int segment);
bool HasSegment(int segment); bool HasSegment(int segment);
}; };
@ -49,4 +56,4 @@ public:
* Segment 13: icon_item_nes_static * Segment 13: icon_item_nes_static
* *
* I'm thinking a config file could be usable, but I'll have to experiment... * I'm thinking a config file could be usable, but I'll have to experiment...
*/ */

View file

@ -2,7 +2,7 @@
#include <stdint.h> #include <stdint.h>
#include "../ZAnimation.h" #include "../ZAnimation.h"
#include "../tinyxml2.h" #include <tinyxml2.h>
#include "HLFileIntermediette.h" #include "HLFileIntermediette.h"
/* /*

View file

@ -6,10 +6,10 @@
#include "../File.h" #include "../File.h"
#ifdef USE_ASSIMP #ifdef USE_ASSIMP
#include "../assimp/Importer.hpp" #include <assimp/Importer.hpp>
#include "../assimp/Exporter.hpp" #include <assimp/Exporter.hpp>
#include "../assimp/scene.h" #include <assimp/scene.h>
#include "../assimp/postprocess.h" #include <assimp/postprocess.h>
#endif #endif
using namespace std; using namespace std;

View file

@ -7,8 +7,8 @@
#include "HLFileIntermediette.h" #include "HLFileIntermediette.h"
#include "../ZDisplayList.h" #include "../ZDisplayList.h"
#include "../ZSkeleton.h" #include "../ZSkeleton.h"
#include "../tinyxml2.h" #include <tinyxml2.h>
#include "../assimp/scene.h" #include <assimp/scene.h>
/* /*
* An intermediette format for models. Goes from FBX<-->Intermediette<-->Display List C Code. * An intermediette format for models. Goes from FBX<-->Intermediette<-->Display List C Code.

View file

@ -1,6 +1,6 @@
#include "HLTexture.h" #include "HLTexture.h"
#include "../StringHelper.h" #include "../StringHelper.h"
#include "../stb_image.h" #include <stb_image.h>
using namespace std; using namespace std;

View file

@ -21,12 +21,12 @@
using namespace tinyxml2; using namespace tinyxml2;
using namespace std; using namespace std;
bool Parse(string xmlFilePath, string basePath, string outPath, ZFileMode fileMode); bool Parse(const std::string& xmlFilePath, const std::string& basePath, const std::string& outPath, ZFileMode fileMode);
void BuildAssetTexture(string pngFilePath, TextureType texType, string outPath); void BuildAssetTexture(const std::string& pngFilePath, TextureType texType, const std::string& outPath);
void BuildAssetBlob(string blobFilePath, string outPath); void BuildAssetBlob(const std::string& blobFilePath, const std::string& outPath);
void BuildAssetModelIntermediette(string mdlPath, string outPath); void BuildAssetModelIntermediette(const std::string& mdlPath, const std::string& outPath);
void BuildAssetAnimationIntermediette(string animPath, string outPath); void BuildAssetAnimationIntermediette(const std::string& animPath, const std::string& outPath);
int NewMain(int argc, char* argv[]); int NewMain(int argc, char* argv[]);
@ -60,7 +60,6 @@ int main(int argc, char* argv[])
int NewMain(int argc, char* argv[]) int NewMain(int argc, char* argv[])
{ {
// Syntax: ZAPD.exe [mode (b/btex/bovl/e)] (Arbritrary Number of Arguments) // Syntax: ZAPD.exe [mode (b/btex/bovl/e)] (Arbritrary Number of Arguments)
printf("ZAPD: Zelda Asset Processor For Decomp\n");
if (argc < 2) if (argc < 2)
{ {
@ -130,11 +129,6 @@ int NewMain(int argc, char* argv[])
Globals::Instance->testMode = string(argv[i + 1]) == "1"; Globals::Instance->testMode = string(argv[i + 1]) == "1";
i++; i++;
} }
else if (arg == "-dm") // Debug Messages
{
Globals::Instance->debugMessages = string(argv[i + 1]) == "1";
i++;
}
else if (arg == "-profile") // Profile else if (arg == "-profile") // Profile
{ {
Globals::Instance->profile = string(argv[i + 1]) == "1"; Globals::Instance->profile = string(argv[i + 1]) == "1";
@ -179,6 +173,15 @@ int NewMain(int argc, char* argv[])
signal(SIGSEGV, ErrorHandler); signal(SIGSEGV, ErrorHandler);
#endif #endif
} }
else if (arg == "-v") // Verbose
{
Globals::Instance->verbosity = (VerbosityLevel)strtol(argv[++i], NULL, 16);
}
}
if (Globals::Instance->verbosity >= VERBOSITY_INFO)
{
printf("ZAPD: Zelda Asset Processor For Decomp\n");
} }
if (fileMode == ZFileMode::Build || fileMode == ZFileMode::Extract || fileMode == ZFileMode::BuildSourceFile) if (fileMode == ZFileMode::Build || fileMode == ZFileMode::Extract || fileMode == ZFileMode::BuildSourceFile)
@ -211,7 +214,7 @@ int NewMain(int argc, char* argv[])
else if (fileMode == ZFileMode::BuildOverlay) else if (fileMode == ZFileMode::BuildOverlay)
{ {
ZOverlay* overlay = ZOverlay::FromBuild(Path::GetDirectoryName(Globals::Instance->inputPath), Path::GetDirectoryName(Globals::Instance->cfgPath)); ZOverlay* overlay = ZOverlay::FromBuild(Path::GetDirectoryName(Globals::Instance->inputPath), Path::GetDirectoryName(Globals::Instance->cfgPath));
if (overlay) if (overlay)
File::WriteAllText(Globals::Instance->outputPath, overlay->GetSourceOutputCode("")); File::WriteAllText(Globals::Instance->outputPath, overlay->GetSourceOutputCode(""));
} }
@ -219,7 +222,7 @@ int NewMain(int argc, char* argv[])
return 0; return 0;
} }
bool Parse(string xmlFilePath, string basePath, string outPath, ZFileMode fileMode) bool Parse(const std::string& xmlFilePath, const std::string& basePath, const std::string& outPath, ZFileMode fileMode)
{ {
XMLDocument doc; XMLDocument doc;
XMLError eResult = doc.LoadFile(xmlFilePath.c_str()); XMLError eResult = doc.LoadFile(xmlFilePath.c_str());
@ -232,8 +235,6 @@ bool Parse(string xmlFilePath, string basePath, string outPath, ZFileMode fileMo
if (root == nullptr) if (root == nullptr)
return false; return false;
//vector<ZFile*> files = vector<ZFile*>();
for (XMLElement* child = root->FirstChildElement(); child != NULL; child = child->NextSiblingElement()) for (XMLElement* child = root->FirstChildElement(); child != NULL; child = child->NextSiblingElement())
{ {
if (string(child->Name()) == "File") if (string(child->Name()) == "File")
@ -253,15 +254,16 @@ bool Parse(string xmlFilePath, string basePath, string outPath, ZFileMode fileMo
file->ExtractResources(outPath); file->ExtractResources(outPath);
} }
XMLElement* element = root->FirstChildElement("File"); // All done, free files
for (ZFile* file : Globals::Instance->files)
delete file;
if (element == nullptr) Globals::Instance->files.clear();
return false;
return true; return true;
} }
void BuildAssetTexture(string pngFilePath, TextureType texType, string outPath) void BuildAssetTexture(const std::string& pngFilePath, TextureType texType, const std::string& outPath)
{ {
vector<string> split = StringHelper::Split(outPath, "/"); vector<string> split = StringHelper::Split(outPath, "/");
string name = StringHelper::Split(split[split.size() - 1], ".")[0]; string name = StringHelper::Split(split[split.size() - 1], ".")[0];
@ -275,11 +277,11 @@ void BuildAssetTexture(string pngFilePath, TextureType texType, string outPath)
string src = tex->GetSourceOutputCode(name); string src = tex->GetSourceOutputCode(name);
File::WriteAllText(outPath, src); File::WriteAllText(outPath, src);
delete tex; delete tex;
} }
void BuildAssetBlob(string blobFilePath, string outPath) void BuildAssetBlob(const std::string& blobFilePath, const std::string& outPath)
{ {
vector<string> split = StringHelper::Split(outPath, "/"); vector<string> split = StringHelper::Split(outPath, "/");
ZBlob* blob = ZBlob::FromFile(blobFilePath); ZBlob* blob = ZBlob::FromFile(blobFilePath);
@ -293,7 +295,7 @@ void BuildAssetBlob(string blobFilePath, string outPath)
delete blob; delete blob;
} }
void BuildAssetModelIntermediette(string mdlPath, string outPath) void BuildAssetModelIntermediette(const std::string& mdlPath, const std::string& outPath)
{ {
XMLDocument doc; XMLDocument doc;
XMLError eResult = doc.LoadFile(mdlPath.c_str()); XMLError eResult = doc.LoadFile(mdlPath.c_str());
@ -301,13 +303,13 @@ void BuildAssetModelIntermediette(string mdlPath, string outPath)
vector<string> split = StringHelper::Split(outPath, "/"); vector<string> split = StringHelper::Split(outPath, "/");
HLModelIntermediette* mdl = HLModelIntermediette::FromXML(doc.RootElement()); HLModelIntermediette* mdl = HLModelIntermediette::FromXML(doc.RootElement());
string output = mdl->OutputCode(); string output = mdl->OutputCode();
File::WriteAllText(outPath, output); File::WriteAllText(outPath, output);
delete mdl; delete mdl;
} }
void BuildAssetAnimationIntermediette(string animPath, string outPath) void BuildAssetAnimationIntermediette(const std::string& animPath, const std::string& outPath)
{ {
vector<string> split = StringHelper::Split(outPath, "/"); vector<string> split = StringHelper::Split(outPath, "/");
ZFile* file = new ZFile("", split[split.size() - 2]); ZFile* file = new ZFile("", split[split.size() - 2]);
@ -320,7 +322,7 @@ void BuildAssetAnimationIntermediette(string animPath, string outPath)
zAnim->GetSourceOutputCode(split[split.size() - 2]); zAnim->GetSourceOutputCode(split[split.size() - 2]);
string output = ""; string output = "";
output += file->declarations[2]->text + "\n"; output += file->declarations[2]->text + "\n";
output += file->declarations[1]->text + "\n"; output += file->declarations[1]->text + "\n";
output += file->declarations[0]->text + "\n"; output += file->declarations[0]->text + "\n";
@ -329,4 +331,4 @@ void BuildAssetAnimationIntermediette(string animPath, string outPath)
delete zAnim; delete zAnim;
delete file; delete file;
} }

View file

@ -41,14 +41,14 @@ ZOverlay* ZOverlay::FromBuild(string buildPath, string cfgFolderPath)
vector<RelocationEntry*> dataRelocs; vector<RelocationEntry*> dataRelocs;
vector<RelocationEntry*> rodataRelocs; vector<RelocationEntry*> rodataRelocs;
// get the elf files // get the elf files
vector<elfio*> readers; vector<elfio*> readers;
for (int i = 1; i < cfgLines.size(); i++) for (int i = 1; i < cfgLines.size(); i++)
{ {
string elfPath = buildPath + "/" + cfgLines[i].substr(0, cfgLines[i].size()-2) + ".o"; string elfPath = buildPath + "/" + cfgLines[i].substr(0, cfgLines[i].size()-2) + ".o";
elfio* reader = new elfio(); elfio* reader = new elfio();
if (!reader->load(elfPath)) if (!reader->load(elfPath))
{ {
// not all files were compiled // not all files were compiled
@ -59,7 +59,7 @@ ZOverlay* ZOverlay::FromBuild(string buildPath, string cfgFolderPath)
delete ovl; delete ovl;
return nullptr; return nullptr;
} }
readers.push_back(reader); readers.push_back(reader);
} }
@ -108,7 +108,7 @@ ZOverlay* ZOverlay::FromBuild(string buildPath, string cfgFolderPath)
{ {
if (curSymShndx != SHN_UNDEF) if (curSymShndx != SHN_UNDEF)
break; break;
if (reader == curReader) if (reader == curReader)
continue; continue;
@ -158,7 +158,7 @@ ZOverlay* ZOverlay::FromBuild(string buildPath, string cfgFolderPath)
} }
} }
} }
// increase section offsets // increase section offsets
for (int i = 0; i < sec_num; i++) for (int i = 0; i < sec_num; i++)
{ {
@ -177,7 +177,7 @@ ZOverlay* ZOverlay::FromBuild(string buildPath, string cfgFolderPath)
ovl->entries.push_back(reloc); ovl->entries.push_back(reloc);
for (auto reloc : rodataRelocs) for (auto reloc : rodataRelocs)
ovl->entries.push_back(reloc); ovl->entries.push_back(reloc);
for (auto r: readers) for (auto r: readers)
delete r; delete r;
readers.clear(); readers.clear();
@ -185,7 +185,7 @@ ZOverlay* ZOverlay::FromBuild(string buildPath, string cfgFolderPath)
return ovl; return ovl;
} }
string ZOverlay::GetSourceOutputCode(std::string prefix) string ZOverlay::GetSourceOutputCode(const std::string& prefix)
{ {
string output = ""; string output = "";
@ -226,6 +226,6 @@ SectionType ZOverlay::GetSectionTypeFromStr(string sectionName)
return SectionType::RoData; return SectionType::RoData;
else if (sectionName == ".rel.bss" || sectionName == ".bss") else if (sectionName == ".rel.bss" || sectionName == ".bss")
return SectionType::Bss; return SectionType::Bss;
return SectionType::ERROR; return SectionType::ERROR;
} }

View file

@ -1,7 +1,7 @@
#pragma once #pragma once
#include "../ZResource.h" #include "../ZResource.h"
#include "../tinyxml2.h" #include <tinyxml2.h>
#include <elfio/elfio.hpp> #include <elfio/elfio.hpp>
enum SectionType enum SectionType
@ -28,9 +28,9 @@ public:
RelocationType relocationType; RelocationType relocationType;
int32_t offset; int32_t offset;
RelocationEntry(SectionType nSecType, RelocationType nRelType, int32_t nOffset) RelocationEntry(SectionType nSecType, RelocationType nRelType, int32_t nOffset)
{ {
sectionType = nSecType; sectionType = nSecType;
relocationType = nRelType; relocationType = nRelType;
offset = nOffset; offset = nOffset;
} }
@ -55,7 +55,7 @@ public:
ZOverlay(std::string nName); ZOverlay(std::string nName);
~ZOverlay(); ~ZOverlay();
static ZOverlay* FromBuild(std::string buildPath, std::string cfgFolderPath); static ZOverlay* FromBuild(std::string buildPath, std::string cfgFolderPath);
std::string GetSourceOutputCode(std::string prefix); std::string GetSourceOutputCode(const std::string& prefix);
private: private:
std::vector<RelocationEntry*> entries; std::vector<RelocationEntry*> entries;
@ -64,4 +64,4 @@ private:
static SectionType GetSectionTypeFromStr(std::string sectionName); static SectionType GetSectionTypeFromStr(std::string sectionName);
//static std::string GetOverlayNameFromElf(ELFIO::elfio& reader); //static std::string GetOverlayNameFromElf(ELFIO::elfio& reader);
}; };

View file

@ -4,7 +4,7 @@
#include <iostream> #include <iostream>
#include "StringHelper.h" #include "StringHelper.h"
#if defined(_MSC_VER) || defined(__clang__) #if __has_include(<filesystem>)
#include <filesystem> #include <filesystem>
namespace fs = std::filesystem; namespace fs = std::filesystem;
#else #else
@ -15,18 +15,18 @@ namespace fs = std::experimental::filesystem;
class Path class Path
{ {
public: public:
static std::string GetFileNameWithoutExtension(std::string input) static std::string GetFileNameWithoutExtension(const std::string& input)
{ {
std::vector<std::string> split = StringHelper::Split(input, "/"); std::vector<std::string> split = StringHelper::Split(input, "/");
return split[split.size() - 1].substr(0, input.find_last_of(".")); return split[split.size() - 1].substr(0, input.find_last_of("."));
}; };
static std::string GetFileNameExtension(std::string input) static std::string GetFileNameExtension(const std::string& input)
{ {
return input.substr(input.find_last_of("."), input.length()); return input.substr(input.find_last_of("."), input.length());
}; };
static std::string GetPath(std::string input) static std::string GetPath(const std::string& input)
{ {
std::vector<std::string> split = StringHelper::Split(input, "/"); std::vector<std::string> split = StringHelper::Split(input, "/");
std::string output = ""; std::string output = "";
@ -40,8 +40,8 @@ public:
return output; return output;
}; };
static std::string GetDirectoryName(std::string path) static std::string GetDirectoryName(const std::string& path)
{ {
return fs::path(path).parent_path().u8string(); return fs::path(path).parent_path().u8string();
}; };
}; };

View file

@ -2,13 +2,14 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include <numeric>
#include <stdarg.h> #include <stdarg.h>
#include <string.h> #include <string.h>
class StringHelper class StringHelper
{ {
public: public:
static std::vector<std::string> Split(std::string s, std::string delimiter) static std::vector<std::string> Split(std::string s, const std::string& delimiter)
{ {
std::vector<std::string> result; std::vector<std::string> result;
@ -28,7 +29,7 @@ public:
return result; return result;
} }
static std::string Strip(std::string s, std::string delimiter) static std::string Strip(std::string s, const std::string& delimiter)
{ {
size_t pos = 0; size_t pos = 0;
std::string token; std::string token;
@ -42,17 +43,17 @@ public:
return s; return s;
} }
static bool StartsWith(std::string s, std::string input) static bool StartsWith(const std::string& s, const std::string& input)
{ {
return s.rfind(input, 0) == 0; return s.rfind(input, 0) == 0;
} }
static bool Contains(std::string s, std::string input) static bool Contains(const std::string& s, const std::string& input)
{ {
return s.find(input) != std::string::npos; return s.find(input) != std::string::npos;
} }
static bool EndsWith(std::string s, std::string input) static bool EndsWith(const std::string& s, const std::string& input)
{ {
int inputLen = strlen(input.c_str()); int inputLen = strlen(input.c_str());
return s.rfind(input) == (s.size() - inputLen); return s.rfind(input) == (s.size() - inputLen);
@ -72,4 +73,13 @@ public:
output = buffer; output = buffer;
return output; return output;
} }
};
static std::string Implode(std::vector<std::string>& elements, const char* const separator)
{
return std::accumulate(std::begin(elements), std::end(elements), std::string(),
[separator](std::string& ss, std::string& s)
{
return ss.empty() ? s : ss + separator + s;
});
}
};

View file

@ -1,269 +1,270 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations"> <ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32"> <ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32"> <ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64"> <ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>x64</Platform> <Platform>x64</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Release|x64"> <ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>x64</Platform> <Platform>x64</Platform>
</ProjectConfiguration> </ProjectConfiguration>
</ItemGroup> </ItemGroup>
<PropertyGroup Label="Globals"> <PropertyGroup Label="Globals">
<VCProjectVersion>15.0</VCProjectVersion> <VCProjectVersion>15.0</VCProjectVersion>
<ProjectGuid>{B53F9E5B-0A58-4BAE-9AFE-856C8CBB8D36}</ProjectGuid> <ProjectGuid>{B53F9E5B-0A58-4BAE-9AFE-856C8CBB8D36}</ProjectGuid>
<RootNamespace>ZAPD</RootNamespace> <RootNamespace>ZAPD</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
<ProjectName>ZAPD</ProjectName> <ProjectName>ZAPD</ProjectName>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v142</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet> <CharacterSet>MultiByte</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet> <CharacterSet>MultiByte</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v142</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet> <CharacterSet>MultiByte</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet> <CharacterSet>MultiByte</CharacterSet>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings"> <ImportGroup Label="ExtensionSettings">
</ImportGroup> </ImportGroup>
<ImportGroup Label="Shared"> <ImportGroup Label="Shared">
</ImportGroup> </ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup> </ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup> </ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup> </ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup> </ImportGroup>
<PropertyGroup Label="UserMacros" /> <PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<IncludePath>$(ProjectDir)sqlite;$(ProjectDir);$(IncludePath)</IncludePath> <IncludePath>$(SolutionDir)lib\tinyxml2;$(SolutionDir)lib\elfio;$(SolutionDir)lib\assimp\include;$(SolutionDir)lib\stb;$(ProjectDir);$(IncludePath)</IncludePath>
<LibraryPath>$(ProjectDir)Libs;$(LibraryPath)</LibraryPath> <LibraryPath>$(SolutionDir)lib\assimp-built;$(LibraryPath)</LibraryPath>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<IncludePath>$(IncludePath)</IncludePath> <IncludePath>$(IncludePath)</IncludePath>
</PropertyGroup> </PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile> <ClCompile>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard> <LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile> </ClCompile>
<Link> <Link>
<Profile>true</Profile> <Profile>true</Profile>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile> <ClCompile>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard> <LanguageStandard>stdcpp17</LanguageStandard>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING;USE_ASSIMP;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING;USE_ASSIMP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
</ClCompile> </ClCompile>
<Link> <Link>
<Profile>true</Profile> <Profile>true</Profile>
<AdditionalDependencies>assimp-vc142-mt.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>assimp-vc142-mt.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile> <ClCompile>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization> <Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions> <IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
</ClCompile> </ClCompile>
<Link> <Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile> <ClCompile>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization> <Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions> <IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpplatest</LanguageStandard> <LanguageStandard>stdcpplatest</LanguageStandard>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile> </ClCompile>
<Link> <Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="Globals.cpp" /> <ClCompile Include="..\lib\tinyxml2\tinyxml2.cpp" />
<ClCompile Include="HighLevel\HLAnimationIntermediette.cpp" /> <ClCompile Include="Globals.cpp" />
<ClCompile Include="HighLevel\HLModelIntermediette.cpp" /> <ClCompile Include="HighLevel\HLAnimationIntermediette.cpp" />
<ClCompile Include="HighLevel\HLTexture.cpp" /> <ClCompile Include="HighLevel\HLModelIntermediette.cpp" />
<ClCompile Include="Main.cpp" /> <ClCompile Include="HighLevel\HLTexture.cpp" />
<ClCompile Include="Overlays\ZOverlay.cpp" /> <ClCompile Include="Main.cpp" />
<ClCompile Include="tinyxml2.cpp" /> <ClCompile Include="Overlays\ZOverlay.cpp" />
<ClCompile Include="ZAnimation.cpp" /> <ClCompile Include="ZScalar.cpp" />
<ClCompile Include="ZBlob.cpp" /> <ClCompile Include="ZAnimation.cpp" />
<ClCompile Include="ZCollision.cpp" /> <ClCompile Include="ZBlob.cpp" />
<ClCompile Include="ZCutscene.cpp" /> <ClCompile Include="ZCollision.cpp" />
<ClCompile Include="ZDisplayList.cpp" /> <ClCompile Include="ZCutscene.cpp" />
<ClCompile Include="ZFile.cpp" /> <ClCompile Include="ZDisplayList.cpp" />
<ClCompile Include="ZSkeleton.cpp" /> <ClCompile Include="ZFile.cpp" />
<ClCompile Include="ZResource.cpp" /> <ClCompile Include="ZSkeleton.cpp" />
<ClCompile Include="ZRoom\Commands\EndMarker.cpp" /> <ClCompile Include="ZResource.cpp" />
<ClCompile Include="ZRoom\Commands\SetActorList.cpp" /> <ClCompile Include="ZRoom\Commands\EndMarker.cpp" />
<ClCompile Include="ZRoom\Commands\SetAlternateHeaders.cpp" /> <ClCompile Include="ZRoom\Commands\SetActorList.cpp" />
<ClCompile Include="ZRoom\Commands\SetCameraSettings.cpp" /> <ClCompile Include="ZRoom\Commands\SetAlternateHeaders.cpp" />
<ClCompile Include="ZRoom\Commands\SetCollisionHeader.cpp" /> <ClCompile Include="ZRoom\Commands\SetCameraSettings.cpp" />
<ClCompile Include="ZRoom\Commands\SetCutscenes.cpp" /> <ClCompile Include="ZRoom\Commands\SetCollisionHeader.cpp" />
<ClCompile Include="ZRoom\Commands\SetEchoSettings.cpp" /> <ClCompile Include="ZRoom\Commands\SetCutscenes.cpp" />
<ClCompile Include="ZRoom\Commands\SetEntranceList.cpp" /> <ClCompile Include="ZRoom\Commands\SetEchoSettings.cpp" />
<ClCompile Include="ZRoom\Commands\SetExitList.cpp" /> <ClCompile Include="ZRoom\Commands\SetEntranceList.cpp" />
<ClCompile Include="ZRoom\Commands\SetLightingSettings.cpp" /> <ClCompile Include="ZRoom\Commands\SetExitList.cpp" />
<ClCompile Include="ZRoom\Commands\SetLightList.cpp" /> <ClCompile Include="ZRoom\Commands\SetLightingSettings.cpp" />
<ClCompile Include="ZRoom\Commands\SetMesh.cpp" /> <ClCompile Include="ZRoom\Commands\SetLightList.cpp" />
<ClCompile Include="ZRoom\Commands\SetObjectList.cpp" /> <ClCompile Include="ZRoom\Commands\SetMesh.cpp" />
<ClCompile Include="ZRoom\Commands\SetPathways.cpp" /> <ClCompile Include="ZRoom\Commands\SetObjectList.cpp" />
<ClCompile Include="ZRoom\Commands\SetRoomBehavior.cpp" /> <ClCompile Include="ZRoom\Commands\SetPathways.cpp" />
<ClCompile Include="ZRoom\Commands\SetRoomList.cpp" /> <ClCompile Include="ZRoom\Commands\SetRoomBehavior.cpp" />
<ClCompile Include="ZRoom\Commands\SetSkyboxModifier.cpp" /> <ClCompile Include="ZRoom\Commands\SetRoomList.cpp" />
<ClCompile Include="ZRoom\Commands\SetSkyboxSettings.cpp" /> <ClCompile Include="ZRoom\Commands\SetSkyboxModifier.cpp" />
<ClCompile Include="ZRoom\Commands\SetSoundSettings.cpp" /> <ClCompile Include="ZRoom\Commands\SetSkyboxSettings.cpp" />
<ClCompile Include="ZRoom\Commands\SetSpecialObjects.cpp" /> <ClCompile Include="ZRoom\Commands\SetSoundSettings.cpp" />
<ClCompile Include="ZRoom\Commands\SetStartPositionList.cpp" /> <ClCompile Include="ZRoom\Commands\SetSpecialObjects.cpp" />
<ClCompile Include="ZRoom\Commands\SetTimeSettings.cpp" /> <ClCompile Include="ZRoom\Commands\SetStartPositionList.cpp" />
<ClCompile Include="ZRoom\Commands\SetTransitionActorList.cpp" /> <ClCompile Include="ZRoom\Commands\SetTimeSettings.cpp" />
<ClCompile Include="ZRoom\Commands\SetWind.cpp" /> <ClCompile Include="ZRoom\Commands\SetTransitionActorList.cpp" />
<ClCompile Include="ZRoom\Commands\Unused09.cpp" /> <ClCompile Include="ZRoom\Commands\SetWind.cpp" />
<ClCompile Include="ZRoom\Commands\ZRoomCommandUnk.cpp" /> <ClCompile Include="ZRoom\Commands\Unused09.cpp" />
<ClCompile Include="ZRoom\ZRoom.cpp" /> <ClCompile Include="ZRoom\Commands\ZRoomCommandUnk.cpp" />
<ClCompile Include="ZRoom\ZRoomCommand.cpp" /> <ClCompile Include="ZRoom\ZRoom.cpp" />
<ClCompile Include="ZTexture.cpp" /> <ClCompile Include="ZRoom\ZRoomCommand.cpp" />
</ItemGroup> <ClCompile Include="ZTexture.cpp" />
<ItemGroup> <ClCompile Include="ZVector.cpp" />
<ClInclude Include="BitConverter.h" /> </ItemGroup>
<ClInclude Include="Directory.h" /> <ItemGroup>
<ClInclude Include="elfio\elfio.hpp" /> <ClInclude Include="..\lib\elfio\elfio\elfio.hpp" />
<ClInclude Include="elfio\elfio_dump.hpp" /> <ClInclude Include="..\lib\elfio\elfio\elfio_dump.hpp" />
<ClInclude Include="elfio\elfio_dynamic.hpp" /> <ClInclude Include="..\lib\elfio\elfio\elfio_dynamic.hpp" />
<ClInclude Include="elfio\elfio_header.hpp" /> <ClInclude Include="..\lib\elfio\elfio\elfio_header.hpp" />
<ClInclude Include="elfio\elfio_note.hpp" /> <ClInclude Include="..\lib\elfio\elfio\elfio_note.hpp" />
<ClInclude Include="elfio\elfio_relocation.hpp" /> <ClInclude Include="..\lib\elfio\elfio\elfio_relocation.hpp" />
<ClInclude Include="elfio\elfio_section.hpp" /> <ClInclude Include="..\lib\elfio\elfio\elfio_section.hpp" />
<ClInclude Include="elfio\elfio_segment.hpp" /> <ClInclude Include="..\lib\elfio\elfio\elfio_segment.hpp" />
<ClInclude Include="elfio\elfio_strings.hpp" /> <ClInclude Include="..\lib\elfio\elfio\elfio_strings.hpp" />
<ClInclude Include="elfio\elfio_symbols.hpp" /> <ClInclude Include="..\lib\elfio\elfio\elfio_symbols.hpp" />
<ClInclude Include="elfio\elfio_utils.hpp" /> <ClInclude Include="..\lib\elfio\elfio\elfio_utils.hpp" />
<ClInclude Include="elfio\elf_types.hpp" /> <ClInclude Include="..\lib\elfio\elfio\elf_types.hpp" />
<ClInclude Include="File.h" /> <ClInclude Include="..\lib\json\include\nlohmann\json.hpp" />
<ClInclude Include="Globals.h" /> <ClInclude Include="..\lib\stb\stb_image.h" />
<ClInclude Include="HighLevel\HLAnimation.h" /> <ClInclude Include="..\lib\stb\stb_image_write.h" />
<ClInclude Include="HighLevel\HLAnimationIntermediette.h" /> <ClInclude Include="..\lib\stb\tinyxml2.h" />
<ClInclude Include="HighLevel\HLFileIntermediette.h" /> <ClInclude Include="..\lib\tinygtlf\tiny_gltf.h" />
<ClInclude Include="HighLevel\HLModelIntermediette.h" /> <ClInclude Include="BitConverter.h" />
<ClInclude Include="HighLevel\HLTexture.h" /> <ClInclude Include="Directory.h" />
<ClInclude Include="json.hpp" /> <ClInclude Include="File.h" />
<ClInclude Include="OpenFBX\miniz.h" /> <ClInclude Include="Globals.h" />
<ClInclude Include="OpenFBX\ofbx.h" /> <ClInclude Include="HighLevel\HLAnimation.h" />
<ClInclude Include="Overlays\ZOverlay.h" /> <ClInclude Include="HighLevel\HLAnimationIntermediette.h" />
<ClInclude Include="Path.h" /> <ClInclude Include="HighLevel\HLFileIntermediette.h" />
<ClInclude Include="sqlite_orm.h" /> <ClInclude Include="HighLevel\HLModelIntermediette.h" />
<ClInclude Include="stb_image.h" /> <ClInclude Include="HighLevel\HLTexture.h" />
<ClInclude Include="stb_image_write.h" /> <ClInclude Include="Overlays\ZOverlay.h" />
<ClInclude Include="StringHelper.h" /> <ClInclude Include="Path.h" />
<ClInclude Include="tinyxml2.h" /> <ClInclude Include="StringHelper.h" />
<ClInclude Include="tiny_gltf.h" /> <ClInclude Include="Vec3s.h" />
<ClInclude Include="Vec3s.h" /> <ClInclude Include="ZAnimation.h" />
<ClInclude Include="ZAnimation.h" /> <ClInclude Include="ZBlob.h" />
<ClInclude Include="ZBlob.h" /> <ClInclude Include="ZCollision.h" />
<ClInclude Include="ZCollision.h" /> <ClInclude Include="ZCutscene.h" />
<ClInclude Include="ZCutscene.h" /> <ClInclude Include="ZDisplayList.h" />
<ClInclude Include="ZDisplayList.h" /> <ClInclude Include="ZFile.h" />
<ClInclude Include="ZFile.h" /> <ClInclude Include="ZScalar.h" />
<ClInclude Include="ZSkeleton.h" /> <ClInclude Include="ZSkeleton.h" />
<ClInclude Include="ZResource.h" /> <ClInclude Include="ZResource.h" />
<ClInclude Include="ZRoom\ActorList.h" /> <ClInclude Include="ZRoom\ActorList.h" />
<ClInclude Include="ZRoom\Commands\EndMarker.h" /> <ClInclude Include="ZRoom\Commands\EndMarker.h" />
<ClInclude Include="ZRoom\Commands\SetActorList.h" /> <ClInclude Include="ZRoom\Commands\SetActorList.h" />
<ClInclude Include="ZRoom\Commands\SetAlternateHeaders.h" /> <ClInclude Include="ZRoom\Commands\SetAlternateHeaders.h" />
<ClInclude Include="ZRoom\Commands\SetCameraSettings.h" /> <ClInclude Include="ZRoom\Commands\SetCameraSettings.h" />
<ClInclude Include="ZRoom\Commands\SetCollisionHeader.h" /> <ClInclude Include="ZRoom\Commands\SetCollisionHeader.h" />
<ClInclude Include="ZRoom\Commands\SetCutscenes.h" /> <ClInclude Include="ZRoom\Commands\SetCutscenes.h" />
<ClInclude Include="ZRoom\Commands\SetEchoSettings.h" /> <ClInclude Include="ZRoom\Commands\SetEchoSettings.h" />
<ClInclude Include="ZRoom\Commands\SetEntranceList.h" /> <ClInclude Include="ZRoom\Commands\SetEntranceList.h" />
<ClInclude Include="ZRoom\Commands\SetExitList.h" /> <ClInclude Include="ZRoom\Commands\SetExitList.h" />
<ClInclude Include="ZRoom\Commands\SetLightingSettings.h" /> <ClInclude Include="ZRoom\Commands\SetLightingSettings.h" />
<ClInclude Include="ZRoom\Commands\SetLightList.h" /> <ClInclude Include="ZRoom\Commands\SetLightList.h" />
<ClInclude Include="ZRoom\Commands\SetMesh.h" /> <ClInclude Include="ZRoom\Commands\SetMesh.h" />
<ClInclude Include="ZRoom\Commands\SetObjectList.h" /> <ClInclude Include="ZRoom\Commands\SetObjectList.h" />
<ClInclude Include="ZRoom\Commands\SetPathways.h" /> <ClInclude Include="ZRoom\Commands\SetPathways.h" />
<ClInclude Include="ZRoom\Commands\SetRoomBehavior.h" /> <ClInclude Include="ZRoom\Commands\SetRoomBehavior.h" />
<ClInclude Include="ZRoom\Commands\SetRoomList.h" /> <ClInclude Include="ZRoom\Commands\SetRoomList.h" />
<ClInclude Include="ZRoom\Commands\SetSkyboxModifier.h" /> <ClInclude Include="ZRoom\Commands\SetSkyboxModifier.h" />
<ClInclude Include="ZRoom\Commands\SetSkyboxSettings.h" /> <ClInclude Include="ZRoom\Commands\SetSkyboxSettings.h" />
<ClInclude Include="ZRoom\Commands\SetSoundSettings.h" /> <ClInclude Include="ZRoom\Commands\SetSoundSettings.h" />
<ClInclude Include="ZRoom\Commands\SetSpecialObjects.h" /> <ClInclude Include="ZRoom\Commands\SetSpecialObjects.h" />
<ClInclude Include="ZRoom\Commands\SetStartPositionList.h" /> <ClInclude Include="ZRoom\Commands\SetStartPositionList.h" />
<ClInclude Include="ZRoom\Commands\SetTimeSettings.h" /> <ClInclude Include="ZRoom\Commands\SetTimeSettings.h" />
<ClInclude Include="ZRoom\Commands\SetTransitionActorList.h" /> <ClInclude Include="ZRoom\Commands\SetTransitionActorList.h" />
<ClInclude Include="ZRoom\Commands\SetWind.h" /> <ClInclude Include="ZRoom\Commands\SetWind.h" />
<ClInclude Include="ZRoom\Commands\Unused09.h" /> <ClInclude Include="ZRoom\Commands\Unused09.h" />
<ClInclude Include="ZRoom\Commands\ZRoomCommandUnk.h" /> <ClInclude Include="ZRoom\Commands\ZRoomCommandUnk.h" />
<ClInclude Include="ZRoom\ObjectList.h" /> <ClInclude Include="ZRoom\ObjectList.h" />
<ClInclude Include="ZRoom\ZRoom.h" /> <ClInclude Include="ZRoom\ZRoom.h" />
<ClInclude Include="ZRoom\ZRoomCommand.h" /> <ClInclude Include="ZRoom\ZRoomCommand.h" />
<ClInclude Include="ZTexture.h" /> <ClInclude Include="ZTexture.h" />
</ItemGroup> <ClInclude Include="ZVector.h" />
<ItemGroup> </ItemGroup>
<Text Include="..\SymbolMap_OoTMqDbg.txt"> <ItemGroup>
<DeploymentContent>true</DeploymentContent> <Text Include="..\SymbolMap_OoTMqDbg.txt">
</Text> <DeploymentContent>true</DeploymentContent>
</ItemGroup> </Text>
<ItemGroup> </ItemGroup>
<CopyFileToFolders Include="Libs\assimp-vc142-mt.dll"> <ItemGroup>
<FileType>Document</FileType> <CopyFileToFolders Include="..\lib\assimp-built\assimp-vc142-mt.dll">
</CopyFileToFolders> <FileType>Document</FileType>
</ItemGroup> </CopyFileToFolders>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> </ItemGroup>
<ImportGroup Label="ExtensionTargets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets" />
</Project> </Project>

View file

@ -13,9 +13,6 @@
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter> </Filter>
<Filter Include="Header Files\OpenFBX">
<UniqueIdentifier>{c5d86b0a-fff0-47cf-83af-807dd8267ad1}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\Libraries"> <Filter Include="Source Files\Libraries">
<UniqueIdentifier>{02148456-5068-4613-8478-f10addc58e70}</UniqueIdentifier> <UniqueIdentifier>{02148456-5068-4613-8478-f10addc58e70}</UniqueIdentifier>
</Filter> </Filter>
@ -144,7 +141,7 @@
<ClCompile Include="ZRoom\Commands\SetCutscenes.cpp"> <ClCompile Include="ZRoom\Commands\SetCutscenes.cpp">
<Filter>Source Files\Z64\ZRoom\Commands</Filter> <Filter>Source Files\Z64\ZRoom\Commands</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="tinyxml2.cpp"> <ClCompile Include="..\lib\tinyxml2\tinyxml2.cpp">
<Filter>Source Files\Libraries</Filter> <Filter>Source Files\Libraries</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="ZAnimation.cpp"> <ClCompile Include="ZAnimation.cpp">
@ -192,6 +189,12 @@
<ClCompile Include="ZCollision.cpp"> <ClCompile Include="ZCollision.cpp">
<Filter>Source Files\Z64</Filter> <Filter>Source Files\Z64</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="ZScalar.cpp">
<Filter>Source Files\Z64</Filter>
</ClCompile>
<ClCompile Include="ZVector.cpp">
<Filter>Source Files\Z64</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="Path.h"> <ClInclude Include="Path.h">
@ -248,40 +251,40 @@
<ClInclude Include="ZRoom\Commands\SetStartPositionList.h"> <ClInclude Include="ZRoom\Commands\SetStartPositionList.h">
<Filter>Header Files\Z64\ZRoom\Commands</Filter> <Filter>Header Files\Z64\ZRoom\Commands</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="elfio\elf_types.hpp"> <ClInclude Include="..\lib\elfio\elfio\elf_types.hpp">
<Filter>Header Files\Libraries\elfio</Filter> <Filter>Header Files\Libraries\elfio</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="elfio\elfio.hpp"> <ClInclude Include="..\lib\elfio\elfio\elfio.hpp">
<Filter>Header Files\Libraries\elfio</Filter> <Filter>Header Files\Libraries\elfio</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="elfio\elfio_dump.hpp"> <ClInclude Include="..\lib\elfio\elfio\elfio_dump.hpp">
<Filter>Header Files\Libraries\elfio</Filter> <Filter>Header Files\Libraries\elfio</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="elfio\elfio_dynamic.hpp"> <ClInclude Include="..\lib\elfio\elfio\elfio_dynamic.hpp">
<Filter>Header Files\Libraries\elfio</Filter> <Filter>Header Files\Libraries\elfio</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="elfio\elfio_header.hpp"> <ClInclude Include="..\lib\elfio\elfio\elfio_header.hpp">
<Filter>Header Files\Libraries\elfio</Filter> <Filter>Header Files\Libraries\elfio</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="elfio\elfio_note.hpp"> <ClInclude Include="..\lib\elfio\elfio\elfio_note.hpp">
<Filter>Header Files\Libraries\elfio</Filter> <Filter>Header Files\Libraries\elfio</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="elfio\elfio_relocation.hpp"> <ClInclude Include="..\lib\elfio\elfio\elfio_relocation.hpp">
<Filter>Header Files\Libraries\elfio</Filter> <Filter>Header Files\Libraries\elfio</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="elfio\elfio_section.hpp"> <ClInclude Include="..\lib\elfio\elfio\elfio_section.hpp">
<Filter>Header Files\Libraries\elfio</Filter> <Filter>Header Files\Libraries\elfio</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="elfio\elfio_segment.hpp"> <ClInclude Include="..\lib\elfio\elfio\elfio_segment.hpp">
<Filter>Header Files\Libraries\elfio</Filter> <Filter>Header Files\Libraries\elfio</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="elfio\elfio_strings.hpp"> <ClInclude Include="..\lib\elfio\elfio\elfio_strings.hpp">
<Filter>Header Files\Libraries\elfio</Filter> <Filter>Header Files\Libraries\elfio</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="elfio\elfio_symbols.hpp"> <ClInclude Include="..\lib\elfio\elfio\elfio_symbols.hpp">
<Filter>Header Files\Libraries\elfio</Filter> <Filter>Header Files\Libraries\elfio</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="elfio\elfio_utils.hpp"> <ClInclude Include="..\lib\elfio\elfio\elfio_utils.hpp">
<Filter>Header Files\Libraries\elfio</Filter> <Filter>Header Files\Libraries\elfio</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="StringHelper.h"> <ClInclude Include="StringHelper.h">
@ -335,25 +338,16 @@
<ClInclude Include="Vec3s.h"> <ClInclude Include="Vec3s.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="OpenFBX\ofbx.h"> <ClInclude Include="..\lib\json\include\nlohmann\json.hpp">
<Filter>Header Files\OpenFBX</Filter>
</ClInclude>
<ClInclude Include="OpenFBX\miniz.h">
<Filter>Header Files\OpenFBX</Filter>
</ClInclude>
<ClInclude Include="json.hpp">
<Filter>Header Files\Libraries</Filter> <Filter>Header Files\Libraries</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="stb_image.h"> <ClInclude Include="..\lib\stb\stb_image.h">
<Filter>Header Files\Libraries</Filter> <Filter>Header Files\Libraries</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="stb_image_write.h"> <ClInclude Include="..\lib\stb\stb_image_write.h">
<Filter>Header Files\Libraries</Filter> <Filter>Header Files\Libraries</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="tiny_gltf.h"> <ClInclude Include="..\lib\tinygtlf\tiny_gltf.h">
<Filter>Header Files\Libraries</Filter>
</ClInclude>
<ClInclude Include="tinyxml2.h">
<Filter>Header Files\Libraries</Filter> <Filter>Header Files\Libraries</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="Overlays\ZOverlay.h"> <ClInclude Include="Overlays\ZOverlay.h">
@ -404,12 +398,18 @@
<ClInclude Include="ZRoom\Commands\ZRoomCommandUnk.h"> <ClInclude Include="ZRoom\Commands\ZRoomCommandUnk.h">
<Filter>Header Files\Z64\ZRoom\Commands</Filter> <Filter>Header Files\Z64\ZRoom\Commands</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="sqlite_orm.h">
<Filter>Header Files\Libraries</Filter>
</ClInclude>
<ClInclude Include="ZCollision.h"> <ClInclude Include="ZCollision.h">
<Filter>Header Files\Z64</Filter> <Filter>Header Files\Z64</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="ZScalar.h">
<Filter>Header Files\Z64</Filter>
</ClInclude>
<ClInclude Include="ZVector.h">
<Filter>Header Files\Z64</Filter>
</ClInclude>
<ClInclude Include="..\lib\stb\tinyxml2.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Text Include="..\SymbolMap_OoTMqDbg.txt"> <Text Include="..\SymbolMap_OoTMqDbg.txt">
@ -417,7 +417,7 @@
</Text> </Text>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<CopyFileToFolders Include="Libs\assimp-vc142-mt.dll"> <CopyFileToFolders Include="..\lib\assimp-built\assimp-vc142-mt.dll">
<Filter>Resource Files</Filter> <Filter>Resource Files</Filter>
</CopyFileToFolders> </CopyFileToFolders>
</ItemGroup> </ItemGroup>

View file

@ -1,4 +1,5 @@
#include "ZAnimation.h" #include "ZAnimation.h"
#include <utility>
#include "ZFile.h" #include "ZFile.h"
#include "BitConverter.h" #include "BitConverter.h"
#include "StringHelper.h" #include "StringHelper.h"
@ -15,13 +16,13 @@ ZAnimation::ZAnimation() : ZResource()
void ZAnimation::ParseRawData() void ZAnimation::ParseRawData()
{ {
uint8_t* data = rawData.data(); const uint8_t* data = rawData.data();
// Read the header // Read the header
frameCount = BitConverter::ToInt16BE(data, rawDataIndex + 0); frameCount = BitConverter::ToInt16BE(data, rawDataIndex + 0);
} }
void ZAnimation::Save(string outFolder) void ZAnimation::Save(const std::string& outFolder)
{ {
if (Globals::Instance->testMode) if (Globals::Instance->testMode)
{ {
@ -40,7 +41,7 @@ void ZAnimation::ParseXML(tinyxml2::XMLElement* reader)
name = reader->Attribute("Name"); name = reader->Attribute("Name");
} }
string ZAnimation::GetSourceOutputCode(string prefix) string ZAnimation::GetSourceOutputCode(const std::string& prefix)
{ {
return ""; return "";
} }
@ -52,7 +53,7 @@ ZNormalAnimation::ZNormalAnimation() : ZAnimation()
limit = 0; limit = 0;
} }
std::string ZNormalAnimation::GetSourceOutputCode(std::string prefix) std::string ZNormalAnimation::GetSourceOutputCode(const std::string& prefix)
{ {
if (parent != nullptr) if (parent != nullptr)
{ {
@ -61,7 +62,7 @@ std::string ZNormalAnimation::GetSourceOutputCode(std::string prefix)
string headerStr = StringHelper::Sprintf("{ %i }, %sFrameData, %sJointIndices, %i", string headerStr = StringHelper::Sprintf("{ %i }, %sFrameData, %sJointIndices, %i",
frameCount, defaultPrefix.c_str(), defaultPrefix.c_str(), limit); frameCount, defaultPrefix.c_str(), defaultPrefix.c_str(), limit);
parent->declarations[rawDataIndex] = new Declaration(DeclarationAlignment::None, 16, "AnimationHeader", StringHelper::Sprintf("%s", name.c_str()), false, headerStr); parent->AddDeclaration(rawDataIndex, DeclarationAlignment::None, 16, "AnimationHeader", StringHelper::Sprintf("%s", name.c_str()), headerStr);
string indicesStr = ""; string indicesStr = "";
string valuesStr = " "; string valuesStr = " ";
@ -99,10 +100,10 @@ int ZNormalAnimation::GetRawDataSize()
return 16; return 16;
} }
ZNormalAnimation* ZNormalAnimation::ExtractFromXML(tinyxml2::XMLElement* reader, std::vector<uint8_t> nRawData, int rawDataIndex, std::string nRelPath) ZNormalAnimation* ZNormalAnimation::ExtractFromXML(tinyxml2::XMLElement* reader, std::vector<uint8_t> nRawData, int rawDataIndex, const std::string& nRelPath)
{ {
ZNormalAnimation* anim = new ZNormalAnimation(); ZNormalAnimation* anim = new ZNormalAnimation();
anim->rawData = nRawData; anim->rawData = std::move(nRawData);
anim->rawDataIndex = rawDataIndex; anim->rawDataIndex = rawDataIndex;
anim->ParseXML(reader); anim->ParseXML(reader);
anim->ParseRawData(); anim->ParseRawData();
@ -114,7 +115,7 @@ void ZNormalAnimation::ParseRawData()
{ {
ZAnimation::ParseRawData(); ZAnimation::ParseRawData();
uint8_t* data = rawData.data(); const uint8_t* data = rawData.data();
rotationValuesSeg = BitConverter::ToInt32BE(data, rawDataIndex + 4) & 0x00FFFFFF; rotationValuesSeg = BitConverter::ToInt32BE(data, rawDataIndex + 4) & 0x00FFFFFF;
rotationIndicesSeg = BitConverter::ToInt32BE(data, rawDataIndex + 8) & 0x00FFFFFF; rotationIndicesSeg = BitConverter::ToInt32BE(data, rawDataIndex + 8) & 0x00FFFFFF;
@ -144,14 +145,14 @@ ZLinkAnimation::ZLinkAnimation() : ZAnimation()
segmentAddress = 0; segmentAddress = 0;
} }
std::string ZLinkAnimation::GetSourceOutputCode(std::string prefix) std::string ZLinkAnimation::GetSourceOutputCode(const std::string& prefix)
{ {
if (parent != nullptr) if (parent != nullptr)
{ {
string segSymbol = segmentAddress == 0 ? "NULL" : parent->GetDeclarationName(segmentAddress, StringHelper::Sprintf("%sSeg%06X", name.c_str(), segmentAddress)); string segSymbol = segmentAddress == 0 ? "NULL" : parent->GetDeclarationName(segmentAddress, StringHelper::Sprintf("%sSeg%06X", name.c_str(), segmentAddress));
string headerStr = StringHelper::Sprintf("{ %i }, 0x%08X", string headerStr = StringHelper::Sprintf("{ %i }, 0x%08X",
frameCount, segmentAddress); frameCount, segmentAddress);
parent->declarations[rawDataIndex] = new Declaration(DeclarationAlignment::None, 16, "LinkAnimationHeader", StringHelper::Sprintf("%s", name.c_str()), false, headerStr); parent->AddDeclaration(rawDataIndex, DeclarationAlignment::None, 16, "LinkAnimationHeader", StringHelper::Sprintf("%s", name.c_str()), headerStr);
} }
return ""; return "";
@ -162,10 +163,10 @@ int ZLinkAnimation::GetRawDataSize()
return 8; return 8;
} }
ZLinkAnimation* ZLinkAnimation::ExtractFromXML(tinyxml2::XMLElement* reader, std::vector<uint8_t> nRawData, int rawDataIndex, std::string nRelPath) ZLinkAnimation* ZLinkAnimation::ExtractFromXML(tinyxml2::XMLElement* reader, std::vector<uint8_t> nRawData, int rawDataIndex, const std::string& nRelPath)
{ {
ZLinkAnimation* anim = new ZLinkAnimation(); ZLinkAnimation* anim = new ZLinkAnimation();
anim->rawData = nRawData; anim->rawData = std::move(nRawData);
anim->rawDataIndex = rawDataIndex; anim->rawDataIndex = rawDataIndex;
anim->ParseXML(reader); anim->ParseXML(reader);
anim->ParseRawData(); anim->ParseRawData();
@ -177,7 +178,7 @@ void ZLinkAnimation::ParseRawData()
{ {
ZAnimation::ParseRawData(); ZAnimation::ParseRawData();
uint8_t* data = rawData.data(); const uint8_t* data = rawData.data();
//segmentAddress = SEG2FILESPACE(BitConverter::ToInt32BE(data, rawDataIndex + 4)); //segmentAddress = SEG2FILESPACE(BitConverter::ToInt32BE(data, rawDataIndex + 4));
segmentAddress = (BitConverter::ToInt32BE(data, rawDataIndex + 4)); segmentAddress = (BitConverter::ToInt32BE(data, rawDataIndex + 4));

View file

@ -20,14 +20,14 @@ class ZAnimation : public ZResource
public: public:
int16_t frameCount; int16_t frameCount;
ZAnimation(); ZAnimation();
std::string GetSourceOutputCode(std::string prefix); std::string GetSourceOutputCode(const std::string& prefix);
protected: protected:
virtual void ParseRawData(); virtual void ParseRawData();
void Save(std::string outFolder); void Save(const std::string& outFolder);
void ParseXML(tinyxml2::XMLElement* reader); void ParseXML(tinyxml2::XMLElement* reader);
}; };
@ -39,13 +39,13 @@ public:
uint32_t rotationValuesSeg; uint32_t rotationValuesSeg;
uint32_t rotationIndicesSeg; uint32_t rotationIndicesSeg;
int16_t limit; int16_t limit;
ZNormalAnimation(); ZNormalAnimation();
std::string GetSourceOutputCode(std::string prefix); std::string GetSourceOutputCode(const std::string& prefix);
virtual int GetRawDataSize(); virtual int GetRawDataSize();
static ZNormalAnimation* ExtractFromXML(tinyxml2::XMLElement* reader, std::vector<uint8_t> nRawData, int rawDataIndex, std::string nRelPath); static ZNormalAnimation* ExtractFromXML(tinyxml2::XMLElement* reader, std::vector<uint8_t> nRawData, int rawDataIndex, const std::string& nRelPath);
protected: protected:
virtual void ParseRawData(); virtual void ParseRawData();
@ -58,11 +58,11 @@ public:
ZLinkAnimation(); ZLinkAnimation();
std::string GetSourceOutputCode(std::string prefix); std::string GetSourceOutputCode(const std::string& prefix);
virtual int GetRawDataSize(); virtual int GetRawDataSize();
static ZLinkAnimation* ExtractFromXML(tinyxml2::XMLElement* reader, std::vector<uint8_t> nRawData, int rawDataIndex, std::string nRelPath); static ZLinkAnimation* ExtractFromXML(tinyxml2::XMLElement* reader, std::vector<uint8_t> nRawData, int rawDataIndex, const std::string& nRelPath);
protected: protected:
virtual void ParseRawData(); virtual void ParseRawData();
}; };

View file

@ -13,14 +13,14 @@ ZBlob::ZBlob() : ZResource()
} }
ZBlob::ZBlob(std::vector<uint8_t> nRawData, int nRawDataIndex, int size, std::string nName) : ZBlob() ZBlob::ZBlob(const std::vector<uint8_t>& nRawData, int nRawDataIndex, int size, std::string nName) : ZBlob()
{ {
rawDataIndex = nRawDataIndex; rawDataIndex = nRawDataIndex;
rawData = vector<uint8_t>(nRawData.data() + rawDataIndex, nRawData.data() + rawDataIndex + size); rawData = vector<uint8_t>(nRawData.data() + rawDataIndex, nRawData.data() + rawDataIndex + size);
name = nName; name = std::move(nName);
} }
ZBlob* ZBlob::ExtractFromXML(XMLElement* reader, vector<uint8_t> nRawData, int nRawDataIndex, string nRelPath) ZBlob* ZBlob::ExtractFromXML(XMLElement* reader, const vector<uint8_t>& nRawData, int nRawDataIndex, string nRelPath)
{ {
ZBlob* blob = new ZBlob(); ZBlob* blob = new ZBlob();
@ -29,12 +29,12 @@ ZBlob* ZBlob::ExtractFromXML(XMLElement* reader, vector<uint8_t> nRawData, int n
blob->ParseXML(reader); blob->ParseXML(reader);
int size = strtol(reader->Attribute("Size"), NULL, 16); int size = strtol(reader->Attribute("Size"), NULL, 16);
blob->rawData = vector<uint8_t>(nRawData.data() + blob->rawDataIndex, nRawData.data() + blob->rawDataIndex + size); blob->rawData = vector<uint8_t>(nRawData.data() + blob->rawDataIndex, nRawData.data() + blob->rawDataIndex + size);
blob->relativePath = nRelPath; blob->relativePath = std::move(nRelPath);
return blob; return blob;
} }
ZBlob* ZBlob::BuildFromXML(XMLElement* reader, string inFolder, bool readFile) ZBlob* ZBlob::BuildFromXML(XMLElement* reader, const std::string& inFolder, bool readFile)
{ {
ZBlob* blob = new ZBlob(); ZBlob* blob = new ZBlob();
@ -46,7 +46,7 @@ ZBlob* ZBlob::BuildFromXML(XMLElement* reader, string inFolder, bool readFile)
return blob; return blob;
} }
ZBlob* ZBlob::FromFile(string filePath) ZBlob* ZBlob::FromFile(const std::string& filePath)
{ {
int comp; int comp;
ZBlob* blob = new ZBlob(); ZBlob* blob = new ZBlob();
@ -56,7 +56,7 @@ ZBlob* ZBlob::FromFile(string filePath)
return blob; return blob;
} }
string ZBlob::GetSourceOutputCode(std::string prefix) string ZBlob::GetSourceOutputCode(const std::string& prefix)
{ {
sourceOutput = ""; sourceOutput = "";
//sourceOutput += StringHelper::Sprintf("u8 %s_%s[] = \n{\n", prefix.c_str(), name.c_str()); //sourceOutput += StringHelper::Sprintf("u8 %s_%s[] = \n{\n", prefix.c_str(), name.c_str());
@ -77,12 +77,12 @@ string ZBlob::GetSourceOutputCode(std::string prefix)
return sourceOutput; return sourceOutput;
} }
string ZBlob::GetSourceOutputHeader(std::string prefix) string ZBlob::GetSourceOutputHeader(const std::string& prefix)
{ {
return StringHelper::Sprintf("extern u8 %s[];\n", name.c_str()); return StringHelper::Sprintf("extern u8 %s[];\n", name.c_str());
} }
void ZBlob::Save(string outFolder) void ZBlob::Save(const std::string& outFolder)
{ {
//printf("NAME = %s\n", name.c_str()); //printf("NAME = %s\n", name.c_str());
File::WriteAllBytes(outFolder + "/" + name + ".bin", rawData); File::WriteAllBytes(outFolder + "/" + name + ".bin", rawData);

View file

@ -6,18 +6,18 @@
class ZBlob : public ZResource class ZBlob : public ZResource
{ {
public: public:
ZBlob(std::vector<uint8_t> nRawData, int rawDataIndex, int size, std::string nName); ZBlob(const std::vector<uint8_t>& nRawData, int rawDataIndex, int size, std::string nName);
static ZBlob* ExtractFromXML(tinyxml2::XMLElement* reader, std::vector<uint8_t> nRawData, int rawDataIndex, std::string nRelPath); static ZBlob* ExtractFromXML(tinyxml2::XMLElement* reader, const std::vector<uint8_t>& nRawData, int rawDataIndex, std::string nRelPath);
static ZBlob* BuildFromXML(tinyxml2::XMLElement* reader, std::string inFolder, bool readFile); static ZBlob* BuildFromXML(tinyxml2::XMLElement* reader, const std::string& inFolder, bool readFile);
static ZBlob* FromFile(std::string filePath); static ZBlob* FromFile(const std::string& filePath);
std::string GetSourceOutputCode(std::string prefix); std::string GetSourceOutputCode(const std::string& prefix);
std::string GetSourceOutputHeader(std::string prefix); std::string GetSourceOutputHeader(const std::string& prefix);
void Save(std::string outFolder); void Save(const std::string& outFolder);
bool IsExternalResource(); bool IsExternalResource();
std::string GetExternalExtension(); std::string GetExternalExtension();
ZResourceType GetResourceType(); ZResourceType GetResourceType();
private: private:
ZBlob(); ZBlob();
}; };

View file

@ -11,9 +11,9 @@ ZCollisionHeader::ZCollisionHeader()
} }
ZCollisionHeader::ZCollisionHeader(ZFile* parent, std::string prefix, std::vector<uint8_t> rawData, int rawDataIndex) ZCollisionHeader::ZCollisionHeader(ZFile* parent, const std::string& prefix, const std::vector<uint8_t>& rawData, int rawDataIndex)
{ {
uint8_t* data = rawData.data(); const uint8_t* data = rawData.data();
absMinX = BitConverter::ToInt16BE(data, rawDataIndex + 0); absMinX = BitConverter::ToInt16BE(data, rawDataIndex + 0);
absMinY = BitConverter::ToInt16BE(data, rawDataIndex + 2); absMinY = BitConverter::ToInt16BE(data, rawDataIndex + 2);
@ -53,14 +53,14 @@ ZCollisionHeader::ZCollisionHeader(ZFile* parent, std::string prefix, std::vecto
//if (highestPolyType > 0) //if (highestPolyType > 0)
{ {
for (int i = 0; i < highestPolyType + 1; i++) for (int i = 0; i < highestPolyType + 1; i++)
polygonTypes.push_back(BitConverter::ToInt64BE(data, polyTypeDefSegmentOffset + (i * 8))); polygonTypes.push_back(BitConverter::ToUInt64BE(data, polyTypeDefSegmentOffset + (i * 8)));
} }
//else //else
//{ //{
//int polyTypesSize = abs(polyTypeDefSegmentOffset - camDataSegmentOffset) / 8; //int polyTypesSize = abs(polyTypeDefSegmentOffset - camDataSegmentOffset) / 8;
//for (int i = 0; i < polyTypesSize; i++) //for (int i = 0; i < polyTypesSize; i++)
//polygonTypes.push_back(BitConverter::ToInt64BE(data, polyTypeDefSegmentOffset + (i * 8))); //polygonTypes.push_back(BitConverter::ToUInt64BE(data, polyTypeDefSegmentOffset + (i * 8)));
//} //}
if (camDataSegmentOffset != 0) if (camDataSegmentOffset != 0)
@ -82,8 +82,8 @@ ZCollisionHeader::ZCollisionHeader(ZFile* parent, std::string prefix, std::vecto
} }
if (waterBoxSegmentOffset != 0) if (waterBoxSegmentOffset != 0)
parent->declarations[waterBoxSegmentOffset] = new Declaration(DeclarationAlignment::None, 16 * waterBoxes.size(), "WaterBox", parent->AddDeclarationArray(waterBoxSegmentOffset, DeclarationAlignment::None, 16 * waterBoxes.size(), "WaterBox",
StringHelper::Sprintf("%s_waterBoxes_%08X", prefix.c_str(), waterBoxSegmentOffset), true, declaration); StringHelper::Sprintf("%s_waterBoxes_%08X", prefix.c_str(), waterBoxSegmentOffset), 0, declaration);
if (polygons.size() > 0) if (polygons.size() > 0)
{ {
@ -98,8 +98,7 @@ ZCollisionHeader::ZCollisionHeader(ZFile* parent, std::string prefix, std::vecto
} }
if (polySegmentOffset != 0) { if (polySegmentOffset != 0) {
parent->declarations[polySegmentOffset] = new Declaration(DeclarationAlignment::None, polygons.size() * 16, "RoomPoly", // TODO: Change this to CollisionPoly once the struct has been updated parent->AddDeclarationArray(polySegmentOffset, DeclarationAlignment::None, polygons.size() * 16, "CollisionPoly", StringHelper::Sprintf("%s_polygons_%08X", prefix.c_str(), polySegmentOffset), 0, declaration);
StringHelper::Sprintf("%s_polygons_%08X", prefix.c_str(), polySegmentOffset), true, declaration);
} }
} }
@ -111,8 +110,8 @@ ZCollisionHeader::ZCollisionHeader(ZFile* parent, std::string prefix, std::vecto
} }
if (polyTypeDefSegmentOffset != 0) if (polyTypeDefSegmentOffset != 0)
parent->declarations[polyTypeDefSegmentOffset] = new Declaration(DeclarationAlignment::None, polygonTypes.size() * 8, parent->AddDeclarationArray(polyTypeDefSegmentOffset, DeclarationAlignment::None, polygonTypes.size() * 8,
"u32", StringHelper::Sprintf("%s_polygonTypes_%08X", prefix.c_str(), polyTypeDefSegmentOffset), true, declaration); "u32", StringHelper::Sprintf("%s_polygonTypes_%08X", prefix.c_str(), polyTypeDefSegmentOffset), 0, declaration);
declaration = ""; declaration = "";
@ -128,8 +127,8 @@ ZCollisionHeader::ZCollisionHeader(ZFile* parent, std::string prefix, std::vecto
} }
if (vtxSegmentOffset != 0) if (vtxSegmentOffset != 0)
parent->declarations[vtxSegmentOffset] = new Declaration(DeclarationAlignment::None, vertices.size() * 6, parent->AddDeclarationArray(vtxSegmentOffset, DeclarationAlignment::None, vertices.size() * 6,
"Vec3s", StringHelper::Sprintf("%s_vtx_%08X", prefix.c_str(), vtxSegmentOffset), true, declaration); "Vec3s", StringHelper::Sprintf("%s_vtx_%08X", prefix.c_str(), vtxSegmentOffset), 0, declaration);
declaration = ""; declaration = "";
} }
@ -149,26 +148,34 @@ ZCollisionHeader::ZCollisionHeader(ZFile* parent, std::string prefix, std::vecto
prefix.c_str(), polySegmentOffset, prefix.c_str(), polyTypeDefSegmentOffset, prefix.c_str(), polySegmentOffset, prefix.c_str(), polyTypeDefSegmentOffset,
prefix.c_str(), camDataSegmentOffset, numWaterBoxes, waterBoxStr); prefix.c_str(), camDataSegmentOffset, numWaterBoxes, waterBoxStr);
/*parent->AddDeclaration(rawDataIndex, DeclarationAlignment::None, DeclarationPadding::Pad16, 44, "CollisionHeader",
StringHelper::Sprintf("%s_collisionHeader_%08X", prefix.c_str(), rawDataIndex), declaration);*/
parent->AddDeclaration(rawDataIndex, DeclarationAlignment::None, DeclarationPadding::Pad16, 44, "CollisionHeader", parent->AddDeclaration(rawDataIndex, DeclarationAlignment::None, DeclarationPadding::Pad16, 44, "CollisionHeader",
StringHelper::Sprintf("%s", prefix.c_str(), rawDataIndex), declaration); StringHelper::Sprintf("%s", prefix.c_str(), rawDataIndex), declaration);
} }
ZCollisionHeader::~ZCollisionHeader()
{
for (VertexEntry* vtx : vertices)
delete vtx;
for (PolygonEntry* poly : polygons)
delete poly;
for (WaterBoxHeader* waterBox : waterBoxes)
delete waterBox;
}
ZCollisionHeader* ZCollisionHeader::ExtractFromXML(tinyxml2::XMLElement* reader, vector<uint8_t> nRawData, int rawDataIndex) ZCollisionHeader* ZCollisionHeader::ExtractFromXML(tinyxml2::XMLElement* reader, vector<uint8_t> nRawData, int rawDataIndex)
{ {
ZCollisionHeader* col = new ZCollisionHeader(); ZCollisionHeader* col = new ZCollisionHeader();
return col; return col;
} }
PolygonEntry::PolygonEntry(std::vector<uint8_t> rawData, int rawDataIndex) PolygonEntry::PolygonEntry(const std::vector<uint8_t>& rawData, int rawDataIndex)
{ {
uint8_t* data = rawData.data(); const uint8_t* data = rawData.data();
type = BitConverter::ToInt16BE(data, rawDataIndex + 0); type = BitConverter::ToInt16BE(data, rawDataIndex + 0);
vtxA = BitConverter::ToInt16BE(data, rawDataIndex + 2); vtxA = BitConverter::ToInt16BE(data, rawDataIndex + 2);
@ -180,18 +187,18 @@ PolygonEntry::PolygonEntry(std::vector<uint8_t> rawData, int rawDataIndex)
d = BitConverter::ToInt16BE(data, rawDataIndex + 14); d = BitConverter::ToInt16BE(data, rawDataIndex + 14);
} }
VertexEntry::VertexEntry(std::vector<uint8_t> rawData, int rawDataIndex) VertexEntry::VertexEntry(const std::vector<uint8_t>& rawData, int rawDataIndex)
{ {
uint8_t* data = rawData.data(); const uint8_t* data = rawData.data();
x = BitConverter::ToInt16BE(data, rawDataIndex + 0); x = BitConverter::ToInt16BE(data, rawDataIndex + 0);
y = BitConverter::ToInt16BE(data, rawDataIndex + 2); y = BitConverter::ToInt16BE(data, rawDataIndex + 2);
z = BitConverter::ToInt16BE(data, rawDataIndex + 4); z = BitConverter::ToInt16BE(data, rawDataIndex + 4);
} }
WaterBoxHeader::WaterBoxHeader(std::vector<uint8_t> rawData, int rawDataIndex) WaterBoxHeader::WaterBoxHeader(const std::vector<uint8_t>& rawData, int rawDataIndex)
{ {
uint8_t* data = rawData.data(); const uint8_t* data = rawData.data();
xMin = BitConverter::ToInt16BE(data, rawDataIndex + 0); xMin = BitConverter::ToInt16BE(data, rawDataIndex + 0);
ySurface = BitConverter::ToInt16BE(data, rawDataIndex + 2); ySurface = BitConverter::ToInt16BE(data, rawDataIndex + 2);
@ -201,7 +208,7 @@ WaterBoxHeader::WaterBoxHeader(std::vector<uint8_t> rawData, int rawDataIndex)
properties = BitConverter::ToInt32BE(data, rawDataIndex + 12); properties = BitConverter::ToInt32BE(data, rawDataIndex + 12);
} }
CameraDataList::CameraDataList(ZFile* parent, std::string prefix, std::vector<uint8_t> rawData, int rawDataIndex, int polyTypeDefSegmentOffset, int polygonTypesCnt) CameraDataList::CameraDataList(ZFile* parent, const std::string& prefix, const std::vector<uint8_t>& rawData, int rawDataIndex, int polyTypeDefSegmentOffset, int polygonTypesCnt)
{ {
string declaration = ""; string declaration = "";
@ -267,9 +274,9 @@ CameraDataList::CameraDataList(ZFile* parent, std::string prefix, std::vector<ui
} }
} }
CameraPositionData::CameraPositionData(std::vector<uint8_t> rawData, int rawDataIndex) CameraPositionData::CameraPositionData(const std::vector<uint8_t>& rawData, int rawDataIndex)
{ {
x = BitConverter::ToInt16BE(rawData, rawDataIndex + 0); x = BitConverter::ToInt16BE(rawData, rawDataIndex + 0);
y = BitConverter::ToInt16BE(rawData, rawDataIndex + 2); y = BitConverter::ToInt16BE(rawData, rawDataIndex + 2);
z = BitConverter::ToInt16BE(rawData, rawDataIndex + 4); z = BitConverter::ToInt16BE(rawData, rawDataIndex + 4);
} }

View file

@ -11,7 +11,7 @@ public:
int16_t vtxA, vtxB, vtxC; int16_t vtxA, vtxB, vtxC;
int16_t a, b, c, d; int16_t a, b, c, d;
PolygonEntry(std::vector<uint8_t> rawData, int rawDataIndex); PolygonEntry(const std::vector<uint8_t>& rawData, int rawDataIndex);
}; };
class VertexEntry class VertexEntry
@ -19,7 +19,7 @@ class VertexEntry
public: public:
int16_t x, y, z; int16_t x, y, z;
VertexEntry(std::vector<uint8_t> rawData, int rawDataIndex); VertexEntry(const std::vector<uint8_t>& rawData, int rawDataIndex);
}; };
class WaterBoxHeader class WaterBoxHeader
@ -33,7 +33,7 @@ public:
int16_t pad; int16_t pad;
int32_t properties; int32_t properties;
WaterBoxHeader(std::vector<uint8_t> rawData, int rawDataIndex); WaterBoxHeader(const std::vector<uint8_t>& rawData, int rawDataIndex);
}; };
class CameraPositionData class CameraPositionData
@ -41,7 +41,7 @@ class CameraPositionData
public: public:
int16_t x, y, z; int16_t x, y, z;
CameraPositionData(std::vector<uint8_t> rawData, int rawDataIndex); CameraPositionData(const std::vector<uint8_t>& rawData, int rawDataIndex);
}; };
class CameraDataEntry class CameraDataEntry
@ -58,7 +58,7 @@ public:
std::vector<CameraDataEntry*> entries; std::vector<CameraDataEntry*> entries;
std::vector<CameraPositionData*> cameraPositionData; std::vector<CameraPositionData*> cameraPositionData;
CameraDataList(ZFile* parent, std::string prefix, std::vector<uint8_t> rawData, int rawDataIndex, int polyTypeDefSegmentOffset, int polygonTypesCnt); CameraDataList(ZFile* parent, const std::string& prefix, const std::vector<uint8_t>& rawData, int rawDataIndex, int polyTypeDefSegmentOffset, int polygonTypesCnt);
}; };
class ZCollisionHeader : public ZResource class ZCollisionHeader : public ZResource
@ -84,7 +84,8 @@ public:
ZCollisionHeader(); ZCollisionHeader();
//ZCollisionHeader(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex); //ZCollisionHeader(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex);
ZCollisionHeader(ZFile* parent, std::string prefix, std::vector<uint8_t> rawData, int rawDataIndex); ZCollisionHeader(ZFile* parent, const std::string& prefix, const std::vector<uint8_t>& rawData, int rawDataIndex);
~ZCollisionHeader();
static ZCollisionHeader* ExtractFromXML(tinyxml2::XMLElement* reader, std::vector<uint8_t> nRawData, int rawDataIndex); static ZCollisionHeader* ExtractFromXML(tinyxml2::XMLElement* reader, std::vector<uint8_t> nRawData, int rawDataIndex);
}; };

View file

@ -6,7 +6,7 @@ using namespace std;
ZCutscene::ZCutscene(std::vector<uint8_t> nRawData, int rawDataIndex, int rawDataSize) ZCutscene::ZCutscene(std::vector<uint8_t> nRawData, int rawDataIndex, int rawDataSize)
{ {
rawData = nRawData; rawData = std::move(nRawData);
segmentOffset = rawDataIndex; segmentOffset = rawDataIndex;
numCommands = BitConverter::ToInt32BE(rawData, rawDataIndex + 0); numCommands = BitConverter::ToInt32BE(rawData, rawDataIndex + 0);
@ -78,7 +78,13 @@ ZCutscene::ZCutscene(std::vector<uint8_t> nRawData, int rawDataIndex, int rawDat
} }
} }
string ZCutscene::GetSourceOutputCode(string prefix) ZCutscene::~ZCutscene()
{
for (CutsceneCommand* cmd : commands)
delete cmd;
}
string ZCutscene::GetSourceOutputCode(const std::string& prefix)
{ {
string output = ""; string output = "";
int size = 0; int size = 0;
@ -160,17 +166,17 @@ CutsceneCommands ZCutscene::GetCommandFromID(int id)
return CutsceneCommands::Error; return CutsceneCommands::Error;
} }
CutsceneCommand::CutsceneCommand(vector<uint8_t> rawData, int rawDataIndex) CutsceneCommand::CutsceneCommand(const vector<uint8_t>& rawData, int rawDataIndex)
{ {
} }
string CutsceneCommand::GetCName(string prefix) string CutsceneCommand::GetCName(const std::string& prefix)
{ {
return "SCmdCutsceneData"; return "SCmdCutsceneData";
} }
string CutsceneCommand::GenerateSourceCode(string roomName, int baseAddress) string CutsceneCommand::GenerateSourceCode(const std::string& roomName, int baseAddress)
{ {
return StringHelper::Sprintf("%s %sCutsceneData%04XCmd%02X = { 0x%02X,", GetCName(roomName).c_str(), roomName.c_str(), baseAddress, commandIndex, commandID); return StringHelper::Sprintf("%s %sCutsceneData%04XCmd%02X = { 0x%02X,", GetCName(roomName).c_str(), roomName.c_str(), baseAddress, commandIndex, commandID);
} }
@ -180,9 +186,9 @@ size_t CutsceneCommand::GetCommandSize()
return 4; return 4;
} }
CutsceneCameraPoint::CutsceneCameraPoint(vector<uint8_t> rawData, int rawDataIndex) CutsceneCameraPoint::CutsceneCameraPoint(const vector<uint8_t>& rawData, int rawDataIndex)
{ {
uint8_t* data = rawData.data(); const uint8_t* data = rawData.data();
continueFlag = data[rawDataIndex + 0]; continueFlag = data[rawDataIndex + 0];
cameraRoll = data[rawDataIndex + 1]; cameraRoll = data[rawDataIndex + 1];
@ -196,9 +202,9 @@ CutsceneCameraPoint::CutsceneCameraPoint(vector<uint8_t> rawData, int rawDataInd
unused = BitConverter::ToInt16BE(data, rawDataIndex + 14); unused = BitConverter::ToInt16BE(data, rawDataIndex + 14);
} }
CutsceneCommandSetCameraPos::CutsceneCommandSetCameraPos(vector<uint8_t> rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex) CutsceneCommandSetCameraPos::CutsceneCommandSetCameraPos(const vector<uint8_t>& rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex)
{ {
uint8_t* data = rawData.data(); const uint8_t* data = rawData.data();
base = (uint16_t)BitConverter::ToInt16BE(data, rawDataIndex + 0); base = (uint16_t)BitConverter::ToInt16BE(data, rawDataIndex + 0);
startFrame = (uint16_t)BitConverter::ToInt16BE(data, rawDataIndex + 2); startFrame = (uint16_t)BitConverter::ToInt16BE(data, rawDataIndex + 2);
@ -224,12 +230,12 @@ CutsceneCommandSetCameraPos::CutsceneCommandSetCameraPos(vector<uint8_t> rawData
} }
// TODO // TODO
string CutsceneCommandSetCameraPos::GetCName(string prefix) string CutsceneCommandSetCameraPos::GetCName(const std::string& prefix)
{ {
return ""; return "";
} }
string CutsceneCommandSetCameraPos::GenerateSourceCode(string roomName, int baseAddress) string CutsceneCommandSetCameraPos::GenerateSourceCode(const std::string& roomName, int baseAddress)
{ {
string result = ""; string result = "";
@ -273,7 +279,7 @@ size_t CutsceneCommandSetCameraPos::GetCommandSize()
return 8 + (entries.size() * 16); return 8 + (entries.size() * 16);
} }
MusicFadeEntry::MusicFadeEntry(vector<uint8_t> rawData, int rawDataIndex) MusicFadeEntry::MusicFadeEntry(const vector<uint8_t>& rawData, int rawDataIndex)
{ {
base = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 0); base = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 0);
startFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 2); startFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 2);
@ -291,7 +297,7 @@ MusicFadeEntry::MusicFadeEntry(vector<uint8_t> rawData, int rawDataIndex)
unknown10 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 44); unknown10 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 44);
} }
CutsceneCommandFadeBGM::CutsceneCommandFadeBGM(vector<uint8_t> rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex) CutsceneCommandFadeBGM::CutsceneCommandFadeBGM(const vector<uint8_t>& rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex)
{ {
int numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex + 0); int numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex + 0);
@ -304,12 +310,12 @@ CutsceneCommandFadeBGM::CutsceneCommandFadeBGM(vector<uint8_t> rawData, int rawD
} }
} }
string CutsceneCommandFadeBGM::GetCName(string prefix) string CutsceneCommandFadeBGM::GetCName(const std::string& prefix)
{ {
return "CsCmdMusicFade"; return "CsCmdMusicFade";
} }
string CutsceneCommandFadeBGM::GenerateSourceCode(string roomName, int baseAddress) string CutsceneCommandFadeBGM::GenerateSourceCode(const std::string& roomName, int baseAddress)
{ {
string result = ""; string result = "";
@ -330,7 +336,7 @@ size_t CutsceneCommandFadeBGM::GetCommandSize()
return CutsceneCommand::GetCommandSize() + 0x30; return CutsceneCommand::GetCommandSize() + 0x30;
} }
MusicChangeEntry::MusicChangeEntry(vector<uint8_t> rawData, int rawDataIndex) MusicChangeEntry::MusicChangeEntry(const vector<uint8_t>& rawData, int rawDataIndex)
{ {
sequence = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 0); sequence = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 0);
startFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 2); startFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 2);
@ -345,7 +351,7 @@ MusicChangeEntry::MusicChangeEntry(vector<uint8_t> rawData, int rawDataIndex)
unknown7 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 32); unknown7 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 32);
} }
CutsceneCommandPlayBGM::CutsceneCommandPlayBGM(vector<uint8_t> rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex) CutsceneCommandPlayBGM::CutsceneCommandPlayBGM(const vector<uint8_t>& rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex)
{ {
int numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex + 0); int numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex + 0);
@ -358,7 +364,7 @@ CutsceneCommandPlayBGM::CutsceneCommandPlayBGM(vector<uint8_t> rawData, int rawD
} }
} }
string CutsceneCommandPlayBGM::GenerateSourceCode(string roomName, int baseAddress) string CutsceneCommandPlayBGM::GenerateSourceCode(const std::string& roomName, int baseAddress)
{ {
string result = ""; string result = "";
@ -374,7 +380,7 @@ string CutsceneCommandPlayBGM::GenerateSourceCode(string roomName, int baseAddre
return result; return result;
} }
string CutsceneCommandPlayBGM::GetCName(string prefix) string CutsceneCommandPlayBGM::GetCName(const std::string& prefix)
{ {
return "CsCmdMusicChange"; return "CsCmdMusicChange";
} }
@ -384,7 +390,7 @@ size_t CutsceneCommandPlayBGM::GetCommandSize()
return CutsceneCommand::GetCommandSize() + 0x30; return CutsceneCommand::GetCommandSize() + 0x30;
} }
CutsceneCommandStopBGM::CutsceneCommandStopBGM(vector<uint8_t> rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex) CutsceneCommandStopBGM::CutsceneCommandStopBGM(const vector<uint8_t>& rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex)
{ {
int numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex + 0); int numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex + 0);
@ -397,7 +403,7 @@ CutsceneCommandStopBGM::CutsceneCommandStopBGM(vector<uint8_t> rawData, int rawD
} }
} }
string CutsceneCommandStopBGM::GenerateSourceCode(string roomName, int baseAddress) string CutsceneCommandStopBGM::GenerateSourceCode(const std::string& roomName, int baseAddress)
{ {
string result = ""; string result = "";
@ -413,7 +419,7 @@ string CutsceneCommandStopBGM::GenerateSourceCode(string roomName, int baseAddre
return result; return result;
} }
string CutsceneCommandStopBGM::GetCName(string prefix) string CutsceneCommandStopBGM::GetCName(const std::string& prefix)
{ {
return "CsCmdMusicChange"; return "CsCmdMusicChange";
} }
@ -423,7 +429,7 @@ size_t CutsceneCommandStopBGM::GetCommandSize()
return CutsceneCommand::GetCommandSize() + 0x30; return CutsceneCommand::GetCommandSize() + 0x30;
} }
EnvLightingEntry::EnvLightingEntry(vector<uint8_t> rawData, int rawDataIndex) EnvLightingEntry::EnvLightingEntry(const vector<uint8_t>& rawData, int rawDataIndex)
{ {
setting = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 0); setting = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 0);
startFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 2); startFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 2);
@ -438,7 +444,7 @@ EnvLightingEntry::EnvLightingEntry(vector<uint8_t> rawData, int rawDataIndex)
unused7 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 32); unused7 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 32);
} }
CutsceneCommandEnvLighting::CutsceneCommandEnvLighting(vector<uint8_t> rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex) CutsceneCommandEnvLighting::CutsceneCommandEnvLighting(const vector<uint8_t>& rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex)
{ {
int numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex + 0); int numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex + 0);
@ -451,7 +457,7 @@ CutsceneCommandEnvLighting::CutsceneCommandEnvLighting(vector<uint8_t> rawData,
} }
} }
string CutsceneCommandEnvLighting::GenerateSourceCode(string roomName, int baseAddress) string CutsceneCommandEnvLighting::GenerateSourceCode(const std::string& roomName, int baseAddress)
{ {
string result = ""; string result = "";
@ -467,7 +473,7 @@ string CutsceneCommandEnvLighting::GenerateSourceCode(string roomName, int baseA
return result; return result;
} }
string CutsceneCommandEnvLighting::GetCName(string prefix) string CutsceneCommandEnvLighting::GetCName(const std::string& prefix)
{ {
return "CsCmdEnvLighting"; return "CsCmdEnvLighting";
} }
@ -477,7 +483,7 @@ size_t CutsceneCommandEnvLighting::GetCommandSize()
return CutsceneCommand::GetCommandSize() + (0x30 * entries.size()); return CutsceneCommand::GetCommandSize() + (0x30 * entries.size());
} }
Unknown9Entry::Unknown9Entry(vector<uint8_t> rawData, int rawDataIndex) Unknown9Entry::Unknown9Entry(const vector<uint8_t>& rawData, int rawDataIndex)
{ {
base = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 0); base = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 0);
startFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 2); startFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 2);
@ -489,7 +495,7 @@ Unknown9Entry::Unknown9Entry(vector<uint8_t> rawData, int rawDataIndex)
unused1 = rawData[rawDataIndex + 11];; unused1 = rawData[rawDataIndex + 11];;
} }
CutsceneCommandUnknown9::CutsceneCommandUnknown9(vector<uint8_t> rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex) CutsceneCommandUnknown9::CutsceneCommandUnknown9(const vector<uint8_t>& rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex)
{ {
int numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex); int numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex);
@ -502,7 +508,7 @@ CutsceneCommandUnknown9::CutsceneCommandUnknown9(vector<uint8_t> rawData, int ra
} }
} }
string CutsceneCommandUnknown9::GenerateSourceCode(string roomName, int baseAddress) string CutsceneCommandUnknown9::GenerateSourceCode(const std::string& roomName, int baseAddress)
{ {
string result = ""; string result = "";
@ -517,7 +523,7 @@ string CutsceneCommandUnknown9::GenerateSourceCode(string roomName, int baseAddr
return result; return result;
} }
string CutsceneCommandUnknown9::GetCName(string prefix) string CutsceneCommandUnknown9::GetCName(const std::string& prefix)
{ {
return "CsCmdUnknown9"; return "CsCmdUnknown9";
} }
@ -527,7 +533,7 @@ size_t CutsceneCommandUnknown9::GetCommandSize()
return CutsceneCommand::GetCommandSize() + (entries.size() * 12); return CutsceneCommand::GetCommandSize() + (entries.size() * 12);
} }
UnkEntry::UnkEntry(vector<uint8_t> rawData, int rawDataIndex) UnkEntry::UnkEntry(const vector<uint8_t>& rawData, int rawDataIndex)
{ {
unused0 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 0); unused0 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 0);
unused1 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 4); unused1 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 4);
@ -543,7 +549,7 @@ UnkEntry::UnkEntry(vector<uint8_t> rawData, int rawDataIndex)
unused11 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 44); unused11 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 44);
} }
CutsceneCommandUnknown::CutsceneCommandUnknown(vector<uint8_t> rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex) CutsceneCommandUnknown::CutsceneCommandUnknown(const vector<uint8_t>& rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex)
{ {
int numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex); int numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex);
@ -556,7 +562,7 @@ CutsceneCommandUnknown::CutsceneCommandUnknown(vector<uint8_t> rawData, int rawD
} }
} }
string CutsceneCommandUnknown::GenerateSourceCode(string roomName, int baseAddress) string CutsceneCommandUnknown::GenerateSourceCode(const std::string& roomName, int baseAddress)
{ {
string result = ""; string result = "";
@ -572,7 +578,7 @@ string CutsceneCommandUnknown::GenerateSourceCode(string roomName, int baseAddre
return result; return result;
} }
string CutsceneCommandUnknown::GetCName(string prefix) string CutsceneCommandUnknown::GetCName(const std::string& prefix)
{ {
return "CsCmdUnknown1A"; return "CsCmdUnknown1A";
} }
@ -582,7 +588,7 @@ size_t CutsceneCommandUnknown::GetCommandSize()
return CutsceneCommand::GetCommandSize() + (entries.size() * 0x30); return CutsceneCommand::GetCommandSize() + (entries.size() * 0x30);
} }
DayTimeEntry::DayTimeEntry(vector<uint8_t> rawData, int rawDataIndex) DayTimeEntry::DayTimeEntry(const vector<uint8_t>& rawData, int rawDataIndex)
{ {
base = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 0); base = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 0);
startFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 2); startFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 2);
@ -592,7 +598,7 @@ DayTimeEntry::DayTimeEntry(vector<uint8_t> rawData, int rawDataIndex)
unused = rawData[rawDataIndex + 8]; unused = rawData[rawDataIndex + 8];
} }
CutsceneCommandDayTime::CutsceneCommandDayTime(vector<uint8_t> rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex) CutsceneCommandDayTime::CutsceneCommandDayTime(const vector<uint8_t>& rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex)
{ {
int numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex); int numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex);
@ -605,12 +611,12 @@ CutsceneCommandDayTime::CutsceneCommandDayTime(vector<uint8_t> rawData, int rawD
} }
} }
string CutsceneCommandDayTime::GetCName(string prefix) string CutsceneCommandDayTime::GetCName(const std::string& prefix)
{ {
return "CsCmdDayTime"; return "CsCmdDayTime";
} }
string CutsceneCommandDayTime::GenerateSourceCode(string roomName, int baseAddress) string CutsceneCommandDayTime::GenerateSourceCode(const std::string& roomName, int baseAddress)
{ {
string result = ""; string result = "";
@ -630,7 +636,7 @@ size_t CutsceneCommandDayTime::GetCommandSize()
return CutsceneCommand::GetCommandSize() + (entries.size() * 12); return CutsceneCommand::GetCommandSize() + (entries.size() * 12);
} }
TextboxEntry::TextboxEntry(vector<uint8_t> rawData, int rawDataIndex) TextboxEntry::TextboxEntry(const vector<uint8_t>& rawData, int rawDataIndex)
{ {
base = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 0); base = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 0);
startFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 2); startFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 2);
@ -640,7 +646,7 @@ TextboxEntry::TextboxEntry(vector<uint8_t> rawData, int rawDataIndex)
textID2 = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 10); textID2 = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 10);
} }
CutsceneCommandTextbox::CutsceneCommandTextbox(vector<uint8_t> rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex) CutsceneCommandTextbox::CutsceneCommandTextbox(const vector<uint8_t>& rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex)
{ {
int numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex); int numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex);
@ -653,12 +659,12 @@ CutsceneCommandTextbox::CutsceneCommandTextbox(vector<uint8_t> rawData, int rawD
} }
} }
string CutsceneCommandTextbox::GetCName(string prefix) string CutsceneCommandTextbox::GetCName(const std::string& prefix)
{ {
return "CsCmdTextbox"; return "CsCmdTextbox";
} }
string CutsceneCommandTextbox::GenerateSourceCode(string roomName, int baseAddress) string CutsceneCommandTextbox::GenerateSourceCode(const std::string& roomName, int baseAddress)
{ {
string result = ""; string result = "";
@ -685,9 +691,9 @@ size_t CutsceneCommandTextbox::GetCommandSize()
return CutsceneCommand::GetCommandSize() + (entries.size() * 12); return CutsceneCommand::GetCommandSize() + (entries.size() * 12);
} }
ActorAction::ActorAction(vector<uint8_t> rawData, int rawDataIndex) ActorAction::ActorAction(const vector<uint8_t>& rawData, int rawDataIndex)
{ {
uint8_t* data = rawData.data(); const uint8_t* data = rawData.data();
action = (uint16_t)BitConverter::ToInt16BE(data, rawDataIndex + 0); action = (uint16_t)BitConverter::ToInt16BE(data, rawDataIndex + 0);
startFrame = (uint16_t)BitConverter::ToInt16BE(data, rawDataIndex + 2); startFrame = (uint16_t)BitConverter::ToInt16BE(data, rawDataIndex + 2);
@ -706,7 +712,7 @@ ActorAction::ActorAction(vector<uint8_t> rawData, int rawDataIndex)
normalZ = BitConverter::ToInt32BE(data, rawDataIndex + 44); normalZ = BitConverter::ToInt32BE(data, rawDataIndex + 44);
} }
CutsceneCommandActorAction::CutsceneCommandActorAction(vector<uint8_t> rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex) CutsceneCommandActorAction::CutsceneCommandActorAction(const vector<uint8_t>& rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex)
{ {
int numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex); int numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex);
@ -719,7 +725,7 @@ CutsceneCommandActorAction::CutsceneCommandActorAction(vector<uint8_t> rawData,
} }
} }
string CutsceneCommandActorAction::GenerateSourceCode(string roomName, int baseAddress) string CutsceneCommandActorAction::GenerateSourceCode(const std::string& roomName, int baseAddress)
{ {
string result = ""; string result = "";
@ -735,7 +741,7 @@ string CutsceneCommandActorAction::GenerateSourceCode(string roomName, int baseA
return result; return result;
} }
string CutsceneCommandActorAction::GetCName(string prefix) string CutsceneCommandActorAction::GetCName(const std::string& prefix)
{ {
return "CsCmdBase"; return "CsCmdBase";
} }
@ -745,7 +751,7 @@ size_t CutsceneCommandActorAction::GetCommandSize()
return CutsceneCommand::GetCommandSize() + (entries.size() * 0x30); return CutsceneCommand::GetCommandSize() + (entries.size() * 0x30);
} }
CutsceneCommandTerminator::CutsceneCommandTerminator(vector<uint8_t> rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex) CutsceneCommandTerminator::CutsceneCommandTerminator(const vector<uint8_t>& rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex)
{ {
rawDataIndex += 4; rawDataIndex += 4;
@ -755,12 +761,12 @@ CutsceneCommandTerminator::CutsceneCommandTerminator(vector<uint8_t> rawData, in
unknown = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 6); unknown = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 6);
} }
string CutsceneCommandTerminator::GetCName(string prefix) string CutsceneCommandTerminator::GetCName(const std::string& prefix)
{ {
return "CsCmdBase"; return "CsCmdBase";
} }
string CutsceneCommandTerminator::GenerateSourceCode(string roomName, int baseAddress) string CutsceneCommandTerminator::GenerateSourceCode(const std::string& roomName, int baseAddress)
{ {
string result = ""; string result = "";
@ -774,14 +780,14 @@ size_t CutsceneCommandTerminator::GetCommandSize()
return CutsceneCommand::GetCommandSize() + 8; return CutsceneCommand::GetCommandSize() + 8;
} }
CutsceneCommandEnd::CutsceneCommandEnd(vector<uint8_t> rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex) CutsceneCommandEnd::CutsceneCommandEnd(const vector<uint8_t>& rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex)
{ {
base = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 0); base = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 0);
startFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 2); startFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 2);
endFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 4); endFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 4);
} }
string CutsceneCommandEnd::GenerateSourceCode(string roomName, int baseAddress) string CutsceneCommandEnd::GenerateSourceCode(const std::string& roomName, int baseAddress)
{ {
string result = ""; string result = "";
@ -790,7 +796,7 @@ string CutsceneCommandEnd::GenerateSourceCode(string roomName, int baseAddress)
return result; return result;
} }
string CutsceneCommandEnd::GetCName(string prefix) string CutsceneCommandEnd::GetCName(const std::string& prefix)
{ {
return "CsCmdBase"; return "CsCmdBase";
} }
@ -800,27 +806,27 @@ size_t CutsceneCommandEnd::GetCommandSize()
return CutsceneCommand::GetCommandSize() + 6; return CutsceneCommand::GetCommandSize() + 6;
} }
SpecialActionEntry::SpecialActionEntry(vector<uint8_t> rawData, int rawDataIndex) SpecialActionEntry::SpecialActionEntry(const vector<uint8_t>& rawData, int rawDataIndex)
{ {
uint8_t* data = rawData.data(); const uint8_t* data = rawData.data();
base = (uint16_t)BitConverter::ToInt16BE(data, rawDataIndex + 0); base = BitConverter::ToUInt16BE(data, rawDataIndex + 0);
startFrame = (uint16_t)BitConverter::ToInt16BE(data, rawDataIndex + 2); startFrame = BitConverter::ToUInt16BE(data, rawDataIndex + 2);
endFrame = (uint16_t)BitConverter::ToInt16BE(data, rawDataIndex + 4); endFrame = BitConverter::ToUInt16BE(data, rawDataIndex + 4);
unused0 = (uint16_t)BitConverter::ToInt16BE(data, rawDataIndex + 6); unused0 = BitConverter::ToUInt16BE(data, rawDataIndex + 6);
unused1 = (uint32_t)BitConverter::ToInt32BE(data, rawDataIndex + 8); unused1 = BitConverter::ToUInt32BE(data, rawDataIndex + 8);
unused2 = (uint32_t)BitConverter::ToInt32BE(data, rawDataIndex + 12); unused2 = BitConverter::ToUInt32BE(data, rawDataIndex + 12);
unused3 = (uint32_t)BitConverter::ToInt32BE(data, rawDataIndex + 16); unused3 = BitConverter::ToUInt32BE(data, rawDataIndex + 16);
unused4 = (uint32_t)BitConverter::ToInt32BE(data, rawDataIndex + 20); unused4 = BitConverter::ToUInt32BE(data, rawDataIndex + 20);
unused5 = (uint32_t)BitConverter::ToInt32BE(data, rawDataIndex + 24); unused5 = BitConverter::ToUInt32BE(data, rawDataIndex + 24);
unused6 = (uint32_t)BitConverter::ToInt32BE(data, rawDataIndex + 28); unused6 = BitConverter::ToUInt32BE(data, rawDataIndex + 28);
unused7 = (uint32_t)BitConverter::ToInt32BE(data, rawDataIndex + 32); unused7 = BitConverter::ToUInt32BE(data, rawDataIndex + 32);
unused8 = (uint32_t)BitConverter::ToInt32BE(data, rawDataIndex + 36); unused8 = BitConverter::ToUInt32BE(data, rawDataIndex + 36);
unused9 = (uint32_t)BitConverter::ToInt32BE(data, rawDataIndex + 40); unused9 = BitConverter::ToUInt32BE(data, rawDataIndex + 40);
unused10 = (uint32_t)BitConverter::ToInt32BE(data, rawDataIndex + 44); unused10 = BitConverter::ToUInt32BE(data, rawDataIndex + 44);
} }
CutsceneCommandSpecialAction::CutsceneCommandSpecialAction(vector<uint8_t> rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex) CutsceneCommandSpecialAction::CutsceneCommandSpecialAction(const vector<uint8_t>& rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex)
{ {
int numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex + 0); int numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex + 0);
@ -833,7 +839,7 @@ CutsceneCommandSpecialAction::CutsceneCommandSpecialAction(vector<uint8_t> rawDa
} }
} }
string CutsceneCommandSpecialAction::GenerateSourceCode(string roomName, int baseAddress) string CutsceneCommandSpecialAction::GenerateSourceCode(const std::string& roomName, int baseAddress)
{ {
string result = ""; string result = "";
@ -844,12 +850,12 @@ string CutsceneCommandSpecialAction::GenerateSourceCode(string roomName, int bas
result += StringHelper::Sprintf("\t\tCS_MISC(0x%04X, %i, %i, 0x%04X, 0x%04X, 0x%04X, %i, %i, %i, %i, %i, %i, %i, %i),\n", entries[i]->base, entries[i]->startFrame, entries[i]->endFrame, result += StringHelper::Sprintf("\t\tCS_MISC(0x%04X, %i, %i, 0x%04X, 0x%04X, 0x%04X, %i, %i, %i, %i, %i, %i, %i, %i),\n", entries[i]->base, entries[i]->startFrame, entries[i]->endFrame,
entries[i]->unused0, entries[i]->unused1, entries[i]->unused2, entries[i]->unused3, entries[i]->unused4, entries[i]->unused5, entries[i]->unused6, entries[i]->unused0, entries[i]->unused1, entries[i]->unused2, entries[i]->unused3, entries[i]->unused4, entries[i]->unused5, entries[i]->unused6,
entries[i]->unused7, entries[i]->unused8, entries[i]->unused9, entries[i]->unused10); entries[i]->unused7, entries[i]->unused8, entries[i]->unused9, entries[i]->unused10);
} }
return result; return result;
} }
string CutsceneCommandSpecialAction::GetCName(string prefix) string CutsceneCommandSpecialAction::GetCName(const std::string& prefix)
{ {
return "CsCmdBase"; return "CsCmdBase";
} }
@ -859,14 +865,14 @@ size_t CutsceneCommandSpecialAction::GetCommandSize()
return CutsceneCommand::GetCommandSize() + (0x30 * entries.size()); return CutsceneCommand::GetCommandSize() + (0x30 * entries.size());
} }
CutsceneCommandNop::CutsceneCommandNop(vector<uint8_t> rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex) CutsceneCommandNop::CutsceneCommandNop(const vector<uint8_t>& rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex)
{ {
base = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 0); base = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 0);
startFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 2); startFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 2);
endFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 4); endFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 4);
} }
string CutsceneCommandNop::GetCName(string prefix) string CutsceneCommandNop::GetCName(const std::string& prefix)
{ {
return "CsCmdBase"; return "CsCmdBase";
} }
@ -876,7 +882,7 @@ size_t CutsceneCommandNop::GetCommandSize()
return CutsceneCommand::GetCommandSize() + 6; return CutsceneCommand::GetCommandSize() + 6;
} }
CutsceneCommandSceneTransFX::CutsceneCommandSceneTransFX(vector<uint8_t> rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex) CutsceneCommandSceneTransFX::CutsceneCommandSceneTransFX(const vector<uint8_t>& rawData, int rawDataIndex) : CutsceneCommand(rawData, rawDataIndex)
{ {
rawDataIndex += 4; rawDataIndex += 4;
@ -885,12 +891,12 @@ CutsceneCommandSceneTransFX::CutsceneCommandSceneTransFX(vector<uint8_t> rawData
endFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 4); endFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 4);
} }
string CutsceneCommandSceneTransFX::GenerateSourceCode(string roomName, int baseAddress) string CutsceneCommandSceneTransFX::GenerateSourceCode(const std::string& roomName, int baseAddress)
{ {
return StringHelper::Sprintf("CS_SCENE_TRANS_FX(%i, %i, %i, %i),\n", base, startFrame, endFrame); return StringHelper::Sprintf("CS_SCENE_TRANS_FX(%i, %i, %i, %i),\n", base, startFrame, endFrame);
} }
string CutsceneCommandSceneTransFX::GetCName(string prefix) string CutsceneCommandSceneTransFX::GetCName(const std::string& prefix)
{ {
return "CsCmdBase"; return "CsCmdBase";
} }

View file

@ -52,7 +52,7 @@ public:
int16_t posX, posY, posZ; int16_t posX, posY, posZ;
int16_t unused; int16_t unused;
CutsceneCameraPoint(std::vector<uint8_t> rawData, int rawDataIndex); CutsceneCameraPoint(const std::vector<uint8_t>& rawData, int rawDataIndex);
}; };
class CutsceneCommand class CutsceneCommand
@ -61,9 +61,9 @@ public:
uint32_t commandID; uint32_t commandID;
uint32_t commandIndex; uint32_t commandIndex;
CutsceneCommand(std::vector<uint8_t> rawData, int rawDataIndex); CutsceneCommand(const std::vector<uint8_t>& rawData, int rawDataIndex);
virtual std::string GetCName(std::string prefix); virtual std::string GetCName(const std::string& prefix);
virtual std::string GenerateSourceCode(std::string roomName, int baseAddress); virtual std::string GenerateSourceCode(const std::string& roomName, int baseAddress);
virtual size_t GetCommandSize(); virtual size_t GetCommandSize();
}; };
@ -77,9 +77,9 @@ public:
std::vector<CutsceneCameraPoint*> entries; std::vector<CutsceneCameraPoint*> entries;
CutsceneCommandSetCameraPos(std::vector<uint8_t> rawData, int rawDataIndex); CutsceneCommandSetCameraPos(const std::vector<uint8_t>& rawData, int rawDataIndex);
std::string GetCName(std::string prefix); std::string GetCName(const std::string& prefix);
std::string GenerateSourceCode(std::string roomName, int baseAddress); std::string GenerateSourceCode(const std::string& roomName, int baseAddress);
size_t GetCommandSize(); size_t GetCommandSize();
}; };
@ -101,7 +101,7 @@ public:
uint32_t unused9; uint32_t unused9;
uint32_t unused10; uint32_t unused10;
SpecialActionEntry(std::vector<uint8_t> rawData, int rawDataIndex); SpecialActionEntry(const std::vector<uint8_t>& rawData, int rawDataIndex);
}; };
class CutsceneCommandSpecialAction : public CutsceneCommand class CutsceneCommandSpecialAction : public CutsceneCommand
@ -109,9 +109,9 @@ class CutsceneCommandSpecialAction : public CutsceneCommand
public: public:
std::vector<SpecialActionEntry*> entries; std::vector<SpecialActionEntry*> entries;
CutsceneCommandSpecialAction(std::vector<uint8_t> rawData, int rawDataIndex); CutsceneCommandSpecialAction(const std::vector<uint8_t>& rawData, int rawDataIndex);
std::string GetCName(std::string prefix); std::string GetCName(const std::string& prefix);
std::string GenerateSourceCode(std::string roomName, int baseAddress); std::string GenerateSourceCode(const std::string& roomName, int baseAddress);
size_t GetCommandSize(); size_t GetCommandSize();
}; };
@ -133,7 +133,7 @@ public:
uint32_t unknown9; uint32_t unknown9;
uint32_t unknown10; uint32_t unknown10;
MusicFadeEntry(std::vector<uint8_t> rawData, int rawDataIndex); MusicFadeEntry(const std::vector<uint8_t>& rawData, int rawDataIndex);
}; };
class CutsceneCommandFadeBGM : public CutsceneCommand class CutsceneCommandFadeBGM : public CutsceneCommand
@ -141,9 +141,9 @@ class CutsceneCommandFadeBGM : public CutsceneCommand
public: public:
std::vector<MusicFadeEntry*> entries; std::vector<MusicFadeEntry*> entries;
CutsceneCommandFadeBGM( std::vector<uint8_t> rawData, int rawDataIndex); CutsceneCommandFadeBGM( const std::vector<uint8_t>& rawData, int rawDataIndex);
std::string GetCName(std::string prefix); std::string GetCName(const std::string& prefix);
std::string GenerateSourceCode(std::string roomName, int baseAddress); std::string GenerateSourceCode(const std::string& roomName, int baseAddress);
size_t GetCommandSize(); size_t GetCommandSize();
}; };
@ -162,7 +162,7 @@ public:
uint32_t unknown6; uint32_t unknown6;
uint32_t unknown7; uint32_t unknown7;
MusicChangeEntry(std::vector<uint8_t> rawData, int rawDataIndex); MusicChangeEntry(const std::vector<uint8_t>& rawData, int rawDataIndex);
}; };
class CutsceneCommandPlayBGM : public CutsceneCommand class CutsceneCommandPlayBGM : public CutsceneCommand
@ -170,9 +170,9 @@ class CutsceneCommandPlayBGM : public CutsceneCommand
public: public:
std::vector<MusicChangeEntry*> entries; std::vector<MusicChangeEntry*> entries;
CutsceneCommandPlayBGM(std::vector<uint8_t> rawData, int rawDataIndex); CutsceneCommandPlayBGM(const std::vector<uint8_t>& rawData, int rawDataIndex);
std::string GetCName(std::string prefix); std::string GetCName(const std::string& prefix);
std::string GenerateSourceCode(std::string roomName, int baseAddress); std::string GenerateSourceCode(const std::string& roomName, int baseAddress);
size_t GetCommandSize(); size_t GetCommandSize();
}; };
@ -181,9 +181,9 @@ class CutsceneCommandStopBGM : public CutsceneCommand
public: public:
std::vector<MusicChangeEntry*> entries; std::vector<MusicChangeEntry*> entries;
CutsceneCommandStopBGM(std::vector<uint8_t> rawData, int rawDataIndex); CutsceneCommandStopBGM(const std::vector<uint8_t>& rawData, int rawDataIndex);
std::string GetCName(std::string prefix); std::string GetCName(const std::string& prefix);
std::string GenerateSourceCode(std::string roomName, int baseAddress); std::string GenerateSourceCode(const std::string& roomName, int baseAddress);
size_t GetCommandSize(); size_t GetCommandSize();
}; };
@ -202,7 +202,7 @@ public:
uint32_t unused6; uint32_t unused6;
uint32_t unused7; uint32_t unused7;
EnvLightingEntry(std::vector<uint8_t> rawData, int rawDataIndex); EnvLightingEntry(const std::vector<uint8_t>& rawData, int rawDataIndex);
}; };
class CutsceneCommandEnvLighting : public CutsceneCommand class CutsceneCommandEnvLighting : public CutsceneCommand
@ -210,9 +210,9 @@ class CutsceneCommandEnvLighting : public CutsceneCommand
public: public:
std::vector<EnvLightingEntry*> entries; std::vector<EnvLightingEntry*> entries;
CutsceneCommandEnvLighting(std::vector<uint8_t> rawData, int rawDataIndex); CutsceneCommandEnvLighting(const std::vector<uint8_t>& rawData, int rawDataIndex);
std::string GetCName(std::string prefix); std::string GetCName(const std::string& prefix);
std::string GenerateSourceCode(std::string roomName, int baseAddress); std::string GenerateSourceCode(const std::string& roomName, int baseAddress);
size_t GetCommandSize(); size_t GetCommandSize();
}; };
@ -223,9 +223,9 @@ public:
uint16_t startFrame; uint16_t startFrame;
uint16_t endFrame; uint16_t endFrame;
CutsceneCommandSceneTransFX(std::vector<uint8_t> rawData, int rawDataIndex); CutsceneCommandSceneTransFX(const std::vector<uint8_t>& rawData, int rawDataIndex);
std::string GetCName(std::string prefix); std::string GetCName(const std::string& prefix);
std::string GenerateSourceCode(std::string roomName, int baseAddress); std::string GenerateSourceCode(const std::string& roomName, int baseAddress);
size_t GetCommandSize(); size_t GetCommandSize();
}; };
@ -241,7 +241,7 @@ public:
uint8_t unused0; uint8_t unused0;
uint8_t unused1; uint8_t unused1;
Unknown9Entry(std::vector<uint8_t> rawData, int rawDataIndex); Unknown9Entry(const std::vector<uint8_t>& rawData, int rawDataIndex);
}; };
class CutsceneCommandUnknown9 : public CutsceneCommand class CutsceneCommandUnknown9 : public CutsceneCommand
@ -249,9 +249,9 @@ class CutsceneCommandUnknown9 : public CutsceneCommand
public: public:
std::vector<Unknown9Entry*> entries; std::vector<Unknown9Entry*> entries;
CutsceneCommandUnknown9(std::vector<uint8_t> rawData, int rawDataIndex); CutsceneCommandUnknown9(const std::vector<uint8_t>& rawData, int rawDataIndex);
std::string GetCName(std::string prefix); std::string GetCName(const std::string& prefix);
std::string GenerateSourceCode(std::string roomName, int baseAddress); std::string GenerateSourceCode(const std::string& roomName, int baseAddress);
size_t GetCommandSize(); size_t GetCommandSize();
}; };
@ -271,7 +271,7 @@ public:
uint32_t unused10; uint32_t unused10;
uint32_t unused11; uint32_t unused11;
UnkEntry(std::vector<uint8_t> rawData, int rawDataIndex); UnkEntry(const std::vector<uint8_t>& rawData, int rawDataIndex);
}; };
class CutsceneCommandUnknown : public CutsceneCommand class CutsceneCommandUnknown : public CutsceneCommand
@ -279,9 +279,9 @@ class CutsceneCommandUnknown : public CutsceneCommand
public: public:
std::vector<UnkEntry*> entries; std::vector<UnkEntry*> entries;
CutsceneCommandUnknown(std::vector<uint8_t> rawData, int rawDataIndex); CutsceneCommandUnknown(const std::vector<uint8_t>& rawData, int rawDataIndex);
std::string GetCName(std::string prefix); std::string GetCName(const std::string& prefix);
std::string GenerateSourceCode(std::string roomName, int baseAddress); std::string GenerateSourceCode(const std::string& roomName, int baseAddress);
size_t GetCommandSize(); size_t GetCommandSize();
}; };
@ -295,7 +295,7 @@ public:
uint8_t minute; uint8_t minute;
uint8_t unused; uint8_t unused;
DayTimeEntry(std::vector<uint8_t> rawData, int rawDataIndex); DayTimeEntry(const std::vector<uint8_t>& rawData, int rawDataIndex);
}; };
class CutsceneCommandDayTime : public CutsceneCommand class CutsceneCommandDayTime : public CutsceneCommand
@ -303,9 +303,9 @@ class CutsceneCommandDayTime : public CutsceneCommand
public: public:
std::vector<DayTimeEntry*> entries; std::vector<DayTimeEntry*> entries;
CutsceneCommandDayTime(std::vector<uint8_t> rawData, int rawDataIndex); CutsceneCommandDayTime(const std::vector<uint8_t>& rawData, int rawDataIndex);
std::string GetCName(std::string prefix); std::string GetCName(const std::string& prefix);
std::string GenerateSourceCode(std::string roomName, int baseAddress); std::string GenerateSourceCode(const std::string& roomName, int baseAddress);
size_t GetCommandSize(); size_t GetCommandSize();
}; };
@ -319,7 +319,7 @@ public:
uint16_t textID1; uint16_t textID1;
uint16_t textID2; uint16_t textID2;
TextboxEntry(std::vector<uint8_t> rawData, int rawDataIndex); TextboxEntry(const std::vector<uint8_t>& rawData, int rawDataIndex);
}; };
class CutsceneCommandTextbox : public CutsceneCommand class CutsceneCommandTextbox : public CutsceneCommand
@ -327,9 +327,9 @@ class CutsceneCommandTextbox : public CutsceneCommand
public: public:
std::vector<TextboxEntry*> entries; std::vector<TextboxEntry*> entries;
CutsceneCommandTextbox(std::vector<uint8_t> rawData, int rawDataIndex); CutsceneCommandTextbox(const std::vector<uint8_t>& rawData, int rawDataIndex);
std::string GetCName(std::string prefix); std::string GetCName(const std::string& prefix);
std::string GenerateSourceCode(std::string roomName, int baseAddress); std::string GenerateSourceCode(const std::string& roomName, int baseAddress);
size_t GetCommandSize(); size_t GetCommandSize();
}; };
@ -344,7 +344,7 @@ public:
int32_t endPosX, endPosY, endPosZ; int32_t endPosX, endPosY, endPosZ;
int32_t normalX, normalY, normalZ; int32_t normalX, normalY, normalZ;
ActorAction(std::vector<uint8_t> rawData, int rawDataIndex); ActorAction(const std::vector<uint8_t>& rawData, int rawDataIndex);
}; };
class CutsceneCommandActorAction : public CutsceneCommand class CutsceneCommandActorAction : public CutsceneCommand
@ -352,9 +352,9 @@ class CutsceneCommandActorAction : public CutsceneCommand
public: public:
std::vector<ActorAction*> entries; std::vector<ActorAction*> entries;
CutsceneCommandActorAction(std::vector<uint8_t> rawData, int rawDataIndex); CutsceneCommandActorAction(const std::vector<uint8_t>& rawData, int rawDataIndex);
std::string GetCName(std::string prefix); std::string GetCName(const std::string& prefix);
std::string GenerateSourceCode(std::string roomName, int baseAddress); std::string GenerateSourceCode(const std::string& roomName, int baseAddress);
size_t GetCommandSize(); size_t GetCommandSize();
}; };
@ -366,9 +366,9 @@ public:
uint16_t endFrame; uint16_t endFrame;
uint16_t unknown; uint16_t unknown;
CutsceneCommandTerminator(std::vector<uint8_t> rawData, int rawDataIndex); CutsceneCommandTerminator(const std::vector<uint8_t>& rawData, int rawDataIndex);
std::string GetCName(std::string prefix); std::string GetCName(const std::string& prefix);
std::string GenerateSourceCode(std::string roomName, int baseAddress); std::string GenerateSourceCode(const std::string& roomName, int baseAddress);
size_t GetCommandSize(); size_t GetCommandSize();
}; };
@ -379,9 +379,9 @@ public:
uint16_t startFrame; uint16_t startFrame;
uint16_t endFrame; uint16_t endFrame;
CutsceneCommandEnd(std::vector<uint8_t> rawData, int rawDataIndex); CutsceneCommandEnd(const std::vector<uint8_t>& rawData, int rawDataIndex);
std::string GetCName(std::string prefix); std::string GetCName(const std::string& prefix);
std::string GenerateSourceCode(std::string roomName, int baseAddress); std::string GenerateSourceCode(const std::string& roomName, int baseAddress);
size_t GetCommandSize(); size_t GetCommandSize();
}; };
@ -392,8 +392,8 @@ public:
uint16_t startFrame; uint16_t startFrame;
uint16_t endFrame; uint16_t endFrame;
CutsceneCommandNop(std::vector<uint8_t> rawData, int rawDataIndex); CutsceneCommandNop(const std::vector<uint8_t>& rawData, int rawDataIndex);
std::string GetCName(std::string prefix); std::string GetCName(const std::string& prefix);
size_t GetCommandSize(); size_t GetCommandSize();
}; };
@ -401,14 +401,15 @@ class ZCutscene : public ZResource
{ {
public: public:
uint32_t segmentOffset; uint32_t segmentOffset;
CutsceneCommands GetCommandFromID(int id); CutsceneCommands GetCommandFromID(int id);
ZCutscene(std::vector<uint8_t> nRawData, int rawDataIndex, int rawDataSize); ZCutscene(std::vector<uint8_t> nRawData, int rawDataIndex, int rawDataSize);
~ZCutscene();
std::string GetSourceOutputCode(std::string prefix); std::string GetSourceOutputCode(const std::string& prefix);
int GetRawDataSize(); int GetRawDataSize();
private: private:
int numCommands; int numCommands;
int endFrame; int endFrame;
std::vector<CutsceneCommand*> commands; std::vector<CutsceneCommand*> commands;
}; };

View file

@ -23,6 +23,7 @@ ZDisplayList::ZDisplayList() : ZResource()
lastTexSiz = F3DZEXTexSizes::G_IM_SIZ_16b; lastTexSiz = F3DZEXTexSizes::G_IM_SIZ_16b;
lastTexSizTest = F3DZEXTexSizes::G_IM_SIZ_16b; lastTexSizTest = F3DZEXTexSizes::G_IM_SIZ_16b;
lastTexLoaded = false; lastTexLoaded = false;
lastTexIsPalette = false;
name = ""; name = "";
scene = nullptr; scene = nullptr;
@ -79,7 +80,7 @@ void ZDisplayList::ParseRawData()
instructions.reserve(numInstructions); instructions.reserve(numInstructions);
for (int i = 0; i < numInstructions; i++) for (int i = 0; i < numInstructions; i++)
instructions.push_back(BitConverter::ToInt64BE(rawDataArr, (i * 8))); instructions.push_back(BitConverter::ToUInt64BE(rawDataArr, (i * 8)));
} }
int ZDisplayList::GetDListLength(vector<uint8_t> rawData, int rawDataIndex) int ZDisplayList::GetDListLength(vector<uint8_t> rawData, int rawDataIndex)
@ -156,19 +157,14 @@ int ZDisplayList::OptimizationCheck_LoadTextureBlock(int startIndex, string& out
siz = (__ & 0x18) >> 3; siz = (__ & 0x18) >> 3;
texAddr = SEG2FILESPACE(data); texAddr = SEG2FILESPACE(data);
int segmentNumber = (data & 0xFF000000) >> 24; int segmentNumber = (data & 0xFF000000) >> 24;
if (segmentNumber == 0x80) // Is this texture defined in code? if (segmentNumber == 0x80) // Is this texture defined in code?
texAddr -= SEG2FILESPACE(parent->baseAddress); texAddr -= SEG2FILESPACE(parent->baseAddress);
lastTexSeg = (data & 0xFF000000); lastTexSeg = (data & 0xFF000000);
if (texAddr == 0xb880e0)
{
int bp = 0;
}
Declaration* texDecl = nullptr; Declaration* texDecl = nullptr;
if (parent != nullptr) if (parent != nullptr)
{ {
texDecl = parent->GetDeclaration(texAddr); texDecl = parent->GetDeclaration(texAddr);
@ -199,7 +195,7 @@ int ZDisplayList::OptimizationCheck_LoadTextureBlock(int startIndex, string& out
uint64_t data = instructions[startIndex + 1]; uint64_t data = instructions[startIndex + 1];
tmem = (data & 0b0000000000000000111111111111111100000000000000000000000000000000) >> 32; tmem = (data & 0b0000000000000000111111111111111100000000000000000000000000000000) >> 32;
cmt = (data & 0b0000000000000000000000000000000000000000000011000000000000000000) >> 18; cmt = (data & 0b0000000000000000000000000000000000000000000011000000000000000000) >> 18;
maskt = (data & 0b0000000000000000000000000000000000000000000000111100000000000000) >> 14; maskt = (data & 0b0000000000000000000000000000000000000000000000111100000000000000) >> 14;
shiftt = (data & 0b0000000000000000000000000000000000000000000000000011110000000000) >> 10; shiftt = (data & 0b0000000000000000000000000000000000000000000000000011110000000000) >> 10;
@ -245,11 +241,6 @@ int ZDisplayList::OptimizationCheck_LoadTextureBlock(int startIndex, string& out
if (sizB == (int)F3DZEXTexSizes::G_IM_SIZ_4b && fmt == (int)F3DZEXTexFormats::G_IM_FMT_IA) if (sizB == (int)F3DZEXTexSizes::G_IM_SIZ_4b && fmt == (int)F3DZEXTexFormats::G_IM_FMT_IA)
shiftAmtH = 3; shiftAmtH = 3;
if (texAddr == 0xb880e0)
{
int bp = 0;
}
width = (uuu >> shiftAmtW) + 1; width = (uuu >> shiftAmtW) + 1;
height = (vvv >> shiftAmtH) + 1; height = (vvv >> shiftAmtH) + 1;
@ -260,7 +251,7 @@ int ZDisplayList::OptimizationCheck_LoadTextureBlock(int startIndex, string& out
string fmtTbl[] = { "G_IM_FMT_RGBA", "G_IM_FMT_YUV", "G_IM_FMT_CI", "G_IM_FMT_IA", "G_IM_FMT_I" }; string fmtTbl[] = { "G_IM_FMT_RGBA", "G_IM_FMT_YUV", "G_IM_FMT_CI", "G_IM_FMT_IA", "G_IM_FMT_I" };
string sizTbl[] = { "G_IM_SIZ_4b", "G_IM_SIZ_8b", "G_IM_SIZ_16b", "G_IM_SIZ_32b" }; string sizTbl[] = { "G_IM_SIZ_4b", "G_IM_SIZ_8b", "G_IM_SIZ_16b", "G_IM_SIZ_32b" };
//output += StringHelper::Sprintf("gsDPLoadTextureBlock(%s, %s, %s, %i, %i, %i, %i, %i, %i, %i, %i, %i),", //output += StringHelper::Sprintf("gsDPLoadTextureBlock(%s, %s, %s, %i, %i, %i, %i, %i, %i, %i, %i, %i),",
//texStr.c_str(), fmtTbl[fmt].c_str(), sizTbl[siz].c_str(), width, height, pal, cms, cmt, masks, maskt, shifts, shiftt); //texStr.c_str(), fmtTbl[fmt].c_str(), sizTbl[siz].c_str(), width, height, pal, cms, cmt, masks, maskt, shifts, shiftt);
if (siz == 2 && sizB == 0) if (siz == 2 && sizB == 0)
@ -304,11 +295,6 @@ int ZDisplayList::OptimizationCheck_LoadTextureBlock(int startIndex, string& out
lastTexSiz = (F3DZEXTexSizes)siz; lastTexSiz = (F3DZEXTexSizes)siz;
lastTexLoaded = true; lastTexLoaded = true;
if (lastTexAddr == 0x8798)
{
int bp = 0;
}
TextureGenCheck(prefix); TextureGenCheck(prefix);
return (int)sequence.size(); return (int)sequence.size();
@ -317,17 +303,17 @@ int ZDisplayList::OptimizationCheck_LoadTextureBlock(int startIndex, string& out
return -1; return -1;
} }
string ZDisplayList::GetSourceOutputHeader(string prefix) string ZDisplayList::GetSourceOutputHeader(const std::string& prefix)
{ {
return ""; return "";
} }
string ZDisplayList::GetSourceOutputCode(std::string prefix) string ZDisplayList::GetSourceOutputCode(const std::string& prefix)
{ {
char line[4096]; char line[4096];
string sourceOutput = ""; string sourceOutput = "";
for (int i = 0; i < instructions.size(); i++) for (int i = 0; i < instructions.size(); i++)
{ {
F3DZEXOpcode opcode = (F3DZEXOpcode)(instructions[i] >> 56); F3DZEXOpcode opcode = (F3DZEXOpcode)(instructions[i] >> 56);
uint64_t data = instructions[i]; uint64_t data = instructions[i];
@ -355,7 +341,7 @@ string ZDisplayList::GetSourceOutputCode(std::string prefix)
int segNum = (data & 0xFF000000) >> 24; int segNum = (data & 0xFF000000) >> 24;
Declaration* dListDecl = nullptr; Declaration* dListDecl = nullptr;
if (parent != nullptr) if (parent != nullptr)
dListDecl = parent->GetDeclaration(SEG2FILESPACE(data)); dListDecl = parent->GetDeclaration(SEG2FILESPACE(data));
@ -370,14 +356,14 @@ string ZDisplayList::GetSourceOutputCode(std::string prefix)
if (dListDecl != nullptr) if (dListDecl != nullptr)
sprintf(line, "gsSPBranchList(%s),", dListDecl->varName.c_str()); sprintf(line, "gsSPBranchList(%s),", dListDecl->varName.c_str());
else else
sprintf(line, "gsSPBranchList(%sDlist0x%06X),", prefix.c_str(), SEG2FILESPACE(data)); sprintf(line, "gsSPBranchList(%sDlist0x%06lX),", prefix.c_str(), SEG2FILESPACE(data));
} }
else else
{ {
if (dListDecl != nullptr) if (dListDecl != nullptr)
sprintf(line, "gsSPDisplayList(%s),", dListDecl->varName.c_str()); sprintf(line, "gsSPDisplayList(%s),", dListDecl->varName.c_str());
else else
sprintf(line, "gsSPDisplayList(%sDlist0x%06X),", prefix.c_str(), SEG2FILESPACE(data)); sprintf(line, "gsSPDisplayList(%sDlist0x%06lX),", prefix.c_str(), SEG2FILESPACE(data));
} }
int segmentNumber = (data & 0xFF000000) >> 24; int segmentNumber = (data & 0xFF000000) >> 24;
@ -495,9 +481,9 @@ string ZDisplayList::GetSourceOutputCode(std::string prefix)
uint32_t fmt = (__ & 0xE0) >> 5; uint32_t fmt = (__ & 0xE0) >> 5;
uint32_t siz = (__ & 0x18) >> 3; uint32_t siz = (__ & 0x18) >> 3;
if (Globals::Instance->debugMessages) if (Globals::Instance->verbosity >= VERBOSITY_DEBUG)
printf("TextureGenCheck G_SETTIMG\n"); printf("TextureGenCheck G_SETTIMG\n");
TextureGenCheck(prefix); // HOTSPOT TextureGenCheck(prefix); // HOTSPOT
lastTexFmt = (F3DZEXTexFormats)fmt; lastTexFmt = (F3DZEXTexFormats)fmt;
@ -513,11 +499,9 @@ string ZDisplayList::GetSourceOutputCode(std::string prefix)
if (segmentNumber != 2) if (segmentNumber != 2)
{ {
char texStr[2048]; char texStr[2048];
int32_t texAddress = SEG2FILESPACE(data); int32_t texAddress = SEG2FILESPACE(data);
Declaration* texDecl = nullptr; Declaration* texDecl = nullptr;
if (parent != nullptr) if (parent != nullptr)
{ {
if (Globals::Instance->HasSegment(segmentNumber)) if (Globals::Instance->HasSegment(segmentNumber))
@ -548,7 +532,7 @@ string ZDisplayList::GetSourceOutputCode(std::string prefix)
else else
{ {
//sprintf(line, "gsDPSetTextureImage(%s, %s, %i, 0x%08X),", fmtTbl[fmt].c_str(), sizTbl[siz].c_str(), www + 1, data & 0xFFFFFFFF); //sprintf(line, "gsDPSetTextureImage(%s, %s, %i, 0x%08X),", fmtTbl[fmt].c_str(), sizTbl[siz].c_str(), www + 1, data & 0xFFFFFFFF);
sprintf(line, "gsDPSetTextureImage(%s, %s, %i, %sTex_%06X),", fmtTbl[fmt].c_str(), sizTbl[siz].c_str(), www + 1, scene->GetName().c_str(), data & 0x00FFFFFF); sprintf(line, "gsDPSetTextureImage(%s, %s, %i, %sTex_%06lX),", fmtTbl[fmt].c_str(), sizTbl[siz].c_str(), www + 1, scene->GetName().c_str(), SEG2FILESPACE(data));
} }
} }
break; break;
@ -592,7 +576,7 @@ string ZDisplayList::GetSourceOutputCode(std::string prefix)
if (geoModeParam & 0x00800000) if (geoModeParam & 0x00800000)
geoModeStr += " | G_CLIPPING"; geoModeStr += " | G_CLIPPING";
if (ssssssss != 0) if (ssssssss != 0)
{ {
if ((~cccccc & 0xFF000000) != 0) if ((~cccccc & 0xFF000000) != 0)
@ -602,7 +586,7 @@ string ZDisplayList::GetSourceOutputCode(std::string prefix)
} }
else else
sprintf(line, "gsSPClearGeometryMode(%s),", geoModeStr.c_str()); sprintf(line, "gsSPClearGeometryMode(%s),", geoModeStr.c_str());
//sprintf(line, "gsSPGeometryMode(0x%08X, 0x%08X),", ~cccccc, ssssssss); //sprintf(line, "gsSPGeometryMode(0x%08X, 0x%08X),", ~cccccc, ssssssss);
} }
break; break;
@ -632,7 +616,7 @@ string ZDisplayList::GetSourceOutputCode(std::string prefix)
int mode2 = (dd & 0x33330000) >> 0; int mode2 = (dd & 0x33330000) >> 0;
// TODO: Jesus Christ This is Messy // TODO: Jesus Christ This is Messy
uint32_t tblA[] = uint32_t tblA[] =
{ {
G_RM_FOG_SHADE_A, G_RM_FOG_PRIM_A, G_RM_PASS, G_RM_AA_ZB_OPA_SURF, G_RM_FOG_SHADE_A, G_RM_FOG_PRIM_A, G_RM_PASS, G_RM_AA_ZB_OPA_SURF,
@ -671,7 +655,7 @@ string ZDisplayList::GetSourceOutputCode(std::string prefix)
G_RM_ADD2, G_RM_NOOP2,G_RM_VISCVG2, G_RM_OPA_CI2 G_RM_ADD2, G_RM_NOOP2,G_RM_VISCVG2, G_RM_OPA_CI2
}; };
map<uint32_t, string> str = map<uint32_t, string> str =
{ {
{ G_RM_FOG_SHADE_A, "G_RM_FOG_SHADE_A" }, { G_RM_FOG_SHADE_A, "G_RM_FOG_SHADE_A" },
{ G_RM_FOG_PRIM_A, "G_RM_FOG_PRIM_A" }, { G_RM_FOG_PRIM_A, "G_RM_FOG_PRIM_A" },
@ -865,13 +849,13 @@ string ZDisplayList::GetSourceOutputCode(std::string prefix)
lastTexWidth = (uuu >> shiftAmtW) + 1; lastTexWidth = (uuu >> shiftAmtW) + 1;
lastTexHeight = (vvv >> shiftAmtH) + 1; lastTexHeight = (vvv >> shiftAmtH) + 1;
if (Globals::Instance->debugMessages) if (Globals::Instance->verbosity >= VERBOSITY_DEBUG)
printf("lastTexWidth: %i lastTexHeight: %i, lastTexSizTest: 0x%x, lastTexFmt: 0x%x\n", lastTexWidth, lastTexHeight, (uint32_t)lastTexSizTest, (uint32_t)lastTexFmt); printf("lastTexWidth: %i lastTexHeight: %i, lastTexSizTest: 0x%x, lastTexFmt: 0x%x\n", lastTexWidth, lastTexHeight, (uint32_t)lastTexSizTest, (uint32_t)lastTexFmt);
if (Globals::Instance->debugMessages) if (Globals::Instance->verbosity >= VERBOSITY_DEBUG)
printf("TextureGenCheck G_SETTILESIZE\n"); printf("TextureGenCheck G_SETTILESIZE\n");
TextureGenCheck(prefix); TextureGenCheck(prefix);
sprintf(line, "gsDPSetTileSize(%i, %i, %i, %i, %i),", i, sss, ttt, uuu, vvv); sprintf(line, "gsDPSetTileSize(%i, %i, %i, %i, %i),", i, sss, ttt, uuu, vvv);
@ -928,10 +912,11 @@ string ZDisplayList::GetSourceOutputCode(std::string prefix)
lastTexHeight = sqrt(ccc + 1); lastTexHeight = sqrt(ccc + 1);
lastTexLoaded = true; lastTexLoaded = true;
lastTexIsPalette = true;
if (Globals::Instance->debugMessages) if (Globals::Instance->verbosity >= VERBOSITY_DEBUG)
printf("TextureGenCheck G_LOADTLUT (lastCISiz: %i)\n", (uint32_t)lastCISiz); printf("TextureGenCheck G_LOADTLUT (lastCISiz: %i)\n", (uint32_t)lastCISiz);
TextureGenCheck(prefix); TextureGenCheck(prefix);
sprintf(line, "gsDPLoadTLUTCmd(%i, %i),", t, ccc); sprintf(line, "gsDPLoadTLUTCmd(%i, %i),", t, ccc);
@ -995,9 +980,9 @@ string ZDisplayList::GetSourceOutputCode(std::string prefix)
case F3DZEXOpcode::G_ENDDL: case F3DZEXOpcode::G_ENDDL:
sprintf(line, "gsSPEndDisplayList(),"); sprintf(line, "gsSPEndDisplayList(),");
if (Globals::Instance->debugMessages) if (Globals::Instance->verbosity >= VERBOSITY_DEBUG)
printf("TextureGenCheck G_ENDDL\n"); printf("TextureGenCheck G_ENDDL\n");
TextureGenCheck(prefix); TextureGenCheck(prefix);
break; break;
case F3DZEXOpcode::G_RDPHALF_1: case F3DZEXOpcode::G_RDPHALF_1:
@ -1060,7 +1045,7 @@ string ZDisplayList::GetSourceOutputCode(std::string prefix)
#endif #endif
sourceOutput += line; sourceOutput += line;
if (i < instructions.size() - 1) if (i < instructions.size() - 1)
sourceOutput += "\n"; sourceOutput += "\n";
} }
@ -1091,7 +1076,7 @@ string ZDisplayList::GetSourceOutputCode(std::string prefix)
} }
defines += StringHelper::Sprintf("#define %sVtx_%06X ((u32)%sVtx_%06X + 0x%06X)\n", prefix.c_str(), verticesSorted[i + 1].first, prefix.c_str(), verticesSorted[i].first, verticesSorted[i + 1].first - verticesSorted[i].first); defines += StringHelper::Sprintf("#define %sVtx_%06X ((u32)%sVtx_%06X + 0x%06X)\n", prefix.c_str(), verticesSorted[i + 1].first, prefix.c_str(), verticesSorted[i].first, verticesSorted[i + 1].first - verticesSorted[i].first);
int nSize = (int)vertices[verticesSorted[i].first].size(); int nSize = (int)vertices[verticesSorted[i].first].size();
vertices.erase(verticesSorted[i + 1].first); vertices.erase(verticesSorted[i + 1].first);
@ -1126,8 +1111,8 @@ string ZDisplayList::GetSourceOutputCode(std::string prefix)
if (parent != nullptr) if (parent != nullptr)
{ {
parent->AddDeclarationArray(item.first, DeclarationAlignment::None, item.second.size() * 16, "Vtx", parent->AddDeclarationArray(item.first, DeclarationAlignment::None, item.second.size() * 16, "static Vtx",
StringHelper::Sprintf("%sVtx_%06X", prefix.c_str(), item.first, item.second.size()), 0, declaration); StringHelper::Sprintf("%sVtx_%06X", prefix.c_str(), item.first, item.second.size()), item.second.size(), declaration);
} }
} }
@ -1178,24 +1163,32 @@ string ZDisplayList::GetSourceOutputCode(std::string prefix)
break; break;
int texSize = textures[texturesSorted[i].first]->GetRawDataSize(); int texSize = textures[texturesSorted[i].first]->GetRawDataSize();
if ((texturesSorted[i].first + texSize) > texturesSorted[i + 1].first) if ((texturesSorted[i].first + texSize) > texturesSorted[i + 1].first)
{ {
int intersectAmt = (texturesSorted[i].first + texSize) - texturesSorted[i + 1].first; int intersectAmt = (texturesSorted[i].first + texSize) - texturesSorted[i + 1].first;
// If we're working with a palette, resize it to its "real" dimensions
if (texturesSorted[i].second->isPalette)
{
texturesSorted[i].second->SetWidth(intersectAmt / 2);
texturesSorted[i].second->SetHeight(1);
}
else
{
defines += StringHelper::Sprintf("#define %sTex_%06X ((u32)%sTex_%06X + 0x%06X)\n", prefix.c_str(), texturesSorted[i + 1].first, prefix.c_str(),
texturesSorted[i].first, texturesSorted[i + 1].first - texturesSorted[i].first);
defines += StringHelper::Sprintf("#define %sTex_%06X ((u32)%sTex_%06X + 0x%06X)\n", prefix.c_str(), texturesSorted[i + 1].first, prefix.c_str(), textures.erase(texturesSorted[i + 1].first);
texturesSorted[i].first, texturesSorted[i + 1].first - texturesSorted[i].first); texturesSorted.erase(texturesSorted.begin() + i + 1);
textures.erase(texturesSorted[i + 1].first); i--;
texturesSorted.erase(texturesSorted.begin() + i + 1); }
i--;
} }
} }
} }
} }
// Generate Texture Declarations // Generate Texture Declarations
for (pair<int32_t, ZTexture*> item : textures) for (pair<int32_t, ZTexture*> item : textures)
{ {
@ -1208,7 +1201,7 @@ string ZDisplayList::GetSourceOutputCode(std::string prefix)
{ {
if (parent->GetDeclaration(item.first) == nullptr) if (parent->GetDeclaration(item.first) == nullptr)
{ {
if (Globals::Instance->debugMessages) if (Globals::Instance->verbosity >= VERBOSITY_DEBUG)
printf("SAVING IMAGE TO %s\n", Globals::Instance->outputPath.c_str()); printf("SAVING IMAGE TO %s\n", Globals::Instance->outputPath.c_str());
item.second->Save(Globals::Instance->outputPath); item.second->Save(Globals::Instance->outputPath);
@ -1222,7 +1215,7 @@ string ZDisplayList::GetSourceOutputCode(std::string prefix)
} }
} }
if (parent != nullptr) if (parent != nullptr)
{ {
parent->AddDeclarationArray(rawDataIndex, DeclarationAlignment::None, GetRawDataSize(), "Gfx", StringHelper::Sprintf("%s", name.c_str()), 0, sourceOutput); parent->AddDeclarationArray(rawDataIndex, DeclarationAlignment::None, GetRawDataSize(), "Gfx", StringHelper::Sprintf("%s", name.c_str()), 0, sourceOutput);
@ -1235,28 +1228,28 @@ string ZDisplayList::GetSourceOutputCode(std::string prefix)
// HOTSPOT // HOTSPOT
void ZDisplayList::TextureGenCheck(string prefix) void ZDisplayList::TextureGenCheck(string prefix)
{ {
if (TextureGenCheck(fileData, textures, scene, parent, prefix, lastTexWidth, lastTexHeight, lastTexAddr, lastTexSeg, lastTexFmt, lastTexSiz, lastTexLoaded)) if (TextureGenCheck(fileData, textures, scene, parent, prefix, lastTexWidth, lastTexHeight, lastTexAddr, lastTexSeg, lastTexFmt, lastTexSiz, lastTexLoaded, lastTexIsPalette))
{ {
lastTexAddr = 0; lastTexAddr = 0;
lastTexLoaded = false; lastTexLoaded = false;
lastTexIsPalette = false;
} }
} }
// HOTSPOT // HOTSPOT
bool ZDisplayList::TextureGenCheck(vector<uint8_t> fileData, map<uint32_t, ZTexture*>& textures, ZRoom* scene, ZFile* parent, string prefix, uint32_t texWidth, uint32_t texHeight, uint32_t texAddr, uint32_t texSeg, F3DZEXTexFormats texFmt, F3DZEXTexSizes texSiz, bool texLoaded) bool ZDisplayList::TextureGenCheck(vector<uint8_t> fileData, map<uint32_t, ZTexture*>& textures, ZRoom* scene, ZFile* parent, string prefix, uint32_t texWidth, uint32_t texHeight, uint32_t texAddr, uint32_t texSeg, F3DZEXTexFormats texFmt, F3DZEXTexSizes texSiz, bool texLoaded, bool texIsPalette)
{ {
int segmentNumber = (texSeg & 0xFF000000) >> 24; int segmentNumber = (texSeg & 0xFF000000) >> 24;
if (Globals::Instance->debugMessages) if (Globals::Instance->verbosity >= VERBOSITY_DEBUG)
printf("TextureGenCheck seg=%i width=%i height=%i addr=0x%06X\n", segmentNumber, texWidth, texHeight, texAddr); printf("TextureGenCheck seg=%i width=%i height=%i ispal=%i addr=0x%06X\n", segmentNumber, texWidth, texHeight, texIsPalette, texAddr);
if (texAddr != 0 && texWidth != 0 && texHeight != 0 && texLoaded && Globals::Instance->HasSegment(segmentNumber)) if (texAddr != 0 && texWidth != 0 && texHeight != 0 && texLoaded && Globals::Instance->HasSegment(segmentNumber))
{ {
if (segmentNumber != 2) // Not from a scene file if (segmentNumber != 2) // Not from a scene file
{ {
ZTexture* tex = ZTexture::FromBinary(TexFormatToTexType(texFmt, texSiz), fileData, texAddr, StringHelper::Sprintf("%sTex_%06X", prefix.c_str(), texAddr), texWidth, texHeight); ZTexture* tex = ZTexture::FromBinary(TexFormatToTexType(texFmt, texSiz), fileData, texAddr, StringHelper::Sprintf("%sTex_%06X", prefix.c_str(), texAddr), texWidth, texHeight);
tex->isPalette = texIsPalette;
//tex->Save(Globals::Instance->outputPath);
textures[texAddr] = tex; textures[texAddr] = tex;
return true; return true;
@ -1266,12 +1259,10 @@ bool ZDisplayList::TextureGenCheck(vector<uint8_t> fileData, map<uint32_t, ZText
ZTexture* tex = ZTexture::FromBinary(TexFormatToTexType(texFmt, texSiz), scene->GetRawData(), texAddr, ZTexture* tex = ZTexture::FromBinary(TexFormatToTexType(texFmt, texSiz), scene->GetRawData(), texAddr,
StringHelper::Sprintf("%sTex_%06X", Globals::Instance->lastScene->GetName().c_str(), texAddr), texWidth, texHeight); StringHelper::Sprintf("%sTex_%06X", Globals::Instance->lastScene->GetName().c_str(), texAddr), texWidth, texHeight);
//tex->Save(Globals::Instance->outputPath);
if (scene != nullptr) if (scene != nullptr)
{ {
scene->textures[texAddr] = tex; scene->textures[texAddr] = tex;
scene->parent->AddDeclarationIncludeArray(texAddr, StringHelper::Sprintf("%s/%s.%s.inc.c", scene->parent->AddDeclarationIncludeArray(texAddr, StringHelper::Sprintf("%s/%s.%s.inc.c",
Globals::Instance->outputPath.c_str(), Path::GetFileNameWithoutExtension(tex->GetName()).c_str(), tex->GetExternalExtension().c_str()), tex->GetRawDataSize(), Globals::Instance->outputPath.c_str(), Path::GetFileNameWithoutExtension(tex->GetName()).c_str(), tex->GetExternalExtension().c_str()), tex->GetRawDataSize(),
"u64", StringHelper::Sprintf("%sTex_%06X", Globals::Instance->lastScene->GetName().c_str(), texAddr), 0); "u64", StringHelper::Sprintf("%sTex_%06X", Globals::Instance->lastScene->GetName().c_str(), texAddr), 0);
} }
@ -1318,7 +1309,7 @@ TextureType ZDisplayList::TexFormatToTexType(F3DZEXTexFormats fmt, F3DZEXTexSize
return TextureType::RGBA16bpp; return TextureType::RGBA16bpp;
} }
void ZDisplayList::Save(string outFolder) void ZDisplayList::Save(const std::string& outFolder)
{ {
//HLModelIntermediette* mdl = HLModelIntermediette::FromZDisplayList(this); //HLModelIntermediette* mdl = HLModelIntermediette::FromZDisplayList(this);
@ -1382,7 +1373,7 @@ Vertex::Vertex(int16_t nX, int16_t nY, int16_t nZ, uint16_t nFlag, int16_t nS, i
Vertex::Vertex(std::vector<uint8_t> rawData, int rawDataIndex) Vertex::Vertex(std::vector<uint8_t> rawData, int rawDataIndex)
{ {
uint8_t* data = rawData.data(); const uint8_t* data = rawData.data();
x = BitConverter::ToInt16BE(data, rawDataIndex + 0); x = BitConverter::ToInt16BE(data, rawDataIndex + 0);
y = BitConverter::ToInt16BE(data, rawDataIndex + 2); y = BitConverter::ToInt16BE(data, rawDataIndex + 2);
@ -1394,4 +1385,4 @@ Vertex::Vertex(std::vector<uint8_t> rawData, int rawDataIndex)
g = data[rawDataIndex + 13]; g = data[rawDataIndex + 13];
b = data[rawDataIndex + 14]; b = data[rawDataIndex + 14];
a = data[rawDataIndex + 15]; a = data[rawDataIndex + 15];
} }

View file

@ -205,7 +205,7 @@ public:
uint16_t flag; uint16_t flag;
int16_t s, t; int16_t s, t;
uint8_t r, g, b, a; uint8_t r, g, b, a;
Vertex(); Vertex();
Vertex(int16_t nX, int16_t nY, int16_t nZ, uint16_t nFlag, int16_t nS, int16_t nT, uint8_t nR, uint8_t nG, uint8_t nB, uint8_t nA); Vertex(int16_t nX, int16_t nY, int16_t nZ, uint16_t nFlag, int16_t nS, int16_t nT, uint8_t nR, uint8_t nG, uint8_t nB, uint8_t nA);
Vertex(std::vector<uint8_t> rawData, int rawDataIndex); Vertex(std::vector<uint8_t> rawData, int rawDataIndex);
@ -219,6 +219,7 @@ protected:
F3DZEXTexFormats lastTexFmt; F3DZEXTexFormats lastTexFmt;
F3DZEXTexSizes lastTexSiz, lastTexSizTest, lastCISiz; F3DZEXTexSizes lastTexSiz, lastTexSizTest, lastCISiz;
bool lastTexLoaded; bool lastTexLoaded;
bool lastTexIsPalette;
//void ParseXML(tinyxml2::XMLElement* reader); //void ParseXML(tinyxml2::XMLElement* reader);
static TextureType TexFormatToTexType(F3DZEXTexFormats fmt, F3DZEXTexSizes siz); static TextureType TexFormatToTexType(F3DZEXTexFormats fmt, F3DZEXTexSizes siz);
@ -253,13 +254,13 @@ public:
static ZDisplayList* BuildFromXML(tinyxml2::XMLElement* reader, std::string inFolder, bool readFile); static ZDisplayList* BuildFromXML(tinyxml2::XMLElement* reader, std::string inFolder, bool readFile);
void TextureGenCheck(std::string prefix); void TextureGenCheck(std::string prefix);
static bool TextureGenCheck(std::vector<uint8_t> fileData, std::map<uint32_t, ZTexture*>& textures, ZRoom* scene, ZFile* parent, std::string prefix, uint32_t texWidth, uint32_t texHeight, uint32_t texAddr, uint32_t texSeg, F3DZEXTexFormats texFmt, F3DZEXTexSizes texSiz, bool texLoaded); static bool TextureGenCheck(std::vector<uint8_t> fileData, std::map<uint32_t, ZTexture*>& textures, ZRoom* scene, ZFile* parent, std::string prefix, uint32_t texWidth, uint32_t texHeight, uint32_t texAddr, uint32_t texSeg, F3DZEXTexFormats texFmt, F3DZEXTexSizes texSiz, bool texLoaded, bool texIsPalette);
static int GetDListLength(std::vector<uint8_t> rawData, int rawDataIndex); static int GetDListLength(std::vector<uint8_t> rawData, int rawDataIndex);
std::vector<uint8_t> GetRawData(); std::vector<uint8_t> GetRawData();
int GetRawDataSize(); int GetRawDataSize();
std::string GetSourceOutputHeader(std::string prefix); std::string GetSourceOutputHeader(const std::string& prefix);
std::string GetSourceOutputCode(std::string prefix); std::string GetSourceOutputCode(const std::string& prefix);
void Save(std::string outFolder); void Save(const std::string& outFolder);
virtual void GenerateHLIntermediette(HLFileIntermediette& hlFile); virtual void GenerateHLIntermediette(HLFileIntermediette& hlFile);
}; };

View file

@ -6,6 +6,8 @@
#include "ZAnimation.h" #include "ZAnimation.h"
#include "ZSkeleton.h" #include "ZSkeleton.h"
#include "ZCollision.h" #include "ZCollision.h"
#include "ZScalar.h"
#include "ZVector.h"
#include "Path.h" #include "Path.h"
#include "File.h" #include "File.h"
#include "Directory.h" #include "Directory.h"
@ -50,6 +52,12 @@ ZFile::ZFile(ZFileMode mode, XMLElement* reader, string nBasePath, string nOutPa
ParseXML(mode, reader, placeholderMode); ParseXML(mode, reader, placeholderMode);
} }
ZFile::~ZFile()
{
for (ZResource* res : resources)
delete res;
}
void ZFile::ParseXML(ZFileMode mode, XMLElement* reader, bool placeholderMode) void ZFile::ParseXML(ZFileMode mode, XMLElement* reader, bool placeholderMode)
{ {
name = reader->Attribute("Name"); name = reader->Attribute("Name");
@ -90,7 +98,8 @@ void ZFile::ParseXML(ZFileMode mode, XMLElement* reader, bool placeholderMode)
if (child->Attribute("Offset") != NULL) if (child->Attribute("Offset") != NULL)
rawDataIndex = strtol(StringHelper::Split(child->Attribute("Offset"), "0x")[1].c_str(), NULL, 16); rawDataIndex = strtol(StringHelper::Split(child->Attribute("Offset"), "0x")[1].c_str(), NULL, 16);
printf("%s: 0x%06X\n", child->Attribute("Name"), rawDataIndex); if (Globals::Instance->verbosity >= VERBOSITY_INFO)
printf("%s: 0x%06X\n", child->Attribute("Name"), rawDataIndex);
if (string(child->Name()) == "Texture") if (string(child->Name()) == "Texture")
{ {
@ -239,25 +248,50 @@ void ZFile::ParseXML(ZFileMode mode, XMLElement* reader, bool placeholderMode)
resources.push_back(res); resources.push_back(res);
} }
else if (string(child->Name()) == "Vec3s") else if (string(child->Name()) == "Scalar")
{
}
else if (string(child->Name()) == "Vec3f")
{ {
ZScalar* scalar = nullptr;
} if (mode == ZFileMode::Extract)
else if (string(child->Name()) == "Vec3i") scalar = ZScalar::ExtractFromXML(child, rawData, rawDataIndex, folderName);
{
} if (scalar != nullptr)
else if (string(child->Name()) == "String") {
{ scalar->parent = this;
resources.push_back(scalar);
rawDataIndex += scalar->GetRawDataSize();
}
else
{
if (Globals::Instance->verbosity >= VERBOSITY_DEBUG)
printf("No ZScalar created!!");
}
}
else if (string(child->Name()) == "Vector")
{
ZVector* vector = nullptr;
if (mode == ZFileMode::Extract)
vector = ZVector::ExtractFromXML(child, rawData, rawDataIndex, folderName);
if (vector != nullptr)
{
vector->parent = this;
resources.push_back(vector);
rawDataIndex += vector->GetRawDataSize();
}
else
{
if (Globals::Instance->verbosity >= VERBOSITY_DEBUG)
printf("No ZVector created!!");
}
} }
else else
{ {
if (Globals::Instance->verbosity >= VERBOSITY_DEBUG)
printf("Encountered unknown resource type: %s\n", string(child->Name()).c_str());
} }
} }
} }
@ -328,7 +362,9 @@ void ZFile::ExtractResources(string outputDir)
for (ZResource* res : resources) for (ZResource* res : resources)
{ {
printf("Saving resource %s\n", res->GetName().c_str()); if (Globals::Instance->verbosity >= VERBOSITY_INFO)
printf("Saving resource %s\n", res->GetName().c_str());
res->CalcHash(); // TEST res->CalcHash(); // TEST
res->Save(outputPath); res->Save(outputPath);
} }
@ -621,6 +657,7 @@ string ZFile::ProcessDeclarations()
// Account for padding/alignment // Account for padding/alignment
int lastAddr = 0; int lastAddr = 0;
int lastSize = 0;
//printf("RANGE START: 0x%06X - RANGE END: 0x%06X\n", rangeStart, rangeEnd); //printf("RANGE START: 0x%06X - RANGE END: 0x%06X\n", rangeStart, rangeEnd);
@ -707,45 +744,47 @@ string ZFile::ProcessDeclarations()
// Handle unaccounted data // Handle unaccounted data
lastAddr = 0; lastAddr = 0;
lastSize = 0;
for (pair<int32_t, Declaration*> item : declarationKeysSorted) for (pair<int32_t, Declaration*> item : declarationKeysSorted)
{ {
if (lastAddr != 0 && item.first >= rangeStart && item.first < rangeEnd) if (item.first >= rangeStart && item.first < rangeEnd)
{ {
if (lastAddr + declarations[lastAddr]->size > item.first) if (lastAddr != 0 && declarations.find(lastAddr) != declarations.end() && lastAddr + declarations[lastAddr]->size > item.first)
{ {
// UH OH! printf("WARNING: Intersection detected from 0x%06X:0x%06X, conflicts with 0x%06X\n", lastAddr, lastAddr + declarations[lastAddr]->size, item.first);
int bp = 0;
} }
uint8_t* rawDataArr = rawData.data(); uint8_t* rawDataArr = rawData.data();
if (lastAddr + declarations[lastAddr]->size != item.first) if (lastAddr + lastSize != item.first)
{ {
int diff = item.first - (lastAddr + declarations[lastAddr]->size); //int diff = item.first - (lastAddr + declarations[lastAddr]->size);
int diff = item.first - (lastAddr + lastSize);
string src = " "; string src = " ";
for (int i = 0; i < diff; i++) for (int i = 0; i < diff; i++)
{ {
src += StringHelper::Sprintf("0x%02X, ", rawDataArr[lastAddr + declarations[lastAddr]->size + i]); //src += StringHelper::Sprintf("0x%02X, ", rawDataArr[lastAddr + declarations[lastAddr]->size + i]);
src += StringHelper::Sprintf("0x%02X, ", rawDataArr[lastAddr + lastSize + i]);
if ((i % 16 == 15) && (i != (diff - 1))) if ((i % 16 == 15) && (i != (diff - 1)))
src += "\n "; src += "\n ";
} }
if (declarations.find(lastAddr + declarations[lastAddr]->size) == declarations.end()) if (declarations.find(lastAddr + lastSize) == declarations.end())
{ {
if (diff > 0) if (diff > 0)
{ {
AddDeclarationArray(lastAddr + declarations[lastAddr]->size, DeclarationAlignment::None, diff, "static u8", StringHelper::Sprintf("unaccounted_%06X", lastAddr + declarations[lastAddr]->size), //AddDeclarationArray(lastAddr + declarations[lastAddr]->size, DeclarationAlignment::None, diff, "static u8", StringHelper::Sprintf("unaccounted_%06X", lastAddr + declarations[lastAddr]->size), diff, src);
diff, src); AddDeclarationArray(lastAddr + lastSize, DeclarationAlignment::None, diff, "static u8", StringHelper::Sprintf("unaccounted_%06X", lastAddr + lastSize), diff, src);
} }
} }
} }
} }
lastAddr = item.first; lastAddr = item.first;
lastSize = item.second->size;
} }
// TODO: THIS CONTAINS REDUNDANCIES. CLEAN THIS UP! // TODO: THIS CONTAINS REDUNDANCIES. CLEAN THIS UP!
@ -780,6 +819,30 @@ string ZFile::ProcessDeclarations()
return lhs.first < rhs.first; return lhs.first < rhs.first;
}); });
// First, handle the prototypes (static only for now)
int protoCnt = 0;
for (pair<int32_t, Declaration*> item : declarationKeysSorted)
{
if (item.second->includePath == "" && StringHelper::StartsWith(item.second->varType, "static ") && !StringHelper::StartsWith(item.second->varName, "unaccounted_"))
{
if (item.second->isArray)
{
if (item.second->arrayItemCnt == 0)
output += StringHelper::Sprintf("%s %s[];\n", item.second->varType.c_str(), item.second->varName.c_str());
else
output += StringHelper::Sprintf("%s %s[%i];\n", item.second->varType.c_str(), item.second->varName.c_str(), item.second->arrayItemCnt);
}
else
output += StringHelper::Sprintf("%s %s;\n", item.second->varType.c_str(), item.second->varName.c_str());
protoCnt++;
}
}
if (protoCnt > 0)
output += "\n";
// Next, output the actual declarations
for (pair<int32_t, Declaration*> item : declarationKeysSorted) for (pair<int32_t, Declaration*> item : declarationKeysSorted)
{ {
if (item.second->includePath != "") if (item.second->includePath != "")

View file

@ -28,6 +28,7 @@ public:
ZFile(std::string nOutPath, std::string nName); ZFile(std::string nOutPath, std::string nName);
ZFile(ZFileMode mode, tinyxml2::XMLElement* reader, std::string nBasePath, std::string nOutPath, bool placeholderMode); ZFile(ZFileMode mode, tinyxml2::XMLElement* reader, std::string nBasePath, std::string nOutPath, bool placeholderMode);
~ZFile();
std::string GetVarName(int address); std::string GetVarName(int address);
void ExtractResources(std::string outputDir); void ExtractResources(std::string outputDir);

View file

@ -25,7 +25,7 @@ void ZResource::ParseXML(tinyxml2::XMLElement* reader)
outName = name; outName = name;
} }
void ZResource::Save(string outFolder) void ZResource::Save(const std::string& outFolder)
{ {
} }
@ -46,7 +46,7 @@ std::string ZResource::GetOutName()
void ZResource::SetName(string nName) void ZResource::SetName(string nName)
{ {
name = nName; name = std::move(nName);
} }
bool ZResource::IsExternalResource() bool ZResource::IsExternalResource()
@ -84,12 +84,12 @@ void ZResource::SetRawDataIndex(int value)
rawDataIndex = value; rawDataIndex = value;
} }
string ZResource::GetSourceOutputCode(std::string prefix) string ZResource::GetSourceOutputCode(const std::string& prefix)
{ {
return ""; return "";
} }
string ZResource::GetSourceOutputHeader(std::string prefix) string ZResource::GetSourceOutputHeader(const std::string& prefix)
{ {
return ""; return "";
} }

View file

@ -33,7 +33,9 @@ enum class ZResourceType
Cutscene, Cutscene,
Blob, Blob,
Limb, Limb,
Skeleton Skeleton,
Scalar,
Vector
}; };
class ZResource class ZResource
@ -45,7 +47,7 @@ public:
ZResource(); ZResource();
virtual void ParseXML(tinyxml2::XMLElement* reader); virtual void ParseXML(tinyxml2::XMLElement* reader);
virtual void Save(std::string outFolder); virtual void Save(const std::string& outFolder);
virtual void PreGenSourceFiles(); virtual void PreGenSourceFiles();
std::string GetName(); std::string GetName();
std::string GetOutName(); std::string GetOutName();
@ -57,8 +59,8 @@ public:
virtual int GetRawDataIndex(); virtual int GetRawDataIndex();
virtual int GetRawDataSize(); virtual int GetRawDataSize();
virtual void SetRawDataIndex(int value); virtual void SetRawDataIndex(int value);
virtual std::string GetSourceOutputCode(std::string prefix); virtual std::string GetSourceOutputCode(const std::string& prefix);
virtual std::string GetSourceOutputHeader(std::string prefix); virtual std::string GetSourceOutputHeader(const std::string& prefix);
virtual void GenerateHLIntermediette(HLFileIntermediette& hlFile); virtual void GenerateHLIntermediette(HLFileIntermediette& hlFile);
virtual ZResourceType GetResourceType(); virtual ZResourceType GetResourceType();
virtual void CalcHash(); virtual void CalcHash();
@ -115,4 +117,4 @@ public:
protected: protected:
Declaration(DeclarationAlignment nAlignment, DeclarationPadding nPadding, uint32_t nSize, std::string nText); Declaration(DeclarationAlignment nAlignment, DeclarationPadding nPadding, uint32_t nSize, std::string nText);
}; };

View file

@ -19,6 +19,14 @@ SetActorList::SetActorList(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawD
zRoom->parent->AddDeclarationPlaceholder(segmentOffset); zRoom->parent->AddDeclarationPlaceholder(segmentOffset);
} }
SetActorList::~SetActorList()
{
for (ActorSpawnEntry* entry : actors)
delete entry;
actors.clear();
}
string SetActorList::GetSourceOutputCode(std::string prefix) string SetActorList::GetSourceOutputCode(std::string prefix)
{ {
return ""; return "";
@ -66,9 +74,9 @@ string SetActorList::GenerateSourceCodePass2(string roomName, int baseAddress)
index++; index++;
} }
zRoom->parent->AddDeclarationArray(segmentOffset, DeclarationAlignment::None, DeclarationPadding::Pad16, actors.size() * 16, zRoom->parent->AddDeclarationArray(segmentOffset, DeclarationAlignment::None, DeclarationPadding::Pad16, actors.size() * 16,
"ActorEntry", StringHelper::Sprintf("%sActorList0x%06X", roomName.c_str(), segmentOffset), actors.size(), declaration); "ActorEntry", StringHelper::Sprintf("%sActorList0x%06X", roomName.c_str(), segmentOffset), actors.size(), declaration);
return sourceOutput; return sourceOutput;
} }
@ -94,7 +102,7 @@ RoomCommand SetActorList::GetRoomCommand()
ActorSpawnEntry::ActorSpawnEntry(std::vector<uint8_t> rawData, int rawDataIndex) ActorSpawnEntry::ActorSpawnEntry(std::vector<uint8_t> rawData, int rawDataIndex)
{ {
uint8_t* data = rawData.data(); const uint8_t* data = rawData.data();
actorNum = BitConverter::ToInt16BE(data, rawDataIndex + 0); actorNum = BitConverter::ToInt16BE(data, rawDataIndex + 0);
posX = BitConverter::ToInt16BE(data, rawDataIndex + 2); posX = BitConverter::ToInt16BE(data, rawDataIndex + 2);
@ -104,4 +112,4 @@ ActorSpawnEntry::ActorSpawnEntry(std::vector<uint8_t> rawData, int rawDataIndex)
rotY = BitConverter::ToInt16BE(data, rawDataIndex + 10); rotY = BitConverter::ToInt16BE(data, rawDataIndex + 10);
rotZ = BitConverter::ToInt16BE(data, rawDataIndex + 12); rotZ = BitConverter::ToInt16BE(data, rawDataIndex + 12);
initVar = BitConverter::ToInt16BE(data, rawDataIndex + 14); initVar = BitConverter::ToInt16BE(data, rawDataIndex + 14);
} }

View file

@ -21,6 +21,7 @@ class SetActorList : public ZRoomCommand
{ {
public: public:
SetActorList(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex); SetActorList(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex);
~SetActorList();
std::string GetSourceOutputCode(std::string prefix); std::string GetSourceOutputCode(std::string prefix);
virtual std::string GenerateSourceCodePass1(std::string roomName, int baseAddress); virtual std::string GenerateSourceCodePass1(std::string roomName, int baseAddress);

View file

@ -44,8 +44,8 @@ string SetAlternateHeaders::GenerateSourceCodePass1(string roomName, int baseAdd
declaration += StringHelper::Sprintf("\t(u32)&%sSet%04XCmd00,\n", roomName.c_str(), headers[i] & 0x00FFFFFF); declaration += StringHelper::Sprintf("\t(u32)&%sSet%04XCmd00,\n", roomName.c_str(), headers[i] & 0x00FFFFFF);
} }
zRoom->parent->declarations[segmentOffset] = new Declaration(DeclarationAlignment::None, headers.size() * 4, zRoom->parent->AddDeclarationArray(segmentOffset, DeclarationAlignment::None, headers.size() * 4,
"u32", StringHelper::Sprintf("%sAlternateHeaders0x%06X", roomName.c_str(), segmentOffset), true, declaration); "u32", StringHelper::Sprintf("%sAlternateHeaders0x%06X", roomName.c_str(), segmentOffset), 0, declaration);
return sourceOutput; return sourceOutput;
} }

View file

@ -22,6 +22,15 @@ SetCutscenes::SetCutscenes(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawD
StringHelper::Sprintf("%sCutsceneData0x%06X", zRoom->GetName().c_str(), segmentOffset), 0, output); StringHelper::Sprintf("%sCutsceneData0x%06X", zRoom->GetName().c_str(), segmentOffset), 0, output);
} }
SetCutscenes::~SetCutscenes()
{
if (cutscene != nullptr)
{
delete cutscene;
cutscene = nullptr;
}
}
string SetCutscenes::GenerateSourceCodePass1(string roomName, int baseAddress) string SetCutscenes::GenerateSourceCodePass1(string roomName, int baseAddress)
{ {
return StringHelper::Sprintf("%s 0, (u32)%sCutsceneData0x%06X", ZRoomCommand::GenerateSourceCodePass1(roomName, baseAddress).c_str(), zRoom->GetName().c_str(), segmentOffset); return StringHelper::Sprintf("%s 0, (u32)%sCutsceneData0x%06X", ZRoomCommand::GenerateSourceCodePass1(roomName, baseAddress).c_str(), zRoom->GetName().c_str(), segmentOffset);

View file

@ -7,6 +7,7 @@ class SetCutscenes : public ZRoomCommand
{ {
public: public:
SetCutscenes(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex); SetCutscenes(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex);
~SetCutscenes();
std::string GetSourceOutputCode(std::string prefix); std::string GetSourceOutputCode(std::string prefix);
virtual std::string GenerateSourceCodePass1(std::string roomName, int baseAddress); virtual std::string GenerateSourceCodePass1(std::string roomName, int baseAddress);

View file

@ -16,6 +16,12 @@ SetEntranceList::SetEntranceList(ZRoom* nZRoom, std::vector<uint8_t> rawData, in
_rawDataIndex = rawDataIndex; _rawDataIndex = rawDataIndex;
} }
SetEntranceList::~SetEntranceList()
{
for (EntranceEntry* entry : entrances)
delete entry;
}
string SetEntranceList::GenerateSourceCodePass1(string roomName, int baseAddress) string SetEntranceList::GenerateSourceCodePass1(string roomName, int baseAddress)
{ {
string sourceOutput = StringHelper::Sprintf("%s 0x00, (u32)&%sEntranceList0x%06X", ZRoomCommand::GenerateSourceCodePass1(roomName, baseAddress).c_str(), zRoom->GetName().c_str(), segmentOffset); string sourceOutput = StringHelper::Sprintf("%s 0x00, (u32)&%sEntranceList0x%06X", ZRoomCommand::GenerateSourceCodePass1(roomName, baseAddress).c_str(), zRoom->GetName().c_str(), segmentOffset);

View file

@ -15,6 +15,7 @@ class SetEntranceList : public ZRoomCommand
{ {
public: public:
SetEntranceList(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex); SetEntranceList(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex);
~SetEntranceList();
virtual std::string GenerateSourceCodePass1(std::string roomName, int baseAddress); virtual std::string GenerateSourceCodePass1(std::string roomName, int baseAddress);
virtual std::string GenerateExterns(); virtual std::string GenerateExterns();

View file

@ -35,6 +35,12 @@ SetLightingSettings::SetLightingSettings(ZRoom* nZRoom, std::vector<uint8_t> raw
} }
} }
SetLightingSettings::~SetLightingSettings()
{
for (LightingSettings* setting : settings)
delete setting;
}
string SetLightingSettings::GenerateSourceCodePass1(string roomName, int baseAddress) string SetLightingSettings::GenerateSourceCodePass1(string roomName, int baseAddress)
{ {
return StringHelper::Sprintf("%s %i, (u32)&%sLightSettings0x%06X", ZRoomCommand::GenerateSourceCodePass1(roomName, baseAddress).c_str(), settings.size(), zRoom->GetName().c_str(), segmentOffset); return StringHelper::Sprintf("%s %i, (u32)&%sLightSettings0x%06X", ZRoomCommand::GenerateSourceCodePass1(roomName, baseAddress).c_str(), settings.size(), zRoom->GetName().c_str(), segmentOffset);
@ -62,7 +68,7 @@ RoomCommand SetLightingSettings::GetRoomCommand()
LightingSettings::LightingSettings(vector<uint8_t> rawData, int rawDataIndex) LightingSettings::LightingSettings(vector<uint8_t> rawData, int rawDataIndex)
{ {
uint8_t* data = rawData.data(); const uint8_t* data = rawData.data();
ambientClrR = data[rawDataIndex + 0]; ambientClrR = data[rawDataIndex + 0];
ambientClrG = data[rawDataIndex + 1]; ambientClrG = data[rawDataIndex + 1];
@ -90,4 +96,4 @@ LightingSettings::LightingSettings(vector<uint8_t> rawData, int rawDataIndex)
unk = BitConverter::ToInt16BE(data, rawDataIndex + 18); unk = BitConverter::ToInt16BE(data, rawDataIndex + 18);
drawDistance = BitConverter::ToInt16BE(data, rawDataIndex + 20); drawDistance = BitConverter::ToInt16BE(data, rawDataIndex + 20);
} }

View file

@ -21,6 +21,7 @@ class SetLightingSettings : public ZRoomCommand
{ {
public: public:
SetLightingSettings(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex); SetLightingSettings(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex);
~SetLightingSettings();
virtual std::string GenerateSourceCodePass1(std::string roomName, int baseAddress); virtual std::string GenerateSourceCodePass1(std::string roomName, int baseAddress);
virtual std::string GenerateSourceCodePass2(std::string roomName, int baseAddress); virtual std::string GenerateSourceCodePass2(std::string roomName, int baseAddress);

View file

@ -109,8 +109,6 @@ SetMesh::SetMesh(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex,
zRoom->parent->AddDeclaration(meshHeader0->dListStart + (meshHeader0->entries.size() * 8) + 0, DeclarationAlignment::None, DeclarationPadding::Pad16, 4, "static s32", zRoom->parent->AddDeclaration(meshHeader0->dListStart + (meshHeader0->entries.size() * 8) + 0, DeclarationAlignment::None, DeclarationPadding::Pad16, 4, "static s32",
"terminatorMaybe", " 0x01000000 "); "terminatorMaybe", " 0x01000000 ");
//zRoom->parent->declarations[meshHeader0->dListStart] = new Declaration(DeclarationAlignment::None, DeclarationPadding::Pad16, (meshHeader0->entries.size() * 8) + 4, declaration);
meshHeader = meshHeader0; meshHeader = meshHeader0;
} }
else if (meshHeaderType == 1) else if (meshHeaderType == 1)
@ -146,11 +144,6 @@ SetMesh::SetMesh(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex,
zRoom->parent->AddDeclaration(segmentOffset, DeclarationAlignment::None, DeclarationPadding::Pad16, 0x1E, "MeshHeader1Single", zRoom->parent->AddDeclaration(segmentOffset, DeclarationAlignment::None, DeclarationPadding::Pad16, 0x1E, "MeshHeader1Single",
StringHelper::Sprintf("%sMeshHeader0x%06X", zRoom->GetName().c_str(), segmentOffset), declaration); StringHelper::Sprintf("%sMeshHeader0x%06X", zRoom->GetName().c_str(), segmentOffset), declaration);
//if (headerSingle->imagePtr != 0)
//{
//zRoom->declarations[headerSingle->imagePtr] = new Declaration(DeclarationAlignment::None, DeclarationPadding::Pad16, 0x1E, declaration);
//}
meshHeader1 = headerSingle; meshHeader1 = headerSingle;
; } ; }
else if (fmt == 2) // Multi-Format else if (fmt == 2) // Multi-Format
@ -164,21 +157,18 @@ SetMesh::SetMesh(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex,
headerMulti->bgCnt = rawData[segmentOffset + 8]; headerMulti->bgCnt = rawData[segmentOffset + 8];
headerMulti->bgRecordPtr = BitConverter::ToInt32BE(rawData, segmentOffset + 12); headerMulti->bgRecordPtr = BitConverter::ToInt32BE(rawData, segmentOffset + 12);
//zRoom->declarations[segmentOffset] = new Declaration(DeclarationAlignment::None, DeclarationPadding::Pad16, 12, "");
declaration += StringHelper::Sprintf("{ { 1 }, 2, 0x%06X }, 0x%06X, 0x%06X", declaration += StringHelper::Sprintf("{ { 1 }, 2, 0x%06X }, 0x%06X, 0x%06X",
headerMulti->entryRecord, headerMulti->bgCnt, headerMulti->bgRecordPtr); headerMulti->entryRecord, headerMulti->bgCnt, headerMulti->bgRecordPtr);
zRoom->parent->AddDeclaration(segmentOffset, DeclarationAlignment::None, DeclarationPadding::Pad16, 16, "MeshHeader1Multi", zRoom->parent->AddDeclaration(segmentOffset, DeclarationAlignment::None, DeclarationPadding::Pad16, 16, "MeshHeader1Multi",
StringHelper::Sprintf("%sMeshHeader0x%06X", zRoom->GetName().c_str(), segmentOffset), declaration); StringHelper::Sprintf("%sMeshHeader0x%06X", zRoom->GetName().c_str(), segmentOffset), declaration);
//zRoom->parent->declarations[segmentOffset] = new Declaration(DeclarationAlignment::None, DeclarationPadding::Pad16, 16, declaration);
meshHeader1 = headerMulti; meshHeader1 = headerMulti;
} }
else // UH OH else // UH OH
{ {
int bp = 0; if (Globals::Instance->verbosity >= VERBOSITY_INFO)
printf("WARNING: MeshHeader FMT %i not implemented!\n", fmt);
} }
meshHeader1->headerType = 1; meshHeader1->headerType = 1;
@ -290,6 +280,15 @@ SetMesh::SetMesh(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex,
} }
} }
SetMesh::~SetMesh()
{
if (meshHeader != nullptr)
{
delete meshHeader;
meshHeader = nullptr;
}
}
void SetMesh::GenDListDeclarations(std::vector<uint8_t> rawData, ZDisplayList* dList) void SetMesh::GenDListDeclarations(std::vector<uint8_t> rawData, ZDisplayList* dList)
{ {
string sourceOutput = dList->GetSourceOutputCode(zRoom->GetName()); // HOTSPOT string sourceOutput = dList->GetSourceOutputCode(zRoom->GetName()); // HOTSPOT
@ -301,15 +300,15 @@ void SetMesh::GenDListDeclarations(std::vector<uint8_t> rawData, ZDisplayList* d
else else
srcVarName = StringHelper::Sprintf("%s", dList->GetName().c_str()); srcVarName = StringHelper::Sprintf("%s", dList->GetName().c_str());
zRoom->parent->AddDeclarationArray(dList->GetRawDataIndex(), DeclarationAlignment::None, dList->GetRawDataSize(), "Gfx", srcVarName, 0, sourceOutput); zRoom->parent->AddDeclarationArray(dList->GetRawDataIndex(), DeclarationAlignment::None, dList->GetRawDataSize(), "static Gfx", srcVarName, dList->GetRawDataSize() / 8, sourceOutput);
for (ZDisplayList* otherDList : dList->otherDLists) for (ZDisplayList* otherDList : dList->otherDLists)
GenDListDeclarations(rawData, otherDList); GenDListDeclarations(rawData, otherDList);
for (pair<uint32_t, string> vtxEntry : dList->vtxDeclarations) for (pair<uint32_t, string> vtxEntry : dList->vtxDeclarations)
{ {
zRoom->parent->AddDeclarationArray(vtxEntry.first, DeclarationAlignment::Align8, dList->vertices[vtxEntry.first].size() * 16, "Vtx", zRoom->parent->AddDeclarationArray(vtxEntry.first, DeclarationAlignment::Align8, dList->vertices[vtxEntry.first].size() * 16, "static Vtx",
StringHelper::Sprintf("%sVtx_%06X", zRoom->GetName().c_str(), vtxEntry.first), 0, vtxEntry.second); StringHelper::Sprintf("%sVtx_%06X", zRoom->GetName().c_str(), vtxEntry.first), dList->vertices[vtxEntry.first].size(), vtxEntry.second);
//zRoom->parent->declarations[vtxEntry.first] = new Declaration(DeclarationAlignment::Align8, dList->vertices[vtxEntry.first].size() * 16, vtxEntry.second); //zRoom->parent->declarations[vtxEntry.first] = new Declaration(DeclarationAlignment::Align8, dList->vertices[vtxEntry.first].size() * 16, vtxEntry.second);
} }
@ -317,11 +316,8 @@ void SetMesh::GenDListDeclarations(std::vector<uint8_t> rawData, ZDisplayList* d
for (pair<uint32_t, string> texEntry : dList->texDeclarations) for (pair<uint32_t, string> texEntry : dList->texDeclarations)
{ {
zRoom->textures[texEntry.first] = dList->textures[texEntry.first]; zRoom->textures[texEntry.first] = dList->textures[texEntry.first];
//zRoom->parent->AddDeclarationArray(texEntry.first, DeclarationAlignment::None, dList->textures[texEntry.first]->GetRawDataSize(), "u64",
//zRoom->textures[texEntry.first]->GetName(), 0, texEntry.second);
if (Globals::Instance->debugMessages) if (Globals::Instance->verbosity >= VERBOSITY_DEBUG)
printf("SAVING IMAGE TO %s\n", Globals::Instance->outputPath.c_str()); printf("SAVING IMAGE TO %s\n", Globals::Instance->outputPath.c_str());
zRoom->textures[texEntry.first]->Save(Globals::Instance->outputPath); zRoom->textures[texEntry.first]->Save(Globals::Instance->outputPath);
@ -344,8 +340,8 @@ std::string SetMesh::GenDListExterns(ZDisplayList* dList)
for (ZDisplayList* otherDList : dList->otherDLists) for (ZDisplayList* otherDList : dList->otherDLists)
sourceOutput += GenDListExterns(otherDList); sourceOutput += GenDListExterns(otherDList);
for (pair<uint32_t, string> vtxEntry : dList->vtxDeclarations) //for (pair<uint32_t, string> vtxEntry : dList->vtxDeclarations)
sourceOutput += StringHelper::Sprintf("extern Vtx %sVtx_%06X[%i];\n", zRoom->GetName().c_str(), vtxEntry.first, dList->vertices[vtxEntry.first].size()); //sourceOutput += StringHelper::Sprintf("extern Vtx %sVtx_%06X[%i];\n", zRoom->GetName().c_str(), vtxEntry.first, dList->vertices[vtxEntry.first].size());
for (pair<uint32_t, string> texEntry : dList->texDeclarations) for (pair<uint32_t, string> texEntry : dList->texDeclarations)
sourceOutput += StringHelper::Sprintf("extern u64 %sTex_%06X[];\n", zRoom->GetName().c_str(), texEntry.first); sourceOutput += StringHelper::Sprintf("extern u64 %sTex_%06X[];\n", zRoom->GetName().c_str(), texEntry.first);

View file

@ -102,6 +102,7 @@ class SetMesh : public ZRoomCommand
{ {
public: public:
SetMesh(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex, int segAddressOffset); SetMesh(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex, int segAddressOffset);
~SetMesh();
virtual std::string GenerateSourceCodePass1(std::string roomName, int baseAddress); virtual std::string GenerateSourceCodePass1(std::string roomName, int baseAddress);
//virtual std::string GenerateSourceCodePass2(std::string roomName, int baseAddress); //virtual std::string GenerateSourceCodePass2(std::string roomName, int baseAddress);

View file

@ -19,10 +19,13 @@ SetPathways::SetPathways(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDat
uint32_t currentPtr = listSegmentOffset; uint32_t currentPtr = listSegmentOffset;
if (segmentOffset != 0) if (segmentOffset != 0)
zRoom->parent->declarations[segmentOffset] = new Declaration(DeclarationAlignment::None, 0, "", "", false, ""); zRoom->parent->AddDeclarationPlaceholder(segmentOffset);
}
//if (listSegmentOffset != 0) SetPathways::~SetPathways()
//zRoom->declarations[listSegmentOffset] = new Declaration(DeclarationAlignment::None, 0, ""); {
for (PathwayEntry* entry : pathways)
delete entry;
} }
void SetPathways::InitList(uint32_t address) void SetPathways::InitList(uint32_t address)

View file

@ -13,6 +13,7 @@ class SetPathways : public ZRoomCommand
{ {
public: public:
SetPathways(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex); SetPathways(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex);
~SetPathways();
std::string GetSourceOutputCode(std::string prefix); std::string GetSourceOutputCode(std::string prefix);
virtual std::string GenerateSourceCodePass1(std::string roomName, int baseAddress); virtual std::string GenerateSourceCodePass1(std::string roomName, int baseAddress);

View file

@ -23,19 +23,12 @@ SetRoomList::SetRoomList(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDat
currentPtr += 8; currentPtr += 8;
} }
}
//string declaration = ""; SetRoomList::~SetRoomList()
{
/*for (int i = 0; i < rooms.size(); i++) for (RoomEntry* entry : rooms)
{ delete entry;
RoomEntry* entry = rooms[i];
string roomName = StringHelper::Sprintf("%sRoom%i", StringHelper::Split(zRoom->GetName(), "_scene")[0].c_str(), i);
declaration += StringHelper::Sprintf("\t{ (u32)%sSegmentRomStart, (u32)%sSegmentRomEnd },\n", roomName.c_str(), roomName.c_str());
}*/
//zRoom->parent->declarations[segmentOffset] = new Declaration(DeclarationAlignment::None, rooms.size() * 8,
//"RomFile", StringHelper::Sprintf("%sRoomList0x%06X", zRoom->GetName().c_str(), segmentOffset), true, declaration);
} }
string SetRoomList::GenerateSourceCodePass1(string roomName, int baseAddress) string SetRoomList::GenerateSourceCodePass1(string roomName, int baseAddress)
@ -79,8 +72,8 @@ std::string SetRoomList::PreGenSourceFiles()
} }
} }
zRoom->parent->declarations[segmentOffset] = new Declaration(DeclarationAlignment::None, rooms.size() * 8, zRoom->parent->AddDeclarationArray(segmentOffset, DeclarationAlignment::None, rooms.size() * 8,
"RomFile", StringHelper::Sprintf("%sRoomList0x%06X", zRoom->GetName().c_str(), segmentOffset), true, declaration); "RomFile", StringHelper::Sprintf("%sRoomList0x%06X", zRoom->GetName().c_str(), segmentOffset), 0, declaration);
return std::string(); return std::string();
} }

View file

@ -16,6 +16,7 @@ class SetRoomList : public ZRoomCommand
{ {
public: public:
SetRoomList(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex); SetRoomList(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex);
~SetRoomList();
virtual std::string GenerateSourceCodePass1(std::string roomName, int baseAddress); virtual std::string GenerateSourceCodePass1(std::string roomName, int baseAddress);
virtual std::string GenerateSourceCodePass2(std::string roomName, int baseAddress); virtual std::string GenerateSourceCodePass2(std::string roomName, int baseAddress);

View file

@ -26,6 +26,12 @@ SetStartPositionList::SetStartPositionList(ZRoom* nZRoom, std::vector<uint8_t> r
} }
} }
SetStartPositionList::~SetStartPositionList()
{
for (ActorSpawnEntry* entry : actors)
delete entry;
}
string SetStartPositionList::GenerateSourceCodePass1(string roomName, int baseAddress) string SetStartPositionList::GenerateSourceCodePass1(string roomName, int baseAddress)
{ {
string sourceOutput = ""; string sourceOutput = "";

View file

@ -10,6 +10,7 @@ public:
std::vector<ActorSpawnEntry*> actors; std::vector<ActorSpawnEntry*> actors;
SetStartPositionList(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex); SetStartPositionList(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex);
~SetStartPositionList();
virtual std::string GenerateSourceCodePass1(std::string roomName, int baseAddress); virtual std::string GenerateSourceCodePass1(std::string roomName, int baseAddress);
virtual std::string GenerateSourceCodePass2(std::string roomName, int baseAddress); virtual std::string GenerateSourceCodePass2(std::string roomName, int baseAddress);

View file

@ -25,6 +25,12 @@ SetTransitionActorList::SetTransitionActorList(ZRoom* nZRoom, std::vector<uint8_
} }
} }
SetTransitionActorList::~SetTransitionActorList()
{
for (TransitionActorEntry* actor : transitionActors)
delete actor;
}
string SetTransitionActorList::GetSourceOutputCode(std::string prefix) string SetTransitionActorList::GetSourceOutputCode(std::string prefix)
{ {
return ""; return "";
@ -38,8 +44,8 @@ string SetTransitionActorList::GenerateSourceCodePass1(string roomName, int base
for (TransitionActorEntry* entry : transitionActors) for (TransitionActorEntry* entry : transitionActors)
declaration += StringHelper::Sprintf("\t{ %i, %i, %i, %i, %s, %i, %i, %i, %i, 0x%04X }, \n", entry->frontObjectRoom, entry->frontTransitionReaction, entry->backObjectRoom, entry->backTransitionReaction, ActorList[entry->actorNum].c_str(), entry->posX, entry->posY, entry->posZ, entry->rotY, (uint16_t)entry->initVar); declaration += StringHelper::Sprintf("\t{ %i, %i, %i, %i, %s, %i, %i, %i, %i, 0x%04X }, \n", entry->frontObjectRoom, entry->frontTransitionReaction, entry->backObjectRoom, entry->backTransitionReaction, ActorList[entry->actorNum].c_str(), entry->posX, entry->posY, entry->posZ, entry->rotY, (uint16_t)entry->initVar);
zRoom->parent->declarations[segmentOffset] = new Declaration(DeclarationAlignment::None, transitionActors.size() * 16, "TransitionActorEntry", zRoom->parent->AddDeclarationArray(segmentOffset, DeclarationAlignment::None, transitionActors.size() * 16, "TransitionActorEntry",
StringHelper::Sprintf("%sTransitionActorList0x%06X", roomName.c_str(), segmentOffset), true, declaration); StringHelper::Sprintf("%sTransitionActorList0x%06X", roomName.c_str(), segmentOffset), 0, declaration);
return sourceOutput; return sourceOutput;
} }

View file

@ -21,6 +21,7 @@ class SetTransitionActorList : public ZRoomCommand
{ {
public: public:
SetTransitionActorList(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex); SetTransitionActorList(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex);
~SetTransitionActorList();
std::string GetSourceOutputCode(std::string prefix); std::string GetSourceOutputCode(std::string prefix);
virtual std::string GenerateSourceCodePass1(std::string roomName, int baseAddress); virtual std::string GenerateSourceCodePass1(std::string roomName, int baseAddress);

View file

@ -48,6 +48,12 @@ ZRoom::ZRoom() : ZResource()
scene = nullptr; scene = nullptr;
} }
ZRoom::~ZRoom()
{
for (ZRoomCommand* cmd : commands)
delete cmd;
}
ZRoom* ZRoom::ExtractFromXML(XMLElement* reader, vector<uint8_t> nRawData, int rawDataIndex, string nRelPath, ZFile* nParent, ZRoom* nScene) ZRoom* ZRoom::ExtractFromXML(XMLElement* reader, vector<uint8_t> nRawData, int rawDataIndex, string nRelPath, ZFile* nParent, ZRoom* nScene)
{ {
ZRoom* room = new ZRoom(); ZRoom* room = new ZRoom();
@ -78,7 +84,7 @@ ZRoom* ZRoom::ExtractFromXML(XMLElement* reader, vector<uint8_t> nRawData, int r
if (string(child->Name()) == "DListHint") if (string(child->Name()) == "DListHint")
{ {
string comment = ""; string comment = "";
if (child->Attribute("Comment") != NULL) if (child->Attribute("Comment") != NULL)
comment = "// " + string(child->Attribute("Comment")) + "\n"; comment = "// " + string(child->Attribute("Comment")) + "\n";
@ -86,10 +92,8 @@ ZRoom* ZRoom::ExtractFromXML(XMLElement* reader, vector<uint8_t> nRawData, int r
int address = strtol(StringHelper::Split(addressStr, "0x")[1].c_str(), NULL, 16); int address = strtol(StringHelper::Split(addressStr, "0x")[1].c_str(), NULL, 16);
ZDisplayList* dList = new ZDisplayList(room->rawData, address, ZDisplayList::GetDListLength(room->rawData, address)); ZDisplayList* dList = new ZDisplayList(room->rawData, address, ZDisplayList::GetDListLength(room->rawData, address));
//room->parent->declarations[address] = new Declaration(DeclarationAlignment::None, dList->GetRawDataSize(), comment + dList->GetSourceOutputCode(room->name));
//room->parent->AddDeclarationArray(address, DeclarationAlignment::None, dList->GetRawDataSize(), "Gfx", "", 0, comment + dList->GetSourceOutputCode(room->name));
dList->GetSourceOutputCode(room->name); dList->GetSourceOutputCode(room->name);
delete dList;
} }
else if (string(child->Name()) == "BlobHint") else if (string(child->Name()) == "BlobHint")
{ {
@ -118,7 +122,7 @@ ZRoom* ZRoom::ExtractFromXML(XMLElement* reader, vector<uint8_t> nRawData, int r
int address = strtol(StringHelper::Split(addressStr, "0x")[1].c_str(), NULL, 16); int address = strtol(StringHelper::Split(addressStr, "0x")[1].c_str(), NULL, 16);
ZCutscene* cutscene = new ZCutscene(room->rawData, address, 9999); ZCutscene* cutscene = new ZCutscene(room->rawData, address, 9999);
room->parent->AddDeclarationArray(address, DeclarationAlignment::None, DeclarationPadding::Pad16, cutscene->GetRawDataSize(), "s32", room->parent->AddDeclarationArray(address, DeclarationAlignment::None, DeclarationPadding::Pad16, cutscene->GetRawDataSize(), "s32",
StringHelper::Sprintf("%sCutsceneData0x%06X", room->name.c_str(), cutscene->segmentOffset), 0, cutscene->GetSourceOutputCode(room->name)); StringHelper::Sprintf("%sCutsceneData0x%06X", room->name.c_str(), cutscene->segmentOffset), 0, cutscene->GetSourceOutputCode(room->name));
} }
@ -201,7 +205,7 @@ void ZRoom::ParseCommands(std::vector<ZRoomCommand*>& commandList, CommandSet co
if (commandsLeft <= 0) if (commandsLeft <= 0)
break; break;
RoomCommand opcode = (RoomCommand)rawData[rawDataIndex]; RoomCommand opcode = (RoomCommand)rawData[rawDataIndex];
ZRoomCommand* cmd = nullptr; ZRoomCommand* cmd = nullptr;
@ -280,7 +284,7 @@ void ZRoom::ProcessCommandSets()
cmd->commandSet = commandSet & 0x00FFFFFF; cmd->commandSet = commandSet & 0x00FFFFFF;
string pass1 = cmd->GenerateSourceCodePass1(name, cmd->commandSet); string pass1 = cmd->GenerateSourceCodePass1(name, cmd->commandSet);
Declaration* decl = parent->AddDeclaration(cmd->cmdAddress, i == 0 ? DeclarationAlignment::Align16 : DeclarationAlignment::None, 8, cmd->GetCommandCName(), Declaration* decl = parent->AddDeclaration(cmd->cmdAddress, i == 0 ? DeclarationAlignment::Align16 : DeclarationAlignment::None, 8, StringHelper::Sprintf("static %s", cmd->GetCommandCName().c_str()),
StringHelper::Sprintf("%sSet%04XCmd%02X", name.c_str(), commandSet & 0x00FFFFFF, cmd->cmdIndex, cmd->cmdID), StringHelper::Sprintf("%sSet%04XCmd%02X", name.c_str(), commandSet & 0x00FFFFFF, cmd->cmdIndex, cmd->cmdID),
StringHelper::Sprintf("%s", pass1.c_str())); StringHelper::Sprintf("%s", pass1.c_str()));
@ -298,7 +302,7 @@ void ZRoom::ProcessCommandSets()
string pass2 = cmd->GenerateSourceCodePass2(name, cmd->commandSet); string pass2 = cmd->GenerateSourceCodePass2(name, cmd->commandSet);
if (pass2 != "") if (pass2 != "")
parent->AddDeclaration(cmd->cmdAddress, DeclarationAlignment::None, 8, cmd->GetCommandCName(), StringHelper::Sprintf("%sSet%04XCmd%02X", name.c_str(), cmd->commandSet & 0x00FFFFFF, cmd->cmdIndex, cmd->cmdID), StringHelper::Sprintf("%s // 0x%04X", pass2.c_str(), cmd->cmdAddress)); parent->AddDeclaration(cmd->cmdAddress, DeclarationAlignment::None, 8, StringHelper::Sprintf("static %s", cmd->GetCommandCName().c_str()), StringHelper::Sprintf("%sSet%04XCmd%02X", name.c_str(), cmd->commandSet & 0x00FFFFFF, cmd->cmdIndex, cmd->cmdID), StringHelper::Sprintf("%s // 0x%04X", pass2.c_str(), cmd->cmdAddress));
} }
} }
@ -308,7 +312,7 @@ void ZRoom::ProcessCommandSets()
*/ */
void ZRoom::SyotesRoomHack() void ZRoom::SyotesRoomHack()
{ {
char headerData[] = char headerData[] =
{ {
0x0A, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x08 0x0A, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x08
}; };
@ -392,10 +396,10 @@ size_t ZRoom::GetCommandSizeFromNeighbor(ZRoomCommand* cmd)
return 0; return 0;
} }
string ZRoom::GetSourceOutputHeader(string prefix) string ZRoom::GetSourceOutputHeader(const std::string& prefix)
{ {
sourceOutput = ""; sourceOutput = "";
for (ZRoomCommand* cmd : commands) for (ZRoomCommand* cmd : commands)
sourceOutput += cmd->GenerateExterns(); sourceOutput += cmd->GenerateExterns();
@ -407,7 +411,7 @@ string ZRoom::GetSourceOutputHeader(string prefix)
return sourceOutput; return sourceOutput;
} }
string ZRoom::GetSourceOutputCode(std::string prefix) string ZRoom::GetSourceOutputCode(const std::string& prefix)
{ {
sourceOutput = ""; sourceOutput = "";
@ -466,9 +470,9 @@ string ZRoom::GetSourceOutputCode(std::string prefix)
declaration += item.second->GetSourceOutputCode(prefix); declaration += item.second->GetSourceOutputCode(prefix);
if (Globals::Instance->debugMessages) if (Globals::Instance->verbosity >= VERBOSITY_DEBUG)
printf("SAVING IMAGE TO %s\n", Globals::Instance->outputPath.c_str()); printf("SAVING IMAGE TO %s\n", Globals::Instance->outputPath.c_str());
item.second->Save(Globals::Instance->outputPath); item.second->Save(Globals::Instance->outputPath);
parent->AddDeclarationIncludeArray(item.first, StringHelper::Sprintf("%s/%s.%s.inc.c", parent->AddDeclarationIncludeArray(item.first, StringHelper::Sprintf("%s/%s.%s.inc.c",
@ -501,7 +505,7 @@ ZResourceType ZRoom::GetResourceType()
return ZResourceType::Room; return ZResourceType::Room;
} }
void ZRoom::Save(string outFolder) void ZRoom::Save(const std::string& outFolder)
{ {
for (ZRoomCommand* cmd : commands) for (ZRoomCommand* cmd : commands)
cmd->Save(); cmd->Save();
@ -578,4 +582,4 @@ CommandSet::CommandSet(int32_t nAddress, int32_t nCommandCount)
{ {
address = nAddress; address = nAddress;
commandCount = nCommandCount; commandCount = nCommandCount;
} }

View file

@ -3,7 +3,7 @@
#include "../ZResource.h" #include "../ZResource.h"
#include "ZRoomCommand.h" #include "ZRoomCommand.h"
#include "ZTexture.h" #include "ZTexture.h"
#include "../tinyxml2.h" #include <tinyxml2.h>
#include <vector> #include <vector>
#include <map> #include <map>
@ -14,12 +14,13 @@ class ZRoom : public ZResource
protected: protected:
std::vector<ZRoomCommand*> commands; std::vector<ZRoomCommand*> commands;
std::string GetSourceOutputHeader(std::string prefix); std::string GetSourceOutputHeader(const std::string& prefix);
std::string GetSourceOutputCode(std::string prefix); std::string GetSourceOutputCode(const std::string& prefix);
void ProcessCommandSets(); void ProcessCommandSets();
void SyotesRoomHack(); void SyotesRoomHack();
ZRoom(); ZRoom();
~ZRoom();
public: public:
ZRoom* scene; ZRoom* scene;
@ -36,7 +37,7 @@ public:
std::vector<uint8_t> GetRawData(); std::vector<uint8_t> GetRawData();
int GetRawDataSize(); int GetRawDataSize();
virtual ZResourceType GetResourceType(); virtual ZResourceType GetResourceType();
virtual void Save(std::string outFolder); virtual void Save(const std::string& outFolder);
virtual void PreGenSourceFiles(); virtual void PreGenSourceFiles();
}; };
@ -47,4 +48,4 @@ struct CommandSet
CommandSet(int32_t nAddress); CommandSet(int32_t nAddress);
CommandSet(int32_t nAddress, int32_t nCommandCount); CommandSet(int32_t nAddress, int32_t nCommandCount);
}; };

View file

@ -1,6 +1,6 @@
#pragma once #pragma once
#include "../tinyxml2.h" #include <tinyxml2.h>
#include <vector> #include <vector>
#include <string> #include <string>

231
tools/ZAPD/ZAPD/ZScalar.cpp Normal file
View file

@ -0,0 +1,231 @@
#include "ZScalar.h"
#include "ZFile.h"
#include "BitConverter.h"
#include "StringHelper.h"
#include "File.h"
#include "Globals.h"
ZScalar* ZScalar::ExtractFromXML(tinyxml2::XMLElement* reader, const std::vector<uint8_t>& nRawData, const int rawDataIndex, const std::string& nRelPath)
{
ZScalar* scalar = new ZScalar();
scalar->rawData = nRawData;
scalar->rawDataIndex = rawDataIndex;
scalar->ParseXML(reader);
scalar->ParseRawData();
return scalar;
}
ZScalar::ZScalar() : ZResource()
{
memset(&scalarData, 0, sizeof(ZScalarData));
scalarType = ZSCALAR_NONE;
}
ZScalar::ZScalar(const ZScalarType scalarType) : ZScalar()
{
this->scalarType = scalarType;
}
void ZScalar::ParseXML(tinyxml2::XMLElement* reader)
{
ZResource::ParseXML(reader);
name = reader->Attribute("Name");
std::string type = reader->Attribute("Type");
scalarType = ZScalar::MapOutputTypeToScalarType(type);
}
ZScalarType ZScalar::MapOutputTypeToScalarType(const std::string& type) {
if (type == "s8")
{
return ZSCALAR_S8;
}
else if (type == "u8")
{
return ZSCALAR_U8;
}
else if (type == "s16")
{
return ZSCALAR_S16;
}
else if (type == "u16")
{
return ZSCALAR_U16;
}
else if (type == "s32")
{
return ZSCALAR_S32;
}
else if (type == "u32")
{
return ZSCALAR_U32;
}
else if (type == "s64")
{
return ZSCALAR_S64;
}
else if (type == "u64")
{
return ZSCALAR_U64;
}
else if (type == "f32")
{
return ZSCALAR_F32;
}
else if (type == "f64")
{
return ZSCALAR_F64;
}
return ZSCALAR_NONE;
}
std::string ZScalar::MapScalarTypeToOutputType(const ZScalarType scalarType)
{
switch (scalarType) {
case ZSCALAR_S8:
return "s8";
case ZSCALAR_U8:
return "u8";
case ZSCALAR_S16:
return "s16";
case ZSCALAR_U16:
return "u16";
case ZSCALAR_S32:
return "s32";
case ZSCALAR_U32:
return "u32";
case ZSCALAR_S64:
return "s64";
case ZSCALAR_U64:
return "u64";
case ZSCALAR_F32:
return "f32";
case ZSCALAR_F64:
return "f64";
default:
return "";
}
}
int ZScalar::MapTypeToSize(const ZScalarType scalarType)
{
switch (scalarType) {
case ZSCALAR_S8:
return sizeof(scalarData.s8);
case ZSCALAR_U8:
return sizeof(scalarData.u8);
case ZSCALAR_S16:
return sizeof(scalarData.s16);
case ZSCALAR_U16:
return sizeof(scalarData.u16);
case ZSCALAR_S32:
return sizeof(scalarData.s32);
case ZSCALAR_U32:
return sizeof(scalarData.u32);
case ZSCALAR_S64:
return sizeof(scalarData.s64);
case ZSCALAR_U64:
return sizeof(scalarData.u64);
case ZSCALAR_F32:
return sizeof(scalarData.f32);
case ZSCALAR_F64:
return sizeof(scalarData.f64);
default:
return 0;
}
}
int ZScalar::GetRawDataSize()
{
return ZScalar::MapTypeToSize(scalarType);
}
void ZScalar::ParseRawData()
{
ZScalar::ParseRawData(rawData, rawDataIndex);
}
void ZScalar::ParseRawData(const std::vector<uint8_t>& data, const int offset)
{
switch (scalarType) {
case ZSCALAR_S8:
scalarData.s8 = BitConverter::ToInt8BE(data, offset);
break;
case ZSCALAR_U8:
scalarData.u8 = BitConverter::ToUInt8BE(data, offset);
break;
case ZSCALAR_S16:
scalarData.s16 = BitConverter::ToInt16BE(data, offset);
break;
case ZSCALAR_U16:
scalarData.u16 = BitConverter::ToUInt16BE(data, offset);
break;
case ZSCALAR_S32:
scalarData.s32 = BitConverter::ToInt32BE(data, offset);
break;
case ZSCALAR_U32:
scalarData.u32 = BitConverter::ToUInt32BE(data, offset);
break;
case ZSCALAR_S64:
scalarData.s64 = BitConverter::ToInt64BE(data, offset);
break;
case ZSCALAR_U64:
scalarData.u64 = BitConverter::ToUInt64BE(data, offset);
break;
case ZSCALAR_F32:
scalarData.f32 = BitConverter::ToFloatBE(data, offset);
break;
case ZSCALAR_F64:
scalarData.f64 = BitConverter::ToDoubleBE(data, offset);
break;
}
}
std::string ZScalar::GetSourceTypeName()
{
return ZScalar::MapScalarTypeToOutputType(scalarType);
}
std::string ZScalar::GetSourceValue()
{
switch (scalarType) {
case ZSCALAR_S8:
return StringHelper::Sprintf("%hhd", scalarData.s8);
case ZSCALAR_U8:
return StringHelper::Sprintf("%hhu", scalarData.u8);
case ZSCALAR_S16:
return StringHelper::Sprintf("%hd", scalarData.s16);
case ZSCALAR_U16:
return StringHelper::Sprintf("%hu", scalarData.u16);
case ZSCALAR_S32:
return StringHelper::Sprintf("%d", scalarData.s32);
case ZSCALAR_U32:
return StringHelper::Sprintf("%u", scalarData.u32);
case ZSCALAR_S64:
return StringHelper::Sprintf("%lld", scalarData.s64);
case ZSCALAR_U64:
return StringHelper::Sprintf("%llu", scalarData.u64);
case ZSCALAR_F32:
return StringHelper::Sprintf("%f", scalarData.f32);
case ZSCALAR_F64:
return StringHelper::Sprintf("%lf", scalarData.f64);
default:
return "";
}
}
std::string ZScalar::GetSourceOutputCode(const std::string& prefix)
{
if (parent != nullptr)
parent->AddDeclaration(rawDataIndex, DeclarationAlignment::None, GetRawDataSize(), GetSourceTypeName(), GetName(), GetSourceValue());
return "";
}
ZResourceType ZScalar::GetResourceType()
{
return ZResourceType::Scalar;
}

61
tools/ZAPD/ZAPD/ZScalar.h Normal file
View file

@ -0,0 +1,61 @@
#pragma once
#include <vector>
#include <string>
#include <stdint.h>
#include "ZResource.h"
#include "tinyxml2.h"
typedef enum ZScalarType {
ZSCALAR_NONE,
ZSCALAR_S8,
ZSCALAR_U8,
ZSCALAR_S16,
ZSCALAR_U16,
ZSCALAR_S32,
ZSCALAR_U32,
ZSCALAR_S64,
ZSCALAR_U64,
ZSCALAR_F32,
ZSCALAR_F64
} ZScalarType;
typedef union ZScalarData {
uint8_t u8;
int8_t s8;
uint16_t u16;
int16_t s16;
uint32_t u32;
int32_t s32;
uint64_t u64;
int64_t s64;
float f32;
double f64;
} ZScalarData;
class ZScalar : public ZResource
{
friend class ZVector;
public:
ZScalarData scalarData;
ZScalarType scalarType;
ZScalar();
ZScalar(const ZScalarType scalarType);
void ParseXML(tinyxml2::XMLElement* reader);
std::string GetSourceTypeName();
std::string GetSourceValue();
std::string GetSourceOutputCode(const std::string& prefix);
int GetRawDataSize();
ZResourceType GetResourceType();
static ZScalar* ExtractFromXML(tinyxml2::XMLElement* reader, const std::vector<uint8_t>& nRawData, const int rawDataIndex, const std::string& nRelPath);
static int MapTypeToSize(const ZScalarType scalarType);
static ZScalarType MapOutputTypeToScalarType(const std::string& type);
static std::string MapScalarTypeToOutputType(const ZScalarType scalarType);
protected:
void ParseRawData();
void ParseRawData(const std::vector<uint8_t>& data, const int offset);
};

View file

@ -50,16 +50,16 @@ ZLimbStandard* ZLimbStandard::FromRawData(std::vector<uint8_t> nRawData, int raw
limb->transX = BitConverter::ToInt16BE(nRawData, rawDataIndex + 0); limb->transX = BitConverter::ToInt16BE(nRawData, rawDataIndex + 0);
limb->transY = BitConverter::ToInt16BE(nRawData, rawDataIndex + 2); limb->transY = BitConverter::ToInt16BE(nRawData, rawDataIndex + 2);
limb->transZ = BitConverter::ToInt16BE(nRawData, rawDataIndex + 4); limb->transZ = BitConverter::ToInt16BE(nRawData, rawDataIndex + 4);
limb->childIndex = nRawData[rawDataIndex + 6]; limb->childIndex = nRawData[rawDataIndex + 6];
limb->siblingIndex = nRawData[rawDataIndex + 7]; limb->siblingIndex = nRawData[rawDataIndex + 7];
limb->dListPtr = BitConverter::ToInt32BE(nRawData, rawDataIndex + 8) & 0x00FFFFFF; limb->dListPtr = BitConverter::ToInt32BE(nRawData, rawDataIndex + 8) & 0x00FFFFFF;
return limb; return limb;
} }
string ZLimbStandard::GetSourceOutputCode(string prefix) string ZLimbStandard::GetSourceOutputCode(const std::string& prefix)
{ {
string dListStr = dListPtr == 0 ? "NULL" : StringHelper::Sprintf("%s", parent->GetVarName(dListPtr).c_str()); string dListStr = dListPtr == 0 ? "NULL" : StringHelper::Sprintf("%s", parent->GetVarName(dListPtr).c_str());
@ -154,7 +154,7 @@ ZSkeleton* ZSkeleton::FromXML(XMLElement* reader, vector<uint8_t> nRawData, int
return skeleton; return skeleton;
} }
std::string ZSkeleton::GetSourceOutputCode(std::string prefix) std::string ZSkeleton::GetSourceOutputCode(const std::string& prefix)
{ {
if (parent != nullptr) if (parent != nullptr)
{ {
@ -164,7 +164,7 @@ std::string ZSkeleton::GetSourceOutputCode(std::string prefix)
for (int i = 0; i < limbs.size(); i++) for (int i = 0; i < limbs.size(); i++)
{ {
ZLimbStandard* limb = limbs[i]; ZLimbStandard* limb = limbs[i];
string defaultDLName = StringHelper::Sprintf("%sLimbDL_%06X", defaultPrefix.c_str(), limb->dListPtr); string defaultDLName = StringHelper::Sprintf("%sLimbDL_%06X", defaultPrefix.c_str(), limb->dListPtr);
string dListStr = limb->dListPtr == 0 ? "NULL" : StringHelper::Sprintf("%s", parent->GetDeclarationName(limb->dListPtr, defaultDLName).c_str()); string dListStr = limb->dListPtr == 0 ? "NULL" : StringHelper::Sprintf("%s", parent->GetDeclarationName(limb->dListPtr, defaultDLName).c_str());
@ -224,10 +224,12 @@ std::string ZSkeleton::GetSourceOutputCode(std::string prefix)
//string decl = StringHelper::Sprintf(" &_%sLimb_%04X,\n", prefix.c_str(), limb->address); //string decl = StringHelper::Sprintf(" &_%sLimb_%04X,\n", prefix.c_str(), limb->address);
string decl = ""; string decl = "";
if (parent->HasDeclaration(limb->address)) if (parent->HasDeclaration(limb->address)) {
decl = StringHelper::Sprintf(" &%s,", parent->GetDeclarationName(limb->address).c_str()); decl = StringHelper::Sprintf(" &%s,", parent->GetDeclarationName(limb->address).c_str());
if (i != (limbs.size() - 1)) if (i != (limbs.size() - 1)) {
decl += "\n"; decl += "\n";
}
}
tblStr += decl; tblStr += decl;
} }
@ -257,7 +259,7 @@ std::string ZSkeleton::GetSourceOutputCode(std::string prefix)
return ""; return "";
} }
void ZSkeleton::Save(string outFolder) void ZSkeleton::Save(const std::string& outFolder)
{ {
} }
@ -286,7 +288,7 @@ ZLimbLOD* ZLimbLOD::FromRawData(vector<uint8_t> nRawData, int rawDataIndex)
return limb; return limb;
} }
string ZLimbLOD::GetSourceOutputCode(string prefix) string ZLimbLOD::GetSourceOutputCode(const std::string& prefix)
{ {
return std::string(); return std::string();
} }

View file

@ -25,7 +25,7 @@ struct ZLimbStandard : public ZResource
ZLimbStandard(); ZLimbStandard();
static ZLimbStandard* FromXML(tinyxml2::XMLElement* reader, std::vector<uint8_t> nRawData, int rawDataIndex, std::string nRelPath, ZFile* parent); static ZLimbStandard* FromXML(tinyxml2::XMLElement* reader, std::vector<uint8_t> nRawData, int rawDataIndex, std::string nRelPath, ZFile* parent);
static ZLimbStandard* FromRawData(std::vector<uint8_t> nRawData, int rawDataIndex); static ZLimbStandard* FromRawData(std::vector<uint8_t> nRawData, int rawDataIndex);
std::string GetSourceOutputCode(std::string prefix); std::string GetSourceOutputCode(const std::string& prefix);
virtual int GetRawDataSize(); virtual int GetRawDataSize();
}; };
@ -36,7 +36,7 @@ struct ZLimbLOD : ZLimbStandard
ZLimbLOD(); ZLimbLOD();
//static ZLimbLOD* FromXML(tinyxml2::XMLElement* reader, std::vector<uint8_t> nRawData, int rawDataIndex, std::string nRelPath, ZFile* parent); //static ZLimbLOD* FromXML(tinyxml2::XMLElement* reader, std::vector<uint8_t> nRawData, int rawDataIndex, std::string nRelPath, ZFile* parent);
static ZLimbLOD* FromRawData(std::vector<uint8_t> nRawData, int rawDataIndex); static ZLimbLOD* FromRawData(std::vector<uint8_t> nRawData, int rawDataIndex);
std::string GetSourceOutputCode(std::string prefix); std::string GetSourceOutputCode(const std::string& prefix);
virtual int GetRawDataSize(); virtual int GetRawDataSize();
}; };
@ -58,7 +58,7 @@ public:
ZSkeleton(); ZSkeleton();
virtual void GenerateHLIntermediette(HLFileIntermediette& hlFile); virtual void GenerateHLIntermediette(HLFileIntermediette& hlFile);
static ZSkeleton* FromXML(tinyxml2::XMLElement* reader, std::vector<uint8_t> nRawData, int rawDataIndex, std::string nRelPath, ZFile* nParent); static ZSkeleton* FromXML(tinyxml2::XMLElement* reader, std::vector<uint8_t> nRawData, int rawDataIndex, std::string nRelPath, ZFile* nParent);
void Save(std::string outFolder); void Save(const std::string& outFolder);
std::string GetSourceOutputCode(std::string prefix); std::string GetSourceOutputCode(const std::string& prefix);
}; };

View file

@ -21,6 +21,7 @@ ZTexture::ZTexture() : ZResource()
width = 0; width = 0;
height = 0; height = 0;
type = TextureType::Error; type = TextureType::Error;
isPalette = false;
} }
ZTexture::~ZTexture() ZTexture::~ZTexture()
@ -98,12 +99,12 @@ ZTexture* ZTexture::FromPNG(string pngFilePath, TextureType texType)
ZTexture* tex = new ZTexture(); ZTexture* tex = new ZTexture();
tex->type = texType; tex->type = texType;
tex->name = StringHelper::Split(Path::GetFileNameWithoutExtension(pngFilePath), ".")[0]; tex->name = StringHelper::Split(Path::GetFileNameWithoutExtension(pngFilePath), ".")[0];
tex->bmpRgb = (uint8_t*)stbi_load((pngFilePath).c_str(), &tex->width, &tex->height, &comp, STBI_rgb); tex->bmpRgb = (uint8_t*)stbi_load((pngFilePath).c_str(), &tex->width, &tex->height, &comp, STBI_rgb);
stbi_image_free(tex->bmpRgb); stbi_image_free(tex->bmpRgb);
tex->bmpRgb = nullptr; tex->bmpRgb = nullptr;
tex->rawData = vector<uint8_t>(tex->GetRawDataSize()); tex->rawData = vector<uint8_t>(tex->GetRawDataSize());
switch (texType) switch (texType)
{ {
case TextureType::RGBA16bpp: tex->PrepareRawDataRGBA16(pngFilePath); break; case TextureType::RGBA16bpp: tex->PrepareRawDataRGBA16(pngFilePath); break;
@ -116,7 +117,7 @@ ZTexture* ZTexture::FromPNG(string pngFilePath, TextureType texType)
case TextureType::Palette4bpp: tex->PrepareRawDataPalette4(pngFilePath); break; case TextureType::Palette4bpp: tex->PrepareRawDataPalette4(pngFilePath); break;
case TextureType::Palette8bpp: tex->PrepareRawDataPalette8(pngFilePath); break; case TextureType::Palette8bpp: tex->PrepareRawDataPalette8(pngFilePath); break;
} }
tex->FixRawData(); tex->FixRawData();
return tex; return tex;
@ -129,7 +130,7 @@ ZTexture* ZTexture::FromHLTexture(HLTexture* hlTex)
tex->width = hlTex->width; tex->width = hlTex->width;
tex->height = hlTex->height; tex->height = hlTex->height;
tex->type = (TextureType)hlTex->type; tex->type = (TextureType)hlTex->type;
return tex; return tex;
} }
@ -139,14 +140,14 @@ void ZTexture::ParseXML(XMLElement* reader)
if (reader->Attribute("Width") != nullptr) if (reader->Attribute("Width") != nullptr)
width = atoi(reader->Attribute("Width")); width = atoi(reader->Attribute("Width"));
if (reader->Attribute("Height") != nullptr) if (reader->Attribute("Height") != nullptr)
height = atoi(reader->Attribute("Height")); height = atoi(reader->Attribute("Height"));
string formatStr = reader->Attribute("Format"); string formatStr = reader->Attribute("Format");
type = GetTextureTypeFromString(formatStr); type = GetTextureTypeFromString(formatStr);
if (type == TextureType::Error) if (type == TextureType::Error)
throw "Format " + formatStr + " is not supported!"; throw "Format " + formatStr + " is not supported!";
} }
@ -260,7 +261,7 @@ void ZTexture::PrepareBitmapGrayscale8()
for (int x = 0; x < width; x++) for (int x = 0; x < width; x++)
{ {
int pos = ((y * width) + x) * 1; int pos = ((y * width) + x) * 1;
bmpRgb[(((y * width) + x) * 3) + 0] = rawData[pos]; bmpRgb[(((y * width) + x) * 3) + 0] = rawData[pos];
bmpRgb[(((y * width) + x) * 3) + 1] = rawData[pos]; bmpRgb[(((y * width) + x) * 3) + 1] = rawData[pos];
bmpRgb[(((y * width) + x) * 3) + 2] = rawData[pos]; bmpRgb[(((y * width) + x) * 3) + 2] = rawData[pos];
@ -363,7 +364,7 @@ void ZTexture::PrepareBitmapPalette8()
for (int x = 0; x < width; x++) for (int x = 0; x < width; x++)
{ {
int pos = ((y * width) + x) * 1; int pos = ((y * width) + x) * 1;
bmpRgb[(((y * width) + x) * 3) + 0] = rawData[pos]; bmpRgb[(((y * width) + x) * 3) + 0] = rawData[pos];
bmpRgb[(((y * width) + x) * 3) + 1] = rawData[pos]; bmpRgb[(((y * width) + x) * 3) + 1] = rawData[pos];
bmpRgb[(((y * width) + x) * 3) + 2] = rawData[pos]; bmpRgb[(((y * width) + x) * 3) + 2] = rawData[pos];
@ -426,7 +427,7 @@ void ZTexture::PrepareRawDataRGBA32(string rgbaPath)
int comp; int comp;
bmpRgba = (uint8_t*)stbi_load(rgbaPath.c_str(), &width, &height, &comp, STBI_rgb_alpha); bmpRgba = (uint8_t*)stbi_load(rgbaPath.c_str(), &width, &height, &comp, STBI_rgb_alpha);
for (int y = 0; y < height; y++) for (int y = 0; y < height; y++)
{ {
for (int x = 0; x < width; x++) for (int x = 0; x < width; x++)
@ -518,7 +519,7 @@ void ZTexture::PrepareRawDataGrayscaleAlpha8(string grayAlphaPath)
int comp; int comp;
bmpRgba = (uint8_t*)stbi_load(grayAlphaPath.c_str(), &width, &height, &comp, STBI_rgb_alpha); bmpRgba = (uint8_t*)stbi_load(grayAlphaPath.c_str(), &width, &height, &comp, STBI_rgb_alpha);
for (int y = 0; y < height; y++) for (int y = 0; y < height; y++)
{ {
for (int x = 0; x < width; x++) for (int x = 0; x < width; x++)
@ -657,7 +658,22 @@ int ZTexture::GetHeight()
return height; return height;
} }
void ZTexture::Save(string outFolder) void ZTexture::SetWidth(int nWidth)
{
width = nWidth;
}
void ZTexture::SetHeight(int nHeight)
{
height = nHeight;
}
TextureType ZTexture::GetTextureType()
{
return type;
}
void ZTexture::Save(const std::string& outFolder)
{ {
if (type == TextureType::RGBA32bpp) if (type == TextureType::RGBA32bpp)
stbi_write_png((outFolder + "/" + outName + ".rgba32.png").c_str(), width, height, 4, bmpRgba, width * 4); stbi_write_png((outFolder + "/" + outName + ".rgba32.png").c_str(), width, height, 4, bmpRgba, width * 4);
@ -683,7 +699,7 @@ void ZTexture::Save(string outFolder)
} }
// HOTSPOT // HOTSPOT
string ZTexture::GetSourceOutputCode(std::string prefix) string ZTexture::GetSourceOutputCode(const std::string& prefix)
{ {
sourceOutput = ""; sourceOutput = "";
@ -703,7 +719,7 @@ string ZTexture::GetSourceOutputCode(std::string prefix)
if (i % 32 == 0) if (i % 32 == 0)
sourceOutput += "\t"; sourceOutput += "\t";
sourceOutput += StringHelper::Sprintf("0x%016llX, ", BitConverter::ToInt64BE(rawDataArr, i)); sourceOutput += StringHelper::Sprintf("0x%016llX, ", BitConverter::ToUInt64BE(rawDataArr, i));
if (i % 32 == 24) if (i % 32 == 24)
sourceOutput += StringHelper::Sprintf(" // 0x%06X \n", rawDataIndex + ((i / 32) * 32)); sourceOutput += StringHelper::Sprintf(" // 0x%06X \n", rawDataIndex + ((i / 32) * 32));
@ -748,7 +764,7 @@ std::string ZTexture::GetExternalExtension()
} }
string ZTexture::GetSourceOutputHeader(std::string prefix) string ZTexture::GetSourceOutputHeader(const std::string& prefix)
{ {
//return StringHelper::Sprintf("extern u64 %s[];\n", name.c_str()); //return StringHelper::Sprintf("extern u64 %s[];\n", name.c_str());
return ""; return "";
@ -778,4 +794,4 @@ TextureType ZTexture::GetTextureTypeFromString(string str)
texType = TextureType::Palette8bpp; texType = TextureType::Palette8bpp;
return texType; return texType;
} }

View file

@ -60,6 +60,8 @@ public:
ZTexture(); ZTexture();
~ZTexture(); ~ZTexture();
bool isPalette;
static ZTexture* BuildFromXML(tinyxml2::XMLElement* reader, std::string inFolder, bool readFile); static ZTexture* BuildFromXML(tinyxml2::XMLElement* reader, std::string inFolder, bool readFile);
static ZTexture* ExtractFromXML(tinyxml2::XMLElement* reader, std::vector<uint8_t> nRawData, int rawDataIndex, std::string nRelPath); static ZTexture* ExtractFromXML(tinyxml2::XMLElement* reader, std::vector<uint8_t> nRawData, int rawDataIndex, std::string nRelPath);
static ZTexture* FromBinary(TextureType nType, std::vector<uint8_t> nRawData, int rawDataIndex, std::string nName, int nWidth, int nHeight); static ZTexture* FromBinary(TextureType nType, std::vector<uint8_t> nRawData, int rawDataIndex, std::string nName, int nWidth, int nHeight);
@ -67,8 +69,8 @@ public:
static ZTexture* FromHLTexture(HLTexture* hlTex); static ZTexture* FromHLTexture(HLTexture* hlTex);
static TextureType GetTextureTypeFromString(std::string str); static TextureType GetTextureTypeFromString(std::string str);
std::string GetSourceOutputCode(std::string prefix); std::string GetSourceOutputCode(const std::string& prefix) override;
std::string GetSourceOutputHeader(std::string prefix); std::string GetSourceOutputHeader(const std::string& prefix) override;
std::vector<uint8_t> GetRawData(); std::vector<uint8_t> GetRawData();
int GetRawDataSize(); int GetRawDataSize();
@ -76,6 +78,9 @@ public:
std::string GetIMSizFromType(); std::string GetIMSizFromType();
int GetWidth(); int GetWidth();
int GetHeight(); int GetHeight();
void Save(std::string outFolder); void SetWidth(int nWidth);
void SetHeight(int nHeight);
TextureType GetTextureType();
void Save(const std::string& outFolder);
std::string GetExternalExtension(); std::string GetExternalExtension();
}; };

111
tools/ZAPD/ZAPD/ZVector.cpp Normal file
View file

@ -0,0 +1,111 @@
#include "ZVector.h"
#include "ZFile.h"
#include "BitConverter.h"
#include "StringHelper.h"
#include "File.h"
#include "Globals.h"
#include <assert.h>
ZVector::ZVector() : ZResource()
{
scalars = std::vector<ZScalar*>();
this->scalarType = ZSCALAR_NONE;
this->dimensions = 0;
}
ZVector* ZVector::ExtractFromXML(tinyxml2::XMLElement* reader, const std::vector<uint8_t>& nRawData, const int rawDataIndex, const std::string& nRelPath)
{
ZVector* vector = new ZVector();
vector->rawData = nRawData;
vector->rawDataIndex = rawDataIndex;
vector->ParseXML(reader);
vector->ParseRawData();
return vector;
}
void ZVector::ParseXML(tinyxml2::XMLElement* reader)
{
ZResource::ParseXML(reader);
name = reader->Attribute("Name");
std::string type = reader->Attribute("Type");
this->scalarType = ZScalar::MapOutputTypeToScalarType(type);
std::string dimensions = reader->Attribute("Dimensions");
this->dimensions = strtol(dimensions.c_str(), NULL, 16);
}
void ZVector::ParseRawData()
{
int currentRawDataIndex = this->rawDataIndex;
scalars.clear();
for (int i = 0; i < this->dimensions; i++) {
ZScalar* scalar = new ZScalar(this->scalarType);
scalar->rawDataIndex = currentRawDataIndex;
scalar->rawData = this->rawData;
scalar->ParseRawData();
currentRawDataIndex += scalar->GetRawDataSize();
this->scalars.push_back(scalar);
}
// Ensure the scalars vector has the same number of elements as the vector dimension.
assert(this->scalars.size() == this->dimensions);
}
int ZVector::GetRawDataSize()
{
int size = 0;
for (int i = 0; i < this->scalars.size(); i++)
size += this->scalars[i]->GetRawDataSize();
return size;
}
std::string ZVector::GetSourceTypeName()
{
if (dimensions == 3 && scalarType == ZSCALAR_F32)
{
return "Vec3f";
}
else if (dimensions == 3 && scalarType == ZSCALAR_S16)
{
return "Vec3s";
}
else if (dimensions == 3 && scalarType == ZSCALAR_S32)
{
return "Vec3i";
}
else
{
std::string output = StringHelper::Sprintf("Encountered unsupported vector type: %d dimensions, %s type", dimensions, ZScalar::MapScalarTypeToOutputType(scalarType));
if (Globals::Instance->verbosity >= VERBOSITY_DEBUG)
printf("%s\n", output.c_str());
throw output;
}
}
std::string ZVector::GetSourceValue()
{
std::vector<std::string> strings = std::vector<std::string>();
for (int i = 0; i < this->scalars.size(); i++)
strings.push_back(scalars[i]->GetSourceValue());
return StringHelper::Implode(strings, ", ");
}
std::string ZVector::GetSourceOutputCode(const std::string& prefix)
{
if (parent != nullptr)
parent->AddDeclaration(rawDataIndex, DeclarationAlignment::None, GetRawDataSize(), GetSourceTypeName(), GetName(), GetSourceValue());
return "";
}
ZResourceType ZVector::GetResourceType()
{
return ZResourceType::Vector;
}

30
tools/ZAPD/ZAPD/ZVector.h Normal file
View file

@ -0,0 +1,30 @@
#pragma once
#include <vector>
#include <string>
#include <stdint.h>
#include "ZResource.h"
#include "ZScalar.h"
#include "tinyxml2.h"
class ZVector : public ZResource
{
public:
std::vector<ZScalar*> scalars;
ZScalarType scalarType;
uint32_t dimensions;
ZVector();
void ParseXML(tinyxml2::XMLElement* reader);
std::string GetSourceTypeName();
std::string GetSourceValue();
std::string GetSourceOutputCode(const std::string& prefix);
int GetRawDataSize();
ZResourceType GetResourceType();
static ZVector* ExtractFromXML(tinyxml2::XMLElement* reader, const std::vector<uint8_t>& nRawData, const int rawDataIndex, const std::string& nRelPath);
protected:
void ParseRawData();
};

Some files were not shown because too many files have changed in this diff Show more