- type: entity
  parent: VendingMachine
  id: VendingMachineCuddlyCritterVend
  name: CuddlyCritterVend
  description: Step into the world of wonder and warmth with Cuddly Critters Vending Machine, a haven for plushie and toy enthusiasts alike.
  components:
  - type: VendingMachine
    pack: CuddlyCritterVendInventory
    offState: off
    brokenState: broken
    normalState: normal-unshaded
    # ejectState: eject-unshaded  No sprite, see chefvend/dinnerware/BODA/etc for expamples
  - type: DatasetVocalizer
    dataset: CuddlyCritterAds
  - type: Sprite
    sprite: _NF/Structures/Machines/VendingMachines/cuddlycritter.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Base"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: PointLight
    radius: 1.5
    energy: 1.6
    color: "#4b93ad"
  - type: MarketModifier
    mod: 15

- type: entity
  parent: [BaseStructureDisableAnchoring, VendingMachine]
  id: VendingMachineAstroVend
  name: AstroVend
  description: Essential gear for the spaceman on the go.
  components:
  - type: VendingMachine
    pack: AstroVendInventory
    offState: off
    brokenState: broken
    normalState: normal-unshaded
    # ejectState: eject-unshaded  No sprite, see chefvend/dinnerware/BODA/etc for expamples
  - type: DatasetVocalizer
    dataset: AstroVendAds
  - type: Sprite
    sprite: _NF/Structures/Machines/VendingMachines/astrovend.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Base"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: PointLight
    radius: 1.5
    energy: 1.6
    color: "#4b93ad"

- type: entity
  parent: VendingMachineAstroVend
  id: VendingMachineAstroVendPOI
  suffix: POI
  components:
  - type: VendingMachine
    pack: AstroVendPOIInventory

- type: entity
  parent: [BaseStructureDisableAnchoring, VendingMachine]
  id: VendingMachineFlatpackVend
  name: FlatpackVend
  description: Essential tech for the spaceman on the go.
  components:
  - type: VendingMachine
    pack: FlatpackVendInventory
    offState: off
    brokenState: broken
    normalState: normal-unshaded
    ejectState: eject-unshaded
    denyState: deny-unshaded
#  - type: DatasetVocalizer
#    dataset: FlatpackVendAds
  - type: Sprite
    sprite: _NF/Structures/Machines/VendingMachines/flatpackvend.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Base"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: PointLight
    radius: 1.5
    energy: 1.6
    color: "#4b93ad"
  - type: MarketModifier
    mod: 25

- type: entity
  parent: [BaseStructureDisableAnchoring, VendingMachineFlatpackVend]
  id: VendingMachineExpeditionaryFlatpackVend
  name: Expeditionary FlatpackVend
  description: Essential tech for the spaceman on an expedition.
  components:
  - type: VendingMachine
    pack: ExpeditionaryFlatpackVendInventory
  - type: Sprite
    sprite: _NF/Structures/Machines/VendingMachines/expeditionaryflatpackvend.rsi

