# SPDX-FileCopyrightText: 2021 Acruid <shatter66@gmail.com>
# SPDX-FileCopyrightText: 2021 Clyybber <darkmine956@gmail.com>
# SPDX-FileCopyrightText: 2021 FoLoKe <36813380+FoLoKe@users.noreply.github.com>
# SPDX-FileCopyrightText: 2021 Galactic Chimp <GalacticChimpanzee@gmail.com>
# SPDX-FileCopyrightText: 2021 Leo <lzimann@users.noreply.github.com>
# SPDX-FileCopyrightText: 2021 Metal Gear Sloth <metalgearsloth@gmail.com>
# SPDX-FileCopyrightText: 2021 Paul <ritter.paul1+git@googlemail.com>
# SPDX-FileCopyrightText: 2021 Paul Ritter <ritter.paul1@googlemail.com>
# SPDX-FileCopyrightText: 2021 Swept <sweptwastaken@protonmail.com>
# SPDX-FileCopyrightText: 2021 Tomeno <Tomeno@users.noreply.github.com>
# SPDX-FileCopyrightText: 2021 Tomeno <tomeno@lulzsec.co.uk>
# SPDX-FileCopyrightText: 2021 Vera Aguilera Puerto <6766154+Zumorica@users.noreply.github.com>
# SPDX-FileCopyrightText: 2021 Vera Aguilera Puerto <zddm@outlook.es>
# SPDX-FileCopyrightText: 2021 Visne <39844191+Visne@users.noreply.github.com>
# SPDX-FileCopyrightText: 2021 Ygg01 <y.laughing.man.y@gmail.com>
# SPDX-FileCopyrightText: 2021 collinlunn <60152240+collinlunn@users.noreply.github.com>
# SPDX-FileCopyrightText: 2021 cyclowns <cyclowns@protonmail.ch>
# SPDX-FileCopyrightText: 2021 komunre <49118681+komunre@users.noreply.github.com>
# SPDX-FileCopyrightText: 2021 mirrorcult <notzombiedude@gmail.com>
# SPDX-FileCopyrightText: 2022 Alex Evgrashin <aevgrashin@yandex.ru>
# SPDX-FileCopyrightText: 2022 CommieFlowers <rasmus.cedergren@hotmail.com>
# SPDX-FileCopyrightText: 2022 EmoGarbage404 <98561806+EmoGarbage404@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Jacob Tong <10494922+ShadowCommander@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Jezithyr <Jezithyr@gmail.com>
# SPDX-FileCopyrightText: 2022 Moony <moonheart08@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Pancake <Pangogie@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Peptide90 <78795277+Peptide90@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Rane <60792108+Elijahrane@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 T-Stalker <43253663+DogZeroX@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 TekuNut <13456422+TekuNut@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 dontbetank <59025279+dontbetank@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 metalgearsloth <metalgearsloth@gmail.com>
# SPDX-FileCopyrightText: 2022 mirrorcult <lunarautomaton6@gmail.com>
# SPDX-FileCopyrightText: 2022 rolfero <45628623+rolfero@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 wrexbe <81056464+wrexbe@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 AJCM-git <60196617+AJCM-git@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 DrSmugleaf <DrSmugleaf@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 DrSmugleaf <drsmugleaf@gmail.com>
# SPDX-FileCopyrightText: 2023 Ed <96445749+TheShuEd@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Jezithyr <jezithyr@gmail.com>
# SPDX-FileCopyrightText: 2023 Kara <lunarautomaton6@gmail.com>
# SPDX-FileCopyrightText: 2023 Leon Friedrich <60421075+ElectroJr@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 metalgearsloth <comedian_vs_clown@hotmail.com>
# SPDX-FileCopyrightText: 2023 pofitlo <107665898+pofitlo@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 themias <89101928+themias@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Cojoke <83733158+Cojoke-dot@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Emisse <99158783+Emisse@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Errant <35878406+Errant-4@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 JustCone <141039037+JustCone14@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Mervill <mervills.email@gmail.com>
# SPDX-FileCopyrightText: 2024 Mr. 27 <45323883+Dutch-VanDerLinde@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 PJBot <pieterjan.briers+bot@gmail.com>
# SPDX-FileCopyrightText: 2024 Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
# SPDX-FileCopyrightText: 2024 Piras314 <p1r4s@proton.me>
# SPDX-FileCopyrightText: 2024 PopGamer46 <yt1popgamer@gmail.com>
# SPDX-FileCopyrightText: 2024 Spessmann <156740760+Spessmann@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Whisper <121047731+QuietlyWhisper@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Winkarst <74284083+Winkarst-cpu@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 coolboy911 <85909253+coolboy911@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 deltanedas <39013340+deltanedas@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 deltanedas <@deltanedas:kde.org>
# SPDX-FileCopyrightText: 2024 lunarcomets <140772713+lunarcomets@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 lzk <124214523+lzk228@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 saintmuntzer <47153094+saintmuntzer@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 username <113782077+whateverusername0@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 whateverusername0 <whateveremail>
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 BombasterDS <deniskaporoshok@gmail.com>
# SPDX-FileCopyrightText: 2025 BombasterDS2 <shvalovdenis.workmail@gmail.com>
# SPDX-FileCopyrightText: 2025 GoobBot <uristmchands@proton.me>
# SPDX-FileCopyrightText: 2025 Ilya246 <57039557+Ilya246@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 John Willis <143434770+CerberusWolfie@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Rinary <72972221+Rinary1@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Rouden <149893554+Roudenn@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Roudenn <romabond091@gmail.com>
# SPDX-FileCopyrightText: 2025 Solstice <solsticeofthewinter@gmail.com>
# SPDX-FileCopyrightText: 2025 gluesniffler <159397573+gluesniffler@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 gluesniffler <linebarrelerenthusiast@gmail.com>
# SPDX-FileCopyrightText: 2025 metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 slarticodefast <161409025+slarticodefast@users.noreply.github.com>
#
# SPDX-License-Identifier: AGPL-3.0-or-later
# The progenitor. This should only container the most basic components possible.
# Only put things on here if every mob *must* have it. This includes ghosts.
- type: entity
  save: false
  id: BaseMob
  abstract: true
  components:
  - type: Sprite
    noRot: true
    drawdepth: Mobs
  - type: MobCollision
  - type: Physics
    bodyType: KinematicController
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 50
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Clickable
  - type: InteractionOutline
  - type: InputMover
  - type: Input
    context: "human"
  - type: LagCompensation
  - type: MobMover
  - type: Actions
  - type: Alerts
  - type: Appearance
  - type: RotationVisuals
    defaultRotation: 0
    horizontalRotation: 0
  - type: DoAfter
  - type: Examiner
  - type: Eye
  - type: ContentEye
  - type: CameraRecoil
  - type: MindContainer
  - type: MovementSpeedModifier
  - type: RequireProjectileTarget
    active: False
  - type: AnimatedEmotes
  - type: LanguageSpeaker # Einstein Engines - Language. This component is required to support speech, but it does not define known languages.
  - type: Fart
  - type: CollectiveMind # Goobstation - Starlight collective mind port
  - type: SpecialAnimationViewer # Goobstation - Cool Animations!!!!
  - type: Penetratable # Goobstation - Better snipers
    penetrateDamage: 15 # Kill million mices
    damagePenalty: 0.05
  - type: StunVisuals

