Adds a second boom wire to payload bombs. (#73021)

## About The Pull Request

Adds a second detonation wire onto payload bombs, bringing the total
number of wires to 6.

## Why It's Good For The Game

As it stands, there are two wires capable of neutralizing the bomb in
most circumstances and one detonation wire. Unbolting a bomb from the
floor and spacing it is as effective a solution to a bomb as defusing it
until the explosion is imminent (You can tell by the lack of defusals
which are performed once the bomb can be moved). Even unbolting it with
10 seconds to spare gives the crew a great deal of control over where
the explosion occurs. This itself isn't an issue because shoving a bomb
out into space and hearing it explode off screen is pretty badass.
The issue is that with 2 wires capable of more or less defusing the bomb
and 1 which causes the explosion, you have a 2/3 chance to save the day
while blindly cutting wires. A second wire brings these odds to a
thrilling 50/50!
The proceed wire used to detonate the bomb when cut but will now disable
the examinable countdown timer, leaving only the beeping to indicate how
close the bomb is to exploding. This is reset once the defusal wire is
cut.

## Changelog

🆑
balance: There's a second detonation wire on payload bombs now.
balance: Cutting the proceed wire no longer detonates the bomb but
instead deactivates the countdown timer on examine. This is reset once
the bomb is defused
/🆑
This commit is contained in:
Capsandi
2023-02-07 09:28:43 +13:00
committed by GitHub
parent 3ba474dadb
commit dfacb7d1c2
3 changed files with 16 additions and 11 deletions
+2 -1
View File
@@ -13,7 +13,8 @@
#define WIRE_BACKUP2 "Auxiliary Power 2"
#define WIRE_BEACON "Beacon"
#define WIRE_BOLTS "Bolts"
#define WIRE_BOOM "Boom"
#define WIRE_BOOM "Boom Wire 1"
#define WIRE_BOOM2 "Boom Wire 2"
#define WIRE_CAMERA "Camera"
#define WIRE_CONTRABAND "Contraband"
#define WIRE_DELAY "Delay"
+7 -9
View File
@@ -5,7 +5,7 @@
/datum/wires/syndicatebomb/New(atom/holder)
wires = list(
WIRE_BOOM, WIRE_UNBOLT,
WIRE_BOOM, WIRE_BOOM2, WIRE_UNBOLT,
WIRE_ACTIVATE, WIRE_DELAY, WIRE_PROCEED
)
..()
@@ -20,7 +20,7 @@
/datum/wires/syndicatebomb/on_pulse(wire)
var/obj/machinery/syndicatebomb/B = holder
switch(wire)
if(WIRE_BOOM)
if(WIRE_BOOM,WIRE_BOOM2)
if(B.active)
holder.visible_message(span_danger("[icon2html(B, viewers(holder))] An alarm sounds! It's go-"))
B.explode_now = TRUE
@@ -72,7 +72,7 @@
/datum/wires/syndicatebomb/on_cut(wire, mend)
var/obj/machinery/syndicatebomb/B = holder
switch(wire)
if(WIRE_BOOM)
if(WIRE_BOOM,WIRE_BOOM2)
if(!mend && B.active)
holder.visible_message(span_danger("[icon2html(B, viewers(holder))] An alarm sounds! It's go-"))
B.explode_now = TRUE
@@ -90,12 +90,9 @@
if(WIRE_PROCEED)
if(!mend && B.active)
holder.visible_message(span_danger("[icon2html(B, viewers(holder))] An alarm sounds! It's go-"))
B.explode_now = TRUE
if(!istype(B.payload, /obj/machinery/syndicatebomb/training))
tell_admins(B)
if(isliving(usr))
add_memory_in_range(B, 7, /datum/memory/bomb_defuse_failure, protagonist = usr, antagonist = B)
holder.visible_message(span_danger("[icon2html(B, viewers(holder))] The digital display on the device deactivates."))
B.examinable_countdown = FALSE
if(WIRE_ACTIVATE)
if(!mend && B.active)
@@ -104,6 +101,7 @@
B.active = FALSE
B.delayedlittle = FALSE
B.delayedbig = FALSE
B.examinable_countdown = TRUE
B.update_appearance()
if(isliving(usr))
add_memory_in_range(B, 7, /datum/memory/bomb_defuse_success, protagonist = usr, antagonist = B, bomb_time_left = bomb_time_left)
+7 -1
View File
@@ -44,6 +44,8 @@
var/obj/item/bombcore/payload = /obj/item/bombcore/syndicate
/// The countdown that'll show up to ghosts regarding the bomb's timer.
var/obj/effect/countdown/syndicatebomb/countdown
/// Whether the countdown is visible on examine
var/examinable_countdown = TRUE
/obj/machinery/syndicatebomb/proc/try_detonate(ignore_active = FALSE)
. = (payload in src) && (active || ignore_active)
@@ -114,7 +116,10 @@
. = ..()
. += {"The patented external shell design is resistant to "probably all" forms of external explosive compression, protecting the electronically-trigged bomb core from accidental early detonation."}
. += "A small window reveals some information about the payload: [payload.desc]."
. += {"A digital display on it reads "[seconds_remaining()]"."}
if(examinable_countdown)
. += {"A digital display on it reads "[seconds_remaining()]"."}
else
. +={"The digital display on it is inactive."}
/obj/machinery/syndicatebomb/update_icon_state()
icon_state = "[initial(icon_state)][active ? "-active" : "-inactive"][open_panel ? "-wires" : ""]"
@@ -123,6 +128,7 @@
/obj/machinery/syndicatebomb/proc/seconds_remaining()
if(active)
. = max(0, round((detonation_timer - world.time) / 10))
else
. = timer_set