diff --git a/code/game/objects/items/balls.dm b/code/game/objects/items/balls.dm index 59b47bacbd..c24f58208b 100644 --- a/code/game/objects/items/balls.dm +++ b/code/game/objects/items/balls.dm @@ -20,7 +20,7 @@ throw_range = 14 w_class = WEIGHT_CLASS_SMALL -/obj/item/toy/tennis/pre_altattackby(atom/A, mob/living/user, params) //checks if it can do right click memes +/obj/item/toy/tennis/alt_pre_attack(atom/A, mob/living/user, params) //checks if it can do right click memes altafterattack(A, user, TRUE, params) return TRUE diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index 15a686bae6..3ca489542f 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -259,7 +259,7 @@ light_color = "#37FFF7" actions_types = list() -/obj/item/melee/transforming/energy/sword/cx/pre_altattackby(atom/A, mob/living/user, params) //checks if it can do right click memes +/obj/item/melee/transforming/energy/sword/cx/alt_pre_attack(atom/A, mob/living/user, params) //checks if it can do right click memes altafterattack(A, user, TRUE, params) return TRUE diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm index 45313dc9b0..52f082fa5c 100644 --- a/code/game/objects/items/stunbaton.dm +++ b/code/game/objects/items/stunbaton.dm @@ -15,13 +15,18 @@ attack_verb = list("beaten") armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) - var/stunforce = 70 + var/stamforce = 25 var/status = FALSE + var/knockdown = TRUE var/obj/item/stock_parts/cell/cell - var/hitcost = 1000 + var/hitcost = 750 var/throw_hit_chance = 35 var/preload_cell_type //if not empty the baton starts with this type of cell +/obj/item/melee/baton/examine(mob/user) + . = ..() + . += "Right click attack while in combat mode to disarm instead of stun." + /obj/item/melee/baton/get_cell() . = cell if(iscyborg(loc)) @@ -32,7 +37,7 @@ 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) -/obj/item/melee/baton/Initialize() +/obj/item/melee/baton/Initialize(mapload) . = ..() if(preload_cell_type) if(!ispath(preload_cell_type,/obj/item/stock_parts/cell)) @@ -48,7 +53,7 @@ baton_stun(hit_atom) /obj/item/melee/baton/loaded //this one starts with a cell pre-installed. - preload_cell_type = /obj/item/stock_parts/cell/high + preload_cell_type = /obj/item/stock_parts/cell/high/plus /obj/item/melee/baton/proc/deductcharge(chrgdeductamt, chargecheck = TRUE, explode = TRUE) var/obj/item/stock_parts/cell/copper_top = get_cell() @@ -134,44 +139,41 @@ add_fingerprint(user) /obj/item/melee/baton/attack(mob/M, mob/living/carbon/human/user) + var/interrupt = common_baton_melee(M, user, FALSE) + if(!interrupt) + ..() + +/obj/item/melee/baton/alt_pre_attack(atom/A, mob/living/user, params) + . = common_baton_melee(A, user, TRUE) //return true (attackchain interrupt) if this also returns true. no harm-disarming. + user.changeNext_move(CLICK_CD_MELEE) + +//return TRUE to interrupt attack chain. +/obj/item/melee/baton/proc/common_baton_melee(mob/M, mob/living/user, disarming = FALSE) + if(iscyborg(M) || !isliving(M)) //can't baton cyborgs + return FALSE if(status && HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50)) clowning_around(user) - return - - if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)//CIT CHANGE - makes it impossible to baton in stamina softcrit - to_chat(user, "You're too exhausted for that.")//CIT CHANGE - ditto - return //CIT CHANGE - ditto - - if(iscyborg(M)) - ..() - return - - + if(user.getStaminaLoss() >= STAMINA_SOFTCRIT) //CIT CHANGE - makes it impossible to baton in stamina softcrit + to_chat(user, "You're too exhausted for that.") + return TRUE if(ishuman(M)) var/mob/living/carbon/human/L = M if(check_martial_counter(L, user)) - return + return TRUE + if(status) + if(baton_stun(M, user, disarming)) + user.do_attack_animation(M) + user.adjustStaminaLossBuffered(getweight()) //CIT CHANGE - makes stunbatonning others cost stamina + else if(user.a_intent != INTENT_HARM) //they'll try to bash in the last proc. + M.visible_message("[user] has prodded [M] with [src]. Luckily it was off.", \ + "[user] has prodded you with [src]. Luckily it was off") + return disarming || (user.a_intent != INTENT_HARM) - if(user.a_intent != INTENT_HARM) - if(status) - if(baton_stun(M, user)) - user.do_attack_animation(M) - user.adjustStaminaLossBuffered(getweight())//CIT CHANGE - makes stunbatonning others cost stamina - return - else - M.visible_message("[user] has prodded [M] with [src]. Luckily it was off.", \ - "[user] has prodded you with [src]. Luckily it was off") - else - if(status) - baton_stun(M, user) - ..() - - -/obj/item/melee/baton/proc/baton_stun(mob/living/L, mob/user) +/obj/item/melee/baton/proc/baton_stun(mob/living/L, mob/user, disarming = FALSE) if(L.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) //No message; check_shields() handles that playsound(L, 'sound/weapons/genhit.ogg', 50, 1) return FALSE - var/stunpwr = stunforce + var/stunpwr = stamforce var/obj/item/stock_parts/cell/our_cell = get_cell() if(!our_cell) switch_status(FALSE) @@ -187,17 +189,21 @@ return FALSE stunpwr *= round(stuncharge/hitcost, 0.1) - - L.Knockdown(stunpwr, override_stamdmg = 0) - L.apply_damage(stunpwr*0.5, STAMINA, user.zone_selected) - L.apply_effect(EFFECT_STUTTER, stunforce) + if(!disarming) + if(knockdown) + L.Knockdown(50, override_stamdmg = 0) //knockdown + L.adjustStaminaLoss(stunpwr) + else + L.drop_all_held_items() //no knockdown/stamina damage, instead disarm. + + L.apply_effect(EFFECT_STUTTER, stamforce) SEND_SIGNAL(L, COMSIG_LIVING_MINOR_SHOCK) if(user) L.lastattacker = user.real_name L.lastattackerckey = user.ckey - L.visible_message("[user] has stunned [L] with [src]!", \ - "[user] has stunned you with [src]!") - log_combat(user, L, "stunned") + L.visible_message("[user] has [disarming? "disarmed" : "stunned"] [L] with [src]!", \ + "[user] has [disarming? "disarmed" : "stunned"] you with [src]!") + log_combat(user, L, disarming? "disarmed" : "stunned") playsound(loc, 'sound/weapons/egloves.ogg', 50, 1, -1) @@ -212,7 +218,7 @@ user.visible_message("[user] accidentally hits [user.p_them()]self with [src]!", \ "You accidentally hit yourself with [src]!") SEND_SIGNAL(user, COMSIG_LIVING_MINOR_SHOCK) - user.Knockdown(stunforce*3) + user.Knockdown(stamforce*6) playsound(loc, 'sound/weapons/egloves.ogg', 50, 1, -1) deductcharge(hitcost) @@ -274,8 +280,9 @@ w_class = WEIGHT_CLASS_BULKY force = 3 throwforce = 5 - stunforce = 60 - hitcost = 2000 + stamforce = 25 + hitcost = 1000 + knockdown = FALSE throw_hit_chance = 10 slot_flags = ITEM_SLOT_BACK var/obj/item/assembly/igniter/sparkler diff --git a/code/game/objects/items/teleprod.dm b/code/game/objects/items/teleprod.dm index f427bf6c4c..bab4d6a488 100644 --- a/code/game/objects/items/teleprod.dm +++ b/code/game/objects/items/teleprod.dm @@ -16,7 +16,7 @@ user.visible_message("[user] accidentally hits [user.p_them()]self with [src]!", \ "You accidentally hit yourself with [src]!") SEND_SIGNAL(user, COMSIG_LIVING_MINOR_SHOCK) - user.Knockdown(stunforce*3) + user.Knockdown(stamforce * 6) playsound(loc, 'sound/weapons/egloves.ogg', 50, 1, -1) if(do_teleport(user, get_turf(user), 50, channel = TELEPORT_CHANNEL_BLUESPACE)) deductcharge(hitcost) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 359b3b4d10..a95eefe1ea 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -289,7 +289,7 @@ var/light_brightness = 3 actions_types = list() -/obj/item/toy/sword/cx/pre_altattackby(atom/A, mob/living/user, params) //checks if it can do right click memes +/obj/item/toy/sword/cx/alt_pre_attack(atom/A, mob/living/user, params) //checks if it can do right click memes altafterattack(A, user, TRUE, params) return TRUE diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm index fc9e138f4b..a551f642d0 100644 --- a/code/game/objects/items/twohanded.dm +++ b/code/game/objects/items/twohanded.dm @@ -510,7 +510,7 @@ /obj/item/twohanded/dualsaber/hypereutactic/chaplain/IsReflect() return FALSE -/obj/item/twohanded/dualsaber/hypereutactic/pre_altattackby(atom/A, mob/living/user, params) //checks if it can do right click memes +/obj/item/twohanded/dualsaber/hypereutactic/alt_pre_attack(atom/A, mob/living/user, params) //checks if it can do right click memes altafterattack(A, user, TRUE, params) return TRUE diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index a8f95e30da..359436dc2e 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -528,8 +528,8 @@ if(B.cell) if(B.cell.charge > 0 && B.status == 1) flick("baton_active", src) - var/stunforce = B.stunforce - user.Knockdown(stunforce) + var/stunforce = B.stamforce + user.Knockdown(stunforce * 2) 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]!", \ diff --git a/code/modules/reagents/reagent_containers/rags.dm b/code/modules/reagents/reagent_containers/rags.dm index e7f340887c..c6903ff7b4 100644 --- a/code/modules/reagents/reagent_containers/rags.dm +++ b/code/modules/reagents/reagent_containers/rags.dm @@ -53,7 +53,7 @@ SEND_SIGNAL(A, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM) return -/obj/item/reagent_containers/rag/pre_altattackby(mob/living/M, mob/living/user, params) +/obj/item/reagent_containers/rag/alt_pre_attack(mob/living/M, mob/living/user, params) if(istype(M) && user.a_intent == INTENT_HELP) user.changeNext_move(CLICK_CD_MELEE) if(M.on_fire) diff --git a/modular_citadel/code/_onclick/item_attack.dm b/modular_citadel/code/_onclick/item_attack.dm index 80281ee084..d87b2be661 100644 --- a/modular_citadel/code/_onclick/item_attack.dm +++ b/modular_citadel/code/_onclick/item_attack.dm @@ -1,12 +1,12 @@ /obj/item/proc/rightclick_melee_attack_chain(mob/user, atom/target, params) - if(!pre_altattackby(target, user, params)) //Hey, does this item have special behavior that should override all normal right-click functionality? + if(!alt_pre_attack(target, user, params)) //Hey, does this item have special behavior that should override all normal right-click functionality? if(!target.altattackby(src, user, params)) //Does the target do anything special when we right-click on it? melee_attack_chain(user, target, params) //Ugh. Lame! I'm filing a legal complaint about the discrimination against the right mouse button! else altafterattack(target, user, TRUE, params) return -/obj/item/proc/pre_altattackby(atom/A, mob/living/user, params) +/obj/item/proc/alt_pre_attack(atom/A, mob/living/user, params) return FALSE //return something other than false if you wanna override attacking completely /atom/proc/altattackby(obj/item/W, mob/user, params)