# SPDX-FileCopyrightText: 2025 Armok <155400926+ARMOKS@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 GoobBot <uristmchands@proton.me>
# SPDX-FileCopyrightText: 2025 Solstice <solsticeofthewinter@gmail.com>
# SPDX-FileCopyrightText: 2025 Ted Lukin <66275205+pheenty@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 gluesniffler <159397573+gluesniffler@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 pheenty <fedorlukin2006@gmail.com>
#
# SPDX-License-Identifier: AGPL-3.0-or-later

- type: entity
  id: BulletClownshot
  name: clownshot
  parent: BaseBullet
  categories: [ HideSpawnMenu ]
  components:
  - type: Fixtures
    fixtures:
      projectile:
        shape:
          !type:PhysShapeAabb
          bounds: "-0.2,-0.2,0.2,0.2"
        hard: false
        mask:
        - Opaque
  - type: Reflective
    reflective:
    - Energy
  - type: FlyBySound
    sound:
      collection: EnergyMiss
      params:
        volume: 5
  - type: Sprite
    sprite: _Goobstation/Objects/Weapons/Guns/Projectiles/selectable_ammo.rsi
    layers:
    - state: omnilaser-yellow
      shader: unshaded
  - type: Projectile
    impactEffect: BulletImpactEffectOrangeDisabler
    damage:
      types:
        Blunt: 5
  - type: ProjectileRequireWhitelist
    whitelist:
     components:
      - Clumsy
  - type: ProjectileThrowOnHit
    distance: 20
    speed: 50

- type: entity
  id: BulletPulse
  name: pulse
  parent: BaseBullet
  categories: [ HideSpawnMenu ]
  components:
  - type: Fixtures
    fixtures:
      projectile:
        shape:
          !type:PhysShapeAabb
          bounds: "-0.2,-0.2,0.2,0.2"
        hard: false
        mask:
        - Opaque
  - type: Reflective
    reflective:
    - Energy
  - type: FlyBySound
    sound:
      collection: EnergyMiss
      params:
        volume: 5
  - type: Sprite
    sprite: _Goobstation/Objects/Weapons/Guns/Projectiles/selectable_ammo.rsi
    layers:
    - state: omnilaser-blue
      shader: unshaded
  - type: Projectile
    impactEffect: BulletImpactEffectDisabler
    damage:
      types:
        Blunt: 5
  - type: ProjectileThrowOnHit
    distance: 4
    speed: 8

- type: entity
  id: BulletDetain
  name: detain
  parent: BaseBullet
  categories: [ HideSpawnMenu ]
  components:
  - type: Fixtures
    fixtures:
      projectile:
        shape:
          !type:PhysShapeAabb
          bounds: "-0.2,-0.2,0.2,0.2"
        hard: false
        mask:
        - Opaque
  - type: Reflective
    reflective:
    - Energy
  - type: FlyBySound
    sound:
      collection: EnergyMiss
      params:
        volume: 5
  - type: Sprite
    sprite: Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi
    layers:
    - state: omnilaser
      shader: unshaded
  - type: Projectile
    impactEffect: BulletImpactEffectDisabler
    damage:
      types:
        Heat: 0
  - type: StaminaDamageOnCollide
    damage: 25
    overtime: 15

- type: entity
  id: BulletExecute
  name: execute
  parent: BaseBullet
  categories: [ HideSpawnMenu ]
  components:
  - type: Fixtures
    fixtures:
      projectile:
        shape:
          !type:PhysShapeAabb
          bounds: "-0.2,-0.2,0.2,0.2"
        hard: false
        mask:
        - Opaque
  - type: Reflective
    reflective:
    - Energy
  - type: FlyBySound
    sound:
      collection: EnergyMiss
      params:
        volume: 5
  - type: Sprite
    sprite: _Goobstation/Objects/Weapons/Guns/Projectiles/selectable_ammo.rsi
    layers:
    - state: omnilaser-green
      shader: unshaded
  - type: Projectile
    impactEffect: BulletImpactEffectOrangeDisabler
    damage:
      types:
        Heat: 17
        Radiation: 2

- type: entity
  id: BulletHotshot
  name: hotshot
  parent: BaseBullet
  categories: [ HideSpawnMenu ]
  components:
  - type: Fixtures
    fixtures:
      projectile:
        shape:
          !type:PhysShapeAabb
          bounds: "-0.2,-0.2,0.2,0.2"
        hard: false
        mask:
        - Opaque
  - type: Reflective
    reflective:
    - Energy
  - type: FlyBySound
    sound:
      collection: EnergyMiss
      params:
        volume: 5
  - type: Sprite
    sprite: Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi
    layers:
    - state: heavylaser
      shader: unshaded
  - type: Projectile
    impactEffect: BulletImpactEffectOrangeDisabler
    damage:
      types:
        Blunt: 2
        Heat: 2
  - type: IgniteOnCollide
    fireStacks: 2

- type: entity
  id: BulletSleepshot
  name: sleepshot
  parent: BaseBullet
  categories: [ HideSpawnMenu ]
  components:
  - type: Fixtures
    fixtures:
      projectile:
        shape:
          !type:PhysShapeAabb
          bounds: "-0.2,-0.2,0.2,0.2"
        hard: false
        mask:
        - Opaque
  - type: Reflective
    reflective:
    - Energy
  - type: FlyBySound
    sound:
      collection: EnergyMiss
      params:
        volume: 5
  - type: Sprite
    sprite: _Goobstation/Objects/Weapons/Guns/Projectiles/selectable_ammo.rsi
    layers:
    - state: omnilaser-pink
      shader: unshaded
  - type: Projectile
    impactEffect: BulletImpactEffectDisabler
    damage:
      types:
        Heat: 0
  - type: RefillableSolution
    solution: ammo
  - type: DrainableSolution
    solution: ammo
  - type: SolutionInjectOnProjectileHit
    transferAmount: 2
    solution: ammo
  - type: InjectableSolution
    solution: ammo
  - type: SolutionContainerManager
    solutions:
      ammo:
        reagents:
        - ReagentId: Haloperidol
          Quantity: 1.5
  - type: BlurOnCollide

- type: entity
  id: BulletBigshot
  name: bigshot
  parent: BaseBullet
  categories: [ HideSpawnMenu ]
  components:
  - type: Reflective
    reflective:
    - Energy
  - type: FlyBySound
    sound:
      collection: EnergyMiss
      params:
        volume: 5
  - type: Sprite
    sprite: Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi
    layers:
    - state: omnilaser_greyscale
      shader: unshaded
  - type: Projectile
    impactEffect: BulletImpactEffectKinetic
    damage:
      types:
        Blunt: 2
        Heat: 2
        Structural: 100
    ignoreResistances: true # This needs ProjectileDamageWhitelistComponent
