# SPDX-FileCopyrightText: 2020 AlphaQwerty <65570280+AlphaQwerty@users.noreply.github.com>
# SPDX-FileCopyrightText: 2020 Paul Ritter <ritter.paul1@googlemail.com>
# SPDX-FileCopyrightText: 2020 Pieter-Jan Briers <pieterjan.briers@gmail.com>
# SPDX-FileCopyrightText: 2020 Vera Aguilera Puerto <zddm@outlook.es>
# SPDX-FileCopyrightText: 2020 Víctor Aguilera Puerto <6766154+Zumorica@users.noreply.github.com>
# SPDX-FileCopyrightText: 2020 Víctor Aguilera Puerto <zddm@outlook.es>
# SPDX-FileCopyrightText: 2020 py01 <60152240+collinlunn@users.noreply.github.com>
# SPDX-FileCopyrightText: 2020 py01 <pyronetics01@gmail.com>
# SPDX-FileCopyrightText: 2021 20kdc <asdd2808@gmail.com>
# SPDX-FileCopyrightText: 2021 Julian Giebel <j.giebel@netrocks.info>
# SPDX-FileCopyrightText: 2021 Julian Giebel <juliangiebel@live.de>
# SPDX-FileCopyrightText: 2021 Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
# SPDX-FileCopyrightText: 2021 Swept <sweptwastaken@protonmail.com>
# SPDX-FileCopyrightText: 2021 mirrorcult <lunarautomaton6@gmail.com>
# SPDX-FileCopyrightText: 2022 Flipp Syder <76629141+vulppine@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Jane Lewis <inquisitivepenguin@protonmail.com>
# SPDX-FileCopyrightText: 2022 Kara <lunarautomaton6@gmail.com>
# SPDX-FileCopyrightText: 2022 Mith-randalf <84274729+Mith-randalf@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Moony <moonheart08@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Peptide90 <78795277+Peptide90@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Rane <60792108+Elijahrane@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Visne <39844191+Visne@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 metalgearsloth <metalgearsloth@gmail.com>
# SPDX-FileCopyrightText: 2023 AJCM-git <60196617+AJCM-git@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 CMDR-Piboy314 <92357316+CMDR-Piboy314@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 DrSmugleaf <DrSmugleaf@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Jackrost <jackrost@mail.ru>
# SPDX-FileCopyrightText: 2023 Leon Friedrich <60421075+ElectroJr@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Morb <14136326+Morb0@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Ada <155147867+ada-please@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Aidenkrz <aiden@djkraz.com>
# SPDX-FileCopyrightText: 2024 BeeRobynn <robynthewarcrime@proton.me>
# SPDX-FileCopyrightText: 2024 Ed <96445749+TheShuEd@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 K-Dynamic <20566341+K-Dynamic@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Kira Bridgeton <161087999+Verbalase@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 MACMAN2003 <macman2003c@gmail.com>
# SPDX-FileCopyrightText: 2024 Mr. 27 <45323883+Dutch-VanDerLinde@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Piras314 <p1r4s@proton.me>
# SPDX-FileCopyrightText: 2024 ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 deltanedas <39013340+deltanedas@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 deltanedas <@deltanedas:kde.org>
# SPDX-FileCopyrightText: 2024 lzk <124214523+lzk228@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 themias <89101928+themias@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Aiden <aiden@djkraz.com>
# SPDX-FileCopyrightText: 2025 Armok <155400926+ARMOKS@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Tayrtahn <tayrtahn@gmail.com>
#
# SPDX-License-Identifier: AGPL-3.0-or-later

- type: entity
  abstract: true
  id: ArcadeBase
  description: An arcade cabinet.
  name: arcade
  parent: BaseComputer
  components:
  - type: ApcPowerReceiver
    powerLoad: 350
  - type: ExtensionCableReceiver
  - type: PointLight
    radius: 1.8
    energy: 1.6
    color: "#3db83b"
  - type: LitOnPowered
  - type: Sprite
    sprite: Structures/Machines/arcade.rsi
    layers:
    - map: ["computerLayerBody"]
      state: arcade
    - map: ["computerLayerScreen"]
      state: screen_invaders
    - map: ["enum.WiresVisualLayers.MaintenancePanel"]
      state: panel
      visible: false
  - type: Icon
    sprite: Structures/Machines/arcade.rsi
    state: arcade
  - type: WiresPanel
  - type: Wires
    layoutId: Arcade
    boardName: wires-board-name-arcade
  - type: WiresVisuals
  - type: TypingIndicator
    proto: robot
  - type: Speech
    speechVerb: Robotic
    speechSounds: Vending
  - type: SpookySpeaker
    messageSet: SpookySpeakerMessagesGeneric
    speakChance: 0.2
  - type: Anchorable
  - type: Pullable
  - type: StaticPrice
    price: 300
  - type: SpamEmitSoundRequirePower
  - type: SpamEmitSound
    minInterval: 30
    maxInterval: 90
    sound:
      collection: ArcadeNoise
      params:
        volume: -8
        maxDistance: 10
        variation: 0.05

