# SPDX-FileCopyrightText: 2023 KISS <59531932+YuriyKiss@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 LankLTE <135308300+LankLTE@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 ThunderBear2006 <100388962+ThunderBear2006@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Tom Leys <tom@crump-leys.com>
# SPDX-FileCopyrightText: 2023 Yurii Kis <yurii.kis@smartteksas.com>
# SPDX-FileCopyrightText: 2024 Alzore <140123969+Blackern5000@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Brandon Hu <103440971+Brandon-Huu@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 CaasGit <87243814+CaasGit@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Chief-Engineer <119664036+Chief-Engineer@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Cojoke <83733158+Cojoke-dot@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 DrSmugleaf <10968691+DrSmugleaf@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 DrSmugleaf <DrSmugleaf@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Ed <96445749+TheShuEd@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Emisse <99158783+Emisse@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 EmoGarbage404 <retron404@gmail.com>
# SPDX-FileCopyrightText: 2024 Eoin Mcloughlin <helloworld@eoinrul.es>
# SPDX-FileCopyrightText: 2024 Errant <35878406+Errant-4@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Flareguy <78941145+Flareguy@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Hannah Giovanna Dawson <karakkaraz@gmail.com>
# SPDX-FileCopyrightText: 2024 Hrosts <35345601+Hrosts@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Ian <ignaz.k@live.de>
# SPDX-FileCopyrightText: 2024 Ilya246 <57039557+Ilya246@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Joel Zimmerman <JoelZimmerman@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 JustCone <141039037+JustCone14@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Kara <lunarautomaton6@gmail.com>
# SPDX-FileCopyrightText: 2024 Killerqu00 <47712032+Killerqu00@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Ko4ergaPunk <62609550+Ko4ergaPunk@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Kukutis96513 <146854220+Kukutis96513@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Leon Friedrich <60421075+ElectroJr@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Lye <128915833+Lyroth001@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 MerrytheManokit <167581110+MerrytheManokit@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 MureixloI <132683811+MureixloI@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 NakataRin <45946146+NakataRin@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 OrangeMoronage9622 <whyteterry0092@gmail.com>
# SPDX-FileCopyrightText: 2024 PJBot <pieterjan.briers+bot@gmail.com>
# SPDX-FileCopyrightText: 2024 Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
# SPDX-FileCopyrightText: 2024 Plykiya <58439124+Plykiya@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Preston Smith <92108534+thetolbean@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Psychpsyo <60073468+Psychpsyo@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Repo <47093363+Titian3@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 RiceMar1244 <138547931+RiceMar1244@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 ShadowCommander <10494922+ShadowCommander@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Simon <63975668+Simyon264@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Stalen <33173619+stalengd@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 TakoDragon <69509841+BackeTako@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Tayrtahn <tayrtahn@gmail.com>
# SPDX-FileCopyrightText: 2024 Thomas <87614336+Aeshus@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 TsjipTsjip <19798667+TsjipTsjip@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Ubaser <134914314+UbaserB@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Unkn0wn_Gh0st <shadowstalkermll@gmail.com>
# SPDX-FileCopyrightText: 2024 Vasilis <vasilis@pikachu.systems>
# SPDX-FileCopyrightText: 2024 Vigers Ray <60344369+VigersRay@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Whisper <121047731+QuietlyWhisper@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 beck-thompson <107373427+beck-thompson@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 brainfood1183 <113240905+brainfood1183@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 deathride58 <deathride58@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 deltanedas <39013340+deltanedas@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 deltanedas <@deltanedas:kde.org>
# SPDX-FileCopyrightText: 2024 dffdff2423 <dffdff2423@gmail.com>
# SPDX-FileCopyrightText: 2024 eoineoineoin <github@eoinrul.es>
# SPDX-FileCopyrightText: 2024 foboscheshir <156405958+foboscheshir@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 lzk <124214523+lzk228@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 metalgearsloth <comedian_vs_clown@hotmail.com>
# SPDX-FileCopyrightText: 2024 nikthechampiongr <32041239+nikthechampiongr@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 plykiya <plykiya@protonmail.com>
# SPDX-FileCopyrightText: 2024 saintmuntzer <47153094+saintmuntzer@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 shamp <140359015+shampunj@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 slarticodefast <161409025+slarticodefast@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 strO0pwafel <153459934+strO0pwafel@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 stroopwafel <j.o.luijkx@student.tudelft.nl>
# SPDX-FileCopyrightText: 2024 themias <89101928+themias@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 to4no_fix <156101927+chavonadelal@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 voidnull000 <18663194+voidnull000@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Aiden <aiden@djkraz.com>
# SPDX-FileCopyrightText: 2025 JustinWinningham <justinmwinningham@gmail.com>
# SPDX-FileCopyrightText: 2025 SX-7 <92227810+SX-7@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 War Pigeon <54217755+minus1over12@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
#
# SPDX-License-Identifier: AGPL-3.0-or-later

