﻿<?xml version="1.0" encoding="utf-8" ?>
<Defs>

  <ThinkTreeDef>
    <defName>Humanlike</defName>
    <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="JobGiver_Autofeed" MayRequire="Ludeon.RimWorld.Biotech" />

            <!-- 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>

  <ThinkTreeDef>
    <defName>HumanlikeConstant</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" />

            <!-- Join auto joinable caravan -->
            <li Class="ThinkNode_Subtree">
              <treeDef>JoinAutoJoinableCaravan</treeDef>
            </li>

            <!-- Hostility response -->
            <li Class="JobGiver_ConfigurableHostilityResponse" />
          </subNodes>
        </li>

        <li Class="ThinkNode_ConditionalCanDoLordJobNow">
          <subNodes>
            <!-- Lord directives -->
            <li Class="ThinkNode_Subtree">
              <treeDef>LordDutyConstant</treeDef>
            </li>
          </subNodes>
        </li>
      </subNodes>
    </thinkRoot>
  </ThinkTreeDef>

</Defs>
