- type: entity
  id: BaseBulletRubber
  name: base bullet rubber
  parent: BaseBullet
  categories: [ HideSpawnMenu ]
  components:
  - type: Sprite
    sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi
    layers:
    - state: rubber
  - type: Projectile
    damage:
      types:
        Blunt: 3
    soundHit:
      path: /Audio/Weapons/Guns/Hits/snap.ogg
  - type: StaminaDamageOnCollide
    damage: 22 # 5 hits to stun sounds reasonable

- type: entity
  id: BaseBulletEmp
  name: base bullet emp
  parent: BaseBulletTrigger
  categories: [ HideSpawnMenu ]
  components:
  - type: Projectile
    damage:
      types:
        Shock: 0
  - type: Sprite
    sprite: Objects/Weapons/Guns/Projectiles/magic.rsi
    layers:
    - state: emp_projectile
      shader: unshaded
  - type: EmpOnTrigger
    range: 0.3
    energyConsumption: 2700000
    disableDuration: 10

- type: entity
  id: NFBulletRocketEmp
  name: rocket
  parent: BaseBulletTrigger
  categories: [ HideSpawnMenu ]
  components:
  - type: Projectile
    damage:
      types:
        Shock: 0
  - type: TimedDespawn
    lifetime: 15
  - type: Sprite
    sprite: _NF/Objects/Weapons/Guns/Ammunition/Projectiles/projectiles2.rsi
    layers:
    - state: frag-emp
  - type: EmpOnTrigger
    range: 4
    energyConsumption: 2700000
    disableDuration: 60

- type: entity
  parent: BaseBulletTrigger
  id: ProjectileEmp
  name: emp projectile
  categories: [ HideSpawnMenu ]
  components:
  - type: Sprite
    sprite: Objects/Weapons/Guns/Projectiles/magic.rsi
    layers:
    - state: emp_projectile
      shader: unshaded
  - type: Ammo
    muzzleFlash: null
  - type: Physics
  - type: Fixtures
    fixtures:
      projectile:
        shape:
          !type:PhysShapeAabb
          bounds: "-0.2,-0.2,0.2,0.2"
        hard: false
        mask:
        - Opaque
      fly-by: &flybyfixture
        shape: !type:PhysShapeCircle
          radius: 1.5
        layer:
        - Impassable
        - MidImpassable
        - HighImpassable
        - LowImpassable
        hard: False
  - type: Projectile
    damage:
      types:
        Shock: 0
  - type: TimedDespawn
    lifetime: 15
  - type: EmpOnTrigger
    range: 2
    energyConsumption: 2700000
    disableDuration: 30

- type: entity
  id: NFBulletCannonBallEmp
  name: shockshot
  parent: BaseBulletTrigger
  categories: [ HideSpawnMenu ]
  components:
  - type: Sprite
    sprite: _NF/Objects/Weapons/Guns/Ammunition/Projectiles/projectiles2.rsi
    layers:
    - state: ball-emp
    - state: ball-emp-unlit
      shader: unshaded
  - type: PointLight
    radius: 1
    color: cyan
    energy: 0.5
  - type: Projectile
    damage:
      types:
        Shock: 0
  - type: EmpOnTrigger
    range: 4
    energyConsumption: 2700000
    disableDuration: 60

- type: entity
  id: NFBaseBulletLaser
  name: laser bolt
  parent: BulletLaser
  categories: [ HideSpawnMenu ]
  components:
  - type: Sprite
    sprite: Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi
    layers:
    - state: omnilaser_greyscale
      shader: unshaded
      color: red
  - type: Fixtures
    fixtures:
      projectile:
        shape:
          !type:PhysShapeAabb
          bounds: "-0.1,-0.2,0.1,0.2"
        hard: false
        mask:
        - Opaque
      fly-by: *flybyfixture

# region Upstream
- type: entity
  parent: MuzzleFlashEffect
  id: NFMuzzleFlashEffect
  categories: [ HideSpawnMenu ]