- type: entity
  abstract: true
  id: BaseAnomaly
  name: anomaly
  description: An impossible object. Should you be standing this close to it?
  components:
  - type: Anomaly
    offset: 0, 0.15
    pulseSound:
      collection: RadiationPulse
      params:
        volume: 5
  - type: AmbientSound
    range: 5
    volume: -5
    sound:
      path: /Audio/Ambience/anomaly_drone.ogg
  - type: Transform
    anchored: false
  - type: Physics
    bodyType: Static
    bodyStatus: InAir
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 50
        mask:
        - FlyingMobMask
        layer:
        - FlyingMobLayer
  - type: Sprite
    noRot: true
    drawdepth: Effects #it needs to draw over stuff.
    sprite: Structures/Specific/anomaly.rsi
  - type: InteractionOutline
  - type: Clickable
  - type: Damageable
  - type: Appearance
  - type: AnimationPlayer
  - type: GuideHelp
    guides:
    - AnomalousResearch
  - type: EmitSoundOnSpawn
    sound:
      path: /Audio/Effects/teleport_arrival.ogg
  - type: SecretDataAnomaly
    randomStartSecretMin: 0
    randomStartSecretMax: 2
  - type: DamageOnInteract
    damage:
      types:
        Radiation: 10
    popupText: anomaly-component-contact-damage
  - type: DamageOnAttacked
    damage:
      types:
        Radiation: 10

- type: entity
  id: AnomalyPyroclastic
  parent: BaseAnomaly
  suffix: Pyroclastic
  components:
  - type: AmbientSound
    volume: 5
    range: 5
    sound:
      path: /Audio/Ambience/Objects/fireplace.ogg
  - type: Anomaly
    corePrototype: AnomalyCorePyroclastic
    coreInertPrototype: AnomalyCorePyroclasticInert
    supercriticalSoundAtAnimationStart:
      collection: AnomalyPyroSupercritical
  - type: Sprite
    sprite: Structures/Specific/Anomalies/pyro_anom.rsi
    layers:
    - state: anom
      map: ["enum.AnomalyVisualLayers.Base"]
    - state: pulse
      map: ["enum.AnomalyVisualLayers.Animated"]
      visible: false
  - type: PointLight
    radius: 6.0
    energy: 7.5
    color: "#E25822"
    castShadows: false
  - type: PyroclasticAnomaly
  - type: TempAffectingAnomaly
    tempChangePerSecond: 25
    hotspotExposeTemperature: 1000
  - type: GasProducerAnomaly
    releasedGas: 3
    releaseOnMaxSeverity: true
    spawnRadius: 4
    tileCount: 5
    tempChange: 420
  - type: ProjectileAnomaly
    projectilePrototype: ProjectileAnomalyFireball
    projectileSpeed: 0.5
    minProjectiles: 3
    maxProjectiles: 6
  - type: IgnitionSource
    temperature: 800
    ignited: true
  - type: IgniteOnCollide
    fixtureId: fix1
    fireStacks: 1
  - type: DamageOnInteract
    damage:
      types:
        Heat: 10
    popupText: anomaly-component-contact-damage
  - type: DamageOnAttacked
    damage:
      types:
        Heat: 10

- type: entity
  id: AnomalyGravity
  parent: BaseAnomaly
  suffix: Gravity
  components:
  - type: Anomaly
    corePrototype: AnomalyCoreGravity
    coreInertPrototype: AnomalyCoreGravityInert
    supercriticalSoundAtAnimationStart:
      collection: AnomalyGravitySupercritical
    supercriticalDuration: 15s
  - type: Sprite
    layers:
    - state: anom2
      map: ["enum.AnomalyVisualLayers.Base"]
    - state: anom2-pulse
      map: ["enum.AnomalyVisualLayers.Animated"]
      visible: false
  - type: PointLight
    radius: 5.0
    energy: 20
    color: "#1e070e"
    castShadows: false
  - type: GravityAnomaly
  - type: GravityWell
  - type: RadiationSource
  - type: Physics
    bodyType: Dynamic
    bodyStatus: InAir
  - type: CanMoveInAir
  - type: RandomWalk
  - type: SingularityDistortion
    intensity: 1000
    falloffPower: 2.7

