mirror of
https://github.com/zeldaret/oot.git
synced 2025-07-04 06:54:33 +00:00
git subrepo pull --force tools/ZAPD (#1251)
subrepo: subdir: "tools/ZAPD" merged: "f54f2fa96" upstream: origin: "https://github.com/zeldaret/ZAPD.git" branch: "master" commit: "f54f2fa96" git-subrepo: version: "0.4.3" origin: "???" commit: "???"
This commit is contained in:
parent
0a95d17aa8
commit
5015af4c57
39 changed files with 3382 additions and 3094 deletions
|
@ -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 = 0ba78130478ee1272bc0e2f2fec2d162e7f7f995
|
commit = f54f2fa96bfc476a15fcc3ebcd6124bc19164fcd
|
||||||
parent = 4afee2cfb8bc9cd5c7c217c38138174a9ce1fd99
|
parent = 0a95d17aa89d6a80d3b23c7e706ec4bf845d48c1
|
||||||
method = merge
|
method = merge
|
||||||
cmdver = 0.4.3
|
cmdver = 0.4.3
|
||||||
|
|
|
@ -50,10 +50,10 @@ void ExporterExample_Collision::Save(ZResource* res, [[maybe_unused]] fs::path o
|
||||||
writer->Write(col->polygons[i].vtxA);
|
writer->Write(col->polygons[i].vtxA);
|
||||||
writer->Write(col->polygons[i].vtxB);
|
writer->Write(col->polygons[i].vtxB);
|
||||||
writer->Write(col->polygons[i].vtxC);
|
writer->Write(col->polygons[i].vtxC);
|
||||||
writer->Write(col->polygons[i].a);
|
writer->Write(col->polygons[i].normX);
|
||||||
writer->Write(col->polygons[i].b);
|
writer->Write(col->polygons[i].normY);
|
||||||
writer->Write(col->polygons[i].c);
|
writer->Write(col->polygons[i].normZ);
|
||||||
writer->Write(col->polygons[i].d);
|
writer->Write(col->polygons[i].dist);
|
||||||
}
|
}
|
||||||
|
|
||||||
writer->Seek(col->polyTypeDefSegmentOffset, SeekOffsetType::Start);
|
writer->Seek(col->polyTypeDefSegmentOffset, SeekOffsetType::Start);
|
||||||
|
|
|
@ -1,160 +1,160 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" 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>16.0</VCProjectVersion>
|
<VCProjectVersion>16.0</VCProjectVersion>
|
||||||
<Keyword>Win32Proj</Keyword>
|
<Keyword>Win32Proj</Keyword>
|
||||||
<ProjectGuid>{65608eb0-1a47-45ad-ab66-192fb64c762c}</ProjectGuid>
|
<ProjectGuid>{65608eb0-1a47-45ad-ab66-192fb64c762c}</ProjectGuid>
|
||||||
<RootNamespace>ExporterTest</RootNamespace>
|
<RootNamespace>ExporterTest</RootNamespace>
|
||||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||||
<ProjectName>ExporterExample</ProjectName>
|
<ProjectName>ExporterExample</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>v143</PlatformToolset>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</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>v143</PlatformToolset>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
<PlatformToolset>v142</PlatformToolset>
|
<PlatformToolset>v143</PlatformToolset>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</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>v143</PlatformToolset>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</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|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<LinkIncremental>true</LinkIncremental>
|
<LinkIncremental>true</LinkIncremental>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<LinkIncremental>false</LinkIncremental>
|
<LinkIncremental>false</LinkIncremental>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
<LinkIncremental>true</LinkIncremental>
|
<LinkIncremental>true</LinkIncremental>
|
||||||
<IncludePath>$(ProjectDir)..\ZAPD\;$(ProjectDir)..\ZAPDUtils;$(ProjectDir)..\lib\tinyxml2;$(ProjectDir)..\lib\libgfxd;$(ProjectDir)..\lib\elfio;$(ProjectDir)..\lib\stb;$(ProjectDir);$(IncludePath)</IncludePath>
|
<IncludePath>$(ProjectDir)..\ZAPD\;$(ProjectDir)..\ZAPDUtils;$(ProjectDir)..\lib\tinyxml2;$(ProjectDir)..\lib\libgfxd;$(ProjectDir)..\lib\elfio;$(ProjectDir)..\lib\stb;$(ProjectDir);$(IncludePath)</IncludePath>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
<LinkIncremental>false</LinkIncremental>
|
<LinkIncremental>false</LinkIncremental>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<PreprocessorDefinitions>_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
<LanguageStandard_C>stdc11</LanguageStandard_C>
|
<LanguageStandard_C>stdc11</LanguageStandard_C>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="CollisionExporter.h" />
|
<ClInclude Include="CollisionExporter.h" />
|
||||||
<ClInclude Include="TextureExporter.h" />
|
<ClInclude Include="TextureExporter.h" />
|
||||||
<ClInclude Include="RoomExporter.h" />
|
<ClInclude Include="RoomExporter.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="CollisionExporter.cpp" />
|
<ClCompile Include="CollisionExporter.cpp" />
|
||||||
<ClCompile Include="TextureExporter.cpp" />
|
<ClCompile Include="TextureExporter.cpp" />
|
||||||
<ClCompile Include="Main.cpp" />
|
<ClCompile Include="Main.cpp" />
|
||||||
<ClCompile Include="RoomExporter.cpp" />
|
<ClCompile Include="RoomExporter.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -398,7 +398,7 @@ void ImageBackend::SetPaletteIndex(size_t index, uint8_t nR, uint8_t nG, uint8_t
|
||||||
alphaPalette[index] = nA;
|
alphaPalette[index] = nA;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImageBackend::SetPalette(const ImageBackend& pal)
|
void ImageBackend::SetPalette(const ImageBackend& pal, uint32_t offset)
|
||||||
{
|
{
|
||||||
assert(isColorIndexed);
|
assert(isColorIndexed);
|
||||||
size_t bytePerPixel = pal.GetBytesPerPixel();
|
size_t bytePerPixel = pal.GetBytesPerPixel();
|
||||||
|
@ -422,7 +422,7 @@ void ImageBackend::SetPalette(const ImageBackend& pal)
|
||||||
uint8_t g = pal.pixelMatrix[y][x * bytePerPixel + 1];
|
uint8_t g = pal.pixelMatrix[y][x * bytePerPixel + 1];
|
||||||
uint8_t b = pal.pixelMatrix[y][x * bytePerPixel + 2];
|
uint8_t b = pal.pixelMatrix[y][x * bytePerPixel + 2];
|
||||||
uint8_t a = pal.pixelMatrix[y][x * bytePerPixel + 3];
|
uint8_t a = pal.pixelMatrix[y][x * bytePerPixel + 3];
|
||||||
SetPaletteIndex(index, r, g, b, a);
|
SetPaletteIndex(index + offset, r, g, b, a);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,8 +42,9 @@ public:
|
||||||
void SetGrayscalePixel(size_t y, size_t x, uint8_t grayscale, uint8_t alpha = 0);
|
void SetGrayscalePixel(size_t y, size_t x, uint8_t grayscale, uint8_t alpha = 0);
|
||||||
|
|
||||||
void SetIndexedPixel(size_t y, size_t x, uint8_t index, uint8_t grayscale);
|
void SetIndexedPixel(size_t y, size_t x, uint8_t index, uint8_t grayscale);
|
||||||
|
void SetIndexedPixel(size_t y, size_t x, uint8_t index, RGBAPixel pixel);
|
||||||
void SetPaletteIndex(size_t index, uint8_t nR, uint8_t nG, uint8_t nB, uint8_t nA);
|
void SetPaletteIndex(size_t index, uint8_t nR, uint8_t nG, uint8_t nB, uint8_t nA);
|
||||||
void SetPalette(const ImageBackend& pal);
|
void SetPalette(const ImageBackend& pal, uint32_t offset = 0);
|
||||||
|
|
||||||
uint32_t GetWidth() const;
|
uint32_t GetWidth() const;
|
||||||
uint32_t GetHeight() const;
|
uint32_t GetHeight() const;
|
||||||
|
|
208
tools/ZAPD/ZAPD/OtherStructs/CutsceneMM_Commands.cpp
Normal file
208
tools/ZAPD/ZAPD/OtherStructs/CutsceneMM_Commands.cpp
Normal file
|
@ -0,0 +1,208 @@
|
||||||
|
#include "CutsceneMM_Commands.h"
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
#include <unordered_map>
|
||||||
|
|
||||||
|
#include "Utils/BitConverter.h"
|
||||||
|
#include "Utils/StringHelper.h"
|
||||||
|
|
||||||
|
// Specific for command lists where each entry has size 8 bytes
|
||||||
|
const std::unordered_map<CutsceneMMCommands, CsCommandListDescriptor> csCommandsDescMM = {
|
||||||
|
{CutsceneMMCommands::CS_CMD_MISC, {"CS_MISC", "(0x%02X, %i, %i, %i)"}},
|
||||||
|
{CutsceneMMCommands::CS_CMD_SET_LIGHTING, {"CS_LIGHTING", "(0x%02X, %i, %i)"}},
|
||||||
|
{CutsceneMMCommands::CS_CMD_SCENE_TRANS_FX, {"CS_SCENE_TRANS_FX", "(%i, %i, %i)"}},
|
||||||
|
{CutsceneMMCommands::CS_CMD_MOTIONBLUR, {"CS_MOTIONBLUR", "(%i, %i, %i)"}},
|
||||||
|
{CutsceneMMCommands::CS_CMD_GIVETATL, {"CS_GIVETATL", "(%i, %i, %i)"}},
|
||||||
|
{CutsceneMMCommands::CS_CMD_PLAYSEQ, {"CS_PLAYSEQ", "(0x%04X, %i, %i)"}},
|
||||||
|
{CutsceneMMCommands::CS_CMD_130, {"CS_SCENE_UNK_130", "(0x%04X, %i, %i, %i)"}},
|
||||||
|
{CutsceneMMCommands::CS_CMD_131, {"CS_SCENE_UNK_131", "(0x%04X, %i, %i, %i)"}},
|
||||||
|
{CutsceneMMCommands::CS_CMD_132, {"CS_SCENE_UNK_132", "(%i, %i, %i)"}},
|
||||||
|
{CutsceneMMCommands::CS_CMD_STOPSEQ, {"CS_STOPSEQ", "(0x%04X, %i, %i, %i)"}},
|
||||||
|
{CutsceneMMCommands::CS_CMD_PLAYAMBIENCE, {"CS_PLAYAMBIENCE", "(0x%04X, %i, %i, %i)"}},
|
||||||
|
{CutsceneMMCommands::CS_CMD_FADEAMBIENCE, {"CS_FADEAMBIENCE", "(0x%04X, %i, %i, %i)"}},
|
||||||
|
{CutsceneMMCommands::CS_CMD_TERMINATOR, {"CS_TERMINATOR", "(%i, %i, %i)"}},
|
||||||
|
{CutsceneMMCommands::CS_CMD_CHOOSE_CREDITS_SCENES,
|
||||||
|
{"CS_CHOOSE_CREDITS_SCENES", "(%i, %i, %i)"}},
|
||||||
|
};
|
||||||
|
|
||||||
|
CutsceneSubCommandEntry_GenericMMCmd::CutsceneSubCommandEntry_GenericMMCmd(
|
||||||
|
const std::vector<uint8_t>& rawData, offset_t rawDataIndex, CutsceneMMCommands cmdId)
|
||||||
|
: CutsceneSubCommandEntry(rawData, rawDataIndex), commandId(cmdId)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneSubCommandEntry_GenericMMCmd::GetBodySourceCode() const
|
||||||
|
{
|
||||||
|
const auto& element = csCommandsDescMM.find(commandId);
|
||||||
|
std::string entryFmt = "CS_UNK_DATA(0x%02X, %i, %i, %i)";
|
||||||
|
|
||||||
|
if (element != csCommandsDescMM.end())
|
||||||
|
{
|
||||||
|
entryFmt = element->second.cmdMacro;
|
||||||
|
entryFmt += element->second.args;
|
||||||
|
}
|
||||||
|
|
||||||
|
return StringHelper::Sprintf(entryFmt.c_str(), base, startFrame, endFrame, pad);
|
||||||
|
}
|
||||||
|
|
||||||
|
CutsceneMMCommand_GenericCmd::CutsceneMMCommand_GenericCmd(const std::vector<uint8_t>& rawData,
|
||||||
|
offset_t rawDataIndex,
|
||||||
|
CutsceneMMCommands cmdId)
|
||||||
|
: CutsceneCommand(rawData, rawDataIndex)
|
||||||
|
{
|
||||||
|
rawDataIndex += 4;
|
||||||
|
|
||||||
|
commandID = static_cast<uint32_t>(cmdId);
|
||||||
|
|
||||||
|
for (size_t i = 0; i < numEntries; i++)
|
||||||
|
{
|
||||||
|
auto* entry = new CutsceneSubCommandEntry_GenericMMCmd(rawData, rawDataIndex, cmdId);
|
||||||
|
entries.push_back(entry);
|
||||||
|
rawDataIndex += entry->GetRawSize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneMMCommand_GenericCmd::GetCommandMacro() const
|
||||||
|
{
|
||||||
|
const auto& element = csCommandsDescMM.find(static_cast<CutsceneMMCommands>(commandID));
|
||||||
|
|
||||||
|
if (element != csCommandsDescMM.end())
|
||||||
|
{
|
||||||
|
return StringHelper::Sprintf("%s_LIST(%i)", element->second.cmdMacro, numEntries);
|
||||||
|
}
|
||||||
|
|
||||||
|
return StringHelper::Sprintf("CS_UNK_DATA_LIST(0x%X, %i)", commandID, numEntries);
|
||||||
|
}
|
||||||
|
|
||||||
|
CutsceneSubCommandEntry_Camera::CutsceneSubCommandEntry_Camera(const std::vector<uint8_t>& rawData,
|
||||||
|
offset_t rawDataIndex)
|
||||||
|
: CutsceneSubCommandEntry(rawData, rawDataIndex)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneSubCommandEntry_Camera::GetBodySourceCode() const
|
||||||
|
{
|
||||||
|
return StringHelper::Sprintf("CMD_HH(0x%04X, 0x%04X)", base, startFrame);
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t CutsceneSubCommandEntry_Camera::GetRawSize() const
|
||||||
|
{
|
||||||
|
return 0x04;
|
||||||
|
}
|
||||||
|
|
||||||
|
CutsceneMMCommand_Camera::CutsceneMMCommand_Camera(const std::vector<uint8_t>& rawData,
|
||||||
|
offset_t rawDataIndex)
|
||||||
|
: CutsceneCommand(rawData, rawDataIndex)
|
||||||
|
{
|
||||||
|
rawDataIndex += 4;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < numEntries / 4; i++)
|
||||||
|
{
|
||||||
|
auto* entry = new CutsceneSubCommandEntry_Camera(rawData, rawDataIndex);
|
||||||
|
entries.push_back(entry);
|
||||||
|
rawDataIndex += entry->GetRawSize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneMMCommand_Camera::GetCommandMacro() const
|
||||||
|
{
|
||||||
|
return StringHelper::Sprintf("CS_CAMERA_LIST(%i)", numEntries);
|
||||||
|
}
|
||||||
|
|
||||||
|
CutsceneSubCommandEntry_FadeScreen::CutsceneSubCommandEntry_FadeScreen(
|
||||||
|
const std::vector<uint8_t>& rawData, offset_t rawDataIndex)
|
||||||
|
: CutsceneSubCommandEntry(rawData, rawDataIndex)
|
||||||
|
{
|
||||||
|
unk_06 = BitConverter::ToUInt8BE(rawData, rawDataIndex + 0x06);
|
||||||
|
unk_07 = BitConverter::ToUInt8BE(rawData, rawDataIndex + 0x07);
|
||||||
|
unk_08 = BitConverter::ToUInt8BE(rawData, rawDataIndex + 0x08);
|
||||||
|
unk_09 = BitConverter::ToUInt8BE(rawData, rawDataIndex + 0x09);
|
||||||
|
unk_0A = BitConverter::ToUInt8BE(rawData, rawDataIndex + 0x0A);
|
||||||
|
unk_0B = BitConverter::ToUInt8BE(rawData, rawDataIndex + 0x0B);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneSubCommandEntry_FadeScreen::GetBodySourceCode() const
|
||||||
|
{
|
||||||
|
return StringHelper::Sprintf("CS_FADESCREEN(0x%02X, %i, %i, %i, %i, %i)", base, startFrame,
|
||||||
|
endFrame, unk_06, unk_07, unk_08);
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t CutsceneSubCommandEntry_FadeScreen::GetRawSize() const
|
||||||
|
{
|
||||||
|
return 0x0C;
|
||||||
|
}
|
||||||
|
|
||||||
|
CutsceneMMCommand_FadeScreen::CutsceneMMCommand_FadeScreen(const std::vector<uint8_t>& rawData,
|
||||||
|
offset_t rawDataIndex)
|
||||||
|
: CutsceneCommand(rawData, rawDataIndex)
|
||||||
|
{
|
||||||
|
rawDataIndex += 4;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < numEntries; i++)
|
||||||
|
{
|
||||||
|
auto* entry = new CutsceneSubCommandEntry_FadeScreen(rawData, rawDataIndex);
|
||||||
|
entries.push_back(entry);
|
||||||
|
rawDataIndex += entry->GetRawSize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneMMCommand_FadeScreen::GetCommandMacro() const
|
||||||
|
{
|
||||||
|
return StringHelper::Sprintf("CS_FADESCREEN_LIST(%i)", numEntries);
|
||||||
|
}
|
||||||
|
|
||||||
|
CutsceneSubCommandEntry_FadeSeq::CutsceneSubCommandEntry_FadeSeq(
|
||||||
|
const std::vector<uint8_t>& rawData, offset_t rawDataIndex)
|
||||||
|
: CutsceneSubCommandEntry(rawData, rawDataIndex)
|
||||||
|
{
|
||||||
|
unk_08 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneSubCommandEntry_FadeSeq::GetBodySourceCode() const
|
||||||
|
{
|
||||||
|
return StringHelper::Sprintf("CS_FADESEQ(%i, %i, %i)", base, startFrame, endFrame);
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t CutsceneSubCommandEntry_FadeSeq::GetRawSize() const
|
||||||
|
{
|
||||||
|
return 0x0C;
|
||||||
|
}
|
||||||
|
|
||||||
|
CutsceneMMCommand_FadeSeq::CutsceneMMCommand_FadeSeq(const std::vector<uint8_t>& rawData,
|
||||||
|
offset_t rawDataIndex)
|
||||||
|
: CutsceneCommand(rawData, rawDataIndex)
|
||||||
|
{
|
||||||
|
rawDataIndex += 4;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < numEntries; i++)
|
||||||
|
{
|
||||||
|
auto* entry = new CutsceneSubCommandEntry_FadeSeq(rawData, rawDataIndex);
|
||||||
|
entries.push_back(entry);
|
||||||
|
rawDataIndex += entry->GetRawSize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneMMCommand_FadeSeq::GetCommandMacro() const
|
||||||
|
{
|
||||||
|
return StringHelper::Sprintf("CS_FADESEQ_LIST(%i)", numEntries);
|
||||||
|
}
|
||||||
|
|
||||||
|
CutsceneSubCommandEntry_NonImplemented::CutsceneSubCommandEntry_NonImplemented(
|
||||||
|
const std::vector<uint8_t>& rawData, offset_t rawDataIndex)
|
||||||
|
: CutsceneSubCommandEntry(rawData, rawDataIndex)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
CutsceneMMCommand_NonImplemented::CutsceneMMCommand_NonImplemented(
|
||||||
|
const std::vector<uint8_t>& rawData, offset_t rawDataIndex)
|
||||||
|
: CutsceneCommand(rawData, rawDataIndex)
|
||||||
|
{
|
||||||
|
rawDataIndex += 4;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < numEntries; i++)
|
||||||
|
{
|
||||||
|
auto* entry = new CutsceneSubCommandEntry_NonImplemented(rawData, rawDataIndex);
|
||||||
|
entries.push_back(entry);
|
||||||
|
rawDataIndex += entry->GetRawSize();
|
||||||
|
}
|
||||||
|
}
|
140
tools/ZAPD/ZAPD/OtherStructs/CutsceneMM_Commands.h
Normal file
140
tools/ZAPD/ZAPD/OtherStructs/CutsceneMM_Commands.h
Normal file
|
@ -0,0 +1,140 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Cutscene_Commands.h"
|
||||||
|
|
||||||
|
enum class CutsceneMMCommands
|
||||||
|
{
|
||||||
|
/* 0x00A */ CS_CMD_TEXTBOX = 0xA,
|
||||||
|
/* 0x05A */ CS_CMD_CAMERA = 0x5A,
|
||||||
|
/* 0x096 */ CS_CMD_MISC = 0x96,
|
||||||
|
/* 0x097 */ CS_CMD_SET_LIGHTING,
|
||||||
|
/* 0x098 */ CS_CMD_SCENE_TRANS_FX,
|
||||||
|
/* 0x099 */ CS_CMD_MOTIONBLUR,
|
||||||
|
/* 0x09A */ CS_CMD_GIVETATL,
|
||||||
|
/* 0x09B */ CS_CMD_FADESCREEN,
|
||||||
|
/* 0x09C */ CS_CMD_FADESEQ,
|
||||||
|
/* 0x09D */ CS_CMD_SETTIME,
|
||||||
|
/* 0x0C8 */ CS_CMD_SET_PLAYER_ACTION = 0xC8,
|
||||||
|
/* 0x0FA */ CS_CMD_UNK_FA = 0xFA,
|
||||||
|
/* 0x0FE */ CS_CMD_UNK_FE = 0xFE,
|
||||||
|
/* 0x0FF */ CS_CMD_UNK_FF,
|
||||||
|
/* 0x100 */ CS_CMD_UNK_100,
|
||||||
|
/* 0x101 */ CS_CMD_UNK_101,
|
||||||
|
/* 0x102 */ CS_CMD_UNK_102,
|
||||||
|
/* 0x103 */ CS_CMD_UNK_103,
|
||||||
|
/* 0x104 */ CS_CMD_UNK_104,
|
||||||
|
/* 0x105 */ CS_CMD_UNK_105,
|
||||||
|
/* 0x108 */ CS_CMD_UNK_108 = 0x108,
|
||||||
|
/* 0x109 */ CS_CMD_UNK_109,
|
||||||
|
/* 0x12C */ CS_CMD_PLAYSEQ = 0x12C,
|
||||||
|
/* 0x12D */ CS_CMD_UNK_12D,
|
||||||
|
/* 0x130 */ CS_CMD_130 = 0x130,
|
||||||
|
/* 0x131 */ CS_CMD_131 = 0x131,
|
||||||
|
/* 0x132 */ CS_CMD_132 = 0x132,
|
||||||
|
/* 0x133 */ CS_CMD_STOPSEQ,
|
||||||
|
/* 0x134 */ CS_CMD_PLAYAMBIENCE,
|
||||||
|
/* 0x135 */ CS_CMD_FADEAMBIENCE,
|
||||||
|
/* 0x15E */ CS_CMD_TERMINATOR = 0x15E,
|
||||||
|
/* 0x15F */ CS_CMD_CHOOSE_CREDITS_SCENES,
|
||||||
|
/* 0x190 */ CS_CMD_RUMBLE = 0x190,
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneSubCommandEntry_GenericMMCmd : public CutsceneSubCommandEntry
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CutsceneMMCommands commandId;
|
||||||
|
|
||||||
|
CutsceneSubCommandEntry_GenericMMCmd(const std::vector<uint8_t>& rawData, offset_t rawDataIndex,
|
||||||
|
CutsceneMMCommands cmdId);
|
||||||
|
|
||||||
|
std::string GetBodySourceCode() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneMMCommand_GenericCmd : public CutsceneCommand
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CutsceneMMCommand_GenericCmd(const std::vector<uint8_t>& rawData, offset_t rawDataIndex,
|
||||||
|
CutsceneMMCommands cmdId);
|
||||||
|
|
||||||
|
std::string GetCommandMacro() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
// TODO: MM cutscene camera command is implemented as a placeholder until we better understand how
|
||||||
|
// it works
|
||||||
|
class CutsceneSubCommandEntry_Camera : public CutsceneSubCommandEntry
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
uint32_t unk_08;
|
||||||
|
|
||||||
|
CutsceneSubCommandEntry_Camera(const std::vector<uint8_t>& rawData, offset_t rawDataIndex);
|
||||||
|
|
||||||
|
std::string GetBodySourceCode() const override;
|
||||||
|
|
||||||
|
size_t GetRawSize() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneMMCommand_Camera : public CutsceneCommand
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CutsceneMMCommand_Camera(const std::vector<uint8_t>& rawData, offset_t rawDataIndex);
|
||||||
|
|
||||||
|
std::string GetCommandMacro() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneSubCommandEntry_FadeScreen : public CutsceneSubCommandEntry
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
uint8_t unk_06;
|
||||||
|
uint8_t unk_07;
|
||||||
|
uint8_t unk_08;
|
||||||
|
uint8_t unk_09;
|
||||||
|
uint8_t unk_0A;
|
||||||
|
uint8_t unk_0B;
|
||||||
|
|
||||||
|
CutsceneSubCommandEntry_FadeScreen(const std::vector<uint8_t>& rawData, offset_t rawDataIndex);
|
||||||
|
|
||||||
|
std::string GetBodySourceCode() const override;
|
||||||
|
|
||||||
|
size_t GetRawSize() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneMMCommand_FadeScreen : public CutsceneCommand
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CutsceneMMCommand_FadeScreen(const std::vector<uint8_t>& rawData, offset_t rawDataIndex);
|
||||||
|
|
||||||
|
std::string GetCommandMacro() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneSubCommandEntry_FadeSeq : public CutsceneSubCommandEntry
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
uint32_t unk_08;
|
||||||
|
|
||||||
|
CutsceneSubCommandEntry_FadeSeq(const std::vector<uint8_t>& rawData, offset_t rawDataIndex);
|
||||||
|
|
||||||
|
std::string GetBodySourceCode() const override;
|
||||||
|
|
||||||
|
size_t GetRawSize() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneMMCommand_FadeSeq : public CutsceneCommand
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CutsceneMMCommand_FadeSeq(const std::vector<uint8_t>& rawData, offset_t rawDataIndex);
|
||||||
|
|
||||||
|
std::string GetCommandMacro() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneSubCommandEntry_NonImplemented : public CutsceneSubCommandEntry
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CutsceneSubCommandEntry_NonImplemented(const std::vector<uint8_t>& rawData,
|
||||||
|
offset_t rawDataIndex);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneMMCommand_NonImplemented : public CutsceneCommand
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CutsceneMMCommand_NonImplemented(const std::vector<uint8_t>& rawData, offset_t rawDataIndex);
|
||||||
|
};
|
591
tools/ZAPD/ZAPD/OtherStructs/Cutscene_Commands.cpp
Normal file
591
tools/ZAPD/ZAPD/OtherStructs/Cutscene_Commands.cpp
Normal file
|
@ -0,0 +1,591 @@
|
||||||
|
#include "Cutscene_Commands.h"
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
#include <unordered_map>
|
||||||
|
|
||||||
|
#include "CutsceneMM_Commands.h"
|
||||||
|
#include "Globals.h"
|
||||||
|
#include "Utils/BitConverter.h"
|
||||||
|
#include "Utils/StringHelper.h"
|
||||||
|
|
||||||
|
/* CutsceneSubCommandEntry */
|
||||||
|
|
||||||
|
CutsceneSubCommandEntry::CutsceneSubCommandEntry(const std::vector<uint8_t>& rawData,
|
||||||
|
offset_t rawDataIndex)
|
||||||
|
{
|
||||||
|
base = BitConverter::ToUInt16BE(rawData, rawDataIndex + 0);
|
||||||
|
startFrame = BitConverter::ToUInt16BE(rawData, rawDataIndex + 2);
|
||||||
|
endFrame = BitConverter::ToUInt16BE(rawData, rawDataIndex + 4);
|
||||||
|
pad = BitConverter::ToUInt16BE(rawData, rawDataIndex + 6);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneSubCommandEntry::GetBodySourceCode() const
|
||||||
|
{
|
||||||
|
return StringHelper::Sprintf("CMD_HH(0x%04X, 0x%04X), CMD_HH(0x%04X, 0x%04X)", base, startFrame,
|
||||||
|
endFrame, pad);
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t CutsceneSubCommandEntry::GetRawSize() const
|
||||||
|
{
|
||||||
|
return 0x08;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* CutsceneCommand */
|
||||||
|
|
||||||
|
CutsceneCommand::CutsceneCommand(const std::vector<uint8_t>& rawData, offset_t rawDataIndex)
|
||||||
|
{
|
||||||
|
numEntries = BitConverter::ToUInt32BE(rawData, rawDataIndex + 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
CutsceneCommand::~CutsceneCommand()
|
||||||
|
{
|
||||||
|
for (auto& entry : entries)
|
||||||
|
{
|
||||||
|
delete entry;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneCommand::GetCommandMacro() const
|
||||||
|
{
|
||||||
|
return StringHelper::Sprintf("CMD_W(0x%08X), CMD_W(0x%08X)", commandID, numEntries);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneCommand::GenerateSourceCode() const
|
||||||
|
{
|
||||||
|
std::string result;
|
||||||
|
|
||||||
|
result += GetCommandMacro();
|
||||||
|
result += ",\n";
|
||||||
|
|
||||||
|
for (auto& entry : entries)
|
||||||
|
{
|
||||||
|
result += " ";
|
||||||
|
result += entry->GetBodySourceCode();
|
||||||
|
result += ",\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t CutsceneCommand::GetCommandSize() const
|
||||||
|
{
|
||||||
|
size_t size = 0;
|
||||||
|
if (entries.size() > 0)
|
||||||
|
{
|
||||||
|
size = entries.at(0)->GetRawSize() * entries.size();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size = 0x08 * numEntries;
|
||||||
|
}
|
||||||
|
return 0x08 + size;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CutsceneCommand::SetCommandID(uint32_t nCommandID)
|
||||||
|
{
|
||||||
|
commandID = nCommandID;
|
||||||
|
|
||||||
|
for (auto& entry : entries)
|
||||||
|
{
|
||||||
|
entry->commandID = commandID;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Specific for command lists where each entry has size 0x30 bytes
|
||||||
|
const std::unordered_map<CutsceneCommands, CsCommandListDescriptor> csCommandsDesc = {
|
||||||
|
{CutsceneCommands::Misc,
|
||||||
|
{"CS_MISC", "(0x%04X, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i)"}},
|
||||||
|
{CutsceneCommands::SetLighting,
|
||||||
|
{"CS_LIGHTING", "(0x%02X, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i)"}},
|
||||||
|
{CutsceneCommands::PlayBGM, {"CS_PLAY_BGM", "(%i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i)"}},
|
||||||
|
{CutsceneCommands::StopBGM, {"CS_STOP_BGM", "(%i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i)"}},
|
||||||
|
{CutsceneCommands::FadeBGM, {"CS_FADE_BGM", "(%i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i)"}},
|
||||||
|
};
|
||||||
|
|
||||||
|
CutsceneSubCommandEntry_GenericCmd::CutsceneSubCommandEntry_GenericCmd(
|
||||||
|
const std::vector<uint8_t>& rawData, offset_t rawDataIndex, CutsceneCommands cmdId)
|
||||||
|
: CutsceneSubCommandEntry(rawData, rawDataIndex), commandId(cmdId)
|
||||||
|
{
|
||||||
|
word0 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 0x0);
|
||||||
|
word1 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 0x4);
|
||||||
|
|
||||||
|
unused1 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 0x8);
|
||||||
|
unused2 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 0xC);
|
||||||
|
unused3 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 0x10);
|
||||||
|
unused4 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 0x14);
|
||||||
|
unused5 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 0x18);
|
||||||
|
unused6 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 0x1C);
|
||||||
|
unused7 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 0x20);
|
||||||
|
unused8 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 0x24);
|
||||||
|
unused9 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 0x28);
|
||||||
|
unused10 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 0x2C);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneSubCommandEntry_GenericCmd::GetBodySourceCode() const
|
||||||
|
{
|
||||||
|
const auto& element = csCommandsDesc.find(commandId);
|
||||||
|
|
||||||
|
if (element != csCommandsDesc.end())
|
||||||
|
{
|
||||||
|
std::string entryFmt = element->second.cmdMacro;
|
||||||
|
entryFmt += element->second.args;
|
||||||
|
|
||||||
|
return StringHelper::Sprintf(entryFmt.c_str(), base, startFrame, endFrame, pad, unused1,
|
||||||
|
unused2, unused3, unused4, unused5, unused6, unused7, unused8,
|
||||||
|
unused9, unused10);
|
||||||
|
}
|
||||||
|
|
||||||
|
return StringHelper::Sprintf("CS_UNK_DATA(0x%08X, 0x%08X, 0x%08X, 0x%08X, 0x%08X, 0x%08X, "
|
||||||
|
"0x%08X, 0x%08X, 0x%08X, 0x%08X, 0x%08X, 0x%08X)",
|
||||||
|
word0, word1, unused1, unused2, unused3, unused4, unused5, unused6,
|
||||||
|
unused7, unused8, unused9, unused10);
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t CutsceneSubCommandEntry_GenericCmd::GetRawSize() const
|
||||||
|
{
|
||||||
|
return 0x30;
|
||||||
|
}
|
||||||
|
|
||||||
|
CutsceneCommand_GenericCmd::CutsceneCommand_GenericCmd(const std::vector<uint8_t>& rawData,
|
||||||
|
offset_t rawDataIndex,
|
||||||
|
CutsceneCommands cmdId)
|
||||||
|
: CutsceneCommand(rawData, rawDataIndex)
|
||||||
|
{
|
||||||
|
rawDataIndex += 4;
|
||||||
|
|
||||||
|
commandID = static_cast<uint32_t>(cmdId);
|
||||||
|
|
||||||
|
for (size_t i = 0; i < numEntries; i++)
|
||||||
|
{
|
||||||
|
auto* entry = new CutsceneSubCommandEntry_GenericCmd(rawData, rawDataIndex, cmdId);
|
||||||
|
entries.push_back(entry);
|
||||||
|
rawDataIndex += entry->GetRawSize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneCommand_GenericCmd::GetCommandMacro() const
|
||||||
|
{
|
||||||
|
const auto& element = csCommandsDesc.find(static_cast<CutsceneCommands>(commandID));
|
||||||
|
|
||||||
|
if (element != csCommandsDesc.end())
|
||||||
|
{
|
||||||
|
return StringHelper::Sprintf("%s_LIST(%i)", element->second.cmdMacro, numEntries);
|
||||||
|
}
|
||||||
|
|
||||||
|
return StringHelper::Sprintf("CS_UNK_DATA_LIST(0x%X, %i)", commandID, numEntries);
|
||||||
|
}
|
||||||
|
|
||||||
|
CutsceneCameraPoint::CutsceneCameraPoint(const std::vector<uint8_t>& rawData, offset_t rawDataIndex)
|
||||||
|
: CutsceneSubCommandEntry(rawData, rawDataIndex)
|
||||||
|
{
|
||||||
|
continueFlag = BitConverter::ToInt8BE(rawData, rawDataIndex + 0);
|
||||||
|
cameraRoll = BitConverter::ToInt8BE(rawData, rawDataIndex + 1);
|
||||||
|
nextPointFrame = BitConverter::ToInt16BE(rawData, rawDataIndex + 2);
|
||||||
|
viewAngle = BitConverter::ToFloatBE(rawData, rawDataIndex + 4);
|
||||||
|
|
||||||
|
posX = BitConverter::ToInt16BE(rawData, rawDataIndex + 8);
|
||||||
|
posY = BitConverter::ToInt16BE(rawData, rawDataIndex + 10);
|
||||||
|
posZ = BitConverter::ToInt16BE(rawData, rawDataIndex + 12);
|
||||||
|
|
||||||
|
unused = BitConverter::ToInt16BE(rawData, rawDataIndex + 14);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneCameraPoint::GetBodySourceCode() const
|
||||||
|
{
|
||||||
|
std::string result = "";
|
||||||
|
|
||||||
|
if (commandID == (int32_t)CutsceneCommands::SetCameraFocus)
|
||||||
|
{
|
||||||
|
result += "CS_CAM_FOCUS_POINT";
|
||||||
|
}
|
||||||
|
else if (commandID == (int32_t)CutsceneCommands::SetCameraFocusLink)
|
||||||
|
{
|
||||||
|
result += "CS_CAM_FOCUS_POINT_PLAYER";
|
||||||
|
}
|
||||||
|
else if (commandID == (int32_t)CutsceneCommands::SetCameraPosLink)
|
||||||
|
{
|
||||||
|
result += "CS_CAM_POS_PLAYER";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result += "CS_CAM_POS";
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string continueMacro = "CS_CMD_CONTINUE";
|
||||||
|
if (continueFlag != 0)
|
||||||
|
continueMacro = "CS_CMD_STOP";
|
||||||
|
|
||||||
|
result +=
|
||||||
|
StringHelper::Sprintf("(%s, 0x%02X, %i, %ff, %i, %i, %i, 0x%04X)", continueMacro.c_str(),
|
||||||
|
cameraRoll, nextPointFrame, viewAngle, posX, posY, posZ, unused);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t CutsceneCameraPoint::GetRawSize() const
|
||||||
|
{
|
||||||
|
return 0x10;
|
||||||
|
}
|
||||||
|
|
||||||
|
CutsceneCommandSetCameraPos::CutsceneCommandSetCameraPos(const std::vector<uint8_t>& rawData,
|
||||||
|
offset_t rawDataIndex)
|
||||||
|
: CutsceneCommand(rawData, rawDataIndex)
|
||||||
|
{
|
||||||
|
base = BitConverter::ToUInt16BE(rawData, rawDataIndex + 0);
|
||||||
|
startFrame = BitConverter::ToUInt16BE(rawData, rawDataIndex + 2);
|
||||||
|
endFrame = BitConverter::ToUInt16BE(rawData, rawDataIndex + 4);
|
||||||
|
unused = BitConverter::ToUInt16BE(rawData, rawDataIndex + 6);
|
||||||
|
|
||||||
|
bool shouldContinue = true;
|
||||||
|
|
||||||
|
uint32_t currentPtr = rawDataIndex + 8;
|
||||||
|
|
||||||
|
while (shouldContinue)
|
||||||
|
{
|
||||||
|
CutsceneCameraPoint* camPoint = new CutsceneCameraPoint(rawData, currentPtr);
|
||||||
|
entries.push_back(camPoint);
|
||||||
|
|
||||||
|
if (camPoint->continueFlag == -1)
|
||||||
|
shouldContinue = false;
|
||||||
|
|
||||||
|
currentPtr += camPoint->GetRawSize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneCommandSetCameraPos::GetCommandMacro() const
|
||||||
|
{
|
||||||
|
std::string result;
|
||||||
|
|
||||||
|
std::string listStr;
|
||||||
|
|
||||||
|
if (commandID == (int32_t)CutsceneCommands::SetCameraFocus)
|
||||||
|
{
|
||||||
|
listStr = "CS_CAM_FOCUS_POINT_LIST";
|
||||||
|
}
|
||||||
|
else if (commandID == (int32_t)CutsceneCommands::SetCameraFocusLink)
|
||||||
|
{
|
||||||
|
listStr = "CS_CAM_FOCUS_POINT_PLAYER_LIST";
|
||||||
|
}
|
||||||
|
else if (commandID == (int32_t)CutsceneCommands::SetCameraPosLink)
|
||||||
|
{
|
||||||
|
listStr = "CS_CAM_POS_PLAYER_LIST";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
listStr = "CS_CAM_POS_LIST";
|
||||||
|
}
|
||||||
|
|
||||||
|
result += StringHelper::Sprintf("%s(%i, %i)", listStr.c_str(), startFrame, endFrame);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t CutsceneCommandSetCameraPos::GetCommandSize() const
|
||||||
|
{
|
||||||
|
return 0x0C + entries.at(0)->GetRawSize() * entries.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
CutsceneSubCommandEntry_Rumble::CutsceneSubCommandEntry_Rumble(const std::vector<uint8_t>& rawData,
|
||||||
|
offset_t rawDataIndex)
|
||||||
|
: CutsceneSubCommandEntry(rawData, rawDataIndex)
|
||||||
|
{
|
||||||
|
unk_06 = BitConverter::ToUInt8BE(rawData, rawDataIndex + 0x06);
|
||||||
|
unk_07 = BitConverter::ToUInt8BE(rawData, rawDataIndex + 0x07);
|
||||||
|
unk_08 = BitConverter::ToUInt8BE(rawData, rawDataIndex + 0x08);
|
||||||
|
unk_09 = BitConverter::ToUInt8BE(rawData, rawDataIndex + 0x09);
|
||||||
|
unk_0A = BitConverter::ToUInt8BE(rawData, rawDataIndex + 0x0A);
|
||||||
|
unk_0B = BitConverter::ToUInt8BE(rawData, rawDataIndex + 0x0B);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneSubCommandEntry_Rumble::GetBodySourceCode() const
|
||||||
|
{
|
||||||
|
if (Globals::Instance->game == ZGame::MM_RETAIL)
|
||||||
|
{
|
||||||
|
return StringHelper::Sprintf("CS_RUMBLE(%i, %i, %i, 0x%02X, 0x%02X, 0x%02X)", base,
|
||||||
|
startFrame, endFrame, unk_06, unk_07, unk_08);
|
||||||
|
}
|
||||||
|
|
||||||
|
return StringHelper::Sprintf("CS_CMD_09(%i, %i, %i, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X)",
|
||||||
|
base, startFrame, endFrame, unk_06, unk_07, unk_08, unk_09, unk_0A,
|
||||||
|
unk_0B);
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t CutsceneSubCommandEntry_Rumble::GetRawSize() const
|
||||||
|
{
|
||||||
|
return 0x0C;
|
||||||
|
}
|
||||||
|
|
||||||
|
CutsceneCommand_Rumble::CutsceneCommand_Rumble(const std::vector<uint8_t>& rawData,
|
||||||
|
offset_t rawDataIndex)
|
||||||
|
: CutsceneCommand(rawData, rawDataIndex)
|
||||||
|
{
|
||||||
|
rawDataIndex += 4;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < numEntries; i++)
|
||||||
|
{
|
||||||
|
auto* entry = new CutsceneSubCommandEntry_Rumble(rawData, rawDataIndex);
|
||||||
|
entries.push_back(entry);
|
||||||
|
rawDataIndex += entry->GetRawSize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneCommand_Rumble::GetCommandMacro() const
|
||||||
|
{
|
||||||
|
if (Globals::Instance->game == ZGame::MM_RETAIL)
|
||||||
|
{
|
||||||
|
return StringHelper::Sprintf("CS_RUMBLE_LIST(%i)", numEntries);
|
||||||
|
}
|
||||||
|
return StringHelper::Sprintf("CS_CMD_09_LIST(%i)", numEntries);
|
||||||
|
}
|
||||||
|
|
||||||
|
CutsceneSubCommandEntry_SetTime::CutsceneSubCommandEntry_SetTime(
|
||||||
|
const std::vector<uint8_t>& rawData, offset_t rawDataIndex)
|
||||||
|
: CutsceneSubCommandEntry(rawData, rawDataIndex)
|
||||||
|
{
|
||||||
|
hour = BitConverter::ToUInt8BE(rawData, rawDataIndex + 6);
|
||||||
|
minute = BitConverter::ToUInt8BE(rawData, rawDataIndex + 7);
|
||||||
|
unk_08 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneSubCommandEntry_SetTime::GetBodySourceCode() const
|
||||||
|
{
|
||||||
|
return StringHelper::Sprintf("CS_TIME(%i, %i, %i, %i, %i, %i)", base, startFrame, endFrame,
|
||||||
|
hour, minute, unk_08);
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t CutsceneSubCommandEntry_SetTime::GetRawSize() const
|
||||||
|
{
|
||||||
|
return 0x0C;
|
||||||
|
}
|
||||||
|
|
||||||
|
CutsceneCommand_SetTime::CutsceneCommand_SetTime(const std::vector<uint8_t>& rawData,
|
||||||
|
offset_t rawDataIndex)
|
||||||
|
: CutsceneCommand(rawData, rawDataIndex)
|
||||||
|
{
|
||||||
|
rawDataIndex += 4;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < numEntries; i++)
|
||||||
|
{
|
||||||
|
auto* entry = new CutsceneSubCommandEntry_SetTime(rawData, rawDataIndex);
|
||||||
|
entries.push_back(entry);
|
||||||
|
rawDataIndex += entry->GetRawSize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneCommand_SetTime::GetCommandMacro() const
|
||||||
|
{
|
||||||
|
return StringHelper::Sprintf("CS_TIME_LIST(%i)", numEntries);
|
||||||
|
}
|
||||||
|
|
||||||
|
CutsceneSubCommandEntry_TextBox::CutsceneSubCommandEntry_TextBox(
|
||||||
|
const std::vector<uint8_t>& rawData, offset_t rawDataIndex)
|
||||||
|
: CutsceneSubCommandEntry(rawData, rawDataIndex)
|
||||||
|
{
|
||||||
|
type = BitConverter::ToUInt16BE(rawData, rawDataIndex + 0x6);
|
||||||
|
textId1 = BitConverter::ToUInt16BE(rawData, rawDataIndex + 0x8);
|
||||||
|
textId2 = BitConverter::ToUInt16BE(rawData, rawDataIndex + 0xA);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneSubCommandEntry_TextBox::GetBodySourceCode() const
|
||||||
|
{
|
||||||
|
if (type == 0xFFFF)
|
||||||
|
{
|
||||||
|
return StringHelper::Sprintf("CS_TEXT_NONE(%i, %i)", startFrame, endFrame);
|
||||||
|
}
|
||||||
|
if (type == 2)
|
||||||
|
{
|
||||||
|
return StringHelper::Sprintf("CS_TEXT_LEARN_SONG(%i, %i, %i, 0x%X)", base, startFrame,
|
||||||
|
endFrame, textId1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Globals::Instance->game == ZGame::MM_RETAIL)
|
||||||
|
{
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
return StringHelper::Sprintf("CS_TEXT_DEFAULT(0x%X, %i, %i, 0x%X, 0x%X)", base,
|
||||||
|
startFrame, endFrame, textId1, textId2);
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
return StringHelper::Sprintf("CS_TEXT_TYPE_1(0x%X, %i, %i, 0x%X, 0x%X)", base,
|
||||||
|
startFrame, endFrame, textId1, textId2);
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
return StringHelper::Sprintf("CS_TEXT_TYPE_3(0x%X, %i, %i, 0x%X, 0x%X)", base,
|
||||||
|
startFrame, endFrame, textId1, textId2);
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
return StringHelper::Sprintf("CS_TEXT_BOSSES_REMAINS(0x%X, %i, %i, 0x%X)", base,
|
||||||
|
startFrame, endFrame, textId1);
|
||||||
|
|
||||||
|
case 5:
|
||||||
|
return StringHelper::Sprintf("CS_TEXT_ALL_NORMAL_MASKS(0x%X, %i, %i, 0x%X)", base,
|
||||||
|
startFrame, endFrame, textId1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return StringHelper::Sprintf("CS_TEXT_DISPLAY_TEXTBOX(0x%X, %i, %i, %i, 0x%X, 0x%X)", base,
|
||||||
|
startFrame, endFrame, type, textId1, textId2);
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t CutsceneSubCommandEntry_TextBox::GetRawSize() const
|
||||||
|
{
|
||||||
|
return 0x0C;
|
||||||
|
}
|
||||||
|
|
||||||
|
CutsceneCommand_TextBox::CutsceneCommand_TextBox(const std::vector<uint8_t>& rawData,
|
||||||
|
offset_t rawDataIndex)
|
||||||
|
: CutsceneCommand(rawData, rawDataIndex)
|
||||||
|
{
|
||||||
|
rawDataIndex += 4;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < numEntries; i++)
|
||||||
|
{
|
||||||
|
auto* entry = new CutsceneSubCommandEntry_TextBox(rawData, rawDataIndex);
|
||||||
|
entries.push_back(entry);
|
||||||
|
rawDataIndex += entry->GetRawSize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneCommand_TextBox::GetCommandMacro() const
|
||||||
|
{
|
||||||
|
return StringHelper::Sprintf("CS_TEXT_LIST(%i)", numEntries);
|
||||||
|
}
|
||||||
|
|
||||||
|
CutsceneSubCommandEntry_ActorAction::CutsceneSubCommandEntry_ActorAction(
|
||||||
|
const std::vector<uint8_t>& rawData, offset_t rawDataIndex)
|
||||||
|
: CutsceneSubCommandEntry(rawData, rawDataIndex)
|
||||||
|
{
|
||||||
|
rotX = BitConverter::ToUInt16BE(rawData, rawDataIndex + 0x6);
|
||||||
|
rotY = BitConverter::ToUInt16BE(rawData, rawDataIndex + 0x8);
|
||||||
|
rotZ = BitConverter::ToUInt16BE(rawData, rawDataIndex + 0xA);
|
||||||
|
startPosX = BitConverter::ToInt32BE(rawData, rawDataIndex + 0xC);
|
||||||
|
startPosY = BitConverter::ToInt32BE(rawData, rawDataIndex + 0x10);
|
||||||
|
startPosZ = BitConverter::ToInt32BE(rawData, rawDataIndex + 0x14);
|
||||||
|
endPosX = BitConverter::ToInt32BE(rawData, rawDataIndex + 0x18);
|
||||||
|
endPosY = BitConverter::ToInt32BE(rawData, rawDataIndex + 0x1C);
|
||||||
|
endPosZ = BitConverter::ToInt32BE(rawData, rawDataIndex + 0x20);
|
||||||
|
normalX = BitConverter::ToFloatBE(rawData, rawDataIndex + 0x24);
|
||||||
|
normalY = BitConverter::ToFloatBE(rawData, rawDataIndex + 0x28);
|
||||||
|
normalZ = BitConverter::ToFloatBE(rawData, rawDataIndex + 0x2C);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneSubCommandEntry_ActorAction::GetBodySourceCode() const
|
||||||
|
{
|
||||||
|
std::string result;
|
||||||
|
|
||||||
|
if (Globals::Instance->game == ZGame::MM_RETAIL)
|
||||||
|
{
|
||||||
|
if (static_cast<CutsceneMMCommands>(commandID) ==
|
||||||
|
CutsceneMMCommands::CS_CMD_SET_PLAYER_ACTION)
|
||||||
|
{
|
||||||
|
result = "CS_PLAYER_ACTION";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = "CS_ACTOR_ACTION";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (static_cast<CutsceneCommands>(commandID) == CutsceneCommands::SetPlayerAction)
|
||||||
|
{
|
||||||
|
result = "CS_PLAYER_ACTION";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = "CS_NPC_ACTION";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result +=
|
||||||
|
StringHelper::Sprintf("(%i, %i, %i, 0x%04X, 0x%04X, 0x%04X, %i, %i, "
|
||||||
|
"%i, %i, %i, %i, %.11ef, %.11ef, %.11ef)",
|
||||||
|
base, startFrame, endFrame, rotX, rotY, rotZ, startPosX, startPosY,
|
||||||
|
startPosZ, endPosX, endPosY, endPosZ, normalX, normalY, normalZ);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t CutsceneSubCommandEntry_ActorAction::GetRawSize() const
|
||||||
|
{
|
||||||
|
return 0x30;
|
||||||
|
}
|
||||||
|
|
||||||
|
CutsceneCommand_ActorAction::CutsceneCommand_ActorAction(const std::vector<uint8_t>& rawData,
|
||||||
|
offset_t rawDataIndex)
|
||||||
|
: CutsceneCommand(rawData, rawDataIndex)
|
||||||
|
{
|
||||||
|
rawDataIndex += 4;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < numEntries; i++)
|
||||||
|
{
|
||||||
|
auto* entry = new CutsceneSubCommandEntry_ActorAction(rawData, rawDataIndex);
|
||||||
|
entries.push_back(entry);
|
||||||
|
rawDataIndex += entry->GetRawSize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneCommand_ActorAction::GetCommandMacro() const
|
||||||
|
{
|
||||||
|
if (Globals::Instance->game == ZGame::MM_RETAIL)
|
||||||
|
{
|
||||||
|
if (static_cast<CutsceneMMCommands>(commandID) ==
|
||||||
|
CutsceneMMCommands::CS_CMD_SET_PLAYER_ACTION)
|
||||||
|
{
|
||||||
|
return StringHelper::Sprintf("CS_PLAYER_ACTION_LIST(%i)", numEntries);
|
||||||
|
}
|
||||||
|
return StringHelper::Sprintf("CS_ACTOR_ACTION_LIST(0x%03X, %i)", commandID, numEntries);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (static_cast<CutsceneCommands>(commandID) == CutsceneCommands::SetPlayerAction)
|
||||||
|
{
|
||||||
|
return StringHelper::Sprintf("CS_PLAYER_ACTION_LIST(%i)", entries.size());
|
||||||
|
}
|
||||||
|
return StringHelper::Sprintf("CS_NPC_ACTION_LIST(0x%03X, %i)", commandID, entries.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
CutsceneCommand_Terminator::CutsceneCommand_Terminator(const std::vector<uint8_t>& rawData,
|
||||||
|
offset_t rawDataIndex)
|
||||||
|
: CutsceneCommand(rawData, rawDataIndex)
|
||||||
|
{
|
||||||
|
rawDataIndex += 4;
|
||||||
|
|
||||||
|
base = BitConverter::ToUInt16BE(rawData, rawDataIndex + 0);
|
||||||
|
startFrame = BitConverter::ToUInt16BE(rawData, rawDataIndex + 2);
|
||||||
|
endFrame = BitConverter::ToUInt16BE(rawData, rawDataIndex + 4);
|
||||||
|
unknown = BitConverter::ToUInt16BE(rawData, rawDataIndex + 6); // endFrame duplicate
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneCommand_Terminator::GenerateSourceCode() const
|
||||||
|
{
|
||||||
|
std::string result;
|
||||||
|
|
||||||
|
result += StringHelper::Sprintf("CS_TERMINATOR(%i, %i, %i),\n", base, startFrame, endFrame);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t CutsceneCommand_Terminator::GetCommandSize() const
|
||||||
|
{
|
||||||
|
return 0x10;
|
||||||
|
}
|
||||||
|
|
||||||
|
CutsceneCommandSceneTransFX::CutsceneCommandSceneTransFX(const std::vector<uint8_t>& rawData,
|
||||||
|
offset_t rawDataIndex)
|
||||||
|
: CutsceneCommand(rawData, rawDataIndex)
|
||||||
|
{
|
||||||
|
rawDataIndex += 4;
|
||||||
|
|
||||||
|
base = BitConverter::ToUInt16BE(rawData, rawDataIndex + 0);
|
||||||
|
startFrame = BitConverter::ToUInt16BE(rawData, rawDataIndex + 2);
|
||||||
|
endFrame = BitConverter::ToUInt16BE(rawData, rawDataIndex + 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CutsceneCommandSceneTransFX::GenerateSourceCode() const
|
||||||
|
{
|
||||||
|
return StringHelper::Sprintf("CS_SCENE_TRANS_FX(%i, %i, %i),\n", base, startFrame, endFrame);
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t CutsceneCommandSceneTransFX::GetCommandSize() const
|
||||||
|
{
|
||||||
|
return 0x10;
|
||||||
|
}
|
267
tools/ZAPD/ZAPD/OtherStructs/Cutscene_Commands.h
Normal file
267
tools/ZAPD/ZAPD/OtherStructs/Cutscene_Commands.h
Normal file
|
@ -0,0 +1,267 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "Declaration.h"
|
||||||
|
|
||||||
|
enum class CutsceneCommands
|
||||||
|
{
|
||||||
|
SetCameraPos = 0x0001,
|
||||||
|
SetCameraFocus = 0x0002,
|
||||||
|
Misc = 0x0003,
|
||||||
|
SetLighting = 0x0004,
|
||||||
|
SetCameraPosLink = 0x0005,
|
||||||
|
SetCameraFocusLink = 0x0006,
|
||||||
|
Cmd07 = 0x0007,
|
||||||
|
Cmd08 = 0x0008,
|
||||||
|
Cmd09 = 0x0009, // Rumble
|
||||||
|
Textbox = 0x0013,
|
||||||
|
SetPlayerAction = 0x000A,
|
||||||
|
SetActorAction1 = 0x000F,
|
||||||
|
SetActorAction2 = 0x000E,
|
||||||
|
SetActorAction3 = 0x0019,
|
||||||
|
SetActorAction4 = 0x001D,
|
||||||
|
SetActorAction5 = 0x001E,
|
||||||
|
SetActorAction6 = 0x002C,
|
||||||
|
SetActorAction7 = 0x001F,
|
||||||
|
SetActorAction8 = 0x0031,
|
||||||
|
SetActorAction9 = 0x003E,
|
||||||
|
SetActorAction10 = 0x008F,
|
||||||
|
SetSceneTransFX = 0x002D,
|
||||||
|
PlayBGM = 0x0056,
|
||||||
|
StopBGM = 0x0057,
|
||||||
|
FadeBGM = 0x007C,
|
||||||
|
SetTime = 0x008C,
|
||||||
|
Terminator = 0x03E8,
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct CsCommandListDescriptor
|
||||||
|
{
|
||||||
|
const char* cmdMacro;
|
||||||
|
const char* args;
|
||||||
|
} CsCommandListDescriptor;
|
||||||
|
|
||||||
|
class CutsceneSubCommandEntry
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
uint16_t base;
|
||||||
|
uint16_t startFrame;
|
||||||
|
uint16_t endFrame;
|
||||||
|
uint16_t pad;
|
||||||
|
|
||||||
|
uint32_t commandID;
|
||||||
|
|
||||||
|
CutsceneSubCommandEntry(const std::vector<uint8_t>& rawData, offset_t rawDataIndex);
|
||||||
|
virtual ~CutsceneSubCommandEntry() = default;
|
||||||
|
|
||||||
|
virtual std::string GetBodySourceCode() const;
|
||||||
|
|
||||||
|
virtual size_t GetRawSize() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneCommand
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
uint32_t commandID;
|
||||||
|
uint32_t commandIndex;
|
||||||
|
|
||||||
|
uint32_t numEntries;
|
||||||
|
std::vector<CutsceneSubCommandEntry*> entries;
|
||||||
|
|
||||||
|
CutsceneCommand(const std::vector<uint8_t>& rawData, offset_t rawDataIndex);
|
||||||
|
virtual ~CutsceneCommand();
|
||||||
|
|
||||||
|
virtual std::string GetCommandMacro() const;
|
||||||
|
virtual std::string GenerateSourceCode() const;
|
||||||
|
virtual size_t GetCommandSize() const;
|
||||||
|
|
||||||
|
virtual void SetCommandID(uint32_t nCommandID);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneSubCommandEntry_GenericCmd : public CutsceneSubCommandEntry
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CutsceneCommands commandId;
|
||||||
|
|
||||||
|
uint32_t word0 = 0;
|
||||||
|
uint32_t word1 = 0;
|
||||||
|
|
||||||
|
uint32_t unused1 = 0;
|
||||||
|
uint32_t unused2 = 0;
|
||||||
|
uint32_t unused3 = 0;
|
||||||
|
uint32_t unused4 = 0;
|
||||||
|
uint32_t unused5 = 0;
|
||||||
|
uint32_t unused6 = 0;
|
||||||
|
uint32_t unused7 = 0;
|
||||||
|
uint32_t unused8 = 0;
|
||||||
|
uint32_t unused9 = 0;
|
||||||
|
uint32_t unused10 = 0;
|
||||||
|
|
||||||
|
CutsceneSubCommandEntry_GenericCmd(const std::vector<uint8_t>& rawData, offset_t rawDataIndex,
|
||||||
|
CutsceneCommands cmdId);
|
||||||
|
|
||||||
|
std::string GetBodySourceCode() const override;
|
||||||
|
|
||||||
|
size_t GetRawSize() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneCommand_GenericCmd : public CutsceneCommand
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CutsceneCommand_GenericCmd(const std::vector<uint8_t>& rawData, offset_t rawDataIndex,
|
||||||
|
CutsceneCommands cmdId);
|
||||||
|
|
||||||
|
std::string GetCommandMacro() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneCameraPoint : public CutsceneSubCommandEntry
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
int8_t continueFlag;
|
||||||
|
int8_t cameraRoll;
|
||||||
|
int16_t nextPointFrame;
|
||||||
|
float viewAngle;
|
||||||
|
int16_t posX, posY, posZ;
|
||||||
|
int16_t unused;
|
||||||
|
|
||||||
|
CutsceneCameraPoint(const std::vector<uint8_t>& rawData, offset_t rawDataIndex);
|
||||||
|
|
||||||
|
std::string GetBodySourceCode() const override;
|
||||||
|
|
||||||
|
size_t GetRawSize() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneCommandSetCameraPos : public CutsceneCommand
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
uint16_t base;
|
||||||
|
uint16_t startFrame;
|
||||||
|
uint16_t endFrame;
|
||||||
|
uint16_t unused;
|
||||||
|
|
||||||
|
CutsceneCommandSetCameraPos(const std::vector<uint8_t>& rawData, offset_t rawDataIndex);
|
||||||
|
|
||||||
|
std::string GetCommandMacro() const override;
|
||||||
|
|
||||||
|
size_t GetCommandSize() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneCommandSceneTransFX : public CutsceneCommand
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
uint16_t base;
|
||||||
|
uint16_t startFrame;
|
||||||
|
uint16_t endFrame;
|
||||||
|
|
||||||
|
CutsceneCommandSceneTransFX(const std::vector<uint8_t>& rawData, offset_t rawDataIndex);
|
||||||
|
|
||||||
|
std::string GenerateSourceCode() const override;
|
||||||
|
size_t GetCommandSize() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneSubCommandEntry_Rumble : public CutsceneSubCommandEntry
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
uint8_t unk_06;
|
||||||
|
uint8_t unk_07;
|
||||||
|
uint8_t unk_08;
|
||||||
|
uint8_t unk_09;
|
||||||
|
uint8_t unk_0A;
|
||||||
|
uint8_t unk_0B;
|
||||||
|
|
||||||
|
CutsceneSubCommandEntry_Rumble(const std::vector<uint8_t>& rawData, offset_t rawDataIndex);
|
||||||
|
|
||||||
|
std::string GetBodySourceCode() const override;
|
||||||
|
|
||||||
|
size_t GetRawSize() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneCommand_Rumble : public CutsceneCommand
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CutsceneCommand_Rumble(const std::vector<uint8_t>& rawData, offset_t rawDataIndex);
|
||||||
|
|
||||||
|
std::string GetCommandMacro() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneSubCommandEntry_SetTime : public CutsceneSubCommandEntry
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
uint8_t hour;
|
||||||
|
uint8_t minute;
|
||||||
|
uint32_t unk_08;
|
||||||
|
|
||||||
|
CutsceneSubCommandEntry_SetTime(const std::vector<uint8_t>& rawData, offset_t rawDataIndex);
|
||||||
|
|
||||||
|
std::string GetBodySourceCode() const override;
|
||||||
|
|
||||||
|
size_t GetRawSize() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneCommand_SetTime : public CutsceneCommand
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CutsceneCommand_SetTime(const std::vector<uint8_t>& rawData, offset_t rawDataIndex);
|
||||||
|
|
||||||
|
std::string GetCommandMacro() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneSubCommandEntry_TextBox : public CutsceneSubCommandEntry
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
uint16_t type;
|
||||||
|
uint16_t textId1;
|
||||||
|
uint16_t textId2;
|
||||||
|
|
||||||
|
CutsceneSubCommandEntry_TextBox(const std::vector<uint8_t>& rawData, offset_t rawDataIndex);
|
||||||
|
|
||||||
|
std::string GetBodySourceCode() const override;
|
||||||
|
|
||||||
|
size_t GetRawSize() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneCommand_TextBox : public CutsceneCommand
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CutsceneCommand_TextBox(const std::vector<uint8_t>& rawData, offset_t rawDataIndex);
|
||||||
|
|
||||||
|
std::string GetCommandMacro() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneSubCommandEntry_ActorAction : public CutsceneSubCommandEntry
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
uint16_t rotX, rotY, rotZ;
|
||||||
|
int32_t startPosX, startPosY, startPosZ;
|
||||||
|
int32_t endPosX, endPosY, endPosZ;
|
||||||
|
float normalX, normalY, normalZ;
|
||||||
|
|
||||||
|
CutsceneSubCommandEntry_ActorAction(const std::vector<uint8_t>& rawData, offset_t rawDataIndex);
|
||||||
|
std::string GetBodySourceCode() const override;
|
||||||
|
|
||||||
|
size_t GetRawSize() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneCommand_ActorAction : public CutsceneCommand
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CutsceneCommand_ActorAction(const std::vector<uint8_t>& rawData, offset_t rawDataIndex);
|
||||||
|
|
||||||
|
std::string GetCommandMacro() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CutsceneCommand_Terminator : public CutsceneCommand
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
uint16_t base;
|
||||||
|
uint16_t startFrame;
|
||||||
|
uint16_t endFrame;
|
||||||
|
uint16_t unknown;
|
||||||
|
|
||||||
|
CutsceneCommand_Terminator(const std::vector<uint8_t>& rawData, offset_t rawDataIndex);
|
||||||
|
|
||||||
|
std::string GenerateSourceCode() const override;
|
||||||
|
size_t GetCommandSize() const override;
|
||||||
|
};
|
|
@ -199,8 +199,16 @@ bool WarningHandler::WasElevatedToError(WarningType warnType) {
|
||||||
* Print file/line/function info for debugging
|
* Print file/line/function info for debugging
|
||||||
*/
|
*/
|
||||||
void WarningHandler::FunctionPreamble(const char* filename, int32_t line, const char* function) {
|
void WarningHandler::FunctionPreamble(const char* filename, int32_t line, const char* function) {
|
||||||
if (Globals::Instance->verbosity >= VerbosityLevel::VERBOSITY_DEBUG) {
|
bool forcePrint = false;
|
||||||
fprintf(stderr, "%s:%i: in function %s:\n", filename, line, function);
|
|
||||||
|
#ifdef DEVELOPMENT
|
||||||
|
forcePrint = true;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
fprintf(stderr, "\n");
|
||||||
|
|
||||||
|
if (forcePrint || Globals::Instance->verbosity >= VerbosityLevel::VERBOSITY_DEBUG) {
|
||||||
|
fprintf(stderr, "%s:%i: in function <%s>:\n", filename, line, function);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,343 +1,366 @@
|
||||||
<?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">
|
||||||
<Import Project="..\packages\YY.NuGet.Import.Helper.1.0.0.4\build\native\YY.NuGet.Import.Helper.props" Condition="Exists('..\packages\YY.NuGet.Import.Helper.1.0.0.4\build\native\YY.NuGet.Import.Helper.props')" />
|
<Import Project="..\packages\YY.NuGet.Import.Helper.1.0.0.4\build\native\YY.NuGet.Import.Helper.props" Condition="Exists('..\packages\YY.NuGet.Import.Helper.1.0.0.4\build\native\YY.NuGet.Import.Helper.props')" />
|
||||||
<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>v143</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>v143</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>v143</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>v143</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'">
|
||||||
<LibraryPath>$(OutDir);$(ProjectDir)..\lib\libgfxd;$(ProjectDir)..\packages\libpng-v142.1.6.37.2\build\native\lib\x64\v142\Debug\;$(LibraryPath)</LibraryPath>
|
<LibraryPath>$(OutDir);$(ProjectDir)..\lib\libgfxd;$(ProjectDir)..\packages\libpng-v142.1.6.37.2\build\native\lib\x64\v142\Debug\;$(LibraryPath)</LibraryPath>
|
||||||
<IncludePath>$(ProjectDir)..\ZAPDUtils;$(ProjectDir)..\lib\tinyxml2;$(ProjectDir)..\lib\libgfxd;$(ProjectDir)..\lib\elfio;$(ProjectDir)..\lib\stb;$(ProjectDir);$(IncludePath)</IncludePath>
|
<IncludePath>$(ProjectDir)..\ZAPDUtils;$(ProjectDir)..\lib\tinyxml2;$(ProjectDir)..\lib\libgfxd;$(ProjectDir)..\lib\elfio;$(ProjectDir)..\lib\stb;$(ProjectDir);$(IncludePath)</IncludePath>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
<IncludePath>$(IncludePath)</IncludePath>
|
<IncludePath>$(IncludePath)</IncludePath>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<IncludePath>$(SolutionDir)ZAPD\lib\tinyxml2;$(SolutionDir)ZAPD\lib\libgfxd;$(SolutionDir)ZAPD\lib\elfio;$(SolutionDir)ZAPD\lib\stb;$(ProjectDir);$(IncludePath)</IncludePath>
|
<IncludePath>$(SolutionDir)ZAPD\lib\tinyxml2;$(SolutionDir)ZAPD\lib\libgfxd;$(SolutionDir)ZAPD\lib\elfio;$(SolutionDir)ZAPD\lib\stb;$(ProjectDir);$(IncludePath)</IncludePath>
|
||||||
<LibraryPath>$(SolutionDir)ZAPD\lib\libgfxd;$(SolutionDir)x64\Debug;$(SolutionDir)packages\libpng.1.6.28.1\build\native\lib\x64\v140\dynamic\Debug;$(LibraryPath)</LibraryPath>
|
<LibraryPath>$(SolutionDir)ZAPD\lib\libgfxd;$(SolutionDir)x64\Debug;$(SolutionDir)packages\libpng.1.6.28.1\build\native\lib\x64\v140\dynamic\Debug;$(LibraryPath)</LibraryPath>
|
||||||
</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>
|
||||||
<LanguageStandard_C>stdc11</LanguageStandard_C>
|
<LanguageStandard_C>stdc11</LanguageStandard_C>
|
||||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
</ClCompile>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
<Link>
|
</ClCompile>
|
||||||
<Profile>true</Profile>
|
<Link>
|
||||||
</Link>
|
<Profile>true</Profile>
|
||||||
</ItemDefinitionGroup>
|
</Link>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<PreBuildEvent>
|
||||||
<ClCompile>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<SDLCheck>true</SDLCheck>
|
|
||||||
<ConformanceMode>true</ConformanceMode>
|
|
||||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
|
||||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
|
||||||
<LanguageStandard_C>stdc11</LanguageStandard_C>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<Profile>true</Profile>
|
|
||||||
<AdditionalDependencies>ZAPDUtils.lib;/WHOLEARCHIVE:ExporterExample.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
|
||||||
</Link>
|
|
||||||
<PreBuildEvent>
|
|
||||||
<Command>cd ..
|
<Command>cd ..
|
||||||
mkdir build\ZAPD
|
mkdir build\ZAPD
|
||||||
python3 ZAPD/genbuildinfo.py</Command>
|
python ZAPD/genbuildinfo.py</Command>
|
||||||
</PreBuildEvent>
|
</PreBuildEvent>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<SDLCheck>true</SDLCheck>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<SDLCheck>true</SDLCheck>
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
</ClCompile>
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
<Link>
|
<LanguageStandard_C>stdc11</LanguageStandard_C>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
</Link>
|
</ClCompile>
|
||||||
</ItemDefinitionGroup>
|
<Link>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<Profile>true</Profile>
|
||||||
<ClCompile>
|
<AdditionalDependencies>ZAPDUtils.lib;/WHOLEARCHIVE:ExporterExample.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||||
<Optimization>MaxSpeed</Optimization>
|
</Link>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<PreBuildEvent>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<Command>cd ..
|
||||||
<SDLCheck>true</SDLCheck>
|
mkdir build\ZAPD
|
||||||
<ConformanceMode>true</ConformanceMode>
|
python ZAPD/genbuildinfo.py</Command>
|
||||||
<LanguageStandard>stdcpplatest</LanguageStandard>
|
</PreBuildEvent>
|
||||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
</ItemDefinitionGroup>
|
||||||
</ClCompile>
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<Link>
|
<ClCompile>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
</Link>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
</ItemDefinitionGroup>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<ItemGroup>
|
<SDLCheck>true</SDLCheck>
|
||||||
<ClCompile Include="..\build\ZAPD\BuildInfo.cpp" />
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<ClCompile Include="..\lib\libgfxd\gfxd.c" />
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
<ClCompile Include="..\lib\libgfxd\uc.c" />
|
</ClCompile>
|
||||||
<ClCompile Include="..\lib\libgfxd\uc_f3d.c" />
|
<Link>
|
||||||
<ClCompile Include="..\lib\libgfxd\uc_f3db.c" />
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<ClCompile Include="..\lib\libgfxd\uc_f3dex.c" />
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<ClCompile Include="..\lib\libgfxd\uc_f3dex2.c" />
|
</Link>
|
||||||
<ClCompile Include="..\lib\libgfxd\uc_f3dexb.c" />
|
<PreBuildEvent>
|
||||||
<ClCompile Include="Declaration.cpp" />
|
<Command>cd ..
|
||||||
<ClCompile Include="GameConfig.cpp" />
|
mkdir build\ZAPD
|
||||||
<ClCompile Include="Globals.cpp" />
|
python ZAPD/genbuildinfo.py</Command>
|
||||||
<ClCompile Include="ImageBackend.cpp" />
|
</PreBuildEvent>
|
||||||
<ClCompile Include="Main.cpp" />
|
</ItemDefinitionGroup>
|
||||||
<ClCompile Include="OtherStructs\SkinLimbStructs.cpp" />
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
<ClCompile Include="OutputFormatter.cpp" />
|
<ClCompile>
|
||||||
<ClCompile Include="Overlays\ZOverlay.cpp" />
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<ClCompile Include="WarningHandler.cpp" />
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<ClCompile Include="ZArray.cpp" />
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<ClCompile Include="ZBackground.cpp" />
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<ClCompile Include="ZCutsceneMM.cpp" />
|
<SDLCheck>true</SDLCheck>
|
||||||
<ClCompile Include="ZLimb.cpp" />
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<ClCompile Include="ZMtx.cpp" />
|
<LanguageStandard>stdcpplatest</LanguageStandard>
|
||||||
<ClCompile Include="ZPath.cpp" />
|
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ClCompile Include="ZPlayerAnimationData.cpp" />
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
<ClCompile Include="ZRoom\Commands\SetActorCutsceneList.cpp" />
|
</ClCompile>
|
||||||
<ClCompile Include="ZRoom\Commands\SetAnimatedMaterialList.cpp" />
|
<Link>
|
||||||
<ClCompile Include="ZRoom\Commands\SetCsCamera.cpp" />
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<ClCompile Include="ZRoom\Commands\SetMinimapChests.cpp" />
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<ClCompile Include="ZRoom\Commands\SetMinimapList.cpp" />
|
</Link>
|
||||||
<ClCompile Include="ZRoom\Commands\SetWorldMapVisited.cpp" />
|
<PreBuildEvent>
|
||||||
<ClCompile Include="ZRoom\Commands\Unused1D.cpp" />
|
<Command>cd ..
|
||||||
<ClCompile Include="ZScalar.cpp" />
|
mkdir build\ZAPD
|
||||||
<ClCompile Include="ZAnimation.cpp" />
|
python ZAPD/genbuildinfo.py</Command>
|
||||||
<ClCompile Include="ZBlob.cpp" />
|
</PreBuildEvent>
|
||||||
<ClCompile Include="ZCollision.cpp" />
|
</ItemDefinitionGroup>
|
||||||
<ClCompile Include="ZCutscene.cpp" />
|
<ItemGroup>
|
||||||
<ClCompile Include="ZDisplayList.cpp" />
|
<ClCompile Include="..\build\ZAPD\BuildInfo.cpp" />
|
||||||
<ClCompile Include="ZFile.cpp" />
|
<ClCompile Include="..\lib\libgfxd\gfxd.c" />
|
||||||
<ClCompile Include="ZSkeleton.cpp" />
|
<ClCompile Include="..\lib\libgfxd\uc.c" />
|
||||||
<ClCompile Include="ZResource.cpp" />
|
<ClCompile Include="..\lib\libgfxd\uc_f3d.c" />
|
||||||
<ClCompile Include="ZRoom\Commands\EndMarker.cpp" />
|
<ClCompile Include="..\lib\libgfxd\uc_f3db.c" />
|
||||||
<ClCompile Include="ZRoom\Commands\SetActorList.cpp" />
|
<ClCompile Include="..\lib\libgfxd\uc_f3dex.c" />
|
||||||
<ClCompile Include="ZRoom\Commands\SetAlternateHeaders.cpp" />
|
<ClCompile Include="..\lib\libgfxd\uc_f3dex2.c" />
|
||||||
<ClCompile Include="ZRoom\Commands\SetCameraSettings.cpp" />
|
<ClCompile Include="..\lib\libgfxd\uc_f3dexb.c" />
|
||||||
<ClCompile Include="ZRoom\Commands\SetCollisionHeader.cpp" />
|
<ClCompile Include="Declaration.cpp" />
|
||||||
<ClCompile Include="ZRoom\Commands\SetCutscenes.cpp" />
|
<ClCompile Include="GameConfig.cpp" />
|
||||||
<ClCompile Include="ZRoom\Commands\SetEchoSettings.cpp" />
|
<ClCompile Include="Globals.cpp" />
|
||||||
<ClCompile Include="ZRoom\Commands\SetEntranceList.cpp" />
|
<ClCompile Include="ImageBackend.cpp" />
|
||||||
<ClCompile Include="ZRoom\Commands\SetExitList.cpp" />
|
<ClCompile Include="Main.cpp" />
|
||||||
<ClCompile Include="ZRoom\Commands\SetLightingSettings.cpp" />
|
<ClCompile Include="OtherStructs\CutsceneMM_Commands.cpp" />
|
||||||
<ClCompile Include="ZRoom\Commands\SetLightList.cpp" />
|
<ClCompile Include="OtherStructs\Cutscene_Commands.cpp" />
|
||||||
<ClCompile Include="ZRoom\Commands\SetMesh.cpp" />
|
<ClCompile Include="OtherStructs\SkinLimbStructs.cpp" />
|
||||||
<ClCompile Include="ZRoom\Commands\SetObjectList.cpp" />
|
<ClCompile Include="OutputFormatter.cpp" />
|
||||||
<ClCompile Include="ZRoom\Commands\SetPathways.cpp" />
|
<ClCompile Include="Overlays\ZOverlay.cpp" />
|
||||||
<ClCompile Include="ZRoom\Commands\SetRoomBehavior.cpp" />
|
<ClCompile Include="WarningHandler.cpp" />
|
||||||
<ClCompile Include="ZRoom\Commands\SetRoomList.cpp" />
|
<ClCompile Include="ZArray.cpp" />
|
||||||
<ClCompile Include="ZRoom\Commands\SetSkyboxModifier.cpp" />
|
<ClCompile Include="ZBackground.cpp" />
|
||||||
<ClCompile Include="ZRoom\Commands\SetSkyboxSettings.cpp" />
|
<ClCompile Include="ZCollisionPoly.cpp" />
|
||||||
<ClCompile Include="ZRoom\Commands\SetSoundSettings.cpp" />
|
<ClCompile Include="ZLimb.cpp" />
|
||||||
<ClCompile Include="ZRoom\Commands\SetSpecialObjects.cpp" />
|
<ClCompile Include="ZMtx.cpp" />
|
||||||
<ClCompile Include="ZRoom\Commands\SetStartPositionList.cpp" />
|
<ClCompile Include="ZPath.cpp" />
|
||||||
<ClCompile Include="ZRoom\Commands\SetTimeSettings.cpp" />
|
<ClCompile Include="ZPlayerAnimationData.cpp" />
|
||||||
<ClCompile Include="ZRoom\Commands\SetTransitionActorList.cpp" />
|
<ClCompile Include="ZRoom\Commands\SetActorCutsceneList.cpp" />
|
||||||
<ClCompile Include="ZRoom\Commands\SetWind.cpp" />
|
<ClCompile Include="ZRoom\Commands\SetAnimatedMaterialList.cpp" />
|
||||||
<ClCompile Include="ZRoom\Commands\Unused09.cpp" />
|
<ClCompile Include="ZRoom\Commands\SetCsCamera.cpp" />
|
||||||
<ClCompile Include="ZRoom\Commands\ZRoomCommandUnk.cpp" />
|
<ClCompile Include="ZRoom\Commands\SetMinimapChests.cpp" />
|
||||||
<ClCompile Include="ZRoom\ZRoom.cpp" />
|
<ClCompile Include="ZRoom\Commands\SetMinimapList.cpp" />
|
||||||
<ClCompile Include="ZRoom\ZRoomCommand.cpp" />
|
<ClCompile Include="ZRoom\Commands\SetWorldMapVisited.cpp" />
|
||||||
<ClCompile Include="ZString.cpp" />
|
<ClCompile Include="ZRoom\Commands\Unused1D.cpp" />
|
||||||
<ClCompile Include="ZSymbol.cpp" />
|
<ClCompile Include="ZScalar.cpp" />
|
||||||
<ClCompile Include="ZTexture.cpp" />
|
<ClCompile Include="ZAnimation.cpp" />
|
||||||
<ClCompile Include="ZTextureAnimation.cpp" />
|
<ClCompile Include="ZBlob.cpp" />
|
||||||
<ClCompile Include="ZVector.cpp" />
|
<ClCompile Include="ZCollision.cpp" />
|
||||||
<ClCompile Include="ZVtx.cpp" />
|
<ClCompile Include="ZCutscene.cpp" />
|
||||||
</ItemGroup>
|
<ClCompile Include="ZDisplayList.cpp" />
|
||||||
<ItemGroup>
|
<ClCompile Include="ZFile.cpp" />
|
||||||
<ClInclude Include="..\lib\elfio\elfio\elfio.hpp" />
|
<ClCompile Include="ZSkeleton.cpp" />
|
||||||
<ClInclude Include="..\lib\elfio\elfio\elfio_dump.hpp" />
|
<ClCompile Include="ZResource.cpp" />
|
||||||
<ClInclude Include="..\lib\elfio\elfio\elfio_dynamic.hpp" />
|
<ClCompile Include="ZRoom\Commands\EndMarker.cpp" />
|
||||||
<ClInclude Include="..\lib\elfio\elfio\elfio_header.hpp" />
|
<ClCompile Include="ZRoom\Commands\SetActorList.cpp" />
|
||||||
<ClInclude Include="..\lib\elfio\elfio\elfio_note.hpp" />
|
<ClCompile Include="ZRoom\Commands\SetAlternateHeaders.cpp" />
|
||||||
<ClInclude Include="..\lib\elfio\elfio\elfio_relocation.hpp" />
|
<ClCompile Include="ZRoom\Commands\SetCameraSettings.cpp" />
|
||||||
<ClInclude Include="..\lib\elfio\elfio\elfio_section.hpp" />
|
<ClCompile Include="ZRoom\Commands\SetCollisionHeader.cpp" />
|
||||||
<ClInclude Include="..\lib\elfio\elfio\elfio_segment.hpp" />
|
<ClCompile Include="ZRoom\Commands\SetCutscenes.cpp" />
|
||||||
<ClInclude Include="..\lib\elfio\elfio\elfio_strings.hpp" />
|
<ClCompile Include="ZRoom\Commands\SetEchoSettings.cpp" />
|
||||||
<ClInclude Include="..\lib\elfio\elfio\elfio_symbols.hpp" />
|
<ClCompile Include="ZRoom\Commands\SetEntranceList.cpp" />
|
||||||
<ClInclude Include="..\lib\elfio\elfio\elfio_utils.hpp" />
|
<ClCompile Include="ZRoom\Commands\SetExitList.cpp" />
|
||||||
<ClInclude Include="..\lib\elfio\elfio\elf_types.hpp" />
|
<ClCompile Include="ZRoom\Commands\SetLightingSettings.cpp" />
|
||||||
<ClInclude Include="..\lib\libgfxd\gbi.h" />
|
<ClCompile Include="ZRoom\Commands\SetLightList.cpp" />
|
||||||
<ClInclude Include="..\lib\libgfxd\gfxd.h" />
|
<ClCompile Include="ZRoom\Commands\SetMesh.cpp" />
|
||||||
<ClInclude Include="..\lib\libgfxd\priv.h" />
|
<ClCompile Include="ZRoom\Commands\SetObjectList.cpp" />
|
||||||
<ClInclude Include="..\lib\stb\stb_image.h" />
|
<ClCompile Include="ZRoom\Commands\SetPathways.cpp" />
|
||||||
<ClInclude Include="..\lib\stb\stb_image_write.h" />
|
<ClCompile Include="ZRoom\Commands\SetRoomBehavior.cpp" />
|
||||||
<ClInclude Include="..\lib\stb\tinyxml2.h" />
|
<ClCompile Include="ZRoom\Commands\SetRoomList.cpp" />
|
||||||
<ClInclude Include="CRC32.h" />
|
<ClCompile Include="ZRoom\Commands\SetSkyboxModifier.cpp" />
|
||||||
<ClInclude Include="Declaration.h" />
|
<ClCompile Include="ZRoom\Commands\SetSkyboxSettings.cpp" />
|
||||||
<ClInclude Include="GameConfig.h" />
|
<ClCompile Include="ZRoom\Commands\SetSoundSettings.cpp" />
|
||||||
<ClInclude Include="Globals.h" />
|
<ClCompile Include="ZRoom\Commands\SetSpecialObjects.cpp" />
|
||||||
<ClInclude Include="ImageBackend.h" />
|
<ClCompile Include="ZRoom\Commands\SetStartPositionList.cpp" />
|
||||||
<ClInclude Include="OtherStructs\SkinLimbStructs.h" />
|
<ClCompile Include="ZRoom\Commands\SetTimeSettings.cpp" />
|
||||||
<ClInclude Include="OutputFormatter.h" />
|
<ClCompile Include="ZRoom\Commands\SetTransitionActorList.cpp" />
|
||||||
<ClInclude Include="Overlays\ZOverlay.h" />
|
<ClCompile Include="ZRoom\Commands\SetWind.cpp" />
|
||||||
<ClInclude Include="WarningHandler.h" />
|
<ClCompile Include="ZRoom\Commands\Unused09.cpp" />
|
||||||
<ClInclude Include="ZAnimation.h" />
|
<ClCompile Include="ZRoom\Commands\ZRoomCommandUnk.cpp" />
|
||||||
<ClInclude Include="ZArray.h" />
|
<ClCompile Include="ZRoom\ZRoom.cpp" />
|
||||||
<ClInclude Include="ZBackground.h" />
|
<ClCompile Include="ZRoom\ZRoomCommand.cpp" />
|
||||||
<ClInclude Include="ZBlob.h" />
|
<ClCompile Include="ZString.cpp" />
|
||||||
<ClInclude Include="ZCollision.h" />
|
<ClCompile Include="ZSymbol.cpp" />
|
||||||
<ClInclude Include="ZCutscene.h" />
|
<ClCompile Include="ZTexture.cpp" />
|
||||||
<ClInclude Include="ZCutsceneMM.h" />
|
<ClCompile Include="ZTextureAnimation.cpp" />
|
||||||
<ClInclude Include="ZDisplayList.h" />
|
<ClCompile Include="ZVector.cpp" />
|
||||||
<ClInclude Include="ZFile.h" />
|
<ClCompile Include="ZVtx.cpp" />
|
||||||
<ClInclude Include="ZLimb.h" />
|
</ItemGroup>
|
||||||
<ClInclude Include="ZMtx.h" />
|
<ItemGroup>
|
||||||
<ClInclude Include="ZPath.h" />
|
<ClInclude Include="..\lib\elfio\elfio\elfio.hpp" />
|
||||||
<ClInclude Include="ZPlayerAnimationData.h" />
|
<ClInclude Include="..\lib\elfio\elfio\elfio_dump.hpp" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetActorCutsceneList.h" />
|
<ClInclude Include="..\lib\elfio\elfio\elfio_dynamic.hpp" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetAnimatedMaterialList.h" />
|
<ClInclude Include="..\lib\elfio\elfio\elfio_header.hpp" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetCsCamera.h" />
|
<ClInclude Include="..\lib\elfio\elfio\elfio_note.hpp" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetMinimapChests.h" />
|
<ClInclude Include="..\lib\elfio\elfio\elfio_relocation.hpp" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetMinimapList.h" />
|
<ClInclude Include="..\lib\elfio\elfio\elfio_section.hpp" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetWorldMapVisited.h" />
|
<ClInclude Include="..\lib\elfio\elfio\elfio_segment.hpp" />
|
||||||
<ClInclude Include="ZRoom\Commands\Unused1D.h" />
|
<ClInclude Include="..\lib\elfio\elfio\elfio_strings.hpp" />
|
||||||
<ClInclude Include="ZScalar.h" />
|
<ClInclude Include="..\lib\elfio\elfio\elfio_symbols.hpp" />
|
||||||
<ClInclude Include="ZSkeleton.h" />
|
<ClInclude Include="..\lib\elfio\elfio\elfio_utils.hpp" />
|
||||||
<ClInclude Include="ZResource.h" />
|
<ClInclude Include="..\lib\elfio\elfio\elf_types.hpp" />
|
||||||
<ClInclude Include="ZRoom\Commands\EndMarker.h" />
|
<ClInclude Include="..\lib\libgfxd\gbi.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetActorList.h" />
|
<ClInclude Include="..\lib\libgfxd\gfxd.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetAlternateHeaders.h" />
|
<ClInclude Include="..\lib\libgfxd\priv.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetCameraSettings.h" />
|
<ClInclude Include="..\lib\stb\stb_image.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetCollisionHeader.h" />
|
<ClInclude Include="..\lib\stb\stb_image_write.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetCutscenes.h" />
|
<ClInclude Include="..\lib\stb\tinyxml2.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetEchoSettings.h" />
|
<ClInclude Include="CRC32.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetEntranceList.h" />
|
<ClInclude Include="Declaration.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetExitList.h" />
|
<ClInclude Include="GameConfig.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetLightingSettings.h" />
|
<ClInclude Include="Globals.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetLightList.h" />
|
<ClInclude Include="ImageBackend.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetMesh.h" />
|
<ClInclude Include="OtherStructs\CutsceneMM_Commands.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetObjectList.h" />
|
<ClInclude Include="OtherStructs\Cutscene_Commands.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetPathways.h" />
|
<ClInclude Include="OtherStructs\SkinLimbStructs.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetRoomBehavior.h" />
|
<ClInclude Include="OutputFormatter.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetRoomList.h" />
|
<ClInclude Include="Overlays\ZOverlay.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetSkyboxModifier.h" />
|
<ClInclude Include="WarningHandler.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetSkyboxSettings.h" />
|
<ClInclude Include="ZAnimation.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetSoundSettings.h" />
|
<ClInclude Include="ZArray.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetSpecialObjects.h" />
|
<ClInclude Include="ZBackground.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetStartPositionList.h" />
|
<ClInclude Include="ZBlob.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetTimeSettings.h" />
|
<ClInclude Include="ZCollision.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetTransitionActorList.h" />
|
<ClInclude Include="ZCollisionPoly.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\SetWind.h" />
|
<ClInclude Include="ZCutscene.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\Unused09.h" />
|
<ClInclude Include="ZDisplayList.h" />
|
||||||
<ClInclude Include="ZRoom\Commands\ZRoomCommandUnk.h" />
|
<ClInclude Include="ZFile.h" />
|
||||||
<ClInclude Include="ZRoom\ZRoom.h" />
|
<ClInclude Include="ZLimb.h" />
|
||||||
<ClInclude Include="ZRoom\ZRoomCommand.h" />
|
<ClInclude Include="ZMtx.h" />
|
||||||
<ClInclude Include="ZString.h" />
|
<ClInclude Include="ZPath.h" />
|
||||||
<ClInclude Include="ZSymbol.h" />
|
<ClInclude Include="ZPlayerAnimationData.h" />
|
||||||
<ClInclude Include="ZTexture.h" />
|
<ClInclude Include="ZRoom\Commands\SetActorCutsceneList.h" />
|
||||||
<ClInclude Include="ZTextureAnimation.h" />
|
<ClInclude Include="ZRoom\Commands\SetAnimatedMaterialList.h" />
|
||||||
<ClInclude Include="ZVector.h" />
|
<ClInclude Include="ZRoom\Commands\SetCsCamera.h" />
|
||||||
<ClInclude Include="ZVtx.h" />
|
<ClInclude Include="ZRoom\Commands\SetMinimapChests.h" />
|
||||||
</ItemGroup>
|
<ClInclude Include="ZRoom\Commands\SetMinimapList.h" />
|
||||||
<ItemGroup>
|
<ClInclude Include="ZRoom\Commands\SetWorldMapVisited.h" />
|
||||||
<Text Include="..\SymbolMap_OoTMqDbg.txt">
|
<ClInclude Include="ZRoom\Commands\Unused1D.h" />
|
||||||
<DeploymentContent>true</DeploymentContent>
|
<ClInclude Include="ZScalar.h" />
|
||||||
</Text>
|
<ClInclude Include="ZSkeleton.h" />
|
||||||
<Text Include="any\any\zlib.static.txt" />
|
<ClInclude Include="ZResource.h" />
|
||||||
<Text Include="NuGet\libpng.static.txt" />
|
<ClInclude Include="ZRoom\Commands\EndMarker.h" />
|
||||||
</ItemGroup>
|
<ClInclude Include="ZRoom\Commands\SetActorList.h" />
|
||||||
<ItemGroup>
|
<ClInclude Include="ZRoom\Commands\SetAlternateHeaders.h" />
|
||||||
<None Include="packages.config" />
|
<ClInclude Include="ZRoom\Commands\SetCameraSettings.h" />
|
||||||
</ItemGroup>
|
<ClInclude Include="ZRoom\Commands\SetCollisionHeader.h" />
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<ClInclude Include="ZRoom\Commands\SetCutscenes.h" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ClInclude Include="ZRoom\Commands\SetEchoSettings.h" />
|
||||||
<Import Project="..\packages\zlib.v120.windesktop.msvcstl.dyn.rt-dyn.1.2.8.8\build\native\zlib.v120.windesktop.msvcstl.dyn.rt-dyn.targets" Condition="Exists('..\packages\zlib.v120.windesktop.msvcstl.dyn.rt-dyn.1.2.8.8\build\native\zlib.v120.windesktop.msvcstl.dyn.rt-dyn.targets')" />
|
<ClInclude Include="ZRoom\Commands\SetEntranceList.h" />
|
||||||
<Import Project="..\packages\zlib.v140.windesktop.msvcstl.dyn.rt-dyn.1.2.8.8\build\native\zlib.v140.windesktop.msvcstl.dyn.rt-dyn.targets" Condition="Exists('..\packages\zlib.v140.windesktop.msvcstl.dyn.rt-dyn.1.2.8.8\build\native\zlib.v140.windesktop.msvcstl.dyn.rt-dyn.targets')" />
|
<ClInclude Include="ZRoom\Commands\SetExitList.h" />
|
||||||
<Import Project="..\packages\YY.NuGet.Import.Helper.1.0.0.4\build\native\YY.NuGet.Import.Helper.targets" Condition="Exists('..\packages\YY.NuGet.Import.Helper.1.0.0.4\build\native\YY.NuGet.Import.Helper.targets')" />
|
<ClInclude Include="ZRoom\Commands\SetLightingSettings.h" />
|
||||||
<Import Project="..\packages\zlib.static.1.2.5\build\native\zlib.static.targets" Condition="Exists('..\packages\zlib.static.1.2.5\build\native\zlib.static.targets')" />
|
<ClInclude Include="ZRoom\Commands\SetLightList.h" />
|
||||||
<Import Project="..\packages\libpng.static.1.6.37\build\native\libpng.static.targets" Condition="Exists('..\packages\libpng.static.1.6.37\build\native\libpng.static.targets')" />
|
<ClInclude Include="ZRoom\Commands\SetMesh.h" />
|
||||||
</ImportGroup>
|
<ClInclude Include="ZRoom\Commands\SetObjectList.h" />
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<ClInclude Include="ZRoom\Commands\SetPathways.h" />
|
||||||
<PropertyGroup>
|
<ClInclude Include="ZRoom\Commands\SetRoomBehavior.h" />
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ClInclude Include="ZRoom\Commands\SetRoomList.h" />
|
||||||
</PropertyGroup>
|
<ClInclude Include="ZRoom\Commands\SetSkyboxModifier.h" />
|
||||||
<Error Condition="!Exists('..\packages\zlib.v120.windesktop.msvcstl.dyn.rt-dyn.1.2.8.8\build\native\zlib.v120.windesktop.msvcstl.dyn.rt-dyn.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\zlib.v120.windesktop.msvcstl.dyn.rt-dyn.1.2.8.8\build\native\zlib.v120.windesktop.msvcstl.dyn.rt-dyn.targets'))" />
|
<ClInclude Include="ZRoom\Commands\SetSkyboxSettings.h" />
|
||||||
<Error Condition="!Exists('..\packages\zlib.v140.windesktop.msvcstl.dyn.rt-dyn.1.2.8.8\build\native\zlib.v140.windesktop.msvcstl.dyn.rt-dyn.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\zlib.v140.windesktop.msvcstl.dyn.rt-dyn.1.2.8.8\build\native\zlib.v140.windesktop.msvcstl.dyn.rt-dyn.targets'))" />
|
<ClInclude Include="ZRoom\Commands\SetSoundSettings.h" />
|
||||||
<Error Condition="!Exists('..\packages\YY.NuGet.Import.Helper.1.0.0.4\build\native\YY.NuGet.Import.Helper.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\YY.NuGet.Import.Helper.1.0.0.4\build\native\YY.NuGet.Import.Helper.props'))" />
|
<ClInclude Include="ZRoom\Commands\SetSpecialObjects.h" />
|
||||||
<Error Condition="!Exists('..\packages\YY.NuGet.Import.Helper.1.0.0.4\build\native\YY.NuGet.Import.Helper.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\YY.NuGet.Import.Helper.1.0.0.4\build\native\YY.NuGet.Import.Helper.targets'))" />
|
<ClInclude Include="ZRoom\Commands\SetStartPositionList.h" />
|
||||||
<Error Condition="!Exists('..\packages\zlib.static.1.2.5\build\native\zlib.static.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\zlib.static.1.2.5\build\native\zlib.static.targets'))" />
|
<ClInclude Include="ZRoom\Commands\SetTimeSettings.h" />
|
||||||
<Error Condition="!Exists('..\packages\libpng.static.1.6.37\build\native\libpng.static.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\libpng.static.1.6.37\build\native\libpng.static.targets'))" />
|
<ClInclude Include="ZRoom\Commands\SetTransitionActorList.h" />
|
||||||
</Target>
|
<ClInclude Include="ZRoom\Commands\SetWind.h" />
|
||||||
|
<ClInclude Include="ZRoom\Commands\Unused09.h" />
|
||||||
|
<ClInclude Include="ZRoom\Commands\ZRoomCommandUnk.h" />
|
||||||
|
<ClInclude Include="ZRoom\ZRoom.h" />
|
||||||
|
<ClInclude Include="ZRoom\ZRoomCommand.h" />
|
||||||
|
<ClInclude Include="ZString.h" />
|
||||||
|
<ClInclude Include="ZSymbol.h" />
|
||||||
|
<ClInclude Include="ZTexture.h" />
|
||||||
|
<ClInclude Include="ZTextureAnimation.h" />
|
||||||
|
<ClInclude Include="ZVector.h" />
|
||||||
|
<ClInclude Include="ZVtx.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Text Include="..\SymbolMap_OoTMqDbg.txt">
|
||||||
|
<DeploymentContent>true</DeploymentContent>
|
||||||
|
</Text>
|
||||||
|
<Text Include="any\any\zlib.static.txt" />
|
||||||
|
<Text Include="NuGet\libpng.static.txt" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
<Import Project="..\packages\zlib.v120.windesktop.msvcstl.dyn.rt-dyn.1.2.8.8\build\native\zlib.v120.windesktop.msvcstl.dyn.rt-dyn.targets" Condition="Exists('..\packages\zlib.v120.windesktop.msvcstl.dyn.rt-dyn.1.2.8.8\build\native\zlib.v120.windesktop.msvcstl.dyn.rt-dyn.targets')" />
|
||||||
|
<Import Project="..\packages\zlib.v140.windesktop.msvcstl.dyn.rt-dyn.1.2.8.8\build\native\zlib.v140.windesktop.msvcstl.dyn.rt-dyn.targets" Condition="Exists('..\packages\zlib.v140.windesktop.msvcstl.dyn.rt-dyn.1.2.8.8\build\native\zlib.v140.windesktop.msvcstl.dyn.rt-dyn.targets')" />
|
||||||
|
<Import Project="..\packages\YY.NuGet.Import.Helper.1.0.0.4\build\native\YY.NuGet.Import.Helper.targets" Condition="Exists('..\packages\YY.NuGet.Import.Helper.1.0.0.4\build\native\YY.NuGet.Import.Helper.targets')" />
|
||||||
|
<Import Project="..\packages\zlib.static.1.2.5\build\native\zlib.static.targets" Condition="Exists('..\packages\zlib.static.1.2.5\build\native\zlib.static.targets')" />
|
||||||
|
<Import Project="..\packages\libpng.static.1.6.37\build\native\libpng.static.targets" Condition="Exists('..\packages\libpng.static.1.6.37\build\native\libpng.static.targets')" />
|
||||||
|
</ImportGroup>
|
||||||
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
|
<PropertyGroup>
|
||||||
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Error Condition="!Exists('..\packages\zlib.v120.windesktop.msvcstl.dyn.rt-dyn.1.2.8.8\build\native\zlib.v120.windesktop.msvcstl.dyn.rt-dyn.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\zlib.v120.windesktop.msvcstl.dyn.rt-dyn.1.2.8.8\build\native\zlib.v120.windesktop.msvcstl.dyn.rt-dyn.targets'))" />
|
||||||
|
<Error Condition="!Exists('..\packages\zlib.v140.windesktop.msvcstl.dyn.rt-dyn.1.2.8.8\build\native\zlib.v140.windesktop.msvcstl.dyn.rt-dyn.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\zlib.v140.windesktop.msvcstl.dyn.rt-dyn.1.2.8.8\build\native\zlib.v140.windesktop.msvcstl.dyn.rt-dyn.targets'))" />
|
||||||
|
<Error Condition="!Exists('..\packages\YY.NuGet.Import.Helper.1.0.0.4\build\native\YY.NuGet.Import.Helper.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\YY.NuGet.Import.Helper.1.0.0.4\build\native\YY.NuGet.Import.Helper.props'))" />
|
||||||
|
<Error Condition="!Exists('..\packages\YY.NuGet.Import.Helper.1.0.0.4\build\native\YY.NuGet.Import.Helper.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\YY.NuGet.Import.Helper.1.0.0.4\build\native\YY.NuGet.Import.Helper.targets'))" />
|
||||||
|
<Error Condition="!Exists('..\packages\zlib.static.1.2.5\build\native\zlib.static.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\zlib.static.1.2.5\build\native\zlib.static.targets'))" />
|
||||||
|
<Error Condition="!Exists('..\packages\libpng.static.1.6.37\build\native\libpng.static.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\libpng.static.1.6.37\build\native\libpng.static.targets'))" />
|
||||||
|
</Target>
|
||||||
</Project>
|
</Project>
|
File diff suppressed because it is too large
Load diff
|
@ -51,7 +51,7 @@ void ZNormalAnimation::ParseRawData()
|
||||||
{
|
{
|
||||||
ZAnimation::ParseRawData();
|
ZAnimation::ParseRawData();
|
||||||
|
|
||||||
const uint8_t* data = parent->GetRawData().data();
|
auto& data = parent->GetRawData();
|
||||||
|
|
||||||
rotationValuesSeg = BitConverter::ToInt32BE(data, rawDataIndex + 4);
|
rotationValuesSeg = BitConverter::ToInt32BE(data, rawDataIndex + 4);
|
||||||
rotationIndicesSeg = BitConverter::ToInt32BE(data, rawDataIndex + 8);
|
rotationIndicesSeg = BitConverter::ToInt32BE(data, rawDataIndex + 8);
|
||||||
|
|
|
@ -106,6 +106,7 @@ std::string ZArray::GetBodySourceCode() const
|
||||||
case ZResourceType::Pointer:
|
case ZResourceType::Pointer:
|
||||||
case ZResourceType::Scalar:
|
case ZResourceType::Scalar:
|
||||||
case ZResourceType::Vertex:
|
case ZResourceType::Vertex:
|
||||||
|
case ZResourceType::CollisionPoly:
|
||||||
output += resList.at(i)->GetBodySourceCode();
|
output += resList.at(i)->GetBodySourceCode();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -63,16 +63,20 @@ void ZCollisionHeader::ParseRawData()
|
||||||
}
|
}
|
||||||
|
|
||||||
for (uint16_t i = 0; i < numPolygons; i++)
|
for (uint16_t i = 0; i < numPolygons; i++)
|
||||||
polygons.push_back(PolygonEntry(rawData, polySegmentOffset + (i * 16)));
|
{
|
||||||
|
ZCollisionPoly poly(parent);
|
||||||
|
poly.SetRawDataIndex(polySegmentOffset + (i * 16));
|
||||||
|
poly.ParseRawData();
|
||||||
|
polygons.push_back(poly);
|
||||||
|
}
|
||||||
|
|
||||||
uint16_t highestPolyType = 0;
|
uint16_t highestPolyType = 0;
|
||||||
|
|
||||||
for (PolygonEntry poly : polygons)
|
for (ZCollisionPoly poly : polygons)
|
||||||
{
|
{
|
||||||
if (poly.type > highestPolyType)
|
if (poly.type > highestPolyType)
|
||||||
highestPolyType = poly.type;
|
highestPolyType = poly.type;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (uint16_t i = 0; i < highestPolyType + 1; i++)
|
for (uint16_t i = 0; i < highestPolyType + 1; i++)
|
||||||
polygonTypes.push_back(
|
polygonTypes.push_back(
|
||||||
BitConverter::ToUInt64BE(rawData, polyTypeDefSegmentOffset + (i * 8)));
|
BitConverter::ToUInt64BE(rawData, polyTypeDefSegmentOffset + (i * 8)));
|
||||||
|
@ -149,17 +153,15 @@ void ZCollisionHeader::DeclareReferences(const std::string& prefix)
|
||||||
|
|
||||||
for (size_t i = 0; i < polygons.size(); i++)
|
for (size_t i = 0; i < polygons.size(); i++)
|
||||||
{
|
{
|
||||||
declaration += StringHelper::Sprintf(
|
declaration += StringHelper::Sprintf("\t%s,", polygons[i].GetBodySourceCode().c_str());
|
||||||
"\t{ 0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X },",
|
|
||||||
polygons[i].type, polygons[i].vtxA, polygons[i].vtxB, polygons[i].vtxC,
|
|
||||||
polygons[i].a, polygons[i].b, polygons[i].c, polygons[i].d);
|
|
||||||
if (i + 1 < polygons.size())
|
if (i + 1 < polygons.size())
|
||||||
declaration += "\n";
|
declaration += "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
parent->AddDeclarationArray(
|
parent->AddDeclarationArray(polySegmentOffset, DeclarationAlignment::Align4,
|
||||||
polySegmentOffset, DeclarationAlignment::Align4, polygons.size() * 16, "CollisionPoly",
|
polygons.size() * 16, polygons[0].GetSourceTypeName().c_str(),
|
||||||
StringHelper::Sprintf("%sPolygons", auxName.c_str()), polygons.size(), declaration);
|
StringHelper::Sprintf("%sPolygons", auxName.c_str()),
|
||||||
|
polygons.size(), declaration);
|
||||||
}
|
}
|
||||||
|
|
||||||
declaration.clear();
|
declaration.clear();
|
||||||
|
@ -254,34 +256,18 @@ size_t ZCollisionHeader::GetRawDataSize() const
|
||||||
return 44;
|
return 44;
|
||||||
}
|
}
|
||||||
|
|
||||||
PolygonEntry::PolygonEntry(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex)
|
|
||||||
{
|
|
||||||
const uint8_t* data = rawData.data();
|
|
||||||
|
|
||||||
type = BitConverter::ToUInt16BE(data, rawDataIndex + 0);
|
|
||||||
vtxA = BitConverter::ToUInt16BE(data, rawDataIndex + 2);
|
|
||||||
vtxB = BitConverter::ToUInt16BE(data, rawDataIndex + 4);
|
|
||||||
vtxC = BitConverter::ToUInt16BE(data, rawDataIndex + 6);
|
|
||||||
a = BitConverter::ToUInt16BE(data, rawDataIndex + 8);
|
|
||||||
b = BitConverter::ToUInt16BE(data, rawDataIndex + 10);
|
|
||||||
c = BitConverter::ToUInt16BE(data, rawDataIndex + 12);
|
|
||||||
d = BitConverter::ToUInt16BE(data, rawDataIndex + 14);
|
|
||||||
}
|
|
||||||
|
|
||||||
WaterBoxHeader::WaterBoxHeader(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex)
|
WaterBoxHeader::WaterBoxHeader(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex)
|
||||||
{
|
{
|
||||||
const uint8_t* data = rawData.data();
|
xMin = BitConverter::ToInt16BE(rawData, rawDataIndex + 0);
|
||||||
|
ySurface = BitConverter::ToInt16BE(rawData, rawDataIndex + 2);
|
||||||
xMin = BitConverter::ToInt16BE(data, rawDataIndex + 0);
|
zMin = BitConverter::ToInt16BE(rawData, rawDataIndex + 4);
|
||||||
ySurface = BitConverter::ToInt16BE(data, rawDataIndex + 2);
|
xLength = BitConverter::ToInt16BE(rawData, rawDataIndex + 6);
|
||||||
zMin = BitConverter::ToInt16BE(data, rawDataIndex + 4);
|
zLength = BitConverter::ToInt16BE(rawData, rawDataIndex + 8);
|
||||||
xLength = BitConverter::ToInt16BE(data, rawDataIndex + 6);
|
|
||||||
zLength = BitConverter::ToInt16BE(data, rawDataIndex + 8);
|
|
||||||
|
|
||||||
if (Globals::Instance->game == ZGame::OOT_SW97)
|
if (Globals::Instance->game == ZGame::OOT_SW97)
|
||||||
properties = BitConverter::ToInt16BE(data, rawDataIndex + 10);
|
properties = BitConverter::ToInt16BE(rawData, rawDataIndex + 10);
|
||||||
else
|
else
|
||||||
properties = BitConverter::ToInt32BE(data, rawDataIndex + 12);
|
properties = BitConverter::ToInt32BE(rawData, rawDataIndex + 12);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string WaterBoxHeader::GetBodySourceCode() const
|
std::string WaterBoxHeader::GetBodySourceCode() const
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "ZCollisionPoly.h"
|
||||||
#include "ZFile.h"
|
#include "ZFile.h"
|
||||||
#include "ZResource.h"
|
#include "ZResource.h"
|
||||||
#include "ZRoom/ZRoom.h"
|
#include "ZRoom/ZRoom.h"
|
||||||
#include "ZVector.h"
|
#include "ZVector.h"
|
||||||
|
|
||||||
|
#if 0
|
||||||
class PolygonEntry
|
class PolygonEntry
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -14,6 +16,7 @@ public:
|
||||||
|
|
||||||
PolygonEntry(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
PolygonEntry(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
class WaterBoxHeader
|
class WaterBoxHeader
|
||||||
{
|
{
|
||||||
|
@ -78,7 +81,7 @@ public:
|
||||||
waterBoxSegmentOffset;
|
waterBoxSegmentOffset;
|
||||||
|
|
||||||
std::vector<ZVector> vertices;
|
std::vector<ZVector> vertices;
|
||||||
std::vector<PolygonEntry> polygons;
|
std::vector<ZCollisionPoly> polygons;
|
||||||
std::vector<uint64_t> polygonTypes;
|
std::vector<uint64_t> polygonTypes;
|
||||||
std::vector<WaterBoxHeader> waterBoxes;
|
std::vector<WaterBoxHeader> waterBoxes;
|
||||||
CameraDataList* camData = nullptr;
|
CameraDataList* camData = nullptr;
|
||||||
|
|
78
tools/ZAPD/ZAPD/ZCollisionPoly.cpp
Normal file
78
tools/ZAPD/ZAPD/ZCollisionPoly.cpp
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
#include "ZCollisionPoly.h"
|
||||||
|
|
||||||
|
#include "Globals.h"
|
||||||
|
#include "Utils/BitConverter.h"
|
||||||
|
#include "Utils/StringHelper.h"
|
||||||
|
|
||||||
|
REGISTER_ZFILENODE(CollisionPoly, ZCollisionPoly);
|
||||||
|
|
||||||
|
ZCollisionPoly::ZCollisionPoly(ZFile* nParent) : ZResource(nParent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ZCollisionPoly::~ZCollisionPoly()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void ZCollisionPoly::ParseRawData()
|
||||||
|
{
|
||||||
|
const auto& rawData = parent->GetRawData();
|
||||||
|
type = BitConverter::ToUInt16BE(rawData, rawDataIndex + 0);
|
||||||
|
|
||||||
|
vtxA = BitConverter::ToUInt16BE(rawData, rawDataIndex + 2);
|
||||||
|
vtxB = BitConverter::ToUInt16BE(rawData, rawDataIndex + 4);
|
||||||
|
vtxC = BitConverter::ToUInt16BE(rawData, rawDataIndex + 6);
|
||||||
|
|
||||||
|
normX = BitConverter::ToUInt16BE(rawData, rawDataIndex + 8);
|
||||||
|
normY = BitConverter::ToUInt16BE(rawData, rawDataIndex + 10);
|
||||||
|
normZ = BitConverter::ToUInt16BE(rawData, rawDataIndex + 12);
|
||||||
|
|
||||||
|
dist = BitConverter::ToUInt16BE(rawData, rawDataIndex + 14);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ZCollisionPoly::DeclareReferences(const std::string& prefix)
|
||||||
|
{
|
||||||
|
std::string declaration;
|
||||||
|
std::string auxName = name;
|
||||||
|
|
||||||
|
if (name == "")
|
||||||
|
auxName = GetDefaultName(prefix);
|
||||||
|
|
||||||
|
parent->AddDeclaration(rawDataIndex, DeclarationAlignment::Align4, GetRawDataSize(),
|
||||||
|
GetSourceTypeName(), name.c_str(), GetBodySourceCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string ZCollisionPoly::GetBodySourceCode() const
|
||||||
|
{
|
||||||
|
std::string declaration;
|
||||||
|
|
||||||
|
declaration +=
|
||||||
|
StringHelper::Sprintf("{0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X}",
|
||||||
|
type, vtxA, vtxB, vtxC, normX, normY, normZ, dist);
|
||||||
|
return declaration;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string ZCollisionPoly::GetDefaultName(const std::string& prefix) const
|
||||||
|
{
|
||||||
|
return StringHelper::Sprintf("%sCollisionPoly_%06X", prefix.c_str(), rawDataIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
ZResourceType ZCollisionPoly::GetResourceType() const
|
||||||
|
{
|
||||||
|
return ZResourceType::CollisionPoly;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t ZCollisionPoly::GetRawDataSize() const
|
||||||
|
{
|
||||||
|
return 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string ZCollisionPoly::GetSourceTypeName() const
|
||||||
|
{
|
||||||
|
return "CollisionPoly";
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ZCollisionPoly::DoesSupportArray() const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
29
tools/ZAPD/ZAPD/ZCollisionPoly.h
Normal file
29
tools/ZAPD/ZAPD/ZCollisionPoly.h
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ZFile.h"
|
||||||
|
#include "ZResource.h"
|
||||||
|
|
||||||
|
class ZCollisionPoly : public ZResource
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
uint16_t type;
|
||||||
|
uint16_t vtxA, vtxB, vtxC;
|
||||||
|
uint16_t normX, normY, normZ;
|
||||||
|
uint16_t dist;
|
||||||
|
|
||||||
|
ZCollisionPoly(ZFile* nParent);
|
||||||
|
~ZCollisionPoly();
|
||||||
|
|
||||||
|
void ParseRawData() override;
|
||||||
|
void DeclareReferences(const std::string& prefix) override;
|
||||||
|
|
||||||
|
std::string GetBodySourceCode() const override;
|
||||||
|
std::string GetDefaultName(const std::string& prefix) const override;
|
||||||
|
|
||||||
|
std::string GetSourceTypeName() const override;
|
||||||
|
ZResourceType GetResourceType() const override;
|
||||||
|
|
||||||
|
bool DoesSupportArray() const override;
|
||||||
|
|
||||||
|
size_t GetRawDataSize() const override;
|
||||||
|
};
|
File diff suppressed because it is too large
Load diff
|
@ -3,422 +3,13 @@
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "ZFile.h"
|
|
||||||
#include "ZResource.h"
|
|
||||||
#include "tinyxml2.h"
|
#include "tinyxml2.h"
|
||||||
|
|
||||||
enum class CutsceneCommands
|
#include "OtherStructs/Cutscene_Commands.h"
|
||||||
{
|
#include "ZFile.h"
|
||||||
Cmd00 = 0x0000,
|
#include "ZResource.h"
|
||||||
SetCameraPos = 0x0001,
|
|
||||||
SetCameraFocus = 0x0002,
|
|
||||||
SpecialAction = 0x0003,
|
|
||||||
SetLighting = 0x0004,
|
|
||||||
SetCameraPosLink = 0x0005,
|
|
||||||
SetCameraFocusLink = 0x0006,
|
|
||||||
Cmd07 = 0x0007,
|
|
||||||
Cmd08 = 0x0008,
|
|
||||||
Cmd09 = 0x0009,
|
|
||||||
Unknown = 0x001A,
|
|
||||||
Textbox = 0x0013,
|
|
||||||
SetActorAction0 = 0x000A,
|
|
||||||
SetActorAction1 = 0x000F,
|
|
||||||
SetActorAction2 = 0x000E,
|
|
||||||
SetActorAction3 = 0x0019,
|
|
||||||
SetActorAction4 = 0x001D,
|
|
||||||
SetActorAction5 = 0x001E,
|
|
||||||
SetActorAction6 = 0x002C,
|
|
||||||
SetActorAction7 = 0x001F,
|
|
||||||
SetActorAction8 = 0x0031,
|
|
||||||
SetActorAction9 = 0x003E,
|
|
||||||
SetActorAction10 = 0x008F,
|
|
||||||
SetSceneTransFX = 0x002D,
|
|
||||||
Nop = 0x000B,
|
|
||||||
PlayBGM = 0x0056,
|
|
||||||
StopBGM = 0x0057,
|
|
||||||
FadeBGM = 0x007C,
|
|
||||||
SetTime = 0x008C,
|
|
||||||
Terminator = 0x03E8,
|
|
||||||
End = 0xFFFF,
|
|
||||||
Error = 0xFEAF,
|
|
||||||
};
|
|
||||||
|
|
||||||
class CutsceneCameraPoint
|
class ZCutscene : public ZResource
|
||||||
{
|
|
||||||
public:
|
|
||||||
int8_t continueFlag;
|
|
||||||
int8_t cameraRoll;
|
|
||||||
int16_t nextPointFrame;
|
|
||||||
float viewAngle;
|
|
||||||
int16_t posX, posY, posZ;
|
|
||||||
int16_t unused;
|
|
||||||
|
|
||||||
CutsceneCameraPoint(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
};
|
|
||||||
|
|
||||||
class CutsceneCommand
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
uint32_t commandID;
|
|
||||||
uint32_t commandIndex;
|
|
||||||
virtual ~CutsceneCommand();
|
|
||||||
CutsceneCommand(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
virtual std::string GetCName();
|
|
||||||
virtual std::string GenerateSourceCode(uint32_t baseAddress);
|
|
||||||
virtual size_t GetCommandSize();
|
|
||||||
};
|
|
||||||
|
|
||||||
class CutsceneCommandSetCameraPos : public CutsceneCommand
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
uint16_t base;
|
|
||||||
uint16_t startFrame;
|
|
||||||
uint16_t endFrame;
|
|
||||||
uint16_t unused;
|
|
||||||
|
|
||||||
std::vector<CutsceneCameraPoint*> entries;
|
|
||||||
~CutsceneCommandSetCameraPos();
|
|
||||||
CutsceneCommandSetCameraPos(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
std::string GetCName();
|
|
||||||
std::string GenerateSourceCode(uint32_t baseAddress);
|
|
||||||
size_t GetCommandSize();
|
|
||||||
};
|
|
||||||
|
|
||||||
class SpecialActionEntry
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
uint16_t base;
|
|
||||||
uint16_t startFrame;
|
|
||||||
uint16_t endFrame;
|
|
||||||
uint16_t unused0;
|
|
||||||
uint32_t unused1;
|
|
||||||
uint32_t unused2;
|
|
||||||
uint32_t unused3;
|
|
||||||
uint32_t unused4;
|
|
||||||
uint32_t unused5;
|
|
||||||
uint32_t unused6;
|
|
||||||
uint32_t unused7;
|
|
||||||
uint32_t unused8;
|
|
||||||
uint32_t unused9;
|
|
||||||
uint32_t unused10;
|
|
||||||
|
|
||||||
SpecialActionEntry(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
};
|
|
||||||
|
|
||||||
class CutsceneCommandSpecialAction : public CutsceneCommand
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
std::vector<SpecialActionEntry*> entries;
|
|
||||||
|
|
||||||
CutsceneCommandSpecialAction(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
~CutsceneCommandSpecialAction();
|
|
||||||
std::string GetCName();
|
|
||||||
std::string GenerateSourceCode(uint32_t baseAddress);
|
|
||||||
size_t GetCommandSize();
|
|
||||||
};
|
|
||||||
|
|
||||||
class MusicFadeEntry
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
uint16_t base;
|
|
||||||
uint16_t startFrame;
|
|
||||||
uint16_t endFrame;
|
|
||||||
uint16_t unknown0;
|
|
||||||
uint32_t unknown1;
|
|
||||||
uint32_t unknown2;
|
|
||||||
uint32_t unknown3;
|
|
||||||
uint32_t unknown4;
|
|
||||||
uint32_t unknown5;
|
|
||||||
uint32_t unknown6;
|
|
||||||
uint32_t unknown7;
|
|
||||||
uint32_t unknown8;
|
|
||||||
uint32_t unknown9;
|
|
||||||
uint32_t unknown10;
|
|
||||||
|
|
||||||
MusicFadeEntry(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
};
|
|
||||||
|
|
||||||
class CutsceneCommandFadeBGM : public CutsceneCommand
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
std::vector<MusicFadeEntry*> entries;
|
|
||||||
|
|
||||||
CutsceneCommandFadeBGM(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
~CutsceneCommandFadeBGM();
|
|
||||||
std::string GetCName();
|
|
||||||
std::string GenerateSourceCode(uint32_t baseAddress);
|
|
||||||
size_t GetCommandSize();
|
|
||||||
};
|
|
||||||
|
|
||||||
class MusicChangeEntry
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
uint16_t sequence;
|
|
||||||
uint16_t startFrame;
|
|
||||||
uint16_t endFrame;
|
|
||||||
uint16_t unknown0;
|
|
||||||
uint32_t unknown1;
|
|
||||||
uint32_t unknown2;
|
|
||||||
uint32_t unknown3;
|
|
||||||
uint32_t unknown4;
|
|
||||||
uint32_t unknown5;
|
|
||||||
uint32_t unknown6;
|
|
||||||
uint32_t unknown7;
|
|
||||||
|
|
||||||
MusicChangeEntry(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
};
|
|
||||||
|
|
||||||
class CutsceneCommandPlayBGM : public CutsceneCommand
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
std::vector<MusicChangeEntry*> entries;
|
|
||||||
|
|
||||||
CutsceneCommandPlayBGM(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
~CutsceneCommandPlayBGM();
|
|
||||||
std::string GetCName();
|
|
||||||
std::string GenerateSourceCode(uint32_t baseAddress);
|
|
||||||
size_t GetCommandSize();
|
|
||||||
};
|
|
||||||
|
|
||||||
class CutsceneCommandStopBGM : public CutsceneCommand
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
std::vector<MusicChangeEntry*> entries;
|
|
||||||
|
|
||||||
CutsceneCommandStopBGM(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
~CutsceneCommandStopBGM();
|
|
||||||
std::string GetCName();
|
|
||||||
std::string GenerateSourceCode(uint32_t baseAddress);
|
|
||||||
size_t GetCommandSize();
|
|
||||||
};
|
|
||||||
|
|
||||||
class EnvLightingEntry
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
uint16_t setting;
|
|
||||||
uint16_t startFrame;
|
|
||||||
uint16_t endFrame;
|
|
||||||
uint16_t unused0;
|
|
||||||
uint32_t unused1;
|
|
||||||
uint32_t unused2;
|
|
||||||
uint32_t unused3;
|
|
||||||
uint32_t unused4;
|
|
||||||
uint32_t unused5;
|
|
||||||
uint32_t unused6;
|
|
||||||
uint32_t unused7;
|
|
||||||
|
|
||||||
EnvLightingEntry(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
};
|
|
||||||
|
|
||||||
class CutsceneCommandEnvLighting : public CutsceneCommand
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
std::vector<EnvLightingEntry*> entries;
|
|
||||||
|
|
||||||
CutsceneCommandEnvLighting(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
~CutsceneCommandEnvLighting();
|
|
||||||
std::string GetCName();
|
|
||||||
std::string GenerateSourceCode(uint32_t baseAddress);
|
|
||||||
size_t GetCommandSize();
|
|
||||||
};
|
|
||||||
|
|
||||||
class CutsceneCommandSceneTransFX : public CutsceneCommand
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
uint16_t base;
|
|
||||||
uint16_t startFrame;
|
|
||||||
uint16_t endFrame;
|
|
||||||
~CutsceneCommandSceneTransFX();
|
|
||||||
CutsceneCommandSceneTransFX(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
std::string GetCName();
|
|
||||||
std::string GenerateSourceCode(uint32_t baseAddress);
|
|
||||||
size_t GetCommandSize();
|
|
||||||
};
|
|
||||||
|
|
||||||
class Unknown9Entry
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
uint16_t base;
|
|
||||||
uint16_t startFrame;
|
|
||||||
uint16_t endFrame;
|
|
||||||
uint16_t unk2;
|
|
||||||
uint16_t unk3;
|
|
||||||
uint16_t unk4;
|
|
||||||
uint8_t unused0;
|
|
||||||
uint8_t unused1;
|
|
||||||
|
|
||||||
Unknown9Entry(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
};
|
|
||||||
|
|
||||||
class CutsceneCommandUnknown9 : public CutsceneCommand
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
std::vector<Unknown9Entry*> entries;
|
|
||||||
|
|
||||||
CutsceneCommandUnknown9(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
~CutsceneCommandUnknown9();
|
|
||||||
std::string GetCName();
|
|
||||||
std::string GenerateSourceCode(uint32_t baseAddress);
|
|
||||||
size_t GetCommandSize();
|
|
||||||
};
|
|
||||||
|
|
||||||
class UnkEntry
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
uint32_t unused0;
|
|
||||||
uint32_t unused1;
|
|
||||||
uint32_t unused2;
|
|
||||||
uint32_t unused3;
|
|
||||||
uint32_t unused4;
|
|
||||||
uint32_t unused5;
|
|
||||||
uint32_t unused6;
|
|
||||||
uint32_t unused7;
|
|
||||||
uint32_t unused8;
|
|
||||||
uint32_t unused9;
|
|
||||||
uint32_t unused10;
|
|
||||||
uint32_t unused11;
|
|
||||||
|
|
||||||
UnkEntry(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
};
|
|
||||||
|
|
||||||
class CutsceneCommandUnknown : public CutsceneCommand
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
std::vector<UnkEntry*> entries;
|
|
||||||
|
|
||||||
CutsceneCommandUnknown(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
~CutsceneCommandUnknown();
|
|
||||||
std::string GetCName();
|
|
||||||
std::string GenerateSourceCode(uint32_t baseAddress);
|
|
||||||
size_t GetCommandSize();
|
|
||||||
};
|
|
||||||
|
|
||||||
class DayTimeEntry
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
uint16_t base;
|
|
||||||
uint16_t startFrame;
|
|
||||||
uint16_t endFrame;
|
|
||||||
uint8_t hour;
|
|
||||||
uint8_t minute;
|
|
||||||
uint8_t unused;
|
|
||||||
|
|
||||||
DayTimeEntry(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
};
|
|
||||||
|
|
||||||
class CutsceneCommandDayTime : public CutsceneCommand
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
std::vector<DayTimeEntry*> entries;
|
|
||||||
|
|
||||||
CutsceneCommandDayTime(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
~CutsceneCommandDayTime();
|
|
||||||
std::string GetCName();
|
|
||||||
std::string GenerateSourceCode(uint32_t baseAddress);
|
|
||||||
size_t GetCommandSize();
|
|
||||||
};
|
|
||||||
|
|
||||||
class TextboxEntry
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
uint16_t base;
|
|
||||||
uint16_t startFrame;
|
|
||||||
uint16_t endFrame;
|
|
||||||
uint16_t type;
|
|
||||||
uint16_t textID1;
|
|
||||||
uint16_t textID2;
|
|
||||||
|
|
||||||
TextboxEntry(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
};
|
|
||||||
|
|
||||||
class CutsceneCommandTextbox : public CutsceneCommand
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
std::vector<TextboxEntry*> entries;
|
|
||||||
|
|
||||||
CutsceneCommandTextbox(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
~CutsceneCommandTextbox();
|
|
||||||
std::string GetCName();
|
|
||||||
std::string GenerateSourceCode(uint32_t baseAddress);
|
|
||||||
size_t GetCommandSize();
|
|
||||||
};
|
|
||||||
|
|
||||||
class ActorAction
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
uint16_t action;
|
|
||||||
uint16_t startFrame;
|
|
||||||
uint16_t endFrame;
|
|
||||||
int16_t rotX, rotY, rotZ;
|
|
||||||
int32_t startPosX, startPosY, startPosZ;
|
|
||||||
int32_t endPosX, endPosY, endPosZ;
|
|
||||||
float normalX, normalY, normalZ;
|
|
||||||
|
|
||||||
ActorAction(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
};
|
|
||||||
|
|
||||||
class CutsceneCommandActorAction : public CutsceneCommand
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
std::vector<ActorAction*> entries;
|
|
||||||
|
|
||||||
CutsceneCommandActorAction(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
~CutsceneCommandActorAction();
|
|
||||||
std::string GetCName();
|
|
||||||
std::string GenerateSourceCode(uint32_t baseAddress);
|
|
||||||
size_t GetCommandSize();
|
|
||||||
};
|
|
||||||
|
|
||||||
class CutsceneCommandTerminator : public CutsceneCommand
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
uint16_t base;
|
|
||||||
uint16_t startFrame;
|
|
||||||
uint16_t endFrame;
|
|
||||||
uint16_t unknown;
|
|
||||||
|
|
||||||
CutsceneCommandTerminator(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
std::string GetCName();
|
|
||||||
std::string GenerateSourceCode(uint32_t baseAddress);
|
|
||||||
size_t GetCommandSize();
|
|
||||||
};
|
|
||||||
|
|
||||||
class CutsceneCommandEnd : public CutsceneCommand
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
uint16_t base;
|
|
||||||
uint16_t startFrame;
|
|
||||||
uint16_t endFrame;
|
|
||||||
|
|
||||||
CutsceneCommandEnd(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
std::string GetCName();
|
|
||||||
std::string GenerateSourceCode(uint32_t baseAddress);
|
|
||||||
size_t GetCommandSize();
|
|
||||||
};
|
|
||||||
|
|
||||||
class CutsceneCommandNop : public CutsceneCommand
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
uint16_t base;
|
|
||||||
uint16_t startFrame;
|
|
||||||
uint16_t endFrame;
|
|
||||||
|
|
||||||
CutsceneCommandNop(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
|
||||||
std::string GetCName();
|
|
||||||
size_t GetCommandSize();
|
|
||||||
};
|
|
||||||
|
|
||||||
class ZCutsceneBase : public ZResource
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
ZCutsceneBase(ZFile* nParent);
|
|
||||||
|
|
||||||
Declaration* DeclareVar(const std::string& prefix, const std::string& bodyStr) override;
|
|
||||||
|
|
||||||
std::string GetSourceTypeName() const override;
|
|
||||||
};
|
|
||||||
|
|
||||||
class ZCutscene : public ZCutsceneBase
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ZCutscene(ZFile* nParent);
|
ZCutscene(ZFile* nParent);
|
||||||
|
@ -426,15 +17,20 @@ public:
|
||||||
|
|
||||||
void ParseRawData() override;
|
void ParseRawData() override;
|
||||||
|
|
||||||
|
Declaration* DeclareVar(const std::string& prefix, const std::string& bodyStr) override;
|
||||||
|
|
||||||
std::string GetBodySourceCode() const override;
|
std::string GetBodySourceCode() const override;
|
||||||
|
|
||||||
size_t GetRawDataSize() const override;
|
size_t GetRawDataSize() const override;
|
||||||
|
|
||||||
|
std::string GetSourceTypeName() const override;
|
||||||
ZResourceType GetResourceType() const override;
|
ZResourceType GetResourceType() const override;
|
||||||
|
|
||||||
CutsceneCommands GetCommandFromID(int32_t id);
|
|
||||||
|
|
||||||
int32_t numCommands;
|
int32_t numCommands;
|
||||||
int32_t endFrame;
|
int32_t endFrame;
|
||||||
std::vector<CutsceneCommand*> commands;
|
std::vector<CutsceneCommand*> commands;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
CutsceneCommand* GetCommandOoT(uint32_t id, offset_t currentPtr) const;
|
||||||
|
CutsceneCommand* GetCommandMM(uint32_t id, offset_t currentPtr) const;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,61 +0,0 @@
|
||||||
#include "ZCutsceneMM.h"
|
|
||||||
|
|
||||||
#include "Utils/BitConverter.h"
|
|
||||||
#include "Utils/StringHelper.h"
|
|
||||||
|
|
||||||
ZCutsceneMM::ZCutsceneMM(ZFile* nParent) : ZCutsceneBase(nParent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
ZCutsceneMM::~ZCutsceneMM()
|
|
||||||
{
|
|
||||||
for (CutsceneCommand* cmd : commands)
|
|
||||||
delete cmd;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string ZCutsceneMM::GetBodySourceCode() const
|
|
||||||
{
|
|
||||||
std::string output;
|
|
||||||
|
|
||||||
output += StringHelper::Sprintf(" CS_BEGIN_CUTSCENE(%i, %i),", numCommands, endFrame);
|
|
||||||
|
|
||||||
for (size_t i = 0; i < data.size(); i++)
|
|
||||||
{
|
|
||||||
if ((i % 4) == 0)
|
|
||||||
output += "\n ";
|
|
||||||
output += StringHelper::Sprintf("0x%08X, ", data[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t ZCutsceneMM::GetRawDataSize() const
|
|
||||||
{
|
|
||||||
return 8 + data.size() * 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ZCutsceneMM::ParseRawData()
|
|
||||||
{
|
|
||||||
const auto& rawData = parent->GetRawData();
|
|
||||||
|
|
||||||
numCommands = BitConverter::ToInt32BE(rawData, rawDataIndex + 0);
|
|
||||||
commands = std::vector<CutsceneCommand*>();
|
|
||||||
|
|
||||||
endFrame = BitConverter::ToInt32BE(rawData, rawDataIndex + 4);
|
|
||||||
uint32_t currentPtr = rawDataIndex + 8;
|
|
||||||
uint32_t lastData = 0;
|
|
||||||
|
|
||||||
// TODO currently cutscenes aren't being parsed, so just consume words until we see an end
|
|
||||||
// marker.
|
|
||||||
do
|
|
||||||
{
|
|
||||||
lastData = BitConverter::ToInt32BE(rawData, currentPtr);
|
|
||||||
data.push_back(lastData);
|
|
||||||
currentPtr += 4;
|
|
||||||
} while (lastData != 0xFFFFFFFF);
|
|
||||||
}
|
|
||||||
|
|
||||||
ZResourceType ZCutsceneMM::GetResourceType() const
|
|
||||||
{
|
|
||||||
return ZResourceType::Cutscene;
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <cstdint>
|
|
||||||
#include <string>
|
|
||||||
#include <vector>
|
|
||||||
#include "ZCutscene.h"
|
|
||||||
#include "ZFile.h"
|
|
||||||
#include "tinyxml2.h"
|
|
||||||
|
|
||||||
class ZCutsceneMM : public ZCutsceneBase
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
ZCutsceneMM(ZFile* nParent);
|
|
||||||
virtual ~ZCutsceneMM();
|
|
||||||
|
|
||||||
std::string GetBodySourceCode() const override;
|
|
||||||
|
|
||||||
size_t GetRawDataSize() const override;
|
|
||||||
|
|
||||||
void ParseRawData() override;
|
|
||||||
ZResourceType GetResourceType() const override;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
int32_t numCommands;
|
|
||||||
int32_t endFrame;
|
|
||||||
std::vector<CutsceneCommand*> commands;
|
|
||||||
|
|
||||||
std::vector<uint32_t> data;
|
|
||||||
};
|
|
|
@ -406,7 +406,7 @@ void ZFile::AddResource(ZResource* res)
|
||||||
resources.push_back(res);
|
resources.push_back(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
ZResource* ZFile::FindResource(uint32_t rawDataIndex)
|
ZResource* ZFile::FindResource(offset_t rawDataIndex)
|
||||||
{
|
{
|
||||||
for (ZResource* res : resources)
|
for (ZResource* res : resources)
|
||||||
{
|
{
|
||||||
|
@ -695,7 +695,7 @@ bool ZFile::GetDeclarationArrayIndexedName(segptr_t segAddress, size_t elementSi
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Declaration* ZFile::GetDeclaration(uint32_t address) const
|
Declaration* ZFile::GetDeclaration(offset_t address) const
|
||||||
{
|
{
|
||||||
if (declarations.find(address) != declarations.end())
|
if (declarations.find(address) != declarations.end())
|
||||||
return declarations.at(address);
|
return declarations.at(address);
|
||||||
|
@ -703,7 +703,7 @@ Declaration* ZFile::GetDeclaration(uint32_t address) const
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Declaration* ZFile::GetDeclarationRanged(uint32_t address) const
|
Declaration* ZFile::GetDeclarationRanged(offset_t address) const
|
||||||
{
|
{
|
||||||
for (const auto decl : declarations)
|
for (const auto decl : declarations)
|
||||||
{
|
{
|
||||||
|
@ -714,7 +714,7 @@ Declaration* ZFile::GetDeclarationRanged(uint32_t address) const
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ZFile::HasDeclaration(uint32_t address)
|
bool ZFile::HasDeclaration(offset_t address)
|
||||||
{
|
{
|
||||||
assert(GETSEGNUM(address) == 0);
|
assert(GETSEGNUM(address) == 0);
|
||||||
return declarations.find(address) != declarations.end();
|
return declarations.find(address) != declarations.end();
|
||||||
|
@ -776,6 +776,11 @@ void ZFile::GenerateSourceHeaderFiles()
|
||||||
{
|
{
|
||||||
OutputFormatter formatter;
|
OutputFormatter formatter;
|
||||||
|
|
||||||
|
std::string objectNameUpper = StringHelper::ToUpper(GetName());
|
||||||
|
|
||||||
|
formatter.Write(StringHelper::Sprintf("#ifndef %s_H\n#define %s_H 1\n\n",
|
||||||
|
objectNameUpper.c_str(), objectNameUpper.c_str()));
|
||||||
|
|
||||||
for (ZResource* res : resources)
|
for (ZResource* res : resources)
|
||||||
{
|
{
|
||||||
std::string resSrc = res->GetSourceOutputHeader("");
|
std::string resSrc = res->GetSourceOutputHeader("");
|
||||||
|
@ -792,6 +797,8 @@ void ZFile::GenerateSourceHeaderFiles()
|
||||||
|
|
||||||
formatter.Write(ProcessExterns());
|
formatter.Write(ProcessExterns());
|
||||||
|
|
||||||
|
formatter.Write("#endif\n");
|
||||||
|
|
||||||
fs::path headerFilename = GetSourceOutputFolderPath() / outName.stem().concat(".h");
|
fs::path headerFilename = GetSourceOutputFolderPath() / outName.stem().concat(".h");
|
||||||
|
|
||||||
if (Globals::Instance->verbosity >= VerbosityLevel::VERBOSITY_INFO)
|
if (Globals::Instance->verbosity >= VerbosityLevel::VERBOSITY_INFO)
|
||||||
|
|
|
@ -52,7 +52,7 @@ public:
|
||||||
void ExtractResources();
|
void ExtractResources();
|
||||||
void BuildSourceFile();
|
void BuildSourceFile();
|
||||||
void AddResource(ZResource* res);
|
void AddResource(ZResource* res);
|
||||||
ZResource* FindResource(uint32_t rawDataIndex);
|
ZResource* FindResource(offset_t rawDataIndex);
|
||||||
std::vector<ZResource*> GetResourcesOfType(ZResourceType resType);
|
std::vector<ZResource*> GetResourcesOfType(ZResourceType resType);
|
||||||
|
|
||||||
Declaration* AddDeclaration(offset_t address, DeclarationAlignment alignment, size_t size,
|
Declaration* AddDeclaration(offset_t address, DeclarationAlignment alignment, size_t size,
|
||||||
|
@ -81,9 +81,9 @@ public:
|
||||||
const std::string& expectedType,
|
const std::string& expectedType,
|
||||||
std::string& declName) const;
|
std::string& declName) const;
|
||||||
|
|
||||||
Declaration* GetDeclaration(uint32_t address) const;
|
Declaration* GetDeclaration(offset_t address) const;
|
||||||
Declaration* GetDeclarationRanged(uint32_t address) const;
|
Declaration* GetDeclarationRanged(offset_t address) const;
|
||||||
bool HasDeclaration(uint32_t address);
|
bool HasDeclaration(offset_t address);
|
||||||
|
|
||||||
std::string GetHeaderInclude() const;
|
std::string GetHeaderInclude() const;
|
||||||
std::string GetZRoomHeaderInclude() const;
|
std::string GetZRoomHeaderInclude() const;
|
||||||
|
|
|
@ -4,12 +4,15 @@
|
||||||
|
|
||||||
#include "Globals.h"
|
#include "Globals.h"
|
||||||
#include "Utils/BitConverter.h"
|
#include "Utils/BitConverter.h"
|
||||||
|
#include "Utils/StringHelper.h"
|
||||||
#include "WarningHandler.h"
|
#include "WarningHandler.h"
|
||||||
|
#include "ZSkeleton.h"
|
||||||
|
|
||||||
REGISTER_ZFILENODE(Limb, ZLimb);
|
REGISTER_ZFILENODE(Limb, ZLimb);
|
||||||
|
|
||||||
ZLimb::ZLimb(ZFile* nParent) : ZResource(nParent), segmentStruct(nParent)
|
ZLimb::ZLimb(ZFile* nParent) : ZResource(nParent), segmentStruct(nParent)
|
||||||
{
|
{
|
||||||
|
RegisterOptionalAttribute("EnumName");
|
||||||
RegisterOptionalAttribute("LimbType");
|
RegisterOptionalAttribute("LimbType");
|
||||||
RegisterOptionalAttribute("Type");
|
RegisterOptionalAttribute("Type");
|
||||||
}
|
}
|
||||||
|
@ -30,6 +33,12 @@ void ZLimb::ParseXML(tinyxml2::XMLElement* reader)
|
||||||
{
|
{
|
||||||
ZResource::ParseXML(reader);
|
ZResource::ParseXML(reader);
|
||||||
|
|
||||||
|
auto& enumNameXml = registeredAttributes.at("EnumName").value;
|
||||||
|
if (enumNameXml != "")
|
||||||
|
{
|
||||||
|
enumName = enumNameXml;
|
||||||
|
}
|
||||||
|
|
||||||
// Reading from a <Skeleton/>
|
// Reading from a <Skeleton/>
|
||||||
std::string limbType = registeredAttributes.at("LimbType").value;
|
std::string limbType = registeredAttributes.at("LimbType").value;
|
||||||
if (limbType == "") // Reading from a <Limb/>
|
if (limbType == "") // Reading from a <Limb/>
|
||||||
|
@ -240,11 +249,24 @@ std::string ZLimb::GetBodySourceCode() const
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
std::string childStr;
|
||||||
|
std::string siblingStr;
|
||||||
|
if (limbsTable != nullptr)
|
||||||
|
{
|
||||||
|
childStr = limbsTable->GetLimbEnumName(childIndex);
|
||||||
|
siblingStr = limbsTable->GetLimbEnumName(siblingIndex);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
childStr = StringHelper::Sprintf("0x%02X", childIndex);
|
||||||
|
siblingStr = StringHelper::Sprintf("0x%02X", siblingIndex);
|
||||||
|
}
|
||||||
|
|
||||||
if (type != ZLimbType::Curve)
|
if (type != ZLimbType::Curve)
|
||||||
{
|
{
|
||||||
entryStr += StringHelper::Sprintf("{ %i, %i, %i }, ", transX, transY, transZ);
|
entryStr += StringHelper::Sprintf("{ %i, %i, %i }, ", transX, transY, transZ);
|
||||||
}
|
}
|
||||||
entryStr += StringHelper::Sprintf("0x%02X, 0x%02X,\n", childIndex, siblingIndex);
|
entryStr += StringHelper::Sprintf("%s, %s,\n", childStr.c_str(), siblingStr.c_str());
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
|
@ -352,6 +374,11 @@ ZLimbType ZLimb::GetTypeByAttributeName(const std::string& attrName)
|
||||||
return ZLimbType::Invalid;
|
return ZLimbType::Invalid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ZLimb::SetLimbIndex(uint8_t nLimbIndex)
|
||||||
|
{
|
||||||
|
limbIndex = nLimbIndex;
|
||||||
|
}
|
||||||
|
|
||||||
void ZLimb::DeclareDList(segptr_t dListSegmentedPtr, const std::string& prefix,
|
void ZLimb::DeclareDList(segptr_t dListSegmentedPtr, const std::string& prefix,
|
||||||
const std::string& limbSuffix)
|
const std::string& limbSuffix)
|
||||||
{
|
{
|
||||||
|
|
|
@ -18,9 +18,14 @@ enum class ZLimbType
|
||||||
Legacy,
|
Legacy,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ZLimbTable;
|
||||||
|
|
||||||
class ZLimb : public ZResource
|
class ZLimb : public ZResource
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
std::string enumName;
|
||||||
|
ZLimbTable* limbsTable = nullptr; // borrowed pointer, do not delete!
|
||||||
|
|
||||||
ZLimbType type = ZLimbType::Standard;
|
ZLimbType type = ZLimbType::Standard;
|
||||||
|
|
||||||
ZLimbSkinType skinSegmentType = ZLimbSkinType::SkinType_0; // Skin only
|
ZLimbSkinType skinSegmentType = ZLimbSkinType::SkinType_0; // Skin only
|
||||||
|
@ -39,6 +44,8 @@ public:
|
||||||
int16_t transX, transY, transZ;
|
int16_t transX, transY, transZ;
|
||||||
uint8_t childIndex, siblingIndex;
|
uint8_t childIndex, siblingIndex;
|
||||||
|
|
||||||
|
uint8_t limbIndex = 0;
|
||||||
|
|
||||||
ZLimb(ZFile* nParent);
|
ZLimb(ZFile* nParent);
|
||||||
|
|
||||||
void ExtractFromBinary(uint32_t nRawDataIndex, ZLimbType nType);
|
void ExtractFromBinary(uint32_t nRawDataIndex, ZLimbType nType);
|
||||||
|
@ -59,6 +66,8 @@ public:
|
||||||
static const char* GetSourceTypeName(ZLimbType limbType);
|
static const char* GetSourceTypeName(ZLimbType limbType);
|
||||||
static ZLimbType GetTypeByAttributeName(const std::string& attrName);
|
static ZLimbType GetTypeByAttributeName(const std::string& attrName);
|
||||||
|
|
||||||
|
void SetLimbIndex(uint8_t nLimbIndex);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void DeclareDList(segptr_t dListSegmentedPtr, const std::string& prefix,
|
void DeclareDList(segptr_t dListSegmentedPtr, const std::string& prefix,
|
||||||
const std::string& limbSuffix);
|
const std::string& limbSuffix);
|
||||||
|
|
|
@ -247,6 +247,11 @@ offset_t ZResource::GetRawDataIndex() const
|
||||||
return rawDataIndex;
|
return rawDataIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ZResource::SetRawDataIndex(offset_t nRawDataIndex)
|
||||||
|
{
|
||||||
|
rawDataIndex = nRawDataIndex;
|
||||||
|
}
|
||||||
|
|
||||||
std::string ZResource::GetBodySourceCode() const
|
std::string ZResource::GetBodySourceCode() const
|
||||||
{
|
{
|
||||||
return "ERROR";
|
return "ERROR";
|
||||||
|
|
|
@ -31,6 +31,7 @@ enum class ZResourceType
|
||||||
Background,
|
Background,
|
||||||
Blob,
|
Blob,
|
||||||
CollisionHeader,
|
CollisionHeader,
|
||||||
|
CollisionPoly,
|
||||||
Cutscene,
|
Cutscene,
|
||||||
DisplayList,
|
DisplayList,
|
||||||
Limb,
|
Limb,
|
||||||
|
@ -150,6 +151,8 @@ public:
|
||||||
[[nodiscard]] const std::string& GetOutName() const;
|
[[nodiscard]] const std::string& GetOutName() const;
|
||||||
void SetOutName(const std::string& nName);
|
void SetOutName(const std::string& nName);
|
||||||
[[nodiscard]] offset_t GetRawDataIndex() const;
|
[[nodiscard]] offset_t GetRawDataIndex() const;
|
||||||
|
void SetRawDataIndex(offset_t nRawDataIndex);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The size of the current struct being extracted, not counting data referenced by it
|
* The size of the current struct being extracted, not counting data referenced by it
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -10,53 +10,65 @@ SetCutscenes::SetCutscenes(ZFile* nParent) : ZRoomCommand(nParent)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
SetCutscenes::~SetCutscenes()
|
|
||||||
{
|
|
||||||
for (ZCutsceneBase* cutscene : cutscenes)
|
|
||||||
delete cutscene;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SetCutscenes::ParseRawData()
|
void SetCutscenes::ParseRawData()
|
||||||
{
|
{
|
||||||
ZRoomCommand::ParseRawData();
|
ZRoomCommand::ParseRawData();
|
||||||
std::string output;
|
|
||||||
|
|
||||||
numCutscenes = cmdArg1;
|
numCutscenes = cmdArg1;
|
||||||
if (Globals::Instance->game == ZGame::OOT_RETAIL || Globals::Instance->game == ZGame::OOT_SW97)
|
|
||||||
{
|
|
||||||
ZCutscene* cutscene = new ZCutscene(parent);
|
|
||||||
cutscene->ExtractFromFile(segmentOffset);
|
|
||||||
|
|
||||||
auto decl = parent->GetDeclaration(segmentOffset);
|
if (Globals::Instance->game == ZGame::MM_RETAIL)
|
||||||
if (decl == nullptr)
|
|
||||||
{
|
|
||||||
cutscene->DeclareVar(zRoom->GetName().c_str(), "");
|
|
||||||
}
|
|
||||||
|
|
||||||
cutscenes.push_back(cutscene);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
int32_t currentPtr = segmentOffset;
|
int32_t currentPtr = segmentOffset;
|
||||||
std::string declaration;
|
|
||||||
|
|
||||||
for (uint8_t i = 0; i < numCutscenes; i++)
|
for (uint8_t i = 0; i < numCutscenes; i++)
|
||||||
{
|
{
|
||||||
CutsceneEntry entry(parent->GetRawData(), currentPtr);
|
CutsceneEntry entry(parent->GetRawData(), currentPtr);
|
||||||
cutsceneEntries.push_back(entry);
|
cutsceneEntries.push_back(entry);
|
||||||
currentPtr += 8;
|
currentPtr += 8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: don't hardcode %sCutsceneData_%06X, look up for the declared name instead
|
void SetCutscenes::DeclareReferences(const std::string& prefix)
|
||||||
declaration += StringHelper::Sprintf(
|
{
|
||||||
" { %sCutsceneData_%06X, 0x%04X, 0x%02X, 0x%02X },", zRoom->GetName().c_str(),
|
std::string varPrefix = name;
|
||||||
entry.segmentOffset, entry.exit, entry.entrance, entry.flag);
|
if (varPrefix == "")
|
||||||
|
varPrefix = prefix;
|
||||||
|
|
||||||
if (i < numCutscenes - 1)
|
if (Globals::Instance->game == ZGame::MM_RETAIL)
|
||||||
|
{
|
||||||
|
std::string declaration;
|
||||||
|
size_t i = 0;
|
||||||
|
|
||||||
|
for (const auto& entry : cutsceneEntries)
|
||||||
|
{
|
||||||
|
if (entry.segmentPtr != SEGMENTED_NULL &&
|
||||||
|
GETSEGNUM(entry.segmentPtr) == parent->segment)
|
||||||
|
{
|
||||||
|
offset_t csOffset = Seg2Filespace(entry.segmentPtr, parent->baseAddress);
|
||||||
|
if (!parent->HasDeclaration(csOffset))
|
||||||
|
{
|
||||||
|
auto* cutscene = new ZCutscene(parent);
|
||||||
|
cutscene->ExtractFromFile(csOffset);
|
||||||
|
cutscene->SetName(cutscene->GetDefaultName(varPrefix));
|
||||||
|
cutscene->DeclareVar(varPrefix, "");
|
||||||
|
cutscene->DeclareReferences(varPrefix);
|
||||||
|
parent->AddResource(cutscene);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string csName;
|
||||||
|
Globals::Instance->GetSegmentedPtrName(entry.segmentPtr, parent, "CutsceneData",
|
||||||
|
csName);
|
||||||
|
|
||||||
|
declaration +=
|
||||||
|
StringHelper::Sprintf(" { %s, 0x%04X, 0x%02X, 0x%02X },", csName.c_str(),
|
||||||
|
entry.exit, entry.entrance, entry.flag);
|
||||||
|
|
||||||
|
if (i + 1 < numCutscenes)
|
||||||
declaration += "\n";
|
declaration += "\n";
|
||||||
|
|
||||||
ZCutsceneMM* cutscene = new ZCutsceneMM(parent);
|
i++;
|
||||||
cutscene->ExtractFromFile(entry.segmentOffset);
|
|
||||||
cutscenes.push_back(cutscene);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
parent->AddDeclarationArray(segmentOffset, DeclarationAlignment::Align4,
|
parent->AddDeclarationArray(segmentOffset, DeclarationAlignment::Align4,
|
||||||
|
@ -65,19 +77,19 @@ void SetCutscenes::ParseRawData()
|
||||||
zRoom->GetName().c_str(), segmentOffset),
|
zRoom->GetName().c_str(), segmentOffset),
|
||||||
cutsceneEntries.size(), declaration);
|
cutsceneEntries.size(), declaration);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
for (ZCutsceneBase* cutscene : cutscenes)
|
|
||||||
{
|
{
|
||||||
if (cutscene->GetRawDataIndex() != 0)
|
if (cmdArg2 != SEGMENTED_NULL && GETSEGNUM(cmdArg2) == parent->segment)
|
||||||
{
|
{
|
||||||
Declaration* decl = parent->GetDeclaration(cutscene->GetRawDataIndex());
|
offset_t csOffset = Seg2Filespace(cmdArg2, parent->baseAddress);
|
||||||
if (decl == nullptr)
|
if (!parent->HasDeclaration(csOffset))
|
||||||
{
|
{
|
||||||
cutscene->GetSourceOutputCode(zRoom->GetName());
|
auto* cutscene = new ZCutscene(parent);
|
||||||
}
|
cutscene->ExtractFromFile(csOffset);
|
||||||
else if (decl->text == "")
|
cutscene->SetName(cutscene->GetDefaultName(varPrefix));
|
||||||
{
|
cutscene->DeclareVar(varPrefix, "");
|
||||||
decl->text = cutscene->GetBodySourceCode();
|
cutscene->DeclareReferences(varPrefix);
|
||||||
|
parent->AddResource(cutscene);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -86,11 +98,15 @@ void SetCutscenes::ParseRawData()
|
||||||
std::string SetCutscenes::GetBodySourceCode() const
|
std::string SetCutscenes::GetBodySourceCode() const
|
||||||
{
|
{
|
||||||
std::string listName;
|
std::string listName;
|
||||||
Globals::Instance->GetSegmentedPtrName(cmdArg2, parent, "CutsceneData", listName);
|
|
||||||
|
|
||||||
if (Globals::Instance->game == ZGame::MM_RETAIL)
|
if (Globals::Instance->game == ZGame::MM_RETAIL)
|
||||||
|
{
|
||||||
|
Globals::Instance->GetSegmentedPtrName(cmdArg2, parent, "CutsceneEntry", listName);
|
||||||
return StringHelper::Sprintf("SCENE_CMD_CUTSCENE_LIST(%i, %s)", numCutscenes,
|
return StringHelper::Sprintf("SCENE_CMD_CUTSCENE_LIST(%i, %s)", numCutscenes,
|
||||||
listName.c_str());
|
listName.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
Globals::Instance->GetSegmentedPtrName(cmdArg2, parent, "CutsceneData", listName);
|
||||||
return StringHelper::Sprintf("SCENE_CMD_CUTSCENE_DATA(%s)", listName.c_str());
|
return StringHelper::Sprintf("SCENE_CMD_CUTSCENE_DATA(%s)", listName.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,7 +121,7 @@ RoomCommand SetCutscenes::GetRoomCommand() const
|
||||||
}
|
}
|
||||||
|
|
||||||
CutsceneEntry::CutsceneEntry(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex)
|
CutsceneEntry::CutsceneEntry(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex)
|
||||||
: segmentOffset(GETSEGOFFSET(BitConverter::ToInt32BE(rawData, rawDataIndex + 0))),
|
: segmentPtr(BitConverter::ToInt32BE(rawData, rawDataIndex + 0)),
|
||||||
exit(BitConverter::ToInt16BE(rawData, rawDataIndex + 4)), entrance(rawData[rawDataIndex + 6]),
|
exit(BitConverter::ToInt16BE(rawData, rawDataIndex + 4)), entrance(rawData[rawDataIndex + 6]),
|
||||||
flag(rawData[rawDataIndex + 7])
|
flag(rawData[rawDataIndex + 7])
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "ZCutscene.h"
|
#include "ZCutscene.h"
|
||||||
#include "ZCutsceneMM.h"
|
|
||||||
#include "ZRoom/ZRoomCommand.h"
|
#include "ZRoom/ZRoomCommand.h"
|
||||||
|
|
||||||
class CutsceneEntry
|
class CutsceneEntry
|
||||||
|
@ -9,7 +8,7 @@ class CutsceneEntry
|
||||||
public:
|
public:
|
||||||
CutsceneEntry(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
CutsceneEntry(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex);
|
||||||
|
|
||||||
uint32_t segmentOffset;
|
segptr_t segmentPtr;
|
||||||
uint16_t exit;
|
uint16_t exit;
|
||||||
uint8_t entrance;
|
uint8_t entrance;
|
||||||
uint8_t flag;
|
uint8_t flag;
|
||||||
|
@ -18,14 +17,13 @@ public:
|
||||||
class SetCutscenes : public ZRoomCommand
|
class SetCutscenes : public ZRoomCommand
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::vector<ZCutsceneBase*> cutscenes;
|
|
||||||
std::vector<CutsceneEntry> cutsceneEntries; // (MM Only)
|
std::vector<CutsceneEntry> cutsceneEntries; // (MM Only)
|
||||||
uint8_t numCutscenes; // (MM Only)
|
uint8_t numCutscenes; // (MM Only)
|
||||||
|
|
||||||
SetCutscenes(ZFile* nParent);
|
SetCutscenes(ZFile* nParent);
|
||||||
~SetCutscenes();
|
|
||||||
|
|
||||||
void ParseRawData() override;
|
void ParseRawData() override;
|
||||||
|
void DeclareReferences(const std::string& prefix) override;
|
||||||
|
|
||||||
std::string GetBodySourceCode() const override;
|
std::string GetBodySourceCode() const override;
|
||||||
|
|
||||||
|
|
|
@ -104,9 +104,8 @@ std::string RomFile::GetBodySourceCode() const
|
||||||
if (!isFirst)
|
if (!isFirst)
|
||||||
declaration += "\n";
|
declaration += "\n";
|
||||||
|
|
||||||
declaration +=
|
declaration += StringHelper::Sprintf("\t{ _%sSegmentRomStart, _%sSegmentRomEnd },",
|
||||||
StringHelper::Sprintf("\t{ (u32)_%sSegmentRomStart, (u32)_%sSegmentRomEnd },",
|
roomName.c_str(), roomName.c_str());
|
||||||
roomName.c_str(), roomName.c_str());
|
|
||||||
isFirst = false;
|
isFirst = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,10 +10,13 @@
|
||||||
REGISTER_ZFILENODE(Skeleton, ZSkeleton);
|
REGISTER_ZFILENODE(Skeleton, ZSkeleton);
|
||||||
REGISTER_ZFILENODE(LimbTable, ZLimbTable);
|
REGISTER_ZFILENODE(LimbTable, ZLimbTable);
|
||||||
|
|
||||||
ZSkeleton::ZSkeleton(ZFile* nParent) : ZResource(nParent), limbsTable(nParent)
|
ZSkeleton::ZSkeleton(ZFile* nParent) : ZResource(nParent)
|
||||||
{
|
{
|
||||||
RegisterRequiredAttribute("Type");
|
RegisterRequiredAttribute("Type");
|
||||||
RegisterRequiredAttribute("LimbType");
|
RegisterRequiredAttribute("LimbType");
|
||||||
|
RegisterOptionalAttribute("EnumName");
|
||||||
|
RegisterOptionalAttribute("LimbNone");
|
||||||
|
RegisterOptionalAttribute("LimbMax");
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZSkeleton::ParseXML(tinyxml2::XMLElement* reader)
|
void ZSkeleton::ParseXML(tinyxml2::XMLElement* reader)
|
||||||
|
@ -42,6 +45,41 @@ void ZSkeleton::ParseXML(tinyxml2::XMLElement* reader)
|
||||||
limbTypeXml.c_str()),
|
limbTypeXml.c_str()),
|
||||||
"Defaulting to 'Standard'.");
|
"Defaulting to 'Standard'.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enumName = registeredAttributes.at("EnumName").value;
|
||||||
|
limbNoneName = registeredAttributes.at("LimbNone").value;
|
||||||
|
limbMaxName = registeredAttributes.at("LimbMax").value;
|
||||||
|
|
||||||
|
if (enumName != "")
|
||||||
|
{
|
||||||
|
if (limbNoneName == "" || limbMaxName == "")
|
||||||
|
{
|
||||||
|
HANDLE_ERROR_RESOURCE(WarningType::MissingAttribute, parent, this, rawDataIndex,
|
||||||
|
"'EnumName' attribute was used but either 'LimbNone' or "
|
||||||
|
"'LimbMax' attribute is missing",
|
||||||
|
"");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (limbNoneName != "")
|
||||||
|
{
|
||||||
|
if (limbMaxName == "")
|
||||||
|
{
|
||||||
|
HANDLE_ERROR_RESOURCE(
|
||||||
|
WarningType::MissingAttribute, parent, this, rawDataIndex,
|
||||||
|
"'LimbNone' attribute was used but 'LimbMax' attribute is missing", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (limbMaxName != "")
|
||||||
|
{
|
||||||
|
if (limbNoneName == "")
|
||||||
|
{
|
||||||
|
HANDLE_ERROR_RESOURCE(
|
||||||
|
WarningType::MissingAttribute, parent, this, rawDataIndex,
|
||||||
|
"'LimbMax' attribute was used but 'LimbNone' attribute is missing", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZSkeleton::ParseRawData()
|
void ZSkeleton::ParseRawData()
|
||||||
|
@ -56,12 +94,6 @@ void ZSkeleton::ParseRawData()
|
||||||
{
|
{
|
||||||
dListCount = BitConverter::ToUInt8BE(rawData, rawDataIndex + 8);
|
dListCount = BitConverter::ToUInt8BE(rawData, rawDataIndex + 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (limbsArrayAddress != 0 && GETSEGNUM(limbsArrayAddress) == parent->segment)
|
|
||||||
{
|
|
||||||
uint32_t ptr = Seg2Filespace(limbsArrayAddress, parent->baseAddress);
|
|
||||||
limbsTable.ExtractFromBinary(ptr, limbType, limbCount);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZSkeleton::DeclareReferences(const std::string& prefix)
|
void ZSkeleton::DeclareReferences(const std::string& prefix)
|
||||||
|
@ -72,14 +104,33 @@ void ZSkeleton::DeclareReferences(const std::string& prefix)
|
||||||
|
|
||||||
ZResource::DeclareReferences(defaultPrefix);
|
ZResource::DeclareReferences(defaultPrefix);
|
||||||
|
|
||||||
if (limbsArrayAddress != 0 && GETSEGNUM(limbsArrayAddress) == parent->segment)
|
if (limbsArrayAddress != SEGMENTED_NULL && GETSEGNUM(limbsArrayAddress) == parent->segment)
|
||||||
{
|
{
|
||||||
uint32_t ptr = Seg2Filespace(limbsArrayAddress, parent->baseAddress);
|
offset_t ptr = Seg2Filespace(limbsArrayAddress, parent->baseAddress);
|
||||||
|
|
||||||
if (!parent->HasDeclaration(ptr))
|
if (!parent->HasDeclaration(ptr))
|
||||||
{
|
{
|
||||||
limbsTable.SetName(StringHelper::Sprintf("%sLimbs", defaultPrefix.c_str()));
|
limbsTable = new ZLimbTable(parent);
|
||||||
limbsTable.DeclareReferences(prefix);
|
limbsTable->ExtractFromBinary(ptr, limbType, limbCount);
|
||||||
limbsTable.GetSourceOutputCode(prefix);
|
limbsTable->SetName(StringHelper::Sprintf("%sLimbs", defaultPrefix.c_str()));
|
||||||
|
parent->AddResource(limbsTable);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
limbsTable = static_cast<ZLimbTable*>(parent->FindResource(ptr));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (limbsTable->enumName == "")
|
||||||
|
{
|
||||||
|
limbsTable->enumName = enumName;
|
||||||
|
}
|
||||||
|
if (limbsTable->limbNoneName == "")
|
||||||
|
{
|
||||||
|
limbsTable->limbNoneName = limbNoneName;
|
||||||
|
}
|
||||||
|
if (limbsTable->limbMaxName == "")
|
||||||
|
{
|
||||||
|
limbsTable->limbMaxName = limbMaxName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -89,15 +140,27 @@ std::string ZSkeleton::GetBodySourceCode() const
|
||||||
std::string limbArrayName;
|
std::string limbArrayName;
|
||||||
Globals::Instance->GetSegmentedPtrName(limbsArrayAddress, parent, "", limbArrayName);
|
Globals::Instance->GetSegmentedPtrName(limbsArrayAddress, parent, "", limbArrayName);
|
||||||
|
|
||||||
|
std::string countStr;
|
||||||
|
assert(limbsTable != nullptr);
|
||||||
|
// There are some Skeletons with the wrong limb count on them, so this check is necessary.
|
||||||
|
if (limbsTable->count == limbCount)
|
||||||
|
{
|
||||||
|
countStr = StringHelper::Sprintf("ARRAY_COUNT(%s)", limbArrayName.c_str());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
countStr = StringHelper::Sprintf("%i", limbCount);
|
||||||
|
}
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case ZSkeletonType::Normal:
|
case ZSkeletonType::Normal:
|
||||||
case ZSkeletonType::Curve:
|
case ZSkeletonType::Curve:
|
||||||
return StringHelper::Sprintf("\n\t%s, %i\n", limbArrayName.c_str(), limbCount);
|
return StringHelper::Sprintf("\n\t%s, %s\n", limbArrayName.c_str(), countStr.c_str());
|
||||||
|
|
||||||
case ZSkeletonType::Flex:
|
case ZSkeletonType::Flex:
|
||||||
return StringHelper::Sprintf("\n\t{ %s, %i }, %i\n", limbArrayName.c_str(), limbCount,
|
return StringHelper::Sprintf("\n\t{ %s, %s }, %i\n", limbArrayName.c_str(),
|
||||||
dListCount);
|
countStr.c_str(), dListCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Throw exception?
|
// TODO: Throw exception?
|
||||||
|
@ -153,6 +216,9 @@ ZLimbTable::ZLimbTable(ZFile* nParent) : ZResource(nParent)
|
||||||
{
|
{
|
||||||
RegisterRequiredAttribute("LimbType");
|
RegisterRequiredAttribute("LimbType");
|
||||||
RegisterRequiredAttribute("Count");
|
RegisterRequiredAttribute("Count");
|
||||||
|
RegisterOptionalAttribute("EnumName");
|
||||||
|
RegisterOptionalAttribute("LimbNone");
|
||||||
|
RegisterOptionalAttribute("LimbMax");
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZLimbTable::ExtractFromBinary(uint32_t nRawDataIndex, ZLimbType nLimbType, size_t nCount)
|
void ZLimbTable::ExtractFromBinary(uint32_t nRawDataIndex, ZLimbType nLimbType, size_t nCount)
|
||||||
|
@ -179,6 +245,40 @@ void ZLimbTable::ParseXML(tinyxml2::XMLElement* reader)
|
||||||
}
|
}
|
||||||
|
|
||||||
count = StringHelper::StrToL(registeredAttributes.at("Count").value);
|
count = StringHelper::StrToL(registeredAttributes.at("Count").value);
|
||||||
|
|
||||||
|
enumName = registeredAttributes.at("EnumName").value;
|
||||||
|
limbNoneName = registeredAttributes.at("LimbNone").value;
|
||||||
|
limbMaxName = registeredAttributes.at("LimbMax").value;
|
||||||
|
|
||||||
|
if (enumName != "")
|
||||||
|
{
|
||||||
|
if (limbNoneName == "" || limbMaxName == "")
|
||||||
|
{
|
||||||
|
HANDLE_ERROR_RESOURCE(
|
||||||
|
WarningType::MissingAttribute, parent, this, rawDataIndex,
|
||||||
|
"'EnumName' attribute was used but 'LimbNone'/'LimbMax' attributes is missing", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (limbNoneName != "")
|
||||||
|
{
|
||||||
|
if (limbMaxName == "")
|
||||||
|
{
|
||||||
|
HANDLE_ERROR_RESOURCE(
|
||||||
|
WarningType::MissingAttribute, parent, this, rawDataIndex,
|
||||||
|
"'LimbNone' attribute was used but 'LimbMax' attribute is missing", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (limbMaxName != "")
|
||||||
|
{
|
||||||
|
if (limbNoneName == "")
|
||||||
|
{
|
||||||
|
HANDLE_ERROR_RESOURCE(
|
||||||
|
WarningType::MissingAttribute, parent, this, rawDataIndex,
|
||||||
|
"'LimbMax' attribute was used but 'LimbNone' attribute is missing", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZLimbTable::ParseRawData()
|
void ZLimbTable::ParseRawData()
|
||||||
|
@ -209,15 +309,28 @@ void ZLimbTable::DeclareReferences(const std::string& prefix)
|
||||||
if (limbAddress != 0 && GETSEGNUM(limbAddress) == parent->segment)
|
if (limbAddress != 0 && GETSEGNUM(limbAddress) == parent->segment)
|
||||||
{
|
{
|
||||||
uint32_t limbOffset = Seg2Filespace(limbAddress, parent->baseAddress);
|
uint32_t limbOffset = Seg2Filespace(limbAddress, parent->baseAddress);
|
||||||
|
ZLimb* limb;
|
||||||
|
|
||||||
if (!parent->HasDeclaration(limbOffset))
|
if (!parent->HasDeclaration(limbOffset))
|
||||||
{
|
{
|
||||||
ZLimb* limb = new ZLimb(parent);
|
limb = new ZLimb(parent);
|
||||||
limb->ExtractFromBinary(limbOffset, limbType);
|
limb->ExtractFromBinary(limbOffset, limbType);
|
||||||
limb->SetName(limb->GetDefaultName(varPrefix));
|
limb->SetName(limb->GetDefaultName(varPrefix));
|
||||||
limb->DeclareVar(varPrefix, "");
|
limb->DeclareVar(varPrefix, "");
|
||||||
limb->DeclareReferences(varPrefix);
|
limb->DeclareReferences(varPrefix);
|
||||||
parent->AddResource(limb);
|
parent->AddResource(limb);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
limb = static_cast<ZLimb*>(parent->FindResource(limbOffset));
|
||||||
|
assert(limb != nullptr);
|
||||||
|
assert(limb->GetResourceType() == ZResourceType::Limb);
|
||||||
|
}
|
||||||
|
|
||||||
|
limb->limbsTable = this;
|
||||||
|
limb->SetLimbIndex(i + 1);
|
||||||
|
|
||||||
|
limbsReferences.push_back(limb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -246,6 +359,13 @@ std::string ZLimbTable::GetBodySourceCode() const
|
||||||
Globals::Instance->GetSegmentedPtrName(limbsAddresses[i], parent, "", limbName);
|
Globals::Instance->GetSegmentedPtrName(limbsAddresses[i], parent, "", limbName);
|
||||||
body += StringHelper::Sprintf("\t%s,", limbName.c_str());
|
body += StringHelper::Sprintf("\t%s,", limbName.c_str());
|
||||||
|
|
||||||
|
auto& limb = limbsReferences.at(i);
|
||||||
|
std::string limbEnumName = limb->enumName;
|
||||||
|
if (limbEnumName != "")
|
||||||
|
{
|
||||||
|
body += StringHelper::Sprintf(" /* %s */", limbEnumName.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
if (i + 1 < count)
|
if (i + 1 < count)
|
||||||
body += "\n";
|
body += "\n";
|
||||||
}
|
}
|
||||||
|
@ -253,6 +373,46 @@ std::string ZLimbTable::GetBodySourceCode() const
|
||||||
return body;
|
return body;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string ZLimbTable::GetSourceOutputHeader([[maybe_unused]] const std::string& prefix)
|
||||||
|
{
|
||||||
|
if (limbNoneName == "" || limbMaxName == "" || enumName == "")
|
||||||
|
{
|
||||||
|
// Don't produce a enum of any of those attributes is missing
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string limbEnum = StringHelper::Sprintf("typedef enum %s {\n", enumName.c_str());
|
||||||
|
|
||||||
|
// This assumes there isn't any skeleton with more than 0x100 limbs
|
||||||
|
|
||||||
|
limbEnum += StringHelper::Sprintf(" /* 0x00 */ %s,\n", limbNoneName.c_str());
|
||||||
|
|
||||||
|
size_t i = 0;
|
||||||
|
for (; i < count; i++)
|
||||||
|
{
|
||||||
|
auto& limb = limbsReferences.at(i);
|
||||||
|
std::string limbEnumName = limb->enumName;
|
||||||
|
|
||||||
|
if (limbEnumName == "")
|
||||||
|
{
|
||||||
|
HANDLE_ERROR_RESOURCE(
|
||||||
|
WarningType::MissingAttribute, parent, this, rawDataIndex,
|
||||||
|
"Skeleton's enum attributes were used but at least one limb is missing its "
|
||||||
|
"'LimbName' attribute",
|
||||||
|
StringHelper::Sprintf("When processing limb %02i, named '%s' at offset '0x%X'",
|
||||||
|
i + 1, limb->GetName().c_str(), limb->GetRawDataIndex()));
|
||||||
|
}
|
||||||
|
|
||||||
|
limbEnum += StringHelper::Sprintf(" /* 0x%02X */ %s,\n", i + 1, limbEnumName.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
limbEnum += StringHelper::Sprintf(" /* 0x%02X */ %s\n", i + 1, limbMaxName.c_str());
|
||||||
|
|
||||||
|
limbEnum += StringHelper::Sprintf("} %s;\n", enumName.c_str());
|
||||||
|
|
||||||
|
return limbEnum;
|
||||||
|
}
|
||||||
|
|
||||||
std::string ZLimbTable::GetSourceTypeName() const
|
std::string ZLimbTable::GetSourceTypeName() const
|
||||||
{
|
{
|
||||||
switch (limbType)
|
switch (limbType)
|
||||||
|
@ -283,3 +443,28 @@ size_t ZLimbTable::GetRawDataSize() const
|
||||||
{
|
{
|
||||||
return 4 * limbsAddresses.size();
|
return 4 * limbsAddresses.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string ZLimbTable::GetLimbEnumName(uint8_t limbIndex) const
|
||||||
|
{
|
||||||
|
if (limbIndex == 0xFF)
|
||||||
|
{
|
||||||
|
return "LIMB_DONE";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (limbIndex < count)
|
||||||
|
{
|
||||||
|
std::string limbEnumName = limbsReferences.at(limbIndex)->enumName;
|
||||||
|
if (limbEnumName != "")
|
||||||
|
{
|
||||||
|
return StringHelper::Sprintf("%s - 1", limbEnumName.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
HANDLE_WARNING_RESOURCE(WarningType::InvalidExtractedData, parent, this, rawDataIndex,
|
||||||
|
StringHelper::Sprintf("Limb index '%02i' out of range", limbIndex),
|
||||||
|
"");
|
||||||
|
}
|
||||||
|
|
||||||
|
return StringHelper::Sprintf("0x%02X", limbIndex);
|
||||||
|
}
|
||||||
|
|
|
@ -18,6 +18,17 @@ enum class ZSkeletonType
|
||||||
class ZLimbTable : public ZResource
|
class ZLimbTable : public ZResource
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
ZLimbType limbType = ZLimbType::Standard;
|
||||||
|
size_t count = 0;
|
||||||
|
|
||||||
|
std::vector<segptr_t> limbsAddresses;
|
||||||
|
std::vector<ZLimb*> limbsReferences; // borrowed pointers, do not delete!
|
||||||
|
|
||||||
|
// XML attributes
|
||||||
|
std::string enumName;
|
||||||
|
std::string limbNoneName;
|
||||||
|
std::string limbMaxName;
|
||||||
|
|
||||||
ZLimbTable(ZFile* nParent);
|
ZLimbTable(ZFile* nParent);
|
||||||
|
|
||||||
void ExtractFromBinary(uint32_t nRawDataIndex, ZLimbType nLimbType, size_t nCount);
|
void ExtractFromBinary(uint32_t nRawDataIndex, ZLimbType nLimbType, size_t nCount);
|
||||||
|
@ -30,16 +41,14 @@ public:
|
||||||
|
|
||||||
std::string GetBodySourceCode() const override;
|
std::string GetBodySourceCode() const override;
|
||||||
|
|
||||||
|
std::string GetSourceOutputHeader(const std::string& prefix) override;
|
||||||
|
|
||||||
std::string GetSourceTypeName() const override;
|
std::string GetSourceTypeName() const override;
|
||||||
ZResourceType GetResourceType() const override;
|
ZResourceType GetResourceType() const override;
|
||||||
|
|
||||||
size_t GetRawDataSize() const override;
|
size_t GetRawDataSize() const override;
|
||||||
|
|
||||||
protected:
|
std::string GetLimbEnumName(uint8_t limbIndex) const;
|
||||||
ZLimbType limbType = ZLimbType::Standard;
|
|
||||||
size_t count = 0;
|
|
||||||
|
|
||||||
std::vector<segptr_t> limbsAddresses;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class ZSkeleton : public ZResource
|
class ZSkeleton : public ZResource
|
||||||
|
@ -47,6 +56,10 @@ class ZSkeleton : public ZResource
|
||||||
public:
|
public:
|
||||||
ZSkeletonType type = ZSkeletonType::Normal;
|
ZSkeletonType type = ZSkeletonType::Normal;
|
||||||
ZLimbType limbType = ZLimbType::Standard;
|
ZLimbType limbType = ZLimbType::Standard;
|
||||||
|
std::string enumName;
|
||||||
|
std::string limbNoneName;
|
||||||
|
std::string limbMaxName;
|
||||||
|
|
||||||
segptr_t limbsArrayAddress;
|
segptr_t limbsArrayAddress;
|
||||||
uint8_t limbCount = 0;
|
uint8_t limbCount = 0;
|
||||||
uint8_t dListCount = 0; // FLEX SKELETON ONLY
|
uint8_t dListCount = 0; // FLEX SKELETON ONLY
|
||||||
|
@ -68,5 +81,5 @@ public:
|
||||||
uint8_t GetLimbCount();
|
uint8_t GetLimbCount();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ZLimbTable limbsTable;
|
ZLimbTable* limbsTable = nullptr; // borrowed pointer, do not delete!
|
||||||
};
|
};
|
||||||
|
|
|
@ -17,11 +17,15 @@ ZTexture::ZTexture(ZFile* nParent) : ZResource(nParent)
|
||||||
width = 0;
|
width = 0;
|
||||||
height = 0;
|
height = 0;
|
||||||
dWordAligned = true;
|
dWordAligned = true;
|
||||||
|
splitTlut = false;
|
||||||
|
|
||||||
RegisterRequiredAttribute("Width");
|
RegisterRequiredAttribute("Width");
|
||||||
RegisterRequiredAttribute("Height");
|
RegisterRequiredAttribute("Height");
|
||||||
RegisterRequiredAttribute("Format");
|
RegisterRequiredAttribute("Format");
|
||||||
RegisterOptionalAttribute("TlutOffset");
|
RegisterOptionalAttribute("TlutOffset");
|
||||||
|
RegisterOptionalAttribute("ExternalTlut");
|
||||||
|
RegisterOptionalAttribute("ExternalTlutOffset");
|
||||||
|
RegisterOptionalAttribute("SplitTlut");
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZTexture::ExtractFromBinary(uint32_t nRawDataIndex, int32_t nWidth, int32_t nHeight,
|
void ZTexture::ExtractFromBinary(uint32_t nRawDataIndex, int32_t nWidth, int32_t nHeight,
|
||||||
|
@ -56,6 +60,7 @@ void ZTexture::ParseXML(tinyxml2::XMLElement* reader)
|
||||||
|
|
||||||
std::string widthXml = registeredAttributes.at("Width").value;
|
std::string widthXml = registeredAttributes.at("Width").value;
|
||||||
std::string heightXml = registeredAttributes.at("Height").value;
|
std::string heightXml = registeredAttributes.at("Height").value;
|
||||||
|
std::string SplitTlutXml = registeredAttributes.at("SplitTlut").value;
|
||||||
|
|
||||||
if (!StringHelper::HasOnlyDigits(widthXml))
|
if (!StringHelper::HasOnlyDigits(widthXml))
|
||||||
{
|
{
|
||||||
|
@ -72,6 +77,27 @@ void ZTexture::ParseXML(tinyxml2::XMLElement* reader)
|
||||||
errorHeader, "");
|
errorHeader, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!registeredAttributes.at("ExternalTlut").wasSet &&
|
||||||
|
registeredAttributes.at("SplitTlut").wasSet)
|
||||||
|
{
|
||||||
|
std::string errorHeader =
|
||||||
|
StringHelper::Sprintf("SplitTlut set without using an external tlut");
|
||||||
|
HANDLE_WARNING_RESOURCE(WarningType::InvalidAttributeValue, parent, this, rawDataIndex,
|
||||||
|
errorHeader, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!SplitTlutXml.empty())
|
||||||
|
{
|
||||||
|
if (!tinyxml2::XMLUtil::ToBool(SplitTlutXml.c_str(), &splitTlut))
|
||||||
|
{
|
||||||
|
std::string errorHeader = StringHelper::Sprintf(
|
||||||
|
"Invalid value passed to SplitTlut: '%s'. Valid values are true, false, 1, 0",
|
||||||
|
SplitTlutXml.c_str());
|
||||||
|
HANDLE_ERROR_RESOURCE(WarningType::InvalidAttributeValue, parent, this, rawDataIndex,
|
||||||
|
errorHeader, "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
width = StringHelper::StrToL(widthXml);
|
width = StringHelper::StrToL(widthXml);
|
||||||
height = StringHelper::StrToL(heightXml);
|
height = StringHelper::StrToL(heightXml);
|
||||||
|
|
||||||
|
@ -145,6 +171,47 @@ void ZTexture::ParseRawData()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ZTexture::ParseRawDataLate()
|
||||||
|
{
|
||||||
|
if (registeredAttributes["ExternalTlut"].wasSet)
|
||||||
|
{
|
||||||
|
const std::string externPalette = registeredAttributes["ExternalTlut"].value;
|
||||||
|
for (const auto& file : Globals::Instance->files)
|
||||||
|
{
|
||||||
|
if (file->GetName() == externPalette)
|
||||||
|
{
|
||||||
|
offset_t palOffset = 0;
|
||||||
|
if (registeredAttributes["ExternalTlutOffset"].wasSet)
|
||||||
|
{
|
||||||
|
palOffset =
|
||||||
|
StringHelper::StrToL(registeredAttributes["ExternalTlutOffset"].value, 16);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
HANDLE_WARNING_RESOURCE(
|
||||||
|
WarningType::MissingOffsets, parent, this, rawDataIndex,
|
||||||
|
StringHelper::Sprintf(
|
||||||
|
"No ExternalTlutOffset Given. Assuming offset of 0x0"),
|
||||||
|
"");
|
||||||
|
}
|
||||||
|
for (const auto& res : file->resources)
|
||||||
|
{
|
||||||
|
if (res->GetRawDataIndex() == palOffset)
|
||||||
|
{
|
||||||
|
ZTexture* palette = (ZTexture*)res;
|
||||||
|
ZTexture tlutTemp(file);
|
||||||
|
|
||||||
|
tlut = &tlutTemp;
|
||||||
|
tlut->ExtractFromBinary(palOffset, palette->width, palette->height,
|
||||||
|
TextureType::RGBA16bpp, true);
|
||||||
|
SetTlut(tlut);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ZTexture::PrepareBitmapRGBA16()
|
void ZTexture::PrepareBitmapRGBA16()
|
||||||
{
|
{
|
||||||
textureData.InitEmptyRGBImage(width, height, true);
|
textureData.InitEmptyRGBImage(width, height, true);
|
||||||
|
@ -350,34 +417,42 @@ void ZTexture::DeclareReferences([[maybe_unused]] const std::string& prefix)
|
||||||
|
|
||||||
void ZTexture::PrepareRawDataFromFile(const fs::path& pngFilePath)
|
void ZTexture::PrepareRawDataFromFile(const fs::path& pngFilePath)
|
||||||
{
|
{
|
||||||
|
textureData.ReadPng(pngFilePath);
|
||||||
|
|
||||||
|
width = textureData.GetWidth();
|
||||||
|
height = textureData.GetHeight();
|
||||||
|
|
||||||
|
textureDataRaw.clear();
|
||||||
|
textureDataRaw.resize(ALIGN8(GetRawDataSize()));
|
||||||
|
|
||||||
switch (format)
|
switch (format)
|
||||||
{
|
{
|
||||||
case TextureType::RGBA16bpp:
|
case TextureType::RGBA16bpp:
|
||||||
PrepareRawDataRGBA16(pngFilePath);
|
PrepareRawDataRGBA16();
|
||||||
break;
|
break;
|
||||||
case TextureType::RGBA32bpp:
|
case TextureType::RGBA32bpp:
|
||||||
PrepareRawDataRGBA32(pngFilePath);
|
PrepareRawDataRGBA32();
|
||||||
break;
|
break;
|
||||||
case TextureType::Grayscale4bpp:
|
case TextureType::Grayscale4bpp:
|
||||||
PrepareRawDataGrayscale4(pngFilePath);
|
PrepareRawDataGrayscale4();
|
||||||
break;
|
break;
|
||||||
case TextureType::Grayscale8bpp:
|
case TextureType::Grayscale8bpp:
|
||||||
PrepareRawDataGrayscale8(pngFilePath);
|
PrepareRawDataGrayscale8();
|
||||||
break;
|
break;
|
||||||
case TextureType::GrayscaleAlpha4bpp:
|
case TextureType::GrayscaleAlpha4bpp:
|
||||||
PrepareRawDataGrayscaleAlpha4(pngFilePath);
|
PrepareRawDataGrayscaleAlpha4();
|
||||||
break;
|
break;
|
||||||
case TextureType::GrayscaleAlpha8bpp:
|
case TextureType::GrayscaleAlpha8bpp:
|
||||||
PrepareRawDataGrayscaleAlpha8(pngFilePath);
|
PrepareRawDataGrayscaleAlpha8();
|
||||||
break;
|
break;
|
||||||
case TextureType::GrayscaleAlpha16bpp:
|
case TextureType::GrayscaleAlpha16bpp:
|
||||||
PrepareRawDataGrayscaleAlpha16(pngFilePath);
|
PrepareRawDataGrayscaleAlpha16();
|
||||||
break;
|
break;
|
||||||
case TextureType::Palette4bpp:
|
case TextureType::Palette4bpp:
|
||||||
PrepareRawDataPalette4(pngFilePath);
|
PrepareRawDataPalette4();
|
||||||
break;
|
break;
|
||||||
case TextureType::Palette8bpp:
|
case TextureType::Palette8bpp:
|
||||||
PrepareRawDataPalette8(pngFilePath);
|
PrepareRawDataPalette8();
|
||||||
break;
|
break;
|
||||||
case TextureType::Error:
|
case TextureType::Error:
|
||||||
HANDLE_ERROR_PROCESS(WarningType::InvalidPNG, "Input PNG file has invalid format type", "");
|
HANDLE_ERROR_PROCESS(WarningType::InvalidPNG, "Input PNG file has invalid format type", "");
|
||||||
|
@ -385,15 +460,8 @@ void ZTexture::PrepareRawDataFromFile(const fs::path& pngFilePath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZTexture::PrepareRawDataRGBA16(const fs::path& rgbaPath)
|
void ZTexture::PrepareRawDataRGBA16()
|
||||||
{
|
{
|
||||||
textureData.ReadPng(rgbaPath);
|
|
||||||
|
|
||||||
width = textureData.GetWidth();
|
|
||||||
height = textureData.GetHeight();
|
|
||||||
|
|
||||||
textureDataRaw.clear();
|
|
||||||
textureDataRaw.resize(GetRawDataSize());
|
|
||||||
for (uint16_t y = 0; y < height; y++)
|
for (uint16_t y = 0; y < height; y++)
|
||||||
{
|
{
|
||||||
for (uint16_t x = 0; x < width; x++)
|
for (uint16_t x = 0; x < width; x++)
|
||||||
|
@ -415,15 +483,8 @@ void ZTexture::PrepareRawDataRGBA16(const fs::path& rgbaPath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZTexture::PrepareRawDataRGBA32(const fs::path& rgbaPath)
|
void ZTexture::PrepareRawDataRGBA32()
|
||||||
{
|
{
|
||||||
textureData.ReadPng(rgbaPath);
|
|
||||||
|
|
||||||
width = textureData.GetWidth();
|
|
||||||
height = textureData.GetHeight();
|
|
||||||
|
|
||||||
textureDataRaw.clear();
|
|
||||||
textureDataRaw.resize(GetRawDataSize());
|
|
||||||
for (uint16_t y = 0; y < height; y++)
|
for (uint16_t y = 0; y < height; y++)
|
||||||
{
|
{
|
||||||
for (uint16_t x = 0; x < width; x++)
|
for (uint16_t x = 0; x < width; x++)
|
||||||
|
@ -439,15 +500,8 @@ void ZTexture::PrepareRawDataRGBA32(const fs::path& rgbaPath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZTexture::PrepareRawDataGrayscale4(const fs::path& grayPath)
|
void ZTexture::PrepareRawDataGrayscale4()
|
||||||
{
|
{
|
||||||
textureData.ReadPng(grayPath);
|
|
||||||
|
|
||||||
width = textureData.GetWidth();
|
|
||||||
height = textureData.GetHeight();
|
|
||||||
|
|
||||||
textureDataRaw.clear();
|
|
||||||
textureDataRaw.resize(GetRawDataSize());
|
|
||||||
for (uint16_t y = 0; y < height; y++)
|
for (uint16_t y = 0; y < height; y++)
|
||||||
{
|
{
|
||||||
for (uint16_t x = 0; x < width; x += 2)
|
for (uint16_t x = 0; x < width; x += 2)
|
||||||
|
@ -461,15 +515,8 @@ void ZTexture::PrepareRawDataGrayscale4(const fs::path& grayPath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZTexture::PrepareRawDataGrayscale8(const fs::path& grayPath)
|
void ZTexture::PrepareRawDataGrayscale8()
|
||||||
{
|
{
|
||||||
textureData.ReadPng(grayPath);
|
|
||||||
|
|
||||||
width = textureData.GetWidth();
|
|
||||||
height = textureData.GetHeight();
|
|
||||||
|
|
||||||
textureDataRaw.clear();
|
|
||||||
textureDataRaw.resize(GetRawDataSize());
|
|
||||||
for (uint16_t y = 0; y < height; y++)
|
for (uint16_t y = 0; y < height; y++)
|
||||||
{
|
{
|
||||||
for (uint16_t x = 0; x < width; x++)
|
for (uint16_t x = 0; x < width; x++)
|
||||||
|
@ -481,15 +528,8 @@ void ZTexture::PrepareRawDataGrayscale8(const fs::path& grayPath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZTexture::PrepareRawDataGrayscaleAlpha4(const fs::path& grayAlphaPath)
|
void ZTexture::PrepareRawDataGrayscaleAlpha4()
|
||||||
{
|
{
|
||||||
textureData.ReadPng(grayAlphaPath);
|
|
||||||
|
|
||||||
width = textureData.GetWidth();
|
|
||||||
height = textureData.GetHeight();
|
|
||||||
|
|
||||||
textureDataRaw.clear();
|
|
||||||
textureDataRaw.resize(GetRawDataSize());
|
|
||||||
for (uint16_t y = 0; y < height; y++)
|
for (uint16_t y = 0; y < height; y++)
|
||||||
{
|
{
|
||||||
for (uint16_t x = 0; x < width; x += 2)
|
for (uint16_t x = 0; x < width; x += 2)
|
||||||
|
@ -514,15 +554,8 @@ void ZTexture::PrepareRawDataGrayscaleAlpha4(const fs::path& grayAlphaPath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZTexture::PrepareRawDataGrayscaleAlpha8(const fs::path& grayAlphaPath)
|
void ZTexture::PrepareRawDataGrayscaleAlpha8()
|
||||||
{
|
{
|
||||||
textureData.ReadPng(grayAlphaPath);
|
|
||||||
|
|
||||||
width = textureData.GetWidth();
|
|
||||||
height = textureData.GetHeight();
|
|
||||||
|
|
||||||
textureDataRaw.clear();
|
|
||||||
textureDataRaw.resize(GetRawDataSize());
|
|
||||||
for (uint16_t y = 0; y < height; y++)
|
for (uint16_t y = 0; y < height; y++)
|
||||||
{
|
{
|
||||||
for (uint16_t x = 0; x < width; x++)
|
for (uint16_t x = 0; x < width; x++)
|
||||||
|
@ -538,15 +571,8 @@ void ZTexture::PrepareRawDataGrayscaleAlpha8(const fs::path& grayAlphaPath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZTexture::PrepareRawDataGrayscaleAlpha16(const fs::path& grayAlphaPath)
|
void ZTexture::PrepareRawDataGrayscaleAlpha16()
|
||||||
{
|
{
|
||||||
textureData.ReadPng(grayAlphaPath);
|
|
||||||
|
|
||||||
width = textureData.GetWidth();
|
|
||||||
height = textureData.GetHeight();
|
|
||||||
|
|
||||||
textureDataRaw.clear();
|
|
||||||
textureDataRaw.resize(GetRawDataSize());
|
|
||||||
for (uint16_t y = 0; y < height; y++)
|
for (uint16_t y = 0; y < height; y++)
|
||||||
{
|
{
|
||||||
for (uint16_t x = 0; x < width; x++)
|
for (uint16_t x = 0; x < width; x++)
|
||||||
|
@ -563,15 +589,8 @@ void ZTexture::PrepareRawDataGrayscaleAlpha16(const fs::path& grayAlphaPath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZTexture::PrepareRawDataPalette4(const fs::path& palPath)
|
void ZTexture::PrepareRawDataPalette4()
|
||||||
{
|
{
|
||||||
textureData.ReadPng(palPath);
|
|
||||||
|
|
||||||
width = textureData.GetWidth();
|
|
||||||
height = textureData.GetHeight();
|
|
||||||
|
|
||||||
textureDataRaw.clear();
|
|
||||||
textureDataRaw.resize(GetRawDataSize());
|
|
||||||
for (uint16_t y = 0; y < height; y++)
|
for (uint16_t y = 0; y < height; y++)
|
||||||
{
|
{
|
||||||
for (uint16_t x = 0; x < width; x += 2)
|
for (uint16_t x = 0; x < width; x += 2)
|
||||||
|
@ -586,15 +605,8 @@ void ZTexture::PrepareRawDataPalette4(const fs::path& palPath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZTexture::PrepareRawDataPalette8(const fs::path& palPath)
|
void ZTexture::PrepareRawDataPalette8()
|
||||||
{
|
{
|
||||||
textureData.ReadPng(palPath);
|
|
||||||
|
|
||||||
width = textureData.GetWidth();
|
|
||||||
height = textureData.GetHeight();
|
|
||||||
|
|
||||||
textureDataRaw.clear();
|
|
||||||
textureDataRaw.resize(GetRawDataSize());
|
|
||||||
for (uint16_t y = 0; y < height; y++)
|
for (uint16_t y = 0; y < height; y++)
|
||||||
{
|
{
|
||||||
for (uint16_t x = 0; x < width; x++)
|
for (uint16_t x = 0; x < width; x++)
|
||||||
|
@ -926,7 +938,7 @@ void ZTexture::SetTlut(ZTexture* nTlut)
|
||||||
assert(nTlut->isPalette);
|
assert(nTlut->isPalette);
|
||||||
tlut = nTlut;
|
tlut = nTlut;
|
||||||
|
|
||||||
textureData.SetPalette(tlut->textureData);
|
textureData.SetPalette(tlut->textureData, splitTlut ? 128 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ZTexture::HasTlut() const
|
bool ZTexture::HasTlut() const
|
||||||
|
|
|
@ -28,6 +28,7 @@ protected:
|
||||||
std::vector<uint8_t> textureDataRaw; // When reading from a PNG file.
|
std::vector<uint8_t> textureDataRaw; // When reading from a PNG file.
|
||||||
uint32_t tlutOffset = static_cast<uint32_t>(-1);
|
uint32_t tlutOffset = static_cast<uint32_t>(-1);
|
||||||
ZTexture* tlut = nullptr;
|
ZTexture* tlut = nullptr;
|
||||||
|
bool splitTlut;
|
||||||
|
|
||||||
void PrepareBitmapRGBA16();
|
void PrepareBitmapRGBA16();
|
||||||
void PrepareBitmapRGBA32();
|
void PrepareBitmapRGBA32();
|
||||||
|
@ -40,15 +41,15 @@ protected:
|
||||||
void PrepareBitmapPalette8();
|
void PrepareBitmapPalette8();
|
||||||
|
|
||||||
void PrepareRawDataFromFile(const fs::path& inFolder);
|
void PrepareRawDataFromFile(const fs::path& inFolder);
|
||||||
void PrepareRawDataRGBA16(const fs::path& rgbaPath);
|
void PrepareRawDataRGBA16();
|
||||||
void PrepareRawDataRGBA32(const fs::path& rgbaPath);
|
void PrepareRawDataRGBA32();
|
||||||
void PrepareRawDataGrayscale4(const fs::path& grayPath);
|
void PrepareRawDataGrayscale4();
|
||||||
void PrepareRawDataGrayscale8(const fs::path& grayPath);
|
void PrepareRawDataGrayscale8();
|
||||||
void PrepareRawDataGrayscaleAlpha4(const fs::path& grayAlphaPath);
|
void PrepareRawDataGrayscaleAlpha4();
|
||||||
void PrepareRawDataGrayscaleAlpha8(const fs::path& grayAlphaPath);
|
void PrepareRawDataGrayscaleAlpha8();
|
||||||
void PrepareRawDataGrayscaleAlpha16(const fs::path& grayAlphaPath);
|
void PrepareRawDataGrayscaleAlpha16();
|
||||||
void PrepareRawDataPalette4(const fs::path& palPath);
|
void PrepareRawDataPalette4();
|
||||||
void PrepareRawDataPalette8(const fs::path& palPath);
|
void PrepareRawDataPalette8();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ZTexture(ZFile* nParent);
|
ZTexture(ZFile* nParent);
|
||||||
|
@ -88,4 +89,5 @@ public:
|
||||||
bool IsColorIndexed() const;
|
bool IsColorIndexed() const;
|
||||||
void SetTlut(ZTexture* nTlut);
|
void SetTlut(ZTexture* nTlut);
|
||||||
bool HasTlut() const;
|
bool HasTlut() const;
|
||||||
|
void ParseRawDataLate() override;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,155 +1,160 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <cinttypes>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstring>
|
||||||
#include <limits>
|
#include <limits>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#define ALIGN8(val) (((val) + 7) & ~7)
|
||||||
|
#define ALIGN16(val) (((val) + 0xF) & ~0xF)
|
||||||
|
#define ALIGN64(val) (((val) + 0x3F) & ~0x3F)
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#define __PRETTY_FUNCTION__ __FUNCSIG__
|
||||||
|
#endif
|
||||||
|
|
||||||
class BitConverter
|
class BitConverter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static inline int8_t ToInt8BE(const uint8_t* data, int32_t offset)
|
static inline int8_t ToInt8BE(const std::vector<uint8_t>& data, size_t offset)
|
||||||
{
|
{
|
||||||
return (uint8_t)data[offset + 0];
|
if (offset + 0 > data.size())
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s\n", __PRETTY_FUNCTION__);
|
||||||
|
fprintf(stderr, "Error: Trying a out-of-bounds reading from a data buffer\n");
|
||||||
|
fprintf(stderr, "\t Buffer size: 0x%zX\n", data.size());
|
||||||
|
fprintf(stderr, "\t Trying to read at offset: 0x%zX\n", offset);
|
||||||
|
}
|
||||||
|
return (int8_t)data.at(offset + 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int8_t ToInt8BE(const std::vector<uint8_t>& data, int32_t offset)
|
static inline uint8_t ToUInt8BE(const std::vector<uint8_t>& data, size_t offset)
|
||||||
{
|
{
|
||||||
return (uint8_t)data[offset + 0];
|
if (offset + 0 > data.size())
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s\n", __PRETTY_FUNCTION__);
|
||||||
|
fprintf(stderr, "Error: Trying an out-of-bounds reading from a data buffer\n");
|
||||||
|
fprintf(stderr, "\t Buffer size: 0x%zX\n", data.size());
|
||||||
|
fprintf(stderr, "\t Trying to read at offset: 0x%zX\n", offset);
|
||||||
|
}
|
||||||
|
return (uint8_t)data.at(offset + 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint8_t ToUInt8BE(const uint8_t* data, int32_t offset)
|
static inline int16_t ToInt16BE(const std::vector<uint8_t>& data, size_t offset)
|
||||||
{
|
{
|
||||||
return (uint8_t)data[offset + 0];
|
if (offset + 1 > data.size())
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s\n", __PRETTY_FUNCTION__);
|
||||||
|
fprintf(stderr, "Error: Trying a out-of-bounds reading from a data buffer\n");
|
||||||
|
fprintf(stderr, "\t Buffer size: 0x%zX\n", data.size());
|
||||||
|
fprintf(stderr, "\t Trying to read at offset: 0x%zX\n", offset);
|
||||||
|
}
|
||||||
|
return ((uint16_t)data.at(offset + 0) << 8) + (uint16_t)data.at(offset + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint8_t ToUInt8BE(const std::vector<uint8_t>& data, int32_t offset)
|
static inline uint16_t ToUInt16BE(const std::vector<uint8_t>& data, size_t offset)
|
||||||
{
|
{
|
||||||
return (uint8_t)data[offset + 0];
|
if (offset + 1 > data.size())
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s\n", __PRETTY_FUNCTION__);
|
||||||
|
fprintf(stderr, "Error: Trying a out-of-bounds reading from a data buffer\n");
|
||||||
|
fprintf(stderr, "\t Buffer size: 0x%zX\n", data.size());
|
||||||
|
fprintf(stderr, "\t Trying to read at offset: 0x%zX\n", offset);
|
||||||
|
}
|
||||||
|
return ((uint16_t)data.at(offset + 0) << 8) + (uint16_t)data.at(offset + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int16_t ToInt16BE(const uint8_t* data, int32_t offset)
|
static inline int32_t ToInt32BE(const std::vector<uint8_t>& data, size_t offset)
|
||||||
{
|
{
|
||||||
return ((uint16_t)data[offset + 0] << 8) + (uint16_t)data[offset + 1];
|
if (offset + 3 > data.size())
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s\n", __PRETTY_FUNCTION__);
|
||||||
|
fprintf(stderr, "Error: Trying a out-of-bounds reading from a data buffer\n");
|
||||||
|
fprintf(stderr, "\t Buffer size: 0x%zX\n", data.size());
|
||||||
|
fprintf(stderr, "\t Trying to read at offset: 0x%zX\n", offset);
|
||||||
|
}
|
||||||
|
return ((uint32_t)data.at(offset + 0) << 24) + ((uint32_t)data.at(offset + 1) << 16) +
|
||||||
|
((uint32_t)data.at(offset + 2) << 8) + (uint32_t)data.at(offset + 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int16_t ToInt16BE(const std::vector<uint8_t>& data, int32_t offset)
|
static inline uint32_t ToUInt32BE(const std::vector<uint8_t>& data, size_t offset)
|
||||||
{
|
{
|
||||||
return ((uint16_t)data[offset + 0] << 8) + (uint16_t)data[offset + 1];
|
if (offset + 3 > data.size())
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s\n", __PRETTY_FUNCTION__);
|
||||||
|
fprintf(stderr, "Error: Trying a out-of-bounds reading from a data buffer\n");
|
||||||
|
fprintf(stderr, "\t Buffer size: 0x%zX\n", data.size());
|
||||||
|
fprintf(stderr, "\t Trying to read at offset: 0x%zX\n", offset);
|
||||||
|
}
|
||||||
|
return ((uint32_t)data.at(offset + 0) << 24) + ((uint32_t)data.at(offset + 1) << 16) +
|
||||||
|
((uint32_t)data.at(offset + 2) << 8) + (uint32_t)data.at(offset + 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint16_t ToUInt16BE(const uint8_t* data, int32_t offset)
|
static inline int64_t ToInt64BE(const std::vector<uint8_t>& data, size_t offset)
|
||||||
{
|
{
|
||||||
return ((uint16_t)data[offset + 0] << 8) + (uint16_t)data[offset + 1];
|
if (offset + 7 > data.size())
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s\n", __PRETTY_FUNCTION__);
|
||||||
|
fprintf(stderr, "Error: Trying a out-of-bounds reading from a data buffer\n");
|
||||||
|
fprintf(stderr, "\t Buffer size: 0x%zX\n", data.size());
|
||||||
|
fprintf(stderr, "\t Trying to read at offset: 0x%zX\n", offset);
|
||||||
|
}
|
||||||
|
return ((uint64_t)data.at(offset + 0) << 56) + ((uint64_t)data.at(offset + 1) << 48) +
|
||||||
|
((uint64_t)data.at(offset + 2) << 40) + ((uint64_t)data.at(offset + 3) << 32) +
|
||||||
|
((uint64_t)data.at(offset + 4) << 24) + ((uint64_t)data.at(offset + 5) << 16) +
|
||||||
|
((uint64_t)data.at(offset + 6) << 8) + ((uint64_t)data.at(offset + 7));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint16_t ToUInt16BE(const std::vector<uint8_t>& data, int32_t offset)
|
static inline uint64_t ToUInt64BE(const std::vector<uint8_t>& data, size_t offset)
|
||||||
{
|
{
|
||||||
return ((uint16_t)data[offset + 0] << 8) + (uint16_t)data[offset + 1];
|
if (offset + 7 > data.size())
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s\n", __PRETTY_FUNCTION__);
|
||||||
|
fprintf(stderr, "Error: Trying a out-of-bounds reading from a data buffer\n");
|
||||||
|
fprintf(stderr, "\t Buffer size: 0x%zX\n", data.size());
|
||||||
|
fprintf(stderr, "\t Trying to read at offset: 0x%zX\n", offset);
|
||||||
|
}
|
||||||
|
return ((uint64_t)data.at(offset + 0) << 56) + ((uint64_t)data.at(offset + 1) << 48) +
|
||||||
|
((uint64_t)data.at(offset + 2) << 40) + ((uint64_t)data.at(offset + 3) << 32) +
|
||||||
|
((uint64_t)data.at(offset + 4) << 24) + ((uint64_t)data.at(offset + 5) << 16) +
|
||||||
|
((uint64_t)data.at(offset + 6) << 8) + ((uint64_t)data.at(offset + 7));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int32_t ToInt32BE(const uint8_t* data, int32_t offset)
|
static inline float ToFloatBE(const std::vector<uint8_t>& data, size_t 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, int32_t 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, int32_t 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, int32_t 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, int32_t 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 int64_t ToInt64BE(const std::vector<uint8_t>& data, int32_t 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 uint64_t ToUInt64BE(const uint8_t* data, int32_t 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 uint64_t ToUInt64BE(const std::vector<uint8_t>& data, int32_t 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, int32_t offset)
|
|
||||||
{
|
{
|
||||||
|
if (offset + 3 > data.size())
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s\n", __PRETTY_FUNCTION__);
|
||||||
|
fprintf(stderr, "Error: Trying a out-of-bounds reading from a data buffer\n");
|
||||||
|
fprintf(stderr, "\t Buffer size: 0x%zX\n", data.size());
|
||||||
|
fprintf(stderr, "\t Trying to read at offset: 0x%zX\n", offset);
|
||||||
|
}
|
||||||
float value;
|
float value;
|
||||||
uint32_t floatData = ((uint32_t)data[offset + 0] << 24) +
|
uint32_t floatData = ((uint32_t)data.at(offset + 0) << 24) +
|
||||||
((uint32_t)data[offset + 1] << 16) +
|
((uint32_t)data.at(offset + 1) << 16) +
|
||||||
((uint32_t)data[offset + 2] << 8) + (uint32_t)data[offset + 3];
|
((uint32_t)data.at(offset + 2) << 8) + (uint32_t)data.at(offset + 3);
|
||||||
static_assert(sizeof(uint32_t) == sizeof(float), "expected 32-bit float");
|
static_assert(sizeof(uint32_t) == sizeof(float), "expected 32-bit float");
|
||||||
std::memcpy(&value, &floatData, sizeof(value));
|
std::memcpy(&value, &floatData, sizeof(value));
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline float ToFloatBE(const std::vector<uint8_t>& data, int32_t offset)
|
static inline double ToDoubleBE(const std::vector<uint8_t>& data, size_t 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), "expected 32-bit float");
|
|
||||||
std::memcpy(&value, &floatData, sizeof(value));
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline double ToDoubleBE(const uint8_t* data, int32_t offset)
|
|
||||||
{
|
{
|
||||||
|
if (offset + 7 > data.size())
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s\n", __PRETTY_FUNCTION__);
|
||||||
|
fprintf(stderr, "Error: Trying a out-of-bounds reading from a data buffer\n");
|
||||||
|
fprintf(stderr, "\t Buffer size: 0x%zX\n", data.size());
|
||||||
|
fprintf(stderr, "\t Trying to read at offset: 0x%zX\n", offset);
|
||||||
|
}
|
||||||
double value;
|
double value;
|
||||||
uint64_t floatData =
|
uint64_t floatData =
|
||||||
((uint64_t)data[offset + 0] << 56) + ((uint64_t)data[offset + 1] << 48) +
|
((uint64_t)data.at(offset + 0) << 56) + ((uint64_t)data.at(offset + 1) << 48) +
|
||||||
((uint64_t)data[offset + 2] << 40) + ((uint64_t)data[offset + 3] << 32) +
|
((uint64_t)data.at(offset + 2) << 40) + ((uint64_t)data.at(offset + 3) << 32) +
|
||||||
((uint64_t)data[offset + 4] << 24) + ((uint64_t)data[offset + 5] << 16) +
|
((uint64_t)data.at(offset + 4) << 24) + ((uint64_t)data.at(offset + 5) << 16) +
|
||||||
((uint64_t)data[offset + 6] << 8) + ((uint64_t)data[offset + 7]);
|
((uint64_t)data.at(offset + 6) << 8) + ((uint64_t)data.at(offset + 7));
|
||||||
static_assert(sizeof(uint64_t) == sizeof(double), "expected 64-bit 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,
|
|
||||||
"expected IEC559 floats on host machine");
|
|
||||||
std::memcpy(&value, &floatData, sizeof(value));
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline double ToDoubleBE(const std::vector<uint8_t>& data, int32_t 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), "expected 64-bit double");
|
static_assert(sizeof(uint64_t) == sizeof(double), "expected 64-bit double");
|
||||||
// Checks if the float format on the platform the ZAPD binary is running on supports the
|
// Checks if the float format on the platform the ZAPD binary is running on supports the
|
||||||
// same float format as the object file.
|
// same float format as the object file.
|
||||||
|
|
|
@ -106,6 +106,13 @@ public:
|
||||||
return std::all_of(str.begin(), str.end(), ::isdigit);
|
return std::all_of(str.begin(), str.end(), ::isdigit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static std::string ToUpper(const std::string& str)
|
||||||
|
{
|
||||||
|
std::string buff = str;
|
||||||
|
std::transform(buff.begin(), buff.end(), buff.begin(), ::toupper);
|
||||||
|
return buff;
|
||||||
|
}
|
||||||
|
|
||||||
static bool IEquals(const std::string& a, const std::string& b)
|
static bool IEquals(const std::string& a, const std::string& b)
|
||||||
{
|
{
|
||||||
return std::equal(a.begin(), a.end(), b.begin(), b.end(),
|
return std::equal(a.begin(), a.end(), b.begin(), b.end(),
|
||||||
|
|
|
@ -1,168 +1,168 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" 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>16.0</VCProjectVersion>
|
<VCProjectVersion>16.0</VCProjectVersion>
|
||||||
<Keyword>Win32Proj</Keyword>
|
<Keyword>Win32Proj</Keyword>
|
||||||
<ProjectGuid>{a2e01c3e-d647-45d1-9788-043debc1a908}</ProjectGuid>
|
<ProjectGuid>{a2e01c3e-d647-45d1-9788-043debc1a908}</ProjectGuid>
|
||||||
<RootNamespace>ZAPDUtils</RootNamespace>
|
<RootNamespace>ZAPDUtils</RootNamespace>
|
||||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||||
</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>v143</PlatformToolset>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</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>v143</PlatformToolset>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
<PlatformToolset>v142</PlatformToolset>
|
<PlatformToolset>v143</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>v143</PlatformToolset>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</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|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<LinkIncremental>true</LinkIncremental>
|
<LinkIncremental>true</LinkIncremental>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<LinkIncremental>false</LinkIncremental>
|
<LinkIncremental>false</LinkIncremental>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
<LinkIncremental>true</LinkIncremental>
|
<LinkIncremental>true</LinkIncremental>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
<LinkIncremental>false</LinkIncremental>
|
<LinkIncremental>false</LinkIncremental>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<LanguageStandard_C>Default</LanguageStandard_C>
|
<LanguageStandard_C>Default</LanguageStandard_C>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="Color3b.h" />
|
<ClInclude Include="Color3b.h" />
|
||||||
<ClInclude Include="StrHash.h" />
|
<ClInclude Include="StrHash.h" />
|
||||||
<ClInclude Include="Utils\BinaryReader.h" />
|
<ClInclude Include="Utils\BinaryReader.h" />
|
||||||
<ClInclude Include="Utils\BinaryWriter.h" />
|
<ClInclude Include="Utils\BinaryWriter.h" />
|
||||||
<ClInclude Include="Utils\BitConverter.h" />
|
<ClInclude Include="Utils\BitConverter.h" />
|
||||||
<ClInclude Include="Utils\Directory.h" />
|
<ClInclude Include="Utils\Directory.h" />
|
||||||
<ClInclude Include="Utils\File.h" />
|
<ClInclude Include="Utils\File.h" />
|
||||||
<ClInclude Include="Utils\MemoryStream.h" />
|
<ClInclude Include="Utils\MemoryStream.h" />
|
||||||
<ClInclude Include="Utils\Path.h" />
|
<ClInclude Include="Utils\Path.h" />
|
||||||
<ClInclude Include="Utils\Stream.h" />
|
<ClInclude Include="Utils\Stream.h" />
|
||||||
<ClInclude Include="Utils\StringHelper.h" />
|
<ClInclude Include="Utils\StringHelper.h" />
|
||||||
<ClInclude Include="Vec2f.h" />
|
<ClInclude Include="Vec2f.h" />
|
||||||
<ClInclude Include="Vec3f.h" />
|
<ClInclude Include="Vec3f.h" />
|
||||||
<ClInclude Include="Vec3s.h" />
|
<ClInclude Include="Vec3s.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\lib\tinyxml2\tinyxml2.cpp" />
|
<ClCompile Include="..\lib\tinyxml2\tinyxml2.cpp" />
|
||||||
<ClCompile Include="Utils\BinaryReader.cpp" />
|
<ClCompile Include="Utils\BinaryReader.cpp" />
|
||||||
<ClCompile Include="Utils\BinaryWriter.cpp" />
|
<ClCompile Include="Utils\BinaryWriter.cpp" />
|
||||||
<ClCompile Include="Utils\MemoryStream.cpp" />
|
<ClCompile Include="Utils\MemoryStream.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -155,6 +155,9 @@ u64 gCraterSmokeConeTex[] = {
|
||||||
- `Width`: Required. Width in pixels of the image.
|
- `Width`: Required. Width in pixels of the image.
|
||||||
- `Height`: Required. Height in pixels of the image.
|
- `Height`: Required. Height in pixels of the image.
|
||||||
- `TlutOffset`: Optional. Specifies the tlut's offset used by this texture. This attribute is only valid if `Format` is either `ci4` or `ci8`, otherwise an exception would be thrown.
|
- `TlutOffset`: Optional. Specifies the tlut's offset used by this texture. This attribute is only valid if `Format` is either `ci4` or `ci8`, otherwise an exception would be thrown.
|
||||||
|
- `ExternalTlut`: Optional. Specifies that the texture's tlut is in a different file. Takes the filename of the file that contains the tlut.
|
||||||
|
- `ExternalTlutOffset`: Optional. Specifies the offset in the `ExternalTlut` of the tlut for the given texture.
|
||||||
|
- `SplitTlut`: Optional. Specifies that the given texture should take from the upper half of the tlut. Takes a bool, i.e. one of `true`, `false`, `1`, `0`.
|
||||||
|
|
||||||
The following is a list of the texture formats the Nintendo 64 supports, with their gfxdis names and ZAPD format names.
|
The following is a list of the texture formats the Nintendo 64 supports, with their gfxdis names and ZAPD format names.
|
||||||
|
|
||||||
|
@ -382,6 +385,13 @@ Useful only for the unused `object_human`'s animation data.
|
||||||
- `Name`: Required. Suxffixed by `Skel`.
|
- `Name`: Required. Suxffixed by `Skel`.
|
||||||
- `Type`: Required. Valid values: `Normal`, `Flex` and `Curve`.
|
- `Type`: Required. Valid values: `Normal`, `Flex` and `Curve`.
|
||||||
- `LimbType`: Required. Valid values: `Standard`, `LOD`, `Skin`, `Curve` and `Legacy`.
|
- `LimbType`: Required. Valid values: `Standard`, `LOD`, `Skin`, `Curve` and `Legacy`.
|
||||||
|
- `EnumName`: Optional. The name of `typedef`'d limb enum.
|
||||||
|
- `LimbNone`: Optional. The name of the limb with index zero in the limb enum.
|
||||||
|
- `LimbMax`: Optional. The name of the max limb index in the limb enum.
|
||||||
|
|
||||||
|
ZAPD is able to generate a limb enum by itself only if all the required data is provided. Providing some but not all the required data would trigger an error and the execution will halt.
|
||||||
|
|
||||||
|
The required data is providing the `EnumName`, `LimbNone` and `LimbMax` attributes in the `Skeleton` or `LimbTable` node and the `EnumName` attribute in every `Limb` of this skeleton.
|
||||||
|
|
||||||
※ There are no restrictions in the `Type` and `LimbType` attributes besides the valid values, so any skeleton type can be combined with any limb type.
|
※ There are no restrictions in the `Type` and `LimbType` attributes besides the valid values, so any skeleton type can be combined with any limb type.
|
||||||
|
|
||||||
|
@ -400,6 +410,11 @@ Useful only for the unused `object_human`'s animation data.
|
||||||
- `Name`: Required. Suxffixed by `Skel`.
|
- `Name`: Required. Suxffixed by `Skel`.
|
||||||
- `LimbType`: Required. Valid values: `Standard`, `LOD`, `Skin`, `Curve` and `Legacy`.
|
- `LimbType`: Required. Valid values: `Standard`, `LOD`, `Skin`, `Curve` and `Legacy`.
|
||||||
- `Count`: Required. Amount of limbs. Integer.
|
- `Count`: Required. Amount of limbs. Integer.
|
||||||
|
- `EnumName`: Optional. The name of `typedef`'d limb enum.
|
||||||
|
- `LimbNone`: Optional. The name of the limb with index zero in the limb enum.
|
||||||
|
- `LimbMax`: Optional. The name of the max limb index in the limb enum.
|
||||||
|
|
||||||
|
See [Skeleton](#skeleton) for info on the limb enum generation.
|
||||||
|
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
|
@ -415,6 +430,9 @@ Useful only for the unused `object_human`'s animation data.
|
||||||
|
|
||||||
- `Name`: Required. Suxffixed by `Limb`.
|
- `Name`: Required. Suxffixed by `Limb`.
|
||||||
- `LimbType`: Required. Valid values: `Standard`, `LOD`, `Skin`, `Curve` and `Legacy`.
|
- `LimbType`: Required. Valid values: `Standard`, `LOD`, `Skin`, `Curve` and `Legacy`.
|
||||||
|
- `EnumName`: Optional. The name used for this limb in the limbs enum. It must be either present in every limb or in none.
|
||||||
|
|
||||||
|
See [Skeleton](#skeleton) for info on the limb enum generation.
|
||||||
|
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue