- type: entity
  id: BaseSlotMachine
  parent: BaseMachinePowered
  name: slot machine
  abstract: true
  description: Gambling for the antisocial.
  components:
  - type: StationAiWhitelist
  - type: AmbientOnPowered
  - type: AmbientSound
    volume: -9
    range: 3
    enabled: false
    sound:
      path: /Audio/Ambience/Objects/vending_machine_hum.ogg
  - type: Transform
    noRot: false
  - type: Rotatable
    rotateWhileAnchored: false
    rotateWhilePulling: true
  - type: Destructible
    thresholds:
    - trigger:
        !type:DamageTrigger
        damage: 200
      behaviors:
      - !type:PlaySoundBehavior
        sound:
          collection: MetalGlassBreak
      - !type:DoActsBehavior
        acts: [ "Destruction" ]
  - type: Electrified
    enabled: false
    usesApcPower: true
  - type: PointLight
    enabled: false
    castShadows: false
    radius: 2
    energy: 1.5
    mask: /Textures/Effects/LightMasks/cone.png
    autoRot: true
  - type: LitOnPowered
  - type: ApcPowerReceiver
    powerLoad: 200
  - type: Repairable
    doAfterDelay: 8
  - type: Anchorable
  - type: TypingIndicator
    proto: robot
  - type: Speech
    speechVerb: Robotic
    speechSounds: Vending
  - type: SentienceTarget
    flavorKind: station-event-random-sentience-flavor-mechanical
    weight: 0.125
  - type: StaticPrice
    price: 100
  - type: CollectiveMind
    defaultChannel: Binary
    channels:
    - Binary
  - type: Vocalizer
    minVocalizeInterval: 8m
    maxVocalizeInterval: 10m
    hideChat: true
  - type: VocalizerRequiresPower
  - type: DatasetVocalizer
    dataset: SlotMachineAds
  - type: ContainerContainer
    containers:
      money: !type:ContainerSlot
        showEnts: false
        occludes: true
        ent: null
  - type: ItemSlots
    slots:
      money:
        name: spesos
        whitelist:
          components:
          - Cash
  - type: LanguageSpeaker # Einstein Engines - Languages
  - type: LanguageKnowledge # Einstein Engines - Languages
    speaks:
    - TauCetiBasic
    - RobotTalk
    understands:
    - TauCetiBasic
    - RobotTalk
  - type: SlotMachine
  - type: DoAfter

- type: entity
  id: SlotMachine
  parent: BaseSlotMachine
  name: slot machine
  description: Gambling for the antisocial.
  components:
  - type: Sprite
    sprite: _Goobstation/Structures/Machines/slotmachines/slotmachine.rsi
    layers:
      - state: slotmachine
      - state: slotmachine_spin
        visible: false
        map: ["slotmachine_spin"]
      - state: panel
        map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: WiresPanel
  - type: WiresVisuals
  - type: Wires
    layoutId: SlotMachine
    boardName: wires-board-name-slot-machine
  - type: GenericVisualizer # I have NO idea how this works
    visuals:
      enum.SlotMachineVisuals.Spinning:
        slotmachine_spin:
          True: { visible: true }
          False: { visible: false }
  - type: Appearance
  - type: UserInterface
    interfaces:
      enum.WiresUiKey.Key:
        type: WiresBoundUserInterface

- type: entity
  id: SlotMachineHighRoller
  parent: BaseSlotMachine
  name: the QM's personal slot machine
  description: A high roller version of the slot machine, takes a whopping 100k per spin, but you can win 1 MILLION from it!
  components:
  - type: Sprite
    sprite: _Goobstation/Structures/Machines/slotmachines/slotmachinehighroller.rsi
    layers:
      - state: slotmachine
      - state: slotmachine_spin
        visible: false
        map: ["slotmachine_spin"]
      - state: panel
        map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: WiresPanel
  - type: WiresVisuals
  - type: Wires
    layoutId: SlotMachine
    boardName: wires-board-name-slot-machine
  - type: GenericVisualizer # I have NO idea how this works
    visuals:
      enum.SlotMachineVisuals.Spinning:
        slotmachine_spin:
          True: { visible: true }
          False: { visible: false }
  - type: Appearance
  - type: UserInterface
    interfaces:
      enum.WiresUiKey.Key:
        type: WiresBoundUserInterface
  - type: SlotMachine
    spinCost: 100000
    smallPrizeAmount: 0
    mediumPrizeAmount: 0
    bigPrizeAmount: 0
    jackPotPrizeAmount: 1000000
    godPotPrize: Throngler
    smallWinChance: 0
    mediumWinChance: 0
    bigWinChance: 0
    jackPotWinChance: .10
    godPotWinChance: .001

