From 0077be5e3247288c7d7735ce663c857f353dee98 Mon Sep 17 00:00:00 2001 From: Cursor <102828457+theselfish@users.noreply.github.com> Date: Thu, 10 Oct 2024 21:05:24 +0100 Subject: [PATCH] [Ready][Until ANOTHER FUCKIMNG MERGE CREATES CONFLICTS GOD FUCK] Reflavors a lot of Bloodsucker stuff to be more in line with it's source (#2104) ## About The Pull Request Title. ## Why It's Good For The Game My love of VTM cannot stand things such as 'blah-sucker', 'vassels' or 'archive of the kindred'. The Blah-Sucker language has been renamed to Enochian, reflecting the First City of Vampires, Enoch, in the land of Nod east of Eden where the Dark Father Caine was exiled from. (Front facing) mentions of vassels have been replaced with the accurate Ghoul. They drink vitae to establish a bond with their master, not blood, vampires do not produce blood, they drink vitae. The Archive of the Kindred has been replaced with the Book of Nod. Well, a version of it. Cainites are protective of the hidden knowledge kept within and would be unhappy with the mortals (you) having a copy. Objectives have been re-written to mention lore aspects. ## Proof Of Testing :cl: spellcheck: Various Bloodsucker things have been renamed after the Inconnu paid a visit. /:cl: --------- Co-authored-by: Waterpig Co-authored-by: Waterpig <49160555+Majkl-J@users.noreply.github.com> --- code/__DEFINES/role_preferences.dm | 2 +- .../code/__DEFINES/bloodsucker_defines.dm | 67 ++++---- .../subsystem/processing/sol_subsystem.dm | 10 +- .../components/crafting/crafting/furniture.dm | 4 +- .../datums/mood_events/bloodsucker_events.dm | 2 +- .../bloodsucker/bloodsuckers/bloodsucker.dm | 56 +++---- .../bloodsucker/bloodsuckers/conversion.dm | 58 +++---- .../bloodsucker/bloodsuckers/life.dm | 11 +- .../bloodsucker/bloodsuckers/objectives.dm | 110 ++++++------- .../bloodsucker/bloodsuckers/procs.dm | 38 ++--- .../bloodsucker/bloodsuckers/sol.dm | 4 +- .../antagonists/bloodsucker/clans/clan.dm | 106 ++++++------- .../bloodsucker/clans/clan_flavortext.dm | 6 +- .../bloodsucker/clans/clan_malkavian.dm | 20 +-- .../bloodsucker/clans/clan_nosferatu.dm | 16 +- .../bloodsucker/clans/clan_tremere.dm | 18 +-- .../bloodsucker/clans/clan_ventrue.dm | 78 +++++----- .../antagonists/bloodsucker/powers/_powers.dm | 2 +- .../antagonists/bloodsucker/powers/cloak.dm | 4 +- .../antagonists/bloodsucker/powers/feed.dm | 4 +- .../bloodsucker/powers/fortitude.dm | 6 +- .../antagonists/bloodsucker/powers/gohome.dm | 6 +- .../bloodsucker/powers/targeted/brawn.dm | 2 +- .../bloodsucker/powers/targeted/haste.dm | 2 +- .../bloodsucker/powers/targeted/lunge.dm | 2 +- .../bloodsucker/powers/targeted/mesmerize.dm | 2 +- .../bloodsucker/powers/targeted/trespass.dm | 2 +- .../bloodsucker/powers/tremere/auspex.dm | 2 +- .../bloodsucker/powers/tremere/dominate.dm | 94 +++++------ .../bloodsucker/powers/tremere/thaumaturgy.dm | 4 +- .../bloodsucker/powers/vassal/distress.dm | 4 +- .../bloodsucker/powers/vassal/recuperate.dm | 8 +- .../bloodsucker/powers/vassal/vassal_fold.dm | 48 +++--- .../bloodsucker/structures/coffin.dm | 14 +- .../bloodsucker/structures/crypt.dm | 146 +++++++++--------- .../bloodsucker/structures/objects.dm | 10 +- .../bloodsucker/vassal/vassal_datum.dm | 114 +++++++------- .../bloodsucker/vassal/vassal_pinpointer.dm | 20 +-- .../bloodsucker/vassal/vassal_procs.dm | 58 +++---- .../vassal/vassal_types/ex_vassal.dm | 62 ++++---- .../vassal/vassal_types/favorite_vassal.dm | 24 +-- .../vassal/vassal_types/revenge_vassal.dm | 54 +++---- .../code/modules/languages/vampiric.dm | 4 +- .../code/negative_quirks/sol_weakness.dm | 2 +- .../icons/mob/huds/bloodsucker.dmi | Bin 1342 -> 1342 bytes .../icons/obj/structures/vamp_obj.dmi | Bin 10656 -> 10653 bytes .../bloodsuckers/malkavian_revelations.json | 18 ++- .../tgui/interfaces/AntagInfoBloodsucker.tsx | 10 +- .../tgui/interfaces/AntagInfoVassal.tsx | 12 +- .../antagonists/antagonists/bloodsucker.ts | 2 +- .../antagonists/bloodsuckerbreakout.ts | 2 +- .../antagonists/vampiricaccident.ts | 2 +- 52 files changed, 685 insertions(+), 667 deletions(-) diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index 1e26f2b778d..5da1cf449f7 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -142,7 +142,7 @@ #define ROLE_VAMPIRICACCIDENT "Bloodsucker (Midround)" #define ROLE_BLOODSUCKERBREAKOUT "Bloodsucker (Latejoin)" #define ROLE_MONSTERHUNTER "Monster Hunter" -#define ROLE_VASSAL "Vassal" +#define ROLE_VASSAL "Ghoul" #define ROLE_CHANGELING_ZOMBIE "Changeling Zombie" //BUBBER EDIT END diff --git a/modular_zubbers/code/__DEFINES/bloodsucker_defines.dm b/modular_zubbers/code/__DEFINES/bloodsucker_defines.dm index d83d54b331e..947606d4175 100644 --- a/modular_zubbers/code/__DEFINES/bloodsucker_defines.dm +++ b/modular_zubbers/code/__DEFINES/bloodsucker_defines.dm @@ -1,4 +1,4 @@ -///Uncomment this to enable testing of Bloodsucker features (such as vassalizing people with a mind instead of a client). +///Uncomment this to enable testing of Bloodsucker features (such as ghoulizing people with a mind instead of a client). // #define BLOODSUCKER_TESTING // if this isn't commented out, someone is a dumbfuck /// You have special interactions with Bloodsuckers @@ -18,8 +18,8 @@ #define TORTURE_BLOOD_HALF_COST 4 /// Cost to convert someone after successful torture, in blood #define TORTURE_CONVERSION_COST 10 -/// How much blood it costs you to make a vassal into a special vassal -#define SPECIAL_VASSAL_COST 150 +/// How much blood it costs you to make a ghoul into a special ghoul +#define SPECIAL_GHOUL_COST 150 /// Minimum and maximum frenzy blood thresholds /// Once blood is this low, will enter Frenzy #define FRENZY_THRESHOLD_ENTER 25 @@ -57,14 +57,14 @@ #define TIME_BLOODSUCKER_SOL_DELAY 90 /** - * Vassal defines + * Ghoul defines */ -///If someone passes all checks and can be vassalized -#define VASSALIZATION_ALLOWED 0 -///If someone has to accept vassalization -#define VASSALIZATION_DISLOYAL 1 -///If someone is not allowed under any circimstances to become a Vassal -#define VASSALIZATION_BANNED 2 +///If someone passes all checks and can be ghoulized +#define GHOULIZATION_ALLOWED 0 +///If someone has to accept ghoulization +#define GHOULIZATION_DISLOYAL 1 +///If someone is not allowed under any circimstances to become a Ghoul +#define GHOULIZATION_BANNED 2 /** * Cooldown defines @@ -92,9 +92,9 @@ #define CLAN_MALKAVIAN "Malkavian Clan" #define CLAN_TZIMISCE "Tzimisce Clan" -#define TREMERE_VASSAL "tremere_vassal" -#define FAVORITE_VASSAL "favorite_vassal" -#define REVENGE_VASSAL "revenge_vassal" +#define TREMERE_GHOUL "tremere_ghoul" +#define FAVORITE_GHOUL "favorite_ghoul" +#define REVENGE_GHOUL "revenge_ghoul" /** * Power defines @@ -116,11 +116,14 @@ #define BLOODSUCKER_DEFAULT_POWER (1<<1) /// This Power can be purchased by Tremere Bloodsuckers #define TREMERE_CAN_BUY (1<<2) -/// This Power can be purchased by Vassals -#define VASSAL_CAN_BUY (1<<3) + +/// This Power can be purchased by Ghouls +#define GHOUL_CAN_BUY (1<<3) + /// If this Power can be bought if you already own it #define CAN_BUY_OWNED (1<<4) + /// This Power is a Continuous Effect, processing every tick #define BP_CONTINUOUS_EFFECT (1<<0) /// This Power is a Single-Use Power @@ -134,7 +137,7 @@ #define DEACTIVATE_POWER_NO_COOLDOWN (1<<1) // ability levels that are used cross-file -#define DOMINATE_VASSALIZE_LEVEL 2 +#define DOMINATE_GHOULIZE_LEVEL 2 #define TREMERE_OBJECTIVE_POWER_LEVEL 4 #define COFFIN_HEAL_COST_MULT 0.5 @@ -152,14 +155,14 @@ */ ///Called when a Bloodsucker ranks up: (datum/bloodsucker_datum, mob/owner, mob/target) #define COMSIG_BLOODSUCKER_RANK_UP "bloodsucker_rank_up" -///Called when a Bloodsucker interacts with a Vassal on their persuasion rack. -#define COMSIG_BLOODSUCKER_INTERACT_WITH_VASSAL "bloodsucker_interact_with_vassal" -///Called when a Bloodsucker makes a Vassal into their Favorite Vassal: (datum/vassal_datum, mob/master) +///Called when a Bloodsucker interacts with a Ghoul on their persuasion rack. +#define COMSIG_BLOODSUCKER_INTERACT_WITH_GHOUL "bloodsucker_interact_with_ghoul" +///Called when a Bloodsucker makes a Ghoul into their Favorite Ghoul: (datum/ghoul_datum, mob/master) #define COMSIG_BLOODSUCKER_MAKE_FAVORITE "bloodsucker_make_favorite" -// called when a bloodsucker looses their favorite vassal, cleaning up whatever they gained +// called when a bloodsucker looses their favorite ghoul, cleaning up whatever they gained #define COMSIG_BLOODSUCKER_LOOSE_FAVORITE "bloodsucker_loose_favorite" -///Called when a new Vassal is successfully made: (datum/bloodsucker_datum) -#define COMSIG_BLOODSUCKER_MADE_VASSAL "bloodsucker_made_vassal" +///Called when a new Ghoul is successfully made: (datum/bloodsucker_datum) +#define COMSIG_BLOODSUCKER_MADE_GHOUL "bloodsucker_made_ghoul" ///Called when a Bloodsucker exits Torpor. #define COMSIG_BLOODSUCKER_EXIT_TORPOR "bloodsucker_exit_torpor" ///Called when a Bloodsucker reaches Final Death. @@ -188,7 +191,7 @@ #define COMSIG_SOL_RISE_TICK "comsig_sol_rise_tick" #define COMSIG_SOL_NEAR_START "comsig_sol_near_start" #define COMSIG_SOL_END "comsig_sol_end" -///Sent when a warning for Sol is meant to go out: (danger_level, vampire_warning_message, vassal_warning_message) +///Sent when a warning for Sol is meant to go out: (danger_level, vampire_warning_message, ghoul_warning_message) #define COMSIG_SOL_WARNING_GIVEN "comsig_sol_warning_given" ///Called on a Bloodsucker's Lifetick. #define COMSIG_BLOODSUCKER_ON_LIFETICK "comsig_bloodsucker_on_lifetick" @@ -228,7 +231,7 @@ /// Source trait for Bloodsuckers-related traits #define BLOODSUCKER_TRAIT "bloodsucker_trait" -#define VASSAL_TRAIT "vassal_trait" +#define GHOUL_TRAIT "ghoul_trait" /// Source trait for dominate related traits #define MESMERIZE_TRAIT "meserize_trait" @@ -243,13 +246,13 @@ ///Whether a mob is a Bloodsucker #define IS_BLOODSUCKER(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/bloodsucker)) -///Whether a mob is a Vassal -#define IS_VASSAL(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/vassal)) -///Whether a mob is a Favorite Vassal -#define IS_FAVORITE_VASSAL(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/vassal/favorite)) -///Whether a mob is a Revenge Vassal -#define IS_REVENGE_VASSAL(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/vassal/revenge)) -#define IS_EX_VASSAL(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/ex_vassal)) +///Whether a mob is a Ghoul +#define IS_GHOUL(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/ghoul)) +///Whether a mob is a Favorite Ghoul +#define IS_FAVORITE_GHOUL(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/ghoul/favorite)) +///Whether a mob is a Revenge Ghoul +#define IS_REVENGE_GHOUL(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/ghoul/revenge)) +#define IS_EX_GHOUL(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/ex_ghoul)) ///Whether a mob is a Monster Hunter-NOT NEEDED RIGHT NOW // #define IS_MONSTERHUNTER(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/monsterhunter)) @@ -257,7 +260,7 @@ #define IS_MONSTERHUNTER(mob) (FALSE) #define BLOODSUCKER_SIGHT_COLOR_CUTOFF list(25, 8, 5) -#define POLL_IGNORE_VASSAL "vassal" +#define POLL_IGNORE_GHOUL "ghoul" // Why waste memory on a dynamic global list if we can just bake it in on compile time? #define BLOODSUCKER_PROTECTED_ROLES list( \ diff --git a/modular_zubbers/code/controllers/subsystem/processing/sol_subsystem.dm b/modular_zubbers/code/controllers/subsystem/processing/sol_subsystem.dm index 77d556af76a..fbd9c7c1bb1 100644 --- a/modular_zubbers/code/controllers/subsystem/processing/sol_subsystem.dm +++ b/modular_zubbers/code/controllers/subsystem/processing/sol_subsystem.dm @@ -34,7 +34,7 @@ PROCESSING_SUBSYSTEM_DEF(sunlight) warn_daylight( danger_level = DANGER_LEVEL_SOL_ENDED, vampire_warning_message = span_announce("The solar flare has ended, and the daylight danger has passed... for now."), - vassal_warning_message = span_announce("The solar flare has ended, and the daylight danger has passed... for now."), + ghoul_warning_message = span_announce("The solar flare has ended, and the daylight danger has passed... for now."), ) return ..() @@ -50,7 +50,7 @@ PROCESSING_SUBSYSTEM_DEF(sunlight) warn_daylight( danger_level = DANGER_LEVEL_SECOND_WARNING, vampire_warning_message = span_userdanger("Solar Flares are about to bombard the station! You have [TIME_BLOODSUCKER_DAY_FINAL_WARN] seconds to find cover!"), - vassal_warning_message = span_danger("In [TIME_BLOODSUCKER_DAY_FINAL_WARN] seconds, your master will be at risk of a Solar Flare. Make sure they find cover!"), + ghoul_warning_message = span_danger("In [TIME_BLOODSUCKER_DAY_FINAL_WARN] seconds, your master will be at risk of a Solar Flare. Make sure they find cover!"), ) if(TIME_BLOODSUCKER_BURN_INTERVAL) warn_daylight( @@ -65,12 +65,12 @@ PROCESSING_SUBSYSTEM_DEF(sunlight) warn_daylight( danger_level = DANGER_LEVEL_SOL_ROSE, vampire_warning_message = span_userdanger("Solar flares bombard the station with deadly UV light! Stay in cover for the next [TIME_BLOODSUCKER_DAY / 60] minutes or risk Final Death!"), - vassal_warning_message = span_userdanger("Solar flares bombard the station with UV light!"), + ghoul_warning_message = span_userdanger("Solar flares bombard the station with UV light!"), ) ..() -/datum/controller/subsystem/processing/sunlight/proc/warn_daylight(danger_level, vampire_warning_message, vassal_warning_message) - SEND_SIGNAL(src, COMSIG_SOL_WARNING_GIVEN, danger_level, vampire_warning_message, vassal_warning_message) +/datum/controller/subsystem/processing/sunlight/proc/warn_daylight(danger_level, vampire_warning_message, ghoul_warning_message) + SEND_SIGNAL(src, COMSIG_SOL_WARNING_GIVEN, danger_level, vampire_warning_message, ghoul_warning_message) /datum/controller/subsystem/processing/sunlight/proc/add_sun_sufferer(mob/victim) if(is_sufferer(victim)) diff --git a/modular_zubbers/code/datums/components/crafting/crafting/furniture.dm b/modular_zubbers/code/datums/components/crafting/crafting/furniture.dm index 3c4e46eed15..4d029d072e3 100644 --- a/modular_zubbers/code/datums/components/crafting/crafting/furniture.dm +++ b/modular_zubbers/code/datums/components/crafting/crafting/furniture.dm @@ -44,9 +44,9 @@ time = 10 SECONDS category = CAT_FURNITURE -/datum/crafting_recipe/vassalrack +/datum/crafting_recipe/ghoulrack name = "Persuasion Rack" - result = /obj/structure/bloodsucker/vassalrack + result = /obj/structure/bloodsucker/ghoulrack tool_behaviors = list(TOOL_WELDER, TOOL_WRENCH) reqs = list( /obj/item/stack/sheet/mineral/wood = 3, diff --git a/modular_zubbers/code/datums/mood_events/bloodsucker_events.dm b/modular_zubbers/code/datums/mood_events/bloodsucker_events.dm index 8e8154b86de..f35921c82fc 100644 --- a/modular_zubbers/code/datums/mood_events/bloodsucker_events.dm +++ b/modular_zubbers/code/datums/mood_events/bloodsucker_events.dm @@ -46,7 +46,7 @@ mood_change = -6 timeout = 6 MINUTES -///Candelabrum's mood event to non Bloodsucker/Vassals +///Candelabrum's mood event to non Bloodsucker/Ghouls /datum/mood_event/vampcandle description = "Something is making your mind feel... loose.\n" mood_change = -15 diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/bloodsucker.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/bloodsucker.dm index 3b66d0338a4..d0333b4735d 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/bloodsucker.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/bloodsucker.dm @@ -48,10 +48,10 @@ ///ALL Powers currently owned var/list/datum/action/cooldown/bloodsucker/powers = list() - ///Vassals under my control. Periodically remove the dead ones. - var/list/datum/antagonist/vassal/vassals = list() - ///Special vassals I own, to not have double of the same type. - var/list/datum/antagonist/vassal/special_vassals = list() + ///Ghouls under my control. Periodically remove the dead ones. + var/list/datum/antagonist/ghoul/ghouls = list() + ///Special ghouls I own, to not have double of the same type. + var/list/datum/antagonist/ghoul/special_ghouls = list() ///How many ranks we have, don't modify this directly, use AdjustRank() and use GetRank() to get the current value. VAR_PRIVATE/bloodsucker_level = 0 @@ -62,7 +62,7 @@ var/bloodsucker_regen_rate = 0.3 // Used for Bloodsucker Objectives - var/area/bloodsucker_lair_area + var/area/bloodsucker_haven_area var/obj/structure/closet/crate/coffin var/total_blood_drank = 0 @@ -78,8 +78,8 @@ /// Static typecache of all bloodsucker powers. var/static/list/all_bloodsucker_powers = typecacheof(/datum/action/cooldown/bloodsucker, ignore_root_path = TRUE) - /// Antagonists that cannot be Vassalized no matter what - var/static/list/vassal_banned_antags = list( + /// Antagonists that cannot be Ghoulized no matter what + var/static/list/ghoul_banned_antags = list( /datum/antagonist/bloodsucker, // /datum/antagonist/monsterhunter, /datum/antagonist/changeling, @@ -137,7 +137,7 @@ #ifdef BLOODSUCKER_TESTING var/turf/user_loc = get_turf(current_mob) new /obj/structure/closet/crate/coffin(user_loc) - new /obj/structure/bloodsucker/vassalrack(user_loc) + new /obj/structure/bloodsucker/ghoulrack(user_loc) #endif /** @@ -237,7 +237,7 @@ /// Called by the remove_antag_datum() and remove_all_antag_datums() mind procs for the antag datum to handle its own removal and deletion. /datum/antagonist/bloodsucker/on_removal() - free_all_vassals() + free_all_ghouls() if(!owner?.current) return unregister_sol_signals() @@ -387,22 +387,22 @@ objectives_complete = FALSE break - // Now list their vassals - if(vassals.len) - report += "Their Vassals were..." - for(var/datum/antagonist/vassal/all_vassals as anything in vassals) - if(!all_vassals.owner) + // Now list their ghouls + if(ghouls.len) + report += "Their Ghouls were..." + for(var/datum/antagonist/ghoul/all_ghouls as anything in ghouls) + if(!all_ghouls.owner) continue - var/list/vassal_report = list() - vassal_report += "[all_vassals.owner.name]" + var/list/ghoul_report = list() + ghoul_report += "[all_ghouls.owner.name]" - if(all_vassals.owner.assigned_role) - vassal_report += " the [all_vassals.owner.assigned_role.title]" - if(IS_FAVORITE_VASSAL(all_vassals.owner.current)) - vassal_report += " and was the Favorite Vassal" - else if(IS_REVENGE_VASSAL(all_vassals.owner.current)) - vassal_report += " and was the Revenge Vassal" - report += vassal_report.Join() + if(all_ghouls.owner.assigned_role) + ghoul_report += " the [all_ghouls.owner.assigned_role.title]" + if(IS_FAVORITE_GHOUL(all_ghouls.owner.current)) + ghoul_report += " and was the Favorite Ghoul" + else if(IS_REVENGE_GHOUL(all_ghouls.owner.current)) + ghoul_report += " and was the Revenge Ghoul" + report += ghoul_report.Join() if(objectives.len == 0 || objectives_complete) report += "The [name] was successful!" @@ -522,16 +522,16 @@ return TRUE /datum/antagonist/bloodsucker/proc/forge_bloodsucker_objectives() - // Claim a Lair Objective - var/datum/objective/bloodsucker/lair/lair_objective = new - lair_objective.owner = owner - objectives += lair_objective + // Claim a haven Objective + var/datum/objective/bloodsucker/haven/haven_objective = new + haven_objective.owner = owner + objectives += haven_objective // Survive Objective var/datum/objective/survive/bloodsucker/survive_objective = new survive_objective.owner = owner objectives += survive_objective - // Objective 1: Vassalize a Head/Command, or a specific target + // Objective 1: Ghoulize a Head/Command, or a specific target switch(rand(1, 3)) if(1) // Conversion Objective var/datum/objective/bloodsucker/conversion/chosen_subtype = pick(subtypesof(/datum/objective/bloodsucker/conversion)) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/conversion.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/conversion.dm index 6668b7a2aff..72954ac6f40 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/conversion.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/conversion.dm @@ -1,37 +1,37 @@ /** * Checks if the target has antag datums and, if so, - * are they allowed to be Vassalized, or not, or banned. + * are they allowed to be Ghoulized, or not, or banned. * Args: * target - The person we check for antag datums. */ /datum/antagonist/bloodsucker/proc/AmValidAntag(mob/target) if(HAS_TRAIT(target, TRAIT_UNCONVERTABLE)) - return VASSALIZATION_BANNED + return GHOULIZATION_BANNED - var/vassalization_status = VASSALIZATION_ALLOWED + var/ghoulization_status = GHOULIZATION_ALLOWED for(var/datum/antagonist/antag_datum as anything in target.mind.antag_datums) - if(antag_datum.type in vassal_banned_antags) - return VASSALIZATION_BANNED - vassalization_status = VASSALIZATION_DISLOYAL - return vassalization_status + if(antag_datum.type in ghoul_banned_antags) + return GHOULIZATION_BANNED + ghoulization_status = GHOULIZATION_DISLOYAL + return ghoulization_status /** - * # can_make_vassal + * # can_make_ghoul * Checks if the person is allowed to turn into the Bloodsucker's - * Vassal, ensuring they are a player and valid. - * If they are a Vassal themselves, will check if their master + * Ghoul, ensuring they are a player and valid. + * If they are a Ghoul themselves, will check if their master * has broken the Masquerade, to steal them. * Args: - * conversion_target - Person being vassalized + * conversion_target - Person being ghoulized */ -/datum/antagonist/bloodsucker/proc/can_make_vassal(mob/living/conversion_target) +/datum/antagonist/bloodsucker/proc/can_make_ghoul(mob/living/conversion_target) if(!iscarbon(conversion_target) || (conversion_target.stat < CONSCIOUS)) return FALSE // No Mind! if(!conversion_target.mind) - to_chat(owner.current, span_danger("[conversion_target] isn't self-aware enough to be made into a Vassal.")) + to_chat(owner.current, span_danger("[conversion_target] isn't self-aware enough to be made into a Ghoul.")) return FALSE - if(AmValidAntag(conversion_target) == VASSALIZATION_BANNED) + if(AmValidAntag(conversion_target) == GHOULIZATION_BANNED) to_chat(owner.current, span_danger("[conversion_target] resists the power of your blood to dominate their mind!")) return FALSE var/mob/living/master = conversion_target.mind.enslaved_to?.resolve() @@ -39,45 +39,45 @@ return TRUE var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(master) if(bloodsuckerdatum && bloodsuckerdatum.broke_masquerade) - //vassal stealing + //ghoul stealing return TRUE to_chat(owner.current, span_danger("[conversion_target]'s mind is overwhelmed with too much external force to put your own!")) return FALSE /** - * First will check if the target can be turned into a Vassal, if so then it will + * First will check if the target can be turned into a Ghoul, if so then it will * turn them into one, log it, sync their minds, then updates the Rank * Args: * conversion_target - The person converted. */ -/datum/antagonist/bloodsucker/proc/make_vassal(mob/living/conversion_target) +/datum/antagonist/bloodsucker/proc/make_ghoul(mob/living/conversion_target) #ifndef BLOODSUCKER_TESTING - if(!can_make_vassal(conversion_target)) + if(!can_make_ghoul(conversion_target)) return FALSE #endif - //Check if they used to be a Vassal and was stolen. - var/datum/antagonist/vassal/old_vassal = IS_VASSAL(conversion_target) - if(old_vassal) - conversion_target.mind.remove_antag_datum(/datum/antagonist/vassal) + //Check if they used to be a Ghoul and was stolen. + var/datum/antagonist/ghoul/old_ghoul = IS_GHOUL(conversion_target) + if(old_ghoul) + conversion_target.mind.remove_antag_datum(/datum/antagonist/ghoul) var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(owner.current) bloodsuckerdatum.SelectTitle(am_fledgling = FALSE) //set the master, then give the datum. - var/datum/antagonist/vassal/vassaldatum = new(conversion_target.mind) - vassaldatum.master = bloodsuckerdatum - conversion_target.mind.add_antag_datum(vassaldatum) + var/datum/antagonist/ghoul/ghouldatum = new(conversion_target.mind) + ghouldatum.master = bloodsuckerdatum + conversion_target.mind.add_antag_datum(ghouldatum) - message_admins("[conversion_target] has become a Vassal, and is enslaved to [owner.current].") - log_admin("[conversion_target] has become a Vassal, and is enslaved to [owner.current].") + message_admins("[conversion_target] has become a Ghoul, and is enslaved to [owner.current].") + log_admin("[conversion_target] has become a Ghoul, and is enslaved to [owner.current].") return TRUE /* * # can_make_special * - * MIND Helper proc that ensures the person can be a Special Vassal, + * MIND Helper proc that ensures the person can be a Special Ghoul, * without actually giving the antag datum to them. - * This is because Special Vassals get special abilities, without the unique Bloodsucker blood tracking, + * This is because Special Ghouls get special abilities, without the unique Bloodsucker blood tracking, * and we don't want this to be infinite. * Args: * creator - Person attempting to convert them. diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/life.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/life.dm index ead3d41026f..56d7d0fa98c 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/life.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/life.dm @@ -107,13 +107,14 @@ target.reagents.trans_to(owner.current, INGEST, 1) // Run transfer of 1 unit of reagent from them to me. owner.current.playsound_local(null, 'sound/effects/singlebeat.ogg', 40, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head. if(target.mind) // Checks if the target has a mind + // closer it is to max, the less level up blood you get var/blood_for_leveling = blood_taken if(already_drunk > BLOOD_VOLUME_NORMAL) var/max_threshold = BLOOD_VOLUME_NORMAL * 2 var/modify_blood_gain = 1 - (already_drunk / max_threshold) blood_for_leveling = max(blood_taken * modify_blood_gain, 0) - if(IS_VASSAL(target)) // Checks if the target is a vassal + if(IS_GHOUL(target)) // Checks if the target is a ghoul blood_level_gain += blood_for_leveling / 4 else blood_level_gain += blood_for_leveling @@ -281,9 +282,9 @@ /// FINAL DEATH /datum/antagonist/bloodsucker/proc/HandleDeath() if(QDELETED(owner.current)) - if(length(vassals)) - free_all_vassals() - vassals = list() + if(length(ghouls)) + free_all_ghouls() + ghouls = list() return // Fire Damage? (above double health) if(owner.current.getFireLoss() >= owner.current.maxHealth * FINAL_DEATH_HEALTH_TO_BURN) // 337.5 burn with 135 maxHealth @@ -399,7 +400,7 @@ return unregister_body_signals() unregister_sol_signals() - free_all_vassals() + free_all_ghouls() DisableAllPowers(forced = TRUE) if(!iscarbon(owner.current)) owner.current.gib(DROP_ITEMS) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/objectives.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/objectives.dm index c9ba779e1e9..f8022e52ed5 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/objectives.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/objectives.dm @@ -29,29 +29,29 @@ return possible_targets -/// Check Vassals and get their occupations -/datum/objective/bloodsucker/proc/get_vassal_occupations() +/// Check Ghouls and get their occupations +/datum/objective/bloodsucker/proc/get_ghoul_occupations() var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(owner.current) - if(!bloodsuckerdatum || !bloodsuckerdatum.vassals.len) + if(!bloodsuckerdatum || !bloodsuckerdatum.ghouls.len) return FALSE - var/list/all_vassal_jobs = list() - var/vassal_job - for(var/datum/antagonist/vassal/bloodsucker_vassals in bloodsuckerdatum.vassals) - if(!bloodsucker_vassals || !bloodsucker_vassals.owner) // Must exist somewhere, and as a vassal. + var/list/all_ghoul_jobs = list() + var/ghoul_job + for(var/datum/antagonist/ghoul/bloodsucker_ghouls in bloodsuckerdatum.ghouls) + if(!bloodsucker_ghouls || !bloodsucker_ghouls.owner) // Must exist somewhere, and as a ghoul. continue // Mind Assigned - if(bloodsucker_vassals.owner?.assigned_role) - vassal_job = bloodsucker_vassals.owner.assigned_role + if(bloodsucker_ghouls.owner?.assigned_role) + ghoul_job = bloodsucker_ghouls.owner.assigned_role // Mob Assigned - else if(bloodsucker_vassals.owner?.current?.job) - vassal_job = SSjob.GetJob(bloodsucker_vassals.owner.current.job) + else if(bloodsucker_ghouls.owner?.current?.job) + ghoul_job = SSjob.GetJob(bloodsucker_ghouls.owner.current.job) // PDA Assigned - else if(bloodsucker_vassals.owner?.current && ishuman(bloodsucker_vassals.owner.current)) - var/mob/living/carbon/human/vassal = bloodsucker_vassals.owner.current - vassal_job = SSjob.GetJob(vassal.get_assignment()) - if(vassal_job) - all_vassal_jobs += vassal_job - return all_vassal_jobs + else if(bloodsucker_ghouls.owner?.current && ishuman(bloodsucker_ghouls.owner.current)) + var/mob/living/carbon/human/ghoul = bloodsucker_ghouls.owner.current + ghoul_job = SSjob.GetJob(ghoul.get_assignment()) + if(ghoul_job) + all_ghoul_jobs += ghoul_job + return all_ghoul_jobs ////////////////////////////////////////////////////////////////////////////////////// // // OBJECTIVES // // @@ -61,17 +61,17 @@ // DEFAULT OBJECTIVES // ////////////////////////////// -/datum/objective/bloodsucker/lair - name = "claimlair" +/datum/objective/bloodsucker/haven + name = "claimhaven" // EXPLANATION -/datum/objective/bloodsucker/lair/update_explanation_text() - explanation_text = "Create a lair by claiming a coffin, and protect it until the end of the shift."// Make sure to keep it safe!" +/datum/objective/bloodsucker/haven/update_explanation_text() + explanation_text = "Create a haven by claiming a coffin, and protect it until the end of the shift."// Make sure to keep it safe!" // WIN CONDITIONS? -/datum/objective/bloodsucker/lair/check_completion() +/datum/objective/bloodsucker/haven/check_completion() var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(owner.current) - if(bloodsuckerdatum && bloodsuckerdatum.coffin && bloodsuckerdatum.bloodsucker_lair_area) + if(bloodsuckerdatum && bloodsuckerdatum.coffin && bloodsuckerdatum.bloodsucker_haven_area) return TRUE return FALSE @@ -96,36 +96,36 @@ ////////////////////////////////////////////////////////////////////////////////////// -/// Vassalize a certain person / people +/// Ghoulify a certain person / people /datum/objective/bloodsucker/conversion - name = "vassalization" + name = "ghoulization" ///////////////////////////////// -// Vassalize a head of staff +// Ghoulify a head of staff /datum/objective/bloodsucker/conversion/command - name = "vassalizationcommand" + name = "ghoulizationcommand" target_amount = 1 // EXPLANATION /datum/objective/bloodsucker/conversion/command/update_explanation_text() - explanation_text = "Guarantee a Vassal ends up as a Department Head or in a Leadership role." + explanation_text = "Guarantee a Ghoul ends up as a Department Head or in a Leadership role." // WIN CONDITIONS? /datum/objective/bloodsucker/conversion/command/check_completion() - var/list/vassal_jobs = get_vassal_occupations() - for(var/datum/job/checked_job in vassal_jobs) + var/list/ghoul_jobs = get_ghoul_occupations() + for(var/datum/job/checked_job in ghoul_jobs) if(checked_job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) return TRUE // We only need one, so we stop as soon as we get a match return FALSE ///////////////////////////////// -// Vassalize crewmates in a department +// Ghoulify crewmates in a department /datum/objective/bloodsucker/conversion/department - name = "vassalize department" + name = "ghoulify department" - ///The selected department we have to vassalize. + ///The selected department we have to ghoulify. var/datum/job_department/target_department ///List of all departments that can be selected for the objective. var/static/list/possible_departments = list( @@ -146,14 +146,14 @@ // EXPLANATION /datum/objective/bloodsucker/conversion/department/update_explanation_text() - explanation_text = "Have [target_amount] Vassal[target_amount == 1 ? "" : "s"] in the [target_department.department_name] department." + explanation_text = "Have [target_amount] Ghoul[target_amount == 1 ? "" : "s"] in the [target_department.department_name] department." return ..() // WIN CONDITIONS? /datum/objective/bloodsucker/conversion/department/check_completion() - var/list/vassal_jobs = get_vassal_occupations() + var/list/ghoul_jobs = get_ghoul_occupations() var/converted_count = 0 - for(var/datum/job/checked_job in vassal_jobs) + for(var/datum/job/checked_job in ghoul_jobs) if(checked_job.departments_bitflags & target_department.department_bitflags) converted_count++ if(converted_count >= target_amount) @@ -223,14 +223,14 @@ // CLAN OBJECTIVES // ////////////////////////////// -/// Steal the Archive of the Kindred - Nosferatu Clan objective +/// Steal the Book of Nod - Nosferatu Clan objective /datum/objective/bloodsucker/kindred - name = "steal kindred" + name = "steal the Book of Nod" // EXPLANATION /datum/objective/bloodsucker/kindred/update_explanation_text() . = ..() - explanation_text = "Ensure Nosferatu steals and keeps control over the Archive of the Kindred." + explanation_text = "A Noddist Scholar has posted a bounty on SchreckNet for a scrap of the Book of Nod located in your sector. Their advise? Read a book." // WIN CONDITIONS? /datum/objective/bloodsucker/kindred/check_completion() @@ -255,7 +255,7 @@ // EXPLANATION /datum/objective/bloodsucker/tremere_power/update_explanation_text() - explanation_text = "Upgrade a Blood Magic power to level [power_level], remember that Vassalizing gives more Ranks!" + explanation_text = "Your Regent is doubting your abilities, level some Blood Magic to [power_level] to prove them wrong! Remember that Ghoulifying gives more Ranks!" // WIN CONDITIONS? /datum/objective/bloodsucker/tremere_power/check_completion() @@ -276,7 +276,7 @@ // EXPLANATION /datum/objective/bloodsucker/embrace/update_explanation_text() . = ..() - explanation_text = "Use the vassal rack to Rank your Favorite Vassal up enough to become a Bloodsucker." + explanation_text = "Your Strategoi has granted you permission to embrace your favourite ghoul , use the Rack to 'level' them up." // WIN CONDITIONS? /datum/objective/bloodsucker/embrace/check_completion() @@ -321,19 +321,19 @@ ////////////////////////////// -// VASSAL OBJECTIVES // +// GHOUL OBJECTIVES // ////////////////////////////// -/datum/objective/bloodsucker/vassal +/datum/objective/bloodsucker/ghoul // EXPLANATION -/datum/objective/bloodsucker/vassal/update_explanation_text() +/datum/objective/bloodsucker/ghoul/update_explanation_text() . = ..() explanation_text = "Guarantee the success of your Master's mission!" // WIN CONDITIONS? -/datum/objective/bloodsucker/vassal/check_completion() - var/datum/antagonist/vassal/antag_datum = owner.has_antag_datum(/datum/antagonist/vassal) +/datum/objective/bloodsucker/ghoul/check_completion() + var/datum/antagonist/ghoul/antag_datum = owner.has_antag_datum(/datum/antagonist/ghoul) return antag_datum.master?.owner?.current?.stat != DEAD @@ -344,29 +344,29 @@ ////////////////////////////// // NOTE: Look up /assassinate in objective.dm for inspiration. -/// Vassalize a target. -/datum/objective/bloodsucker/vassalhim - name = "vassalhim" +/// Ghoulify a target. +/datum/objective/bloodsucker/ghoulhim + name = "ghoulhim" var/target_department_type = FALSE -/datum/objective/bloodsucker/vassalhim/New() +/datum/objective/bloodsucker/ghoulhim/New() var/list/possible_targets = return_possible_targets() find_target(possible_targets) ..() // EXPLANATION -/datum/objective/bloodsucker/vassalhim/update_explanation_text() +/datum/objective/bloodsucker/ghoulhim/update_explanation_text() . = ..() if(target?.current) - explanation_text = "Ensure [target.name], the [!target_department_type ? target.assigned_role.title : target.special_role], is Vassalized via the Persuasion Rack." + explanation_text = "Ensure [target.name], the [!target_department_type ? target.assigned_role.title : target.special_role], is Ghoulifyd via the Persuasion Rack." else explanation_text = "Free Objective" -/datum/objective/bloodsucker/vassalhim/admin_edit(mob/admin) +/datum/objective/bloodsucker/ghoulhim/admin_edit(mob/admin) admin_simple_target_pick(admin) // WIN CONDITIONS? -/datum/objective/bloodsucker/vassalhim/check_completion() - if(!target || target.has_antag_datum(/datum/antagonist/vassal)) +/datum/objective/bloodsucker/ghoulhim/check_completion() + if(!target || target.has_antag_datum(/datum/antagonist/ghoul)) return TRUE return FALSE diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/procs.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/procs.dm index d589c144f4d..2a7be156d02 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/procs.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/procs.dm @@ -41,7 +41,7 @@ return owner.current.playsound_local(null, 'modular_zubbers/sound/bloodsucker/lunge_warn.ogg', 100, FALSE, pressure_affected = FALSE) to_chat(owner.current, span_cult_bold_italic("You have broken the Masquerade!")) - to_chat(owner.current, span_warning("Bloodsucker Tip: When you break the Masquerade, you become open for termination by fellow Bloodsuckers, and your Vassals are no longer completely loyal to you, as other Bloodsuckers can steal them for themselves!")) + to_chat(owner.current, span_warning("Bloodsucker Tip: When you break the Masquerade, you become open for termination by fellow Bloodsuckers, and your Ghouls are no longer completely loyal to you, as other Bloodsuckers can steal them for themselves!")) broke_masquerade = TRUE antag_hud_name = "masquerade_broken" add_team_hud(owner.current) @@ -74,7 +74,7 @@ return // Spend Rank Immediately? if(!is_valid_coffin()) - to_chat(owner, span_notice("You have grown more ancient! Sleep in a coffin (or put your Favorite Vassal on a persuasion rack for Ventrue) that you have claimed to thicken your blood and become more powerful.")) + to_chat(owner, span_notice("You have grown more ancient! Sleep in a coffin (or put your Favorite Ghoul on a persuasion rack for Ventrue) that you have claimed to thicken your blood and become more powerful.")) if(bloodsucker_level_unspent >= 2) to_chat(owner, span_announce("Bloodsucker Tip: If you cannot find or steal a coffin to use, you can build one from wood or metal.")) return @@ -124,18 +124,18 @@ update_rank_hud() /** * Called when a Bloodsucker reaches Final Death - * Releases all Vassals and gives them the ex_vassal datum. + * Releases all Ghouls and gives them the ex_ghoul datum. */ -/datum/antagonist/bloodsucker/proc/free_all_vassals() - for(var/datum/antagonist/vassal/all_vassals in vassals) - // Skip over any Bloodsucker Vassals, they're too far gone to have all their stuff taken away from them - if(IS_BLOODSUCKER(all_vassals.owner.current)) - all_vassals.owner.current.remove_status_effect(/datum/status_effect/agent_pinpointer/vassal_edition) +/datum/antagonist/bloodsucker/proc/free_all_ghouls() + for(var/datum/antagonist/ghoul/all_ghouls in ghouls) + // Skip over any Bloodsucker Ghouls, they're too far gone to have all their stuff taken away from them + if(IS_BLOODSUCKER(all_ghouls.owner.current)) + all_ghouls.owner.current.remove_status_effect(/datum/status_effect/agent_pinpointer/ghoul_edition) continue - if(all_vassals.special_type == REVENGE_VASSAL || !all_vassals.owner) + if(all_ghouls.special_type == REVENGE_GHOUL || !all_ghouls.owner) continue - all_vassals.owner.add_antag_datum(/datum/antagonist/ex_vassal) - all_vassals.owner.remove_antag_datum(/datum/antagonist/vassal) + all_ghouls.owner.add_antag_datum(/datum/antagonist/ex_ghoul) + all_ghouls.owner.remove_antag_datum(/datum/antagonist/ghoul) /** * Returns a Vampire's examine strings. @@ -145,14 +145,14 @@ /datum/antagonist/bloodsucker/proc/return_vamp_examine(mob/living/viewer) if(!viewer.mind && !isobserver(viewer)) return FALSE - // Viewer is Target's Vassal? - if(!isobserver(viewer) && (viewer.mind.has_antag_datum(/datum/antagonist/vassal) in vassals)) + // Viewer is Target's Ghoul? + if(!isobserver(viewer) && (viewer.mind.has_antag_datum(/datum/antagonist/ghoul) in ghouls)) var/returnString = "\[This is your Master!\]" var/returnIcon = "[icon2html('modular_zubbers/icons/misc/language.dmi', world, "bloodsucker")]" returnString += "\n" return returnIcon + returnString - // Viewer not a Vamp AND not the target's vassal? - if(!isobserver(viewer) && !viewer.mind.has_antag_datum((/datum/antagonist/bloodsucker)) && !(viewer in vassals)) + // Viewer not a Vamp AND not the target's ghoul? + if(!isobserver(viewer) && !viewer.mind.has_antag_datum((/datum/antagonist/bloodsucker)) && !(viewer in ghouls)) if(!(HAS_TRAIT(viewer.mind, TRAIT_BLOODSUCKER_HUNTER) && broke_masquerade)) return FALSE // Default String @@ -197,11 +197,11 @@ var/percentage_needed = my_clan ? my_clan.level_cost : BLOODSUCKER_LEVELUP_PERCENTAGE return max_blood_volume * percentage_needed -/datum/antagonist/bloodsucker/proc/max_vassals() +/datum/antagonist/bloodsucker/proc/max_ghouls() return round(bloodsucker_level * 0.5) -/datum/antagonist/bloodsucker/proc/free_vassal_slots() - return max(max_vassals() - length(vassals), 0) +/datum/antagonist/bloodsucker/proc/free_ghoul_slots() + return max(max_ghouls() - length(ghouls), 0) /datum/antagonist/bloodsucker/proc/frenzy_enter_threshold() return FRENZY_THRESHOLD_ENTER + (humanity_lost * 10) @@ -366,7 +366,7 @@ /datum/antagonist/bloodsucker/proc/on_owner_deletion(mob/living/deleted_mob) SIGNAL_HANDLER - free_all_vassals() + free_all_ghouls() if(deleted_mob != owner.current) return if(is_head(deleted_mob)) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/sol.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/sol.dm index 6021226a3cd..b8719eafef3 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/sol.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/sol.dm @@ -20,7 +20,7 @@ ///Called when Sol is near starting. /datum/antagonist/bloodsucker/proc/sol_near_start(atom/source) SIGNAL_HANDLER - if(bloodsucker_lair_area && !(locate(/datum/action/cooldown/bloodsucker/gohome) in powers)) + if(bloodsucker_haven_area && !(locate(/datum/action/cooldown/bloodsucker/gohome) in powers)) BuyPower(/datum/action/cooldown/bloodsucker/gohome) ///Called when Sol first ends. @@ -70,7 +70,7 @@ owner.current.updatehealth() owner.current.add_mood_event("vampsleep", /datum/mood_event/daylight_bad_sleep) -/datum/antagonist/bloodsucker/proc/give_warning(atom/source, danger_level, vampire_warning_message, vassal_warning_message) +/datum/antagonist/bloodsucker/proc/give_warning(atom/source, danger_level, vampire_warning_message, ghoul_warning_message) SIGNAL_HANDLER SSsunlight.warn_notify(owner.current, danger_level, vampire_warning_message) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan.dm index 0227d8c7efa..2c02cff3337 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan.dm @@ -13,7 +13,7 @@ var/description = "The Caitiff is as basic as you can get with Bloodsuckers. \n\ Entirely without the help of a formal Clan, they are blissfully unaware of who they really are. \n\ No additional abilities is gained, nothing is lost, if you want a plain Bloodsucker, this is it. \n\ - The Favorite Vassal will gain the Brawn ability, to help in combat." + The Favorite Ghoul will gain the Brawn ability, to help in combat." ///The clan objective that is required to greentext. var/datum/objective/bloodsucker/clan_objective ///The icon of the radial icon to join this clan. @@ -40,11 +40,11 @@ RegisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_ON_LIFETICK, PROC_REF(handle_clan_life)) RegisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_RANK_UP, PROC_REF(on_spend_rank)) - RegisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_INTERACT_WITH_VASSAL, PROC_REF(on_interact_with_vassal)) - RegisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_MAKE_FAVORITE, PROC_REF(favorite_vassal_gain)) - RegisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_LOOSE_FAVORITE, PROC_REF(favorite_vassal_loss)) + RegisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_INTERACT_WITH_GHOUL, PROC_REF(on_interact_with_ghoul)) + RegisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_MAKE_FAVORITE, PROC_REF(favorite_ghoul_gain)) + RegisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_LOOSE_FAVORITE, PROC_REF(favorite_ghoul_loss)) - RegisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_MADE_VASSAL, PROC_REF(on_vassal_made)) + RegisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_MADE_GHOUL, PROC_REF(on_ghoul_made)) RegisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_EXIT_TORPOR, PROC_REF(on_exit_torpor)) RegisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_FINAL_DEATH, PROC_REF(on_final_death)) @@ -57,9 +57,9 @@ UnregisterSignal(bloodsuckerdatum, list( COMSIG_BLOODSUCKER_ON_LIFETICK, COMSIG_BLOODSUCKER_RANK_UP, - COMSIG_BLOODSUCKER_INTERACT_WITH_VASSAL, + COMSIG_BLOODSUCKER_INTERACT_WITH_GHOUL, COMSIG_BLOODSUCKER_MAKE_FAVORITE, - COMSIG_BLOODSUCKER_MADE_VASSAL, + COMSIG_BLOODSUCKER_MADE_GHOUL, COMSIG_BLOODSUCKER_EXIT_TORPOR, COMSIG_BLOODSUCKER_FINAL_DEATH, COMSIG_BLOODSUCKER_ENTERS_FRENZY, @@ -125,11 +125,11 @@ SIGNAL_HANDLER /** - * Called when a Bloodsucker successfully Vassalizes someone. + * Called when a Bloodsucker successfully Ghoulizes someone. * args: * bloodsuckerdatum - the antagonist datum of the Bloodsucker running this. */ -/datum/bloodsucker_clan/proc/on_vassal_made(datum/antagonist/bloodsucker/source, mob/living/user, mob/living/target) +/datum/bloodsucker_clan/proc/on_ghoul_made(datum/antagonist/bloodsucker/source, mob/living/user, mob/living/target) SIGNAL_HANDLER user.playsound_local(null, 'sound/effects/explosion_distant.ogg', 40, TRUE) target.playsound_local(null, 'sound/effects/singlebeat.ogg', 40, TRUE) @@ -140,6 +140,7 @@ * Called when a Bloodsucker successfully starts spending their Rank * args: * bloodsuckerdatum - the antagonist datum of the Bloodsucker running this. + * target - The Ghoul (if any) we are upgrading. * cost_rank - TRUE/FALSE on whether this will cost us a rank when we go through with it. * blood_cost - A number saying how much it costs to rank up. */ @@ -233,15 +234,16 @@ bloodsuckerdatum.owner.current.playsound_local(null, 'sound/effects/pope_entry.ogg', 25, TRUE, pressure_affected = FALSE) bloodsuckerdatum.update_static_data_for_all_viewers() - // unlock vassalizing if we have a vassal slot - if(bloodsuckerdatum.max_vassals() >= 1 && !(/datum/crafting_recipe/vassalrack in bloodsuckerdatum.owner?.learned_recipes)) - bloodsuckerdatum.owner.teach_crafting_recipe(/datum/crafting_recipe/vassalrack) + // unlock ghoulizing if we have a ghoul slot + if(bloodsuckerdatum.max_ghouls() >= 1 && !(/datum/crafting_recipe/ghoulrack in bloodsuckerdatum.owner?.learned_recipes)) + bloodsuckerdatum.owner.teach_crafting_recipe(/datum/crafting_recipe/ghoulrack) bloodsuckerdatum.owner.teach_crafting_recipe(/datum/crafting_recipe/candelabrum) bloodsuckerdatum.owner.teach_crafting_recipe(/datum/crafting_recipe/bloodthrone) bloodsuckerdatum.owner.teach_crafting_recipe(/datum/crafting_recipe/meatcoffin) - bloodsuckerdatum.owner.current.balloon_alert(bloodsuckerdatum.owner.current, "new recipes learned! Vassalization unlocked!") + bloodsuckerdatum.owner.current.balloon_alert(bloodsuckerdatum.owner.current, "new recipes learned! Ghoulization unlocked!") return TRUE + /datum/bloodsucker_clan/proc/list_available_powers(already_known = bloodsuckerdatum.powers, powers_list = bloodsuckerdatum.all_bloodsucker_powers) var/list/options = list() for(var/datum/action/cooldown/bloodsucker/power as anything in powers_list) @@ -255,77 +257,77 @@ /datum/bloodsucker_clan/proc/level_up_powers(datum/antagonist/bloodsucker/source) bloodsuckerdatum.LevelUpPowers() /** - * Called when we are trying to turn someone into a Favorite Vassal + * Called when we are trying to turn someone into a Favorite Ghoul * args: * bloodsuckerdatum - the antagonist datum of the Bloodsucker performing this. - * vassaldatum - the antagonist datum of the Vassal being offered up. + * ghouldatum - the antagonist datum of the Ghoul being offered up. */ -/datum/bloodsucker_clan/proc/on_interact_with_vassal(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/vassaldatum) +/datum/bloodsucker_clan/proc/on_interact_with_ghoul(datum/antagonist/bloodsucker/source, datum/antagonist/ghoul/ghouldatum) SIGNAL_HANDLER - INVOKE_ASYNC(src, PROC_REF(interact_with_vassal), bloodsuckerdatum, vassaldatum) + INVOKE_ASYNC(src, PROC_REF(interact_with_ghoul), bloodsuckerdatum, ghouldatum) -/datum/bloodsucker_clan/proc/interact_with_vassal(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/vassaldatum) +/datum/bloodsucker_clan/proc/interact_with_ghoul(datum/antagonist/bloodsucker/source, datum/antagonist/ghoul/ghouldatum) var/mob/living/carbon/human/master = bloodsuckerdatum.owner.current - var/mob/living/carbon/human/servant = vassaldatum.owner.current - if(vassaldatum.special_type || IS_BLOODSUCKER(servant)) - to_chat(master, span_notice("This Vassal was already assigned a special position.")) + var/mob/living/carbon/human/servant = ghouldatum.owner.current + if(ghouldatum.special_type || IS_BLOODSUCKER(servant)) + to_chat(master, span_notice("This Ghoul was already assigned a special position.")) return FALSE - if(!vassaldatum.owner.can_make_special(creator = bloodsuckerdatum.owner)) - to_chat(master, span_notice("This Vassal is unable to gain a Special rank due to innate features.")) + if(!ghouldatum.owner.can_make_special(creator = bloodsuckerdatum.owner)) + to_chat(master, span_notice("This Ghoul is unable to gain a Special rank due to innate features.")) return FALSE - if(bloodsuckerdatum.GetBloodVolume() < SPECIAL_VASSAL_COST) - to_chat(master, span_notice("You need at least 150 blood to make a Vassal a Favorite Vassal.")) + if(bloodsuckerdatum.GetBloodVolume() < SPECIAL_GHOUL_COST) + to_chat(master, span_notice("You need at least 150 blood to make a Ghoul a Favorite Ghoul.")) return FALSE var/list/options = list() var/list/radial_display = list() - for(var/datum/antagonist/vassal/vassaldatums as anything in subtypesof(/datum/antagonist/vassal)) - var/vassal_type = initial(vassaldatums.special_type) - var/slot = bloodsuckerdatum.special_vassals[vassal_type] - if(vassal_type && slot) + for(var/datum/antagonist/ghoul/ghouldatums as anything in subtypesof(/datum/antagonist/ghoul)) + var/ghoul_type = initial(ghouldatums.special_type) + var/slot = bloodsuckerdatum.special_ghouls[ghoul_type] + if(ghoul_type && slot) continue - options[initial(vassaldatums.name)] = vassaldatums + options[initial(ghouldatums.name)] = ghouldatums var/datum/radial_menu_choice/option = new - option.image = image(icon = initial(vassaldatums.hud_icon), icon_state = initial(vassaldatums.antag_hud_name), pixel_y = -12, pixel_x = -12) - option.info = "[initial(vassaldatums.name)] - [span_boldnotice(initial(vassaldatums.vassal_description))]" - radial_display[initial(vassaldatums.name)] = option + option.image = image(icon = initial(ghouldatums.hud_icon), icon_state = initial(ghouldatums.antag_hud_name), pixel_y = -12, pixel_x = -12) + option.info = "[initial(ghouldatums.name)] - [span_boldnotice(initial(ghouldatums.ghoul_description))]" + radial_display[initial(ghouldatums.name)] = option if(!options.len) - master.balloon_alert(master, "Out of Special Vassal slots!") + master.balloon_alert(master, "Out of Special Ghoul slots!") return FALSE - to_chat(master, span_notice("You can change who this Vassal is, who are they to you? This will cost [SPECIAL_VASSAL_COST] blood.")) - var/vassal_response = show_radial_menu(master, servant, radial_display) - if(!vassal_response) + to_chat(master, span_notice("You can change who this Ghoul is, who are they to you? This will cost [SPECIAL_GHOUL_COST] blood.")) + var/ghoul_response = show_radial_menu(master, servant, radial_display) + if(!ghoul_response) return FALSE - var/datum/antagonist/vassal/vassal_type = options[vassal_response] - // let's ask if the vassal themselves actually wants to be a favorite + var/datum/antagonist/ghoul/ghoul_type = options[ghoul_response] + // let's ask if the ghoul themselves actually wants to be a favorite #ifndef BLOODSUCKER_TESTING servant.balloon_alert(master, "asking...") - var/vassal_permission = tgui_alert(servant, initial(vassal_type.vassal_description), "Become a Special Vassal?", list("Yes", "No"), 1 MINUTES) == "Yes" - if(!vassal_permission) + var/ghoul_permission = tgui_alert(servant, initial(ghoul_type.ghoul_description), "Become a Special Ghoul?", list("Yes", "No"), 1 MINUTES) == "Yes" + if(!ghoul_permission) servant.balloon_alert(master, "refused!") return FALSE #endif - if(QDELETED(src) || QDELETED(master) || QDELETED(servant) || !vassal_type) + if(QDELETED(src) || QDELETED(master) || QDELETED(servant) || !ghoul_type) return FALSE - if(bloodsuckerdatum.GetBloodVolume() < SPECIAL_VASSAL_COST) - to_chat(master, span_notice("You took too long to make your vassal, you no longer have enough blood!")) + if(bloodsuckerdatum.GetBloodVolume() < SPECIAL_GHOUL_COST) + to_chat(master, span_notice("You took too long to make your ghoul, you no longer have enough blood!")) return FALSE - vassaldatum.make_special(vassal_type) - bloodsuckerdatum.AdjustBloodVolume(-SPECIAL_VASSAL_COST) + ghouldatum.make_special(ghoul_type) + bloodsuckerdatum.AdjustBloodVolume(-SPECIAL_GHOUL_COST) return TRUE /** - * Called when we are successfully turn a Vassal into a Favorite Vassal + * Called when we are successfully turn a Ghoul into a Favorite Ghoul * args: - * bloodsuckerdatum - antagonist datum of the Bloodsucker who turned them into a Vassal. - * vassaldatum - the antagonist datum of the Vassal being offered up. + * bloodsuckerdatum - antagonist datum of the Bloodsucker who turned them into a Ghoul. + * ghouldatum - the antagonist datum of the Ghoul being offered up. */ -/datum/bloodsucker_clan/proc/favorite_vassal_gain(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/vassaldatum) +/datum/bloodsucker_clan/proc/favorite_ghoul_gain(datum/antagonist/bloodsucker/source, datum/antagonist/ghoul/ghouldatum) SIGNAL_HANDLER - vassaldatum.BuyPower(/datum/action/cooldown/bloodsucker/targeted/brawn) + ghouldatum.BuyPower(/datum/action/cooldown/bloodsucker/targeted/brawn) -/datum/bloodsucker_clan/proc/favorite_vassal_loss(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/vassaldatum) +/datum/bloodsucker_clan/proc/favorite_ghoul_loss(datum/antagonist/bloodsucker/source, datum/antagonist/ghoul/ghouldatum) SIGNAL_HANDLER diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_flavortext.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_flavortext.dm index 481a735203a..e712ec86d30 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_flavortext.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_flavortext.dm @@ -3,7 +3,7 @@ description = "Closer to Animals than Bloodsuckers, known as Werewolves waiting to happen, \n\ these are the most fearful of True Faith, being the most lethal thing they would ever see the night of. \n\ Full Moons do not seem to have an effect, despite common-told stories. \n\ - The Favorite Vassal turns into a Werewolf whenever their Master does." + The Favorite Ghoul turns into a Werewolf whenever their Master does." joinable_clan = FALSE blood_drink_type = BLOODSUCKER_DRINK_INHUMANELY @@ -27,7 +27,7 @@ description = "The most charming Clan of them all, allowing them to very easily disguise among the crew. \n\ More in touch with their morals, they suffer and benefit more strongly from humanity cost or gain of their actions. \n\ Known as 'The most humane kind of vampire', they have an obsession with perfectionism and beauty \n\ - The Favorite Vassal gains the Mesmerize ability." + The Favorite Ghoul gains the Mesmerize ability." joinable_clan = FALSE blood_drink_type = BLOODSUCKER_DRINK_SNOBBY @@ -36,7 +36,7 @@ description = "The Brujah Clan has proven to be the strongest in melee combat, boasting a powerful punch. \n\ They also appear to be more calm than the others, entering their 'frenzies' whenever they want, but dont seem affected much by them. \n\ Be wary, as they are fearsome warriors, rebels and anarchists, with an inclination towards Frenzy. \n\ - The Favorite Vassal gains brawn and a massive increase in brute damage from punching." + The Favorite Ghoul gains brawn and a massive increase in brute damage from punching." joinable_clan = FALSE /datum/bloodsucker_clan/tzimisce diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_malkavian.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_malkavian.dm index 70a68df7096..b2fdccd075b 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_malkavian.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_malkavian.dm @@ -1,7 +1,7 @@ /datum/bloodsucker_clan/malkavian name = CLAN_MALKAVIAN description = "Little is documented about Malkavians. Complete insanity is the most common theme. \n\ - The Favorite Vassal will suffer the same fate as the Master, while gaining the ability to tap into the madness when fighting." + The Favorite Ghoul will suffer the same fate as the Master, while gaining the ability to tap into the madness when fighting." join_icon_state = "malkavian" join_description = "Completely insane. You gain constant hallucinations, become a prophet with unintelligable rambling, \ and become the enforcer of the Masquerade code." @@ -56,24 +56,24 @@ var/message = pick(strings("malkavian_revelations.json", "revelations", "modular_zubbers/strings/bloodsuckers")) INVOKE_ASYNC(source.owner.current, TYPE_PROC_REF(/atom/movable, say), message, forced = CLAN_MALKAVIAN) -/datum/bloodsucker_clan/malkavian/favorite_vassal_gain(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/vassaldatum) - var/mob/living/carbon/carbonowner = vassaldatum.owner.current +/datum/bloodsucker_clan/malkavian/favorite_ghoul_gain(datum/antagonist/bloodsucker/source, datum/antagonist/ghoul/ghouldatum) + var/mob/living/carbon/carbonowner = ghouldatum.owner.current if(istype(carbonowner)) carbonowner.gain_trauma(/datum/brain_trauma/mild/hallucinations, TRAUMA_RESILIENCE_ABSOLUTE) carbonowner.gain_trauma(/datum/brain_trauma/special/bluespace_prophet/phobetor, TRAUMA_RESILIENCE_ABSOLUTE) var/datum/martial_art/psychotic_brawling/psychotic_brawling = new(null) - psychotic_brawling.teach(vassaldatum.owner.current, TRUE) - to_chat(vassaldatum.owner.current, span_notice("Additionally, you now suffer the same fate as your Master, while also gaining the ability to tap into the madness when fighting.")) + psychotic_brawling.teach(ghouldatum.owner.current, TRUE) + to_chat(ghouldatum.owner.current, span_notice("Additionally, you now suffer the same fate as your Master, while also gaining the ability to tap into the madness when fighting.")) -/datum/bloodsucker_clan/malkavian/favorite_vassal_loss(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/vassaldatum) - var/mob/living/carbon/carbonowner = vassaldatum.owner.current +/datum/bloodsucker_clan/malkavian/favorite_ghoul_loss(datum/antagonist/bloodsucker/source, datum/antagonist/ghoul/ghouldatum) + var/mob/living/carbon/carbonowner = ghouldatum.owner.current if(istype(carbonowner)) carbonowner.cure_trauma_type(/datum/brain_trauma/mild/hallucinations, TRAUMA_RESILIENCE_ABSOLUTE) carbonowner.cure_trauma_type(/datum/brain_trauma/special/bluespace_prophet/phobetor, TRAUMA_RESILIENCE_ABSOLUTE) - if(!istype(/datum/martial_art/psychotic_brawling, vassaldatum.owner.martial_art)) + if(!istype(/datum/martial_art/psychotic_brawling, ghouldatum.owner.martial_art)) return - var/datum/martial_art/psychotic_brawling/psychotic_brawling = vassaldatum.owner.martial_art - psychotic_brawling.remove(vassaldatum.owner.current) + var/datum/martial_art/psychotic_brawling/psychotic_brawling = ghouldatum.owner.martial_art + psychotic_brawling.remove(ghouldatum.owner.current) /datum/bloodsucker_clan/malkavian/on_exit_torpor(datum/antagonist/bloodsucker/source) var/mob/living/carbon/carbonowner = bloodsuckerdatum.owner.martial_art diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_nosferatu.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_nosferatu.dm index 9281e51ac0d..7577d51df67 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_nosferatu.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_nosferatu.dm @@ -3,7 +3,7 @@ description = "The Nosferatu Clan is unable to blend in with the crew, with no abilities such as Masquerade and Veil. \n\ Additionally, has a permanent bad back and looks like a Bloodsucker upon a simple examine, and their face is disfigured \n\ they can fit in the vents regardless of their form and equipment. \n\ - The Favorite Vassal is also permanently disfigured, and can also ventcrawl, but only while entirely nude. \n\ + The Favorite Ghoul is also permanently disfigured, and can also ventcrawl, but only while entirely nude. \n\ They also have night vision, know what each wire does, and have silent footsteps." clan_objective = /datum/objective/bloodsucker/kindred join_icon_state = "nosferatu" @@ -40,12 +40,12 @@ UnregisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_EXAMINE) return ..() -/datum/bloodsucker_clan/nosferatu/favorite_vassal_gain(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/vassaldatum) +/datum/bloodsucker_clan/nosferatu/favorite_ghoul_gain(datum/antagonist/bloodsucker/source, datum/antagonist/ghoul/ghouldatum) var/list/traits_to_add = list(TRAIT_VENTCRAWLER_NUDE, TRAIT_DISFIGURED, TRAIT_TRUE_NIGHT_VISION, TRAIT_KNOW_ENGI_WIRES, TRAIT_SILENT_FOOTSTEPS) - vassaldatum.owner.current.add_traits(traits_to_add, VASSAL_TRAIT) - vassaldatum.traits += traits_to_add - vassaldatum.owner.current.update_sight() - to_chat(vassaldatum.owner.current, span_notice("Additionally, you can now ventcrawl while naked, and are permanently disfigured. You also have night vision, know how which wires to cut, and have silent footsteps.")) + ghouldatum.owner.current.add_traits(traits_to_add, GHOUL_TRAIT) + ghouldatum.traits += traits_to_add + ghouldatum.owner.current.update_sight() + to_chat(ghouldatum.owner.current, span_notice("Additionally, you can now ventcrawl while naked, and are permanently disfigured. You also have night vision, know how which wires to cut, and have silent footsteps.")) -/datum/bloodsucker_clan/nosferatu/favorite_vassal_loss(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/vassaldatum) - vassaldatum.owner.current.update_sight() +/datum/bloodsucker_clan/nosferatu/favorite_ghoul_loss(datum/antagonist/bloodsucker/source, datum/antagonist/ghoul/ghouldatum) + ghouldatum.owner.current.update_sight() diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_tremere.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_tremere.dm index 0e37bcbae67..7d38b81b3bd 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_tremere.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_tremere.dm @@ -2,8 +2,8 @@ name = CLAN_TREMERE description = "The Tremere Clan is extremely weak to True Faith, and will burn when entering areas considered such, like the Chapel. \n\ Additionally, a whole new moveset is learned, built on Blood magic rather than Blood abilities, which are upgraded overtime. \n\ - More ranks can be gained by Vassalizing crewmembers. \n\ - The Favorite Vassal gains the Batform spell, being able to morph themselves at will." + More ranks can be gained by Ghoulizing crewmembers. \n\ + The Favorite Ghoul gains the Batform spell, being able to morph themselves at will." clan_objective = /datum/objective/bloodsucker/tremere_power join_icon_state = "tremere" join_description = "You will burn if you enter the Chapel, lose all default powers, \ @@ -49,15 +49,15 @@ /datum/bloodsucker_clan/tremere/purchase_choice(datum/antagonist/bloodsucker/source, datum/action/cooldown/bloodsucker/purchased_power) return purchased_power.upgrade_power() -/datum/bloodsucker_clan/tremere/favorite_vassal_gain(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/vassaldatum) - var/datum/action/cooldown/spell/shapeshift/bat/batform = new(vassaldatum.owner || vassaldatum.owner.current) - batform.Grant(vassaldatum.owner.current) +/datum/bloodsucker_clan/tremere/favorite_ghoul_gain(datum/antagonist/bloodsucker/source, datum/antagonist/ghoul/ghouldatum) + var/datum/action/cooldown/spell/shapeshift/bat/batform = new(ghouldatum.owner || ghouldatum.owner.current) + batform.Grant(ghouldatum.owner.current) -/datum/bloodsucker_clan/tremere/favorite_vassal_loss(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/vassaldatum) - var/datum/action/cooldown/spell/shapeshift/bat/batform = locate() in vassaldatum.owner.current.actions - batform.Remove(vassaldatum.owner.current) +/datum/bloodsucker_clan/tremere/favorite_ghoul_loss(datum/antagonist/bloodsucker/source, datum/antagonist/ghoul/ghouldatum) + var/datum/action/cooldown/spell/shapeshift/bat/batform = locate() in ghouldatum.owner.current.actions + batform.Remove(ghouldatum.owner.current) -/datum/bloodsucker_clan/tremere/on_vassal_made(datum/antagonist/bloodsucker/source, mob/living/user, mob/living/target) +/datum/bloodsucker_clan/tremere/on_ghoul_made(datum/antagonist/bloodsucker/source, mob/living/user, mob/living/target) . = ..() to_chat(bloodsuckerdatum.owner.current, span_danger("You have now gained an additional Rank to spend!")) bloodsuckerdatum.AdjustUnspentRank(1) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_ventrue.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_ventrue.dm index 9206fadc6be..b35ec6e9ece 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_ventrue.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_ventrue.dm @@ -1,16 +1,16 @@ -///The maximum level a Ventrue Bloodsucker can be, before they have to level up their vassal instead. +///The maximum level a Ventrue Bloodsucker can be, before they have to level up their ghoul instead. #define VENTRUE_MAX_POWERS 3 /datum/bloodsucker_clan/ventrue name = CLAN_VENTRUE description = "The Ventrue Clan is extremely snobby with their meals, and refuse to drink blood from people without a mind. \n\ - You may have up to %MAX_POWERS% powers, anything further will be ranks to spend on their Favorite Vassal through a Persuasion Rack. \n\ - The Favorite Vassal will slowly turn more Vampiric this way, until they finally lose their last bits of Humanity. \n\ - Once you finish your embracing, the newly sired vampire will become just a vassal, and you'll be able to sire another bloodsucker." + You may have up to %MAX_POWERS% powers, anything further will be ranks to spend on their Favorite Ghoul through a Persuasion Rack. \n\ + The Favorite Ghoul will slowly turn more Vampiric this way, until they finally lose their last bits of Humanity. \n\ + Once you finish your embracing, the newly sired vampire will become just a ghoul, and you'll be able to sire another bloodsucker." clan_objective = /datum/objective/bloodsucker/embrace join_icon_state = "ventrue" join_description = "Lose the ability to drink from mindless mobs, can't level up or gain new powers, \ - instead you raise a vassal into a Bloodsucker." + instead you raise a ghoul into a Bloodsucker." blood_drink_type = BLOODSUCKER_DRINK_SNOBBY level_cost = BLOODSUCKER_LEVELUP_PERCENTAGE_VENTRUE @@ -29,47 +29,47 @@ /datum/bloodsucker_clan/ventrue/spend_rank(datum/antagonist/bloodsucker/source, cost_rank = TRUE, blood_cost) if(has_enough_abilities()) - to_chat(bloodsuckerdatum.owner.current, span_danger("You can only have up to [VENTRUE_MAX_POWERS] powers, anything further must be ranks to spend on your Favorite Vassal through a Persuasion Rack.")) + to_chat(bloodsuckerdatum.owner.current, span_danger("You can only have up to [VENTRUE_MAX_POWERS] powers, anything further must be ranks to spend on your Favorite Ghoul through a Persuasion Rack.")) return FALSE . = ..() -/datum/bloodsucker_clan/ventrue/proc/finish_spend_rank(datum/antagonist/vassal/vassaldatum, cost_rank, blood_cost) +/datum/bloodsucker_clan/ventrue/proc/finish_spend_rank(datum/antagonist/ghoul/ghouldatum, cost_rank, blood_cost) finalize_spend_rank(bloodsuckerdatum, cost_rank, blood_cost) - vassaldatum.LevelUpPowers() + ghouldatum.LevelUpPowers() -/datum/bloodsucker_clan/ventrue/interact_with_vassal(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/favorite/vassaldatum) +/datum/bloodsucker_clan/ventrue/interact_with_ghoul(datum/antagonist/bloodsucker/source, datum/antagonist/ghoul/favorite/ghouldatum) . = ..() if(.) return TRUE - if(!istype(vassaldatum)) + if(!istype(ghouldatum)) return FALSE - to_chat(bloodsuckerdatum.owner.current, span_warning("Do you wish to Rank [vassaldatum.owner.current] up?")) + to_chat(bloodsuckerdatum.owner.current, span_warning("Do you wish to Rank [ghouldatum.owner.current] up?")) to_chat(bloodsuckerdatum.owner.current, span_warning("This will use [bloodsuckerdatum.GetUnspentRank() >= 1 ? "a unspent Rank" : "[bloodsuckerdatum.get_level_cost()] Blood Thickening Points"]!")) var/static/list/rank_options = list( "Yes" = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_yes"), "No" = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_no"), ) - var/rank_response = show_radial_menu(bloodsuckerdatum.owner.current, vassaldatum.owner.current, rank_options, radius = 36, require_near = TRUE) + var/rank_response = show_radial_menu(bloodsuckerdatum.owner.current, ghouldatum.owner.current, rank_options, radius = 36, require_near = TRUE) if(rank_response == "Yes") if(!bloodsuckerdatum.GetUnspentRank() >= 1 && !source.blood_level_gain(FALSE)) - to_chat(bloodsuckerdatum.owner.current, span_danger("You don't have any levels or enough blood thickening points to Rank [vassaldatum.owner.current] up with.")) + to_chat(bloodsuckerdatum.owner.current, span_danger("You don't have any levels or enough blood thickening points to Rank [ghouldatum.owner.current] up with.")) return FALSE - return vassal_level(vassaldatum) + return ghoul_level(ghouldatum) return FALSE -/datum/bloodsucker_clan/ventrue/proc/vassal_level(datum/antagonist/vassal/favorite/vassaldatum) - var/list/options = list_available_powers(vassaldatum.bloodsucker_powers) - var/mob/living/carbon/human/target = vassaldatum.owner.current +/datum/bloodsucker_clan/ventrue/proc/ghoul_level(datum/antagonist/ghoul/favorite/ghouldatum) + var/list/options = list_available_powers(ghouldatum.bloodsucker_powers) + var/mob/living/carbon/human/target = ghouldatum.owner.current var/datum/action/cooldown/bloodsucker/choice = choose_powers( - "You have the opportunity to level up your Favorite Vassal. Select a power you wish them to recieve.", + "You have the opportunity to level up your Favorite Ghoul. Select a power you wish them to recieve.", "A wise master's hand is neccesary", options ) if(!choice) return FALSE var/power_name = initial(choice.name) - if(!vassaldatum.BuyPower(choice, vassaldatum.bloodsucker_powers)) + if(!ghouldatum.BuyPower(choice, ghouldatum.bloodsucker_powers)) bloodsuckerdatum.owner.current.balloon_alert(bloodsuckerdatum.owner.current, "[target] already knows [power_name]!") return FALSE bloodsuckerdatum.owner.current.balloon_alert(bloodsuckerdatum.owner.current, "taught [power_name]!") @@ -78,14 +78,14 @@ target.balloon_alert(target, "learned [power_name]!") to_chat(target, span_notice("Your master taught you how to use [power_name]!")) - vassaldatum.vassal_level++ - finish_spend_rank(vassaldatum, TRUE, FALSE) - bloodsuckerify(vassaldatum) + ghouldatum.ghoul_level++ + finish_spend_rank(ghouldatum, TRUE, FALSE) + bloodsuckerify(ghouldatum) return TRUE -/datum/bloodsucker_clan/ventrue/proc/bloodsuckerify(datum/antagonist/vassal/favorite/vassaldatum) - var/mob/living/carbon/human/target = vassaldatum.owner.current - var/stage = vassaldatum.vassal_level +/datum/bloodsucker_clan/ventrue/proc/bloodsuckerify(datum/antagonist/ghoul/favorite/ghouldatum) + var/mob/living/carbon/human/target = ghouldatum.owner.current + var/stage = ghouldatum.ghoul_level var/list/traits_possible = list( list(TRAIT_COLDBLOODED, TRAIT_NOBREATH, TRAIT_AGEUSIA), list(TRAIT_NOCRITDAMAGE, TRAIT_NOSOFTCRIT, TRAIT_SLEEPIMMUNE, TRAIT_VIRUSIMMUNE), @@ -93,6 +93,7 @@ ) var/traits_to_add = length(traits_possible) >= stage ? traits_possible[stage] : list() switch(stage) + if(1) to_chat(target, span_notice("Your blood begins to feel cold, and as a mote of ash lands upon your tongue, you stop breathing...")) @@ -111,14 +112,15 @@ to_chat(target, span_notice("You feel your heart stop pumping for the last time as you begin to thirst for blood, you feel... dead.")) // Unfavorites you, so the ventrue isn't stuck with you forever var/powers_to_transfer = list() - // Get rid of the favorite datum and replace with a normal vassal datum - if(vassaldatum) - vassaldatum.silent = TRUE - for(var/datum/power as anything in vassaldatum.bloodsucker_powers) + // Get rid of the favorite datum and replace with a normal ghoul datum + if(ghouldatum) + ghouldatum.silent = TRUE + for(var/datum/power as anything in ghouldatum.bloodsucker_powers) powers_to_transfer += power.type - target.mind.remove_antag_datum(/datum/antagonist/vassal/favorite) + target.mind.remove_antag_datum(/datum/antagonist/ghoul/favorite) else - target.remove_traits(flatten_list(traits_to_add), VASSAL_TRAIT) + target.remove_traits(flatten_list(traits_to_add), GHOUL_TRAIT) + var/datum/antagonist/bloodsucker/vamp = new() vamp.ventrue_sired = bloodsuckerdatum @@ -127,12 +129,14 @@ // Check for the recuperate power and remove it if they have it bloodsuckerdatum.owner.current.add_mood_event("madevamp", /datum/mood_event/madevamp) - if(vassaldatum && QDELETED(vassaldatum) && length(traits_to_add)) - target.add_traits(traits_to_add, VASSAL_TRAIT) - vassaldatum.traits += traits_to_add -/datum/bloodsucker_clan/ventrue/favorite_vassal_gain(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/vassaldatum) - to_chat(source.owner.current, span_announce("* Bloodsucker Tip: You can now upgrade your Favorite Vassal by buckling them onto a persuasion rack!")) - vassaldatum.BuyPower(/datum/action/cooldown/bloodsucker/distress) + if(ghouldatum && QDELETED(ghouldatum) && length(traits_to_add)) + target.add_traits(traits_to_add, GHOUL_TRAIT) + ghouldatum.traits += traits_to_add + +/datum/bloodsucker_clan/ventrue/favorite_ghoul_gain(datum/antagonist/bloodsucker/source, datum/antagonist/ghoul/ghouldatum) + to_chat(source.owner.current, span_announce("* Bloodsucker Tip: You can now upgrade your Favorite Ghoul by buckling them onto a persuasion rack!")) + ghouldatum.BuyPower(/datum/action/cooldown/bloodsucker/distress) + #undef VENTRUE_MAX_POWERS diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/_powers.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/_powers.dm index 76c78691b36..35c3981d6bf 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/_powers.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/_powers.dm @@ -26,7 +26,7 @@ check_flags = AB_CHECK_INCAPACITATED|AB_CHECK_CONSCIOUS|AB_CHECK_PHASED var/bloodsucker_check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY /// Who can purchase the Power - var/purchase_flags = NONE // BLOODSUCKER_CAN_BUY|BLOODSUCKER_DEFAULT_POWER|TREMERE_CAN_BUY|VASSAL_CAN_BUY + var/purchase_flags = NONE // BLOODSUCKER_CAN_BUY|BLOODSUCKER_DEFAULT_POWER|TREMERE_CAN_BUY|GHOUL_CAN_BUY // VARS // /// If the Power is currently active, differs from action cooldown because of how powers are handled. diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/cloak.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/cloak.dm index 0c435377bb0..ec46a3bc824 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/cloak.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/cloak.dm @@ -15,7 +15,7 @@ At level 4, you will be able to run while cloaked." power_flags = BP_CONTINUOUS_EFFECT check_flags = AB_CHECK_CONSCIOUS - purchase_flags = BLOODSUCKER_CAN_BUY|VASSAL_CAN_BUY + purchase_flags = BLOODSUCKER_CAN_BUY|GHOUL_CAN_BUY bloodcost = 5 constant_bloodcost = 0.2 cooldown_time = 5 SECONDS @@ -32,7 +32,7 @@ continue if(!can_see(watcher, owner)) continue - if(IS_BLOODSUCKER(watcher) || IS_VASSAL(watcher)) + if(IS_BLOODSUCKER(watcher) || IS_GHOUL(watcher)) continue owner.balloon_alert(owner, "you can only vanish unseen.") return FALSE diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/feed.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/feed.dm index a82e25f1994..2e3d992dfd8 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/feed.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/feed.dm @@ -133,7 +133,7 @@ target_ref = null return FALSE if(owner.pulling == feed_target && owner.grab_state >= GRAB_AGGRESSIVE) - if(!IS_BLOODSUCKER(feed_target) && !IS_VASSAL(feed_target) && !IS_MONSTERHUNTER(feed_target)) + if(!IS_BLOODSUCKER(feed_target) && !IS_GHOUL(feed_target) && !IS_MONSTERHUNTER(feed_target)) feed_target.Unconscious(get_sleep_time()) if(!feed_target.density) feed_target.Move(owner.loc) @@ -159,7 +159,7 @@ continue if(watchers.is_blind() || watchers.is_nearsighted_currently()) continue - if(IS_BLOODSUCKER(watchers) || IS_VASSAL(watchers) || HAS_TRAIT(watchers.mind, TRAIT_BLOODSUCKER_HUNTER)) + if(IS_BLOODSUCKER(watchers) || IS_GHOUL(watchers) || HAS_TRAIT(watchers.mind, TRAIT_BLOODSUCKER_HUNTER)) continue owner.balloon_alert(owner, "feed noticed!") bloodsuckerdatum_power.give_masquerade_infraction() diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/fortitude.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/fortitude.dm index 60362d6cb77..aac1c8afbdb 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/fortitude.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/fortitude.dm @@ -5,7 +5,7 @@ button_icon_state = "power_fortitude" power_flags = BP_CONTINUOUS_EFFECT|BP_AM_COSTLESS_UNCONSCIOUS check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY - purchase_flags = BLOODSUCKER_CAN_BUY|VASSAL_CAN_BUY + purchase_flags = BLOODSUCKER_CAN_BUY|GHOUL_CAN_BUY cooldown_time = 20 SECONDS bloodcost = 30 constant_bloodcost = 0.2 @@ -31,7 +31,7 @@ if(level_current >= FORTITUDE_STUN_IMMUNITY_LEVEL) ADD_TRAIT(owner, TRAIT_STUNIMMUNE, BLOODSUCKER_TRAIT) var/mob/living/carbon/human/bloodsucker_user = owner - if(IS_BLOODSUCKER(owner) || IS_VASSAL(owner)) + if(IS_BLOODSUCKER(owner) || IS_GHOUL(owner)) fortitude_resist = GetFortitudeResist() bloodsucker_user.physiology.brute_mod *= fortitude_resist bloodsucker_user.physiology.burn_mod *= GetBurnResist() @@ -91,7 +91,7 @@ if(!. || !ishuman(owner)) return var/mob/living/carbon/human/bloodsucker_user = owner - if(IS_BLOODSUCKER(owner) || IS_VASSAL(owner) && fortitude_resist) + if(IS_BLOODSUCKER(owner) || IS_GHOUL(owner) && fortitude_resist) bloodsucker_user.physiology.brute_mod /= fortitude_resist bloodsucker_user.physiology.burn_mod /= fortitude_resist + 0.2 bloodsucker_user.physiology.stamina_mod /= fortitude_resist diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/gohome.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/gohome.dm index bf9bc043faf..e4cb64ba901 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/gohome.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/gohome.dm @@ -10,7 +10,7 @@ */ /datum/action/cooldown/bloodsucker/gohome name = "Vanishing Act" - desc = "As dawn aproaches, disperse into mist and return directly to your Lair.
WARNING: You will drop ALL of your possessions if observed by mortals." + desc = "As dawn aproaches, disperse into mist and return directly to your Haven.
WARNING: You will drop ALL of your possessions if observed by mortals." button_icon_state = "power_gohome" active_background_icon_state = "vamp_power_off_oneshot" base_background_icon_state = "vamp_power_off_oneshot" @@ -43,7 +43,7 @@ . = ..() if(!.) return FALSE - /// Have No Lair (NOTE: You only got this power if you had a lair, so this means it's destroyed) + /// Have No Haven (NOTE: You only got this power if you had a haven, so this means it's destroyed) if(!istype(bloodsuckerdatum_power) || !bloodsuckerdatum_power.coffin) owner.balloon_alert(owner, "coffin was destroyed!") return FALSE @@ -105,7 +105,7 @@ continue if(watchers.is_blind()) continue - if(!IS_BLOODSUCKER(watchers) && !IS_VASSAL(watchers)) + if(!IS_BLOODSUCKER(watchers) && !IS_GHOUL(watchers)) drop_item = TRUE break // Drop all necessary items (handcuffs, legcuffs, items if seen) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/brawn.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/brawn.dm index 41b369efc95..129d7777cd4 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/brawn.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/brawn.dm @@ -5,7 +5,7 @@ name = "Brawn" desc = "Snap restraints, break lockers and doors at higher levels, or deal terrible damage with your bare hands." button_icon_state = "power_strength" - purchase_flags = BLOODSUCKER_CAN_BUY|VASSAL_CAN_BUY + purchase_flags = BLOODSUCKER_CAN_BUY|GHOUL_CAN_BUY bloodcost = 10 cooldown_time = 12 SECONDS target_range = 1 diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/haste.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/haste.dm index c5cffa9a50f..840e02bb1f7 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/haste.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/haste.dm @@ -9,7 +9,7 @@ desc = "Force yourself to stand up if you're down and dash somewhere with supernatural speed. Those nearby may be knocked away, stunned, or left empty-handed." button_icon_state = "power_speed" prefire_message = "You prepare to dash!" - purchase_flags = BLOODSUCKER_CAN_BUY|VASSAL_CAN_BUY + purchase_flags = BLOODSUCKER_CAN_BUY|GHOUL_CAN_BUY bloodcost = 6 cooldown_time = 12 SECONDS target_range = 5 diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/lunge.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/lunge.dm index da7c1b2c4fe..29ceb40a75c 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/lunge.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/lunge.dm @@ -6,7 +6,7 @@ desc = "Spring at your target to grapple them without warning, or tear the dead's heart out. Attacks from concealment or the rear may even knock them down if strong enough." button_icon_state = "power_lunge" check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_INCAPACITATED|AB_CHECK_LYING|AB_CHECK_PHASED|AB_CHECK_LYING - purchase_flags = BLOODSUCKER_CAN_BUY|VASSAL_CAN_BUY + purchase_flags = BLOODSUCKER_CAN_BUY|GHOUL_CAN_BUY bloodcost = 10 cooldown_time = 10 SECONDS power_activates_immediately = FALSE diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/mesmerize.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/mesmerize.dm index 7f26ba6bd2e..e28b7dc0cf0 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/mesmerize.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/mesmerize.dm @@ -14,7 +14,7 @@ name = "Mesmerize" button_icon_state = "power_mez" power_flags = NONE - purchase_flags = BLOODSUCKER_CAN_BUY|VASSAL_CAN_BUY + purchase_flags = BLOODSUCKER_CAN_BUY|GHOUL_CAN_BUY bloodcost = 30 cooldown_time = 30 SECONDS target_range = 4 diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/trespass.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/trespass.dm index 0e7b6b28f7d..a3753d7e2ba 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/trespass.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/trespass.dm @@ -3,7 +3,7 @@ desc = "Become mist and advance two tiles in one direction. Useful for skipping past doors and barricades." button_icon_state = "power_tres" bloodsucker_check_flags = BP_CANT_USE_IN_TORPOR - purchase_flags = BLOODSUCKER_CAN_BUY|VASSAL_CAN_BUY + purchase_flags = BLOODSUCKER_CAN_BUY|GHOUL_CAN_BUY bloodcost = 10 cooldown_time = 8 SECONDS prefire_message = "Select a destination." diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/auspex.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/auspex.dm index 694fb8dba1c..96d655fc586 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/auspex.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/auspex.dm @@ -100,7 +100,7 @@ new /obj/effect/particle_effect/fluid/smoke/vampsmoke(targeted_turf) for(var/mob/living/carbon/living_mob in range(1, targeted_turf)-user) - if(IS_BLOODSUCKER(living_mob) || IS_VASSAL(living_mob)) + if(IS_BLOODSUCKER(living_mob) || IS_GHOUL(living_mob)) continue if(level_current >= AUSPEX_BLEED_LEVEL) var/obj/item/bodypart/bodypart = pick(living_mob.bodyparts) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/dominate.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/dominate.dm index 0fd31d5d9bd..b1d08c8afd7 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/dominate.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/dominate.dm @@ -4,13 +4,13 @@ * Level 1 - Mesmerizes target * Level 2 - Mesmerizes and mutes target * Level 3 - Mesmerizes, blinds and mutes target - * Level 4 - Target (if at least in crit & has a mind) will revive as a Mute/Deaf Vassal for 5 minutes before dying. - * Level 5 - Target (if at least in crit & has a mind) will revive as a Vassal for 8 minutes before dying. + * Level 4 - Target (if at least in crit & has a mind) will revive as a Mute/Deaf Ghoul for 5 minutes before dying. + * Level 5 - Target (if at least in crit & has a mind) will revive as a Ghoul for 8 minutes before dying. */ -#define TEMP_VASSALIZE_COST 150 +#define TEMP_GHOULIZE_COST 150 #define DOMINATE_XRAY_LEVEL 3 -#define DOMINATE_NON_MUTE_VASSALIZE_LEVEL 4 +#define DOMINATE_NON_MUTE_GHOULIZE_LEVEL 4 /datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate name = "Dominate" button_icon_state = "power_auspex" @@ -43,8 +43,8 @@ /datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/get_power_desc_extended() . = ..() - if(level_current >= DOMINATE_VASSALIZE_LEVEL) - . += "If your target is in critical condition or dead, they will instead be turned into a temporary Vassal. This will cost [TEMP_VASSALIZE_COST] blood. Pre-existing dead vassals will simply be revived." + if(level_current >= DOMINATE_GHOULIZE_LEVEL) + . += "If your target is in critical condition or dead, they will instead be turned into a temporary Ghoul. This will cost [TEMP_GHOULIZE_COST] blood. Pre-existing dead ghouls will simply be revived." /datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/get_power_explanation_extended() . = list() @@ -53,16 +53,16 @@ . += "A left click will completely immobilize, and blind them for the next [DisplayTimeText(get_power_time())] seconds, and will also mute them for [DisplayTimeText(get_power_time())] seconds." . += "While this ability is active, you will be able to see additional information about everyone in the room." . += "At level [DOMINATE_XRAY_LEVEL], you will gain X-Ray vision while this ability is active." - . += "At level [DOMINATE_VASSALIZE_LEVEL], while adjacent to the target, if your target is in critical condition or dead, they will instead be turned into a temporary Vassal. This will cost [TEMP_VASSALIZE_COST] blood." - . += "The victim must have atleast [BLOOD_VOLUME_BAD] blood to be vassalized." - . += "The vassal will be mute and deaf if the level of [src] is not at least [DOMINATE_NON_MUTE_VASSALIZE_LEVEL]" - . += "If you use this on a currently dead normal Vassal, they will will not suddenly cease to live as if a temporary Vassal." - . += "They will have complete loyalty to you, until their death in [DisplayTimeText(get_vassal_duration())] upon use." - . += "Vassalizing or reviving a vassal will make this ability go on cooldown for [DisplayTimeText(get_vassalize_cooldown())]." + . += "At level [DOMINATE_GHOULIZE_LEVEL], while adjacent to the target, if your target is in critical condition or dead, they will instead be turned into a temporary Ghoul. This will cost [TEMP_GHOULIZE_COST] blood." + . += "The victim must have atleast [BLOOD_VOLUME_BAD] blood to be ghoulized." + . += "The ghoul will be mute and deaf if the level of [src] is not at least [DOMINATE_NON_MUTE_GHOULIZE_LEVEL]" + . += "If you use this on a currently dead normal Ghoul, they will will not suddenly cease to live as if a temporary Ghoul." + . += "They will have complete loyalty to you, until their death in [DisplayTimeText(get_ghoul_duration())] upon use." + . += "Ghoulizing or reviving a ghoul will make this ability go on cooldown for [DisplayTimeText(get_ghoulize_cooldown())]." /datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/CheckCanTarget(atom/target_atom) var/mob/living/selected_target = target_atom - if(level_current >= DOMINATE_VASSALIZE_LEVEL && (IS_VASSAL(selected_target) || selected_target.stat >= SOFT_CRIT)) + if(level_current >= DOMINATE_GHOULIZE_LEVEL && (IS_GHOUL(selected_target) || selected_target.stat >= SOFT_CRIT)) if(selected_target?.mind && owner.Adjacent(selected_target)) return TRUE . = ..() @@ -99,59 +99,59 @@ /datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/FireTargetedPower(atom/target, params) var/mob/living/target_mob = target var/mob/living/user = owner - if(target_mob.stat != CONSCIOUS && level_current >= DOMINATE_VASSALIZE_LEVEL) + if(target_mob.stat != CONSCIOUS && level_current >= DOMINATE_GHOULIZE_LEVEL) if(user.Adjacent(target)) - attempt_vassalize(target, user) + attempt_ghoulize(target, user) else - if(IS_VASSAL(target_mob)) + if(IS_GHOUL(target_mob)) owner.balloon_alert(owner, "too far to revive!") else - owner.balloon_alert(owner, "too far to vassalize!") + owner.balloon_alert(owner, "too far to ghoulize!") return TRUE return ..() -/datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/proc/attempt_vassalize(mob/living/target, mob/living/user) +/datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/proc/attempt_ghoulize(mob/living/target, mob/living/user) owner.face_atom(target) - var/datum/antagonist/vassal/vassal = IS_VASSAL(target) + var/datum/antagonist/ghoul/ghoul = IS_GHOUL(target) if(!victim_has_blood(target)) return FALSE - if(vassal) + if(ghoul) owner.balloon_alert(owner, "attempting to revive.") else - owner.balloon_alert(owner, "attempting to vassalize.") + owner.balloon_alert(owner, "attempting to ghoulize.") if(!do_after(user, 6 SECONDS, target, NONE, TRUE)) return FALSE if(!victim_has_blood(target)) return FALSE - if(vassal?.master == bloodsuckerdatum_power) + if(ghoul?.master == bloodsuckerdatum_power) if(target.stat != DEAD) owner.balloon_alert(owner, "not dead!") return FALSE - PowerActivatedSuccesfully(get_vassalize_cooldown()) + PowerActivatedSuccesfully(get_ghoulize_cooldown()) to_chat(user, span_warning("We revive [target]!")) owner.balloon_alert(owner, "successfully revived!") target.mind?.grab_ghost() target.revive(ADMIN_HEAL_ALL) - pay_cost(TEMP_VASSALIZE_COST - bloodcost) - log_combat(owner, target, "tremere revived", addition="Revived their vassal using dominate") + pay_cost(TEMP_GHOULIZE_COST - bloodcost) + log_combat(owner, target, "tremere revived", addition="Revived their ghoul using dominate") return FALSE - if(!bloodsuckerdatum_power.make_vassal(target) ) - owner.balloon_alert(owner, "not a valid target for vassalization!.") + if(!bloodsuckerdatum_power.make_ghoul(target) ) + owner.balloon_alert(owner, "not a valid target for ghoulization!.") return /*if(IS_MONSTERHUNTER(target)) to_chat(target, span_notice("Their body refuses to react...")) return*/ - PowerActivatedSuccesfully(get_vassalize_cooldown()) + PowerActivatedSuccesfully(get_ghoulize_cooldown()) to_chat(user, span_warning("We revive [target]!")) // no escaping at this point target.mind?.grab_ghost(TRUE) target.revive(ADMIN_HEAL_ALL) - var/datum/antagonist/vassal/vassaldatum = target.mind.has_antag_datum(/datum/antagonist/vassal) - vassaldatum.special_type = TREMERE_VASSAL //don't turn them into a favorite please - var/living_time = get_vassal_duration() - log_combat(owner, target, "tremere mindslaved", addition="Revived and converted [target] into a temporary tremere vassal for [DisplayTimeText(living_time)].") - if(level_current <= DOMINATE_NON_MUTE_VASSALIZE_LEVEL) + var/datum/antagonist/ghoul/ghouldatum = target.mind.has_antag_datum(/datum/antagonist/ghoul) + ghouldatum.special_type = TREMERE_GHOUL //don't turn them into a favorite please + var/living_time = get_ghoul_duration() + log_combat(owner, target, "tremere mindslaved", addition="Revived and converted [target] into a temporary tremere ghoul for [DisplayTimeText(living_time)].") + if(level_current <= DOMINATE_NON_MUTE_GHOULIZE_LEVEL) target.add_traits(list(TRAIT_MUTE, TRAIT_DEAF), DOMINATE_TRAIT) user.balloon_alert(target, "only [DisplayTimeText(living_time)] left to live!") to_chat(target, span_warning("You will only live for [DisplayTimeText(living_time)]! Obey your master and go out in a blaze of glory!")) @@ -160,13 +160,13 @@ setup_timer(user, target, living_time, timer_id) thralls += target RegisterSignals(target, list(COMSIG_LIVING_DEATH, COMSIG_QDELETING), PROC_REF(end_possession), timer_id) - RegisterSignal(vassaldatum, COMSIG_ANTAGONIST_REMOVED, PROC_REF(on_antag_datum_removal), target, timer_id) - pay_cost(TEMP_VASSALIZE_COST - bloodcost) + RegisterSignal(ghouldatum, COMSIG_ANTAGONIST_REMOVED, PROC_REF(on_antag_datum_removal), target, timer_id) + pay_cost(TEMP_GHOULIZE_COST - bloodcost) return TRUE /datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/proc/victim_has_blood(mob/living/target) - // you can always revive non-temporary vassals - if(IS_VASSAL(target)) + // you can always revive non-temporary ghouls + if(IS_GHOUL(target)) return TRUE if(target.blood_volume < BLOOD_VOLUME_BAD) owner.balloon_alert(owner, "not enough blood in victim!") @@ -175,15 +175,15 @@ /datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/proc/setup_timer(mob/living/user, mob/living/target, living_time, timer_id) var/list/show_to = list(user, target) - if(bloodsuckerdatum_power && length(bloodsuckerdatum_power.vassals)) - for(var/datum/antagonist/vassal in bloodsuckerdatum_power.vassals) - if(!vassal?.owner?.current) + if(bloodsuckerdatum_power && length(bloodsuckerdatum_power.ghouls)) + for(var/datum/antagonist/ghoul in bloodsuckerdatum_power.ghouls) + if(!ghoul?.owner?.current) continue - show_to += vassal.owner.current + show_to += ghoul.owner.current new /atom/movable/screen/text/screen_timer/attached(null, show_to, timer_id, "Dies in ${timer}", null, null, target) new /atom/movable/screen/text/screen_timer(null, target, timer_id, "You die in ${timer}") -/datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/proc/on_antag_datum_removal(datum/antagonist/vassal, mob/living/thrall, timer_id) +/datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/proc/on_antag_datum_removal(datum/antagonist/ghoul, mob/living/thrall, timer_id) end_possession(thrall, timer_id) /datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/proc/end_possession(mob/living/user, timer_id) @@ -197,20 +197,20 @@ user.remove_traits(list(TRAIT_MUTE, TRAIT_DEAF), DOMINATE_TRAIT) if(!HAS_TRAIT(user, TRAIT_NOBLOOD)) user.blood_volume = 0 - if(!IS_VASSAL(user)) + if(!IS_GHOUL(user)) to_chat(user, span_warning("You feel the blood keeping you alive run out!")) return to_chat(user, span_warning("You feel the Blood of your Master run out!")) - user.mind?.remove_antag_datum(/datum/antagonist/vassal) + user.mind?.remove_antag_datum(/datum/antagonist/ghoul) if(user.stat == DEAD) return user.death() -/datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/proc/get_vassal_duration() +/datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/proc/get_ghoul_duration() return 4 MINUTES * max(level_current, 1) -/datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/proc/get_vassalize_cooldown() +/datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/proc/get_ghoulize_cooldown() return cooldown_time * 3 -#undef TEMP_VASSALIZE_COST +#undef TEMP_GHOULIZE_COST #undef DOMINATE_XRAY_LEVEL diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/thaumaturgy.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/thaumaturgy.dm index e416f24d84f..360adde66de 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/thaumaturgy.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/thaumaturgy.dm @@ -195,8 +195,8 @@ for(var/mob/living/possible_target as anything in orange(1, target)) if(!ismob(possible_target)) continue - var/datum/antagonist/vassal/vassal = IS_VASSAL(possible_target) - if(length(bloodsuckerdatum_power?.vassals) && vassal && (vassal in bloodsuckerdatum_power?.vassals)) + var/datum/antagonist/ghoul/ghoul = IS_GHOUL(possible_target) + if(length(bloodsuckerdatum_power?.ghouls) && ghoul && (ghoul in bloodsuckerdatum_power?.ghouls)) continue targets += possible_target if(length(targets)) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/vassal/distress.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/vassal/distress.dm index 38db3c0bd1c..2f07a6c8046 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/vassal/distress.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/vassal/distress.dm @@ -14,10 +14,10 @@ /datum/action/cooldown/bloodsucker/distress/ActivatePower(trigger_flags) . = ..() var/turf/open/floor/target_area = get_area(owner) - var/datum/antagonist/vassal/vassaldatum = owner.mind.has_antag_datum(/datum/antagonist/vassal) + var/datum/antagonist/ghoul/ghouldatum = owner.mind.has_antag_datum(/datum/antagonist/ghoul) owner.balloon_alert(owner, "you call out for your master!") - to_chat(vassaldatum.master.owner, "[owner], your loyal Vassal, is desperately calling for aid at [target_area]!") + to_chat(ghouldatum.master.owner, "[owner], your loyal Ghoul, is desperately calling for aid at [target_area]!") var/mob/living/user = owner user.adjustBruteLoss(10) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/vassal/recuperate.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/vassal/recuperate.dm index e596d63608c..3c0fb725150 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/vassal/recuperate.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/vassal/recuperate.dm @@ -1,4 +1,4 @@ -/// Used by Vassals +/// Used by Ghouls /datum/action/cooldown/bloodsucker/recuperate name = "Sanguine Recuperation" desc = "Slowly heals you overtime using your master's blood, in exchange for some of your own blood and effort." @@ -39,12 +39,12 @@ if(!active) return var/mob/living/carbon/user = owner - var/datum/antagonist/vassal/vassaldatum = IS_VASSAL(user) - if(!vassaldatum || QDELETED(vassaldatum.master)) + var/datum/antagonist/ghoul/ghouldatum = IS_GHOUL(user) + if(!ghouldatum || QDELETED(ghouldatum.master)) to_chat(owner, span_warning("No master to draw blood from!")) DeactivatePower() return - vassaldatum.master.AdjustBloodVolume(-1) + ghouldatum.master.AdjustBloodVolume(-1) user.set_timed_status_effect(5 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE) user.adjustStaminaLoss(bloodcost * 1.1) user.adjustBruteLoss(-2.5, updating_health = FALSE) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/vassal/vassal_fold.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/vassal/vassal_fold.dm index 0a702446320..8e6a942debf 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/vassal/vassal_fold.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/vassal/vassal_fold.dm @@ -1,12 +1,12 @@ -/datum/action/cooldown/bloodsucker/vassal_blood - name = "Help Vassal" - desc = "Bring an ex-Vassal back into the fold, or create blood using a bag. RMB: Check Vassal status." +/datum/action/cooldown/bloodsucker/ghoul_blood + name = "Help Ghoul" + desc = "Bring an ex-Ghoul back into the fold, or create blood using a bag. RMB: Check Ghoul status." button_icon_state = "power_torpor" - power_explanation = "Help Vassal:\n\ - Use this power while you have an ex-Vassal grabbed to bring them back into the fold. \ + power_explanation = "Help Ghoul:\n\ + Use this power while you have an ex-Ghoul grabbed to bring them back into the fold. \ Use this power with a bloodbag in your hand to instead fill it with Vampiric Blood which \ - can be used to reset ex-vassal deconversion timers. \ - Right-Click will show the status of all Vassals." + can be used to reset ex-ghoul deconversion timers. \ + Right-Click will show the status of all Ghouls." check_flags = NONE purchase_flags = NONE bloodcost = 10 @@ -17,25 +17,25 @@ ///Weakref to a target we're bringing into the fold. var/datum/weakref/target_ref -/datum/action/cooldown/bloodsucker/vassal_blood/can_use(mob/living/carbon/user, trigger_flags) +/datum/action/cooldown/bloodsucker/ghoul_blood/can_use(mob/living/carbon/user, trigger_flags) . = ..() if(!.) return FALSE - var/datum/antagonist/vassal/revenge/revenge_vassal = IS_REVENGE_VASSAL(owner) - if(revenge_vassal) + var/datum/antagonist/ghoul/revenge/revenge_ghoul = IS_REVENGE_GHOUL(owner) + if(revenge_ghoul) return FALSE if(trigger_flags & TRIGGER_SECONDARY_ACTION) - if(!revenge_vassal.ex_vassals.len) - owner.balloon_alert(owner, "no vassals!") + if(!revenge_ghoul.ex_ghouls.len) + owner.balloon_alert(owner, "no ghouls!") return FALSE return TRUE if(owner.pulling && isliving(owner.pulling)) var/mob/living/pulled_target = owner.pulling - var/datum/antagonist/ex_vassal/former_vassal = IS_EX_VASSAL(pulled_target) - if(!former_vassal) - owner.balloon_alert(owner, "not a former vassal!") + var/datum/antagonist/ex_ghoul/former_ghoul = IS_EX_GHOUL(pulled_target) + if(!former_ghoul) + owner.balloon_alert(owner, "not a former ghoul!") return FALSE target_ref = WEAKREF(owner.pulling) return TRUE @@ -50,17 +50,17 @@ bloodbag = blood_bag return TRUE -/datum/action/cooldown/bloodsucker/vassal_blood/ActivatePower(trigger_flags) +/datum/action/cooldown/bloodsucker/ghoul_blood/ActivatePower(trigger_flags) . = ..() - var/datum/antagonist/vassal/revenge/revenge_vassal = IS_REVENGE_VASSAL(owner) + var/datum/antagonist/ghoul/revenge/revenge_ghoul = IS_REVENGE_GHOUL(owner) if(trigger_flags & TRIGGER_SECONDARY_ACTION) - for(var/datum/antagonist/ex_vassal/former_vassals as anything in revenge_vassal.ex_vassals) - var/information = "[former_vassals.owner.current]" - information += " - has [round(COOLDOWN_TIMELEFT(former_vassals, blood_timer) / 600)] minutes left of Blood" + for(var/datum/antagonist/ex_ghoul/former_ghouls as anything in revenge_ghoul.ex_ghouls) + var/information = "[former_ghouls.owner.current]" + information += " - has [round(COOLDOWN_TIMELEFT(former_ghouls, blood_timer) / 600)] minutes left of Blood" var/turf/open/floor/target_area = get_area(owner) if(target_area) information += " - currently at [target_area]." - if(former_vassals.owner.current.stat >= DEAD) + if(former_ghouls.owner.current.stat >= DEAD) information += " - DEAD." to_chat(owner, "[information]") @@ -70,12 +70,12 @@ if(target_ref) var/mob/living/target = target_ref.resolve() - var/datum/antagonist/ex_vassal/former_vassal = IS_EX_VASSAL(target) - if(!former_vassal || former_vassal.revenge_vassal) + var/datum/antagonist/ex_ghoul/former_ghoul = IS_EX_GHOUL(target) + if(!former_ghoul || former_ghoul.revenge_ghoul) target_ref = null return if(do_after(owner, 5 SECONDS, target)) - former_vassal.return_to_fold(revenge_vassal) + former_ghoul.return_to_fold(revenge_ghoul) target_ref = null DeactivatePower() return FALSE diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/structures/coffin.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/structures/coffin.dm index d9754da0364..54fa2d893b3 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/structures/coffin.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/structures/coffin.dm @@ -14,11 +14,11 @@ /datum/antagonist/bloodsucker/proc/claim_coffin(obj/structure/closet/crate/claimed, area/current_area) if(!can_claim_coffin(claimed, current_area)) return FALSE - // This is my Lair + // This is my Haven coffin = claimed - bloodsucker_lair_area = current_area - to_chat(owner, span_userdanger("You have claimed the [claimed] as your place of immortal rest! Your lair is now [bloodsucker_lair_area].")) - to_chat(owner, span_announce("Bloodsucker Tip: Find new lair recipes in the Structures tab of the Crafting Menu, including the Persuasion Rack for converting crew into Vassals.")) + bloodsucker_haven_area = current_area + to_chat(owner, span_userdanger("You have claimed the [claimed] as your place of immortal rest! Your haven is now [bloodsucker_haven_area].")) + to_chat(owner, span_announce("Bloodsucker Tip: Find new haven recipes in the Structures tab of the Crafting Menu, including the Persuasion Rack for converting crew into Ghouls.")) return TRUE /// From crate.dm @@ -180,7 +180,7 @@ var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(resident) if(bloodsuckerdatum && bloodsuckerdatum.coffin == src) bloodsuckerdatum.coffin = null - bloodsuckerdatum.bloodsucker_lair_area = null + bloodsuckerdatum.bloodsucker_haven_area = null for(var/obj/structure/bloodsucker/bloodsucker_structure in get_area(src)) if(bloodsucker_structure.owner == resident) bloodsucker_structure.unbolt() @@ -188,7 +188,7 @@ if(manual) to_chat(resident, span_cult_italic("You have unclaimed your coffin! This also unclaims all your other Bloodsucker structures!")) else - to_chat(resident, span_cult_italic("You sense that the link with your coffin and your sacred lair has been broken! You will need to seek another.")) + to_chat(resident, span_cult_italic("You sense that the link with your coffin and your sacred haven has been broken! You will need to seek another.")) // Remove resident. Because this object isnt removed from the game immediately (GC?) we need to give them a way to see they don't have a home anymore. resident = null @@ -233,7 +233,7 @@ /obj/structure/closet/crate/coffin/proc/prompt_coffin_claim(datum/antagonist/bloodsucker/dracula) var/area/current_area = get_area(src) - switch(tgui_alert(dracula.owner.current, "Do you wish to claim this as your coffin? [current_area] will be your lair.", "Claim Lair", list("Yes", "No"))) + switch(tgui_alert(dracula.owner.current, "Do you wish to claim this as your coffin? [current_area] will be your haven.", "Claim Haven", list("Yes", "No"))) if("Yes") return claim_coffin(dracula.owner.current, current_area) return FALSE diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/structures/crypt.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/structures/crypt.dm index f48da7d99ce..77638a0fdd9 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/structures/crypt.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/structures/crypt.dm @@ -8,7 +8,7 @@ */ var/ghost_desc var/vamp_desc - var/vassal_desc + var/ghoul_desc var/hunter_desc /obj/structure/bloodsucker/examine(mob/user) @@ -17,11 +17,11 @@ . += span_cult(ghost_desc) if(IS_BLOODSUCKER(user) && vamp_desc) if(!owner) - . += span_cult("It is unsecured. Click on [src] while in your lair to secure it in place to get its full potential.") + . += span_cult("It is unsecured. Click on [src] while in your haven to secure it in place to get its full potential.") return . += span_cult(vamp_desc) - if(IS_VASSAL(user) && vassal_desc != "") - . += span_cult(vassal_desc) + if(IS_GHOUL(user) && ghoul_desc != "") + . += span_cult(ghoul_desc) if(IS_MONSTERHUNTER(user) && hunter_desc != "") . += span_cult(hunter_desc) @@ -49,11 +49,11 @@ var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(user) /// Claiming the Rack instead of using it? if(istype(bloodsuckerdatum) && !owner) - if(!bloodsuckerdatum.bloodsucker_lair_area) - to_chat(user, span_danger("You don't have a lair. Claim a coffin to make that location your lair.")) + if(!bloodsuckerdatum.bloodsucker_haven_area) + to_chat(user, span_danger("You don't have a haven. Claim a coffin to make that location your haven.")) return FALSE - if(bloodsuckerdatum.bloodsucker_lair_area != get_area(src)) - to_chat(user, span_danger("You may only activate this structure in your lair: [bloodsuckerdatum.bloodsucker_lair_area].")) + if(bloodsuckerdatum.bloodsucker_haven_area != get_area(src)) + to_chat(user, span_danger("You may only activate this structure in your haven: [bloodsuckerdatum.bloodsucker_haven_area].")) return FALSE /// Radial menu for securing your Persuasion rack in place. @@ -103,24 +103,24 @@ /obj/item/restraints/legcuffs/beartrap/bloodsucker */ -/obj/structure/bloodsucker/vassalrack +/obj/structure/bloodsucker/ghoulrack name = "persuasion rack" desc = "If this wasn't meant for torture, then someone has some fairly horrifying hobbies." icon = 'modular_zubbers/icons/obj/structures/vamp_obj.dmi' - icon_state = "vassalrack" + icon_state = "ghoulrack" anchored = FALSE density = TRUE can_buckle = TRUE buckle_lying = 180 - ghost_desc = "This is a Vassal rack, which allows Bloodsuckers to thrall crewmembers into loyal minions." - vamp_desc = "This is the Vassal rack, which allows you to thrall crewmembers into loyal minions in your service.\n\ - Simply click and hold on a victim, and then drag their sprite on the vassal rack. Right-click on the vassal rack to unbuckle them.\n\ - To convert into a Vassal, repeatedly click on the persuasion rack. The time required scales with the tool in your off hand. This costs Blood to do.\n\ - Vassals can be turned into special ones by continuing to torture them once converted." - vassal_desc = "This is the vassal rack, which allows your master to thrall crewmembers into their minions.\n\ + ghost_desc = "This is a Ghoul rack, which allows Bloodsuckers to thrall crewmembers into loyal minions." + vamp_desc = "This is the Ghoul rack, which allows you to thrall crewmembers into loyal minions in your service.\n\ + Simply click and hold on a victim, and then drag their sprite on the ghoul rack. Right-click on the ghoul rack to unbuckle them.\n\ + To convert into a Ghoul, repeatedly click on the persuasion rack. The time required scales with the tool in your off hand. This costs Blood to do.\n\ + Ghouls can be turned into special ones by continuing to torture them once converted." + ghoul_desc = "This is the ghoul rack, which allows your master to thrall crewmembers into their minions.\n\ Aid your master in bringing their victims here and keeping them secure.\n\ - You can secure victims to the vassal rack by click dragging the victim onto the rack while it is secured." - hunter_desc = "This is the vassal rack, which monsters use to brainwash crewmembers into their loyal slaves.\n\ + You can secure victims to the ghoul rack by click dragging the victim onto the rack while it is secured." + hunter_desc = "This is the ghoul rack, which monsters use to brainwash crewmembers into their loyal slaves.\n\ They usually ensure that victims are handcuffed, to prevent them from running away.\n\ Their rituals take time, allowing us to disrupt it." @@ -131,30 +131,30 @@ /// Prevents popup spam. var/disloyalty_offered = FALSE -/obj/structure/bloodsucker/vassalrack/examine(mob/user) +/obj/structure/bloodsucker/ghoulrack/examine(mob/user) . = ..() var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(user) if(bloodsuckerdatum) - . += span_cult("You can support a total of [convert_integer_to_words(bloodsuckerdatum.max_vassals())] [bloodsuckerdatum.max_vassals() == 1 ? "vassal" : "vassals"], \ - with [convert_integer_to_words(bloodsuckerdatum.free_vassal_slots())] [bloodsuckerdatum.free_vassal_slots() == 1 ? "slot" : "slots"] remaining.") + . += span_cult("You can support a total of [convert_integer_to_words(bloodsuckerdatum.max_ghouls())] [bloodsuckerdatum.max_ghouls() == 1 ? "ghoul" : "ghouls"], \ + with [convert_integer_to_words(bloodsuckerdatum.free_ghoul_slots())] [bloodsuckerdatum.free_ghoul_slots() == 1 ? "slot" : "slots"] remaining.") -/obj/structure/bloodsucker/vassalrack/atom_deconstruct(disassembled = TRUE) +/obj/structure/bloodsucker/ghoulrack/atom_deconstruct(disassembled = TRUE) . = ..() new /obj/item/stack/sheet/iron(src.loc, 4) new /obj/item/stack/rods(loc, 4) qdel(src) -/obj/structure/bloodsucker/vassalrack/bolt() +/obj/structure/bloodsucker/ghoulrack/bolt() . = ..() density = FALSE anchored = TRUE -/obj/structure/bloodsucker/vassalrack/unbolt() +/obj/structure/bloodsucker/ghoulrack/unbolt() . = ..() density = TRUE anchored = FALSE -/obj/structure/bloodsucker/vassalrack/mouse_drop_receive(atom/movable/movable_atom, mob/user, params) +/obj/structure/bloodsucker/ghoulrack/mouse_drop_receive(atom/movable/movable_atom, mob/user, params) var/mob/living/living_target = movable_atom if(!anchored && IS_BLOODSUCKER(user)) user.balloon_alert(user, "not secured!") @@ -166,13 +166,13 @@ return // Don't buckle Silicon to it please. if(issilicon(living_target)) - to_chat(user, span_danger("You realize that this machine cannot be vassalized, therefore it is useless to buckle them.")) + to_chat(user, span_danger("You realize that this machine cannot be ghoulized, therefore it is useless to buckle them.")) return if(do_after(user, 5 SECONDS, living_target)) attach_victim(living_target, user) /// Attempt Release (Owner vs Non Owner) -/obj/structure/bloodsucker/vassalrack/attack_hand_secondary(mob/user, modifiers) +/obj/structure/bloodsucker/ghoulrack/attack_hand_secondary(mob/user, modifiers) . = ..() if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return @@ -188,9 +188,9 @@ user_unbuckle_mob(buckled_carbons, user) /** - * Attempts to buckle target into the vassalrack + * Attempts to buckle target into the ghoulrack */ -/obj/structure/bloodsucker/vassalrack/proc/attach_victim(mob/living/target, mob/living/user) +/obj/structure/bloodsucker/ghoulrack/proc/attach_victim(mob/living/target, mob/living/user) if(!buckle_mob(target)) return user.visible_message( @@ -208,8 +208,8 @@ disloyalty_offered = FALSE /// Attempt Unbuckle -/obj/structure/bloodsucker/vassalrack/user_unbuckle_mob(mob/living/buckled_mob, mob/user) - if(IS_BLOODSUCKER(user) || IS_VASSAL(user)) +/obj/structure/bloodsucker/ghoulrack/user_unbuckle_mob(mob/living/buckled_mob, mob/user) + if(IS_BLOODSUCKER(user) || IS_GHOUL(user)) return ..() if(buckled_mob == user) @@ -229,7 +229,7 @@ return ..() -/obj/structure/bloodsucker/vassalrack/unbuckle_mob(mob/living/buckled_mob, force = FALSE, can_fall = TRUE) +/obj/structure/bloodsucker/ghoulrack/unbuckle_mob(mob/living/buckled_mob, force = FALSE, can_fall = TRUE) . = ..() if(!.) return @@ -238,7 +238,7 @@ buckled_mob.Paralyze(2 SECONDS) update_appearance(UPDATE_ICON) -/obj/structure/bloodsucker/vassalrack/attack_hand(mob/user, list/modifiers) +/obj/structure/bloodsucker/ghoulrack/attack_hand(mob/user, list/modifiers) . = ..() if(!.) return FALSE @@ -253,21 +253,21 @@ user_unbuckle_mob(buckled_carbons, user) return if(!bloodsuckerdatum.my_clan) - to_chat(user, span_warning("You can't vassalize people until you enter a Clan (Through your Antagonist UI button)")) + to_chat(user, span_warning("You can't ghoulize people until you enter a Clan (Through your Antagonist UI button)")) user.balloon_alert(user, "join a clan first!") return - var/datum/antagonist/vassal/vassaldatum = IS_VASSAL(buckled_carbons) - // Are they our Vassal? - if(vassaldatum && (vassaldatum in bloodsuckerdatum.vassals)) - SEND_SIGNAL(bloodsuckerdatum, COMSIG_BLOODSUCKER_INTERACT_WITH_VASSAL, vassaldatum) + var/datum/antagonist/ghoul/ghouldatum = IS_GHOUL(buckled_carbons) + // Are they our Ghoul? + if(ghouldatum && (ghouldatum in bloodsuckerdatum.ghouls)) + SEND_SIGNAL(bloodsuckerdatum, COMSIG_BLOODSUCKER_INTERACT_WITH_GHOUL, ghouldatum) return - if(bloodsuckerdatum.free_vassal_slots() < 1) - to_chat(user, span_warning("You can't vassalize more people until you level up more! You are currently at [bloodsuckerdatum.free_vassal_slots()] active / [bloodsuckerdatum.max_vassals()] max vassals.")) - user.balloon_alert(user, "not enough vassal slots!") + if(bloodsuckerdatum.free_ghoul_slots() < 1) + to_chat(user, span_warning("You can't ghoulize more people until you level up more! You are currently at [bloodsuckerdatum.free_ghoul_slots()] active / [bloodsuckerdatum.max_ghouls()] max ghouls.")) + user.balloon_alert(user, "not enough ghoul slots!") return - // Not our Vassal, but Alive & We're a Bloodsucker, good to torture! + // Not our Ghoul, but Alive & We're a Bloodsucker, good to torture! torture_victim(user, buckled_carbons) /** @@ -275,20 +275,20 @@ * * * Tick Down Conversion from 3 to 0 * * Break mindshielding/antag (on approve) - * * Vassalize target + * * Ghoulize target */ -/obj/structure/bloodsucker/vassalrack/proc/torture_victim(mob/living/user, mob/living/target) +/obj/structure/bloodsucker/ghoulrack/proc/torture_victim(mob/living/user, mob/living/target) var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(user) - if(IS_VASSAL(target)) - var/datum/antagonist/vassal/vassaldatum = IS_VASSAL(target) - if(!vassaldatum.master.broke_masquerade) - balloon_alert(user, "someone else's vassal!") + if(IS_GHOUL(target)) + var/datum/antagonist/ghoul/ghouldatum = IS_GHOUL(target) + if(!ghouldatum.master.broke_masquerade) + balloon_alert(user, "someone else's ghoul!") return FALSE var/disloyalty_requires = RequireDisloyalty(user, target) - if(disloyalty_requires == VASSALIZATION_BANNED) + if(disloyalty_requires == GHOULIZATION_BANNED) if(target.ckey) - balloon_alert(user, "can't be vassalized!") + balloon_alert(user, "can't be ghoulized!") else balloon_alert(user, "target has no mind!") return FALSE @@ -304,7 +304,7 @@ target.Paralyze(1 SECONDS) convert_progress-- - // We're done? Let's see if they can be Vassal. + // We're done? Let's see if they can be Ghoul. if(convert_progress) balloon_alert(user, "needs more persuasion...") return @@ -328,13 +328,13 @@ if(!do_after(user, 5 SECONDS, target)) balloon_alert(user, "interrupted!") return - // Convert to Vassal! + // Convert to Ghoul! bloodsuckerdatum.AdjustBloodVolume(-TORTURE_CONVERSION_COST) - if(bloodsuckerdatum.make_vassal(target)) + if(bloodsuckerdatum.make_ghoul(target)) remove_loyalties(target) - SEND_SIGNAL(bloodsuckerdatum, COMSIG_BLOODSUCKER_MADE_VASSAL, user, target) + SEND_SIGNAL(bloodsuckerdatum, COMSIG_BLOODSUCKER_MADE_GHOUL, user, target) -/obj/structure/bloodsucker/vassalrack/proc/do_torture(mob/living/user, mob/living/carbon/target, mult = 1) +/obj/structure/bloodsucker/ghoulrack/proc/do_torture(mob/living/user, mob/living/carbon/target, mult = 1) // Fifteen seconds if you aren't using anything. Shorter with weapons and such. var/torture_time = 15 var/torture_dmg_brute = 2 @@ -378,7 +378,7 @@ return TRUE /// Offer them the oppertunity to join now. -/obj/structure/bloodsucker/vassalrack/proc/do_disloyalty(mob/living/user, mob/living/target) +/obj/structure/bloodsucker/ghoulrack/proc/do_disloyalty(mob/living/user, mob/living/target) if(disloyalty_offered) return FALSE // Can't willingly join if you're banned from it. It'll just ghost you anyways. @@ -399,24 +399,24 @@ if("Accept") disloyalty_confirm = TRUE else - target.balloon_alert_to_viewers("stares defiantly", "refused vassalization!") + target.balloon_alert_to_viewers("stares defiantly", "refused ghoulization!") disloyalty_offered = FALSE return TRUE -/obj/structure/bloodsucker/vassalrack/proc/RequireDisloyalty(mob/living/user, mob/living/target) +/obj/structure/bloodsucker/ghoulrack/proc/RequireDisloyalty(mob/living/user, mob/living/target) #ifdef BLOODSUCKER_TESTING if(!target || !target.mind) #else if(!target?.mind || !target?.client) #endif - return VASSALIZATION_BANNED + return GHOULIZATION_BANNED if(HAS_TRAIT(target, TRAIT_MINDSHIELD)) - return VASSALIZATION_DISLOYAL + return GHOULIZATION_DISLOYAL var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(user) return bloodsuckerdatum.AmValidAntag(target) -/obj/structure/bloodsucker/vassalrack/proc/remove_loyalties(mob/living/target) +/obj/structure/bloodsucker/ghoulrack/proc/remove_loyalties(mob/living/target) // Find Mind Implant & Destroy for(var/obj/item/implant/all_implants as anything in target.implants) if(all_implants.type == /obj/item/implant/mindshield) @@ -436,13 +436,13 @@ density = FALSE can_buckle = TRUE anchored = FALSE - ghost_desc = "This is a magical candle which drains at the sanity of non Bloodsuckers and Vassals.\n\ - Vassals can turn the candle on manually, while Bloodsuckers can do it from a distance." + ghost_desc = "This is a magical candle which drains at the sanity of non Bloodsuckers and Ghouls.\n\ + Ghouls can turn the candle on manually, while Bloodsuckers can do it from a distance." vamp_desc = "This is a magical candle which drains at the sanity of mortals who are not under your command while it is active.\n\ You can right-click on it from any range to turn it on remotely, or simply be next to it and click on it to turn it on and off normally." - vassal_desc = "This is a magical candle which drains at the sanity of the fools who havent yet accepted your master, as long as it is active.\n\ + ghoul_desc = "This is a magical candle which drains at the sanity of the fools who havent yet accepted your master, as long as it is active.\n\ You can turn it on and off by clicking on it while you are next to it.\n\ - If your Master is part of the Ventrue Clan, they utilize this to upgrade their Favorite Vassal." + If your Master is part of the Ventrue Clan, they utilize this to upgrade their Favorite Ghoul." hunter_desc = "This is a blue Candelabrum, which causes insanity to those near it while active." var/lit = FALSE @@ -470,7 +470,7 @@ . = ..() if(!.) return - if(anchored && (IS_VASSAL(user) || IS_BLOODSUCKER(user))) + if(anchored && (IS_GHOUL(user) || IS_BLOODSUCKER(user))) toggle() return ..() @@ -490,13 +490,13 @@ if(!lit) return for(var/mob/living/carbon/nearly_people in viewers(7, src)) - /// We dont want Bloodsuckers or Vassals affected by this - if(IS_VASSAL(nearly_people) || IS_BLOODSUCKER(nearly_people)) + /// We dont want Bloodsuckers or Ghouls affected by this + if(IS_GHOUL(nearly_people) || IS_BLOODSUCKER(nearly_people)) continue nearly_people.adjust_hallucinations(5 SECONDS) nearly_people.add_mood_event("vampcandle", /datum/mood_event/vampcandle) -/// Blood Throne - Allows Bloodsuckers to remotely speak with their Vassals. - Code (Mostly) stolen from comfy chairs (armrests) and chairs (layers) +/// Blood Throne - Allows Bloodsuckers to remotely speak with their Ghouls. - Code (Mostly) stolen from comfy chairs (armrests) and chairs (layers) /obj/structure/bloodsucker/bloodthrone name = "wicked throne" desc = "Twisted metal shards jut from the arm rests. Very uncomfortable looking. It would take a masochistic sort to sit on this jagged piece of furniture." @@ -506,9 +506,9 @@ anchored = FALSE density = TRUE can_buckle = TRUE - ghost_desc = "This is a Bloodsucker throne, any Bloodsucker sitting on it can remotely speak to their Vassals by attempting to speak aloud." - vamp_desc = "This is a blood throne, sitting on it will allow you to telepathically speak to your vassals by simply speaking." - vassal_desc = "This is a blood throne, it allows your Master to telepathically speak to you and others like you." + ghost_desc = "This is a Bloodsucker throne, any Bloodsucker sitting on it can remotely speak to their Ghouls by attempting to speak aloud." + vamp_desc = "This is a blood throne, sitting on it will allow you to telepathically speak to your ghouls by simply speaking." + ghoul_desc = "This is a blood throne, it allows your Master to telepathically speak to you and others like you." hunter_desc = "This is a chair that hurts those that try to buckle themselves onto it, though the Undead have no problem latching on.\n\ While buckled, Monsters can use this to telepathically communicate with eachother." var/mutable_appearance/armrest @@ -599,7 +599,7 @@ var/rendered = span_cult_large("[user.real_name]: [capitalize(message)]") user.log_talk(message, LOG_SAY, tag = ROLE_BLOODSUCKER) var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(user) - for(var/datum/antagonist/vassal/receiver as anything in bloodsuckerdatum.vassals) + for(var/datum/antagonist/ghoul/receiver as anything in bloodsuckerdatum.ghouls) if(!receiver.owner.current) continue var/mob/receiver_mob = receiver.owner.current diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/structures/objects.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/structures/objects.dm index c40d58ed7f4..d486bb014f8 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/structures/objects.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/structures/objects.dm @@ -47,14 +47,14 @@ return FALSE return TRUE -///Bloodbag of Bloodsucker blood (used by Vassals only) +///Bloodbag of Bloodsucker blood (used by Ghouls only) /obj/item/reagent_containers/blood/o_minus/bloodsucker name = "blood pack" unique_blood = /datum/reagent/blood/bloodsucker /obj/item/reagent_containers/blood/o_minus/bloodsucker/examine(mob/user) . = ..() - if(user.mind.has_antag_datum(/datum/antagonist/ex_vassal) || user.mind.has_antag_datum(/datum/antagonist/vassal/revenge)) + if(user.mind.has_antag_datum(/datum/antagonist/ex_ghoul) || user.mind.has_antag_datum(/datum/antagonist/ghoul/revenge)) . += span_notice("Seems to be just about the same color as your Master's...") ////////////////////// @@ -248,14 +248,14 @@ * A book that can only be used by Curators. * When used on a player, after a short timer, will reveal if the player is a Bloodsucker, including their real name and Clan. * This book should not work on Bloodsuckers using the Masquerade ability. - * If it reveals a Bloodsucker, the Curator will then be able to tell they are a Bloodsucker on examine (Like a Vassal). + * If it reveals a Bloodsucker, the Curator will then be able to tell they are a Bloodsucker on examine (Like a Ghoul). * Reading it normally will allow Curators to read what each Clan does, with some extra flavor text ones. * * Regular Bloodsuckers won't have any negative effects from the book, while everyone else will get burns/eye damage. */ /obj/item/book/kindred - name = "\improper Archive of the Kindred" - starting_title = "the Archive of the Kindred" + name = "\improper Book of Nod" + starting_title = "the Book of Nod" desc = "Cryptic documents explaining hidden truths behind Undead beings. It is said only Curators can decipher what they really mean." icon = 'modular_zubbers/icons/obj/structures/vamp_obj.dmi' lefthand_file = 'modular_zubbers/icons/mob/inhands/weapons/bloodsucker_lefthand.dmi' diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_datum.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_datum.dm index d2f4b2a21d5..5a0f7b93752 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_datum.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_datum.dm @@ -1,47 +1,47 @@ -#define VASSAL_SCAN_MIN_DISTANCE 5 -#define VASSAL_SCAN_MAX_DISTANCE 500 +#define GHOUL_SCAN_MIN_DISTANCE 5 +#define GHOUL_SCAN_MAX_DISTANCE 500 /// 2s update time. -#define VASSAL_SCAN_PING_TIME 20 +#define GHOUL_SCAN_PING_TIME 20 -/datum/antagonist/vassal - name = "\improper Vassal" - roundend_category = "vassals" +/datum/antagonist/ghoul + name = "\improper Ghoul" + roundend_category = "ghouls" antagpanel_category = "Bloodsucker" job_rank = ROLE_VASSAL - antag_hud_name = "vassal" + antag_hud_name = "ghoul" show_in_roundend = FALSE hud_icon = 'modular_zubbers/icons/mob/huds/bloodsucker.dmi' - ui_name = "AntagInfoVassal" - antag_panel_description = "You are a Vassal, a mortal servant of a Bloodsucker." + ui_name = "AntagInfoGhoul" + antag_panel_description = "You are a Ghoul, a mortal servant of a Bloodsucker." /// The Master Bloodsucker's antag datum. var/datum/antagonist/bloodsucker/master /// List of all Purchased Powers, to be cleaned up on antag removal. var/list/datum/action/powers = list() - ///Whether this vassal is already a special type of Vassal. + ///Whether this ghoul is already a special type of Ghoul. var/special_type = FALSE - ///Description of what this Vassal does. - /// It's shown to the bloodsucker in the radial for setting vassal type - var/vassal_description + ///Description of what this Ghoul does. + /// It's shown to the bloodsucker in the radial for setting ghoul type + var/ghoul_description /// inherent traits that are removed and addded on antag datum loss and gain var/list/traits = list() -/datum/antagonist/vassal/antag_panel_data() +/datum/antagonist/ghoul/antag_panel_data() return "Master : [master?.owner.name ? master.owner.name : "Gone"]" -// todo make this into a shared proc that bloodsuckers and vassals share -/datum/antagonist/vassal/ui_static_data(mob/user) +// todo make this into a shared proc that bloodsuckers and ghouls share +/datum/antagonist/ghoul/ui_static_data(mob/user) return ability_ui_data(powers) + ..() -/datum/antagonist/vassal/apply_innate_effects(mob/living/mob_override) +/datum/antagonist/ghoul/apply_innate_effects(mob/living/mob_override) . = ..() var/mob/living/current_mob = mob_override || owner.current - current_mob.apply_status_effect(/datum/status_effect/agent_pinpointer/vassal_edition) + current_mob.apply_status_effect(/datum/status_effect/agent_pinpointer/ghoul_edition) add_team_hud(current_mob) if(length(traits)) - current_mob.add_traits(traits, VASSAL_TRAIT) + current_mob.add_traits(traits, GHOUL_TRAIT) -/datum/antagonist/vassal/add_team_hud(mob/target) +/datum/antagonist/ghoul/add_team_hud(mob/target) QDEL_NULL(team_hud_ref) team_hud_ref = WEAKREF(target.add_alt_appearance( @@ -54,8 +54,8 @@ var/list/mob/living/mob_list = list() mob_list += master.owner.current - for(var/datum/antagonist/vassal/vassal as anything in master.vassals) - mob_list += vassal.owner.current + for(var/datum/antagonist/ghoul/ghoul as anything in master.ghouls) + mob_list += ghoul.owner.current for (var/datum/atom_hud/alternate_appearance/basic/has_antagonist/antag_hud as anything in GLOB.has_antagonist_huds) if(!(antag_hud.target in mob_list)) @@ -63,85 +63,85 @@ antag_hud.show_to(target) hud.show_to(antag_hud.target) -/datum/antagonist/vassal/remove_innate_effects(mob/living/mob_override) +/datum/antagonist/ghoul/remove_innate_effects(mob/living/mob_override) . = ..() var/mob/living/current_mob = mob_override || owner.current - current_mob.remove_status_effect(/datum/status_effect/agent_pinpointer/vassal_edition) + current_mob.remove_status_effect(/datum/status_effect/agent_pinpointer/ghoul_edition) if(length(traits)) - current_mob.remove_traits(traits, VASSAL_TRAIT) + current_mob.remove_traits(traits, GHOUL_TRAIT) -/datum/antagonist/vassal/pre_mindshield(mob/implanter, mob/living/mob_override) +/datum/antagonist/ghoul/pre_mindshield(mob/implanter, mob/living/mob_override) return COMPONENT_MINDSHIELD_PASSED /// This is called when the antagonist is successfully mindshielded. -/datum/antagonist/vassal/on_mindshield(mob/implanter, mob/living/mob_override) - owner.remove_antag_datum(/datum/antagonist/vassal) - owner.current.log_message("has been deconverted from Vassalization by [implanter]!", LOG_ATTACK, color="#960000") +/datum/antagonist/ghoul/on_mindshield(mob/implanter, mob/living/mob_override) + owner.remove_antag_datum(/datum/antagonist/ghoul) + owner.current.log_message("has been deconverted from Ghoulization by [implanter]!", LOG_ATTACK, color="#960000") return COMPONENT_MINDSHIELD_DECONVERTED -/datum/antagonist/vassal/proc/on_examined(datum/source, mob/examiner, examine_text) +/datum/antagonist/ghoul/proc/on_examined(datum/source, mob/examiner, examine_text) SIGNAL_HANDLER - var/vassal_examine = return_vassal_examine(examiner) - if(vassal_examine) - examine_text += vassal_examine + var/ghoul_examine = return_ghoul_examine(examiner) + if(ghoul_examine) + examine_text += ghoul_examine -/datum/antagonist/vassal/on_gain() +/datum/antagonist/ghoul/on_gain() RegisterSignal(owner.current, COMSIG_ATOM_EXAMINE, PROC_REF(on_examined)) RegisterSignal(SSsunlight, COMSIG_SOL_WARNING_GIVEN, PROC_REF(give_warning)) /// Enslave them to their Master if(!master || !istype(master, master)) return if(special_type) - if(!master.special_vassals[special_type]) - master.special_vassals[special_type] = list() - master.special_vassals[special_type] |= src - master.vassals += src + if(!master.special_ghouls[special_type]) + master.special_ghouls[special_type] = list() + master.special_ghouls[special_type] |= src + master.ghouls += src owner.enslave_mind_to_creator(master.owner.current) - owner.current.log_message("has been vassalized by [master.owner.current]!", LOG_ATTACK, color="#960000") + owner.current.log_message("has been ghoulized by [master.owner.current]!", LOG_ATTACK, color="#960000") /// Give Recuperate Power BuyPower(/datum/action/cooldown/bloodsucker/recuperate) /// Give Objectives - var/datum/objective/bloodsucker/vassal/vassal_objective = new - vassal_objective.owner = owner - objectives += vassal_objective + var/datum/objective/bloodsucker/ghoul/ghoul_objective = new + ghoul_objective.owner = owner + objectives += ghoul_objective /// Give Vampire Language & Hud owner.current.grant_all_languages(FALSE, FALSE, TRUE) owner.current.grant_language(/datum/language/vampiric, ALL, LANGUAGE_MIND) return ..() -/datum/antagonist/vassal/on_removal() +/datum/antagonist/ghoul/on_removal() UnregisterSignal(owner.current, COMSIG_ATOM_EXAMINE) UnregisterSignal(SSsunlight, COMSIG_SOL_WARNING_GIVEN) //Free them from their Master if(master && master.owner) - if(special_type && master.special_vassals[special_type]) - master.special_vassals.Remove(special_type) - master.vassals -= src + if(special_type && master.special_ghouls[special_type]) + master.special_ghouls.Remove(special_type) + master.ghouls -= src owner.enslaved_to = null //Remove ALL Traits, as long as its from BLOODSUCKER_TRAIT's source. for(var/all_status_traits in owner.current._status_traits) - REMOVE_TRAIT(owner.current, all_status_traits, VASSAL_TRAIT) + REMOVE_TRAIT(owner.current, all_status_traits, GHOUL_TRAIT) //Remove Recuperate Power remove_powers(powers) //Remove Language & Hud owner.current.remove_language(/datum/language/vampiric, ALL, LANGUAGE_MIND) return ..() -/datum/antagonist/vassal/proc/remove_powers(list/removing_powers) +/datum/antagonist/ghoul/proc/remove_powers(list/removing_powers) for(var/datum/action/cooldown/bloodsucker/power as anything in removing_powers) removing_powers -= power if(!(power in owner.current.actions)) continue power.Remove(owner.current) -/datum/antagonist/vassal/on_body_transfer(mob/living/old_body, mob/living/new_body) +/datum/antagonist/ghoul/on_body_transfer(mob/living/old_body, mob/living/new_body) . = ..() for(var/datum/action/cooldown/bloodsucker/all_powers as anything in powers) all_powers.Remove(old_body) all_powers.Grant(new_body) -/datum/antagonist/vassal/greet() +/datum/antagonist/ghoul/greet() . = ..() if(silent) return @@ -155,7 +155,7 @@ to_chat(master.owner, span_userdanger("[owner.current] has become addicted to your immortal blood. [capitalize(owner.current.p_they(TRUE))] [owner.current.p_are()] now your mortal servant!")) master.owner.current.playsound_local(null, 'sound/magic/mutate.ogg', 100, FALSE, pressure_affected = FALSE) -/datum/antagonist/vassal/farewell() +/datum/antagonist/ghoul/farewell() if(silent) return @@ -166,9 +166,9 @@ owner.current.playsound_local(null, 'sound/magic/mutate.ogg', 100, FALSE, pressure_affected = FALSE) /// Message told to your (former) Master. if(master && master.owner) - to_chat(master.owner, span_cult_bold("You feel the bond with your vassal [owner.current] has somehow been broken!")) + to_chat(master.owner, span_cult_bold("You feel the bond with your ghoul [owner.current] has somehow been broken!")) -/datum/antagonist/vassal/admin_add(datum/mind/new_owner, mob/admin) +/datum/antagonist/ghoul/admin_add(datum/mind/new_owner, mob/admin) var/list/datum/mind/possible_vampires = list() for(var/datum/antagonist/bloodsucker/bloodsuckerdatums in GLOB.antagonists) var/datum/mind/vamp = bloodsuckerdatums.owner @@ -180,13 +180,13 @@ continue possible_vampires += vamp if(!length(possible_vampires)) - message_admins("[key_name_admin(admin)] tried vassalizing [key_name_admin(new_owner)], but there were no bloodsuckers!") + message_admins("[key_name_admin(admin)] tried ghoulizing [key_name_admin(new_owner)], but there were no bloodsuckers!") return - var/datum/mind/choice = tgui_input_list(admin, "Which bloodsucker should this vassal belong to?", "Bloodsucker", possible_vampires) + var/datum/mind/choice = tgui_input_list(admin, "Which bloodsucker should this ghoul belong to?", "Bloodsucker", possible_vampires) if(!choice) return - log_admin("[key_name_admin(admin)] turned [key_name_admin(new_owner)] into a vassal of [key_name_admin(choice)]!") + log_admin("[key_name_admin(admin)] turned [key_name_admin(new_owner)] into a ghoul of [key_name_admin(choice)]!") var/datum/antagonist/bloodsucker/vampire = IS_BLOODSUCKER(choice.current) master = vampire new_owner.add_antag_datum(src) - to_chat(choice, span_notice("Through divine intervention, you've gained a new vassal!")) + to_chat(choice, span_notice("Through divine intervention, you've gained a new ghoul!")) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_pinpointer.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_pinpointer.dm index 791b9a8f9f5..8d08a8c4492 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_pinpointer.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_pinpointer.dm @@ -1,31 +1,31 @@ /** - * # Vassal Pinpointer + * # Ghoul Pinpointer * * Pinpointer that points to their Master's location at all times. * Unlike the Monster hunter one, this one is permanently active, and has no power needed to activate it. */ -/atom/movable/screen/alert/status_effect/agent_pinpointer/vassal_edition +/atom/movable/screen/alert/status_effect/agent_pinpointer/ghoul_edition name = "Blood Bond" desc = "You always know where your master is." -/datum/status_effect/agent_pinpointer/vassal_edition +/datum/status_effect/agent_pinpointer/ghoul_edition id = "agent_pinpointer" - alert_type = /atom/movable/screen/alert/status_effect/agent_pinpointer/vassal_edition - minimum_range = VASSAL_SCAN_MIN_DISTANCE - tick_interval = VASSAL_SCAN_PING_TIME + alert_type = /atom/movable/screen/alert/status_effect/agent_pinpointer/ghoul_edition + minimum_range = GHOUL_SCAN_MIN_DISTANCE + tick_interval = GHOUL_SCAN_PING_TIME duration = -1 range_fuzz_factor = 0 -/datum/status_effect/agent_pinpointer/vassal_edition/on_creation(mob/living/new_owner, ...) +/datum/status_effect/agent_pinpointer/ghoul_edition/on_creation(mob/living/new_owner, ...) ..() - var/datum/antagonist/vassal/antag_datum = new_owner.mind.has_antag_datum(/datum/antagonist/vassal) + var/datum/antagonist/ghoul/antag_datum = new_owner.mind.has_antag_datum(/datum/antagonist/ghoul) scan_target = antag_datum?.master?.owner?.current -/datum/status_effect/agent_pinpointer/vassal_edition/scan_for_target() +/datum/status_effect/agent_pinpointer/ghoul_edition/scan_for_target() return -/datum/status_effect/agent_pinpointer/vassal_edition/Destroy() +/datum/status_effect/agent_pinpointer/ghoul_edition/Destroy() if(scan_target) to_chat(owner, span_notice("You've lost your master's trail.")) return ..() diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_procs.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_procs.dm index 4da27200bd4..ed53cf473b4 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_procs.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_procs.dm @@ -1,46 +1,46 @@ -/datum/antagonist/vassal/proc/give_warning(atom/source, danger_level, vampire_warning_message, vassal_warning_message) +/datum/antagonist/ghoul/proc/give_warning(atom/source, danger_level, vampire_warning_message, ghoul_warning_message) SIGNAL_HANDLER - if(vassal_warning_message) - to_chat(owner, vassal_warning_message) + if(ghoul_warning_message) + to_chat(owner, ghoul_warning_message) /** - * Returns a Vassals's examine strings. + * Returns a Ghouls's examine strings. * Args: * viewer - The person examining. */ -/datum/antagonist/vassal/proc/return_vassal_examine(mob/living/viewer) +/datum/antagonist/ghoul/proc/return_ghoul_examine(mob/living/viewer) if((!viewer.mind && !isobserver(viewer)) || !iscarbon(owner.current)) return FALSE var/mob/living/carbon/carbon_current = owner.current - // Target must be a Vassal + // Target must be a Ghoul // Default String var/returnString = "\[" var/returnIcon = "" - // Vassals and Bloodsuckers recognize eachother, while Monster Hunters can see Vassals. - if(!IS_BLOODSUCKER(viewer) && !IS_VASSAL(viewer) && !IS_MONSTERHUNTER(viewer) && !isobserver(viewer)) + // Ghouls and Bloodsuckers recognize eachother, while Monster Hunters can see Ghouls. + if(!IS_BLOODSUCKER(viewer) && !IS_GHOUL(viewer) && !IS_MONSTERHUNTER(viewer) && !isobserver(viewer)) return FALSE - // Am I Viewer's Vassal? + // Am I Viewer's Ghoul? if(master.owner == viewer.mind) returnString += "This [carbon_current.dna.species.name] bears YOUR mark!" - returnIcon = "[icon2html('modular_zubbers/icons/misc/language.dmi', world, "vassal")]" - // Am I someone ELSE'S Vassal? + returnIcon = "[icon2html('modular_zubbers/icons/misc/language.dmi', world, "ghoul")]" + // Am I someone ELSE'S Ghoul? else if(IS_BLOODSUCKER(viewer) || IS_MONSTERHUNTER(viewer) || isobserver(viewer)) returnString += "This [carbon_current.dna.species.name] bears the mark of [master.return_full_name()][master.broke_masquerade ? " who has broken the Masquerade" : ""]" - returnIcon = "[icon2html('modular_zubbers/icons/misc/language.dmi', world, "vassal_grey")]" + returnIcon = "[icon2html('modular_zubbers/icons/misc/language.dmi', world, "ghoul_grey")]" // Are you serving the same master as I am? - else if(viewer.mind.has_antag_datum(/datum/antagonist/vassal) in master.vassals) + else if(viewer.mind.has_antag_datum(/datum/antagonist/ghoul) in master.ghouls) returnString += "[p_they(TRUE)] bears the mark of your Master" - returnIcon = "[icon2html('modular_zubbers/icons/misc/language.dmi', world, "vassal")]" + returnIcon = "[icon2html('modular_zubbers/icons/misc/language.dmi', world, "ghoul")]" // You serve a different Master than I do. else returnString += "[p_they(TRUE)] bears the mark of another Bloodsucker" - returnIcon = "[icon2html('modular_zubbers/icons/misc/language.dmi', world, "vassal_grey")]" + returnIcon = "[icon2html('modular_zubbers/icons/misc/language.dmi', world, "ghoul_grey")]" returnString += "\]" // \n" Don't need spacers. Using . += "" in examine.dm does this on its own. return returnIcon + returnString /// Used when your Master teaches you a new Power. -/datum/antagonist/vassal/proc/BuyPower(datum/action/cooldown/power, list_to_add_to = powers) +/datum/antagonist/ghoul/proc/BuyPower(datum/action/cooldown/power, list_to_add_to = powers) for(var/datum/action/current_powers as anything in list_to_add_to) if(current_powers.type == power.type) return FALSE @@ -50,28 +50,28 @@ log_uplink("[key_name(owner.current)] purchased [power].") return TRUE -/datum/antagonist/vassal/proc/LevelUpPowers() +/datum/antagonist/ghoul/proc/LevelUpPowers() for(var/datum/action/cooldown/bloodsucker/power in powers) power.level_current++ -/// Called when we are made into the Favorite Vassal -/datum/antagonist/vassal/proc/make_special(datum/antagonist/vassal/vassal_type) +/// Called when we are made into the Favorite Ghoul +/datum/antagonist/ghoul/proc/make_special(datum/antagonist/ghoul/ghoul_type) //store what we need - var/datum/mind/vassal_owner = owner + var/datum/mind/ghoul_owner = owner var/datum/antagonist/bloodsucker/bloodsuckerdatum = master //remove our antag datum silent = TRUE - vassal_owner.remove_antag_datum(/datum/antagonist/vassal) + ghoul_owner.remove_antag_datum(/datum/antagonist/ghoul) //give our new one - var/datum/antagonist/vassal/vassaldatum = new vassal_type(vassal_owner) - vassaldatum.master = bloodsuckerdatum - vassaldatum.silent = TRUE - vassal_owner.add_antag_datum(vassaldatum) - vassaldatum.silent = FALSE + var/datum/antagonist/ghoul/ghouldatum = new ghoul_type(ghoul_owner) + ghouldatum.master = bloodsuckerdatum + ghouldatum.silent = TRUE + ghoul_owner.add_antag_datum(ghouldatum) + ghouldatum.silent = FALSE //send alerts of completion - to_chat(master, span_danger("You have turned [vassal_owner.current] into your [vassaldatum.name]! They will no longer be deconverted upon Mindshielding!")) - to_chat(vassal_owner, span_notice("As Blood drips over your body, you feel closer to your Master... You are now the [vassaldatum.name]!")) - vassal_owner.current.playsound_local(null, 'sound/magic/mutate.ogg', 75, FALSE, pressure_affected = FALSE) + to_chat(master, span_danger("You have turned [ghoul_owner.current] into your [ghouldatum.name]! They will no longer be deconverted upon Mindshielding!")) + to_chat(ghoul_owner, span_notice("As Blood drips over your body, you feel closer to your Master... You are now the [ghouldatum.name]!")) + ghoul_owner.current.playsound_local(null, 'sound/magic/mutate.ogg', 75, FALSE, pressure_affected = FALSE) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_types/ex_vassal.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_types/ex_vassal.dm index 277cc1440fb..ac0c125ba6e 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_types/ex_vassal.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_types/ex_vassal.dm @@ -1,42 +1,42 @@ #define BLOOD_TIMER_REQUIREMENT (10 MINUTES) #define BLOOD_TIMER_HALWAY (BLOOD_TIMER_REQUIREMENT / 2) -/datum/antagonist/ex_vassal - name = "\improper Ex-Vassal" - roundend_category = "vassals" +/datum/antagonist/ex_ghoul + name = "\improper Ex-Ghoul" + roundend_category = "ghouls" antagpanel_category = "Bloodsucker" job_rank = ROLE_VASSAL - antag_hud_name = "vassal_grey" + antag_hud_name = "ghoul_grey" show_in_roundend = FALSE show_in_antagpanel = FALSE silent = TRUE ui_name = FALSE hud_icon = 'modular_zubbers/icons/mob/huds/bloodsucker.dmi' - ///The revenge vassal that brought us into the fold. - var/datum/antagonist/vassal/revenge/revenge_vassal + ///The revenge ghoul that brought us into the fold. + var/datum/antagonist/ghoul/revenge/revenge_ghoul ///Timer we have to live COOLDOWN_DECLARE(blood_timer) -/datum/antagonist/ex_vassal/on_gain() +/datum/antagonist/ex_ghoul/on_gain() . = ..() RegisterSignal(owner.current, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) -/datum/antagonist/ex_vassal/on_removal() - if(revenge_vassal) - revenge_vassal.ex_vassals -= src - revenge_vassal = null +/datum/antagonist/ex_ghoul/on_removal() + if(revenge_ghoul) + revenge_ghoul.ex_ghouls -= src + revenge_ghoul = null blood_timer = null return ..() -/datum/antagonist/ex_vassal/proc/on_examine(datum/source, mob/examiner, examine_text) +/datum/antagonist/ex_ghoul/proc/on_examine(datum/source, mob/examiner, examine_text) SIGNAL_HANDLER - var/datum/antagonist/vassal/revenge/vassaldatum = IS_REVENGE_VASSAL(examiner) - if(vassaldatum && !revenge_vassal) - examine_text += span_notice("[owner.current] is an ex-vassal!") + var/datum/antagonist/ghoul/revenge/ghouldatum = IS_REVENGE_GHOUL(examiner) + if(ghouldatum && !revenge_ghoul) + examine_text += span_notice("[owner.current] is an ex-ghoul!") -/datum/antagonist/ex_vassal/add_team_hud(mob/target) +/datum/antagonist/ex_ghoul/add_team_hud(mob/target) QDEL_NULL(team_hud_ref) team_hud_ref = WEAKREF(target.add_alt_appearance( @@ -48,9 +48,9 @@ var/datum/atom_hud/alternate_appearance/basic/has_antagonist/hud = team_hud_ref.resolve() var/list/mob/living/mob_list = list() - mob_list += revenge_vassal.owner.current - for(var/datum/antagonist/ex_vassal/former_vassals as anything in revenge_vassal.ex_vassals) - mob_list += former_vassals.owner.current + mob_list += revenge_ghoul.owner.current + for(var/datum/antagonist/ex_ghoul/former_ghouls as anything in revenge_ghoul.ex_ghouls) + mob_list += former_ghouls.owner.current for (var/datum/atom_hud/alternate_appearance/basic/has_antagonist/antag_hud as anything in GLOB.has_antagonist_huds) if(!(antag_hud.target in mob_list)) @@ -61,17 +61,17 @@ /** * Fold return * - * Called when a Revenge bloodsucker gets a vassal back into the fold. + * Called when a Revenge bloodsucker gets a ghoul back into the fold. */ -/datum/antagonist/ex_vassal/proc/return_to_fold(datum/antagonist/vassal/revenge/mike_ehrmantraut) - revenge_vassal = mike_ehrmantraut - mike_ehrmantraut.ex_vassals += src +/datum/antagonist/ex_ghoul/proc/return_to_fold(datum/antagonist/ghoul/revenge/mike_ehrmantraut) + revenge_ghoul = mike_ehrmantraut + mike_ehrmantraut.ex_ghouls += src COOLDOWN_START(src, blood_timer, BLOOD_TIMER_REQUIREMENT) add_team_hud(owner.current) RegisterSignal(src, COMSIG_LIVING_LIFE, PROC_REF(on_life)) -/datum/antagonist/ex_vassal/proc/on_life(datum/source, seconds_per_tick, times_fired) +/datum/antagonist/ex_ghoul/proc/on_life(datum/source, seconds_per_tick, times_fired) SIGNAL_HANDLER if(COOLDOWN_TIMELEFT(src, blood_timer) <= BLOOD_TIMER_HALWAY + 2 && COOLDOWN_TIMELEFT(src, blood_timer) >= BLOOD_TIMER_HALWAY - 2) //just about halfway @@ -79,24 +79,24 @@ if(!COOLDOWN_FINISHED(src, blood_timer)) return to_chat(owner.current, span_cult_bold("You are out of blood!")) - to_chat(revenge_vassal.owner.current, span_cult_bold("[owner.current] has ran out of blood and is no longer in the fold!")) - owner.remove_antag_datum(/datum/antagonist/ex_vassal) + to_chat(revenge_ghoul.owner.current, span_cult_bold("[owner.current] has ran out of blood and is no longer in the fold!")) + owner.remove_antag_datum(/datum/antagonist/ex_ghoul) /** * Bloodsucker Blood * - * Artificially made, this must be fed to ex-vassals to keep them on their high. + * Artificially made, this must be fed to ex-ghouls to keep them on their high. */ /datum/reagent/blood/bloodsucker name = "Blood two" /datum/reagent/blood/bloodsucker/expose_mob(mob/living/exposed_mob, methods, reac_volume, show_message, touch_protection) - var/datum/antagonist/ex_vassal/former_vassal = exposed_mob.mind.has_antag_datum(/datum/antagonist/ex_vassal) - if(former_vassal) + var/datum/antagonist/ex_ghoul/former_ghoul = exposed_mob.mind.has_antag_datum(/datum/antagonist/ex_ghoul) + if(former_ghoul) to_chat(exposed_mob, span_cult("You feel the blood restore you... You feel safe.")) - COOLDOWN_RESET(former_vassal, blood_timer) - COOLDOWN_START(former_vassal, blood_timer, BLOOD_TIMER_REQUIREMENT) + COOLDOWN_RESET(former_ghoul, blood_timer) + COOLDOWN_START(former_ghoul, blood_timer, BLOOD_TIMER_REQUIREMENT) return ..() #undef BLOOD_TIMER_REQUIREMENT diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_types/favorite_vassal.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_types/favorite_vassal.dm index d21a6e4f326..a8375f011d1 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_types/favorite_vassal.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_types/favorite_vassal.dm @@ -1,28 +1,28 @@ /** - * Favorite Vassal + * Favorite Ghoul * * Gets some cool abilities depending on the Clan. */ -/datum/antagonist/vassal/favorite - name = "\improper Favorite Vassal" - antag_hud_name = "vassal6" - special_type = FAVORITE_VASSAL - vassal_description = "The Favorite Vassal gets unique abilities over other Vassals depending on the Master's Clan \ - and becomes completely immune to Mindshields. If part of Ventrue, this is the Vassal a Bloodsucker will rank up." +/datum/antagonist/ghoul/favorite + name = "\improper Favorite Ghoul" + antag_hud_name = "ghoul6" + special_type = FAVORITE_GHOUL + ghoul_description = "The Favorite Ghoul gets unique abilities over other Ghouls depending on the Master's Clan \ + and becomes completely immune to Mindshields. If part of Ventrue, this is the Ghoul a Bloodsucker will rank up." - ///Bloodsucker levels, but for Vassals, used by Ventrue. Used for ventrue creating a new bloodsucker. - var/vassal_level + ///Bloodsucker levels, but for Ghouls, used by Ventrue. Used for ventrue creating a new bloodsucker. + var/ghoul_level /// Power's we're going to inherit once we turn into a Bloodsucker var/list/bloodsucker_powers = list() -/datum/antagonist/vassal/favorite/on_gain() +/datum/antagonist/ghoul/favorite/on_gain() . = ..() SEND_SIGNAL(master, COMSIG_BLOODSUCKER_MAKE_FAVORITE, src) -/datum/antagonist/vassal/favorite/on_removal() +/datum/antagonist/ghoul/favorite/on_removal() SEND_SIGNAL(master, COMSIG_BLOODSUCKER_LOOSE_FAVORITE, src) remove_powers(bloodsucker_powers) . = ..() -/datum/antagonist/vassal/favorite/pre_mindshield(mob/implanter, mob/living/mob_override) +/datum/antagonist/ghoul/favorite/pre_mindshield(mob/implanter, mob/living/mob_override) return COMPONENT_MINDSHIELD_RESISTED diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_types/revenge_vassal.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_types/revenge_vassal.dm index 0f3ade7d2a6..e1496c54bd7 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_types/revenge_vassal.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_types/revenge_vassal.dm @@ -1,68 +1,68 @@ /** - * Revenge Vassal + * Revenge Ghoul * * Has the goal to 'get revenge' when their Master dies. */ -/datum/antagonist/vassal/revenge - name = "\improper Revenge Vassal" - roundend_category = "abandoned Vassals" +/datum/antagonist/ghoul/revenge + name = "\improper Revenge Ghoul" + roundend_category = "abandoned Ghouls" show_in_roundend = FALSE show_in_antagpanel = FALSE - antag_hud_name = "vassal4" - special_type = REVENGE_VASSAL - vassal_description = "The Revenge Vassal will not deconvert on a Bloodsucker's Final Death, \ + antag_hud_name = "ghoul4" + special_type = REVENGE_GHOUL + ghoul_description = "The Revenge Ghoul will not deconvert on a Bloodsucker's Final Death, \ instead they will gain all your Powers, and the objective to take revenge for your demise. \ - They additionally maintain Vassals their Master's departure, rather than become aimless." + They additionally maintain Ghouls their Master's departure, rather than become aimless." - ///all ex-vassals brought back into the fold. - var/list/datum/antagonist/ex_vassal/ex_vassals = list() + ///all ex-ghouls brought back into the fold. + var/list/datum/antagonist/ex_ghoul/ex_ghouls = list() -/datum/antagonist/vassal/revenge/roundend_report() +/datum/antagonist/ghoul/revenge/roundend_report() var/list/report = list() report += printplayer(owner) if(objectives.len) report += printobjectives(objectives) - // Now list their vassals - if(ex_vassals.len) - report += "The Vassals brought back into the fold were..." - for(var/datum/antagonist/ex_vassal/all_vassals as anything in ex_vassals) - if(!all_vassals.owner) + // Now list their ghouls + if(ex_ghouls.len) + report += "The Ghouls brought back into the fold were..." + for(var/datum/antagonist/ex_ghoul/all_ghouls as anything in ex_ghouls) + if(!all_ghouls.owner) continue - report += "[all_vassals.owner.name] the [all_vassals.owner.assigned_role.title]" + report += "[all_ghouls.owner.name] the [all_ghouls.owner.assigned_role.title]" return report.Join("
") -/datum/antagonist/vassal/revenge/on_gain() +/datum/antagonist/ghoul/revenge/on_gain() . = ..() RegisterSignal(master, COMSIG_BLOODSUCKER_FINAL_DEATH, PROC_REF(on_master_death)) -/datum/antagonist/vassal/revenge/on_removal() +/datum/antagonist/ghoul/revenge/on_removal() UnregisterSignal(master, COMSIG_BLOODSUCKER_FINAL_DEATH) return ..() -/datum/antagonist/vassal/revenge/proc/on_master_death(datum/antagonist/bloodsucker/bloodsuckerdatum, mob/living/carbon/master) +/datum/antagonist/ghoul/revenge/proc/on_master_death(datum/antagonist/bloodsucker/bloodsuckerdatum, mob/living/carbon/master) SIGNAL_HANDLER show_in_roundend = TRUE for(var/datum/objective/all_objectives as anything in objectives) objectives -= all_objectives - BuyPower(/datum/action/cooldown/bloodsucker/vassal_blood) + BuyPower(/datum/action/cooldown/bloodsucker/ghoul_blood) for(var/datum/action/cooldown/bloodsucker/master_powers as anything in bloodsuckerdatum.powers) if(master_powers.purchase_flags & BLOODSUCKER_DEFAULT_POWER) continue master_powers.Grant(owner.current) - owner.current.remove_status_effect(/datum/status_effect/agent_pinpointer/vassal_edition) + owner.current.remove_status_effect(/datum/status_effect/agent_pinpointer/ghoul_edition) var/datum/objective/survive/new_objective = new - new_objective.name = "Avenge Bloodsucker" - new_objective.explanation_text = "Avenge your Bloodsucker's death by felling the ones that killed them, and by recruiting their ex-vassals and continuing their operations." + new_objective.name = "Avenge your Master" + new_objective.explanation_text = "Avenge your Master's final death by felling the ones that killed them, recruiting their ex-ghouls and continuing their operations." new_objective.owner = owner objectives += new_objective - antag_panel_title = "You are a Vassal tasked with taking revenge for the death of your Master!" - antag_panel_description = "You have gained your Master's old Powers, and a brand new \ + antag_panel_title = "You are a Ghoul tasked with taking revenge for the death of your Master!" + antag_panel_description = "You have gained your Master's old Powers, and a brand new \ power. You will have to survive and maintain your old \ - Master's integrity. Bring their old Vassals back into the \ + Master's integrity. Bring their old Ghouls back into the \ fold using your new Ability." update_static_data_for_all_viewers() diff --git a/modular_zubbers/code/modules/languages/vampiric.dm b/modular_zubbers/code/modules/languages/vampiric.dm index bb758c4b442..5c0501828e0 100644 --- a/modular_zubbers/code/modules/languages/vampiric.dm +++ b/modular_zubbers/code/modules/languages/vampiric.dm @@ -1,6 +1,6 @@ /datum/language/vampiric - name = "Blah-Sucker" - desc = "The native language of the Bloodsucker elders, learned intuitively by Fledglings as they pass from death into immortality." + name = "Enochian" + desc = "Rumored to be created by the Dark Father, Caine himself as a way to talk to his Childer, the truth, like many things in unlife is uncertain. Spoken by creatures of the night." key = "L"//Capital L, lowercase l is for ashies. space_chance = 40 default_priority = 90 diff --git a/modular_zubbers/code/modules/quirks/code/negative_quirks/sol_weakness.dm b/modular_zubbers/code/modules/quirks/code/negative_quirks/sol_weakness.dm index 342ebd1f557..5eb4055f923 100644 --- a/modular_zubbers/code/modules/quirks/code/negative_quirks/sol_weakness.dm +++ b/modular_zubbers/code/modules/quirks/code/negative_quirks/sol_weakness.dm @@ -84,7 +84,7 @@ to_chat(quirk_holder, text) COOLDOWN_START(src, sun_burn, 30 SECONDS) -/datum/quirk/sol_weakness/proc/sun_warning(atom/source, danger_level, vampire_warning_message, vassal_warning_message) +/datum/quirk/sol_weakness/proc/sun_warning(atom/source, danger_level, vampire_warning_message, ghoul_warning_message) SIGNAL_HANDLER if(danger_level == DANGER_LEVEL_SOL_ROSE) vampire_warning_message = span_userdanger("Solar flares bombard the station with deadly UV light! Stay in cover for the next [TIME_BLOODSUCKER_DAY / 60] minutes or risk death!") diff --git a/modular_zubbers/icons/mob/huds/bloodsucker.dmi b/modular_zubbers/icons/mob/huds/bloodsucker.dmi index 04b34e67e218796280357650ac79ef810a7f0c9a..9cd9b225d72261ad3b8a77f3f7eb6af8940e2fcb 100644 GIT binary patch delta 161 zcmV;S0AByT3cd=EJAVqoFcgO2Ik}2MyNmtNEsL~BhxQgqYK}?hPw*sBynBa&o0#o; z;rVj7wAXHcrtkO@$y>L9fckLc>}6FjAfPHaGibF5d-xy&f`DvVoKrsDW~7WWWyynp zg0nlx75DwMtMreEBo&Smxf!>=4{cmr($uI4-)Xc=V^tcf(-zn%jh%n79NM9QrtkO% PE)aT?2)_)}vCwV=3hz-~ delta 161 zcmV;S0AByT3cd=EJAV#>FcgO2xxI=L*o^|ZbulG|0d9d5dxVCc#&ZhByLTXQGj{vl zxefFDZ*Bkpc$}5cy$ZrG5Ww*{d5S~VBGwOZ z$s!f$ps!HU-qi%to+PQ_+dBvAuoWDM)gw%kLpE9IGdu-t=!#bheQ#bPv| zU_O(=kUf}qKZK|wfr3%PZEO3H6li?_1-TTh*B#yWZ;VfrN`I@`G2`_=oz(A0$Hb|h zG_f4DOHMy*QaeyHcuI`F;*o0L zp`-256IM0zZ(KWOtb(!R@H1XLN6IJ5?8}m4*z5}^cBQ-lDX{2E@{J@$001BWNklfFDZ*Bkpc$}5c!HU8#5P;!x@)Uz!i)?il zyyPMk=|NwiOgmE>ns$~Xt@!qP5LQ`ajfX%2U;YeP!ft;kPf#37J+lv1MlkTX`q1iP zDRy9Bv(~C(d+y@x5F$nf1B*u5){YCU$oc>Va;;jA1K;+4n16h8Dy?cKLf7|nQh#8K ziBsQcVmYEqPXF4ZcHn06oEU$^X@8C*vBTO=!#lQeHa_TYbQcg=qx*Wj<@%j^3_-N&(cfSp9(0BrTzgd9_Y5sS}SY-03ZNK RL_t(|ob7#mbh94;ekkrme~thE diff --git a/modular_zubbers/strings/bloodsuckers/malkavian_revelations.json b/modular_zubbers/strings/bloodsuckers/malkavian_revelations.json index dbcb6614026..c8825c3896c 100644 --- a/modular_zubbers/strings/bloodsuckers/malkavian_revelations.json +++ b/modular_zubbers/strings/bloodsuckers/malkavian_revelations.json @@ -14,7 +14,7 @@ "#If I focus on my goals, rather than what I want to do, am I truly happy?", "#Maybe... in an alternate universe... I could be part of another family. One that cares more about me...", ",LI wonder what other people think of me... Possibly terribly.", - "#...What would happen if I Vassalized a Clown?", + "#...What would happen if I Ghoulized a Clown?", "#Why can't we just walk? Does anyone walk anymore? Why do we run? What rush are we in?", "#Medbay is overworking, I wonder why they are always so shortstaffed.", "#Why do we take a pod instead of the shuttle? Where's the fun in that?", @@ -30,7 +30,7 @@ ",LWhat would happen if a Bloodsucker got their hands on a Power Miner?", "#There are Aliens, they exist. It isn't a conspiracy. The real question is when they will attack us.", "#Is Brain damage real, or is it just our brains adapting to reality?", - "#How do we all understand eachother when we speak over eachother on the radio?", + "#How do we all understand each other when we speak over each other on the radio?", "#Huds are broken again, it seems...", "#Never make a deal with the devil... worst mistake of my life.", "#Does plasma still affect the minds of people who can't get poisoned?", @@ -115,11 +115,11 @@ "#If you wish to defeat me. Train for another 10,000 years.", "#If i knew you was coming i'd have baked a cake! Wait, who was i talking to?", "#We'll meet again. I don't know where and i don't know when but i know we'll meet again. Hopefully on a not very sunny day.", - "#Here is my question: When Cain slew Abel and God punished Cain, why did God give him superpowers?", + "#Here is my question: When Caine slew Abel and God punished Caine, why did God give him superpowers?", "#If i became fully augmented, would i still be a Vampire? Would i need to suck on Borgs and power cells?", ";No security! Don't try it!", "#What would happen if i wore a Memento Mori and was staked?", - "#Hmm, do i feel like doing my objectives today or going to the dorm rooms?... A better question is why an undead creature like myself has a libido in the first place.", + "#Hmm, do I feel like doing my objectives today or going to the dorm rooms?... A better question is why an undead creature like myself has a libido in the first place.", "#P-Please don't hurt me! I'm not a bad Vampire!", "#Why do we sleep in coffins? I'm undead not dead.", "#Crazy? I was Crazy once. They locked me in a room, a rubber room filled with rats. I drank the blood of the rats. Their ignoble blood made me crazy. Crazy?- ", @@ -152,6 +152,14 @@ "#The station's intercom is the voice of the cosmic leprechaun who stole my sanity. Now it's broadcasting riddles about the meaning of socks.", "#The walls told me secrets, but now they're suing me for breach of confidentiality. I didn't sign an NDA with the cosmos, did I?", "#I challenged the HoS to a dance-off with quantum entanglement moves. Now we're quantumly entangled in a never-ending cosmic boogie.", - "#I found a message in the maintenance pipes. It said, 'The space hamsters know your deepest fears.' Now I'm facing existential dread fueled by rodent prophecy." + "#I found a message in the maintenance pipes. It said, 'The space hamsters know your deepest fears.' Now I'm facing existential dread fueled by rodent prophecy.", + "#I am the sword of Caine, I am the sword of Caine...", + "#The Wisdom Cow is a sign of Gehenna, Lilith is laughing at me.", + ";Don't open it.", + "#One hand moves the pieces of the game - the winner keeps his hand on the pawn...", + "#Why's he smiling? The father? Is it the father behind him?", + "#Whether or not you win the game, matters not. It's if you bought it.", + "#In the time of Thin-Blood when his, the Dark Father's blood runs weak...", + "#Is Nanotrasen part of our games of Elders and Antediluvians or are we part of theirs?" ] } diff --git a/tgui/packages/tgui/interfaces/AntagInfoBloodsucker.tsx b/tgui/packages/tgui/interfaces/AntagInfoBloodsucker.tsx index c6b2c112b14..258efa42a14 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoBloodsucker.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoBloodsucker.tsx @@ -29,7 +29,7 @@ export type BloodsuckerProps = { powers: PowerInfo[]; objectives: Objective[]; }; -export type VassalProps = BloodsuckerProps & { +export type GhoulProps = BloodsuckerProps & { title: string; description: string; }; @@ -131,7 +131,7 @@ const BloodsuckerIntro = () => {
- Rest in a Coffin to claim it, and that area, as your lair. + Rest in a Coffin to claim it, and that area, as your haven.
Examine your new structures to see how they function!
@@ -139,9 +139,9 @@ const BloodsuckerIntro = () => { Masquerade ability will hide your identity to prevent this.
You will learn how to make persuasion racks once you have enough - levels to support a vassal, which you will learn during torpor - during daytime. Examine the vassal rack to see how many vassals - you can have! + levels to support a ghoul, which you will learn during torpor + during daytime. Examine the ghoul rack to see how many ghouls you + can have!
You cannot level up until you select a clan. To select a clan, click the clan tab on the top right of this window. diff --git a/tgui/packages/tgui/interfaces/AntagInfoVassal.tsx b/tgui/packages/tgui/interfaces/AntagInfoVassal.tsx index 36a04e01ba1..b403dc98fca 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoVassal.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoVassal.tsx @@ -1,12 +1,12 @@ import { useBackend } from '../backend'; import { Section, Stack } from '../components'; import { Window } from '../layouts'; -import { VassalProps } from './AntagInfoBloodsucker'; +import { GhoulProps } from './AntagInfoBloodsucker'; import { ObjectivePrintout } from './common/Objectives'; import { PowerDetails } from './PowerInfo'; -export const AntagInfoVassal = (props: any, context: any) => { - const { data } = useBackend(); +export const AntagInfoGhoul = (props: any, context: any) => { + const { data } = useBackend(); const { powers } = data; return ( { theme="spookyconsole" > - + ); }; -const VassalInfo = () => { - const { data } = useBackend(); +const GhoulInfo = () => { + const { data } = useBackend(); const { powers, objectives, title, description } = data; return ( diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/bloodsucker.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/bloodsucker.ts index 453e2ef7136..7a3082e4f20 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/bloodsucker.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/bloodsucker.ts @@ -3,7 +3,7 @@ import { Antagonist, Category } from '../base'; export const VAMPIRE_MECHANICAL_DESCRIPTION = ` After your death, you awaken to see yourself as an undead monster. Use your Vampiric abilities as best you can. -Scrape by Space Station 13, or take over it, vassalizing your way. +Scrape by Space Station 13, or take over it, ghoulizing your way. `; const Bloodsucker: Antagonist = { diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/bloodsuckerbreakout.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/bloodsuckerbreakout.ts index 698455f81e9..b9506ab5758 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/bloodsuckerbreakout.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/bloodsuckerbreakout.ts @@ -3,7 +3,7 @@ import { Antagonist, Category } from '../base'; export const VAMPIRE_MECHANICAL_DESCRIPTION = ` After your death, you awaken to see yourself as an undead monster. Use your Vampiric abilities as best you can. -Scrape by Space Station 13, or take over it, vassalizing your way. +Scrape by Space Station 13, or take over it, ghoulizing your way. `; const BloodsuckerBreakout: Antagonist = { diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/vampiricaccident.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/vampiricaccident.ts index 9099b0367c1..f60ec9f51b5 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/vampiricaccident.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/vampiricaccident.ts @@ -3,7 +3,7 @@ import { Antagonist, Category } from '../base'; export const VAMPIRE_MECHANICAL_DESCRIPTION = ` After your death, you awaken to see yourself as an undead monster. Use your Vampiric abilities as best you can. -Scrape by Space Station 13, or take over it, vassalizing your way. +Scrape by Space Station 13, or take over it, ghoulizing your way. `; const VampiricAccident: Antagonist = {