- type: entity
  id: NFMobPet
  abstract: true
  components:
  - type: GhostRole
  - type: IntrinsicRadioReceiver
  - type: CargoSellBlacklist
  - type: ShipyardSellCondition # The SR can no longer sell Clippy
    blockSale: true
    reason: shipyard-console-cute-pets

- type: entity
  id: MobCatClippy
  parent: [NFMobPet, MobCatGhost]
  name: Clippy
  description: It looks like you’re writing a letter, would you like help?
  components:
  - type: GhostRole
    name: ghost-role-information-clippy-name
    description: ghost-role-information-clippy-description
    rules: ghost-role-information-nonantagonist-rules
    prototype: CatClippy
    mindRoles: [ MindRoleGhostRoleNeutral ]
  - type: Loadout
    prototypes: [ MobClippyGear ]
  - type: RandomMetadata
    nameSegments: null
  - type: AutoImplant
    implants:
    - MindShieldImplant
    - MedicalTrackingImplant
  - type: Butcherable
    spawned:
    - id: FoodMeatCat
      amount: 1
#    - id: MaterialHideClippy
  - type: IntrinsicRadioTransmitter
    channels:
    - Service
  - type: ActiveRadio
    channels:
    - Service
  - type: NpcFactionMember
    factions:
      - Cat
      - PetsNT
  - type: ShowJobIcons

- type: entity
  id: MobCatClarpy
  parent: [NFMobPet, MobCatGhost]
  name: Clarpy
  description: First cat to gain a bounty.
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: _NF/Mobs/Pets/cat.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: piratecat
  - type: DamageStateVisuals
    states:
      Alive:
        Base: piratecat
      Critical:
        Base: piratecat
      Dead:
        Base: piratecat
  - type: GhostRole
    name: ghost-role-information-clarpy-name
    description: ghost-role-information-clarpy-description
    rules: ghost-role-information-clarpy-rules
    prototype: CatClarpy
    mindRoles: [ MindRoleGhostRoleNFPirate ]
  - type: Loadout
    prototypes: [ MobClarpyGear ]
  - type: ReplacementAccent
    accent: pirateCat
  - type: RandomMetadata
    nameSegments: [NamesCatClarpy]
  - type: AutoImplant
    implants:
    - FreelanceTrackingImplant
  - type: IntrinsicRadioTransmitter
    channels:
    - Freelance
  - type: ActiveRadio
    channels:
    - Freelance
  - type: NpcFactionMember
    factions:
    - Cat # Shouldn't be innately hostile to NT-aligned mobs
  - type: PirateAccent
  - type: Speech
    audioParams:
      volume: -2
      rolloffFactor: 4.5
      pitch: 0.7
  - type: AutoPirate
    applyFaction: false

- type: entity
  id: MobCatCappy
  parent: [NFMobPet, MobCatGhost, ShowSecurityIcons]
  name: Cappy
  description: First cat to shoot a gun.
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: _NF/Mobs/Pets/cat.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: nfsdcat
  - type: DamageStateVisuals
    states:
      Alive:
        Base: nfsdcat
  - type: GhostRole
    name: ghost-role-information-cappy-name
    description: ghost-role-information-cappy-description
    rules: ghost-role-information-nonantagonist-rules
    prototype: CatCappy
    mindRoles: [ MindRoleGhostRoleNeutral ]
  - type: Loadout
    prototypes: [ MobCappyGear ]
  - type: ReplacementAccent
    accent: nfsdCat
  - type: RandomMetadata
    nameSegments: null
  - type: AutoImplant
    implants:
    - MindShieldImplant
    - TrackingImplant
    - LightImplant
  - type: FlashImmunity
  - type: IntrinsicRadioTransmitter
    channels:
    - Nfsd
  - type: ActiveRadio
    channels:
    - Nfsd
  - type: MeleeWeapon
    damage:
      types:
        Piercing: 0 # Declawed cat
  - type: StaminaDamageOnHit
    damage: 18
  - type: NpcFactionMember
    factions:
    - Cat
    - NanoTrasen
  - type: Speech
    speechSounds: NfsdCat
    speechVerb: SmallMob
  - type: Vocal
    sounds:
      Male: NfsdCat
      Female: NfsdCat
      Unsexed: NfsdCat
  - type: InteractionPopup
    interactSuccessSound:
      path: /Audio/_NF/Animals/nfsdcat_meow.ogg
  - type: PirateBountyItem
    id: Cappy
  - type: SouthernAccent

