diff --git a/yogstation/code/datums/antagonists/vampire.dm b/yogstation/code/datums/antagonists/vampire.dm index 0b7bb8367cbc..16de4e573ec2 100644 --- a/yogstation/code/datums/antagonists/vampire.dm +++ b/yogstation/code/datums/antagonists/vampire.dm @@ -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() @@ -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) @@ -99,6 +106,8 @@ to_chat(owner, "You are a creature of the night -- holy water, the chapel, and space will cause you to burn.") to_chat(owner, "Hit someone in the head with harm intent to start sucking their blood. However, only blood from living, non-vampiric creatures is usable!") to_chat(owner, "Coffins will heal you.") + if(full_objectives == FALSE) + to_chat(owner, "You are not required to obey other vampires, however, you have gained a respect for them.") if(LAZYLEN(objectives_given)) owner.announce_objectives() owner.current.playsound_local(get_turf(owner.current), 'yogstation/sound/ambience/antag/vampire.ogg',80,0) @@ -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 diff --git a/yogstation/code/game/gamemodes/vampire/vampire.dm b/yogstation/code/game/gamemodes/vampire/vampire.dm index bb22821d08bc..25b69870bd98 100644 --- a/yogstation/code/game/gamemodes/vampire/vampire.dm +++ b/yogstation/code/game/gamemodes/vampire/vampire.dm @@ -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)) diff --git a/yogstation/code/game/gamemodes/vampire/vampire_objectives.dm b/yogstation/code/game/gamemodes/vampire/vampire_objectives.dm index 7a1647bf13d0..72441468b5df 100644 --- a/yogstation/code/game/gamemodes/vampire/vampire_objectives.dm +++ b/yogstation/code/game/gamemodes/vampire/vampire_objectives.dm @@ -10,4 +10,21 @@ if(vamp && target_amount <= vamp.total_blood) return TRUE else - return FALSE \ No newline at end of file + 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 diff --git a/yogstation/code/game/gamemodes/vampire/vampire_powers.dm b/yogstation/code/game/gamemodes/vampire/vampire_powers.dm index 9a0a21c7dde7..6690547f3b4f 100644 --- a/yogstation/code/game/gamemodes/vampire/vampire_powers.dm +++ b/yogstation/code/game/gamemodes/vampire/vampire_powers.dm @@ -259,16 +259,17 @@ 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, "They're already a vampire!") @@ -276,12 +277,12 @@ if(HAS_TRAIT(target, TRAIT_MINDSHIELD)) to_chat(user, "[target]'s mind is too strong!") continue - user.visible_message("[user] latches onto [target]'s neck, and a pure dread eminates from them.", "You latch onto [target]'s neck, preparing to transfer your unholy blood to them.", "A dreadful feeling overcomes you") + user.visible_message("[user] latches onto [target]'s neck, pure dread eminating from them.", "You latch onto [target]'s neck, preparing to transfer your unholy blood to them.", "A dreadful feeling overcomes you") 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, "Visions of dread flood your vision...") + to_chat(target, "Wicked shadows invade your sight, beckoning to you.") to_chat(user, "We begin to drain [target]'s blood in, so Lilith can bless it.") if(2) to_chat(target, "Demonic whispers fill your mind, and they become irressistible...") @@ -301,9 +302,11 @@ to_chat(target, "Strike fear into their hearts...") to_chat(user, "They have signed the pact!") to_chat(target, "You sign Lilith's Pact.") - target.mind.store_memory("[user] showed you the glory of Lilith. You are not required to respect or obey [user] in any way") - add_vampire(target) - + target.mind.store_memory("[user] showed you the glory of Lilith. You are not required to obey [user], however, you have gained a respect for them.") + target.Sleeping(600) + target.blood_volume = 560 + add_vampire(target, FALSE) + vamp.converted ++ /obj/effect/proc_holder/spell/self/revive name = "Revive"