mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-24 21:48:39 +01:00
Security Flashbangs cannot be instantly detonated anymore. (#86704)
## About The Pull Request Removes the option of setting a sec flashbang to instant detonation. ## Why It's Good For The Game My reasoning from my previous PR hasn't really changed, so excuse me for the few copypasted bits. Flashbang grenades are one of the best tools in Security arsenal. they are available round-start, widely abundant, and part of the reason why they are so strong is how rare ear protection tends to be. But what tilts the scale from strong to just unfair, in my opinion, is the combination of instant detonation and being able to pierce ear protection entirely on adjacent tiles. This is a hardcoded stun by the way, You could literally have no eyes nor ears and it won't make a difference. I initially considered just reducing the radius at which penetration occurs, but i failed to consider how it would probably result in an unintended buff due to the ability to drag a primed flashbang. So instead, after discussing options with a few other people, including mantainers I think the sanest option is to remove the ability for instant detonation. You can still technically run at someone as a desperate attempt to disarm them, but they'll have a sliver of chance to react. Flashbangs should be used as grenades, not as instant unreactable hardstuns, this strategy requiring teamwork to pull off doesn't justify it being completely unfair and unreactable on the receiver. ## Changelog 🆑 balance: Security Flashbangs can no longer be primed for instant detonation. /🆑 --------- Co-authored-by: Xander3359 <66163761+Xander3359@users.noreply.github.com> Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
This commit is contained in:
co-authored by
Xander3359
Time-Green
parent
67e8143761
commit
baaa96c357
@@ -51,6 +51,8 @@
|
||||
var/shrapnel_radius
|
||||
///Did we add the component responsible for spawning shrapnel to this?
|
||||
var/shrapnel_initialized
|
||||
///Possible timers that can be assigned for detonation. Values are strings in SECONDS
|
||||
var/list/possible_fuse_time = list("Instant", "3", "4", "5")
|
||||
|
||||
/obj/item/grenade/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -210,7 +212,10 @@
|
||||
return FALSE
|
||||
if(change_det_time())
|
||||
tool.play_tool_sound(src)
|
||||
to_chat(user, span_notice("You modify the time delay. It's set for [DisplayTimeText(det_time)]."))
|
||||
if(det_time == 0)
|
||||
to_chat(user, span_notice("You modify the time delay. It's set to be instantaneous."))
|
||||
else
|
||||
to_chat(user, span_notice("You modify the time delay. It's set for [DisplayTimeText(det_time)]."))
|
||||
return TRUE
|
||||
|
||||
/obj/item/grenade/multitool_act(mob/living/user, obj/item/tool)
|
||||
@@ -220,7 +225,7 @@
|
||||
|
||||
. = TRUE
|
||||
|
||||
var/newtime = tgui_input_list(user, "Please enter a new detonation time", "Detonation Timer", list("Instant", 3, 4, 5))
|
||||
var/newtime = tgui_input_list(user, "Please enter a new detonation time", "Detonation Timer", possible_fuse_time)
|
||||
if (isnull(newtime))
|
||||
return
|
||||
if(!user.can_perform_action(src))
|
||||
@@ -228,25 +233,40 @@
|
||||
if(newtime == "Instant" && change_det_time(0))
|
||||
to_chat(user, span_notice("You modify the time delay. It's set to be instantaneous."))
|
||||
return
|
||||
newtime = round(newtime)
|
||||
newtime = round(text2num(newtime))
|
||||
if(change_det_time(newtime))
|
||||
to_chat(user, span_notice("You modify the time delay. It's set for [DisplayTimeText(det_time)]."))
|
||||
|
||||
/obj/item/grenade/proc/change_det_time(time) //Time uses real time.
|
||||
/**
|
||||
* Sets det_time to a number in SECONDS
|
||||
*
|
||||
* if time is passed as an argument, `det_time` will be `time SECONDS`
|
||||
*
|
||||
* Cycles the duration of the fuse of the grenade `det_time` based on the options provided in list/possible_fuse_time
|
||||
*/
|
||||
/obj/item/grenade/proc/change_det_time(time)
|
||||
. = TRUE
|
||||
//Multitool
|
||||
if(!isnull(time))
|
||||
det_time = round(clamp(time * 10, 0, 5 SECONDS))
|
||||
det_time = round(clamp(time SECONDS, 0, 5 SECONDS)) //This is fine for now but consider making this a variable if you want >5s fuse
|
||||
return
|
||||
|
||||
//Screwdriver
|
||||
if(det_time == 0)
|
||||
det_time = "Instant"
|
||||
else
|
||||
var/previous_time = det_time
|
||||
switch(det_time)
|
||||
if (0)
|
||||
det_time = 3 SECONDS
|
||||
if (3 SECONDS)
|
||||
det_time = 5 SECONDS
|
||||
if (5 SECONDS)
|
||||
det_time = 0
|
||||
if(det_time == previous_time)
|
||||
det_time = 5 SECONDS
|
||||
det_time = num2text(det_time * 0.1)
|
||||
|
||||
var/old_selection = possible_fuse_time.Find(det_time) //Position of det_time in the list
|
||||
if(old_selection >= possible_fuse_time.len)
|
||||
det_time = possible_fuse_time[1]
|
||||
else
|
||||
det_time = possible_fuse_time[old_selection+1]
|
||||
|
||||
if(det_time == "Instant")
|
||||
det_time = 0 //String to num conversion because I hate coders
|
||||
return
|
||||
det_time = text2num(det_time) SECONDS
|
||||
|
||||
/obj/item/grenade/attack_paw(mob/user, list/modifiers)
|
||||
return attack_hand(user, modifiers)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
inhand_icon_state = "flashbang"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
|
||||
possible_fuse_time = list("3", "4", "5")
|
||||
var/flashbang_range = 7 //how many tiles away the mob will be stunned.
|
||||
|
||||
/obj/item/grenade/flashbang/apply_grenade_fantasy_bonuses(quality)
|
||||
|
||||
Reference in New Issue
Block a user