From 583ba9a9f963fe8cb9cbed13b3a8640c2f30689d Mon Sep 17 00:00:00 2001 From: FalloutFalcon Date: Tue, 17 Feb 2026 10:49:17 -0600 Subject: [PATCH 1/7] frenzy --- .../kiss_status_effect/status_effect_kiss.dm | 2 +- .../modules/blood_drinking/code/vamp_bite.dm | 2 +- .../modules/frenzy/code/frenzy.dm | 141 ++++++++++-------- tgstation.dme | 1 + 4 files changed, 80 insertions(+), 66 deletions(-) diff --git a/modular_darkpack/modules/blood_drinking/code/kiss_status_effect/status_effect_kiss.dm b/modular_darkpack/modules/blood_drinking/code/kiss_status_effect/status_effect_kiss.dm index d7bb45fbd1a6..cdb7fb2ad875 100644 --- a/modular_darkpack/modules/blood_drinking/code/kiss_status_effect/status_effect_kiss.dm +++ b/modular_darkpack/modules/blood_drinking/code/kiss_status_effect/status_effect_kiss.dm @@ -28,5 +28,5 @@ icon_state = "in_love" //would be good to give this it's own icon eventually /datum/client_colour/brightened - priority = CLIENT_COLOR_HELMET_PRIORITY + priority = CLIENT_COLOR_IMPORTANT_PRIORITY color = list(1.15,0,0,0,1.15,0,0,0,1.15,0,0,0) diff --git a/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm b/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm index 5317381c1521..c45850062e81 100644 --- a/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm +++ b/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm @@ -47,7 +47,7 @@ var/frenzy_result = frezy_roll.st_roll(src, bit_living) if(frenzy_result != ROLL_SUCCESS) to_chat(src, span_userdanger("The taste of blood sends you into a frenzy as you feed!")) - // DARKPACK TODO: frenzy, please put the call here + enter_frenzy_mode() else to_chat(src, span_green("The taste of fresh blood while hungry almost drives you into frenzy!")) diff --git a/modular_darkpack/modules/frenzy/code/frenzy.dm b/modular_darkpack/modules/frenzy/code/frenzy.dm index 0c92e39d15a0..79d48a445605 100644 --- a/modular_darkpack/modules/frenzy/code/frenzy.dm +++ b/modular_darkpack/modules/frenzy/code/frenzy.dm @@ -1,7 +1,10 @@ -//Here's things for future madness +// V20 p.298 + W20 p.261 -//add_client_colour(/datum/client_colour/glass_colour/red) -//remove_client_colour(/datum/client_colour/glass_colour/red) +/datum/client_colour/frenzy + priority = CLIENT_COLOR_IMPORTANT_PRIORITY + color = "#bb5555" + +/* /client/Click(object,location,control,params) if(isatom(object)) if(ishuman(mob)) @@ -9,82 +12,87 @@ if(H.in_frenzy) return ..() +*/ + + +/* +/datum/storyteller_roll/frenzy +/mob/living/carbon/human/proc/rollfrenzy() + if(!client && !isnpc(src)) // I guess this is to make sure afk players dont have there characters frenzy while they arent here? + return -/mob/living/carbon/proc/rollfrenzy() - if(client) - if(isgarou(src) || iswerewolf(src)) - to_chat(src, "I'm full of [span_danger("ANGER")], and I'm about to flare up in [span_danger("RAGE")]. Rolling...") - else if(iskindred(src)) - to_chat(src, "I need [span_danger("BLOOD")]. The [span_danger("BEAST")] is calling. Rolling...") + if(iskindred(src)) + to_chat(src, "I need [span_danger("BLOOD")]. The [span_danger("BEAST")] is calling. Rolling...") + /* // DARKPACK TODO - WEREWOLF + else if(isshifter(src)) + to_chat(src, "I'm full of [span_danger("ANGER")], and I'm about to flare up in [span_danger("RAGE")]. Rolling...") + */ + else + to_chat(src, "I'm too [span_danger("AFRAID")] to continue doing this. Rolling...") + SEND_SOUND(src, sound('modular_darkpack/modules/deprecated/sounds/bloodneed.ogg', volume = 50)) + + var/check = SSroll.storyteller_roll(max(1, round(humanity/2)), min(frenzy_chance_boost, frenzy_hardness), src) + + // Modifier for frenzy duration + var/length_modifier = HAS_TRAIT(src, TRAIT_LONGER_FRENZY) ? 2 : 1 + + switch(check) + if (DICE_CRIT_FAILURE) + enter_frenzy_mode() + addtimer(CALLBACK(src, PROC_REF(exit_frenzy_mode)), 3 TURNS * length_modifier) + frenzy_hardness = 1 + if (DICE_FAILURE) + enter_frenzy_mode() + addtimer(CALLBACK(src, PROC_REF(exit_frenzy_mode)), 1 TURNS * length_modifier) + frenzy_hardness = 1 + if (DICE_CRIT_WIN) + frenzy_hardness = max(1, frenzy_hardness - 1) else - to_chat(src, "I'm too [span_danger("AFRAID")] to continue doing this. Rolling...") - SEND_SOUND(src, sound('modular_darkpack/modules/deprecated/sounds/bloodneed.ogg', volume = 50)) - - var/check = SSroll.storyteller_roll(max(1, round(humanity/2)), min(frenzy_chance_boost, frenzy_hardness), src) - - // Modifier for frenzy duration - var/length_modifier = HAS_TRAIT(src, TRAIT_LONGER_FRENZY) ? 2 : 1 - - switch(check) - if (DICE_CRIT_FAILURE) - enter_frenzymod() - addtimer(CALLBACK(src, PROC_REF(exit_frenzymod)), 20 SECONDS * length_modifier) - frenzy_hardness = 1 - if (DICE_FAILURE) - enter_frenzymod() - addtimer(CALLBACK(src, PROC_REF(exit_frenzymod)), 10 SECONDS * length_modifier) - frenzy_hardness = 1 - if (DICE_CRIT_WIN) - frenzy_hardness = max(1, frenzy_hardness - 1) - else - frenzy_hardness = min(10, frenzy_hardness + 1) + frenzy_hardness = min(10, frenzy_hardness + 1) +*/ -/mob/living/carbon/proc/enter_frenzymod() - if (in_frenzy) +/mob/living/carbon/human/proc/enter_frenzy_mode() + if(HAS_TRAIT(src, TRAIT_IN_FRENZY)) return + ADD_TRAIT(src, TRAIT_IN_FRENZY, INNATE_TRAIT) + message_admins("[ADMIN_LOOKUPFLW(src)] has entered frenzy") + log_message("has entered frenzy.", LOG_GAME) SEND_SOUND(src, sound('modular_darkpack/modules/frenzy/sounds/frenzy.ogg', volume = 50)) - in_frenzy = TRUE - add_client_colour(/datum/client_colour/glass_colour/red) - demon_chi = 0 - GLOB.frenzy_list += src + add_client_colour(/datum/client_colour/frenzy) + + // This is assuming no other interaction happens to remove it before this. + addtimer(CALLBACK(src, PROC_REF(exit_frenzy_mode)), 1 SCENES) -/mob/living/carbon/proc/exit_frenzymod() - if (!in_frenzy) +/mob/living/carbon/human/proc/exit_frenzy_mode() + if(!HAS_TRAIT(src, TRAIT_IN_FRENZY)) return + REMOVE_TRAIT(src, TRAIT_IN_FRENZY, INNATE_TRAIT) + log_message("has exited frenzy.", LOG_GAME) + + remove_client_colour(/datum/client_colour/frenzy) - in_frenzy = FALSE - remove_client_colour(/datum/client_colour/glass_colour/red) - GLOB.frenzy_list -= src - -/mob/living/carbon/proc/CheckFrenzyMove() - if(stat >= SOFT_CRIT) - return TRUE - if(IsSleeping()) - return TRUE - if(IsUnconscious()) - return TRUE - if(IsParalyzed()) - return TRUE - if(IsKnockdown()) - return TRUE - if(IsStun()) - return TRUE +/mob/living/carbon/human/proc/can_frenzy_move() + if(HAS_TRAIT(src, TRAIT_INCAPACITATED)) + return FALSE if(HAS_TRAIT(src, TRAIT_RESTRAINED)) - return TRUE + return FALSE -/mob/living/carbon/proc/frenzystep() - if(!isturf(loc) || CheckFrenzyMove()) + return TRUE + +/mob/living/carbon/human/proc/frenzystep() + if(!isturf(loc) || can_frenzy_move()) return if(move_intent == MOVE_INTENT_WALK) toggle_move_intent(src) - set_glide_size(DELAY_TO_GLIDE_SIZE(cached_multiplicative_slowdown)) var/atom/fear = get_closest_atom(/obj/effect/abstract/turf_fire, view(7, src), src) -// if(!fear && !frenzy_target) -// return + var/frenzy_target + if(!fear && !frenzy_target) + return + /* if(iskindred(src)) if(fear) step_away(src,fear,99) @@ -122,8 +130,10 @@ else step_to(src,frenzy_target,0) face_atom(frenzy_target) + */ -/mob/living/carbon/proc/get_frenzy_targets() +/* +/mob/living/carbon/human/proc/get_frenzy_targets() var/list/targets = list() if(iskindred(src)) for(var/mob/living/L in oviewers(DEFAULT_SIGHT_DISTANCE, src)) @@ -141,8 +151,10 @@ return pick(targets) else return null +*/ -/mob/living/carbon/proc/handle_automated_frenzy() +/* +/mob/living/carbon/human/proc/handle_automated_frenzy() for(var/mob/living/carbon/human/npc/NPC in viewers(5, src)) NPC.Aggro(src) if(isturf(loc)) @@ -153,8 +165,9 @@ for(var/i in 1 to reqsteps) addtimer(cb, (i - 1)*cached_multiplicative_slowdown) else - if(!CheckFrenzyMove()) + if(!can_frenzy_move()) if(isturf(loc)) var/turf/T = get_step(loc, pick(NORTH, SOUTH, WEST, EAST)) face_atom(T) Move(T) +*/ diff --git a/tgstation.dme b/tgstation.dme index 367abcf91a06..1be00a67b598 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7152,6 +7152,7 @@ #include "modular_darkpack\modules\forensics\code\forensic_gatherer.dm" #include "modular_darkpack\modules\forensics\code\serial_number_log.dm" #include "modular_darkpack\modules\forensics\code\serial_numbering.dm" +#include "modular_darkpack\modules\frenzy\code\frenzy.dm" #include "modular_darkpack\modules\government\code\carry_permit.dm" #include "modular_darkpack\modules\government\code\drivers_license.dm" #include "modular_darkpack\modules\government\code\passport.dm" From e8a461a72f6667949ef36a8d1b2fbedfe5e68e05 Mon Sep 17 00:00:00 2001 From: FalloutFalcon Date: Tue, 17 Feb 2026 12:50:42 -0600 Subject: [PATCH 2/7] ffrenzy --- code/__DEFINES/~darkpack/traits/sources.dm | 2 + code/game/objects/items/cigarettes.dm | 1 + .../kiss_status_effect/status_effect_kiss.dm | 4 +- .../modules/blood_drinking/code/vamp_bite.dm | 8 +-- .../modules/frenzy/code/frenzy.dm | 65 +++++++++++++----- .../modules/frenzy/code/status_effect.dm | 40 +++++++++++ .../modules/frenzy/icons/frenzy_overlay.dmi | Bin 0 -> 586 bytes tgstation.dme | 1 + 8 files changed, 98 insertions(+), 23 deletions(-) create mode 100644 modular_darkpack/modules/frenzy/code/status_effect.dm create mode 100644 modular_darkpack/modules/frenzy/icons/frenzy_overlay.dmi diff --git a/code/__DEFINES/~darkpack/traits/sources.dm b/code/__DEFINES/~darkpack/traits/sources.dm index 6402f89925de..27de70c1cba1 100644 --- a/code/__DEFINES/~darkpack/traits/sources.dm +++ b/code/__DEFINES/~darkpack/traits/sources.dm @@ -11,3 +11,5 @@ // used by the obfuscate ability #define OBFUSCATE_TRAIT "obfuscate_trait" + +#define FRENZY_TRAIT "frenzy" // FRENZY diff --git a/code/game/objects/items/cigarettes.dm b/code/game/objects/items/cigarettes.dm index 4a4ab465f0ae..b587f47cfd8d 100644 --- a/code/game/objects/items/cigarettes.dm +++ b/code/game/objects/items/cigarettes.dm @@ -460,6 +460,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM var/mob/living/carbon/smoker = loc if(src == smoker.wear_mask) make_mob_smoke(smoker) + smoker.trigger_rotschreck(src, 3) // DARKPACK EDIT ADD - FRENZY /obj/item/cigarette/extinguish() . = ..() diff --git a/modular_darkpack/modules/blood_drinking/code/kiss_status_effect/status_effect_kiss.dm b/modular_darkpack/modules/blood_drinking/code/kiss_status_effect/status_effect_kiss.dm index cdb7fb2ad875..a0d21c6823b7 100644 --- a/modular_darkpack/modules/blood_drinking/code/kiss_status_effect/status_effect_kiss.dm +++ b/modular_darkpack/modules/blood_drinking/code/kiss_status_effect/status_effect_kiss.dm @@ -7,7 +7,7 @@ /datum/status_effect/kissed/on_apply() . = ..() to_chat(owner, span_userlove("Sharp fangs pierce your skin, but the pain quickly fades as a numbing warmth sets in...")) //feel free to change these - owner.add_client_colour(/datum/client_colour/brightened) + owner.add_client_colour(/datum/client_colour/brightened, "kissed") if(ishuman(owner)) var/mob/living/carbon/human/H = owner H.adjust_eye_blur(15) @@ -15,7 +15,7 @@ /datum/status_effect/kissed/on_remove() to_chat(owner, span_userlove("As you wake, you find it hard to recall anything of the past few minutes. All you remember is a pleasant, warm feeling.")) //feel free to change these - owner.remove_client_colour(/datum/client_colour/brightened) + owner.remove_client_colour("kissed") owner.SetSleeping(50) if(ishuman(owner)) var/mob/living/carbon/human/H = owner diff --git a/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm b/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm index c45850062e81..67ed20872e73 100644 --- a/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm +++ b/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm @@ -42,12 +42,12 @@ if(iskindred(src) && HAS_TRAIT(src, TRAIT_NEEDS_BLOOD)) var/datum/splat/vampire/kindred/kindred_species = iskindred(src) var/stat_to_roll = kindred_species.enlightenment ? STAT_INSTINCT : STAT_SELF_CONTROL - var/datum/storyteller_roll/frezy_roll = new() - frezy_roll.applicable_stats = list(stat_to_roll) - var/frenzy_result = frezy_roll.st_roll(src, bit_living) + var/datum/storyteller_roll/frenzy_roll = new() + frenzy_roll.applicable_stats = list(stat_to_roll) + var/frenzy_result = frenzy_roll.st_roll(src, bit_living) if(frenzy_result != ROLL_SUCCESS) to_chat(src, span_userdanger("The taste of blood sends you into a frenzy as you feed!")) - enter_frenzy_mode() + enter_frenzy_mode(bit_living) else to_chat(src, span_green("The taste of fresh blood while hungry almost drives you into frenzy!")) diff --git a/modular_darkpack/modules/frenzy/code/frenzy.dm b/modular_darkpack/modules/frenzy/code/frenzy.dm index 79d48a445605..e7302df3e1de 100644 --- a/modular_darkpack/modules/frenzy/code/frenzy.dm +++ b/modular_darkpack/modules/frenzy/code/frenzy.dm @@ -1,8 +1,5 @@ // V20 p.298 + W20 p.261 -/datum/client_colour/frenzy - priority = CLIENT_COLOR_IMPORTANT_PRIORITY - color = "#bb5555" /* /client/Click(object,location,control,params) @@ -17,7 +14,7 @@ /* /datum/storyteller_roll/frenzy -/mob/living/carbon/human/proc/rollfrenzy() +/mob/living/carbon/proc/rollfrenzy() if(!client && !isnpc(src)) // I guess this is to make sure afk players dont have there characters frenzy while they arent here? return @@ -51,28 +48,51 @@ frenzy_hardness = min(10, frenzy_hardness + 1) */ -/mob/living/carbon/human/proc/enter_frenzy_mode() +/mob/living/carbon/proc/enter_frenzy_mode(atom/target, fleeing = FALSE) if(HAS_TRAIT(src, TRAIT_IN_FRENZY)) return - ADD_TRAIT(src, TRAIT_IN_FRENZY, INNATE_TRAIT) + ADD_TRAIT(src, TRAIT_IN_FRENZY, FRENZY_TRAIT) message_admins("[ADMIN_LOOKUPFLW(src)] has entered frenzy") - log_message("has entered frenzy.", LOG_GAME) + log_message("entered frenzy.", LOG_GAME) + + if(fleeing) + to_chat(src, span_danger("FLEE.")) + else + to_chat(src, span_bolddanger("FRENZY.")) SEND_SOUND(src, sound('modular_darkpack/modules/frenzy/sounds/frenzy.ogg', volume = 50)) - add_client_colour(/datum/client_colour/frenzy) + + apply_status_effect(/datum/status_effect/frenzy, target) // This is assuming no other interaction happens to remove it before this. - addtimer(CALLBACK(src, PROC_REF(exit_frenzy_mode)), 1 SCENES) + addtimer(CALLBACK(src, PROC_REF(exit_frenzy_mode)), 3 TURNS) -/mob/living/carbon/human/proc/exit_frenzy_mode() +/mob/living/carbon/proc/exit_frenzy_mode() if(!HAS_TRAIT(src, TRAIT_IN_FRENZY)) return - REMOVE_TRAIT(src, TRAIT_IN_FRENZY, INNATE_TRAIT) - log_message("has exited frenzy.", LOG_GAME) + REMOVE_TRAIT(src, TRAIT_IN_FRENZY, FRENZY_TRAIT) + log_message("exited frenzy.", LOG_GAME) + + remove_status_effect(/datum/status_effect/frenzy) - remove_client_colour(/datum/client_colour/frenzy) +/datum/storyteller_roll/rotschreck + applicable_stats = list(STAT_COURAGE) + numerical = TRUE + +/mob/living/carbon/proc/trigger_rotschreck(atom/fire, difficulty = 6) + var/datum/storyteller_roll/rotschreck/frenzy_roll = new() + frenzy_roll.difficulty = difficulty + var/frenzy_result = frenzy_roll.st_roll(src, fire) + if(frenzy_result >= 5) + return + // Mabye change some logic to signals as well. + if(iskindred(src)) + enter_frenzy_mode(fire, TRUE) -/mob/living/carbon/human/proc/can_frenzy_move() +// Unimplemented + + +/mob/living/carbon/proc/can_frenzy_move() if(HAS_TRAIT(src, TRAIT_INCAPACITATED)) return FALSE if(HAS_TRAIT(src, TRAIT_RESTRAINED)) @@ -80,7 +100,7 @@ return TRUE -/mob/living/carbon/human/proc/frenzystep() +/mob/living/carbon/proc/frenzystep() if(!isturf(loc) || can_frenzy_move()) return if(move_intent == MOVE_INTENT_WALK) @@ -133,7 +153,7 @@ */ /* -/mob/living/carbon/human/proc/get_frenzy_targets() +/mob/living/carbon/proc/get_frenzy_targets() var/list/targets = list() if(iskindred(src)) for(var/mob/living/L in oviewers(DEFAULT_SIGHT_DISTANCE, src)) @@ -154,7 +174,7 @@ */ /* -/mob/living/carbon/human/proc/handle_automated_frenzy() +/mob/living/carbon/proc/handle_automated_frenzy() for(var/mob/living/carbon/human/npc/NPC in viewers(5, src)) NPC.Aggro(src) if(isturf(loc)) @@ -171,3 +191,14 @@ face_atom(T) Move(T) */ + +#warn placeholder +/mob/living/carbon/verb/manual_frenzy(atom/movable/AM as mob|obj in oview(7)) + set name = "Frenzy" + set category = "Object" + + if(!issupernatural(src)) + return + + if(istype(AM)) + enter_frenzy_mode(AM) diff --git a/modular_darkpack/modules/frenzy/code/status_effect.dm b/modular_darkpack/modules/frenzy/code/status_effect.dm new file mode 100644 index 000000000000..9b87b8ffdafd --- /dev/null +++ b/modular_darkpack/modules/frenzy/code/status_effect.dm @@ -0,0 +1,40 @@ +/datum/client_colour/frenzy + priority = CLIENT_COLOR_IMPORTANT_PRIORITY + color = COLOR_RED + +/datum/status_effect/frenzy + id = "frenzy" + duration = STATUS_EFFECT_PERMANENT + status_type = STATUS_EFFECT_REFRESH + alert_type = /atom/movable/screen/alert/status_effect/frenzy + var/datum/weakref/frenzy_ref + +/datum/status_effect/frenzy/on_creation(mob/living/new_owner, atom/frenzy_target) + . = ..() + if(!.) + return + new_owner.add_client_colour(/datum/client_colour/frenzy, FRENZY_TRAIT) + + if(frenzy_target) + frenzy_ref = WEAKREF(frenzy_target.add_alt_appearance( + /datum/atom_hud/alternate_appearance/basic/one_person, + "frenzy_target", + image(icon = 'modular_darkpack/modules/frenzy/icons/frenzy_overlay.dmi', icon_state = "frenzy_overlay", loc = frenzy_target), + null, + new_owner, + )) + +/datum/status_effect/frenzy/on_remove() + var/datum/atom_hud/hud = frenzy_ref.resolve() + if(hud) + qdel(hud) + QDEL_NULL(frenzy_ref) + owner.remove_client_colour(FRENZY_TRAIT) + return ..() + +/atom/movable/screen/alert/status_effect/frenzy + name = "Frenzy" + desc = "FRENZY." + icon = 'modular_darkpack/modules/deprecated/icons/hud/screen_alert.dmi' + icon_state = "fear" + diff --git a/modular_darkpack/modules/frenzy/icons/frenzy_overlay.dmi b/modular_darkpack/modules/frenzy/icons/frenzy_overlay.dmi new file mode 100644 index 0000000000000000000000000000000000000000..229075cd7c695b17f5bc13f7607db39010aca5f1 GIT binary patch literal 586 zcmV-Q0=4~#P)V=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+ z(=$pSoZ^zil2jm5DXl0quc|UWAE+-Uu~LbPGbOXA7${-L#hF%=n41b=D=WDAxq!_F z0CZy>3K_-nxc~qGlu1NERCt{2mpw}ZK@f&#C4V9yh(Qz-1Vu<;DONTqQv|HE)}U>Q zv`VzrO0Y5po{?wRv(MMzNv?>BCg85VPOawFZ$%XX z1%T`REm1VcJfHCob{jh}lKT~+B1TqV%?tl6#!gcYqH0c$%=~rAO6o+ zuL5Mg0tN}$ahgw(eGsFp_&^{K2m}IwA8=dsU%qBX^j8r@eR2h$F)f?8Yz$R^HY1b~ zquE+>hdG>LJ_OucqDAKki2Hi<_}cI8=^ptV@#g)bI-Hu_DvR(tVg!_fg#-dLdn-Bk Y1|c}j0U0B0T>t<807*qoM6N<$g76artN;K2 literal 0 HcmV?d00001 diff --git a/tgstation.dme b/tgstation.dme index 1be00a67b598..1a98fa6aaf2b 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7153,6 +7153,7 @@ #include "modular_darkpack\modules\forensics\code\serial_number_log.dm" #include "modular_darkpack\modules\forensics\code\serial_numbering.dm" #include "modular_darkpack\modules\frenzy\code\frenzy.dm" +#include "modular_darkpack\modules\frenzy\code\status_effect.dm" #include "modular_darkpack\modules\government\code\carry_permit.dm" #include "modular_darkpack\modules\government\code\drivers_license.dm" #include "modular_darkpack\modules\government\code\passport.dm" From 04cf34a52898dd53c87e62e6b0d83d745360eede Mon Sep 17 00:00:00 2001 From: FalloutFalcon Date: Tue, 17 Feb 2026 13:36:25 -0600 Subject: [PATCH 3/7] fffire --- .../~darkpack/traits/declarations.dm | 4 +- code/_globalvars/traits/_traits.dm | 2 +- .../modules/blood_drinking/code/vamp_bite.dm | 12 +----- .../modules/frenzy/code/frenzy.dm | 39 ++++++++++++++++--- .../storyteller_dice/code/roll_datum.dm | 8 +++- .../code/vampire_clan/clans/brujah.dm | 2 +- 6 files changed, 45 insertions(+), 22 deletions(-) diff --git a/code/__DEFINES/~darkpack/traits/declarations.dm b/code/__DEFINES/~darkpack/traits/declarations.dm index 5291c3c51d00..393e5b1c1a7d 100644 --- a/code/__DEFINES/~darkpack/traits/declarations.dm +++ b/code/__DEFINES/~darkpack/traits/declarations.dm @@ -68,8 +68,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_REPELLED_BY_HOLINESS "repelled_by_holiness" /// Any changes in this Kindred's Humanity will be doubled #define TRAIT_SENSITIVE_HUMANITY "sensitive_humanity" -/// Duration of frenzy is doubled -#define TRAIT_LONGER_FRENZY "longer_frenzy" +/// Difficultie rolls to resist or guide frenzy are two higher. They can also never spend willpower to avoid frenzy +#define TRAIT_DIFFICULT_FRENZY "difficult_frenzy" // DARKPACK TODO - refactor these traits into mutant bodyparts and a component maybe /// If eyes are uncovered, they will be obviously supernatural to everyone nearby #define TRAIT_MASQUERADE_VIOLATING_EYES "masquerade_violating_eyes" diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 4b30fcfba89b..95c8a5b7a44d 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -403,7 +403,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_LIMBATTACHMENT" = TRAIT_LIMBATTACHMENT, "TRAIT_LITERATE" = TRAIT_LITERATE, "TRAIT_LIVERLESS_METABOLISM" = TRAIT_LIVERLESS_METABOLISM, - "TRAIT_LONGER_FRENZY" = TRAIT_LONGER_FRENZY, // DARKPACK EDIT ADD + "TRAIT_DIFFICULT_FRENZY" = TRAIT_DIFFICULT_FRENZY, // DARKPACK EDIT ADD "TRAIT_LOUD_BINARY" = TRAIT_LOUD_BINARY, "TRAIT_LUMINESCENT_EYES" = TRAIT_LUMINESCENT_EYES, "TRAIT_MADNESS_IMMUNE" = TRAIT_MADNESS_IMMUNE, diff --git a/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm b/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm index 67ed20872e73..eed5592b5510 100644 --- a/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm +++ b/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm @@ -40,17 +40,7 @@ var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) if(!skipface) if(iskindred(src) && HAS_TRAIT(src, TRAIT_NEEDS_BLOOD)) - var/datum/splat/vampire/kindred/kindred_species = iskindred(src) - var/stat_to_roll = kindred_species.enlightenment ? STAT_INSTINCT : STAT_SELF_CONTROL - var/datum/storyteller_roll/frenzy_roll = new() - frenzy_roll.applicable_stats = list(stat_to_roll) - var/frenzy_result = frenzy_roll.st_roll(src, bit_living) - if(frenzy_result != ROLL_SUCCESS) - to_chat(src, span_userdanger("The taste of blood sends you into a frenzy as you feed!")) - enter_frenzy_mode(bit_living) - else - to_chat(src, span_green("The taste of fresh blood while hungry almost drives you into frenzy!")) - + trigger_kindred_frenzy(bit_living, 6, "The taste of blood while hungry") if(!HAS_TRAIT(src, TRAIT_BLOODY_LOVER)) playsound(src, 'modular_darkpack/modules/blood_drinking/sounds/drinkblood1.ogg', 50, TRUE) bit_living.visible_message(span_warning(span_bold("[src] bites [bit_living]'s neck!")), span_warning(span_bold("[src] bites your neck!"))) diff --git a/modular_darkpack/modules/frenzy/code/frenzy.dm b/modular_darkpack/modules/frenzy/code/frenzy.dm index e7302df3e1de..a339d2a91d8f 100644 --- a/modular_darkpack/modules/frenzy/code/frenzy.dm +++ b/modular_darkpack/modules/frenzy/code/frenzy.dm @@ -31,7 +31,7 @@ var/check = SSroll.storyteller_roll(max(1, round(humanity/2)), min(frenzy_chance_boost, frenzy_hardness), src) // Modifier for frenzy duration - var/length_modifier = HAS_TRAIT(src, TRAIT_LONGER_FRENZY) ? 2 : 1 + var/length_modifier = HAS_TRAIT(src, TRAIT_DIFFICULT_FRENZY) ? 2 : 1 switch(check) if (DICE_CRIT_FAILURE) @@ -75,12 +75,24 @@ remove_status_effect(/datum/status_effect/frenzy) -/datum/storyteller_roll/rotschreck - applicable_stats = list(STAT_COURAGE) +/datum/storyteller_roll/frenzy + abstract_type = /datum/storyteller_roll/frenzy + bumper_text = "frenzy" numerical = TRUE +/datum/storyteller_roll/frenzy/calculate_used_difficulty(mob/living/roller) + . = ..() + // V20 p.51 + if(HAS_TRAIT(roller, TRAIT_DIFFICULT_FRENZY)) + . += 2 + +/datum/storyteller_roll/frenzy/rotschreck + applicable_stats = list(STAT_COURAGE) + +/datum/storyteller_roll/frenzy/kindred + /mob/living/carbon/proc/trigger_rotschreck(atom/fire, difficulty = 6) - var/datum/storyteller_roll/rotschreck/frenzy_roll = new() + var/datum/storyteller_roll/frenzy/rotschreck/frenzy_roll = new() frenzy_roll.difficulty = difficulty var/frenzy_result = frenzy_roll.st_roll(src, fire) if(frenzy_result >= 5) @@ -89,6 +101,19 @@ if(iskindred(src)) enter_frenzy_mode(fire, TRUE) +/mob/living/carbon/proc/trigger_kindred_frenzy(atom/target, difficulty = 6, flavor_text = "Something") + var/datum/splat/vampire/kindred/kindred_species = iskindred(src) + var/stat_to_roll = kindred_species.enlightenment ? STAT_INSTINCT : STAT_SELF_CONTROL + var/datum/storyteller_roll/frenzy/kindred/frenzy_roll = new() + frenzy_roll.applicable_stats = list(stat_to_roll) + frenzy_roll.difficulty = difficulty + var/frenzy_result = frenzy_roll.st_roll(src, target) + if(frenzy_result >= 5) + to_chat(src, span_green("[flavor_text] almost drives you into frenzy!")) + return + to_chat(src, span_userdanger("[flavor_text] sends you into a frenzy!")) + enter_frenzy_mode(target) + // Unimplemented @@ -197,8 +222,12 @@ set name = "Frenzy" set category = "Object" + if(!istype(AM)) + return if(!issupernatural(src)) return - if(istype(AM)) + if(iskindred(src)) + trigger_kindred_frenzy(AM) + else enter_frenzy_mode(AM) diff --git a/modular_darkpack/modules/storyteller_dice/code/roll_datum.dm b/modular_darkpack/modules/storyteller_dice/code/roll_datum.dm index 15fae4a95cb5..c78fc8700176 100644 --- a/modular_darkpack/modules/storyteller_dice/code/roll_datum.dm +++ b/modular_darkpack/modules/storyteller_dice/code/roll_datum.dm @@ -48,15 +48,16 @@ return ROLL_FAILURE var/dice_amount = calculate_used_dice(roller, bonus) + var/used_difficulty = calculate_used_difficulty(roller) var/list/rolled_dice = roll_dice(dice_amount) - var/first_line = "[span_tooltip(show_rolling_with(roller, bonus), "[dice_amount] dice")] vs. difficulty [difficulty]." + var/first_line = "[span_tooltip(show_rolling_with(roller, bonus), "[dice_amount] dice")] vs. difficulty [used_difficulty]." if(successes_needed > 1) first_line += " [successes_needed] successes needed." last_output_text += span_notice(first_line) - last_sucess_amount = count_success(rolled_dice, difficulty, last_output_text) + last_sucess_amount = count_success(rolled_dice, used_difficulty, last_output_text) var/output = roll_result(last_sucess_amount) var/title @@ -121,6 +122,9 @@ /datum/storyteller_roll/proc/using_stats(mob/living/roller) return applicable_stats +/datum/storyteller_roll/proc/calculate_used_difficulty(mob/living/roller) + return difficulty + /datum/storyteller_roll/proc/show_rolling_with(mob/living/roller, bonus = 0) var/output = "" var/stuff = list() diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/brujah.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/brujah.dm index 805920fed25e..b95f06b05c6a 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/brujah.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/brujah.dm @@ -10,7 +10,7 @@ /datum/discipline/presence ) clan_traits = list( - TRAIT_LONGER_FRENZY + TRAIT_DIFFICULT_FRENZY ) male_clothes = /obj/item/clothing/under/vampire/brujah female_clothes = /obj/item/clothing/under/vampire/brujah/female From 44dbcf3f9ed2f2e8c5755e685e51ed0029f8a69b Mon Sep 17 00:00:00 2001 From: FalloutFalcon Date: Tue, 24 Feb 2026 03:18:55 -0600 Subject: [PATCH 4/7] yea --- .../code/modules/mob/living/carbon/human/death.dm | 4 +--- .../modules/powers/code/discipline/auspex/aura_component.dm | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/modular_darkpack/master_files/code/modules/mob/living/carbon/human/death.dm b/modular_darkpack/master_files/code/modules/mob/living/carbon/human/death.dm index 5e1cc763e372..0c8450e0362f 100644 --- a/modular_darkpack/master_files/code/modules/mob/living/carbon/human/death.dm +++ b/modular_darkpack/master_files/code/modules/mob/living/carbon/human/death.dm @@ -13,10 +13,8 @@ if(brain) brain.organ_flags |= ORGAN_FAILING - /* if(HAS_TRAIT(src, TRAIT_IN_FRENZY)) - exit_frenzymod() - */ + exit_frenzy_mode() SEND_SOUND(src, sound('modular_darkpack/modules/vampire_the_masquerade/sounds/final_death.ogg', volume = 50)) switch (chronological_age) 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..702bfbb74a02 100644 --- a/modular_darkpack/modules/powers/code/discipline/auspex/aura_component.dm +++ b/modular_darkpack/modules/powers/code/discipline/auspex/aura_component.dm @@ -13,7 +13,7 @@ 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)) + RegisterSignals(parent_mob, list(COMSIG_MOB_UPDATE_AURA, COMSIG_LIVING_GAINED_SPLAT, COMSIG_LIVING_LOSE_SPLAT, SIGNAL_ADDTRAIT(TRAIT_IN_FRENZY), SIGNAL_REMOVETRAIT(TRAIT_IN_FRENZY)), PROC_REF(update_aura)) update_aura() /datum/component/aura/UnregisterFromParent() @@ -22,7 +22,7 @@ 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)) + UnregisterSignal(parent_mob, list(COMSIG_MOB_EMOTION_CHANGED, COMSIG_LIVING_GAINED_SPLAT, COMSIG_LIVING_LOSE_SPLAT, SIGNAL_ADDTRAIT(TRAIT_IN_FRENZY), SIGNAL_REMOVETRAIT(TRAIT_IN_FRENZY))) return ..() /datum/component/aura/proc/update_emotions(mob/changed_mob, new_emotion) From 9fabd3825ff545af45756719f82852c4664144c5 Mon Sep 17 00:00:00 2001 From: FalloutFalcon Date: Wed, 25 Mar 2026 14:38:15 -0500 Subject: [PATCH 5/7] stuf --- code/_globalvars/traits/_traits.dm | 1 - code/_globalvars/traits/admin_tooling.dm | 2 +- .../modules/blood_drinking/code/vamp_bite.dm | 10 +--------- modular_darkpack/modules/frenzy/code/frenzy.dm | 12 ++++++------ .../powers/code/discipline/auspex/aura_component.dm | 2 +- 5 files changed, 9 insertions(+), 18 deletions(-) diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 330eaf784736..9ecec892dd2e 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -695,7 +695,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_IRRESISTIBLE_VITAE" = TRAIT_IRRESISTIBLE_VITAE, // DARKPACK EDIT ADD "TRAIT_LAZY" = TRAIT_LAZY, // DARKPACK EDIT ADD "TRAIT_LOCAL_SIXTHSENSE" = TRAIT_LOCAL_SIXTHSENSE, // DARKPACK EDIT ADD - "TRAIT_LONGER_FRENZY" = TRAIT_LONGER_FRENZY, // DARKPACK EDIT ADD "TRAIT_LIGHT_WEAKNESS" = TRAIT_LIGHT_WEAKNESS, // DARKPACK EDIT ADD - Setite Flaw "TRAIT_LOUD_HOWLER" = TRAIT_LOUD_HOWLER, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_MASQUERADE_VIOLATING_EYES" = TRAIT_MASQUERADE_VIOLATING_EYES, // DARKPACK EDIT ADD diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm index d46153ce8df3..04e2f6fa1b83 100644 --- a/code/_globalvars/traits/admin_tooling.dm +++ b/code/_globalvars/traits/admin_tooling.dm @@ -385,7 +385,6 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_IRRESISTIBLE_VITAE" = TRAIT_IRRESISTIBLE_VITAE, // DARKPACK EDIT ADD "TRAIT_LAZY" = TRAIT_LAZY, // DARKPACK EDIT ADD "TRAIT_LOCAL_SIXTHSENSE" = TRAIT_LOCAL_SIXTHSENSE, // DARKPACK EDIT ADD - "TRAIT_LONGER_FRENZY" = TRAIT_LONGER_FRENZY, // DARKPACK EDIT ADD "TRAIT_LIGHT_WEAKNESS" = TRAIT_LIGHT_WEAKNESS, // DARKPACK EDIT ADD - Setite Flaw "TRAIT_LOUD_HOWLER" = TRAIT_LOUD_HOWLER, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_MASQUERADE_VIOLATING_EYES" = TRAIT_MASQUERADE_VIOLATING_EYES, // DARKPACK EDIT ADD @@ -427,6 +426,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_WTA_GAROU_TRIBE" = TRAIT_WTA_GAROU_TRIBE, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_WYRMTAINTED" = TRAIT_WYRMTAINTED, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_WYRMTAINTED_SPRITE" = TRAIT_WYRMTAINTED_SPRITE, // DARKPACK EDIT ADD - WEREWOLF + "TRAIT_DIFFICULT_FRENZY" = TRAIT_DIFFICULT_FRENZY, // DARKPACK EDIT ADD ), /obj/item = list( "TRAIT_APC_SHOCKING" = TRAIT_APC_SHOCKING, diff --git a/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm b/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm index f1475dae1712..9bc493dd25a9 100644 --- a/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm +++ b/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm @@ -40,15 +40,7 @@ var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) if(!skipface) if(get_kindred_splat(src) && HAS_TRAIT(src, TRAIT_NEEDS_BLOOD)) - var/stat_to_roll = is_enlightenment() ? STAT_INSTINCT : STAT_SELF_CONTROL - var/datum/storyteller_roll/frezy_roll = new() - frezy_roll.applicable_stats = list(stat_to_roll) - var/frenzy_result = frezy_roll.st_roll(src, bit_living) - if(frenzy_result != ROLL_SUCCESS) - // to_chat(src, span_userdanger("The taste of blood sends you into a frenzy as you feed!")) - trigger_kindred_frenzy(bit_living, 6, "The taste of blood while hungry") - else - to_chat(src, span_green("The taste of fresh blood while hungry almost drives you into frenzy!")) + trigger_kindred_frenzy(bit_living, 6, "The taste of blood while hungry") if(!HAS_TRAIT(src, TRAIT_BLOODY_LOVER)) playsound(src, 'modular_darkpack/modules/blood_drinking/sounds/drinkblood1.ogg', 50, TRUE) diff --git a/modular_darkpack/modules/frenzy/code/frenzy.dm b/modular_darkpack/modules/frenzy/code/frenzy.dm index bda56c7cf6ac..bc25706cd755 100644 --- a/modular_darkpack/modules/frenzy/code/frenzy.dm +++ b/modular_darkpack/modules/frenzy/code/frenzy.dm @@ -18,7 +18,7 @@ if(!client && !isnpc(src)) // I guess this is to make sure afk players dont have there characters frenzy while they arent here? return - if(iskindred(src)) + if(get_kindred_splat(src)) to_chat(src, "I need [span_danger("BLOOD")]. The [span_danger("BEAST")] is calling. Rolling...") /* // DARKPACK TODO - WEREWOLF else if(isshifter(src)) @@ -98,12 +98,12 @@ if(frenzy_result >= 5) return // Mabye change some logic to signals as well. - if(iskindred(src)) + if(get_kindred_splat(src)) enter_frenzy_mode(fire, TRUE) /mob/living/carbon/proc/trigger_kindred_frenzy(atom/target, difficulty = 6, flavor_text = "Something") - var/datum/splat/vampire/kindred/kindred_species = iskindred(src) - var/stat_to_roll = kindred_species.enlightenment ? STAT_INSTINCT : STAT_SELF_CONTROL + var/datum/splat/vampire/kindred/kindred_splat = get_kindred_splat(src) + var/stat_to_roll = is_enlightenment() ? STAT_INSTINCT : STAT_SELF_CONTROL var/datum/storyteller_roll/frenzy/kindred/frenzy_roll = new() frenzy_roll.applicable_stats = list(stat_to_roll) frenzy_roll.difficulty = difficulty @@ -217,7 +217,7 @@ Move(T) */ -#warn placeholder +#warn placeholder, mostly for easy debugging atm /mob/living/carbon/verb/manual_frenzy(atom/movable/AM as mob|obj in oview(7)) set name = "Frenzy" set category = "Object" @@ -227,7 +227,7 @@ if(!issupernatural(src)) return - if(iskindred(src)) + if(get_kindred_splat(src)) trigger_kindred_frenzy(AM) else enter_frenzy_mode(AM) 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 397bb57caec6..2dacf532a067 100644 --- a/modular_darkpack/modules/powers/code/discipline/auspex/aura_component.dm +++ b/modular_darkpack/modules/powers/code/discipline/auspex/aura_component.dm @@ -22,7 +22,7 @@ var/datum/atom_hud/data/auspex_aura/target_hud = GLOB.huds[DATA_HUD_AUSPEX_AURAS] target_hud.remove_atom_from_hud(parent_mob) - UnregisterSignal(parent_mob, list(COMSIG_MOB_EMOTION_CHANGED, COMSIG_MOB_UPDATE_AURA, COMSIG_LIVING_GAINED_SPLAT, COMSIG_LIVING_LOSE_SPLAT, SIGNAL_ADDTRAIT(TRAIT_IN_FRENZY), SIGNAL_REMOVETRAIT(TRAIT_IN_FRENZY)))) + UnregisterSignal(parent_mob, list(COMSIG_MOB_EMOTION_CHANGED, COMSIG_MOB_UPDATE_AURA, COMSIG_LIVING_GAINED_SPLAT, COMSIG_LIVING_LOSE_SPLAT, SIGNAL_ADDTRAIT(TRAIT_IN_FRENZY), SIGNAL_REMOVETRAIT(TRAIT_IN_FRENZY))) return ..() /datum/component/aura/proc/update_emotions(mob/changed_mob, new_emotion) From cdeaf32d80322b004533023686edce3aff8a1c9f Mon Sep 17 00:00:00 2001 From: FalloutFalcon Date: Wed, 25 Mar 2026 14:43:06 -0500 Subject: [PATCH 6/7] yea --- code/_globalvars/traits/_traits.dm | 2 +- code/_globalvars/traits/admin_tooling.dm | 2 +- modular_darkpack/modules/frenzy/code/frenzy.dm | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 9ecec892dd2e..9e5e3e7d5739 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -743,7 +743,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_WTA_GAROU_TRIBE" = TRAIT_WTA_GAROU_TRIBE, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_WYRMTAINTED" = TRAIT_WYRMTAINTED, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_WYRMTAINTED_SPRITE" = TRAIT_WYRMTAINTED_SPRITE, // DARKPACK EDIT ADD - WEREWOLF - "TRAIT_DIFFICULT_FRENZY" = TRAIT_DIFFICULT_FRENZY, // DARKPACK EDIT ADD + "TRAIT_DIFFICULT_FRENZY" = TRAIT_DIFFICULT_FRENZY, // DARKPACK EDIT ADD - FRENZY ), /mob/living/carbon = list( "TRAIT_BRAINLESS_CARBON" = TRAIT_BRAINLESS_CARBON, diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm index 04e2f6fa1b83..63d9d87a8684 100644 --- a/code/_globalvars/traits/admin_tooling.dm +++ b/code/_globalvars/traits/admin_tooling.dm @@ -426,7 +426,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_WTA_GAROU_TRIBE" = TRAIT_WTA_GAROU_TRIBE, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_WYRMTAINTED" = TRAIT_WYRMTAINTED, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_WYRMTAINTED_SPRITE" = TRAIT_WYRMTAINTED_SPRITE, // DARKPACK EDIT ADD - WEREWOLF - "TRAIT_DIFFICULT_FRENZY" = TRAIT_DIFFICULT_FRENZY, // DARKPACK EDIT ADD + "TRAIT_DIFFICULT_FRENZY" = TRAIT_DIFFICULT_FRENZY, // DARKPACK EDIT ADD - FRENZY ), /obj/item = list( "TRAIT_APC_SHOCKING" = TRAIT_APC_SHOCKING, diff --git a/modular_darkpack/modules/frenzy/code/frenzy.dm b/modular_darkpack/modules/frenzy/code/frenzy.dm index bc25706cd755..82de0a761efa 100644 --- a/modular_darkpack/modules/frenzy/code/frenzy.dm +++ b/modular_darkpack/modules/frenzy/code/frenzy.dm @@ -48,6 +48,7 @@ frenzy_hardness = min(10, frenzy_hardness + 1) */ +// Fleeing is used for either fox frenzies, or rotschreck /mob/living/carbon/proc/enter_frenzy_mode(atom/target, fleeing = FALSE) if(HAS_TRAIT(src, TRAIT_IN_FRENZY)) return @@ -65,7 +66,7 @@ apply_status_effect(/datum/status_effect/frenzy, target) // This is assuming no other interaction happens to remove it before this. - addtimer(CALLBACK(src, PROC_REF(exit_frenzy_mode)), 3 TURNS) + addtimer(CALLBACK(src, PROC_REF(exit_frenzy_mode)), 1 SCENES) /mob/living/carbon/proc/exit_frenzy_mode() if(!HAS_TRAIT(src, TRAIT_IN_FRENZY)) From 179ce024e5ead4e4833c938b07f7dc893e1b536b Mon Sep 17 00:00:00 2001 From: FalloutFalcon Date: Wed, 25 Mar 2026 15:43:56 -0500 Subject: [PATCH 7/7] decay from being near noone --- .../modules/frenzy/code/frenzy.dm | 51 +------------------ .../modules/frenzy/code/status_effect.dm | 29 +++++++++-- 2 files changed, 26 insertions(+), 54 deletions(-) diff --git a/modular_darkpack/modules/frenzy/code/frenzy.dm b/modular_darkpack/modules/frenzy/code/frenzy.dm index 82de0a761efa..44cc0556c210 100644 --- a/modular_darkpack/modules/frenzy/code/frenzy.dm +++ b/modular_darkpack/modules/frenzy/code/frenzy.dm @@ -1,53 +1,5 @@ // V20 p.298 + W20 p.261 - -/* -/client/Click(object,location,control,params) - if(isatom(object)) - if(ishuman(mob)) - var/mob/living/carbon/human/H = mob - if(H.in_frenzy) - return - ..() -*/ - - -/* -/datum/storyteller_roll/frenzy -/mob/living/carbon/proc/rollfrenzy() - if(!client && !isnpc(src)) // I guess this is to make sure afk players dont have there characters frenzy while they arent here? - return - - if(get_kindred_splat(src)) - to_chat(src, "I need [span_danger("BLOOD")]. The [span_danger("BEAST")] is calling. Rolling...") - /* // DARKPACK TODO - WEREWOLF - else if(isshifter(src)) - to_chat(src, "I'm full of [span_danger("ANGER")], and I'm about to flare up in [span_danger("RAGE")]. Rolling...") - */ - else - to_chat(src, "I'm too [span_danger("AFRAID")] to continue doing this. Rolling...") - SEND_SOUND(src, sound('modular_darkpack/modules/deprecated/sounds/bloodneed.ogg', volume = 50)) - - var/check = SSroll.storyteller_roll(max(1, round(humanity/2)), min(frenzy_chance_boost, frenzy_hardness), src) - - // Modifier for frenzy duration - var/length_modifier = HAS_TRAIT(src, TRAIT_DIFFICULT_FRENZY) ? 2 : 1 - - switch(check) - if (DICE_CRIT_FAILURE) - enter_frenzy_mode() - addtimer(CALLBACK(src, PROC_REF(exit_frenzy_mode)), 3 TURNS * length_modifier) - frenzy_hardness = 1 - if (DICE_FAILURE) - enter_frenzy_mode() - addtimer(CALLBACK(src, PROC_REF(exit_frenzy_mode)), 1 TURNS * length_modifier) - frenzy_hardness = 1 - if (DICE_CRIT_WIN) - frenzy_hardness = max(1, frenzy_hardness - 1) - else - frenzy_hardness = min(10, frenzy_hardness + 1) -*/ - // Fleeing is used for either fox frenzies, or rotschreck /mob/living/carbon/proc/enter_frenzy_mode(atom/target, fleeing = FALSE) if(HAS_TRAIT(src, TRAIT_IN_FRENZY)) @@ -96,14 +48,13 @@ var/datum/storyteller_roll/frenzy/rotschreck/frenzy_roll = new() frenzy_roll.difficulty = difficulty var/frenzy_result = frenzy_roll.st_roll(src, fire) - if(frenzy_result >= 5) + if(frenzy_result >= 5) // five is to COMPLTELY ignore it. anything lower.... delays it? return // Mabye change some logic to signals as well. if(get_kindred_splat(src)) enter_frenzy_mode(fire, TRUE) /mob/living/carbon/proc/trigger_kindred_frenzy(atom/target, difficulty = 6, flavor_text = "Something") - var/datum/splat/vampire/kindred/kindred_splat = get_kindred_splat(src) var/stat_to_roll = is_enlightenment() ? STAT_INSTINCT : STAT_SELF_CONTROL var/datum/storyteller_roll/frenzy/kindred/frenzy_roll = new() frenzy_roll.applicable_stats = list(stat_to_roll) diff --git a/modular_darkpack/modules/frenzy/code/status_effect.dm b/modular_darkpack/modules/frenzy/code/status_effect.dm index 9b87b8ffdafd..6e193277a048 100644 --- a/modular_darkpack/modules/frenzy/code/status_effect.dm +++ b/modular_darkpack/modules/frenzy/code/status_effect.dm @@ -7,7 +7,9 @@ duration = STATUS_EFFECT_PERMANENT status_type = STATUS_EFFECT_REFRESH alert_type = /atom/movable/screen/alert/status_effect/frenzy - var/datum/weakref/frenzy_ref + var/datum/weakref/frenzy_target_ref + var/datum/weakref/frenzy_overlay_ref + var/seconds_alone = 0 /datum/status_effect/frenzy/on_creation(mob/living/new_owner, atom/frenzy_target) . = ..() @@ -16,22 +18,41 @@ new_owner.add_client_colour(/datum/client_colour/frenzy, FRENZY_TRAIT) if(frenzy_target) - frenzy_ref = WEAKREF(frenzy_target.add_alt_appearance( + frenzy_overlay_ref = WEAKREF(frenzy_target.add_alt_appearance( /datum/atom_hud/alternate_appearance/basic/one_person, "frenzy_target", image(icon = 'modular_darkpack/modules/frenzy/icons/frenzy_overlay.dmi', icon_state = "frenzy_overlay", loc = frenzy_target), null, new_owner, )) + frenzy_target_ref = WEAKREF(frenzy_target) /datum/status_effect/frenzy/on_remove() - var/datum/atom_hud/hud = frenzy_ref.resolve() + var/datum/atom_hud/hud = frenzy_overlay_ref.resolve() if(hud) qdel(hud) - QDEL_NULL(frenzy_ref) + QDEL_NULL(frenzy_overlay_ref) owner.remove_client_colour(FRENZY_TRAIT) + var/mob/living/carbon/carbon_owner = astype(owner) + carbon_owner?.exit_frenzy_mode() return ..() +/datum/status_effect/frenzy/tick(seconds_between_ticks) + . = ..() + + // If left alone for an extended time, frenzies can end on their own + if(locate(/mob/living/carbon/human) in oview(world.view, owner)) + seconds_alone = 0 + // If our target is nearby, keep frenzying (a human or even a fire) + else if(frenzy_target_ref?.resolve() in view(world.view, owner)) + seconds_alone = 0 + else + seconds_alone += seconds_between_ticks + + if(seconds_alone >= 15) + qdel(src) + + /atom/movable/screen/alert/status_effect/frenzy name = "Frenzy" desc = "FRENZY."