diff --git a/Content.Server/Mech/Systems/MechEquipmentSystem.cs b/Content.Server/Mech/Systems/MechEquipmentSystem.cs
index d81c57dfc1..71b31b6f30 100644
--- a/Content.Server/Mech/Systems/MechEquipmentSystem.cs
+++ b/Content.Server/Mech/Systems/MechEquipmentSystem.cs
@@ -1,4 +1,4 @@
-using Content.Server.Popups;
+using Content.Server.Popups;
using Content.Shared.DoAfter;
using Content.Shared.Interaction;
using Content.Shared.Mech.Components;
@@ -40,7 +40,7 @@ public sealed class MechEquipmentSystem : EntitySystem
if (mechComp.EquipmentContainer.ContainedEntities.Count >= mechComp.MaxEquipmentAmount)
return;
- if (mechComp.EquipmentWhitelist != null && !mechComp.EquipmentWhitelist.IsValid(uid))
+ if (mechComp.EquipmentWhitelist != null && !mechComp.EquipmentWhitelist.IsValid(args.Used))
return;
_popup.PopupEntity(Loc.GetString("mech-equipment-begin-install", ("item", uid)), mech);
diff --git a/Content.Server/Mech/Systems/MechSystem.cs b/Content.Server/Mech/Systems/MechSystem.cs
index 9c4ea54169..dca7f9c6c5 100644
--- a/Content.Server/Mech/Systems/MechSystem.cs
+++ b/Content.Server/Mech/Systems/MechSystem.cs
@@ -1,4 +1,4 @@
-using System.Linq;
+using System.Linq;
using Content.Server.Atmos.EntitySystems;
using Content.Server.Mech.Components;
using Content.Server.Power.Components;
@@ -11,6 +11,7 @@ using Content.Shared.Mech;
using Content.Shared.Mech.Components;
using Content.Shared.Mech.EntitySystems;
using Content.Shared.Movement.Events;
+using Content.Shared.Popups;
using Content.Shared.Tools.Components;
using Content.Shared.Verbs;
using Content.Shared.Wires;
@@ -31,6 +32,7 @@ public sealed class MechSystem : SharedMechSystem
[Dependency] private readonly IMapManager _map = default!;
[Dependency] private readonly UserInterfaceSystem _ui = default!;
[Dependency] private readonly ActionBlockerSystem _actionBlocker = default!;
+ [Dependency] private readonly SharedPopupSystem _popup = default!;
private ISawmill _sawmill = default!;
@@ -218,6 +220,12 @@ public sealed class MechSystem : SharedMechSystem
if (args.Cancelled || args.Handled)
return;
+ if (component.PilotWhitelist != null && !component.PilotWhitelist.IsValid(args.User))
+ {
+ _popup.PopupEntity(Loc.GetString("mech-no-enter", ("item", uid)), args.User);
+ return;
+ }
+
TryInsert(uid, args.Args.User, component);
_actionBlocker.UpdateCanMove(uid);
diff --git a/Content.Shared/Mech/Components/MechComponent.cs b/Content.Shared/Mech/Components/MechComponent.cs
index 9c00d3d552..a6a2aa0d5c 100644
--- a/Content.Shared/Mech/Components/MechComponent.cs
+++ b/Content.Shared/Mech/Components/MechComponent.cs
@@ -1,4 +1,4 @@
-using Content.Shared.Actions.ActionTypes;
+using Content.Shared.Actions.ActionTypes;
using Content.Shared.FixedPoint;
using Content.Shared.Whitelist;
using Robust.Shared.Containers;
@@ -93,6 +93,9 @@ public sealed class MechComponent : Component
[DataField("equipmentWhitelist")]
public EntityWhitelist? EquipmentWhitelist;
+ [DataField("pilotWhitelist")]
+ public EntityWhitelist? PilotWhitelist;
+
///
/// A container for storing the equipment entities.
///
diff --git a/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs b/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs
index 0b5e63297b..892249b9a2 100644
--- a/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs
+++ b/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs
@@ -1,4 +1,4 @@
-using System.Linq;
+using System.Linq;
using Content.Shared.Access.Components;
using Content.Shared.Access.Systems;
using Content.Shared.ActionBlocker;
@@ -270,7 +270,7 @@ public abstract class SharedMechSystem : EntitySystem
if (component.EquipmentContainer.ContainedEntities.Count >= component.MaxEquipmentAmount)
return;
- if (component.EquipmentWhitelist != null && !component.EquipmentWhitelist.IsValid(uid))
+ if (component.EquipmentWhitelist != null && !component.EquipmentWhitelist.IsValid(toInsert))
return;
equipmentComponent.EquipmentOwner = uid;
@@ -386,7 +386,7 @@ public abstract class SharedMechSystem : EntitySystem
if (!Resolve(uid, ref component))
return false;
- return IsEmpty(component) && _actionBlocker.CanMove(toInsert) && HasComp(toInsert);
+ return IsEmpty(component) && _actionBlocker.CanMove(toInsert);
}
///
diff --git a/Resources/Locale/en-US/mech/mech.ftl b/Resources/Locale/en-US/mech/mech.ftl
index d833cee646..19f570a2a1 100644
--- a/Resources/Locale/en-US/mech/mech.ftl
+++ b/Resources/Locale/en-US/mech/mech.ftl
@@ -13,4 +13,6 @@ mech-menu-title = mech control panel
mech-integrity-display = Integrity: {$amount}%
mech-energy-display = Energy: {$amount}%
-mech-slot-display = Open Slots: {$amount}
\ No newline at end of file
+mech-slot-display = Open Slots: {$amount}
+
+mech-no-enter = You cannot pilot this.
diff --git a/Resources/Locale/en-US/research/technologies.ftl b/Resources/Locale/en-US/research/technologies.ftl
index 6d56273f60..65fde10511 100644
--- a/Resources/Locale/en-US/research/technologies.ftl
+++ b/Resources/Locale/en-US/research/technologies.ftl
@@ -38,6 +38,7 @@ research-technology-grappling = Grappling
research-technology-abnormal-artifact-manipulation = Abnormal Artifact Manipulation
research-technology-gravity-manipulation = Gravity Manipulation
research-technology-mobile-anomaly-tech = Mobile Anomaly Tech
+research-technology-hamtr = HAMTR Mech
research-technology-rped = Rapid Part Exchange
research-technology-super-parts = Super Parts
diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
index cbdc4bf9d7..23cf2b9804 100644
--- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
+++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
@@ -2125,6 +2125,7 @@
tags:
- Trash
- CannotSuicide
+ - Hamster
- type: Respirator
damage:
types:
diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml b/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml
index 2e24a8ec2c..7d3167bbaa 100644
--- a/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml
+++ b/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml
@@ -485,6 +485,8 @@
- type: Tag
tags:
- CannotSuicide
+ - Trash
+ - Hamster
- type: entity
name: Shiva
diff --git a/Resources/Prototypes/Entities/Objects/Devices/Electronics/mech.yml b/Resources/Prototypes/Entities/Objects/Devices/Electronics/mech.yml
index 4d369fff5f..6657418488 100644
--- a/Resources/Prototypes/Entities/Objects/Devices/Electronics/mech.yml
+++ b/Resources/Prototypes/Entities/Objects/Devices/Electronics/mech.yml
@@ -81,3 +81,37 @@
- type: GuideHelp
guides:
- Robotics
+
+# HAMTR
+
+- type: entity
+ id: HamtrCentralElectronics
+ parent: BaseElectronics
+ name: HAMTR central control module
+ description: The electrical control center for the HAMTR mech.
+ components:
+ - type: Sprite
+ sprite: Objects/Misc/module.rsi
+ state: mainboard
+ - type: Tag
+ tags:
+ - HamtrCentralControlModule
+ - type: GuideHelp
+ guides:
+ - Robotics
+
+- type: entity
+ id: HamtrPeripheralsElectronics
+ parent: BaseElectronics
+ name: HAMTR peripherals control module
+ description: The electrical peripherals control for the HAMTR mech.
+ components:
+ - type: Sprite
+ sprite: Objects/Misc/module.rsi
+ state: id_mod
+ - type: Tag
+ tags:
+ - HamtrPeripheralsControlModule
+ - type: GuideHelp
+ guides:
+ - Robotics
diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mech/mech_construction.yml b/Resources/Prototypes/Entities/Objects/Specific/Mech/mech_construction.yml
index 93ae03edcf..5ba73f7a99 100644
--- a/Resources/Prototypes/Entities/Objects/Specific/Mech/mech_construction.yml
+++ b/Resources/Prototypes/Entities/Objects/Specific/Mech/mech_construction.yml
@@ -283,3 +283,132 @@
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
+ netsync: false
+ sprite: Objects/Specific/Mech/hamtr_construction.rsi
+
+- type: entity
+ id: BaseHamtrPartItem
+ parent: BaseHamtrPart
+ abstract: true
+ components:
+ - type: Item
+ size: 50
+
+- 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
diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mech/mecha_equipment.yml b/Resources/Prototypes/Entities/Objects/Specific/Mech/mecha_equipment.yml
index 8ba1f93bf3..8539c473b9 100644
--- a/Resources/Prototypes/Entities/Objects/Specific/Mech/mecha_equipment.yml
+++ b/Resources/Prototypes/Entities/Objects/Specific/Mech/mecha_equipment.yml
@@ -28,6 +28,27 @@
containers:
item-container: !type:Container
+- type: entity
+ id: MechEquipmentGrabberSmall
+ parent: BaseMechEquipment
+ name: small hydraulic clamp
+ description: Gives the mech the ability to grab things and drag them around.
+ components:
+ - type: Sprite
+ state: mecha_clamp_small
+ - type: MechGrabber
+ maxContents: 4
+ grabDelay: 3
+ grabEnergyDelta: 20
+ - type: Tag
+ tags:
+ - SmallMech
+ - type: UIFragment
+ ui: !type:MechGrabberUi
+ - type: ContainerContainer
+ containers:
+ item-container: !type:Container
+
- type: entity
id: MechEquipmentHorn
parent: BaseMechEquipment
diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml
index ce6a9d6395..4cf83e0e6e 100644
--- a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml
+++ b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml
@@ -89,6 +89,9 @@
openState: ripley-open
brokenState: ripley-broken
mechToPilotDamageMultiplier: 0.75
+ pilotWhitelist:
+ components:
+ - HumanoidAppearance
- type: MeleeWeapon
hidden: true
attackRate: 1
@@ -132,6 +135,9 @@
openState: honker-open
brokenState: honker-broken
mechToPilotDamageMultiplier: 0.5
+ pilotWhitelist:
+ components:
+ - HumanoidAppearance
- type: entity
id: MechHonkerBattery
@@ -142,3 +148,54 @@
containers:
mech-battery-slot:
- PowerCellHigh
+
+- type: entity
+ id: MechHamtr
+ parent: BaseMech
+ name: HAMTR
+ description: "An experimental mech which uses a neuralink to interface directly to a hamsters brain."
+ components:
+ - type: Sprite
+ netsync: false
+ drawdepth: Mobs
+ noRot: true
+ sprite: Objects/Specific/Mech/mecha.rsi
+ layers:
+ - map: [ "enum.MechVisualLayers.Base" ]
+ state: hamtr
+ - type: FootstepModifier
+ footstepSoundCollection:
+ path: /Audio/Mecha/sound_mecha_powerloader_step.ogg
+ - type: Mech
+ baseState: hamtr
+ openState: hamtr-open
+ brokenState: hamtr-broken
+ mechToPilotDamageMultiplier: 0.2
+ maxEquipmentAmount: 2
+ airtight: true
+ equipmentWhitelist:
+ tags:
+ - SmallMech
+ pilotWhitelist:
+ tags:
+ - Hamster
+ - type: MeleeWeapon
+ hidden: true
+ attackRate: 0.8
+ damage:
+ types:
+ Blunt: 10 #thwack
+ Structural: 2
+ - type: MovementSpeedModifier
+ baseWalkSpeed: 2.4
+ baseSprintSpeed: 3.7
+
+- type: entity
+ id: MechHamtrBattery
+ parent: MechHamtr
+ suffix: Battery
+ components:
+ - type: ContainerFill
+ containers:
+ mech-battery-slot:
+ - PowerCellHigh
diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
index 3018fbe5cb..d4ba6d0afa 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
@@ -320,6 +320,8 @@
- HonkerCentralElectronics
- HonkerPeripheralsElectronics
- HonkerTargetingElectronics
+ - HamtrCentralElectronics
+ - HamtrPeripheralsElectronics
- GeneratorPlasmaMachineCircuitboard
- GeneratorUraniumMachineCircuitboard
- WallmountGeneratorElectronics
@@ -386,6 +388,12 @@
- HonkerLLeg
- HonkerRLeg
- MechEquipmentHorn
+ - MechEquipmentGrabberSmall
+ - HamtrHarness
+ - HamtrLArm
+ - HamtrRArm
+ - HamtrLLeg
+ - HamtrRLeg
- type: MaterialStorage
whitelist:
tags:
diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/mechs/hamtr_construction.yml b/Resources/Prototypes/Recipes/Construction/Graphs/mechs/hamtr_construction.yml
new file mode 100644
index 0000000000..fb05cc313b
--- /dev/null
+++ b/Resources/Prototypes/Recipes/Construction/Graphs/mechs/hamtr_construction.yml
@@ -0,0 +1,125 @@
+- type: constructionGraph
+ id: Hamtr
+ start: start
+ graph:
+ - node: start
+ edges:
+ - to: hamtr
+ steps:
+ - tool: Anchoring
+ doAfter: 1
+ completed:
+ - !type:VisualizerDataInt
+ key: "enum.MechAssemblyVisuals.State"
+ data: 1
+
+ - tool: Screwing
+ doAfter: 1
+ completed:
+ - !type:VisualizerDataInt
+ key: "enum.MechAssemblyVisuals.State"
+ data: 2
+
+ - material: Cable
+ completed:
+ - !type:VisualizerDataInt
+ key: "enum.MechAssemblyVisuals.State"
+ data: 3
+
+ - tool: Cutting
+ doAfter: 1
+ completed:
+ - !type:VisualizerDataInt
+ key: "enum.MechAssemblyVisuals.State"
+ data: 4
+
+ - tag: HamtrCentralControlModule
+ name: HAMTR central control module
+ icon:
+ sprite: "Objects/Misc/module.rsi"
+ state: "mainboard"
+ completed:
+ - !type:VisualizerDataInt
+ key: "enum.MechAssemblyVisuals.State"
+ data: 5
+
+ - tool: Screwing
+ doAfter: 1
+ completed:
+ - !type:VisualizerDataInt
+ key: "enum.MechAssemblyVisuals.State"
+ data: 6
+
+ - tag: HamtrPeripheralsControlModule
+ name: HAMTR peripherals control module
+ icon:
+ sprite: "Objects/Misc/module.rsi"
+ state: id_mod
+ completed:
+ - !type:VisualizerDataInt
+ key: "enum.MechAssemblyVisuals.State"
+ data: 7
+
+ - tool: Screwing
+ doAfter: 1
+ completed:
+ - !type:VisualizerDataInt
+ key: "enum.MechAssemblyVisuals.State"
+ data: 12
+
+#i omitted the steps involving inserting machine parts because
+#currently mechs don't support upgrading. add them back in once that's squared away.
+
+ - component: PowerCell
+ name: power cell
+ store: battery-container
+ icon:
+ sprite: Objects/Power/power_cells.rsi
+ state: small
+ completed:
+ - !type:VisualizerDataInt
+ key: "enum.MechAssemblyVisuals.State"
+ data: 13
+
+ - tool: Screwing
+ doAfter: 1
+ completed:
+ - !type:VisualizerDataInt
+ key: "enum.MechAssemblyVisuals.State"
+ data: 14
+
+ - material: Steel
+ amount: 5
+ completed:
+ - !type:VisualizerDataInt
+ key: "enum.MechAssemblyVisuals.State"
+ data: 15
+
+ - tool: Anchoring
+ doAfter: 1
+ completed:
+ - !type:VisualizerDataInt
+ key: "enum.MechAssemblyVisuals.State"
+ data: 16
+
+ - tool: Welding
+ doAfter: 1
+ completed:
+ - !type:VisualizerDataInt
+ key: "enum.MechAssemblyVisuals.State"
+ data: 17
+
+ - material: MetalRod
+ amount: 10
+ completed:
+ - !type:VisualizerDataInt
+ key: "enum.MechAssemblyVisuals.State"
+ data: 18
+
+ - tool: Welding
+ doAfter: 1
+
+ - node: hamtr
+ actions:
+ - !type:BuildMech
+ mechPrototype: MechHamtr
diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml
index f48f4dc1e1..9d83b40c8e 100644
--- a/Resources/Prototypes/Recipes/Lathes/electronics.yml
+++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml
@@ -378,6 +378,24 @@
Glass: 900
Bananium: 100
+- type: latheRecipe
+ id: HamtrCentralElectronics
+ result: HamtrCentralElectronics
+ completetime: 4
+ materials:
+ Steel: 100
+ Glass: 900
+ Gold: 100
+
+- type: latheRecipe
+ id: HamtrPeripheralsElectronics
+ result: HamtrPeripheralsElectronics
+ completetime: 4
+ materials:
+ Steel: 100
+ Glass: 900
+ Gold: 100
+
# Power
- type: latheRecipe
id: APCElectronics
diff --git a/Resources/Prototypes/Recipes/Lathes/mech_parts.yml b/Resources/Prototypes/Recipes/Lathes/mech_parts.yml
index c6accfa925..c536408659 100644
--- a/Resources/Prototypes/Recipes/Lathes/mech_parts.yml
+++ b/Resources/Prototypes/Recipes/Lathes/mech_parts.yml
@@ -100,3 +100,52 @@
materials:
Steel: 500
Bananium: 200
+
+# HAMTR
+- type: latheRecipe
+ id: HamtrHarness
+ result: HamtrHarness
+ completetime: 10
+ materials:
+ Steel: 1200
+ Glass: 1000
+
+- type: latheRecipe
+ id: HamtrLArm
+ result: HamtrLArm
+ completetime: 10
+ materials:
+ Steel: 800
+ Glass: 600
+
+- type: latheRecipe
+ id: HamtrLLeg
+ result: HamtrLLeg
+ completetime: 10
+ materials:
+ Steel: 800
+ Glass: 600
+
+- type: latheRecipe
+ id: HamtrRLeg
+ result: HamtrRLeg
+ completetime: 10
+ materials:
+ Steel: 800
+ Glass: 600
+
+- type: latheRecipe
+ id: HamtrRArm
+ result: HamtrRArm
+ completetime: 10
+ materials:
+ Steel: 800
+ Glass: 600
+
+- type: latheRecipe
+ id: MechEquipmentGrabberSmall
+ result: MechEquipmentGrabberSmall
+ completetime: 10
+ materials:
+ Steel: 400
+ Plastic: 100
diff --git a/Resources/Prototypes/Research/experimental.yml b/Resources/Prototypes/Research/experimental.yml
index c2e96fd0a7..a309ed6670 100644
--- a/Resources/Prototypes/Research/experimental.yml
+++ b/Resources/Prototypes/Research/experimental.yml
@@ -145,6 +145,26 @@
recipeUnlocks:
- RPED
+
+- type: technology
+ id: HamtrMechTech
+ name: research-technology-hamtr
+ icon:
+ sprite: Objects/Specific/Mech/mecha.rsi
+ state: hamtr
+ discipline: Experimental
+ tier: 2
+ cost: 8000
+ recipeUnlocks:
+ - HamtrHarness
+ - HamtrLArm
+ - HamtrRArm
+ - HamtrLLeg
+ - HamtrRLeg
+ - HamtrCentralElectronics
+ - HamtrPeripheralsElectronics
+ - MechEquipmentGrabberSmall
+
# Tier 3
- type: technology
diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml
index 1701915d4b..87a6d1e7a1 100644
--- a/Resources/Prototypes/tags.yml
+++ b/Resources/Prototypes/tags.yml
@@ -323,6 +323,28 @@
- type: Tag
id: GuideEmbeded
+
+- type: Tag
+ id: Hamster
+
+- type: Tag
+ id: HamtrCentralControlModule
+
+- type: Tag
+ id: HamtrPeripheralsControlModule
+
+- type: Tag
+ id: HamtrLArm
+
+- type: Tag
+ id: HamtrLLeg
+
+- type: Tag
+ id: HamtrRLeg
+
+- type: Tag
+ id: HamtrRArm
+
- type: Tag
id: Handcuffs
@@ -640,6 +662,9 @@
- type: Tag
id: SkeletonMotorcycleKeys
+- type: Tag
+ id: SmallMech
+
- type: Tag
id: Smokable
diff --git a/Resources/ServerInfo/Guidebook/Science/Robotics.xml b/Resources/ServerInfo/Guidebook/Science/Robotics.xml
index 2caeae1ca3..8dfee65e4b 100644
--- a/Resources/ServerInfo/Guidebook/Science/Robotics.xml
+++ b/Resources/ServerInfo/Guidebook/Science/Robotics.xml
@@ -34,6 +34,7 @@
+
[color=#a4885c]Mechs[/color] are giant behemoths of metal designed to carry out a variety of functions respective to their model. They are piloted by players and require power cells to function.
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr0.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr0.png
new file mode 100644
index 0000000000..e6d4e08670
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr0.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr1.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr1.png
new file mode 100644
index 0000000000..50fbcdeeaf
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr1.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr10.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr10.png
new file mode 100644
index 0000000000..8fcaf0347b
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr10.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr11.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr11.png
new file mode 100644
index 0000000000..1cdc646cc4
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr11.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr12.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr12.png
new file mode 100644
index 0000000000..73ff87cf5d
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr12.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr13.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr13.png
new file mode 100644
index 0000000000..01c4d439d4
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr13.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr14.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr14.png
new file mode 100644
index 0000000000..ff7dbae843
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr14.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr15.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr15.png
new file mode 100644
index 0000000000..6e1c1f69a9
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr15.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr16.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr16.png
new file mode 100644
index 0000000000..48f534fb5d
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr16.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr17.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr17.png
new file mode 100644
index 0000000000..77fdfb1df5
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr17.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr18.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr18.png
new file mode 100644
index 0000000000..c067f4670d
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr18.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr2.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr2.png
new file mode 100644
index 0000000000..f4b8933822
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr2.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr3.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr3.png
new file mode 100644
index 0000000000..22767fe7f8
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr3.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr4.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr4.png
new file mode 100644
index 0000000000..f30150e612
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr4.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr5.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr5.png
new file mode 100644
index 0000000000..e73a42943c
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr5.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr6.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr6.png
new file mode 100644
index 0000000000..5e042be96c
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr6.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr7.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr7.png
new file mode 100644
index 0000000000..36dd62ca9e
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr7.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr8.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr8.png
new file mode 100644
index 0000000000..b983f7de42
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr8.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr9.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr9.png
new file mode 100644
index 0000000000..cb1dd6e03c
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr9.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_chassis.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_chassis.png
new file mode 100644
index 0000000000..add17317ab
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_chassis.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_harness+o.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_harness+o.png
new file mode 100644
index 0000000000..b8e35bd86b
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_harness+o.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_harness.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_harness.png
new file mode 100644
index 0000000000..b12a626319
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_harness.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_l_arm+o.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_l_arm+o.png
new file mode 100644
index 0000000000..c103dfd836
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_l_arm+o.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_l_arm.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_l_arm.png
new file mode 100644
index 0000000000..11da9c7dda
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_l_arm.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_l_leg+o.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_l_leg+o.png
new file mode 100644
index 0000000000..2b7790c263
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_l_leg+o.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_l_leg.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_l_leg.png
new file mode 100644
index 0000000000..50556a8cf6
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_l_leg.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_r_arm+o.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_r_arm+o.png
new file mode 100644
index 0000000000..f486e6fb41
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_r_arm+o.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_r_arm.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_r_arm.png
new file mode 100644
index 0000000000..ae9211e32d
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_r_arm.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_r_leg+o.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_r_leg+o.png
new file mode 100644
index 0000000000..76392e8698
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_r_leg+o.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_r_leg.png b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_r_leg.png
new file mode 100644
index 0000000000..0b92ca3e03
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/hamtr_r_leg.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/meta.json b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/meta.json
new file mode 100644
index 0000000000..ad6b752481
--- /dev/null
+++ b/Resources/Textures/Objects/Specific/Mech/hamtr_construction.rsi/meta.json
@@ -0,0 +1,101 @@
+{
+ "copyright" : "Made by brainfood1183 (github) for ss14",
+ "license" : "CC-BY-SA-3.0",
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "hamtr_chassis"
+ },
+ {
+ "name": "hamtr_harness"
+ },
+ {
+ "name": "hamtr_harness+o"
+ },
+ {
+ "name": "hamtr_r_arm"
+ },
+ {
+ "name": "hamtr_r_arm+o"
+ },
+ {
+ "name": "hamtr_l_arm"
+ },
+ {
+ "name": "hamtr_l_arm+o"
+ },
+ {
+ "name": "hamtr_r_leg"
+ },
+ {
+ "name": "hamtr_r_leg+o"
+ },
+ {
+ "name": "hamtr_l_leg"
+ },
+ {
+ "name": "hamtr_l_leg+o"
+ },
+ {
+ "name": "hamtr0"
+ },
+ {
+ "name": "hamtr1"
+ },
+ {
+ "name": "hamtr2"
+ },
+ {
+ "name": "hamtr3"
+ },
+ {
+ "name": "hamtr4"
+ },
+ {
+ "name": "hamtr5"
+ },
+ {
+ "name": "hamtr6"
+ },
+ {
+ "name": "hamtr7"
+ },
+ {
+ "name": "hamtr8"
+ },
+ {
+ "name": "hamtr9"
+ },
+ {
+ "name": "hamtr10"
+ },
+ {
+ "name": "hamtr11"
+ },
+ {
+ "name": "hamtr12"
+ },
+ {
+ "name": "hamtr13"
+ },
+ {
+ "name": "hamtr14"
+ },
+ {
+ "name": "hamtr15"
+ },
+ {
+ "name": "hamtr16"
+ },
+ {
+ "name": "hamtr17"
+ },
+ {
+ "name": "hamtr18"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/hamtr-broken.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/hamtr-broken.png
new file mode 100644
index 0000000000..3a1f75d90a
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/hamtr-broken.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/hamtr-open.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/hamtr-open.png
new file mode 100644
index 0000000000..70b8b673d1
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/hamtr-open.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/hamtr.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/hamtr.png
new file mode 100644
index 0000000000..bb80a6b65d
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/hamtr.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/meta.json b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/meta.json
index 8954670599..2a634895d0 100644
--- a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/meta.json
+++ b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/meta.json
@@ -1,5 +1,5 @@
{
- "copyright" : "Taken from https://github.com/tgstation/tgstation at at https://github.com/tgstation/tgstation/commit/40d89d11ea4a5cb81d61dc1018b46f4e7d32c62a",
+ "copyright" : "Taken from https://github.com/tgstation/tgstation at at https://github.com/tgstation/tgstation/commit/40d89d11ea4a5cb81d61dc1018b46f4e7d32c62a, hamtr made by brainfood1183 (github)",
"license" : "CC-BY-SA-3.0",
"version": 1,
"size": {
@@ -249,6 +249,16 @@
{
"name": "odysseus-broken"
},
+ {
+ "name": "hamtr",
+ "directions": 4
+ },
+ {
+ "name": "hamtr-open"
+ },
+ {
+ "name": "hamtr-broken"
+ },
{
"name": "firefighter",
"directions": 4
@@ -466,4 +476,4 @@
"name": "hauler-broken"
}
]
-}
\ No newline at end of file
+}
diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_clamp_small.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_clamp_small.png
new file mode 100644
index 0000000000..da198048b5
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_clamp_small.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/meta.json b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/meta.json
index ecdce169b6..5e07ad51fa 100644
--- a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/meta.json
+++ b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/meta.json
@@ -64,6 +64,9 @@
{
"name": "mecha_clamp"
},
+ {
+ "name": "mecha_clamp_small"
+ },
{
"name": "mecha_wire"
},