diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 7855c4e87b..c1aed96d61 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -142,7 +142,8 @@ // Can most things breathe? if(trace_gases) continue - if(A.get_moles(/datum/gas/oxygen) >= 16) + var/oxy_moles = A.get_moles(/datum/gas/oxygen) + if(oxy_moles < 16 || oxy_moles > 50) continue if(A.get_moles(/datum/gas/plasma)) continue diff --git a/code/modules/antagonists/eldritch_cult/eldritch_items.dm b/code/modules/antagonists/eldritch_cult/eldritch_items.dm index 0dd9cf6bea..a6380a81b2 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_items.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_items.dm @@ -62,13 +62,24 @@ /datum/action/innate/heretic_shatter/IsAvailable() if(IS_HERETIC(holder) || IS_HERETIC_MONSTER(holder)) - return TRUE + return ..() else return FALSE /datum/action/innate/heretic_shatter/Activate() if(do_after(holder,10, target = holder)) - var/turf/safe_turf = find_safe_turf(zlevels = sword.z, extended_safety_checks = TRUE) + if(!sword || QDELETED(sword)) + return + if(!IsAvailable()) //Never trust the user. + return + var/swordz = (get_turf(sword))?.z //SHOULD usually have a turf but if it doesn't better be prepared. + if(!swordz) + to_chat(holder, "[sword] flickers but remains in place, as do you...") + return + var/turf/safe_turf = find_safe_turf(zlevels = swordz, extended_safety_checks = TRUE) + if(!safe_turf) + to_chat(holder, "[sword] flickers but remains in place, as do you...") + return do_teleport(holder,safe_turf,forceMove = TRUE,channel=TELEPORT_CHANNEL_MAGIC) to_chat(holder,"You feel a gust of energy flow through your body... the Rusted Hills heard your call...") qdel(sword)