# SPDX-FileCopyrightText: 2024 Aiden <aiden@djkraz.com>
# SPDX-FileCopyrightText: 2024 Aidenkrz <aiden@djkraz.com>
# SPDX-FileCopyrightText: 2024 BeeRobynn <166929042+BeeRobynn@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Piras314 <p1r4s@proton.me>
# SPDX-FileCopyrightText: 2024 yglop <95057024+yglop@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Aineias1 <142914808+Aineias1@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Armok <155400926+ARMOKS@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Astends <elliotnrothman@gmail.com>
# SPDX-FileCopyrightText: 2025 AstroDogeDX <48888500+AstroDogeDX@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Aviu00 <93730715+Aviu00@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 CerberusWolfie <wb.johnb.willis@gmail.com>
# SPDX-FileCopyrightText: 2025 Errant <35878406+Errant-4@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Fishbait <Fishbait@git.ml>
# SPDX-FileCopyrightText: 2025 GoobBot <uristmchands@proton.me>
# SPDX-FileCopyrightText: 2025 John Willis <143434770+CerberusWolfie@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 OnsenCapy <101037138+OnsenCapy@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Solstice <solsticeofthewinter@gmail.com>
# SPDX-FileCopyrightText: 2025 deltanedas <39013340+deltanedas@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 fishbait <gnesse@gmail.com>
# SPDX-FileCopyrightText: 2025 gluesniffler <159397573+gluesniffler@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 grub <unalterableness@gmail.com>
# SPDX-FileCopyrightText: 2025 loltart <159829224+loltart@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 loltart <lo1tartyt@gmail.com>
# SPDX-FileCopyrightText: 2025 shityaml <unalterableness@gmail.com>
#
# SPDX-License-Identifier: AGPL-3.0-or-later

- type: entity
  name: gondola
  parent:
    - MobRespirator
    - MobAtmosStandard
    - BaseSimpleMob
    - MobBloodstream
    - MobFlammable
  id: MobGondola
  description: Having no hands he embodies the Taoist principle of wu-wei (non-action) while his smiling facial expression shows his utter and complete acceptance of the world as it is.
  components:
  - type: Hunger
    thresholds:
      Overfed: 100
      Okay: 50
      Peckish: 25
      Starving: 10
      Dead: 0
    baseDecayRate: 0.00925925925926
  - type: Thirst
    thresholds:
      OverHydrated: 200
      Okay: 150
      Thirsty: 100
      Parched: 50
      Dead: 0
    baseDecayRate: 0.04
  - type: StatusEffects
    allowed:
      - Stun
      - KnockedDown
      - SlowedDown
      - Stutter
      - Electrocution
      - ForcedSleep
      - TemporaryBlindness
      - Pacified
      - StaminaModifier
  - type: FloatingVisuals
  - type: NpcFactionMember
    factions:
    - Passive
  - type: MovementSpeedModifier
    baseWalkSpeed: 1
    baseSprintSpeed: 2
  - type: RandomSprite
    available:
        - enum.DamageStateVisualLayers.Base:
            gondola_body_long: GondolaBrowns
            gondola_body_medium: GondolaBrowns
          enum.DamageStateVisualLayers.BaseUnshaded:
            gondola_moustache_large: ""
            gondola_moustache_small: ""
        - enum.DamageStateVisualLayers.Base:
            gondola_body_medium: GondolaBrowns
            gondola_body_short: GondolaBrowns
          enum.DamageStateVisualLayers.BaseUnshaded:
            gondola_moustache_large_short: ""
            gondola_moustache_small_short: ""
  - type: Sprite
    sprite: _Goobstation/Mobs/Animals/gondola.rsi
    layers:
      - state: gondola_body_medium
        map: [ "enum.DamageStateVisualLayers.Base" ]
      - state: gondola_moustache_large
        map: [ "enum.DamageStateVisualLayers.BaseUnshaded" ]
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.2
        density: 50
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: DamageStateVisuals
    states:
      Critical:
        Base: gondola_dead
      Dead:
        Base: gondola_dead
  - type: Butcherable
    spawned:
    - id: FoodMeatGondola
      amount: 3
  - type: Bloodstream
    bloodMaxVolume: 150
  - type: Damageable
    damageContainer: Biological
    damageModifierSet: Scale
  - type: Tag
    tags:
    - VimPilot
  - type: Speech
    speechVerb: Gondola
    speechSounds: Bass
  - type: ReplacementAccent
    accent: gondola
  - type: LanguageSpeaker # Einstein Engines - Language
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - TauCetiBasic # Replacement Accent will have to do for now until custom language.
    understands:
    - TauCetiBasic # Replacement Accent will have to do for now until custom language.
  - type: HTN
    rootTask:
      task: IdleCompound
  - type: Body
    prototype: Animal
    bodyType: Simple
  - type: Climbing
  - type: NameIdentifier
    group: GenericNumber
  - type: SlowOnDamage
    speedModifierThresholds:
      60: 0.7
      80: 0.5
  - type: MobPrice
    price: 1000 # Living critters are valuable in space.
  - type: Perishable

