I;wB?6^v?1($**
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
A`Tzg`
diff --git a/modular_darkpack/modules/powers/code/discipline/melpominee.dm b/modular_darkpack/modules/powers/code/discipline/melpominee.dm
index d025ff21f9cb..6e50032b756b 100644
--- a/modular_darkpack/modules/powers/code/discipline/melpominee.dm
+++ b/modular_darkpack/modules/powers/code/discipline/melpominee.dm
@@ -9,7 +9,23 @@
name = "Melpominee power name"
desc = "Melpominee power description"
- activate_sound = 'modular_darkpack/modules/deprecated/sounds/melpominee.ogg'
+ activate_sound = 'modular_darkpack/modules/powers/sounds/melpominee/melpominee.ogg'
+
+ vitae_cost = 1 // All Melpominee powers below 5 dots cost blood
+
+/particles/melpominee
+ icon = 'icons/effects/particles/generic.dmi'
+ icon_state = list("note" = 1)
+ width = 32
+ height = 100
+ count = 2
+ spawning = 0.1
+ lifespan = 2 SECONDS
+ fade = 1.5 SECONDS
+ position = generator(GEN_BOX, list(-9,12,0), list(9,16,0), NORMAL_RAND)
+ scale = generator(GEN_VECTOR, list(0.9,0.9), list(1.1,1.1), NORMAL_RAND)
+ gravity = list(0, -0.05)
+ drift = generator(GEN_VECTOR, list(0, -0.05), list(0, 0.1))
/**
* • The Missing Voice
@@ -31,12 +47,12 @@
level = 1
check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_SPEAK
- target_type = MOB_LIVING_TARGETING | TARGET_OBJ | TARGET_TURF
+ target_type = TARGET_MOB | TARGET_OBJ | TARGET_TURF
range = 7
/datum/discipline_power/melpominee/the_missing_voice/activate(atom/movable/target)
. = ..()
- var/new_say = input(owner, "What will you say?") as null|text
+ var/new_say = tgui_input_text(owner, "What will you say?")
if(!new_say)
return
@@ -53,8 +69,10 @@
if(!(dummy in range(7, owner)))
to_chat(owner, span_warning("You need line of sight to the location your voice is coming from."))
return
+
+ dummy.name = owner.get_generic_name(TRUE, TRUE)
dummy.say(message = new_say, forced = "melpominee 1")
- qdel(dummy)
+ QDEL_IN(dummy, 2 TURNS)
/**
* •• Phantom Speaker
@@ -76,8 +94,6 @@
level = 2
check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_SPEAK
- vitae_cost = 1
-
cooldown_length = 5 SECONDS
// How many messages can be sent without a roll
var/message_turns = 0
@@ -116,7 +132,7 @@
return
if(target == last_guy && message_turns)
- adjust_blood_pool(1) // Refund the blood if we have enough successes and we're talking to the same guy
+ owner.adjust_blood_pool(1) // Refund the blood if we have enough successes and we're talking to the same guy
else if (target != last_guy)
message_turns = 0
@@ -156,12 +172,15 @@
cooldown_length = 1 SCENES
duration_length = 1 SCENES
+ var/list/audience = list()
/datum/discipline_power/melpominee/madrigal/activate()
. = ..()
var/our_power = SSroll.storyteller_roll(owner.st_get_stat(STAT_WITS) + owner.st_get_stat(STAT_PERFORMANCE), 7, owner, numerical = TRUE)
var/emotion = tgui_input_list(owner, "What emotion do you wish to incite?", "Madrigal", GLOB.aura_list)
- for(var/mob/living/member in hearers(7, owner))
+
+ for(var/mob/living/carbon/member in ohearers(7, owner))
+ audience += member
var/their_power = SSroll.storyteller_roll(member.st_get_stat(STAT_WITS) + member.st_get_stat(STAT_AWARENESS), 7, member, numerical = TRUE)
if(our_power > their_power)
set_emotion(member, emotion)
@@ -172,15 +191,17 @@
to_chat(target, span_purple("You are overwhelmed with [emotion_to_quality(emotion)]."))
-/datum/discipline_power/melpominee/madrigal/deactivate(mob/living/carbon/human/target)
+/datum/discipline_power/melpominee/madrigal/deactivate()
. = ..()
+ for(var/mob/living/carbon/member in audience)
+ if(HAS_TRAIT_FROM(member, TRAIT_FORCED_EMOTION, "Madrigal"))
+ to_chat(member, span_nicegreen("You are no longer overwhelmed with [emotion_to_quality(member.current_emotion)]."))
+ else
+ to_chat(member, span_nicegreen("You feel your [emotion_to_quality(member.current_emotion)] weakening."))
- if(HAS_TRAIT_FROM(target, TRAIT_FORCED_EMOTION, "Madrigal"))
- to_chat(target, span_nicegreen("You are no longer overwhelmed with [emotion_to_quality(target.current_emotion)]."))
- else
- to_chat(target, span_nicegreen("You feel your [emotion_to_quality(target.current_emotion)] weakening."))
+ REMOVE_TRAITS_IN(member, "Madrigal")
- REMOVE_TRAITS_IN(target, "Madrigal")
+ audience = list()
/**
* •••• Siren's Beckoning
@@ -191,6 +212,7 @@
*
* The Daughter sings a haunting sound that causes the victim to remain and listen, provided they fail a willpower roll.
*
+ * TODO: When we add derangements, add the weird cumulative success effect this power has
*/
/datum/discipline_power/melpominee/sirens_beckoning
name = "Siren's Beckoning"
@@ -199,55 +221,106 @@
level = 4
check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_IMMOBILE | DISC_CHECK_SPEAK
- effect_sound = 'modular_darkpack/modules/deprecated/sounds/killscream.ogg'
-
- duration_length = 6 TURNS
+ effect_sound = 'modular_darkpack/modules/powers/sounds/melpominee/melpominee.ogg'
+ range = 7
+ duration_length = 4 TURNS
cooldown_length = 1 MINUTES
- duration_override = TRUE
+ duration_override = FALSE
+ target_type = TARGET_MOB
+
+ var/uses = 4
+ var/channeling = FALSE
+ var/particles/particle_generator
-/datum/discipline_power/melpominee/sirens_beckoning/activate()
+/datum/discipline_power/melpominee/sirens_beckoning/activate(mob/living/target)
. = ..()
- for(var/mob/living/carbon/human/listener in oviewers(DEFAULT_SIGHT_DISTANCE, owner))
- listener.Stun(2 SECONDS)
+ to_chat(owner, span_purple("You begin to sing a haunting melody."))
+
+ owner.Stun(1 TURNS)
+ channeling = TRUE
+
+ channel(target)
+ if(!particle_generator)
+ particle_generator = new(src, /particles/melpominee, PARTICLE_ATTACH_MOB) // TODO: make this work
+
+/datum/discipline_power/melpominee/sirens_beckoning/proc/channel(mob/living/carbon/listener)
+ var/our_power = SSroll.storyteller_roll((owner.st_get_stat(STAT_MANIPULATION) + owner.st_get_stat(STAT_PERFORMANCE)), listener.st_get_stat(STAT_TEMPORARY_WILLPOWER), owner, numerical = TRUE)
+ var/their_power = SSroll.storyteller_roll(listener.st_get_stat(STAT_TEMPORARY_WILLPOWER), (owner.st_get_stat(STAT_APPEARANCE) + owner.st_get_stat(STAT_PERFORMANCE)), listener, numerical = TRUE)
+ playsound(owner, 'modular_darkpack/modules/powers/sounds/melpominee/banshee.ogg', 75)
+ uses--
+ if((our_power > their_power) && channeling && uses)
+ listener.Stun(1 TURNS)
listener.remove_overlay(MUTATIONS_LAYER)
var/mutable_appearance/song_overlay = mutable_appearance('modular_darkpack/modules/deprecated/icons/icons.dmi', "song", -MUTATIONS_LAYER)
listener.overlays_standing[MUTATIONS_LAYER] = song_overlay
listener.apply_overlay(MUTATIONS_LAYER)
+ addtimer(CALLBACK(src, PROC_REF(channel), listener), 1 TURNS)
+ to_chat(listener, span_purple("[owner]'s haunting melody continues."))
+ else
+ deactivate(listener)
+ return
- addtimer(CALLBACK(src, PROC_REF(deactivate), listener), 2 SECONDS)
+ if(!do_after(owner, 1 TURNS, timed_action_flags = IGNORE_HELD_ITEM | IGNORE_INCAPACITATED | IGNORE_SLOWDOWNS) || !owner.can_speak())
+ deactivate(listener)
+ return
-/datum/discipline_power/melpominee/sirens_beckoning/deactivate(mob/living/carbon/human/target)
+/datum/discipline_power/melpominee/sirens_beckoning/deactivate(mob/living/carbon/target)
. = ..()
+ to_chat(owner, span_purple("You stop singing."))
+ channeling = FALSE
target.remove_overlay(MUTATIONS_LAYER)
+ QDEL_NULL(particle_generator)
+ to_chat(target, span_purple("[owner]'s haunting melody ceases."))
+ uses = 4
-//SHATTERING CRESCENDO
-/datum/discipline_power/melpominee/shattering_crescendo
- name = "Shattering Crescendo"
+/**
+ * ••••• Death of the Drum
+ *
+ * The Daughter can sing powerfully enough to rend flesh, split skin, and crack bone. While some Kindred unfortunate enough to witness
+ * this power make reference to the fact that even mortal singers can shatter glass at the right frequency, others note that volume and
+ * intensity don’t seem to matter when a Daughter employs Shattering Crescendo. The Siren can sing a soothing lullaby and still kill a target.
+ *
+ * The Siren selects a target and deals a high amount of damage in brute and to the target's ears.
+ *
+ * TODO: Change this to Virtuosa from V20 instead of Death of the Drum. Only do it if you can find a really user-friendly way to do so. code/modules/tgui_input/checkboxes.dm?
+ */
+/datum/discipline_power/melpominee/death_of_the_drum
+ name = "Death of the Drum"
desc = "Scream at an unnatural pitch, shattering the bodies of your enemies."
level = 5
check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_IMMOBILE | DISC_CHECK_SPEAK
+ target_type = TARGET_MOB
- effect_sound = 'modular_darkpack/modules/deprecated/sounds/killscream.ogg'
+ effect_sound = 'modular_darkpack/modules/powers/sounds/melpominee/banshee.ogg'
- duration_length = 2 SECONDS
- cooldown_length = 7.5 SECONDS
- duration_override = TRUE
+ range = 7
+ duration_length = 1 TURNS
+ cooldown_length = 3 TURNS
-/datum/discipline_power/melpominee/shattering_crescendo/activate()
+/datum/discipline_power/melpominee/death_of_the_drum/activate()
. = ..()
for(var/mob/living/carbon/human/listener in oviewers(DEFAULT_SIGHT_DISTANCE, owner))
- listener.Stun(2 SECONDS)
- listener.apply_damage(50, BRUTE, BODY_ZONE_HEAD)
+ listener.Stun(1 TURNS)
+ switch(listener.get_ear_protection(TRUE))
+ if(0)
+ listener.apply_damage(50, AGGRAVATED, BODY_ZONE_HEAD)
+ listener.sound_damage(50, 3 TURNS)
+ if(1)
+ listener.apply_damage(25, AGGRAVATED, BODY_ZONE_HEAD)
+ listener.sound_damage(25, 10 TURNS)
+ if(2)
+ listener.apply_damage(15, AGGRAVATED, BODY_ZONE_HEAD)
+
listener.remove_overlay(MUTATIONS_LAYER)
var/mutable_appearance/song_overlay = mutable_appearance('modular_darkpack/modules/deprecated/icons/icons.dmi', "song", -MUTATIONS_LAYER)
listener.overlays_standing[MUTATIONS_LAYER] = song_overlay
listener.apply_overlay(MUTATIONS_LAYER)
- addtimer(CALLBACK(src, PROC_REF(deactivate), listener), 2 SECONDS)
+ addtimer(CALLBACK(src, PROC_REF(deactivate), listener), 1 TURNS)
-/datum/discipline_power/melpominee/shattering_crescendo/deactivate(mob/living/carbon/human/target)
+/datum/discipline_power/melpominee/death_of_the_drum/deactivate(mob/living/carbon/human/target)
. = ..()
target.remove_overlay(MUTATIONS_LAYER)
diff --git a/modular_darkpack/modules/powers/sounds/melpominee/banshee.ogg b/modular_darkpack/modules/powers/sounds/melpominee/banshee.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..f3aea4800841f2741c6135931b76c25814c8a21d
GIT binary patch
literal 74249
zcmeFYdstFg`!KvYig*YVh)@gBOc6^=9JLcDn0X2m7{qD-trWF`sZ-O`Af|0m%d*Vu
zFosHq&_IbDW}3l-&IiwtozLf~si~=HCckaX^ZcIo_r2Hqe%JM0-+%AEHk-BAT6?X%
z?(==Gd(U6GGy{MG{~X3up9>rND92$FVWrE96nUSj;9TQBT~>bXd;~Us?8$#0V^6}M
zJM`gsC@=2le>=7yJ`WWM^^oMP$elXBXeqTIPa*y^0d*cVB0M5I{EP5NYH<4EoRaLk
zWlO2NWujKo#t|spY{u<;9q#
zG=f_(t|#6EWiQip>hhOe44I7a$V34Uh}en#6@>J$ivskoBtw^tzD1|~_wO#k()G=1
zY{Y45c}m3N*7~&A$NH8{u}^|Kd*j@~I{TASm_y?11IN(|zg=}P=Hc#tF0P-}L51EW
z4m}|U7l#=e9t_bn7C}ROUKSNlLCXZ@ZXwLG5YAbAFZ2b@f5i}Zv-+mZ04
zj25w>(g+7~#y~=K-AW7D+A>eKM0p@@S66OFSK+yXjB^LwKXrl7iyV6!pgFHe_y0PV
zWHv1R-=FN<({z9h!Sd8f-%~3CdFg?tiWn}RAbc8taLP_+IEo_Yu8KUhY9@5fE#{ut
zmU7|ulyUz;!Wh~CfX(!Etn@ttK_fkEposP5s#%v;rCx?WF$R(U^-=bTUZ92e?^)8I
zRAHvq$v=Tb1r1ByhlzLpJQLIb+;@-K)Z6s>LX2nA{pNPUu7U0<;jSr1+Z%U%!eGJ0
z33nk}hMe8$Xx`b|wCdtK_olYbr8Qo=Tukl#P~C)wyFE`%kVF0Q`kP$ZuSlS0GkcpJ
z=#LVhQq{IyQ>;gYpU3-$EZP_CzStde8+xK@WLN%C*M(5&ea`M*FSw4?{de+VLwJ)r
z$tU-ysp~eO6$F2sfBnSb&7Sqm%+n#Q6KgjmB(<0G(Ch
z`7;%_Zq?Aw1|K>fagH%|G4@=HeQNH(#k(^hDrT@CDz3FY*t_aLOk#eUbyynOwkt_W2i*r^I
zPHpi$vn4S3U|?!Lmr>!U5Le0ny^2(#2Q07H1t^
zm)Z3X!+d6&o0m)egLB4Mgch^uZsJzte{oK8@TNP_n*!!-4b0pcw5DNcRa5)Uy^q_q
z*#E{kxtjfrn*E^WA-E~Hsv)nc$#7I#aQ48{WB=Rp-<&hIC=fa!&fygW{s-sSn7;84
zHyvc8zW%(%S$z;di+SV!69E8Vt8-8OBu514VMFPxq4Y43aMu5tW1!Zd$kc&I2(a4$
zU;+T#Yt;>Y