- type: dataset
  id: MonoPDVBorgNameset
  values:
  - Vanguard Unit
  - PDV Enforcer Module
  - PDV Sentinel
  - Dynast Defense Unit

- type: dataset
  id: MonoTSFBorgNameset
  values:
  - Federation Silicon
  - TSFMC Compliance Unit
  - TSFMC Sgt. Reckless
  - TSFMC Judge & Jury

- type: dataset
  id: VesselCoreNameset
  values:
  - Steven
  - Robyn
  - Alex
  - Bob
  - Alexander
  - Steve
  - Kira
  - Var:Tim

- type: dataset
  id: TSFMCCoreNameset
  values:
  - TSFMC Watcher
  - TSFMC Upholder
  - TSFMC Robocop
  - TSFMC Silicon
  - TSFMCAI.exe
  - TSFMC Dog
  - TSFMC Unit

- type: dataset
  id: PDVCoreNameset
  values:
  - Imperial Overseer
  - Imperial Positronic
  - Imperial Grid
  - Imperial Hivemind
  - PDVAI.sh
  - Imperial Cat
  - Imperial Instance

- type: dataset
  id: MonoRemnantShipNameset # eventually this will have a use... randommetadata component dont work with grids though...
  values:
  - ADS-Glimmer
  - ADS-Orion
  - ADS-Expanse
  - ADS-Symphony
  - ADS-Chorus
  - ADS-Flashpoint
  - ADS-Phoron
  - ADS-Conquest
  - ADS-Prime
  - ADS-Firestorm
  - ADS-Retaliation
  - ADS-Horizon
  - ADS-Marksman
  - ADS-Barricade
  - ADS-Vein
  - ADS-Zero
  - ADS-Midnight
  - ADS-Interdiction
  - ADS-Mist
  - ADS-Granite
  - ADS-Typhoon
  - ADS-Storm
  - ADS-Rubicon
  - ADS-Cauterizer
  - ADS-Evasion
  - ADS-Apprehension

# base stats for faction borgs

- type: entity
  parent: BaseBorgChassis
  id: BaseFactionBorgChassis
  abstract: true
  components:
  - type: MobThresholds
    thresholds:
      0: Alive
      250: Critical
      350: Dead
  - type: MovementSpeedModifier
    baseWalkSpeed : 2.5
    baseSprintSpeed : 4.5
  - type: SlowOnDamage
    speedModifierThresholds:
      125: 0.7
      200: 0.5
  - type: Damageable
    damageModifierSet: FactionBorgChassis
  - type: Destructible
    thresholds:
    - trigger:
        !type:DamageTrigger
        damage: 125
      behaviors:
      - !type:PlaySoundBehavior
        sound:
          path: /Audio/Machines/warning_buzzer.ogg
          params:
            volume: 5
    - trigger:
        !type:DamageTrigger
         damage: 450
      behaviors:
      - !type:PlaySoundBehavior
        sound:
          collection: MetalBreak
      - !type:EmptyContainersBehaviour
        containers:
        - borg_brain
        - borg_module
        - cell_slot
      - !type:DoActsBehavior
        acts: [ "Destruction" ]

- type: entity
  id: AiHeldMono
  description: Components added / removed from an entity that gets inserted into an AI core.
  categories: [ HideSpawnMenu ]
  abstract: true
  components:
  - type: IntrinsicRadioReceiver
  - type: IgnoreUIRange
  - type: StationAiHeld
  - type: StationAiOverlay
  - type: ShowElectrocutionHUD
  - type: ActionGrant
    actions:
    - ActionJumpToCore
    - ActionSurvCameraLights
    - ActionAIViewLaws
  - type: UserInterface
    interfaces:
      enum.RadarConsoleUiKey.Key:
        type: RadarConsoleBoundUserInterface
      enum.SiliconLawsUiKey.Key:
        type: SiliconLawBoundUserInterface
  - type: IntrinsicUI
    uis:
      enum.RadarConsoleUiKey.Key:
        toggleAction: ActionAGhostShowRadar
  - type: RadarConsole
    followEntity: false
  - type: DeviceNetwork
    deviceNetId: Wireless
    receiveFrequencyId: CrewMonitor
    transmitFrequencyId: ShuttleTimer
  - type: HolographicAvatar
    layerData:
    - sprite: Mobs/Silicon/station_ai.rsi
      state: default
  - type: ShowJobIcons
  - type: Tag
    tags:
    - CanPilot
  - type: AdvancedPilot # can use both gunnery and shuttle console even on capitals

