mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-18 03:26:31 +01:00
use SIGNAL_HANDLER REEEEEE (#59242)
makes as many procs as i can find use the SIGNAL_HANDLER define which i assumed they all already did
This commit is contained in:
@@ -64,6 +64,7 @@ SUBSYSTEM_DEF(eigenstates)
|
||||
|
||||
///removes an object reference from the master list
|
||||
/datum/controller/subsystem/eigenstates/proc/remove_eigen_entry(atom/entry)
|
||||
SIGNAL_HANDLER
|
||||
var/id = eigen_id[entry]
|
||||
eigen_targets[id] -= entry
|
||||
eigen_id -= entry
|
||||
@@ -83,6 +84,8 @@ SUBSYSTEM_DEF(eigenstates)
|
||||
|
||||
///Finds the object within the master list, then sends the thing to the object's location
|
||||
/datum/controller/subsystem/eigenstates/proc/use_eigenlinked_atom(atom/object_sent_from, atom/movable/thing_to_send)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
var/id = eigen_id[object_sent_from]
|
||||
if(!id)
|
||||
stack_trace("[object_sent_from] attempted to eigenlink to something that didn't have a valid id!")
|
||||
@@ -110,5 +113,6 @@ SUBSYSTEM_DEF(eigenstates)
|
||||
|
||||
///Prevents tool use on the item
|
||||
/datum/controller/subsystem/eigenstates/proc/tool_interact(atom/source, mob/user, obj/item/item)
|
||||
SIGNAL_HANDLER
|
||||
to_chat(user, "<span class='notice'>The unstable nature of [source] makes it impossible to use [item] on [source.p_them()]!</span>")
|
||||
return COMPONENT_BLOCK_TOOL_ATTACK
|
||||
|
||||
@@ -167,6 +167,7 @@ SUBSYSTEM_DEF(statpanels)
|
||||
mc_data_encoded = url_encode(json_encode(mc_data))
|
||||
|
||||
/atom/proc/remove_from_cache()
|
||||
SIGNAL_HANDLER
|
||||
SSstatpanels.cached_images -= REF(src)
|
||||
|
||||
/// verbs that send information from the browser UI
|
||||
|
||||
@@ -188,12 +188,14 @@ have ways of interacting with a specific atom and control it. They posses a blac
|
||||
current_behavior.finish_action(src, FALSE)
|
||||
|
||||
/datum/ai_controller/proc/on_sentience_gained()
|
||||
SIGNAL_HANDLER
|
||||
UnregisterSignal(pawn, COMSIG_MOB_LOGIN)
|
||||
if(!continue_processing_when_client)
|
||||
set_ai_status(AI_STATUS_OFF) //Can't do anything while player is connected
|
||||
RegisterSignal(pawn, COMSIG_MOB_LOGOUT, .proc/on_sentience_lost)
|
||||
|
||||
/datum/ai_controller/proc/on_sentience_lost()
|
||||
SIGNAL_HANDLER
|
||||
UnregisterSignal(pawn, COMSIG_MOB_LOGOUT)
|
||||
set_ai_status(AI_STATUS_ON) //Can't do anything while player is connected
|
||||
RegisterSignal(pawn, COMSIG_MOB_LOGIN, .proc/on_sentience_gained)
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
|
||||
///Signal response for when the item is picked up; stops listening for follow up equips, just waits for a drop.
|
||||
/datum/ai_controller/haunted/proc/on_equip(datum/source, mob/equipper, slot)
|
||||
SIGNAL_HANDLER
|
||||
UnregisterSignal(pawn, COMSIG_ITEM_EQUIPPED)
|
||||
var/list/hauntee_list = blackboard[BB_TO_HAUNT_LIST]
|
||||
hauntee_list[equipper] = hauntee_list[equipper] + HAUNTED_ITEM_AGGRO_ADDITION //You have now become one of the victims of the HAAAAUNTTIIIINNGGG OOOOOO~~~
|
||||
@@ -57,5 +58,6 @@
|
||||
|
||||
///Flip it so we listen for equip again but not for drop.
|
||||
/datum/ai_controller/haunted/proc/on_dropped(datum/source, mob/user)
|
||||
SIGNAL_HANDLER
|
||||
RegisterSignal(pawn, COMSIG_ITEM_EQUIPPED, .proc/on_equip)
|
||||
UnregisterSignal(pawn, COMSIG_ITEM_DROPPED)
|
||||
|
||||
+2
-1
@@ -59,9 +59,10 @@
|
||||
* direction: in what direction mover moved from.
|
||||
*/
|
||||
/datum/beam/proc/redrawing(atom/movable/mover, atom/oldloc, direction)
|
||||
SIGNAL_HANDLER
|
||||
if(origin && target && get_dist(origin,target)<max_distance && origin.z == target.z)
|
||||
QDEL_LIST(elements)
|
||||
Draw()
|
||||
INVOKE_ASYNC(src, .proc/Draw)
|
||||
else
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -78,6 +78,7 @@
|
||||
speech_args[SPEECH_MESSAGE] = ""
|
||||
|
||||
/datum/brain_trauma/special/obsessed/proc/on_hug(mob/living/hugger, mob/living/hugged)
|
||||
SIGNAL_HANDLER
|
||||
if(hugged == obsession)
|
||||
obsession_hug_count++
|
||||
|
||||
|
||||
@@ -7,4 +7,5 @@
|
||||
|
||||
/// Called when parent is added to the container.
|
||||
/datum/component/container_item/proc/try_attach(datum/source, atom/container, mob/user)
|
||||
SIGNAL_HANDLER
|
||||
return FALSE
|
||||
|
||||
@@ -71,6 +71,7 @@
|
||||
flavour?.add_flavour(arglist(flavour_args))
|
||||
|
||||
/datum/component/ice_cream_holder/proc/on_update_name(atom/source, updates)
|
||||
SIGNAL_HANDLER
|
||||
var/obj/obj = source
|
||||
if(istype(obj) && obj.renamedByPlayer) //Renamed by the player.
|
||||
return
|
||||
@@ -86,6 +87,7 @@
|
||||
source.name = "[english_list(unique_list)] [name_to_use]"
|
||||
|
||||
/datum/component/ice_cream_holder/proc/on_update_desc(atom/source, updates)
|
||||
SIGNAL_HANDLER
|
||||
var/obj/obj = source
|
||||
if(istype(obj) && obj.renamedByPlayer) //Renamed by the player.
|
||||
return
|
||||
@@ -103,6 +105,7 @@
|
||||
source.desc = "A delicious [initial(source.name)] filled with scoops of [english_list(scoops)] icecream. That's as many as [scoops_len] scoops!"
|
||||
|
||||
/datum/component/ice_cream_holder/proc/on_examine_more(atom/source, mob/mob, list/examine_list)
|
||||
SIGNAL_HANDLER
|
||||
var/scoops_len = length(scoops)
|
||||
if(scoops_len == 1 || length(uniqueList(scoops)) == 1) /// Only one flavour.
|
||||
var/key = scoops[1]
|
||||
@@ -115,6 +118,7 @@
|
||||
examine_list += "[source.p_theyre(TRUE)] filled with scoops of [english_list(scoops)] icecream. That's as many as [scoops_len] scoops!"
|
||||
|
||||
/datum/component/ice_cream_holder/proc/on_update_overlays(atom/source, list/new_overlays)
|
||||
SIGNAL_HANDLER
|
||||
if(!scoops)
|
||||
return
|
||||
var/added_offset = 0
|
||||
@@ -129,6 +133,7 @@
|
||||
|
||||
/// Attack the ice cream vat to get some ice cream. This will change as new ways of getting ice cream are added.
|
||||
/datum/component/ice_cream_holder/proc/on_item_attack_obj(obj/item/source, obj/target, mob/user)
|
||||
SIGNAL_HANDLER
|
||||
if(!istype(target, /obj/machinery/icecream_vat))
|
||||
return
|
||||
var/obj/machinery/icecream_vat/dispenser = target
|
||||
@@ -138,7 +143,7 @@
|
||||
if(flavour.add_flavour(src, dispenser.beaker?.reagents.total_volume ? dispenser.beaker.reagents : null))
|
||||
dispenser.visible_message("[icon2html(dispenser, viewers(source))] <span class='info'>[user] scoops delicious [dispenser.selected_flavour] ice cream into [source].</span>")
|
||||
dispenser.product_types[dispenser.selected_flavour]--
|
||||
dispenser.updateDialog()
|
||||
INVOKE_ASYNC(dispenser, /obj/machinery/icecream_vat.proc/updateDialog)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>There is not enough ice cream left!</span>")
|
||||
else
|
||||
|
||||
@@ -97,6 +97,7 @@
|
||||
autofire_on(source.client)
|
||||
|
||||
/datum/component/automatic_fire/proc/on_mouse_down(client/source, atom/_target, turf/location, control, params)
|
||||
SIGNAL_HANDLER
|
||||
var/list/modifiers = params2list(params) //If they're shift+clicking, for example, let's not have them accidentally shoot.
|
||||
|
||||
if(LAZYACCESS(modifiers, SHIFT_CLICK))
|
||||
@@ -136,7 +137,7 @@
|
||||
target = _target
|
||||
target_loc = get_turf(target)
|
||||
mouse_parameters = params
|
||||
start_autofiring()
|
||||
INVOKE_ASYNC(src, .proc/start_autofiring)
|
||||
|
||||
|
||||
//Dakka-dakka
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
limiting_spam = FALSE
|
||||
|
||||
/datum/component/honkspam/proc/interact(mob/user)
|
||||
SIGNAL_HANDLER
|
||||
if(!limiting_spam)
|
||||
limiting_spam = TRUE
|
||||
var/obj/item/parent_item = parent
|
||||
|
||||
@@ -88,6 +88,7 @@
|
||||
try_infect(target, hit_zone)
|
||||
|
||||
/datum/component/infective/proc/try_infect_attack(datum/source, mob/living/target, mob/living/user)
|
||||
SIGNAL_HANDLER
|
||||
if(!iscarbon(target)) //this case will be handled by try_infect_attack_zone
|
||||
try_infect(target)
|
||||
try_infect(user, BODY_ZONE_L_ARM)
|
||||
|
||||
@@ -151,6 +151,7 @@
|
||||
end_orbit(orbiter)
|
||||
|
||||
/datum/component/orbiter/proc/orbiter_glide_size_update(datum/source, target)
|
||||
SIGNAL_HANDLER
|
||||
for(var/orbiter in orbiter_list)
|
||||
var/atom/movable/movable_orbiter = orbiter
|
||||
movable_orbiter.glide_size = target
|
||||
|
||||
@@ -260,6 +260,7 @@
|
||||
|
||||
///One of our pellets disappeared due to hitting their max range (or just somehow got qdel'd), remove it from our list and check if we're done (terminated == num_pellets)
|
||||
/datum/component/pellet_cloud/proc/pellet_range(obj/projectile/P)
|
||||
SIGNAL_HANDLER
|
||||
pellets -= P
|
||||
terminated++
|
||||
UnregisterSignal(P, list(COMSIG_PARENT_QDELETING, COMSIG_PROJECTILE_RANGE_OUT, COMSIG_PROJECTILE_SELF_ON_HIT))
|
||||
|
||||
@@ -216,6 +216,7 @@
|
||||
|
||||
///settle wherever we are, and start behaving like a piece of plumbing
|
||||
/datum/component/plumbing/proc/enable(obj/object, datum/component/component)
|
||||
SIGNAL_HANDLER
|
||||
if(active || (component && component != src))
|
||||
UnregisterSignal(parent, list(COMSIG_COMPONENT_ADDED))
|
||||
return
|
||||
@@ -302,6 +303,7 @@
|
||||
AM.update_appearance()
|
||||
|
||||
/datum/component/plumbing/proc/change_ducting_layer(obj/caller, obj/O, new_layer = DUCT_LAYER_DEFAULT)
|
||||
SIGNAL_HANDLER
|
||||
ducting_layer = new_layer
|
||||
|
||||
if(ismovable(parent))
|
||||
|
||||
@@ -36,4 +36,5 @@
|
||||
return TRUE
|
||||
|
||||
/datum/component/pricetag/proc/return_ratio()
|
||||
SIGNAL_HANDLER
|
||||
return default_profit_ratio
|
||||
|
||||
@@ -115,6 +115,7 @@
|
||||
|
||||
/// If we're a cyborg or animal and we spin, we yeet whoever's on us off us
|
||||
/datum/component/riding/creature/proc/check_emote(mob/living/user, datum/emote/emote)
|
||||
SIGNAL_HANDLER
|
||||
if((!iscyborg(user) && !isanimal(user)) || !istype(emote, /datum/emote/spin))
|
||||
return
|
||||
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
|
||||
/// Fired when the singularity is fired at with the BSA and deletes it
|
||||
/datum/component/singularity/proc/bluespace_reaction()
|
||||
SIGNAL_HANDLER
|
||||
if (!bsa_targetable)
|
||||
return
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
If amount_left is equal to -1, the component is infinite and will never delete itself.
|
||||
*/
|
||||
/datum/component/sound_player/proc/play_sound()
|
||||
SIGNAL_HANDLER
|
||||
playsound(parent, pickweight(sounds), volume, TRUE)
|
||||
switch(amount_left)
|
||||
if(-1)
|
||||
|
||||
@@ -92,12 +92,14 @@
|
||||
return FALSE
|
||||
|
||||
/datum/component/storage/concrete/proc/on_contents_del(datum/source, atom/A)
|
||||
SIGNAL_HANDLER
|
||||
var/atom/real_location = parent
|
||||
if(A in real_location)
|
||||
usr = null
|
||||
remove_from_storage(A, null)
|
||||
|
||||
/datum/component/storage/concrete/proc/on_deconstruct(datum/source, disassembled)
|
||||
SIGNAL_HANDLER
|
||||
if(drop_all_on_deconstruct)
|
||||
do_quick_empty()
|
||||
|
||||
|
||||
@@ -42,6 +42,7 @@ This component is used in vat growing to swab for microbiological samples which
|
||||
|
||||
///Changes examine based on your sample
|
||||
/datum/component/swabbing/proc/examine(datum/source, mob/user, list/examine_list)
|
||||
SIGNAL_HANDLER
|
||||
if(LAZYLEN(swabbed_items))
|
||||
examine_list += "<span class='nicegreen'>There is a microbiological sample on [parent]!</span>"
|
||||
examine_list += "<span class='notice'>You can see the following micro-organisms:</span>\n"
|
||||
@@ -53,7 +54,7 @@ This component is used in vat growing to swab for microbiological samples which
|
||||
|
||||
///Ran when you attack an object, tries to get a swab of the object. if a swabbable surface is found it will run behavior and hopefully
|
||||
/datum/component/swabbing/proc/try_to_swab(datum/source, atom/target, mob/user, params)
|
||||
set waitfor = FALSE //This prevents do_after() from making this proc not return it's value.
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(istype(target, /obj/structure/table))//help how do i do this less shitty
|
||||
return NONE //idk bro pls send help
|
||||
@@ -96,6 +97,9 @@ This component is used in vat growing to swab for microbiological samples which
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='notice'>You start swabbing [target] for samples!</span>")
|
||||
INVOKE_ASYNC(src, .proc/async_try_to_swab, target, user)
|
||||
|
||||
/datum/component/swabbing/proc/async_try_to_swab(atom/target, mob/user)
|
||||
if(!do_after(user, 3 SECONDS, target)) // Start swabbing boi
|
||||
return
|
||||
|
||||
@@ -121,8 +125,10 @@ This component is used in vat growing to swab for microbiological samples which
|
||||
|
||||
///Handle any special overlay cases on the item itself
|
||||
/datum/component/swabbing/proc/handle_overlays(datum/source, list/overlays)
|
||||
SIGNAL_HANDLER
|
||||
update_overlays?.Invoke(overlays, swabbed_items)
|
||||
|
||||
///Handle any special icon cases on the item itself
|
||||
/datum/component/swabbing/proc/handle_icon(datum/source)
|
||||
SIGNAL_HANDLER
|
||||
update_icons?.Invoke(swabbed_items)
|
||||
|
||||
@@ -254,6 +254,7 @@
|
||||
* on_attack triggers on attack with the parent item
|
||||
*/
|
||||
/datum/component/two_handed/proc/on_attack(obj/item/source, mob/living/target, mob/living/user)
|
||||
SIGNAL_HANDLER
|
||||
if(wielded && attacksound)
|
||||
var/obj/item/parent_item = parent
|
||||
playsound(parent_item.loc, attacksound, 50, TRUE)
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
REMOVE_TRAIT(target, TRAIT_DRYABLE, ELEMENT_TRAIT)
|
||||
|
||||
/datum/element/dryable/proc/finish_drying(atom/source)
|
||||
SIGNAL_HANDLER
|
||||
var/atom/dried_atom = source
|
||||
if(dry_result == dried_atom.type)//if the dried type is the same as our currrent state, don't bother creating a whole new item, just re-color it.
|
||||
var/atom/movable/resulting_atom = dried_atom
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
|
||||
///Updates old and new turf loc opacities.
|
||||
/datum/element/light_blocking/proc/on_target_move(atom/movable/source, atom/OldLoc, Dir, Forced = FALSE)
|
||||
SIGNAL_HANDLER
|
||||
if(isturf(OldLoc))
|
||||
var/turf/old_turf = OldLoc
|
||||
old_turf.remove_opacity_source(source)
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
|
||||
/// Handles beginning processing objects.
|
||||
/datum/element/obj_regen/proc/on_take_damage(obj/target, damage_amt)
|
||||
SIGNAL_HANDLER
|
||||
if(!damage_amt)
|
||||
return
|
||||
if(!length(processing))
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
. = ..()
|
||||
|
||||
/datum/element/skittish/proc/Bump(mob/living/scooby, atom/target)
|
||||
SIGNAL_HANDLER
|
||||
if(scooby.stat != CONSCIOUS || scooby.m_intent != MOVE_INTENT_RUN)
|
||||
return
|
||||
|
||||
|
||||
@@ -305,6 +305,7 @@
|
||||
|
||||
/// Something fishy is going on here...
|
||||
/datum/status_effect/high_fiving/proc/dropped_slap(obj/item/source)
|
||||
SIGNAL_HANDLER
|
||||
slap_item = null
|
||||
|
||||
//this effect gives the user an alert they can use to surrender quickly
|
||||
@@ -525,6 +526,7 @@
|
||||
current_cycle++
|
||||
|
||||
/datum/status_effect/eigenstasium/proc/remove_clone_from_var()
|
||||
SIGNAL_HANDLER
|
||||
UnregisterSignal(alt_clone, COMSIG_PARENT_QDELETING)
|
||||
|
||||
/datum/status_effect/eigenstasium/on_remove()
|
||||
|
||||
@@ -176,6 +176,7 @@
|
||||
*/
|
||||
|
||||
/datum/wound/blunt/proc/update_inefficiencies()
|
||||
SIGNAL_HANDLER
|
||||
if(limb.body_zone in list(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG))
|
||||
if(limb.current_gauze)
|
||||
limp_slowdown = initial(limp_slowdown) * limb.current_gauze.splint_factor
|
||||
@@ -222,6 +223,7 @@
|
||||
|
||||
/// Getting smushed in an airlock/firelock is a last-ditch attempt to try relocating your limb
|
||||
/datum/wound/blunt/moderate/proc/door_crush()
|
||||
SIGNAL_HANDLER
|
||||
if(prob(33))
|
||||
victim.visible_message("<span class='danger'>[victim]'s dislocated [limb.name] pops back into place!</span>", "<span class='userdanger'>Your dislocated [limb.name] pops back into place! Ow!</span>")
|
||||
remove_wound()
|
||||
|
||||
@@ -472,6 +472,7 @@
|
||||
|
||||
///Check if this atoms eye is still alive (probably)
|
||||
/atom/proc/check_eye(mob/user)
|
||||
SIGNAL_HANDLER
|
||||
return
|
||||
|
||||
/atom/proc/Bumped(atom/movable/AM)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
RegisterSignal(SSdcs, COMSIG_GLOB_PRE_RANDOM_EVENT, .proc/on_pre_random_event)
|
||||
|
||||
/datum/game_mode/dynamic/proc/on_pre_random_event(datum/source, datum/round_event_control/round_event_control)
|
||||
SIGNAL_HANDLER
|
||||
if (!round_event_control.dynamic_should_hijack)
|
||||
return
|
||||
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
|
||||
///Used to clean up variables after the card has been removed, unregisters the removal signal, sets inserted ID to null, and updates the icon.
|
||||
/obj/machinery/accounting/proc/remove_card()
|
||||
SIGNAL_HANDLER
|
||||
UnregisterSignal(inserted_id, COMSIG_PARENT_QDELETING)
|
||||
inserted_id = null
|
||||
update_appearance()
|
||||
|
||||
@@ -782,6 +782,7 @@
|
||||
update_label()
|
||||
|
||||
/obj/item/card/id/advanced/proc/on_holding_card_slot_moved(obj/item/computer_hardware/card_slot/source, atom/old_loc, dir, forced)
|
||||
SIGNAL_HANDLER
|
||||
if(istype(old_loc, /obj/item/modular_computer/tablet))
|
||||
UnregisterSignal(old_loc, COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED)
|
||||
|
||||
|
||||
@@ -35,11 +35,11 @@
|
||||
qdel(PA)
|
||||
else
|
||||
PA = new(src)
|
||||
user.put_in_hands(PA)
|
||||
INVOKE_ASYNC(user, /mob.proc/put_in_hands, PA)
|
||||
|
||||
/obj/item/chrono_eraser/item_action_slot_check(slot, mob/user)
|
||||
if(slot == ITEM_SLOT_BACK)
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/obj/item/gun/energy/chrono_gun
|
||||
name = "T.E.D. Projection Apparatus"
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
RegisterSignal(src, COMSIG_COMPONENT_NTNET_ACK, .proc/good_signal)
|
||||
|
||||
/obj/item/door_remote/proc/bad_signal(datum/source, datum/netdata/data, error_code)
|
||||
SIGNAL_HANDLER
|
||||
if(QDELETED(data.user))
|
||||
return // can't send a message to a missing user
|
||||
if(error_code == NETWORK_ERROR_UNAUTHORIZED)
|
||||
@@ -32,6 +33,7 @@
|
||||
|
||||
|
||||
/obj/item/door_remote/proc/good_signal(datum/source, datum/netdata/data, error_code)
|
||||
SIGNAL_HANDLER
|
||||
if(QDELETED(data.user))
|
||||
return
|
||||
var/toggled = data.data["data"]
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
update_power()
|
||||
|
||||
/obj/item/defibrillator/ui_action_click()
|
||||
toggle_paddles()
|
||||
INVOKE_ASYNC(src, .proc/toggle_paddles)
|
||||
|
||||
//ATTACK HAND IGNORING PARENT RETURN VALUE
|
||||
/obj/item/defibrillator/attack_hand(mob/user, list/modifiers)
|
||||
|
||||
@@ -1262,6 +1262,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
. += P
|
||||
|
||||
/obj/item/pda/proc/pda_no_detonate()
|
||||
SIGNAL_HANDLER
|
||||
return COMPONENT_PDA_NO_DETONATE
|
||||
|
||||
#undef PDA_SCANNER_NONE
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
/obj/item/geiger_counter/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
QDEL_NULL(soundloop)
|
||||
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/item/geiger_counter/process(delta_time)
|
||||
@@ -211,6 +211,7 @@
|
||||
listeningTo = user
|
||||
|
||||
/obj/item/geiger_counter/cyborg/proc/redirect_rad_act(datum/source, amount)
|
||||
SIGNAL_HANDLER
|
||||
rad_act(amount)
|
||||
|
||||
/obj/item/geiger_counter/cyborg/dropped()
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
UnregisterSignal(M, COMSIG_MOB_SAY)
|
||||
|
||||
/obj/item/megaphone/proc/handle_speech(mob/living/carbon/user, list/speech_args)
|
||||
SIGNAL_HANDLER
|
||||
if (user.get_active_held_item() == src)
|
||||
if(spamcheck > world.time)
|
||||
to_chat(user, "<span class='warning'>\The [src] needs to recharge!</span>")
|
||||
|
||||
@@ -120,6 +120,7 @@
|
||||
* * source - the area that just had a power change.
|
||||
*/
|
||||
/obj/item/radio/intercom/proc/AreaPowerCheck(datum/source)
|
||||
SIGNAL_HANDLER
|
||||
var/area/current_area = get_area(src)
|
||||
if(!current_area)
|
||||
on = FALSE
|
||||
|
||||
@@ -264,6 +264,7 @@
|
||||
F.default_ignite(location,release_amount)
|
||||
|
||||
/obj/item/flamethrower/proc/instant_refill()
|
||||
SIGNAL_HANDLER
|
||||
if(ptank)
|
||||
var/datum/gas_mixture/tank_mix = ptank.return_air()
|
||||
tank_mix.assert_gas(/datum/gas/plasma)
|
||||
|
||||
@@ -192,6 +192,7 @@
|
||||
|
||||
///Prevents grilling burnt shit from well, burning.
|
||||
/obj/item/food/badrecipe/proc/OnGrill()
|
||||
SIGNAL_HANDLER
|
||||
return COMPONENT_HANDLED_GRILLING
|
||||
|
||||
/obj/item/food/carrotfries
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
SEND_SIGNAL(src, COMSIG_IMPLANT_ACTIVATED)
|
||||
|
||||
/obj/item/implant/ui_action_click()
|
||||
activate("action_button")
|
||||
INVOKE_ASYNC(src, .proc/activate, "action_button")
|
||||
|
||||
/obj/item/implant/proc/can_be_implanted_in(mob/living/target)
|
||||
if(issilicon(target))
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
* the component, so delete itself.
|
||||
*/
|
||||
/obj/item/implant/uplink/proc/_component_removal(datum/source, datum/component/component)
|
||||
SIGNAL_HANDLER
|
||||
if(istype(component, /datum/component/uplink))
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -502,6 +502,7 @@
|
||||
RegisterSignal(defib_instance, list(COMSIG_PARENT_QDELETING, COMSIG_MOVABLE_MOVED), .proc/on_defib_instance_qdel_or_moved)
|
||||
|
||||
/obj/item/borg/upgrade/defib/backpack/proc/on_defib_instance_qdel_or_moved(obj/item/defibrillator/D)
|
||||
SIGNAL_HANDLER
|
||||
defib_instance = null
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -144,6 +144,7 @@
|
||||
listeningTo = null
|
||||
|
||||
/obj/item/storage/bag/ore/proc/Pickup_ores(mob/living/user)
|
||||
SIGNAL_HANDLER
|
||||
var/show_message = FALSE
|
||||
var/obj/structure/ore_box/box
|
||||
var/turf/tile = user.loc
|
||||
|
||||
@@ -591,6 +591,7 @@
|
||||
|
||||
///freezes the organ and loops bodyparts like heads
|
||||
/obj/item/storage/organbox/proc/freeze(datum/source, obj/item/I)
|
||||
SIGNAL_HANDLER
|
||||
if(isorgan(I))
|
||||
var/obj/item/organ/organ = I
|
||||
organ.organ_flags |= ORGAN_FROZEN
|
||||
@@ -604,6 +605,7 @@
|
||||
|
||||
///unfreezes the organ and loops bodyparts like heads
|
||||
/obj/item/storage/organbox/proc/unfreeze(datum/source, obj/item/I)
|
||||
SIGNAL_HANDLER
|
||||
if(isorgan(I))
|
||||
var/obj/item/organ/organ = I
|
||||
organ.organ_flags &= ~ORGAN_FROZEN
|
||||
|
||||
@@ -74,10 +74,11 @@
|
||||
ion_trail.stop()
|
||||
UnregisterSignal(user, COMSIG_MOVABLE_MOVED)
|
||||
UnregisterSignal(user, COMSIG_MOVABLE_PRE_MOVE)
|
||||
|
||||
|
||||
user.remove_movespeed_modifier(/datum/movespeed_modifier/jetpack/fullspeed)
|
||||
|
||||
/obj/item/tank/jetpack/proc/move_react(mob/user)
|
||||
SIGNAL_HANDLER
|
||||
if(!on)//If jet dont work, it dont work
|
||||
return
|
||||
if(!user || !user.client)//Don't allow jet self using
|
||||
@@ -94,6 +95,7 @@
|
||||
allow_thrust(0.01, user)
|
||||
|
||||
/obj/item/tank/jetpack/proc/pre_move_react(mob/user)
|
||||
SIGNAL_HANDLER
|
||||
ion_trail.oldposition = get_turf(src)
|
||||
|
||||
/obj/item/tank/jetpack/proc/allow_thrust(num, mob/living/user)
|
||||
|
||||
@@ -190,6 +190,7 @@
|
||||
ui_interact(user)
|
||||
|
||||
/mob/proc/unset_machine()
|
||||
SIGNAL_HANDLER
|
||||
if(!machine)
|
||||
return
|
||||
UnregisterSignal(machine, COMSIG_PARENT_QDELETING)
|
||||
|
||||
@@ -142,6 +142,7 @@
|
||||
* Cleans up behavior for when the attached item is deleted or removed.
|
||||
*/
|
||||
/obj/structure/training_machine/proc/on_attached_delete()
|
||||
SIGNAL_HANDLER
|
||||
UnregisterSignal(attached_item, COMSIG_PARENT_QDELETING)
|
||||
vis_contents -= attached_item
|
||||
attached_item = null
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
RegisterSignal(owner, COMSIG_MOB_ALLOWED, .proc/free_access)
|
||||
|
||||
/obj/item/organ/heart/gland/access/proc/free_access(datum/source, obj/O)
|
||||
SIGNAL_HANDLER
|
||||
return TRUE
|
||||
|
||||
/obj/item/organ/heart/gland/access/Remove(mob/living/carbon/M, special = 0)
|
||||
|
||||
@@ -97,6 +97,7 @@
|
||||
|
||||
///What happens to the heretic once he dies, used to remove any custom perks
|
||||
/datum/antagonist/heretic/proc/on_death()
|
||||
SIGNAL_HANDLER
|
||||
|
||||
for(var/knowledge_index in researched_knowledge)
|
||||
var/datum/eldritch_knowledge/knowledge = researched_knowledge[knowledge_index]
|
||||
|
||||
@@ -133,6 +133,7 @@
|
||||
* Fixes any bugs that are caused by late Generate() or exchanging clients
|
||||
*/
|
||||
/datum/reality_smash_tracker/proc/ReworkNetwork()
|
||||
SIGNAL_HANDLER
|
||||
listclearnulls(smashes)
|
||||
for(var/mind in targets)
|
||||
if(isnull(mind))
|
||||
|
||||
@@ -67,6 +67,7 @@
|
||||
ghouls += humie
|
||||
|
||||
/datum/eldritch_knowledge/flesh_ghoul/proc/remove_ghoul(datum/source)
|
||||
SIGNAL_HANDLER
|
||||
var/mob/living/carbon/human/humie = source
|
||||
ghouls -= humie
|
||||
humie.mind.remove_antag_datum(/datum/antagonist/heretic_monster)
|
||||
|
||||
@@ -113,6 +113,7 @@
|
||||
src.user = user
|
||||
|
||||
/obj/item/borg_chameleon/proc/disrupt(mob/living/silicon/robot/user)
|
||||
SIGNAL_HANDLER
|
||||
if(active)
|
||||
to_chat(user, "<span class='danger'>Your chameleon field deactivates.</span>")
|
||||
deactivate(user)
|
||||
|
||||
@@ -71,6 +71,7 @@
|
||||
new /obj/effect/pod_landingzone(empty_pod_turf, empty_pod)
|
||||
|
||||
/datum/syndicate_contract/proc/enter_check(datum/source, sent_mob)
|
||||
SIGNAL_HANDLER
|
||||
if (istype(source, /obj/structure/closet/supplypod/extractionpod))
|
||||
if (isliving(sent_mob))
|
||||
var/mob/living/M = sent_mob
|
||||
@@ -120,7 +121,7 @@
|
||||
target.dna.species.give_important_for_life(target)
|
||||
|
||||
// After pod is sent we start the victim narrative/heal.
|
||||
handleVictimExperience(M)
|
||||
INVOKE_ASYNC(src, .proc/handleVictimExperience, M)
|
||||
|
||||
// This is slightly delayed because of the sleep calls above to handle the narrative.
|
||||
// We don't want to tell the station instantly.
|
||||
@@ -136,17 +137,20 @@
|
||||
priority_announce("One of your crew was captured by a rival organisation - we've needed to pay their ransom to bring them back. \
|
||||
As is policy we've taken a portion of the station's funds to offset the overall cost.", null, null, null, "Nanotrasen Asset Protection")
|
||||
|
||||
sleep(30)
|
||||
INVOKE_ASYNC(src, .proc/finish_enter)
|
||||
|
||||
// Pay contractor their portion of ransom
|
||||
if (status == CONTRACT_STATUS_COMPLETE)
|
||||
var/obj/item/card/id/C = contract.owner.current?.get_idcard(TRUE)
|
||||
/datum/syndicate_contract/proc/finish_enter()
|
||||
sleep(30)
|
||||
|
||||
if(C?.registered_account)
|
||||
C.registered_account.adjust_money(ransom * 0.35)
|
||||
// Pay contractor their portion of ransom
|
||||
if (status == CONTRACT_STATUS_COMPLETE)
|
||||
var/obj/item/card/id/C = contract.owner.current?.get_idcard(TRUE)
|
||||
|
||||
C.registered_account.bank_card_talk("We've processed the ransom, agent. Here's your cut - your balance is now \
|
||||
[C.registered_account.account_balance] cr.", TRUE)
|
||||
if(C?.registered_account)
|
||||
C.registered_account.adjust_money(ransom * 0.35)
|
||||
|
||||
C.registered_account.bank_card_talk("We've processed the ransom, agent. Here's your cut - your balance is now \
|
||||
[C.registered_account.account_balance] cr.", TRUE)
|
||||
|
||||
// They're off to holding - handle the return timer and give some text about what's going on.
|
||||
/datum/syndicate_contract/proc/handleVictimExperience(mob/living/M)
|
||||
|
||||
@@ -182,6 +182,7 @@
|
||||
|
||||
///Unregister the connected_machine (either when qdel this or the sender)
|
||||
/obj/machinery/bluespace_vendor/proc/unregister_machine()
|
||||
SIGNAL_HANDLER
|
||||
UnregisterSignal(connected_machine, COMSIG_PARENT_QDELETING)
|
||||
LAZYREMOVE(connected_machine.vendors, src)
|
||||
connected_machine = null
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
* Called in Initialize(), set the showpipe var to true or false depending on the situation, calls update_icon()
|
||||
*/
|
||||
/obj/machinery/atmospherics/components/proc/hide_pipe(datum/source, covered)
|
||||
SIGNAL_HANDLER
|
||||
showpipe = !covered
|
||||
update_appearance()
|
||||
|
||||
|
||||
@@ -113,6 +113,7 @@
|
||||
* * only_signals: default FALSE, if true the proc will not call the deactivate() proc
|
||||
*/
|
||||
/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/unregister_signals(only_signals = FALSE)
|
||||
SIGNAL_HANDLER
|
||||
UnregisterSignal(linked_interface, COMSIG_PARENT_QDELETING)
|
||||
UnregisterSignal(linked_input, COMSIG_PARENT_QDELETING)
|
||||
UnregisterSignal(linked_output, COMSIG_PARENT_QDELETING)
|
||||
|
||||
@@ -487,6 +487,7 @@
|
||||
qdel(src)//runs disconnect code
|
||||
|
||||
/obj/item/clothing/head/helmet/monkey_sentience/proc/make_fall_off()
|
||||
SIGNAL_HANDLER
|
||||
if(magnification)
|
||||
visible_message("<span class='warning'>[src] falls off of [magnification]'s head as it changes shape!</span>")
|
||||
magnification.dropItemToGround(src)
|
||||
|
||||
@@ -225,6 +225,7 @@
|
||||
UnregisterSignal(M, COMSIG_MOB_SAY)
|
||||
|
||||
/obj/item/clothing/head/warden/drill/proc/handle_speech(datum/source, mob/speech_args)
|
||||
SIGNAL_HANDLER
|
||||
var/message = speech_args[SPEECH_MESSAGE]
|
||||
if(message[1] != "*")
|
||||
switch (mode)
|
||||
|
||||
@@ -447,6 +447,7 @@
|
||||
UnregisterSignal(M, COMSIG_MOB_SAY)
|
||||
|
||||
/obj/item/clothing/head/frenchberet/proc/handle_speech(datum/source, mob/speech_args)
|
||||
SIGNAL_HANDLER
|
||||
var/message = speech_args[SPEECH_MESSAGE]
|
||||
if(message[1] != "*")
|
||||
message = " [message]"
|
||||
|
||||
@@ -202,6 +202,7 @@
|
||||
|
||||
///check_trip runs on each step to see if we fall over as a result of our lace status. Knotted laces are a guaranteed trip, while untied shoes are just a chance to stumble
|
||||
/obj/item/clothing/shoes/proc/check_trip()
|
||||
SIGNAL_HANDLER
|
||||
var/mob/living/carbon/human/our_guy = loc
|
||||
if(!istype(our_guy)) // are they REALLY /our guy/?
|
||||
return
|
||||
|
||||
@@ -735,6 +735,7 @@
|
||||
var/mob/listeningTo
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/ancient/proc/on_mob_move()
|
||||
SIGNAL_HANDLER
|
||||
var/mob/living/carbon/human/H = loc
|
||||
if(!istype(H) || H.wear_suit != src)
|
||||
return
|
||||
|
||||
@@ -148,6 +148,7 @@
|
||||
UnregisterSignal(user, COMSIG_MOB_STATCHANGE, .proc/resurrect)
|
||||
|
||||
/obj/item/clothing/suit/hooded/cloak/godslayer/proc/resurrect(mob/living/carbon/user, new_stat)
|
||||
SIGNAL_HANDLER
|
||||
if(new_stat > CONSCIOUS && new_stat < DEAD && COOLDOWN_FINISHED(src, effect_cooldown))
|
||||
user.heal_ordered_damage(heal_amount, damage_heal_order)
|
||||
user.visible_message("<span class='notice'>[user] suddenly revives, as their armor swirls with demonic energy!</span>", "<span class='notice'>You suddenly feel invigorated!</span>")
|
||||
|
||||
@@ -420,4 +420,5 @@
|
||||
|
||||
///What happens when we examine the uniform
|
||||
/obj/item/clothing/accessory/allergy_dogtag/proc/on_examine(datum/source, mob/user, list/examine_list)
|
||||
SIGNAL_HANDLER
|
||||
examine_list += "The dogtag has a listing of allergies : [display]"
|
||||
|
||||
@@ -237,7 +237,8 @@
|
||||
* * user - The user to show the experiment configuration panel to
|
||||
*/
|
||||
/datum/component/experiment_handler/proc/configure_experiment(datum/source, mob/user)
|
||||
ui_interact(user)
|
||||
SIGNAL_HANDLER
|
||||
INVOKE_ASYNC(src, .proc/ui_interact, user)
|
||||
|
||||
/**
|
||||
* Attempts to show the user the experiment configuration panel
|
||||
|
||||
@@ -270,6 +270,7 @@ GLOBAL_LIST_INIT(scan_conditions,init_scan_conditions())
|
||||
return current_scan
|
||||
|
||||
/datum/scanner_controller/proc/cleanup_current_scan()
|
||||
SIGNAL_HANDLER
|
||||
current_scan = null
|
||||
SEND_SIGNAL(src,COMSIG_EXOSCAN_FINISHED,current_scan)
|
||||
|
||||
|
||||
@@ -603,6 +603,7 @@
|
||||
// TODO: make it so the washer spills reagents if a reagent container is in there, for now, you can wash pruno
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/pruno/proc/check_fermentation()
|
||||
SIGNAL_HANDLER
|
||||
if (!(istype(loc, /obj/machinery) || istype(loc, /obj/structure)))
|
||||
if(fermentation_timer)
|
||||
fermentation_time_remaining = timeleft(fermentation_timer)
|
||||
|
||||
@@ -101,6 +101,7 @@
|
||||
update_grill_audio()
|
||||
|
||||
/obj/machinery/griddle/proc/ItemRemovedFromGrill(obj/item/I)
|
||||
SIGNAL_HANDLER
|
||||
I.flags_1 &= ~IS_ONTOP_1
|
||||
griddled_objects -= I
|
||||
vis_contents -= I
|
||||
|
||||
@@ -295,6 +295,7 @@ and clear when youre done! if you dont i will use :newspaper2: on you
|
||||
qdel(object)
|
||||
|
||||
/obj/machinery/computer/holodeck/proc/remove_from_holo_lists(datum/to_remove, _forced)
|
||||
SIGNAL_HANDLER
|
||||
spawned -= to_remove
|
||||
UnregisterSignal(to_remove, COMSIG_PARENT_PREQDELETED)
|
||||
|
||||
|
||||
@@ -649,6 +649,7 @@
|
||||
* target - the atom being hit on thrown or slipping on our plant
|
||||
*/
|
||||
/datum/plant_gene/trait/stinging/proc/prickles_inject(obj/item/our_plant, atom/target)
|
||||
SIGNAL_HANDLER
|
||||
if(isliving(target) && our_plant.reagents?.total_volume)
|
||||
var/mob/living/living_target = target
|
||||
var/obj/item/seeds/our_seed = our_plant.get_plant_seed()
|
||||
@@ -810,6 +811,7 @@
|
||||
* target - the atom that slipped on the plant
|
||||
*/
|
||||
/datum/plant_gene/trait/plant_laughter/proc/laughter(obj/item/our_plant, atom/target)
|
||||
SIGNAL_HANDLER
|
||||
our_plant.audible_message("<span_class='notice'>[our_plant] lets out burst of laughter.</span>")
|
||||
playsound(our_plant, pick(sounds), 100, FALSE, SHORT_RANGE_SOUND_EXTRARANGE)
|
||||
|
||||
|
||||
@@ -96,6 +96,7 @@
|
||||
* Called by a component signal when our song starts playing.
|
||||
*/
|
||||
/obj/item/instrument/piano_synth/headphones/proc/start_playing()
|
||||
SIGNAL_HANDLER
|
||||
icon_state = "[initial(icon_state)]_on"
|
||||
update_appearance()
|
||||
|
||||
@@ -103,6 +104,7 @@
|
||||
* Called by a component signal when our song stops playing.
|
||||
*/
|
||||
/obj/item/instrument/piano_synth/headphones/proc/stop_playing()
|
||||
SIGNAL_HANDLER
|
||||
icon_state = "[initial(icon_state)]"
|
||||
update_appearance()
|
||||
|
||||
@@ -253,6 +255,7 @@
|
||||
actions_types = list(/datum/action/item_action/instrument)
|
||||
|
||||
/obj/item/instrument/harmonica/proc/handle_speech(datum/source, list/speech_args)
|
||||
SIGNAL_HANDLER
|
||||
if(song.playing && ismob(loc))
|
||||
to_chat(loc, "<span class='warning'>You stop playing the harmonica to talk...</span>")
|
||||
song.playing = FALSE
|
||||
|
||||
@@ -47,10 +47,12 @@
|
||||
|
||||
/// triggered on wield of two handed item
|
||||
/obj/item/kinetic_crusher/proc/on_wield(obj/item/source, mob/user)
|
||||
SIGNAL_HANDLER
|
||||
wielded = TRUE
|
||||
|
||||
/// triggered on unwield of two handed item
|
||||
/obj/item/kinetic_crusher/proc/on_unwield(obj/item/source, mob/user)
|
||||
SIGNAL_HANDLER
|
||||
wielded = FALSE
|
||||
|
||||
/obj/item/kinetic_crusher/examine(mob/living/user)
|
||||
|
||||
@@ -101,6 +101,7 @@
|
||||
resonance_damage *= damage_multiplier
|
||||
|
||||
/obj/effect/temp_visual/resonance/proc/burst()
|
||||
SIGNAL_HANDLER
|
||||
rupturing = TRUE
|
||||
var/turf/T = get_turf(src)
|
||||
new /obj/effect/temp_visual/resonance_crush(T)
|
||||
|
||||
@@ -330,6 +330,7 @@
|
||||
to_chat(orbits.parent, "<span class='notice'>Your vision returns to normal.</span>")
|
||||
|
||||
/obj/effect/wisp/proc/update_user_sight(mob/user)
|
||||
SIGNAL_HANDLER
|
||||
user.sight |= sight_flags
|
||||
if(!isnull(lighting_alpha))
|
||||
user.lighting_alpha = min(user.lighting_alpha, lighting_alpha)
|
||||
@@ -704,6 +705,7 @@
|
||||
UnregisterSignal(user, COMSIG_MOVABLE_BUMP)
|
||||
|
||||
/obj/item/clothing/gloves/gauntlets/proc/rocksmash(mob/living/carbon/human/H, atom/A, proximity)
|
||||
SIGNAL_HANDLER
|
||||
if(!istype(A, /turf/closed/mineral))
|
||||
return
|
||||
A.attackby(src, H)
|
||||
|
||||
@@ -1275,4 +1275,5 @@
|
||||
|
||||
|
||||
/mob/living/carbon/proc/attach_rot(mapload)
|
||||
SIGNAL_HANDLER
|
||||
AddComponent(/datum/component/rot, 6 MINUTES, 10 MINUTES, 1)
|
||||
|
||||
@@ -712,6 +712,7 @@
|
||||
|
||||
/// The limb or the whole damn person we were grasping got deleted or dismembered, so we don't care anymore
|
||||
/obj/item/self_grasp/proc/qdel_void()
|
||||
SIGNAL_HANDLER
|
||||
qdel(src)
|
||||
|
||||
/// We've already cleared that the bodypart in question is bleeding in [the place we create this][/mob/living/carbon/proc/grabbedby], so set up the connections
|
||||
|
||||
@@ -598,6 +598,7 @@
|
||||
* Called on the COMSIG_COMPONENT_CLEAN_FACE_ACT signal
|
||||
*/
|
||||
/mob/living/carbon/human/proc/clean_face(datum/source, clean_types)
|
||||
SIGNAL_HANDLER
|
||||
if(!is_mouth_covered() && clean_lips())
|
||||
. = TRUE
|
||||
|
||||
|
||||
@@ -139,20 +139,24 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/dullahan_relay/proc/examinate_check(atom/source, mob/user)
|
||||
SIGNAL_HANDLER
|
||||
if(user.client.eye == src)
|
||||
return COMPONENT_ALLOW_EXAMINATE
|
||||
|
||||
//Adds the owner to the list of hearers in hearers_in_view(), for visible/hearable on top of say messages
|
||||
/obj/item/dullahan_relay/proc/include_owner(datum/source, list/processing_list, list/hearers)
|
||||
SIGNAL_HANDLER
|
||||
if(!QDELETED(owner))
|
||||
hearers += owner
|
||||
|
||||
//Stops dullahans from gibbing when regenerating limbs
|
||||
/obj/item/dullahan_relay/proc/unlist_head(datum/source, noheal = FALSE, list/excluded_zones)
|
||||
SIGNAL_HANDLER
|
||||
excluded_zones |= BODY_ZONE_HEAD
|
||||
|
||||
//Retrieving the owner's head for better ahealing.
|
||||
/obj/item/dullahan_relay/proc/retrieve_head(datum/source, full_heal, admin_revive)
|
||||
SIGNAL_HANDLER
|
||||
if(admin_revive)
|
||||
var/obj/item/bodypart/head/H = loc
|
||||
var/turf/T = get_turf(owner)
|
||||
|
||||
@@ -101,6 +101,7 @@
|
||||
H.update_body()
|
||||
|
||||
/datum/species/ethereal/proc/on_emp_act(mob/living/carbon/human/H, severity)
|
||||
SIGNAL_HANDLER
|
||||
EMPeffect = TRUE
|
||||
spec_updatehealth(H)
|
||||
to_chat(H, "<span class='notice'>You feel the light of your body leave you.</span>")
|
||||
@@ -111,6 +112,7 @@
|
||||
addtimer(CALLBACK(src, .proc/stop_emp, H), 20 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) //We're out for 20 seconds
|
||||
|
||||
/datum/species/ethereal/proc/on_emag_act(mob/living/carbon/human/H, mob/user)
|
||||
SIGNAL_HANDLER
|
||||
if(emageffect)
|
||||
return
|
||||
emageffect = TRUE
|
||||
|
||||
@@ -671,6 +671,7 @@
|
||||
playsound(get_turf(H), 'sound/misc/sadtrombone.ogg', 70, FALSE)
|
||||
|
||||
/datum/species/golem/bananium/proc/handle_speech(datum/source, list/speech_args)
|
||||
SIGNAL_HANDLER
|
||||
speech_args[SPEECH_SPANS] |= SPAN_CLOWN
|
||||
|
||||
/datum/species/golem/runic
|
||||
|
||||
@@ -635,6 +635,7 @@
|
||||
return TRUE
|
||||
|
||||
/datum/species/jelly/stargazer/proc/unlink_mob(mob/living/M)
|
||||
SIGNAL_HANDLER
|
||||
var/link_id = linked_mobs.Find(M)
|
||||
if(!(link_id))
|
||||
return
|
||||
|
||||
@@ -132,6 +132,7 @@
|
||||
|
||||
|
||||
/datum/species/synth/proc/handle_speech(datum/source, list/speech_args)
|
||||
SIGNAL_HANDLER
|
||||
if (isliving(source)) // yeah it's gonna be living but just to be clean
|
||||
var/mob/living/L = source
|
||||
if(fake_species && L.health > disguise_fail_health)
|
||||
|
||||
@@ -1610,6 +1610,7 @@
|
||||
start_look_up()
|
||||
|
||||
/mob/living/proc/start_look_up()
|
||||
SIGNAL_HANDLER
|
||||
var/turf/ceiling = get_step_multiz(src, UP)
|
||||
if(!ceiling) //We are at the highest z-level.
|
||||
to_chat(src, "<span class='warning'>You can't see through the ceiling above you.</span>")
|
||||
@@ -1631,6 +1632,7 @@
|
||||
reset_perspective(ceiling)
|
||||
|
||||
/mob/living/proc/stop_look_up()
|
||||
SIGNAL_HANDLER
|
||||
reset_perspective()
|
||||
|
||||
/mob/living/proc/end_look_up()
|
||||
@@ -1655,6 +1657,7 @@
|
||||
start_look_down()
|
||||
|
||||
/mob/living/proc/start_look_down()
|
||||
SIGNAL_HANDLER
|
||||
var/turf/floor = get_turf(src)
|
||||
var/turf/lower_level = get_step_multiz(floor, DOWN)
|
||||
if(!lower_level) //We are at the lowest z-level.
|
||||
@@ -1679,6 +1682,7 @@
|
||||
reset_perspective(lower_level)
|
||||
|
||||
/mob/living/proc/stop_look_down()
|
||||
SIGNAL_HANDLER
|
||||
reset_perspective()
|
||||
|
||||
/mob/living/proc/end_look_down()
|
||||
|
||||
@@ -1004,6 +1004,7 @@
|
||||
Remove(owner) //If the last shell is blown, destroy it.
|
||||
|
||||
/mob/living/silicon/ai/proc/disconnect_shell()
|
||||
SIGNAL_HANDLER
|
||||
if(deployed_shell) //Forcibly call back AI in event of things such as damage, EMP or power loss.
|
||||
to_chat(src, "<span class='danger'>Your remote connection has been reset!</span>")
|
||||
deployed_shell.undeploy()
|
||||
|
||||
@@ -937,6 +937,7 @@
|
||||
aicamera.stored[i] = TRUE
|
||||
|
||||
/mob/living/silicon/robot/proc/charge(datum/source, amount, repairs)
|
||||
SIGNAL_HANDLER
|
||||
if(model)
|
||||
model.respawn_consumable(src, amount * 0.005)
|
||||
if(cell)
|
||||
|
||||
@@ -914,6 +914,7 @@
|
||||
return "Unknown"
|
||||
|
||||
/mob/living/simple_animal/bot/mulebot/paranormal/proc/ghostmoved()
|
||||
SIGNAL_HANDLER
|
||||
visible_message("<span class='notice'>The ghostly figure vanishes...</span>")
|
||||
UnregisterSignal(load, COMSIG_MOVABLE_MOVED)
|
||||
unload(0)
|
||||
|
||||
@@ -202,6 +202,7 @@
|
||||
|
||||
///Updates the next mob in the chain to move to our last location, fixed the worm if somehow broken.
|
||||
/mob/living/simple_animal/hostile/eldritch/armsy/proc/update_chain_links()
|
||||
SIGNAL_HANDLER
|
||||
if(!follow)
|
||||
return
|
||||
gib_trail()
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
to_chat(src, "<span class='danger'><B>Your powers are on cooldown! You must wait 20 seconds between bombs.</B></span>")
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/bomb/proc/kaboom(atom/source, mob/living/explodee)
|
||||
SIGNAL_HANDLER
|
||||
if(!istype(explodee))
|
||||
return
|
||||
if(explodee == src || explodee == summoner || hasmatchingsummoner(explodee))
|
||||
@@ -71,6 +72,7 @@
|
||||
UNREGISTER_BOMB_SIGNALS(A)
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/bomb/proc/display_examine(datum/source, mob/user, text)
|
||||
SIGNAL_HANDLER
|
||||
text += "<span class='holoparasite'>It glows with a strange <font color=\"[guardiancolor]\">light</font>!</span>"
|
||||
|
||||
#undef UNREGISTER_BOMB_SIGNALS
|
||||
|
||||
@@ -70,5 +70,6 @@
|
||||
gravito_targets -= target
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/gravitokinetic/proc/__distance_check(atom/movable/AM, OldLoc, Dir, Forced)
|
||||
SIGNAL_HANDLER
|
||||
if(get_dist(src, AM) > gravity_power_range)
|
||||
remove_gravity(AM)
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
RegisterSignal(src, COMSIG_MOVABLE_MOVED, .proc/goosement)
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/goose/proc/goosement(atom/movable/AM, OldLoc, Dir, Forced)
|
||||
SIGNAL_HANDLER
|
||||
if(stat == DEAD)
|
||||
return
|
||||
if(prob(5) && random_retaliate)
|
||||
@@ -219,7 +220,7 @@
|
||||
/mob/living/simple_animal/hostile/retaliate/goose/vomit/goosement(atom/movable/AM, OldLoc, Dir, Forced)
|
||||
. = ..()
|
||||
if(vomiting)
|
||||
vomit() // its supposed to keep vomiting if you move
|
||||
INVOKE_ASYNC(src, .proc/vomit) // its supposed to keep vomiting if you move
|
||||
return
|
||||
if(prob(vomitCoefficient * 0.2))
|
||||
vomit_prestart(vomitTimeBonus + 25)
|
||||
|
||||
@@ -299,6 +299,7 @@ Difficulty: Extremely Hard
|
||||
|
||||
/// Resurrects the target when they die by moving them and dusting a clone in their place, one life for another
|
||||
/obj/item/resurrection_crystal/proc/resurrect(mob/living/carbon/user, gibbed)
|
||||
SIGNAL_HANDLER
|
||||
if(gibbed)
|
||||
to_chat(user, "<span class='notice'>This power cannot be used if your entire mortal body is disintegrated...</span>")
|
||||
return
|
||||
@@ -306,12 +307,12 @@ Difficulty: Extremely Hard
|
||||
var/typepath = user.type
|
||||
var/mob/living/carbon/clone = new typepath(user.loc)
|
||||
clone.real_name = user.real_name
|
||||
user.dna.transfer_identity(clone)
|
||||
INVOKE_ASYNC(user.dna, /datum/dna.proc/transfer_identity, clone)
|
||||
clone.updateappearance(mutcolor_update=1)
|
||||
var/turf/T = find_safe_turf()
|
||||
user.forceMove(T)
|
||||
user.revive(full_heal = TRUE, admin_revive = TRUE)
|
||||
user.set_species(/datum/species/shadow)
|
||||
INVOKE_ASYNC(user, /mob/living/carbon.proc/set_species, /datum/species/shadow)
|
||||
to_chat(user, "<span class='notice'>You blink and find yourself in [get_area_name(T)]... feeling a bit darker.</span>")
|
||||
clone.dust()
|
||||
qdel(src)
|
||||
@@ -413,6 +414,7 @@ Difficulty: Extremely Hard
|
||||
|
||||
/// Blocks movement from the status effect owner
|
||||
/datum/status_effect/ice_block_talisman/proc/owner_moved()
|
||||
SIGNAL_HANDLER
|
||||
return COMPONENT_MOVABLE_BLOCK_PRE_MOVE
|
||||
|
||||
/datum/status_effect/ice_block_talisman/on_remove()
|
||||
|
||||
@@ -212,6 +212,7 @@
|
||||
RegisterSignal(owner, COMSIG_PARENT_PREQDELETED, .proc/handle_mob_deletion)
|
||||
|
||||
/datum/action/consume/proc/handle_mob_deletion()
|
||||
SIGNAL_HANDLER
|
||||
stop_consuming() //Shit out the vored mob before u go go
|
||||
|
||||
///Try to consume the pulled mob
|
||||
|
||||
@@ -91,6 +91,7 @@
|
||||
* the supermatter probably don't need constant beeping to distract them.
|
||||
*/
|
||||
/datum/computer_file/program/supermatter_monitor/proc/send_alert()
|
||||
SIGNAL_HANDLER
|
||||
if(!computer.get_ntnet_status())
|
||||
return
|
||||
if(computer.active_program != src)
|
||||
@@ -107,6 +108,7 @@
|
||||
* minimized or closed to avoid double-notifications.
|
||||
*/
|
||||
/datum/computer_file/program/supermatter_monitor/proc/send_start_alert()
|
||||
SIGNAL_HANDLER
|
||||
if(!computer.get_ntnet_status())
|
||||
return
|
||||
if(computer.active_program == src)
|
||||
@@ -131,9 +133,9 @@
|
||||
data["SM_power"] = active.power
|
||||
data["SM_ambienttemp"] = air.temperature
|
||||
data["SM_ambientpressure"] = air.return_pressure()
|
||||
data["SM_bad_moles_amount"] = MOLE_PENALTY_THRESHOLD / active.gasefficency
|
||||
data["SM_bad_moles_amount"] = MOLE_PENALTY_THRESHOLD / active.gasefficency
|
||||
data["SM_moles"] = 0
|
||||
|
||||
|
||||
var/list/gasdata = list()
|
||||
|
||||
if(air.total_moles())
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
return NONE
|
||||
|
||||
/obj/machinery/plumbing/buffer/proc/on_reagent_change()
|
||||
SIGNAL_HANDLER
|
||||
if(!buffer_net)
|
||||
return
|
||||
if(reagents.total_volume + CHEMICAL_QUANTISATION_LEVEL >= activation_volume && mode == UNREADY)
|
||||
|
||||
@@ -652,6 +652,7 @@ GLOBAL_LIST_INIT(gun_saw_types, typecacheof(list(
|
||||
. = TRUE
|
||||
|
||||
/obj/item/gun/ballistic/proc/instant_reload()
|
||||
SIGNAL_HANDLER
|
||||
if(magazine)
|
||||
magazine.top_off()
|
||||
else
|
||||
|
||||
@@ -276,6 +276,7 @@
|
||||
. = "<span class='danger'>[user] casually lights [A.loc == user ? "[user.p_their()] [A.name]" : A] with [src]. Damn.</span>"
|
||||
|
||||
/obj/item/gun/energy/proc/instant_recharge()
|
||||
SIGNAL_HANDLER
|
||||
if(!cell)
|
||||
return
|
||||
cell.charge = cell.maxcharge
|
||||
|
||||
@@ -243,6 +243,7 @@
|
||||
select_fire()
|
||||
|
||||
/obj/item/gun/energy/wormhole_projector/proc/on_portal_destroy(obj/effect/portal/P)
|
||||
SIGNAL_HANDLER
|
||||
if(P == p_blue)
|
||||
p_blue = null
|
||||
else if(P == p_orange)
|
||||
|
||||
@@ -94,6 +94,7 @@
|
||||
recharge_newshot()
|
||||
|
||||
/obj/item/gun/magic/proc/instant_recharge()
|
||||
SIGNAL_HANDLER
|
||||
charges = max_charges
|
||||
recharge_newshot()
|
||||
update_appearance()
|
||||
|
||||
@@ -232,11 +232,12 @@
|
||||
lastangle = angle
|
||||
|
||||
/obj/item/gun/energy/beam_rifle/proc/on_mob_move()
|
||||
SIGNAL_HANDLER
|
||||
check_user()
|
||||
if(aiming)
|
||||
delay_penalty(aiming_time_increase_user_movement)
|
||||
process_aim()
|
||||
aiming_beam(TRUE)
|
||||
INVOKE_ASYNC(src, .proc/aiming_beam, TRUE)
|
||||
|
||||
/obj/item/gun/energy/beam_rifle/proc/start_aiming()
|
||||
aiming_time_left = aiming_time
|
||||
|
||||
@@ -134,6 +134,7 @@
|
||||
* - [blastwave_data][/list]: A list containing all of the data for the blastwave.
|
||||
*/
|
||||
/obj/item/gun/blastcannon/proc/channel_blastwave(atom/source, list/arguments)
|
||||
SIGNAL_HANDLER
|
||||
. = COMSIG_CANCEL_EXPLOSION
|
||||
|
||||
var/heavy = arguments[EXARG_KEY_DEV_RANGE]
|
||||
@@ -145,15 +146,15 @@
|
||||
return
|
||||
|
||||
if(!ismob(loc))
|
||||
fire_dropped(heavy, medium, light)
|
||||
INVOKE_ASYNC(src, .proc/fire_dropped, heavy, medium, light)
|
||||
return
|
||||
|
||||
var/mob/holding = loc
|
||||
var/target = cached_target?.resolve()
|
||||
if(target && (holding.get_active_held_item() == src) && cached_firer && (holding == cached_firer.resolve()))
|
||||
fire_intentionally(target, holding, heavy, medium, light, cached_modifiers)
|
||||
INVOKE_ASYNC(src, .proc/fire_intentionally, target, holding, heavy, medium, light, cached_modifiers)
|
||||
else
|
||||
fire_accidentally(holding, heavy, medium, light)
|
||||
INVOKE_ASYNC(src, .proc/fire_accidentally, holding, heavy, medium, light)
|
||||
return
|
||||
|
||||
/**
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user