This commit is contained in:
SpaceCheetah
2023-08-27 22:25:10 -07:00
307 changed files with 15494 additions and 4698 deletions
@@ -134,6 +134,15 @@ GLOBAL_LIST_EMPTY(deletion_failures)
DoSearchVar(GLOB, "GLOB") //globals
log_reftracker("Finished searching globals")
//Yes we do actually need to do this. The searcher refuses to read weird lists
//And global.vars is a really weird list
var/global_vars = list()
for(var/key in global.vars)
global_vars[key] = global.vars[key]
DoSearchVar(global_vars, "Native Global", search_time = starting_time)
log_reftracker("Finished searching native globals")
for(var/datum/thing in world) //atoms (don't beleive its lies)
DoSearchVar(thing, "World -> [thing.type]", search_time = starting_time)
log_reftracker("Finished searching atoms")
@@ -143,9 +152,11 @@ GLOBAL_LIST_EMPTY(deletion_failures)
log_reftracker("Finished searching datums")
//Warning, attempting to search clients like this will cause crashes if done on live. Watch yourself
#ifndef REFERENCE_DOING_IT_LIVE
for(var/client/thing) //clients
DoSearchVar(thing, "Clients -> [thing.type]", search_time = starting_time)
log_reftracker("Finished searching clients")
#endif
log_reftracker("Completed search for references to a [type].")
@@ -159,7 +170,7 @@ GLOBAL_LIST_EMPTY(deletion_failures)
/datum/proc/DoSearchVar(potential_container, container_name, recursive_limit = 64, search_time = world.time)
#ifdef REFERENCE_TRACKING_DEBUG
if(!found_refs && SSgarbage.should_save_refs)
if(SSgarbage.should_save_refs && !found_refs)
found_refs = list()
#endif
@@ -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
+17 -13
View File
@@ -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)
@@ -35,7 +35,7 @@
clockwork_desc = "A gateway in reality. It can only [sender ? "send" : "receive"] objects."
if(is_stable)
return
timerid = QDEL_IN(src, lifetime) //We only need this if the gateway is not stable
timerid = QDEL_IN_STOPPABLE(src, lifetime) //We only need this if the gateway is not stable
//set up a gateway with another gateway
/obj/effect/clockwork/spatial_gateway/proc/setup_gateway(obj/effect/clockwork/spatial_gateway/gatewayB, set_duration, set_uses, two_way)
@@ -108,12 +108,12 @@
visible_message("<span class='warning'>[src] is disrupted!</span>")
animate(src, alpha = 0, transform = matrix()*2, time = 10, flags = ANIMATION_END_NOW)
deltimer(timerid)
timerid = QDEL_IN(src, 10)
timerid = QDEL_IN_STOPPABLE(src, 10)
linked_gateway.uses = 0
linked_gateway.visible_message("<span class='warning'>[linked_gateway] is disrupted!</span>")
animate(linked_gateway, alpha = 0, transform = matrix()*2, time = 10, flags = ANIMATION_END_NOW)
deltimer(linked_gateway.timerid)
linked_gateway.timerid = QDEL_IN(linked_gateway, 10)
linked_gateway.timerid = QDEL_IN_STOPPABLE(linked_gateway, 10)
return TRUE
return FALSE
@@ -279,8 +279,8 @@
/obj/effect/clockwork/spatial_gateway/stable/proc/start_shutdown()
deltimer(timerid)
deltimer(linked_gateway.timerid)
timerid = QDEL_IN(src, 20)
linked_gateway.timerid = QDEL_IN(linked_gateway, 20)
timerid = QDEL_IN_STOPPABLE(src, 20)
linked_gateway.timerid = QDEL_IN_STOPPABLE(linked_gateway, 20)
animate(src, alpha = 0, transform = matrix()*2, time = 20, flags = ANIMATION_END_NOW)
animate(linked_gateway, alpha = 0, transform = matrix()*2, time = 20, flags = ANIMATION_END_NOW)
src.visible_message("<span class='warning'>[src] begins to destabilise!</span>")
@@ -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))
@@ -16,7 +16,7 @@
/obj/structure/destructible/clockwork/taunting_trail/Initialize(mapload)
. = ..()
timerid = QDEL_IN(src, 15)
timerid = QDEL_IN_STOPPABLE(src, 15)
var/obj/structure/destructible/clockwork/taunting_trail/Tt = locate(/obj/structure/destructible/clockwork/taunting_trail) in loc
if(Tt && Tt != src)
if(!step(src, pick(GLOB.alldirs)))
+5 -4
View File
@@ -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)
+6 -1
View File
@@ -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)
+1 -1
View File
@@ -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
+3 -1
View File
@@ -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
+4 -1
View File
@@ -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
+4
View File
@@ -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
View File
@@ -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)
+4 -1
View File
@@ -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)
..()
+6
View File
@@ -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
+1 -1
View File
@@ -234,7 +234,7 @@ GLOBAL_VAR_INIT(normal_ooc_colour, "#002eb8")
var/list/choices = list()
for(var/client/C in GLOB.clients)
if(isobserver(C.mob) && see_ghost_names)
choices["[C.mob]([C])"] = C
choices["[C]"] = C //NONMODULARITY NOTE: Removes the ability to link CKEYs to Characters. Always reapply for privacy reasons.
else
choices[C] = C
choices = sortList(choices)
+1 -1
View File
@@ -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")
+1 -1
View File
@@ -56,7 +56,7 @@
/obj/item/clothing/mask/gas/welding/up
/obj/item/clothing/mask/gas/welding/up/Initialize(mapload)
..()
. = ..()
visor_toggling()
+13 -1
View File
@@ -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()
+2 -2
View File
@@ -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()
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -128,7 +128,7 @@ GLOBAL_VAR_INIT(total_runtimes_skipped, 0)
#ifdef UNIT_TESTS
if(GLOB.current_test)
//good day, sir
GLOB.current_test.Fail("[main_line]\n[desclines.Join("\n")]")
GLOB.current_test.Fail("[main_line]\n[desclines.Join("\n")]", file = E.file, line = E.line)
#endif
+4 -4
View File
@@ -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"
+20 -17
View File
@@ -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
+2 -1
View File
@@ -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()
+3
View File
@@ -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."
+1 -1
View File
@@ -43,7 +43,7 @@
var/mob/trapped_mob
/obj/structure/closet/Initialize(mapload)
..()
. = ..()
if(prob(30))
set_spooky_trap()
+2
View File
@@ -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)
+1 -1
View File
@@ -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)
@@ -270,6 +270,11 @@
active_style = new /datum/gauntlet_style/brawler
active_style.on_apply(src)
/obj/item/kinetic_crusher/glaive/gauntlets/Destroy()
QDEL_NULL(active_style)
current_target = null
return ..()
/obj/item/kinetic_crusher/glaive/gauntlets/examine(mob/living/user)
. = ..()
. += "According to a very small display, the currently loaded style is \"[active_style.name]\"."
@@ -96,6 +96,7 @@
new /obj/effect/temp_visual/resonance_crush(T)
if(ismineralturf(T))
var/turf/closed/mineral/M = T
replicate(M)
M.gets_drilled(creator)
check_pressure(T)
playsound(T,'sound/weapons/resonator_blast.ogg',50,1)
@@ -115,3 +116,10 @@
. = ..()
transform = matrix()*1.5
animate(src, transform = matrix()*0.1, alpha = 50, time = 4)
/obj/effect/temp_visual/resonance/proc/replicate(turf/closed/mineral/M) //yogs start: adds replication to resonator fields
if(!istype(M) || !M.mineralType) // so we don't end up in the ultimate chain reaction
return
for(var/turf/closed/mineral/T in orange(1, M))
if(istype(T) && T.mineralType)
new /obj/effect/temp_visual/resonance(T, creator, null, duration) //yogs end
+1 -1
View File
@@ -168,7 +168,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons)
/obj/structure/extraction_point/Destroy()
GLOB.total_extraction_beacons -= src
..()
return ..()
/obj/effect/extraction_holder
name = "extraction holder"
+1 -1
View File
@@ -25,7 +25,7 @@
var/sap_amount
/obj/structure/flora/ashtree/Initialize(mapload)
..()
. = ..()
if(prob(50))
sap = TRUE
icon_state = sap_icon_state
@@ -434,6 +434,12 @@
var/obj/item/warp_cube/linked
var/teleporting = FALSE
/obj/item/warp_cube/Destroy()
if(!QDELETED(linked))
linked.linked = null
QDEL_NULL(linked)
return ..()
/obj/item/warp_cube/attack_self(mob/user)
if(!linked)
to_chat(user, "[src] fizzles uselessly.")
@@ -480,6 +486,12 @@
linked = blue
blue.linked = src
/obj/item/warp_cube/red/Destroy()
if(!QDELETED(linked))
linked.linked = null
QDEL_NULL(linked)
return ..()
/obj/effect/warp_cube
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
anchored = TRUE
+1 -1
View File
@@ -5,7 +5,7 @@
if(!mind)
mind = new /datum/mind(key)
mind.active = 1
mind.current = src
mind.set_current(src)
..()
@@ -708,7 +708,7 @@
mind.late_joiner = TRUE
mind.active = 0 //we wish to transfer the key manually
mind.transfer_to(H) //won't transfer key since the mind is not active
mind.original_character = H
mind.set_original_character(H)
H.name = real_name
client.init_verbs()
+2
View File
@@ -361,6 +361,8 @@
var/obj/effect/decal/cleanable/blood/B = locate() in T
if(!B)
B = new /obj/effect/decal/cleanable/blood/splatter(T, get_static_viruses())
if(QDELETED(B)) //Give it up
return
if(B.bloodiness < MAX_SHOE_BLOODINESS) //add more blood, up to a limit
B.bloodiness += BLOOD_AMOUNT_PER_DECAL
B.transfer_mob_blood_dna(src) //give blood info to the blood decal.
+2 -1
View File
@@ -34,10 +34,11 @@
if(stat!=DEAD) //If not dead.
death(1) //Brains can die again. AND THEY SHOULD AHA HA HA HA HA HA
if(mind) //You aren't allowed to return to brains that don't exist
mind.current = null
mind.set_current(null)
mind.active = FALSE //No one's using it anymore.
ghostize() //Ghostize checks for key so nothing else is necessary.
container = null
QDEL_NULL(stored_dna)
return ..()
/mob/living/brain/update_mobility()
@@ -286,6 +286,8 @@
if(brainmob)
QDEL_NULL(brainmob)
QDEL_LIST(traumas)
if(owner?.mind)
owner.mind.set_current(null)
return ..()
//other types of brains
@@ -17,8 +17,8 @@
var/drooling = 0 //For Neruotoxic spit overlays
bodyparts = list(/obj/item/bodypart/chest/alien, /obj/item/bodypart/head/alien, /obj/item/bodypart/l_arm/alien,
/obj/item/bodypart/r_arm/alien, /obj/item/bodypart/r_leg/alien, /obj/item/bodypart/l_leg/alien)
can_ventcrawl = TRUE
var/obj/effect/proc_holder/alien/regurgitate/regurg
GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list(
/datum/strippable_item/hand/left,
@@ -29,7 +29,13 @@ GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list(
//This is fine right now, if we're adding organ specific damage this needs to be updated
/mob/living/carbon/alien/humanoid/Initialize(mapload)
AddAbility(new/obj/effect/proc_holder/alien/regurgitate(null))
regurg = new(null)
AddAbility(regurg)
. = ..()
/mob/living/carbon/alien/humanoid/Destroy()
RemoveAbility(regurg)
QDEL_NULL(regurg)
. = ..()
/mob/living/carbon/alien/humanoid/ComponentInitialize()
@@ -29,6 +29,7 @@
health = 400
icon_state = "alienq"
var/datum/action/small_sprite/smallsprite = new/datum/action/small_sprite/queen()
var/obj/effect/proc_holder/alien/royal/queen/promote/promote
/mob/living/carbon/alien/humanoid/royal/queen/Initialize(mapload)
//there should only be one queen
@@ -44,10 +45,17 @@
real_name = src.name
AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/repulse/xeno(src))
AddAbility(new/obj/effect/proc_holder/alien/royal/queen/promote())
promote = new(null)
AddAbility(promote)
smallsprite.Grant(src)
return ..()
/mob/living/carbon/alien/humanoid/royal/queen/Destroy()
RemoveAbility(promote)
QDEL_NULL(promote)
QDEL_NULL(small_sprite)
return ..()
/mob/living/carbon/alien/humanoid/royal/queen/create_internal_organs()
internal_organs += new /obj/item/organ/alien/plasmavessel/large/queen
internal_organs += new /obj/item/organ/alien/resinspinner
@@ -12,6 +12,9 @@
alien_powers += new A(src)
/obj/item/organ/alien/Destroy()
if(owner)
Remove(TRUE)
owner = null
QDEL_LIST(alien_powers)
return ..()
@@ -447,6 +447,14 @@
var/datum/action/innate/use_extract/major/extract_major
var/extract_cooldown = 0
/datum/species/jelly/luminescent/Destroy(force)
current_extract = null
QDEL_NULL(glow)
QDEL_NULL(extract_major)
QDEL_NULL(integrate_extract)
QDEL_NULL(extract_minor)
return ..()
/datum/species/jelly/luminescent/on_species_loss(mob/living/carbon/C)
..()
if(current_extract)
@@ -621,6 +629,14 @@
if(link_minds)
link_minds.Remove(C)
//Species datums don't normally implement destroy, but JELLIES SUCK ASS OUT OF A STEEL STRAW ~LemonInTheDark, Tsurupeta
/datum/species/jelly/stargazer/Destroy()
QDEL_NULL(project_thought)
QDEL_NULL(link_minds)
QDEL_LIST(linked_actions)
slimelink_owner = null
return ..()
/datum/species/jelly/stargazer/spec_death(gibbed, mob/living/carbon/human/H)
..()
for(var/M in linked_mobs)
@@ -673,6 +689,10 @@
..()
species = _species
/datum/action/innate/linked_speech/Destroy()
species = null
return ..()
/datum/action/innate/linked_speech/Activate()
var/mob/living/carbon/human/H = owner
if(!species || !(H in species.linked_mobs))
@@ -750,6 +770,10 @@
..()
species = _species
/datum/action/innate/linked_speech/Destroy()
species = null
return ..()
/datum/action/innate/link_minds/Activate()
var/mob/living/carbon/human/H = owner
if(!is_species(H, /datum/species/jelly/stargazer))
@@ -184,6 +184,9 @@ GLOBAL_LIST_INIT(strippable_monkey_items, create_strippable_list(list(
/mob/living/carbon/monkey/angry/Initialize(mapload)
. = ..()
if(prob(10))
var/obj/item/clothing/head/helmet/justice/escape/helmet = new(src)
equip_to_slot_or_del(helmet,ITEM_SLOT_HEAD)
INVOKE_ASYNC(helmet, /obj/item.proc/attack_self, src) // todo encapsulate toggle
INVOKE_ASYNC(src, PROC_REF(give_ape_escape_helmet))
/mob/living/carbon/monkey/angry/proc/give_ape_escape_helmet()
var/obj/item/clothing/head/helmet/justice/escape/helmet = new(src)
equip_to_slot_or_del(helmet,ITEM_SLOT_HEAD)
helmet.attack_self(src) // todo encapsulate toggle
+1
View File
@@ -35,6 +35,7 @@
if(buckled)
buckled.unbuckle_mob(src,force=1)
QDEL_LIST_ASSOC_VAL(ability_actions)
QDEL_LIST(abilities)
remove_from_all_data_huds()
GLOB.mob_living_list -= src
+2 -1
View File
@@ -187,6 +187,7 @@
// TODO: Why these no work?
// QDEL_NULL(robot_control)
QDEL_NULL(aiMulti)
QDEL_NULL(aiPDA)
// QDEL_NULL(alert_control)
malfhack = null
current = null
@@ -1036,9 +1037,9 @@
return
/mob/living/silicon/ai/spawned/Initialize(mapload, datum/ai_laws/L, mob/target_ai)
. = ..()
if(!target_ai)
target_ai = src //cheat! just give... ourselves as the spawned AI, because that's technically correct
. = ..()
/mob/living/silicon/ai/proc/camera_visibility(mob/camera/aiEye/moved_eye)
GLOB.cameranet.visibility(moved_eye, client, all_eyes, USE_STATIC_OPAQUE)
+6 -4
View File
@@ -85,12 +85,15 @@
var/icon/custom_holoform_icon
/mob/living/silicon/pai/Destroy()
QDEL_NULL(signaler)
QDEL_NULL(pda)
QDEL_NULL(internal_instrument)
if (loc != card)
card.forceMove(drop_location())
card.pai = null
card.cut_overlays()
card.add_overlay("pai-off")
card = null
GLOB.pai_list -= src
return ..()
@@ -111,10 +114,9 @@
//PDA
pda = new(src)
spawn(5)
pda.ownjob = "pAI Messenger"
pda.owner = text("[]", src)
pda.name = pda.owner + " (" + pda.ownjob + ")"
pda.ownjob = "pAI Messenger"
pda.owner = text("[]", src)
pda.name = pda.owner + " (" + pda.ownjob + ")"
possible_chassis = typelist(NAMEOF(src, possible_chassis), list("cat" = TRUE, "mouse" = TRUE, "monkey" = TRUE, "corgi" = FALSE,
"fox" = FALSE, "repairbot" = TRUE, "rabbit" = TRUE, "borgi" = FALSE ,
@@ -116,17 +116,19 @@
if(connected_ai)
set_connected_ai(null)
if(shell) //??? why would you give an ai radio keys?
GLOB.available_ai_shells -= src
revert_shell()
else
if(T && istype(radio) && istype(radio.keyslot))
radio.keyslot.forceMove(T)
radio.keyslot = null
QDEL_LIST(upgrades)
QDEL_NULL(wires)
QDEL_NULL(module)
QDEL_NULL(eye_lights)
QDEL_NULL(inv1)
QDEL_NULL(inv2)
QDEL_NULL(inv3)
QDEL_NULL(aiPDA)
cell = null
return ..()
@@ -619,7 +621,7 @@
/mob/living/silicon/robot/proc/SetLockdown(state = TRUE)
// They stay locked down if their wire is cut.
if(wires.is_cut(WIRE_LOCKDOWN))
if(wires?.is_cut(WIRE_LOCKDOWN))
state = TRUE
if(state)
throw_alert("locked", /atom/movable/screen/alert/locked)
@@ -693,7 +695,7 @@
// set_light_color(COLOR_RED) //This should only matter for doomsday borgs, as any other time the lamp will be off and the color not seen
// set_light_range(1) //Again, like above, this only takes effect when the light is forced on by doomsday mode.
lamp_enabled = FALSE
lampButton.update_icon()
lampButton?.update_icon()
update_icons()
return
set_light(lamp_intensity, l_color = (lamp_doom? COLOR_RED : lamp_color))
@@ -701,7 +703,7 @@
// set_light_color(lamp_doom? COLOR_RED : lamp_color) //Red for doomsday killborgs, borg's choice otherwise
// set_light_on(TRUE)
lamp_enabled = TRUE
lampButton.update_icon()
lampButton?.update_icon()
update_icons()
/mob/living/silicon/robot/proc/deconstruct()
@@ -1135,6 +1137,7 @@
for(var/obj/item/borg/upgrade/ai/boris in src)
//A player forced reset of a borg would drop the module before this is called, so this is for catching edge cases
qdel(boris)
upgrades -= boris
shell = FALSE
GLOB.available_ai_shells -= src
name = "Unformatted Cyborg-[ident]"
@@ -411,7 +411,8 @@
"Haydee" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "haydeemedical"), // SPLURT Addon (Hyper Port)
"Borgi" = image(icon = 'modular_splurt/icons/mob/widerobot.dmi', icon_state = "borgi-medi-b"), // SPLURT Adoon (Skyrat Port)
"Drake" = image(icon = 'modular_sand/icons/mob/cyborg/drakemech.dmi', icon_state = "drakemedbox"),
"Assaultron" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "assaultron_medical") // SPLURT Addon
"Assaultron" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "assaultron_medical"), // SPLURT Addon
"Meka" = image(icon = 'modular_splurt/icons/mob/robots_32x64.dmi', icon_state = "mekamed"), // SPLURT Addon
)
var/list/L = list("Medihound" = "medihound", "Medihound Dark" = "medihounddark", "Vale" = "valemed")
for(var/a in L)
@@ -538,6 +539,10 @@
cyborg_base_icon = "assaultron_medical"
cyborg_icon_override = 'modular_splurt/icons/mob/robots.dmi'
hat_offset = 3
if("Meka")
cyborg_base_icon = "mekamed"
cyborg_icon_override = 'modular_splurt/icons/mob/robots_32x64.dmi'
hat_offset = 3
else
return FALSE
return ..()
@@ -611,7 +616,8 @@
"Engihound Dark" = image(icon = 'modular_splurt/icons/mob/widerobot.dmi', icon_state = "engihounddark-b"), // SPLURT Adoon (Skyrat Port)
"Otie" = image(icon = 'modular_splurt/icons/mob/widerobot.dmi', icon_state = "otiee-b"), // SPLURT Adoon (Skyrat Port)
"Drake" = image(icon = 'modular_sand/icons/mob/cyborg/drakemech.dmi', icon_state = "drakeengbox"),
"Assaultron" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "assaultron_engi") // SPLURT Addon
"Assaultron" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "assaultron_engi"), // SPLURT Addon
"Haydee" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "haydeeengi") // SPLURT Addon
)
var/list/L = list("Pup Dozer" = "pupdozer", "Vale" = "valeeng")
for(var/a in L)
@@ -734,10 +740,14 @@
cyborg_icon_override = 'modular_sand/icons/mob/cyborg/drakemech.dmi'
sleeper_overlay = "drakesecsleeper"
dogborg = TRUE
if("Assaultron") // SPLURT Addon (Hyper Port)
if("Assaultron") // SPLURT Addon
cyborg_base_icon = "assaultron_engi"
cyborg_icon_override = 'modular_splurt/icons/mob/robots.dmi'
hat_offset = 3
if("Haydee") // SPLURT Addon
cyborg_base_icon = "haydeeengi"
cyborg_icon_override = 'modular_splurt/icons/mob/robots.dmi'
hat_offset = 3
else
return FALSE
return ..()
@@ -794,9 +804,8 @@
"EdgyBoy" = image(icon = 'modular_splurt/icons/mob/widerobot.dmi', icon_state = "badboi-b"), // SPLURT Addon (VIRGO Port)
"EdgyGirl" = image(icon = 'modular_splurt/icons/mob/widerobot.dmi', icon_state = "prettyboi-b"), // SPLURT Addon (VIRGO Port)
"Drake" = image(icon = 'modular_sand/icons/mob/cyborg/drakemech.dmi', icon_state = "drakesecbox"),
"Assaultron" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "assaultron_sec") // SPLURT Addon
"Assaultron" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "assaultron_sec"), // SPLURT Addon
"Haydee" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "haydeesec") // SPLURT Addon
)
var/list/L = list("K9" = "k9", "Vale" = "valesec", "K9 Dark" = "k9dark")
for(var/a in L)
@@ -920,12 +929,14 @@
sleeper_overlay = "drakesecsleeper"
cyborg_icon_override = 'modular_sand/icons/mob/cyborg/drakemech.dmi'
dogborg = TRUE
if("Assaultron") // SPLURT Addon
cyborg_base_icon = "assaultron_sec"
cyborg_icon_override = 'modular_splurt/icons/mob/robots.dmi'
hat_offset = 3
if("Haydee") // SPLURT Addon
cyborg_base_icon = "haydeesec"
cyborg_icon_override = 'modular_splurt/icons/mob/robots.dmi'
hat_offset = 3
else
return FALSE
return ..()
@@ -982,6 +993,8 @@
"Vale" = image(icon = 'modular_splurt/icons/mob/widerobot.dmi', icon_state = "valepeace-b"), // SPLURT Adoon (Skyrat Port)
"Drake" = image(icon = 'modular_sand/icons/mob/cyborg/drakemech.dmi', icon_state = "drakepeacebox"),
"Assaultron" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "assaultron_peacekeeper"), // SPLURT Adoon
"Haydee" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "haydeepk"), // SPLURT Addon
"Meka" = image(icon = 'modular_splurt/icons/mob/robots_32x64.dmi', icon_state = "mekapeace"), // SPLURT Addon
))
var/peace_borg_icon = show_radial_menu(R, R , peace_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE)
switch(peace_borg_icon)
@@ -1043,6 +1056,14 @@
cyborg_base_icon = "assaultron_peacekeeper"
cyborg_icon_override = 'modular_splurt/icons/mob/robots.dmi'
hat_offset = 3
if("Haydee") // SPLURT Addon
cyborg_base_icon = "haydeepk"
cyborg_icon_override = 'modular_splurt/icons/mob/robots.dmi'
hat_offset = 3
if("Meka")
cyborg_base_icon = "mekapeace"
cyborg_icon_override = 'modular_splurt/icons/mob/robots_32x64.dmi'
hat_offset = 3
else
return FALSE
return ..()
@@ -1189,6 +1210,7 @@
"(Service) BootyS" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "bootyserviceS"), // SPLURT Addon (Hyper Port)
"(Service) K69" = image(icon = 'modular_splurt/icons/mob/widerobot.dmi', icon_state = "k69-b"), // SPLURT Addon (Skyrat Port) // The Cursed One
"(Service) Borgi" = image(icon = 'modular_splurt/icons/mob/widerobot.dmi', icon_state = "borgi-serv-b"), // SPLURT Addon (Skyrat Port)
"(Service) Meka" = image(icon = 'modular_splurt/icons/mob/robots_32x64.dmi', icon_state = "mekaserve"), // SPLURT Addon
"(Janitor) Default" = image(icon = 'icons/mob/robots.dmi', icon_state = "janitor"),
"(Janitor) Marina" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "marinajan"),
"(Janitor) Sleek" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "sleekjan"),
@@ -1211,6 +1233,9 @@
"(Janitor) Fembot" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "fembot-service"), // SPLURT Addon
"(Janitor) Drake" = image(icon = 'modular_sand/icons/mob/cyborg/drakemech.dmi', icon_state = "drakejanitbox"),
"Assaultron" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "assaultron_service"), // SPLURT Addon
"(Janitor) Haydee" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "haydeejan"), // SPLURT Addon
"(Janitor) Meka" = image(icon = 'modular_splurt/icons/mob/robots_32x64.dmi', icon_state = "mekajani"), // SPLURT Addon
"(Waiter) Meka" = image(icon = 'modular_splurt/icons/mob/robots_32x64.dmi', icon_state = "mekaserve_alt"), // SPLURT Addon
)
var/list/L = list("(Service) DarkK9" = "k50", "(Service) Vale" = "valeserv", "(Service) ValeDark" = "valeservdark",
"(Janitor) Scrubpuppy" = "scrubpup")
@@ -1305,6 +1330,10 @@
cyborg_icon_override = 'modular_splurt/icons/mob/widerobot.dmi'
sleeper_overlay = "borgi-sleeper"
dogborg = TRUE
if("(Service) Meka")
cyborg_base_icon = "mekaserve"
cyborg_icon_override = 'modular_splurt/icons/mob/robots_32x64.dmi'
hat_offset = 3
if("(Janitor) Default")
cyborg_base_icon = "janitor"
if("(Janitor) Marina")
@@ -1395,6 +1424,18 @@
cyborg_base_icon = "assaultron_service"
cyborg_icon_override = 'modular_splurt/icons/mob/robots.dmi'
hat_offset = 3
if("(Janitor) Haydee") // SPLURT Addon
cyborg_base_icon = "haydeejan"
cyborg_icon_override = 'modular_splurt/icons/mob/robots.dmi'
hat_offset = 3
if("(Janitor) Meka")
cyborg_base_icon = "mekajani"
cyborg_icon_override = 'modular_splurt/icons/mob/robots_32x64.dmi'
hat_offset = 3
if("(Waiter) Meka")
cyborg_base_icon = "mekaserve_alt"
cyborg_icon_override = 'modular_splurt/icons/mob/robots_32x64.dmi'
hat_offset = 3
else
return FALSE
return ..()
@@ -1456,7 +1497,9 @@
"Cargohound Dark" = image(icon = 'modular_splurt/icons/mob/widerobot.dmi', icon_state = "cargohounddark-b"), // SPLURT Adoon (Skyrat Port)
"Otie" = image(icon = 'modular_splurt/icons/mob/widerobot.dmi', icon_state = "otiec-b"), // SPLURT Adoon (Skyrat Port)
"Drake" = image(icon = 'modular_sand/icons/mob/cyborg/drakemech.dmi', icon_state = "drakeminebox"),
"Assaultron" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "assaultron_mining"), // SPLURT
"Assaultron" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "assaultron_mining"), // SPLURT Addon
"Haydee" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "haydeeminer"), // SPLURT Addon
"Meka" = image(icon = 'modular_splurt/icons/mob/robots_32x64.dmi', icon_state = "mekamine"), // SPLURT Addon
)
var/list/L = list("Blade" = "blade", "Vale" = "valemine")
for(var/a in L)
@@ -1560,6 +1603,14 @@
cyborg_base_icon = "assaultron_mining"
cyborg_icon_override = 'modular_splurt/icons/mob/robots.dmi'
hat_offset = 3
if("Haydee") // SPLURT Addon
cyborg_base_icon = "haydeeminer"
cyborg_icon_override = 'modular_splurt/icons/mob/robots.dmi'
hat_offset = 3
if("Meka")
cyborg_base_icon = "mekamine"
cyborg_icon_override = 'modular_splurt/icons/mob/robots_32x64.dmi'
hat_offset = 3
else
return FALSE
return ..()
@@ -53,21 +53,21 @@
lasercolor = created_lasercolor
icon_state = "[lasercolor]ed209[on]"
set_weapon() //giving it the right projectile and firing sound.
spawn(3)
var/datum/job/detective/J = new/datum/job/detective
access_card.access += J.get_access()
prev_access = access_card.access
if(lasercolor)
shot_delay = 6//Longer shot delay because JESUS CHRIST
check_records = 0//Don't actively target people set to arrest
arrest_type = 1//Don't even try to cuff
bot_core.req_access = list(ACCESS_MAINT_TUNNELS, ACCESS_THEATRE)
arrest_type = 1
if((lasercolor == "b") && (name == "\improper ED-209 Security Robot"))//Picks a name if there isn't already a custome one
name = pick("BLUE BALLER","SANIC","BLUE KILLDEATH MURDERBOT")
if((lasercolor == "r") && (name == "\improper ED-209 Security Robot"))
name = pick("RED RAMPAGE","RED ROVER","RED KILLDEATH MURDERBOT")
var/datum/job/detective/J = new /datum/job/detective
access_card.access += J.get_access()
prev_access = access_card.access
if(lasercolor)
shot_delay = 6//Longer shot delay because JESUS CHRIST
check_records = 0//Don't actively target people set to arrest
arrest_type = 1//Don't even try to cuff
bot_core.req_access = list(ACCESS_MAINT_TUNNELS, ACCESS_THEATRE)
arrest_type = 1
if((lasercolor == "b") && (name == "\improper ED-209 Security Robot"))//Picks a name if there isn't already a custome one
name = pick("BLUE BALLER","SANIC","BLUE KILLDEATH MURDERBOT")
if((lasercolor == "r") && (name == "\improper ED-209 Security Robot"))
name = pick("RED RAMPAGE","RED ROVER","RED KILLDEATH MURDERBOT")
//SECHUD
var/datum/atom_hud/secsensor = GLOB.huds[DATA_HUD_SECURITY_ADVANCED]
@@ -45,9 +45,12 @@
var/datum/job/engineer/J = new/datum/job/engineer
access_card.access += J.get_access()
prev_access = access_card.access
create_extinguisher()
/mob/living/simple_animal/bot/firebot/Destroy()
QDEL_NULL(internal_ext)
return ..()
/mob/living/simple_animal/bot/firebot/bot_reset()
create_extinguisher()
@@ -68,8 +68,8 @@
/mob/living/simple_animal/bot/mulebot/Destroy()
unload(0)
qdel(wires)
wires = null
QDEL_NULL(wires)
QDEL_NULL(cell)
return ..()
/mob/living/simple_animal/bot/mulebot/proc/set_id(new_id)
@@ -202,7 +202,7 @@
/mob/living/simple_animal/cow/random/Initialize(mapload)
milk_reagent = get_random_reagent_id() //this has a blacklist so don't worry about romerol cows, etc
..()
. = ..()
//Wisdom cow, speaks and bestows great wisdoms
/mob/living/simple_animal/cow/wisdom
@@ -98,7 +98,7 @@
/obj/structure/receiving_pad/New(loc, mob/living/simple_animal/hostile/guardian/healer/G)
. = ..()
if(G.guardiancolor)
if(G?.guardiancolor)
add_atom_colour(G.guardiancolor, FIXED_COLOUR_PRIORITY)
/obj/structure/receiving_pad/proc/disappear()
@@ -396,10 +396,6 @@
action_icon_state = "wrap_0"
action_background_icon_state = "bg_alien"
/obj/effect/proc_holder/wrap/Initialize(mapload)
. = ..()
action = new(src)
/obj/effect/proc_holder/wrap/update_icon()
action.button_icon_state = "wrap_[active]"
action.UpdateButtonIcon()
@@ -62,6 +62,10 @@ Difficulty: Medium
internal = new/obj/item/gps/internal/miner(src)
miner_saw = new(src)
/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/Destroy()
QDEL_NULL(miner_saw)
return ..()
/datum/action/innate/megafauna_attack/dash
name = "Dash To Target"
icon_icon = 'icons/mob/actions/actions_items.dmi'
@@ -249,6 +249,8 @@ Difficulty: Very Hard
var/list/stored_items = list()
var/list/blacklist = list()
GLOBAL_VAR(blackbox_smartfridge)
/obj/machinery/smartfridge/black_box/ComponentInitialize()
. = ..()
AddElement(/datum/element/update_icon_blocker)
@@ -263,11 +265,10 @@ Difficulty: Very Hard
/obj/machinery/smartfridge/black_box/Initialize()
. = ..()
var/static/obj/machinery/smartfridge/black_box/current
if(current && current != src)
if(GLOB.blackbox_smartfridge && GLOB.blackbox_smartfridge != src)
qdel(src, force=TRUE)
return
current = src
GLOB.blackbox_smartfridge = src
ReadMemory()
/obj/machinery/smartfridge/black_box/process()
@@ -314,6 +315,8 @@ Difficulty: Very Hard
if(force)
for(var/thing in src)
qdel(thing)
if(GLOB.blackbox_smartfridge == src)
GLOB.blackbox_smartfridge = null
return ..()
else
return QDEL_HINT_LETMELIVE
@@ -30,7 +30,7 @@
/mob/living/simple_animal/hostile/asteroid/curseblob/Initialize(mapload)
. = ..()
timerid = QDEL_IN(src, 600)
timerid = QDEL_IN_STOPPABLE(src, 600)
playsound(src, 'sound/effects/curse1.ogg', 100, 1, -1)
/mob/living/simple_animal/hostile/asteroid/curseblob/Destroy()
@@ -57,7 +57,8 @@
/mob/living/simple_animal/hostile/asteroid/curseblob/proc/check_for_target()
if(QDELETED(set_target) || set_target.stat != CONSCIOUS || z != set_target.z)
qdel(src)
if(!QDELETED(src))
qdel(src)
return TRUE
/mob/living/simple_animal/hostile/asteroid/curseblob/GiveTarget(new_target)
@@ -204,7 +204,7 @@
var/mob/living/simple_animal/hostile/asteroid/elite/herald/my_master = null
/mob/living/simple_animal/hostile/asteroid/elite/herald/mirror/Initialize(mapload)
..()
. = ..()
toggle_ai(AI_OFF)
/mob/living/simple_animal/hostile/asteroid/elite/herald/mirror/Destroy()
@@ -211,4 +211,4 @@
/obj/effect/temp_visual/goliath_tentacle/proc/retract()
icon_state = "Goliath_tentacle_retract"
deltimer(timerid)
timerid = QDEL_IN(src, 7)
timerid = QDEL_IN_STOPPABLE(src, 7)
@@ -130,11 +130,6 @@
/obj/item/udder/gutlunch
name = "nutrient sac"
/obj/item/udder/gutlunch/Initialize(mapload)
. = ..()
reagents = new(50)
reagents.my_atom = src
/obj/item/udder/gutlunch/generateMilk()
if(prob(60))
reagents.add_reagent(/datum/reagent/consumable/cream, rand(2, 5))
@@ -60,6 +60,12 @@
blink.outer_tele_radius = 3
AddSpell(blink)
/mob/living/simple_animal/hostile/wizard/Destroy()
QDEL_NULL(fireball)
QDEL_NULL(mm)
QDEL_NULL(blink)
return ..()
/mob/living/simple_animal/hostile/wizard/handle_automated_action()
. = ..()
INVOKE_ASYNC(src, .proc/AutomatedCast)
+3
View File
@@ -24,6 +24,7 @@
remove_from_mob_list()
remove_from_dead_mob_list()
remove_from_alive_mob_list()
QDEL_LIST(mob_spell_list)
GLOB.all_clockwork_mobs -= src
focus = null
LAssailant = null
@@ -40,6 +41,8 @@
qdel(cc)
client_colours = null
ghostize()
if(mind?.current == src) //Let's just be safe yeah? This will occasionally be cleared, but not always. Can't do it with ghostize without changing behavior
mind.set_current(null)
..()
return QDEL_HINT_HARDDEL
@@ -71,7 +71,6 @@
for(var/H in all_components)
var/obj/item/computer_hardware/CH = all_components[H]
if(CH.holder == src)
CH.on_remove(src)
CH.holder = null
all_components.Remove(CH.device_type)
qdel(CH)
@@ -19,6 +19,11 @@
set_frequency(signal_frequency)
return ..()
/datum/computer_file/program/signaler/Destroy()
SSradio.remove_object(src, signal_frequency)
radio_connection = null
return ..()
/datum/computer_file/program/signaler/ui_data(mob/user)
var/list/data = get_header_data()
data["frequency"] = signal_frequency
@@ -10,6 +10,10 @@
var/obj/item/aicard/stored_card
var/locked = FALSE
/obj/item/computer_hardware/ai_slot/Destroy()
QDEL_NULL(stored_card)
return ..()
///What happens when the intellicard is removed (or deleted) from the module, through try_eject() or not.
/obj/item/computer_hardware/ai_slot/Exited(atom/movable/gone, direction)
if(stored_card == gone)
@@ -55,7 +59,7 @@
if(Adjacent(user))
user.put_in_hands(stored_card)
else
stored_card.forceMove(drop_location())
stored_card.forceMove(get_turf(src))
return TRUE
return FALSE
@@ -16,7 +16,7 @@
battery = new battery_type(src)
/obj/item/computer_hardware/battery/Destroy()
battery = null
QDEL_NULL(battery)
return ..()
///What happens when the battery is removed (or deleted) from the module, through try_eject() or not.
@@ -59,7 +59,7 @@
user.put_in_hands(battery)
to_chat(user, span_notice("You detach \the [battery] from \the [src]."))
else
battery.forceMove(drop_location())
battery.forceMove(get_turf(src))
return TRUE
/obj/item/stock_parts/cell/computer
@@ -94,7 +94,7 @@
if(user && !issilicon(user) && in_range(src, user))
user.put_in_hands(stored_card)
else
stored_card.forceMove(drop_location())
stored_card.forceMove(get_turf(src))
to_chat(user, span_notice("You remove the card from \the [src]."))
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE)
+1 -1
View File
@@ -63,7 +63,7 @@
var/mod = CONFIG_GET(number/movedelay/walk_delay)
multiplicative_slowdown = isnum(mod)? mod : initial(multiplicative_slowdown)
/datum/movespeed_modifier/config_wak_run/walk/apply_multiplicative(existing, mob/target)
/datum/movespeed_modifier/config_walk_run/walk/apply_multiplicative(existing, mob/target)
. = ..()
if(HAS_TRAIT(target, TRAIT_SPEEDY_STEP))
. -= 1.25
+6 -4
View File
@@ -84,12 +84,14 @@
cell.icon_state = "bscell"
/obj/item/clothing/suit/space/space_ninja/Initialize(mapload)
START_PROCESSING(SSobj, src)
return ..()
START_PROCESSING(SSobj, src)
return ..()
/obj/item/clothing/suit/space/space_ninja/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
QDEL_NULL(spark_system)
QDEL_NULL(cell)
STOP_PROCESSING(SSobj, src)
return ..()
// Power usage
/obj/item/clothing/suit/space/space_ninja/process(delta_time)
+2
View File
@@ -92,6 +92,8 @@
/obj/item/paper/contract/infernal/New(atom/loc, mob/living/nTarget, datum/mind/nOwner)
..()
if(!nOwner || !nTarget)
return
owner = nOwner
devil_datum = owner.has_antag_datum(/datum/antagonist/devil)
target = nTarget
+1
View File
@@ -80,6 +80,7 @@
linked_turfs.Cut()
mobs_in_pool.Cut()
mist_off()
QDEL_NULL(wires)
return ..()
/obj/machinery/pool/controller/proc/scan_things()
+6 -4
View File
@@ -31,8 +31,9 @@
/obj/machinery/pool/drain/Destroy()
STOP_PROCESSING(SSfastprocess, src)
controller.linked_drain = null
controller = null
if(controller)
controller.linked_drain = null
controller = null
whirling_mobs = null
return ..()
@@ -129,8 +130,9 @@
var/obj/machinery/pool/controller/controller
/obj/machinery/pool/filter/Destroy()
controller.linked_filter = null
controller = null
if(controller)
controller.linked_filter = null
controller = null
return ..()
/obj/machinery/pool/filter/emag_act(mob/living/user)
+9 -8
View File
@@ -303,17 +303,18 @@
if(malfai && operating)
malfai.malf_picker.processing_time = clamp(malfai.malf_picker.processing_time - 10,0,1000)
area.power_light = FALSE
area.power_equip = FALSE
area.power_environ = FALSE
area.power_change()
area.poweralert(FALSE, src)
if(area)
area.power_light = FALSE
area.power_equip = FALSE
area.power_environ = FALSE
area.power_change()
area.poweralert(FALSE, src)
if(occupier)
malfvacate(1)
qdel(wires)
wires = null
if(wires)
QDEL_NULL(wires)
if(cell)
qdel(cell)
QDEL_NULL(cell)
if(terminal)
disconnect_terminal()
. = ..()
+10
View File
@@ -552,6 +552,11 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
. = ..()
addtimer(CALLBACK(src, .proc/link_to_reactor), 10 SECONDS)
/obj/machinery/computer/reactor/Destroy()
reactor = null
return ..()
/obj/machinery/computer/reactor/wrench_act(mob/living/user, obj/item/I)
to_chat(user, "<span class='notice'>You start [anchored ? "un" : ""]securing [name]...</span>")
if(I.use_tool(src, user, 40, volume=75))
@@ -728,6 +733,11 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
. = ..()
radio_connection = SSradio.add_object(src, FREQ_RBMK_CONTROL,filter=RADIO_ATMOSIA)
/obj/machinery/computer/reactor/pump/Destroy()
SSradio.remove_object(src, FREQ_RBMK_CONTROL)
radio_connection = null
return ..()
/obj/machinery/computer/reactor/pump/proc/signal(power, set_output_pressure=null)
var/datum/signal/signal
if(!set_output_pressure) //Yes this is stupid, but technically if you pass through "set_output_pressure" onto the signal, it'll always try and set its output pressure and yeahhh...
@@ -13,12 +13,16 @@
interaction_flags_machine = NONE
light_range = 4
layer = ABOVE_OBJ_LAYER
var/obj/machinery/field/generator/FG1 = null
var/obj/machinery/field/generator/FG2 = null
var/obj/machinery/field/generator/field_gen_1 = null
var/obj/machinery/field/generator/field_gen_2 = null
/obj/machinery/field/containment/Destroy()
FG1.fields -= src
FG2.fields -= src
if(field_gen_1)
field_gen_1.fields -= src
field_gen_1 = null
if(field_gen_2)
field_gen_2.fields -= src
field_gen_2 = null
return ..()
/obj/machinery/field/containment/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
@@ -46,12 +50,12 @@
return FALSE
/obj/machinery/field/containment/attack_animal(mob/living/simple_animal/M)
if(!FG1 || !FG2)
if(!field_gen_1 || !field_gen_2)
qdel(src)
return
if(ismegafauna(M))
M.visible_message("<span class='warning'>[M] glows fiercely as the containment field flickers out!</span>")
FG1.calc_power(INFINITY) //rip that 'containment' field
field_gen_1.calc_power(INFINITY) //rip that 'containment' field
M.adjustHealth(-M.obj_damage)
else
..()
@@ -68,12 +72,12 @@
/obj/machinery/field/containment/proc/set_master(master1,master2)
if(!master1 || !master2)
return FALSE
FG1 = master1
FG2 = master2
field_gen_1 = master1
field_gen_2 = master2
return TRUE
/obj/machinery/field/containment/shock(mob/living/user)
if(!FG1 || !FG2)
if(!field_gen_1 || !field_gen_2)
qdel(src)
return FALSE
..()
@@ -110,6 +110,7 @@
log_game("Emitter deleted at [AREACOORD(T)]")
investigate_log("<font color='red'>deleted</font> at [AREACOORD(T)]", INVESTIGATE_SINGULO)
QDEL_NULL(sparks)
QDEL_NULL(wires)
return ..()
/obj/machinery/power/emitter/update_icon_state()
+6
View File
@@ -28,6 +28,12 @@
wires = new /datum/wires/tesla_coil(src)
linked_techweb = SSresearch.science_tech
/obj/machinery/power/tesla_coil/Destroy()
QDEL_NULL(wires)
linked_techweb = null
return ..()
/obj/machinery/power/tesla_coil/RefreshParts()
var/power_multiplier = 0
zap_cooldown = 100
@@ -2,8 +2,8 @@
projectile_type = /obj/item/projectile/beam/wormhole
e_cost = 0
fire_sound = 'sound/weapons/pulse3.ogg'
var/obj/item/gun/energy/wormhole_projector/gun = null
select_name = "blue"
var/datum/weakref/gun
/obj/item/ammo_casing/energy/wormhole/orange
projectile_type = /obj/item/projectile/beam/wormhole/orange
@@ -11,7 +11,7 @@
/obj/item/ammo_casing/energy/wormhole/Initialize(mapload, obj/item/gun/energy/wormhole_projector/wh)
. = ..()
gun = wh
gun = WEAKREF(wh)
/obj/item/ammo_casing/energy/wormhole/throw_proj()
. = ..()
+3 -1
View File
@@ -150,7 +150,7 @@
AddComponent(/datum/component/automatic_fire, fire_delay)
/obj/item/gun/Destroy()
if(pin)
if(isobj(pin))
QDEL_NULL(pin)
if(gun_light)
QDEL_NULL(gun_light)
@@ -162,6 +162,8 @@
QDEL_NULL(azoom)
if(firemode_action)
QDEL_NULL(firemode_action)
if(isatom(suppressed))
QDEL_NULL(suppressed)
return ..()
/obj/item/gun/examine(mob/user)
@@ -49,9 +49,9 @@
/obj/item/gun/ballistic/automatic/pistol/modular/update_overlays()
. = ..()
if(magazine && suppressed)
. += "[unique_reskin[current_skin]["icon_state"]]-magazine-sup" //Yes, this means the default iconstate can't have a magazine overlay
. += "[current_skin ? unique_reskin[current_skin]["icon_state"] : initial(icon_state)]-magazine-sup" //Yes, this means the default iconstate can't have a magazine overlay
else if (magazine)
. += "[unique_reskin[current_skin]["icon_state"]]-magazine"
. += "[current_skin ? unique_reskin[current_skin]["icon_state"] : initial(icon_state)]-magazine"
/obj/item/gun/ballistic/automatic/pistol/m1911
name = "\improper M1911"
+2
View File
@@ -69,6 +69,8 @@
AddElement(/datum/element/update_icon_updates_onmob)
/obj/item/gun/energy/Destroy()
if(cell)
QDEL_NULL(cell)
STOP_PROCESSING(SSobj, src)
return ..()
@@ -23,6 +23,9 @@
START_PROCESSING(SSfastprocess, src)
/obj/item/minigunpack/Destroy()
if(!QDELETED(gun))
qdel(gun)
gun = null
STOP_PROCESSING(SSfastprocess, src)
return ..()
@@ -120,6 +123,12 @@
return ..()
/obj/item/gun/energy/minigun/Destroy()
if(!QDELETED(ammo_pack))
qdel(ammo_pack)
ammo_pack = null
return ..()
/obj/item/gun/energy/minigun/attack_self(mob/living/user)
return
@@ -243,10 +243,10 @@
for(var/i in 1 to ammo_type.len)
var/obj/item/ammo_casing/energy/wormhole/W = ammo_type[i]
if(istype(W))
W.gun = src
W.gun = WEAKREF(src)
var/obj/item/projectile/beam/wormhole/WH = W.BB
if(istype(WH))
WH.gun = src
WH.gun = WEAKREF(src)
/obj/item/gun/energy/wormhole_projector/process_chamber()
..()
+2 -1
View File
@@ -52,7 +52,8 @@
/obj/item/gun/magic/Initialize(mapload)
. = ..()
charges = max_charges
chambered = new ammo_type(src)
if(ammo_type)
chambered = new ammo_type(src)
if(can_charge)
START_PROCESSING(SSobj, src)
@@ -27,6 +27,10 @@
. = ..()
judgementcut = new(src)
/obj/item/gun/magic/staff/motivation/Destroy()
QDEL_NULL(judgementcut)
. = ..()
//lets the user know that their judgement cuts are recharging
/obj/item/gun/magic/staff/motivation/shoot_with_empty_chamber(mob/living/user as mob|obj)
to_chat(user, "<span class='warning'>Judgement Cut is recharging.</span>")
@@ -507,8 +507,8 @@
duration = 0
. = ..()
if(!generation) //first one
QDEL_LIST(gun.current_tracers)
gun.current_tracers += .
QDEL_LIST(gun?.current_tracers)
gun?.current_tracers += .
/obj/item/projectile/beam/beam_rifle/hitscan/aiming_beam
tracer_type = /obj/effect/projectile/tracer/tracer/aiming
@@ -20,6 +20,10 @@
handedness = prob(50)
icon_state = "cursehand[handedness]"
/obj/item/projectile/curse_hand/Destroy()
QDEL_NULL(arm)
. = ..()
/obj/item/projectile/curse_hand/update_icon_state()
icon_state = "[initial(icon_state)][handedness]"
@@ -43,9 +47,10 @@
for(var/obj/effect/temp_visual/dir_setting/curse/grasp_portal/G in starting)
qdel(G)
new /obj/effect/temp_visual/dir_setting/curse/grasp_portal/fading(starting, dir)
var/datum/beam/D = starting.Beam(T, icon_state = "curse[handedness]", time = 32, maxdistance = INFINITY, beam_type=/obj/effect/ebeam/curse_arm, beam_sleep_time = 1)
for(var/b in D.elements)
var/obj/effect/ebeam/B = b
animate(B, alpha = 0, time = 32)
var/datum/beam/D = starting?.Beam(T, icon_state = "curse[handedness]", time = 32, maxdistance = INFINITY, beam_type=/obj/effect/ebeam/curse_arm, beam_sleep_time = 1)
if(D)
for(var/b in D.elements)
var/obj/effect/ebeam/B = b
animate(B, alpha = 0, time = 32)
return ..()
@@ -13,7 +13,7 @@
. = ..()
var/obj/item/ammo_casing/energy/gravity/G = loc
if(istype(G))
power = min(G.gun.power, 15)
power = min(G.gun?.power, 15)
/obj/item/projectile/gravity/on_hit()
. = ..()
@@ -28,7 +28,7 @@
hal_target.client.images += fake_icon
/obj/item/projectile/hallucination/Destroy()
if(hal_target.client)
if(hal_target?.client)
hal_target.client.images -= fake_icon
QDEL_NULL(fake_icon)
return ..()

Some files were not shown because too many files have changed in this diff Show More