- type: entity
  id: CoinFlipper
  parent: BaseMachinePowered
  name: coin flipper
  description: Coinflipping for the antisocial.
  components:
  - type: Sprite
    sprite: _Goobstation/Structures/Machines/slotmachines/coinflipper.rsi
    layers:
    - state: Coinflipper
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: WiresPanel
  - type: WiresVisuals
  - type: Wires
    layoutId: SlotMachine
    boardName: wires-board-name-slot-machine
  - type: Appearance
  - type: UserInterface
    interfaces:
      enum.WiresUiKey.Key:
        type: WiresBoundUserInterface
  - type: StationAiWhitelist
  - type: AmbientOnPowered
  - type: AmbientSound
    volume: -9
    range: 3
    enabled: false
    sound:
      path: /Audio/Ambience/Objects/vending_machine_hum.ogg
  - type: Destructible
    thresholds:
    - trigger:
        !type:DamageTrigger
        damage: 200
      behaviors:
      - !type:PlaySoundBehavior
        sound:
          collection: MetalGlassBreak
      - !type:DoActsBehavior
        acts: [ "Destruction" ]
  - type: Electrified
    enabled: false
    usesApcPower: true
  - type: PointLight
    enabled: false
    castShadows: false
    radius: 2
    energy: 1.5
    mask: /Textures/Effects/LightMasks/cone.png
    autoRot: true
  - type: LitOnPowered
  - type: ApcPowerReceiver
    powerLoad: 200
  - type: Repairable
    doAfterDelay: 8
  - type: Anchorable
  - type: TypingIndicator
    proto: robot
  - type: Speech
    speechVerb: Robotic
    speechSounds: Vending
  - type: SentienceTarget
    flavorKind: station-event-random-sentience-flavor-mechanical
    weight: 0.125
  - type: StaticPrice
    price: 100
  - type: CollectiveMind
    defaultChannel: Binary
    channels:
    - Binary
  - type: Vocalizer
    minVocalizeInterval: 8m
    maxVocalizeInterval: 10m
    hideChat: true
  - type: VocalizerRequiresPower
  - type: DatasetVocalizer
    dataset: SlotMachineAds
  - type: ContainerContainer
    containers:
      money: !type:ContainerSlot
        showEnts: false
        occludes: true
        ent: null
  - type: ItemSlots
    slots:
      money:
        name: spesos
        whitelist:
          components:
          - Cash
  - type: LanguageSpeaker # Einstein Engines - Languages
  - type: LanguageKnowledge # Einstein Engines - Languages
    speaks:
    - TauCetiBasic
    - RobotTalk
    understands:
    - TauCetiBasic
    - RobotTalk
  - type: CoinFliper
  - type: DoAfter
  - type: Transform
    noRot: false
  - type: Rotatable
    rotateWhileAnchored: false
    rotateWhilePulling: true

- type: entity
  id: ClawMachine
  parent: BaseMachinePowered
  name: claw machine
  description: Sure we got our health insurance benefits cut, and yeah we don't get any overtime on holidays, but hey - free to play claw machines!
  components:
  - type: Sprite
    sprite: _Goobstation/Structures/Machines/slotmachines/claw_machine.rsi
    layers:
    - state: clawmachine
      map: [ "clawmachine" ]
    - state: clawmachine_playing
      visible: false
      map: [ "clawmachine_playing" ]
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: GenericVisualizer # I have NO idea how this works
    visuals:
      enum.ClawMachineVisuals.Spinning:
        clawmachine_playing:
          True: { visible: true }
          False: { visible: false }
      enum.ClawMachineVisuals.NormalSprite:
        clawmachine:
          True: { visible: true }
          False: { visible: false }
  - type: WiresPanel
  - type: WiresVisuals
  - type: Wires
    layoutId: SlotMachine
    boardName: wires-board-name-slot-machine
  - type: Appearance
  - type: UserInterface
    interfaces:
      enum.WiresUiKey.Key:
        type: WiresBoundUserInterface
  - type: StationAiWhitelist
  - type: AmbientOnPowered
  - type: AmbientSound
    volume: -9
    range: 3
    enabled: false
    sound:
      path: /Audio/Ambience/Objects/vending_machine_hum.ogg
  - type: Destructible
    thresholds:
    - trigger:
        !type:DamageTrigger
        damage: 200
      behaviors:
      - !type:PlaySoundBehavior
        sound:
          collection: MetalGlassBreak
      - !type:DoActsBehavior
        acts: [ "Destruction" ]
  - type: Electrified
    enabled: false
    usesApcPower: true
  - type: PointLight
    enabled: false
    castShadows: false
    radius: 2
    energy: 1.5
    mask: /Textures/Effects/LightMasks/cone.png
    autoRot: true
  - type: LitOnPowered
  - type: ApcPowerReceiver
    powerLoad: 200
  - type: Repairable
    doAfterDelay: 8
  - type: Anchorable
  - type: TypingIndicator
    proto: robot
  - type: Speech
    speechVerb: Robotic
    speechSounds: Vending
  - type: SentienceTarget
    flavorKind: station-event-random-sentience-flavor-mechanical
    weight: 0.125
  - type: StaticPrice
    price: 100
  - type: CollectiveMind
    defaultChannel: Binary
    channels:
    - Binary
  - type: Vocalizer
    minVocalizeInterval: 8m
    maxVocalizeInterval: 10m
    hideChat: true
  - type: VocalizerRequiresPower
  - type: DatasetVocalizer
    dataset: SlotMachineAds
  - type: LanguageSpeaker # Einstein Engines - Languages
  - type: LanguageKnowledge # Einstein Engines - Languages
    speaks:
    - TauCetiBasic
    - RobotTalk
    understands:
    - TauCetiBasic
    - RobotTalk
  - type: ClawMachine # EVIL LOOT!!!
    rewards:
    - PlushieMoth
    - PlushieHuman
    - PlushiePenguin
    - PlushieXeve
    - PlushieDurk
    - PlushieMnwaar
    - PlushieLouie
    - FoamWonderprod
    - PlushieBingle
    - PlushieBongle
    - PlushieBinglePony
    - PlushieAbductor
    - PlushieJvne
    - PlushieFern
    - PlushieNigel
    - PlushieBrizby
    - PlushieBoggle
    - PlushieLehmin
    - PlushieWachtel
    - PlushieLeguia
    - PlushiePasha
    evilRewards:
    - EvilPlushieXeve
    - EvilPlushieBoggle
    - EvilPlushieBrizby
    - EvilPlushieNigel
    - EvilPlushieFern
    - EvilPlushieJvne
    - EvilPlushieMnwaar
    - EvilPlushieDurk
    - EvilPlushieLouie
    - EvilPlushieWachtel
    - EvilPlushieLeguia
    - EvilPlushiePasha
  - type: DoAfter