- type: entity
  id: AnomalyElectricity
  parent: BaseAnomaly
  suffix: Electricity
  components:
  - type: Anomaly
    corePrototype: AnomalyCoreElectricity
    coreInertPrototype: AnomalyCoreElectricityInert
    supercriticalSoundAtAnimationStart:
      collection: AnomalyElectricitySupercritical
  - type: Sprite
    layers:
    - state: anom3
      map: ["enum.AnomalyVisualLayers.Base"]
    - state: anom3-pulse
      map: ["enum.AnomalyVisualLayers.Animated"]
      visible: false
  - type: PointLight
    radius: 2.0
    energy: 5.0
    color: "#ffffaa"
    castShadows: false
  - type: ElectricityAnomaly
  - type: Electrified

- type: entity
  id: AnomalyFlesh
  parent: BaseAnomaly
  suffix: Flesh
  components:
  - type: Anomaly
    corePrototype: AnomalyCoreFlesh
    coreInertPrototype: AnomalyCoreFleshInert
    minPulseLength: 180
    maxPulseLength: 300
    supercriticalSoundAtAnimationStart:
      collection: AnomalyFleshSupercritical
  - type: Sprite
    layers:
    - state: anom5
      map: ["enum.AnomalyVisualLayers.Base"]
    - state: anom5-pulse
      map: ["enum.AnomalyVisualLayers.Animated"]
      visible: false
  - type: PointLight
    radius: 2.0
    energy: 7.5
    color: "#cb5b7e"
    castShadows: false
  - type: TileSpawnAnomaly
    entries:
    - settings:
        spawnOnPulse: true
        spawnOnStabilityChanged: true
        minAmount: 3
        maxAmount: 7
        maxRange: 4
      floor: FloorFlesh
    - settings:
        spawnOnSuperCritical: true
        minAmount: 10
        maxAmount: 30
        maxRange: 10
      floor: FloorFlesh
  - type: EntitySpawnAnomaly
    entries:
    - settings:
        spawnOnPulse: true
        minAmount: 1
        maxAmount: 4
        minRange: 1.5
        maxRange: 2.5
      spawns:
      - FleshBlocker
    - settings:
        spawnOnPulse: true
        maxAmount: 3
        minRange: 3
        maxRange: 4.5
      spawns:
      - MobFleshJared
      - MobFleshGolem
      - MobFleshClamp
      - MobFleshLover
    - settings:
        spawnOnSuperCritical: true
        minAmount: 10
        maxAmount: 15
        minRange: 5
        maxRange: 15
      spawns:
      - FleshBlocker
    - settings:
        spawnOnSuperCritical: true
        minAmount: 5
        maxAmount: 10
        maxRange: 8
      spawns:
      - MobFleshJared
      - MobFleshGolem
      - MobFleshClamp
      - MobFleshLover
    - settings:
        spawnOnSuperCritical: true
        minAmount: 5
        maxAmount: 8
        maxRange: 10
      spawns:
      - FleshKudzu
    - settings:
        spawnOnShutdown: true
        maxAmount: 2
        maxRange: 1
      spawns:
      - MobFleshJared
      - MobFleshGolem
      - MobFleshClamp
      - MobFleshLover
      - FleshKudzu

- type: entity
  id: AnomalyBluespace
  parent: BaseAnomaly
  suffix: Bluespace
  components:
  - type: Sprite
    layers:
    - state: anom4
      map: ["enum.AnomalyVisualLayers.Base"]
    - state: anom4-pulse
      map: ["enum.AnomalyVisualLayers.Animated"]
      visible: false
  - type: PointLight
    radius: 2.0
    energy: 7.5
    color: "#00ccff"
    castShadows: false
  - type: BluespaceAnomaly
  - type: Portal
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 50
        mask:
        - MobMask
        layer:
        - MobLayer
      portalFixture:
        shape:
          !type:PhysShapeAabb
          bounds: "-0.25,-0.48,0.25,0.48"
        mask:
        - FullTileMask
        layer:
        - WallLayer
        hard: false
  - type: Anomaly
    corePrototype: AnomalyCoreBluespace
    coreInertPrototype: AnomalyCoreBluespaceInert
    supercriticalSoundAtAnimationStart:
      collection: AnomalyBluespaceSupercritical
    pulseSound:
      collection: RadiationPulse
      params:
        volume: 5