- type: entity
  name: syndiroach
  id: MobMothSyndy
  parent: MobMothroach
  description: Explosive moth.
  components:
  - type: Sprite
    sprite: _Goobstation/Mobs/Animals/syndiroach.rsi
  - type: Clothing
    quickEquip: false
    sprite: _Goobstation/Mobs/Animals/syndiroach.rsi
    equippedPrefix: 0
    slots:
    - HEAD
  - type: GhostRole
    prob: 1
    name: ghost-role-information-SyndiRoach-name
    allowMovement: true
    description: ghost-role-information-SyndiRoach-description
    rules: ghost-role-information-SyndiRoach-rules
    mindRoles:
    - MindRoleGhostRoleTeamAntagonist
    raffle:
      settings: default
  - type: GhostTakeoverAvailable
  - type: AutoImplant
    implants:
    - MicroBombImplant
  - type: ExplosionResistance
    damageCoefficient: 0.2
  - type: NpcFactionMember
    factions:
    - Syndicate
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Moffic
    understands:
    - Moffic
    - TauCetiBasic # Needs to understand your nukie ops.

- type: entity
  name: syndie bee
  suffix: Angry, syndicate
  parent: [ MobAngryBee ]
  id: MobSyndieAngryBee
  description: How nice a bee. Oh no, it looks angry and wants my pizza.
  components:
  - type: NpcFactionMember
    factions:
    - SimpleHostile
    - Syndicate

- type: entity
  suffix: Angry, weak
  id: MobAngryBeeWeak
  parent: MobAngryBee
  components:
  - type: MeleeWeapon
    attackRate: 2
    damage:
      types:
        Piercing: 1
  - type: TimedDespawn
    lifetime: 7
  - type: HTN
    blackboard:
      VisionRadius: !type:Single
        3
      AggroVisionRadius: !type:Single
        3

- type: entity
  name: lootbug
  id: MobLootbug
  parent: SimpleSpaceMobBase
  description: It eats metal, maybe it's eaten something of value?
  components:
  - type: Sprite
    drawdepth: SmallMobs
    sprite: _Goobstation/Mobs/Animals/lootbug.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: lootbug
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.2
        density: 100
        mask:
        - SmallMobMask
        layer:
        - SmallMobLayer
  - type: GhostRole
    makeSentient: true
    allowSpeech: true
    allowMovement: true
    name: ghost-role-information-lootbug-name
    description: ghost-role-information-lootbug-description
    rules: ghost-role-information-freeagent-rules
    mindRoles:
    - MindRoleGhostRoleFreeAgent
  - type: GhostTakeoverAvailable
  - type: Speech
    speechVerb: SmallMob
    speechSounds: Squeak
    allowedEmotes: ['Squeak']
  - type: LanguageSpeaker # Einstein Engines - Language
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - TauCetiBasic
    understands:
    - TauCetiBasic
  - type: MobState
  - type: DamageStateVisuals
    states:
      Alive:
        Base: lootbug
      Dead:
        Base: lootbug_dead
  - type: MobThresholds
    thresholds:
      0: Alive
      100: Dead
  - type: Bloodstream
    bloodReagent: InsectBlood
    bloodMaxVolume: 40
  - type: Tag
    tags:
    - Trash
    - VimPilot
  - type: Butcherable
    spawned: []
    #- id: SpawnLootLootbug
  - type: NpcFactionMember # they're pests, makes them the target of shiva and aves
    factions:
      - Mouse
  - type: VentCrawler # goobstation - Ventcrawl
  - type: Devourer
    structureDevourTime: 3
    foodPreferenceWhitelist:
      tags:
      - Ingot
      - Metal
      - Steel
      - Ore
      - Telecrystal
    stomachStorageWhitelist:
      components:
      - Item
    chemical: Ichor
    healRate: 7.5
    whitelist:
      tags:
      - Ingot
      - Metal
      - Steel
      - Ore
      - Telecrystal
  - type: MobPrice
    price: 500