- type: entity
  id: MobCatElCapo
  parent: [NFMobPet, MobBingusGhost]
  name: El Capo
  description: Wanted for countless cat crimes.
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: _NF/Mobs/Pets/cat.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: crimecat
  - type: DamageStateVisuals
    states:
      Alive:
        Base: crimecat
  - type: GhostRole
    name: ghost-role-information-elcapo-name
    description: ghost-role-information-elcapo-description
    rules: ghost-role-information-freeagent-rules
    mindRoles: [ MindRoleGhostRoleFreeAgentHarmless ]
  - type: RandomMetadata
    nameSegments: null
  - type: AutoImplant
    implants:
    - TrackingImplant
  - type: NpcFactionMember
    factions:
    - Cat

- type: entity
  id: MobCatCurie
  parent: [NFMobPet, MobAdultSlimes, MobCatGhost]
  name: Curie
  description: Slime? Cat? What are you?
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: _NF/Mobs/Pets/cat.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: slimecat
  - type: DamageStateVisuals
    states:
      Alive:
        Base: slimecat
  - type: Temperature
    heatDamageThreshold: 423
    coldDamageThreshold: -40
  - type: MovementAlwaysTouching
  - type: PressureImmunity
  - type: Insulated
  - type: GhostRole
    name: ghost-role-information-curie-name
    description: ghost-role-information-curie-description
    rules: ghost-role-information-nonantagonist-rules
    prototype: CatCurie
    mindRoles: [ MindRoleGhostRoleNeutral ]
  - type: Loadout
    prototypes: [ MobCurieGear ]
  - type: RandomMetadata
    nameSegments: null
  - type: AutoImplant
    implants:
    - MindShieldImplant
    - MedicalTrackingImplant
  - type: IntrinsicRadioTransmitter
    channels:
    - Engineering
  - type: ActiveRadio
    channels:
    - Engineering
  - type: NpcFactionMember
    factions:
      - Cat
      - PetsNT
  - type: AutoToggleableOuterClothing
  - type: Vocal
    sounds:
      Male: SlimeCat
      Female: SlimeCat
      Unsexed: SlimeCat
  - type: RussianAccent
  - type: Speech
    speechVerb: Slime
    speechSounds: Slime
    allowedEmotes:
    - Hiss
    - Meow
    - Growl
    - Purr
    - Squish
    - Bubble
    - Pop
  - type: TypingIndicator
    proto: slime

- type: entity
  id: MobCatClugg
  parent: [NFMobPet, MobCatCaracalGhost]
  name: Clugg
  description: A prehistoric saber-toothed cat. Loves steak.
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: _NF/Mobs/Pets/cat.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: cavecat
  - type: DamageStateVisuals
    states:
      Alive:
        Base: cavecat
  - type: GhostRole
    name: ghost-role-information-clugg-name
    description: ghost-role-information-clugg-description
    rules: ghost-role-information-nonantagonist-rules
    mindRoles: [ MindRoleGhostRoleNeutral ]
  - type: RandomMetadata
    nameSegments: null
  - type: NpcFactionMember
    factions:
    - Cat # Needs to be neutral to dinosaurs.
  - type: NFSalvageMobRestrictions
    despawnIfOffLinkedGrid: false
    addComponentsOnDeath: []
    removeComponentsOnDeath: []
  - type: CavemanAccent

- type: entity
  id: MobCatMistake
  parent: MobCatGhost
  name: Mistake
  description: "???"
  components:
  - type: Sprite
    sprite: _NF/Mobs/Pets/cat.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: mistakecat
  - type: DamageStateVisuals
    states:
      Alive:
        Base: mistakecat
  - type: GhostRole
    name: ghost-role-information-mistake-name
    description: ghost-role-information-mistake-description
    rules: ghost-role-information-freeagent-rules
    mindRoles: [ MindRoleGhostRoleFreeAgentHarmless ]
    prototype: CatMistake
  - type: ReplacementAccent
    accent: mistakeCat
  - type: RandomMetadata
    nameSegments: [NamesCatMistake]
  - type: Vocal
    sounds:
      Male: CatMistake
      Female: CatMistake
      Unsexed: CatMistake
  - type: InteractionPopup
    successChance: 0.0
    interactFailureString: petting-failure-mistake
  - type: MovementSpeedModifier
    baseWalkSpeed : 6
    baseSprintSpeed : 6
  - type: NFSalvageMobRestrictions
    despawnIfOffLinkedGrid: false
    addComponentsOnDeath: []
    removeComponentsOnDeath: []
  - type: NpcFactionMember
    factions:
    - Cat
  - type: Respirator # Paranormal cat: doesn't need to breathe (but it will)
    updateInterval: 99999 # Shouldn't run often, if ever.
    suffocationThreshold: -100 # Should never happen.
    damage:
      types: {}
    damageRecovery:
      types: {}