- type: entity
  id: BaseBorgChassisRedacted
  parent: BaseFactionBorgChassis
  abstract: true
  components:
  - type: NpcFactionMember
    factions:
    - Syndicate
    - SiliconsExpeditionNF
  - type: Access
    tags:
    - NuclearOperative
    - SyndicateAgent
  - type: AccessReader
    access: [["SyndicateAgent"], ["NuclearOperative"]]
  - type: IntrinsicRadioTransmitter
    channels:
    - Common
    - Remnants
    - Traffic
  - type: ActiveRadio
    channels:
    - Common
    - Remnants
    - Traffic
  - type: CollectiveMind
    channels:
    - Binary
    defaultChannel: Binary
  - type: ShowSyndicateIcons
  - type: MovementAlwaysTouching
  - type: Speech
    speechSounds: SyndieBorg
    allowedEmotes:
    - Laugh
  - type: Vocal
    sounds:
      Unsexed: UnisexSiliconSyndicate
  - type: IonStormTarget
    chance: 0.2
  - type: ShowJobIcons
  - type: SiliconLawProvider
    laws: RedactedBorg


- type: entity
  id: BorgChassisRedacted
  parent: BaseBorgChassisRedacted
  name: remnant automated defense system tender
  description: A tender to a automated drone ship, to keep internal mechanisms intact.
  components:
  - type: Sprite
    layers:
    - state: synd_engi
    - state: synd_engi_e
      map: ["enum.BorgVisualLayers.Light"]
      shader: unshaded
      visible: false
    - state: synd_engi_l
      shader: unshaded
      map: ["light"]
      visible: false
  - type: LanguageKnowledge
    speaks:
    - TauCetiBasic
    - RobotTalk
    - Azaziba
    understands:
    - TauCetiBasic
    - RobotTalk
    - Azaziba
  - type: BorgChassis
    maxModules: 8
    moduleWhitelist:
      tags:
      - BorgModuleGeneric
      - BorgModuleEngineering
      - BorgModuleSyndicate
      - BorgModuleSyndicateAssault
    hasMindState: derelict_e
    noMindState: derelict_e_r
  - type: Construction
    node: derelictcyborg
  - type: InteractionPopup
    interactSuccessString: petting-success-derelict-cyborg
    interactFailureString: petting-failure-derelict-cyborg
    interactSuccessSound:
      path: /Audio/Ambience/Objects/periodic_beep.ogg

- type: entity
  id: PlayerBorgRedacted
  parent: BorgChassisRedacted
  suffix: Battery, Module
  components:
  - type: ContainerFill
    containers:
      borg_brain:
      - PositronicBrain
      borg_module:
      - BorgModuleOperative
      - BorgModuleAdvancedWeapon
      - BorgModuleJetpack
      - BorgModuleAdvancedTool
      - BorgModuleConstruction
      - BorgModuleCable
      - BorgModuleRedactedRCD
      - BorgModuleGPS
  - type: ItemSlots
    slots:
      cell_slot:
        name: power-cell-slot-component-slot-name-default
        startingItem: PowerCellAntiqueProto
  - type: RandomMetadata
    nameSegments:
    - MonoRemnantBorgTitle
    - MonoRemnantAdjective
    - MonoRemnantNoun
    - MonoRemnantModifier

- type: entity
  id: PlayerBorgRedactedGhostRole
  parent: PlayerBorgRedacted
  suffix: Ghost
  components:
  - type: GhostRole
    name: ghost-role-information-redacted-borg
    description: ghost-role-information-redacted-borg-description
    rules: ghost-role-information-silicon-rules
    raffle:
      settings: default
    prototype: RedactedBorg
  - type: GhostTakeoverAvailable

