Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prevent stuns on vampire bite #688

Merged
merged 13 commits into from
Feb 13, 2025
1 change: 0 additions & 1 deletion code/__DEFINES/dcs/signals.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1004,7 +1004,6 @@
///from mob/living/carbon/human/UnarmedAttack(): (atom/target, proximity)
#define COMSIG_HUMAN_MELEE_UNARMED_ATTACK "human_melee_unarmed_attack"


// Aquarium related signals
#define COMSIG_AQUARIUM_BEFORE_INSERT_CHECK "aquarium_about_to_be_inserted"
#define COMSIG_AQUARIUM_SURFACE_CHANGED "aquarium_surface_changed"
Expand Down
7 changes: 7 additions & 0 deletions code/__DEFINES/wod13/signals_kindred.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// This is the new signals file for every signal vampire related in WOD13
// New signals related to vampires and things vampires do should be defined here

///called in bloodsucking.dm at the end of /mob/living/carbon/human/proc/drinksomeblood
#define COMSIG_MOB_VAMPIRE_SUCKED "mob_vampire_sucked"
///vampire suck resisted
#define COMPONENT_RESIST_VAMPIRE_KISS (1<<0)
2 changes: 0 additions & 2 deletions code/modules/client/preferences.dm
Original file line number Diff line number Diff line change
Expand Up @@ -3218,8 +3218,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
character.update_hair()
character.update_body_parts()
if(!character_setup)
// if(pref_species.name == "Werewolf")
// character.transformator.fast_trans_gender(character, character.base_breed)
character.roundstart_vampire = TRUE
if(character.age < 16)
if(!character.ischildren)
Expand Down
35 changes: 0 additions & 35 deletions code/modules/mob/living/carbon/werewolf/transformation.dm
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,8 @@
. = ..()
crinos_form = new()
crinos_form.transformator = src
// crinos_form.forceMove(src)
lupus_form = new()
lupus_form.transformator = src
// lupus_form.forceMove(src)

/obj/werewolf_holder/transformation/proc/transfer_damage(mob/living/carbon/first, mob/living/carbon/second)
second.masquerade = first.masquerade
Expand Down Expand Up @@ -115,8 +113,6 @@
transformating = FALSE
animate(trans, transform = null, color = "#FFFFFF", time = 1)
lupus_form.update_icons()
// if(lupus_form.auspice.base_breed != "Lupus")
// adjust_rage(-1, lupus_form)
if("Crinos")
if(trans == crinos_form)
transformating = FALSE
Expand Down Expand Up @@ -154,8 +150,6 @@
transformating = FALSE
animate(trans, transform = null, color = "#FFFFFF", time = 1)
crinos_form.update_icons()
// if(crinos_form.auspice.base_breed != "Crinos")
// adjust_rage(-1, crinos_form)
if("Homid")
if(trans == human_form)
transformating = FALSE
Expand Down Expand Up @@ -192,32 +186,3 @@
trans.forceMove(src)
transformating = FALSE
animate(trans, transform = null, color = "#FFFFFF", time = 1)
// if(human_form.auspice.base_breed != "Homid")
// adjust_rage(-1, human_form)

/obj/werewolf_holder/transformation/proc/fast_trans_gender(mob/trans, form)
switch(form)
if("Lupus")
if(trans == lupus_form)
return
var/current_loc = get_turf(trans)
lupus_form.forceMove(current_loc)
lupus_form.key = trans.key
forceMove(lupus_form)
trans.forceMove(src)
if("Crinos")
if(trans == crinos_form)
return
var/current_loc = get_turf(trans)
crinos_form.forceMove(current_loc)
crinos_form.key = trans.key
forceMove(crinos_form)
trans.forceMove(src)
if("Homid")
if(trans == human_form)
return
var/current_loc = get_turf(trans)
human_form.forceMove(current_loc)
human_form.key = trans.key
forceMove(human_form)
trans.forceMove(src)
15 changes: 15 additions & 0 deletions code/modules/vtmb/kindred_species.dm
Original file line number Diff line number Diff line change
Expand Up @@ -242,8 +242,12 @@
//vampires don't die while in crit, they just slip into torpor after 2 minutes of being critted
RegisterSignal(C, SIGNAL_ADDTRAIT(TRAIT_CRITICAL_CONDITION), PROC_REF(slip_into_torpor))

//vampires resist vampire bites better than mortals
RegisterSignal(C, COMSIG_MOB_VAMPIRE_SUCKED, PROC_REF(on_vampire_bitten))

/datum/species/kindred/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load)
. = ..()
UnregisterSignal(C, COMSIG_MOB_VAMPIRE_SUCKED)
for(var/datum/action/vampireinfo/VI in C.actions)
if(VI)
VI.Remove(C)
Expand Down Expand Up @@ -885,3 +889,14 @@

//nothing found
return FALSE