- type: entity
  id: MobCatBloodCult
  parent: [NFMobPet, MobCatMistake]
  name: blood cult cat
  description: Founded the Blood Cult out of boredom.
  components:
  - type: Body
    prototype: Bloodsucker
    requiredLegs: 1
  - type: MeleeWeapon
    damage:
      types:
        Slash: 1
        Bloodloss: 1
  - type: Sprite
    drawdepth: Mobs
    sprite: _NF/Mobs/Pets/cat.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: cultcat
    - map: [ "enum.DamageStateVisualLayers.BaseUnshaded" ]
      state: cultcat_unshaded
      shader: unshaded
  - type: DamageStateVisuals
    states:
      Alive:
        Base: cultcat
        BaseUnshaded: cultcat_unshaded
      Critical:
        Base: cultcat
        BaseUnshaded: mask_null
      Dead:
        Base: cultcat
        BaseUnshaded: mask_null
  - type: GhostRole
    name: ghost-role-information-cult-cat-name
    description: ghost-role-information-cult-cat-description
    rules: ghost-role-information-cult-cat-rules
    mindRoles: [ MindRoleGhostRoleFreeAgentHarmless ]
    prototype: CatBloodCult
  - type: RandomMetadata
    nameSegments: [ NamesCatCult ]
  - type: AutoImplant
    implants:
    - RedLightImplant
    - DissonantWhispersImplant
    - MedicalTrackingImplant
  - type: IntrinsicRadioTransmitter
    channels:
    - Science
  - type: ActiveRadio
    channels:
    - Science
  - type: ActionGun
    action: ActionEldritchPush
    gunProto: EldritchPushGun

- type: entity
  id: EldritchPushGun
  name: eldritch hand gun
  description: Shoots an eldritch hand.
  categories: [ HideSpawnMenu ]
  components:
  - type: RechargeBasicEntityAmmo
    rechargeCooldown: 300
    rechargeSound:
      path: /Audio/Magic/fireball.ogg
  - type: BasicEntityAmmoProvider
    proto: BulletEldritchHand
    capacity: 1
    count: 1
  - type: Gun
    soundGunshot:
      path: /Audio/Effects/teleport_arrival.ogg
    soundEmpty: null
    projectileSpeed: 3

- type: entity
  id: ActionEldritchPush
  parent: BaseAction
  name: "[color=yellow]Force Push[/color]"
  description: "Summon forth an eldritch hand. [color=yellow]5 minute cooldown.[/color]"
  categories: [ HideSpawnMenu ]
  components:
  - type: Action
    icon: { sprite : _NF/Effects/bloodcultprojectiles.rsi, state: hand }
    priority: 2
    itemIconStyle: BigAction
    useDelay: 300
  - type: TargetAction
    checkCanAccess: false
    range: 0
  - type: WorldTargetAction
    event: !type:ActionGunShootEvent

# Adopted from space-wizards #26265 (Thank you, PolterTzi)
- type: entity
  id: MobKoboldYipyip
  parent: MobKobold
  name: Yip Yip
  description: He lives in a pineapple on the Frontier!
  components:
  - type: GhostRole
    prob: 1
    makeSentient: true
    allowSpeech: true
    allowMovement: true
    prototype: KoboldYipyip
    name: ghost-role-information-yipyip-name
    description: ghost-role-information-yipyip-description
    rules: ghost-role-information-nonantagonist-rules
  - type: GhostTakeoverAvailable
  - type: Butcherable
    butcheringType: Spike
    spawned:
    - id: FoodMeat
      amount: 2
    - id: DrinkPremiumRumBottleFull
      amount: 1
  - type: Tag
    tags:
    - CannotSuicide
    - DoorBumpOpener
    - VimPilot
    - AnomalyHost
  - type: Loadout
    prototypes: [ MobKoboldGear ]
  - type: Grammar
    attributes:
      proper: true
      gender: male
  - type: RandomSprite # Random with one choice.
    available:
    - enum.DamageStateVisualLayers.Base:
        kobold: YipYipColors
    - horns:
        horns_curled: YipYipHornColors
  - type: CargoSellBlacklist
