- type: entity
  name: bat
  parent: [ SimpleMobBase, FlyingMobBase, MobCombat ]
  id: MobBat
  description: Some cultures find them terrifying, others crunchy on the teeth.
  components:
  - type: MovementSpeedModifier
    baseWalkSpeed : 3
    baseSprintSpeed : 6
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: bat
      sprite: Mobs/Animals/bat.rsi
  - type: Speech
    speechSounds: Squeak
    speechVerb: SmallMob
    allowedEmotes: ['Squeak']
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.25
        density: 10
        mask:
        - FlyingMobMask
        layer:
        - FlyingMobLayer
  - type: DamageStateVisuals
    states:
      Alive:
        Base: bat
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 1
  - type: InteractionPopup
    successChance: 0.2
    interactSuccessString: petting-success-soft-floofy
    interactFailureString: petting-failure-bat
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/fox_squeak.ogg
  - type: SentienceTarget
    flavorKind: station-event-random-sentience-flavor-organic
  - type: Bloodstream
    bloodReferenceSolution:
      reagents:
      - ReagentId: Blood
        Quantity: 50
  - type: ReplacementAccent
    accent: mouse
  - type: MeleeWeapon
    soundHit:
        path: /Audio/Effects/bite.ogg
    angle: 0
    animation: WeaponArcBite
    damage:
      types:
        Piercing: 5
  - type: MobThresholds
    thresholds:
      0: Alive
      30: Critical
      60: Dead
  - type: Destructible
    thresholds:
    - trigger:
        !type:DamageTypeTrigger
        damageType: Blunt
        damage: 120
      behaviors:
      - !type:GibBehavior
        recursive: false
  - type: Tag
    tags:
    - VimPilot

- type: entity
  name: bee
  parent: [ SimpleMobBase, FlyingMobBase ]
  id: MobBee
  description: Nice to have, but you can't build a civilization on a foundation of honey alone.
  components:
  - type: CombatMode
  - type: MovementSpeedModifier
    baseWalkSpeed : 3
    baseSprintSpeed : 7
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: 0
      sprite: Mobs/Animals/bee.rsi
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.1
        density: 30
        mask:
        - FlyingMobMask
        layer:
        - FlyingMobLayer
  - type: MobState
  - type: MobThresholds
    thresholds:
      0: Alive
      10: Dead
  - type: Stamina
    baseCritThreshold: 10
    animationThreshold: 1
  - type: DamageStateVisuals
    states:
      Alive:
        Base: 0
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: Extractable
    grindableSolutionName: food
  - type: SolutionContainerManager
    solutions:
      food:
        reagents:
        - ReagentId: GroundBee
          Quantity: 1
  - type: Butcherable
    spawned:
    - id: null # Should give nothing when you butcher it so we set the item id it needs to spawn to null
  - type: Item
    size: Tiny
  - type: Tag
    tags:
    - Bee
    - Trash
  - type: Bloodstream
    bloodReferenceSolution:
      reagents:
      - ReagentId: InsectBlood
        Quantity: 0.1
  - type: MobPrice
    price: 50
  - type: NPCRetaliation
  - type: FactionException
  - type: NpcFactionMember
    factions:
    - Passive
  - type: HTN
    rootTask:
      task: SimpleHostileCompound
  - type: ZombieImmune
  - type: Destructible
    thresholds:
    - trigger:
        !type:DamageTypeTrigger
        damageType: Blunt
        damage: 20
      behaviors:
      - !type:GibBehavior
        recursive: false

- type: entity
  name: bee
  suffix: Angry
  parent: [ MobBee, MobCombat ]
  id: MobAngryBee
  description: How nice a bee. Oh no, it looks angry and wants my pizza.
  components:
  - type: CombatMode
  - type: MeleeWeapon
    angle: 0
    animation: WeaponArcBite
    damage:
      types:
        Poison: 2
        Piercing: 1
  - type: InputMover
  - type: MobMover
  - type: HTN
    rootTask:
      task: SimpleHostileCompound
  - type: NpcFactionMember
    factions:
    - SimpleHostile
  - type: Bloodstream
    bloodReferenceSolution:
      reagents:
      - ReagentId: Blood
        Quantity: 0.1
  - type: ZombieImmune


- type: entity
  name: chicken
  parent: SimpleMobBase
  id: MobChicken
  description: Comes before an egg, and IS a dinosaur!
  components:
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base", "movement"]
      state: chicken-0
      sprite: Mobs/Animals/chicken.rsi
  - type: SpriteMovement
    movementLayers:
      movement:
        state: chicken-moving-0
    noMovementLayers:
      movement:
        state: chicken-0
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 8
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Speech
    speechVerb: SmallMob
    speechSounds: Cluck
  - type: Tag
    tags:
    - DoorBumpOpener
    - Chicken
    - VimPilot
  - type: Reproductive
    breedChance: 0.05
    birthPopup: reproductive-laid-egg-popup
    makeOffspringInfant: false
    partnerWhitelist:
      tags:
      - Chicken
    offspring:
    - id: FoodEggChickenFertilized
      maxAmount: 3
  - type: ReproductivePartner
  - type: Appearance
  - type: DamageStateVisuals
    states:
      Alive:
        Base: chicken-0
      Critical:
        Base: dead-0
      Dead:
        Base: dead-0
  - type: Butcherable
    spawned:
    - id: FoodMeatChicken
      amount: 1
  - type: InteractionPopup
    successChance: 0.8
    interactSuccessString: petting-success-bird
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/chicken_cluck_happy.ogg
  - type: Bloodstream
    bloodReferenceSolution:
      reagents:
      - ReagentId: Blood
        Quantity: 100
  - type: EggLayer
    eggSpawn:
    - id: FoodEgg
  - type: ExaminableHunger
  - type: ReplacementAccent
    accent: chicken
  - type: SentienceTarget
    flavorKind: station-event-random-sentience-flavor-organic
  - type: NpcFactionMember
    factions:
    - Passive

- type: entity
  parent: MobChicken
  id: MobChicken1
  components:
  - type: Sprite
    layers:
    - map: ["enum.DamageStateVisualLayers.Base", "movement"]
      state: chicken-1
      sprite: Mobs/Animals/chicken.rsi
  - type: SpriteMovement
    movementLayers:
      movement:
        state: chicken-moving-1
    noMovementLayers:
      movement:
        state: chicken-1
  - type: DamageStateVisuals
    states:
      Alive:
        Base: chicken-1
      Critical:
        Base: dead-1
      Dead:
        Base: dead-1

- type: entity
  parent: MobChicken
  id: MobChicken2
  components:
  - type: Sprite
    layers:
    - map: ["enum.DamageStateVisualLayers.Base", "movement"]
      state: chicken-2
      sprite: Mobs/Animals/chicken.rsi
  - type: SpriteMovement
    movementLayers:
      movement:
        state: chicken-moving-2
    noMovementLayers:
      movement:
        state: chicken-2
  - type: DamageStateVisuals
    states:
      Alive:
        Base: chicken-2
      Critical:
        Base: dead-2
      Dead:
        Base: dead-2

- type: entity
  id: FoodEggChickenFertilized
  parent: FoodEgg
  suffix: Fertilized, Chicken
  components:
  - type: Timer
  - type: TimedSpawner
    prototypes:
    - MobChicken
    - MobChicken1
    - MobChicken2
    intervalSeconds: 20
    minimumEntitiesSpawned: 1
    maximumEntitiesSpawned: 1
  - type: TimedDespawn #delete the egg after the chicken spawns
    lifetime: 21

- type: entity
  name: cockroach
  parent: SimpleMobBase
  id: MobCockroach
  description: This station is just crawling with bugs.
  components:
  - type: Sprite
    drawdepth: SmallMobs
    sprite: Mobs/Animals/cockroach.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: cockroach
  - type: Item
    size: Tiny
  - type: HTN
    constantlyReplan: false
    rootTask:
      task: MouseCompound
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.2
        density: 100
        mask:
        - SmallMobMask
        layer:
        - SmallMobLayer
  - type: MobState
  - type: MobThresholds
    thresholds:
      0: Alive
      1: Dead
  - type: MovementSpeedModifier
    baseWalkSpeed : 2.5
    baseSprintSpeed : 5
  - type: DamageStateVisuals
    states:
      Alive:
        Base: cockroach
      Critical:
        Base: cockroach_dead
      Dead:
        Base: cockroach_dead
  - type: Bloodstream
    bloodReferenceSolution:
      reagents:
      - ReagentId: InsectBlood
        Quantity: 20
  - type: Edible
  - type: FlavorProfile
    flavors:
    - horrible
    - terrible
    - chewy
  - type: Hunger
    baseDecayRate: 0.25
  - type: Extractable
    grindableSolutionName: food
  - type: SolutionContainerManager
    solutions:
      food:
        reagents:
        - ReagentId: Slime
          Quantity: 5
  - type: Butcherable
    spawned:
    - id: FoodMeatSlime
  - type: Damageable
    damageContainer: Biological
    damageModifierSet: Cockroach
  - type: Tag
    tags:
    - Trash
    - VimPilot
  - type: Destructible
    thresholds:
    - trigger:
        !type:DamageTypeTrigger
        damageType: Blunt
        damage: 10
      behaviors:
      - !type:GibBehavior
        recursive: false
  - type: NonSpreaderZombie
  - type: StepTrigger
    requiredTriggeredSpeed: 1
  - type: TriggerOnStepTrigger
  - type: RandomChanceTriggerCondition
    successChance: 0.2
  - type: GibOnTrigger
  - type: ProtectedFromStepTriggers
  - type: MeleeWeapon
    soundHit:
      path: /Audio/Effects/bite.ogg
    angle: 0
    animation: WeaponArcBite
    damage:
      types:
        Piercing: 0

- type: entity
  name: glockroach
  parent: MobCockroach
  suffix: Admeme
  id: MobGlockroach
  description: This station is just crawling with bu- OH GOD THAT COCKROACH HAS A GUN!!!
  components:
  - type: Sprite
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: glockroach
  - type: Gun
    fireRate: 2
    useKey: false
    selectedMode: SemiAuto
    availableModes:
      - SemiAuto
    soundGunshot: /Audio/Weapons/Guns/Gunshots/pistol.ogg
  - type: BallisticAmmoProvider
    proto: CartridgeCaselessRifle
    capacity: 500
  - type: CombatMode
  - type: HTN
    rootTask:
      task: GlockroachCompound
  - type: NpcFactionMember
    factions:
    - SimpleHostile
  - type: Butcherable
    spawned:
    - id: FoodMeatSlime