- type: entity
  save: false
  id: MobPolymorphable
  abstract: true
  components:
  - type: Polymorphable
  - type: OwnInteractionVerbs # Einstein Engines - Interaction Verbs.
    allowedVerbs: [] # TODO: define something here, or don't.

# Used for mobs that have health and can take damage.
- type: entity
  save: false
  id: MobDamageable
  abstract: true
  components:
  - type: Damageable
    damageContainer: Biological
  - type: Destructible
    thresholds:
    - trigger:
        !type:DamageTypeTrigger
        damageType: Blunt
        damage: 400
      behaviors:
      - !type:GibBehavior { }
    # GoobStation: Disabled ashing until husking is added
    #- trigger:
    #    !type:DamageTypeTrigger
    #    damageType: Heat
    #    damage: 1500
    #  behaviors:
    #  - !type:SpawnEntitiesBehavior
    #    spawnInContainer: true
    #    spawn:
    #      Ash:
    #        min: 1
    #        max: 1
    #  - !type:BurnBodyBehavior { }
    #  - !type:PlaySoundBehavior
    #    sound:
    #      collection: MeatLaserImpact
  - type: RadiationReceiver
  - type: Stamina
  - type: MobState
  - type: MobThresholds
    thresholds:
      0: Alive
      100: Critical
      200: Dead
  - type: MobStateActions
    actions:
      Critical:
      - ActionCritSuccumb
      - ActionCritFakeDeath
      - ActionCritLastWords
  - type: Deathgasp
  - type: HealthExaminable
    examinableTypes:
    - Blunt
    - Slash
    - Piercing
    - Heat
    - Shock
    - Cold
    - Caustic
  - type: DamageOnHighSpeedImpact
    damage:
      types:
        Blunt: 5
    soundHit:
      path: /Audio/Effects/hit_kick.ogg
  - type: Pullable
  - type: LightningTarget
    priority: 2
    lightningExplode: false

