Stun baton nerf

Adds agonyforce var to stun batons, which causes halloss and eye blur.

Also did some clean up of stun batons, and fixed the stun baton's bcell
var being of type weapon/cell/high instead of weapon/cell.
This commit is contained in:
mwerezak
2014-07-31 13:39:06 -04:00
parent 5c04ac9891
commit 7130fd124b
3 changed files with 70 additions and 40 deletions

View File

@@ -24,11 +24,11 @@
/obj/item/proc/attack(mob/living/M as mob, mob/living/user as mob, def_zone) /obj/item/proc/attack(mob/living/M as mob, mob/living/user as mob, def_zone)
if (!istype(M)) // not sure if this is the right thing... if (!istype(M)) // not sure if this is the right thing...
return return 0
var/messagesource = M var/messagesource = M
if (can_operate(M)) //Checks if mob is lying down on table for surgery if (can_operate(M)) //Checks if mob is lying down on table for surgery
if (do_surgery(M,user,src)) if (do_surgery(M,user,src))
return return 0
if (istype(M,/mob/living/carbon/brain)) if (istype(M,/mob/living/carbon/brain))
messagesource = M:container messagesource = M:container
if (hitsound) if (hitsound)
@@ -140,7 +140,7 @@
if(istype(M, /mob/living/carbon/human)) if(istype(M, /mob/living/carbon/human))
return M:attacked_by(src, user, def_zone) return M:attacked_by(src, user, def_zone) //make sure to return whether we have hit or miss
else else
switch(damtype) switch(damtype)
if("brute") if("brute")

View File

