<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://zeldamods.org/w_botw/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nitram</id>
	<title>ZeldaMods (Breath of the Wild) - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://zeldamods.org/w_botw/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nitram"/>
	<link rel="alternate" type="text/html" href="https://zeldamods.org/wiki/Special:Contributions/Nitram"/>
	<updated>2026-06-02T03:07:28Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://zeldamods.org/w_botw/index.php?title=PTCL&amp;diff=11084</id>
		<title>PTCL</title>
		<link rel="alternate" type="text/html" href="https://zeldamods.org/w_botw/index.php?title=PTCL&amp;diff=11084"/>
		<updated>2022-01-26T13:15:22Z</updated>

		<summary type="html">&lt;p&gt;Nitram: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;PTCL&amp;lt;/code&amp;gt;(a.k.a &amp;lt;code&amp;gt;EFTB&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;VFXB&amp;lt;/code&amp;gt;) files define certain graphical effects of objects such as emissions, particles, and shaders. They use the &amp;lt;code&amp;gt;.esetlist&amp;lt;/code&amp;gt; extension, but differ between platforms in what structures it uses for different types of data, aside for &amp;lt;code&amp;gt;ESTA&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PRMA&amp;lt;/code&amp;gt;, which are the same{{check}} on both.&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PTCL File Layout ==&lt;br /&gt;
