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