Merge pull request #135 from blueskythlikesclouds/pac-fix

Fix PAC archive file naming
This commit is contained in:
KillzXGaming 2019-10-11 16:12:15 -04:00 committed by GitHub
commit b8bad6c685
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 324 additions and 314 deletions

View file

@ -105,8 +105,7 @@ namespace HedgehogLibrary
PacNodeTree tree = new PacNodeTree(); PacNodeTree tree = new PacNodeTree();
tree.Read(reader, header3); tree.Read(reader, header3);
var rootNode = tree.RootNode; LoadTree(tree);
LoadTree(rootNode);
} }
else else
{ {
@ -172,8 +171,7 @@ namespace HedgehogLibrary
PacNodeTree tree = new PacNodeTree(); PacNodeTree tree = new PacNodeTree();
tree.Read(reader, header3); tree.Read(reader, header3);
var rootNode = tree.RootNode; LoadTree(tree);
LoadTree(rootNode, splitName);
if (header3.SplitCount != 0) if (header3.SplitCount != 0)
{ {
@ -307,23 +305,33 @@ namespace HedgehogLibrary
// PAC has splits // PAC has splits
HasSplit = 5 HasSplit = 5
} }
public void LoadTree(PacNode node, string fullPath = "") private void LoadNode(PacNode node, string fullPath)
{ {
bool IsFile = node.HasData && node.Data != null; if (!string.IsNullOrEmpty(node.Name))
fullPath += node.Name;
if (IsFile) if (node.HasData && node.Data is byte[])
{ {
FileEntry newNode = new FileEntry(node); var fileEntry = new FileEntry(node);
newNode.FileName = $"{fullPath}.{newNode.Name}"; fileEntry.FileName = $"{fullPath}.{node.Extension}";
files.Add(newNode); fileEntry.Name = fileEntry.FileName;
files.Add(fileEntry);
} }
else if (node.HasData && node.Data is PacNodeTree)
{
LoadTree((PacNodeTree)node.Data);
}
else
{
foreach (var childNode in node.Children)
LoadNode(childNode, fullPath);
}
}
if (node.Name != "Node" && node.Name != null) public void LoadTree(PacNodeTree nodeTree)
fullPath += $"/{node.Name}"; {
LoadNode(nodeTree.RootNode, string.Empty);
for (int i = 0; i < node.Children.Count; i++)
LoadTree(node.Children[i], fullPath);
} }
public class FileEntry : ArchiveFileInfo public class FileEntry : ArchiveFileInfo
@ -331,7 +339,7 @@ namespace HedgehogLibrary
public FileEntry(PacNode node) public FileEntry(PacNode node)
{ {
Name = node.Name; Name = node.Name;
FileData = node.Data; FileData = node.Data as byte[];
if (node.Name == null) Name = "File Node"; if (node.Name == null) Name = "File Node";
if (FileData == null) FileData = new byte[0]; if (FileData == null) FileData = new byte[0];
} }
@ -360,11 +368,12 @@ namespace HedgehogLibrary
{ {
public HeaderV3 PacFile; public HeaderV3 PacFile;
public byte[] Data; public object Data;
public PacNodeTree ParentTree; public PacNodeTree ParentTree;
public string Name { get; set; } public string Name { get; set; }
public bool HasData { get; set; } public bool HasData { get; set; }
public string Extension { get; set; }
public List<PacNode> Children = new List<PacNode>(); public List<PacNode> Children = new List<PacNode>();
public DataType DataType; public DataType DataType;
@ -421,8 +430,7 @@ namespace HedgehogLibrary
if (extensionOffset != 0) if (extensionOffset != 0)
{ {
reader.SeekBegin((long)extensionOffset); reader.SeekBegin((long)extensionOffset);
string extension = reader.ReadZeroTerminatedString(); Extension = reader.ReadZeroTerminatedString();
Name += extension;
} }
if (dataBlockOffset != 0) if (dataBlockOffset != 0)
@ -436,7 +444,7 @@ namespace HedgehogLibrary
reader.SeekBegin((long)dataOffset); reader.SeekBegin((long)dataOffset);
PacNodeTree tree = new PacNodeTree(); PacNodeTree tree = new PacNodeTree();
tree.Read(reader, PacFile); tree.Read(reader, PacFile);
Children.Add(tree.RootNode); Data = tree;
} }
} }
if (childIndicesOffset != 0) if (childIndicesOffset != 0)

