- type: entity
  save: false
  id: NFMobAtmos
  abstract: true
  components:
  - type: Temperature
    heatDamageThreshold: 2000 # Should prevent mobs from taking damage on planets with extreme heat
    coldDamageThreshold: -250 # Should make mobs immune to cold planets
    currentTemperature: 310.15
    coldDamage: #per second, scales with temperature & other constants
      types:
        Cold: 0.1
    specificHeat: 42
    heatDamage: #per second, scales with temperature & other constants
      types:
        Heat: 1.5
  - type: ThermalRegulator
    metabolismHeat: 800
    radiatedHeat: 100
    implicitHeatRegulation: 500
    sweatHeatRegulation: 2000
    shiveringHeatRegulation: 2000
    normalBodyTemperature: 310.15
    thermalRegulationTemperatureThreshold: 25
  - type: MovedByPressure
  - type: Insulated

- type: entity
  save: false
  id: MobPassiveRegenWeak
  abstract: true
  components:
  - type: PassiveDamage
    allowedStates:
    - Alive
    damageCap: 500
    damage:
      groups:
        Brute: -0.5
        Burn: -0.5
        Airloss: -1

- type: entity
  save: false
  id: MobPassiveRegen
  abstract: true
  components:
  - type: PassiveDamage
    allowedStates:
    - Alive
    - Critical
    damageCap: 500
    damage:
      groups:
        Brute: -0.5
        Burn: -0.5
        Airloss: -1

- type: entity
  save: false
  id: MobPassiveRegenStrong
  abstract: true
  components:
  - type: PassiveDamage
    allowedStates:
    - Alive
    - Critical
    - Dead
    damageCap: 9999
    damage:
      groups:
        Brute: -0.5
        Burn: -0.5
        Airloss: -1

- type: entity
  save: false
  id: MobLaserReflect
  abstract: true
  components:
  - type: Reflect
    reflectProb: 0.8
    reflects:
      - Energy

- type: entity
  abstract: true
  id: NFMobRestrictions
  components:
  - type: NFSalvageMobRestrictions
    addComponentsOnDeath:
    - type: Uncloneable
    - type: Unrevivable
    - type: Strippable
    - type: UserInterface
      interfaces:
        enum.StrippingUiKey.Key:
         type: StrippableBoundUserInterface
    removeComponentsOnDeath:
    - type: Insulated
    - type: Reflect
    - type: MovementIgnoreGravity
    - type: Tool
    - type: Prying
    - type: CanMoveInAir
    - type: Tag
    - type: Access
    - type: Timer
    - type: TimedSpawner
    - type: Advertise
      pack: FuelVendAds # placeholder, required field, unused
    - type: Jittering

- type: entity
  abstract: true
  id: NFMobBossRestrictions
  components:
  - type: NFSalvageMobRestrictions
    addComponentsLeaveGrid:
    - type: TimedDespawn
      lifetime: 15
    - type: PassiveDamage
      allowedStates:
      - Alive
      damage:
        types:
          Cellular: 1
    - type: Pacified
    removeComponentsReturnGrid:
    - type: TimedDespawn
    - type: PassiveDamage
    - type: Pacified

- type: entity
  abstract: true
  id: NFMobRestrictionsSilicon
  components:
  - type: NFSalvageMobRestrictions
    addComponentsOnDeath:
    - type: Strippable
    - type: UserInterface
      interfaces:
        enum.StrippingUiKey.Key:
         type: StrippableBoundUserInterface
    removeComponentsOnDeath:
#    - type: Pullable # TODO: This makes the mob stuck to your hand if it dies when you pull it
    - type: Carriable # Carrying system from nyanotrasen.
    - type: Tool
    - type: Prying
    - type: MovementIgnoreGravity
    - type: Access
    addComponentsOnRevival:
#    - type: Pullable # TODO: This makes the mob stuck to your hand if it dies when you pull it
    - type: Carriable # Carrying system from nyanotrasen.
    - type: Tool
      speedModifier: 3 # 1.5->3 Mono
      qualities:
        - Prying
    - type: Prying # Open door from xeno.yml.
      pryPowered: true
      force: true
      speedModifier: 3 # 1.5->3 - Mono
      useSound:
        path: /Audio/Items/crowbar.ogg
    - type: MovementIgnoreGravity
    removeComponentsOnRevival:
    - type: Strippable
    - type: UserInterface