- type: entity
  id: PlayerBorgRedactedGhostRolePlaytime
  parent: PlayerBorgRedacted
  suffix: Ghost, Playtime
  components:
  - type: GhostRole
    name: ghost-role-information-redacted-borg
    description: ghost-role-information-redacted-borg-description
    rules: ghost-role-information-silicon-rules
    raffle:
      settings: default
    requirements:
    - !type:OverallPlaytimeRequirement
      time: 180000 # 50 hrs
  - type: GhostTakeoverAvailable

# Remnant AI core

- type: entity
  id: PlayerStationAiRedacted
  parent: PlayerStationAiEmpty
  suffix: Ghost Role, Remnant
  components:
  - type: ContainerComp
    proto: AiHeldRedacted
    container: station_ai_mind_slot
  - type: ContainerFill
    containers:
      station_ai_mind_slot:
      - StationAiBrainRedacted
  - type: Sprite
    sprite: Mobs/Silicon/station_ai.rsi
    layers:
    - state: base
    - state: ai
      shader: unshaded
  - type: Anchorable

- type: entity
  id: StationAiBrainRedacted
  parent: StationAiBrain
  categories: [ HideSpawnMenu, DoNotMap ]
  components:
  - type: Sprite
  - type: SiliconLawProvider
    laws: Redacted
  - type: GhostRole
    name: ghost-role-information-redacted-core
    description: ghost-role-information-redacted-core-description
    rules: ghost-role-information-silicon-rules
    raffle:
      settings: default
    prototype: RemnantAICore
  - type: LanguageKnowledge
    speaks:
    - TauCetiBasic
    - RobotTalk
    - Draconic
    - Azaziba
    understands:
    - TauCetiBasic
    - RobotTalk
    - Draconic
    - Azaziba
  - type: Access
    groups:
    - AllAccess
    tags:
    - NuclearOperative
    - SyndicateAgent
  - type: GhostTakeoverAvailable
  - type: RandomMetadata
    nameSegments:
    - MonoRemnantCoreTitle
    - MonoRemnantAdjective
    - MonoRemnantNoun

- type: entity
  id: AiHeldRedacted
  parent: AiHeldMono
  categories: [ HideSpawnMenu ]
  components:
  - type: IntrinsicRadioTransmitter
    channels:
    - Common
    - Remnants
    - Traffic
  - type: ActiveRadio
    channels:
    - Common
    - Remnants
    - Traffic
  - type: CollectiveMind
    channels:
    - Binary
    defaultChannel: Binary
  - type: LanguageKnowledge
    speaks:
    - TauCetiBasic
    - RobotTalk
    - Draconic
    - Azaziba
    understands:
    - TauCetiBasic
    - RobotTalk
    - Draconic
    - Azaziba

# Vessel (Default) AI core

- type: entity
  id: PlayerStationAiVessel
  parent: PlayerStationAiEmpty
  suffix: Ghost Role, Vessel
  components:
  - type: ContainerComp
    proto: AiHeldVessel
    container: station_ai_mind_slot
  - type: ContainerFill
    containers:
      station_ai_mind_slot:
      - StationAiBrainVessel
  - type: Sprite
    sprite: Mobs/Silicon/station_ai.rsi
    layers:
    - state: base
    - state: ai
      shader: unshaded
  - type: Anchorable
  - type: Construction
    graph: AiVessel
    node: end

- type: entity
  id: StationAiBrainVessel
  parent: StationAiBrain
  categories: [ HideSpawnMenu, DoNotMap ]
  components:
  - type: Sprite
  - type: SiliconLawProvider
    laws: VesselLawset
  - type: GhostRole
    name: ghost-role-information-vessel-core
    description: ghost-role-information-vessel-core-description
    rules: ghost-role-information-silicon-rules
    raffle:
      settings: default
    prototype: VesselAICore
    requirements:
    - !type:OverallPlaytimeRequirement
      time: 180000 # 50 hrs
  - type: GhostTakeoverAvailable
  - type: RandomMetadata
    nameSegments: [ VesselCoreNameset ]