@@ -12,10 +12,11 @@
w_class = 3 w_class = 3
origin_tech = "combat=2" origin_tech = "combat=2"
attack_verb = list("beaten") attack_verb = list("beaten")
var/stunforce = 7 var/stunforce = 0
var/status = 0 var/agonyforce = 60
var/obj/item/weapon/cell/high/bcell = null var/status = 0 //whether the thing is on or not
var/hitcost = 1000 var/obj/item/weapon/cell/bcell = null
var/hitcost = 1000 //oh god why do power cells carry so much charge? We probably need to make a distinction between "industrial" sized power cells for APCs and power cells for everything else.
/obj/item/weapon/melee/baton/suicide_act(mob/user) /obj/item/weapon/melee/baton/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is putting the live [name] in \his mouth! It looks like \he's trying to commit suicide.</span>") user.visible_message("<span class='suicide'>[user] is putting the live [name] in \his mouth! It looks like \he's trying to commit suicide.</span>")
@@ -26,10 +27,9 @@
update_icon() update_icon()
return return
/obj/item/weapon/melee/baton/loaded/New() //this one starts with a cell pre-installed. /obj/item/weapon/melee/baton/loaded/New() //this one starts with a cell pre-installed.
..() ..()
bcell = new(src) bcell = new/obj/item/weapon/cell/high(src)
update_icon() update_icon()
return return
@@ -103,49 +103,77 @@
if(!isliving(M)) if(!isliving(M))
return return
var/agony = agonyforce
var/mob/living/L = M var/mob/living/L = M
var/contact = 1
if(user.a_intent == "harm") if(user.a_intent == "harm")
..() contact = ..()
agony *= 0.5 //whacking someone causes a much poorer contact than prodding them.
else
//copied from human_defense.dm
if (ishuman(L))
user.lastattacked = L //are these used at all, if we have logs?
L.lastattacker = user
if(!status) var/target_zone = get_zone_with_miss_chance(user.zone_sel.selecting, L)
L.visible_message("<span class='warning'>[L] has been prodded with [src] by [user]. Luckily it was off.</span>") if(user == L) // Attacking yourself can't miss
return target_zone = user.zone_sel.selecting
if(!target_zone)
contact = 0
else
switch (target_zone)
if("head")
agony *= 1.25
//if("l_hand", "r_hand") //TODO
//if("l_foot", "r_foot") //TODO
var/stunroll = (rand(1,100)) //put this here to avoid duplicate messages and logs from ..() above
if (!contact)
if(ishuman(L) && status)
user.lastattacked = L
L.lastattacker = user
if(user == L) // Attacking yourself can't miss
stunroll = 100
if(stunroll < 40)
L.visible_message("\red <B>[user] misses [L] with \the [src]!") L.visible_message("\red <B>[user] misses [L] with \the [src]!")
msg_admin_attack("[key_name(user)] attempted to stun [key_name(L)] with the [src].") else
return if(!status)
L.Stun(stunforce) L.visible_message("<span class='warning'>[L] has been prodded with [src] by [user]. Luckily it was off.</span>")
L.Weaken(stunforce) else
L.apply_effect(STUTTER, stunforce) L.visible_message("<span class='danger'>[L] has been prodded with [src] by [user]!</span>")
msg_admin_attack("[key_name(user)] attempted to stun [key_name(L)] with the [src].")
//stun effects
if (contact)
if (stunforce)
L.Stun(stunforce)
L.Weaken(stunforce)
L.apply_effect(STUTTER, stunforce)
if (agony)
//Siemens coefficient?
//TODO: Merge this with taser effects
L.apply_effect(agony,AGONY,0)
L.apply_effect(STUTTER, agony/10)
L.apply_effect(EYE_BLUR, agony/10)
L.flash_pain()
L.visible_message("<span class='danger'>[L] has been stunned with [src] by [user]!</span>")
playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
msg_admin_attack("[key_name(user)] stunned [key_name(L)] with the [src].") msg_admin_attack("[key_name(user)] stunned [key_name(L)] with the [src].")
if(isrobot(loc)) deductcharge(hitcost)
var/mob/living/silicon/robot/R = loc
if(R && R.cell)
R.cell.use(hitcost)
else
deductcharge(hitcost)
/obj/item/weapon/melee/baton/emp_act(severity) /obj/item/weapon/melee/baton/emp_act(severity)
if(bcell) if(bcell)
deductcharge(1000 / severity) bcell.emp_act(severity) //let's not duplicate code everywhere if we don't have to please.
if(bcell.reliability != 100 && prob(50/severity))
bcell.reliability -= 10 / severity
..() ..()
//secborg stun baton module
/obj/item/weapon/melee/baton/robot/attack_self(mob/user)
//try to find our power cell
var/mob/living/silicon/robot/R = loc
if (istype(R))
bcell = R.cell
return ..()
/obj/item/weapon/melee/baton/robot/attackby(obj/item/weapon/W, mob/user)
return
//Makeshift stun baton. Replacement for stun gloves. //Makeshift stun baton. Replacement for stun gloves.
/obj/item/weapon/melee/baton/cattleprod /obj/item/weapon/melee/baton/cattleprod
name = "stunprod" name = "stunprod"
@@ -154,6 +182,8 @@
item_state = "prod" item_state = "prod"
force = 3 force = 3
throwforce = 5 throwforce = 5
stunforce = 5 stunforce = 0
agonyforce = 60 //same force as a stunbaton, but uses way more charge.
hitcost = 2500 hitcost = 2500
attack_verb = list("poked")
slot_flags = null slot_flags = null

View File

@@ -238,7 +238,7 @@
src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/borg/sight/hud/sec(src) src.modules += new /obj/item/borg/sight/hud/sec(src)
src.modules += new /obj/item/weapon/handcuffs/cyborg(src) src.modules += new /obj/item/weapon/handcuffs/cyborg(src)
src.modules += new /obj/item/weapon/melee/baton/loaded(src) src.modules += new /obj/item/weapon/melee/baton/robot(src)
src.modules += new /obj/item/weapon/gun/energy/taser/cyborg(src) src.modules += new /obj/item/weapon/gun/energy/taser/cyborg(src)
src.modules += new /obj/item/taperoll/police(src) src.modules += new /obj/item/taperoll/police(src)
src.emag = new /obj/item/weapon/gun/energy/laser/cyborg(src) src.emag = new /obj/item/weapon/gun/energy/laser/cyborg(src)