Skip to content
This repository was archived by the owner on May 22, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 9 additions & 8 deletions yogstation/code/datums/antagonists/vampire.dm
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,16 @@
/datum/vampire_passive/vision = 75,
/obj/effect/proc_holder/spell/self/shapeshift = 75,
/obj/effect/proc_holder/spell/self/cloak = 100,
/obj/effect/proc_holder/spell/targeted/disease = 175,
/obj/effect/proc_holder/spell/bats = 250,
/obj/effect/proc_holder/spell/self/revive = 100,
/obj/effect/proc_holder/spell/targeted/disease = 200,//why is spell-that-kills-people unlocked so early what the fuck
/obj/effect/proc_holder/spell/self/batform = 200,
/obj/effect/proc_holder/spell/self/screech = 215,
/obj/effect/proc_holder/spell/bats = 250,
/datum/vampire_passive/regen = 255,
/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/mistform = 300,
/datum/vampire_passive/full = 420,
/obj/effect/proc_holder/spell/self/summon_coat = 420,
/obj/effect/proc_holder/spell/targeted/vampirize = 450,
/obj/effect/proc_holder/spell/self/revive = 0)
/obj/effect/proc_holder/spell/targeted/vampirize = 450)

/datum/antagonist/vampire/get_admin_commands()
. = ..()
Expand Down Expand Up @@ -202,6 +202,7 @@
C.adjustFireLoss(-4)
C.adjustToxLoss(-4)
C.adjustOxyLoss(-4)
C.adjustCloneLoss(-4)
return
if(!get_ability(/datum/vampire_passive/full) && istype(get_area(C.loc), /area/chapel))
vamp_burn()
Expand Down Expand Up @@ -232,9 +233,9 @@
to_chat(O, "<span class='warning'>They've got no blood left to give.</span>")
break
if(H.stat != DEAD)
blood = min(20, H.blood_volume)// if they have less than 20 blood, give them the remnant else they get 20 blood
total_blood += blood / 2 //divide by 2 to counted the double suction since removing cloneloss -Melandor0
usable_blood += blood / 2
blood = min(20, H.blood_volume) // if they have less than 20 blood, give them the remnant else they get 20 blood
total_blood += blood //get total blood 100% efficiency because fuck waiting out 5 fucking minutes and 1500 actual blood to get your 600 blood for the objective
usable_blood += blood * 0.75 //75% usable blood since it's actually used for stuff
else
blood = min(5, H.blood_volume) // The dead only give 5 blood
total_blood += blood
Expand All @@ -244,7 +245,7 @@
H.blood_volume = max(H.blood_volume - 25, 0)
if(ishuman(O))
O.nutrition = min(O.nutrition + (blood / 2), NUTRITION_LEVEL_WELL_FED)
playsound(O.loc, 'sound/items/eatfood.ogg', 40, 1)
playsound(O.loc, 'sound/items/eatfood.ogg', 40, 1, extrarange = -4)//have to be within 3 tiles to hear the sucking

draining = null
to_chat(owner, "<span class='notice'>You stop draining [H.name] of blood.</span>")
Expand Down
95 changes: 51 additions & 44 deletions yogstation/code/game/gamemodes/vampire/vampire_powers.dm
Original file line number Diff line number Diff line change
Expand Up @@ -112,17 +112,18 @@
vamp_req = TRUE

/obj/effect/proc_holder/spell/targeted/hypnotise/cast(list/targets, mob/user = usr)
for(var/mob/living/target in targets)
for(var/mob/living/carbon/target in targets)
user.visible_message("<span class='warning'>[user]'s eyes flash briefly as he stares into [target]'s eyes</span>")
if(do_mob(user, target, 30))
to_chat(user, "<span class='warning'>Your piercing gaze knocks out [target].</span>")
to_chat(target, "<span class='warning'>You find yourself unable to move and barely able to speak.</span>")
to_chat(target, "<span class='warning'>You find yourself unable to move or speak.</span>")
target.Paralyze(150)
target.stuttering = 10
target.silent = 10 //finally makes this stupid spell USEFUL
else
revert_cast(usr)
to_chat(usr, "<span class='warning'>You broke your gaze.</span>")


/obj/effect/proc_holder/spell/self/shapeshift
name = "Shapeshift (50)"
desc = "Changes your name and appearance at the cost of 50 blood and has a cooldown of 3 minutes."
Expand All @@ -140,6 +141,7 @@
randomize_human(H)
user.regenerate_icons()


/obj/effect/proc_holder/spell/self/cloak
name = "Cloak of Darkness"
desc = "Toggles whether you are currently cloaking yourself in darkness."
Expand Down Expand Up @@ -169,6 +171,49 @@
update_name()
to_chat(user, "<span class='notice'>You will now be [V.iscloaking ? "hidden" : "seen"] in darkness.</span>")


/obj/effect/proc_holder/spell/self/revive
name = "Revive"
gain_desc = "You have gained the ability to revive after death... However you can still be cremated/gibbed, and you will disintergrate if you're in the chapel!"
desc = "Revives you, provided you are not in the chapel!"
blood_used = 0
stat_allowed = TRUE
charge_max = 1000
action_icon = 'yogstation/icons/mob/vampire.dmi'
action_icon_state = "coffin"
action_background_icon_state = "bg_demon"
vamp_req = TRUE

