Editing ActorSerializeParameter and AI

Jump to navigation Jump to search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.

Latest revision Your text
Line 91: Line 91:
 
[[File:p4-portaltrigger-ai.png |500px|thumb|center|]]
 
[[File:p4-portaltrigger-ai.png |500px|thumb|center|]]
  
=== AreaBase AI Gen Variable ===
+
=== AreaBaseAI Gen Variable ===
  
 
This chart is for the base camps.
 
This chart is for the base camps.
Line 98: Line 98:
  
  
=== Sprinkler AI and ObjectAIParameter ===
+
=== SprinklerAI and ObjectAIParameter ===
  
 
Objects mostly seem composed of two objects - <code>ObjectAIParameter</code> and an entity-specific object, like <code>SprinklerAIParameter</code>. The former contains inventories (<code>DropParameter</code>) 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.
 
Objects mostly seem composed of two objects - <code>ObjectAIParameter</code> and an entity-specific object, like <code>SprinklerAIParameter</code>. The former contains inventories (<code>DropParameter</code>) 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.
 
* To have a valve that is permanently on - enable `bSprinklerOnly` and set `valveID` to `None`.
 
* To connect a valve, match the `valveID` to the valve object's ID. The only valve config I'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.
 
* 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'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`.
 
 
   
 
   
 
[[File:p4-sprinkler-objectAI.png |500px|thumb|center|]]
 
[[File:p4-sprinkler-objectAI.png |500px|thumb|center|]]
  
=== Valve AI ===
+
=== ValveAI ===
  
Valves have a few properties in their parameter, but ObjectParameter is mostly unused here. There are some missing values that I haven't found the indexes for, but you can see the default values in FModel's blueprint. The enum values for EValveWorkType are also unknown, but 2 and 6 are confirmed.  
+
Valves have a few properties in their parameter, but ObjectParameter is mostly unused here. There are some missing values that I haven't found the indexes for, but you can see the default values in FModel's blueprint. The enum values for EValveWorkType are also unknown, but 2 and 6 are confirmed.
 
   
 
   
 
[[File:p4-valveai.png |500px|thumb|center|]]
 
[[File:p4-valveai.png |500px|thumb|center|]]
 
=== NavMeshTriggers ===
 
 
There are 3 types: <code>NavMeshTrigger</code>, <code>NavMeshTriggerClear</code> and <code>NavMeshTriggerLinkForSplash</code> (for sprinklers). My current understanding is that these triggers send pulses to whatever they're linked to on a timer or some conditions. These bytes come from the <code>NavMeshTrigger</code> part of <code>ActorSerializeParameter</code>, and seem to be some of the only objects in the game that use that property. It is worth noting that the <code>AI</code> property for <code>NavMeshTriggerLinkForSplash</code> is identical for every instance of this actor across the game. <code>NavMeshTriggerClear</code> has several different sets of AI bytes though.
 
 
[[File:p4-navmeshtrigger.png |500px|thumb|center|]]
 
 
=== Geyser AI ===
 
 
The geyser's AI bytes are actually comprised of an <code>ObjectAIParameter</code> as usual, followed by the <code>GeyserAI_GEN_VARIABLE</code> and then the <code>NavLink_GEN_VARIALBE</code>. What's interesting to note about this is that it means the <code>AI.Static</code> array can contain more than just what is in <code>AI_GEN_VARIABLE</code>. Primitive geysers can be made simply by editing the <code>Right</code> vector, which applies the vector to your coordinates with some velocity number.
 
 
[[File:p4-geyser-ai.png |500px|thumb|center|]]
 
  
 
=== Researching ===
 
=== Researching ===
Line 135: Line 119:
  
 
The blueprints can also be viewed in FModel (in <code>Placeables/</code>), and you can find the <code>AI_GEN_VARIABLE</code>s which should have all the property names and their default values. I've had limited success here, as you often can'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's possible that non-overriden fields of the gen variable objects are left zeroed, which doesn't make much sense, because how would you set a value of zero? idk.
 
The blueprints can also be viewed in FModel (in <code>Placeables/</code>), and you can find the <code>AI_GEN_VARIABLE</code>s which should have all the property names and their default values. I've had limited success here, as you often can'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's possible that non-overriden fields of the gen variable objects are left zeroed, which doesn't make much sense, because how would you set a value of zero? idk.
 
=== Data Dumps ===
 
 
* [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
 
* [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
 
* [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 <code>entityData.json</code> given how bulky that file is. Clone Dandori Desktop and run <code>node scrape.js Kochappy</code> to dump Kochappy's data into the <code>extractions/</code> folder
 
  
 
[[Category:Pikmin 4]]
 
[[Category:Pikmin 4]]
 
[[Category:Parameters]]
 
[[Category:Parameters]]

Please note that all contributions to Pikmin Technical Knowledge Base are considered to be released under the Creative Commons Attribution-ShareAlike (see Pikmin Technical Knowledge Base:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To edit this page, please answer the question that appears below (more info):

Cancel Editing help (opens in new window)