# SPDX-FileCopyrightText: 2021 20kdc <asdd2808@gmail.com>
# SPDX-FileCopyrightText: 2022 Lamrr <96937466+Lamrr@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 hubismal <47284081+hubismal@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Doru991 <75124791+Doru991@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 DrSmugleaf <drsmugleaf@gmail.com>
# SPDX-FileCopyrightText: 2023 Jezithyr <jezithyr@gmail.com>
# SPDX-FileCopyrightText: 2023 Kara <lunarautomaton6@gmail.com>
# SPDX-FileCopyrightText: 2023 TemporalOroboros <TemporalOroboros@gmail.com>
# SPDX-FileCopyrightText: 2023 Vordenburg <114301317+Vordenburg@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 crazybrain23 <44417085+crazybrain23@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 fedKotikeD <123323327+fedKotikeD@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 AJCM <AJCM@tutanota.com>
# SPDX-FileCopyrightText: 2024 Aiden <aiden@djkraz.com>
# SPDX-FileCopyrightText: 2024 Alex Evgrashin <aevgrashin@yandex.ru>
# SPDX-FileCopyrightText: 2024 Alex Pavlenko <diraven@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Alice "Arimah" Heurlin <30327355+arimah@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Alzore <140123969+Blackern5000@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 ArkiveDev <95712736+ArkiveDev@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Boaz1111 <149967078+Boaz1111@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Brandon Hu <103440971+Brandon-Huu@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 CaasGit <87243814+CaasGit@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Chief-Engineer <119664036+Chief-Engineer@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Cojoke <83733158+Cojoke-dot@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Doomsdrayk <robotdoughnut@comcast.net>
# SPDX-FileCopyrightText: 2024 DrSmugleaf <10968691+DrSmugleaf@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 DrSmugleaf <DrSmugleaf@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Ed <96445749+TheShuEd@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Emisse <99158783+Emisse@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 EmoGarbage404 <retron404@gmail.com>
# SPDX-FileCopyrightText: 2024 Eoin Mcloughlin <helloworld@eoinrul.es>
# SPDX-FileCopyrightText: 2024 Flareguy <78941145+Flareguy@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Ghagliiarghii <68826635+Ghagliiarghii@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 HS <81934438+HolySSSS@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Hrosts <35345601+Hrosts@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Ian <ignaz.k@live.de>
# SPDX-FileCopyrightText: 2024 Joel Zimmerman <JoelZimmerman@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 JustCone <141039037+JustCone14@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Killerqu00 <47712032+Killerqu00@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Ko4ergaPunk <62609550+Ko4ergaPunk@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Kukutis96513 <146854220+Kukutis96513@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Leon Friedrich <60421075+ElectroJr@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 LordCarve <27449516+LordCarve@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Lye <128915833+Lyroth001@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 MerrytheManokit <167581110+MerrytheManokit@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Mervill <mervills.email@gmail.com>
# SPDX-FileCopyrightText: 2024 MilenVolf <63782763+MilenVolf@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Mr. 27 <45323883+Dutch-VanDerLinde@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 MureixloI <132683811+MureixloI@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 NakataRin <45946146+NakataRin@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 OrangeMoronage9622 <whyteterry0092@gmail.com>
# SPDX-FileCopyrightText: 2024 PJBot <pieterjan.briers+bot@gmail.com>
# SPDX-FileCopyrightText: 2024 Partmedia <kevinz5000@gmail.com>
# SPDX-FileCopyrightText: 2024 Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
# SPDX-FileCopyrightText: 2024 Plykiya <58439124+Plykiya@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Preston Smith <92108534+thetolbean@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Psychpsyo <60073468+Psychpsyo@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Redfire1331 <125223432+Redfire1331@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Repo <47093363+Titian3@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 RiceMar1244 <138547931+RiceMar1244@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Rouge2t7 <81053047+Sarahon@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 ShadowCommander <10494922+ShadowCommander@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Simon <63975668+Simyon264@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Stalen <33173619+stalengd@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 TakoDragon <69509841+BackeTako@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Tayrtahn <tayrtahn@gmail.com>
# SPDX-FileCopyrightText: 2024 Thomas <87614336+Aeshus@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Truoizys <153248924+Truoizys@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 TsjipTsjip <19798667+TsjipTsjip@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Ubaser <134914314+UbaserB@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Unkn0wn_Gh0st <shadowstalkermll@gmail.com>
# SPDX-FileCopyrightText: 2024 Vasilis <vasilis@pikachu.systems>
# SPDX-FileCopyrightText: 2024 Vigers Ray <60344369+VigersRay@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 beck-thompson <107373427+beck-thompson@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 deathride58 <deathride58@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 degradka <69397649+degradka@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 deltanedas <39013340+deltanedas@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 deltanedas <@deltanedas:kde.org>
# SPDX-FileCopyrightText: 2024 dffdff2423 <dffdff2423@gmail.com>
# SPDX-FileCopyrightText: 2024 eoineoineoin <github@eoinrul.es>
# SPDX-FileCopyrightText: 2024 foboscheshir <156405958+foboscheshir@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 lzk <124214523+lzk228@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 metalgearsloth <comedian_vs_clown@hotmail.com>
# SPDX-FileCopyrightText: 2024 mr-bo-jangles <mr-bo-jangles@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 neutrino <67447925+neutrino-laser@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 nikthechampiongr <32041239+nikthechampiongr@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 osjarw <62134478+osjarw@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 plykiya <plykiya@protonmail.com>
# SPDX-FileCopyrightText: 2024 redfire1331 <Redfire1331@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 saintmuntzer <47153094+saintmuntzer@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 shamp <140359015+shampunj@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 strO0pwafel <153459934+strO0pwafel@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 stroopwafel <j.o.luijkx@student.tudelft.nl>
# SPDX-FileCopyrightText: 2024 themias <89101928+themias@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 to4no_fix <156101927+chavonadelal@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 voidnull000 <18663194+voidnull000@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Арт <123451459+JustArt1m@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 ArchRBX <5040911+ArchRBX@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Centronias <me@centronias.com>
# SPDX-FileCopyrightText: 2025 Errant <35878406+Errant-4@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 GoobBot <uristmchands@proton.me>
# SPDX-FileCopyrightText: 2025 Ilya246 <57039557+Ilya246@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Ilya246 <ilyukarno@gmail.com>
# SPDX-FileCopyrightText: 2025 John Willis <143434770+CerberusWolfie@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Marty <martynashagriefer@gmail.com>
# SPDX-FileCopyrightText: 2025 slarticodefast <161409025+slarticodefast@users.noreply.github.com>
#
# SPDX-License-Identifier: AGPL-3.0-or-later
# Placeholder PAIs, aka semi-automatic ghost roles

