- type: entity
  name: BaseWeaponLauncher
  parent: [ BaseItem, BaseGunWieldable ]
  id: BaseWeaponLauncher
  description: A rooty tooty point and shooty.
  abstract: true
  components:
  - type: Sprite
  - type: Clothing
    sprite: Objects/Weapons/Guns/Launchers/china_lake.rsi
    quickEquip: false
    slots:
    - Back
  - type: Item
    size: Ginormous
  - type: StaticPrice
    price: 500
  - type: ContainerContainer
    containers:
      ballistic-ammo: !type:Container
        ents: []
  - type: Gun
    fireRate: 1
    projectileSpeed: 25 # Slower than a bullet, same speed as our old projectile limit.
    selectedMode: SemiAuto
    availableModes:
    - SemiAuto
    soundGunshot:
      path: /Audio/Weapons/Guns/Gunshots/grenade_launcher.ogg

- type: entity
  name: china lake
  parent: [BaseWeaponLauncher, BaseTraitorContraband, BaseExaminableClothing] # starcup: shared contraband level with nt gear, examinable clothing
  id: WeaponLauncherChinaLake
  description: PLOOP.
  components:
  - type: Sprite
    sprite: Objects/Weapons/Guns/Launchers/china_lake.rsi
    layers:
      - state: icon
        map: ["enum.GunVisualLayers.Base"]
  - type: Clothing
    sprite: Objects/Weapons/Guns/Launchers/china_lake.rsi
    slots:
    - Back
    - suitStorage
  - type: Item
    size: Huge
    shape:
    - 0,0,4,2
  - type: AmmoCounter
  - type: BallisticAmmoProvider
    whitelist:
      tags:
        - Grenade
    capacity: 3
    proto: GrenadeFrag
    soundInsert:
      path: /Audio/Weapons/Guns/MagIn/batrifle_magin.ogg
  - type: GunRequiresWield
  # begin starcup: examinable clothing
  - type: ExaminableClothing
    examineText: clothing-china-lake
  # end starcup
  - type: StaticPrice
    price: 10000

- type: entity
  parent: [ BaseWeaponLauncher, BaseMajorContraband ]
  id: WeaponLauncherHydra
  name: hydra
  description: PLOOP... FSSSSSS...
  components:
  - type: Sprite
    sprite: Objects/Weapons/Guns/Launchers/hydra_launcher.rsi
    layers:
    - state: icon
      map: [ "enum.GunVisualLayers.Base" ]
  - type: Clothing
    sprite: Objects/Weapons/Guns/Launchers/hydra_launcher.rsi
    slots:
    - Back
    - suitStorage
  - type: Item
    size: Huge
  - type: AmmoCounter
  - type: GunRequiresWield
  - type: ContainerContainer
    containers:
      revolver-ammo: !type:Container
  - type: RevolverAmmoProvider
    whitelist:
      tags:
      - Grenade
    proto: GrenadeCleanade
    capacity: 6
    chambers: [ True, True, True, True, True, True ]
    ammoSlots: [ null, null, null, null, null, null ]
    soundEject:
      path: /Audio/Weapons/Guns/MagOut/sfrifle_magout.ogg
    soundInsert:
      path: /Audio/Weapons/Guns/MagIn/sfrifle_magin.ogg

- type: entity
  parent: [WeaponLauncherHydra]
  id: WeaponLauncherHydraLethal
  suffix: frag
  components:
  - type: RevolverAmmoProvider
    proto: GrenadeFrag

- type: entity
  name: RPG-7
  parent: [ BaseWeaponLauncher, BaseMajorContraband ]
  id: WeaponLauncherRocket
  description: A modified ancient rocket-propelled grenade launcher.
  components:
  - type: Sprite
    sprite: Objects/Weapons/Guns/Launchers/rocket.rsi
    layers:
      - state: base
        map: ["enum.GunVisualLayers.Base"]
      - state: mag-0
        map: ["enum.GunVisualLayers.Mag"]
  - type: Clothing
    sprite: Objects/Weapons/Guns/Launchers/rocket.rsi
  - type: Gun
    fireRate: 0.5
    soundGunshot:
      path: /Audio/Weapons/Guns/Gunshots/rpgfire.ogg
  - type: BallisticAmmoProvider
    whitelist:
      tags:
        - CartridgeRocket
    proto: CartridgeRocket
    capacity: 1
    soundInsert:
      path: /Audio/Weapons/Guns/MagIn/batrifle_magin.ogg
  - type: MagazineVisuals
    magState: mag
    steps: 2
    zeroVisible: false
  - type: Appearance

