From 8a83df0d3bfa63276fd866161a233cdcd592b883 Mon Sep 17 00:00:00 2001 From: kevinz000 Date: Tue, 20 Sep 2016 02:36:11 -0700 Subject: [PATCH] Arm Combat Cybernetic Implants (because toolset arm shanks weren't enough) (#20544) * combat_cybernetics * flashlight-arms * surgery * thiswillprobablyfixit... * nopethatdoesntwork * revert * nerf * prayingtornjesusitcompiles --- code/game/objects/items/robot/robot_items.dm | 9 ++-- .../objects/items/weapons/melee/energy.dm | 1 - code/modules/assembly/flash.dm | 29 +++++++++++ .../mob/living/silicon/robot/robot_modules.dm | 2 +- code/modules/surgery/organs/augments_arms.dm | 50 +++++++++++++++++++ code/modules/surgery/organs/augments_chest.dm | 1 + 6 files changed, 86 insertions(+), 6 deletions(-) diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index 5e8b75b987a..5f1e514cde7 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -10,15 +10,16 @@ icon_state = "elecarm" var/charge_cost = 30 -/obj/item/borg/stun/attack(mob/living/M, mob/living/silicon/robot/user) +/obj/item/borg/stun/attack(mob/living/M, mob/living/user) if(ishuman(M)) var/mob/living/carbon/human/H = M if(H.check_shields(0, "[M]'s [name]", src, MELEE_ATTACK)) playsound(M, 'sound/weapons/Genhit.ogg', 50, 1) return 0 - - if(!user.cell.use(charge_cost)) - return + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + if(!R.cell.use(charge_cost)) + return user.do_attack_animation(M) M.Weaken(5) diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 9f93c93eca3..b9d3a17e023 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -238,7 +238,6 @@ /obj/item/weapon/melee/energy/blade/dropped() ..() - qdel(src) /obj/item/weapon/melee/energy/blade/attack_self(mob/user) return diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index 27b859bd10c..f174129c534 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -190,3 +190,32 @@ item_state = "nullrod" /obj/item/device/assembly/flash/handheld //this is now the regular pocket flashes + +/obj/item/device/assembly/flash/armimplant + name = "photon projector" + desc = "A high-powered photon projector implant normally used for lighting purposes, but also doubles as a flashbulb weapon. Self-repair protocals fix the flashbulb if it ever burns out." + var/flashcd = 20 + var/overheat = 0 + var/obj/item/organ/cyberimp/arm/flash/I = null + +/obj/item/device/assembly/flash/armimplant/burn_out() + if(I && I.owner) + I.owner << "Your photon projector implant overheats and deactivates!" + I.Retract() + overheat = FALSE + addtimer(src, "cooldown", flashcd * 2) + +/obj/item/device/assembly/flash/armimplant/try_use_flash(mob/user = null) + if(overheat) + if(I && I.owner) + I.owner << "Your photon projector is running too hot to be used again so quickly!" + return FALSE + overheat = TRUE + addtimer(src, "cooldown", flashcd) + playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1) + update_icon(1) + return TRUE + + +/obj/item/device/assembly/flash/armimplant/proc/cooldown() + overheat = FALSE diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 34017a7c64e..7658a71c484 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -402,4 +402,4 @@ /datum/robot_energy_storage/medical max_energy = 2500 recharge_rate = 250 - name = "Medical Synthesizer" + name = "Medical Synthesizer" diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 76220ef9ddc..9cfed984f4c 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -68,6 +68,10 @@ "[holder] snaps back into your [zone == "r_arm" ? "right" : "left"] arm.", "You hear a short mechanical noise.") + if(istype(holder, /obj/item/device/assembly/flash/armimplant)) + var/obj/item/device/assembly/flash/F = holder + F.SetLuminosity(0) + owner.unEquip(holder, 1) holder.loc = src holder = null @@ -85,6 +89,10 @@ holder.w_class = 5 holder.materials = null + if(istype(holder, /obj/item/device/assembly/flash/armimplant)) + var/obj/item/device/assembly/flash/F = holder + F.SetLuminosity(7) + var/obj/item/arm_item = owner.get_active_held_item() if(arm_item) @@ -178,3 +186,45 @@ items_list += new /obj/item/weapon/kitchen/knife/combat/cyborg(src) return 1 return 0 + +/obj/item/organ/cyberimp/arm/esword + name = "arm-mounted energy blade" + desc = "An illegal, and highly dangerous cybernetic implant that can project a deadly blade of concentrated enregy." + contents = newlist(/obj/item/weapon/melee/energy/blade) + +/obj/item/organ/cyberimp/arm/medibeam + name = "integrated medical beamgun" + desc = "A cybernetic implant that allows the user to project a healing beam from their hand." + contents = newlist(/obj/item/weapon/gun/medbeam) + +/obj/item/organ/cyberimp/arm/flash + name = "integrated high-intensity photon projector" //Why not + desc = "An integrated projector mounted onto a user's arm, that is able to be used as a powerful flash." + contents = newlist(/obj/item/device/assembly/flash/armimplant) + +/obj/item/organ/cyberimp/arm/flash/New() + ..() + if(locate(/obj/item/device/assembly/flash/armimplant) in items_list) + var/obj/item/device/assembly/flash/armimplant/F = locate(/obj/item/device/assembly/flash/armimplant) in items_list + F.I = src + +/obj/item/organ/cyberimp/arm/baton + name = "arm electrification implant" + desc = "An illegal combat implant that allows the user to administer disabling shocks from their arm." + contents = newlist(/obj/item/borg/stun) + +/obj/item/organ/cyberimp/arm/combat + name = "combat cybernetics implant" + desc = "A powerful cybernetic implant that contains combat modules built into the user's arm" + contents = newlist(/obj/item/weapon/melee/energy/blade, /obj/item/weapon/gun/medbeam, /obj/item/borg/stun, /obj/item/device/assembly/flash/armimplant) + +/obj/item/organ/cyberimp/arm/combat/New() + ..() + if(locate(/obj/item/device/assembly/flash/armimplant) in items_list) + var/obj/item/device/assembly/flash/armimplant/F = locate(/obj/item/device/assembly/flash/armimplant) in items_list + F.I = src + +/obj/item/organ/cyberimp/arm/surgery + name = "surgical toolset implant" + desc = "A set of surgical tools hidden behind a concealed panel on the user's arm" + contents = newlist(/obj/item/weapon/retractor, /obj/item/weapon/hemostat, /obj/item/weapon/cautery, /obj/item/weapon/surgicaldrill, /obj/item/weapon/scalpel, /obj/item/weapon/circular_saw, /obj/item/weapon/surgical_drapes) diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm index b977b039dff..5121e955a1b 100644 --- a/code/modules/surgery/organs/augments_chest.dm +++ b/code/modules/surgery/organs/augments_chest.dm @@ -197,3 +197,4 @@ toggle(silent=1) return 0 +