Skip to content
Draft
7 changes: 5 additions & 2 deletions code/__DEFINES/~darkpack/auras.dm
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#define AURA_SAD COLOR_SILVER // Silver
#define AURA_SPIRITUAL COLOR_GOLD // Gold
#define AURA_SUSPICIOUS COLOR_STRONG_BLUE // Dark Blue
#define AURA_CONFIDENCE COLOR_VIVID_YELLOW // Primarly for the Shadow Lords gift "Aura of Confidence"

// Modifier auras.
#define AURA_ANXIOUS "Anxious" // Auras appear scrambled like static or white noise
Expand Down Expand Up @@ -65,7 +66,8 @@ GLOBAL_LIST_INIT(aura_list, sort_list(list(
"Anxious" = AURA_ANXIOUS,
"Confused" = AURA_CONFUSED,
"Daydreaming" = AURA_DAYDREAMING,
"Psychotic" = AURA_PSYCHOTIC
"Psychotic" = AURA_PSYCHOTIC,
"Confidence" = AURA_CONFIDENCE,
)))

GLOBAL_LIST_INIT(emotion_to_quality, sort_list(list(
Expand Down Expand Up @@ -94,5 +96,6 @@ GLOBAL_LIST_INIT(emotion_to_quality, sort_list(list(
"Anxious" = "anxiety",
"Confused" = "confusion",
"Daydreaming" = "absentmindedness",
"Psychotic" = "psychosis"
"Psychotic" = "psychosis",
"Confidence" = "confidence",
)))
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,7 @@
//from base of living/CanAllowThrough(): (atom/movable/mover, border_dir)
#define COMSIG_LIVING_CAN_ALLOW_THROUGH "living_can_allow_through"
#define COMPONENT_LIVING_PASSABLE (1<<0)
//from base of /datum/storyteller_roll/proc/st_roll(): (mob/living/roller, datum/storyteller_roll/roll_datum, output)
//from base of /datum/storyteller_roll/proc/st_roll(): (mob/living/roller, datum/storyteller_roll/roll_datum, atom/target)
#define COMSIG_LIVING_PRE_DICE_ROLLED "living_dice_rolled"
//from base of /datum/storyteller_roll/proc/st_roll(): (mob/living/roller, datum/storyteller_roll/roll_datum, atom/target, output)
#define COMSIG_LIVING_DICE_ROLLED "living_dice_rolled"
3 changes: 3 additions & 0 deletions code/__DEFINES/~darkpack/traits/declarations.dm
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
// Massivly boosts the range of your howl emote.
#define TRAIT_LOUD_HOWLER "loud_howler"
#define TRAIT_RAZOR_CLAWS "razor_claws"
#define TRAIT_JAMMING_WEAPONS "jamming_weapons"
#define TRAIT_NATURAL "natural"
#define TRAIT_AURA_OF_CONFIDENCE "aura_of_confidence"

/// Sixth sense restricted to view range
#define TRAIT_LOCAL_SIXTHSENSE "local_sixth_sense"
Expand Down
7 changes: 5 additions & 2 deletions code/_globalvars/traits/_traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_UNHITTABLE_BY_LASERS" = TRAIT_UNHITTABLE_BY_LASERS,
"TRAIT_UNLINKABLE_FISHING_SPOT" = TRAIT_UNLINKABLE_FISHING_SPOT,
"TRAIT_TETHER_ATTACHED" = TRAIT_TETHER_ATTACHED,
"TRAIT_NATURAL" = TRAIT_NATURAL, // DARKPACK EDIT ADD - WEREWOLF
),
/atom/movable = list(
"TRAIT_ACTIVE_STORAGE" = TRAIT_ACTIVE_STORAGE,
Expand Down Expand Up @@ -671,6 +672,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_BRAIN_TRAUMA_IMMUNITY" = TRAIT_BRAIN_TRAUMA_IMMUNITY,
"TRAIT_NECROPOLIS_WORSHIP" = TRAIT_NECROPOLIS_WORSHIP,
"TRAIT_ANIMAL_MUSK" = TRAIT_ANIMAL_MUSK, // DARKPACK EDIT ADD - MERITS/FLAWS
"TRAIT_AURA_OF_CONFIDENCE" = TRAIT_AURA_OF_CONFIDENCE, // DARKPACK EDIT ADD - WEREWOLF
"TRAIT_BETRAYERS_MARK" = TRAIT_BETRAYERS_MARK, // DARKPACK EDIT ADD - MERITS/FLAWS - (Tremere)
"TRAIT_BLOODY_LOVER" = TRAIT_BLOODY_LOVER, // DARKPACK EDIT ADD
"TRAIT_BLOODY_SUCKER" = TRAIT_BLOODY_SUCKER, // DARKPACK EDIT ADD
Expand All @@ -695,8 +697,8 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_FORCED_EMOTION" = TRAIT_FORCED_EMOTION, // DARKPACK EDIT ADD - Melpominee
"TRAIT_FRENETIC_AURA" = TRAIT_FRENETIC_AURA, // DARKPACK EDIT ADD
"TRAIT_GHOST_VISION" = TRAIT_GHOST_VISION, // DARKPACK EDIT ADD - POWERS - (Necromancy)
"TRAIT_GULLET" = TRAIT_GULLET, // DARKPACK EDIT ADD
"TRAIT_GRIP_OF_THE_DAMNED" = TRAIT_GRIP_OF_THE_DAMNED, // DARKPACK EDIT ADD
"TRAIT_GULLET" = TRAIT_GULLET, // DARKPACK EDIT ADD
"TRAIT_HOMOSEXUAL" = TRAIT_HOMOSEXUAL, // DARKPACK EDIT ADD
"TRAIT_HORRIFIC_APPEARANCE" = TRAIT_HORRIFIC_APPEARANCE, // DARKPACK EDIT ADD - Cappadocian Quirk
"TRAIT_HUNGRY" = TRAIT_HUNGRY, // DARKPACK EDIT ADD
Expand All @@ -705,6 +707,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_INVISIBLE_TO_CAMERA" = TRAIT_INVISIBLE_TO_CAMERA, // DARKPACK EDIT ADD
"TRAIT_IN_FRENZY" = TRAIT_IN_FRENZY, // DARKPACK EDIT ADD
"TRAIT_IRRESISTIBLE_VITAE" = TRAIT_IRRESISTIBLE_VITAE, // DARKPACK EDIT ADD
"TRAIT_JAMMING_WEAPONS" = TRAIT_JAMMING_WEAPONS, // DARKPACK EDIT ADD - WEREWOLF
"TRAIT_LAZY" = TRAIT_LAZY, // DARKPACK EDIT ADD
"TRAIT_LIGHT_WEAKNESS" = TRAIT_LIGHT_WEAKNESS, // DARKPACK EDIT ADD - Setite Flaw
"TRAIT_LOCAL_SIXTHSENSE" = TRAIT_LOCAL_SIXTHSENSE, // DARKPACK EDIT ADD
Expand Down Expand Up @@ -740,8 +743,8 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_STAKED" = TRAIT_STAKED, // DARKPACK EDIT ADD
"TRAIT_STAKE_IMMUNE" = TRAIT_STAKE_IMMUNE, // DARKPACK EDIT ADD
"TRAIT_STAKE_RESISTANT" = TRAIT_STAKE_RESISTANT, // DARKPACK EDIT ADD
"TRAIT_THE_LARGEST_MAW" = TRAIT_THE_LARGEST_MAW, // DARKPACK EDIT ADD - MERITS/FLAWS
"TRAIT_STILLNESS_OF_DEATH" = TRAIT_STILLNESS_OF_DEATH, // DARKPACK EDIT ADD - Gargoyle Quirk
"TRAIT_THE_LARGEST_MAW" = TRAIT_THE_LARGEST_MAW, // DARKPACK EDIT ADD - MERITS/FLAWS
"TRAIT_TIMEWARPER" = TRAIT_TIMEWARPER, // DARKPACK EDIT ADD
"TRAIT_TIME_SENSE" = TRAIT_TIME_SENSE, // DARKPACK EDIT ADD - MERITS/FLAWS
"TRAIT_TORPOR" = TRAIT_TORPOR, // DARKPACK EDIT ADD
Expand Down
5 changes: 4 additions & 1 deletion code/_globalvars/traits/admin_tooling.dm
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_RUSTIMMUNE" = TRAIT_RUSTIMMUNE,
"TRAIT_UNHITTABLE_BY_PROJECTILES" = TRAIT_UNHITTABLE_BY_PROJECTILES,
"TRAIT_UNHITTABLE_BY_LASERS" = TRAIT_UNHITTABLE_BY_LASERS,
"TRAIT_NATURAL" = TRAIT_NATURAL, // DARKPACK EDIT ADD - WEREWOLF
),
/atom/movable = list(
"TRAIT_ASHSTORM_IMMUNE" = TRAIT_ASHSTORM_IMMUNE,
Expand Down Expand Up @@ -363,6 +364,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_RIGHT_EYE_SCAR" = TRAIT_RIGHT_EYE_SCAR,
"TRAIT_CARPOTOXIN_IMMUNE" = TRAIT_CARPOTOXIN_IMMUNE,
"TRAIT_ANIMAL_MUSK" = TRAIT_ANIMAL_MUSK, // DARKPACK EDIT ADD - MERITS/FLAWS
"TRAIT_AURA_OF_CONFIDENCE" = TRAIT_AURA_OF_CONFIDENCE, // DARKPACK EDIT ADD - WEREWOLF
"TRAIT_BLOODY_LOVER" = TRAIT_BLOODY_LOVER, // DARKPACK EDIT ADD
"TRAIT_BLOODY_SUCKER" = TRAIT_BLOODY_SUCKER, // DARKPACK EDIT ADD
"TRAIT_BLUSH_OF_HEALTH" = TRAIT_BLUSH_OF_HEALTH, // DARKPACK EDIT ADD
Expand All @@ -384,15 +386,16 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_FERA_RENOWN" = TRAIT_FERA_RENOWN, // DARKPACK EDIT ADD - WEREWOLF
"TRAIT_FRENETIC_AURA" = TRAIT_FRENETIC_AURA, // DARKPACK EDIT ADD
"TRAIT_GHOST_VISION" = TRAIT_GHOST_VISION, // DARKPACK EDIT ADD - POWERS - (Necromancy)
"TRAIT_GULLET" = TRAIT_GULLET, // DARKPACK EDIT ADD
"TRAIT_GRIP_OF_THE_DAMNED" = TRAIT_GRIP_OF_THE_DAMNED, // DARKPACK EDIT ADD
"TRAIT_GULLET" = TRAIT_GULLET, // DARKPACK EDIT ADD
"TRAIT_HOMOSEXUAL" = TRAIT_HOMOSEXUAL, // DARKPACK EDIT ADD
"TRAIT_HUNGRY" = TRAIT_HUNGRY, // DARKPACK EDIT ADD
"TRAIT_HUNTED" = TRAIT_HUNTED, // DARKPACK EDIT ADD
"TRAIT_ILLEGAL_IDENTITY" = TRAIT_ILLEGAL_IDENTITY, // DARKPACK EDIT ADD - GOVERMENT
"TRAIT_INVISIBLE_TO_CAMERA" = TRAIT_INVISIBLE_TO_CAMERA, // DARKPACK EDIT ADD
"TRAIT_IN_FRENZY" = TRAIT_IN_FRENZY, // DARKPACK EDIT ADD
"TRAIT_IRRESISTIBLE_VITAE" = TRAIT_IRRESISTIBLE_VITAE, // DARKPACK EDIT ADD
"TRAIT_JAMMING_WEAPONS" = TRAIT_JAMMING_WEAPONS, // DARKPACK EDIT ADD - WEREWOLF
"TRAIT_LAZY" = TRAIT_LAZY, // DARKPACK EDIT ADD
"TRAIT_LIGHT_WEAKNESS" = TRAIT_LIGHT_WEAKNESS, // DARKPACK EDIT ADD - Setite Flaw
"TRAIT_LOCAL_SIXTHSENSE" = TRAIT_LOCAL_SIXTHSENSE, // DARKPACK EDIT ADD
Expand Down
10 changes: 10 additions & 0 deletions code/_onclick/item_attack.dm
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,11 @@
return FALSE

var/final_force = CALCULATE_FORCE(src, attack_modifiers)
// DARKPACK EDIT ADD START - WEREWOLF
if(HAS_TRAIT(user, TRAIT_JAMMING_WEAPONS) && !HAS_TRAIT(src, TRAIT_NATURAL))
to_chat(user, span_warning("[src] ineffectively jams or malfunctions!"))
return FALSE
// DARKPACK EDIT ADD END
if(damtype != STAMINA && final_force && HAS_TRAIT(user, TRAIT_PACIFISM))
to_chat(user, span_warning("You don't want to harm other living beings!"))
return FALSE
Expand Down Expand Up @@ -288,6 +293,11 @@
user.changeNext_move(attack_speed)
if(get(src, /mob/living) == user) // telekinesis.
user.do_attack_animation(attacked_atom)
// DARKPACK EDIT ADD START - WEREWOLF
if(HAS_TRAIT(user, TRAIT_JAMMING_WEAPONS) && !HAS_TRAIT(src, TRAIT_NATURAL))
to_chat(user, span_warning("[src] ineffectively jams or malfunctions!"))
return FALSE
// DARKPACK EDIT ADD END
if(attacked_atom.attacked_by(src, user, modifiers, attack_modifiers) == ATTACK_FAILED)
return TRUE
SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, attacked_atom, user, modifiers, attack_modifiers)
Expand Down
5 changes: 5 additions & 0 deletions code/modules/projectiles/gun.dm
Original file line number Diff line number Diff line change
Expand Up @@ -447,6 +447,11 @@

/obj/item/gun/can_trigger_gun(mob/living/user, akimbo_usage)
. = ..()
// DARKPACK EDIT ADD START - WEREWOLF
if(HAS_TRAIT(user, TRAIT_JAMMING_WEAPONS) && !HAS_TRAIT(src, TRAIT_NATURAL))
to_chat(user, span_warning("[src] ineffectively jams or malfunctions!"))
return FALSE
// DARKPACK EDIT ADD END
if(!handle_pins(user))
return FALSE

Expand Down
6 changes: 4 additions & 2 deletions modular_darkpack/modules/doors/code/vampdoor.dm
Original file line number Diff line number Diff line change
Expand Up @@ -360,10 +360,12 @@
/obj/structure/vampdoor/proc/toggle_lock(mob/living/user)
playsound(src, lock_sound, 75, TRUE)
if(!locked)
to_chat(user, span_notice("[src] is now locked."))
if(user)
to_chat(user, span_notice("[src] is now locked."))
locked = TRUE
else
to_chat(user, span_notice("[src] is now unlocked."))
if(user)
to_chat(user, span_notice("[src] is now unlocked."))
proc_unlock("key")
locked = FALSE
return TRUE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,9 @@
/datum/component/aura/proc/update_emotions(mob/changed_mob, new_emotion)
SIGNAL_HANDLER

if(HAS_TRAIT(changed_mob, TRAIT_AURA_OF_CONFIDENCE))
new_emotion = "Confidence"

if(current_aura == new_emotion)
return

Expand Down Expand Up @@ -93,6 +96,10 @@
/datum/component/aura/proc/update_examine_message(mutable_appearance/aura_appearance)
var/mob/parent_mob = parent

if(HAS_TRAIT(parent_mob, TRAIT_AURA_OF_CONFIDENCE))
examine_message = "[parent_mob.p_Their()] aura is swamped in so much superiority nothing else can be made out."
return

switch(current_aura)
if(AURA_AFRAID)
examine_message = "[parent_mob.p_Their()] aura burns a bright orange, tense and flickering at the edges."
Expand Down Expand Up @@ -205,6 +212,9 @@
holder.color = null

var/mob/parent_mob = parent
if(HAS_TRAIT(parent_mob, TRAIT_AURA_OF_CONFIDENCE))
return

if(output_color && has_pale_aura(parent_mob))
var/list/hsv_color_value = rgb2hsv(output_color)
hsv_color_value[2] = hsv_color_value[2] * 0.7 // Reduce saturation for kindred
Expand Down Expand Up @@ -263,6 +273,20 @@
aura_smoke_image.color = aura_appearance.color
aura_smoke_image.alpha = 50

var/matrix/smoke_transform = matrix()
smoke_transform.Scale(1, pick(1.25, 1.5))
aura_smoke_image.transform = smoke_transform

var/matrix/classic_aura_transform = matrix()
classic_aura_transform.Scale(pick(0.65, 0.75), 1)
aura_classic_image.transform = classic_aura_transform

holder.vis_contents += aura_classic_image
holder.vis_contents += aura_smoke_image

if(HAS_TRAIT(parent_mob, TRAIT_AURA_OF_CONFIDENCE))
return

if(HAS_TRAIT(parent_mob, TRAIT_DIABLERIE))
var/mutable_appearance/diablerie_image = mutable_appearance('modular_darkpack/modules/powers/icons/auras.dmi', "diab", ABOVE_MOB_LAYER + 1, parent_mob, ABOVE_GAME_PLANE)
holder.add_overlay(diablerie_image)
Expand All @@ -289,17 +313,6 @@
if(isavatar(parent_mob) || isobserver(parent_mob))
holder.opacity = holder.opacity * 0.5

var/matrix/smoke_transform = matrix()
smoke_transform.Scale(1, pick(1.25, 1.5))
aura_smoke_image.transform = smoke_transform

var/matrix/classic_aura_transform = matrix()
classic_aura_transform.Scale(pick(0.65, 0.75), 1)
aura_classic_image.transform = classic_aura_transform

holder.vis_contents += aura_classic_image
holder.vis_contents += aura_smoke_image


/datum/component/aura/proc/update_aura_filters(mutable_appearance/aura_appearance, image/holder)
remove_wibbly_filters(holder)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
/obj/item/gangrel_claws/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, INNATE_TRAIT)
ADD_TRAIT(src, TRAIT_NATURAL, INNATE_TRAIT)

/obj/item/gangrel_claws/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
Expand Down
14 changes: 12 additions & 2 deletions modular_darkpack/modules/splats/code/powers/_power.dm
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@
/// Means that this action is not a real power, but some sort of innate ability we represent as a power/disc/gift mechnaicly.
var/innate_ability = FALSE

/// If the power manually calls `StartCooldown`, otherwise handled by Activate
var/handles_cooldown = FALSE
/// If the power manually calls `spend_resources` itself, otherwise handled by Activate
var/handles_spend_resources = FALSE

/// How much temporary willpower is required to use this ability
var/willpower_cost = 0

Expand All @@ -17,9 +22,11 @@
return FALSE

/datum/action/cooldown/power/Activate(atom/target)
. = ..()
if(!handles_cooldown)
. = ..()

spend_resources()
if(!handles_spend_resources)
spend_resources()


/**
Expand All @@ -40,6 +47,9 @@
* when casting the power.
*/
/datum/action/cooldown/power/proc/spend_resources()
SHOULD_CALL_PARENT(TRUE)

if(willpower_cost && isliving(owner))
var/mob/living/living_owner = owner
living_owner.st_change_stat(STAT_TEMPORARY_WILLPOWER, -willpower_cost)
to_chat(owner, span_warning("You burn [willpower_cost] willpower."))
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@

var/dice_amount = calculate_used_dice(roller, bonus)

bonus += SEND_SIGNAL(roller, COMSIG_LIVING_PRE_DICE_ROLLED, src, target)

var/list/rolled_dice = roll_dice(dice_amount)

var/first_line = "[span_tooltip(show_rolling_with(roller, bonus), "[dice_amount] dice")] vs. difficulty [difficulty]."
Expand Down Expand Up @@ -85,7 +87,7 @@

LAZYADDASSOC(mobs_last_rolled, WEAKREF(roller), list(world.time, output))

SEND_SIGNAL(roller, COMSIG_LIVING_DICE_ROLLED, src, output)
SEND_SIGNAL(roller, COMSIG_LIVING_DICE_ROLLED, src, target, output)
return output


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@

check_flags = AB_CHECK_IMMOBILE|AB_CHECK_CONSCIOUS

var/default_activate_message = TRUE

var/rage_cost = 0
var/gnosis_cost = 0

Expand All @@ -24,12 +22,6 @@
owner.balloon_alert(owner, "not a gift user!")
return FALSE

/datum/action/cooldown/power/gift/Activate(atom/target)
. = ..()

if(default_activate_message)
to_chat(owner, span_notice("You activate the [name]..."))

/datum/action/cooldown/power/gift/can_afford(feedback)
. = ..()
var/datum/splat/werewolf/casting_splat = get_werewolf_splat(owner)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@


/datum/action/cooldown/power/gift/mindspeak/Activate(atom/target)
. = ..()
var/input = tgui_input_text(usr, "What do you want to tell to your Tribe?", name, max_length = MAX_MESSAGE_LEN)
if(!input || !IsAvailable(feedback = TRUE))
return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,11 +76,11 @@
return FALSE

/datum/action/cooldown/power/gift/infectious_laughter/Activate(atom/target)
. = ..()

if(!last_spoken_message || (when_spoken + 3 TURNS < world.time))
return

. = ..()

owner.emote("laugh")
playsound(owner, 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/infectious_laughter.ogg', 50, FALSE)
var/list/hearers = oviewers(DEFAULT_MESSAGE_RANGE, owner)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ the scar is received and an extra Gnosis point is spent.

/datum/action/cooldown/power/gift/mothers_touch/Activate(atom/target)
if(!isliving(target))
return
return FALSE
if(!(target in range(1, owner)))
return
return FALSE

. = ..()

Expand All @@ -39,7 +39,6 @@ the scar is received and an extra Gnosis point is spent.
living_target.heal_storyteller_health(successes, TRUE, TRUE, TRUE)

SEND_SIGNAL(owner, COMSIG_MASQUERADE_VIOLATION)
StartCooldown()
return TRUE

/datum/action/cooldown/power/gift/sense_wyrm
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
return FALSE

/datum/action/cooldown/power/gift/desperate_strength/Activate(atom/target)
. = ..()
var/mob/living/caster = owner
var/static/list/radial_menu_options = list(
"One" = icon('modular_darkpack/modules/werewolf_the_apocalypse/icons/gifts/tribes/bone_gnawers.dmi', "radial_one"),
Expand Down Expand Up @@ -71,7 +72,7 @@
/datum/status_effect/desperate_strength/proc/on_dice_rolled(mob/living/roller, datum/storyteller_roll/roll_datum, output)
SIGNAL_HANDLER

if(STAT_STRENGTH in roll_datum.applicable_stats)
if(STAT_STRENGTH in roll_datum.using_stats(roller))
qdel(src)

/datum/status_effect/desperate_strength/on_remove()
Expand Down
Loading