- type: entity
  id: AnomalyIce
  parent: BaseAnomaly
  suffix: Ice
  components:
  - type: Sprite
    sprite: Structures/Specific/Anomalies/ice_anom.rsi
    layers:
    - state: anom
      map: ["enum.AnomalyVisualLayers.Base"]
    - state: pulse
      map: ["enum.AnomalyVisualLayers.Animated"]
      visible: false
  - type: PointLight
    radius: 2.0
    energy: 2.5
    color: "#befaff"
    castShadows: false
  - type: Anomaly
    corePrototype: AnomalyCoreIce
    coreInertPrototype: AnomalyCoreIceInert
    supercriticalSoundAtAnimationStart:
      collection: AnomalyIceSupercritical
  - type: ExplosionAnomaly
    supercriticalExplosion: Cryo
    explosionTotalIntensity: 300
    explosionDropoff: 2
    explosionMaxTileIntensity: 20
  - type: ProjectileAnomaly
    projectilePrototype: ProjectileIcicle
  - type: EntitySpawnAnomaly
    entries:
    - settings:
        spawnOnStabilityChanged: true
        minAmount: 5
        maxAmount: 15
        maxRange: 4
      spawns:
      - IceCrust
  - type: TempAffectingAnomaly
    tempChangePerSecond: -25
    hotspotExposeTemperature: -1000
  - type: GasProducerAnomaly
    releasedGas: 8 # Frezon. Please replace if there is a better way to specify this
    releaseOnMaxSeverity: true
    spawnRadius: 0
  - type: DamageOnInteract
    damage:
      types:
        Cold: 10
    popupText: anomaly-component-contact-damage
  - type: DamageOnAttacked
    damage:
      types:
        Cold: 10

- type: entity
  id: AnomalyRockBase
  parent: BaseAnomaly
  abstract: true
  suffix: Rock
  components:
  - type: Anomaly
    corePrototype: AnomalyCoreRock
    coreInertPrototype: AnomalyCoreRockInert
    minPulseLength: 180
    maxPulseLength: 300
    supercriticalSoundAtAnimationStart:
      collection: AnomalyRockSupercritical
  - type: Sprite
    layers:
    - state: anom6
      map: ["enum.AnomalyVisualLayers.Base"]
    - state: anom6-pulse
      map: ["enum.AnomalyVisualLayers.Animated"]
      visible: false
  - type: PointLight
    radius: 2.0
    energy: 7.5
    color: "#5ca8cb"
    castShadows: false
  - type: TileSpawnAnomaly
    entries:
    - settings:
        spawnOnPulse: true
        minAmount: 15
        maxAmount: 20
        maxRange: 7.5
      floor: FloorAsteroidTile
    - settings:
        spawnOnSuperCritical: true
        minAmount: 30
        maxAmount: 50
        maxRange: 12
      floor: FloorAsteroidTile

- type: entity
  id: AnomalyRockUranium
  parent: AnomalyRockBase
  suffix: Rock, Uranium
  components:
  - type: Sprite
    color: "#52ff39"
  - type: PointLight
    radius: 2.0
    energy: 7.5
    color: "#52ff39"
  - type: EntitySpawnAnomaly
    entries:
    - settings:
        spawnOnPulse: true
        minAmount: 8
        maxAmount: 15
        minRange: 4.5
        maxRange: 7.5
      spawns:
      - WallSpawnAsteroid
      - WallSpawnAsteroid
      - WallSpawnAsteroidUranium
      - WallSpawnAsteroidUraniumCrab
    - settings:
        spawnOnPulse: true
        maxAmount: 3
        minRange: 2.5
        maxRange: 4.5
      spawns:
      - CrystalGreen
    - settings:
        spawnOnSuperCritical: true
        minAmount: 30
        maxAmount: 40
        minRange: 5
        maxRange: 15
      spawns:
      - CrystalGreen
      - WallSpawnAsteroid
      - WallSpawnAsteroid
      - WallSpawnAsteroidUraniumCrab
    - settings:
        spawnOnSuperCritical: true
        minAmount: 6
        maxAmount: 10
        maxRange: 5
      spawns:
      - MobSpawnCrabUranium