- type: entity
  id: SpaceVillainArcade
  name: space villain arcade
  parent: ArcadeBase
  components:
  - type: Sprite
    sprite: Structures/Machines/arcade.rsi
    layers:
    - map: ["computerLayerBody"]
      state: arcade
    - map: ["computerLayerScreen"]
      state: screen_spacevillain
    - map: ["enum.WiresVisualLayers.MaintenancePanel"]
      state: panel
      visible: false
  - type: PointLight
    color: "#e3a136"
  - type: SpaceVillainArcade
    rewardMinAmount: 0
    rewardMaxAmount: 0
    possibleRewards:
    - Basketball
    - BalloonNT
    - BalloonCorgi
    - BoxDonkSoftBox
    - BoxCartridgeCap
    - BeachBall
    - CandyBucket
    - CrayonBox
    - ClothingHeadHatCowboyRed
    - FoamCrossbow
    - FoamBlade
    - FoamCutlass
    - Football
    - GlowstickBase #green
    - GlowstickBlue
    - GlowstickYellow
    - GlowstickPurple
    - GlowstickRed
    - HarmonicaInstrument
    - OcarinaInstrument
    - RecorderInstrument
    - GunpetInstrument
    - BirdToyInstrument
    - MysteryFigureBox
    - PlushieHampter
    - PlushieLizard
    - PlushieRainbowLizard
    - PlushieAtmosian
    - PlushieSpaceLizard
    - PlushieNuke
    - PlushieCarp
    - PlushieMagicarp
    - PlushieHolocarp
    - PlushieRainbowCarp
    - PlushieRatvar
    - PlushieNar
    - PlushieSnake
    - PlushieArachind
    - PlushieMoth
    - PlushieHampter
    - PlushiePenguin
    - PlushieHuman
    - PlushieRouny
    - PlushieBee
    - PlushieSlime
    - PlushieGhost
    - PlushieDiona
    - PlushieSharkBlue
    - PlushieVox
    - PlushieXeno
    - PlasticBanana
    - RevolverCapGun
    - SnapPopBox
    - ToyMouse
    - ToyAi
    - ToyNuke
    - ToyGriffin
    - ToyHonk
    - ToyIan
    - ToyMarauder
    - ToyMauler
    - ToyGygax
    - ToyOdysseus
    - ToyOwlman
    - ToyDeathRipley
    - ToyPhazon
    - ToyFireRipley
    - ToyReticence
    - ToyRipley
    - ToySeraph
    - ToyDurand
    - ToySkeleton
    - ToySword
    - FoamWonderprod # Goob content
    - ToyAmongPequeno
    - ToyRubberDuck
    - ToyHammer
    - WeaponWaterPistol
    - WhoopieCushion
    - Whistle
  - type: WiresPanel
  - type: Wires
    layoutId: Arcade
    boardName: wires-board-name-arcade
  - type: ActivatableUI
    key: enum.SpaceVillainArcadeUiKey.Key
  - type: ActivatableUIRequiresPower
  - type: StationAiWhitelist
  - type: UserInterface
    interfaces:
      enum.SpaceVillainArcadeUiKey.Key:
        type: SpaceVillainArcadeBoundUserInterface
      enum.WiresUiKey.Key:
        type: WiresBoundUserInterface
  - type: Computer
    board: SpaceVillainArcadeComputerCircuitboard
  - type: Vocalizer
    minVocalizeInterval: 1m # Arcades are noisy
    maxVocalizeInterval: 4m
    hideChat: true
  - type: DatasetVocalizer
    dataset: SpaceVillainAds
  - type: SpeakOnUIClosed
    pack: SpaceVillainGoodbyes

- type: entity
  id: SpaceVillainArcadeFilled
  parent: SpaceVillainArcade
  suffix: Filled
  components:
  - type: SpaceVillainArcade
    rewardMinAmount: 5
    rewardMaxAmount: 8

- type: entity
  id: BlockGameArcade
  description: An arcade cabinet with a strangely familiar game.
  name: NT block game
  parent: ArcadeBase
  components:
  - type: Sprite
    sprite: Structures/Machines/arcade.rsi
    layers:
    - map: ["computerLayerBody"]
      state: arcade
    - map: ["computerLayerScreen"]
      state: screen_blockgame
    - map: ["enum.WiresVisualLayers.MaintenancePanel"]
      state: panel
      visible: false
  - type: BlockGameArcade
  - type: ActivatableUI
    key: enum.BlockGameUiKey.Key
  - type: ActivatableUIRequiresPower
  - type: StationAiWhitelist
  - type: UserInterface
    interfaces:
      enum.BlockGameUiKey.Key:
        type: BlockGameBoundUserInterface
      enum.WiresUiKey.Key:
        type: WiresBoundUserInterface
  - type: Computer
    board: BlockGameArcadeComputerCircuitboard
  - type: Vocalizer
    minVocalizeInterval: 1m # Arcades are noisy
    maxVocalizeInterval: 4m
    hideChat: true
  - type: DatasetVocalizer
    dataset: BlockGameAds
  - type: SpeakOnUIClosed
    pack: BlockGameGoodbyes