- type: entity
  name: mothroach
  parent: MobCockroach
  id: MobMothroach
  description: This is the adorable by-product of multiple attempts at genetically mixing mothpeople with cockroaches.
  components:
  - type: GhostRole
    makeSentient: true
    allowSpeech: true
    allowMovement: true
    name: ghost-role-information-mothroach-name
    description: ghost-role-information-mothroach-description
    rules: ghost-role-information-freeagent-rules
    mindRoles:
    - MindRoleGhostRoleFreeAgentHarmless
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.2
        density: 120
        mask:
        - SmallMobMask
        layer:
        - SmallMobLayer
  - type: GhostTakeoverAvailable
  - type: Speech
    speechVerb: Moth
    speechSounds: Squeak
    allowedEmotes: ['Chitter', 'Squeak']
  - type: FaxableObject
    insertingState: inserting_mothroach
  - type: MothAccent
  - type: Sprite
    sprite: Mobs/Animals/mothroach/mothroach.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base", "movement"]
      state: mothroach
  - type: SpriteMovement
    movementLayers:
      movement:
        state: mothroach-moving
    noMovementLayers:
      movement:
        state: mothroach
  - type: Item
    size: Normal
  - type: Clothing
    quickEquip: false
    sprite: Mobs/Animals/mothroach/mothroach.rsi
    equippedPrefix: 0
    slots:
    - HEAD
  - type: Appearance
  - type: DamageStateVisuals
    states:
      Alive:
        Base: mothroach
      Critical:
        Base: mothroach_dead
      Dead:
        Base: mothroach_dead
  - type: MobThresholds
    thresholds:
      0: Alive
      40: Critical
      60: Dead
  - type: MovementSpeedModifier
    baseWalkSpeed : 2.5
    baseSprintSpeed : 4
    weightlessAcceleration: 1.5
    weightlessFriction: 1
    baseWeightlessModifier: 1
  - type: Damageable
    damageContainer: Biological
    damageModifierSet: Moth
  - type: Bloodstream
    bloodReferenceSolution:
      reagents:
      - ReagentId: InsectBlood
        Quantity: 20
  - type: Respirator
    damage:
      types:
        Asphyxiation: 0.5
    damageRecovery:
      types:
        Asphyxiation: -0.5
  - type: CombatMode
  - type: Butcherable
    spawned:
    - id: FoodMeatSlime
      amount: 2
  - type: Extractable
    grindableSolutionName: food
  - type: ReplacementAccent
    accent: mothroach
  - type: ZombieAccentOverride
    accent: zombieMoth
  - type: Vocal
    sounds:
      Male: UnisexMoth
      Female: UnisexMoth
      Unsexed: UnisexMoth
    wilhelmProbability: 0.001
  - type: MobPrice
    price: 150
  - type: Tag
    tags:
    - Trash
    - CannotSuicide
    - VimPilot
  - type: CanEscapeInventory
  - type: NpcFactionMember
    factions:
    - Mouse
  - type: Body
    prototype: Mothroach
  - type: TypingIndicator
    proto: moth
  - type: Destructible
    thresholds:
    - trigger:
        !type:DamageTypeTrigger
        damageType: Blunt
        damage: 60
      behaviors:
      - !type:GibBehavior
        recursive: false
  - type: FireVisuals
    sprite: Mobs/Effects/onfire.rsi
    normalState: Mouse_burning
  - type: Strippable
  - type: UserInterface
    interfaces:
      enum.StrippingUiKey.Key:
        type: StrippableBoundUserInterface
  - type: InventorySlots
  - type: Inventory
    speciesId: hamster
    templateId: hamster
    displacements:
      head:
        sizeMaps:
          32:
            sprite: Mobs/Animals/mothroach/displacement.rsi
            state: head
      mask:
        sizeMaps:
          32:
            sprite: Mobs/Animals/mothroach/displacement.rsi
            state: mask
      suitstorage:
        sizeMaps:
          32:
            sprite: Mobs/Animals/mothroach/displacement.rsi
            state: suitstorage
      eyes:
        sizeMaps:
          32:
            sprite: Mobs/Animals/mothroach/displacement.rsi
            state: eyes
      neck:
        sizeMaps:
          32:
            sprite: Mobs/Animals/mothroach/displacement.rsi
            state: neck


# Note that the mallard duck is actually a male drake mallard, with the brown duck being the female variant of the same species, however ss14 lacks sex specific textures
# The white duck is more akin to a pekin or call duck.

- type: entity
  name: mallard duck #Quack
  parent: SimpleMobBase
  id: MobDuckMallard
  description: An adorable mallard duck, it's fluffy and soft!
  components:
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: duck-0
    sprite: Mobs/Animals/duck.rsi
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 5 #They actually are pretty light, I looked it up
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Tag
    tags:
    - DoorBumpOpener
    - Duck
    - VimPilot
  - type: Reproductive
    breedChance: 0.05
    birthPopup: reproductive-laid-egg-popup
    makeOffspringInfant: false
    partnerWhitelist:
      tags:
      - Duck
    offspring:
    - id: FoodEggDuckFertilized
      maxAmount: 3
  - type: ReproductivePartner
  - type: Appearance
  - type: DamageStateVisuals
    states:
      Alive:
        Base: duck-0
      Critical:
        Base: dead-0
      Dead:
        Base: dead-0
  - type: Butcherable
    spawned:
    - id: FoodMeatDuck
      amount: 1
  - type: InteractionPopup
    successChance: 0.9
    interactSuccessString: petting-success-bird
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/duck_quack_happy.ogg
  - type: Bloodstream
    bloodReferenceSolution:
      reagents:
      - ReagentId: Blood
        Quantity: 100
  - type: EggLayer
    eggSpawn:
    - id: FoodEgg
  - type: ExaminableHunger
  - type: ReplacementAccent
    accent: duck
  - type: SentienceTarget
    flavorKind: station-event-random-sentience-flavor-organic
  - type: NpcFactionMember
    factions:
    - Passive

- type: entity
  name: white duck #Quack
  parent: MobDuckMallard
  id: MobDuckWhite
  description: An adorable white duck, it's fluffy and soft!
  components:
  - type: Sprite
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: duck-1
  - type: DamageStateVisuals
    states:
      Alive:
        Base: duck-1
      Critical:
        Base: dead-1
      Dead:
        Base: dead-1

- type: entity
  name: brown duck #Quack
  parent: MobDuckMallard
  id: MobDuckBrown
  description: An adorable brown duck, it's fluffy and soft!
  components:
  - type: Sprite
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: duck-2
  - type: DamageStateVisuals
    states:
      Alive:
        Base: duck-2
      Critical:
        Base: dead-2
      Dead:
        Base: dead-2

- type: entity
  id: FoodEggDuckFertilized
  parent: FoodEgg
  suffix: Fertilized, Duck
  components:
    - type: Timer
    - type: TimedSpawner
      prototypes:
      - MobDuckMallard
      - MobDuckWhite
      - MobDuckBrown
      intervalSeconds: 20
      minimumEntitiesSpawned: 1
      maximumEntitiesSpawned: 1
    - type: TimedDespawn #delete the egg after the chicken spawns
      lifetime: 21

- type: entity
  name: butterfly
  parent: [ SimpleMobBase, FlyingMobBase ]
  id: MobButterfly
  description: Despite popular misconceptions, it's not actually made of butter.
  components:
  - type: MovementSpeedModifier
    baseWalkSpeed : 3
    baseSprintSpeed : 6
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: butterfly
      sprite: Mobs/Animals/butterfly.rsi
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.2
        density: 7.5
        mask:
        - FlyingMobMask
        layer:
        - FlyingMobLayer
  - type: MobState
  - type: MobThresholds
    thresholds:
      0: Alive
      10: Dead
  - type: RandomSprite
    available:
      - enum.DamageStateVisualLayers.Base:
          butterfly: Rainbow
  - type: DamageStateVisuals
    states:
      Alive:
        Base: butterfly
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: Extractable
    grindableSolutionName: food
  - type: SolutionContainerManager
    solutions:
      food:
        reagents:
        - ReagentId: UncookedAnimalProteins
          Quantity: 1
  - type: Butcherable
    spawned:
    - id: null # Should give nothing when you butcher it so we set the item id it needs to spawn to null
  - type: Item
    size: Tiny
  - type: Tag
    tags:
    - Trash
  - type: Bloodstream
    bloodReferenceSolution:
      reagents:
      - ReagentId: InsectBlood
        Quantity: 0.1
  - type: MobPrice
    price: 50
  - type: Destructible
    thresholds:
    - trigger:
        !type:DamageTypeTrigger
        damageType: Blunt
        damage: 20
      behaviors:
      - !type:GibBehavior
        recursive: false
  - type: ZombieImmune

- type: entity
  name: cow
  parent: SimpleMobBase
  id: MobCow
  description: Moo.
  components:
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: cow
      sprite: Mobs/Animals/cow.rsi
  - type: Tag
    tags:
    - DoorBumpOpener
    - Cow
  - type: Reproductive
    partnerWhitelist:
      tags:
      - Cow
    offspring:
    - id: MobCow
  - type: ReproductivePartner
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.40
        density: 400
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: DamageStateVisuals
    states:
      Alive:
        Base: cow
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: SolutionContainerManager
    solutions:
      udder:
        maxVol: 250
        reagents:
        - ReagentId: Milk
          Quantity: 30
  - type: Udder
    reagentId: Milk
    quantityPerUpdate: 25
    growthDelay: 30
  - type: ExaminableHunger
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 5
  - type: Grammar
    attributes:
      gender: female # Here because of UdderComponent
  - type: InteractionPopup
    successChance: 0.7
    interactDelay: 2 # Avoids overlapping SFX due to spam - these SFX are a little longer than the typical 1 second.
    interactSuccessString: petting-success-soft-floofy
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/cow_moo.ogg
  - type: Perishable
    molsPerSecondPerUnitMass: 0.0015
  - type: NpcFactionMember
    factions:
    - Passive
  - type: Body
    prototype: AnimalRuminant
  - type: HTN
    rootTask:
      task: RuminantCompound
  - type: GuideHelp
    guides:
    - Chef
    - FoodRecipes

