From 0a8eac73881d4df2504565e9e98bdc4782d2b393 Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Thu, 19 Feb 2026 21:20:17 +0200 Subject: [PATCH 1/8] obeah 1 --- .../powers/code/discipline/healer_valeren.dm | 154 ------------------ .../modules/powers/code/discipline/obeah.dm | 127 +++++++++++++++ .../valeren.ogg => powers/sounds/obeah.ogg} | Bin .../code/vampire_clan/clans/salubri.dm | 2 +- tgstation.dme | 1 + 5 files changed, 129 insertions(+), 155 deletions(-) delete mode 100644 modular_darkpack/modules/powers/code/discipline/healer_valeren.dm create mode 100644 modular_darkpack/modules/powers/code/discipline/obeah.dm rename modular_darkpack/modules/{deprecated/sounds/valeren.ogg => powers/sounds/obeah.ogg} (100%) diff --git a/modular_darkpack/modules/powers/code/discipline/healer_valeren.dm b/modular_darkpack/modules/powers/code/discipline/healer_valeren.dm deleted file mode 100644 index e87e80955ba0..000000000000 --- a/modular_darkpack/modules/powers/code/discipline/healer_valeren.dm +++ /dev/null @@ -1,154 +0,0 @@ -/datum/discipline/valeren - name = "Healer Valeren" - desc = "Use your third eye in healing or protecting needs." - icon_state = "valeren" - clan_restricted = TRUE - power_type = /datum/discipline_power/valeren - -/datum/discipline_power/valeren - name = "Valeren power name" - desc = "Valeren power description" - - activate_sound = 'modular_darkpack/modules/deprecated/sounds/valeren.ogg' - -//SENSE VITALITY -/datum/discipline_power/valeren/sense_vitality - name = "Sense Vitality" - desc = "Discipline power description" - - level = 1 - check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_IMMOBILE | DISC_CHECK_FREE_HAND - target_type = TARGET_MOB - range = 1 - - cooldown_length = 5 SECONDS - -/datum/discipline_power/valeren/sense_vitality/activate(mob/living/target) - . = ..() - healthscan(owner, target, 1, FALSE) - chemscan(owner, target) - to_chat(owner, "[target] has [num2text(target.bloodpool)]/[target.maxbloodpool] blood points.") - to_chat(owner, "[target] has a rating of [target.humanity] on their path.") - -//ANESTHETIC TOUCH -/datum/discipline_power/valeren/anesthetic_touch - name = "Anesthetic Touch" - desc = "Soothe your patient's pain, or put them to peaceful sleep." - - level = 2 - check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_LYING | DISC_CHECK_FREE_HAND - target_type = TARGET_LIVING - range = 1 - - aggravating = TRUE - hostile = TRUE - - cooldown_length = 20 SECONDS - -/datum/discipline_power/valeren/anesthetic_touch/activate(mob/living/target) - . = ..() - //I'm not a fan of how punishing this is towards human players, but not my job to rework it - if (ismundane(target)) - target.SetSleeping(15 SECONDS) - else - target.add_confusion(5) - target.drowsyness += 4 - -//CORPORE SANO -/datum/discipline_power/valeren/corpore_sano - name = "Corpore Sano" - desc = "Lay hands on your patient and heal their wounds." - - level = 3 - check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_FREE_HAND | DISC_CHECK_IMMOBILE - target_type = TARGET_LIVING - range = 1 - - violates_masquerade = TRUE - - cooldown_length = 5 SECONDS - -/datum/discipline_power/valeren/corpore_sano/activate(mob/living/target) - . = ..() - owner.Beam(target, icon_state="sm_arc", time = 5 SECONDS, maxdistance = 9, beam_type = /obj/effect/ebeam/medical) - - target.heal_ordered_damage(60, list(BRUTE, TOX, BURN, AGGRAVATED, OXY, BRAIN)) - if(ishuman(target)) - var/mob/living/carbon/human/human_target = target - if(length(human_target.all_wounds)) - var/datum/wound/wound = pick(human_target.all_wounds) - wound.remove_wound() - - target.update_damage_overlays() - target.update_health_hud() - -//SHEPHERD'S WATCH -/datum/discipline_power/valeren/shepherds_watch - name = "Shepherd's Watch" - desc = "Create a supernatural barrier to protect yourself from harm." - - level = 4 - - cooldown_length = 40 SECONDS - -/datum/discipline_power/valeren/shepherds_watch/activate() - . = ..() - for (var/turf/turf in orange(1, get_turf(owner))) - new /obj/effect/forcefield/wizard(turf, owner) - -//UNBURDEN THE BESTIAL SOUL -/datum/discipline_power/valeren/unburden_the_bestial_soul - name = "Unburden The Bestial Soul" - desc = "Draw out a Kindred's soul and heal it of impurities." - - level = 5 - check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_IMMOBILE | DISC_CHECK_FREE_HAND - target_type = TARGET_LIVING - range = 1 - - cooldown_length = 5 SECONDS - - var/points_can_restore = 3 - -/datum/discipline_power/valeren/unburden_the_bestial_soul/can_activate_untargeted(alert) - . = ..() - - if (points_can_restore <= 0) - if (alert) - to_chat(owner, span_warning("You've exhausted yourself too much to cleanse more souls.")) - return FALSE - - return . - -/datum/discipline_power/valeren/unburden_the_bestial_soul/can_activate(mob/living/target, alert) - . = ..() - - if (!iskindred(target)) - if (alert) - to_chat(owner, span_warning("[src] can only be used on Kindred.")) - return FALSE - - if (!target.client) - if (alert) - to_chat(owner, span_warning("[target] does not have a soul to cleanse!")) - return FALSE - - if (target.humanity >= 10 && !target.client?.prefs?.enlightenment) - if (alert) - to_chat(owner, span_warning("[target]'s soul is already completely pure.")) - return FALSE - - return . - -/datum/discipline_power/valeren/unburden_the_bestial_soul/pre_activation_checks(mob/living/carbon/human/target) - to_chat(owner, span_warning("You begin cleansing [target]'s soul...")) - if (do_mob(owner, target, 10 SECONDS)) - return TRUE - -/datum/discipline_power/valeren/unburden_the_bestial_soul/activate(mob/living/carbon/human/target) - . = ..() - to_chat(owner, span_notice("You have healed [target]'s soul slightly.")) - SEND_SIGNAL(owner, COMSIG_PATH_HIT, 1, 10, FALSE) - points_can_restore-- - - diff --git a/modular_darkpack/modules/powers/code/discipline/obeah.dm b/modular_darkpack/modules/powers/code/discipline/obeah.dm new file mode 100644 index 000000000000..98de8d6fd0cc --- /dev/null +++ b/modular_darkpack/modules/powers/code/discipline/obeah.dm @@ -0,0 +1,127 @@ +/datum/discipline/obeah + name = "Obeah" + desc = "Use your third eye in healing or protecting needs." + icon_state = "obeah" + clan_restricted = TRUE + power_type = /datum/discipline_power/obeah + +/datum/discipline_power/obeah + name = "Valeren power name" + desc = "Valeren power description" + + activate_sound = 'modular_darkpack/modules/powers/sounds/obeah.ogg' + +//SENSE VITALITY +/datum/discipline_power/obeah/sense_vitality + name = "Sense Vitality" + desc = "Discipline power description" + + level = 1 + check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_FREE_HAND + target_type = TARGET_MOB | TARGET_SELF + range = 1 + vitae_cost = 0 + cooldown_length = 1 TURNS + + +// perception + empathy at diff 7 +// 1 success = splat +// 2 success = splat + vitals +// 3 success = splat + vital + current bloodpool +/datum/discipline_power/obeah/sense_vitality/activate(mob/living/target) + . = ..() + var/datum/storyteller_roll/sense_vitality_roll = new() + sense_vitality_roll.applicable_stats = list(STAT_PERCEPTION, STAT_EMPATHY) + sense_vitality_roll.difficulty = 7 + sense_vitality_roll.numerical = TRUE + sense_vitality_roll.roll_output_type = ROLL_PRIVATE_ADMIN + var/roll_result = sense_vitality_roll.st_roll(owner) + + var/list/render_list = list() + render_list = do_roll_results(target, roll_result) + to_chat(owner, custom_boxed_message("blue_box", jointext(render_list, "")), type = MESSAGE_TYPE_INFO) + +/datum/discipline_power/obeah/sense_vitality/proc/do_roll_results(mob/living/target, roll_result) + var/list/render_list = list() + if(roll_result < 1) + render_list += span_danger("You fail to sense anything.\n") + return render_list + + // One Success. + var/sensed_splat = sense_splat(target) + render_list += span_notice("You identify them to be a [sensed_splat ? sensed_splat : "Human"].\n") + + if(roll_result < 2) + return render_list + // Two Successes. + render_list += custom_boxed_message("blue_box", healthscan(user = owner, target = target, mode = SCANNER_VERBOSE, advanced = TRUE, tochat = FALSE)) + + if(roll_result < 3) + return render_list + // Three Successes. + var/mob/living/carbon/human/target_human = target + var/bloodpool = target_human?.bloodpool + render_list += span_notice("You sense they have [bloodpool ? bloodpool : "no"] Vitae remaining.\n") + return render_list + +/datum/discipline_power/obeah/sense_vitality/proc/sense_splat(mob/living/target) + for(var/datum/splat/splat in target.splats) + return splat.name + +////////////////////////////////////////////////////////////////////////////////////////////////////////// +/* +//ANESTHETIC TOUCH +/datum/discipline_power/obeah/anesthetic_touch + name = "Anesthetic Touch" + desc = "Soothe your patient's pain, or put them to peaceful sleep." + + level = 2 + check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_LYING | DISC_CHECK_FREE_HAND + target_type = TARGET_LIVING + range = 1 + + aggravating = TRUE + hostile = TRUE + + cooldown_length = 20 SECONDS + +/datum/discipline_power/obeah/anesthetic_touch/activate(mob/living/target) + . = ..() + +//CORPORE SANO +/datum/discipline_power/obeah/corpore_sano + name = "Corpore Sano" + desc = "Lay hands on your patient and heal their wounds." + + level = 3 + check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_FREE_HAND | DISC_CHECK_IMMOBILE + target_type = TARGET_LIVING + range = 1 + + violates_masquerade = TRUE + + cooldown_length = 5 SECONDS + + +//SHEPHERD'S WATCH +/datum/discipline_power/obeah/shepherds_watch + name = "Shepherd's Watch" + desc = "Create a supernatural barrier to protect yourself from harm." + + level = 4 + + cooldown_length = 40 SECONDS + +//UNBURDEN THE BESTIAL SOUL +/datum/discipline_power/obeah/unburden_the_bestial_soul + name = "Unburden The Bestial Soul" + desc = "Draw out a Kindred's soul and heal it of impurities." + + level = 5 + check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_IMMOBILE | DISC_CHECK_FREE_HAND + target_type = TARGET_LIVING + range = 1 + + cooldown_length = 5 SECONDS + +*/ diff --git a/modular_darkpack/modules/deprecated/sounds/valeren.ogg b/modular_darkpack/modules/powers/sounds/obeah.ogg similarity index 100% rename from modular_darkpack/modules/deprecated/sounds/valeren.ogg rename to modular_darkpack/modules/powers/sounds/obeah.ogg diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/salubri.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/salubri.dm index afb4b00d3df6..297650e159cb 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/salubri.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/salubri.dm @@ -7,7 +7,7 @@ clan_disciplines = list( /datum/discipline/auspex, /datum/discipline/fortitude, - // /datum/discipline/valeren + /datum/discipline/obeah ) clan_traits = list( TRAIT_CONSENSUAL_FEEDING_ONLY, diff --git a/tgstation.dme b/tgstation.dme index e857ed933c51..6889da0c5742 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7386,6 +7386,7 @@ #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\necromancy.dm" +#include "modular_darkpack\modules\powers\code\discipline\obeah.dm" #include "modular_darkpack\modules\powers\code\discipline\obtenebration.dm" #include "modular_darkpack\modules\powers\code\discipline\serpentis.dm" #include "modular_darkpack\modules\powers\code\discipline\torpor.dm" From b8e6ffeca908e88db128de69c8c089e3ced48614 Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Thu, 19 Feb 2026 21:31:14 +0200 Subject: [PATCH 2/8] obeah 2 --- .../modules/deprecated/icons/UI/actions.dmi | Bin 2705 -> 5783 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/modular_darkpack/modules/deprecated/icons/UI/actions.dmi b/modular_darkpack/modules/deprecated/icons/UI/actions.dmi index e767f06b944aebeddb5ccd16dcb199830b044b11..a89e8088cc58e74657ffc87696d8a3301685d36e 100644 GIT binary patch delta 5725 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 K)IPv$BK`{wVb8Gu delta 2662 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 Date: Thu, 19 Feb 2026 21:49:58 +0200 Subject: [PATCH 3/8] Update obeah.dm --- .../modules/powers/code/discipline/obeah.dm | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/modular_darkpack/modules/powers/code/discipline/obeah.dm b/modular_darkpack/modules/powers/code/discipline/obeah.dm index 98de8d6fd0cc..d77bcff3104e 100644 --- a/modular_darkpack/modules/powers/code/discipline/obeah.dm +++ b/modular_darkpack/modules/powers/code/discipline/obeah.dm @@ -23,7 +23,6 @@ vitae_cost = 0 cooldown_length = 1 TURNS - // perception + empathy at diff 7 // 1 success = splat // 2 success = splat + vitals @@ -48,8 +47,8 @@ return render_list // One Success. - var/sensed_splat = sense_splat(target) - render_list += span_notice("You identify them to be a [sensed_splat ? sensed_splat : "Human"].\n") + var/datum/splat/sensed_splat = LAZYACCESS(target.splats, 1) + render_list += span_notice("You identify them to be a [sensed_splat ? sensed_splat.name : "Human"].\n") if(roll_result < 2) return render_list @@ -64,30 +63,27 @@ render_list += span_notice("You sense they have [bloodpool ? bloodpool : "no"] Vitae remaining.\n") return render_list -/datum/discipline_power/obeah/sense_vitality/proc/sense_splat(mob/living/target) - for(var/datum/splat/splat in target.splats) - return splat.name - ////////////////////////////////////////////////////////////////////////////////////////////////////////// -/* + //ANESTHETIC TOUCH /datum/discipline_power/obeah/anesthetic_touch name = "Anesthetic Touch" desc = "Soothe your patient's pain, or put them to peaceful sleep." level = 2 - check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_LYING | DISC_CHECK_FREE_HAND + check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_FREE_HAND target_type = TARGET_LIVING range = 1 + cooldown_length = 1 TURNS - aggravating = TRUE - hostile = TRUE - - cooldown_length = 20 SECONDS - +// LMB: Block someone's pain +// RMB: Put mortal to sleep. /datum/discipline_power/obeah/anesthetic_touch/activate(mob/living/target) . = ..() +////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/* //CORPORE SANO /datum/discipline_power/obeah/corpore_sano name = "Corpore Sano" From 849ae0b6f7e8c78f2faf24dce05545cb78128176 Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Thu, 19 Feb 2026 22:46:02 +0200 Subject: [PATCH 4/8] Update obeah.dm --- .../modules/powers/code/discipline/obeah.dm | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/modular_darkpack/modules/powers/code/discipline/obeah.dm b/modular_darkpack/modules/powers/code/discipline/obeah.dm index d77bcff3104e..bf31aea5ed10 100644 --- a/modular_darkpack/modules/powers/code/discipline/obeah.dm +++ b/modular_darkpack/modules/powers/code/discipline/obeah.dm @@ -78,8 +78,18 @@ // LMB: Block someone's pain // RMB: Put mortal to sleep. -/datum/discipline_power/obeah/anesthetic_touch/activate(mob/living/target) +/datum/discipline_power/obeah/anesthetic_touch/activate(atom/target) . = ..() + var/chosen_option = show_radial_menu(target, list("Soothe Pain", "Put To Sleep"), "Anesthetic Touch", 10 SECONDS) + switch(chosen_option) + if("Soothe Pain") + return TRUE + if("Put To Sleep") + if(iskindred(target)) + to_chat(owner, span_warning("You can't put a Kindred to sleep with this power!")) + return TRUE + return TRUE + return TRUE ////////////////////////////////////////////////////////////////////////////////////////////////////////// From 65ea60bfd5e114080730d34e1c62173de3688e4c Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Thu, 19 Feb 2026 23:01:18 +0200 Subject: [PATCH 5/8] Update obeah.dm --- modular_darkpack/modules/powers/code/discipline/obeah.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modular_darkpack/modules/powers/code/discipline/obeah.dm b/modular_darkpack/modules/powers/code/discipline/obeah.dm index bf31aea5ed10..bd535a9a2068 100644 --- a/modular_darkpack/modules/powers/code/discipline/obeah.dm +++ b/modular_darkpack/modules/powers/code/discipline/obeah.dm @@ -14,7 +14,7 @@ //SENSE VITALITY /datum/discipline_power/obeah/sense_vitality name = "Sense Vitality" - desc = "Discipline power description" + desc = "Focus your senses to read the vitality of a target." level = 1 check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_FREE_HAND @@ -80,7 +80,7 @@ // RMB: Put mortal to sleep. /datum/discipline_power/obeah/anesthetic_touch/activate(atom/target) . = ..() - var/chosen_option = show_radial_menu(target, list("Soothe Pain", "Put To Sleep"), "Anesthetic Touch", 10 SECONDS) + var/chosen_option = show_radial_menu(owner, target, list("Soothe Pain", "Put To Sleep"), radius = 38, require_near = TRUE) switch(chosen_option) if("Soothe Pain") return TRUE From d536cf41a4a764200a398ff4a48c5ae9c859db5d Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Sat, 21 Feb 2026 11:33:49 +0200 Subject: [PATCH 6/8] DISCIPLINE_TRAIT(type) --- code/__DEFINES/~darkpack/traits/macros.dm | 2 ++ code/__DEFINES/~darkpack/traits/sources.dm | 1 - .../powers/code/discipline/auspex/auspex.dm | 14 ++++++------ .../powers/code/discipline/necromancy.dm | 2 +- .../powers/code/discipline/obtenebration.dm | 2 +- .../quietus/fields/silence_of_death_aoe.dm | 22 +++++++++---------- .../powers/code/discipline/serpentis.dm | 12 +++++----- .../code/discipline/temporis/temporis.dm | 2 +- .../discipline/thaumaturgy/path_of_blood.dm | 2 +- .../discipline/vicissitude/vicissitude.dm | 2 +- .../code/blood_power.dm | 4 ++-- 11 files changed, 33 insertions(+), 32 deletions(-) diff --git a/code/__DEFINES/~darkpack/traits/macros.dm b/code/__DEFINES/~darkpack/traits/macros.dm index e69de29bb2d1..864a9e0b1ae6 100644 --- a/code/__DEFINES/~darkpack/traits/macros.dm +++ b/code/__DEFINES/~darkpack/traits/macros.dm @@ -0,0 +1,2 @@ +/// Trait applied by element +#define DISCIPLINE_TRAIT(source) "discipline_trait_[source]" diff --git a/code/__DEFINES/~darkpack/traits/sources.dm b/code/__DEFINES/~darkpack/traits/sources.dm index 6402f89925de..a440d2ae7ea7 100644 --- a/code/__DEFINES/~darkpack/traits/sources.dm +++ b/code/__DEFINES/~darkpack/traits/sources.dm @@ -2,7 +2,6 @@ /// Trait given by a vampire's Clan #define CLAN_TRAIT "clan" -#define DISCIPLINE_TRAIT "discipline" #define STAKE_TRAIT "stake" #define DAMAGE_TRAIT "damage" diff --git a/modular_darkpack/modules/powers/code/discipline/auspex/auspex.dm b/modular_darkpack/modules/powers/code/discipline/auspex/auspex.dm index 48a88e37241c..08873bd00d17 100644 --- a/modular_darkpack/modules/powers/code/discipline/auspex/auspex.dm +++ b/modular_darkpack/modules/powers/code/discipline/auspex/auspex.dm @@ -48,18 +48,18 @@ if(SENSE_VISION in output_senses) owner.client?.view_size?.setTo(2) // This increases the view size of the player by 2 tiles in each direction. I dont know why it's called Set if it Adds. - ADD_TRAIT(owner, TRAIT_REFLECTIVE_EYES, DISCIPLINE_TRAIT) + ADD_TRAIT(owner, TRAIT_REFLECTIVE_EYES, DISCIPLINE_TRAIT(type)) var/obj/item/organ/eyes/kindred_eyes = owner.get_organ_slot(ORGAN_SLOT_EYES) if(kindred_eyes) kindred_eyes.flash_protect = max(kindred_eyes.flash_protect += -2, FLASH_PROTECTION_HYPER_SENSITIVE) if(SENSE_HEARING in output_senses) - ADD_TRAIT(owner, TRAIT_GOOD_HEARING, DISCIPLINE_TRAIT) + ADD_TRAIT(owner, TRAIT_GOOD_HEARING, DISCIPLINE_TRAIT(type)) var/obj/item/organ/ears/kindred_ears = owner.get_organ_slot(ORGAN_SLOT_EARS) kindred_ears.damage_multiplier = kindred_ears.damage_multiplier + 1 if(SENSE_SMELL in output_senses) - owner.dna?.add_mutation(/datum/mutation/olfaction, DISCIPLINE_TRAIT) + owner.dna?.add_mutation(/datum/mutation/olfaction, DISCIPLINE_TRAIT(type)) if(SENSE_TASTE in output_senses) - ADD_TRAIT(owner, TRAIT_REAGENT_SCANNER, DISCIPLINE_TRAIT) + ADD_TRAIT(owner, TRAIT_REAGENT_SCANNER, DISCIPLINE_TRAIT(type)) if(SENSE_TOUCH in output_senses) RegisterSignals(owner, list(COMSIG_CARBON_HELP_ACT, COMSIG_ON_CARBON_SLIP, COMSIG_LIVING_DISARM_HIT, COMSIG_LIVING_TRYING_TO_PULL), PROC_REF(on_touch)) owner.AddComponent(/datum/component/heartbeat_sensing, color_path = /datum/client_colour/psyker) @@ -73,17 +73,17 @@ if(mutation) owner.dna?.remove_mutation(mutation, mutation.sources) // Hearing - REMOVE_TRAIT(owner, TRAIT_GOOD_HEARING, DISCIPLINE_TRAIT) + REMOVE_TRAIT(owner, TRAIT_GOOD_HEARING, DISCIPLINE_TRAIT(type)) var/obj/item/organ/ears/kindred_ears = owner.get_organ_slot(ORGAN_SLOT_EARS) kindred_ears.damage_multiplier = initial(kindred_ears.damage_multiplier) // Vision owner.client?.view_size?.resetToDefault() - REMOVE_TRAIT(owner, TRAIT_REFLECTIVE_EYES, DISCIPLINE_TRAIT) + REMOVE_TRAIT(owner, TRAIT_REFLECTIVE_EYES, DISCIPLINE_TRAIT(type)) var/obj/item/organ/eyes/kindred_eyes = owner.get_organ_slot(ORGAN_SLOT_EYES) if(kindred_eyes) kindred_eyes.flash_protect = max(kindred_eyes.flash_protect += 2, FLASH_PROTECTION_NONE) // Taste - REMOVE_TRAIT(owner, TRAIT_REAGENT_SCANNER, DISCIPLINE_TRAIT) + REMOVE_TRAIT(owner, TRAIT_REAGENT_SCANNER, DISCIPLINE_TRAIT(type)) // Touch UnregisterSignal(owner, list(COMSIG_CARBON_HELP_ACT, COMSIG_ON_CARBON_SLIP, COMSIG_LIVING_DISARM_HIT, COMSIG_LIVING_TRYING_TO_PULL)) qdel(owner.GetComponent(/datum/component/heartbeat_sensing)) diff --git a/modular_darkpack/modules/powers/code/discipline/necromancy.dm b/modular_darkpack/modules/powers/code/discipline/necromancy.dm index 6001934b793f..e4da9a6f6749 100644 --- a/modular_darkpack/modules/powers/code/discipline/necromancy.dm +++ b/modular_darkpack/modules/powers/code/discipline/necromancy.dm @@ -12,7 +12,7 @@ owner.add_faction(VAMPIRE_CLAN_GIOVANNI) var/datum/action/ritual_drawing/necromancy/ritualist = new() - ADD_TRAIT(owner, TRAIT_NECROMANCY_KNOWLEDGE, DISCIPLINE_TRAIT) + ADD_TRAIT(owner, TRAIT_NECROMANCY_KNOWLEDGE, DISCIPLINE_TRAIT(type)) ritualist.Grant(owner) ritualist.level = level diff --git a/modular_darkpack/modules/powers/code/discipline/obtenebration.dm b/modular_darkpack/modules/powers/code/discipline/obtenebration.dm index 30572b4a214f..24b77c7a9071 100644 --- a/modular_darkpack/modules/powers/code/discipline/obtenebration.dm +++ b/modular_darkpack/modules/powers/code/discipline/obtenebration.dm @@ -10,7 +10,7 @@ var/datum/action/ritual_drawing/mysticism/mystic = new() mystic.Grant(owner) mystic.level = level - ADD_TRAIT(owner, TRAIT_MYSTICISM_KNOWLEDGE, DISCIPLINE_TRAIT) + ADD_TRAIT(owner, TRAIT_MYSTICISM_KNOWLEDGE, DISCIPLINE_TRAIT(type)) /datum/discipline_power/obtenebration diff --git a/modular_darkpack/modules/powers/code/discipline/quietus/fields/silence_of_death_aoe.dm b/modular_darkpack/modules/powers/code/discipline/quietus/fields/silence_of_death_aoe.dm index 5864674617d7..de258b8f4431 100644 --- a/modular_darkpack/modules/powers/code/discipline/quietus/fields/silence_of_death_aoe.dm +++ b/modular_darkpack/modules/powers/code/discipline/quietus/fields/silence_of_death_aoe.dm @@ -9,13 +9,13 @@ . = ..() silenced_mobs = list() if(ishuman(_host)) - ADD_TRAIT(_host, TRAIT_SILENCED, DISCIPLINE_TRAIT) + ADD_TRAIT(_host, TRAIT_SILENCED, DISCIPLINE_TRAIT(type)) silenced_mobs |= _host /datum/proximity_monitor/advanced/silence_of_death/Destroy() for(var/mob/living/carbon/human/H in silenced_mobs) - REMOVE_TRAIT(H, TRAIT_SILENCED, DISCIPLINE_TRAIT) - REMOVE_TRAIT(H, TRAIT_MUTE, DISCIPLINE_TRAIT) + REMOVE_TRAIT(H, TRAIT_SILENCED, DISCIPLINE_TRAIT(type)) + REMOVE_TRAIT(H, TRAIT_MUTE, DISCIPLINE_TRAIT(type)) silenced_mobs = null return ..() @@ -29,10 +29,10 @@ return var/mob/living/carbon/human/H = entered - ADD_TRAIT(H, TRAIT_SILENCED, DISCIPLINE_TRAIT) + ADD_TRAIT(H, TRAIT_SILENCED, DISCIPLINE_TRAIT(type)) if(H != host) - ADD_TRAIT(H, TRAIT_MUTE, DISCIPLINE_TRAIT) + ADD_TRAIT(H, TRAIT_MUTE, DISCIPLINE_TRAIT(type)) H.adjust_confusion_up_to(15 SECONDS, 15 SECONDS) @@ -50,16 +50,16 @@ return var/mob/living/carbon/human/H = gone - REMOVE_TRAIT(H, TRAIT_SILENCED, DISCIPLINE_TRAIT) - REMOVE_TRAIT(H, TRAIT_MUTE, DISCIPLINE_TRAIT) + REMOVE_TRAIT(H, TRAIT_SILENCED, DISCIPLINE_TRAIT(type)) + REMOVE_TRAIT(H, TRAIT_MUTE, DISCIPLINE_TRAIT(type)) silenced_mobs -= H /datum/proximity_monitor/advanced/silence_of_death/on_z_change() if(QDELETED(src)) return for(var/mob/living/carbon/human/H in silenced_mobs) - REMOVE_TRAIT(H, TRAIT_SILENCED, DISCIPLINE_TRAIT) - REMOVE_TRAIT(H, TRAIT_MUTE, DISCIPLINE_TRAIT) + REMOVE_TRAIT(H, TRAIT_SILENCED, DISCIPLINE_TRAIT(type)) + REMOVE_TRAIT(H, TRAIT_MUTE, DISCIPLINE_TRAIT(type)) silenced_mobs.Cut() /datum/proximity_monitor/advanced/silence_of_death/cleanup_field_turf(turf/target) @@ -67,6 +67,6 @@ return for(var/mob/living/carbon/human/H in target.contents) if((H in silenced_mobs) && H != host) - REMOVE_TRAIT(H, TRAIT_SILENCED, DISCIPLINE_TRAIT) - REMOVE_TRAIT(H, TRAIT_MUTE, DISCIPLINE_TRAIT) + REMOVE_TRAIT(H, TRAIT_SILENCED, DISCIPLINE_TRAIT(type)) + REMOVE_TRAIT(H, TRAIT_MUTE, DISCIPLINE_TRAIT(type)) silenced_mobs -= H diff --git a/modular_darkpack/modules/powers/code/discipline/serpentis.dm b/modular_darkpack/modules/powers/code/discipline/serpentis.dm index ae576f3aec15..1384f25c69d9 100644 --- a/modular_darkpack/modules/powers/code/discipline/serpentis.dm +++ b/modular_darkpack/modules/powers/code/discipline/serpentis.dm @@ -117,10 +117,10 @@ if(choice == "Obvious") owner.st_add_stat_mod(STAT_INTIMIDATION, 2, "Serpentis") // 'reduce intimidation difficulties by two' placeholder owner.st_add_stat_mod(STAT_STAMINA, 3, "Serpentis") // 'reduces all soak difficulty to 5' placeholder - ADD_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_FACE, DISCIPLINE_TRAIT) + ADD_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_FACE, DISCIPLINE_TRAIT(type)) else owner.st_add_stat_mod(STAT_STAMINA, 2, "Serpentis") // permanently on with no downsides according to dav20. its staying at fort one bro - ADD_TRAIT(owner, TRAIT_SERPENTIS_SKIN, DISCIPLINE_TRAIT) //ideally this would either be blatantly obvious or not so much depending on the choice. I guess masq violating face trait will work for obvious. + ADD_TRAIT(owner, TRAIT_SERPENTIS_SKIN, DISCIPLINE_TRAIT(type)) //ideally this would either be blatantly obvious or not so much depending on the choice. I guess masq violating face trait will work for obvious. owner.st_add_stat_mod(STAT_APPEARANCE, -(owner.st_get_stat(STAT_APPEARANCE) - 1), "Serpentis") /* owner.Stun(duration_length) @@ -132,10 +132,10 @@ if(choice == "Obvious") owner.st_remove_stat_mod(STAT_INTIMIDATION, 2, "Serpentis") owner.st_remove_stat_mod(STAT_STAMINA, 3, "Serpentis") - REMOVE_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_FACE, DISCIPLINE_TRAIT) + REMOVE_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_FACE, DISCIPLINE_TRAIT(type)) else owner.st_remove_stat_mod(STAT_STAMINA, 2, "Serpentis") - REMOVE_TRAIT(owner, TRAIT_SERPENTIS_SKIN, DISCIPLINE_TRAIT) + REMOVE_TRAIT(owner, TRAIT_SERPENTIS_SKIN, DISCIPLINE_TRAIT(type)) owner.st_remove_stat_mod(STAT_APPEARANCE, "Serpentis") @@ -246,7 +246,7 @@ owner.dna.species.inherent_traits |= TRAIT_STUNIMMUNE owner.dna.species.inherent_traits |= TRAIT_SLEEPIMMUNE owner.dna.species.inherent_traits |= TRAIT_NOSOFTCRIT - ADD_TRAIT(owner, TRAIT_STAKE_IMMUNE, DISCIPLINE_TRAIT) + ADD_TRAIT(owner, TRAIT_STAKE_IMMUNE, DISCIPLINE_TRAIT(type)) urn = new(owner.loc) urn.own = owner //var/obj/item/organ/heart/heart = owner.get_organ_slot(ORGAN_SLOT_HEART) DARKPACK TODO - Vampire Organs need to be made useless @@ -256,7 +256,7 @@ owner.dna.species.inherent_traits -= TRAIT_STUNIMMUNE owner.dna.species.inherent_traits -= TRAIT_SLEEPIMMUNE owner.dna.species.inherent_traits -= TRAIT_NOSOFTCRIT - REMOVE_TRAIT(owner, TRAIT_STAKE_IMMUNE, DISCIPLINE_TRAIT) + REMOVE_TRAIT(owner, TRAIT_STAKE_IMMUNE, DISCIPLINE_TRAIT(type)) //for(var/obj/item/organ/heart/heart in urn) //heart.forceMove(owner) //heart.Insert(owner) diff --git a/modular_darkpack/modules/powers/code/discipline/temporis/temporis.dm b/modular_darkpack/modules/powers/code/discipline/temporis/temporis.dm index 839b6e4bb325..a811e90c4688 100644 --- a/modular_darkpack/modules/powers/code/discipline/temporis/temporis.dm +++ b/modular_darkpack/modules/powers/code/discipline/temporis/temporis.dm @@ -13,7 +13,7 @@ /datum/discipline_power/temporis/activate() . = ..() - ADD_TRAIT(owner, TRAIT_TIMEWARPER, DISCIPLINE_TRAIT) + ADD_TRAIT(owner, TRAIT_TIMEWARPER, DISCIPLINE_TRAIT(type)) /datum/discipline_power/temporis/proc/celerity_explode(datum/source, datum/discipline_power/power, atom/target) SIGNAL_HANDLER diff --git a/modular_darkpack/modules/powers/code/discipline/thaumaturgy/path_of_blood.dm b/modular_darkpack/modules/powers/code/discipline/thaumaturgy/path_of_blood.dm index 172e5df29b76..ff211930d1da 100644 --- a/modular_darkpack/modules/powers/code/discipline/thaumaturgy/path_of_blood.dm +++ b/modular_darkpack/modules/powers/code/discipline/thaumaturgy/path_of_blood.dm @@ -11,7 +11,7 @@ var/datum/action/ritual_drawing/thaumaturgy/thaumaturgy = new() thaumaturgy.Grant(owner) thaumaturgy.level = level - ADD_TRAIT(owner, TRAIT_THAUMATURGY_KNOWLEDGE, DISCIPLINE_TRAIT) + ADD_TRAIT(owner, TRAIT_THAUMATURGY_KNOWLEDGE, DISCIPLINE_TRAIT(type)) add_verb(owner, /mob/living/carbon/human/proc/check_research_points) /datum/discipline_power/thaumaturgy diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm index 6054c713b9a6..1e89c00a33be 100644 --- a/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm +++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm @@ -8,7 +8,7 @@ /datum/discipline/vicissitude/post_gain() . = ..() owner.faction |= VAMPIRE_CLAN_TZIMISCE - ADD_TRAIT(owner, TRAIT_VICISSITUDE_KNOWLEDGE, DISCIPLINE_TRAIT) + ADD_TRAIT(owner, TRAIT_VICISSITUDE_KNOWLEDGE, DISCIPLINE_TRAIT(type)) /datum/discipline_power/vicissitude name = "Vicissitude power name" diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/blood_power.dm b/modular_darkpack/modules/vampire_the_masquerade/code/blood_power.dm index b49b8a0ad234..4f845727c2b0 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/blood_power.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/blood_power.dm @@ -60,7 +60,7 @@ human_owner.adjust_blood_pool(-current_bp_cost(human_owner)) - ADD_TRAIT(human_owner, TRAIT_IGNORESLOWDOWN, MAGIC_TRAIT) + ADD_TRAIT(human_owner, TRAIT_IGNORESLOWDOWN, DISCIPLINE_TRAIT(type)) addtimer(CALLBACK(src, PROC_REF(end_bloodpower)), cooldown_time) @@ -84,7 +84,7 @@ human_owner.st_remove_stat_mod(STAT_DEXTERITY, "blood_power") human_owner.st_remove_stat_mod(STAT_STAMINA, "blood_power") - REMOVE_TRAIT(human_owner, TRAIT_IGNORESLOWDOWN, MAGIC_TRAIT) + REMOVE_TRAIT(human_owner, TRAIT_IGNORESLOWDOWN, DISCIPLINE_TRAIT(type)) /datum/action/cooldown/blood_power/proc/set_usage() var/turns = tgui_input_number(owner, "Set turns ([1 TURNS / 10] seconds per turn) to use blood for.", "Set Bloodpower Turns", turns_activated, TURNS_PER_SCENE, 1) From 20888d96b0b38a07fbd61abd4073568f2c1c0712 Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Sat, 21 Feb 2026 13:07:02 +0200 Subject: [PATCH 7/8] obeah 2 --- .../modules/powers/code/discipline/obeah.dm | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/modular_darkpack/modules/powers/code/discipline/obeah.dm b/modular_darkpack/modules/powers/code/discipline/obeah.dm index bd535a9a2068..2793b6bf2ad2 100644 --- a/modular_darkpack/modules/powers/code/discipline/obeah.dm +++ b/modular_darkpack/modules/powers/code/discipline/obeah.dm @@ -78,19 +78,24 @@ // LMB: Block someone's pain // RMB: Put mortal to sleep. -/datum/discipline_power/obeah/anesthetic_touch/activate(atom/target) +/datum/discipline_power/obeah/anesthetic_touch/activate(mob/living/target) . = ..() var/chosen_option = show_radial_menu(owner, target, list("Soothe Pain", "Put To Sleep"), radius = 38, require_near = TRUE) switch(chosen_option) if("Soothe Pain") - return TRUE + ADD_TRAIT(target, TRAIT_IGNORESLOWDOWN, DISCIPLINE_TRAIT(type)) + addtimer(CALLBACK(src, PROC_REF(end_soothe_pain), target), 1 SCENES) if("Put To Sleep") if(iskindred(target)) to_chat(owner, span_warning("You can't put a Kindred to sleep with this power!")) return TRUE - return TRUE + target.SetSleeping(10 SCENES) // 30 minutes if left alone + target.adjust_blood_pool(1) // Mortal regains a blood point. return TRUE +/datum/discipline_power/obeah/anesthetic_touch/proc/end_soothe_pain(mob/living/target) + REMOVE_TRAIT(target, TRAIT_IGNORESLOWDOWN, DISCIPLINE_TRAIT(type)) + ////////////////////////////////////////////////////////////////////////////////////////////////////////// /* From ddfbb8660cfe1801d0fec2444ac38b68490e96aa Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Sat, 21 Feb 2026 13:07:38 +0200 Subject: [PATCH 8/8] Update obeah.dm --- modular_darkpack/modules/powers/code/discipline/obeah.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/modular_darkpack/modules/powers/code/discipline/obeah.dm b/modular_darkpack/modules/powers/code/discipline/obeah.dm index 2793b6bf2ad2..4d6615d48ce3 100644 --- a/modular_darkpack/modules/powers/code/discipline/obeah.dm +++ b/modular_darkpack/modules/powers/code/discipline/obeah.dm @@ -76,6 +76,7 @@ range = 1 cooldown_length = 1 TURNS +// TO DO, make this use two mouse buttons instead of radial menu. // LMB: Block someone's pain // RMB: Put mortal to sleep. /datum/discipline_power/obeah/anesthetic_touch/activate(mob/living/target)