- type: entity
  name: multiple rocket launcher
  parent: BaseWeaponLauncher
  id: WeaponLauncherMultipleRocket
  description: A modified ancient rocket-propelled grenade launcher.
  components:
  - type: Sprite
    sprite: Objects/Weapons/Guns/Launchers/rocket.rsi
    layers:
      - state: base
        map: ["enum.GunVisualLayers.Base"]
      - state: mag-0
        map: ["enum.GunVisualLayers.Mag"]
  - type: Clothing
    sprite: Objects/Weapons/Guns/Launchers/rocket.rsi
  - type: Gun
    fireRate: 6
    selectedMode: FullAuto
    availableModes:
      - FullAuto
    soundGunshot:
      path: /Audio/Weapons/Guns/Gunshots/rpgfire.ogg
  - type: BallisticAmmoProvider
    whitelist:
      tags:
        - CartridgeRocket
    proto: CartridgeRocketSlow
    soundInsert:
      path: /Audio/Weapons/Guns/MagIn/batrifle_magin.ogg
  - type: MagazineVisuals
    magState: mag
    steps: 2
    zeroVisible: true
  - type: Appearance

- type: entity
  name: pirate cannon
  parent: BaseWeaponLauncher
  id: WeaponLauncherPirateCannon
  description: Kaboom!
  components:
    - type: Sprite
      sprite: Objects/Weapons/Guns/Launchers/pirate_cannon.rsi
      layers:
        - state: icon
          map: ["enum.GunVisualLayers.Base"]
    - containers:
        balistic-ammo: !type:Container
          ents: []
        ballistic-ammo: !type:Container
          ents: []
      type: ContainerContainer
    - type: Clothing
      sprite: Objects/Weapons/Guns/Launchers/pirate_cannon.rsi
    - type: Gun
      fireRate: 1
      soundGunshot:
        path: /Audio/Weapons/Guns/Gunshots/mateba.ogg
    - type: BallisticAmmoProvider
      whitelist:
        tags:
          - CannonBall
      capacity: 1
      proto: CannonBall
      soundInsert:
        path: /Audio/Weapons/Guns/Gunshots/grenade_launcher.ogg

- type: entity
  name: tether gun
  parent:
  - BaseItem
  - PowerCellSlotMediumItem
  id: WeaponTetherGun
  description: Manipulates gravity around objects to fling them at high velocities.
  components:
    - type: Item
      size: Normal
    - type: TetherGun
      frequency: 5
      dampingRatio: 4
    - type: ItemToggle
      onUse: false
    - type: PowerCellDraw
    - type: ToggleCellDraw
    - type: Sprite
      sprite: Objects/Weapons/Guns/Launchers/tether_gun.rsi
      layers:
        - state: base
        - state: base-unshaded
          map: [ "unshaded" ]
          shader: unshaded
          visible: false
    - type: ToggleableVisuals
      spriteLayer: unshaded
      inhandVisuals:
        left:
          - state: inhand-left-unshaded
            shader: unshaded
        right:
          - state: inhand-right-unshaded
            shader: unshaded
    - type: Appearance
    - type: GenericVisualizer
      visuals:
        enum.TetherVisualsStatus.Key:
          unshaded:
            True: { visible: true }
            False: { visible: false }

- type: entity
  name: force gun
  parent:
    - BaseItem
    - PowerCellSlotMediumItem
  id: WeaponForceGun
  description: Manipulates gravity around objects to fling them at high velocities.
  components:
    - type: Item
      size: Normal
    - type: ForceGun
      frequency: 15
      dampingRatio: 4
      massLimit: 50
      lineColor: "#18a2d5"
      soundLaunch:
        path: /Audio/Weapons/soup.ogg
        params:
          volume: 2
    - type: ItemToggle
      onUse: false
    - type: PowerCellDraw
    - type: ToggleCellDraw
    - type: Sprite
      sprite: Objects/Weapons/Guns/Launchers/force_gun.rsi
      layers:
        - state: base
        - state: base-unshaded
          map: [ "unshaded" ]
          shader: unshaded
          visible: false
        - type: ToggleableVisuals
          spriteLayer: unshaded
          inhandVisuals:
            left:
              - state: inhand-left-unshaded
                shader: unshaded
            right:
              - state: inhand-right-unshaded
                shader: unshaded
        - type: Appearance
        - type: GenericVisualizer
          visuals:
            enum.TetherVisualsStatus.Key:
              unshaded:
                True: { visible: true }
                False: { visible: false }