# Used for mobs that can enter combat mode and can attack.
- type: entity
  save: false
  id: MobCombat
  abstract: true
  components:
  - type: CombatMode
  - type: MeleeWeapon
    hidden: true
    soundHit:
      collection: MetalThud
    damage:
      groups:
        Brute: 5

# Used for mobs that are affected by atmospherics, pressure, and heat
- type: entity
  save: false
  id: MobAtmosExposed
  abstract: true
  components:
  - type: AtmosExposed
  - type: Temperature
    heatDamageThreshold: 325
    coldDamageThreshold: 0
    currentTemperature: 310.15
    coldDamage: #per second, scales with temperature & other constants
      types:
        Cold : 0.1
    specificHeat: 42
    heatDamage: #per second, scales with temperature & other constants
      types:
        Heat : 1.0 # Goob edit
  - type: ThermalRegulator
    metabolismHeat: 800
    radiatedHeat: 100
    implicitHeatRegulation: 500
    sweatHeatRegulation: 2000
    shiveringHeatRegulation: 2000
    normalBodyTemperature: 310.15
    thermalRegulationTemperatureThreshold: 2
  - type: MovedByPressure

# Used for mobs that require regular atmospheric conditions.
- type: entity
  parent: MobAtmosExposed
  id: MobAtmosStandard
  abstract: true
  components:
  - type: ThermalRegulator
    metabolismHeat: 800
    radiatedHeat: 100
    implicitHeatRegulation: 250
    sweatHeatRegulation: 500
    shiveringHeatRegulation: 500
    normalBodyTemperature: 310.15
    thermalRegulationTemperatureThreshold: 2
  - type: Temperature
    heatDamageThreshold: 325
    coldDamageThreshold: 260
    currentTemperature: 310.15
    specificHeat: 42
    coldDamage:
      types:
        Cold: 1 #per second, scales with temperature & other constants
    heatDamage:
      types:
        Heat: 1.0 # Goob edit #per second, scales with temperature & other constants
  - type: Barotrauma
    damage:
      types:
        Blunt: 0.15 #per second, scales with pressure and other constants.

# Used for mobs that can be set on fire
- type: entity
  save: false
  id: MobFlammable
  abstract: true
  components:
  - type: Flammable
    fireSpread: true
    canResistFire: true
    damage: #per second, scales with number of fire 'stacks'
      types:
        Heat: 0.5 # goob edit - ash heretic must weep
  - type: FireVisuals
    sprite: Mobs/Effects/onfire.rsi
    normalState: Generic_mob_burning

# Used for mobs that need to breathe
- type: entity
  save: false
  id: MobRespirator
  abstract: true
  components:
  - type: Internals
  - type: Respirator
    damage:
      types:
        Asphyxiation: 2
    damageRecovery:
      types:
        Asphyxiation: -1.0

# Used for mobs that have a bloodstream
- type: entity
  save: false
  id: MobBloodstream
  abstract: true
  components:
  - type: SolutionContainerManager
  - type: InjectableSolution
    solution: chemicals
  - type: Bloodstream
    bloodlossDamage:
      types:
        Bloodloss: 0.5
    bloodlossHealDamage:
      types:
        Bloodloss: -1