- type: entity
  parent: MuzzleFlashEffectOmnilaser
  id: NFMuzzleFlashEffectOmnilaser
  categories: [ HideSpawnMenu ]

- type: entity
  parent: MuzzleFlashEffectHeavyLaser
  id: NFMuzzleFlashEffectHeavyLaser
  categories: [ HideSpawnMenu ]

- type: entity
  parent: EmitterBolt
  id: NFEmitterBolt
  categories: [ HideSpawnMenu ]

- type: entity
  parent: WatcherBolt
  id: NFWatcherBolt
  categories: [ HideSpawnMenu ]

- type: entity
  parent: WatcherBoltMagmawing
  id: NFWatcherBoltMagmawing
  categories: [ HideSpawnMenu ]

- type: entity
  parent: BulletKinetic
  id: NFBulletKinetic
  categories: [ HideSpawnMenu ]
  components:
  - type: MiningGatheringSoft # Frontier

- type: entity
  parent: BulletKineticShuttle
  id: NFBulletKineticShuttle
  categories: [ HideSpawnMenu ]
  components:
  - type: Sprite
    color: "#FF8888" # distinguish from regular PKA bolts
  - type: Projectile
    damage:
      types: # it's for mining hard things, not destroying critters
        Blunt: 0.5
        Structural: 1
  - type: TimedDespawn
    lifetime: 1
  - type: PointLight
    color: "#FF8888"
  - type: MiningGatheringHard # Frontier

- type: entity
  parent: BulletCharge
  id: NFBulletCharge
  categories: [ HideSpawnMenu ]
  components:
  - type: MiningGatheringSoft # Frontier

- type: entity
  parent: BulletChargeGlaive
  id: NFBulletChargeGlaive
  categories: [ HideSpawnMenu ]
  components:
  - type: MiningGatheringSoft # Frontier

- type: entity
  parent: AnomalousParticleDelta
  id: NFAnomalousParticleDelta
  categories: [ HideSpawnMenu ]

- type: entity
  parent: AnomalousParticleDeltaStrong
  id: NFAnomalousParticleDeltaStrong
  categories: [ HideSpawnMenu ]

- type: entity
  parent: AnomalousParticleEpsilon
  id: NFAnomalousParticleEpsilon
  categories: [ HideSpawnMenu ]

- type: entity
  parent: AnomalousParticleEpsilonStrong
  id: NFAnomalousParticleEpsilonStrong
  categories: [ HideSpawnMenu ]

- type: entity
  parent: AnomalousParticleZeta
  id: NFAnomalousParticleZeta
  categories: [ HideSpawnMenu ]

- type: entity
  parent: AnomalousParticleZetaStrong
  id: NFAnomalousParticleZetaStrong
  categories: [ HideSpawnMenu ]

- type: entity
  parent: AnomalousParticleOmegaStrong
  id: NFAnomalousParticleOmegaStrong
  categories: [ HideSpawnMenu ]

- type: entity
  parent: AnomalousParticleSigma
  id: NFAnomalousParticleSigma
  categories: [ HideSpawnMenu ]

- type: entity
  parent: AnomalousParticleSigmaStrong
  id: NFAnomalousParticleSigmaStrong
  categories: [ HideSpawnMenu ]

- type: entity
  parent: BulletRocket
  id: NFBulletRocket
  categories: [ HideSpawnMenu ]

- type: entity
  parent: BulletWeakRocket
  id: NFBulletWeakRocket
  categories: [ HideSpawnMenu ]

- type: entity
  parent: BulletGrenadeBaton
  id: NFBulletGrenadeBaton
  categories: [ HideSpawnMenu ]

- type: entity
  parent: BulletGrenadeBlast
  id: NFBulletGrenadeBlast
  categories: [ HideSpawnMenu ]

- type: entity
  parent: BulletGrenadeCleanade
  id: NFBulletGrenadeCleanade
  categories: [ HideSpawnMenu ]

- type: entity
  parent: BulletGrenadeFlash
  id: NFBulletGrenadeFlash
  categories: [ HideSpawnMenu ]