- type: entity
  parent: BaseItem
  id: PersonalAI
  name: personal ai device
  description: Your electronic pal who's fun to be with!
  components:
  - type: Instrument
    allowPercussion: false
    handheld: false
    bank: 1
    program: 2
  - type: UserInterface
    interfaces:
      enum.StoreUiKey.Key:
        type: StoreBoundUserInterface
        requireInputValidation: false
      # available in pai shop
      enum.RadarConsoleUiKey.Key:
        type: RadarConsoleBoundUserInterface
        requireInputValidation: false
      enum.InstrumentUiKey.Key:
        type: InstrumentBoundUserInterface
        requireInputValidation: false
      enum.StationMapUiKey.Key:
        type: StationMapBoundUserInterface
        requireInputValidation: false
  - type: Sprite
    sprite: Objects/Fun/pai.rsi
    layers:
    - state: pai-base
    - state: pai-off-overlay
      shader: unshaded
      map: ["screen"]
  - type: Input
    context: "human"
  - type: PAI
  - type: BlockMovement
  - type: ToggleableGhostRole
    examineTextMindPresent: pai-system-pai-installed
    examineTextMindSearching: pai-system-still-searching
    examineTextNoMind: pai-system-off
    beginSearchingText: pai-system-searching
    roleName: pai-system-role-name
    roleDescription: pai-system-role-description
    roleRules: ghost-role-information-familiar-rules
    mindRoles:
    - MindRoleGhostRoleFamiliar
    wipeVerbText: pai-system-wipe-device-verb-text
    wipeVerbPopup: pai-system-wiped-device
    stopSearchVerbText: pai-system-stop-searching-verb-text
    stopSearchVerbPopup: pai-system-stopped-searching
  - type: Examiner
  - type: IntrinsicRadioReceiver
  #- type: IntrinsicRadioTransmitter
  #  channels:
  #  - Binary # Goobstation - replaced with collective mind
  - type: ActiveRadio
    channels:
    # - Binary # Goobstation - replaced with collective mind
    - Common
  # Goobstation
  - type: CollectiveMind
    defaultChannel: Binary
    channels:
    - Binary
  - type: DoAfter
  - type: Actions
  - type: Store
    categories:
    - PAIAbilities
    currencyWhitelist:
    - SiliconMemory
    balance:
      SiliconMemory: 30
  - type: RadarConsole
    maxRange: 256
    followEntity: true
  - type: TypingIndicator
    proto: robot
  - type: Speech
    speechVerb: Robotic
    speechSounds: Pai
    # This has to be installed because otherwise they're not "alive",
    #  so they can ghost and come back.
    # Note that the personal AI never "dies".
  - type: MobState
    allowedStates:
      - Alive
  - type: Appearance
  - type: GenericVisualizer
    visuals:
      enum.ToggleableGhostRoleVisuals.Status:
        screen:
          Off: { state: pai-off-overlay }
          Searching: { state: pai-searching-overlay }
          On: { state: pai-on-overlay }
  - type: StationMap
  - type: ChangeVoiceInContainer
    whitelist:
      components:
        - SecretStash
        - WrappedParcel
  # Einstein Engines - Language begin
  - type: LanguageKnowledge
    speaks:
    - TauCetiBasic # Add individual languages so they can speak in said language for privacy.
    - Canilunzt
    - Bubblish
    - Nekomimetic
    - Draconic
    - SolCommon
    - RootSpeak
    - Moffic
    - ValyrianStandard
    - Chittin
    - SiikMaas
    - RobotTalk
    - DroneTalk
    - Marish
    - Elyran
    - Freespeak
    - Tradeband
    - Schechi
    - NewKinPidgin
    understands:
    - TauCetiBasic # Add individual languages so they can understand without understanding animals.
    - Canilunzt
    - Bubblish
    - Nekomimetic
    - Draconic
    - SolCommon
    - RootSpeak
    - Moffic
    - ValyrianStandard
    - Chittin
    - SiikMaas
    - RobotTalk
    - DroneTalk
    - Marish
    - Elyran
    - Freespeak
    - Tradeband
    - Sign # Should know it but not speak it, for obvious reasons.
    - Schechi
    - NewKinPidgin
  # Einstein Engines - Language end
  - type: Vocal
    sounds:
      Unsexed: UnisexSilicon
  - type: Tag
    tags:
    - SiliconEmotes