- type: entity
  abstract: true
  id: NFMobTimedDespawn30
  components:
  - type: TimedDespawn
    lifetime: 30

- type: entity
  abstract: true
  id: NFMobTimedDespawn60
  components:
  - type: TimedDespawn
    lifetime: 60

- type: entity
  abstract: true
  id: NFMobTimedDespawn80
  components:
  - type: TimedDespawn
    lifetime: 80

- type: entity
  abstract: true
  id: NFMobTimedDespawn120
  components:
  - type: TimedDespawn
    lifetime: 120

- type: entity
  abstract: true
  id: NFMobTimedDespawn180
  components:
  - type: TimedDespawn
    lifetime: 180

- type: entity
  abstract: true
  id: NFMobTimedDespawn1200
  components:
  - type: TimedDespawn
    lifetime: 1200

- type: entity
  abstract: true
  id: NFMobTimedDespawn1800
  components:
  - type: TimedDespawn
    lifetime: 1800

- type: entity
  abstract: true
  id: NFMobTimedDespawn3000
  components:
  - type: TimedDespawn
    lifetime: 3000

- type: entity
  save: false
  id: MobEnhancedMovement
  abstract: true
  components:
  - type: Climbing

- type: entity
  save: false
  id: MobStepTriggerImmune
  abstract: true
  components:
  - type: ProtectedFromStepTriggers

- type: entity
  save: false
  id: MobPrying
  abstract: true
  components:
  - type: Tool
    speedModifier: 3 # 1.5->3 Mono
    qualities:
      - Prying
    hideQualities: true
  - type: Prying
    pryPowered: true
    force: true
    speedModifier: 3 # 1.5->3 Mono
    useSound:
      path: /Audio/Items/crowbar.ogg
#  - type: Access
#    groups:
#    - AllAccess

# Dungeon boss
- type: entity
  id: MobHostileBossBase
  abstract: true
  parent:
  - MobEnhancedMovement
  - MobPrying
  - MobStepTriggerImmune
  - MobPassiveRegenWeak
  - NFMobRestrictions
  components:
  - type: Hands
  - type: Puller
  - type: Stamina
    critThreshold: 999
  - type: Tag
    tags:
    - CanPilot
    - FootstepSound
    - DoorBumpOpener
    - CannotSuicide
  - type: FTLKnockdownImmune

# Inventories
- type: entity # All slots are fillable, most of them are "hidden"
  save: false
  id: MobHumanoidInvetory
  abstract: true
  components:
  - type: Inventory
    templateId: hostilehumanoid # Supports loadouts
  - type: InventorySlots

- type: entity # Slots for loot containers: pockets, belt, back
  save: false
  id: MobHumanoidInvetorySimplified
  abstract: true
  components:
  - type: Inventory
    templateId: hostilehumanoidsimplified # Does not support loadouts
  - type: InventorySlots

# AI packages
- type: entity
  id: MobHumanoidHostileAISimpleMelee
  abstract: true
  components:
  - type: HTN
    rootTask:
       task: SimpleHostileCompound
    blackboard:
      NavClimb: !type:Bool
        false
      NavInteract: !type:Bool
        true
      NavPry: !type:Bool
        true
      NavSmash: !type:Bool # They use this option too much for my liking, but I'll keep it here as an option
        true

- type: entity
  id: MobHumanoidHostileAISimpleRanged
  abstract: true
  components:
  - type: HTN
    rootTask:
       task: SimpleRangedHostileCompound
    blackboard:
      NavClimb: !type:Bool
        false
      NavInteract: !type:Bool
        true
      NavPry: !type:Bool
        true
      NavSmash: !type:Bool # They use this option too much for my liking, but I'll keep it here as an option
        true

- type: entity
  id: MobHumanoidHostileAIComplex
  abstract: true
  components:
  - type: HTN
    rootTask:
       task: SimpleHumanoidHostileCompound
    blackboard:
      NavClimb: !type:Bool
        false
      NavInteract: !type:Bool
        true
      NavPry: !type:Bool
        true
#      NavSmash: !type:Bool # They use this option too much for my liking, but I'll keep it here as an option
#        true