325
README.md
View file

@ -1,162 +1,163 @@
# Switch-Toolbox # Switch-Toolbox
A tool to edit many formats of Nintendo Switch and Wii U. A tool to edit many formats of Nintendo Switch and Wii U.
## Changelog 1.0 Experimental / BETA ## Changelog 1.0 Experimental / BETA
https://docs.google.com/spreadsheets/d/16JLhGBJL5U5hpKWspL-pzYIaRL23X1YKEmia6pbsGbc/edit#gid=1386834576 https://docs.google.com/spreadsheets/d/16JLhGBJL5U5hpKWspL-pzYIaRL23X1YKEmia6pbsGbc/edit#gid=1386834576
## Releases ## Releases
https:/c/github.com/KillzXGaming/Switch-Toolbox/releases https:/c/github.com/KillzXGaming/Switch-Toolbox/releases
## Discord ## Discord
https://discord.gg/eyvGXWP https://discord.gg/eyvGXWP
## Features ## Features
This tool currently features: This tool currently features:
- BFRES - BFRES
- Fully supports Wii U and Switch. - Fully supports Wii U and Switch.
- Model importing (dae, fbx, obj, and csv) - Model importing (dae, fbx, obj, and csv)
- Material editing (Render info, texture mapping, parameters, etc) - Material editing (Render info, texture mapping, parameters, etc)
- Material copying - Material copying
- Animation and model sub section can be exported/imported. - Animation and model sub section can be exported/imported.
- Can delete, add, replace individual objects from an fmdl. - Can delete, add, replace individual objects from an fmdl.
- Can create new sub sections and data - Can create new sub sections and data
- Can preview skeletal, SRT, param, texture pattern, and bone visual animations. (Param ones will vary) - Can preview skeletal, SRT, param, texture pattern, and bone visual animations. (Param ones will vary)
- Can export and import fully rigged models with bone support. - Can export and import fully rigged models with bone support.
- Can convert gif files to texture pattern animations. Very WIP atm. - Can convert gif files to texture pattern animations. Very WIP atm.
Can Edit Formats Can Edit Formats
- BFRES - BFRES
- BNTX - BNTX
- NUTEXB - NUTEXB
- XTX - XTX
- GTX - GTX
- SARC - SARC
- BARS - BARS
- KCL - KCL
- BFLIM - BFLIM
- GFPAK - GFPAK
- BEA - BEA
- AAMP (Wii U and Switch) - AAMP (Wii U and Switch)
- BYAML/BYML (Wii U, 3DS, and Switch) - BYAML/BYML (Wii U, 3DS, and Switch)
- PTCL (Wii U, 3DS, and Switch) - PTCL (Wii U, 3DS, and Switch)
- TMPK - TMPK
- PAK/IGA (Crash Bandicoot/Crash Team Racing) - PAK/IGA (Crash Bandicoot/Crash Team Racing)
- IGZ Textures (Crash Bandicoot/Crash Team Racing) - IGZ Textures (Crash Bandicoot/Crash Team Racing)
- BFFNT (Textures only) - BFFNT (Textures only)
Can Preview Can Preview
- BCRES - BCRES
- Models, materials, and textures. - Models, materials, and textures.
- BFSHA - BFSHA
- Can view options, samplers, attributes, and uniform blocks. - Can view options, samplers, attributes, and uniform blocks.
- BNSH - BNSH
- Can extract shader vertex and fragment shaders from variations/programs - Can extract shader vertex and fragment shaders from variations/programs
- SHARCFB and SHARC - SHARCFB and SHARC
- Basic preview of some shader program data. - Basic preview of some shader program data.
- Can edit both v1 and v2 AAMP (Wii U and Switch) - Can edit both v1 and v2 AAMP (Wii U and Switch)
- EFC - EFC
- Can preview effect tables and link PTCL. - Can preview effect tables and link PTCL.
- NUT - NUT
- Can preview NTWU, NTP3, and NTWD variants. Editng will be soon - Can preview NTWU, NTP3, and NTWD variants. Editng will be soon
- MSBT - MSBT
- Very basic previewing. - Very basic previewing.
- MP3, OGG, IDSP, HPS, WAV, BFWAV, BFSTM, BCWAV, BCWAV - MP3, OGG, IDSP, HPS, WAV, BFWAV, BFSTM, BCWAV, BCWAV
- Can listen to audio and convert between certain formats. Thanks to VGAudio and CSCore - Can listen to audio and convert between certain formats. Thanks to VGAudio and CSCore
- NARC - NARC
- SP2 (Team Sonic Racing) - SP2 (Team Sonic Racing)
- GFMDL - GFMDL
- TEX (3DS) - TEX (3DS)
- NUSHDB (Switch Namco Shaders) - NUSHDB (Switch Namco Shaders)
- SDF (Snow Drop Engine) - SDF (Snow Drop Engine)
- NCA - NCA
- NSP - NSP
- IStorage - IStorage
- NXARC - NXARC
- LZARC - LZARC
- IGA .pak - IGA .pak
- RARC - RARC
- GMX (TPHD Models) - GMX (TPHD Models)
- MKAGPDX Model .bin files - MKAGPDX Model .bin files
- MKAGPDX Archive .pac files - MKAGPDX Archive .pac files
- ME01 and SA01 archives. - ME01 and SA01 archives.
- Luigi's Mansion 2 Dark Moon (archives, models, and textures) - Luigi's Mansion 2 Dark Moon (archives, models, and textures)
- TPL - TPL
- TXE - TXE
- BTI - BTI
- G1T - G1T
- CMB (OOT3D, MM3D, LM3DS) - CMB (OOT3D, MM3D, LM3DS)
- CTXB (OOT3D, MM3D, LM3DS) - CTXB (OOT3D, MM3D, LM3DS)
- GAR (OOT3D, MM3D, LM3DS) - GAR (OOT3D, MM3D, LM3DS)
- ZSI (OOT3D, MM3D) - ZSI (OOT3D, MM3D)
- BinGZ (Hyrule Warriors) - BinGZ (Hyrule Warriors)
- PAC (Sonic Forces) - PAC (Sonic Forces)
- Gamecube ISOs (file system) - Gamecube ISOs (file system)
## Tutorials ## Tutorials
https://github.com/KillzXGaming/Switch-Toolbox/wiki https://github.com/KillzXGaming/Switch-Toolbox/wiki
## Issues or Requests ## Issues or Requests
https://github.com/KillzXGaming/Switch-Toolbox/issues https://github.com/KillzXGaming/Switch-Toolbox/issues
## Building ## Building
To build make sure you have Visual Studio installed (I use 2017, older versions may not work) and open the .sln. Then build the solution as release. It should compile properly on the latest. To build make sure you have Visual Studio installed (I use 2017, older versions may not work) and open the .sln. Then build the solution as release. It should compile properly on the latest.
In the event that the tool cannot compile, check references. All the libraries are stored in Switch-Toolbox/Lib folder. In the event that the tool cannot compile, check references. All the libraries are stored in Switch-Toolbox/Lib folder.
## Credits ## Credits
- Smash Forge Devs (SMG, Ploaj, jam1garner, smb123w64gb, etc) for some code ported over. Specifically animation stuff and some rendering. - Smash Forge Devs (SMG, Ploaj, jam1garner, smb123w64gb, etc) for some code ported over. Specifically animation stuff and some rendering.
- Assimp devs for their massive asset library! - Assimp devs for their massive asset library!
- Wexos (helped figure out a few things, ie format list to assign each attribute) - Wexos (helped figure out a few things, ie format list to assign each attribute)
- JuPaHe64 for the base 3D renderer. - JuPaHe64 for the base 3D renderer.
- Every File Explorer devs (Gericom) for Yaz0 and bitmap font stuff - Every File Explorer devs (Gericom) for Yaz0 and bitmap font stuff
- Exelix for Byaml, Sarc and KCL library - Exelix for Byaml, Sarc and KCL library
- Syroot for helpful IO extensions and libraries - Syroot for helpful IO extensions and libraries
- GDKChan for PICA shaders stuff used with bcres, structs for bcres, and some DDS decode methods - GDKChan for PICA shaders stuff used with bcres, structs for bcres, and some DDS decode methods
- AboodXD for some foundation stuff with exelix's SARC library, Wii U (GPU7) and Switch (Tegra X1) textures swizzling, reading/converting uncompressed types for DDS, and documentation for GTX, XTX, and BNTX - AboodXD for some foundation stuff with exelix's SARC library, Wii U (GPU7) and Switch (Tegra X1) textures swizzling, reading/converting uncompressed types for DDS, and documentation for GTX, XTX, and BNTX
- MelonSpeedruns for logo. - MelonSpeedruns for logo.
- BrawlBox team for brawl libaries used for brres parsing. - BrawlBox team for brawl libaries used for brres parsing.
- Sage of Mirrors for SuperBMDLib. - Sage of Mirrors for SuperBMDLib.
- Ambrosia for BTI and TXE support. - Ambrosia for BTI and TXE support.
- Kuriimu for some IO and file parsing help - Kuriimu for some IO and file parsing help
- Skyth and Radfordhound for PAC documentation
## Resources
- [Treeview Icons by icons8](https://icons8.com/) ## Resources
- Smash Forge (Currently placeholders) - [Treeview Icons by icons8](https://icons8.com/)
- Smash Forge (Currently placeholders)
## Documentation (File Formats)
- http://mk8.tockdom.com/wiki/ ## Documentation (File Formats)
- https://wiki.oatmealdome.me/Category:File_formats - http://mk8.tockdom.com/wiki/
- https://github.com/Kinnay/Nintendo-File-Formats/wiki - https://wiki.oatmealdome.me/Category:File_formats
- http://Avsys.xyz/wiki/Category:File_Formats - https://github.com/Kinnay/Nintendo-File-Formats/wiki
- http://Avsys.xyz/wiki/Category:File_Formats
## Libraries
- [SuperBMDLib] (https://github.com/Sage-of-Mirrors/SuperBMD) ## Libraries
- [Brawl Lib (for brres section conversion)](https://github.com/libertyernie/brawltools) - [SuperBMDLib] (https://github.com/Sage-of-Mirrors/SuperBMD)
- [Exelix (Sarc, kcl, and byml libraries)](https://github.com/exelix11/EditorCore/tree/master/FileFormatPlugins) - [Brawl Lib (for brres section conversion)](https://github.com/libertyernie/brawltools)
- [ZstdNet (Compression)](https://github.com/skbkontur/ZstdNet) - [Exelix (Sarc, kcl, and byml libraries)](https://github.com/exelix11/EditorCore/tree/master/FileFormatPlugins)
- [Be.HexEditor by Bernhard Elbl](https://sourceforge.net/projects/hexbox/) - [ZstdNet (Compression)](https://github.com/skbkontur/ZstdNet)
- GL EditorFramwork by jupahe64 - [Be.HexEditor by Bernhard Elbl](https://sourceforge.net/projects/hexbox/)
- [WeifenLuo for docking suite](http://dockpanelsuite.com/) - GL EditorFramwork by jupahe64
- [SF Graphics by SMG (Experimental](https://github.com/ScanMountGoat/SFGraphics) (currently just a placeholder for shader workflow and some useful things) - [WeifenLuo for docking suite](http://dockpanelsuite.com/)
- [Audio & MIDI library](https://github.com/naudio/NAudio) - [SF Graphics by SMG (Experimental](https://github.com/ScanMountGoat/SFGraphics) (currently just a placeholder for shader workflow and some useful things)
- [VGAudio](https://github.com/Thealexbarney/VGAudio) - [Audio & MIDI library](https://github.com/naudio/NAudio)
- [CSCore](https://github.com/filoe/cscore) - [VGAudio](https://github.com/Thealexbarney/VGAudio)
- [Assimp](https://bitbucket.org/Starnick/assimpnet/src/master/) - [CSCore](https://github.com/filoe/cscore)
- [OpenTK](https://github.com/opentk/opentk) - [Assimp](https://bitbucket.org/Starnick/assimpnet/src/master/)
- [BezelEngineArchive Library](https://github.com/KillzXGaming/BEA-Library-Editor) - [OpenTK](https://github.com/opentk/opentk)
- [Syroot BinaryData](https://gitlab.com/Syroot/BinaryData) - [BezelEngineArchive Library](https://github.com/KillzXGaming/BEA-Library-Editor)
- [Syroot Maths](https://gitlab.com/Syroot/Maths) - [Syroot BinaryData](https://gitlab.com/Syroot/BinaryData)
- [Syroot Bfres Library (Wii U)](https://gitlab.com/Syroot/NintenTools.Bfres) - [Syroot Maths](https://gitlab.com/Syroot/Maths)
- [LibHac](https://github.com/Thealexbarney/LibHac) - [Syroot Bfres Library (Wii U)](https://gitlab.com/Syroot/NintenTools.Bfres)
- [LibHac](https://github.com/Thealexbarney/LibHac)
## Helpful Tools
- https://github.com/IcySon55/Kuriimu ## Helpful Tools
- https://github.com/IcySon55/Kuriimu
License
in Switch_Toolbox\Lib\Licenses License
in Switch_Toolbox\Lib\Licenses
Please note if you do not want your library used or if i'm missing credits!
Please note if you do not want your library used or if i'm missing credits!

View file

@ -1,132 +1,133 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 2.0 Version 2.0
The primary goals of this format is to allow a simple XML format The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes various data types are done through the TypeConverter classes
associated with the data types. associated with the data types.
Example: Example:
... ado.net/XML headers & schema ... ... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader> <resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader> <resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value> <value>[base64 mime encoded serialized .NET Framework object]</value>
</data> </data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment> <comment>This is a comment</comment>
</data> </data>
There are any number of "resheader" rows that contain simple There are any number of "resheader" rows that contain simple
name/value pairs. name/value pairs.
Each data row contains a name, and value. The row also contains a Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture. text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the Classes that don't support this are serialized and stored with the
mimetype set. mimetype set.
The mimetype is used for serialized objects, and tells the The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly: extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below. read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64 mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64 mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64 mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata"> <xsd:element name="metadata">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" /> <xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" /> <xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" /> <xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" /> <xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" /> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="assembly"> <xsd:element name="assembly">
<xsd:complexType> <xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" /> <xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" /> <xsd:attribute name="name" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="data"> <xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" /> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> <xsd:element name="resheader">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" /> <xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:choice> </xsd:choice>
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:schema> </xsd:schema>
<resheader name="resmimetype"> <resheader name="resmimetype">
<value>text/microsoft-resx</value> <value>text/microsoft-resx</value>
</resheader> </resheader>
<resheader name="version"> <resheader name="version">
<value>2.0</value> <value>2.0</value>
</resheader> </resheader>
<resheader name="reader"> <resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="richTextBox1.Text" xml:space="preserve"> <data name="richTextBox1.Text" xml:space="preserve">
<value>- Smash Forge Devs (SMG, Ploaj, jam1garner, smb123w64gb, etc) for some code ported over. Specifically animation stuff and some rendering. <value>- Smash Forge Devs (SMG, Ploaj, jam1garner, smb123w64gb, etc) for some code ported over. Specifically animation stuff and some rendering.
- Assimp devs for their massive asset library! - Assimp devs for their massive asset library!
- Wexos (helped figure out a few things, ie format list to assign each attribute) - Wexos (helped figure out a few things, ie format list to assign each attribute)
- JuPaHe64 for the base 3D renderer and timeline control. - JuPaHe64 for the base 3D renderer and timeline control.
- Every File Explorer devs (Gericom) for Yaz0 stuff - Every File Explorer devs (Gericom) for Yaz0 stuff
- Exelix for Byaml, Sarc and KCL library - Exelix for Byaml, Sarc and KCL library
- Syroot for helpful IO extensions and libraies - Syroot for helpful IO extensions and libraies
- GDK Chan for some DDS decode methods - GDK Chan for some DDS decode methods
- AboodXD for BNTX texture swizzling - AboodXD for BNTX texture swizzling
- MelonSpeedruns for logo.</value> - MelonSpeedruns for logo.
</data> - Skyth and Radfordhound for PAC documentation</value>
</data>
</root> </root>