Vampires bugfixes (#29349)

This commit is contained in:
ShiftyRail
2021-04-26 17:43:43 +02:00
committed by GitHub
parent cf6151a62a
commit df9c0cdf9e
13 changed files with 46 additions and 45 deletions

View File

@@ -254,14 +254,16 @@
return return
// Vision-related changes. // Vision-related changes.
if (/datum/power/vampire/mature in current_powers) if (locate(/datum/power/vampire/vision) in current_powers)
H.change_sight(adding = SEE_TURFS|SEE_MOBS|SEE_OBJS) H.change_sight(adding = SEE_MOBS)
if (locate(/datum/power/vampire/mature) in current_powers)
H.change_sight(adding = SEE_TURFS|SEE_OBJS)
H.see_in_dark = 8 H.see_in_dark = 8
H.see_invisible = SEE_INVISIBLE_MINIMUM H.see_invisible = SEE_INVISIBLE_MINIMUM
else if (/datum/power/vampire/vision in current_powers) /datum/role/vampire/proc/is_mature_or_has_vision()
H.change_sight(adding = SEE_MOBS) return (locate(/datum/power/vampire/vision) in current_powers) || (locate(/datum/power/vampire/mature) in current_powers)
/datum/role/vampire/proc/handle_enthrall(var/datum/mind/enthralled) /datum/role/vampire/proc/handle_enthrall(var/datum/mind/enthralled)
if (!istype(enthralled)) if (!istype(enthralled))
@@ -312,11 +314,11 @@
if((T.get_lumcount() * 10) <= 2) if((T.get_lumcount() * 10) <= 2)
H.alphas["vampire_cloak"] = round((255 * 0.15)) H.alphas["vampire_cloak"] = round((255 * 0.15))
if(/datum/power/vampire/shadow in current_powers) if(locate(/datum/power/vampire/shadow) in current_powers)
H.color = "#000000" H.color = "#000000"
return TRUE return TRUE
else else
if(/datum/power/vampire/shadow in current_powers) if(locate(/datum/power/vampire/shadow) in current_powers)
H.alphas["vampire_cloak"] = round((255 * 0.15)) H.alphas["vampire_cloak"] = round((255 * 0.15))
else else
H.alphas["vampire_cloak"] = round((255 * 0.80)) H.alphas["vampire_cloak"] = round((255 * 0.80))
@@ -357,7 +359,7 @@
if(prob(35)) if(prob(35))
to_chat(H, "<span class='danger'>This ground is blessed. Get away, or splatter it with blood to make it safe for you.</span>") to_chat(H, "<span class='danger'>This ground is blessed. Get away, or splatter it with blood to make it safe for you.</span>")
if((/datum/power/vampire/mature in current_powers) && (istype(get_area(H), /area/chapel))) //stay out of the chapel unless you want to turn into a pile of ashes if((locate(/datum/power/vampire/mature) in current_powers) && (istype(get_area(H), /area/chapel))) //stay out of the chapel unless you want to turn into a pile of ashes
nullified = max(5, nullified + 2) nullified = max(5, nullified + 2)
if(prob(35)) if(prob(35))
to_chat(H, "<span class='sinister'>You feel yourself growing weaker.</span>") to_chat(H, "<span class='sinister'>You feel yourself growing weaker.</span>")
@@ -367,14 +369,14 @@
*/ */
if(!nullified) //Checks to see if you can benefit from your vamp current_powers here if(!nullified) //Checks to see if you can benefit from your vamp current_powers here
if(!(/datum/power/vampire/mature in current_powers)) if(!(locate(/datum/power/vampire/mature) in current_powers))
smitetemp -= 1 smitetemp -= 1
if(!(/datum/power/vampire/shadow in current_powers)) if(!(locate(/datum/power/vampire/shadow) in current_powers))
var/turf/T = get_turf(H) var/turf/T = get_turf(H)
if((T.get_lumcount() * 10) < 2) if((T.get_lumcount() * 10) < 2)
smitetemp -= 1 smitetemp -= 1
if(!(/datum/power/vampire/undying in current_powers)) if(!(locate(/datum/power/vampire/undying) in current_powers))
smitetemp -= 1 smitetemp -= 1
if(smitetemp <= 0) //if you weren't smote by the tile you're on, remove a little holy if(smitetemp <= 0) //if you weren't smote by the tile you're on, remove a little holy
@@ -446,7 +448,7 @@
var/mob/living/carbon/human/H = antag.current var/mob/living/carbon/human/H = antag.current
if (!istype(H)) if (!istype(H))
return return
if(/datum/power/vampire/mature in current_powers) if(locate(/datum/power/vampire/mature) in current_powers)
to_chat(H, "<span class='danger'>A freezing liquid permeates your bloodstream. Your vampiric powers fade and your insides burn.</span>") to_chat(H, "<span class='danger'>A freezing liquid permeates your bloodstream. Your vampiric powers fade and your insides burn.</span>")
H.take_organ_damage(0, 5) //FIRE, MAGIC FIRE THAT BURNS ROBOTIC LIMBS TOO! H.take_organ_damage(0, 5) //FIRE, MAGIC FIRE THAT BURNS ROBOTIC LIMBS TOO!
smitecounter += 10 //50 units to catch on fire. Generally you'll get fucked up quickly smitecounter += 10 //50 units to catch on fire. Generally you'll get fucked up quickly
@@ -463,7 +465,7 @@
var/mob/living/carbon/human/H = antag.current var/mob/living/carbon/human/H = antag.current
if (!istype(H)) if (!istype(H))
return return
if(!(/datum/power/vampire/undying in current_powers)) if(!(locate(/datum/power/vampire/undying) in current_powers))
if(method == TOUCH) if(method == TOUCH)
if(H.wear_mask) if(H.wear_mask)
to_chat(H, "<span class='warning'>Your mask protects you from the holy water!</span>") to_chat(H, "<span class='warning'>Your mask protects you from the holy water!</span>")
@@ -477,7 +479,7 @@
if(prob(15) && volume >= 30) if(prob(15) && volume >= 30)
var/datum/organ/external/head/head_organ = H.get_organ(LIMB_HEAD) var/datum/organ/external/head/head_organ = H.get_organ(LIMB_HEAD)
if(head_organ) if(head_organ)
if(!(/datum/power/vampire/mature in current_powers)) if(!(locate(/datum/power/vampire/mature) in current_powers))
to_chat(H, "<span class='danger'>A freezing liquid covers your face. Its melting!</span>") to_chat(H, "<span class='danger'>A freezing liquid covers your face. Its melting!</span>")
smitecounter += 60 //Equivalent from metabolizing all this holy water normally smitecounter += 60 //Equivalent from metabolizing all this holy water normally
if(head_organ.take_damage(30, 0)) if(head_organ.take_damage(30, 0))
@@ -485,16 +487,16 @@
head_organ.disfigure("burn") head_organ.disfigure("burn")
H.audible_scream() H.audible_scream()
else else
to_chat(H, "<span class='warning'>A freezing liquid covers your face. Your vampiric current_powers protect you!</span>") to_chat(H, "<span class='warning'>A freezing liquid covers your face. Your vampiric current powers protect you!</span>")
smitecounter += 12 //Ditto above smitecounter += 12 //Ditto above
else else
if(!(/datum/power/vampire/mature in current_powers)) if(!(locate(/datum/power/vampire/mature) in current_powers))
to_chat(H, "<span class='danger'>You are doused with a freezing liquid. You're melting!</span>") to_chat(H, "<span class='danger'>You are doused with a freezing liquid. You're melting!</span>")
H.take_organ_damage(min(15, volume * 2)) //Uses min() and volume to make sure they aren't being sprayed in trace amounts (1 unit != insta rape) -- Doohl H.take_organ_damage(min(15, volume * 2)) //Uses min() and volume to make sure they aren't being sprayed in trace amounts (1 unit != insta rape) -- Doohl
smitecounter += volume * 2 smitecounter += volume * 2
else else
to_chat(H, "<span class='warning'>You are doused with a freezing liquid. Your vampiric current_powers protect you!</span>") to_chat(H, "<span class='warning'>You are doused with a freezing liquid. Your vampiric current powers protect you!</span>")
smitecounter += volume * 0.4 smitecounter += volume * 0.4
else else
if(H.acidable()) if(H.acidable())

View File

@@ -367,7 +367,7 @@
/obj/effect/decal/cleanable/salt/proc/checkVamp(var/mob/living/theVamp) /obj/effect/decal/cleanable/salt/proc/checkVamp(var/mob/living/theVamp)
if(isvampire(theVamp)) if(isvampire(theVamp))
var/datum/role/vampire/V = isvampire(theVamp) var/datum/role/vampire/V = isvampire(theVamp)
if(/datum/power/vampire/charisma in V.current_powers) //He's already a powerful vamp, the check is no longer meta if(locate(/datum/power/vampire/charisma) in V.current_powers) //He's already a powerful vamp, the check is no longer meta
return TRUE return TRUE
return FALSE return FALSE

View File

@@ -486,7 +486,7 @@
var/mob/living/carbon/human/H = M var/mob/living/carbon/human/H = M
var/datum/role/vampire/V = isvampire(H) var/datum/role/vampire/V = isvampire(H)
if(V) if(V)
if(/datum/power/vampire/mature in V.current_powers) if(locate(/datum/power/vampire/mature) in V.current_powers)
V.smitecounter += 30 //Smithe the shit out of him. Four strikes and he's out V.smitecounter += 30 //Smithe the shit out of him. Four strikes and he's out
if(istype(M,/mob/living/simple_animal)) if(istype(M,/mob/living/simple_animal))
@@ -500,7 +500,7 @@
if(user.mind) if(user.mind)
if(ishuman(user)) if(ishuman(user))
var/datum/role/vampire/V = isvampire(user) var/datum/role/vampire/V = isvampire(user)
if(V && !(/datum/power/vampire/undying in V.current_powers)) if(V && !(locate(/datum/power/vampire/undying) in V.current_powers))
V.smitecounter += 60 V.smitecounter += 60
to_chat(user, "<span class='danger'>\The [src] sears your hand!</span>") to_chat(user, "<span class='danger'>\The [src] sears your hand!</span>")

View File

@@ -500,7 +500,7 @@
var/mob/living/carbon/human/H = user var/mob/living/carbon/human/H = user
if (isvampire(H)) if (isvampire(H))
var/datum/role/vampire/V = H.mind.GetRole(VAMPIRE) var/datum/role/vampire/V = H.mind.GetRole(VAMPIRE)
if (!(/datum/power/vampire/mature in V.current_powers)) if (!(locate(/datum/power/vampire/mature) in V.current_powers))
to_chat(H, "<span class='notice'>You don't see anything.</span>") to_chat(H, "<span class='notice'>You don't see anything.</span>")
return return

View File

@@ -49,7 +49,7 @@
var/datum/role/vampire/V = isvampire(H) var/datum/role/vampire/V = isvampire(H)
if(V && isReligiousLeader(user)) //Fuck up vampires by smiting the shit out of them. Shock and Awe! if(V && isReligiousLeader(user)) //Fuck up vampires by smiting the shit out of them. Shock and Awe!
if(/datum/power/vampire/mature in V.current_powers) if(locate(/datum/power/vampire/mature) in V.current_powers)
to_chat(H, "<span class='warning'>\The [src]'s power violently interferes with your own!</span>") to_chat(H, "<span class='warning'>\The [src]'s power violently interferes with your own!</span>")
if(V.nullified < 5) //Don't actually reduce their debuff if it's over 5 if(V.nullified < 5) //Don't actually reduce their debuff if it's over 5
V.nullified = min(5, V.nullified + 2) V.nullified = min(5, V.nullified + 2)
@@ -87,7 +87,7 @@
to_chat(user, "<span class='notice'>\The [src] is teeming with divine power. You feel like you could [fluff_pickup] a horde of undead with this.</span>") to_chat(user, "<span class='notice'>\The [src] is teeming with divine power. You feel like you could [fluff_pickup] a horde of undead with this.</span>")
if(ishuman(user)) //Typecasting, only humans can be vampires if(ishuman(user)) //Typecasting, only humans can be vampires
var/datum/role/vampire/V = isvampire(user) var/datum/role/vampire/V = isvampire(user)
if(V && !(/datum/power/vampire/undying in V.current_powers)) if(V && !(locate(/datum/power/vampire/undying) in V.current_powers))
V.smitecounter += 60 V.smitecounter += 60
to_chat(user, "<span class='danger'>You feel an unwanted presence as you pick up the rod. Your body feels like it is burning from the inside!</span>") to_chat(user, "<span class='danger'>You feel an unwanted presence as you pick up the rod. Your body feels like it is burning from the inside!</span>")

View File

@@ -159,7 +159,7 @@
if(ishuman(M)) //Only humans can be vampires or cultists. if(ishuman(M)) //Only humans can be vampires or cultists.
var/mob/living/carbon/human/H = M var/mob/living/carbon/human/H = M
V = isvampire(M) V = isvampire(M)
if(V && (/datum/power/vampire/mature in V.current_powers) && my_rel.leadsThisReligion(user)) //The user is a "mature" Vampire, fuck up his vampiric powers and hurt his head if(V && (locate(/datum/power/vampire/mature) in V.current_powers) && my_rel.leadsThisReligion(user)) //The user is a "mature" Vampire, fuck up his vampiric powers and hurt his head
to_chat(H, "<span class='warning'>[my_rel.deity_name]'s power nullifies your own!</span>") to_chat(H, "<span class='warning'>[my_rel.deity_name]'s power nullifies your own!</span>")
if(V.nullified < 5) //Don't actually reduce their debuff if it's over 5 if(V.nullified < 5) //Don't actually reduce their debuff if it's over 5
V.nullified = min(5, V.nullified + 2) V.nullified = min(5, V.nullified + 2)
@@ -213,7 +213,7 @@
var/mob/living/carbon/human/H = user var/mob/living/carbon/human/H = user
var/datum/role/vampire/V = isvampire(H) var/datum/role/vampire/V = isvampire(H)
var/datum/role/cultist/C = isanycultist(H) var/datum/role/cultist/C = isanycultist(H)
if(V && (!(/datum/power/vampire/undying in V.current_powers))) //We are a Vampire, we aren't very smart if(V && (!(locate(/datum/power/vampire/undying) in V.current_powers))) //We are a Vampire, we aren't very smart
to_chat(H, "<span class ='danger'>[my_rel.deity_name]'s power channels through \the [src]. You feel extremely uneasy as you grab it!</span>") to_chat(H, "<span class ='danger'>[my_rel.deity_name]'s power channels through \the [src]. You feel extremely uneasy as you grab it!</span>")
V.smitecounter += 10 V.smitecounter += 10
if(C) //We are a Cultist, we aren't very smart either, but at least there will be no consequences for us if(C) //We are a Cultist, we aren't very smart either, but at least there will be no consequences for us

View File

@@ -33,7 +33,7 @@
/obj/structure/mirror/proc/vampire_check(mob/living/user, mob/living/carbon/human/target) /obj/structure/mirror/proc/vampire_check(mob/living/user, mob/living/carbon/human/target)
var/datum/role/vampire/V = isvampire(target) var/datum/role/vampire/V = isvampire(target)
if(V && !(/datum/power/vampire/mature in V.current_powers)) if(V && !(locate(/datum/power/vampire/mature) in V.current_powers))
to_chat(user, "<span class='notice'>You don't see anything in \the [src].</span>") to_chat(user, "<span class='notice'>You don't see anything in \the [src].</span>")
return FALSE return FALSE
return TRUE return TRUE

View File

@@ -71,11 +71,11 @@ var/list/stationary_hearers = list( /obj/item/device/radio/intercom,
sight = copying sight = copying
if(adding) if(adding)
sight |= adding sight |= adding
if(adding & (SEE_TURFS | SEE_MOBS | SEE_OBJS)) if((sight != oldsight) && (adding & (SEE_TURFS | SEE_MOBS | SEE_OBJS)))
sight &= ~SEE_BLACKNESS sight &= ~SEE_BLACKNESS
if(removing) if(removing)
sight &= ~removing sight &= ~removing
if(removing & (SEE_TURFS | SEE_MOBS | SEE_OBJS)) if((sight != oldsight) && (removing & (SEE_TURFS | SEE_MOBS | SEE_OBJS)))
sight |= SEE_BLACKNESS sight |= SEE_BLACKNESS
if(sight != oldsight) if(sight != oldsight)
var/mob/virtualhearer/VH = mob_hearers[src] var/mob/virtualhearer/VH = mob_hearers[src]

View File

@@ -393,7 +393,7 @@
if( head && head.is_hidden_identity()) if( head && head.is_hidden_identity())
return get_worn_id_name("Unknown") //Likewise for hats return get_worn_id_name("Unknown") //Likewise for hats
var/datum/role/vampire/V = isvampire(src) var/datum/role/vampire/V = isvampire(src)
if(V && (/datum/power/vampire/shadow in V.current_powers) && V.ismenacing) if(V && (locate(/datum/power/vampire/shadow) in V.current_powers) && V.ismenacing)
return get_worn_id_name("Unknown") return get_worn_id_name("Unknown")
var/face_name = get_face_name() var/face_name = get_face_name()
var/id_name = get_worn_id_name("") var/id_name = get_worn_id_name("")

View File

@@ -117,14 +117,13 @@
src.client.images += V.cached_images[i] src.client.images += V.cached_images[i]
i++ i++
if (!V || (!(/datum/power/vampire/vision in V.current_powers) && !(/datum/power/vampire/mature in V.current_powers))) // Not a vampire, or a vampire but neither of the spells. if (!V || !V.is_mature_or_has_vision()) // Not a vampire, or a vampire but neither of the spells.
change_sight(removing = SEE_MOBS) change_sight(removing = SEE_MOBS)
if (!V || !(/datum/power/vampire/mature in V.current_powers)) if (!V || !(locate(/datum/power/vampire/mature) in V.current_powers))
change_sight(removing = SEE_TURFS|SEE_OBJS) change_sight(removing = SEE_TURFS|SEE_OBJS)
var/datum/organ/internal/eyes/E = src.internal_organs_by_name["eyes"] var/datum/organ/internal/eyes/E = src.internal_organs_by_name["eyes"]
if(E) if(E)
see_in_dark = E.see_in_dark see_in_dark = E.see_in_dark
see_invisible = see_in_dark > 2 ? SEE_INVISIBLE_LEVEL_ONE : SEE_INVISIBLE_LIVING see_invisible = see_in_dark > 2 ? SEE_INVISIBLE_LEVEL_ONE : SEE_INVISIBLE_LIVING
// Moiving this "see invisble" thing here so that it can be overriden by xrays, vampires... // Moiving this "see invisble" thing here so that it can be overriden by xrays, vampires...

View File

@@ -67,7 +67,7 @@
C.Stun(distance_value) C.Stun(distance_value)
if(distance_value > 1) if(distance_value > 1)
C.Knockdown(distance_value) C.Knockdown(distance_value)
C.stuttering += 5+distance_value * ((/datum/power/vampire/charisma in V.current_powers) ? 2 : 1) //double stutter time with Charisma C.stuttering += 5+distance_value * ((locate(/datum/power/vampire/charisma) in V.current_powers) ? 2 : 1) //double stutter time with Charisma
if(!C.blinded) if(!C.blinded)
C.blinded = 1 C.blinded = 1
C.blinded += max(1, distance_value) C.blinded += max(1, distance_value)

View File

@@ -56,9 +56,9 @@
return FALSE return FALSE
user.visible_message("<span class='warning'>[user] bites \the [target]'s neck!</span>", "<span class='warning'>You bite \the [target]'s neck and begin the flow of power.</span>") user.visible_message("<span class='warning'>[user] bites \the [target]'s neck!</span>", "<span class='warning'>You bite \the [target]'s neck and begin the flow of power.</span>")
to_chat(target, "<span class='sinister'>You feel the tendrils of evil [(/datum/power/vampire/charisma in V.current_powers) ? "aggressively" : "slowly"] invade your mind.</span>") to_chat(target, "<span class='sinister'>You feel the tendrils of evil [(locate(/datum/power/vampire/charisma) in V.current_powers) ? "aggressively" : "slowly"] invade your mind.</span>")
if(do_mob(user, target, (/datum/power/vampire/charisma in V.current_powers) ? 150 : 300)) if(do_mob(user, target, (locate(/datum/power/vampire/charisma) in V.current_powers) ? 150 : 300))
if(user.vampire_power(blood_cost, 0)) // recheck if(user.vampire_power(blood_cost, 0)) // recheck
V.handle_enthrall(target.mind) V.handle_enthrall(target.mind)
else else

View File

@@ -10,7 +10,7 @@
world.log << "[src] has vampire spells but isn't a vampire." world.log << "[src] has vampire spells but isn't a vampire."
return 0 return 0
var/fullpower = (/datum/power/vampire/jaunt in vampire.current_powers) var/fullpower = (locate(/datum/power/vampire/jaunt) in vampire.current_powers)
if(src.stat > max_stat) if(src.stat > max_stat)
to_chat(src, "<span class='warning'>You are incapacitated.</span>") to_chat(src, "<span class='warning'>You are incapacitated.</span>")
@@ -43,7 +43,7 @@
if(restrained()) if(restrained())
to_chat(src, "<span class ='warning'> You cannot do this while restrained! </span>") to_chat(src, "<span class ='warning'> You cannot do this while restrained! </span>")
return 0 return 0
if(!(/datum/power/vampire/charisma in V.current_powers)) //Charisma allows implanted targets to be enthralled. if(!(locate(/datum/power/vampire/charisma) in V.current_powers)) //Charisma allows implanted targets to be enthralled.
for(var/obj/item/weapon/implant/loyalty/L in H) for(var/obj/item/weapon/implant/loyalty/L in H)
if(L && L.implanted) if(L && L.implanted)
implanted = TRUE implanted = TRUE