diff --git a/code/modules/martial_arts/muscle_implant.dm b/code/modules/martial_arts/muscle_implant.dm new file mode 100644 index 00000000000..a048708ddbf --- /dev/null +++ b/code/modules/martial_arts/muscle_implant.dm @@ -0,0 +1,57 @@ +/datum/martial_art/muscle_implant + name = "Empowered Muscle Implant Fighting" + weight = 1 + /// Are we EMP'ed? + var/is_emped = FALSE + /// How much damage should our punches deal + var/punch_damage = 13 + +/datum/martial_art/muscle_implant/harm_act(mob/living/carbon/human/user, mob/living/carbon/human/target) + MARTIAL_ARTS_ACT_CHECK + + if(HAS_TRAIT(user, TRAIT_PACIFISM)) + to_chat(user, "You don't want to hurt [target]!") + return FALSE + var/picked_hit_type = pick("punch", "smash", "kick") + if(ishuman(target) && target.check_shields(user, punch_damage, "[user]'s' [picked_hit_type]")) + user.do_attack_animation(target) + playsound(target.loc, 'sound/weapons/punchmiss.ogg', 25, TRUE, -1) + return FALSE + if(is_emped) + do_the_punch(user, user) + else + do_the_punch(user, target) + playsound(target.loc, 'sound/weapons/resonator_blast.ogg', 50, TRUE) + playsound(target.loc, 'sound/weapons/genhit2.ogg', 50, TRUE) + + return TRUE + +/datum/martial_art/muscle_implant/proc/do_the_punch(mob/living/carbon/human/puncher, mob/living/carbon/human/punchee) + puncher.do_attack_animation(punchee, ATTACK_EFFECT_SMASH) + add_attack_logs(puncher, punchee, "Melee attacked with martial-art [src] : Punched", ATKLOG_ALL) + punchee.apply_damage(punch_damage, BRUTE, puncher.zone_selected) + + if(!IS_HORIZONTAL(puncher)) //Throw them if we are standing + var/atom/throw_target = get_edge_target_turf(punchee, puncher.dir) + punchee.throw_at(throw_target, rand(1, 2), 0.5, puncher) + + var/picked_hit_type = pick("punch", "smash", "kick") + punchee.visible_message( + "[puncher] [picked_hit_type]ed [punchee]!", + "You're [picked_hit_type]ed by [puncher]!", + "You hear a sickening sound of flesh hitting flesh!" + ) + + if(puncher == punchee) + to_chat(puncher, "You [picked_hit_type] yourself!") + else + to_chat(puncher, "You [picked_hit_type] [punchee]!") + +/datum/martial_art/muscle_implant/proc/emp_act(severity, mob/owner) + is_emped = TRUE + to_chat(owner, "Your arms spasm wildly!") + addtimer(CALLBACK(src, PROC_REF(reboot), owner), (18 / severity) SECONDS) + +/datum/martial_art/muscle_implant/proc/reboot(mob/owner) + is_emped = FALSE + to_chat(owner, "Your arms stop spasming.") diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index db364d93c04..eb2d4e940bc 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -333,3 +333,13 @@ reagents_list = list("blood" = 50) build_path = /obj/item/v1_arm_shell category = list("Weapons") + +/datum/design/muscle_implant + name = "Strong-arm Empowered Musculature Implant" + desc = "An implant that enhances your muscles to punch harder and throw people back." + id = "muscle_implant" + req_tech = list("combat" = 7, "syndicate" = 4, "biotech" = 7) + build_type = PROTOLATHE + materials = list(MAT_GOLD = 5000, MAT_METAL = 10000, MAT_TITANIUM = 3000, MAT_BLUESPACE = 2000) + build_path = /obj/item/organ/internal/cyberimp/arm/muscle + category = list("Weapons") diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 7f70d8cb807..9789cfdafb3 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -559,3 +559,29 @@ qdel(src) qdel(I) return ..() + +/obj/item/organ/internal/cyberimp/arm/muscle + name = "strong-arm empowered musculature implant" + desc = "When implanted, this cybernetic implant will enhance the muscles of the arm to deliver more power-per-action. Only has to be installed in one arm." + icon_state = "muscle_imp" + + parent_organ = "l_arm" //Left arm by default + slot = "l_arm_device" + + actions_types = list() + var/datum/martial_art/muscle_implant/muscle_implant + +/obj/item/organ/internal/cyberimp/arm/muscle/insert(mob/living/carbon/M, special, dont_remove_slot) + . = ..() + muscle_implant = new() + muscle_implant.teach(M) + +/obj/item/organ/internal/cyberimp/arm/muscle/remove(mob/living/carbon/M, special) + . = ..() + muscle_implant.remove(M) + +/obj/item/organ/internal/cyberimp/arm/muscle/emp_act(severity) + . = ..() + if(emp_proof) + return + muscle_implant.emp_act(severity, owner) diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 6adeaf4e3cf..bb3f95d325f 100644 Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ diff --git a/paradise.dme b/paradise.dme index 4b27f301564..ff5dda64f13 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1867,6 +1867,7 @@ #include "code\modules\martial_arts\krav_maga.dm" #include "code\modules\martial_arts\martial.dm" #include "code\modules\martial_arts\mimejutsu.dm" +#include "code\modules\martial_arts\muscle_implant.dm" #include "code\modules\martial_arts\plasma_fist.dm" #include "code\modules\martial_arts\sleeping_carp.dm" #include "code\modules\martial_arts\wrestling.dm"