# Implanters

- type: entity
  name: implanter
  id: BaseImplanter
  parent: BaseItem
  abstract: true
  components:
  - type: ItemSlots
  - type: ContainerContainer
    containers:
      implanter_slot: !type:ContainerSlot { }
  - type: Implanter
    whitelist:
      components:
      - MobState # no chair microbomb
    blacklist:
      components:
      - Guardian # no holoparasite macrobomb wombo combo
      tags:
      - Unimplantable
    currentMode: Draw
    implanterSlot:
      name: Implant
      locked: True
      priority: 0
      whitelist:
        tags:
        - SubdermalImplant
    allowDeimplantAll: false
    deimplantWhitelist:
    - SadTromboneImplant
    - LightImplant
    - BikeHornImplant
    - TrackingImplant
    - StorageImplant
    - FreedomImplant
    - UplinkImplant
    - EmpImplant
    - ScramImplant
    - DnaScramblerImplant
    - MicroBombImplant
    - MacroBombImplant
    - DeathAcidifierImplant
    - DeathRattleImplant
    - MindShieldImplant
    - FakeMindShieldImplant
    - RadioImplant
    - ChameleonControllerImplant
    - VoiceMaskImplant
    - SELFStorageImplant #Starlight
    - MindControlImplant #Starlight
    deimplantFailureDamage:
      types:
        Cellular: 50
        Heat: 10
  - type: Sprite
    sprite: Objects/Specific/Medical/implanter.rsi
    state: implanter0
    layers:
    - state: implanter0
      map: [ "implantOnly" ]
      visible: true
    - state: implanter1
      map: [ "implantFull" ]
      visible: false
  - type: Item
    sprite: Objects/Specific/Medical/implanter.rsi
    heldPrefix: implanter
    size: Small
  - type: Appearance
  - type: GenericVisualizer
    visuals:
      enum.ImplanterVisuals.Full:
        implantFull:
          True: {visible: true}
          False: {visible: false}
      enum.ImplanterImplantOnlyVisuals.ImplantOnly:
        implantOnly:
          True: {state: broken}
          False: {state: implanter0}
  - type: UserInterface
    interfaces:
      enum.DeimplantUiKey.Key:
        type: DeimplantBoundUserInterface

- type: entity
  id: Implanter
  parent: BaseImplanter
  name: implant extractor
  description: "A dual-purpose syringe designed for the removal of specific subdermal implants. Once an implant is extracted, it is stored within and can be re-administered.\nWARNING: Operator error, such as selecting a non-present implant type, causes severe genetic trauma to the operator."
  components:
  - type: Tag
    tags:
    - Trash

- type: entity
  id: ImplanterAdmeme
  parent: Implanter
  suffix: Admeme
  components:
  - type: Implanter
    # go wild with sentient chairs with macrobombs
    whitelist: null
    blacklist: null
    implantTime: 5
    drawTime: 5

- type: entity
  id: BaseImplantOnlyImplanter
  parent: Implanter
  description: A disposable syringe exclusively designed for the injection of subdermal implants.
  abstract: true
  components:
  - type: Sprite
    sprite: Objects/Specific/Medical/implanter.rsi
    state: implanter0
    layers:
    - state: implanter1
      map: [ "implantFull" ]
      visible: true
    - state: implanter0
      map: [ "implantOnly" ]
  - type: Implanter
    currentMode: Inject
    implantOnly: true

- type: entity
  id: BaseImplantOnlyImplanterSyndi
  parent: [BaseImplantOnlyImplanter, BaseSyndicateContraband]
  name: syndicate implanter
  description: A compact disposable syringe exclusively designed for the injection of subdermal implants. Make sure to scrub it with soap to remove residual DNA after use!
  abstract: true
  components:
  - type: Item
    sprite: Objects/Specific/Medical/syndi_implanter.rsi
    heldPrefix: implanter
  - type: Sprite
    sprite: Objects/Specific/Medical/syndi_implanter.rsi
    state: implanter1
    layers:
    - state: implanter0
      map: [ "implantFull" ]
      visible: true
    - state: implanter1
      map: [ "implantOnly" ]
  - type: GenericVisualizer
    visuals:
      enum.ImplanterVisuals.Full:
        implantFull:
          True: {visible: true}
          False: {visible: false}
      enum.ImplanterImplantOnlyVisuals.ImplantOnly:
        implantOnly:
          True: {state: broken}
          False: {state: implanter1}
  - type: Tag
    tags: []

