From d58bdfdb4aa13a5ab2d66331093d5e979e6d0f83 Mon Sep 17 00:00:00 2001 From: Darkstick Date: Sun, 15 Mar 2020 17:20:39 -0400 Subject: [PATCH 1/4] I did it I won --- yogstation/code/datums/antagonists/vampire.dm | 19 +++++++++++++++++-- .../code/game/gamemodes/vampire/vampire.dm | 15 ++++++++++----- .../gamemodes/vampire/vampire_objectives.dm | 17 +++++++++++++++++ .../game/gamemodes/vampire/vampire_powers.dm | 9 +++++---- 4 files changed, 49 insertions(+), 11 deletions(-) diff --git a/yogstation/code/datums/antagonists/vampire.dm b/yogstation/code/datums/antagonists/vampire.dm index 89f637d9dc3b..4f4022206ea0 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 = 350) +/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 creatures is usable!") to_chat(owner, "Coffins will heal you.") + if(full_objectives == FALSE) + to_chat(owner, "You are not required to respect or obey other vampires in any way.") 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..7e2d02833650 100644 --- a/yogstation/code/game/gamemodes/vampire/vampire.dm +++ b/yogstation/code/game/gamemodes/vampire/vampire.dm @@ -7,6 +7,7 @@ if(vamp && statpanel("Status")) stat("Total Blood", vamp.total_blood) stat("Usable Blood", vamp.usable_blood) + stat("Crew Converted", vamp.converted) /mob/living/carbon/human/Life() . = ..() @@ -70,11 +71,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..d6c0116a747b 100644 --- a/yogstation/code/game/gamemodes/vampire/vampire_objectives.dm +++ b/yogstation/code/game/gamemodes/vampire/vampire_objectives.dm @@ -9,5 +9,22 @@ var/datum/antagonist/vampire/vamp = owner.has_antag_datum(/datum/antagonist/vampire) if(vamp && target_amount <= vamp.total_blood) return TRUE + else + 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 \ No newline at end of file diff --git a/yogstation/code/game/gamemodes/vampire/vampire_powers.dm b/yogstation/code/game/gamemodes/vampire/vampire_powers.dm index 2ecfa81f33c9..e7309c1dd801 100644 --- a/yogstation/code/game/gamemodes/vampire/vampire_powers.dm +++ b/yogstation/code/game/gamemodes/vampire/vampire_powers.dm @@ -269,6 +269,7 @@ 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...") @@ -302,8 +303,8 @@ 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) - + add_vampire(target, FALSE) + vamp.converted ++ /obj/effect/proc_holder/spell/self/revive name = "Revive" From b201f2843af4f24ad29d640e9b2e3768922a6c2c Mon Sep 17 00:00:00 2001 From: Darkstick Date: Sun, 15 Mar 2020 17:27:43 -0400 Subject: [PATCH 2/4] new line --- yogstation/code/game/gamemodes/vampire/vampire_objectives.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yogstation/code/game/gamemodes/vampire/vampire_objectives.dm b/yogstation/code/game/gamemodes/vampire/vampire_objectives.dm index d6c0116a747b..72441468b5df 100644 --- a/yogstation/code/game/gamemodes/vampire/vampire_objectives.dm +++ b/yogstation/code/game/gamemodes/vampire/vampire_objectives.dm @@ -27,4 +27,4 @@ if(vamp && target_amount <= vamp.converted) return TRUE else - return FALSE \ No newline at end of file + return FALSE From 22eacbc0f58dec878eec6323a2ba3e35b107faea Mon Sep 17 00:00:00 2001 From: Darkstick Date: Sun, 15 Mar 2020 17:56:30 -0400 Subject: [PATCH 3/4] Remove "crew converted" counter from stat list --- yogstation/code/game/gamemodes/vampire/vampire.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/yogstation/code/game/gamemodes/vampire/vampire.dm b/yogstation/code/game/gamemodes/vampire/vampire.dm index 7e2d02833650..25b69870bd98 100644 --- a/yogstation/code/game/gamemodes/vampire/vampire.dm +++ b/yogstation/code/game/gamemodes/vampire/vampire.dm @@ -7,7 +7,6 @@ if(vamp && statpanel("Status")) stat("Total Blood", vamp.total_blood) stat("Usable Blood", vamp.usable_blood) - stat("Crew Converted", vamp.converted) /mob/living/carbon/human/Life() . = ..() From 285d1caaf05ff944bd0896bcb8ef5e12216c544a Mon Sep 17 00:00:00 2001 From: Darkstick Date: Sun, 15 Mar 2020 20:45:10 -0400 Subject: [PATCH 4/4] Tweaks the new blood greeting message to discourage vengeance, resets the blood level of convertees to 100%, adds a sleep stun after the conversion --- yogstation/code/datums/antagonists/vampire.dm | 4 ++-- yogstation/code/game/gamemodes/vampire/vampire_powers.dm | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/yogstation/code/datums/antagonists/vampire.dm b/yogstation/code/datums/antagonists/vampire.dm index 4f4022206ea0..f24f26565b1e 100644 --- a/yogstation/code/datums/antagonists/vampire.dm +++ b/yogstation/code/datums/antagonists/vampire.dm @@ -35,7 +35,7 @@ /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/targeted/vampirize = 320, /obj/effect/proc_holder/spell/self/revive = 350) /datum/antagonist/vampire/new_blood @@ -107,7 +107,7 @@ to_chat(owner, "Hit someone in the head with harm intent to start sucking their blood. However, only blood from living creatures is usable!") to_chat(owner, "Coffins will heal you.") if(full_objectives == FALSE) - to_chat(owner, "You are not required to respect or obey other vampires in any way.") + 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) diff --git a/yogstation/code/game/gamemodes/vampire/vampire_powers.dm b/yogstation/code/game/gamemodes/vampire/vampire_powers.dm index e7309c1dd801..5c17ae1654bf 100644 --- a/yogstation/code/game/gamemodes/vampire/vampire_powers.dm +++ b/yogstation/code/game/gamemodes/vampire/vampire_powers.dm @@ -259,13 +259,13 @@ 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) @@ -302,7 +302,9 @@ 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") + 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 ++