- type: entity
  parent: [BaseStructureDisableAnchoring, StorePresetUplink, VendingMachine]
  id: VendingMachineSyndieContraband
  name: ContraVend
  description: Wanted across multiple sectors!
  components:
  - type: VendingMachine
    cashSlot: Null
    offState: off
    brokenState: broken
    normalState: normal-unshaded
    ejectState: eject-unshaded
    denyState: deny-unshaded
    screenState: screen
  - type: DatasetVocalizer
    dataset: SyndieDrobeAds
  - type: Sprite
    sprite: _NF/Structures/Machines/VendingMachines/contravend.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Base"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: "screen"
      map: ["enum.VendingMachineVisualLayers.Screen"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: PointLight
    radius: 1.5
    energy: 1.3
    color: "#ad2c2b"
  - type: UserInterface
    interfaces:
      enum.StoreUiKey.Key:
        type: StoreBoundUserInterface
  - type: ActivatableUI
    key: enum.StoreUiKey.Key
  - type: Store
    balance:
      Telecrystal: 4 # Small initial balance
  - type: AccessReader
    access: [["NuclearOperative"], ["SyndicateAgent"]]

- type: entity
  parent: VendingMachine
  id: VendingMachineBountyVend
  name: BountyVend
  description: Essential gear for the bounty hunter on the go.
  components:
  - type: VendingMachine
    pack: BountyVendInventory
    offState: off
    brokenState: broken
    normalState: normal-unshaded
    # ejectState: eject-unshaded  No sprite, see chefvend/dinnerware/BODA/etc for expamples
#  - type: DatasetVocalizer
#    dataset: BountyVendAds
  - type: Sprite
    sprite: _NF/Structures/Machines/VendingMachines/bountyvend.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Base"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: PointLight
    radius: 1.5
    energy: 1.6
    color: "#4b93ad"

- type: entity
  parent: [ BaseStructureDisableAnchoring, VendingMachineBountyVend ]
  id: VendingMachineBountyVendPOI
  suffix: POI
  components:
  - type: VendingMachine
    pack: BountyVendPOIInventory

- type: entity
  id: VendingMachineArcadia
  name: ArcadiaDrobe
  parent: [ VendingMachine, BaseC3Contraband ]
  description: Selling clothes from another reality for cheap prices!
  components:
    - type: VendingMachine
      pack: ArcadiaDrobeInventory
      dispenseOnHitChance: 0.25
      dispenseOnHitThreshold: 2
      offState: off
      brokenState: broken
      normalState: normal-unshaded
      # ejectState: eject-unshaded  No sprite, see chefvend/dinnerware/BODA/etc for expamples
      # denyState: deny-unshaded
      ejectDelay: 3
    - type: DatasetVocalizer
      dataset: ArcadiaDrobeAds
    - type: Sprite
      sprite: _NF/Structures/Machines/VendingMachines/arcadiadrobe.rsi
      layers:
      - state: "off"
        map: ["enum.VendingMachineVisualLayers.Base"]
      - state: "off"
        map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
        shader: unshaded
      - state: panel
        map: ["enum.WiresVisualLayers.MaintenancePanel"]
    - type: PointLight
      radius: 1.5
      energy: 1.6
      color: "#ff033e"

- type: entity
  parent: VendingMachine
  id: LessLethalVendingMachine
  name: LessLethalVend
  description: Making violence safe since '08.
  components:
    - type: VendingMachine
      pack: LessLethalVendInventory
      dispenseOnHitChance: 0.25
      dispenseOnHitThreshold: 2
      offState: off
      brokenState: broken
      normalState: normal-unshaded
      ejectState: eject-unshaded
      denyState: deny-unshaded
      ejectDelay: 3
    - type: DatasetVocalizer
      dataset: LessLethalVendAds
    - type: Sprite
      sprite: _NF/Structures/Machines/VendingMachines/lesslethalvend.rsi
      layers:
      - state: "off"
        map: ["enum.VendingMachineVisualLayers.Base"]
      - state: "off"
        map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
        shader: unshaded
      - state: panel
        map: ["enum.WiresVisualLayers.MaintenancePanel"]
    - type: PointLight
      radius: 1.5
      energy: 1.6
      color: "#ff033e"

- type: entity
  parent: [BaseStructureDisableAnchoring, LessLethalVendingMachine]
  id: LessLethalVendingMachinePOI
  suffix: POI
  components:
    - type: VendingMachine
      pack: LessLethalVendPOIInventory

- type: entity
  parent: VendingMachine
  id: NonLethalVendingMachine
  name: NonLethalVend
  description: Try not to aim for the eyes!
  components:
    - type: VendingMachine
      pack: NonLethalVendInventory
      dispenseOnHitChance: 0.25
      dispenseOnHitThreshold: 2
      offState: off
      brokenState: broken
      normalState: normal-unshaded
      ejectState: eject-unshaded
      denyState: deny-unshaded
      ejectDelay: 3
    - type: DatasetVocalizer
      dataset: LessLethalVendAds
    - type: Sprite
      sprite: _NF/Structures/Machines/VendingMachines/nonlethalvend.rsi
      layers:
      - state: "off"
        map: ["enum.VendingMachineVisualLayers.Base"]
      - state: "off"
        map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
        shader: unshaded
      - state: panel
        map: ["enum.WiresVisualLayers.MaintenancePanel"]
    - type: PointLight
      radius: 1.5
      energy: 1.6
      color: "#ff033e"

- type: entity
  parent: VendingMachine
  id: VendingMachineAutoTuneVend
  name: AutoTune
  description: Feeling BASSed? Time to TUNE into AutoVend! Take NOTES and let your audience TREBLE.
  components:
  - type: VendingMachine
    pack: AutoTuneVendInventory
    offState: off
    brokenState: broken
    normalState: normal-unshaded
    ejectState: eject-unshaded
    denyState: deny-unshaded
#  - type: DatasetVocalizer
#    dataset: AutoTuneVendAds
  - type: Sprite
    sprite: _NF/Structures/Machines/VendingMachines/autotunevend.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Base"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: PointLight
    radius: 1.5
    energy: 1.6
    color: "#4b93ad"
#Interface
  - type: UserInterface
    interfaces:
      enum.VendingMachineUiKey.Key:
        type: VendingMachineBoundUserInterface
      enum.WiresUiKey.Key:
        type: WiresBoundUserInterface
      enum.InstrumentUiKey.Key: # Added
        type: InstrumentBoundUserInterface # Added
#Music
  - type: Instrument
    allowPercussion: true
    allowProgramChange: true
    handheld: false
#Ghost
  # - type: GhostRole
    # makeSentient: true
    # allowSpeech: true
  # - type: GhostTakeoverAvailable

- type: entity
  parent: [BaseStructureDisableAnchoring, VendingMachine]
  id: VendingMachinePottedPlantVend
  name: Plant-O-Matic
  description: Sometimes potted plants are the best crewmates money can get.
  components:
  - type: VendingMachine
    pack: PottedPlantVendInventory
    offState: off
    brokenState: broken
    normalState: normal-unshaded
    ejectState: eject-unshaded
    denyState: deny-unshaded
  - type: DatasetVocalizer
    dataset: MegaSeedAds
  - type: Sprite
    sprite: _NF/Structures/Machines/VendingMachines/pottedplantvend.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Base"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: PointLight
    radius: 1.4
    energy: 1.7
    softness: 0.9
    offset: "0, -0.6"
    color: "#EEEEFF"

- type: entity
  parent: [BaseStructureDisableAnchoring, VendingMachine]
  id: VendingMachineNfsdDrobe
  name: NFSDDrobe
  description: A vending machine for NFSD and NFSD clothing!
  components:
  - type: VendingMachine
    pack: NfsdDrobeInventory
    offState: off
    brokenState: broken
    normalState: normal-unshaded
  - type: DatasetVocalizer
    dataset: NfsdDrobeAds
  - type: Sprite
    sprite: _NF/Structures/Machines/VendingMachines/nfsddrobe.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Base"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: AccessReader
    access: [["Security"]]

- type: entity
  parent: [BaseStructureDisableAnchoring, VendingMachine]
  id: VendingMachineYarrrDrobe
  name: YarrrDrobe
  description: A vending machine for skallywags and booty lovers!
  components:
  - type: VendingMachine
    pack: YarrrDrobeInventory
    offState: off
    brokenState: broken
    normalState: normal-unshaded
  - type: DatasetVocalizer
    dataset: YarrrDrobeAds
  - type: Sprite
    sprite: _NF/Structures/Machines/VendingMachines/yarrrdrobe.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Base"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]

- type: entity
  parent: [BaseStructureDisableAnchoring, VendingMachine]
  id: VendingMachineNfsdTech
  name: NFSDTech
  description: A vending machine for NFSD and NFSD tech!
  components:
  - type: VendingMachine
    pack: NfsdTechInventory
    offState: off
    brokenState: broken
    normalState: normal-unshaded
  - type: DatasetVocalizer
    dataset: NfsdDrobeAds
  - type: Sprite
    sprite: _NF/Structures/Machines/VendingMachines/nfsdtech.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Base"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: AccessReader
    access: [["Security"]]

- type: entity
  parent: [BaseStructureDisableScrewing, BaseStructureIndestructible, BaseStructureAccessReaderImmuneToEmag, VendingMachineCart]
  id: NFVendingMachineCart
  suffix: SR
  components:
  - type: VendingMachine
    pack: NFPTechInventory
  - type: AccessReader
    access: [["HeadOfPersonnel"]]
  - type: MarketModifier
    mod: 5

- type: entity
  parent: NFVendingMachineCart
  id: NFVendingMachineCartNfsd
  suffix: NFSD
  components:
  - type: VendingMachine
    pack: NFPTechNfsdInventory
  - type: AccessReader
    access: [["HeadOfSecurity"]]

# Punk stuff
- type: entity
  parent:
  - VendingMachine
  - PunkHoloGraffitiOverlay # Prototype can be located at \Resources\Prototypes\_NF\Entities\Structures\Holographic\graffiti.yml
  id: VendingMachineClothingPunk
  name: ThreadsChoom
  description: A vandalized ClothesMate.
  components:
  - type: VendingMachine
    pack: VendingMachineBountyVendPunkInventory
    offState: off
    brokenState: broken
    normalState: normal-unshaded
    ejectState: eject-unshaded
    denyState: deny-unshaded
  - type: DatasetVocalizer
    dataset: VandalizedBountyVendAds
  - type: Sprite
    sprite: _NF/Structures/Machines/VendingMachines/threadschoom.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Base"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
    - sprite: _NF/Structures/Holo/graffiti/simple.rsi
      state: holograffiti01
      map: [ "graffiti" ]
      shader: unshaded
      scale: 0.7, 0.7
  - type: PointLight
    radius: 1.4
    energy: 1.7
    softness: 0.9
    offset: "0, -0.6"
    color: "#f96363"

- type: entity
  parent:
  - VendingMachine
  - PunkHoloGraffitiOverlay # Prototype can be located at \Resources\Prototypes\_NF\Entities\Structures\Holographic\graffiti.yml
  id: VendingMachineBountyVendPunk
  name: BonanzaMatic
  description: A vandalised BountyVend.
  components:
  - type: VendingMachine
    pack: VendingMachineBountyVendPunkInventory
    offState: off
    brokenState: broken
    normalState: normal-unshaded
    ejectState: eject-unshaded
    denyState: deny-unshaded
  - type: DatasetVocalizer
    dataset: VandalizedBountyVendAds
  - type: Sprite
    sprite: _NF/Structures/Machines/VendingMachines/bonanzamatic.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Base"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
    - sprite: _NF/Structures/Holo/graffiti/simple.rsi
      state: holograffiti01
      map: [ "graffiti" ]
      shader: unshaded
      scale: 0.7, 0.7
  - type: PointLight
    radius: 1.4
    energy: 1.7
    softness: 0.9
    offset: "0, -0.6"
    color: "#85daeb"

- type: entity
  parent: [BaseStructureDisableToolUse, BaseStructureIndestructible, VendingMachine]
  id: VendingMachineFuelVend
  name: FuelVend
  description: A vendor selling fuel for ship engines. Smells like ozone.
  components:
  - type: VendingMachine
    pack: VendingMachineFuelVendInventory
    offState: off
    brokenState: broken
    normalState: normal-unshaded
    ejectState: eject-unshaded
    denyState: deny-unshaded
    ejectDelay: 2.1
  - type: DatasetVocalizer
    dataset: FuelVendAds
  - type: SpeakOnUIClosed
    pack: FuelVendGoodbyes
  - type: Sprite
    sprite: _NF/Structures/Machines/VendingMachines/fuelvend.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Base"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]

- type: entity
  id: BaseCiviMedVend
  abstract: true
  components:
  - type: VendingMachine
    pack: CiviMedVendInventory
    taxAccounts:
      Medical: 0.4
    offState: off
    brokenState: broken
    normalState: normal-unshaded
    # ejectState: eject-unshaded  No sprite, see chefvend/dinnerware/BODA/etc for expamples
  - type: DatasetVocalizer
    dataset: CiviMedAds
  - type: SpeakOnUIClosed
    pack: CiviMedGoodbyes
  - type: PointLight
    radius: 1.5
    energy: 1.6
    color: "#4b93ad"
  - type: MarketModifier
    mod: 30 # damn
  - type: Sprite
    sprite: _NF/Structures/Machines/VendingMachines/civimed.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Base"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]

- type: entity
  parent: [BaseCiviMedVend, BaseStructureDisableAnchoring, BaseStructureIndestructible, VendingMachine]
  id: VendingMachineCiviMedPlus
  name: CiviMed Plus
  description: CiviMed Plus, distributing lifesaving meds harder than the rocks you break! Miners, DON'T DIE!

- type: entity
  parent: [BaseCiviMedVend, BaseStructureDisableAnchoring, BaseStructureIndestructible, VendingMachineWallmount]
  id: VendingMachineCiviMed
  name: CiviMed
  description: CiviMed, distributing lifesaving meds harder than the rocks you break! Miners, DON'T DIE!
  components:
  - type: Sprite
    sprite: _NF/Structures/Machines/VendingMachines/wallcivimed.rsi
  - type: Physics
    bodyType: Static
    canCollide: false

- type: entity
  parent: VendingMachine
  id: VendingMachineValetDrobe
  name: ValetDrobe
  description: Assist others in style! Dress in top-top shape for tip-top tips!
  components:
  - type: VendingMachine
    pack: ValetDrobeInventory
    offState: off
    brokenState: broken
    normalState: normal-unshaded
    # ejectState: eject-unshaded  No sprite, see chefvend/dinnerware/BODA/etc for expamples
  - type: DatasetVocalizer
    dataset: ValetDrobeAds
  - type: SpeakOnUIClosed
    pack: ValetDrobeGoodbyes
  - type: Sprite
    sprite: _NF/Structures/Machines/VendingMachines/valetdrobe.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Base"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: PointLight
    radius: 1.5
    energy: 1.6
    color: "#4b93ad"
  - type: AccessReader
    access: [["Service"]] # Mail Carrier and Janitor teaming up to loot the machine dry.

- type: entity
  parent: VendingMachine
  id: VendingMachineMailVend
  name: MailVend
  description: Make your thoughts known, send a letter today!
  components:
  - type: VendingMachine
    pack: MailVendInventory
    offState: off
    brokenState: broken
    normalState: normal-unshaded
    # ejectState: eject-unshaded  No sprite, see chefvend/dinnerware/BODA/etc for expamples
    taxAccounts:
      Frontier: 0.75
  - type: DatasetVocalizer
    dataset: MailVendAds
  - type: SpeakOnUIClosed
    pack: MailVendGoodbyes
  - type: Sprite
    sprite: _NF/Structures/Machines/VendingMachines/mailvend.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Base"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: PointLight
    radius: 1.5
    energy: 1.6
    color: "#4b93ad"

- type: entity
  parent: [BaseStructureDisableAnchoring, VendingMachine]
  id: VendingMachinePickNPack
  name: Pick-n-Pack
  description: Putting arms in your hands since 2549.
  components:
  - type: VendingMachine
    pack: PickNPackInventory
    offState: off
    brokenState: broken
    normalState: normal-unshaded
    ejectState: eject-unshaded
    denyState: deny-unshaded
  - type: DatasetVocalizer
    dataset: VandalizedBountyVendAds
  - type: Sprite
    sprite: _NF/Structures/Machines/VendingMachines/picknpackvend.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Base"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: PointLight
    radius: 1.4
    energy: 1.7
    softness: 0.9
    offset: "0, -0.6"
    color: "#EEEEFF"

- type: entity
  parent: [BaseStructureDisableAnchoring, VendingMachine]
  id: VendingMachinePosterPrinter
  name: PosterPress
  description: Print and post! Or post and print?
  suffix: Frontier posters
  components:
  - type: VendingMachine
    pack: PosterPrinterFrontierVendInventory
    offState: off-frontier
    brokenState: broken-frontier
    normalState: normal-unshaded-frontier
    ejectState: eject-unshaded
    denyState: deny-unshaded
  - type: DatasetVocalizer
    dataset: PosterPressVendAds
  - type: SpeakOnUIClosed
    pack: PosterPressVendGoodbyes
  - type: Sprite
    sprite: _NF/Structures/Machines/VendingMachines/postervend.rsi
    layers:
    - state: "off-frontier"
      map: ["enum.VendingMachineVisualLayers.Base"]
    - state: "off-frontier"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: PointLight
    radius: 1.4
    energy: 1.7
    softness: 0.9
    offset: "0, -0.6"
    color: "#EEEEFF"

- type: entity
  parent: [VendingMachinePosterPrinter, BaseStructureDisableAnchoring]
  id: VendingMachinePosterPrinterPOI
  suffix: POI, Frontier posters
  components:
  - type: VendingMachine
    pack: PosterPrinterFrontierVendPOIInventory

- type: entity
  parent: VendingMachinePosterPrinter
  id: VendingMachinePosterPrinterNanotrasen
  suffix: Nanotrasen posters
  components:
  - type: VendingMachine
    pack: PosterPrinterNanotrasenVendInventory
    offState: off-nanotrasen
    brokenState: broken-nanotrasen
    normalState: normal-unshaded-nanotrasen
    ejectState: eject-unshaded
    denyState: deny-unshaded
  - type: Sprite
    layers:
    - state: "off-nanotrasen"
      map: ["enum.VendingMachineVisualLayers.Base"]
    - state: "off-nanotrasen"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]

