mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-11 09:22:41 +00:00
* Shuttle SS keeps track of hostile environments Instead of changing SSshuttle.emergencyNoEscape manually, datums now register and clear themselves with the SS, and a hostile environment is if any datums are registered. Note that it's datums that can be registered, as rev and blob gamemodes register themselves. Overhauling this means that you can have multiple sources of no-recall, which although can't happen at present, may do so in the future whenever multi-antag rounds happen. 🆑 coiax tweak: The AI doomsday device timer is more accurate. fix: Fixes a bug where the doomsday device would take twice as long as it should. /🆑 AI doomsday timer uses world.time, uses fastprocess to make sure the announcements go out on time, added observer countdown for the AI doomsday device. * Fixes bugs
148 lines
3.5 KiB
Plaintext
148 lines
3.5 KiB
Plaintext
/obj/effect/countdown
|
|
name = "countdown"
|
|
desc = "We're leaving together\n\
|
|
But still it's farewell\n\
|
|
And maybe we'll come back\n\
|
|
To earth, who can tell?"
|
|
|
|
var/displayed_text
|
|
var/atom/attached_to
|
|
var/text_color = "#ff0000"
|
|
var/text_size = 4
|
|
var/started = FALSE
|
|
invisibility = INVISIBILITY_OBSERVER
|
|
anchored = TRUE
|
|
layer = GHOST_LAYER
|
|
|
|
/obj/effect/countdown/New(atom/A)
|
|
. = ..()
|
|
attach(A)
|
|
|
|
/obj/effect/countdown/proc/attach(atom/A)
|
|
attached_to = A
|
|
loc = get_turf(A)
|
|
|
|
/obj/effect/countdown/proc/start()
|
|
if(!started)
|
|
START_PROCESSING(SSfastprocess, src)
|
|
started = TRUE
|
|
|
|
/obj/effect/countdown/proc/stop()
|
|
if(started)
|
|
overlays.Cut()
|
|
STOP_PROCESSING(SSfastprocess, src)
|
|
started = FALSE
|
|
|
|
/obj/effect/countdown/proc/get_value()
|
|
// Get the value from our atom
|
|
return
|
|
|
|
/obj/effect/countdown/process()
|
|
if(!attached_to || qdeleted(attached_to))
|
|
qdel(src)
|
|
forceMove(get_turf(attached_to))
|
|
var/new_val = get_value()
|
|
if(new_val == displayed_text)
|
|
return
|
|
displayed_text = new_val
|
|
|
|
if(displayed_text)
|
|
var/image/text_image = new(loc = src)
|
|
//text_image.maptext = "<font size=[text_size]>[new_val]</font>"
|
|
text_image.maptext = "<font size = [text_size]>[displayed_text]</font>"
|
|
text_image.color = text_color
|
|
|
|
overlays.Cut()
|
|
overlays += text_image
|
|
else
|
|
overlays.Cut()
|
|
|
|
/obj/effect/countdown/Destroy()
|
|
attached_to = null
|
|
STOP_PROCESSING(SSfastprocess, src)
|
|
. = ..()
|
|
|
|
/obj/effect/countdown/syndicatebomb
|
|
name = "syndicate bomb countdown"
|
|
|
|
/obj/effect/countdown/syndicatebomb/get_value()
|
|
var/obj/machinery/syndicatebomb/S = attached_to
|
|
if(!istype(S))
|
|
return
|
|
else if(S.active)
|
|
return S.seconds_remaining()
|
|
|
|
/obj/effect/countdown/nuclearbomb
|
|
name = "nuclear bomb countdown"
|
|
text_color = "#81FF14"
|
|
|
|
/obj/effect/countdown/nuclearbomb/get_value()
|
|
var/obj/machinery/nuclearbomb/N = attached_to
|
|
if(!istype(N))
|
|
return
|
|
else if(N.timing)
|
|
return round(N.get_time_left(), 1)
|
|
|
|
/obj/effect/countdown/clonepod
|
|
name = "cloning pod countdown"
|
|
text_color = "#0C479D"
|
|
text_size = 1
|
|
|
|
/obj/effect/countdown/clonepod/get_value()
|
|
var/obj/machinery/clonepod/C = attached_to
|
|
if(!istype(C))
|
|
return
|
|
else if(C.occupant)
|
|
var/completion = round(C.get_completion())
|
|
return completion
|
|
|
|
/obj/effect/countdown/dominator
|
|
name = "dominator countdown"
|
|
text_size = 1
|
|
text_color = "#ff00ff" // Overwritten when the dominator starts
|
|
|
|
/obj/effect/countdown/dominator/get_value()
|
|
var/obj/machinery/dominator/D = attached_to
|
|
if(!istype(D))
|
|
return
|
|
else if(D.gang && D.gang.is_dominating)
|
|
var/timer = D.gang.domination_time_remaining()
|
|
return timer
|
|
else
|
|
return "OFFLINE"
|
|
|
|
/obj/effect/countdown/clockworkgate
|
|
name = "gateway countdown"
|
|
text_size = 1
|
|
text_color = "#BE8700"
|
|
layer = POINT_LAYER
|
|
|
|
/obj/effect/countdown/clockworkgate/get_value()
|
|
var/obj/structure/clockwork/massive/celestial_gateway/G = attached_to
|
|
if(!istype(G))
|
|
return
|
|
else if(G.health && !G.purpose_fulfilled)
|
|
return "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'>[GATEWAY_RATVAR_ARRIVAL - G.progress_in_seconds]</div>"
|
|
|
|
/obj/effect/countdown/transformer
|
|
name = "transformer countdown"
|
|
text_color = "#4C5866"
|
|
|
|
/obj/effect/countdown/transformer/get_value()
|
|
var/obj/machinery/transformer/T = attached_to
|
|
if(!istype(T))
|
|
return
|
|
else if(T.cooldown)
|
|
var/seconds_left = max(0, (T.cooldown_timer - world.time) / 10)
|
|
return "[round(seconds_left)]"
|
|
|
|
/obj/effect/countdown/doomsday
|
|
name = "doomsday countdown"
|
|
|
|
/obj/effect/countdown/doomsday/get_value()
|
|
var/obj/machinery/doomsday_device/DD = attached_to
|
|
if(!istype(DD))
|
|
return
|
|
else if(DD.timing)
|
|
. = DD.seconds_remaining()
|