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