- type: entity
  id: AnomalyRockBananium
  parent: AnomalyRockBase
  suffix: Rock, Bananium
  components:
  - type: Sprite
    color: "#ddde40"
  - type: PointLight
    radius: 2.0
    energy: 7.5
    color: "#ddde40"
  - type: EntitySpawnAnomaly
    entries:
    - settings:
        spawnOnPulse: true
        minAmount: 8
        maxAmount: 15
        minRange: 4.5
        maxRange: 7.5
      spawns:
      - WallSpawnAsteroid
      - WallSpawnAsteroid
      - WallSpawnAsteroidBananium
      - WallSpawnAsteroidBananiumCrab
    - settings:
        spawnOnPulse: true
        maxAmount: 3
        minRange: 2.5
        maxRange: 4.5
      spawns:
      - CrystalYellow
    - settings:
        spawnOnSuperCritical: true
        minAmount: 30
        maxAmount: 40
        minRange: 5
        maxRange: 15
      spawns:
      - CrystalYellow
      - WallSpawnAsteroid
      - WallSpawnAsteroid
      - WallSpawnAsteroidBananiumCrab
    - settings:
        spawnOnSuperCritical: true
        minAmount: 3
        maxAmount: 6
        maxRange: 5
      spawns:
      - MobSpawnCrabBananium

- type: entity
  id: AnomalyRockQuartz
  parent: AnomalyRockBase
  suffix: Rock, Quartz
  components:
  - type: Sprite
    color: "#fb4747"
  - type: PointLight
    radius: 2.0
    energy: 7.5
    color: "#fb4747"
  - type: EntitySpawnAnomaly
    entries:
    - settings:
        spawnOnPulse: true
        minAmount: 8
        maxAmount: 15
        minRange: 4.5
        maxRange: 7.5
      spawns:
      - WallSpawnAsteroid
      - WallSpawnAsteroid
      - WallSpawnAsteroidQuartz
      - WallSpawnAsteroidQuartzCrab
    - settings:
        spawnOnPulse: true
        maxAmount: 3
        minRange: 2.5
        maxRange: 4.5
      spawns:
      - CrystalGrey
    - settings:
        spawnOnSuperCritical: true
        minAmount: 30
        maxAmount: 40
        minRange: 5
        maxRange: 15
      spawns:
      - CrystalGrey
      - WallSpawnAsteroid
      - WallSpawnAsteroid
      - WallSpawnAsteroidQuartzCrab
    - settings:
        spawnOnSuperCritical: true
        minAmount: 6
        maxAmount: 10
        maxRange: 5
      spawns:
      - MobSpawnCrabQuartz

- type: entity
  id: AnomalyRockSilver
  parent: AnomalyRockBase
  suffix: Rock, Silver
  components:
  - type: Sprite
    color: "#47f8ff"
  - type: PointLight
    radius: 2.0
    energy: 7.5
    color: "#47f8ff"
  - type: EntitySpawnAnomaly
    entries:
    - settings:
        spawnOnPulse: true
        minAmount: 8
        maxAmount: 15
        minRange: 4.5
        maxRange: 7.5
      spawns:
      - WallSpawnAsteroid
      - WallSpawnAsteroid
      - WallSpawnAsteroidSilver
      - WallSpawnAsteroidSilverCrab
    - settings:
        spawnOnPulse: true
        maxAmount: 3
        minRange: 2.5
        maxRange: 4.5
      spawns:
      - CrystalCyan
    - settings:
        spawnOnSuperCritical: true
        minAmount: 30
        maxAmount: 40
        minRange: 5
        maxRange: 15
      spawns:
      - CrystalCyan
      - WallSpawnAsteroid
      - WallSpawnAsteroid
      - WallSpawnAsteroidSilverCrab
    - settings:
        spawnOnSuperCritical: true
        minAmount: 6
        maxAmount: 10
        maxRange: 5
      spawns:
      - MobSpawnCrabSilver

- type: entity
  id: AnomalyRockGold
  parent: AnomalyRockBase
  suffix: Rock, Gold
  components:
  - type: Sprite
    color: "#e3ba70"
  - type: PointLight
    radius: 2.0
    energy: 7.5
    color: "#e3ba70"
  - type: EntitySpawnAnomaly
    entries:
    - settings:
        spawnOnPulse: true
        minAmount: 8
        maxAmount: 15
        minRange: 4.5
        maxRange: 7.5
      spawns:
      - WallSpawnAsteroid
      - WallSpawnAsteroid
      - WallSpawnAsteroidGold
      - WallSpawnAsteroidGoldCrab
    - settings:
        spawnOnPulse: true
        maxAmount: 3
        minRange: 2.5
        maxRange: 4.5
      spawns:
      - CrystalYellow
    - settings:
        spawnOnSuperCritical: true
        minAmount: 30
        maxAmount: 40
        minRange: 5
        maxRange: 15
      spawns:
      - CrystalYellow
      - WallSpawnAsteroid
      - WallSpawnAsteroid
      - WallSpawnAsteroidGoldCrab
    - settings:
        spawnOnSuperCritical: true
        minAmount: 6
        maxAmount: 10
        maxRange: 5
      spawns:
      - MobSpawnCrabGold

