mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
Adds Toreador bloodsucker clan (#15428)
* new clan * fix * e * e * debuff * Apply suggestions from code review Co-authored-by: Jamie D <993128+JamieD1@users.noreply.github.com>
This commit is contained in:
@@ -42,6 +42,8 @@
|
||||
#define ARMMY_MONSTER "Armmy (100 Blood)"
|
||||
#define CALCIUM_MONSTER "Calcium (150 Blood)"
|
||||
#define HUSK_MONSTER "Husk"
|
||||
#define TOREADOR_MAX_HUMANITY_LOSS 10
|
||||
|
||||
/**
|
||||
* Power defines
|
||||
*/
|
||||
@@ -77,3 +79,7 @@
|
||||
#define BP_AM_STATIC_COOLDOWN (1<<2)
|
||||
/// This Power doesn't cost bloot to run while unconscious
|
||||
#define BP_AM_COSTLESS_UNCONSCIOUS (1<<3)
|
||||
|
||||
// Signals
|
||||
|
||||
#define COMSIG_BLOODSUCKER_RANKS_SPENT
|
||||
@@ -22,13 +22,15 @@
|
||||
var/static/list/clans = list(
|
||||
CLAN_GANGREL,
|
||||
CLAN_LASOMBRA,
|
||||
CLAN_TOREADOR,
|
||||
)
|
||||
var/list/options = list()
|
||||
options = clans
|
||||
// Brief descriptions in case they don't read the Wiki.
|
||||
to_chat(owner, span_announce("List of all Clans:\n\
|
||||
Gangrel - Prone to Frenzy, strange outcomes from being on frenzy, special power.\n\
|
||||
Lasombra - Life in the shadows, very weak to fire but no brute damage, upgradable abilities through tasks."))
|
||||
Lasombra - Life in the shadows, very weak to fire but no brute damage, upgradable abilities through tasks.\n\
|
||||
Toreador - More human then other bloodsucker, easily disguise among crew, but bound with moral."))
|
||||
|
||||
var/answer = input("You have Ranked up far enough to remember your clan. Which clan are you part of?", "Our mind feels luxurious...") in options
|
||||
if(!answer)
|
||||
@@ -76,4 +78,22 @@
|
||||
to_chat(owner, span_notice("You have also learned how to channel the abyss's power into an iron knight's armor that can be build in the structure ta and activated as a trap for your lair."))
|
||||
owner.teach_crafting_recipe(/datum/crafting_recipe/possessedarmor)
|
||||
owner.teach_crafting_recipe(/datum/crafting_recipe/restingplace)
|
||||
if(CLAN_TOREADOR)
|
||||
my_clan = CLAN_TOREADOR
|
||||
to_chat(owner, span_announce("You have Ranked up enough to learn: You are part of the Toreador Clan!\n\
|
||||
* As part of the Toreador, you can't ignore your own emotions and disrespect inhuman actions.\n\
|
||||
* Being in Masquarade doesn't spend your blood, as well as having any negative effects on your immortal powers.\n\
|
||||
* You passively rise morale of your living vassals around you.\n\
|
||||
* Also you get really sad when comitting inhumane actions, but your humanity loss can't go above a certain treashold.\n\
|
||||
* Remember, that those bloodsuckers who dare to act inhuman or break the Masquarade shouldn't be forgiven, and deserve only <span class='red'>death</span>.\n\
|
||||
* Finally, your Favorite Vassal will gain the Mesmerise ability to help you in non-lethaly dealing with enemies or vassalising people."))
|
||||
if(owner.current && ishuman(owner.current) && !owner.current.GetComponent(/datum/component/mood))
|
||||
owner.current.AddComponent(/datum/component/mood) //You are not a emotionless beast!
|
||||
|
||||
for(var/datum/action/bloodsucker/masquerade/masquarade_spell in powers)
|
||||
if(!istype(masquarade_spell))
|
||||
continue
|
||||
masquarade_spell.bloodcost = 0
|
||||
masquarade_spell.constant_bloodcost = 0 //Wow very cool code, good job
|
||||
|
||||
owner.announce_objectives()
|
||||
@@ -740,13 +740,14 @@
|
||||
continue
|
||||
if(!isliving(clan_minds.current))
|
||||
continue
|
||||
to_chat(clan_minds, span_userdanger("[owner.current] has broken the Masquerade! Ensure they are eliminated at all costs!"))
|
||||
var/datum/antagonist/bloodsucker/bloodsuckerdatum = clan_minds.has_antag_datum(/datum/antagonist/bloodsucker)
|
||||
var/datum/objective/assassinate/masquerade_objective = new /datum/objective/assassinate
|
||||
masquerade_objective.target = owner.current
|
||||
masquerade_objective.explanation_text = "Ensure [owner.current], who has broken the Masquerade, is Final Death'ed."
|
||||
bloodsuckerdatum.objectives += masquerade_objective
|
||||
clan_minds.announce_objectives()
|
||||
to_chat(clan_minds, span_userdanger("[owner.current] has broken the Masquerade![bloodsuckerdatum.my_clan == CLAN_TOREADOR ? "Ensure they are eliminated at all costs!" : ""]"))
|
||||
if(bloodsuckerdatum.my_clan == CLAN_TOREADOR)
|
||||
var/datum/objective/assassinate/masquerade_objective = new /datum/objective/assassinate
|
||||
masquerade_objective.target = owner.current
|
||||
masquerade_objective.explanation_text = "Ensure [owner.current], who has broken the Masquerade, is Final Death'ed."
|
||||
bloodsuckerdatum.objectives += masquerade_objective
|
||||
clan_minds.announce_objectives()
|
||||
|
||||
///This is admin-only of reverting a broken masquerade, sadly it doesn't remove the Malkavian objectives yet.
|
||||
/datum/antagonist/bloodsucker/proc/fix_masquerade()
|
||||
|
||||
@@ -338,7 +338,7 @@
|
||||
They can be best defined as 'The most humane kind of vampire', due to their kindred with an obsession with perfectionism and beauty<br> \
|
||||
<b>Favorite Vassal</b>: Their favorite Vassal gains the Mesmerize ability \
|
||||
<b>Strength</b>: Highly charismatic and influential.<br> \
|
||||
<b>Weakness</b>: Physically and Morally weak."
|
||||
<b>Weakness</b>: Morally weak."
|
||||
if(CLAN_NOSFERATU)
|
||||
dat += "This Clan has been the most obvious to find information about.<br> \
|
||||
They are <i>disfigured, ghoul-like</i> vampires upon embrace by their Sire, scouts that travel through desolate paths to avoid violating the Masquerade.<br> \
|
||||
|
||||
@@ -147,6 +147,11 @@
|
||||
|
||||
// Checks: Step 2 - Is it a Mouse?
|
||||
if(istype(feed_target, /mob/living/simple_animal/mouse))
|
||||
if(bloodsuckerdatum_power.my_clan == CLAN_TOREADOR)
|
||||
to_chat(user, span_danger("I am not going to drink blood of a lesser lifeform."))
|
||||
bloodsuckerdatum_power.AddHumanityLost(1) //Even attempting to do this disguisting action is against your morale, so get humanity loss
|
||||
DeactivatePower()
|
||||
return
|
||||
var/mob/living/simple_animal/mouse_target = feed_target
|
||||
bloodsuckerdatum_power.AddBloodVolume(25)
|
||||
to_chat(user, span_notice("You recoil at the taste of a lesser lifeform."))
|
||||
|
||||
@@ -23,6 +23,17 @@
|
||||
INVOKE_ASYNC(src, .proc/HandleStarving)
|
||||
INVOKE_ASYNC(src, .proc/HandleTorpor)
|
||||
|
||||
if(my_clan == CLAN_TOREADOR && owner.current.stat != DEAD)
|
||||
for(var/datum/antagonist/vassal/vassal in vassals)
|
||||
if(vassal.master != src)
|
||||
continue
|
||||
if(!vassal.owner.current || vassal.owner.current == DEAD)
|
||||
continue
|
||||
if(get_dist(get_turf(owner.current), get_turf(vassal.owner.current)) > 5)
|
||||
continue
|
||||
SEND_SIGNAL(vassal.owner.current, COMSIG_ADD_MOOD_EVENT, /datum/mood_event/toreador_vassal)
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// BLOOD
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -35,6 +46,12 @@
|
||||
if(humanity_lost >= 500)
|
||||
to_chat(owner.current, span_warning("You hit the maximum amount of lost Humanity, you are far from Human."))
|
||||
return
|
||||
if(my_clan == CLAN_TOREADOR)
|
||||
if(humanity_lost >= TOREADOR_MAX_HUMANITY_LOSS)
|
||||
to_chat(owner.current, span_warning("Your moral prevents you from becoming more ihuman."))
|
||||
SEND_SIGNAL(owner.current, COMSIG_ADD_MOOD_EVENT, /datum/mood_event/toreador_inhuman2)
|
||||
return
|
||||
SEND_SIGNAL(owner.current, COMSIG_ADD_MOOD_EVENT, /datum/mood_event/toreador_inhuman)
|
||||
humanity_lost += value
|
||||
to_chat(owner.current, span_warning("You feel as if you lost some of your humanity, you will now enter Frenzy at [FRENZY_THRESHOLD_ENTER + humanity_lost * 10] Blood."))
|
||||
|
||||
@@ -90,7 +107,7 @@
|
||||
/datum/antagonist/bloodsucker/proc/HandleHealing(mult = 1)
|
||||
var/actual_regen = bloodsucker_regen_rate + additional_regen
|
||||
// Don't heal if I'm staked or on Masquerade (+ not in a Coffin). Masqueraded Bloodsuckers in a Coffin however, will heal.
|
||||
if(owner.current.AmStaked() || (HAS_TRAIT(owner.current, TRAIT_MASQUERADE) && !HAS_TRAIT(owner.current, TRAIT_NODEATH)))
|
||||
if(owner.current.AmStaked() || (HAS_TRAIT(owner.current, TRAIT_MASQUERADE) && !HAS_TRAIT(owner.current, TRAIT_NODEATH) && my_clan != CLAN_TOREADOR))
|
||||
return FALSE
|
||||
owner.current.adjustCloneLoss(-1 * (actual_regen * 4) * mult, 0)
|
||||
owner.current.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1 * (actual_regen * 4) * mult) //adjustBrainLoss(-1 * (actual_regen * 4) * mult, 0)
|
||||
@@ -103,7 +120,7 @@
|
||||
/// Checks if you're in a coffin here, additionally checks for Torpor right below it.
|
||||
var/amInCoffin = istype(user.loc, /obj/structure/closet/crate/coffin)
|
||||
if(amInCoffin && HAS_TRAIT(user, TRAIT_NODEATH))
|
||||
if(HAS_TRAIT(owner.current, TRAIT_MASQUERADE))
|
||||
if(HAS_TRAIT(owner.current, TRAIT_MASQUERADE) && my_clan != CLAN_TOREADOR)
|
||||
to_chat(user, span_warning("You will not heal while your Masquerade ability is active."))
|
||||
return
|
||||
fireheal = min(user.getFireLoss_nonProsthetic(), actual_regen)
|
||||
@@ -481,6 +498,21 @@
|
||||
mood_change = -6
|
||||
timeout = 6 MINUTES
|
||||
|
||||
/datum/mood_event/toreador_inhuman
|
||||
description = "<span class='boldwarning'>I commited inhuman actions. I feel... bad.</span>\n"
|
||||
mood_change = -4
|
||||
timeout = 6 MINUTES
|
||||
|
||||
/datum/mood_event/toreador_inhuman2
|
||||
description = "<span class='boldwarning'>I should stop acting like this. What am I turning into?</span>\n"
|
||||
mood_change = -10
|
||||
timeout = 10 MINUTES
|
||||
|
||||
/datum/mood_event/toreador_vassal
|
||||
description = "<span class='nicegreen'>My master is near me. I love them.</span>\n"
|
||||
mood_change = 4
|
||||
timeout = 30 SECONDS
|
||||
|
||||
///Candelabrum's mood event to non Bloodsucker/Vassals
|
||||
/datum/mood_event/vampcandle
|
||||
description = "<span class='boldwarning'>Something is making your mind feel... loose.</span>\n"
|
||||
|
||||
@@ -67,6 +67,7 @@
|
||||
//Remove Language & Hud
|
||||
owner.current.remove_language(/datum/language/vampiric)
|
||||
update_vassal_icons_removed(owner.current)
|
||||
UnregisterSignal(master, COMSIG_BLOODSUCKER_RANKS_SPENT)
|
||||
return ..()
|
||||
|
||||
/datum/antagonist/vassal/on_body_transfer(mob/living/old_body, mob/living/new_body)
|
||||
@@ -132,6 +133,15 @@
|
||||
return
|
||||
playsound(vassal.loc, 'sound/effects/splat.ogg', 50, TRUE)
|
||||
vassal.set_species(/datum/species/szlachta)
|
||||
if(CLAN_TOREADOR)
|
||||
BuyPower(/datum/action/bloodsucker/targeted/mesmerize)
|
||||
RegisterSignal(master, COMSIG_BLOODSUCKER_RANKS_SPENT, .proc/toreador_levelup_mesmerize)
|
||||
|
||||
/datum/antagonist/vassal/proc/toreador_levelup_mesmerize() //Don't need stupid args
|
||||
for(var/datum/action/bloodsucker/targeted/mesmerize/mesmerize_power in powers)
|
||||
if(!istype(mesmerize_power))
|
||||
continue
|
||||
mesmerize_power.level_current = max(master.bloodsucker_level, 1)
|
||||
|
||||
/// If we weren't created by a bloodsucker, then we cannot be a vassal (assigned from antag panel)
|
||||
/datum/antagonist/vassal/can_be_owned(datum/mind/new_owner)
|
||||
|
||||
Reference in New Issue
Block a user