From e5bb9f575f7a85e610e207c03f307e8ead501a22 Mon Sep 17 00:00:00 2001 From: dwinters99 <65516417+dwinters99@users.noreply.github.com> Date: Sat, 31 Jan 2026 07:58:36 -0500 Subject: [PATCH 01/10] melporminer (bedtime) --- code/__DEFINES/~darkpack/auras.dm | 59 ++++++ .../~darkpack/traits/declarations.dm | 3 + code/_globalvars/traits/_traits.dm | 1 + .../code/discipline/auspex/emotion_panel.dm | 3 + .../powers/code/discipline/melpominee.dm | 174 +++++++++++------- tgstation.dme | 1 + 6 files changed, 177 insertions(+), 64 deletions(-) diff --git a/code/__DEFINES/~darkpack/auras.dm b/code/__DEFINES/~darkpack/auras.dm index 514c44e06e60..783114c6088e 100644 --- a/code/__DEFINES/~darkpack/auras.dm +++ b/code/__DEFINES/~darkpack/auras.dm @@ -66,3 +66,62 @@ GLOBAL_LIST_INIT(aura_list, sort_list(list( "Confused" = AURA_CONFUSED, "Daydreaming" = AURA_DAYDREAMING, "Psychotic" = AURA_PSYCHOTIC))) + +/proc/emotion_to_quality(emotion) + var/emo_desc = "bad_code" + + switch(emotion) + if(AURA_AFRAID) + emo_desc = "fear" + if(AURA_AGGRESSIVE) + emo_desc = "aggressiveness" + if(AURA_ANGRY) + emo_desc = "anger" + if(AURA_BITTER) + emo_desc = "bitterness" + if(AURA_CALM) + emo_desc = "calmness" + if(AURA_COMPASSIONATE) + emo_desc = "compassion" + if(AURA_CONSERVATIVE) + emo_desc = "conservativeness" + if(AURA_DEPRESSED) + emo_desc = "depression" + if(AURA_DESIROUS) + emo_desc = "desire" + if(AURA_DISTRUSTFUL) + emo_desc = "distrust" + if(AURA_ENVIOUS) + emo_desc = "envy" + if(AURA_EXCITED) + emo_desc = "excitement" + if(AURA_GENEROUS) + emo_desc = "generosity" + if(AURA_HAPPY) + emo_desc = "happiness" + if(AURA_HATEFUL) + emo_desc = "hate" + if(AURA_IDEALISTIC) + emo_desc = "idealism" + if(AURA_INNOCENT) + emo_desc = "innocence" + if(AURA_LOVESTRUCK) + emo_desc = "love" + if(AURA_OBSESSED) + emo_desc = "obsessiveness" + if(AURA_SAD) + emo_desc = "sadness" + if(AURA_SPIRITUAL) + emo_desc = "spirituality" + if(AURA_SUSPICIOUS) + emo_desc = "suspicion" + if(AURA_ANXIOUS) + emo_desc = "anxiety" + if(AURA_CONFUSED) + emo_desc = "confusion" + if(AURA_DAYDREAMING) + emo_desc = "absentmindedness" + if(AURA_PSYCHOTIC) + emo_desc = "psychosis" + + return emo_desc diff --git a/code/__DEFINES/~darkpack/traits/declarations.dm b/code/__DEFINES/~darkpack/traits/declarations.dm index 5291c3c51d00..7c227641230d 100644 --- a/code/__DEFINES/~darkpack/traits/declarations.dm +++ b/code/__DEFINES/~darkpack/traits/declarations.dm @@ -112,4 +112,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai // Is the Vampire currently hungry? Hunger is defined at a bloodpool rating of 7 - self control (if humanity alignment) or instincts (enlightenment alignment) // its called this because theres apparently already a defined quirk called 'hungry' which appears to lower your blood drawn from biting by half. #define TRAIT_NEEDS_BLOOD "vampire_hungry" + +// Is the character's emotion currently forced? Blocks emotion panel usage +#define TRAIT_FORCED_EMOTION "forced_emotion" // END TRAIT DEFINES diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 9b48e2d3a60a..785218319312 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -725,6 +725,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_SILENCED" = TRAIT_SILENCED, // DARKPACK EDIT ADD - Quietus "TRAIT_WEAK_TO_DOMINATE" = TRAIT_WEAK_TO_DOMINATE, // DARKPACK EDIT ADD - Dominate "TRAIT_ILLEGAL_IDENTITY" = TRAIT_ILLEGAL_IDENTITY, // DARKPACK EDIT ADD - GOVERMENT + "TRAIT_FORCED_EMOTION" = TRAIT_FORCED_EMOTION, // DARKPACK EDIT ADD - Melpominee ), /mob/living/carbon = list( "TRAIT_BRAINLESS_CARBON" = TRAIT_BRAINLESS_CARBON, diff --git a/modular_darkpack/modules/powers/code/discipline/auspex/emotion_panel.dm b/modular_darkpack/modules/powers/code/discipline/auspex/emotion_panel.dm index 210b7f47aac9..f438605b8ce7 100644 --- a/modular_darkpack/modules/powers/code/discipline/auspex/emotion_panel.dm +++ b/modular_darkpack/modules/powers/code/discipline/auspex/emotion_panel.dm @@ -4,6 +4,9 @@ set category = "IC" set desc = "Change your character's emotions." + if(!HAS_TRAIT(TRAIT_FORCED_EMOTION)) + to_chat(src, span_warning("You cannot change emotions right now.")) + var/new_emotion = tgui_input_list(src, "What are you feeling?", "Feelings", GLOB.aura_list) if(isnull(new_emotion)) return FALSE diff --git a/modular_darkpack/modules/powers/code/discipline/melpominee.dm b/modular_darkpack/modules/powers/code/discipline/melpominee.dm index f766537b3959..59157a6b4783 100644 --- a/modular_darkpack/modules/powers/code/discipline/melpominee.dm +++ b/modular_darkpack/modules/powers/code/discipline/melpominee.dm @@ -11,65 +11,64 @@ activate_sound = 'modular_darkpack/modules/deprecated/sounds/melpominee.ogg' -//THE MISSING VOICE +/** + * • The Missing Voice + * + * The character can “throw” her voice anywhere within her line of sight. This enables the Daughter to carry on surreptitious conversations, + * sing duets with herself, or cause any number of distractions. This power can also be combined with other Melpominee powers to + * disguise their source (and some Daughters use it to conceal the fact that Melpominee powers do not function through recorded media). + * + * The Daughter clicks on an object, mob, or turf and sends a message from that location. + * + */ +/obj/effect/the_missing_voice + name = "disembodied voice" + desc = "You can see this? What are you, a ghost lip-reader?" + /datum/discipline_power/melpominee/the_missing_voice name = "The Missing Voice" desc = "Throw your voice to any place you can see." level = 1 check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_SPEAK - target_type = TARGET_OBJ | TARGET_LIVING + target_type = MOB_LIVING_TARGETING | TARGET_OBJ | TARGET_TURF range = 7 - cooldown_length = 5 SECONDS - /datum/discipline_power/melpominee/the_missing_voice/activate(atom/movable/target) . = ..() - var/new_say = input(owner, "What will [target] say?") as null|text + var/new_say = input(owner, "What will you say?") as null|text if(!new_say) return //prevent forceful emoting and whatnot new_say = trim(copytext_char(sanitize(new_say), 1, MAX_MESSAGE_LEN)) - if (findtext(new_say, "*")) - to_chat(owner, span_danger("You can't force others to perform emotes!")) + if(!owner.try_speak(new_say)) return - if (CHAT_FILTER_CHECK(new_say)) - to_chat(owner, span_warning("That message contained a word prohibited in IC chat! Consider reviewing the server rules.\n\"[new_say]\"")) - SSblackbox.record_feedback("tally", "ic_blocked_words", 1, LOWER_TEXT(config.ic_filter_regex.match)) + if(findtext(new_say, "*")) + to_chat(owner, span_danger("You can't emote with [name]!")) return - target.say(message = new_say, forced = "melpominee 1") - - if (!isliving(target)) + var/obj/dummy = new /obj/effect/the_missing_voice(get_turf(target)) // snowflake code but it's more robust than engineering some evil to_chat mechanism + 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 - - //viewers are able to detect if a person's words aren't their own - var/base_difficulty = 5 - var/difficulty_malus = 0 - var/masked = FALSE - if (ishuman(target)) //apply a malus and different text if victim's mouth isn't visible, and a malus if they're already typing - var/mob/living/carbon/human/victim = target - if (!victim.is_face_visible()) - masked = TRUE - base_difficulty += 2 - if (victim.overlays_standing[SAY_LAYER]) //ugly way to check for if the victim is currently typing - base_difficulty += 2 - - for (var/mob/living/hearer in (oviewers(DEFAULT_SIGHT_DISTANCE, target) - owner)) - if (!hearer.client) - continue - difficulty_malus = 0 - if (get_dist(hearer, target) > 3) - difficulty_malus += 1 - if (SSroll.storyteller_roll(hearer.st_get_stat(STAT_PERCEPTION), base_difficulty + difficulty_malus, mobs_to_show_output = hearer) == ROLL_SUCCESS) - if (masked) - to_chat(hearer, span_warning("[target]'s jaw isn't moving to match [target.p_their()] words.")) - else - to_chat(hearer, span_warning("[target]'s lips aren't moving to match [target.p_their()] words.")) - -//PHANTOM SPEAKER + dummy.say(message = new_say, forced = "melpominee 1") + qdel(dummy) + +/** + * •• Phantom Speaker + * + * The Daughter can project her voice to any individual she has personally met. Distance is no object, + * but it must be night wherever the target presently is. The vampire can sing, talk, or otherwise project her voice in + * any way she sees fit (including other uses of Melpominee), but she cannot hear what she is saying, + * and therefore suffers a +1 difficulty to any rolls accompanying her utterance. For instance, the vampire could + * project her voice to an enemy in an attempt to intimidate him, but would suffer a +1 to the difficulty of the Charisma + Intimidation roll. + * + * The Daughter selects a mob from their guestbook and sends a message to them, provided she succedes a Wits + Performance roll. The next N messages + * do not require a roll and do not expend blood + * + */ /datum/discipline_power/melpominee/phantom_speaker name = "Phantom Speaker" desc = "Project your voice to anyone you've met, speaking to them from afar." @@ -77,32 +76,77 @@ 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 + // the guy we last talked to + var/last_guy /datum/discipline_power/melpominee/phantom_speaker/activate() . = ..() - var/mob/living/target = input(owner, "Who will you project your voice to?") as null|mob in (GLOB.player_list - owner) + if(!owner.mind.guestbook.known_names) + to_chat(owner, span_warning("You don't seem to know anyone you can speak to right now...")) + return + // Guys we add to the input below + var/list/targets + + for(var/mob/living/character in GLOB.player_list) + if(character == owner) + continue + if(owner.mind.guestbook.known_names[character.real_name]) + character += targets + + var/mob/living/target = tgui_input_list(owner, "Who will you project your voice to?", "Phantom Speaker", targets) if(!target) return - var/input_message = input(owner, "What message will you project to them?") as null|text + var/input_message = tgui_input_text(owner, "What message will you project to them?", title = "Phantom Speaker") if (!input_message) return //sanitisation! input_message = trim(copytext_char(sanitize(input_message), 1, MAX_MESSAGE_LEN)) - if(CHAT_FILTER_CHECK(input_message)) - to_chat(owner, span_warning("That message contained a word prohibited in IC chat! Consider reviewing the server rules.\n\"[input_message]\"")) - SSblackbox.record_feedback("tally", "ic_blocked_words", 1, LOWER_TEXT(config.ic_filter_regex.match)) + if(!owner.try_speak(input_message)) + return + + if(findtext(input_message, "*")) + to_chat(owner, span_danger("You can't emote with [name]!")) 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 + else if (target != last_guy) + message_turns = 0 + var/language = owner.get_selected_language() - var/message = owner.compose_message(owner, language, input_message, , list()) - to_chat(target, span_purple("You hear someone's voice in your head...")) - target.Hear(message, target, language, input_message, , , ) + var/message = owner.compose_message(owner, language, input_message) + if(!message_turns) + var/successes = SSroll.storyteller_roll(owner.st_get_stat(STAT_WITS) + owner.st_get_stat(STAT_PERFORMANCE), 7, owner, numerical = TRUE) + if(successes) + message_turns = successes + else + to_chat(owner, span_userdanger("Your voice falters. Your message is not sent.")) + return + + to_chat(target, span_boldannounce("You hear a voice in your head...")) + target.Hear(owner, language, span_purple(message), message_mods = list(MODE_SING)) to_chat(owner, span_notice("You project your voice to [target]'s ears.")) -//MADRIGAL + message_turns-- + last_guy = target + +/** + * ••• Madrigal + * + * Music has the power to sway the listener, engendering specific emotions through artful lyrics, pounding crescendo, + * or haunting melody. The Daughters of Cacophony can tap into music’s power, forcing listeners to feel whatever they wish. The emotion becomes so + * powerful that the listener must act, though what a listener does isn’t something the Siren can directly control. + * + * The Daughter chooses an emotion and anyone who fails a Wits + Awareness check against her roll will begin to feel that emotion + * + */ /datum/discipline_power/melpominee/madrigal name = "Madrigal" desc = "Sing a siren song, calling all nearby to you." @@ -110,30 +154,32 @@ level = 3 check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_IMMOBILE | DISC_CHECK_SPEAK - cooldown_length = 5 SECONDS - duration_length = 2 SECONDS - duration_override = TRUE + cooldown_length = 1 SCENE + duration_length = 1 SCENE /datum/discipline_power/melpominee/madrigal/activate() . = ..() - for(var/mob/living/carbon/human/listener in oviewers(DEFAULT_SIGHT_DISTANCE, owner)) - listener.create_walk_to(2 SECONDS, owner) + 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)) + 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) - 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) +/datum/discipline_power/melpominee/madrigal/proc/set_emotion(mob/living/target, emotion) + ADD_TRAIT(target, TRAIT_FORCED_EMOTION, "Madrigal") + SEND_SIGNAL(src, COMSIG_MOB_EMOTION_CHANGED, emotion) -/mob/living/carbon/human/proc/create_walk_to(duration, mob/living/walk_to) - var/datum/cb = CALLBACK(src, TYPE_PROC_REF(/mob/living/carbon/human, walk_to_caster), walk_to) - for(var/i in 1 to duration) - addtimer(cb, (i - 1) * cached_multiplicative_slowdown) + to_chat(target, span_purple("You are overwhelmed with [emotion_to_quality(emotion)].")) /datum/discipline_power/melpominee/madrigal/deactivate(mob/living/carbon/human/target) . = ..() - target.remove_overlay(MUTATIONS_LAYER) + if(HAS_TRAIT_FROM(target, TRAIT_FORCED_EMOTION, "Madrigal")) + to_chat(target, span_nicegreen("You are no longer overwhelmed with [emotion_to_quality(emotion)].")) + else + to_chat(target, span_nicegreen("You feel your [emotion_to_quality(emotion)] weakening.")) + + REMOVE_TRAITS_IN(target, "Madrigal") //SIREN'S BECKONING /datum/discipline_power/melpominee/sirens_beckoning diff --git a/tgstation.dme b/tgstation.dme index 10f3e94f3947..b966880c7b64 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7357,6 +7357,7 @@ #include "modular_darkpack\modules\powers\code\discipline\__discipline_power.dm" #include "modular_darkpack\modules\powers\code\discipline\animalism.dm" #include "modular_darkpack\modules\powers\code\discipline\dementation.dm" +#include "modular_darkpack\modules\powers\code\discipline\melpominee.dm" #include "modular_darkpack\modules\powers\code\discipline\necromancy.dm" #include "modular_darkpack\modules\powers\code\discipline\obtenebration.dm" #include "modular_darkpack\modules\powers\code\discipline\serpentis.dm" From 394d27a0d502c9fbcc7f400388f167342d964650 Mon Sep 17 00:00:00 2001 From: dwinters99 <65516417+dwinters99@users.noreply.github.com> Date: Sun, 1 Feb 2026 01:05:02 -0500 Subject: [PATCH 02/10] blaaah --- .../code/modules/mob/mob_defines.dm | 3 +++ .../code/discipline/auspex/aura_component.dm | 1 + .../code/discipline/auspex/emotion_panel.dm | 2 +- .../powers/code/discipline/melpominee.dm | 26 +++++++++++++------ tgstation.dme | 1 + 5 files changed, 24 insertions(+), 9 deletions(-) create mode 100644 modular_darkpack/master_files/code/modules/mob/mob_defines.dm diff --git a/modular_darkpack/master_files/code/modules/mob/mob_defines.dm b/modular_darkpack/master_files/code/modules/mob/mob_defines.dm new file mode 100644 index 000000000000..418d02c7b403 --- /dev/null +++ b/modular_darkpack/master_files/code/modules/mob/mob_defines.dm @@ -0,0 +1,3 @@ +/mob + /// Emotion currently felt by the mob (for Auspex auras etc.) + current_emotion = AURA_INNOCENT diff --git a/modular_darkpack/modules/powers/code/discipline/auspex/aura_component.dm b/modular_darkpack/modules/powers/code/discipline/auspex/aura_component.dm index dbe6f5ed2ef3..3bd666ca1cef 100644 --- a/modular_darkpack/modules/powers/code/discipline/auspex/aura_component.dm +++ b/modular_darkpack/modules/powers/code/discipline/auspex/aura_component.dm @@ -32,6 +32,7 @@ return current_aura = GLOB.aura_list[new_emotion] + changed_mob.current_emotion = current_aura update_aura() /datum/component/aura/proc/update_aura() diff --git a/modular_darkpack/modules/powers/code/discipline/auspex/emotion_panel.dm b/modular_darkpack/modules/powers/code/discipline/auspex/emotion_panel.dm index f438605b8ce7..75b1d065ec64 100644 --- a/modular_darkpack/modules/powers/code/discipline/auspex/emotion_panel.dm +++ b/modular_darkpack/modules/powers/code/discipline/auspex/emotion_panel.dm @@ -4,7 +4,7 @@ set category = "IC" set desc = "Change your character's emotions." - if(!HAS_TRAIT(TRAIT_FORCED_EMOTION)) + if(!HAS_TRAIT(src, TRAIT_FORCED_EMOTION)) to_chat(src, span_warning("You cannot change emotions right now.")) var/new_emotion = tgui_input_list(src, "What are you feeling?", "Feelings", GLOB.aura_list) diff --git a/modular_darkpack/modules/powers/code/discipline/melpominee.dm b/modular_darkpack/modules/powers/code/discipline/melpominee.dm index 59157a6b4783..d025ff21f9cb 100644 --- a/modular_darkpack/modules/powers/code/discipline/melpominee.dm +++ b/modular_darkpack/modules/powers/code/discipline/melpominee.dm @@ -95,7 +95,7 @@ for(var/mob/living/character in GLOB.player_list) if(character == owner) continue - if(owner.mind.guestbook.known_names[character.real_name]) + if(owner.mind.guestbook.known_names[character.real_name] && character.client) character += targets var/mob/living/target = tgui_input_list(owner, "Who will you project your voice to?", "Phantom Speaker", targets) @@ -154,8 +154,8 @@ level = 3 check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_IMMOBILE | DISC_CHECK_SPEAK - cooldown_length = 1 SCENE - duration_length = 1 SCENE + cooldown_length = 1 SCENES + duration_length = 1 SCENES /datum/discipline_power/melpominee/madrigal/activate() . = ..() @@ -174,14 +174,24 @@ /datum/discipline_power/melpominee/madrigal/deactivate(mob/living/carbon/human/target) . = ..() + if(HAS_TRAIT_FROM(target, TRAIT_FORCED_EMOTION, "Madrigal")) - to_chat(target, span_nicegreen("You are no longer overwhelmed with [emotion_to_quality(emotion)].")) + 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(emotion)] weakening.")) + to_chat(target, span_nicegreen("You feel your [emotion_to_quality(target.current_emotion)] weakening.")) REMOVE_TRAITS_IN(target, "Madrigal") -//SIREN'S BECKONING +/** + * •••• Siren's Beckoning + * + * The Daughters of Cacophony don’t spread madness as surely (or as visibly) as the Malkavians, but their songs are definitely + * detrimental to one’s sanity. With this power, the Daughter can drive any listener to madness. Most of the time, the victim is + * too fascinated to realize that he should leave the area and block out themusic from his mind. + * + * The Daughter sings a haunting sound that causes the victim to remain and listen, provided they fail a willpower roll. + * + */ /datum/discipline_power/melpominee/sirens_beckoning name = "Siren's Beckoning" desc = "Sing an unearthly song to stun those around you." @@ -191,8 +201,8 @@ effect_sound = 'modular_darkpack/modules/deprecated/sounds/killscream.ogg' - duration_length = 2 SECONDS - cooldown_length = 7.5 SECONDS + duration_length = 6 TURNS + cooldown_length = 1 MINUTES duration_override = TRUE /datum/discipline_power/melpominee/sirens_beckoning/activate() diff --git a/tgstation.dme b/tgstation.dme index b966880c7b64..572988de54ed 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -6935,6 +6935,7 @@ #include "modular_darkpack\master_files\code\modules\fishing\sources\subtypes\turfs.dm" #include "modular_darkpack\master_files\code\modules\hydroponics\grown.dm" #include "modular_darkpack\master_files\code\modules\logging\log_stats_preferences.dm" +#include "modular_darkpack\master_files\code\modules\mob\mob_defines.dm" #include "modular_darkpack\master_files\code\modules\mob\dead\observer\observer.dm" #include "modular_darkpack\master_files\code\modules\mob\living\init_signals.dm" #include "modular_darkpack\master_files\code\modules\mob\living\living.dm" From 8af9883c735d94840e6c87c323b1541ce517b30c Mon Sep 17 00:00:00 2001 From: dwinters99 <65516417+dwinters99@users.noreply.github.com> Date: Mon, 2 Feb 2026 09:49:50 -0500 Subject: [PATCH 03/10] melpominee --- .../code/modules/mob/mob_defines.dm | 2 +- .../deprecated/icons/particle_effects.dmi | Bin 22046 -> 21430 bytes .../powers/code/discipline/melpominee.dm | 143 +++++++++++++----- .../powers/sounds/melpominee/banshee.ogg | Bin 0 -> 74249 bytes .../sounds/melpominee}/melpominee.ogg | Bin .../code/vampire_clan/clans/doc.dm | 2 +- 6 files changed, 110 insertions(+), 37 deletions(-) create mode 100644 modular_darkpack/modules/powers/sounds/melpominee/banshee.ogg rename modular_darkpack/modules/{deprecated/sounds => powers/sounds/melpominee}/melpominee.ogg (100%) diff --git a/modular_darkpack/master_files/code/modules/mob/mob_defines.dm b/modular_darkpack/master_files/code/modules/mob/mob_defines.dm index 418d02c7b403..2d87932220f3 100644 --- a/modular_darkpack/master_files/code/modules/mob/mob_defines.dm +++ b/modular_darkpack/master_files/code/modules/mob/mob_defines.dm @@ -1,3 +1,3 @@ /mob /// Emotion currently felt by the mob (for Auspex auras etc.) - current_emotion = AURA_INNOCENT + var/current_emotion = AURA_INNOCENT diff --git a/modular_darkpack/modules/deprecated/icons/particle_effects.dmi b/modular_darkpack/modules/deprecated/icons/particle_effects.dmi index 8b8db2dcaeaca42a01809ce0c25f59569d887e36..db73fa4d1a3b2f1aba2b8ff79812b420f5e5771c 100644 GIT binary patch literal 21430 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 o)% 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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 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 Date: Mon, 2 Feb 2026 10:06:54 -0500 Subject: [PATCH 04/10] a --- .../modules/powers/code/discipline/melpominee.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modular_darkpack/modules/powers/code/discipline/melpominee.dm b/modular_darkpack/modules/powers/code/discipline/melpominee.dm index 6e50032b756b..2dea128222ba 100644 --- a/modular_darkpack/modules/powers/code/discipline/melpominee.dm +++ b/modular_darkpack/modules/powers/code/discipline/melpominee.dm @@ -39,7 +39,7 @@ */ /obj/effect/the_missing_voice name = "disembodied voice" - desc = "You can see this? What are you, a ghost lip-reader?" + desc = "What are you, a ghost lip-reader?" /datum/discipline_power/melpominee/the_missing_voice name = "The Missing Voice" @@ -165,7 +165,7 @@ */ /datum/discipline_power/melpominee/madrigal name = "Madrigal" - desc = "Sing a siren song, calling all nearby to you." + desc = "Sing a siren song, swaying the emotions of all around you." level = 3 check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_IMMOBILE | DISC_CHECK_SPEAK @@ -208,7 +208,7 @@ * * The Daughters of Cacophony don’t spread madness as surely (or as visibly) as the Malkavians, but their songs are definitely * detrimental to one’s sanity. With this power, the Daughter can drive any listener to madness. Most of the time, the victim is - * too fascinated to realize that he should leave the area and block out themusic from his mind. + * too fascinated to realize that he should leave the area and block out the music from his mind. * * The Daughter sings a haunting sound that causes the victim to remain and listen, provided they fail a willpower roll. * From 9736cc9c0dcef39a36acb8a5f03e95b808e77a5c Mon Sep 17 00:00:00 2001 From: dwinters99 <65516417+dwinters99@users.noreply.github.com> Date: Sun, 8 Feb 2026 19:09:07 -0500 Subject: [PATCH 05/10] citations, bugfix, and virtuosa v.01 --- .../~darkpack/traits/declarations.dm | 4 +- code/_globalvars/traits/_traits.dm | 1 + .../code/discipline/auspex/emotion_panel.dm | 1 + .../powers/code/discipline/melpominee.dm | 48 +++++++++++++++---- 4 files changed, 43 insertions(+), 11 deletions(-) diff --git a/code/__DEFINES/~darkpack/traits/declarations.dm b/code/__DEFINES/~darkpack/traits/declarations.dm index 7c227641230d..3784ae79c833 100644 --- a/code/__DEFINES/~darkpack/traits/declarations.dm +++ b/code/__DEFINES/~darkpack/traits/declarations.dm @@ -113,6 +113,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai // its called this because theres apparently already a defined quirk called 'hungry' which appears to lower your blood drawn from biting by half. #define TRAIT_NEEDS_BLOOD "vampire_hungry" -// Is the character's emotion currently forced? Blocks emotion panel usage +// Is the character's emotion currently forced? Blocks emotion panel usage - Melpominee #define TRAIT_FORCED_EMOTION "forced_emotion" +// Are we under the effects of Melpominee 5? +#define TRAIT_VIRTUOSA "virtuosa" // END TRAIT DEFINES diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 785218319312..e6e83d985fc7 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -726,6 +726,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_WEAK_TO_DOMINATE" = TRAIT_WEAK_TO_DOMINATE, // DARKPACK EDIT ADD - Dominate "TRAIT_ILLEGAL_IDENTITY" = TRAIT_ILLEGAL_IDENTITY, // DARKPACK EDIT ADD - GOVERMENT "TRAIT_FORCED_EMOTION" = TRAIT_FORCED_EMOTION, // DARKPACK EDIT ADD - Melpominee + "TRAIT_VIRTUOSA" = TRAIT_VIRTUOSA, // DARKPACK EDIT ADD - Melpominee ), /mob/living/carbon = list( "TRAIT_BRAINLESS_CARBON" = TRAIT_BRAINLESS_CARBON, diff --git a/modular_darkpack/modules/powers/code/discipline/auspex/emotion_panel.dm b/modular_darkpack/modules/powers/code/discipline/auspex/emotion_panel.dm index 75b1d065ec64..c4de0ac27a0e 100644 --- a/modular_darkpack/modules/powers/code/discipline/auspex/emotion_panel.dm +++ b/modular_darkpack/modules/powers/code/discipline/auspex/emotion_panel.dm @@ -6,6 +6,7 @@ if(!HAS_TRAIT(src, TRAIT_FORCED_EMOTION)) to_chat(src, span_warning("You cannot change emotions right now.")) + return FALSE var/new_emotion = tgui_input_list(src, "What are you feeling?", "Feelings", GLOB.aura_list) if(isnull(new_emotion)) diff --git a/modular_darkpack/modules/powers/code/discipline/melpominee.dm b/modular_darkpack/modules/powers/code/discipline/melpominee.dm index 2dea128222ba..f8c6563aed63 100644 --- a/modular_darkpack/modules/powers/code/discipline/melpominee.dm +++ b/modular_darkpack/modules/powers/code/discipline/melpominee.dm @@ -28,7 +28,7 @@ drift = generator(GEN_VECTOR, list(0, -0.05), list(0, 0.1)) /** - * • The Missing Voice + * • The Missing Voice - p453 * * The character can “throw” her voice anywhere within her line of sight. This enables the Daughter to carry on surreptitious conversations, * sing duets with herself, or cause any number of distractions. This power can also be combined with other Melpominee powers to @@ -75,7 +75,7 @@ QDEL_IN(dummy, 2 TURNS) /** - * •• Phantom Speaker + * •• Phantom Speaker - p453 * * The Daughter can project her voice to any individual she has personally met. Distance is no object, * but it must be night wherever the target presently is. The vampire can sing, talk, or otherwise project her voice in @@ -112,7 +112,7 @@ if(character == owner) continue if(owner.mind.guestbook.known_names[character.real_name] && character.client) - character += targets + targets += character var/mob/living/target = tgui_input_list(owner, "Who will you project your voice to?", "Phantom Speaker", targets) if(!target) @@ -154,7 +154,7 @@ last_guy = target /** - * ••• Madrigal + * ••• Madrigal - p453-454 * * Music has the power to sway the listener, engendering specific emotions through artful lyrics, pounding crescendo, * or haunting melody. The Daughters of Cacophony can tap into music’s power, forcing listeners to feel whatever they wish. The emotion becomes so @@ -204,7 +204,7 @@ audience = list() /** - * •••• Siren's Beckoning + * •••• Siren's Beckoning - p454 * * The Daughters of Cacophony don’t spread madness as surely (or as visibly) as the Malkavians, but their songs are definitely * detrimental to one’s sanity. With this power, the Daughter can drive any listener to madness. Most of the time, the victim is @@ -242,7 +242,7 @@ channel(target) if(!particle_generator) - particle_generator = new(src, /particles/melpominee, PARTICLE_ATTACH_MOB) // TODO: make this work + particle_generator = new(owner, /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) @@ -274,8 +274,37 @@ to_chat(target, span_purple("[owner]'s haunting melody ceases.")) uses = 4 + +/** + * ••••• Shattering Crescendo - p454 + * + * Most of the low-level Melpominee powers can only be used on one target at a time. + * When the Daughter reaches this level of mastery in her Discipline, she can "entertain” a + * wider audience. Each member of the audience hears the same message. + * + * The Siren toggles the ability, augmenting the function of •• Phantom Speaker and •••• Siren's Beckoning + * + */ +/datum/discipline_power/melpominee/virtuosa + name = "Virtuosa" + desc = "Augment your abilities, allowing some powers to be used on multiple people." + + level = 5 + toggled = TRUE + check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_IMMOBILE | DISC_CHECK_SPEAK + + vitae_cost = 0 + +/datum/discipline_power/melpominee/virtuosa/activate() + . = ..() + ADD_TRAIT(owner, TRAIT_VIRTUOSA, "melpominee 5") + +/datum/discipline_power/melpominee/virtuosa/deactivate(atom/target, direct) + . = ..() + REMOVE_TRAIT(owner, TRAIT_VIRTUOSA, "melpominee 5") + /** - * ••••• Death of the Drum + * ••••• • Shattering Crescendo - p454 * * 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 @@ -283,13 +312,12 @@ * * 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" + name = "Shattering Crescendo" desc = "Scream at an unnatural pitch, shattering the bodies of your enemies." - level = 5 + level = 6 check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_IMMOBILE | DISC_CHECK_SPEAK target_type = TARGET_MOB From f448df790fe1b4ee634708bb430ae3188a7b7f82 Mon Sep 17 00:00:00 2001 From: dwinters99 <65516417+dwinters99@users.noreply.github.com> Date: Tue, 10 Feb 2026 21:14:53 -0500 Subject: [PATCH 06/10] forked emotion --- .../code/discipline/auspex/emotion_panel.dm | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/modular_darkpack/modules/powers/code/discipline/auspex/emotion_panel.dm b/modular_darkpack/modules/powers/code/discipline/auspex/emotion_panel.dm index 5b0c1ea32d7e..949cf809069d 100644 --- a/modular_darkpack/modules/powers/code/discipline/auspex/emotion_panel.dm +++ b/modular_darkpack/modules/powers/code/discipline/auspex/emotion_panel.dm @@ -38,3 +38,18 @@ attached_effect.owner.emotion_panel() // Regardless if they acctually end up setting anything, clear the status effect qdel(attached_effect) + +/datum/status_effect/forced_emotion + id = "question_emotion" + // Nothing says it needs to be a scene, I just like using our defines to create nice standards of time. + duration = 1 SCENES + + status_type = STATUS_EFFECT_REPLACE + + alert_type = /atom/movable/screen/alert/status_effect/forced_emotion + +/atom/movable/screen/alert/status_effect/forced_emotion + name = "Forced emotion" + desc = "Something is forcing your mind into a particular emotion." + icon = 'modular_darkpack/modules/deprecated/icons/hud/screen_alert.dmi' + icon_state = "in_love" From c8a39abe01857e98711ca11a5566e3865c276519 Mon Sep 17 00:00:00 2001 From: dwinters99 <65516417+dwinters99@users.noreply.github.com> Date: Tue, 10 Feb 2026 21:25:23 -0500 Subject: [PATCH 07/10] i'm DONE for tonight --- .../powers/code/discipline/auspex/auspex.dm | 7 +- .../powers/code/discipline/melpominee.dm | 200 ++++++++++++------ 2 files changed, 137 insertions(+), 70 deletions(-) diff --git a/modular_darkpack/modules/powers/code/discipline/auspex/auspex.dm b/modular_darkpack/modules/powers/code/discipline/auspex/auspex.dm index 14e578e6bde4..548b42725936 100644 --- a/modular_darkpack/modules/powers/code/discipline/auspex/auspex.dm +++ b/modular_darkpack/modules/powers/code/discipline/auspex/auspex.dm @@ -112,9 +112,10 @@ var/datum/atom_hud/data/auspex_aura/target_hud = GLOB.huds[DATA_HUD_AUSPEX_AURAS] target_hud.show_to(owner) - var/list/heard = get_hearers_in_range(DEFAULT_MESSAGE_RANGE, owner) - for(var/mob/living/hearer in heard) - hearer.apply_status_effect(/datum/status_effect/question_emotion) + if(!HAS_TRAIT(src, TRAIT_FORCED_EMOTION)) + var/list/heard = get_hearers_in_range(DEFAULT_MESSAGE_RANGE, owner) + for(var/mob/living/hearer in heard) + hearer.apply_status_effect(/datum/status_effect/question_emotion) /datum/discipline_power/auspex/aura_perception/deactivate() . = ..() diff --git a/modular_darkpack/modules/powers/code/discipline/melpominee.dm b/modular_darkpack/modules/powers/code/discipline/melpominee.dm index f8c6563aed63..a169997488d2 100644 --- a/modular_darkpack/modules/powers/code/discipline/melpominee.dm +++ b/modular_darkpack/modules/powers/code/discipline/melpominee.dm @@ -12,20 +12,24 @@ activate_sound = 'modular_darkpack/modules/powers/sounds/melpominee/melpominee.ogg' vitae_cost = 1 // All Melpominee powers below 5 dots cost blood + var/obj/effect/abstract/particle_holder/particle_generator + +/datum/discipline_power/melpominee/proc/setup_particles() + if(!particle_generator) + particle_generator = new(owner, /particles/melpominee, PARTICLE_ATTACH_MOB) /particles/melpominee - icon = 'icons/effects/particles/generic.dmi' + icon = 'modular_darkpack/modules/phones/icons/phone.dmi' icon_state = list("note" = 1) width = 32 - height = 100 - count = 2 - spawning = 0.1 - lifespan = 2 SECONDS + height = 48 + count = 5 + spawning = 0.5 + lifespan = 5 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)) + gravity = list(0, 0.1) + position = generator(GEN_SPHERE, 0, 16, NORMAL_RAND) + spin = generator(GEN_NUM, -1, 1, NORMAL_RAND) /** * • The Missing Voice - p453 @@ -70,7 +74,7 @@ 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.name = owner.get_generic_name(TRUE, TRUE) + "'s voice" dummy.say(message = new_say, forced = "melpominee 1") QDEL_IN(dummy, 2 TURNS) @@ -95,10 +99,8 @@ check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_SPEAK cooldown_length = 5 SECONDS - // How many messages can be sent without a roll - var/message_turns = 0 - // the guy we last talked to - var/last_guy + // the guys we last talked to + var/list/free_speakers /datum/discipline_power/melpominee/phantom_speaker/activate() . = ..() @@ -114,8 +116,18 @@ if(owner.mind.guestbook.known_names[character.real_name] && character.client) targets += character - var/mob/living/target = tgui_input_list(owner, "Who will you project your voice to?", "Phantom Speaker", targets) - if(!target) + var/list/mob/living/listener_list + var/mob/living/listener + + if(!HAS_TRAIT_FROM(owner, TRAIT_VIRTUOSA, "melpominee 5")) + listener = tgui_input_list(owner, "Who will you project your voice to?", "Phantom Speaker", targets) + if(!listener) + return + listener_list[WEAKREF(listener)] = 0 + else + listener_list = tgui_input_checkboxes(owner, "Who will you project your voice to?", "Phantom Speaker", targets) + + if(!length(listener_list)) return var/input_message = tgui_input_text(owner, "What message will you project to them?", title = "Phantom Speaker") @@ -131,27 +143,34 @@ to_chat(owner, span_danger("You can't emote with [name]!")) return - if(target == last_guy && message_turns) - 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 - var/language = owner.get_selected_language() var/message = owner.compose_message(owner, language, input_message) - if(!message_turns) - var/successes = SSroll.storyteller_roll(owner.st_get_stat(STAT_WITS) + owner.st_get_stat(STAT_PERFORMANCE), 7, owner, numerical = TRUE) - if(successes) - message_turns = successes - else - to_chat(owner, span_userdanger("Your voice falters. Your message is not sent.")) - return - to_chat(target, span_boldannounce("You hear a voice in your head...")) - target.Hear(owner, language, span_purple(message), message_mods = list(MODE_SING)) - to_chat(owner, span_notice("You project your voice to [target]'s ears.")) + var/successes - message_turns-- - last_guy = target + if(listener_list ~= free_speakers) + owner.adjust_blood_pool(1) + else + var/list/unspoken_to = list() + for(var/mob/living/guy in listener_list) + if(!(guy in free_speakers)) + unspoken_to += guy + successes = SSroll.storyteller_roll(owner.st_get_stat(STAT_WITS) + owner.st_get_stat(STAT_PERFORMANCE), 7, owner, numerical = TRUE) + for(var/mob/living/new_guy in unspoken_to) + if(successes) + listener_list[new_guy] = successes + else + listener_list[new_guy] = null + to_chat(owner, span_warning("[new_guy]'s ears are not reached by your song.")) + + var/bp_used = max(1, length(unspoken_to-6)) + owner.adjust_blood_pool(bp_used) + + var/those_who_hear = "[jointext(listener_list, ", ", 1, length(listener_list))], and [listener_list[length(listener_list)]]." + for(var/mob/living/final_listeners in listener_list) + to_chat(final_listeners, span_boldannounce("You hear a voice in your head...")) + final_listeners.Hear(owner, language, span_purple(message), message_mods = list(MODE_SING)) + to_chat(owner, span_notice("Your voice reaches the ears of [those_who_hear]")) /** * ••• Madrigal - p453-454 @@ -186,20 +205,21 @@ set_emotion(member, emotion) /datum/discipline_power/melpominee/madrigal/proc/set_emotion(mob/living/target, emotion) - ADD_TRAIT(target, TRAIT_FORCED_EMOTION, "Madrigal") + ADD_TRAIT(target, TRAIT_FORCED_EMOTION, "melpominee 3") SEND_SIGNAL(src, COMSIG_MOB_EMOTION_CHANGED, emotion) to_chat(target, span_purple("You are overwhelmed with [emotion_to_quality(emotion)].")) + target.apply_status_effect(/datum/status_effect/forced_emotion) /datum/discipline_power/melpominee/madrigal/deactivate() . = ..() for(var/mob/living/carbon/member in audience) - if(HAS_TRAIT_FROM(member, TRAIT_FORCED_EMOTION, "Madrigal")) + if(HAS_TRAIT_FROM(member, TRAIT_FORCED_EMOTION, "melpominee 3")) 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.")) - REMOVE_TRAITS_IN(member, "Madrigal") + REMOVE_TRAITS_IN(member, "melpominee 3") audience = list() @@ -225,55 +245,101 @@ range = 7 duration_length = 4 TURNS cooldown_length = 1 MINUTES - duration_override = FALSE - target_type = TARGET_MOB - - var/uses = 4 + duration_override = TRUE + target_type = TARGET_LIVING + var/list/listener_list = list() + var/list/listeners_failed = list() var/channeling = FALSE - var/particles/particle_generator + var/list/cumulative_list = list() + var/list/cumulative_our_power = list() + var/ticks = 4 + +/datum/discipline_power/melpominee/sirens_beckoning/can_activate(atom/target) + if(HAS_TRAIT(owner, TRAIT_VIRTUOSA)) + target_type = NONE + else + target_type = TARGET_LIVING + + . = ..() -/datum/discipline_power/melpominee/sirens_beckoning/activate(mob/living/target) +/datum/discipline_power/melpominee/sirens_beckoning/activate(mob/living/target) // TODO: sliding difficulty for willpower . = ..() + setup_particles() 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(owner, /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.")) + if(!HAS_TRAIT(owner, TRAIT_VIRTUOSA)) + listener_list += target else - deactivate(listener) + listener_list = ohearers(owner, 7) + + if(!length(listener_list)) return + run_effect(target) + +/datum/discipline_power/melpominee/sirens_beckoning/proc/run_effect(mob/living/carbon/target) + if(ticks > 0) + ticks-- + to_chat(world, "[ticks]") + else + return to_chat(world, "[ticks]") + + if(!HAS_TRAIT(owner, TRAIT_VIRTUOSA)) + listener_list += target + else + listener_list = ohearers(owner, 7) + + for(var/mob/living/carbon/listener in listener_list) // TODO: mark these as spammy rolls + 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) + cumulative_our_power[WEAKREF(listener)] += our_power + 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) + cumulative_list[WEAKREF(listener)] += their_power + if(our_power > their_power && should_run_effect()) + effect(listener) + else + listener_list -= listener + listener.remove_overlay(MUTATIONS_LAYER) + cumulative_our_power[WEAKREF(listener)] = null + cumulative_list[WEAKREF(listener)] = null + + if(channeling && length(listener_list)) + addtimer(CALLBACK(src, PROC_REF(run_effect), target), 1 TURNS) + else + deactivate(target, TRUE) + +/datum/discipline_power/melpominee/sirens_beckoning/proc/should_run_effect() if(!do_after(owner, 1 TURNS, timed_action_flags = IGNORE_HELD_ITEM | IGNORE_INCAPACITATED | IGNORE_SLOWDOWNS) || !owner.can_speak()) - deactivate(listener) + channeling = FALSE return +/datum/discipline_power/melpominee/sirens_beckoning/proc/effect(mob/living/carbon/listener) + 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) + if(cumulative_our_power[WEAKREF(listener)] >= 20) + listener.add_quirk(/datum/quirk/derangement) + + if(cumulative_list[WEAKREF(listener)] <= cumulative_our_power[listener]-6) + if(listener.add_quirk(/datum/quirk/derangement)) + addtimer(CALLBACK(src, PROC_REF(remove_derangement), listener), 1 SCENES) + +/datum/discipline_power/melpominee/sirens_beckoning/proc/remove_derangement(mob/living/carbon/listener) + listener.remove_quirk(/datum/quirk/derangement) + /datum/discipline_power/melpominee/sirens_beckoning/deactivate(mob/living/carbon/target) . = ..() - to_chat(owner, span_purple("You stop singing.")) + for(var/mob/living/carbon/listener in listener_list) + listener.remove_overlay(MUTATIONS_LAYER) + + owner.visible_message(span_purple("[owner]'s haunting melody ceases."), 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 - + ticks = 4 /** * ••••• Shattering Crescendo - p454 From 6eea5b873447be63ab3068d4b465d91e236e82fe Mon Sep 17 00:00:00 2001 From: FalloutFalcon Date: Mon, 16 Feb 2026 17:02:58 -0600 Subject: [PATCH 08/10] reworks to emotion to make its handled less weird. --- code/__DEFINES/~darkpack/auras.dm | 139 +++++++----------- .../modules/mob/dead/observer/observer.dm | 5 +- .../code/modules/mob/living/living.dm | 1 - .../code/modules/mob/living/living_defines.dm | 2 + .../code/modules/mob/mob_defines.dm | 6 +- .../code/modules/mob/mob_helpers.dm | 4 + .../code/discipline/auspex/aura_component.dm | 3 - .../powers/code/discipline/auspex/auspex.dm | 4 +- .../code/discipline/auspex/emotion_panel.dm | 10 +- .../powers/code/discipline/melpominee.dm | 22 +-- tgstation.dme | 1 + 11 files changed, 89 insertions(+), 108 deletions(-) create mode 100644 modular_darkpack/master_files/code/modules/mob/mob_helpers.dm diff --git a/code/__DEFINES/~darkpack/auras.dm b/code/__DEFINES/~darkpack/auras.dm index 783114c6088e..50b05b5baded 100644 --- a/code/__DEFINES/~darkpack/auras.dm +++ b/code/__DEFINES/~darkpack/auras.dm @@ -40,88 +40,59 @@ #define AURA_FAERIE (FALSE) // Rainbow highlights in aura -- Not implemented. Changelings. GLOBAL_LIST_INIT(aura_list, sort_list(list( -"Afraid" = AURA_AFRAID, -"Aggressive" = AURA_AGGRESSIVE, -"Angry" = AURA_ANGRY, -"Bitter" = AURA_BITTER, -"Calm" = AURA_CALM, -"Compassionate" = AURA_COMPASSIONATE, -"Conservative" = AURA_CONSERVATIVE, -"Depressed" = AURA_DEPRESSED, -"Desirous" = AURA_DESIROUS, -"Distrustful" = AURA_DISTRUSTFUL, -"Envious" = AURA_ENVIOUS, -"Excited" = AURA_EXCITED, -"Generous" = AURA_GENEROUS, -"Happy" = AURA_HAPPY, -"Hateful" = AURA_HATEFUL, -"Idealistic" = AURA_IDEALISTIC, -"Innocent" = AURA_INNOCENT, -"Lovestruck" = AURA_LOVESTRUCK, -"Obsessed" = AURA_OBSESSED, -"Sad" = AURA_SAD, -"Spiritual" = AURA_SPIRITUAL, -"Suspicious" = AURA_SUSPICIOUS, -"Anxious" = AURA_ANXIOUS, -"Confused" = AURA_CONFUSED, -"Daydreaming" = AURA_DAYDREAMING, -"Psychotic" = AURA_PSYCHOTIC))) + "Afraid" = AURA_AFRAID, + "Aggressive" = AURA_AGGRESSIVE, + "Angry" = AURA_ANGRY, + "Bitter" = AURA_BITTER, + "Calm" = AURA_CALM, + "Compassionate" = AURA_COMPASSIONATE, + "Conservative" = AURA_CONSERVATIVE, + "Depressed" = AURA_DEPRESSED, + "Desirous" = AURA_DESIROUS, + "Distrustful" = AURA_DISTRUSTFUL, + "Envious" = AURA_ENVIOUS, + "Excited" = AURA_EXCITED, + "Generous" = AURA_GENEROUS, + "Happy" = AURA_HAPPY, + "Hateful" = AURA_HATEFUL, + "Idealistic" = AURA_IDEALISTIC, + "Innocent" = AURA_INNOCENT, + "Lovestruck" = AURA_LOVESTRUCK, + "Obsessed" = AURA_OBSESSED, + "Sad" = AURA_SAD, + "Spiritual" = AURA_SPIRITUAL, + "Suspicious" = AURA_SUSPICIOUS, + "Anxious" = AURA_ANXIOUS, + "Confused" = AURA_CONFUSED, + "Daydreaming" = AURA_DAYDREAMING, + "Psychotic" = AURA_PSYCHOTIC +))) -/proc/emotion_to_quality(emotion) - var/emo_desc = "bad_code" - - switch(emotion) - if(AURA_AFRAID) - emo_desc = "fear" - if(AURA_AGGRESSIVE) - emo_desc = "aggressiveness" - if(AURA_ANGRY) - emo_desc = "anger" - if(AURA_BITTER) - emo_desc = "bitterness" - if(AURA_CALM) - emo_desc = "calmness" - if(AURA_COMPASSIONATE) - emo_desc = "compassion" - if(AURA_CONSERVATIVE) - emo_desc = "conservativeness" - if(AURA_DEPRESSED) - emo_desc = "depression" - if(AURA_DESIROUS) - emo_desc = "desire" - if(AURA_DISTRUSTFUL) - emo_desc = "distrust" - if(AURA_ENVIOUS) - emo_desc = "envy" - if(AURA_EXCITED) - emo_desc = "excitement" - if(AURA_GENEROUS) - emo_desc = "generosity" - if(AURA_HAPPY) - emo_desc = "happiness" - if(AURA_HATEFUL) - emo_desc = "hate" - if(AURA_IDEALISTIC) - emo_desc = "idealism" - if(AURA_INNOCENT) - emo_desc = "innocence" - if(AURA_LOVESTRUCK) - emo_desc = "love" - if(AURA_OBSESSED) - emo_desc = "obsessiveness" - if(AURA_SAD) - emo_desc = "sadness" - if(AURA_SPIRITUAL) - emo_desc = "spirituality" - if(AURA_SUSPICIOUS) - emo_desc = "suspicion" - if(AURA_ANXIOUS) - emo_desc = "anxiety" - if(AURA_CONFUSED) - emo_desc = "confusion" - if(AURA_DAYDREAMING) - emo_desc = "absentmindedness" - if(AURA_PSYCHOTIC) - emo_desc = "psychosis" - - return emo_desc +GLOBAL_LIST_INIT(emotion_to_quality, sort_list(list( + "Afraid" = "fear", + "Aggressive" = "aggressiveness", + "Angry" = "anger", + "Bitter" = "bitterness", + "Calm" = "calmness", + "Compassionate" = "compassion", + "Conservative" = "conservativeness", + "Depressed" = "depression", + "Desirous" = "desire", + "Distrustful" = "distrust", + "Envious" = "envy", + "Excited" = "excitement", + "Generous" = "generosity", + "Happy" = "happiness", + "Hateful" = "hate", + "Idealistic" = "idealism", + "Innocent" = "innocence", + "Lovestruck" = "love", + "Obsessed" = "obsessiveness", + "Sad" = "sadness", + "Spiritual" = "spirituality", + "Suspicious" = "suspicion", + "Anxious" = "anxiety", + "Confused" = "confusion", + "Daydreaming" = "absentmindedness", + "Psychotic" = "psychosis" +))) diff --git a/modular_darkpack/master_files/code/modules/mob/dead/observer/observer.dm b/modular_darkpack/master_files/code/modules/mob/dead/observer/observer.dm index d09ca58068da..d4610f3fadc5 100644 --- a/modular_darkpack/master_files/code/modules/mob/dead/observer/observer.dm +++ b/modular_darkpack/master_files/code/modules/mob/dead/observer/observer.dm @@ -1,6 +1,3 @@ /mob/dead/observer + has_emotion = TRUE var/soul_taken = FALSE //prevents necromancers from farming souls off one singular ghost - -/mob/dead/observer/Initialize(mapload) - . = ..() - AddComponent(/datum/component/aura) diff --git a/modular_darkpack/master_files/code/modules/mob/living/living.dm b/modular_darkpack/master_files/code/modules/mob/living/living.dm index 5bf01e8aff80..59bd200edda7 100644 --- a/modular_darkpack/master_files/code/modules/mob/living/living.dm +++ b/modular_darkpack/master_files/code/modules/mob/living/living.dm @@ -1,7 +1,6 @@ /mob/living/Initialize(mapload) . = ..() storyteller_stats = create_new_stat_prefs(storyteller_stats) - AddComponent(/datum/component/aura) become_area_sensitive("zone_hud") update_zone_hud(src, get_area(src)) diff --git a/modular_darkpack/master_files/code/modules/mob/living/living_defines.dm b/modular_darkpack/master_files/code/modules/mob/living/living_defines.dm index c2910fff93f8..4fd9281479ae 100644 --- a/modular_darkpack/master_files/code/modules/mob/living/living_defines.dm +++ b/modular_darkpack/master_files/code/modules/mob/living/living_defines.dm @@ -1,4 +1,6 @@ /mob/living + has_emotion = TRUE + var/mob/living/lastattacked var/bloodquality = 1 diff --git a/modular_darkpack/master_files/code/modules/mob/mob_defines.dm b/modular_darkpack/master_files/code/modules/mob/mob_defines.dm index 2d87932220f3..f7c9a3d833be 100644 --- a/modular_darkpack/master_files/code/modules/mob/mob_defines.dm +++ b/modular_darkpack/master_files/code/modules/mob/mob_defines.dm @@ -1,3 +1,5 @@ /mob - /// Emotion currently felt by the mob (for Auspex auras etc.) - var/current_emotion = AURA_INNOCENT + /// Emotion currently felt by the mob (for Auspex auras etc.) // (AS A COLOR... ≧ཀ≦) + var/current_emotion = "Innocent" + /// If the mob has emotions and therefore is granted a aura. + var/has_emotion = FALSE diff --git a/modular_darkpack/master_files/code/modules/mob/mob_helpers.dm b/modular_darkpack/master_files/code/modules/mob/mob_helpers.dm new file mode 100644 index 000000000000..d76f797398c7 --- /dev/null +++ b/modular_darkpack/master_files/code/modules/mob/mob_helpers.dm @@ -0,0 +1,4 @@ +/mob/Initialize(mapload) + . = ..() + if(has_emotion) + AddComponent(/datum/component/aura) diff --git a/modular_darkpack/modules/powers/code/discipline/auspex/aura_component.dm b/modular_darkpack/modules/powers/code/discipline/auspex/aura_component.dm index 3bd666ca1cef..b7065fc7a6ee 100644 --- a/modular_darkpack/modules/powers/code/discipline/auspex/aura_component.dm +++ b/modular_darkpack/modules/powers/code/discipline/auspex/aura_component.dm @@ -11,7 +11,6 @@ var/datum/atom_hud/data/auspex_aura/target_hud = GLOB.huds[DATA_HUD_AUSPEX_AURAS] target_hud.add_atom_to_hud(parent_mob) - add_verb(parent_mob, /mob/verb/emotion_panel) RegisterSignal(parent_mob, COMSIG_MOB_EMOTION_CHANGED, PROC_REF(update_emotions)) RegisterSignal(parent_mob, COMSIG_MOB_UPDATE_AURA, PROC_REF(update_aura)) update_aura() @@ -21,7 +20,6 @@ var/datum/atom_hud/data/auspex_aura/target_hud = GLOB.huds[DATA_HUD_AUSPEX_AURAS] target_hud.remove_atom_from_hud(parent_mob) - remove_verb(parent_mob, /mob/verb/emotion_panel) UnregisterSignal(parent_mob, list(COMSIG_MOB_EMOTION_CHANGED, COMSIG_MOB_UPDATE_AURA)) return ..() @@ -32,7 +30,6 @@ return current_aura = GLOB.aura_list[new_emotion] - changed_mob.current_emotion = current_aura update_aura() /datum/component/aura/proc/update_aura() diff --git a/modular_darkpack/modules/powers/code/discipline/auspex/auspex.dm b/modular_darkpack/modules/powers/code/discipline/auspex/auspex.dm index 50cb0aa4f1b2..c14400e6acb0 100644 --- a/modular_darkpack/modules/powers/code/discipline/auspex/auspex.dm +++ b/modular_darkpack/modules/powers/code/discipline/auspex/auspex.dm @@ -116,8 +116,8 @@ var/list/heard = orange(DEFAULT_MESSAGE_RANGE, owner) for(var/mob/living/hearer in heard) - if(!HAS_TRAIT(src, TRAIT_FORCED_EMOTION)) - hearer.apply_status_effect(/datum/status_effect/question_emotion) + if(!HAS_TRAIT(src, TRAIT_FORCED_EMOTION)) + hearer.apply_status_effect(/datum/status_effect/question_emotion) /datum/discipline_power/auspex/aura_perception/deactivate() . = ..() diff --git a/modular_darkpack/modules/powers/code/discipline/auspex/emotion_panel.dm b/modular_darkpack/modules/powers/code/discipline/auspex/emotion_panel.dm index 949cf809069d..4d8d02a2418e 100644 --- a/modular_darkpack/modules/powers/code/discipline/auspex/emotion_panel.dm +++ b/modular_darkpack/modules/powers/code/discipline/auspex/emotion_panel.dm @@ -4,13 +4,21 @@ set category = "IC" set desc = "Change your character's emotions." - if(!HAS_TRAIT(src, TRAIT_FORCED_EMOTION)) + if(HAS_TRAIT(src, TRAIT_FORCED_EMOTION)) to_chat(src, span_warning("You cannot change emotions right now.")) return FALSE + // This really shouldnt be using aura here. it needs to be detached and made unrelenient on aura/auspex. - Fallcon var/new_emotion = tgui_input_list(src, "What are you feeling?", "Feelings", GLOB.aura_list) if(isnull(new_emotion)) return FALSE + set_emotion(new_emotion) + +/mob/proc/set_emotion(new_emotion) + if(current_emotion == new_emotion) + return + + current_emotion = new_emotion SEND_SIGNAL(src, COMSIG_MOB_EMOTION_CHANGED, new_emotion) /datum/status_effect/question_emotion diff --git a/modular_darkpack/modules/powers/code/discipline/melpominee.dm b/modular_darkpack/modules/powers/code/discipline/melpominee.dm index a169997488d2..9d8679af5241 100644 --- a/modular_darkpack/modules/powers/code/discipline/melpominee.dm +++ b/modular_darkpack/modules/powers/code/discipline/melpominee.dm @@ -119,7 +119,7 @@ var/list/mob/living/listener_list var/mob/living/listener - if(!HAS_TRAIT_FROM(owner, TRAIT_VIRTUOSA, "melpominee 5")) + if(!HAS_TRAIT_FROM(owner, TRAIT_VIRTUOSA, type)) listener = tgui_input_list(owner, "Who will you project your voice to?", "Phantom Speaker", targets) if(!listener) return @@ -196,7 +196,7 @@ /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) + var/emotion = tgui_input_list(owner, "What emotion do you wish to incite?", "Madrigal", GLOB.emotion_to_quality) for(var/mob/living/carbon/member in ohearers(7, owner)) audience += member @@ -205,21 +205,21 @@ set_emotion(member, emotion) /datum/discipline_power/melpominee/madrigal/proc/set_emotion(mob/living/target, emotion) - ADD_TRAIT(target, TRAIT_FORCED_EMOTION, "melpominee 3") - SEND_SIGNAL(src, COMSIG_MOB_EMOTION_CHANGED, emotion) + target.set_emotion(emotion) + ADD_TRAIT(target, TRAIT_FORCED_EMOTION, type) - to_chat(target, span_purple("You are overwhelmed with [emotion_to_quality(emotion)].")) + to_chat(target, span_purple("You are overwhelmed with [GLOB.emotion_to_quality[emotion]].")) target.apply_status_effect(/datum/status_effect/forced_emotion) /datum/discipline_power/melpominee/madrigal/deactivate() . = ..() for(var/mob/living/carbon/member in audience) - if(HAS_TRAIT_FROM(member, TRAIT_FORCED_EMOTION, "melpominee 3")) - to_chat(member, span_nicegreen("You are no longer overwhelmed with [emotion_to_quality(member.current_emotion)].")) + if(HAS_TRAIT_FROM(member, TRAIT_FORCED_EMOTION, type)) + to_chat(member, span_nicegreen("You are no longer overwhelmed with [GLOB.emotion_to_quality[member.current_emotion]].")) else - to_chat(member, span_nicegreen("You feel your [emotion_to_quality(member.current_emotion)] weakening.")) + to_chat(member, span_nicegreen("You feel your [GLOB.emotion_to_quality[member.current_emotion]] weakening.")) - REMOVE_TRAITS_IN(member, "melpominee 3") + REMOVE_TRAIT(member, TRAIT_FORCED_EMOTION, type) audience = list() @@ -363,11 +363,11 @@ /datum/discipline_power/melpominee/virtuosa/activate() . = ..() - ADD_TRAIT(owner, TRAIT_VIRTUOSA, "melpominee 5") + ADD_TRAIT(owner, TRAIT_VIRTUOSA, type) /datum/discipline_power/melpominee/virtuosa/deactivate(atom/target, direct) . = ..() - REMOVE_TRAIT(owner, TRAIT_VIRTUOSA, "melpominee 5") + REMOVE_TRAIT(owner, TRAIT_VIRTUOSA, type) /** * ••••• • Shattering Crescendo - p454 diff --git a/tgstation.dme b/tgstation.dme index cb9e322eaeb1..8e5b4c429372 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -6944,6 +6944,7 @@ #include "modular_darkpack\master_files\code\modules\fishing\sources\subtypes\turfs.dm" #include "modular_darkpack\master_files\code\modules\hydroponics\grown.dm" #include "modular_darkpack\master_files\code\modules\mob\mob_defines.dm" +#include "modular_darkpack\master_files\code\modules\mob\mob_helpers.dm" #include "modular_darkpack\master_files\code\modules\mob\dead\observer\observer.dm" #include "modular_darkpack\master_files\code\modules\mob\living\init_signals.dm" #include "modular_darkpack\master_files\code\modules\mob\living\living.dm" From e07dd03211fb155996eaafc83e8edcd4cc2a8ea9 Mon Sep 17 00:00:00 2001 From: FalloutFalcon Date: Mon, 16 Feb 2026 17:50:19 -0600 Subject: [PATCH 09/10] some fixes to melp --- .../code/discipline/__discipline_power.dm | 3 + .../powers/code/discipline/melpominee.dm | 56 ++++++++++--------- .../code/negative_quirks/derangement.dm | 2 +- 3 files changed, 35 insertions(+), 26 deletions(-) diff --git a/modular_darkpack/modules/powers/code/discipline/__discipline_power.dm b/modular_darkpack/modules/powers/code/discipline/__discipline_power.dm index 13a0d14b5dd0..8fb51c6846fe 100644 --- a/modular_darkpack/modules/powers/code/discipline/__discipline_power.dm +++ b/modular_darkpack/modules/powers/code/discipline/__discipline_power.dm @@ -717,6 +717,9 @@ * duration_timer expire without calling the relevant proc. */ /datum/discipline_power/proc/clear_duration_timer(to_clear = 1) + if(duration_override) + return + if (toggled && (duration_length == 0)) return diff --git a/modular_darkpack/modules/powers/code/discipline/melpominee.dm b/modular_darkpack/modules/powers/code/discipline/melpominee.dm index 9d8679af5241..6a8444a4a689 100644 --- a/modular_darkpack/modules/powers/code/discipline/melpominee.dm +++ b/modular_darkpack/modules/powers/code/discipline/melpominee.dm @@ -252,7 +252,7 @@ var/channeling = FALSE var/list/cumulative_list = list() var/list/cumulative_our_power = list() - var/ticks = 4 + var/turns_left = 4 /datum/discipline_power/melpominee/sirens_beckoning/can_activate(atom/target) if(HAS_TRAIT(owner, TRAIT_VIRTUOSA)) @@ -271,49 +271,48 @@ channeling = TRUE if(!HAS_TRAIT(owner, TRAIT_VIRTUOSA)) - listener_list += target + if(!target) + return else - listener_list = ohearers(owner, 7) - - if(!length(listener_list)) - return + if(!length(ohearers(owner, 7))) + return run_effect(target) /datum/discipline_power/melpominee/sirens_beckoning/proc/run_effect(mob/living/carbon/target) - if(ticks > 0) - ticks-- - to_chat(world, "[ticks]") + if(turns_left > 0) + turns_left-- + to_chat(world, "[turns_left]") else - return to_chat(world, "[ticks]") + return to_chat(world, "[turns_left]") if(!HAS_TRAIT(owner, TRAIT_VIRTUOSA)) - listener_list += target + listener_list = list(target) else listener_list = ohearers(owner, 7) for(var/mob/living/carbon/listener in listener_list) // TODO: mark these as spammy rolls 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) - cumulative_our_power[WEAKREF(listener)] += our_power + cumulative_our_power[listener] += our_power 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) - cumulative_list[WEAKREF(listener)] += their_power - if(our_power > their_power && should_run_effect()) + cumulative_list[listener] += their_power + if(our_power > their_power && should_run_effect(listener)) effect(listener) else listener_list -= listener listener.remove_overlay(MUTATIONS_LAYER) - cumulative_our_power[WEAKREF(listener)] = null - cumulative_list[WEAKREF(listener)] = null + cumulative_our_power[listener] = null + cumulative_list[listener] = null - if(channeling && length(listener_list)) - addtimer(CALLBACK(src, PROC_REF(run_effect), target), 1 TURNS) + if(do_after(owner, 1 TURNS, timed_action_flags = IGNORE_HELD_ITEM | IGNORE_INCAPACITATED | IGNORE_SLOWDOWNS) && channeling && length(listener_list)) + run_effect(target) else deactivate(target, TRUE) -/datum/discipline_power/melpominee/sirens_beckoning/proc/should_run_effect() - if(!do_after(owner, 1 TURNS, timed_action_flags = IGNORE_HELD_ITEM | IGNORE_INCAPACITATED | IGNORE_SLOWDOWNS) || !owner.can_speak()) - channeling = FALSE - return +/datum/discipline_power/melpominee/sirens_beckoning/proc/should_run_effect(mob/living/listener) + if(!owner.can_speak()) + return FALSE + return TRUE /datum/discipline_power/melpominee/sirens_beckoning/proc/effect(mob/living/carbon/listener) listener.Stun(1 TURNS) @@ -321,10 +320,10 @@ 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) - if(cumulative_our_power[WEAKREF(listener)] >= 20) + if(cumulative_our_power[listener] >= 20) listener.add_quirk(/datum/quirk/derangement) - if(cumulative_list[WEAKREF(listener)] <= cumulative_our_power[listener]-6) + if(cumulative_list[listener] <= cumulative_our_power[listener]-6) if(listener.add_quirk(/datum/quirk/derangement)) addtimer(CALLBACK(src, PROC_REF(remove_derangement), listener), 1 SCENES) @@ -339,7 +338,14 @@ owner.visible_message(span_purple("[owner]'s haunting melody ceases."), span_purple("You stop singing.")) channeling = FALSE QDEL_NULL(particle_generator) - ticks = 4 + turns_left = 4 + + // These can still be a source of hardels if they happen mid ability. + // But it would need a bigger refactor so we only have to handle 1 weakref/1 list per guy to avoid nightmare code. + listener_list = list() + listeners_failed = list() + cumulative_list = list() + cumulative_our_power = list() /** * ••••• Shattering Crescendo - p454 diff --git a/modular_darkpack/modules/quirks/code/negative_quirks/derangement.dm b/modular_darkpack/modules/quirks/code/negative_quirks/derangement.dm index 494bea3a29eb..b183b21156fc 100644 --- a/modular_darkpack/modules/quirks/code/negative_quirks/derangement.dm +++ b/modular_darkpack/modules/quirks/code/negative_quirks/derangement.dm @@ -103,7 +103,7 @@ var/language = hallucinator.get_random_understood_language() var/message = hallucinator.compose_message(speaker, language, speech) hallucinator.playsound_local(hallucinator, audible_hallucinations[speech], vol = 20, vary = TRUE) - if(hallucinator.client.prefs.read_preference(/datum/preference/toggle/see_rc_emotes)) + if(hallucinatorclient.prefs?.read_preference(/datum/preference/toggle/see_rc_emotes)) hallucinator.create_chat_message(speaker, language, speech, spans = list(hallucinator.speech_span)) to_chat(target = hallucinator, text = message) From 2a26813cf6faa7ad2aa5a90318d30984a0eae374 Mon Sep 17 00:00:00 2001 From: FalloutFalcon Date: Mon, 16 Feb 2026 17:57:56 -0600 Subject: [PATCH 10/10] yea --- modular_darkpack/modules/powers/code/discipline/melpominee.dm | 4 ++-- .../modules/quirks/code/negative_quirks/derangement.dm | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/modular_darkpack/modules/powers/code/discipline/melpominee.dm b/modular_darkpack/modules/powers/code/discipline/melpominee.dm index 6a8444a4a689..9f670b7d09d8 100644 --- a/modular_darkpack/modules/powers/code/discipline/melpominee.dm +++ b/modular_darkpack/modules/powers/code/discipline/melpominee.dm @@ -282,9 +282,9 @@ /datum/discipline_power/melpominee/sirens_beckoning/proc/run_effect(mob/living/carbon/target) if(turns_left > 0) turns_left-- - to_chat(world, "[turns_left]") else - return to_chat(world, "[turns_left]") + deactivate(target, TRUE) + return FALSE if(!HAS_TRAIT(owner, TRAIT_VIRTUOSA)) listener_list = list(target) diff --git a/modular_darkpack/modules/quirks/code/negative_quirks/derangement.dm b/modular_darkpack/modules/quirks/code/negative_quirks/derangement.dm index b183b21156fc..782c19b1e768 100644 --- a/modular_darkpack/modules/quirks/code/negative_quirks/derangement.dm +++ b/modular_darkpack/modules/quirks/code/negative_quirks/derangement.dm @@ -21,6 +21,8 @@ derangements = subtypesof(/datum/hallucination/malk) /datum/quirk/derangement/process(seconds_per_tick) + if(!client) + return if(!COOLDOWN_FINISHED(src, next_process)) return if(SPT_PROB(2, seconds_per_tick)) @@ -103,7 +105,7 @@ var/language = hallucinator.get_random_understood_language() var/message = hallucinator.compose_message(speaker, language, speech) hallucinator.playsound_local(hallucinator, audible_hallucinations[speech], vol = 20, vary = TRUE) - if(hallucinatorclient.prefs?.read_preference(/datum/preference/toggle/see_rc_emotes)) + if(hallucinator.client.prefs.read_preference(/datum/preference/toggle/see_rc_emotes)) hallucinator.create_chat_message(speaker, language, speech, spans = list(hallucinator.speech_span)) to_chat(target = hallucinator, text = message)