- type: entity
  name: grappling gun
  parent: BaseItem
  id: WeaponGrapplingGun
  components:
    - type: Item
      size: Small
      shape:
      - 0,0,1,0
      - 0,1,0,1
      storedOffset: 0,-6
    - type: AmmoCounter
    - type: GrapplingGun
    - type: Gun
      soundGunshot: /Audio/Weapons/Guns/Gunshots/harpoon.ogg
      fireRate: 0.5
      clumsyProof: true
    - type: BasicEntityAmmoProvider
      proto: GrapplingHook
      capacity: 1
    - type: Sprite
      sprite: Objects/Weapons/Guns/Launchers/grappling_gun.rsi
      layers:
        - state: base
        - state: base-unshaded
          map: [ "unshaded" ]
          visible: true
    - type: UseDelay
      delay: 1.5
    - type: Appearance
    - type: GenericVisualizer
      visuals:
        enum.TetherVisualsStatus.Key:
          unshaded:
            True: { state: base-unshaded }
            False: { state: base-unshaded-off }
    - type: PacifismAllowedGun

# Admeme
- type: entity
  name: tether gun
  parent: BaseItem
  id: WeaponTetherGunAdmin
  suffix: Admeme
  description: Manipulates gravity around objects to fling them at high velocities.
  components:
    - type: Item
      size: Normal
    - type: TetherGun
      canTetherAlive: true
      canUnanchor: true
      maxForce: 10000
      massLimit: 10000
      dampingRatio: 4
      frequency: 20
    - type: Sprite
      sprite: Objects/Weapons/Guns/Launchers/tether_gun.rsi
      layers:
        - state: base
        - state: base-unshaded
          map: [ "unshaded" ]
          shader: unshaded
          visible: false
    - type: ToggleableVisuals
      spriteLayer: unshaded
      inhandVisuals:
        left:
          - state: inhand-left-unshaded
            shader: unshaded
        right:
          - state: inhand-right-unshaded
            shader: unshaded
    - type: Appearance
    - type: GenericVisualizer
      visuals:
        enum.TetherVisualsStatus.Key:
          unshaded:
            True: { visible: true }
            False: { visible: false }

- type: entity
  name: force gun
  parent: BaseItem
  id: WeaponForceGunAdmin
  suffix: Admeme
  description: Manipulates gravity around objects to fling them at high velocities.
  components:
    - type: Item
      size: Normal
    - type: ForceGun
      canTetherAlive: true
      canUnanchor: true
      maxForce: 10000
      massLimit: 10000
      frequency: 15
      dampingRatio: 4
      throwForce: 50
      throwDistance: 100
      lineColor: "#18a2d5"
    - type: Sprite
      sprite: Objects/Weapons/Guns/Launchers/force_gun.rsi
      layers:
        - state: base
        - state: base-unshaded
          map: [ "unshaded" ]
          shader: unshaded
          visible: false
    - type: ToggleableVisuals
      spriteLayer: unshaded
      inhandVisuals:
        left:
          - state: inhand-left-unshaded
            shader: unshaded
        right:
          - state: inhand-right-unshaded
            shader: unshaded
    - type: Appearance
    - type: GenericVisualizer
      visuals:
        enum.TetherVisualsStatus.Key:
          unshaded:
            True: { visible: true }
            False: { visible: false }

- type: entity
  name: meteor launcher
  parent: WeaponLauncherMultipleRocket
  id: WeaponLauncherAdmemeMeteorLarge
  suffix: Admeme
  description: It fires large meteors.
  components:
  - type: BallisticAmmoProvider
    proto: MeteorMedium

- type: entity
  name: immovable rod launcher
  parent: WeaponLauncherAdmemeMeteorLarge
  id: WeaponLauncherAdmemeImmovableRodSlow
  suffix: Admeme
  description: It fires slow immovable rods.
  components:
  - type: BallisticAmmoProvider
    proto: ImmovableRodSlow