# Human NPC, uses equipment, immune to vacuum/low pressure
- type: entity
  suffix: AI, Hostile
  abstract: true
  parent:
  - NFMobAtmos
  - MobBloodstream
  - MobFlammable
  - MobEnhancedMovement
  - MobPrying
  - MobStepTriggerImmune
  - BaseMobSpecies
  - MobHumanoidHostileAIComplex
  - BaseC3MobHuman
  id: MobHumanoidHostileBase
  components:
  - type: NPCRetaliation
    attackMemoryLength: 10
  - type: MobMover
  - type: StandingState
  - type: RandomHumanoidAppearance
    randomizeName: true
  - type: MobThresholds
    thresholds:
      0: Alive
      100: Critical
      140: Dead
  - type: Stamina
    critThreshold: 100
  - type: SlowOnDamage
    speedModifierThresholds:
      60: 0.7
      80: 0.5
  - type: Blindable
  - type: Butcherable
    butcheringType: Spike
    spawned:
    - id: FoodMeatHuman
      amount: 5
  - type: NpcFactionMember
    factions:
    - SimpleHostile
  - type: Carriable # Carrying system from nyanotrasen.
  - type: Advertise
    pack: syndicatehumanoidchatter
    minimumWait: 120 # 1 * 2
    maximumWait: 240 # 2 * 60
    nextAdvertisementTime: 0
  - type: FTLKnockdownImmune
  - type: Respirator
    updateInterval: 99999 # Shouldn't run often, if ever.
    suffocationThreshold: -100 # Should never happen.
    damage:
      types: {}
    damageRecovery:
      types: {}

# NonHuman NPC base, no equipment, immune to vacuum/low pressure
- type: entity
  suffix: AI, Hostile
  abstract: true
  parent:
  - BaseMob
  - MobDamageable
  - MobCombat
  - NFMobAtmos
  - MobBloodstream
  - MobFlammable
  - MobEnhancedMovement
  - MobPrying
  - MobHumanoidHostileAIComplex
  - BaseC3MobCreature
  id: MobNonHumanHostileBase
  components:
  - type: NPCRetaliation
    attackMemoryLength: 10
  - type: Reactive
    groups:
      Flammable: [Touch]
      Extinguish: [Touch]
      Acidic: [Touch, Ingestion]
  - type: StatusEffects
    allowed:
    - SlowedDown
    - Stutter
    - Electrocution
    - ForcedSleep
    - TemporaryBlindness
    - Pacified
    - Drowsiness
    - Adrenaline
  - type: Buckle
  - type: StandingState
  - type: InputMover
  - type: MobMover
  #- type: ZombieImmune # Mono
  - type: Hands
  - type: Puller
  - type: NameIdentifier
    group: GenericNumber
  - type: SlowOnDamage
    speedModifierThresholds:
      60: 0.7
      80: 0.5
  - type: MobState
    allowedStates:
    - Alive
    - Critical
    - Dead
  - type: MobThresholds
    thresholds:
      0: Alive
      80: Critical
      120: Dead
  - type: Stamina
    critThreshold: 100
  - type: NpcFactionMember
    factions:
    - SimpleHostile
  - type: Carriable # Carrying system from nyanotrasen.
  - type: Tag
    tags:
    - CanPilot
    - FootstepSound
    - DoorBumpOpener
    - CannotSuicide
  - type: FTLKnockdownImmune
  
# Mono edit - Faction overwriting fix
# A simpler base for extending existing mobs (e.g. carp, kangaroos, snakes, xenos)
- type: entity
  suffix: Frontier, Hostile
  abstract: true
  parent:
  - MobFlammable
  - MobEnhancedMovement
  - MobPrying
  - MobHumanoidHostileAISimpleMelee
  - BaseC3MobCreature
  id: NFMobFactionlessBase
  components:
  - type: NPCRetaliation
    attackMemoryLength: 10
  - type: Reactive
    groups:
      Flammable: [Touch]
      Extinguish: [Touch]
      Acidic: [Touch, Ingestion]
  - type: StatusEffects
    allowed:
    - SlowedDown
    - Stutter
    - Electrocution
    - ForcedSleep
    - TemporaryBlindness
    - Pacified
    - Drowsiness
    - Adrenaline
  #- type: ZombieImmune # Mono
  - type: NameIdentifier
    group: GenericNumber
  - type: Puller
  - type: Hands
  - type: Carriable # Kept for consistency with other mobs
  - type: FTLKnockdownImmune


- type: entity
  suffix: Frontier, Hostile
  abstract: true
  parent:
  - NFMobFactionlessBase
  id: NFMobSimpleHostileBase
  components:
  - type: NpcFactionMember
    factions:
    - SimpleHostile
# Mono edit end
