git subrepo clone https://github.com/HarbourMasters/OTRExporter.git
subrepo: subdir: "OTRExporter" merged: "1503d3eef" upstream: origin: "https://github.com/HarbourMasters/OTRExporter.git" branch: "master" commit: "1503d3eef" git-subrepo: version: "0.4.1" origin: "???" commit: "???"
350
OTRExporter/.gitignore
vendored
Normal file
@ -0,0 +1,350 @@
|
||||
## 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
|
||||
baserom/
|
||||
*.vtx.inc
|
||||
*.otr
|
||||
*.swp
|
||||
*.a
|
||||
Extract/
|
||||
|
||||
tmp.txt
|
12
OTRExporter/.gitrepo
Normal file
@ -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/OTRExporter.git
|
||||
branch = master
|
||||
commit = 1503d3eefa0b51164371c60c2aae8ad057678319
|
||||
parent = d24c8453db1035f382e1b0853be00ebd281bbbdd
|
||||
method = rebase
|
||||
cmdver = 0.4.1
|
472
OTRExporter/CFG/ActorList_OoTMqDbg.txt
Normal file
@ -0,0 +1,472 @@
|
||||
ACTOR_PLAYER
|
||||
ACTOR_UNSET_1
|
||||
ACTOR_EN_TEST
|
||||
ACTOR_UNSET_3
|
||||
ACTOR_EN_GIRLA
|
||||
ACTOR_UNSET_5
|
||||
ACTOR_UNSET_6
|
||||
ACTOR_EN_PART
|
||||
ACTOR_EN_LIGHT
|
||||
ACTOR_EN_DOOR
|
||||
ACTOR_EN_BOX
|
||||
ACTOR_BG_DY_YOSEIZO
|
||||
ACTOR_BG_HIDAN_FIREWALL
|
||||
ACTOR_EN_POH
|
||||
ACTOR_EN_OKUTA
|
||||
ACTOR_BG_YDAN_SP
|
||||
ACTOR_EN_BOM
|
||||
ACTOR_EN_WALLMAS
|
||||
ACTOR_EN_DODONGO
|
||||
ACTOR_EN_FIREFLY
|
||||
ACTOR_EN_HORSE
|
||||
ACTOR_EN_ITEM00
|
||||
ACTOR_EN_ARROW
|
||||
ACTOR_UNSET_17
|
||||
ACTOR_EN_ELF
|
||||
ACTOR_EN_NIW
|
||||
ACTOR_UNSET_1A
|
||||
ACTOR_EN_TITE
|
||||
ACTOR_EN_REEBA
|
||||
ACTOR_EN_PEEHAT
|
||||
ACTOR_EN_BUTTE
|
||||
ACTOR_UNSET_1F
|
||||
ACTOR_EN_INSECT
|
||||
ACTOR_EN_FISH
|
||||
ACTOR_UNSET_22
|
||||
ACTOR_EN_HOLL
|
||||
ACTOR_EN_SCENE_CHANGE
|
||||
ACTOR_EN_ZF
|
||||
ACTOR_EN_HATA
|
||||
ACTOR_BOSS_DODONGO
|
||||
ACTOR_BOSS_GOMA
|
||||
ACTOR_EN_ZL1
|
||||
ACTOR_EN_VIEWER
|
||||
ACTOR_EN_GOMA
|
||||
ACTOR_BG_PUSHBOX
|
||||
ACTOR_EN_BUBBLE
|
||||
ACTOR_DOOR_SHUTTER
|
||||
ACTOR_EN_DODOJR
|
||||
ACTOR_EN_BDFIRE
|
||||
ACTOR_UNSET_31
|
||||
ACTOR_EN_BOOM
|
||||
ACTOR_EN_TORCH2
|
||||
ACTOR_EN_BILI
|
||||
ACTOR_EN_TP
|
||||
ACTOR_UNSET_36
|
||||
ACTOR_EN_ST
|
||||
ACTOR_EN_BW
|
||||
ACTOR_EN_A_OBJ
|
||||
ACTOR_EN_EIYER
|
||||
ACTOR_EN_RIVER_SOUND
|
||||
ACTOR_EN_HORSE_NORMAL
|
||||
ACTOR_EN_OSSAN
|
||||
ACTOR_BG_TREEMOUTH
|
||||
ACTOR_BG_DODOAGO
|
||||
ACTOR_BG_HIDAN_DALM
|
||||
ACTOR_BG_HIDAN_HROCK
|
||||
ACTOR_EN_HORSE_GANON
|
||||
ACTOR_BG_HIDAN_ROCK
|
||||
ACTOR_BG_HIDAN_RSEKIZOU
|
||||
ACTOR_BG_HIDAN_SEKIZOU
|
||||
ACTOR_BG_HIDAN_SIMA
|
||||
ACTOR_BG_HIDAN_SYOKU
|
||||
ACTOR_EN_XC
|
||||
ACTOR_BG_HIDAN_CURTAIN
|
||||
ACTOR_BG_SPOT00_HANEBASI
|
||||
ACTOR_EN_MB
|
||||
ACTOR_EN_BOMBF
|
||||
ACTOR_EN_ZL2
|
||||
ACTOR_BG_HIDAN_FSLIFT
|
||||
ACTOR_EN_OE2
|
||||
ACTOR_BG_YDAN_HASI
|
||||
ACTOR_BG_YDAN_MARUTA
|
||||
ACTOR_BOSS_GANONDROF
|
||||
ACTOR_UNSET_53
|
||||
ACTOR_EN_AM
|
||||
ACTOR_EN_DEKUBABA
|
||||
ACTOR_EN_M_FIRE1
|
||||
ACTOR_EN_M_THUNDER
|
||||
ACTOR_BG_DDAN_JD
|
||||
ACTOR_BG_BREAKWALL
|
||||
ACTOR_EN_JJ
|
||||
ACTOR_EN_HORSE_ZELDA
|
||||
ACTOR_BG_DDAN_KD
|
||||
ACTOR_DOOR_WARP1
|
||||
ACTOR_OBJ_SYOKUDAI
|
||||
ACTOR_ITEM_B_HEART
|
||||
ACTOR_EN_DEKUNUTS
|
||||
ACTOR_BG_MENKURI_KAITEN
|
||||
ACTOR_BG_MENKURI_EYE
|
||||
ACTOR_EN_VALI
|
||||
ACTOR_BG_MIZU_MOVEBG
|
||||
ACTOR_BG_MIZU_WATER
|
||||
ACTOR_ARMS_HOOK
|
||||
ACTOR_EN_FHG
|
||||
ACTOR_BG_MORI_HINERI
|
||||
ACTOR_EN_BB
|
||||
ACTOR_BG_TOKI_HIKARI
|
||||
ACTOR_EN_YUKABYUN
|
||||
ACTOR_BG_TOKI_SWD
|
||||
ACTOR_EN_FHG_FIRE
|
||||
ACTOR_BG_MJIN
|
||||
ACTOR_BG_HIDAN_KOUSI
|
||||
ACTOR_DOOR_TOKI
|
||||
ACTOR_BG_HIDAN_HAMSTEP
|
||||
ACTOR_EN_BIRD
|
||||
ACTOR_UNSET_73
|
||||
ACTOR_UNSET_74
|
||||
ACTOR_UNSET_75
|
||||
ACTOR_UNSET_76
|
||||
ACTOR_EN_WOOD02
|
||||
ACTOR_UNSET_78
|
||||
ACTOR_UNSET_79
|
||||
ACTOR_UNSET_7A
|
||||
ACTOR_UNSET_7B
|
||||
ACTOR_EN_LIGHTBOX
|
||||
ACTOR_EN_PU_BOX
|
||||
ACTOR_UNSET_7E
|
||||
ACTOR_UNSET_7F
|
||||
ACTOR_EN_TRAP
|
||||
ACTOR_EN_AROW_TRAP
|
||||
ACTOR_EN_VASE
|
||||
ACTOR_UNSET_83
|
||||
ACTOR_EN_TA
|
||||
ACTOR_EN_TK
|
||||
ACTOR_BG_MORI_BIGST
|
||||
ACTOR_BG_MORI_ELEVATOR
|
||||
ACTOR_BG_MORI_KAITENKABE
|
||||
ACTOR_BG_MORI_RAKKATENJO
|
||||
ACTOR_EN_VM
|
||||
ACTOR_DEMO_EFFECT
|
||||
ACTOR_DEMO_KANKYO
|
||||
ACTOR_BG_HIDAN_FWBIG
|
||||
ACTOR_EN_FLOORMAS
|
||||
ACTOR_EN_HEISHI1
|
||||
ACTOR_EN_RD
|
||||
ACTOR_EN_PO_SISTERS
|
||||
ACTOR_BG_HEAVY_BLOCK
|
||||
ACTOR_BG_PO_EVENT
|
||||
ACTOR_OBJ_MURE
|
||||
ACTOR_EN_SW
|
||||
ACTOR_BOSS_FD
|
||||
ACTOR_OBJECT_KANKYO
|
||||
ACTOR_EN_DU
|
||||
ACTOR_EN_FD
|
||||
ACTOR_EN_HORSE_LINK_CHILD
|
||||
ACTOR_DOOR_ANA
|
||||
ACTOR_BG_SPOT02_OBJECTS
|
||||
ACTOR_BG_HAKA
|
||||
ACTOR_MAGIC_WIND
|
||||
ACTOR_MAGIC_FIRE
|
||||
ACTOR_UNSET_A0
|
||||
ACTOR_EN_RU1
|
||||
ACTOR_BOSS_FD2
|
||||
ACTOR_EN_FD_FIRE
|
||||
ACTOR_EN_DH
|
||||
ACTOR_EN_DHA
|
||||
ACTOR_EN_RL
|
||||
ACTOR_EN_ENCOUNT1
|
||||
ACTOR_DEMO_DU
|
||||
ACTOR_DEMO_IM
|
||||
ACTOR_DEMO_TRE_LGT
|
||||
ACTOR_EN_FW
|
||||
ACTOR_BG_VB_SIMA
|
||||
ACTOR_EN_VB_BALL
|
||||
ACTOR_BG_HAKA_MEGANE
|
||||
ACTOR_BG_HAKA_MEGANEBG
|
||||
ACTOR_BG_HAKA_SHIP
|
||||
ACTOR_BG_HAKA_SGAMI
|
||||
ACTOR_UNSET_B2
|
||||
ACTOR_EN_HEISHI2
|
||||
ACTOR_EN_ENCOUNT2
|
||||
ACTOR_EN_FIRE_ROCK
|
||||
ACTOR_EN_BROB
|
||||
ACTOR_MIR_RAY
|
||||
ACTOR_BG_SPOT09_OBJ
|
||||
ACTOR_BG_SPOT18_OBJ
|
||||
ACTOR_BOSS_VA
|
||||
ACTOR_BG_HAKA_TUBO
|
||||
ACTOR_BG_HAKA_TRAP
|
||||
ACTOR_BG_HAKA_HUTA
|
||||
ACTOR_BG_HAKA_ZOU
|
||||
ACTOR_BG_SPOT17_FUNEN
|
||||
ACTOR_EN_SYATEKI_ITM
|
||||
ACTOR_EN_SYATEKI_MAN
|
||||
ACTOR_EN_TANA
|
||||
ACTOR_EN_NB
|
||||
ACTOR_BOSS_MO
|
||||
ACTOR_EN_SB
|
||||
ACTOR_EN_BIGOKUTA
|
||||
ACTOR_EN_KAREBABA
|
||||
ACTOR_BG_BDAN_OBJECTS
|
||||
ACTOR_DEMO_SA
|
||||
ACTOR_DEMO_GO
|
||||
ACTOR_EN_IN
|
||||
ACTOR_EN_TR
|
||||
ACTOR_BG_SPOT16_BOMBSTONE
|
||||
ACTOR_UNSET_CE
|
||||
ACTOR_BG_HIDAN_KOWARERUKABE
|
||||
ACTOR_BG_BOMBWALL
|
||||
ACTOR_BG_SPOT08_ICEBLOCK
|
||||
ACTOR_EN_RU2
|
||||
ACTOR_OBJ_DEKUJR
|
||||
ACTOR_BG_MIZU_UZU
|
||||
ACTOR_BG_SPOT06_OBJECTS
|
||||
ACTOR_BG_ICE_OBJECTS
|
||||
ACTOR_BG_HAKA_WATER
|
||||
ACTOR_UNSET_D8
|
||||
ACTOR_EN_MA2
|
||||
ACTOR_EN_BOM_CHU
|
||||
ACTOR_EN_HORSE_GAME_CHECK
|
||||
ACTOR_BOSS_TW
|
||||
ACTOR_EN_RR
|
||||
ACTOR_EN_BA
|
||||
ACTOR_EN_BX
|
||||
ACTOR_EN_ANUBICE
|
||||
ACTOR_EN_ANUBICE_FIRE
|
||||
ACTOR_BG_MORI_HASHIGO
|
||||
ACTOR_BG_MORI_HASHIRA4
|
||||
ACTOR_BG_MORI_IDOMIZU
|
||||
ACTOR_BG_SPOT16_DOUGHNUT
|
||||
ACTOR_BG_BDAN_SWITCH
|
||||
ACTOR_EN_MA1
|
||||
ACTOR_BOSS_GANON
|
||||
ACTOR_BOSS_SST
|
||||
ACTOR_UNSET_EA
|
||||
ACTOR_UNSET_EB
|
||||
ACTOR_EN_NY
|
||||
ACTOR_EN_FR
|
||||
ACTOR_ITEM_SHIELD
|
||||
ACTOR_BG_ICE_SHELTER
|
||||
ACTOR_EN_ICE_HONO
|
||||
ACTOR_ITEM_OCARINA
|
||||
ACTOR_UNSET_F2
|
||||
ACTOR_UNSET_F3
|
||||
ACTOR_MAGIC_DARK
|
||||
ACTOR_DEMO_6K
|
||||
ACTOR_EN_ANUBICE_TAG
|
||||
ACTOR_BG_HAKA_GATE
|
||||
ACTOR_BG_SPOT15_SAKU
|
||||
ACTOR_BG_JYA_GOROIWA
|
||||
ACTOR_BG_JYA_ZURERUKABE
|
||||
ACTOR_UNSET_FB
|
||||
ACTOR_BG_JYA_COBRA
|
||||
ACTOR_BG_JYA_KANAAMI
|
||||
ACTOR_FISHING
|
||||
ACTOR_OBJ_OSHIHIKI
|
||||
ACTOR_BG_GATE_SHUTTER
|
||||
ACTOR_EFF_DUST
|
||||
ACTOR_BG_SPOT01_FUSYA
|
||||
ACTOR_BG_SPOT01_IDOHASHIRA
|
||||
ACTOR_BG_SPOT01_IDOMIZU
|
||||
ACTOR_BG_PO_SYOKUDAI
|
||||
ACTOR_BG_GANON_OTYUKA
|
||||
ACTOR_BG_SPOT15_RRBOX
|
||||
ACTOR_BG_UMAJUMP
|
||||
ACTOR_UNSET_109
|
||||
ACTOR_ARROW_FIRE
|
||||
ACTOR_ARROW_ICE
|
||||
ACTOR_ARROW_LIGHT
|
||||
ACTOR_UNSET_10D
|
||||
ACTOR_UNSET_10E
|
||||
ACTOR_ITEM_ETCETERA
|
||||
ACTOR_OBJ_KIBAKO
|
||||
ACTOR_OBJ_TSUBO
|
||||
ACTOR_EN_WONDER_ITEM
|
||||
ACTOR_EN_IK
|
||||
ACTOR_DEMO_IK
|
||||
ACTOR_EN_SKJ
|
||||
ACTOR_EN_SKJNEEDLE
|
||||
ACTOR_EN_G_SWITCH
|
||||
ACTOR_DEMO_EXT
|
||||
ACTOR_DEMO_SHD
|
||||
ACTOR_EN_DNS
|
||||
ACTOR_ELF_MSG
|
||||
ACTOR_EN_HONOTRAP
|
||||
ACTOR_EN_TUBO_TRAP
|
||||
ACTOR_OBJ_ICE_POLY
|
||||
ACTOR_BG_SPOT03_TAKI
|
||||
ACTOR_BG_SPOT07_TAKI
|
||||
ACTOR_EN_FZ
|
||||
ACTOR_EN_PO_RELAY
|
||||
ACTOR_BG_RELAY_OBJECTS
|
||||
ACTOR_EN_DIVING_GAME
|
||||
ACTOR_EN_KUSA
|
||||
ACTOR_OBJ_BEAN
|
||||
ACTOR_OBJ_BOMBIWA
|
||||
ACTOR_UNSET_128
|
||||
ACTOR_UNSET_129
|
||||
ACTOR_OBJ_SWITCH
|
||||
ACTOR_OBJ_ELEVATOR
|
||||
ACTOR_OBJ_LIFT
|
||||
ACTOR_OBJ_HSBLOCK
|
||||
ACTOR_EN_OKARINA_TAG
|
||||
ACTOR_EN_YABUSAME_MARK
|
||||
ACTOR_EN_GOROIWA
|
||||
ACTOR_EN_EX_RUPPY
|
||||
ACTOR_EN_TORYO
|
||||
ACTOR_EN_DAIKU
|
||||
ACTOR_UNSET_134
|
||||
ACTOR_EN_NWC
|
||||
ACTOR_EN_BLKOBJ
|
||||
ACTOR_ITEM_INBOX
|
||||
ACTOR_EN_GE1
|
||||
ACTOR_OBJ_BLOCKSTOP
|
||||
ACTOR_EN_SDA
|
||||
ACTOR_EN_CLEAR_TAG
|
||||
ACTOR_EN_NIW_LADY
|
||||
ACTOR_EN_GM
|
||||
ACTOR_EN_MS
|
||||
ACTOR_EN_HS
|
||||
ACTOR_BG_INGATE
|
||||
ACTOR_EN_KANBAN
|
||||
ACTOR_EN_HEISHI3
|
||||
ACTOR_EN_SYATEKI_NIW
|
||||
ACTOR_EN_ATTACK_NIW
|
||||
ACTOR_BG_SPOT01_IDOSOKO
|
||||
ACTOR_EN_SA
|
||||
ACTOR_EN_WONDER_TALK
|
||||
ACTOR_BG_GJYO_BRIDGE
|
||||
ACTOR_EN_DS
|
||||
ACTOR_EN_MK
|
||||
ACTOR_EN_BOM_BOWL_MAN
|
||||
ACTOR_EN_BOM_BOWL_PIT
|
||||
ACTOR_EN_OWL
|
||||
ACTOR_EN_ISHI
|
||||
ACTOR_OBJ_HANA
|
||||
ACTOR_OBJ_LIGHTSWITCH
|
||||
ACTOR_OBJ_MURE2
|
||||
ACTOR_EN_GO
|
||||
ACTOR_EN_FU
|
||||
ACTOR_UNSET_154
|
||||
ACTOR_EN_CHANGER
|
||||
ACTOR_BG_JYA_MEGAMI
|
||||
ACTOR_BG_JYA_LIFT
|
||||
ACTOR_BG_JYA_BIGMIRROR
|
||||
ACTOR_BG_JYA_BOMBCHUIWA
|
||||
ACTOR_BG_JYA_AMISHUTTER
|
||||
ACTOR_BG_JYA_BOMBIWA
|
||||
ACTOR_BG_SPOT18_BASKET
|
||||
ACTOR_UNSET_15D
|
||||
ACTOR_EN_GANON_ORGAN
|
||||
ACTOR_EN_SIOFUKI
|
||||
ACTOR_EN_STREAM
|
||||
ACTOR_UNSET_161
|
||||
ACTOR_EN_MM
|
||||
ACTOR_EN_KO
|
||||
ACTOR_EN_KZ
|
||||
ACTOR_EN_WEATHER_TAG
|
||||
ACTOR_BG_SST_FLOOR
|
||||
ACTOR_EN_ANI
|
||||
ACTOR_EN_EX_ITEM
|
||||
ACTOR_BG_JYA_IRONOBJ
|
||||
ACTOR_EN_JS
|
||||
ACTOR_EN_JSJUTAN
|
||||
ACTOR_EN_CS
|
||||
ACTOR_EN_MD
|
||||
ACTOR_EN_HY
|
||||
ACTOR_EN_GANON_MANT
|
||||
ACTOR_EN_OKARINA_EFFECT
|
||||
ACTOR_EN_MAG
|
||||
ACTOR_DOOR_GERUDO
|
||||
ACTOR_ELF_MSG2
|
||||
ACTOR_DEMO_GT
|
||||
ACTOR_EN_PO_FIELD
|
||||
ACTOR_EFC_ERUPC
|
||||
ACTOR_BG_ZG
|
||||
ACTOR_EN_HEISHI4
|
||||
ACTOR_EN_ZL3
|
||||
ACTOR_BOSS_GANON2
|
||||
ACTOR_EN_KAKASI
|
||||
ACTOR_EN_TAKARA_MAN
|
||||
ACTOR_OBJ_MAKEOSHIHIKI
|
||||
ACTOR_OCEFF_SPOT
|
||||
ACTOR_END_TITLE
|
||||
ACTOR_UNSET_180
|
||||
ACTOR_EN_TORCH
|
||||
ACTOR_DEMO_EC
|
||||
ACTOR_SHOT_SUN
|
||||
ACTOR_EN_DY_EXTRA
|
||||
ACTOR_EN_WONDER_TALK2
|
||||
ACTOR_EN_GE2
|
||||
ACTOR_OBJ_ROOMTIMER
|
||||
ACTOR_EN_SSH
|
||||
ACTOR_EN_STH
|
||||
ACTOR_OCEFF_WIPE
|
||||
ACTOR_OCEFF_STORM
|
||||
ACTOR_EN_WEIYER
|
||||
ACTOR_BG_SPOT05_SOKO
|
||||
ACTOR_BG_JYA_1FLIFT
|
||||
ACTOR_BG_JYA_HAHENIRON
|
||||
ACTOR_BG_SPOT12_GATE
|
||||
ACTOR_BG_SPOT12_SAKU
|
||||
ACTOR_EN_HINTNUTS
|
||||
ACTOR_EN_NUTSBALL
|
||||
ACTOR_BG_SPOT00_BREAK
|
||||
ACTOR_EN_SHOPNUTS
|
||||
ACTOR_EN_IT
|
||||
ACTOR_EN_GELDB
|
||||
ACTOR_OCEFF_WIPE2
|
||||
ACTOR_OCEFF_WIPE3
|
||||
ACTOR_EN_NIW_GIRL
|
||||
ACTOR_EN_DOG
|
||||
ACTOR_EN_SI
|
||||
ACTOR_BG_SPOT01_OBJECTS2
|
||||
ACTOR_OBJ_COMB
|
||||
ACTOR_BG_SPOT11_BAKUDANKABE
|
||||
ACTOR_OBJ_KIBAKO2
|
||||
ACTOR_EN_DNT_DEMO
|
||||
ACTOR_EN_DNT_JIJI
|
||||
ACTOR_EN_DNT_NOMAL
|
||||
ACTOR_EN_GUEST
|
||||
ACTOR_BG_BOM_GUARD
|
||||
ACTOR_EN_HS2
|
||||
ACTOR_DEMO_KEKKAI
|
||||
ACTOR_BG_SPOT08_BAKUDANKABE
|
||||
ACTOR_BG_SPOT17_BAKUDANKABE
|
||||
ACTOR_UNSET_1AA
|
||||
ACTOR_OBJ_MURE3
|
||||
ACTOR_EN_TG
|
||||
ACTOR_EN_MU
|
||||
ACTOR_EN_GO2
|
||||
ACTOR_EN_WF
|
||||
ACTOR_EN_SKB
|
||||
ACTOR_DEMO_GJ
|
||||
ACTOR_DEMO_GEFF
|
||||
ACTOR_BG_GND_FIREMEIRO
|
||||
ACTOR_BG_GND_DARKMEIRO
|
||||
ACTOR_BG_GND_SOULMEIRO
|
||||
ACTOR_BG_GND_NISEKABE
|
||||
ACTOR_BG_GND_ICEBLOCK
|
||||
ACTOR_EN_GB
|
||||
ACTOR_EN_GS
|
||||
ACTOR_BG_MIZU_BWALL
|
||||
ACTOR_BG_MIZU_SHUTTER
|
||||
ACTOR_EN_DAIKU_KAKARIKO
|
||||
ACTOR_BG_BOWL_WALL
|
||||
ACTOR_EN_WALL_TUBO
|
||||
ACTOR_EN_PO_DESERT
|
||||
ACTOR_EN_CROW
|
||||
ACTOR_DOOR_KILLER
|
||||
ACTOR_BG_SPOT11_OASIS
|
||||
ACTOR_BG_SPOT18_FUTA
|
||||
ACTOR_BG_SPOT18_SHUTTER
|
||||
ACTOR_EN_MA3
|
||||
ACTOR_EN_COW
|
||||
ACTOR_BG_ICE_TURARA
|
||||
ACTOR_BG_ICE_SHUTTER
|
||||
ACTOR_EN_KAKASI2
|
||||
ACTOR_EN_KAKASI3
|
||||
ACTOR_OCEFF_WIPE4
|
||||
ACTOR_EN_EG
|
||||
ACTOR_BG_MENKURI_NISEKABE
|
||||
ACTOR_EN_ZO
|
||||
ACTOR_OBJ_MAKEKINSUTA
|
||||
ACTOR_EN_GE3
|
||||
ACTOR_OBJ_TIMEBLOCK
|
||||
ACTOR_OBJ_HAMISHI
|
||||
ACTOR_EN_ZL4
|
||||
ACTOR_EN_MM2
|
||||
ACTOR_BG_JYA_BLOCK
|
||||
ACTOR_OBJ_WARP2BLOCK
|
||||
ACTOR_ID_MAX
|
8
OTRExporter/CFG/Config.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<Root>
|
||||
<SymbolMap File="SymbolMap_OoTMqDbg.txt"/>
|
||||
<ActorList File="ActorList_OoTMqDbg.txt"/>
|
||||
<ObjectList File="ObjectList_OoTMqDbg.txt"/>
|
||||
<ExternalXMLFolder Path="../soh/assets/xml/"/>
|
||||
<TexturePool File="TexturePool.xml"/>
|
||||
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
||||
</Root>
|
402
OTRExporter/CFG/ObjectList_OoTMqDbg.txt
Normal file
@ -0,0 +1,402 @@
|
||||
OBJECT_INVALID
|
||||
OBJECT_GAMEPLAY_KEEP
|
||||
OBJECT_GAMEPLAY_FIELD_KEEP
|
||||
OBJECT_GAMEPLAY_DANGEON_KEEP
|
||||
OBJECT_UNSET_4
|
||||
OBJECT_UNSET_5
|
||||
OBJECT_HUMAN
|
||||
OBJECT_OKUTA
|
||||
OBJECT_CROW
|
||||
OBJECT_POH
|
||||
OBJECT_DY_OBJ
|
||||
OBJECT_WALLMASTER
|
||||
OBJECT_DODONGO
|
||||
OBJECT_FIREFLY
|
||||
OBJECT_BOX
|
||||
OBJECT_FIRE
|
||||
OBJECT_UNSET_10
|
||||
OBJECT_UNSET_11
|
||||
OBJECT_BUBBLE
|
||||
OBJECT_NIW
|
||||
OBJECT_LINK_BOY
|
||||
OBJECT_LINK_CHILD
|
||||
OBJECT_TITE
|
||||
OBJECT_REEBA
|
||||
OBJECT_PEEHAT
|
||||
OBJECT_KINGDODONGO
|
||||
OBJECT_HORSE
|
||||
OBJECT_ZF
|
||||
OBJECT_GOMA
|
||||
OBJECT_ZL1
|
||||
OBJECT_GOL
|
||||
OBJECT_DODOJR
|
||||
OBJECT_TORCH2
|
||||
OBJECT_BL
|
||||
OBJECT_TP
|
||||
OBJECT_OA1
|
||||
OBJECT_ST
|
||||
OBJECT_BW
|
||||
OBJECT_EI
|
||||
OBJECT_HORSE_NORMAL
|
||||
OBJECT_OB1
|
||||
OBJECT_O_ANIME
|
||||
OBJECT_SPOT04_OBJECTS
|
||||
OBJECT_DDAN_OBJECTS
|
||||
OBJECT_HIDAN_OBJECTS
|
||||
OBJECT_HORSE_GANON
|
||||
OBJECT_OA2
|
||||
OBJECT_SPOT00_OBJECTS
|
||||
OBJECT_MB
|
||||
OBJECT_BOMBF
|
||||
OBJECT_SK2
|
||||
OBJECT_OE1
|
||||
OBJECT_OE_ANIME
|
||||
OBJECT_OE2
|
||||
OBJECT_YDAN_OBJECTS
|
||||
OBJECT_GND
|
||||
OBJECT_AM
|
||||
OBJECT_DEKUBABA
|
||||
OBJECT_UNSET_3A
|
||||
OBJECT_OA3
|
||||
OBJECT_OA4
|
||||
OBJECT_OA5
|
||||
OBJECT_OA6
|
||||
OBJECT_OA7
|
||||
OBJECT_JJ
|
||||
OBJECT_OA8
|
||||
OBJECT_OA9
|
||||
OBJECT_OB2
|
||||
OBJECT_OB3
|
||||
OBJECT_OB4
|
||||
OBJECT_HORSE_ZELDA
|
||||
OBJECT_OPENING_DEMO1
|
||||
OBJECT_WARP1
|
||||
OBJECT_B_HEART
|
||||
OBJECT_DEKUNUTS
|
||||
OBJECT_OE3
|
||||
OBJECT_OE4
|
||||
OBJECT_MENKURI_OBJECTS
|
||||
OBJECT_OE5
|
||||
OBJECT_OE6
|
||||
OBJECT_OE7
|
||||
OBJECT_OE8
|
||||
OBJECT_OE9
|
||||
OBJECT_OE10
|
||||
OBJECT_OE11
|
||||
OBJECT_OE12
|
||||
OBJECT_VALI
|
||||
OBJECT_OA10
|
||||
OBJECT_OA11
|
||||
OBJECT_MIZU_OBJECTS
|
||||
OBJECT_FHG
|
||||
OBJECT_OSSAN
|
||||
OBJECT_MORI_HINERI1
|
||||
OBJECT_BB
|
||||
OBJECT_TOKI_OBJECTS
|
||||
OBJECT_YUKABYUN
|
||||
OBJECT_ZL2
|
||||
OBJECT_MJIN
|
||||
OBJECT_MJIN_FLASH
|
||||
OBJECT_MJIN_DARK
|
||||
OBJECT_MJIN_FLAME
|
||||
OBJECT_MJIN_ICE
|
||||
OBJECT_MJIN_SOUL
|
||||
OBJECT_MJIN_WIND
|
||||
OBJECT_MJIN_OKA
|
||||
OBJECT_HAKA_OBJECTS
|
||||
OBJECT_SPOT06_OBJECTS
|
||||
OBJECT_ICE_OBJECTS
|
||||
OBJECT_RELAY_OBJECTS
|
||||
OBJECT_PO_FIELD
|
||||
OBJECT_PO_COMPOSER
|
||||
OBJECT_MORI_HINERI1A
|
||||
OBJECT_MORI_HINERI2
|
||||
OBJECT_MORI_HINERI2A
|
||||
OBJECT_MORI_OBJECTS
|
||||
OBJECT_MORI_TEX
|
||||
OBJECT_SPOT08_OBJ
|
||||
OBJECT_WARP2
|
||||
OBJECT_HATA
|
||||
OBJECT_BIRD
|
||||
OBJECT_UNSET_78
|
||||
OBJECT_UNSET_79
|
||||
OBJECT_UNSET_7A
|
||||
OBJECT_UNSET_7B
|
||||
OBJECT_WOOD02
|
||||
OBJECT_UNSET_7D
|
||||
OBJECT_UNSET_7E
|
||||
OBJECT_UNSET_7F
|
||||
OBJECT_UNSET_80
|
||||
OBJECT_LIGHTBOX
|
||||
OBJECT_PU_BOX
|
||||
OBJECT_UNSET_83
|
||||
OBJECT_UNSET_84
|
||||
OBJECT_TRAP
|
||||
OBJECT_VASE
|
||||
OBJECT_IM
|
||||
OBJECT_TA
|
||||
OBJECT_TK
|
||||
OBJECT_XC
|
||||
OBJECT_VM
|
||||
OBJECT_BV
|
||||
OBJECT_HAKACH_OBJECTS
|
||||
OBJECT_EFC_CRYSTAL_LIGHT
|
||||
OBJECT_EFC_FIRE_BALL
|
||||
OBJECT_EFC_FLASH
|
||||
OBJECT_EFC_LGT_SHOWER
|
||||
OBJECT_EFC_STAR_FIELD
|
||||
OBJECT_GOD_LGT
|
||||
OBJECT_LIGHT_RING
|
||||
OBJECT_TRIFORCE_SPOT
|
||||
OBJECT_BDAN_OBJECTS
|
||||
OBJECT_SD
|
||||
OBJECT_RD
|
||||
OBJECT_PO_SISTERS
|
||||
OBJECT_HEAVY_OBJECT
|
||||
OBJECT_GNDD
|
||||
OBJECT_FD
|
||||
OBJECT_DU
|
||||
OBJECT_FW
|
||||
OBJECT_MEDAL
|
||||
OBJECT_HORSE_LINK_CHILD
|
||||
OBJECT_SPOT02_OBJECTS
|
||||
OBJECT_HAKA
|
||||
OBJECT_RU1
|
||||
OBJECT_SYOKUDAI
|
||||
OBJECT_FD2
|
||||
OBJECT_DH
|
||||
OBJECT_RL
|
||||
OBJECT_EFC_TW
|
||||
OBJECT_DEMO_TRE_LGT
|
||||
OBJECT_GI_KEY
|
||||
OBJECT_MIR_RAY
|
||||
OBJECT_BROB
|
||||
OBJECT_GI_JEWEL
|
||||
OBJECT_SPOT09_OBJ
|
||||
OBJECT_SPOT18_OBJ
|
||||
OBJECT_BDOOR
|
||||
OBJECT_SPOT17_OBJ
|
||||
OBJECT_SHOP_DUNGEN
|
||||
OBJECT_NB
|
||||
OBJECT_MO
|
||||
OBJECT_SB
|
||||
OBJECT_GI_MELODY
|
||||
OBJECT_GI_HEART
|
||||
OBJECT_GI_COMPASS
|
||||
OBJECT_GI_BOSSKEY
|
||||
OBJECT_GI_MEDAL
|
||||
OBJECT_GI_NUTS
|
||||
OBJECT_SA
|
||||
OBJECT_GI_HEARTS
|
||||
OBJECT_GI_ARROWCASE
|
||||
OBJECT_GI_BOMBPOUCH
|
||||
OBJECT_IN
|
||||
OBJECT_TR
|
||||
OBJECT_SPOT16_OBJ
|
||||
OBJECT_OE1S
|
||||
OBJECT_OE4S
|
||||
OBJECT_OS_ANIME
|
||||
OBJECT_GI_BOTTLE
|
||||
OBJECT_GI_STICK
|
||||
OBJECT_GI_MAP
|
||||
OBJECT_OF1D_MAP
|
||||
OBJECT_RU2
|
||||
OBJECT_GI_SHIELD_1
|
||||
OBJECT_DEKUJR
|
||||
OBJECT_GI_MAGICPOT
|
||||
OBJECT_GI_BOMB_1
|
||||
OBJECT_OF1S
|
||||
OBJECT_MA2
|
||||
OBJECT_GI_PURSE
|
||||
OBJECT_HNI
|
||||
OBJECT_TW
|
||||
OBJECT_RR
|
||||
OBJECT_BXA
|
||||
OBJECT_ANUBICE
|
||||
OBJECT_GI_GERUDO
|
||||
OBJECT_GI_ARROW
|
||||
OBJECT_GI_BOMB_2
|
||||
OBJECT_GI_EGG
|
||||
OBJECT_GI_SCALE
|
||||
OBJECT_GI_SHIELD_2
|
||||
OBJECT_GI_HOOKSHOT
|
||||
OBJECT_GI_OCARINA
|
||||
OBJECT_GI_MILK
|
||||
OBJECT_MA1
|
||||
OBJECT_GANON
|
||||
OBJECT_SST
|
||||
OBJECT_NY_UNUSED
|
||||
OBJECT_UNSET_E4
|
||||
OBJECT_NY
|
||||
OBJECT_FR
|
||||
OBJECT_GI_PACHINKO
|
||||
OBJECT_GI_BOOMERANG
|
||||
OBJECT_GI_BOW
|
||||
OBJECT_GI_GLASSES
|
||||
OBJECT_GI_LIQUID
|
||||
OBJECT_ANI
|
||||
OBJECT_DEMO_6K
|
||||
OBJECT_GI_SHIELD_3
|
||||
OBJECT_GI_LETTER
|
||||
OBJECT_SPOT15_OBJ
|
||||
OBJECT_JYA_OBJ
|
||||
OBJECT_GI_CLOTHES
|
||||
OBJECT_GI_BEAN
|
||||
OBJECT_GI_FISH
|
||||
OBJECT_GI_SAW
|
||||
OBJECT_GI_HAMMER
|
||||
OBJECT_GI_GRASS
|
||||
OBJECT_GI_LONGSWORD
|
||||
OBJECT_SPOT01_OBJECTS
|
||||
OBJECT_MD_UNUSED
|
||||
OBJECT_MD
|
||||
OBJECT_KM1
|
||||
OBJECT_KW1
|
||||
OBJECT_ZO
|
||||
OBJECT_KZ
|
||||
OBJECT_UMAJUMP
|
||||
OBJECT_MASTERKOKIRI
|
||||
OBJECT_MASTERKOKIRIHEAD
|
||||
OBJECT_MASTERGOLON
|
||||
OBJECT_MASTERZOORA
|
||||
OBJECT_AOB
|
||||
OBJECT_IK
|
||||
OBJECT_AHG
|
||||
OBJECT_CNE
|
||||
OBJECT_GI_NIWATORI
|
||||
OBJECT_SKJ
|
||||
OBJECT_GI_BOTTLE_LETTER
|
||||
OBJECT_BJI
|
||||
OBJECT_BBA
|
||||
OBJECT_GI_OCARINA_0
|
||||
OBJECT_DS
|
||||
OBJECT_ANE
|
||||
OBJECT_BOJ
|
||||
OBJECT_SPOT03_OBJECT
|
||||
OBJECT_SPOT07_OBJECT
|
||||
OBJECT_FZ
|
||||
OBJECT_BOB
|
||||
OBJECT_GE1
|
||||
OBJECT_YABUSAME_POINT
|
||||
OBJECT_GI_BOOTS_2
|
||||
OBJECT_GI_SEED
|
||||
OBJECT_GND_MAGIC
|
||||
OBJECT_D_ELEVATOR
|
||||
OBJECT_D_HSBLOCK
|
||||
OBJECT_D_LIFT
|
||||
OBJECT_MAMENOKI
|
||||
OBJECT_GOROIWA
|
||||
OBJECT_UNSET_120
|
||||
OBJECT_TORYO
|
||||
OBJECT_DAIKU
|
||||
OBJECT_UNSET_123
|
||||
OBJECT_NWC
|
||||
OBJECT_BLKOBJ
|
||||
OBJECT_GM
|
||||
OBJECT_MS
|
||||
OBJECT_HS
|
||||
OBJECT_INGATE
|
||||
OBJECT_LIGHTSWITCH
|
||||
OBJECT_KUSA
|
||||
OBJECT_TSUBO
|
||||
OBJECT_GI_GLOVES
|
||||
OBJECT_GI_COIN
|
||||
OBJECT_KANBAN
|
||||
OBJECT_GJYO_OBJECTS
|
||||
OBJECT_OWL
|
||||
OBJECT_MK
|
||||
OBJECT_FU
|
||||
OBJECT_GI_KI_TAN_MASK
|
||||
OBJECT_GI_REDEAD_MASK
|
||||
OBJECT_GI_SKJ_MASK
|
||||
OBJECT_GI_RABIT_MASK
|
||||
OBJECT_GI_TRUTH_MASK
|
||||
OBJECT_GANON_OBJECTS
|
||||
OBJECT_SIOFUKI
|
||||
OBJECT_STREAM
|
||||
OBJECT_MM
|
||||
OBJECT_FA
|
||||
OBJECT_OS
|
||||
OBJECT_GI_EYE_LOTION
|
||||
OBJECT_GI_POWDER
|
||||
OBJECT_GI_MUSHROOM
|
||||
OBJECT_GI_TICKETSTONE
|
||||
OBJECT_GI_BROKENSWORD
|
||||
OBJECT_JS
|
||||
OBJECT_CS
|
||||
OBJECT_GI_PRESCRIPTION
|
||||
OBJECT_GI_BRACELET
|
||||
OBJECT_GI_SOLDOUT
|
||||
OBJECT_GI_FROG
|
||||
OBJECT_MAG
|
||||
OBJECT_DOOR_GERUDO
|
||||
OBJECT_GT
|
||||
OBJECT_EFC_ERUPC
|
||||
OBJECT_ZL2_ANIME1
|
||||
OBJECT_ZL2_ANIME2
|
||||
OBJECT_GI_GOLONMASK
|
||||
OBJECT_GI_ZORAMASK
|
||||
OBJECT_GI_GERUDOMASK
|
||||
OBJECT_GANON2
|
||||
OBJECT_KA
|
||||
OBJECT_TS
|
||||
OBJECT_ZG
|
||||
OBJECT_GI_HOVERBOOTS
|
||||
OBJECT_GI_M_ARROW
|
||||
OBJECT_DS2
|
||||
OBJECT_EC
|
||||
OBJECT_FISH
|
||||
OBJECT_GI_SUTARU
|
||||
OBJECT_GI_GODDESS
|
||||
OBJECT_SSH
|
||||
OBJECT_BIGOKUTA
|
||||
OBJECT_BG
|
||||
OBJECT_SPOT05_OBJECTS
|
||||
OBJECT_SPOT12_OBJ
|
||||
OBJECT_BOMBIWA
|
||||
OBJECT_HINTNUTS
|
||||
OBJECT_RS
|
||||
OBJECT_SPOT00_BREAK
|
||||
OBJECT_GLA
|
||||
OBJECT_SHOPNUTS
|
||||
OBJECT_GELDB
|
||||
OBJECT_GR
|
||||
OBJECT_DOG
|
||||
OBJECT_JYA_IRON
|
||||
OBJECT_JYA_DOOR
|
||||
OBJECT_UNSET_16E
|
||||
OBJECT_SPOT11_OBJ
|
||||
OBJECT_KIBAKO2
|
||||
OBJECT_DNS
|
||||
OBJECT_DNK
|
||||
OBJECT_GI_FIRE
|
||||
OBJECT_GI_INSECT
|
||||
OBJECT_GI_BUTTERFLY
|
||||
OBJECT_GI_GHOST
|
||||
OBJECT_GI_SOUL
|
||||
OBJECT_BOWL
|
||||
OBJECT_DEMO_KEKKAI
|
||||
OBJECT_EFC_DOUGHNUT
|
||||
OBJECT_GI_DEKUPOUCH
|
||||
OBJECT_GANON_ANIME1
|
||||
OBJECT_GANON_ANIME2
|
||||
OBJECT_GANON_ANIME3
|
||||
OBJECT_GI_RUPY
|
||||
OBJECT_SPOT01_MATOYA
|
||||
OBJECT_SPOT01_MATOYAB
|
||||
OBJECT_MU
|
||||
OBJECT_WF
|
||||
OBJECT_SKB
|
||||
OBJECT_GJ
|
||||
OBJECT_GEFF
|
||||
OBJECT_HAKA_DOOR
|
||||
OBJECT_GS
|
||||
OBJECT_PS
|
||||
OBJECT_BWALL
|
||||
OBJECT_COW
|
||||
OBJECT_COB
|
||||
OBJECT_GI_SWORD_1
|
||||
OBJECT_DOOR_KILLER
|
||||
OBJECT_OUKE_HAKA
|
||||
OBJECT_TIMEBLOCK
|
||||
OBJECT_ZL4
|
1
OTRExporter/CFG/SymbolMap_OoTMqDbg.txt
Normal file
@ -0,0 +1 @@
|
||||
8012DB20 gMtxClear
|
952
OTRExporter/CFG/TexturePool.xml
Normal file
@ -0,0 +1,952 @@
|
||||
<Root>
|
||||
<Texture CRC="FD1D7A56" Path="assets/textures/shared/boss_key_item_name_unused_jpn_1"/>
|
||||
<Texture CRC="1E03A717" Path="assets/textures/shared/object_blkobjTex_00A890"/>
|
||||
<Texture CRC="EE47DD2D" Path="assets/textures/shared/tex_000165F0"/>
|
||||
<Texture CRC="F39A58EB" Path="assets/textures/shared/object_blkobjTex_008090"/>
|
||||
<Texture CRC="05355595" Path="assets/textures/shared/object_blkobjTex_008890"/>
|
||||
<Texture CRC="E91E011C" Path="assets/textures/shared/gBotwTex_0040F0"/>
|
||||
<Texture CRC="13CD3AC9" Path="assets/textures/shared/jyasinzou_room_0Tex_00F928"/>
|
||||
<Texture CRC="E68D501C" Path="assets/textures/shared/object_blkobjTex_009090"/>
|
||||
<Texture CRC="1749503F" Path="assets/textures/shared/gBotwTex_0048F0"/>
|
||||
<Texture CRC="F3C7DB4B" Path="assets/textures/shared/gBotwTex_0060F0"/>
|
||||
<Texture CRC="E7F3B78E" Path="assets/textures/shared/jyasinzou_room_0Tex_00DD28"/>
|
||||
<Texture CRC="E692647D" Path="assets/textures/shared/fishing_aquarium_water"/>
|
||||
<Texture CRC="ED0EC6BE" Path="assets/textures/shared/tex_0001CEB0"/>
|
||||
<Texture CRC="19EFE2BC" Path="assets/textures/shared/jyasinzou_room_0Tex_00B128"/>
|
||||
<Texture CRC="037B0BDD" Path="assets/textures/shared/object_blkobjTex_00D090"/>
|
||||
<Texture CRC="F4A5CDD8" Path="assets/textures/shared/ddan_room_0Tex_01B498"/>
|
||||
<Texture CRC="FC85B741" Path="assets/textures/shared/HIDAN_room_0Tex_005EC0"/>
|
||||
<Texture CRC="07D322B0" Path="assets/textures/shared/jyasinzou_room_0Tex_00E128"/>
|
||||
<Texture CRC="0D92FCD4" Path="assets/textures/shared/jyasinzou_room_10Tex_0051A0"/>
|
||||
<Texture CRC="0921DF7B" Path="assets/textures/shared/object_blkobjTex_00B090"/>
|
||||
<Texture CRC="08DD79E3" Path="assets/textures/shared/object_blkobjTex_00B890"/>
|
||||
<Texture CRC="E5039D29" Path="assets/textures/shared/tex_000155F0"/>
|
||||
<Texture CRC="07CF0466" Path="assets/textures/shared/lift_chain"/>
|
||||
<Texture CRC="E701D6A2" Path="assets/textures/shared/ganontika_room_12Tex_007260"/>
|
||||
<Texture CRC="F9B8D065" Path="assets/textures/shared/tex_000167F0"/>
|
||||
<Texture CRC="E06BBB16" Path="assets/textures/shared/object_hidan_objectsTex_000240"/>
|
||||
<Texture CRC="E85888C7" Path="assets/textures/shared/tex_00005D50"/>
|
||||
<Texture CRC="0E2AA315" Path="assets/textures/shared/HIDAN_room_0Tex_005AC0"/>
|
||||
<Texture CRC="19148C2A" Path="assets/textures/shared/HIDAN_room_10Tex_012298"/>
|
||||
<Texture CRC="02A396D3" Path="assets/textures/shared/eff_unknown_2"/>
|
||||
<Texture CRC="0E87B7F3" Path="assets/textures/shared/object_blkobjTex_00A090"/>
|
||||
<Texture CRC="FFB7F7EB" Path="assets/textures/shared/object_demo_kekkaiTex_0089D0"/>
|
||||
<Texture CRC="E8E230E3" Path="assets/textures/shared/object_demo_kekkaiTex_00C0B0"/>
|
||||
<Texture CRC="FE9DF649" Path="assets/textures/shared/fishing_stream_splash_tile_1"/>
|
||||
<Texture CRC="1964563B" Path="assets/textures/shared/tex_00019870"/>
|
||||
<Texture CRC="085CDA77" Path="assets/textures/shared/ddan_room_0Tex_018498"/>
|
||||
<Texture CRC="EB9122B3" Path="assets/textures/shared/HIDAN_room_0Tex_0052C0"/>
|
||||
<Texture CRC="0BB1177F" Path="assets/textures/shared/jyasinboss_room_1Tex_006E38"/>
|
||||
<Texture CRC="E51AACC5" Path="assets/textures/shared/jyasinboss_room_2Tex_0029C0"/>
|
||||
<Texture CRC="1437E190" Path="assets/textures/shared/jyasinzou_room_0Tex_00A928"/>
|
||||
<Texture CRC="FD7F0F21" Path="assets/textures/shared/object_blkobjTex_012090"/>
|
||||
<Texture CRC="EAC88244" Path="assets/textures/shared/tex_000027F0"/>
|
||||
<Texture CRC="E6FA3766" Path="assets/textures/shared/gBotwTex_0030F0"/>
|
||||
<Texture CRC="E6EE37DC" Path="assets/textures/shared/object_hidan_objectsTex_005E40"/>
|
||||
<Texture CRC="06E6313A" Path="assets/textures/shared/HAKAdan_room_21Tex_008F00"/>
|
||||
<Texture CRC="F9299C24" Path="assets/textures/shared/jyasinzou_room_10Tex_007DA0"/>
|
||||
<Texture CRC="05D9B7A3" Path="assets/textures/shared/ydan_room_0Tex_009160"/>
|
||||
<Texture CRC="EA9CC59D" Path="assets/textures/shared/ydan_room_0Tex_00F160"/>
|
||||
<Texture CRC="0D81F9C2" Path="assets/textures/shared/jabu_objects_1_tlut"/>
|
||||
<Texture CRC="18FA875C" Path="assets/textures/shared/jabu_objects_tex_00000140"/>
|
||||
<Texture CRC="FF137ACD" Path="assets/textures/shared/object_blkobjTex_00C090"/>
|
||||
<Texture CRC="EC91F676" Path="assets/textures/shared/object_bvTex_019BB8"/>
|
||||
<Texture CRC="1AB2D605" Path="assets/textures/shared/object_bvTLUT_0199B0"/>
|
||||
<Texture CRC="0F30970D" Path="assets/textures/shared/web_tex"/>
|
||||
<Texture CRC="1543A457" Path="assets/textures/shared/Bmori1_room_0Tex_007CC8"/>
|
||||
<Texture CRC="FD65AC3E" Path="assets/textures/shared/ddan_room_10Tex_004E50"/>
|
||||
<Texture CRC="E38D2C3B" Path="assets/textures/shared/ddan_room_11Tex_000C80"/>
|
||||
<Texture CRC="EB2C6396" Path="assets/textures/shared/ddan_room_11Tex_001480"/>
|
||||
<Texture CRC="19B3962B" Path="assets/textures/shared/ganontika_room_10Tex_004168"/>
|
||||
<Texture CRC="F297A414" Path="assets/textures/shared/ganontika_room_12Tex_009370"/>
|
||||
<Texture CRC="E41692EE" Path="assets/textures/shared/HAKAdan_room_10Tex_0073A0"/>
|
||||
<Texture CRC="FD79012C" Path="assets/textures/shared/HIDAN_room_10Tex_011898"/>
|
||||
<Texture CRC="1766570C" Path="assets/textures/shared/HIDAN_room_10Tex_011A98"/>
|
||||
<Texture CRC="FE493504" Path="assets/textures/shared/HIDAN_room_13Tex_00C3D8"/>
|
||||
<Texture CRC="0A5A144B" Path="assets/textures/shared/HIDAN_room_16Tex_00B170"/>
|
||||
<Texture CRC="F89FB3AB" Path="assets/textures/shared/ice_doukutu_room_10Tex_003BD8"/>
|
||||
<Texture CRC="EBB7AF44" Path="assets/textures/shared/men_room_0Tex_008938"/>
|
||||
<Texture CRC="FC676B88" Path="assets/textures/shared/gBotwTex_0050F0"/>
|
||||
<Texture CRC="0B77392E" Path="assets/textures/shared/tex_0001A070"/>
|
||||
<Texture CRC="F0C936EE" Path="assets/textures/shared/hashira_gate"/>
|
||||
<Texture CRC="FB929B87" Path="assets/textures/shared/tex_00005A48"/>
|
||||
<Texture CRC="F035BB2D" Path="assets/textures/shared/Bmori1_room_0Tex_00A0C8"/>
|
||||
<Texture CRC="1A44DDC7" Path="assets/textures/shared/ganontika_room_10Tex_004968"/>
|
||||
<Texture CRC="ED895079" Path="assets/textures/shared/ganontika_room_11Tex_005150"/>
|
||||
<Texture CRC="FFE381A7" Path="assets/textures/shared/ganontika_room_12Tex_005A60"/>
|
||||
<Texture CRC="1A108172" Path="assets/textures/shared/ganontika_room_12TLUT_005240"/>
|
||||
<Texture CRC="0A14B800" Path="assets/textures/shared/HIDAN_room_10Tex_017C98"/>
|
||||
<Texture CRC="009F76D8" Path="assets/textures/shared/HIDAN_room_16Tex_00A970"/>
|
||||
<Texture CRC="E119A079" Path="assets/textures/shared/HIDAN_room_17Tex_008138"/>
|
||||
<Texture CRC="E9024823" Path="assets/textures/shared/jyasinzou_room_0Tex_00E928"/>
|
||||
<Texture CRC="E45E3120" Path="assets/textures/shared/jyasinzou_room_13Tex_003048"/>
|
||||
<Texture CRC="07C35EF3" Path="assets/textures/shared/ydan_room_0Tex_012EE8"/>
|
||||
<Texture CRC="E6985582" Path="assets/textures/shared/bowling_sceneTex_008120"/>
|
||||
<Texture CRC="0689B669" Path="assets/textures/shared/hakasitarelay_room_5Tex_003448"/>
|
||||
<Texture CRC="03039DCB" Path="assets/textures/shared/spot00_sceneTex_024818"/>
|
||||
<Texture CRC="F5581E37" Path="assets/textures/shared/spot00_sceneTLUT_013D70"/>
|
||||
<Texture CRC="1ABC3F9F" Path="assets/textures/shared/eff_unknown_3"/>
|
||||
<Texture CRC="E0C05022" Path="assets/textures/shared/object_blkobjTex_00D890"/>
|
||||
<Texture CRC="FAD9324A" Path="assets/textures/shared/cell_door"/>
|
||||
<Texture CRC="010DE1D3" Path="assets/textures/shared/tex_00016BF0"/>
|
||||
<Texture CRC="F4E00E78" Path="assets/textures/shared/tex_00016DF0"/>
|
||||
<Texture CRC="EB51725A" Path="assets/textures/shared/tex_000187F0"/>
|
||||
<Texture CRC="F2EE5FA3" Path="assets/textures/shared/kanaami_middle"/>
|
||||
<Texture CRC="1E60B593" Path="assets/textures/shared/object_spot09_objTex_00A490"/>
|
||||
<Texture CRC="070FB26E" Path="assets/textures/shared/Bmori1_room_0Tex_00B0C8"/>
|
||||
<Texture CRC="0FC10D68" Path="assets/textures/shared/Bmori1_room_0Tex_00B8C8"/>
|
||||
<Texture CRC="F904FCB9" Path="assets/textures/shared/Bmori1_room_12Tex_0065F0"/>
|
||||
<Texture CRC="09A94F23" Path="assets/textures/shared/Bmori1_room_14Tex_003530"/>
|
||||
<Texture CRC="FF246A91" Path="assets/textures/shared/FIRE_bs_room_1Tex_004BD8"/>
|
||||
<Texture CRC="0A019901" Path="assets/textures/shared/ganontika_room_10Tex_005968"/>
|
||||
<Texture CRC="076B5ABF" Path="assets/textures/shared/ganontika_room_10Tex_005B68"/>
|
||||
<Texture CRC="0EF19A0E" Path="assets/textures/shared/HIDAN_room_11Tex_0033B8"/>
|
||||
<Texture CRC="0B9F067E" Path="assets/textures/shared/HIDAN_room_17Tex_005138"/>
|
||||
<Texture CRC="E4379EFF" Path="assets/textures/shared/HIDAN_room_17Tex_005938"/>
|
||||
<Texture CRC="1450BE5B" Path="assets/textures/shared/HIDAN_room_17Tex_006938"/>
|
||||
<Texture CRC="E4C0C584" Path="assets/textures/shared/jyasinzou_room_15Tex_0043B8"/>
|
||||
<Texture CRC="F4E2E220" Path="assets/textures/shared/men_room_0Tex_00ED38"/>
|
||||
<Texture CRC="F76F5125" Path="assets/textures/shared/men_room_10Tex_004458"/>
|
||||
<Texture CRC="F3E82477" Path="assets/textures/shared/ydan_room_0Tex_00CD60"/>
|
||||
<Texture CRC="0C77CC92" Path="assets/textures/shared/ydan_room_3Tex_0094B0"/>
|
||||
<Texture CRC="E2F531E7" Path="assets/textures/shared/hakasitarelay_room_0Tex_0062B8"/>
|
||||
<Texture CRC="F7DA366C" Path="assets/textures/shared/hakasitarelay_room_1Tex_005720"/>
|
||||
<Texture CRC="11B0F260" Path="assets/textures/shared/hakasitarelay_room_4Tex_003C80"/>
|
||||
<Texture CRC="1CE49D25" Path="assets/textures/shared/eff_unknown_12"/>
|
||||
<Texture CRC="E988267C" Path="assets/textures/shared/flash"/>
|
||||
<Texture CRC="1D8E7A5B" Path="assets/textures/shared/unknown_stone_2"/>
|
||||
<Texture CRC="09556A28" Path="assets/textures/shared/door_bars"/>
|
||||
<Texture CRC="EE556A49" Path="assets/textures/shared/deku_nut"/>
|
||||
<Texture CRC="02243AF1" Path="assets/textures/shared/object_fdTex_0056A8"/>
|
||||
<Texture CRC="EE8FB60E" Path="assets/textures/shared/fishing_water_dust"/>
|
||||
<Texture CRC="07120E67" Path="assets/textures/shared/gBotwTex_0058F0"/>
|
||||
<Texture CRC="0338AD8D" Path="assets/textures/shared/object_hakach_objectsTex_0062F0"/>
|
||||
<Texture CRC="F678762F" Path="assets/textures/shared/tex_0001A470"/>
|
||||
<Texture CRC="1C5FB6BE" Path="assets/textures/shared/object_hidan_objectsTex_006E40"/>
|
||||
<Texture CRC="0695CCC0" Path="assets/textures/shared/twisted_hall_ladder"/>
|
||||
<Texture CRC="F08F4278" Path="assets/textures/shared/tex_00000170"/>
|
||||
<Texture CRC="EE5176FB" Path="assets/textures/shared/tex_00014020"/>
|
||||
<Texture CRC="10F072E0" Path="assets/textures/shared/maruta_unused_1"/>
|
||||
<Texture CRC="076BF717" Path="assets/textures/shared/Bmori1_room_0Tex_00CB58"/>
|
||||
<Texture CRC="0696FE07" Path="assets/textures/shared/Bmori1_room_10Tex_001250"/>
|
||||
<Texture CRC="107EE843" Path="assets/textures/shared/Bmori1_room_11Tex_009118"/>
|
||||
<Texture CRC="0E17A8DB" Path="assets/textures/shared/Bmori1_room_12Tex_0071F0"/>
|
||||
<Texture CRC="F5467498" Path="assets/textures/shared/Bmori1_room_13Tex_004CC0"/>
|
||||
<Texture CRC="E9EC151D" Path="assets/textures/shared/ddan_room_0Tex_011498"/>
|
||||
<Texture CRC="EF5A64C2" Path="assets/textures/shared/ddan_room_0Tex_012C98"/>
|
||||
<Texture CRC="0E597363" Path="assets/textures/shared/ddan_room_0Tex_013C98"/>
|
||||
<Texture CRC="0DDC2AEF" Path="assets/textures/shared/ddan_room_12Tex_007730"/>
|
||||
<Texture CRC="0472569F" Path="assets/textures/shared/ganontika_room_2Tex_0047D8"/>
|
||||
<Texture CRC="06FD7C7C" Path="assets/textures/shared/HIDAN_room_0Tex_005CC0"/>
|
||||
<Texture CRC="F684D94A" Path="assets/textures/shared/HIDAN_room_1Tex_0091E0"/>
|
||||
<Texture CRC="103C2271" Path="assets/textures/shared/ice_doukutu_room_0Tex_002F30"/>
|
||||
<Texture CRC="0093A3F4" Path="assets/textures/shared/ice_doukutu_room_11Tex_0031D8"/>
|
||||
<Texture CRC="16A736BD" Path="assets/textures/shared/ice_doukutu_room_1Tex_00AB40"/>
|
||||
<Texture CRC="F4561B9A" Path="assets/textures/shared/jyasinzou_room_0Tex_00D528"/>
|
||||
<Texture CRC="EAC340AD" Path="assets/textures/shared/jyasinzou_room_10Tex_0079A0"/>
|
||||
<Texture CRC="0194C678" Path="assets/textures/shared/jyasinzou_room_18Tex_0030C0"/>
|
||||
<Texture CRC="E5EA84ED" Path="assets/textures/shared/men_room_0Tex_008138"/>
|
||||
<Texture CRC="E57046CB" Path="assets/textures/shared/men_room_1Tex_007290"/>
|
||||
<Texture CRC="0EBD6689" Path="assets/textures/shared/men_room_2Tex_004B78"/>
|
||||
<Texture CRC="F60B9167" Path="assets/textures/shared/MIZUsin_room_12Tex_004128"/>
|
||||
<Texture CRC="0F56933B" Path="assets/textures/shared/MIZUsin_room_22Tex_0044E8"/>
|
||||
<Texture CRC="083D33DC" Path="assets/textures/shared/ydan_room_0Tex_009960"/>
|
||||
<Texture CRC="FC1BD5AE" Path="assets/textures/shared/ydan_room_0Tex_00A560"/>
|
||||
<Texture CRC="E01AC796" Path="assets/textures/shared/ydan_room_0Tex_010960"/>
|
||||
<Texture CRC="E1CE4C08" Path="assets/textures/shared/ydan_room_11Tex_005CD8"/>
|
||||
<Texture CRC="0D27D9E9" Path="assets/textures/shared/hairal_niwa_sceneTex_007390"/>
|
||||
<Texture CRC="E9E18C29" Path="assets/textures/shared/hairal_niwa_sceneTex_008B90"/>
|
||||
<Texture CRC="0017751E" Path="assets/textures/shared/hairal_niwa_sceneTex_00FB90"/>
|
||||
<Texture CRC="0469FC0A" Path="assets/textures/shared/hakasitarelay_room_1Tex_005F20"/>
|
||||
<Texture CRC="E0C3E40A" Path="assets/textures/shared/hylia_labo_sceneTex_009A90"/>
|
||||
<Texture CRC="E6476EA0" Path="assets/textures/shared/kakusiana_room_0Tex_0022A0"/>
|
||||
<Texture CRC="F49F6117" Path="assets/textures/shared/kakusiana_room_0Tex_0042A0"/>
|
||||
<Texture CRC="1E8999E1" Path="assets/textures/shared/kakusiana_room_10Tex_003BE0"/>
|
||||
<Texture CRC="0DC68B3C" Path="assets/textures/shared/spot00_sceneTex_01AB98"/>
|
||||
<Texture CRC="11AE73DA" Path="assets/textures/shared/spot00_sceneTex_01B398"/>
|
||||
<Texture CRC="1B5470D3" Path="assets/textures/shared/spot00_sceneTex_020018"/>
|
||||
<Texture CRC="E000AFF1" Path="assets/textures/shared/spot00_sceneTex_024018"/>
|
||||
<Texture CRC="11F90BE8" Path="assets/textures/shared/spot02_room_1Tex_011508"/>
|
||||
<Texture CRC="E001D4EB" Path="assets/textures/shared/spot04_room_0Tex_014B08"/>
|
||||
<Texture CRC="11CDA502" Path="assets/textures/shared/spot04_room_0Tex_015308"/>
|
||||
<Texture CRC="16CCF21D" Path="assets/textures/shared/gameplay_dangeon_keepTex_000200"/>
|
||||
<Texture CRC="1A276B01" Path="assets/textures/shared/eff_bubble_1"/>
|
||||
<Texture CRC="F418FB62" Path="assets/textures/shared/ocarina_of_time_design"/>
|
||||
<Texture CRC="EE75476B" Path="assets/textures/shared/unused_tree_stump_top"/>
|
||||
<Texture CRC="0E448260" Path="assets/textures/shared/object_blkobjTex_00E090"/>
|
||||
<Texture CRC="E0E2DE0B" Path="assets/textures/shared/object_demo_kekkaiTex_000800"/>
|
||||
<Texture CRC="F0896343" Path="assets/textures/shared/object_demo_kekkaiTex_002450"/>
|
||||
<Texture CRC="0B08107E" Path="assets/textures/shared/object_fdTex_00A050"/>
|
||||
<Texture CRC="0586B026" Path="assets/textures/shared/tex_00008930"/>
|
||||
<Texture CRC="09EF3B55" Path="assets/textures/shared/object_gjTex_003B20"/>
|
||||
<Texture CRC="0B070D01" Path="assets/textures/shared/object_gjTex_003D20"/>
|
||||
<Texture CRC="E8F7B7D2" Path="assets/textures/shared/tex_00016FF0"/>
|
||||
<Texture CRC="10D84CDA" Path="assets/textures/shared/tex_0001C470"/>
|
||||
<Texture CRC="09062785" Path="assets/textures/shared/gtg_6310"/>
|
||||
<Texture CRC="05BB78C0" Path="assets/textures/shared/object_pohTex_004D10"/>
|
||||
<Texture CRC="F35E1E32" Path="assets/textures/shared/object_po_composerTex_005AE0"/>
|
||||
<Texture CRC="F460A18B" Path="assets/textures/shared/tex_0000"/>
|
||||
<Texture CRC="1F3E7382" Path="assets/textures/shared/tex_0400"/>
|
||||
<Texture CRC="08398602" Path="assets/textures/shared/object_spot09_objTex_008490"/>
|
||||
<Texture CRC="F8CAD0BB" Path="assets/textures/shared/corral_fence"/>
|
||||
<Texture CRC="ECC3AE58" Path="assets/textures/shared/metal_bar"/>
|
||||
<Texture CRC="15754092" Path="assets/textures/shared/bdan_room_13Tex_001D88"/>
|
||||
<Texture CRC="EC05BD1D" Path="assets/textures/shared/bdan_room_13Tex_002188"/>
|
||||
<Texture CRC="E0A3A9B5" Path="assets/textures/shared/Bmori1_room_0Tex_005CC8"/>
|
||||
<Texture CRC="E64F5E65" Path="assets/textures/shared/Bmori1_room_0Tex_0088C8"/>
|
||||
<Texture CRC="15C10EF9" Path="assets/textures/shared/Bmori1_room_0Tex_00C2C8"/>
|
||||
<Texture CRC="1BCC4F3E" Path="assets/textures/shared/Bmori1_room_17Tex_0088B8"/>
|
||||
<Texture CRC="0FFF410A" Path="assets/textures/shared/ddan_room_0Tex_011898"/>
|
||||
<Texture CRC="1410F5ED" Path="assets/textures/shared/ddan_room_0Tex_015C98"/>
|
||||
<Texture CRC="E6F457E5" Path="assets/textures/shared/ddan_room_0Tex_017898"/>
|
||||
<Texture CRC="FAB44CE6" Path="assets/textures/shared/ganon_room_0Tex_0076D0"/>
|
||||
<Texture CRC="E377EBF4" Path="assets/textures/shared/ganon_room_1Tex_006770"/>
|
||||
<Texture CRC="064B271A" Path="assets/textures/shared/ganon_room_6Tex_008B00"/>
|
||||
<Texture CRC="F4FC78F4" Path="assets/textures/shared/ganontika_room_0Tex_007EF8"/>
|
||||
<Texture CRC="F1F2F1FA" Path="assets/textures/shared/ganontika_room_12Tex_008660"/>
|
||||
<Texture CRC="1DA32295" Path="assets/textures/shared/ganontika_room_1Tex_0119C0"/>
|
||||
<Texture CRC="F19BC15B" Path="assets/textures/shared/ganontika_room_2Tex_004FD8"/>
|
||||
<Texture CRC="160FC921" Path="assets/textures/shared/ganontika_room_6Tex_00CC90"/>
|
||||
<Texture CRC="16601E00" Path="assets/textures/shared/ganontika_room_9Tex_00A888"/>
|
||||
<Texture CRC="0A0235AF" Path="assets/textures/shared/ganon_demo_sceneTex_008870"/>
|
||||
<Texture CRC="1B4711F7" Path="assets/textures/shared/gerudoway_room_0Tex_002FB0"/>
|
||||
<Texture CRC="0176FF24" Path="assets/textures/shared/gerudoway_room_1Tex_005B10"/>
|
||||
<Texture CRC="0B5B2427" Path="assets/textures/shared/HIDAN_room_10Tex_017898"/>
|
||||
<Texture CRC="0EDFD923" Path="assets/textures/shared/HIDAN_room_1Tex_00B5E0"/>
|
||||
<Texture CRC="E71EBF7C" Path="assets/textures/shared/ice_doukutu_room_2Tex_002720"/>
|
||||
<Texture CRC="F2D8CCC3" Path="assets/textures/shared/jyasinboss_room_1Tex_005638"/>
|
||||
<Texture CRC="E517951C" Path="assets/textures/shared/jyasinzou_room_13Tex_004448"/>
|
||||
<Texture CRC="F3796950" Path="assets/textures/shared/jyasinzou_room_14Tex_003090"/>
|
||||
<Texture CRC="FB1AAEE8" Path="assets/textures/shared/jyasinzou_room_15Tex_004BB8"/>
|
||||
<Texture CRC="F9FA965A" Path="assets/textures/shared/jyasinzou_room_16Tex_004188"/>
|
||||
<Texture CRC="0C21F5B9" Path="assets/textures/shared/jyasinzou_room_1Tex_006AF8"/>
|
||||
<Texture CRC="F81085E7" Path="assets/textures/shared/men_room_0Tex_00B538"/>
|
||||
<Texture CRC="06DDD075" Path="assets/textures/shared/men_room_0Tex_00DD38"/>
|
||||
<Texture CRC="FD93304A" Path="assets/textures/shared/men_room_10Tex_002458"/>
|
||||
<Texture CRC="EB85EB44" Path="assets/textures/shared/MIZUsin_room_0Tex_00DE48"/>
|
||||
<Texture CRC="0A52B296" Path="assets/textures/shared/MIZUsin_room_0Tex_00E648"/>
|
||||
<Texture CRC="03335399" Path="assets/textures/shared/MIZUsin_room_12Tex_003928"/>
|
||||
<Texture CRC="15339444" Path="assets/textures/shared/MIZUsin_room_14Tex_005660"/>
|
||||
<Texture CRC="EC94487D" Path="assets/textures/shared/ydan_room_0Tex_00B560"/>
|
||||
<Texture CRC="E526D720" Path="assets/textures/shared/ydan_room_0Tex_00C560"/>
|
||||
<Texture CRC="EE2A311A" Path="assets/textures/shared/ydan_room_0Tex_00D560"/>
|
||||
<Texture CRC="F258216F" Path="assets/textures/shared/ydan_room_3Tex_00A8B0"/>
|
||||
<Texture CRC="F995FF42" Path="assets/textures/shared/bowling_sceneTex_004720"/>
|
||||
<Texture CRC="1580830E" Path="assets/textures/shared/daiyousei_izumi_sceneTex_00C000"/>
|
||||
<Texture CRC="FB7677CD" Path="assets/textures/shared/daiyousei_izumi_sceneTex_00C800"/>
|
||||
<Texture CRC="EC5691BA" Path="assets/textures/shared/daiyousei_izumi_sceneTex_00D800"/>
|
||||
<Texture CRC="EFB16917" Path="assets/textures/shared/hairal_niwa_sceneTex_004B90"/>
|
||||
<Texture CRC="0A735ADC" Path="assets/textures/shared/hairal_niwa_sceneTex_005390"/>
|
||||
<Texture CRC="F812EC23" Path="assets/textures/shared/hairal_niwa_sceneTex_007B90"/>
|
||||
<Texture CRC="043CE192" Path="assets/textures/shared/hairal_niwa_sceneTex_009390"/>
|
||||
<Texture CRC="16CC49E3" Path="assets/textures/shared/hairal_niwa_sceneTex_00EB90"/>
|
||||
<Texture CRC="15F37497" Path="assets/textures/shared/hairal_niwa_sceneTex_00F390"/>
|
||||
<Texture CRC="E1CDE090" Path="assets/textures/shared/hakasitarelay_room_0Tex_003448"/>
|
||||
<Texture CRC="0C3C11BD" Path="assets/textures/shared/hakasitarelay_room_0Tex_005448"/>
|
||||
<Texture CRC="02DBC410" Path="assets/textures/shared/hakasitarelay_room_0Tex_005848"/>
|
||||
<Texture CRC="15641343" Path="assets/textures/shared/hakasitarelay_room_1Tex_006320"/>
|
||||
<Texture CRC="1B57EF18" Path="assets/textures/shared/hakasitarelay_room_2Tex_006CA8"/>
|
||||
<Texture CRC="09603C55" Path="assets/textures/shared/hakasitarelay_sceneTex_00D880"/>
|
||||
<Texture CRC="1B8179C3" Path="assets/textures/shared/hylia_labo_sceneTex_008590"/>
|
||||
<Texture CRC="F41C6BA8" Path="assets/textures/shared/hylia_labo_sceneTex_009990"/>
|
||||
<Texture CRC="ED602894" Path="assets/textures/shared/kakusiana_room_0Tex_005AA0"/>
|
||||
<Texture CRC="1414C410" Path="assets/textures/shared/kakusiana_room_11Tex_004048"/>
|
||||
<Texture CRC="1EF67D5E" Path="assets/textures/shared/spot00_sceneTex_01F818"/>
|
||||
<Texture CRC="E9A72C25" Path="assets/textures/shared/night_entrance"/>
|
||||
<Texture CRC="0805B7BD" Path="assets/textures/shared/spot10_room_1Tex_004FA0"/>
|
||||
<Texture CRC="1147203B" Path="assets/textures/shared/spot18_room_0Tex_009960"/>
|
||||
<Texture CRC="09CDB0D6" Path="assets/textures/shared/pause_save_1_1"/>
|
||||
<Texture CRC="F41C8814" Path="assets/textures/shared/gameplay_dangeon_keepTex_000000"/>
|
||||
<Texture CRC="F62DF8AC" Path="assets/textures/shared/field_door_knob_upper"/>
|
||||
<Texture CRC="EDCD2438" Path="assets/textures/shared/eff_unknown_10"/>
|
||||
<Texture CRC="19D3C674" Path="assets/textures/shared/eff_unknown_8"/>
|
||||
<Texture CRC="E92D820F" Path="assets/textures/shared/biri_outer_hood"/>
|
||||
<Texture CRC="1FDE7D92" Path="assets/textures/shared/object_blkobjTex_009890"/>
|
||||
<Texture CRC="11C993FD" Path="assets/textures/shared/object_blkobjTex_00C890"/>
|
||||
<Texture CRC="F9B0AE51" Path="assets/textures/shared/bowling_stone_wall"/>
|
||||
<Texture CRC="FEF48320" Path="assets/textures/shared/object_bvTex_008F88"/>
|
||||
<Texture CRC="E74E736D" Path="assets/textures/shared/tex_00002640"/>
|
||||
<Texture CRC="1E4711B1" Path="assets/textures/shared/tex_000010D0"/>
|
||||
<Texture CRC="EA0E81C8" Path="assets/textures/shared/object_demo_kekkaiTex_006140"/>
|
||||
<Texture CRC="F4D9D35C" Path="assets/textures/shared/object_demo_kekkaiTex_007DB0"/>
|
||||
<Texture CRC="FA474623" Path="assets/textures/shared/object_dnsTex_002F20"/>
|
||||
<Texture CRC="03A97838" Path="assets/textures/shared/tex_00000800"/>
|
||||
<Texture CRC="1C29E4A3" Path="assets/textures/shared/object_fdTex_0050A8"/>
|
||||
<Texture CRC="FE05DC4E" Path="assets/textures/shared/object_fhgTex_004DA0"/>
|
||||
<Texture CRC="E767A558" Path="assets/textures/shared/tex_00008570"/>
|
||||
<Texture CRC="1B0E9FE6" Path="assets/textures/shared/tex_00008630"/>
|
||||
<Texture CRC="F2165B27" Path="assets/textures/shared/tex_00008D30"/>
|
||||
<Texture CRC="1BF0EDA3" Path="assets/textures/shared/tex_000091B0"/>
|
||||
<Texture CRC="0F0AD674" Path="assets/textures/shared/tex_00009E20"/>
|
||||
<Texture CRC="1E912266" Path="assets/textures/shared/tex_0000A020"/>
|
||||
<Texture CRC="E0FAC473" Path="assets/textures/shared/tex_0000A260"/>
|
||||
<Texture CRC="EC4ED225" Path="assets/textures/shared/object_geldbTex_002880"/>
|
||||
<Texture CRC="EF58D91D" Path="assets/textures/shared/object_geldbTex_002B80"/>
|
||||
<Texture CRC="F2AA7BB5" Path="assets/textures/shared/grass"/>
|
||||
<Texture CRC="1C4EC8A1" Path="assets/textures/shared/blood_splatter"/>
|
||||
<Texture CRC="1B21DD4A" Path="assets/textures/shared/tex_000173F0"/>
|
||||
<Texture CRC="F27781B5" Path="assets/textures/shared/object_hidan_objectsTex_001A40"/>
|
||||
<Texture CRC="0FEFAAB6" Path="assets/textures/shared/object_hidan_objectsTex_003A40"/>
|
||||
<Texture CRC="13FDA83C" Path="assets/textures/shared/object_hidan_objectsTex_004A40"/>
|
||||
<Texture CRC="035A45AE" Path="assets/textures/shared/tex_00003150"/>
|
||||
<Texture CRC="E6F3F1FD" Path="assets/textures/shared/cobra_tooth"/>
|
||||
<Texture CRC="F2034104" Path="assets/textures/shared/mirror_gradient"/>
|
||||
<Texture CRC="1ECE2D10" Path="assets/textures/shared/gtg_rotating_ring_platform_inner_circle"/>
|
||||
<Texture CRC="17448599" Path="assets/textures/shared/object_mizu_objectsTex_009520"/>
|
||||
<Texture CRC="F8AF4212" Path="assets/textures/shared/twisted_hall_carpet"/>
|
||||
<Texture CRC="EAAD42ED" Path="assets/textures/shared/metal_body"/>
|
||||
<Texture CRC="F6673280" Path="assets/textures/shared/tex_000016A8"/>
|
||||
<Texture CRC="FB55D32F" Path="assets/textures/shared/tex_00005E48"/>
|
||||
<Texture CRC="1C960FEB" Path="assets/textures/shared/tex_00006688"/>
|
||||
<Texture CRC="140B02AD" Path="assets/textures/shared/tex_00001D90"/>
|
||||
<Texture CRC="041873FA" Path="assets/textures/shared/tex_00001F70"/>
|
||||
<Texture CRC="0225074D" Path="assets/textures/shared/tex_00001FB0"/>
|
||||
<Texture CRC="1E7E2033" Path="assets/textures/shared/tex_000020B0"/>
|
||||
<Texture CRC="F1D5B861" Path="assets/textures/shared/tlut_00001D70"/>
|
||||
<Texture CRC="0CB197B9" Path="assets/textures/shared/object_pohTex_003010"/>
|
||||
<Texture CRC="EABA3AA1" Path="assets/textures/shared/tex_00013820"/>
|
||||
<Texture CRC="1E269341" Path="assets/textures/shared/object_spot09_objTex_00B490"/>
|
||||
<Texture CRC="1B2A1991" Path="assets/textures/shared/torch_flame_guard"/>
|
||||
<Texture CRC="E761B6AC" Path="assets/textures/shared/bdan_room_14Tex_0045D8"/>
|
||||
<Texture CRC="0D210C87" Path="assets/textures/shared/bdan_room_14Tex_004DD8"/>
|
||||
<Texture CRC="0A940608" Path="assets/textures/shared/bdan_room_2Tex_006DC8"/>
|
||||
<Texture CRC="FF71874B" Path="assets/textures/shared/Bmori1_room_0Tex_00C0C8"/>
|
||||
<Texture CRC="E38C7D5F" Path="assets/textures/shared/Bmori1_room_10Tex_001A50"/>
|
||||
<Texture CRC="0E15A329" Path="assets/textures/shared/Bmori1_room_10Tex_004BC8"/>
|
||||
<Texture CRC="043639A2" Path="assets/textures/shared/Bmori1_room_11Tex_008118"/>
|
||||
<Texture CRC="13386815" Path="assets/textures/shared/Bmori1_room_17Tex_0080B8"/>
|
||||
<Texture CRC="102D8CFF" Path="assets/textures/shared/Bmori1_room_7Tex_008560"/>
|
||||
<Texture CRC="16525216" Path="assets/textures/shared/Bmori1_room_7Tex_009160"/>
|
||||
<Texture CRC="19351714" Path="assets/textures/shared/Bmori1_room_7Tex_009D60"/>
|
||||
<Texture CRC="E2231A4E" Path="assets/textures/shared/Bmori1_room_7Tex_00A560"/>
|
||||
<Texture CRC="FE12C8B7" Path="assets/textures/shared/Bmori1_room_7Tex_00B560"/>
|
||||
<Texture CRC="F553680E" Path="assets/textures/shared/Bmori1_room_7Tex_011768"/>
|
||||
<Texture CRC="E358CE7D" Path="assets/textures/shared/ddan_room_0Tex_011C98"/>
|
||||
<Texture CRC="FE4D9245" Path="assets/textures/shared/ddan_room_0Tex_015498"/>
|
||||
<Texture CRC="1B63F7AB" Path="assets/textures/shared/ddan_room_0TLUT_011290"/>
|
||||
<Texture CRC="0042824F" Path="assets/textures/shared/ddan_room_10Tex_002A50"/>
|
||||
<Texture CRC="F01A4518" Path="assets/textures/shared/ddan_room_10Tex_002E50"/>
|
||||
<Texture CRC="08882A33" Path="assets/textures/shared/ddan_room_10Tex_003650"/>
|
||||
<Texture CRC="EBB48258" Path="assets/textures/shared/ddan_room_10Tex_003A50"/>
|
||||
<Texture CRC="E87EC430" Path="assets/textures/shared/ddan_room_10Tex_004250"/>
|
||||
<Texture CRC="0CCFACB3" Path="assets/textures/shared/ddan_room_10Tex_004650"/>
|
||||
<Texture CRC="FEA06378" Path="assets/textures/shared/ddan_room_3Tex_00D5B8"/>
|
||||
<Texture CRC="F8E8F33E" Path="assets/textures/shared/FIRE_bs_room_1Tex_0065D8"/>
|
||||
<Texture CRC="EF1C9597" Path="assets/textures/shared/ganon_room_0Tex_007068"/>
|
||||
<Texture CRC="E60DFE8F" Path="assets/textures/shared/ganon_room_5Tex_006308"/>
|
||||
<Texture CRC="0E142D1D" Path="assets/textures/shared/ganon_room_6Tex_008200"/>
|
||||
<Texture CRC="FAAD8F7E" Path="assets/textures/shared/ganon_room_8Tex_004A20"/>
|
||||
<Texture CRC="E73C495F" Path="assets/textures/shared/ganontika_room_12Tex_008260"/>
|
||||
<Texture CRC="F7DA24EF" Path="assets/textures/shared/ganontika_room_17Tex_002A98"/>
|
||||
<Texture CRC="F733905C" Path="assets/textures/shared/ganontika_room_17Tex_002E98"/>
|
||||
<Texture CRC="E0D329EA" Path="assets/textures/shared/ganontika_room_17Tex_003E98"/>
|
||||
<Texture CRC="FA9DCD71" Path="assets/textures/shared/ganontika_room_17Tex_004E98"/>
|
||||
<Texture CRC="E610FE82" Path="assets/textures/shared/ganontika_room_6Tex_00CA90"/>
|
||||
<Texture CRC="1BC21D2A" Path="assets/textures/shared/ganon_demo_sceneTex_007370"/>
|
||||
<Texture CRC="1ED26725" Path="assets/textures/shared/ganon_sonogo_room_0Tex_005820"/>
|
||||
<Texture CRC="E3C4E5C4" Path="assets/textures/shared/ganon_sonogo_room_0Tex_007020"/>
|
||||
<Texture CRC="111EF595" Path="assets/textures/shared/ganon_sonogo_room_0Tex_007420"/>
|
||||
<Texture CRC="1778E2AD" Path="assets/textures/shared/ganon_sonogo_room_0Tex_007820"/>
|
||||
<Texture CRC="EB105C4F" Path="assets/textures/shared/gerudoway_room_0Tex_003FB0"/>
|
||||
<Texture CRC="F81CD64C" Path="assets/textures/shared/HAKAdan_room_0Tex_0091A0"/>
|
||||
<Texture CRC="14C7DE24" Path="assets/textures/shared/HAKAdan_room_10Tex_004FA0"/>
|
||||
<Texture CRC="1E27F99A" Path="assets/textures/shared/HAKAdan_room_21Tex_008700"/>
|
||||
<Texture CRC="E1E22A3C" Path="assets/textures/shared/HIDAN_room_0Tex_0056C0"/>
|
||||
<Texture CRC="EB48A97D" Path="assets/textures/shared/HIDAN_room_1Tex_0087E0"/>
|
||||
<Texture CRC="1AE75412" Path="assets/textures/shared/HIDAN_room_1Tex_00A5E0"/>
|
||||
<Texture CRC="177FA69E" Path="assets/textures/shared/jyasinboss_room_1TLUT_002E18"/>
|
||||
<Texture CRC="064E5E5B" Path="assets/textures/shared/jyasinzou_room_0Tex_00C128"/>
|
||||
<Texture CRC="150A7E2B" Path="assets/textures/shared/jyasinzou_room_10Tex_005DA0"/>
|
||||
<Texture CRC="F5CA5751" Path="assets/textures/shared/jyasinzou_room_10Tex_0065A0"/>
|
||||
<Texture CRC="1F4EADD6" Path="assets/textures/shared/jyasinzou_room_23Tex_0043B8"/>
|
||||
<Texture CRC="F7B3B208" Path="assets/textures/shared/jyasinzou_room_25Tex_00DE68"/>
|
||||
<Texture CRC="ED9D7B96" Path="assets/textures/shared/men_room_0Tex_00D538"/>
|
||||
<Texture CRC="FE977548" Path="assets/textures/shared/men_room_0Tex_00F538"/>
|
||||
<Texture CRC="076C7EC4" Path="assets/textures/shared/men_room_10Tex_003C58"/>
|
||||
<Texture CRC="E5D97CAC" Path="assets/textures/shared/MIZUsin_room_0Tex_00D648"/>
|
||||
<Texture CRC="F1A0303A" Path="assets/textures/shared/MIZUsin_room_5Tex_0039F8"/>
|
||||
<Texture CRC="F5965311" Path="assets/textures/shared/MIZUsin_room_5Tex_0041F8"/>
|
||||
<Texture CRC="02B97BC3" Path="assets/textures/shared/ydan_room_0Tex_00A160"/>
|
||||
<Texture CRC="F8D10B0D" Path="assets/textures/shared/ydan_room_0Tex_013EE8"/>
|
||||
<Texture CRC="E7A1CC7A" Path="assets/textures/shared/ydan_room_3Tex_00B0B0"/>
|
||||
<Texture CRC="EEF48CE3" Path="assets/textures/shared/hairal_niwa_sceneTex_003B90"/>
|
||||
<Texture CRC="0B474C52" Path="assets/textures/shared/hairal_niwa_sceneTex_006390"/>
|
||||
<Texture CRC="EA0E143E" Path="assets/textures/shared/hairal_niwa_sceneTex_00BB90"/>
|
||||
<Texture CRC="1E1C7796" Path="assets/textures/shared/hairal_niwa_sceneTex_010390"/>
|
||||
<Texture CRC="1CCCEC26" Path="assets/textures/shared/hakasitarelay_room_0Tex_003248"/>
|
||||
<Texture CRC="18478671" Path="assets/textures/shared/hakasitarelay_room_1Tex_003F20"/>
|
||||
<Texture CRC="14D633FC" Path="assets/textures/shared/hakasitarelay_room_1Tex_004320"/>
|
||||
<Texture CRC="06696BA3" Path="assets/textures/shared/hakasitarelay_room_5Tex_002448"/>
|
||||
<Texture CRC="F1A45E44" Path="assets/textures/shared/hakasitarelay_room_5TLUT_001C28"/>
|
||||
<Texture CRC="FF4F05A2" Path="assets/textures/shared/hylia_labo_sceneTex_006090"/>
|
||||
<Texture CRC="E3528291" Path="assets/textures/shared/hylia_labo_sceneTex_009790"/>
|
||||
<Texture CRC="E77B7076" Path="assets/textures/shared/hylia_labo_sceneTex_00B090"/>
|
||||
<Texture CRC="FAE07674" Path="assets/textures/shared/syatekijyou_sceneTex_00B0C0"/>
|
||||
<Texture CRC="FE505C1C" Path="assets/textures/shared/tokinoma_sceneTex_00CFA0"/>
|
||||
<Texture CRC="EDC94CC5" Path="assets/textures/shared/yousei_izumi_tate_sceneTex_005010"/>
|
||||
<Texture CRC="097C6E09" Path="assets/textures/shared/hakaana_room_0Tex_004658"/>
|
||||
<Texture CRC="F736B046" Path="assets/textures/shared/hakaana2_sceneTex_005090"/>
|
||||
<Texture CRC="0A0840F8" Path="assets/textures/shared/hakaana_ouke_room_0Tex_008FF8"/>
|
||||
<Texture CRC="F6B480C2" Path="assets/textures/shared/kakusiana_room_0Tex_0032A0"/>
|
||||
<Texture CRC="0F7107B9" Path="assets/textures/shared/kakusiana_room_10Tex_002BE0"/>
|
||||
<Texture CRC="00E1272F" Path="assets/textures/shared/kakusiana_room_11Tex_002848"/>
|
||||
<Texture CRC="FE06E141" Path="assets/textures/shared/kakusiana_room_13Tex_004EC8"/>
|
||||
<Texture CRC="FA36B5B5" Path="assets/textures/shared/kakusiana_room_13Tex_005EC8"/>
|
||||
<Texture CRC="140B5908" Path="assets/textures/shared/kinsuta_room_0Tex_007910"/>
|
||||
<Texture CRC="F731A2AE" Path="assets/textures/shared/souko_room_2Tex_006AE0"/>
|
||||
<Texture CRC="05E13866" Path="assets/textures/shared/spot00_sceneTex_025018"/>
|
||||
<Texture CRC="E2BB150D" Path="assets/textures/shared/spot00_sceneTex_026098"/>
|
||||
<Texture CRC="FB3AB864" Path="assets/textures/shared/spot02_room_1Tex_01C690"/>
|
||||
<Texture CRC="FE2A9339" Path="assets/textures/shared/spot03_sceneTex_007558"/>
|
||||
<Texture CRC="E1E08BB8" Path="assets/textures/shared/spot07_room_1Tex_00A3D8"/>
|
||||
<Texture CRC="F9602353" Path="assets/textures/shared/spot11_sceneTex_0104E0"/>
|
||||
<Texture CRC="06C34E89" Path="assets/textures/shared/spot11_sceneTex_0184E0"/>
|
||||
<Texture CRC="18A4B8DC" Path="assets/textures/shared/spot18_room_0Tex_005960"/>
|
||||
<Texture CRC="0531CE00" Path="assets/textures/shared/spot18_room_0Tex_006960"/>
|
||||
<Texture CRC="082100CB" Path="assets/textures/shared/spot18_room_0Tex_008160"/>
|
||||
<Texture CRC="E27F3E02" Path="assets/textures/shared/spot18_room_0Tex_008960"/>
|
||||
<Texture CRC="0204DD7E" Path="assets/textures/shared/spot18_room_0Tex_009160"/>
|
||||
<Texture CRC="FE314AB1" Path="assets/textures/shared/spot18_room_0Tex_00A160"/>
|
||||
<Texture CRC="1C5E4A08" Path="assets/textures/shared/spot18_room_0Tex_00A960"/>
|
||||
<Texture CRC="13BEE958" Path="assets/textures/shared/spot18_room_0Tex_00B160"/>
|
||||
<Texture CRC="F29CE795" Path="assets/textures/shared/spot18_room_0Tex_00B960"/>
|
||||
<Texture CRC="1F8F607F" Path="assets/textures/shared/spot18_room_0Tex_00C160"/>
|
||||
<Texture CRC="EF3A03C7" Path="assets/textures/shared/spot18_room_0Tex_00DFC8"/>
|
||||
<Texture CRC="EA1D8AA9" Path="assets/textures/shared/spot18_room_0Tex_00EFC8"/>
|
||||
<Texture CRC="F35E3461" Path="assets/textures/shared/spot18_room_0Tex_0107C8"/>
|
||||
<Texture CRC="F654A517" Path="assets/textures/shared/spot18_room_0Tex_0117C8"/>
|
||||
<Texture CRC="08F3B683" Path="assets/textures/shared/navi_unused_eng"/>
|
||||
<Texture CRC="1B042EA2" Path="assets/textures/shared/num_1_eng"/>
|
||||
<Texture CRC="FCC147EE" Path="assets/textures/shared/num_2_eng"/>
|
||||
<Texture CRC="1BB7390D" Path="assets/textures/shared/num_3_eng"/>
|
||||
<Texture CRC="1F1D58A1" Path="assets/textures/shared/num_4_eng"/>
|
||||
<Texture CRC="EA5CE053" Path="assets/textures/shared/num_5_eng"/>
|
||||
<Texture CRC="136F14C1" Path="assets/textures/shared/num_6_eng"/>
|
||||
<Texture CRC="06307BDC" Path="assets/textures/shared/num_8_eng"/>
|
||||
<Texture CRC="085D7D37" Path="assets/textures/shared/fire_medallion_item_name_unused_jpn_1"/>
|
||||
<Texture CRC="1B0FF238" Path="assets/textures/shared/ice_medallion_item_name_unused_jpn_1"/>
|
||||
<Texture CRC="ED2E3FA1" Path="assets/textures/shared/piece_of_heart_item_name_unused_jpn_1"/>
|
||||
<Texture CRC="1F18A8B3" Path="assets/textures/shared/wind_medallion_item_name_unused_jpn_1"/>
|
||||
<Texture CRC="025DF39F" Path="assets/textures/shared/deku_tree_pause_screen_map_basement_2_left"/>
|
||||
<Texture CRC="0B27BD0E" Path="assets/textures/shared/fire_temple_room_11_floor_3_minimap"/>
|
||||
<Texture CRC="07274951" Path="assets/textures/shared/jabu_room_11_minimap"/>
|
||||
<Texture CRC="F928A833" Path="assets/textures/shared/dungeon_keep_tex_00F0A0"/>
|
||||
<Texture CRC="1200E6E6" Path="assets/textures/shared/gameplay_dangeon_keepTex_0108A0"/>
|
||||
<Texture CRC="0DF1B902" Path="assets/textures/shared/gameplay_dangeon_keepTex_0118A0"/>
|
||||
<Texture CRC="1FC352FB" Path="assets/textures/shared/gameplay_dangeon_keepTex_011AA0"/>
|
||||
<Texture CRC="ECF41E88" Path="assets/textures/shared/bomb_cap"/>
|
||||
<Texture CRC="F1BAB6BD" Path="assets/textures/shared/eff_fire"/>
|
||||
<Texture CRC="0DB371B0" Path="assets/textures/shared/eff_fleck"/>
|
||||
<Texture CRC="EBF6984E" Path="assets/textures/shared/eff_hit_mark_8"/>
|
||||
<Texture CRC="E010DCDC" Path="assets/textures/shared/eff_unknown_11"/>
|
||||
<Texture CRC="F01FE9BF" Path="assets/textures/shared/eff_unknown_6"/>
|
||||
<Texture CRC="1BFF3C77" Path="assets/textures/shared/hilite_4"/>
|
||||
<Texture CRC="019C59D3" Path="assets/textures/shared/unknown_circle_6"/>
|
||||
<Texture CRC="13369F31" Path="assets/textures/shared/unknown_stone_1"/>
|
||||
<Texture CRC="F807D37A" Path="assets/textures/shared/withered_leaf"/>
|
||||
<Texture CRC="0FE1897F" Path="assets/textures/shared/roof_man_trouser_pattern"/>
|
||||
<Texture CRC="0DD9E65B" Path="assets/textures/shared/object_anubiceTex_0036A0"/>
|
||||
<Texture CRC="FB2A77D8" Path="assets/textures/shared/tex_000014A0"/>
|
||||
<Texture CRC="E9CDB700" Path="assets/textures/shared/tex_000015C0"/>
|
||||
<Texture CRC="13328ED0" Path="assets/textures/shared/jabu_objects_11_tlut"/>
|
||||
<Texture CRC="02148FD1" Path="assets/textures/shared/jabu_objects_tex_00006748"/>
|
||||
<Texture CRC="1C7F411C" Path="assets/textures/shared/jabu_objects_tex_00006B48"/>
|
||||
<Texture CRC="185E9456" Path="assets/textures/shared/jabu_objects_tex_00007348"/>
|
||||
<Texture CRC="FD55F6CE" Path="assets/textures/shared/tex_00005D90"/>
|
||||
<Texture CRC="F82BD47D" Path="assets/textures/shared/tex_00005E90"/>
|
||||
<Texture CRC="0A90E8A9" Path="assets/textures/shared/object_blkobjTex_00E890"/>
|
||||
<Texture CRC="F0FF55E7" Path="assets/textures/shared/object_blkobjTex_00F890"/>
|
||||
<Texture CRC="E51D3728" Path="assets/textures/shared/object_blkobjTex_010890"/>
|
||||
<Texture CRC="F5DA5F73" Path="assets/textures/shared/object_blkobjTex_011090"/>
|
||||
<Texture CRC="F8A3D71A" Path="assets/textures/shared/object_blkobjTex_011890"/>
|
||||
<Texture CRC="E4CADD69" Path="assets/textures/shared/tex_0000093C"/>
|
||||
<Texture CRC="01ADC943" Path="assets/textures/shared/bowling_stripes"/>
|
||||
<Texture CRC="0F544DB7" Path="assets/textures/shared/bowling_wood_panel"/>
|
||||
<Texture CRC="113583CB" Path="assets/textures/shared/chest_front"/>
|
||||
<Texture CRC="F1A2C69C" Path="assets/textures/shared/side_and_top"/>
|
||||
<Texture CRC="19F1F86B" Path="assets/textures/shared/bubble"/>
|
||||
<Texture CRC="FD8CBFB5" Path="assets/textures/shared/object_bvTex_000A40"/>
|
||||
<Texture CRC="E698AB0D" Path="assets/textures/shared/tex_00001440"/>
|
||||
<Texture CRC="E3010489" Path="assets/textures/shared/door_bars_bottom"/>
|
||||
<Texture CRC="0227663A" Path="assets/textures/shared/falling_stairs_vines"/>
|
||||
<Texture CRC="F13DA5C6" Path="assets/textures/shared/tex_6F60"/>
|
||||
<Texture CRC="F5AAEE8F" Path="assets/textures/shared/eye"/>
|
||||
<Texture CRC="012D961E" Path="assets/textures/shared/object_demo_kekkaiTex_003EA0"/>
|
||||
<Texture CRC="0E1AAE61" Path="assets/textures/shared/object_demo_kekkaiTex_0092D0"/>
|
||||
<Texture CRC="0595CE57" Path="assets/textures/shared/object_demo_kekkaiTex_00C8B0"/>
|
||||
<Texture CRC="F5B75EE0" Path="assets/textures/shared/dnt_stage_eye_half"/>
|
||||
<Texture CRC="1C09ADB5" Path="assets/textures/shared/dnt_stage_eye_open"/>
|
||||
<Texture CRC="FC2D69AF" Path="assets/textures/shared/dnt_stage_eye_shut"/>
|
||||
<Texture CRC="00D41621" Path="assets/textures/shared/object_dnsTex_002CA0"/>
|
||||
<Texture CRC="048BB86F" Path="assets/textures/shared/object_dnsTex_002FA0"/>
|
||||
<Texture CRC="F41C90BC" Path="assets/textures/shared/face"/>
|
||||
<Texture CRC="FB823B8C" Path="assets/textures/shared/tooth"/>
|
||||
<Texture CRC="183D598F" Path="assets/textures/shared/tex_00000390"/>
|
||||
<Texture CRC="F059FBC4" Path="assets/textures/shared/crystal_light"/>
|
||||
<Texture CRC="0F17154F" Path="assets/textures/shared/cloud_normal"/>
|
||||
<Texture CRC="F4FA1662" Path="assets/textures/shared/enlivening_light"/>
|
||||
<Texture CRC="F287124B" Path="assets/textures/shared/object_fdTex_0040A8"/>
|
||||
<Texture CRC="0C795B93" Path="assets/textures/shared/object_fdTex_0048A8"/>
|
||||
<Texture CRC="E6C9623B" Path="assets/textures/shared/object_fdTex_0052A8"/>
|
||||
<Texture CRC="E7BD11F6" Path="assets/textures/shared/object_fdTex_0054A8"/>
|
||||
<Texture CRC="0CF9DE4C" Path="assets/textures/shared/object_fdTex_005B60"/>
|
||||
<Texture CRC="F4742896" Path="assets/textures/shared/object_fdTex_005F60"/>
|
||||
<Texture CRC="EFDCEEAC" Path="assets/textures/shared/object_fdTex_009208"/>
|
||||
<Texture CRC="EB468291" Path="assets/textures/shared/object_fdTLUT_0032A8"/>
|
||||
<Texture CRC="136C6B3F" Path="assets/textures/shared/volvagia_eye_closed"/>
|
||||
<Texture CRC="F7A991C6" Path="assets/textures/shared/volvagia_eye_half"/>
|
||||
<Texture CRC="1C8D0382" Path="assets/textures/shared/volvagia_eye_open"/>
|
||||
<Texture CRC="EBCDC470" Path="assets/textures/shared/object_fhgTex_003320"/>
|
||||
<Texture CRC="F9B3E8F8" Path="assets/textures/shared/object_fhgTex_003520"/>
|
||||
<Texture CRC="FC667630" Path="assets/textures/shared/object_fhgTex_003720"/>
|
||||
<Texture CRC="032BD3FF" Path="assets/textures/shared/object_fhgTex_003920"/>
|
||||
<Texture CRC="F8B6C1AC" Path="assets/textures/shared/object_fhgTex_003B20"/>
|
||||
<Texture CRC="E39BEDB7" Path="assets/textures/shared/object_fhgTex_003BA0"/>
|
||||
<Texture CRC="139A8DDE" Path="assets/textures/shared/object_fhgTex_003DA0"/>
|
||||
<Texture CRC="E0F76E96" Path="assets/textures/shared/object_fhgTex_003FA0"/>
|
||||
<Texture CRC="E2308C38" Path="assets/textures/shared/object_fhgTex_0043A0"/>
|
||||
<Texture CRC="F16C5CE7" Path="assets/textures/shared/object_fhgTex_0044A0"/>
|
||||
<Texture CRC="1DAA6D7D" Path="assets/textures/shared/object_fhgTex_004CA0"/>
|
||||
<Texture CRC="052C37A1" Path="assets/textures/shared/object_fhgTex_00D040"/>
|
||||
<Texture CRC="16ADB711" Path="assets/textures/shared/object_fhgTex_00D060"/>
|
||||
<Texture CRC="E4F62E11" Path="assets/textures/shared/fishing_aquarium_glass"/>
|
||||
<Texture CRC="F4E58988" Path="assets/textures/shared/fishing_rock"/>
|
||||
<Texture CRC="F38B45BE" Path="assets/textures/shared/fishing_stream_splash_tile_2"/>
|
||||
<Texture CRC="1EF4A4C7" Path="assets/textures/shared/tex_00007F10"/>
|
||||
<Texture CRC="EF4478AE" Path="assets/textures/shared/tex_00008190"/>
|
||||
<Texture CRC="1F9ED88C" Path="assets/textures/shared/tex_00009620"/>
|
||||
<Texture CRC="120D4CEB" Path="assets/textures/shared/tex_0001E588"/>
|
||||
<Texture CRC="1819C2E3" Path="assets/textures/shared/gerudo_white_eye_open"/>
|
||||
<Texture CRC="187F5A07" Path="assets/textures/shared/inside"/>
|
||||
<Texture CRC="F31B8EC6" Path="assets/textures/shared/outside"/>
|
||||
<Texture CRC="E170B720" Path="assets/textures/shared/object_geldbTex_002A80"/>
|
||||
<Texture CRC="F8726693" Path="assets/textures/shared/object_gi_ocarinaTex_000000"/>
|
||||
<Texture CRC="11CD9560" Path="assets/textures/shared/object_gi_purseTex_000000"/>
|
||||
<Texture CRC="11E41890" Path="assets/textures/shared/object_gjTex_003F20"/>
|
||||
<Texture CRC="0FDEEF63" Path="assets/textures/shared/object_gjTex_004F20"/>
|
||||
<Texture CRC="F027E6B8" Path="assets/textures/shared/object_gjTex_005F20"/>
|
||||
<Texture CRC="1807BC33" Path="assets/textures/shared/object_gjTex_006F20"/>
|
||||
<Texture CRC="0137C459" Path="assets/textures/shared/object_gjTex_007320"/>
|
||||
<Texture CRC="0785F8B5" Path="assets/textures/shared/object_gjTex_007720"/>
|
||||
<Texture CRC="F2B9D7ED" Path="assets/textures/shared/object_gjTex_007B20"/>
|
||||
<Texture CRC="EE2D9AD3" Path="assets/textures/shared/phantom_ganon_limb_tex_00AF00"/>
|
||||
<Texture CRC="F5D0FDB6" Path="assets/textures/shared/phantom_ganon_limb_tex_00B780"/>
|
||||
<Texture CRC="E6E23524" Path="assets/textures/shared/phantom_ganon_limb_tex_00C080"/>
|
||||
<Texture CRC="06D756C8" Path="assets/textures/shared/phantom_ganon_limb_tex_00C180"/>
|
||||
<Texture CRC="EB790765" Path="assets/textures/shared/phantom_ganon_limb_tex_00C200"/>
|
||||
<Texture CRC="0BDB84E9" Path="assets/textures/shared/object_gol_eye_white"/>
|
||||
<Texture CRC="0C43D535" Path="assets/textures/shared/flame_smoke"/>
|
||||
<Texture CRC="19A0E9DD" Path="assets/textures/shared/tomb"/>
|
||||
<Texture CRC="1B078B44" Path="assets/textures/shared/tex_000131F0"/>
|
||||
<Texture CRC="FB37D88F" Path="assets/textures/shared/tex_000145F0"/>
|
||||
<Texture CRC="12FEBA33" Path="assets/textures/shared/tex_0001C270"/>
|
||||
<Texture CRC="FA9405CB" Path="assets/textures/shared/flagpole_pole_tex"/>
|
||||
<Texture CRC="F633B54C" Path="assets/textures/shared/horse_ingo_feathering"/>
|
||||
<Texture CRC="1212D798" Path="assets/textures/shared/horse_ingo_mane"/>
|
||||
<Texture CRC="0BBCBBD1" Path="assets/textures/shared/horse_ingo_neck"/>
|
||||
<Texture CRC="E4AB09A4" Path="assets/textures/shared/horse_ingo_nose"/>
|
||||
<Texture CRC="155B34AF" Path="assets/textures/shared/horse_ingo_nostrils"/>
|
||||
<Texture CRC="1FDBCD04" Path="assets/textures/shared/horse_ingo_shoulder"/>
|
||||
<Texture CRC="140B07C2" Path="assets/textures/shared/horse_ingo_thigh"/>
|
||||
<Texture CRC="0E751A83" Path="assets/textures/shared/epona_eye_closed"/>
|
||||
<Texture CRC="F7B57DC2" Path="assets/textures/shared/epona_eye_half"/>
|
||||
<Texture CRC="EC3997C9" Path="assets/textures/shared/epona_eye_open"/>
|
||||
<Texture CRC="E1917AE8" Path="assets/textures/shared/epona_eye_tlut"/>
|
||||
<Texture CRC="FCBE0C85" Path="assets/textures/shared/eyebrow_normal"/>
|
||||
<Texture CRC="E46E0EE9" Path="assets/textures/shared/eyebrow_sad"/>
|
||||
<Texture CRC="E0D54C1B" Path="assets/textures/shared/eyebrow_surprised"/>
|
||||
<Texture CRC="EDB600B6" Path="assets/textures/shared/eye_look_down_open"/>
|
||||
<Texture CRC="E6AF1F5A" Path="assets/textures/shared/eye_look_forward_closed"/>
|
||||
<Texture CRC="07357091" Path="assets/textures/shared/eye_look_forward_half"/>
|
||||
<Texture CRC="F4CB241D" Path="assets/textures/shared/eye_look_forward_open"/>
|
||||
<Texture CRC="EEE39B76" Path="assets/textures/shared/eye_look_left_half"/>
|
||||
<Texture CRC="E6F6BA5D" Path="assets/textures/shared/eye_look_left_half_2"/>
|
||||
<Texture CRC="F2FACFC8" Path="assets/textures/shared/eye_look_left_open"/>
|
||||
<Texture CRC="1FD0ECF4" Path="assets/textures/shared/eye_look_left_open_2"/>
|
||||
<Texture CRC="0143A162" Path="assets/textures/shared/eye_look_up_open"/>
|
||||
<Texture CRC="09078953" Path="assets/textures/shared/tex_00002950"/>
|
||||
<Texture CRC="FC6474FD" Path="assets/textures/shared/tex_00004950"/>
|
||||
<Texture CRC="F801B290" Path="assets/textures/shared/tex_00006D50"/>
|
||||
<Texture CRC="E5BD261B" Path="assets/textures/shared/tex_0113A0"/>
|
||||
<Texture CRC="FFEF0898" Path="assets/textures/shared/adult_era_eyebrow_edge"/>
|
||||
<Texture CRC="E08E20EF" Path="assets/textures/shared/basket"/>
|
||||
<Texture CRC="0A7077A5" Path="assets/textures/shared/basket_inside"/>
|
||||
<Texture CRC="0A1A35B0" Path="assets/textures/shared/pitchfork"/>
|
||||
<Texture CRC="1A9DA002" Path="assets/textures/shared/unused_eye"/>
|
||||
<Texture CRC="E707DAA5" Path="assets/textures/shared/cobra_mirror"/>
|
||||
<Texture CRC="E1D92905" Path="assets/textures/shared/megami_tlut_4"/>
|
||||
<Texture CRC="0171C9FC" Path="assets/textures/shared/object_jya_objTex_016140"/>
|
||||
<Texture CRC="1146FA9F" Path="assets/textures/shared/object_jya_objTex_01B740"/>
|
||||
<Texture CRC="0FBFEC52" Path="assets/textures/shared/tunic"/>
|
||||
<Texture CRC="1F01FD5F" Path="assets/textures/shared/goron_mask_mouth"/>
|
||||
<Texture CRC="1A624F3C" Path="assets/textures/shared/skull_mask_eye"/>
|
||||
<Texture CRC="E639932A" Path="assets/textures/shared/skull_mask_nose"/>
|
||||
<Texture CRC="045DCE7E" Path="assets/textures/shared/skull_mask_teeth"/>
|
||||
<Texture CRC="F899C923" Path="assets/textures/shared/zora_mask_eye"/>
|
||||
<Texture CRC="005CFA91" Path="assets/textures/shared/zora_mask_eye_boarder"/>
|
||||
<Texture CRC="EAA073A4" Path="assets/textures/shared/zora_mask_mouth"/>
|
||||
<Texture CRC="1014B94C" Path="assets/textures/shared/bowser"/>
|
||||
<Texture CRC="14316ABE" Path="assets/textures/shared/ear"/>
|
||||
<Texture CRC="E801DFF3" Path="assets/textures/shared/fingers"/>
|
||||
<Texture CRC="F60A069B" Path="assets/textures/shared/hair"/>
|
||||
<Texture CRC="13B967F5" Path="assets/textures/shared/hair_tlut"/>
|
||||
<Texture CRC="F3DC387D" Path="assets/textures/shared/skin_gradient"/>
|
||||
<Texture CRC="1AF86090" Path="assets/textures/shared/unk_circle"/>
|
||||
<Texture CRC="06A0C03B" Path="assets/textures/shared/seedling"/>
|
||||
<Texture CRC="FB6AD918" Path="assets/textures/shared/gtg_rotating_ring_platform_outer_circle"/>
|
||||
<Texture CRC="E7C20460" Path="assets/textures/shared/gtg_statue"/>
|
||||
<Texture CRC="10F378C1" Path="assets/textures/shared/object_mizu_objectsTex_009720"/>
|
||||
<Texture CRC="0E732A63" Path="assets/textures/shared/object_mizu_objectsTex_009920"/>
|
||||
<Texture CRC="E75A57B1" Path="assets/textures/shared/object_mizu_objectsTex_009B20"/>
|
||||
<Texture CRC="E2BAA950" Path="assets/textures/shared/object_mizu_objectsTex_009D20"/>
|
||||
<Texture CRC="124ED74F" Path="assets/textures/shared/side"/>
|
||||
<Texture CRC="1813B52A" Path="assets/textures/shared/stalfos_platform_side"/>
|
||||
<Texture CRC="1E93EE27" Path="assets/textures/shared/stalfos_platform_top"/>
|
||||
<Texture CRC="EBF8A4AD" Path="assets/textures/shared/twisted_hall_brick"/>
|
||||
<Texture CRC="E0917D9F" Path="assets/textures/shared/twisted_hall_design"/>
|
||||
<Texture CRC="13FDCE5A" Path="assets/textures/shared/tex_00000650"/>
|
||||
<Texture CRC="E7D33CD8" Path="assets/textures/shared/tex_2180"/>
|
||||
<Texture CRC="00FBCA3D" Path="assets/textures/shared/tex_00002770"/>
|
||||
<Texture CRC="0006AE17" Path="assets/textures/shared/tex_000027F0"/>
|
||||
<Texture CRC="038A2B56" Path="assets/textures/shared/tex_00002930"/>
|
||||
<Texture CRC="E1C4E71F" Path="assets/textures/shared/tex_00002D30"/>
|
||||
<Texture CRC="E21FF7CE" Path="assets/textures/shared/tex_00001570"/>
|
||||
<Texture CRC="FD50BCAB" Path="assets/textures/shared/tex_00004CB0"/>
|
||||
<Texture CRC="E3CDCA43" Path="assets/textures/shared/tex_00004A08"/>
|
||||
<Texture CRC="FF914E61" Path="assets/textures/shared/tex_00005808"/>
|
||||
<Texture CRC="E20931B8" Path="assets/textures/shared/tex_00005848"/>
|
||||
<Texture CRC="F2B987BA" Path="assets/textures/shared/tex_00005948"/>
|
||||
<Texture CRC="073D94EE" Path="assets/textures/shared/tex_00006648"/>
|
||||
<Texture CRC="E1B446AF" Path="assets/textures/shared/tex_00006708"/>
|
||||
<Texture CRC="E40F4D10" Path="assets/textures/shared/tex_000029B0"/>
|
||||
<Texture CRC="FDA245E8" Path="assets/textures/shared/tex_000031B0"/>
|
||||
<Texture CRC="E3A80AEA" Path="assets/textures/shared/tex_00006E60"/>
|
||||
<Texture CRC="FC019DD5" Path="assets/textures/shared/tex_00004BC8"/>
|
||||
<Texture CRC="02FFEFD5" Path="assets/textures/shared/tex_00004CC8"/>
|
||||
<Texture CRC="FFC0FAA2" Path="assets/textures/shared/tex_00004D48"/>
|
||||
<Texture CRC="E2F47DEE" Path="assets/textures/shared/tex_00004DC8"/>
|
||||
<Texture CRC="171C63B4" Path="assets/textures/shared/object_owlTLUT_006DA8"/>
|
||||
<Texture CRC="EE3630F0" Path="assets/textures/shared/object_pohTex_003910"/>
|
||||
<Texture CRC="0DABC1DA" Path="assets/textures/shared/object_pohTex_004F10"/>
|
||||
<Texture CRC="E5FD0A28" Path="assets/textures/shared/object_po_composerTex_001450"/>
|
||||
<Texture CRC="EF4412E4" Path="assets/textures/shared/big_poe_soul"/>
|
||||
<Texture CRC="EA9487C5" Path="assets/textures/shared/object_po_sistersTex_0082C0"/>
|
||||
<Texture CRC="0FFF96D2" Path="assets/textures/shared/object_psTex_001F78"/>
|
||||
<Texture CRC="FBBDDEA3" Path="assets/textures/shared/object_psTex_002178"/>
|
||||
<Texture CRC="046C7808" Path="assets/textures/shared/windmill_platform_2"/>
|
||||
<Texture CRC="19A6198D" Path="assets/textures/shared/tex_00000000"/>
|
||||
<Texture CRC="008CD893" Path="assets/textures/shared/stalfos_bone_detail"/>
|
||||
<Texture CRC="02743674" Path="assets/textures/shared/stalfos_eye_socket"/>
|
||||
<Texture CRC="F5B7A4E8" Path="assets/textures/shared/stalfos_nostril"/>
|
||||
<Texture CRC="E362D972" Path="assets/textures/shared/barbed_wire_fence"/>
|
||||
<Texture CRC="E1D1A4E5" Path="assets/textures/shared/tex_00000000"/>
|
||||
<Texture CRC="120FC71C" Path="assets/textures/shared/tex_00000CD0"/>
|
||||
<Texture CRC="165AEBCE" Path="assets/textures/shared/tex_00000EE0"/>
|
||||
<Texture CRC="F4C507F2" Path="assets/textures/shared/tex_00004930"/>
|
||||
<Texture CRC="1FE76F64" Path="assets/textures/shared/tlut_00000EC0"/>
|
||||
<Texture CRC="E66C6343" Path="assets/textures/shared/bombable_wall"/>
|
||||
<Texture CRC="17274055" Path="assets/textures/shared/bombable_wall_tlut"/>
|
||||
<Texture CRC="FFF0BE45" Path="assets/textures/shared/iceberg_side"/>
|
||||
<Texture CRC="E0DA021F" Path="assets/textures/shared/iceberg_tlut_1"/>
|
||||
<Texture CRC="03B714A1" Path="assets/textures/shared/object_spot09_objTex_00CC90"/>
|
||||
<Texture CRC="FB3D207E" Path="assets/textures/shared/object_spot09_objTex_013090"/>
|
||||
<Texture CRC="FE6E176E" Path="assets/textures/shared/object_spot09_objTex_014090"/>
|
||||
<Texture CRC="E5D71FA8" Path="assets/textures/shared/desert_colossus_oasis_water"/>
|
||||
<Texture CRC="F32E094B" Path="assets/textures/shared/rock_tex"/>
|
||||
<Texture CRC="1FC5A082" Path="assets/textures/shared/crater_rock"/>
|
||||
<Texture CRC="E24A95E5" Path="assets/textures/shared/tex_00000360"/>
|
||||
<Texture CRC="E298BE19" Path="assets/textures/shared/tex_000A30"/>
|
||||
<Texture CRC="09142C41" Path="assets/textures/shared/tex_000C30"/>
|
||||
<Texture CRC="FA88D2AE" Path="assets/textures/shared/tex_002DC0"/>
|
||||
<Texture CRC="104A3A15" Path="assets/textures/shared/tex_0035C0"/>
|
||||
<Texture CRC="E3F7787B" Path="assets/textures/shared/tex_0055C0"/>
|
||||
<Texture CRC="096DC6FA" Path="assets/textures/shared/tex_000078D8"/>
|
||||
<Texture CRC="12ABF7E4" Path="assets/textures/shared/tex_000080D8"/>
|
||||
<Texture CRC="15342705" Path="assets/textures/shared/tex_000082D8"/>
|
||||
<Texture CRC="EBBC47BE" Path="assets/textures/shared/tex_000084D8"/>
|
||||
<Texture CRC="1F4A182F" Path="assets/textures/shared/tex_000086D8"/>
|
||||
<Texture CRC="0955FF43" Path="assets/textures/shared/tex_00008AD8"/>
|
||||
<Texture CRC="F091DE25" Path="assets/textures/shared/tex_00008B58"/>
|
||||
<Texture CRC="EEDC8121" Path="assets/textures/shared/tex_00008B98"/>
|
||||
<Texture CRC="14157980" Path="assets/textures/shared/tex_00008D98"/>
|
||||
<Texture CRC="FCE55257" Path="assets/textures/shared/tex_00008DD8"/>
|
||||
<Texture CRC="16DF5B0E" Path="assets/textures/shared/tex_00008E58"/>
|
||||
<Texture CRC="09E8BCBA" Path="assets/textures/shared/tex_00008ED8"/>
|
||||
<Texture CRC="FBB42BE9" Path="assets/textures/shared/tex_000092D8"/>
|
||||
<Texture CRC="0AD02925" Path="assets/textures/shared/tex_00009458"/>
|
||||
<Texture CRC="F6CB0912" Path="assets/textures/shared/tex_00009498"/>
|
||||
<Texture CRC="0B37E721" Path="assets/textures/shared/tex_000094D8"/>
|
||||
<Texture CRC="074E3F53" Path="assets/textures/shared/tex_000098D8"/>
|
||||
<Texture CRC="E059933F" Path="assets/textures/shared/tex_0000C2D0"/>
|
||||
<Texture CRC="E7476112" Path="assets/textures/shared/tex_0000EA30"/>
|
||||
<Texture CRC="16A72FFA" Path="assets/textures/shared/tex_0000F230"/>
|
||||
<Texture CRC="FECF43DD" Path="assets/textures/shared/tex_000114A8"/>
|
||||
<Texture CRC="E44B8ECA" Path="assets/textures/shared/tlut_00007730"/>
|
||||
<Texture CRC="F0C1DC20" Path="assets/textures/shared/tex_00BA38"/>
|
||||
<Texture CRC="E6C06BA4" Path="assets/textures/shared/brick"/>
|
||||
<Texture CRC="07B1453C" Path="assets/textures/shared/wolfos_normal_nostril"/>
|
||||
<Texture CRC="0B6EBF87" Path="assets/textures/shared/back_of_hand"/>
|
||||
<Texture CRC="1F851EBC" Path="assets/textures/shared/blue_undershirt_gradient_1"/>
|
||||
<Texture CRC="EBF85021" Path="assets/textures/shared/blue_undershirt_gradient_2"/>
|
||||
<Texture CRC="E29A9DA3" Path="assets/textures/shared/boot"/>
|
||||
<Texture CRC="020ED164" Path="assets/textures/shared/boot_shaft"/>
|
||||
<Texture CRC="0B45B75D" Path="assets/textures/shared/hair"/>
|
||||
<Texture CRC="FAC9A306" Path="assets/textures/shared/pendant"/>
|
||||
<Texture CRC="0AD23E74" Path="assets/textures/shared/skin_gradient"/>
|
||||
<Texture CRC="F6D16BAA" Path="assets/textures/shared/ice_tex_1"/>
|
||||
<Texture CRC="E32C05B9" Path="assets/textures/shared/ovl_Boss_GanonTex_00E748"/>
|
||||
<Texture CRC="07F83D5D" Path="assets/textures/shared/ovl_Boss_GanonTex_01FFF8"/>
|
||||
<Texture CRC="FFDB3A20" Path="assets/textures/shared/bdan_room_1Tex_004CD0"/>
|
||||
<Texture CRC="E66ECCC5" Path="assets/textures/shared/bdan_room_2Tex_008DC8"/>
|
||||
<Texture CRC="09658910" Path="assets/textures/shared/bdan_room_4Tex_002A80"/>
|
||||
<Texture CRC="E0F4E7E2" Path="assets/textures/shared/bdan_room_4Tex_002E80"/>
|
||||
<Texture CRC="1D736F3D" Path="assets/textures/shared/bdan_room_4Tex_003680"/>
|
||||
<Texture CRC="122454CC" Path="assets/textures/shared/bdan_boss_room_0TLUT_001E38"/>
|
||||
<Texture CRC="149D94A9" Path="assets/textures/shared/Bmori1_room_0Tex_0084C8"/>
|
||||
<Texture CRC="E5FF0E61" Path="assets/textures/shared/Bmori1_room_10Tex_002250"/>
|
||||
<Texture CRC="FB250BBA" Path="assets/textures/shared/Bmori1_room_12Tex_004DF0"/>
|
||||
<Texture CRC="0C70CF5B" Path="assets/textures/shared/Bmori1_room_12Tex_0055F0"/>
|
||||
<Texture CRC="055E0FD2" Path="assets/textures/shared/Bmori1_room_12Tex_005DF0"/>
|
||||
<Texture CRC="FD68B889" Path="assets/textures/shared/Bmori1_room_15Tex_001290"/>
|
||||
<Texture CRC="FE6EC2FC" Path="assets/textures/shared/Bmori1_room_3Tex_0037E8"/>
|
||||
<Texture CRC="F7612ECC" Path="assets/textures/shared/Bmori1_room_3Tex_0038E8"/>
|
||||
<Texture CRC="1868B444" Path="assets/textures/shared/Bmori1_room_7Tex_007D60"/>
|
||||
<Texture CRC="EA698E6F" Path="assets/textures/shared/Bmori1_room_7Tex_008D60"/>
|
||||
<Texture CRC="FF382349" Path="assets/textures/shared/Bmori1_room_7Tex_009560"/>
|
||||
<Texture CRC="0E9B88C9" Path="assets/textures/shared/Bmori1_room_7Tex_00EF68"/>
|
||||
<Texture CRC="FFC7C0B0" Path="assets/textures/shared/Bmori1_room_7Tex_010F68"/>
|
||||
<Texture CRC="1BDC5AF4" Path="assets/textures/shared/night_entrance"/>
|
||||
<Texture CRC="0FADEF53" Path="assets/textures/shared/ddan_room_0Tex_016898"/>
|
||||
<Texture CRC="15CDC373" Path="assets/textures/shared/ddan_room_16Tex_002148"/>
|
||||
<Texture CRC="E6314100" Path="assets/textures/shared/ddan_room_16Tex_003948"/>
|
||||
<Texture CRC="ED19A083" Path="assets/textures/shared/ddan_room_2Tex_003A60"/>
|
||||
<Texture CRC="177A387B" Path="assets/textures/shared/ddan_room_7Tex_004EC8"/>
|
||||
<Texture CRC="16E7D8AD" Path="assets/textures/shared/ddan_room_7Tex_0056C8"/>
|
||||
<Texture CRC="F056905E" Path="assets/textures/shared/FIRE_bs_room_0Tex_003468"/>
|
||||
<Texture CRC="EFB00D73" Path="assets/textures/shared/FIRE_bs_room_0Tex_003868"/>
|
||||
<Texture CRC="0A45A765" Path="assets/textures/shared/FIRE_bs_room_0Tex_003C68"/>
|
||||
<Texture CRC="160F8D72" Path="assets/textures/shared/FIRE_bs_room_0Tex_004068"/>
|
||||
<Texture CRC="16A2A385" Path="assets/textures/shared/FIRE_bs_room_0TLUT_002E28"/>
|
||||
<Texture CRC="19492F7E" Path="assets/textures/shared/FIRE_bs_room_0TLUT_002E48"/>
|
||||
<Texture CRC="FE67513B" Path="assets/textures/shared/FIRE_bs_sceneTex_004400"/>
|
||||
<Texture CRC="E1112148" Path="assets/textures/shared/ganon_room_0Tex_004C68"/>
|
||||
<Texture CRC="1D96DDC1" Path="assets/textures/shared/ganon_room_0Tex_005468"/>
|
||||
<Texture CRC="FDD8FAFD" Path="assets/textures/shared/ganon_room_1Tex_006370"/>
|
||||
<Texture CRC="F937B4ED" Path="assets/textures/shared/ganon_room_2Tex_003DF0"/>
|
||||
<Texture CRC="F957C806" Path="assets/textures/shared/ganon_room_2Tex_0041F0"/>
|
||||
<Texture CRC="039FAC53" Path="assets/textures/shared/ganon_room_4Tex_005A68"/>
|
||||
<Texture CRC="1CE19C23" Path="assets/textures/shared/ganon_room_4Tex_006E68"/>
|
||||
<Texture CRC="E1E99F5E" Path="assets/textures/shared/ganon_room_4Tex_007E68"/>
|
||||
<Texture CRC="FAF99276" Path="assets/textures/shared/ganon_room_6Tex_007600"/>
|
||||
<Texture CRC="EBCEEDDE" Path="assets/textures/shared/ganon_room_6Tex_009398"/>
|
||||
<Texture CRC="F3198C9E" Path="assets/textures/shared/ganon_room_8Tex_005320"/>
|
||||
<Texture CRC="EAEBAD1E" Path="assets/textures/shared/ganon_room_8Tex_005360"/>
|
||||
<Texture CRC="F784855A" Path="assets/textures/shared/ganon_room_8Tex_0053E0"/>
|
||||
<Texture CRC="03A1DE68" Path="assets/textures/shared/ganon_room_8Tex_005FE0"/>
|
||||
<Texture CRC="F2D57B49" Path="assets/textures/shared/ganon_room_8Tex_0063E0"/>
|
||||
<Texture CRC="1802D1C4" Path="assets/textures/shared/ganon_room_9Tex_002920"/>
|
||||
<Texture CRC="EC6B7820" Path="assets/textures/shared/ganon_room_9Tex_002D20"/>
|
||||
<Texture CRC="0B1F299C" Path="assets/textures/shared/ganon_room_9Tex_003120"/>
|
||||
<Texture CRC="ED1D707D" Path="assets/textures/shared/ganon_room_9Tex_004520"/>
|
||||
<Texture CRC="1EA95659" Path="assets/textures/shared/ganon_room_9Tex_004D20"/>
|
||||
<Texture CRC="022E1BF9" Path="assets/textures/shared/ganon_room_9TLUT_001F18"/>
|
||||
<Texture CRC="F7DA8D0D" Path="assets/textures/shared/ganontika_room_12Tex_006260"/>
|
||||
<Texture CRC="FE1D6736" Path="assets/textures/shared/ganontika_room_12Tex_006A60"/>
|
||||
<Texture CRC="1C850DC7" Path="assets/textures/shared/ganontika_room_14Tex_004F88"/>
|
||||
<Texture CRC="EF1A2090" Path="assets/textures/shared/ganontika_room_14Tex_005F88"/>
|
||||
<Texture CRC="133F3E79" Path="assets/textures/shared/ganontika_room_18Tex_009910"/>
|
||||
<Texture CRC="F682F3AC" Path="assets/textures/shared/ganontika_room_1Tex_0109C0"/>
|
||||
<Texture CRC="F473A5A6" Path="assets/textures/shared/ganontika_room_1Tex_0139C0"/>
|
||||
<Texture CRC="F878F52F" Path="assets/textures/shared/ganontika_room_1Tex_0159C0"/>
|
||||
<Texture CRC="E75EA0A6" Path="assets/textures/shared/ganontika_room_1Tex_0169C0"/>
|
||||
<Texture CRC="0D45FFA1" Path="assets/textures/shared/ganontika_room_1Tex_0171C0"/>
|
||||
<Texture CRC="EE0C8482" Path="assets/textures/shared/ganontika_room_2Tex_0037D8"/>
|
||||
<Texture CRC="F14CEC9A" Path="assets/textures/shared/ganontika_room_2Tex_003FD8"/>
|
||||
<Texture CRC="1DEB710D" Path="assets/textures/shared/ganontika_room_2Tex_0057D8"/>
|
||||
<Texture CRC="17EB5C50" Path="assets/textures/shared/ganontika_room_5Tex_003B38"/>
|
||||
<Texture CRC="0821EBAF" Path="assets/textures/shared/ganontika_sceneTex_020B70"/>
|
||||
<Texture CRC="0C4C4E7A" Path="assets/textures/shared/ganon_boss_sceneTex_002C18"/>
|
||||
<Texture CRC="E6E33F16" Path="assets/textures/shared/ganon_demo_sceneTex_006B70"/>
|
||||
<Texture CRC="13FA05DA" Path="assets/textures/shared/ganon_demo_sceneTex_008770"/>
|
||||
<Texture CRC="0573B813" Path="assets/textures/shared/ganon_final_sceneTex_00BD80"/>
|
||||
<Texture CRC="0809C54B" Path="assets/textures/shared/ganon_final_sceneTex_010580"/>
|
||||
<Texture CRC="EBFA2BF7" Path="assets/textures/shared/ganon_sonogo_room_0Tex_005020"/>
|
||||
<Texture CRC="1E19EEF1" Path="assets/textures/shared/ganon_sonogo_room_1Tex_004148"/>
|
||||
<Texture CRC="E6756E4F" Path="assets/textures/shared/ganon_tou_room_0Tex_0124F0"/>
|
||||
<Texture CRC="1414164C" Path="assets/textures/shared/ganon_tou_room_0Tex_0125F0"/>
|
||||
<Texture CRC="EC97AEDA" Path="assets/textures/shared/gerudoway_room_1Tex_003710"/>
|
||||
<Texture CRC="FB2AED2A" Path="assets/textures/shared/gerudoway_room_1Tex_003F10"/>
|
||||
<Texture CRC="0E483D71" Path="assets/textures/shared/gerudoway_room_3Tex_0092A0"/>
|
||||
<Texture CRC="14136921" Path="assets/textures/shared/gerudoway_sceneTex_00A520"/>
|
||||
<Texture CRC="0CBC57C1" Path="assets/textures/shared/gerudoway_sceneTex_00A920"/>
|
||||
<Texture CRC="F54F1346" Path="assets/textures/shared/gerudoway_sceneTex_00D120"/>
|
||||
<Texture CRC="F41A1D0A" Path="assets/textures/shared/HIDAN_room_0Tex_004EC0"/>
|
||||
<Texture CRC="006E448A" Path="assets/textures/shared/HIDAN_room_10Tex_013298"/>
|
||||
<Texture CRC="FA6AE3E5" Path="assets/textures/shared/HIDAN_room_10Tex_013498"/>
|
||||
<Texture CRC="E34BC62B" Path="assets/textures/shared/HIDAN_room_10Tex_014498"/>
|
||||
<Texture CRC="F1AF129D" Path="assets/textures/shared/HIDAN_room_10Tex_015A98"/>
|
||||
<Texture CRC="F674F9BB" Path="assets/textures/shared/day_entrance"/>
|
||||
<Texture CRC="EF7F4204" Path="assets/textures/shared/ice_doukutu_room_0Tex_003F30"/>
|
||||
<Texture CRC="04A40EBE" Path="assets/textures/shared/ice_doukutu_room_0Tex_004730"/>
|
||||
<Texture CRC="EEB1927B" Path="assets/textures/shared/ice_doukutu_room_0Tex_005730"/>
|
||||
<Texture CRC="01ECCC43" Path="assets/textures/shared/night_entrance"/>
|
||||
<Texture CRC="1C3B02D1" Path="assets/textures/shared/jyasinboss_room_1Tex_003E38"/>
|
||||
<Texture CRC="E796DE50" Path="assets/textures/shared/jyasinboss_room_1Tex_004E38"/>
|
||||
<Texture CRC="090FAFEA" Path="assets/textures/shared/jyasinboss_room_1Tex_006638"/>
|
||||
<Texture CRC="F6A98667" Path="assets/textures/shared/jyasinboss_room_1Tex_007638"/>
|
||||
<Texture CRC="FFAB371F" Path="assets/textures/shared/jyasinzou_room_0Tex_00C928"/>
|
||||
<Texture CRC="1FBF47DF" Path="assets/textures/shared/jyasinzou_room_15Tex_005BB8"/>
|
||||
<Texture CRC="EDB05DFB" Path="assets/textures/shared/jyasinzou_room_25Tex_00BA68"/>
|
||||
<Texture CRC="1BCF4CB0" Path="assets/textures/shared/jyasinzou_room_25Tex_00DA68"/>
|
||||
<Texture CRC="1283B73F" Path="assets/textures/shared/jyasinzou_room_25Tex_00EE68"/>
|
||||
<Texture CRC="09E64C46" Path="assets/textures/shared/jyasinzou_room_25Tex_00F268"/>
|
||||
<Texture CRC="E4C33C7E" Path="assets/textures/shared/jyasinzou_room_25Tex_00F668"/>
|
||||
<Texture CRC="0A57EFD4" Path="assets/textures/shared/jyasinzou_room_25Tex_00FE68"/>
|
||||
<Texture CRC="F8E488B4" Path="assets/textures/shared/jyasinzou_room_25Tex_00FF68"/>
|
||||
<Texture CRC="F171C8C3" Path="assets/textures/shared/jyasinzou_room_25Tex_010368"/>
|
||||
<Texture CRC="0E92690C" Path="assets/textures/shared/jyasinzou_room_25Tex_010768"/>
|
||||
<Texture CRC="18CFA919" Path="assets/textures/shared/jyasinzou_room_25Tex_010B68"/>
|
||||
<Texture CRC="04B37939" Path="assets/textures/shared/jyasinzou_room_25Tex_010F68"/>
|
||||
<Texture CRC="E81726ED" Path="assets/textures/shared/men_room_0Tex_009138"/>
|
||||
<Texture CRC="F87A617C" Path="assets/textures/shared/men_room_0Tex_009D38"/>
|
||||
<Texture CRC="03159CBA" Path="assets/textures/shared/men_room_0Tex_00BD38"/>
|
||||
<Texture CRC="FACF6006" Path="assets/textures/shared/men_room_10Tex_002C58"/>
|
||||
<Texture CRC="E7CEF848" Path="assets/textures/shared/men_room_4Tex_005150"/>
|
||||
<Texture CRC="084BE393" Path="assets/textures/shared/men_room_5Tex_002CD8"/>
|
||||
<Texture CRC="E542ED36" Path="assets/textures/shared/MIZUsin_room_22Tex_0050E8"/>
|
||||
<Texture CRC="F89A0650" Path="assets/textures/shared/MIZUsin_room_22Tex_0058E8"/>
|
||||
<Texture CRC="0CE847B8" Path="assets/textures/shared/MIZUsin_room_22Tex_0060E8"/>
|
||||
<Texture CRC="026E66BA" Path="assets/textures/shared/MIZUsin_room_22Tex_0080E8"/>
|
||||
<Texture CRC="1B7FBFA8" Path="assets/textures/shared/ydan_room_0Tex_008160"/>
|
||||
<Texture CRC="F3D559C7" Path="assets/textures/shared/ydan_room_0Tex_00AD60"/>
|
||||
<Texture CRC="1CC34199" Path="assets/textures/shared/ydan_room_0Tex_00D960"/>
|
||||
<Texture CRC="FBCEFFA1" Path="assets/textures/shared/ydan_room_0Tex_00E960"/>
|
||||
<Texture CRC="102EAF3C" Path="assets/textures/shared/ydan_room_0Tex_00F960"/>
|
||||
<Texture CRC="ECA63B5E" Path="assets/textures/shared/ydan_room_11Tex_0044D8"/>
|
||||
<Texture CRC="E23C2118" Path="assets/textures/shared/ydan_room_3Tex_0084B0"/>
|
||||
<Texture CRC="13A18146" Path="assets/textures/shared/ydan_room_3Tex_00B4B0"/>
|
||||
<Texture CRC="EF1872E1" Path="assets/textures/shared/ydan_room_6Tex_003EC0"/>
|
||||
<Texture CRC="04402BB2" Path="assets/textures/shared/bowling_sceneTex_009120"/>
|
||||
<Texture CRC="FCCF8C69" Path="assets/textures/shared/daiyousei_izumi_sceneTex_004800"/>
|
||||
<Texture CRC="0270DB33" Path="assets/textures/shared/daiyousei_izumi_sceneTex_005000"/>
|
||||
<Texture CRC="E7D27EE8" Path="assets/textures/shared/daiyousei_izumi_sceneTex_005800"/>
|
||||
<Texture CRC="1116A474" Path="assets/textures/shared/daiyousei_izumi_sceneTex_006000"/>
|
||||
<Texture CRC="F47075BE" Path="assets/textures/shared/daiyousei_izumi_sceneTex_007000"/>
|
||||
<Texture CRC="F25B1C97" Path="assets/textures/shared/daiyousei_izumi_sceneTex_008000"/>
|
||||
<Texture CRC="1509487B" Path="assets/textures/shared/daiyousei_izumi_sceneTex_009000"/>
|
||||
<Texture CRC="173118E0" Path="assets/textures/shared/daiyousei_izumi_sceneTex_00A800"/>
|
||||
<Texture CRC="1031CF12" Path="assets/textures/shared/daiyousei_izumi_sceneTex_00B000"/>
|
||||
<Texture CRC="EF1A97CD" Path="assets/textures/shared/hairal_niwa_sceneTex_005B90"/>
|
||||
<Texture CRC="1A6C8EAA" Path="assets/textures/shared/hairal_niwa_sceneTex_009B90"/>
|
||||
<Texture CRC="FA1FA822" Path="assets/textures/shared/hairal_niwa_sceneTex_00AB90"/>
|
||||
<Texture CRC="E180113F" Path="assets/textures/shared/hairal_niwa_sceneTex_00B390"/>
|
||||
<Texture CRC="15E347EF" Path="assets/textures/shared/hairal_niwa_sceneTex_00C390"/>
|
||||
<Texture CRC="F243FDE6" Path="assets/textures/shared/hairal_niwa_sceneTex_00CB90"/>
|
||||
<Texture CRC="1A6E654C" Path="assets/textures/shared/hairal_niwa_sceneTex_00DB90"/>
|
||||
<Texture CRC="E2CCFF01" Path="assets/textures/shared/hakasitarelay_room_0Tex_004448"/>
|
||||
<Texture CRC="F55F267A" Path="assets/textures/shared/hakasitarelay_room_0Tex_004C48"/>
|
||||
<Texture CRC="1475DFC1" Path="assets/textures/shared/hakasitarelay_room_5Tex_001C48"/>
|
||||
<Texture CRC="FE5FCC6C" Path="assets/textures/shared/hylia_labo_sceneTex_00A090"/>
|
||||
<Texture CRC="E7B2C99B" Path="assets/textures/shared/hylia_labo_sceneTex_010090"/>
|
||||
<Texture CRC="E709DC89" Path="assets/textures/shared/mahouya_sceneTex_008A20"/>
|
||||
<Texture CRC="F95560D1" Path="assets/textures/shared/mahouya_sceneTex_009A20"/>
|
||||
<Texture CRC="E97CF75C" Path="assets/textures/shared/syatekijyou_sceneTex_005CC0"/>
|
||||
<Texture CRC="F5A93AC0" Path="assets/textures/shared/syatekijyou_sceneTex_00B2C0"/>
|
||||
<Texture CRC="1431869F" Path="assets/textures/shared/takaraya_room_1Tex_0017F8"/>
|
||||
<Texture CRC="ED4B9B85" Path="assets/textures/shared/takaraya_room_3Tex_001818"/>
|
||||
<Texture CRC="065983BD" Path="assets/textures/shared/takaraya_room_3Tex_002018"/>
|
||||
<Texture CRC="FBF2900E" Path="assets/textures/shared/takaraya_room_4Tex_002820"/>
|
||||
<Texture CRC="04B5CAB9" Path="assets/textures/shared/takaraya_sceneTex_0069B0"/>
|
||||
<Texture CRC="1EAD2B3F" Path="assets/textures/shared/yousei_izumi_tate_sceneTex_002810"/>
|
||||
<Texture CRC="10AC997A" Path="assets/textures/shared/yousei_izumi_tate_sceneTex_004810"/>
|
||||
<Texture CRC="FA386200" Path="assets/textures/shared/yousei_izumi_tate_sceneTex_005810"/>
|
||||
<Texture CRC="F5588B60" Path="assets/textures/shared/yousei_izumi_tate_sceneTex_006010"/>
|
||||
<Texture CRC="F1079CA6" Path="assets/textures/shared/hakaana_ouke_room_0Tex_005730"/>
|
||||
<Texture CRC="15FF3E57" Path="assets/textures/shared/kakusiana_room_0Tex_004AA0"/>
|
||||
<Texture CRC="074D1FBE" Path="assets/textures/shared/kakusiana_room_11Tex_003048"/>
|
||||
<Texture CRC="026535FE" Path="assets/textures/shared/kakusiana_room_13Tex_001950"/>
|
||||
<Texture CRC="EC4396CB" Path="assets/textures/shared/kakusiana_room_13Tex_002950"/>
|
||||
<Texture CRC="032612AE" Path="assets/textures/shared/kakusiana_room_1Tex_002A18"/>
|
||||
<Texture CRC="19060D66" Path="assets/textures/shared/kinsuta_room_0Tex_009D10"/>
|
||||
<Texture CRC="051A2F57" Path="assets/textures/shared/turibori_sceneTex_006BE0"/>
|
||||
<Texture CRC="164EE952" Path="assets/textures/shared/souko_room_0Tex_005CF8"/>
|
||||
<Texture CRC="E5EA8DF4" Path="assets/textures/shared/souko_room_0Tex_006CF8"/>
|
||||
<Texture CRC="FE9507F9" Path="assets/textures/shared/souko_room_0Tex_0078F8"/>
|
||||
<Texture CRC="0B9E9000" Path="assets/textures/shared/souko_room_1Tex_005118"/>
|
||||
<Texture CRC="0931555F" Path="assets/textures/shared/spot00_sceneTex_015E98"/>
|
||||
<Texture CRC="19B89C1E" Path="assets/textures/shared/spot00_sceneTex_019B98"/>
|
||||
<Texture CRC="EEDDBDB2" Path="assets/textures/shared/spot00_sceneTex_01C198"/>
|
||||
<Texture CRC="F3FED154" Path="assets/textures/shared/night_window"/>
|
||||
<Texture CRC="17AC7C31" Path="assets/textures/shared/spot01_sceneTex_015350"/>
|
||||
<Texture CRC="0D064FC5" Path="assets/textures/shared/spot01_sceneTex_01AF50"/>
|
||||
<Texture CRC="0DE5167D" Path="assets/textures/shared/spot02_room_1Tex_00CD08"/>
|
||||
<Texture CRC="FA142018" Path="assets/textures/shared/spot02_room_1Tex_00DD08"/>
|
||||
<Texture CRC="E4A977DC" Path="assets/textures/shared/spot02_room_1Tex_015D08"/>
|
||||
<Texture CRC="E3942257" Path="assets/textures/shared/spot02_room_1Tex_017988"/>
|
||||
<Texture CRC="F2CAD1EA" Path="assets/textures/shared/spot02_sceneTex_00B880"/>
|
||||
<Texture CRC="0E74591F" Path="assets/textures/shared/spot03_sceneTex_007158"/>
|
||||
<Texture CRC="00EADDE9" Path="assets/textures/shared/spot04_room_0Tex_00E108"/>
|
||||
<Texture CRC="FA47E062" Path="assets/textures/shared/spot04_room_0Tex_011F08"/>
|
||||
<Texture CRC="1678CB21" Path="assets/textures/shared/spot04_room_0Tex_012F08"/>
|
||||
<Texture CRC="01683929" Path="assets/textures/shared/spot04_room_0Tex_013108"/>
|
||||
<Texture CRC="067BB229" Path="assets/textures/shared/spot04_room_0Tex_013708"/>
|
||||
<Texture CRC="03D87A4A" Path="assets/textures/shared/spot04_room_0Tex_013F08"/>
|
||||
<Texture CRC="E58EA3E2" Path="assets/textures/shared/spot04_room_0Tex_014308"/>
|
||||
<Texture CRC="EAE00973" Path="assets/textures/shared/spot04_room_0Tex_015B08"/>
|
||||
<Texture CRC="F4ECF576" Path="assets/textures/shared/spot04_room_0Tex_017108"/>
|
||||
<Texture CRC="0FC9BA00" Path="assets/textures/shared/spot04_room_0Tex_01A290"/>
|
||||
<Texture CRC="ED61909F" Path="assets/textures/shared/spot05_sceneTex_012360"/>
|
||||
<Texture CRC="095BF721" Path="assets/textures/shared/spot05_sceneTex_012B60"/>
|
||||
<Texture CRC="18624125" Path="assets/textures/shared/day_entrance"/>
|
||||
<Texture CRC="1E231A50" Path="assets/textures/shared/spot07_room_1Tex_009BD8"/>
|
||||
<Texture CRC="11DAEF83" Path="assets/textures/shared/spot09_sceneTex_004460"/>
|
||||
<Texture CRC="F1435125" Path="assets/textures/shared/spot10_room_1Tex_003FA0"/>
|
||||
<Texture CRC="E1DD509D" Path="assets/textures/shared/spot10_room_1Tex_005FA0"/>
|
||||
<Texture CRC="1670C796" Path="assets/textures/shared/spot10_room_1Tex_007C30"/>
|
||||
<Texture CRC="E2117A16" Path="assets/textures/shared/spot10_room_2Tex_0023E8"/>
|
||||
<Texture CRC="F6CD3EBE" Path="assets/textures/shared/spot10_room_2Tex_0033E8"/>
|
||||
<Texture CRC="E07F7031" Path="assets/textures/shared/spot10_room_2Tex_0043E8"/>
|
||||
<Texture CRC="093B9736" Path="assets/textures/shared/spot11_sceneTex_010CE0"/>
|
||||
<Texture CRC="E1DE2499" Path="assets/textures/shared/gSpot12_00DE78Tex"/>
|
||||
<Texture CRC="0C51F88C" Path="assets/textures/shared/spot12_room_0Tex_008AB0"/>
|
||||
<Texture CRC="FC5268BF" Path="assets/textures/shared/spot12_room_0Tex_00C6B0"/>
|
||||
<Texture CRC="06111A72" Path="assets/textures/shared/spot12_room_0Tex_00EAB0"/>
|
||||
<Texture CRC="07DCC6CC" Path="assets/textures/shared/spot12_room_0TLUT_008A90"/>
|
||||
<Texture CRC="19902C03" Path="assets/textures/shared/spot12_sceneTex_007678"/>
|
||||
<Texture CRC="E1966A84" Path="assets/textures/shared/spot12_sceneTex_008E78"/>
|
||||
<Texture CRC="EA5FB636" Path="assets/textures/shared/spot12_sceneTLUT_006650"/>
|
||||
<Texture CRC="F406FE30" Path="assets/textures/shared/spot16_sceneTex_011798"/>
|
||||
<Texture CRC="186ACD1D" Path="assets/textures/shared/spot17_room_1Tex_00F4D8"/>
|
||||
<Texture CRC="1EDAC566" Path="assets/textures/shared/spot18_room_0Tex_004960"/>
|
||||
<Texture CRC="0C1A5B4A" Path="assets/textures/shared/spot18_room_0Tex_005160"/>
|
||||
<Texture CRC="F1D9EAA3" Path="assets/textures/shared/spot18_room_0Tex_005560"/>
|
||||
<Texture CRC="1B64BF02" Path="assets/textures/shared/spot18_room_1Tex_002868"/>
|
||||
<Texture CRC="1CAAD361" Path="assets/textures/shared/spot18_room_1Tex_003068"/>
|
||||
<Texture CRC="10B77A2A" Path="assets/textures/shared/syotes_room_0Tex_0039E8"/>
|
||||
<Texture CRC="1718FD0E" Path="assets/textures/shared/syotes_room_0Tex_00A9E8"/>
|
||||
<Texture CRC="17FA6F46" Path="assets/textures/shared/know_it_all_bros_house2"/>
|
||||
<Texture CRC="03FF772F" Path="assets/textures/shared/know_it_all_bros_house2_tlut"/>
|
||||
<Texture CRC="F0A5349C" Path="assets/textures/shared/num_7_fra"/>
|
||||
<Texture CRC="EE77493E" Path="assets/textures/shared/put_away_ger"/>
|
||||
<Texture CRC="ED123044" Path="assets/textures/shared/stop_eng"/>
|
||||
<Texture CRC="E93EBAAC" Path="assets/textures/shared/pause_save_2_0_ger"/>
|
||||
<Texture CRC="E7A67A7F" Path="assets/textures/shared/cucco_icon"/>
|
||||
<Texture CRC="0C1D4804" Path="assets/textures/shared/pocket_egg"/>
|
||||
<Texture CRC="FAA79704" Path="assets/textures/shared/bomb_item_name_fra"/>
|
||||
<Texture CRC="E8908EDA" Path="assets/textures/shared/haunted_wasteland_minimap"/>
|
||||
<Texture CRC="FFBFEAD1" Path="assets/textures/shared/fire_temple_room_13_floor_3_minimap"/>
|
||||
<Texture CRC="E17C45AB" Path="assets/textures/shared/fire_temple_room_5_floor_3_minimap"/>
|
||||
<Texture CRC="19FCCE06" Path="assets/textures/shared/spirit_temple_room_19_minimap"/>
|
||||
<Texture CRC="1194CF22" Path="assets/textures/shared/water_temple_room_12_basement_1_minimap"/>
|
||||
<Texture CRC="117BE77F" Path="assets/textures/shared/water_temple_room_14_basement_1_minimap"/>
|
||||
<Texture CRC="EE5421F6" Path="assets/textures/shared/water_temple_room_15_basement_1_minimap"/>
|
||||
<Texture CRC="F089CFF3" Path="assets/textures/shared/water_temple_room_1_basement_1_minimap"/>
|
||||
<Texture CRC="0E364878" Path="assets/textures/shared/water_temple_room_21_floor_1_minimap"/>
|
||||
<Texture CRC="0698CC33" Path="assets/textures/shared/water_temple_room_5_floor_1_minimap"/>
|
||||
<Texture CRC="13324501" Path="assets/textures/shared/water_temple_room_6_floor_2_minimap"/>
|
||||
<Texture CRC="1B45A7DD" Path="assets/textures/shared/water_temple_room_9_basement_1_minimap"/>
|
||||
<Texture CRC="12D4F84F" Path="assets/textures/shared/msg_char_20_space"/>
|
||||
<Texture CRC="1DEA6483" Path="assets/textures/shared/name_eng"/>
|
||||
<Texture CRC="095A9A1C" Path="assets/textures/shared/no_file_to_copy_ger"/>
|
||||
<Texture CRC="00C03B39" Path="assets/textures/shared/which_file_1_ger"/>
|
||||
</Root>
|
9
OTRExporter/LICENSE
Normal file
@ -0,0 +1,9 @@
|
||||
Copyright (c) 2022 Harbour Masters
|
||||
|
||||
MIT License
|
||||
|
||||
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.
|
68
OTRExporter/OTRExporter.sln
Normal file
@ -0,0 +1,68 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.30320.27
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OTRExporter", "OTRExporter\OTRExporter.vcxproj", "{A6103FD3-0709-4FC7-B066-1A6E056D6306}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{6DA9B521-65B7-41E2-8F8A-F0451CC18ED8} = {6DA9B521-65B7-41E2-8F8A-F0451CC18ED8}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libultraship", "..\libultraship\libultraship\libultraship.vcxproj", "{6DA9B521-65B7-41E2-8F8A-F0451CC18ED8}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZAPD", "..\ZAPDTR\ZAPD\ZAPD.vcxproj", "{B53F9E5B-0A58-4BAE-9AFE-856C8CBB8D36}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{6DA9B521-65B7-41E2-8F8A-F0451CC18ED8} = {6DA9B521-65B7-41E2-8F8A-F0451CC18ED8}
|
||||
{A2E01C3E-D647-45D1-9788-043DEBC1A908} = {A2E01C3E-D647-45D1-9788-043DEBC1A908}
|
||||
{A6103FD3-0709-4FC7-B066-1A6E056D6306} = {A6103FD3-0709-4FC7-B066-1A6E056D6306}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZAPDUtils", "..\ZAPDTR\ZAPDUtils\ZAPDUtils.vcxproj", "{A2E01C3E-D647-45D1-9788-043DEBC1A908}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{A6103FD3-0709-4FC7-B066-1A6E056D6306}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{A6103FD3-0709-4FC7-B066-1A6E056D6306}.Debug|x64.Build.0 = Debug|x64
|
||||
{A6103FD3-0709-4FC7-B066-1A6E056D6306}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{A6103FD3-0709-4FC7-B066-1A6E056D6306}.Debug|x86.Build.0 = Debug|Win32
|
||||
{A6103FD3-0709-4FC7-B066-1A6E056D6306}.Release|x64.ActiveCfg = Release|x64
|
||||
{A6103FD3-0709-4FC7-B066-1A6E056D6306}.Release|x64.Build.0 = Release|x64
|
||||
{A6103FD3-0709-4FC7-B066-1A6E056D6306}.Release|x86.ActiveCfg = Release|Win32
|
||||
{A6103FD3-0709-4FC7-B066-1A6E056D6306}.Release|x86.Build.0 = Release|Win32
|
||||
{6DA9B521-65B7-41E2-8F8A-F0451CC18ED8}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{6DA9B521-65B7-41E2-8F8A-F0451CC18ED8}.Debug|x64.Build.0 = Debug|x64
|
||||
{6DA9B521-65B7-41E2-8F8A-F0451CC18ED8}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{6DA9B521-65B7-41E2-8F8A-F0451CC18ED8}.Debug|x86.Build.0 = Debug|Win32
|
||||
{6DA9B521-65B7-41E2-8F8A-F0451CC18ED8}.Release|x64.ActiveCfg = Release|x64
|
||||
{6DA9B521-65B7-41E2-8F8A-F0451CC18ED8}.Release|x64.Build.0 = Release|x64
|
||||
{6DA9B521-65B7-41E2-8F8A-F0451CC18ED8}.Release|x86.ActiveCfg = Release|Win32
|
||||
{6DA9B521-65B7-41E2-8F8A-F0451CC18ED8}.Release|x86.Build.0 = Release|Win32
|
||||
{B53F9E5B-0A58-4BAE-9AFE-856C8CBB8D36}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{B53F9E5B-0A58-4BAE-9AFE-856C8CBB8D36}.Debug|x64.Build.0 = Debug|x64
|
||||
{B53F9E5B-0A58-4BAE-9AFE-856C8CBB8D36}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{B53F9E5B-0A58-4BAE-9AFE-856C8CBB8D36}.Debug|x86.Build.0 = Debug|Win32
|
||||
{B53F9E5B-0A58-4BAE-9AFE-856C8CBB8D36}.Release|x64.ActiveCfg = Release|x64
|
||||
{B53F9E5B-0A58-4BAE-9AFE-856C8CBB8D36}.Release|x64.Build.0 = Release|x64
|
||||
{B53F9E5B-0A58-4BAE-9AFE-856C8CBB8D36}.Release|x86.ActiveCfg = Release|Win32
|
||||
{B53F9E5B-0A58-4BAE-9AFE-856C8CBB8D36}.Release|x86.Build.0 = Release|Win32
|
||||
{A2E01C3E-D647-45D1-9788-043DEBC1A908}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{A2E01C3E-D647-45D1-9788-043DEBC1A908}.Debug|x64.Build.0 = Debug|x64
|
||||
{A2E01C3E-D647-45D1-9788-043DEBC1A908}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{A2E01C3E-D647-45D1-9788-043DEBC1A908}.Debug|x86.Build.0 = Debug|Win32
|
||||
{A2E01C3E-D647-45D1-9788-043DEBC1A908}.Release|x64.ActiveCfg = Release|x64
|
||||
{A2E01C3E-D647-45D1-9788-043DEBC1A908}.Release|x64.Build.0 = Release|x64
|
||||
{A2E01C3E-D647-45D1-9788-043DEBC1A908}.Release|x86.ActiveCfg = Release|Win32
|
||||
{A2E01C3E-D647-45D1-9788-043DEBC1A908}.Release|x86.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {DCE19FF1-37C0-49CD-915A-DD695E15F00B}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
70
OTRExporter/OTRExporter/AnimationExporter.cpp
Normal file
@ -0,0 +1,70 @@
|
||||
#include "AnimationExporter.h"
|
||||
#include <Animation.h>
|
||||
|
||||
void OTRExporter_Animation::Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer)
|
||||
{
|
||||
ZAnimation* anim = (ZAnimation*)res;
|
||||
|
||||
WriteHeader(res, outPath, writer, Ship::ResourceType::Animation);
|
||||
|
||||
ZNormalAnimation* normalAnim = dynamic_cast<ZNormalAnimation*>(anim);
|
||||
ZCurveAnimation* curveAnim = dynamic_cast<ZCurveAnimation*>(anim);
|
||||
ZLinkAnimation* linkAnim = dynamic_cast<ZLinkAnimation*>(anim);
|
||||
if (linkAnim != nullptr)
|
||||
{
|
||||
writer->Write((uint32_t)Ship::AnimationType::Link);
|
||||
writer->Write((uint16_t)linkAnim->frameCount);
|
||||
writer->Write((uint32_t)linkAnim->segmentAddress);
|
||||
}
|
||||
else if (curveAnim != nullptr)
|
||||
{
|
||||
writer->Write((uint32_t)Ship::AnimationType::Curve);
|
||||
writer->Write((uint16_t)curveAnim->frameCount);
|
||||
|
||||
writer->Write((uint32_t)curveAnim->refIndexArr.size());
|
||||
|
||||
for (auto val : curveAnim->refIndexArr)
|
||||
writer->Write(val);
|
||||
|
||||
writer->Write((uint32_t)curveAnim->transformDataArr.size());
|
||||
|
||||
for (auto val : curveAnim->transformDataArr)
|
||||
{
|
||||
writer->Write(val.unk_00);
|
||||
writer->Write(val.unk_02);
|
||||
writer->Write(val.unk_04);
|
||||
writer->Write(val.unk_06);
|
||||
writer->Write(val.unk_08);
|
||||
}
|
||||
|
||||
writer->Write((uint32_t)curveAnim->copyValuesArr.size());
|
||||
|
||||
for (auto val : curveAnim->copyValuesArr)
|
||||
writer->Write(val);
|
||||
}
|
||||
else if (normalAnim != nullptr)
|
||||
{
|
||||
writer->Write((uint32_t)Ship::AnimationType::Normal);
|
||||
writer->Write((uint16_t)normalAnim->frameCount);
|
||||
|
||||
writer->Write((uint32_t)normalAnim->rotationValues.size());
|
||||
|
||||
for (int i = 0; i < normalAnim->rotationValues.size(); i++)
|
||||
writer->Write(normalAnim->rotationValues[i]);
|
||||
|
||||
writer->Write((uint32_t)normalAnim->rotationIndices.size());
|
||||
|
||||
for (int i = 0; i < normalAnim->rotationIndices.size(); i++)
|
||||
{
|
||||
writer->Write(normalAnim->rotationIndices[i].x);
|
||||
writer->Write(normalAnim->rotationIndices[i].y);
|
||||
writer->Write(normalAnim->rotationIndices[i].z);
|
||||
}
|
||||
|
||||
writer->Write(normalAnim->limit);
|
||||
}
|
||||
else
|
||||
{
|
||||
writer->Write((uint32_t)Ship::AnimationType::Legacy);
|
||||
}
|
||||
}
|
13
OTRExporter/OTRExporter/AnimationExporter.h
Normal file
@ -0,0 +1,13 @@
|
||||
#pragma once
|
||||
|
||||
#include "ZResource.h"
|
||||
#include "ZTexture.h"
|
||||
#include "ZAnimation.h"
|
||||
#include "Exporter.h"
|
||||
#include <Utils/BinaryWriter.h>
|
||||
|
||||
class OTRExporter_Animation : public OTRExporter
|
||||
{
|
||||
public:
|
||||
virtual void Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer) override;
|
||||
};
|
104
OTRExporter/OTRExporter/ArrayExporter.cpp
Normal file
@ -0,0 +1,104 @@
|
||||
#include "ArrayExporter.h"
|
||||
#include "VtxExporter.h"
|
||||
#include <ZVector.h>
|
||||
void OTRExporter_Array::Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer)
|
||||
{
|
||||
ZArray* arr = (ZArray*)res;
|
||||
|
||||
WriteHeader(res, outPath, writer, Ship::ResourceType::Array);
|
||||
|
||||
writer->Write((uint32_t)arr->resList[0]->GetResourceType());
|
||||
writer->Write((uint32_t)arr->arrayCnt);
|
||||
|
||||
for (int i = 0; i < arr->arrayCnt; i++)
|
||||
{
|
||||
if (arr->resList[i]->GetResourceType() == ZResourceType::Vertex)
|
||||
{
|
||||
ZVtx* vtx = (ZVtx*)arr->resList[i];
|
||||
writer->Write(vtx->x);
|
||||
writer->Write(vtx->y);
|
||||
writer->Write(vtx->z);
|
||||
writer->Write(vtx->flag);
|
||||
writer->Write(vtx->s);
|
||||
writer->Write(vtx->t);
|
||||
writer->Write(vtx->r);
|
||||
writer->Write(vtx->g);
|
||||
writer->Write(vtx->b);
|
||||
writer->Write(vtx->a);
|
||||
}
|
||||
else if (arr->resList[i]->GetResourceType() == ZResourceType::Vector)
|
||||
{
|
||||
ZVector* vec = (ZVector*)arr->resList[i];
|
||||
writer->Write((uint32_t)vec->scalarType);
|
||||
writer->Write((uint32_t)vec->dimensions);
|
||||
|
||||
for (int k = 0; k < vec->dimensions; k++)
|
||||
{
|
||||
// OTRTODO: Duplicate code here. Cleanup at a later date...
|
||||
switch (vec->scalarType)
|
||||
{
|
||||
case ZScalarType::ZSCALAR_U8:
|
||||
writer->Write(vec->scalars[k].scalarData.u8);
|
||||
break;
|
||||
case ZScalarType::ZSCALAR_S8:
|
||||
writer->Write(vec->scalars[k].scalarData.s8);
|
||||
break;
|
||||
case ZScalarType::ZSCALAR_U16:
|
||||
writer->Write(vec->scalars[k].scalarData.u16);
|
||||
break;
|
||||
case ZScalarType::ZSCALAR_S16:
|
||||
writer->Write(vec->scalars[k].scalarData.s16);
|
||||
break;
|
||||
case ZScalarType::ZSCALAR_S32:
|
||||
writer->Write(vec->scalars[k].scalarData.s32);
|
||||
break;
|
||||
case ZScalarType::ZSCALAR_U32:
|
||||
writer->Write(vec->scalars[k].scalarData.u32);
|
||||
break;
|
||||
case ZScalarType::ZSCALAR_S64:
|
||||
writer->Write(vec->scalars[k].scalarData.s64);
|
||||
break;
|
||||
case ZScalarType::ZSCALAR_U64:
|
||||
writer->Write(vec->scalars[k].scalarData.u64);
|
||||
break;
|
||||
// OTRTODO: ADD OTHER TYPES
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ZScalar* scal = (ZScalar*)arr->resList[i];
|
||||
|
||||
writer->Write((uint32_t)scal->scalarType);
|
||||
|
||||
switch (scal->scalarType)
|
||||
{
|
||||
case ZScalarType::ZSCALAR_U8:
|
||||
writer->Write(scal->scalarData.u8);
|
||||
break;
|
||||
case ZScalarType::ZSCALAR_S8:
|
||||
writer->Write(scal->scalarData.s8);
|
||||
break;
|
||||
case ZScalarType::ZSCALAR_U16:
|
||||
writer->Write(scal->scalarData.u16);
|
||||
break;
|
||||
case ZScalarType::ZSCALAR_S16:
|
||||
writer->Write(scal->scalarData.s16);
|
||||
break;
|
||||
case ZScalarType::ZSCALAR_S32:
|
||||
writer->Write(scal->scalarData.s32);
|
||||
break;
|
||||
case ZScalarType::ZSCALAR_U32:
|
||||
writer->Write(scal->scalarData.u32);
|
||||
break;
|
||||
case ZScalarType::ZSCALAR_S64:
|
||||
writer->Write(scal->scalarData.s64);
|
||||
break;
|
||||
case ZScalarType::ZSCALAR_U64:
|
||||
writer->Write(scal->scalarData.u64);
|
||||
break;
|
||||
// OTRTODO: ADD OTHER TYPES
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
12
OTRExporter/OTRExporter/ArrayExporter.h
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
#include "ZResource.h"
|
||||
#include "ZArray.h"
|
||||
#include "Exporter.h"
|
||||
#include <Utils/BinaryWriter.h>
|
||||
|
||||
class OTRExporter_Array : public OTRExporter
|
||||
{
|
||||
public:
|
||||
virtual void Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer) override;
|
||||
|
||||
};
|
10
OTRExporter/OTRExporter/BackgroundExporter.cpp
Normal file
@ -0,0 +1,10 @@
|
||||
#include "BackgroundExporter.h"
|
||||
#include "../ZAPD/ZFile.h"
|
||||
|
||||
void OTRExporter_Background::Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer)
|
||||
{
|
||||
ZBackground* bg = (ZBackground*)res;
|
||||
|
||||
auto data = bg->parent->GetRawData();
|
||||
writer->Write((char*)data.data() + bg->GetRawDataIndex(), bg->GetRawDataSize());
|
||||
}
|
12
OTRExporter/OTRExporter/BackgroundExporter.h
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "ZResource.h"
|
||||
#include "ZBackground.h"
|
||||
#include "Exporter.h"
|
||||
#include <Utils/BinaryWriter.h>
|
||||
|
||||
class OTRExporter_Background : public OTRExporter
|
||||
{
|
||||
public:
|
||||
virtual void Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer) override;
|
||||
};
|
21
OTRExporter/OTRExporter/BlobExporter.cpp
Normal file
@ -0,0 +1,21 @@
|
||||
#include "BlobExporter.h"
|
||||
#include "../ZAPD/ZFile.h"
|
||||
|
||||
void OTRExporter_Blob::Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer)
|
||||
{
|
||||
ZBlob* blob = (ZBlob*)res;
|
||||
|
||||
WriteHeader(blob, outPath, writer, Ship::ResourceType::Blob);
|
||||
|
||||
auto start = std::chrono::steady_clock::now();
|
||||
|
||||
writer->Write((uint32_t)blob->GetRawDataSize());
|
||||
|
||||
auto data = blob->parent->GetRawData();
|
||||
|
||||
for (size_t i = blob->GetRawDataIndex(); i < blob->GetRawDataIndex() + blob->GetRawDataSize(); i++)
|
||||
writer->Write(data[i]);
|
||||
|
||||
auto end = std::chrono::steady_clock::now();
|
||||
size_t diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
|
||||
}
|
12
OTRExporter/OTRExporter/BlobExporter.h
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "ZResource.h"
|
||||
#include "ZBlob.h"
|
||||
#include "Exporter.h"
|
||||
#include <Utils/BinaryWriter.h>
|
||||
|
||||
class OTRExporter_Blob : public OTRExporter
|
||||
{
|
||||
public:
|
||||
virtual void Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer) override;
|
||||
};
|
82
OTRExporter/OTRExporter/CollisionExporter.cpp
Normal file
@ -0,0 +1,82 @@
|
||||
#include "CollisionExporter.h"
|
||||
#include <Resource.h>
|
||||
|
||||
void OTRExporter_Collision::Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer)
|
||||
{
|
||||
ZCollisionHeader* col = (ZCollisionHeader*)res;
|
||||
|
||||
WriteHeader(res, outPath, writer, Ship::ResourceType::CollisionHeader);
|
||||
|
||||
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((uint32_t)col->vertices.size());
|
||||
|
||||
for (uint16_t i = 0; i < col->vertices.size(); i++)
|
||||
{
|
||||
writer->Write(col->vertices[i].scalars[0].scalarData.s16);
|
||||
writer->Write(col->vertices[i].scalars[1].scalarData.s16);
|
||||
writer->Write(col->vertices[i].scalars[2].scalarData.s16);
|
||||
}
|
||||
|
||||
writer->Write((uint32_t)col->polygons.size());
|
||||
|
||||
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->Write((uint32_t)col->polygonTypes.size());
|
||||
|
||||
for (uint16_t i = 0; i < col->polygonTypes.size(); i++)
|
||||
writer->Write(col->polygonTypes[i]);
|
||||
|
||||
writer->Write((uint32_t)col->camData->entries.size());
|
||||
|
||||
for (auto entry : col->camData->entries)
|
||||
{
|
||||
auto camPosDecl = col->parent->GetDeclarationRanged(Seg2Filespace(entry->cameraPosDataSeg, col->parent->baseAddress));
|
||||
|
||||
int idx = 0;
|
||||
|
||||
if (camPosDecl != nullptr)
|
||||
idx = ((entry->cameraPosDataSeg & 0x00FFFFFF) - camPosDecl->address) / 6;
|
||||
|
||||
writer->Write(entry->cameraSType);
|
||||
writer->Write(entry->numData);
|
||||
writer->Write((uint32_t)idx);
|
||||
}
|
||||
|
||||
writer->Write((uint32_t)col->camData->cameraPositionData.size());
|
||||
|
||||
for (auto entry : col->camData->cameraPositionData)
|
||||
{
|
||||
writer->Write(entry->x);
|
||||
writer->Write(entry->y);
|
||||
writer->Write(entry->z);
|
||||
}
|
||||
|
||||
writer->Write((uint32_t)col->waterBoxes.size());
|
||||
|
||||
for (auto waterBox : col->waterBoxes)
|
||||
{
|
||||
writer->Write(waterBox.xMin);
|
||||
writer->Write(waterBox.ySurface);
|
||||
writer->Write(waterBox.zMin);
|
||||
writer->Write(waterBox.xLength);
|
||||
writer->Write(waterBox.zLength);
|
||||
writer->Write(waterBox.properties);
|
||||
}
|
||||
}
|
11
OTRExporter/OTRExporter/CollisionExporter.h
Normal file
@ -0,0 +1,11 @@
|
||||
#pragma once
|
||||
|
||||
#include "ZResource.h"
|
||||
#include "ZCollision.h"
|
||||
#include "Exporter.h"
|
||||
|
||||
class OTRExporter_Collision : public OTRExporter
|
||||
{
|
||||
public:
|
||||
virtual void Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer) override;
|
||||
};
|
431
OTRExporter/OTRExporter/CutsceneExporter.cpp
Normal file
@ -0,0 +1,431 @@
|
||||
#include "CutsceneExporter.h"
|
||||
#include <Resource.h>
|
||||
|
||||
void OTRExporter_Cutscene::Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer)
|
||||
{
|
||||
ZCutscene* cs = (ZCutscene*)res;
|
||||
|
||||
WriteHeader(cs, outPath, writer, Ship::ResourceType::Cutscene);
|
||||
|
||||
//writer->Write((uint32_t)cs->commands.size() + 2 + 2);
|
||||
writer->Write((uint32_t)0);
|
||||
|
||||
int currentStream = writer->GetBaseAddress();
|
||||
|
||||
writer->Write(CS_BEGIN_CUTSCENE(cs->numCommands, cs->endFrame));
|
||||
|
||||
for (size_t i = 0; i < cs->commands.size(); i++)
|
||||
{
|
||||
switch (cs->commands[i]->commandID)
|
||||
{
|
||||
case (uint32_t)CutsceneCommands::SetCameraPos:
|
||||
{
|
||||
CutsceneCommandSetCameraPos* cmdCamPos = (CutsceneCommandSetCameraPos*)cs->commands[i];
|
||||
|
||||
writer->Write(CS_CMD_CAM_EYE);
|
||||
writer->Write(CMD_HH(0x0001, ((CutsceneCommandSetCameraPos*)cs->commands[i])->startFrame));
|
||||
writer->Write(CMD_HH(cmdCamPos->endFrame, 0x0000));
|
||||
|
||||
for (auto& e : ((CutsceneCommandSetCameraPos*)cs->commands[i])->entries)
|
||||
{
|
||||
writer->Write(CMD_BBH(e->continueFlag, e->cameraRoll, e->nextPointFrame));
|
||||
writer->Write(CMD_F(e->viewAngle));
|
||||
writer->Write(CMD_HH(e->posX, e->posY));
|
||||
writer->Write(CMD_HH(e->posZ, e->unused));
|
||||
}
|
||||
}
|
||||
break;
|
||||
case (uint32_t)CutsceneCommands::SetCameraFocus:
|
||||
{
|
||||
CutsceneCommandSetCameraPos* cmdCamPos = (CutsceneCommandSetCameraPos*)cs->commands[i];
|
||||
|
||||
writer->Write(CS_CMD_CAM_AT);
|
||||
writer->Write(CMD_HH(0x0001, cmdCamPos->startFrame));
|
||||
writer->Write(CMD_HH(cmdCamPos->endFrame, 0x0000));
|
||||
|
||||
for (auto& e : ((CutsceneCommandSetCameraPos*)cs->commands[i])->entries)
|
||||
{
|
||||
writer->Write(CMD_BBH(e->continueFlag, e->cameraRoll, e->nextPointFrame));
|
||||
writer->Write(CMD_F(e->viewAngle));
|
||||
writer->Write(CMD_HH(e->posX, e->posY));
|
||||
writer->Write(CMD_HH(e->posZ, e->unused));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case (uint32_t)CutsceneCommands::SpecialAction:
|
||||
{
|
||||
writer->Write(CS_CMD_MISC);
|
||||
writer->Write((uint32_t)CMD_W(((CutsceneCommandSpecialAction*)cs->commands[i])->entries.size()));
|
||||
for (auto& e : ((CutsceneCommandSpecialAction*)cs->commands[i])->entries) //All in OOT seem to only have 1 entry
|
||||
{
|
||||
writer->Write(CMD_HH(e->base, e->startFrame));
|
||||
writer->Write(CMD_HH(e->endFrame, e->unused0));
|
||||
writer->Write(CMD_W(e->unused1));
|
||||
writer->Write(CMD_W(e->unused2));
|
||||
writer->Write(CMD_W(e->unused3));
|
||||
writer->Write(CMD_W(e->unused4));
|
||||
writer->Write(CMD_W(e->unused5));
|
||||
writer->Write(CMD_W(e->unused6));
|
||||
writer->Write(CMD_W(e->unused7));
|
||||
writer->Write(CMD_W(e->unused8));
|
||||
writer->Write(CMD_W(e->unused9));
|
||||
writer->Write(CMD_W(e->unused10));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case (uint32_t)CutsceneCommands::SetLighting:
|
||||
{
|
||||
writer->Write(CS_CMD_SET_LIGHTING);
|
||||
writer->Write((uint32_t)CMD_W(((CutsceneCommandEnvLighting*)cs->commands[i])->entries.size()));
|
||||
for (auto& e : ((CutsceneCommandEnvLighting*)cs->commands[i])->entries)
|
||||
{
|
||||
writer->Write(CMD_HH(e->setting, e->startFrame));
|
||||
writer->Write(CMD_HH(e->endFrame, e->unused0));
|
||||
writer->Write(CMD_W(e->unused1));
|
||||
writer->Write(CMD_W(e->unused2));
|
||||
writer->Write(CMD_W(e->unused3));
|
||||
writer->Write(CMD_W(e->unused4));
|
||||
writer->Write(CMD_W(e->unused5));
|
||||
writer->Write(CMD_W(e->unused6));
|
||||
writer->Write(CMD_W(e->unused7));
|
||||
writer->Write((uint32_t)0x0);
|
||||
writer->Write((uint32_t)0x0);
|
||||
writer->Write((uint32_t)0x0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case (uint32_t)CutsceneCommands::SetCameraPosLink:
|
||||
{
|
||||
CutsceneCommandSetCameraPos* cmdCamPos = (CutsceneCommandSetCameraPos*)cs->commands[i];
|
||||
|
||||
writer->Write(CS_CMD_CAM_EYE_REL_TO_PLAYER);
|
||||
writer->Write(CMD_HH(0x0001, ((CutsceneCommandSetCameraPos*)cs->commands[i])->startFrame));
|
||||
writer->Write(CMD_HH(cmdCamPos->endFrame, 0x0000));
|
||||
|
||||
for (auto& e : ((CutsceneCommandSetCameraPos*)cs->commands[i])->entries)
|
||||
{
|
||||
writer->Write(CMD_BBH(e->continueFlag, e->cameraRoll, e->nextPointFrame));
|
||||
writer->Write(CMD_F(e->viewAngle));
|
||||
writer->Write(CMD_HH(e->posX, e->posY));
|
||||
writer->Write(CMD_HH(e->posZ, e->unused));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case (uint32_t)CutsceneCommands::SetCameraFocusLink:
|
||||
{
|
||||
CutsceneCommandSetCameraPos* cmdCamPos = (CutsceneCommandSetCameraPos*)cs->commands[i];
|
||||
|
||||
writer->Write(CS_CMD_CAM_AT_REL_TO_PLAYER);
|
||||
writer->Write(CMD_HH(0x0001, ((CutsceneCommandSetCameraPos*)cs->commands[i])->startFrame));
|
||||
writer->Write(CMD_HH(cmdCamPos->endFrame, 0x0000));
|
||||
|
||||
for (auto& e : ((CutsceneCommandSetCameraPos*)cs->commands[i])->entries)
|
||||
{
|
||||
writer->Write(CMD_BBH(e->continueFlag, e->cameraRoll, e->nextPointFrame));
|
||||
writer->Write(CMD_F(e->viewAngle));
|
||||
writer->Write(CMD_HH(e->posX, e->posY));
|
||||
writer->Write(CMD_HH(e->posZ, e->unused));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case (uint32_t)CutsceneCommands::Cmd07: // Not used in OOT
|
||||
break;
|
||||
case (uint32_t)CutsceneCommands::Cmd08: // Not used in OOT
|
||||
break;
|
||||
|
||||
case (uint32_t)CutsceneCommands::Cmd09:
|
||||
{
|
||||
writer->Write(CS_CMD_09);
|
||||
writer->Write((uint32_t)CMD_W(((CutsceneCommandUnknown9*)cs->commands[i])->entries.size()));
|
||||
|
||||
for (auto& e : ((CutsceneCommandUnknown9*)cs->commands[i])->entries)
|
||||
{
|
||||
writer->Write(CMD_HH(e->base, e->startFrame));
|
||||
writer->Write(CMD_HBB(e->endFrame, e->unk2, e->unk3));
|
||||
writer->Write(CMD_BBH(e->unk4, e->unused0, e->unused1));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 0x15:
|
||||
case (uint32_t)CutsceneCommands::Unknown:
|
||||
{
|
||||
CutsceneCommandUnknown* cmdUnk = (CutsceneCommandUnknown*)cs->commands[i];
|
||||
writer->Write((uint32_t)cs->commands[i]->commandID);
|
||||
writer->Write((uint32_t)cmdUnk->entries.size());
|
||||
|
||||
for (auto e : cmdUnk->entries)
|
||||
{
|
||||
writer->Write(CMD_W(e->unused0));
|
||||
writer->Write(CMD_W(e->unused1));
|
||||
writer->Write(CMD_W(e->unused2));
|
||||
writer->Write(CMD_W(e->unused3));
|
||||
writer->Write(CMD_W(e->unused4));
|
||||
writer->Write(CMD_W(e->unused5));
|
||||
writer->Write(CMD_W(e->unused6));
|
||||
writer->Write(CMD_W(e->unused7));
|
||||
writer->Write(CMD_W(e->unused8));
|
||||
writer->Write(CMD_W(e->unused9));
|
||||
writer->Write(CMD_W(e->unused10));
|
||||
writer->Write(CMD_W(e->unused11));
|
||||
}
|
||||
}
|
||||
break;
|
||||
case (uint32_t)CutsceneCommands::Textbox:
|
||||
{
|
||||
writer->Write(CS_CMD_TEXTBOX);
|
||||
writer->Write((uint32_t)CMD_W(((CutsceneCommandTextbox*)cs->commands[i])->entries.size()));
|
||||
|
||||
for (auto& e : ((CutsceneCommandTextbox*)cs->commands[i])->entries)
|
||||
{
|
||||
if (e->base == 0xFFFF) // CS_TEXT_NONE
|
||||
{
|
||||
writer->Write(CMD_HH(0xFFFF, e->startFrame));
|
||||
writer->Write(CMD_HH(e->endFrame, 0xFFFF));
|
||||
writer->Write(CMD_HH(0xFFFF, 0xFFFF));
|
||||
}
|
||||
else // CS_TEXT_DISPLAY_TEXTBOX
|
||||
{
|
||||
writer->Write(CMD_HH(e->base, e->startFrame));
|
||||
writer->Write(CMD_HH(e->endFrame, e->type));
|
||||
writer->Write(CMD_HH(e->textID1, e->textID2));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case (uint32_t)CutsceneCommands::SetActorAction0:
|
||||
case (uint32_t)CutsceneCommands::SetActorAction1:
|
||||
case 17:
|
||||
case 18:
|
||||
case 23:
|
||||
case 34:
|
||||
case 39:
|
||||
case 46:
|
||||
case 76:
|
||||
case 85:
|
||||
case 93:
|
||||
case 105:
|
||||
case 107:
|
||||
case 110:
|
||||
case 119:
|
||||
case 123:
|
||||
case 138:
|
||||
case 139:
|
||||
case 144:
|
||||
case (uint32_t)CutsceneCommands::SetActorAction2:
|
||||
case 16:
|
||||
case 24:
|
||||
case 35:
|
||||
case 40:
|
||||
case 48:
|
||||
case 64:
|
||||
case 68:
|
||||
case 70:
|
||||
case 78:
|
||||
case 80:
|
||||
case 94:
|
||||
case 116:
|
||||
case 118:
|
||||
case 120:
|
||||
case 125:
|
||||
case 131:
|
||||
case 141:
|
||||
case (uint32_t)CutsceneCommands::SetActorAction3:
|
||||
case 36:
|
||||
case 41:
|
||||
case 50:
|
||||
case 67:
|
||||
case 69:
|
||||
case 72:
|
||||
case 74:
|
||||
case 81:
|
||||
case 106:
|
||||
case 117:
|
||||
case 121:
|
||||
case 126:
|
||||
case 132:
|
||||
case (uint32_t)CutsceneCommands::SetActorAction4:
|
||||
case 37:
|
||||
case 42:
|
||||
case 51:
|
||||
case 53:
|
||||
case 63:
|
||||
case 65:
|
||||
case 66:
|
||||
case 75:
|
||||
case 82:
|
||||
case 108:
|
||||
case 127:
|
||||
case 133:
|
||||
case (uint32_t)CutsceneCommands::SetActorAction5:
|
||||
case 38:
|
||||
case 43:
|
||||
case 47:
|
||||
case 54:
|
||||
case 79:
|
||||
case 83:
|
||||
case 128:
|
||||
case 135:
|
||||
case (uint32_t)CutsceneCommands::SetActorAction6:
|
||||
case 55:
|
||||
case 77:
|
||||
case 84:
|
||||
case 90:
|
||||
case 129:
|
||||
case 136:
|
||||
case (uint32_t)CutsceneCommands::SetActorAction7:
|
||||
case 52:
|
||||
case 57:
|
||||
case 58:
|
||||
case 88:
|
||||
case 115:
|
||||
case 130:
|
||||
case 137:
|
||||
case (uint32_t)CutsceneCommands::SetActorAction8:
|
||||
case 60:
|
||||
case 89:
|
||||
case 111:
|
||||
case 114:
|
||||
case 134:
|
||||
case 142:
|
||||
case (uint32_t)CutsceneCommands::SetActorAction9:
|
||||
case (uint32_t)CutsceneCommands::SetActorAction10:
|
||||
{
|
||||
writer->Write((uint32_t)(CutsceneCommands)cs->commands[i]->commandID);
|
||||
writer->Write((uint32_t)CMD_W(((CutsceneCommandActorAction*)cs->commands[i])->entries.size()));
|
||||
|
||||
for (auto& actorAct : ((CutsceneCommandActorAction*)cs->commands[i])->entries)
|
||||
{
|
||||
writer->Write(CMD_HH(actorAct->action, actorAct->startFrame));
|
||||
writer->Write(CMD_HH(actorAct->endFrame, actorAct->rotX));
|
||||
writer->Write(CMD_HH(actorAct->rotY, actorAct->rotZ));
|
||||
writer->Write(CMD_W(actorAct->startPosX));
|
||||
writer->Write(CMD_W(actorAct->startPosY));
|
||||
writer->Write(CMD_W(actorAct->startPosZ));
|
||||
writer->Write(CMD_W(actorAct->endPosX));
|
||||
writer->Write(CMD_W(actorAct->endPosY));
|
||||
writer->Write(CMD_W(actorAct->endPosZ));
|
||||
writer->Write(CMD_W(actorAct->normalX));
|
||||
writer->Write(CMD_W(actorAct->normalY));
|
||||
writer->Write(CMD_W(actorAct->normalZ));
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case (uint32_t)CutsceneCommands::SetSceneTransFX:
|
||||
{
|
||||
CutsceneCommandSceneTransFX* cmdTFX = (CutsceneCommandSceneTransFX*)cs->commands[i];
|
||||
|
||||
writer->Write(CS_CMD_SCENE_TRANS_FX);
|
||||
writer->Write((uint32_t)1);
|
||||
writer->Write(CMD_HH((((CutsceneCommandSceneTransFX*)cs->commands[i])->base), ((CutsceneCommandSceneTransFX*)cs->commands[i])->startFrame));
|
||||
writer->Write(CMD_HH((((CutsceneCommandSceneTransFX*)cs->commands[i])->endFrame), ((CutsceneCommandSceneTransFX*)cs->commands[i])->endFrame));
|
||||
break;
|
||||
}
|
||||
case (uint32_t)CutsceneCommands::Nop: //Not used in OOT
|
||||
break;
|
||||
case (uint32_t)CutsceneCommands::PlayBGM:
|
||||
{
|
||||
writer->Write(CS_CMD_PLAYBGM);
|
||||
writer->Write((uint32_t)CMD_W(((CutsceneCommandPlayBGM*)cs->commands[i])->entries.size()));
|
||||
|
||||
for (auto& e : ((CutsceneCommandPlayBGM*)cs->commands[i])->entries)
|
||||
{
|
||||
writer->Write(CMD_HH(e->sequence, e->startFrame));
|
||||
writer->Write(CMD_HH(e->endFrame, e->unknown0));
|
||||
writer->Write(CMD_W(e->unknown1));
|
||||
writer->Write(CMD_W(e->unknown2));
|
||||
writer->Write(CMD_W(e->unknown3));
|
||||
writer->Write(CMD_W(e->unknown4));
|
||||
writer->Write(CMD_W(e->unknown5));
|
||||
writer->Write(CMD_W(e->unknown6));
|
||||
writer->Write(CMD_W(e->unknown7));
|
||||
writer->Write((uint32_t)0);
|
||||
writer->Write((uint32_t)0);
|
||||
writer->Write((uint32_t)0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case (uint32_t)CutsceneCommands::StopBGM:
|
||||
{
|
||||
writer->Write(CS_CMD_STOPBGM);
|
||||
writer->Write((uint32_t)CMD_W(((CutsceneCommandStopBGM*)cs->commands[i])->entries.size()));
|
||||
|
||||
for (auto& e : ((CutsceneCommandStopBGM*)cs->commands[i])->entries)
|
||||
{
|
||||
writer->Write(CMD_HH(e->sequence, e->startFrame));
|
||||
writer->Write(CMD_HH(e->endFrame, e->unknown0));
|
||||
writer->Write(CMD_W(e->unknown1));
|
||||
writer->Write(CMD_W(e->unknown2));
|
||||
writer->Write(CMD_W(e->unknown3));
|
||||
writer->Write(CMD_W(e->unknown4));
|
||||
writer->Write(CMD_W(e->unknown5));
|
||||
writer->Write(CMD_W(e->unknown6));
|
||||
writer->Write(CMD_W(e->unknown7));
|
||||
writer->Write((uint32_t)0);
|
||||
writer->Write((uint32_t)0);
|
||||
writer->Write((uint32_t)0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case (uint32_t)CutsceneCommands::FadeBGM:
|
||||
{
|
||||
writer->Write(CS_CMD_FADEBGM);
|
||||
writer->Write((uint32_t)CMD_W(((CutsceneCommandFadeBGM*)cs->commands[i])->entries.size()));
|
||||
|
||||
for (auto& e : ((CutsceneCommandFadeBGM*)cs->commands[i])->entries)
|
||||
{
|
||||
writer->Write(CMD_HH(e->base, e->startFrame));
|
||||
writer->Write(CMD_HH(e->endFrame, e->unknown0));
|
||||
writer->Write(CMD_W(e->unknown1));
|
||||
writer->Write(CMD_W(e->unknown2));
|
||||
writer->Write(CMD_W(e->unknown3));
|
||||
writer->Write(CMD_W(e->unknown4));
|
||||
writer->Write(CMD_W(e->unknown5));
|
||||
writer->Write(CMD_W(e->unknown6));
|
||||
writer->Write(CMD_W(e->unknown7));
|
||||
writer->Write((uint32_t)0);
|
||||
writer->Write((uint32_t)0);
|
||||
writer->Write((uint32_t)0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case (uint32_t)CutsceneCommands::SetTime:
|
||||
{
|
||||
writer->Write(CS_CMD_SETTIME);
|
||||
writer->Write((uint32_t)CMD_W(((CutsceneCommandDayTime*)cs->commands[i])->entries.size()));
|
||||
|
||||
for (auto& e : ((CutsceneCommandDayTime*)cs->commands[i])->entries)
|
||||
{
|
||||
writer->Write(CMD_HH(e->base, e->startFrame));
|
||||
writer->Write(CMD_HBB(e->endFrame, e->hour, e->minute));
|
||||
writer->Write((uint32_t)CMD_W(e->unused));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case (uint32_t)CutsceneCommands::Terminator:
|
||||
{
|
||||
writer->Write(CS_CMD_TERMINATOR);
|
||||
writer->Write((uint32_t)1);
|
||||
writer->Write(CMD_HH(((CutsceneCommandTerminator*)cs->commands[i])->base, ((CutsceneCommandTerminator*)cs->commands[i])->startFrame));
|
||||
writer->Write(CMD_HH(((CutsceneCommandTerminator*)cs->commands[i])->endFrame, ((CutsceneCommandTerminator*)cs->commands[i])->endFrame));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
//writer->Write((uint32_t)cs->commands[i]->commandID);
|
||||
printf("Undefined CS Opcode: %04X\n", cs->commands[i]->commandID);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//CS_END
|
||||
writer->Write(0xFFFFFFFF);
|
||||
writer->Write((uint32_t)0);
|
||||
|
||||
int endStream = writer->GetBaseAddress();
|
||||
writer->Seek(currentStream - 4, SeekOffsetType::Start);
|
||||
writer->Write((uint32_t)((endStream - currentStream) / 4));
|
||||
writer->Seek(endStream, SeekOffsetType::Start);
|
||||
}
|
11
OTRExporter/OTRExporter/CutsceneExporter.h
Normal file
@ -0,0 +1,11 @@
|
||||
#pragma once
|
||||
#include "ZResource.h"
|
||||
#include "ZCutscene.h"
|
||||
#include "z64cutscene_commands.h"
|
||||
#include "Exporter.h"
|
||||
|
||||
class OTRExporter_Cutscene : public OTRExporter
|
||||
{
|
||||
public:
|
||||
virtual void Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer) override;
|
||||
};
|
973
OTRExporter/OTRExporter/DisplayListExporter.cpp
Normal file
@ -0,0 +1,973 @@
|
||||
#include "DisplayListExporter.h"
|
||||
#include "Main.h"
|
||||
#include "../ZAPD/ZFile.h"
|
||||
#include <Utils/MemoryStream.h>
|
||||
#include <Utils/BitConverter.h>
|
||||
#include "Lib/StrHash64.h"
|
||||
#include "spdlog/spdlog.h"
|
||||
#include "PR/ultra64/gbi.h"
|
||||
#include <Globals.h>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include "MtxExporter.h"
|
||||
#include <Utils/File.h>
|
||||
#include "VersionInfo.h"
|
||||
|
||||
#define GFX_SIZE 8
|
||||
|
||||
#define gsDPSetCombineLERP2(a0, b0, c0, d0, Aa0, Ab0, Ac0, Ad0, \
|
||||
a1, b1, c1, d1, Aa1, Ab1, Ac1, Ad1) \
|
||||
{ \
|
||||
_SHIFTL(G_SETCOMBINE, 24, 8) | \
|
||||
_SHIFTL(GCCc0w0(a0, c0, \
|
||||
Aa0, Ac0) | \
|
||||
GCCc1w0(a1, c1), 0, 24), \
|
||||
(unsigned int)(GCCc0w1(b0, d0, \
|
||||
Ab0, Ad0) | \
|
||||
GCCc1w1(b1, Aa1, \
|
||||
Ac1, d1, \
|
||||
Ab1, Ad1)) \
|
||||
}
|
||||
|
||||
typedef int32_t Mtx_t[4][4];
|
||||
|
||||
typedef union Mtx
|
||||
{
|
||||
//_Alignas(8)
|
||||
Mtx_t m;
|
||||
int32_t l[16];
|
||||
struct
|
||||
{
|
||||
int16_t i[16];
|
||||
uint16_t f[16];
|
||||
};
|
||||
} Mtx;
|
||||
|
||||
#define gsSPBranchLessZraw2(dl, vtx, zval) \
|
||||
{ _SHIFTL(G_BRANCH_Z,24,8)|_SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12),\
|
||||
(unsigned int)(zval), }
|
||||
|
||||
#define gsSPBranchLessZraw3(dl) \
|
||||
{ _SHIFTL(G_RDPHALF_1,24,8), \
|
||||
(unsigned int)(dl), }
|
||||
|
||||
#define gsDPWordLo(wordlo) \
|
||||
gsImmp1(G_RDPHALF_2, (unsigned int)(wordlo))
|
||||
|
||||
#define gsSPTextureRectangle2(xl, yl, xh, yh, tile) \
|
||||
{ (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | _SHIFTL(yh, 0, 12)),\
|
||||
(_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12)) }
|
||||
|
||||
void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer)
|
||||
{
|
||||
ZDisplayList* dList = (ZDisplayList*)res;
|
||||
|
||||
//printf("Exporting DList %s\n", dList->GetName().c_str());
|
||||
|
||||
WriteHeader(res, outPath, writer, Ship::ResourceType::DisplayList);
|
||||
|
||||
while (writer->GetBaseAddress() % 8 != 0)
|
||||
writer->Write((uint8_t)0xFF);
|
||||
|
||||
// DEBUG: Write in a marker
|
||||
Declaration* dbgDecl = dList->parent->GetDeclaration(dList->GetRawDataIndex());
|
||||
std::string dbgName = StringHelper::Sprintf("%s\\%s", GetParentFolderName(res).c_str(), dbgDecl->varName.c_str());
|
||||
uint64_t hash = CRC64(dbgName.c_str());
|
||||
writer->Write((uint32_t)(G_MARKER << 24));
|
||||
writer->Write((uint32_t)0xBEEFBEEF);
|
||||
writer->Write((uint32_t)(hash >> 32));
|
||||
writer->Write((uint32_t)(hash & 0xFFFFFFFF));
|
||||
|
||||
auto dlStart = std::chrono::steady_clock::now();
|
||||
|
||||
//for (auto data : dList->instructions)
|
||||
for (int dataIdx = 0; dataIdx < dList->instructions.size(); dataIdx++)
|
||||
{
|
||||
auto data = dList->instructions[dataIdx];
|
||||
uint32_t word0 = 0;
|
||||
uint32_t word1 = 0;
|
||||
uint8_t opcode = (uint8_t)(data >> 56);
|
||||
F3DZEXOpcode opF3D = (F3DZEXOpcode)opcode;
|
||||
|
||||
if ((int)opF3D == G_DL)// || (int)opF3D == G_BRANCH_Z)
|
||||
opcode = (uint8_t)G_DL_OTR;
|
||||
|
||||
if ((int)opF3D == G_MTX)
|
||||
opcode = (uint8_t)G_MTX_OTR;
|
||||
|
||||
if ((int)opF3D == G_BRANCH_Z)
|
||||
opcode = (uint8_t)G_BRANCH_Z_OTR;
|
||||
|
||||
if ((int)opF3D == G_VTX)
|
||||
opcode = (uint8_t)G_VTX_OTR;
|
||||
|
||||
if ((int)opF3D == G_SETTIMG)
|
||||
opcode = (uint8_t)G_SETTIMG_OTR;
|
||||
|
||||
word0 += (opcode << 24);
|
||||
|
||||
switch ((int)opF3D)
|
||||
{
|
||||
case G_NOOP:
|
||||
{
|
||||
Gfx value = gsDPNoOp();
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_ENDDL:
|
||||
{
|
||||
Gfx value = gsSPEndDisplayList();
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_MODIFYVTX:
|
||||
{
|
||||
int32_t ww = (data & 0x00FF000000000000ULL) >> 48;
|
||||
int32_t nnnn = (data & 0x0000FFFF00000000ULL) >> 32;
|
||||
int32_t vvvvvvvv = (data & 0x00000000FFFFFFFFULL);
|
||||
|
||||
Gfx value = gsSPModifyVertex(nnnn / 2, ww, vvvvvvvv);
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
printf("Undefined opcode: %02X\n", opcode);
|
||||
//word0 = _byteswap_ulong((uint32_t)(data >> 32));
|
||||
//word1 = _byteswap_ulong((uint32_t)(data & 0xFFFFFFFF));
|
||||
}
|
||||
break;
|
||||
case G_GEOMETRYMODE:
|
||||
{
|
||||
int32_t cccccc = (data & 0x00FFFFFF00000000) >> 32;
|
||||
int32_t ssssssss = (data & 0xFFFFFFFF);
|
||||
|
||||
Gfx value = gsSPGeometryMode(~cccccc, ssssssss);
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_RDPPIPESYNC:
|
||||
{
|
||||
Gfx value = gsDPPipeSync();
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_RDPLOADSYNC:
|
||||
{
|
||||
Gfx value = gsDPLoadSync();
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_RDPTILESYNC:
|
||||
{
|
||||
Gfx value = gsDPTileSync();
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_RDPFULLSYNC:
|
||||
{
|
||||
Gfx value = gsDPFullSync();
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_RDPSETOTHERMODE:
|
||||
{
|
||||
int32_t hhhhhh = (data & 0x00FFFFFF00000000) >> 32;
|
||||
int32_t llllllll = (data & 0x00000000FFFFFFFF);
|
||||
|
||||
Gfx value = gsDPSetOtherMode(hhhhhh, llllllll);
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_POPMTX:
|
||||
{
|
||||
Gfx value = gsSPPopMatrix(data);
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_SETENVCOLOR:
|
||||
{
|
||||
uint8_t r = (uint8_t)((data & 0xFF000000) >> 24);
|
||||
uint8_t g = (uint8_t)((data & 0x00FF0000) >> 16);
|
||||
uint8_t b = (uint8_t)((data & 0xFF00FF00) >> 8);
|
||||
uint8_t a = (uint8_t)((data & 0x000000FF) >> 0);
|
||||
|
||||
Gfx value = gsDPSetEnvColor(r, g, b, a);
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_MTX:
|
||||
{
|
||||
if ((!Globals::Instance->HasSegment(GETSEGNUM(data))) || ((data & 0xFFFFFFFF) == 0x07000000)) // En_Zf and En_Ny place a DL in segment 7
|
||||
{
|
||||
uint32_t pp = (data & 0x000000FF00000000) >> 32;
|
||||
uint32_t mm = (data & 0x00000000FFFFFFFF);
|
||||
|
||||
pp ^= G_MTX_PUSH;
|
||||
|
||||
mm = (mm & 0x0FFFFFFF) + 0xF0000000;
|
||||
|
||||
Gfx value = gsSPMatrix(mm, pp);
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
else
|
||||
{
|
||||
uint32_t pp = (data & 0x000000FF00000000) >> 32;
|
||||
uint32_t mm = (data & 0x00000000FFFFFFFF);
|
||||
pp ^= G_MTX_PUSH;
|
||||
|
||||
Gfx value = gsSPMatrix(mm, pp);
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
|
||||
word0 = (word0 & 0x00FFFFFF) + (G_MTX_OTR << 24);
|
||||
|
||||
Declaration* mtxDecl = dList->parent->GetDeclaration(GETSEGOFFSET(mm));
|
||||
|
||||
int bp = 0;
|
||||
|
||||
writer->Write(word0);
|
||||
writer->Write(word1);
|
||||
|
||||
if (mtxDecl != nullptr)
|
||||
{
|
||||
std::string vName = StringHelper::Sprintf("%s\\%s", (GetParentFolderName(res).c_str()), mtxDecl->varName.c_str());
|
||||
|
||||
uint64_t hash = CRC64(vName.c_str());
|
||||
|
||||
word0 = hash >> 32;
|
||||
word1 = hash & 0xFFFFFFFF;
|
||||
}
|
||||
else
|
||||
{
|
||||
word0 = 0;
|
||||
word1 = 0;
|
||||
spdlog::error(StringHelper::Sprintf("dListDecl == nullptr! Addr = {:08X}", GETSEGOFFSET(data)));
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case G_LOADBLOCK:
|
||||
{
|
||||
int32_t sss = (data & 0x00FFF00000000000) >> 48;
|
||||
int32_t ttt = (data & 0x00000FFF00000000) >> 36;
|
||||
int32_t i = (data & 0x000000000F000000) >> 24;
|
||||
int32_t xxx = (data & 0x0000000000FFF000) >> 12;
|
||||
int32_t ddd = (data & 0x0000000000000FFF);
|
||||
|
||||
Gfx value = gsDPLoadBlock(i, sss, ttt, xxx, ddd);
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_CULLDL:
|
||||
{
|
||||
int32_t vvvv = (data & 0xFFFF00000000) >> 32;
|
||||
int32_t wwww = (data & 0x0000FFFF);
|
||||
|
||||
Gfx value = gsSPCullDisplayList(vvvv / 2, wwww / 2);
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_RDPHALF_1:
|
||||
{
|
||||
auto data2 = dList->instructions[dataIdx + 1];
|
||||
|
||||
if ((data2 >> 56) != G_BRANCH_Z)
|
||||
{
|
||||
uint32_t a = (data & 0x00FFF00000000000) >> 44;
|
||||
uint32_t b = (data & 0x00000FFF00000000) >> 32;
|
||||
uint32_t z = (data & 0x00000000FFFFFFFF) >> 0;
|
||||
uint32_t h = (data & 0xFFFFFFFF);
|
||||
|
||||
Gfx value = gsSPBranchLessZraw3(h & 0x00FFFFFF);
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
else
|
||||
{
|
||||
word0 = (G_NOOP << 24);
|
||||
word1 = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case G_RDPHALF_2:
|
||||
{
|
||||
Gfx value = gsDPWordLo(data & 0xFFFFFFFF);
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_TEXRECT:
|
||||
{
|
||||
int32_t xxx = (data & 0x00FFF00000000000) >> 44;
|
||||
int32_t yyy = (data & 0x00000FFF00000000) >> 32;
|
||||
int32_t i = (data & 0x000000000F000000) >> 24;
|
||||
int32_t XXX = (data & 0x0000000000FFF000) >> 12;
|
||||
int32_t YYY = (data & 0x0000000000000FFF);
|
||||
|
||||
Gfx value = gsSPTextureRectangle2(XXX, YYY, xxx, yyy, i);
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_BRANCH_Z:
|
||||
{
|
||||
uint32_t a = (data & 0x00FFF00000000000) >> 44;
|
||||
uint32_t b = (data & 0x00000FFF00000000) >> 32;
|
||||
uint32_t z = (data & 0x00000000FFFFFFFF) >> 0;
|
||||
uint32_t h = (data & 0xFFFFFFFF);
|
||||
|
||||
auto data2 = dList->instructions[dataIdx - 1];
|
||||
uint32_t dListPtr = GETSEGOFFSET(data2);
|
||||
|
||||
Declaration* dListDecl = dList->parent->GetDeclaration(dListPtr);
|
||||
|
||||
int bp = 0;
|
||||
|
||||
Gfx value = gsSPBranchLessZraw2(0xDEADABCD, (a / 5) | (b / 2), z);
|
||||
word0 = (value.words.w0 & 0x00FFFFFF) + (G_BRANCH_Z_OTR << 24);
|
||||
word1 = value.words.w1;
|
||||
|
||||
writer->Write(word0);
|
||||
writer->Write(word1);
|
||||
|
||||
if (dListDecl != nullptr)
|
||||
{
|
||||
std::string vName = StringHelper::Sprintf("%s\\%s", (GetParentFolderName(res).c_str()), dListDecl->varName.c_str());
|
||||
|
||||
uint64_t hash = CRC64(vName.c_str());
|
||||
|
||||
word0 = hash >> 32;
|
||||
word1 = hash & 0xFFFFFFFF;
|
||||
}
|
||||
else
|
||||
{
|
||||
word0 = 0;
|
||||
word1 = 0;
|
||||
spdlog::error(StringHelper::Sprintf("dListDecl == nullptr! Addr = {:08X}", GETSEGOFFSET(data)));
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < dList->otherDLists.size(); i++)
|
||||
{
|
||||
Declaration* dListDecl2 = dList->parent->GetDeclaration(GETSEGOFFSET(dList->otherDLists[i]->GetRawDataIndex()));
|
||||
|
||||
if (dListDecl2 != nullptr)
|
||||
{
|
||||
//std::string fName = StringHelper::Sprintf("%s\\%s", GetParentFolderName(res).c_str(), dListDecl2->varName.c_str());
|
||||
std::string fName = OTRExporter_DisplayList::GetPathToRes(res, dListDecl2->varName.c_str());
|
||||
|
||||
if (!File::Exists("Extract\\" + fName))
|
||||
{
|
||||
MemoryStream* dlStream = new MemoryStream();
|
||||
BinaryWriter dlWriter = BinaryWriter(dlStream);
|
||||
|
||||
Save(dList->otherDLists[i], outPath, &dlWriter);
|
||||
|
||||
#ifdef _DEBUG
|
||||
//if (otrArchive->HasFile(fName))
|
||||
//otrArchive->RemoveFile(fName);
|
||||
#endif
|
||||
|
||||
File::WriteAllBytes("Extract\\" + fName, dlStream->ToVector());
|
||||
|
||||
//otrArchive->AddFile(fName, (uintptr_t)dlStream->ToVector().data(), dlWriter.GetBaseAddress());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
spdlog::error(StringHelper::Sprintf("dListDecl2 == nullptr! Addr = {:08X}", GETSEGOFFSET(data)));
|
||||
}
|
||||
}
|
||||
|
||||
//Gfx value = gsSPBranchLessZraw2(h & 0x00FFFFFF, (a / 5) | (b / 2), z);
|
||||
//word0 = value.words.w0;
|
||||
//word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
//case G_BRANCH_Z:
|
||||
case G_DL:
|
||||
{
|
||||
if ((!Globals::Instance->HasSegment(GETSEGNUM(data)) && (int)opF3D != G_BRANCH_Z)
|
||||
|| ((data & 0xFFFFFFFF) == 0x07000000)) // En_Zf and En_Ny place a DL in segment 7
|
||||
{
|
||||
int32_t pp = (data & 0x00FF000000000000) >> 56;
|
||||
|
||||
Gfx value;
|
||||
|
||||
u32 dListVal = (data & 0x0FFFFFFF) + 0xF0000000;
|
||||
|
||||
if (pp != 0)
|
||||
value = gsSPBranchList(dListVal);
|
||||
else
|
||||
value = gsSPDisplayList(dListVal);
|
||||
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
else
|
||||
{
|
||||
uint32_t dListPtr = GETSEGOFFSET(data);
|
||||
|
||||
if ((int)opF3D == G_BRANCH_Z)
|
||||
{
|
||||
auto data2 = dList->instructions[dataIdx - 1];
|
||||
dListPtr = GETSEGOFFSET(data2);
|
||||
}
|
||||
else
|
||||
{
|
||||
int bp = 0;
|
||||
}
|
||||
|
||||
Declaration* dListDecl = dList->parent->GetDeclaration(dListPtr);
|
||||
|
||||
int bp = 0;
|
||||
|
||||
writer->Write(word0);
|
||||
writer->Write(word1);
|
||||
|
||||
if (dListDecl != nullptr)
|
||||
{
|
||||
std::string vName = StringHelper::Sprintf("%s\\%s", (GetParentFolderName(res).c_str()), dListDecl->varName.c_str());
|
||||
|
||||
uint64_t hash = CRC64(vName.c_str());
|
||||
|
||||
word0 = hash >> 32;
|
||||
word1 = hash & 0xFFFFFFFF;
|
||||
}
|
||||
else
|
||||
{
|
||||
word0 = 0;
|
||||
word1 = 0;
|
||||
spdlog::error(StringHelper::Sprintf("dListDecl == nullptr! Addr = {:08X}", GETSEGOFFSET(data)));
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < dList->otherDLists.size(); i++)
|
||||
{
|
||||
Declaration* dListDecl2 = dList->parent->GetDeclaration(GETSEGOFFSET(dList->otherDLists[i]->GetRawDataIndex()));
|
||||
|
||||
if (dListDecl2 != nullptr)
|
||||
{
|
||||
//std::string fName = StringHelper::Sprintf("%s\\%s", GetParentFolderName(res).c_str(), dListDecl2->varName.c_str());
|
||||
std::string fName = OTRExporter_DisplayList::GetPathToRes(res, dListDecl2->varName.c_str());
|
||||
|
||||
if (!File::Exists("Extract\\" + fName))
|
||||
{
|
||||
MemoryStream* dlStream = new MemoryStream();
|
||||
BinaryWriter dlWriter = BinaryWriter(dlStream);
|
||||
|
||||
Save(dList->otherDLists[i], outPath, &dlWriter);
|
||||
|
||||
File::WriteAllBytes("Extract\\" + fName, dlStream->ToVector());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
spdlog::error(StringHelper::Sprintf("dListDecl2 == nullptr! Addr = {:08X}", GETSEGOFFSET(data)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case G_TEXTURE:
|
||||
{
|
||||
int32_t ____ = (data & 0x0000FFFF00000000) >> 32;
|
||||
int32_t ssss = (data & 0x00000000FFFF0000) >> 16;
|
||||
int32_t tttt = (data & 0x000000000000FFFF);
|
||||
int32_t lll = (____ & 0x3800) >> 11;
|
||||
int32_t ddd = (____ & 0x700) >> 8;
|
||||
int32_t nnnnnnn = (____ & 0xFE) >> 1;
|
||||
|
||||
Gfx value = gsSPTexture(ssss, tttt, lll, ddd, nnnnnnn);
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_TRI1:
|
||||
{
|
||||
int32_t aa = ((data & 0x00FF000000000000ULL) >> 48) / 2;
|
||||
int32_t bb = ((data & 0x0000FF0000000000ULL) >> 40) / 2;
|
||||
int32_t cc = ((data & 0x000000FF00000000ULL) >> 32) / 2;
|
||||
|
||||
Gfx test = gsSP1Triangle(aa, bb, cc, 0);
|
||||
word0 = test.words.w0;
|
||||
word1 = test.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_TRI2:
|
||||
{
|
||||
int32_t aa = ((data & 0x00FF000000000000ULL) >> 48) / 2;
|
||||
int32_t bb = ((data & 0x0000FF0000000000ULL) >> 40) / 2;
|
||||
int32_t cc = ((data & 0x000000FF00000000ULL) >> 32) / 2;
|
||||
int32_t dd = ((data & 0x00000000FF0000ULL) >> 16) / 2;
|
||||
int32_t ee = ((data & 0x0000000000FF00ULL) >> 8) / 2;
|
||||
int32_t ff = ((data & 0x000000000000FFULL) >> 0) / 2;
|
||||
|
||||
Gfx test = gsSP2Triangles(aa, bb, cc, 0, dd, ee, ff, 0);
|
||||
word0 = test.words.w0;
|
||||
word1 = test.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_QUAD:
|
||||
{
|
||||
int32_t aa = ((data & 0x00FF000000000000ULL) >> 48) / 2;
|
||||
int32_t bb = ((data & 0x0000FF0000000000ULL) >> 40) / 2;
|
||||
int32_t cc = ((data & 0x000000FF00000000ULL) >> 32) / 2;
|
||||
int32_t dd = ((data & 0x000000000000FFULL)) / 2;
|
||||
|
||||
Gfx test = gsSP1Quadrangle(aa, bb, cc, dd, 0);
|
||||
word0 = test.words.w0;
|
||||
word1 = test.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_SETPRIMCOLOR:
|
||||
{
|
||||
int32_t mm = (data & 0x0000FF0000000000) >> 40;
|
||||
int32_t ff = (data & 0x000000FF00000000) >> 32;
|
||||
int32_t rr = (data & 0x00000000FF000000) >> 24;
|
||||
int32_t gg = (data & 0x0000000000FF0000) >> 16;
|
||||
int32_t bb = (data & 0x000000000000FF00) >> 8;
|
||||
int32_t aa = (data & 0x00000000000000FF) >> 0;
|
||||
|
||||
Gfx value = gsDPSetPrimColor(mm, ff, rr, gg, bb, aa);
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_SETOTHERMODE_L:
|
||||
{
|
||||
int32_t ss = (data & 0x0000FF0000000000) >> 40;
|
||||
int32_t len = ((data & 0x000000FF00000000) >> 32) + 1;
|
||||
int32_t sft = 32 - (len)-ss;
|
||||
int32_t dd = (data & 0xFFFFFFFF);
|
||||
|
||||
// TODO: Output the correct render modes in data
|
||||
|
||||
Gfx value = gsSPSetOtherMode(0xE2, sft, len, dd);
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_SETOTHERMODE_H:
|
||||
{
|
||||
int32_t ss = (data & 0x0000FF0000000000) >> 40;
|
||||
int32_t nn = (data & 0x000000FF00000000) >> 32;
|
||||
int32_t dd = (data & 0xFFFFFFFF);
|
||||
|
||||
int32_t sft = 32 - (nn + 1) - ss;
|
||||
|
||||
Gfx value;
|
||||
|
||||
if (sft == 14) // G_MDSFT_TEXTLUT
|
||||
{
|
||||
const char* types[] = { "G_TT_NONE", "G_TT_NONE", "G_TT_RGBA16", "G_TT_IA16" };
|
||||
value = gsDPSetTextureLUT(dd >> 14);
|
||||
}
|
||||
else
|
||||
{
|
||||
value = gsSPSetOtherMode(0xE3, sft, nn + 1, dd);
|
||||
}
|
||||
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_SETTILE:
|
||||
{
|
||||
int32_t fff = (data & 0b0000000011100000000000000000000000000000000000000000000000000000) >> 53;
|
||||
int32_t ii = (data & 0b0000000000011000000000000000000000000000000000000000000000000000) >> 51;
|
||||
int32_t nnnnnnnnn =
|
||||
(data & 0b0000000000000011111111100000000000000000000000000000000000000000) >> 41;
|
||||
int32_t mmmmmmmmm =
|
||||
(data & 0b0000000000000000000000011111111100000000000000000000000000000000) >> 32;
|
||||
int32_t ttt = (data & 0b0000000000000000000000000000000000000111000000000000000000000000) >> 24;
|
||||
int32_t pppp =
|
||||
(data & 0b0000000000000000000000000000000000000000111100000000000000000000) >> 20;
|
||||
int32_t cc = (data & 0b0000000000000000000000000000000000000000000011000000000000000000) >> 18;
|
||||
int32_t aaaa =
|
||||
(data & 0b0000000000000000000000000000000000000000000000111100000000000000) >> 14;
|
||||
int32_t ssss =
|
||||
(data & 0b0000000000000000000000000000000000000000000000000011110000000000) >> 10;
|
||||
int32_t dd = (data & 0b0000000000000000000000000000000000000000000000000000001100000000) >> 8;
|
||||
int32_t bbbb = (data & 0b0000000000000000000000000000000000000000000000000000000011110000) >> 4;
|
||||
int32_t uuuu = (data & 0b0000000000000000000000000000000000000000000000000000000000001111);
|
||||
|
||||
Gfx value = gsDPSetTile(fff, ii, nnnnnnnnn, mmmmmmmmm, ttt, pppp, cc, aaaa, ssss, dd, bbbb, uuuu);
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_SETCOMBINE:
|
||||
{
|
||||
int32_t a0 = (data & 0b000000011110000000000000000000000000000000000000000000000000000) >> 52;
|
||||
int32_t c0 = (data & 0b000000000001111100000000000000000000000000000000000000000000000) >> 47;
|
||||
int32_t aa0 = (data & 0b00000000000000011100000000000000000000000000000000000000000000) >> 44;
|
||||
int32_t ac0 = (data & 0b00000000000000000011100000000000000000000000000000000000000000) >> 41;
|
||||
int32_t a1 = (data & 0b000000000000000000000011110000000000000000000000000000000000000) >> 37;
|
||||
int32_t c1 = (data & 0b000000000000000000000000001111100000000000000000000000000000000) >> 32;
|
||||
int32_t b0 = (data & 0b000000000000000000000000000000011110000000000000000000000000000) >> 28;
|
||||
int32_t b1 = (data & 0b000000000000000000000000000000000001111000000000000000000000000) >> 24;
|
||||
int32_t aa1 = (data & 0b00000000000000000000000000000000000000111000000000000000000000) >> 21;
|
||||
int32_t ac1 = (data & 0b00000000000000000000000000000000000000000111000000000000000000) >> 18;
|
||||
int32_t d0 = (data & 0b000000000000000000000000000000000000000000000111000000000000000) >> 15;
|
||||
int32_t ab0 = (data & 0b00000000000000000000000000000000000000000000000111000000000000) >> 12;
|
||||
int32_t ad0 = (data & 0b00000000000000000000000000000000000000000000000000111000000000) >> 9;
|
||||
int32_t d1 = (data & 0b000000000000000000000000000000000000000000000000000000111000000) >> 6;
|
||||
int32_t ab1 = (data & 0b00000000000000000000000000000000000000000000000000000000111000) >> 3;
|
||||
int32_t ad1 = (data & 0b00000000000000000000000000000000000000000000000000000000000111) >> 0;
|
||||
|
||||
Gfx value = gsDPSetCombineLERP2(a0, b0, c0, d0, aa0, ab0, ac0, ad0, a1, b1, c1, d1, aa1, ab1, ac1, ad1);
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_SETTILESIZE:
|
||||
{
|
||||
int32_t sss = (data & 0x00FFF00000000000) >> 44;
|
||||
int32_t ttt = (data & 0x00000FFF00000000) >> 32;
|
||||
int32_t uuu = (data & 0x0000000000FFF000) >> 12;
|
||||
int32_t vvv = (data & 0x0000000000000FFF);
|
||||
int32_t i = (data & 0x000000000F000000) >> 24;
|
||||
|
||||
Gfx value = gsDPSetTileSize(i, sss, ttt, uuu, vvv);
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_LOADTLUT:
|
||||
{
|
||||
int32_t t = (data & 0x0000000007000000) >> 24;
|
||||
int32_t ccc = (data & 0x00000000003FF000) >> 14;
|
||||
|
||||
Gfx value = gsDPLoadTLUTCmd(t, ccc);
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_LOADTILE:
|
||||
{
|
||||
int sss = (data & 0x00FFF00000000000) >> 44;
|
||||
int ttt = (data & 0x00000FFF00000000) >> 32;
|
||||
int i = (data & 0x000000000F000000) >> 16;
|
||||
int uuu = (data & 0x0000000000FFF000) >> 12;
|
||||
int vvv= (data & 0x0000000000000FFF);
|
||||
|
||||
Gfx value = gsDPLoadTile(i, sss, ttt, uuu, vvv);
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
}
|
||||
break;
|
||||
case G_SETTIMG:
|
||||
{
|
||||
uint32_t seg = data & 0xFFFFFFFF;
|
||||
int32_t texAddress = Seg2Filespace(data, dList->parent->baseAddress);
|
||||
|
||||
if (!Globals::Instance->HasSegment(GETSEGNUM(seg)))
|
||||
{
|
||||
int32_t __ = (data & 0x00FF000000000000) >> 48;
|
||||
int32_t www = (data & 0x00000FFF00000000) >> 32;
|
||||
|
||||
uint32_t fmt = (__ & 0xE0) >> 5;
|
||||
uint32_t siz = (__ & 0x18) >> 3;
|
||||
|
||||
Gfx value = gsDPSetTextureImage(fmt, siz, www - 1, (seg & 0x0FFFFFFF) + 0xF0000000);
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1;
|
||||
|
||||
writer->Write(word0);
|
||||
writer->Write(word1);
|
||||
}
|
||||
else
|
||||
{
|
||||
std::string texName = "";
|
||||
bool foundDecl = Globals::Instance->GetSegmentedPtrName(seg, dList->parent, "", texName);
|
||||
|
||||
int32_t __ = (data & 0x00FF000000000000) >> 48;
|
||||
int32_t www = (data & 0x00000FFF00000000) >> 32;
|
||||
|
||||
uint32_t fmt = (__ & 0xE0) >> 5;
|
||||
uint32_t siz = (__ & 0x18) >> 3;
|
||||
|
||||
Gfx value = gsDPSetTextureImage(fmt, siz, www - 1, __);
|
||||
word0 = value.words.w0 & 0x00FFFFFF;
|
||||
word0 += (G_SETTIMG_OTR << 24);
|
||||
//word1 = value.words.w1;
|
||||
word1 = 0;
|
||||
|
||||
writer->Write(word0);
|
||||
writer->Write(word1);
|
||||
|
||||
if (foundDecl)
|
||||
{
|
||||
ZFile* assocFile = Globals::Instance->GetSegment(GETSEGNUM(seg));
|
||||
std::string assocFileName = assocFile->GetName();
|
||||
std::string fName = "";
|
||||
|
||||
if (GETSEGNUM(seg) == SEGMENT_SCENE || GETSEGNUM(seg) == SEGMENT_ROOM)
|
||||
fName = GetPathToRes(res, texName.c_str());
|
||||
else
|
||||
fName = GetPathToRes(assocFile->resources[0], texName.c_str());
|
||||
|
||||
uint64_t hash = CRC64(fName.c_str());
|
||||
|
||||
word0 = hash >> 32;
|
||||
word1 = hash & 0xFFFFFFFF;
|
||||
}
|
||||
else
|
||||
{
|
||||
word0 = 0;
|
||||
word1 = 0;
|
||||
spdlog::error("texDecl == nullptr! PTR = 0x{:08X}", texAddress);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case G_VTX:
|
||||
{
|
||||
if (GETSEGNUM(data) == 0xC || GETSEGNUM(data) == 0x8)
|
||||
{
|
||||
// hack for dynamic verticies used in en_ganon_mant and en_jsjutan
|
||||
// TODO is there a better way?
|
||||
int32_t aa = (data & 0x000000FF00000000ULL) >> 32;
|
||||
int32_t nn = (data & 0x000FF00000000000ULL) >> 44;
|
||||
|
||||
Gfx value = gsSPVertex(data & 0xFFFFFFFF, nn, ((aa >> 1) - nn));
|
||||
|
||||
word0 = value.words.w0;
|
||||
word1 = value.words.w1 | 0xF0000000;
|
||||
}
|
||||
else
|
||||
//if (dList->vertices.size() > 0)
|
||||
{
|
||||
// Connect neighboring vertex arrays
|
||||
std::vector<std::pair<uint32_t, std::vector<ZVtx>>> vertsKeys(dList->vertices.begin(),
|
||||
dList->vertices.end());
|
||||
|
||||
if (vertsKeys.size() > 0)
|
||||
{
|
||||
auto lastItem = vertsKeys[0];
|
||||
|
||||
for (size_t i = 1; i < vertsKeys.size(); i++)
|
||||
{
|
||||
auto curItem = vertsKeys[i];
|
||||
|
||||
int32_t sizeDiff = curItem.first - (lastItem.first + (lastItem.second.size() * 16));
|
||||
|
||||
// Make sure there isn't an unaccounted inbetween these two
|
||||
if (sizeDiff == 0)
|
||||
{
|
||||
for (auto v : curItem.second)
|
||||
{
|
||||
dList->vertices[lastItem.first].push_back(v);
|
||||
lastItem.second.push_back(v);
|
||||
}
|
||||
|
||||
dList->vertices.erase(curItem.first);
|
||||
vertsKeys.erase(vertsKeys.begin() + i);
|
||||
|
||||
i--;
|
||||
continue;
|
||||
}
|
||||
|
||||
lastItem = curItem;
|
||||
}
|
||||
}
|
||||
|
||||
// Write CRC64 of vtx file name
|
||||
uint32_t addr = data & 0xFFFFFFFF;
|
||||
|
||||
if (GETSEGNUM(data) == 0x80)
|
||||
addr -= dList->parent->baseAddress;
|
||||
|
||||
auto segOffset = GETSEGOFFSET(addr);
|
||||
//uint32_t seg = data & 0xFFFFFFFF;
|
||||
Declaration* vtxDecl = dList->parent->GetDeclarationRanged(segOffset);
|
||||
//std::string vtxName = "";
|
||||
//bool foundDecl = Globals::Instance->GetSegmentedPtrName(seg, dList->parent, "", vtxName);
|
||||
|
||||
int32_t aa = (data & 0x000000FF00000000ULL) >> 32;
|
||||
int32_t nn = (data & 0x000FF00000000000ULL) >> 44;
|
||||
|
||||
if (vtxDecl != nullptr && vtxDecl->varType != "Gfx")
|
||||
{
|
||||
uint32_t diff = segOffset - vtxDecl->address;
|
||||
|
||||
Gfx value = gsSPVertex(diff, nn, ((aa >> 1) - nn));
|
||||
|
||||
word0 = value.words.w0;
|
||||
word0 &= 0x00FFFFFF;
|
||||
word0 += (G_VTX_OTR << 24);
|
||||
word1 = value.words.w1;
|
||||
|
||||
writer->Write(word0);
|
||||
writer->Write(word1);
|
||||
|
||||
std::string fName = OTRExporter_DisplayList::GetPathToRes(res, vtxDecl->varName);
|
||||
|
||||
uint64_t hash = CRC64(fName.c_str());
|
||||
|
||||
word0 = hash >> 32;
|
||||
word1 = hash & 0xFFFFFFFF;
|
||||
|
||||
if (!File::Exists("Extract\\" + fName))
|
||||
{
|
||||
//printf("Exporting VTX Data %s\n", fName.c_str());
|
||||
// Write vertices to file
|
||||
MemoryStream* vtxStream = new MemoryStream();
|
||||
BinaryWriter vtxWriter = BinaryWriter(vtxStream);
|
||||
|
||||
int arrCnt = 0;
|
||||
|
||||
auto split = StringHelper::Split(vtxDecl->text, "\n");
|
||||
|
||||
for (int i = 0; i < split.size(); i++)
|
||||
{
|
||||
std::string line = split[i];
|
||||
|
||||
if (StringHelper::Contains(line, "VTX("))
|
||||
arrCnt++;
|
||||
}
|
||||
|
||||
// OTRTODO: Once we aren't relying on text representations, we should call ArrayExporter...
|
||||
OTRExporter::WriteHeader(nullptr, "", &vtxWriter, Ship::ResourceType::Array);
|
||||
|
||||
vtxWriter.Write((uint32_t)ZResourceType::Vertex);
|
||||
vtxWriter.Write((uint32_t)arrCnt);
|
||||
|
||||
size_t sz = dList->vertices[vtxDecl->address].size();
|
||||
|
||||
//if (sz > 0)
|
||||
{
|
||||
auto start = std::chrono::steady_clock::now();
|
||||
|
||||
// God dammit this is so dumb
|
||||
for (size_t i = 0; i < split.size(); i++)
|
||||
{
|
||||
std::string line = split[i];
|
||||
|
||||
if (StringHelper::Contains(line, "VTX("))
|
||||
{
|
||||
auto split2 = StringHelper::Split(StringHelper::Split(StringHelper::Split(line, "VTX(")[1], ")")[0], ",");
|
||||
|
||||
vtxWriter.Write((int16_t)std::stoi(split2[0], nullptr, 10)); // v.x
|
||||
vtxWriter.Write((int16_t)std::stoi(split2[1], nullptr, 10)); // v.y
|
||||
vtxWriter.Write((int16_t)std::stoi(split2[2], nullptr, 10)); // v.z
|
||||
|
||||
vtxWriter.Write((int16_t)0); // v.flag
|
||||
|
||||
vtxWriter.Write((int16_t)std::stoi(split2[3], nullptr, 10)); // v.s
|
||||
vtxWriter.Write((int16_t)std::stoi(split2[4], nullptr, 10)); // v.t
|
||||
|
||||
vtxWriter.Write((uint8_t)std::stoi(split2[5], nullptr, 10)); // v.r
|
||||
vtxWriter.Write((uint8_t)std::stoi(split2[6], nullptr, 10)); // v.g
|
||||
vtxWriter.Write((uint8_t)std::stoi(split2[7], nullptr, 10)); // v.b
|
||||
vtxWriter.Write((uint8_t)std::stoi(split2[8], nullptr, 10)); // v.a
|
||||
}
|
||||
}
|
||||
|
||||
File::WriteAllBytes("Extract\\" + fName, vtxStream->ToVector());
|
||||
|
||||
auto end = std::chrono::steady_clock::now();
|
||||
size_t diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
|
||||
|
||||
//printf("Exported VTX Array %s in %zums\n", fName.c_str(), diff);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
spdlog::error("vtxDecl == nullptr!");
|
||||
}
|
||||
}
|
||||
/*else
|
||||
{
|
||||
writer->Write(word0);
|
||||
writer->Write(word1);
|
||||
word0 = 0;
|
||||
word1 = 0;
|
||||
|
||||
spdlog::error("dList->vertices.size() <= 0!");
|
||||
}*/
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
writer->Write(word0);
|
||||
writer->Write(word1);
|
||||
}
|
||||
|
||||
auto dlEnd = std::chrono::steady_clock::now();
|
||||
size_t dlDiff = std::chrono::duration_cast<std::chrono::milliseconds>(dlEnd - dlStart).count();
|
||||
|
||||
//printf("Display List Gen in %zums\n", dlDiff);
|
||||
}
|
||||
|
||||
std::string OTRExporter_DisplayList::GetPathToRes(ZResource* res, std::string varName)
|
||||
{
|
||||
std::string prefix = GetPrefix(res);
|
||||
std::string fName = StringHelper::Sprintf("%s\\%s", GetParentFolderName(res).c_str(), varName.c_str());
|
||||
|
||||
return fName;
|
||||
}
|
||||
|
||||
std::string OTRExporter_DisplayList::GetParentFolderName(ZResource* res)
|
||||
{
|
||||
std::string prefix = GetPrefix(res);
|
||||
std::string oName = res->parent->GetOutName();
|
||||
|
||||
if (StringHelper::Contains(oName, "_scene"))
|
||||
{
|
||||
auto split = StringHelper::Split(oName, "_");
|
||||
oName = "";
|
||||
for (int i = 0; i < split.size() - 1; i++)
|
||||
oName += split[i] + "_";
|
||||
|
||||
oName += "scene";
|
||||
}
|
||||
else if (StringHelper::Contains(oName, "_room"))
|
||||
{
|
||||
oName = StringHelper::Split(oName, "_room")[0] + "_scene";
|
||||
}
|
||||
|
||||
if (prefix != "")
|
||||
oName = prefix + "\\" + oName;
|
||||
|
||||
return oName;
|
||||
}
|
||||
|
||||
std::string OTRExporter_DisplayList::GetPrefix(ZResource* res)
|
||||
{
|
||||
std::string oName = res->parent->GetOutName();
|
||||
std::string prefix = "";
|
||||
std::string xmlPath = StringHelper::Replace(res->parent->GetXmlFilePath().string(), "\\", "/");
|
||||
|
||||
if (StringHelper::Contains(oName, "_scene") || StringHelper::Contains(oName, "_room"))
|
||||
prefix = "scenes";
|
||||
else if (StringHelper::Contains(xmlPath, "objects/"))
|
||||
prefix = "objects";
|
||||
else if (StringHelper::Contains(xmlPath, "textures/"))
|
||||
prefix = "textures";
|
||||
else if (StringHelper::Contains(xmlPath, "overlays/"))
|
||||
prefix = "overlays";
|
||||
else if (StringHelper::Contains(xmlPath, "misc/"))
|
||||
prefix = "misc";
|
||||
else if (StringHelper::Contains(xmlPath, "text/"))
|
||||
prefix = "text";
|
||||
else if (StringHelper::Contains(xmlPath, "code/"))
|
||||
prefix = "code";
|
||||
|
||||
return prefix;
|
||||
}
|
17
OTRExporter/OTRExporter/DisplayListExporter.h
Normal file
@ -0,0 +1,17 @@
|
||||
#pragma once
|
||||
|
||||
#include "ZResource.h"
|
||||
#include "ZTexture.h"
|
||||
#include "ZDisplayList.h"
|
||||
#include "Exporter.h"
|
||||
#include <Utils/BinaryWriter.h>
|
||||
|
||||
class OTRExporter_DisplayList : public OTRExporter
|
||||
{
|
||||
public:
|
||||
virtual void Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer) override;
|
||||
static std::string GetParentFolderName(ZResource* res);
|
||||
static std::string GetPathToRes(ZResource* res, std::string varName);
|
||||
static std::string GetPrefix(ZResource* res);
|
||||
|
||||
};
|
20
OTRExporter/OTRExporter/Exporter.cpp
Normal file
@ -0,0 +1,20 @@
|
||||
#include "Exporter.h"
|
||||
#include "VersionInfo.h"
|
||||
|
||||
void OTRExporter::WriteHeader(ZResource* res, const fs::path& outPath, BinaryWriter* writer, Ship::ResourceType resType)
|
||||
{
|
||||
writer->Write((uint8_t)Endianess::Little); // 0x00
|
||||
writer->Write((uint8_t)0); // 0x01
|
||||
writer->Write((uint8_t)0); // 0x02
|
||||
writer->Write((uint8_t)0); // 0x03
|
||||
|
||||
writer->Write((uint32_t)resType); // 0x04
|
||||
writer->Write((uint32_t)MAJOR_VERSION); // 0x08
|
||||
writer->Write((uint64_t)0xDEADBEEFDEADBEEF); // id, 0x0C
|
||||
writer->Write((uint32_t)resourceVersions[resType]); // 0x10
|
||||
writer->Write((uint64_t)0); // ROM CRC, 0x14
|
||||
writer->Write((uint32_t)0); // ROM Enum, 0x1C
|
||||
|
||||
while (writer->GetBaseAddress() < 0x40)
|
||||
writer->Write((uint32_t)0); // To be used at a later date!
|
||||
}
|
12
OTRExporter/OTRExporter/Exporter.h
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
#include "ZResource.h"
|
||||
#include "ZArray.h"
|
||||
//#include "OTRExporter.h"
|
||||
#include <Utils/BinaryWriter.h>
|
||||
#include <Resource.h>
|
||||
|
||||
class OTRExporter : public ZResourceExporter
|
||||
{
|
||||
protected:
|
||||
static void WriteHeader(ZResource* res, const fs::path& outPath, BinaryWriter* writer, Ship::ResourceType resType);
|
||||
};
|
183
OTRExporter/OTRExporter/Main.cpp
Normal file
@ -0,0 +1,183 @@
|
||||
#include <Archive.h>
|
||||
#include "BackgroundExporter.h"
|
||||
#include "TextureExporter.h"
|
||||
#include "RoomExporter.h"
|
||||
#include "CollisionExporter.h"
|
||||
#include "DisplayListExporter.h"
|
||||
#include "PlayerAnimationExporter.h"
|
||||
#include "SkeletonExporter.h"
|
||||
#include "SkeletonLimbExporter.h"
|
||||
#include "ArrayExporter.h"
|
||||
#include "VtxExporter.h"
|
||||
#include "AnimationExporter.h"
|
||||
#include "CutsceneExporter.h"
|
||||
#include "PathExporter.h"
|
||||
#include "TextExporter.h"
|
||||
#include "BlobExporter.h"
|
||||
#include "MtxExporter.h"
|
||||
#include <Globals.h>
|
||||
#include <Utils/File.h>
|
||||
#include <Utils/Directory.h>
|
||||
#include <Utils/MemoryStream.h>
|
||||
#include <Utils/BinaryWriter.h>
|
||||
|
||||
std::string otrFileName = "oot.otr";
|
||||
std::shared_ptr<Ship::Archive> otrArchive;
|
||||
BinaryWriter* fileWriter;
|
||||
std::chrono::steady_clock::time_point fileStart, resStart;
|
||||
|
||||
void InitVersionInfo();
|
||||
|
||||
enum class ExporterFileMode
|
||||
{
|
||||
BuildOTR = (int)ZFileMode::Custom + 1,
|
||||
};
|
||||
|
||||
static void ExporterParseFileMode(const std::string& buildMode, ZFileMode& fileMode)
|
||||
{
|
||||
if (buildMode == "botr")
|
||||
{
|
||||
fileMode = (ZFileMode)ExporterFileMode::BuildOTR;
|
||||
|
||||
if (File::Exists(otrFileName))
|
||||
otrArchive = std::shared_ptr<Ship::Archive>(new Ship::Archive(otrFileName, true));
|
||||
else
|
||||
otrArchive = Ship::Archive::CreateArchive(otrFileName, 65536 / 2);
|
||||
|
||||
auto lst = Directory::ListFiles("Extract");
|
||||
|
||||
for (auto item : lst)
|
||||
{
|
||||
auto fileData = File::ReadAllBytes(item);
|
||||
otrArchive->AddFile(StringHelper::Split(item, "Extract\\")[1], (uintptr_t)fileData.data(), fileData.size());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void ExporterParseArgs(int argc, char* argv[], int& i)
|
||||
{
|
||||
std::string arg = argv[i];
|
||||
|
||||
if (arg == "--otrfile")
|
||||
{
|
||||
otrFileName = argv[i + 1];
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
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::BuildOTR)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static void ExporterFileBegin(ZFile* file)
|
||||
{
|
||||
fileStart = std::chrono::steady_clock::now();
|
||||
|
||||
MemoryStream* stream = new MemoryStream();
|
||||
fileWriter = new BinaryWriter(stream);
|
||||
}
|
||||
|
||||
static void ExporterFileEnd(ZFile* file)
|
||||
{
|
||||
}
|
||||
|
||||
static void ExporterResourceEnd(ZResource* res, BinaryWriter& writer)
|
||||
{
|
||||
auto streamShared = writer.GetStream();
|
||||
MemoryStream* strem = (MemoryStream*)streamShared.get();
|
||||
|
||||
auto start = std::chrono::steady_clock::now();
|
||||
|
||||
if (res->GetName() != "")
|
||||
{
|
||||
std::string oName = res->parent->GetOutName();
|
||||
std::string rName = res->GetName();
|
||||
std::string prefix = OTRExporter_DisplayList::GetPrefix(res);
|
||||
|
||||
//auto xmlFilePath = res->parent->GetXmlFilePath();
|
||||
//prefix = StringHelper::Split(StringHelper::Split(xmlFilePath.string(), "xml\\")[1], ".xml")[0];
|
||||
|
||||
if (StringHelper::Contains(oName, "_scene"))
|
||||
{
|
||||
auto split = StringHelper::Split(oName, "_");
|
||||
oName = "";
|
||||
for (int i = 0; i < split.size() - 1; i++)
|
||||
oName += split[i] + "_";
|
||||
|
||||
oName += "scene";
|
||||
}
|
||||
else if (StringHelper::Contains(oName, "_room"))
|
||||
{
|
||||
oName = StringHelper::Split(oName, "_room")[0] + "_scene";
|
||||
}
|
||||
|
||||
std::string fName = "";
|
||||
|
||||
if (prefix != "")
|
||||
fName = StringHelper::Sprintf("%s\\%s\\%s", prefix.c_str(), oName.c_str(), rName.c_str());
|
||||
else
|
||||
fName = StringHelper::Sprintf("%s\\%s", oName.c_str(), rName.c_str());
|
||||
|
||||
File::WriteAllBytes("Extract\\" + fName, strem->ToVector());
|
||||
}
|
||||
|
||||
auto end = std::chrono::steady_clock::now();
|
||||
size_t diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
|
||||
|
||||
//if (diff > 10)
|
||||
//printf("Exported Resource End %s in %zums\n", res->GetName().c_str(), diff);
|
||||
}
|
||||
|
||||
static void ExporterXMLBegin()
|
||||
{
|
||||
}
|
||||
|
||||
static void ExporterXMLEnd()
|
||||
{
|
||||
}
|
||||
|
||||
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->beginXMLFunc = ExporterXMLBegin;
|
||||
exporterSet->endXMLFunc = ExporterXMLEnd;
|
||||
exporterSet->resSaveFunc = ExporterResourceEnd;
|
||||
exporterSet->exporters[ZResourceType::Background] = new OTRExporter_Background();
|
||||
exporterSet->exporters[ZResourceType::Texture] = new OTRExporter_Texture();
|
||||
exporterSet->exporters[ZResourceType::Room] = new OTRExporter_Room();
|
||||
exporterSet->exporters[ZResourceType::AltHeader] = new OTRExporter_Room();
|
||||
exporterSet->exporters[ZResourceType::Scene] = new OTRExporter_Room();
|
||||
exporterSet->exporters[ZResourceType::CollisionHeader] = new OTRExporter_Collision();
|
||||
exporterSet->exporters[ZResourceType::DisplayList] = new OTRExporter_DisplayList();
|
||||
exporterSet->exporters[ZResourceType::PlayerAnimationData] = new OTRExporter_PlayerAnimationExporter();
|
||||
exporterSet->exporters[ZResourceType::Skeleton] = new OTRExporter_Skeleton();
|
||||
exporterSet->exporters[ZResourceType::Limb] = new OTRExporter_SkeletonLimb();
|
||||
exporterSet->exporters[ZResourceType::Animation] = new OTRExporter_Animation();
|
||||
exporterSet->exporters[ZResourceType::Cutscene] = new OTRExporter_Cutscene();
|
||||
exporterSet->exporters[ZResourceType::Vertex] = new OTRExporter_Vtx();
|
||||
exporterSet->exporters[ZResourceType::Array] = new OTRExporter_Array();
|
||||
exporterSet->exporters[ZResourceType::Path] = new OTRExporter_Path();
|
||||
exporterSet->exporters[ZResourceType::Text] = new OTRExporter_Text();
|
||||
exporterSet->exporters[ZResourceType::Blob] = new OTRExporter_Blob();
|
||||
exporterSet->exporters[ZResourceType::Mtx] = new OTRExporter_MtxExporter();
|
||||
|
||||
Globals::AddExporter("OTR", exporterSet);
|
||||
|
||||
InitVersionInfo();
|
||||
}
|
||||
|
||||
// When ZAPD starts up, it will automatically call the below function, which in turn sets up our exporters.
|
||||
REGISTER_EXPORTER(ImportExporters);
|
5
OTRExporter/OTRExporter/Main.h
Normal file
@ -0,0 +1,5 @@
|
||||
#pragma once
|
||||
|
||||
#include <Archive.h>
|
||||
|
||||
extern std::shared_ptr<Ship::Archive> otrArchive;
|
70
OTRExporter/OTRExporter/Makefile
Normal file
@ -0,0 +1,70 @@
|
||||
# Only used for standalone compilation, usually inherits these from the main makefile
|
||||
|
||||
CXX := g++
|
||||
AR := ar
|
||||
FORMAT := clang-format-11
|
||||
|
||||
ASAN ?= 0
|
||||
DEBUG ?= 1
|
||||
OPTFLAGS ?= -O0
|
||||
LTO ?= 0
|
||||
|
||||
WARN := -Wall -Wextra -Werror \
|
||||
-Wno-unused-parameter \
|
||||
-Wno-unused-function \
|
||||
-Wno-unused-variable
|
||||
|
||||
|
||||
CXXFLAGS := $(WARN) -std=c++17
|
||||
CPPFLAGS := -MMD
|
||||
|
||||
ifneq ($(DEBUG),0)
|
||||
CXXFLAGS += -g
|
||||
endif
|
||||
|
||||
ifneq ($(ASAN),0)
|
||||
CXXFLAGS += -fsanitize=address
|
||||
endif
|
||||
|
||||
ifneq ($(LTO),0)
|
||||
CXXFLAGS += -flto
|
||||
endif
|
||||
|
||||
SRC_DIRS := $(shell find -type d -not -path "*build*")
|
||||
CXX_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.cpp))
|
||||
H_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.h))
|
||||
|
||||
O_FILES := $(CXX_FILES:%.cpp=build/%.o)
|
||||
D_FILES := $(O_FILES:%.o=%.d)
|
||||
LIB := OTRExporter.a
|
||||
|
||||
INC_DIRS := $(addprefix -I, \
|
||||
../../ZAPD/ZAPD \
|
||||
../../ZAPD/lib/tinyxml2 \
|
||||
../../ZAPD/lib/libgfxd \
|
||||
../../ZAPD/ZAPDUtils \
|
||||
../../OtrLib/otrlib \
|
||||
../../OtrLib/otrlib/Lib/spdlog/include \
|
||||
../../OtrLib/otrlib/Lib/Fast3D/U64 \
|
||||
)
|
||||
|
||||
# create build directories
|
||||
$(shell mkdir -p $(SRC_DIRS:%=build/%))
|
||||
|
||||
all: $(LIB)
|
||||
|
||||
clean:
|
||||
rm -rf build $(LIB)
|
||||
|
||||
format:
|
||||
$(FORMAT) -i $(CXX_FILES) $(H_FILES)
|
||||
|
||||
.PHONY: all clean format
|
||||
|
||||
build/%.o: %.cpp
|
||||
$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(OPTFLAGS) $(INC_DIRS) -c $< -o $@
|
||||
|
||||
$(LIB): $(O_FILES)
|
||||
$(AR) rcs $@ $^
|
||||
|
||||
-include $(D_FILES)
|
13
OTRExporter/OTRExporter/MtxExporter.cpp
Normal file
@ -0,0 +1,13 @@
|
||||
#include "MtxExporter.h"
|
||||
|
||||
void OTRExporter_MtxExporter::Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer)
|
||||
{
|
||||
ZMtx* mtx = (ZMtx*)res;
|
||||
|
||||
WriteHeader(res, outPath, writer, Ship::ResourceType::Matrix);
|
||||
|
||||
for (size_t i = 0; i < 4; i++)
|
||||
for (size_t j = 0; j < 4; j++)
|
||||
//TODO possibly utilize the array class better
|
||||
writer->Write(mtx->mtx[i][j]);
|
||||
}
|
10
OTRExporter/OTRExporter/MtxExporter.h
Normal file
@ -0,0 +1,10 @@
|
||||
#include "ZResource.h"
|
||||
#include "ZMtx.h"
|
||||
#include "Exporter.h"
|
||||
#include <Utils/BinaryWriter.h>
|
||||
|
||||
class OTRExporter_MtxExporter : public OTRExporter
|
||||
{
|
||||
public:
|
||||
virtual void Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer) override;
|
||||
};
|
202
OTRExporter/OTRExporter/OTRExporter.vcxproj
Normal file
@ -0,0 +1,202 @@
|
||||
<?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>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="ArrayExporter.h" />
|
||||
<ClInclude Include="BackgroundExporter.h" />
|
||||
<ClInclude Include="BlobExporter.h" />
|
||||
<ClInclude Include="CollisionExporter.h" />
|
||||
<ClInclude Include="command_macros_base.h" />
|
||||
<ClInclude Include="CutsceneExporter.h" />
|
||||
<ClInclude Include="DisplayListExporter.h" />
|
||||
<ClInclude Include="AnimationExporter.h" />
|
||||
<ClInclude Include="Main.h" />
|
||||
<ClInclude Include="Exporter.h" />
|
||||
<ClInclude Include="MtxExporter.h" />
|
||||
<ClInclude Include="SkeletonExporter.h" />
|
||||
<ClInclude Include="SkeletonLimbExporter.h" />
|
||||
<ClInclude Include="PathExporter.h" />
|
||||
<ClInclude Include="PlayerAnimationExporter.h" />
|
||||
<ClInclude Include="RoomExporter.h" />
|
||||
<ClInclude Include="TextExporter.h" />
|
||||
<ClInclude Include="TextureExporter.h" />
|
||||
<ClInclude Include="VersionInfo.h" />
|
||||
<ClInclude Include="VtxExporter.h" />
|
||||
<ClInclude Include="z64cutscene.h" />
|
||||
<ClInclude Include="z64cutscene_commands.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="ArrayExporter.cpp" />
|
||||
<ClCompile Include="BackgroundExporter.cpp" />
|
||||
<ClCompile Include="BlobExporter.cpp" />
|
||||
<ClCompile Include="CollisionExporter.cpp" />
|
||||
<ClCompile Include="CutsceneExporter.cpp" />
|
||||
<ClCompile Include="DisplayListExporter.cpp" />
|
||||
<ClCompile Include="AnimationExporter.cpp" />
|
||||
<ClCompile Include="Main.cpp" />
|
||||
<ClCompile Include="Exporter.cpp" />
|
||||
<ClCompile Include="MtxExporter.cpp" />
|
||||
<ClCompile Include="SkeletonExporter.cpp" />
|
||||
<ClCompile Include="SkeletonLimbExporter.cpp" />
|
||||
<ClCompile Include="PathExporter.cpp" />
|
||||
<ClCompile Include="PlayerAnimationExporter.cpp" />
|
||||
<ClCompile Include="RoomExporter.cpp" />
|
||||
<ClCompile Include="TextExporter.cpp" />
|
||||
<ClCompile Include="TextureExporter.cpp" />
|
||||
<ClCompile Include="VersionInfo.cpp" />
|
||||
<ClCompile Include="VtxExporter.cpp" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>16.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{a6103fd3-0709-4fc7-b066-1a6e056d6306}</ProjectGuid>
|
||||
<RootNamespace>OTRExporter</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</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>StaticLibrary</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>
|
||||
<IncludePath>$(SolutionDir)otrlib;$(SolutionDir)\ZAPD\ZAPD\;$(SolutionDir)\ZAPD\lib\tinyxml2;$(SolutionDir)\ZAPD\lib\libgfxd;$(SolutionDir)\ZAPD\lib\elfio;$(SolutionDir)\ZAPD\lib\assimp\include;$(SolutionDir)\ZAPD\lib\stb;$(ProjectDir);$(IncludePath)</IncludePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<IncludePath>$(ProjectDir)..\..\ZAPDTR\ZAPD;$(ProjectDir)..\..\ZAPDTR\lib\tinyxml2;$(ProjectDir)..\..\ZAPDTR\lib\libgfxd;$(ProjectDir)..\..\ZAPDTR\ZAPDUtils;$(ProjectDir)..\..\libultraship\libultraship;$(ProjectDir)..\..\libultraship\libultraship\lib\spdlog\include;$(ProjectDir)..\..\libultraship\libultraship\Lib\Fast3D\U64;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>$(ProjectDir)..\..\libultraship\libultraship;$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<IncludePath>$(ProjectDir)..\..\ZAPDTR\ZAPD;$(ProjectDir)..\..\ZAPDTR\lib\tinyxml2;$(ProjectDir)..\..\ZAPDTR\lib\libgfxd;$(ProjectDir)..\..\ZAPDTR\ZAPDUtils;$(ProjectDir)..\..\libultraship\libultraship;$(ProjectDir)..\..\libultraship\libultraship\lib\spdlog\include;$(ProjectDir)..\..\libultraship\libultraship\Lib\Fast3D\U64;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>$(ProjectDir)..\..\libultraship\libultraship;$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
</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>
|
||||
<AdditionalDependencies>ZAPDUtils.lib;OTRLib.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
<LanguageStandard_C>stdc11</LanguageStandard_C>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
144
OTRExporter/OTRExporter/OTRExporter.vcxproj.filters
Normal file
@ -0,0 +1,144 @@
|
||||
<?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="CollisionExporter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="RoomExporter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="TextureExporter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="DisplayListExporter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Main.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="PlayerAnimationExporter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="BackgroundExporter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="VtxExporter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="ArrayExporter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Exporter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="AnimationExporter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="CutsceneExporter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="z64cutscene.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="z64cutscene_commands.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="command_macros_base.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="PathExporter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="SkeletonExporter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="SkeletonLimbExporter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="TextExporter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="BlobExporter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="MtxExporter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="VersionInfo.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="CollisionExporter.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="TextureExporter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="DisplayListExporter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="PlayerAnimationExporter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SkeletonExporter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SkeletonLimbExporter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="BackgroundExporter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="VtxExporter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="ArrayExporter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Exporter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="AnimationExporter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="CutsceneExporter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="PathExporter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="TextExporter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="BlobExporter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="MtxExporter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="VersionInfo.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
23
OTRExporter/OTRExporter/PathExporter.cpp
Normal file
@ -0,0 +1,23 @@
|
||||
#include "PathExporter.h"
|
||||
#include "../ZAPD/ZFile.h"
|
||||
|
||||
void OTRExporter_Path::Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer)
|
||||
{
|
||||
ZPath* path = (ZPath*)res;
|
||||
|
||||
WriteHeader(res, outPath, writer, Ship::ResourceType::Path);
|
||||
|
||||
writer->Write((uint32_t)path->pathways.size());
|
||||
|
||||
for (int k = 0; k < path->pathways.size(); k++)
|
||||
{
|
||||
writer->Write((uint32_t)path->pathways[k].points.size());
|
||||
|
||||
for (int i = 0; i < path->pathways[k].points.size(); i++)
|
||||
{
|
||||
writer->Write(path->pathways[k].points[i].scalars[0].scalarData.s16);
|
||||
writer->Write(path->pathways[k].points[i].scalars[1].scalarData.s16);
|
||||
writer->Write(path->pathways[k].points[i].scalars[2].scalarData.s16);
|
||||
}
|
||||
}
|
||||
}
|
12
OTRExporter/OTRExporter/PathExporter.h
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "ZResource.h"
|
||||
#include "ZPath.h"
|
||||
#include "Exporter.h"
|
||||
#include <Utils/BinaryWriter.h>
|
||||
|
||||
class OTRExporter_Path : public OTRExporter
|
||||
{
|
||||
public:
|
||||
virtual void Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer) override;
|
||||
};
|
21
OTRExporter/OTRExporter/PlayerAnimationExporter.cpp
Normal file
@ -0,0 +1,21 @@
|
||||
#include "PlayerAnimationExporter.h"
|
||||
#include <Resource.h>
|
||||
|
||||
void OTRExporter_PlayerAnimationExporter::Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer)
|
||||
{
|
||||
ZPlayerAnimationData* anim = (ZPlayerAnimationData*)res;
|
||||
|
||||
WriteHeader(res, outPath, writer, Ship::ResourceType::PlayerAnimation);
|
||||
|
||||
auto start = std::chrono::steady_clock::now();
|
||||
|
||||
writer->Write((uint32_t)anim->limbRotData.size());
|
||||
|
||||
for (size_t i = 0; i < anim->limbRotData.size(); i++)
|
||||
writer->Write(anim->limbRotData[i]);
|
||||
|
||||
auto end = std::chrono::steady_clock::now();
|
||||
size_t diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
|
||||
|
||||
//printf("Exported Player Anim %s in %zums\n", anim->GetName().c_str(), diff);
|
||||
}
|
13
OTRExporter/OTRExporter/PlayerAnimationExporter.h
Normal file
@ -0,0 +1,13 @@
|
||||
#pragma once
|
||||
|
||||
#include "ZResource.h"
|
||||
#include "ZTexture.h"
|
||||
#include "ZPlayerAnimationData.h"
|
||||
#include "Exporter.h"
|
||||
#include <Utils/BinaryWriter.h>
|
||||
|
||||
class OTRExporter_PlayerAnimationExporter : public OTRExporter
|
||||
{
|
||||
public:
|
||||
virtual void Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer) override;
|
||||
};
|
530
OTRExporter/OTRExporter/RoomExporter.cpp
Normal file
@ -0,0 +1,530 @@
|
||||
#include "RoomExporter.h"
|
||||
#include "Utils/BinaryWriter.h"
|
||||
#include "Utils/MemoryStream.h"
|
||||
#include "Utils/File.h"
|
||||
#include <ZRoom/Commands/SetMesh.h>
|
||||
#include <ZRoom/Commands/SetWind.h>
|
||||
#include <ZRoom/Commands/SetTimeSettings.h>
|
||||
#include <ZRoom/Commands/SetSkyboxModifier.h>
|
||||
#include <ZRoom/Commands/SetSoundSettings.h>
|
||||
#include <ZRoom/Commands/SetCameraSettings.h>
|
||||
#include <ZRoom/Commands/SetRoomBehavior.h>
|
||||
#include <ZRoom/Commands/SetCsCamera.h>
|
||||
#include <ZRoom/Commands/SetRoomList.h>
|
||||
#include <ZRoom/Commands/SetCollisionHeader.h>
|
||||
#include <ZRoom/Commands/SetEntranceList.h>
|
||||
#include <ZRoom/Commands/SetSpecialObjects.h>
|
||||
#include <ZRoom/Commands/SetStartPositionList.h>
|
||||
#include <ZRoom/Commands/SetSkyboxSettings.h>
|
||||
#include <ZRoom/Commands/SetLightingSettings.h>
|
||||
#include <ZRoom/Commands/SetLightList.h>
|
||||
#include <ZRoom/Commands/SetEchoSettings.h>
|
||||
#include <ZRoom/Commands/SetObjectList.h>
|
||||
#include <ZRoom/Commands/SetAlternateHeaders.h>
|
||||
#include "CollisionExporter.h"
|
||||
#include "DisplayListExporter.h"
|
||||
#include "Resource.h"
|
||||
#include <Globals.h>
|
||||
#include <ZRoom/Commands/SetExitList.h>
|
||||
#include <ZRoom/Commands/SetPathways.h>
|
||||
#include "TextureExporter.h"
|
||||
#include "Main.h"
|
||||
#include <ZRoom/Commands/SetCutscenes.h>
|
||||
#include "CutsceneExporter.h"
|
||||
#include <ZRoom/Commands/SetTransitionActorList.h>
|
||||
#include "PathExporter.h"
|
||||
#undef FindResource
|
||||
|
||||
void OTRExporter_Room::Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer)
|
||||
{
|
||||
ZRoom* room = (ZRoom*)res;
|
||||
|
||||
WriteHeader(res, outPath, writer, Ship::ResourceType::Room);
|
||||
|
||||
writer->Write((uint32_t)room->commands.size());
|
||||
|
||||
for (size_t i = 0; i < room->commands.size(); i++)
|
||||
{
|
||||
ZRoomCommand* cmd = room->commands[i];
|
||||
|
||||
writer->Write((uint32_t)cmd->cmdID);
|
||||
|
||||
switch (cmd->cmdID)
|
||||
{
|
||||
case RoomCommand::SetTransitionActorList:
|
||||
{
|
||||
SetTransitionActorList* cmdTrans = (SetTransitionActorList*)cmd;
|
||||
|
||||
writer->Write((uint32_t)cmdTrans->transitionActors.size());
|
||||
|
||||
for (const TransitionActorEntry& entry : cmdTrans->transitionActors)
|
||||
{
|
||||
writer->Write(entry.frontObjectRoom);
|
||||
writer->Write(entry.frontTransitionReaction);
|
||||
writer->Write(entry.backObjectRoom);
|
||||
writer->Write(entry.backTransitionReaction);
|
||||
writer->Write(entry.actorNum);
|
||||
writer->Write(entry.posX);
|
||||
writer->Write(entry.posY);
|
||||
writer->Write(entry.posZ);
|
||||
writer->Write(entry.rotY);
|
||||
writer->Write(entry.initVar);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case RoomCommand::SetActorList:
|
||||
{
|
||||
SetActorList* cmdSetActorList = (SetActorList*)cmd;
|
||||
|
||||
// There are instance of the amount of actors in the file differing from the size listed in the command.
|
||||
// This can cause issues if we export actors with garbage data, so let's trust the command size
|
||||
writer->Write((uint32_t)cmdSetActorList->numActors);
|
||||
|
||||
for (int i = 0; i < cmdSetActorList->numActors; i++)
|
||||
{
|
||||
const ActorSpawnEntry& entry = cmdSetActorList->actors[i];
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case RoomCommand::SetWind:
|
||||
{
|
||||
SetWind* cmdSetWind = (SetWind*)cmd;
|
||||
|
||||
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(cmdTime->hour); // 0x04
|
||||
writer->Write(cmdTime->min); // 0x05
|
||||
writer->Write(cmdTime->unk); // 0x06
|
||||
}
|
||||
break;
|
||||
case RoomCommand::SetSkyboxModifier:
|
||||
{
|
||||
SetSkyboxModifier* cmdSkybox = (SetSkyboxModifier*)cmd;
|
||||
|
||||
writer->Write(cmdSkybox->disableSky); // 0x04
|
||||
writer->Write(cmdSkybox->disableSunMoon); // 0x05
|
||||
}
|
||||
break;
|
||||
case RoomCommand::SetEchoSettings:
|
||||
{
|
||||
SetEchoSettings* cmdEcho = (SetEchoSettings*)cmd;
|
||||
|
||||
writer->Write((uint8_t)cmdEcho->echo); // 0x07
|
||||
}
|
||||
break;
|
||||
case RoomCommand::SetSoundSettings:
|
||||
{
|
||||
SetSoundSettings* cmdSound = (SetSoundSettings*)cmd;
|
||||
|
||||
writer->Write((uint8_t)cmdSound->reverb); // 0x01
|
||||
|
||||
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)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(cmdRoom->gameplayFlags2); // 0x04
|
||||
}
|
||||
break;
|
||||
case RoomCommand::SetCsCamera:
|
||||
{
|
||||
SetCsCamera* cmdCsCam = (SetCsCamera*)cmd;
|
||||
|
||||
writer->Write((uint32_t)cmdCsCam->cameras.size());
|
||||
|
||||
for (size_t i = 0; i < cmdCsCam->cameras.size(); i++)
|
||||
{
|
||||
writer->Write(cmdCsCam->cameras[i].baseOffset);
|
||||
writer->Write(cmdCsCam->cameras[i].type);
|
||||
writer->Write(cmdCsCam->cameras[i].numPoints);
|
||||
}
|
||||
|
||||
writer->Write((uint32_t)cmdCsCam->points.size());
|
||||
|
||||
for (int i = 0; i < cmdCsCam->points.size(); i++)
|
||||
{
|
||||
writer->Write(cmdCsCam->points[i].scalars[0].scalarData.s16);
|
||||
writer->Write(cmdCsCam->points[i].scalars[1].scalarData.s16);
|
||||
writer->Write(cmdCsCam->points[i].scalars[2].scalarData.s16);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case RoomCommand::SetMesh:
|
||||
{
|
||||
SetMesh* cmdMesh = (SetMesh*)cmd;
|
||||
|
||||
writer->Write((uint8_t)cmdMesh->data); // 0x01
|
||||
writer->Write(cmdMesh->meshHeaderType);
|
||||
|
||||
if (cmdMesh->meshHeaderType == 0 || cmdMesh->meshHeaderType == 2)
|
||||
{
|
||||
PolygonType2* poly = (PolygonType2*)cmdMesh->polyType.get();
|
||||
|
||||
writer->Write(poly->num);
|
||||
|
||||
for (int i = 0; i < poly->num; i++)
|
||||
WritePolyDList(writer, room, &poly->polyDLists[i]);
|
||||
}
|
||||
else if (cmdMesh->meshHeaderType == 1)
|
||||
{
|
||||
PolygonType1* poly = (PolygonType1*)cmdMesh->polyType.get();
|
||||
|
||||
writer->Write(poly->format);
|
||||
|
||||
auto test = (PolygonDlist*)&poly->polyDLists[0];
|
||||
Declaration* dListDeclOpa = poly->parent->GetDeclaration(GETSEGOFFSET(test->opa));
|
||||
Declaration* dListDeclXlu = poly->parent->GetDeclaration(GETSEGOFFSET(test->xlu));
|
||||
|
||||
if (test->opa != 0)
|
||||
writer->Write(StringHelper::Sprintf("%s\\%s", OTRExporter_DisplayList::GetParentFolderName(res).c_str(), dListDeclOpa->varName.c_str()));
|
||||
else
|
||||
writer->Write("");
|
||||
|
||||
if (test->xlu != 0)
|
||||
writer->Write(StringHelper::Sprintf("%s\\%s", OTRExporter_DisplayList::GetParentFolderName(res).c_str(), dListDeclXlu->varName.c_str()));
|
||||
else
|
||||
writer->Write("");
|
||||
|
||||
if (poly->format == 2)
|
||||
{
|
||||
writer->Write((uint32_t)poly->count);
|
||||
|
||||
for (int i = 0; i < poly->count; i++)
|
||||
{
|
||||
writer->Write(poly->multiList[i].unk_00);
|
||||
writer->Write(poly->multiList[i].id);
|
||||
|
||||
Declaration* bgDecl = poly->parent->GetDeclarationRanged(GETSEGOFFSET(poly->multiList[i].source));
|
||||
|
||||
writer->Write(OTRExporter_DisplayList::GetPathToRes(poly->multiList[i].sourceBackground, bgDecl->varName));
|
||||
|
||||
writer->Write(poly->multiList[i].unk_0C);
|
||||
writer->Write(poly->multiList[i].tlut);
|
||||
writer->Write(poly->multiList[i].width);
|
||||
writer->Write(poly->multiList[i].height);
|
||||
writer->Write(poly->multiList[i].fmt);
|
||||
writer->Write(poly->multiList[i].siz);
|
||||
writer->Write(poly->multiList[i].mode0);
|
||||
writer->Write(poly->multiList[i].tlutCount);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
writer->Write((uint32_t)1);
|
||||
|
||||
writer->Write(poly->single.unk_00);
|
||||
writer->Write(poly->single.id);
|
||||
|
||||
Declaration* bgDecl = poly->parent->GetDeclarationRanged(GETSEGOFFSET(poly->single.source));
|
||||
|
||||
writer->Write(OTRExporter_DisplayList::GetPathToRes(poly->single.sourceBackground, bgDecl->varName));
|
||||
|
||||
writer->Write(poly->single.unk_0C);
|
||||
writer->Write(poly->single.tlut);
|
||||
writer->Write(poly->single.width);
|
||||
writer->Write(poly->single.height);
|
||||
writer->Write(poly->single.fmt);
|
||||
writer->Write(poly->single.siz);
|
||||
writer->Write(poly->single.mode0);
|
||||
writer->Write(poly->single.tlutCount);
|
||||
}
|
||||
|
||||
if (poly->dlist != 0)
|
||||
WritePolyDList(writer, room, &poly->polyDLists[0]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case RoomCommand::SetCameraSettings:
|
||||
{
|
||||
SetCameraSettings* cmdCam = (SetCameraSettings*)cmd;
|
||||
|
||||
writer->Write((uint8_t)cmdCam->cameraMovement); // 0x01
|
||||
writer->Write(cmdCam->mapHighlight); // 0x04
|
||||
}
|
||||
break;
|
||||
case RoomCommand::SetLightList:
|
||||
{
|
||||
SetLightList* cmdLight = (SetLightList*)cmd;
|
||||
|
||||
writer->Write((uint32_t)cmdLight->lights.size());
|
||||
|
||||
for (size_t i = 0; i < cmdLight->lights.size(); i++)
|
||||
{
|
||||
writer->Write(cmdLight->lights[i].type);
|
||||
writer->Write(cmdLight->lights[i].x);
|
||||
writer->Write(cmdLight->lights[i].y);
|
||||
writer->Write(cmdLight->lights[i].z);
|
||||
writer->Write(cmdLight->lights[i].r);
|
||||
writer->Write(cmdLight->lights[i].g);
|
||||
writer->Write(cmdLight->lights[i].b);
|
||||
writer->Write(cmdLight->lights[i].drawGlow);
|
||||
writer->Write(cmdLight->lights[i].radius);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case RoomCommand::SetLightingSettings:
|
||||
{
|
||||
SetLightingSettings* cmdLight = (SetLightingSettings*)cmd;
|
||||
|
||||
writer->Write((uint32_t)cmdLight->settings.size()); // 0x01
|
||||
|
||||
for (const 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);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case RoomCommand::SetRoomList:
|
||||
{
|
||||
SetRoomList* cmdRoom = (SetRoomList*)cmd;
|
||||
|
||||
writer->Write((uint32_t)cmdRoom->romfile->numRooms); // 0x01
|
||||
|
||||
for (size_t i = 0;i < cmdRoom->romfile->numRooms; i++)
|
||||
{
|
||||
//std::string roomName = StringHelper::Sprintf("%s\\%s_room_%i", (StringHelper::Split(room->GetName(), "_")[0] + "_scene").c_str(), StringHelper::Split(room->GetName(), "_scene")[0].c_str(), i);
|
||||
std::string roomName = OTRExporter_DisplayList::GetPathToRes(room, StringHelper::Sprintf("%s_room_%i", StringHelper::Split(room->GetName(), "_scene")[0].c_str(), i));
|
||||
writer->Write(roomName);
|
||||
writer->Write(cmdRoom->romfile->rooms[i].virtualAddressStart);
|
||||
writer->Write(cmdRoom->romfile->rooms[i].virtualAddressEnd);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case RoomCommand::SetCollisionHeader:
|
||||
{
|
||||
SetCollisionHeader* cmdCollHeader = (SetCollisionHeader*)cmd;
|
||||
|
||||
Declaration* colHeaderDecl = room->parent->GetDeclaration(cmdCollHeader->segmentOffset);
|
||||
std::string path = OTRExporter_DisplayList::GetPathToRes(room, colHeaderDecl->varName);
|
||||
writer->Write(path);
|
||||
}
|
||||
break;
|
||||
case RoomCommand::SetEntranceList:
|
||||
{
|
||||
SetEntranceList* cmdEntrance = (SetEntranceList*)cmd;
|
||||
|
||||
writer->Write((uint32_t)cmdEntrance->entrances.size());
|
||||
|
||||
for (EntranceEntry entry : cmdEntrance->entrances)
|
||||
{
|
||||
writer->Write((uint8_t)entry.startPositionIndex);
|
||||
writer->Write((uint8_t)entry.roomToLoad);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case RoomCommand::SetSpecialObjects:
|
||||
{
|
||||
SetSpecialObjects* cmdSpecObj = (SetSpecialObjects*)cmd;
|
||||
|
||||
writer->Write((uint8_t)cmdSpecObj->elfMessage); // 0x01
|
||||
writer->Write((uint16_t)cmdSpecObj->globalObject); // 0x06
|
||||
}
|
||||
break;
|
||||
case RoomCommand::SetStartPositionList:
|
||||
{
|
||||
SetStartPositionList* cmdStartPos = (SetStartPositionList*)cmd;
|
||||
|
||||
uint32_t baseStreamEnd = writer->GetStream().get()->GetLength();
|
||||
|
||||
writer->Write((uint32_t)cmdStartPos->actors.size()); // 0x01
|
||||
|
||||
for (const 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);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case RoomCommand::SetAlternateHeaders:
|
||||
{
|
||||
SetAlternateHeaders* cmdHeaders = (SetAlternateHeaders*)cmd;
|
||||
|
||||
writer->Write((uint32_t)cmdHeaders->headers.size());
|
||||
|
||||
for (size_t i = 0; i < cmdHeaders->headers.size(); i++)
|
||||
{
|
||||
uint32_t seg = cmdHeaders->headers[i] & 0xFFFFFFFF;
|
||||
std::string headerName = "";
|
||||
bool foundDecl = Globals::Instance->GetSegmentedPtrName(seg, room->parent, "", headerName);
|
||||
if (headerName == "NULL")
|
||||
writer->Write("");
|
||||
else
|
||||
{
|
||||
std::string name = OTRExporter_DisplayList::GetPathToRes(room, headerName);
|
||||
writer->Write(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case RoomCommand::SetExitList:
|
||||
{
|
||||
SetExitList* cmdExit = (SetExitList*)cmd;
|
||||
|
||||
writer->Write((uint32_t)cmdExit->exits.size());
|
||||
|
||||
for (size_t i = 0; i < cmdExit->exits.size(); i++)
|
||||
writer->Write(cmdExit->exits[i]);
|
||||
}
|
||||
break;
|
||||
case RoomCommand::SetObjectList:
|
||||
{
|
||||
SetObjectList* cmdSetObjectList = (SetObjectList*)cmd;
|
||||
|
||||
writer->Write((uint32_t)cmdSetObjectList->objects.size());
|
||||
|
||||
for (size_t i = 0; i < cmdSetObjectList->objects.size(); i++)
|
||||
writer->Write(cmdSetObjectList->objects[i]);
|
||||
}
|
||||
break;
|
||||
case RoomCommand::SetCutscenes:
|
||||
{
|
||||
SetCutscenes* cmdSetCutscenes = (SetCutscenes*)cmd;
|
||||
|
||||
std::string listName;
|
||||
Globals::Instance->GetSegmentedPtrName(cmdSetCutscenes->cmdArg2, room->parent, "CutsceneData", listName);
|
||||
std::string fName = OTRExporter_DisplayList::GetPathToRes(room, listName);
|
||||
//std::string fName = StringHelper::Sprintf("%s\\%s", OTRExporter_DisplayList::GetParentFolderName(room).c_str(), listName.c_str());
|
||||
writer->Write(fName);
|
||||
|
||||
MemoryStream* csStream = new MemoryStream();
|
||||
BinaryWriter csWriter = BinaryWriter(csStream);
|
||||
OTRExporter_Cutscene cs;
|
||||
cs.Save(cmdSetCutscenes->cutscenes[0], "", &csWriter);
|
||||
|
||||
File::WriteAllBytes("Extract\\" + fName, csStream->ToVector());
|
||||
|
||||
//std::string fName = OTRExporter_DisplayList::GetPathToRes(res, vtxDecl->varName);
|
||||
//otrArchive->AddFile(fName, (uintptr_t)csStream->ToVector().data(), csWriter.GetBaseAddress());
|
||||
}
|
||||
break;
|
||||
case RoomCommand::SetPathways:
|
||||
{
|
||||
SetPathways* cmdSetPathways = (SetPathways*)cmd;
|
||||
|
||||
writer->Write((uint32_t)cmdSetPathways->pathwayList.pathways.size());
|
||||
|
||||
for (int i = 0; i < cmdSetPathways->pathwayList.pathways.size(); i++)
|
||||
{
|
||||
Declaration* decl = room->parent->GetDeclaration(GETSEGOFFSET(cmdSetPathways->pathwayList.pathways[i].listSegmentAddress));
|
||||
//std::string path = StringHelper::Sprintf("%s\\%s", OTRExporter_DisplayList::GetParentFolderName(res).c_str(), decl->varName.c_str());
|
||||
std::string path = OTRExporter_DisplayList::GetPathToRes(room, decl->varName);
|
||||
writer->Write(path);
|
||||
|
||||
MemoryStream* pathStream = new MemoryStream();
|
||||
BinaryWriter pathWriter = BinaryWriter(pathStream);
|
||||
OTRExporter_Path pathExp;
|
||||
pathExp.Save(&cmdSetPathways->pathwayList, outPath, &pathWriter);
|
||||
|
||||
File::WriteAllBytes("Extract\\" + path, pathStream->ToVector());
|
||||
|
||||
//otrArchive->AddFile(path, (uintptr_t)pathStream->ToVector().data(), pathWriter.GetBaseAddress());
|
||||
|
||||
int bp = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case RoomCommand::EndMarker:
|
||||
break;
|
||||
default:
|
||||
printf("UNIMPLEMENTED COMMAND: 0x%02X\n", (int)cmd->cmdID);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void OTRExporter_Room::WritePolyDList(BinaryWriter* writer, ZRoom* room, PolygonDlist* dlist)
|
||||
{
|
||||
writer->Write(dlist->polyType);
|
||||
|
||||
switch (dlist->polyType)
|
||||
{
|
||||
case 2:
|
||||
writer->Write(dlist->x);
|
||||
writer->Write(dlist->y);
|
||||
writer->Write(dlist->z);
|
||||
writer->Write(dlist->unk_06);
|
||||
[[fallthrough]];
|
||||
default:
|
||||
//writer->Write(StringHelper::Sprintf("%s\\%s", OTRExporter_DisplayList::GetParentFolderName(res).c_str(), dListDeclOpa->varName.c_str()));
|
||||
|
||||
if (dlist->opaDList != nullptr)
|
||||
{
|
||||
auto opaDecl = room->parent->GetDeclaration(GETSEGOFFSET(dlist->opaDList->GetRawDataIndex()));
|
||||
writer->Write(StringHelper::Sprintf("%s\\%s", OTRExporter_DisplayList::GetParentFolderName(room).c_str(), opaDecl->varName.c_str()));
|
||||
}
|
||||
else
|
||||
writer->Write("");
|
||||
|
||||
if (dlist->xluDList != nullptr)
|
||||
{
|
||||
auto xluDecl = room->parent->GetDeclaration(GETSEGOFFSET(dlist->xluDList->GetRawDataIndex()));
|
||||
writer->Write(StringHelper::Sprintf("%s\\%s", OTRExporter_DisplayList::GetParentFolderName(room).c_str(), xluDecl->varName.c_str()));
|
||||
}
|
||||
else
|
||||
writer->Write("");
|
||||
break;
|
||||
}
|
||||
}
|
14
OTRExporter/OTRExporter/RoomExporter.h
Normal file
@ -0,0 +1,14 @@
|
||||
#pragma once
|
||||
|
||||
#include "ZResource.h"
|
||||
#include "Exporter.h"
|
||||
#include "ZRoom/ZRoom.h"
|
||||
|
||||
class PolygonDlist;
|
||||
|
||||
class OTRExporter_Room : public OTRExporter
|
||||
{
|
||||
public:
|
||||
void WritePolyDList(BinaryWriter* writer, ZRoom* room, PolygonDlist* dlist);
|
||||
virtual void Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer) override;
|
||||
};
|
39
OTRExporter/OTRExporter/SkeletonExporter.cpp
Normal file
@ -0,0 +1,39 @@
|
||||
#include "SkeletonExporter.h"
|
||||
#include <Resource.h>
|
||||
#include <Globals.h>
|
||||
#include "DisplayListExporter.h"
|
||||
|
||||
void OTRExporter_Skeleton::Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer)
|
||||
{
|
||||
ZSkeleton* skel = (ZSkeleton*)res;
|
||||
|
||||
WriteHeader(res, outPath, writer, Ship::ResourceType::Skeleton);
|
||||
|
||||
writer->Write((uint8_t)skel->type);
|
||||
writer->Write((uint8_t)skel->limbType);
|
||||
|
||||
writer->Write((uint32_t)skel->limbCount);
|
||||
writer->Write((uint32_t)skel->dListCount);
|
||||
|
||||
writer->Write((uint8_t)skel->limbsTable.limbType);
|
||||
writer->Write((uint32_t)skel->limbsTable.count);
|
||||
|
||||
for (size_t i = 0; i < skel->limbsTable.count; i++)
|
||||
{
|
||||
Declaration* skelDecl = skel->parent->GetDeclarationRanged(GETSEGOFFSET(skel->limbsTable.limbsAddresses[i]));
|
||||
|
||||
std::string name;
|
||||
bool foundDecl = Globals::Instance->GetSegmentedPtrName(skel->limbsTable.limbsAddresses[i], skel->parent, "", name);
|
||||
if (foundDecl)
|
||||
{
|
||||
if (name.at(0) == '&')
|
||||
name.erase(0, 1);
|
||||
|
||||
writer->Write(OTRExporter_DisplayList::GetPathToRes(res, name));
|
||||
}
|
||||
else
|
||||
{
|
||||
writer->Write("");
|
||||
}
|
||||
}
|
||||
}
|
14
OTRExporter/OTRExporter/SkeletonExporter.h
Normal file
@ -0,0 +1,14 @@
|
||||
#pragma once
|
||||
|
||||
#include "ZResource.h"
|
||||
#include "ZTexture.h"
|
||||
#include "ZDisplayList.h"
|
||||
#include "ZSkeleton.h"
|
||||
#include "Exporter.h"
|
||||
#include <Utils/BinaryWriter.h>
|
||||
|
||||
class OTRExporter_Skeleton : public OTRExporter
|
||||
{
|
||||
public:
|
||||
virtual void Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer) override;
|
||||
};
|
176
OTRExporter/OTRExporter/SkeletonLimbExporter.cpp
Normal file
@ -0,0 +1,176 @@
|
||||
#include "SkeletonLimbExporter.h"
|
||||
#include "DisplayListExporter.h"
|
||||
#include <Resource.h>
|
||||
#include <Globals.h>
|
||||
|
||||
void OTRExporter_SkeletonLimb::Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer)
|
||||
{
|
||||
ZLimb* limb = (ZLimb*)res;
|
||||
|
||||
WriteHeader(res, outPath, writer, Ship::ResourceType::SkeletonLimb);
|
||||
|
||||
writer->Write((uint8_t)limb->type);
|
||||
writer->Write((uint8_t)limb->skinSegmentType);
|
||||
|
||||
if (limb->skinSegmentType == ZLimbSkinType::SkinType_DList && limb->type == ZLimbType::Skin)
|
||||
{
|
||||
auto childDecl = limb->parent->GetDeclaration(GETSEGOFFSET(limb->skinSegment));
|
||||
|
||||
if (childDecl != nullptr)
|
||||
writer->Write(OTRExporter_DisplayList::GetPathToRes(limb, childDecl->varName));
|
||||
else
|
||||
writer->Write("");
|
||||
}
|
||||
else
|
||||
{
|
||||
writer->Write("");
|
||||
}
|
||||
|
||||
writer->Write((uint16_t)limb->segmentStruct.unk_0);
|
||||
writer->Write((uint32_t)limb->segmentStruct.unk_4_arr.size());
|
||||
|
||||
for (auto item : limb->segmentStruct.unk_4_arr)
|
||||
{
|
||||
writer->Write(item.unk_4);
|
||||
|
||||
writer->Write((uint32_t)item.unk_8_arr.size());
|
||||
|
||||
for (auto item2 : item.unk_8_arr)
|
||||
{
|
||||
writer->Write(item2.unk_0);
|
||||
writer->Write(item2.unk_2);
|
||||
writer->Write(item2.unk_4);
|
||||
writer->Write(item2.unk_6);
|
||||
writer->Write(item2.unk_7);
|
||||
writer->Write(item2.unk_8);
|
||||
writer->Write(item2.unk_9);
|
||||
}
|
||||
|
||||
writer->Write((uint32_t)item.unk_C_arr.size());
|
||||
|
||||
for (auto item2 : item.unk_C_arr)
|
||||
{
|
||||
writer->Write(item2.unk_0);
|
||||
writer->Write(item2.x);
|
||||
writer->Write(item2.y);
|
||||
writer->Write(item2.z);
|
||||
writer->Write(item2.unk_8);
|
||||
}
|
||||
}
|
||||
|
||||
if (limb->segmentStruct.unk_8 != 0)
|
||||
{
|
||||
auto skinGfxDecl = limb->parent->GetDeclaration(GETSEGOFFSET(limb->segmentStruct.unk_8));
|
||||
|
||||
if (skinGfxDecl != nullptr)
|
||||
{
|
||||
writer->Write(OTRExporter_DisplayList::GetPathToRes(limb, skinGfxDecl->varName));
|
||||
}
|
||||
else
|
||||
{
|
||||
writer->Write("");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
writer->Write("");
|
||||
}
|
||||
|
||||
writer->Write(limb->legTransX);
|
||||
writer->Write(limb->legTransY);
|
||||
writer->Write(limb->legTransZ);
|
||||
writer->Write(limb->rotX);
|
||||
writer->Write(limb->rotY);
|
||||
writer->Write(limb->rotZ);
|
||||
|
||||
if (limb->childPtr != 0)
|
||||
{
|
||||
std::string name;
|
||||
bool foundDecl = Globals::Instance->GetSegmentedPtrName(limb->childPtr, limb->parent, "", name);
|
||||
if (foundDecl)
|
||||
{
|
||||
if (name.at(0) == '&')
|
||||
name.erase(0, 1);
|
||||
|
||||
writer->Write(OTRExporter_DisplayList::GetPathToRes(limb, name));
|
||||
}
|
||||
else
|
||||
{
|
||||
writer->Write("");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
writer->Write("");
|
||||
}
|
||||
|
||||
if (limb->siblingPtr != 0)
|
||||
{
|
||||
std::string name;
|
||||
bool foundDecl = Globals::Instance->GetSegmentedPtrName(limb->siblingPtr, limb->parent, "", name);
|
||||
if (foundDecl)
|
||||
{
|
||||
if (name.at(0) == '&')
|
||||
name.erase(0, 1);
|
||||
|
||||
writer->Write(OTRExporter_DisplayList::GetPathToRes(limb, name));
|
||||
}
|
||||
else
|
||||
{
|
||||
writer->Write("");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
writer->Write("");
|
||||
}
|
||||
|
||||
if (limb->dListPtr != 0)
|
||||
{
|
||||
std::string name;
|
||||
bool foundDecl = Globals::Instance->GetSegmentedPtrName(limb->dListPtr, limb->parent, "", name);
|
||||
if (foundDecl)
|
||||
{
|
||||
if (name.at(0) == '&')
|
||||
name.erase(0, 1);
|
||||
|
||||
writer->Write(OTRExporter_DisplayList::GetPathToRes(limb, name));
|
||||
}
|
||||
else
|
||||
{
|
||||
writer->Write("");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
writer->Write("");
|
||||
}
|
||||
|
||||
if (limb->dList2Ptr != 0)
|
||||
{
|
||||
std::string name;
|
||||
bool foundDecl = Globals::Instance->GetSegmentedPtrName(limb->dList2Ptr, limb->parent, "", name);
|
||||
if (foundDecl)
|
||||
{
|
||||
if (name.at(0) == '&')
|
||||
name.erase(0, 1);
|
||||
|
||||
writer->Write(OTRExporter_DisplayList::GetPathToRes(limb, name));
|
||||
}
|
||||
else
|
||||
{
|
||||
writer->Write("");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
writer->Write("");
|
||||
}
|
||||
|
||||
writer->Write(limb->transX);
|
||||
writer->Write(limb->transY);
|
||||
writer->Write(limb->transZ);
|
||||
|
||||
writer->Write(limb->childIndex);
|
||||
writer->Write(limb->siblingIndex);
|
||||
}
|
15
OTRExporter/OTRExporter/SkeletonLimbExporter.h
Normal file
@ -0,0 +1,15 @@
|
||||
#pragma once
|
||||
|
||||
#include "ZResource.h"
|
||||
#include "ZTexture.h"
|
||||
#include "ZDisplayList.h"
|
||||
#include "ZSkeleton.h"
|
||||
#include "ZLimb.h"
|
||||
#include "Exporter.h"
|
||||
#include <Utils/BinaryWriter.h>
|
||||
|
||||
class OTRExporter_SkeletonLimb : public OTRExporter
|
||||
{
|
||||
public:
|
||||
virtual void Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer) override;
|
||||
};
|
19
OTRExporter/OTRExporter/TextExporter.cpp
Normal file
@ -0,0 +1,19 @@
|
||||
#include "TextExporter.h"
|
||||
#include "../ZAPD/ZFile.h"
|
||||
|
||||
void OTRExporter_Text::Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer)
|
||||
{
|
||||
ZText* txt = (ZText*)res;
|
||||
|
||||
WriteHeader(txt, outPath, writer, Ship::ResourceType::Text);
|
||||
|
||||
writer->Write((uint32_t)txt->messages.size());
|
||||
|
||||
for (int i = 0; i < txt->messages.size(); i++)
|
||||
{
|
||||
writer->Write(txt->messages[i].id);
|
||||
writer->Write(txt->messages[i].textboxType);
|
||||
writer->Write(txt->messages[i].textboxYPos);
|
||||
writer->Write(txt->messages[i].msg);
|
||||
}
|
||||
}
|
12
OTRExporter/OTRExporter/TextExporter.h
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "ZResource.h"
|
||||
#include "ZText.h"
|
||||
#include "Exporter.h"
|
||||
#include <Utils/BinaryWriter.h>
|
||||
|
||||
class OTRExporter_Text : public OTRExporter
|
||||
{
|
||||
public:
|
||||
virtual void Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer) override;
|
||||
};
|
31
OTRExporter/OTRExporter/TextureExporter.cpp
Normal file
@ -0,0 +1,31 @@
|
||||
#include "TextureExporter.h"
|
||||
#include "../ZAPD/ZFile.h"
|
||||
|
||||
void OTRExporter_Texture::Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer)
|
||||
{
|
||||
ZTexture* tex = (ZTexture*)res;
|
||||
|
||||
WriteHeader(tex, outPath, writer, Ship::ResourceType::Texture);
|
||||
|
||||
auto start = std::chrono::steady_clock::now();
|
||||
|
||||
//printf("Exporting Texture %s\n", tex->GetName().c_str());
|
||||
|
||||
writer->Write((uint32_t)tex->GetTextureType());
|
||||
writer->Write((uint32_t)tex->GetWidth());
|
||||
writer->Write((uint32_t)tex->GetHeight());
|
||||
|
||||
writer->Write((uint32_t)tex->GetRawDataSize());
|
||||
|
||||
auto data = tex->parent->GetRawData();
|
||||
|
||||
writer->Write((char*)data.data() + tex->GetRawDataIndex(), tex->GetRawDataSize());
|
||||
|
||||
auto end = std::chrono::steady_clock::now();
|
||||
size_t diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
|
||||
|
||||
//printf("Exported Texture %s in %zums\n", tex->GetName().c_str(), diff);
|
||||
|
||||
//if (diff > 2)
|
||||
//printf("Export took %lms\n", diff);
|
||||
}
|
12
OTRExporter/OTRExporter/TextureExporter.h
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "ZResource.h"
|
||||
#include "ZTexture.h"
|
||||
#include "Exporter.h"
|
||||
#include <Utils/BinaryWriter.h>
|
||||
|
||||
class OTRExporter_Texture : public OTRExporter
|
||||
{
|
||||
public:
|
||||
virtual void Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer) override;
|
||||
};
|
25
OTRExporter/OTRExporter/VersionInfo.cpp
Normal file
@ -0,0 +1,25 @@
|
||||
#include "VersionInfo.h"
|
||||
#include <Resource.h>
|
||||
|
||||
std::map<Ship::ResourceType, uint32_t> resourceVersions;
|
||||
|
||||
void InitVersionInfo()
|
||||
{
|
||||
resourceVersions[Ship::ResourceType::Animation] = 0;
|
||||
resourceVersions[Ship::ResourceType::Model] = 0;
|
||||
resourceVersions[Ship::ResourceType::Texture] = 0;
|
||||
resourceVersions[Ship::ResourceType::Material] = 0;
|
||||
resourceVersions[Ship::ResourceType::PlayerAnimation] = 0;
|
||||
resourceVersions[Ship::ResourceType::DisplayList] = 0;
|
||||
resourceVersions[Ship::ResourceType::Room] = 0;
|
||||
resourceVersions[Ship::ResourceType::CollisionHeader] = 0;
|
||||
resourceVersions[Ship::ResourceType::Skeleton] = 0;
|
||||
resourceVersions[Ship::ResourceType::SkeletonLimb] = 0;
|
||||
resourceVersions[Ship::ResourceType::Matrix] = 0;
|
||||
resourceVersions[Ship::ResourceType::Path] = 0;
|
||||
resourceVersions[Ship::ResourceType::Vertex] = 0;
|
||||
resourceVersions[Ship::ResourceType::Cutscene] = 0;
|
||||
resourceVersions[Ship::ResourceType::Array] = 0;
|
||||
resourceVersions[Ship::ResourceType::Text] = 0;
|
||||
resourceVersions[Ship::ResourceType::Blob] = 0;
|
||||
}
|
9
OTRExporter/OTRExporter/VersionInfo.h
Normal file
@ -0,0 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include "Resource.h"
|
||||
|
||||
#define MAJOR_VERSION Ship::Version::Deckard
|
||||
|
||||
extern std::map<Ship::ResourceType, uint32_t> resourceVersions;
|
44
OTRExporter/OTRExporter/VtxExporter.cpp
Normal file
@ -0,0 +1,44 @@
|
||||
#include "VtxExporter.h"
|
||||
#include "Resource.h"
|
||||
#include "VersionInfo.h"
|
||||
|
||||
|
||||
void OTRExporter_Vtx::SaveArr(ZResource* res, const fs::path& outPath, const std::vector<ZResource*>& vec, BinaryWriter* writer)
|
||||
{
|
||||
WriteHeader(res, outPath, writer, Ship::ResourceType::Vertex);
|
||||
|
||||
for (auto& res: vec) {
|
||||
ZVtx* vtx = (ZVtx*)res;
|
||||
writer->Write(vtx->x);
|
||||
writer->Write(vtx->y);
|
||||
writer->Write(vtx->z);
|
||||
writer->Write(vtx->flag);
|
||||
writer->Write(vtx->s);
|
||||
writer->Write(vtx->t);
|
||||
writer->Write(vtx->r);
|
||||
writer->Write(vtx->g);
|
||||
writer->Write(vtx->b);
|
||||
writer->Write(vtx->a);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void OTRExporter_Vtx::Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer)
|
||||
{
|
||||
ZVtx* vtx = (ZVtx*)res;
|
||||
|
||||
WriteHeader(res, outPath, writer, Ship::ResourceType::Vertex);
|
||||
|
||||
writer->Write((uint32_t)1); //Yes I'm hard coding it to one, it *should* be fine.
|
||||
|
||||
writer->Write(vtx->x);
|
||||
writer->Write(vtx->y);
|
||||
writer->Write(vtx->z);
|
||||
writer->Write(vtx->flag);
|
||||
writer->Write(vtx->s);
|
||||
writer->Write(vtx->t);
|
||||
writer->Write(vtx->r);
|
||||
writer->Write(vtx->g);
|
||||
writer->Write(vtx->b);
|
||||
writer->Write(vtx->a);
|
||||
}
|
13
OTRExporter/OTRExporter/VtxExporter.h
Normal file
@ -0,0 +1,13 @@
|
||||
#pragma once
|
||||
|
||||
#include "ZResource.h"
|
||||
#include "ZVtx.h"
|
||||
#include "Exporter.h"
|
||||
#include <Utils/BinaryWriter.h>
|
||||
|
||||
class OTRExporter_Vtx : public OTRExporter
|
||||
{
|
||||
public:
|
||||
void SaveArr(ZResource* res, const fs::path& outPath, const std::vector<ZResource*>&, BinaryWriter* writer);
|
||||
virtual void Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer) override;
|
||||
};
|
36
OTRExporter/OTRExporter/command_macros_base.h
Normal file
@ -0,0 +1,36 @@
|
||||
#ifndef COMMAND_MACROS_BASE_H
|
||||
#define COMMAND_MACROS_BASE_H
|
||||
|
||||
/**
|
||||
* Command Base macros intended for use in designing of more specific command macros
|
||||
* Each macro packs bytes (B), halfwords (H) and words (W, for consistency) into a single word
|
||||
*/
|
||||
|
||||
#define _SHIFTL(v, s, w) \
|
||||
((unsigned int) (((unsigned int)(v) & ((0x01 << (w)) - 1)) << (s)))
|
||||
#define _SHIFTR(v, s, w) \
|
||||
((unsigned int)(((unsigned int)(v) >> (s)) & ((0x01 << (w)) - 1)))
|
||||
|
||||
//#define CMD_BBBB(a, b, c, d) (_SHIFTL(a, 24, 8) | _SHIFTL(b, 16, 8) | _SHIFTL(c, 8, 8) | _SHIFTL(d, 0, 8))
|
||||
#define CMD_BBBB(a, b, c, d) (_SHIFTL(d, 24, 8) | _SHIFTL(c, 16, 8) | _SHIFTL(b, 8, 8) | _SHIFTL(a, 0, 8))
|
||||
|
||||
//#define CMD_BBH(a, b, c) (_SHIFTL(a, 24, 8) | _SHIFTL(b, 16, 8) | _SHIFTL(c, 0, 16))
|
||||
#define CMD_BBH(a, b, c) (_SHIFTL(a, 0, 8) | _SHIFTL(b, 8, 8) | _SHIFTL(c, 16, 16))
|
||||
|
||||
//#define CMD_HBB(a, b, c) (_SHIFTL(a, 16, 16) | _SHIFTL(b, 8, 8) | _SHIFTL(c, 0, 8))
|
||||
#define CMD_HBB(a, b, c) (_SHIFTL(c, 24, 8) | _SHIFTL(b, 16, 8) | _SHIFTL(a, 0, 16))
|
||||
|
||||
//#define CMD_HH(a, b) (_SHIFTL(a, 16, 16) | _SHIFTL(b, 0, 16))
|
||||
#define CMD_HH(a, b) (_SHIFTL(b, 16, 16) | _SHIFTL(a, 0, 16))
|
||||
|
||||
#define CMD_W(a) (a)
|
||||
|
||||
#if defined(__GNUC__)
|
||||
#define CMD_F(a) {.f = (a)}
|
||||
#else
|
||||
#define CMD_F(a) {(a)}
|
||||
#endif
|
||||
|
||||
#define CMD_PTR(a) (u32)(a)
|
||||
|
||||
#endif
|
290
OTRExporter/OTRExporter/z64cutscene.h
Normal file
@ -0,0 +1,290 @@
|
||||
#ifndef Z64CUTSCENE_H
|
||||
#define Z64CUTSCENE_H
|
||||
|
||||
#if 0
|
||||
#include "ultra64.h"
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u16 entrance; // entrance index upon which the cutscene should trigger
|
||||
/* 0x02 */ u8 ageRestriction; // 0 for adult only, 1 for child only, 2 for both ages
|
||||
/* 0x03 */ u8 flag; // eventChkInf flag bound to the entrance cutscene
|
||||
/* 0x04 */ void* segAddr; // segment offset location of the cutscene
|
||||
} EntranceCutscene; // size = 0x8
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ s8 continueFlag;
|
||||
/* 0x01 */ s8 cameraRoll;
|
||||
/* 0x02 */ u16 nextPointFrame;
|
||||
/* 0x04 */ f32 viewAngle; // in degrees
|
||||
/* 0x08 */ Vec3s pos;
|
||||
} CutsceneCameraPoint; // size = 0x10
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ Vec3f at;
|
||||
/* 0x0C */ Vec3f eye;
|
||||
/* 0x18 */ s16 roll;
|
||||
/* 0x1A */ s16 fov;
|
||||
} CutsceneCameraAngle; // size = 0x1C
|
||||
|
||||
typedef struct {
|
||||
/* 0x0 */ CutsceneCameraPoint* atPoints;
|
||||
/* 0x4 */ CutsceneCameraPoint* eyePoints;
|
||||
/* 0x8 */ s16 relativeToPlayer;
|
||||
} CutsceneCameraMove; // size = 0xC
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u16 base;
|
||||
/* 0x02 */ u16 startFrame;
|
||||
/* 0x04 */ u16 endFrame;
|
||||
} CsCmdBase; // size = 0x6
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u8 unk_00;
|
||||
/* 0x01 */ u8 setting;
|
||||
/* 0x02 */ u16 startFrame;
|
||||
/* 0x04 */ u16 endFrame;
|
||||
} CsCmdEnvLighting; // size = 0x6
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u8 unk_00;
|
||||
/* 0x01 */ u8 sequence;
|
||||
/* 0x02 */ u16 startFrame;
|
||||
/* 0x04 */ u16 endFrame;
|
||||
} CsCmdMusicChange; // size = 0x6
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u16 type;
|
||||
/* 0x02 */ u16 startFrame;
|
||||
/* 0x04 */ u16 endFrame;
|
||||
} CsCmdMusicFade; // size = 0x6
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u16 unk_00;
|
||||
/* 0x02 */ u16 startFrame;
|
||||
/* 0x04 */ u16 endFrame;
|
||||
/* 0x06 */ u8 unk_06;
|
||||
/* 0x07 */ u8 unk_07;
|
||||
/* 0x08 */ u8 unk_08;
|
||||
} CsCmdUnknown9; // size = 0xA
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u16 unk_00;
|
||||
/* 0x02 */ u16 startFrame;
|
||||
/* 0x04 */ u16 endFrame;
|
||||
/* 0x06 */ u8 hour;
|
||||
/* 0x07 */ u8 minute;
|
||||
} CsCmdDayTime; // size = 0x8
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u16 base;
|
||||
/* 0x02 */ u16 startFrame;
|
||||
/* 0x04 */ u16 endFrame;
|
||||
/* 0x06 */ u16 type;
|
||||
/* 0x08 */ u16 textId1;
|
||||
/* 0x0A */ u16 textId2;
|
||||
} CsCmdTextbox; // size = 0xC
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u16 action; // "dousa"
|
||||
/* 0x02 */ u16 startFrame;
|
||||
/* 0x04 */ u16 endFrame;
|
||||
union {
|
||||
/* 0x06 */ Vec3s rot;
|
||||
/* 0x06 */ Vec3us urot;
|
||||
};
|
||||
/* 0x0C */ Vec3i startPos;
|
||||
/* 0x18 */ Vec3i endPos;
|
||||
/* 0x24 */ Vec3i normal;
|
||||
} CsCmdActorAction; // size = 0x30
|
||||
#endif
|
||||
|
||||
typedef enum {
|
||||
CS_STATE_IDLE,
|
||||
CS_STATE_SKIPPABLE_INIT,
|
||||
CS_STATE_SKIPPABLE_EXEC,
|
||||
CS_STATE_UNSKIPPABLE_INIT,
|
||||
CS_STATE_UNSKIPPABLE_EXEC
|
||||
} CutsceneState;
|
||||
|
||||
typedef enum {
|
||||
CS_CMD_00 = 0x0000,
|
||||
CS_CMD_CAM_EYE = 0x0001,
|
||||
CS_CMD_CAM_AT = 0x0002,
|
||||
CS_CMD_MISC = 0x0003,
|
||||
CS_CMD_SET_LIGHTING = 0x0004,
|
||||
CS_CMD_CAM_EYE_REL_TO_PLAYER = 0x0005,
|
||||
CS_CMD_CAM_AT_REL_TO_PLAYER = 0x0006,
|
||||
CS_CMD_07 = 0x0007,
|
||||
CS_CMD_08 = 0x0008,
|
||||
CS_CMD_09 = 0x0009,
|
||||
CS_CMD_TEXTBOX = 0x0013,
|
||||
CS_CMD_SET_PLAYER_ACTION = 0x000A,
|
||||
CS_CMD_SET_ACTOR_ACTION_1 = 0x000F,
|
||||
CS_CMD_SET_ACTOR_ACTION_2 = 0x000E,
|
||||
CS_CMD_SET_ACTOR_ACTION_3 = 0x0019,
|
||||
CS_CMD_SET_ACTOR_ACTION_4 = 0x001D,
|
||||
CS_CMD_SET_ACTOR_ACTION_5 = 0x001E,
|
||||
CS_CMD_SET_ACTOR_ACTION_6 = 0x002C,
|
||||
CS_CMD_SET_ACTOR_ACTION_7 = 0x001F,
|
||||
CS_CMD_SET_ACTOR_ACTION_8 = 0x0031,
|
||||
CS_CMD_SET_ACTOR_ACTION_9 = 0x003E,
|
||||
CS_CMD_SET_ACTOR_ACTION_10 = 0x008F,
|
||||
CS_CMD_SCENE_TRANS_FX = 0x002D,
|
||||
CS_CMD_NOP = 0x000B,
|
||||
CS_CMD_PLAYBGM = 0x0056,
|
||||
CS_CMD_STOPBGM = 0x0057,
|
||||
CS_CMD_FADEBGM = 0x007C,
|
||||
CS_CMD_SETTIME = 0x008C,
|
||||
CS_CMD_TERMINATOR = 0x03E8,
|
||||
CS_CMD_END = 0xFFFF
|
||||
} CutsceneCmd;
|
||||
|
||||
/**
|
||||
* Special type for blocks of cutscene data, asm-processor checks
|
||||
* arrays for CutsceneData type and converts floats within the array
|
||||
* to their IEEE-754 representation. The array must close with };
|
||||
* on its own line.
|
||||
*
|
||||
* Files that contain this type that are included in other C files
|
||||
* must include an 'EARLY' qualifier to inform asm-processor that it
|
||||
* must recursively process that include.
|
||||
*
|
||||
* Example: #include "file.c" EARLY
|
||||
*/
|
||||
|
||||
|
||||
typedef union CutsceneData {
|
||||
int i;
|
||||
float f;
|
||||
short s[2];
|
||||
char b[4];
|
||||
} CutsceneData;
|
||||
|
||||
#define CS_CMD_CONTINUE 0
|
||||
#define CS_CMD_STOP -1
|
||||
|
||||
// TODO confirm correctness, clarify names
|
||||
typedef enum {
|
||||
/* 0x00 */ INVALID_DESTINATION_0,
|
||||
/* 0x01 */ CUTSCENE_MAP_GANON_HORSE,
|
||||
/* 0x02 */ CUTSCENE_MAP_THREE_GODESSES_POST_DEKU_TREE,
|
||||
/* 0x03 */ GERUDO_VALLEY_DIN,
|
||||
/* 0x04 */ DEATH_MOUNTAIN_TRAIL_NAYRU,
|
||||
/* 0x05 */ KOKIRI_FOREST_FARORE,
|
||||
/* 0x06 */ CUTSCENE_MAP_TRIFORCE_CREATION,
|
||||
/* 0x07 */ KOKIRI_FOREST_RECEIVE_KOKIRI_EMERALD,
|
||||
/* 0x08 */ TEMPLE_OF_TIME_AFTER_USE_MS,
|
||||
/* 0x09 */ GERUDO_VALLEY_DIN_2,
|
||||
/* 0x0A */ LINKS_HOUSE_INTRO,
|
||||
/* 0x0B */ KOKIRI_FOREST_INTRO,
|
||||
/* 0x0C */ DEATH_MOUNTAIN_TRAIL_AFTER_GORON_RUBY,
|
||||
/* 0x0D */ ZORAS_FOUNTAIN_AFTER_ZORAS_SAPPHIRE,
|
||||
/* 0x0E */ KOKIRI_FOREST_AFTER_KOKIRI_EMERALD,
|
||||
/* 0x0F */ TEMPLE_OF_TIME_KOKIRI_EMERALD, //unused
|
||||
/* 0x10 */ TEMPLE_OF_TIME_GORON_RUBY, //unused
|
||||
/* 0x11 */ TEMPLE_OF_TIME_ZORAS_SAPPHIRE, //unused
|
||||
/* 0x12 */ TEMPLE_OF_TIME_AFTER_USE_MS_FIRST,
|
||||
/* 0x13 */ DEATH_MOUNTAIN_TRAIL_AFTER_INTRO,
|
||||
/* 0x14 */ INVALID_DESTINATION_14,
|
||||
/* 0x15 */ LAKE_HYLIA_WATER_RISES,
|
||||
/* 0x16 */ DESERT_COLOSSUS_REQUIEM,
|
||||
/* 0x17 */ CUTSCENE_MAP_CURSE_YOU,
|
||||
/* 0x18 */ JABU_JABU_INTRO,
|
||||
/* 0x19 */ CHAMBER_OF_SAGES_LIGHT_MEDALLION,
|
||||
/* 0x1A */ TEMPLE_OF_TIME_KOKIRI_EMERALD_2, //duplicate of 0x000F
|
||||
/* 0x1B */ TEMPLE_OF_TIME_GORON_RUBY_2, //duplicate of 0x0010
|
||||
/* 0x1C */ TEMPLE_OF_TIME_ZORAS_SAPPHIRE_2, //duplicate of 0x0011
|
||||
/* 0x1D */ CHAMBER_OF_SAGES_FOREST_MEDALLION,
|
||||
/* 0x1E */ CHAMBER_OF_SAGES_FIRE_MEDALLION,
|
||||
/* 0x1F */ CHAMBER_OF_SAGES_WATER_MEDALLION,
|
||||
/* 0x20 */ HYRULE_FIELD_FLASHBACK, //lacs part 4
|
||||
/* 0x21 */ HYRULE_FIELD_AFTER_LAKE_HYLIA_OWL,
|
||||
/* 0x22 */ CUTSCENE_MAP_GANON_AFTER_USE_MS,
|
||||
/* 0x23 */ HYRULE_FIELD_INTRO_ZELDA_ESCAPE,
|
||||
/* 0x24 */ INVALID_DESTINATION_24,
|
||||
/* 0x25 */ INVALID_DESTINATION_25,
|
||||
/* 0x26 */ CUTSCENE_MAP_SHEIKAH_LEGEND, //lacs part 2
|
||||
/* 0x27 */ TEMPLE_OF_TIME_ZELDA_REVEAL, //lacs part 3
|
||||
/* 0x28 */ TEMPLE_OF_TIME_GET_LIGHT_ARROWS, //lacs part 5
|
||||
/* 0x29 */ LAKE_HYLIA_AFTER_BLUE_WARP,
|
||||
/* 0x2A */ KAKARIKO_VILLAGE_DRAIN_WELL,
|
||||
/* 0x2B */ WINDMILL_AFTER_DRAIN_WELL,
|
||||
/* 0x2C */ TEMPLE_OF_TIME_AFTER_DOOR_OF_TIME_OPENS,
|
||||
/* 0x2D */ INVALID_DESTINATION_2D,
|
||||
/* 0x2E */ TEMPLE_OF_TIME_AFTER_USE_MS_FIRST_2, // duplicate of 0x0012
|
||||
/* 0x2F */ KAKARIKO_VILLAGE_NOCTURNE_PART_2,
|
||||
/* 0x30 */ DESERT_COLOSSUS_AFTER_REQUIEM,
|
||||
/* 0x31 */ TEMPLE_OF_TIME_AFTER_LIGHT_ARROWS,
|
||||
/* 0x32 */ KAKARIKO_VILLAGE_AFTER_NOCTURNE,
|
||||
/* 0x33 */ HYRULE_FIELD_IMPA_ESCORT_CS,
|
||||
/* 0x34 */ TEMPLE_OF_TIME_SONG_OF_TIME,
|
||||
/* 0x35 */ HYRULE_FIELD_AFTER_SONG_OF_TIME,
|
||||
/* 0x36 */ GERUDO_VALLEY_CREDITS,
|
||||
/* 0x37 */ GERUDO_FORTRESS_CREDITS,
|
||||
/* 0x38 */ KAKARIKO_VILLAGE_CREDITS,
|
||||
/* 0x39 */ DEATH_MOUNTAIN_TRAIL_CREDITS_1,
|
||||
/* 0x3A */ GORON_CITY_CREDITS, // unused?
|
||||
/* 0x3B */ LAKE_HYLIA_CREDITS,
|
||||
/* 0x3C */ ZORAS_FOUNTAIN_CREDITS, // unused
|
||||
/* 0x3D */ ZORAS_DOMAIN_CREDITS,
|
||||
/* 0x3E */ KOKIRI_FOREST_CREDITS_1,
|
||||
/* 0x3F */ KOKIRI_FOREST_CREDITS_2,
|
||||
/* 0x40 */ HYRULE_FIELD_CREDITS,
|
||||
/* 0x41 */ LON_LON_RANCH_CREDITS_1,
|
||||
/* 0x42 */ KAKARIKO_VILLAGE_AFTER_TRAIL_OWL,
|
||||
/* 0x43 */ HTRULE_FIELD_UNUSED_ENTRANCE,
|
||||
/* 0x44 */ CUTSCENE_MAP_FIRE,
|
||||
/* 0x45 */ KOKIRI_FOREST_POST_FOREST_MEDALLION,
|
||||
/* 0x46 */ DEATH_MOUNTAIN_TRAIL_CREDITS_2,
|
||||
/* 0x47 */ TEMPLE_OF_TIME_CREDITS,
|
||||
/* 0x48 */ ZELDAS_COURTYARD_CREDITS,
|
||||
/* 0x49 */ LON_LON_RANCH_CREDITS_1_2, // duplicate of 0x0041
|
||||
/* 0x4A */ LON_LON_RANCH_CREDITS_2,
|
||||
/* 0x4B */ LON_LON_RANCH_CREDITS_3,
|
||||
/* 0x4C */ LON_LON_RANCH_CREDITS_4,
|
||||
/* 0x4D */ LON_LON_RANCH_CREDITS_5,
|
||||
/* 0x4E */ LON_LON_RANCH_CREDITS_6,
|
||||
/* 0x4F */ LON_LON_RANCH_NO_CS_1,
|
||||
/* 0x50 */ LON_LON_RANCH_NO_CS_2,
|
||||
/* 0x51 */ LON_LON_RANCH_NO_CS_3,
|
||||
/* 0x52 */ LON_LON_RANCH_NO_CS_4,
|
||||
/* 0x53 */ LON_LON_RANCH_NO_CS_5,
|
||||
/* 0x54 */ LON_LON_RANCH_NO_CS_6,
|
||||
/* 0x55 */ LON_LON_RANCH_NO_CS_7,
|
||||
/* 0x56 */ LON_LON_RANCH_NO_CS_8,
|
||||
/* 0x57 */ LON_LON_RANCH_NO_CS_9,
|
||||
/* 0x58 */ LON_LON_RANCH_NO_CS_10,
|
||||
/* 0x59 */ LON_LON_RANCH_NO_CS_11,
|
||||
/* 0x5A */ LON_LON_RANCH_NO_CS_12,
|
||||
/* 0x5B */ LON_LON_RANCH_NO_CS_13,
|
||||
/* 0x5C */ LON_LON_RANCH_NO_CS_14,
|
||||
/* 0x5D */ LON_LON_RANCH_NO_CS_15,
|
||||
/* 0x5E */ LON_LON_RANCH_NO_CS_EPONAS_SONG,
|
||||
/* 0x5F */ CONDITIONAL_DESTINATION, // TODO more descriptive name?
|
||||
/* 0x60 */ DESERT_COLOSSUS_SPIRIT_BLUE_WARP,
|
||||
/* 0x61 */ GRAVEYARD_AFTER_SHADOW_BLUE_WARP,
|
||||
/* 0x62 */ DEATH_MOUNTAIN_CRATER_AFTER_FIRE_BLUE_WARP,
|
||||
/* 0x63 */ SACRED_FOREST_MEADOW_AFTER_FOREST_BLUE_WARP,
|
||||
/* 0x64 */ KOKIRI_FOREST_AFTER_FOREST_BLUE_WARP,
|
||||
/* 0x65 */ DESERT_COLOSSUS_AFTER_SILVER_GAUNTLETS,
|
||||
/* 0x66 */ TEMPLE_OF_TIME_FRONT_OF_PEDESTAL,
|
||||
/* 0x67 */ HYRULE_FIELD_TITLE_SCREEN,
|
||||
/* 0x68 */ SPIRIT_TEMPLE_BOSS_TITLE_SCREEN,
|
||||
/* 0x69 */ GRAVEYARD_SUNS_SONG,
|
||||
/* 0x6A */ ROYAL_FAMILYS_TOMB_SUNS_SONG,
|
||||
/* 0x6B */ GANONS_CASTLE_AFTER_FOREST_TRIAL,
|
||||
/* 0x6C */ GANONS_CASTLE_AFTER_WATER_TRIAL,
|
||||
/* 0x6D */ GANONS_CASTLE_AFTER_SHADOW_TRIAL,
|
||||
/* 0x6E */ GANONS_CASTLE_AFTER_FIRE_TRIAL,
|
||||
/* 0x6F */ GANONS_CASTLE_AFTER_LIGHT_TRIAL,
|
||||
/* 0x70 */ GANONS_CASTLE_AFTER_SPIRIT_TRIAL,
|
||||
/* 0x71 */ GANONS_CASTLE_DISPEL_BARRIER_IF_CONDITIONS,
|
||||
/* 0x72 */ HYRULE_FIELD_INTRO,
|
||||
/* 0x73 */ HYRULE_FIELD_AFTER_IMPA_ESCORT,
|
||||
/* 0x74 */ DESERT_COLOSSUS_SPIRIT_BLUE_WARP_2,
|
||||
/* 0x75 */ HYRULE_FIELD_SKY,
|
||||
/* 0x76 */ GANON_BATTLE_TOWER_COLLAPSE,
|
||||
/* 0x77 */ ZELDAS_COURTYARD_RECEIVE_LETTER
|
||||
} CutsceneTerminatorDestination;
|
||||
|
||||
#endif
|
448
OTRExporter/OTRExporter/z64cutscene_commands.h
Normal file
@ -0,0 +1,448 @@
|
||||
#ifndef Z64CUTSCENE_COMMANDS_H
|
||||
#define Z64CUTSCENE_COMMANDS_H
|
||||
|
||||
#include "command_macros_base.h"
|
||||
#include "z64cutscene.h"
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s32 totalEntries (e), s32 endFrame (n)
|
||||
* FORMAT
|
||||
* eeeeeeee nnnnnnnn
|
||||
* size = 0x8
|
||||
*/
|
||||
#define CS_BEGIN_CUTSCENE(totalEntries, endFrame) CMD_W(totalEntries), CMD_W(endFrame)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s16 startFrame (s), s16 endFrame (e)
|
||||
* FORMAT
|
||||
* 00000001 0001ssss eeee0000
|
||||
* size = 0xC
|
||||
*/
|
||||
#define CS_CAM_POS_LIST CS_CAM_EYE_LIST
|
||||
#define CS_CAM_EYE_LIST(startFrame, endFrame) \
|
||||
CS_CMD_CAM_EYE, CMD_HH(0x0001, startFrame), CMD_HH(endFrame, 0x0000)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s8 continueFlag (c), s8 roll (r), s16 frame (f), f32 viewAngle (a),
|
||||
* s16 xPos (x), s16 yPos (y), s16 zPos (z)
|
||||
* FORMAT
|
||||
* Capital U is Unused
|
||||
* ccrrffff aaaaaaaa xxxxyyyy zzzzUUUU
|
||||
* size = 0x10
|
||||
*/
|
||||
#define CS_CAM_POS CS_CAM_EYE
|
||||
#define CS_CAM_EYE(continueFlag, roll, frame, viewAngle, xPos, yPos, zPos, unused) \
|
||||
CMD_BBH(continueFlag, roll, frame), CMD_F(viewAngle), CMD_HH(xPos, yPos), CMD_HH(zPos, unused)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s16 startFrame (s), s16 endFrame (e)
|
||||
* FORMAT
|
||||
* 00000002 0001ssss eeee0000
|
||||
* size = 0xC
|
||||
*/
|
||||
#define CS_CAM_FOCUS_POINT_LIST CS_CAM_AT_LIST
|
||||
#define CS_CAM_AT_LIST(startFrame, endFrame) \
|
||||
CS_CMD_CAM_AT, CMD_HH(0x0001, startFrame), CMD_HH(endFrame, 0x0000)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s8 continueFlag (c), s8 roll (r), s16 frame (f), f32 viewAngle (a),
|
||||
* s16 xPos (x), s16 yPos (y), s16 zPos (z)
|
||||
* FORMAT
|
||||
* Capital U is Unused
|
||||
* ccrrffff aaaaaaaa xxxxyyyy zzzzUUUU
|
||||
* size = 0x10
|
||||
*/
|
||||
#define CS_CAM_FOCUS_POINT CS_CAM_AT
|
||||
#define CS_CAM_AT(continueFlag, roll, frame, viewAngle, xPos, yPos, zPos, unused) \
|
||||
CMD_BBH(continueFlag, roll, frame), CMD_F(viewAngle), CMD_HH(xPos, yPos), CMD_HH(zPos, unused)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s32 entries (e)
|
||||
* FORMAT
|
||||
* 00000003 eeeeeeee
|
||||
* size = 0x8
|
||||
*/
|
||||
#define CS_MISC_LIST(entries) CS_CMD_MISC, CMD_W(entries)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s16 unk (u), s16 startFrame (s), s16 endFrame (e)
|
||||
* FORMAT
|
||||
* Capital U is Unused
|
||||
* uuuussss eeeeUUUU UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
|
||||
* size = 0x30
|
||||
*/
|
||||
#define CS_MISC(unk, startFrame, endFrame, unused0, unused1, unused2, unused3, unused4, unused5, unused6, unused7, unused8, unused9, unused10) \
|
||||
CMD_HH(unk, startFrame), CMD_HH(endFrame, unused0), \
|
||||
CMD_W(unused1), CMD_W(unused2), CMD_W(unused3), CMD_W(unused4), CMD_W(unused5), \
|
||||
CMD_W(unused6), CMD_W(unused7), CMD_W(unused8), CMD_W(unused9), CMD_W(unused10)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s32 entries (e)
|
||||
* FORMAT
|
||||
* 00000004 eeeeeeee
|
||||
* size = 0x8
|
||||
*/
|
||||
#define CS_LIGHTING_LIST(entries) CS_CMD_SET_LIGHTING, CMD_W(entries)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s16 setting (m), s16 startFrame (s), s16 endFrame (e)
|
||||
* FORMAT
|
||||
* Capital U is Unused
|
||||
* mmmmssss eeeeUUUU UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU 00000000 00000000 00000000
|
||||
* size = 0x30
|
||||
*/
|
||||
#define CS_LIGHTING(setting, startFrame, endFrame, unused0, unused1, unused2, unused3, unused4, unused5, unused6, unused7) \
|
||||
CMD_HH(setting, startFrame), CMD_HH(endFrame, unused0), \
|
||||
CMD_W(unused1), CMD_W(unused2), CMD_W(unused3), CMD_W(unused4), CMD_W(unused5), \
|
||||
CMD_W(unused6), CMD_W(unused7), 0x00000000, 0x00000000, 0x00000000
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s16 startFrame (s), s16 endFrame (e)
|
||||
* FORMAT
|
||||
* Capital U is Unused , may be consistently zero
|
||||
* 00000005 0001ssss eeee0000
|
||||
* size = 0xC
|
||||
*/
|
||||
#define CS_CAM_POS_PLAYER_LIST CS_CAM_EYE_REL_TO_PLAYER_LIST
|
||||
#define CS_CAM_EYE_REL_TO_PLAYER_LIST(startFrame, endFrame) \
|
||||
CS_CMD_CAM_EYE_REL_TO_PLAYER, CMD_HH(0x0001, startFrame), CMD_HH(endFrame, 0x0000)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s8 continueFlag (c), s8 roll (r), s16 frame (f), f32 viewAngle (a),
|
||||
* s16 xPos (x), s16 yPos (y), s16 zPos (z)
|
||||
* FORMAT
|
||||
* Capital U is Unused
|
||||
* ccrrffff aaaaaaaa xxxxyyyy zzzzUUUU
|
||||
* size = 0x10
|
||||
*/
|
||||
#define CS_CAM_POS_PLAYER CS_CAM_EYE_REL_TO_PLAYER
|
||||
#define CS_CAM_EYE_REL_TO_PLAYER(continueFlag, roll, frame, viewAngle, xPos, yPos, zPos, unused) \
|
||||
CMD_BBH(continueFlag, roll, frame), CMD_F(viewAngle), CMD_HH(xPos, yPos), CMD_HH(zPos, unused)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s16 startFrame (s), s16 endFrame (e)
|
||||
* FORMAT
|
||||
* Capital U is Unused , may be consistently zero
|
||||
* 00000006 0001ssss eeee0000
|
||||
* size = 0xC
|
||||
*/
|
||||
#define CS_CAM_FOCUS_POINT_PLAYER_LIST CS_CAM_AT_REL_TO_PLAYER_LIST
|
||||
#define CS_CAM_AT_REL_TO_PLAYER_LIST(startFrame, endFrame) \
|
||||
CS_CMD_CAM_AT_REL_TO_PLAYER, CMD_HH(0x0001, startFrame), CMD_HH(endFrame, 0x0000)
|
||||
/**
|
||||
* ARGS
|
||||
* s8 continueFlag (c), s8 roll (r), s16 frame (f), f32 viewAngle (a),
|
||||
* s16 xPos (x), s16 yPos (y), s16 zPos (z)
|
||||
* FORMAT
|
||||
* Capital U is Unused
|
||||
* ccrrffff aaaaaaaa xxxxyyyy zzzzUUUU
|
||||
* size = 0x10
|
||||
*/
|
||||
#define CS_CAM_FOCUS_POINT_PLAYER CS_CAM_AT_REL_TO_PLAYER
|
||||
#define CS_CAM_AT_REL_TO_PLAYER(continueFlag, roll, frame, viewAngle, xPos, yPos, zPos, unused) \
|
||||
CMD_BBH(continueFlag, roll, frame), CMD_F(viewAngle), CMD_HH(xPos, yPos), CMD_HH(zPos, unused)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s16 unk (u), s16 startFrame (s), s16 endFrame (e)
|
||||
* FORMAT
|
||||
* Capital U is Unused
|
||||
* 00000007 uuuussss eeeeUUUU
|
||||
* size = 0xC
|
||||
*/
|
||||
#define CS_CMD_07_LIST(unk, startFrame, endFrame, unused) \
|
||||
CS_CMD_07, CMD_HH(unk, startFrame), CMD_HH(endFrame, unused)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s8 continueFlag (c), s8 roll (r), s16 frame (f), f32 viewAngle (a),
|
||||
* s16 xPos (x), s16 yPos (y), s16 zPos (z)
|
||||
* FORMAT
|
||||
* Capital U is Unused
|
||||
* ccrrffff aaaaaaaa xxxxyyyy zzzzUUUU
|
||||
* size = 0x10
|
||||
*/
|
||||
#define CS_CMD_07(continueFlag, roll, frame, viewAngle, xPos, yPos, zPos, unused) \
|
||||
CMD_BBH(continueFlag, roll, frame), CMD_F(viewAngle), CMD_HH(xPos, yPos), CMD_HH(zPos, unused)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s16 unk (u), s16 startFrame (s), s16 endFrame (e)
|
||||
* FORMAT
|
||||
* Capital U is Unused
|
||||
* 00000008 uuuussss eeeeUUUU
|
||||
* size = 0xC
|
||||
*/
|
||||
#define CS_CMD_08_LIST(unk, startFrame, endFrame, unused) \
|
||||
CS_CMD_08, CMD_HH(unk, startFrame), CMD_HH(endFrame, unused)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s8 continueFlag (c), s8 roll (r), s16 frame (f), f32 viewAngle (a),
|
||||
* s16 xPos (x), s16 yPos (y), s16 zPos (z)
|
||||
* FORMAT
|
||||
* Capital U is Unused
|
||||
* ccrrffff aaaaaaaa xxxxyyyy zzzzUUUU
|
||||
* size = 0x10
|
||||
*/
|
||||
#define CS_CMD_08(continueFlag, roll, frame, viewAngle, xPos, yPos, zPos, unused) \
|
||||
CMD_BBH(continueFlag, roll, frame), CMD_F(viewAngle), CMD_HH(xPos, yPos), CMD_HH(zPos, unused)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s32 entries (e)
|
||||
* FORMAT
|
||||
* 00000009 eeeeeeee
|
||||
* size = 0x8
|
||||
*/
|
||||
#define CS_CMD_09_LIST(entries) CS_CMD_09, CMD_W(entries)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s16 unk (u), s16 startFrame (s), s16 endFrame (e), s16 unk2 (v), s16 unk3 (w), s16 unk4 (x)
|
||||
* FORMAT
|
||||
* Capital U is Unused
|
||||
* uuuussss eeeevvww xxUUUUUU
|
||||
* size = 0xC
|
||||
*/
|
||||
#define CS_CMD_09(unk, startFrame, endFrame, unk2, unk3, unk4, unused0, unused1) \
|
||||
CMD_HH(unk, startFrame), CMD_HBB(endFrame, unk2, unk3), CMD_BBH(unk4, unused0, unused1)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s32 cmdType (c), s32 entries (e)
|
||||
* FORMAT
|
||||
* cccccccc eeeeeeee
|
||||
* size = 0x8
|
||||
*/
|
||||
#define CS_UNK_DATA_LIST(cmdType, entries) CMD_W(cmdType), CMD_W(entries)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s32 unk1 (a), s32 unk2 (b), s32 unk3 (c), s32 unk4 (d), s32 unk5 (e), s32 unk6 (f),
|
||||
* s32 unk7 (g), s32 unk8 (h), s32 unk9 (i), s32 unk10 (j), s32 unk11 (k), s32 unk12 (l)
|
||||
* FORMAT
|
||||
* aaaaaaaa bbbbbbbb cccccccc dddddddd eeeeeeee ffffffff gggggggg hhhhhhhh iiiiiiii jjjjjjjj kkkkkkkk llllllll
|
||||
* size = 0x30
|
||||
*/
|
||||
#define CS_UNK_DATA(unk1, unk2, unk3, unk4, unk5, unk6, unk7, unk8, unk9, unk10, unk11, unk12) \
|
||||
CMD_W(unk1), CMD_W(unk2), CMD_W(unk3), CMD_W(unk4), CMD_W(unk5), CMD_W(unk6), \
|
||||
CMD_W(unk7), CMD_W(unk8), CMD_W(unk9), CMD_W(unk10), CMD_W(unk11), CMD_W(unk12)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s32 cmdType (c), s32 entries (e)
|
||||
* FORMAT
|
||||
* cccccccc eeeeeeee
|
||||
* size = 0x8
|
||||
*/
|
||||
#define CS_NPC_ACTION_LIST(cmdType, entries) CMD_W(cmdType), CMD_W(entries)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s16 npcAction (a), s16 startFrame (s), s16 endFrame (e),
|
||||
* s16 rotX (u), s16 rotY (v), s16 rotZ (w),
|
||||
* s32 startX (i), s32 startY (j), s32 startZ (k),
|
||||
* s32 endX (l), s32 endY (m), s32 endZ (n),
|
||||
* f32 normX (x), f32 normY (y), f32 normZ (z),
|
||||
* FORMAT
|
||||
* aaaassss eeeeuuuu vvvvwwww iiiiiiii jjjjjjjj kkkkkkkk llllllll mmmmmmmm nnnnnnnn xxxxxxxx yyyyyyyy zzzzzzzz
|
||||
* size = 0x30
|
||||
*/
|
||||
#define CS_NPC_ACTION(npcAction, startFrame, endFrame, rotX, rotY, rotZ, startX, startY, startZ, endX, endY, endZ, normX, normY, normZ) \
|
||||
CMD_HH(npcAction, startFrame), CMD_HH(endFrame, rotX), CMD_HH(rotY, rotZ), \
|
||||
CMD_W(startX), CMD_W(startY), CMD_W(startZ), \
|
||||
CMD_W(endX), CMD_W(endY), CMD_W(endZ), \
|
||||
CMD_F(normX), CMD_F(normY), CMD_F(normZ)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s32 cmdType (c), s32 entries (e)
|
||||
* FORMAT
|
||||
* cccccccc eeeeeeee
|
||||
* size = 0x8
|
||||
*/
|
||||
#define CS_PLAYER_ACTION_LIST(entries) CS_CMD_SET_PLAYER_ACTION, CMD_W(entries)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s16 linkAction (a), s16 startFrame (s), s16 endFrame (e),
|
||||
* s16 rotX (u), s16 rotY (v), s16 rotZ (w),
|
||||
* s32 startX (i), s32 startY (j), s32 startZ (k),
|
||||
* s32 endX (l), s32 endY (m), s32 endZ (n),
|
||||
* f32 normX (x), f32 normY (y), f32 normZ (z),
|
||||
* FORMAT
|
||||
* aaaassss eeeeuuuu vvvvwwww iiiiiiii jjjjjjjj kkkkkkkk llllllll mmmmmmmm nnnnnnnn xxxxxxxx yyyyyyyy zzzzzzzz
|
||||
* size = 0x30
|
||||
*/
|
||||
#define CS_PLAYER_ACTION(linkAction, startFrame, endFrame, rotX, rotY, rotZ, startX, startY, startZ, endX, endY, endZ, normX, normY, normZ) \
|
||||
CS_NPC_ACTION(linkAction, startFrame, endFrame, rotX, rotY, rotZ, startX, startY, startZ, endX, endY, endZ, normX, normY, normZ)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s32 entries (e)
|
||||
* FORMAT
|
||||
* 00000013 eeeeeeee
|
||||
* size = 0x8
|
||||
*/
|
||||
#define CS_TEXT_LIST(entries) CS_CMD_TEXTBOX, CMD_W(entries)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s16 messageId (i), s16 startFrame (s), s16 endFrame (e), s16 type (o),
|
||||
* s16 topOptionBranch (y), s16 bottomOptionBranch (n)
|
||||
* FORMAT
|
||||
* iiiissss eeeeoooo yyyynnnn
|
||||
* size = 0xC
|
||||
*/
|
||||
#define CS_TEXT_DISPLAY_TEXTBOX(messageId, startFrame, endFrame, type, topOptionBranch, bottomOptionBranch) \
|
||||
CMD_HH(messageId, startFrame), CMD_HH(endFrame, type), CMD_HH(topOptionBranch, bottomOptionBranch)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s16 startFrame (s), s16 endFrame (e)
|
||||
* FORMAT
|
||||
* FFFFssss eeeeFFFF FFFFFFFF
|
||||
* size = 0xC
|
||||
*/
|
||||
#define CS_TEXT_NONE(startFrame, endFrame) \
|
||||
CS_TEXT_DISPLAY_TEXTBOX(0xFFFF, startFrame, endFrame, 0xFFFF, 0xFFFF, 0xFFFF)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s16 ocarinaSongAction (o), s16 startFrame (s), s16 endFrame (e), s16 topOptionBranch (i)
|
||||
* FORMAT
|
||||
* oooossss eeee0002 iiiiFFFF
|
||||
* size = 0xC
|
||||
*/
|
||||
#define CS_TEXT_LEARN_SONG(ocarinaSongAction, startFrame, endFrame, messageId) \
|
||||
CS_TEXT_DISPLAY_TEXTBOX(ocarinaSongAction, startFrame, endFrame, 0x0002, messageId, 0xFFFF)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s16 transitionType (t), s16 startFrame (s), s16 endFrame (e)
|
||||
* FORMAT
|
||||
* Capital U is Unused , endFrame duplicate
|
||||
* 0000002D 00000001 ttttssss eeeeUUUU
|
||||
* size = 0x10
|
||||
*/
|
||||
#define CS_SCENE_TRANS_FX(transitionType, startFrame, endFrame) \
|
||||
CS_CMD_SCENE_TRANS_FX, 0x00000001, CMD_HH(transitionType, startFrame), CMD_HH(endFrame, endFrame)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s32 entries (e)
|
||||
* FORMAT
|
||||
* 00000056 eeeeeeee
|
||||
* size = 0x8
|
||||
*/
|
||||
#define CS_PLAY_BGM_LIST(entries) CS_CMD_PLAYBGM, CMD_W(entries)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s16 sequence (q), s16 startFrame (s), s16 endFrame (e)
|
||||
* FORMAT
|
||||
* Capital U is Unused
|
||||
* qqqqssss eeeeUUUU UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU 00000000 00000000 00000000
|
||||
* size = 0x30
|
||||
*/
|
||||
#define CS_PLAY_BGM(sequence, startFrame, endFrame, unused0, unused1, unused2, unused3, unused4, unused5, unused6, unused7) \
|
||||
CMD_HH(sequence, startFrame), CMD_HH(endFrame, unused0), \
|
||||
CMD_W(unused1), CMD_W(unused2), CMD_W(unused3), CMD_W(unused4), CMD_W(unused5), \
|
||||
CMD_W(unused6), CMD_W(unused7), 0x00000000, 0x00000000, 0x00000000
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s32 entries (e)
|
||||
* FORMAT
|
||||
* 00000057 eeeeeeee
|
||||
* size = 0x8
|
||||
*/
|
||||
#define CS_STOP_BGM_LIST(entries) CS_CMD_STOPBGM, CMD_W(entries)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s16 sequence (q), s16 startFrame (s), s16 endFrame (e)
|
||||
* FORMAT
|
||||
* Capital U is Unused
|
||||
* uuqqssss eeeeUUUU UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU 00000000 00000000 00000000
|
||||
* size = 0x30
|
||||
*/
|
||||
#define CS_STOP_BGM(sequence, startFrame, endFrame, unused0, unused1, unused2, unused3, unused4, unused5, unused6, unused7) \
|
||||
CMD_HH(sequence, startFrame), CMD_HH(endFrame, unused0), \
|
||||
CMD_W(unused1), CMD_W(unused2), CMD_W(unused3), CMD_W(unused4), CMD_W(unused5), \
|
||||
CMD_W(unused6), CMD_W(unused7), 0x00000000, 0x00000000, 0x00000000
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s32 entries (e)
|
||||
* FORMAT
|
||||
* 0000007C eeeeeeee
|
||||
* size = 0x8
|
||||
*/
|
||||
#define CS_FADE_BGM_LIST(entries) CS_CMD_FADEBGM, CMD_W(entries)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s16 fadeType (t), s16 startFrame (s), s16 endFrame (e)
|
||||
* FORMAT
|
||||
* Capital U is Unused
|
||||
* ttttssss eeeeUUUU UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU 00000000 00000000 00000000
|
||||
* size = 0x30
|
||||
*/
|
||||
#define CS_FADE_BGM(fadeType, startFrame, endFrame, unused0, unused1, unused2, unused3, unused4, unused5, unused6, unused7) \
|
||||
CMD_HH(fadeType, startFrame), CMD_HH(endFrame, unused0), \
|
||||
CMD_W(unused1), CMD_W(unused2), CMD_W(unused3), CMD_W(unused4), CMD_W(unused5), \
|
||||
CMD_W(unused6), CMD_W(unused7), 0x00000000, 0x00000000, 0x00000000
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s32 entries (e)
|
||||
* FORMAT
|
||||
* 0000008C eeeeeeee
|
||||
* size = 0x8
|
||||
*/
|
||||
#define CS_TIME_LIST(entries) CS_CMD_SETTIME, CMD_W(entries)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* s16 unk (u), s16 startFrame (s), s16 endFrame (e), s8 hour (h), s8 min (m)
|
||||
* FORMAT
|
||||
* Capital U is Unused
|
||||
* uuuussss eeeehhmm UUUUUUUU
|
||||
* size = 0xC
|
||||
*/
|
||||
#define CS_TIME(unk, startFrame, endFrame, hour, min, unused) \
|
||||
CMD_HH(unk, startFrame), \
|
||||
CMD_HBB(endFrame, hour, min), \
|
||||
CMD_W(unused)
|
||||
|
||||
/**
|
||||
* ARGS
|
||||
* CutsceneTerminatorDestination dest (d), s16 startFrame (s), s16 endFrame (e)
|
||||
* FORMAT
|
||||
* Capital U is Unused , endFrame duplicate
|
||||
* 000003E8 00000001 ddddssss eeeeUUUU
|
||||
* size = 0x10
|
||||
*/
|
||||
#define CS_TERMINATOR(dest, startFrame, endFrame) \
|
||||
CS_CMD_TERMINATOR, 0x00000001, CMD_HH(dest, startFrame), CMD_HH(endFrame, endFrame)
|
||||
|
||||
/**
|
||||
* Marks the end of a cutscene
|
||||
*/
|
||||
#define CS_END() 0xFFFFFFFF, 0x00000000
|
||||
|
||||
#endif
|
BIN
OTRExporter/assets/ship_of_harkinian/buttons/ABtn.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
OTRExporter/assets/ship_of_harkinian/buttons/BBtn.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
OTRExporter/assets/ship_of_harkinian/buttons/CDown.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
OTRExporter/assets/ship_of_harkinian/buttons/CLeft.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
OTRExporter/assets/ship_of_harkinian/buttons/CRight.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
OTRExporter/assets/ship_of_harkinian/buttons/CUp.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
OTRExporter/assets/ship_of_harkinian/buttons/LBtn.png
Normal file
After Width: | Height: | Size: 355 B |
BIN
OTRExporter/assets/ship_of_harkinian/buttons/RBtn.png
Normal file
After Width: | Height: | Size: 379 B |
BIN
OTRExporter/assets/ship_of_harkinian/buttons/StartBtn.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
OTRExporter/assets/ship_of_harkinian/buttons/ZBtn.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
OTRExporter/assets/ship_of_harkinian/icons/gSohIcon.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
117
OTRExporter/extract_assets.py
Executable file
@ -0,0 +1,117 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import argparse, json, os, signal, time, sys, shutil
|
||||
from multiprocessing import Pool, cpu_count, Event, Manager, ProcessError
|
||||
import shutil
|
||||
|
||||
def SignalHandler(sig, frame):
|
||||
print(f'Signal {sig} received. Aborting...')
|
||||
mainAbort.set()
|
||||
# Don't exit immediately to update the extracted assets file.
|
||||
|
||||
def BuildOTR():
|
||||
shutil.copyfile("baserom/Audiobank", "Extract/Audiobank")
|
||||
shutil.copyfile("baserom/Audioseq", "Extract/Audioseq")
|
||||
shutil.copyfile("baserom/Audiotable", "Extract/Audiotable")
|
||||
|
||||
shutil.copytree("assets", "Extract/assets")
|
||||
|
||||
execStr = "x64\\Release\\ZAPD.exe" if sys.platform == "win32" else "../ZAPD/ZAPD.out"
|
||||
|
||||
execStr += " botr -se OTR"
|
||||
|
||||
print(execStr)
|
||||
exitValue = os.system(execStr)
|
||||
if exitValue != 0:
|
||||
print("\n")
|
||||
print("Error when building the OTR file...", file=os.sys.stderr)
|
||||
print("Aborting...", file=os.sys.stderr)
|
||||
print("\n")
|
||||
|
||||
def ExtractFile(xmlPath, outputPath, outputSourcePath):
|
||||
execStr = "x64\\Release\\ZAPD.exe" if sys.platform == "win32" else "../ZAPD/ZAPD.out"
|
||||
execStr += " e -eh -i %s -b baserom/ -o %s -osf %s -gsf 1 -rconf CFG/Config.xml -se OTR" % (xmlPath, outputPath, outputSourcePath)
|
||||
|
||||
if "overlays" in xmlPath:
|
||||
execStr += " --static"
|
||||
|
||||
print(execStr)
|
||||
exitValue = os.system(execStr)
|
||||
#exitValue = 0
|
||||
if exitValue != 0:
|
||||
print("\n")
|
||||
print("Error when extracting from file " + xmlPath, file=os.sys.stderr)
|
||||
print("Aborting...", file=os.sys.stderr)
|
||||
print("\n")
|
||||
|
||||
def ExtractFunc(fullPath):
|
||||
*pathList, xmlName = fullPath.split(os.sep)
|
||||
objectName = os.path.splitext(xmlName)[0]
|
||||
|
||||
outPath = os.path.join("..\\soh\\assets\\", *pathList[4:], objectName)
|
||||
os.makedirs(outPath, exist_ok=True)
|
||||
outSourcePath = outPath
|
||||
|
||||
ExtractFile(fullPath, outPath, outSourcePath)
|
||||
|
||||
def initializeWorker(abort, test):
|
||||
global globalAbort
|
||||
globalAbort = abort
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="baserom asset extractor")
|
||||
parser.add_argument("-s", "--single", help="asset path relative to assets/, e.g. objects/gameplay_keep")
|
||||
parser.add_argument("-f", "--force", help="Force the extraction of every xml instead of checking the touched ones.", action="store_true")
|
||||
parser.add_argument("-u", "--unaccounted", help="Enables ZAPD unaccounted detector warning system.", action="store_true")
|
||||
args = parser.parse_args()
|
||||
|
||||
global mainAbort
|
||||
mainAbort = Event()
|
||||
manager = Manager()
|
||||
signal.signal(signal.SIGINT, SignalHandler)
|
||||
|
||||
extractedAssetsTracker = manager.dict()
|
||||
|
||||
asset_path = args.single
|
||||
if asset_path is not None:
|
||||
fullPath = os.path.join("..\\soh\\assets", "xml", asset_path + ".xml")
|
||||
if not os.path.exists(fullPath):
|
||||
print(f"Error. File {fullPath} doesn't exists.", file=os.sys.stderr)
|
||||
exit(1)
|
||||
|
||||
ExtractFunc(fullPath)
|
||||
else:
|
||||
extract_text_path = "assets/text/message_data.h"
|
||||
if os.path.isfile(extract_text_path):
|
||||
extract_text_path = None
|
||||
extract_staff_text_path = "assets/text/message_data_staff.h"
|
||||
if os.path.isfile(extract_staff_text_path):
|
||||
extract_staff_text_path = None
|
||||
|
||||
xmlFiles = []
|
||||
for currentPath, _, files in os.walk(os.path.join("..\\soh\\assets", "xml")):
|
||||
for file in files:
|
||||
fullPath = os.path.join(currentPath, file)
|
||||
if file.endswith(".xml"):
|
||||
xmlFiles.append(fullPath)
|
||||
|
||||
try:
|
||||
numCores = 2
|
||||
print("Extracting assets with " + str(numCores) + " CPU cores.")
|
||||
with Pool(numCores, initializer=initializeWorker, initargs=(mainAbort, 0)) as p:
|
||||
p.map(ExtractFunc, xmlFiles)
|
||||
except Exception as e:
|
||||
print("Warning: Multiprocessing exception ocurred.", file=os.sys.stderr)
|
||||
print("Disabling mutliprocessing.", file=os.sys.stderr)
|
||||
|
||||
initializeWorker(mainAbort, 0)
|
||||
for singlePath in xmlFiles:
|
||||
ExtractFunc(singlePath)
|
||||
|
||||
|
||||
BuildOTR()
|
||||
shutil.rmtree("Extract")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
8
OTRExporter/offsets.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"MQDebug": {
|
||||
"bankdefs": [1281424, 128],
|
||||
"fontdefs": [1278576, 624],
|
||||
"fontmaps": [1279200, 448],
|
||||
"seqdefs": [1279648, 1776]
|
||||
}
|
||||
}
|