/**
* On being bit by a vampire
*
* This handles vampire bite sleep immunity and any future special interactions.
*/
/datum/species/kindred/proc/on_vampire_bitten(datum/source, mob/living/carbon/being_bitten)
SIGNAL_HANDLER

if(iskindred(being_bitten))
return COMPONENT_RESIST_VAMPIRE_KISS
15 changes: 15 additions & 0 deletions code/modules/vtmb/kuei_jin.dm
Original file line number Diff line number Diff line change
Expand Up @@ -256,8 +256,12 @@
var/datum/action/reanimate_yin/YN = new()
YN.Grant(C)

//Kuei-jin resist vampire bites better than mortals
RegisterSignal(C, COMSIG_MOB_VAMPIRE_SUCKED, PROC_REF(on_kuei_jin_bitten))

/datum/species/kuei_jin/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load)
. = ..()
UnregisterSignal(C, COMSIG_MOB_VAMPIRE_SUCKED)
for(var/datum/action/kueijininfo/VI in C.actions)
if(VI)
VI.Remove(C)
Expand Down Expand Up @@ -678,3 +682,14 @@
kueijin.mind.dharma.Hun = max_hun
kueijin.max_demon_chi = max_limit - max_hun
kueijin.demon_chi = min(kueijin.demon_chi, kueijin.max_demon_chi)

/**
* On being bit by a vampire
*
* This handles vampire bite sleep immunity and any future special interactions.
*/
/datum/species/kuei_jin/proc/on_kuei_jin_bitten(datum/source, mob/living/carbon/being_bitten)
SIGNAL_HANDLER

if(iscathayan(being_bitten))
return COMPONENT_RESIST_VAMPIRE_KISS
19 changes: 19 additions & 0 deletions code/modules/vtmb/werewolf_species.dm
Original file line number Diff line number Diff line change
Expand Up @@ -109,8 +109,16 @@
C.transformator = new(C)
C.transformator.human_form = C

//garou resist vampire bites better than mortals
RegisterSignal(C, COMSIG_MOB_VAMPIRE_SUCKED, PROC_REF(on_garou_bitten))
RegisterSignal(C.transformator.lupus_form, COMSIG_MOB_VAMPIRE_SUCKED, PROC_REF(on_garou_bitten))
RegisterSignal(C.transformator.crinos_form, COMSIG_MOB_VAMPIRE_SUCKED, PROC_REF(on_garou_bitten))

/datum/species/garou/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load)
. = ..()
UnregisterSignal(C, COMSIG_MOB_VAMPIRE_SUCKED)
UnregisterSignal(C.transformator.lupus_form, COMSIG_MOB_VAMPIRE_SUCKED)
UnregisterSignal(C.transformator.crinos_form, COMSIG_MOB_VAMPIRE_SUCKED)
for(var/datum/action/garouinfo/VI in C.actions)
if(VI)
VI.Remove(C)
Expand Down Expand Up @@ -163,3 +171,14 @@
SEND_SOUND(C, sound('code/modules/wod13/sounds/rage_decrease.ogg', 0, 0, 75))
to_chat(C, "<span class='boldnotice'><b>GNOSIS DECREASES</b></span>")
C.update_rage_hud()

/**
* On being bit by a vampire
*
* This handles vampire bite sleep immunity and any future special interactions.
*/
/datum/species/garou/proc/on_garou_bitten(datum/source, mob/living/carbon/being_bitten)
SIGNAL_HANDLER

if(isgarou(being_bitten) || iswerewolf(being_bitten))
return COMPONENT_RESIST_VAMPIRE_KISS
5 changes: 2 additions & 3 deletions code/modules/wod13/bloodsucking.dm
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,7 @@
if(isnpc(mob))
var/mob/living/carbon/human/npc/NPC = mob
NPC.danger_source = null
// NPC.last_attacker = src
mob.Stun(30)
mob.Stun(30) //NPCs don't get to resist

if(mob.bloodpool <= 1 && mob.maxbloodpool > 1)
to_chat(src, "<span class='warning'>You feel small amount of <b>BLOOD</b> in your victim.</span>")
Expand Down Expand Up @@ -238,5 +237,5 @@
client.images -= suckbar
qdel(suckbar)
stop_sound_channel(CHANNEL_BLOOD)
if(!iskindred(mob))
if(!(SEND_SIGNAL(mob, COMSIG_MOB_VAMPIRE_SUCKED, mob) & COMPONENT_RESIST_VAMPIRE_KISS))
mob.SetSleeping(50)
1 change: 1 addition & 0 deletions tgstation.dme
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@
#include "code\__DEFINES\dcs\helpers.dm"
#include "code\__DEFINES\dcs\signals.dm"
#include "code\__DEFINES\research\anomalies.dm"
#include "code\__DEFINES\wod13\signals_kindred.dm"
#include "code\__HELPERS\_lists.dm"
#include "code\__HELPERS\_logging.dm"
#include "code\__HELPERS\_string_lists.dm"
Expand Down
Loading