diff --git a/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm b/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm
index 5cc8eaebe7..0ce3512bef 100644
--- a/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm
+++ b/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm
@@ -118,6 +118,7 @@
var/kin_type
var/energy_light = 0.25
var/energy_dark = 0.75
+ var/phase_gentle = FALSE //CHOMPEdit - Add gentle phasing
var/doing_phase = FALSE //CHOMPEdit - Prevent bugs when spamming phase button
var/manual_respite = FALSE //CHOMPEdit - Dark Respite
var/respite_activating = FALSE //CHOMPEdit - Dark Respite
@@ -283,6 +284,7 @@
ability_icon_given = P.ability_icon_state,
arguments = list()
)
+ H.verbs += /mob/living/carbon/human/proc/phase_strength_toggle //CHOMPEdit - Add gentle phasing
/datum/species/shadekin/proc/handle_shade(var/mob/living/carbon/human/H)
//CHOMPEdit begin - No energy during dark respite
diff --git a/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm b/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm
index cd7d041adc..537ca9ea3d 100644
--- a/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm
+++ b/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm
@@ -43,16 +43,37 @@
darkness = 1-brightness //Invert
var/watcher = 0
- for(var/mob/living/carbon/human/watchers in oview(7,src )) // If we can see them...
- if(watchers in oviewers(7,src)) // And they can see us...
- if(!(watchers.stat) && !isbelly(watchers.loc) && !istype(watchers.loc, /obj/item/weapon/holder)) // And they are alive and not being held by someone...
- watcher++ // They are watching us!
+ //Chompedit start - Nerf to phasing
+ for(var/thing in orange(7, src))
+ if(istype(thing, /mob/living/carbon/human))
+ var/mob/living/carbon/human/watchers = thing
+ if(watchers in oviewers(7,src)) // And they can see us...
+ if(!(watchers.stat) && !isbelly(watchers.loc) && !istype(watchers.loc, /obj/item/weapon/holder)) // And they are alive and not being held by someone...
+ watcher++ // They are watching us!
+ else if(istype(thing, /mob/living/silicon/robot))
+ var/mob/living/silicon/robot/watchers = thing
+ if(watchers in oviewers(7,src))
+ if(!watchers.stat && !isbelly(watchers.loc))
+ watcher++ //The robot is watching us!
+ else if(istype(thing, /obj/machinery/camera))
+ var/obj/machinery/camera/watchers = thing
+ if(watchers.can_use())
+ if(src in watchers.can_see())
+ watcher++ //The camera is watching us!
+ //CHOMPedit end
+
ability_cost = CLAMP(ability_cost/(0.01+darkness*2),50, 80)//This allows for 1 watcher in full light
if(watcher>0)
ability_cost = ability_cost + ( 15 * watcher )
if(!(ability_flags & AB_PHASE_SHIFTED))
- log_debug("[src] attempted to shift with [watcher] visible Carbons with a cost of [ability_cost] in a darkness level of [darkness]")
+ log_debug("[src] attempted to shift with [watcher] observers with a cost of [ability_cost] in a darkness level of [darkness]")
+ //CHOMPEdit start - inform about the observers affecting phasing
+ if(darkness<=0.4 && watcher>=2)
+ to_chat(src, "You have a few observers in a well-lit area! This may prevent phasing. (Working cameras count towards observers)")
+ else if(watcher>=3)
+ to_chat(src, "You have a large number of observers! This may prevent phasing. (Working cameras count towards observers)")
+ //CHOMPEdit end
var/datum/species/shadekin/SK = species
@@ -149,15 +170,31 @@
//Affect nearby lights
var/destroy_lights = 0
- for(var/obj/machinery/light/L in machines)
- if(L.z != z || get_dist(src,L) > 10)
- continue
+ //CHOMPEdit start - Add back light destruction
+ if(SK.get_shadekin_eyecolor() == RED_EYES)
+ destroy_lights = 80
+ else if(SK.get_shadekin_eyecolor() == PURPLE_EYES)
+ destroy_lights = 25
+ //CHOMPEdit end
- if(prob(destroy_lights))
- spawn(rand(5,25))
- L.broken()
- else
- L.flicker(10)
+ //CHOMPEdit start - Add gentle phasing
+ if(SK.phase_gentle) // gentle case: No light destruction. Flicker in 4 tile radius for 3s. Weaken for 3sec after
+ for(var/obj/machinery/light/L in machines)
+ if(L.z != z || get_dist(src,L) > 4)
+ continue
+ L.flicker(3)
+ src.Stun(3)
+ else
+ //CHOMPEdit end
+ for(var/obj/machinery/light/L in machines)
+ if(L.z != z || get_dist(src,L) > 10)
+ continue
+
+ if(prob(destroy_lights))
+ spawn(rand(5,25))
+ L.broken()
+ else
+ L.flicker(10)
//Shifting out
else
ability_flags |= AB_PHASE_SHIFTED
@@ -200,6 +237,26 @@
force_max_speed = TRUE
SK.doing_phase = FALSE //CHOMPEdit - Prevent bugs when spamming phase button
+//CHOMPEdit start - gentle phasing for carbonkin
+//toggle proc for toggling gentle/normal phasing
+/mob/living/carbon/human/proc/phase_strength_toggle()
+ set name = "Toggle Phase Strength"
+ set desc = "Toggle strength of phase. Gentle but slower, or faster but destructive to lights."
+ set category = "Shadekin"
+
+ var/datum/species/shadekin/SK = species
+ if(!istype(SK))
+ to_chat(src, "Only a shadekin can use that!")
+ return FALSE
+
+ if(SK.phase_gentle)
+ to_chat(src, "Phasing toggled to Normal. You may damage lights.")
+ SK.phase_gentle = 0
+ else
+ to_chat(src, "Phasing toggled to Gentle. You won't damage lights, but concentrating on that incurs a short stun.")
+ SK.phase_gentle = 1
+//CHOMPEdit End
+
//CHOMPEdit Start - Shadekin probably shouldn't be hit while phasing
/datum/modifier/shadekin_phase
name = "Shadekin Phasing"