- type: entity
  parent: [VendingMachinePosterPrinterNanotrasen, BaseStructureDisableAnchoring]
  id: VendingMachinePosterPrinterNanotrasenPOI
  suffix: POI, Nanotrasen posters
  components:
  - type: VendingMachine
    pack: PosterPrinterNanotrasenVendPOIInventory

- type: entity
  parent: VendingMachinePosterPrinter
  id: VendingMachinePosterPrinterSyndicate
  suffix: Contraband posters
  components:
  - type: VendingMachine
    pack: PosterPrinterSyndicateVendInventory
    offState: off-syndicate
    brokenState: broken-syndicate
    normalState: normal-unshaded-syndicate
    ejectState: eject-unshaded
    denyState: deny-unshaded
  - type: Sprite
    layers:
    - state: "off-syndicate"
      map: ["enum.VendingMachineVisualLayers.Base"]
    - state: "off-syndicate"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: PointLight
    radius: 1.4
    energy: 1.7
    softness: 0.9
    offset: "0, -0.6"
    color: "#ff8a8a"

- type: entity
  parent: [VendingMachinePosterPrinterSyndicate, BaseStructureDisableAnchoring]
  id: VendingMachinePosterPrinterSyndicatePOI
  suffix: POI, Contraband posters
  components:
  - type: VendingMachine
    pack: PosterPrinterSyndicateVendPOIInventory