PTCL files are made up of a header and four structures that are aligned to 16 bytes.&lt;br /&gt;
* Emitter Set Array&lt;br /&gt;
* Texture Array / Cafe Resource&lt;br /&gt;
* PRM{{check}} Array&lt;br /&gt;
* Shader Array / Binary Shader{{check}}&lt;br /&gt;
&lt;br /&gt;
Each array serves as a root node in a tree structure.&lt;br /&gt;
&lt;br /&gt;
== PTCL Header ==&lt;br /&gt;
The &amp;lt;code&amp;gt;EFTB&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;VFXB&amp;lt;/code&amp;gt; headers both contain different data, and as such have different size (0x30 and 0x40 respectively). &lt;br /&gt;
&lt;br /&gt;
=== EFTB Header Structure ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size&lt;br /&gt;
!Data Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| file signature (magic) (&amp;lt;code&amp;gt;45 46 54 42&amp;lt;/code&amp;gt; or &amp;quot;EFTB&amp;quot; in ASCII)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| VFX API Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| Unknown (&amp;lt;code&amp;gt;47 61 6d 65&amp;lt;/code&amp;gt; or &amp;quot;Game&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== VFXB Header Structure ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size&lt;br /&gt;
!Data Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| File signature (magic) (&amp;lt;code&amp;gt;56 46 58 42&amp;lt;/code&amp;gt; or &amp;quot;VFXB&amp;quot; in ASCII)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Unknown (&amp;lt;code&amp;gt;20 20 20 20&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Graphics API version&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| VFX API version&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Byte-Order Mark&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| 1&lt;br /&gt;
| Byte&lt;br /&gt;
| Alignment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F&lt;br /&gt;
| 1&lt;br /&gt;
| Byte&lt;br /&gt;
| Target offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Flag&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| First node offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Padding&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| File size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| Game&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 28&lt;br /&gt;
| Byte[28]&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Nodes ==&lt;br /&gt;
Each node in an array&#039;s tree structure is made up of a header and three optional sections.&lt;br /&gt;
* Binary data&lt;br /&gt;
* Attribute nodes{{check}}&lt;br /&gt;
* Child nodes&lt;br /&gt;
&lt;br /&gt;
=== Node Header Structure ===&lt;br /&gt;
Node headers typically have the same 32-byte structure, though some are longer and some calculate certain values differently.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size&lt;br /&gt;
!Data Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Signature (magic)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Node size. Different node types calculate this differently.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the first child node, or &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt; if there are no children&lt;br /&gt;
|-&lt;br /&gt;
| 0x0c&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the next sibling node, or &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt; if there are no more siblings&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the first attribute{{check}}, or &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt; if there are no attributes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the binary data, or the size of the header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Number of child nodes. Shaders&#039; use of this value is unknown.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1e&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Unknown (&amp;lt;code&amp;gt;00 01&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Emitter Sets (ESTA) ===&lt;br /&gt;
The Emitter Set Array (ESTA) contains any number of Emitter Sets (ESET) as child nodes.&lt;br /&gt;
&lt;br /&gt;
==== Emitter Set (ESET) ====&lt;br /&gt;
Emitter sets (ESET) contain 0x60 bytes of data after the header:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size (h)&lt;br /&gt;
!Data Type &lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x40 || String || 0-terminated string representing the name of the emitter set&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || 0x04 || Unsigned Int || Total number of emitters in the set, including all descendant nodes&lt;br /&gt;
|-&lt;br /&gt;
| 0x5a || 0x02 || Unsigned Short || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x5f || 0x01 || Byte || Unknown. Can be &amp;lt;code&amp;gt;0x00&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The rest of the data block is padding.&lt;br /&gt;
&lt;br /&gt;
Emitter sets also contain any number of Emitters (EMTR) as child nodes.&lt;br /&gt;
&lt;br /&gt;
==== Emitter (EMTR) ====&lt;br /&gt;
An Emitter&#039;s (EMTR) data section is aligned to 0x20 bytes and contains the following data after the header:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset (h)&lt;br /&gt;
! Size (h)&lt;br /&gt;
! Data Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x60 || String || Name block, like in ESET&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 &lt;br /&gt;
| 0x18 &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Six Unsigned Ints specifying the sizes of the color arrays&lt;br /&gt;
* Color 0&lt;br /&gt;
* Alpha 0&lt;br /&gt;
* Color 1&lt;br /&gt;
* Alpha 1&lt;br /&gt;
* Scale{{check}}&lt;br /&gt;
* Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 | 0x38 || Byte[56]|| Padding &lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 &lt;br /&gt;
| 0x30 &lt;br /&gt;
| UInt32{{check}} * 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0xE0 || 0x4 || Float || Blink Intensity 1&lt;br /&gt;
|-&lt;br /&gt;
| 0xE4 || 0x4 || Float || Blink Intensity 2&lt;br /&gt;
|-&lt;br /&gt;
| 0xE8 || 0x4 || Float || Blink Duration 1&lt;br /&gt;
|-&lt;br /&gt;
| 0xEC || 0x4 || Float || Blink Duration 2&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 &lt;br /&gt;
| 0x2C0 &lt;br /&gt;
| UInt32{{check}} * 176&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B0 || 0x4 || Float || Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B4 || 0x4 || Float || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B8 || 0x8 || Byte[8] || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C0 || 0x80 || Float[4] * 8 || Color 0 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x440 || 0x80 || Float[4] * 8 || Alpha 0 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C0 || 0x80 || Float[4] * 8 || Color 1 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x540 || 0x80 || Float[4] * 8 || Alpha 1 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C0 &lt;br /&gt;
| 0x40 &lt;br /&gt;
| UInt32{{check}} * 16&lt;br /&gt;
| Unknown array&lt;br /&gt;
|-&lt;br /&gt;
| 0x600 || 0x80 || Float[4] * 8 || Scale{{check}} array (eight sets of four 32-bit floats)&lt;br /&gt;
|-&lt;br /&gt;
| 0x680 &lt;br /&gt;
| 0xD0 &lt;br /&gt;
| UInt32{{check}} * 52&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x750 || 0x10 || Byte[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x760 &lt;br /&gt;
| 0x90 &lt;br /&gt;
| UInt32{{check}} * 36&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F0 || 0x8 || Byte[8] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F8 &lt;br /&gt;
| 0x40 &lt;br /&gt;
| UInt32{{check}} * 16&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x838 || 0x8 || Byte[8] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x840 &lt;br /&gt;
| 0x58 &lt;br /&gt;
| UInt32{{check}} * 22&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x898 || 0x8 || Byte[8] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A0 &lt;br /&gt;
| 0x8 &lt;br /&gt;
| Float{{check}} * 2&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A8 || 0x10 || Byte[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8B8 &lt;br /&gt;
| 0x18 &lt;br /&gt;
| UInt32{{check}} * 6&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8D0 || 0x10 || Byte[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E0 &lt;br /&gt;
| 0x18 &lt;br /&gt;
| UInt32{{check}} * 6&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8F8 || 0x18 || Byte[24] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x910 &lt;br /&gt;
| 0x8 &lt;br /&gt;
| UInt32{{check}} * 2&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x918 || 0x4 || Byte[4] || Padding? Sometimes &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x91C || 0x8 || UInt64 || Unknown. Sometimes &amp;lt;code&amp;gt;FF FF FF FF FF FF FF FF&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x924 || 0x4 || Byte[4] || Padding? Sometimes &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x928 &lt;br /&gt;
| 0x8 &lt;br /&gt;
| UInt32{{check}} * 2&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x930 || 0x8 || UInt64 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x938 &lt;br /&gt;
| 0x10 &lt;br /&gt;
| UInt32{{check}} * 4&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x948 || 0xA || String || Usually is &amp;lt;code&amp;gt;ATEST_ONLY&amp;lt;/code&amp;gt; when used. Can be null.&lt;br /&gt;
|-&lt;br /&gt;
| 0x952 || 0x2 || Byte[2] || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x954 &lt;br /&gt;
| 0x48 &lt;br /&gt;
| UInt32{{check}} * 48&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x99C || 0xC || Byte[12] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A8 || 0x10 || Float[4] || Constant Color 0 if Color 0 array is empty&lt;br /&gt;
|-&lt;br /&gt;
| 0x9B8 || 0x10 || Float[4] || Constant Color 1 if Color 1 array is empty&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C8 &lt;br /&gt;
| 0x30 &lt;br /&gt;
| UInt32{{check}} * 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x9F8 &lt;br /&gt;
| 0x60 &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Three Sample Info blocks, consisting of the following structure:&lt;br /&gt;
* 0x00 - UInt32 - Enabled flag - Set if 0, unset if -1&lt;br /&gt;
* 0x04 - UInt32 - Texture ID&lt;br /&gt;
* 0x08 - Byte - 1st flag - Can be 0, 1 or 2&lt;br /&gt;
* 0x09 - Byte - 2nd flag - Can be 0, 1 or 2&lt;br /&gt;
* 0x0A - Byte - Padding&lt;br /&gt;
* 0x0B - Byte - 3rd flag - Can be either 0 or 1&lt;br /&gt;
* 0x0C - Float - Unknown - Can be 2.0. 6.0 or 15.99&lt;br /&gt;
* 0x10 - Byte[4] - Padding&lt;br /&gt;
* 0x14 - Byte - 4th flag - Can be either 0 or 1&lt;br /&gt;
* 0x15 - Byte - 5th flag - Can be either 0 or 1&lt;br /&gt;
* 0x16 - Byte - 6th flag - Can be either 0 or 1&lt;br /&gt;
* 0x17 - Byte - 7th flag - Can be either 0 or 1&lt;br /&gt;
* 0x18 - Byte - 8th flag - Can be either 0 or 1&lt;br /&gt;
* 0x19 - Byte[7] - Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xA58 || 0x30 || Byte[48] || Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Emitters can also have any number of attribute nodes (e.g. CADP, CSDP, FCSF), the purpose of which is currently unknown, as well as child emitter nodes.&lt;br /&gt;
&lt;br /&gt;
===== Attributes =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CADP&#039;&#039;&#039; causes an emitter to cast light on surrounding surfaces. It contains the following data:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset (h)&lt;br /&gt;
! Size&lt;br /&gt;
! Data Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x04 || Bitmask || Flag determining the light&#039;s shape&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || (variable) || Float || A variable number of floats whose purpose is unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Shape flag:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Flag&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Sphere&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Rod (e.g. swords)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || Changes the orientation of Rod&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Adds a dead zone to the center of Rod&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Wide cone&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Square&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || Point&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || Widens the Point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Textures (TEXA) ===&lt;br /&gt;
The Texture Array (TEXA) contains any number of Textures (TEXR), with each texture containing a single GX2 Texture Block (GX2B). The TEXA tree is flattened such that all TEXR nodes appear first, followed by all of their child GX2B nodes.&lt;br /&gt;
&lt;br /&gt;
=== (PRMA) ===&lt;br /&gt;
The PRMA{{check}} contains any number of PRIM{{check}} nodes.&lt;br /&gt;
&lt;br /&gt;
=== Shaders (SHDA) ===&lt;br /&gt;
The Shader Array (SHDA) contains a single{{check}} GX2 Shader Block (SHDB).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Nitram</name></author>
	</entry>
	<entry>
		<id>https://zeldamods.org/w_botw/index.php?title=Esetlist&amp;diff=11083</id>
		<title>Esetlist</title>
		<link rel="alternate" type="text/html" href="https://zeldamods.org/w_botw/index.php?title=Esetlist&amp;diff=11083"/>
		<updated>2022-01-26T03:03:08Z</updated>

		<summary type="html">&lt;p&gt;Nitram: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{stub}}&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;&#039;&#039;&#039;esetlist&#039;&#039;&#039; files are [[PTCL]] files.&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
[[Category:File extensions]]&lt;/div&gt;</summary>
		<author><name>Nitram</name></author>
	</entry>
	<entry>
		<id>https://zeldamods.org/w_botw/index.php?title=PTCL&amp;diff=11082</id>
		<title>PTCL</title>
		<link rel="alternate" type="text/html" href="https://zeldamods.org/w_botw/index.php?title=PTCL&amp;diff=11082"/>
		<updated>2022-01-26T03:02:42Z</updated>

		<summary type="html">&lt;p&gt;Nitram: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;PTCL&amp;lt;/code&amp;gt;(a.k.a &amp;lt;code&amp;gt;EFTB&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;VFXB&amp;lt;/code&amp;gt;) files define certain graphical effects of objects such as emissions, particles, and shaders. They use the &amp;lt;code&amp;gt;.esetlist&amp;lt;/code&amp;gt; extension, but differ between platforms in what structures it uses for different types of data, aside for &amp;lt;code&amp;gt;ESTA&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PRMA&amp;lt;/code&amp;gt;, which arr the same{{check}} on both.&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PTCL File Layout ==&lt;br /&gt;
PTCL files are made up of a header and four structures that are aligned to 16 bytes.&lt;br /&gt;
* Emitter Set Array&lt;br /&gt;
* Texture Array / Cafe Resource&lt;br /&gt;
* PRM{{check}} Array&lt;br /&gt;
* Shader Array / Binary Shader&lt;br /&gt;
&lt;br /&gt;
Each array serves as a root node in a tree structure.&lt;br /&gt;
&lt;br /&gt;
== PTCL Header ==&lt;br /&gt;
The &amp;lt;code&amp;gt;EFTB&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;VFXB&amp;lt;/code&amp;gt; headers both contain different data, and as such have different size (0x30 and 0x40 respectively). &lt;br /&gt;
&lt;br /&gt;
=== EFTB Header Structure ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size&lt;br /&gt;
!Data Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| file signature (magic) (&amp;lt;code&amp;gt;45 46 54 42&amp;lt;/code&amp;gt; or &amp;quot;EFTB&amp;quot; in ASCII)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| VFX API Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| Unknown (&amp;lt;code&amp;gt;47 61 6d 65&amp;lt;/code&amp;gt; or &amp;quot;Game&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== VFXB Header Structure ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size&lt;br /&gt;
!Data Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| File signature (magic) (&amp;lt;code&amp;gt;56 46 58 42&amp;lt;/code&amp;gt; or &amp;quot;VFXB&amp;quot; in ASCII)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Unknown (&amp;lt;code&amp;gt;20 20 20 20&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Graphics API version&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| VFX API version&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Byte-Order Mark&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| 1&lt;br /&gt;
| Byte&lt;br /&gt;
| Alignment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F&lt;br /&gt;
| 1&lt;br /&gt;
| Byte&lt;br /&gt;
| Target offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Flag&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| First node offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Padding&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| File size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| Game&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 28&lt;br /&gt;
| Byte[28]&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Nodes ==&lt;br /&gt;
Each node in an array&#039;s tree structure is made up of a header and three optional sections.&lt;br /&gt;
* Binary data&lt;br /&gt;
* Attribute nodes{{check}}&lt;br /&gt;
* Child nodes&lt;br /&gt;
&lt;br /&gt;
=== Node Header Structure ===&lt;br /&gt;
Node headers typically have the same 32-byte structure, though some are longer and some calculate certain values differently.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size&lt;br /&gt;
!Data Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Signature (magic)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Node size. Different node types calculate this differently.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the first child node, or &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt; if there are no children&lt;br /&gt;
|-&lt;br /&gt;
| 0x0c&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the next sibling node, or &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt; if there are no more siblings&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the first attribute{{check}}, or &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt; if there are no attributes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the binary data, or the size of the header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Number of child nodes. Shaders&#039; use of this value is unknown.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1e&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Unknown (&amp;lt;code&amp;gt;00 01&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Emitter Sets (ESTA) ===&lt;br /&gt;
The Emitter Set Array (ESTA) contains any number of Emitter Sets (ESET) as child nodes.&lt;br /&gt;
&lt;br /&gt;
==== Emitter Set (ESET) ====&lt;br /&gt;
Emitter sets (ESET) contain 0x60 bytes of data after the header:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size (h)&lt;br /&gt;
!Data Type &lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x40 || String || 0-terminated string representing the name of the emitter set&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || 0x04 || Unsigned Int || Total number of emitters in the set, including all descendant nodes&lt;br /&gt;
|-&lt;br /&gt;
| 0x5a || 0x02 || Unsigned Short || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x5f || 0x01 || Byte || Unknown. Can be &amp;lt;code&amp;gt;0x00&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The rest of the data block is padding.&lt;br /&gt;
&lt;br /&gt;
Emitter sets also contain any number of Emitters (EMTR) as child nodes.&lt;br /&gt;
&lt;br /&gt;
==== Emitter (EMTR) ====&lt;br /&gt;
An Emitter&#039;s (EMTR) data section is aligned to 0x20 bytes and contains the following data after the header:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset (h)&lt;br /&gt;
! Size (h)&lt;br /&gt;
! Data Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x60 || String || Name block, like in ESET&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 &lt;br /&gt;
| 0x18 &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Six Unsigned Ints specifying the sizes of the color arrays&lt;br /&gt;
* Color 0&lt;br /&gt;
* Alpha 0&lt;br /&gt;
* Color 1&lt;br /&gt;
* Alpha 1&lt;br /&gt;
* Scale{{check}}&lt;br /&gt;
* Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 | 0x38 || Byte[56]|| Padding &lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || 0x30 || UInt32 or Float[12] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0xE0 || 0x4 || Float || Blink Intensity 1&lt;br /&gt;
|-&lt;br /&gt;
| 0xE4 || 0x4 || Float || Blink Intensity 2&lt;br /&gt;
|-&lt;br /&gt;
| 0xE8 || 0x4 || Float || Blink Duration 1&lt;br /&gt;
|-&lt;br /&gt;
| 0xEC || 0x4 || Float || Blink Duration 2&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 || 0x2C0 || UInt32 or Float[176] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B0 || 0x4 || UInt32 or Float || Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B4 || 0x4 || UInt32 or Float || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B8 || 0x8 || Byte[8] || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C0 || 0x80 || Float[4] * 8 || Color 0 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x440 || 0x80 || Float[4] * 8 || Alpha 0 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C0 || 0x80 || Float[4] * 8 || Color 1 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x540 || 0x80 || Float[4] * 8 || Alpha 1 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C0 || 0x40 || UInt32 or Float[16] || Unknown array{{check}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x600 || 0x80 || Float[4] * 8 || Scale{{check}} array (eight sets of four 32-bit floats)&lt;br /&gt;
|-&lt;br /&gt;
| 0x680 || 0xD0 || UInt32 or Float[52] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x750 || 0x10 || Byte[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x760 || 0x90 || UInt32 or Float[36] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F0 || 0x8 || Byte[8] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F8 || 0x40 || UInt32 or Float[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x838 || 0x8 || Byte[8] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x840 || 0x58 || UInt32 or Float[22] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x898 || 0x8 || Byte[8] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A0 || 0x8 || UInt32 or Float[2] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A8 || 0x10 || Byte[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8B8 || 0x18 || UInt32 or Float[6] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8D0 || 0x10 || Byte[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E0 || 0x18 || UInt32 or Float[6] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8F8 || 0x18 || Byte[24] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x910 || 0x8 || UInt32 or Float[2] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x918 || 0x4 || Byte[4] || Padding? Sometimes &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x91C || 0x8 || UInt64 || Unknown. Sometimes &amp;lt;code&amp;gt;FF FF FF FF FF FF FF FF&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x924 || 0x4 || Byte[4] || Padding? Sometimes &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x928 || 0x8 || UInt32 or Float[2] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x930 || 0x8 || UInt64 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x938 || 0x10 || UInt32 or Float[4] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x948 || 0xA || String || Usually is &amp;lt;code&amp;gt;ATEST_ONLY&amp;lt;/code&amp;gt; when used. Can be null.&lt;br /&gt;
|-&lt;br /&gt;
| 0x952 || 0x2 || Byte[2] || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x954 || 0x48 || UInt32 or Float[48] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x99C || 0xC || Byte[12] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A8 || 0x10 || Float[4] || Constant Color 0 if Color 0 array is empty&lt;br /&gt;
|-&lt;br /&gt;
| 0x9B8 || 0x10 || Float[4] || Constant Color 1 if Color 1 array is empty&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C8 || 0x30 || UInt32[12] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x9F8 &lt;br /&gt;
| 0x60 &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Three Sample Info blocks, consisting of the following structure:&lt;br /&gt;
* 0x00 - UInt32 - Enabled flag - Set if 0, unset if -1&lt;br /&gt;
* 0x04 - UInt32 - Texture ID&lt;br /&gt;
* 0x08 - Byte - 1st flag - Can be 0, 1 or 2&lt;br /&gt;
* 0x09 - Byte - 2nd flag - Can be 0, 1 or 2&lt;br /&gt;
* 0x0A - Byte - Padding&lt;br /&gt;
* 0x0B - Byte - 3rd flag - Can be either 0 or 1&lt;br /&gt;
* 0x0C - Float - Unknown - Can be 2.0. 6.0 or 15.99&lt;br /&gt;
* 0x10 - Byte[4] - Padding&lt;br /&gt;
* 0x14 - Byte - 4th flag - Can be either 0 or 1&lt;br /&gt;
* 0x15 - Byte - 5th flag - Can be either 0 or 1&lt;br /&gt;
* 0x16 - Byte - 6th flag - Can be either 0 or 1&lt;br /&gt;
* 0x17 - Byte - 7th flag - Can be either 0 or 1&lt;br /&gt;
* 0x18 - Byte - 8th flag - Can be either 0 or 1&lt;br /&gt;
* 0x19 - Byte[7] - Padding&amp;lt;/p&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xA58 || 0x30 || Byte[48] || Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Emitters can also have any number of attribute nodes (e.g. CADP, CSDP, FCSF), the purpose of which is currently unknown, as well as child emitter nodes.&lt;br /&gt;
&lt;br /&gt;
===== Attributes =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CADP&#039;&#039;&#039; causes an emitter to cast light on surrounding surfaces. It contains the following data:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset (h)&lt;br /&gt;
! Size&lt;br /&gt;
! Data Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x04 || Bitmask || Flag determining the light&#039;s shape&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || (variable) || Float || A variable number of floats whose purpose is unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Shape flag:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Flag&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Sphere&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Rod (e.g. swords)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || Changes the orientation of Rod&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Adds a dead zone to the center of Rod&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Wide cone&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Square&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || Point&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || Widens the Point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Textures (TEXA) ===&lt;br /&gt;
The Texture Array (TEXA) contains any number of Textures (TEXR), with each texture containing a single GX2 Texture Block (GX2B). The TEXA tree is flattened such that all TEXR nodes appear first, followed by all of their child GX2B nodes.&lt;br /&gt;
&lt;br /&gt;
=== (PRMA) ===&lt;br /&gt;
The PRMA{{check}} contains any number of PRIM{{check}} nodes.&lt;br /&gt;
&lt;br /&gt;
=== Shaders (SHDA) ===&lt;br /&gt;
The Shader Array (SHDA) contains a single{{check}} GX2 Shader Block (SHDB).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Nitram</name></author>
	</entry>
	<entry>
		<id>https://zeldamods.org/w_botw/index.php?title=PTCL&amp;diff=11081</id>
		<title>PTCL</title>
		<link rel="alternate" type="text/html" href="https://zeldamods.org/w_botw/index.php?title=PTCL&amp;diff=11081"/>
		<updated>2022-01-26T03:02:14Z</updated>

		<summary type="html">&lt;p&gt;Nitram: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;PTCL&amp;lt;/code&amp;gt;(a.k.a &amp;lt;code&amp;gt;EFTB&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;VFXB&amp;lt;/code&amp;gt;) files define certain graphical effects of objects such as emissions, particles, and shaders. They use the &amp;lt;code&amp;gt;.esetlist&amp;lt;/code&amp;gt; extension, but differ between platforms in what structures it uses for different types of data, aside for &amp;lt;code&amp;gt;ESTA&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PRMA&amp;lt;/code&amp;gt;, which is the same{{check}} on both.&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PTCL File Layout ==&lt;br /&gt;
PTCL files are made up of a header and four structures that are aligned to 16 bytes.&lt;br /&gt;
* Emitter Set Array&lt;br /&gt;
* Texture Array / Cafe Resource&lt;br /&gt;
* PRM{{check}} Array&lt;br /&gt;
* Shader Array / Binary Shader&lt;br /&gt;
&lt;br /&gt;
Each array serves as a root node in a tree structure.&lt;br /&gt;
&lt;br /&gt;
== PTCL Header ==&lt;br /&gt;
The &amp;lt;code&amp;gt;EFTB&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;VFXB&amp;lt;/code&amp;gt; headers both contain different data, and as such have different size (0x30 and 0x40 respectively). &lt;br /&gt;
&lt;br /&gt;
=== EFTB Header Structure ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size&lt;br /&gt;
!Data Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| file signature (magic) (&amp;lt;code&amp;gt;45 46 54 42&amp;lt;/code&amp;gt; or &amp;quot;EFTB&amp;quot; in ASCII)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| VFX API Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| Unknown (&amp;lt;code&amp;gt;47 61 6d 65&amp;lt;/code&amp;gt; or &amp;quot;Game&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== VFXB Header Structure ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size&lt;br /&gt;
!Data Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| File signature (magic) (&amp;lt;code&amp;gt;56 46 58 42&amp;lt;/code&amp;gt; or &amp;quot;VFXB&amp;quot; in ASCII)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Unknown (&amp;lt;code&amp;gt;20 20 20 20&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Graphics API version&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| VFX API version&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Byte-Order Mark&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| 1&lt;br /&gt;
| Byte&lt;br /&gt;
| Alignment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F&lt;br /&gt;
| 1&lt;br /&gt;
| Byte&lt;br /&gt;
| Target offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Flag&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| First node offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Padding&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| File size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| Game&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 28&lt;br /&gt;
| Byte[28]&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Nodes ==&lt;br /&gt;
Each node in an array&#039;s tree structure is made up of a header and three optional sections.&lt;br /&gt;
* Binary data&lt;br /&gt;
* Attribute nodes{{check}}&lt;br /&gt;
* Child nodes&lt;br /&gt;
&lt;br /&gt;
=== Node Header Structure ===&lt;br /&gt;
Node headers typically have the same 32-byte structure, though some are longer and some calculate certain values differently.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size&lt;br /&gt;
!Data Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Signature (magic)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Node size. Different node types calculate this differently.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the first child node, or &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt; if there are no children&lt;br /&gt;
|-&lt;br /&gt;
| 0x0c&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the next sibling node, or &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt; if there are no more siblings&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the first attribute{{check}}, or &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt; if there are no attributes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the binary data, or the size of the header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Number of child nodes. Shaders&#039; use of this value is unknown.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1e&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Unknown (&amp;lt;code&amp;gt;00 01&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Emitter Sets (ESTA) ===&lt;br /&gt;
The Emitter Set Array (ESTA) contains any number of Emitter Sets (ESET) as child nodes.&lt;br /&gt;
&lt;br /&gt;
==== Emitter Set (ESET) ====&lt;br /&gt;
Emitter sets (ESET) contain 0x60 bytes of data after the header:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size (h)&lt;br /&gt;
!Data Type &lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x40 || String || 0-terminated string representing the name of the emitter set&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || 0x04 || Unsigned Int || Total number of emitters in the set, including all descendant nodes&lt;br /&gt;
|-&lt;br /&gt;
| 0x5a || 0x02 || Unsigned Short || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x5f || 0x01 || Byte || Unknown. Can be &amp;lt;code&amp;gt;0x00&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The rest of the data block is padding.&lt;br /&gt;
&lt;br /&gt;
Emitter sets also contain any number of Emitters (EMTR) as child nodes.&lt;br /&gt;
&lt;br /&gt;
==== Emitter (EMTR) ====&lt;br /&gt;
An Emitter&#039;s (EMTR) data section is aligned to 0x20 bytes and contains the following data after the header:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset (h)&lt;br /&gt;
! Size (h)&lt;br /&gt;
! Data Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x60 || String || Name block, like in ESET&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 &lt;br /&gt;
| 0x18 &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Six Unsigned Ints specifying the sizes of the color arrays&lt;br /&gt;
* Color 0&lt;br /&gt;
* Alpha 0&lt;br /&gt;
* Color 1&lt;br /&gt;
* Alpha 1&lt;br /&gt;
* Scale{{check}}&lt;br /&gt;
* Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 | 0x38 || Byte[56]|| Padding &lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || 0x30 || UInt32 or Float[12] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0xE0 || 0x4 || Float || Blink Intensity 1&lt;br /&gt;
|-&lt;br /&gt;
| 0xE4 || 0x4 || Float || Blink Intensity 2&lt;br /&gt;
|-&lt;br /&gt;
| 0xE8 || 0x4 || Float || Blink Duration 1&lt;br /&gt;
|-&lt;br /&gt;
| 0xEC || 0x4 || Float || Blink Duration 2&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 || 0x2C0 || UInt32 or Float[176] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B0 || 0x4 || UInt32 or Float || Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B4 || 0x4 || UInt32 or Float || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B8 || 0x8 || Byte[8] || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C0 || 0x80 || Float[4] * 8 || Color 0 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x440 || 0x80 || Float[4] * 8 || Alpha 0 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C0 || 0x80 || Float[4] * 8 || Color 1 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x540 || 0x80 || Float[4] * 8 || Alpha 1 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C0 || 0x40 || UInt32 or Float[16] || Unknown array{{check}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x600 || 0x80 || Float[4] * 8 || Scale{{check}} array (eight sets of four 32-bit floats)&lt;br /&gt;
|-&lt;br /&gt;
| 0x680 || 0xD0 || UInt32 or Float[52] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x750 || 0x10 || Byte[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x760 || 0x90 || UInt32 or Float[36] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F0 || 0x8 || Byte[8] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F8 || 0x40 || UInt32 or Float[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x838 || 0x8 || Byte[8] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x840 || 0x58 || UInt32 or Float[22] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x898 || 0x8 || Byte[8] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A0 || 0x8 || UInt32 or Float[2] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A8 || 0x10 || Byte[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8B8 || 0x18 || UInt32 or Float[6] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8D0 || 0x10 || Byte[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E0 || 0x18 || UInt32 or Float[6] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8F8 || 0x18 || Byte[24] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x910 || 0x8 || UInt32 or Float[2] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x918 || 0x4 || Byte[4] || Padding? Sometimes &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x91C || 0x8 || UInt64 || Unknown. Sometimes &amp;lt;code&amp;gt;FF FF FF FF FF FF FF FF&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x924 || 0x4 || Byte[4] || Padding? Sometimes &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x928 || 0x8 || UInt32 or Float[2] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x930 || 0x8 || UInt64 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x938 || 0x10 || UInt32 or Float[4] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x948 || 0xA || String || Usually is &amp;lt;code&amp;gt;ATEST_ONLY&amp;lt;/code&amp;gt; when used. Can be null.&lt;br /&gt;
|-&lt;br /&gt;
| 0x952 || 0x2 || Byte[2] || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x954 || 0x48 || UInt32 or Float[48] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x99C || 0xC || Byte[12] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A8 || 0x10 || Float[4] || Constant Color 0 if Color 0 array is empty&lt;br /&gt;
|-&lt;br /&gt;
| 0x9B8 || 0x10 || Float[4] || Constant Color 1 if Color 1 array is empty&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C8 || 0x30 || UInt32[12] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x9F8 &lt;br /&gt;
| 0x60 &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Three Sample Info blocks, consisting of the following structure:&lt;br /&gt;
* 0x00 - UInt32 - Enabled flag - Set if 0, unset if -1&lt;br /&gt;
* 0x04 - UInt32 - Texture ID&lt;br /&gt;
* 0x08 - Byte - 1st flag - Can be 0, 1 or 2&lt;br /&gt;
* 0x09 - Byte - 2nd flag - Can be 0, 1 or 2&lt;br /&gt;
* 0x0A - Byte - Padding&lt;br /&gt;
* 0x0B - Byte - 3rd flag - Can be either 0 or 1&lt;br /&gt;
* 0x0C - Float - Unknown - Can be 2.0. 6.0 or 15.99&lt;br /&gt;
* 0x10 - Byte[4] - Padding&lt;br /&gt;
* 0x14 - Byte - 4th flag - Can be either 0 or 1&lt;br /&gt;
* 0x15 - Byte - 5th flag - Can be either 0 or 1&lt;br /&gt;
* 0x16 - Byte - 6th flag - Can be either 0 or 1&lt;br /&gt;
* 0x17 - Byte - 7th flag - Can be either 0 or 1&lt;br /&gt;
* 0x18 - Byte - 8th flag - Can be either 0 or 1&lt;br /&gt;
* 0x19 - Byte[7] - Padding&amp;lt;/p&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xA58 || 0x30 || Byte[48] || Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Emitters can also have any number of attribute nodes (e.g. CADP, CSDP, FCSF), the purpose of which is currently unknown, as well as child emitter nodes.&lt;br /&gt;
&lt;br /&gt;
===== Attributes =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CADP&#039;&#039;&#039; causes an emitter to cast light on surrounding surfaces. It contains the following data:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset (h)&lt;br /&gt;
! Size&lt;br /&gt;
! Data Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x04 || Bitmask || Flag determining the light&#039;s shape&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || (variable) || Float || A variable number of floats whose purpose is unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Shape flag:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Flag&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Sphere&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Rod (e.g. swords)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || Changes the orientation of Rod&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Adds a dead zone to the center of Rod&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Wide cone&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Square&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || Point&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || Widens the Point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Textures (TEXA) ===&lt;br /&gt;
The Texture Array (TEXA) contains any number of Textures (TEXR), with each texture containing a single GX2 Texture Block (GX2B). The TEXA tree is flattened such that all TEXR nodes appear first, followed by all of their child GX2B nodes.&lt;br /&gt;
&lt;br /&gt;
=== (PRMA) ===&lt;br /&gt;
The PRMA{{check}} contains any number of PRIM{{check}} nodes.&lt;br /&gt;
&lt;br /&gt;
=== Shaders (SHDA) ===&lt;br /&gt;
The Shader Array (SHDA) contains a single{{check}} GX2 Shader Block (SHDB).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Nitram</name></author>
	</entry>
	<entry>
		<id>https://zeldamods.org/w_botw/index.php?title=Help:Porting_mods&amp;diff=11080</id>
		<title>Help:Porting mods</title>
		<link rel="alternate" type="text/html" href="https://zeldamods.org/w_botw/index.php?title=Help:Porting_mods&amp;diff=11080"/>
		<updated>2022-01-26T02:02:44Z</updated>

		<summary type="html">&lt;p&gt;Nitram: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
Many of the files of Breath of the Wild can not be used as is between platforms, and need some sort of conversion to make them compatible.&lt;br /&gt;
&lt;br /&gt;
Note that if you want to port a WiiU mod to Switch, you can use [https://gamebanana.com/tools/7836 this tool] for a more automated process. If it errors out, you can come back to this guide and follow the steps for your desired files.&lt;br /&gt;
&lt;br /&gt;
== Camera, Model and UI ==&lt;br /&gt;
All these files fall under the &amp;lt;code&amp;gt;FRES&amp;lt;/code&amp;gt; format, which can be edited using [https://github.com/KillzXGaming/Switch-Toolbox Switch Toolbox](referred to as STB from now on). Preferably, you will be modifying the same file that was used to make your original mod, but creating a new file from scratch can sometimes work when applicable.&lt;br /&gt;
&lt;br /&gt;
=== Importing your files ===&lt;br /&gt;
Once you open STB, you&#039;ll be greeted with an empty workspace, along with drop-down menus labeled &#039;&#039;&#039;File&#039;&#039;&#039;, &#039;&#039;&#039;Edit&#039;&#039;&#039;(greyed out), &#039;&#039;&#039;Tools&#039;&#039;&#039;, &#039;&#039;&#039;Experimental&#039;&#039;&#039;, &#039;&#039;&#039;Windows&#039;&#039;&#039;, &#039;&#039;&#039;Settings&#039;&#039;&#039;, &#039;&#039;&#039;Console&#039;&#039;&#039; and &#039;&#039;&#039;Help&#039;&#039;&#039;.&lt;br /&gt;
[[File:Screenshot from 2022-01-05 09-44-18.png|thumb|An empty workspace, shown when opening STB]]&lt;br /&gt;
From the &#039;&#039;&#039;File&#039;&#039;&#039; drop-down menu, use either &#039;&#039;Open&#039;&#039; for opening a single file, or &#039;&#039;Open (folder)&#039;&#039; if you want to open all files within a folder. The following process differs from file to file, so make sure to follow the corresponding section.&lt;br /&gt;
====Animations====&lt;br /&gt;
Animations have 9 different types:&lt;br /&gt;
* Skeletal Animation&lt;br /&gt;
* Shader Parameter Animation&lt;br /&gt;
* Color Animation&lt;br /&gt;
* Texture SRT Animation&lt;br /&gt;
* Texture Pattern Animation&lt;br /&gt;
* Bone Visibility Animation&lt;br /&gt;
* Material Visibility Animation&lt;br /&gt;
* Shape Animation&lt;br /&gt;
* Scene Animation&lt;br /&gt;
Out of all these, Breath of the Wild does not use Shape Animations, so they will be ignored for the purpose of this tutorial. As of the time of writing, only Skeletal, Color, Texture SRT and Texture Pattern animations can be exported from a modded file and reimported into your target platform using STB. All others need to be recreated when needed.&lt;br /&gt;
&lt;br /&gt;
==Effects==&lt;br /&gt;
==Physics==&lt;br /&gt;
==Sound==&lt;br /&gt;
==Others==&lt;br /&gt;
All file types not covered in this guide can be converted using [https://github.com/NiceneNerd/BCML BCML&#039;s] converter without issue.&lt;br /&gt;
&lt;br /&gt;
[[category: Guides]]&lt;/div&gt;</summary>
		<author><name>Nitram</name></author>
	</entry>
	<entry>
		<id>https://zeldamods.org/w_botw/index.php?title=Help:Porting_mods&amp;diff=11079</id>
		<title>Help:Porting mods</title>
		<link rel="alternate" type="text/html" href="https://zeldamods.org/w_botw/index.php?title=Help:Porting_mods&amp;diff=11079"/>
		<updated>2022-01-26T01:58:50Z</updated>

		<summary type="html">&lt;p&gt;Nitram: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Many of the files of Breath of the Wild can not be used as is between platforms, and need some sort of conversion to make them compatible.&lt;br /&gt;
&lt;br /&gt;
Note that if you want to port a WiiU mod to Switch, you can use [https://gamebanana.com/tools/7836 this tool] for a more automated process. If it errors out, you can come back to this guide and follow the steps for your desired files.&lt;br /&gt;
&lt;br /&gt;
== Camera, Model and UI ==&lt;br /&gt;
All these files fall under the &amp;lt;code&amp;gt;FRES&amp;lt;/code&amp;gt; format, which can be edited using [https://github.com/KillzXGaming/Switch-Toolbox Switch Toolbox](referred to as STB from now on). Preferably, you will be modifying the same file that was used to make your original mod, but creating a new file from scratch can sometimes work when applicable.&lt;br /&gt;
&lt;br /&gt;
=== Importing your files ===&lt;br /&gt;
Once you open STB, you&#039;ll be greeted with an empty workspace, along with drop-down menus labeled &#039;&#039;&#039;File&#039;&#039;&#039;, &#039;&#039;&#039;Edit&#039;&#039;&#039;(greyed out), &#039;&#039;&#039;Tools&#039;&#039;&#039;, &#039;&#039;&#039;Experimental&#039;&#039;&#039;, &#039;&#039;&#039;Windows&#039;&#039;&#039;, &#039;&#039;&#039;Settings&#039;&#039;&#039;, &#039;&#039;&#039;Console&#039;&#039;&#039; and &#039;&#039;&#039;Help&#039;&#039;&#039;.&lt;br /&gt;
[[File:Screenshot from 2022-01-05 09-44-18.png|thumb|An empty workspace, shown when opening STB]]&lt;br /&gt;
From the &#039;&#039;&#039;File&#039;&#039;&#039; drop-down menu, use either &#039;&#039;Open&#039;&#039; for opening a single file, or &#039;&#039;Open (folder)&#039;&#039; if you want to open all files within a folder. The following process differs from file to file, so make sure to follow the corresponding section.&lt;br /&gt;
====Animations====&lt;br /&gt;
Animations have 9 different types:&lt;br /&gt;
* Skeletal Animation&lt;br /&gt;
* Shader Parameter Animation&lt;br /&gt;
* Color Animation&lt;br /&gt;
* Texture SRT Animation&lt;br /&gt;
* Texture Pattern Animation&lt;br /&gt;
* Bone Visibility Animation&lt;br /&gt;
* Material Visibility Animation&lt;br /&gt;
* Shape Animation&lt;br /&gt;
* Scene Animation&lt;br /&gt;
Out of all these, Breath of the Wild does not use Shape Animations, so they will be ignored for the purpose of this tutorial. As of the time of writing, only Skeletal, Color, Texture SRT and Texture Pattern animations can be exported from a modded file and reimported into your target platform using STB. All others need to be recreated when needed.&lt;br /&gt;
&lt;br /&gt;
==Effects==&lt;br /&gt;
==Physics==&lt;br /&gt;
==Sound==&lt;br /&gt;
==Others==&lt;br /&gt;
All file types not covered in this guide can be converted using [https://github.com/NiceneNerd/BCML BCML&#039;s] converter without issue.&lt;br /&gt;
&lt;br /&gt;
[[category: Guides]]&lt;/div&gt;</summary>
		<author><name>Nitram</name></author>
	</entry>
	<entry>
		<id>https://zeldamods.org/w_botw/index.php?title=Help:Porting_mods&amp;diff=11078</id>
		<title>Help:Porting mods</title>
		<link rel="alternate" type="text/html" href="https://zeldamods.org/w_botw/index.php?title=Help:Porting_mods&amp;diff=11078"/>
		<updated>2022-01-26T01:57:36Z</updated>

		<summary type="html">&lt;p&gt;Nitram: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Due to the development of BotW starting on WiiU and then being ported to Switch, many of the game&#039;s files are not inter-compatible, meaning some WiiU files will not work on Switch and viceversa. This article covers all tools and ways of using those tools to port mods between platforms.&lt;br /&gt;
&lt;br /&gt;
Note that if you want to port a WiiU mod to Switch, you can use [https://gamebanana.com/tools/7836 this tool] for a more automated process. If it errors out, you can come back to this guide and follow the steps for your desired files.&lt;br /&gt;
&lt;br /&gt;
== Camera, Model and UI ==&lt;br /&gt;
All these files fall under the &amp;lt;code&amp;gt;FRES&amp;lt;/code&amp;gt; format, which can be edited using [https://github.com/KillzXGaming/Switch-Toolbox Switch Toolbox](referred to as STB from now on). Preferably, you will be modifying the same file that was used to make your original mod, but creating a new file from scratch can sometimes work when applicable.&lt;br /&gt;
&lt;br /&gt;
=== Importing your files ===&lt;br /&gt;
Once you open STB, you&#039;ll be greeted with an empty workspace, along with drop-down menus labeled &#039;&#039;&#039;File&#039;&#039;&#039;, &#039;&#039;&#039;Edit&#039;&#039;&#039;(greyed out), &#039;&#039;&#039;Tools&#039;&#039;&#039;, &#039;&#039;&#039;Experimental&#039;&#039;&#039;, &#039;&#039;&#039;Windows&#039;&#039;&#039;, &#039;&#039;&#039;Settings&#039;&#039;&#039;, &#039;&#039;&#039;Console&#039;&#039;&#039; and &#039;&#039;&#039;Help&#039;&#039;&#039;.&lt;br /&gt;
[[File:Screenshot from 2022-01-05 09-44-18.png|thumb|An empty workspace, shown when opening STB]]&lt;br /&gt;
From the &#039;&#039;&#039;File&#039;&#039;&#039; drop-down menu, use either &#039;&#039;Open&#039;&#039; for opening a single file, or &#039;&#039;Open (folder)&#039;&#039; if you want to open all files within a folder. The following process differs from file to file, so make sure to follow the corresponding section.&lt;br /&gt;
====Animations====&lt;br /&gt;
Animations have 9 different types:&lt;br /&gt;
* Skeletal Animation&lt;br /&gt;
* Shader Parameter Animation&lt;br /&gt;
* Color Animation&lt;br /&gt;
* Texture SRT Animation&lt;br /&gt;
* Texture Pattern Animation&lt;br /&gt;
* Bone Visibility Animation&lt;br /&gt;
* Material Visibility Animation&lt;br /&gt;
* Shape Animation&lt;br /&gt;
* Scene Animation&lt;br /&gt;
Out of all these, Breath of the Wild does not use Shape Animations, so they will be ignored for the purpose of this tutorial. As of the time of writing, only Skeletal, Color, Texture SRT and Texture Pattern animations can be exported from a modded file and reimported into your target platform using STB. All others need to be recreated when needed.&lt;br /&gt;
&lt;br /&gt;
==Effects==&lt;br /&gt;
==Physics==&lt;br /&gt;
==Sound==&lt;br /&gt;
==Others==&lt;br /&gt;
All file types not covered in this guide can be converted using [https://github.com/NiceneNerd/BCML BCML&#039;s] converter without issue.&lt;br /&gt;
&lt;br /&gt;
[[category: Guides]]&lt;/div&gt;</summary>
		<author><name>Nitram</name></author>
	</entry>
	<entry>
		<id>https://zeldamods.org/w_botw/index.php?title=PTCL&amp;diff=11077</id>
		<title>PTCL</title>
		<link rel="alternate" type="text/html" href="https://zeldamods.org/w_botw/index.php?title=PTCL&amp;diff=11077"/>
		<updated>2022-01-26T01:56:01Z</updated>

		<summary type="html">&lt;p&gt;Nitram: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;PTCL&amp;lt;/code&amp;gt;(a.k.a &amp;lt;code&amp;gt;EFTB&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;VFXB&amp;lt;/code&amp;gt;) files define certain graphical effects of objects such as emissions, particles, and shaders. They use the &amp;lt;code&amp;gt;.esetlist&amp;lt;/code&amp;gt; extension, but differ between platforms in what structures it uses for different types of data, aside for &amp;lt;code&amp;gt;ESTA&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PRMA&amp;lt;/code&amp;gt;, which is the same{{check}} on both.&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PTCL File Layout ==&lt;br /&gt;
PTCL files are made up of a header and four structures that are aligned to 16 bytes.&lt;br /&gt;
* Emitter Set Array&lt;br /&gt;
* Texture Array / Cafe Resource&lt;br /&gt;
* PRM{{check}} Array&lt;br /&gt;
* Shader Array / Binary Shader&lt;br /&gt;
&lt;br /&gt;
Each array serves as a root node in a tree structure.&lt;br /&gt;
&lt;br /&gt;
== PTCL Header ==&lt;br /&gt;
The &amp;lt;code&amp;gt;EFTB&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;VFXB&amp;lt;/code&amp;gt; headers both contain different data, and as such have different size (0x30 and 0x40 respectively). &lt;br /&gt;
&lt;br /&gt;
=== EFTB Header Structure ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size&lt;br /&gt;
!Data Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| file signature (magic) (&amp;lt;code&amp;gt;45 46 54 42&amp;lt;/code&amp;gt; or &amp;quot;EFTB&amp;quot; in ASCII)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| VFX API Version ()&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| Unknown (&amp;lt;code&amp;gt;47 61 6d 65&amp;lt;/code&amp;gt; or &amp;quot;Game&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== VFXB Header Structure ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size&lt;br /&gt;
!Data Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| File signature (magic) (&amp;lt;code&amp;gt;56 46 58 42&amp;lt;/code&amp;gt; or &amp;quot;VFXB&amp;quot; in ASCII)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Unknown (&amp;lt;code&amp;gt;20 20 20 20&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Graphics API version ()&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| VFX API version&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Byte-Order Mark&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| 1&lt;br /&gt;
| Byte&lt;br /&gt;
| Alignment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F&lt;br /&gt;
| 1&lt;br /&gt;
| Byte&lt;br /&gt;
| Target offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Flag&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| First node offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Padding&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| File size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| Game&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 28&lt;br /&gt;
| Byte[28]&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Nodes ==&lt;br /&gt;
Each node in an array&#039;s tree structure is made up of a header and three optional sections.&lt;br /&gt;
* Binary data&lt;br /&gt;
* Attribute nodes{{check}}&lt;br /&gt;
* Child nodes&lt;br /&gt;
&lt;br /&gt;
=== Node Header Structure ===&lt;br /&gt;
Node headers typically have the same 32-byte structure, though some are longer and some calculate certain values differently.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size&lt;br /&gt;
!Data Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Signature (magic)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Node size. Different node types calculate this differently.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the first child node, or &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt; if there are no children&lt;br /&gt;
|-&lt;br /&gt;
| 0x0c&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the next sibling node, or &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt; if there are no more siblings&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the first attribute{{check}}, or &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt; if there are no attributes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the binary data, or the size of the header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Number of child nodes. Shaders&#039; use of this value is unknown.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1e&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Unknown (&amp;lt;code&amp;gt;00 01&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Emitter Sets (ESTA) ===&lt;br /&gt;
The Emitter Set Array (ESTA) contains any number of Emitter Sets (ESET) as child nodes.&lt;br /&gt;
&lt;br /&gt;
==== Emitter Set (ESET) ====&lt;br /&gt;
Emitter sets (ESET) contain 0x60 bytes of data after the header:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size (h)&lt;br /&gt;
!Data Type &lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x40 || String || 0-terminated string representing the name of the emitter set&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || 0x04 || Unsigned Int || Total number of emitters in the set, including all descendant nodes&lt;br /&gt;
|-&lt;br /&gt;
| 0x5a || 0x02 || Unsigned Short || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x5f || 0x01 || Byte || Unknown. Can be &amp;lt;code&amp;gt;0x00&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The rest of the data block is padding.&lt;br /&gt;
&lt;br /&gt;
Emitter sets also contain any number of Emitters (EMTR) as child nodes.&lt;br /&gt;
&lt;br /&gt;
==== Emitter (EMTR) ====&lt;br /&gt;
An Emitter&#039;s (EMTR) data section is aligned to 0x20 bytes and contains the following data after the header:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset (h)&lt;br /&gt;
! Size (h)&lt;br /&gt;
! Data Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x60 || String || Name block, like in ESET&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 &lt;br /&gt;
| 0x18 &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Six Unsigned Ints specifying the sizes of the color arrays&lt;br /&gt;
* Color 0&lt;br /&gt;
* Alpha 0&lt;br /&gt;
* Color 1&lt;br /&gt;
* Alpha 1&lt;br /&gt;
* Scale{{check}}&lt;br /&gt;
* Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 | 0x38 || Byte[56]|| Padding &lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || 0x30 || UInt32 or Float[12] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0xE0 || 0x4 || Float || Blink Intensity 1&lt;br /&gt;
|-&lt;br /&gt;
| 0xE4 || 0x4 || Float || Blink Intensity 2&lt;br /&gt;
|-&lt;br /&gt;
| 0xE8 || 0x4 || Float || Blink Duration 1&lt;br /&gt;
|-&lt;br /&gt;
| 0xEC || 0x4 || Float || Blink Duration 2&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 || 0x2C0 || UInt32 or Float[176] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B0 || 0x4 || UInt32 or Float || Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B4 || 0x4 || UInt32 or Float || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B8 || 0x8 || Byte[8] || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C0 || 0x80 || Float[4] * 8 || Color 0 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x440 || 0x80 || Float[4] * 8 || Alpha 0 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C0 || 0x80 || Float[4] * 8 || Color 1 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x540 || 0x80 || Float[4] * 8 || Alpha 1 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C0 || 0x40 || UInt32 or Float[16] || Unknown array{{check}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x600 || 0x80 || Float[4] * 8 || Scale{{check}} array (eight sets of four 32-bit floats)&lt;br /&gt;
|-&lt;br /&gt;
| 0x680 || 0xD0 || UInt32 or Float[52] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x750 || 0x10 || Byte[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x760 || 0x90 || UInt32 or Float[36] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F0 || 0x8 || Byte[8] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F8 || 0x40 || UInt32 or Float[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x838 || 0x8 || Byte[8] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x840 || 0x58 || UInt32 or Float[22] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x898 || 0x8 || Byte[8] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A0 || 0x8 || UInt32 or Float[2] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A8 || 0x10 || Byte[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8B8 || 0x18 || UInt32 or Float[6] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8D0 || 0x10 || Byte[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E0 || 0x18 || UInt32 or Float[6] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8F8 || 0x18 || Byte[24] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x910 || 0x8 || UInt32 or Float[2] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x918 || 0x4 || Byte[4] || Padding? Sometimes &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x91C || 0x8 || UInt64 || Unknown. Sometimes &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x924 || 0x4 || Byte[4] || Padding? Sometimes &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x928 || 0x8 || UInt32 or Float[2] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x930 || 0x8 || UInt64 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x938 || 0x10 || UInt32 or Float[4] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x948 || 0xA || String || Usually is &amp;lt;code&amp;gt;ATEST_ONLY&amp;lt;/code&amp;gt; when used. Can be null.&lt;br /&gt;
|-&lt;br /&gt;
| 0x952 || 0x2 || Byte[2] || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x954 || 0x48 || UInt32 or Float[48] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x99C || 0xC || Byte[12] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A8 || 0x10 || Float[4] || Constant Color 0 if Color 0 array is empty&lt;br /&gt;
|-&lt;br /&gt;
| 0x9B8 || 0x10 || Float[4] || Constant Color 1 if Color 1 array is empty&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C8 || 0x30 || UInt32[12] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x9F8 &lt;br /&gt;
| 0x60 &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Three Sample Info blocks, consisting of the following structure:&lt;br /&gt;
* 0x00 - UInt32 - Enabled flag - Set if 0, unset if -1&lt;br /&gt;
* 0x04 - UInt32 - Texture ID&lt;br /&gt;
* 0x08 - Byte - 1st flag - Can be 0, 1 or 2&lt;br /&gt;
* 0x09 - Byte - 2nd flag - Can be 0, 1 or 2&lt;br /&gt;
* 0x0A - Byte - Padding&lt;br /&gt;
* 0x0B - Byte - 3rd flag - Can be either 0 or 1&lt;br /&gt;
* 0x0C - Float - Unknown - Can be 2.0. 6.0 or 15.99&lt;br /&gt;
* 0x10 - Byte[4] - Padding&lt;br /&gt;
* 0x14 - Byte - 4th flag - Can be either 0 or 1&lt;br /&gt;
* 0x15 - Byte - 5th flag - Can be either 0 or 1&lt;br /&gt;
* 0x16 - Byte - 6th flag - Can be either 0 or 1&lt;br /&gt;
* 0x17 - Byte - 7th flag - Can be either 0 or 1&lt;br /&gt;
* 0x18 - Byte - 8th flag - Can be either 0 or 1&lt;br /&gt;
* 0x19 - Byte[7] - Padding&amp;lt;/p&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xA58 || 0x30 || Byte[48] || Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Emitters can also have any number of attribute nodes (e.g. CADP, CSDP, FCSF), the purpose of which is currently unknown, as well as child emitter nodes.&lt;br /&gt;
&lt;br /&gt;
===== Attributes =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CADP&#039;&#039;&#039; causes an emitter to cast light on surrounding surfaces. It contains the following data:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset (h)&lt;br /&gt;
! Size&lt;br /&gt;
! Data Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x04 || Bitmask || Flag determining the light&#039;s shape&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || (variable) || Float || A variable number of floats whose purpose is unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Shape flag:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Flag&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Sphere&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Rod (e.g. swords)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || Changes the orientation of Rod&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Adds a dead zone to the center of Rod&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Wide cone&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Square&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || Point&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || Widens the Point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Textures (TEXA) ===&lt;br /&gt;
The Texture Array (TEXA) contains any number of Textures (TEXR), with each texture containing a single GX2 Texture Block (GX2B). The TEXA tree is flattened such that all TEXR nodes appear first, followed by all of their child GX2B nodes.&lt;br /&gt;
&lt;br /&gt;
=== (PRMA) ===&lt;br /&gt;
The PRMA{{check}} contains any number of PRIM{{check}} nodes.&lt;br /&gt;
&lt;br /&gt;
=== Shaders (SHDA) ===&lt;br /&gt;
The Shader Array (SHDA) contains a single{{check}} GX2 Shader Block (SHDB).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Nitram</name></author>
	</entry>
	<entry>
		<id>https://zeldamods.org/w_botw/index.php?title=PTCL&amp;diff=11076</id>
		<title>PTCL</title>
		<link rel="alternate" type="text/html" href="https://zeldamods.org/w_botw/index.php?title=PTCL&amp;diff=11076"/>
		<updated>2022-01-26T01:53:50Z</updated>

		<summary type="html">&lt;p&gt;Nitram: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;PTCL&amp;lt;/code&amp;gt;(a.k.a &amp;lt;code&amp;gt;EFTB&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;VFXB&amp;lt;/code&amp;gt;) files define certain graphical effects of objects such as emissions, particles, and shaders. They use the &amp;lt;code&amp;gt;.esetlist&amp;lt;/code&amp;gt; extension. The format changes what structures it uses for different types of data between platforms, aside for &amp;lt;code&amp;gt;ESTA&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PRMA&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PTCL File Layout ==&lt;br /&gt;
PTCL files are made up of a header and four structures that are aligned to 16 bytes.&lt;br /&gt;
* Emitter Set Array&lt;br /&gt;
* Texture Array / Cafe Resource&lt;br /&gt;
* PRM{{check}} Array&lt;br /&gt;
* Shader Array / Binary Shader&lt;br /&gt;
&lt;br /&gt;
Each array serves as a root node in a tree structure.&lt;br /&gt;
&lt;br /&gt;
== PTCL Header ==&lt;br /&gt;
The &amp;lt;code&amp;gt;EFTB&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;VFXB&amp;lt;/code&amp;gt; headers both contain different data, and as such have different size (0x30 and 0x40 respectively). &lt;br /&gt;
&lt;br /&gt;
=== EFTB Header Structure ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size&lt;br /&gt;
!Data Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| file signature (magic) (&amp;lt;code&amp;gt;45 46 54 42&amp;lt;/code&amp;gt; or &amp;quot;EFTB&amp;quot; in ASCII)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| VFX API Version ()&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| Unknown (&amp;lt;code&amp;gt;47 61 6d 65&amp;lt;/code&amp;gt; or &amp;quot;Game&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== VFXB Header Structure ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size&lt;br /&gt;
!Data Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| File signature (magic) (&amp;lt;code&amp;gt;56 46 58 42&amp;lt;/code&amp;gt; or &amp;quot;VFXB&amp;quot; in ASCII)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Unknown (&amp;lt;code&amp;gt;20 20 20 20&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Graphics API version ()&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| VFX API version&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Byte-Order Mark&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| 1&lt;br /&gt;
| Byte&lt;br /&gt;
| Alignment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F&lt;br /&gt;
| 1&lt;br /&gt;
| Byte&lt;br /&gt;
| Target offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Flag&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| First node offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Padding&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| File size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| Game&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 28&lt;br /&gt;
| Byte[28]&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Nodes ==&lt;br /&gt;
Each node in an array&#039;s tree structure is made up of a header and three optional sections.&lt;br /&gt;
* Binary data&lt;br /&gt;
* Attribute nodes{{check}}&lt;br /&gt;
* Child nodes&lt;br /&gt;
&lt;br /&gt;
=== Node Header Structure ===&lt;br /&gt;
Node headers typically have the same 32-byte structure, though some are longer and some calculate certain values differently.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size&lt;br /&gt;
!Data Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Signature (magic)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Node size. Different node types calculate this differently.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the first child node, or &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt; if there are no children&lt;br /&gt;
|-&lt;br /&gt;
| 0x0c&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the next sibling node, or &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt; if there are no more siblings&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the first attribute{{check}}, or &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt; if there are no attributes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the binary data, or the size of the header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Number of child nodes. Shaders&#039; use of this value is unknown.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1e&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Unknown (&amp;lt;code&amp;gt;00 01&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Emitter Sets (ESTA) ===&lt;br /&gt;
The Emitter Set Array (ESTA) contains any number of Emitter Sets (ESET) as child nodes.&lt;br /&gt;
&lt;br /&gt;
==== Emitter Set (ESET) ====&lt;br /&gt;
Emitter sets (ESET) contain 0x60 bytes of data after the header:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size (h)&lt;br /&gt;
!Data Type &lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x40 || String || 0-terminated string representing the name of the emitter set&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || 0x04 || Unsigned Int || Total number of emitters in the set, including all descendant nodes&lt;br /&gt;
|-&lt;br /&gt;
| 0x5a || 0x02 || Unsigned Short || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x5f || 0x01 || Byte || Unknown. Can be &amp;lt;code&amp;gt;0x00&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The rest of the data block is padding.&lt;br /&gt;
&lt;br /&gt;
Emitter sets also contain any number of Emitters (EMTR) as child nodes.&lt;br /&gt;
&lt;br /&gt;
==== Emitter (EMTR) ====&lt;br /&gt;
An Emitter&#039;s (EMTR) data section is aligned to 0x20 bytes and contains the following data after the header:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset (h)&lt;br /&gt;
! Size (h)&lt;br /&gt;
! Data Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x60 || String || Name block, like in ESET&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 &lt;br /&gt;
| 0x18 &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Six Unsigned Ints specifying the sizes of the color arrays&lt;br /&gt;
* Color 0&lt;br /&gt;
* Alpha 0&lt;br /&gt;
* Color 1&lt;br /&gt;
* Alpha 1&lt;br /&gt;
* Scale{{check}}&lt;br /&gt;
* Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 | 0x38 || Byte[56]|| Padding &lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || 0x30 || UInt32 or Float[12] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0xE0 || 0x4 || Float || Blink Intensity 1&lt;br /&gt;
|-&lt;br /&gt;
| 0xE4 || 0x4 || Float || Blink Intensity 2&lt;br /&gt;
|-&lt;br /&gt;
| 0xE8 || 0x4 || Float || Blink Duration 1&lt;br /&gt;
|-&lt;br /&gt;
| 0xEC || 0x4 || Float || Blink Duration 2&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 || 0x2C0 || UInt32 or Float[176] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B0 || 0x4 || UInt32 or Float || Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B4 || 0x4 || UInt32 or Float || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B8 || 0x8 || Byte[8] || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C0 || 0x80 || Float[4] * 8 || Color 0 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x440 || 0x80 || Float[4] * 8 || Alpha 0 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C0 || 0x80 || Float[4] * 8 || Color 1 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x540 || 0x80 || Float[4] * 8 || Alpha 1 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C0 || 0x40 || UInt32 or Float[16] || Unknown array{{check}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x600 || 0x80 || Float[4] * 8 || Scale{{check}} array (eight sets of four 32-bit floats)&lt;br /&gt;
|-&lt;br /&gt;
| 0x680 || 0xD0 || UInt32 or Float[52] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x750 || 0x10 || Byte[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x760 || 0x90 || UInt32 or Float[36] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F0 || 0x8 || Byte[8] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F8 || 0x40 || UInt32 or Float[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x838 || 0x8 || Byte[8] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x840 || 0x58 || UInt32 or Float[22] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x898 || 0x8 || Byte[8] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A0 || 0x8 || UInt32 or Float[2] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A8 || 0x10 || Byte[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8B8 || 0x18 || UInt32 or Float[6] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8D0 || 0x10 || Byte[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E0 || 0x18 || UInt32 or Float[6] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8F8 || 0x18 || Byte[24] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x910 || 0x8 || UInt32 or Float[2] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x918 || 0x4 || Byte[4] || Padding? Sometimes &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x91C || 0x8 || UInt64 || Unknown. Sometimes &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x924 || 0x4 || Byte[4] || Padding? Sometimes &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x928 || 0x8 || UInt32 or Float[2] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x930 || 0x8 || UInt64 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x938 || 0x10 || UInt32 or Float[4] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x948 || 0xA || String || Usually is &amp;lt;code&amp;gt;ATEST_ONLY&amp;lt;/code&amp;gt; when used. Can be null.&lt;br /&gt;
|-&lt;br /&gt;
| 0x952 || 0x2 || Byte[2] || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x954 || 0x48 || UInt32 or Float[48] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x99C || 0xC || Byte[12] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A8 || 0x10 || Float[4] || Constant Color 0 if Color 0 array is empty&lt;br /&gt;
|-&lt;br /&gt;
| 0x9B8 || 0x10 || Float[4] || Constant Color 1 if Color 1 array is empty&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C8 || 0x30 || UInt32[12] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x9F8 &lt;br /&gt;
| 0x60 &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Three Sample Info blocks, consisting of the following structure:&lt;br /&gt;
* 0x00 - UInt32 - Enabled flag - Set if 0, unset if -1&lt;br /&gt;
* 0x04 - UInt32 - Texture ID&lt;br /&gt;
* 0x08 - Byte - 1st flag - Can be 0, 1 or 2&lt;br /&gt;
* 0x09 - Byte - 2nd flag - Can be 0, 1 or 2&lt;br /&gt;
* 0x0A - Byte - Padding&lt;br /&gt;
* 0x0B - Byte - 3rd flag - Can be either 0 or 1&lt;br /&gt;
* 0x0C - Float - Unknown - Can be 2.0. 6.0 or 15.99&lt;br /&gt;
* 0x10 - Byte[4] - Padding&lt;br /&gt;
* 0x14 - Byte - 4th flag - Can be either 0 or 1&lt;br /&gt;
* 0x15 - Byte - 5th flag - Can be either 0 or 1&lt;br /&gt;
* 0x16 - Byte - 6th flag - Can be either 0 or 1&lt;br /&gt;
* 0x17 - Byte - 7th flag - Can be either 0 or 1&lt;br /&gt;
* 0x18 - Byte - 8th flag - Can be either 0 or 1&lt;br /&gt;
* 0x19 - Byte[7] - Padding&amp;lt;/p&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xA58 || 0x30 || Byte[48] || Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Emitters can also have any number of attribute nodes (e.g. CADP, CSDP, FCSF), the purpose of which is currently unknown, as well as child emitter nodes.&lt;br /&gt;
&lt;br /&gt;
===== Attributes =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CADP&#039;&#039;&#039; causes an emitter to cast light on surrounding surfaces. It contains the following data:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset (h)&lt;br /&gt;
! Size&lt;br /&gt;
! Data Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x04 || Bitmask || Flag determining the light&#039;s shape&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || (variable) || Float || A variable number of floats whose purpose is unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Shape flag:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Flag&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Sphere&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Rod (e.g. swords)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || Changes the orientation of Rod&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Adds a dead zone to the center of Rod&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Wide cone&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Square&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || Point&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || Widens the Point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Textures (TEXA) ===&lt;br /&gt;
The Texture Array (TEXA) contains any number of Textures (TEXR), with each texture containing a single GX2 Texture Block (GX2B). The TEXA tree is flattened such that all TEXR nodes appear first, followed by all of their child GX2B nodes.&lt;br /&gt;
&lt;br /&gt;
=== (PRMA) ===&lt;br /&gt;
The PRMA{{check}} contains any number of PRIM{{check}} nodes.&lt;br /&gt;
&lt;br /&gt;
=== Shaders (SHDA) ===&lt;br /&gt;
The Shader Array (SHDA) contains a single{{check}} GX2 Shader Block (SHDB).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Nitram</name></author>
	</entry>
	<entry>
		<id>https://zeldamods.org/w_botw/index.php?title=PTCL&amp;diff=11075</id>
		<title>PTCL</title>
		<link rel="alternate" type="text/html" href="https://zeldamods.org/w_botw/index.php?title=PTCL&amp;diff=11075"/>
		<updated>2022-01-26T01:47:29Z</updated>

		<summary type="html">&lt;p&gt;Nitram: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;PTCL&amp;lt;/code&amp;gt;(a.k.a &amp;lt;code&amp;gt;EFTB&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;VFXB&amp;lt;/code&amp;gt;) files define certain graphical effects of objects such as emissions, particles, and shaders. They use the &amp;lt;code&amp;gt;.esetlist&amp;lt;/code&amp;gt; extension. The format changes what structures it uses for different types of data between platforms, aside for &amp;lt;code&amp;gt;ESTA&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PRMA&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PTCL File Layout ==&lt;br /&gt;
PTCL files are made up of a header and four structures that are aligned to 16 bytes.&lt;br /&gt;
* Emitter Set Array&lt;br /&gt;
* Texture Array / Cafe Resource&lt;br /&gt;
* PRM{{check}} Array&lt;br /&gt;
* Shader Array / Binary Shader&lt;br /&gt;
&lt;br /&gt;
Each array serves as a root node in a tree structure.&lt;br /&gt;
&lt;br /&gt;
== PTCL Header ==&lt;br /&gt;
The &amp;lt;code&amp;gt;EFTB&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;VFXB&amp;lt;/code&amp;gt; headers both contain different data, and as such have different size (0x30 and 0x40 respectively). &lt;br /&gt;
&lt;br /&gt;
=== EFTB Header Structure ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size&lt;br /&gt;
!Data Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| file signature (magic) (&amp;lt;code&amp;gt;45 46 54 42&amp;lt;/code&amp;gt; or &amp;quot;EFTB&amp;quot; in ASCII)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| VFX API Version ()&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| Unknown (&amp;lt;code&amp;gt;47 61 6d 65&amp;lt;/code&amp;gt; or &amp;quot;Game&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== VFXB Header Structure ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size&lt;br /&gt;
!Data Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| File signature (magic) (&amp;lt;code&amp;gt;56 46 58 42&amp;lt;/code&amp;gt; or &amp;quot;VFXB&amp;quot; in ASCII)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Unknown (&amp;lt;code&amp;gt;20 20 20 20&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Graphics API version ()&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| VFX API version&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Byte-Order Mark&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| 1&lt;br /&gt;
| Byte&lt;br /&gt;
| Alignment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F&lt;br /&gt;
| 1&lt;br /&gt;
| Byte&lt;br /&gt;
| Target offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Flag&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| First node offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Padding&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| File size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| Game&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 28&lt;br /&gt;
| Byte[28]&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Nodes ==&lt;br /&gt;
Each node in an array&#039;s tree structure is made up of a header and three optional sections.&lt;br /&gt;
* Binary data&lt;br /&gt;
* Attribute nodes{{check}}&lt;br /&gt;
* Child nodes&lt;br /&gt;
&lt;br /&gt;
=== Node Header Structure ===&lt;br /&gt;
Node headers typically have the same 32-byte structure, though some are longer and some calculate certain values differently.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size&lt;br /&gt;
!Data Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Signature (magic)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Node size. Different node types calculate this differently.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the first child node, or &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt; if there are no children&lt;br /&gt;
|-&lt;br /&gt;
| 0x0c&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the next sibling node, or &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt; if there are no more siblings&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the first attribute{{check}}, or &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt; if there are no attributes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the binary data, or the size of the header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Number of child nodes. Shaders&#039; use of this value is unknown.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1e&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Unknown (&amp;lt;code&amp;gt;00 01&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Emitter Sets (ESTA) ===&lt;br /&gt;
The Emitter Set Array (ESTA) contains any number of Emitter Sets (ESET) as child nodes.&lt;br /&gt;
&lt;br /&gt;
==== Emitter Set (ESET) ====&lt;br /&gt;
Emitter sets (ESET) contain 0x60 bytes of data after the header:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size (h)&lt;br /&gt;
!Data Type &lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x40 || String || 0-terminated string representing the name of the emitter set&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || 0x04 || Unsigned Int || Total number of emitters in the set, including all descendant nodes&lt;br /&gt;
|-&lt;br /&gt;
| 0x5a || 0x02 || Unsigned Short || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x5f || 0x01 || Byte || Unknown. Can be &amp;lt;code&amp;gt;0x00&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The rest of the data block is padding.&lt;br /&gt;
&lt;br /&gt;
Emitter sets also contain any number of Emitters (EMTR) as child nodes.&lt;br /&gt;
&lt;br /&gt;
==== Emitter (EMTR) ====&lt;br /&gt;
An Emitter&#039;s (EMTR) data section is aligned to 0x20 bytes and contains the following data after the header:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset (h)&lt;br /&gt;
! Size (h)&lt;br /&gt;
! Data Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x60 || Name block, like in ESET&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || 0x18 || Six Unsigned Ints specifying the sizes of the color arrays&lt;br /&gt;
* Color 0&lt;br /&gt;
* Alpha 0&lt;br /&gt;
* Color 1&lt;br /&gt;
* Alpha 1&lt;br /&gt;
* Scale{{check}}&lt;br /&gt;
* Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 | 0x38 || Byte[56]|| Padding &lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || 0x30 || UInt32 or Float[12] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0xE0 || 0x4 || Float || Blink Intensity 1&lt;br /&gt;
|-&lt;br /&gt;
| 0xE4 || 0x4 || Float || Blink Intensity 2&lt;br /&gt;
|-&lt;br /&gt;
| 0xE8 || 0x4 || Float || Blink Duration 1&lt;br /&gt;
|-&lt;br /&gt;
| 0xEC || 0x4 || Float || Blink Duration 2&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 || 0x2C0 || UInt32 or Float[176] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B0 || 0x4 || UInt32 or Float || Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B4 || 0x4 || UInt32 or Float || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B8 || 0x8 || Byte[8] || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C0 || 0x80 || Float[4] * 8 || Color 0 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x440 || 0x80 || Float[4] * 8 || Alpha 0 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C0 || 0x80 || Float[4] * 8 || Color 1 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x540 || 0x80 || Float[4] * 8 || Alpha 1 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C0 || 0x40 || UInt32 or Float[16] || Unknown array{{check}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x600 || 0x80 || Float[4] * 8 || Scale{{check}} array (eight sets of four 32-bit floats)&lt;br /&gt;
|-&lt;br /&gt;
| 0x680 || 0xD0 || UInt32 or Float[52] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x750 || 0x10 || Byte[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x760 || 0x90 || UInt32 or Float[36] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F0 || 0x8 || Byte[8] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F8 || 0x40 || UInt32 or Float[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x838 || 0x8 || Byte[8] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x840 || 0x58 || UInt32 or Float[22] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x898 || 0x8 || Byte[8] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A0 || 0x8 || UInt32 or Float[2] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A8 || 0x10 || Byte[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8B8 || 0x18 || UInt32 or Float[6] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8D0 || 0x10 || Byte[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E0 || 0x18 || UInt32 or Float[6] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8F8 || 0x18 || Byte[24] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x910 || 0x8 || UInt32 or Float[2] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x918 || 0x4 || Byte[4] || Padding? Sometimes &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x91C || 0x8 || UInt64 || Unknown. Sometimes &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x924 || 0x4 || Byte[4] || Padding? Sometimes &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x928 || 0x8 || UInt32 or Float[2] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x930 || 0x8 || UInt64 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x938 || 0x10 || UInt32 or Float[4] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x948 || 0xA || String || Usually is &amp;lt;code&amp;gt;ATEST_ONLY&amp;lt;/code&amp;gt; when used. Can be null.&lt;br /&gt;
|-&lt;br /&gt;
| 0x952 || 0x2 || Byte[2] || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x954 || 0x48 || UInt32 or Float[48] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x99C || 0xC || Byte[12] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A8 || 0x10 || Float[4] || Constant Color 0 if Color 0 array is empty&lt;br /&gt;
|-&lt;br /&gt;
| 0x9B8 || 0x10 || Float[4] || Constant Color 1 if Color 1 array is empty&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C8 || 0x30 || UInt32[12] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x9F8 &lt;br /&gt;
| 0x60 &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Three Sample Info blocks, consisting of the following structure:&lt;br /&gt;
* 0x00 - UInt32 - Enabled flag - Set if 0, unset if -1&lt;br /&gt;
* 0x04 - UInt32 - Texture ID&lt;br /&gt;
* 0x08 - Byte - 1st flag - Can be 0, 1 or 2&lt;br /&gt;
* 0x09 - Byte - 2nd flag - Can be 0, 1 or 2&lt;br /&gt;
* 0x0A - Byte - Padding&lt;br /&gt;
* 0x0B - Byte - 3rd flag - Can be either 0 or 1&lt;br /&gt;
* 0x0C - Float - Unknown - Can be 2.0. 6.0 or 15.99&lt;br /&gt;
* 0x10 - Byte[4] - Padding&lt;br /&gt;
* 0x14 - Byte - 4th flag - Can be either 0 or 1&lt;br /&gt;
* 0x15 - Byte - 5th flag - Can be either 0 or 1&lt;br /&gt;
* 0x16 - Byte - 6th flag - Can be either 0 or 1&lt;br /&gt;
* 0x17 - Byte - 7th flag - Can be either 0 or 1&lt;br /&gt;
* 0x18 - Byte - 8th flag - Can be either 0 or 1&lt;br /&gt;
* 0x19 - Byte[7] - Padding&amp;lt;/p&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xA58 || 0x30 || Byte[48] || Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Emitters can also have any number of attribute nodes (e.g. CADP, CSDP, FCSF), the purpose of which is currently unknown, as well as child emitter nodes.&lt;br /&gt;
&lt;br /&gt;
===== Attributes =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CADP&#039;&#039;&#039; causes an emitter to cast light on surrounding surfaces. It contains the following data:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset (h)&lt;br /&gt;
! Size&lt;br /&gt;
! Data Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x04 || Bitmask || Flag determining the light&#039;s shape&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || (variable) || Float || A variable number of floats whose purpose is unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Shape flag:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Flag&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Sphere&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Rod (e.g. swords)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || Changes the orientation of Rod&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Adds a dead zone to the center of Rod&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Wide cone&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Square&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || Point&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || Widens the Point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Textures (TEXA) ===&lt;br /&gt;
The Texture Array (TEXA) contains any number of Textures (TEXR), with each texture containing a single GX2 Texture Block (GX2B). The TEXA tree is flattened such that all TEXR nodes appear first, followed by all of their child GX2B nodes.&lt;br /&gt;
&lt;br /&gt;
=== (PRMA) ===&lt;br /&gt;
The PRMA{{check}} contains any number of PRIM{{check}} nodes.&lt;br /&gt;
&lt;br /&gt;
=== Shaders (SHDA) ===&lt;br /&gt;
The Shader Array (SHDA) contains a single{{check}} GX2 Shader Block (SHDB).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Nitram</name></author>
	</entry>
	<entry>
		<id>https://zeldamods.org/w_botw/index.php?title=EFTB&amp;diff=11074</id>
		<title>EFTB</title>
		<link rel="alternate" type="text/html" href="https://zeldamods.org/w_botw/index.php?title=EFTB&amp;diff=11074"/>
		<updated>2022-01-26T01:35:53Z</updated>

		<summary type="html">&lt;p&gt;Nitram: Replaced content with &amp;quot;&amp;lt;onlyinclude&amp;gt; &amp;lt;code&amp;gt;EFTB&amp;lt;/code&amp;gt; files are PTCL files. &amp;lt;/onlyinclude&amp;gt;  Category:File formats&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;EFTB&amp;lt;/code&amp;gt; files are [[PTCL]] files.&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Nitram</name></author>
	</entry>
	<entry>
		<id>https://zeldamods.org/w_botw/index.php?title=PTCL&amp;diff=11073</id>
		<title>PTCL</title>
		<link rel="alternate" type="text/html" href="https://zeldamods.org/w_botw/index.php?title=PTCL&amp;diff=11073"/>
		<updated>2022-01-26T01:34:41Z</updated>

		<summary type="html">&lt;p&gt;Nitram: Created page with &amp;quot;&amp;lt;onlyinclude&amp;gt; &amp;lt;code&amp;gt;PTCL&amp;lt;/code&amp;gt;(a.k.a &amp;lt;code&amp;gt;EFTB&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;VFXB&amp;lt;/code&amp;gt;) files define certain graphical effects of objects such as emissions, particles, and shaders. They us...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;PTCL&amp;lt;/code&amp;gt;(a.k.a &amp;lt;code&amp;gt;EFTB&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;VFXB&amp;lt;/code&amp;gt;) files define certain graphical effects of objects such as emissions, particles, and shaders. They use the &amp;lt;code&amp;gt;.esetlist&amp;lt;/code&amp;gt; extension. The format changes what structures it uses for different types of data between platforms, aside for &amp;lt;code&amp;gt;ESTA&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PRMA&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PTCL File Layout ==&lt;br /&gt;
PTCL files are made up of a header and four structures that are aligned to 16 bytes.&lt;br /&gt;
* Emitter Set Array&lt;br /&gt;
* Texture Array / Cafe Resource&lt;br /&gt;
* PRM{{check}} Array&lt;br /&gt;
* Shader Array / Binary Shader&lt;br /&gt;
&lt;br /&gt;
Each array serves as a root node in a tree structure.&lt;br /&gt;
&lt;br /&gt;
== PTCL Header ==&lt;br /&gt;
The &amp;lt;code&amp;gt;EFTB&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;VFXB&amp;lt;/code&amp;gt; headers both contain different data, and as such have different size (0x30 and 0x40 respectively). &lt;br /&gt;
&lt;br /&gt;
=== EFTB Header Structure ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size&lt;br /&gt;
!Data Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| file signature (magic) (&amp;lt;code&amp;gt;45 46 54 42&amp;lt;/code&amp;gt; or &amp;quot;EFTB&amp;quot; in ASCII)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| VFX API Version ()&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| Unknown (&amp;lt;code&amp;gt;47 61 6d 65&amp;lt;/code&amp;gt; or &amp;quot;Game&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== VFXB Header Structure ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size&lt;br /&gt;
!Data Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| File signature (magic) (&amp;lt;code&amp;gt;56 46 58 42&amp;lt;/code&amp;gt; or &amp;quot;VFXB&amp;quot; in ASCII)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Unknown (&amp;lt;code&amp;gt;20 20 20 20&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Graphics API version ()&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| VFX API version&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Byte-Order Mark&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| 1&lt;br /&gt;
| Byte&lt;br /&gt;
| Alignment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F&lt;br /&gt;
| 1&lt;br /&gt;
| Byte&lt;br /&gt;
| Target offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Flag&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| First node offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Padding&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| File size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| String&lt;br /&gt;
| Game&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 28&lt;br /&gt;
| Byte[28]&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Nodes ==&lt;br /&gt;
Each node in an array&#039;s tree structure is made up of a header and three optional sections.&lt;br /&gt;
* Binary data&lt;br /&gt;
* Attribute nodes{{check}}&lt;br /&gt;
* Child nodes&lt;br /&gt;
&lt;br /&gt;
=== Node Header Structure ===&lt;br /&gt;
Node headers typically have the same 32-byte structure, though some are longer and some calculate certain values differently.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size&lt;br /&gt;
!Data Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Signature (magic)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Node size. Different node types calculate this differently.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the first child node, or &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt; if there are no children&lt;br /&gt;
|-&lt;br /&gt;
| 0x0c&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the next sibling node, or &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt; if there are no more siblings&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the first attribute{{check}}, or &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt; if there are no attributes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| Unsigned Int&lt;br /&gt;
| Offset to the binary data, or the size of the header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Number of child nodes. Shaders&#039; use of this value is unknown.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1e&lt;br /&gt;
| 2&lt;br /&gt;
| Unsigned Short&lt;br /&gt;
| Unknown (&amp;lt;code&amp;gt;00 01&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Emitter Sets (ESTA) ===&lt;br /&gt;
The Emitter Set Array (ESTA) contains any number of Emitter Sets (ESET) as child nodes.&lt;br /&gt;
&lt;br /&gt;
==== Emitter Set (ESET) ====&lt;br /&gt;
Emitter sets (ESET) contain 0x60 bytes of data after the header:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset (h)&lt;br /&gt;
!Size (h)&lt;br /&gt;
!Data Type &lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x40 || String || 0-terminated string representing the name of the emitter set&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || 0x04 || Unsigned Int || Total number of emitters in the set, including all descendant nodes&lt;br /&gt;
|-&lt;br /&gt;
| 0x5a || 0x02 || Unsigned Short || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x5f || 0x01 || Byte || Unknown. Can be &amp;lt;code&amp;gt;0x00&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The rest of the data block is padding.&lt;br /&gt;
&lt;br /&gt;
Emitter sets also contain any number of Emitters (EMTR) as child nodes.&lt;br /&gt;
&lt;br /&gt;
==== Emitter (EMTR) ====&lt;br /&gt;
An Emitter&#039;s (EMTR) data section is aligned to 0x20 bytes and contains the following data after the header:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset (h)&lt;br /&gt;
! Size (h)&lt;br /&gt;
! Data Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x60 || Name block, like in ESET&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || 0x18 || Six Unsigned Ints specifying the sizes of the color arrays&lt;br /&gt;
* Color 0&lt;br /&gt;
* Alpha 0&lt;br /&gt;
* Color 1&lt;br /&gt;
* Alpha 1&lt;br /&gt;
* Scale{{check}}&lt;br /&gt;
* Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 | 0x38 || Byte[56]|| Padding &lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || 0x30 || UInt32[12] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0xE0 || 0x4 || Float || Blink Intensity 1&lt;br /&gt;
|-&lt;br /&gt;
| 0xE4 || 0x4 || Float || Blink Intensity 2&lt;br /&gt;
|-&lt;br /&gt;
| 0xE8 || 0x4 || Float || Blink Duration 1&lt;br /&gt;
|-&lt;br /&gt;
| 0xEC || 0x4 || Float || Blink Duration 2&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 || 0x2C0 || Float[176]{{check}} || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B0 || 0x4 || Float || Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B4 || 0x4 || Float || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B8 || 0x8 || Byte[8] || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C0 || 0x80 || Float[4] * 8 || Color 0 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x440 || 0x80 || Float[4] * 8 || Alpha 0 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C0 || 0x80 || Float[4] * 8 || Color 1 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x540 || 0x80 || Float[4] * 8 || Alpha 1 array (eight sets of four 32-bit floats describing Red, Green, Blue, and Time)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C0 || 0x40 || Float[16]{{check}} || Unknown array&lt;br /&gt;
|-&lt;br /&gt;
| 0x600 || 0x80 || Float[4] * 8 || Scale{{check}} array (eight sets of four 32-bit floats)&lt;br /&gt;
|-&lt;br /&gt;
| 0x680 || 0xD0 || Float[52]{{check}} || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x750 || 0x10 || Byte[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x760 || 0x90 || Float[36]{{check}} || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F0 || 0x8 || Byte[8] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F8 || 0x40 || Float[16]{{check}} || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x838 || 0x8 || Byte[8] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x840 || 0x58 || Float[22]{{check}} || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x898 || 0x8 || Byte[8] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A0 || 0x8 || Float[2]{{check}} || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A8 || 0x10 || Byte[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8B8 || 0x18 || Float[6]{{check}} || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8D0 || 0x10 || Byte[16] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E0 || 0x18 || Float[6]{{check}} || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8F8 || 0x18 || Byte[24] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x910 || 0x8 || Float[2]{{check}} || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x918 || 0x4 || Byte[4] || Padding?{{check}} Sometimes &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x91C || 0x8 || UInt64{{check}} || Unknown. Sometimes &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x924 || 0x4 || Byte[4] || Padding?{{check}} Sometimes &amp;lt;code&amp;gt;FF FF FF FF&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x928 || 0x8 || Float[2]{{check}} || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x930 || 0x8 || UInt64{{check}} || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x938 || 0x10 || Float[4]{{check}} || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x948 || 0xA || String || Usually is &amp;lt;code&amp;gt;ATEST_ONLY&amp;lt;/code&amp;gt; when used. Can be null.&lt;br /&gt;
|-&lt;br /&gt;
| 0x952 || 0x2 || Byte[2] || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x954 || 0x48 || UInt32[48]{{check}} || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x99C || 0xC || Byte[12] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A8 || 0x10 || Float[4] || Constant Color 0 if Color 0 array is empty&lt;br /&gt;
|-&lt;br /&gt;
| 0x9B8 || 0x10 || Float[4] || Constant Color 1 if Color 1 array is empty&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C8 || 0x30 || UInt32[12]{{check}} || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x9F8 || 0x60 || Three Sample Info blocks, consisting of the following structure:&lt;br /&gt;
* 0x00 - UInt32 - Enabled flag - Set if 0, unset if -1&lt;br /&gt;
* 0x04 - UInt32 - Texture ID&lt;br /&gt;
* 0x08 - Byte - 1st flag - Can be 0, 1 or 2&lt;br /&gt;
* 0x09 - Byte - 2nd flag - Can be 0, 1 or 2&lt;br /&gt;
* 0x0A - Byte - Padding&lt;br /&gt;
* 0x0B - Byte - 3rd flag - Can be either 0 or 1&lt;br /&gt;
* 0x0C - Float - Unknown - Can be 2.0. 6.0 or 15.99&lt;br /&gt;
* 0x10 - Byte[4] - Padding&lt;br /&gt;
* 0x14 - Byte - 4th flag - Can be either 0 or 1&lt;br /&gt;
* 0x15 - Byte - 5th flag - Can be either 0 or 1&lt;br /&gt;
* 0x16 - Byte - 6th flag - Can be either 0 or 1&lt;br /&gt;
* 0x17 - Byte - 7th flag - Can be either 0 or 1&lt;br /&gt;
* 0x18 - Byte - 8th flag - Can be either 0 or 1&lt;br /&gt;
* 0x19 - Byte[7] - Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xA58 || 0x30 || Byte[48] || Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Emitters can also have any number of attribute nodes (e.g. CADP, CSDP, FCSF), the purpose of which is currently unknown, as well as child emitter nodes.&lt;br /&gt;
&lt;br /&gt;
===== Attributes =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CADP&#039;&#039;&#039; causes an emitter to cast light on surrounding surfaces. It contains the following data:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset (h)&lt;br /&gt;
! Size&lt;br /&gt;
! Data Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x04 || Bitmask || Flag determining the light&#039;s shape&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || (variable) || Float || A variable number of floats whose purpose is unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Shape flag:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Flag&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Sphere&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Rod (e.g. swords)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || Changes the orientation of Rod&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Adds a dead zone to the center of Rod&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Wide cone&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Square&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || Point&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || Widens the Point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Textures (TEXA) ===&lt;br /&gt;
The Texture Array (TEXA) contains any number of Textures (TEXR), with each texture containing a single GX2 Texture Block (GX2B). The TEXA tree is flattened such that all TEXR nodes appear first, followed by all of their child GX2B nodes.&lt;br /&gt;
&lt;br /&gt;
=== (PRMA) ===&lt;br /&gt;
The PRMA{{check}} contains any number of PRIM{{check}} nodes.&lt;br /&gt;
&lt;br /&gt;
=== Shaders (SHDA) ===&lt;br /&gt;
The Shader Array (SHDA) contains a single{{check}} GX2 Shader Block (SHDB).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Nitram</name></author>
	</entry>
	<entry>
		<id>https://zeldamods.org/w_botw/index.php?title=Help:Porting_mods&amp;diff=11046</id>
		<title>Help:Porting mods</title>
		<link rel="alternate" type="text/html" href="https://zeldamods.org/w_botw/index.php?title=Help:Porting_mods&amp;diff=11046"/>
		<updated>2022-01-05T22:12:22Z</updated>

		<summary type="html">&lt;p&gt;Nitram: /* Animations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Due to the development of BotW starting on WiiU and then being ported to Switch, many of the game&#039;s files are not inter-compatible, meaning some WiiU files will not work on Switch and viceversa. This article covers all tools and ways of using those tools to port mods between platforms.&lt;br /&gt;
&lt;br /&gt;
Note that if you want to port a WiiU mod to Switch, you can use [https://gamebanana.com/tools/7836 this tool] for a more automated process. If it errors out, you can come back to this guide and follow the steps for your desired files.&lt;br /&gt;
&lt;br /&gt;
== Camera, Model and UI ==&lt;br /&gt;
All these files fall under the &amp;lt;code&amp;gt;FRES&amp;lt;/code&amp;gt; format, which can be edited using [https://github.com/KillzXGaming/Switch-Toolbox Switch Toolbox](referred to as STB from now on). Preferably, you will be modifying the same file that was used to make your original mod, but creating a new file from scratch can sometimes work when applicable.&lt;br /&gt;
&lt;br /&gt;
=== Importing your files ===&lt;br /&gt;
Once you open STB, you&#039;ll be greeted with an empty workspace, along with drop-down menus labeled &#039;&#039;&#039;File&#039;&#039;&#039;, &#039;&#039;&#039;Edit&#039;&#039;&#039;(greyed out), &#039;&#039;&#039;Tools&#039;&#039;&#039;, &#039;&#039;&#039;Experimental&#039;&#039;&#039;, &#039;&#039;&#039;Windows&#039;&#039;&#039;, &#039;&#039;&#039;Settings&#039;&#039;&#039;, &#039;&#039;&#039;Console&#039;&#039;&#039; and &#039;&#039;&#039;Help&#039;&#039;&#039;.&lt;br /&gt;
[[File:Screenshot from 2022-01-05 09-44-18.png|thumb|An empty workspace, shown when opening STB]]&lt;br /&gt;
From the &#039;&#039;&#039;File&#039;&#039;&#039; drop-down menu, use either &#039;&#039;Open&#039;&#039; for opening a single file, or &#039;&#039;Open (folder)&#039;&#039; if you want to open all files within a folder. The following process differs from file to file, so make sure to follow the corresponding section.&lt;br /&gt;
====Animations====&lt;br /&gt;
Animations have 9 different types:&lt;br /&gt;
* Skeletal Animation&lt;br /&gt;
* Shader Parameter Animation&lt;br /&gt;
* Color Animation&lt;br /&gt;
* Texture SRT Animation&lt;br /&gt;
* Texture Pattern Animation&lt;br /&gt;
* Bone Visibility Animation&lt;br /&gt;
* Material Visibility Animation&lt;br /&gt;
* Shape Animation&lt;br /&gt;
* Scene Animation&lt;br /&gt;
Out of all these, Breath of the Wild does not use Shape Animations, so they will be ignored for the purpose of this tutorial. As of the time of writing, only Skeletal, Color, Texture SRT and Texture Pattern animations can be exported from a modded file and reimported into your target platform using STB. All others need to be recreated when needed.&lt;br /&gt;
&lt;br /&gt;
==Effects==&lt;br /&gt;
==Physics==&lt;br /&gt;
==Sound==&lt;br /&gt;
==Others==&lt;br /&gt;
All file types not covered in this guide can be converted using [https://github.com/NiceneNerd/BCML BCML&#039;s] converter without issue.&lt;/div&gt;</summary>
		<author><name>Nitram</name></author>
	</entry>
	<entry>
		<id>https://zeldamods.org/w_botw/index.php?title=Help:Porting_mods&amp;diff=11045</id>
		<title>Help:Porting mods</title>
		<link rel="alternate" type="text/html" href="https://zeldamods.org/w_botw/index.php?title=Help:Porting_mods&amp;diff=11045"/>
		<updated>2022-01-05T22:11:19Z</updated>

		<summary type="html">&lt;p&gt;Nitram: Created page with &amp;quot;Due to the development of BotW starting on WiiU and then being ported to Switch, many of the game&amp;#039;s files are not inter-compatible, meaning some WiiU files will not work on Sw...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Due to the development of BotW starting on WiiU and then being ported to Switch, many of the game&#039;s files are not inter-compatible, meaning some WiiU files will not work on Switch and viceversa. This article covers all tools and ways of using those tools to port mods between platforms.&lt;br /&gt;
&lt;br /&gt;
Note that if you want to port a WiiU mod to Switch, you can use [https://gamebanana.com/tools/7836 this tool] for a more automated process. If it errors out, you can come back to this guide and follow the steps for your desired files.&lt;br /&gt;
&lt;br /&gt;
== Camera, Model and UI ==&lt;br /&gt;
All these files fall under the &amp;lt;code&amp;gt;FRES&amp;lt;/code&amp;gt; format, which can be edited using [https://github.com/KillzXGaming/Switch-Toolbox Switch Toolbox](referred to as STB from now on). Preferably, you will be modifying the same file that was used to make your original mod, but creating a new file from scratch can sometimes work when applicable.&lt;br /&gt;
&lt;br /&gt;
=== Importing your files ===&lt;br /&gt;
Once you open STB, you&#039;ll be greeted with an empty workspace, along with drop-down menus labeled &#039;&#039;&#039;File&#039;&#039;&#039;, &#039;&#039;&#039;Edit&#039;&#039;&#039;(greyed out), &#039;&#039;&#039;Tools&#039;&#039;&#039;, &#039;&#039;&#039;Experimental&#039;&#039;&#039;, &#039;&#039;&#039;Windows&#039;&#039;&#039;, &#039;&#039;&#039;Settings&#039;&#039;&#039;, &#039;&#039;&#039;Console&#039;&#039;&#039; and &#039;&#039;&#039;Help&#039;&#039;&#039;.&lt;br /&gt;
[[File:Screenshot from 2022-01-05 09-44-18.png|thumb|An empty workspace, shown when opening STB]]&lt;br /&gt;
From the &#039;&#039;&#039;File&#039;&#039;&#039; drop-down menu, use either &#039;&#039;Open&#039;&#039; for opening a single file, or &#039;&#039;Open (folder)&#039;&#039; if you want to open all files within a folder. The following process differs from file to file, so make sure to follow the corresponding section.&lt;br /&gt;
====Animations====&lt;br /&gt;
Animations have 9 different types:&lt;br /&gt;
- Skeletal Animation&lt;br /&gt;
- Shader Parameter Animation&lt;br /&gt;
- Color Animation&lt;br /&gt;
- Texture SRT Animation&lt;br /&gt;
- Texture Pattern Animation&lt;br /&gt;
- Bone Visibility Animation&lt;br /&gt;
- Material Visibility Animation&lt;br /&gt;
- Shape Animation&lt;br /&gt;
- Scene Animation&lt;br /&gt;
Out of all these, Breath of the Wild does not use Shape Animations, so they will be ignored for the purpose of this tutorial. As of the time of writing, only Skeletal, Color, Texture SRT and Texture Pattern animations can be exported from a modded file and reimported into your target platform using STB. All others need to be recreated when needed.&lt;br /&gt;
==Effects==&lt;br /&gt;
==Physics==&lt;br /&gt;
==Sound==&lt;br /&gt;
==Others==&lt;br /&gt;
All file types not covered in this guide can be converted using [https://github.com/NiceneNerd/BCML BCML&#039;s] converter without issue.&lt;/div&gt;</summary>
		<author><name>Nitram</name></author>
	</entry>
	<entry>
		<id>https://zeldamods.org/w_botw/index.php?title=File:Screenshot_from_2022-01-05_09-44-18.png&amp;diff=11044</id>
		<title>File:Screenshot from 2022-01-05 09-44-18.png</title>
		<link rel="alternate" type="text/html" href="https://zeldamods.org/w_botw/index.php?title=File:Screenshot_from_2022-01-05_09-44-18.png&amp;diff=11044"/>
		<updated>2022-01-05T12:48:28Z</updated>

		<summary type="html">&lt;p&gt;Nitram: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A mainly empty workspace, shown when opening Switch Toolbox&lt;/div&gt;</summary>
		<author><name>Nitram</name></author>
	</entry>
</feed>