- type: entity
  name: crab
  parent: SimpleMobBase
  id: MobCrab
  description: A folk legend goes around that his claw snaps spacemen out of existence over distasteful remarks. Be polite and tolerant for your own safety.
  components:
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base", "movement"]
      state: crab
      sprite: Mobs/Animals/crab.rsi
  - type: SpriteMovement
    movementLayers:
      movement:
        state: crab-moving
    noMovementLayers:
      movement:
        state: crab
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 5
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Speech
    speechVerb: Arachnid
    speechSounds: Arachnid
    allowedEmotes: ['Click', 'Chitter']
  - type: DamageStateVisuals
    states:
      Alive:
        Base: crab
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: Butcherable
    spawned:
    - id: FoodMeatCrab
      amount: 2
  - type: InteractionPopup
    successChance: 0.5
    interactSuccessString: petting-success-crab
    interactFailureString: petting-failure-crab
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Voice/Arachnid/arachnid_chitter.ogg
  - type: ReplacementAccent
    accent: crab
  - type: Bloodstream
    bloodReferenceSolution:
      reagents:
      - ReagentId: CopperBlood
        Quantity: 50
  - type: Tag
    tags:
    - VimPilot
  - type: HTN
    rootTask:
      task: RuminantCompound
  - type: Body
    prototype: AnimalHemocyanin

- type: entity
  name: goat
  parent: SimpleMobBase
  id: MobGoat
  description: Her spine consists of long sharp segments, no wonder she is so grumpy.
  components:
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: goat
      sprite: Mobs/Animals/goat.rsi
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 150
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Tag
    tags:
    # let moths eat wool directly
    - ClothMade
    - DoorBumpOpener
    - Goat
  - type: Reproductive
    partnerWhitelist:
      tags:
      - Goat
    offspring:
    - id: MobGoat
  - type: ReproductivePartner
  - type: Appearance
  - type: DamageStateVisuals
    states:
      Alive:
        Base: goat
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: SolutionContainerManager
    solutions:
      udder:
        maxVol: 250
        reagents:
        - ReagentId: MilkGoat
          Quantity: 30
      wool:
        maxVol: 250
  - type: Udder
    reagentId: MilkGoat
    quantityPerUpdate: 25
    growthDelay: 20
  - type: ExaminableHunger
  - type: Wooly
  - type: Edible
    destroyOnEmpty: false
    solution: wool
    requiresSpecialDigestion: true
    requireDead: false
  - type: FlavorProfile
    flavors:
    - fiber
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 4
  - type: Grammar
    attributes:
      gender: female # Here because of UdderComponent
  - type: Speech
    speechSounds: Goat
    speechVerb: Goat
  - type: Vocal
    sounds:
      Female: Goat
      Male: Goat
      Unsexed: Goat
  - type: BleatingAccent
  - type: InteractionPopup
    successChance: 0.2
    interactSuccessString: petting-success-goat
    interactFailureString: petting-failure-goat
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/goat_bah.ogg
  - type: NpcFactionMember
    factions:
    - Passive
  - type: Body
    prototype: AnimalRuminant
  - type: NPCRetaliation
    attackMemoryLength: 5
  - type: FactionException
  - type: HTN
    rootTask:
      task: RuminantHostileCompound

# Note that we gotta make this bitch vomit someday when you feed it anthrax or sumthin. Needs to be a small item thief too and aggressive if attacked.
- type: entity
  name: goose
  parent: SimpleMobBase
  id: MobGoose
  description: Its stomach and mind are an enigma beyond human comprehension.
  components:
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: goose
      sprite: Mobs/Animals/goose.rsi
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 25
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: DamageStateVisuals
    states:
      Alive:
        Base: goose
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: Butcherable
    spawned:
    - id: FoodMeatChicken
      amount: 2
  - type: InteractionPopup # TODO: Make it so there's a separate chance to make certain animals outright hostile towards you.
    successChance: 0.1 # Yeah, good luck with that.
    interactSuccessString: petting-success-goose
    interactFailureString: petting-failure-goose
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/goose_honk.ogg
  - type: Bloodstream
    bloodReferenceSolution:
      reagents:
      - ReagentId: Blood
        Quantity: 100
  - type: NpcFactionMember
    factions:
    - Passive

- type: entity
  name: gorilla
  parent: [ SimpleMobBase, MobCombat ]
  id: MobGorilla
  description: Smashes, roars, looks cool. Don't stand near one.
  components:
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: crawling
      sprite: Mobs/Animals/gorilla.rsi
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.48
        density: 200
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: DamageStateVisuals
    states:
      Alive:
        Base: crawling
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 4
  - type: Bloodstream
    bloodReferenceSolution:
      reagents:
      - ReagentId: Blood
        Quantity: 300
    # if you fuck with the gorilla he will harambe you
  - type: MeleeWeapon
    soundHit:
      collection: Punch
    damage:
      types:
        Blunt: 20
    animation: WeaponArcFist
  - type: NPCRetaliation
  - type: FactionException
  - type: NpcFactionMember
    factions:
    - Passive
  - type: HTN
    rootTask:
      task: SimpleHostileCompound
    blackboard:
      NavClimb: !type:Bool
        true
      NavInteract: !type:Bool
        true
      NavPry: !type:Bool
        true
      NavSmash: !type:Bool
        true
  - type: Puller
    needsHands: false
  - type: Prying
    pryPowered: true
    force: true
    speedModifier: 1.5
    useSound:
      path: /Audio/Items/crowbar.ogg
  - type: MobThresholds
    thresholds:
      0: Alive
      200: Critical
      250: Dead

- type: entity
  name: kangaroo
  parent:
  - SimpleMobBase
  - MobCombat
  - StripableInventoryBase
  id: MobKangaroo
  description: A large marsupial herbivore. It has powerful hind legs, with nails that resemble long claws.
  components:
  - type: MovementSpeedModifier
    baseWalkSpeed: 3.5
    baseSprintSpeed: 4.5
  - type: Sprite
    drawdepth: Mobs
    layers:
      - map: ["enum.DamageStateVisualLayers.Base"]
        state: kangaroo
        sprite: Mobs/Animals/kangaroo.rsi
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 130
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Physics
  - type: Inventory
    speciesId: kangaroo
    templateId: kangaroo
  - type: ReplacementAccent
    accent: kangaroo
  - type: Butcherable
    spawned:
    - id: FoodMeat
  - type: DamageStateVisuals
    states:
      Alive:
        Base: kangaroo
      # SKIPPY NO!
      Critical:
        Base: kangaroo-crit
      Dead:
        Base: kangaroo-dead
  - type: Tag
    tags:
    - DoorBumpOpener
    - FootstepSound
  - type: GhostRole
    prob: 0.25
    name: ghost-role-information-kangaroo-name
    description: ghost-role-information-kangaroo-description
    rules: ghost-role-information-nonantagonist-rules
  - type: GhostTakeoverAvailable
  - type: Vocal
    sounds:
      Unsexed: Kangaroo
  - type: Puller
    needsHands: false
  - type: StaminaDamageOnHit
    damage: 8 #Stam damage values seem a bit higher than regular damage because of the decay, etc
    # This needs to be moved to boxinggloves
    #knockdownSound: /Audio/Weapons/boxingbell.ogg
  - type: MeleeWeapon
    attackRate: 1.5
    damage:
      types:
        Blunt: 0.4
    soundHit:
      collection: BoxingHit
    animation: WeaponArcFist
  - type: NPCRetaliation
    attackMemoryLength: 10
  - type: FactionException
  - type: NpcFactionMember
    factions:
    - Passive
  - type: HTN
    rootTask:
      task: SimpleHostileCompound

- type: entity
  name: boxing kangaroo
  parent: MobKangaroo
  id: MobBoxingKangaroo
  components:
  - type: Loadout
    prototypes: [ BoxingKangarooGear ]
  - type: NpcFactionMember
    factions:
    - SimpleHostile

- type: entity
  name: genetic ancestor
  id: MobBaseAncestor
  parent: [SimpleMobBase, StripableInventoryBase]
  description: The genetic bipedal ancestor of... Uh... Something. Yeah, there's definitely something on the station that descended from whatever this is.
  abstract: true
  components:
  - type: CombatMode
    canDisarm: true
  - type: Inventory
    templateId: monkey
    speciesId: monkey
  - type: Deathgasp
    prototype: MonkeyDeathgasp
  - type: Cuffable
  - type: RotationVisuals
    defaultRotation: 90
    horizontalRotation: 90
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 80
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Stripping
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: monkey
      sprite: Mobs/Animals/monkey.rsi
    - map: [ "jumpsuit" ]
    - map: [ "enum.HumanoidVisualLayers.Handcuffs" ]
      color: "#ffffff"
      sprite: Objects/Misc/handcuffs.rsi
      state: body-overlay-2
      visible: false
    - map: [ "ears" ]
    - map: [ "id" ]
    - map: [ "outerClothing" ]
    - map: [ "mask" ]
    - map: [ "head" ]
    - map: [ "clownedon" ]
      sprite: "Effects/creampie.rsi"
      state: "creampie_human"
      visible: false
  - type: Hands
  - type: ComplexInteraction
  - type: GenericVisualizer
    visuals:
      enum.CreamPiedVisuals.Creamed:
        clownedon:
          True: {visible: true}
          False: {visible: false}
  - type: Body
    prototype: Primate
    requiredLegs: 1 # TODO: More than 1 leg
  - type: CreamPied
  - type: FireVisuals
    sprite: Mobs/Effects/onfire.rsi
    normalState: Monkey_burning
  - type: InteractionPopup
    successChance: 0.9
    interactSuccessString: petting-success-monkey
    interactFailureString: petting-failure-monkey
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/ferret_happy.ogg
    interactFailureSound:
      path: /Audio/Items/wirecutter.ogg
  - type: MeleeWeapon
    soundHit:
      path: /Audio/Effects/bite.ogg
    angle: 30
    animation: WeaponArcBite
    damage:
      types:
        Blunt: 3
        Piercing: 3
  - type: Butcherable
    butcheringType: Spike
    spawned:
    - id: FoodMeat
      amount: 3
  - type: Puller
    needsHands: false
  - type: CanHostGuardian
  - type: NPCRetaliation
    attackMemoryLength: 10
  - type: FactionException
  - type: NpcFactionMember
    factions:
      - Passive
  - type: HTN
    rootTask:
      task: SimpleHostileCompound
  - type: IdExaminable
  - type: Tag
    tags:
    - VimPilot
    - DoorBumpOpener
    - AnomalyHost
  - type: Reactive
    groups:
      Flammable: [ Touch ]
      Extinguish: [ Touch ]
    reactions:
    - reagents: [ Water, SpaceCleaner ]
      methods: [ Touch ]
      effects:
      - !type:WashCreamPie
  - type: Crawler
  - type: StatusIcon