- type: entity
  parent: [ PersonalAI, BaseSyndicateContraband]
  id: SyndicatePersonalAI
  name: syndicate personal ai device
  description: Your Syndicate pal who's fun to be with!
  components:
  - type: Sprite
    sprite: Objects/Fun/pai.rsi
    layers:
    - state: pai-base
    - state: syndicate-pai-off-overlay
      shader: unshaded
      map: ["screen"]
  - type: ToggleableGhostRole
    roleName: pai-system-role-name-syndicate
    roleDescription: pai-system-role-description-syndicate
    roleRules: ghost-role-information-familiar-rules
    mindRoles:
    - MindRoleGhostRoleFamiliar
  - type: IntrinsicRadioTransmitter
    channels:
    - Syndicate
  - type: ActiveRadio
    channels:
    - Syndicate
  - type: Appearance
  - type: GenericVisualizer
    visuals:
      enum.ToggleableGhostRoleVisuals.Status:
        screen:
          Off: { state: syndicate-pai-off-overlay }
          Searching: { state: syndicate-pai-searching-overlay }
          On: { state: syndicate-pai-on-overlay }
  - type: StaticPrice
    price: 500
  - type: Vocal
    sounds:
      Unsexed: UnisexSiliconSyndicate

- type: entity
  parent: PersonalAI
  id: GoldenPersonalAI
  name: golden personal ai device
  description: Your electronic pal who's fun to be with! Special golden edition!
  components:
  - type: Sprite
    sprite: Objects/Fun/pai.rsi
    layers:
    - state: golden-pai-base
    - state: pai-off-overlay
      shader: unshaded
      map: ["screen"]
  - type: Appearance
  - type: StaticPrice
    price: 5000

- type: entity
  parent: PersonalAI
  id: PotatoAI
  name: potato artificial intelligence
  description: It's a potato. You forced it to be sentient, you monster.
  components:
  - type: Sprite
    sprite: Objects/Fun/pai.rsi
    layers:
    - state: potato-base
    - state: potato-off-overlay
      shader: unshaded
      map: ["screen"]
  - type: ToggleableGhostRole
    roleName: pai-system-role-name-potato
    roleDescription: pai-system-role-description-potato
    roleRules: ghost-role-information-familiar-rules
    mindRoles:
    - MindRoleGhostRoleFamiliar
  - type: Appearance
  - type: GenericVisualizer
    visuals:
      enum.ToggleableGhostRoleVisuals.Status:
        screen:
          Off: { state: potato-off-overlay }
          Searching: { state: potato-searching-overlay }
          On: { state: potato-on-overlay }
  - type: Construction
    graph: PotatoAI
    node: potatoai

- type: entity
  parent: BaseMentalAction
  id: ActionPAIOpenShop
  name: Software Catalog
  description: Install new software to assist your owner.
  components:
  - type: Action
    icon: Interface/Actions/shop.png
  - type: InstantAction
    event: !type:PAIShopActionEvent

- type: entity
  parent: BaseMentalAction
  id: ActionPAIMassScanner
  name: Mass Scanner
  description: View a mass scanner interface.
  components:
  - type: Action
    icon: { sprite: Interface/Actions/actions_ai.rsi, state: mass_scanner }
    itemIconStyle: NoItem
  - type: InstantAction
    event: !type:OpenUiActionEvent
      key: enum.RadarConsoleUiKey.Key

- type: entity
  parent: BaseMentalAction
  id: ActionPAIPlayMidi
  name: Play MIDI
  description: Open your portable MIDI interface to soothe your owner.
  components:
  - type: Action
    icon: Interface/Actions/pai-midi.png
    itemIconStyle: NoItem
  - type: InstantAction
    event: !type:OpenUiActionEvent
      key: enum.InstrumentUiKey.Key

- type: entity
  parent: BaseMentalAction
  id: ActionPAIOpenMap
  name: Open Map
  description: Open your map interface and guide your owner.
  components:
  - type: Action
    icon: { sprite: Interface/Actions/pai-map.rsi, state: icon }
    itemIconStyle: NoItem
  - type: InstantAction
    event: !type:OpenUiActionEvent
      key: enum.StationMapUiKey.Key