- type: entity
  parent: VendingMachinePosterPrinter
  id: VendingMachinePaintingPrinter
  name: ArtPress
  suffix: Paintings
  components:
  - type: VendingMachine
    pack: PaintingPrinterVendInventory
    offState: off-painting
    brokenState: broken-painting
    normalState: normal-unshaded-painting
    ejectState: eject-unshaded
    denyState: deny-unshaded
  - type: Sprite
    layers:
    - state: "off-painting"
      map: ["enum.VendingMachineVisualLayers.Base"]
    - state: "off-painting"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]

- type: entity
  parent: [VendingMachinePaintingPrinter, BaseStructureDisableAnchoring]
  id: VendingMachinePaintingPrinterPOI
  suffix: POI, Paintings
  components:
  - type: VendingMachine
    pack: PaintingPrinterVendPOIInventory

#region POI versions of upstream machines

- type: entity
  parent: [VendingMachineAmmo, BaseStructureDisableAnchoring]
  id: VendingMachineAmmoPOI
  suffix: POI
  components:
  - type: VendingMachine
    pack: WeaponryWorksVendPOIInventory

- type: entity
  parent: [VendingMachineEngivend, BaseStructureDisableAnchoring]
  id: VendingMachineEngivendPOI
  suffix: POI
  components:
  - type: VendingMachine
    pack: EngiVendPOIInventory