- type: entity
  id: AiHeldVessel
  parent: AiHeldMono
  categories: [ HideSpawnMenu ]
  components:
  - type: IntrinsicRadioTransmitter
    channels:
    - Common
    - Traffic
    - Science
    - Supply
    - Engineering
    - Medical
  - type: ActiveRadio
    channels:
    - Common
    - Traffic
    - Science
    - Supply
    - Engineering
    - Medical
  - type: CollectiveMind
    channels:
    - Binary
    defaultChannel: Binary

# TSFMC AI core

- type: entity
  id: PlayerStationAiTSFMC
  parent: PlayerStationAiEmpty
  suffix: Ghost Role, TSFMC
  components:
  - type: ContainerComp
    proto: AiHeldTSFMC
    container: station_ai_mind_slot
  - type: ContainerFill
    containers:
      station_ai_mind_slot:
      - StationAiBrainTSFMC
  - type: Sprite
    sprite: Mobs/Silicon/station_ai.rsi
    layers:
    - state: base
    - state: ai
      shader: unshaded
  - type: Anchorable

- type: entity
  id: StationAiBrainTSFMC
  parent: StationAiBrain
  categories: [ HideSpawnMenu, DoNotMap ]
  components:
  - type: Sprite
  - type: SiliconLawProvider
    laws: TSFMCLawset
  - type: GhostRole
    name: ghost-role-information-tsfmc-core
    description: ghost-role-information-tsfmc-core-description
    rules: ghost-role-information-silicon-rules
    raffle:
      settings: default
    prototype: TSFMCAICore
  - type: GhostTakeoverAvailable
  - type: RandomMetadata
    nameSegments: [ TSFMCCoreNameset ]
  - type: LanguageKnowledge
    speaks:
    - TauCetiBasic
    - RobotTalk
    - SolCommon
    understands:
    - TauCetiBasic
    - RobotTalk
    - SolCommon

- type: entity
  id: AiHeldTSFMC
  parent: AiHeldMono
  categories: [ HideSpawnMenu ]
  components:
  - type: IntrinsicRadioTransmitter
    channels:
    - Common
    - Traffic
    - Science
    - Supply
    - Engineering
    - Medical
    - Nfsd
    - Command
  - type: ActiveRadio
    channels:
    - Common
    - Traffic
    - Science
    - Supply
    - Engineering
    - Medical
    - Nfsd
    - Command
  - type: CollectiveMind
    channels:
    - Binary
    defaultChannel: Binary

# PDV AI Core

- type: entity
  id: PlayerStationAiPDV
  parent: PlayerStationAiEmpty
  suffix: Ghost Role, PDV
  components:
  - type: ContainerComp
    proto: AiHeldPDV
    container: station_ai_mind_slot
  - type: ContainerFill
    containers:
      station_ai_mind_slot:
      - StationAiBrainPDV
  - type: Sprite
    sprite: Mobs/Silicon/station_ai.rsi
    layers:
    - state: base
    - state: ai
      shader: unshaded
  - type: Anchorable

- type: entity
  id: StationAiBrainPDV
  parent: StationAiBrain
  categories: [ HideSpawnMenu, DoNotMap ]
  components:
  - type: Sprite
  - type: SiliconLawProvider
    laws: PDVLawset
  - type: GhostRole
    name: ghost-role-information-pdv-core
    description: ghost-role-information-pdv-core-description
    rules: ghost-role-information-silicon-rules
    raffle:
      settings: default
    prototype: PDVAICore
  - type: GhostTakeoverAvailable
  - type: RandomMetadata
    nameSegments: [ PDVCoreNameset ]
  - type: LanguageKnowledge
    speaks:
    - TauCetiBasic
    - RobotTalk
    - Freespeak
    understands:
    - TauCetiBasic
    - RobotTalk
    - Freespeak
  - type: Access
    tags:
    - Pirate
    - GrandVizier
    - PDVCommand

