# SPDX-FileCopyrightText: 2023 Flareguy <78941145+Flareguy@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 OttoMaticode <124523848+OttoMaticode@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 brainfood1183 <113240905+brainfood1183@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 deltanedas <39013340+deltanedas@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 deltanedas <@deltanedas:kde.org>
# SPDX-FileCopyrightText: 2023 lzk <124214523+lzk228@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 metalgearsloth <comedian_vs_clown@hotmail.com>
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 GoobBot <uristmchands@proton.me>
# SPDX-FileCopyrightText: 2025 Ilya246 <ilyukarno@gmail.com>
#
# SPDX-License-Identifier: MIT

- type: entity
  id: BaseMechPart
  abstract: true
  components:
  - type: Clickable
  - type: InteractionOutline
  - type: CollisionWake
  - type: TileFrictionModifier
    modifier: 0.5
  - type: Physics
    bodyType: Dynamic
    fixedRotation: false
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeAabb
          bounds: "-0.25,-0.25,0.25,0.25"
        density: 100
        mask:
        - ItemMask
        restitution: 0.3  # fite me
        friction: 0.2
  - type: Pullable
  - type: GuideHelp
    guides:
    - Robotics
  - type: DragDropTargetable # Goobstation - so you can drag-drop onto harnesses

# Ripley APLU

- type: entity
  id: BaseRipleyPart
  parent: BaseMechPart
  abstract: true
  components:
  - type: Sprite
    drawdepth: Items
    noRot: false
    sprite: Objects/Specific/Mech/ripley_construction.rsi

- type: entity
  id: BaseRipleyPartItem
  parent: BaseRipleyPart
  abstract: true
  components:
  - type: Item
    size: Ginormous

- type: entity
  parent: BaseRipleyPart
  id: RipleyHarness
  name: ripley harness
  description: The core of the Ripley APLU.
  components:
  - type: Appearance
  - type: ItemMapper
    mapLayers:
      ripley_l_arm+o:
        whitelist:
          tags:
          - RipleyLArm
      ripley_r_arm+o:
        whitelist:
          tags:
          - RipleyRArm
      ripley_l_leg+o:
        whitelist:
          tags:
          - RipleyLLeg
      ripley_r_leg+o:
        whitelist:
          tags:
          - RipleyRLeg
    sprite: Objects/Specific/Mech/ripley_construction.rsi
  - type: ContainerContainer
    containers:
      mech-assembly-container: !type:Container
  - type: MechAssembly
    finishedPrototype: RipleyChassis
    requiredParts:
      RipleyLArm: false
      RipleyRArm: false
      RipleyLLeg: false
      RipleyRLeg: false
  - type: Sprite
    state: ripley_harness+o
    noRot: true

- type: entity
  parent: BaseRipleyPartItem
  id: RipleyLArm
  name: ripley left arm
  description: The left arm of the Ripley APLU. It belongs on the chassis of the mech.
  components:
  - type: Sprite
    state: ripley_l_arm
  - type: Tag
    tags:
    - RipleyLArm

- type: entity
  parent: BaseRipleyPartItem
  id: RipleyLLeg
  name: ripley left leg
  description: The left leg of the Ripley APLU. It belongs on the chassis of the mech.
  components:
  - type: Sprite
    state: ripley_l_leg
  - type: Tag
    tags:
    - RipleyLLeg

- type: entity
  parent: BaseRipleyPartItem
  id: RipleyRLeg
  name: ripley right leg
  description: The right leg of the Ripley APLU. It belongs on the chassis of the mech.
  components:
  - type: Sprite
    state: ripley_r_leg
  - type: Tag
    tags:
    - RipleyRLeg

- type: entity
  parent: BaseRipleyPartItem
  id: RipleyRArm
  name: ripley right arm
  description: The right arm of the Ripley APLU. It belongs on the chassis of the mech.
  components:
  - type: Sprite
    state: ripley_r_arm
  - type: Tag
    tags:
    - RipleyRArm

- type: entity
  id: RipleyChassis
  parent: BaseRipleyPart
  name: ripley chassis
  description: An in-progress construction of the Ripley APLU mech.
  components:
  - type: Appearance
  - type: ContainerContainer
    containers:
      battery-container: !type:Container
  - type: MechAssemblyVisuals
    statePrefix: ripley
  - type: Sprite
    noRot: true
    state: ripley0
  - type: Construction
    graph: Ripley
    node: start
    defaultTarget: ripley

