diff --git a/code/game/machinery/oxygen_pump.dm b/code/game/machinery/oxygen_pump.dm index fbadb98b84..f32f47ae19 100644 --- a/code/game/machinery/oxygen_pump.dm +++ b/code/game/machinery/oxygen_pump.dm @@ -40,7 +40,7 @@ /obj/machinery/oxygen_pump/MouseDrop(var/mob/living/carbon/human/target, src_location, over_location) var/mob/living/user = usr - if(!istype(user) || !istype(target)) + if(!istype(user) || !istype(target) || user.is_incorporeal()) return ..() if(CanMouseDrop(target, user)) @@ -55,6 +55,8 @@ src.add_fingerprint(user) /obj/machinery/oxygen_pump/attack_hand(mob/user as mob) + if(user.is_incorporeal()) + return if((stat & MAINT) && tank) user.visible_message(span_infoplain(span_bold("\The [user]") + " removes \the [tank] from \the [src]."), span_notice("You remove \the [tank] from \the [src].")) user.put_in_hands(tank) @@ -130,6 +132,8 @@ return 1 /obj/machinery/oxygen_pump/attackby(obj/item/W as obj, mob/user as mob) + if(user.is_incorporeal()) + return if(W.has_tool_quality(TOOL_SCREWDRIVER)) stat ^= MAINT user.visible_message(span_notice("\The [user] [(stat & MAINT) ? "opens" : "closes"] \the [src]."), span_notice("You [(stat & MAINT) ? "open" : "close"] \the [src].")) diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index e8742c2c56..7b928abbd5 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -162,7 +162,8 @@ //attack_as_weapon /obj/item/flash/attack(mob/living/target, mob/living/user, var/target_zone) - if(!user || !target) return //sanity + if(!user || !target || target.is_incorporeal()) + return //sanity add_attack_logs(user,target,"Flashed (attempt) with [src]") @@ -208,6 +209,8 @@ return FALSE if(target.stat == DEAD) //no point, they're already gone. return FALSE + if(target.is_incorporeal()) // SHADEEEKINNNNNNN + return FALSE if(FLASHPROOF in target.mutations) return FALSE var/flash_strength = 5 diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index f391969bff..45a20c60a6 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -28,6 +28,9 @@ qdel(src) /obj/item/grenade/flashbang/proc/bang(var/turf/T , var/mob/living/carbon/M) // Added a new proc called 'bang' that takes a location and a person to be banged. + if(M.is_incorporeal()) + return + to_chat(M, span_danger("BANG")) // Called during the loop that bangs people in lockers/containers and when banging playsound(src, 'sound/effects/bang.ogg', 50, 1, 30) // people in normal view. Could theroetically be called during other explosions. // -- Polymorph diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 8384141df6..2a2e401e62 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -167,6 +167,9 @@ RigPanel(R) /mob/living/carbon/human/ex_act(severity) + if(is_incorporeal()) // Can't explode shadekin in phase + return + if(!blinded) flash_eyes() diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 9ebc4961ec..10e6e6b94c 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -157,6 +157,8 @@ return 0 //only carbon liveforms have this proc /mob/living/emp_act(severity, recursive) + if(is_incorporeal()) // Can't emp shadekin in phase + return if(LAZYLEN(modifiers)) for(var/datum/modifier/M in modifiers) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 6090ad4ad5..17dbec9970 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1446,6 +1446,8 @@ /mob/living/silicon/robot/buckle_mob(mob/living/M, forced = FALSE, check_loc = TRUE) if(forced) return ..() // Skip our checks + if(is_incorporeal(src) || is_incorporeal(M)) + return FALSE if(lying) return FALSE if(!ishuman(M)) diff --git a/code/modules/mob/living/simple_mob/defense.dm b/code/modules/mob/living/simple_mob/defense.dm index d534820044..fa47ceed42 100644 --- a/code/modules/mob/living/simple_mob/defense.dm +++ b/code/modules/mob/living/simple_mob/defense.dm @@ -134,6 +134,9 @@ // Exploding. /mob/living/simple_mob/ex_act(severity) + if(is_incorporeal()) // Can't explode shadekin in phase + return + if(!blinded) flash_eyes() diff --git a/code/modules/mob/new_player/sprite_accessories_taur.dm b/code/modules/mob/new_player/sprite_accessories_taur.dm index 95bf375e30..87de41b8c0 100644 --- a/code/modules/mob/new_player/sprite_accessories_taur.dm +++ b/code/modules/mob/new_player/sprite_accessories_taur.dm @@ -93,6 +93,8 @@ /mob/living/carbon/human/buckle_mob(mob/living/M, forced = FALSE, check_loc = TRUE) if(forced) return ..() // Skip our checks + if(is_incorporeal(src) || is_incorporeal(M)) + return FALSE if(!istaurtail(tail_style)) return FALSE else diff --git a/code/modules/reagents/holder/holder.dm b/code/modules/reagents/holder/holder.dm index 27e8afb054..2f73894f9e 100644 --- a/code/modules/reagents/holder/holder.dm +++ b/code/modules/reagents/holder/holder.dm @@ -367,6 +367,8 @@ /datum/reagents/proc/touch_mob(var/mob/target) if(!target || !istype(target)) return + if(target.is_incorporeal()) // I really cannot imagine any scenario in which you would want reagent touch clouds to affect phased shadekin, so putting it here instead of higher up. + return for(var/datum/reagent/current in reagent_list) current.touch_mob(target, current.volume)