- type: entity
  name: monkey
  id: MobMonkey
  parent: MobBaseAncestor
  description: New church of neo-darwinists actually believe that EVERY animal evolved from a monkey. Tastes like pork, and killing them is both fun and relaxing.
  components:
  - type: NameIdentifier
    group: Monkey
  - type: Speech
    speechSounds: Monkey
    speechVerb: Monkey
  - type: MonkeyAccent
  - type: SentienceTarget
    flavorKind: station-event-random-sentience-flavor-primate
  - type: AlwaysRevolutionaryConvertible
  - type: GhostRole
    prob: 0.05
    makeSentient: true
    name: ghost-role-information-monkey-name
    description: ghost-role-information-monkey-description
    rules: ghost-role-information-nonantagonist-rules
  - type: GhostTakeoverAvailable
  - type: Clumsy
    gunShootFailDamage:
      types:
        Blunt: 5
        Piercing: 4
        Heat: 3
    catchingFailDamage:
      types:
        Blunt: 1
    clumsySound:
      path: /Audio/Animals/monkey_scream.ogg


- type: entity
  name: monkey
  id: MobBaseSyndicateMonkey
  parent: MobBaseAncestor
  description: New church of neo-darwinists actually believe that EVERY animal evolved from a monkey. Tastes like pork, and killing them is both fun and relaxing.
  suffix: syndicate base
  components:
  - type: NameIdentifier
    group: Monkey
  - type: SentienceTarget
    flavorKind: station-event-random-sentience-flavor-primate
  - type: Speech
    speechSounds: Monkey
    speechVerb: Monkey
  - type: MonkeyAccent
  - type: NpcFactionMember
    factions:
    - Syndicate
  - type: GhostRole
    prob: 0.05
    makeSentient: true
    name: ghost-role-information-monkey-name
    description: ghost-role-information-monkey-description
    rules: ghost-role-information-syndicate-reinforcement-rules
    mindRoles:
    # This is for syndicate monkeys that randomly gain sentience, thus have no summoner to team with
    - MindRoleGhostRoleSoloAntagonist
    raffle:
      settings: default
  - type: GhostTakeoverAvailable
  - type: Loadout
    prototypes: [SyndicateOperativeGearMonkey]

- type: entity
  id: MobMonkeySyndicateAgent
  parent: MobBaseSyndicateMonkey
  suffix: syndicate agent
  components:
    # make the player a traitor once its taken
  - type: AutoTraitor
    profile: TraitorReinforcement

- type: entity
  id: MobMonkeySyndicateAgentNukeops # Reinforcement exclusive to nukeops uplink
  parent: MobBaseSyndicateMonkey
  suffix: NukeOps
  components:
  - type: NukeOperative

- type: entity
  name: kobold
  id: MobBaseKobold
  parent: MobBaseAncestor
  description: Cousins to the sentient race of lizard people, kobolds blend in with their natural habitat and are as nasty as monkeys; ready to pull out your hair and stab you to death.
  abstract: true
  components:
  - type: NameIdentifier
    group: Kobold
  - type: LizardAccent
  - type: ReplacementAccent
    accent: kobold
  - type: Speech
    speechSounds: Lizard
    speechVerb: Reptilian
    allowedEmotes: ['Thump']
  - type: Vocal
    sounds:
      Male: MaleReptilian
      Female: FemaleReptilian
      Unsexed: MaleReptilian
  - type: BodyEmotes
    soundsId: ReptilianBodyEmotes
  - type: TypingIndicator
    proto: lizard
  - type: InteractionPopup
    successChance: 0.9
    interactSuccessString: petting-success-monkey
    interactFailureString: petting-failure-monkey
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/lizard_happy.ogg
    interactFailureSound:
      path: /Audio/Items/wirecutter.ogg
  - type: MobThresholds
    thresholds:
      0: Alive
      60: Critical
      125: Dead
  - type: MovementSpeedModifier
    baseWalkSpeed: 3.5
    baseSprintSpeed: 5
  - type: MeleeWeapon
    soundHit:
      collection: AlienClaw
    angle: 30
    animation: WeaponArcClaw
    damage:
      types:
        Slash: 5
        Piercing: 4
  - type: Temperature
    currentTemperature: 310.15
    specificHeat: 42
  - type: TemperatureDamage
    heatDamageThreshold: 360
    coldDamageThreshold: 285
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      sprite: Mobs/Animals/kobold.rsi
      state: kobold
    - map: [ "outline" ]
      sprite: Mobs/Animals/kobold.rsi
      state: outline
    - map: [ "horns" ]
      sprite: Mobs/Customization/reptilian_parts.rsi
      state: horns_short
    - map: [ "enum.HumanoidVisualLayers.Handcuffs" ]
      color: "#ffffff"
      sprite: Objects/Misc/handcuffs.rsi
      state: body-overlay-2
      visible: false
    - map: [ "ears" ]
    - map: [ "id" ]
    - map: [ "mask" ]
    - map: [ "head" ]
    - map: [ "clownedon" ]
      sprite: "Effects/creampie.rsi"
      state: "creampie_human"
      visible: false
  - type: RandomSprite
    getAllGroups: true
    available:
      - enum.DamageStateVisualLayers.Base:
          kobold: KoboldColors
      - horns:
          horns_curled: KoboldHornColors
          horns_ram: KoboldHornColors
          horns_short: KoboldHornColors
          horns_myrsore: KoboldHornColors
          horns_bighorn: KoboldHornColors
          horns_argali: KoboldHornColors
          horns_ayrshire: KoboldHornColors
          horns_floppy_kobold_ears: Inherit
          horns_double: Inherit
          horns_kobold_ears: Inherit
  - type: Butcherable
    butcheringType: Spike
    spawned:
    - id: FoodMeat
      amount: 2
  - type: AlwaysRevolutionaryConvertible
  - type: GhostTakeoverAvailable
  - type: SentienceTarget
    flavorKind: station-event-random-sentience-flavor-kobold
  - type: GhostRole
    prob: 0.05
    makeSentient: true
    name: ghost-role-information-kobold-name
    description: ghost-role-information-kobold-description
    rules: ghost-role-information-nonantagonist-rules

- type: entity
  name: kobold
  id: MobKobold
  parent: MobBaseKobold
  description: Cousins to the sentient race of lizard people, kobolds blend in with their natural habitat and are as nasty as monkeys; ready to pull out your hair and stab you to death.
  components:
  - type: Clumsy
    gunShootFailDamage:
      types:
        Blunt: 2
        Piercing: 7
        Heat: 3
    catchingFailDamage:
      types:
        Blunt: 1
    clumsySound:
      path: /Audio/Voice/Reptilian/reptilian_scream.ogg

- type: entity
  id: MobBaseSyndicateKobold
  parent: MobBaseKobold
  suffix: syndicate base
  components:
  - type: MobThresholds
    thresholds:
      0: Alive
      100: Critical
      200: Dead
  - type: NpcFactionMember
    factions:
    - Syndicate
  - type: Loadout
    prototypes: [SyndicateOperativeGearMonkey]

- type: entity
  id: MobKoboldSyndicateAgent
  parent: MobBaseSyndicateKobold
  suffix: syndicate agent
  components:
    # make the player a traitor once its taken
  - type: AutoTraitor
    profile: TraitorReinforcement

- type: entity
  id: MobKoboldSyndicateAgentNukeops # Reinforcement exclusive to nukeops uplink
  parent: MobBaseSyndicateKobold
  suffix: NukeOps
  components:
  - type: NukeOperative

- type: entity
  name: guidebook monkey
  parent: MobMonkey
  categories: [ HideSpawnMenu ]
  id: MobGuidebookMonkey
  description: A hopefully helpful monkey whose only purpose in life is for you to click on. Does this count as having a monkey give you a tutorial?
  components:
    - type: GuidebookControlsTest

- type: entity
  name: mouse
  parent: SimpleMobBase
  id: MobMouse
  description: Squeak!
  components:
  - type: Body
    prototype: Mouse
  - type: GhostRole
    makeSentient: true
    allowSpeech: true
    allowMovement: true
    name: ghost-role-information-mouse-name
    description: ghost-role-information-mouse-description
    rules: ghost-role-information-freeagent-rules
    mindRoles:
    - MindRoleGhostRoleFreeAgentHarmless
  - type: GhostTakeoverAvailable
  - type: Speech
    speechSounds: Squeak
    speechVerb: SmallMob
    allowedEmotes: ['Squeak']
  - type: Sprite
    drawdepth: SmallMobs
    sprite: Mobs/Animals/mouse.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base", "movement"]
      state: mouse-0
  - type: SpriteMovement
    movementLayers:
      movement:
        state: mouse-moving-0
    noMovementLayers:
      movement:
        state: mouse-0
  - type: Item
    size: Tiny
    heldPrefix: 0
  - type: Clothing
    quickEquip: false
    sprite: Mobs/Animals/mouse.rsi
    equippedPrefix: 0
    slots:
    - HEAD
  - type: NpcFactionMember
    factions:
      - Mouse
  - type: HTN
    constantlyReplan: false
    rootTask:
      task: MouseCompound
  - type: Physics
  - type: FaxableObject
    insertingState: inserting_mouse
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.2
        density: 100
        mask:
        - SmallMobMask
        layer:
        - SmallMobLayer
  - type: MobState
  - type: Deathgasp
  - type: MobStateActions
    actions:
      Critical:
      - ActionCritSuccumb
      - ActionCritFakeDeath
      - ActionCritLastWords
  - type: MobThresholds
    thresholds:
      0: Alive
      10: Critical
      20: Dead
  - type: MovementSpeedModifier
    baseWalkSpeed : 2.5
    baseSprintSpeed : 5
  - type: DamageStateVisuals
    states:
      Alive:
        Base: mouse-0
      Critical:
        Base: dead-0
      Dead:
        Base: splat-0
  - type: Edible
  - type: FlavorProfile
    flavors:
    - meaty
  - type: Thirst
    startingThirst: 25  # spawn with Okay thirst state
    thresholds:
      OverHydrated: 35
      Okay: 25
      Thirsty: 15
      Parched: 10
      Dead: 0
    baseDecayRate: 0.04
  - type: Hunger
    thresholds:
      Overfed: 35
      Okay: 25
      Peckish: 15
      Starving: 10
      Dead: 0
    baseDecayRate: 0.5 # I'm very hungry! Give me. The cheese.
  - type: Extractable
    grindableSolutionName: food
  - type: SolutionContainerManager
    solutions:
      food:
        reagents:
        - ReagentId: UncookedAnimalProteins
          Quantity: 3
  - type: Butcherable
    spawned:
    - id: FoodMeatRat
      amount: 1
  - type: ReplacementAccent
    accent: mouse
  - type: Tag
    tags:
    - Trash
    - VimPilot
    - ChefPilot
    - Mouse
    - Meat
  - type: Respirator
    damage:
      types:
        Asphyxiation: 0.25
    damageRecovery:
      types:
        Asphyxiation: -0.25
  - type: Barotrauma
    damage:
      types:
        Blunt: 0.1
  - type: Vocal
    sounds:
      Male: Mouse
      Female: Mouse
      Unsexed: Mouse
    wilhelmProbability: 0.001
  # TODO: Remove CombatMode when Prototype Composition is added
  - type: CombatMode
  - type: MeleeWeapon
    soundHit:
      path: /Audio/Effects/bite.ogg
    angle: 0
    animation: WeaponArcBite
    damage:
      types:
        Piercing: 0
  - type: Bloodstream
    bloodReferenceSolution:
      reagents:
      - ReagentId: Blood
        Quantity: 50
  - type: CanEscapeInventory
  - type: MobPrice
    price: 50
  - type: BadFood
  - type: NonSpreaderZombie
  - type: FireVisuals
    sprite: Mobs/Effects/onfire.rsi
    normalState: Mouse_burning
  - type: FoodSequenceElement
    entries:
      Taco: RatTaco
      Burger: RatBurger
      Skewer: RatSkewer
  - type: Destructible
    thresholds:
    - trigger:
        !type:DamageTypeTrigger
        damageType: Blunt
        damage: 60
      behaviors:
      - !type:GibBehavior
        recursive: false

