From 9436ed69a83d444bed7ea81f4b3e0c99d5bbac05 Mon Sep 17 00:00:00 2001 From: cacogen <25089914+cacogen@users.noreply.github.com> Date: Sat, 8 Feb 2020 02:53:14 +1300 Subject: [PATCH] Makes abductor baton child of stun baton (#48766) * Makes abductor baton child of stun baton - Clarify var names and reorder vars in baton defines - Slightly simplify active baton wash code * forget about () --- _maps/shuttles/emergency_zeta.dmm | 2 +- code/controllers/subsystem/traumas.dm | 4 +- code/game/objects/items/stunbaton.dm | 139 +++++++++++------- code/game/objects/items/teleprod.dm | 8 +- code/game/objects/structures/watercloset.dm | 20 ++- .../abductor/equipment/abduction_gear.dm | 135 ++++++++++------- .../abductor/equipment/abduction_outfits.dm | 4 +- .../antagonists/abductor/machinery/console.dm | 2 +- code/modules/research/techweb/all_nodes.dm | 6 +- 9 files changed, 186 insertions(+), 134 deletions(-) diff --git a/_maps/shuttles/emergency_zeta.dmm b/_maps/shuttles/emergency_zeta.dmm index b07d3e0c16a..99c046d21f2 100644 --- a/_maps/shuttles/emergency_zeta.dmm +++ b/_maps/shuttles/emergency_zeta.dmm @@ -67,7 +67,7 @@ "n" = ( /obj/structure/table/abductor, /obj/machinery/recharger, -/obj/item/abductor/baton{ +/obj/item/melee/baton/abductor{ desc = "Even aliens can see the use of a good old fashioned beating stick." }, /turf/open/floor/plating/abductor, diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm index 969893e6714..d75b9d620a9 100644 --- a/code/controllers/subsystem/traumas.dm +++ b/code/controllers/subsystem/traumas.dm @@ -83,7 +83,7 @@ SUBSYSTEM_DEF(traumas) /obj/item/clothing/under/rank/security/head_of_security/grey, /obj/item/clothing/under/rank/security/head_of_security/alt, /obj/item/clothing/under/rank/rnd/research_director/alt, /obj/item/clothing/under/rank/rnd/research_director/turtleneck, /obj/item/clothing/under/rank/captain/parade, /obj/item/clothing/under/rank/security/head_of_security/parade, /obj/item/clothing/under/rank/security/head_of_security/parade/female, - /obj/item/clothing/head/helmet/abductor, /obj/item/clothing/suit/armor/abductor/vest, /obj/item/abductor/baton, + /obj/item/clothing/head/helmet/abductor, /obj/item/clothing/suit/armor/abductor/vest, /obj/item/melee/baton/abductor, /obj/item/storage/belt/military/abductor, /obj/item/gun/energy/alien, /obj/item/abductor/silencer, /obj/item/abductor/gizmo, /obj/item/clothing/under/rank/centcom/officer, /obj/item/clothing/suit/space/hardsuit/ert, /obj/item/clothing/suit/space/hardsuit/ert/sec, @@ -122,7 +122,7 @@ SUBSYSTEM_DEF(traumas) "aliens" = typecacheof(list(/obj/item/clothing/mask/facehugger, /obj/item/organ/body_egg/alien_embryo, /obj/structure/alien, /obj/item/toy/toy_xeno, /obj/item/clothing/suit/armor/abductor, /obj/item/abductor, /obj/item/gun/energy/alien, - /obj/item/abductor/baton, /obj/item/radio/headset/abductor, /obj/item/scalpel/alien, /obj/item/hemostat/alien, + /obj/item/melee/baton/abductor, /obj/item/radio/headset/abductor, /obj/item/scalpel/alien, /obj/item/hemostat/alien, /obj/item/retractor/alien, /obj/item/circular_saw/alien, /obj/item/surgicaldrill/alien, /obj/item/cautery/alien, /obj/item/clothing/head/helmet/abductor, /obj/structure/bed/abductor, /obj/structure/table_frame/abductor, /obj/structure/table/abductor, /obj/structure/table/optable/abductor, /obj/structure/closet/abductor, /obj/item/organ/heart/gland, diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm index 00ca681430b..fa395e32a98 100644 --- a/code/game/objects/items/stunbaton.dm +++ b/code/game/objects/items/stunbaton.dm @@ -1,34 +1,52 @@ /obj/item/melee/baton name = "stun baton" desc = "A stun baton for incapacitating people with." + icon_state = "stunbaton" item_state = "baton" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - slot_flags = ITEM_SLOT_BELT + force = 10 - throwforce = 7 - w_class = WEIGHT_CLASS_NORMAL attack_verb = list("beaten") + + w_class = WEIGHT_CLASS_NORMAL + slot_flags = ITEM_SLOT_BELT armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) - var/cooldown_check = 0 + throwforce = 7 + var/throw_stun_chance = 35 - var/cooldown = (2.5 SECONDS) - var/stunforce = (5 SECONDS) - var/turned_on = FALSE var/obj/item/stock_parts/cell/cell - var/hitcost = 1000 - var/throw_hit_chance = 35 var/preload_cell_type //if not empty the baton starts with this type of cell - var/convertable = TRUE //if it can converted with a conversion kit + var/cell_hit_cost = 1000 + var/can_remove_cell = TRUE + + var/turned_on = FALSE + var/activate_sound = "sparks" + + var/attack_cooldown_check = 0 SECONDS + var/attack_cooldown = 2.5 SECONDS + var/stun_sound = 'sound/weapons/egloves.ogg' + + var/confusion_amt = 10 + var/stamina_loss_amt = 60 + var/apply_stun_delay = 2 SECONDS + var/stun_time = 5 SECONDS + + var/convertible = TRUE //if it can be converted with a conversion kit /obj/item/melee/baton/get_cell() return cell /obj/item/melee/baton/suicide_act(mob/user) - user.visible_message("[user] is putting the live [name] in [user.p_their()] mouth! It looks like [user.p_theyre()] trying to commit suicide!") - return (FIRELOSS) + if(cell && cell.charge && turned_on) + user.visible_message("[user] is putting the live [name] in [user.p_their()] mouth! It looks like [user.p_theyre()] trying to commit suicide!") + . = (FIRELOSS) + attack(user,user) + else + user.visible_message("[user] is shoving the [name] down their throat! It looks like [user.p_theyre()] trying to commit suicide!") + . = (OXYLOSS) /obj/item/melee/baton/Initialize() . = ..() @@ -48,7 +66,7 @@ return ..() /obj/item/melee/baton/proc/convert(datum/source, obj/item/I, mob/user) - if(istype(I,/obj/item/conversion_kit) && convertable) + if(istype(I,/obj/item/conversion_kit) && convertible) var/turf/T = get_turf(src) var/obj/item/melee/classic_baton/B = new /obj/item/melee/classic_baton (T) B.alpha = 20 @@ -68,7 +86,7 @@ /obj/item/melee/baton/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) ..() //Only mob/living types have stun handling - if(turned_on && prob(throw_hit_chance) && iscarbon(hit_atom)) + if(turned_on && prob(throw_stun_chance) && iscarbon(hit_atom)) baton_effect(hit_atom) /obj/item/melee/baton/loaded //this one starts with a cell pre-installed. @@ -79,11 +97,11 @@ //Note this value returned is significant, as it will determine //if a stun is applied or not . = cell.use(chrgdeductamt) - if(turned_on && cell.charge < hitcost) + if(turned_on && cell.charge < cell_hit_cost) //we're below minimum, turn off turned_on = FALSE update_icon() - playsound(src, "sparks", 75, TRUE, -1) + playsound(src, activate_sound, 75, TRUE, -1) /obj/item/melee/baton/update_icon_state() @@ -107,7 +125,7 @@ if(cell) to_chat(user, "[src] already has a cell!") else - if(C.maxcharge < hitcost) + if(C.maxcharge < cell_hit_cost) to_chat(user, "[src] requires a higher capacity cell.") return if(!user.transferItemToLoc(W, src)) @@ -117,21 +135,27 @@ update_icon() else if(W.tool_behaviour == TOOL_SCREWDRIVER) - if(cell) - cell.update_icon() - cell.forceMove(get_turf(src)) - cell = null - to_chat(user, "You remove the cell from [src].") - turned_on = FALSE - update_icon() + tryremovecell(user) else return ..() +/obj/item/melee/baton/proc/tryremovecell(mob/user) + if(cell && can_remove_cell) + cell.update_icon() + cell.forceMove(get_turf(src)) + cell = null + to_chat(user, "You remove the cell from [src].") + turned_on = FALSE + update_icon() + /obj/item/melee/baton/attack_self(mob/user) - if(cell && cell.charge > hitcost) + toggle_on(user) + +/obj/item/melee/baton/proc/toggle_on(mob/user) + if(cell && cell.charge > cell_hit_cost) turned_on = !turned_on to_chat(user, "[src] is now [turned_on ? "on" : "off"].") - playsound(src, "sparks", 75, TRUE, -1) + playsound(src, activate_sound, 75, TRUE, -1) else turned_on = FALSE if(!cell) @@ -141,14 +165,18 @@ update_icon() add_fingerprint(user) -/obj/item/melee/baton/attack(mob/M, mob/living/carbon/human/user) +/obj/item/melee/baton/proc/clumsy_check(mob/living/carbon/human/user) if(turned_on && HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50)) + playsound(src, stun_sound, 75, TRUE, -1) user.visible_message("[user] accidentally hits [user.p_them()]self with [src]!", \ "You accidentally hit yourself with [src]!") - user.Knockdown(stunforce*3) - deductcharge(hitcost) + user.Knockdown(stun_time*3) + deductcharge(cell_hit_cost) return +/obj/item/melee/baton/attack(mob/M, mob/living/carbon/human/user) + clumsy_check(user) + if(iscyborg(M)) ..() return @@ -161,7 +189,7 @@ if(user.a_intent != INTENT_HARM) if(turned_on) - if(cooldown_check <= world.time) + if(attack_cooldown_check <= world.time) if(baton_effect(M, user)) user.do_attack_animation(M) return @@ -172,34 +200,30 @@ "[user] has prodded you with [src]. Luckily it was off") else if(turned_on) - if(cooldown_check <= world.time) + if(attack_cooldown_check <= world.time) baton_effect(M, user) ..() /obj/item/melee/baton/proc/baton_effect(mob/living/L, mob/user) - if(ishuman(L)) - var/mob/living/carbon/human/H = L - if(H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) //No message; check_shields() handles that - playsound(L, 'sound/weapons/genhit.ogg', 50, TRUE) - return FALSE + check_shields(L, user) if(iscyborg(loc)) var/mob/living/silicon/robot/R = loc - if(!R || !R.cell || !R.cell.use(hitcost)) + if(!R || !R.cell || !R.cell.use(cell_hit_cost)) return FALSE else - if(!deductcharge(hitcost)) + if(!deductcharge(cell_hit_cost)) return FALSE /// After a target is hit, we do a chunk of stamina damage, along with other effects. /// After a period of time, we then check to see what stun duration we give. L.Jitter(20) - L.confused = max(10, L.confused) + L.confused = max(confusion_amt, L.confused) L.stuttering = max(8, L.stuttering) - L.adjustStaminaLoss(60) + L.adjustStaminaLoss(stamina_loss_amt) SEND_SIGNAL(L, COMSIG_LIVING_MINOR_SHOCK) - addtimer(CALLBACK(src, .proc/apply_stun_effect_end, L), 2 SECONDS) + addtimer(CALLBACK(src, .proc/apply_stun_effect_end, L), apply_stun_delay) if(user) L.lastattacker = user.real_name @@ -208,13 +232,13 @@ "[user] has stunned you with [src]!") log_combat(user, L, "stunned") - playsound(src, 'sound/weapons/egloves.ogg', 50, TRUE, -1) + playsound(src, stun_sound, 50, TRUE, -1) if(ishuman(L)) var/mob/living/carbon/human/H = L H.forcesay(GLOB.hit_appends) - cooldown_check = world.time + cooldown + attack_cooldown_check = world.time + attack_cooldown return 1 @@ -222,17 +246,24 @@ /obj/item/melee/baton/proc/apply_stun_effect_end(mob/living/target) var/trait_check = HAS_TRAIT(target, TRAIT_STUNRESISTANCE) //var since we check it in out to_chat as well as determine stun duration if(trait_check) - target.Knockdown(stunforce * 0.1) + target.Knockdown(stun_time * 0.1) else - target.Knockdown(stunforce) + target.Knockdown(stun_time) if(!target.IsKnockdown()) - to_chat(target, "You muscles seize, making you collapse[trait_check ? ", but your body quickly recovers..." : "!"]") + to_chat(target, "Your muscles seize, making you collapse[trait_check ? ", but your body quickly recovers..." : "!"]") /obj/item/melee/baton/emp_act(severity) . = ..() if (!(. & EMP_PROTECT_SELF)) deductcharge(1000 / severity) +/obj/item/melee/baton/proc/check_shields(mob/living/L, mob/user) + if(ishuman(L)) + var/mob/living/carbon/human/H = L + if(H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) //No message; check_shields() handles that + playsound(L, 'sound/weapons/genhit.ogg', 50, TRUE) + return FALSE + //Makeshift stun baton. Replacement for stun gloves. /obj/item/melee/baton/cattleprod name = "stunprod" @@ -244,11 +275,11 @@ w_class = WEIGHT_CLASS_BULKY force = 3 throwforce = 5 - stunforce = (5 SECONDS) - hitcost = 2000 - throw_hit_chance = 10 + stun_time = 5 SECONDS + cell_hit_cost = 2000 + throw_stun_chance = 10 slot_flags = ITEM_SLOT_BACK - convertable = FALSE + convertible = FALSE var/obj/item/assembly/igniter/sparkler = 0 /obj/item/melee/baton/cattleprod/Initialize() @@ -273,9 +304,9 @@ force = 5 throwforce = 5 throw_range = 5 - hitcost = 2000 - throw_hit_chance = 99 //Have you prayed today? - convertable = FALSE + cell_hit_cost = 2000 + throw_stun_chance = 99 //Have you prayed today? + convertible = FALSE custom_materials = list(/datum/material/iron = 10000, /datum/material/glass = 4000, /datum/material/silver = 10000, /datum/material/gold = 2000) /obj/item/melee/baton/boomerang/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, force, gentle = FALSE) @@ -288,7 +319,7 @@ /obj/item/melee/baton/boomerang/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) if(turned_on) var/caught = hit_atom.hitby(src, FALSE, FALSE, throwingdatum=throwingdatum) - if(ishuman(hit_atom) && !caught && prob(throw_hit_chance))//if they are a carbon and they didn't catch it + if(ishuman(hit_atom) && !caught && prob(throw_stun_chance))//if they are a carbon and they didn't catch it baton_effect(hit_atom) if(thrownby && !caught) sleep(1) diff --git a/code/game/objects/items/teleprod.dm b/code/game/objects/items/teleprod.dm index e1edbf36983..45ec9dc6df4 100644 --- a/code/game/objects/items/teleprod.dm +++ b/code/game/objects/items/teleprod.dm @@ -13,12 +13,12 @@ "You accidentally hit yourself with [src]!") if(do_teleport(user, get_turf(user), 50, channel = TELEPORT_CHANNEL_BLUESPACE))//honk honk SEND_SIGNAL(user, COMSIG_LIVING_MINOR_SHOCK) - user.Paralyze(stunforce*3) - deductcharge(hitcost) + user.Paralyze(stun_time*3) + deductcharge(cell_hit_cost) else SEND_SIGNAL(user, COMSIG_LIVING_MINOR_SHOCK) - user.Paralyze(stunforce*3) - deductcharge(hitcost/4) + user.Paralyze(stun_time*3) + deductcharge(cell_hit_cost/4) return else if(turned_on) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 7a3848c000d..2036ee603e7 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -309,17 +309,15 @@ if(istype(O, /obj/item/melee/baton)) var/obj/item/melee/baton/B = O - if(B.cell) - if(B.cell.charge > 0 && B.turned_on) - flick("baton_active", src) - var/stunforce = B.stunforce - user.Paralyze(stunforce) - user.stuttering = stunforce/20 - B.deductcharge(B.hitcost) - user.visible_message("[user] shocks [user.p_them()]self while attempting to wash the active [B.name]!", \ - "You unwisely attempt to wash [B] while it's still on.") - playsound(src, "sparks", 50, TRUE) - return + if(B.cell && B.cell.charge && B.turned_on) + flick("baton_active", src) + user.Paralyze(B.stun_time) + user.stuttering = B.stun_time/20 + B.deductcharge(B.cell_hit_cost) + user.visible_message("[user] shocks [user.p_them()]self while attempting to wash the active [B.name]!", \ + "You unwisely attempt to wash [B] while it's still on.") + playsound(src, B.stun_sound, 50, TRUE) + return if(istype(O, /obj/item/mop)) O.reagents.add_reagent(dispensedreagent, 5) diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm index 0d1c50ed83c..6018b497931 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm @@ -17,7 +17,7 @@ actions_types = list(/datum/action/item_action/hands_free/activate) allowed = list( /obj/item/abductor, - /obj/item/abductor/baton, + /obj/item/melee/baton/abductor, /obj/item/melee/baton, /obj/item/gun/energy, /obj/item/restraints/handcuffs @@ -142,12 +142,12 @@ lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi' righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi' -/obj/item/abductor/proc/AbductorCheck(mob/user) +/obj/item/proc/AbductorCheck(mob/user) if (HAS_TRAIT(user, TRAIT_ABDUCTOR_TRAINING)) return TRUE if (istype(user) && user.mind && HAS_TRAIT(user.mind, TRAIT_ABDUCTOR_TRAINING)) return TRUE - to_chat(user, "You can't figure how this works!") + to_chat(user, "You can't figure out how this works!") return FALSE /obj/item/abductor/proc/ScientistCheck(mob/user) @@ -436,22 +436,46 @@ Congratulations! You are now trained for invasive xenobiology research!"} #define BATON_PROBE 3 #define BATON_MODES 4 -/obj/item/abductor/baton +/obj/item/melee/baton/abductor name = "advanced baton" desc = "A quad-mode baton used for incapacitation and restraining of specimens." - var/mode = BATON_STUN + + icon = 'icons/obj/abductor.dmi' + lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi' + righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi' icon_state = "wonderprodStun" item_state = "wonderprod" - slot_flags = ITEM_SLOT_BELT - force = 7 - w_class = WEIGHT_CLASS_NORMAL - actions_types = list(/datum/action/item_action/toggle_mode) -/obj/item/absductor/baton/ComponentInitialize() + force = 7 + + w_class = WEIGHT_CLASS_NORMAL + slot_flags = ITEM_SLOT_BELT + + actions_types = list(/datum/action/item_action/toggle_mode) + convertible = FALSE + + attack_cooldown = 0 SECONDS + confusion_amt = 0 + stamina_loss_amt = 0 + apply_stun_delay = 0 SECONDS + stun_time = 14 SECONDS + + preload_cell_type = /obj/item/stock_parts/cell/infinite //Any sufficiently advanced technology is indistinguishable from magic + activate_sound = null + can_remove_cell = FALSE + + var/mode = BATON_STUN + + var/sleep_time = 2 MINUTES + var/time_to_cuff = 3 SECONDS + +/obj/item/melee/baton/abductor/ComponentInitialize() . = ..() AddElement(/datum/element/update_icon_updates_onmob) -/obj/item/abductor/baton/proc/toggle(mob/living/user=usr) +/obj/item/melee/baton/abductor/proc/toggle(mob/living/user=usr) + if(!AbductorCheck(user)) + return mode = (mode+1)%BATON_MODES var/txt switch(mode) @@ -464,10 +488,12 @@ Congratulations! You are now trained for invasive xenobiology research!"} if(BATON_PROBE) txt = "probing" + if(!turned_on) + toggle_on(user) to_chat(usr, "You switch the baton to [txt] mode.") update_icon() -/obj/item/abductor/baton/update_icon_state() +/obj/item/melee/baton/abductor/update_icon_state() switch(mode) if(BATON_STUN) icon_state = "wonderprodStun" @@ -482,12 +508,20 @@ Congratulations! You are now trained for invasive xenobiology research!"} icon_state = "wonderprodProbe" item_state = "wonderprodProbe" -/obj/item/abductor/baton/attack(mob/target, mob/living/user) +/obj/item/melee/baton/abductor/attack(mob/target, mob/living/user) if(!AbductorCheck(user)) return + if(!deductcharge(cell_hit_cost)) + to_chat(user, "[src] [cell ? "is out of charge" : "does not have a power source installed"].") + return FALSE + + if(!turned_on) + toggle_on(user) + if(iscyborg(target)) - ..() + if(BATON_STUN) + ..() return if(!isliving(target)) @@ -497,45 +531,34 @@ Congratulations! You are now trained for invasive xenobiology research!"} user.do_attack_animation(L) - if(ishuman(L)) - var/mob/living/carbon/human/H = L - if(H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) - playsound(H, 'sound/weapons/genhit.ogg', 50, TRUE) - return FALSE + check_shields(L, user) switch (mode) if(BATON_STUN) - StunAttack(L,user) + ..() if(BATON_SLEEP) SleepAttack(L,user) if(BATON_CUFF) CuffAttack(L,user) if(BATON_PROBE) ProbeAttack(L,user) + return -/obj/item/abductor/baton/attack_self(mob/living/user) +/obj/item/melee/baton/abductor/apply_stun_effect_end(mob/living/target) + StunAttack(target) + +/obj/item/melee/baton/abductor/proc/StunAttack(mob/living/L) + L.Paralyze(stun_time) + +/obj/item/melee/baton/abductor/attack_self(mob/living/user) toggle(user) -/obj/item/abductor/baton/proc/StunAttack(mob/living/L,mob/living/user) +/obj/item/melee/baton/abductor/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + turned_on = FALSE + ..() - L.lastattacker = user.real_name - L.lastattackerckey = user.ckey - - L.Paralyze(140) - L.apply_effect(EFFECT_STUTTER, 7) - SEND_SIGNAL(L, COMSIG_LIVING_MINOR_SHOCK) - - L.visible_message("[user] has stunned [L] with [src]!", \ - "[user] has stunned you with [src]!") - playsound(src, 'sound/weapons/egloves.ogg', 50, TRUE, -1) - - if(ishuman(L)) - var/mob/living/carbon/human/H = L - H.forcesay(GLOB.hit_appends) - - log_combat(user, L, "stunned") - -/obj/item/abductor/baton/proc/SleepAttack(mob/living/L,mob/living/user) +/obj/item/melee/baton/abductor/proc/SleepAttack(mob/living/L,mob/living/user) + playsound(src, stun_sound, 50, TRUE, -1) if(L.incapacitated(TRUE, TRUE)) if(L.anti_magic_check(FALSE, FALSE, TRUE)) to_chat(user, "The specimen's tinfoil protection is interfering with the sleep inducement!") @@ -545,8 +568,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} return L.visible_message("[user] has induced sleep in [L] with [src]!", \ "You suddenly feel very drowsy!") - playsound(src, 'sound/weapons/egloves.ogg', 50, TRUE, -1) - L.Sleeping(1200) + L.Sleeping(sleep_time) log_combat(user, L, "put to sleep") else if(L.anti_magic_check(FALSE, FALSE, TRUE, 0)) @@ -559,7 +581,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} L.visible_message("[user] tried to induce sleep in [L] with [src]!", \ "You suddenly feel drowsy!") -/obj/item/abductor/baton/proc/CuffAttack(mob/living/L,mob/living/user) +/obj/item/melee/baton/abductor/proc/CuffAttack(mob/living/L,mob/living/user) if(!iscarbon(L)) return var/mob/living/carbon/C = L @@ -568,7 +590,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} playsound(src, 'sound/weapons/cablecuff.ogg', 30, TRUE, -2) C.visible_message("[user] begins restraining [C] with [src]!", \ "[user] begins shaping an energy field around your hands!") - if(do_mob(user, C, 30) && (C.get_num_arms(FALSE) >= 2 || C.get_arm_ignore())) + if(do_mob(user, C, time_to_cuff) && (C.get_num_arms(FALSE) >= 2 || C.get_arm_ignore())) if(!C.handcuffed) C.handcuffed = new /obj/item/restraints/handcuffs/energy/used(C) C.update_handcuffed() @@ -579,7 +601,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} else to_chat(user, "[C] doesn't have two hands...") -/obj/item/abductor/baton/proc/ProbeAttack(mob/living/L,mob/living/user) +/obj/item/melee/baton/abductor/proc/ProbeAttack(mob/living/L,mob/living/user) L.visible_message("[user] probes [L] with [src]!", \ "[user] probes you!") @@ -609,7 +631,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} icon_state = "cuff" // Needs sprite lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - breakouttime = 450 + breakouttime = 45 SECONDS trashtype = /obj/item/restraints/handcuffs/energy/used flags_1 = NONE @@ -624,17 +646,18 @@ Congratulations! You are now trained for invasive xenobiology research!"} S.start() . = ..() -/obj/item/abductor/baton/examine(mob/user) +/obj/item/melee/baton/abductor/examine(mob/user) . = ..() - switch(mode) - if(BATON_STUN) - . += "The baton is in stun mode." - if(BATON_SLEEP) - . += "The baton is in sleep inducement mode." - if(BATON_CUFF) - . += "The baton is in restraining mode." - if(BATON_PROBE) - . += "The baton is in probing mode." + if(AbductorCheck(user)) + switch(mode) + if(BATON_STUN) + . += "The baton is in stun mode." + if(BATON_SLEEP) + . += "The baton is in sleep inducement mode." + if(BATON_CUFF) + . += "The baton is in restraining mode." + if(BATON_PROBE) + . += "The baton is in probing mode." /obj/item/radio/headset/abductor name = "alien headset" diff --git a/code/modules/antagonists/abductor/equipment/abduction_outfits.dm b/code/modules/antagonists/abductor/equipment/abduction_outfits.dm index 42e9fa19a32..b3e4f89a7e0 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_outfits.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_outfits.dm @@ -34,7 +34,7 @@ name = "Abductor Agent" head = /obj/item/clothing/head/helmet/abductor suit = /obj/item/clothing/suit/armor/abductor/vest - suit_store = /obj/item/abductor/baton + suit_store = /obj/item/melee/baton/abductor belt = /obj/item/storage/belt/military/abductor/full backpack_contents = list( @@ -59,7 +59,7 @@ name = "Abductor Scientist (w/ agent gear)" head = /obj/item/clothing/head/helmet/abductor suit = /obj/item/clothing/suit/armor/abductor/vest - suit_store = /obj/item/abductor/baton + suit_store = /obj/item/melee/baton/abductor belt = /obj/item/storage/belt/military/abductor/full backpack_contents = list( diff --git a/code/modules/antagonists/abductor/machinery/console.dm b/code/modules/antagonists/abductor/machinery/console.dm index c6b4e6e26ad..e2f0534203f 100644 --- a/code/modules/antagonists/abductor/machinery/console.dm +++ b/code/modules/antagonists/abductor/machinery/console.dm @@ -104,7 +104,7 @@ else if(href_list["dispense"]) switch(href_list["dispense"]) if("baton") - Dispense(/obj/item/abductor/baton,cost=2) + Dispense(/obj/item/melee/baton/abductor,cost=2) if("helmet") Dispense(/obj/item/clothing/head/helmet/abductor) if("silencer") diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 06d0c3c54f0..cb60ff9463e 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -1020,7 +1020,7 @@ prereq_ids = list("biotech","engineering") boost_item_paths = list(/obj/item/gun/energy/alien, /obj/item/scalpel/alien, /obj/item/hemostat/alien, /obj/item/retractor/alien, /obj/item/circular_saw/alien, /obj/item/cautery/alien, /obj/item/surgicaldrill/alien, /obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor, - /obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor/baton, /obj/item/abductor, /obj/item/gun/energy/shrink_ray) + /obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/melee/baton/abductor, /obj/item/abductor, /obj/item/gun/energy/shrink_ray) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) export_price = 20000 hidden = TRUE @@ -1037,7 +1037,7 @@ design_ids = list("alien_scalpel", "alien_hemostat", "alien_retractor", "alien_saw", "alien_drill", "alien_cautery") boost_item_paths = list(/obj/item/gun/energy/alien, /obj/item/scalpel/alien, /obj/item/hemostat/alien, /obj/item/retractor/alien, /obj/item/circular_saw/alien, /obj/item/cautery/alien, /obj/item/surgicaldrill/alien, /obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor, - /obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor/baton, /obj/item/abductor, /obj/item/gun/energy/shrink_ray) + /obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/melee/baton/abductor, /obj/item/abductor, /obj/item/gun/energy/shrink_ray) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 20000 hidden = TRUE @@ -1049,7 +1049,7 @@ prereq_ids = list("alientech", "adv_engi") design_ids = list("alien_wrench", "alien_wirecutters", "alien_screwdriver", "alien_crowbar", "alien_welder", "alien_multitool") boost_item_paths = list(/obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor, - /obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor/baton, /obj/item/abductor, + /obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/melee/baton/abductor, /obj/item/abductor, /obj/item/gun/energy/shrink_ray) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 20000