From 1d1dc1aca81a6e7df5acd346f13c8b8a816e831c Mon Sep 17 00:00:00 2001 From: vuonojenmustaturska Date: Fri, 25 May 2018 15:36:56 +0300 Subject: [PATCH] Disallow effects from being scanned by the chameleon projector (#38017) * henk * iseffect --- code/__DEFINES/is_helpers.dm | 2 ++ code/_globalvars/lists/typecache.dm | 2 ++ code/datums/helper_datums/teleport.dm | 2 +- code/game/objects/effects/portals.dm | 3 +-- code/game/objects/items/devices/chameleonproj.dm | 2 +- .../ark_of_the_clockwork_justicar.dm | 6 +++--- code/modules/events/wormholes.dm | 2 +- code/modules/power/supermatter/supermatter.dm | 14 +++++++------- code/modules/reagents/chemistry/recipes.dm | 2 +- 9 files changed, 19 insertions(+), 16 deletions(-) diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 772987185b..feb28ed3c5 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -181,6 +181,8 @@ GLOBAL_LIST_INIT(glass_sheet_types, typecacheof(list( #define is_glass_sheet(O) (is_type_in_typecache(O, GLOB.glass_sheet_types)) +#define iseffect(O) (is_type_in_typecache(O, GLOB.typecache_effect)) + #define isblobmonster(O) (istype(O, /mob/living/simple_animal/hostile/blob)) #define isshuttleturf(T) (length(T.baseturfs) && (/turf/baseturf_skipover/shuttle in T.baseturfs)) diff --git a/code/_globalvars/lists/typecache.dm b/code/_globalvars/lists/typecache.dm index f4e73f2994..ee4635f910 100644 --- a/code/_globalvars/lists/typecache.dm +++ b/code/_globalvars/lists/typecache.dm @@ -12,3 +12,5 @@ GLOBAL_LIST_INIT(typecache_machine_or_structure, typecacheof(list(/obj/machinery GLOBAL_LIST_INIT(typecache_shuttle_area, typecacheof(/area/shuttle)) GLOBAL_LIST_INIT(typecache_clothing, typecacheof(/obj/item/clothing)) + +GLOBAL_LIST_INIT(typecache_effect, typecacheof(/obj/effect)) diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 3f25cbdb9e..ce5f5df1d9 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -48,7 +48,7 @@ //must succeed in most cases /datum/teleport/proc/setTeleatom(atom/movable/ateleatom) - if(istype(ateleatom, /obj/effect) && !istype(ateleatom, /obj/effect/dummy/chameleon)) + if(iseffect(ateleatom) && !istype(ateleatom, /obj/effect/dummy/chameleon)) qdel(ateleatom) return 0 if(istype(ateleatom)) diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index 8ac0d578ad..65e216fd4c 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -145,7 +145,7 @@ return ..() /obj/effect/portal/proc/teleport(atom/movable/M, force = FALSE) - if(!force && (!istype(M) || istype(M, /obj/effect) || (ismecha(M) && !mech_sized) || (!isobj(M) && !ismob(M)))) //Things that shouldn't teleport. + if(!force && (!istype(M) || iseffect(M) || (ismecha(M) && !mech_sized) || (!isobj(M) && !ismob(M)))) //Things that shouldn't teleport. return var/turf/real_target = get_link_target_turf() if(!istype(real_target)) @@ -175,4 +175,3 @@ else real_target = get_turf(linked) return real_target - diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index d5d025619c..13e309b79d 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -40,7 +40,7 @@ if(!check_sprite(target)) return if(!active_dummy) - if(!(isturf(target) || istype(target, /obj/structure/falsewall) || ismob(target))) //NOT any of these + if(!(isturf(target) || ismob(target) || istype(target, /obj/structure/falsewall) || istype(target, /obj/effect))) //NOT any of these playsound(get_turf(src), 'sound/weapons/flash.ogg', 100, 1, -6) to_chat(user, "Scanned [target].") var/obj/temp = new/obj() diff --git a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm index dda73a7025..2b1d9d5f02 100644 --- a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm +++ b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm @@ -100,8 +100,8 @@ R.time *= 2 //Building walls becomes slower when the Ark activates mass_recall() recalls_remaining++ //So it doesn't use up a charge - - var/turf/T = get_turf(src) + + var/turf/T = get_turf(src) var/list/open_turfs = list() for(var/turf/open/OT in orange(1, T)) if(!is_blocked_turf(OT, TRUE)) @@ -283,7 +283,7 @@ for(var/turf/closed/wall/W in RANGE_TURFS(2, src)) W.dismantle_wall() for(var/obj/O in orange(1, src)) - if(!O.pulledby && !istype(O, /obj/effect) && O.density) + if(!O.pulledby && !iseffect(O) && O.density) if(!step_away(O, src, 2) || get_dist(O, src) < 2) O.take_damage(50, BURN, "bomb") O.update_icon() diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm index 3a25df10d4..412e54878a 100644 --- a/code/modules/events/wormholes.dm +++ b/code/modules/events/wormholes.dm @@ -50,7 +50,7 @@ mech_sized = TRUE /obj/effect/portal/wormhole/teleport(atom/movable/M) - if(istype(M, /obj/effect)) //sparks don't teleport + if(iseffect(M)) //sparks don't teleport return if(M.anchored) if(!(ismecha(M) && mech_sized)) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index bfe3e1a63b..15a40d0876 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -239,10 +239,10 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(final_countdown) // We're already doing it go away return final_countdown = TRUE - + var/image/causality_field = image(icon, null, "causality_field") add_overlay(causality_field, TRUE) - + var/speaking = "[emergency_alert] The supermatter has reached critical integrity failure. Emergency causality destabilization field has been activated." radio.talk_into(src, speaking, common_channel, get_spans(), get_default_language()) for(var/i in SUPERMATTER_COUNTDOWN_TIME to 0 step -10) @@ -260,7 +260,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) speaking = "[i/10]..." radio.talk_into(src, speaking, common_channel, get_spans(), get_default_language()) sleep(10) - + explode() /obj/machinery/power/supermatter_crystal/proc/explode() @@ -273,7 +273,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) H.hallucination += max(50, min(300, DETONATION_HALLUCINATION * sqrt(1 / (get_dist(mob, src) + 1)) ) ) var/rads = DETONATION_RADS * sqrt( 1 / (get_dist(L, src) + 1) ) L.rad_act(rads) - + var/turf/T = get_turf(src) for(var/mob/M in GLOB.player_list) if(M.z == z) @@ -598,7 +598,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) AM.visible_message("\The [AM] slams into \the [src] inducing a resonance... [AM.p_their()] body starts to glow and catch flame before flashing into ash.",\ "You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"",\ "You hear an unearthly noise as a wave of heat washes over you.") - else if(isobj(AM) && !istype(AM, /obj/effect)) + else if(isobj(AM) && !iseffect(AM)) AM.visible_message("\The [AM] smacks into \the [src] and rapidly flashes to ash.", null,\ "You hear a loud crack as you are washed with a wave of heat.") else @@ -620,10 +620,10 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) else if(istype(AM, /obj/singularity)) return else if(isobj(AM)) - if(!istype(AM, /obj/effect)) + if(!iseffect(AM)) investigate_log("has consumed [AM].", INVESTIGATE_SUPERMATTER) qdel(AM) - if(!istype(AM, /obj/effect)) + if(!iseffect(AM)) matter_power += 200 //Some poor sod got eaten, go ahead and irradiate people nearby. diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm index eb0f6fc207..51fda371c1 100644 --- a/code/modules/reagents/chemistry/recipes.dm +++ b/code/modules/reagents/chemistry/recipes.dm @@ -50,7 +50,7 @@ /datum/chemical_reaction/proc/goonchem_vortex(turf/T, setting_type, range) for(var/atom/movable/X in orange(range, T)) - if(istype(X, /obj/effect)) + if(iseffect(X)) continue if(!X.anchored) var/distance = get_dist(X, T)