- type: entity
  parent: MobMouse
  suffix: Dead
  save: false
  id: MobMouseDead
  name: mouse
  description: Squeak!
  components:
  - type: Damageable
    damage:
      types:
        Bloodloss: 6
        Asphyxiation: 4
        Slash: 7
        Blunt: 3

- type: entity
  parent: MobMouse
  id: MobMouseAdmeme
  suffix: Admeme
  components:
  # allow admeme mouse to eat pills
  - type: IgnoreBadFood
  # intended for swarms that eat pills so only temporary
  - type: TimedDespawn
    lifetime: 60
  - type: Hunger
    baseDecayRate: 10 # always hungry
    starvingSlowdownModifier: 1
  - type: Thirst
    baseDecayRate: 10 # always thirsty

- type: entity
  parent: MobMouse
  id: MobMouse1
  components:
  - type: Sprite
    layers:
    - map: ["enum.DamageStateVisualLayers.Base", "movement"]
      state: mouse-1
  - type: SpriteMovement
    movementLayers:
      movement:
        state: mouse-moving-1
    noMovementLayers:
      movement:
        state: mouse-1
  - type: Clothing
    equippedPrefix: 1
  - type: DamageStateVisuals
    states:
      Alive:
        Base: mouse-1
      Critical:
        Base: dead-1
      Dead:
        Base: splat-1
  - type: Item
    size: Tiny
    heldPrefix: 1

- type: entity
  parent: MobMouse
  id: MobMouse2
  components:
  - type: Sprite
    layers:
    - map: ["enum.DamageStateVisualLayers.Base", "movement"]
      state: mouse-2
  - type: SpriteMovement
    movementLayers:
      movement:
        state: mouse-moving-2
    noMovementLayers:
      movement:
        state: mouse-2
  - type: Clothing
    equippedPrefix: 2
  - type: DamageStateVisuals
    states:
      Alive:
        Base: mouse-2
      Critical:
        Base: dead-2
      Dead:
        Base: splat-2
  - type: Item
    size: Tiny
    heldPrefix: 2

- type: entity
  name: cancer mouse
  description: Toxic. Squeak!
  parent: MobMouse
  id: MobMouseCancer
  components:
  - type: GhostRole
    name: ghost-role-information-cancer-mouse-name
    description: ghost-role-information-cancer-mouse-description
    rules: ghost-role-information-freeagent-rules
    mindRoles:
    - MindRoleGhostRoleFreeAgent
  - type: Sprite
    color: LightGreen
  - type: PointLight
    color: LightGreen
    radius: 5
    energy: 5
    netsync: false
  - type: RadiationSource
    intensity: 0.3
  - type: Bloodstream
    bloodReferenceSolution:
      reagents:
      - ReagentId: UnstableMutagen
        Quantity: 50
  - type: SolutionContainerManager
    solutions:
      food:
        reagents:
        - ReagentId: UncookedAnimalProteins
          Quantity: 3
        - ReagentId: Uranium
          Quantity: 10
  - type: Butcherable
    spawned:
    - id: FoodMeatRat
      amount: 1
    - id: SheetUranium1
      amount: 1
  - type: Damageable
    damageContainer: Biological
    damageModifierSet: Zombie

- type: entity
  name: lizard #Weh
  parent: SimpleMobBase
  id: MobLizard
  description: A harmless dragon.
  components:
  - type: MovementSpeedModifier
    baseWalkSpeed: 2
    baseSprintSpeed: 3
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: lizard
      sprite: Mobs/Animals/lizard.rsi
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.2
        density: 50
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: DamageStateVisuals
    states:
      Alive:
        Base: lizard
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: Butcherable
    spawned:
    - id: FoodMeatLizard
      amount: 1
  - type: InteractionPopup
    successChance: 0.3
    interactSuccessString: petting-success-reptile
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/lizard_happy.ogg
  - type: Bloodstream
    bloodReferenceSolution:
      reagents:
      - ReagentId: Blood
        Quantity: 150
  - type: Damageable
    damageContainer: Biological
    damageModifierSet: Scale
  - type: Tag
    tags:
    - VimPilot


- type: entity
  name: slug
  parent: SimpleMobBase
  id: MobSlug
  description: And they called this a lizard?
  components:
  - type: MovementSpeedModifier
    baseWalkSpeed : 2
    baseSprintSpeed : 3
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: slug
      sprite: Mobs/Animals/slug.rsi
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.2
        density: 5
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: DamageStateVisuals
    states:
      Alive:
        Base: slug
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 1
  - type: InteractionPopup
    successChance: 0.3
    interactSuccessString: petting-success-generic
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
  - type: Bloodstream
    bloodReferenceSolution:
      reagents:
      - ReagentId: Blood
        Quantity: 50

- type: entity
  name: frog
  parent: SimpleMobBase
  id: MobFrog
  description: Hop hop hop. Lookin' moist.
  components:
  - type: MovementSpeedModifier
    baseWalkSpeed: 3
    baseSprintSpeed: 6
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base", "movement"]
      state: frog
      sprite: Mobs/Animals/frog.rsi
  - type: SpriteMovement
    movementLayers:
      movement:
        state: frog-moving
    noMovementLayers:
      movement:
        state: frog
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.2
        density: 5
        mask:
        - SmallMobMask
        layer:
        - SmallMobLayer
  - type: DamageStateVisuals
    states:
      Alive:
        Base: frog
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 1
  - type: InteractionPopup
    successChance: 0.6
    interactSuccessString: petting-success-frog
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/frog_ribbit.ogg
  - type: Bloodstream
    bloodReferenceSolution:
      reagents:
      - ReagentId: Blood
        Quantity: 50
  - type: Tag
    tags:
    - VimPilot
  - type: Destructible
    thresholds:
    - trigger:
        !type:DamageTypeTrigger
        damageType: Blunt
        damage: 60
      behaviors:
      - !type:GibBehavior
        recursive: false

# Would be cool to have some functionality for the parrot to be able to sit on stuff
- type: entity
  parent: [ SimpleMobBase, FlyingMobBase ]
  id: MobParrotBase
  name: parrot
  abstract: true
  description: Infiltrates your domain, spies on you, and somehow still a cool pet.
  components:
  - type: MovementSpeedModifier
    baseWalkSpeed : 2.5
    baseSprintSpeed : 6
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: parrot
      sprite: Mobs/Animals/parrot/parrot.rsi
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.25
        density: 10
        mask:
        - FlyingMobMask
        layer:
        - FlyingMobLayer
  - type: DamageStateVisuals
    states:
      Alive:
        Base: parrot
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 1
  - type: Speech
    speechSounds: Parrot
    speechVerb: Parrot
  - type: Vocal
    sounds:
      Unsexed: Parrot
  - type: ActiveListener
  - type: Vocalizer
  - type: RadioVocalizer
  - type: ParrotListener
  - type: ParrotMemory
  - type: Inventory
    templateId: parrot
    speciesId: parrot
    # transparent displacement map to hide the headset. this should be an animated displacement map to follow the parrot
    # as it bobs up and down, but this in turn needs some way to change the displacement map on inventory entities when
    # the parrot dies, otherwise the visuals will be broken
    displacements:
      ears:
        sizeMaps:
          32:
            sprite: Mobs/Animals/parrot/displacement.rsi
            state: ears
  - type: InventorySlots
  - type: Strippable
  - type: UserInterface
    interfaces:
      enum.StrippingUiKey.Key:
        type: StrippableBoundUserInterface
  - type: InteractionPopup
    successChance: 0.6
    interactSuccessString: petting-success-bird
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/parrot_raught.ogg
  - type: Bloodstream
    bloodReferenceSolution:
      reagents:
      - ReagentId: Blood
        Quantity: 50

- type: entity
  parent: MobParrotBase
  id: MobParrot
  components:
  - type: ParrotAccent # regular parrots have a parrotaccent. Polly is special and does not

- type: entity
  name: penguin
  parent: SimpleMobBase
  id: MobPenguin
  description: Their lives are constant pain due to their inner-body knees.
  components:
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: penguin
      sprite: Mobs/Animals/penguin.rsi
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.25
        density: 100
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: DamageStateVisuals
    states:
      Alive:
        Base: penguin
      Critical:
        Base: penguin_dead
      Dead:
        Base: penguin_dead
  - type: Butcherable
    spawned:
    - id: FoodMeatPenguin
      amount: 3
  - type: InteractionPopup
    successChance: 0.5
    interactSuccessString: petting-success-bird
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/penguin_squawk.ogg
  - type: Tag
    tags:
    - VimPilot
  - type: NpcFactionMember
    factions:
    - Passive
  - type: Temperature
    currentTemperature: 310.15
    specificHeat: 46
  - type: TemperatureDamage
    heatDamageThreshold: 335
    coldDamageThreshold: 230
    coldDamage:
      types:
        Cold : 0.05 #per second, scales with temperature & other constants
    heatDamage:
      types:
        Heat : 0.2 #per second, scales with temperature & other constants

