mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-09 16:07:40 +00:00
all else
This commit is contained in:
@@ -30,46 +30,46 @@ GLOBAL_LIST_INIT(bitflags, list(
|
||||
|
||||
//FLAGS BITMASK
|
||||
///This flag is what recursive_hear_check() uses to determine wether to add an item to the hearer list or not.
|
||||
#define HEAR_1 (1<<3)
|
||||
#define HEAR_1 (1<<0)
|
||||
///Projectiles will use default chance-based ricochet handling on things with this.
|
||||
#define DEFAULT_RICOCHET_1 (1<<4)
|
||||
#define DEFAULT_RICOCHET_1 (1<<1)
|
||||
///Conducts electricity (metal etc.).
|
||||
#define CONDUCT_1 (1<<5)
|
||||
#define CONDUCT_1 (1<<2)
|
||||
///For machines and structures that should not break into parts, eg, holodeck stuff.
|
||||
#define NODECONSTRUCT_1 (1<<7)
|
||||
#define NODECONSTRUCT_1 (1<<3)
|
||||
///Atom queued to SSoverlay.
|
||||
#define OVERLAY_QUEUED_1 (1<<8)
|
||||
#define OVERLAY_QUEUED_1 (1<<4)
|
||||
///Item has priority to check when entering or leaving.
|
||||
#define ON_BORDER_1 (1<<9)
|
||||
#define ON_BORDER_1 (1<<5)
|
||||
///Whether or not this atom shows screentips when hovered over
|
||||
#define NO_SCREENTIPS_1 (1<<10)
|
||||
#define NO_SCREENTIPS_1 (1<<6)
|
||||
///Prevent clicking things below it on the same turf eg. doors/ fulltile windows.
|
||||
#define PREVENT_CLICK_UNDER_1 (1<<11)
|
||||
#define HOLOGRAM_1 (1<<12)
|
||||
#define PREVENT_CLICK_UNDER_1 (1<<7)
|
||||
#define HOLOGRAM_1 (1<<8)
|
||||
///Prevents mobs from getting chainshocked by teslas and the supermatter.
|
||||
#define SHOCKED_1 (1<<13)
|
||||
#define SHOCKED_1 (1<<9)
|
||||
///Whether /atom/Initialize() has already run for the object.
|
||||
#define INITIALIZED_1 (1<<14)
|
||||
#define INITIALIZED_1 (1<<10)
|
||||
///was this spawned by an admin? used for stat tracking stuff.
|
||||
#define ADMIN_SPAWNED_1 (1<<15)
|
||||
#define ADMIN_SPAWNED_1 (1<<11)
|
||||
/// should not get harmed if this gets caught by an explosion?
|
||||
#define PREVENT_CONTENTS_EXPLOSION_1 (1<<16)
|
||||
#define PREVENT_CONTENTS_EXPLOSION_1 (1<<12)
|
||||
/// Early returns mob.face_atom()
|
||||
#define BLOCK_FACE_ATOM_1 (1<<17)
|
||||
#define BLOCK_FACE_ATOM_1 (1<<13)
|
||||
|
||||
//turf-only flags
|
||||
#define NOJAUNT_1 (1<<0)
|
||||
#define UNUSED_RESERVATION_TURF_1 (1<<1)
|
||||
#define NOJAUNT_1 (1<<14)
|
||||
#define UNUSED_RESERVATION_TURF_1 (1<<15)
|
||||
/// If a turf can be made dirty at roundstart. This is also used in areas.
|
||||
#define CAN_BE_DIRTY_1 (1<<2)
|
||||
#define CAN_BE_DIRTY_1 (1<<16)
|
||||
/// Blocks lava rivers being generated on the turf
|
||||
#define NO_LAVA_GEN_1 (1<<6)
|
||||
#define NO_LAVA_GEN_1 (1<<17)
|
||||
/// Blocks ruins spawning on the turf
|
||||
#define NO_RUINS_1 (1<<10)
|
||||
#define NO_RUINS_1 (1<<18)
|
||||
/// Should this tile be cleaned up and reinserted into an excited group?
|
||||
#define EXCITED_CLEANUP_1 (1 << 13)
|
||||
#define EXCITED_CLEANUP_1 (1 << 19)
|
||||
/// Whether or not this atom has contextual screentips when hovered OVER
|
||||
#define HAS_CONTEXTUAL_SCREENTIPS_1 (1 << 14)
|
||||
#define HAS_CONTEXTUAL_SCREENTIPS_1 (1 << 20)
|
||||
|
||||
////////////////Area flags\\\\\\\\\\\\\\
|
||||
/// If it's a valid territory for cult summoning or the CRAB-17 phone to spawn
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
|
||||
#define COOLDOWN_DECLARE(cd_index) var/##cd_index = 0
|
||||
|
||||
#define COOLDOWN_START(cd_source, cd_index, cd_time) (cd_source.cd_index = world.time + cd_time)
|
||||
#define COOLDOWN_START(cd_source, cd_index, cd_time) (cd_source.cd_index = world.time + (cd_time))
|
||||
|
||||
//Returns true if the cooldown has run its course, false otherwise
|
||||
#define COOLDOWN_FINISHED(cd_source, cd_index) (cd_source.cd_index < world.time)
|
||||
|
||||
@@ -40,6 +40,6 @@
|
||||
#define GC_DEL_QUEUE 10 SECONDS
|
||||
|
||||
#define QDELING(X) (X.gc_destroyed)
|
||||
#define QDELETED(X) (!X || QDELING(X))
|
||||
#define QDELETED(X) (isnull(X) || QDELING(X))
|
||||
#define QDESTROYING(X) (!X || X.gc_destroyed == GC_CURRENTLY_BEING_QDELETED)
|
||||
|
||||
|
||||
@@ -87,6 +87,9 @@
|
||||
///Call qdel on the atom after intialization
|
||||
#define INITIALIZE_HINT_QDEL 2
|
||||
|
||||
//Call qdel with a force of TRUE after initialization
|
||||
#define INITIALIZE_HINT_QDEL_FORCE 3
|
||||
|
||||
///type and all subtypes should always immediately call Initialize in New()
|
||||
#define INITIALIZE_IMMEDIATE(X) ##X/New(loc, ...){\
|
||||
..();\
|
||||
|
||||
@@ -185,7 +185,8 @@
|
||||
while (world.time + resume_time < endtime)
|
||||
stoplag(1)
|
||||
if (progress)
|
||||
progbar.update(world.time - starttime + resume_time)
|
||||
if(!QDELETED(progbar))
|
||||
progbar.update(world.time - starttime + resume_time)
|
||||
if(QDELETED(user) || QDELETED(target))
|
||||
. = 0
|
||||
break
|
||||
@@ -264,7 +265,8 @@
|
||||
while (world.time + resume_time < endtime)
|
||||
stoplag(1)
|
||||
if (progress)
|
||||
progbar.update(world.time - starttime + resume_time)
|
||||
if(!QDELETED(progbar))
|
||||
progbar.update(world.time - starttime + resume_time)
|
||||
|
||||
if(drifting && !user.inertia_dir)
|
||||
drifting = 0
|
||||
@@ -339,7 +341,8 @@
|
||||
while(world.time < endtime)
|
||||
stoplag(1)
|
||||
if(progress)
|
||||
progbar.update(world.time - starttime)
|
||||
if(!QDELETED(progbar))
|
||||
progbar.update(world.time - starttime)
|
||||
if(QDELETED(user) || !targets)
|
||||
. = 0
|
||||
break
|
||||
|
||||
@@ -89,6 +89,7 @@
|
||||
#define REFERENCE_TRACKING
|
||||
#define REFERENCE_TRACKING_DEBUG
|
||||
#define FIND_REF_NO_CHECK_TICK
|
||||
// #define GC_FAILURE_HARD_LOOKUP // Uncomment this to have harddel reftracking in unit tests (takes 3-5min to run per single harddel)
|
||||
#endif
|
||||
|
||||
#ifdef TGS
|
||||
|
||||
@@ -55,14 +55,15 @@
|
||||
animate(src, alpha = 255, time = CREDIT_EASE_DURATION, flags = ANIMATION_PARALLEL)
|
||||
addtimer(CALLBACK(src, .proc/FadeOut), CREDIT_ROLL_SPEED - CREDIT_EASE_DURATION)
|
||||
QDEL_IN(src, CREDIT_ROLL_SPEED)
|
||||
P.screen += src
|
||||
if(parent)
|
||||
parent.screen += src
|
||||
|
||||
/atom/movable/screen/credit/Destroy()
|
||||
var/client/P = parent
|
||||
P.screen -= src
|
||||
icon = null
|
||||
LAZYREMOVE(P.credits, src)
|
||||
parent = null
|
||||
if(parent)
|
||||
parent.screen -= src
|
||||
LAZYREMOVE(parent.credits, src)
|
||||
parent = null
|
||||
return ..()
|
||||
|
||||
/atom/movable/screen/credit/proc/FadeOut()
|
||||
|
||||
@@ -9,6 +9,17 @@ GLOBAL_LIST_EMPTY(radial_menus)
|
||||
plane = ABOVE_HUD_PLANE
|
||||
var/datum/radial_menu/parent
|
||||
|
||||
/atom/movable/screen/radial/proc/set_parent(new_value)
|
||||
if(parent)
|
||||
UnregisterSignal(parent, COMSIG_PARENT_QDELETING)
|
||||
parent = new_value
|
||||
if(parent)
|
||||
RegisterSignal(parent, COMSIG_PARENT_QDELETING, .proc/handle_parent_del)
|
||||
|
||||
/atom/movable/screen/radial/proc/handle_parent_del()
|
||||
SIGNAL_HANDLER
|
||||
set_parent(null)
|
||||
|
||||
/atom/movable/screen/radial/slice
|
||||
icon_state = "radial_slice"
|
||||
var/choice
|
||||
@@ -124,7 +135,7 @@ GLOBAL_LIST_EMPTY(radial_menus)
|
||||
for(var/i in 1 to elements_to_add) //Create all elements
|
||||
var/atom/movable/screen/radial/slice/new_element = new /atom/movable/screen/radial/slice
|
||||
new_element.tooltips = use_tooltips
|
||||
new_element.parent = src
|
||||
new_element.set_parent(src)
|
||||
elements += new_element
|
||||
|
||||
var/page = 1
|
||||
@@ -210,7 +221,7 @@ GLOBAL_LIST_EMPTY(radial_menus)
|
||||
|
||||
/datum/radial_menu/New()
|
||||
close_button = new
|
||||
close_button.parent = src
|
||||
close_button.set_parent(src)
|
||||
|
||||
/datum/radial_menu/proc/Reset()
|
||||
choices.Cut()
|
||||
|
||||
@@ -302,8 +302,9 @@
|
||||
icon_state = "lamp_off"
|
||||
|
||||
/atom/movable/screen/robot/lamp/Destroy()
|
||||
robot.lampButton = null
|
||||
robot = null
|
||||
if(robot)
|
||||
robot.lampButton = null
|
||||
robot = null
|
||||
return ..()
|
||||
|
||||
/atom/movable/screen/robot/alerts
|
||||
@@ -343,8 +344,9 @@
|
||||
var/mob/living/silicon/robot/robot
|
||||
|
||||
/atom/movable/screen/robot/modPC/Destroy()
|
||||
robot.interfaceButton = null
|
||||
robot = null
|
||||
if(robot)
|
||||
robot.interfaceButton = null
|
||||
robot = null
|
||||
return ..()
|
||||
|
||||
/atom/movable/screen/robot/modPC/Click()
|
||||
|
||||
@@ -97,6 +97,9 @@ SUBSYSTEM_DEF(atoms)
|
||||
if(INITIALIZE_HINT_QDEL)
|
||||
qdel(A)
|
||||
qdeleted = TRUE
|
||||
if(INITIALIZE_HINT_QDEL_FORCE)
|
||||
qdel(A, force = TRUE)
|
||||
qdeleted = TRUE
|
||||
else
|
||||
BadInitializeCalls[the_type] |= BAD_INIT_NO_HINT
|
||||
|
||||
|
||||
@@ -74,6 +74,8 @@ SUBSYSTEM_DEF(jukeboxes)
|
||||
activejukeboxes[IDtoupdate][JUKE_FALLOFF] = jukefalloff
|
||||
|
||||
/datum/controller/subsystem/jukeboxes/proc/removejukebox(IDtoremove)
|
||||
if(!IDtoremove)
|
||||
return
|
||||
if(islist(activejukeboxes[IDtoremove]))
|
||||
var/jukechannel = activejukeboxes[IDtoremove][JUKE_CHANNEL]
|
||||
for(var/mob/M in GLOB.player_list)
|
||||
|
||||
@@ -335,7 +335,7 @@ SUBSYSTEM_DEF(persistence)
|
||||
if(!istype(ending_human) || !ending_human.mind || !ending_human.client || !ending_human.client.prefs || !ending_human.client.prefs.persistent_scars)
|
||||
continue
|
||||
|
||||
var/mob/living/carbon/human/original_human = ending_human.mind.original_character
|
||||
var/mob/living/carbon/human/original_human = ending_human.mind.original_character.resolve()
|
||||
if(!original_human || original_human.stat == DEAD || !original_human.all_scars || !(original_human == ending_human))
|
||||
if(ending_human.client) // i was told if i don't check this every step of the way byond might decide a client ceases to exist mid proc so here we go
|
||||
ending_human.client.prefs.scars_list["[ending_human.client.prefs.scars_index]"] = ""
|
||||
@@ -356,7 +356,7 @@ SUBSYSTEM_DEF(persistence)
|
||||
if(!istype(ending_human) || !ending_human.mind || !ending_human.client || !ending_human.client.prefs || !ending_human.client.prefs.tcg_cards)
|
||||
continue
|
||||
|
||||
var/mob/living/carbon/human/original_human = ending_human.mind.original_character
|
||||
var/mob/living/carbon/human/original_human = ending_human.mind.original_character.resolve()
|
||||
if(!original_human || original_human.stat == DEAD || !(original_human == ending_human))
|
||||
continue
|
||||
|
||||
|
||||
@@ -648,6 +648,7 @@
|
||||
/datum/action/spell_action/Destroy()
|
||||
var/obj/effect/proc_holder/S = target
|
||||
S.action = null
|
||||
target = null
|
||||
return ..()
|
||||
|
||||
/datum/action/spell_action/Trigger()
|
||||
|
||||
@@ -87,6 +87,8 @@
|
||||
to_chat(src, "<span class='notice'>You cannot directly influence the world around you, but you can see what [owner] cannot.</span>")
|
||||
|
||||
/mob/camera/imaginary_friend/Initialize(mapload, _trauma)
|
||||
if(!_trauma)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
. = ..()
|
||||
|
||||
trauma = _trauma
|
||||
@@ -129,7 +131,7 @@
|
||||
client.images |= current_image
|
||||
|
||||
/mob/camera/imaginary_friend/Destroy()
|
||||
if(owner.client)
|
||||
if(owner?.client)
|
||||
owner.client.images.Remove(human_image)
|
||||
if(client)
|
||||
client.images.Remove(human_image)
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
hud.show_hud(hud.hud_version)
|
||||
|
||||
/datum/component/mood/Destroy()
|
||||
QDEL_LIST_ASSOC_VAL(mood_events)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
unmodify_hud()
|
||||
return ..()
|
||||
|
||||
@@ -266,7 +266,7 @@
|
||||
var/w_bonus = wound_info_by_part[hit_part][CLOUD_POSITION_W_BONUS]
|
||||
var/bw_bonus = wound_info_by_part[hit_part][CLOUD_POSITION_BW_BONUS]
|
||||
var/wound_type = (initial(P.damage_type) == BRUTE) ? WOUND_BLUNT : WOUND_BURN // sharpness is handled in the wound rolling
|
||||
wound_info_by_part[hit_part] = null
|
||||
wound_info_by_part -= hit_part
|
||||
hit_part.painless_wound_roll(wound_type, damage_dealt, w_bonus, bw_bonus, initial(P.sharpness))
|
||||
|
||||
if(num_hits > 1)
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
if(AM.movement_type & (FLYING|FLOATING) || !AM.has_gravity())
|
||||
return
|
||||
var/atom/current_parent = parent
|
||||
if(isturf(current_parent.loc))
|
||||
if(isturf(current_parent?.loc))
|
||||
if(do_play_squeak())
|
||||
SEND_SIGNAL(AM, COMSIG_CROSS_SQUEAKED)
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
var/mob/living/carbon/P = parent
|
||||
to_chat(P, "<span class='notice'>You can no longer tackle.</span>")
|
||||
P.tackling = FALSE
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/datum/component/tackler/RegisterWithParent()
|
||||
RegisterSignal(parent, COMSIG_MOB_CLICKON, .proc/checkTackle)
|
||||
|
||||
@@ -19,6 +19,10 @@
|
||||
dashing_item = dasher
|
||||
holder = user
|
||||
|
||||
/datum/action/innate/dash/Destroy()
|
||||
dashing_item = null
|
||||
return ..()
|
||||
|
||||
/datum/action/innate/dash/IsAvailable(silent = FALSE)
|
||||
if(current_charges > 0)
|
||||
return TRUE
|
||||
|
||||
@@ -31,6 +31,8 @@
|
||||
|
||||
/datum/element/dwarfism/Detach(mob/living/L)
|
||||
. = ..()
|
||||
attached_targets -= L
|
||||
UnregisterSignal(L, comsig)
|
||||
if(QDELETED(L))
|
||||
return
|
||||
if(L.lying != 0)
|
||||
@@ -39,8 +41,6 @@
|
||||
else
|
||||
L.transform = L.transform.Scale(1, TALL)
|
||||
L.transform = L.transform.Translate(0, 16*(TALL-1)) //Makes sure you stand on the tile no matter the size - sand
|
||||
UnregisterSignal(L, comsig)
|
||||
attached_targets -= L
|
||||
|
||||
#undef SHORT
|
||||
#undef TALL
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
UnregisterSignal(target, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED, COMSIG_MOB_SPELL_CAN_CAST))
|
||||
if(users_by_item[target])
|
||||
var/mob/user = users_by_item[target]
|
||||
users_by_item -= target
|
||||
stacked_spellcasting_by_user[user]--
|
||||
if(!stacked_spellcasting_by_user[user])
|
||||
stacked_spellcasting_by_user -= user
|
||||
|
||||
@@ -205,8 +205,8 @@ GLOBAL_LIST_EMPTY(explosions)
|
||||
//lists are guaranteed to contain at least 1 turf at this point
|
||||
|
||||
var/iteration = 0
|
||||
var/affTurfLen = affected_turfs.len
|
||||
var/expBlockLen = cached_exp_block.len
|
||||
var/affTurfLen = length(affected_turfs)
|
||||
var/expBlockLen = length(cached_exp_block)
|
||||
for(var/TI in affected_turfs)
|
||||
var/turf/T = TI
|
||||
++iteration
|
||||
@@ -282,8 +282,8 @@ GLOBAL_LIST_EMPTY(explosions)
|
||||
break
|
||||
|
||||
//update the trackers
|
||||
affTurfLen = affected_turfs.len
|
||||
expBlockLen = cached_exp_block.len
|
||||
affTurfLen = length(affected_turfs)
|
||||
expBlockLen = length(cached_exp_block)
|
||||
|
||||
if(break_condition)
|
||||
if(reactionary)
|
||||
@@ -299,8 +299,8 @@ GLOBAL_LIST_EMPTY(explosions)
|
||||
break
|
||||
|
||||
//update the trackers
|
||||
affTurfLen = affected_turfs.len
|
||||
expBlockLen = cached_exp_block.len
|
||||
affTurfLen = length(affected_turfs)
|
||||
expBlockLen = length(cached_exp_block)
|
||||
|
||||
var/circumference = (PI * (init_dist + 4) * 2) //+4 to radius to prevent shit gaps
|
||||
if(exploded_this_tick.len > circumference) //only do this every revolution
|
||||
@@ -357,7 +357,7 @@ GLOBAL_LIST_EMPTY(explosions)
|
||||
var/processed = 0
|
||||
while(running)
|
||||
var/I
|
||||
for(I in (processed + 1) to affected_turfs.len) // we cache the explosion block rating of every turf in the explosion area
|
||||
for(I in (processed + 1) to length(affected_turfs)) // we cache the explosion block rating of every turf in the explosion area
|
||||
var/turf/T = affected_turfs[I]
|
||||
var/current_exp_block = T.density ? T.explosion_block : 0
|
||||
|
||||
|
||||
@@ -80,8 +80,8 @@
|
||||
var/list/ambitions
|
||||
//ambition end
|
||||
|
||||
///What character we spawned in as- either at roundstart or latejoin, so we know for persistent scars if we ended as the same person or not
|
||||
var/mob/original_character
|
||||
///Weakref to the character we spawned in as- either at roundstart or latejoin, so we know for persistent scars if we ended as the same person or not
|
||||
var/datum/weakref/original_character
|
||||
|
||||
/// A lazy list of statuses to add next to this mind in the traitor panel
|
||||
var/list/special_statuses
|
||||
@@ -101,8 +101,26 @@
|
||||
qdel(i)
|
||||
antag_datums = null
|
||||
QDEL_NULL(skill_holder)
|
||||
set_current(null)
|
||||
soulOwner = null
|
||||
return ..()
|
||||
|
||||
/datum/mind/proc/set_current(mob/new_current)
|
||||
if(new_current && QDELETED(new_current))
|
||||
CRASH("Tried to set a mind's current var to a qdeleted mob, what the fuck")
|
||||
if(current)
|
||||
UnregisterSignal(src, COMSIG_PARENT_QDELETING)
|
||||
current = new_current
|
||||
if(current)
|
||||
RegisterSignal(src, COMSIG_PARENT_QDELETING, PROC_REF(clear_current))
|
||||
|
||||
/datum/mind/proc/clear_current(datum/source)
|
||||
SIGNAL_HANDLER
|
||||
set_current(null)
|
||||
|
||||
/datum/mind/proc/set_original_character(new_original_character)
|
||||
original_character = WEAKREF(new_original_character)
|
||||
|
||||
/datum/mind/proc/get_language_holder()
|
||||
if(!language_holder)
|
||||
language_holder = new (src)
|
||||
@@ -125,13 +143,13 @@
|
||||
key = new_character.key
|
||||
|
||||
if(new_character.mind) //disassociate any mind currently in our new body's mind variable
|
||||
new_character.mind.current = null
|
||||
new_character.mind.set_current(null)
|
||||
|
||||
var/datum/atom_hud/antag/hud_to_transfer = antag_hud//we need this because leave_hud() will clear this list
|
||||
var/mob/living/old_current = current
|
||||
if(current)
|
||||
current.transfer_observers_to(new_character) //transfer anyone observing the old character to the new one
|
||||
current = new_character //associate ourself with our new body
|
||||
set_current(new_character) //associate ourself with our new body
|
||||
new_character.mind = src //and associate our new body with ourself
|
||||
for(var/a in antag_datums) //Makes sure all antag datums effects are applied in the new body
|
||||
var/datum/antagonist/A = a
|
||||
@@ -1704,7 +1722,7 @@ GLOBAL_LIST(objective_choices)
|
||||
SEND_SIGNAL(src, COMSIG_MOB_ON_NEW_MIND)
|
||||
if(!mind.name)
|
||||
mind.name = real_name
|
||||
mind.current = src
|
||||
mind.set_current(src)
|
||||
mind.hide_ckey = client?.prefs?.hide_ckey
|
||||
|
||||
/mob/living/carbon/mind_initialize()
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
/datum/mood_event/Destroy()
|
||||
remove_effects()
|
||||
owner = null
|
||||
return ..()
|
||||
|
||||
/datum/mood_event/proc/add_effects(param)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
icon_state = "walkietalkie"
|
||||
|
||||
/obj/item/implant/radio/antenna/Initialize(mapload)
|
||||
..()
|
||||
. = ..()
|
||||
if (radio)
|
||||
radio.name = "internal antenna"
|
||||
|
||||
|
||||
@@ -245,7 +245,7 @@
|
||||
AA.remove_from_hud(src)
|
||||
|
||||
if(reagents)
|
||||
qdel(reagents)
|
||||
QDEL_NULL(reagents)
|
||||
|
||||
orbiters = null // The component is attached to us normaly and will be deleted elsewhere
|
||||
|
||||
|
||||
@@ -175,6 +175,8 @@ Class Procs:
|
||||
for(var/atom/A in component_parts)
|
||||
qdel(A)
|
||||
component_parts.Cut()
|
||||
if(circuit)
|
||||
QDEL_NULL(circuit)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/proc/locate_machinery()
|
||||
@@ -454,6 +456,7 @@ Class Procs:
|
||||
for(var/obj/item/I in component_parts)
|
||||
I.forceMove(loc)
|
||||
LAZYCLEARLIST(component_parts)
|
||||
circuit = null
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/proc/spawn_frame(disassembled)
|
||||
|
||||
@@ -440,7 +440,8 @@ GLOBAL_LIST_EMPTY(cryopod_computers)
|
||||
else
|
||||
if(ishuman(mob_occupant))
|
||||
var/mob/living/carbon/human/H = mob_occupant
|
||||
if(H.mind && H.client && H.client.prefs && H == H.mind.original_character)
|
||||
var/mob/living/carbon/human/H_original_caharcter = H.mind.original_character.resolve()
|
||||
if(H.mind && H.client && H.client.prefs && H == H_original_caharcter)
|
||||
H.SaveTCGCards()
|
||||
|
||||
var/list/gear = list()
|
||||
|
||||
@@ -39,9 +39,10 @@
|
||||
MA.plane = 0
|
||||
holder.appearance = MA
|
||||
update_indicator()
|
||||
|
||||
|
||||
/obj/machinery/launchpad/Destroy()
|
||||
qdel(hud_list[DIAG_LAUNCHPAD_HUD])
|
||||
for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds)
|
||||
diag_hud.remove_from_hud(src)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/launchpad/examine(mob/user)
|
||||
@@ -229,7 +230,9 @@
|
||||
src.briefcase = briefcase
|
||||
|
||||
/obj/machinery/launchpad/briefcase/Destroy()
|
||||
QDEL_NULL(briefcase)
|
||||
if(!QDELETED(briefcase))
|
||||
qdel(briefcase)
|
||||
briefcase = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/launchpad/briefcase/isAvailable(silent = FALSE)
|
||||
@@ -271,7 +274,8 @@
|
||||
|
||||
/obj/item/storage/briefcase/launchpad/Destroy()
|
||||
if(!QDELETED(pad))
|
||||
QDEL_NULL(pad)
|
||||
qdel(pad)
|
||||
pad = null
|
||||
return ..()
|
||||
|
||||
/obj/item/storage/briefcase/launchpad/PopulateContents()
|
||||
|
||||
@@ -26,20 +26,13 @@
|
||||
|
||||
set_codes()
|
||||
|
||||
glob_lists_register(init=TRUE)
|
||||
|
||||
var/turf/T = loc
|
||||
hide(T.intact)
|
||||
if(codes["patrol"])
|
||||
if(!GLOB.navbeacons["[z]"])
|
||||
GLOB.navbeacons["[z]"] = list()
|
||||
GLOB.navbeacons["[z]"] += src //Register with the patrol list!
|
||||
if(codes["delivery"])
|
||||
GLOB.deliverybeacons += src
|
||||
GLOB.deliverybeacontags += location
|
||||
|
||||
/obj/machinery/navbeacon/Destroy()
|
||||
if (GLOB.navbeacons["[z]"])
|
||||
GLOB.navbeacons["[z]"] -= src //Remove from beacon list, if in one.
|
||||
GLOB.deliverybeacons -= src
|
||||
glob_lists_deregister()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/navbeacon/onTransitZ(old_z, new_z)
|
||||
@@ -67,6 +60,26 @@
|
||||
else
|
||||
codes[e] = "1"
|
||||
|
||||
/obj/machinery/navbeacon/proc/glob_lists_deregister()
|
||||
if (GLOB.navbeacons["[z]"])
|
||||
GLOB.navbeacons["[z]"] -= src //Remove from beacon list, if in one.
|
||||
GLOB.deliverybeacons -= src
|
||||
GLOB.deliverybeacontags -= location
|
||||
|
||||
///Registers the navbeacon to the global beacon lists
|
||||
/obj/machinery/navbeacon/proc/glob_lists_register(init=FALSE)
|
||||
if(!init)
|
||||
glob_lists_deregister()
|
||||
if(!codes)
|
||||
return
|
||||
if(codes["patrol"])
|
||||
if(!GLOB.navbeacons["[z]"])
|
||||
GLOB.navbeacons["[z]"] = list()
|
||||
GLOB.navbeacons["[z]"] += src //Register with the patrol list!
|
||||
if(codes["delivery"])
|
||||
GLOB.deliverybeacons += src
|
||||
GLOB.deliverybeacontags += location
|
||||
|
||||
|
||||
// called when turf state changes
|
||||
// hide the object if turf is intact
|
||||
|
||||
@@ -232,6 +232,7 @@
|
||||
QDEL_NULL(shoes)
|
||||
QDEL_NULL(mod)
|
||||
QDEL_NULL(storage)
|
||||
QDEL_NULL(wires)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/suit_storage_unit/update_overlays()
|
||||
|
||||
@@ -97,7 +97,7 @@ GLOBAL_LIST_EMPTY(telecomms_list)
|
||||
/obj/machinery/telecomms/proc/add_link(obj/machinery/telecomms/T)
|
||||
var/turf/position = get_turf(src)
|
||||
var/turf/T_position = get_turf(T)
|
||||
if((position.z == T_position.z) || (long_range_link && T.long_range_link))
|
||||
if((position?.z == T_position?.z) || (long_range_link && T.long_range_link))
|
||||
if(src != T)
|
||||
for(var/x in autolinkers)
|
||||
if(x in T.autolinkers)
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
/obj/effect/anomaly/Destroy()
|
||||
GLOB.poi_list.Remove(src)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
qdel(countdown)
|
||||
QDEL_NULL(countdown)
|
||||
if(aSignal)
|
||||
QDEL_NULL(aSignal)
|
||||
return ..()
|
||||
|
||||
@@ -81,4 +81,4 @@ GLOBAL_LIST(gang_tags)
|
||||
|
||||
/obj/effect/decal/cleanable/crayon/gang/Destroy()
|
||||
LAZYREMOVE(GLOB.gang_tags, src)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
@@ -43,12 +43,12 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/landmark/start/Initialize(mapload)
|
||||
. = ..()
|
||||
GLOB.start_landmarks_list += src
|
||||
if(jobspawn_override)
|
||||
if(!GLOB.jobspawn_overrides[name])
|
||||
GLOB.jobspawn_overrides[name] = list()
|
||||
GLOB.jobspawn_overrides[name] += src
|
||||
..()
|
||||
if(name != "start")
|
||||
tag = "start*[name]"
|
||||
|
||||
|
||||
@@ -209,6 +209,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
|
||||
LAZYADD(used_skills[path], S.skill_traits)
|
||||
|
||||
/obj/item/Destroy()
|
||||
master = null
|
||||
item_flags &= ~DROPDEL //prevent reqdels
|
||||
if(ismob(loc))
|
||||
var/mob/m = loc
|
||||
|
||||
@@ -783,6 +783,7 @@
|
||||
|
||||
/obj/item/card/id/departmental_budget/Destroy()
|
||||
SSeconomy.dep_cards -= src
|
||||
registered_account.bank_cards -= src
|
||||
return ..()
|
||||
|
||||
/obj/item/card/id/departmental_budget/update_label()
|
||||
|
||||
@@ -130,6 +130,11 @@
|
||||
if(istype(C))
|
||||
gun = C.gun
|
||||
|
||||
/obj/item/projectile/energy/chrono_beam/Destroy()
|
||||
gun = null
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/projectile/energy/chrono_beam/on_hit(atom/target)
|
||||
if(target && gun && isliving(target))
|
||||
var/obj/effect/chrono_field/F = new(target.loc, target, gun)
|
||||
@@ -148,7 +153,9 @@
|
||||
gun = loc
|
||||
. = ..()
|
||||
|
||||
|
||||
/obj/item/ammo_casing/energy/chrono_beam/Destroy()
|
||||
gun = null
|
||||
return ..()
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -81,6 +81,14 @@
|
||||
addtimer(CALLBACK(src, .proc/startUp), 50)
|
||||
QDEL_IN(src, 8 MINUTES) //Self destruct after 8 min
|
||||
|
||||
/obj/structure/checkoutmachine/Destroy()
|
||||
bogdanoff = null
|
||||
stop_dumping()
|
||||
STOP_PROCESSING(SSfastprocess, src)
|
||||
priority_announce("The credit deposit machine at [get_area(src)] has been destroyed. Station funds have stopped draining!", sender_override = "CRAB-17 Protocol")
|
||||
explosion(src, 0,0,1, flame_range = 2)
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/structure/checkoutmachine/proc/startUp() //very VERY snowflake code that adds a neat animation when the pod lands.
|
||||
start_dumping() //The machine doesnt move during this time, giving people close by a small window to grab their funds before it starts running around
|
||||
@@ -145,13 +153,6 @@
|
||||
canwalk = TRUE
|
||||
START_PROCESSING(SSfastprocess, src)
|
||||
|
||||
/obj/structure/checkoutmachine/Destroy()
|
||||
stop_dumping()
|
||||
STOP_PROCESSING(SSfastprocess, src)
|
||||
priority_announce("The credit deposit machine at [get_area(src)] has been destroyed. Station funds have stopped draining!", sender_override = "CRAB-17 Protocol")
|
||||
explosion(src, 0,0,1, flame_range = 2)
|
||||
return ..()
|
||||
|
||||
/obj/structure/checkoutmachine/proc/start_dumping()
|
||||
accounts_to_rob = SSeconomy.bank_accounts.Copy()
|
||||
accounts_to_rob -= bogdanoff.get_bank_account()
|
||||
@@ -220,7 +221,10 @@
|
||||
playsound(src, 'sound/weapons/mortar_whistle.ogg', 70, TRUE, 6)
|
||||
addtimer(CALLBACK(src, .proc/endLaunch), 5, TIMER_CLIENT_TIME) //Go onto the last step after a very short falling animation
|
||||
|
||||
|
||||
/obj/effect/dumpeetTarget/Destroy()
|
||||
dump = null
|
||||
bogdanoff = null
|
||||
return ..()
|
||||
|
||||
/obj/effect/dumpeetTarget/proc/endLaunch()
|
||||
QDEL_NULL(DF) //Delete the falling machine effect, because at this point its animation is over. We dont use temp_visual because we want to manually delete it as soon as the pod appears
|
||||
|
||||
@@ -175,5 +175,7 @@
|
||||
return
|
||||
|
||||
/obj/effect/dummy/chameleon/Destroy()
|
||||
master.disrupt(0)
|
||||
if(master)
|
||||
master.disrupt(0)
|
||||
master = null
|
||||
return ..()
|
||||
|
||||
@@ -98,8 +98,9 @@
|
||||
/obj/structure/projected_forcefield/Destroy()
|
||||
visible_message("<span class='warning'>[src] flickers and disappears!</span>")
|
||||
playsound(src,'sound/weapons/resonator_blast.ogg',25,1)
|
||||
generator.current_fields -= src
|
||||
generator = null
|
||||
if(generator)
|
||||
generator.current_fields -= src
|
||||
generator = null
|
||||
return ..()
|
||||
|
||||
/obj/structure/projected_forcefield/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
|
||||
@@ -108,4 +109,5 @@
|
||||
/obj/structure/projected_forcefield/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir)
|
||||
if(sound_effect)
|
||||
play_attack_sound(damage_amount, damage_type, damage_flag)
|
||||
generator.shield_integrity = max(generator.shield_integrity - damage_amount, 0)
|
||||
if(generator)
|
||||
generator.shield_integrity = max(generator.shield_integrity - damage_amount, 0)
|
||||
|
||||
@@ -270,10 +270,6 @@ GLOBAL_LIST_INIT(channel_tokens, list(
|
||||
name = "\proper mini Integrated Subspace Transceiver "
|
||||
subspace_transmission = FALSE
|
||||
|
||||
/obj/item/radio/headset/silicon/pai/ComponentInitialize()
|
||||
. = ..()
|
||||
AddElement(/datum/element/empprotection, EMP_PROTECT_WIRES)
|
||||
|
||||
/obj/item/radio/headset/silicon/pai/emp_act(severity)
|
||||
. = ..()
|
||||
return EMP_PROTECT_SELF
|
||||
|
||||
@@ -19,6 +19,23 @@
|
||||
/obj/item/transfer_valve/IsAssemblyHolder()
|
||||
return TRUE
|
||||
|
||||
/obj/item/transfer_valve/Destroy()
|
||||
attached_device = null
|
||||
QDEL_NULL(tank_one)
|
||||
QDEL_NULL(tank_two)
|
||||
return ..()
|
||||
|
||||
/obj/item/transfer_valve/handle_atom_del(atom/deleted_atom)
|
||||
. = ..()
|
||||
if(deleted_atom == tank_one)
|
||||
tank_one = null
|
||||
update_appearance()
|
||||
return
|
||||
if(deleted_atom == tank_two)
|
||||
tank_two = null
|
||||
update_appearance()
|
||||
return
|
||||
|
||||
/obj/item/transfer_valve/attackby(obj/item/item, mob/user, params)
|
||||
if(istype(item, /obj/item/tank))
|
||||
if(tank_one && tank_two)
|
||||
|
||||
@@ -70,7 +70,8 @@
|
||||
/////////////////////////////////
|
||||
/obj/effect/payload_spawner/Initialize(mapload, type, numspawned)
|
||||
..()
|
||||
spawn_payload(type, numspawned)
|
||||
if(type && isnum(numspawned))
|
||||
spawn_payload(type, numspawned)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
/obj/effect/payload_spawner/proc/spawn_payload(type, numspawned)
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
qdel(nadeassembly)
|
||||
nadeassembly = null
|
||||
target = null
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/grenade/plastic/attackby(obj/item/I, mob/user, params)
|
||||
if(!nadeassembly && istype(I, /obj/item/assembly_holder))
|
||||
|
||||
@@ -332,6 +332,10 @@
|
||||
spark_system.set_up(5, 0, src)
|
||||
spark_system.attach(src)
|
||||
|
||||
/obj/item/melee/transforming/energy/blade/Destroy()
|
||||
QDEL_NULL(spark_system)
|
||||
. = ..()
|
||||
|
||||
/obj/item/melee/transforming/energy/blade/transform_weapon(mob/living/user, supress_message_text)
|
||||
return
|
||||
|
||||
|
||||
@@ -467,7 +467,7 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
|
||||
can_random_spawn = FALSE
|
||||
|
||||
/obj/item/toy/plush/random/Initialize(mapload)
|
||||
..()
|
||||
. = ..()
|
||||
var/newtype
|
||||
var/list/snowflake_list = CONFIG_GET(keyed_list/snowflake_plushies)
|
||||
|
||||
|
||||
@@ -294,19 +294,13 @@
|
||||
name = "Crusader's Armour Set" //i can't into ck2 references
|
||||
desc = "This armour is said to be based on the armor of kings on another world thousands of years ago, who tended to assassinate, conspire, and plot against everyone who tried to do the same to them. Some things never change."
|
||||
|
||||
/obj/item/storage/box/itemset/crusader/blue/New()
|
||||
..()
|
||||
contents = list()
|
||||
sleep(1)
|
||||
/obj/item/storage/box/itemset/crusader/blue/PopulateContents()
|
||||
new /obj/item/clothing/suit/armor/plate/crusader/blue(src)
|
||||
new /obj/item/clothing/head/helmet/plate/crusader/blue(src)
|
||||
new /obj/item/clothing/gloves/plate/blue(src)
|
||||
new /obj/item/clothing/shoes/plate/blue(src)
|
||||
|
||||
/obj/item/storage/box/itemset/crusader/red/New()
|
||||
..()
|
||||
contents = list()
|
||||
sleep(1)
|
||||
/obj/item/storage/box/itemset/crusader/red/PopulateContents()
|
||||
new /obj/item/clothing/suit/armor/plate/crusader/red(src)
|
||||
new /obj/item/clothing/head/helmet/plate/crusader/red(src)
|
||||
new /obj/item/clothing/gloves/plate/red(src)
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
AddComponent(component_type)
|
||||
|
||||
/obj/item/storage/AllowDrop()
|
||||
return TRUE
|
||||
return !QDELETED(src)
|
||||
|
||||
/obj/item/storage/contents_explosion(severity, target, origin)
|
||||
var/in_storage = istype(loc, /obj/item/storage)? (max(0, severity - 1)) : (severity)
|
||||
|
||||
@@ -633,7 +633,8 @@
|
||||
STR.max_items = 8
|
||||
|
||||
/obj/item/storage/box/snappops/PopulateContents()
|
||||
SEND_SIGNAL(src, COMSIG_TRY_STORAGE_FILL_TYPE, /obj/item/toy/snappop)
|
||||
for(var/i in 1 to 8)
|
||||
new /obj/item/toy/snappop(src)
|
||||
|
||||
/obj/item/storage/box/matches
|
||||
name = "matchbox"
|
||||
@@ -654,7 +655,8 @@
|
||||
STR.can_hold = typecacheof(list(/obj/item/match))
|
||||
|
||||
/obj/item/storage/box/matches/PopulateContents()
|
||||
SEND_SIGNAL(src, COMSIG_TRY_STORAGE_FILL_TYPE, /obj/item/match)
|
||||
for(var/i in 1 to 10)
|
||||
new /obj/item/match(src)
|
||||
|
||||
/obj/item/storage/box/matches/attackby(obj/item/match/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/match))
|
||||
|
||||
@@ -23,6 +23,8 @@
|
||||
var/fancy_open = FALSE
|
||||
|
||||
/obj/item/storage/fancy/PopulateContents()
|
||||
if(!spawn_type)
|
||||
return
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
for(var/i = 1 to STR.max_items)
|
||||
new spawn_type(src)
|
||||
|
||||
@@ -34,6 +34,10 @@
|
||||
if(host_type)
|
||||
host = new host_type(src, summon_count, range)
|
||||
|
||||
/obj/item/summon/Destroy()
|
||||
QDEL_NULL(host)
|
||||
return ..()
|
||||
|
||||
/obj/item/summon/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
. = ..()
|
||||
if(!host)
|
||||
@@ -329,7 +333,9 @@
|
||||
if(del_no_host)
|
||||
qdel(src)
|
||||
return
|
||||
HardReset(null)
|
||||
if(animation_timerid)
|
||||
deltimer(animation_timerid)
|
||||
atom.transform = null
|
||||
atom.moveToNullspace()
|
||||
return
|
||||
if(immediate)
|
||||
|
||||
@@ -119,11 +119,17 @@
|
||||
|
||||
/obj/item/reagent_containers/spray/mister/Initialize(mapload)
|
||||
. = ..()
|
||||
QDEL_NULL(reagents)
|
||||
tank = loc
|
||||
if(!istype(tank))
|
||||
return INITIALIZE_HINT_QDEL
|
||||
reagents = tank.reagents //This mister is really just a proxy for the tank's reagents
|
||||
|
||||
/obj/item/reagent_containers/spray/mister/Destroy()
|
||||
tank = null
|
||||
reagents = null
|
||||
return ..()
|
||||
|
||||
/obj/item/reagent_containers/spray/mister/attack_self()
|
||||
return
|
||||
|
||||
@@ -221,12 +227,18 @@
|
||||
|
||||
/obj/item/extinguisher/mini/nozzle/Initialize(mapload)
|
||||
. = ..()
|
||||
QDEL_NULL(reagents)
|
||||
tank = loc
|
||||
if (!istype(tank))
|
||||
return INITIALIZE_HINT_QDEL
|
||||
reagents = tank.reagents
|
||||
max_water = tank.volume
|
||||
|
||||
/obj/item/extinguisher/mini/nozzle/Destroy()
|
||||
reagents = null //This is a borrowed reference from the tank.
|
||||
tank = null
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/extinguisher/mini/nozzle/doMove(atom/destination)
|
||||
if(destination && (destination != tank.loc || !ismob(destination)))
|
||||
|
||||
@@ -548,9 +548,10 @@
|
||||
/obj/effect/decal/cleanable/ash/snappop_phoenix
|
||||
var/respawn_time = 300
|
||||
|
||||
/obj/effect/decal/cleanable/ash/snappop_phoenix/New()
|
||||
/obj/effect/decal/cleanable/ash/snappop_phoenix/Initialize(mapload)
|
||||
. = ..()
|
||||
addtimer(CALLBACK(src, .proc/respawn), respawn_time)
|
||||
if(!QDELETED(src))
|
||||
addtimer(CALLBACK(src, .proc/respawn), respawn_time)
|
||||
|
||||
/obj/effect/decal/cleanable/ash/snappop_phoenix/proc/respawn()
|
||||
new /obj/item/toy/snappop/phoenix(get_turf(src))
|
||||
|
||||
@@ -226,9 +226,9 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
/obj/item/claymore/highlander/robot/Initialize(mapload)
|
||||
var/obj/item/robot_module/kiltkit = loc
|
||||
robot = kiltkit.loc
|
||||
. = ..()
|
||||
if(!istype(robot))
|
||||
qdel(src)
|
||||
return ..()
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
/obj/item/claymore/highlander/robot/process()
|
||||
loc.layer = LARGE_MOB_LAYER
|
||||
|
||||
@@ -293,7 +293,7 @@ GLOBAL_LIST_INIT(double_bedsheets, list(/obj/item/bedsheet/double,
|
||||
desc = "If you're reading this description ingame, something has gone wrong! Honk!"
|
||||
|
||||
/obj/item/bedsheet/random/Initialize(mapload)
|
||||
..()
|
||||
. = ..()
|
||||
if(bedsheet_type == BEDSHEET_SINGLE)
|
||||
var/type = pick(typesof(/obj/item/bedsheet) - (list(/obj/item/bedsheet/random, /obj/item/bedsheet/chameleon) + typesof(/obj/item/bedsheet/unlockable) + GLOB.double_bedsheets))
|
||||
new type(loc)
|
||||
@@ -454,7 +454,7 @@ GLOBAL_LIST_INIT(double_bedsheets, list(/obj/item/bedsheet/double,
|
||||
bedsheet_type = BEDSHEET_DOUBLE
|
||||
|
||||
/obj/item/bedsheet/random/double/Initialize(mapload)
|
||||
..()
|
||||
. = ..()
|
||||
if(bedsheet_type == BEDSHEET_DOUBLE)
|
||||
var/type = pick(GLOB.double_bedsheets)
|
||||
new type(loc)
|
||||
|
||||
@@ -376,8 +376,9 @@
|
||||
I = icon('icons/obj/stationobjs.dmi',"laserbox_broken")
|
||||
if(showpiece)
|
||||
var/icon/S = getFlatIcon(showpiece)
|
||||
S.Scale(17,17)
|
||||
I.Blend(S,ICON_UNDERLAY,8,12)
|
||||
if(S)
|
||||
S.Scale(17,17)
|
||||
I.Blend(S,ICON_UNDERLAY,8,12)
|
||||
src.icon = I
|
||||
return
|
||||
|
||||
|
||||
@@ -433,7 +433,7 @@
|
||||
|
||||
/obj/effect/mob_spawn/human/hotel_staff/Destroy()
|
||||
new/obj/structure/fluff/empty_sleeper/syndicate(get_turf(src))
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/effect/mob_spawn/human/hotel_staff/special(mob/living/carbon/human/new_spawn)
|
||||
ADD_TRAIT(new_spawn,TRAIT_EXEMPT_HEALTH_EVENTS,GHOSTROLE_TRAIT)
|
||||
@@ -457,6 +457,8 @@
|
||||
|
||||
/obj/effect/mob_spawn/human/demonic_friend/Initialize(mapload, datum/mind/owner_mind, obj/effect/proc_holder/spell/targeted/summon_friend/summoning_spell)
|
||||
. = ..()
|
||||
if(!owner_mind)
|
||||
return
|
||||
owner = owner_mind
|
||||
flavour_text = "You have been given a reprieve from your eternity of torment, to be [owner.name]'s friend for [owner.p_their()] short mortal coil."
|
||||
important_info = "Be aware that if you do not live up to [owner.name]'s expectations, they can send you back to hell with a single thought. [owner.name]'s death will also return you to hell."
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
var/capacity = 4
|
||||
|
||||
/obj/structure/guncase/Initialize(mapload)
|
||||
..()
|
||||
. = ..()
|
||||
if(mapload)
|
||||
for(var/obj/item/I in loc.contents)
|
||||
if(istype(I, gun_category))
|
||||
|
||||
@@ -193,7 +193,7 @@
|
||||
|
||||
/obj/item/gun_control/Destroy()
|
||||
turret = null
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/gun_control/CanItemAutoclick()
|
||||
return TRUE
|
||||
|
||||
@@ -121,7 +121,8 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an
|
||||
playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1)
|
||||
playsound(src, 'sound/effects/roll.ogg', 5, 1)
|
||||
var/turf/T = get_step(src, dir)
|
||||
connected.setDir(dir)
|
||||
if(connected)
|
||||
connected.setDir(dir)
|
||||
for(var/atom/movable/AM in src)
|
||||
AM.forceMove(T)
|
||||
update_icon()
|
||||
|
||||
@@ -169,6 +169,12 @@
|
||||
. = ..()
|
||||
time_between_triggers = 10
|
||||
|
||||
/obj/structure/trap/stun/hunter/Destroy()
|
||||
if(!QDELETED(stored_item))
|
||||
qdel(stored_item)
|
||||
stored_item = null
|
||||
return ..()
|
||||
|
||||
/obj/structure/trap/stun/hunter/Crossed(atom/movable/AM)
|
||||
if(isliving(AM))
|
||||
var/mob/living/L = AM
|
||||
@@ -179,6 +185,11 @@
|
||||
|
||||
/obj/structure/trap/stun/hunter/flare()
|
||||
..()
|
||||
var/turf/our_turf = get_turf(src)
|
||||
if(!our_turf)
|
||||
return
|
||||
if(!stored_item)
|
||||
return
|
||||
stored_item.forceMove(get_turf(src))
|
||||
forceMove(stored_item)
|
||||
if(caught)
|
||||
@@ -208,6 +219,12 @@
|
||||
stored_trap.name = name
|
||||
stored_trap.stored_item = src
|
||||
|
||||
/obj/item/bountytrap/Destroy()
|
||||
QDEL_NULL(stored_trap)
|
||||
QDEL_NULL(radio)
|
||||
QDEL_NULL(spark_system)
|
||||
. = ..()
|
||||
|
||||
/obj/item/bountytrap/proc/announce_fugitive()
|
||||
spark_system.start()
|
||||
playsound(src, 'sound/machines/ding.ogg', 50, TRUE)
|
||||
@@ -220,9 +237,3 @@
|
||||
to_chat(user, "<span class=notice>You set up [src]. Examine while close to disarm it.</span>")
|
||||
stored_trap.forceMove(T)//moves trap to ground
|
||||
forceMove(stored_trap)//moves item into trap
|
||||
|
||||
/obj/item/bountytrap/Destroy()
|
||||
qdel(stored_trap)
|
||||
QDEL_NULL(radio)
|
||||
QDEL_NULL(spark_system)
|
||||
. = ..()
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
/obj/structure/shuttle/engine/Destroy()
|
||||
if(state == ENGINE_WELDED)
|
||||
alter_engine_power(-engine_power)
|
||||
. = ..()
|
||||
return ..()
|
||||
|
||||
//Propagates the change to the shuttle.
|
||||
/obj/structure/shuttle/engine/proc/alter_engine_power(mod)
|
||||
|
||||
@@ -48,6 +48,7 @@
|
||||
initial_gas_mix = AIRLESS_ATMOS
|
||||
|
||||
/turf/open/lava/Entered(atom/movable/AM)
|
||||
. = ..()
|
||||
if(burn_stuff(AM))
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
@@ -126,7 +127,6 @@
|
||||
|
||||
///Proc that sets on fire something or everything on the turf that's not immune to lava. Returns TRUE to make the turf start processing.
|
||||
/turf/open/lava/proc/burn_stuff(atom/movable/to_burn, delta_time = 1)
|
||||
|
||||
if(is_safe())
|
||||
return FALSE
|
||||
|
||||
|
||||
@@ -168,6 +168,8 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr
|
||||
/turf/open/openspace/icemoon/Initialize(mapload)
|
||||
. = ..()
|
||||
var/turf/T = below()
|
||||
if(!T)
|
||||
return
|
||||
if(T.flags_1 & NO_RUINS_1 && protect_ruin)
|
||||
ChangeTurf(replacement_turf, null, CHANGETURF_IGNORE_AIR)
|
||||
return
|
||||
|
||||
@@ -92,9 +92,11 @@
|
||||
_y = min
|
||||
|
||||
var/turf/T = locate(_x, _y, _z)
|
||||
AM.forceMove(T)
|
||||
var/turf/throwturf = get_ranged_target_turf(T, dir, 1)
|
||||
AM.safe_throw_at(throwturf, 1, 4, null, FALSE)
|
||||
|
||||
if(!QDELETED(AM))
|
||||
AM.forceMove(T)
|
||||
var/turf/throwturf = get_ranged_target_turf(T, dir, 1)
|
||||
AM.safe_throw_at(throwturf, 1, 4, null, FALSE)
|
||||
|
||||
|
||||
/turf/open/space/transit/CanBuildHere()
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
complementary_color = "#AD6570"
|
||||
blobbernaut_message = "synchronously strikes"
|
||||
message = "The blobs strike you"
|
||||
reagent = /datum/reagent/blob/synchronous_mesh
|
||||
|
||||
/datum/blobstrain/reagent/synchronous_mesh/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag)
|
||||
if(damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) //the cause isn't fire or bombs, so split the damage
|
||||
|
||||
@@ -72,19 +72,23 @@ GLOBAL_LIST_EMPTY(blob_nodes)
|
||||
forceMove(T)
|
||||
|
||||
/mob/camera/blob/proc/set_strain(datum/blobstrain/new_strain)
|
||||
if (ispath(new_strain))
|
||||
var/hadstrain = FALSE
|
||||
if (istype(blobstrain))
|
||||
blobstrain.on_lose()
|
||||
qdel(blobstrain)
|
||||
hadstrain = TRUE
|
||||
blobstrain = new new_strain(src)
|
||||
blobstrain.on_gain()
|
||||
if (hadstrain)
|
||||
to_chat(src, "Your strain is now: <b><font color=\"[blobstrain.color]\">[blobstrain.name]</b></font>!")
|
||||
to_chat(src, "The <b><font color=\"[blobstrain.color]\">[blobstrain.name]</b></font> strain [blobstrain.description]")
|
||||
if(blobstrain.effectdesc)
|
||||
to_chat(src, "The <b><font color=\"[blobstrain.color]\">[blobstrain.name]</b></font> strain [blobstrain.effectdesc]")
|
||||
if(!ispath(new_strain))
|
||||
return FALSE
|
||||
|
||||
var/had_strain = FALSE
|
||||
if(istype(blobstrain))
|
||||
blobstrain.on_lose()
|
||||
qdel(blobstrain)
|
||||
had_strain = TRUE
|
||||
|
||||
blobstrain = new new_strain(src)
|
||||
blobstrain.on_gain()
|
||||
|
||||
if(had_strain)
|
||||
to_chat(src, "Your strain is now: <b><font color=\"[blobstrain.color]\">[blobstrain.name]</b></font>!")
|
||||
to_chat(src, "The <b><font color=\"[blobstrain.color]\">[blobstrain.name]</b></font> strain [blobstrain.description]")
|
||||
if(blobstrain.effectdesc)
|
||||
to_chat(src, "The <b><font color=\"[blobstrain.color]\">[blobstrain.name]</b></font> strain [blobstrain.effectdesc]")
|
||||
|
||||
/mob/camera/blob/proc/is_valid_turf(turf/T)
|
||||
var/area/A = get_area(T)
|
||||
|
||||
@@ -40,6 +40,24 @@
|
||||
if(!GLOB.ark_of_the_clockwork_justiciar)
|
||||
GLOB.ark_of_the_clockwork_justiciar = src
|
||||
|
||||
/obj/structure/destructible/clockwork/massive/celestial_gateway/Destroy()
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
if(!purpose_fulfilled)
|
||||
var/area/gate_area = get_area(src)
|
||||
hierophant_message("<span class='large_brass'><b>An Ark of the Clockwork Justicar has fallen at [gate_area.map_name]!</b></span>")
|
||||
send_to_playing_players(sound(null, 0, channel = CHANNEL_JUSTICAR_ARK))
|
||||
var/was_stranded = SSshuttle.emergency.mode == SHUTTLE_STRANDED
|
||||
SSshuttle.clearHostileEnvironment(src)
|
||||
if(!was_stranded && !purpose_fulfilled)
|
||||
priority_announce("Massive energy anomaly no longer on short-range scanners, bluespace distortions still detected.","Central Command Higher Dimensional Affairs")
|
||||
if(glow)
|
||||
QDEL_NULL(glow)
|
||||
if(countdown)
|
||||
QDEL_NULL(countdown)
|
||||
if(GLOB.ark_of_the_clockwork_justiciar == src)
|
||||
GLOB.ark_of_the_clockwork_justiciar = null
|
||||
. = ..()
|
||||
|
||||
/obj/structure/destructible/clockwork/massive/celestial_gateway/on_attack_hand(mob/user, act_intent, unarmed_attack_flags)
|
||||
if(!active && is_servant_of_ratvar(user) && user.canUseTopic(src, !issilicon(user), NO_DEXTERY))
|
||||
if(alert(user, "Are you sure you want to activate the ark? Once enabled, there will be no turning back.", "Enabling the ark", "Activate!", "Cancel") == "Activate!")
|
||||
@@ -125,7 +143,7 @@
|
||||
L.forceMove(pick(open_turfs))
|
||||
glow = new(get_turf(src))
|
||||
var/area/gate_area = get_area(src)
|
||||
hierophant_message("<span class='large_brass'><b>An Ark of the Clockwork Justicar has been created in [gate_area.map_name]!</b></span>", FALSE, src)
|
||||
hierophant_message("<span class='large_brass'><b>An Ark of the Clockwork Justicar has been created in [gate_area?.map_name]!</b></span>", FALSE, src)
|
||||
|
||||
/obj/structure/destructible/clockwork/massive/celestial_gateway/proc/initiate_mass_recall()
|
||||
recalling = TRUE
|
||||
@@ -149,23 +167,7 @@
|
||||
transform = matrix() * 2
|
||||
animate(src, transform = matrix() * 0.5, time = 30, flags = ANIMATION_END_NOW)
|
||||
|
||||
/obj/structure/destructible/clockwork/massive/celestial_gateway/Destroy()
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
if(!purpose_fulfilled)
|
||||
var/area/gate_area = get_area(src)
|
||||
hierophant_message("<span class='large_brass'><b>An Ark of the Clockwork Justicar has fallen at [gate_area.map_name]!</b></span>")
|
||||
send_to_playing_players(sound(null, 0, channel = CHANNEL_JUSTICAR_ARK))
|
||||
var/was_stranded = SSshuttle.emergency.mode == SHUTTLE_STRANDED
|
||||
SSshuttle.clearHostileEnvironment(src)
|
||||
if(!was_stranded && !purpose_fulfilled)
|
||||
priority_announce("Massive energy anomaly no longer on short-range scanners, bluespace distortions still detected.","Central Command Higher Dimensional Affairs")
|
||||
if(glow)
|
||||
qdel(glow)
|
||||
glow = null
|
||||
if(countdown)
|
||||
qdel(countdown)
|
||||
countdown = null
|
||||
. = ..()
|
||||
|
||||
|
||||
/obj/structure/destructible/clockwork/massive/celestial_gateway/deconstruct(disassembled = TRUE)
|
||||
if(!(flags_1 & NODECONSTRUCT_1))
|
||||
|
||||
@@ -357,9 +357,10 @@
|
||||
/obj/item/melee/blood_magic/Initialize(mapload, spell)
|
||||
. = ..()
|
||||
ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT)
|
||||
source = spell
|
||||
uses = source.charges
|
||||
health_cost = source.health_cost
|
||||
if(spell)
|
||||
source = spell
|
||||
uses = source.charges
|
||||
health_cost = source.health_cost
|
||||
|
||||
|
||||
/obj/item/melee/blood_magic/Destroy()
|
||||
@@ -374,7 +375,7 @@
|
||||
source.desc = source.base_desc
|
||||
source.desc += "<br><b><u>Has [uses] use\s remaining</u></b>."
|
||||
source.UpdateButtonIcon()
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/melee/blood_magic/attack_self(mob/living/user)
|
||||
afterattack(user, user, TRUE)
|
||||
|
||||
@@ -137,6 +137,11 @@
|
||||
jaunt = new(src)
|
||||
linked_action = new(src)
|
||||
|
||||
/obj/item/cult_bastard/Destroy()
|
||||
QDEL_NULL(jaunt)
|
||||
QDEL_NULL(linked_action)
|
||||
. = ..()
|
||||
|
||||
/obj/item/cult_bastard/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/butchering, 50, 80)
|
||||
@@ -740,7 +745,7 @@
|
||||
/obj/item/cult_spear/Destroy()
|
||||
if(spear_act)
|
||||
qdel(spear_act)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/cult_spear/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
|
||||
var/turf/T = get_turf(hit_atom)
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
of intentionally harming a fellow devil.</B>"
|
||||
|
||||
/mob/living/simple_animal/imp/Initialize(mapload)
|
||||
..()
|
||||
. = ..()
|
||||
boost = world.time + 30
|
||||
|
||||
/mob/living/simple_animal/imp/BiologicalLife(delta_time, times_fired)
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
create_bodyparts() //initialize bodyparts
|
||||
create_internal_organs()
|
||||
grant_all_languages()
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/mob/living/carbon/true_devil/create_internal_organs()
|
||||
internal_organs += new /obj/item/organ/brain
|
||||
|
||||
@@ -314,6 +314,10 @@
|
||||
. = ..()
|
||||
linked_action = new(src)
|
||||
|
||||
/obj/item/melee/rune_knife/Destroy()
|
||||
QDEL_NULL(linked_action)
|
||||
. = ..()
|
||||
|
||||
/obj/item/melee/rune_knife/pickup(mob/user)
|
||||
. = ..()
|
||||
linked_action.Grant(user, src)
|
||||
|
||||
@@ -453,7 +453,7 @@
|
||||
/obj/item/ectoplasm/revenant/Destroy()
|
||||
if(!QDELETED(revenant))
|
||||
qdel(revenant)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/proc/RevenantThrow(over, mob/user, obj/item/throwable)
|
||||
var/mob/living/simple_animal/revenant/spooker = user
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
var/datum/action/cooldown/slam
|
||||
|
||||
/mob/living/simple_animal/slaughter/Initialize(mapload)
|
||||
..()
|
||||
. = ..()
|
||||
var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new
|
||||
AddSpell(bloodspell)
|
||||
slam = new /datum/action/cooldown/slam
|
||||
|
||||
@@ -194,9 +194,11 @@
|
||||
return 0
|
||||
|
||||
/obj/item/IntegrateAmount() //returns the amount of resources gained when eating this item
|
||||
. = ..()
|
||||
if(!custom_materials)
|
||||
return
|
||||
if(custom_materials[SSmaterials.GetMaterialRef(/datum/material/iron)] || custom_materials[SSmaterials.GetMaterialRef(/datum/material/glass)])
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
/obj/item/gun/swarmer_act()//Stops you from eating the entire armory
|
||||
return FALSE
|
||||
|
||||
@@ -88,7 +88,10 @@
|
||||
if(T.taur_mode & S.accepted_taurs) //looks out of place on those.
|
||||
lowershape = "taur, [lowershape]"
|
||||
|
||||
desc = "You see [aroused_state ? "an erect" : "a flaccid"] [lowershape] [name]. You estimate it's about [round(length*get_size(owner), 0.25)] inch[round(length*get_size(owner), 0.25) != 1 ? "es" : ""] long and [round(diameter*get_size(owner), 0.25)] inch[round(diameter*get_size(owner), 0.25) != 1 ? "es" : ""] in diameter."
|
||||
var/adjusted_length = round(length * (owner ? get_size(owner) : 1), 0.25)
|
||||
var/adjusted_diameter = round(diameter * (owner ? get_size(owner) : 1), 0.25)
|
||||
|
||||
desc = "You see [aroused_state ? "an erect" : "a flaccid"] [lowershape] [name]. You estimate it's about [adjusted_length] inch[adjusted_length != 1 ? "es" : ""] long and [adjusted_diameter] inch[adjusted_diameter != 1 ? "es" : ""] in diameter."
|
||||
|
||||
/obj/item/organ/genital/penis/get_features(mob/living/carbon/human/H)
|
||||
var/datum/dna/D = H.dna
|
||||
|
||||
@@ -234,6 +234,10 @@
|
||||
var/obj/item/organ/cyberimp/arm/flash/I = null
|
||||
var/active_light_strength = 7
|
||||
|
||||
/obj/item/assembly/flash/armimplant/Destroy()
|
||||
I = null
|
||||
return ..()
|
||||
|
||||
/obj/item/assembly/flash/armimplant/burn_out()
|
||||
if(I && I.owner)
|
||||
to_chat(I.owner, "<span class='warning'>Your photon projector implant overheats and deactivates!</span>")
|
||||
|
||||
@@ -173,7 +173,7 @@
|
||||
|
||||
/obj/machinery/capture_the_flag/Destroy()
|
||||
GLOB.poi_list.Remove(src)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/capture_the_flag/process(delta_time)
|
||||
for(var/i in spawned_mobs)
|
||||
@@ -642,7 +642,7 @@
|
||||
invisibility = 0
|
||||
|
||||
/obj/effect/ctf/ammo/Initialize(mapload)
|
||||
..()
|
||||
. = ..()
|
||||
QDEL_IN(src, AMMO_DROP_LIFETIME)
|
||||
|
||||
/obj/effect/ctf/ammo/Crossed(atom/movable/AM)
|
||||
@@ -681,6 +681,11 @@
|
||||
for(var/obj/machinery/capture_the_flag/CTF in GLOB.machines)
|
||||
CTF.dead_barricades += src
|
||||
|
||||
/obj/effect/ctf/dead_barricade/Destroy(force)
|
||||
for(var/obj/machinery/capture_the_flag/CTF in GLOB.machines)
|
||||
CTF.dead_barricades -= src
|
||||
return ..()
|
||||
|
||||
/obj/effect/ctf/dead_barricade/proc/respawn()
|
||||
if(!QDELETED(src))
|
||||
new /obj/structure/barricade/security/ctf(get_turf(src))
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
var/active = 1
|
||||
|
||||
/obj/structure/firepit/Initialize(mapload)
|
||||
..()
|
||||
. = ..()
|
||||
toggleFirepit()
|
||||
|
||||
/obj/structure/firepit/interact(mob/living/user)
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
var/client/cl
|
||||
|
||||
/obj/effect/buildmode_line/New(client/C, atom/atom_a, atom/atom_b, linename)
|
||||
if(!C || !atom_a || !atom_b)
|
||||
stack_trace("Buildmode effect created with odd inputs")
|
||||
return
|
||||
name = linename
|
||||
loc = get_turf(atom_a)
|
||||
I = image('icons/misc/mark.dmi', src, "line", 19.0)
|
||||
|
||||
@@ -28,6 +28,9 @@
|
||||
var/obj/structure/closet/supplypod/centcompod/linked_pod
|
||||
|
||||
/mob/living/simple_animal/pet/gondola/gondolapod/Initialize(mapload, pod)
|
||||
if(!pod)
|
||||
stack_trace("Gondola pod created with no pod")
|
||||
return INITIALIZE_HINT_QDEL
|
||||
linked_pod = pod
|
||||
name = linked_pod.name
|
||||
. = ..()
|
||||
@@ -71,6 +74,6 @@
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_animal/pet/gondola/gondolapod/death()
|
||||
qdel(linked_pod) //Will cause the open() proc for the linked supplypod to be called with the "broken" parameter set to true, meaning that it will dump its contents on death
|
||||
QDEL_NULL(linked_pod) //Will cause the open() proc for the linked supplypod to be called with the "broken" parameter set to true, meaning that it will dump its contents on death
|
||||
qdel(src)
|
||||
..()
|
||||
|
||||
@@ -538,6 +538,9 @@
|
||||
|
||||
/obj/effect/pod_landingzone_effect/Initialize(mapload, obj/structure/closet/supplypod/pod)
|
||||
. = ..()
|
||||
if(!pod)
|
||||
stack_trace("Pod landingzone effect created with no pod")
|
||||
return INITIALIZE_HINT_QDEL
|
||||
transform = matrix() * 1.5
|
||||
animate(src, transform = matrix()*0.01, time = pod.delays[POD_TRANSIT]+pod.delays[POD_FALLING])
|
||||
|
||||
@@ -556,6 +559,9 @@
|
||||
|
||||
/obj/effect/pod_landingzone/Initialize(mapload, podParam, single_order = null, clientman)
|
||||
. = ..()
|
||||
if(!podParam)
|
||||
stack_trace("Pod landingzone created with no pod")
|
||||
return INITIALIZE_HINT_QDEL
|
||||
if (ispath(podParam)) //We can pass either a path for a pod (as expressconsoles do), or a reference to an instantiated pod (as the centcom_podlauncher does)
|
||||
podParam = new podParam() //If its just a path, instantiate it
|
||||
pod = podParam
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
/obj/item/clothing/gloves/mittens/random
|
||||
|
||||
/obj/item/clothing/gloves/mittens/random/Initialize(mapload)
|
||||
..()
|
||||
. = ..()
|
||||
var/colours = list("black", "yellow", "lightbrown", "brown", "orange", "red", "purple", "green", "blue", "kitten")
|
||||
var/picked_c = pick(colours)
|
||||
if(picked_c == "kitten")
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
/obj/item/clothing/mask/gas/welding/up
|
||||
|
||||
/obj/item/clothing/mask/gas/welding/up/Initialize(mapload)
|
||||
..()
|
||||
. = ..()
|
||||
visor_toggling()
|
||||
|
||||
|
||||
|
||||
@@ -313,6 +313,10 @@
|
||||
if(istype(loc, /obj/item/clothing/suit/space/hardsuit/syndi))
|
||||
linkedsuit = loc
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/syndi/Destroy()
|
||||
linkedsuit = null
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/syndi/attack_self(mob/user) //Toggle Helmet
|
||||
if(!isturf(user.loc))
|
||||
to_chat(user, "<span class='warning'>You cannot toggle your helmet while in this [user.loc]!</span>" )
|
||||
@@ -526,6 +530,10 @@
|
||||
. = ..()
|
||||
bomb_radar = new /obj/machinery/doppler_array/integrated(src)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/rd/Destroy()
|
||||
QDEL_NULL(bomb_radar)
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/rd/equipped(mob/living/carbon/human/user, slot)
|
||||
..()
|
||||
if (slot == ITEM_SLOT_HEAD)
|
||||
@@ -700,6 +708,10 @@
|
||||
. = ..()
|
||||
bomb_radar = new /obj/machinery/doppler_array/integrated(src)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/ancient/mason/Destroy()
|
||||
QDEL_NULL(bomb_radar)
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/ancient/mason/equipped(mob/living/carbon/human/user, slot)
|
||||
..()
|
||||
if (slot == ITEM_SLOT_HEAD)
|
||||
@@ -965,7 +977,7 @@
|
||||
var/energy_color = "#35FFF0"
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/lavaknight/Initialize(mapload)
|
||||
..()
|
||||
. = ..()
|
||||
light_color = energy_color
|
||||
set_light(1)
|
||||
update_icon()
|
||||
|
||||
@@ -153,8 +153,8 @@
|
||||
/obj/item/clothing/suit/space/hardsuit/Destroy()
|
||||
if(helmet)
|
||||
helmet.suit = null
|
||||
qdel(helmet)
|
||||
qdel(jetpack)
|
||||
QDEL_NULL(helmet)
|
||||
QDEL_NULL(jetpack)
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/Destroy()
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
icon_state = "random_jumpsuit"
|
||||
|
||||
/obj/item/clothing/under/color/random/Initialize(mapload)
|
||||
..()
|
||||
. = ..()
|
||||
var/obj/item/clothing/under/color/C = pick(typesof(/obj/item/clothing/under/color) - subtypesof(/obj/item/clothing/under/color/jumpskirt) - /obj/item/clothing/under/color/random - /obj/item/clothing/under/color/grey/glorf - /obj/item/clothing/under/color/black/ghost)
|
||||
|
||||
if(ishuman(loc))
|
||||
@@ -26,7 +26,7 @@
|
||||
icon_state = "random_jumpsuit" //Skirt variant needed
|
||||
|
||||
/obj/item/clothing/under/color/jumpskirt/random/Initialize(mapload)
|
||||
..()
|
||||
. = ..()
|
||||
var/obj/item/clothing/under/color/jumpskirt/C = pick(subtypesof(/obj/item/clothing/under/color/jumpskirt) - /obj/item/clothing/under/color/jumpskirt/random)
|
||||
if(ishuman(loc))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
|
||||
//Set ignoregloves to add prints irrespective of the mob having gloves on.
|
||||
/atom/proc/add_fingerprint(mob/living/M, ignoregloves = FALSE)
|
||||
if(!M || !M.key)
|
||||
if(!istype(M))
|
||||
return
|
||||
|
||||
add_hiddenprint(M)
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
smoke.set_up(1, loc)
|
||||
smoke.start()
|
||||
visible_message("<b>[src]</b> disappears in a puff of smoke, leaving something on the ground!")
|
||||
..()
|
||||
return ..()
|
||||
|
||||
//travelling trader subtypes (the types that can actually spawn)
|
||||
//so far there's: cook / botanist / bartender / animal hunter / artifact dealer / surgeon (6 types!)
|
||||
@@ -144,7 +144,7 @@
|
||||
requested_item = result
|
||||
else
|
||||
requested_item = /obj/item/reagent_containers/food/snacks/copypasta
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
//botanist
|
||||
/mob/living/carbon/human/dummy/travelling_trader/gardener
|
||||
@@ -164,7 +164,7 @@
|
||||
requested_item = pick(subtypesof(/obj/item/reagent_containers/food/snacks/grown) - list(/obj/item/reagent_containers/food/snacks/grown/shell,
|
||||
/obj/item/reagent_containers/food/snacks/grown/shell/gatfruit,
|
||||
/obj/item/reagent_containers/food/snacks/grown/cherry_bomb))
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
//animal hunter
|
||||
/mob/living/carbon/human/dummy/travelling_trader/animal_hunter
|
||||
@@ -280,7 +280,7 @@
|
||||
|
||||
/mob/living/carbon/human/dummy/travelling_trader/artifact_dealer/Initialize(mapload)
|
||||
possible_rewards += list(pick(subtypesof(/obj/item/clothing/head/collectable)) = 1) //this is slightly lower because it's absolutely useless
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/datum/outfit/artifact_dealer
|
||||
name = "Artifact Dealer"
|
||||
|
||||
@@ -39,6 +39,26 @@
|
||||
roundend_callback = CALLBACK(src,.proc/check_winner)
|
||||
SSticker.OnRoundend(roundend_callback)
|
||||
|
||||
/obj/item/greentext/Destroy(force)
|
||||
if(!(resistance_flags & ON_FIRE) && !force)
|
||||
return QDEL_HINT_LETMELIVE
|
||||
|
||||
SSticker.round_end_events -= roundend_callback
|
||||
GLOB.poi_list.Remove(src)
|
||||
roundend_callback = null
|
||||
for(var/i in GLOB.player_list)
|
||||
var/mob/M = i
|
||||
var/message = "<span class='warning'>A dark temptation has passed from this world"
|
||||
if(M in color_altered_mobs)
|
||||
message += " and you're finally able to forgive yourself"
|
||||
if(M.color == "#FF0000" || M.color == "#00FF00")
|
||||
M.remove_atom_colour(ADMIN_COLOUR_PRIORITY)
|
||||
message += "...</span>"
|
||||
// can't skip the mob check as it also does the decolouring
|
||||
if(!quiet)
|
||||
to_chat(M, message)
|
||||
. = ..()
|
||||
|
||||
/obj/item/greentext/equipped(mob/living/user as mob)
|
||||
to_chat(user, "<font color='green'>So long as you leave this place with greentext in hand you know will be happy...</font>")
|
||||
var/list/other_objectives = user.mind.get_all_objectives()
|
||||
@@ -80,24 +100,7 @@
|
||||
last_holder.add_atom_colour("#FF0000", ADMIN_COLOUR_PRIORITY)
|
||||
last_holder = new_holder //long live the king
|
||||
|
||||
/obj/item/greentext/Destroy(force)
|
||||
if(!(resistance_flags & ON_FIRE) && !force)
|
||||
return QDEL_HINT_LETMELIVE
|
||||
|
||||
SSticker.round_end_events -= roundend_callback
|
||||
GLOB.poi_list.Remove(src)
|
||||
for(var/i in GLOB.player_list)
|
||||
var/mob/M = i
|
||||
var/message = "<span class='warning'>A dark temptation has passed from this world"
|
||||
if(M in color_altered_mobs)
|
||||
message += " and you're finally able to forgive yourself"
|
||||
if(M.color == "#FF0000" || M.color == "#00FF00")
|
||||
M.remove_atom_colour(ADMIN_COLOUR_PRIORITY)
|
||||
message += "...</span>"
|
||||
// can't skip the mob check as it also does the decolouring
|
||||
if(!quiet)
|
||||
to_chat(M, message)
|
||||
. = ..()
|
||||
|
||||
/obj/item/greentext/quiet
|
||||
quiet = TRUE
|
||||
|
||||
@@ -34,7 +34,8 @@
|
||||
INVOKE_ASYNC(src, .proc/domain_expansion)
|
||||
|
||||
/obj/effect/domain_expansion/Destroy()
|
||||
qdel(chronofield)
|
||||
QDEL_NULL(chronofield)
|
||||
target = null
|
||||
return ..()
|
||||
|
||||
/obj/effect/domain_expansion/proc/domain_expansion()
|
||||
|
||||
@@ -106,6 +106,9 @@ GLOBAL_LIST_INIT(hallucination_list, list(
|
||||
|
||||
/obj/effect/hallucination/simple/Initialize(mapload, var/mob/living/carbon/T)
|
||||
. = ..()
|
||||
if(!T)
|
||||
stack_trace("A hallucination was created with no target")
|
||||
return INITIALIZE_HINT_QDEL
|
||||
target = T
|
||||
current_image = GetImage()
|
||||
if(target.client)
|
||||
|
||||
@@ -278,7 +278,7 @@
|
||||
visible_message("[src] finishes cooking!")
|
||||
new /obj/item/reagent_containers/food/snacks/meat/steak/goliath(loc)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/meat/slab/dragon
|
||||
name = "ash drake meat"
|
||||
desc = "Meat from an ash drake. It's probably not a good idea to eat this raw."
|
||||
@@ -408,7 +408,7 @@
|
||||
trash = null
|
||||
tastes = list("meat" = 1, "rock" = 1)
|
||||
foodtype = MEAT
|
||||
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/meat/steak/dragon
|
||||
name = "dragon steak"
|
||||
desc = "Spicy."
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
var/mob/trapped_mob
|
||||
|
||||
/obj/structure/closet/Initialize(mapload)
|
||||
..()
|
||||
. = ..()
|
||||
if(prob(30))
|
||||
set_spooky_trap()
|
||||
|
||||
|
||||
@@ -146,6 +146,8 @@
|
||||
stop_playing()
|
||||
SSinstruments.on_song_del(src)
|
||||
lines = null
|
||||
if(using_instrument)
|
||||
using_instrument.songs_using -= src
|
||||
using_instrument = null
|
||||
allowed_instrument_ids = null
|
||||
parent = null
|
||||
|
||||
@@ -654,18 +654,19 @@
|
||||
|
||||
/obj/item/integrated_circuit/input/signaler/Initialize(mapload)
|
||||
. = ..()
|
||||
spawn(40)
|
||||
set_frequency(frequency)
|
||||
// Set the pins so when someone sees them, they won't show as null
|
||||
set_pin_data(IC_INPUT, 1, frequency)
|
||||
set_pin_data(IC_INPUT, 2, code)
|
||||
addtimer(CALLBACK(src, .proc/init_frequency), 4 SECONDS)
|
||||
|
||||
/obj/item/integrated_circuit/input/signaler/Destroy()
|
||||
SSradio.remove_object(src,frequency)
|
||||
|
||||
frequency = 0
|
||||
return ..()
|
||||
|
||||
/obj/item/integrated_circuit/input/signaler/proc/init_frequency()
|
||||
set_frequency(frequency)
|
||||
// Set the pins so when someone sees them, they won't show as null
|
||||
set_pin_data(IC_INPUT, 1, frequency)
|
||||
set_pin_data(IC_INPUT, 2, code)
|
||||
|
||||
/obj/item/integrated_circuit/input/signaler/on_data_written()
|
||||
var/new_freq = get_pin_data(IC_INPUT, 1)
|
||||
var/new_code = get_pin_data(IC_INPUT, 2)
|
||||
|
||||
@@ -177,7 +177,7 @@
|
||||
|
||||
/obj/item/integrated_circuit/input/mmi_tank/Destroy()
|
||||
RemoveBrain()
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/integrated_circuit/input/mmi_tank/relaymove(var/n,var/dir)
|
||||
set_pin_data(IC_OUTPUT, 2, dir)
|
||||
@@ -320,7 +320,7 @@
|
||||
|
||||
/obj/item/integrated_circuit/input/pAI_connector/Destroy()
|
||||
RemovepAI()
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/integrated_circuit/input/pAI_connector/proc/RemovepAI()
|
||||
if(installed_pai)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
icon_state = "random_book"
|
||||
|
||||
/obj/item/book/manual/random/Initialize(mapload)
|
||||
..()
|
||||
. = ..()
|
||||
var/static/banned_books = list(/obj/item/book/manual/random, /obj/item/book/manual/nuclear, /obj/item/book/manual/wiki)
|
||||
var/newtype = pick(subtypesof(/obj/item/book/manual) - banned_books)
|
||||
new newtype(loc)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user