TG sync Sunday (#201)

* stage one

* datums and shit

* game stuff

* modules

* tgstation.dme

* tools

* these things for icons

* compiling fixes

* merge spree on TG

* other updates

* updated maps with deepfryers

* My helpers were not helping
This commit is contained in:
Poojawa
2017-02-06 00:36:56 -06:00
committed by GitHub
parent aeeca195c7
commit 73b6b33f79
279 changed files with 3548 additions and 2585 deletions
+2
View File
@@ -440,8 +440,10 @@ var/list/blood_splatter_icons = list()
//This base must be called or derivatives must set initialized to TRUE to prevent repeat calls
//Derivatives must not sleep
/atom/proc/Initialize(mapload)
#ifdef TESTING
if(initialized)
stack_trace("Warning: [src]([type]) initialized multiple times!")
#endif
initialized = TRUE
//the vision impairment to give to the mob whose perspective is set to that atom (e.g. an unfocused camera giving you an impaired vision when looking through it)
+18 -10
View File
@@ -130,7 +130,7 @@
throwing = 0
throw_impact(A)
. = 1
if(!A || qdeleted(A))
if(!A || QDELETED(A))
return
A.Bumped(src)
@@ -139,21 +139,29 @@
if(destination)
if(pulledby)
pulledby.stop_pulling()
var/atom/oldloc = loc
var/same_loc = oldloc == destination.loc
if(oldloc && !same_loc)
oldloc.Exited(src, destination)
loc = destination
if(!same_loc)
destination.Entered(src, oldloc)
var/same_loc = oldloc == destination
var/area/old_area = get_area(oldloc)
var/area/destarea = get_area(destination)
if(old_area != destarea)
destarea.Entered(src)
if(oldloc && !same_loc)
oldloc.Exited(src, destination)
if(old_area)
old_area.Exited(src, destination)
loc = destination
if(!same_loc)
destination.Entered(src, oldloc)
if(destarea && old_area != destarea)
destarea.Entered(src, oldloc)
for(var/atom/movable/AM in destination)
if(AM == src)
continue
AM.Crossed(src)
Moved(oldloc, 0)
return 1
return 0
@@ -408,4 +416,4 @@
if(ex_id in acted_explosions)
return FALSE
acted_explosions += ex_id
return TRUE
return TRUE
+1 -1
View File
@@ -60,7 +60,7 @@
overmind.update_health_hud()
/obj/structure/blob/core/Life()
if(qdeleted(src))
if(QDELETED(src))
return
if(!overmind)
create_overmind()
@@ -76,7 +76,7 @@
//used in /mob/Stat()
/obj/effect/proc_holder/changeling/proc/can_be_used_by(mob/user)
if(!user || qdeleted(user))
if(!user || QDELETED(user))
return 0
if(!ishuman(user) && !ismonkey(user))
return 0
@@ -12,54 +12,25 @@
/obj/effect/proc_holder/changeling/augmented_eyesight/sting_action(mob/living/carbon/human/user)
if(!istype(user))
return
if(user.getorgan(/obj/item/organ/cyberimp/eyes/thermals/ling))
user << "<span class='notice'>Our eyes are protected from flashes.</span>"
var/obj/item/organ/cyberimp/eyes/O = new /obj/item/organ/cyberimp/eyes/shield/ling()
O.Insert(user)
var/obj/item/organ/eyes/E = user.getorganslot("eye_sight")
if(E)
if(E.flash_protect)
E.sight_flags |= SEE_MOBS
E.flash_protect = -1
user << "We adjust our eyes to sense prey through walls."
else
E.sight_flags -= SEE_MOBS
E.flash_protect = 2
user << "We adjust our eyes to protect them from bright lights."
else
var/obj/item/organ/cyberimp/eyes/O = new /obj/item/organ/cyberimp/eyes/thermals/ling()
O.Insert(user)
user << "We can't adjust our eyes if we don't have any!"
return 1
/obj/effect/proc_holder/changeling/augmented_eyesight/on_refund(mob/user)
var/obj/item/organ/cyberimp/eyes/O = user.getorganslot("eye_ling")
if(O)
O.Remove(user)
qdel(O)
/obj/item/organ/cyberimp/eyes/shield/ling
name = "protective membranes"
desc = "These variable transparency organic membranes will protect you from welders and flashes and heal your eye damage."
icon_state = "ling_eyeshield"
eye_color = null
implant_overlay = null
slot = "eye_ling"
status = ORGAN_ORGANIC
/obj/item/organ/cyberimp/eyes/shield/ling/on_life()
..()
if(owner.eye_blind>1 || (owner.eye_blind && owner.stat !=UNCONSCIOUS) || owner.eye_damage || owner.eye_blurry || (owner.disabilities & NEARSIGHT))
owner.reagents.add_reagent("oculine", 1)
/obj/item/organ/cyberimp/eyes/shield/ling/prepare_eat()
var/obj/S = ..()
S.reagents.add_reagent("oculine", 15)
return S
/obj/item/organ/cyberimp/eyes/thermals/ling
name = "heat receptors"
desc = "These heat receptors dramatically increases eyes light sensing ability."
icon_state = "ling_thermal"
eye_color = null
implant_overlay = null
slot = "eye_ling"
status = ORGAN_ORGANIC
aug_message = "You feel a minute twitch in our eyes, and darkness creeps away."
/obj/item/organ/cyberimp/eyes/thermals/ling/emp_act(severity)
return
var/obj/item/organ/eyes/E = user.getorganslot("eye_sight")
if(E)
E.sight_flags -= SEE_MOBS
+1 -1
View File
@@ -180,7 +180,7 @@ Credit where due:
if(slot == "At your feet")
if(!S.forceMove(get_turf(L)))
qdel(S)
if(S && !qdeleted(S))
if(S && !QDELETED(S))
L << "<b>[slot] is a link to the halls of Reebe and your master. You may use it to perform many tasks, but also become oriented with the workings of Ratvar and how to best complete your \
tasks. This clockwork slab will be instrumental in your triumph. Remember: you can speak discreetly with your fellow servants by using the <span class='brass'>Hierophant Network</span> action button, \
and you can find a concise tutorial by using the slab in-hand and selecting Recollection.</b>"
@@ -47,7 +47,7 @@
return FALSE
/turf/open/floor/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer)
if(locate(/obj/structure/table) in loc)
if(locate(/obj/structure/table) in src)
return FALSE
if(is_blocked_turf(src, TRUE))
user << "<span class='warning'>Something is in the way, preventing you from proselytizing [src] into a clockwork wall.</span>"
@@ -66,7 +66,12 @@ List of nuances:
#define REVERSE_RATVAR_HYPHEN_OF_REPLACEMENT " $1"
/proc/text2ratvar(text) //Takes english and applies ratvarian styling rules (and rot13) to it
/proc/text2ratvar(text) //Takes english and applies ratvarian styling rules (and rot13) to it.
var/ratvarian = add_ratvarian_regex(text) //run the regexes twice, so that you catch people translating it beforehand
ratvarian = rot13(ratvarian)
return add_ratvarian_regex(ratvarian)
/proc/add_ratvarian_regex(text)
var/ratvarian = replacetext(text, RATVAR_OF_MATCH, RATVAR_OF_REPLACEMENT)
ratvarian = replacetext(ratvarian, RATVAR_GUA_MATCH, RATVAR_GUA_REPLACEMENT)
ratvarian = replacetext(ratvarian, RATVAR_TH_MATCH, RATVAR_TH_REPLACEMENT)
@@ -76,19 +81,21 @@ List of nuances:
ratvarian = replacetext(ratvarian, RATVAR_PRE_AND_MATCH, RATVAR_PRE_AND_REPLACEMENT)
ratvarian = replacetext(ratvarian, RATVAR_POST_AND_MATCH, RATVAR_POST_AND_REPLACEMENT)
ratvarian = replacetext(ratvarian, RATVAR_TO_MATCH, RATVAR_TO_REPLACEMENT)
ratvarian = replacetext(ratvarian, RATVAR_MY_MATCH, RATVAR_MY_REPLACEMENT)
return rot13(ratvarian)
return replacetext(ratvarian, RATVAR_MY_MATCH, RATVAR_MY_REPLACEMENT)
/proc/ratvar2text(ratvarian) //Reverts ravarian styling and rot13 in text.
var/text = replacetext(rot13(ratvarian), "`", "")
text = replacetext(text, REVERSE_RATVAR_HYPHEN_GUA_MATCH, REVERSE_RATVAR_HYPHEN_GUA_REPLACEMENT)
var/text = remove_ratvarian_regex(ratvarian) //run the regexes twice, so that you catch people translating it beforehand
text = replacetext(rot13(text), "`", "")
return remove_ratvarian_regex(text)
/proc/remove_ratvarian_regex(ratvarian)
var/text = replacetext(ratvarian, REVERSE_RATVAR_HYPHEN_GUA_MATCH, REVERSE_RATVAR_HYPHEN_GUA_REPLACEMENT)
text = replacetext(text, REVERSE_RATVAR_HYPHEN_PRE_AND_MATCH, REVERSE_RATVAR_HYPHEN_PRE_AND_REPLACEMENT)
text = replacetext(text, REVERSE_RATVAR_HYPHEN_POST_AND_MATCH, REVERSE_RATVAR_HYPHEN_POST_AND_REPLACEMENT)
text = replacetext(text, REVERSE_RATVAR_HYPHEN_TO_MY_MATCH, REVERSE_RATVAR_HYPHEN_TO_MY_REPLACEMENT)
text = replacetext(text, REVERSE_RATVAR_HYPHEN_TE_MATCH, REVERSE_RATVAR_HYPHEN_TE_REPLACEMENT)
text = replacetext(text, REVERSE_RATVAR_HYPHEN_ET_MATCH, REVERSE_RATVAR_HYPHEN_ET_REPLACEMENT)
text = replacetext(text, REVERSE_RATVAR_HYPHEN_OF_MATCH, REVERSE_RATVAR_HYPHEN_OF_REPLACEMENT)
return text
return replacetext(text, REVERSE_RATVAR_HYPHEN_OF_MATCH, REVERSE_RATVAR_HYPHEN_OF_REPLACEMENT)
//Causes the mob or AM in question to speak a message; it assumes that the message is already translated to ratvar speech using text2ratvar()
/proc/clockwork_say(atom/movable/AM, message, whisper=FALSE)
@@ -148,7 +148,7 @@
var/obj/structure/destructible/clockwork/geis_binding/binding
/datum/clockwork_scripture/geis/Destroy()
if(binding && !qdeleted(binding))
if(binding && !QDELETED(binding))
qdel(binding)
return ..()
@@ -213,13 +213,12 @@
addtimer(CALLBACK(invoker, /atom/proc/update_atom_colour), flee_time+grace_period)
if(chant_number != chant_amount) //if this is the last chant, we don't have a movement period because the chant is over
var/endtime = world.time + flee_time
var/starttime = world.time
progbar = new(invoker, flee_time, invoker)
progbar.bar.color = list("#AF0AAF", "#AF0AAF", "#AF0AAF", rgb(0,0,0))
animate(progbar.bar, color = initial(progbar.bar.color), time = flee_time+grace_period)
while(world.time < endtime && can_recite())
sleep(1)
progbar.update(world.time - starttime)
progbar.update(endtime - world.time)
qdel(progbar)
if(can_recite())
sleep(grace_period)
@@ -29,7 +29,8 @@
return ..()
/obj/structure/destructible/clockwork/ratvar_act()
obj_integrity = max_integrity
if(ratvar_awakens || clockwork_gateway_activated)
obj_integrity = max_integrity
/obj/structure/destructible/clockwork/narsie_act()
if(take_damage(rand(25, 50), BRUTE) && src) //if we still exist
@@ -84,7 +84,7 @@
for(var/M in atoms_to_test)
var/atom/movable/A = M
if(!A || qdeleted(A) || A == target_apc)
if(!A || QDELETED(A) || A == target_apc)
continue
power_drained += Floor(A.power_drain(TRUE) * efficiency, MIN_CLOCKCULT_POWER)
@@ -14,9 +14,8 @@
debris = list(/obj/item/clockwork/alloy_shards/large = 1, \
/obj/item/clockwork/alloy_shards/small = 3, \
/obj/item/clockwork/component/geis_capacitor/antennae = 1)
var/mania_cost = 200
var/convert_attempt_cost = 500
var/convert_cost = 500
var/mania_cost = 150
var/convert_cost = 150
var/static/list/mania_messages = list("Go nuts.", "Take a crack at crazy.", "Make a bid for insanity.", "Get kooky.", "Move towards mania.", "Become bewildered.", "Wax wild.", \
"Go round the bend.", "Land in lunacy.", "Try dementia.", "Strive to get a screw loose.")
var/static/list/compel_messages = list("Come closer.", "Approach the transmitter.", "Touch the antennae.", "I always have to deal with idiots. Move towards the mania motor.", \
@@ -28,11 +27,10 @@
"Amazing. You somehow managed to wedge yourself somewhere you can't actually reach the motor from.", "Such a show of idiocy is unparalleled. Perhaps I should put you on display?", \
"Did you do this on purpose? I can't imagine you doing so accidentally. Oh, wait, I can.", "How is it that such smart creatures can still do something AS STUPID AS THIS!")
/obj/structure/destructible/clockwork/powered/mania_motor/examine(mob/user)
..()
if(is_servant_of_ratvar(user) || isobserver(user))
user << "<span class='sevtug_small'>It requires <b>[mania_cost]W</b> to run, and <b>[convert_attempt_cost + convert_cost]W</b> to convert humans adjecent to it.</span>"
user << "<span class='sevtug_small'>It requires <b>[mania_cost]W</b> to run, and at least <b>[convert_cost]W</b> to attempt to convert humans adjacent to it.</span>"
/obj/structure/destructible/clockwork/powered/mania_motor/forced_disable(bad_effects)
if(active)
@@ -58,94 +56,88 @@
SetLuminosity(0)
/obj/structure/destructible/clockwork/powered/mania_motor/process()
if(try_use_power(mania_cost))
var/turf/T = get_turf(src)
var/hum = get_sfx('sound/effects/screech.ogg') //like playsound, same sound for everyone affected
var/efficiency = get_efficiency_mod()
for(var/mob/living/carbon/human/H in view(1, src))
if(is_servant_of_ratvar(H) || H.null_rod_check())
continue
if(H.Adjacent(src) && try_use_power(convert_attempt_cost))
if(is_eligible_servant(H) && try_use_power(convert_cost))
H << "<span class='sevtug'>\"[text2ratvar("You are mine and his, now.")]\"</span>"
H.playsound_local(T, hum, 80, 1)
add_servant_of_ratvar(H)
H.Paralyse(5)
else if(!H.stat)
if(H.getBrainLoss() >= 100)
H.Paralyse(5)
H << "<span class='sevtug'>\"[text2ratvar(pick(convert_messages))]\"</span>"
else
H.adjustBrainLoss(100 * efficiency)
H.visible_message("<span class='warning'>[H] reaches out and touches [src].</span>", "<span class='sevtug'>You touch [src] involuntarily.</span>")
else
visible_message("<span class='warning'>[src]'s antennae fizzle quietly.</span>")
playsound(src, 'sound/effects/light_flicker.ogg', 50, 1)
for(var/mob/living/carbon/human/H in range(10, src))
if(is_servant_of_ratvar(H))
if(H.getBrainLoss() || H.hallucination || H.druggy || H.dizziness || H.confused)
H.adjustBrainLoss(-H.getBrainLoss()) //heals servants of braindamage, hallucination, druggy, dizziness, and confusion
H.hallucination = 0
H.adjust_drugginess(-H.druggy)
H.dizziness = 0
H.confused = 0
else if(!H.null_rod_check() && H.stat == CONSCIOUS)
var/distance = get_dist(T, get_turf(H))
var/falloff_distance = min((110) - distance * 10, 80)
var/sound_distance = falloff_distance * 0.5
var/targetbrainloss = H.getBrainLoss()
if(distance >= 4 && prob(falloff_distance * 0.5))
H << "<span class='sevtug_small'>\"[text2ratvar(pick(mania_messages))]\"</span>"
H.playsound_local(T, hum, sound_distance, 1)
switch(distance)
if(2 to 3)
if(prob(falloff_distance * 0.5))
if(prob(falloff_distance))
H << "<span class='sevtug_small'>\"[text2ratvar(pick(mania_messages))]\"</span>"
else
H << "<span class='sevtug'>\"[text2ratvar(pick(compel_messages))]\"</span>"
if(targetbrainloss <= 50)
H.adjustBrainLoss((50 * efficiency) - targetbrainloss) //got too close had brain eaten
H.adjust_drugginess(Clamp(7 * efficiency, 0, 100 - H.druggy))
H.hallucination = min(H.hallucination + (7 * efficiency), 100)
H.dizziness = min(H.dizziness + (3 * efficiency), 45)
H.confused = min(H.confused + (3 * efficiency), 45)
if(4 to 5)
if(targetbrainloss <= 50)
H.adjustBrainLoss(1 * efficiency)
H.adjust_drugginess(Clamp(5 * efficiency, 0, 80 - H.druggy))
H.hallucination = min(H.hallucination + (5 * efficiency), 80)
H.dizziness = min(H.dizziness + (2 * efficiency), 30)
H.confused = min(H.confused + (2 * efficiency), 30)
if(6 to 7)
if(targetbrainloss <= 30)
H.adjustBrainLoss(1 * efficiency)
H.adjust_drugginess(Clamp(2 * efficiency, 0, 60 - H.druggy))
H.hallucination = min(H.hallucination + (2 * efficiency), 60)
H.dizziness = min(H.dizziness + (2 * efficiency), 15)
H.confused = min(H.confused + (2 * efficiency), 15)
if(8 to 9)
if(targetbrainloss <= 10)
H.adjustBrainLoss(1 * efficiency)
H.adjust_drugginess(Clamp(2 * efficiency, 0, 40 - H.druggy))
H.hallucination = min(H.hallucination + (2 * efficiency), 40)
if(10 to INFINITY)
H.adjust_drugginess(Clamp(2 * efficiency, 0, 20 - H.druggy))
H.hallucination = min(H.hallucination + (2 * efficiency), 20)
else //if it's a distance of 1 and they can't see it/aren't adjacent or they're on top of it(how'd they get on top of it and still trigger this???)
if(prob(falloff_distance * 0.5))
if(prob(falloff_distance))
H << "<span class='sevtug'>\"[text2ratvar(pick(compel_messages))]\"</span>"
else if(prob(falloff_distance * 0.5))
H << "<span class='sevtug'>\"[text2ratvar(pick(close_messages))]\"</span>"
else
H << "<span class='sevtug_small'>\"[text2ratvar(pick(mania_messages))]\"</span>"
if(targetbrainloss <= 99)
H.adjustBrainLoss((99 * efficiency) - targetbrainloss)
H.adjust_drugginess(Clamp(10 * efficiency, 0, 150 - H.druggy))
H.hallucination = min(H.hallucination + (10 * efficiency), 150)
H.dizziness = min(H.dizziness + (5 * efficiency), 60)
H.confused = min(H.confused + (5 * efficiency), 60)
else
if(!try_use_power(mania_cost))
forced_disable(FALSE)
return
var/turf/T = get_turf(src)
var/hum = get_sfx('sound/effects/screech.ogg') //like playsound, same sound for everyone affected
var/efficiency = get_efficiency_mod()
for(var/mob/living/carbon/human/H in view(1, src))
if(is_servant_of_ratvar(H) || H.null_rod_check() || H.stat == DEAD)
continue
if(!H.Adjacent(src))
H << "<span class='sevtug'>\"[text2ratvar(pick(close_messages))]\"</span>"
continue
if(try_use_power(convert_cost))
H.playsound_local(T, hum, 80, 1)
if(!H.stat)
if(H.getBrainLoss() < 100)
H.adjustBrainLoss(30 * efficiency)
H.visible_message("<span class='warning'>[H] reaches out and touches [src].</span>", "<span class='sevtug'>You touch [src] involuntarily.</span>")
else
H.Paralyse(3)
else if(is_eligible_servant(H))
H << "<span class='sevtug'>\"[text2ratvar("You are mine and his, now.")]\"</span>"
add_servant_of_ratvar(H)
H.Paralyse(5)
else
H << "<span class='sevtug'>\"[text2ratvar(pick(convert_messages))]\"</span>"
else
visible_message("<span class='warning'>[src]'s antennae fizzle quietly.</span>")
playsound(src, 'sound/effects/light_flicker.ogg', 50, 1)
for(var/mob/living/carbon/human/H in range(10, src))
if(is_servant_of_ratvar(H)) //heals servants of braindamage, hallucination, druggy, dizziness, and confusion
var/brainloss = H.getBrainLoss()
if(brainloss)
H.adjustBrainLoss(-brainloss)
if(H.hallucination)
H.hallucination = 0
if(H.druggy)
H.adjust_drugginess(-H.druggy)
if(H.dizziness)
H.dizziness = 0
if(H.confused)
H.confused = 0
else if(!H.null_rod_check() && H.stat == CONSCIOUS)
var/distance = 0 + get_dist(T, get_turf(H))
var/falloff_distance = min((110) - distance * 10, 80)
var/sound_distance = falloff_distance * 0.5
var/targetbrainloss = H.getBrainLoss()
if(distance >= 4 && prob(falloff_distance * 0.5))
H << "<span class='sevtug_small'>\"[text2ratvar(pick(mania_messages))]\"</span>"
H.playsound_local(T, hum, sound_distance, 1)
switch(distance)
if(0 to 3)
if(prob(falloff_distance * 0.5))
if(prob(falloff_distance))
H << "<span class='sevtug_small'>\"[text2ratvar(pick(mania_messages))]\"</span>"
else
H << "<span class='sevtug'>\"[text2ratvar(pick(compel_messages))]\"</span>"
if(targetbrainloss <= 50)
H.adjustBrainLoss((50 * efficiency) - targetbrainloss) //got too close had brain eaten
H.adjust_drugginess(Clamp(7 * efficiency, 0, 100 - H.druggy))
H.hallucination = min(H.hallucination + (7 * efficiency), 100)
H.dizziness = min(H.dizziness + (3 * efficiency), 45)
H.confused = min(H.confused + (3 * efficiency), 45)
if(4 to 5)
if(targetbrainloss <= 50)
H.adjustBrainLoss(1 * efficiency)
H.adjust_drugginess(Clamp(5 * efficiency, 0, 80 - H.druggy))
H.hallucination = min(H.hallucination + (5 * efficiency), 80)
H.dizziness = min(H.dizziness + (2 * efficiency), 30)
H.confused = min(H.confused + (2 * efficiency), 30)
if(6 to 7)
if(targetbrainloss <= 30)
H.adjustBrainLoss(1 * efficiency)
H.adjust_drugginess(Clamp(2 * efficiency, 0, 60 - H.druggy))
H.hallucination = min(H.hallucination + (2 * efficiency), 60)
H.dizziness = min(H.dizziness + (2 * efficiency), 15)
H.confused = min(H.confused + (2 * efficiency), 15)
if(8 to 9)
if(targetbrainloss <= 10)
H.adjustBrainLoss(1 * efficiency)
H.adjust_drugginess(Clamp(2 * efficiency, 0, 40 - H.druggy))
H.hallucination = min(H.hallucination + (2 * efficiency), 40)
if(10 to INFINITY)
H.adjust_drugginess(Clamp(2 * efficiency, 0, 20 - H.druggy))
H.hallucination = min(H.hallucination + (2 * efficiency), 20)
+1 -1
View File
@@ -379,7 +379,7 @@
if(M.current && M.current.stat != DEAD)
cultists |= M.current
var/mob/living/cultist_to_receive = input(user, "Who do you wish to call to [src]?", "Followers of the Geometer") as null|anything in (cultists - user)
if(!Adjacent(user) || !src || qdeleted(src) || user.incapacitated())
if(!Adjacent(user) || !src || QDELETED(src) || user.incapacitated())
return
if(!cultist_to_receive)
user << "<span class='cultitalic'>You require a destination!</span>"
+3 -3
View File
@@ -82,7 +82,7 @@
pickedtype = /obj/item/clothing/glasses/night/cultblind
if("Flask of Unholy Water")
pickedtype = /obj/item/weapon/reagent_containers/food/drinks/bottle/unholywater
if(src && !qdeleted(src) && anchored && pickedtype && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time)
if(src && !QDELETED(src) && anchored && pickedtype && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time)
cooldowntime = world.time + 2400
var/obj/item/N = new pickedtype(get_turf(src))
user << "<span class='cultitalic'>You kneel before the altar and your faith is rewarded with an [N]!</span>"
@@ -114,7 +114,7 @@
pickedtype = /obj/item/clothing/suit/hooded/cultrobes/berserker
if("Nar-Sien Hardsuit")
pickedtype = /obj/item/clothing/suit/space/hardsuit/cult
if(src && !qdeleted(src) && anchored && pickedtype && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time)
if(src && !QDELETED(src) && anchored && pickedtype && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time)
cooldowntime = world.time + 2400
var/obj/item/N = new pickedtype(get_turf(src))
user << "<span class='cultitalic'>You work the forge as dark knowledge guides your hands, creating [N]!</span>"
@@ -218,7 +218,7 @@ var/list/blacklisted_pylon_turfs = typecacheof(list(
if("Veil Walker Set")
pickedtype += /obj/item/device/cult_shift
pickedtype += /obj/item/device/flashlight/flare/culttorch
if(src && !qdeleted(src) && anchored && pickedtype.len && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time)
if(src && !QDELETED(src) && anchored && pickedtype.len && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time)
cooldowntime = world.time + 2400
for(var/N in pickedtype)
var/obj/item/D = new N(get_turf(src))
+4 -4
View File
@@ -180,7 +180,7 @@ This file contains the arcane tome files.
if(!possible_runes.len)
return
entered_rune_name = input(user, "Choose a rite to scribe.", "Sigils of Power") as null|anything in possible_runes
if(!src || qdeleted(src) || !Adjacent(user) || user.incapacitated() || !check_rune_turf(Turf, user))
if(!src || QDELETED(src) || !Adjacent(user) || user.incapacitated() || !check_rune_turf(Turf, user))
return
for(var/T in typesof(/obj/effect/rune))
var/obj/effect/rune/R = T
@@ -196,7 +196,7 @@ This file contains the arcane tome files.
return
Turf = get_turf(user) //we may have moved. adjust as needed...
A = get_area(src)
if(!src || qdeleted(src) || !Adjacent(user) || user.incapacitated() || !check_rune_turf(Turf, user))
if(!src || QDELETED(src) || !Adjacent(user) || user.incapacitated() || !check_rune_turf(Turf, user))
return
if(ispath(rune_to_scribe, /obj/effect/rune/narsie))
if(ticker.mode.name == "cult")
@@ -235,7 +235,7 @@ This file contains the arcane tome files.
if(!do_after(user, initial(rune_to_scribe.scribe_delay), target = get_turf(user)))
for(var/V in shields)
var/obj/structure/emergency_shield/sanguine/S = V
if(S && !qdeleted(S))
if(S && !QDELETED(S))
qdel(S)
return
if(!check_rune_turf(Turf, user))
@@ -244,7 +244,7 @@ This file contains the arcane tome files.
"<span class='cult'>You finish drawing the arcane markings of the Geometer.</span>")
for(var/V in shields)
var/obj/structure/emergency_shield/S = V
if(S && !qdeleted(S))
if(S && !QDELETED(S))
qdel(S)
var/obj/effect/rune/R = new rune_to_scribe(Turf, chosen_keyword)
user << "<span class='cult'>The [lowertext(R.cultist_name)] rune [R.cultist_desc]</span>"
+4 -4
View File
@@ -220,7 +220,7 @@ structure_check() searches for nearby cultist structures required for the invoca
possible_talismans[talisman_cult_name] = J //This is to allow the menu to let cultists select talismans by name
entered_talisman_name = input(user, "Choose a talisman to imbue.", "Talisman Choices") as null|anything in possible_talismans
talisman_type = possible_talismans[entered_talisman_name]
if(!Adjacent(user) || !src || qdeleted(src) || user.incapacitated() || rune_in_use || !talisman_type)
if(!Adjacent(user) || !src || QDELETED(src) || user.incapacitated() || rune_in_use || !talisman_type)
return
papers_on_rune = checkpapers()
if(!papers_on_rune.len)
@@ -290,7 +290,7 @@ var/list/teleport_runes = list()
var/input_rune_key = input(user, "Choose a rune to teleport to.", "Rune to Teleport to") as null|anything in potential_runes //we know what key they picked
var/obj/effect/rune/teleport/actual_selected_rune = potential_runes[input_rune_key] //what rune does that key correspond to?
if(!Adjacent(user) || !src || qdeleted(src) || user.incapacitated() || !actual_selected_rune)
if(!Adjacent(user) || !src || QDELETED(src) || user.incapacitated() || !actual_selected_rune)
fail_invoke()
return
@@ -557,7 +557,7 @@ var/list/teleport_runes = list()
mob_to_revive = input(user, "Choose a cultist to revive.", "Cultist to Revive") as null|anything in potential_revive_mobs
else
mob_to_revive = potential_revive_mobs[1]
if(!src || qdeleted(src) || rune_in_use || !validness_checks(mob_to_revive, user))
if(!src || QDELETED(src) || rune_in_use || !validness_checks(mob_to_revive, user))
return
rune_in_use = 1
if(user.name == "Herbert West")
@@ -809,7 +809,7 @@ var/list/wall_runes = list()
if(!(M.current in invokers) && M.current && M.current.stat != DEAD)
cultists |= M.current
var/mob/living/cultist_to_summon = input(user, "Who do you wish to call to [src]?", "Followers of the Geometer") as null|anything in cultists
if(!Adjacent(user) || !src || qdeleted(src) || user.incapacitated())
if(!Adjacent(user) || !src || QDELETED(src) || user.incapacitated())
return
if(!cultist_to_summon)
user << "<span class='cultitalic'>You require a summoning target!</span>"
+1 -1
View File
@@ -139,7 +139,7 @@
var/input_rune_key = input(user, "Choose a rune to teleport to.", "Rune to Teleport to") as null|anything in potential_runes //we know what key they picked
var/obj/effect/rune/teleport/actual_selected_rune = potential_runes[input_rune_key] //what rune does that key correspond to?
if(!src || qdeleted(src) || !user || !user.is_holding(src) || user.incapacitated() || !actual_selected_rune)
if(!src || QDELETED(src) || !user || !user.is_holding(src) || user.incapacitated() || !actual_selected_rune)
return ..(user, 0)
var/turf/target = get_turf(actual_selected_rune)
if(is_blocked_turf(target, TRUE))
@@ -36,6 +36,7 @@
/mob/living/carbon/true_devil/create_internal_organs()
internal_organs += new /obj/item/organ/brain
internal_organs += new /obj/item/organ/tongue
internal_organs += new /obj/item/organ/eyes
..()
@@ -329,7 +329,7 @@
M.audible_message("<span class='userdanger'>You hear a loud electrical buzzing sound!</span>")
src << "<span class='warning'>Reprogramming machine behaviour...</span>"
spawn(50)
if(M && !qdeleted(M))
if(M && !QDELETED(M))
new /mob/living/simple_animal/hostile/mimic/copy/machine(get_turf(M), M, src, 1)
else src << "<span class='notice'>Out of uses.</span>"
else src << "<span class='notice'>That's not a machine.</span>"
@@ -70,7 +70,7 @@
var/icon/eyes
if(EYECOLOR in H.dna.species.species_traits)
eyes = icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "[H.dna.species.eyes]")
eyes = icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes")
eyes.Blend("#[H.eye_color]", ICON_MULTIPLY)
var/datum/sprite_accessory/S
@@ -147,7 +147,7 @@ var/total_borer_hosts_needed = 10
if(stat != CONSCIOUS)
return
var/be_borer = alert("Become a cortical borer? (Warning, You can no longer be cloned!)",,"Yes","No")
if(be_borer == "No" || !src || qdeleted(src))
if(be_borer == "No" || !src || QDELETED(src))
return
if(key)
return
@@ -178,7 +178,7 @@ var/total_borer_hosts_needed = 10
if(!input)
return
if(src && !qdeleted(src) && !qdeleted(victim))
if(src && !QDELETED(src) && !QDELETED(victim))
var/say_string = (docile) ? "slurs" :"states"
if(victim)
victim << "<span class='changeling'><i>[truename] [say_string]:</i> [input]</span>"
@@ -512,7 +512,7 @@ var/total_borer_hosts_needed = 10
addtimer(CALLBACK(src, .proc/release_host), 100)
/mob/living/simple_animal/borer/proc/release_host()
if(!victim || !src || qdeleted(victim) || qdeleted(src))
if(!victim || !src || QDELETED(victim) || QDELETED(src))
return
if(!leaving)
return
@@ -627,7 +627,7 @@ var/total_borer_hosts_needed = 10
src << "<span class='danger'>You begin delicately adjusting your connection to the host brain...</span>"
if(qdeleted(src) || qdeleted(victim))
if(QDELETED(src) || QDELETED(victim))
return
bonding = TRUE
@@ -798,7 +798,7 @@ var/total_borer_hosts_needed = 10
if(!candidate || !candidate.mob)
return
if(!qdeleted(candidate) || !qdeleted(candidate.mob))
if(!QDELETED(candidate) || !QDELETED(candidate.mob))
var/datum/mind/M = create_borer_mind(candidate.ckey)
M.transfer_to(src)
@@ -2,8 +2,8 @@
name = "Borer"
typepath = /datum/round_event/borer
weight = 15
max_occurrences = 1
min_players = 10
max_occurrences = 0
min_players = 15
earliest_start = 12000
/datum/round_event/borer
@@ -24,7 +24,7 @@
var/list/vents = list()
for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in machines)
if(qdeleted(temp_vent))
if(QDELETED(temp_vent))
continue
if(temp_vent.loc.z == ZLEVEL_STATION && !temp_vent.welded)
var/datum/pipeline/temp_vent_parent = temp_vent.PARENT1
@@ -40,7 +40,7 @@
if(crit_fail)
user << "Swarmer has been depowered."
return
if(qdeleted(src))
if(QDELETED(src))
user << "Swarmer has been occupied by someone else."
return
var/mob/living/simple_animal/hostile/swarmer/S = new /mob/living/simple_animal/hostile/swarmer(get_turf(loc))
@@ -316,10 +316,6 @@
S << "<span class='warning'>This communications relay should be preserved, it will be a useful resource to our masters in the future. Aborting.</span>"
return FALSE
/obj/machinery/blackbox_recorder/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
S << "<span class='warning'>This machine has recorded large amounts of data on this structure and its inhabitants, it will be a useful resource to our masters in the future. Aborting. </span>"
return FALSE
/obj/machinery/power/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
S << "<span class='warning'>Disrupting the power grid would bring no benefit to us. Aborting.</span>"
return FALSE
@@ -366,7 +366,7 @@
user << "<span class='revenwarning'>It is shifting and distorted. It would be wise to destroy this.</span>"
/obj/item/weapon/ectoplasm/revenant/proc/reform()
if(!src || qdeleted(src) || inert)
if(!src || QDELETED(src) || inert)
return
var/key_of_revenant
message_admins("Revenant ectoplasm was left undestroyed for 1 minute and is reforming into a new revenant.")
+1 -1
View File
@@ -571,7 +571,7 @@ var/global/list/multiverse = list()
var/mob/living/carbon/last_user
/obj/item/warpwhistle/proc/interrupted(mob/living/carbon/user)
if(!user || qdeleted(src))
if(!user || QDELETED(src))
on_cooldown = FALSE
return TRUE
return FALSE
+1 -1
View File
@@ -29,7 +29,7 @@
return 1
/datum/spellbook_entry/proc/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) //return 1 on success
if(!S || qdeleted(S))
if(!S || QDELETED(S))
S = new spell_type()
//Check if we got the spell already
for(var/obj/effect/proc_holder/spell/aspell in user.mind.spell_list)
+1 -1
View File
@@ -159,7 +159,7 @@
flick("autolathe_r",src)//plays glass insertion animation
user << "<span class='notice'>You insert [inserted] sheet[inserted>1 ? "s" : ""] to the autolathe.</span>"
use_power(inserted*100)
if(!qdeleted(O))
if(!QDELETED(O))
user.put_in_active_hand(O)
else
user << "<span class='notice'>You insert a material total of [inserted] to the autolathe.</span>"
+1 -1
View File
@@ -382,7 +382,7 @@
/obj/machinery/clonepod/ex_act(severity, target)
..()
if(!qdeleted(src))
if(!QDELETED(src))
locked = FALSE
go_out()
+10 -11
View File
@@ -71,17 +71,16 @@
return
/obj/machinery/computer/aifixer/proc/Fix()
. = use_power(1000)
if(.)
occupier.adjustOxyLoss(-1, 0)
occupier.adjustFireLoss(-1, 0)
occupier.adjustToxLoss(-1, 0)
occupier.adjustBruteLoss(-1, 0)
occupier.updatehealth()
occupier.updatehealth()
if(occupier.health >= 0 && occupier.stat == DEAD)
occupier.revive()
. = occupier.health < 100
use_power(1000)
occupier.adjustOxyLoss(-1, 0)
occupier.adjustFireLoss(-1, 0)
occupier.adjustToxLoss(-1, 0)
occupier.adjustBruteLoss(-1, 0)
occupier.updatehealth()
occupier.updatehealth()
if(occupier.health >= 0 && occupier.stat == DEAD)
occupier.revive()
return occupier.health < 100
/obj/machinery/computer/aifixer/process()
if(..())
@@ -1,7 +1,6 @@
/obj/structure/frame/computer
name = "computer frame"
icon_state = "0"
anchored = 0
state = 0
/obj/structure/frame/computer/attackby(obj/item/P, mob/user, params)
@@ -3,7 +3,6 @@
icon = 'icons/obj/stock_parts.dmi'
icon_state = "box_0"
density = 1
anchored = 1
obj_integrity = 250
max_integrity = 250
var/obj/item/weapon/circuitboard/circuit = null
+2 -2
View File
@@ -274,7 +274,7 @@ var/list/airlock_overlays = list()
var/cont = 1
while (cont)
sleep(10)
if(qdeleted(src))
if(QDELETED(src))
return
cont = 0
if(secondsMainPowerLost>0)
@@ -1404,7 +1404,7 @@ var/list/airlock_overlays = list()
operating = 1
update_icon(AIRLOCK_EMAG, 1)
sleep(6)
if(qdeleted(src))
if(QDELETED(src))
return
operating = 0
if(!open())
+1 -1
View File
@@ -305,7 +305,7 @@
M.take_damage(DOOR_CRUSH_DAMAGE)
/obj/machinery/door/proc/autoclose()
if(!qdeleted(src) && !density && !operating && !locked && !welded && autoclose)
if(!QDELETED(src) && !density && !operating && !locked && !welded && autoclose)
close()
/obj/machinery/door/proc/requiresID()
+2
View File
@@ -3,6 +3,8 @@
desc = "A strong door."
icon = 'icons/obj/doors/windoor.dmi'
icon_state = "left"
layer = ABOVE_WINDOW_LAYER
closingLayer = ABOVE_WINDOW_LAYER
resistance_flags = ACID_PROOF
var/base_state = "left"
obj_integrity = 150 //If you change this, consider changing ../door/window/brigdoor/ health at the bottom of this .dm file
@@ -163,7 +163,7 @@
A.unbolt()
spawn()
if(A && A.close())
if(stat & NOPOWER || lostPower || !A || qdeleted(A))
if(stat & NOPOWER || lostPower || !A || QDELETED(A))
goIdle(1)
return
A.bolt()
@@ -209,7 +209,7 @@
A.unbolt()
spawn()
if(A && A.open())
if(stat | (NOPOWER) && !lostPower && A && !qdeleted(A))
if(stat | (NOPOWER) && !lostPower && A && !QDELETED(A))
A.bolt()
goIdle(1)
+3 -3
View File
@@ -74,7 +74,7 @@
user << "<span class='warning'>The panel must be closed before operating this machine!</span>"
return
if(!linked_pad || qdeleted(linked_pad))
if(!linked_pad || QDELETED(linked_pad))
user << "<span class='warning'>There is no linked pad!</span>"
return
@@ -112,14 +112,14 @@
teleporting = 1
spawn(teleport_speed)
if(!src || qdeleted(src))
if(!src || QDELETED(src))
teleporting = 0
return
if(stat & NOPOWER)
user << "<span class='warning'>[src] is unpowered!</span>"
teleporting = 0
return
if(!linked_pad || qdeleted(linked_pad) || linked_pad.stat & NOPOWER)
if(!linked_pad || QDELETED(linked_pad) || linked_pad.stat & NOPOWER)
user << "<span class='warning'>Linked pad is not responding to ping. Teleport aborted.</span>"
teleporting = 0
return
+3 -3
View File
@@ -111,11 +111,11 @@
/obj/machinery/computer/mech_bay_power_console/ui_data(mob/user)
var/list/data = list()
if(recharge_port && !qdeleted(recharge_port))
if(recharge_port && !QDELETED(recharge_port))
data["recharge_port"] = list("mech" = null)
if(recharge_port.recharging_mech && !qdeleted(recharge_port.recharging_mech))
if(recharge_port.recharging_mech && !QDELETED(recharge_port.recharging_mech))
data["recharge_port"]["mech"] = list("health" = recharge_port.recharging_mech.obj_integrity, "max_integrity" = recharge_port.recharging_mech.max_integrity, "cell" = null)
if(recharge_port.recharging_mech.cell && !qdeleted(recharge_port.recharging_mech.cell))
if(recharge_port.recharging_mech.cell && !QDELETED(recharge_port.recharging_mech.cell))
data["recharge_port"]["mech"]["cell"] = list(
"critfail" = recharge_port.recharging_mech.cell.crit_fail,
"charge" = recharge_port.recharging_mech.cell.charge,
+2 -1
View File
@@ -452,7 +452,8 @@
if(inserted)
user << "<span class='notice'>You insert [inserted] sheet\s into [src].</span>"
if(W && W.materials.len)
user.put_in_active_hand(W)
if(!QDELETED(W))
user.put_in_active_hand(W)
var/mat_overlay = "fab-load-[material2name(W.materials[1])]"
add_overlay(mat_overlay)
sleep(10)
+1 -1
View File
@@ -971,7 +971,7 @@
setDir(dir_in)
if(L && L.client)
L.client.view = world.view
L.client.change_view(world.view)
zoom_mode = 0
/////////////////////////
+2 -2
View File
@@ -239,10 +239,10 @@
chassis.log_message("Toggled zoom mode.")
chassis.occupant_message("<font color='[chassis.zoom_mode?"blue":"red"]'>Zoom mode [chassis.zoom_mode?"en":"dis"]abled.</font>")
if(chassis.zoom_mode)
owner.client.view = 12
owner.client.change_view(12)
owner << sound('sound/mecha/imag_enh.ogg',volume=50)
else
owner.client.view = world.view//world.view - default mob view size
owner.client.change_view(world.view) //world.view - default mob view size
UpdateButtonIcon()
/datum/action/innate/mecha/mech_switch_damtype
+1 -1
View File
@@ -264,7 +264,7 @@ list(name = "- Carbon Dioxide", desc = " This informational poster teaches the v
playsound(D.loc, 'sound/items/poster_being_created.ogg', 100, 1)
if(do_after(user,D.placespeed,target=src))
if(!D || qdeleted(D))
if(!D || QDELETED(D))
return
if(iswallturf(src) && user && user.loc == temp_loc) //Let's check if everything is still there
+1 -1
View File
@@ -42,7 +42,7 @@
return
/obj/effect/countdown/process()
if(!attached_to || qdeleted(attached_to))
if(!attached_to || QDELETED(attached_to))
qdel(src)
forceMove(get_turf(attached_to))
var/new_val = get_value()
+4
View File
@@ -42,3 +42,7 @@
/obj/effect/experience_pressure_difference()
return
/obj/effect/singularity_act()
qdel(src)
return 0
+6 -5
View File
@@ -258,10 +258,11 @@
/obj/effect/overlay/temp/ratvar/door
icon_state = "ratvardoorglow"
layer = CLOSED_FIREDOOR_LAYER //above closed doors
layer = CLOSED_DOOR_LAYER //above closed doors
/obj/effect/overlay/temp/ratvar/door/window
icon_state = "ratvarwindoorglow"
layer = ABOVE_WINDOW_LAYER
/obj/effect/overlay/temp/ratvar/beam
icon_state = "ratvarbeamglow"
@@ -295,7 +296,10 @@
/obj/effect/overlay/temp/ratvar/window
icon_state = "ratvarwindowglow"
layer = ABOVE_WINDOW_LAYER
layer = ABOVE_OBJ_LAYER
/obj/effect/overlay/temp/ratvar/window/single
icon_state = "ratvarwindowglow_s"
/obj/effect/overlay/temp/ratvar/gear
icon_state = "ratvargearglow"
@@ -308,9 +312,6 @@
/obj/effect/overlay/temp/ratvar/grille/broken
icon_state = "ratvarbrokengrilleglow"
/obj/effect/overlay/temp/ratvar/window/single
icon_state = "ratvarwindowglow_s"
/obj/effect/overlay/temp/ratvar/volt_hit
name = "volt blast"
layer = ABOVE_MOB_LAYER
+3 -3
View File
@@ -503,7 +503,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s
else ..()
/obj/item/throw_impact(atom/A)
if(A && !qdeleted(A))
if(A && !QDELETED(A))
var/itempush = 1
if(w_class < 4)
itempush = 0 //too light to push anything
@@ -582,7 +582,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s
return 0
/obj/item/burn()
if(!qdeleted(src))
if(!QDELETED(src))
var/turf/T = get_turf(src)
var/ash_type = /obj/effect/decal/cleanable/ash
if(w_class == WEIGHT_CLASS_HUGE || w_class == WEIGHT_CLASS_GIGANTIC)
@@ -592,7 +592,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s
..()
/obj/item/acid_melt()
if(!qdeleted(src))
if(!QDELETED(src))
var/turf/T = get_turf(src)
var/obj/effect/decal/cleanable/molten_object/MO = new(T)
MO.pixel_x = rand(-16,16)
+1 -1
View File
@@ -124,7 +124,7 @@
/obj/item/toy/crayon/proc/check_empty(mob/user)
// When eating a crayon, check_empty() can be called twice producing
// two messages unless we check for being deleted first
if(qdeleted(src))
if(QDELETED(src))
return TRUE
. = FALSE
+1 -1
View File
@@ -36,7 +36,7 @@
flick("carp_swell", src)
//Wait for animation to end
sleep(6)
if(!src || qdeleted(src))//we got toasted while animating
if(!src || QDELETED(src))//we got toasted while animating
return
//Make space carp
var/mob/living/M = new mobtype(get_turf(src))
+2 -2
View File
@@ -663,7 +663,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
M << "[link] <span class='name'>[msg.sender] </span><span class='game say'>PDA Message</span> --> <span class='name'>[multiple ? "Everyone" : msg.recipient]</span>: <span class='message'>[msg.message][msg.get_photo_ref()]</span></span>"
/obj/item/device/pda/proc/can_send(obj/item/device/pda/P)
if(!P || qdeleted(P) || P.toff)
if(!P || QDELETED(P) || P.toff)
return null
var/obj/machinery/message_server/useMS = null
@@ -676,7 +676,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
var/datum/signal/signal = src.telecomms_process()
if(!P || qdeleted(P) || P.toff) //in case the PDA or mob gets destroyed during telecomms_process()
if(!P || QDELETED(P) || P.toff) //in case the PDA or mob gets destroyed during telecomms_process()
return null
var/useTC = 0
@@ -22,7 +22,7 @@
/obj/item/device/geiger_counter/Destroy()
STOP_PROCESSING(SSobj, src)
..()
return ..()
/obj/item/device/geiger_counter/process()
if(emagged)
@@ -97,11 +97,11 @@
addtimer(CALLBACK(src, .proc/explode), timer * 10)
/obj/item/weapon/c4/proc/explode()
if(qdeleted(src))
if(QDELETED(src))
return
var/turf/location
if(target)
if(!qdeleted(target))
if(!QDELETED(target))
location = get_turf(target)
target.overlays -= image_overlay
target.priority_overlays -= image_overlay
@@ -381,6 +381,25 @@
beakers += B2
/obj/item/weapon/grenade/chem_grenade/ez_clean
name = "cleaner grenade"
desc = "Waffle Co.-brand foaming space cleaner. In a special applicator for rapid cleaning of wide areas."
stage = READY
/obj/item/weapon/grenade/chem_grenade/ez_clean/New()
..()
var/obj/item/weapon/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/large/B2 = new(src)
B1.reagents.add_reagent("fluorosurfactant", 40)
B2.reagents.add_reagent("water", 40)
B2.reagents.add_reagent("ez_clean", 60) //ensures a t h i c c distribution
beakers += B1
beakers += B2
/obj/item/weapon/grenade/chem_grenade/teargas
name = "teargas grenade"
desc = "Used for nonlethal riot control. Contents under pressure. Do not directly inhale contents."
@@ -64,7 +64,7 @@
walk_away(P,loc,rand(1,4))
spawn(rand(15,60))
if(P && !qdeleted(P))
if(P && !QDELETED(P))
P.prime()
qdel(src)
@@ -19,7 +19,7 @@
/obj/item/weapon/grenade/deconstruct(disassembled = TRUE)
if(!disassembled)
prime()
if(!qdeleted(src))
if(!QDELETED(src))
qdel(src)
/obj/item/weapon/grenade/proc/clown_check(mob/living/carbon/human/user)
@@ -128,7 +128,7 @@
/obj/item/weapon/grenade/plastic/c4/prime()
var/turf/location
if(target)
if(!qdeleted(target))
if(!QDELETED(target))
location = get_turf(target)
target.overlays -= image_overlay
target.priority_overlays -= image_overlay
@@ -156,7 +156,7 @@
/obj/item/weapon/grenade/plastic/x4/prime()
var/turf/location
if(target)
if(!qdeleted(target))
if(!QDELETED(target))
location = get_turf(target)
target.overlays -= image_overlay
target.priority_overlays -= image_overlay
@@ -27,7 +27,7 @@
tracked_chem_implants += src
/obj/item/weapon/implant/chem/Destroy()
..()
. = ..()
tracked_chem_implants -= src
@@ -10,7 +10,7 @@
tracked_implants += src
/obj/item/weapon/implant/tracking/Destroy()
..()
. = ..()
tracked_implants -= src
/obj/item/weapon/implanter/tracking/New()
@@ -144,8 +144,8 @@
playsound(loc, 'sound/weapons/batonextend.ogg', 50, 1)
add_fingerprint(user)
sleep(3)
if (H && !qdeleted(H))
if (B && !qdeleted(B))
if (H && !QDELETED(H))
if (B && !QDELETED(B))
H.internal_organs -= B
qdel(B)
new /obj/effect/gibspawner/generic(H.loc, H.viruses, H.dna)
+1 -1
View File
@@ -51,7 +51,7 @@
var/A
A = input(user, "Area to jump to", "BOOYEA", A) as null|anything in teleportlocs
if(!src || qdeleted(src) || !user || !user.is_holding(src) || user.incapacitated() || !A || !uses)
if(!src || QDELETED(src) || !user || !user.is_holding(src) || user.incapacitated() || !A || !uses)
return
var/area/thearea = teleportlocs[A]
@@ -273,13 +273,6 @@
level = 1
cant_hold = list(/obj/item/weapon/storage/backpack/satchel/flat) //muh recursive backpacks
/obj/item/weapon/storage/backpack/satchel/duty
name = "duty satchel"
desc = "An extra trendy looking satchel."
icon_state = "satchel-duty"
/obj/item/weapon/storage/backpack/satchel/flat/hide(var/intact)
if(intact)
invisibility = INVISIBILITY_MAXIMUM
@@ -56,7 +56,6 @@ var/global/list/bibleitemstates = list("bible", "koran", "scrapbook", "bible",
if(B.icon_state == "honk1" || B.icon_state == "honk2")
var/mob/living/carbon/human/H = usr
new /obj/item/weapon/bikehorn(B)
H.dna.add_mutation(CLOWNMUT)
H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(H), slot_wear_mask)
@@ -157,8 +156,4 @@ var/global/list/bibleitemstates = list("bible", "koran", "scrapbook", "bible",
/obj/item/weapon/storage/book/bible/booze/New()
..()
new /obj/item/weapon/reagent_containers/food/drinks/beer(src)
new /obj/item/weapon/reagent_containers/food/drinks/beer(src)
new /obj/item/stack/spacecash(src)
new /obj/item/stack/spacecash(src)
new /obj/item/stack/spacecash(src)
new /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey(src)
@@ -301,3 +301,8 @@
new /obj/item/weapon/reagent_containers/glass/bottle/romerol(src)
new /obj/item/weapon/reagent_containers/syringe(src)
new /obj/item/weapon/reagent_containers/dropper(src)
/obj/item/weapon/storage/box/syndie_kit/ez_clean/New()
..()
for(var/i in 1 to 3)
new/obj/item/weapon/grenade/chem_grenade/ez_clean(src)
@@ -116,7 +116,7 @@
var/mob/living/carbon/human/H = user
user.visible_message("<span class='suicide'>[user] is putting [src]'s valve to [user.p_their()] lips! It looks like [user.p_theyre()] trying to commit suicide!</span>")
playsound(loc, 'sound/effects/spray.ogg', 10, 1, -3)
if (H && !qdeleted(H))
if (H && !QDELETED(H))
for(var/obj/item/W in H)
H.dropItemToGround(W)
if(prob(50))
+4 -4
View File
@@ -136,7 +136,7 @@
var/obj/item/weapon/twohanded/O = user.get_inactive_held_item()
if (istype(O) && !istype(O, /obj/item/weapon/twohanded/offhand/)) //If you have a proper item in your other hand that the offhand is for, do nothing. This should never happen.
return
if (qdeleted(src))
if (QDELETED(src))
return
qdel(src) //If it's another offhand, or literally anything else, qdel. If I knew how to add logging messages I'd put one here.
@@ -169,8 +169,8 @@
..()
var/slotbit = slotdefine2slotbit(slot)
if(slot_flags & slotbit)
var/O = user.is_holding_item_of_type(/obj/item/weapon/twohanded/offhand)
if(!O || qdeleted(O))
var/datum/O = user.is_holding_item_of_type(/obj/item/weapon/twohanded/offhand)
if(!O || QDELETED(O))
return
qdel(O)
return
@@ -700,7 +700,7 @@
if(source.z == ZLEVEL_STATION && get_dist(turfhit, source) < maxdist || source.z != ZLEVEL_STATION)
..()
if(do_after_mob(user, src, 5, uninterruptible = 1, progress = 0))
if(qdeleted(src))
if(QDELETED(src))
return
var/turf/landing = get_turf(src)
if (loc != landing)
+1 -1
View File
@@ -141,7 +141,7 @@
/obj/singularity_act()
ex_act(1)
if(src && !qdeleted(src))
if(src && !QDELETED(src))
qdel(src)
return 2
+3 -3
View File
@@ -71,7 +71,7 @@
/obj/proc/rewrite(mob/user)
var/penchoice = alert("What would you like to edit?", "Rename or change description?", "Rename", "Change description", "Cancel")
if(!qdeleted(src) && user.canUseTopic(src, BE_CLOSE))
if(!QDELETED(src) && user.canUseTopic(src, BE_CLOSE))
if(penchoice == "Rename")
rename_obj(user)
if(penchoice == "Change description")
@@ -206,7 +206,7 @@
var/input = stripped_input(M,"What do you want to name \the [name]?", ,"", MAX_NAME_LEN)
var/oldname = name
if(!qdeleted(src) && M.canUseTopic(src, BE_CLOSE) && input != "")
if(!QDELETED(src) && M.canUseTopic(src, BE_CLOSE) && input != "")
if(oldname == input)
M << "You changed \the [name] to... well... \the [name]."
return
@@ -220,7 +220,7 @@
/obj/proc/redesc_obj(mob/M)
var/input = stripped_input(M,"Describe \the [name] here", ,"", 100)
if(!qdeleted(src) && M.canUseTopic(src, BE_CLOSE) && input != "")
if(!QDELETED(src) && M.canUseTopic(src, BE_CLOSE) && input != "")
desc = input
M << "You have successfully changed \the [name]'s description."
return
+2 -2
View File
@@ -51,7 +51,7 @@
if(density)
do_the_flick()
sleep(5)
if(!qdeleted(src))
if(!QDELETED(src))
density = 0
SetOpacity(0)
update_icon()
@@ -63,7 +63,7 @@
do_the_flick()
density = 1
sleep(5)
if(!qdeleted(src))
if(!QDELETED(src))
SetOpacity(1)
update_icon()
air_update_turf(1)
+9 -1
View File
@@ -27,7 +27,15 @@
/obj/structure/grille/Bumped(atom/user)
if(ismob(user))
shock(user, 70)
var/tile_density = FALSE
for(var/atom/movable/AM in get_turf(src))
if(AM == src)
continue
if(AM.density && AM.layer >= layer)
tile_density = TRUE
break
if(!tile_density)
shock(user, 70)
/obj/structure/grille/attack_paw(mob/user)
@@ -79,6 +79,8 @@
return
if(L.buckled)
return
if(user.pulling != L)
return
playsound(src.loc, "sound/effects/splat.ogg", 25, 1)
L.visible_message("<span class='danger'>[user] slams [L] onto the meat spike!</span>", "<span class='userdanger'>[user] slams you onto the meat spike!</span>", "<span class='italics'>You hear a squishy wet noise.</span>")
L.loc = src.loc
+1 -1
View File
@@ -218,7 +218,7 @@ var/global/list/crematoriums = new/list()
new /obj/effect/decal/cleanable/ash(src)
sleep(30)
if(!qdeleted(src))
if(!QDELETED(src))
locked = 0
update_icon()
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) //you horrible people
@@ -146,7 +146,7 @@
open_animation()
sleep(OPEN_DURATION + 2)
pod_moving = 0
if(!qdeleted(pod))
if(!QDELETED(pod))
pod.air_contents.share(loc.return_air()) //mix the pod's gas mixture with the tile it's on
/obj/structure/transit_tube/station/init_tube_dirs()
@@ -68,7 +68,7 @@
add_fingerprint(user)
playsound(src.loc, I.usesound, 50, 1)
if(do_after(user, 40*I.toolspeed, target = src))
if(qdeleted(src))
if(QDELETED(src))
return
user << "<span class='notice'>You attach the [name].</span>"
var/obj/structure/transit_tube/R = new build_type(loc, dir)
@@ -54,7 +54,7 @@
/obj/structure/transit_tube_pod/ex_act(severity, target)
..()
if(!qdeleted(src))
if(!QDELETED(src))
empty_pod()
/obj/structure/transit_tube_pod/contents_explosion(severity, target)
+3 -3
View File
@@ -190,7 +190,7 @@
playsound(loc, I.usesound, 75, 1)
user << "<span class='notice'> You begin to disassemble [src]...</span>"
if(do_after(user, 40*I.toolspeed, target = src))
if(qdeleted(src))
if(QDELETED(src))
return
var/obj/item/stack/sheet/G = new glass_type(user.loc, glass_amount)
@@ -233,7 +233,7 @@
/obj/structure/window/deconstruct(disassembled = TRUE)
if(qdeleted(src))
if(QDELETED(src))
return
if(!disassembled)
playsound(src, "shatter", 70, 1)
@@ -335,7 +335,7 @@
//merges adjacent full-tile windows into one
/obj/structure/window/update_icon()
if(!qdeleted(src))
if(!QDELETED(src))
if(!fulltile)
return
+1 -1
View File
@@ -258,4 +258,4 @@
if(!wet && wet_time)
wet_time = 0
if(wet)
addtimer(CALLBACK(src, .proc/HandleWet), 15)
addtimer(CALLBACK(src, .proc/HandleWet), 15, TIMER_UNIQUE)
+4 -4
View File
@@ -55,7 +55,7 @@
/turf/open/chasm/proc/drop(atom/movable/AM)
//Make sure the item is still there after our sleep
if(!AM || qdeleted(AM))
if(!AM || QDELETED(AM))
return
var/turf/T = locate(drop_x, drop_y, drop_z)
@@ -84,7 +84,7 @@
/turf/open/chasm/straight_down/lava_land_surface/drop(atom/movable/AM)
//Make sure the item is still there after our sleep
if(!AM || qdeleted(AM))
if(!AM || QDELETED(AM))
return
AM.visible_message("<span class='boldwarning'>[AM] falls into [src]!</span>", "<span class='userdanger'>You stumble and stare into an abyss before you. It stares back, and you fall \
into the enveloping dark.</span>")
@@ -96,13 +96,13 @@
animate(AM, transform = matrix() - matrix(), alpha = 0, color = rgb(0, 0, 0), time = 10)
for(var/i in 1 to 5)
//Make sure the item is still there after our sleep
if(!AM || qdeleted(AM))
if(!AM || QDELETED(AM))
return
AM.pixel_y--
sleep(2)
//Make sure the item is still there after our sleep
if(!AM || qdeleted(AM))
if(!AM || QDELETED(AM))
return
if(iscyborg(AM))
@@ -199,6 +199,6 @@
. = ..()
//Do this *after* the turf has changed as qdel in spacevines will call changeturf again if it hasn't
for(var/obj/structure/spacevine/SV in src)
if(!qdestroying(SV))//Helps avoid recursive loops
if(!QDESTROYING(SV))//Helps avoid recursive loops
qdel(SV)
UpdateAffectingLights()
+1 -3
View File
@@ -21,7 +21,7 @@
var/explosion_level = 0 //for preventing explosion dodging
var/explosion_id = 0
var/list/decals
/turf/New()
@@ -426,8 +426,6 @@
return T
/turf/handle_fall(mob/faller, forced)
if(!faller)
return
faller.lying = pick(90, 270)
if(!forced)
return