# TODO: Make grenade penguin voice activated like the rest of the stealth items.
- type: entity
  name: grenade penguin
  parent: [ MobPenguin, MobCombat, BaseSyndicateContraband ]
  id: MobGrenadePenguin
  description: A small penguin with a grenade strapped around its neck. Harvested by the Syndicate from icy shit-hole planets.
  components:
  - type: MovementSpeedModifier
    baseWalkSpeed: 3
    baseSprintSpeed: 5
  - type: InputMover
  - type: MobMover
  - type: HTN
    rootTask:
      task: GrenadePenguinCompound
  - type: NpcFactionMember
    factions:
    - Syndicate
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: penguin
      sprite: Mobs/Animals/grenadepenguin.rsi
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.25
        density: 25
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: DamageStateVisuals
    states:
      Alive:
        Base: penguin
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: MeleeWeapon
    angle: 0
    animation: WeaponArcBite
    damage:
      groups:
        Brute: 5
  - type: Item
    size: Normal
    sprite: Mobs/Animals/grenadepenguin.rsi
  - type: TriggerOnUse
  - type: TimerTrigger
    delay: 10
    beepSound:
      path: /Audio/Weapons/Guns/MagOut/pistol_magout.ogg #funny sfx use
      params:
        volume: -2
    beepInterval: 1
  - type: Explosive
    explosionType: Default
    maxIntensity: 10
    intensitySlope: 3
    totalIntensity: 150
  - type: ExplodeOnTrigger
    keysIn:
    - timer
  - type: Destructible
    thresholds:
    - trigger:
        !type:DamageTrigger
        damage: 50
      behaviors:
      - !type:ExplodeBehavior

  # I have included a snake_hiss.ogg sound file so if you want to use that be my guest
- type: entity
  name: snake
  parent: SimpleMobBase
  id: MobSnake
  description: Hissss! Bites aren't poisonous.
  components:
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: snake
      sprite: Mobs/Animals/snake.rsi
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.25
        density: 10
        mask:
        - SmallMobMask
        layer:
        - SmallMobLayer
  - type: DamageStateVisuals
    states:
      Alive:
        Base: snake
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: Butcherable
    spawned:
    - id: FoodMeatSnake
      amount: 1
  - type: InteractionPopup
    successChance: 0.6
    interactSuccessString: petting-success-reptile
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
  - type: Bloodstream
    bloodReferenceSolution:
      reagents:
      - ReagentId: Blood
        Quantity: 50
  - type: Damageable
    damageContainer: Biological
    damageModifierSet: Scale

# Code unique spider prototypes or combine them all into one spider and get a
# random sprite state when you spawn it.
- type: entity
  parent: [ SimpleMobBase, MobCombat ]
  id: MobSpiderBase
  abstract: true
  components:
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 130
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Butcherable
    spawned:
    - id: FoodMeatSpider
      amount: 2
  - type: CombatMode
  - type: Body
    prototype: AnimalHemocyanin
  - type: MobThresholds
    thresholds:
      0: Alive
      90: Dead
  - type: SolutionContainerManager
    solutions:
      melee:
        maxVol: 30
  - type: SolutionRegeneration
    solution: melee
    generated:
      reagents:
      - ReagentId: Mechanotoxin
        Quantity: 1
  - type: MeleeChemicalInjector
    transferAmount: 0.75
    solution: melee
  - type: ReplacementAccent
    accent: xeno
  - type: InteractionPopup
    successChance: 0.5
    interactSuccessString: petting-success-tarantula
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/snake_hiss.ogg
  - type: Puller
    needsHands: false
  - type: NoSlip
  - type: Spider
  - type: IgnoreSpiderWeb
  - type: Bloodstream
    bloodReferenceSolution:
      reagents:
      - ReagentId: CopperBlood
        Quantity: 150
  - type: Speech
    speechVerb: Arachnid
    speechSounds: Arachnid
    allowedEmotes: ['Click', 'Chitter']
  - type: Vocal
    sounds:
      Male: UnisexArachnid
      Female: UnisexArachnid
      Unsexed: UnisexArachnid
  - type: TypingIndicator
    proto: spider
  - type: Tag
    tags:
    - DoorBumpOpener
    - FootstepSound
  - type: Prying # Open door from xeno.yml.
    pryPowered: true
    force: true
    speedModifier: 1.5
    useSound:
      path: /Audio/Items/crowbar.ogg
  - type: PassiveDamage # Slight passive regen. Assuming one damage type, comes out to about 4 damage a minute from base.yml.
    allowedStates:
    - Alive
    damageCap: 89
    damage:
      types:
        Poison: -0.07
      groups:
        Brute: -0.07
        Burn: -0.07

- type: entity
  parent: MobSpiderBase
  id: MobSpiderAngryBase
  abstract: true
  components:
  - type: NpcFactionMember
    factions:
      - Xeno
  - type: InputMover
  - type: MobMover
  - type: HTN
    rootTask:
      task: SimpleHostileCompound
  - type: GhostRole
    makeSentient: true
    name: ghost-role-information-giant-spider-name
    description: ghost-role-information-giant-spider-description
    rules: ghost-role-information-giant-spider-rules
    mindRoles:
    - MindRoleGhostRoleTeamAntagonist
    raffle:
      settings: short
  - type: GhostTakeoverAvailable

- type: entity
  name: tarantula
  parent: MobSpiderBase
  id: MobGiantSpider
  description: Widely recognized to be the literal worst thing in existence.
  components:
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base", "movement"]
      state: tarantula
      sprite: Mobs/Animals/spider.rsi
  - type: SpriteMovement
    movementLayers:
      movement:
        state: tarantula-moving
    noMovementLayers:
      movement:
        state: tarantula
  - type: DamageStateVisuals
    states:
      Alive:
        Base: tarantula
      Critical:
        Base: tarantula_dead
      Dead:
        Base: tarantula_dead
  - type: MeleeWeapon
    altDisarm: false
    angle: 0
    animation: WeaponArcBite
    soundHit:
      path: /Audio/Effects/bite.ogg
    damage:
      types:
        Piercing: 6

- type: entity
  parent:
  - MobSpiderAngryBase
  - MobGiantSpider
  id: MobGiantSpiderAngry

- type: entity
  name: clown spider
  parent: MobSpiderAngryBase
  id: MobClownSpider
  description: Combines the two most terrifying things in existence, spiders and clowns.
  components:
    - type: Sprite
      drawdepth: Mobs
      layers:
      - map: ["enum.DamageStateVisualLayers.Base"]
        state: clown
        sprite: Mobs/Animals/clownspider.rsi
    - type: Butcherable
      spawned:
        - id: MaterialBananium1
          amount: 1
    - type: DamageStateVisuals
      states:
        Alive:
          Base: clown
        Critical:
          Base: dead
        Dead:
          Base: dead
    - type: MobThresholds
      thresholds:
        0: Alive
        180: Dead
    - type: Spider
      webPrototype: SpiderWebClown
    - type: MeleeWeapon
      altDisarm: false
      angle: 0
      animation: WeaponArcBite
      soundHit:
        path: /Audio/Effects/bite.ogg
      damage:
        types:
          Piercing: 8
    - type: FootstepModifier
      footstepSoundCollection:
        collection: FootstepClownFast
    - type: Speech
      speechVerb: Cluwne
    - type: Bloodstream
      bloodReferenceSolution:
        reagents:
        - ReagentId: Laughter
          Quantity: 150
- type: entity
  name: wizard spider
  parent: MobGiantSpider
  id: MobGiantSpiderWizard
  description: This spider looks a little magical
  suffix: Wizard
  components:
  - type: Accentless
    removes:
    - type: ReplacementAccent
      accent: xeno  #let this wizard speak

- type: entity
  name: possum
  parent: [SimpleMobBase, StripableInventoryBase]
  id: MobPossum
  description: '"O Possum! My Possum!" -- Walt Whitman, 1865'
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: Mobs/Animals/possum.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: possum
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 50
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Inventory
    speciesId: possum
    templateId: pet
  - type: DamageStateVisuals
    states:
      Alive:
        Base: possum
      Critical:
        Base: possum_dead
      Dead:
        Base: possum_dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 3
  - type: InteractionPopup
    successChance: 0.2 # Low when undomesticated.
    interactSuccessString: petting-success-possum # Possums don't really make much noise when they're happy. They make clicking noises as a mating call, but that is NOT the same thing!
    interactFailureString: petting-failure-possum
    interactFailureSound:
      path: /Audio/Animals/cat_hiss.ogg # This sound effect is intended for generic hissing. For easy reference it's named after the animal it came from IRL.
  - type: Grammar
    attributes:
      gender: epicene
  - type: Tag
    tags:
    - VimPilot

- type: entity
  name: possum
  parent: MobPossum
  suffix: Old sprite
  id: MobPossumOld
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: Mobs/Animals/possum_old.rsi
    layers:
    - map: [ "enum.DamageStateVisualLayers.Base" ]
      state: possum_old
  - type: DamageStateVisuals
    states:
      Alive:
        Base: possum_old
      Critical:
        Base: possum_dead_old
      Dead:
        Base: possum_dead_old

- type: entity
  name: raccoon
  parent: [SimpleMobBase, StripableInventoryBase]
  id: MobRaccoon
  description: Trash panda!
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: Mobs/Animals/raccoon.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: raccoon
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 50
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Inventory
    speciesId: possum #close enough
    templateId: pet
  - type: DamageStateVisuals
    states:
      Alive:
        Base: raccoon
      Critical:
        Base: raccoon_dead
      Dead:
        Base: raccoon_dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 3
  - type: InteractionPopup
    successChance: 0.2 # Low when undomesticated.
    interactSuccessString: petting-success-soft-floofy
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/raccoon_chatter.ogg
  - type: Grammar
    attributes:
      gender: epicene
  - type: Tag
    tags:
    - VimPilot