# H.O.N.K.

- type: entity
  parent: BaseMechPart
  id: BaseHonkerPart
  abstract: true
  components:
  - type: Sprite
    drawdepth: Items
    noRot: false
    sprite: Objects/Specific/Mech/honker_construction.rsi

- type: entity
  id: BaseHonkerPartItem
  parent: BaseHonkerPart
  abstract: true
  components:
  - type: Item
    size: Ginormous

- type: entity
  parent: BaseHonkerPart
  id: HonkerHarness
  name: H.O.N.K. harness
  description: The core of the H.O.N.K. mech
  components:
  - type: Appearance
  - type: ItemMapper
    mapLayers:
      honker_l_arm+o:
        whitelist:
          tags:
          - HonkerLArm
      honker_r_arm+o:
        whitelist:
          tags:
          - HonkerRArm
      honker_l_leg+o:
        whitelist:
          tags:
          - HonkerLLeg
      honker_r_leg+o:
        whitelist:
          tags:
          - HonkerRLeg
    sprite: Objects/Specific/Mech/honker_construction.rsi
  - type: ContainerContainer
    containers:
      mech-assembly-container: !type:Container
  - type: MechAssembly
    finishedPrototype: HonkerChassis
    requiredParts:
      HonkerLArm: false
      HonkerRArm: false
      HonkerLLeg: false
      HonkerRLeg: false
  - type: Sprite
    state: honker_harness+o
    noRot: true

- type: entity
  parent: BaseHonkerPartItem
  id: HonkerLArm
  name: H.O.N.K. left arm
  description: A H.O.N.K. left arm, with unique sockets that accept odd weaponry designed by clown scientists.
  components:
  - type: Sprite
    state: honker_l_arm
  - type: Tag
    tags:
    - HonkerLArm

- type: entity
  parent: BaseHonkerPartItem
  id: HonkerLLeg
  name: H.O.N.K. left leg
  description: A H.O.N.K. left leg. The foot appears just large enough to fully accommodate a clown shoe.
  components:
  - type: Sprite
    state: honker_l_leg
  - type: Tag
    tags:
    - HonkerLLeg

- type: entity
  parent: BaseHonkerPartItem
  id: HonkerRLeg
  name: H.O.N.K. right leg
  description: A H.O.N.K. right leg. The foot appears just large enough to fully accommodate a clown shoe.
  components:
  - type: Sprite
    state: honker_r_leg
  - type: Tag
    tags:
    - HonkerRLeg

- type: entity
  parent: BaseHonkerPartItem
  id: HonkerRArm
  name: H.O.N.K. right arm
  description: A H.O.N.K. right arm, with unique sockets that accept odd weaponry designed by clown scientists.
  components:
  - type: Sprite
    state: honker_r_arm
  - type: Tag
    tags:
    - HonkerRArm

- type: entity
  id: HonkerChassis
  parent: BaseHonkerPart
  name: H.O.N.K. chassis
  description: An in-progress construction of a H.O.N.K. mech. Contains chuckle unit, bananium core and honk support systems.
  components:
  - type: Appearance
  - type: ContainerContainer
    containers:
      battery-container: !type:Container
  - type: MechAssemblyVisuals
    statePrefix: honker
  - type: Sprite
    noRot: true
    state: honker0
  - type: Construction
    graph: Honker
    node: start
    defaultTarget: honker

# H.A.M.T.R.

- type: entity
  id: BaseHamtrPart
  parent: BaseMechPart
  abstract: true
  components:
  - type: Sprite
    drawdepth: Items
    noRot: false
    sprite: Objects/Specific/Mech/hamtr_construction.rsi

- type: entity
  id: BaseHamtrPartItem
  parent: BaseHamtrPart
  abstract: true
  components:
  - type: Item
    size: Huge

