diff --git a/code/game/gamemodes/clockwork/clockwork_items.dm b/code/game/gamemodes/clockwork/clockwork_items.dm
index 0ed3bf9c8d96..c54e9abd2159 100644
--- a/code/game/gamemodes/clockwork/clockwork_items.dm
+++ b/code/game/gamemodes/clockwork/clockwork_items.dm
@@ -1665,20 +1665,31 @@
/obj/item/clockwork/shard/afterattack(atom/target, mob/user, proximity, params)
. = ..()
- if(!ishuman(target) || !isclocker(user))
- return
if(!proximity)
return
- var/mob/living/carbon/human/human = target
- if(human.stat == DEAD && isclocker(human)) // dead clocker
- user.temporarily_remove_item_from_inventory(src)
- qdel(src)
- if(!human.client)
- give_ghost(human)
- else
- human.revive()
- human.set_species(/datum/species/golem/clockwork)
- to_chat(human, span_clocklarge("\"You are back once again.\""))
+ if(ishuman(target) && isclocker(target))
+ revive(target, user)
+ if(ismecha(target)) // mech
+ convert_mecha(target, user)
+
+/obj/item/clockwork/shard/proc/convert_mecha(obj/mecha/target, mob/user)
+ if(!do_after(user, 10 SECONDS, target))
+ return
+ user.temporarily_remove_item_from_inventory(src)
+ qdel(src)
+ target.ratvar_act(convert_mecha = TRUE)
+
+/obj/item/clockwork/shard/proc/revive(mob/living/carbon/human/target, mob/user)
+ if(target.stat != DEAD)
+ return
+ user.temporarily_remove_item_from_inventory(src)
+ qdel(src)
+ if(!target.client)
+ give_ghost(target)
+ else
+ target.revive()
+ target.set_species(/datum/species/golem/clockwork)
+ to_chat(target, span_clocklarge("\"You are back once again.\""))
/obj/item/clockwork/shard/pickup(mob/living/user)
. = ..()
diff --git a/code/game/gamemodes/clockwork/clockwork_workshop.dm b/code/game/gamemodes/clockwork/clockwork_workshop.dm
index 211f09054bd7..02355e3ab6f0 100644
--- a/code/game/gamemodes/clockwork/clockwork_workshop.dm
+++ b/code/game/gamemodes/clockwork/clockwork_workshop.dm
@@ -55,6 +55,14 @@
CLOCK_DESIGN("Marauder", /obj/item/clockwork/marauder, 1200, 300, 5),
CLOCK_DESIGN("Strange Shard", /obj/item/clockwork/shard, 2000, 500, 8),
)
+ item_list["Mecha"] = list(
+ CLOCK_DESIGN("Brass clamp", /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/brass, 500, 200, 4),
+ CLOCK_DESIGN("Brass Armor Booster Module", /obj/item/mecha_parts/mecha_equipment/brass_armor_booster, 1500, 200, 5),
+ CLOCK_DESIGN("Brass cradle", /obj/item/mecha_parts/mecha_equipment/cage/brass, 1000, 100, 4),
+ CLOCK_DESIGN("Brass exosuit drill", /obj/item/mecha_parts/mecha_equipment/drill/brass, 1500, 200, 4),
+ CLOCK_DESIGN("\"Spark of the Righteous\" Mounted Taser", /obj/item/mecha_parts/mecha_equipment/weapon/energy/brasstaser, 2000, 300, 6),
+ CLOCK_DESIGN("\"Ray of Faith\" Laser", /obj/item/mecha_parts/mecha_equipment/weapon/energy/brasslaser, 2500, 500, 6),
+ )
/obj/structure/clockwork/functional/workshop/Destroy()
// let all the brass out!
diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/game/mecha/equipment/tools/mining_tools.dm
index 0b6807438fda..e8638a6b3799 100644
--- a/code/game/mecha/equipment/tools/mining_tools.dm
+++ b/code/game/mecha/equipment/tools/mining_tools.dm
@@ -142,6 +142,14 @@
drill_level = DRILL_HARDENED
integrated = TRUE
+/obj/item/mecha_parts/mecha_equipment/drill/brass
+ name = "Brass exosuit drill"
+ desc = "Оборудование для инженерных и боевых экзокостюмов. Это благословлённая версия бура."
+ icon_state = "mech_brass_drill"
+ equip_cooldown = 0.5 SECONDS
+ drill_delay = 2.5
+ drill_level = DRILL_HARDENED
+
/obj/item/mecha_parts/mecha_equipment/mining_scanner
name = "exosuit mining scanner"
desc = "Equipment for engineering and combat exosuits. It will automatically check surrounding rock for useful minerals."
diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm
index 9144140d3351..8fa298373d4e 100644
--- a/code/game/mecha/equipment/tools/other_tools.dm
+++ b/code/game/mecha/equipment/tools/other_tools.dm
@@ -187,6 +187,27 @@
start_cooldown()
return TRUE
+/obj/item/mecha_parts/mecha_equipment/brass_armor_booster
+ name = "Brass Armor Booster Module"
+ desc = "Усиливает броню экзокостюма против всех атак. Полностью блокирует выстрелы тазера. Требует энергию для работы."
+ icon_state = "mecha_abooster_brass"
+ equip_cooldown = 0.5 SECONDS
+ energy_drain = 25
+ range = 0
+ var/deflect_coeff = 1.30
+ var/damage_coeff = 0.7
+ selectable = MODULE_SELECTABLE_NONE
+
+/obj/item/mecha_parts/mecha_equipment/brass_armor_booster/proc/projectile_react()
+ if(action_checks(src))
+ start_cooldown()
+ return TRUE
+
+/obj/item/mecha_parts/mecha_equipment/brass_armor_booster/proc/attack_react(mob/user)
+ if(action_checks(user))
+ start_cooldown()
+ return TRUE
+
////////////////////////////////// REPAIR DROID //////////////////////////////////////////////////
/obj/item/mecha_parts/mecha_equipment/repair_droid
@@ -853,3 +874,23 @@
INSTRUMENTAL = "механическими клешнями",
PREPOSITIONAL = "механических клешнях",
)
+
+/obj/item/mecha_parts/mecha_equipment/cage/brass
+ name = "Brass cradle"
+ desc = "Модуль для экзокостюмов, используемый для задержания заблудших."
+ icon_state = "mecha_cage_brass"
+ origin_tech = "combat=6;materials=5"
+ equip_cooldown = 2 SECONDS
+ energy_drain = 250
+ salvageable = FALSE
+ alert_category = "mecha_cage"
+
+/obj/item/mecha_parts/mecha_equipment/cage/brass/get_ru_names()
+ return list(
+ NOMINATIVE = "модуль \"Латунная колыбель\"",
+ GENITIVE = "модуля \"Латунная колыбель\"",
+ DATIVE = "модулю \"Латунная колыбель\"",
+ ACCUSATIVE = "модуль \"Латунная колыбель\"",
+ INSTRUMENTAL = "модулем \"Латунная колыбель\"",
+ PREPOSITIONAL = "модуле \"Латунная колыбель\"",
+ )
diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm
index 409069d44423..f8e21e8955e8 100644
--- a/code/game/mecha/equipment/tools/work_tools.dm
+++ b/code/game/mecha/equipment/tools/work_tools.dm
@@ -111,6 +111,23 @@
start_cooldown()
return TRUE
+/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/brass
+ name = "Brass clamp"
+ desc = "Оборудование для латунных экзокостюмов. Поднимает объекты и загружает их в грузовой отсек."
+ icon_state = "mecha_brassclamp"
+ equip_cooldown = 1 SECONDS
+ energy_drain = 5
+ dam_force = 25
+ harmful = TRUE
+
+/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/brass/attach_act(obj/mecha/M)
+ chassis.cargo_expanded = TRUE
+ chassis.cargo_capacity = 25
+
+/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/brass/detach_act(obj/mecha/M)
+ chassis.cargo_expanded = FALSE
+ chassis.cargo_capacity = initial(chassis.cargo_capacity)
+
/obj/item/mecha_parts/mecha_equipment/cargo_upgrade
name = "Cargo expansion upgrade"
desc = "A working exosuit module that allows you to turn your Ripley into a hearse, zoo, or armored personnel carrier."
diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm
index 8e0ccecbcf94..3893ee47eab5 100644
--- a/code/game/mecha/equipment/weapons/weapons.dm
+++ b/code/game/mecha/equipment/weapons/weapons.dm
@@ -192,6 +192,24 @@
fire_sound = 'sound/weapons/gunshots/1taser.ogg'
size = 1
+/obj/item/mecha_parts/mecha_equipment/weapon/energy/brasstaser
+ name = "\"Spark of the Righteous\" Mounted Taser"
+ icon_state = "mecha_taser_brass"
+ energy_drain = 15
+ equip_cooldown = 0.5 SECONDS
+ projectile = /obj/projectile/energy/electrode/brass
+ fire_sound = 'sound/weapons/gunshots/1taser.ogg'
+ size = 1
+
+/obj/item/mecha_parts/mecha_equipment/weapon/energy/brasslaser
+ equip_cooldown = 0.3 SECONDS
+ name = "\"Ray of Faith\" Laser"
+ icon_state = "mecha_brassdart"
+ energy_drain = 20
+ projectile = /obj/projectile/beam/laser/light/rat/mecha
+ fire_sound = 'sound/weapons/gunshots/1laser4.ogg'
+ harmful = TRUE
+
/obj/item/mecha_parts/mecha_equipment/weapon/honker
name = "HoNkER BlAsT 5000"
icon_state = "mecha_honker"
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index e092492a8894..26eb1ccc0f34 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -638,6 +638,11 @@
icon_state = "brasslaser"
impact_effect_type = /obj/effect/temp_visual/impact_effect/orange_laser
+/obj/projectile/beam/laser/light/rat/prehit(atom/target)
+ if(isclocker(target))
+ damage = 0
+ return ..()
+
/obj/projectile/beam/laser/light/rat/get_ru_names()
return list(
NOMINATIVE = "лазер часовой энергии",
@@ -648,7 +653,17 @@
PREPOSITIONAL = "лазере часовой энергии",
)
-/obj/projectile/beam/laser/light/rat/prehit(atom/target)
- if(isclocker(target))
- damage = 0
- return ..()
+/obj/projectile/beam/laser/light/rat/mecha
+ name = "brass laser beam"
+ damage = 20
+ armour_penetration = 10
+
+/obj/projectile/beam/laser/light/rat/mecha/get_ru_names()
+ return list(
+ NOMINATIVE = "латунный импульс",
+ GENITIVE = "латунного импульса",
+ DATIVE = "латунному импульсу",
+ ACCUSATIVE = "латунный импульс",
+ INSTRUMENTAL = "латунным импульсом",
+ PREPOSITIONAL = "латунном импульсе",
+ )
diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm
index 186311a32112..238d36a47c80 100644
--- a/code/modules/projectiles/projectile/energy.dm
+++ b/code/modules/projectiles/projectile/energy.dm
@@ -551,4 +551,34 @@
if(!isclocker(to_heal))
return ..()
to_heal.heal_overall_damage(0, 75)
+
+/obj/projectile/energy/electrode/brass
+ name = "brass electrode"
+ confused = 3 SECONDS
+ stun = 0.5 SECONDS
+ stamina = 30
+ stutter = 10 SECONDS
+ jitter = 30 SECONDS
+ range = 8
+
+/obj/projectile/energy/electrode/brass/get_ru_names()
+ return list(
+ NOMINATIVE = "латунный электрод",
+ GENITIVE = "латунного электрода",
+ DATIVE = "латунному электроду",
+ ACCUSATIVE = "латунный электрод",
+ INSTRUMENTAL = "латунным электродом",
+ PREPOSITIONAL = "латунном электроде",
+ )
+
+/obj/projectile/energy/electrode/brass/prehit(atom/target)
+ if(isclocker(target))
+ confused = 0 SECONDS
+ stun = 0 SECONDS
+ stamina = 0
+ stutter = 0 SECONDS
+ jitter = 0 SECONDS
+ var/tasered_duration = 0 SECONDS
+ return ..()
+
#undef ELECTRODE_BUCKLED_WEAKEN_MULTIPLIER
diff --git a/icons/obj/mecha/mecha_equipment.dmi b/icons/obj/mecha/mecha_equipment.dmi
index 7b1c7b08cfb7..645309de7834 100644
Binary files a/icons/obj/mecha/mecha_equipment.dmi and b/icons/obj/mecha/mecha_equipment.dmi differ