<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://pikmintkb.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Noodl</id>
	<title>Pikmin Technical Knowledge Base - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://pikmintkb.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Noodl"/>
	<link rel="alternate" type="text/html" href="https://pikmintkb.com/wiki/Special:Contributions/Noodl"/>
	<updated>2026-05-11T14:17:22Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=Pikmin_4_instructions&amp;diff=5161</id>
		<title>Pikmin 4 instructions</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=Pikmin_4_instructions&amp;diff=5161"/>
		<updated>2025-10-06T21:55:23Z</updated>

		<summary type="html">&lt;p&gt;Noodl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Basic information about &#039;&#039;Pikmin 4&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Until we have more information about &#039;&#039;Pikmin 4&#039;&#039;, I will be consolidating all the research we find into [https://docs.google.com/document/d/1DU4ix_WIJW3f59-QoBVV7i1bitGmpC7_3c2dv6pG7To/edit?usp=sharing|this document here]. You can make changes to this page if you would like or you can comment on changes to the sheet we already have. &lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
To get started modding Pikmin 4, download [[Dandori Desktop]] to get started. Refer [https://github.com/Chagrilled/P4-DandoriDesktop/?tab=readme-ov-file#%EF%B8%8F-setupworkflow these instructions] to setup or [https://www.youtube.com/watch?v=v8bnNXRQmy8&amp;amp;t=62s this video]&lt;br /&gt;
&lt;br /&gt;
[[Category:Instructions]]&lt;br /&gt;
[[Category:Pikmin 4]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=P4UassetEditor&amp;diff=5155</id>
		<title>P4UassetEditor</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=P4UassetEditor&amp;diff=5155"/>
		<updated>2025-09-22T20:34:47Z</updated>

		<summary type="html">&lt;p&gt;Noodl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;P4UassetEditor&#039;&#039;&#039; is a tool made by [[Infinity Divided]] that allows the decompiling and compiling of uasset files that can be edited with ease using simple json.&lt;br /&gt;
&lt;br /&gt;
== Noodl&#039;s Version ==&lt;br /&gt;
* Compiled into an exe using Cython to remove the Python dependency (just download and run)&lt;br /&gt;
* Includes the required manifest/global files already pre-packed&lt;br /&gt;
* [https://github.com/Chagrilled/P4-Utils/raw/refs/heads/master/tooling/P4UassetEditor.zip Download Link]&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
* [https://www.python.org/downloads/ Python]&lt;br /&gt;
* PIP + Cityhash&lt;br /&gt;
&lt;br /&gt;
== Installing PIP + Cityhash ==&lt;br /&gt;
* To install PIP Cityhash, when downloading Python, make sure to tick &amp;quot;Add python.exe to PATH&amp;quot; during installation.&lt;br /&gt;
&lt;br /&gt;
* Open command prompt and type &amp;quot;python get-pip.py&amp;quot; to install PIP, press enter to run the command.&lt;br /&gt;
&lt;br /&gt;
* After installing PIP, install cityhash by returning to command prompt and running &amp;quot;pip install cityhash&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Link ==&lt;br /&gt;
* [https://pixeldrain.com/u/m3ctP8sL Download Link]&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
To use this tool you&#039;ll need to first extract your &amp;quot;global.ucas&amp;quot; from your copy of Pikmin 4 and place it into the &amp;quot;_GLOBAL_UCAS&amp;quot; folder on the directory of the tool, next click generate_global_names.bat to generate your global names from your &amp;quot;global.ucas&amp;quot;, to decode your files simply click drop your &amp;quot;.uasset&amp;quot; file into the &amp;quot;INPUT&amp;quot; directory and click &amp;quot;decode.bat&amp;quot;, to pack your files place your json in the &amp;quot;EDIT&amp;quot; directory and click &amp;quot;encode.bat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Pikmin 4]]&lt;br /&gt;
[[Category:Tools]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=P4UassetEditor&amp;diff=5154</id>
		<title>P4UassetEditor</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=P4UassetEditor&amp;diff=5154"/>
		<updated>2025-09-22T20:34:15Z</updated>

		<summary type="html">&lt;p&gt;Noodl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;P4UassetEditor&#039;&#039;&#039; is a tool made by [[Infinity Divided]] that allows the decompiling and compiling of uasset files that can be edited with ease using simple json.&lt;br /&gt;
&lt;br /&gt;
== Noodl&#039;s Version ==&lt;br /&gt;
* Compiled into an exe using Cython to remove the Python dependency&lt;br /&gt;
* Includes the required manifest/global files already pre-packed&lt;br /&gt;
* [https://github.com/Chagrilled/P4-Utils/raw/refs/heads/master/tooling/P4UassetEditor.zip Download Link]&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
* [https://www.python.org/downloads/ Python]&lt;br /&gt;
* PIP + Cityhash&lt;br /&gt;
&lt;br /&gt;
== Installing PIP + Cityhash ==&lt;br /&gt;
* To install PIP Cityhash, when downloading Python, make sure to tick &amp;quot;Add python.exe to PATH&amp;quot; during installation.&lt;br /&gt;
&lt;br /&gt;
* Open command prompt and type &amp;quot;python get-pip.py&amp;quot; to install PIP, press enter to run the command.&lt;br /&gt;
&lt;br /&gt;
* After installing PIP, install cityhash by returning to command prompt and running &amp;quot;pip install cityhash&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Link ==&lt;br /&gt;
* [https://pixeldrain.com/u/m3ctP8sL Download Link]&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
To use this tool you&#039;ll need to first extract your &amp;quot;global.ucas&amp;quot; from your copy of Pikmin 4 and place it into the &amp;quot;_GLOBAL_UCAS&amp;quot; folder on the directory of the tool, next click generate_global_names.bat to generate your global names from your &amp;quot;global.ucas&amp;quot;, to decode your files simply click drop your &amp;quot;.uasset&amp;quot; file into the &amp;quot;INPUT&amp;quot; directory and click &amp;quot;decode.bat&amp;quot;, to pack your files place your json in the &amp;quot;EDIT&amp;quot; directory and click &amp;quot;encode.bat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Pikmin 4]]&lt;br /&gt;
[[Category:Tools]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=UCas/UToc_Packer&amp;diff=5153</id>
		<title>UCas/UToc Packer</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=UCas/UToc_Packer&amp;diff=5153"/>
		<updated>2025-09-22T20:32:56Z</updated>

		<summary type="html">&lt;p&gt;Noodl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;UCas/UToc Packer&#039;&#039;&#039; is a tool forked by [[brekko]], that allows users to pack their mods into a compiled format for Pikmin 4.&lt;br /&gt;
&lt;br /&gt;
== Link ==&lt;br /&gt;
* [https://pixeldrain.com/u/YDpPqRUA Download Link]&lt;br /&gt;
* [https://github.com/Chagrilled/P4-Utils/raw/refs/heads/master/tooling/castoc.zip Backup Link]&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
To use this tool simply extract the packer into a new directory and create a directory as listed below&lt;br /&gt;
&lt;br /&gt;
PACKINPUT\Carrot4\Content\Carrot4\(File X)&lt;br /&gt;
&lt;br /&gt;
File X = file to be replaced&lt;br /&gt;
&lt;br /&gt;
Insert your new files into the newly created directory and run &amp;quot;PACKFILES.bat&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Your packed files will be located in the &amp;quot;PACKOUTPUT&amp;quot; directory&lt;br /&gt;
&lt;br /&gt;
*NOTE: Packer is case sensitive, please be aware that files and file directory names must be 1:1&lt;br /&gt;
&lt;br /&gt;
[[Category:Pikmin 4]]&lt;br /&gt;
[[Category:Tools]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=AddLand_Units&amp;diff=5147</id>
		<title>AddLand Units</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=AddLand_Units&amp;diff=5147"/>
		<updated>2025-09-06T23:47:39Z</updated>

		<summary type="html">&lt;p&gt;Noodl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== AddLand Units ===&lt;br /&gt;
AddLand entities are placeable objects in Pikmin 4 that are usually mounds. They have full collision and can be used as a form of custom geometry. All images are taken by inserting 3 mounds in the starting spawn of Sun Speckled Terrace.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ AddLand Units&lt;br /&gt;
|-&lt;br /&gt;
! Entity Name !! In-Game&lt;br /&gt;
|-&lt;br /&gt;
| AddLand01_Area001_M || [[File:AddLand01_Area001_M.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand02_Area001_M|| [[File:AddLand02_Area001_M.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| AddLand03_Area001_M|| [[File:AddLand03_Area001_M.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand04_Area001_M|| [[File:AddLand04_Area001_M.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand01_Area002_M|| [[File:AddLand01_Area002_M.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand02_Area002_M|| [[File:AddLand02_Area002_M.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand01_Area003_L01|| [[File:AddLand01_Area003_L01.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand02_Area003_L|| [[File:AddLand02_Area003_L.png|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Pikmin 4]]&lt;br /&gt;
[[Category:Stage Generation]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=AddLand_Units&amp;diff=5142</id>
		<title>AddLand Units</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=AddLand_Units&amp;diff=5142"/>
		<updated>2025-09-06T18:24:19Z</updated>

		<summary type="html">&lt;p&gt;Noodl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== AddLand Units ===&lt;br /&gt;
AddLand entities are placeable objects in Pikmin 4 that are usually mounds. They have full collision and can be used as a form of custom geometry. All images are taken by inserting 3 mounds in the starting spawn of Sun Speckled Terrace.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ AddLand Units&lt;br /&gt;
|-&lt;br /&gt;
! Entity Name !! In-Game&lt;br /&gt;
|-&lt;br /&gt;
| AddLand01_Area001_M || [[File:AddLand01_Area001_M.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand02_Area001_M|| [[File:AddLand02_Area001_M.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| AddLand03_Area001_M|| [[File:AddLand03_Area001_M.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand04_Area001_M|| [[File:AddLand04_Area001_M.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand01_Area002_M|| [[File:AddLand01_Area002_M.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand02_Area002_M|| [[File:AddLand02_Area002_M.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand01_Area003_L01|| [[File:AddLand01_Area003_L01.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand02_Area003_L|| [[File:AddLand02_Area003_L.png|thumb]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=AddLand_Units&amp;diff=5141</id>
		<title>AddLand Units</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=AddLand_Units&amp;diff=5141"/>
		<updated>2025-09-06T18:23:44Z</updated>

		<summary type="html">&lt;p&gt;Noodl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== AddLand Units ===&lt;br /&gt;
AddLand entities are placeable objects in Pikmin 4 that are usually mounds. They have full collision and can be used as a form of custom geometry.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ AddLand Units&lt;br /&gt;
|-&lt;br /&gt;
! Entity Name !! In-Game&lt;br /&gt;
|-&lt;br /&gt;
| AddLand01_Area001_M || [[File:AddLand01_Area001_M.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand02_Area001_M|| [[File:AddLand02_Area001_M.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| AddLand03_Area001_M|| [[File:AddLand03_Area001_M.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand04_Area001_M|| [[File:AddLand04_Area001_M.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand01_Area002_M|| [[File:AddLand01_Area002_M.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand02_Area002_M|| [[File:AddLand02_Area002_M.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand01_Area003_L01|| [[File:AddLand01_Area003_L01.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand02_Area003_L|| [[File:AddLand02_Area003_L.png|thumb]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=AddLand_Units&amp;diff=5140</id>
		<title>AddLand Units</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=AddLand_Units&amp;diff=5140"/>
		<updated>2025-09-06T18:23:30Z</updated>

		<summary type="html">&lt;p&gt;Noodl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== ActorSpawner AI ===&lt;br /&gt;
AddLand entities are placeable objects in Pikmin 4 that are usually mounds. They have full collision and can be used as a form of custom geometry.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ AddLand Units&lt;br /&gt;
|-&lt;br /&gt;
! Entity Name !! In-Game&lt;br /&gt;
|-&lt;br /&gt;
| AddLand01_Area001_M || [[File:AddLand01_Area001_M.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand02_Area001_M|| [[File:AddLand02_Area001_M.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| AddLand03_Area001_M|| [[File:AddLand03_Area001_M.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand04_Area001_M|| [[File:AddLand04_Area001_M.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand01_Area002_M|| [[File:AddLand01_Area002_M.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand02_Area002_M|| [[File:AddLand02_Area002_M.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand01_Area003_L01|| [[File:AddLand01_Area003_L01.png|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand02_Area003_L|| [[File:AddLand02_Area003_L.png|thumb]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=AddLand_Units&amp;diff=5139</id>
		<title>AddLand Units</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=AddLand_Units&amp;diff=5139"/>
		<updated>2025-09-06T18:20:48Z</updated>

		<summary type="html">&lt;p&gt;Noodl: Created page with &amp;quot;=== ActorSpawner AI === AddLand entities are placeable objects in Pikmin 4 that are usually mounds. They have full collision and can be used as a form of custom geometry.  {| class=&amp;quot;wikitable&amp;quot; |+ AddLand Units |- ! Entity Name !! In-Game |- | AddLand01_Area001_M || thumb | |- | AddLand02_Area001_M|| thumb |- | AddLand03_Area001_M|| thumb | |- | AddLand04_Area001_M|| File:...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== ActorSpawner AI ===&lt;br /&gt;
AddLand entities are placeable objects in Pikmin 4 that are usually mounds. They have full collision and can be used as a form of custom geometry.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ AddLand Units&lt;br /&gt;
|-&lt;br /&gt;
! Entity Name !! In-Game&lt;br /&gt;
|-&lt;br /&gt;
| AddLand01_Area001_M || [[File:AddLand01_Area001_M.jpg|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand02_Area001_M|| [[File:AddLand02_Area001_M.jpg|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| AddLand03_Area001_M|| [[File:AddLand03_Area001_M.jpg|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand04_Area001_M|| [[File:AddLand04_Area001_M.jpg|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand01_Area002_M|| [[File:AddLand01_Area002_M.jpg|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand02_Area002_M|| [[File:AddLand02_Area002_M.jpg|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand01_Area003_L01|| [[File:AddLand01_Area003_L01.jpg|thumb]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| AddLand02_Area003_L|| [[File:AddLand02_Area003_L.jpg|thumb]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=File:AddLand04_Area001_M.png&amp;diff=5138</id>
		<title>File:AddLand04 Area001 M.png</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=File:AddLand04_Area001_M.png&amp;diff=5138"/>
		<updated>2025-09-06T18:18:38Z</updated>

		<summary type="html">&lt;p&gt;Noodl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=File:AddLand03_Area001_M.png&amp;diff=5137</id>
		<title>File:AddLand03 Area001 M.png</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=File:AddLand03_Area001_M.png&amp;diff=5137"/>
		<updated>2025-09-06T18:18:31Z</updated>

		<summary type="html">&lt;p&gt;Noodl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=File:AddLand02_Area003_L.png&amp;diff=5136</id>
		<title>File:AddLand02 Area003 L.png</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=File:AddLand02_Area003_L.png&amp;diff=5136"/>
		<updated>2025-09-06T18:18:23Z</updated>

		<summary type="html">&lt;p&gt;Noodl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=File:AddLand02_Area002_M.png&amp;diff=5135</id>
		<title>File:AddLand02 Area002 M.png</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=File:AddLand02_Area002_M.png&amp;diff=5135"/>
		<updated>2025-09-06T18:18:15Z</updated>

		<summary type="html">&lt;p&gt;Noodl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=File:AddLand02_Area001_M.png&amp;diff=5134</id>
		<title>File:AddLand02 Area001 M.png</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=File:AddLand02_Area001_M.png&amp;diff=5134"/>
		<updated>2025-09-06T18:18:06Z</updated>

		<summary type="html">&lt;p&gt;Noodl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=File:AddLand01_Area003_L01.png&amp;diff=5133</id>
		<title>File:AddLand01 Area003 L01.png</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=File:AddLand01_Area003_L01.png&amp;diff=5133"/>
		<updated>2025-09-06T18:17:57Z</updated>

		<summary type="html">&lt;p&gt;Noodl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=File:AddLand01_Area002_M.png&amp;diff=5132</id>
		<title>File:AddLand01 Area002 M.png</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=File:AddLand01_Area002_M.png&amp;diff=5132"/>
		<updated>2025-09-06T18:17:46Z</updated>

		<summary type="html">&lt;p&gt;Noodl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=File:AddLand01_Area001_M.png&amp;diff=5131</id>
		<title>File:AddLand01 Area001 M.png</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=File:AddLand01_Area001_M.png&amp;diff=5131"/>
		<updated>2025-09-06T18:17:37Z</updated>

		<summary type="html">&lt;p&gt;Noodl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=Main_Page&amp;diff=5130</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=Main_Page&amp;diff=5130"/>
		<updated>2025-09-06T18:11:12Z</updated>

		<summary type="html">&lt;p&gt;Noodl: AddLand Page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MainTemplate&lt;br /&gt;
| welcome = Welcome to the &#039;&#039;&#039;&#039;&#039;Pikmin&#039;&#039; Technical Knowledge Base&#039;&#039;&#039;!&lt;br /&gt;
| blurb = A wiki dedicated to the internal files in &#039;&#039;Pikmin&#039;&#039; games.&lt;br /&gt;
| about_title = About&lt;br /&gt;
| about_content =&lt;br /&gt;
Throughout the years, &#039;&#039;Pikmin&#039;&#039; fans have tinkered with the files inside the games in order to better learn how they work, and to create custom content. Since there are a lot of nuances in every little thing, and since newcomers to the concept of file editing show up all the time, this wiki was created with the purpose of serving as a knowledge base for all that the fans know!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Partners&#039;&#039;&#039;:&lt;br /&gt;
* [https://pikminwiki.com Pikipedia] - the &#039;&#039;Pikmin&#039;&#039; wiki&lt;br /&gt;
* [https://discord.gg/msMKc3G Pikcord] - the &#039;&#039;Pikmin&#039;&#039; community Discord server&lt;br /&gt;
* [https://discord.gg/G7Pgkdh Hocotate Hacker] - the &#039;&#039;Pikmin&#039;&#039; hacking community Discord server&lt;br /&gt;
| other_title = What this wiki is &#039;&#039;not&#039;&#039;&lt;br /&gt;
| other_content =&lt;br /&gt;
* It&#039;s not a wiki about pirating &#039;&#039;Pikmin&#039;&#039; games.&lt;br /&gt;
* It&#039;s not a file-sharing service.&lt;br /&gt;
* It&#039;s not a wiki where you document...&lt;br /&gt;
** Canon content. Try [https://pikminwiki.com/ Pikipedia] instead.&lt;br /&gt;
** Fan-made content. Try [https://pikminfanon.com/ Pikmin Fanon] instead.&lt;br /&gt;
** Unused content or regional differences. Try [https://tcrf.net TCRF] instead.&lt;br /&gt;
* It&#039;s not an official source of info. The information here is mostly obtained via experimenting, and is subject to change as new discoveries are made.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Global information ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: auto; width: 75%;&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;Global info&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;margin: auto;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* [[General instructions]]&lt;br /&gt;
* [[Glossary]]&lt;br /&gt;
* [[Save files]]&lt;br /&gt;
* [[:Category:Tools|Tools]]&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Game-specific information ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: auto; width: 75%;&amp;quot;&lt;br /&gt;
! width=&amp;quot;20%;&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&#039;&#039;Pikmin&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;font-size: 90%;&amp;quot;&amp;gt;(and &#039;&#039;New Play Control! Pikmin&#039;&#039;)&amp;lt;/span&amp;gt;&lt;br /&gt;
! width=&amp;quot;20%;&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&#039;&#039;Pikmin 2&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;font-size: 90%;&amp;quot;&amp;gt;(and &#039;&#039;New Play Control! Pikmin 2&#039;&#039;)&amp;lt;/span&amp;gt;&lt;br /&gt;
! width=&amp;quot;20%;&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&#039;&#039;Pikmin 3&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;font-size: 90%;&amp;quot;&amp;gt;(and &#039;&#039;Pikmin 3 Deluxe&#039;&#039;)&amp;lt;/span&amp;gt;&lt;br /&gt;
! width=&amp;quot;20%;&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&#039;&#039;Hey! Pikmin&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
! width=&amp;quot;20%;&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&#039;&#039;Pikmin 4&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GENERAL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | General&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin|Main information]]&lt;br /&gt;
* [[Pikmin instructions|Instructions]]&lt;br /&gt;
* [[Pikmin cheat codes|Useful cheat codes]]&lt;br /&gt;
* [[Pikmin memory addresses|Memory addresses]]&lt;br /&gt;
* [[Pikmin glossary|Glossary]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 2|Main information]]&lt;br /&gt;
* [[Pikmin 2 instructions|Instructions]]&lt;br /&gt;
* [[Pikmin 2 cheat codes|Useful cheat codes]]&lt;br /&gt;
* [[Pikmin 2 memory addresses|Memory addresses]]&lt;br /&gt;
* [[Pikmin 2 troubleshooting|Troubleshooting]]&lt;br /&gt;
* [[Pikmin 2 glossary|Glossary]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 3|Main information]]&lt;br /&gt;
* [[Pikmin 3 instructions|Instructions]]&lt;br /&gt;
* [[Pikmin 3 troubleshooting|Troubleshooting]]&lt;br /&gt;
* [[Pikmin 3 glossary|Glossary]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Hey! Pikmin|Main information]]&lt;br /&gt;
* [[Hey! Pikmin instructions|Instructions]]&lt;br /&gt;
* [[Hey! Pikmin troubleshooting|Troubleshooting]]&lt;br /&gt;
* [[Hey! Pikmin glossary|Glossary]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 4|Main information]]&lt;br /&gt;
* [[Pikmin 4 instructions|Instructions]]&lt;br /&gt;
* [[Pikmin 4 troubleshooting|Troubleshooting]]&lt;br /&gt;
* [[Pikmin 4 glossary|Glossary]]&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FILE LISTS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | File lists&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin directory tree|Directory tree]]&lt;br /&gt;
* [[JAM file list|JAM file list (Pikiseq.arc)]]&lt;br /&gt;
* [[STX file list|STX file list]]&lt;br /&gt;
* [[CIN file list|CIN file list]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 2 directory tree|Directory tree]]&lt;br /&gt;
* [[AST file list|AST (streamed music)]]&lt;br /&gt;
* [[Pikmin 2 BMS file list|BMS (sequenced music)]]&lt;br /&gt;
* [[Pikmin 2 CND file list|CND (sequenced music for caves)]]&lt;br /&gt;
* [[Se.bms|Sound effects list]]&lt;br /&gt;
* [[Pikmin 2 cave units information|List of information of each cave unit]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 3 directory tree|&#039;&#039;Pikmin 3&#039;&#039; directory tree]]&lt;br /&gt;
* [[Pikmin 3 Deluxe directory tree|&#039;&#039;Pikmin 3 Deluxe&#039;&#039; directory tree]]&lt;br /&gt;
* [[BFSTM file list|BFSTM (streamed music)]]&lt;br /&gt;
* [[MSBT file list|MSBT (text string)]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Hey! Pikmin directory tree|Directory tree]]&lt;br /&gt;
* [[BCSTM file list|BCSTM (music)]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 4 directory tree|directory tree]]&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CONSTANTS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Constants&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin identifiers|Identifiers]]&lt;br /&gt;
* [[Olimar&#039;s voyage log table]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 2 identifiers|Identifiers]]&lt;br /&gt;
* [[Pikmin 2 Pikmin states|Pikmin states]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 3 identifiers|Identifiers]]&lt;br /&gt;
* [[Pikmin 3 progress value|Progress value]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Hey! Pikmin identifiers|Identifiers]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 4 identifiers|Identifiers]]&lt;br /&gt;
* [[Pikmin 4 text identifiers|Text Identifiers]]&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PARTICLES&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Particle effects&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[PCR particles]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[JPC particles]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[PTCL particles (Pikmin 3)]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[PTCL particles (Hey Pikmin)]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FILE FORMATS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Stage generation&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin binary GEN format|Binary GEN format]]&lt;br /&gt;
* [[Pikmin route|Routes]]&lt;br /&gt;
&lt;br /&gt;
* Outdated pages&lt;br /&gt;
** [[Pikmin area generator file|Generator]]&lt;br /&gt;
** [[Pikmin gen codes|Gen codes]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* Overworld&lt;br /&gt;
** [[Pikmin 2 area generator file|Overworld generation parameters]]&lt;br /&gt;
** [[Pikmin 2 map lighting files|Lighting]]&lt;br /&gt;
** [[Pikmin 2 waterboxes|Waterbox]]&lt;br /&gt;
** [[Pikmin 2 collision format|Collision]]&lt;br /&gt;
* Caves&lt;br /&gt;
** [[Cave generation parameters|Cave generation parameters]]&lt;br /&gt;
** [[Pikmin 2 Challenge Mode settings|Challenge Mode]]&lt;br /&gt;
** [[Pikmin 2 cave lighting files|Lighting]]&lt;br /&gt;
* Units (cave rooms)&lt;br /&gt;
** [[Cave unit generation|Cave unit generation]]&lt;br /&gt;
** [[Cave unit definition file|Cave unit definition]]&lt;br /&gt;
** [[Cave fixed layout|Cave fixed layout]]&lt;br /&gt;
* [[Pikmin 2 route|Routes]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* Teki Units&lt;br /&gt;
** [[NoraSpawner]]&lt;br /&gt;
* [[Dandori Battles]]&lt;br /&gt;
* [[Disabling Pikmin]]&lt;br /&gt;
* [[AddLand Units]]&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FILE FORMATS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | File formats&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* Archive Formats&lt;br /&gt;
** [[Paired ARC+DIR file]]&lt;br /&gt;
** [[BUN file]] (also ANM)&lt;br /&gt;
** [[BARC file]]&lt;br /&gt;
* Binary formats&lt;br /&gt;
** [[MOD file]] (3D Model)&lt;br /&gt;
** [[TXE file]] (Texture)&lt;br /&gt;
** [[BTI file]] (Texture)&lt;br /&gt;
** [[BLO file]] (2D screen data)&lt;br /&gt;
** [[PCR file]] (Particle effect parameters)&lt;br /&gt;
** [[DC? files]] (Identifier for either DCA or DCK)&lt;br /&gt;
*** [[DCA file]] (Animation)&lt;br /&gt;
*** [[DCK file]] (Animation)&lt;br /&gt;
** [[H4M file]] (Pre-rendered video)&lt;br /&gt;
** [[JAM file]] (Sequenced music)&lt;br /&gt;
** [[STX file]] (Streamed music)&lt;br /&gt;
** [[AW file]] (Sound Bank)&lt;br /&gt;
** [[BX file]] (Sound system archive)&lt;br /&gt;
** [[Pikmin parameter files|Parameter Files]]&lt;br /&gt;
* Plaintext Formats&lt;br /&gt;
** [[CIN file]] (Cutscene resource manager)&lt;br /&gt;
** [[DSK file]] (Cutscene data)&lt;br /&gt;
** [[DMD file]] (Intermediary 3D model)&lt;br /&gt;
** [[CNV file]] (Intermediary conversion file)&lt;br /&gt;
* Unknown Formats&lt;br /&gt;
** [[GST file]]&lt;br /&gt;
** [[ACT file]]&lt;br /&gt;
** [[CARD file]]&lt;br /&gt;
* Missing Formats&lt;br /&gt;
** [[DVW file]] (Material file?) &lt;br /&gt;
** [[JMP file]] (Intermediary plaintext 3D model file?)&lt;br /&gt;
** [[MD3 file]] (3D Model)&lt;br /&gt;
** [[BSP flle]] (3D Model)&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* Archive Formats&lt;br /&gt;
** [[SZS file]]&lt;br /&gt;
** [[RARC file]]&lt;br /&gt;
* [[BMD file]] (J3D model)&lt;br /&gt;
* [[BTI file]] (Texture)&lt;br /&gt;
* [[BTK file]] (Animated texture)&lt;br /&gt;
* [[JPC file]] (Particle effect container)&lt;br /&gt;
** [[JPA file]] (Particle effect)&lt;br /&gt;
* [[BCA file]] (Animation)&lt;br /&gt;
* [[BCK file]] (Animation)&lt;br /&gt;
* [[AAF file]] (Sound system archive)&lt;br /&gt;
* [[BMS file]] (Sequenced music)&lt;br /&gt;
* [[AST file]] (Streamed music)&lt;br /&gt;
* [[AW file]] (Soundfont)&lt;br /&gt;
* [[THP file]] (Pre-rendered video)&lt;br /&gt;
* [[BLO file]] (2D screen data)&lt;br /&gt;
* [[STB file]] (Cutscene data)&lt;br /&gt;
* [[BMG file]] (Text)&lt;br /&gt;
* [[BPK file]]&lt;br /&gt;
* [[BRK file]]&lt;br /&gt;
* [[BMC file]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Misc.&lt;br /&gt;
** [[DWN file]] (e-Reader minigames?)&lt;br /&gt;
** [[DMD file]] (Intermediary 3D model)&lt;br /&gt;
** [[Pikmin 2 title screen|Title screen]]&lt;br /&gt;
** [[Pikmin 2 save file|Saved game data]]&lt;br /&gt;
** [[2-Player Battle stage parameters]]&lt;br /&gt;
** [[Mail]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
* [[Pikmin 3 radar files|Radar]]&lt;br /&gt;
* [[BFSTM file|BFSTM (streamed music)]]&lt;br /&gt;
* [[BFRES file|BFRES (file container, usually for 3D models and animations)]]&lt;br /&gt;
* [[BFLYT file|BFLYT (2D layout data)]]&lt;br /&gt;
* [[MSBT file (Pikmin 3)|MSBT (text string)]]&lt;br /&gt;
* [[MSBF file (Pikmin 3)|MSBF (message flow)]]&lt;br /&gt;
* [[FSKB file]] (Unknown)&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
* [[Hey! Pikmin save file|Saved game data]]&lt;br /&gt;
* [[ARC file (Hey! Pikmin)|ARC (archive)]]&lt;br /&gt;
* [[BCH file|BCH (animation)]]&lt;br /&gt;
* [[BFLIM file|BFLIM (image)]]&lt;br /&gt;
* [[MSBT file (Hey! Pikmin)|MSBT (text string)]]&lt;br /&gt;
* [[Z file|Z (archive)]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[WEBM file|WEBM (video)]]&lt;br /&gt;
* [[BNVIB file|BNVIB]]&lt;br /&gt;
* [[UTOC/UCAS file|UTOC/UCAS (Archive for UASSET Files)]]&lt;br /&gt;
* [[UASSET file|UASSET File (Unreal Engine Asset File)]]&lt;br /&gt;
* [[UFONT file|UFONT]]&lt;br /&gt;
* [[LOCRES file|LOCRES]]&lt;br /&gt;
* [[WEM file|WEM]]&lt;br /&gt;
* [[BNK file|BNK]]&lt;br /&gt;
* [[Save Files]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PARAMETERS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Parameters&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin labeled parameter file|Labeled]]&lt;br /&gt;
** [[Pikmin AI constants|AI constants]]&lt;br /&gt;
** [[Pikmin cunit parameters|Cuint]]&lt;br /&gt;
** [[Pikmin demo parameters|Demo]]&lt;br /&gt;
** [[Pikmin game parameters|Game parameters]]&lt;br /&gt;
** [[Pikmin navi parameters|NaviMgr]]&lt;br /&gt;
** [[Pikmin piki parameters|PikiMgr]]&lt;br /&gt;
** [[Pikmin sound parameters|Sound]]&lt;br /&gt;
** [[Pikmin wave parameters|Wave]]&lt;br /&gt;
** [[Pikmin prefs parameters|Prefs]]&lt;br /&gt;
** [[Pikmin boss parameters|Boss]]&lt;br /&gt;
* [[Pikmin unlabeled parameter file|Unlabeled]]&lt;br /&gt;
** [[Pikmin camera parameters|Camera]]&lt;br /&gt;
** [[Pikmin key parameters|Key]]&lt;br /&gt;
** [[Pikmin enemy parameter file format|Enemy]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[naviParms|Leader]]&lt;br /&gt;
* [[pikiParms|Pikmin]]&lt;br /&gt;
* [[CameraParms|Camera]]&lt;br /&gt;
* [[Pikmin 2 enemy parameters|Entity]]&lt;br /&gt;
* [[Titan Dweevil parameters]]&lt;br /&gt;
* [[Trackmap parameters|trackMap parameters]]&lt;br /&gt;
* [[Pikmin 2 day time parameters|Day time parameters]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[carryParam|Carry]]&lt;br /&gt;
* [[fruitsParam|Fruit]]&lt;br /&gt;
* [[pikminParam|Pikmin]]&lt;br /&gt;
* [[itemprogressParam|Item progress]]&lt;br /&gt;
* [[Mission settings]]&lt;br /&gt;
* [[GameobjectParam|Object]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
* [[ActorSerializeParameter and AI]]&lt;br /&gt;
* [[Data Table/Actor Parameters]]&lt;br /&gt;
* [[Enemy Parameters]]&lt;br /&gt;
* [[ActorGeneratorList]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MANAGERS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Managers&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[pikibank.bx|Pikmin audio system]]&lt;br /&gt;
* [[Pikmin pellet manager|Pellets]]&lt;br /&gt;
* [[Pikmin anim manager|Animations]]&lt;br /&gt;
* [[Pikmin teki manager|Tekis (DOL)]]&lt;br /&gt;
* [[Pikmin stage manager|Stage manager]]&lt;br /&gt;
* [[Pikmin stage information|Stage information / lighting]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[PSound.aaf|Audio system]]&lt;br /&gt;
* Pellet List&lt;br /&gt;
** [[Pikmin 2 otakara_config.txt|Treasure Config]]&lt;br /&gt;
** [[Pikmin 2 item_config.txt|Upgrade Config]]&lt;br /&gt;
** [[Pikmin 2 carcass_config.txt|Carcass Config]]&lt;br /&gt;
** [[Pikmin 2 numberpellet_config.txt|Number Pellet Config]]&lt;br /&gt;
* [[Pikmin 2 animmgr.txt|Animation Manager]]&lt;br /&gt;
* [[Pikmin 2 collinfo.txt|Collision Info]]&lt;br /&gt;
&lt;br /&gt;
* [[Mail Table]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
SCREENS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Screens&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Screen file list (Pikmin)]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Screen file list (Pikmin 2)]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EXPLANATIONS AND NOTES&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Explanations and Notes&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin unread files|Unread files]]&lt;br /&gt;
* [[Pikmin disable archives trick|Disable loading from archives]]&lt;br /&gt;
* [[Pikmin Emperor crash|Emperor crash]]&lt;br /&gt;
* [[Minty Ramblings]]&lt;br /&gt;
* [[Custom sequenced Pikmin music|Custom sequenced music]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Cave spawning]]&lt;br /&gt;
* [[Custom models|Custom models]]&lt;br /&gt;
* [[How J3D model materials work]]&lt;br /&gt;
* [[Submerged Castle oddities|Special cave properties]]&lt;br /&gt;
* [[How Pikmin 2 loads text|How &#039;&#039;Pikmin 2&#039;&#039; loads text]]&lt;br /&gt;
* [[Sound Replacement Tutorial|Sound Replacement Tutorial]]&lt;br /&gt;
* [[Enemy Memory Usage]]&lt;br /&gt;
* [[Disassembly instructions]]&lt;br /&gt;
* [[Jsystem]]&lt;br /&gt;
* [[Pikmin 2 gEnemyInfo|gEnemyInfo]]&lt;br /&gt;
* [[Epoch Notes]]&lt;br /&gt;
* [[User:Captain Salty/Blo Editing Notes|Blo Editing Notes]]&lt;br /&gt;
* [[Cutscene Editing and Creation]]&lt;br /&gt;
* [[Cutscene Notes]]&lt;br /&gt;
* [[Creating Interactive BMS Files|Creating interactive area music]]&lt;br /&gt;
* [[Creating cave music|Creating interactive cave music]]&lt;br /&gt;
* [[Editing code with Decomp|Editing code with Decomp]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 3 oddities|Oddities]]&lt;br /&gt;
* [[Story mode maps in other modes]]&lt;br /&gt;
* [[Pikmin 3 Bingo Battle|Bingo Battle]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Hey! Pikmin unread files|Unread files]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* Documentation&lt;br /&gt;
** [[Lilith&#039;s P4 Notes]]&lt;br /&gt;
** [[Pikmin 4 Demo Research]]&lt;br /&gt;
* Tutorials&lt;br /&gt;
** [[Model Importing Tutorial]]&lt;br /&gt;
** [[WEM Audio Modding Tutorial]]&lt;br /&gt;
** [[Enemy Duplication Tutorial (WIP)]]&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TOOLS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Tools&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[PikBinGen]]&lt;br /&gt;
* [[Archive Toolkit]]&lt;br /&gt;
* [[OpenGL / Dolphin System|OpenGL / Dolphin System]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Cave Creator]]&lt;br /&gt;
* [[Pikmin 2 Routes Editor &amp;amp; Gen Editor]]&lt;br /&gt;
* [[obj2grid]]&lt;br /&gt;
* [[DOL-Ckit]]&lt;br /&gt;
* [[Drought Enders Cave Creator]]&lt;br /&gt;
* [[SuperBMD]]&lt;br /&gt;
* [[FinModelUtility]]&lt;br /&gt;
* [[GameCube File Tools]]&lt;br /&gt;
* [[pyblo2-gui]]&lt;br /&gt;
* [[pikminBMGtool]]&lt;br /&gt;
* [[btk-conv]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Gen Editor]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Hey! Pikmin stage viewer]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[P4UassetEditor]]&lt;br /&gt;
* [[Modified FModel]]&lt;br /&gt;
* [[UCas/UToc Packer]]&lt;br /&gt;
* [[Dandori DB]]&lt;br /&gt;
* [[Dandori Desktop]]&lt;br /&gt;
* [[UE4LocalizationsTool]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
* [[:Category:Pages with things to do|Things to do]]&lt;br /&gt;
* [[:Category:Pages with unsure information|Unsure info that needs to be confirmed]]&lt;br /&gt;
&lt;br /&gt;
[[Category:PikminTKB]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=ActorSerializeParameter_and_AI&amp;diff=4844</id>
		<title>ActorSerializeParameter and AI</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=ActorSerializeParameter_and_AI&amp;diff=4844"/>
		<updated>2025-01-27T21:12:47Z</updated>

		<summary type="html">&lt;p&gt;Noodl: Fix filename&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All of the info on this page (thus far) is research and assumptions by [[Noodl]] - it may not all be entirely correct.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; is a property on each object in an &amp;lt;code&amp;gt;ActorGeneratorList&amp;lt;/code&amp;gt;. It contains much of the &amp;quot;per-instance&amp;quot; characteristics of the enemy it is generating, and contains parameter such as AI, object life and audio. &lt;br /&gt;
&lt;br /&gt;
Each member of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; is an object containing &amp;lt;code&amp;gt;Static&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Dynamic&amp;lt;/code&amp;gt; properties, both of which are varying-width arrays of 8bit integers that represent other data types. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ActorSerializeParameter&amp;quot;: {&lt;br /&gt;
        &amp;quot;AI&amp;quot;: {&lt;br /&gt;
            &amp;quot;Static&amp;quot;: [],&lt;br /&gt;
            &amp;quot;Dynamic&amp;quot;: [];&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;Hash&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CheckComp&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;ActorParameter&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;SubAI&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Life&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;PortalTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;DemoTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Pikmin&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CharacterEdit&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;PopPlace&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Strategy&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakEmitterConfig&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakSimpleState&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakMultiplePosition&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakAudioTable&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;WaterTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;NavMeshTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Affordance&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;HiddenBoxTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;NarrowSpaceBoxTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;WarpTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;ActionMarker&amp;quot;: { ... },&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the majority of actors in the game, most of the fields within &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; are the same for each type of enemy - that is, all Kochappys in the game have the same Life, ActorParameter, CheckComp, etc. A data scrape of each unique value that each type of enemy can have can be found [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/entityData.json/ here]. This can be used for sourcing the non-changing values, or for various examples of each byte array for every creature and object. (Generating code is [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/scrape.js/ here]).&lt;br /&gt;
&lt;br /&gt;
== AI ==&lt;br /&gt;
&lt;br /&gt;
AI is the interesting and important parameter. It controls per-instance parameters for actors such as drops, territory, and configuration for gimmicks. I currently believe that AI is mapped on top of an entity&#039;s own blueprint configuration from its &amp;lt;code&amp;gt;Placeables/&amp;lt;/code&amp;gt; file, with AI able to send overrides to parts of it, though I&#039;ve yet to work out where these bytes go. We can see traces of the Sublevels files showing AI gen variables with overriden base parameters.&lt;br /&gt;
&lt;br /&gt;
=== Concepts ===&lt;br /&gt;
&lt;br /&gt;
Before trying to break down a byte array, it helps to understand a few concepts of the data types used:&lt;br /&gt;
&lt;br /&gt;
* Each integer in the array is a single 8-bit/1-byte value, so can only go up to 255.&lt;br /&gt;
* The arrays are not fixed to 32-bit boundaries. A 4-byte float can be adjacent to a 16bit integer.&lt;br /&gt;
* Booleans are 4-bytes with the 0/1 being in the first index&lt;br /&gt;
* Floats are little-endian, and 4 bytes long. For example the value &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; will be 4 bytes of &amp;lt;code&amp;gt;0, 0, 200, 66&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Integers can also be encoded across 2-bytes (two integers of this array). For example, the value &amp;lt;code&amp;gt;271&amp;lt;/code&amp;gt; would be &amp;lt;code&amp;gt;15,1&amp;lt;/code&amp;gt; - 15 + (256 * 1). They are also sometimes just 1-byte long with the value at index 0.&lt;br /&gt;
* Strings are encoded by 4 bytes dictating the length of the string (null terminator included) followed by the string&#039;s characters in ASCII codes, ending with &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. For example the string of &amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt; will be encoded as &amp;lt;code&amp;gt;5, 0, 0, 0, 78, 111, 110, 101, 0&amp;lt;/code&amp;gt;, with 5 being the length of the string (4 chars + &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;).&lt;br /&gt;
* When arrays/objects are used (for fields like &amp;lt;code&amp;gt;DropConditions&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;bSetTerritory&amp;lt;/code&amp;gt;, there is often a 4 byte boolean that dictates if the rest of the object is present, or the number of items in the array. For example, with territory, if &amp;lt;code&amp;gt;bSetTerritory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, the bytes will look like &amp;lt;code&amp;gt;0, 0, 0, 0, ... &amp;lt;/code&amp;gt; followed by whatever else comes after. However if it is true (&amp;lt;code&amp;gt;1, 0, 0, 0&amp;lt;/code&amp;gt;), 5 floats (X, Y, Z, HalfHeight and Radius) will follow, making the array vary in length.&lt;br /&gt;
* The &amp;lt;code&amp;gt;GeneratorVersion&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;AssetVersion&amp;lt;/code&amp;gt; matter. There are 3 versions in the game. The main noted difference is &amp;lt;code&amp;gt;8626647418&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;8626647626&amp;lt;/code&amp;gt; having 4 extra bytes in &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt;, while version &amp;lt;code&amp;gt;8626647386&amp;lt;/code&amp;gt; does not. This makes it important to know which version the bytes are from when charting in case index comparisons are off by 4 resulting in undefined behaviour if giving the game an array where everything is +-4. This is easily observable by compare the Geyser in Area001 to any other geyser in the game.&lt;br /&gt;
&lt;br /&gt;
[[Dandori Desktop]] provides tools for byte conversions that can aid in finding values.&lt;br /&gt;
&lt;br /&gt;
== Charts == &lt;br /&gt;
&lt;br /&gt;
Attempts have been made to chart the bytes of various AI parameters to uncover patterns and the locations of values in order to manipulate them.&lt;br /&gt;
&lt;br /&gt;
There are many bytes AFTER the end of the inventory which ends in 4 bytes of &amp;lt;code&amp;gt;255, 255, 255, 255&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt;), but I have no idea what they do yet. I believe they&#039;re probably the overrides for the enemy&#039;s AI_GEN_VARIABLE, and other objects like &amp;lt;code&amp;gt;SniffPointParameter&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Creature AI ===&lt;br /&gt;
Details the drop system for a regular enemy (and eggs). The inventory system (&amp;lt;code&amp;gt;DropParameter&amp;lt;/code&amp;gt;) used here is nearly universal in the game, with objects having a slightly different structure for some reason, but is mostly the same, so it helps to understand creatures first. &lt;br /&gt;
&lt;br /&gt;
[[File:P4-creature-ai-inventory-bytes.png|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== ActorSpawner AI ===&lt;br /&gt;
ActorSpawners are a little different, and their only drop is the thing they spawn, with some configuration for it.&lt;br /&gt;
&lt;br /&gt;
[[File:P4-actorspawner-ai.png|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== GroupDropManager AI ===&lt;br /&gt;
&lt;br /&gt;
[[File:P4-gdm-ai.png ‎|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== NoraSpawner AI ===&lt;br /&gt;
&lt;br /&gt;
[[File:P4-noraspawner-ai.png ‎|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== PortalTrigger Gen Variable ===&lt;br /&gt;
&lt;br /&gt;
This chart is for the &amp;lt;code&amp;gt;PortalTrigger.Static&amp;lt;/code&amp;gt; part of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; and will usually be used in conjunction with portal objects like &amp;lt;code&amp;gt;MadoriRuins&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DownPortal&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-portaltrigger-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== AreaBase AI Gen Variable ===&lt;br /&gt;
&lt;br /&gt;
This chart is for the base camps.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-areabasecamp-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sprinkler AI and ObjectAIParameter ===&lt;br /&gt;
&lt;br /&gt;
Objects mostly seem composed of two objects - &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; and an entity-specific object, like &amp;lt;code&amp;gt;SprinklerAIParameter&amp;lt;/code&amp;gt;. The former contains inventories (&amp;lt;code&amp;gt;DropParameter&amp;lt;/code&amp;gt;) and some stuff to do with edge collision it seems, while the latter controls everything specific to the entity. The chart below illustrates it for sprinklers.&lt;br /&gt;
&lt;br /&gt;
* To have a valve that is permanently on - enable `bSprinklerOnly` and set `valveID` to `None`. &lt;br /&gt;
* To connect a valve, match the `valveID` to the valve object&#039;s ID. The only valve config I&#039;ve found works is to use the `Build` workType. This setup will have a sprinkler turn on once for `OpenTime` number of seconds upon valve activation, then turn off - this is how Cave013 douses fire. &lt;br /&gt;
* To have a sprinkler always on, make a `NavMeshTriggerLinkForSplash` object on top of the sprinkler, and make the `NavMeshTriggerID`s for both match. The sprinkler and valve cannot have the same `demoBindName`. I&#039;ve not played much with these, but I believe they _may_ be to do with saving the state of the sprinkler after the cutscene has played. In my working example, I used `GSprinkler05` and `GValveOnce06` for my `demoBindName`s, and `demoId` of `0`.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-sprinkler-objectAI.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== Valve AI ===&lt;br /&gt;
&lt;br /&gt;
Valves have a few properties in their parameter, but ObjectParameter is mostly unused here. There are some missing values that I haven&#039;t found the indexes for, but you can see the default values in FModel&#039;s blueprint. The enum values for EValveWorkType are also unknown, but 2 and 6 are confirmed. &lt;br /&gt;
 &lt;br /&gt;
[[File:p4-valveai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== NavMeshTriggers ===&lt;br /&gt;
&lt;br /&gt;
There are 3 types: &amp;lt;code&amp;gt;NavMeshTrigger&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NavMeshTriggerClear&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NavMeshTriggerLinkForSplash&amp;lt;/code&amp;gt; (for sprinklers). My current understanding is that these triggers send pulses to whatever they&#039;re linked to on a timer or some conditions. These bytes come from the &amp;lt;code&amp;gt;NavMeshTrigger&amp;lt;/code&amp;gt; part of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt;, and seem to be some of the only objects in the game that use that property. It is worth noting that the &amp;lt;code&amp;gt;AI&amp;lt;/code&amp;gt; property for &amp;lt;code&amp;gt;NavMeshTriggerLinkForSplash&amp;lt;/code&amp;gt; is identical for every instance of this actor across the game. &amp;lt;code&amp;gt;NavMeshTriggerClear&amp;lt;/code&amp;gt; has several different sets of AI bytes though.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-navmeshtrigger.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== Geyser AI ===&lt;br /&gt;
&lt;br /&gt;
The geyser&#039;s AI bytes are actually comprised of an &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; as usual, followed by the &amp;lt;code&amp;gt;GeyserAI_GEN_VARIABLE&amp;lt;/code&amp;gt; and then the &amp;lt;code&amp;gt;NavLink_GEN_VARIALBE&amp;lt;/code&amp;gt;. What&#039;s interesting to note about this is that it means the &amp;lt;code&amp;gt;AI.Static&amp;lt;/code&amp;gt; array can contain more than just what is in &amp;lt;code&amp;gt;AI_GEN_VARIABLE&amp;lt;/code&amp;gt;. Primitive geysers can be made simply by editing the &amp;lt;code&amp;gt;Right&amp;lt;/code&amp;gt; vector, which applies the vector to your coordinates with some velocity number.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-geyser-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== Treasure AI ===&lt;br /&gt;
 &lt;br /&gt;
[[File:P4-otakara-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== WaterBox AI ===&lt;br /&gt;
&lt;br /&gt;
WaterBoxes have a few components all detailed in the chart. They can be sent logical pulses by entities like switches, valves and drains by linking the &amp;lt;code&amp;gt;waterBoxSwitchID&amp;lt;/code&amp;gt;. Drains (Mizunuki), while charted here, are not actually interactible entities, instead the thought is that they get triggered by &amp;lt;code&amp;gt;Excavation&amp;lt;/code&amp;gt; holes on top of them, which are not yet charted. As usual, [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/types.js#L152-L182 Dandori Desktop] has a list of sound IDs and map texture paths scraped from the game.&lt;br /&gt;
&lt;br /&gt;
It is not at all understood what &amp;lt;code&amp;gt;WaterBoxNav&amp;lt;/code&amp;gt;s do or what its vector could be applied to, nor &amp;lt;code&amp;gt;WaterBoxFluctuation&amp;lt;/code&amp;gt;s although the latter may just be the moving ones. I haven&#039;t tested tonnes.&lt;br /&gt;
&lt;br /&gt;
[[File:P4-Waterbox-Ais.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== Researching ===&lt;br /&gt;
&lt;br /&gt;
The best way of breaking down the AI parameter (I have found) is to combine the blueprint JSONs from the &amp;lt;code&amp;gt;Sublevels/&amp;lt;/code&amp;gt; folder, with the &amp;lt;code&amp;gt;ActorPlacementInfo&amp;lt;/code&amp;gt; file of the same type. The Sublevels files contain the gen_variables that seem to be encoded into the byte arrays of ActorSerializeParameter.&lt;br /&gt;
&lt;br /&gt;
AI parameters can be found by searching for &amp;lt;code&amp;gt;{entity}AI_GEN_VARIABLE&amp;lt;/code&amp;gt;, for example &amp;lt;code&amp;gt;ElecMushiAI_GEN_VARIABLE&amp;lt;/code&amp;gt; for Anode Beetles. Most of the contents of that object&#039;s &amp;lt;code&amp;gt;Properties&amp;lt;/code&amp;gt; will be encoded in that actor&#039;s &amp;lt;code&amp;gt;ActorSerializeParameter.AI.Static&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;ActorPlacementInfo&amp;lt;/code&amp;gt; file, so you can compare things like the drop numbers, asset path and other such floats for occurrences of those values in the AI array. Strings are often the easiest to find/locate with due to their easy to spot nature (look for the big sequence of non-0 numbers and decode it to see if it matches what you need). Finding two instances in Sublevel files that have different values for a given property (or the property being set at all for infrequent ones) will tell you which actor instances to look for in the AP files, which you can then anaylse the bytes for to find your different value, giving you its array index/type.&lt;br /&gt;
&lt;br /&gt;
A scrape of all of the sublevel files can be found in [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/sublevels.json Dandori Desktop&#039;s repo] which collects every parameter that each entity ever defines - so every drop, and config param ever given to any Kochappy, for example. This is very useful for finding all the potential values of random things like &amp;lt;code&amp;gt;GameRulePermissionFlag&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;CustomParameter&amp;lt;/code&amp;gt;, and is a great starting point for piecing parts of the AI puzzles together, as params like &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;TekiAIParameter&amp;lt;/code&amp;gt; are shared frequently, with individual properties being set on certain entities. This isn&#039;t comprehensive as many properties are just left defaulted, which doesn&#039;t mean they can&#039;t be changed, just that we don&#039;t have 2 differing examples to easily locate them in the bytes.&lt;br /&gt;
&lt;br /&gt;
The blueprints can also be viewed in FModel (in &amp;lt;code&amp;gt;Placeables/&amp;lt;/code&amp;gt;), and you can find the &amp;lt;code&amp;gt;AI_GEN_VARIABLE&amp;lt;/code&amp;gt;s which should have all the property names and their default values. I&#039;ve had limited success here, as you often can&#039;t just find the value in the AI bytes, but it can definitely give insight into what must be available in the object, and other possible enum values etc. This leads me to think it&#039;s possible that non-overriden fields of the gen variable objects are left zeroed, which doesn&#039;t make much sense, because how would you set a value of zero? idk.&lt;br /&gt;
&lt;br /&gt;
=== Data Dumps ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/entityData.json/ entityData.json] - a dump of every unique value every actor has in the game from the AP files (non-night)&lt;br /&gt;
* [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/sublevels.json Sublevels.json] - a dump of every value each actor can have from the Sublevels files - these are the English overriden parameter names &lt;br /&gt;
* [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/scrape.js/ scrape.js] - the code to generate the above lists - can be supplied an actor name to extract its section from &amp;lt;code&amp;gt;entityData.json&amp;lt;/code&amp;gt; given how bulky that file is. Clone Dandori Desktop and run &amp;lt;code&amp;gt;node scrape.js Kochappy&amp;lt;/code&amp;gt; to dump Kochappy&#039;s data into the &amp;lt;code&amp;gt;extractions/&amp;lt;/code&amp;gt; folder&lt;br /&gt;
&lt;br /&gt;
[[Category:Pikmin 4]]&lt;br /&gt;
[[Category:Parameters]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=ActorSerializeParameter_and_AI&amp;diff=4843</id>
		<title>ActorSerializeParameter and AI</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=ActorSerializeParameter_and_AI&amp;diff=4843"/>
		<updated>2025-01-27T21:12:08Z</updated>

		<summary type="html">&lt;p&gt;Noodl: Waterboxes and GeneratorVersion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All of the info on this page (thus far) is research and assumptions by [[Noodl]] - it may not all be entirely correct.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; is a property on each object in an &amp;lt;code&amp;gt;ActorGeneratorList&amp;lt;/code&amp;gt;. It contains much of the &amp;quot;per-instance&amp;quot; characteristics of the enemy it is generating, and contains parameter such as AI, object life and audio. &lt;br /&gt;
&lt;br /&gt;
Each member of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; is an object containing &amp;lt;code&amp;gt;Static&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Dynamic&amp;lt;/code&amp;gt; properties, both of which are varying-width arrays of 8bit integers that represent other data types. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ActorSerializeParameter&amp;quot;: {&lt;br /&gt;
        &amp;quot;AI&amp;quot;: {&lt;br /&gt;
            &amp;quot;Static&amp;quot;: [],&lt;br /&gt;
            &amp;quot;Dynamic&amp;quot;: [];&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;Hash&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CheckComp&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;ActorParameter&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;SubAI&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Life&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;PortalTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;DemoTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Pikmin&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CharacterEdit&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;PopPlace&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Strategy&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakEmitterConfig&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakSimpleState&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakMultiplePosition&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakAudioTable&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;WaterTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;NavMeshTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Affordance&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;HiddenBoxTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;NarrowSpaceBoxTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;WarpTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;ActionMarker&amp;quot;: { ... },&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the majority of actors in the game, most of the fields within &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; are the same for each type of enemy - that is, all Kochappys in the game have the same Life, ActorParameter, CheckComp, etc. A data scrape of each unique value that each type of enemy can have can be found [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/entityData.json/ here]. This can be used for sourcing the non-changing values, or for various examples of each byte array for every creature and object. (Generating code is [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/scrape.js/ here]).&lt;br /&gt;
&lt;br /&gt;
== AI ==&lt;br /&gt;
&lt;br /&gt;
AI is the interesting and important parameter. It controls per-instance parameters for actors such as drops, territory, and configuration for gimmicks. I currently believe that AI is mapped on top of an entity&#039;s own blueprint configuration from its &amp;lt;code&amp;gt;Placeables/&amp;lt;/code&amp;gt; file, with AI able to send overrides to parts of it, though I&#039;ve yet to work out where these bytes go. We can see traces of the Sublevels files showing AI gen variables with overriden base parameters.&lt;br /&gt;
&lt;br /&gt;
=== Concepts ===&lt;br /&gt;
&lt;br /&gt;
Before trying to break down a byte array, it helps to understand a few concepts of the data types used:&lt;br /&gt;
&lt;br /&gt;
* Each integer in the array is a single 8-bit/1-byte value, so can only go up to 255.&lt;br /&gt;
* The arrays are not fixed to 32-bit boundaries. A 4-byte float can be adjacent to a 16bit integer.&lt;br /&gt;
* Booleans are 4-bytes with the 0/1 being in the first index&lt;br /&gt;
* Floats are little-endian, and 4 bytes long. For example the value &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; will be 4 bytes of &amp;lt;code&amp;gt;0, 0, 200, 66&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Integers can also be encoded across 2-bytes (two integers of this array). For example, the value &amp;lt;code&amp;gt;271&amp;lt;/code&amp;gt; would be &amp;lt;code&amp;gt;15,1&amp;lt;/code&amp;gt; - 15 + (256 * 1). They are also sometimes just 1-byte long with the value at index 0.&lt;br /&gt;
* Strings are encoded by 4 bytes dictating the length of the string (null terminator included) followed by the string&#039;s characters in ASCII codes, ending with &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. For example the string of &amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt; will be encoded as &amp;lt;code&amp;gt;5, 0, 0, 0, 78, 111, 110, 101, 0&amp;lt;/code&amp;gt;, with 5 being the length of the string (4 chars + &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;).&lt;br /&gt;
* When arrays/objects are used (for fields like &amp;lt;code&amp;gt;DropConditions&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;bSetTerritory&amp;lt;/code&amp;gt;, there is often a 4 byte boolean that dictates if the rest of the object is present, or the number of items in the array. For example, with territory, if &amp;lt;code&amp;gt;bSetTerritory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, the bytes will look like &amp;lt;code&amp;gt;0, 0, 0, 0, ... &amp;lt;/code&amp;gt; followed by whatever else comes after. However if it is true (&amp;lt;code&amp;gt;1, 0, 0, 0&amp;lt;/code&amp;gt;), 5 floats (X, Y, Z, HalfHeight and Radius) will follow, making the array vary in length.&lt;br /&gt;
* The &amp;lt;code&amp;gt;GeneratorVersion&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;AssetVersion&amp;lt;/code&amp;gt; matter. There are 3 versions in the game. The main noted difference is &amp;lt;code&amp;gt;8626647418&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;8626647626&amp;lt;/code&amp;gt; having 4 extra bytes in &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt;, while version &amp;lt;code&amp;gt;8626647386&amp;lt;/code&amp;gt; does not. This makes it important to know which version the bytes are from when charting in case index comparisons are off by 4 resulting in undefined behaviour if giving the game an array where everything is +-4. This is easily observable by compare the Geyser in Area001 to any other geyser in the game.&lt;br /&gt;
&lt;br /&gt;
[[Dandori Desktop]] provides tools for byte conversions that can aid in finding values.&lt;br /&gt;
&lt;br /&gt;
== Charts == &lt;br /&gt;
&lt;br /&gt;
Attempts have been made to chart the bytes of various AI parameters to uncover patterns and the locations of values in order to manipulate them.&lt;br /&gt;
&lt;br /&gt;
There are many bytes AFTER the end of the inventory which ends in 4 bytes of &amp;lt;code&amp;gt;255, 255, 255, 255&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt;), but I have no idea what they do yet. I believe they&#039;re probably the overrides for the enemy&#039;s AI_GEN_VARIABLE, and other objects like &amp;lt;code&amp;gt;SniffPointParameter&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Creature AI ===&lt;br /&gt;
Details the drop system for a regular enemy (and eggs). The inventory system (&amp;lt;code&amp;gt;DropParameter&amp;lt;/code&amp;gt;) used here is nearly universal in the game, with objects having a slightly different structure for some reason, but is mostly the same, so it helps to understand creatures first. &lt;br /&gt;
&lt;br /&gt;
[[File:P4-creature-ai-inventory-bytes.png|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== ActorSpawner AI ===&lt;br /&gt;
ActorSpawners are a little different, and their only drop is the thing they spawn, with some configuration for it.&lt;br /&gt;
&lt;br /&gt;
[[File:P4-actorspawner-ai.png|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== GroupDropManager AI ===&lt;br /&gt;
&lt;br /&gt;
[[File:P4-gdm-ai.png ‎|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== NoraSpawner AI ===&lt;br /&gt;
&lt;br /&gt;
[[File:P4-noraspawner-ai.png ‎|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== PortalTrigger Gen Variable ===&lt;br /&gt;
&lt;br /&gt;
This chart is for the &amp;lt;code&amp;gt;PortalTrigger.Static&amp;lt;/code&amp;gt; part of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; and will usually be used in conjunction with portal objects like &amp;lt;code&amp;gt;MadoriRuins&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DownPortal&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-portaltrigger-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== AreaBase AI Gen Variable ===&lt;br /&gt;
&lt;br /&gt;
This chart is for the base camps.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-areabasecamp-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sprinkler AI and ObjectAIParameter ===&lt;br /&gt;
&lt;br /&gt;
Objects mostly seem composed of two objects - &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; and an entity-specific object, like &amp;lt;code&amp;gt;SprinklerAIParameter&amp;lt;/code&amp;gt;. The former contains inventories (&amp;lt;code&amp;gt;DropParameter&amp;lt;/code&amp;gt;) and some stuff to do with edge collision it seems, while the latter controls everything specific to the entity. The chart below illustrates it for sprinklers.&lt;br /&gt;
&lt;br /&gt;
* To have a valve that is permanently on - enable `bSprinklerOnly` and set `valveID` to `None`. &lt;br /&gt;
* To connect a valve, match the `valveID` to the valve object&#039;s ID. The only valve config I&#039;ve found works is to use the `Build` workType. This setup will have a sprinkler turn on once for `OpenTime` number of seconds upon valve activation, then turn off - this is how Cave013 douses fire. &lt;br /&gt;
* To have a sprinkler always on, make a `NavMeshTriggerLinkForSplash` object on top of the sprinkler, and make the `NavMeshTriggerID`s for both match. The sprinkler and valve cannot have the same `demoBindName`. I&#039;ve not played much with these, but I believe they _may_ be to do with saving the state of the sprinkler after the cutscene has played. In my working example, I used `GSprinkler05` and `GValveOnce06` for my `demoBindName`s, and `demoId` of `0`.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-sprinkler-objectAI.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== Valve AI ===&lt;br /&gt;
&lt;br /&gt;
Valves have a few properties in their parameter, but ObjectParameter is mostly unused here. There are some missing values that I haven&#039;t found the indexes for, but you can see the default values in FModel&#039;s blueprint. The enum values for EValveWorkType are also unknown, but 2 and 6 are confirmed. &lt;br /&gt;
 &lt;br /&gt;
[[File:p4-valveai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== NavMeshTriggers ===&lt;br /&gt;
&lt;br /&gt;
There are 3 types: &amp;lt;code&amp;gt;NavMeshTrigger&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NavMeshTriggerClear&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NavMeshTriggerLinkForSplash&amp;lt;/code&amp;gt; (for sprinklers). My current understanding is that these triggers send pulses to whatever they&#039;re linked to on a timer or some conditions. These bytes come from the &amp;lt;code&amp;gt;NavMeshTrigger&amp;lt;/code&amp;gt; part of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt;, and seem to be some of the only objects in the game that use that property. It is worth noting that the &amp;lt;code&amp;gt;AI&amp;lt;/code&amp;gt; property for &amp;lt;code&amp;gt;NavMeshTriggerLinkForSplash&amp;lt;/code&amp;gt; is identical for every instance of this actor across the game. &amp;lt;code&amp;gt;NavMeshTriggerClear&amp;lt;/code&amp;gt; has several different sets of AI bytes though.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-navmeshtrigger.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== Geyser AI ===&lt;br /&gt;
&lt;br /&gt;
The geyser&#039;s AI bytes are actually comprised of an &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; as usual, followed by the &amp;lt;code&amp;gt;GeyserAI_GEN_VARIABLE&amp;lt;/code&amp;gt; and then the &amp;lt;code&amp;gt;NavLink_GEN_VARIALBE&amp;lt;/code&amp;gt;. What&#039;s interesting to note about this is that it means the &amp;lt;code&amp;gt;AI.Static&amp;lt;/code&amp;gt; array can contain more than just what is in &amp;lt;code&amp;gt;AI_GEN_VARIABLE&amp;lt;/code&amp;gt;. Primitive geysers can be made simply by editing the &amp;lt;code&amp;gt;Right&amp;lt;/code&amp;gt; vector, which applies the vector to your coordinates with some velocity number.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-geyser-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== Treasure AI ===&lt;br /&gt;
 &lt;br /&gt;
[[File:P4-otakara-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== WaterBox AI ===&lt;br /&gt;
&lt;br /&gt;
WaterBoxes have a few components all detailed in the chart. They can be sent logical pulses by entities like switches, valves and drains by linking the &amp;lt;code&amp;gt;waterBoxSwitchID&amp;lt;/code&amp;gt;. Drains (Mizunuki), while charted here, are not actually interactible entities, instead the thought is that they get triggered by &amp;lt;code&amp;gt;Excavation&amp;lt;/code&amp;gt; holes on top of them, which are not yet charted. As usual, [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/types.js#L152-L182 Dandori Desktop] has a list of sound IDs and map texture paths scraped from the game.&lt;br /&gt;
&lt;br /&gt;
It is not at all understood what &amp;lt;code&amp;gt;WaterBoxNav&amp;lt;/code&amp;gt;s do or what its vector could be applied to, nor &amp;lt;code&amp;gt;WaterBoxFluctuation&amp;lt;/code&amp;gt;s although the latter may just be the moving ones. I haven&#039;t tested tonnes.&lt;br /&gt;
&lt;br /&gt;
[[File:P4-Waterbox-Ais.png.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== Researching ===&lt;br /&gt;
&lt;br /&gt;
The best way of breaking down the AI parameter (I have found) is to combine the blueprint JSONs from the &amp;lt;code&amp;gt;Sublevels/&amp;lt;/code&amp;gt; folder, with the &amp;lt;code&amp;gt;ActorPlacementInfo&amp;lt;/code&amp;gt; file of the same type. The Sublevels files contain the gen_variables that seem to be encoded into the byte arrays of ActorSerializeParameter.&lt;br /&gt;
&lt;br /&gt;
AI parameters can be found by searching for &amp;lt;code&amp;gt;{entity}AI_GEN_VARIABLE&amp;lt;/code&amp;gt;, for example &amp;lt;code&amp;gt;ElecMushiAI_GEN_VARIABLE&amp;lt;/code&amp;gt; for Anode Beetles. Most of the contents of that object&#039;s &amp;lt;code&amp;gt;Properties&amp;lt;/code&amp;gt; will be encoded in that actor&#039;s &amp;lt;code&amp;gt;ActorSerializeParameter.AI.Static&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;ActorPlacementInfo&amp;lt;/code&amp;gt; file, so you can compare things like the drop numbers, asset path and other such floats for occurrences of those values in the AI array. Strings are often the easiest to find/locate with due to their easy to spot nature (look for the big sequence of non-0 numbers and decode it to see if it matches what you need). Finding two instances in Sublevel files that have different values for a given property (or the property being set at all for infrequent ones) will tell you which actor instances to look for in the AP files, which you can then anaylse the bytes for to find your different value, giving you its array index/type.&lt;br /&gt;
&lt;br /&gt;
A scrape of all of the sublevel files can be found in [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/sublevels.json Dandori Desktop&#039;s repo] which collects every parameter that each entity ever defines - so every drop, and config param ever given to any Kochappy, for example. This is very useful for finding all the potential values of random things like &amp;lt;code&amp;gt;GameRulePermissionFlag&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;CustomParameter&amp;lt;/code&amp;gt;, and is a great starting point for piecing parts of the AI puzzles together, as params like &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;TekiAIParameter&amp;lt;/code&amp;gt; are shared frequently, with individual properties being set on certain entities. This isn&#039;t comprehensive as many properties are just left defaulted, which doesn&#039;t mean they can&#039;t be changed, just that we don&#039;t have 2 differing examples to easily locate them in the bytes.&lt;br /&gt;
&lt;br /&gt;
The blueprints can also be viewed in FModel (in &amp;lt;code&amp;gt;Placeables/&amp;lt;/code&amp;gt;), and you can find the &amp;lt;code&amp;gt;AI_GEN_VARIABLE&amp;lt;/code&amp;gt;s which should have all the property names and their default values. I&#039;ve had limited success here, as you often can&#039;t just find the value in the AI bytes, but it can definitely give insight into what must be available in the object, and other possible enum values etc. This leads me to think it&#039;s possible that non-overriden fields of the gen variable objects are left zeroed, which doesn&#039;t make much sense, because how would you set a value of zero? idk.&lt;br /&gt;
&lt;br /&gt;
=== Data Dumps ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/entityData.json/ entityData.json] - a dump of every unique value every actor has in the game from the AP files (non-night)&lt;br /&gt;
* [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/sublevels.json Sublevels.json] - a dump of every value each actor can have from the Sublevels files - these are the English overriden parameter names &lt;br /&gt;
* [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/scrape.js/ scrape.js] - the code to generate the above lists - can be supplied an actor name to extract its section from &amp;lt;code&amp;gt;entityData.json&amp;lt;/code&amp;gt; given how bulky that file is. Clone Dandori Desktop and run &amp;lt;code&amp;gt;node scrape.js Kochappy&amp;lt;/code&amp;gt; to dump Kochappy&#039;s data into the &amp;lt;code&amp;gt;extractions/&amp;lt;/code&amp;gt; folder&lt;br /&gt;
&lt;br /&gt;
[[Category:Pikmin 4]]&lt;br /&gt;
[[Category:Parameters]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=File:P4-Waterbox-Ais.png&amp;diff=4842</id>
		<title>File:P4-Waterbox-Ais.png</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=File:P4-Waterbox-Ais.png&amp;diff=4842"/>
		<updated>2025-01-27T21:00:54Z</updated>

		<summary type="html">&lt;p&gt;Noodl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=File:P4-sprinkler-objectAI.png&amp;diff=4841</id>
		<title>File:P4-sprinkler-objectAI.png</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=File:P4-sprinkler-objectAI.png&amp;diff=4841"/>
		<updated>2025-01-27T21:00:38Z</updated>

		<summary type="html">&lt;p&gt;Noodl: Noodl uploaded a new version of File:P4-sprinkler-objectAI.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Charts the sprinklerAI bytes, and what I can find of ObjectAIParameter, which every object is comprised of (+ their unique AI gen var, like SprinklerAI)&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=Disabling_Pikmin&amp;diff=4742</id>
		<title>Disabling Pikmin</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=Disabling_Pikmin&amp;diff=4742"/>
		<updated>2024-07-29T22:25:35Z</updated>

		<summary type="html">&lt;p&gt;Noodl: Disable behaviour&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Disabling Pikmin}}&lt;br /&gt;
&lt;br /&gt;
In the bytes of a CavePortal&#039;s PortalTrigger there is a 4-byte integer called &amp;lt;code&amp;gt;disablePikminFlags&amp;lt;/code&amp;gt;. This number looks random but can be broken down.&lt;br /&gt;
&lt;br /&gt;
It is a little endian binary bit string. Taking the number as an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
0000 0010 1111 1110&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We will be looking at the number as if it was reversed, so &amp;quot;index 0&amp;quot; is actually the last number. Each number in the string represents which pikmin type is disabled. The pikmin order can be obtained from &amp;lt;code&amp;gt;DT_PikminProperty&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;Core/&amp;lt;/code&amp;gt; folder. It is basically this with bean at 8, and ninjin, undef and DrkMinion between photon and notset.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    0: &amp;quot;PikminRed&amp;quot;,&lt;br /&gt;
    1: &amp;quot;PikminBlue&amp;quot;,&lt;br /&gt;
    2: &amp;quot;PikminYellow&amp;quot;,&lt;br /&gt;
    3: &amp;quot;PikminRock&amp;quot;,&lt;br /&gt;
    4: &amp;quot;PikminWing&amp;quot;,&lt;br /&gt;
    5: &amp;quot;PikminPurple&amp;quot;,&lt;br /&gt;
    6: &amp;quot;PikminWhite&amp;quot;,&lt;br /&gt;
    7: &amp;quot;PikminIce&amp;quot;,&lt;br /&gt;
    9: &amp;quot;PikminPhoton&amp;quot;,&lt;br /&gt;
    16: &amp;quot;Not set (PongashiColor only)&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By matching the above enum to the number, we can see that only index 0 is a 0, with the rest being 1. This means that red pikmin are the only ones enabled (and bean I guess). If you also wanted to enable yellow, you&#039;d flip index 3 to a 0 too. After index 9 for photon, it doesn&#039;t really matter. By converting this uint16 back to decimal you would get &amp;lt;code&amp;gt;766&amp;lt;/code&amp;gt; which is what gets encoded to &amp;lt;code&amp;gt;254, 2, 0, 0&amp;lt;/code&amp;gt; in the AGL (which you can see for Area010&#039;s stovetop cave where this is used).&lt;br /&gt;
&lt;br /&gt;
Some notes on disable behaviour:&lt;br /&gt;
&lt;br /&gt;
* Disable flags can be applied to in-cave entrances (&amp;lt;code&amp;gt;DownPortal&amp;lt;/code&amp;gt;s) where they will just magic-away the disabled types. Haven&#039;t tested if they get saved to the onion, I presume they do like a regular overworld pikmin selection would.&lt;br /&gt;
* By changing the in-cave portal&#039;s to the overworld &amp;lt;code&amp;gt;MadoriRuins&amp;lt;/code&amp;gt; you can get the sublevel selection screen and pikmin selector with the disable flags applied, so you can redistribute and reset your squad between floors.&lt;br /&gt;
&lt;br /&gt;
[[Category:Stage Generation]]&lt;br /&gt;
[[Category:Pikmin 4]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=Main_Page&amp;diff=4741</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=Main_Page&amp;diff=4741"/>
		<updated>2024-07-29T22:07:05Z</updated>

		<summary type="html">&lt;p&gt;Noodl: Disbaling Pikmin page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MainTemplate&lt;br /&gt;
| welcome = Welcome to the &#039;&#039;&#039;&#039;&#039;Pikmin&#039;&#039; Technical Knowledge Base&#039;&#039;&#039;!&lt;br /&gt;
| blurb = A wiki dedicated to the internal files in &#039;&#039;Pikmin&#039;&#039; games.&lt;br /&gt;
| about_title = About&lt;br /&gt;
| about_content =&lt;br /&gt;
Throughout the years, &#039;&#039;Pikmin&#039;&#039; fans have tinkered with the files inside the games in order to better learn how they work, and to create custom content. Since there are a lot of nuances in every little thing, and since newcomers to the concept of file editing show up all the time, this wiki was created with the purpose of serving as a knowledge base for all that the fans know!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Partners&#039;&#039;&#039;:&lt;br /&gt;
* [https://pikminwiki.com Pikipedia] - the &#039;&#039;Pikmin&#039;&#039; wiki&lt;br /&gt;
* [https://discord.gg/msMKc3G Pikcord] - the &#039;&#039;Pikmin&#039;&#039; community Discord server&lt;br /&gt;
* [https://discord.gg/G7Pgkdh Hocotate Hacker] - the &#039;&#039;Pikmin&#039;&#039; hacking community Discord server&lt;br /&gt;
| other_title = What this wiki is &#039;&#039;not&#039;&#039;&lt;br /&gt;
| other_content =&lt;br /&gt;
* It&#039;s not a wiki about pirating &#039;&#039;Pikmin&#039;&#039; games.&lt;br /&gt;
* It&#039;s not a file-sharing service.&lt;br /&gt;
* It&#039;s not a wiki where you document...&lt;br /&gt;
** Canon content. Try [https://pikminwiki.com/ Pikipedia] instead.&lt;br /&gt;
** Fan-made content. Try [https://pikminfanon.com/ Pikmin Fanon] instead.&lt;br /&gt;
** Unused content or regional differences. Try [https://tcrf.net TCRF] instead.&lt;br /&gt;
* It&#039;s not an official source of info. The information here is mostly obtained via experimenting, and is subject to change as new discoveries are made.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Global information ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: auto; width: 75%;&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;Global info&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;margin: auto;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* [[General instructions]]&lt;br /&gt;
* [[Glossary]]&lt;br /&gt;
* [[Save files]]&lt;br /&gt;
* [[:Category:Tools|Tools]]&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Game-specific information ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: auto; width: 75%;&amp;quot;&lt;br /&gt;
! width=&amp;quot;20%;&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&#039;&#039;Pikmin&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;font-size: 90%;&amp;quot;&amp;gt;(and &#039;&#039;New Play Control! Pikmin&#039;&#039;)&amp;lt;/span&amp;gt;&lt;br /&gt;
! width=&amp;quot;20%;&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&#039;&#039;Pikmin 2&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;font-size: 90%;&amp;quot;&amp;gt;(and &#039;&#039;New Play Control! Pikmin 2&#039;&#039;)&amp;lt;/span&amp;gt;&lt;br /&gt;
! width=&amp;quot;20%;&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&#039;&#039;Pikmin 3&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;font-size: 90%;&amp;quot;&amp;gt;(and &#039;&#039;Pikmin 3 Deluxe&#039;&#039;)&amp;lt;/span&amp;gt;&lt;br /&gt;
! width=&amp;quot;20%;&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&#039;&#039;Hey! Pikmin&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
! width=&amp;quot;20%;&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&#039;&#039;Pikmin 4&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GENERAL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | General&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin|Main information]]&lt;br /&gt;
* [[Pikmin instructions|Instructions]]&lt;br /&gt;
* [[Pikmin cheat codes|Useful cheat codes]]&lt;br /&gt;
* [[Pikmin memory addresses|Memory addresses]]&lt;br /&gt;
* [[Pikmin glossary|Glossary]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 2|Main information]]&lt;br /&gt;
* [[Pikmin 2 instructions|Instructions]]&lt;br /&gt;
* [[Pikmin 2 cheat codes|Useful cheat codes]]&lt;br /&gt;
* [[Pikmin 2 memory addresses|Memory addresses]]&lt;br /&gt;
* [[Pikmin 2 troubleshooting|Troubleshooting]]&lt;br /&gt;
* [[Pikmin 2 glossary|Glossary]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 3|Main information]]&lt;br /&gt;
* [[Pikmin 3 instructions|Instructions]]&lt;br /&gt;
* [[Pikmin 3 troubleshooting|Troubleshooting]]&lt;br /&gt;
* [[Pikmin 3 glossary|Glossary]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Hey! Pikmin|Main information]]&lt;br /&gt;
* [[Hey! Pikmin instructions|Instructions]]&lt;br /&gt;
* [[Hey! Pikmin troubleshooting|Troubleshooting]]&lt;br /&gt;
* [[Hey! Pikmin glossary|Glossary]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 4|Main information]]&lt;br /&gt;
* [[Pikmin 4 instructions|Instructions]]&lt;br /&gt;
* [[Pikmin 4 troubleshooting|Troubleshooting]]&lt;br /&gt;
* [[Pikmin 4 glossary|Glossary]]&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FILE LISTS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | File lists&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin directory tree|Directory tree]]&lt;br /&gt;
* [[JAM file list|JAM file list (Pikiseq.arc)]]&lt;br /&gt;
* [[STX file list|STX file list]]&lt;br /&gt;
* [[CIN file list|CIN file list]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 2 directory tree|Directory tree]]&lt;br /&gt;
* [[AST file list|AST (streamed music)]]&lt;br /&gt;
* [[Pikmin 2 BMS file list|BMS (sequenced music)]]&lt;br /&gt;
* [[Pikmin 2 CND file list|CND (sequenced music for caves)]]&lt;br /&gt;
* [[Guide_To_Sound_File_Names|List of sound effect files in the first bank]]&lt;br /&gt;
* [[Pikmin 2 cave units information|List of information of each cave unit]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 3 directory tree|&#039;&#039;Pikmin 3&#039;&#039; directory tree]]&lt;br /&gt;
* [[Pikmin 3 Deluxe directory tree|&#039;&#039;Pikmin 3 Deluxe&#039;&#039; directory tree]]&lt;br /&gt;
* [[BFSTM file list|BFSTM (streamed music)]]&lt;br /&gt;
* [[MSBT file list|MSBT (text string)]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Hey! Pikmin directory tree|Directory tree]]&lt;br /&gt;
* [[BCSTM file list|BCSTM (music)]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 4 directory tree|directory tree]]&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CONSTANTS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Constants&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin identifiers|Identifiers]]&lt;br /&gt;
* [[Olimar&#039;s voyage log table]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 2 identifiers|Identifiers]]&lt;br /&gt;
* [[Pikmin 2 Pikmin states|Pikmin states]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 3 identifiers|Identifiers]]&lt;br /&gt;
* [[Pikmin 3 progress value|Progress value]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Hey! Pikmin identifiers|Identifiers]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 4 identifiers|Identifiers]]&lt;br /&gt;
* [[Pikmin 4 text identifiers|Text Identifiers]]&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PARTICLES&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Particle effects&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[PCR particles]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[JPC particles]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[PTCL particles (Pikmin 3)]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[PTCL particles (Hey Pikmin)]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FILE FORMATS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Stage generation&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin binary GEN format|Binary GEN format]]&lt;br /&gt;
* [[Pikmin route|Routes]]&lt;br /&gt;
&lt;br /&gt;
* Outdated pages&lt;br /&gt;
** [[Pikmin area generator file|Generator]]&lt;br /&gt;
** [[Pikmin gen codes|Gen codes]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* Overworld&lt;br /&gt;
** [[Pikmin 2 area generator file|Overworld generation parameters]]&lt;br /&gt;
** [[Pikmin 2 map lighting files|Lighting]]&lt;br /&gt;
** [[Pikmin 2 waterboxes|Waterbox]]&lt;br /&gt;
** [[Pikmin 2 collision format|Collision]]&lt;br /&gt;
* Caves&lt;br /&gt;
** [[Cave generation parameters|Cave generation parameters]]&lt;br /&gt;
** [[Pikmin 2 Challenge Mode settings|Challenge Mode]]&lt;br /&gt;
** [[Pikmin 2 cave lighting files|Lighting]]&lt;br /&gt;
* Units (cave rooms)&lt;br /&gt;
** [[Cave unit generation|Cave unit generation]]&lt;br /&gt;
** [[Cave unit definition file|Cave unit definition]]&lt;br /&gt;
** [[Cave fixed layout|Cave fixed layout]]&lt;br /&gt;
* [[Pikmin 2 route|Routes]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* Teki Units&lt;br /&gt;
** [[NoraSpawner]]&lt;br /&gt;
* [[Dandori Battles]]&lt;br /&gt;
* [[Disabling Pikmin]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FILE FORMATS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | File formats&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* Archive Formats&lt;br /&gt;
** [[Paired ARC+DIR file]]&lt;br /&gt;
** [[BUN file]] (also ANM)&lt;br /&gt;
** [[BARC file]]&lt;br /&gt;
* Binary formats&lt;br /&gt;
** [[MOD file]] (3D Model)&lt;br /&gt;
** [[ACT file]] (Hierarchy Model File)&lt;br /&gt;
** [[TXE file]] (Texture)&lt;br /&gt;
** [[BTI file]] (Texture)&lt;br /&gt;
** [[BLO file]] (2D screen data)&lt;br /&gt;
** [[PCR file]] (Particle effect parameters)&lt;br /&gt;
** [[DC? files]] (Identifier for either DCA or DCK)&lt;br /&gt;
*** [[DCA file]] (Animation)&lt;br /&gt;
*** [[DCK file]] (Animation)&lt;br /&gt;
** [[H4M file]] (Pre-rendered video)&lt;br /&gt;
** [[JAM file]] (Sequenced music)&lt;br /&gt;
** [[STX file]] (Streamed music)&lt;br /&gt;
** [[AW file]] (Sound Bank)&lt;br /&gt;
** [[Pikmin parameter files|Parameter Files]]&lt;br /&gt;
* Plaintext Formats&lt;br /&gt;
** [[CIN file]] (Cutscene resource manager)&lt;br /&gt;
** [[DSK file]] (Cutscene data)&lt;br /&gt;
** [[DMD file]] (Intermediary 3D model)&lt;br /&gt;
** [[CNV file]] (Intermediary conversion file)&lt;br /&gt;
* Unknown Formats&lt;br /&gt;
** [[GST file]]&lt;br /&gt;
** [[CARD file]]&lt;br /&gt;
* Missing Formats&lt;br /&gt;
** [[DVW file]] (Material file?) &lt;br /&gt;
** [[JMP file]] (Intermediary plaintext 3D model file?)&lt;br /&gt;
** [[MD3 file]] (3D Model)&lt;br /&gt;
** [[BSP flle]] (3D Model)&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* Archive Formats&lt;br /&gt;
** [[SZS file]]&lt;br /&gt;
** [[RARC file]]&lt;br /&gt;
* [[BMD file]] (J3D model)&lt;br /&gt;
* [[BTI file]] (Texture)&lt;br /&gt;
* [[BTK file]] (Animated texture)&lt;br /&gt;
* [[JPC file]] (Particle effect container)&lt;br /&gt;
** [[JPA file]] (Particle effect)&lt;br /&gt;
* [[BCA file]] (Animation)&lt;br /&gt;
* [[BCK file]] (Animation)&lt;br /&gt;
* [[BMS file]] (Sequenced music)&lt;br /&gt;
* [[AST file]] (Streamed music)&lt;br /&gt;
* [[AW file]] (Soundfont)&lt;br /&gt;
* [[THP file]] (Pre-rendered video)&lt;br /&gt;
* [[BLO file]] (2D screen data)&lt;br /&gt;
* [[STB file]] (Cutscene data)&lt;br /&gt;
* [[BMG file]] (Text)&lt;br /&gt;
* [[BPK file]]&lt;br /&gt;
* [[BRK file]]&lt;br /&gt;
* [[BMC file]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Misc.&lt;br /&gt;
** [[DWN file]] (e-Reader minigames?)&lt;br /&gt;
** [[DMD file]] (Intermediary 3D model)&lt;br /&gt;
** [[Pikmin 2 title screen|Title screen]]&lt;br /&gt;
** [[Pikmin 2 save file|Saved game data]]&lt;br /&gt;
** [[2-Player Battle stage parameters]]&lt;br /&gt;
** [[Mail]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
* [[Pikmin 3 radar files|Radar]]&lt;br /&gt;
* [[BFSTM file|BFSTM (streamed music)]]&lt;br /&gt;
* [[MSBT file (Pikmin 3)|MSBT (text string)]]&lt;br /&gt;
* [[FSKB file]] (Unknown)&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
* [[Hey! Pikmin save file|Saved game data]]&lt;br /&gt;
* [[ARC file (Hey! Pikmin)|ARC (archive)]]&lt;br /&gt;
* [[BCH file|BCH (animation)]]&lt;br /&gt;
* [[BFLIM file|BFLIM (image)]]&lt;br /&gt;
* [[MSBT file (Hey! Pikmin)|MSBT (text string)]]&lt;br /&gt;
* [[Z file|Z (archive)]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[WEBM file|WEBM (video)]]&lt;br /&gt;
* [[BNVIB file|BNVIB]]&lt;br /&gt;
* [[UTOC/UCAS file|UTOC/UCAS (Archive for UASSET Files)]]&lt;br /&gt;
* [[UASSET file|UASSET File (Unreal Engine Asset File)]]&lt;br /&gt;
* [[UFONT file|UFONT]]&lt;br /&gt;
* [[LOCRES file|LOCRES]]&lt;br /&gt;
* [[WEM file|WEM]]&lt;br /&gt;
* [[BNK file|BNK]]&lt;br /&gt;
* [[Save Files]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PARAMETERS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Parameters&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin labeled parameter file|Labeled]]&lt;br /&gt;
** [[Pikmin AI constants|AI constants]]&lt;br /&gt;
** [[Pikmin cunit parameters|Cuint]]&lt;br /&gt;
** [[Pikmin demo parameters|Demo]]&lt;br /&gt;
** [[Pikmin game parameters|Game parameters]]&lt;br /&gt;
** [[Pikmin navi parameters|NaviMgr]]&lt;br /&gt;
** [[Pikmin piki parameters|PikiMgr]]&lt;br /&gt;
** [[Pikmin sound parameters|Sound]]&lt;br /&gt;
** [[Pikmin wave parameters|Wave]]&lt;br /&gt;
** [[Pikmin prefs parameters|Prefs]]&lt;br /&gt;
** [[Pikmin boss parameters|Boss]]&lt;br /&gt;
* [[Pikmin unlabeled parameter file|Unlabeled]]&lt;br /&gt;
** [[Pikmin camera parameters|Camera]]&lt;br /&gt;
** [[Pikmin key parameters|Key]]&lt;br /&gt;
** [[Pikmin enemy parameter file format|Enemy]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[naviParms|Leader]]&lt;br /&gt;
* [[pikiParms|Pikmin]]&lt;br /&gt;
* [[CameraParms|Camera]]&lt;br /&gt;
* [[Pikmin 2 enemy parameters|Entity]]&lt;br /&gt;
* [[Titan Dweevil parameters]]&lt;br /&gt;
* [[Trackmap parameters|trackMap parameters]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[carryParam|Carry]]&lt;br /&gt;
* [[fruitsParam|Fruit]]&lt;br /&gt;
* [[pikminParam|Pikmin]]&lt;br /&gt;
* [[itemprogressParam|Item progress]]&lt;br /&gt;
* [[Mission settings]]&lt;br /&gt;
* [[GameobjectParam|Object]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
* [[ActorSerializeParameter and AI]]&lt;br /&gt;
* [[Data Table/Actor Parameters]]&lt;br /&gt;
* [[Enemy Parameters]]&lt;br /&gt;
* [[ActorGeneratorList]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MANAGERS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Managers&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[BX file]] (Soundfont index)&lt;br /&gt;
* [[Pikmin pellet manager|Pellets]]&lt;br /&gt;
* [[Pikmin anim manager|Animations]]&lt;br /&gt;
* [[Pikmin teki manager|Tekis (DOL)]]&lt;br /&gt;
* [[Pikmin stage manager|Stage manager]]&lt;br /&gt;
* [[Pikmin stage information|Stage information / lighting]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[AAF file]] (Soundfont index)&lt;br /&gt;
* Pellet List&lt;br /&gt;
** [[Pikmin 2 otakara_config.txt|Treasure Config]]&lt;br /&gt;
** [[Pikmin 2 item_config.txt|Item Config]]&lt;br /&gt;
** [[Pikmin 2 otakara_config.txt|Otakara Config]]&lt;br /&gt;
** [[Pikmin 2 carcass_config.txt|Carcass Config]]&lt;br /&gt;
** [[Pikmin 2 numberpellet_config.txt|Number Pellet Config]]&lt;br /&gt;
* [[Pikmin 2 animmgr.txt|Animation Manager]]&lt;br /&gt;
* [[Pikmin 2 collinfo.txt|Collision Info]]&lt;br /&gt;
&lt;br /&gt;
* [[Mail Table]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EXPLANATIONS AND NOTES&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Explanations and Notes&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin unread files|Unread files]]&lt;br /&gt;
* [[Pikmin disable archives trick|Disable loading from archives]]&lt;br /&gt;
* [[Pikmin Emperor crash|Emperor crash]]&lt;br /&gt;
* [[Minty Ramblings]]&lt;br /&gt;
* [[Custom sequenced Pikmin music|Custom sequenced music]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Cave spawning]]&lt;br /&gt;
* [[Custom models]]&lt;br /&gt;
* [[Submerged Castle oddities|Special cave properties]]&lt;br /&gt;
* [[How Pikmin 2 loads text|How &#039;&#039;Pikmin 2&#039;&#039; loads text]]&lt;br /&gt;
* [[Sound Replacement Tutorial|Sound Replacement Tutorial]]&lt;br /&gt;
* [[Enemy Memory Usage]]&lt;br /&gt;
* [[Disassembly instructions]]&lt;br /&gt;
* [[Jsystem]]&lt;br /&gt;
* [[Pikmin 2 gEnemyInfo|gEnemyInfo]]&lt;br /&gt;
* [[Epoch Notes]]&lt;br /&gt;
* [[Cubes Yap Notes]]&lt;br /&gt;
* [[User:Captain Salty/Blo Editing Notes|Blo Editing Notes]]&lt;br /&gt;
* [[Cutscene Notes]]&lt;br /&gt;
* [[Creating Interactive BMS Files|Creating interactive area music]]&lt;br /&gt;
* [[Creating cave music|Creating interactive cave music]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 3 oddities|Oddities]]&lt;br /&gt;
* [[Story mode maps in other modes]]&lt;br /&gt;
* [[Pikmin 3 Bingo Battle|Bingo Battle]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Hey! Pikmin unread files|Unread files]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* Documentation&lt;br /&gt;
** [[Lilith&#039;s P4 Notes]]&lt;br /&gt;
** [[Pikmin 4 Demo Research]]&lt;br /&gt;
* Tutorials&lt;br /&gt;
** [[Model Importing Tutorial]]&lt;br /&gt;
** [[WEM Audio Modding Tutorial]]&lt;br /&gt;
** [[Enemy Duplication Tutorial (WIP)]]&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TOOLS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Tools&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[PikBinGen]]&lt;br /&gt;
* [[Archive Toolkit]]&lt;br /&gt;
* [[OpenGL / Dolphin System|OpenGL / Dolphin System]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Cave Creator]]&lt;br /&gt;
* [[Pikmin 2 Routes Editor &amp;amp; Gen Editor]]&lt;br /&gt;
* [[obj2grid]]&lt;br /&gt;
* [[DOL-Ckit]]&lt;br /&gt;
* [[Drought Enders Cave Creator]]&lt;br /&gt;
* [[SuperBMD]]&lt;br /&gt;
* [[pikminBMGtool]]&lt;br /&gt;
* [[btk-conv]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Gen Editor]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Hey! Pikmin stage viewer]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[P4UassetEditor]]&lt;br /&gt;
* [[Modified FModel]]&lt;br /&gt;
* [[UCas/UToc Packer]]&lt;br /&gt;
* [[Dandori DB]]&lt;br /&gt;
* [[Dandori Desktop]]&lt;br /&gt;
* [[UE4LocalizationsTool]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
* [[:Category:Pages with things to do|Things to do]]&lt;br /&gt;
* [[:Category:Pages with unsure information|Unsure info that needs to be confirmed]]&lt;br /&gt;
&lt;br /&gt;
[[Category:PikminTKB]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=Dandori_Battles&amp;diff=4740</id>
		<title>Dandori Battles</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=Dandori_Battles&amp;diff=4740"/>
		<updated>2024-07-20T21:02:40Z</updated>

		<summary type="html">&lt;p&gt;Noodl: Make json complete&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Dandori Battles}}&lt;br /&gt;
&lt;br /&gt;
Dandori Battles in Pikmin 4 are slightly different to regular maps. The generator lists live in &amp;lt;code&amp;gt;Maps/Madori/Ddb/&amp;lt;/code&amp;gt; where there exist two sets of files: &amp;lt;code&amp;gt;AP_{map}LVS_{type}.json&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;AP_{map}_{type}.json&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;LVS&amp;lt;/code&amp;gt; files are for the title screen Dandori Battles.&lt;br /&gt;
&lt;br /&gt;
Most of the spawns in Dandori Battles are driven by &amp;lt;code&amp;gt;PopPlaceActor&amp;lt;/code&amp;gt;s. These are hidden entities that spawn other entities. Similar to &amp;lt;code&amp;gt;ActorSpawner&amp;lt;/code&amp;gt;s. I haven&#039;t mapped out the bytes of them yet, but all pertinent configuration is in the &amp;lt;code&amp;gt;ActorSerializeParameter.PopPlace.Static&amp;lt;/code&amp;gt; array. The &amp;lt;code&amp;gt;ActorParameter&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;AI&amp;lt;/code&amp;gt; are always the same.&lt;br /&gt;
&lt;br /&gt;
The second byte of &amp;lt;code&amp;gt;PopPlace&amp;lt;/code&amp;gt; is the &amp;lt;code&amp;gt;GroupId&amp;lt;/code&amp;gt;. This is how the game determines what the &amp;lt;code&amp;gt;PopPlaceActor&amp;lt;/code&amp;gt; should spawn, and how. These groups are actually defined in &amp;lt;code&amp;gt;Carrot4/Core/VS/Pop/SettingTable/{type}/DT_Pop_{type}{something}.uasset&amp;lt;/code&amp;gt;. An excerpt of one from Trial run (DDB_AI001):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;コチャッピー_リポップ_積み木の下&amp;quot;: { // &amp;quot;Kochappi_Repop_Under the building blocks&amp;quot;&lt;br /&gt;
    &amp;quot;StartTime&amp;quot;: 0.0,&lt;br /&gt;
    &amp;quot;EndTime&amp;quot;: 240.0,&lt;br /&gt;
    &amp;quot;IntervalType&amp;quot;: &amp;quot;EVsPopIntervalType::Always&amp;quot;,&lt;br /&gt;
    &amp;quot;Interval&amp;quot;: 40.0,&lt;br /&gt;
    &amp;quot;IntervalJitter&amp;quot;: 5.0,&lt;br /&gt;
    &amp;quot;TargetGroupIds&amp;quot;: [&lt;br /&gt;
      2&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;MaxPopObjectNum&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;MaxPopObjectJitterNum&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;PopObjectList&amp;quot;: [],&lt;br /&gt;
    &amp;quot;GenerateClassArray&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;ObjectName&amp;quot;: &amp;quot;BlueprintGeneratedClass&#039;GKochappy_C&#039;&amp;quot;,&lt;br /&gt;
        &amp;quot;ObjectPath&amp;quot;: &amp;quot;/Game/Carrot4/Placeables/Teki/GKochappy.0&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;bIsExcludeSystemPopLimit&amp;quot;: false,&lt;br /&gt;
    &amp;quot;bIsForcePopBuriedPoint&amp;quot;: false&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Which defines Group ID 2 to spawn at most 2 kochappies every (40 ±5) seconds from the start of the battle. However this means DDB spawns are linked to DataTable files, and not just the actors in the AGL. &lt;br /&gt;
&lt;br /&gt;
Presently, the UassetEncoder mangles the &amp;lt;code&amp;gt;GenerateClassArray&amp;lt;/code&amp;gt; to something unhelpful:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;GenerateClassArray&amp;quot;: [&lt;br /&gt;
    -7902643105768047879&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Meaning we can&#039;t edit and re-encode the files to add more/edit the groups for each Dandori Battle, currently leaving them as only editable by using regular entities, ActorSpawners, or the existing groups.&lt;br /&gt;
&lt;br /&gt;
[[Category:Formats]]&lt;br /&gt;
[[Category:Pikmin 4]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=Dandori_Battles&amp;diff=4739</id>
		<title>Dandori Battles</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=Dandori_Battles&amp;diff=4739"/>
		<updated>2024-07-20T21:01:42Z</updated>

		<summary type="html">&lt;p&gt;Noodl: Fix code block&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Dandori Battles}}&lt;br /&gt;
&lt;br /&gt;
Dandori Battles in Pikmin 4 are slightly different to regular maps. The generator lists live in &amp;lt;code&amp;gt;Maps/Madori/Ddb/&amp;lt;/code&amp;gt; where there exist two sets of files: &amp;lt;code&amp;gt;AP_{map}LVS_{type}.json&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;AP_{map}_{type}.json&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;LVS&amp;lt;/code&amp;gt; files are for the title screen Dandori Battles.&lt;br /&gt;
&lt;br /&gt;
Most of the spawns in Dandori Battles are driven by &amp;lt;code&amp;gt;PopPlaceActor&amp;lt;/code&amp;gt;s. These are hidden entities that spawn other entities. Similar to &amp;lt;code&amp;gt;ActorSpawner&amp;lt;/code&amp;gt;s. I haven&#039;t mapped out the bytes of them yet, but all pertinent configuration is in the &amp;lt;code&amp;gt;ActorSerializeParameter.PopPlace.Static&amp;lt;/code&amp;gt; array. The &amp;lt;code&amp;gt;ActorParameter&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;AI&amp;lt;/code&amp;gt; are always the same.&lt;br /&gt;
&lt;br /&gt;
The second byte of &amp;lt;code&amp;gt;PopPlace&amp;lt;/code&amp;gt; is the &amp;lt;code&amp;gt;GroupId&amp;lt;/code&amp;gt;. This is how the game determines what the &amp;lt;code&amp;gt;PopPlaceActor&amp;lt;/code&amp;gt; should spawn, and how. These groups are actually defined in &amp;lt;code&amp;gt;Carrot4/Core/VS/Pop/SettingTable/{type}/DT_Pop_{type}{something}.uasset&amp;lt;/code&amp;gt;. An excerpt of one from Trial run (DDB_AI001):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;コチャッピー_リポップ_積み木の下&amp;quot;: { // &amp;quot;Kochappi_Repop_Under the building blocks&amp;quot;&lt;br /&gt;
    &amp;quot;StartTime&amp;quot;: 0.0,&lt;br /&gt;
    &amp;quot;EndTime&amp;quot;: 240.0,&lt;br /&gt;
    &amp;quot;IntervalType&amp;quot;: &amp;quot;EVsPopIntervalType::Always&amp;quot;,&lt;br /&gt;
    &amp;quot;Interval&amp;quot;: 40.0,&lt;br /&gt;
    &amp;quot;IntervalJitter&amp;quot;: 5.0,&lt;br /&gt;
    &amp;quot;TargetGroupIds&amp;quot;: [&lt;br /&gt;
      2&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;MaxPopObjectNum&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;MaxPopObjectJitterNum&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;PopObjectList&amp;quot;: [],&lt;br /&gt;
    &amp;quot;GenerateClassArray&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;ObjectName&amp;quot;: &amp;quot;BlueprintGeneratedClass&#039;GKochappy_C&#039;&amp;quot;,&lt;br /&gt;
        &amp;quot;ObjectPath&amp;quot;: &amp;quot;/Game/Carrot4/Placeables/Teki/GKochappy.0&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;bIsExcludeSystemPopLimit&amp;quot;: false,&lt;br /&gt;
    &amp;quot;bIsForcePopBuriedPoint&amp;quot;: false&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Which defines Group ID 2 to spawn at most 2 kochappies every (40 ±5) seconds from the start of the battle. However this means DDB spawns are linked to DataTable files, and not just the actors in the AGL. &lt;br /&gt;
&lt;br /&gt;
Presently, the UassetEncoder mangles the &amp;lt;code&amp;gt;GenerateClassArray&amp;lt;/code&amp;gt; to something unhelpful:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;GenerateClassArray&amp;quot;: [&lt;br /&gt;
  -7902643105768047879&lt;br /&gt;
],&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Meaning we can&#039;t edit and re-encode the files to add more/edit the groups for each Dandori Battle, currently leaving them as only editable by using regular entities, ActorSpawners, or the existing groups.&lt;br /&gt;
&lt;br /&gt;
[[Category:Formats]]&lt;br /&gt;
[[Category:Pikmin 4]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=Dandori_Battles&amp;diff=4738</id>
		<title>Dandori Battles</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=Dandori_Battles&amp;diff=4738"/>
		<updated>2024-07-20T21:00:51Z</updated>

		<summary type="html">&lt;p&gt;Noodl: DDBs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Dandori Battles}}&lt;br /&gt;
&lt;br /&gt;
Dandori Battles in Pikmin 4 are slightly different to regular maps. The generator lists live in &amp;lt;code&amp;gt;Maps/Madori/Ddb/&amp;lt;/code&amp;gt; where there exist two sets of files: &amp;lt;code&amp;gt;AP_{map}LVS_{type}.json&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;AP_{map}_{type}.json&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;LVS&amp;lt;/code&amp;gt; files are for the title screen Dandori Battles.&lt;br /&gt;
&lt;br /&gt;
Most of the spawns in Dandori Battles are driven by &amp;lt;code&amp;gt;PopPlaceActor&amp;lt;/code&amp;gt;s. These are hidden entities that spawn other entities. Similar to &amp;lt;code&amp;gt;ActorSpawner&amp;lt;/code&amp;gt;s. I haven&#039;t mapped out the bytes of them yet, but all pertinent configuration is in the &amp;lt;code&amp;gt;ActorSerializeParameter.PopPlace.Static&amp;lt;/code&amp;gt; array. The &amp;lt;code&amp;gt;ActorParameter&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;AI&amp;lt;/code&amp;gt; are always the same.&lt;br /&gt;
&lt;br /&gt;
The second byte of &amp;lt;code&amp;gt;PopPlace&amp;lt;/code&amp;gt; is the &amp;lt;code&amp;gt;GroupId&amp;lt;/code&amp;gt;. This is how the game determines what the &amp;lt;code&amp;gt;PopPlaceActor&amp;lt;/code&amp;gt; should spawn, and how. These groups are actually defined in &amp;lt;code&amp;gt;Carrot4/Core/VS/Pop/SettingTable/{type}/DT_Pop_{type}{something}.uasset&amp;lt;/code&amp;gt;. An excerpt of one from Trial run (DDB_AI001):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;コチャッピー_リポップ_積み木の下&amp;quot;: { // &amp;quot;Kochappi_Repop_Under the building blocks&amp;quot;&lt;br /&gt;
    &amp;quot;StartTime&amp;quot;: 0.0,&lt;br /&gt;
    &amp;quot;EndTime&amp;quot;: 240.0,&lt;br /&gt;
    &amp;quot;IntervalType&amp;quot;: &amp;quot;EVsPopIntervalType::Always&amp;quot;,&lt;br /&gt;
    &amp;quot;Interval&amp;quot;: 40.0,&lt;br /&gt;
    &amp;quot;IntervalJitter&amp;quot;: 5.0,&lt;br /&gt;
    &amp;quot;TargetGroupIds&amp;quot;: [&lt;br /&gt;
      2&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;MaxPopObjectNum&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;MaxPopObjectJitterNum&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;PopObjectList&amp;quot;: [],&lt;br /&gt;
    &amp;quot;GenerateClassArray&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;ObjectName&amp;quot;: &amp;quot;BlueprintGeneratedClass&#039;GKochappy_C&#039;&amp;quot;,&lt;br /&gt;
        &amp;quot;ObjectPath&amp;quot;: &amp;quot;/Game/Carrot4/Placeables/Teki/GKochappy.0&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;bIsExcludeSystemPopLimit&amp;quot;: false,&lt;br /&gt;
    &amp;quot;bIsForcePopBuriedPoint&amp;quot;: false&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Which defines Group ID 2 to spawn at most 2 kochappies every (40 ±5) seconds from the start of the battle. However this means DDB spawns are linked to DataTable files, and not just the actors in the AGL. &lt;br /&gt;
&lt;br /&gt;
Presently, the UassetEncoder mangles the &amp;lt;code&amp;gt;GenerateClassArray&amp;lt;/code&amp;gt; to something unhelpful:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;quot;GenerateClassArray&amp;quot;: [&lt;br /&gt;
  -7902643105768047879&lt;br /&gt;
],&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Meaning we can&#039;t edit and re-encode the files to add more/edit the groups for each Dandori Battle, currently leaving them as only editable by using regular entities, ActorSpawners, or the existing groups.&lt;br /&gt;
&lt;br /&gt;
[[Category:Formats]]&lt;br /&gt;
[[Category:Pikmin 4]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=Dandori_Desktop&amp;diff=4737</id>
		<title>Dandori Desktop</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=Dandori_Desktop&amp;diff=4737"/>
		<updated>2024-07-20T20:47:44Z</updated>

		<summary type="html">&lt;p&gt;Noodl: Added latest release&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dandori Desktop is a tool created by [[Noodl]] that allows visualising and editing of local game files. Inspired by DandoriDB, this takes that concept and moves it to the local environment for direct editing.&lt;br /&gt;
&lt;br /&gt;
In lieu of detailed guides for actor and ActorGeneratorList editing, without intimate detail of its contents, Dandori Desktop is an easy way to get started modifying map generator files.&lt;br /&gt;
&lt;br /&gt;
It can be downloaded from the repo&#039;s releases page. Refer to the repo&#039;s readme for setup instructions.&lt;br /&gt;
&lt;br /&gt;
== Link ==&lt;br /&gt;
* [https://github.com/Chagrilled/P4-DandoriDesktop/ GitHub Repo]&lt;br /&gt;
* [https://github.com/Chagrilled/P4-DandoriDesktop/releases/latest Latest Release]&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* Right click to create entities&lt;br /&gt;
* ctrl+Z to undo deleted entities&lt;br /&gt;
* ctrl+V to duplicate the selected entity&lt;br /&gt;
&lt;br /&gt;
[[Category:Pikmin 4]]&lt;br /&gt;
[[Category:Tools]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=Main_Page&amp;diff=4736</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=Main_Page&amp;diff=4736"/>
		<updated>2024-07-20T20:46:44Z</updated>

		<summary type="html">&lt;p&gt;Noodl: Moved P4 save files to file formats&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MainTemplate&lt;br /&gt;
| welcome = Welcome to the &#039;&#039;&#039;&#039;&#039;Pikmin&#039;&#039; Technical Knowledge Base&#039;&#039;&#039;!&lt;br /&gt;
| blurb = A wiki dedicated to the internal files in &#039;&#039;Pikmin&#039;&#039; games.&lt;br /&gt;
| about_title = About&lt;br /&gt;
| about_content =&lt;br /&gt;
Throughout the years, &#039;&#039;Pikmin&#039;&#039; fans have tinkered with the files inside the games in order to better learn how they work, and to create custom content. Since there are a lot of nuances in every little thing, and since newcomers to the concept of file editing show up all the time, this wiki was created with the purpose of serving as a knowledge base for all that the fans know!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Partners&#039;&#039;&#039;:&lt;br /&gt;
* [https://pikminwiki.com Pikipedia] - the &#039;&#039;Pikmin&#039;&#039; wiki&lt;br /&gt;
* [https://discord.gg/msMKc3G Pikcord] - the &#039;&#039;Pikmin&#039;&#039; community Discord server&lt;br /&gt;
* [https://discord.gg/G7Pgkdh Hocotate Hacker] - the &#039;&#039;Pikmin&#039;&#039; hacking community Discord server&lt;br /&gt;
| other_title = What this wiki is &#039;&#039;not&#039;&#039;&lt;br /&gt;
| other_content =&lt;br /&gt;
* It&#039;s not a wiki about pirating &#039;&#039;Pikmin&#039;&#039; games.&lt;br /&gt;
* It&#039;s not a file-sharing service.&lt;br /&gt;
* It&#039;s not a wiki where you document...&lt;br /&gt;
** Canon content. Try [https://pikminwiki.com/ Pikipedia] instead.&lt;br /&gt;
** Fan-made content. Try [https://pikminfanon.com/ Pikmin Fanon] instead.&lt;br /&gt;
** Unused content or regional differences. Try [https://tcrf.net TCRF] instead.&lt;br /&gt;
* It&#039;s not an official source of info. The information here is mostly obtained via experimenting, and is subject to change as new discoveries are made.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Global information ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: auto; width: 75%;&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;Global info&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;margin: auto;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* [[General instructions]]&lt;br /&gt;
* [[Glossary]]&lt;br /&gt;
* [[Save files]]&lt;br /&gt;
* [[:Category:Tools|Tools]]&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Game-specific information ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: auto; width: 75%;&amp;quot;&lt;br /&gt;
! width=&amp;quot;20%;&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&#039;&#039;Pikmin&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;font-size: 90%;&amp;quot;&amp;gt;(and &#039;&#039;New Play Control! Pikmin&#039;&#039;)&amp;lt;/span&amp;gt;&lt;br /&gt;
! width=&amp;quot;20%;&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&#039;&#039;Pikmin 2&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;font-size: 90%;&amp;quot;&amp;gt;(and &#039;&#039;New Play Control! Pikmin 2&#039;&#039;)&amp;lt;/span&amp;gt;&lt;br /&gt;
! width=&amp;quot;20%;&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&#039;&#039;Pikmin 3&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;font-size: 90%;&amp;quot;&amp;gt;(and &#039;&#039;Pikmin 3 Deluxe&#039;&#039;)&amp;lt;/span&amp;gt;&lt;br /&gt;
! width=&amp;quot;20%;&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&#039;&#039;Hey! Pikmin&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
! width=&amp;quot;20%;&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&#039;&#039;Pikmin 4&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GENERAL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | General&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin|Main information]]&lt;br /&gt;
* [[Pikmin instructions|Instructions]]&lt;br /&gt;
* [[Pikmin cheat codes|Useful cheat codes]]&lt;br /&gt;
* [[Pikmin memory addresses|Memory addresses]]&lt;br /&gt;
* [[Pikmin glossary|Glossary]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 2|Main information]]&lt;br /&gt;
* [[Pikmin 2 instructions|Instructions]]&lt;br /&gt;
* [[Pikmin 2 cheat codes|Useful cheat codes]]&lt;br /&gt;
* [[Pikmin 2 memory addresses|Memory addresses]]&lt;br /&gt;
* [[Pikmin 2 troubleshooting|Troubleshooting]]&lt;br /&gt;
* [[Pikmin 2 glossary|Glossary]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 3|Main information]]&lt;br /&gt;
* [[Pikmin 3 instructions|Instructions]]&lt;br /&gt;
* [[Pikmin 3 troubleshooting|Troubleshooting]]&lt;br /&gt;
* [[Pikmin 3 glossary|Glossary]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Hey! Pikmin|Main information]]&lt;br /&gt;
* [[Hey! Pikmin instructions|Instructions]]&lt;br /&gt;
* [[Hey! Pikmin troubleshooting|Troubleshooting]]&lt;br /&gt;
* [[Hey! Pikmin glossary|Glossary]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 4|Main information]]&lt;br /&gt;
* [[Pikmin 4 instructions|Instructions]]&lt;br /&gt;
* [[Pikmin 4 troubleshooting|Troubleshooting]]&lt;br /&gt;
* [[Pikmin 4 glossary|Glossary]]&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FILE LISTS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | File lists&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin directory tree|Directory tree]]&lt;br /&gt;
* [[JAM file list|JAM file list (Pikiseq.arc)]]&lt;br /&gt;
* [[STX file list|STX file list]]&lt;br /&gt;
* [[CIN file list|CIN file list]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 2 directory tree|Directory tree]]&lt;br /&gt;
* [[AST file list|AST (streamed music)]]&lt;br /&gt;
* [[Pikmin 2 BMS file list|BMS (sequenced music)]]&lt;br /&gt;
* [[Pikmin 2 CND file list|CND (sequenced music for caves)]]&lt;br /&gt;
* [[Guide_To_Sound_File_Names|List of sound effect files in the first bank]]&lt;br /&gt;
* [[Pikmin 2 cave units information|List of information of each cave unit]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 3 directory tree|&#039;&#039;Pikmin 3&#039;&#039; directory tree]]&lt;br /&gt;
* [[Pikmin 3 Deluxe directory tree|&#039;&#039;Pikmin 3 Deluxe&#039;&#039; directory tree]]&lt;br /&gt;
* [[BFSTM file list|BFSTM (streamed music)]]&lt;br /&gt;
* [[MSBT file list|MSBT (text string)]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Hey! Pikmin directory tree|Directory tree]]&lt;br /&gt;
* [[BCSTM file list|BCSTM (music)]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 4 directory tree|directory tree]]&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CONSTANTS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Constants&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin identifiers|Identifiers]]&lt;br /&gt;
* [[Olimar&#039;s voyage log table]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 2 identifiers|Identifiers]]&lt;br /&gt;
* [[Pikmin 2 Pikmin states|Pikmin states]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 3 identifiers|Identifiers]]&lt;br /&gt;
* [[Pikmin 3 progress value|Progress value]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Hey! Pikmin identifiers|Identifiers]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 4 identifiers|Identifiers]]&lt;br /&gt;
* [[Pikmin 4 text identifiers|Text Identifiers]]&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PARTICLES&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Particle effects&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[PCR particles]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[JPC particles]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[PTCL particles (Pikmin 3)]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[PTCL particles (Hey Pikmin)]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FILE FORMATS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Stage generation&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin binary GEN format|Binary GEN format]]&lt;br /&gt;
* [[Pikmin route|Routes]]&lt;br /&gt;
&lt;br /&gt;
* Outdated pages&lt;br /&gt;
** [[Pikmin area generator file|Generator]]&lt;br /&gt;
** [[Pikmin gen codes|Gen codes]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* Overworld&lt;br /&gt;
** [[Pikmin 2 area generator file|Overworld generation parameters]]&lt;br /&gt;
** [[Pikmin 2 map lighting files|Lighting]]&lt;br /&gt;
** [[Pikmin 2 waterboxes|Waterbox]]&lt;br /&gt;
** [[Pikmin 2 collision format|Collision]]&lt;br /&gt;
* Caves&lt;br /&gt;
** [[Cave generation parameters|Cave generation parameters]]&lt;br /&gt;
** [[Pikmin 2 Challenge Mode settings|Challenge Mode]]&lt;br /&gt;
** [[Pikmin 2 cave lighting files|Lighting]]&lt;br /&gt;
* Units (cave rooms)&lt;br /&gt;
** [[Cave unit generation|Cave unit generation]]&lt;br /&gt;
** [[Cave unit definition file|Cave unit definition]]&lt;br /&gt;
** [[Cave fixed layout|Cave fixed layout]]&lt;br /&gt;
* [[Pikmin 2 route|Routes]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* Teki Units&lt;br /&gt;
** [[NoraSpawner]]&lt;br /&gt;
* [[Dandori Battles]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FILE FORMATS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | File formats&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* Archive Formats&lt;br /&gt;
** [[Paired ARC+DIR file]]&lt;br /&gt;
** [[BUN file]] (also ANM)&lt;br /&gt;
** [[BARC file]]&lt;br /&gt;
* Binary formats&lt;br /&gt;
** [[MOD file]] (3D Model)&lt;br /&gt;
** [[ACT file]] (Hierarchy Model File)&lt;br /&gt;
** [[TXE file]] (Texture)&lt;br /&gt;
** [[BTI file]] (Texture)&lt;br /&gt;
** [[BLO file]] (2D screen data)&lt;br /&gt;
** [[PCR file]] (Particle effect parameters)&lt;br /&gt;
** [[DC? files]] (Identifier for either DCA or DCK)&lt;br /&gt;
*** [[DCA file]] (Animation)&lt;br /&gt;
*** [[DCK file]] (Animation)&lt;br /&gt;
** [[H4M file]] (Pre-rendered video)&lt;br /&gt;
** [[JAM file]] (Sequenced music)&lt;br /&gt;
** [[STX file]] (Streamed music)&lt;br /&gt;
** [[AW file]] (Sound Bank)&lt;br /&gt;
** [[Pikmin parameter files|Parameter Files]]&lt;br /&gt;
* Plaintext Formats&lt;br /&gt;
** [[CIN file]] (Cutscene resource manager)&lt;br /&gt;
** [[DSK file]] (Cutscene data)&lt;br /&gt;
** [[DMD file]] (Intermediary 3D model)&lt;br /&gt;
** [[CNV file]] (Intermediary conversion file)&lt;br /&gt;
* Unknown Formats&lt;br /&gt;
** [[GST file]]&lt;br /&gt;
** [[CARD file]]&lt;br /&gt;
* Missing Formats&lt;br /&gt;
** [[DVW file]] (Material file?) &lt;br /&gt;
** [[JMP file]] (Intermediary plaintext 3D model file?)&lt;br /&gt;
** [[MD3 file]] (3D Model)&lt;br /&gt;
** [[BSP flle]] (3D Model)&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* Archive Formats&lt;br /&gt;
** [[SZS file]]&lt;br /&gt;
** [[RARC file]]&lt;br /&gt;
* [[BMD file]] (J3D model)&lt;br /&gt;
* [[BTI file]] (Texture)&lt;br /&gt;
* [[BTK file]] (Animated texture)&lt;br /&gt;
* [[JPC file]] (Particle effect container)&lt;br /&gt;
** [[JPA file]] (Particle effect)&lt;br /&gt;
* [[BCA file]] (Animation)&lt;br /&gt;
* [[BCK file]] (Animation)&lt;br /&gt;
* [[BMS file]] (Sequenced music)&lt;br /&gt;
* [[AST file]] (Streamed music)&lt;br /&gt;
* [[AW file]] (Soundfont)&lt;br /&gt;
* [[THP file]] (Pre-rendered video)&lt;br /&gt;
* [[BLO file]] (2D screen data)&lt;br /&gt;
* [[STB file]] (Cutscene data)&lt;br /&gt;
* [[BMG file]] (Text)&lt;br /&gt;
* [[BPK file]]&lt;br /&gt;
* [[BRK file]]&lt;br /&gt;
* [[BMC file]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Misc.&lt;br /&gt;
** [[DWN file]] (e-Reader minigames?)&lt;br /&gt;
** [[DMD file]] (Intermediary 3D model)&lt;br /&gt;
** [[Pikmin 2 title screen|Title screen]]&lt;br /&gt;
** [[Pikmin 2 save file|Saved game data]]&lt;br /&gt;
** [[2-Player Battle stage parameters]]&lt;br /&gt;
** [[Mail]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
* [[Pikmin 3 radar files|Radar]]&lt;br /&gt;
* [[BFSTM file|BFSTM (streamed music)]]&lt;br /&gt;
* [[MSBT file (Pikmin 3)|MSBT (text string)]]&lt;br /&gt;
* [[FSKB file]] (Unknown)&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
* [[Hey! Pikmin save file|Saved game data]]&lt;br /&gt;
* [[ARC file (Hey! Pikmin)|ARC (archive)]]&lt;br /&gt;
* [[BCH file|BCH (animation)]]&lt;br /&gt;
* [[BFLIM file|BFLIM (image)]]&lt;br /&gt;
* [[MSBT file (Hey! Pikmin)|MSBT (text string)]]&lt;br /&gt;
* [[Z file|Z (archive)]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[WEBM file|WEBM (video)]]&lt;br /&gt;
* [[BNVIB file|BNVIB]]&lt;br /&gt;
* [[UTOC/UCAS file|UTOC/UCAS (Archive for UASSET Files)]]&lt;br /&gt;
* [[UASSET file|UASSET File (Unreal Engine Asset File)]]&lt;br /&gt;
* [[UFONT file|UFONT]]&lt;br /&gt;
* [[LOCRES file|LOCRES]]&lt;br /&gt;
* [[WEM file|WEM]]&lt;br /&gt;
* [[BNK file|BNK]]&lt;br /&gt;
* [[Save Files]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PARAMETERS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Parameters&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin labeled parameter file|Labeled]]&lt;br /&gt;
** [[Pikmin AI constants|AI constants]]&lt;br /&gt;
** [[Pikmin cunit parameters|Cuint]]&lt;br /&gt;
** [[Pikmin demo parameters|Demo]]&lt;br /&gt;
** [[Pikmin game parameters|Game parameters]]&lt;br /&gt;
** [[Pikmin navi parameters|NaviMgr]]&lt;br /&gt;
** [[Pikmin piki parameters|PikiMgr]]&lt;br /&gt;
** [[Pikmin sound parameters|Sound]]&lt;br /&gt;
** [[Pikmin wave parameters|Wave]]&lt;br /&gt;
** [[Pikmin prefs parameters|Prefs]]&lt;br /&gt;
** [[Pikmin boss parameters|Boss]]&lt;br /&gt;
* [[Pikmin unlabeled parameter file|Unlabeled]]&lt;br /&gt;
** [[Pikmin camera parameters|Camera]]&lt;br /&gt;
** [[Pikmin key parameters|Key]]&lt;br /&gt;
** [[Pikmin enemy parameter file format|Enemy]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[naviParms|Leader]]&lt;br /&gt;
* [[pikiParms|Pikmin]]&lt;br /&gt;
* [[CameraParms|Camera]]&lt;br /&gt;
* [[Pikmin 2 enemy parameters|Entity]]&lt;br /&gt;
* [[Titan Dweevil parameters]]&lt;br /&gt;
* [[Trackmap parameters|trackMap parameters]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[carryParam|Carry]]&lt;br /&gt;
* [[fruitsParam|Fruit]]&lt;br /&gt;
* [[pikminParam|Pikmin]]&lt;br /&gt;
* [[itemprogressParam|Item progress]]&lt;br /&gt;
* [[Mission settings]]&lt;br /&gt;
* [[GameobjectParam|Object]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
* [[ActorSerializeParameter and AI]]&lt;br /&gt;
* [[Data Table/Actor Parameters]]&lt;br /&gt;
* [[Enemy Parameters]]&lt;br /&gt;
* [[ActorGeneratorList]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MANAGERS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Managers&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[BX file]] (Soundfont index)&lt;br /&gt;
* [[Pikmin pellet manager|Pellets]]&lt;br /&gt;
* [[Pikmin anim manager|Animations]]&lt;br /&gt;
* [[Pikmin teki manager|Tekis (DOL)]]&lt;br /&gt;
* [[Pikmin stage manager|Stage manager]]&lt;br /&gt;
* [[Pikmin stage information|Stage information / lighting]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[AAF file]] (Soundfont index)&lt;br /&gt;
* Pellet List&lt;br /&gt;
** [[Pikmin 2 otakara_config.txt|Treasure Config]]&lt;br /&gt;
** [[Pikmin 2 item_config.txt|Item Config]]&lt;br /&gt;
** [[Pikmin 2 otakara_config.txt|Otakara Config]]&lt;br /&gt;
** [[Pikmin 2 carcass_config.txt|Carcass Config]]&lt;br /&gt;
** [[Pikmin 2 numberpellet_config.txt|Number Pellet Config]]&lt;br /&gt;
* [[Pikmin 2 animmgr.txt|Animation Manager]]&lt;br /&gt;
* [[Pikmin 2 collinfo.txt|Collision Info]]&lt;br /&gt;
&lt;br /&gt;
* [[Mail Table]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EXPLANATIONS AND NOTES&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Explanations and Notes&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin unread files|Unread files]]&lt;br /&gt;
* [[Pikmin disable archives trick|Disable loading from archives]]&lt;br /&gt;
* [[Pikmin Emperor crash|Emperor crash]]&lt;br /&gt;
* [[Minty Ramblings]]&lt;br /&gt;
* [[Custom sequenced Pikmin music|Custom sequenced music]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Cave spawning]]&lt;br /&gt;
* [[Custom models]]&lt;br /&gt;
* [[Submerged Castle oddities|Special cave properties]]&lt;br /&gt;
* [[How Pikmin 2 loads text|How &#039;&#039;Pikmin 2&#039;&#039; loads text]]&lt;br /&gt;
* [[Sound Replacement Tutorial|Sound Replacement Tutorial]]&lt;br /&gt;
* [[Enemy Memory Usage]]&lt;br /&gt;
* [[Disassembly instructions]]&lt;br /&gt;
* [[Jsystem]]&lt;br /&gt;
* [[Pikmin 2 gEnemyInfo|gEnemyInfo]]&lt;br /&gt;
* [[Epoch Notes]]&lt;br /&gt;
* [[Cubes Yap Notes]]&lt;br /&gt;
* [[User:Captain Salty/Blo Editing Notes|Blo Editing Notes]]&lt;br /&gt;
* [[Cutscene Notes]]&lt;br /&gt;
* [[Creating Interactive BMS Files|Creating interactive area music]]&lt;br /&gt;
* [[Creating cave music|Creating interactive cave music]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 3 oddities|Oddities]]&lt;br /&gt;
* [[Story mode maps in other modes]]&lt;br /&gt;
* [[Pikmin 3 Bingo Battle|Bingo Battle]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Hey! Pikmin unread files|Unread files]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* Documentation&lt;br /&gt;
** [[Lilith&#039;s P4 Notes]]&lt;br /&gt;
** [[Pikmin 4 Demo Research]]&lt;br /&gt;
* Tutorials&lt;br /&gt;
** [[Model Importing Tutorial]]&lt;br /&gt;
** [[WEM Audio Modding Tutorial]]&lt;br /&gt;
** [[Enemy Duplication Tutorial (WIP)]]&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TOOLS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Tools&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[PikBinGen]]&lt;br /&gt;
* [[Archive Toolkit]]&lt;br /&gt;
* [[OpenGL / Dolphin System|OpenGL / Dolphin System]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Cave Creator]]&lt;br /&gt;
* [[Pikmin 2 Routes Editor &amp;amp; Gen Editor]]&lt;br /&gt;
* [[obj2grid]]&lt;br /&gt;
* [[DOL-Ckit]]&lt;br /&gt;
* [[Drought Enders Cave Creator]]&lt;br /&gt;
* [[SuperBMD]]&lt;br /&gt;
* [[pikminBMGtool]]&lt;br /&gt;
* [[btk-conv]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Gen Editor]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Hey! Pikmin stage viewer]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[P4UassetEditor]]&lt;br /&gt;
* [[Modified FModel]]&lt;br /&gt;
* [[UCas/UToc Packer]]&lt;br /&gt;
* [[Dandori DB]]&lt;br /&gt;
* [[Dandori Desktop]]&lt;br /&gt;
* [[UE4LocalizationsTool]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
* [[:Category:Pages with things to do|Things to do]]&lt;br /&gt;
* [[:Category:Pages with unsure information|Unsure info that needs to be confirmed]]&lt;br /&gt;
&lt;br /&gt;
[[Category:PikminTKB]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=Main_Page&amp;diff=4735</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=Main_Page&amp;diff=4735"/>
		<updated>2024-07-20T20:45:42Z</updated>

		<summary type="html">&lt;p&gt;Noodl: Dandori Battles link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MainTemplate&lt;br /&gt;
| welcome = Welcome to the &#039;&#039;&#039;&#039;&#039;Pikmin&#039;&#039; Technical Knowledge Base&#039;&#039;&#039;!&lt;br /&gt;
| blurb = A wiki dedicated to the internal files in &#039;&#039;Pikmin&#039;&#039; games.&lt;br /&gt;
| about_title = About&lt;br /&gt;
| about_content =&lt;br /&gt;
Throughout the years, &#039;&#039;Pikmin&#039;&#039; fans have tinkered with the files inside the games in order to better learn how they work, and to create custom content. Since there are a lot of nuances in every little thing, and since newcomers to the concept of file editing show up all the time, this wiki was created with the purpose of serving as a knowledge base for all that the fans know!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Partners&#039;&#039;&#039;:&lt;br /&gt;
* [https://pikminwiki.com Pikipedia] - the &#039;&#039;Pikmin&#039;&#039; wiki&lt;br /&gt;
* [https://discord.gg/msMKc3G Pikcord] - the &#039;&#039;Pikmin&#039;&#039; community Discord server&lt;br /&gt;
* [https://discord.gg/G7Pgkdh Hocotate Hacker] - the &#039;&#039;Pikmin&#039;&#039; hacking community Discord server&lt;br /&gt;
| other_title = What this wiki is &#039;&#039;not&#039;&#039;&lt;br /&gt;
| other_content =&lt;br /&gt;
* It&#039;s not a wiki about pirating &#039;&#039;Pikmin&#039;&#039; games.&lt;br /&gt;
* It&#039;s not a file-sharing service.&lt;br /&gt;
* It&#039;s not a wiki where you document...&lt;br /&gt;
** Canon content. Try [https://pikminwiki.com/ Pikipedia] instead.&lt;br /&gt;
** Fan-made content. Try [https://pikminfanon.com/ Pikmin Fanon] instead.&lt;br /&gt;
** Unused content or regional differences. Try [https://tcrf.net TCRF] instead.&lt;br /&gt;
* It&#039;s not an official source of info. The information here is mostly obtained via experimenting, and is subject to change as new discoveries are made.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Global information ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: auto; width: 75%;&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;Global info&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;margin: auto;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* [[General instructions]]&lt;br /&gt;
* [[Glossary]]&lt;br /&gt;
* [[Save files]]&lt;br /&gt;
* [[:Category:Tools|Tools]]&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Game-specific information ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: auto; width: 75%;&amp;quot;&lt;br /&gt;
! width=&amp;quot;20%;&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&#039;&#039;Pikmin&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;font-size: 90%;&amp;quot;&amp;gt;(and &#039;&#039;New Play Control! Pikmin&#039;&#039;)&amp;lt;/span&amp;gt;&lt;br /&gt;
! width=&amp;quot;20%;&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&#039;&#039;Pikmin 2&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;font-size: 90%;&amp;quot;&amp;gt;(and &#039;&#039;New Play Control! Pikmin 2&#039;&#039;)&amp;lt;/span&amp;gt;&lt;br /&gt;
! width=&amp;quot;20%;&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&#039;&#039;Pikmin 3&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;font-size: 90%;&amp;quot;&amp;gt;(and &#039;&#039;Pikmin 3 Deluxe&#039;&#039;)&amp;lt;/span&amp;gt;&lt;br /&gt;
! width=&amp;quot;20%;&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&#039;&#039;Hey! Pikmin&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
! width=&amp;quot;20%;&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&#039;&#039;Pikmin 4&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GENERAL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | General&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin|Main information]]&lt;br /&gt;
* [[Pikmin instructions|Instructions]]&lt;br /&gt;
* [[Pikmin cheat codes|Useful cheat codes]]&lt;br /&gt;
* [[Pikmin memory addresses|Memory addresses]]&lt;br /&gt;
* [[Pikmin glossary|Glossary]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 2|Main information]]&lt;br /&gt;
* [[Pikmin 2 instructions|Instructions]]&lt;br /&gt;
* [[Pikmin 2 cheat codes|Useful cheat codes]]&lt;br /&gt;
* [[Pikmin 2 memory addresses|Memory addresses]]&lt;br /&gt;
* [[Pikmin 2 troubleshooting|Troubleshooting]]&lt;br /&gt;
* [[Pikmin 2 glossary|Glossary]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 3|Main information]]&lt;br /&gt;
* [[Pikmin 3 instructions|Instructions]]&lt;br /&gt;
* [[Pikmin 3 troubleshooting|Troubleshooting]]&lt;br /&gt;
* [[Pikmin 3 glossary|Glossary]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Hey! Pikmin|Main information]]&lt;br /&gt;
* [[Hey! Pikmin instructions|Instructions]]&lt;br /&gt;
* [[Hey! Pikmin troubleshooting|Troubleshooting]]&lt;br /&gt;
* [[Hey! Pikmin glossary|Glossary]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 4|Main information]]&lt;br /&gt;
* [[Pikmin 4 instructions|Instructions]]&lt;br /&gt;
* [[Pikmin 4 troubleshooting|Troubleshooting]]&lt;br /&gt;
* [[Pikmin 4 glossary|Glossary]]&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FILE LISTS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | File lists&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin directory tree|Directory tree]]&lt;br /&gt;
* [[JAM file list|JAM file list (Pikiseq.arc)]]&lt;br /&gt;
* [[STX file list|STX file list]]&lt;br /&gt;
* [[CIN file list|CIN file list]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 2 directory tree|Directory tree]]&lt;br /&gt;
* [[AST file list|AST (streamed music)]]&lt;br /&gt;
* [[Pikmin 2 BMS file list|BMS (sequenced music)]]&lt;br /&gt;
* [[Pikmin 2 CND file list|CND (sequenced music for caves)]]&lt;br /&gt;
* [[Guide_To_Sound_File_Names|List of sound effect files in the first bank]]&lt;br /&gt;
* [[Pikmin 2 cave units information|List of information of each cave unit]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 3 directory tree|&#039;&#039;Pikmin 3&#039;&#039; directory tree]]&lt;br /&gt;
* [[Pikmin 3 Deluxe directory tree|&#039;&#039;Pikmin 3 Deluxe&#039;&#039; directory tree]]&lt;br /&gt;
* [[BFSTM file list|BFSTM (streamed music)]]&lt;br /&gt;
* [[MSBT file list|MSBT (text string)]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Hey! Pikmin directory tree|Directory tree]]&lt;br /&gt;
* [[BCSTM file list|BCSTM (music)]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 4 directory tree|directory tree]]&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CONSTANTS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Constants&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin identifiers|Identifiers]]&lt;br /&gt;
* [[Olimar&#039;s voyage log table]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 2 identifiers|Identifiers]]&lt;br /&gt;
* [[Pikmin 2 Pikmin states|Pikmin states]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 3 identifiers|Identifiers]]&lt;br /&gt;
* [[Pikmin 3 progress value|Progress value]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Hey! Pikmin identifiers|Identifiers]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 4 identifiers|Identifiers]]&lt;br /&gt;
* [[Pikmin 4 text identifiers|Text Identifiers]]&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PARTICLES&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Particle effects&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[PCR particles]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[JPC particles]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[PTCL particles (Pikmin 3)]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[PTCL particles (Hey Pikmin)]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FILE FORMATS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Stage generation&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin binary GEN format|Binary GEN format]]&lt;br /&gt;
* [[Pikmin route|Routes]]&lt;br /&gt;
&lt;br /&gt;
* Outdated pages&lt;br /&gt;
** [[Pikmin area generator file|Generator]]&lt;br /&gt;
** [[Pikmin gen codes|Gen codes]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* Overworld&lt;br /&gt;
** [[Pikmin 2 area generator file|Overworld generation parameters]]&lt;br /&gt;
** [[Pikmin 2 map lighting files|Lighting]]&lt;br /&gt;
** [[Pikmin 2 waterboxes|Waterbox]]&lt;br /&gt;
** [[Pikmin 2 collision format|Collision]]&lt;br /&gt;
* Caves&lt;br /&gt;
** [[Cave generation parameters|Cave generation parameters]]&lt;br /&gt;
** [[Pikmin 2 Challenge Mode settings|Challenge Mode]]&lt;br /&gt;
** [[Pikmin 2 cave lighting files|Lighting]]&lt;br /&gt;
* Units (cave rooms)&lt;br /&gt;
** [[Cave unit generation|Cave unit generation]]&lt;br /&gt;
** [[Cave unit definition file|Cave unit definition]]&lt;br /&gt;
** [[Cave fixed layout|Cave fixed layout]]&lt;br /&gt;
* [[Pikmin 2 route|Routes]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* Teki Units&lt;br /&gt;
** [[NoraSpawner]]&lt;br /&gt;
* [[Save Files]]&lt;br /&gt;
* [[Dandori Battles]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FILE FORMATS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | File formats&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* Archive Formats&lt;br /&gt;
** [[Paired ARC+DIR file]]&lt;br /&gt;
** [[BUN file]] (also ANM)&lt;br /&gt;
** [[BARC file]]&lt;br /&gt;
* Binary formats&lt;br /&gt;
** [[MOD file]] (3D Model)&lt;br /&gt;
** [[ACT file]] (Hierarchy Model File)&lt;br /&gt;
** [[TXE file]] (Texture)&lt;br /&gt;
** [[BTI file]] (Texture)&lt;br /&gt;
** [[BLO file]] (2D screen data)&lt;br /&gt;
** [[PCR file]] (Particle effect parameters)&lt;br /&gt;
** [[DC? files]] (Identifier for either DCA or DCK)&lt;br /&gt;
*** [[DCA file]] (Animation)&lt;br /&gt;
*** [[DCK file]] (Animation)&lt;br /&gt;
** [[H4M file]] (Pre-rendered video)&lt;br /&gt;
** [[JAM file]] (Sequenced music)&lt;br /&gt;
** [[STX file]] (Streamed music)&lt;br /&gt;
** [[AW file]] (Sound Bank)&lt;br /&gt;
** [[Pikmin parameter files|Parameter Files]]&lt;br /&gt;
* Plaintext Formats&lt;br /&gt;
** [[CIN file]] (Cutscene resource manager)&lt;br /&gt;
** [[DSK file]] (Cutscene data)&lt;br /&gt;
** [[DMD file]] (Intermediary 3D model)&lt;br /&gt;
** [[CNV file]] (Intermediary conversion file)&lt;br /&gt;
* Unknown Formats&lt;br /&gt;
** [[GST file]]&lt;br /&gt;
** [[CARD file]]&lt;br /&gt;
* Missing Formats&lt;br /&gt;
** [[DVW file]] (Material file?) &lt;br /&gt;
** [[JMP file]] (Intermediary plaintext 3D model file?)&lt;br /&gt;
** [[MD3 file]] (3D Model)&lt;br /&gt;
** [[BSP flle]] (3D Model)&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* Archive Formats&lt;br /&gt;
** [[SZS file]]&lt;br /&gt;
** [[RARC file]]&lt;br /&gt;
* [[BMD file]] (J3D model)&lt;br /&gt;
* [[BTI file]] (Texture)&lt;br /&gt;
* [[BTK file]] (Animated texture)&lt;br /&gt;
* [[JPC file]] (Particle effect container)&lt;br /&gt;
** [[JPA file]] (Particle effect)&lt;br /&gt;
* [[BCA file]] (Animation)&lt;br /&gt;
* [[BCK file]] (Animation)&lt;br /&gt;
* [[BMS file]] (Sequenced music)&lt;br /&gt;
* [[AST file]] (Streamed music)&lt;br /&gt;
* [[AW file]] (Soundfont)&lt;br /&gt;
* [[THP file]] (Pre-rendered video)&lt;br /&gt;
* [[BLO file]] (2D screen data)&lt;br /&gt;
* [[STB file]] (Cutscene data)&lt;br /&gt;
* [[BMG file]] (Text)&lt;br /&gt;
* [[BPK file]]&lt;br /&gt;
* [[BRK file]]&lt;br /&gt;
* [[BMC file]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Misc.&lt;br /&gt;
** [[DWN file]] (e-Reader minigames?)&lt;br /&gt;
** [[DMD file]] (Intermediary 3D model)&lt;br /&gt;
** [[Pikmin 2 title screen|Title screen]]&lt;br /&gt;
** [[Pikmin 2 save file|Saved game data]]&lt;br /&gt;
** [[2-Player Battle stage parameters]]&lt;br /&gt;
** [[Mail]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
* [[Pikmin 3 radar files|Radar]]&lt;br /&gt;
* [[BFSTM file|BFSTM (streamed music)]]&lt;br /&gt;
* [[MSBT file (Pikmin 3)|MSBT (text string)]]&lt;br /&gt;
* [[FSKB file]] (Unknown)&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
* [[Hey! Pikmin save file|Saved game data]]&lt;br /&gt;
* [[ARC file (Hey! Pikmin)|ARC (archive)]]&lt;br /&gt;
* [[BCH file|BCH (animation)]]&lt;br /&gt;
* [[BFLIM file|BFLIM (image)]]&lt;br /&gt;
* [[MSBT file (Hey! Pikmin)|MSBT (text string)]]&lt;br /&gt;
* [[Z file|Z (archive)]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[WEBM file|WEBM (video)]]&lt;br /&gt;
* [[BNVIB file|BNVIB]]&lt;br /&gt;
* [[UTOC/UCAS file|UTOC/UCAS (Archive for UASSET Files)]]&lt;br /&gt;
* [[UASSET file|UASSET File (Unreal Engine Asset File)]]&lt;br /&gt;
* [[UFONT file|UFONT]]&lt;br /&gt;
* [[LOCRES file|LOCRES]]&lt;br /&gt;
* [[WEM file|WEM]]&lt;br /&gt;
* [[BNK file|BNK]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PARAMETERS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Parameters&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin labeled parameter file|Labeled]]&lt;br /&gt;
** [[Pikmin AI constants|AI constants]]&lt;br /&gt;
** [[Pikmin cunit parameters|Cuint]]&lt;br /&gt;
** [[Pikmin demo parameters|Demo]]&lt;br /&gt;
** [[Pikmin game parameters|Game parameters]]&lt;br /&gt;
** [[Pikmin navi parameters|NaviMgr]]&lt;br /&gt;
** [[Pikmin piki parameters|PikiMgr]]&lt;br /&gt;
** [[Pikmin sound parameters|Sound]]&lt;br /&gt;
** [[Pikmin wave parameters|Wave]]&lt;br /&gt;
** [[Pikmin prefs parameters|Prefs]]&lt;br /&gt;
** [[Pikmin boss parameters|Boss]]&lt;br /&gt;
* [[Pikmin unlabeled parameter file|Unlabeled]]&lt;br /&gt;
** [[Pikmin camera parameters|Camera]]&lt;br /&gt;
** [[Pikmin key parameters|Key]]&lt;br /&gt;
** [[Pikmin enemy parameter file format|Enemy]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[naviParms|Leader]]&lt;br /&gt;
* [[pikiParms|Pikmin]]&lt;br /&gt;
* [[CameraParms|Camera]]&lt;br /&gt;
* [[Pikmin 2 enemy parameters|Entity]]&lt;br /&gt;
* [[Titan Dweevil parameters]]&lt;br /&gt;
* [[Trackmap parameters|trackMap parameters]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[carryParam|Carry]]&lt;br /&gt;
* [[fruitsParam|Fruit]]&lt;br /&gt;
* [[pikminParam|Pikmin]]&lt;br /&gt;
* [[itemprogressParam|Item progress]]&lt;br /&gt;
* [[Mission settings]]&lt;br /&gt;
* [[GameobjectParam|Object]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
* [[ActorSerializeParameter and AI]]&lt;br /&gt;
* [[Data Table/Actor Parameters]]&lt;br /&gt;
* [[Enemy Parameters]]&lt;br /&gt;
* [[ActorGeneratorList]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MANAGERS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Managers&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[BX file]] (Soundfont index)&lt;br /&gt;
* [[Pikmin pellet manager|Pellets]]&lt;br /&gt;
* [[Pikmin anim manager|Animations]]&lt;br /&gt;
* [[Pikmin teki manager|Tekis (DOL)]]&lt;br /&gt;
* [[Pikmin stage manager|Stage manager]]&lt;br /&gt;
* [[Pikmin stage information|Stage information / lighting]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[AAF file]] (Soundfont index)&lt;br /&gt;
* Pellet List&lt;br /&gt;
** [[Pikmin 2 otakara_config.txt|Treasure Config]]&lt;br /&gt;
** [[Pikmin 2 item_config.txt|Item Config]]&lt;br /&gt;
** [[Pikmin 2 otakara_config.txt|Otakara Config]]&lt;br /&gt;
** [[Pikmin 2 carcass_config.txt|Carcass Config]]&lt;br /&gt;
** [[Pikmin 2 numberpellet_config.txt|Number Pellet Config]]&lt;br /&gt;
* [[Pikmin 2 animmgr.txt|Animation Manager]]&lt;br /&gt;
* [[Pikmin 2 collinfo.txt|Collision Info]]&lt;br /&gt;
&lt;br /&gt;
* [[Mail Table]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EXPLANATIONS AND NOTES&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Explanations and Notes&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin unread files|Unread files]]&lt;br /&gt;
* [[Pikmin disable archives trick|Disable loading from archives]]&lt;br /&gt;
* [[Pikmin Emperor crash|Emperor crash]]&lt;br /&gt;
* [[Minty Ramblings]]&lt;br /&gt;
* [[Custom sequenced Pikmin music|Custom sequenced music]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Cave spawning]]&lt;br /&gt;
* [[Custom models]]&lt;br /&gt;
* [[Submerged Castle oddities|Special cave properties]]&lt;br /&gt;
* [[How Pikmin 2 loads text|How &#039;&#039;Pikmin 2&#039;&#039; loads text]]&lt;br /&gt;
* [[Sound Replacement Tutorial|Sound Replacement Tutorial]]&lt;br /&gt;
* [[Enemy Memory Usage]]&lt;br /&gt;
* [[Disassembly instructions]]&lt;br /&gt;
* [[Jsystem]]&lt;br /&gt;
* [[Pikmin 2 gEnemyInfo|gEnemyInfo]]&lt;br /&gt;
* [[Epoch Notes]]&lt;br /&gt;
* [[Cubes Yap Notes]]&lt;br /&gt;
* [[User:Captain Salty/Blo Editing Notes|Blo Editing Notes]]&lt;br /&gt;
* [[Cutscene Notes]]&lt;br /&gt;
* [[Creating Interactive BMS Files|Creating interactive area music]]&lt;br /&gt;
* [[Creating cave music|Creating interactive cave music]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Pikmin 3 oddities|Oddities]]&lt;br /&gt;
* [[Story mode maps in other modes]]&lt;br /&gt;
* [[Pikmin 3 Bingo Battle|Bingo Battle]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Hey! Pikmin unread files|Unread files]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* Documentation&lt;br /&gt;
** [[Lilith&#039;s P4 Notes]]&lt;br /&gt;
** [[Pikmin 4 Demo Research]]&lt;br /&gt;
* Tutorials&lt;br /&gt;
** [[Model Importing Tutorial]]&lt;br /&gt;
** [[WEM Audio Modding Tutorial]]&lt;br /&gt;
** [[Enemy Duplication Tutorial (WIP)]]&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TOOLS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Tools&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[PikBinGen]]&lt;br /&gt;
* [[Archive Toolkit]]&lt;br /&gt;
* [[OpenGL / Dolphin System|OpenGL / Dolphin System]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Cave Creator]]&lt;br /&gt;
* [[Pikmin 2 Routes Editor &amp;amp; Gen Editor]]&lt;br /&gt;
* [[obj2grid]]&lt;br /&gt;
* [[DOL-Ckit]]&lt;br /&gt;
* [[Drought Enders Cave Creator]]&lt;br /&gt;
* [[SuperBMD]]&lt;br /&gt;
* [[pikminBMGtool]]&lt;br /&gt;
* [[btk-conv]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Gen Editor]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Hey! Pikmin stage viewer]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[P4UassetEditor]]&lt;br /&gt;
* [[Modified FModel]]&lt;br /&gt;
* [[UCas/UToc Packer]]&lt;br /&gt;
* [[Dandori DB]]&lt;br /&gt;
* [[Dandori Desktop]]&lt;br /&gt;
* [[UE4LocalizationsTool]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
* [[:Category:Pages with things to do|Things to do]]&lt;br /&gt;
* [[:Category:Pages with unsure information|Unsure info that needs to be confirmed]]&lt;br /&gt;
&lt;br /&gt;
[[Category:PikminTKB]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=File:P4-creature-ai-inventory-bytes.png&amp;diff=4734</id>
		<title>File:P4-creature-ai-inventory-bytes.png</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=File:P4-creature-ai-inventory-bytes.png&amp;diff=4734"/>
		<updated>2024-07-14T02:04:09Z</updated>

		<summary type="html">&lt;p&gt;Noodl: Noodl uploaded a new version of File:P4-creature-ai-inventory-bytes.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Charted bytes of a creature&#039;s AI&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=File:P4-creature-ai-inventory-bytes.png&amp;diff=4733</id>
		<title>File:P4-creature-ai-inventory-bytes.png</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=File:P4-creature-ai-inventory-bytes.png&amp;diff=4733"/>
		<updated>2024-07-14T02:02:29Z</updated>

		<summary type="html">&lt;p&gt;Noodl: Noodl uploaded a new version of File:P4-creature-ai-inventory-bytes.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Charted bytes of a creature&#039;s AI&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=File:P4-otakara-ai.png&amp;diff=4732</id>
		<title>File:P4-otakara-ai.png</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=File:P4-otakara-ai.png&amp;diff=4732"/>
		<updated>2024-07-14T02:00:31Z</updated>

		<summary type="html">&lt;p&gt;Noodl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=ActorSerializeParameter_and_AI&amp;diff=4731</id>
		<title>ActorSerializeParameter and AI</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=ActorSerializeParameter_and_AI&amp;diff=4731"/>
		<updated>2024-07-14T02:00:05Z</updated>

		<summary type="html">&lt;p&gt;Noodl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All of the info on this page (thus far) is research and assumptions by [[Noodl]] - it may not all be entirely correct.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; is a property on each object in an &amp;lt;code&amp;gt;ActorGeneratorList&amp;lt;/code&amp;gt;. It contains much of the &amp;quot;per-instance&amp;quot; characteristics of the enemy it is generating, and contains parameter such as AI, object life and audio. &lt;br /&gt;
&lt;br /&gt;
Each member of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; is an object containing &amp;lt;code&amp;gt;Static&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Dynamic&amp;lt;/code&amp;gt; properties, both of which are varying-width arrays of 8bit integers that represent other data types. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ActorSerializeParameter&amp;quot;: {&lt;br /&gt;
        &amp;quot;AI&amp;quot;: {&lt;br /&gt;
            &amp;quot;Static&amp;quot;: [],&lt;br /&gt;
            &amp;quot;Dynamic&amp;quot;: [];&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;Hash&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CheckComp&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;ActorParameter&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;SubAI&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Life&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;PortalTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;DemoTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Pikmin&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CharacterEdit&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;PopPlace&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Strategy&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakEmitterConfig&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakSimpleState&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakMultiplePosition&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakAudioTable&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;WaterTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;NavMeshTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Affordance&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;HiddenBoxTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;NarrowSpaceBoxTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;WarpTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;ActionMarker&amp;quot;: { ... },&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the majority of actors in the game, most of the fields within &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; are the same for each type of enemy - that is, all Kochappys in the game have the same Life, ActorParameter, CheckComp, etc. A data scrape of each unique value that each type of enemy can have can be found [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/entityData.json/ here]. This can be used for sourcing the non-changing values, or for various examples of each byte array for every creature and object. (Generating code is [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/scrape.js/ here]).&lt;br /&gt;
&lt;br /&gt;
== AI ==&lt;br /&gt;
&lt;br /&gt;
AI is the interesting and important parameter. It controls per-instance parameters for actors such as drops, territory, and configuration for gimmicks. I currently believe that AI is mapped on top of an entity&#039;s own blueprint configuration from its &amp;lt;code&amp;gt;Placeables/&amp;lt;/code&amp;gt; file, with AI able to send overrides to parts of it, though I&#039;ve yet to work out where these bytes go. We can see traces of the Sublevels files showing AI gen variables with overriden base parameters.&lt;br /&gt;
&lt;br /&gt;
=== Concepts ===&lt;br /&gt;
&lt;br /&gt;
Before trying to break down a byte array, it helps to understand a few concepts of the data types used:&lt;br /&gt;
&lt;br /&gt;
* Each integer in the array is a single 8-bit/1-byte value, so can only go up to 255.&lt;br /&gt;
* The arrays are not fixed to 32-bit boundaries. A 4-byte float can be adjacent to a 16bit integer.&lt;br /&gt;
* Booleans are 4-bytes with the 0/1 being in the first index&lt;br /&gt;
* Floats are little-endian, and 4 bytes long. For example the value &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; will be 4 bytes of &amp;lt;code&amp;gt;0, 0, 200, 66&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Integers can also be encoded across 2-bytes (two integers of this array). For example, the value &amp;lt;code&amp;gt;271&amp;lt;/code&amp;gt; would be &amp;lt;code&amp;gt;15,1&amp;lt;/code&amp;gt; - 15 + (256 * 1). They are also sometimes just 1-byte long with the value at index 0.&lt;br /&gt;
* Strings are encoded by 4 bytes dictating the length of the string (null terminator included) followed by the string&#039;s characters in ASCII codes, ending with &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. For example the string of &amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt; will be encoded as &amp;lt;code&amp;gt;5, 0, 0, 0, 78, 111, 110, 101, 0&amp;lt;/code&amp;gt;, with 5 being the length of the string (4 chars + &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;).&lt;br /&gt;
* When arrays/objects are used (for fields like &amp;lt;code&amp;gt;DropConditions&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;bSetTerritory&amp;lt;/code&amp;gt;, there is often a 4 byte boolean that dictates if the rest of the object is present, or the number of items in the array. For example, with territory, if &amp;lt;code&amp;gt;bSetTerritory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, the bytes will look like &amp;lt;code&amp;gt;0, 0, 0, 0, ... &amp;lt;/code&amp;gt; followed by whatever else comes after. However if it is true (&amp;lt;code&amp;gt;1, 0, 0, 0&amp;lt;/code&amp;gt;), 5 floats (X, Y, Z, HalfHeight and Radius) will follow, making the array vary in length.&lt;br /&gt;
&lt;br /&gt;
[[Dandori Desktop]] provides tools for byte conversions that can aid in finding values.&lt;br /&gt;
&lt;br /&gt;
== Charts == &lt;br /&gt;
&lt;br /&gt;
Attempts have been made to chart the bytes of various AI parameters to uncover patterns and the locations of values in order to manipulate them.&lt;br /&gt;
&lt;br /&gt;
There are many bytes AFTER the end of the inventory which ends in 4 bytes of &amp;lt;code&amp;gt;255, 255, 255, 255&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt;), but I have no idea what they do yet. I believe they&#039;re probably the overrides for the enemy&#039;s AI_GEN_VARIABLE, and other objects like &amp;lt;code&amp;gt;SniffPointParameter&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Creature AI ===&lt;br /&gt;
Details the drop system for a regular enemy (and eggs). The inventory system (&amp;lt;code&amp;gt;DropParameter&amp;lt;/code&amp;gt;) used here is nearly universal in the game, with objects having a slightly different structure for some reason, but is mostly the same, so it helps to understand creatures first. &lt;br /&gt;
&lt;br /&gt;
[[File:P4-creature-ai-inventory-bytes.png|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== ActorSpawner AI ===&lt;br /&gt;
ActorSpawners are a little different, and their only drop is the thing they spawn, with some configuration for it.&lt;br /&gt;
&lt;br /&gt;
[[File:P4-actorspawner-ai.png|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== GroupDropManager AI ===&lt;br /&gt;
&lt;br /&gt;
[[File:P4-gdm-ai.png ‎|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== NoraSpawner AI ===&lt;br /&gt;
&lt;br /&gt;
[[File:P4-noraspawner-ai.png ‎|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== PortalTrigger Gen Variable ===&lt;br /&gt;
&lt;br /&gt;
This chart is for the &amp;lt;code&amp;gt;PortalTrigger.Static&amp;lt;/code&amp;gt; part of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; and will usually be used in conjunction with portal objects like &amp;lt;code&amp;gt;MadoriRuins&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DownPortal&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-portaltrigger-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== AreaBase AI Gen Variable ===&lt;br /&gt;
&lt;br /&gt;
This chart is for the base camps.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-areabasecamp-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sprinkler AI and ObjectAIParameter ===&lt;br /&gt;
&lt;br /&gt;
Objects mostly seem composed of two objects - &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; and an entity-specific object, like &amp;lt;code&amp;gt;SprinklerAIParameter&amp;lt;/code&amp;gt;. The former contains inventories (&amp;lt;code&amp;gt;DropParameter&amp;lt;/code&amp;gt;) and some stuff to do with edge collision it seems, while the latter controls everything specific to the entity. The chart below illustrates it for sprinklers.&lt;br /&gt;
&lt;br /&gt;
* To have a valve that is permanently on - enable `bSprinklerOnly` and set `valveID` to `None`. &lt;br /&gt;
* To connect a valve, match the `valveID` to the valve object&#039;s ID. The only valve config I&#039;ve found works is to use the `Build` workType. This setup will have a sprinkler turn on once for `OpenTime` number of seconds upon valve activation, then turn off - this is how Cave013 douses fire. &lt;br /&gt;
* To have a sprinkler always on, make a `NavMeshTriggerLinkForSplash` object on top of the sprinkler, and make the `NavMeshTriggerID`s for both match. The sprinkler and valve cannot have the same `demoBindName`. I&#039;ve not played much with these, but I believe they _may_ be to do with saving the state of the sprinkler after the cutscene has played. In my working example, I used `GSprinkler05` and `GValveOnce06` for my `demoBindName`s, and `demoId` of `0`.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-sprinkler-objectAI.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== Valve AI ===&lt;br /&gt;
&lt;br /&gt;
Valves have a few properties in their parameter, but ObjectParameter is mostly unused here. There are some missing values that I haven&#039;t found the indexes for, but you can see the default values in FModel&#039;s blueprint. The enum values for EValveWorkType are also unknown, but 2 and 6 are confirmed. &lt;br /&gt;
 &lt;br /&gt;
[[File:p4-valveai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== NavMeshTriggers ===&lt;br /&gt;
&lt;br /&gt;
There are 3 types: &amp;lt;code&amp;gt;NavMeshTrigger&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NavMeshTriggerClear&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NavMeshTriggerLinkForSplash&amp;lt;/code&amp;gt; (for sprinklers). My current understanding is that these triggers send pulses to whatever they&#039;re linked to on a timer or some conditions. These bytes come from the &amp;lt;code&amp;gt;NavMeshTrigger&amp;lt;/code&amp;gt; part of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt;, and seem to be some of the only objects in the game that use that property. It is worth noting that the &amp;lt;code&amp;gt;AI&amp;lt;/code&amp;gt; property for &amp;lt;code&amp;gt;NavMeshTriggerLinkForSplash&amp;lt;/code&amp;gt; is identical for every instance of this actor across the game. &amp;lt;code&amp;gt;NavMeshTriggerClear&amp;lt;/code&amp;gt; has several different sets of AI bytes though.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-navmeshtrigger.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== Geyser AI ===&lt;br /&gt;
&lt;br /&gt;
The geyser&#039;s AI bytes are actually comprised of an &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; as usual, followed by the &amp;lt;code&amp;gt;GeyserAI_GEN_VARIABLE&amp;lt;/code&amp;gt; and then the &amp;lt;code&amp;gt;NavLink_GEN_VARIALBE&amp;lt;/code&amp;gt;. What&#039;s interesting to note about this is that it means the &amp;lt;code&amp;gt;AI.Static&amp;lt;/code&amp;gt; array can contain more than just what is in &amp;lt;code&amp;gt;AI_GEN_VARIABLE&amp;lt;/code&amp;gt;. Primitive geysers can be made simply by editing the &amp;lt;code&amp;gt;Right&amp;lt;/code&amp;gt; vector, which applies the vector to your coordinates with some velocity number.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-geyser-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== Treasure AI ===&lt;br /&gt;
 &lt;br /&gt;
[[File:P4-otakara-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== Researching ===&lt;br /&gt;
&lt;br /&gt;
The best way of breaking down the AI parameter (I have found) is to combine the blueprint JSONs from the &amp;lt;code&amp;gt;Sublevels/&amp;lt;/code&amp;gt; folder, with the &amp;lt;code&amp;gt;ActorPlacementInfo&amp;lt;/code&amp;gt; file of the same type. The Sublevels files contain the gen_variables that seem to be encoded into the byte arrays of ActorSerializeParameter.&lt;br /&gt;
&lt;br /&gt;
AI parameters can be found by searching for &amp;lt;code&amp;gt;{entity}AI_GEN_VARIABLE&amp;lt;/code&amp;gt;, for example &amp;lt;code&amp;gt;ElecMushiAI_GEN_VARIABLE&amp;lt;/code&amp;gt; for Anode Beetles. Most of the contents of that object&#039;s &amp;lt;code&amp;gt;Properties&amp;lt;/code&amp;gt; will be encoded in that actor&#039;s &amp;lt;code&amp;gt;ActorSerializeParameter.AI.Static&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;ActorPlacementInfo&amp;lt;/code&amp;gt; file, so you can compare things like the drop numbers, asset path and other such floats for occurrences of those values in the AI array. Strings are often the easiest to find/locate with due to their easy to spot nature (look for the big sequence of non-0 numbers and decode it to see if it matches what you need). Finding two instances in Sublevel files that have different values for a given property (or the property being set at all for infrequent ones) will tell you which actor instances to look for in the AP files, which you can then anaylse the bytes for to find your different value, giving you its array index/type.&lt;br /&gt;
&lt;br /&gt;
A scrape of all of the sublevel files can be found in [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/sublevels.json Dandori Desktop&#039;s repo] which collects every parameter that each entity ever defines - so every drop, and config param ever given to any Kochappy, for example. This is very useful for finding all the potential values of random things like &amp;lt;code&amp;gt;GameRulePermissionFlag&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;CustomParameter&amp;lt;/code&amp;gt;, and is a great starting point for piecing parts of the AI puzzles together, as params like &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;TekiAIParameter&amp;lt;/code&amp;gt; are shared frequently, with individual properties being set on certain entities. This isn&#039;t comprehensive as many properties are just left defaulted, which doesn&#039;t mean they can&#039;t be changed, just that we don&#039;t have 2 differing examples to easily locate them in the bytes.&lt;br /&gt;
&lt;br /&gt;
The blueprints can also be viewed in FModel (in &amp;lt;code&amp;gt;Placeables/&amp;lt;/code&amp;gt;), and you can find the &amp;lt;code&amp;gt;AI_GEN_VARIABLE&amp;lt;/code&amp;gt;s which should have all the property names and their default values. I&#039;ve had limited success here, as you often can&#039;t just find the value in the AI bytes, but it can definitely give insight into what must be available in the object, and other possible enum values etc. This leads me to think it&#039;s possible that non-overriden fields of the gen variable objects are left zeroed, which doesn&#039;t make much sense, because how would you set a value of zero? idk.&lt;br /&gt;
&lt;br /&gt;
=== Data Dumps ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/entityData.json/ entityData.json] - a dump of every unique value every actor has in the game from the AP files (non-night)&lt;br /&gt;
* [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/sublevels.json Sublevels.json] - a dump of every value each actor can have from the Sublevels files - these are the English overriden parameter names &lt;br /&gt;
* [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/scrape.js/ scrape.js] - the code to generate the above lists - can be supplied an actor name to extract its section from &amp;lt;code&amp;gt;entityData.json&amp;lt;/code&amp;gt; given how bulky that file is. Clone Dandori Desktop and run &amp;lt;code&amp;gt;node scrape.js Kochappy&amp;lt;/code&amp;gt; to dump Kochappy&#039;s data into the &amp;lt;code&amp;gt;extractions/&amp;lt;/code&amp;gt; folder&lt;br /&gt;
&lt;br /&gt;
[[Category:Pikmin 4]]&lt;br /&gt;
[[Category:Parameters]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=File:P4-creature-ai-inventory-bytes.png&amp;diff=4723</id>
		<title>File:P4-creature-ai-inventory-bytes.png</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=File:P4-creature-ai-inventory-bytes.png&amp;diff=4723"/>
		<updated>2024-06-30T21:47:11Z</updated>

		<summary type="html">&lt;p&gt;Noodl: Noodl uploaded a new version of File:P4-creature-ai-inventory-bytes.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Charted bytes of a creature&#039;s AI&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=ActorSerializeParameter_and_AI&amp;diff=4715</id>
		<title>ActorSerializeParameter and AI</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=ActorSerializeParameter_and_AI&amp;diff=4715"/>
		<updated>2024-06-10T22:13:57Z</updated>

		<summary type="html">&lt;p&gt;Noodl: specify non-night&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All of the info on this page (thus far) is research and assumptions by [[Noodl]] - it may not all be entirely correct.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; is a property on each object in an &amp;lt;code&amp;gt;ActorGeneratorList&amp;lt;/code&amp;gt;. It contains much of the &amp;quot;per-instance&amp;quot; characteristics of the enemy it is generating, and contains parameter such as AI, object life and audio. &lt;br /&gt;
&lt;br /&gt;
Each member of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; is an object containing &amp;lt;code&amp;gt;Static&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Dynamic&amp;lt;/code&amp;gt; properties, both of which are varying-width arrays of 8bit integers that represent other data types. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ActorSerializeParameter&amp;quot;: {&lt;br /&gt;
        &amp;quot;AI&amp;quot;: {&lt;br /&gt;
            &amp;quot;Static&amp;quot;: [],&lt;br /&gt;
            &amp;quot;Dynamic&amp;quot;: [];&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;Hash&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CheckComp&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;ActorParameter&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;SubAI&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Life&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;PortalTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;DemoTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Pikmin&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CharacterEdit&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;PopPlace&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Strategy&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakEmitterConfig&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakSimpleState&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakMultiplePosition&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakAudioTable&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;WaterTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;NavMeshTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Affordance&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;HiddenBoxTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;NarrowSpaceBoxTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;WarpTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;ActionMarker&amp;quot;: { ... },&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the majority of actors in the game, most of the fields within &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; are the same for each type of enemy - that is, all Kochappys in the game have the same Life, ActorParameter, CheckComp, etc. A data scrape of each unique value that each type of enemy can have can be found [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/entityData.json/ here]. This can be used for sourcing the non-changing values, or for various examples of each byte array for every creature and object. (Generating code is [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/scrape.js/ here]).&lt;br /&gt;
&lt;br /&gt;
== AI ==&lt;br /&gt;
&lt;br /&gt;
AI is the interesting and important parameter. It controls per-instance parameters for actors such as drops, territory, and configuration for gimmicks. I currently believe that AI is mapped on top of an entity&#039;s own blueprint configuration from its &amp;lt;code&amp;gt;Placeables/&amp;lt;/code&amp;gt; file, with AI able to send overrides to parts of it, though I&#039;ve yet to work out where these bytes go. We can see traces of the Sublevels files showing AI gen variables with overriden base parameters.&lt;br /&gt;
&lt;br /&gt;
=== Concepts ===&lt;br /&gt;
&lt;br /&gt;
Before trying to break down a byte array, it helps to understand a few concepts of the data types used:&lt;br /&gt;
&lt;br /&gt;
* Each integer in the array is a single 8-bit/1-byte value, so can only go up to 255.&lt;br /&gt;
* The arrays are not fixed to 32-bit boundaries. A 4-byte float can be adjacent to a 16bit integer.&lt;br /&gt;
* Booleans are 4-bytes with the 0/1 being in the first index&lt;br /&gt;
* Floats are little-endian, and 4 bytes long. For example the value &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; will be 4 bytes of &amp;lt;code&amp;gt;0, 0, 200, 66&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Integers can also be encoded across 2-bytes (two integers of this array). For example, the value &amp;lt;code&amp;gt;271&amp;lt;/code&amp;gt; would be &amp;lt;code&amp;gt;15,1&amp;lt;/code&amp;gt; - 15 + (256 * 1). They are also sometimes just 1-byte long with the value at index 0.&lt;br /&gt;
* Strings are encoded by 4 bytes dictating the length of the string (null terminator included) followed by the string&#039;s characters in ASCII codes, ending with &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. For example the string of &amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt; will be encoded as &amp;lt;code&amp;gt;5, 0, 0, 0, 78, 111, 110, 101, 0&amp;lt;/code&amp;gt;, with 5 being the length of the string (4 chars + &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;).&lt;br /&gt;
* When arrays/objects are used (for fields like &amp;lt;code&amp;gt;DropConditions&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;bSetTerritory&amp;lt;/code&amp;gt;, there is often a 4 byte boolean that dictates if the rest of the object is present, or the number of items in the array. For example, with territory, if &amp;lt;code&amp;gt;bSetTerritory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, the bytes will look like &amp;lt;code&amp;gt;0, 0, 0, 0, ... &amp;lt;/code&amp;gt; followed by whatever else comes after. However if it is true (&amp;lt;code&amp;gt;1, 0, 0, 0&amp;lt;/code&amp;gt;), 5 floats (X, Y, Z, HalfHeight and Radius) will follow, making the array vary in length.&lt;br /&gt;
&lt;br /&gt;
[[Dandori Desktop]] provides tools for byte conversions that can aid in finding values.&lt;br /&gt;
&lt;br /&gt;
== Charts == &lt;br /&gt;
&lt;br /&gt;
Attempts have been made to chart the bytes of various AI parameters to uncover patterns and the locations of values in order to manipulate them.&lt;br /&gt;
&lt;br /&gt;
There are many bytes AFTER the end of the inventory which ends in 4 bytes of &amp;lt;code&amp;gt;255, 255, 255, 255&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt;), but I have no idea what they do yet. I believe they&#039;re probably the overrides for the enemy&#039;s AI_GEN_VARIABLE, and other objects like &amp;lt;code&amp;gt;SniffPointParameter&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Creature AI ===&lt;br /&gt;
Details the drop system for a regular enemy (and eggs). The inventory system (&amp;lt;code&amp;gt;DropParameter&amp;lt;/code&amp;gt;) used here is nearly universal in the game, with objects having a slightly different structure for some reason, but is mostly the same, so it helps to understand creatures first. &lt;br /&gt;
&lt;br /&gt;
[[File:P4-creature-ai-inventory-bytes.png|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== ActorSpawner AI ===&lt;br /&gt;
ActorSpawners are a little different, and their only drop is the thing they spawn, with some configuration for it.&lt;br /&gt;
&lt;br /&gt;
[[File:P4-actorspawner-ai.png|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== GroupDropManager AI ===&lt;br /&gt;
&lt;br /&gt;
[[File:P4-gdm-ai.png ‎|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== NoraSpawner AI ===&lt;br /&gt;
&lt;br /&gt;
[[File:P4-noraspawner-ai.png ‎|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== PortalTrigger Gen Variable ===&lt;br /&gt;
&lt;br /&gt;
This chart is for the &amp;lt;code&amp;gt;PortalTrigger.Static&amp;lt;/code&amp;gt; part of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; and will usually be used in conjunction with portal objects like &amp;lt;code&amp;gt;MadoriRuins&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DownPortal&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-portaltrigger-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== AreaBase AI Gen Variable ===&lt;br /&gt;
&lt;br /&gt;
This chart is for the base camps.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-areabasecamp-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sprinkler AI and ObjectAIParameter ===&lt;br /&gt;
&lt;br /&gt;
Objects mostly seem composed of two objects - &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; and an entity-specific object, like &amp;lt;code&amp;gt;SprinklerAIParameter&amp;lt;/code&amp;gt;. The former contains inventories (&amp;lt;code&amp;gt;DropParameter&amp;lt;/code&amp;gt;) and some stuff to do with edge collision it seems, while the latter controls everything specific to the entity. The chart below illustrates it for sprinklers.&lt;br /&gt;
&lt;br /&gt;
* To have a valve that is permanently on - enable `bSprinklerOnly` and set `valveID` to `None`. &lt;br /&gt;
* To connect a valve, match the `valveID` to the valve object&#039;s ID. The only valve config I&#039;ve found works is to use the `Build` workType. This setup will have a sprinkler turn on once for `OpenTime` number of seconds upon valve activation, then turn off - this is how Cave013 douses fire. &lt;br /&gt;
* To have a sprinkler always on, make a `NavMeshTriggerLinkForSplash` object on top of the sprinkler, and make the `NavMeshTriggerID`s for both match. The sprinkler and valve cannot have the same `demoBindName`. I&#039;ve not played much with these, but I believe they _may_ be to do with saving the state of the sprinkler after the cutscene has played. In my working example, I used `GSprinkler05` and `GValveOnce06` for my `demoBindName`s, and `demoId` of `0`.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-sprinkler-objectAI.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== Valve AI ===&lt;br /&gt;
&lt;br /&gt;
Valves have a few properties in their parameter, but ObjectParameter is mostly unused here. There are some missing values that I haven&#039;t found the indexes for, but you can see the default values in FModel&#039;s blueprint. The enum values for EValveWorkType are also unknown, but 2 and 6 are confirmed. &lt;br /&gt;
 &lt;br /&gt;
[[File:p4-valveai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== NavMeshTriggers ===&lt;br /&gt;
&lt;br /&gt;
There are 3 types: &amp;lt;code&amp;gt;NavMeshTrigger&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NavMeshTriggerClear&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NavMeshTriggerLinkForSplash&amp;lt;/code&amp;gt; (for sprinklers). My current understanding is that these triggers send pulses to whatever they&#039;re linked to on a timer or some conditions. These bytes come from the &amp;lt;code&amp;gt;NavMeshTrigger&amp;lt;/code&amp;gt; part of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt;, and seem to be some of the only objects in the game that use that property. It is worth noting that the &amp;lt;code&amp;gt;AI&amp;lt;/code&amp;gt; property for &amp;lt;code&amp;gt;NavMeshTriggerLinkForSplash&amp;lt;/code&amp;gt; is identical for every instance of this actor across the game. &amp;lt;code&amp;gt;NavMeshTriggerClear&amp;lt;/code&amp;gt; has several different sets of AI bytes though.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-navmeshtrigger.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== Geyser AI ===&lt;br /&gt;
&lt;br /&gt;
The geyser&#039;s AI bytes are actually comprised of an &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; as usual, followed by the &amp;lt;code&amp;gt;GeyserAI_GEN_VARIABLE&amp;lt;/code&amp;gt; and then the &amp;lt;code&amp;gt;NavLink_GEN_VARIALBE&amp;lt;/code&amp;gt;. What&#039;s interesting to note about this is that it means the &amp;lt;code&amp;gt;AI.Static&amp;lt;/code&amp;gt; array can contain more than just what is in &amp;lt;code&amp;gt;AI_GEN_VARIABLE&amp;lt;/code&amp;gt;. Primitive geysers can be made simply by editing the &amp;lt;code&amp;gt;Right&amp;lt;/code&amp;gt; vector, which applies the vector to your coordinates with some velocity number.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-geyser-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== Researching ===&lt;br /&gt;
&lt;br /&gt;
The best way of breaking down the AI parameter (I have found) is to combine the blueprint JSONs from the &amp;lt;code&amp;gt;Sublevels/&amp;lt;/code&amp;gt; folder, with the &amp;lt;code&amp;gt;ActorPlacementInfo&amp;lt;/code&amp;gt; file of the same type. The Sublevels files contain the gen_variables that seem to be encoded into the byte arrays of ActorSerializeParameter.&lt;br /&gt;
&lt;br /&gt;
AI parameters can be found by searching for &amp;lt;code&amp;gt;{entity}AI_GEN_VARIABLE&amp;lt;/code&amp;gt;, for example &amp;lt;code&amp;gt;ElecMushiAI_GEN_VARIABLE&amp;lt;/code&amp;gt; for Anode Beetles. Most of the contents of that object&#039;s &amp;lt;code&amp;gt;Properties&amp;lt;/code&amp;gt; will be encoded in that actor&#039;s &amp;lt;code&amp;gt;ActorSerializeParameter.AI.Static&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;ActorPlacementInfo&amp;lt;/code&amp;gt; file, so you can compare things like the drop numbers, asset path and other such floats for occurrences of those values in the AI array. Strings are often the easiest to find/locate with due to their easy to spot nature (look for the big sequence of non-0 numbers and decode it to see if it matches what you need). Finding two instances in Sublevel files that have different values for a given property (or the property being set at all for infrequent ones) will tell you which actor instances to look for in the AP files, which you can then anaylse the bytes for to find your different value, giving you its array index/type.&lt;br /&gt;
&lt;br /&gt;
A scrape of all of the sublevel files can be found in [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/sublevels.json Dandori Desktop&#039;s repo] which collects every parameter that each entity ever defines - so every drop, and config param ever given to any Kochappy, for example. This is very useful for finding all the potential values of random things like &amp;lt;code&amp;gt;GameRulePermissionFlag&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;CustomParameter&amp;lt;/code&amp;gt;, and is a great starting point for piecing parts of the AI puzzles together, as params like &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;TekiAIParameter&amp;lt;/code&amp;gt; are shared frequently, with individual properties being set on certain entities. This isn&#039;t comprehensive as many properties are just left defaulted, which doesn&#039;t mean they can&#039;t be changed, just that we don&#039;t have 2 differing examples to easily locate them in the bytes.&lt;br /&gt;
&lt;br /&gt;
The blueprints can also be viewed in FModel (in &amp;lt;code&amp;gt;Placeables/&amp;lt;/code&amp;gt;), and you can find the &amp;lt;code&amp;gt;AI_GEN_VARIABLE&amp;lt;/code&amp;gt;s which should have all the property names and their default values. I&#039;ve had limited success here, as you often can&#039;t just find the value in the AI bytes, but it can definitely give insight into what must be available in the object, and other possible enum values etc. This leads me to think it&#039;s possible that non-overriden fields of the gen variable objects are left zeroed, which doesn&#039;t make much sense, because how would you set a value of zero? idk.&lt;br /&gt;
&lt;br /&gt;
=== Data Dumps ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/entityData.json/ entityData.json] - a dump of every unique value every actor has in the game from the AP files (non-night)&lt;br /&gt;
* [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/sublevels.json Sublevels.json] - a dump of every value each actor can have from the Sublevels files - these are the English overriden parameter names &lt;br /&gt;
* [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/scrape.js/ scrape.js] - the code to generate the above lists - can be supplied an actor name to extract its section from &amp;lt;code&amp;gt;entityData.json&amp;lt;/code&amp;gt; given how bulky that file is. Clone Dandori Desktop and run &amp;lt;code&amp;gt;node scrape.js Kochappy&amp;lt;/code&amp;gt; to dump Kochappy&#039;s data into the &amp;lt;code&amp;gt;extractions/&amp;lt;/code&amp;gt; folder&lt;br /&gt;
&lt;br /&gt;
[[Category:Pikmin 4]]&lt;br /&gt;
[[Category:Parameters]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=File:P4-actorspawner-ai.png&amp;diff=4697</id>
		<title>File:P4-actorspawner-ai.png</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=File:P4-actorspawner-ai.png&amp;diff=4697"/>
		<updated>2024-05-15T23:02:24Z</updated>

		<summary type="html">&lt;p&gt;Noodl: Noodl uploaded a new version of File:P4-actorspawner-ai.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Charted bytes of ActorSpawner&#039;s AI&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=Dandori_Desktop&amp;diff=4696</id>
		<title>Dandori Desktop</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=Dandori_Desktop&amp;diff=4696"/>
		<updated>2024-05-13T01:26:45Z</updated>

		<summary type="html">&lt;p&gt;Noodl: Fix text&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dandori Desktop is a tool created by [[Noodl]] that allows visualising and editing of local game files. Inspired by DandoriDB, this takes that concept and moves it to the local environment for direct editing.&lt;br /&gt;
&lt;br /&gt;
In lieu of detailed guides for actor and ActorGeneratorList editing, without intimate detail of its contents, Dandori Desktop is an easy way to get started modifying map generator files.&lt;br /&gt;
&lt;br /&gt;
It can be downloaded from the repo&#039;s releases page. Refer to the repo&#039;s readme for setup instructions.&lt;br /&gt;
&lt;br /&gt;
== Link ==&lt;br /&gt;
* [https://github.com/Chagrilled/P4-DandoriDesktop/ GitHub Repo]&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* Right click to create entities&lt;br /&gt;
* ctrl+Z to undo deleted entities&lt;br /&gt;
* ctrl+V to duplicate the selected entity&lt;br /&gt;
&lt;br /&gt;
[[Category:Pikmin 4]]&lt;br /&gt;
[[Category:Tools]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=Pikmin_4_enemy_parameters&amp;diff=4695</id>
		<title>Pikmin 4 enemy parameters</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=Pikmin_4_enemy_parameters&amp;diff=4695"/>
		<updated>2024-05-13T01:22:36Z</updated>

		<summary type="html">&lt;p&gt;Noodl: fix link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Data Table/Actor Parameters}}&lt;br /&gt;
&lt;br /&gt;
Enemy behaviour parameters are configured in each enemy&#039;s blueprint file, or sometimes its superclass file. These exist in &amp;lt;code&amp;gt;Carrot4/Placeables/Teki&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Carrot4/Placeables/Teki/Base&amp;lt;/code&amp;gt; for superclasses and can be edited as JSON, once decoded. For enemy parameters relating to economy/health/carrying/damage see [[Data Table/Actor Parameters]].&lt;br /&gt;
&lt;br /&gt;
While the blueprint files are quite large, they are mostly full of irrelevant code for the common user. The file is split into &amp;quot;generator variables&amp;quot; which are used to set the base characteristics of an enemy at runtime, likely laid underneath an enemy&#039;s instance-parameters, which come from [[ActorSerializeParameter and AI]].&lt;br /&gt;
&lt;br /&gt;
The gen variables one is likely looking for are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Gen var || Meaning &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;AttackAffordance_GEN_VARIABLE&amp;lt;/code&amp;gt; || Possibly the properties of if an entity believes it can attack&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;{EntityName}AI_GEN_VARIABLE&amp;lt;/code&amp;gt; || Configures an enemy&#039;s behaviour and values &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CarrotMove_GEN_VARIABLE&amp;lt;/code&amp;gt; || Speed values&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Life_GEN_VARIABLE&amp;lt;/code&amp;gt; || Health, health bar and some damage properties&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PointerAssist_GEN_VARIABLE&amp;lt;/code&amp;gt; || Cursor properties&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Constants]]&lt;br /&gt;
[[Category:Pikmin 4]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=ActorSerializeParameter_and_AI&amp;diff=4694</id>
		<title>ActorSerializeParameter and AI</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=ActorSerializeParameter_and_AI&amp;diff=4694"/>
		<updated>2024-05-12T22:45:09Z</updated>

		<summary type="html">&lt;p&gt;Noodl: Geysers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All of the info on this page (thus far) is research and assumptions by [[Noodl]] - it may not all be entirely correct.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; is a property on each object in an &amp;lt;code&amp;gt;ActorGeneratorList&amp;lt;/code&amp;gt;. It contains much of the &amp;quot;per-instance&amp;quot; characteristics of the enemy it is generating, and contains parameter such as AI, object life and audio. &lt;br /&gt;
&lt;br /&gt;
Each member of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; is an object containing &amp;lt;code&amp;gt;Static&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Dynamic&amp;lt;/code&amp;gt; properties, both of which are varying-width arrays of 8bit integers that represent other data types. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ActorSerializeParameter&amp;quot;: {&lt;br /&gt;
        &amp;quot;AI&amp;quot;: {&lt;br /&gt;
            &amp;quot;Static&amp;quot;: [],&lt;br /&gt;
            &amp;quot;Dynamic&amp;quot;: [];&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;Hash&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CheckComp&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;ActorParameter&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;SubAI&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Life&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;PortalTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;DemoTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Pikmin&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CharacterEdit&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;PopPlace&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Strategy&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakEmitterConfig&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakSimpleState&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakMultiplePosition&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakAudioTable&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;WaterTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;NavMeshTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Affordance&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;HiddenBoxTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;NarrowSpaceBoxTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;WarpTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;ActionMarker&amp;quot;: { ... },&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the majority of actors in the game, most of the fields within &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; are the same for each type of enemy - that is, all Kochappys in the game have the same Life, ActorParameter, CheckComp, etc. A data scrape of each unique value that each type of enemy can have can be found [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/entityData.json/ here]. This can be used for sourcing the non-changing values, or for various examples of each byte array for every creature and object. (Generating code is [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/scrape.js/ here]).&lt;br /&gt;
&lt;br /&gt;
== AI ==&lt;br /&gt;
&lt;br /&gt;
AI is the interesting and important parameter. It controls per-instance parameters for actors such as drops, territory, and configuration for gimmicks. I currently believe that AI is mapped on top of an entity&#039;s own blueprint configuration from its &amp;lt;code&amp;gt;Placeables/&amp;lt;/code&amp;gt; file, with AI able to send overrides to parts of it, though I&#039;ve yet to work out where these bytes go. We can see traces of the Sublevels files showing AI gen variables with overriden base parameters.&lt;br /&gt;
&lt;br /&gt;
=== Concepts ===&lt;br /&gt;
&lt;br /&gt;
Before trying to break down a byte array, it helps to understand a few concepts of the data types used:&lt;br /&gt;
&lt;br /&gt;
* Each integer in the array is a single 8-bit/1-byte value, so can only go up to 255.&lt;br /&gt;
* The arrays are not fixed to 32-bit boundaries. A 4-byte float can be adjacent to a 16bit integer.&lt;br /&gt;
* Booleans are 4-bytes with the 0/1 being in the first index&lt;br /&gt;
* Floats are little-endian, and 4 bytes long. For example the value &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; will be 4 bytes of &amp;lt;code&amp;gt;0, 0, 200, 66&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Integers can also be encoded across 2-bytes (two integers of this array). For example, the value &amp;lt;code&amp;gt;271&amp;lt;/code&amp;gt; would be &amp;lt;code&amp;gt;15,1&amp;lt;/code&amp;gt; - 15 + (256 * 1). They are also sometimes just 1-byte long with the value at index 0.&lt;br /&gt;
* Strings are encoded by 4 bytes dictating the length of the string (null terminator included) followed by the string&#039;s characters in ASCII codes, ending with &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. For example the string of &amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt; will be encoded as &amp;lt;code&amp;gt;5, 0, 0, 0, 78, 111, 110, 101, 0&amp;lt;/code&amp;gt;, with 5 being the length of the string (4 chars + &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;).&lt;br /&gt;
* When arrays/objects are used (for fields like &amp;lt;code&amp;gt;DropConditions&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;bSetTerritory&amp;lt;/code&amp;gt;, there is often a 4 byte boolean that dictates if the rest of the object is present, or the number of items in the array. For example, with territory, if &amp;lt;code&amp;gt;bSetTerritory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, the bytes will look like &amp;lt;code&amp;gt;0, 0, 0, 0, ... &amp;lt;/code&amp;gt; followed by whatever else comes after. However if it is true (&amp;lt;code&amp;gt;1, 0, 0, 0&amp;lt;/code&amp;gt;), 5 floats (X, Y, Z, HalfHeight and Radius) will follow, making the array vary in length.&lt;br /&gt;
&lt;br /&gt;
[[Dandori Desktop]] provides tools for byte conversions that can aid in finding values.&lt;br /&gt;
&lt;br /&gt;
== Charts == &lt;br /&gt;
&lt;br /&gt;
Attempts have been made to chart the bytes of various AI parameters to uncover patterns and the locations of values in order to manipulate them.&lt;br /&gt;
&lt;br /&gt;
There are many bytes AFTER the end of the inventory which ends in 4 bytes of &amp;lt;code&amp;gt;255, 255, 255, 255&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt;), but I have no idea what they do yet. I believe they&#039;re probably the overrides for the enemy&#039;s AI_GEN_VARIABLE, and other objects like &amp;lt;code&amp;gt;SniffPointParameter&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Creature AI ===&lt;br /&gt;
Details the drop system for a regular enemy (and eggs). The inventory system (&amp;lt;code&amp;gt;DropParameter&amp;lt;/code&amp;gt;) used here is nearly universal in the game, with objects having a slightly different structure for some reason, but is mostly the same, so it helps to understand creatures first. &lt;br /&gt;
&lt;br /&gt;
[[File:P4-creature-ai-inventory-bytes.png|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== ActorSpawner AI ===&lt;br /&gt;
ActorSpawners are a little different, and their only drop is the thing they spawn, with some configuration for it.&lt;br /&gt;
&lt;br /&gt;
[[File:P4-actorspawner-ai.png|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== GroupDropManager AI ===&lt;br /&gt;
&lt;br /&gt;
[[File:P4-gdm-ai.png ‎|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== NoraSpawner AI ===&lt;br /&gt;
&lt;br /&gt;
[[File:P4-noraspawner-ai.png ‎|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== PortalTrigger Gen Variable ===&lt;br /&gt;
&lt;br /&gt;
This chart is for the &amp;lt;code&amp;gt;PortalTrigger.Static&amp;lt;/code&amp;gt; part of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; and will usually be used in conjunction with portal objects like &amp;lt;code&amp;gt;MadoriRuins&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DownPortal&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-portaltrigger-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== AreaBase AI Gen Variable ===&lt;br /&gt;
&lt;br /&gt;
This chart is for the base camps.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-areabasecamp-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sprinkler AI and ObjectAIParameter ===&lt;br /&gt;
&lt;br /&gt;
Objects mostly seem composed of two objects - &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; and an entity-specific object, like &amp;lt;code&amp;gt;SprinklerAIParameter&amp;lt;/code&amp;gt;. The former contains inventories (&amp;lt;code&amp;gt;DropParameter&amp;lt;/code&amp;gt;) and some stuff to do with edge collision it seems, while the latter controls everything specific to the entity. The chart below illustrates it for sprinklers.&lt;br /&gt;
&lt;br /&gt;
* To have a valve that is permanently on - enable `bSprinklerOnly` and set `valveID` to `None`. &lt;br /&gt;
* To connect a valve, match the `valveID` to the valve object&#039;s ID. The only valve config I&#039;ve found works is to use the `Build` workType. This setup will have a sprinkler turn on once for `OpenTime` number of seconds upon valve activation, then turn off - this is how Cave013 douses fire. &lt;br /&gt;
* To have a sprinkler always on, make a `NavMeshTriggerLinkForSplash` object on top of the sprinkler, and make the `NavMeshTriggerID`s for both match. The sprinkler and valve cannot have the same `demoBindName`. I&#039;ve not played much with these, but I believe they _may_ be to do with saving the state of the sprinkler after the cutscene has played. In my working example, I used `GSprinkler05` and `GValveOnce06` for my `demoBindName`s, and `demoId` of `0`.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-sprinkler-objectAI.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== Valve AI ===&lt;br /&gt;
&lt;br /&gt;
Valves have a few properties in their parameter, but ObjectParameter is mostly unused here. There are some missing values that I haven&#039;t found the indexes for, but you can see the default values in FModel&#039;s blueprint. The enum values for EValveWorkType are also unknown, but 2 and 6 are confirmed. &lt;br /&gt;
 &lt;br /&gt;
[[File:p4-valveai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== NavMeshTriggers ===&lt;br /&gt;
&lt;br /&gt;
There are 3 types: &amp;lt;code&amp;gt;NavMeshTrigger&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NavMeshTriggerClear&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NavMeshTriggerLinkForSplash&amp;lt;/code&amp;gt; (for sprinklers). My current understanding is that these triggers send pulses to whatever they&#039;re linked to on a timer or some conditions. These bytes come from the &amp;lt;code&amp;gt;NavMeshTrigger&amp;lt;/code&amp;gt; part of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt;, and seem to be some of the only objects in the game that use that property. It is worth noting that the &amp;lt;code&amp;gt;AI&amp;lt;/code&amp;gt; property for &amp;lt;code&amp;gt;NavMeshTriggerLinkForSplash&amp;lt;/code&amp;gt; is identical for every instance of this actor across the game. &amp;lt;code&amp;gt;NavMeshTriggerClear&amp;lt;/code&amp;gt; has several different sets of AI bytes though.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-navmeshtrigger.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== Geyser AI ===&lt;br /&gt;
&lt;br /&gt;
The geyser&#039;s AI bytes are actually comprised of an &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; as usual, followed by the &amp;lt;code&amp;gt;GeyserAI_GEN_VARIABLE&amp;lt;/code&amp;gt; and then the &amp;lt;code&amp;gt;NavLink_GEN_VARIALBE&amp;lt;/code&amp;gt;. What&#039;s interesting to note about this is that it means the &amp;lt;code&amp;gt;AI.Static&amp;lt;/code&amp;gt; array can contain more than just what is in &amp;lt;code&amp;gt;AI_GEN_VARIABLE&amp;lt;/code&amp;gt;. Primitive geysers can be made simply by editing the &amp;lt;code&amp;gt;Right&amp;lt;/code&amp;gt; vector, which applies the vector to your coordinates with some velocity number.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-geyser-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== Researching ===&lt;br /&gt;
&lt;br /&gt;
The best way of breaking down the AI parameter (I have found) is to combine the blueprint JSONs from the &amp;lt;code&amp;gt;Sublevels/&amp;lt;/code&amp;gt; folder, with the &amp;lt;code&amp;gt;ActorPlacementInfo&amp;lt;/code&amp;gt; file of the same type. The Sublevels files contain the gen_variables that seem to be encoded into the byte arrays of ActorSerializeParameter.&lt;br /&gt;
&lt;br /&gt;
AI parameters can be found by searching for &amp;lt;code&amp;gt;{entity}AI_GEN_VARIABLE&amp;lt;/code&amp;gt;, for example &amp;lt;code&amp;gt;ElecMushiAI_GEN_VARIABLE&amp;lt;/code&amp;gt; for Anode Beetles. Most of the contents of that object&#039;s &amp;lt;code&amp;gt;Properties&amp;lt;/code&amp;gt; will be encoded in that actor&#039;s &amp;lt;code&amp;gt;ActorSerializeParameter.AI.Static&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;ActorPlacementInfo&amp;lt;/code&amp;gt; file, so you can compare things like the drop numbers, asset path and other such floats for occurrences of those values in the AI array. Strings are often the easiest to find/locate with due to their easy to spot nature (look for the big sequence of non-0 numbers and decode it to see if it matches what you need). Finding two instances in Sublevel files that have different values for a given property (or the property being set at all for infrequent ones) will tell you which actor instances to look for in the AP files, which you can then anaylse the bytes for to find your different value, giving you its array index/type.&lt;br /&gt;
&lt;br /&gt;
A scrape of all of the sublevel files can be found in [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/sublevels.json Dandori Desktop&#039;s repo] which collects every parameter that each entity ever defines - so every drop, and config param ever given to any Kochappy, for example. This is very useful for finding all the potential values of random things like &amp;lt;code&amp;gt;GameRulePermissionFlag&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;CustomParameter&amp;lt;/code&amp;gt;, and is a great starting point for piecing parts of the AI puzzles together, as params like &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;TekiAIParameter&amp;lt;/code&amp;gt; are shared frequently, with individual properties being set on certain entities. This isn&#039;t comprehensive as many properties are just left defaulted, which doesn&#039;t mean they can&#039;t be changed, just that we don&#039;t have 2 differing examples to easily locate them in the bytes.&lt;br /&gt;
&lt;br /&gt;
The blueprints can also be viewed in FModel (in &amp;lt;code&amp;gt;Placeables/&amp;lt;/code&amp;gt;), and you can find the &amp;lt;code&amp;gt;AI_GEN_VARIABLE&amp;lt;/code&amp;gt;s which should have all the property names and their default values. I&#039;ve had limited success here, as you often can&#039;t just find the value in the AI bytes, but it can definitely give insight into what must be available in the object, and other possible enum values etc. This leads me to think it&#039;s possible that non-overriden fields of the gen variable objects are left zeroed, which doesn&#039;t make much sense, because how would you set a value of zero? idk.&lt;br /&gt;
&lt;br /&gt;
=== Data Dumps ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/entityData.json/ entityData.json] - a dump of every unique value every actor has in the game from the AP files&lt;br /&gt;
* [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/sublevels.json Sublevels.json] - a dump of every value each actor can have from the Sublevels files - these are the English overriden parameter names &lt;br /&gt;
* [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/scrape.js/ scrape.js] - the code to generate the above lists - can be supplied an actor name to extract its section from &amp;lt;code&amp;gt;entityData.json&amp;lt;/code&amp;gt; given how bulky that file is. Clone Dandori Desktop and run &amp;lt;code&amp;gt;node scrape.js Kochappy&amp;lt;/code&amp;gt; to dump Kochappy&#039;s data into the &amp;lt;code&amp;gt;extractions/&amp;lt;/code&amp;gt; folder&lt;br /&gt;
&lt;br /&gt;
[[Category:Pikmin 4]]&lt;br /&gt;
[[Category:Parameters]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=File:P4-geyser-ai.png&amp;diff=4693</id>
		<title>File:P4-geyser-ai.png</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=File:P4-geyser-ai.png&amp;diff=4693"/>
		<updated>2024-05-12T22:38:32Z</updated>

		<summary type="html">&lt;p&gt;Noodl: Byte chart for Geysers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Byte chart for Geysers&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=ActorSerializeParameter_and_AI&amp;diff=4677</id>
		<title>ActorSerializeParameter and AI</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=ActorSerializeParameter_and_AI&amp;diff=4677"/>
		<updated>2024-05-06T21:55:02Z</updated>

		<summary type="html">&lt;p&gt;Noodl: Sprinkler findings&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All of the info on this page (thus far) is research and assumptions by [[Noodl]] - it may not all be entirely correct.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; is a property on each object in an &amp;lt;code&amp;gt;ActorGeneratorList&amp;lt;/code&amp;gt;. It contains much of the &amp;quot;per-instance&amp;quot; characteristics of the enemy it is generating, and contains parameter such as AI, object life and audio. &lt;br /&gt;
&lt;br /&gt;
Each member of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; is an object containing &amp;lt;code&amp;gt;Static&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Dynamic&amp;lt;/code&amp;gt; properties, both of which are varying-width arrays of 8bit integers that represent other data types. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ActorSerializeParameter&amp;quot;: {&lt;br /&gt;
        &amp;quot;AI&amp;quot;: {&lt;br /&gt;
            &amp;quot;Static&amp;quot;: [],&lt;br /&gt;
            &amp;quot;Dynamic&amp;quot;: [];&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;Hash&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CheckComp&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;ActorParameter&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;SubAI&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Life&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;PortalTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;DemoTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Pikmin&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CharacterEdit&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;PopPlace&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Strategy&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakEmitterConfig&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakSimpleState&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakMultiplePosition&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakAudioTable&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;WaterTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;NavMeshTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Affordance&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;HiddenBoxTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;NarrowSpaceBoxTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;WarpTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;ActionMarker&amp;quot;: { ... },&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the majority of actors in the game, most of the fields within &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; are the same for each type of enemy - that is, all Kochappys in the game have the same Life, ActorParameter, CheckComp, etc. A data scrape of each unique value that each type of enemy can have can be found [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/entityData.json/ here]. This can be used for sourcing the non-changing values, or for various examples of each byte array for every creature and object. (Generating code is [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/scrape.js/ here]).&lt;br /&gt;
&lt;br /&gt;
== AI ==&lt;br /&gt;
&lt;br /&gt;
AI is the interesting and important parameter. It controls per-instance parameters for actors such as drops, territory, and configuration for gimmicks. I currently believe that AI is mapped on top of an entity&#039;s own blueprint configuration from its &amp;lt;code&amp;gt;Placeables/&amp;lt;/code&amp;gt; file, with AI able to send overrides to parts of it, though I&#039;ve yet to work out where these bytes go. We can see traces of the Sublevels files showing AI gen variables with overriden base parameters.&lt;br /&gt;
&lt;br /&gt;
=== Concepts ===&lt;br /&gt;
&lt;br /&gt;
Before trying to break down a byte array, it helps to understand a few concepts of the data types used:&lt;br /&gt;
&lt;br /&gt;
* Each integer in the array is a single 8-bit/1-byte value, so can only go up to 255.&lt;br /&gt;
* The arrays are not fixed to 32-bit boundaries. A 4-byte float can be adjacent to a 16bit integer.&lt;br /&gt;
* Booleans are 4-bytes with the 0/1 being in the first index&lt;br /&gt;
* Floats are little-endian, and 4 bytes long. For example the value &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; will be 4 bytes of &amp;lt;code&amp;gt;0, 0, 200, 66&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Integers can also be encoded across 2-bytes (two integers of this array). For example, the value &amp;lt;code&amp;gt;271&amp;lt;/code&amp;gt; would be &amp;lt;code&amp;gt;15,1&amp;lt;/code&amp;gt; - 15 + (256 * 1). They are also sometimes just 1-byte long with the value at index 0.&lt;br /&gt;
* Strings are encoded by 4 bytes dictating the length of the string (null terminator included) followed by the string&#039;s characters in ASCII codes, ending with &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. For example the string of &amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt; will be encoded as &amp;lt;code&amp;gt;5, 0, 0, 0, 78, 111, 110, 101, 0&amp;lt;/code&amp;gt;, with 5 being the length of the string (4 chars + &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;).&lt;br /&gt;
* When arrays/objects are used (for fields like &amp;lt;code&amp;gt;DropConditions&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;bSetTerritory&amp;lt;/code&amp;gt;, there is often a 4 byte boolean that dictates if the rest of the object is present, or the number of items in the array. For example, with territory, if &amp;lt;code&amp;gt;bSetTerritory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, the bytes will look like &amp;lt;code&amp;gt;0, 0, 0, 0, ... &amp;lt;/code&amp;gt; followed by whatever else comes after. However if it is true (&amp;lt;code&amp;gt;1, 0, 0, 0&amp;lt;/code&amp;gt;), 5 floats (X, Y, Z, HalfHeight and Radius) will follow, making the array vary in length.&lt;br /&gt;
&lt;br /&gt;
[[Dandori Desktop]] provides tools for byte conversions that can aid in finding values.&lt;br /&gt;
&lt;br /&gt;
== Charts == &lt;br /&gt;
&lt;br /&gt;
Attempts have been made to chart the bytes of various AI parameters to uncover patterns and the locations of values in order to manipulate them.&lt;br /&gt;
&lt;br /&gt;
There are many bytes AFTER the end of the inventory which ends in 4 bytes of &amp;lt;code&amp;gt;255, 255, 255, 255&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt;), but I have no idea what they do yet. I believe they&#039;re probably the overrides for the enemy&#039;s AI_GEN_VARIABLE, and other objects like &amp;lt;code&amp;gt;SniffPointParameter&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Creature AI ===&lt;br /&gt;
Details the drop system for a regular enemy (and eggs). The inventory system (&amp;lt;code&amp;gt;DropParameter&amp;lt;/code&amp;gt;) used here is nearly universal in the game, with objects having a slightly different structure for some reason, but is mostly the same, so it helps to understand creatures first. &lt;br /&gt;
&lt;br /&gt;
[[File:P4-creature-ai-inventory-bytes.png|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== ActorSpawner AI ===&lt;br /&gt;
ActorSpawners are a little different, and their only drop is the thing they spawn, with some configuration for it.&lt;br /&gt;
&lt;br /&gt;
[[File:P4-actorspawner-ai.png|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== GroupDropManager AI ===&lt;br /&gt;
&lt;br /&gt;
[[File:P4-gdm-ai.png ‎|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== NoraSpawner AI ===&lt;br /&gt;
&lt;br /&gt;
[[File:P4-noraspawner-ai.png ‎|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== PortalTrigger Gen Variable ===&lt;br /&gt;
&lt;br /&gt;
This chart is for the &amp;lt;code&amp;gt;PortalTrigger.Static&amp;lt;/code&amp;gt; part of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; and will usually be used in conjunction with portal objects like &amp;lt;code&amp;gt;MadoriRuins&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DownPortal&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-portaltrigger-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== AreaBaseAI Gen Variable ===&lt;br /&gt;
&lt;br /&gt;
This chart is for the base camps.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-areabasecamp-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SprinklerAI and ObjectAIParameter ===&lt;br /&gt;
&lt;br /&gt;
Objects mostly seem composed of two objects - &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; and an entity-specific object, like &amp;lt;code&amp;gt;SprinklerAIParameter&amp;lt;/code&amp;gt;. The former contains inventories (&amp;lt;code&amp;gt;DropParameter&amp;lt;/code&amp;gt;) and some stuff to do with edge collision it seems, while the latter controls everything specific to the entity. The chart below illustrates it for sprinklers.&lt;br /&gt;
&lt;br /&gt;
* To have a valve that is permanently on - enable `bSprinklerOnly` and set `valveID` to `None`. &lt;br /&gt;
* To connect a valve, match the `valveID` to the valve object&#039;s ID. The only valve config I&#039;ve found works is to use the `Build` workType. This setup will have a sprinkler turn on once for `OpenTime` number of seconds upon valve activation, then turn off - this is how Cave013 douses fire. &lt;br /&gt;
* To have a sprinkler always on, make a `NavMeshTriggerLinkForSplash` object on top of the sprinkler, and make the `NavMeshTriggerID`s for both match. The sprinkler and valve cannot have the same `demoBindName`. I&#039;ve not played much with these, but I believe they _may_ be to do with saving the state of the sprinkler after the cutscene has played. In my working example, I used `GSprinkler05` and `GValveOnce06` for my `demoBindName`s, and `demoId` of `0`.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-sprinkler-objectAI.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== ValveAI ===&lt;br /&gt;
&lt;br /&gt;
Valves have a few properties in their parameter, but ObjectParameter is mostly unused here. There are some missing values that I haven&#039;t found the indexes for, but you can see the default values in FModel&#039;s blueprint. The enum values for EValveWorkType are also unknown, but 2 and 6 are confirmed.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-valveai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== NavMeshTriggers ===&lt;br /&gt;
&lt;br /&gt;
There are 3 types: &amp;lt;code&amp;gt;NavMeshTrigger&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NavMeshTriggerClear&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NavMeshTriggerLinkForSplash&amp;lt;/code&amp;gt; (for sprinklers). My current understanding is that these triggers send pulses to whatever they&#039;re linked to on a timer or some conditions. These bytes come from the &amp;lt;code&amp;gt;NavMeshTrigger&amp;lt;/code&amp;gt; part of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt;, and seem to be some of the only objects in the game that use that property. It is worth noting that the &amp;lt;code&amp;gt;AI&amp;lt;/code&amp;gt; property for &amp;lt;code&amp;gt;NavMeshTriggerLinkForSplash&amp;lt;/code&amp;gt; is identical for every instance of this actor across the game. &amp;lt;code&amp;gt;NavMeshTriggerClear&amp;lt;/code&amp;gt; has several different sets of AI bytes though.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-navmeshtrigger.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Researching ===&lt;br /&gt;
&lt;br /&gt;
The best way of breaking down the AI parameter (I have found) is to combine the blueprint JSONs from the &amp;lt;code&amp;gt;Sublevels/&amp;lt;/code&amp;gt; folder, with the &amp;lt;code&amp;gt;ActorPlacementInfo&amp;lt;/code&amp;gt; file of the same type. The Sublevels files contain the gen_variables that seem to be encoded into the byte arrays of ActorSerializeParameter.&lt;br /&gt;
&lt;br /&gt;
AI parameters can be found by searching for &amp;lt;code&amp;gt;{entity}AI_GEN_VARIABLE&amp;lt;/code&amp;gt;, for example &amp;lt;code&amp;gt;ElecMushiAI_GEN_VARIABLE&amp;lt;/code&amp;gt; for Anode Beetles. Most of the contents of that object&#039;s &amp;lt;code&amp;gt;Properties&amp;lt;/code&amp;gt; will be encoded in that actor&#039;s &amp;lt;code&amp;gt;ActorSerializeParameter.AI.Static&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;ActorPlacementInfo&amp;lt;/code&amp;gt; file, so you can compare things like the drop numbers, asset path and other such floats for occurrences of those values in the AI array. Strings are often the easiest to find/locate with due to their easy to spot nature (look for the big sequence of non-0 numbers and decode it to see if it matches what you need). Finding two instances in Sublevel files that have different values for a given property (or the property being set at all for infrequent ones) will tell you which actor instances to look for in the AP files, which you can then anaylse the bytes for to find your different value, giving you its array index/type.&lt;br /&gt;
&lt;br /&gt;
A scrape of all of the sublevel files can be found in [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/sublevels.json Dandori Desktop&#039;s repo] which collects every parameter that each entity ever defines - so every drop, and config param ever given to any Kochappy, for example. This is very useful for finding all the potential values of random things like &amp;lt;code&amp;gt;GameRulePermissionFlag&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;CustomParameter&amp;lt;/code&amp;gt;, and is a great starting point for piecing parts of the AI puzzles together, as params like &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;TekiAIParameter&amp;lt;/code&amp;gt; are shared frequently, with individual properties being set on certain entities. This isn&#039;t comprehensive as many properties are just left defaulted, which doesn&#039;t mean they can&#039;t be changed, just that we don&#039;t have 2 differing examples to easily locate them in the bytes.&lt;br /&gt;
&lt;br /&gt;
The blueprints can also be viewed in FModel (in &amp;lt;code&amp;gt;Placeables/&amp;lt;/code&amp;gt;), and you can find the &amp;lt;code&amp;gt;AI_GEN_VARIABLE&amp;lt;/code&amp;gt;s which should have all the property names and their default values. I&#039;ve had limited success here, as you often can&#039;t just find the value in the AI bytes, but it can definitely give insight into what must be available in the object, and other possible enum values etc. This leads me to think it&#039;s possible that non-overriden fields of the gen variable objects are left zeroed, which doesn&#039;t make much sense, because how would you set a value of zero? idk.&lt;br /&gt;
&lt;br /&gt;
=== Data Dumps ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/entityData.json/ entityData.json] - a dump of every unique value every actor has in the game from the AP files&lt;br /&gt;
* [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/sublevels.json Sublevels.json] - a dump of every value each actor can have from the Sublevels files - these are the English overriden parameter names &lt;br /&gt;
* [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/scrape.js/ scrape.js] - the code to generate the above lists - can be supplied an actor name to extract its section from &amp;lt;code&amp;gt;entityData.json&amp;lt;/code&amp;gt; given how bulky that file is. Clone Dandori Desktop and run &amp;lt;code&amp;gt;node scrape.js Kochappy&amp;lt;/code&amp;gt; to dump Kochappy&#039;s data into the &amp;lt;code&amp;gt;extractions/&amp;lt;/code&amp;gt; folder&lt;br /&gt;
&lt;br /&gt;
[[Category:Pikmin 4]]&lt;br /&gt;
[[Category:Parameters]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=ActorSerializeParameter_and_AI&amp;diff=4676</id>
		<title>ActorSerializeParameter and AI</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=ActorSerializeParameter_and_AI&amp;diff=4676"/>
		<updated>2024-05-06T16:25:05Z</updated>

		<summary type="html">&lt;p&gt;Noodl: Dumps and NMT deets&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All of the info on this page (thus far) is research and assumptions by [[Noodl]] - it may not all be entirely correct.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; is a property on each object in an &amp;lt;code&amp;gt;ActorGeneratorList&amp;lt;/code&amp;gt;. It contains much of the &amp;quot;per-instance&amp;quot; characteristics of the enemy it is generating, and contains parameter such as AI, object life and audio. &lt;br /&gt;
&lt;br /&gt;
Each member of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; is an object containing &amp;lt;code&amp;gt;Static&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Dynamic&amp;lt;/code&amp;gt; properties, both of which are varying-width arrays of 8bit integers that represent other data types. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ActorSerializeParameter&amp;quot;: {&lt;br /&gt;
        &amp;quot;AI&amp;quot;: {&lt;br /&gt;
            &amp;quot;Static&amp;quot;: [],&lt;br /&gt;
            &amp;quot;Dynamic&amp;quot;: [];&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;Hash&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CheckComp&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;ActorParameter&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;SubAI&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Life&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;PortalTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;DemoTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Pikmin&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CharacterEdit&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;PopPlace&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Strategy&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakEmitterConfig&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakSimpleState&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakMultiplePosition&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakAudioTable&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;WaterTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;NavMeshTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Affordance&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;HiddenBoxTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;NarrowSpaceBoxTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;WarpTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;ActionMarker&amp;quot;: { ... },&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the majority of actors in the game, most of the fields within &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; are the same for each type of enemy - that is, all Kochappys in the game have the same Life, ActorParameter, CheckComp, etc. A data scrape of each unique value that each type of enemy can have can be found [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/entityData.json/ here]. This can be used for sourcing the non-changing values, or for various examples of each byte array for every creature and object. (Generating code is [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/scrape.js/ here]).&lt;br /&gt;
&lt;br /&gt;
== AI ==&lt;br /&gt;
&lt;br /&gt;
AI is the interesting and important parameter. It controls per-instance parameters for actors such as drops, territory, and configuration for gimmicks. I currently believe that AI is mapped on top of an entity&#039;s own blueprint configuration from its &amp;lt;code&amp;gt;Placeables/&amp;lt;/code&amp;gt; file, with AI able to send overrides to parts of it, though I&#039;ve yet to work out where these bytes go. We can see traces of the Sublevels files showing AI gen variables with overriden base parameters.&lt;br /&gt;
&lt;br /&gt;
=== Concepts ===&lt;br /&gt;
&lt;br /&gt;
Before trying to break down a byte array, it helps to understand a few concepts of the data types used:&lt;br /&gt;
&lt;br /&gt;
* Each integer in the array is a single 8-bit/1-byte value, so can only go up to 255.&lt;br /&gt;
* The arrays are not fixed to 32-bit boundaries. A 4-byte float can be adjacent to a 16bit integer.&lt;br /&gt;
* Booleans are 4-bytes with the 0/1 being in the first index&lt;br /&gt;
* Floats are little-endian, and 4 bytes long. For example the value &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; will be 4 bytes of &amp;lt;code&amp;gt;0, 0, 200, 66&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Integers can also be encoded across 2-bytes (two integers of this array). For example, the value &amp;lt;code&amp;gt;271&amp;lt;/code&amp;gt; would be &amp;lt;code&amp;gt;15,1&amp;lt;/code&amp;gt; - 15 + (256 * 1). They are also sometimes just 1-byte long with the value at index 0.&lt;br /&gt;
* Strings are encoded by 4 bytes dictating the length of the string (null terminator included) followed by the string&#039;s characters in ASCII codes, ending with &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. For example the string of &amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt; will be encoded as &amp;lt;code&amp;gt;5, 0, 0, 0, 78, 111, 110, 101, 0&amp;lt;/code&amp;gt;, with 5 being the length of the string (4 chars + &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;).&lt;br /&gt;
* When arrays/objects are used (for fields like &amp;lt;code&amp;gt;DropConditions&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;bSetTerritory&amp;lt;/code&amp;gt;, there is often a 4 byte boolean that dictates if the rest of the object is present, or the number of items in the array. For example, with territory, if &amp;lt;code&amp;gt;bSetTerritory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, the bytes will look like &amp;lt;code&amp;gt;0, 0, 0, 0, ... &amp;lt;/code&amp;gt; followed by whatever else comes after. However if it is true (&amp;lt;code&amp;gt;1, 0, 0, 0&amp;lt;/code&amp;gt;), 5 floats (X, Y, Z, HalfHeight and Radius) will follow, making the array vary in length.&lt;br /&gt;
&lt;br /&gt;
[[Dandori Desktop]] provides tools for byte conversions that can aid in finding values.&lt;br /&gt;
&lt;br /&gt;
== Charts == &lt;br /&gt;
&lt;br /&gt;
Attempts have been made to chart the bytes of various AI parameters to uncover patterns and the locations of values in order to manipulate them.&lt;br /&gt;
&lt;br /&gt;
There are many bytes AFTER the end of the inventory which ends in 4 bytes of &amp;lt;code&amp;gt;255, 255, 255, 255&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt;), but I have no idea what they do yet. I believe they&#039;re probably the overrides for the enemy&#039;s AI_GEN_VARIABLE, and other objects like &amp;lt;code&amp;gt;SniffPointParameter&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Creature AI ===&lt;br /&gt;
Details the drop system for a regular enemy (and eggs). The inventory system (&amp;lt;code&amp;gt;DropParameter&amp;lt;/code&amp;gt;) used here is nearly universal in the game, with objects having a slightly different structure for some reason, but is mostly the same, so it helps to understand creatures first. &lt;br /&gt;
&lt;br /&gt;
[[File:P4-creature-ai-inventory-bytes.png|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== ActorSpawner AI ===&lt;br /&gt;
ActorSpawners are a little different, and their only drop is the thing they spawn, with some configuration for it.&lt;br /&gt;
&lt;br /&gt;
[[File:P4-actorspawner-ai.png|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== GroupDropManager AI ===&lt;br /&gt;
&lt;br /&gt;
[[File:P4-gdm-ai.png ‎|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== NoraSpawner AI ===&lt;br /&gt;
&lt;br /&gt;
[[File:P4-noraspawner-ai.png ‎|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== PortalTrigger Gen Variable ===&lt;br /&gt;
&lt;br /&gt;
This chart is for the &amp;lt;code&amp;gt;PortalTrigger.Static&amp;lt;/code&amp;gt; part of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; and will usually be used in conjunction with portal objects like &amp;lt;code&amp;gt;MadoriRuins&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DownPortal&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-portaltrigger-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== AreaBaseAI Gen Variable ===&lt;br /&gt;
&lt;br /&gt;
This chart is for the base camps.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-areabasecamp-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SprinklerAI and ObjectAIParameter ===&lt;br /&gt;
&lt;br /&gt;
Objects mostly seem composed of two objects - &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; and an entity-specific object, like &amp;lt;code&amp;gt;SprinklerAIParameter&amp;lt;/code&amp;gt;. The former contains inventories (&amp;lt;code&amp;gt;DropParameter&amp;lt;/code&amp;gt;) and some stuff to do with edge collision it seems, while the latter controls everything specific to the entity. The chart below illustrates it for sprinklers.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-sprinkler-objectAI.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== ValveAI ===&lt;br /&gt;
&lt;br /&gt;
Valves have a few properties in their parameter, but ObjectParameter is mostly unused here. There are some missing values that I haven&#039;t found the indexes for, but you can see the default values in FModel&#039;s blueprint. The enum values for EValveWorkType are also unknown, but 2 and 6 are confirmed.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-valveai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== NavMeshTriggers ===&lt;br /&gt;
&lt;br /&gt;
There are 3 types: &amp;lt;code&amp;gt;NavMeshTrigger&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NavMeshTriggerClear&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NavMeshTriggerLinkForSplash&amp;lt;/code&amp;gt; (for sprinklers). My current understanding is that these triggers send pulses to whatever they&#039;re linked to on a timer or some conditions. These bytes come from the &amp;lt;code&amp;gt;NavMeshTrigger&amp;lt;/code&amp;gt; part of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt;, and seem to be some of the only objects in the game that use that property. It is worth noting that the &amp;lt;code&amp;gt;AI&amp;lt;/code&amp;gt; property for &amp;lt;code&amp;gt;NavMeshTriggerLinkForSplash&amp;lt;/code&amp;gt; is identical for every instance of this actor across the game. &amp;lt;code&amp;gt;NavMeshTriggerClear&amp;lt;/code&amp;gt; has several different sets of AI bytes though.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-navmeshtrigger.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Researching ===&lt;br /&gt;
&lt;br /&gt;
The best way of breaking down the AI parameter (I have found) is to combine the blueprint JSONs from the &amp;lt;code&amp;gt;Sublevels/&amp;lt;/code&amp;gt; folder, with the &amp;lt;code&amp;gt;ActorPlacementInfo&amp;lt;/code&amp;gt; file of the same type. The Sublevels files contain the gen_variables that seem to be encoded into the byte arrays of ActorSerializeParameter.&lt;br /&gt;
&lt;br /&gt;
AI parameters can be found by searching for &amp;lt;code&amp;gt;{entity}AI_GEN_VARIABLE&amp;lt;/code&amp;gt;, for example &amp;lt;code&amp;gt;ElecMushiAI_GEN_VARIABLE&amp;lt;/code&amp;gt; for Anode Beetles. Most of the contents of that object&#039;s &amp;lt;code&amp;gt;Properties&amp;lt;/code&amp;gt; will be encoded in that actor&#039;s &amp;lt;code&amp;gt;ActorSerializeParameter.AI.Static&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;ActorPlacementInfo&amp;lt;/code&amp;gt; file, so you can compare things like the drop numbers, asset path and other such floats for occurrences of those values in the AI array. Strings are often the easiest to find/locate with due to their easy to spot nature (look for the big sequence of non-0 numbers and decode it to see if it matches what you need). Finding two instances in Sublevel files that have different values for a given property (or the property being set at all for infrequent ones) will tell you which actor instances to look for in the AP files, which you can then anaylse the bytes for to find your different value, giving you its array index/type.&lt;br /&gt;
&lt;br /&gt;
A scrape of all of the sublevel files can be found in [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/sublevels.json Dandori Desktop&#039;s repo] which collects every parameter that each entity ever defines - so every drop, and config param ever given to any Kochappy, for example. This is very useful for finding all the potential values of random things like &amp;lt;code&amp;gt;GameRulePermissionFlag&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;CustomParameter&amp;lt;/code&amp;gt;, and is a great starting point for piecing parts of the AI puzzles together, as params like &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;TekiAIParameter&amp;lt;/code&amp;gt; are shared frequently, with individual properties being set on certain entities. This isn&#039;t comprehensive as many properties are just left defaulted, which doesn&#039;t mean they can&#039;t be changed, just that we don&#039;t have 2 differing examples to easily locate them in the bytes.&lt;br /&gt;
&lt;br /&gt;
The blueprints can also be viewed in FModel (in &amp;lt;code&amp;gt;Placeables/&amp;lt;/code&amp;gt;), and you can find the &amp;lt;code&amp;gt;AI_GEN_VARIABLE&amp;lt;/code&amp;gt;s which should have all the property names and their default values. I&#039;ve had limited success here, as you often can&#039;t just find the value in the AI bytes, but it can definitely give insight into what must be available in the object, and other possible enum values etc. This leads me to think it&#039;s possible that non-overriden fields of the gen variable objects are left zeroed, which doesn&#039;t make much sense, because how would you set a value of zero? idk.&lt;br /&gt;
&lt;br /&gt;
=== Data Dumps ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/entityData.json/ entityData.json] - a dump of every unique value every actor has in the game from the AP files&lt;br /&gt;
* [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/sublevels.json Sublevels.json] - a dump of every value each actor can have from the Sublevels files - these are the English overriden parameter names &lt;br /&gt;
* [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/scrape.js/ scrape.js] - the code to generate the above lists - can be supplied an actor name to extract its section from &amp;lt;code&amp;gt;entityData.json&amp;lt;/code&amp;gt; given how bulky that file is. Clone Dandori Desktop and run &amp;lt;code&amp;gt;node scrape.js Kochappy&amp;lt;/code&amp;gt; to dump Kochappy&#039;s data into the &amp;lt;code&amp;gt;extractions/&amp;lt;/code&amp;gt; folder&lt;br /&gt;
&lt;br /&gt;
[[Category:Pikmin 4]]&lt;br /&gt;
[[Category:Parameters]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=ActorSerializeParameter_and_AI&amp;diff=4675</id>
		<title>ActorSerializeParameter and AI</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=ActorSerializeParameter_and_AI&amp;diff=4675"/>
		<updated>2024-05-06T00:17:19Z</updated>

		<summary type="html">&lt;p&gt;Noodl: NavMeshTrigger&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All of the info on this page (thus far) is research and assumptions by [[Noodl]] - it may not all be entirely correct.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; is a property on each object in an &amp;lt;code&amp;gt;ActorGeneratorList&amp;lt;/code&amp;gt;. It contains much of the &amp;quot;per-instance&amp;quot; characteristics of the enemy it is generating, and contains parameter such as AI, object life and audio. &lt;br /&gt;
&lt;br /&gt;
Each member of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; is an object containing &amp;lt;code&amp;gt;Static&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Dynamic&amp;lt;/code&amp;gt; properties, both of which are varying-width arrays of 8bit integers that represent other data types. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ActorSerializeParameter&amp;quot;: {&lt;br /&gt;
        &amp;quot;AI&amp;quot;: {&lt;br /&gt;
            &amp;quot;Static&amp;quot;: [],&lt;br /&gt;
            &amp;quot;Dynamic&amp;quot;: [];&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;Hash&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CheckComp&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;ActorParameter&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;SubAI&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Life&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;PortalTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;DemoTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Pikmin&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CharacterEdit&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;PopPlace&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Strategy&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakEmitterConfig&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakSimpleState&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakMultiplePosition&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakAudioTable&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;WaterTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;NavMeshTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Affordance&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;HiddenBoxTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;NarrowSpaceBoxTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;WarpTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;ActionMarker&amp;quot;: { ... },&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the majority of actors in the game, most of the fields within &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; are the same for each type of enemy - that is, all Kochappys in the game have the same Life, ActorParameter, CheckComp, etc. A data scrape of each unique value that each type of enemy can have can be found [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/entityData.json/ here]. This can be used for sourcing the non-changing values, or for various examples of each byte array for every creature and object. (Generating code is [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/scrape.js/ here]).&lt;br /&gt;
&lt;br /&gt;
== AI ==&lt;br /&gt;
&lt;br /&gt;
AI is the interesting and important parameter. It controls per-instance parameters for actors such as drops, territory, and configuration for gimmicks. I currently believe that AI is mapped on top of an entity&#039;s own blueprint configuration from its &amp;lt;code&amp;gt;Placeables/&amp;lt;/code&amp;gt; file, with AI able to send overrides to parts of it, though I&#039;ve yet to work out where these bytes go. We can see traces of the Sublevels files showing AI gen variables with overriden base parameters.&lt;br /&gt;
&lt;br /&gt;
=== Concepts ===&lt;br /&gt;
&lt;br /&gt;
Before trying to break down a byte array, it helps to understand a few concepts of the data types used:&lt;br /&gt;
&lt;br /&gt;
* Each integer in the array is a single 8-bit/1-byte value, so can only go up to 255.&lt;br /&gt;
* The arrays are not fixed to 32-bit boundaries. A 4-byte float can be adjacent to a 16bit integer.&lt;br /&gt;
* Booleans are 4-bytes with the 0/1 being in the first index&lt;br /&gt;
* Floats are little-endian, and 4 bytes long. For example the value &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; will be 4 bytes of &amp;lt;code&amp;gt;0, 0, 200, 66&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Integers can also be encoded across 2-bytes (two integers of this array). For example, the value &amp;lt;code&amp;gt;271&amp;lt;/code&amp;gt; would be &amp;lt;code&amp;gt;15,1&amp;lt;/code&amp;gt; - 15 + (256 * 1). They are also sometimes just 1-byte long with the value at index 0.&lt;br /&gt;
* Strings are encoded by 4 bytes dictating the length of the string (null terminator included) followed by the string&#039;s characters in ASCII codes, ending with &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. For example the string of &amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt; will be encoded as &amp;lt;code&amp;gt;5, 0, 0, 0, 78, 111, 110, 101, 0&amp;lt;/code&amp;gt;, with 5 being the length of the string (4 chars + &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;).&lt;br /&gt;
* When arrays/objects are used (for fields like &amp;lt;code&amp;gt;DropConditions&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;bSetTerritory&amp;lt;/code&amp;gt;, there is often a 4 byte boolean that dictates if the rest of the object is present, or the number of items in the array. For example, with territory, if &amp;lt;code&amp;gt;bSetTerritory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, the bytes will look like &amp;lt;code&amp;gt;0, 0, 0, 0, ... &amp;lt;/code&amp;gt; followed by whatever else comes after. However if it is true (&amp;lt;code&amp;gt;1, 0, 0, 0&amp;lt;/code&amp;gt;), 5 floats (X, Y, Z, HalfHeight and Radius) will follow, making the array vary in length.&lt;br /&gt;
&lt;br /&gt;
[[Dandori Desktop]] provides tools for byte conversions that can aid in finding values.&lt;br /&gt;
&lt;br /&gt;
== Charts == &lt;br /&gt;
&lt;br /&gt;
Attempts have been made to chart the bytes of various AI parameters to uncover patterns and the locations of values in order to manipulate them.&lt;br /&gt;
&lt;br /&gt;
There are many bytes AFTER the end of the inventory which ends in 4 bytes of &amp;lt;code&amp;gt;255, 255, 255, 255&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt;), but I have no idea what they do yet. I believe they&#039;re probably the overrides for the enemy&#039;s AI_GEN_VARIABLE, and other objects like &amp;lt;code&amp;gt;SniffPointParameter&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Creature AI ===&lt;br /&gt;
Details the drop system for a regular enemy (and eggs). The inventory system (&amp;lt;code&amp;gt;DropParameter&amp;lt;/code&amp;gt;) used here is nearly universal in the game, with objects having a slightly different structure for some reason, but is mostly the same, so it helps to understand creatures first. &lt;br /&gt;
&lt;br /&gt;
[[File:P4-creature-ai-inventory-bytes.png|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== ActorSpawner AI ===&lt;br /&gt;
ActorSpawners are a little different, and their only drop is the thing they spawn, with some configuration for it.&lt;br /&gt;
&lt;br /&gt;
[[File:P4-actorspawner-ai.png|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== GroupDropManager AI ===&lt;br /&gt;
&lt;br /&gt;
[[File:P4-gdm-ai.png ‎|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== NoraSpawner AI ===&lt;br /&gt;
&lt;br /&gt;
[[File:P4-noraspawner-ai.png ‎|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== PortalTrigger Gen Variable ===&lt;br /&gt;
&lt;br /&gt;
This chart is for the &amp;lt;code&amp;gt;PortalTrigger.Static&amp;lt;/code&amp;gt; part of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; and will usually be used in conjunction with portal objects like &amp;lt;code&amp;gt;MadoriRuins&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DownPortal&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-portaltrigger-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== AreaBaseAI Gen Variable ===&lt;br /&gt;
&lt;br /&gt;
This chart is for the base camps.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-areabasecamp-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SprinklerAI and ObjectAIParameter ===&lt;br /&gt;
&lt;br /&gt;
Objects mostly seem composed of two objects - &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; and an entity-specific object, like &amp;lt;code&amp;gt;SprinklerAIParameter&amp;lt;/code&amp;gt;. The former contains inventories (&amp;lt;code&amp;gt;DropParameter&amp;lt;/code&amp;gt;) and some stuff to do with edge collision it seems, while the latter controls everything specific to the entity. The chart below illustrates it for sprinklers.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-sprinkler-objectAI.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== ValveAI ===&lt;br /&gt;
&lt;br /&gt;
Valves have a few properties in their parameter, but ObjectParameter is mostly unused here. There are some missing values that I haven&#039;t found the indexes for, but you can see the default values in FModel&#039;s blueprint. The enum values for EValveWorkType are also unknown, but 2 and 6 are confirmed.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-valveai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== NavMeshTriggers ===&lt;br /&gt;
&lt;br /&gt;
There are 3 kinds: NavMeshTrigger, NavMeshTriggerClear and NavMeshTriggerLinkForSplash (for sprinklers). My current understanding is that these triggers send pulses to whatever they&#039;re linked to on a timer or some conditions.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-navmeshtrigger.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Researching ===&lt;br /&gt;
&lt;br /&gt;
The best way of breaking down the AI parameter (I have found) is to combine the blueprint JSONs from the &amp;lt;code&amp;gt;Sublevels/&amp;lt;/code&amp;gt; folder, with the &amp;lt;code&amp;gt;ActorPlacementInfo&amp;lt;/code&amp;gt; file of the same type. The Sublevels files contain the gen_variables that seem to be encoded into the byte arrays of ActorSerializeParameter.&lt;br /&gt;
&lt;br /&gt;
AI parameters can be found by searching for &amp;lt;code&amp;gt;{entity}AI_GEN_VARIABLE&amp;lt;/code&amp;gt;, for example &amp;lt;code&amp;gt;ElecMushiAI_GEN_VARIABLE&amp;lt;/code&amp;gt; for Anode Beetles. Most of the contents of that object&#039;s &amp;lt;code&amp;gt;Properties&amp;lt;/code&amp;gt; will be encoded in that actor&#039;s &amp;lt;code&amp;gt;ActorSerializeParameter.AI.Static&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;ActorPlacementInfo&amp;lt;/code&amp;gt; file, so you can compare things like the drop numbers, asset path and other such floats for occurrences of those values in the AI array. Strings are often the easiest to find/locate with due to their easy to spot nature (look for the big sequence of non-0 numbers and decode it to see if it matches what you need). Finding two instances in Sublevel files that have different values for a given property (or the property being set at all for infrequent ones) will tell you which actor instances to look for in the AP files, which you can then anaylse the bytes for to find your different value, giving you its array index/type.&lt;br /&gt;
&lt;br /&gt;
A scrape of all of the sublevel files can be found in [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/sublevels.json Dandori Desktop&#039;s repo] which collects every parameter that each entity ever defines - so every drop, and config param ever given to any Kochappy, for example. This is very useful for finding all the potential values of random things like &amp;lt;code&amp;gt;GameRulePermissionFlag&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;CustomParameter&amp;lt;/code&amp;gt;, and is a great starting point for piecing parts of the AI puzzles together, as params like &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;TekiAIParameter&amp;lt;/code&amp;gt; are shared frequently, with individual properties being set on certain entities. This isn&#039;t comprehensive as many properties are just left defaulted, which doesn&#039;t mean they can&#039;t be changed, just that we don&#039;t have 2 differing examples to easily locate them in the bytes.&lt;br /&gt;
&lt;br /&gt;
The blueprints can also be viewed in FModel (in &amp;lt;code&amp;gt;Placeables/&amp;lt;/code&amp;gt;), and you can find the &amp;lt;code&amp;gt;AI_GEN_VARIABLE&amp;lt;/code&amp;gt;s which should have all the property names and their default values. I&#039;ve had limited success here, as you often can&#039;t just find the value in the AI bytes, but it can definitely give insight into what must be available in the object, and other possible enum values etc. This leads me to think it&#039;s possible that non-overriden fields of the gen variable objects are left zeroed, which doesn&#039;t make much sense, because how would you set a value of zero? idk.&lt;br /&gt;
&lt;br /&gt;
[[Category:Pikmin 4]]&lt;br /&gt;
[[Category:Parameters]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=File:P4-navmeshtrigger.png&amp;diff=4674</id>
		<title>File:P4-navmeshtrigger.png</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=File:P4-navmeshtrigger.png&amp;diff=4674"/>
		<updated>2024-05-06T00:15:35Z</updated>

		<summary type="html">&lt;p&gt;Noodl: NavMeshTrigger gen var bytes chart&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
NavMeshTrigger gen var bytes chart&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=ActorSerializeParameter_and_AI&amp;diff=4673</id>
		<title>ActorSerializeParameter and AI</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=ActorSerializeParameter_and_AI&amp;diff=4673"/>
		<updated>2024-05-04T00:41:40Z</updated>

		<summary type="html">&lt;p&gt;Noodl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All of the info on this page (thus far) is research and assumptions by [[Noodl]] - it may not all be entirely correct.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; is a property on each object in an &amp;lt;code&amp;gt;ActorGeneratorList&amp;lt;/code&amp;gt;. It contains much of the &amp;quot;per-instance&amp;quot; characteristics of the enemy it is generating, and contains parameter such as AI, object life and audio. &lt;br /&gt;
&lt;br /&gt;
Each member of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; is an object containing &amp;lt;code&amp;gt;Static&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Dynamic&amp;lt;/code&amp;gt; properties, both of which are varying-width arrays of 8bit integers that represent other data types. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ActorSerializeParameter&amp;quot;: {&lt;br /&gt;
        &amp;quot;AI&amp;quot;: {&lt;br /&gt;
            &amp;quot;Static&amp;quot;: [],&lt;br /&gt;
            &amp;quot;Dynamic&amp;quot;: [];&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;Hash&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CheckComp&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;ActorParameter&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;SubAI&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Life&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;PortalTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;DemoTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Pikmin&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CharacterEdit&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;PopPlace&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Strategy&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakEmitterConfig&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakSimpleState&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakMultiplePosition&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakAudioTable&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;WaterTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;NavMeshTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Affordance&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;HiddenBoxTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;NarrowSpaceBoxTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;WarpTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;ActionMarker&amp;quot;: { ... },&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the majority of actors in the game, most of the fields within &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; are the same for each type of enemy - that is, all Kochappys in the game have the same Life, ActorParameter, CheckComp, etc. A data scrape of each unique value that each type of enemy can have can be found [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/entityData.json/ here]. This can be used for sourcing the non-changing values, or for various examples of each byte array for every creature and object. (Generating code is [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/scrape.js/ here]).&lt;br /&gt;
&lt;br /&gt;
== AI ==&lt;br /&gt;
&lt;br /&gt;
AI is the interesting and important parameter. It controls per-instance parameters for actors such as drops, territory, and configuration for gimmicks. I currently believe that AI is mapped on top of an entity&#039;s own blueprint configuration from its &amp;lt;code&amp;gt;Placeables/&amp;lt;/code&amp;gt; file, with AI able to send overrides to parts of it, though I&#039;ve yet to work out where these bytes go. We can see traces of the Sublevels files showing AI gen variables with overriden base parameters.&lt;br /&gt;
&lt;br /&gt;
=== Concepts ===&lt;br /&gt;
&lt;br /&gt;
Before trying to break down a byte array, it helps to understand a few concepts of the data types used:&lt;br /&gt;
&lt;br /&gt;
* Each integer in the array is a single 8-bit/1-byte value, so can only go up to 255.&lt;br /&gt;
* The arrays are not fixed to 32-bit boundaries. A 4-byte float can be adjacent to a 16bit integer.&lt;br /&gt;
* Booleans are 4-bytes with the 0/1 being in the first index&lt;br /&gt;
* Floats are little-endian, and 4 bytes long. For example the value &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; will be 4 bytes of &amp;lt;code&amp;gt;0, 0, 200, 66&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Integers can also be encoded across 2-bytes (two integers of this array). For example, the value &amp;lt;code&amp;gt;271&amp;lt;/code&amp;gt; would be &amp;lt;code&amp;gt;15,1&amp;lt;/code&amp;gt; - 15 + (256 * 1). They are also sometimes just 1-byte long with the value at index 0.&lt;br /&gt;
* Strings are encoded by 4 bytes dictating the length of the string (null terminator included) followed by the string&#039;s characters in ASCII codes, ending with &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. For example the string of &amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt; will be encoded as &amp;lt;code&amp;gt;5, 0, 0, 0, 78, 111, 110, 101, 0&amp;lt;/code&amp;gt;, with 5 being the length of the string (4 chars + &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;).&lt;br /&gt;
* When arrays/objects are used (for fields like &amp;lt;code&amp;gt;DropConditions&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;bSetTerritory&amp;lt;/code&amp;gt;, there is often a 4 byte boolean that dictates if the rest of the object is present, or the number of items in the array. For example, with territory, if &amp;lt;code&amp;gt;bSetTerritory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, the bytes will look like &amp;lt;code&amp;gt;0, 0, 0, 0, ... &amp;lt;/code&amp;gt; followed by whatever else comes after. However if it is true (&amp;lt;code&amp;gt;1, 0, 0, 0&amp;lt;/code&amp;gt;), 5 floats (X, Y, Z, HalfHeight and Radius) will follow, making the array vary in length.&lt;br /&gt;
&lt;br /&gt;
[[Dandori Desktop]] provides tools for byte conversions that can aid in finding values.&lt;br /&gt;
&lt;br /&gt;
== Charts == &lt;br /&gt;
&lt;br /&gt;
Attempts have been made to chart the bytes of various AI parameters to uncover patterns and the locations of values in order to manipulate them.&lt;br /&gt;
&lt;br /&gt;
There are many bytes AFTER the end of the inventory which ends in 4 bytes of &amp;lt;code&amp;gt;255, 255, 255, 255&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt;), but I have no idea what they do yet. I believe they&#039;re probably the overrides for the enemy&#039;s AI_GEN_VARIABLE, and other objects like &amp;lt;code&amp;gt;SniffPointParameter&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Creature AI ===&lt;br /&gt;
Details the drop system for a regular enemy (and eggs). The inventory system (&amp;lt;code&amp;gt;DropParameter&amp;lt;/code&amp;gt;) used here is nearly universal in the game, with objects having a slightly different structure for some reason, but is mostly the same, so it helps to understand creatures first. &lt;br /&gt;
&lt;br /&gt;
[[File:P4-creature-ai-inventory-bytes.png|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== ActorSpawner AI ===&lt;br /&gt;
ActorSpawners are a little different, and their only drop is the thing they spawn, with some configuration for it.&lt;br /&gt;
&lt;br /&gt;
[[File:P4-actorspawner-ai.png|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== GroupDropManager AI ===&lt;br /&gt;
&lt;br /&gt;
[[File:P4-gdm-ai.png ‎|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== NoraSpawner AI ===&lt;br /&gt;
&lt;br /&gt;
[[File:P4-noraspawner-ai.png ‎|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== PortalTrigger Gen Variable ===&lt;br /&gt;
&lt;br /&gt;
This chart is for the &amp;lt;code&amp;gt;PortalTrigger.Static&amp;lt;/code&amp;gt; part of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; and will usually be used in conjunction with portal objects like &amp;lt;code&amp;gt;MadoriRuins&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DownPortal&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-portaltrigger-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== AreaBaseAI Gen Variable ===&lt;br /&gt;
&lt;br /&gt;
This chart is for the base camps.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-areabasecamp-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SprinklerAI and ObjectAIParameter ===&lt;br /&gt;
&lt;br /&gt;
Objects mostly seem composed of two objects - &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; and an entity-specific object, like &amp;lt;code&amp;gt;SprinklerAIParameter&amp;lt;/code&amp;gt;. The former contains inventories (&amp;lt;code&amp;gt;DropParameter&amp;lt;/code&amp;gt;) and some stuff to do with edge collision it seems, while the latter controls everything specific to the entity. The chart below illustrates it for sprinklers.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-sprinkler-objectAI.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== ValveAI ===&lt;br /&gt;
&lt;br /&gt;
Valves have a few properties in their parameter, but ObjectParameter is mostly unused here. There are some missing values that I haven&#039;t found the indexes for, but you can see the default values in FModel&#039;s blueprint. The enum values for EValveWorkType are also unknown, but 2 and 6 are confirmed.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-valveai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== Researching ===&lt;br /&gt;
&lt;br /&gt;
The best way of breaking down the AI parameter (I have found) is to combine the blueprint JSONs from the &amp;lt;code&amp;gt;Sublevels/&amp;lt;/code&amp;gt; folder, with the &amp;lt;code&amp;gt;ActorPlacementInfo&amp;lt;/code&amp;gt; file of the same type. The Sublevels files contain the gen_variables that seem to be encoded into the byte arrays of ActorSerializeParameter.&lt;br /&gt;
&lt;br /&gt;
AI parameters can be found by searching for &amp;lt;code&amp;gt;{entity}AI_GEN_VARIABLE&amp;lt;/code&amp;gt;, for example &amp;lt;code&amp;gt;ElecMushiAI_GEN_VARIABLE&amp;lt;/code&amp;gt; for Anode Beetles. Most of the contents of that object&#039;s &amp;lt;code&amp;gt;Properties&amp;lt;/code&amp;gt; will be encoded in that actor&#039;s &amp;lt;code&amp;gt;ActorSerializeParameter.AI.Static&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;ActorPlacementInfo&amp;lt;/code&amp;gt; file, so you can compare things like the drop numbers, asset path and other such floats for occurrences of those values in the AI array. Strings are often the easiest to find/locate with due to their easy to spot nature (look for the big sequence of non-0 numbers and decode it to see if it matches what you need). Finding two instances in Sublevel files that have different values for a given property (or the property being set at all for infrequent ones) will tell you which actor instances to look for in the AP files, which you can then anaylse the bytes for to find your different value, giving you its array index/type.&lt;br /&gt;
&lt;br /&gt;
A scrape of all of the sublevel files can be found in [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/sublevels.json Dandori Desktop&#039;s repo] which collects every parameter that each entity ever defines - so every drop, and config param ever given to any Kochappy, for example. This is very useful for finding all the potential values of random things like &amp;lt;code&amp;gt;GameRulePermissionFlag&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;CustomParameter&amp;lt;/code&amp;gt;, and is a great starting point for piecing parts of the AI puzzles together, as params like &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;TekiAIParameter&amp;lt;/code&amp;gt; are shared frequently, with individual properties being set on certain entities. This isn&#039;t comprehensive as many properties are just left defaulted, which doesn&#039;t mean they can&#039;t be changed, just that we don&#039;t have 2 differing examples to easily locate them in the bytes.&lt;br /&gt;
&lt;br /&gt;
The blueprints can also be viewed in FModel (in &amp;lt;code&amp;gt;Placeables/&amp;lt;/code&amp;gt;), and you can find the &amp;lt;code&amp;gt;AI_GEN_VARIABLE&amp;lt;/code&amp;gt;s which should have all the property names and their default values. I&#039;ve had limited success here, as you often can&#039;t just find the value in the AI bytes, but it can definitely give insight into what must be available in the object, and other possible enum values etc. This leads me to think it&#039;s possible that non-overriden fields of the gen variable objects are left zeroed, which doesn&#039;t make much sense, because how would you set a value of zero? idk.&lt;br /&gt;
&lt;br /&gt;
[[Category:Pikmin 4]]&lt;br /&gt;
[[Category:Parameters]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=ActorSerializeParameter_and_AI&amp;diff=4672</id>
		<title>ActorSerializeParameter and AI</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=ActorSerializeParameter_and_AI&amp;diff=4672"/>
		<updated>2024-05-04T00:34:41Z</updated>

		<summary type="html">&lt;p&gt;Noodl: Valve AI and extra descriptions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All of the info on this page (thus far) is research and assumptions by [[Noodl]] - it may not all be entirely correct.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; is a property on each object in an &amp;lt;code&amp;gt;ActorGeneratorList&amp;lt;/code&amp;gt;. It contains much of the &amp;quot;per-instance&amp;quot; characteristics of the enemy it is generating, and contains parameter such as AI, object life and audio. &lt;br /&gt;
&lt;br /&gt;
Each member of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; is an object containing &amp;lt;code&amp;gt;Static&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Dynamic&amp;lt;/code&amp;gt; properties, both of which are varying-width arrays of 8bit integers that represent other data types. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ActorSerializeParameter&amp;quot;: {&lt;br /&gt;
        &amp;quot;AI&amp;quot;: {&lt;br /&gt;
            &amp;quot;Static&amp;quot;: [],&lt;br /&gt;
            &amp;quot;Dynamic&amp;quot;: [];&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;Hash&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CheckComp&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;ActorParameter&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;SubAI&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Life&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;PortalTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;DemoTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Pikmin&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CharacterEdit&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;PopPlace&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Strategy&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakEmitterConfig&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakSimpleState&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakMultiplePosition&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakAudioTable&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;WaterTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;NavMeshTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Affordance&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;HiddenBoxTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;NarrowSpaceBoxTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;WarpTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;ActionMarker&amp;quot;: { ... },&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the majority of actors in the game, most of the fields within &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; are the same for each type of enemy - that is, all Kochappys in the game have the same Life, ActorParameter, CheckComp, etc. A data scrape of each unique value that each type of enemy can have can be found [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/entityData.json/ here]. This can be used for sourcing the non-changing values, or for various examples of each byte array for every creature and object. (Generating code is [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/scrape.js/ here]).&lt;br /&gt;
&lt;br /&gt;
== AI ==&lt;br /&gt;
&lt;br /&gt;
AI is the interesting and important parameter. It controls per-instance parameters for actors such as drops, territory, and configuration for gimmicks. I currently believe that AI is mapped on top of an entity&#039;s own blueprint configuration from its &amp;lt;code&amp;gt;Placeables/&amp;lt;/code&amp;gt; file, with AI able to send overrides to parts of it, though I&#039;ve yet to work out where these bytes go. We can see traces of the Sublevels files showing AI gen variables with overriden base parameters.&lt;br /&gt;
&lt;br /&gt;
=== Concepts ===&lt;br /&gt;
&lt;br /&gt;
Before trying to break down a byte array, it helps to understand a few concepts of the data types used:&lt;br /&gt;
&lt;br /&gt;
* Each integer in the array is a single 8-bit/1-byte value, so can only go up to 255.&lt;br /&gt;
* The arrays are not fixed to 32-bit boundaries. A 4-byte float can be adjacent to a 16bit integer.&lt;br /&gt;
* Booleans are 4-bytes with the 0/1 being in the first index&lt;br /&gt;
* Floats are little-endian, and 4 bytes long. For example the value &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; will be 4 bytes of &amp;lt;code&amp;gt;0, 0, 200, 66&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Integers can also be encoded across 2-bytes (two integers of this array). For example, the value &amp;lt;code&amp;gt;271&amp;lt;/code&amp;gt; would be &amp;lt;code&amp;gt;15,1&amp;lt;/code&amp;gt; - 15 + (256 * 1). They are also sometimes just 1-byte long with the value at index 0.&lt;br /&gt;
* Strings are encoded by 4 bytes dictating the length of the string (null terminator included) followed by the string&#039;s characters in ASCII codes, ending with &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. For example the string of &amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt; will be encoded as &amp;lt;code&amp;gt;5, 0, 0, 0, 78, 111, 110, 101, 0&amp;lt;/code&amp;gt;, with 5 being the length of the string (4 chars + &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;).&lt;br /&gt;
* When arrays/objects are used (for fields like &amp;lt;code&amp;gt;DropConditions&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;bSetTerritory&amp;lt;/code&amp;gt;, there is often a 4 byte boolean that dictates if the rest of the object is present, or the number of items in the array. For example, with territory, if &amp;lt;code&amp;gt;bSetTerritory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, the bytes will look like &amp;lt;code&amp;gt;0, 0, 0, 0, ... &amp;lt;/code&amp;gt; followed by whatever else comes after. However if it is true (&amp;lt;code&amp;gt;1, 0, 0, 0&amp;lt;/code&amp;gt;), 5 floats (X, Y, Z, HalfHeight and Radius) will follow, making the array vary in length.&lt;br /&gt;
&lt;br /&gt;
[[Dandori Desktop]] provides tools for byte conversions that can aid in finding values.&lt;br /&gt;
&lt;br /&gt;
== Charts == &lt;br /&gt;
&lt;br /&gt;
Attempts have been made to chart the bytes of various AI parameters to uncover patterns and the locations of values in order to manipulate them.&lt;br /&gt;
&lt;br /&gt;
There are many bytes AFTER the end of the inventory which ends in 4 bytes of &amp;lt;code&amp;gt;255, 255, 255, 255&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt;), but I have no idea what they do yet. I believe they&#039;re probably the overrides for the enemy&#039;s AI_GEN_VARIABLE, and other objects like &amp;lt;code&amp;gt;SniffPointParameter&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Creature AI ===&lt;br /&gt;
Details the drop system for a regular enemy (and eggs). The inventory system (&amp;lt;code&amp;gt;DropParameter&amp;lt;/code&amp;gt;) used here is nearly universal in the game, with objects having a slightly different structure for some reason, but is mostly the same, so it helps to understand creatures first. &lt;br /&gt;
&lt;br /&gt;
[[File:P4-creature-ai-inventory-bytes.png|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== ActorSpawner AI ===&lt;br /&gt;
ActorSpawners are a little different, and their only drop is the thing they spawn, with some configuration for it.&lt;br /&gt;
&lt;br /&gt;
[[File:P4-actorspawner-ai.png|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== GroupDropManager AI ===&lt;br /&gt;
&lt;br /&gt;
[[File:P4-gdm-ai.png ‎|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== NoraSpawner AI ===&lt;br /&gt;
&lt;br /&gt;
[[File:P4-noraspawner-ai.png ‎|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== PortalTrigger Gen Variable ===&lt;br /&gt;
&lt;br /&gt;
This chart is for the &amp;lt;code&amp;gt;PortalTrigger.Static&amp;lt;/code&amp;gt; part of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; and will usually be used in conjunction with portal objects like &amp;lt;code&amp;gt;MadoriRuins&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DownPortal&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-portaltrigger-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== AreaBaseAI Gen Variable ===&lt;br /&gt;
&lt;br /&gt;
This chart is for the base camps.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-areabasecamp-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SprinklerAI and ObjectAIParameter ===&lt;br /&gt;
&lt;br /&gt;
Objects mostly seem composed of two objects - &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; and an entity-specific object, like &amp;lt;code&amp;gt;SprinklerAIParameter&amp;lt;/code&amp;gt;. The former contains inventories (&amp;lt;code&amp;gt;DropParameter&amp;lt;/code&amp;gt;) and some stuff to do with edge collision it seems, while the latter controls everything specific to the entity. The chart below illustrates it for sprinklers.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-sprinkler-objectAI.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== ValveAI ===&lt;br /&gt;
&lt;br /&gt;
Valves have a few properties in their parameter, but ObjectParameter is mostly unused here. There are some missing values that I haven&#039;t found the indexes for, but you can see the default values in FModel&#039;s blueprint. The enum values for EValveWorkType are also unknown, but 2 and 6 are confirmed.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-valveai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== Researching ===&lt;br /&gt;
&lt;br /&gt;
The best way of breaking down the AI parameter (I have found) is to combine the blueprint JSONs from the &amp;lt;code&amp;gt;Sublevels/&amp;lt;/code&amp;gt; folder, with the &amp;lt;code&amp;gt;ActorPlacementInfo&amp;lt;/code&amp;gt; file of the same type. The Sublevels files contain the gen_variables that seem to be encoded into the byte arrays of ActorSerializeParameter.&lt;br /&gt;
&lt;br /&gt;
AI parameters can be found by searching for &amp;lt;code&amp;gt;{entity}AI_GEN_VARIABLE&amp;lt;/code&amp;gt;, for example &amp;lt;code&amp;gt;ElecMushiAI_GEN_VARIABLE&amp;lt;/code&amp;gt; for Anode Beetles. Most of the contents of that object&#039;s &amp;lt;code&amp;gt;Properties&amp;lt;/code&amp;gt; will be encoded in that actor&#039;s &amp;lt;code&amp;gt;ActorSerializeParameter.AI.Static&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;ActorPlacementInfo&amp;lt;/code&amp;gt; file, so you can compare things like the drop numbers, asset path and other such floats for occurrences of those values in the AI array. Strings are often the easiest to find/locate with due to their easy to spot nature (look for the big sequence of non-0 numbers and decode it to see if it matches what you need).&lt;br /&gt;
&lt;br /&gt;
A scrape of all of the sublevel files can be found in [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/sublevels.json Dandori Desktop&#039;s repo] which collects every parameter that each entity ever defines - so every drop, and config param ever given to any Kochappy, for example. This is very useful for finding all the potential values of random things like &amp;lt;code&amp;gt;GameRulePermissionFlag&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;CustomParameter&amp;lt;/code&amp;gt;, and is a great starting point for piecing parts of the AI puzzles together, as params like &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;TekiAIParameter&amp;lt;/code&amp;gt; are shared frequently, with individual properties being set on certain entities. This isn&#039;t comprehensive as many properties are just left defaulted, which doesn&#039;t mean they can&#039;t be changed, just that we don&#039;t have 2 differing examples to easily locate them in the bytes.&lt;br /&gt;
&lt;br /&gt;
The blueprints can also be viewed in FModel (in &amp;lt;code&amp;gt;Placeables/&amp;lt;/code&amp;gt;), and you can find the &amp;lt;code&amp;gt;AI_GEN_VARIABLE&amp;lt;/code&amp;gt;s which should have all the property names and their default values. I&#039;ve had limited success here, as you often can&#039;t just find the value in the AI bytes, but it can definitely give insight into what must be available in the object, and other possible enum values etc. This leads me to think it&#039;s possible that non-overriden fields of the gen variable objects are left zeroed, which doesn&#039;t make much sense, because how would you set a value of zero? idk.&lt;br /&gt;
&lt;br /&gt;
[[Category:Pikmin 4]]&lt;br /&gt;
[[Category:Parameters]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=File:P4-valveai.png&amp;diff=4671</id>
		<title>File:P4-valveai.png</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=File:P4-valveai.png&amp;diff=4671"/>
		<updated>2024-05-04T00:17:14Z</updated>

		<summary type="html">&lt;p&gt;Noodl: Valve AI chart&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Valve AI chart&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=File:P4-sprinklerai.png&amp;diff=4670</id>
		<title>File:P4-sprinklerai.png</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=File:P4-sprinklerai.png&amp;diff=4670"/>
		<updated>2024-05-04T00:16:52Z</updated>

		<summary type="html">&lt;p&gt;Noodl: Sprinkler AI chart&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Sprinkler AI chart&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
	<entry>
		<id>https://pikmintkb.com/w/index.php?title=ActorSerializeParameter_and_AI&amp;diff=4631</id>
		<title>ActorSerializeParameter and AI</title>
		<link rel="alternate" type="text/html" href="https://pikmintkb.com/w/index.php?title=ActorSerializeParameter_and_AI&amp;diff=4631"/>
		<updated>2024-03-29T22:50:53Z</updated>

		<summary type="html">&lt;p&gt;Noodl: Full ActorSerializeParameter&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All of the info on this page (thus far) is research and assumptions by [[Noodl]] - it may not all be entirely correct.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; is a property on each object in an &amp;lt;code&amp;gt;ActorGeneratorList&amp;lt;/code&amp;gt;. It contains much of the &amp;quot;per-instance&amp;quot; characteristics of the enemy it is generating, and contains parameter such as AI, object life and audio. &lt;br /&gt;
&lt;br /&gt;
Each member of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; is an object containing &amp;lt;code&amp;gt;Static&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Dynamic&amp;lt;/code&amp;gt; properties, both of which are varying-width arrays of 8bit integers that represent other data types. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ActorSerializeParameter&amp;quot;: {&lt;br /&gt;
        &amp;quot;AI&amp;quot;: {&lt;br /&gt;
            &amp;quot;Static&amp;quot;: [],&lt;br /&gt;
                &amp;quot;Dynamic&amp;quot;: [];&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;Hash&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CheckComp&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;ActorParameter&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;SubAI&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Life&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;PortalTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;DemoTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Pikmin&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CharacterEdit&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;PopPlace&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Strategy&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakEmitterConfig&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakSimpleState&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakMultiplePosition&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;CakAudioTable&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;WaterTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;NavMeshTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;Affordance&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;HiddenBoxTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;NarrowSpaceBoxTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;WarpTrigger&amp;quot;: { ... },&lt;br /&gt;
        &amp;quot;ActionMarker&amp;quot;: { ... },&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the majority of actors in the game, most of the fields within &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; are the same for each type of enemy - that is, all Kochappys in the game have the same Life, ActorParameter, CheckComp, etc. A data scrape of each unique value that each type of enemy can have can be found [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/entityData.json/ here] (note, does not include night enemies). This can be used for sourcing the non-changing values, or for various examples of each byte array for every creature and object. (Generating code is [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/scrape.js/ here]).&lt;br /&gt;
&lt;br /&gt;
== AI ==&lt;br /&gt;
&lt;br /&gt;
AI is the interesting and important parameter. It controls per-instance parameters for actors such as drops, territory, and configuration for gimmicks. I currently believe that AI is mapped on top of an entity&#039;s own blueprint configuration from its &amp;lt;code&amp;gt;Placeables/&amp;lt;/code&amp;gt; file, with AI able to send overrides to parts of it, though I&#039;ve yet to work out where these bytes go. We can see traces of the Sublevels files showing AI gen variables with overriden base parameters.&lt;br /&gt;
&lt;br /&gt;
=== Concepts ===&lt;br /&gt;
&lt;br /&gt;
Before trying to break down a byte array, it helps to understand a few concepts of the data types used:&lt;br /&gt;
&lt;br /&gt;
* Each integer in the array is a single 8-bit/1-byte value, so can only go up to 255.&lt;br /&gt;
* The arrays are not fixed to 32-bit boundaries. A 4-byte float can be adjacent to a 16bit integer.&lt;br /&gt;
* Booleans are 4-bytes with the 0/1 being in the first index&lt;br /&gt;
* Floats are little-endian, and 4 bytes long. For example the value &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; will be 4 bytes of &amp;lt;code&amp;gt;0, 0, 200, 66&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Integers can also be encoded across 2-bytes (two integers of this array). For example, the value &amp;lt;code&amp;gt;271&amp;lt;/code&amp;gt; would be &amp;lt;code&amp;gt;15,1&amp;lt;/code&amp;gt; - 15 + (256 * 1). They are also sometimes just 1-byte long with the value at index 0.&lt;br /&gt;
* Strings are encoded by 4 bytes dictating the length of the string (null terminator included) followed by the string&#039;s characters in ASCII codes, ending with &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. For example the string of &amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt; will be encoded as &amp;lt;code&amp;gt;5, 0, 0, 0, 78, 111, 110, 101, 0&amp;lt;/code&amp;gt;, with 5 being the length of the string (4 chars + &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;).&lt;br /&gt;
* When arrays/objects are used (for fields like &amp;lt;code&amp;gt;DropConditions&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;bSetTerritory&amp;lt;/code&amp;gt;, there is often a 4 byte boolean that dictates if the rest of the object is present, or the number of items in the array. For example, with territory, if &amp;lt;code&amp;gt;bSetTerritory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, the bytes will look like &amp;lt;code&amp;gt;0, 0, 0, 0, ... &amp;lt;/code&amp;gt; followed by whatever else comes after. However if it is true (&amp;lt;code&amp;gt;1, 0, 0, 0&amp;lt;/code&amp;gt;), 5 floats (X, Y, Z, HalfHeight and Radius) will follow, making the array vary in length.&lt;br /&gt;
&lt;br /&gt;
[[Dandori Desktop]] provides tools for byte conversions that can aid in finding values.&lt;br /&gt;
&lt;br /&gt;
== Charts == &lt;br /&gt;
&lt;br /&gt;
Attempts have been made to chart the bytes of various AI parameters to uncover patterns and the locations of values in order to manipulate them. The current diagrams mostly illustrate the inventory system.&lt;br /&gt;
&lt;br /&gt;
There are many bytes AFTER the end of the inventory which ends in 4 bytes of &amp;lt;code&amp;gt;255, 255, 255, 255&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt;), but I have no idea what they do yet. I believe they&#039;re probably the overrides for &amp;lt;code&amp;gt;TekiAIParameter&amp;lt;/code&amp;gt;, territory, and each enemy&#039;s custom AI arguments.&lt;br /&gt;
&lt;br /&gt;
=== Creature AI ===&lt;br /&gt;
Details the drop system for a regular enemy (and eggs). The inventory system used here is the same as in GroupDropManager&#039;s, so it helps to understand creatures first.&lt;br /&gt;
&lt;br /&gt;
[[File:P4-creature-ai-inventory-bytes.png|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== ActorSpawner AI ===&lt;br /&gt;
ActorSpawners are a little different, and their only drop is the thing they spawn, with some configuration for it.&lt;br /&gt;
&lt;br /&gt;
[[File:P4-actorspawner-ai.png|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== GroupDropManager AI ===&lt;br /&gt;
&lt;br /&gt;
[[File:P4-gdm-ai.png ‎|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== NoraSpawner AI ===&lt;br /&gt;
&lt;br /&gt;
[[File:P4-noraspawner-ai.png ‎|500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== PortalTrigger Gen Variable ===&lt;br /&gt;
&lt;br /&gt;
This chart is for the &amp;lt;code&amp;gt;PortalTrigger.Static&amp;lt;/code&amp;gt; part of &amp;lt;code&amp;gt;ActorSerializeParameter&amp;lt;/code&amp;gt; and will usually be used in conjunction with portal objects like &amp;lt;code&amp;gt;MadoriRuins&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DownPortal&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-portaltrigger-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== AreaBaseAI Gen Variable ===&lt;br /&gt;
&lt;br /&gt;
This chart is for the base camps.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-areabasecamp-ai.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SprinklerAI and ObjectAIParameter ===&lt;br /&gt;
&lt;br /&gt;
Objects mostly seem composed of two objects - &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; and an entity-specific object, like &amp;lt;code&amp;gt;SprinklerAIParameter&amp;lt;/code&amp;gt;. The former contains inventories (&amp;lt;code&amp;gt;DropParameter&amp;lt;/code&amp;gt;) and some stuff to do with edge collision it seems, while the latter controls everything specific to the entity. The chart below illustrates it for sprinklers.&lt;br /&gt;
 &lt;br /&gt;
[[File:p4-sprinkler-objectAI.png |500px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== Researching ===&lt;br /&gt;
&lt;br /&gt;
The best way of breaking down the AI parameter (I have found) is to combine the blueprint JSONs from the &amp;lt;code&amp;gt;Sublevels/&amp;lt;/code&amp;gt; folder, with the &amp;lt;code&amp;gt;ActorPlacementInfo&amp;lt;/code&amp;gt; file of the same type. The Sublevels files contain the gen_variables that seem to be encoded into the byte arrays of ActorSerializeParameter.&lt;br /&gt;
&lt;br /&gt;
AI parameters can be found by searching for &amp;lt;code&amp;gt;{entity}AI_GEN_VARIABLE&amp;lt;/code&amp;gt;, for example &amp;lt;code&amp;gt;ElecMushiAI_GEN_VARIABLE&amp;lt;/code&amp;gt; for Anode Beetles. Most of the contents of that object&#039;s &amp;lt;code&amp;gt;Properties&amp;lt;/code&amp;gt; will be encoded in that actor&#039;s &amp;lt;code&amp;gt;ActorSerializeParameter.AI.Static&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;ActorPlacementInfo&amp;lt;/code&amp;gt; file, so you can compare things like the drop numbers, asset path and other such floats for occurrences of those values in the AI array. Strings are often the easiest to find/locate with due to their easy to spot nature (look for the big sequence of non-0 numbers and decode it to see if it matches what you need).&lt;br /&gt;
&lt;br /&gt;
A scrape of all of the sublevel files (Day/Hero/Cave) can be found in [https://github.com/Chagrilled/P4-DandoriDesktop/blob/master/src/api/sublevels.json Dandori Desktop&#039;s repo] which collects every parameter that each entity ever defines - so every drop, and config param ever given to any Kochappy, for example. This is very useful for finding all the potential values of random things like &amp;lt;code&amp;gt;GameRulePermissionFlag&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;CustomParameter&amp;lt;/code&amp;gt;, and is a great starting point for piecing parts of the AI puzzles together, as params like &amp;lt;code&amp;gt;ObjectAIParameter&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;TekiAIParameter&amp;lt;/code&amp;gt; are shared frequently, with individual properties being set on certain entities.&lt;br /&gt;
&lt;br /&gt;
[[Category:Pikmin 4]]&lt;br /&gt;
[[Category:Parameters]]&lt;/div&gt;</summary>
		<author><name>Noodl</name></author>
	</entry>
</feed>