- type: entity
  parent: BulletGrenadeFrag
  id: NFBulletGrenadeFrag
  categories: [ HideSpawnMenu ]

- type: entity
  parent: BulletGrenadeEMP
  id: NFBulletGrenadeEMP
  categories: [ HideSpawnMenu ]

- type: entity
  parent: BulletCap
  id: NFBulletCap
  categories: [ HideSpawnMenu ]

- type: entity
  parent: BulletAcid
  id: NFBulletAcid
  categories: [ HideSpawnMenu ]

- type: entity
  parent: BulletCannonBall
  id: NFBulletCannonBall
  categories: [ HideSpawnMenu ]

- type: entity
  parent: GrapplingHook
  id: NFGrapplingHook
  categories: [ HideSpawnMenu ]

- type: entity
  parent: BulletEnergyTurretLaser
  id: NFBulletEnergyTurretLaser
  categories: [ HideSpawnMenu ]
  components:
  - type: Ammo
    muzzleFlash: NFMuzzleFlashEffectHeavyLaser

- type: entity
  parent: BulletEnergyTurretDisabler
  id: NFBulletEnergyTurretDisabler
  categories: [ HideSpawnMenu ]
  components:
  - type: Ammo
    muzzleFlash: NFMuzzleFlashEffectOmnilaser

- type: entity
  parent: PelletShotgunFlare
  id: NFPelletShotgunFlare
  categories: [ HideSpawnMenu ]

- type: entity
  parent: TeslaGunBullet
  id: NFTeslaGunBullet
  categories: [ HideSpawnMenu ]

- type: entity
  name: freezing bolt
  id: NFBoltTempgunCold
  parent: BoltTempgunCold
  categories: [ HideSpawnMenu ]
  components:
  - type: Projectile
    impactEffect: BulletImpactEffectDisabler
    damage:
      types:
        Cold: 4
  - type: TimedDespawn
    lifetime: 3
  - type: ChangeTemperatureOnCollide
    heat: -50000

- type: entity
  id: NFBoltTempgunHot
  parent: BoltTempgunHot
  categories: [ HideSpawnMenu ]
  components:
  - type: Projectile
    impactEffect: BulletImpactEffectOrangeDisabler
    damage:
      types:
        Heat: 4
  - type: ChangeTemperatureOnCollide
    heat: 50000

- type: entity
  parent: BulletWaterShot
  id: NFBulletWaterShot
  categories: [ HideSpawnMenu ]

# region Upstream Spreads

- type: entity
  parent: PelletGrapeshot
  id: NFPelletGrapeshot
  categories: [ HideSpawnMenu ]

- type: entity
  parent: NFPelletGrapeshot
  id: NFPelletGrapeshotSpread
  categories: [ HideSpawnMenu ]
  components:
  - type: ProjectileSpread
    proto: NFPelletGrapeshot
    count: 5
    spread: 40

- type: entity
  parent: PelletGlass
  id: NFPelletGlass
  categories: [ HideSpawnMenu ]

- type: entity
  parent: NFPelletGlass
  id: NFPelletGlassSpread
  categories: [ HideSpawnMenu ]
  components:
  - type: ProjectileSpread
    proto: NFPelletGlass
    count: 5
    spread: 10

# region Do Not Use

# defined to avoid linter issues
# these should not be used in non-abstract entities

- type: entity
  parent: BulletLaserSpread
  id: NFBulletLaserSpread
  categories: [ HideSpawnMenu ]

- type: entity
  parent: AntiParticlesProjectile
  id: NFAntiParticlesProjectile
  categories: [ HideSpawnMenu ]
  components:
  - type: Projectile
    damage:
      types:
        Radiation: 5

- type: entity
  parent: BulletDisablerPractice
  id: NFBulletDisablerPractice
  categories: [ HideSpawnMenu ]

- type: entity
  parent: BulletDisablerSmg
  id: NFBulletDisablerSmg
  categories: [ HideSpawnMenu ]

- type: entity
  parent: BulletTaser
  id: NFBulletTaser
  categories: [ HideSpawnMenu ]
