mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-27 15:01:04 +01:00
Update the codebase to 515. (#15553)
* Update the codebase to 515. * edit that * WHOOPS * maor * maybe works * libcall and shit * do that too * remove that * auxtools isnt updated so get rid of it * actually remove auxtools lol Co-authored-by: Matt Atlas <liermattia@gmail.com>
This commit is contained in:
@@ -134,7 +134,7 @@
|
||||
|
||||
if(seenby.len)
|
||||
updating = TRUE
|
||||
addtimer(CALLBACK(src, .proc/update), UPDATE_BUFFER)
|
||||
addtimer(CALLBACK(src, PROC_REF(update)), UPDATE_BUFFER)
|
||||
else
|
||||
dirty = TRUE
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
spawn(current_map.lobby_transitions)
|
||||
Update()
|
||||
else
|
||||
addtimer(CALLBACK(src, .proc/Update), current_map.lobby_transitions, TIMER_UNIQUE | TIMER_CLIENT_TIME | TIMER_OVERRIDE)
|
||||
addtimer(CALLBACK(src, PROC_REF(Update)), current_map.lobby_transitions, TIMER_UNIQUE | TIMER_CLIENT_TIME | TIMER_OVERRIDE)
|
||||
else
|
||||
icon_state = pick(current_map.lobby_screens)
|
||||
else //This should basically never happen.
|
||||
@@ -96,7 +96,7 @@
|
||||
spawn(current_map.lobby_transitions)
|
||||
Update()
|
||||
else
|
||||
addtimer(CALLBACK(src, .proc/Update), current_map.lobby_transitions, TIMER_UNIQUE | TIMER_CLIENT_TIME | TIMER_OVERRIDE)
|
||||
addtimer(CALLBACK(src, PROC_REF(Update)), current_map.lobby_transitions, TIMER_UNIQUE | TIMER_CLIENT_TIME | TIMER_OVERRIDE)
|
||||
|
||||
/obj/screen/new_player/selection/New(var/datum/hud/H)
|
||||
color = null
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
if(!config.guests_allowed && config.webint_url && config.external_auth)
|
||||
src.OpenForumAuthWindow()
|
||||
show_browser(src, uihtml, "window=externalauth;size=300x300;border=0;can_close=1;can_resize=0;can_minimize=0;titlebar=1")
|
||||
timeout_timer = addtimer(CALLBACK(src, .proc/timeout), 900, TIMER_STOPPABLE)
|
||||
timeout_timer = addtimer(CALLBACK(src, PROC_REF(timeout)), 900, TIMER_STOPPABLE)
|
||||
|
||||
/mob/abstract/unauthed/proc/timeout()
|
||||
if (client)
|
||||
|
||||
@@ -189,7 +189,7 @@ note dizziness decrements automatically in the mob's Life() proc.
|
||||
..(A, attack_item, attack_image, initial_pixel_x, initial_pixel_y)
|
||||
|
||||
if(is_floating)
|
||||
addtimer(CALLBACK(src, .proc/start_floating), 4)
|
||||
addtimer(CALLBACK(src, PROC_REF(start_floating)), 4)
|
||||
|
||||
if(attack_item == FIST_ATTACK_ANIMATION) // only play the physical movement
|
||||
return
|
||||
@@ -287,4 +287,4 @@ note dizziness decrements automatically in the mob's Life() proc.
|
||||
animate(transform = M, time = 0.6, easing = EASE_IN)
|
||||
|
||||
if(is_floating)
|
||||
addtimer(CALLBACK(src, .proc/start_floating), 2.4)
|
||||
addtimer(CALLBACK(src, PROC_REF(start_floating)), 2.4)
|
||||
|
||||
@@ -72,8 +72,8 @@ var/list/floating_chat_colors = list()
|
||||
animate(old, 2, pixel_y = old.pixel_y + 8)
|
||||
LAZYADD(holder.stored_chat_text, I)
|
||||
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/remove_floating_text, holder, I), duration)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/remove_images_from_clients, I, show_to), duration + 2)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(remove_floating_text), holder, I), duration)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(remove_images_from_clients), I, show_to), duration + 2)
|
||||
|
||||
return I
|
||||
|
||||
|
||||
@@ -125,7 +125,7 @@ var/list/holder_mob_icon_cache = list()
|
||||
//Repeat this check
|
||||
//If we're still on the turf a few frames later, then we have actually been dropped or thrown
|
||||
//Release the mob accordingly
|
||||
addtimer(CALLBACK(src, .proc/post_drop), 3)
|
||||
addtimer(CALLBACK(src, PROC_REF(post_drop)), 3)
|
||||
return
|
||||
|
||||
if (istype(loc, /obj/item/storage)) //The second drop reads the container its placed into as the location
|
||||
|
||||
@@ -212,7 +212,7 @@ var/list/slot_equipment_priority = list( \
|
||||
. = drop_r_hand(Target)
|
||||
|
||||
if (istype(item_dropped) && !QDELETED(item_dropped))
|
||||
addtimer(CALLBACK(src, .proc/make_item_drop_sound, item_dropped), 1)
|
||||
addtimer(CALLBACK(src, PROC_REF(make_item_drop_sound), item_dropped), 1)
|
||||
|
||||
/mob/proc/make_item_drop_sound(obj/item/I)
|
||||
if(QDELETED(I))
|
||||
|
||||
@@ -119,7 +119,7 @@ var/list/cleanbot_types // Going to use this to generate a list of types once th
|
||||
visible_message(SPAN_WARNING("Some bloody gibs fall out of [src]..."))
|
||||
var/obj/effect/decal/cleanable/blood/gibs/gib = new /obj/effect/decal/cleanable/blood/gibs(get_turf(src))
|
||||
ignorelist += gib
|
||||
addtimer(CALLBACK(src, .proc/remove_from_ignore, gib), 600)
|
||||
addtimer(CALLBACK(src, PROC_REF(remove_from_ignore), gib), 600)
|
||||
|
||||
/mob/living/bot/cleanbot/think()
|
||||
..()
|
||||
@@ -213,7 +213,7 @@ var/list/cleanbot_types // Going to use this to generate a list of types once th
|
||||
D.being_cleaned = TRUE
|
||||
update_icon()
|
||||
var/clean_time = istype(D, /obj/effect/decal/cleanable/dirt) ? 10 : 50
|
||||
INVOKE_ASYNC(src, .proc/do_clean, D, clean_time)
|
||||
INVOKE_ASYNC(src, PROC_REF(do_clean), D, clean_time)
|
||||
|
||||
/mob/living/bot/cleanbot/proc/do_clean(var/obj/effect/decal/cleanable/D, var/clean_time)
|
||||
if(D && do_after(src, clean_time))
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
|
||||
if(target)
|
||||
if(Adjacent(target))
|
||||
INVOKE_ASYNC(src, .proc/UnarmedAttack, target)
|
||||
INVOKE_ASYNC(src, PROC_REF(UnarmedAttack), target)
|
||||
path = list()
|
||||
target = null
|
||||
else
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
if(patient)
|
||||
if(Adjacent(patient))
|
||||
if(!currently_healing)
|
||||
INVOKE_ASYNC(src, .proc/UnarmedAttack, patient)
|
||||
INVOKE_ASYNC(src, PROC_REF(UnarmedAttack), patient)
|
||||
else
|
||||
if(path.len && (get_dist(patient, path[path.len]) > 2)) // We have a path, but it's off
|
||||
path = list()
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
searching = FALSE
|
||||
update_icon()
|
||||
|
||||
INVOKE_ASYNC(src, .proc/update_name)
|
||||
INVOKE_ASYNC(src, PROC_REF(update_name))
|
||||
|
||||
to_chat(brainmob, "<b>You are a positronic brain, brought into existence on [station_name()].</b>")
|
||||
to_chat(brainmob, "<b>As a synthetic intelligence, you answer to all crewmembers, as well as the AI.</b>")
|
||||
|
||||
@@ -306,9 +306,9 @@ var/list/diona_banned_languages = list(
|
||||
/obj/item/organ/external/leg/right/diona = /obj/item/organ/external/foot/right/diona
|
||||
)
|
||||
if(path in special_case)
|
||||
DS.regen_extra = CALLBACK(src, .proc/diona_regen_callback, special_case[path], DS)
|
||||
DS.regen_extra = CALLBACK(src, PROC_REF(diona_regen_callback), special_case[path], DS)
|
||||
if(!bypass)
|
||||
DS.regen_limb = CALLBACK(src, .proc/diona_regen_callback, path, DS)
|
||||
DS.regen_limb = CALLBACK(src, PROC_REF(diona_regen_callback), path, DS)
|
||||
else
|
||||
diona_regen_callback(path, DS)
|
||||
diona_regen_callback(special_case[path], DS)
|
||||
@@ -625,7 +625,7 @@ var/list/diona_banned_languages = list(
|
||||
to_chat(H, SPAN_NOTICE("You feel some liquid being injected at the bite site."))
|
||||
H.reagents.add_reagent(/singleton/reagent/mortaphenyl/aphrodite, 5)
|
||||
if(H.client)
|
||||
INVOKE_ASYNC(src, .proc/memory_transfer, user, H)
|
||||
INVOKE_ASYNC(src, PROC_REF(memory_transfer), user, H)
|
||||
if(newDNA in sampled_DNA)
|
||||
to_chat(user, SPAN_DANGER("You have already sampled the DNA of this creature before, you can learn nothing new. Move onto something else."))
|
||||
return
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
but you can interrupt feeding anytime and leave with what you've already eaten.</span>")
|
||||
|
||||
for (var/i = 0 to num_bites_needed)
|
||||
if(do_mob(src, victim, bite_delay * 10, extra_checks = CALLBACK(src, .proc/devouring_equals, victim)))
|
||||
if(do_mob(src, victim, bite_delay * 10, extra_checks = CALLBACK(src, PROC_REF(devouring_equals), victim)))
|
||||
face_atom(victim)
|
||||
victim.apply_damage(damage_dealt, BRUTE)
|
||||
var/obj/item/organ/internal/stomach/S = internal_organs_by_name[BP_STOMACH]
|
||||
|
||||
@@ -408,7 +408,7 @@
|
||||
|
||||
to_chat(user, msg.Join())
|
||||
if(Adjacent(user))
|
||||
INVOKE_ASYNC(src, .proc/examine_pulse, user)
|
||||
INVOKE_ASYNC(src, PROC_REF(examine_pulse), user)
|
||||
|
||||
//Helper procedure. Called by /mob/living/carbon/human/examine() and /mob/living/carbon/human/Topic() to determine HUD access to security and medical records.
|
||||
/proc/hasHUD(mob/M, hudtype)
|
||||
|
||||
@@ -203,7 +203,7 @@
|
||||
custom_pain(SPAN_DANGER("<font size = 3>[pick(psi_operancy_messages)]</font>"), 25)
|
||||
set_psi_rank(pick_n_take(faculties), allow_latency ? PSI_RANK_LATENT : PSI_RANK_OPERANT) // if set to latent, it spikes anywhere from OPERANT to PARAMOUNT
|
||||
sleep(30)
|
||||
addtimer(CALLBACK(psi, /datum/psi_complexus/.proc/check_latency_trigger, 100, source, TRUE), 4.5 SECONDS)
|
||||
addtimer(CALLBACK(psi, TYPE_PROC_REF(/datum/psi_complexus, check_latency_trigger), 100, source, TRUE), 4.5 SECONDS)
|
||||
|
||||
/mob/living/carbon/human/get_resist_power()
|
||||
return species.resist_mod
|
||||
|
||||
@@ -657,7 +657,7 @@ mob/living/carbon/human/proc/change_monitor()
|
||||
|
||||
src.set_light(4,-20)
|
||||
|
||||
addtimer(CALLBACK(src, /atom/.proc/set_light, 0), 30 SECONDS)
|
||||
addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, set_light), 0), 30 SECONDS)
|
||||
|
||||
/mob/living/carbon/human/proc/darkness_eyes()
|
||||
set category = "Abilities"
|
||||
@@ -778,7 +778,7 @@ mob/living/carbon/human/proc/change_monitor()
|
||||
playsound(src,'sound/mecha/mechstep.ogg',25,1)
|
||||
if (brokesomething)
|
||||
src.visible_message("<span class='danger'>[src.name] breaks through!</span>")
|
||||
addtimer(CALLBACK(src, .proc/trampling), 1)
|
||||
addtimer(CALLBACK(src, PROC_REF(trampling)), 1)
|
||||
|
||||
else
|
||||
target = get_step(src, dir)
|
||||
@@ -973,7 +973,7 @@ mob/living/carbon/human/proc/change_monitor()
|
||||
|
||||
var/mob/living/carbon/human/G = new(src.loc)
|
||||
G.key = O.brainmob.key
|
||||
INVOKE_ASYNC(G, /mob/living/carbon/human.proc/set_species, O.dna.species)
|
||||
INVOKE_ASYNC(G, TYPE_PROC_REF(/mob/living/carbon/human, set_species), O.dna.species)
|
||||
to_chat(src,"<span class='notice'>You blow life back in \the [O], returning its past owner to life!</span>")
|
||||
qdel(O)
|
||||
last_special = world.time + 200
|
||||
@@ -1153,7 +1153,7 @@ mob/living/carbon/human/proc/change_monitor()
|
||||
ping_image.pixel_x = (T.x - src.x) * WORLD_ICON_SIZE
|
||||
ping_image.pixel_y = (T.y - src.y) * WORLD_ICON_SIZE
|
||||
src << ping_image
|
||||
addtimer(CALLBACK(GLOBAL_PROC, /proc/qdel, ping_image), 8)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), ping_image), 8)
|
||||
var/direction = num2text(get_dir(src, L))
|
||||
var/dist
|
||||
if(text2num(direction))
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
var/datum/ghostspawner/revenant/R = SSghostroles.get_spawner(MODE_REVENANT)
|
||||
R.count = max(R.count - 1, 0)
|
||||
revenants.kill_count++
|
||||
INVOKE_ASYNC(src, .proc/spawn_gore, get_turf(H))
|
||||
INVOKE_ASYNC(src, PROC_REF(spawn_gore), get_turf(H))
|
||||
H.set_death_time(ANIMAL, world.time)
|
||||
for(var/obj/item/I in H)
|
||||
H.unEquip(I)
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
/datum/species/diona/handle_death(var/mob/living/carbon/human/H, var/gibbed = 0)
|
||||
if (!gibbed)
|
||||
// This proc sleeps. Async it.
|
||||
INVOKE_ASYNC(H, /mob/living/carbon/human/proc/diona_split_into_nymphs)
|
||||
INVOKE_ASYNC(H, TYPE_PROC_REF(/mob/living/carbon/human, diona_split_into_nymphs))
|
||||
|
||||
/datum/species/diona/handle_speech_problems(mob/living/carbon/human/H, message, say_verb, message_mode, message_range)
|
||||
// Diona without head can live, but they cannot talk as loud anymore.
|
||||
|
||||
@@ -416,7 +416,7 @@ var/global/list/golem_types = list(SPECIES_GOLEM_COAL,
|
||||
for(var/i in 1 to 5)
|
||||
var/obj/item/material/shard/T = new meat_type(H.loc)
|
||||
var/turf/landing = get_step(H, pick(alldirs))
|
||||
INVOKE_ASYNC(T, /atom/movable/.proc/throw_at, landing, 30, 5)
|
||||
INVOKE_ASYNC(T, TYPE_PROC_REF(/atom/movable, throw_at), landing, 30, 5)
|
||||
qdel(H)
|
||||
|
||||
/datum/species/golem/glass/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
|
||||
@@ -175,7 +175,7 @@
|
||||
/datum/species/machine/handle_death(var/mob/living/carbon/human/H)
|
||||
..()
|
||||
H.f_style = ""
|
||||
addtimer(CALLBACK(H, /mob/living/carbon/human/.proc/update_hair), 100)
|
||||
addtimer(CALLBACK(H, TYPE_PROC_REF(/mob/living/carbon/human, update_hair)), 100)
|
||||
|
||||
/datum/species/machine/sanitize_name(var/new_name)
|
||||
return sanitizeName(new_name, allow_numbers = 1)
|
||||
|
||||
@@ -1340,7 +1340,7 @@ There are several things that need to be remembered:
|
||||
|
||||
tail_overlay = set_tail_state(mob_state)
|
||||
if(tail_overlay)
|
||||
addtimer(CALLBACK(src, .proc/end_animate_tail_once, tail_overlay), 20, TIMER_CLIENT_TIME)
|
||||
addtimer(CALLBACK(src, PROC_REF(end_animate_tail_once), tail_overlay), 20, TIMER_CLIENT_TIME)
|
||||
|
||||
/mob/living/carbon/human/proc/end_animate_tail_once(image/tail_overlay)
|
||||
//check that the animation hasn't changed in the meantime
|
||||
|
||||
@@ -24,13 +24,13 @@
|
||||
..()
|
||||
|
||||
if (handcuffed)
|
||||
INVOKE_ASYNC(src, .proc/escape_handcuffs)
|
||||
INVOKE_ASYNC(src, PROC_REF(escape_handcuffs))
|
||||
else if (legcuffed)
|
||||
INVOKE_ASYNC(src, .proc/escape_legcuffs)
|
||||
INVOKE_ASYNC(src, PROC_REF(escape_legcuffs))
|
||||
|
||||
/mob/living/carbon/human/process_resist()
|
||||
if (istype(wear_suit, /obj/item/clothing/suit/straight_jacket))
|
||||
INVOKE_ASYNC(src, .proc/escape_jacket)
|
||||
INVOKE_ASYNC(src, PROC_REF(escape_jacket))
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
@@ -130,7 +130,7 @@
|
||||
name = text("[colour] [is_adult ? "adult" : "baby"] slime ([number])")
|
||||
real_name = name
|
||||
set_content(TRUE)
|
||||
addtimer(CALLBACK(src, .proc/set_content, FALSE), 1200) // You get two minutes of safety
|
||||
addtimer(CALLBACK(src, PROC_REF(set_content), FALSE), 1200) // You get two minutes of safety
|
||||
else
|
||||
to_chat(src, SPAN_NOTICE("I am not ready to evolve yet..."))
|
||||
else
|
||||
@@ -167,7 +167,7 @@
|
||||
M.mutation_chance = clamp(mutation_chance + rand(-3, 3), 0, 100)
|
||||
babies += M
|
||||
M.set_content(TRUE)
|
||||
addtimer(CALLBACK(M, .proc/set_content, FALSE), 1200) // You get two minutes of safety
|
||||
addtimer(CALLBACK(M, TYPE_PROC_REF(/mob/living/carbon/slime, set_content), FALSE), 1200) // You get two minutes of safety
|
||||
feedback_add_details("slime_babies_born", "slimebirth_[replacetext(M.colour," ","_")]")
|
||||
|
||||
var/mob/living/carbon/slime/new_slime = pick(babies)
|
||||
|
||||
@@ -204,7 +204,7 @@
|
||||
if(is_adult || prob(5))
|
||||
UnarmedAttack(AM)
|
||||
Atkcool = TRUE
|
||||
addtimer(CALLBACK(src, .proc/reset_atkcooldown), 45)
|
||||
addtimer(CALLBACK(src, PROC_REF(reset_atkcooldown)), 45)
|
||||
|
||||
if(ismob(AM))
|
||||
var/mob/tmob = AM
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
user.visible_message(SPAN_NOTICE("\The user loads \the [slimey] into \the [src]."), SPAN_NOTICE("You load \the [slimey] into \the [src]."))
|
||||
slimey.forceMove(src)
|
||||
extract_slimes[slimey] = slimey
|
||||
addtimer(CALLBACK(src, .proc/extraction_process, slimey), extraction_speed)
|
||||
addtimer(CALLBACK(src, PROC_REF(extraction_process), slimey), extraction_speed)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/slime_extractor/proc/extraction_process(var/slime)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
if(!can_fall(check))
|
||||
break
|
||||
if(check && check != loc)
|
||||
addtimer(CALLBACK(src, /mob/living/proc/reflexive_maneuver_callback, lastloc, check), 0)
|
||||
addtimer(CALLBACK(src, TYPE_PROC_REF(/mob/living, reflexive_maneuver_callback), lastloc, check), 0)
|
||||
return
|
||||
. = ..()
|
||||
|
||||
|
||||
@@ -315,14 +315,14 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
var/speech_bubble_test = say_test(message)
|
||||
var/image/speech_bubble = image(get_talk_bubble(),src,"h[speech_bubble_test]")
|
||||
speech_bubble.appearance_flags = RESET_COLOR|RESET_ALPHA
|
||||
INVOKE_ASYNC(GLOBAL_PROC, /proc/animate_speechbubble, speech_bubble, hear_clients, 30)
|
||||
INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(animate_speechbubble), speech_bubble, hear_clients, 30)
|
||||
do_animate_chat(message, speaking, italics, hear_clients, 30)
|
||||
|
||||
var/bypass_listen_obj = (speaking && (speaking.flags & PASSLISTENOBJ))
|
||||
if(!bypass_listen_obj)
|
||||
for(var/obj/O as anything in listening)
|
||||
if(O) //It's possible that it could be deleted in the meantime.
|
||||
INVOKE_ASYNC(O, /obj/.proc/hear_talk, src, message, verb, speaking)
|
||||
INVOKE_ASYNC(O, TYPE_PROC_REF(/obj, hear_talk), src, message, verb, speaking)
|
||||
|
||||
if(mind)
|
||||
mind.last_words = message
|
||||
@@ -335,7 +335,7 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
return 1
|
||||
|
||||
/mob/living/proc/do_animate_chat(var/message, var/datum/language/language, var/small, var/list/show_to, var/duration)
|
||||
INVOKE_ASYNC(src, /atom/movable/proc/animate_chat, message, language, small, show_to, duration)
|
||||
INVOKE_ASYNC(src, TYPE_PROC_REF(/atom/movable, animate_chat), message, language, small, show_to, duration)
|
||||
|
||||
/proc/animate_speechbubble(image/I, list/show_to, duration)
|
||||
var/matrix/M = matrix()
|
||||
|
||||
@@ -184,7 +184,7 @@ var/list/ai_verbs_default = list(
|
||||
|
||||
on_mob_init()
|
||||
|
||||
addtimer(CALLBACK(src, .proc/create_powersupply), 5)
|
||||
addtimer(CALLBACK(src, PROC_REF(create_powersupply)), 5)
|
||||
|
||||
hud_list[HEALTH_HUD] = new /image/hud_overlay('icons/mob/hud_med.dmi', src, "100")
|
||||
hud_list[STATUS_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
|
||||
@@ -595,7 +595,7 @@ var/list/ai_verbs_default = list(
|
||||
for(var/i in tempnetwork)
|
||||
cameralist[i] = i
|
||||
|
||||
sortTim(cameralist, /proc/cmp_text_asc)
|
||||
sortTim(cameralist, GLOBAL_PROC_REF(cmp_text_asc))
|
||||
return cameralist
|
||||
|
||||
/mob/living/silicon/ai/proc/ai_network_change(var/network in get_camera_network_list())
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
|
||||
/obj/item/inductive_charger/proc/message_and_use(mob/user, var/others_message, var/self_message)
|
||||
user.visible_message(others_message, self_message, range = 3)
|
||||
addtimer(CALLBACK(src, .proc/recharge), recharge_time)
|
||||
addtimer(CALLBACK(src, PROC_REF(recharge)), recharge_time)
|
||||
ready_to_use = FALSE
|
||||
check_maptext(SMALL_FONTS(6, "Charge"))
|
||||
|
||||
|
||||
@@ -1046,7 +1046,7 @@
|
||||
else
|
||||
say("WARNING! Self-destruct initiated. Unit [src] will self destruct in five seconds.")
|
||||
|
||||
addtimer(CALLBACK(src, .proc/self_destruct_warning, 1), 2 SECONDS, TIMER_UNIQUE)
|
||||
addtimer(CALLBACK(src, PROC_REF(self_destruct_warning), 1), 2 SECONDS, TIMER_UNIQUE)
|
||||
|
||||
/mob/living/silicon/robot/proc/self_destruct_warning(var/warning_level)
|
||||
if(!process_level_restrictions()) // Robot has returned to a turf where it is safe
|
||||
@@ -1057,10 +1057,10 @@
|
||||
switch(warning_level)
|
||||
if(1)
|
||||
playsound(get_turf(src), 'sound/items/countdown.ogg', 125, TRUE)
|
||||
addtimer(CALLBACK(src, .proc/self_destruct_warning, 2), 2 SECONDS, TIMER_UNIQUE)
|
||||
addtimer(CALLBACK(src, PROC_REF(self_destruct_warning), 2), 2 SECONDS, TIMER_UNIQUE)
|
||||
if(2)
|
||||
playsound(get_turf(src), 'sound/effects/alert.ogg', 125, TRUE)
|
||||
addtimer(CALLBACK(src, .proc/self_destruct_warning, 3), 1 SECONDS, TIMER_UNIQUE)
|
||||
addtimer(CALLBACK(src, PROC_REF(self_destruct_warning), 3), 1 SECONDS, TIMER_UNIQUE)
|
||||
if(3)
|
||||
self_destruct()
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
to_chat(B.host, SPAN_DANGER("You feel the captive mind of [src] begin to resist your control."))
|
||||
|
||||
var/resist_time = rand(40 SECONDS, 1 MINUTE)
|
||||
addtimer(CALLBACK(src, .proc/eject_borer, B, H), resist_time)
|
||||
addtimer(CALLBACK(src, PROC_REF(eject_borer), B, H), resist_time)
|
||||
resist_bar = new /datum/progressbar/autocomplete(src, resist_time, B.host)
|
||||
resist_start_time = world.time
|
||||
resist_bar.update(0)
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
if(!host.stat)
|
||||
to_chat(host, SPAN_WARNING("An odd, uncomfortable pressure begins to build inside your skull, behind your ear..."))
|
||||
|
||||
addtimer(CALLBACK(src, .proc/exit_host), exit_time)
|
||||
addtimer(CALLBACK(src, PROC_REF(exit_host)), exit_time)
|
||||
|
||||
/mob/living/simple_animal/borer/proc/exit_host()
|
||||
if(!host || !src)
|
||||
@@ -208,7 +208,7 @@
|
||||
|
||||
// Since the host is dead, we want to kick it back into action immediately, then redo it to ensure they're good to go
|
||||
H.rejuvenate()
|
||||
addtimer(CALLBACK(H, .proc/rejuvenate), 30)
|
||||
addtimer(CALLBACK(H, PROC_REF(rejuvenate)), 30)
|
||||
|
||||
/mob/living/simple_animal/borer/verb/secrete_chemicals()
|
||||
set category = "Abilities"
|
||||
@@ -309,7 +309,7 @@
|
||||
to_chat(src, SPAN_WARNING("You begin delicately adjusting your connection to the host brain..."))
|
||||
to_chat(host, SPAN_WARNING("You feel a tingling sensation at the back of your head."))
|
||||
|
||||
addtimer(CALLBACK(src, .proc/host_takeover), takeover_time)
|
||||
addtimer(CALLBACK(src, PROC_REF(host_takeover)), takeover_time)
|
||||
|
||||
/mob/living/simple_animal/borer/proc/host_takeover()
|
||||
if(!host || !src || controlling)
|
||||
@@ -474,7 +474,7 @@
|
||||
to_chat(host, SPAN_DANGER("You feel some tendrils probe at the back of your head..."))
|
||||
to_chat(host, FONT_LARGE(SPAN_WARNING("You feel something terrible coming on...")))
|
||||
|
||||
addtimer(CALLBACK(src, .proc/jumpstart_psi), jumpstart_time)
|
||||
addtimer(CALLBACK(src, PROC_REF(jumpstart_psi)), jumpstart_time)
|
||||
|
||||
/mob/living/simple_animal/borer/proc/jumpstart_psi()
|
||||
if(!host)
|
||||
@@ -526,7 +526,7 @@
|
||||
to_chat(src, SPAN_NOTICE("You probe your tendrils deep within your host's zona bovinae, seeking to upgrade their abilities."))
|
||||
to_chat(host, SPAN_WARNING("You feel a burning, tingling sensation at the back of your head..."))
|
||||
|
||||
addtimer(CALLBACK(src, .proc/faculty_upgrade, selected_faculty), faculty_time)
|
||||
addtimer(CALLBACK(src, PROC_REF(faculty_upgrade), selected_faculty), faculty_time)
|
||||
|
||||
/mob/living/simple_animal/borer/proc/faculty_upgrade(var/selected_faculty)
|
||||
if(!host)
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
if(prob(15))
|
||||
audible_emote(pick("hisses and spits!","mrowls fiercely!","eyes [snack] hungrily."))
|
||||
|
||||
addtimer(CALLBACK(src, .proc/attack_mice), 2)
|
||||
addtimer(CALLBACK(src, PROC_REF(attack_mice)), 2)
|
||||
break
|
||||
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
/mob/living/simple_animal/cat/Released()
|
||||
//A thrown cat will immediately attack mice near where it lands
|
||||
handle_movement_target()
|
||||
addtimer(CALLBACK(src, .proc/attack_mice), 3)
|
||||
addtimer(CALLBACK(src, PROC_REF(attack_mice)), 3)
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/cat/proc/handle_radiation_light()
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
if(!stat && !resting && !buckled_to)
|
||||
if(prob(1))
|
||||
visible_emote(pick("dances around.","chases their tail."),0)
|
||||
INVOKE_ASYNC(src, .proc/do_dance, list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
|
||||
INVOKE_ASYNC(src, PROC_REF(do_dance), list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
|
||||
|
||||
/mob/living/simple_animal/corgi/proc/do_dance(list/directions = list())
|
||||
for(var/i in directions)
|
||||
@@ -84,7 +84,7 @@
|
||||
stop_automated_movement = 0
|
||||
turns_since_scan = 0
|
||||
|
||||
INVOKE_ASYNC(src, .proc/do_dance, list(1,2,4,8,4,2,1,2))
|
||||
INVOKE_ASYNC(src, PROC_REF(do_dance), list(1,2,4,8,4,2,1,2))
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -177,4 +177,4 @@
|
||||
|
||||
if (!stat && !resting && !buckled_to && prob(1))
|
||||
visible_emote(pick("dances around","chases her tail"),0)
|
||||
INVOKE_ASYNC(src, .proc/do_dance, list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
|
||||
INVOKE_ASYNC(src, PROC_REF(do_dance), list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
/mob/living/simple_animal/hostile/commanded/bear/misc_command(var/mob/speaker,var/text)
|
||||
stay_command()
|
||||
stance = COMMANDED_MISC //nothing can stop this ride
|
||||
INVOKE_ASYNC(src, .proc/command_dance)
|
||||
INVOKE_ASYNC(src, PROC_REF(command_dance))
|
||||
|
||||
/mob/living/simple_animal/hostile/commanded/bear/proc/command_dance()
|
||||
visible_message("\The [src] starts to dance!.")
|
||||
|
||||
@@ -153,7 +153,7 @@
|
||||
move_targets.Add(T)*/
|
||||
stop_automated_movement = 1
|
||||
walk_to(src, pick(orange(20, src)), 1, move_to_delay)
|
||||
addtimer(CALLBACK(src, .proc/stop_walking), 50, TIMER_UNIQUE)
|
||||
addtimer(CALLBACK(src, PROC_REF(stop_walking)), 50, TIMER_UNIQUE)
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/proc/stop_walking()
|
||||
stop_automated_movement = 0
|
||||
@@ -172,7 +172,7 @@
|
||||
busy = MOVING_TO_TARGET
|
||||
walk_to(src, C, 1, move_to_delay)
|
||||
//give up if we can't reach them after 10 seconds
|
||||
addtimer(CALLBACK(src, .proc/GiveUp, C), 100, TIMER_UNIQUE)
|
||||
addtimer(CALLBACK(src, PROC_REF(GiveUp), C), 100, TIMER_UNIQUE)
|
||||
return
|
||||
|
||||
//second, spin a sticky spiderweb on this tile
|
||||
@@ -181,7 +181,7 @@
|
||||
busy = SPINNING_WEB
|
||||
src.visible_message("<span class='notice'>\The [src] begins to secrete a sticky substance.</span>")
|
||||
stop_automated_movement = 1
|
||||
addtimer(CALLBACK(src, .proc/finalize_web), 40, TIMER_UNIQUE)
|
||||
addtimer(CALLBACK(src, PROC_REF(finalize_web)), 40, TIMER_UNIQUE)
|
||||
else
|
||||
//third, lay an egg cluster there
|
||||
var/obj/effect/spider/eggcluster/E = locate() in get_turf(src)
|
||||
@@ -189,7 +189,7 @@
|
||||
busy = LAYING_EGGS
|
||||
src.visible_message("<span class='notice'>\The [src] begins to lay a cluster of eggs.</span>")
|
||||
stop_automated_movement = 1
|
||||
addtimer(CALLBACK(src, .proc/finalize_eggs), 50, TIMER_UNIQUE)
|
||||
addtimer(CALLBACK(src, PROC_REF(finalize_eggs)), 50, TIMER_UNIQUE)
|
||||
else
|
||||
//fourthly, cocoon any nearby items so those pesky pinkskins can't use them
|
||||
for(var/obj/O in view(src, world.view))
|
||||
@@ -210,7 +210,7 @@
|
||||
src.visible_message("<span class='notice'>\The [src] begins to secrete a sticky substance around \the [cocoon_target].</span>")
|
||||
stop_automated_movement = 1
|
||||
walk(src,0)
|
||||
addtimer(CALLBACK(src, .proc/finalize_cocoon), 50, TIMER_UNIQUE)
|
||||
addtimer(CALLBACK(src, PROC_REF(finalize_cocoon)), 50, TIMER_UNIQUE)
|
||||
|
||||
else
|
||||
busy = 0
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
if(!has_exploded)
|
||||
playsound(src.loc, 'sound/items/countdown.ogg', 125, 1)
|
||||
has_exploded = TRUE
|
||||
addtimer(CALLBACK(src, .proc/burst), 20)
|
||||
addtimer(CALLBACK(src, PROC_REF(burst)), 20)
|
||||
|
||||
/mob/living/simple_animal/hostile/hivebot/bomber/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(istype(Proj, /obj/item/projectile/bullet/pistol/hivebotspike) || istype(Proj, /obj/item/projectile/beam/hivebot))
|
||||
@@ -168,7 +168,7 @@
|
||||
/mob/living/simple_animal/hostile/hivebot/emp_act(severity)
|
||||
LoseTarget()
|
||||
stance = HOSTILE_STANCE_TIRED
|
||||
addtimer(CALLBACK(src, .proc/wakeup), 50)
|
||||
addtimer(CALLBACK(src, PROC_REF(wakeup)), 50)
|
||||
visible_message(SPAN_DANGER("[src] suffers a teleportation malfunction!"))
|
||||
playsound(src.loc, 'sound/effects/teleport.ogg', 25, 1)
|
||||
var/turf/random_turf = get_turf(pick(orange(src,7)))
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
S.start()
|
||||
visible_message(SPAN_DANGER("[src] warps in!"))
|
||||
playsound(src.loc, 'sound/effects/EMPulse.ogg', 25, 1)
|
||||
addtimer(CALLBACK(src, .proc/activate_beacon), 450)
|
||||
addtimer(CALLBACK(src, PROC_REF(activate_beacon)), 450)
|
||||
latest_area = get_area(src)
|
||||
icon_state = "hivebotbeacon_off"
|
||||
generate_warp_destinations()
|
||||
@@ -160,7 +160,7 @@
|
||||
stance = HOSTILE_STANCE_TIRED
|
||||
icon_state = "hivebotbeacon_off"
|
||||
activated = -1
|
||||
addtimer(CALLBACK(src, .proc/wakeup), 900)
|
||||
addtimer(CALLBACK(src, PROC_REF(wakeup)), 900)
|
||||
|
||||
var/area/random_area = random_station_area(TRUE)
|
||||
var/turf/random_turf = random_area.random_space()
|
||||
@@ -248,7 +248,7 @@
|
||||
|
||||
if(bot_amt>0 && linked_bots.len < max_bots)
|
||||
calc_spawn_delay()
|
||||
addtimer(CALLBACK(src, .proc/warpbots), spawn_delay)
|
||||
addtimer(CALLBACK(src, PROC_REF(warpbots)), spawn_delay)
|
||||
else
|
||||
max_bots_reached = 1
|
||||
|
||||
@@ -264,7 +264,7 @@
|
||||
if(max_bots_reached && activated == 1 && linked_bots.len < max_bots)
|
||||
max_bots_reached = 0
|
||||
calc_spawn_delay()
|
||||
addtimer(CALLBACK(src, .proc/warpbots), spawn_delay)
|
||||
addtimer(CALLBACK(src, PROC_REF(warpbots)), spawn_delay)
|
||||
|
||||
#undef NORMAL
|
||||
#undef RANGED
|
||||
|
||||
@@ -94,9 +94,9 @@
|
||||
if(!stat)
|
||||
if(stance == HOSTILE_STANCE_IDLE)
|
||||
if(last_processed_turf == src.loc)
|
||||
INVOKE_ASYNC(src, .proc/prospect)
|
||||
INVOKE_ASYNC(src, PROC_REF(prospect))
|
||||
else
|
||||
INVOKE_ASYNC(src, .proc/process_turf)
|
||||
INVOKE_ASYNC(src, PROC_REF(process_turf))
|
||||
else if(busy)
|
||||
busy = 0
|
||||
update_icon()
|
||||
|
||||
@@ -37,9 +37,9 @@
|
||||
setup_target_type_validators()
|
||||
|
||||
/mob/living/simple_animal/hostile/proc/setup_target_type_validators()
|
||||
target_type_validator_map[/mob/living] = CALLBACK(src, .proc/validator_living)
|
||||
target_type_validator_map[/obj/machinery/bot] = CALLBACK(src, .proc/validator_bot)
|
||||
target_type_validator_map[/obj/machinery/porta_turret] = CALLBACK(src, .proc/validator_turret)
|
||||
target_type_validator_map[/mob/living] = CALLBACK(src, PROC_REF(validator_living))
|
||||
target_type_validator_map[/obj/machinery/bot] = CALLBACK(src, PROC_REF(validator_bot))
|
||||
target_type_validator_map[/obj/machinery/porta_turret] = CALLBACK(src, PROC_REF(validator_turret))
|
||||
|
||||
/mob/living/simple_animal/hostile/Destroy()
|
||||
friends = null
|
||||
@@ -214,7 +214,7 @@ mob/living/simple_animal/hostile/hitby(atom/movable/AM as mob|obj,var/speed = TH
|
||||
if(target)
|
||||
face_atom(target)
|
||||
if(!ranged && smart_melee)
|
||||
addtimer(CALLBACK(src, .proc/PostAttack, target), 0.6 SECONDS)
|
||||
addtimer(CALLBACK(src, PROC_REF(PostAttack), target), 0.6 SECONDS)
|
||||
return target
|
||||
|
||||
/mob/living/simple_animal/hostile/proc/PostAttack(var/atom/target)
|
||||
@@ -287,7 +287,7 @@ mob/living/simple_animal/hostile/hitby(atom/movable/AM as mob|obj,var/speed = TH
|
||||
visible_message(SPAN_DANGER("[capitalize_first_letters(src.name)] fires at \the [target]!"))
|
||||
|
||||
if(rapid)
|
||||
var/datum/callback/shoot_cb = CALLBACK(src, .proc/shoot_wrapper, target, loc, src)
|
||||
var/datum/callback/shoot_cb = CALLBACK(src, PROC_REF(shoot_wrapper), target, loc, src)
|
||||
addtimer(shoot_cb, 1)
|
||||
addtimer(shoot_cb, 4)
|
||||
addtimer(shoot_cb, 6)
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
ion_trail = new(src)
|
||||
ion_trail.start()
|
||||
if(!malfunctioning)
|
||||
addtimer(CALLBACK(src, .proc/beam_out), 15 MINUTES)
|
||||
addtimer(CALLBACK(src, PROC_REF(beam_out)), 15 MINUTES)
|
||||
|
||||
// warp in effect
|
||||
var/matrix/M = matrix()
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
src.visible_message("<span class='danger'>\The [target] vanishes into \the [src]'s bag!</span>")
|
||||
target.forceMove(src)
|
||||
to_chat(target, "<span class='danger'>You have been captured by \the [src], you will soon be punished due to your misdeeds!</span>")
|
||||
addtimer(CALLBACK(src, .proc/send_to_hell, target), 5 MINUTES)
|
||||
addtimer(CALLBACK(src, PROC_REF(send_to_hell), target), 5 MINUTES)
|
||||
last_special = world.time + 100
|
||||
src.is_punishing = FALSE
|
||||
return
|
||||
@@ -112,7 +112,7 @@
|
||||
for(var/i in 1 to 5)
|
||||
var/mob/living/simple_animal/hostile/gift/T = new /mob/living/simple_animal/hostile/gift(get_turf(src))
|
||||
var/turf/landing = get_step(src, pick(alldirs))
|
||||
INVOKE_ASYNC(T, /atom/movable/.proc/throw_at, landing, 30, 5)
|
||||
INVOKE_ASYNC(T, TYPE_PROC_REF(/atom/movable, throw_at), landing, 30, 5)
|
||||
|
||||
/mob/living/simple_animal/hostile/krampus/proc/send_to_hell(mob/living/M)
|
||||
if(!M)
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
attack_mob(L)
|
||||
originator.eating = 1
|
||||
to_chat(L, "<span class='danger'>\The [src] begins digesting your upper body!</span>")
|
||||
addtimer(CALLBACK(src, .proc/devour, L), 50 SECONDS)
|
||||
addtimer(CALLBACK(src, PROC_REF(devour), L), 50 SECONDS)
|
||||
..()
|
||||
|
||||
/obj/item/trap/sarlacc/proc/devour(var/mob/living/C)
|
||||
@@ -280,7 +280,7 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/lesserworm/Initialize()
|
||||
. = ..()
|
||||
addtimer(CALLBACK(src, .proc/Penetrate), 6)
|
||||
addtimer(CALLBACK(src, PROC_REF(Penetrate)), 6)
|
||||
QDEL_IN(src, 15)
|
||||
|
||||
/mob/living/simple_animal/hostile/lesserworm/Destroy()
|
||||
|
||||
@@ -219,7 +219,7 @@
|
||||
icon_state = "bloater_bloating"
|
||||
icon_living = "bloater_bloating"
|
||||
has_exploded = TRUE
|
||||
addtimer(CALLBACK(src, .proc/explode), 5)
|
||||
addtimer(CALLBACK(src, PROC_REF(explode)), 5)
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/bloater/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(!has_exploded)
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
M.update_icon()
|
||||
M.pass_flags = PASSTABLE | PASSMOB
|
||||
M.layer = BELOW_MOB_LAYER
|
||||
addtimer(CALLBACK(src, .proc/do_landing, M), 1 MINUTE)
|
||||
addtimer(CALLBACK(src, PROC_REF(do_landing), M), 1 MINUTE)
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
/mob/living/simple_animal/hostile/viscerator/emp_act(severity)
|
||||
LoseTarget()
|
||||
stance = HOSTILE_STANCE_TIRED
|
||||
addtimer(CALLBACK(src, .proc/wakeup), 150)
|
||||
addtimer(CALLBACK(src, PROC_REF(wakeup)), 150)
|
||||
if(severity == 1.0)
|
||||
apply_damage(5)
|
||||
|
||||
|
||||
@@ -634,7 +634,7 @@
|
||||
if(!bleeding || previous_bleed_timer <= damage_inflicted)
|
||||
bleeding = TRUE
|
||||
previous_bleed_timer = damage_inflicted
|
||||
addtimer(CALLBACK(src, .proc/stop_bleeding), (damage_inflicted SECONDS) * blood_timer_mod, TIMER_UNIQUE | TIMER_OVERRIDE)
|
||||
addtimer(CALLBACK(src, PROC_REF(stop_bleeding)), (damage_inflicted SECONDS) * blood_timer_mod, TIMER_UNIQUE | TIMER_OVERRIDE)
|
||||
|
||||
/mob/living/simple_animal/proc/stop_bleeding()
|
||||
bleeding = FALSE
|
||||
@@ -740,7 +740,7 @@
|
||||
playsound(src, pick(emote_sounds), 75, 1)
|
||||
if(client)
|
||||
sound_time = FALSE
|
||||
addtimer(CALLBACK(src, .proc/reset_sound_time), 2 SECONDS)
|
||||
addtimer(CALLBACK(src, PROC_REF(reset_sound_time)), 2 SECONDS)
|
||||
|
||||
/mob/living/simple_animal/verb/change_name()
|
||||
set name = "Name Animal"
|
||||
|
||||
@@ -365,11 +365,11 @@
|
||||
end_pointing_effect()
|
||||
pointing_effect = new /obj/effect/decal/point(A)
|
||||
pointing_effect.invisibility = invisibility
|
||||
addtimer(CALLBACK(src, .proc/end_pointing_effect, pointing_effect), 2 SECONDS)
|
||||
addtimer(CALLBACK(src, PROC_REF(end_pointing_effect), pointing_effect), 2 SECONDS)
|
||||
else if(!invisibility)
|
||||
var/atom/movable/M = A
|
||||
M.add_filter("pointglow", 1, list(type = "drop_shadow", x = 0, y = -1, offset = 1, size = 1, color = "#F00"))
|
||||
addtimer(CALLBACK(M, /atom/movable.proc/remove_filter, "pointglow"), 2 SECONDS)
|
||||
addtimer(CALLBACK(M, TYPE_PROC_REF(/atom/movable, remove_filter), "pointglow"), 2 SECONDS)
|
||||
return TRUE
|
||||
|
||||
/mob/proc/end_pointing_effect()
|
||||
@@ -1110,7 +1110,7 @@
|
||||
/mob/living/carbon/human/flash_strong_pain()
|
||||
if(can_feel_pain())
|
||||
overlay_fullscreen("strong_pain", /obj/screen/fullscreen/strong_pain)
|
||||
addtimer(CALLBACK(src, .proc/clear_strong_pain), 10, TIMER_UNIQUE)
|
||||
addtimer(CALLBACK(src, PROC_REF(clear_strong_pain)), 10, TIMER_UNIQUE)
|
||||
|
||||
/mob/living/proc/clear_strong_pain()
|
||||
clear_fullscreen("strong_pain", 10)
|
||||
|
||||
Reference in New Issue
Block a user