- type: entity
  id: AnomalyRockIron
  parent: AnomalyRockBase
  suffix: Rock, Iron
  components:
  - type: Sprite
    color: "#ff8227"
  - type: PointLight
    radius: 2.0
    energy: 7.5
    color: "#ff8227"
  - type: EntitySpawnAnomaly
    entries:
    - settings:
        spawnOnPulse: true
        minAmount: 8
        maxAmount: 15
        minRange: 4.5
        maxRange: 7.5
      spawns:
      - WallSpawnAsteroid
      - WallSpawnAsteroid
      - WallSpawnAsteroidIron
      - WallSpawnAsteroidIronCrab
    - settings:
        spawnOnPulse: true
        maxAmount: 3
        minRange: 2.5
        maxRange: 4.5
      spawns:
      - CrystalOrange
    - settings:
        spawnOnSuperCritical: true
        minAmount: 30
        maxAmount: 40
        minRange: 5
        maxRange: 15
      spawns:
      - CrystalOrange
      - WallSpawnAsteroid
      - WallSpawnAsteroid
      - WallSpawnAsteroidIronCrab
    - settings:
        spawnOnSuperCritical: true
        minAmount: 6
        maxAmount: 10
        maxRange: 5
      spawns:
      - MobSpawnCrabIron

- type: entity
  id: AnomalyRockCoal
  parent: AnomalyRockBase
  suffix: Rock, Coal
  components:
  - type: Sprite
    color: "#484848"
  - type: PointLight
    radius: 2.0
    energy: 7.5
    color: "#484848"
  - type: EntitySpawnAnomaly
    entries:
    - settings:
        spawnOnPulse: true
        minAmount: 8
        maxAmount: 15
        minRange: 4.5
        maxRange: 7.5
      spawns:
      - WallSpawnAsteroid
      - WallSpawnAsteroid
      - WallSpawnAsteroidCoal
      - WallSpawnAsteroidCoalCrab
    - settings:
        spawnOnPulse: true
        maxAmount: 3
        minRange: 2.5
        maxRange: 4.5
      spawns:
      - CrystalBlack
    - settings:
        spawnOnSuperCritical: true
        minAmount: 30
        maxAmount: 40
        minRange: 5
        maxRange: 15
      spawns:
      - CrystalBlack
      - WallSpawnAsteroid
      - WallSpawnAsteroid
      - WallSpawnAsteroidCoalCrab
    - settings:
        spawnOnSuperCritical: true
        minAmount: 6
        maxAmount: 10
        maxRange: 5
      spawns:
      - MobSpawnCrabCoal

- type: entity
  id: AnomalyFlora
  parent: BaseAnomaly
  suffix: Flora
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: Structures/Specific/Anomalies/flora_anom.rsi
    layers:
    - state: anom
      map: ["enum.AnomalyVisualLayers.Base"]
    - state: pulse
      map: ["enum.AnomalyVisualLayers.Animated"]
      visible: false
  - type: PointLight
    radius: 8.0
    energy: 8.5
    color: "#6270bb"
  - type: Anomaly
    animationTime: 6
    offset: 0, 0
    corePrototype: AnomalyCoreFlora
    coreInertPrototype: AnomalyCoreFloraInert
    minPulseLength: 60
    maxPulseLength: 120
    supercriticalSoundAtAnimationStart:
      collection: AnomalyFloraSupercritical
  - type: TileSpawnAnomaly
    entries:
    - settings:
        spawnOnPulse: true
        minAmount: 3
        maxAmount: 7
        maxRange: 5
      floor: FloorAstroGrass
    - settings:
        spawnOnSuperCritical: true
        minAmount: 10
        maxAmount: 30
        maxRange: 15
      floor: FloorAstroGrass
  - type: EntitySpawnAnomaly
    entries:
    - settings:
        spawnOnPulse: true
        minAmount: 2
        maxAmount: 5
        maxRange: 2
      spawns:
      - KudzuFlowerFriendly
    - settings:
        spawnOnSuperCritical: true
        minAmount: 5
        maxAmount: 10
        maxRange: 6
      spawns:
      - KudzuFlowerAngry