- type: entity
  id: AiHeldPDV
  parent: AiHeldMono
  categories: [ HideSpawnMenu ]
  components:
  - type: IntrinsicRadioTransmitter
    channels:
    - Common
    - Traffic
    - Science
    - Supply
    - Engineering
    - Medical
    - Freelance
  - type: ActiveRadio
    channels:
    - Common
    - Traffic
    - Science
    - Supply
    - Engineering
    - Medical
    - Freelance
  - type: CollectiveMind
    channels:
    - Binary
    defaultChannel: Binary

# PDV Cyborgs

- type: entity
  id: BaseBorgChassisPDV
  parent: BaseFactionBorgChassis
  abstract: true
  components:
  - type: NpcFactionMember
    factions:
    - PirateNF
  - type: Access
    tags:
    - Pirate
    - PDVCommand
    - GrandVizier
    - Mercenary
  - type: AccessReader
    access: [["GrandVizier"]]
  - type: IntrinsicRadioTransmitter
    channels:
    - Common
    - Freelance
    - Traffic
  - type: ActiveRadio
    channels:
    - Common
    - Freelance
    - Traffic
  - type: CollectiveMind
    channels:
    - Binary
    defaultChannel: Binary
  - type: ShowSyndicateIcons
  - type: MovementAlwaysTouching
  - type: Speech
    speechSounds: SyndieBorg
    allowedEmotes:
    - Laugh
  - type: Vocal
    sounds:
      Unsexed: UnisexSiliconSyndicate
  - type: IonStormTarget
    chance: 0.2
  - type: ShowJobIcons
  - type: SiliconLawProvider
    laws: PDVLawset


- type: entity
  id: BorgChassisPDV
  parent: BaseBorgChassisPDV
  name: PDV assault cyborg
  description: A purpose built assault cyborg used by the PDV.
  components:
  - type: Sprite
    sprite: _Mono/Mobs/Silicon/PDV/assault.rsi
    layers:
    - state: assault
      map: ["enum.BorgVisualLayers.Body", "movement"]
    - state: assault_l
      map: ["enum.BorgVisualLayers.Light"]
      shader: unshaded
      visible: false
    - state: assault_l
      shader: unshaded
      map: ["light","enum.BorgVisualLayers.LightStatus"]
      visible: false
  - type: LanguageKnowledge
    speaks:
    - TauCetiBasic
    - RobotTalk
    - Freespeak
    understands:
    - TauCetiBasic
    - RobotTalk
    - Freespeak
  - type: BorgChassis
    maxModules: 8
    moduleWhitelist:
      tags:
      - BorgModuleGeneric
      - BorgModuleSyndicate
      - BorgModuleSyndicateAssault
    hasMindState: assault_l
    noMindState: assault_l
  - type: Construction
    node: derelictcyborg
  - type: InteractionPopup
    interactSuccessString: petting-success-derelict-cyborg
    interactFailureString: petting-failure-derelict-cyborg
    interactSuccessSound:
      path: /Audio/Ambience/Objects/periodic_beep.ogg

- type: entity
  id: PlayerBorgPDV
  parent: BorgChassisPDV
  suffix: Battery, Module
  components:
  - type: ContainerFill
    containers:
      borg_brain:
      - PositronicBrain
      borg_module:
      - BorgModulePDVStandardWeapon
      - BorgModuleJetpack
      - BorgModuleTool
      - BorgModuleGPS
  - type: ItemSlots
    slots:
      cell_slot:
        name: power-cell-slot-component-slot-name-default
        startingItem: PowerCellCombat
  - type: RandomMetadata
    nameSegments: [MonoPDVBorgNameset]

# TSF Cyborgs