- type: entity
  name: space carp
  id: MobCarpSentient
  parent: [ SimpleSpaceMobBase, FlyingMobBase, MobCombat ]
  description: It's a space carp. Used to be a person.
  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
      200: Dead
  - type: MovementSpeedModifier
    baseWalkSpeed: 2.5
    baseSprintSpeed: 3.5
  - type: Stamina
    critThreshold: 100
  - type: DamageStateVisuals
    states:
      Alive:
        Base: alive
        BaseUnshaded: mouth
      Dead:
        Base: dead
        BaseUnshaded: dead_mouth
  - type: Butcherable
    spawned:
    - 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: 10
        Slash: 10
  - type: TypingIndicator
    proto: alien
  - type: Tag
    tags:
    - Carp
    - DoorBumpOpener
  - type: InteractionPopup
    interactSuccessString: petting-success-carp
    interactFailureString: petting-failure-carp
    interactFailureSound:
      path: /Audio/Effects/bite.ogg
  - type: Body # Shitmed: Special carp organs
    prototype: Carp
    bodyType: Simple
  - type: SurgeryTarget # Shitmed
  - type: UserInterface # Shitmed
    interfaces:
      enum.SurgeryUIKey.Key:
        type: SurgeryBui
  - type: NightVision # Goobstation - Nigthvision
    color: "#808080"
    activateSound: null
    deactivateSound: null
  - type: LanguageKnowledge # Einstein Engines - Language (prevent universal)
    speaks:
    - TauCetiBasic # Is sentient, should have TauCeti since it's the norm.
    understands:
    - TauCetiBasic


- type: entity
  name: strange mouse
  parent: MobMouse
  id: MobMouseSentient
  description: Squeak! Used to be a person!
  components:
  - type: MobThresholds
    thresholds:
      0: Alive
      40: Critical
      80: Dead
  - type: Tag
    tags:
    - Trash
    - VimPilot
    - ChefPilot
    - Mouse
    - Meat
  - type: MeleeWeapon
    soundHit:
      path: /Audio/Effects/bite.ogg
    angle: 0
    animation: WeaponArcBite
    damage:
      types:
        Piercing: 5

- type: entity
  name: homunculus
  id: MobHomunculus
  parent: SimpleMobBase
  description: What a wretched beast...
  components:
  - type: Sprite
    drawdepth: SmallMobs
    sprite: _Goobstation/Mobs/Animals/homunculus.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: homunculus
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.2
        density: 100
        mask:
        - SmallMobMask
        layer:
        - SmallMobLayer
  - type: GhostRole
    makeSentient: true
    allowSpeech: true
    allowMovement: true
    name: ghost-role-information-homunculus-name
    description: ghost-role-information-homunculus-description
    rules: ghost-role-information-familiar-rules
  - type: GhostTakeoverAvailable
  - type: Speech
    speechSounds: Alto
  - type: MobState
  - type: DamageStateVisuals
    states:
      Alive:
        Base: homunculus
      Dead:
        Base: homunculus_dead
  - type: MobThresholds
    thresholds:
      0: Alive
      50: Dead
  - type: Bloodstream
    bloodReagent: Blood
    bloodMaxVolume: 40
  - type: Tag
    tags:
    - Trash
    - VimPilot
  - type: NpcFactionMember
    factions:
      - SimpleHostile
  - type: VentCrawler
  - type: MeleeWeapon
    altDisarm: false
    angle: 0
    animation: WeaponArcBite
    soundHit:
      path: /Audio/Effects/bite.ogg
    damage:
      types:
        Slash: 10
  - type: Item
    size: Tiny
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - TauCetiBasic # Is sentient, should have TauCeti since it is norm.
    understands:
    - TauCetiBasic

