diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm index 55f91ba3d3..c7fee7df96 100644 --- a/code/game/gamemodes/dynamic/dynamic.dm +++ b/code/game/gamemodes/dynamic/dynamic.dm @@ -711,10 +711,15 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) update_playercounts() if (storyteller.should_inject_antag()) SSblackbox.record_feedback("tally","dynamic",1,"Attempted midround injections") - var/list/drafted_rules = storyteller.midround_draft() - if (drafted_rules.len > 0) - SSblackbox.record_feedback("tally","dynamic",1,"Successful midround injections") - picking_midround_latejoin_rule(drafted_rules) + do_midround_injection() + +/datum/game_mode/dynamic/proc/do_midround_injection() + set waitfor = FALSE + var/list/drafted_rules = storyteller.midround_draft() + if (drafted_rules.len > 0) + SSblackbox.record_feedback("tally","dynamic",1,"Successful midround injections") + picking_midround_latejoin_rule(drafted_rules) + /// Updates current_players. /datum/game_mode/dynamic/proc/update_playercounts() diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index b92b659183..4082a48e71 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -96,6 +96,7 @@ GLOBAL_LIST_EMPTY(antagonists) //Proc called when the datum is given to a mind. /datum/antagonist/proc/on_gain() + set waitfor = FALSE if(!(owner?.current)) return if(!silent) diff --git a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm index d45593858c..4b88d203d6 100644 --- a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm +++ b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm @@ -225,22 +225,22 @@ return ..() /obj/effect/clockwork/sigil/transmission/process() - do_process() + do_process() /obj/effect/clockwork/sigil/transmission/proc/do_process() set waitfor = FALSE var/power_drained = 0 - var/power_mod = 0.005 - for(var/t in spiral_range_turfs(SIGIL_ACCESS_RANGE, src)) - var/turf/T = t - for(var/M in T) - var/atom/movable/A = M - power_drained += A.power_drain(TRUE) + var/power_mod = 0.005 + for(var/t in spiral_range_turfs(SIGIL_ACCESS_RANGE, src)) + var/turf/T = t + for(var/M in T) + var/atom/movable/A = M + power_drained += A.power_drain(TRUE) - CHECK_TICK + CHECK_TICK - adjust_clockwork_power(power_drained * power_mod * 15) - new /obj/effect/temp_visual/ratvar/sigil/transmission(loc, 1 + (power_drained * 0.0035)) + adjust_clockwork_power(power_drained * power_mod * 15) + new /obj/effect/temp_visual/ratvar/sigil/transmission(loc, 1 + (power_drained * 0.0035)) /obj/effect/clockwork/sigil/transmission/proc/charge_cyborg(mob/living/silicon/robot/cyborg) if(!cyborg_checks(cyborg)) diff --git a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm index 0fe78f146e..febcf9a6fb 100644 --- a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm +++ b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm @@ -245,6 +245,36 @@ if(GATEWAY_RATVAR_COMING to INFINITY) . += "The anomaly is stable! Something is coming through!" +/obj/structure/destructible/clockwork/massive/celestial_gateway/proc/fulfill_purpose() + set waitfor = FALSE + countdown.stop() + resistance_flags |= INDESTRUCTIBLE + purpose_fulfilled = TRUE + make_glow() + animate(glow, transform = matrix() * 1.5, alpha = 255, time = 125) + sound_to_playing_players(volume = 100, channel = CHANNEL_JUSTICAR_ARK, S = sound('sound/effects/ratvar_rises.ogg')) //End the sounds + sleep(125) + make_glow() + animate(glow, transform = matrix() * 3, alpha = 0, time = 5) + QDEL_IN(src, 3) + sleep(3) + GLOB.clockwork_gateway_activated = TRUE + var/turf/T = SSmapping.get_station_center() + new /obj/structure/destructible/clockwork/massive/ratvar(T) + var/x0 = T.x + var/y0 = T.y + for(var/I in spiral_range_turfs(255, T, tick_checked = TRUE)) + var/turf/T2 = I + if(!T2) + continue + var/dist = cheap_hypotenuse(T2.x, T2.y, x0, y0) + if(dist < 100) + dist = TRUE + else + dist = FALSE + T.ratvar_act(dist) + CHECK_TICK + /obj/structure/destructible/clockwork/massive/celestial_gateway/process() adjust_clockwork_power(2.5) //Provides weak power generation on its own if(seconds_until_activation) @@ -305,33 +335,7 @@ glow.icon_state = "clockwork_gateway_closing" if(GATEWAY_RATVAR_ARRIVAL to INFINITY) if(!purpose_fulfilled) - countdown.stop() - resistance_flags |= INDESTRUCTIBLE - purpose_fulfilled = TRUE - make_glow() - animate(glow, transform = matrix() * 1.5, alpha = 255, time = 125) - sound_to_playing_players(volume = 100, channel = CHANNEL_JUSTICAR_ARK, S = sound('sound/effects/ratvar_rises.ogg')) //End the sounds - sleep(125) - make_glow() - animate(glow, transform = matrix() * 3, alpha = 0, time = 5) - QDEL_IN(src, 3) - sleep(3) - GLOB.clockwork_gateway_activated = TRUE - var/turf/T = SSmapping.get_station_center() - new /obj/structure/destructible/clockwork/massive/ratvar(T) - var/x0 = T.x - var/y0 = T.y - for(var/I in spiral_range_turfs(255, T, tick_checked = TRUE)) - var/turf/T2 = I - if(!T2) - continue - var/dist = cheap_hypotenuse(T2.x, T2.y, x0, y0) - if(dist < 100) - dist = TRUE - else - dist = FALSE - T.ratvar_act(dist) - CHECK_TICK + fulfill_purpose() //Converts nearby turfs into their clockwork equivalent, with ever-increasing range the closer the ark is to summoning Ratvar /obj/structure/destructible/clockwork/massive/celestial_gateway/proc/conversion_pulse() diff --git a/code/modules/fields/fields.dm b/code/modules/fields/fields.dm index cb8d3e8dcf..8c7b414996 100644 --- a/code/modules/fields/fields.dm +++ b/code/modules/fields/fields.dm @@ -64,7 +64,8 @@ pass = FALSE return pass -/datum/proximity_monitor/advanced/process() +/datum/proximity_monitor/advanced/proc/lag_checked_process() + set waitfor = FALSE if(process_inner_turfs) for(var/turf/T in field_turfs) process_inner_turf(T) @@ -72,7 +73,10 @@ if(process_edge_turfs) for(var/turf/T in edge_turfs) process_edge_turf(T) - CHECK_TICK //Same here. + CHECK_TICK //Same here. + +/datum/proximity_monitor/advanced/process() + lag_checked_process() /datum/proximity_monitor/advanced/proc/process_inner_turf(turf/T) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index aca727ad8d..fa7decc437 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -391,6 +391,7 @@ mutate(4, 10, 2, 4, 50, 4, 10, 3) /obj/machinery/hydroponics/proc/mutatespecie() // Mutagent produced a new plant! + set waitfor = FALSE if(!myseed || dead) return diff --git a/code/modules/mining/machine_unloading.dm b/code/modules/mining/machine_unloading.dm index dc7caa12c8..b39b0df6ab 100644 --- a/code/modules/mining/machine_unloading.dm +++ b/code/modules/mining/machine_unloading.dm @@ -10,22 +10,25 @@ output_dir = EAST speed_process = TRUE -/obj/machinery/mineral/unloading_machine/process() - var/turf/T = get_step(src,input_dir) - if(T) - var/limit - for(var/obj/structure/ore_box/B in T) - for (var/obj/item/stack/ore/O in B) - B.contents -= O - unload_mineral(O) - limit++ - if (limit>=10) - return - CHECK_TICK - CHECK_TICK - for(var/obj/item/I in T) - unload_mineral(I) +/obj/machinery/mineral/unloading_machine/proc/horrible_quadratic_monster(var/turf/T) + set waitfor = FALSE + var/limit = 0 + for(var/obj/structure/ore_box/B in T) + for (var/obj/item/stack/ore/O in B) + B.contents -= O + unload_mineral(O) limit++ if (limit>=10) return CHECK_TICK + for(var/obj/item/I in T) + unload_mineral(I) + limit++ + if (limit>=10) + return + CHECK_TICK + +/obj/machinery/mineral/unloading_machine/process() + var/turf/T = get_step(src,input_dir) + if(T) + horrible_quadratic_monster(T) diff --git a/code/modules/mob/living/simple_animal/hostile/bosses/boss.dm b/code/modules/mob/living/simple_animal/hostile/bosses/boss.dm index d6eab5b1fc..1b0d210d9c 100644 --- a/code/modules/mob/living/simple_animal/hostile/bosses/boss.dm +++ b/code/modules/mob/living/simple_animal/hostile/bosses/boss.dm @@ -124,7 +124,6 @@ points = min(points+cost, max_points) /datum/boss_active_timed_battle/process() - SHOULD_NOT_SLEEP(FALSE) // it doesn't actually call anything that sleeps if(world.time >= next_point_time && points < max_points) next_point_time = world.time + point_regen_delay points = min(max_points, points + point_regen_amount) @@ -134,6 +133,10 @@ chance_to_hold_onto_points = highest_cost*0.5 if(points != max_points && prob(chance_to_hold_onto_points)) return //Let's save our points for a better ability (unless we're at max points, in which case we can't save anymore!) + do_ability() + +/datum/boss_active_timed_battle/proc/do_ability() + set waitfor = FALSE if(!boss.client) abilities = shuffle(abilities) for(var/ab in abilities) diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index aefb670dd3..1bab7e44b8 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -268,16 +268,19 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) // timed process // if the switch changed, update the linked conveyors -/obj/machinery/conveyor_switch/process() - if(!operated) - return - operated = 0 - +/obj/machienry/conveyor_switch/proc/do_process() + set waitfor = FALSE for(var/obj/machinery/conveyor/C in GLOB.conveyors_by_id[id]) C.operating = position C.update_move_direction() CHECK_TICK +/obj/machinery/conveyor_switch/process() + if(!operated) + return + operated = 0 + do_process() + // attack with hand, switch position /obj/machinery/conveyor_switch/interact(mob/user) add_fingerprint(user)