mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-24 00:21:52 +00:00
* fixes gibtonite bomb (#79038) ## About The Pull Request https://github.com/tgstation/tgstation/assets/70376633/8d15d7c9-51c2-4aeb-b1c6-4386168947da i made it work slightly better too so also this was in the code since like 2015 but it probably got broken sometime also 10 second detonation timer is pretty harmless anyway so ## Why It's Good For The Game bug bad fyi this was added in 2015 https://github.com/tgstation/tgstation/pull/8587 ## Changelog 🆑 fix: making assembly activated bombs works again /🆑 * fixes gibtonite bomb --------- Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com>
147 lines
4.3 KiB
Plaintext
147 lines
4.3 KiB
Plaintext
/datum/wires/explosive
|
|
var/duds_number = 2 // All "dud" wires cause an explosion when cut or pulsed
|
|
proper_name = "Explosive Device"
|
|
randomize = TRUE // Prevents wires from showing up on blueprints
|
|
|
|
/datum/wires/explosive/New(atom/holder)
|
|
add_duds(duds_number) // Duds also explode here.
|
|
..()
|
|
|
|
/datum/wires/explosive/on_pulse(index)
|
|
explode()
|
|
|
|
/datum/wires/explosive/on_cut(index, mend, source)
|
|
if (!isnull(source))
|
|
log_combat(source, holder, "cut the detonation wire for")
|
|
explode()
|
|
|
|
/datum/wires/explosive/proc/explode()
|
|
return
|
|
|
|
/datum/wires/explosive/chem_grenade
|
|
duds_number = 1
|
|
holder_type = /obj/item/grenade/chem_grenade
|
|
var/fingerprint
|
|
|
|
/datum/wires/explosive/chem_grenade/interactable(mob/user)
|
|
if(!..())
|
|
return FALSE
|
|
var/obj/item/grenade/chem_grenade/G = holder
|
|
if(G.stage == GRENADE_WIRED)
|
|
return TRUE
|
|
|
|
/datum/wires/explosive/chem_grenade/on_pulse(index)
|
|
var/obj/item/grenade/chem_grenade/grenade = holder
|
|
if(grenade.stage != GRENADE_READY)
|
|
return
|
|
. = ..()
|
|
|
|
/datum/wires/explosive/chem_grenade/on_cut(index, mend, source)
|
|
var/obj/item/grenade/chem_grenade/grenade = holder
|
|
if(grenade.stage != GRENADE_READY)
|
|
return
|
|
. = ..()
|
|
|
|
/datum/wires/explosive/chem_grenade/attach_assembly(color, obj/item/assembly/S)
|
|
if(istype(S,/obj/item/assembly/timer))
|
|
var/obj/item/grenade/chem_grenade/G = holder
|
|
var/obj/item/assembly/timer/T = S
|
|
G.det_time = T.saved_time*10
|
|
else if(istype(S,/obj/item/assembly/prox_sensor))
|
|
var/obj/item/assembly/prox_sensor/sensor = S
|
|
var/obj/item/grenade/chem_grenade/grenade = holder
|
|
grenade.landminemode = sensor
|
|
sensor.proximity_monitor.set_ignore_if_not_on_turf(FALSE)
|
|
else if(istype(S,/obj/item/assembly/health))
|
|
var/obj/item/assembly/health/sensor = S
|
|
if(!sensor.secured)
|
|
sensor.toggle_secure()
|
|
if(!sensor.scanning)
|
|
sensor.toggle_scan()
|
|
fingerprint = S.fingerprintslast
|
|
return ..()
|
|
|
|
/datum/wires/explosive/chem_grenade/explode()
|
|
var/obj/item/grenade/chem_grenade/grenade = holder
|
|
var/obj/item/assembly/pulser = get_attached(get_wire(1))
|
|
var/message = "\An [pulser] has pulsed [grenade] ([grenade.type]), which was installed by [fingerprint]"
|
|
if(istype(pulser, /obj/item/assembly/voice))
|
|
var/obj/item/assembly/voice/spoken_trigger = pulser
|
|
message += " with the following activation message: \"[spoken_trigger.recorded]\""
|
|
if(!grenade.dud_flags)
|
|
message_admins(message)
|
|
log_game(message)
|
|
var/mob/M = get_mob_by_ckey(fingerprint)
|
|
grenade.log_grenade(M) //Used in arm_grenade() too but this one conveys where the mob who triggered the bomb is
|
|
if(grenade.landminemode)
|
|
grenade.detonate() ///already armed
|
|
else
|
|
grenade.arm_grenade() //The one here conveys where the bomb was when it went boom
|
|
|
|
|
|
/datum/wires/explosive/chem_grenade/detach_assembly(color)
|
|
var/obj/item/assembly/S = get_attached(color)
|
|
if(S && istype(S))
|
|
assemblies -= color
|
|
S.connected = null
|
|
S.holder = null
|
|
S.forceMove(holder.drop_location())
|
|
var/obj/item/grenade/chem_grenade/G = holder
|
|
G.landminemode = null
|
|
return S
|
|
|
|
/datum/wires/explosive/c4 // Also includes X4
|
|
holder_type = /obj/item/grenade/c4
|
|
|
|
/datum/wires/explosive/c4/explode()
|
|
var/obj/item/grenade/c4/P = holder
|
|
P.detonate()
|
|
|
|
/datum/wires/explosive/pizza
|
|
holder_type = /obj/item/pizzabox
|
|
|
|
/datum/wires/explosive/pizza/New(atom/holder)
|
|
wires = list(
|
|
WIRE_DISARM
|
|
)
|
|
add_duds(3) // Duds also explode here.
|
|
..()
|
|
|
|
/datum/wires/explosive/pizza/interactable(mob/user)
|
|
if(!..())
|
|
return FALSE
|
|
var/obj/item/pizzabox/P = holder
|
|
if(P.open && P.bomb)
|
|
return TRUE
|
|
|
|
/datum/wires/explosive/pizza/get_status()
|
|
var/obj/item/pizzabox/P = holder
|
|
var/list/status = list()
|
|
status += "The red light is [P.bomb_active ? "on" : "off"]."
|
|
status += "The green light is [P.bomb_defused ? "on": "off"]."
|
|
return status
|
|
|
|
/datum/wires/explosive/pizza/on_pulse(wire)
|
|
var/obj/item/pizzabox/P = holder
|
|
switch(wire)
|
|
if(WIRE_DISARM) // Pulse to toggle
|
|
P.bomb_defused = !P.bomb_defused
|
|
else // Boom
|
|
explode()
|
|
|
|
/datum/wires/explosive/pizza/on_cut(wire, mend, source)
|
|
var/obj/item/pizzabox/P = holder
|
|
switch(wire)
|
|
if(WIRE_DISARM) // Disarm and untrap the box.
|
|
if(!mend)
|
|
P.bomb_defused = TRUE
|
|
else
|
|
if(!mend && !P.bomb_defused)
|
|
if (!isnull(source))
|
|
log_combat(source, holder, "cut the detonation wire for")
|
|
explode()
|
|
|
|
/datum/wires/explosive/pizza/explode()
|
|
var/obj/item/pizzabox/P = holder
|
|
P.bomb.detonate()
|