diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm
index d382cca1d2..859fe49d87 100644
--- a/code/__DEFINES/dcs/signals.dm
+++ b/code/__DEFINES/dcs/signals.dm
@@ -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"
diff --git a/code/__DEFINES/wod13/signals_kindred.dm b/code/__DEFINES/wod13/signals_kindred.dm
new file mode 100644
index 0000000000..3c3d6987da
--- /dev/null
+++ b/code/__DEFINES/wod13/signals_kindred.dm
@@ -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)
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 41454bb742..12832366fc 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -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)
diff --git a/code/modules/mob/living/carbon/werewolf/transformation.dm b/code/modules/mob/living/carbon/werewolf/transformation.dm
index 3454802c14..5226717d66 100644
--- a/code/modules/mob/living/carbon/werewolf/transformation.dm
+++ b/code/modules/mob/living/carbon/werewolf/transformation.dm
@@ -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
@@ -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
@@ -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
@@ -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)
diff --git a/code/modules/vtmb/kindred_species.dm b/code/modules/vtmb/kindred_species.dm
index 8ee9b16edf..c0f79bd0b6 100644
--- a/code/modules/vtmb/kindred_species.dm
+++ b/code/modules/vtmb/kindred_species.dm
@@ -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)
@@ -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
diff --git a/code/modules/vtmb/kuei_jin.dm b/code/modules/vtmb/kuei_jin.dm
index 4bac5168ca..8720b502ee 100644
--- a/code/modules/vtmb/kuei_jin.dm
+++ b/code/modules/vtmb/kuei_jin.dm
@@ -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)
@@ -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
diff --git a/code/modules/vtmb/werewolf_species.dm b/code/modules/vtmb/werewolf_species.dm
index c4209e67ce..821be1839b 100644
--- a/code/modules/vtmb/werewolf_species.dm
+++ b/code/modules/vtmb/werewolf_species.dm
@@ -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)
@@ -163,3 +171,14 @@
SEND_SOUND(C, sound('code/modules/wod13/sounds/rage_decrease.ogg', 0, 0, 75))
to_chat(C, "GNOSIS DECREASES")
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
diff --git a/code/modules/wod13/bloodsucking.dm b/code/modules/wod13/bloodsucking.dm
index e9e101e3c3..352cc7d9b0 100644
--- a/code/modules/wod13/bloodsucking.dm
+++ b/code/modules/wod13/bloodsucking.dm
@@ -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, "You feel small amount of BLOOD in your victim.")
@@ -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)
diff --git a/tgstation.dme b/tgstation.dme
index 1ae420f64f..43450bbca8 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -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"