# 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:
        - Body # 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
      - RadioImplantFreelance # Frontier
      - ChameleonControllerImplant
      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: StaticPrice # Frontier
      price: 35 # Frontier
    - type: GoblinPreciousTrash # Frontier

- type: entity
  id: Implanter
  parent: BaseImplanter
  description: A disposable syringe exclusively designed for the injection and extraction of subdermal implants.
  components:
    - type: Tag
      tags:
        - Trash

- type: entity
  parent: Implanter
  id: ImplanterAdmeme
  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: GoblinPreciousTrash # Frontier

- type: entity
  id: BaseImplantOnlyImplanterSyndi
  parent: [BaseImplantOnlyImplanter, BaseC3SyndicateContraband] # Frontier: BaseSyndicateContraband<BaseC3SyndicateContraband
  name: syndicate implanter
  description: A compact disposable syringe exclusively designed for the injection of subdermal implants. Make sure to scrub it with soap or a rag to remove residual DNA after use!
  abstract: true
  components:
    - type: GoblinPreciousTrash # Frontier
    - 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: [ BaseC2ContrabandUnredeemable, BaseImplantOnlyImplanter ] # Frontier: add BaseC2ContrabandUnredeemable
  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

#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: [ BaseC2ContrabandUnredeemable, BaseImplantOnlyImplanter ] # Frontier: add BaseC2ContrabandUnredeemable
  suffix: mindshield
  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