- type: entity
  id: AnomalyFloraBulb
  name: strange glowing berry
  parent: BaseStructure
  description: It's a beautiful strange glowing berry. It seems to have something growing inside it...
  suffix: Flora Anomaly
  components:
  - type: Transform
    anchored: true
  - type: Physics
    bodyType: Static
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.2
  - type: InteractionOutline
  - type: Damageable
    damageContainer: Biological
    damageModifierSet: Diona
  - type: Destructible
    thresholds:
      - trigger:
          !type:DamageTrigger
          damage: 1
        behaviors:
          - !type:DoActsBehavior
            acts: [ "Destruction" ]
          - !type:SpawnEntitiesBehavior
            spawn:
              EffectAnomalyFloraBulb:
                min: 1
                max: 1
  - type: PointLight
    radius: 2.0
    energy: 4.5
    color: "#6270bb"
  - type: Sprite
    noRot: true
    sprite: Structures/Specific/Anomalies/flora_anom.rsi
    state: bulb

- type: entity
  id: AnomalyLiquid
  parent: BaseAnomaly
  suffix: Liquid
  components:
  - type: Sprite
    sprite: Structures/Specific/Anomalies/liquid_anom.rsi
    layers:
    - state: anom
      map: ["enum.AnomalyVisualLayers.Base"]
    - state: pulse
      map: ["enum.AnomalyVisualLayers.Animated"]
      visible: false
  - type: RandomSprite
    selected: # Initialized layer values. Edited through the ReagentProducerAnomalySystem
      enum.AnomalyVisualLayers.Base:
        anom: "#ffffff"
      enum.AnomalyVisualLayers.Animated:
        pulse: "#ffffff"
  - type: PointLight
    radius: 4.0
    energy: 3.5
    color: "#bbbbbb"
  - type: BadFood
  - type: Anomaly
    corePrototype: AnomalyCoreLiquid
    coreInertPrototype: AnomalyCoreLiquidInert
    minPulseLength: 60
    maxPulseLength: 120
    supercriticalSoundAtAnimationStart:
      collection: AnomalyFluidSupercritical
  - type: EntitySpawnAnomaly
    entries:
    - settings:
        spawnOnSuperCritical: true
        minAmount: 3
        maxAmount: 8
        maxRange: 2
      spawns:
      - ReagentSlimeSpawner
  - type: SolutionContainerManager
    solutions:
      anomaly:
        maxVol: 1500
  - type: PuddleCreateAnomaly
    solution: anomaly
  - type: InjectionAnomaly
    solution: anomaly
    superCriticalInjectRadius: 10
  - type: ReagentProducerAnomaly
    solution: anomaly
    needRecolor: true
    dangerousChemicals:
    - UnstableMutagen
    - Mold
    - PolytrinicAcid
    - FerrochromicAcid
    - FluorosulfuricAcid
    - SulfuricAcid
    - HeartbreakerToxin
    - VentCrud
    - UncookedAnimalProteins
    - Thermite
    - Napalm
    - Phlogiston
    - ChlorineTrifluoride
    - FoamingAgent
    - BuzzochloricBees
    - RobustHarvest
    # Goobstation - Start
    - Triclor 
    - Cyanide
    - Genecide
    usefulChemicals:
    - Cryptobiolin
    - Dylovene
    - Arithrazine
    - Bicaridine
    - Cryoxadone
    - Dermaline
    - Dexalin
    - DexalinPlus
    - Epinephrine
    - Leporazine
    - Ambuzol
    - Tricordrazine
    - Artifexium
    - Ethylredoxrazine
    # Goobstation - Start
    - Probital
    - Tirimol
    - Multiver
    funChemicals:
    - Desoxyephedrine
    - Ephedrine
    - THC
    - SpaceDrugs
    - Nocturine
    - MuteToxin
    - NorepinephricAcid
    - Pax
    - Ipecac
    - Cognizine
    - Beer
    - SpaceGlue
    - SpaceLube
    - CogChamp
    - Honk
    - Carpetium
    - JuiceThatMakesYouWeh
    # Goobstation - Start
    - CatDrugs
  - type: Drink
    solution: anomaly
  - type: DrainableSolution
    solution: anomaly
  - type: DrawableSolution
    solution: anomaly
  - type: ExaminableSolution
    solution: anomaly
  - type: RefillableSolution
    solution: anomaly
  - type: InjectableSolution
    solution: beaker