- type: entity
  parent: MobMouse
  id: MouseMenace
  name: menace
  components:
  - type: EnchantFill
    enchants:
      EnchantInsulated: 1 # eat ALL the wires
      EnchantUnbreaking: 3 # very hard to kill
      EnchantSharpness: 5 # hit hard ye

- type: entity
  name: Clown Ian
  parent: MobCorgiIan
  id: MobCorgiIanClown
  description: Honkmother's favorite corgi.
  components:
    - type: Sprite
      drawdepth: Mobs
      sprite: _Goobstation/Mobs/Animals/clown_ian.rsi
      layers:
      - map: ["enum.DamageStateVisualLayers.Base"]
        state: clown_ian
    - type: DamageStateVisuals
      states:
        Alive:
          Base: clown_ian
        Critical:
          Base: clown_ian_dead
        Dead:
          Base: clown_ian_dead
    - type: Grammar
      attributes:
        proper: true
        gender: male
    - type: AutoImplant
      implants:
      - SadTromboneImplant
      - BikeHornImplant
    - type: FootstepModifier
      footstepSoundCollection:
        collection: FootstepClown
    - type: Speech
      speechVerb: Cluwne
    - type: Bloodstream
      bloodMaxVolume: 150
      bloodReagent: Laughter
    - type: Clumsy
    - type: NoSlip
    - type: Tag
      tags:
      - FootstepSound

- type: entity
  name: brullbar
  id: MobBrullbar
  parent: [ SimpleSpaceMobBase, MobCombat ]
  description: Oh god.
  components:
  - type: MovementSpeedModifier
    baseWalkSpeed: 4
    baseSprintSpeed: 4
  - type: HTN
    rootTask:
      task: SimpleHostileCompound
  - type: SpamEmitSound
    minInterval: 5
    maxInterval: 15
    sound:
      path: /Audio/_Goobstation/Wraith/Mobs/brullbar/brullbar_roar.ogg
      params:
          volume: 1
          maxDistance: 20
          variation: 0.01
  - type: NpcFactionMember
    factions:
    - SimpleHostile
  - type: Sprite
    drawdepth: Mobs
    sprite: _Goobstation/Mobs/Animals/brullbar.rsi
    layers:
    - map: [ "enum.DamageStateVisualLayers.Base" ]
      state: brullbar
  - type: DamageStateVisuals
    states:
      Alive:
        Base: brullbar
      Dead:
        Base: dead
  - type: MobThresholds
    thresholds:
      0: Alive
      80: Dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 3
    - id: AnomalyCoreIce
      amount: 1
      prob: 0.01
  - type: ReplacementAccent
    accent: genericAggressive
  - type: Fauna # Lavaland Change

- type: entity
  name: brullbar king
  id: MobBrullbarKing
  parent: MobBrullbar
  description: Looks mean, is mean. You better run.
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: _Goobstation/Mobs/Animals/brullbar.rsi
    layers:
    - map: [ "enum.DamageStateVisualLayers.Base" ]
      state: brullbarking
  - type: DamageStateVisuals
    states:
      Alive:
        Base: brullbarking
      Dead:
        Base: kingdead
  - type: MobThresholds
    thresholds:
      0: Alive
      200: Dead
  - type: MovementSpeedModifier
    baseWalkSpeed : 4
    baseSprintSpeed : 6
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 3
    - id: AnomalyCoreIce
      amount: 1
      prob: 0.2

