Browse Source
subrepo: subdir: "ZAPDTR" merged: "a53a53ea4" upstream: origin: "https://github.com/HarbourMasters/ZAPDTR.git" branch: "master" commit: "a53a53ea4" git-subrepo: version: "0.4.1" origin: "???" commit: "???"pull/1/head

217 changed files with 47152 additions and 0 deletions
@ -0,0 +1,84 @@
@@ -0,0 +1,84 @@
|
||||
--- |
||||
AccessModifierOffset: -4 |
||||
AlignAfterOpenBracket: Align |
||||
AlignConsecutiveAssignments: false |
||||
AlignConsecutiveDeclarations: false |
||||
AlignEscapedNewlinesLeft: false |
||||
AlignOperands: true |
||||
AlignTrailingComments: true |
||||
AllowAllParametersOfDeclarationOnNextLine: true |
||||
AllowShortBlocksOnASingleLine: false |
||||
AllowShortCaseLabelsOnASingleLine: false |
||||
AllowShortFunctionsOnASingleLine: InlineOnly |
||||
AllowShortIfStatementsOnASingleLine: false |
||||
AllowShortLoopsOnASingleLine: false |
||||
AlwaysBreakAfterDefinitionReturnType: None |
||||
AlwaysBreakAfterReturnType: None |
||||
AlwaysBreakBeforeMultilineStrings: false |
||||
AlwaysBreakTemplateDeclarations: true |
||||
BinPackArguments: true |
||||
BinPackParameters: true |
||||
BraceWrapping: |
||||
AfterCaseLabel: true |
||||
AfterClass: true |
||||
AfterControlStatement: true |
||||
AfterEnum: true |
||||
AfterFunction: true |
||||
AfterNamespace: true |
||||
AfterStruct: true |
||||
AfterUnion: true |
||||
BeforeCatch: true |
||||
BeforeElse: true |
||||
IndentBraces: false |
||||
BreakBeforeBinaryOperators: None |
||||
BreakBeforeBraces: Custom |
||||
BreakBeforeTernaryOperators: false |
||||
BreakConstructorInitializersBeforeComma: false |
||||
ColumnLimit: 100 |
||||
CommentPragmas: '^ (IWYU pragma:|NOLINT)' |
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: false |
||||
ConstructorInitializerIndentWidth: 4 |
||||
ContinuationIndentWidth: 4 |
||||
Cpp11BracedListStyle: true |
||||
DerivePointerAlignment: false |
||||
DisableFormat: false |
||||
ForEachMacros: [ ] |
||||
IncludeCategories: |
||||
- Regex: '^<[Ww]indows\.h>$' |
||||
Priority: 1 |
||||
- Regex: '^<' |
||||
Priority: 2 |
||||
- Regex: '^"' |
||||
Priority: 3 |
||||
IndentCaseLabels: false |
||||
IndentWidth: 4 |
||||
IndentWrappedFunctionNames: false |
||||
KeepEmptyLinesAtTheStartOfBlocks: false |
||||
MacroBlockBegin: '' |
||||
MacroBlockEnd: '' |
||||
MaxEmptyLinesToKeep: 1 |
||||
NamespaceIndentation: None |
||||
PenaltyBreakBeforeFirstCallParameter: 19 |
||||
PenaltyBreakComment: 300 |
||||
PenaltyBreakFirstLessLess: 120 |
||||
PenaltyBreakString: 1000 |
||||
PenaltyExcessCharacter: 1000000 |
||||
PenaltyReturnTypeOnItsOwnLine: 60 |
||||
PointerAlignment: Left |
||||
ReflowComments: true |
||||
SortIncludes: true |
||||
SpaceAfterCStyleCast: false |
||||
SpaceBeforeAssignmentOperators: true |
||||
SpaceBeforeParens: ControlStatements |
||||
SpaceInEmptyParentheses: false |
||||
SpacesBeforeTrailingComments: 2 |
||||
SpacesInAngles: false |
||||
SpacesInContainerLiterals: true |
||||
SpacesInCStyleCastParentheses: false |
||||
SpacesInParentheses: false |
||||
SpacesInSquareBrackets: false |
||||
Standard: Latest |
||||
TabWidth: 4 |
||||
UseTab: AlignWithSpaces |
||||
... |
||||
|
@ -0,0 +1,341 @@
@@ -0,0 +1,341 @@
|
||||
## Ignore Visual Studio temporary files, build results, and |
||||
## files generated by popular Visual Studio add-ons. |
||||
## |
||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore |
||||
|
||||
# User-specific files |
||||
*.suo |
||||
*.user |
||||
*.userosscache |
||||
*.sln.docstates |
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio) |
||||
*.userprefs |
||||
|
||||
# Build results |
||||
[Dd]ebug/ |
||||
[Dd]ebugPublic/ |
||||
[Rr]elease/ |
||||
[Rr]eleases/ |
||||
x64/ |
||||
x86/ |
||||
bld/ |
||||
[Bb]in/ |
||||
[Oo]bj/ |
||||
[Ll]og/ |
||||
|
||||
# Visual Studio 2015/2017 cache/options directory |
||||
.vs/ |
||||
# Uncomment if you have tasks that create the project's static files in wwwroot |
||||
#wwwroot/ |
||||
|
||||
# Visual Studio 2017 auto generated files |
||||
Generated\ Files/ |
||||
|
||||
# MSTest test Results |
||||
[Tt]est[Rr]esult*/ |
||||
[Bb]uild[Ll]og.* |
||||
|
||||
# NUNIT |
||||
*.VisualState.xml |
||||
TestResult.xml |
||||
|
||||
# Build Results of an ATL Project |
||||
[Dd]ebugPS/ |
||||
[Rr]eleasePS/ |
||||
dlldata.c |
||||
|
||||
# Benchmark Results |
||||
BenchmarkDotNet.Artifacts/ |
||||
|
||||
# .NET Core |
||||
project.lock.json |
||||
project.fragment.lock.json |
||||
artifacts/ |
||||
**/Properties/launchSettings.json |
||||
|
||||
# StyleCop |
||||
StyleCopReport.xml |
||||
|
||||
# Files built by Visual Studio |
||||
*_i.c |
||||
*_p.c |
||||
*_i.h |
||||
*.ilk |
||||
*.meta |
||||
*.obj |
||||
*.iobj |
||||
*.pch |
||||
*.pdb |
||||
*.ipdb |
||||
*.pgc |
||||
*.pgd |
||||
*.rsp |
||||
*.sbr |
||||
*.tlb |
||||
*.tli |
||||
*.tlh |
||||
*.tmp |
||||
*.tmp_proj |
||||
*.log |
||||
*.vspscc |
||||
*.vssscc |
||||
.builds |
||||
*.pidb |
||||
*.svclog |
||||
*.scc |
||||
|
||||
# Chutzpah Test files |
||||
_Chutzpah* |
||||
|
||||
# Visual C++ cache files |
||||
ipch/ |
||||
*.aps |
||||
*.ncb |
||||
*.opendb |
||||
*.opensdf |
||||
*.sdf |
||||
*.cachefile |
||||
*.VC.db |
||||
*.VC.VC.opendb |
||||
|
||||
# Visual Studio profiler |
||||
*.psess |
||||
*.vsp |
||||
*.vspx |
||||
*.sap |
||||
|
||||
# Visual Studio Trace Files |
||||
*.e2e |
||||
|
||||
# TFS 2012 Local Workspace |
||||
$tf/ |
||||
|
||||
# Guidance Automation Toolkit |
||||
*.gpState |
||||
|
||||
# ReSharper is a .NET coding add-in |
||||
_ReSharper*/ |
||||
*.[Rr]e[Ss]harper |
||||
*.DotSettings.user |
||||
|
||||
# JustCode is a .NET coding add-in |
||||
.JustCode |
||||
|
||||
# TeamCity is a build add-in |
||||
_TeamCity* |
||||
|
||||
# DotCover is a Code Coverage Tool |
||||
*.dotCover |
||||
|
||||
# AxoCover is a Code Coverage Tool |
||||
.axoCover/* |
||||
!.axoCover/settings.json |
||||
|
||||
# Visual Studio code coverage results |
||||
*.coverage |
||||
*.coveragexml |
||||
|
||||
# NCrunch |
||||
_NCrunch_* |
||||
.*crunch*.local.xml |
||||
nCrunchTemp_* |
||||
|
||||
# MightyMoose |
||||
*.mm.* |
||||
AutoTest.Net/ |
||||
|
||||
# Web workbench (sass) |
||||
.sass-cache/ |
||||
|
||||
# Installshield output folder |
||||
[Ee]xpress/ |
||||
|
||||
# DocProject is a documentation generator add-in |
||||
DocProject/buildhelp/ |
||||
DocProject/Help/*.HxT |
||||
DocProject/Help/*.HxC |
||||
DocProject/Help/*.hhc |
||||
DocProject/Help/*.hhk |
||||
DocProject/Help/*.hhp |
||||
DocProject/Help/Html2 |
||||
DocProject/Help/html |
||||
|
||||
# Click-Once directory |
||||
publish/ |
||||
|
||||
# Publish Web Output |
||||
*.[Pp]ublish.xml |
||||
*.azurePubxml |
||||
# Note: Comment the next line if you want to checkin your web deploy settings, |
||||
# but database connection strings (with potential passwords) will be unencrypted |
||||
*.pubxml |
||||
*.publishproj |
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to |
||||
# checkin your Azure Web App publish settings, but sensitive information contained |
||||
# in these scripts will be unencrypted |
||||
PublishScripts/ |
||||
|
||||
# NuGet Packages |
||||
*.nupkg |
||||
# The packages folder can be ignored because of Package Restore |
||||
**/[Pp]ackages/* |
||||
# except build/, which is used as an MSBuild target. |
||||
!**/[Pp]ackages/build/ |
||||
# Uncomment if necessary however generally it will be regenerated when needed |
||||
#!**/[Pp]ackages/repositories.config |
||||
# NuGet v3's project.json files produces more ignorable files |
||||
*.nuget.props |
||||
*.nuget.targets |
||||
|
||||
# Microsoft Azure Build Output |
||||
csx/ |
||||
*.build.csdef |
||||
|
||||
# Microsoft Azure Emulator |
||||
ecf/ |
||||
rcf/ |
||||
|
||||
# Windows Store app package directories and files |
||||
AppPackages/ |
||||
BundleArtifacts/ |
||||
Package.StoreAssociation.xml |
||||
_pkginfo.txt |
||||
*.appx |
||||
|
||||
# Visual Studio cache files |
||||
# files ending in .cache can be ignored |
||||
*.[Cc]ache |
||||
# but keep track of directories ending in .cache |
||||
!*.[Cc]ache/ |
||||
|
||||
# Others |
||||
ClientBin/ |
||||
~$* |
||||
*~ |
||||
*.dbmdl |
||||
*.dbproj.schemaview |
||||
*.jfm |
||||
*.pfx |
||||
*.publishsettings |
||||
orleans.codegen.cs |
||||
|
||||
# Including strong name files can present a security risk |
||||
# (https://github.com/github/gitignore/pull/2483#issue-259490424) |
||||
#*.snk |
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components |
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) |
||||
#bower_components/ |
||||
|
||||
# RIA/Silverlight projects |
||||
Generated_Code/ |
||||
|
||||
# Backup & report files from converting an old project file |
||||
# to a newer Visual Studio version. Backup files are not needed, |
||||
# because we have git ;-) |
||||
_UpgradeReport_Files/ |
||||
Backup*/ |
||||
UpgradeLog*.XML |
||||
UpgradeLog*.htm |
||||
ServiceFabricBackup/ |
||||
*.rptproj.bak |
||||
|
||||
# SQL Server files |
||||
*.mdf |
||||
*.ldf |
||||
*.ndf |
||||
|
||||
# Business Intelligence projects |
||||
*.rdl.data |
||||
*.bim.layout |
||||
*.bim_*.settings |
||||
*.rptproj.rsuser |
||||
|
||||
# Microsoft Fakes |
||||
FakesAssemblies/ |
||||
|
||||
# GhostDoc plugin setting file |
||||
*.GhostDoc.xml |
||||
|
||||
# Node.js Tools for Visual Studio |
||||
.ntvs_analysis.dat |
||||
node_modules/ |
||||
|
||||
# Visual Studio 6 build log |
||||
*.plg |
||||
|
||||
# Visual Studio 6 workspace options file |
||||
*.opt |
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) |
||||
*.vbw |
||||
|
||||
# Visual Studio LightSwitch build output |
||||
**/*.HTMLClient/GeneratedArtifacts |
||||
**/*.DesktopClient/GeneratedArtifacts |
||||
**/*.DesktopClient/ModelManifest.xml |
||||
**/*.Server/GeneratedArtifacts |
||||
**/*.Server/ModelManifest.xml |
||||
_Pvt_Extensions |
||||
|
||||
# Paket dependency manager |
||||
.paket/paket.exe |
||||
paket-files/ |
||||
|
||||
# FAKE - F# Make |
||||
.fake/ |
||||
|
||||
# JetBrains Rider |
||||
.idea/ |
||||
*.sln.iml |
||||
|
||||
# CodeRush |
||||
.cr/ |
||||
|
||||
# Python Tools for Visual Studio (PTVS) |
||||
__pycache__/ |
||||
*.pyc |
||||
|
||||
# Cake - Uncomment if you are using it |
||||
# tools/** |
||||
# !tools/packages.config |
||||
|
||||
# Tabs Studio |
||||
*.tss |
||||
|
||||
# Telerik's JustMock configuration file |
||||
*.jmconfig |
||||
|
||||
# BizTalk build output |
||||
*.btp.cs |
||||
*.btm.cs |
||||
*.odx.cs |
||||
*.xsd.cs |
||||
|
||||
# OpenCover UI analysis results |
||||
OpenCover/ |
||||
|
||||
# Azure Stream Analytics local run output |
||||
ASALocalRun/ |
||||
|
||||
# MSBuild Binary and Structured Log |
||||
*.binlog |
||||
|
||||
# NVidia Nsight GPU debugger configuration file |
||||
*.nvuser |
||||
|
||||
# MFractors (Xamarin productivity tool) working folder |
||||
.mfractor/ |
||||
|
||||
*.out |
||||
*.o |
||||
*.d |
||||
lib/libgfxd/libgfxd.a |
||||
ExporterTest/ExporterTest.a |
||||
ZAPDUtils/ZAPDUtils.a |
||||
.vscode/ |
||||
build/ |
||||
ZAPDUtils/build/ |
||||
ZAPD/BuildInfo.h |
@ -0,0 +1,12 @@
@@ -0,0 +1,12 @@
|
||||
; DO NOT EDIT (unless you know what you are doing) |
||||
; |
||||
; This subdirectory is a git "subrepo", and this file is maintained by the |
||||
; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme |
||||
; |
||||
[subrepo] |
||||
remote = https://github.com/HarbourMasters/ZAPDTR.git |
||||
branch = master |
||||
commit = a53a53ea4216b926253dde2c942ae0ca6e2f2ccd |
||||
parent = f52a2a6406eb1bbd2b631c65923d879a83983ccb |
||||
method = rebase |
||||
cmdver = 0.4.1 |
@ -0,0 +1,74 @@
@@ -0,0 +1,74 @@
|
||||
#include "CollisionExporter.h" |
||||
|
||||
void ExporterExample_Collision::Save(ZResource* res, [[maybe_unused]] fs::path outPath, |
||||
BinaryWriter* writer) |
||||
{ |
||||
ZCollisionHeader* col = (ZCollisionHeader*)res; |
||||
|
||||
writer->Write(col->absMinX); |
||||
writer->Write(col->absMinY); |
||||
writer->Write(col->absMinZ); |
||||
|
||||
writer->Write(col->absMaxX); |
||||
writer->Write(col->absMaxY); |
||||
writer->Write(col->absMaxZ); |
||||
|
||||
writer->Write(col->numVerts); |
||||
writer->Write(col->vtxAddress); |
||||
|
||||
writer->Write(col->numPolygons); |
||||
writer->Write(col->polyAddress); |
||||
writer->Write(col->polyTypeDefAddress); |
||||
writer->Write(col->camDataAddress); |
||||
|
||||
writer->Write(col->numWaterBoxes); |
||||
writer->Write(col->waterBoxAddress); |
||||
|
||||
writer->Write(col->vtxSegmentOffset); |
||||
writer->Write(col->polySegmentOffset); |
||||
writer->Write(col->polyTypeDefSegmentOffset); |
||||
writer->Write(col->camDataSegmentOffset); |
||||
writer->Write(col->waterBoxSegmentOffset); |
||||
|
||||
uint32_t oldOffset = writer->GetBaseAddress(); |
||||
|
||||
writer->Seek(col->vtxSegmentOffset, SeekOffsetType::Start); |
||||
|
||||
for (uint16_t i = 0; i < col->vertices.size(); i++) |
||||
{ |
||||
for (uint32_t j = 0; j < col->vertices[i].dimensions; j++) |
||||
{ |
||||
writer->Write(col->vertices[i].scalars[j].scalarData.s16); |
||||
} |
||||
} |
||||
|
||||
writer->Seek(col->polySegmentOffset, SeekOffsetType::Start); |
||||
|
||||
for (uint16_t i = 0; i < col->polygons.size(); i++) |
||||
{ |
||||
writer->Write(col->polygons[i].type); |
||||
writer->Write(col->polygons[i].vtxA); |
||||
writer->Write(col->polygons[i].vtxB); |
||||
writer->Write(col->polygons[i].vtxC); |
||||
writer->Write(col->polygons[i].a); |
||||
writer->Write(col->polygons[i].b); |
||||
writer->Write(col->polygons[i].c); |
||||
writer->Write(col->polygons[i].d); |
||||
} |
||||
|
||||
writer->Seek(col->polyTypeDefSegmentOffset, SeekOffsetType::Start); |
||||
|
||||
for (uint16_t i = 0; i < col->polygonTypes.size(); i++) |
||||
writer->Write(col->polygonTypes[i]); |
||||
|
||||
writer->Seek(col->camDataSegmentOffset, SeekOffsetType::Start); |
||||
|
||||
for (auto entry : col->camData->entries) |
||||
{ |
||||
writer->Write(entry->cameraSType); |
||||
writer->Write(entry->numData); |
||||
writer->Write(entry->cameraPosDataSeg); |
||||
} |
||||
|
||||
writer->Seek(oldOffset, SeekOffsetType::Start); |
||||
} |
@ -0,0 +1,10 @@
@@ -0,0 +1,10 @@
|
||||
#pragma once |
||||
|
||||
#include "ZCollision.h" |
||||
#include "ZResource.h" |
||||
|
||||
class ExporterExample_Collision : public ZResourceExporter |
||||
{ |
||||
public: |
||||
void Save(ZResource* res, fs::path outPath, BinaryWriter* writer) override; |
||||
}; |
@ -0,0 +1,160 @@
@@ -0,0 +1,160 @@
|
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||
<ItemGroup Label="ProjectConfigurations"> |
||||
<ProjectConfiguration Include="Debug|Win32"> |
||||
<Configuration>Debug</Configuration> |
||||
<Platform>Win32</Platform> |
||||
</ProjectConfiguration> |
||||
<ProjectConfiguration Include="Release|Win32"> |
||||
<Configuration>Release</Configuration> |
||||
<Platform>Win32</Platform> |
||||
</ProjectConfiguration> |
||||
<ProjectConfiguration Include="Debug|x64"> |
||||
<Configuration>Debug</Configuration> |
||||
<Platform>x64</Platform> |
||||
</ProjectConfiguration> |
||||
<ProjectConfiguration Include="Release|x64"> |
||||
<Configuration>Release</Configuration> |
||||
<Platform>x64</Platform> |
||||
</ProjectConfiguration> |
||||
</ItemGroup> |
||||
<PropertyGroup Label="Globals"> |
||||
<VCProjectVersion>16.0</VCProjectVersion> |
||||
<Keyword>Win32Proj</Keyword> |
||||
<ProjectGuid>{65608eb0-1a47-45ad-ab66-192fb64c762c}</ProjectGuid> |
||||
<RootNamespace>ExporterTest</RootNamespace> |
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> |
||||
<ProjectName>ExporterExample</ProjectName> |
||||
</PropertyGroup> |
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> |
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> |
||||
<ConfigurationType>Application</ConfigurationType> |
||||
<UseDebugLibraries>true</UseDebugLibraries> |
||||
<PlatformToolset>v142</PlatformToolset> |
||||
<CharacterSet>Unicode</CharacterSet> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> |
||||
<ConfigurationType>Application</ConfigurationType> |
||||
<UseDebugLibraries>false</UseDebugLibraries> |
||||
<PlatformToolset>v142</PlatformToolset> |
||||
<WholeProgramOptimization>true</WholeProgramOptimization> |
||||
<CharacterSet>Unicode</CharacterSet> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> |
||||
<ConfigurationType>StaticLibrary</ConfigurationType> |
||||
<UseDebugLibraries>true</UseDebugLibraries> |
||||
<PlatformToolset>v142</PlatformToolset> |
||||
<CharacterSet>Unicode</CharacterSet> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> |
||||
<ConfigurationType>Application</ConfigurationType> |
||||
<UseDebugLibraries>false</UseDebugLibraries> |
||||
<PlatformToolset>v142</PlatformToolset> |
||||
<WholeProgramOptimization>true</WholeProgramOptimization> |
||||
<CharacterSet>Unicode</CharacterSet> |
||||
</PropertyGroup> |
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> |
||||
<ImportGroup Label="ExtensionSettings"> |
||||
</ImportGroup> |
||||
<ImportGroup Label="Shared"> |
||||
</ImportGroup> |
||||
<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" /> |
||||
</ImportGroup> |
||||
<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" /> |
||||
</ImportGroup> |
||||
<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" /> |
||||
</ImportGroup> |
||||
<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" /> |
||||
</ImportGroup> |
||||
<PropertyGroup Label="UserMacros" /> |
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
||||
<LinkIncremental>true</LinkIncremental> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
||||
<LinkIncremental>false</LinkIncremental> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
||||
<LinkIncremental>true</LinkIncremental> |
||||
<IncludePath>$(ProjectDir)..\ZAPD\;$(ProjectDir)..\ZAPDUtils;$(ProjectDir)..\lib\tinyxml2;$(ProjectDir)..\lib\libgfxd;$(ProjectDir)..\lib\elfio;$(ProjectDir)..\lib\stb;$(ProjectDir);$(IncludePath)</IncludePath> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
||||
<LinkIncremental>false</LinkIncremental> |
||||
</PropertyGroup> |
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
||||
<ClCompile> |
||||
<WarningLevel>Level3</WarningLevel> |
||||
<SDLCheck>true</SDLCheck> |
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||
<ConformanceMode>true</ConformanceMode> |
||||
</ClCompile> |
||||
<Link> |
||||
<SubSystem>Console</SubSystem> |
||||
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||
</Link> |
||||
</ItemDefinitionGroup> |
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
||||
<ClCompile> |
||||
<WarningLevel>Level3</WarningLevel> |
||||
<FunctionLevelLinking>true</FunctionLevelLinking> |
||||
<IntrinsicFunctions>true</IntrinsicFunctions> |
||||
<SDLCheck>true</SDLCheck> |
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||
<ConformanceMode>true</ConformanceMode> |
||||
</ClCompile> |
||||
<Link> |
||||
<SubSystem>Console</SubSystem> |
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding> |
||||
<OptimizeReferences>true</OptimizeReferences> |
||||
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||
</Link> |
||||
</ItemDefinitionGroup> |
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
||||
<ClCompile> |
||||
<WarningLevel>Level3</WarningLevel> |
||||
<SDLCheck>true</SDLCheck> |
||||
<PreprocessorDefinitions>_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||
<ConformanceMode>true</ConformanceMode> |
||||
<LanguageStandard>stdcpp17</LanguageStandard> |
||||
<LanguageStandard_C>stdc11</LanguageStandard_C> |
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> |
||||
</ClCompile> |
||||
<Link> |
||||
<SubSystem>Console</SubSystem> |
||||
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||
</Link> |
||||
</ItemDefinitionGroup> |
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
||||
<ClCompile> |
||||
<WarningLevel>Level3</WarningLevel> |
||||
<FunctionLevelLinking>true</FunctionLevelLinking> |
||||
<IntrinsicFunctions>true</IntrinsicFunctions> |
||||
<SDLCheck>true</SDLCheck> |
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||
<ConformanceMode>true</ConformanceMode> |
||||
</ClCompile> |
||||
<Link> |
||||
<SubSystem>Console</SubSystem> |
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding> |
||||
<OptimizeReferences>true</OptimizeReferences> |
||||
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||
</Link> |
||||
</ItemDefinitionGroup> |
||||
<ItemGroup> |
||||
<ClInclude Include="CollisionExporter.h" /> |
||||
<ClInclude Include="TextureExporter.h" /> |
||||
<ClInclude Include="RoomExporter.h" /> |
||||
</ItemGroup> |
||||
<ItemGroup> |
||||
<ClCompile Include="CollisionExporter.cpp" /> |
||||
<ClCompile Include="TextureExporter.cpp" /> |
||||
<ClCompile Include="Main.cpp" /> |
||||
<ClCompile Include="RoomExporter.cpp" /> |
||||
</ItemGroup> |
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> |
||||
<ImportGroup Label="ExtensionTargets"> |
||||
</ImportGroup> |
||||
</Project> |
@ -0,0 +1,42 @@
@@ -0,0 +1,42 @@
|
||||
๏ปฟ<?xml version="1.0" encoding="utf-8"?> |
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||
<ItemGroup> |
||||
<Filter Include="Source Files"> |
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> |
||||
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions> |
||||
</Filter> |
||||
<Filter Include="Header Files"> |
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> |
||||
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions> |
||||
</Filter> |
||||
<Filter Include="Resource Files"> |
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> |
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> |
||||
</Filter> |
||||
</ItemGroup> |
||||
<ItemGroup> |
||||
<ClInclude Include="TextureExporter.h"> |
||||
<Filter>Header Files</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="RoomExporter.h"> |
||||
<Filter>Header Files</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="CollisionExporter.h"> |
||||
<Filter>Header Files</Filter> |
||||
</ClInclude> |
||||
</ItemGroup> |
||||
<ItemGroup> |
||||
<ClCompile Include="TextureExporter.cpp"> |
||||
<Filter>Source Files</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="Main.cpp"> |
||||
<Filter>Source Files</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="RoomExporter.cpp"> |
||||
<Filter>Source Files</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="CollisionExporter.cpp"> |
||||
<Filter>Source Files</Filter> |
||||
</ClCompile> |
||||
</ItemGroup> |
||||
</Project> |
@ -0,0 +1,79 @@
@@ -0,0 +1,79 @@
|
||||
#include "CollisionExporter.h" |
||||
#include "Globals.h" |
||||
#include "RoomExporter.h" |
||||
#include "TextureExporter.h" |
||||
|
||||
enum class ExporterFileMode |
||||
{ |
||||
ModeExample1 = (int)ZFileMode::Custom + 1, |
||||
ModeExample2 = (int)ZFileMode::Custom + 2, |
||||
ModeExample3 = (int)ZFileMode::Custom + 3, |
||||
}; |
||||
|
||||
static void ExporterParseFileMode(const std::string& buildMode, ZFileMode& fileMode) |
||||
{ |
||||
if (buildMode == "me1") |
||||
fileMode = (ZFileMode)ExporterFileMode::ModeExample1; |
||||
else if (buildMode == "me2") |
||||
fileMode = (ZFileMode)ExporterFileMode::ModeExample2; |
||||
else if (buildMode == "me3") |
||||
fileMode = (ZFileMode)ExporterFileMode::ModeExample3; |
||||
} |
||||
|
||||
static void ExporterParseArgs([[maybe_unused]] int argc, char* argv[], int& i) |
||||
{ |
||||
std::string arg = argv[i]; |
||||
|
||||
if (arg == "--do-x") |
||||
{ |
||||
} |
||||
else if (arg == "--do-y") |
||||
{ |
||||
} |
||||
} |
||||
|
||||
static bool ExporterProcessFileMode(ZFileMode fileMode) |
||||
{ |
||||
// Do whatever work is associated with these custom file modes...
|
||||
// Return true to indicate one of our own file modes is being processed
|
||||
if (fileMode == (ZFileMode)ExporterFileMode::ModeExample1) |
||||
return true; |
||||
else if (fileMode == (ZFileMode)ExporterFileMode::ModeExample2) |
||||
return true; |
||||
else if (fileMode == (ZFileMode)ExporterFileMode::ModeExample3) |
||||
return true; |
||||
|
||||
return false; |
||||
} |
||||
|
||||
static void ExporterFileBegin(ZFile* file) |
||||
{ |
||||
printf("ExporterFileBegin() called on ZFile %s.\n", file->GetName().c_str()); |
||||
} |
||||
|
||||
static void ExporterFileEnd(ZFile* file) |
||||
{ |
||||
printf("ExporterFileEnd() called on ZFile %s.\n", file->GetName().c_str()); |
||||
} |
||||
|
||||
static void ImportExporters() |
||||
{ |
||||
// In this example we set up a new exporter called "EXAMPLE".
|
||||
// By running ZAPD with the argument -se EXAMPLE, we tell it that we want to use this exporter
|
||||
// for our resources.
|
||||
ExporterSet* exporterSet = new ExporterSet(); |
||||
exporterSet->processFileModeFunc = ExporterProcessFileMode; |
||||
exporterSet->parseFileModeFunc = ExporterParseFileMode; |
||||
exporterSet->parseArgsFunc = ExporterParseArgs; |
||||
exporterSet->beginFileFunc = ExporterFileBegin; |
||||
exporterSet->endFileFunc = ExporterFileEnd; |
||||
exporterSet->exporters[ZResourceType::Texture] = new ExporterExample_Texture(); |
||||
exporterSet->exporters[ZResourceType::Room] = new ExporterExample_Room(); |
||||
exporterSet->exporters[ZResourceType::CollisionHeader] = new ExporterExample_Collision(); |
||||
|
||||
Globals::AddExporter("EXAMPLE", exporterSet); |
||||
} |
||||
|
||||
// When ZAPD starts up, it will automatically call the below function, which in turn sets up our
|
||||
// exporters.
|
||||
REGISTER_EXPORTER(ImportExporters); |
@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
|
||||
# Only used for standalone compilation, usually inherits these from the main makefile
|
||||
CXXFLAGS ?= -Wall -Wextra -O2 -g -std=c++17
|
||||
|
||||
SRC_DIRS := $(shell find . -type d -not -path "*build*")
|
||||
CPP_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.cpp))
|
||||
H_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.h))
|
||||
|
||||
O_FILES := $(foreach f,$(CPP_FILES:.cpp=.o),build/$f)
|
||||
LIB := ExporterTest.a
|
||||
|
||||
# create build directories
|
||||
$(shell mkdir -p $(foreach dir,$(SRC_DIRS),build/$(dir))) |
||||
|
||||
all: $(LIB) |
||||
|
||||
clean: |
||||
rm -rf build $(LIB)
|
||||
|
||||
format: |
||||
clang-format-11 -i $(CPP_FILES) $(H_FILES)
|
||||
|
||||
.PHONY: all clean format |
||||
|
||||
build/%.o: %.cpp |
||||
$(CXX) $(CXXFLAGS) $(OPTFLAGS) -I ./ -I ../ZAPD -I ../ZAPDUtils -I ../lib/tinyxml2 -c $(OUTPUT_OPTION) $<
|
||||
|
||||
$(LIB): $(O_FILES) |
||||
$(AR) rcs $@ $^
|
@ -0,0 +1,372 @@
@@ -0,0 +1,372 @@
|
||||
#include "RoomExporter.h" |
||||
#include "CollisionExporter.h" |
||||
#include "Utils/BinaryWriter.h" |
||||
#include "Utils/File.h" |
||||
#include "Utils/MemoryStream.h" |
||||
#include "ZRoom/Commands/SetCameraSettings.h" |
||||
#include "ZRoom/Commands/SetCollisionHeader.h" |
||||
#include "ZRoom/Commands/SetCsCamera.h" |
||||
#include "ZRoom/Commands/SetEchoSettings.h" |
||||
#include "ZRoom/Commands/SetEntranceList.h" |
||||
#include "ZRoom/Commands/SetLightingSettings.h" |
||||
#include "ZRoom/Commands/SetMesh.h" |
||||
#include "ZRoom/Commands/SetRoomBehavior.h" |
||||
#include "ZRoom/Commands/SetRoomList.h" |
||||
#include "ZRoom/Commands/SetSkyboxModifier.h" |
||||
#include "ZRoom/Commands/SetSkyboxSettings.h" |
||||
#include "ZRoom/Commands/SetSoundSettings.h" |
||||
#include "ZRoom/Commands/SetSpecialObjects.h" |
||||
#include "ZRoom/Commands/SetStartPositionList.h" |
||||
#include "ZRoom/Commands/SetTimeSettings.h" |
||||
#include "ZRoom/Commands/SetWind.h" |
||||
|
||||
void ExporterExample_Room::Save(ZResource* res, fs::path outPath, BinaryWriter* writer) |
||||
{ |
||||
ZRoom* room = dynamic_cast<ZRoom*>(res); |
||||
|
||||
// MemoryStream* memStream = new MemoryStream();
|
||||
// BinaryWriter* writer = new BinaryWriter(memStream);
|
||||
|
||||
for (size_t i = 0; i < room->commands.size() * 8; i++) |
||||
writer->Write((uint8_t)0); |
||||
|
||||
for (size_t i = 0; i < room->commands.size(); i++) |
||||
{ |
||||
ZRoomCommand* cmd = room->commands[i]; |
||||
|
||||
writer->Seek(i * 8, SeekOffsetType::Start); |
||||
|
||||
writer->Write((uint8_t)cmd->cmdID); |
||||
|
||||
switch (cmd->cmdID) |
||||
{ |
||||
case RoomCommand::SetWind: |
||||
{ |
||||
SetWind* cmdSetWind = (SetWind*)cmd; |
||||
|
||||
writer->Write((uint8_t)0); // 0x01
|
||||
writer->Write((uint8_t)0); // 0x02
|
||||
writer->Write((uint8_t)0); // 0x03
|
||||
|
||||
writer->Write(cmdSetWind->windWest); // 0x04
|
||||
writer->Write(cmdSetWind->windVertical); // 0x05
|
||||
writer->Write(cmdSetWind->windSouth); // 0x06
|
||||
writer->Write(cmdSetWind->clothFlappingStrength); // 0x07
|
||||
} |
||||
break; |
||||
case RoomCommand::SetTimeSettings: |
||||
{ |
||||
SetTimeSettings* cmdTime = (SetTimeSettings*)cmd; |
||||
|
||||
writer->Write((uint8_t)0); // 0x01
|
||||
writer->Write((uint8_t)0); // 0x02
|
||||
writer->Write((uint8_t)0); // 0x03
|
||||
|
||||
writer->Write(cmdTime->hour); // 0x04
|
||||
writer->Write(cmdTime->min); // 0x05
|
||||
writer->Write(cmdTime->unk); // 0x06
|
||||
writer->Write((uint8_t)0); // 0x07
|
||||
} |
||||
break; |
||||
case RoomCommand::SetSkyboxModifier: |
||||
{ |
||||
SetSkyboxModifier* cmdSkybox = (SetSkyboxModifier*)cmd; |
||||
|
||||
writer->Write((uint8_t)0); // 0x01
|
||||
writer->Write((uint8_t)0); // 0x02
|
||||
writer->Write((uint8_t)0); // 0x03
|
||||
|
||||
writer->Write(cmdSkybox->disableSky); // 0x04
|
||||
writer->Write(cmdSkybox->disableSunMoon); // 0x05
|
||||
writer->Write((uint8_t)0); // 0x06
|
||||
writer->Write((uint8_t)0); // 0x07
|
||||
} |
||||
break; |
||||
case RoomCommand::SetEchoSettings: |
||||
{ |
||||
SetEchoSettings* cmdEcho = (SetEchoSettings*)cmd; |
||||
|
||||
writer->Write((uint8_t)0); // 0x01
|
||||
writer->Write((uint8_t)0); // 0x02
|
||||
writer->Write((uint8_t)0); // 0x03
|
||||
writer->Write((uint8_t)0); // 0x04
|
||||
writer->Write((uint8_t)0); // 0x05
|
||||
writer->Write((uint8_t)0); // 0x06
|
||||
writer->Write((uint8_t)cmdEcho->echo); // 0x07
|
||||
} |
||||
break; |
||||
case RoomCommand::SetSoundSettings: |
||||
{ |
||||
SetSoundSettings* cmdSound = (SetSoundSettings*)cmd; |
||||
|
||||
writer->Write((uint8_t)cmdSound->reverb); // 0x01
|
||||
writer->Write((uint8_t)0); // 0x02
|
||||
writer->Write((uint8_t)0); // 0x03
|
||||
writer->Write((uint8_t)0); // 0x04
|
||||
writer->Write((uint8_t)0); // 0x05
|
||||
|
||||
writer->Write(cmdSound->nightTimeSFX); // 0x06
|
||||
writer->Write(cmdSound->musicSequence); // 0x07
|
||||
} |
||||
break; |
||||
case RoomCommand::SetSkyboxSettings: |
||||
{ |
||||
SetSkyboxSettings* cmdSkybox = (SetSkyboxSettings*)cmd; |
||||
|
||||
writer->Write((uint8_t)cmdSkybox->unk1); // 0x01
|
||||
writer->Write((uint8_t)0); // 0x02
|
||||
writer->Write((uint8_t)0); // 0x03
|
||||
writer->Write((uint8_t)cmdSkybox->skyboxNumber); // 0x04
|
||||
writer->Write((uint8_t)cmdSkybox->cloudsType); // 0x05
|
||||
writer->Write((uint8_t)cmdSkybox->isIndoors); // 0x06
|
||||
} |
||||
break; |
||||
case RoomCommand::SetRoomBehavior: |
||||
{ |
||||
SetRoomBehavior* cmdRoom = (SetRoomBehavior*)cmd; |
||||
|
||||
writer->Write((uint8_t)cmdRoom->gameplayFlags); // 0x01
|
||||
writer->Write((uint8_t)0); // 0x02
|
||||
writer->Write((uint8_t)0); // 0x03
|
||||
writer->Write(cmdRoom->gameplayFlags2); // 0x04
|
||||
} |
||||
break; |
||||
case RoomCommand::SetCsCamera: |
||||
{ |
||||
SetCsCamera* cmdCsCam = (SetCsCamera*)cmd; |
||||
|
||||
writer->Write((uint8_t)cmdCsCam->cameras.size()); // 0x01
|
||||
writer->Write((uint8_t)0); // 0x02
|
||||
writer->Write((uint8_t)0); // 0x03
|
||||
|
||||
writer->Write(cmdCsCam->segmentOffset); // 0x04
|
||||
} |
||||
break; |
||||
case RoomCommand::SetMesh: |
||||
{ |
||||
SetMesh* cmdMesh = (SetMesh*)cmd; |
||||
|
||||
int baseStreamEnd = writer->GetStream().get()->GetLength(); |
||||
|
||||
writer->Write((uint8_t)cmdMesh->data); // 0x01
|
||||
writer->Write((uint8_t)0); // 0x02
|
||||
writer->Write((uint8_t)0); // 0x03
|
||||
|
||||
writer->Write(baseStreamEnd); // 0x04
|
||||
|
||||
uint32_t oldOffset = writer->GetBaseAddress(); |
||||
writer->Seek(baseStreamEnd, SeekOffsetType::Start); |
||||
|
||||
// TODO: NOT DONE
|
||||
|
||||
writer->Write(cmdMesh->meshHeaderType); |
||||
|
||||
if (cmdMesh->meshHeaderType == 0) |
||||
{ |
||||
// writer->Write(cmdMesh->)
|
||||
} |
||||
else if (cmdMesh->meshHeaderType == 1) |
||||
{ |
||||
} |
||||
else if (cmdMesh->meshHeaderType == 2) |
||||
{ |
||||
} |
||||
|
||||
writer->Seek(oldOffset, SeekOffsetType::Start); |
||||
} |
||||
break; |
||||
case RoomCommand::SetCameraSettings: |
||||
{ |
||||
SetCameraSettings* cmdCam = (SetCameraSettings*)cmd; |
||||
|
||||
writer->Write((uint8_t)cmdCam->cameraMovement); // 0x01
|
||||
writer->Write((uint8_t)0); // 0x02
|
||||
writer->Write((uint8_t)0); // 0x03
|
||||
writer->Write(cmdCam->mapHighlight); // 0x04
|
||||
} |
||||
break; |
||||
case RoomCommand::SetLightingSettings: |
||||
{ |
||||
SetLightingSettings* cmdLight = (SetLightingSettings*)cmd; |
||||
|
||||
writer->Write((uint8_t)cmdLight->settings.size()); // 0x01
|
||||
writer->Write((uint8_t)0); // 0x02
|
||||
writer->Write((uint8_t)0); // 0x03
|
||||
writer->Write(cmdLight->segmentOffset); // 0x04
|
||||
|
||||
uint32_t oldOffset = writer->GetBaseAddress(); |
||||
writer->Seek(cmdLight->segmentOffset, SeekOffsetType::Start); |
||||
|
||||
for (LightingSettings setting : cmdLight->settings) |
||||
{ |
||||
writer->Write(setting.ambientClrR); |
||||
writer->Write(setting.ambientClrG); |
||||
writer->Write(setting.ambientClrB); |
||||
|
||||
writer->Write(setting.diffuseClrA_R); |
||||
writer->Write(setting.diffuseClrA_G); |
||||
writer->Write(setting.diffuseClrA_B); |
||||
|
||||
writer->Write(setting.diffuseDirA_X); |
||||
writer->Write(setting.diffuseDirA_Y); |
||||
writer->Write(setting.diffuseDirA_Z); |
||||
|
||||
writer->Write(setting.diffuseClrB_R); |
||||
writer->Write(setting.diffuseClrB_G); |
||||
writer->Write(setting.diffuseClrB_B); |
||||
|
||||
writer->Write(setting.diffuseDirB_X); |
||||
writer->Write(setting.diffuseDirB_Y); |
||||
writer->Write(setting.diffuseDirB_Z); |
||||
|
||||
writer->Write(setting.fogClrR); |
||||
writer->Write(setting.fogClrG); |
||||
writer->Write(setting.fogClrB); |
||||
|
||||
writer->Write(setting.unk); |
||||
writer->Write(setting.drawDistance); |
||||
} |
||||
|
||||
writer->Seek(oldOffset, SeekOffsetType::Start); |
||||
} |
||||
break; |
||||
case RoomCommand::SetRoomList: |
||||
{ |
||||
SetRoomList* cmdRoom = (SetRoomList*)cmd; |
||||
|
||||
writer->Write((uint8_t)cmdRoom->romfile->rooms.size()); // 0x01
|
||||
writer->Write((uint8_t)0); // 0x02
|
||||
writer->Write((uint8_t)0); // 0x03
|
||||
|
||||
auto baseStreamEnd = writer->GetLength(); |
||||
writer->Write(baseStreamEnd); // 0x04
|
||||
|
||||
uint32_t oldOffset = writer->GetBaseAddress(); |
||||
writer->Seek(baseStreamEnd, SeekOffsetType::Start); |
||||
|
||||
for (const auto& entry : cmdRoom->romfile->rooms) |
||||
{ |
||||
writer->Write(entry.virtualAddressStart); |
||||
writer->Write(entry.virtualAddressEnd); |
||||
} |
||||
|
||||
writer->Seek(oldOffset, SeekOffsetType::Start); |
||||
} |
||||
break; |
||||
case RoomCommand::SetCollisionHeader: |
||||
{ |
||||
SetCollisionHeader* cmdCollHeader = (SetCollisionHeader*)cmd; |
||||
|
||||
int streamEnd = writer->GetStream().get()->GetLength(); |
||||
|
||||
writer->Write((uint8_t)0); // 0x01
|
||||
writer->Write((uint8_t)0); // 0x02
|
||||
writer->Write((uint8_t)0); // 0x03
|
||||
writer->Write(streamEnd); // 0x04
|
||||
|
||||
// TODO: NOT DONE
|
||||
|
||||
uint32_t oldOffset = writer->GetBaseAddress(); |
||||
writer->Seek(streamEnd, SeekOffsetType::Start); |
||||
|
||||
ExporterExample_Collision colExp = ExporterExample_Collision(); |
||||
|
||||
colExp.Save(cmdCollHeader->collisionHeader, outPath, writer); |
||||
|
||||
writer->Seek(oldOffset, SeekOffsetType::Start); |
||||
} |
||||
break; |
||||
case RoomCommand::SetEntranceList: |
||||
{ |
||||
SetEntranceList* cmdEntrance = (SetEntranceList*)cmd; |
||||
|
||||
uint32_t baseStreamEnd = writer->GetStream().get()->GetLength(); |
||||
|
||||
writer->Write((uint8_t)0); // 0x01
|
||||
writer->Write((uint8_t)0); // 0x02
|
||||
writer->Write((uint8_t)0); // 0x03
|
||||
writer->Write(baseStreamEnd); // 0x04
|
||||
|
||||
uint32_t oldOffset = writer->GetBaseAddress(); |
||||
writer->Seek(baseStreamEnd, SeekOffsetType::Start); |
||||
|
||||
for (EntranceEntry entry : cmdEntrance->entrances) |
||||
{ |
||||
writer->Write((uint8_t)entry.startPositionIndex); |
||||
writer->Write((uint8_t)entry.roomToLoad); |
||||
} |
||||
|
||||
writer->Seek(oldOffset, SeekOffsetType::Start); |
||||
} |
||||
break; |
||||
case RoomCommand::SetSpecialObjects: |
||||
{ |
||||
SetSpecialObjects* cmdSpecObj = (SetSpecialObjects*)cmd; |
||||
|
||||
writer->Write((uint8_t)cmdSpecObj->elfMessage); // 0x01
|
||||
writer->Write((uint8_t)0); // 0x02
|
||||
writer->Write((uint8_t)0); // 0x03
|
||||
writer->Write((uint8_t)0); // 0x04
|
||||
writer->Write((uint8_t)0); // 0x05
|
||||
writer->Write((uint16_t)cmdSpecObj->globalObject); // 0x06
|
||||
} |
||||
break; |
||||
case RoomCommand::SetStartPositionList: |
||||
{ |
||||
SetStartPositionList* cmdStartPos = (SetStartPositionList*)cmd; |
||||
|
||||
uint32_t baseStreamEnd = writer->GetStream().get()->GetLength(); |
||||
|
||||
writer->Write((uint8_t)cmdStartPos->actors.size()); // 0x01
|
||||
writer->Write((uint8_t)0); // 0x02
|
||||
writer->Write((uint8_t)0); // 0x03
|
||||
writer->Write(baseStreamEnd); // 0x04
|
||||
|
||||
uint32_t oldOffset = writer->GetBaseAddress(); |
||||
writer->Seek(baseStreamEnd, SeekOffsetType::Start); |
||||
|
||||
for (ActorSpawnEntry entry : cmdStartPos->actors) |
||||
{ |
||||
writer->Write(entry.actorNum); |
||||
writer->Write(entry.posX); |
||||
writer->Write(entry.posY); |
||||
writer->Write(entry.posZ); |
||||
writer->Write(entry.rotX); |
||||
writer->Write(entry.rotY); |
||||
writer->Write(entry.rotZ); |
||||
writer->Write(entry.initVar); |
||||
} |
||||
|
||||
writer->Seek(oldOffset, SeekOffsetType::Start); |
||||
} |
||||
break; |
||||
case RoomCommand::EndMarker: |
||||
{ |
||||
writer->Write((uint8_t)0); // 0x01
|
||||
writer->Write((uint8_t)0); // 0x02
|
||||
writer->Write((uint8_t)0); // 0x03
|
||||
writer->Write((uint8_t)0); // 0x04
|
||||
writer->Write((uint8_t)0); // 0x05
|
||||
writer->Write((uint8_t)0); // 0x06
|
||||
writer->Write((uint8_t)0); // 0x07
|
||||
} |
||||
break; |
||||
default: |
||||
printf("UNIMPLEMENTED COMMAND: %i\n", (int)cmd->cmdID); |
||||
|
||||
writer->Write((uint8_t)0); // 0x01
|
||||
writer->Write((uint8_t)0); // 0x02
|
||||
writer->Write((uint8_t)0); // 0x03
|
||||
writer->Write((uint8_t)0); // 0x04
|
||||
writer->Write((uint8_t)0); // 0x05
|
||||
writer->Write((uint8_t)0); // 0x06
|
||||
writer->Write((uint8_t)0); // 0x07
|
||||
|
||||
break; |
||||
} |
||||
} |
||||
|
||||
// writer->Close();
|
||||
// File::WriteAllBytes(StringHelper::Sprintf("%s", res->GetName().c_str()),
|
||||
// memStream->ToVector());
|
||||
} |
@ -0,0 +1,10 @@
@@ -0,0 +1,10 @@
|
||||
#pragma once |
||||
|
||||
#include "ZResource.h" |
||||
#include "ZRoom/ZRoom.h" |
||||
|
||||
class ExporterExample_Room : public ZResourceExporter |
||||
{ |
||||
public: |
||||
void Save(ZResource* res, fs::path outPath, BinaryWriter* writer) override; |
||||
}; |
@ -0,0 +1,14 @@
@@ -0,0 +1,14 @@
|
||||
#include "TextureExporter.h" |
||||
#include "../ZAPD/ZFile.h" |
||||
|
||||
void ExporterExample_Texture::Save(ZResource* res, [[maybe_unused]] fs::path outPath, |
||||
BinaryWriter* writer) |
||||
{ |
||||
ZTexture* tex = (ZTexture*)res; |
||||
|
||||
auto data = tex->parent->GetRawData(); |
||||
|
||||
for (offset_t i = tex->GetRawDataIndex(); i < tex->GetRawDataIndex() + tex->GetRawDataSize(); |
||||
i++) |
||||
writer->Write(data[i]); |
||||
} |
@ -0,0 +1,11 @@
@@ -0,0 +1,11 @@
|
||||
#pragma once |
||||
|
||||
#include "Utils/BinaryWriter.h" |
||||
#include "ZResource.h" |
||||
#include "ZTexture.h" |
||||
|
||||
class ExporterExample_Texture : public ZResourceExporter |
||||
{ |
||||
public: |
||||
void Save(ZResource* res, fs::path outPath, BinaryWriter* writer) override; |
||||
}; |
@ -0,0 +1,97 @@
@@ -0,0 +1,97 @@
|
||||
pipeline { |
||||
agent { |
||||
label 'ZAPD' |
||||
} |
||||
|
||||
stages { |
||||
// Non-parallel ZAPD stage |
||||
stage('Build ZAPD') { |
||||
steps { |
||||
sh 'make -j WERROR=1' |
||||
} |
||||
} |
||||
|
||||
// CHECKOUT THE REPOS |
||||
stage('Checkout Repos') { |
||||
parallel { |
||||
stage('Checkout oot') { |
||||
steps { |
||||
dir('oot') { |
||||
git url: 'https://github.com/zeldaret/oot.git' |
||||
} |
||||
} |
||||
} |
||||
|
||||
stage('Checkout mm') { |
||||
steps{ |
||||
dir('mm') { |
||||
git url: 'https://github.com/zeldaret/mm.git' |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
// SETUP THE REPOS |
||||
stage('Set up repos') { |
||||
parallel { |
||||
stage('Setup OOT') { |
||||
steps { |
||||
dir('oot') { |
||||
sh 'cp /usr/local/etc/roms/baserom_oot.z64 baserom_original.z64' |
||||
|
||||
// Identical to `make setup` except for copying our newer ZAPD.out into oot |
||||
sh 'git submodule update --init --recursive' |
||||
sh 'make -C tools' |
||||
sh 'cp ../ZAPD.out tools/ZAPD/' |
||||
sh 'python3 fixbaserom.py' |
||||
sh 'python3 extract_baserom.py' |
||||
sh 'python3 extract_assets.py' |
||||
} |
||||
} |
||||
} |
||||
|
||||
stage('Setup MM') { |
||||
steps { |
||||
dir('mm') { |
||||
sh 'cp /usr/local/etc/roms/mm.us.rev1.z64 baserom.mm.us.rev1.z64' |
||||
|
||||
// Identical to `make setup` except for copying our newer ZAPD.out into mm |
||||
sh 'make -C tools' |
||||
sh 'cp ../ZAPD.out tools/ZAPD/' |
||||
sh 'python3 tools/fixbaserom.py' |
||||
sh 'python3 tools/extract_baserom.py' |
||||
sh 'python3 extract_assets.py -t$(nproc)' |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
// BUILD THE REPOS |
||||
stage('Build repos') { |
||||
parallel { |
||||
stage('Build oot') { |
||||
steps { |
||||
dir('oot') { |
||||
sh 'make -j' |
||||
} |
||||
} |
||||
} |
||||
stage('Build mm') { |
||||
steps { |
||||
dir('mm') { |
||||
sh 'make -j disasm' |
||||
sh 'make -j all' |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
post { |
||||
always { |
||||
cleanWs() |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
|
||||
MIT License |
||||
|
||||
Copyright (c) 2020 Zelda Reverse Engineering Team |
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
of this software and associated documentation files (the "Software"), to deal |
||||
in the Software without restriction, including without limitation the rights |
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
copies of the Software, and to permit persons to whom the Software is |
||||
furnished to do so, subject to the following conditions: |
||||
|
||||
The above copyright notice and this permission notice shall be included in all |
||||
copies or substantial portions of the Software. |
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
||||
SOFTWARE. |
@ -0,0 +1,134 @@
@@ -0,0 +1,134 @@
|
||||
# use variables in submakes
|
||||
export
|
||||
OPTIMIZATION_ON ?= 1
|
||||
ASAN ?= 0
|
||||
DEPRECATION_ON ?= 1
|
||||
DEBUG ?= 0
|
||||
COPYCHECK_ARGS ?=
|
||||
LLD ?= 0
|
||||
WERROR ?= 0
|
||||
|
||||
# Use clang++ if available, else use g++
|
||||
ifeq ($(shell command -v clang++ >/dev/null 2>&1; echo $$?),0) |
||||
CXX := clang++
|
||||
else |
||||
CXX := g++
|
||||
endif |
||||
|
||||
INC := -I ZAPD -I lib/elfio -I lib/libgfxd -I lib/tinyxml2 -I ZAPDUtils
|
||||
CXXFLAGS := -fpic -std=c++17 -Wall -Wextra -fno-omit-frame-pointer
|
||||
OPTFLAGS :=
|
||||
|
||||
ifneq ($(DEBUG),0) |
||||
OPTIMIZATION_ON = 0
|
||||
CXXFLAGS += -g3 -DDEVELOPMENT -D_DEBUG
|
||||
COPYCHECK_ARGS += --devel
|
||||
DEPRECATION_ON = 0
|
||||
endif |
||||
|
||||
ifneq ($(WERROR),0) |
||||
CXXFLAGS += -Werror
|
||||
endif |
||||
|
||||
ifeq ($(OPTIMIZATION_ON),0) |
||||
OPTFLAGS := -O0
|
||||
else |
||||
OPTFLAGS := -O2
|
||||
endif |
||||
|
||||
ifneq ($(ASAN),0) |
||||
CXXFLAGS += -fsanitize=address -fsanitize=pointer-compare -fsanitize=pointer-subtract -fsanitize=undefined
|
||||
endif |
||||
ifneq ($(DEPRECATION_ON),0) |
||||
CXXFLAGS += -DDEPRECATION_ON
|
||||
endif |
||||
# CXXFLAGS += -DTEXTURE_DEBUG
|
||||
|
||||
LDFLAGS := -lm -ldl -lpng
|
||||
|
||||
# Use LLD if available. Set LLD=0 to not use it
|
||||
ifeq ($(shell command -v ld.lld >/dev/null 2>&1; echo $$?),0) |
||||
LLD := 1
|
||||
endif |
||||
|
||||
ifneq ($(LLD),0) |
||||
LDFLAGS += -fuse-ld=lld
|
||||
endif |
||||
|
||||
UNAME := $(shell uname)
|
||||