- type: entity
  name: space carp
  id: BaseMobCarp
  parent: [ SimpleSpaceMobBase, FlyingMobBase, MobCombat, BaseSlicingRefinable, MobNightVision, BaseMobDestructible ]
  description: It's a space carp.
  abstract: true
  components:
    - type: InputMover
    - type: MobMover
    - type: HTN
      rootTask:
        task: SimpleHostileCompound
      blackboard:
        NavSmash: !type:Bool
          true
    - type: NpcFactionMember
      factions:
      - Dragon
    - type: Sprite
      drawdepth: Mobs
      sprite: Mobs/Aliens/Carps/space.rsi
      layers:
      - map: [ "enum.DamageStateVisualLayers.Base" ]
        state: alive
    - type: CombatMode
    - type: Physics
    - type: Fixtures
      fixtures:
        fix1:
          shape:
            !type:PhysShapeCircle
            radius: 0.40
          density: 80
          mask:
            - FlyingMobMask
          layer:
            - FlyingMobLayer
    - type: MobState
    - type: MobThresholds
      thresholds:
        0: Alive
        40: Dead
    - type: MovementSpeedModifier
      baseWalkSpeed: 2.5
      baseSprintSpeed: 3.5
    - type: Stamina
      baseCritThreshold: 100
    - type: DamageStateVisuals
      states:
        Alive:
          Base: alive
          BaseUnshaded: mouth
        Dead:
          Base: dead
          BaseUnshaded: dead_mouth
    - type: ToolRefinable
      refineResult:
      - id: FoodMeatFish
        amount: 2
      - id: MaterialToothSpaceCarp1
        amount: 1
        maxAmount: 4
    - type: MeleeWeapon
      altDisarm: false
      angle: 0
      animation: WeaponArcBite
      soundHit:
        path: /Audio/Effects/bite.ogg
      damage:
        types:
          Blunt: 5
          Slash: 7
    - type: TypingIndicator
      proto: alien
    - type: Tag
      tags:
        - Carp
        - DoorBumpOpener
        - CannotSuicide
    - type: ReplacementAccent
      accent: genericAggressive
    - type: Speech
      speechVerb: LargeMob
    - type: InteractionPopup
      interactSuccessString: petting-success-carp
      interactFailureString: petting-failure-carp
      interactFailureSound:
        path: /Audio/Effects/bite.ogg

- type: entity
  parent: BaseMobCarp
  id: MobCarp
  components:
  - type: Sprite
    layers:
    - map: [ "enum.DamageStateVisualLayers.Base" ]
      state: alive
    - map: [ "enum.DamageStateVisualLayers.BaseUnshaded" ]
      state: mouth
      shader: unshaded
  - type: RandomSprite
    available:
    - enum.DamageStateVisualLayers.Base:
        alive: Rainbow
      enum.DamageStateVisualLayers.BaseUnshaded:
        mouth: ""

- type: entity
  name: magicarp
  parent: BaseMobCarp
  id: MobCarpMagic
  description: Looks like some kind of fish. Might be magical.
  components:
  - type: Sprite
    sprite: Mobs/Aliens/Carps/magic.rsi
  - type: TypingIndicator
    proto: guardian

- type: entity
  name: holocarp
  parent: BaseMobCarp
  id: MobCarpHolo
  description: Carp made out of holographic energies. Sadly for you, it is very much real.
  components:
  - type: Sprite
    sprite: Mobs/Aliens/Carps/holo.rsi
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.40
        density: 10
        mask:
        - MobMask
        layer:
        - Opaque
  - type: TypingIndicator
    proto: robot

- type: entity
  parent: MobCarp
  id: MobCarpRainbow
  name: rainbow carp
  description: Wow such a shiny fishie!
  components:
  - type: PointLight
    radius: 1.5
    energy: 2
  - type: RgbLightController
    layers: [ 0 ]

- type: entity
  id: MobCarpSalvage
  parent: MobCarp
  suffix: "Salvage Ruleset"
  components:
    - type: SalvageMobRestrictions
    - type: MobThresholds
      thresholds:
        0: Alive
        30: Dead

- type: entity
  name: space carp
  id: MobCarpDragon
  suffix: DragonBrood
  parent: MobCarp
  components:
    - type: GhostRole
      allowMovement: true
      allowSpeech: true
      makeSentient: true
      name: ghost-role-information-sentient-carp-name
      description: ghost-role-information-sentient-carp-description
      rules: ghost-role-information-space-dragon-summoned-carp-rules
      mindRoles:
      - MindRoleGhostRoleTeamAntagonistFlock
    - type: GhostTakeoverAvailable
    - type: HTN
      rootTask:
        task: DragonCarpCompound
    - type: Flammable
      damage:
       types: {}
    - type: Temperature
    - type: TemperatureDamage
      heatDamageThreshold: 1200
- type: entity
  id: MobCarpDungeon
  parent: MobCarp
  suffix: Dungeon
  components:
  - type: MobThresholds
    thresholds:
      0: Alive
      50: Dead
  - type: SlowOnDamage
    speedModifierThresholds:
      25: 0.7
  - type: MeleeWeapon
    damage:
      types:
        Slash: 6

- type: entity
  name: sharkminnow
  parent: [ BaseMobBloodsucker, BaseMobCarp, BaseSlicingRefinable ]
  id: MobShark
  description: A dangerous shark from the blackness of endless space, who loves to drink blood.
  components:
  - type: Sprite
    sprite: Mobs/Aliens/Carps/sharkminnow.rsi
    layers:
    - map: [ "enum.DamageStateVisualLayers.Base" ]
      state: alive
    - map: [ "enum.DamageStateVisualLayers.BaseUnshaded" ]
      state: mouth
      shader: unshaded
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.40
        density: 100
        mask:
        - FlyingMobMask
        layer:
        - FlyingMobLayer
  - type: MobThresholds
    thresholds:
      0: Alive
      82: Dead # Might seem random, but this brings up the hits to kill with a crusher mark to 3
  - type: Stamina
    baseCritThreshold: 150
  - type: DamageStateVisuals
    states:
      Alive:
        Base: alive
        BaseUnshaded: mouth
      Dead:
        Base: dead
        BaseUnshaded: dead_mouth
  - type: ToolRefinable
    refineResult:
    - id: FoodMeatFish
      amount: 4
    - id: MaterialToothSharkminnow1
      amount: 3
  - type: MeleeWeapon
    damage:
      types:
        Slash: 10
        Bloodloss: 5

- type: entity
  id: MobSharkSalvage
  parent: MobShark
  suffix: "Salvage Ruleset"
  components:
  - type: SalvageMobRestrictions
