mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
[MIRROR] Removes sleeping from the code in more places (#10611)
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
This commit is contained in:
committed by
GitHub
parent
174fb57a2c
commit
de641ab6f8
@@ -28,6 +28,8 @@ Pipelines + Other Objects -> Pipe network
|
|||||||
var/construction_type = null // Type path of the pipe item when this is deconstructed.
|
var/construction_type = null // Type path of the pipe item when this is deconstructed.
|
||||||
var/pipe_state // icon_state as a pipe item
|
var/pipe_state // icon_state as a pipe item
|
||||||
|
|
||||||
|
var/being_loaded = FALSE //If the atmos machinery is currently being loaded via a map_template
|
||||||
|
|
||||||
var/initialize_directions = 0
|
var/initialize_directions = 0
|
||||||
var/pipe_color
|
var/pipe_color
|
||||||
|
|
||||||
@@ -121,6 +123,8 @@ Pipelines + Other Objects -> Pipe network
|
|||||||
return node.pipe_color
|
return node.pipe_color
|
||||||
|
|
||||||
/obj/machinery/atmospherics/process()
|
/obj/machinery/atmospherics/process()
|
||||||
|
if(being_loaded) //If we're being maploaded, don't build the network just yet.
|
||||||
|
return
|
||||||
last_flow_rate = 0
|
last_flow_rate = 0
|
||||||
last_power_draw = 0
|
last_power_draw = 0
|
||||||
|
|
||||||
|
|||||||
@@ -66,7 +66,7 @@
|
|||||||
if(query_sound)
|
if(query_sound)
|
||||||
SEND_SOUND(C, sound(query_sound))
|
SEND_SOUND(C, sound(query_sound))
|
||||||
|
|
||||||
tgui_alert_async(D, question, "[role_name] request", list("Yes", "No", "Never for this round"), CALLBACK(src, PROC_REF(get_reply)), wait_time SECONDS)
|
tgui_alert_async(D, question, "[role_name] request", list("Yes", "No", "Never for this round"), CALLBACK(src, PROC_REF(get_reply)), wait_time)
|
||||||
|
|
||||||
/// Process an async alert response
|
/// Process an async alert response
|
||||||
/datum/ghost_query/proc/get_reply(response)
|
/datum/ghost_query/proc/get_reply(response)
|
||||||
|
|||||||
@@ -72,7 +72,7 @@
|
|||||||
INVOKE_ASYNC(src, PROC_REF(toggle_all), FALSE)
|
INVOKE_ASYNC(src, PROC_REF(toggle_all), FALSE)
|
||||||
. = TRUE
|
. = TRUE
|
||||||
if("scan")
|
if("scan")
|
||||||
scanscrubbers(ui.user)
|
scanscrubbers_user(ui.user)
|
||||||
. = TRUE
|
. = TRUE
|
||||||
|
|
||||||
add_fingerprint(ui.user)
|
add_fingerprint(ui.user)
|
||||||
@@ -92,7 +92,7 @@
|
|||||||
return FALSE
|
return FALSE
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
/obj/machinery/computer/area_atmos/proc/scanscrubbers(mob/user)
|
/obj/machinery/computer/area_atmos/proc/scanscrubbers()
|
||||||
connectedscrubbers = list()
|
connectedscrubbers = list()
|
||||||
|
|
||||||
var/found = 0
|
var/found = 0
|
||||||
@@ -103,6 +103,8 @@
|
|||||||
if(!found)
|
if(!found)
|
||||||
status = "ERROR: No scrubber found!"
|
status = "ERROR: No scrubber found!"
|
||||||
|
|
||||||
|
/obj/machinery/computer/area_atmos/proc/scanscrubbers_user(mob/user) //Used when the user is in the UI and scans for scrubbers.
|
||||||
|
scanscrubbers()
|
||||||
updateUsrDialog(user)
|
updateUsrDialog(user)
|
||||||
|
|
||||||
// The one that only works in the same map area
|
// The one that only works in the same map area
|
||||||
@@ -121,6 +123,8 @@
|
|||||||
if(!found)
|
if(!found)
|
||||||
status = "ERROR: No scrubber found!"
|
status = "ERROR: No scrubber found!"
|
||||||
|
|
||||||
|
/obj/machinery/computer/area_atmos/area/scanscrubbers_user(mob/user) //Used when the user is in the UI and scans for scrubbers.
|
||||||
|
scanscrubbers()
|
||||||
updateUsrDialog(user)
|
updateUsrDialog(user)
|
||||||
|
|
||||||
/obj/machinery/computer/area_atmos/area/validscrubber(var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber)
|
/obj/machinery/computer/area_atmos/area/validscrubber(var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber)
|
||||||
|
|||||||
@@ -26,12 +26,12 @@
|
|||||||
/obj/machinery/vr_sleeper/alien/process()
|
/obj/machinery/vr_sleeper/alien/process()
|
||||||
if(stat & (BROKEN))
|
if(stat & (BROKEN))
|
||||||
if(occupant)
|
if(occupant)
|
||||||
go_out()
|
perform_exit()
|
||||||
visible_message(span_infoplain(span_bold("\The [src]") + " emits a low droning sound, before the pod door clicks open."))
|
visible_message(span_infoplain(span_bold("\The [src]") + " emits a low droning sound, before the pod door clicks open."))
|
||||||
return
|
return
|
||||||
else if(eject_dead && occupant && occupant.stat == DEAD)
|
else if(eject_dead && occupant && occupant.stat == DEAD)
|
||||||
visible_message(span_warning("\The [src] sounds an alarm, swinging its hatch open."))
|
visible_message(span_warning("\The [src] sounds an alarm, swinging its hatch open."))
|
||||||
go_out()
|
perform_exit()
|
||||||
|
|
||||||
/obj/machinery/vr_sleeper/alien/attackby(var/obj/item/I, var/mob/user)
|
/obj/machinery/vr_sleeper/alien/attackby(var/obj/item/I, var/mob/user)
|
||||||
add_fingerprint(user)
|
add_fingerprint(user)
|
||||||
@@ -47,19 +47,17 @@
|
|||||||
if(usr.incapacitated())
|
if(usr.incapacitated())
|
||||||
return
|
return
|
||||||
|
|
||||||
var/forced = FALSE
|
|
||||||
|
|
||||||
if(stat & (BROKEN) || (eject_dead && occupant && occupant.stat == DEAD))
|
if(stat & (BROKEN) || (eject_dead && occupant && occupant.stat == DEAD))
|
||||||
forced = TRUE
|
perform_exit()
|
||||||
|
else
|
||||||
go_out(forced)
|
go_out()
|
||||||
add_fingerprint(usr)
|
add_fingerprint(usr)
|
||||||
|
|
||||||
/obj/machinery/vr_sleeper/alien/go_out(var/forced = TRUE)
|
/obj/machinery/vr_sleeper/alien/go_out()
|
||||||
if(!occupant)
|
if(!occupant)
|
||||||
return
|
return
|
||||||
|
|
||||||
if(!forced && avatar)
|
if(avatar)
|
||||||
if(tgui_alert(avatar, "Someone wants to remove you from virtual reality. Do you want to leave?", "Leave VR?", list("Yes", "No")) != "Yes")
|
if(tgui_alert(avatar, "Someone wants to remove you from virtual reality. Do you want to leave?", "Leave VR?", list("Yes", "No")) != "Yes")
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -103,7 +101,7 @@
|
|||||||
to_chat(occupant,span_alien("\The [src] begins to [pick("whir","hum","pulse")] as a screen appears in front of you."))
|
to_chat(occupant,span_alien("\The [src] begins to [pick("whir","hum","pulse")] as a screen appears in front of you."))
|
||||||
if(tgui_alert(occupant, "This pod is already linked. Are you certain you wish to engage?", "Commmit?", list("Yes", "No")) != "Yes")
|
if(tgui_alert(occupant, "This pod is already linked. Are you certain you wish to engage?", "Commmit?", list("Yes", "No")) != "Yes")
|
||||||
visible_message(span_alien("\The [src] pulses!"))
|
visible_message(span_alien("\The [src] pulses!"))
|
||||||
go_out(TRUE)
|
perform_exit()
|
||||||
return
|
return
|
||||||
|
|
||||||
to_chat(occupant,span_alien("Your mind blurs as information bombards you."))
|
to_chat(occupant,span_alien("Your mind blurs as information bombards you."))
|
||||||
|
|||||||
@@ -56,12 +56,12 @@
|
|||||||
/obj/machinery/vr_sleeper/process()
|
/obj/machinery/vr_sleeper/process()
|
||||||
if(stat & (NOPOWER|BROKEN))
|
if(stat & (NOPOWER|BROKEN))
|
||||||
if(occupant)
|
if(occupant)
|
||||||
go_out()
|
occupant.exit_vr(FALSE)
|
||||||
visible_message(span_infoplain(span_bold("\The [src]") + " emits a low droning sound, before the pod door clicks open."))
|
visible_message(span_infoplain(span_bold("\The [src]") + " emits a low droning sound, before the pod door clicks open."))
|
||||||
return
|
return
|
||||||
else if(eject_dead && occupant && occupant.stat == DEAD) // If someone dies somehow while inside, spit them out.
|
else if(eject_dead && occupant && occupant.stat == DEAD) // If someone dies somehow while inside, spit them out.
|
||||||
visible_message(span_warning("\The [src] sounds an alarm, swinging its hatch open."))
|
visible_message(span_warning("\The [src] sounds an alarm, swinging its hatch open."))
|
||||||
go_out()
|
occupant.exit_vr(FALSE)
|
||||||
|
|
||||||
/obj/machinery/vr_sleeper/update_icon()
|
/obj/machinery/vr_sleeper/update_icon()
|
||||||
icon_state = "[base_state][occupant ? "1" : "0"]"
|
icon_state = "[base_state][occupant ? "1" : "0"]"
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
if(occupant && avatar)
|
if(occupant && avatar)
|
||||||
avatar.exit_vr()
|
avatar.exit_vr()
|
||||||
avatar = null
|
avatar = null
|
||||||
go_out()
|
perform_exit()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
@@ -132,7 +132,7 @@
|
|||||||
visible_message(span_danger("\The [src]'s internal lighting flashes rapidly, before the hatch swings open with a cloud of smoke."))
|
visible_message(span_danger("\The [src]'s internal lighting flashes rapidly, before the hatch swings open with a cloud of smoke."))
|
||||||
smoke.set_up(severity, 0, src)
|
smoke.set_up(severity, 0, src)
|
||||||
smoke.start("#202020")
|
smoke.start("#202020")
|
||||||
go_out()
|
perform_exit()
|
||||||
|
|
||||||
..(severity)
|
..(severity)
|
||||||
|
|
||||||
@@ -144,12 +144,10 @@
|
|||||||
if(usr.incapacitated())
|
if(usr.incapacitated())
|
||||||
return
|
return
|
||||||
|
|
||||||
var/forced = FALSE
|
|
||||||
|
|
||||||
if(stat & (BROKEN|NOPOWER) || occupant && occupant.stat == DEAD)
|
if(stat & (BROKEN|NOPOWER) || occupant && occupant.stat == DEAD)
|
||||||
forced = TRUE
|
perform_exit()
|
||||||
|
else
|
||||||
go_out(forced)
|
go_out()
|
||||||
add_fingerprint(usr)
|
add_fingerprint(usr)
|
||||||
|
|
||||||
/obj/machinery/vr_sleeper/verb/climb_in()
|
/obj/machinery/vr_sleeper/verb/climb_in()
|
||||||
@@ -165,7 +163,7 @@
|
|||||||
/obj/machinery/vr_sleeper/relaymove(mob/user as mob)
|
/obj/machinery/vr_sleeper/relaymove(mob/user as mob)
|
||||||
if(user.incapacitated())
|
if(user.incapacitated())
|
||||||
return 0 //maybe they should be able to get out with cuffs, but whatever
|
return 0 //maybe they should be able to get out with cuffs, but whatever
|
||||||
go_out(TRUE)
|
perform_exit()
|
||||||
|
|
||||||
/obj/machinery/vr_sleeper/proc/go_in(var/mob/M, var/mob/user)
|
/obj/machinery/vr_sleeper/proc/go_in(var/mob/M, var/mob/user)
|
||||||
if(!M)
|
if(!M)
|
||||||
@@ -204,16 +202,26 @@
|
|||||||
to_chat(user, span_warning("\The [src] rejects [M] with a sharp beep."))
|
to_chat(user, span_warning("\The [src] rejects [M] with a sharp beep."))
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/machinery/vr_sleeper/proc/go_out(var/forced = TRUE)
|
/obj/machinery/vr_sleeper/proc/go_out()
|
||||||
if(!occupant)
|
if(!occupant)
|
||||||
return
|
return
|
||||||
|
|
||||||
if(!forced && avatar)
|
if(avatar)
|
||||||
if(tgui_alert(avatar, "Someone wants to remove you from virtual reality. Do you want to leave?", "Leave VR?", list("Yes", "No")) != "Yes")
|
if(tgui_alert(avatar, "Someone wants to remove you from virtual reality. Do you want to leave?", "Leave VR?", list("Yes", "No")) != "Yes")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
perform_exit()
|
||||||
|
|
||||||
|
//The actual bulk of the exit code.
|
||||||
|
/obj/machinery/vr_sleeper/proc/perform_exit()
|
||||||
|
if(!occupant)
|
||||||
|
return
|
||||||
|
|
||||||
avatar = null
|
avatar = null
|
||||||
|
|
||||||
|
if(occupant.vr_link)
|
||||||
|
occupant.vr_link.exit_vr(FALSE)
|
||||||
|
|
||||||
if(occupant.client)
|
if(occupant.client)
|
||||||
occupant.client.eye = occupant.client.mob
|
occupant.client.eye = occupant.client.mob
|
||||||
occupant.client.perspective = MOB_PERSPECTIVE
|
occupant.client.perspective = MOB_PERSPECTIVE
|
||||||
@@ -249,6 +257,8 @@
|
|||||||
// If they've already enterred VR, and are reconnecting, prompt if they want a new body
|
// If they've already enterred VR, and are reconnecting, prompt if they want a new body
|
||||||
if(avatar && tgui_alert(occupant, "You already have a [avatar.stat == DEAD ? "" : "deceased "]Virtual Reality avatar. Would you like to use it?", "New avatar", list("Yes", "No")) != "Yes")
|
if(avatar && tgui_alert(occupant, "You already have a [avatar.stat == DEAD ? "" : "deceased "]Virtual Reality avatar. Would you like to use it?", "New avatar", list("Yes", "No")) != "Yes")
|
||||||
// Delink the mob
|
// Delink the mob
|
||||||
|
if(!occupant) //We can walk out of this before we give a prompt...A TGUI state won't help here sadly.
|
||||||
|
return
|
||||||
occupant.vr_link = null
|
occupant.vr_link = null
|
||||||
avatar = null
|
avatar = null
|
||||||
|
|
||||||
@@ -266,7 +276,7 @@
|
|||||||
var/tf = null
|
var/tf = null
|
||||||
if(tgui_alert(occupant, "Would you like to play as a different creature?", "Join as a mob?", list("Yes", "No")) == "Yes")
|
if(tgui_alert(occupant, "Would you like to play as a different creature?", "Join as a mob?", list("Yes", "No")) == "Yes")
|
||||||
var/k = tgui_input_list(occupant, "Please select a creature:", "Mob list", vr_mob_tf_options)
|
var/k = tgui_input_list(occupant, "Please select a creature:", "Mob list", vr_mob_tf_options)
|
||||||
if(!k)
|
if(!k || !occupant) //Our occupant can walk out.
|
||||||
return 0
|
return 0
|
||||||
tf = vr_mob_tf_options[k]
|
tf = vr_mob_tf_options[k]
|
||||||
|
|
||||||
|
|||||||
@@ -55,4 +55,7 @@
|
|||||||
/obj/structure/ghost_pod/ghost_activated/Initialize(mapload)
|
/obj/structure/ghost_pod/ghost_activated/Initialize(mapload)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!mapload)
|
if(!mapload)
|
||||||
ghostpod_startup(spawn_active)
|
return INITIALIZE_HINT_LATELOAD
|
||||||
|
|
||||||
|
/obj/structure/ghost_pod/ghost_activated/LateInitialize()
|
||||||
|
ghostpod_startup(spawn_active)
|
||||||
|
|||||||
@@ -26,16 +26,27 @@
|
|||||||
var/species = SPECIES_HUMAN //defaults to generic-ass humans
|
var/species = SPECIES_HUMAN //defaults to generic-ass humans
|
||||||
var/random_species = FALSE //flip to TRUE to randomize species from the list below
|
var/random_species = FALSE //flip to TRUE to randomize species from the list below
|
||||||
var/list/random_species_list = list(SPECIES_HUMAN,SPECIES_TAJARAN,SPECIES_UNATHI,SPECIES_SKRELL) //preset list that can be overriden downstream. only includes common humanoids for voidsuit compatibility's sake.
|
var/list/random_species_list = list(SPECIES_HUMAN,SPECIES_TAJARAN,SPECIES_UNATHI,SPECIES_SKRELL) //preset list that can be overriden downstream. only includes common humanoids for voidsuit compatibility's sake.
|
||||||
|
var/mob/living/carbon/human/spawned_corpse = null //The corpse we have just spawned.
|
||||||
// var/random_appearance = FALSE //TODO: make this work
|
// var/random_appearance = FALSE //TODO: make this work
|
||||||
// var/cause_of_death = null //TODO: set up a cause-of-death system. needs to support both damage types and actual wound types, so a body can have been bitten/stabbed/clawed/shot/burned/lasered/etc. to death
|
// var/cause_of_death = null //TODO: set up a cause-of-death system. needs to support both damage types and actual wound types, so a body can have been bitten/stabbed/clawed/shot/burned/lasered/etc. to death
|
||||||
delete_me = TRUE
|
delete_me = FALSE //We don't do delete_me, we do our deletion in late_init
|
||||||
|
|
||||||
/obj/effect/landmark/corpse/Initialize(mapload)
|
/obj/effect/landmark/corpse/Initialize(mapload)
|
||||||
. = ..()
|
. = ..()
|
||||||
createCorpse()
|
return INITIALIZE_HINT_LATELOAD
|
||||||
|
|
||||||
|
/obj/effect/landmark/corpse/LateInitialize()
|
||||||
|
createCorpse() //This is done because
|
||||||
|
spawned_corpse.death(1)
|
||||||
|
qdel(src)
|
||||||
|
|
||||||
|
/obj/effect/landmark/corpse/Destroy(force)
|
||||||
|
spawned_corpse = null
|
||||||
|
. = ..()
|
||||||
|
|
||||||
/obj/effect/landmark/corpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it.
|
/obj/effect/landmark/corpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it.
|
||||||
var/mob/living/carbon/human/M = new /mob/living/carbon/human (src.loc)
|
var/mob/living/carbon/human/M = new /mob/living/carbon/human (src.loc)
|
||||||
|
spawned_corpse = M
|
||||||
M.low_sorting_priority = TRUE
|
M.low_sorting_priority = TRUE
|
||||||
if(random_species)
|
if(random_species)
|
||||||
var/random_pick = pick(random_species_list)
|
var/random_pick = pick(random_species_list)
|
||||||
@@ -45,7 +56,6 @@
|
|||||||
M.set_species(species)
|
M.set_species(species)
|
||||||
//TODO: insert appearance randomization, needs to be species-based
|
//TODO: insert appearance randomization, needs to be species-based
|
||||||
M.real_name = src.name
|
M.real_name = src.name
|
||||||
M.death(1) //Kills the new mob
|
|
||||||
//TODO: insert cause of death handling/wound simulation here
|
//TODO: insert cause of death handling/wound simulation here
|
||||||
if(src.corpseuniform)
|
if(src.corpseuniform)
|
||||||
M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform)
|
M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform)
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ var/list/blob_cores = list()
|
|||||||
var/point_rate = 2
|
var/point_rate = 2
|
||||||
var/ai_controlled = TRUE
|
var/ai_controlled = TRUE
|
||||||
var/datum/ghost_query/Q //This is used so we can unregister ourself.
|
var/datum/ghost_query/Q //This is used so we can unregister ourself.
|
||||||
|
var/client/controller = null //Whoever is set to be controlling the blob. Used when the blob is created.
|
||||||
|
|
||||||
// Spawn this if you want a ghost to be able to play as the blob.
|
// Spawn this if you want a ghost to be able to play as the blob.
|
||||||
/obj/structure/blob/core/player
|
/obj/structure/blob/core/player
|
||||||
@@ -101,11 +102,16 @@ var/list/blob_cores = list()
|
|||||||
blob_cores += src
|
blob_cores += src
|
||||||
START_PROCESSING(SSobj, src)
|
START_PROCESSING(SSobj, src)
|
||||||
update_icon() //so it atleast appears
|
update_icon() //so it atleast appears
|
||||||
|
point_rate = new_rate
|
||||||
|
controller = new_overmind
|
||||||
|
|
||||||
if(!placed && !overmind)
|
if(!placed && !overmind)
|
||||||
create_overmind(new_overmind)
|
return INITIALIZE_HINT_LATELOAD
|
||||||
|
|
||||||
|
/obj/structure/blob/core/LateInitialize()
|
||||||
|
create_overmind(controller)
|
||||||
if(overmind)
|
if(overmind)
|
||||||
update_icon()
|
update_icon()
|
||||||
point_rate = new_rate
|
|
||||||
|
|
||||||
/obj/structure/blob/core/Destroy()
|
/obj/structure/blob/core/Destroy()
|
||||||
var/turf/T = get_turf(src)
|
var/turf/T = get_turf(src)
|
||||||
@@ -148,7 +154,8 @@ var/list/blob_cores = list()
|
|||||||
if(prob(5))
|
if(prob(5))
|
||||||
B.change_to(/obj/structure/blob/shield/core, overmind)
|
B.change_to(/obj/structure/blob/shield/core, overmind)
|
||||||
|
|
||||||
overmind.blob_type.on_core_process(src)
|
if(overmind) //Doing this as we might be alive for a bit before a ghost possesses us.
|
||||||
|
overmind.blob_type.on_core_process(src)
|
||||||
|
|
||||||
/obj/structure/blob/core/proc/create_overmind(client/new_overmind, override_delay)
|
/obj/structure/blob/core/proc/create_overmind(client/new_overmind, override_delay)
|
||||||
if(overmind_get_delay > world.time && !override_delay)
|
if(overmind_get_delay > world.time && !override_delay)
|
||||||
@@ -179,6 +186,7 @@ var/list/blob_cores = list()
|
|||||||
else
|
else
|
||||||
C = new_overmind
|
C = new_overmind
|
||||||
overmind_creation(C)
|
overmind_creation(C)
|
||||||
|
controller = null //Controller has been set. Let's null it now.
|
||||||
|
|
||||||
/obj/structure/blob/core/proc/get_winner()
|
/obj/structure/blob/core/proc/get_winner()
|
||||||
if(Q && Q.candidates.len) //Q should NEVER get deleted but...whatever, sanity.
|
if(Q && Q.candidates.len) //Q should NEVER get deleted but...whatever, sanity.
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
var/prev_shuttle_queue_state = SSshuttles.block_init_queue
|
var/prev_shuttle_queue_state = SSshuttles.block_init_queue
|
||||||
SSshuttles.block_init_queue = TRUE
|
SSshuttles.block_init_queue = TRUE
|
||||||
var/machinery_was_awake = SSmachines.suspend() // Suspend machinery (if it was not already suspended)
|
//var/machinery_was_awake = SSmachines.suspend() // Suspend machinery (if it was not already suspended) //Old way to keep atmos machines from processing while being loaded. This killed ALL machines in the world...not good.
|
||||||
|
|
||||||
var/list/atom/atoms = list()
|
var/list/atom/atoms = list()
|
||||||
var/list/area/areas = list()
|
var/list/area/areas = list()
|
||||||
@@ -55,6 +55,8 @@
|
|||||||
else if(istype(A, /obj/machinery/atmospherics))
|
else if(istype(A, /obj/machinery/atmospherics))
|
||||||
atmos_machines += A
|
atmos_machines += A
|
||||||
atoms |= areas
|
atoms |= areas
|
||||||
|
for(var/obj/machinery/atmospherics/atmos_to_reenable as anything in atmos_machines)
|
||||||
|
atmos_to_reenable.being_loaded = TRUE
|
||||||
|
|
||||||
admin_notice(span_danger("Initializing newly created atom(s) in submap."), R_DEBUG)
|
admin_notice(span_danger("Initializing newly created atom(s) in submap."), R_DEBUG)
|
||||||
SSatoms.InitializeAtoms(areas + turfs + atoms)
|
SSatoms.InitializeAtoms(areas + turfs + atoms)
|
||||||
@@ -69,8 +71,13 @@
|
|||||||
for(var/area/A as anything in areas)
|
for(var/area/A as anything in areas)
|
||||||
A.power_change()
|
A.power_change()
|
||||||
|
|
||||||
|
for(var/obj/machinery/atmospherics/atmos_to_reenable as anything in atmos_machines)
|
||||||
|
atmos_to_reenable.being_loaded = FALSE
|
||||||
|
|
||||||
|
/*//Old way to keep atmos machines from processing while being loaded. This killed ALL machines in the world...not good.
|
||||||
if(machinery_was_awake)
|
if(machinery_was_awake)
|
||||||
SSmachines.wake() // Wake only if it was awake before we tried to suspended it.
|
SSmachines.wake() // Wake only if it was awake before we tried to suspended it.
|
||||||
|
*///Old way to keep atmos machines from processing while being loaded. This killed ALL machines in the world...not good.
|
||||||
SSshuttles.block_init_queue = prev_shuttle_queue_state
|
SSshuttles.block_init_queue = prev_shuttle_queue_state
|
||||||
SSshuttles.process_init_queues() // We will flush the queue unless there were other blockers, in which case they will do it.
|
SSshuttles.process_init_queues() // We will flush the queue unless there were other blockers, in which case they will do it.
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
low_sorting_priority = TRUE
|
low_sorting_priority = TRUE
|
||||||
|
|
||||||
var/generate_species = SPECIES_HUMAN
|
var/generate_species = SPECIES_HUMAN
|
||||||
var/generate_dead = FALSE
|
|
||||||
|
|
||||||
var/generate_gender = FALSE
|
var/generate_gender = FALSE
|
||||||
var/generate_id_gender = FALSE
|
var/generate_id_gender = FALSE
|
||||||
@@ -110,9 +109,6 @@
|
|||||||
W.registered_name = real_name
|
W.registered_name = real_name
|
||||||
equip_to_slot_or_del(W, slot_wear_id)
|
equip_to_slot_or_del(W, slot_wear_id)
|
||||||
|
|
||||||
if(generate_dead)
|
|
||||||
death()
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Subtypes.
|
* Subtypes.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -222,11 +222,7 @@
|
|||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/mob/living/simple_mob/slime/promethean/death(gibbed, deathmessage = "rapidly loses cohesion, splattering across the ground...")
|
/mob/living/simple_mob/slime/promethean/death(gibbed, deathmessage = "rapidly loses cohesion, splattering across the ground...")
|
||||||
if(humanform)
|
humanform.death(gibbed, deathmessage)
|
||||||
humanform.death(gibbed, deathmessage)
|
|
||||||
else
|
|
||||||
animate(src, alpha = 0, time = 2 SECONDS)
|
|
||||||
sleep(2 SECONDS)
|
|
||||||
|
|
||||||
if(!QDELETED(src)) // Human's handle death should have taken us, but maybe we were adminspawned or something without a human counterpart
|
if(!QDELETED(src)) // Human's handle death should have taken us, but maybe we were adminspawned or something without a human counterpart
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|||||||
@@ -322,11 +322,7 @@
|
|||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/mob/living/simple_mob/protean_blob/death(gibbed, deathmessage = "Coalesces inwards, retreating into their core componants")
|
/mob/living/simple_mob/protean_blob/death(gibbed, deathmessage = "Coalesces inwards, retreating into their core componants")
|
||||||
if(humanform)
|
humanform.death(gibbed, deathmessage)
|
||||||
humanform.death(gibbed, deathmessage)
|
|
||||||
else
|
|
||||||
animate(src, alpha = 0, time = 2 SECONDS)
|
|
||||||
sleep(2 SECONDS)
|
|
||||||
|
|
||||||
/mob/living/simple_mob/protean_blob/Life()
|
/mob/living/simple_mob/protean_blob/Life()
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|||||||
@@ -85,7 +85,7 @@
|
|||||||
to_chat(avatar, span_notice(" You black out for a moment, and wake to find yourself in a new body in virtual reality.")) // So this is what VR feels like?
|
to_chat(avatar, span_notice(" You black out for a moment, and wake to find yourself in a new body in virtual reality.")) // So this is what VR feels like?
|
||||||
|
|
||||||
// exit_vr is called on the vr mob, and puts the mind back into the original mob
|
// exit_vr is called on the vr mob, and puts the mind back into the original mob
|
||||||
/mob/living/carbon/human/proc/exit_vr()
|
/mob/living/carbon/human/proc/exit_vr(player_initated = TRUE)
|
||||||
set name = "Exit Virtual Reality"
|
set name = "Exit Virtual Reality"
|
||||||
set category = "Abilities.VR"
|
set category = "Abilities.VR"
|
||||||
|
|
||||||
@@ -120,9 +120,9 @@
|
|||||||
vr_holder.vr_link = src
|
vr_holder.vr_link = src
|
||||||
vr_holder.teleop = null
|
vr_holder.teleop = null
|
||||||
|
|
||||||
if(istype(vr_holder.loc, /obj/machinery/vr_sleeper))
|
if(player_initated && istype(vr_holder.loc, /obj/machinery/vr_sleeper))
|
||||||
var/obj/machinery/vr_sleeper/V = vr_holder.loc
|
var/obj/machinery/vr_sleeper/V = vr_holder.loc
|
||||||
V.go_out(TRUE)
|
V.perform_exit()
|
||||||
|
|
||||||
if(died_in_vr)
|
if(died_in_vr)
|
||||||
addtimer(CALLBACK(src, PROC_REF(cleanup_vr)), 3000, TIMER_DELETE_ME) //Delete the body after 5 minutes
|
addtimer(CALLBACK(src, PROC_REF(cleanup_vr)), 3000, TIMER_DELETE_ME) //Delete the body after 5 minutes
|
||||||
|
|||||||
@@ -208,6 +208,7 @@
|
|||||||
|
|
||||||
/mob/living/silicon/robot/LateInitialize()
|
/mob/living/silicon/robot/LateInitialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
|
pick_module()
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/mob/living/silicon/robot/rejuvenate()
|
/mob/living/silicon/robot/rejuvenate()
|
||||||
|
|||||||
@@ -82,7 +82,6 @@ var/global/list/robot_modules = list(
|
|||||||
R.radio.recalculateChannels()
|
R.radio.recalculateChannels()
|
||||||
|
|
||||||
R.set_default_module_icon()
|
R.set_default_module_icon()
|
||||||
R.pick_module()
|
|
||||||
if(!R.client)
|
if(!R.client)
|
||||||
R.icon_selected = FALSE // It wasnt a player selecting icon? Let them do it later!
|
R.icon_selected = FALSE // It wasnt a player selecting icon? Let them do it later!
|
||||||
|
|
||||||
|
|||||||
@@ -184,6 +184,8 @@
|
|||||||
//vars for vore_icons toggle control
|
//vars for vore_icons toggle control
|
||||||
var/vore_icons_cache = null // null by default. Going from ON to OFF should store vore_icons val here, OFF to ON reset as null
|
var/vore_icons_cache = null // null by default. Going from ON to OFF should store vore_icons val here, OFF to ON reset as null
|
||||||
|
|
||||||
|
var/obj/movement_target //Used by some mobs to hunt down food. Mainly noodle and Ian.
|
||||||
|
|
||||||
//no stripping of simplemobs
|
//no stripping of simplemobs
|
||||||
strip_pref = FALSE
|
strip_pref = FALSE
|
||||||
|
|
||||||
@@ -226,6 +228,7 @@
|
|||||||
|
|
||||||
friends.Cut()
|
friends.Cut()
|
||||||
languages.Cut()
|
languages.Cut()
|
||||||
|
movement_target = null
|
||||||
|
|
||||||
if(has_eye_glow)
|
if(has_eye_glow)
|
||||||
remove_eyes()
|
remove_eyes()
|
||||||
@@ -316,6 +319,24 @@
|
|||||||
icon_state = icon_living
|
icon_state = icon_living
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
|
/mob/living/simple_mob/proc/chase_target(ticker)
|
||||||
|
if(QDELETED(movement_target))
|
||||||
|
movement_target = null
|
||||||
|
return
|
||||||
|
|
||||||
|
if(ticker < 10 && (get_dist(src, movement_target) > 1)) //We only chase our target for 10 tiles or until we are next to them.
|
||||||
|
step_to(src,movement_target,1)
|
||||||
|
addtimer(CALLBACK(src, PROC_REF(chase_target), ++ticker), 3, TIMER_DELETE_ME)
|
||||||
|
return
|
||||||
|
|
||||||
|
face_atom(movement_target)
|
||||||
|
|
||||||
|
if(isturf(movement_target.loc))
|
||||||
|
UnarmedAttack(movement_target)
|
||||||
|
else if(ishuman(movement_target.loc) && prob(20))
|
||||||
|
visible_emote("stares at the [movement_target] that [movement_target.loc] has with an unknowable gaze.")
|
||||||
|
movement_target = null
|
||||||
|
|
||||||
|
|
||||||
/mob/living/simple_mob/say_quote(var/message, var/datum/language/speaking = null)
|
/mob/living/simple_mob/say_quote(var/message, var/datum/language/speaking = null)
|
||||||
if(speak_emote.len)
|
if(speak_emote.len)
|
||||||
@@ -337,18 +358,16 @@
|
|||||||
hud_list[LIFE_HUD] = gen_hud_image(buildmode_hud, src, "ais_1", plane = PLANE_BUILDMODE)
|
hud_list[LIFE_HUD] = gen_hud_image(buildmode_hud, src, "ais_1", plane = PLANE_BUILDMODE)
|
||||||
add_overlay(hud_list)
|
add_overlay(hud_list)
|
||||||
|
|
||||||
//VOREStation Add Start Makes it so that simplemobs can understand galcomm without being able to speak it.
|
//Makes it so that simplemobs can understand galcomm without being able to speak it.
|
||||||
/mob/living/simple_mob/say_understands(var/mob/other, var/datum/language/speaking = null)
|
/mob/living/simple_mob/say_understands(var/mob/other, var/datum/language/speaking = null)
|
||||||
if(understands_common && (speaking?.name == LANGUAGE_GALCOM || !speaking))
|
if(understands_common && (speaking?.name == LANGUAGE_GALCOM || !speaking))
|
||||||
return TRUE
|
return TRUE
|
||||||
return ..()
|
return ..()
|
||||||
//Vorestation Add End
|
|
||||||
|
|
||||||
/decl/mob_organ_names
|
/decl/mob_organ_names
|
||||||
var/list/hit_zones = list("body") //When in doubt, it's probably got a body.
|
var/list/hit_zones = list("body") //When in doubt, it's probably got a body.
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* VOREStation Add
|
|
||||||
* How injured are we? Returns a number that is then added to movement cooldown and firing/melee delay respectively.
|
* How injured are we? Returns a number that is then added to movement cooldown and firing/melee delay respectively.
|
||||||
* Called by movement_delay and our firing/melee delay checks
|
* Called by movement_delay and our firing/melee delay checks
|
||||||
*/
|
*/
|
||||||
@@ -365,8 +384,6 @@
|
|||||||
get_injury_level() // We check how injured we are, then actually update the mob on how hurt we are.
|
get_injury_level() // We check how injured we are, then actually update the mob on how hurt we are.
|
||||||
. = ..() // Calling parent here, actually updating our mob on how hurt we are.
|
. = ..() // Calling parent here, actually updating our mob on how hurt we are.
|
||||||
|
|
||||||
// VOREStation Add End
|
|
||||||
|
|
||||||
/mob/living/simple_mob/proc/ColorMate()
|
/mob/living/simple_mob/proc/ColorMate()
|
||||||
set name = "Recolour"
|
set name = "Recolour"
|
||||||
set category = "Abilities.Settings"
|
set category = "Abilities.Settings"
|
||||||
|
|||||||
@@ -64,11 +64,13 @@
|
|||||||
add_verb(src, /mob/living/proc/hide)
|
add_verb(src, /mob/living/proc/hide)
|
||||||
|
|
||||||
true_name = "[pick("Primary","Secondary","Tertiary","Quaternary")] [rand(1000,9999)]"
|
true_name = "[pick("Primary","Secondary","Tertiary","Quaternary")] [rand(1000,9999)]"
|
||||||
|
..()
|
||||||
|
|
||||||
if(!roundstart && antag)
|
if(!roundstart && antag)
|
||||||
request_player()
|
return INITIALIZE_HINT_LATELOAD
|
||||||
|
|
||||||
return ..()
|
/mob/living/simple_mob/animal/borer/LateInitialize()
|
||||||
|
request_player()
|
||||||
|
|
||||||
/mob/living/simple_mob/animal/borer/handle_special()
|
/mob/living/simple_mob/animal/borer/handle_special()
|
||||||
if(host && !stat && !host.stat)
|
if(host && !stat && !host.stat)
|
||||||
@@ -195,14 +197,13 @@
|
|||||||
qdel_null(Q) //get rid of the query
|
qdel_null(Q) //get rid of the query
|
||||||
|
|
||||||
/mob/living/simple_mob/animal/borer/proc/transfer_personality(mob/candidate)
|
/mob/living/simple_mob/animal/borer/proc/transfer_personality(mob/candidate)
|
||||||
if(!candidate || !candidate.mind)
|
if(!candidate)
|
||||||
return
|
return
|
||||||
|
|
||||||
src.mind = candidate.mind
|
|
||||||
candidate.mind.current = src
|
|
||||||
ckey = candidate.ckey
|
ckey = candidate.ckey
|
||||||
|
|
||||||
if(mind)
|
if(candidate.mind)
|
||||||
|
src.mind = candidate.mind
|
||||||
|
candidate.mind.current = src
|
||||||
mind.assigned_role = JOB_CORTICAL_BORER
|
mind.assigned_role = JOB_CORTICAL_BORER
|
||||||
mind.special_role = JOB_CORTICAL_BORER
|
mind.special_role = JOB_CORTICAL_BORER
|
||||||
|
|
||||||
|
|||||||
@@ -128,7 +128,6 @@
|
|||||||
gender = MALE
|
gender = MALE
|
||||||
desc = "It's a corgi."
|
desc = "It's a corgi."
|
||||||
var/turns_since_scan = 0
|
var/turns_since_scan = 0
|
||||||
var/obj/movement_target
|
|
||||||
makes_dirt = FALSE //VOREStation edit: no more dirt
|
makes_dirt = FALSE //VOREStation edit: no more dirt
|
||||||
holder_type = /obj/item/holder/corgi
|
holder_type = /obj/item/holder/corgi
|
||||||
|
|
||||||
@@ -144,35 +143,14 @@
|
|||||||
turns_since_scan = 0
|
turns_since_scan = 0
|
||||||
if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) ))
|
if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) ))
|
||||||
movement_target = null
|
movement_target = null
|
||||||
if( !movement_target || !(movement_target.loc in oview(src, 3)) )
|
if(!movement_target || !(movement_target.loc in oview(src, 7)) )
|
||||||
movement_target = null
|
movement_target = null
|
||||||
for(var/obj/item/reagent_containers/food/snacks/S in oview(src,3))
|
for(var/obj/item/reagent_containers/food/snacks/S in oview(src,7))
|
||||||
if(isturf(S.loc) || ishuman(S.loc))
|
if(isturf(S.loc) || ishuman(S.loc))
|
||||||
movement_target = S
|
movement_target = S
|
||||||
break
|
break
|
||||||
if(movement_target)
|
if(movement_target)
|
||||||
step_to(src,movement_target,1)
|
chase_target()
|
||||||
sleep(3)
|
|
||||||
step_to(src,movement_target,1)
|
|
||||||
sleep(3)
|
|
||||||
step_to(src,movement_target,1)
|
|
||||||
|
|
||||||
if(movement_target) //Not redundant due to sleeps, Item can be gone in 6 decisecomds
|
|
||||||
if (movement_target.loc.x < src.x)
|
|
||||||
set_dir(WEST)
|
|
||||||
else if (movement_target.loc.x > src.x)
|
|
||||||
set_dir(EAST)
|
|
||||||
else if (movement_target.loc.y < src.y)
|
|
||||||
set_dir(SOUTH)
|
|
||||||
else if (movement_target.loc.y > src.y)
|
|
||||||
set_dir(NORTH)
|
|
||||||
else
|
|
||||||
set_dir(SOUTH)
|
|
||||||
|
|
||||||
if(isturf(movement_target.loc) )
|
|
||||||
UnarmedAttack(movement_target)
|
|
||||||
else if(ishuman(movement_target.loc) && prob(20))
|
|
||||||
visible_emote("stares at the [movement_target] that [movement_target.loc] has with sad puppy eyes.")
|
|
||||||
|
|
||||||
if(prob(1))
|
if(prob(1))
|
||||||
visible_emote(pick("dances around","chases their tail"))
|
visible_emote(pick("dances around","chases their tail"))
|
||||||
|
|||||||
@@ -149,7 +149,6 @@
|
|||||||
vore_default_mode = DM_HOLD
|
vore_default_mode = DM_HOLD
|
||||||
|
|
||||||
var/turns_since_scan = 0
|
var/turns_since_scan = 0
|
||||||
var/obj/movement_target
|
|
||||||
|
|
||||||
/mob/living/simple_mob/animal/passive/snake/python/noodle/Life()
|
/mob/living/simple_mob/animal/passive/snake/python/noodle/Life()
|
||||||
..()
|
..()
|
||||||
@@ -163,36 +162,15 @@
|
|||||||
turns_since_scan = 0
|
turns_since_scan = 0
|
||||||
if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) ))
|
if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) ))
|
||||||
movement_target = null
|
movement_target = null
|
||||||
if( !movement_target || !(movement_target.loc in oview(src, 3)) )
|
if(!movement_target || !(movement_target.loc in oview(src, 7)) )
|
||||||
movement_target = null
|
movement_target = null
|
||||||
for(var/obj/item/reagent_containers/food/snacks/snakesnack/S in oview(src,3))
|
for(var/obj/item/reagent_containers/food/snacks/snakesnack/S in oview(src,7))
|
||||||
if(isturf(S.loc) || ishuman(S.loc))
|
if(isturf(S.loc) || ishuman(S.loc))
|
||||||
movement_target = S
|
movement_target = S
|
||||||
visible_emote("turns towards \the [movement_target] and slithers towards it.")
|
visible_emote("turns towards \the [movement_target] and slithers towards it.")
|
||||||
break
|
break
|
||||||
if(movement_target)
|
if(movement_target)
|
||||||
step_to(src,movement_target,1)
|
chase_target()
|
||||||
sleep(3)
|
|
||||||
step_to(src,movement_target,1)
|
|
||||||
sleep(3)
|
|
||||||
step_to(src,movement_target,1)
|
|
||||||
|
|
||||||
if(movement_target) //Not redundant due to sleeps, Item can be gone in 6 decisecomds
|
|
||||||
if (movement_target.loc.x < src.x)
|
|
||||||
set_dir(WEST)
|
|
||||||
else if (movement_target.loc.x > src.x)
|
|
||||||
set_dir(EAST)
|
|
||||||
else if (movement_target.loc.y < src.y)
|
|
||||||
set_dir(SOUTH)
|
|
||||||
else if (movement_target.loc.y > src.y)
|
|
||||||
set_dir(NORTH)
|
|
||||||
else
|
|
||||||
set_dir(SOUTH)
|
|
||||||
|
|
||||||
if(isturf(movement_target.loc) )
|
|
||||||
UnarmedAttack(movement_target)
|
|
||||||
else if(ishuman(movement_target.loc) && prob(20))
|
|
||||||
visible_emote("stares at the [movement_target] that [movement_target.loc] has with an unknowable reptilian gaze.")
|
|
||||||
|
|
||||||
/mob/living/simple_mob/animal/passive/snake/python/noodle/apply_melee_effects(var/atom/A)
|
/mob/living/simple_mob/animal/passive/snake/python/noodle/apply_melee_effects(var/atom/A)
|
||||||
if(ismouse(A))
|
if(ismouse(A))
|
||||||
@@ -206,6 +184,7 @@
|
|||||||
/mob/living/simple_mob/animal/passive/snake/python/noodle/attackby(var/obj/item/O, var/mob/user)
|
/mob/living/simple_mob/animal/passive/snake/python/noodle/attackby(var/obj/item/O, var/mob/user)
|
||||||
if(istype(O, /obj/item/reagent_containers/food/snacks/snakesnack))
|
if(istype(O, /obj/item/reagent_containers/food/snacks/snakesnack))
|
||||||
visible_message(span_notice("[user] feeds \the [O] to [src]."))
|
visible_message(span_notice("[user] feeds \the [O] to [src]."))
|
||||||
|
adjust_nutrition(100) //It's sugar!
|
||||||
qdel(O)
|
qdel(O)
|
||||||
else
|
else
|
||||||
return ..()
|
return ..()
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
|
|
||||||
//Fired processing vars
|
//Fired processing vars
|
||||||
var/fired = FALSE //Have we been fired yet
|
var/fired = FALSE //Have we been fired yet
|
||||||
var/paused = FALSE //for suspending the projectile midair
|
|
||||||
var/last_projectile_move = 0
|
var/last_projectile_move = 0
|
||||||
var/last_process = 0
|
var/last_process = 0
|
||||||
var/time_offset = 0
|
var/time_offset = 0
|
||||||
@@ -195,9 +194,6 @@
|
|||||||
var/safety = range * 3
|
var/safety = range * 3
|
||||||
record_hitscan_start(RETURN_POINT_VECTOR_INCREMENT(src, Angle, MUZZLE_EFFECT_PIXEL_INCREMENT, 1))
|
record_hitscan_start(RETURN_POINT_VECTOR_INCREMENT(src, Angle, MUZZLE_EFFECT_PIXEL_INCREMENT, 1))
|
||||||
while(loc && !QDELETED(src))
|
while(loc && !QDELETED(src))
|
||||||
if(paused)
|
|
||||||
stoplag(1)
|
|
||||||
continue
|
|
||||||
if(safety-- <= 0)
|
if(safety-- <= 0)
|
||||||
if(loc)
|
if(loc)
|
||||||
Bump(loc)
|
Bump(loc)
|
||||||
@@ -281,8 +277,8 @@
|
|||||||
if(!loc || !fired || !trajectory)
|
if(!loc || !fired || !trajectory)
|
||||||
fired = FALSE
|
fired = FALSE
|
||||||
return PROCESS_KILL
|
return PROCESS_KILL
|
||||||
if(paused || !isturf(loc))
|
if(!isturf(loc))
|
||||||
last_projectile_move += world.time - last_process //Compensates for pausing, so it doesn't become a hitscan projectile when unpaused from charged up ticks.
|
last_projectile_move += world.time - last_process
|
||||||
return
|
return
|
||||||
var/elapsed_time_deciseconds = (world.time - last_projectile_move) + time_offset
|
var/elapsed_time_deciseconds = (world.time - last_projectile_move) + time_offset
|
||||||
time_offset = 0
|
time_offset = 0
|
||||||
|
|||||||
Reference in New Issue
Block a user