- type: entity
  name: bear
  id: MobBearGoon
  parent: [ SimpleSpaceMobBase, MobCombat ]
  description: Why are you staring? Never seen a bear before?
  components:
  - type: HTN
    rootTask:
      task: SimpleHostileCompound
  - type: NpcFactionMember
    factions:
    - SimpleHostile
  - type: Sprite
    drawdepth: Mobs
    sprite: _Goobstation/Mobs/Animals/brullbar.rsi
    layers:
    - map: [ "enum.DamageStateVisualLayers.Base" ]
      state: bear
  - type: DamageStateVisuals
    states:
      Alive:
        Base: bear
      Dead:
        Base: beardead
  - type: MovementSpeedModifier
    baseWalkSpeed : 4
    baseSprintSpeed : 4
  - type: MobThresholds
    thresholds:
      0: Alive
      100: Dead
  - type: Butcherable
    spawned:
    - id: FoodMeatBear
      amount: 1
  - type: ReplacementAccent
    accent: genericAggressive
  - type: Fauna # Lavaland Change

- type: entity
  name: white wolf
  parent: [ SimpleMobBase, MobCombat ]
  id: MobWhiteWolf
  description: Don't try to pet this one.
  components:
    - type: HTN
      rootTask:
       task: SimpleHostileCompound
    - type: NpcFactionMember
      factions:
      - SimpleHostile
    - type: Sprite
      drawdepth: Mobs
      sprite: _Goobstation/Mobs/Animals/wolf.rsi
      layers:
      - map: ["enum.DamageStateVisualLayers.Base"]
        state: whitewolf
    - type: DamageStateVisuals
      states:
        Alive:
          Base: whitewolf
        Dead:
          Base: wolfdead
    - type: MovementSpeedModifier
      baseWalkSpeed : 3
      baseSprintSpeed : 5
    - type: MobThresholds
      thresholds:
        0: Alive
        50: Dead
    - type: MeleeWeapon
      altDisarm: false
      angle: 0
      animation: WeaponArcBite
      soundHit:
        path: /Audio/Effects/bite.ogg
      damage:
        types:
          Slash: 10
    - type: Butcherable
      spawned:
      - id: FoodMeat
        amount: 1
    - type: LanguageKnowledge # Einstein Engines - Language
      speaks:
      - Dog
      understands:
      - Dog

- type: entity
  name: horse
  parent: [SimpleMobBase, StripableInventoryBase]
  id: MobHorse
  description: Very foul creature. For those that feel like punching.
  components:
  - type: MovementSpeedModifier
    baseSprintSpeed: 5.5
    baseWalkSpeed: 4.5 # default walking speed
  - type: Sprite
    drawdepth: Mobs
    sprite: _Goobstation/Mobs/Horse/horse.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: horse
  - type: Physics
  - type: Speech
    speechVerb: HorseVerb
    speechSounds: HorseSpeech
  - type: LanguageSpeaker # Einstein Engines - Language
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Cheval
    understands:
    - Cheval
    - TauCetiBasic
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.3
        density: 185
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: FootstepModifier
    footstepSoundCollection:
      collection: FootstepHorse
  - type: Tag
    tags:
    - FootstepSound
    - DoorBumpOpener
    - CannotSuicide
  - type: Inventory
    speciesId: horse
    templateId: pet
  - type: DamageStateVisuals
    states:
      Alive:
        Base: horse
      Critical:
        Base: horse_dead
      Dead:
        Base: horse_dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 12
  - type: MobPrice
    price: 2000
  - type: InteractionPopup
    successChance: 0.25
    interactSuccessString: petting-success-horse
    interactFailureString: petting-failure-horse
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/_Goobstation/Animals/horse.ogg
  - type: Grammar
    attributes:
      proper: true
      gender: male
  - type: Sprinter
    staminaDrainRate: 2
  - type: TemperatureSpeed
    thresholds:
      293: 0.8
      280: 0.6
      260: 0.4