- type: entity
  id: BaseBorgChassisTSF
  parent: BaseFactionBorgChassis
  abstract: true
  components:
  - type: NpcFactionMember
    factions:
    - TSFMC
  - type: Access
    tags:
    - Security
    - Armory
    - Sergeant
    - Bailiff
    - Medical
    - Chemistry
    - TsfmcEngineering
    - Maintenance
    - External
    - Command
    - Brig
    - Mercenary
    - Captain
  - type: AccessReader
    access: [["Security"], ["Armory"], ["Sergeant"], ["Bailiff"], ["TsfmcEngineering"], ["Brig"]]
  - type: IntrinsicRadioTransmitter
    channels:
    - Common
    - Nfsd
    - Traffic
  - type: ActiveRadio
    channels:
    - Common
    - Nfsd
    - Traffic
  - type: CollectiveMind
    channels:
    - Binary
    defaultChannel: Binary
  - type: ShowSyndicateIcons
  - type: MovementAlwaysTouching
  - type: Speech
    speechSounds: SyndieBorg
    allowedEmotes:
    - Laugh
  - type: Vocal
    sounds:
      Unsexed: UnisexSiliconSyndicate
  - type: IonStormTarget
    chance: 0.2
  - type: ShowJobIcons
  - type: SiliconLawProvider
    laws: TSFMCBorgLawset
  - type: FootstepModifier
    footstepSoundCollection:
      path: /Audio/Mecha/sound_mecha_powerloader_step.ogg

- type: entity
  id: BorgChassisTSF
  parent: BaseBorgChassisTSF
  name: TSFMC assault cyborg
  description: A purpose built assault silicon used by the TSFMC.
  components:
  - type: Sprite
    sprite: _Mono/Mobs/Silicon/TSFMC/assault.rsi
    layers:
    - state: assault
      map: ["enum.BorgVisualLayers.Body", "movement"]
    - state: assault_l
      map: ["enum.BorgVisualLayers.Light"]
      shader: unshaded
      visible: false
    - state: assault_l
      shader: unshaded
      map: ["light","enum.BorgVisualLayers.LightStatus"]
  - type: LanguageKnowledge
    speaks:
    - TauCetiBasic
    - RobotTalk
    - SolCommon
    understands:
    - TauCetiBasic
    - RobotTalk
    - SolCommon
  - type: BorgChassis
    maxModules: 8
    moduleWhitelist:
      tags:
      - BorgModuleGeneric
      - BorgModuleSyndicate
      - BorgModuleSyndicateAssault
    hasMindState: assault_l
    noMindState: assault_l
  - type: Construction
    node: derelictcyborg
  - type: InteractionPopup
    interactSuccessString: petting-success-derelict-cyborg
    interactFailureString: petting-failure-derelict-cyborg
    interactSuccessSound:
      path: /Audio/Ambience/Objects/periodic_beep.ogg

- type: entity
  id: PlayerBorgTSF
  parent: BorgChassisTSF
  suffix: Battery, Module
  components:
  - type: ContainerFill
    containers:
      borg_brain:
      - PositronicBrain
      borg_module:
      - BorgModuleTSFStandardWeapon
      - BorgModuleJetpack
      - BorgModuleTool
      - BorgModuleGPS
  - type: ItemSlots
    slots:
      cell_slot:
        name: power-cell-slot-component-slot-name-default
        startingItem: PowerCellCombat
  - type: RandomMetadata
    nameSegments: [MonoTSFBorgNameset]

# Cent-Sec AI Core

- type: entity
  id: PlayerStationAiSecurity
  parent: PlayerStationAiVessel
  suffix: Ghost Role, Security
  components:
  - type: ContainerComp
    proto: AiHeldSec

- type: entity
  id: AiHeldSec
  parent: AiHeldMono
  categories: [ HideSpawnMenu ]
  components:
  - type: IntrinsicRadioTransmitter
    channels:
    - Common
    - Traffic
    - Science
    - Supply
    - Engineering
    - Medical
    - Security
    - Service
  - type: ActiveRadio
    channels:
    - Common
    - Traffic
    - Science
    - Supply
    - Engineering
    - Medical
    - Security
    - Service
  - type: CollectiveMind
    channels:
    - Binary
    defaultChannel: Binary