- type: entity
  parent: [VendingMachineVendomat, BaseStructureDisableAnchoring]
  id: VendingMachineVendomatPOI
  suffix: POI
  components:
  - type: VendingMachine
    pack: VendomatPOIInventory

- type: entity
  parent: [VendingMachineYouTool, BaseStructureDisableAnchoring]
  id: VendingMachineYouToolPOI
  suffix: POI
  components:
  - type: VendingMachine
    pack: YouToolPOIInventory

- type: entity
  parent: [VendingMachineSalvage, BaseStructureDisableAnchoring]
  id: VendingMachineSalvagePOI
  suffix: POI
  components:
  - type: VendingMachine
    pack: NFSalvageEquipmentPOIInventory

- type: entity
  parent: [VendingMachineMediDrobe, BaseStructureDisableAnchoring]
  id: VendingMachineMediDrobePOI
  suffix: POI
  components:
  - type: VendingMachine
    pack: MediDrobeInventory

- type: entity
  parent: [VendingMachinePottedPlantVend, BaseStructureDisableAnchoring]
  id: VendingMachinePottedPlantVendPOI
  suffix: POI
  components:
  - type: VendingMachine
    pack: PottedPlantVendInventory

- type: entity
  parent: [VendingMachineGames, BaseStructureDisableAnchoring]
  id: VendingMachineGamesPOI
  suffix: POI
  components:
  - type: VendingMachine
    pack: GoodCleanFunInventory

