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
19 changes: 17 additions & 2 deletions yogstation/code/datums/antagonists/vampire.dm
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@

var/usable_blood = 0
var/total_blood = 0
var/converted = 0
var/fullpower = FALSE
var/full_objectives = TRUE
var/draining
var/list/objectives_given = list()

Expand All @@ -36,6 +38,11 @@
/obj/effect/proc_holder/spell/targeted/vampirize = 450,
/obj/effect/proc_holder/spell/self/revive = 0)

/datum/antagonist/vampire/new_blood
full_objectives = FALSE
roundend_category = "new bloods"
show_in_antagpanel = FALSE

/datum/antagonist/vampire/get_admin_commands()
. = ..()
.["Full Power"] = CALLBACK(src,.proc/admin_set_full_power)
Expand Down Expand Up @@ -99,6 +106,8 @@
to_chat(owner, "<span class='danger bold'>You are a creature of the night -- holy water, the chapel, and space will cause you to burn.</span>")
to_chat(owner, "<span class='userdanger'>Hit someone in the head with harm intent to start sucking their blood. However, only blood from living, non-vampiric creatures is usable!</span>")
to_chat(owner, "<span class='notice bold'>Coffins will heal you.</span>")
if(full_objectives == FALSE)
to_chat(owner, "<span class='notice bold'>You are not required to obey other vampires, however, you have gained a respect for them.</span>")
if(LAZYLEN(objectives_given))
owner.announce_objectives()
owner.current.playsound_local(get_turf(owner.current), 'yogstation/sound/ambience/antag/vampire.ogg',80,0)
Expand All @@ -109,8 +118,14 @@
blood_objective.gen_amount_goal()
add_objective(blood_objective)

for(var/i = 1, i < CONFIG_GET(number/traitor_objectives_amount), i++)
forge_single_objective()
if(full_objectives)
for(var/i = 1, i < CONFIG_GET(number/traitor_objectives_amount), i++)
forge_single_objective()

var/datum/objective/convert/convert_objective = new
convert_objective.owner = owner
convert_objective.gen_amount_goal()
add_objective(convert_objective)

if(!(locate(/datum/objective/escape) in objectives))
var/datum/objective/escape/escape_objective = new
Expand Down
14 changes: 9 additions & 5 deletions yogstation/code/game/gamemodes/vampire/vampire.dm
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,15 @@
..()
return TRUE

/proc/add_vampire(mob/living/L)
if(!L || !L.mind || is_vampire(L))
return FALSE
var/datum/antagonist/vampire/vamp = L.mind.add_antag_datum(/datum/antagonist/vampire)
return vamp
/proc/add_vampire(mob/living/L, full_vampire = TRUE)
if(!L || !L.mind || is_vampire(L))
return FALSE
var/datum/antagonist/vampire/vamp
if(full_vampire == TRUE)
vamp = L.mind.add_antag_datum(/datum/antagonist/vampire)
else
vamp = L.mind.add_antag_datum(/datum/antagonist/vampire/new_blood)
return vamp

/proc/remove_vampire(mob/living/L)
if(!L || !L.mind || !is_vampire(L))
Expand Down
19 changes: 18 additions & 1 deletion yogstation/code/game/gamemodes/vampire/vampire_objectives.dm
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,21 @@
if(vamp && target_amount <= vamp.total_blood)
return TRUE
else
return FALSE
return FALSE

/datum/objective/convert/proc/gen_amount_goal(lowbound = 1, highbound = 3)
target_amount = rand (lowbound,highbound)
if(target_amount == 1)
explanation_text = "Turn a crew member into a vampire using Lilith's Pact."
else
explanation_text = "Turn [target_amount] crew members into vampires using Lilith's Pact."
return target_amount

/datum/objective/convert/check_completion()
if(!owner)
return FALSE
var/datum/antagonist/vampire/vamp = owner.has_antag_datum(/datum/antagonist/vampire)
if(vamp && target_amount <= vamp.converted)
return TRUE
else
return FALSE
17 changes: 10 additions & 7 deletions yogstation/code/game/gamemodes/vampire/vampire_powers.dm
Original file line number Diff line number Diff line change
Expand Up @@ -259,29 +259,30 @@
addtimer(VARSET_CALLBACK(src, range, -1), 10) //Avoid fuckery

/obj/effect/proc_holder/spell/targeted/vampirize
name = "Lilith's Pact (400)"
name = "Lilith's Pact (300)"
desc = "You drain a victim's blood, and fill them with new blood, blessed by Lilith, turning them into a new vampire."
gain_desc = "You have gained the ability to force someone, given time, to become a vampire."
action_icon = 'yogstation/icons/mob/vampire.dmi'
action_background_icon_state = "bg_demon"
action_icon_state = "oath"
blood_used = 400
blood_used = 300
vamp_req = TRUE

/obj/effect/proc_holder/spell/targeted/vampirize/cast(list/targets, mob/user = usr)
var/datum/antagonist/vampire/vamp = user.mind.has_antag_datum(/datum/antagonist/vampire)
for(var/mob/living/carbon/target in targets)
if(is_vampire(target))
to_chat(user, "<span class='warning'>They're already a vampire!</span>")
continue
if(HAS_TRAIT(target, TRAIT_MINDSHIELD))
to_chat(user, "<span class='warning'>[target]'s mind is too strong!</span>")
continue
user.visible_message("<span class='warning'>[user] latches onto [target]'s neck, and a pure dread eminates from them.</span>", "<span class='warning'>You latch onto [target]'s neck, preparing to transfer your unholy blood to them.</span>", "<span class='warning'>A dreadful feeling overcomes you</span>")
user.visible_message("<span class='warning'>[user] latches onto [target]'s neck, pure dread eminating from them.</span>", "<span class='warning'>You latch onto [target]'s neck, preparing to transfer your unholy blood to them.</span>", "<span class='warning'>A dreadful feeling overcomes you</span>")
target.reagents.add_reagent(/datum/reagent/medicine/salbutamol, 10) //incase you're choking the victim
for(var/progress = 0, progress <= 3, progress++)
switch(progress)
if(1)
to_chat(target, "<span class='warning'>Visions of dread flood your vision...</span>")
to_chat(target, "<span class='danger'>Wicked shadows invade your sight, beckoning to you.</span>")
to_chat(user, "<span class='notice'>We begin to drain [target]'s blood in, so Lilith can bless it.</span>")
if(2)
to_chat(target, "<span class='danger'>Demonic whispers fill your mind, and they become irressistible...</span>")
Expand All @@ -301,9 +302,11 @@
to_chat(target, "<span class='italics'>Strike fear into their hearts...</span>")
to_chat(user, "<span class='notice italics bold'>They have signed the pact!</span>")
to_chat(target, "<span class='userdanger'>You sign Lilith's Pact.</span>")
target.mind.store_memory("<B>[user] showed you the glory of Lilith. <I>You are not required to respect or obey [user] in any way</I></B>")
add_vampire(target)

target.mind.store_memory("<B>[user] showed you the glory of Lilith. <I>You are not required to obey [user], however, you have gained a respect for them.</I></B>")
target.Sleeping(600)
target.blood_volume = 560
add_vampire(target, FALSE)
vamp.converted ++

/obj/effect/proc_holder/spell/self/revive
name = "Revive"
Expand Down