/obj/effect/proc_holder/spell/self/revive/cast(list/targets, mob/user = usr)
if(!is_vampire(user) || !isliving(user))
revert_cast()
return
if(user.stat != DEAD)
to_chat(user, "<span class='notice'>We aren't dead enough to do that yet!</span>")
revert_cast()
return
if(user.reagents.has_reagent("holywater"))
to_chat(user, "<span class='danger'>We cannot revive, holy water is in our system!</span>")
return
var/mob/living/L = user
if(istype(get_area(L.loc), /area/chapel))
L.visible_message("<span class='warning'>[L] disintergrates into dust!</span>", "<span class='userdanger'>Holy energy seeps into our very being, disintergrating us instantly!</span>", "You hear sizzling.")
new /obj/effect/decal/remains/human(L.loc)
L.dust()
to_chat(L, "<span class='notice'>We begin to reanimate... this will take 1 minute.</span>")
addtimer(CALLBACK(src, /obj/effect/proc_holder/spell/self/revive.proc/revive, L), 600)

/obj/effect/proc_holder/spell/self/revive/proc/revive(mob/living/user)
user.revive(full_heal = TRUE)
user.visible_message("<span class='warning'>[user] reanimates from death!</span>", "<span class='notice'>We get back up.</span>")
var/list/missing = user.get_missing_limbs()
if(missing.len)
playsound(user, 'sound/magic/demon_consume.ogg', 50, 1)
user.visible_message("<span class='warning'>Shadowy matter takes the place of [user]'s missing limbs as they reform!</span>")
user.regenerate_limbs(0, list(BODY_ZONE_HEAD))
user.regenerate_organs()


/obj/effect/proc_holder/spell/targeted/disease
name = "Diseased Touch (50)"
desc = "Touches your victim with infected blood giving them Grave Fever, which will, left untreated, causes toxic building and frequent collapsing."
Expand All @@ -189,6 +234,7 @@
var/datum/disease/D = new /datum/disease/vampire
target.ForceContractDisease(D)


/obj/effect/proc_holder/spell/self/screech
name = "Chiropteran Screech (20)"
desc = "An extremely loud shriek that stuns nearby humans and breaks windows as well."
Expand All @@ -214,6 +260,7 @@
W.take_damage(75)
playsound(user.loc, 'sound/effects/screech.ogg', 100, 1)


/obj/effect/proc_holder/spell/bats
name = "Summon Bats (30)"
desc = "You summon a pair of space bats who attack nearby targets until they or their target is dead."
Expand Down Expand Up @@ -258,6 +305,7 @@
range = -1
addtimer(VARSET_CALLBACK(src, range, -1), 10) //Avoid fuckery


/obj/effect/proc_holder/spell/targeted/vampirize
name = "Lilith's Pact (400)"
desc = "You drain a victim's blood, and fill them with new blood, blessed by Lilith, turning them into a new vampire."
Expand Down Expand Up @@ -305,47 +353,6 @@
add_vampire(target)


/obj/effect/proc_holder/spell/self/revive
name = "Revive"
gain_desc = "You have gained the ability to revive after death... However you can still be cremated/gibbed, and you will disintergrate if you're in the chapel!"
desc = "Revives you, provided you are not in the chapel!"
blood_used = 0
stat_allowed = TRUE
charge_max = 1000
action_icon = 'yogstation/icons/mob/vampire.dmi'
action_icon_state = "coffin"
action_background_icon_state = "bg_demon"
vamp_req = TRUE

/obj/effect/proc_holder/spell/self/revive/cast(list/targets, mob/user = usr)
if(!is_vampire(user) || !isliving(user))
revert_cast()
return
if(user.stat != DEAD)
to_chat(user, "<span class='notice'>We aren't dead enough to do that yet!</span>")
revert_cast()
return
if(user.reagents.has_reagent("holywater"))
to_chat(user, "<span class='danger'>We cannot revive, holy water is in our system!</span>")
return
var/mob/living/L = user
if(istype(get_area(L.loc), /area/chapel))
L.visible_message("<span class='warning'>[L] disintergrates into dust!</span>", "<span class='userdanger'>Holy energy seeps into our very being, disintergrating us instantly!</span>", "You hear sizzling.")
new /obj/effect/decal/remains/human(L.loc)
L.dust()
to_chat(L, "<span class='notice'>We begin to reanimate... this will take a minute.</span>")
addtimer(CALLBACK(src, /obj/effect/proc_holder/spell/self/revive.proc/revive, L), 600)

/obj/effect/proc_holder/spell/self/revive/proc/revive(mob/living/user)
user.revive(full_heal = TRUE)
user.visible_message("<span class='warning'>[user] reanimates from death!</span>", "<span class='notice'>We get back up.</span>")
var/list/missing = user.get_missing_limbs()
if(missing.len)
playsound(user, 'sound/magic/demon_consume.ogg', 50, 1)
user.visible_message("<span class='warning'>Shadowy matter takes the place of [user]'s missing limbs as they reform!</span>")
user.regenerate_limbs(0, list(BODY_ZONE_HEAD))
user.regenerate_organs()

/obj/effect/proc_holder/spell/self/summon_coat
name = "Summon Dracula Coat (100)"
desc = "Allows you to summon a Vampire Coat providing passive usable blood restoration when your usable blood is very low."
Expand Down