- type: entity
  parent: [VendingMachineCigs, BaseStructureDisableAnchoring]
  id: VendingMachineCigsPOI
  suffix: POI
  components:
  - type: VendingMachine
    pack: CigaretteMachineInventory

- type: entity
  parent: [VendingMachineBooze, BaseStructureDisableAnchoring]
  id: VendingMachineBoozePOI
  suffix: POI
  components:
  - type: VendingMachine
    pack: BoozeOMatInventory

- type: entity
  parent: [VendingMachineCuddlyCritterVend, BaseStructureDisableAnchoring]
  id: VendingMachineCuddlyCritterVendPOI
  suffix: POI

- type: entity
  parent: [VendingMachineAutoTuneVend, BaseStructureDisableAnchoring]
  id: VendingMachineAutoTuneVendPOI
  suffix: POI

# Gas Tank Dispenser

- type: entity
  parent: [VendingMachineTankDispenserEVA, BaseStructureDisableAnchoring] #This one is flagged as POI
  id: VendingMachineTankDispenserEVAPOI
  suffix: POI, EVA [O2, N2]
  components:
  - type: VendingMachine
    pack: TankDispenserEVAPOIInventory

- type: entity
  parent: [VendingMachinePickNPack, BaseStructureDisableAnchoring]
  id: VendingMachinePickNPackPOI
  suffix: POI
  components:
  - type: VendingMachine
    pack: PickNPackPOIInventory
  - type: AccessReader
    access: [["Mercenary"], ["Security"], ["HeadOfPersonnel"], ["HeadOfSecurity"]]
  - type: ActivatableUIRequiresAccess