- type: entity
  name: fox
  parent: [SimpleMobBase, StripableInventoryBase]
  id: MobFox
  description: They're a fox.
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: Mobs/Animals/fox.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base", "movement"]
      state: fox
  - type: SpriteMovement
    movementLayers:
      movement:
        state: fox-moving
    noMovementLayers:
      movement:
        state: fox
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 50 #They actually are pretty light, I looked it up
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Inventory
    speciesId: fox
    templateId: pet
  - type: DamageStateVisuals
    states:
      Alive:
        Base: fox
      Critical:
        Base: fox_dead
      Dead:
        Base: fox_dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 3
  - type: InteractionPopup
    successChance: 0.5
    interactSuccessString: petting-success-soft-floofy
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      collection: Fox
  - type: Grammar
    attributes:
      gender: epicene
  - type: Bloodstream
    bloodReferenceSolution:
      reagents:
      - ReagentId: Blood
        Quantity: 100
  - type: MeleeWeapon
    angle: 0
    animation: WeaponArcBite
    soundHit:
      path: /Audio/Effects/bite.ogg
    damage:
      types:
        Piercing: 8
  - type: NpcFactionMember
    factions:
    - Passive
  - type: NPCRetaliation
    attackMemoryLength: 10
  - type: HTN
    rootTask:
      task: RuminantHostileCompound
  - type: MessyDrinker
  - type: Tag
    tags:
    - VimPilot

- type: entity
  abstract: true
  parent: [SimpleMobBase, StripableInventoryBase]
  id: MobCorgiBase
  name: corgi
  description: Finally, a space corgi!
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: Mobs/Pets/corgi.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: corgi
  - type: Physics
  - type: Speech
    speechVerb: Canine
    speechSounds: Dog
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 50
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Inventory
    speciesId: dog
    templateId: pet
  - type: InteractionPopup
    interactSuccessString: petting-success-dog
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/small_dog_bark_happy.ogg
  - type: Grammar
    attributes:
      gender: epicene
  - type: MobPrice
    price: 200
  - type: MessyDrinker

- type: entity
  parent: MobCorgiBase
  id: MobCorgi
  components:
  - type: DamageStateVisuals
    states:
      Alive:
        Base: corgi
      Critical:
        Base: corgi_dead
      Dead:
        Base: corgi_dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 2
  - type: ReplacementAccent
    accent: dog
  - type: Tag
    tags:
    - VimPilot

- type: entity
  name: corrupted corgi
  parent: [ MobCorgi, MobCombat ]
  id: MobCorgiNarsi
  description: Ian! No!
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: Mobs/Pets/corgi.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: narsian
  - type: DamageStateVisuals
    states:
      Alive:
        Base: narsian
      Critical:
        Base: narsian_dead
      Dead:
        Base: narsian_dead
  - type: MeleeWeapon
    soundHit:
        path: /Audio/Effects/bite.ogg
    angle: 0
    animation: WeaponArcBite
    damage:
      types:
        Piercing: 5
        Slash: 5
  - type: InputMover
  - type: MobMover
  - type: HTN
    rootTask:
      task: SimpleHostileCompound
  - type: NpcFactionMember
    factions:
    - SimpleHostile
  - type: InteractionPopup
    successChance: 0 # Override the automatic success that would normally be inherited from MobCorgi.
    interactSuccessString: petting-success-corrupted-corgi # Normally impossible but added an easter egg just in case.
    interactFailureString: petting-failure-corrupted-corgi
  - type: Grammar
    attributes:
      gender: epicene
  - type: Bloodstream
    bloodReferenceSolution:
      reagents:
      - ReagentId: DemonsBlood
        Quantity: 150
  - type: Damageable
    damageContainer: BiologicalMetaphysical
    damageModifierSet: Infernal
  - type: Temperature
    currentTemperature: 310.15
    specificHeat: 42
  - type: TemperatureDamage
    heatDamageThreshold: 4000 #They come from hell, so..
    coldDamageThreshold: 260
    coldDamage:
      types:
        Cold : 1 #per second, scales with temperature & other constants
    heatDamage:
      types:
        Heat : 1 #per second, scales with temperature & other constants

- type: entity
  name: corgi puppy
  parent: MobCorgi
  id: MobCorgiPuppy
  description: A little corgi! Aww...
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: Mobs/Pets/corgi.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: puppy
  - type: Inventory
    speciesId: puppy
    templateId: pet
  - type: DamageStateVisuals
    states:
      Alive:
        Base: puppy
      Critical:
        Base: puppy_dead
      Dead:
        Base: puppy_dead
  - type: Grammar
    attributes:
      gender: epicene

- type: entity
  name: cat
  parent: [SimpleMobBase, StripableInventoryBase]
  id: MobCat
  description: Feline pet, very funny.
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: Mobs/Pets/cat.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: cat
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 15
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Inventory
    speciesId: cat
    templateId: pet
  - type: DamageStateVisuals
    states:
      Alive:
        Base: cat
      Critical:
        Base: cat_dead
      Dead:
        Base: cat_dead
  - type: Speech
    speechSounds: Cat
    speechVerb: SmallMob
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 3
  - type: ReplacementAccent
    accent: cat
  - type: InteractionPopup
    successChance: 0.7
    interactSuccessString: petting-success-cat
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/cat_meow.ogg
  - type: MeleeWeapon
    altDisarm: false
    angle: 0
    animation: WeaponArcBite
    soundHit:
      path: /Audio/Effects/bite.ogg
    damage:
      types:
        Piercing: 5
  - type: Grammar
    attributes:
      gender: epicene
  - type: MobPrice
    price: 200
  - type: Tag
    tags:
    - VimPilot
  - type: MovementSpeedModifier
    baseWalkSpeed: 2
    baseSprintSpeed: 4

- type: entity
  name: calico cat
  id: MobCatCalico
  parent: MobCat
  description: Feline pet, very funny.
  components:
  - type: Sprite
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: cat2
  - type: DamageStateVisuals
    states:
      Alive:
        Base: cat2
      Critical:
        Base: cat2_dead
      Dead:
        Base: cat2_dead

- type: entity
  name: syndicat
  id: MobCatSyndy
  parent: MobCatSpace
  description: Explosive kitten.
  components:
  - type: Sprite
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: syndicat
  - type: DamageStateVisuals
    states:
      Alive:
        Base: syndicat
      Critical:
        Base: syndicat_dead
      Dead:
        Base: syndicat_dead
  - type: GhostRole
    prob: 1
    name: ghost-role-information-SyndiCat-name
    allowMovement: true
    description: ghost-role-information-SyndiCat-description
    rules: ghost-role-information-SyndiCat-rules
    mindRoles:
    - MindRoleGhostRoleTeamAntagonist
    raffle:
      settings: default
  - type: GhostTakeoverAvailable
  - type: AutoImplant
    implants:
    - MicroBombImplant
  - type: ExplosionResistance
    damageCoefficient: 0.2
  - type: NpcFactionMember
    factions:
    - Syndicate
  - type: Access
    tags:
    - NuclearOperative
    - SyndicateAgent
  - type: MeleeWeapon
    altDisarm: false
    angle: 0
    animation: WeaponArcBite
    soundHit:
      path: /Audio/Effects/bite.ogg
    damage:
      types:
        Slash: 6
        Piercing: 6
        Structural: 15

- type: entity
  name: space cat
  id: MobCatSpace
  parent: MobCat
  description: Feline pet, prepared for the worst.
  components:
  - type: Sprite
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: spacecat
  - type: DamageStateVisuals
    states:
      Alive:
        Base: spacecat
      Critical:
        Base: spacecat_dead
      Dead:
        Base: spacecat_dead
  - type: Temperature
  - type: TemperatureDamage
    heatDamageThreshold: 423
    coldDamageThreshold: 0
  - type: Tag
    tags:
      - DoorBumpOpener
  - type: MovementAlwaysTouching
  - type: PressureImmunity
  - type: ProtectedFromStepTriggers
  - type: Insulated
  - type: InteractionPopup
    successChance: 0.7
    interactSuccessString: petting-success-space-cat
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/cat_meow.ogg
  - type: Respirator #It just works?
    minSaturation: 5.0

- type: entity
  name: caracal cat
  id: MobCatCaracal
  parent: MobCat
  description: Hilarious.
  components:
  - type: Sprite
    sprite: Mobs/Pets/caracal.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: caracal_flop
  - type: DamageStateVisuals
    states:
      Alive:
        Base: caracal_flop
      Critical:
        Base: caracal_dead
      Dead:
        Base: caracal_dead

- type: entity
  name: kitten
  parent: MobCat
  id: MobCatKitten
  description: Small and fluffy.
  components:
  - type: Sprite
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: kitten
  - type: DamageStateVisuals
    states:
      Alive:
        Base: kitten
      Critical:
        Base: kitten_dead
      Dead:
        Base: kitten_dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 1
  - type: MobPrice
    price: 100
  - type: MeleeWeapon
    damage:
      types:
        Piercing: 3
  - type: MobThresholds
    thresholds:
      0: Alive
      25: Dead

- type: entity
  name: sloth
  parent: [SimpleMobBase, StripableInventoryBase]
  id: MobSloth
  description: Very slow animal. For people with low energy.
  components:
  - type: MovementSpeedModifier
    baseWalkSpeed : 0.5
    baseSprintSpeed : 1
  - type: Sprite
    drawdepth: Mobs
    sprite: Mobs/Pets/sloth.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: sloth
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 15
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Inventory
    speciesId: sloth
    templateId: pet
  - type: DamageStateVisuals
    states:
      Alive:
        Base: sloth
      Critical:
        Base: sloth_dead
      Dead:
        Base: sloth_dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 3
  - type: InteractionPopup
    successChance: 0.9
    interactSuccessString: petting-success-sloth
    interactFailureString: petting-failure-sloth
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/sloth_squeak.ogg
  - type: Grammar
    attributes:
      gender: epicene
  - type: SlowAccent
  - type: Tag
    tags:
    - VimPilot

- type: entity
  name: ferret
  parent: [SimpleMobBase, StripableInventoryBase]
  id: MobFerret
  description: Just a silly little guy!
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: Mobs/Pets/ferret.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: ferret
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 5
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Inventory
    speciesId: fox #close enough
    templateId: pet
  - type: DamageStateVisuals
    states:
      Alive:
        Base: ferret
      Critical:
        Base: ferret_dead
      Dead:
        Base: ferret_dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 3
  - type: InteractionPopup
    successChance: 0.8
    interactDelay: 1.5 # Avoids overlapping SFX due to spam - these SFX are a little longer than the typical 1 second.
    interactSuccessString: petting-success-soft-floofy
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/ferret_happy.ogg
  - type: Grammar
    attributes:
      gender: epicene
  - type: Tag
    tags:
    - VimPilot

