3600 lines
127 KiB
XML
3600 lines
127 KiB
XML
<?xml version="1.0" encoding="utf-8" ?>
|
|
<Defs>
|
|
<ThinkTreeDef>
|
|
<defName>ARA_Insect_Beast</defName>
|
|
<thinkRoot Class="ThinkNode_Priority">
|
|
<subNodes>
|
|
<!-- Keep lying down if we have to -->
|
|
<li Class="ThinkNode_ConditionalMustKeepLyingDown">
|
|
<subNodes>
|
|
<!-- Do a queued job if possible -->
|
|
<li Class="ThinkNode_QueuedJob">
|
|
<inBedOnly>true</inBedOnly>
|
|
</li>
|
|
|
|
<!-- Keep lying down -->
|
|
<li Class="JobGiver_KeepLyingDown"/>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>Downed</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>BurningResponse</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>MentalStateCritical</treeDef>
|
|
</li>
|
|
|
|
<!-- React to close melee threat -->
|
|
<li Class="JobGiver_ReactToCloseMeleeThreat"/>
|
|
|
|
<!-- Do a queued job -->
|
|
<li Class="ThinkNode_QueuedJob"/>
|
|
|
|
<!-- Wait if drafted -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>DraftedOrder</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_MoveToStandable" />
|
|
<li Class="JobGiver_Orders" />
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Mental state non critical -->
|
|
<!-- <li Class="ThinkNode_Subtree">
|
|
<treeDef>MentalStateNonCritical</treeDef>
|
|
</li> -->
|
|
|
|
<!-- Forced goto -->
|
|
<li Class="ThinkNode_ConditionalForcedGoto">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ForcedGoto"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Behavior when roped -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>RopedPawn</treeDef>
|
|
</li>
|
|
|
|
<!-- Lord directives -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LordDuty</treeDef>
|
|
</li>
|
|
|
|
<!-- Insertion hook for modders -->
|
|
<li Class="ThinkNode_SubtreesByTag">
|
|
<insertTag>Animal_PreMain</insertTag>
|
|
</li>
|
|
<li Class="ThinkNode_SubtreesByTag">
|
|
<insertTag>Insect_PreMain</insertTag>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<invert>true</invert>
|
|
<subNodes>
|
|
<!-- Wild insects with no lord will fight nearby enemies -->
|
|
<li Class="JobGiver_AIFightEnemies">
|
|
<targetAcquireRadius>30</targetAcquireRadius> <!-- Same as DefendAndExpandHive -->
|
|
<targetKeepRadius>35</targetKeepRadius>
|
|
</li>
|
|
|
|
<!-- Wild insects leave map in some conditions -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LeaveIfWrongSeason</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LeaveIfStarving</treeDef>
|
|
</li>
|
|
|
|
<!-- Wild insects randomly leave map -->
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbDays>60</mtbDays>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapRandom">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Insects of a faction that's not the players without a lord leave randomly -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<invert>true</invert>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalNoLord">
|
|
<subNodes>
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbDays>60</mtbDays>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapRandom">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Tame insects -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>TrainedAnimalBehavior</tagToGive>
|
|
<subNodes>
|
|
<!-- Trained behavior: obedience: Follow and defend master -->
|
|
<li Class="ThinkNode_ConditionalTrainableCompleted">
|
|
<trainable>Obedience</trainable>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalShouldFollowMaster">
|
|
<subNodes>
|
|
<li Class="JobGiver_AIDefendMaster">
|
|
<attackMeleeThreatEvenIfNotHostile>true</attackMeleeThreatEvenIfNotHostile>
|
|
</li>
|
|
<li Class="JobGiver_AIFightEnemies">
|
|
<targetAcquireRadius>30</targetAcquireRadius>
|
|
<targetKeepRadius>35</targetKeepRadius>
|
|
</li>
|
|
<li Class="JobGiver_AIFollowMaster"/>
|
|
<li Class="JobGiver_WanderNearMaster"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Trained behavior: Rescue-->
|
|
<li Class="ThinkNode_ConditionalTrainableCompleted">
|
|
<trainable>Rescue</trainable>
|
|
<subNodes>
|
|
<li Class="JobGiver_RescueNearby">
|
|
<radius>500</radius>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Take care of critical needs (below rescue - so heroic!)-->
|
|
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>RestingForMedicalReasons</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_PatientGoToBed"/>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_SeekAllowedArea"/>
|
|
<li Class="JobGiver_SeekSafeTemperature"/>
|
|
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Eat random things out of curiosity -->
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbDays>60</mtbDays>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>SatisfyingNeeds</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_EatRandom"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Satisfy basic needs -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>SatisfyBasicNeeds</treeDef>
|
|
</li>
|
|
|
|
<!-- Tame insect: do useful things for the colony-->
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<subNodes>
|
|
|
|
<!-- Try to mate -->
|
|
<li Class="ThinkNode_ChancePerHour_Mate">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>SatisfyingNeeds</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_Mate"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Nuzzle randoms -->
|
|
<li Class="ThinkNode_ChancePerHour_Nuzzle">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_Nuzzle"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Roamers gonna roam -->
|
|
<li Class="ThinkNode_ChancePerDay_Roam">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_StartRoaming"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Tame animal: wander near colony if possible -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_SeekAllowedArea"/>
|
|
<!-- Wander near your current position if in hostile map -->
|
|
<li Class="ThinkNode_ConditionalAnyEnemyInHostileMap">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>120~240</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_ConditionalRoamer">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderInRoofedCellsInPen">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>120~240</ticksBetweenWandersRange>
|
|
<expiryInterval>500</expiryInterval>
|
|
</li>
|
|
|
|
<!-- tame roamers should not wander too far, and if unenclosed wander near a suitable pen marker 10% of the time -->
|
|
<li Class="ThinkNode_ConditionalRandom">
|
|
<chance>0.1</chance>
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderInPen">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>120~240</ticksBetweenWandersRange>
|
|
<expiryInterval>500</expiryInterval>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>120~240</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Wander near colony -->
|
|
<li Class="JobGiver_WanderColony">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>120~240</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Of neutral faction: rest and then exit the map -->
|
|
<li Class="ThinkNode_ConditionalNonPlayerNonHostileFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>RestingForMedicalReasons</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_PatientGoToBed" />
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapBest">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Wander -->
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalHerdAnimal">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderHerd">
|
|
<maxDanger>Deadly</maxDanger>
|
|
<ticksBetweenWandersRange>120~240</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>Deadly</maxDanger>
|
|
<ticksBetweenWandersRange>120~240</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_IdleError"/>
|
|
</subNodes>
|
|
</thinkRoot>
|
|
</ThinkTreeDef>
|
|
|
|
<ThinkTreeDef>
|
|
<defName>ARA_Insect_WithPlanting</defName>
|
|
<thinkRoot Class="ThinkNode_Priority">
|
|
<subNodes>
|
|
<!-- Keep lying down if we have to -->
|
|
<li Class="ThinkNode_ConditionalMustKeepLyingDown">
|
|
<subNodes>
|
|
<!-- Do a queued job if possible -->
|
|
<li Class="ThinkNode_QueuedJob">
|
|
<inBedOnly>true</inBedOnly>
|
|
</li>
|
|
|
|
<!-- Keep lying down -->
|
|
<li Class="JobGiver_KeepLyingDown"/>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>Downed</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>BurningResponse</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>MentalStateCritical</treeDef>
|
|
</li>
|
|
|
|
<!-- React to close melee threat -->
|
|
<li Class="JobGiver_ReactToCloseMeleeThreat"/>
|
|
|
|
<!-- Do a queued job -->
|
|
<li Class="ThinkNode_QueuedJob"/>
|
|
|
|
<!-- Mental state non critical -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>MentalStateNonCritical</treeDef>
|
|
</li>
|
|
|
|
<!-- Forced goto -->
|
|
<li Class="ThinkNode_ConditionalForcedGoto">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ForcedGoto"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Behavior when roped -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>RopedPawn</treeDef>
|
|
</li>
|
|
|
|
<!-- Lord directives -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LordDuty</treeDef>
|
|
</li>
|
|
|
|
<!-- Insertion hook for modders -->
|
|
<li Class="ThinkNode_SubtreesByTag">
|
|
<insertTag>Animal_PreMain</insertTag>
|
|
</li>
|
|
<li Class="ThinkNode_SubtreesByTag">
|
|
<insertTag>Insect_PreMain</insertTag>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<invert>true</invert>
|
|
<subNodes>
|
|
<!-- Wild insects with no lord will fight nearby enemies -->
|
|
<li Class="JobGiver_AIFightEnemies">
|
|
<targetAcquireRadius>30</targetAcquireRadius> <!-- Same as DefendAndExpandHive -->
|
|
<targetKeepRadius>35</targetKeepRadius>
|
|
</li>
|
|
|
|
<!-- Wild insects leave map in some conditions -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LeaveIfWrongSeason</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LeaveIfStarving</treeDef>
|
|
</li>
|
|
|
|
<!-- Wild insects randomly leave map -->
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbDays>60</mtbDays>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapRandom">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Insects of a faction that's not the players without a lord leave randomly -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<invert>true</invert>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalNoLord">
|
|
<subNodes>
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbDays>60</mtbDays>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapRandom">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Tame insects -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>TrainedAnimalBehavior</tagToGive>
|
|
<subNodes>
|
|
<!-- Trained behavior: obedience: Follow and defend master -->
|
|
<li Class="ThinkNode_ConditionalTrainableCompleted">
|
|
<trainable>Obedience</trainable>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalShouldFollowMaster">
|
|
<subNodes>
|
|
<li Class="JobGiver_AIDefendMaster">
|
|
<attackMeleeThreatEvenIfNotHostile>true</attackMeleeThreatEvenIfNotHostile>
|
|
</li>
|
|
<li Class="JobGiver_AIFollowMaster"/>
|
|
<li Class="JobGiver_WanderNearMaster"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Trained behavior: Rescue-->
|
|
<li Class="ThinkNode_ConditionalTrainableCompleted">
|
|
<trainable>Rescue</trainable>
|
|
<subNodes>
|
|
<li Class="JobGiver_RescueNearby">
|
|
<radius>500</radius>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Take care of critical needs (below rescue - so heroic!)-->
|
|
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>RestingForMedicalReasons</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_PatientGoToBed"/>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_SeekAllowedArea"/>
|
|
<li Class="JobGiver_SeekSafeTemperature"/>
|
|
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Eat random things out of curiosity -->
|
|
<!-- <li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbDays>60</mtbDays>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>SatisfyingNeeds</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_EatRandom"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li> -->
|
|
|
|
<!-- Satisfy basic needs -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>SatisfyBasicNeeds</treeDef>
|
|
</li>
|
|
|
|
<!-- Tame insect: do useful things for the colony-->
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<subNodes>
|
|
|
|
<!-- Try to mate -->
|
|
<li Class="ThinkNode_ChancePerHour_Mate">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>SatisfyingNeeds</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_Mate"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Nuzzle randoms -->
|
|
<li Class="ThinkNode_ChancePerHour_Nuzzle">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_Nuzzle"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Roamers gonna roam -->
|
|
<li Class="ThinkNode_ChancePerDay_Roam">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_StartRoaming"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Trained behavior: Haul-->
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbHours>0.15</mtbHours>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalRequireCapacities">
|
|
<requiredCapacities>
|
|
<li>Manipulation</li>
|
|
</requiredCapacities>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalTrainableCompleted">
|
|
<trainable>Haul</trainable>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>TrainedAnimalBehavior</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_Haul"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Trained behavior: Forage -->
|
|
<li Class="ThinkNode_ConditionalTrainableCompleted" MayRequire="Ludeon.RimWorld.Odyssey">
|
|
<trainable>Forage</trainable>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ChancePerHour_Forage">
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalAnimalShouldForage">
|
|
<subNodes>
|
|
<li Class="JobGiver_Forage" />
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_ConditionalAnimalShouldDig">
|
|
<subNodes>
|
|
<li Class="JobGiver_Mine" />
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- OUR CUSTOM LOGIC INJECTION FOR PLANT HARVESTING -->
|
|
<li Class="ArachnaeSwarm.ThinkNode_ConditionalAnimalShouldDoGrowingWork">
|
|
<subNodes>
|
|
<!-- 统一的、智能的农业 JobGiver -->
|
|
<li Class="ArachnaeSwarm.JobGiver_Grower" />
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- OUR CUSTOM LOGIC INJECTION FOR CLEANING -->
|
|
<li Class="ArachnaeSwarm.ThinkNode_ConditionalAnimalShouldDoCleaningWork">
|
|
<subNodes>
|
|
<li Class="ArachnaeSwarm.JobGiver_Cleaner" />
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Tame animal: wander near colony if possible -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_SeekAllowedArea"/>
|
|
<!-- Wander near your current position if in hostile map -->
|
|
<li Class="ThinkNode_ConditionalAnyEnemyInHostileMap">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>120~240</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_ConditionalRoamer">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderInRoofedCellsInPen">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>120~240</ticksBetweenWandersRange>
|
|
<expiryInterval>500</expiryInterval>
|
|
</li>
|
|
|
|
<!-- tame roamers should not wander too far, and if unenclosed wander near a suitable pen marker 10% of the time -->
|
|
<li Class="ThinkNode_ConditionalRandom">
|
|
<chance>0.1</chance>
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderInPen">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>120~240</ticksBetweenWandersRange>
|
|
<expiryInterval>500</expiryInterval>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>120~240</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Wander near colony -->
|
|
<li Class="JobGiver_WanderColony">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>120~240</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Of neutral faction: rest and then exit the map -->
|
|
<li Class="ThinkNode_ConditionalNonPlayerNonHostileFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>RestingForMedicalReasons</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_PatientGoToBed" />
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapBest">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Wander -->
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalHerdAnimal">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderHerd">
|
|
<maxDanger>Deadly</maxDanger>
|
|
<ticksBetweenWandersRange>120~240</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>Deadly</maxDanger>
|
|
<ticksBetweenWandersRange>120~240</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_IdleError"/>
|
|
</subNodes>
|
|
</thinkRoot>
|
|
</ThinkTreeDef>
|
|
|
|
<ThinkTreeDef>
|
|
<defName>ARA_Insect_Thinktree_Constant</defName>
|
|
<thinkRoot Class="ThinkNode_Priority">
|
|
<subNodes>
|
|
<!-- Despawned -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>Despawned</treeDef>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_ConditionalCanDoConstantThinkTreeJobNow">
|
|
<subNodes>
|
|
<!-- Flee explosion -->
|
|
<li Class="JobGiver_FleePotentialExplosion" />
|
|
|
|
<!-- Avoid vacuums -->
|
|
<li Class="JobGiver_FindOxygen" />
|
|
|
|
<!-- Board/leave gravship -->
|
|
<li Class="JobGiver_BoardOrLeaveGravship" />
|
|
|
|
<!-- Join auto joinable caravan -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>JoinAutoJoinableCaravan</treeDef>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</thinkRoot>
|
|
</ThinkTreeDef>
|
|
|
|
<ThinkTreeDef>
|
|
<defName>ARA_Insect_Larva_Thinktree</defName>
|
|
<thinkRoot Class="ThinkNode_Priority">
|
|
<subNodes>
|
|
<!-- Keep lying down if we have to -->
|
|
<li Class="ThinkNode_ConditionalMustKeepLyingDown">
|
|
<subNodes>
|
|
<!-- Do a queued job if possible -->
|
|
<li Class="ThinkNode_QueuedJob">
|
|
<inBedOnly>true</inBedOnly>
|
|
</li>
|
|
|
|
<!-- Keep lying down -->
|
|
<li Class="JobGiver_KeepLyingDown"/>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>Downed</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>BurningResponse</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>MentalStateCritical</treeDef>
|
|
</li>
|
|
|
|
<!-- React to close melee threat -->
|
|
<li Class="JobGiver_ReactToCloseMeleeThreat"/>
|
|
|
|
<!-- Do a queued job -->
|
|
<li Class="ThinkNode_QueuedJob"/>
|
|
|
|
<!-- Mental state non critical -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>MentalStateNonCritical</treeDef>
|
|
</li>
|
|
|
|
<!-- Forced goto -->
|
|
<li Class="ThinkNode_ConditionalForcedGoto">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ForcedGoto"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Behavior when roped -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>RopedPawn</treeDef>
|
|
</li>
|
|
|
|
<!-- Lord directives -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LordDuty</treeDef>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<invert>true</invert>
|
|
<subNodes>
|
|
<!-- Wild insects with no lord will fight nearby enemies -->
|
|
<li Class="JobGiver_AIFightEnemies">
|
|
<targetAcquireRadius>30</targetAcquireRadius> <!-- Same as DefendAndExpandHive -->
|
|
<targetKeepRadius>35</targetKeepRadius>
|
|
</li>
|
|
|
|
<!-- Wild insects leave map in some conditions -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LeaveIfWrongSeason</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LeaveIfStarving</treeDef>
|
|
</li>
|
|
|
|
<!-- Wild insects randomly leave map -->
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbDays>60</mtbDays>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapRandom">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Insects of a faction that's not the players without a lord leave randomly -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<invert>true</invert>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalNoLord">
|
|
<subNodes>
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbDays>60</mtbDays>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapRandom">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
<!-- Satisfy basic needs -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>SatisfyBasicNeeds</treeDef>
|
|
</li>
|
|
|
|
<!-- Tame animal: wander near colony if possible -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_SeekAllowedArea"/>
|
|
<!-- Wander near your current position if in hostile map -->
|
|
<li Class="ThinkNode_ConditionalAnyEnemyInHostileMap">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>400~650</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_ConditionalRoamer">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderInRoofedCellsInPen">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>400~650</ticksBetweenWandersRange>
|
|
<expiryInterval>1200</expiryInterval>
|
|
</li>
|
|
|
|
<!-- tame roamers should not wander too far, and if unenclosed wander near a suitable pen marker 10% of the time -->
|
|
<li Class="ThinkNode_ConditionalRandom">
|
|
<chance>0.1</chance>
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderInPen">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>400~650</ticksBetweenWandersRange>
|
|
<expiryInterval>1200</expiryInterval>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>400~650</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Wander near colony -->
|
|
<li Class="JobGiver_WanderColony">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>400~650</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Of neutral faction: rest and then exit the map -->
|
|
<li Class="ThinkNode_ConditionalNonPlayerNonHostileFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>RestingForMedicalReasons</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_PatientGoToBed" />
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapBest">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Wander -->
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalHerdAnimal">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderHerd">
|
|
<maxDanger>Deadly</maxDanger>
|
|
<ticksBetweenWandersRange>400~650</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>Deadly</maxDanger>
|
|
<ticksBetweenWandersRange>400~650</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_IdleError"/>
|
|
</subNodes>
|
|
</thinkRoot>
|
|
</ThinkTreeDef>
|
|
<ThinkTreeDef>
|
|
<defName>ARA_Insect_Longpincer_Thinktree</defName>
|
|
<thinkRoot Class="ThinkNode_Priority">
|
|
<subNodes>
|
|
<!-- Keep lying down if we have to -->
|
|
<li Class="ThinkNode_ConditionalMustKeepLyingDown">
|
|
<subNodes>
|
|
<!-- Do a queued job if possible -->
|
|
<li Class="ThinkNode_QueuedJob">
|
|
<inBedOnly>true</inBedOnly>
|
|
</li>
|
|
|
|
<!-- Keep lying down -->
|
|
<li Class="JobGiver_KeepLyingDown"/>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>Downed</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>BurningResponse</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>MentalStateCritical</treeDef>
|
|
</li>
|
|
|
|
<!-- Do a queued job -->
|
|
<li Class="ThinkNode_QueuedJob"/>
|
|
|
|
<!-- Mental state non critical -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>MentalStateNonCritical</treeDef>
|
|
</li>
|
|
|
|
<!-- Forced goto -->
|
|
<li Class="ThinkNode_ConditionalForcedGoto">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ForcedGoto"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Behavior when roped -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>RopedPawn</treeDef>
|
|
</li>
|
|
|
|
<!-- Lord directives -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LordDuty</treeDef>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<invert>true</invert>
|
|
<subNodes>
|
|
<!-- Wild insects with no lord will fight nearby enemies -->
|
|
<li Class="JobGiver_AIFightEnemies">
|
|
<targetAcquireRadius>30</targetAcquireRadius> <!-- Same as DefendAndExpandHive -->
|
|
<targetKeepRadius>35</targetKeepRadius>
|
|
</li>
|
|
|
|
<!-- Wild insects leave map in some conditions -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LeaveIfWrongSeason</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LeaveIfStarving</treeDef>
|
|
</li>
|
|
|
|
<!-- Wild insects randomly leave map -->
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbDays>60</mtbDays>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapRandom">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Insects of a faction that's not the players without a lord leave randomly -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<invert>true</invert>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalNoLord">
|
|
<subNodes>
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbDays>60</mtbDays>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapRandom">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- 特殊处理——非生产者生产会使用单元逻辑 -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<subNodes>
|
|
<li Class="ArachnaeSwarm.ThinkNode_ConditionalNotProducedByMechCarrier">
|
|
<subNodes>
|
|
<!-- React to close melee threat -->
|
|
<li Class="JobGiver_ReactToCloseMeleeThreat"/>
|
|
<li Class="JobGiver_AIFightEnemies">
|
|
<targetAcquireRadius>30</targetAcquireRadius>
|
|
<targetKeepRadius>35</targetKeepRadius>
|
|
</li>
|
|
<li Class="JobGiver_AITrashColonyClose" />
|
|
<li Class="JobGiver_AITrashBuildingsDistant" />
|
|
<li Class="JobGiver_AIGotoNearestHostile" />
|
|
<li Class="JobGiver_AITrashBuildingsDistant">
|
|
<attackAllInert>true</attackAllInert>
|
|
</li>
|
|
<li Class="JobGiver_WanderAnywhere" />
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
<!-- 特殊处理——如果生产者被征召会跟随pawn -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<subNodes>
|
|
<li Class="ArachnaeSwarm.ThinkNode_ConditionalShouldFollowProducer">
|
|
<subNodes>
|
|
<li Class="ArachnaeSwarm.JobGiver_AIDefendProducer">
|
|
<attackMeleeThreatEvenIfNotHostile>true</attackMeleeThreatEvenIfNotHostile>
|
|
<defendRadius>30</defendRadius>
|
|
</li>
|
|
<li Class="ArachnaeSwarm.JobGiver_AIFollowProducer"/>
|
|
<li Class="ArachnaeSwarm.JobGiver_WanderNearProducer"/>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Take care of critical needs (below rescue - so heroic!)-->
|
|
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>RestingForMedicalReasons</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_PatientGoToBed"/>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_SeekAllowedArea"/>
|
|
<li Class="JobGiver_SeekSafeTemperature"/>
|
|
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Eat random things out of curiosity -->
|
|
<!-- <li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbDays>60</mtbDays>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>SatisfyingNeeds</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_EatRandom"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li> -->
|
|
|
|
<!-- Satisfy basic needs -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>SatisfyBasicNeeds</treeDef>
|
|
</li>
|
|
|
|
<!-- Tame insect: do useful things for the colony-->
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<subNodes>
|
|
|
|
<!-- Try to mate -->
|
|
<li Class="ThinkNode_ChancePerHour_Mate">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>SatisfyingNeeds</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_Mate"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Nuzzle randoms -->
|
|
<li Class="ThinkNode_ChancePerHour_Nuzzle">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_Nuzzle"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Roamers gonna roam -->
|
|
<li Class="ThinkNode_ChancePerDay_Roam">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_StartRoaming"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Trained behavior: Haul-->
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbHours>0.15</mtbHours>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalRequireCapacities">
|
|
<requiredCapacities>
|
|
<li>Manipulation</li>
|
|
</requiredCapacities>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalTrainableCompleted">
|
|
<trainable>Haul</trainable>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>TrainedAnimalBehavior</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_Haul"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_ConditionalAnimalShouldDig">
|
|
<subNodes>
|
|
<li Class="JobGiver_Mine" />
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Tame animal: wander near colony if possible -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_SeekAllowedArea"/>
|
|
|
|
<!-- Wander near your current position if in hostile map -->
|
|
<li Class="ThinkNode_ConditionalAnyEnemyInHostileMap">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_ConditionalRoamer">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderInRoofedCellsInPen">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
<expiryInterval>1200</expiryInterval>
|
|
</li>
|
|
|
|
<!-- tame roamers should not wander too far, and if unenclosed wander near a suitable pen marker 10% of the time -->
|
|
<li Class="ThinkNode_ConditionalRandom">
|
|
<chance>0.1</chance>
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderInPen">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
<expiryInterval>1200</expiryInterval>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Wander near colony -->
|
|
<li Class="JobGiver_WanderColony">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Of neutral faction: rest and then exit the map -->
|
|
<li Class="ThinkNode_ConditionalNonPlayerNonHostileFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>RestingForMedicalReasons</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_PatientGoToBed" />
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapBest">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Wander -->
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalHerdAnimal">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderHerd">
|
|
<maxDanger>Deadly</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>Deadly</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_IdleError"/>
|
|
</subNodes>
|
|
</thinkRoot>
|
|
</ThinkTreeDef>
|
|
<ThinkTreeDef>
|
|
<defName>ARA_Insect_Acidcut_Thinktree</defName>
|
|
<thinkRoot Class="ThinkNode_Priority">
|
|
<subNodes>
|
|
<!-- Keep lying down if we have to -->
|
|
<li Class="ThinkNode_ConditionalMustKeepLyingDown">
|
|
<subNodes>
|
|
<!-- Do a queued job if possible -->
|
|
<li Class="ThinkNode_QueuedJob">
|
|
<inBedOnly>true</inBedOnly>
|
|
</li>
|
|
|
|
<!-- Keep lying down -->
|
|
<li Class="JobGiver_KeepLyingDown"/>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>Downed</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>BurningResponse</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>MentalStateCritical</treeDef>
|
|
</li>
|
|
|
|
<!-- Do a queued job -->
|
|
<li Class="ThinkNode_QueuedJob"/>
|
|
|
|
<!-- Mental state non critical -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>MentalStateNonCritical</treeDef>
|
|
</li>
|
|
|
|
<!-- Forced goto -->
|
|
<li Class="ThinkNode_ConditionalForcedGoto">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ForcedGoto"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Behavior when roped -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>RopedPawn</treeDef>
|
|
</li>
|
|
|
|
<!-- Lord directives -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LordDuty</treeDef>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<invert>true</invert>
|
|
<subNodes>
|
|
<!-- Wild insects with no lord will fight nearby enemies -->
|
|
<li Class="JobGiver_AIFightEnemies">
|
|
<targetAcquireRadius>30</targetAcquireRadius> <!-- Same as DefendAndExpandHive -->
|
|
<targetKeepRadius>35</targetKeepRadius>
|
|
</li>
|
|
|
|
<!-- Wild insects leave map in some conditions -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LeaveIfWrongSeason</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LeaveIfStarving</treeDef>
|
|
</li>
|
|
|
|
<!-- Wild insects randomly leave map -->
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbDays>60</mtbDays>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapRandom">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Insects of a faction that's not the players without a lord leave randomly -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<invert>true</invert>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalNoLord">
|
|
<subNodes>
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbDays>60</mtbDays>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapRandom">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- 特殊处理——非生产者生产会使用单元逻辑 -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<subNodes>
|
|
<li Class="ArachnaeSwarm.ThinkNode_ConditionalNotProducedByMechCarrier">
|
|
<subNodes>
|
|
<!-- React to close melee threat -->
|
|
<li Class="JobGiver_ReactToCloseMeleeThreat"/>
|
|
<li Class="JobGiver_AIFightEnemies">
|
|
<targetAcquireRadius>30</targetAcquireRadius>
|
|
<targetKeepRadius>35</targetKeepRadius>
|
|
</li>
|
|
<li Class="JobGiver_AITrashColonyClose" />
|
|
<li Class="JobGiver_AITrashBuildingsDistant" />
|
|
<li Class="JobGiver_AIGotoNearestHostile" />
|
|
<li Class="JobGiver_AITrashBuildingsDistant">
|
|
<attackAllInert>true</attackAllInert>
|
|
</li>
|
|
<li Class="JobGiver_WanderAnywhere" />
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
<!-- 特殊处理——如果生产者被征召会跟随pawn -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<subNodes>
|
|
<li Class="ArachnaeSwarm.ThinkNode_ConditionalShouldFollowProducer">
|
|
<subNodes>
|
|
<li Class="ArachnaeSwarm.JobGiver_AIDefendProducer">
|
|
<attackMeleeThreatEvenIfNotHostile>true</attackMeleeThreatEvenIfNotHostile>
|
|
<defendRadius>50</defendRadius>
|
|
</li>
|
|
<li Class="ArachnaeSwarm.JobGiver_AIFollowProducer"/>
|
|
<li Class="ArachnaeSwarm.JobGiver_WanderNearProducer"/>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Take care of critical needs (below rescue - so heroic!)-->
|
|
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>RestingForMedicalReasons</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_PatientGoToBed"/>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_SeekAllowedArea"/>
|
|
<li Class="JobGiver_SeekSafeTemperature"/>
|
|
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Satisfy basic needs -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>SatisfyBasicNeeds</treeDef>
|
|
</li>
|
|
|
|
<!-- Tame animal: wander near colony if possible -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_SeekAllowedArea"/>
|
|
<!-- Wander near your current position if in hostile map -->
|
|
<li Class="ThinkNode_ConditionalAnyEnemyInHostileMap">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_ConditionalRoamer">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderInRoofedCellsInPen">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
<expiryInterval>1200</expiryInterval>
|
|
</li>
|
|
|
|
<!-- tame roamers should not wander too far, and if unenclosed wander near a suitable pen marker 10% of the time -->
|
|
<li Class="ThinkNode_ConditionalRandom">
|
|
<chance>0.1</chance>
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderInPen">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
<expiryInterval>1200</expiryInterval>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Wander near colony -->
|
|
<li Class="JobGiver_WanderColony">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Of neutral faction: rest and then exit the map -->
|
|
<li Class="ThinkNode_ConditionalNonPlayerNonHostileFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>RestingForMedicalReasons</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_PatientGoToBed" />
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapBest">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Wander -->
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalHerdAnimal">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderHerd">
|
|
<maxDanger>Deadly</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>Deadly</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_IdleError"/>
|
|
</subNodes>
|
|
</thinkRoot>
|
|
</ThinkTreeDef>
|
|
<ThinkTreeDef>
|
|
<defName>ARA_Insect_Hivekeeping_Thinktree</defName>
|
|
<thinkRoot Class="ThinkNode_Priority">
|
|
<subNodes>
|
|
<!-- Keep lying down if we have to -->
|
|
<li Class="ThinkNode_ConditionalMustKeepLyingDown">
|
|
<subNodes>
|
|
<!-- Do a queued job if possible -->
|
|
<li Class="ThinkNode_QueuedJob">
|
|
<inBedOnly>true</inBedOnly>
|
|
</li>
|
|
|
|
<!-- Keep lying down -->
|
|
<li Class="JobGiver_KeepLyingDown"/>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>Downed</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>BurningResponse</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>MentalStateCritical</treeDef>
|
|
</li>
|
|
|
|
<!-- React to close melee threat -->
|
|
<li Class="JobGiver_ReactToCloseMeleeThreat"/>
|
|
|
|
<!-- Do a queued job -->
|
|
<li Class="ThinkNode_QueuedJob"/>
|
|
|
|
<!-- Mental state non critical -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>MentalStateNonCritical</treeDef>
|
|
</li>
|
|
|
|
<!-- Forced goto -->
|
|
<li Class="ThinkNode_ConditionalForcedGoto">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ForcedGoto"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Behavior when roped -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>RopedPawn</treeDef>
|
|
</li>
|
|
|
|
<!-- Lord directives -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LordDuty</treeDef>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<invert>true</invert>
|
|
<subNodes>
|
|
<!-- Wild insects with no lord will fight nearby enemies -->
|
|
<li Class="JobGiver_AIFightEnemies">
|
|
<targetAcquireRadius>30</targetAcquireRadius> <!-- Same as DefendAndExpandHive -->
|
|
<targetKeepRadius>35</targetKeepRadius>
|
|
</li>
|
|
|
|
<!-- Wild insects leave map in some conditions -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LeaveIfWrongSeason</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LeaveIfStarving</treeDef>
|
|
</li>
|
|
|
|
<!-- Wild insects randomly leave map -->
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbDays>60</mtbDays>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapRandom">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Insects of a faction that's not the players without a lord leave randomly -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<invert>true</invert>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalNoLord">
|
|
<subNodes>
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbDays>60</mtbDays>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapRandom">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Satisfy basic needs -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>SatisfyBasicNeeds</treeDef>
|
|
</li>
|
|
|
|
<!-- Tame insect: do useful things for the colony-->
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<subNodes>
|
|
|
|
<!-- Try to mate -->
|
|
<li Class="ThinkNode_ChancePerHour_Mate">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>SatisfyingNeeds</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_Mate"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Nuzzle randoms -->
|
|
<li Class="ThinkNode_ChancePerHour_Nuzzle">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_Nuzzle"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Roamers gonna roam -->
|
|
<li Class="ThinkNode_ChancePerDay_Roam">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_StartRoaming"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ArachnaeSwarm.ThinkNode_ConditionalShouldMaintain">
|
|
<maxMaintenanceDistance>50</maxMaintenanceDistance>
|
|
<onlyWhenIdle>false</onlyWhenIdle>
|
|
<subNodes>
|
|
<li Class="ArachnaeSwarm.JobGiver_AIMaintainSwarm">
|
|
<maxSearchRadius>30</maxSearchRadius>
|
|
<maintenanceThreshold>0.5</maintenanceThreshold>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- OUR CUSTOM LOGIC INJECTION FOR CLEANING -->
|
|
<li Class="ArachnaeSwarm.ThinkNode_ConditionalAnimalShouldDoCleaningWork">
|
|
<subNodes>
|
|
<li Class="ArachnaeSwarm.JobGiver_Cleaner" />
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Trained behavior: Haul-->
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbHours>0.15</mtbHours>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalRequireCapacities">
|
|
<requiredCapacities>
|
|
<li>Manipulation</li>
|
|
</requiredCapacities>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalTrainableCompleted">
|
|
<trainable>Haul</trainable>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>TrainedAnimalBehavior</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_Haul"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Tame animal: wander near colony if possible -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_SeekAllowedArea"/>
|
|
<!-- Wander near your current position if in hostile map -->
|
|
<li Class="ThinkNode_ConditionalAnyEnemyInHostileMap">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_ConditionalRoamer">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderInRoofedCellsInPen">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
<expiryInterval>1200</expiryInterval>
|
|
</li>
|
|
|
|
<!-- tame roamers should not wander too far, and if unenclosed wander near a suitable pen marker 10% of the time -->
|
|
<li Class="ThinkNode_ConditionalRandom">
|
|
<chance>0.1</chance>
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderInPen">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
<expiryInterval>1200</expiryInterval>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Wander near colony -->
|
|
<li Class="JobGiver_WanderColony">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Of neutral faction: rest and then exit the map -->
|
|
<li Class="ThinkNode_ConditionalNonPlayerNonHostileFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>RestingForMedicalReasons</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_PatientGoToBed" />
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapBest">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Wander -->
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalHerdAnimal">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderHerd">
|
|
<maxDanger>Deadly</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>Deadly</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_IdleError"/>
|
|
</subNodes>
|
|
</thinkRoot>
|
|
</ThinkTreeDef>
|
|
<ThinkTreeDef>
|
|
<defName>ARA_Insect_Scavenger_Thinktree</defName>
|
|
<thinkRoot Class="ThinkNode_Priority">
|
|
<subNodes>
|
|
<!-- Keep lying down if we have to -->
|
|
<li Class="ThinkNode_ConditionalMustKeepLyingDown">
|
|
<subNodes>
|
|
<!-- Do a queued job if possible -->
|
|
<li Class="ThinkNode_QueuedJob">
|
|
<inBedOnly>true</inBedOnly>
|
|
</li>
|
|
|
|
<!-- Keep lying down -->
|
|
<li Class="JobGiver_KeepLyingDown"/>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>Downed</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>BurningResponse</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>MentalStateCritical</treeDef>
|
|
</li>
|
|
|
|
<!-- React to close melee threat -->
|
|
<li Class="JobGiver_ReactToCloseMeleeThreat"/>
|
|
|
|
<!-- Do a queued job -->
|
|
<li Class="ThinkNode_QueuedJob"/>
|
|
|
|
<!-- Mental state non critical -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>MentalStateNonCritical</treeDef>
|
|
</li>
|
|
|
|
<!-- Forced goto -->
|
|
<li Class="ThinkNode_ConditionalForcedGoto">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ForcedGoto"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Behavior when roped -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>RopedPawn</treeDef>
|
|
</li>
|
|
|
|
<!-- Lord directives -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LordDuty</treeDef>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<invert>true</invert>
|
|
<subNodes>
|
|
<!-- Wild insects with no lord will fight nearby enemies -->
|
|
<li Class="JobGiver_AIFightEnemies">
|
|
<targetAcquireRadius>30</targetAcquireRadius> <!-- Same as DefendAndExpandHive -->
|
|
<targetKeepRadius>35</targetKeepRadius>
|
|
</li>
|
|
|
|
<!-- Wild insects leave map in some conditions -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LeaveIfWrongSeason</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LeaveIfStarving</treeDef>
|
|
</li>
|
|
|
|
<!-- Wild insects randomly leave map -->
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbDays>60</mtbDays>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapRandom">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Insects of a faction that's not the players without a lord leave randomly -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<invert>true</invert>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalNoLord">
|
|
<subNodes>
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbDays>60</mtbDays>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapRandom">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Satisfy basic needs -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>SatisfyBasicNeeds</treeDef>
|
|
</li>
|
|
|
|
<!-- Tame insect: do useful things for the colony-->
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<subNodes>
|
|
|
|
<!-- Try to mate -->
|
|
<li Class="ThinkNode_ChancePerHour_Mate">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>SatisfyingNeeds</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_Mate"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Nuzzle randoms -->
|
|
<li Class="ThinkNode_ChancePerHour_Nuzzle">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_Nuzzle"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Roamers gonna roam -->
|
|
<li Class="ThinkNode_ChancePerDay_Roam">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_StartRoaming"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ArachnaeSwarm.ThinkNode_ConditionalShouldExtract">
|
|
<subNodes>
|
|
<li Class="ArachnaeSwarm.JobGiver_ExtractHoney"/>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- OUR CUSTOM LOGIC INJECTION FOR PLANT HARVESTING -->
|
|
<li Class="ArachnaeSwarm.ThinkNode_ConditionalAnimalShouldDoGrowingWork">
|
|
<subNodes>
|
|
<!-- 统一的、智能的农业 JobGiver -->
|
|
<li Class="ArachnaeSwarm.JobGiver_Grower" />
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Trained behavior: Haul-->
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbHours>0.15</mtbHours>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalRequireCapacities">
|
|
<requiredCapacities>
|
|
<li>Manipulation</li>
|
|
</requiredCapacities>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalTrainableCompleted">
|
|
<trainable>Haul</trainable>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>TrainedAnimalBehavior</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_Haul"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Tame animal: wander near colony if possible -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_SeekAllowedArea"/>
|
|
<!-- Wander near your current position if in hostile map -->
|
|
<li Class="ThinkNode_ConditionalAnyEnemyInHostileMap">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_ConditionalRoamer">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderInRoofedCellsInPen">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
<expiryInterval>1200</expiryInterval>
|
|
</li>
|
|
|
|
<!-- tame roamers should not wander too far, and if unenclosed wander near a suitable pen marker 10% of the time -->
|
|
<li Class="ThinkNode_ConditionalRandom">
|
|
<chance>0.1</chance>
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderInPen">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
<expiryInterval>1200</expiryInterval>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Wander near colony -->
|
|
<li Class="JobGiver_WanderColony">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Of neutral faction: rest and then exit the map -->
|
|
<li Class="ThinkNode_ConditionalNonPlayerNonHostileFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>RestingForMedicalReasons</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_PatientGoToBed" />
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapBest">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Wander -->
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalHerdAnimal">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderHerd">
|
|
<maxDanger>Deadly</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>Deadly</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_IdleError"/>
|
|
</subNodes>
|
|
</thinkRoot>
|
|
</ThinkTreeDef>
|
|
<ThinkTreeDef>
|
|
<defName>ARA_Insect_Baneling_Thinktree</defName>
|
|
<thinkRoot Class="ThinkNode_Priority">
|
|
<subNodes>
|
|
<!-- Keep lying down if we have to -->
|
|
<li Class="ThinkNode_ConditionalMustKeepLyingDown">
|
|
<subNodes>
|
|
<!-- Do a queued job if possible -->
|
|
<li Class="ThinkNode_QueuedJob">
|
|
<inBedOnly>true</inBedOnly>
|
|
</li>
|
|
|
|
<!-- Keep lying down -->
|
|
<li Class="JobGiver_KeepLyingDown"/>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>Downed</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>BurningResponse</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>MentalStateCritical</treeDef>
|
|
</li>
|
|
|
|
<!-- Do a queued job -->
|
|
<li Class="ThinkNode_QueuedJob"/>
|
|
|
|
<!-- Mental state non critical -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>MentalStateNonCritical</treeDef>
|
|
</li>
|
|
|
|
<!-- Forced goto -->
|
|
<li Class="ThinkNode_ConditionalForcedGoto">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ForcedGoto"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Behavior when roped -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>RopedPawn</treeDef>
|
|
</li>
|
|
|
|
<!-- Lord directives -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LordDuty</treeDef>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<invert>true</invert>
|
|
<subNodes>
|
|
<!-- Wild insects with no lord will fight nearby enemies -->
|
|
<li Class="JobGiver_AIFightEnemies">
|
|
<targetAcquireRadius>30</targetAcquireRadius>
|
|
<targetKeepRadius>35</targetKeepRadius>
|
|
</li>
|
|
|
|
<!-- Wild insects leave map in some conditions -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LeaveIfWrongSeason</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LeaveIfStarving</treeDef>
|
|
</li>
|
|
|
|
<!-- Wild insects randomly leave map -->
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbDays>60</mtbDays>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapRandom">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Insects of a faction that's not the players without a lord leave randomly -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<invert>true</invert>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalNoLord">
|
|
<subNodes>
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbDays>60</mtbDays>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapRandom">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- 特殊处理——非生产者生产会使用单元逻辑 -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<subNodes>
|
|
<li Class="ArachnaeSwarm.ThinkNode_ConditionalNotProducedByMechCarrier">
|
|
<subNodes>
|
|
<!-- React to close melee threat -->
|
|
<li Class="JobGiver_ReactToCloseMeleeThreat"/>
|
|
<li Class="JobGiver_AIFightEnemies">
|
|
<targetAcquireRadius>30</targetAcquireRadius>
|
|
<targetKeepRadius>35</targetKeepRadius>
|
|
</li>
|
|
<li Class="JobGiver_AITrashColonyClose" />
|
|
<li Class="JobGiver_AITrashBuildingsDistant" />
|
|
<li Class="JobGiver_AIGotoNearestHostile" />
|
|
<li Class="JobGiver_AITrashBuildingsDistant">
|
|
<attackAllInert>true</attackAllInert>
|
|
</li>
|
|
<li Class="JobGiver_WanderAnywhere" />
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
<!-- 特殊处理——如果生产者被征召会跟随pawn -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<subNodes>
|
|
<li Class="ArachnaeSwarm.ThinkNode_ConditionalShouldFollowProducer">
|
|
<subNodes>
|
|
<li Class="ArachnaeSwarm.JobGiver_AIDefendProducer">
|
|
<attackMeleeThreatEvenIfNotHostile>true</attackMeleeThreatEvenIfNotHostile>
|
|
<defendRadius>100</defendRadius>
|
|
</li>
|
|
<li Class="ArachnaeSwarm.JobGiver_AIFollowProducer"/>
|
|
<li Class="ArachnaeSwarm.JobGiver_WanderNearProducer"/>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Take care of critical needs (below rescue - so heroic!)-->
|
|
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>RestingForMedicalReasons</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_PatientGoToBed"/>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_SeekAllowedArea"/>
|
|
<li Class="JobGiver_SeekSafeTemperature"/>
|
|
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Satisfy basic needs -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>SatisfyBasicNeeds</treeDef>
|
|
</li>
|
|
|
|
<!-- Tame animal: wander near colony if possible -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_SeekAllowedArea"/>
|
|
<!-- Wander near your current position if in hostile map -->
|
|
<li Class="ThinkNode_ConditionalAnyEnemyInHostileMap">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_ConditionalRoamer">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderInRoofedCellsInPen">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
<expiryInterval>1200</expiryInterval>
|
|
</li>
|
|
|
|
<!-- tame roamers should not wander too far, and if unenclosed wander near a suitable pen marker 10% of the time -->
|
|
<li Class="ThinkNode_ConditionalRandom">
|
|
<chance>0.1</chance>
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderInPen">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
<expiryInterval>1200</expiryInterval>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Wander near colony -->
|
|
<li Class="JobGiver_WanderColony">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Of neutral faction: rest and then exit the map -->
|
|
<li Class="ThinkNode_ConditionalNonPlayerNonHostileFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>RestingForMedicalReasons</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_PatientGoToBed" />
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapBest">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Wander -->
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalHerdAnimal">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderHerd">
|
|
<maxDanger>Deadly</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>Deadly</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_IdleError"/>
|
|
</subNodes>
|
|
</thinkRoot>
|
|
</ThinkTreeDef>
|
|
<ThinkTreeDef>
|
|
<defName>ARA_Insect_Skyhive_Thinktree</defName>
|
|
<thinkRoot Class="ThinkNode_Priority">
|
|
<subNodes>
|
|
<!-- Keep lying down if we have to -->
|
|
<li Class="ThinkNode_ConditionalMustKeepLyingDown">
|
|
<subNodes>
|
|
<!-- Do a queued job if possible -->
|
|
<li Class="ThinkNode_QueuedJob">
|
|
<inBedOnly>true</inBedOnly>
|
|
</li>
|
|
|
|
<!-- Keep lying down -->
|
|
<li Class="JobGiver_KeepLyingDown"/>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>Downed</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>BurningResponse</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>MentalStateCritical</treeDef>
|
|
</li>
|
|
|
|
<!-- Do a queued job -->
|
|
<li Class="ThinkNode_QueuedJob"/>
|
|
|
|
<!-- Mental state non critical -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>MentalStateNonCritical</treeDef>
|
|
</li>
|
|
|
|
<!-- Forced goto -->
|
|
<li Class="ThinkNode_ConditionalForcedGoto">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ForcedGoto"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Behavior when roped -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>RopedPawn</treeDef>
|
|
</li>
|
|
|
|
<!-- Lord directives -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LordDuty</treeDef>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<invert>true</invert>
|
|
<subNodes>
|
|
<!-- Wild insects with no lord will fight nearby enemies -->
|
|
<li Class="JobGiver_AIFightEnemies">
|
|
<targetAcquireRadius>30</targetAcquireRadius> <!-- Same as DefendAndExpandHive -->
|
|
<targetKeepRadius>35</targetKeepRadius>
|
|
</li>
|
|
|
|
<!-- Wild insects leave map in some conditions -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LeaveIfWrongSeason</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LeaveIfStarving</treeDef>
|
|
</li>
|
|
|
|
<!-- Wild insects randomly leave map -->
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbDays>60</mtbDays>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapRandom">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Insects of a faction that's not the players without a lord leave randomly -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<invert>true</invert>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalNoLord">
|
|
<subNodes>
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbDays>60</mtbDays>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapRandom">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- 特殊处理——非生产者生产会使用单元逻辑 -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<subNodes>
|
|
<li Class="ArachnaeSwarm.ThinkNode_ConditionalNotProducedByMechCarrier">
|
|
<subNodes>
|
|
<!-- React to close melee threat -->
|
|
<li Class="JobGiver_ReactToCloseMeleeThreat"/>
|
|
<li Class="JobGiver_AIFightEnemies">
|
|
<targetAcquireRadius>30</targetAcquireRadius>
|
|
<targetKeepRadius>35</targetKeepRadius>
|
|
</li>
|
|
<li Class="JobGiver_AITrashColonyClose" />
|
|
<li Class="JobGiver_AITrashBuildingsDistant" />
|
|
<li Class="JobGiver_AIGotoNearestHostile" />
|
|
<li Class="JobGiver_AITrashBuildingsDistant">
|
|
<attackAllInert>true</attackAllInert>
|
|
</li>
|
|
<li Class="JobGiver_WanderAnywhere" />
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
<!-- 特殊处理——如果生产者被征召会跟随pawn -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<subNodes>
|
|
<li Class="ArachnaeSwarm.ThinkNode_ConditionalShouldFollowProducer">
|
|
<subNodes>
|
|
<li Class="ArachnaeSwarm.JobGiver_AIDefendProducer">
|
|
<attackMeleeThreatEvenIfNotHostile>true</attackMeleeThreatEvenIfNotHostile>
|
|
<defendRadius>100</defendRadius>
|
|
</li>
|
|
<li Class="ArachnaeSwarm.JobGiver_AIFollowProducer"/>
|
|
<li Class="ArachnaeSwarm.JobGiver_WanderNearProducer"/>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Take care of critical needs (below rescue - so heroic!)-->
|
|
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>RestingForMedicalReasons</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_PatientGoToBed"/>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_SeekAllowedArea"/>
|
|
<li Class="JobGiver_SeekSafeTemperature"/>
|
|
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Satisfy basic needs -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>SatisfyBasicNeeds</treeDef>
|
|
</li>
|
|
|
|
<!-- Tame animal: wander near colony if possible -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_SeekAllowedArea"/>
|
|
<!-- Wander near your current position if in hostile map -->
|
|
<li Class="ThinkNode_ConditionalAnyEnemyInHostileMap">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_ConditionalRoamer">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderInRoofedCellsInPen">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
<expiryInterval>1200</expiryInterval>
|
|
</li>
|
|
|
|
<!-- tame roamers should not wander too far, and if unenclosed wander near a suitable pen marker 10% of the time -->
|
|
<li Class="ThinkNode_ConditionalRandom">
|
|
<chance>0.1</chance>
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderInPen">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
<expiryInterval>1200</expiryInterval>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Wander near colony -->
|
|
<li Class="JobGiver_WanderColony">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Of neutral faction: rest and then exit the map -->
|
|
<li Class="ThinkNode_ConditionalNonPlayerNonHostileFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>RestingForMedicalReasons</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_PatientGoToBed" />
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapBest">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Wander -->
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalHerdAnimal">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderHerd">
|
|
<maxDanger>Deadly</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>Deadly</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_IdleError"/>
|
|
</subNodes>
|
|
</thinkRoot>
|
|
</ThinkTreeDef>
|
|
<ThinkTreeDef>
|
|
<defName>ARA_Insect_Locust_Thinktree</defName>
|
|
<thinkRoot Class="ThinkNode_Priority">
|
|
<subNodes>
|
|
<!-- Keep lying down if we have to -->
|
|
<li Class="ThinkNode_ConditionalMustKeepLyingDown">
|
|
<subNodes>
|
|
<!-- Do a queued job if possible -->
|
|
<li Class="ThinkNode_QueuedJob">
|
|
<inBedOnly>true</inBedOnly>
|
|
</li>
|
|
|
|
<!-- Keep lying down -->
|
|
<li Class="JobGiver_KeepLyingDown"/>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>Downed</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>BurningResponse</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>MentalStateCritical</treeDef>
|
|
</li>
|
|
|
|
<!-- Do a queued job -->
|
|
<li Class="ThinkNode_QueuedJob"/>
|
|
|
|
<!-- Mental state non critical -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>MentalStateNonCritical</treeDef>
|
|
</li>
|
|
|
|
<!-- Forced goto -->
|
|
<li Class="ThinkNode_ConditionalForcedGoto">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ForcedGoto"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Behavior when roped -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>RopedPawn</treeDef>
|
|
</li>
|
|
|
|
<!-- Lord directives -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LordDuty</treeDef>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<invert>true</invert>
|
|
<subNodes>
|
|
<!-- Wild insects with no lord will fight nearby enemies -->
|
|
<li Class="JobGiver_AIFightEnemies">
|
|
<targetAcquireRadius>30</targetAcquireRadius> <!-- Same as DefendAndExpandHive -->
|
|
<targetKeepRadius>35</targetKeepRadius>
|
|
</li>
|
|
|
|
<!-- Wild insects leave map in some conditions -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LeaveIfWrongSeason</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LeaveIfStarving</treeDef>
|
|
</li>
|
|
|
|
<!-- Wild insects randomly leave map -->
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbDays>60</mtbDays>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapRandom">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Insects of a faction that's not the players without a lord leave randomly -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<invert>true</invert>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalHasFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalNoLord">
|
|
<subNodes>
|
|
<li Class="ThinkNode_ChancePerHour_Constant">
|
|
<mtbDays>60</mtbDays>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapRandom">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- 特殊处理——非生产者生产会使用单元逻辑 -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<subNodes>
|
|
<li Class="ArachnaeSwarm.ThinkNode_ConditionalNotProducedByMechCarrier">
|
|
<subNodes>
|
|
<li Class="JobGiver_FleeForDistance">
|
|
<enemyDistToFleeRange>2.9~7.9</enemyDistToFleeRange>
|
|
<fleeDistRange>13.5~20</fleeDistRange>
|
|
</li>
|
|
<!-- React to close melee threat -->
|
|
<li Class="JobGiver_ReactToCloseMeleeThreat">
|
|
<maxDistance>2.9</maxDistance>
|
|
</li>
|
|
<!-- Fire spikes at distant enemies -->
|
|
<li Class="JobGiver_AIAbilityFight">
|
|
<targetAcquireRadius>65</targetAcquireRadius>
|
|
<targetKeepRadius>72</targetKeepRadius>
|
|
<skipIfCantTargetNow>false</skipIfCantTargetNow>
|
|
<ability>ARA_Locust_Needle_Fire</ability>
|
|
<allowTurrets>true</allowTurrets>
|
|
<needLOSToAcquireNonPawnTargets>true</needLOSToAcquireNonPawnTargets>
|
|
</li>
|
|
<li Class="JobGiver_AITrashColonyClose" />
|
|
<li Class="JobGiver_AITrashBuildingsDistant" />
|
|
<li Class="JobGiver_AIGotoNearestHostile" />
|
|
<li Class="JobGiver_AITrashBuildingsDistant">
|
|
<attackAllInert>true</attackAllInert>
|
|
</li>
|
|
<li Class="JobGiver_WanderAnywhere" />
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
<!-- 特殊处理——如果生产者被征召会跟随pawn -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<subNodes>
|
|
<li Class="ArachnaeSwarm.ThinkNode_ConditionalShouldFollowProducer">
|
|
<subNodes>
|
|
<!-- <li Class="ArachnaeSwarm.JobGiver_AIDefendProducer">
|
|
<attackMeleeThreatEvenIfNotHostile>true</attackMeleeThreatEvenIfNotHostile>
|
|
<defendRadius>100</defendRadius>
|
|
</li> -->
|
|
<!-- Keep distance -->
|
|
<li Class="JobGiver_FleeForDistance">
|
|
<enemyDistToFleeRange>2.9~7.9</enemyDistToFleeRange>
|
|
<fleeDistRange>13.5~20</fleeDistRange>
|
|
</li>
|
|
<!-- React to close melee threat -->
|
|
<li Class="JobGiver_ReactToCloseMeleeThreat">
|
|
<maxDistance>2.9</maxDistance>
|
|
</li>
|
|
<!-- Fire spikes at distant enemies -->
|
|
<li Class="JobGiver_AIAbilityFight">
|
|
<targetAcquireRadius>65</targetAcquireRadius>
|
|
<targetKeepRadius>72</targetKeepRadius>
|
|
<skipIfCantTargetNow>false</skipIfCantTargetNow>
|
|
<ability>ARA_Locust_Needle_Fire</ability>
|
|
<allowTurrets>true</allowTurrets>
|
|
<needLOSToAcquireNonPawnTargets>true</needLOSToAcquireNonPawnTargets>
|
|
</li>
|
|
<li Class="ArachnaeSwarm.JobGiver_AIFollowProducer"/>
|
|
<li Class="ArachnaeSwarm.JobGiver_WanderNearProducer"/>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Take care of critical needs (below rescue - so heroic!)-->
|
|
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>RestingForMedicalReasons</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_PatientGoToBed"/>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_SeekAllowedArea"/>
|
|
<li Class="JobGiver_SeekSafeTemperature"/>
|
|
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Satisfy basic needs -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>SatisfyBasicNeeds</treeDef>
|
|
</li>
|
|
|
|
<!-- Tame animal: wander near colony if possible -->
|
|
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_SeekAllowedArea"/>
|
|
<!-- Wander near your current position if in hostile map -->
|
|
<li Class="ThinkNode_ConditionalAnyEnemyInHostileMap">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_ConditionalRoamer">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderInRoofedCellsInPen">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
<expiryInterval>1200</expiryInterval>
|
|
</li>
|
|
|
|
<!-- tame roamers should not wander too far, and if unenclosed wander near a suitable pen marker 10% of the time -->
|
|
<li Class="ThinkNode_ConditionalRandom">
|
|
<chance>0.1</chance>
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderInPen">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
<expiryInterval>1200</expiryInterval>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Wander near colony -->
|
|
<li Class="JobGiver_WanderColony">
|
|
<maxDanger>None</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Of neutral faction: rest and then exit the map -->
|
|
<li Class="ThinkNode_ConditionalNonPlayerNonHostileFaction">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>RestingForMedicalReasons</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_PatientGoToBed" />
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapBest">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Wander -->
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalHerdAnimal">
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderHerd">
|
|
<maxDanger>Deadly</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>Deadly</maxDanger>
|
|
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_IdleError"/>
|
|
</subNodes>
|
|
</thinkRoot>
|
|
</ThinkTreeDef>
|
|
|
|
<ThinkTreeDef>
|
|
<defName>ARA_Humanlike</defName> <!-- 更改defName以避免与原版Humanlike冲突 -->
|
|
<thinkRoot Class="ThinkNode_Priority">
|
|
<subNodes>
|
|
|
|
<!-- Do lovin' -->
|
|
<li Class="ThinkNode_ConditionalLyingDown">
|
|
<subNodes>
|
|
<li Class="ThinkNode_ChancePerHour_Lovin">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>SatisfyingNeeds</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_DoLovin" />
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- If we HAVE to keep lying down... -->
|
|
<li Class="ThinkNode_ConditionalMustKeepLyingDown">
|
|
<subNodes>
|
|
<!-- Do a queued job if possible (e.g. watch tv in bed) -->
|
|
<li Class="ThinkNode_QueuedJob">
|
|
<inBedOnly>true</inBedOnly>
|
|
</li>
|
|
|
|
<!-- Get joy -->
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>SatisfyingNeeds</tagToGive>
|
|
<subNodes>
|
|
<li Class="ThinkNode_PrioritySorter">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Priority_GetJoy">
|
|
<subNodes>
|
|
<li Class="JobGiver_GetJoyInBed" />
|
|
</subNodes>
|
|
</li>
|
|
<li Class="JobGiver_MeditateInBed"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Keep lying down -->
|
|
<li Class="JobGiver_KeepLyingDown" />
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>Downed</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>BurningResponse</treeDef>
|
|
</li>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>MentalStateCritical</treeDef>
|
|
</li>
|
|
|
|
<!-- Escaping threats -->
|
|
<li Class="ThinkNode_Subtree" MayRequire="Ludeon.RimWorld.Biotech">
|
|
<treeDef>Abilities_Escape</treeDef>
|
|
</li>
|
|
|
|
<!-- React to close melee threat -->
|
|
<li Class="JobGiver_ReactToCloseMeleeThreat" />
|
|
|
|
<!-- Mental state non critical -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>MentalStateNonCritical</treeDef>
|
|
</li>
|
|
|
|
<!-- Behavior when roped -->
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>RopedPawn</treeDef>
|
|
</li>
|
|
|
|
<!-- Insertion hook for modders -->
|
|
<li Class="ThinkNode_SubtreesByTag">
|
|
<insertTag>Humanlike_PostMentalState</insertTag>
|
|
</li>
|
|
|
|
<!-- Do a queued job -->
|
|
<li Class="ThinkNode_QueuedJob" />
|
|
|
|
<!-- Wait if drafted -->
|
|
<li Class="ThinkNode_ConditionalColonist">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>DraftedOrder</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_MoveToStandable" />
|
|
<li Class="JobGiver_Orders" />
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Self-tend if you're an NPC -->
|
|
<li Class="ThinkNode_ConditionalNPCCanSelfTendNow">
|
|
<subNodes>
|
|
<li Class="JobGiver_SelfTend" />
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Lord directives (high priority) -->
|
|
<li Class="ThinkNode_JoinVoluntarilyJoinableLord">
|
|
<dutyHook>HighPriority</dutyHook>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LordDuty</treeDef>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Insertion hook for modders -->
|
|
<li Class="ThinkNode_SubtreesByTag">
|
|
<insertTag>Humanlike_PostDuty</insertTag>
|
|
</li>
|
|
|
|
<!-- Prisoner -->
|
|
<li Class="ThinkNode_ConditionalPrisoner">
|
|
<leaveJoinableLordIfIssuesJob>true</leaveJoinableLordIfIssuesJob>
|
|
<subNodes>
|
|
<!-- If it's the player home map... -->
|
|
<li Class="ThinkNode_ConditionalInNonPlayerHomeMap">
|
|
<invert>true</invert>
|
|
<subNodes>
|
|
<!-- Wait instead of escaping if should -->
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_PrisonerWaitInsteadOfEscaping">
|
|
<maxDanger>Deadly</maxDanger>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Escape -->
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Escaping</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_PrisonerEscape" />
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Exit map if released -->
|
|
<li Class="ThinkNode_ConditionalReleased">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapBest">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>RestingForMedicalReasons</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_PatientGoToBed" />
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>ChangingApparel</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_PrisonerGetDressed" />
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>SatisfyingNeeds</tagToGive>
|
|
<subNodes>
|
|
<li Class="ThinkNode_PrioritySorter">
|
|
<subNodes>
|
|
<li Class="JobGiver_Autofeed" MayRequire="Ludeon.RimWorld.Biotech" />
|
|
<li Class="JobGiver_GetFood"/>
|
|
<li Class="JobGiver_GetRest"/>
|
|
<li Class="JobGiver_SatisfyChemicalNeed"/>
|
|
<li Class="JobGiver_SatifyChemicalDependency" MayRequire="Ludeon.RimWorld.Biotech" />
|
|
<li Class="JobGiver_GetHemogen" MayRequire="Ludeon.RimWorld.Biotech" />
|
|
<li Class="JobGiver_GetDeathrest" MayRequire="Ludeon.RimWorld.Biotech" />
|
|
<li Class="ThinkNode_Priority_GetJoy">
|
|
<subNodes>
|
|
<li Class="JobGiver_GetJoy"/>
|
|
<li Class="JobGiver_GetJoyInBed"/>
|
|
</subNodes>
|
|
</li>
|
|
<li Class="JobGiver_Meditate"/>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- If in non-PlayerHomeMap -->
|
|
<li Class="ThinkNode_ConditionalInNonPlayerHomeMap">
|
|
<subNodes>
|
|
<!-- No colonist spawned in the map -->
|
|
<li Class="ThinkNode_ConditionalAnyUndownedColonistSpawnedNearby">
|
|
<invert>true</invert>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Escaping</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_PrisonerEscape" />
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
<!-- Wander -->
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderColony">
|
|
<maxDanger>Deadly</maxDanger>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderCurrentRoom">
|
|
<maxDanger>Deadly</maxDanger>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_IdleError" />
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- If on colonist team, do forced and emergency work -->
|
|
<li Class="ThinkNode_ConditionalColonist">
|
|
<subNodes>
|
|
<!-- Seek allowed area -->
|
|
<li Class="JobGiver_SeekAllowedArea" />
|
|
|
|
<!-- Seek safe temperatures -->
|
|
<li Class="JobGiver_BringBabyToSafety" />
|
|
<li Class="JobGiver_SeekSafeTemperature" />
|
|
|
|
<!-- Drop unnused inventory -->
|
|
<li Class="JobGiver_DropUnusedInventory" />
|
|
|
|
<!-- Emergency work -->
|
|
<li Class="JobGiver_Work">
|
|
<leaveJoinableLordIfIssuesJob>true</leaveJoinableLordIfIssuesJob>
|
|
<emergency>true</emergency>
|
|
</li>
|
|
|
|
<!-- Get food (only if starving) -->
|
|
<li Class="ThinkNode_ConditionalStarving">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>SatisfyingNeeds</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_GetFood">
|
|
<leaveJoinableLordIfIssuesJob>true</leaveJoinableLordIfIssuesJob>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Breastfeed -->
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_Autofeed" MayRequire="Ludeon.RimWorld.Biotech" />
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Lord directives (medium priority) -->
|
|
<li Class="ThinkNode_JoinVoluntarilyJoinableLord">
|
|
<dutyHook>MediumPriority</dutyHook>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>LordDuty</treeDef>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Pick up a weapon dropped while previously downed -->
|
|
<li Class="JobGiver_PickupDroppedWeapon">
|
|
<ignoreForbidden>true</ignoreForbidden>
|
|
</li>
|
|
|
|
<!-- Optimize apparel -->
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>ChangingApparel</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_OptimizeApparel">
|
|
<leaveJoinableLordIfIssuesJob>true</leaveJoinableLordIfIssuesJob>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Look change -->
|
|
<li MayRequire="Ludeon.RimWorld.Ideology" Class="ThinkNode_ConditionalWantsLookChange">
|
|
<subNodes>
|
|
<li Class="JobGiver_UseStylingStationAutomatic" />
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Dye hair -->
|
|
<li MayRequire="Ludeon.RimWorld.Ideology" Class="JobGiver_DyeHair" />
|
|
|
|
<!-- Take for inventory stock -->
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>TakeForInventoryStock</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_TakeForInventoryStock">
|
|
<leaveJoinableLordIfIssuesJob>true</leaveJoinableLordIfIssuesJob>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Unload your inventory -->
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>UnloadingOwnInventory</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_UnloadYourInventory" />
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Pack food if not hungry-->
|
|
<li Class="ThinkNode_ConditionalNeedPercentageAbove">
|
|
<need>Food</need>
|
|
<threshold>0.6</threshold>
|
|
<subNodes>
|
|
<li Class="JobGiver_PackFood">
|
|
<leaveJoinableLordIfIssuesJob>true</leaveJoinableLordIfIssuesJob>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Behavior from traits -->
|
|
<li Class="ThinkNode_TraitBehaviors" />
|
|
|
|
<!-- Insertion hook for modders -->
|
|
<li Class="ThinkNode_SubtreesByTag">
|
|
<insertTag>Humanlike_PreMain</insertTag>
|
|
</li>
|
|
|
|
<!-- Main colonist behavior core -->
|
|
<li Class="ThinkNode_ConditionalColonist">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>MainColonistBehaviorCore</treeDef>
|
|
<leaveJoinableLordIfIssuesJob>true</leaveJoinableLordIfIssuesJob>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Main wild man behavior core -->
|
|
<li Class="ThinkNode_ConditionalPawnKind">
|
|
<pawnKind>WildMan</pawnKind>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Subtree">
|
|
<treeDef>MainWildManBehaviorCore</treeDef>
|
|
<leaveJoinableLordIfIssuesJob>true</leaveJoinableLordIfIssuesJob>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Insertion hook for modders -->
|
|
<li Class="ThinkNode_SubtreesByTag">
|
|
<insertTag>Humanlike_PostMain</insertTag>
|
|
</li>
|
|
|
|
<!-- Idle colonist -->
|
|
<li Class="ThinkNode_ConditionalColonist">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<!-- Do random joy activity -->
|
|
<li Class="ThinkNode_ConditionalNeedPercentageAbove">
|
|
<need>Joy</need>
|
|
<threshold>0.9</threshold>
|
|
<invert>true</invert>
|
|
<subNodes>
|
|
<li Class="JobGiver_IdleJoy" />
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Wander -->
|
|
<li Class="JobGiver_WanderColony">
|
|
<maxDanger>None</maxDanger>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Idle wild man -->
|
|
<li Class="ThinkNode_ConditionalPawnKind">
|
|
<pawnKind>WildMan</pawnKind>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<!-- Wander -->
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>Deadly</maxDanger>
|
|
<ticksBetweenWandersRange>120~240</ticksBetweenWandersRange>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- If you're a neutral guest, if you're not hurt exit the map, otherwise use a medical bed -->
|
|
<li Class="ThinkNode_ConditionalGuest">
|
|
<subNodes>
|
|
<li Class="ThinkNode_ConditionalNonPlayerNonHostileFactionOrFactionless">
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>RestingForMedicalReasons</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_PatientGoToBed" />
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapBest">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- Final backup: If you're just here for no apparent reason, and not a colonist, leave the map
|
|
e.g. This happens for pawns who are downed during combat, then later self-heal -->
|
|
<li Class="ThinkNode_ConditionalColonist">
|
|
<invert>true</invert>
|
|
<subNodes>
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Misc</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_ExitMapBest">
|
|
<defaultLocomotion>Walk</defaultLocomotion>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<!-- If you can't leave, just wander -->
|
|
<li Class="ThinkNode_Tagger">
|
|
<tagToGive>Idle</tagToGive>
|
|
<subNodes>
|
|
<li Class="JobGiver_WanderAnywhere">
|
|
<maxDanger>Deadly</maxDanger>
|
|
</li>
|
|
</subNodes>
|
|
</li>
|
|
|
|
<li Class="JobGiver_IdleError" />
|
|
</subNodes>
|
|
</thinkRoot>
|
|
</ThinkTreeDef>
|
|
</Defs> |