mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-11 10:11:09 +00:00
Fixes a ton of harddels (#57736)
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> Co-authored-by: ShizCalev <ShizCalev@users.noreply.github.com>
This commit is contained in:
@@ -5,10 +5,20 @@
|
|||||||
|
|
||||||
INITIALIZE_IMMEDIATE(/obj/effect/statclick)
|
INITIALIZE_IMMEDIATE(/obj/effect/statclick)
|
||||||
|
|
||||||
/obj/effect/statclick/Initialize(mapload, text, target) //Don't port this to Initialize it's too critical
|
/obj/effect/statclick/Initialize(mapload, text, target)
|
||||||
. = ..()
|
. = ..()
|
||||||
name = text
|
name = text
|
||||||
src.target = target
|
src.target = target
|
||||||
|
if(istype(target, /datum)) //Harddel man bad
|
||||||
|
RegisterSignal(target, COMSIG_PARENT_QDELETING, .proc/cleanup)
|
||||||
|
|
||||||
|
/obj/effect/statclick/Destroy()
|
||||||
|
target = null
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
/obj/effect/statclick/proc/cleanup()
|
||||||
|
SIGNAL_HANDLER
|
||||||
|
qdel(src)
|
||||||
|
|
||||||
/obj/effect/statclick/proc/update(text)
|
/obj/effect/statclick/proc/update(text)
|
||||||
name = text
|
name = text
|
||||||
|
|||||||
@@ -85,6 +85,7 @@ SUBSYSTEM_DEF(throwing)
|
|||||||
|
|
||||||
/datum/thrownthing/Destroy()
|
/datum/thrownthing/Destroy()
|
||||||
SSthrowing.processing -= thrownthing
|
SSthrowing.processing -= thrownthing
|
||||||
|
SSthrowing.currentrun -= thrownthing
|
||||||
thrownthing.throwing = null
|
thrownthing.throwing = null
|
||||||
thrownthing = null
|
thrownthing = null
|
||||||
target = null
|
target = null
|
||||||
|
|||||||
@@ -37,8 +37,7 @@
|
|||||||
if(owner)
|
if(owner)
|
||||||
Remove(owner)
|
Remove(owner)
|
||||||
target = null
|
target = null
|
||||||
qdel(button)
|
QDEL_NULL(button)
|
||||||
button = null
|
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/datum/action/proc/Grant(mob/M)
|
/datum/action/proc/Grant(mob/M)
|
||||||
|
|||||||
@@ -12,6 +12,8 @@
|
|||||||
var/obj/item/target = controller.blackboard[BB_MONKEY_PICKUPTARGET]
|
var/obj/item/target = controller.blackboard[BB_MONKEY_PICKUPTARGET]
|
||||||
|
|
||||||
item_blacklist[target] = TRUE
|
item_blacklist[target] = TRUE
|
||||||
|
if(istype(controller, /datum/ai_controller/monkey)) //What the fuck
|
||||||
|
controller.RegisterSignal(target, COMSIG_PARENT_QDELETING, /datum/ai_controller/monkey/proc/target_del)
|
||||||
|
|
||||||
controller.blackboard[BB_MONKEY_PICKUPTARGET] = null
|
controller.blackboard[BB_MONKEY_PICKUPTARGET] = null
|
||||||
|
|
||||||
|
|||||||
@@ -224,3 +224,7 @@ have ways of interacting with a specific mob and control it.
|
|||||||
/datum/ai_controller/monkey/proc/update_movespeed(mob/living/pawn)
|
/datum/ai_controller/monkey/proc/update_movespeed(mob/living/pawn)
|
||||||
SIGNAL_HANDLER
|
SIGNAL_HANDLER
|
||||||
movement_delay = pawn.cached_multiplicative_slowdown
|
movement_delay = pawn.cached_multiplicative_slowdown
|
||||||
|
|
||||||
|
/datum/ai_controller/monkey/proc/target_del(target)
|
||||||
|
SIGNAL_HANDLER
|
||||||
|
blackboard[BB_MONKEY_BLACKLISTITEMS] -= target
|
||||||
|
|||||||
@@ -73,8 +73,6 @@
|
|||||||
|
|
||||||
/// What status effect we assign on application
|
/// What status effect we assign on application
|
||||||
var/status_effect_type
|
var/status_effect_type
|
||||||
/// The status effect we're linked to
|
|
||||||
var/datum/status_effect/linked_status_effect
|
|
||||||
/// If we're operating on this wound and it gets healed, we'll nix the surgery too
|
/// If we're operating on this wound and it gets healed, we'll nix the surgery too
|
||||||
var/datum/surgery/attached_surgery
|
var/datum/surgery/attached_surgery
|
||||||
/// if you're a lazy git and just throw them in cryo, the wound will go away after accumulating severity * 25 power
|
/// if you're a lazy git and just throw them in cryo, the wound will go away after accumulating severity * 25 power
|
||||||
@@ -129,12 +127,13 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
victim = L.owner
|
victim = L.owner
|
||||||
|
RegisterSignal(victim, COMSIG_PARENT_QDELETING, .proc/null_victim)
|
||||||
set_limb(L)
|
set_limb(L)
|
||||||
LAZYADD(victim.all_wounds, src)
|
LAZYADD(victim.all_wounds, src)
|
||||||
LAZYADD(limb.wounds, src)
|
LAZYADD(limb.wounds, src)
|
||||||
limb.update_wounds()
|
limb.update_wounds()
|
||||||
if(status_effect_type)
|
if(status_effect_type)
|
||||||
linked_status_effect = victim.apply_status_effect(status_effect_type, src)
|
victim.apply_status_effect(status_effect_type, src)
|
||||||
SEND_SIGNAL(victim, COMSIG_CARBON_GAIN_WOUND, src, limb)
|
SEND_SIGNAL(victim, COMSIG_CARBON_GAIN_WOUND, src, limb)
|
||||||
if(!victim.alerts["wound"]) // only one alert is shared between all of the wounds
|
if(!victim.alerts["wound"]) // only one alert is shared between all of the wounds
|
||||||
victim.throw_alert("wound", /atom/movable/screen/alert/status_effect/wound)
|
victim.throw_alert("wound", /atom/movable/screen/alert/status_effect/wound)
|
||||||
@@ -162,6 +161,14 @@
|
|||||||
wound_injury(old_wound)
|
wound_injury(old_wound)
|
||||||
second_wind()
|
second_wind()
|
||||||
|
|
||||||
|
/datum/wound/proc/null_victim()
|
||||||
|
SIGNAL_HANDLER
|
||||||
|
victim = null
|
||||||
|
|
||||||
|
/datum/wound/proc/source_died()
|
||||||
|
SIGNAL_HANDLER
|
||||||
|
qdel(src)
|
||||||
|
|
||||||
/// Remove the wound from whatever it's afflicting, and cleans up whateverstatus effects it had or modifiers it had on interaction times. ignore_limb is used for detachments where we only want to forget the victim
|
/// Remove the wound from whatever it's afflicting, and cleans up whateverstatus effects it had or modifiers it had on interaction times. ignore_limb is used for detachments where we only want to forget the victim
|
||||||
/datum/wound/proc/remove_wound(ignore_limb, replaced = FALSE)
|
/datum/wound/proc/remove_wound(ignore_limb, replaced = FALSE)
|
||||||
//TODO: have better way to tell if we're getting removed without replacement (full heal) scar stuff
|
//TODO: have better way to tell if we're getting removed without replacement (full heal) scar stuff
|
||||||
@@ -206,7 +213,10 @@
|
|||||||
if(limb == new_value)
|
if(limb == new_value)
|
||||||
return FALSE //Limb can either be a reference to something or `null`. Returning the number variable makes it clear no change was made.
|
return FALSE //Limb can either be a reference to something or `null`. Returning the number variable makes it clear no change was made.
|
||||||
. = limb
|
. = limb
|
||||||
|
if(limb)
|
||||||
|
UnregisterSignal(limb, COMSIG_PARENT_QDELETING)
|
||||||
limb = new_value
|
limb = new_value
|
||||||
|
RegisterSignal(new_value, COMSIG_PARENT_QDELETING, .proc/source_died)
|
||||||
if(. && disabling)
|
if(. && disabling)
|
||||||
var/obj/item/bodypart/old_limb = .
|
var/obj/item/bodypart/old_limb = .
|
||||||
REMOVE_TRAIT(old_limb, TRAIT_PARALYSIS, src)
|
REMOVE_TRAIT(old_limb, TRAIT_PARALYSIS, src)
|
||||||
|
|||||||
@@ -32,6 +32,8 @@
|
|||||||
LAZYREMOVE(limb.scars, src)
|
LAZYREMOVE(limb.scars, src)
|
||||||
if(victim)
|
if(victim)
|
||||||
LAZYREMOVE(victim.all_scars, src)
|
LAZYREMOVE(victim.all_scars, src)
|
||||||
|
limb = null
|
||||||
|
victim = null
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -46,6 +48,8 @@
|
|||||||
*/
|
*/
|
||||||
/datum/scar/proc/generate(obj/item/bodypart/BP, datum/wound/W, add_to_scars=TRUE)
|
/datum/scar/proc/generate(obj/item/bodypart/BP, datum/wound/W, add_to_scars=TRUE)
|
||||||
limb = BP
|
limb = BP
|
||||||
|
RegisterSignal(limb, COMSIG_PARENT_QDELETING, .proc/limb_gone)
|
||||||
|
|
||||||
severity = W.severity
|
severity = W.severity
|
||||||
if(limb.owner)
|
if(limb.owner)
|
||||||
victim = limb.owner
|
victim = limb.owner
|
||||||
@@ -88,6 +92,7 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
limb = BP
|
limb = BP
|
||||||
|
RegisterSignal(limb, COMSIG_PARENT_QDELETING, .proc/limb_gone)
|
||||||
if(limb.owner)
|
if(limb.owner)
|
||||||
victim = limb.owner
|
victim = limb.owner
|
||||||
if(victim.get_biological_state() != biology)
|
if(victim.get_biological_state() != biology)
|
||||||
@@ -113,6 +118,10 @@
|
|||||||
visibility = 7
|
visibility = 7
|
||||||
return src
|
return src
|
||||||
|
|
||||||
|
/datum/scar/proc/limb_gone()
|
||||||
|
SIGNAL_HANDLER
|
||||||
|
qdel(src)
|
||||||
|
|
||||||
/// What will show up in examine_more() if this scar is visible
|
/// What will show up in examine_more() if this scar is visible
|
||||||
/datum/scar/proc/get_examine_description(mob/viewer)
|
/datum/scar/proc/get_examine_description(mob/viewer)
|
||||||
if(!victim || !is_visible(viewer))
|
if(!victim || !is_visible(viewer))
|
||||||
|
|||||||
@@ -373,7 +373,18 @@ GLOBAL_LIST_EMPTY(teleportlocs)
|
|||||||
* Also cycles the icons of all firealarms and deregisters the area from processing on SSOBJ
|
* Also cycles the icons of all firealarms and deregisters the area from processing on SSOBJ
|
||||||
*/
|
*/
|
||||||
/area/proc/firereset(obj/source)
|
/area/proc/firereset(obj/source)
|
||||||
if (fire)
|
var/should_reset_alarms = fire
|
||||||
|
if(source)
|
||||||
|
if(istype(source, /obj/machinery/firealarm))
|
||||||
|
var/obj/machinery/firealarm/alarm = source
|
||||||
|
if(alarm.triggered)
|
||||||
|
alarm.triggered = FALSE
|
||||||
|
triggered_firealarms -= 1
|
||||||
|
if(triggered_firealarms > 0)
|
||||||
|
should_reset_alarms = FALSE
|
||||||
|
should_reset_alarms = should_reset_alarms & power_environ //No resetting if there's no power
|
||||||
|
|
||||||
|
if (should_reset_alarms) // if there's a source, make sure there's no fire alarms left
|
||||||
unset_fire_alarm_effects()
|
unset_fire_alarm_effects()
|
||||||
ModifyFiredoors(TRUE)
|
ModifyFiredoors(TRUE)
|
||||||
for(var/item in firealarms)
|
for(var/item in firealarms)
|
||||||
@@ -394,6 +405,18 @@ GLOBAL_LIST_EMPTY(teleportlocs)
|
|||||||
p.cancelAlarm("Fire", src, source)
|
p.cancelAlarm("Fire", src, source)
|
||||||
STOP_PROCESSING(SSobj, src)
|
STOP_PROCESSING(SSobj, src)
|
||||||
|
|
||||||
|
///Get rid of any dangling camera refs
|
||||||
|
/area/proc/clear_camera(obj/machinery/camera/cam)
|
||||||
|
LAZYREMOVE(cameras, cam)
|
||||||
|
for (var/mob/living/silicon/aiPlayer as anything in GLOB.silicon_mobs)
|
||||||
|
aiPlayer.freeCamera(src, cam)
|
||||||
|
for (var/obj/machinery/computer/station_alert/comp as anything in GLOB.alert_consoles)
|
||||||
|
comp.freeCamera(src, cam)
|
||||||
|
for (var/mob/living/simple_animal/drone/drone_on as anything in GLOB.drones_list)
|
||||||
|
drone_on.freeCamera(src, cam)
|
||||||
|
for(var/datum/computer_file/program/alarm_monitor/monitor as anything in GLOB.alarmdisplay)
|
||||||
|
monitor.freeCamera(src, cam)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If 100 ticks has elapsed, toggle all the firedoors closed again
|
* If 100 ticks has elapsed, toggle all the firedoors closed again
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -120,6 +120,9 @@
|
|||||||
|
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|
||||||
|
//We add ourselves to this list, best to clear it out
|
||||||
|
LAZYCLEARLIST(area_sensitive_contents)
|
||||||
|
|
||||||
for(var/movable_content in contents)
|
for(var/movable_content in contents)
|
||||||
qdel(movable_content)
|
qdel(movable_content)
|
||||||
|
|
||||||
@@ -127,6 +130,8 @@
|
|||||||
|
|
||||||
moveToNullspace()
|
moveToNullspace()
|
||||||
|
|
||||||
|
vis_contents.Cut()
|
||||||
|
|
||||||
|
|
||||||
/atom/movable/proc/update_emissive_block()
|
/atom/movable/proc/update_emissive_block()
|
||||||
if(blocks_emissive != EMISSIVE_BLOCK_GENERIC)
|
if(blocks_emissive != EMISSIVE_BLOCK_GENERIC)
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/machinery/bluespace_beacon/process()
|
/obj/machinery/bluespace_beacon/process()
|
||||||
if(!Beacon)
|
if(QDELETED(Beacon)) //Don't move it out of nullspace BACK INTO THE GAME for the love of god
|
||||||
var/turf/T = loc
|
var/turf/T = loc
|
||||||
Beacon = new(T)
|
Beacon = new(T)
|
||||||
Beacon.invisibility = INVISIBILITY_MAXIMUM
|
Beacon.invisibility = INVISIBILITY_MAXIMUM
|
||||||
|
|||||||
@@ -101,15 +101,15 @@
|
|||||||
if(can_use())
|
if(can_use())
|
||||||
toggle_cam(null, 0) //kick anyone viewing out and remove from the camera chunks
|
toggle_cam(null, 0) //kick anyone viewing out and remove from the camera chunks
|
||||||
GLOB.cameranet.cameras -= src
|
GLOB.cameranet.cameras -= src
|
||||||
|
cancelCameraAlarm()
|
||||||
if(isarea(myarea))
|
if(isarea(myarea))
|
||||||
LAZYREMOVE(myarea.cameras, src)
|
myarea.clear_camera(src)
|
||||||
QDEL_NULL(assembly)
|
QDEL_NULL(assembly)
|
||||||
if(bug)
|
if(bug)
|
||||||
bug.bugged_cameras -= src.c_tag
|
bug.bugged_cameras -= c_tag
|
||||||
if(bug.current == src)
|
if(bug.current == src)
|
||||||
bug.current = null
|
bug.current = null
|
||||||
bug = null
|
bug = null
|
||||||
cancelCameraAlarm()
|
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/machinery/camera/examine(mob/user)
|
/obj/machinery/camera/examine(mob/user)
|
||||||
|
|||||||
@@ -33,31 +33,46 @@
|
|||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
/obj/machinery/computer/station_alert/proc/triggerAlarm(class, area/A, O, obj/source)
|
/obj/machinery/computer/station_alert/proc/triggerAlarm(class, area/home, cameras, obj/source)
|
||||||
if(source.z != z)
|
if(source.z != z)
|
||||||
return
|
return
|
||||||
if(machine_stat & (BROKEN))
|
if(machine_stat & (BROKEN))
|
||||||
return
|
return
|
||||||
|
|
||||||
var/list/L = alarms[class]
|
var/list/our_sort = alarms[class]
|
||||||
for(var/I in L)
|
for(var/areaname in our_sort)
|
||||||
if (I == A.name)
|
if (areaname == home.name)
|
||||||
var/list/alarm = L[I]
|
var/list/alarm = our_sort[areaname]
|
||||||
var/list/sources = alarm[3]
|
var/list/sources = alarm[3]
|
||||||
if (!(source in sources))
|
if (!(source in sources))
|
||||||
sources += source
|
sources += source
|
||||||
return 1
|
return TRUE
|
||||||
var/obj/machinery/camera/C = null
|
|
||||||
var/list/CL = null
|
|
||||||
if(O && islist(O))
|
|
||||||
CL = O
|
|
||||||
if (CL.len == 1)
|
|
||||||
C = CL[1]
|
|
||||||
else if(O && istype(O, /obj/machinery/camera))
|
|
||||||
C = O
|
|
||||||
L[A.name] = list(A, (C ? C : O), list(source))
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
var/obj/machinery/camera/cam = null
|
||||||
|
var/list/our_cams = null
|
||||||
|
if(cameras && islist(cameras))
|
||||||
|
our_cams = cameras
|
||||||
|
if (our_cams.len == 1)
|
||||||
|
cam = our_cams[1]
|
||||||
|
else if(cameras && istype(cameras, /obj/machinery/camera))
|
||||||
|
cam = cameras
|
||||||
|
our_sort[home.name] = list(home, (cam ? cam : cameras), list(source))
|
||||||
|
return TRUE
|
||||||
|
|
||||||
|
/obj/machinery/computer/station_alert/proc/freeCamera(area/home, obj/machinery/camera/cam)
|
||||||
|
for(var/class in alarms)
|
||||||
|
var/our_area = alarms[class][home.name]
|
||||||
|
if(!our_area)
|
||||||
|
continue
|
||||||
|
var/cams = our_area[2] //Get the cameras
|
||||||
|
if(!cams)
|
||||||
|
continue
|
||||||
|
if(islist(cams))
|
||||||
|
cams -= cam
|
||||||
|
if(length(cams) == 1)
|
||||||
|
our_area[2] = cams[1]
|
||||||
|
else
|
||||||
|
our_area[2] = null
|
||||||
|
|
||||||
/obj/machinery/computer/station_alert/proc/cancelAlarm(class, area/A, obj/origin)
|
/obj/machinery/computer/station_alert/proc/cancelAlarm(class, area/A, obj/origin)
|
||||||
if(machine_stat & (BROKEN))
|
if(machine_stat & (BROKEN))
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
var/state
|
var/state
|
||||||
var/obj/machinery/embedded_controller/master
|
var/obj/machinery/embedded_controller/master
|
||||||
|
|
||||||
|
/datum/computer/file/embedded_program/Destroy()
|
||||||
|
master = null
|
||||||
|
. = ..()
|
||||||
|
|
||||||
/datum/computer/file/embedded_program/proc/post_signal(datum/signal/signal, comm_line)
|
/datum/computer/file/embedded_program/proc/post_signal(datum/signal/signal, comm_line)
|
||||||
if(master)
|
if(master)
|
||||||
master.post_signal(signal, comm_line)
|
master.post_signal(signal, comm_line)
|
||||||
@@ -25,6 +29,11 @@
|
|||||||
|
|
||||||
var/on = TRUE
|
var/on = TRUE
|
||||||
|
|
||||||
|
/obj/machinery/embedded_controller/Destroy()
|
||||||
|
if(program)
|
||||||
|
QDEL_NULL(program)
|
||||||
|
. = ..()
|
||||||
|
|
||||||
/obj/machinery/embedded_controller/ui_interact(mob/user)
|
/obj/machinery/embedded_controller/ui_interact(mob/user)
|
||||||
. = ..()
|
. = ..()
|
||||||
user.set_machine(src)
|
user.set_machine(src)
|
||||||
|
|||||||
@@ -57,10 +57,8 @@
|
|||||||
AddElement(/datum/element/atmos_sensitive)
|
AddElement(/datum/element/atmos_sensitive)
|
||||||
|
|
||||||
/obj/machinery/firealarm/Destroy()
|
/obj/machinery/firealarm/Destroy()
|
||||||
|
myarea.firereset(src)
|
||||||
LAZYREMOVE(myarea.firealarms, src)
|
LAZYREMOVE(myarea.firealarms, src)
|
||||||
if(triggered)
|
|
||||||
triggered = FALSE
|
|
||||||
myarea.triggered_firealarms -= 1
|
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/machinery/firealarm/update_icon_state()
|
/obj/machinery/firealarm/update_icon_state()
|
||||||
@@ -161,7 +159,7 @@
|
|||||||
if(!is_operational)
|
if(!is_operational)
|
||||||
return
|
return
|
||||||
var/area/A = get_area(src)
|
var/area/A = get_area(src)
|
||||||
A.firereset(src)
|
A.firereset()
|
||||||
if(user)
|
if(user)
|
||||||
log_game("[user] reset a fire alarm at [COORD(src)]")
|
log_game("[user] reset a fire alarm at [COORD(src)]")
|
||||||
|
|
||||||
|
|||||||
@@ -150,7 +150,7 @@
|
|||||||
limb.desc = "A synthetically produced [selected_category] limb, grown in a tube. This one is for the [parse_zone(limb.body_zone)]."
|
limb.desc = "A synthetically produced [selected_category] limb, grown in a tube. This one is for the [parse_zone(limb.body_zone)]."
|
||||||
limb.species_id = selected_category
|
limb.species_id = selected_category
|
||||||
limb.update_icon_dropped()
|
limb.update_icon_dropped()
|
||||||
limb.original_owner = "limb grower" //prevents updating the icon, so a lizard arm on a human stays a lizard arm etc.
|
limb.original_owner = WEAKREF(src) //prevents updating the icon, so a lizard arm on a human stays a lizard arm etc.
|
||||||
|
|
||||||
/obj/machinery/limbgrower/RefreshParts()
|
/obj/machinery/limbgrower/RefreshParts()
|
||||||
reagents.maximum_volume = 0
|
reagents.maximum_volume = 0
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
connected_console = null
|
connected_console = null
|
||||||
for(var/obj/machinery/computer/mechpad/console in consoles)
|
for(var/obj/machinery/computer/mechpad/console in consoles)
|
||||||
console.mechpads -= src
|
console.mechpads -= src
|
||||||
|
GLOB.mechpad_list -= src
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/machinery/mechpad/screwdriver_act(mob/user, obj/item/tool)
|
/obj/machinery/mechpad/screwdriver_act(mob/user, obj/item/tool)
|
||||||
|
|||||||
@@ -89,6 +89,7 @@
|
|||||||
layer = LOW_OBJ_LAYER
|
layer = LOW_OBJ_LAYER
|
||||||
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6")
|
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6")
|
||||||
mergeable_decal = FALSE
|
mergeable_decal = FALSE
|
||||||
|
turf_loc_check = FALSE
|
||||||
|
|
||||||
dryname = "rotting gibs"
|
dryname = "rotting gibs"
|
||||||
drydesc = "They look bloody and gruesome while some terrible smell fills the air."
|
drydesc = "They look bloody and gruesome while some terrible smell fills the air."
|
||||||
@@ -100,6 +101,9 @@
|
|||||||
if(mapload) //Don't rot at roundstart for the love of god
|
if(mapload) //Don't rot at roundstart for the love of god
|
||||||
return
|
return
|
||||||
|
|
||||||
|
/obj/effect/decal/cleanable/blood/gibs/replace_decal(obj/effect/decal/cleanable/C)
|
||||||
|
return FALSE //Never fail to place us
|
||||||
|
|
||||||
/obj/effect/decal/cleanable/blood/gibs/dry()
|
/obj/effect/decal/cleanable/blood/gibs/dry()
|
||||||
. = ..()
|
. = ..()
|
||||||
AddComponent(/datum/component/rot/gibs)
|
AddComponent(/datum/component/rot/gibs)
|
||||||
|
|||||||
@@ -631,11 +631,37 @@
|
|||||||
def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high)
|
def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high)
|
||||||
needs_anchored = FALSE
|
needs_anchored = FALSE
|
||||||
|
|
||||||
|
/obj/item/circuitboard/machine/chem_dispenser/fullupgrade
|
||||||
|
build_path = /obj/machinery/chem_dispenser/fullupgrade
|
||||||
|
req_components = list(
|
||||||
|
/obj/item/stock_parts/matter_bin/bluespace = 2,
|
||||||
|
/obj/item/stock_parts/capacitor/quadratic = 2,
|
||||||
|
/obj/item/stock_parts/manipulator/femto = 2,
|
||||||
|
/obj/item/stack/sheet/glass = 1,
|
||||||
|
/obj/item/stock_parts/cell/bluespace = 1,
|
||||||
|
)
|
||||||
|
|
||||||
|
/obj/item/circuitboard/machine/chem_dispenser/mutagensaltpeter
|
||||||
|
build_path = /obj/machinery/chem_dispenser/mutagensaltpeter
|
||||||
|
req_components = list(
|
||||||
|
/obj/item/stock_parts/matter_bin/bluespace = 2,
|
||||||
|
/obj/item/stock_parts/capacitor/quadratic = 2,
|
||||||
|
/obj/item/stock_parts/manipulator/femto = 2,
|
||||||
|
/obj/item/stack/sheet/glass = 1,
|
||||||
|
/obj/item/stock_parts/cell/bluespace = 1,
|
||||||
|
)
|
||||||
|
|
||||||
/obj/item/circuitboard/machine/chem_dispenser/abductor
|
/obj/item/circuitboard/machine/chem_dispenser/abductor
|
||||||
name = "Reagent Synthesizer (Abductor Machine Board)"
|
name = "Reagent Synthesizer (Abductor Machine Board)"
|
||||||
icon_state = "abductor_mod"
|
icon_state = "abductor_mod"
|
||||||
build_path = /obj/machinery/chem_dispenser/abductor
|
build_path = /obj/machinery/chem_dispenser/abductor
|
||||||
def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high)
|
req_components = list(
|
||||||
|
/obj/item/stock_parts/matter_bin/bluespace = 2,
|
||||||
|
/obj/item/stock_parts/capacitor/quadratic = 2,
|
||||||
|
/obj/item/stock_parts/manipulator/femto = 2,
|
||||||
|
/obj/item/stack/sheet/glass = 1,
|
||||||
|
/obj/item/stock_parts/cell/bluespace = 1,
|
||||||
|
)
|
||||||
needs_anchored = FALSE
|
needs_anchored = FALSE
|
||||||
|
|
||||||
/obj/item/circuitboard/machine/chem_heater
|
/obj/item/circuitboard/machine/chem_heater
|
||||||
@@ -992,11 +1018,31 @@
|
|||||||
icon_state = "service"
|
icon_state = "service"
|
||||||
build_path = /obj/machinery/chem_dispenser/drinks
|
build_path = /obj/machinery/chem_dispenser/drinks
|
||||||
|
|
||||||
|
/obj/item/circuitboard/machine/chem_dispenser/drinks/fullupgrade
|
||||||
|
build_path = /obj/machinery/chem_dispenser/drinks/fullupgrade
|
||||||
|
req_components = list(
|
||||||
|
/obj/item/stock_parts/matter_bin/bluespace = 2,
|
||||||
|
/obj/item/stock_parts/capacitor/quadratic = 2,
|
||||||
|
/obj/item/stock_parts/manipulator/femto = 2,
|
||||||
|
/obj/item/stack/sheet/glass = 1,
|
||||||
|
/obj/item/stock_parts/cell/bluespace = 1,
|
||||||
|
)
|
||||||
|
|
||||||
/obj/item/circuitboard/machine/chem_dispenser/drinks/beer
|
/obj/item/circuitboard/machine/chem_dispenser/drinks/beer
|
||||||
name = "Booze Dispenser (Machine Board)"
|
name = "Booze Dispenser (Machine Board)"
|
||||||
icon_state = "service"
|
icon_state = "service"
|
||||||
build_path = /obj/machinery/chem_dispenser/drinks/beer
|
build_path = /obj/machinery/chem_dispenser/drinks/beer
|
||||||
|
|
||||||
|
/obj/item/circuitboard/machine/chem_dispenser/drinks/beer/fullupgrade
|
||||||
|
build_path = /obj/machinery/chem_dispenser/drinks/beer/fullupgrade
|
||||||
|
req_components = list(
|
||||||
|
/obj/item/stock_parts/matter_bin/bluespace = 2,
|
||||||
|
/obj/item/stock_parts/capacitor/quadratic = 2,
|
||||||
|
/obj/item/stock_parts/manipulator/femto = 2,
|
||||||
|
/obj/item/stack/sheet/glass = 1,
|
||||||
|
/obj/item/stock_parts/cell/bluespace = 1,
|
||||||
|
)
|
||||||
|
|
||||||
/obj/item/circuitboard/machine/chem_master/condi
|
/obj/item/circuitboard/machine/chem_master/condi
|
||||||
name = "CondiMaster 3000 (Machine Board)"
|
name = "CondiMaster 3000 (Machine Board)"
|
||||||
icon_state = "service"
|
icon_state = "service"
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
icon_state = "beacon-off"
|
icon_state = "beacon-off"
|
||||||
|
|
||||||
/obj/item/beacon/Destroy()
|
/obj/item/beacon/Destroy()
|
||||||
GLOB.teleportbeacons.Remove(src)
|
GLOB.teleportbeacons -= src
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/item/beacon/attack_self(mob/user)
|
/obj/item/beacon/attack_self(mob/user)
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
GLOB.teleportbeacons += src
|
GLOB.teleportbeacons += src
|
||||||
else
|
else
|
||||||
icon_state = "beacon-off"
|
icon_state = "beacon-off"
|
||||||
GLOB.teleportbeacons.Remove(src)
|
GLOB.teleportbeacons -= src
|
||||||
to_chat(user, "<span class='notice'>You [enabled ? "enable" : "disable"] the beacon.</span>")
|
to_chat(user, "<span class='notice'>You [enabled ? "enable" : "disable"] the beacon.</span>")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,8 @@
|
|||||||
|
|
||||||
/obj/item/geiger_counter/Destroy()
|
/obj/item/geiger_counter/Destroy()
|
||||||
STOP_PROCESSING(SSobj, src)
|
STOP_PROCESSING(SSobj, src)
|
||||||
|
QDEL_NULL(soundloop)
|
||||||
|
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/item/geiger_counter/process(delta_time)
|
/obj/item/geiger_counter/process(delta_time)
|
||||||
|
|||||||
@@ -39,6 +39,11 @@
|
|||||||
soundloop = new(list(src))
|
soundloop = new(list(src))
|
||||||
update_appearance()
|
update_appearance()
|
||||||
|
|
||||||
|
/obj/item/taperecorder/Destroy()
|
||||||
|
QDEL_NULL(soundloop)
|
||||||
|
QDEL_NULL(mytape)
|
||||||
|
return ..()
|
||||||
|
|
||||||
/obj/item/taperecorder/proc/readout()
|
/obj/item/taperecorder/proc/readout()
|
||||||
if(mytape)
|
if(mytape)
|
||||||
if(playing)
|
if(playing)
|
||||||
|
|||||||
@@ -20,6 +20,10 @@
|
|||||||
ion_trail.auto_process = FALSE
|
ion_trail.auto_process = FALSE
|
||||||
ion_trail.set_up(src)
|
ion_trail.set_up(src)
|
||||||
|
|
||||||
|
/obj/item/tank/jetpack/Destroy()
|
||||||
|
QDEL_NULL(ion_trail)
|
||||||
|
return ..()
|
||||||
|
|
||||||
/obj/item/tank/jetpack/populate_gas()
|
/obj/item/tank/jetpack/populate_gas()
|
||||||
if(gas_type)
|
if(gas_type)
|
||||||
air_contents.assert_gas(gas_type)
|
air_contents.assert_gas(gas_type)
|
||||||
|
|||||||
@@ -160,7 +160,7 @@
|
|||||||
|
|
||||||
/obj/structure/closet/crate/freezer/Destroy()
|
/obj/structure/closet/crate/freezer/Destroy()
|
||||||
recursive_organ_check(src)
|
recursive_organ_check(src)
|
||||||
..()
|
return ..()
|
||||||
|
|
||||||
/obj/structure/closet/crate/freezer/Initialize()
|
/obj/structure/closet/crate/freezer/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|||||||
@@ -156,6 +156,8 @@ GLOBAL_LIST_EMPTY(station_turfs)
|
|||||||
requires_activation = FALSE
|
requires_activation = FALSE
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
vis_contents.Cut()
|
||||||
|
|
||||||
/turf/attack_hand(mob/user, list/modifiers)
|
/turf/attack_hand(mob/user, list/modifiers)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(.)
|
if(.)
|
||||||
|
|||||||
@@ -233,6 +233,8 @@
|
|||||||
SSradio.remove_object(src, frequency)
|
SSradio.remove_object(src, frequency)
|
||||||
qdel(wires)
|
qdel(wires)
|
||||||
wires = null
|
wires = null
|
||||||
|
var/area/ourarea = get_area(src)
|
||||||
|
ourarea.atmosalert(FALSE, src)
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/machinery/airalarm/Initialize(mapload)
|
/obj/machinery/airalarm/Initialize(mapload)
|
||||||
|
|||||||
@@ -41,7 +41,7 @@
|
|||||||
|
|
||||||
/obj/machinery/computer/cargo/Destroy()
|
/obj/machinery/computer/cargo/Destroy()
|
||||||
QDEL_NULL(radio)
|
QDEL_NULL(radio)
|
||||||
..()
|
return ..()
|
||||||
|
|
||||||
/obj/machinery/computer/cargo/proc/get_export_categories()
|
/obj/machinery/computer/cargo/proc/get_export_categories()
|
||||||
. = EXPORT_CARGO
|
. = EXPORT_CARGO
|
||||||
|
|||||||
@@ -23,6 +23,10 @@
|
|||||||
/// See: [/datum/component/tackler/var/skill_mod]
|
/// See: [/datum/component/tackler/var/skill_mod]
|
||||||
var/skill_mod = 0
|
var/skill_mod = 0
|
||||||
|
|
||||||
|
/obj/item/clothing/gloves/tackler/Destroy()
|
||||||
|
tackler = null
|
||||||
|
return ..()
|
||||||
|
|
||||||
/obj/item/clothing/gloves/tackler/equipped(mob/user, slot)
|
/obj/item/clothing/gloves/tackler/equipped(mob/user, slot)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!ishuman(user))
|
if(!ishuman(user))
|
||||||
@@ -37,7 +41,7 @@
|
|||||||
return
|
return
|
||||||
var/mob/living/carbon/human/H = user
|
var/mob/living/carbon/human/H = user
|
||||||
if(H.get_item_by_slot(ITEM_SLOT_GLOVES) == src)
|
if(H.get_item_by_slot(ITEM_SLOT_GLOVES) == src)
|
||||||
qdel(tackler)
|
QDEL_NULL(tackler)
|
||||||
|
|
||||||
/obj/item/clothing/gloves/tackler/dolphin
|
/obj/item/clothing/gloves/tackler/dolphin
|
||||||
name = "dolphin gloves"
|
name = "dolphin gloves"
|
||||||
|
|||||||
@@ -41,6 +41,10 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list(
|
|||||||
reagents.add_reagent(/datum/reagent/consumable/cooking_oil, 25)
|
reagents.add_reagent(/datum/reagent/consumable/cooking_oil, 25)
|
||||||
fry_loop = new(list(src), FALSE)
|
fry_loop = new(list(src), FALSE)
|
||||||
|
|
||||||
|
/obj/machinery/deepfryer/Destroy()
|
||||||
|
QDEL_NULL(fry_loop)
|
||||||
|
return ..()
|
||||||
|
|
||||||
/obj/machinery/deepfryer/RefreshParts()
|
/obj/machinery/deepfryer/RefreshParts()
|
||||||
var/oil_efficiency
|
var/oil_efficiency
|
||||||
for(var/obj/item/stock_parts/micro_laser/M in component_parts)
|
for(var/obj/item/stock_parts/micro_laser/M in component_parts)
|
||||||
|
|||||||
@@ -20,6 +20,10 @@
|
|||||||
. = ..()
|
. = ..()
|
||||||
grill_loop = new(list(src), FALSE)
|
grill_loop = new(list(src), FALSE)
|
||||||
|
|
||||||
|
/obj/machinery/grill/Destroy()
|
||||||
|
QDEL_NULL(grill_loop)
|
||||||
|
return ..()
|
||||||
|
|
||||||
/obj/machinery/grill/update_icon_state()
|
/obj/machinery/grill/update_icon_state()
|
||||||
if(grilled_item)
|
if(grilled_item)
|
||||||
icon_state = "grill"
|
icon_state = "grill"
|
||||||
|
|||||||
@@ -42,6 +42,7 @@
|
|||||||
eject()
|
eject()
|
||||||
if(wires)
|
if(wires)
|
||||||
QDEL_NULL(wires)
|
QDEL_NULL(wires)
|
||||||
|
QDEL_NULL(soundloop)
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|
||||||
/obj/machinery/microwave/RefreshParts()
|
/obj/machinery/microwave/RefreshParts()
|
||||||
|
|||||||
@@ -58,6 +58,10 @@
|
|||||||
if (needs_update)
|
if (needs_update)
|
||||||
SSlighting.sources_queue -= src
|
SSlighting.sources_queue -= src
|
||||||
|
|
||||||
|
top_atom = null
|
||||||
|
source_atom = null
|
||||||
|
source_turf = null
|
||||||
|
pixel_turf = null
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|
||||||
// Yes this doesn't align correctly on anything other than 4 width tabs.
|
// Yes this doesn't align correctly on anything other than 4 width tabs.
|
||||||
|
|||||||
@@ -17,10 +17,6 @@ Doesn't work on other aliens/AI.*/
|
|||||||
action_icon_state = "spell_default"
|
action_icon_state = "spell_default"
|
||||||
action_background_icon_state = "bg_alien"
|
action_background_icon_state = "bg_alien"
|
||||||
|
|
||||||
/obj/effect/proc_holder/alien/Initialize()
|
|
||||||
. = ..()
|
|
||||||
action = new(src)
|
|
||||||
|
|
||||||
/obj/effect/proc_holder/alien/Click()
|
/obj/effect/proc_holder/alien/Click()
|
||||||
if(!iscarbon(usr))
|
if(!iscarbon(usr))
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@@ -213,7 +213,7 @@
|
|||||||
/mob/living/carbon/proc/assign_bodypart_ownership()
|
/mob/living/carbon/proc/assign_bodypart_ownership()
|
||||||
for(var/X in bodyparts)
|
for(var/X in bodyparts)
|
||||||
var/obj/item/bodypart/BP = X
|
var/obj/item/bodypart/BP = X
|
||||||
BP.original_owner = src
|
BP.original_owner = WEAKREF(src)
|
||||||
|
|
||||||
/mob/living/carbon/proc/update_body_parts()
|
/mob/living/carbon/proc/update_body_parts()
|
||||||
//CHECK FOR UPDATE
|
//CHECK FOR UPDATE
|
||||||
|
|||||||
@@ -520,43 +520,61 @@
|
|||||||
Bot.call_bot(src, waypoint)
|
Bot.call_bot(src, waypoint)
|
||||||
call_bot_cooldown = 0
|
call_bot_cooldown = 0
|
||||||
|
|
||||||
/mob/living/silicon/ai/triggerAlarm(class, area/A, O, obj/alarmsource)
|
/mob/living/silicon/ai/triggerAlarm(class, area/home, cameras, obj/source)
|
||||||
if(alarmsource.z != z)
|
if(source.z != z)
|
||||||
return
|
return
|
||||||
var/list/L = alarms[class]
|
var/list/our_sort = alarms[class]
|
||||||
for (var/I in L)
|
for(var/areaname in our_sort)
|
||||||
if (I == A.name)
|
if (areaname == home.name)
|
||||||
var/list/alarm = L[I]
|
var/list/alarm = our_sort[areaname]
|
||||||
var/list/sources = alarm[3]
|
var/list/sources = alarm[3]
|
||||||
if (!(alarmsource in sources))
|
if (!(source in sources))
|
||||||
sources += alarmsource
|
sources += source
|
||||||
return 1
|
return TRUE
|
||||||
var/obj/machinery/camera/C = null
|
|
||||||
var/list/CL = null
|
var/obj/machinery/camera/cam = null
|
||||||
if (O && istype(O, /list))
|
var/list/our_cams = null
|
||||||
CL = O
|
if(cameras && islist(cameras))
|
||||||
if (CL.len == 1)
|
our_cams = cameras
|
||||||
C = CL[1]
|
if (our_cams.len == 1)
|
||||||
else if (O && istype(O, /obj/machinery/camera))
|
cam = our_cams[1]
|
||||||
C = O
|
else if(cameras && istype(cameras, /obj/machinery/camera))
|
||||||
L[A.name] = list(A, (C) ? C : O, list(alarmsource))
|
cam = cameras
|
||||||
if (O)
|
our_sort[home.name] = list(home, (cam ? cam : cameras), list(source))
|
||||||
if (C?.can_use())
|
|
||||||
queueAlarm("--- [class] alarm detected in [A.name]! (<A HREF=?src=[REF(src)];switchcamera=[REF(C)]>[C.c_tag]</A>)", class)
|
if (cameras)
|
||||||
else if (CL?.len)
|
if (cam?.can_use())
|
||||||
|
queueAlarm("--- [class] alarm detected in [home.name]! (<A HREF=?src=[REF(src)];switchcamera=[REF(cam)]>[cam.c_tag]</A>)", class)
|
||||||
|
else if (our_cams?.len)
|
||||||
var/foo = 0
|
var/foo = 0
|
||||||
var/dat2 = ""
|
var/dat2 = ""
|
||||||
for (var/obj/machinery/camera/I in CL)
|
for (var/obj/machinery/camera/I in our_cams)
|
||||||
dat2 += text("[]<A HREF=?src=[REF(src)];switchcamera=[REF(I)]>[]</A>", (!foo) ? "" : " | ", I.c_tag) //I'm not fixing this shit...
|
dat2 += text("[]<A HREF=?src=[REF(src)];switchcamera=[REF(I)]>[]</A>", (!foo) ? "" : " | ", I.c_tag) //I'm not fixing this shit...
|
||||||
foo = 1
|
foo = 1
|
||||||
queueAlarm(text ("--- [] alarm detected in []! ([])", class, A.name, dat2), class)
|
queueAlarm(text ("--- [] alarm detected in []! ([])", class, home.name, dat2), class)
|
||||||
else
|
else
|
||||||
queueAlarm(text("--- [] alarm detected in []! (No Camera)", class, A.name), class)
|
queueAlarm(text("--- [] alarm detected in []! (No Camera)", class, home.name), class)
|
||||||
else
|
else
|
||||||
queueAlarm(text("--- [] alarm detected in []! (No Camera)", class, A.name), class)
|
queueAlarm(text("--- [] alarm detected in []! (No Camera)", class, home.name), class)
|
||||||
if (viewalerts) ai_alerts()
|
if (viewalerts)
|
||||||
|
ai_alerts()
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
/mob/living/silicon/ai/freeCamera(area/home, obj/machinery/camera/cam)
|
||||||
|
for(var/class in alarms)
|
||||||
|
var/our_area = alarms[class][home.name]
|
||||||
|
if(!our_area)
|
||||||
|
continue
|
||||||
|
var/cams = our_area[2] //Get the cameras
|
||||||
|
if(!cams)
|
||||||
|
continue
|
||||||
|
if(islist(cams))
|
||||||
|
cams -= cam
|
||||||
|
if(length(cams) == 1)
|
||||||
|
our_area[2] = cams[1]
|
||||||
|
else
|
||||||
|
our_area[2] = null
|
||||||
|
|
||||||
/mob/living/silicon/ai/cancelAlarm(class, area/A, obj/origin)
|
/mob/living/silicon/ai/cancelAlarm(class, area/A, obj/origin)
|
||||||
var/list/L = alarms[class]
|
var/list/L = alarms[class]
|
||||||
var/cleared = 0
|
var/cleared = 0
|
||||||
|
|||||||
@@ -240,31 +240,47 @@
|
|||||||
. += "Master AI: [connected_ai.name]"
|
. += "Master AI: [connected_ai.name]"
|
||||||
|
|
||||||
|
|
||||||
/mob/living/silicon/robot/triggerAlarm(class, area/A, O, obj/alarmsource)
|
/mob/living/silicon/robot/triggerAlarm(class, area/home, cameras, obj/source)
|
||||||
if(alarmsource.z != z)
|
if(source.z != z)
|
||||||
return
|
return
|
||||||
if(stat == DEAD)
|
if(stat == DEAD)
|
||||||
return TRUE
|
return TRUE
|
||||||
var/list/L = alarms[class]
|
var/list/our_sort = alarms[class]
|
||||||
for (var/I in L)
|
for(var/areaname in our_sort)
|
||||||
if (I == A.name)
|
if (areaname == home.name)
|
||||||
var/list/alarm = L[I]
|
var/list/alarm = our_sort[areaname]
|
||||||
var/list/sources = alarm[3]
|
var/list/sources = alarm[3]
|
||||||
if (!(alarmsource in sources))
|
if (!(source in sources))
|
||||||
sources += alarmsource
|
sources += source
|
||||||
return TRUE
|
return TRUE
|
||||||
var/obj/machinery/camera/C = null
|
|
||||||
var/list/CL = null
|
var/obj/machinery/camera/cam = null
|
||||||
if (O && istype(O, /list))
|
var/list/our_cams = null
|
||||||
CL = O
|
if(cameras && islist(cameras))
|
||||||
if (CL.len == 1)
|
our_cams = cameras
|
||||||
C = CL[1]
|
if (our_cams.len == 1)
|
||||||
else if (O && istype(O, /obj/machinery/camera))
|
cam = our_cams[1]
|
||||||
C = O
|
else if(cameras && istype(cameras, /obj/machinery/camera))
|
||||||
L[A.name] = list(A, (C) ? C : O, list(alarmsource))
|
cam = cameras
|
||||||
queueAlarm(text("--- [class] alarm detected in [A.name]!"), class)
|
our_sort[home.name] = list(home, (cam ? cam : cameras), list(source))
|
||||||
|
queueAlarm(text("--- [class] alarm detected in [home.name]!"), class)
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
|
/mob/living/silicon/robot/freeCamera(area/home, obj/machinery/camera/cam)
|
||||||
|
for(var/class in alarms)
|
||||||
|
var/our_area = alarms[class][home.name]
|
||||||
|
if(!our_area)
|
||||||
|
continue
|
||||||
|
var/cams = our_area[2] //Get the cameras
|
||||||
|
if(!cams)
|
||||||
|
continue
|
||||||
|
if(islist(cams))
|
||||||
|
cams -= cam
|
||||||
|
if(length(cams) == 1)
|
||||||
|
our_area[2] = cams[1]
|
||||||
|
else
|
||||||
|
our_area[2] = null
|
||||||
|
|
||||||
/mob/living/silicon/robot/cancelAlarm(class, area/A, obj/origin)
|
/mob/living/silicon/robot/cancelAlarm(class, area/A, obj/origin)
|
||||||
var/list/L = alarms[class]
|
var/list/L = alarms[class]
|
||||||
var/cleared = FALSE
|
var/cleared = FALSE
|
||||||
|
|||||||
@@ -81,6 +81,9 @@
|
|||||||
/mob/living/silicon/proc/cancelAlarm()
|
/mob/living/silicon/proc/cancelAlarm()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
/mob/living/silicon/proc/freeCamera()
|
||||||
|
return
|
||||||
|
|
||||||
/mob/living/silicon/proc/triggerAlarm()
|
/mob/living/silicon/proc/triggerAlarm()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -190,9 +190,9 @@
|
|||||||
GLOB.bots_list -= src
|
GLOB.bots_list -= src
|
||||||
if(paicard)
|
if(paicard)
|
||||||
ejectpai()
|
ejectpai()
|
||||||
qdel(Radio)
|
QDEL_NULL(Radio)
|
||||||
qdel(access_card)
|
QDEL_NULL(access_card)
|
||||||
qdel(bot_core)
|
QDEL_NULL(bot_core)
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/mob/living/simple_animal/bot/bee_friendly()
|
/mob/living/simple_animal/bot/bee_friendly()
|
||||||
|
|||||||
@@ -265,20 +265,26 @@
|
|||||||
* * O - unused argument, see [/mob/living/silicon/robot/triggerAlarm]
|
* * O - unused argument, see [/mob/living/silicon/robot/triggerAlarm]
|
||||||
* * alarmsource - [/atom] source of the alarm
|
* * alarmsource - [/atom] source of the alarm
|
||||||
*/
|
*/
|
||||||
/mob/living/simple_animal/drone/proc/triggerAlarm(class, area/A, O, obj/alarmsource)
|
/mob/living/simple_animal/drone/proc/triggerAlarm(class, area/home, cameras, obj/source)
|
||||||
if(alarmsource.z != z)
|
if(source.z != z)
|
||||||
return
|
return
|
||||||
if(stat != DEAD)
|
if(stat == DEAD)
|
||||||
var/list/L = src.alarms[class]
|
return
|
||||||
for (var/I in L)
|
var/list/our_sort = alarms[class]
|
||||||
if (I == A.name)
|
for(var/areaname in our_sort)
|
||||||
var/list/alarm = L[I]
|
if (areaname == home.name)
|
||||||
var/list/sources = alarm[2]
|
var/list/alarm = our_sort[areaname]
|
||||||
if (!(alarmsource in sources))
|
var/list/sources = alarm[3]
|
||||||
sources += alarmsource
|
if (!(source in sources))
|
||||||
return
|
sources += source
|
||||||
L[A.name] = list(A, list(alarmsource))
|
return TRUE
|
||||||
to_chat(src, "--- [class] alarm detected in [A.name]!")
|
|
||||||
|
our_sort[home.name] = list(home, list(source))
|
||||||
|
to_chat(src, "--- [class] alarm detected in [home.name]!")
|
||||||
|
|
||||||
|
///This isn't currently needed since drones do jack shit with cameras. I hate this code so much
|
||||||
|
/mob/living/simple_animal/drone/proc/freeCamera(area/home, obj/machinery/camera/cam)
|
||||||
|
return
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clears alarm and alerts drones
|
* Clears alarm and alerts drones
|
||||||
|
|||||||
@@ -10,6 +10,8 @@
|
|||||||
|
|
||||||
///Adds the mob reference to the list of all mobs alive. If mob is cliented, it adds it to the list of all living player-mobs.
|
///Adds the mob reference to the list of all mobs alive. If mob is cliented, it adds it to the list of all living player-mobs.
|
||||||
/mob/proc/add_to_alive_mob_list()
|
/mob/proc/add_to_alive_mob_list()
|
||||||
|
if(QDELETED(src))
|
||||||
|
return
|
||||||
GLOB.alive_mob_list |= src
|
GLOB.alive_mob_list |= src
|
||||||
if(client)
|
if(client)
|
||||||
add_to_current_living_players()
|
add_to_current_living_players()
|
||||||
@@ -23,6 +25,8 @@
|
|||||||
|
|
||||||
///Adds the mob reference to the list of all the dead mobs. If mob is cliented, it adds it to the list of all dead player-mobs.
|
///Adds the mob reference to the list of all the dead mobs. If mob is cliented, it adds it to the list of all dead player-mobs.
|
||||||
/mob/proc/add_to_dead_mob_list()
|
/mob/proc/add_to_dead_mob_list()
|
||||||
|
if(QDELETED(src))
|
||||||
|
return
|
||||||
GLOB.dead_mob_list |= src
|
GLOB.dead_mob_list |= src
|
||||||
if(client)
|
if(client)
|
||||||
add_to_current_dead_players()
|
add_to_current_dead_players()
|
||||||
|
|||||||
@@ -37,35 +37,49 @@
|
|||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
/datum/computer_file/program/alarm_monitor/proc/triggerAlarm(class, area/A, O, obj/source)
|
/datum/computer_file/program/alarm_monitor/proc/triggerAlarm(class, area/home, cameras, obj/source)
|
||||||
if(is_station_level(source.z))
|
if(is_station_level(source.z))
|
||||||
if(!(A.type in GLOB.the_station_areas))
|
if(!(home.type in GLOB.the_station_areas))
|
||||||
return
|
return
|
||||||
else if(!is_mining_level(source.z) || istype(A, /area/ruin))
|
else if(!is_mining_level(source.z) || istype(home, /area/ruin))
|
||||||
return
|
return
|
||||||
|
|
||||||
var/list/L = alarms[class]
|
var/list/our_sort = alarms[class]
|
||||||
for(var/I in L)
|
for(var/areaname in our_sort)
|
||||||
if (I == A.name)
|
if (areaname == home.name)
|
||||||
var/list/alarm = L[I]
|
var/list/alarm = our_sort[areaname]
|
||||||
var/list/sources = alarm[3]
|
var/list/sources = alarm[3]
|
||||||
if (!(source in sources))
|
if (!(source in sources))
|
||||||
sources += source
|
sources += source
|
||||||
return 1
|
return TRUE
|
||||||
var/obj/machinery/camera/C = null
|
|
||||||
var/list/CL = null
|
var/obj/machinery/camera/cam = null
|
||||||
if(O && istype(O, /list))
|
var/list/our_cams = null
|
||||||
CL = O
|
if(cameras && islist(cameras))
|
||||||
if (CL.len == 1)
|
our_cams = cameras
|
||||||
C = CL[1]
|
if (our_cams.len == 1)
|
||||||
else if(O && istype(O, /obj/machinery/camera))
|
cam = our_cams[1]
|
||||||
C = O
|
else if(cameras && istype(cameras, /obj/machinery/camera))
|
||||||
L[A.name] = list(A, (C ? C : O), list(source))
|
cam = cameras
|
||||||
|
our_sort[home.name] = list(home, (cam ? cam : cameras), list(source))
|
||||||
|
|
||||||
update_alarm_display()
|
update_alarm_display()
|
||||||
|
return TRUE
|
||||||
|
|
||||||
return 1
|
/datum/computer_file/program/alarm_monitor/proc/freeCamera(area/home, obj/machinery/camera/cam)
|
||||||
|
for(var/class in alarms)
|
||||||
|
var/our_area = alarms[class][home.name]
|
||||||
|
if(!our_area)
|
||||||
|
continue
|
||||||
|
var/cams = our_area[2] //Get the cameras
|
||||||
|
if(!cams)
|
||||||
|
continue
|
||||||
|
if(islist(cams))
|
||||||
|
cams -= cam
|
||||||
|
if(length(cams) == 1)
|
||||||
|
our_area[2] = cams[1]
|
||||||
|
else
|
||||||
|
our_area[2] = null
|
||||||
|
|
||||||
/datum/computer_file/program/alarm_monitor/proc/cancelAlarm(class, area/A, obj/origin)
|
/datum/computer_file/program/alarm_monitor/proc/cancelAlarm(class, area/A, obj/origin)
|
||||||
var/list/L = alarms[class]
|
var/list/L = alarms[class]
|
||||||
|
|||||||
@@ -82,15 +82,15 @@
|
|||||||
if(M.buffer && !istype(M.buffer, /obj/machinery/ticket_machine))
|
if(M.buffer && !istype(M.buffer, /obj/machinery/ticket_machine))
|
||||||
return
|
return
|
||||||
var/obj/item/assembly/control/ticket_machine/controller = device
|
var/obj/item/assembly/control/ticket_machine/controller = device
|
||||||
controller.linked = M.buffer
|
controller.linked = WEAKREF(M.buffer)
|
||||||
id = null
|
id = null
|
||||||
controller.id = null
|
controller.id = null
|
||||||
to_chat(user, "<span class='warning'>You've linked [src] to [controller.linked].</span>")
|
to_chat(user, "<span class='warning'>You've linked [src] to [M.buffer].</span>")
|
||||||
|
|
||||||
/obj/item/assembly/control/ticket_machine
|
/obj/item/assembly/control/ticket_machine
|
||||||
name = "ticket machine controller"
|
name = "ticket machine controller"
|
||||||
desc = "A remote controller for the HoP's ticket machine."
|
desc = "A remote controller for the HoP's ticket machine."
|
||||||
var/obj/machinery/ticket_machine/linked //To whom are we linked?
|
var/datum/weakref/linked //To whom are we linked?
|
||||||
|
|
||||||
/obj/item/assembly/control/ticket_machine/Initialize()
|
/obj/item/assembly/control/ticket_machine/Initialize()
|
||||||
..()
|
..()
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
/obj/item/assembly/control/ticket_machine/proc/find_machine() //Locate the one to which we're linked
|
/obj/item/assembly/control/ticket_machine/proc/find_machine() //Locate the one to which we're linked
|
||||||
for(var/obj/machinery/ticket_machine/ticketsplease in GLOB.machines)
|
for(var/obj/machinery/ticket_machine/ticketsplease in GLOB.machines)
|
||||||
if(ticketsplease.id == id)
|
if(ticketsplease.id == id)
|
||||||
linked = ticketsplease
|
linked = WEAKREF(ticketsplease)
|
||||||
if(linked)
|
if(linked)
|
||||||
return TRUE
|
return TRUE
|
||||||
else
|
else
|
||||||
@@ -113,8 +113,11 @@
|
|||||||
return
|
return
|
||||||
if(!linked)
|
if(!linked)
|
||||||
return
|
return
|
||||||
|
var/obj/machinery/ticket_machine/machine = linked.resolve()
|
||||||
|
if(!machine)
|
||||||
|
return
|
||||||
cooldown = TRUE
|
cooldown = TRUE
|
||||||
linked.increment()
|
machine.increment()
|
||||||
addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 10)
|
addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 10)
|
||||||
|
|
||||||
/obj/machinery/ticket_machine/update_icon()
|
/obj/machinery/ticket_machine/update_icon()
|
||||||
|
|||||||
@@ -258,6 +258,7 @@
|
|||||||
area.power_equip = FALSE
|
area.power_equip = FALSE
|
||||||
area.power_environ = FALSE
|
area.power_environ = FALSE
|
||||||
area.power_change()
|
area.power_change()
|
||||||
|
area.poweralert(FALSE, src)
|
||||||
if(occupier)
|
if(occupier)
|
||||||
malfvacate(1)
|
malfvacate(1)
|
||||||
qdel(wires)
|
qdel(wires)
|
||||||
|
|||||||
@@ -600,7 +600,7 @@
|
|||||||
drop_light_tube()
|
drop_light_tube()
|
||||||
new /obj/item/stack/cable_coil(loc, 1, "red")
|
new /obj/item/stack/cable_coil(loc, 1, "red")
|
||||||
transfer_fingerprints_to(newlight)
|
transfer_fingerprints_to(newlight)
|
||||||
if(cell)
|
if(!QDELETED(cell))
|
||||||
newlight.cell = cell
|
newlight.cell = cell
|
||||||
cell.forceMove(newlight)
|
cell.forceMove(newlight)
|
||||||
cell = null
|
cell = null
|
||||||
|
|||||||
@@ -513,27 +513,12 @@
|
|||||||
desc = "Contains a large reservoir of soft drinks. This model has had its safeties shorted out."
|
desc = "Contains a large reservoir of soft drinks. This model has had its safeties shorted out."
|
||||||
obj_flags = CAN_BE_HIT | EMAGGED
|
obj_flags = CAN_BE_HIT | EMAGGED
|
||||||
flags_1 = NODECONSTRUCT_1
|
flags_1 = NODECONSTRUCT_1
|
||||||
|
circuit = /obj/item/circuitboard/machine/chem_dispenser/drinks/fullupgrade
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/drinks/fullupgrade/Initialize()
|
/obj/machinery/chem_dispenser/drinks/fullupgrade/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
dispensable_reagents |= emagged_reagents //adds emagged reagents
|
dispensable_reagents |= emagged_reagents //adds emagged reagents
|
||||||
|
|
||||||
// Cache the old_parts first, we'll delete it after we've changed component_parts to a new list.
|
|
||||||
// This stops handle_atom_del being called on every part when not necessary.
|
|
||||||
var/list/old_parts = component_parts.Copy()
|
|
||||||
|
|
||||||
component_parts = list()
|
|
||||||
component_parts += new /obj/item/circuitboard/machine/chem_dispenser/drinks(src)
|
|
||||||
component_parts += new /obj/item/stock_parts/matter_bin/bluespace(src)
|
|
||||||
component_parts += new /obj/item/stock_parts/matter_bin/bluespace(src)
|
|
||||||
component_parts += new /obj/item/stock_parts/capacitor/quadratic(src)
|
|
||||||
component_parts += new /obj/item/stock_parts/manipulator/femto(src)
|
|
||||||
component_parts += new /obj/item/stack/sheet/glass(src, 1)
|
|
||||||
component_parts += new /obj/item/stock_parts/cell/bluespace(src)
|
|
||||||
|
|
||||||
QDEL_LIST(old_parts)
|
|
||||||
RefreshParts()
|
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/drinks/beer
|
/obj/machinery/chem_dispenser/drinks/beer
|
||||||
name = "booze dispenser"
|
name = "booze dispenser"
|
||||||
desc = "Contains a large reservoir of the good stuff."
|
desc = "Contains a large reservoir of the good stuff."
|
||||||
@@ -576,27 +561,12 @@
|
|||||||
desc = "Contains a large reservoir of the good stuff. This model has had its safeties shorted out."
|
desc = "Contains a large reservoir of the good stuff. This model has had its safeties shorted out."
|
||||||
obj_flags = CAN_BE_HIT | EMAGGED
|
obj_flags = CAN_BE_HIT | EMAGGED
|
||||||
flags_1 = NODECONSTRUCT_1
|
flags_1 = NODECONSTRUCT_1
|
||||||
|
circuit = /obj/item/circuitboard/machine/chem_dispenser/drinks/beer/fullupgrade
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/drinks/beer/fullupgrade/Initialize()
|
/obj/machinery/chem_dispenser/drinks/beer/fullupgrade/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
dispensable_reagents |= emagged_reagents //adds emagged reagents
|
dispensable_reagents |= emagged_reagents //adds emagged reagents
|
||||||
|
|
||||||
// Cache the old_parts first, we'll delete it after we've changed component_parts to a new list.
|
|
||||||
// This stops handle_atom_del being called on every part when not necessary.
|
|
||||||
var/list/old_parts = component_parts.Copy()
|
|
||||||
|
|
||||||
component_parts = list()
|
|
||||||
component_parts += new /obj/item/circuitboard/machine/chem_dispenser/drinks/beer(src)
|
|
||||||
component_parts += new /obj/item/stock_parts/matter_bin/bluespace(src)
|
|
||||||
component_parts += new /obj/item/stock_parts/matter_bin/bluespace(src)
|
|
||||||
component_parts += new /obj/item/stock_parts/capacitor/quadratic(src)
|
|
||||||
component_parts += new /obj/item/stock_parts/manipulator/femto(src)
|
|
||||||
component_parts += new /obj/item/stack/sheet/glass(src, 1)
|
|
||||||
component_parts += new /obj/item/stock_parts/cell/bluespace(src)
|
|
||||||
|
|
||||||
QDEL_LIST(old_parts)
|
|
||||||
RefreshParts()
|
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/mutagen
|
/obj/machinery/chem_dispenser/mutagen
|
||||||
name = "mutagen dispenser"
|
name = "mutagen dispenser"
|
||||||
desc = "Creates and dispenses mutagen."
|
desc = "Creates and dispenses mutagen."
|
||||||
@@ -610,6 +580,8 @@
|
|||||||
desc = "Creates and dispenses chemicals useful for botany."
|
desc = "Creates and dispenses chemicals useful for botany."
|
||||||
flags_1 = NODECONSTRUCT_1
|
flags_1 = NODECONSTRUCT_1
|
||||||
|
|
||||||
|
circuit = /obj/item/circuitboard/machine/chem_dispenser/mutagensaltpeter
|
||||||
|
|
||||||
dispensable_reagents = list(
|
dispensable_reagents = list(
|
||||||
/datum/reagent/toxin/mutagen,
|
/datum/reagent/toxin/mutagen,
|
||||||
/datum/reagent/saltpetre,
|
/datum/reagent/saltpetre,
|
||||||
@@ -626,50 +598,16 @@
|
|||||||
/datum/reagent/diethylamine)
|
/datum/reagent/diethylamine)
|
||||||
upgrade_reagents = null
|
upgrade_reagents = null
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/mutagensaltpeter/Initialize()
|
|
||||||
. = ..()
|
|
||||||
|
|
||||||
// Cache the old_parts first, we'll delete it after we've changed component_parts to a new list.
|
|
||||||
// This stops handle_atom_del being called on every part when not necessary.
|
|
||||||
var/list/old_parts = component_parts.Copy()
|
|
||||||
|
|
||||||
component_parts = list()
|
|
||||||
component_parts += new /obj/item/circuitboard/machine/chem_dispenser(src)
|
|
||||||
component_parts += new /obj/item/stock_parts/matter_bin/bluespace(src)
|
|
||||||
component_parts += new /obj/item/stock_parts/matter_bin/bluespace(src)
|
|
||||||
component_parts += new /obj/item/stock_parts/capacitor/quadratic(src)
|
|
||||||
component_parts += new /obj/item/stock_parts/manipulator/femto(src)
|
|
||||||
component_parts += new /obj/item/stack/sheet/glass(src, 1)
|
|
||||||
component_parts += new /obj/item/stock_parts/cell/bluespace(src)
|
|
||||||
|
|
||||||
QDEL_LIST(old_parts)
|
|
||||||
RefreshParts()
|
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/fullupgrade //fully ugpraded stock parts, emagged
|
/obj/machinery/chem_dispenser/fullupgrade //fully ugpraded stock parts, emagged
|
||||||
desc = "Creates and dispenses chemicals. This model has had its safeties shorted out."
|
desc = "Creates and dispenses chemicals. This model has had its safeties shorted out."
|
||||||
obj_flags = CAN_BE_HIT | EMAGGED
|
obj_flags = CAN_BE_HIT | EMAGGED
|
||||||
flags_1 = NODECONSTRUCT_1
|
flags_1 = NODECONSTRUCT_1
|
||||||
|
circuit = /obj/item/circuitboard/machine/chem_dispenser/fullupgrade
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/fullupgrade/Initialize()
|
/obj/machinery/chem_dispenser/fullupgrade/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
dispensable_reagents |= emagged_reagents //adds emagged reagents
|
dispensable_reagents |= emagged_reagents //adds emagged reagents
|
||||||
|
|
||||||
// Cache the old_parts first, we'll delete it after we've changed component_parts to a new list.
|
|
||||||
// This stops handle_atom_del being called on every part when not necessary.
|
|
||||||
var/list/old_parts = component_parts.Copy()
|
|
||||||
|
|
||||||
component_parts = list()
|
|
||||||
component_parts += new /obj/item/circuitboard/machine/chem_dispenser(src)
|
|
||||||
component_parts += new /obj/item/stock_parts/matter_bin/bluespace(src)
|
|
||||||
component_parts += new /obj/item/stock_parts/matter_bin/bluespace(src)
|
|
||||||
component_parts += new /obj/item/stock_parts/capacitor/quadratic(src)
|
|
||||||
component_parts += new /obj/item/stock_parts/manipulator/femto(src)
|
|
||||||
component_parts += new /obj/item/stack/sheet/glass(src, 1)
|
|
||||||
component_parts += new /obj/item/stock_parts/cell/bluespace(src)
|
|
||||||
|
|
||||||
QDEL_LIST(old_parts)
|
|
||||||
RefreshParts()
|
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/abductor
|
/obj/machinery/chem_dispenser/abductor
|
||||||
name = "reagent synthesizer"
|
name = "reagent synthesizer"
|
||||||
desc = "Synthesizes a variety of reagents using proto-matter."
|
desc = "Synthesizes a variety of reagents using proto-matter."
|
||||||
@@ -720,22 +658,3 @@
|
|||||||
/datum/reagent/toxin/plasma,
|
/datum/reagent/toxin/plasma,
|
||||||
/datum/reagent/uranium
|
/datum/reagent/uranium
|
||||||
)
|
)
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/abductor/Initialize()
|
|
||||||
. = ..()
|
|
||||||
|
|
||||||
// Cache the old_parts first, we'll delete it after we've changed component_parts to a new list.
|
|
||||||
// This stops handle_atom_del being called on every part when not necessary.
|
|
||||||
var/list/old_parts = component_parts.Copy()
|
|
||||||
|
|
||||||
component_parts = list()
|
|
||||||
component_parts += new /obj/item/circuitboard/machine/chem_dispenser(src)
|
|
||||||
component_parts += new /obj/item/stock_parts/matter_bin/bluespace(src)
|
|
||||||
component_parts += new /obj/item/stock_parts/matter_bin/bluespace(src)
|
|
||||||
component_parts += new /obj/item/stock_parts/capacitor/quadratic(src)
|
|
||||||
component_parts += new /obj/item/stock_parts/manipulator/femto(src)
|
|
||||||
component_parts += new /obj/item/stack/sheet/glass(src, 1)
|
|
||||||
component_parts += new /obj/item/stock_parts/cell/bluespace(src)
|
|
||||||
|
|
||||||
QDEL_LIST(old_parts)
|
|
||||||
RefreshParts()
|
|
||||||
|
|||||||
@@ -51,7 +51,7 @@
|
|||||||
if(H)
|
if(H)
|
||||||
H.active = FALSE
|
H.active = FALSE
|
||||||
expel(H, get_turf(src), 0)
|
expel(H, get_turf(src), 0)
|
||||||
QDEL_NULL(stored)
|
stored = null //The qdel is handled in expel()
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/structure/disposalpipe/handle_atom_del(atom/A)
|
/obj/structure/disposalpipe/handle_atom_del(atom/A)
|
||||||
|
|||||||
@@ -37,8 +37,7 @@
|
|||||||
GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for the badmin verb for now
|
GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for the badmin verb for now
|
||||||
|
|
||||||
/obj/effect/proc_holder/Destroy()
|
/obj/effect/proc_holder/Destroy()
|
||||||
if (action)
|
QDEL_NULL(action)
|
||||||
qdel(action)
|
|
||||||
if(ranged_ability_user)
|
if(ranged_ability_user)
|
||||||
remove_ranged_ability()
|
remove_ranged_ability()
|
||||||
return ..()
|
return ..()
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
icon_state = ""
|
icon_state = ""
|
||||||
layer = BELOW_MOB_LAYER //so it isn't hidden behind objects when on the floor
|
layer = BELOW_MOB_LAYER //so it isn't hidden behind objects when on the floor
|
||||||
var/mob/living/carbon/owner = null
|
var/mob/living/carbon/owner = null
|
||||||
var/mob/living/carbon/original_owner = null
|
var/datum/weakref/original_owner = null
|
||||||
var/status = BODYPART_ORGANIC
|
var/status = BODYPART_ORGANIC
|
||||||
var/needs_processing = FALSE
|
var/needs_processing = FALSE
|
||||||
|
|
||||||
@@ -724,10 +724,10 @@
|
|||||||
if(source)
|
if(source)
|
||||||
C = source
|
C = source
|
||||||
if(!original_owner)
|
if(!original_owner)
|
||||||
original_owner = source
|
original_owner = WEAKREF(source)
|
||||||
else
|
else
|
||||||
C = owner
|
C = owner
|
||||||
if(original_owner && owner != original_owner) //Foreign limb
|
if(original_owner && !IS_WEAKREF_OF(owner, original_owner)) //Foreign limb
|
||||||
no_update = TRUE
|
no_update = TRUE
|
||||||
else
|
else
|
||||||
no_update = FALSE
|
no_update = FALSE
|
||||||
|
|||||||
@@ -224,6 +224,7 @@
|
|||||||
for(var/obj/item/mecha_parts/mecha_equipment/equip as anything in equipment)
|
for(var/obj/item/mecha_parts/mecha_equipment/equip as anything in equipment)
|
||||||
equip.detach(loc)
|
equip.detach(loc)
|
||||||
qdel(equip)
|
qdel(equip)
|
||||||
|
radio = null
|
||||||
|
|
||||||
STOP_PROCESSING(SSobj, src)
|
STOP_PROCESSING(SSobj, src)
|
||||||
LAZYCLEARLIST(equipment)
|
LAZYCLEARLIST(equipment)
|
||||||
@@ -237,6 +238,8 @@
|
|||||||
QDEL_NULL(smoke_system)
|
QDEL_NULL(smoke_system)
|
||||||
|
|
||||||
GLOB.mechas_list -= src //global mech list
|
GLOB.mechas_list -= src //global mech list
|
||||||
|
for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds)
|
||||||
|
diag_hud.remove_from_hud(src) //YEET
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/vehicle/sealed/mecha/obj_destruction()
|
/obj/vehicle/sealed/mecha/obj_destruction()
|
||||||
|
|||||||
Reference in New Issue
Block a user