- type: entity
  name: hamster
  parent: [ SimpleMobBase, MobCombat, StripableInventoryBase]
  id: MobHamster
  description: A cute, fluffy, robust hamster.
  components:
  - type: GhostRole
    makeSentient: true
    allowSpeech: true
    allowMovement: true
    name: ghost-role-information-hamster-name
    description: ghost-role-information-hamster-description
    rules: ghost-role-information-nonantagonist-rules
  - type: GhostTakeoverAvailable
  - type: Speech
    speechVerb: SmallMob
    speechSounds: Squeak
    allowedEmotes: ['Squeak']
  - type: Sprite
    drawdepth: SmallMobs
    sprite: Mobs/Animals/hamster.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base", "movement"]
      state: hamster-0
  - type: SpriteMovement
    movementLayers:
      movement:
        state: hamster-moving-0
    noMovementLayers:
      movement:
        state: hamster-0
  - type: Item
    size: Tiny
  - type: Physics
  - type: FaxableObject
    insertingState: inserting_hamster
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.2
        density: 120
        mask:
        - SmallMobMask
        layer:
        - SmallMobLayer
  - type: MobState
  - type: Deathgasp
  - type: MobStateActions
    actions:
      Critical:
      - ActionCritSuccumb
      - ActionCritFakeDeath
      - ActionCritLastWords
  - type: MobThresholds
    thresholds:
      0: Alive
      40: Critical
      60: Dead
  - type: MovementSpeedModifier
    baseWalkSpeed : 2.5
    baseSprintSpeed : 4
  - type: Inventory
    speciesId: hamster
    templateId: hamster
  - type: DamageStateVisuals
    states:
      Alive:
        Base: hamster-0
      Critical:
        Base: dead-0
      Dead:
        Base: splat-0
  - type: Edible
  - type: FlavorProfile
    flavors:
    - meaty
  - type: Hunger
    baseDecayRate: 0.3
  - type: Extractable
    grindableSolutionName: food
  - type: SolutionContainerManager
    solutions:
      food:
        reagents:
        - ReagentId: Nutriment
          Quantity: 10
        - ReagentId: Blood
          Quantity: 55
        - ReagentId: Fat
          Quantity: 5
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 1
  - type: ReplacementAccent
    accent: mouse
  - type: Tag
    tags:
    - VimPilot
    - ChefPilot
    - Trash
    - Hamster
    - Meat
  - type: Respirator
    damage:
      types:
        Asphyxiation: 0.25
    damageRecovery:
      types:
        Asphyxiation: -0.25
  - type: Barotrauma
    damage:
      types:
        Blunt: 0.1
  - type: CombatMode
  - type: MeleeWeapon
    soundHit:
        path: /Audio/Effects/bite.ogg
    angle: 0
    animation: WeaponArcBite
    damage:
      types:
        Piercing: 2
  - type: InteractionPopup
    successChance: 0.4
    interactSuccessString: petting-success-hamster
    interactFailureString: petting-failure-hamster
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/fox_squeak.ogg
  - type: Bloodstream
    bloodReferenceSolution:
      reagents:
      - ReagentId: Blood
        Quantity: 60
  - type: CanEscapeInventory
    baseResistTime: 3
  - type: MobPrice
    price: 60
  - type: NonSpreaderZombie
  - type: FireVisuals
    sprite: Mobs/Effects/onfire.rsi
    normalState: Mouse_burning
  - type: Destructible
    thresholds:
    - trigger:
        !type:DamageTypeTrigger
        damageType: Blunt
        damage: 120
      behaviors:
      - !type:GibBehavior
        recursive: false

- type: entity
  name: pig
  parent: [SimpleMobBase, StripableInventoryBase]
  id: MobPig
  description: Oink.
  components:
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: pig
      sprite: Mobs/Animals/pig.rsi
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 250
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Inventory
    speciesId: pig
    templateId: pet
  - type: Tag
    tags:
    - DoorBumpOpener
    - Pig
    - VimPilot
  - type: Reproductive
    partnerWhitelist:
      tags:
      - Pig
    offspring:
    - id: MobPig
  - type: ReproductivePartner
  - type: DamageStateVisuals
    states:
      Alive:
        Base: pig
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: Butcherable
    spawned:
    - id: FoodMeatBacon
      amount: 6
  - type: Grammar
    attributes:
      gender: epicene
  - type: InteractionPopup
    successChance: 0.7
    interactSuccessString: petting-success-pig
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/pig_oink.ogg
  - type: ReplacementAccent
    accent: pig
  - type: SentienceTarget
    flavorKind: station-event-random-sentience-flavor-organic
  - type: NpcFactionMember
    factions:
    - Passive
  - type: HTN
    rootTask:
      task: RuminantCompound

- type: entity
  name: diona nymph
  parent: [SimpleMobBase, StripableInventoryBase]
  id: MobDionaNymph
  description: It's like a cat, only.... branch-ier.
  components:
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: nymph
      sprite: Mobs/Animals/nymph.rsi
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 100 # High, because wood is heavy.
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Inventory
    speciesId: cat
    templateId: pet
  - type: Bloodstream
    bloodReferenceSolution:
      reagents:
      - ReagentId: Sap
        Quantity: 60
  - type: DamageStateVisuals
    states:
      Alive:
        Base: nymph
      Critical:
        Base: nymph_sleep
      Dead:
        Base: nymph_dead
  - type: Butcherable
    spawned:
    - id: MaterialWoodPlank1
      amount: 2
  - type: InteractionPopup
    successChance: 0.7
    interactSuccessString: petting-success-nymph
    interactFailureString: petting-failure-nymph
    interactSuccessSound:
      path: /Audio/Animals/nymph_chirp.ogg
  - type: MobThresholds
    thresholds:
      0: Alive
      30: Critical
      60: Dead
  - type: MovementSpeedModifier
    baseWalkSpeed : 2.5
    baseSprintSpeed : 4.5
  - type: Grammar
    attributes:
      gender: epicene
  - type: Speech
    speechVerb: Plant
    speechSounds: Alto
    allowedEmotes: ['Chirp']
  - type: Vocal
    sounds:
      Male: UnisexDiona
      Female: UnisexDiona
      Unsexed: UnisexDiona
  - type: Tag
    tags:
    - DoorBumpOpener
    - VimPilot
  - type: Emoting
  - type: BodyEmotes
    soundsId: Nymph
  - type: Reform
    actionPrototype: DionaReformAction
    reformTime: 10
    popupText: diona-reform-attempt
    reformPrototype: MobDionaReformed

- type: entity
  parent: MobDionaNymph
  id: MobDionaNymphAccent # No talky. For non-brain & wild nymphs
  suffix: Accent
  components:
  - type: ReplacementAccent
    accent: nymph

- type: entity
  name: reindeer buck
  parent: [ SimpleMobBase, MobCombat ]
  id: MobReindeerBuck
  description: You think it can pull a sleigh?
  components:
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: reindeer_buck
      sprite: Mobs/Animals/reindeer_buck.rsi
#  - type: SpriteMovement  # One day when this shit isnt broken as hell. For now they hoppity hop.
#    movementLayers:
#      movement:
#        state: reindeer_buck
#    noMovementLayers:
#      movement:
#        state: reindeer_buck_still
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.48
        density: 200
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: DamageStateVisuals
    states:
      Alive:
        Base: reindeer_buck
      Critical:
        Base: reindeer_buck_dead
      Dead:
        Base: reindeer_buck_dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 4
  - type: Bloodstream
    bloodReferenceSolution:
      reagents:
      - ReagentId: Blood
        Quantity: 300
    # Horns though
  - type: MeleeWeapon
    damage:
      types:
        Piercing: 22
    animation: WeaponArcFist
  - type: NPCRetaliation
  - type: FactionException
  - type: NpcFactionMember
    factions:
    - Passive
  - type: HTN
    rootTask:
      task: SimpleHostileCompound
  - type: Puller
    needsHands: false

- type: entity
  name: reindeer doe
  parent: MobReindeerBuck
  id: MobReindeerDoe
  components:
  - type: MeleeWeapon
    damage:
      types:
        Blunt: 15
    animation: WeaponArcFist
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: reindeer_doe
      sprite: Mobs/Animals/reindeer_doe.rsi
#  - type: SpriteMovement  # One day when this shit isnt broken as hell. For now they hoppity hop.
#    movementLayers:
#      movement:
#        state: reindeer_doe
#    noMovementLayers:
#      movement:
#        state: reindeer_doe_still
  - type: DamageStateVisuals
    states:
      Alive:
        Base: reindeer_doe
      Critical:
        Base: reindeer_doe_dead
      Dead:
        Base: reindeer_doe_dead

- type: entity
  parent: MobCorgiBase
  id: MobCorgiSmart
  name: smart corgi
  description: An unusually smart dog.
  components:
  # Use corgi sprite, need to add handcuff layer
  - type: Sprite
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: corgi
    - map: [ "enum.HumanoidVisualLayers.Handcuffs" ]
      color: "#ffffff"
      sprite: Objects/Misc/handcuffs.rsi # Would do a custom dog handcuff sprite but unfortunately handcuffs have their overlay baked-in to the cuff itself so this is mostly filler
      state: body-overlay-2
      visible: false
  - type: UserInterface
    interfaces:
      enum.StrippingUiKey.Key:
        type: StrippableBoundUserInterface
      enum.StorageUiKey.Key:
        type: StorageBoundUserInterface
  # Custom inventory template
  - type: Inventory
    speciesId: dog
    templateId: SmartCorgi
    displacements:
      belt:
        sizeMaps:
          32:
            sprite: Mobs/Pets/displacements.rsi
            state: corgi_belt_displacement
      ears:
        sizeMaps:
          32:
            sprite: Mobs/Pets/displacements.rsi
            state: corgi_belt_displacement
      head:
        sizeMaps:
          32:
            sprite: Mobs/Pets/displacements.rsi
            state: corgi_head_displacement
  - type: Hands # HANDS!
  - type: Puller
  - type: Cuffable # bad dog!
  - type: BlockWriting # dogs can't write, paws unwieldy; mouth-writing is a myth
  - type: Stripping
  - type: ComplexInteraction
  # Implement custom borgi body type
  - type: Body
    prototype: SmartCorgi
  - type: RotationVisuals
    defaultRotation: 90
    horizontalRotation: 180
  - type: Grammar
    attributes:
      gender: epicene # Gender neutral
      proper: true
  - type: Tag
    tags:
    - VimPilot
    - CanPilot
    - DoorBumpOpener
  - type: StatusIcon # marks them as crew
    bounds: -0.5,-0.5,0.5,0.5
  - type: NpcFactionMember
    factions:
    - NanoTrasen
