diff --git a/code/modules/mob/living/simple_animal/abnormality/teth/drowned_sisters.dm b/code/modules/mob/living/simple_animal/abnormality/teth/drowned_sisters.dm
index b0e0e30b31ba..92f5728304fa 100644
--- a/code/modules/mob/living/simple_animal/abnormality/teth/drowned_sisters.dm
+++ b/code/modules/mob/living/simple_animal/abnormality/teth/drowned_sisters.dm
@@ -13,7 +13,8 @@
ABNORMALITY_WORK_ATTACHMENT = 50,
ABNORMALITY_WORK_REPRESSION = 20
)
- work_damage_amount = 1 //Calculated later
+ start_qliphoth = 3
+ work_damage_amount = 5 //Calculated later
work_damage_type = WHITE_DAMAGE
pixel_x = -32
base_pixel_x = -32
@@ -25,15 +26,65 @@
gift_type = /datum/ego_gifts/sorority
abnormality_origin = ABNORMALITY_ORIGIN_WONDERLAB
+ var/breaching = FALSE
-/mob/living/simple_animal/hostile/abnormality/drownedsisters/AttemptWork(mob/living/carbon/human/user, work_type)
- //Deals scaling work damage based off your stats.
+//Work Mechanics
+/mob/living/simple_animal/hostile/abnormality/drownedsisters/AttemptWork(mob/living/carbon/human/user, work_type) //Deals scaling work damage based off your stats.
+ if(breaching)
+ return FALSE
work_damage_amount = (get_attribute_level(user, PRUDENCE_ATTRIBUTE) -60) * -0.5
- work_damage_amount = max(1, work_damage_amount) //So you don't get healing
- return TRUE
+ work_damage_amount = max(5, work_damage_amount) //So you don't get healing
+ return ..()
/mob/living/simple_animal/hostile/abnormality/drownedsisters/PostWorkEffect(mob/living/carbon/human/user, work_type, pe, work_time)
// okay so according to the lore you're not really supposed to remember the stories she says so we're going to make it so your sanity goes back up
if(!user.sanity_lost && pe != 0)
user.adjustSanityLoss(-get_attribute_level(user, PRUDENCE_ATTRIBUTE))
..()
+ switch(work_type)
+ if(ABNORMALITY_WORK_INSTINCT)
+ datum_reference.qliphoth_change(-1)
+ if(ABNORMALITY_WORK_ATTACHMENT)
+ if(datum_reference.qliphoth_meter == 3)
+ FloodRoom()
+ else
+ datum_reference.qliphoth_change(1)
+ return
+
+//Breaches
+/mob/living/simple_animal/hostile/abnormality/drownedsisters/ZeroQliphoth(mob/living/carbon/human/user)
+ datum_reference.qliphoth_change(3)
+ if(!user)
+ return
+ to_chat(user, "You are attacked by an invisible assailant!")
+ playsound(get_turf(src), 'sound/abnormalities/jangsan/tigerbite.ogg', 75, 0)
+ user.apply_damage(200, RED_DAMAGE, null, user.run_armor_check(null, BLACK_DAMAGE))
+ if(user.health < 0 || user.stat == DEAD)
+ user.gib()
+ return
+
+/mob/living/simple_animal/hostile/abnormality/drownedsisters/proc/FloodRoom() //Qliphoth Went over max
+ breaching = TRUE
+ for(var/turf/open/T in view(7, src))
+ new /obj/effect/temp_visual/water_waves(T)
+ playsound(get_turf(src), 'sound/abnormalities/piscinemermaid/waterjump.ogg', 75, 0)
+ var/list/teleport_potential = list()
+ for(var/turf/T in GLOB.department_centers)
+ teleport_potential += T
+ if(!LAZYLEN(teleport_potential))
+ return
+ for(var/mob/living/carbon/human/H in view(7, src))
+ var/turf/teleport_target = pick(teleport_potential)
+ TeleportPerson(H, teleport_target)
+ sleep(5 SECONDS)
+ datum_reference.qliphoth_meter = 3
+ death()
+
+/mob/living/simple_animal/hostile/abnormality/drownedsisters/proc/TeleportPerson(mob/living/carbon/human/H, turf/teleport_target)
+ set waitfor = FALSE
+ to_chat(H, "You can't breathe!")
+ H.AdjustSleeping(10 SECONDS)
+ animate(H, alpha = 0, time = 2 SECONDS)
+ sleep(2 SECONDS)
+ H.forceMove(get_turf(teleport_target)) // See ya!
+ animate(H, alpha = 255, time = 0 SECONDS)
diff --git a/code/modules/mob/living/simple_animal/abnormality/teth/penitent_girl.dm b/code/modules/mob/living/simple_animal/abnormality/teth/penitent_girl.dm
index c53fa77fb15c..91c2b2b9bc0d 100644
--- a/code/modules/mob/living/simple_animal/abnormality/teth/penitent_girl.dm
+++ b/code/modules/mob/living/simple_animal/abnormality/teth/penitent_girl.dm
@@ -1,5 +1,6 @@
#define STATUS_EFFECT_PENITENCE /datum/status_effect/penitence
//Sorry Lads, not much I can do here - Kirie
+//I tried to improve it. - Coxswain
/mob/living/simple_animal/hostile/abnormality/penitentgirl
name = "Penitent Girl"
desc = "A girl with hair flowing over her eyes."
@@ -25,31 +26,48 @@
gift_type = /datum/ego_gifts/sorrow
abnormality_origin = ABNORMALITY_ORIGIN_WONDERLAB
-
+//Work Mechanics
/mob/living/simple_animal/hostile/abnormality/penitentgirl/AttemptWork(mob/living/carbon/human/user, work_type)
- //Temp too high, random damage type time.
- if(get_attribute_level(user, TEMPERANCE_ATTRIBUTE) >= 40)
+ //Prudence too high, random damage type time.
+ if(get_attribute_level(user, PRUDENCE_ATTRIBUTE) >= 40)
work_damage_type = pick(WHITE_DAMAGE, RED_DAMAGE, BLACK_DAMAGE, PALE_DAMAGE)
return TRUE
/mob/living/simple_animal/hostile/abnormality/penitentgirl/PostWorkEffect(mob/living/carbon/human/user, work_type, pe, work_time)
// you are going to cut your own leg off
- if(get_attribute_level(user, TEMPERANCE_ATTRIBUTE) < 40)
- user.apply_status_effect(STATUS_EFFECT_PENITENCE)
- to_chat(user, "Something feels strange.") //I have to write something here
+ if((get_attribute_level(user, TEMPERANCE_ATTRIBUTE) < 40) && (get_attribute_level(user, PRUDENCE_ATTRIBUTE) < 40))
+ user.apply_damage(250, WHITE_DAMAGE, null, user.run_armor_check(null, WHITE_DAMAGE), spread_damage = TRUE)//DIE!
work_damage_type = initial(work_damage_type)
+ if(user.sanity_lost)
+ user.apply_status_effect(STATUS_EFFECT_PENITENCE)
+ user.say("Please, chop off my feet!")
+ QDEL_NULL(user.ai_controller)
+ user.ai_controller = /datum/ai_controller/insane/wander/penitence
+ user.InitializeAIController()
+ user.apply_status_effect(/datum/status_effect/panicked_type/wander/penitence)
+
+//Status Effect
/datum/status_effect/penitence
id = "penitence"
status_type = STATUS_EFFECT_UNIQUE
- duration = 600 //You will die 60 seconds from now
+ duration = 600 //Cut off your own legs after 60 seconds if you are still insane
alert_type = null
+/datum/status_effect/penitence/on_apply()
+ . = ..()
+ if(!ishuman(owner))
+ return FALSE //Autoremoves it
+ owner.add_overlay(mutable_appearance('icons/mob/clothing/feet.dmi', "red_shoes", -ABOVE_MOB_LAYER)) //Yes I am reusing assets! No, I am not sorry!
+
/datum/status_effect/penitence/on_remove()
. = ..()
+ owner.cut_overlay(mutable_appearance('icons/mob/clothing/feet.dmi', "red_shoes", -ABOVE_MOB_LAYER))
if(ishuman(owner))
var/mob/living/carbon/human/user = owner
+ if(!user.sanity_lost) //Are we still insane? If not, we get to keep our legs.
+ return
if(HAS_TRAIT(user, TRAIT_NODISMEMBER))
return
var/obj/item/bodypart/l_leg = user.get_bodypart(BODY_ZONE_L_LEG)
@@ -57,6 +75,34 @@
var/did_the_thing = (l_leg?.dismember() && r_leg?.dismember()) //not all limbs can be removed, so important to check that we did. the. thing.
if(!did_the_thing)
return
- to_chat(user, "You need to rip them off NOW!") //I have to write something here
+ if(user.stat < UNCONSCIOUS) //Not unconscious/dead
+ user.say("I did it! I am finally rid of those shoes!")
+ user.adjustBruteLoss(300)//DIE! For real, this time.
+
+/datum/status_effect/penitence/tick()
+ if(!ishuman(owner))
+ return
+ var/mob/living/carbon/human/user = owner
+ if(!user.sanity_lost && !QDELETED(user))
+ qdel(src)
+ else
+ user.emote("spin")
#undef STATUS_EFFECT_PENITENCE
+
+//Sanity Lines
+// Insanity lines
+/datum/ai_controller/insane/wander/penitence
+ lines_type = /datum/ai_behavior/say_line/insanity_penitence
+
+/datum/ai_behavior/say_line/insanity_penitence
+ lines = list(
+ "Do you want to dance?",
+ "Why do I want to dance? Why do you want to live?",
+ "Check out these moves!",
+ "Hahaha...",
+ "I feel so alive!"
+ )
+
+/datum/status_effect/panicked_type/wander/penitence
+ icon = "penitence"
diff --git a/code/modules/paperwork/records/info/teth.dm b/code/modules/paperwork/records/info/teth.dm
index 1e78a5f39a38..8edc2f7a626c 100644
--- a/code/modules/paperwork/records/info/teth.dm
+++ b/code/modules/paperwork/records/info/teth.dm
@@ -161,15 +161,19 @@
abno_type = /mob/living/simple_animal/hostile/abnormality/penitentgirl
abno_code = "T-01-115"
abno_info = list(
- "When an Agent, who had Temperance Level 1, completed the work process, they eventually cut off their own feet.",
- "When an Agent, who had Temperance Level 2 or higher, started the work process, Penitent Girl’s work damage type changed.")
+ "When an Agent, who had Temperance and Prudence Level 1, completed the work process, the employee began to panic, and started dancing frantically. When left alone for too long. the employee cut off their own feet.",
+ "When an Agent, who had Prudence Level 2 or higher, started the work process, Penitent Girl’s work damage type changed.")
//Drowned Sisters
/obj/item/paper/fluff/info/teth/drowned
abno_type = /mob/living/simple_animal/hostile/abnormality/drownedsisters
abno_code = "T-01-133"
abno_info = list(
- "The work damage done to the employee working on The Drowned Sisters increased inversely to their Prudence.",
+ "When the Employee perfomed instinct work, the Qliphoth counter lowered.",
+ "When the Qliphoth counter reached zero, the employee mysteriously died on the spot. An autopsy revealed scratch marks from an incredibly large feline.",
+ "When the Employee perfomed attachment work, the Qliphoth counter increased.",
+ "If the Qliphoth counter increased while already at its maximum, the cell was flooded with water. Any employees inside eventually awoke somewhere else in the facility.",
+ "The work damage done to the employee working on The Drowned Sisters increased immensely when Prudence was low, especially below level 2.",
"After work was completed, the employee was unable to recall their conversation with The Drowned Sisters. It was found that the employee’s sanity was slightly restored.")
//Void Dream
diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi
index 0919c67102dc..c5ad1ad6de29 100644
Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