#Fun implanters

- type: entity
  id: SadTromboneImplanter
  name: sad trombone implanter
  parent: BaseImplantOnlyImplanter
  components:
  - type: Implanter
    implant: SadTromboneImplant

- type: entity
  id: LightImplanter
  name: light implanter
  parent: BaseImplantOnlyImplanter
  components:
  - type: Implanter
    implant: LightImplant

- type: entity
  id: BikeHornImplanter
  name: bike horn implanter
  parent: BaseImplantOnlyImplanter
  components:
  - type: Implanter
    implant: BikeHornImplant

#Security implanters

- type: entity
  id: TrackingImplanter
  name: tracking implanter
  parent: BaseImplantOnlyImplanter
  components:
  - type: Implanter
    implant: TrackingImplant

#Traitor implanters

- type: entity
  id: StorageImplanter
  name: storage implanter
  parent: BaseImplantOnlyImplanterSyndi
  components:
  - type: Implanter
    implant: StorageImplant

- type: entity
  id: FreedomImplanter
  name: freedom implanter
  parent: BaseImplantOnlyImplanterSyndi
  components:
  - type: Implanter
    implant: FreedomImplant

- type: entity
  id: RadioImplanter
  name: syndicate radio implanter
  parent: BaseImplantOnlyImplanterSyndi
  components:
  - type: Implanter
    implant: RadioImplant

- type: entity
  id: UplinkImplanter
  name: uplink implanter
  parent: BaseImplantOnlyImplanterSyndi
  components:
  - type: Implanter
    implant: UplinkImplant

- type: entity
  id: EmpImplanter
  name: EMP implanter
  parent: BaseImplantOnlyImplanterSyndi
  components:
  - type: Implanter
    implant: EmpImplant

- type: entity
  id: ScramImplanter
  name: scram implanter
  parent: BaseImplantOnlyImplanterSyndi
  components:
  - type: Implanter
    implant: ScramImplant

- type: entity
  id: DnaScramblerImplanter
  name: DNA scrambler implanter
  parent: BaseImplantOnlyImplanterSyndi
  components:
  - type: Implanter
    implant: DnaScramblerImplant

- type: entity
  id: ChameleonControllerImplanter
  name: chameleon controller implanter
  parent: BaseImplantOnlyImplanterSyndi
  components:
  - type: Implanter
    implant: ChameleonControllerImplant

- type: entity
  id: VoiceMaskImplanter
  name: voice mask implanter
  parent: BaseImplantOnlyImplanterSyndi
  components:
  - type: Implanter
    implant: VoiceMaskImplant

#Nuclear Operative/Special implanters

- type: entity
  id: MicroBombImplanter
  name: micro-bomb implanter
  parent: BaseImplantOnlyImplanterSyndi
  components:
  - type: Implanter
    implant: MicroBombImplant

- type: entity
  id: MacroBombImplanter
  name: macro-bomb implanter
  parent: BaseImplantOnlyImplanterSyndi
  components:
  - type: Implanter
    implant: MacroBombImplant

- type: entity
  id: DeathRattleImplanter
  name: death rattle implanter
  parent: BaseImplantOnlyImplanterSyndi
  components:
  - type: Implanter
    implant: DeathRattleImplant

- type: entity
  id: DeathAcidifierImplanter
  name: death acidifier implanter
  parent: BaseImplantOnlyImplanterSyndi
  components:
  - type: Implanter
    implant: DeathAcidifierImplant

- type: entity
  id: FakeMindShieldImplanter
  name: fake mindshield implanter
  parent: BaseImplantOnlyImplanterSyndi
  components:
  - type: Implanter
    implant: FakeMindShieldImplant

# Security and Command implanters

- type: entity
  id: MindShieldImplanter
  name: mindshield implanter
  parent: BaseImplantOnlyImplanter
  components:
  - type: Implanter
    implant: MindShieldImplant

# Centcomm implanters

- type: entity
  id: RadioImplanterCentcomm
  name: centcomm radio implanter
  parent: BaseImplantOnlyImplanter
  components:
  - type: Implanter
    implant: RadioImplantCentcomm

- type: entity
  id: DeathRattleImplanterCentcomm
  name: centcomm death rattle implanter
  parent: BaseImplantOnlyImplanter
  components:
  - type: Implanter
    implant: DeathRattleImplantCentcomm