#region conjured MagiVend
- type: entity
  parent: [ BaseC3WizardContraband, VendingMachineMagivend ]
  id: NFVendingMachineMagivend
  suffix: Frontier
  components:
  - type: VendingMachine
    pack: MagivendConjuredInventory
    offState: off
    brokenState: broken
    normalState: normal-unshaded

- type: entity
  parent: [ VendingMachineMagivend, ConjuredObject180 ]
  id: VendingMachineMagivendConjured
  name: conjured MagiVend
  description: A conjured magic vending machine. It will disappear shortly.
  components:
  - type: VendingMachine
    pack: MagivendConjuredInventory
    offState: off
    brokenState: broken
    normalState: normal-unshaded

#region DEBUG
- type: entity
  categories: [ DoNotMap ]
  parent: VendingMachineBountyVendPunk
  id: DEBUGVendingMachineRangedWeapons
  name: All Guns
  suffix: DEBUG, Guns
  components:
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeAabb
          bounds: "-0.3,-0.16,0.3,0.16"
        density: 190
        mask:
        - TabletopMachineMask
        layer:
        - TabletopMachineLayer
  - type: VendingMachine
    pack: DEBUGVendingMachineInventoryRangedWeapons

- type: entity
  categories: [ DoNotMap ]
  parent: VendingMachineClothingPunk
  id: DEBUGVendingMachineMagazines
  name: All Gun Magazines
  suffix: DEBUG, Magazines
  components:
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeAabb
          bounds: "-0.3,-0.16,0.3,0.16"
        density: 190
        mask:
        - TabletopMachineMask
        layer:
        - TabletopMachineLayer
  - type: VendingMachine
    pack: DEBUGVendingMachineInventoryMagazines

- type: entity
  categories: [ DoNotMap ]
  parent: VendingMachineClothingPunk
  id: DEBUGVendingMachineAmmoBoxes
  name: All Ammo Boxes
  suffix: DEBUG, Ammo Boxes
  components:
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeAabb
          bounds: "-0.3,-0.16,0.3,0.16"
        density: 190
        mask:
        - TabletopMachineMask
        layer:
        - TabletopMachineLayer
  - type: VendingMachine
    pack: DEBUGVendingMachineInventoryAmmoBoxes