- type: entity
  parent: BaseHamtrPart
  id: HamtrHarness
  name: HAMTR harness
  description: The core of the HAMTR.
  components:
  - type: Appearance
  - type: ItemMapper
    mapLayers:
      hamtr_l_arm+o:
        whitelist:
          tags:
          - HamtrLArm
      hamtr_r_arm+o:
        whitelist:
          tags:
          - HamtrRArm
      hamtr_l_leg+o:
        whitelist:
          tags:
          - HamtrLLeg
      hamtr_r_leg+o:
        whitelist:
          tags:
          - HamtrRLeg
    sprite: Objects/Specific/Mech/hamtr_construction.rsi
  - type: ContainerContainer
    containers:
      mech-assembly-container: !type:Container
  - type: MechAssembly
    finishedPrototype: HamtrChassis
    requiredParts:
      HamtrLArm: false
      HamtrRArm: false
      HamtrLLeg: false
      HamtrRLeg: false
  - type: Sprite
    state: hamtr_harness+o
    noRot: true

- type: entity
  parent: BaseHamtrPartItem
  id: HamtrLArm
  name: HAMTR left arm
  description: The left arm of the HAMTR. It belongs on the chassis of the mech.
  components:
  - type: Sprite
    state: hamtr_l_arm
  - type: Tag
    tags:
    - HamtrLArm

- type: entity
  parent: BaseHamtrPartItem
  id: HamtrLLeg
  name: HAMTR left leg
  description: The left leg of the HAMTR. It belongs on the chassis of the mech.
  components:
  - type: Sprite
    state: hamtr_l_leg
  - type: Tag
    tags:
    - HamtrLLeg

- type: entity
  parent: BaseHamtrPartItem
  id: HamtrRLeg
  name: HAMTR right leg
  description: The right leg of the HAMTR. It belongs on the chassis of the mech.
  components:
  - type: Sprite
    state: hamtr_r_leg
  - type: Tag
    tags:
    - HamtrRLeg

- type: entity
  parent: BaseHamtrPartItem
  id: HamtrRArm
  name: HAMTR right arm
  description: The right arm of the HAMTR. It belongs on the chassis of the mech.
  components:
  - type: Sprite
    state: hamtr_r_arm
  - type: Tag
    tags:
    - HamtrRArm

- type: entity
  id: HamtrChassis
  parent: BaseHamtrPart
  name: HAMTR chassis
  description: An in-progress construction of the HAMTR mech.
  components:
  - type: Appearance
  - type: ContainerContainer
    containers:
      battery-container: !type:Container
  - type: MechAssemblyVisuals
    statePrefix: hamtr
  - type: Sprite
    noRot: true
    state: hamtr0
  - type: Construction
    graph: Hamtr
    node: start
    defaultTarget: hamtr

# Vim!!!!!!

- type: entity
  parent: BaseMechPart
  id: BaseVimPart
  abstract: true
  components:
  - type: Sprite
    drawdepth: Items
    noRot: false
    sprite: Objects/Specific/Mech/vim_construction.rsi

- type: entity
  parent: BaseVimPart
  id: BaseVimPartItem
  abstract: true
  components:
  - type: Item
    size: Small

- type: entity
  parent: BaseVimPartItem
  id: VimHarness
  name: vim harness
  description: A small mounting bracket for vim parts.
  components:
  - type: Appearance
  - type: ItemMapper
    mapLayers:
      helmet:
        whitelist:
          tags:
          - HelmetEVA
      left_leg:
        whitelist:
          tags:
          - BorgLeg
      right_leg:
        whitelist:
          tags:
          - BorgLeg
    sprite: Objects/Specific/Mech/vim_construction.rsi
  - type: ContainerContainer
    containers:
      mech-assembly-container: !type:Container
  - type: MechAssembly
    finishedPrototype: VimChassis
    requiredParts:
      HelmetEVA: false
      BorgLeg: false
  - type: Sprite
    state: harness
    noRot: true

- type: entity
  id: VimChassis
  parent: BaseVimPart
  name: vim chassis
  description: An in-progress construction of the Vim exosuit.
  components:
  - type: Appearance
  - type: ContainerContainer
    containers:
      battery-container: !type:Container
  - type: MechAssemblyVisuals
    statePrefix: vim
  - type: Sprite
    noRot: true
    state: vim0
  - type: Construction
    graph: Vim
    node: start
    defaultTarget: vim