- type: entity
  id: AnomalyShadow
  parent: BaseAnomaly
  suffix: Shadow
  components:
  - type: Sprite
    sprite: Structures/Specific/Anomalies/shadow_anom.rsi
    layers:
    - state: anom
      map: ["enum.AnomalyVisualLayers.Base"]
    - state: pulse
      map: ["enum.AnomalyVisualLayers.Animated"]
      visible: false
  - type: PointLight
    radius: 1.5
    energy: 12.5
    color: "#793a80"
  - type: AmbientSound
    range: 5
    volume: -5
    sound:
      path: /Audio/Ambience/anomaly_scary.ogg
  - type: Anomaly
    corePrototype: AnomalyCoreShadow
    coreInertPrototype: AnomalyCoreShadowInert
    minPulseLength: 60
    maxPulseLength: 120
    animationTime: 4
    offset: "-0.1,0.1"
    supercriticalSoundAtAnimationStart:
      collection: AnomalyShadowSupercritical
  - type: EntitySpawnAnomaly
    entries:
    - settings:
        spawnOnPulse: true
        spawnOnSuperCritical: true
        minAmount: 10
        maxAmount: 20
        maxRange: 4
      spawns:
      - ShadowKudzuWeak
    - settings:
        spawnOnSuperCritical: true
        minAmount: 30
        maxAmount: 40
        maxRange: 50
      spawns:
      - ShadowKudzu
  - type: Portal
    arrivalSound: /Audio/Items/hiss.ogg
    departureSound: /Audio/Items/hiss.ogg
  - type: Tag
    tags:
      - SpookyFog
  - type: DamageOnInteract
    damage:
      types:
        Cold: 10
    popupText: anomaly-component-contact-damage
  - type: DamageOnAttacked
    damage:
      types:
        Cold: 10

- type: entity
  id: AnomalyTech
  parent: BaseAnomaly
  suffix: Tech
  components:
  - type: Sprite
    sprite: Structures/Specific/Anomalies/tech_anom.rsi
    layers:
    - state: bg
      map: ["enum.AnomalyVisualLayers.Base"]
    - state: bg_powered
      map: ["enum.AnomalyVisualLayers.Animated"]
      visible: false
      shader: unshaded
    - state: part1
    - state: part2
    - state: part3
    - state: part4
  - type: PointLight
    radius: 6.5
    energy: 3.5
    color: "#56c1e8"
  - type: Anomaly
    corePrototype: AnomalyCoreTech
    coreInertPrototype: AnomalyCoreTechInert
    minPulseLength: 60
    maxPulseLength: 120
    supercriticalSoundAtAnimationStart:
      collection: AnomalyTechSupercritical
  - type: TechAnomaly
  - type: DeviceLinkSource
    ports:
      - Pulse
      - Timer

- type: entity
  id: AnomalyTechBeam
  categories: [ HideSpawnMenu ]
  components:
  - type: Sprite
    sprite: /Textures/Effects/techanom_beam.rsi
    drawdepth: Effects
    layers:
    - state: beam
      shader: unshaded
      color: "#21c4ff"
  - type: Physics
    canCollide: false
  - type: PointLight
    enabled: true
    color: "#4080FF"
    radius: 3.5
    softness: 1
    autoRot: true
    castShadows: false
  - type: Beam
  - type: TimedDespawn
    lifetime: 2.3
  - type: Tag
    tags:
      - HideContextMenu

- type: entity
  id: AnomalySanta
  parent: BaseAnomaly
  suffix: Santa
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: Structures/Specific/Anomalies/santa_anom.rsi
    layers:
    - state: anom
      map: ["enum.AnomalyVisualLayers.Base"]
    - state: pulse
      map: ["enum.AnomalyVisualLayers.Animated"]
      visible: false
  - type: PointLight
    radius: 8.0
    energy: 8.5
    color: "#db8127"
  - type: Anomaly
    animationTime: 6
    offset: 0, 0
    corePrototype: AnomalyCoreSanta
    coreInertPrototype: AnomalyCoreSantaInert
    minPulseLength: 60
    maxPulseLength: 120
    supercriticalSoundAtAnimationStart:
      collection: AnomalyPresentSupercritical
  - type: EntitySpawnAnomaly
    entries:
    - settings:
        spawnOnPulse: true
        minAmount: 2
        maxAmount: 5
        maxRange: 5
      spawns:
      - PresentRandomUnsafe
      - PresentRandom
      - PresentRandomCoal
      - PresentRandomCash
      - ClothingHeadHatSantahat
      - FoodCakeChristmasSlice
    - settings:
        spawnOnSuperCritical: true
        minAmount: 10
        maxAmount: 20
        maxRange: 6
      spawns:
      - PresentRandomInsane
  - type: ProjectileAnomaly
    projectilePrototype: DrinkLemonLimeCranberryCan
    minProjectiles: 1
    maxProjectiles: 3