From ac13fa9c5eea09ea3e5709a43f8a0a1ffa17fb9e Mon Sep 17 00:00:00 2001 From: tattax <71668564+tattax@users.noreply.github.com> Date: Thu, 28 Apr 2022 01:04:38 -0300 Subject: [PATCH 01/20] t --- code/__DEFINES/bloodsuckers.dm | 14 +- code/__DEFINES/status_effects.dm | 2 + code/__DEFINES/traits.dm | 1 + code/datums/status_effects/debuffs.dm | 35 ++ .../gamemodes/bloodsuckers/bloodsucker.dm | 30 +- code/game/machinery/doors/airlock.dm | 2 +- .../bloodsuckers/bloodsucker_daylight.dm | 13 +- .../bloodsuckers/bloodsucker_flaws.dm | 47 +- .../bloodsuckers/bloodsucker_mobs.dm | 178 ++++++ .../bloodsuckers/bloodsucker_objectives.dm | 2 +- .../antagonists/bloodsuckers/bloodsuckers.dm | 12 +- .../bloodsuckers/powers/_powers.dm | 28 +- .../antagonists/bloodsuckers/powers/cloak.dm | 71 ++- .../antagonists/bloodsuckers/powers/feed.dm | 3 +- .../bloodsuckers/powers/fortitude.dm | 51 +- .../bloodsuckers/powers/gangrel.dm | 537 ++++++++++++++---- .../antagonists/bloodsuckers/powers/gohome.dm | 150 ++--- .../bloodsuckers/powers/masquerade.dm | 41 +- .../bloodsuckers/powers/recuperate.dm | 3 +- .../powers/targeted/_powers_targeted.dm | 2 +- .../bloodsuckers/powers/targeted/brawn.dm | 42 ++ .../bloodsuckers/powers/targeted/haste.dm | 29 + .../bloodsuckers/powers/targeted/lunge.dm | 18 +- .../bloodsuckers/powers/targeted/mesmerize.dm | 24 +- .../bloodsuckers/powers/targeted/trespass.dm | 28 +- .../structures/bloodsucker_coffin.dm | 6 +- .../structures/bloodsucker_crypt.dm | 242 +++++++- .../structures/bloodsucker_life.dm | 73 ++- .../structures/bloodsucker_recipes.dm | 39 +- .../antagonists/bloodsuckers/vassal.dm | 42 +- .../eldritch_cult/eldritch_effects.dm | 5 +- .../monsterhunter/monsterhunter.dm | 61 +- .../antagonists/monsterhunter/monstertrack.dm | 4 +- code/modules/events/monsterhunter.dm | 2 + .../modules/mob/living/carbon/status_procs.dm | 7 +- icons/mob/actions/actions_bloodsucker.dmi | Bin 20484 -> 21819 bytes .../actions/actions_gangrel_bloodsucker.dmi | Bin 5503 -> 10986 bytes .../actions/actions_lasombra_bloodsucker.dmi | Bin 2980 -> 3635 bytes icons/mob/bloodsucker_mobs.dmi | Bin 2242 -> 5561 bytes icons/obj/vamp_obj.dmi | Bin 17218 -> 21939 bytes yogstation.dme | 1 + 41 files changed, 1491 insertions(+), 354 deletions(-) create mode 100644 code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm diff --git a/code/__DEFINES/bloodsuckers.dm b/code/__DEFINES/bloodsuckers.dm index 8fa47c24a876..cd02f2bfffd2 100644 --- a/code/__DEFINES/bloodsuckers.dm +++ b/code/__DEFINES/bloodsuckers.dm @@ -10,9 +10,9 @@ /// Deals with constant processes off of LifeTick() #define COMSIG_LIVING_BIOLOGICAL_LIFE "biological_life" /// Once blood is this low, will enter Frenzy -#define FRENZY_THRESHOLD_ENTER 25 +#define FRENZY_THRESHOLD_ENTER 112 /// Once blood is this high, will exit Frenzy -#define FRENZY_THRESHOLD_EXIT 250 +#define FRENZY_THRESHOLD_EXIT 560 /// You have special interactions with Bloodsuckers #define TRAIT_BLOODSUCKER_HUNTER "bloodsucker_hunter" @@ -53,12 +53,14 @@ /// This Power can be purchased by Bloodsuckers #define BLOODSUCKER_CAN_BUY (1<<0) -/// This Power can be purchased by Tremere Bloodsuckers -#define TREMERE_CAN_BUY (1<<1) +/// This Power can be purchased by Lasombra Bloodsuckers +#define LASOMBRA_CAN_BUY (1<<1) +/// This Power can be purchased by Gangrel Bloodsuckers +#define GANGREL_CAN_BUY (1<<2) /// This Power can be purchased by Vassals -#define VASSAL_CAN_BUY (1<<2) +#define VASSAL_CAN_BUY (1<<3) /// This Power can be purchased by Monster Hunters -#define HUNTER_CAN_BUY (1<<3) +#define HUNTER_CAN_BUY (1<<4) /// This Power is a Toggled Power #define BP_AM_TOGGLE (1<<0) diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index 47274a1edd1e..4afbccca45e9 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -80,6 +80,8 @@ #define STATUS_EFFECT_SUMMONEDGHOST /datum/status_effect/cultghost //is a cult ghost and can't use manifest runes +#define STATUS_EFFECT_SHADOWAFFLICTED /datum/status_effect/the_shadow //Heavy hallucinations + ear damage with a shadowman overlay + #define STATUS_EFFECT_CRUSHERMARK /datum/status_effect/crusher_mark //if struck with a proto-kinetic crusher, takes a ton of damage #define STATUS_EFFECT_KNUCKLED /datum/status_effect/knuckled //if struck with bloody knuckles or their ability, gets rooted diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 363f9e4cef2f..88eddb6f95d4 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -326,6 +326,7 @@ #define BLOODSUCKER_TRAIT "bloodsucker_trait" #define FRENZY_TRAIT "frenzy_trait" #define HORROR_TRAIT "horror" +#define FEED_TRAIT "feed_trait" ///Traits given by station traits #define STATION_TRAIT_BANANIUM_SHIPMENTS "station_trait_bananium_shipments" diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index 7afd26b82220..16292d53a452 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -358,6 +358,41 @@ if(owner.reagents) owner.reagents.del_reagent(/datum/reagent/water/holywater) //can't be deconverted +/datum/status_effect/the_shadow + id = "the_shadow" + status_type = STATUS_EFFECT_REPLACE + alert_type = null + duration = -1 + var/mutable_appearance/shadow + +/datum/status_effect/the_shadow/on_apply() + if(ishuman(owner)) + shadow = mutable_appearance('icons/effects/effects.dmi', "curse") + shadow.pixel_x = -owner.pixel_x + shadow.pixel_y = -owner.pixel_y + owner.add_overlay(shadow) + to_chat(owner, span_boldwarning("The shadows invade your mind, MUST. GET. THEM. OUT")) + return TRUE + return FALSE + +/datum/status_effect/the_shadow/tick() + var/turf/T = get_turf(owner) + var/light_amount = T.get_lumcount() + if(light_amount > 0.2) + to_chat(owner, span_notice("As the light reaches the shadows, they dissipate!")) + qdel(src) + if(owner.stat == DEAD) + qdel(src) + owner.hallucination += 2 + owner.confused += 2 + owner.adjustEarDamage(0, 5) + +/datum/status_effect/the_shadow/Destroy() + if(owner) + owner.cut_overlay(shadow) + QDEL_NULL(shadow) + return ..() + /datum/status_effect/crusher_mark id = "crusher_mark" duration = 300 //if you leave for 30 seconds you lose the mark, deal with it diff --git a/code/game/gamemodes/bloodsuckers/bloodsucker.dm b/code/game/gamemodes/bloodsuckers/bloodsucker.dm index 473f2d781624..21fc80ff1af2 100644 --- a/code/game/gamemodes/bloodsuckers/bloodsucker.dm +++ b/code/game/gamemodes/bloodsuckers/bloodsucker.dm @@ -28,23 +28,25 @@ if(CONFIG_GET(flag/protect_roles_from_antagonist)) restricted_jobs += protected_jobs + if(CONFIG_GET(flag/protect_assistant_from_antagonist)) restricted_jobs += "Assistant" recommended_enemies = clamp(round(num_players()/10), 1, 6); - for(var/i = 0, i < recommended_enemies, i++) - if(!antag_candidates.len) - break - var/datum/mind/bloodsucker = pick(antag_candidates) - // Can we even BE a bloodsucker? - if(!bloodsucker.can_make_bloodsucker(bloodsucker)) - antag_candidates -= bloodsucker - continue - bloodsuckers += bloodsucker - bloodsucker.restricted_roles = restricted_jobs - log_game("[bloodsucker.key] (ckey) has been selected as a Bloodsucker.") - antag_candidates -= bloodsucker// Apparently you can also write antag_candidates -= bloodsucker + if(antag_candidates.len>0) + for(var/i = 0, i < recommended_enemies, i++) + if(!antag_candidates.len) + break + var/datum/mind/bloodsucker = pick(antag_candidates) + // Can we even BE a bloodsucker? + if(!bloodsucker.can_make_bloodsucker(bloodsucker)) + antag_candidates -= bloodsucker + continue + bloodsuckers += bloodsucker + bloodsucker.restricted_roles = restricted_jobs + log_game("[bloodsucker.key] (ckey) has been selected as a Bloodsucker.") + antag_candidates -= bloodsucker// Apparently you can also write antag_candidates -= bloodsucker // Do we have enough vamps to continue? return bloodsuckers.len >= required_enemies @@ -58,8 +60,8 @@ /datum/game_mode/bloodsucker/generate_report() return "There's been a report of the undead roaming around the sector, especially those that display Vampiric abilities.\ - They've displayed the ability to disguise themselves as anyone and brainwash the minds of people they capture alive.\ - Please take care of the crew and their health, as it is impossible to tell if one is lurking in the darkness behind." + They've displayed the ability to disguise themselves as anyone and brainwash the minds of people they capture alive.\ + Please take care of the crew and their health, as it is impossible to tell if one is lurking in the darkness behind." /datum/game_mode/bloodsucker/make_antag_chance(mob/living/carbon/human/character) var/bloodsuckercap = min(round(GLOB.joined_player_list.len / (3 * 4)) + 2, round(GLOB.joined_player_list.len / 2)) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index cf6a369ffc6c..67e48d32754f 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1249,7 +1249,7 @@ if(istype(I, /obj/item/jawsoflife)) if(isElectrified()) - shock(user,100)//it's like sticking a forck in a power socket + shock(user,100)//it's like sticking a fork in a power socket return if(!density)//already open diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_daylight.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_daylight.dm index 59106c57902f..0cd72c2a3c6c 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_daylight.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_daylight.dm @@ -1,7 +1,7 @@ -/// 1 minute -#define TIME_BLOODSUCKER_DAY 60 -/// 10 minutes -#define TIME_BLOODSUCKER_NIGHT 600 +/// 45 seconds +#define TIME_BLOODSUCKER_DAY 45 +/// 15 minutes +#define TIME_BLOODSUCKER_NIGHT 900 /// 1.5 minutes #define TIME_BLOODSUCKER_DAY_WARN 90 /// 30 seconds @@ -90,8 +90,6 @@ continue if(bloodsuckerdatum.my_clan == CLAN_GANGREL) give_transform_power() - if(!iscarbon(bloodsucker_minds.current)) - qdel(bloodsucker_minds.current) if(bloodsuckerdatum.altar_uses > 0) to_chat(bloodsuckerdatum, span_notice("Your Altar uses have been reset!")) bloodsuckerdatum.altar_uses = 0 @@ -181,8 +179,7 @@ var/datum/antagonist/bloodsucker/bloodsuckerdatum = bloodsucker_minds.has_antag_datum(/datum/antagonist/bloodsucker) for(var/datum/action/bloodsucker/power in bloodsuckerdatum.powers) if(istype(power, /datum/action/bloodsucker/gohome)) - bloodsuckerdatum.powers -= power - power.Remove(bloodsucker_minds.current) + bloodsuckerdatum.RemovePower(power) /obj/effect/sunlight/proc/give_transform_power() for(var/datum/mind/bloodsucker_minds as anything in get_antag_minds(/datum/antagonist/bloodsucker)) diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_flaws.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_flaws.dm index db44af151235..fd8e9f0bdb4b 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_flaws.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_flaws.dm @@ -4,50 +4,53 @@ /datum/antagonist/bloodsucker/proc/AssignClanAndBane() var/static/list/clans = list( CLAN_GANGREL, - //CLAN_LASOMBRA, - "None", + CLAN_LASOMBRA, ) 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, special power.\n\ - None - Continue living without a clan.")) + 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.")) 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 || answer == "None") + if(!answer) to_chat(owner, span_warning("You have wilingfully decided to stay ignorant.")) return var/mob/living/carbon/human/bloodsucker = owner.current - //switch(answer) - if(answer == CLAN_GANGREL) - my_clan = CLAN_GANGREL - to_chat(owner, span_announce("You have Ranked up enough to learn: You are part of the Gangrel Clan!\n\ - * As part of the Gangrel Clan, your inner beast has a stronger impact in your undead life.\n\ - * You are prone to falling into a frenzy, and will unleash a wild beast form when doing so,\n\ - * Though once per night you are able to unleash your inner beast to help you in combat.\n\ - * Due to growing more feral you've also strayed away from other bloodsuckers and will only be able to maintain one vassal.\n\ - * Finally, your Favorite Vassal will gain the Minor Beast Form ability to help you in combat.")) - AddHumanityLost(22.4) - BuyPower(new /datum/action/bloodsucker/gangrel/transform) - bloodsucker.faction |= "bloodhungry" //i love animals i love animals - /*if(CLAN_LASOMBRA) + switch(answer) + if(CLAN_GANGREL) + my_clan = CLAN_GANGREL + to_chat(owner, span_announce("You have Ranked up enough to learn: You are part of the Gangrel Clan!\n\ + * As part of the Gangrel Clan, your inner beast has a stronger impact in your undead life.\n\ + * You are prone to falling into a frenzy, and will unleash a wild beast form when doing so,\n\ + * Though once per night you are able to unleash your inner beast to help you in combat.\n\ + * Due to growing more feral you've also strayed away from other bloodsuckers and will only be able to maintain one vassal.\n\ + * Finally, your Favorite Vassal will gain the Minor Beast Form ability to help you in combat.")) + AddHumanityLost(16.8) + BuyPower(new /datum/action/bloodsucker/gangrel/transform) + bloodsucker.faction |= "bloodhungry" //i love animals i love animals + if(CLAN_LASOMBRA) my_clan = CLAN_LASOMBRA to_chat(owner, span_announce("You have Ranked up enough to learn: You are part of the Lasombra Clan!\n\ * As part of the Lasombra Clan, your past teachings have taught you how to become in touch with the Abyss and practice it's prophecies.\n\ * It'll take long before the Abyss can break through this plane's veil, but you'll try to salvage any of the energy that comes through,\n\ * To harness it's energy a ritual must be done each night to gain a shadowpoint, shadowpoints let's you upgrades normal abilities into upgraded ones.\n\ * The Abyss has blackened your veins and made you immune to brute damage but highly receptive to burn, so you might need to be extra careful when on Torpor.\n\ - * Finally, your Favorite Vassal will gain the Minor Glare and Shadow Walk abilities to help you in combat.")) - ADD_TRAIT(bloodsucker, TRAIT_BRUTEIMMUNE, BLOODSUCKER_TRAIT) - ADD_TRAIT(bloodsucker, TRAIT_SCORCHED, BLOODSUCKER_TRAIT) + * Finally, your Favorite Vassal will gain the Lesser Glare and Shadow Walk abilities to help you in combat.")) + bloodsucker.physiology.burn_mod *= 2 + bloodsucker.physiology.brute_mod *= 0 + bloodsucker.eye_color = "f00" ADD_TRAIT(bloodsucker, CULT_EYES, BLOODSUCKER_TRAIT) + bloodsucker.update_body() var/obj/item/organ/heart/nightmare/nightmarish_heart = new nightmarish_heart.Insert(bloodsucker) nightmarish_heart.Stop() for(var/obj/item/light_eater/blade in bloodsucker.held_items) QDEL_NULL(blade) - owner.teach_crafting_recipe(/datum/crafting_recipe/meatcoffin)*/ + GLOB.reality_smash_track.AddMind(owner) + owner.teach_crafting_recipe(/datum/crafting_recipe/possessedarmor) + owner.teach_crafting_recipe(/datum/crafting_recipe/restingplace) owner.announce_objectives() \ No newline at end of file diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm new file mode 100644 index 000000000000..f44969b673b7 --- /dev/null +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm @@ -0,0 +1,178 @@ +/mob/living/simple_animal/hostile/bloodsucker + icon = 'icons/mob/bloodsucker_mobs.dmi' + harm_intent_damage = 20 + melee_damage_lower = 20 + melee_damage_upper = 20 + see_in_dark = 10 + speak_chance = 0 + mob_size = MOB_SIZE_LARGE + gold_core_spawnable = FALSE + movement_type = GROUND + attack_sound = 'sound/weapons/slash.ogg' + faction = list("hostile", "bloodhungry") + response_help = "touches" + response_disarm = "flails at" + response_harm = "punches" + var/mob/living/bloodsucker + +/mob/living/simple_animal/hostile/bloodsucker/werewolf + name = "werewolf" + desc = "Who could imagine this things 'were' actually real?" + icon_state = "wolfform" + icon_living = "wolfform" + icon_dead = "wolf_dead" + icon_gib = "wolf_dead" + speed = -1.5 + maxHealth = 800 + health = 800 + harm_intent_damage = 25 + melee_damage_lower = 20 + melee_damage_upper = 25 + attacktext = "violently mawls" + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 5) + obj_damage = 50 + environment_smash = ENVIRONMENT_SMASH_WALLS + speak_emote = list("gnashes") + var/satiation = 0 + +/mob/living/simple_animal/hostile/bloodsucker/giantbat + name = "giant bat" + desc = "That's a fat ass bat." + icon_state = "batform" + icon_living = "batform" + icon_dead = "bat_dead" + icon_gib = "bat_dead" + maxHealth = 500 + health = 500 + attacktext = "bites" + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 3) + attack_sound = 'sound/weapons/bite.ogg' + obj_damage = 35 + pass_flags = PASSTABLE | PASSCOMPUTER + environment_smash = ENVIRONMENT_SMASH_STRUCTURES + movement_type = FLYING + speak_emote = list("loudly squeaks") + +/mob/living/simple_animal/hostile/bloodsucker/possessedarmor + name = "possessed armor" + desc = "Whatever possessed this suit of armor to suddenly walk about and start killing everyone?" + icon_state = "posarmor" + icon_living = "posarmor" + response_help = "pokes" + response_disarm = "pushes" + response_harm = "punches" + maxHealth = 250 + health = 250 + attacktext = "rends" + obj_damage = 50 + environment_smash = ENVIRONMENT_SMASH_STRUCTURES + speak_emote = list("manifests") + var/upgraded = FALSE + +/mob/living/simple_animal/hostile/bloodsucker/possessedarmor/upgraded + name = "armed possessed armor" + icon_state = "posarmor_sword" + icon_living = "posarmor_sword" + upgraded = TRUE + obj_damage = 55 + harm_intent_damage = 25 + melee_damage_lower = 25 + melee_damage_upper = 25 + +/////////////////////////////// +/// Inheritances /// +/////////////////////////////// + +/mob/living/simple_animal/hostile/bloodsucker/Destroy() //makes us alive again + if(bloodsucker && mind) + visible_message(span_warning("[src] rapidly transforms into a humanoid figure!"), span_warning("You forcefully return to your normal form.")) + playsound(src, 'sound/weapons/slash.ogg', 50, 1) + if(mind) + mind.transfer_to(bloodsucker) + bloodsucker.forceMove(get_turf(src)) + if(istype(src, /mob/living/simple_animal/hostile/bloodsucker/werewolf) && istype(src, /mob/living/simple_animal/hostile/bloodsucker/possessedarmor)) + STOP_PROCESSING(SSprocessing, src) + return ..() + +/mob/living/simple_animal/hostile/bloodsucker/death() + if(bloodsucker && mind) + mind.transfer_to(bloodsucker) + bloodsucker.death() + if(src) + addtimer(CALLBACK(src, .proc/gib), 20 SECONDS) + ..() + +/mob/living/simple_animal/hostile/bloodsucker/proc/devour(mob/living/target) + if(istype(src, /mob/living/simple_animal/hostile/bloodsucker/werewolf)) + var/mob/living/simple_animal/hostile/bloodsucker/werewolf/ww = src + ww.satiation++ + src.visible_message(span_danger("[src] devours [target] whole!"), \ + span_userdanger("You devour [target] and feel the beast inside you sedate itself a little, you'll need to feast [3 - ww.satiation] more times to become human again.")) + health += target.maxHealth / 4 + target.gib() + +//////////////////////////// +/// Werewolf /// +/////////////////////////// + +/mob/living/simple_animal/hostile/bloodsucker/werewolf/Initialize() + . = ..() + START_PROCESSING(SSprocessing, src) + +/mob/living/simple_animal/hostile/bloodsucker/werewolf/process() + if(bloodsucker) + initial(health) -= 0.44444444 //3 minutes to die + if(satiation == 3) + to_chat(src, span_notice("It has been fed. You turn back to normal.")) + qdel(src) + return + +/mob/living/simple_animal/hostile/bloodsucker/werewolf/Destroy() + if(ishuman(bloodsucker)) + var/mob/living/carbon/human/user = bloodsucker + var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) + var/datum/species/user_species = user.dna.species + var/mutation = "" + var/slot = "" + var/additionalmessage = "" + bloodsuckerdatum.clanprogress++ + switch(bloodsuckerdatum.clanprogress) + if(1) + additionalmessage = "You have mutated a collar made out of fur!" + user_species.armor += 10 + mutation = /obj/item/clothing/neck/wolfcollar + slot = SLOT_NECK + if(2) + additionalmessage = "You have mutated werewolf ears!" + mutation = /obj/item/clothing/ears/wolfears + slot = SLOT_EARS + if(3) + additionalmessage = "You have mutated werewolf claws!" + user_species.punchdamagelow += 2.5 + user_species.punchdamagehigh += 2.5 + mutation = /obj/item/clothing/gloves/wolfclaws + slot = SLOT_GLOVES + if(4) + additionalmessage = "You have mutated werewolf legs!" + mutation = /obj/item/clothing/shoes/wolflegs + slot = SLOT_SHOES + if(5 to INFINITY) + to_chat(user, span_danger("The beast inside of you seems satisfied with your current form.")) + return + to_chat(user, span_danger("After returning to normal, you feel strange. [additionalmessage]")) + var/obj/item/pastdrip = user.get_item_by_slot(slot) + user.dropItemToGround(pastdrip) + user.equip_to_slot_or_del(new mutation(user), slot) + return ..() + +//////////////////////// +/// Armor /// +//////////////////////// + +/mob/living/simple_animal/hostile/bloodsucker/possessedarmor/death() + if(upgraded) + new /obj/structure/bloodsucker/possessedarmor/upgraded(src.loc) + else + new /obj/structure/bloodsucker/possessedarmor(src.loc) + qdel(src) + ..() \ No newline at end of file diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_objectives.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_objectives.dm index 95961642552d..3a6864250cc3 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_objectives.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_objectives.dm @@ -217,7 +217,7 @@ // GENERATE! /datum/objective/bloodsucker/gourmand/New() - target_amount = rand(1250,2000) + target_amount = rand(750, 1250) ..() // EXPLANATION diff --git a/code/modules/antagonists/bloodsuckers/bloodsuckers.dm b/code/modules/antagonists/bloodsuckers/bloodsuckers.dm index 7b6ed4ee7c02..b002ad011e29 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsuckers.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsuckers.dm @@ -41,6 +41,10 @@ var/datum/martial_art/frenzygrab/frenzygrab = new ///You get assigned a Clan once you Rank up enough var/my_clan = NONE + ///How many clan points you have -> Used in clans in order to assert certain limits // Upgrades and stuff + var/clanpoints = 0 + ///How much progress have you done on your clan + var/clanprogress = 0 ///Vassals under my control. Periodically remove the dead ones. var/list/datum/antagonist/vassal/vassals = list() @@ -186,7 +190,7 @@ /datum/antagonist/bloodsucker/admin_add(datum/mind/new_owner, mob/admin) var/levels = input("How many unspent Ranks would you like [new_owner] to have?","Bloodsucker Rank", bloodsucker_level_unspent) as null | num var/msg = " made [key_name_admin(new_owner)] into \a [name]" - if(!isnull(levels)) + if(levels > 1) bloodsucker_level_unspent = levels msg += " with [levels] extra unspent Ranks." message_admins("[key_name_admin(usr)][msg]") @@ -376,7 +380,7 @@ var/datum/antagonist/vassal/vassaldatum = IS_VASSAL(owner.current) if(!owner || !owner.current || vassaldatum) return - bloodsucker_level_unspent++ //same thing as below + bloodsucker_level_unspent++ passive_blood_drain -= 0.03 * bloodsucker_level //do something. It's here because if you are gaining points through other means you are doing good // Spend Rank Immediately? if(istype(owner.current.loc, /obj/structure/closet/crate/coffin)) @@ -428,6 +432,10 @@ if(!choice || !options[choice]) to_chat(owner.current, span_notice("You prevent your blood from thickening just yet, but you may try again later.")) return + if((locate(options[choice]) in powers)) + to_chat(owner.current, span_notice("You prevent your blood from thickening just yet, but you may try again later.")) + return + // Prevent Bloodsuckers from purchasing a power while outside of their Coffin. if(!istype(owner.current.loc, /obj/structure/closet/crate/coffin)) to_chat(owner.current, span_warning("You must be in your Coffin to purchase Powers.")) return diff --git a/code/modules/antagonists/bloodsuckers/powers/_powers.dm b/code/modules/antagonists/bloodsuckers/powers/_powers.dm index 66225e2fa896..3c87e578f299 100644 --- a/code/modules/antagonists/bloodsuckers/powers/_powers.dm +++ b/code/modules/antagonists/bloodsuckers/powers/_powers.dm @@ -22,7 +22,7 @@ /// Requirement flags for checks check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY|BP_CANT_USE_WHILE_STAKED|BP_CANT_USE_WHILE_INCAPACITATED|BP_CANT_USE_WHILE_UNCONSCIOUS /// Who can purchase the Power - var/purchase_flags = NONE // BLOODSUCKER_CAN_BUY|TREMERE_CAN_BUY|VASSAL_CAN_BUY|HUNTER_CAN_BUY + var/purchase_flags = NONE // BLOODSUCKER_CAN_BUY|LASOMBRA_CAN_BUY|VASSAL_CAN_BUY|HUNTER_CAN_BUY // COOLDOWNS // ///Timer between Power uses. @@ -39,6 +39,9 @@ var/bloodcost = 0 ///The cost to MAINTAIN this Power - Only used for Constant Cost Powers var/constant_bloodcost = 0 + ///If the Power has any additional descriptions coming from either 3rd partys or the power itself + var/additional_desc = FALSE + var/additional_text // Modify description to add cost. /datum/action/bloodsucker/New(Target) @@ -47,6 +50,8 @@ /datum/action/bloodsucker/proc/UpdateDesc() desc = initial(desc) + if(additional_desc) + desc += "

ASCENDED: [additional_text]" if(bloodcost > 0) desc += "

COST: [bloodcost] Blood" if(constant_bloodcost > 0) @@ -55,6 +60,8 @@ desc += "

SINGLE USE:
[name] can only be used once per night." if(level_current > 0) desc += "

LEVEL: [name] is currently level [level_current]." + if(cooldown > 0) + desc += "

COOLDOWN: [name] has a cooldown of [cooldown / 10] seconds." /datum/action/bloodsucker/Destroy() bloodsuckerdatum_power = null @@ -178,33 +185,32 @@ /datum/action/bloodsucker/proc/ActivatePower() active = TRUE if(power_flags & BP_AM_TOGGLE) - RegisterSignal(owner, COMSIG_LIVING_BIOLOGICAL_LIFE, .proc/UsePower) - owner.log_message("used [src].", LOG_ATTACK, color="red") + START_PROCESSING(SSprocessing, src) + owner.log_message("used [src][bloodcost != 0 ? " at the cost of [bloodcost]" : ""].", LOG_ATTACK, color="red") UpdateButtonIcon() /datum/action/bloodsucker/proc/DeactivatePower() if(power_flags & BP_AM_TOGGLE) - UnregisterSignal(owner, COMSIG_LIVING_BIOLOGICAL_LIFE) + STOP_PROCESSING(SSprocessing, src) + if(power_flags & BP_AM_SINGLEUSE) + RemoveAfterUse() + return active = FALSE UpdateButtonIcon() StartCooldown() ///Used by powers that are continuously active (That have BP_AM_TOGGLE flag) -/datum/action/bloodsucker/proc/UsePower(mob/living/user) - if(!active) // Power isn't active? Then stop here, so we dont keep looping UsePower for a non existent Power. - return FALSE - if(!ContinueActive(user)) // We can't afford the Power? Deactivate it. +/datum/action/bloodsucker/process(delta_time) + if(!ContinueActive(owner)) // We can't afford the Power? Deactivate it. DeactivatePower() return FALSE // We can keep this up (For now), so Pay Cost! - if(!(power_flags & BP_AM_COSTLESS_UNCONSCIOUS) && user.stat != CONSCIOUS) + if(!(power_flags & BP_AM_COSTLESS_UNCONSCIOUS) && owner.stat != CONSCIOUS) bloodsuckerdatum_power?.AddBloodVolume(-constant_bloodcost) return TRUE /// Checks to make sure this power can stay active /datum/action/bloodsucker/proc/ContinueActive(mob/living/user, mob/living/target) - if(!active) - return FALSE if(!user) return FALSE if(!constant_bloodcost > 0 || user.blood_volume > 0) diff --git a/code/modules/antagonists/bloodsuckers/powers/cloak.dm b/code/modules/antagonists/bloodsuckers/powers/cloak.dm index 1f9dba8f2301..8bf79fce00ae 100644 --- a/code/modules/antagonists/bloodsuckers/powers/cloak.dm +++ b/code/modules/antagonists/bloodsuckers/powers/cloak.dm @@ -14,6 +14,7 @@ constant_bloodcost = 0.2 cooldown = 5 SECONDS var/was_running + var/runbound = TRUE /// Must have nobody around to see the cloak /datum/action/bloodsucker/cloak/CheckCanUse(mob/living/carbon/user) @@ -29,23 +30,26 @@ . = ..() var/mob/living/user = owner was_running = (user.m_intent == MOVE_INTENT_RUN) - if(was_running) - user.toggle_move_intent() + if(runbound) + if(was_running) + user.toggle_move_intent() user.digitalinvis = 1 user.digitalcamo = 1 to_chat(user, span_notice("You put your Cloak of Darkness on.")) -/datum/action/bloodsucker/cloak/UsePower(mob/living/user) +/datum/action/bloodsucker/cloak/process(delta_time) // Checks that we can keep using this. . = ..() if(!.) return + var/mob/living/user = owner animate(user, alpha = max(25, owner.alpha - min(75, 10 + 5 * level_current)), time = 1.5 SECONDS) // Prevents running while on Cloak of Darkness - if(user.m_intent != MOVE_INTENT_WALK) - to_chat(owner, span_warning("You attempt to run, crushing yourself.")) - user.toggle_move_intent() - user.adjustBruteLoss(rand(5,15)) + if(runbound) + if(user.m_intent != MOVE_INTENT_WALK) + to_chat(owner, span_warning("You attempt to run, crushing yourself.")) + user.toggle_move_intent() + user.adjustBruteLoss(rand(5,15)) /datum/action/bloodsucker/cloak/ContinueActive(mob/living/user, mob/living/target) . = ..() @@ -63,6 +67,55 @@ animate(user, alpha = 255, time = 1 SECONDS) user.digitalinvis = 0 user.digitalcamo = 0 - if(was_running && user.m_intent == MOVE_INTENT_WALK) - user.toggle_move_intent() + if(runbound) + if(was_running && user.m_intent == MOVE_INTENT_WALK) + user.toggle_move_intent() to_chat(user, span_notice("You take your Cloak of Darkness off.")) + +/datum/action/bloodsucker/cloak/shadow + name = "Cloak of Shadows" + desc = "Empowered to the abyss, fortitude will now grant you a shadow armor, making your grip harder to escape and reduce projectile damage while in darkness." + button_icon = 'icons/mob/actions/actions_lasombra_bloodsucker.dmi' + background_icon_state_on = "lasombra_power_on" + background_icon_state_off = "lasombra_power_off" + icon_icon = 'icons/mob/actions/actions_lasombra_bloodsucker.dmi' + button_icon_state = "power_state" + purchase_flags = LASOMBRA_CAN_BUY + constant_bloodcost = 0.3 + runbound = FALSE + +/obj/item/clothing/neck/yogs/sith_cloak/cloak + name = "cloak of shadows" + desc = "Fancy stuff." + icon = 'icons/obj/vamp_obj.dmi' + alternate_worn_icon = 'icons/obj/vamp_obj.dmi' + icon_state = "cloak" + item_state = "cloak" + armor = list("melee" = 0, "bullet" = 0, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 10, "acid" = 100) //good if you haven nothing + +/obj/item/clothing/neck/yogs/sith_cloak/cloak/Initialize() + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, BLOODSUCKER_TRAIT) + START_PROCESSING(SSobj, src) + +/obj/item/clothing/neck/yogs/sith_cloak/cloak/process() + var/turf/T = get_turf(src) + var/light_amount = T.get_lumcount() + if(light_amount > 0.2) + qdel(src) + STOP_PROCESSING(SSobj, src) + src.visible_message(span_warning("The cape desintegrates as the light contacts it's surface!")) + +/datum/action/bloodsucker/cloak/shadow/ActivatePower() + . = ..() + var/turf/T = get_turf(owner) + var/light_amount = T.get_lumcount() + if(light_amount <= 0.2) + if(!owner.get_item_by_slot(SLOT_NECK)) + owner.equip_to_slot_or_del( new /obj/item/clothing/neck/yogs/sith_cloak/cloak(null), SLOT_NECK) + +/datum/action/bloodsucker/cloak/shadow/DeactivatePower() + . = ..() + var/obj/item/I = owner.get_item_by_slot(SLOT_NECK) + if(istype(I, /obj/item/clothing/neck/yogs/sith_cloak/cloak)) + qdel(I) \ No newline at end of file diff --git a/code/modules/antagonists/bloodsuckers/powers/feed.dm b/code/modules/antagonists/bloodsuckers/powers/feed.dm index 0f5c19e440e4..963dc9ccac8e 100644 --- a/code/modules/antagonists/bloodsuckers/powers/feed.dm +++ b/code/modules/antagonists/bloodsuckers/powers/feed.dm @@ -225,7 +225,8 @@ ADD_TRAIT(user, TRAIT_MUTE, BLOODSUCKER_TRAIT) // My mouth is full! user.Immobilize(10 SECONDS) // Prevents spilling blood accidentally. -/datum/action/bloodsucker/feed/UsePower(mob/living/user) +/datum/action/bloodsucker/feed/process(delta_time) + var/mob/living/user = owner if(!ContinueActive(user, feed_target)) if(amSilent) to_chat(user, span_warning("Your feeding has been interrupted... but [feed_target.p_they()] didn't seem to notice you.")) diff --git a/code/modules/antagonists/bloodsuckers/powers/fortitude.dm b/code/modules/antagonists/bloodsuckers/powers/fortitude.dm index a981d84df7c4..d8c706f3de09 100644 --- a/code/modules/antagonists/bloodsuckers/powers/fortitude.dm +++ b/code/modules/antagonists/bloodsuckers/powers/fortitude.dm @@ -40,11 +40,12 @@ if(was_running) bloodsucker_user.toggle_move_intent() -/datum/action/bloodsucker/fortitude/UsePower(mob/living/carbon/user) +/datum/action/bloodsucker/fortitude/process(delta_time) // Checks that we can keep using this. . = ..() if(!.) return + var/mob/living/carbon/user = owner /// Prevents running while on Fortitude if(user.m_intent != MOVE_INTENT_WALK) user.toggle_move_intent() @@ -80,3 +81,51 @@ name = "Flow" desc = "Use the arts to Flow, giving shove and stun immunity, as well as brute, burn, dismember and pierce resistance. You cannot run while this is active." purchase_flags = HUNTER_CAN_BUY + +/datum/action/bloodsucker/fortitude/shadow + name = "Shadow Armor" + desc = "Empowered to the abyss, fortitude will now grant you a shadow armor, making your grip harder to escape and reduce projectile damage while in darkness." + button_icon = 'icons/mob/actions/actions_lasombra_bloodsucker.dmi' + background_icon_state_on = "lasombra_power_on" + background_icon_state_off = "lasombra_power_off" + icon_icon = 'icons/mob/actions/actions_lasombra_bloodsucker.dmi' + button_icon_state = "power_armor" + purchase_flags = LASOMBRA_CAN_BUY + constant_bloodcost = 0.3 + var/mutable_appearance/armor_overlay + +/datum/action/bloodsucker/fortitude/shadow/ActivatePower() + . = ..() + var/mob/living/carbon/human/user = owner + var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) + armor_overlay = mutable_appearance('icons/obj/vamp_obj.dmi', "fortarmor") + var/turf/T = get_turf(owner) + var/light_amount = T.get_lumcount() + if(light_amount <= 0.2) + owner.add_overlay(armor_overlay) + bloodsuckerdatum.frenzygrab.teach(user, TRUE) + to_chat(user, span_notice("Shadow tentacles form and attach themselves to your body, you feel as if your muscles have merged with the shadows!")) + var/datum/species/user_species = user.dna.species + user_species.punchdamagelow += 0.5 * level_current + user_species.punchdamagehigh += 0.5 * level_current + +/datum/action/bloodsucker/fortitude/shadow/process() + . = ..() + var/turf/T = owner.loc + var/light_amount = T.get_lumcount() + var/mob/living/carbon/user = owner + var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) + if(light_amount > 0.2) + owner.cut_overlay(armor_overlay) + bloodsuckerdatum.frenzygrab.remove(user) + to_chat(user, span_warning("As you enter in contact with the light, the tentacles dissipate!")) + +/datum/action/bloodsucker/fortitude/shadow/DeactivatePower() + . = ..() + var/mob/living/carbon/human/user = owner + var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) + owner.cut_overlay(armor_overlay) + bloodsuckerdatum.frenzygrab.remove(user) + var/datum/species/user_species = user.dna.species + user_species.punchdamagelow -= 0.5 / level_current + user_species.punchdamagehigh -= 0.5 / level_current \ No newline at end of file diff --git a/code/modules/antagonists/bloodsuckers/powers/gangrel.dm b/code/modules/antagonists/bloodsuckers/powers/gangrel.dm index 7a69094ecdf8..0e9130da72db 100644 --- a/code/modules/antagonists/bloodsuckers/powers/gangrel.dm +++ b/code/modules/antagonists/bloodsuckers/powers/gangrel.dm @@ -4,6 +4,10 @@ background_icon_state = "gangrel_power_off" background_icon_state_on = "gangrel_power_on" background_icon_state_off = "gangrel_power_off" + purchase_flags = GANGREL_CAN_BUY + power_flags = BP_AM_TOGGLE|BP_AM_STATIC_COOLDOWN + check_flags = BP_AM_COSTLESS_UNCONSCIOUS + cooldown = 10 SECONDS /datum/action/bloodsucker/gangrel/transform name = "Transform" @@ -15,125 +19,64 @@ Some forms have special abilites to them depending on what abilites you have.\n\ Be wary of your blood status when using it, takes 10 seconds of standing still to transform!" power_flags = BP_AM_SINGLEUSE|BP_AM_STATIC_COOLDOWN - check_flags = BP_AM_COSTLESS_UNCONSCIOUS - purchase_flags = NONE bloodcost = 100 - cooldown = 10 SECONDS - -/mob/living/simple_animal/hostile/bloodsucker - var/mob/living/controller - -/mob/living/simple_animal/hostile/bloodsucker/werewolf - name = "werewolf" - desc = "Who could imagine this things 'were' actually real?" - icon = 'icons/mob/bloodsucker_mobs.dmi' - icon_state = "wolfform" - icon_living = "wolfform" - icon_dead = "batform" - icon_gib = "batform" - speed = -2 - response_help = "touches" - response_disarm = "flails at" - response_harm = "punches" - speak_chance = 0 - maxHealth = 800 - health = 800 - see_in_dark = 10 - harm_intent_damage = 20 - melee_damage_lower = 20 - melee_damage_upper = 20 - attacktext = "violently mawls" - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 5) - faction = list("hostile", "bloodhungry") - attack_sound = 'sound/weapons/slash.ogg' - obj_damage = 50 - environment_smash = ENVIRONMENT_SMASH_WALLS - mob_size = MOB_SIZE_LARGE - movement_type = GROUND - gold_core_spawnable = FALSE - speak_emote = list("gnashes") - -/mob/living/simple_animal/hostile/bloodsucker/giantbat - name = "giant bat" - desc = "That's a fat ass bat." - icon = 'icons/mob/bloodsucker_mobs.dmi' - icon_state = "batform" - icon_living = "batform" - icon_dead = "bat_dead" - icon_gib = "bat_dead" - move_to_delay = 2 - response_help = "touches" - response_disarm = "flails at" - response_harm = "punches" - speak_chance = 0 - maxHealth = 700 - health = 700 - see_in_dark = 10 - harm_intent_damage = 20 - melee_damage_lower = 20 - melee_damage_upper = 20 - attacktext = "bites" - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 3) - faction = list("hostile", "bloodhungry") - attack_sound = 'sound/weapons/bite.ogg' - obj_damage = 35 - pass_flags = PASSTABLE | PASSCOMPUTER - environment_smash = ENVIRONMENT_SMASH_STRUCTURES - mob_size = MOB_SIZE_LARGE - movement_type = FLYING - gold_core_spawnable = FALSE - speak_emote = list("loudly squeaks") - -/mob/living/simple_animal/hostile/bloodsucker/Destroy() //makes us alive again - if(controller && mind) - visible_message(span_warning("[src] rapidly transforms into a humanoid figure!"), span_warning("You forcefully return to your normal form.")) - playsound(src, 'sound/weapons/slash.ogg', 50, 1) - if(mind) - mind.transfer_to(controller) - controller.forceMove(get_turf(src)) - return ..() - -/mob/living/simple_animal/hostile/bloodsucker/death() - if(controller) - mind.transfer_to(controller) - controller.death() - addtimer(CALLBACK(src, .proc/gib), 20 SECONDS) - ..() /datum/action/bloodsucker/gangrel/transform/ActivatePower() var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(/datum/antagonist/bloodsucker) var/mob/living/carbon/human/user = owner var/datum/species/user_species = user.dna.species + var/minortransformdone = FALSE + var/mediumtransformdone = FALSE user.Immobilize(10 SECONDS) if(!do_mob(user, user, 10 SECONDS, 1)) return switch(bloodsuckerdatum.total_blood_drank) if(0 to 500) - if(iscatperson(user)) - user.set_species(/datum/species/lizard) - playsound(user.loc, 'sound/voice/lizard/hiss.ogg', 50) - else - user.set_species(/datum/species/human/felinid) - playsound(user.loc, 'sound/voice/feline/meow1.ogg', 50) + if(!minortransformdone) + if(iscatperson(user)) + user.set_species(/datum/species/lizard) + playsound(user.loc, 'sound/voice/lizard/hiss.ogg', 50) + else + user.set_species(/datum/species/human/felinid) + playsound(user.loc, 'sound/voice/feline/meow1.ogg', 50) + if(DIGITIGRADE in user_species.species_traits) + user_species.species_traits -= DIGITIGRADE + minortransformdone = TRUE + user_species.punchdamagelow += 5.0 + user_species.punchdamagehigh += 5.0 //stronk + user_species.armor += 30 + to_chat(user, span_notice("You aren't strong enough to morph into something stronger! But you do certainly feel more feral and stronger than before.")) + return + if(minortransformdone) + user_species.punchdamagelow += 1 + user_species.punchdamagehigh += 1 + user_species.armor += 2.5 + to_chat(user, span_notice("Using a bit more of blood you manage to get a tad stronger, but you still haven't evolved your ability yet.")) + bloodsuckerdatum.AddBloodVolume(50) + if(500 to 1000) + if(!mediumtransformdone) + user.set_species(/datum/species/gorilla) + playsound(user.loc, 'sound/creatures/gorilla.ogg', 50) if(DIGITIGRADE in user_species.species_traits) user_species.species_traits -= DIGITIGRADE - user_species.punchdamagehigh += 5.0 //stronk - user_species.armor += 30 - to_chat(user, span_notice("You aren't strong enough to morph into something stronger! But you do certainly feel more feral and stronger than before.")) - if(500 to 1000) - user.set_species(/datum/species/gorilla) - to_chat(owner, span_notice("You transform into a gorrila-ey beast, you feel stronger!")) - playsound(user.loc, 'sound/creatures/gorilla.ogg', 50) - if(DIGITIGRADE in user_species.species_traits) - user_species.species_traits -= DIGITIGRADE - user_species.punchdamagehigh += 7.5 //very stronk - user_species.armor += 35 + mediumtransformdone = TRUE + user_species.punchdamagelow += 7.5 + user_species.punchdamagehigh += 7.5 //very stronk + user_species.armor += 35 + to_chat(owner, span_notice("You transform into a gorrila-ey beast, you feel stronger!")) + return + if(mediumtransformdone) + user_species.punchdamagelow += 2 + user_species.punchdamagehigh += 2 + user_species.armor += 5 + to_chat(owner, span_notice("Using a bit more of blood you manage to get a tad stronger, but you still haven't evolved your ability yet.")) + bloodsuckerdatum.AddBloodVolume(25) if(1500 to INFINITY) var/mob/living/simple_animal/hostile/bloodsucker/giantbat/gb if(!gb || gb.stat == DEAD) gb = new /mob/living/simple_animal/hostile/bloodsucker/giantbat(user.loc) user.forceMove(gb) - gb.controller = user + gb.bloodsucker = user user.mind.transfer_to(gb) var/list/bat_powers = list(new /datum/action/bloodsucker/gangrel/transform_back,) for(var/datum/action/bloodsucker/power in bloodsuckerdatum.powers) @@ -153,7 +96,7 @@ if(!ww || ww.stat == DEAD) ww = new /mob/living/simple_animal/hostile/bloodsucker/werewolf(user.loc) user.forceMove(ww) - ww.controller = user + ww.bloodsucker = user user.mind.transfer_to(ww) var/datum/action/bloodsucker/gangrel/transform_back/E = new E.Grant(ww) @@ -168,11 +111,7 @@ power_explanation = "Transform:\n\ Regress back to your humanoid form early, requires you to stand still.\n\ Beware you will not be able to transform again until the night passes!" - power_flags = BP_AM_TOGGLE|BP_AM_STATIC_COOLDOWN - check_flags = BP_AM_COSTLESS_UNCONSCIOUS - purchase_flags = NONE - cooldown = 10 SECONDS - + /datum/action/bloodsucker/gangrel/transform_back/ActivatePower() var/mob/living/user = owner if(!do_mob(user, user, 10 SECONDS)) @@ -181,7 +120,12 @@ qdel(owner) qdel(bs) . = ..() - +/* +////////////////||\\\\\\\\\\\\\\\\ +\\ Bat Only // +// Powers \\ +\\\\\\\\\\\\\\\\||//////////////// +*/ /datum/action/bloodsucker/targeted/haste/batdash name = "Flying Haste" desc = "Propulse yourself into a position of advantage." @@ -196,7 +140,7 @@ Created from your Immortal Haste ability." power_flags = BP_AM_TOGGLE|BP_AM_STATIC_COOLDOWN check_flags = NONE - purchase_flags = NONE + purchase_flags = GANGREL_CAN_BUY bloodcost = 0 cooldown = 15 SECONDS @@ -224,7 +168,7 @@ Created from your Mesmerize ability." power_flags = BP_AM_TOGGLE|BP_AM_STATIC_COOLDOWN check_flags = NONE - purchase_flags = NONE + purchase_flags = GANGREL_CAN_BUY bloodcost = 0 cooldown = 12.5 SECONDS @@ -236,7 +180,6 @@ /datum/action/bloodsucker/targeted/bloodbolt/FireTargetedPower(atom/target_atom) . = ..() - var/mob/living/user = owner to_chat(user, span_warning("You fire a blood bolt!")) user.changeNext_move(CLICK_CD_RANGE) @@ -276,11 +219,8 @@ Knocksback and immobilizes people adjacent to you.\n\ Has a low recharge time and may be helpful in meelee situations!\n\ Created from your Brawn ability." - power_flags = BP_AM_TOGGLE|BP_AM_STATIC_COOLDOWN check_flags = NONE - purchase_flags = NONE bloodcost = 0 - cooldown = 10 SECONDS /datum/action/bloodsucker/gangrel/wingslam/ActivatePower() var/mob/living/user = owner @@ -307,4 +247,371 @@ user.do_attack_animation(M, ATTACK_EFFECT_SMASH) var/send_dir = get_dir(user, M) var/turf/turf_thrown_at = get_ranged_target_turf(M, send_dir, 5) - M.throw_at(turf_thrown_at, 5, TRUE, user) \ No newline at end of file + M.throw_at(turf_thrown_at, 5, TRUE, user) + +/* //\\ //\\ +////////////////||\\\\\\\\\\\\\\\\ +\\ Wolf Only // +// Powers \\ +\\\\\\\\\\\\\\\\||//////////////// +*/ + +/datum/action/bloodsucker/targeted/feast + name = "Feast" + desc = "DEVOUR THE WEAKLINGS, CAUSE THEM HARM. FEED. ME." + button_icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' + icon_icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' + button_icon_state = "power_feast" + background_icon_state_on = "wolf_power_on" + background_icon_state_off = "wolf_power_off" + power_explanation = "Fortitude:\n\ + Activating Fortitude will provide pierce, stun and dismember immunity.\n\ + You will additionally gain resistance to Brute and Stamina damge, scaling with level.\n\ + While using Fortitude, attempting to run will crush you.\n\ + At level 4, you gain complete stun immunity.\n\ + Higher levels will increase Brute and Stamina resistance." + power_flags = BP_AM_TOGGLE + check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY|BP_AM_COSTLESS_UNCONSCIOUS + bloodcost = 0 + cooldown = 10 SECONDS + target_range = 1 + power_activates_immediately = TRUE + prefire_message = "WHOM SHALL BE DEVOURED." + +/datum/action/bloodsucker/targeted/feast/FireTargetedPower(atom/target_atom) + if(isturf(target_atom)) + return + owner.face_atom(target_atom) + var/mob/living/simple_animal/hostile/bloodsucker/werewolf/user = owner + var/mob/living/carbon/human/target = target_atom + if(target.stat == DEAD) + user.devour(target) + PowerActivatedSuccessfully() + return + user.do_attack_animation(target, ATTACK_EFFECT_BITE) + var/affecting = pick(BODY_ZONE_CHEST, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) + playsound(get_turf(target), 'sound/weapons/bite.ogg', 60, 1, -1) + target.apply_damage(35, BRUTE, affecting, target.run_armor_check(affecting, "melee", armour_penetration = 10), sharpness = SHARP_EDGED) + target.visible_message(span_danger("[user] takes a large bite out of [target]!"), \ + span_userdanger("[user] takes a large bite out of you!")) + PowerActivatedSuccessfully() + +/datum/action/bloodsucker/gangrel/wolfortitude + name = "Wolftitude" + desc = "Withstand egregious physical wounds and walk away from attacks that would stun, pierce, and dismember lesser beings." + button_icon_state = "power_wort" + background_icon_state_on = "wolf_power_on" + background_icon_state_off = "wolf_power_off" + power_explanation = "Fortitude:\n\ + Activating Fortitude will provide pierce, stun and dismember immunity.\n\ + You will additionally gain resistance to Brute and Stamina damge, scaling with level.\n\ + While using Fortitude, attempting to run will crush you.\n\ + At level 4, you gain complete stun immunity.\n\ + Higher levels will increase Brute and Stamina resistance." + power_flags = BP_AM_TOGGLE + check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY|BP_AM_COSTLESS_UNCONSCIOUS + bloodcost = 0 + cooldown = 8 SECONDS + +/datum/action/bloodsucker/gangrel/wolfortitude/ActivatePower() + . = ..() + to_chat(owner, span_notice("Your fur and claws harden, becoming as hard as steel.")) + var/mob/living/simple_animal/hostile/A = owner + A.maxHealth = initial(A.maxHealth) * 1.2 + A.health = min(initial(A.maxHealth), initial(A.health) * 1.2) + A.set_varspeed(initial(A.speed) + 2) // slower + A.harm_intent_damage = initial(A.harm_intent_damage) + 10 + A.melee_damage_lower = initial(A.melee_damage_lower) + 10 + A.melee_damage_upper = initial(A.melee_damage_upper) + 10 + +/datum/action/bloodsucker/gangrel/wolfortitude/DeactivatePower() + . = ..() + var/mob/living/simple_animal/hostile/A = owner + A.maxHealth = initial(A.maxHealth) / 1.2 + A.health = min(initial(A.maxHealth), initial(A.health) / 1.2) + A.set_varspeed(initial(A.speed)) + A.harm_intent_damage = initial(A.harm_intent_damage) - 10 + A.melee_damage_lower = initial(A.melee_damage_lower) - 10 + A.melee_damage_upper = initial(A.melee_damage_upper) - 10 + +/datum/action/bloodsucker/targeted/pounce + name = "Pounce" + desc = "GRAPPLE THEM TO THE GROUND AND BITE THEIR ORGANS OUT." + button_icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' + icon_icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' + button_icon_state = "power_pounce" + background_icon_state_on = "wolf_power_on" + background_icon_state_off = "wolf_power_off" + power_explanation = "Predatory Lunge:\n\ + Click any player to instantly dash at them if above power level 3, aggressively grabbing them.\n\ + If not on level 3, you will have to charge your lunge for a while. During this time you'll have to stand still for lunge to work\n\ + You cannot use the Power if you are aggressively grabbed.\n\ + If the target is wearing riot gear or is a Monster Hunter, you will merely passively grab them.\n\ + If grabbed from behind or from the darkness (Cloak of Darkness counts) with a power level at or above 4, will additionally knock the target down.\n\ + Higher levels will increase the knockdown dealt to enemies." + power_flags = BP_AM_TOGGLE + check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY|BP_CANT_USE_WHILE_INCAPACITATED|BP_CANT_USE_WHILE_UNCONSCIOUS + purchase_flags = BLOODSUCKER_CAN_BUY|VASSAL_CAN_BUY + bloodcost = 0 + cooldown = 10 SECONDS + target_range = 6 + power_activates_immediately = FALSE + +/datum/action/bloodsucker/targeted/pounce/ActivatePower() + . = ..() + var/mob/living/simple_animal/hostile/bloodsucker/werewolf/A = owner + A.icon_state = initial(A.icon_state) + "_pounce" + A.icon_living = initial(A.icon_state) + "_pounce" + A.update_body() + +/datum/action/bloodsucker/targeted/pounce/DeactivatePower() + . = ..() + var/mob/living/simple_animal/hostile/bloodsucker/werewolf/A = owner + A.icon_state = initial(A.icon_state) + A.icon_living = initial(A.icon_state) + A.update_body() + +/datum/action/bloodsucker/targeted/pounce/FireTargetedPower(atom/target_atom) + . = ..() + var/mob/living/simple_animal/hostile/bloodsucker/werewolf/user = owner + owner.face_atom(target_atom) + if(iscarbon(target_atom)) + var/mob/living/carbon/target = target_atom + var/turf/targeted_turf = get_turf(target) + var/safety = get_dist(user, targeted_turf) * 3 + 1 + var/consequetive_failures = 0 + while(--safety && !target.Adjacent(user)) + if(!step_to(user, targeted_turf)) + consequetive_failures++ + if(consequetive_failures >= 3) // If 3 steps don't work, just stop. + break + if(target.stat == DEAD) + if(!user.Adjacent(target)) + return + user.devour(target) + PowerActivatedSuccessfully() + return + target.Knockdown(8 SECONDS) + target.Paralyze(2 SECONDS) + PowerActivatedSuccessfully() + +/datum/action/bloodsucker/targeted/pounce/CheckValidTarget(atom/target_atom) + . = ..() + if(!.) + return FALSE + return isliving(target_atom) + +/datum/action/bloodsucker/targeted/pounce/CheckCanTarget(atom/target_atom) + // DEFAULT CHECKS (Distance) + . = ..() + // Target Type: Living + if(isliving(target_atom)) + return TRUE + return FALSE + +/datum/action/bloodsucker/gangrel/howl + name = "Howl" + desc = "BREATHE IN AND BREATH OUT AS MUCH AS POSSIBLE. KNOCKDOWNS AND CONFUSES NEARBY WEAKLINGS." + button_icon_state = "power_howl" + background_icon_state_on = "wolf_power_on" + background_icon_state_off = "wolf_power_off" + power_explanation = "Fortitude:\n\ + Activating Fortitude will provide pierce, stun and dismember immunity.\n\ + You will additionally gain resistance to Brute and Stamina damge, scaling with level.\n\ + While using Fortitude, attempting to run will crush you.\n\ + At level 4, you gain complete stun immunity.\n\ + Higher levels will increase Brute and Stamina resistance." + power_flags = BP_AM_TOGGLE + check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY|BP_AM_COSTLESS_UNCONSCIOUS + bloodcost = 0 + cooldown = 15 SECONDS + +/datum/action/bloodsucker/gangrel/howl/ActivatePower() + . = ..() + var/mob/living/simple_animal/hostile/bloodsucker/werewolf/A = owner + A.visible_message(span_danger("[A] inhales a ton of air!"), span_warning("You prepare to howl!")) + if(!do_mob(A, A, 2.5 SECONDS, TRUE)) + return + playsound(A.loc, 'yogstation/sound/creatures/darkspawn_howl.ogg', 50, 1) + A.visible_message(span_userdanger("[A] let's out a chilling howl!"), span_boldwarning("You howl, confusing and deafening nearby mortals.")) + for(var/mob/target in range(3, A)) + if(target == A && target == A.bloodsucker) + continue + if(IS_BLOODSUCKER(target) || IS_VASSAL(target)) + continue + if(iscarbon(target)) + var/mob/living/carbon/M = target + M.confused += 15 + M.adjustEarDamage(0, 50) + if(target.Adjacent(A)) + M.Knockdown(4 SECONDS) + M.Paralyze(0.1) + DeactivatePower() + +/datum/action/bloodsucker/gangrel/rabidism + name = "Rabidism" + desc = "UNLEASHES YOUR POTENTIAL OF AREA DAMAGE, BUT HURTS YOURSELF IN THE PROCESS, DEALS MORE DAMAGE TO STRUCTURES." + button_icon_state = "power_rabid" + background_icon_state_on = "wolf_power_on" + background_icon_state_off = "wolf_power_off" + power_explanation = "Rabidism:\n\ + Activating Fortitude will provide pierce, stun and dismember immunity.\n\ + You will additionally gain resistance to Brute and Stamina damge, scaling with level.\n\ + While using Fortitude, attempting to run will crush you.\n\ + At level 4, you gain complete stun immunity.\n\ + Higher levels will increase Brute and Stamina resistance." + power_flags = BP_AM_TOGGLE + check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY|BP_AM_COSTLESS_UNCONSCIOUS + bloodcost = 0 + cooldown = 20 SECONDS + +/datum/action/bloodsucker/gangrel/rabidism/ActivatePower() + . = ..() + var/mob/living/simple_animal/hostile/bloodsucker/werewolf/A = owner + A.environment_smash = ENVIRONMENT_SMASH_RWALLS + A.harm_intent_damage = initial(A.harm_intent_damage) - 10 + A.melee_damage_lower = initial(A.melee_damage_lower) - 10 + A.melee_damage_upper = initial(A.melee_damage_upper) - 10 + A.obj_damage = initial(A.obj_damage) * 3 + START_PROCESSING(SSprocessing, src) + spawn(10 SECONDS) + DeactivatePower() + +/datum/action/bloodsucker/gangrel/rabidism/process() + var/mob/living/simple_animal/hostile/bloodsucker/werewolf/A = owner + for(var/mob/living/all_targets in dview(1, get_turf(A))) + if(all_targets == A && all_targets == A.bloodsucker) + continue + A.UnarmedAttack(all_targets) //byongcontrol + +/datum/action/bloodsucker/gangrel/rabidism/DeactivatePower() + . = ..() + var/mob/living/simple_animal/hostile/bloodsucker/werewolf/A = owner + A.environment_smash = initial(A.environment_smash) + A.harm_intent_damage = initial(A.harm_intent_damage) + A.melee_damage_lower = initial(A.melee_damage_lower) + A.melee_damage_upper = initial(A.melee_damage_upper) + A.obj_damage = initial(A.obj_damage) + STOP_PROCESSING(SSprocessing, src) + +/datum/action/bloodsucker/targeted/tear + name = "Tear" + desc = "Tear in specific areas of a mortal's body and inflict great pain on them." + button_icon_state = "power_tear" + button_icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' + icon_icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' + background_icon_state_on = "gangrel_power_on" + background_icon_state_off = "gangrel_power_off" + power_explanation = "Tear:\n\ + Activating Fortitude will provide pierce, stun and dismember immunity.\n\ + You will additionally gain resistance to Brute and Stamina damge, scaling with level.\n\ + While using Fortitude, attempting to run will crush you.\n\ + At level 4, you gain complete stun immunity.\n\ + Higher levels will increase Brute and Stamina resistance." + power_flags = BP_AM_TOGGLE + check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY|BP_AM_COSTLESS_UNCONSCIOUS + bloodcost = 6 + cooldown = 20 SECONDS + var/mob/living/mauled + +/datum/action/bloodsucker/targeted/tear/FireTargetedPower(atom/target_atom) + . = ..() + var/mob/living/carbon/human/user = owner + mauled = target_atom + user.do_attack_animation(mauled, ATTACK_EFFECT_CLAW) + var/obj/item/bodypart/affecting = mauled.get_bodypart(ran_zone(user.zone_selected)) + playsound(get_turf(mauled), 'sound/weapons/slash.ogg', 60, 1, -1) + mauled.apply_damage(15, BRUTE, affecting, mauled.run_armor_check(affecting, "melee", armour_penetration = 10), sharpness = SHARP_EDGED) + START_PROCESSING(SSprocessing, src) + +/datum/action/bloodsucker/targeted/tear/process() + var/mob/living/carbon/human/user = owner + for(var/mob/living/victims in dview(1, get_turf(user))) + spawn(10) + if(!(victims == mauled)) + continue + if(IS_BLOODSUCKER(mauled)) + continue + if(!do_mob(user, victims, 1 SECONDS)) + STOP_PROCESSING(SSprocessing, src) + continue + var/datum/status_effect/saw_bleed/B = victims.has_status_effect(STATUS_EFFECT_SAWBLEED) + user.do_attack_animation(mauled, ATTACK_EFFECT_CLAW) + playsound(get_turf(mauled), 'sound/weapons/slash.ogg', 60, 1, -1) + if(!B) + victims.apply_status_effect(STATUS_EFFECT_SAWBLEED) + else + B.add_bleed(B.bleed_buildup) + +/datum/action/bloodsucker/targeted/tear/CheckValidTarget(atom/target_atom) + . = ..() + if(!.) + return FALSE + return isliving(target_atom) + +/datum/action/bloodsucker/targeted/tear/CheckCanTarget(atom/target_atom) + // DEFAULT CHECKS (Distance) + . = ..() + // Target Type: Living + if(isliving(target_atom)) + return TRUE + return FALSE + +/obj/item/clothing/neck/wolfcollar + name = "Wolf Legs" + desc = "damn" + icon_state = "collar" + item_state = "collar" + icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' + alternate_worn_icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' + armor = list("melee" = 0, "bullet" = 0, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 10, "acid" = 100) + body_parts_covered = NECK + +/obj/item/clothing/ears/wolfears + name = "Wolf Legs" + desc = "damn" + icon_state = "ears" + item_state = "ears" + icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' + alternate_worn_icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' + armor = list("melee" = 0, "bullet" = 0, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 10, "acid" = 100) + flags_inv = HIDEHAIR|HIDEFACE + alternate_worn_layer = ABOVE_BODY_FRONT_LAYER + + +/obj/item/clothing/gloves/wolfclaws + name = "Wolf Legs" + desc = "damn" + icon_state = "claws" + item_state = "claws" + icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' + alternate_worn_icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' + body_parts_covered = ARMS|HANDS + flags_inv = HIDEJUMPSUIT + var/datum/action/bloodsucker/targeted/tear/tearaction = new + +/obj/item/clothing/shoes/wolflegs + name = "Wolf Legs" + desc = "damn" + icon_state = "legs" + item_state = "legs" + icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' + alternate_worn_icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' + slowdown = SHOES_SLOWDOWN - 0.5 + body_parts_covered = GROIN|LEGS|FEET + +/obj/item/clothing/gloves/wolfclaws/equipped(mob/user, slot) + . = ..() + if(!ishuman(user)) + return + if(slot == SLOT_GLOVES) + var/mob/living/carbon/human/H = user + tearaction.Grant(H) + +/obj/item/clothing/gloves/wolfclaws/dropped(mob/user) + . = ..() + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + if(H.get_item_by_slot(SLOT_GLOVES) == src) + tearaction.Remove(H) diff --git a/code/modules/antagonists/bloodsuckers/powers/gohome.dm b/code/modules/antagonists/bloodsuckers/powers/gohome.dm index da45d8e9cdd3..d776a6b4382c 100644 --- a/code/modules/antagonists/bloodsuckers/powers/gohome.dm +++ b/code/modules/antagonists/bloodsuckers/powers/gohome.dm @@ -1,3 +1,8 @@ +#define GOHOME_START 0 +#define GOHOME_FLICKER_ONE 2 +#define GOHOME_FLICKER_TWO 4 +#define GOHOME_TELEPORT 6 + /datum/action/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." @@ -9,12 +14,19 @@ The power will cancel out if the Claimed Coffin is somehow destroyed. \n\ Immediately after activating, lights around the user will begin to flicker. \n\ Once the user teleports to their coffin, in their place will be a Rat or Bat." - power_flags = BP_AM_SINGLEUSE|BP_AM_STATIC_COOLDOWN + power_flags = BP_AM_TOGGLE|BP_AM_SINGLEUSE|BP_AM_STATIC_COOLDOWN check_flags = BP_CANT_USE_IN_FRENZY|BP_CANT_USE_WHILE_STAKED|BP_CANT_USE_WHILE_INCAPACITATED // You only get this once you've claimed a lair and Sol is near. purchase_flags = NONE + constant_bloodcost = 2 bloodcost = 100 cooldown = 100 SECONDS + ///What stage of the teleportation are we in + var/teleporting_stage = GOHOME_START + var/list/spawning_mobs = list( + /mob/living/simple_animal/mouse = 3, + /mob/living/simple_animal/hostile/retaliate/bat = 1, + ) /datum/action/bloodsucker/gohome/CheckCanUse(mob/living/carbon/user) . = ..() @@ -26,92 +38,94 @@ return FALSE return TRUE -/datum/action/bloodsucker/gohome/proc/flicker_lights(flicker_range, beat_volume) - for(var/obj/machinery/light/nearby_lights in view(flicker_range, get_turf(owner))) - nearby_lights.flicker(5) - playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', beat_volume, 1) - -/// IMPORTANT: Check for lair at every step! It might get destroyed. /datum/action/bloodsucker/gohome/ActivatePower() . = ..() to_chat(owner, span_notice("You focus on separating your consciousness from your physical form...")) - /// STEP ONE: Flicker Lights - flicker_lights(3, 20) - sleep(50) - flicker_lights(4, 40) - sleep(50) - flicker_lights(4, 60) - for(var/obj/machinery/light/nearby_lights in view(6, get_turf(owner))) - nearby_lights.flicker(5) - playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', 60, 1) - /// STEP TWO: Lights OFF? - /// CHECK: Still have Coffin? + +/datum/action/bloodsucker/gohome/process(delta_time) + . = ..() + if(!.) + return FALSE if(!bloodsuckerdatum_power.coffin) to_chat(owner, span_warning("Your coffin has been destroyed! You no longer have a destination.")) return FALSE - if(!owner) - return - /// SEEN?: (effects ONLY if there are witnesses! Otherwise you just POOF) + switch(teleporting_stage) + if(GOHOME_START) + INVOKE_ASYNC(src, .proc/flicker_lights, 3, 20) + if(GOHOME_FLICKER_ONE) + INVOKE_ASYNC(src, .proc/flicker_lights, 4, 40) + if(GOHOME_FLICKER_TWO) + INVOKE_ASYNC(src, .proc/flicker_lights, 4, 60) + if(GOHOME_TELEPORT) + INVOKE_ASYNC(src, .proc/teleport_to_coffin, owner) + teleporting_stage++ - /// Do Effects (seen by anyone) - var/am_seen = FALSE - /// Drop Stuff (seen by non-vamp) - var/drop_item = FALSE - // Only check if I'm not in a Locker or something. +/datum/action/bloodsucker/gohome/ContinueActive(mob/living/user, mob/living/target) + . = ..() + if(!.) + return FALSE if(!isturf(owner.loc)) - return - // A) Check for Darkness (we can just leave) + return FALSE + if(!bloodsuckerdatum_power.coffin) + to_chat(owner, span_warning("Your coffin has been destroyed! You no longer have a destination.")) + return FALSE + return TRUE + +/datum/action/bloodsucker/gohome/proc/flicker_lights(flicker_range, beat_volume) + for(var/obj/machinery/light/nearby_lights in view(flicker_range, get_turf(owner))) + nearby_lights.flicker(5) + playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', beat_volume, 1) + +/datum/action/bloodsucker/gohome/proc/teleport_to_coffin(mob/living/carbon/user) + var/drop_item = FALSE var/turf/current_turf = get_turf(owner) - if(current_turf && current_turf.lighting_object && current_turf.get_lumcount()>= 0.1) - // B) Check for Viewers + // If we aren't in the dark, anyone watching us will cause us to drop out stuff + if(current_turf && current_turf.lighting_object && current_turf.get_lumcount() >= 0.2) for(var/mob/living/watchers in viewers(world.view, get_turf(owner)) - owner) - if(watchers.client && !watchers.has_unlimited_silicon_privilege && !watchers.eye_blind) - am_seen = TRUE - if(!IS_BLOODSUCKER(watchers) && !IS_VASSAL(watchers)) - drop_item = TRUE - break - /// LOSE CUFFS - var/mob/living/carbon/user = owner + if(!watchers.client) + continue + if(watchers.has_unlimited_silicon_privilege) + continue + if(watchers.eye_blind) + continue + if(!IS_BLOODSUCKER(watchers) && !IS_VASSAL(watchers)) + drop_item = TRUE + break + // Drop all necessary items (handcuffs, legcuffs, items if seen) if(user.handcuffed) - var/obj/handcuffs = user.handcuffed + var/obj/item/handcuffs = user.handcuffed user.dropItemToGround(handcuffs) if(user.legcuffed) - var/obj/legcuffs = user.legcuffed + var/obj/item/legcuffs = user.legcuffed user.dropItemToGround(legcuffs) - /// SEEN! if(drop_item) - // DROP: Clothes, held items, and cuffs etc - // NOTE: Taken from unequip_everything() in inventory.dm. We need to - // *force* all items to drop, so we had to just gut the code out of it. - var/list/items = list() - items |= user.get_equipped_items() - for(var/belongings in items) - user.dropItemToGround(belongings, TRUE) - for(var/obj/item/held_posessions in owner.held_items) //drop_all_held_items() - user.dropItemToGround(held_posessions, TRUE) - /// POOF EFFECTS - if(am_seen) - playsound(get_turf(owner), 'sound/magic/summon_karp.ogg', 60, 1) - var/datum/effect_system/steam_spread/puff = new /datum/effect_system/steam_spread() - puff.effect_type = /obj/effect/particle_effect/smoke/vampsmoke - puff.set_up(3, 0, get_turf(owner)) - puff.start() + for(var/obj/item/literally_everything in owner) + owner.dropItemToGround(literally_everything, TRUE) + + playsound(current_turf, 'sound/magic/summon_karp.ogg', 60, 1) + var/datum/effect_system/steam_spread/bloodsucker/puff = new /datum/effect_system/steam_spread/bloodsucker() + puff.set_up(3, 0, current_turf) + puff.start() /// STEP FIVE: Create animal at prev location - var/mob/living/simple_animal/SA = pick(/mob/living/simple_animal/mouse,/mob/living/simple_animal/mouse,/mob/living/simple_animal/mouse, /mob/living/simple_animal/hostile/retaliate/bat) //prob(300) /mob/living/simple_animal/mouse, - new SA (owner.loc) + var/mob/living/simple_animal/new_mob = pick(spawning_mobs) + new new_mob(current_turf) /// TELEPORT: Move to Coffin & Close it! user.set_resting(TRUE, TRUE, FALSE) do_teleport(owner, bloodsuckerdatum_power.coffin, no_effects = TRUE, forced = TRUE, channel = TELEPORT_CHANNEL_QUANTUM) user.Stun(3 SECONDS, TRUE) - /// CLOSE LID: If fail, force me in. - if(!bloodsuckerdatum_power.coffin.close(owner)) - /// Puts me inside. - bloodsuckerdatum_power.coffin.insert(owner) + // Puts me inside. + if(!bloodsuckerdatum_power.coffin.insert(owner)) + // CLOSE LID: If fail, force me in. + bloodsuckerdatum_power.coffin.close(owner) playsound(bloodsuckerdatum_power.coffin.loc, bloodsuckerdatum_power.coffin.close_sound, 15, 1, -3) - bloodsuckerdatum_power.coffin.opened = FALSE - bloodsuckerdatum_power.coffin.density = TRUE - bloodsuckerdatum_power.coffin.update_icon() - // Lock Coffin - bloodsuckerdatum_power.coffin.LockMe(owner) - bloodsuckerdatum_power.Check_Begin_Torpor(FALSE) // Are we meant to enter Torpor here? + + DeactivatePower() + +/datum/effect_system/steam_spread/bloodsucker + effect_type = /obj/effect/particle_effect/smoke/vampsmoke + +#undef GOHOME_START +#undef GOHOME_FLICKER_ONE +#undef GOHOME_FLICKER_TWO +#undef GOHOME_TELEPORT diff --git a/code/modules/antagonists/bloodsuckers/powers/masquerade.dm b/code/modules/antagonists/bloodsuckers/powers/masquerade.dm index 207d05cad116..3e536df1279b 100644 --- a/code/modules/antagonists/bloodsuckers/powers/masquerade.dm +++ b/code/modules/antagonists/bloodsuckers/powers/masquerade.dm @@ -27,13 +27,33 @@ bloodcost = 10 cooldown = 5 SECONDS constant_bloodcost = 0.1 + var/list/theqdeld = list() /datum/action/bloodsucker/masquerade/ActivatePower() . = ..() var/mob/living/carbon/user = owner to_chat(user, span_notice("Your heart beats falsely within your lifeless chest. You may yet pass for a mortal.")) to_chat(user, span_warning("Your vampiric healing is halted while imitating life.")) - + // Remove Clan-specific stuff + var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) + if(bloodsuckerdatum.my_clan == CLAN_GANGREL) + if(bloodsuckerdatum.clanprogress >= 1) // change this if we get more stuff to include other clans + var/obj/item/clothing/neck/neckdrip = user.get_item_by_slot(SLOT_NECK) + if(istype(neckdrip, /obj/item/clothing/neck/wolfcollar)) + theqdeld += neckdrip + if(bloodsuckerdatum.clanprogress >= 2) + var/obj/item/clothing/ears/earsdrip = user.get_item_by_slot(SLOT_EARS) + if(istype(earsdrip, /obj/item/clothing/ears/wolfears)) + theqdeld += earsdrip + if(bloodsuckerdatum.clanprogress >= 3) + var/obj/item/clothing/gloves/glovesdrip = user.get_item_by_slot(SLOT_GLOVES) + if(istype(glovesdrip, /obj/item/clothing/gloves/wolfclaws)) + theqdeld += glovesdrip + if(bloodsuckerdatum.clanprogress >= 4) + var/obj/item/clothing/shoes/shoesdrip = user.get_item_by_slot(SLOT_SHOES) + if(istype(shoesdrip , /obj/item/clothing/shoes/wolflegs)) + theqdeld += shoesdrip + QDEL_LIST(theqdeld) // Remove Bloodsucker traits REMOVE_TRAIT(user, TRAIT_NOHARDCRIT, BLOODSUCKER_TRAIT) REMOVE_TRAIT(user, TRAIT_NOSOFTCRIT, BLOODSUCKER_TRAIT) @@ -85,6 +105,25 @@ for(var/thing in user.diseases) var/datum/disease/disease = thing disease.cure() + // Adds Clan-specific stuff + var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) + if(bloodsuckerdatum.my_clan == CLAN_GANGREL) + if(bloodsuckerdatum.clanprogress >= 1) // change this if we get more stuff to include other clans + var/obj/item/clothing/neck/previousdrip = user.get_item_by_slot(SLOT_NECK) + user.dropItemToGround(previousdrip) + user.equip_to_slot_or_del(new /obj/item/clothing/neck/wolfcollar(user), SLOT_NECK) + if(bloodsuckerdatum.clanprogress >= 2) + var/obj/item/clothing/ears/previousdrip = user.get_item_by_slot(SLOT_EARS) + user.dropItemToGround(previousdrip) + user.equip_to_slot_or_del(new /obj/item/clothing/ears/wolfears(user), SLOT_EARS) + if(bloodsuckerdatum.clanprogress >= 3) + var/obj/item/clothing/gloves/previousdrip = user.get_item_by_slot(SLOT_GLOVES) + user.dropItemToGround(previousdrip) + user.equip_to_slot_or_del(new /obj/item/clothing/gloves/wolfclaws(user), SLOT_GLOVES) + if(bloodsuckerdatum.clanprogress >= 4) + var/obj/item/clothing/shoes/previousdrip = user.get_item_by_slot(SLOT_SHOES) + user.dropItemToGround(previousdrip) + user.equip_to_slot_or_del(new /obj/item/clothing/shoes/wolflegs(user), SLOT_SHOES) to_chat(user, span_notice("Your heart beats one final time, while your skin dries out and your icy pallor returns.")) /** diff --git a/code/modules/antagonists/bloodsuckers/powers/recuperate.dm b/code/modules/antagonists/bloodsuckers/powers/recuperate.dm index 875c149eab4c..2721b77abf98 100644 --- a/code/modules/antagonists/bloodsuckers/powers/recuperate.dm +++ b/code/modules/antagonists/bloodsuckers/powers/recuperate.dm @@ -27,11 +27,12 @@ . = ..() to_chat(owner, span_notice("Your muscles clench as your master's immortal blood mixes with your own, knitting your wounds.")) -/datum/action/bloodsucker/recuperate/UsePower(mob/living/carbon/human/user) +/datum/action/bloodsucker/recuperate/process(delta_time) . = ..() if(!.) return + var/mob/living/carbon/user = owner var/datum/antagonist/vassal/vassaldatum = IS_VASSAL(user) vassaldatum.master.AddBloodVolume(-1) user.Jitter(5) diff --git a/code/modules/antagonists/bloodsuckers/powers/targeted/_powers_targeted.dm b/code/modules/antagonists/bloodsuckers/powers/targeted/_powers_targeted.dm index 6057734f8e33..1d2224929f89 100644 --- a/code/modules/antagonists/bloodsuckers/powers/targeted/_powers_targeted.dm +++ b/code/modules/antagonists/bloodsuckers/powers/targeted/_powers_targeted.dm @@ -38,7 +38,7 @@ /datum/action/bloodsucker/targeted/DeactivatePower() if(power_flags & BP_AM_TOGGLE) - UnregisterSignal(owner, COMSIG_LIVING_BIOLOGICAL_LIFE) + STOP_PROCESSING(SSprocessing, src) active = FALSE DeactivateRangedAbility() UpdateButtonIcon() diff --git a/code/modules/antagonists/bloodsuckers/powers/targeted/brawn.dm b/code/modules/antagonists/bloodsuckers/powers/targeted/brawn.dm index c6a2b6dfeee1..49764c3ee004 100644 --- a/code/modules/antagonists/bloodsuckers/powers/targeted/brawn.dm +++ b/code/modules/antagonists/bloodsuckers/powers/targeted/brawn.dm @@ -184,8 +184,50 @@ return TRUE // Target Type: Door else if(istype(target_atom, /obj/machinery/door)) + if(level_current < 4) + to_chat(owner, span_warning("You need [4 - level_current] more levels to be able to break open the [target_atom]!")) + return FALSE return TRUE // Target Type: Locker else if(istype(target_atom, /obj/structure/closet)) + if(level_current < 3) + to_chat(owner, span_warning("You need [3 - level_current] more levels to be able to break open the [target_atom]!")) + return FALSE return TRUE return FALSE + +/datum/action/bloodsucker/targeted/brawn/shadow + name = "Obliterate" + button_icon = 'icons/mob/actions/actions_lasombra_bloodsucker.dmi' + background_icon_state_on = "lasombra_power_on" + background_icon_state_off = "lasombra_power_off" + icon_icon = 'icons/mob/actions/actions_lasombra_bloodsucker.dmi' + button_icon_state = "power_obliterate" + purchase_flags = LASOMBRA_CAN_BUY + +/datum/action/bloodsucker/targeted/brawn/shadow/FireTargetedPower(atom/target_atom) + var/mob/living/carbon/human/H = target_atom + H.apply_status_effect(STATUS_EFFECT_SHADOWAFFLICTED) + var/turf/T = get_turf(H) + for(var/datum/light_source/LS in T.affecting_lights) + var/atom/LO = LS.source_atom + if(isitem(LO)) + var/obj/item/I = LO + if(istype(I, /obj/item/clothing/head/helmet/space/hardsuit)) + var/obj/item/clothing/head/helmet/space/hardsuit/HA = I + if(HA.on) + HA.on = FALSE + if(istype(I, /obj/item/clothing/head/helmet/space/plasmaman)) + var/obj/item/clothing/head/helmet/space/plasmaman/PA = I + if(PA.on) + PA.on = FALSE + if(istype(I, /obj/item/flashlight)) + var/obj/item/flashlight/F = I + if(F.on) + F.on = FALSE + F.update_brightness() + if(istype(LO, /mob/living/silicon/robot)) + var/mob/living/silicon/robot/borg = LO + if(!borg.lamp_cooldown) + borg.smash_headlamp() + . = ..() \ No newline at end of file diff --git a/code/modules/antagonists/bloodsuckers/powers/targeted/haste.dm b/code/modules/antagonists/bloodsuckers/powers/targeted/haste.dm index 795e92399276..e53fa06ee25b 100644 --- a/code/modules/antagonists/bloodsuckers/powers/targeted/haste.dm +++ b/code/modules/antagonists/bloodsuckers/powers/targeted/haste.dm @@ -97,3 +97,32 @@ all_targets.confused = max(8, all_targets.confused) all_targets.stuttering = max(8, all_targets.stuttering) all_targets.Knockdown(10 + level_current * 5) // Re-knock them down, the first one didn't work due to stunimmunity + +/datum/action/bloodsucker/targeted/haste/shadow + name = "Blow" + button_icon = 'icons/mob/actions/actions_lasombra_bloodsucker.dmi' + background_icon_state_on = "lasombra_power_on" + background_icon_state_off = "lasombra_power_off" + icon_icon = 'icons/mob/actions/actions_lasombra_bloodsucker.dmi' + button_icon_state = "power_bomb" + additional_desc = TRUE + additional_text = "Additionally disables lightframes in range and confuses nearby mortals." + purchase_flags = LASOMBRA_CAN_BUY + +/datum/action/bloodsucker/targeted/haste/shadow/on_move() + . = ..() + var/mob/living/carbon/human/user = owner + for(var/obj/machinery/light/L in range(5, user)) + L.on = FALSE + L.update(0) + L.set_light(0) + for(var/mob/target in range(5, user)) + if(target == user) + continue + if(IS_BLOODSUCKER(target) || IS_VASSAL(target)) + continue + if(iscarbon(target)) + var/mob/living/carbon/M = target + to_chat(M, span_danger("As a figure passes by, you feel your head spike up!")) + M.confused += 4 + M.adjustEarDamage(0, 15) \ No newline at end of file diff --git a/code/modules/antagonists/bloodsuckers/powers/targeted/lunge.dm b/code/modules/antagonists/bloodsuckers/powers/targeted/lunge.dm index b4c29f467852..cac0c7d6955e 100644 --- a/code/modules/antagonists/bloodsuckers/powers/targeted/lunge.dm +++ b/code/modules/antagonists/bloodsuckers/powers/targeted/lunge.dm @@ -3,7 +3,8 @@ desc = "Spring at a humanoid 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" power_explanation = "Predatory Lunge:\n\ - Click any player to instantly dash at them, aggressively grabbing them.\n\ + Click any player to instantly dash at them if above power level 3, aggressively grabbing them.\n\ + If not on level 3, you will have to charge your lunge for a while. During this time you'll have to stand still for lunge to work\n\ You cannot use the Power if you are aggressively grabbed.\n\ If the target is wearing riot gear or is a Monster Hunter, you will merely passively grab them.\n\ If grabbed from behind or from the darkness (Cloak of Darkness counts) with a power level at or above 4, will additionally knock the target down.\n\ @@ -152,3 +153,18 @@ var/mob/living/O = owner O.SetImmobilized(0) return ..() + +/datum/action/bloodsucker/targeted/lunge/shadow + name = "Dark Embrace" + button_icon = 'icons/mob/actions/actions_lasombra_bloodsucker.dmi' + background_icon_state_on = "lasombra_power_on" + background_icon_state_off = "lasombra_power_off" + icon_icon = 'icons/mob/actions/actions_lasombra_bloodsucker.dmi' + button_icon_state = "power_embrace" + purchase_flags = LASOMBRA_CAN_BUY + +/datum/action/bloodsucker/targeted/lunge/shadow/lunge_end(atom/hit_atom) + . = ..() + var/mob/living/carbon/target = hit_atom + if(target.m_intent != MOVE_INTENT_WALK) + target.toggle_move_intent() \ No newline at end of file diff --git a/code/modules/antagonists/bloodsuckers/powers/targeted/mesmerize.dm b/code/modules/antagonists/bloodsuckers/powers/targeted/mesmerize.dm index 23cd24603133..2cbc3afbb6bb 100644 --- a/code/modules/antagonists/bloodsuckers/powers/targeted/mesmerize.dm +++ b/code/modules/antagonists/bloodsuckers/powers/targeted/mesmerize.dm @@ -30,6 +30,7 @@ target_range = 8 power_activates_immediately = FALSE prefire_message = "Whom will you subvert to your will?" + var/mesmerizingtime = 5 SECONDS /datum/action/bloodsucker/targeted/mesmerize/CheckCanUse(mob/living/carbon/user) . = ..() @@ -90,8 +91,9 @@ var/mob/living/target = target_atom var/mob/living/user = owner to_chat(owner, span_notice("Attempting to hypnotically gaze [target]...")) - if(!do_mob(user, target, 5 SECONDS, NONE, TRUE)) - return + if(!power_activates_immediately) + if(!do_mob(user, target, mesmerizingtime, NONE, TRUE)) + return PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN! var/power_time = 90 + level_current * 15 @@ -125,3 +127,21 @@ if(istype(user) && target.stat == CONSCIOUS && (target in view(6, get_turf(user)))) to_chat(owner, span_warning("[target] snapped out of their trance.")) +/datum/action/bloodsucker/targeted/mesmerize/shadow + name = "Glare" + button_icon = 'icons/mob/actions/actions_lasombra_bloodsucker.dmi' + background_icon_state_on = "lasombra_power_on" + background_icon_state_off = "lasombra_power_off" + icon_icon = 'icons/mob/actions/actions_lasombra_bloodsucker.dmi' + button_icon_state = "power_glare" + purchase_flags = LASOMBRA_CAN_BUY + +/datum/action/bloodsucker/targeted/mesmerize/shadow/FireTargetedPower(atom/target_atom) + var/mob/living/target = target_atom + var/mob/living/user = owner + if(target.Adjacent(user)) + power_activates_immediately = TRUE + else + mesmerizingtime = initial(mesmerizingtime) - ((-get_dist(target, user) + 8 )/2) SECONDS //won't screw you up that bad if you miss it barely + power_activates_immediately = FALSE + . = ..() \ No newline at end of file diff --git a/code/modules/antagonists/bloodsuckers/powers/targeted/trespass.dm b/code/modules/antagonists/bloodsuckers/powers/targeted/trespass.dm index d673450ee8f2..13bc6948ba94 100644 --- a/code/modules/antagonists/bloodsuckers/powers/targeted/trespass.dm +++ b/code/modules/antagonists/bloodsuckers/powers/targeted/trespass.dm @@ -10,10 +10,12 @@ check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_WHILE_INCAPACITATED|BP_CANT_USE_WHILE_UNCONSCIOUS purchase_flags = BLOODSUCKER_CAN_BUY|VASSAL_CAN_BUY bloodcost = 10 - cooldown = 8 SECONDS + cooldown = 7 SECONDS prefire_message = "Select a destination." //target_range = 2 var/turf/target_turf // We need to decide where we're going based on where we clicked. It's not actually the tile we clicked. + var/wallbound = TRUE + var/soliddelay = 1 /datum/action/bloodsucker/targeted/trespass/CheckCanUse(mob/living/carbon/user) . = ..() @@ -50,9 +52,13 @@ from_turf = get_step(from_turf, this_dir) // ERROR! Wall! if(iswallturf(from_turf)) - var/wallwarning = (i == 1) ? "in the way" : "at your destination" - to_chat(owner, "There is a wall [wallwarning].") - return FALSE + if(wallbound) + var/wallwarning = (i == 1) ? "in the way" : "at your destination" + to_chat(owner, span_warning("There is a wall [wallwarning].")) + return FALSE + if(!wallbound) + to_chat(owner, span_notice("You begin passing through the wall, this will take a while and take more energy.")) + soliddelay = 2 // Done target_turf = from_turf @@ -67,7 +73,7 @@ user.visible_message( span_warning("[user]'s form dissipates into a cloud of mist!"), - span_notice("You disspiate into formless mist."), + span_notice("You dissipate into formless mist."), ) // Effect Origin var/sound_strength = max(60, 70 - level_current * 10) @@ -77,7 +83,7 @@ puff.set_up(3, 0, my_turf) puff.start() - var/mist_delay = max(5, 20 - level_current * 2.5) // Level up and do this faster. + var/mist_delay = max(5, 20 * soliddelay - level_current * 2.5) // Level up and do this faster. // Freeze Me user.Stun(mist_delay, ignore_canstun = TRUE) @@ -105,3 +111,13 @@ puff.effect_type = /obj/effect/particle_effect/smoke/vampsmoke puff.set_up(3, 0, target_turf) puff.start() + +/datum/action/bloodsucker/targeted/trespass/shadow + name = "Manifest" + button_icon = 'icons/mob/actions/actions_lasombra_bloodsucker.dmi' + background_icon_state_on = "lasombra_power_on" + background_icon_state_off = "lasombra_power_off" + icon_icon = 'icons/mob/actions/actions_lasombra_bloodsucker.dmi' + button_icon_state = "power_manifest" + purchase_flags = LASOMBRA_CAN_BUY + wallbound = FALSE \ No newline at end of file diff --git a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_coffin.dm b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_coffin.dm index e9bbbf30cb94..6fece42810d0 100644 --- a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_coffin.dm +++ b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_coffin.dm @@ -2,9 +2,9 @@ // ALREADY CLAIMED if(claimed.resident) if(claimed.resident == owner.current) - to_chat(owner, "This is your [src].") + to_chat(owner, "This is your [claimed].") else - to_chat(owner, "This [src] has already been claimed by another.") + to_chat(owner, "This [claimed] has already been claimed by another.") return FALSE if(!(/datum/crafting_recipe/vassalrack in owner?.learned_recipes)) owner.teach_crafting_recipe(/datum/crafting_recipe/vassalrack) @@ -19,7 +19,7 @@ coffin = claimed lair = get_area(claimed) to_chat(owner, span_userdanger("You have claimed the [claimed] as your place of immortal rest! Your lair is now [lair].")) - to_chat(owner, span_announce("Bloodsucker Tip: Find new lair recipes in the tribal tab of the Crafting Menu, including the Persuasion Rack for converting crew into Vassals.")) + to_chat(owner, span_announce("Bloodsucker Tip: Find new lair recipes in the structure tab of the Crafting Menu, including the Persuasion Rack for converting crew into Vassals and the Blood Altar which lets you gain two tasks per night to Rank Up.")) return TRUE /// From crate.dm diff --git a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm index 5af90f75b7ee..dd129cd64aa1 100644 --- a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm +++ b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm @@ -1,4 +1,5 @@ /obj/structure/bloodsucker + icon = 'icons/obj/vamp_obj.dmi' ///Who owns this structure? var/mob/living/owner /* @@ -74,11 +75,12 @@ if("Yes") unbolt(user) +//////////////////////////////////////////////////// + #define ALTAR_RANKS_PER_DAY 2 /obj/structure/bloodsucker/bloodaltar name = "blood altar" desc = "It is made of marble, lined with basalt, and radiates an unnerving chill that puts your skin on edge." - icon = 'icons/obj/vamp_obj.dmi' icon_state = "bloodaltar" density = TRUE anchored = FALSE @@ -87,14 +89,15 @@ can_buckle = FALSE var/task_completed = FALSE var/sacrifices = 0 - var/taskheart = FALSE + var/sacrificialtask = FALSE + var/organ_name = "" Ghost_desc = "This is a Blood Altar, where bloodsuckers can get two tasks per night to get more ranks." Vamp_desc = "This is a Blood Altar, which allows you to do two tasks per day to advance your ranks.\n\ - Interact with the Altar by clicking on it after it's bolted to get a a task.\n\ + Interact with the Altar by clicking on it after it's bolted to get a task.\n\ By checking your notes or the chat you can see what task needs to be done.\n\ Remember you only get two tasks per night." Vassal_desc = "This is the blood altar, where your master does bounties to advanced their bloodsucking powers.\n\ - Aid your master by bringing them what they need for these bounties or by helping get them." + Aid your master by bringing them what they need for these bounties or help getting them." Hunter_desc = "This is a blood altar, where monsters usually practice a sort of bounty system to advanced their powers.\n\ They normally sacrifice hearts or blood in exchange for these ranks, forcing them to move out of their lair.\n\ It can only be used twice per night and it needs to be interacted it to be claimed, making bloodsuckers come back twice a night." @@ -118,7 +121,7 @@ if(bloodsuckerdatum.altar_uses >= ALTAR_RANKS_PER_DAY) to_chat(user, span_notice("You have done all tasks for the night, come back tomorrow for more.")) return - var/task + var/task //just like amongus var/suckamount = 0 var/heartamount = 0 switch(bloodsuckerdatum.bloodsucker_level + bloodsuckerdatum.bloodsucker_level_unspent) @@ -142,7 +145,7 @@ sacrifices = 0 to_chat(user, span_notice("You have sucessfully done a task and gained a rank!")) task_completed = FALSE - taskheart = FALSE + sacrificialtask = FALSE return if(bloodsuckerdatum.current_task) to_chat(user, span_warning("You already have a rank up task!")) @@ -158,29 +161,31 @@ C.blood_volume -= 100 switch(rand(1, 3)) if(1,2) - task = "suck [suckamount] units of blood." + task = "Suck [suckamount] units of pure blood." if(3) - task = "sacrifice [heartamount] hearts by using them on the altar." - taskheart = TRUE + task = "Sacrifice [heartamount] hearts by using them on the altar." + sacrificialtask = TRUE bloodsuckerdatum.task_memory += "Current Rank Up Task: [task]
" bloodsuckerdatum.current_task = TRUE - to_chat(user, span_boldnotice("You have gained a new Task! Your task is to [task] Remember to collect it by using the blood altar!")) + to_chat(user, span_boldnotice("You have gained a new Task! [task] Remember to collect it by using the blood altar!")) /obj/structure/bloodsucker/bloodaltar/examine(mob/user) . = ..() - if(taskheart) - . += span_boldnotice("It currently contains [sacrifices] hearts.") + if(sacrificialtask) + if(sacrifices > 0) + . += span_boldnotice("It currently contains [sacrifices] [organ_name].") else return ..() /obj/structure/bloodsucker/bloodaltar/attackby(obj/item/H, mob/user, params) if(!IS_BLOODSUCKER(user) && !IS_VASSAL(user)) return ..() - if(taskheart) + if(sacrificialtask) if(istype(H, /obj/item/organ/heart)) if(istype(H, /obj/item/organ/heart/gland)) to_chat(usr, span_warning("This type of organ doesn't have blood to sustain the altar!")) return ..() + organ_name = H.name to_chat(usr, span_notice("You feed the heart to the altar!")) qdel(H) sacrifices++ @@ -188,6 +193,143 @@ return ..() #undef ALTAR_RANKS_PER_DAY +//////////////////////////////////////////////////// + +/obj/structure/bloodsucker/bloodaltar/restingplace + name = "resting place" + desc = "This seem to hold a bit of significance." + icon_state = "restingplace" + var/awoken = FALSE + Ghost_desc = "This is a Resting Place, where lasombra bloodsucker can ascend their powers." + Vamp_desc = "This is a Resting Place, which allows you to ascend your powers by gaining points using your ranks or blood.\n\ + Interact with the Altar by clicking on it after you have fed it a abyssal essence, acquirable through influences.\n\ + Remember most ascended powers have benefits if used in the dark.\n\ + It only seems to speak to elders of 4 or higher ranks." + Vassal_desc = "This is the resting place, where your master does rituals to ascend their bloodsucking powers.\n\ + Aid your master by bringing them what they need for these or by help getting them." + Hunter_desc = "This is a blood altar, where monsters ascend their powers to shadowy levels.\n\ + They normally need ranks or blood in exchange for power, forcing them to move out of their lair and weakening them." + +/obj/item/abyssal_essence + name = "abyssal essence" + desc = "As you glare at the abyssal essence, you feel it glaring back." + icon = 'icons/obj/vamp_obj.dmi' + icon_state = "abyssal_essence" + item_state = "abyssal_essence" + throwforce = 0 + w_class = WEIGHT_CLASS_TINY + throw_speed = 3 + throw_range = 7 + pressure_resistance = 10 + +/obj/structure/bloodsucker/bloodaltar/restingplace/deconstruct(disassembled = TRUE) + . = ..() + new /obj/item/abyssal_essence(src.loc) + qdel(src) + +/obj/structure/bloodsucker/bloodaltar/restingplace/attackby(obj/item/H, mob/user, params) + if(!IS_BLOODSUCKER(user) && !IS_VASSAL(user)) + return ..() + if(!awoken) + if(istype(H, /obj/item/abyssal_essence)) + to_chat(usr, span_notice("As you touch [src] with the [H], you start sensing something different coming from [src]!")) + qdel(H) + awoken = TRUE + return + return to_chat(user, span_cult("Seems like you need a direct link to the abyss to awaken [src]. Maybe searching a spacial influence would yield something.")) + . = ..() + +/obj/effect/reality_smash/attack_hand(mob/user, list/modifiers) // this is important + if(!IS_BLOODSUCKER(user)) //only bloodsucker will attack this with their hand + return + if(INTERACTING_WITH(user, src)) + return + if(user.mind in src.siphoners) + to_chat(user, span_danger("You have already harvested this shard!")) + return + to_chat(user, span_danger("You start to harvest the energy of [src]...")) + if(do_after(user,10 SECONDS,TRUE,src)) + user.put_in_hands(new /obj/item/abyssal_essence) + to_chat(user, span_notice("You finish harvesting the energy of [src]!")) + src.siphoners |= user.mind + +/obj/structure/bloodsucker/bloodaltar/restingplace/attack_hand(mob/user, list/modifiers) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) + if(!IS_BLOODSUCKER(user)) + return ..() + if(bloodsuckerdatum.my_clan == CLAN_LASOMBRA) + if(bloodsuckerdatum.clanpoints > 0) + var/list/upgradablepowers = list() + var/list/unupgradablepowers = list(/datum/action/bloodsucker/feed, /datum/action/bloodsucker/masquerade, /datum/action/bloodsucker/veil) + for(var/datum/action/bloodsucker/power as anything in bloodsuckerdatum.powers) + if(initial(power.purchase_flags) & BLOODSUCKER_CAN_BUY) + upgradablepowers += power + if(is_type_in_list(power, unupgradablepowers)) + upgradablepowers -= power + var/choice = input(usr, "What Power do you wish to ascend? This resets the powers level.", "Darkness Manager") in upgradablepowers + if(!choice) + return + if((locate(upgradablepowers[choice]) in bloodsuckerdatum.powers)) + return + if(istype(choice, /datum/action/bloodsucker/targeted/brawn)) + bloodsuckerdatum.BuyPower(new /datum/action/bloodsucker/targeted/brawn/shadow) + if(istype(choice, /datum/action/bloodsucker/targeted/haste)) + bloodsuckerdatum.BuyPower(new /datum/action/bloodsucker/targeted/haste/shadow) + if(istype(choice, /datum/action/bloodsucker/fortitude)) + bloodsuckerdatum.BuyPower(new /datum/action/bloodsucker/fortitude/shadow) // i hate this + if(istype(choice, /datum/action/bloodsucker/targeted/mesmerize)) + bloodsuckerdatum.BuyPower(new /datum/action/bloodsucker/targeted/mesmerize/shadow) + if(istype(choice, /datum/action/bloodsucker/targeted/trespass)) + bloodsuckerdatum.BuyPower(new /datum/action/bloodsucker/targeted/trespass/shadow) + if(istype(choice, /datum/action/bloodsucker/targeted/lunge)) + bloodsuckerdatum.BuyPower(new /datum/action/bloodsucker/targeted/lunge/shadow) + if(istype(choice, /datum/action/bloodsucker/cloak/)) + bloodsuckerdatum.BuyPower(new /datum/action/bloodsucker/cloak/shadow) + bloodsuckerdatum.powers -= choice + qdel(choice) + to_chat(user, span_boldnotice("You have ascended [choice]!")) + return + if(bloodsuckerdatum.bloodsucker_level >= 4 ) + if(!awoken) //don't want this to affect power upgrading if you make another one + return + icon_state = initial(icon_state) + (awoken ? "_idle" : "_awaken") + update_icon() + var/rankspent + switch(bloodsuckerdatum.clanprogress) + if(0) + bloodsuckerdatum.clanprogress++ + to_chat(user, span_notice("As you touch the [src] you feel the a slight abyssal pulse flow through you... You have gained a point!")) + return + if(1 to 3) + rankspent = 1 + if(4 to 6) + rankspent = 2 + if(7) + rankspent = 3 + if(8 to INFINITY) + to_chat(user, span_notice("You have evolved all abilities possible.")) + return + var/want_clantask = alert("Do you want to spend a rank to ascend an ability? This will cost [rankspent] ranks.", "Dark Manager", "Yes", "No") + if(want_clantask == "No" || QDELETED(src)) + return + if(bloodsuckerdatum.bloodsucker_level_unspent < rankspent) + var/another_shot = alert("It seems like you don't have enough ranks, spend 550 blood instead?", "Dark Manager", "Yes", "No") + if(another_shot == "No" || QDELETED(src)) + return + var/mob/living/carbon/C = user + if(C.blood_volume < 550) + to_chat(user, span_danger("You don't have enough blood to gain a task!")) + return + C.blood_volume -= 550 + else + bloodsuckerdatum.bloodsucker_level_unspent -= rankspent + bloodsuckerdatum.clanpoints++ + bloodsuckerdatum.clanprogress++ + return + return ..() + +//////////////////////////////////////////////////// + /*/obj/structure/bloodsucker/bloodstatue name = "bloody countenance" desc = "It looks upsettingly familiar..." @@ -201,10 +343,81 @@ name = "faded mirror" desc = "You get the sense that the foggy reflection looking back at you has an alien intelligence to it."*/ +//////////////////////////////////////////////////// + +/obj/structure/bloodsucker/possessedarmor + name = "knight's armor" + desc = "I swear i saw it's eyes move..." + icon_state = "posarmor" + anchored = FALSE + density = TRUE + var/active = FALSE + var/upgraded = FALSE + +/obj/structure/bloodsucker/possessedarmor/upgraded + name = "shiny knight's armor" + upgraded = TRUE + +/obj/structure/bloodsucker/possessedarmor/bolt() + . = ..() + anchored = TRUE + +/obj/structure/bloodsucker/possessedarmor/unbolt() + . = ..() + anchored = FALSE + active = FALSE + STOP_PROCESSING(SSprocessing, src) + +/obj/structure/bloodsucker/possessedarmor/AltClick(mob/user) + if(!anchored) + setDir(turn(dir,-90)) + else + return ..() + +/obj/structure/bloodsucker/possessedarmor/attackby(obj/item/I, mob/user, params) + if(upgraded) + to_chat(user, span_warning("[src] is already reinforced!")) + return + if(istype(I, /obj/item/stack/sheet/mineral/silver)) + var/obj/item/stack/sheet/mineral/silver/S = I + if(S.amount < 5) + to_chat(user, span_warning("You need at least five silver bars to reinforce [src]!")) + return + else + to_chat(user, span_notice("You start adding [I] to [src]...")) + if(do_after(user, 5 SECONDS, target=src)) + S.use(5) + new /obj/structure/bloodsucker/possessedarmor/upgraded(src.loc) + qdel(src) + return + return ..() + +/obj/structure/bloodsucker/possessedarmor/attack_hand(mob/user, list/modifiers) + . = ..() + active = TRUE + START_PROCESSING(SSprocessing, src) + +/obj/structure/bloodsucker/possessedarmor/Destroy() + . = ..() + STOP_PROCESSING(SSprocessing, src) + +/obj/structure/bloodsucker/possessedarmor/process() + if(active) + for(var/mob/living/passerby in dview(1, get_turf(src))) + if(IS_BLOODSUCKER(passerby) || IS_VASSAL(passerby)) + continue + to_chat(passerby, span_warning("The armor starts moving!")) + if(upgraded) + new /mob/living/simple_animal/hostile/bloodsucker/possessedarmor/upgraded(src.loc) + else + new /mob/living/simple_animal/hostile/bloodsucker/possessedarmor(src.loc) + qdel(src) + +//////////////////////////////////////////////////// + /obj/structure/bloodsucker/vassalrack name = "persuasion rack" desc = "If this wasn't meant for torture, then someone has some fairly horrifying hobbies." - icon = 'icons/obj/vamp_obj.dmi' icon_state = "vassalrack" anchored = FALSE /// Start dense. Once fixed in place, go non-dense. @@ -534,7 +747,6 @@ /obj/structure/bloodsucker/candelabrum name = "candelabrum" desc = "It burns slowly, but doesn't radiate any heat." - icon = 'icons/obj/vamp_obj.dmi' icon_state = "candelabrum" light_color = "#66FFFF"//LIGHT_COLOR_BLUEGREEN // lighting.dm light_power = 3 diff --git a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_life.dm b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_life.dm index 98f923202ae7..c168b75c9e4f 100644 --- a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_life.dm +++ b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_life.dm @@ -1,6 +1,8 @@ /// Runs from COMSIG_LIVING_BIOLOGICAL_LIFE, handles Bloodsucker constant proccesses. /datum/antagonist/bloodsucker/proc/LifeTick() + if(isbrain(owner.current)) + return if(!owner) INVOKE_ASYNC(src, .proc/HandleDeath) return @@ -51,9 +53,11 @@ /////////// // Reduce Value Quantity if(target.stat == DEAD) // Penalty for Dead Blood - blood_taken /= 3 + blood_taken /= 4 if(!ishuman(target)) // Penalty for Non-Human Blood - blood_taken /= 2 + blood_taken /= 3 + if(!target.mind) + blood_taken /= 5 // Penalty for Catatonics / Braindead //if (!iscarbon(target)) // Penalty for Animals (they're junk food) // Apply to Volume AddBloodVolume(blood_taken) @@ -65,7 +69,8 @@ if(frenzied) frenzy_blood_drank += blood_taken if(current_task) - task_blood_drank += blood_taken + if(target.mind) + task_blood_drank += blood_taken return blood_taken ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -191,15 +196,9 @@ /// FINAL DEATH /datum/antagonist/bloodsucker/proc/HandleDeath() // Not "Alive"? - var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.has_antag_datum(/datum/antagonist/bloodsucker) - if(bloodsuckerdatum.my_clan == CLAN_GANGREL) - if(!owner.current || !isliving(owner.current) || isbrain(owner.current) || !get_turf(owner.current)) - FinalDeath() - return - else - if(!owner.current || !iscarbon(owner.current) || isbrain(owner.current) || !get_turf(owner.current)) - FinalDeath() - return + if(!owner.current || !get_turf(owner.current)) + FinalDeath() + return // Fire Damage? (above double health) if(owner.current.getFireLoss() >= owner.current.maxHealth * 2.5) FinalDeath() @@ -225,9 +224,8 @@ // BLOOD_VOLUME_GOOD: [336] - Pale // handled in bloodsucker_integration.dm - - // BLOOD_VOLUME_EXIT: [250] - Exit Frenzy (If in one) This is high because we want enough to kill the poor soul they feed off of. - if(owner.current.blood_volume >= FRENZY_THRESHOLD_EXIT && frenzied) + // BLOOD_VOLUME_EXIT: [560] - Exit Frenzy (If in one) This is high because we want enough to kill the poor soul they feed off of. + if(owner.current.blood_volume >= FRENZY_THRESHOLD_EXIT || frenzied) owner.current.remove_status_effect(STATUS_EFFECT_FRENZY) // BLOOD_VOLUME_BAD: [224] - Jitter if(owner.current.blood_volume < BLOOD_VOLUME_BAD(owner.current) && prob(0.5) && !HAS_TRAIT(owner.current, TRAIT_NODEATH) && !HAS_TRAIT(owner.current, TRAIT_MASQUERADE)) @@ -240,6 +238,9 @@ if(owner.current.blood_volume < (FRENZY_THRESHOLD_ENTER + (humanity_lost * 10)) && !frenzied) if(!iscarbon(owner.current)) return + if(owner.current.stat == DEAD) + HandleDeath() + return enter_frenzy() else if(owner.current.blood_volume < BLOOD_VOLUME_BAD(owner.current)) additional_regen = 0.1 @@ -253,6 +254,40 @@ additional_regen = 0.5 /datum/antagonist/bloodsucker/proc/enter_frenzy() + if(my_clan == CLAN_GANGREL) + var/mob/living/carbon/user = owner.current + AddBloodVolume(560 - user.blood_volume) //so it doesn't happen multiple times and refills your blood when you get out again + if(!do_mob(user, user, 2 SECONDS, TRUE)) + return + playsound(user.loc, 'sound/weapons/slash.ogg', 25, 1) + to_chat(user, span_warning("You skin rips and tears.")) + if(!do_mob(user, user, 1 SECONDS, TRUE)) + return + playsound(user.loc, 'sound/weapons/slashmiss.ogg', 25, 1) + to_chat(user, span_warning("You heart pumps blackened blood into your veins as your skin turns into fur.")) + if(!do_mob(user, user, 1 SECONDS, TRUE)) + return + playsound(user.loc, 'sound/weapons/slice.ogg', 25, 1) + to_chat(user, span_boldnotice("YOU HAVE AWOKEN.")) + var/mob/living/simple_animal/hostile/bloodsucker/werewolf/ww + if(!ww || ww.stat == DEAD) + ww = new /mob/living/simple_animal/hostile/bloodsucker/werewolf(user.loc) + user.forceMove(ww) + ww.bloodsucker = user + user.mind.transfer_to(ww) + var/list/wolf_powers = list(new /datum/action/bloodsucker/targeted/feast,) + for(var/datum/action/bloodsucker/power in powers) + if(istype(power, /datum/action/bloodsucker/fortitude)) + wolf_powers += new /datum/action/bloodsucker/gangrel/wolfortitude + if(istype(power, /datum/action/bloodsucker/targeted/lunge)) + wolf_powers += new /datum/action/bloodsucker/targeted/pounce + if(istype(power, /datum/action/bloodsucker/cloak)) + wolf_powers += new /datum/action/bloodsucker/gangrel/howl + if(istype(power, /datum/action/bloodsucker/targeted/trespass)) + wolf_powers += new /datum/action/bloodsucker/gangrel/rabidism + for(var/datum/action/bloodsucker/power in wolf_powers) + power.Grant(ww) + return owner.current.apply_status_effect(STATUS_EFFECT_FRENZY) /** @@ -317,6 +352,7 @@ Torpor_End() /datum/antagonist/bloodsucker/proc/Torpor_Begin() + var/mob/living/carbon/human/bloodsucker = owner.current to_chat(owner.current, span_notice("You enter the horrible slumber of deathless Torpor. You will heal until you are renewed.")) /// Force them to go to sleep REMOVE_TRAIT(owner.current, TRAIT_SLEEPIMMUNE, BLOODSUCKER_TRAIT) @@ -325,15 +361,16 @@ ADD_TRAIT(owner.current, TRAIT_FAKEDEATH, BLOODSUCKER_TRAIT) ADD_TRAIT(owner.current, TRAIT_DEATHCOMA, BLOODSUCKER_TRAIT) ADD_TRAIT(owner.current, TRAIT_RESISTLOWPRESSURE, BLOODSUCKER_TRAIT) - //ADD_TRAIT(owner.current, TRAIT_BRUTEIMMUNE, BLOODSUCKER_TRAIT) + bloodsucker.physiology.brute_mod *= 0 owner.current.Jitter(0) /// Disable ALL Powers DisableAllPowers() /datum/antagonist/bloodsucker/proc/Torpor_End() + var/mob/living/carbon/human/bloodsucker = owner.current owner.current.grab_ghost() to_chat(owner.current, span_warning("You have recovered from Torpor.")) - //REMOVE_TRAIT(owner.current, TRAIT_BRUTEIMMUNE, BLOODSUCKER_TRAIT) + bloodsucker.physiology.brute_mod = initial(bloodsucker.physiology.brute_mod) REMOVE_TRAIT(owner.current, TRAIT_RESISTLOWPRESSURE, BLOODSUCKER_TRAIT) REMOVE_TRAIT(owner.current, TRAIT_DEATHCOMA, BLOODSUCKER_TRAIT) REMOVE_TRAIT(owner.current, TRAIT_FAKEDEATH, BLOODSUCKER_TRAIT) @@ -396,7 +433,7 @@ timeout = 8 MINUTES /datum/mood_event/drankkilled - description = "I drank from my victim until they died. I feel... less human.\n" + description = "I fed off of a dead person. I feel... less human.\n" mood_change = -15 timeout = 10 MINUTES diff --git a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_recipes.dm b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_recipes.dm index c3ae4856c046..774185d99241 100644 --- a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_recipes.dm +++ b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_recipes.dm @@ -1,5 +1,8 @@ /// From recipes.dm +///////////////////////// +/// Coffins /// +///////////////////////// /datum/crafting_recipe/blackcoffin name = "Black Coffin" result = /obj/structure/closet/crate/coffin/blackcoffin @@ -46,20 +49,34 @@ time = 10 SECONDS category = CAT_STRUCTURES +//////////////////////////// +/// Structures /// +//////////////////////////// /datum/crafting_recipe/bloodaltar name = "Blood Altar" result = /obj/structure/bloodsucker/bloodaltar - tools = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WRENCH) + tools = list(TOOL_WELDER, TOOL_WRENCH) reqs = list( /obj/item/stack/rods = 5, - /obj/item/stack/sheet/metal = 2, - /obj/item/stack/sheet/plasteel = 5, + /obj/item/stack/sheet/metal = 5, /datum/reagent/ash = 30, ) time = 13 SECONDS category = CAT_STRUCTURES always_availible = FALSE +/datum/crafting_recipe/restingplace + name = "Resting Place" + result = /obj/structure/bloodsucker/bloodaltar/restingplace + tools = list(TOOL_WRENCH, TOOL_SCREWDRIVER) + reqs = list( + /obj/structure/bloodsucker/bloodaltar, + /obj/structure/closet/crate/coffin/blackcoffin + ) + time = 15 SECONDS + category = CAT_STRUCTURES + always_availible = FALSE + /datum/crafting_recipe/vassalrack name = "Persuasion Rack" result = /obj/structure/bloodsucker/vassalrack @@ -79,7 +96,6 @@ tools = list(TOOL_SCREWDRIVER, TOOL_HATCHET) reqs = list( /obj/item/stake = 2, - /obj/item/reagent_containers/blood = 1, /obj/item/stack/sheet/mineral/wood = 2, /obj/item/restraints/handcuffs/cable = 1, ) @@ -113,6 +129,21 @@ category = CAT_STRUCTURES always_availible = FALSE +/datum/crafting_recipe/possessedarmor + name = "Subservent Armor" + result = /obj/structure/bloodsucker/possessedarmor + tools = list(TOOL_WRENCH, TOOL_WELDER, TOOL_SCREWDRIVER) + reqs = list( + /obj/item/stack/rods = 5, + /obj/item/stack/sheet/metal = 15, + ) + time = 10 SECONDS + category = CAT_STRUCTURES + always_availible = FALSE + +//////////////////////// +/// Stakes /// +//////////////////////// /datum/crafting_recipe/stake name = "Stake" result = /obj/item/stake diff --git a/code/modules/antagonists/bloodsuckers/vassal.dm b/code/modules/antagonists/bloodsuckers/vassal.dm index f07f3ea76753..73ef497ebbb8 100644 --- a/code/modules/antagonists/bloodsuckers/vassal.dm +++ b/code/modules/antagonists/bloodsuckers/vassal.dm @@ -25,6 +25,14 @@ /datum/antagonist/vassal/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) + +/datum/antagonist/vassal/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) + /datum/antagonist/vassal/on_gain() /// Enslave them to their Master @@ -34,8 +42,6 @@ bloodsuckerdatum.vassals |= src owner.enslave_mind_to_creator(master.owner.current) owner.current.log_message("has been vassalized by [master.owner.current]!", LOG_ATTACK, color="#960000") - /// Give Vassal Pinpointer - owner.current.apply_status_effect(/datum/status_effect/agent_pinpointer/vassal_edition) /// Give Recuperate Power BuyPower(new /datum/action/bloodsucker/recuperate) /// Give Objectives @@ -49,25 +55,29 @@ . = ..() /datum/antagonist/vassal/on_removal() - /// Free them from their Master + //Free them from their Master if(master && master.owner) master.vassals -= src owner.enslaved_to = null - /// Remove Pinpointer - owner.current.remove_status_effect(/datum/status_effect/agent_pinpointer/vassal_edition) - /// 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, BLOODSUCKER_TRAIT) - /// Remove Recuperate Power + //Remove Recuperate Power while(powers.len) var/datum/action/bloodsucker/power = pick(powers) powers -= power power.Remove(owner.current) - /// Remove Language & Hud + //Remove Language & Hud owner.current.remove_language(/datum/language/vampiric) update_vassal_icons_removed(owner.current) return ..() +/datum/antagonist/vassal/on_body_transfer(mob/living/old_body, mob/living/new_body) + . = ..() + for(var/datum/action/bloodsucker/all_powers as anything in powers) + all_powers.Remove(old_body) + all_powers.Grant(new_body) + + /datum/antagonist/vassal/proc/add_objective(datum/objective/added_objective) objectives += added_objective @@ -104,9 +114,15 @@ to_chat(master, span_danger("You have turned [owner.current] into your Favorite Vassal! They will no longer be deconverted upon Mindshielding!")) to_chat(owner, span_notice("As Blood drips over your body, you feel closer to your Master... You are now the Favorite Vassal!")) var/datum/antagonist/bloodsucker/bloodsuckerdatum = master.mind.has_antag_datum(/datum/antagonist/bloodsucker) - if(bloodsuckerdatum.my_clan == CLAN_GANGREL) - var/obj/effect/proc_holder/spell/targeted/shapeshift/bat/batform = new - owner.current.AddSpell(batform) + switch(bloodsuckerdatum.my_clan) + if(CLAN_GANGREL) + var/obj/effect/proc_holder/spell/targeted/shapeshift/bat/batform = new + owner.current.AddSpell(batform) + if(CLAN_LASOMBRA) + var/list/powers = list(new /obj/effect/proc_holder/spell/targeted/lesser_glare, new /obj/effect/proc_holder/spell/targeted/shadowwalk) + for(var/obj/effect/proc_holder/spell/targeted/power in powers) + owner.current.AddSpell(powers) + /// 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) if(!master) @@ -147,13 +163,13 @@ * 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 +/obj/screen/alert/status_effect/agent_pinpointer/vassal_edition name = "Blood Bond" desc = "You always know where your master is." /datum/status_effect/agent_pinpointer/vassal_edition id = "agent_pinpointer" - alert_type = /atom/movable/screen/alert/status_effect/agent_pinpointer/vassal_edition + alert_type = /obj/screen/alert/status_effect/agent_pinpointer/vassal_edition minimum_range = VASSAL_SCAN_MIN_DISTANCE tick_interval = VASSAL_SCAN_PING_TIME duration = -1 diff --git a/code/modules/antagonists/eldritch_cult/eldritch_effects.dm b/code/modules/antagonists/eldritch_cult/eldritch_effects.dm index d70eda99a810..4a94ff8456b5 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_effects.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_effects.dm @@ -202,8 +202,11 @@ if(!ishuman(user)) return ..() var/mob/living/carbon/human/human_user = user + var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) if(IS_HERETIC(human_user)) - to_chat(human_user,span_boldwarning("You know better than to tempt forces out of your control!")) + to_chat(human_user, span_boldwarning("You know better than to tempt forces out of your control!")) + if(IS_BLOODSUCKER(human_user) || bloodsuckerdatum.my_clan == CLAN_LASOMBRA) + to_chat(human_user, span_boldwarning("This shard has already been harvested!")) else var/obj/item/bodypart/arm = human_user.get_active_hand() if(prob(25)) diff --git a/code/modules/antagonists/monsterhunter/monsterhunter.dm b/code/modules/antagonists/monsterhunter/monsterhunter.dm index 71ab566efe34..c184096242ae 100644 --- a/code/modules/antagonists/monsterhunter/monsterhunter.dm +++ b/code/modules/antagonists/monsterhunter/monsterhunter.dm @@ -2,8 +2,6 @@ #define HUNTER_SCAN_MAX_DISTANCE 15 /// 5s update time #define HUNTER_SCAN_PING_TIME 20 -/// Used for the pinpointer -#define STATUS_EFFECT_HUNTERPINPOINTER /datum/status_effect/agent_pinpointer/hunter_edition /datum/antagonist/monsterhunter name = "\improper Monster Hunter" @@ -13,55 +11,66 @@ var/list/datum/action/powers = list() var/datum/martial_art/hunterfu/my_kungfu = new var/give_objectives = TRUE - var/datum/action/bloodsucker/trackvamp = new/datum/action/bloodsucker/trackvamp() - var/datum/action/bloodsucker/fortitude = new/datum/action/bloodsucker/fortitude/hunter() + var/datum/action/bloodsucker/trackvamp = new /datum/action/bloodsucker/trackvamp() + var/datum/action/bloodsucker/fortitude = new /datum/action/bloodsucker/fortitude/hunter() -/datum/antagonist/monsterhunter/on_gain() - /// Buffs Monster Hunters +/datum/antagonist/monsterhunter/apply_innate_effects(mob/living/mob_override) + . = ..() + var/mob/living/current_mob = mob_override || owner.current + ADD_TRAIT(current_mob, TRAIT_NOSOFTCRIT, BLOODSUCKER_TRAIT) + ADD_TRAIT(current_mob, TRAIT_NOCRITDAMAGE, BLOODSUCKER_TRAIT) owner.unconvertable = TRUE - ADD_TRAIT(owner.current, TRAIT_NOSOFTCRIT, BLOODSUCKER_TRAIT) - ADD_TRAIT(owner.current, TRAIT_NOCRITDAMAGE, BLOODSUCKER_TRAIT) - /// Give Monster Hunter powers + my_kungfu.teach(current_mob, make_temporary = FALSE) + +/datum/antagonist/monsterhunter/remove_innate_effects(mob/living/mob_override) + . = ..() + var/mob/living/current_mob = mob_override || owner.current + REMOVE_TRAIT(current_mob, TRAIT_NOSOFTCRIT, BLOODSUCKER_TRAIT) + REMOVE_TRAIT(current_mob, TRAIT_NOCRITDAMAGE, BLOODSUCKER_TRAIT) + owner.unconvertable = FALSE + if(my_kungfu) + my_kungfu.remove(current_mob) + + +/datum/antagonist/monsterhunter/on_gain() + //Give Monster Hunter powers var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_MHUNTER] trackvamp.Grant(owner.current) fortitude.Grant(owner.current) hud.join_hud(owner.current) set_antag_hud(owner.current, "monsterhunter") if(give_objectives) - /// Give Hunter Objective + //Give Hunter Objective var/datum/objective/bloodsucker/monsterhunter/monsterhunter_objective = new monsterhunter_objective.owner = owner objectives += monsterhunter_objective - /// Give Theft Objective + //Give Theft Objective var/datum/objective/steal/steal_objective = new steal_objective.owner = owner steal_objective.find_target() objectives += steal_objective - /// Give Martial Arts - my_kungfu.teach(owner.current, 0) - /// Teach Stake crafting + //Teach Stake crafting owner.teach_crafting_recipe(/datum/crafting_recipe/hardened_stake) owner.teach_crafting_recipe(/datum/crafting_recipe/silver_stake) - . = ..() + return ..() /datum/antagonist/monsterhunter/on_removal() - /// Remove buffs - owner.unconvertable = FALSE - /// 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, BLOODSUCKER_TRAIT) - /// Remove Monster Hunter powers + //Remove Monster Hunter powers var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_MHUNTER] trackvamp.Remove(owner.current) fortitude.Remove(owner.current) hud.leave_hud(owner.current) set_antag_hud(owner.current, null) - /// Remove Martial Arts - if(my_kungfu) - my_kungfu.remove(owner.current) to_chat(owner.current, span_userdanger("Your hunt has ended: You enter retirement once again, and are no longer a Monster Hunter.")) return ..() + +/datum/antagonist/monsterhunter/on_body_transfer(mob/living/old_body, mob/living/new_body) + . = ..() + for(var/datum/action/bloodsucker/all_powers as anything in powers) + all_powers.Remove(old_body) + all_powers.Grant(new_body) + /// Mind version /datum/mind/proc/make_monsterhunter() @@ -112,13 +121,13 @@ /// TAKEN FROM: /datum/action/changeling/pheromone_receptors // pheromone_receptors.dm for a version of tracking that Changelings have! /datum/status_effect/agent_pinpointer/hunter_edition - alert_type = /atom/movable/screen/alert/status_effect/agent_pinpointer/hunter_edition + alert_type = /obj/screen/alert/status_effect/agent_pinpointer/hunter_edition minimum_range = HUNTER_SCAN_MIN_DISTANCE tick_interval = HUNTER_SCAN_PING_TIME duration = 10 SECONDS range_fuzz_factor = 5 //PINPOINTER_EXTRA_RANDOM_RANGE -/atom/movable/screen/alert/status_effect/agent_pinpointer/hunter_edition +/obj/screen/alert/status_effect/agent_pinpointer/hunter_edition name = "Monster Tracking" desc = "You always know where the hellspawn are." diff --git a/code/modules/antagonists/monsterhunter/monstertrack.dm b/code/modules/antagonists/monsterhunter/monstertrack.dm index 68906a260aa6..8fe48ab29bc9 100644 --- a/code/modules/antagonists/monsterhunter/monstertrack.dm +++ b/code/modules/antagonists/monsterhunter/monstertrack.dm @@ -18,11 +18,11 @@ . = ..() /// Return text indicating direction to_chat(owner, span_notice("You look around, scanning your environment and discerning signs of any filthy, wretched affronts to the natural order.")) - if(!do_after(owner, 6 SECONDS, src)) + if(!do_after(owner, 6 SECONDS, owner)) return if(give_pinpointer) var/mob/living/user = owner - user.apply_status_effect(STATUS_EFFECT_HUNTERPINPOINTER) + user.apply_status_effect(/datum/status_effect/agent_pinpointer/hunter_edition) display_proximity() /datum/action/bloodsucker/trackvamp/proc/display_proximity() diff --git a/code/modules/events/monsterhunter.dm b/code/modules/events/monsterhunter.dm index f5bb32146f5f..94584c3a7f9c 100644 --- a/code/modules/events/monsterhunter.dm +++ b/code/modules/events/monsterhunter.dm @@ -36,6 +36,8 @@ for(var/mob/living/carbon/human/all_players in shuffle(GLOB.player_list)) if(!all_players.client || !all_players.mind || !(ROLE_MONSTERHUNTER in all_players.client.prefs.be_special)) continue + if(all_players.client.prefs.yogtoggles & QUIET_ROUND) + continue if(all_players.stat == DEAD) continue if(!SSjob.GetJob(all_players.mind.assigned_role) || (all_players.mind.assigned_role in GLOB.nonhuman_positions)) // Only crewmembers on-station. diff --git a/code/modules/mob/living/carbon/status_procs.dm b/code/modules/mob/living/carbon/status_procs.dm index 1982fb1eff11..7bde0afb6d90 100644 --- a/code/modules/mob/living/carbon/status_procs.dm +++ b/code/modules/mob/living/carbon/status_procs.dm @@ -45,7 +45,12 @@ ////////////////////////////////////////TRAUMAS///////////////////////////////////////// -/mob/living/carbon/proc/get_traumas() +/mob/living/carbon/proc/get_traumas() + if(!mind) + return ..() + var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(src) + if(bloodsuckerdatum && HAS_TRAIT(src, TRAIT_MASQUERADE)) + return . = list() var/obj/item/organ/brain/B = getorganslot(ORGAN_SLOT_BRAIN) if(B) diff --git a/icons/mob/actions/actions_bloodsucker.dmi b/icons/mob/actions/actions_bloodsucker.dmi index 901589214ea27d40a9cf85be020b3aa2eb79f734..ddea3ec98ac8d83254a8b36d392af4c71a5e4a4c 100644 GIT binary patch literal 21819 zcmagFWn3Fy@GrbUinX{E3$$4AB85^MiWY|gEm~ZPyCpcq-5rV-FV^Dj?q1y8L-OSJ zzt8>L7x%?|k?bbBdv?y5neWUQ`JtjD^8%X!8vuY8a-nlqokB-QcDb1zlvn@ zqjfxs&jXD`JRHsAH3zK^PjIT~Y4_#O;f(UkG)(b(^@Q_C##nnjcFVlG}Q&Iu@ zE-7H|7?2eEXPNgABcZ2aFPb&em?ib6^JL?rwt&kg&E`Yf4y-TiB_Wj27UO<%#htpuuo*wG z=np49^(zPFWJ)u7p&6$ZbBo}++pf4eMxf&|08Q>q7XYdLyrZ9zBY`>9@cMdVL6d5$IOuo0%nO;&J zP16tQP1Wyf=zj?ryg%A}VMAhmZ)Wvo`GD|CqNa|^#H-X*0ZU3zcHYr(+j3~Q zASWfR;hu5S;^D2ay?{W7#QXSF(bLl##R3&*rvCW9!alP9_M!P$Ua$PMXZG30sKYrc zUHg!4*&@XOb=~Y=+LXVqJU%rk;Cw-Un@=M3Zh=UG6w~i$>Hf)KN5pAoIMs)dX!!oG z{$*P2@~-!&EBmbrXEGWL<&K9#fC~2qxkQrb$A$-mIf(8ZdNSM4+(ErCwXrWAhfdPw z4b0{C^!InJb38Ly=*4nfNgddF)83Br_Gr=c3)ggrDZcXyGhK%r#K@wP{KCwl^kelq z(v$g(a8df695QENG_rO+18?-Rgqmx9s?{dcpNGr~PHksB;KWD%&9K|Y=-nqgR|Z

S5(7mRHUW(|G%?|WAHkqRy+HrRPlWyR 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 V=o{ZQTfzVU002ovPDHLkV1o8DS*QR2 diff --git a/icons/mob/actions/actions_gangrel_bloodsucker.dmi b/icons/mob/actions/actions_gangrel_bloodsucker.dmi index aef8d3b6f05feb225789575426b0cfab3c047d75..d314c520630b75b461a49a10ac4a9a34bb53fb4b 100644 GIT binary patch literal 10986 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 FV1g4&$-n>r literal 2980 zcmZ9Oc{tST7r?(nmh9UI8ImtfgGGBO*nu`}-<8Qsljb)jIyWbxgtLk@OMk;QjyociZW3XFyT6e`Ha zXBIVj1L{%Jxcg;h`L)~I*KZ((QbnmTnJ=87*badhuNm!b*G?3~l7^O1G&=|wL&OS? z+0d2(G?6vIw~2x2S~6My@hdm1Y%O(Yf6^J-p)jzGws0& z$DkM$h6eR_tAsqpg8{(Aap|=8l<&ptfdjz(8{Qm7zZ~#HkGU;~yPSP`A`ryBfy4t3s!xLD48zai`$*yXR$KDcRR1-wMwcDbvHA~}gn+$}_wtoBSzV3ztC zGRk$lzScj)!8TM{05Xj3CqQPz1}W-pmo^Ne@yoTd#RGURv2H~p=%^@BgF%Ml~m z4(6LMXyjod=PLis99(2m<2!V0McrWoZs;pVfLZMc_^7Q4THs;|rq0)u*0Des&2QQj zqmV4HvGb$nanBEWvYnGM=;y-g^!0>!#tBYMq&AII(Q~DwEhY8qT*SNYSEgP+Au)F- z{k4;1C`|YTmjC_-1Fsb`KIab!qE(uK@cca3l0Z=j6lzo3%z8|t6$r{>$jvaHEq-2W zLE+Ro{F<}^X}XlimFxMHf!@>s5Y;NHZ#%y50j#SdMKM}BuZQ|VtNZ|;fE$R20CAU3R2?MjFyfBP2 za;h+m3qy-koI{)<+0co8Yat%OEb`O8c}d4hp?#N=wR&WT_|>^ zjeU-XE#9uNdf8E5HjVq$PFYMmT$n_APGzCVY988U3YDOVg|NC&y5y8S-11i7kKhdt z7EF#&oOwjyS6_LoT;^HW4f!{dl=W*(2~fA`b0Z}&Vy?BZ@yd~~k^`|&*QV++zQ?mi zngBAm5>y3|ZVcFd16|4JjF9?-1H3}&`BBSZT8Ils{a0o~)Ayv-Bn-kS6eFmFt(ocU z?x?{p$aamziA+5K1-S`JnW1GB)f=GpcjB&dosEa8(0O?=y$1GEyUr#DY2go?mL=P1wu_E|#& z{!(B#(A-xS!yyj8WcdCMHh{89&0R0v4LgZdj&z8T+6C^>_^Ju$d)#6Lh`5x!8Bg$% zA+A2htbi5x?zy}xyM9EPYxBJN(u6$V?jki3PO;HUy6xy=$W&ciZO0#W_{?L-jc9&^ z$^9(Z-fLYCA`2$dW+h+J4f0oBqR~={hj@-4d(x!ceMS*+weAC#0sIiDIg{^qR?w_! znNH?h@vxvI&ShHTW-u$za-(AH!j-u4&Hw}?6jAYX{|km7pNGSVg=?_miM8Irl-^6z zdvbDelnfcPWH(m}^DH&{9$yP$-A-;w;Ubl#4mG3rX4af6D1%>G&NbY1Od&FZ_DL0Y zA0cf$VH3?^qYKVqVbtHuSklHs`bW&I*lf5Don@3;d+zS)))a2QC={~cr-N~`j$NZ&zS?O9=jl>JrBc^qFfyLqG?BwhBKalxgv!BF+buVF_KWe9(o+DG+;bfNi4I4l~r^?LW0no@_uO? zdAJ5~v?E%I*4u6sO>Tg0Vqv zx2}=_RaMoqSvjxr<7QvyexS9_xO43t2kI-8-j5 z!9GfD&q)}YpNVLvVC$gy?}kr71W87LV%f7j;Nwm;M(y4)D;4X)mFW$A+u>~%^ztyq zN427`{*@*6gpcl_cuGguF;U7i;b}g*g(X+`ap|h9!tuh=R99zxNwH%y0La4D5m$3N z9QkGNb?+t@uyS84|fMX){afb41KQBC@^;iYfRBrjP;cSul8y`d2|Y;4}^^KDAi~!^ZY6NB{3DViDlHZo1!hu~)|afo<<8jeU#i$k9RI R#@X5p80*9IKIkB${sT|{r_TTY diff --git a/icons/mob/bloodsucker_mobs.dmi b/icons/mob/bloodsucker_mobs.dmi index ac3de343fd91a07de0ca2e3175954f57d0f64a68..c67e8181c6f1eb838c2cefa4aa49ca63f5822b40 100644 GIT binary patch delta 5542 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 XEt+7?^v0cp00000NkvXXu0mjf2R8ub diff --git a/icons/obj/vamp_obj.dmi b/icons/obj/vamp_obj.dmi index 647a984e22c8473902875fb7e143e2356ffd3dba..cd5a7843f9d1dd831a0bf45091deafb3b41b546d 100644 GIT binary patch literal 21939 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 literal 17218 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 diff --git a/yogstation.dme b/yogstation.dme index 98220be756c2..af3c7d9e9d03 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -1400,6 +1400,7 @@ #include "code\modules\antagonists\bloodsuckers\bloodsucker_flaws.dm" #include "code\modules\antagonists\bloodsuckers\bloodsucker_frenzy.dm" #include "code\modules\antagonists\bloodsuckers\bloodsucker_integration.dm" +#include "code\modules\antagonists\bloodsuckers\bloodsucker_mobs.dm" #include "code\modules\antagonists\bloodsuckers\bloodsucker_objectives.dm" #include "code\modules\antagonists\bloodsuckers\bloodsuckers.dm" #include "code\modules\antagonists\bloodsuckers\bloodsuckers_objects.dm" From b9381e7f086f2bf6bc2a5bbc41fd64c67eb7fed1 Mon Sep 17 00:00:00 2001 From: tattax <71668564+tattax@users.noreply.github.com> Date: Thu, 28 Apr 2022 01:22:11 -0300 Subject: [PATCH 02/20] woop --- code/__DEFINES/traits.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 88eddb6f95d4..363f9e4cef2f 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -326,7 +326,6 @@ #define BLOODSUCKER_TRAIT "bloodsucker_trait" #define FRENZY_TRAIT "frenzy_trait" #define HORROR_TRAIT "horror" -#define FEED_TRAIT "feed_trait" ///Traits given by station traits #define STATION_TRAIT_BANANIUM_SHIPMENTS "station_trait_bananium_shipments" From c9583983ff2555f86caad00d475bbdecefa34ba2 Mon Sep 17 00:00:00 2001 From: tattax <71668564+tattax@users.noreply.github.com> Date: Thu, 28 Apr 2022 01:34:07 -0300 Subject: [PATCH 03/20] forgot to undo this --- code/modules/mob/living/carbon/status_procs.dm | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/code/modules/mob/living/carbon/status_procs.dm b/code/modules/mob/living/carbon/status_procs.dm index 7bde0afb6d90..1982fb1eff11 100644 --- a/code/modules/mob/living/carbon/status_procs.dm +++ b/code/modules/mob/living/carbon/status_procs.dm @@ -45,12 +45,7 @@ ////////////////////////////////////////TRAUMAS///////////////////////////////////////// -/mob/living/carbon/proc/get_traumas() - if(!mind) - return ..() - var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(src) - if(bloodsuckerdatum && HAS_TRAIT(src, TRAIT_MASQUERADE)) - return +/mob/living/carbon/proc/get_traumas() . = list() var/obj/item/organ/brain/B = getorganslot(ORGAN_SLOT_BRAIN) if(B) From dd81a29cd8f53535f217071326a503525e7c418d Mon Sep 17 00:00:00 2001 From: tattax <71668564+tattax@users.noreply.github.com> Date: Thu, 28 Apr 2022 22:11:47 -0300 Subject: [PATCH 04/20] finishes tasks --- .../bloodsuckers/bloodsucker_flaws.dm | 15 +- .../bloodsuckers/bloodsucker_frenzy.dm | 2 +- .../bloodsuckers/bloodsucker_mobs.dm | 10 +- .../bloodsuckers/bloodsucker_objectives.dm | 19 ++ .../bloodsuckers/powers/_powers.dm | 7 +- .../antagonists/bloodsuckers/powers/cloak.dm | 1 + .../bloodsuckers/powers/fortitude.dm | 1 + .../bloodsuckers/powers/gangrel.dm | 169 +++++++++++------- .../bloodsuckers/powers/masquerade.dm | 6 +- .../bloodsuckers/powers/targeted/brawn.dm | 1 + .../bloodsuckers/powers/targeted/haste.dm | 1 - .../bloodsuckers/powers/targeted/lunge.dm | 1 + .../bloodsuckers/powers/targeted/mesmerize.dm | 1 + .../bloodsuckers/powers/targeted/trespass.dm | 1 + .../structures/bloodsucker_coffin.dm | 2 - .../structures/bloodsucker_crypt.dm | 12 +- .../structures/bloodsucker_life.dm | 3 +- .../structures/bloodsucker_recipes.dm | 5 +- icons/mob/actions/actions_bloodsucker.dmi | Bin 21819 -> 21979 bytes .../actions/actions_gangrel_bloodsucker.dmi | Bin 10986 -> 12784 bytes icons/obj/vamp_obj.dmi | Bin 21939 -> 17603 bytes 21 files changed, 164 insertions(+), 93 deletions(-) diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_flaws.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_flaws.dm index fd8e9f0bdb4b..1438e8c0ea03 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_flaws.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_flaws.dm @@ -30,12 +30,17 @@ AddHumanityLost(16.8) BuyPower(new /datum/action/bloodsucker/gangrel/transform) bloodsucker.faction |= "bloodhungry" //i love animals i love animals + RemovePower(/datum/action/bloodsucker/masquerade) + var/datum/objective/bloodsucker/frenzy/gangrel_objective = new + gangrel_objective.owner = owner + objectives += gangrel_objective if(CLAN_LASOMBRA) my_clan = CLAN_LASOMBRA to_chat(owner, span_announce("You have Ranked up enough to learn: You are part of the Lasombra Clan!\n\ - * As part of the Lasombra Clan, your past teachings have taught you how to become in touch with the Abyss and practice it's prophecies.\n\ + * As part of the Lasombra Clan, your past teachings have shown you how to become in touch with the Abyss and practice it's prophecies.\n\ * It'll take long before the Abyss can break through this plane's veil, but you'll try to salvage any of the energy that comes through,\n\ - * To harness it's energy a ritual must be done each night to gain a shadowpoint, shadowpoints let's you upgrades normal abilities into upgraded ones.\n\ + * To harness it's energy you must first find an influence and make a Resting Place altar to feed the harvested essence to.\n\ + * On the Resting Place you can give ranks or blood in exchange for shadowpoints, that can be spent on the table to ascend your abilities.\n\ * The Abyss has blackened your veins and made you immune to brute damage but highly receptive to burn, so you might need to be extra careful when on Torpor.\n\ * Finally, your Favorite Vassal will gain the Lesser Glare and Shadow Walk abilities to help you in combat.")) bloodsucker.physiology.burn_mod *= 2 @@ -49,8 +54,10 @@ for(var/obj/item/light_eater/blade in bloodsucker.held_items) QDEL_NULL(blade) GLOB.reality_smash_track.AddMind(owner) + var/datum/objective/bloodsucker/hierarchy/lasombra_objective = new + lasombra_objective.owner = owner + objectives += lasombra_objective + 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) - - owner.announce_objectives() \ No newline at end of file diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_frenzy.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_frenzy.dm index 4d4dd980aad3..8c851bf8e6c2 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_frenzy.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_frenzy.dm @@ -71,7 +71,7 @@ user.clear_cuffs(cuffs, TRUE) user.clear_cuffs(legcuffs, TRUE) // Keep track of how many times we've entered a Frenzy. - bloodsuckerdatum.frenzies += 1 + bloodsuckerdatum.frenzies++ bloodsuckerdatum.frenzied = TRUE return ..() diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm index f44969b673b7..594c887abf41 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm @@ -90,7 +90,7 @@ if(mind) mind.transfer_to(bloodsucker) bloodsucker.forceMove(get_turf(src)) - if(istype(src, /mob/living/simple_animal/hostile/bloodsucker/werewolf) && istype(src, /mob/living/simple_animal/hostile/bloodsucker/possessedarmor)) + if(istype(src, /mob/living/simple_animal/hostile/bloodsucker/werewolf) || istype(src, /mob/living/simple_animal/hostile/bloodsucker/possessedarmor)) STOP_PROCESSING(SSprocessing, src) return ..() @@ -121,13 +121,14 @@ /mob/living/simple_animal/hostile/bloodsucker/werewolf/process() if(bloodsucker) - initial(health) -= 0.44444444 //3 minutes to die + health -= 0.44444444 //3 minutes to die if(satiation == 3) to_chat(src, span_notice("It has been fed. You turn back to normal.")) qdel(src) return /mob/living/simple_animal/hostile/bloodsucker/werewolf/Destroy() + . = ..() if(ishuman(bloodsucker)) var/mob/living/carbon/human/user = bloodsucker var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) @@ -144,7 +145,7 @@ slot = SLOT_NECK if(2) additionalmessage = "You have mutated werewolf ears!" - mutation = /obj/item/clothing/ears/wolfears + mutation = /obj/item/radio/headset/wolfears slot = SLOT_EARS if(3) additionalmessage = "You have mutated werewolf claws!" @@ -156,6 +157,8 @@ additionalmessage = "You have mutated werewolf legs!" mutation = /obj/item/clothing/shoes/wolflegs slot = SLOT_SHOES + if(DIGITIGRADE in user.dna.species.species_traits) + mutation = /obj/item/clothing/shoes/xeno_wraps/wolfdigilegs if(5 to INFINITY) to_chat(user, span_danger("The beast inside of you seems satisfied with your current form.")) return @@ -163,7 +166,6 @@ var/obj/item/pastdrip = user.get_item_by_slot(slot) user.dropItemToGround(pastdrip) user.equip_to_slot_or_del(new mutation(user), slot) - return ..() //////////////////////// /// Armor /// diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_objectives.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_objectives.dm index 3a6864250cc3..a964e4932b34 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_objectives.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_objectives.dm @@ -365,6 +365,25 @@ return TRUE return FALSE +/datum/objective/bloodsucker/hierarchy + name = "hierarchy" + +/datum/objective/bloodsucker/hierarchy/New() + target_amount = rand(4,5) + ..() + +/datum/objective/bloodsucker/hierarchy/update_explanation_text() + . = ..() + explanation_text = "Ascend [target_amount] abilities using a Resting Place altar." + +/datum/objective/bloodsucker/hierarchy/check_completion() + var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.current.mind.has_antag_datum(/datum/antagonist/bloodsucker) + if(!bloodsuckerdatum) + return FALSE + if(bloodsuckerdatum.clanprogress >= target_amount) + return TRUE + return FALSE + ////////////////////////////////////////////////////////////////////////////////////// /// Mutilate a certain amount of Vassals diff --git a/code/modules/antagonists/bloodsuckers/powers/_powers.dm b/code/modules/antagonists/bloodsuckers/powers/_powers.dm index 3c87e578f299..b4b92e894001 100644 --- a/code/modules/antagonists/bloodsuckers/powers/_powers.dm +++ b/code/modules/antagonists/bloodsuckers/powers/_powers.dm @@ -22,7 +22,7 @@ /// Requirement flags for checks check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY|BP_CANT_USE_WHILE_STAKED|BP_CANT_USE_WHILE_INCAPACITATED|BP_CANT_USE_WHILE_UNCONSCIOUS /// Who can purchase the Power - var/purchase_flags = NONE // BLOODSUCKER_CAN_BUY|LASOMBRA_CAN_BUY|VASSAL_CAN_BUY|HUNTER_CAN_BUY + var/purchase_flags = NONE // BLOODSUCKER_CAN_BUY|LASOMBRA_CAN_BUY|GANGREL_CAN_BUY|VASSAL_CAN_BUY|HUNTER_CAN_BUY // COOLDOWNS // ///Timer between Power uses. @@ -40,8 +40,7 @@ ///The cost to MAINTAIN this Power - Only used for Constant Cost Powers var/constant_bloodcost = 0 ///If the Power has any additional descriptions coming from either 3rd partys or the power itself - var/additional_desc = FALSE - var/additional_text + var/additional_text = "" // Modify description to add cost. /datum/action/bloodsucker/New(Target) @@ -50,7 +49,7 @@ /datum/action/bloodsucker/proc/UpdateDesc() desc = initial(desc) - if(additional_desc) + if(length(additional_text) > 0) desc += "

ASCENDED: [additional_text]" if(bloodcost > 0) desc += "

COST: [bloodcost] Blood" diff --git a/code/modules/antagonists/bloodsuckers/powers/cloak.dm b/code/modules/antagonists/bloodsuckers/powers/cloak.dm index 8bf79fce00ae..b28b06a5791f 100644 --- a/code/modules/antagonists/bloodsuckers/powers/cloak.dm +++ b/code/modules/antagonists/bloodsuckers/powers/cloak.dm @@ -80,6 +80,7 @@ background_icon_state_off = "lasombra_power_off" icon_icon = 'icons/mob/actions/actions_lasombra_bloodsucker.dmi' button_icon_state = "power_state" + additional_text = "Additionally allows you to run during cloak and gain a physical cloak while in darkness." purchase_flags = LASOMBRA_CAN_BUY constant_bloodcost = 0.3 runbound = FALSE diff --git a/code/modules/antagonists/bloodsuckers/powers/fortitude.dm b/code/modules/antagonists/bloodsuckers/powers/fortitude.dm index d8c706f3de09..eab22a055d49 100644 --- a/code/modules/antagonists/bloodsuckers/powers/fortitude.dm +++ b/code/modules/antagonists/bloodsuckers/powers/fortitude.dm @@ -90,6 +90,7 @@ background_icon_state_off = "lasombra_power_off" icon_icon = 'icons/mob/actions/actions_lasombra_bloodsucker.dmi' button_icon_state = "power_armor" + additional_text = "Additionally gives you extra damage while fortitude'd and agro grab while in darkness." purchase_flags = LASOMBRA_CAN_BUY constant_bloodcost = 0.3 var/mutable_appearance/armor_overlay diff --git a/code/modules/antagonists/bloodsuckers/powers/gangrel.dm b/code/modules/antagonists/bloodsuckers/powers/gangrel.dm index 0e9130da72db..3eca3f58f178 100644 --- a/code/modules/antagonists/bloodsuckers/powers/gangrel.dm +++ b/code/modules/antagonists/bloodsuckers/powers/gangrel.dm @@ -122,8 +122,8 @@ . = ..() /* ////////////////||\\\\\\\\\\\\\\\\ -\\ Bat Only // -// Powers \\ +\\ Bat Only // +// Powers \\ \\\\\\\\\\\\\\\\||//////////////// */ /datum/action/bloodsucker/targeted/haste/batdash @@ -251,8 +251,8 @@ /* //\\ //\\ ////////////////||\\\\\\\\\\\\\\\\ -\\ Wolf Only // -// Powers \\ +\\ Wolf Only // +// Powers \\ \\\\\\\\\\\\\\\\||//////////////// */ @@ -264,14 +264,15 @@ button_icon_state = "power_feast" background_icon_state_on = "wolf_power_on" background_icon_state_off = "wolf_power_off" - power_explanation = "Fortitude:\n\ - Activating Fortitude will provide pierce, stun and dismember immunity.\n\ - You will additionally gain resistance to Brute and Stamina damge, scaling with level.\n\ - While using Fortitude, attempting to run will crush you.\n\ - At level 4, you gain complete stun immunity.\n\ - Higher levels will increase Brute and Stamina resistance." + power_explanation = "Feast:\n\ + Feasting on a dead person will give you a satiation point and gib them.\n\ + Satiation points are essential for overcoming frenzy, after gathering 3 you'll turn back to normal.\n\ + Feasting on someone while they are alive will bite them and make them bleed.\n\ + Has a medium recharge time to be helpful in combat.\n\ + There might be some consequences after coming back from frenzy though.." power_flags = BP_AM_TOGGLE check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY|BP_AM_COSTLESS_UNCONSCIOUS + purchase_flags = GANGREL_CAN_BUY bloodcost = 0 cooldown = 10 SECONDS target_range = 1 @@ -303,13 +304,13 @@ background_icon_state_on = "wolf_power_on" background_icon_state_off = "wolf_power_off" power_explanation = "Fortitude:\n\ - Activating Fortitude will provide pierce, stun and dismember immunity.\n\ - You will additionally gain resistance to Brute and Stamina damge, scaling with level.\n\ - While using Fortitude, attempting to run will crush you.\n\ - At level 4, you gain complete stun immunity.\n\ - Higher levels will increase Brute and Stamina resistance." + Activating Wolftitude will provide more attack damage, and more overall health.\n\ + It will give you a minor health buff while it stands, but slow you down severely.\n\ + It has a decent cooldown time to allow yourself to turn it off and run away for a while.\n\ + Created from your Fortitude ability." power_flags = BP_AM_TOGGLE check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY|BP_AM_COSTLESS_UNCONSCIOUS + purchase_flags = GANGREL_CAN_BUY bloodcost = 0 cooldown = 8 SECONDS @@ -317,22 +318,22 @@ . = ..() to_chat(owner, span_notice("Your fur and claws harden, becoming as hard as steel.")) var/mob/living/simple_animal/hostile/A = owner - A.maxHealth = initial(A.maxHealth) * 1.2 - A.health = min(initial(A.maxHealth), initial(A.health) * 1.2) + A.maxHealth *= 1.2 + A.health *= 1.2 A.set_varspeed(initial(A.speed) + 2) // slower - A.harm_intent_damage = initial(A.harm_intent_damage) + 10 - A.melee_damage_lower = initial(A.melee_damage_lower) + 10 - A.melee_damage_upper = initial(A.melee_damage_upper) + 10 + A.harm_intent_damage += 10 + A.melee_damage_lower += 10 + A.melee_damage_upper += 10 /datum/action/bloodsucker/gangrel/wolfortitude/DeactivatePower() . = ..() var/mob/living/simple_animal/hostile/A = owner - A.maxHealth = initial(A.maxHealth) / 1.2 - A.health = min(initial(A.maxHealth), initial(A.health) / 1.2) + A.maxHealth /= 1.2 + A.health /= 1.2 A.set_varspeed(initial(A.speed)) - A.harm_intent_damage = initial(A.harm_intent_damage) - 10 - A.melee_damage_lower = initial(A.melee_damage_lower) - 10 - A.melee_damage_upper = initial(A.melee_damage_upper) - 10 + A.harm_intent_damage -= 10 + A.melee_damage_lower -= 10 + A.melee_damage_upper -= 10 /datum/action/bloodsucker/targeted/pounce name = "Pounce" @@ -342,16 +343,13 @@ button_icon_state = "power_pounce" background_icon_state_on = "wolf_power_on" background_icon_state_off = "wolf_power_off" - power_explanation = "Predatory Lunge:\n\ - Click any player to instantly dash at them if above power level 3, aggressively grabbing them.\n\ - If not on level 3, you will have to charge your lunge for a while. During this time you'll have to stand still for lunge to work\n\ - You cannot use the Power if you are aggressively grabbed.\n\ - If the target is wearing riot gear or is a Monster Hunter, you will merely passively grab them.\n\ - If grabbed from behind or from the darkness (Cloak of Darkness counts) with a power level at or above 4, will additionally knock the target down.\n\ - Higher levels will increase the knockdown dealt to enemies." + power_explanation = "Pounce:\n\ + Click any player to instantly dash at them, knocking them down and paralyzing them for a short while.\n\ + Additionally if they are dead you'll consume their corpse to gain satiation and get closer to leaving frenzy.\n\ + Created from your Predatory Lunge ability." power_flags = BP_AM_TOGGLE check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY|BP_CANT_USE_WHILE_INCAPACITATED|BP_CANT_USE_WHILE_UNCONSCIOUS - purchase_flags = BLOODSUCKER_CAN_BUY|VASSAL_CAN_BUY + purchase_flags = GANGREL_CAN_BUY bloodcost = 0 cooldown = 10 SECONDS target_range = 6 @@ -391,8 +389,8 @@ user.devour(target) PowerActivatedSuccessfully() return - target.Knockdown(8 SECONDS) - target.Paralyze(2 SECONDS) + target.Knockdown(6 SECONDS) + target.Paralyze(1 SECONDS) PowerActivatedSuccessfully() /datum/action/bloodsucker/targeted/pounce/CheckValidTarget(atom/target_atom) @@ -415,14 +413,14 @@ button_icon_state = "power_howl" background_icon_state_on = "wolf_power_on" background_icon_state_off = "wolf_power_off" - power_explanation = "Fortitude:\n\ - Activating Fortitude will provide pierce, stun and dismember immunity.\n\ - You will additionally gain resistance to Brute and Stamina damge, scaling with level.\n\ - While using Fortitude, attempting to run will crush you.\n\ - At level 4, you gain complete stun immunity.\n\ - Higher levels will increase Brute and Stamina resistance." + power_explanation = "Howl:\n\ + Activating Howl will start up a 2 and a half second charge up.\n\ + After the charge up you'll knockdown anyone adjacent to you.\n\ + Additionally, you'll confuse and deafen anyone in a 3 tile range.\n\ + Created from your Cloak of Darkness ability." power_flags = BP_AM_TOGGLE check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY|BP_AM_COSTLESS_UNCONSCIOUS + purchase_flags = GANGREL_CAN_BUY bloodcost = 0 cooldown = 15 SECONDS @@ -455,13 +453,13 @@ background_icon_state_on = "wolf_power_on" background_icon_state_off = "wolf_power_off" power_explanation = "Rabidism:\n\ - Activating Fortitude will provide pierce, stun and dismember immunity.\n\ - You will additionally gain resistance to Brute and Stamina damge, scaling with level.\n\ - While using Fortitude, attempting to run will crush you.\n\ - At level 4, you gain complete stun immunity.\n\ - Higher levels will increase Brute and Stamina resistance." + Rabidism will deal reduced damage to everyone in range including you.\n\ + During Rabidism's ten second rage you'll deal alot more damage to structures.\n\ + Be aware of it's long cooldown time.\n\ + Created from your Tresspass ability" power_flags = BP_AM_TOGGLE check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY|BP_AM_COSTLESS_UNCONSCIOUS + purchase_flags = GANGREL_CAN_BUY bloodcost = 0 cooldown = 20 SECONDS @@ -469,13 +467,12 @@ . = ..() var/mob/living/simple_animal/hostile/bloodsucker/werewolf/A = owner A.environment_smash = ENVIRONMENT_SMASH_RWALLS - A.harm_intent_damage = initial(A.harm_intent_damage) - 10 - A.melee_damage_lower = initial(A.melee_damage_lower) - 10 - A.melee_damage_upper = initial(A.melee_damage_upper) - 10 - A.obj_damage = initial(A.obj_damage) * 3 + A.harm_intent_damage -= 10 + A.melee_damage_lower -= 10 + A.melee_damage_upper -= 10 + A.obj_damage *= 3 START_PROCESSING(SSprocessing, src) - spawn(10 SECONDS) - DeactivatePower() + addtimer(CALLBACK(src, .proc/DeactivatePower), 10 SECONDS) /datum/action/bloodsucker/gangrel/rabidism/process() var/mob/living/simple_animal/hostile/bloodsucker/werewolf/A = owner @@ -503,14 +500,13 @@ background_icon_state_on = "gangrel_power_on" background_icon_state_off = "gangrel_power_off" power_explanation = "Tear:\n\ - Activating Fortitude will provide pierce, stun and dismember immunity.\n\ - You will additionally gain resistance to Brute and Stamina damge, scaling with level.\n\ - While using Fortitude, attempting to run will crush you.\n\ - At level 4, you gain complete stun immunity.\n\ - Higher levels will increase Brute and Stamina resistance." + Tear will make your first attack start up a bleeding process.\n\ + Bleeding process will only work if the target stands still.\n\ + When it's done it will damage the target severely." power_flags = BP_AM_TOGGLE check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY|BP_AM_COSTLESS_UNCONSCIOUS - bloodcost = 6 + purchase_flags = GANGREL_CAN_BUY + bloodcost = 10 cooldown = 20 SECONDS var/mob/living/mauled @@ -558,8 +554,8 @@ return FALSE /obj/item/clothing/neck/wolfcollar - name = "Wolf Legs" - desc = "damn" + name = "Wolf Collar" + desc = "Hopefully no more neck snaps!" icon_state = "collar" item_state = "collar" icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' @@ -567,9 +563,9 @@ armor = list("melee" = 0, "bullet" = 0, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 10, "acid" = 100) body_parts_covered = NECK -/obj/item/clothing/ears/wolfears - name = "Wolf Legs" - desc = "damn" +/obj/item/radio/headset/wolfears + name = "Wolf Ears" + desc = "If only you had a encoder to speak through the channels." icon_state = "ears" item_state = "ears" icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' @@ -578,10 +574,9 @@ flags_inv = HIDEHAIR|HIDEFACE alternate_worn_layer = ABOVE_BODY_FRONT_LAYER - /obj/item/clothing/gloves/wolfclaws - name = "Wolf Legs" - desc = "damn" + name = "Wolf Claws" + desc = "Tear them to shreds!" icon_state = "claws" item_state = "claws" icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' @@ -592,7 +587,7 @@ /obj/item/clothing/shoes/wolflegs name = "Wolf Legs" - desc = "damn" + desc = "Atleast they make you go faster." icon_state = "legs" item_state = "legs" icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' @@ -600,10 +595,48 @@ slowdown = SHOES_SLOWDOWN - 0.5 body_parts_covered = GROIN|LEGS|FEET +/obj/item/clothing/shoes/xeno_wraps/wolfdigilegs + name = "Wolf Legs" + desc = "Atleast they make you go faster. Oh wait you probably didn't mind anyways..." + icon_state = "digilegs" + item_state = "digilegs" + icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' + alternate_worn_icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' + slowdown = SHOES_SLOWDOWN - 0.5 + xenoshoe = YES_DIGIT + body_parts_covered = GROIN|LEGS|FEET + +/obj/item/clothing/neck/wolfcollar/Initialize() + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, BLOODSUCKER_TRAIT) + +/obj/item/radio/headset/wolfears/Initialize() + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, BLOODSUCKER_TRAIT) + make_syndie() + +/obj/item/radio/headset/wolfears/ComponentInitialize() + . = ..() + AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS)) + +/obj/item/clothing/gloves/wolfclaws/Initialize() + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, BLOODSUCKER_TRAIT) + +/obj/item/clothing/shoes/wolflegs/Initialize() + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, BLOODSUCKER_TRAIT) + +/obj/item/clothing/shoes/xeno_wraps/wolfdigilegs/Initialize() + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, BLOODSUCKER_TRAIT) + /obj/item/clothing/gloves/wolfclaws/equipped(mob/user, slot) . = ..() if(!ishuman(user)) return + if(!IS_BLOODSUCKER(user)) + return if(slot == SLOT_GLOVES) var/mob/living/carbon/human/H = user tearaction.Grant(H) @@ -612,6 +645,8 @@ . = ..() if(!ishuman(user)) return + if(!IS_BLOODSUCKER(user)) + return var/mob/living/carbon/human/H = user if(H.get_item_by_slot(SLOT_GLOVES) == src) tearaction.Remove(H) diff --git a/code/modules/antagonists/bloodsuckers/powers/masquerade.dm b/code/modules/antagonists/bloodsuckers/powers/masquerade.dm index 3e536df1279b..b4cc906f5b8e 100644 --- a/code/modules/antagonists/bloodsuckers/powers/masquerade.dm +++ b/code/modules/antagonists/bloodsuckers/powers/masquerade.dm @@ -42,8 +42,8 @@ if(istype(neckdrip, /obj/item/clothing/neck/wolfcollar)) theqdeld += neckdrip if(bloodsuckerdatum.clanprogress >= 2) - var/obj/item/clothing/ears/earsdrip = user.get_item_by_slot(SLOT_EARS) - if(istype(earsdrip, /obj/item/clothing/ears/wolfears)) + var/obj/item/earsdrip = user.get_item_by_slot(SLOT_EARS) + if(istype(earsdrip, /obj/item/radio/headset/wolfears)) theqdeld += earsdrip if(bloodsuckerdatum.clanprogress >= 3) var/obj/item/clothing/gloves/glovesdrip = user.get_item_by_slot(SLOT_GLOVES) @@ -115,7 +115,7 @@ if(bloodsuckerdatum.clanprogress >= 2) var/obj/item/clothing/ears/previousdrip = user.get_item_by_slot(SLOT_EARS) user.dropItemToGround(previousdrip) - user.equip_to_slot_or_del(new /obj/item/clothing/ears/wolfears(user), SLOT_EARS) + user.equip_to_slot_or_del(new /obj/item/radio/headset/wolfears(user), SLOT_EARS) if(bloodsuckerdatum.clanprogress >= 3) var/obj/item/clothing/gloves/previousdrip = user.get_item_by_slot(SLOT_GLOVES) user.dropItemToGround(previousdrip) diff --git a/code/modules/antagonists/bloodsuckers/powers/targeted/brawn.dm b/code/modules/antagonists/bloodsuckers/powers/targeted/brawn.dm index 49764c3ee004..184677fb6b00 100644 --- a/code/modules/antagonists/bloodsuckers/powers/targeted/brawn.dm +++ b/code/modules/antagonists/bloodsuckers/powers/targeted/brawn.dm @@ -203,6 +203,7 @@ background_icon_state_off = "lasombra_power_off" icon_icon = 'icons/mob/actions/actions_lasombra_bloodsucker.dmi' button_icon_state = "power_obliterate" + additional_text = "Additionally afflicts the target with a shadow curse while in darkness and disables any lights they may possess." purchase_flags = LASOMBRA_CAN_BUY /datum/action/bloodsucker/targeted/brawn/shadow/FireTargetedPower(atom/target_atom) diff --git a/code/modules/antagonists/bloodsuckers/powers/targeted/haste.dm b/code/modules/antagonists/bloodsuckers/powers/targeted/haste.dm index e53fa06ee25b..d17c4f75f2b1 100644 --- a/code/modules/antagonists/bloodsuckers/powers/targeted/haste.dm +++ b/code/modules/antagonists/bloodsuckers/powers/targeted/haste.dm @@ -105,7 +105,6 @@ background_icon_state_off = "lasombra_power_off" icon_icon = 'icons/mob/actions/actions_lasombra_bloodsucker.dmi' button_icon_state = "power_bomb" - additional_desc = TRUE additional_text = "Additionally disables lightframes in range and confuses nearby mortals." purchase_flags = LASOMBRA_CAN_BUY diff --git a/code/modules/antagonists/bloodsuckers/powers/targeted/lunge.dm b/code/modules/antagonists/bloodsuckers/powers/targeted/lunge.dm index cac0c7d6955e..7bcefaf6a50a 100644 --- a/code/modules/antagonists/bloodsuckers/powers/targeted/lunge.dm +++ b/code/modules/antagonists/bloodsuckers/powers/targeted/lunge.dm @@ -161,6 +161,7 @@ background_icon_state_off = "lasombra_power_off" icon_icon = 'icons/mob/actions/actions_lasombra_bloodsucker.dmi' button_icon_state = "power_embrace" + additional_text = "Additionally makes the target walk." purchase_flags = LASOMBRA_CAN_BUY /datum/action/bloodsucker/targeted/lunge/shadow/lunge_end(atom/hit_atom) diff --git a/code/modules/antagonists/bloodsuckers/powers/targeted/mesmerize.dm b/code/modules/antagonists/bloodsuckers/powers/targeted/mesmerize.dm index 2cbc3afbb6bb..88a0bebd43e9 100644 --- a/code/modules/antagonists/bloodsuckers/powers/targeted/mesmerize.dm +++ b/code/modules/antagonists/bloodsuckers/powers/targeted/mesmerize.dm @@ -134,6 +134,7 @@ background_icon_state_off = "lasombra_power_off" icon_icon = 'icons/mob/actions/actions_lasombra_bloodsucker.dmi' button_icon_state = "power_glare" + additional_text = "Additionally makes the stun downtime based on distance, being instant when adjacent." purchase_flags = LASOMBRA_CAN_BUY /datum/action/bloodsucker/targeted/mesmerize/shadow/FireTargetedPower(atom/target_atom) diff --git a/code/modules/antagonists/bloodsuckers/powers/targeted/trespass.dm b/code/modules/antagonists/bloodsuckers/powers/targeted/trespass.dm index 13bc6948ba94..a3dfba53991a 100644 --- a/code/modules/antagonists/bloodsuckers/powers/targeted/trespass.dm +++ b/code/modules/antagonists/bloodsuckers/powers/targeted/trespass.dm @@ -119,5 +119,6 @@ background_icon_state_off = "lasombra_power_off" icon_icon = 'icons/mob/actions/actions_lasombra_bloodsucker.dmi' button_icon_state = "power_manifest" + additional_text = "Additionally allows you pass through walls, albeit at a slower rate." purchase_flags = LASOMBRA_CAN_BUY wallbound = FALSE \ No newline at end of file diff --git a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_coffin.dm b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_coffin.dm index 6fece42810d0..f89008ee8da3 100644 --- a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_coffin.dm +++ b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_coffin.dm @@ -41,8 +41,6 @@ desc = "For those departed who are not so dear." icon_state = "coffin" icon = 'icons/obj/vamp_obj.dmi' - open_sound = 'sound/effects/coffin_open.ogg' - close_sound = 'sound/effects/coffin_close.ogg' breakout_time = 30 SECONDS pryLidTimer = 20 SECONDS resistance_flags = NONE diff --git a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm index dd129cd64aa1..495039300199 100644 --- a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm +++ b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm @@ -200,7 +200,7 @@ desc = "This seem to hold a bit of significance." icon_state = "restingplace" var/awoken = FALSE - Ghost_desc = "This is a Resting Place, where lasombra bloodsucker can ascend their powers." + Ghost_desc = "This is a Resting Place, where Lasombra bloodsucker can ascend their powers." Vamp_desc = "This is a Resting Place, which allows you to ascend your powers by gaining points using your ranks or blood.\n\ Interact with the Altar by clicking on it after you have fed it a abyssal essence, acquirable through influences.\n\ Remember most ascended powers have benefits if used in the dark.\n\ @@ -236,7 +236,8 @@ qdel(H) awoken = TRUE return - return to_chat(user, span_cult("Seems like you need a direct link to the abyss to awaken [src]. Maybe searching a spacial influence would yield something.")) + to_chat(user, span_cult("Seems like you need a direct link to the abyss to awaken [src]. Maybe searching a spacial influence would yield something.")) + return . = ..() /obj/effect/reality_smash/attack_hand(mob/user, list/modifiers) // this is important @@ -288,9 +289,11 @@ bloodsuckerdatum.powers -= choice qdel(choice) to_chat(user, span_boldnotice("You have ascended [choice]!")) + bloodsuckerdatum.clanpoints-- return if(bloodsuckerdatum.bloodsucker_level >= 4 ) if(!awoken) //don't want this to affect power upgrading if you make another one + to_chat(user, span_cult("Seems like you need a direct link to the abyss to awaken [src]. Maybe searching a spacial influence would yield something.")) return icon_state = initial(icon_state) + (awoken ? "_idle" : "_awaken") update_icon() @@ -298,6 +301,7 @@ switch(bloodsuckerdatum.clanprogress) if(0) bloodsuckerdatum.clanprogress++ + bloodsuckerdatum.clanpoints++ to_chat(user, span_notice("As you touch the [src] you feel the a slight abyssal pulse flow through you... You have gained a point!")) return if(1 to 3) @@ -309,7 +313,7 @@ if(8 to INFINITY) to_chat(user, span_notice("You have evolved all abilities possible.")) return - var/want_clantask = alert("Do you want to spend a rank to ascend an ability? This will cost [rankspent] ranks.", "Dark Manager", "Yes", "No") + var/want_clantask = alert("Do you want to spend a rank to gain a shadowpoint? This will cost [rankspent] ranks.", "Dark Manager", "Yes", "No") if(want_clantask == "No" || QDELETED(src)) return if(bloodsuckerdatum.bloodsucker_level_unspent < rankspent) @@ -318,7 +322,7 @@ return var/mob/living/carbon/C = user if(C.blood_volume < 550) - to_chat(user, span_danger("You don't have enough blood to gain a task!")) + to_chat(user, span_danger("You don't have enough blood to gain a shadowpoint!")) return C.blood_volume -= 550 else diff --git a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_life.dm b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_life.dm index c168b75c9e4f..8875736f10be 100644 --- a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_life.dm +++ b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_life.dm @@ -225,7 +225,7 @@ // BLOOD_VOLUME_GOOD: [336] - Pale // handled in bloodsucker_integration.dm // BLOOD_VOLUME_EXIT: [560] - Exit Frenzy (If in one) This is high because we want enough to kill the poor soul they feed off of. - if(owner.current.blood_volume >= FRENZY_THRESHOLD_EXIT || frenzied) + if(owner.current.blood_volume >= FRENZY_THRESHOLD_EXIT && frenzied) owner.current.remove_status_effect(STATUS_EFFECT_FRENZY) // BLOOD_VOLUME_BAD: [224] - Jitter if(owner.current.blood_volume < BLOOD_VOLUME_BAD(owner.current) && prob(0.5) && !HAS_TRAIT(owner.current, TRAIT_NODEATH) && !HAS_TRAIT(owner.current, TRAIT_MASQUERADE)) @@ -287,6 +287,7 @@ wolf_powers += new /datum/action/bloodsucker/gangrel/rabidism for(var/datum/action/bloodsucker/power in wolf_powers) power.Grant(ww) + frenzies++ return owner.current.apply_status_effect(STATUS_EFFECT_FRENZY) diff --git a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_recipes.dm b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_recipes.dm index 774185d99241..6062ab02c38c 100644 --- a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_recipes.dm +++ b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_recipes.dm @@ -70,8 +70,9 @@ result = /obj/structure/bloodsucker/bloodaltar/restingplace tools = list(TOOL_WRENCH, TOOL_SCREWDRIVER) reqs = list( - /obj/structure/bloodsucker/bloodaltar, - /obj/structure/closet/crate/coffin/blackcoffin + /obj/item/stack/rods = 5, + /obj/item/stack/sheet/metal = 5, + /obj/item/stack/sheet/cloth = 2, //that's right it comes with bones FREE OF CHARGE ) time = 15 SECONDS category = CAT_STRUCTURES diff --git a/icons/mob/actions/actions_bloodsucker.dmi b/icons/mob/actions/actions_bloodsucker.dmi index ddea3ec98ac8d83254a8b36d392af4c71a5e4a4c..ac96186a200cbd39710dae9dcff4c498c98c1f94 100644 GIT binary patch literal 21979 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

S5(7mRHUW(|G%?|WAHkqRy+HrRPlWyR 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 literal 10986 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 P00000NkvXXu0mjf#UZts literal 21939 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 From 88d3a82edcae06afeb3566c95e5607598608e8c8 Mon Sep 17 00:00:00 2001 From: tattax <71668564+tattax@users.noreply.github.com> Date: Thu, 28 Apr 2022 22:17:00 -0300 Subject: [PATCH 05/20] s --- .../bloodsuckers/structures/bloodsucker_crypt.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm index 495039300199..64f3c67b86ed 100644 --- a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm +++ b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm @@ -235,9 +235,9 @@ to_chat(usr, span_notice("As you touch [src] with the [H], you start sensing something different coming from [src]!")) qdel(H) awoken = TRUE - return - to_chat(user, span_cult("Seems like you need a direct link to the abyss to awaken [src]. Maybe searching a spacial influence would yield something.")) - return + else + to_chat(user, span_cult("Seems like you need a direct link to the abyss to awaken [src]. Maybe searching a spacial influence would yield something.")) + return . = ..() /obj/effect/reality_smash/attack_hand(mob/user, list/modifiers) // this is important From a2fb050eb3bb6b44b996b0b8be42f75c63ac7404 Mon Sep 17 00:00:00 2001 From: tattax <71668564+tattax@users.noreply.github.com> Date: Thu, 28 Apr 2022 22:21:43 -0300 Subject: [PATCH 06/20] d --- .../antagonists/bloodsuckers/structures/bloodsucker_crypt.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm index 64f3c67b86ed..b92eadf86117 100644 --- a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm +++ b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm @@ -236,7 +236,7 @@ qdel(H) awoken = TRUE else - to_chat(user, span_cult("Seems like you need a direct link to the abyss to awaken [src]. Maybe searching a spacial influence would yield something.")) + to_chat(user, span_cult("Seems like you need a direct link to the abyss to awaken [src]. Maybe searching a spacial influence would yield something.")) return . = ..() From 7163702ac59434875640ca84743b048e67665c96 Mon Sep 17 00:00:00 2001 From: tattax <71668564+tattax@users.noreply.github.com> Date: Mon, 2 May 2022 02:31:26 -0300 Subject: [PATCH 07/20] adds demo midround tzimisce clan and rebalances stuff i'll update the pr later --- code/__DEFINES/bloodsuckers.dm | 7 + .../gamemodes/bloodsuckers/bloodsucker.dm | 6 +- .../bloodsuckers/bloodsucker_daylight.dm | 4 +- .../bloodsuckers/bloodsucker_mobs.dm | 104 +++++++- .../antagonists/bloodsuckers/bloodsuckers.dm | 2 +- .../bloodsuckers/bloodsuckers_objects.dm | 11 + .../bloodsuckers/powers/masquerade.dm | 76 +++--- .../bloodsuckers/powers/targeted/tzimisce.dm | 145 +++++++++++ .../antagonists/bloodsuckers/powers/veil.dm | 2 +- .../structures/bloodsucker_coffin.dm | 3 +- .../structures/bloodsucker_crypt.dm | 240 +++++++++++++++++- .../structures/bloodsucker_life.dm | 2 +- code/modules/events/monsterhunter.dm | 2 - code/modules/events/tzimisce.dm | 81 ++++++ .../mob/living/carbon/human/examine.dm | 4 +- .../actions/actions_gangrel_bloodsucker.dmi | Bin 12784 -> 12771 bytes .../actions/actions_lasombra_bloodsucker.dmi | Bin 3635 -> 3643 bytes .../actions/actions_tzimisce_bloodsucker.dmi | Bin 0 -> 1330 bytes icons/mob/bloodsucker_mobs.dmi | Bin 5561 -> 7535 bytes icons/obj/vamp_obj.dmi | Bin 17603 -> 22088 bytes yogstation.dme | 2 + yogstation/icons/mob/hud.dmi | Bin 19825 -> 19998 bytes 22 files changed, 625 insertions(+), 66 deletions(-) create mode 100644 code/modules/antagonists/bloodsuckers/powers/targeted/tzimisce.dm create mode 100644 code/modules/events/tzimisce.dm create mode 100644 icons/mob/actions/actions_tzimisce_bloodsucker.dmi diff --git a/code/__DEFINES/bloodsuckers.dm b/code/__DEFINES/bloodsuckers.dm index cd02f2bfffd2..c4b0c967dd46 100644 --- a/code/__DEFINES/bloodsuckers.dm +++ b/code/__DEFINES/bloodsuckers.dm @@ -36,7 +36,12 @@ #define CLAN_TOREADOR "Toreador Clan" #define CLAN_GANGREL "Gangrel Clan" #define CLAN_LASOMBRA "Lasombra Clan" +#define CLAN_TZIMISCE "Tzimisce Clan" +#define TRIPLECHEST_MONSTER "Triple Chest (300 Blood)" +#define ARMMY_MONSTER "Armmy (100 Blood)" +#define CALCIUM_MONSTER "Calcium (150 Blood)" +#define HUSK_MONSTER "Husk" /** * Power defines */ @@ -61,6 +66,8 @@ #define VASSAL_CAN_BUY (1<<3) /// This Power can be purchased by Monster Hunters #define HUNTER_CAN_BUY (1<<4) +/// This Power can be purchased by Tzimisce Bloodsuckers +#define TZIMISCE_CAN_BUY (1<<5) /// This Power is a Toggled Power #define BP_AM_TOGGLE (1<<0) diff --git a/code/game/gamemodes/bloodsuckers/bloodsucker.dm b/code/game/gamemodes/bloodsuckers/bloodsucker.dm index 21fc80ff1af2..28eb343c927b 100644 --- a/code/game/gamemodes/bloodsuckers/bloodsucker.dm +++ b/code/game/gamemodes/bloodsuckers/bloodsucker.dm @@ -38,11 +38,7 @@ for(var/i = 0, i < recommended_enemies, i++) if(!antag_candidates.len) break - var/datum/mind/bloodsucker = pick(antag_candidates) - // Can we even BE a bloodsucker? - if(!bloodsucker.can_make_bloodsucker(bloodsucker)) - antag_candidates -= bloodsucker - continue + var/datum/mind/bloodsucker = antag_pick(antag_candidates) bloodsuckers += bloodsucker bloodsucker.restricted_roles = restricted_jobs log_game("[bloodsucker.key] (ckey) has been selected as a Bloodsucker.") diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_daylight.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_daylight.dm index 0cd72c2a3c6c..359a6e228ebc 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_daylight.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_daylight.dm @@ -93,10 +93,10 @@ if(bloodsuckerdatum.altar_uses > 0) to_chat(bloodsuckerdatum, span_notice("Your Altar uses have been reset!")) bloodsuckerdatum.altar_uses = 0 - warn_daylight(4, 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!"), \ + warn_daylight(4, span_userdanger("Solar flares bombard the station with deadly UV light!
Stay in cover for the next [TIME_BLOODSUCKER_DAY] seconds or risk Final Death!"), \ span_userdanger("Solar flares bombard the station with UV light!"), \ span_userdanger("The sunlight is visible throughout the station, the Bloodsuckers must be asleep by now!")) - message_admins("BLOODSUCKER NOTICE: Daylight Beginning (Lasts for [TIME_BLOODSUCKER_DAY / 60] minutes.)") + message_admins("BLOODSUCKER NOTICE: Daylight Beginning (Lasts for [TIME_BLOODSUCKER_DAY] seconds.)") /obj/effect/sunlight/proc/warn_daylight(danger_level = 0, vampwarn = "", vassalwarn = "", hunteralert = "") for(var/datum/mind/bloodsucker_minds as anything in get_antag_minds(/datum/antagonist/bloodsucker)) diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm index 594c887abf41..7f3358ada584 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm @@ -23,8 +23,8 @@ icon_dead = "wolf_dead" icon_gib = "wolf_dead" speed = -1.5 - maxHealth = 800 - health = 800 + maxHealth = 450 + health = 450 harm_intent_damage = 25 melee_damage_lower = 20 melee_damage_upper = 25 @@ -42,8 +42,8 @@ icon_living = "batform" icon_dead = "bat_dead" icon_gib = "bat_dead" - maxHealth = 500 - health = 500 + maxHealth = 350 + health = 350 attacktext = "bites" butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 3) attack_sound = 'sound/weapons/bite.ogg' @@ -79,6 +79,61 @@ melee_damage_lower = 25 melee_damage_upper = 25 +///////////////////////////////////////////////////// +/// TZIMISCE BLOODSUCKER MOBS /// +///////////////////////////////////////////////////// + +/mob/living/simple_animal/hostile/bloodsucker/tzimisce + +/mob/living/simple_animal/hostile/bloodsucker/tzimisce/triplechest + name = "gigantous monstrosity" + desc = "You wouldn't think a being so messed up like this would be able to even breathe." + icon_state = "triplechest" + icon_living = "triplechest" + icon_dead = "triplechest_dead" + speed = 1 + maxHealth = 175 + health = 175 + environment_smash = ENVIRONMENT_SMASH_WALLS + harm_intent_damage = 25 + melee_damage_lower = 25 + melee_damage_upper = 25 + obj_damage = 50 + +/mob/living/simple_animal/hostile/bloodsucker/tzimisce/calcium + name = "boney monstrosity" + desc = "Heretical being beyond comprehesion, now with bones free of charge!" + icon_state = "calcium" + icon_living = "calcium" + icon_dead = "calcium_dead" + speed = -1 + maxHealth = 110 + health = 110 + mob_size = MOB_SIZE_SMALL + ventcrawler = VENTCRAWLER_ALWAYS + harm_intent_damage = 7 + melee_damage_lower = 7 + melee_damage_upper = 7 + obj_damage = 20 + +/mob/living/simple_animal/hostile/bloodsucker/tzimisce/armmy + name = "tiny monstrosity" + desc = "Is that a head?!" + icon_state = "armmy" + icon_living = "armmy" + icon_dead = "armmy_dead" + speed = -2 + maxHealth = 75 + health = 75 + mob_size = MOB_SIZE_TINY + ventcrawler = VENTCRAWLER_ALWAYS + pass_flags = PASSTABLE + harm_intent_damage = 5 + melee_damage_lower = 5 + melee_damage_upper = 5 + attack_sound = 'sound/weapons/bite.ogg' + obj_damage = 10 + /////////////////////////////// /// Inheritances /// /////////////////////////////// @@ -98,18 +153,41 @@ if(bloodsucker && mind) mind.transfer_to(bloodsucker) bloodsucker.death() - if(src) + if(istype(src, /mob/living/simple_animal/hostile/bloodsucker/tzimisce)) + return ..() + if(istype(src, /mob/living/simple_animal/hostile/bloodsucker/possessedarmor)) + qdel(src) + else addtimer(CALLBACK(src, .proc/gib), 20 SECONDS) ..() /mob/living/simple_animal/hostile/bloodsucker/proc/devour(mob/living/target) - if(istype(src, /mob/living/simple_animal/hostile/bloodsucker/werewolf)) - var/mob/living/simple_animal/hostile/bloodsucker/werewolf/ww = src - ww.satiation++ - src.visible_message(span_danger("[src] devours [target] whole!"), \ - span_userdanger("You devour [target] and feel the beast inside you sedate itself a little, you'll need to feast [3 - ww.satiation] more times to become human again.")) - health += target.maxHealth / 4 - target.gib() + health += target.maxHealth / 2 + var/mob/living/carbon/human/H = target + var/foundorgans = 0 + for(var/obj/item/organ/O in H.internal_organs) + if(O.zone == "chest") + foundorgans++ + qdel(O) + if(foundorgans) + if(istype(src, /mob/living/simple_animal/hostile/bloodsucker/werewolf)) + var/mob/living/simple_animal/hostile/bloodsucker/werewolf/ww = src + ww.satiation++ + src.visible_message(span_danger("[src] devours [target]'s organs!"), \ + span_userdanger("As you devour [target]'s organs you feel as if the beast inside you has calmed itself down, you'll need to feast [3 - ww.satiation] more times to become human again.")) + for(var/obj/item/bodypart/B in H.bodyparts) + if(B.body_zone == "chest") + B.dismember() + else + to_chat(src, span_warning("There are no organs left in this corpse.")) + +/////////////////////////// +/// Tzimisce /// +/////////////////////////// + +/mob/living/simple_animal/hostile/bloodsucker/tzimisce/calcium/Initialize() + . = ..() + new /datum/action/bloodsucker/targeted/bloodbolt.Grant(src) //////////////////////////// /// Werewolf /// @@ -121,7 +199,7 @@ /mob/living/simple_animal/hostile/bloodsucker/werewolf/process() if(bloodsucker) - health -= 0.44444444 //3 minutes to die + health -= 0.25 //3 minutes to die if(satiation == 3) to_chat(src, span_notice("It has been fed. You turn back to normal.")) qdel(src) diff --git a/code/modules/antagonists/bloodsuckers/bloodsuckers.dm b/code/modules/antagonists/bloodsuckers/bloodsuckers.dm index b002ad011e29..f4e9588bf16c 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsuckers.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsuckers.dm @@ -463,7 +463,7 @@ if(spend_rank) bloodsucker_level_unspent-- // Ranked up enough? Let them join a Clan. - if(bloodsucker_level == 3) + if(bloodsucker_level == 3 && my_clan == NONE) //updated for tzimisce AssignClanAndBane() // Ranked up enough to get your true Reputation? diff --git a/code/modules/antagonists/bloodsuckers/bloodsuckers_objects.dm b/code/modules/antagonists/bloodsuckers/bloodsuckers_objects.dm index b2aabbabcacb..53a44d7f0d84 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsuckers_objects.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsuckers_objects.dm @@ -357,5 +357,16 @@ Favorite Vassal: Unknown. \ Strength: Unknown.
\ Weakness: Unknown." + if(clan == CLAN_LASOMBRA) + dat += "This Clan seems to adore living in the Shadows and worshipping it's secrets.
\ + They take their research and vanity seriously, they are always very proud of themselves after even minor achievements.
\ + They appear to be in search of a station with a veil weakness to be able to channel their shadow's abyssal powers.
\ + Their research into this sector has lead them to adopt red eyes as to view better in the shadows, which leads unmasked Lasombras to be easily identifiable.
\ + Homewer they have appeared to have also evolved a hard chintin in their veins, which makes them invulnerable to brute damage.
\ + Favorite Vassal: Their Favorite Vassal appears to have been imbued with abyssal essence and is able to blend in with the shadows. \ + Strength: They are able to slowly advance their abilities.
\ + Weakness: Immensely weak to burn damage." + if(clan == CLAN_TZIMISCE) + dat += "The page is covered in blood. It seems like it will need time to vanish..." reader << browse("Penned by [author].
" + "[dat]", "window=book[window_size != null ? ";size=[window_size]" : ""]") diff --git a/code/modules/antagonists/bloodsuckers/powers/masquerade.dm b/code/modules/antagonists/bloodsuckers/powers/masquerade.dm index b4cc906f5b8e..a564836bdfbd 100644 --- a/code/modules/antagonists/bloodsuckers/powers/masquerade.dm +++ b/code/modules/antagonists/bloodsuckers/powers/masquerade.dm @@ -36,24 +36,27 @@ to_chat(user, span_warning("Your vampiric healing is halted while imitating life.")) // Remove Clan-specific stuff var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) - if(bloodsuckerdatum.my_clan == CLAN_GANGREL) - if(bloodsuckerdatum.clanprogress >= 1) // change this if we get more stuff to include other clans - var/obj/item/clothing/neck/neckdrip = user.get_item_by_slot(SLOT_NECK) - if(istype(neckdrip, /obj/item/clothing/neck/wolfcollar)) - theqdeld += neckdrip - if(bloodsuckerdatum.clanprogress >= 2) - var/obj/item/earsdrip = user.get_item_by_slot(SLOT_EARS) - if(istype(earsdrip, /obj/item/radio/headset/wolfears)) - theqdeld += earsdrip - if(bloodsuckerdatum.clanprogress >= 3) - var/obj/item/clothing/gloves/glovesdrip = user.get_item_by_slot(SLOT_GLOVES) - if(istype(glovesdrip, /obj/item/clothing/gloves/wolfclaws)) - theqdeld += glovesdrip - if(bloodsuckerdatum.clanprogress >= 4) - var/obj/item/clothing/shoes/shoesdrip = user.get_item_by_slot(SLOT_SHOES) - if(istype(shoesdrip , /obj/item/clothing/shoes/wolflegs)) - theqdeld += shoesdrip - QDEL_LIST(theqdeld) + switch(bloodsuckerdatum.my_clan) + if(CLAN_TZIMISCE) + set_antag_hud(user, "bloodsucker") + if(CLAN_GANGREL) + if(bloodsuckerdatum.clanprogress >= 1) // change this if we get more stuff to include other clans + var/obj/item/clothing/neck/neckdrip = user.get_item_by_slot(SLOT_NECK) + if(istype(neckdrip, /obj/item/clothing/neck/wolfcollar)) + theqdeld += neckdrip + if(bloodsuckerdatum.clanprogress >= 2) + var/obj/item/earsdrip = user.get_item_by_slot(SLOT_EARS) + if(istype(earsdrip, /obj/item/radio/headset/wolfears)) + theqdeld += earsdrip + if(bloodsuckerdatum.clanprogress >= 3) + var/obj/item/clothing/gloves/glovesdrip = user.get_item_by_slot(SLOT_GLOVES) + if(istype(glovesdrip, /obj/item/clothing/gloves/wolfclaws)) + theqdeld += glovesdrip + if(bloodsuckerdatum.clanprogress >= 4) + var/obj/item/clothing/shoes/shoesdrip = user.get_item_by_slot(SLOT_SHOES) + if(istype(shoesdrip , /obj/item/clothing/shoes/wolflegs)) + theqdeld += shoesdrip + QDEL_LIST(theqdeld) // Remove Bloodsucker traits REMOVE_TRAIT(user, TRAIT_NOHARDCRIT, BLOODSUCKER_TRAIT) REMOVE_TRAIT(user, TRAIT_NOSOFTCRIT, BLOODSUCKER_TRAIT) @@ -107,23 +110,26 @@ disease.cure() // Adds Clan-specific stuff var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) - if(bloodsuckerdatum.my_clan == CLAN_GANGREL) - if(bloodsuckerdatum.clanprogress >= 1) // change this if we get more stuff to include other clans - var/obj/item/clothing/neck/previousdrip = user.get_item_by_slot(SLOT_NECK) - user.dropItemToGround(previousdrip) - user.equip_to_slot_or_del(new /obj/item/clothing/neck/wolfcollar(user), SLOT_NECK) - if(bloodsuckerdatum.clanprogress >= 2) - var/obj/item/clothing/ears/previousdrip = user.get_item_by_slot(SLOT_EARS) - user.dropItemToGround(previousdrip) - user.equip_to_slot_or_del(new /obj/item/radio/headset/wolfears(user), SLOT_EARS) - if(bloodsuckerdatum.clanprogress >= 3) - var/obj/item/clothing/gloves/previousdrip = user.get_item_by_slot(SLOT_GLOVES) - user.dropItemToGround(previousdrip) - user.equip_to_slot_or_del(new /obj/item/clothing/gloves/wolfclaws(user), SLOT_GLOVES) - if(bloodsuckerdatum.clanprogress >= 4) - var/obj/item/clothing/shoes/previousdrip = user.get_item_by_slot(SLOT_SHOES) - user.dropItemToGround(previousdrip) - user.equip_to_slot_or_del(new /obj/item/clothing/shoes/wolflegs(user), SLOT_SHOES) + switch(bloodsuckerdatum.my_clan) + if(CLAN_TZIMISCE) + set_antag_hud(user, "tzimisce") + if(CLAN_GANGREL) + if(bloodsuckerdatum.clanprogress >= 1) // change this if we get more stuff to include other clans + var/obj/item/clothing/neck/previousdrip = user.get_item_by_slot(SLOT_NECK) + user.dropItemToGround(previousdrip) + user.equip_to_slot_or_del(new /obj/item/clothing/neck/wolfcollar(user), SLOT_NECK) + if(bloodsuckerdatum.clanprogress >= 2) + var/obj/item/clothing/ears/previousdrip = user.get_item_by_slot(SLOT_EARS) + user.dropItemToGround(previousdrip) + user.equip_to_slot_or_del(new /obj/item/radio/headset/wolfears(user), SLOT_EARS) + if(bloodsuckerdatum.clanprogress >= 3) + var/obj/item/clothing/gloves/previousdrip = user.get_item_by_slot(SLOT_GLOVES) + user.dropItemToGround(previousdrip) + user.equip_to_slot_or_del(new /obj/item/clothing/gloves/wolfclaws(user), SLOT_GLOVES) + if(bloodsuckerdatum.clanprogress >= 4) + var/obj/item/clothing/shoes/previousdrip = user.get_item_by_slot(SLOT_SHOES) + user.dropItemToGround(previousdrip) + user.equip_to_slot_or_del(new /obj/item/clothing/shoes/wolflegs(user), SLOT_SHOES) to_chat(user, span_notice("Your heart beats one final time, while your skin dries out and your icy pallor returns.")) /** diff --git a/code/modules/antagonists/bloodsuckers/powers/targeted/tzimisce.dm b/code/modules/antagonists/bloodsuckers/powers/targeted/tzimisce.dm new file mode 100644 index 000000000000..c9c419cb14f6 --- /dev/null +++ b/code/modules/antagonists/bloodsuckers/powers/targeted/tzimisce.dm @@ -0,0 +1,145 @@ +#define SIZE_SMALL 1 +#define SIZE_MEDIUM 2 +#define SIZE_BIG 4 + +/datum/action/bloodsucker/targeted/dice + name = "Dice" + desc = "Slice, cut, sever. The Flesh obeys as my fingers lay touch on it." + button_icon_state = "power_dice" + power_explanation = "Dice:\n\ + Use on a dead corpse to extract muscle from it to be able to feed it to a vassalrack.\n\ + This won't take long and is your primary source of muscle acquiring, necessary for future endeavours.\n\ + You shouldn't use this on your allies.." + power_flags = BP_AM_TOGGLE|BP_AM_STATIC_COOLDOWN + bloodcost = 10 + button_icon = 'icons/mob/actions/actions_tzimisce_bloodsucker.dmi' + icon_icon = 'icons/mob/actions/actions_tzimisce_bloodsucker.dmi' + background_icon_state = "tzimisce_power_off" + background_icon_state_on = "tzimisce_power_on" + background_icon_state_off = "tzimisce_power_off" + purchase_flags = TZIMISCE_CAN_BUY + power_flags = BP_AM_TOGGLE|BP_AM_STATIC_COOLDOWN + check_flags = BP_AM_COSTLESS_UNCONSCIOUS + target_range = 1 + cooldown = 10 SECONDS + +/obj/item/muscle + name = "muscle" + desc = "Weird flex but ok" + icon = 'icons/mob/actions/actions_tzimisce_bloodsucker.dmi' + icon_state = "muscle_all" + var/size + +/obj/item/muscle/small + name = "small muscle piece" + desc = "This one sure wasn't important to it's owner." + icon_state = "muscle_small" + size = SIZE_SMALL + w_class = WEIGHT_CLASS_TINY + +/obj/item/muscle/medium + name = "medium muscle piece" + desc = "This would make for a great meal if it wasn't still twitching." + icon_state = "muscle_medium" + size = SIZE_MEDIUM + w_class = WEIGHT_CLASS_SMALL + +/obj/item/muscle/big + name = "big muscle piece" + desc = "I'm pretty sure it's owner needed this to live." + icon_state = "muscle_big" + size = SIZE_BIG + +/obj/item/muscle/examine(mob/user) + . = ..() + var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) + if(IS_BLOODSUCKER(user) && bloodsuckerdatum.my_clan == CLAN_TZIMISCE) + . += span_cult("By looking at it you comprehend that it would yield [size] points for ritual usage.") + +/obj/item/muscle/attackby(obj/item/I, mob/user, params) // handles muscle crafting + var/newsize = 0 + var/quantity = 1 + var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) + if(!(IS_BLOODSUCKER(user) && bloodsuckerdatum.my_clan == CLAN_TZIMISCE)) + return + if(istype(I, /obj/item/muscle)) + var/obj/item/muscle/muscle2 = I + newsize = size + muscle2.size + if(newsize > SIZE_BIG) //so you only have to change defines if you want to balance muscles + to_chat(user, span_warning("You can't make [src] any bigger!")) + return + to_chat(user, span_notice("You merge [src] and [muscle2] into a bigger piece.")) + qdel(muscle2) + if(I.sharpness == SHARP_EDGED) + newsize = size / 2 + quantity = 2 + if(newsize < SIZE_SMALL) + to_chat(user, span_warning("You can't cut [src] anymore!")) + return + to_chat(user, span_notice("You cut [src] into smaller pieces.")) + switch(newsize) + if(0) + return ..() + if(SIZE_SMALL) + new /obj/item/muscle/small(user.drop_location()) + if(quantity == 2) // don't want to make it stackable + new /obj/item/muscle/small(user.drop_location()) + if(SIZE_SMALL + 0.5) + new /obj/item/muscle/small(user.drop_location()) + new /obj/item/muscle/medium(user.drop_location()) + if(SIZE_MEDIUM) + new /obj/item/muscle/medium(user.drop_location()) + if(quantity == 2) + new /obj/item/muscle/medium(user.drop_location()) + if(SIZE_MEDIUM + 1) + size += 1 + return + if(SIZE_BIG) + new /obj/item/muscle/big(user.drop_location()) + qdel(src) + +/datum/action/bloodsucker/targeted/dice/FireTargetedPower(atom/target_atom) + var/mob/living/target = target_atom + if(target.stat != DEAD) + return + playsound(usr.loc, "sound/weapons/slice.ogg", 50, TRUE) + if(!do_mob(usr, target, 2.5 SECONDS)) + return + if(ishuman(target)) + var/mob/living/carbon/human/H = target + for(var/obj/item/bodypart/bodypart in H.bodyparts) + if(bodypart.body_part != HEAD && bodypart.body_part != CHEST) + if(bodypart.dismemberable) + bodypart.dismember() + qdel(bodypart) + new /obj/item/muscle/medium(H.loc) + return + if(iscarbon(target)) + var/mob/living/carbon/C = target + for(var/obj/item/bodypart/bodypart in C.bodyparts) + if(bodypart.body_part != HEAD && bodypart.body_part != CHEST) + if(bodypart.dismemberable) + bodypart.dismember() + qdel(bodypart) + new /obj/item/muscle/small(C.loc) + return + target.gib() + new /obj/item/muscle/medium(target.loc) + +/datum/action/bloodsucker/targeted/dice/CheckValidTarget(atom/target_atom) + . = ..() + if(!.) + return FALSE + return isliving(target_atom) + +/datum/action/bloodsucker/targeted/dice/CheckCanTarget(atom/target_atom) + . = ..() + if(!.) + return FALSE + if(isliving(target_atom)) + return TRUE + return FALSE + +#undef SIZE_SMALL +#undef SIZE_MEDIUM +#undef SIZE_BIG \ No newline at end of file diff --git a/code/modules/antagonists/bloodsuckers/powers/veil.dm b/code/modules/antagonists/bloodsuckers/powers/veil.dm index 3f079df784d2..09538a1f7a41 100644 --- a/code/modules/antagonists/bloodsuckers/powers/veil.dm +++ b/code/modules/antagonists/bloodsuckers/powers/veil.dm @@ -8,7 +8,7 @@ Clothes, gear, and Security/Medical HUD status is kept the same while this power is active." power_flags = BP_AM_TOGGLE check_flags = BP_CANT_USE_IN_FRENZY - purchase_flags = VASSAL_CAN_BUY + purchase_flags = VASSAL_CAN_BUY|BLOODSUCKER_CAN_BUY bloodcost = 15 constant_bloodcost = 0.1 cooldown = 10 SECONDS diff --git a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_coffin.dm b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_coffin.dm index f89008ee8da3..9aa8d29ed465 100644 --- a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_coffin.dm +++ b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_coffin.dm @@ -13,7 +13,8 @@ owner.teach_crafting_recipe(/datum/crafting_recipe/meatcoffin) owner.teach_crafting_recipe(/datum/crafting_recipe/staketrap) owner.teach_crafting_recipe(/datum/crafting_recipe/woodenducky) - owner.teach_crafting_recipe(/datum/crafting_recipe/bloodaltar) + if(my_clan != CLAN_TZIMISCE) // better things to do + owner.teach_crafting_recipe(/datum/crafting_recipe/bloodaltar) to_chat(owner, span_danger("You learned new recipes - You can view them in the Structure and Weaponry section of the crafting menu!")) // This is my Lair coffin = claimed diff --git a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm index b92eadf86117..6d6ce7b7b374 100644 --- a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm +++ b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm @@ -355,6 +355,13 @@ icon_state = "posarmor" anchored = FALSE density = TRUE + Ghost_desc = "This Knight's armor will come alive once non-bloodsuckers get close to it." + Vamp_desc = "This is a possesed knight's armor, it will come alive once mortals get close to it.\n\ + You don't care about it's attack's since you are brute immune.\n\ + You can reinforce it with 5 silver bars.\n\ + Good for immediate defense of your lair." + Vassal_desc = "This is a possesed knight's armor, it will protect your master if people get too close to it." + Hunter_desc = "This is a suspicious knight's armor. These things shouldn't be here, i shouldn't get too close." var/active = FALSE var/upgraded = FALSE @@ -450,6 +457,13 @@ var/disloyalty_confirm = FALSE /// Prevents popup spam. var/disloyalty_offered = FALSE + /// For Tzimisce bloodsuckers' rituals + var/meat_points = 0 + var/bigmeat = 0 + var/intermeat = 0 + var/mediummeat = 0 + var/smallmeat = 0 + var/meat_amount = 0 /obj/structure/bloodsucker/vassalrack/deconstruct(disassembled = TRUE) . = ..() @@ -457,6 +471,15 @@ new /obj/item/stack/rods(loc, 4) qdel(src) +/obj/structure/bloodsucker/vassalrack/examine(mob/user) + . = ..() + var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) + if(bloodsuckerdatum.my_clan == CLAN_TZIMISCE) + if(meat_amount > 0) + . += span_boldnotice("It currently contains [meat_points] points to use in rituals.") + else + return ..() + /obj/structure/bloodsucker/vassalrack/bolt() . = ..() density = FALSE @@ -558,17 +581,92 @@ /// If I'm not a Bloodsucker, try to unbuckle them. var/datum/antagonist/vassal/vassaldatum = IS_VASSAL(buckled_carbons) // Are they our Vassal, or Dead? - if(istype(vassaldatum) && vassaldatum.master == bloodsuckerdatum || buckled_carbons.stat >= DEAD) + if(buckled_carbons.stat == DEAD) + if(bloodsuckerdatum.my_clan != CLAN_TZIMISCE) + to_chat(user, span_warning("[buckled_carbons] is dead!")) + return + do_ritual(user, buckled_carbons) + return + if(istype(vassaldatum) && vassaldatum.master == bloodsuckerdatum) // Can we assign a Favorite Vassal? if(istype(vassaldatum) && !bloodsuckerdatum.has_favorite_vassal) - if(buckled_carbons.mind.can_make_bloodsucker(buckled_carbons.mind)) - offer_favorite_vassal(user, buckled_carbons) + offer_favorite_vassal(user, buckled_carbons) use_lock = FALSE return // Not our Vassal, but Alive & We're a Bloodsucker, good to torture! torture_victim(user, buckled_carbons) +#define MEATLIMIT 3 +/obj/structure/bloodsucker/vassalrack/attackby(obj/item/I, mob/user, params) //Tzimisce stuff + var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) + if(bloodsuckerdatum.my_clan != CLAN_TZIMISCE) + return ..() // only gamers + if(istype(I, /obj/item/muscle)) + if(meat_amount >= MEATLIMIT) + to_chat(user, span_warning("You can't fit more meat into [src]")) + return + var/obj/item/muscle/M = I + meat_points += M.size + switch(M.size) + if(4) + bigmeat++ + if(3) + intermeat++ + if(2) + mediummeat++ + if(1) + smallmeat++ + meat_amount = bigmeat + intermeat + mediummeat + smallmeat + qdel(I) + update_icon() +#undef MEATLIMIT + +/obj/structure/bloodsucker/vassalrack/update_icon() + cut_overlays() + if(bigmeat > 0) + add_overlay("bigmeat_[bigmeat]") + if(intermeat > 0) + add_overlay("mediummeat_[intermeat]") + add_overlay("smallmeat_[intermeat]") + if(mediummeat > 0) + add_overlay("mediummeat_[mediummeat]") + if(smallmeat > 0) + add_overlay("smallmeat_[smallmeat]") + +/obj/structure/bloodsucker/vassalrack/CtrlClick(mob/user) + if(!anchored) + return ..() + var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) + if(bloodsuckerdatum.my_clan != CLAN_TZIMISCE) + return ..() + if(meat_amount > 0) + if(smallmeat > 0) + new /obj/item/muscle/small(user.drop_location()) + smallmeat-- + meat_points -= 1 + return + if(mediummeat > 0) + new /obj/item/muscle/medium(user.drop_location()) + mediummeat-- + meat_points -= 2 + return + if(intermeat > 0) + new /obj/item/muscle/medium(user.drop_location()) + new /obj/item/muscle/small(user.drop_location()) + intermeat-- + meat_points -= 3 + return + if(bigmeat > 0) + new /obj/item/muscle/big(user.drop_location()) + bigmeat-- + meat_points -= 4 + return + else + to_chat(user, span_warning("There's no meat to retrieve in [src]")) + meat_amount = bigmeat + intermeat + mediummeat + smallmeat + update_icon() + /** * Step One: Tick Down Conversion from 3 to 0 * Step Two: Break mindshielding/antag (on approve) @@ -745,6 +843,136 @@ to_chat(user, span_danger("You decide not to turn [target] into your Favorite Vassal.")) use_lock = FALSE +/obj/structure/bloodsucker/vassalrack/proc/do_ritual(mob/living/user, mob/living/target) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) + if(!target.mind) + to_chat(user, span_warning("[target] is braindead!")) + var/datum/antagonist/vassal/vassaldatum = target.mind.has_antag_datum(/datum/antagonist/vassal) + /// To deal with Blood + var/mob/living/carbon/human/B = user + var/mob/living/carbon/human/H = target + + /// Due to the checks leding up to this, if they fail this, they're dead & Not our vassal. + if(!vassaldatum) + to_chat(user, span_notice("Do you wish to rebuild this body? This will remove any restraints they might have, and will cost 150 Blood!")) + var/revive_response = alert(usr, "Would you like to revive [target]?", "Ghetto Medbay", "Yes", "No") + switch(revive_response) + if("Yes") + if(prob(15) && bloodsuckerdatum.bloodsucker_level <= 2) + to_chat(user, span_danger("Something has gone terribly wrong! You have accidentally turned [target] into a High-Functioning Zombie!")) + to_chat(target, span_announce("As Blood drips over your body, your heart fails to beat... But you still wake up.")) + H.set_species(/datum/species/zombie) + else + to_chat(user, span_danger("You have brought [target] back from the Dead!")) + to_chat(target, span_announce("As Blood drips over your body, your heart begins to beat... You live again!")) + B.blood_volume -= 150 + target.revive(full_heal = TRUE, admin_revive = TRUE) + return + to_chat(user, span_danger("You decide not to revive [target].")) + // Unbuckle them now. + unbuckle_mob(B) + use_lock = FALSE + return + var/list/races = list(HUSK_MONSTER) + switch(bloodsuckerdatum.bloodsucker_level) + if(1 to 3) + races += ARMMY_MONSTER + if(3 to 5) + races += ARMMY_MONSTER + races += CALCIUM_MONSTER + if(5 to INFINITY) + races += ARMMY_MONSTER + races += CALCIUM_MONSTER + races += TRIPLECHEST_MONSTER + var/list/options = list() + options = races + var/answer = input(user, "We have the chance to mutate our Vassal, how should we mutilate their corpse? This will cost us blood.", "What do we do with our Vassal?") in options + var/blood_gained + if(!answer) + to_chat(user, span_notice("You decide to leave your Vassal just the way they are.")) + return + to_chat(user, span_warning("You start mutating your Vassal into a [answer]...")) + if(!do_mob(user, src, 5 SECONDS)) + to_chat(user, span_danger("The ritual has been interrupted!")) + return + switch(answer) + if(HUSK_MONSTER) + if(HAS_TRAIT(target, TRAIT_HUSK)) + to_chat(user, span_warning("[target] is already a Husk!")) + return + if(!do_mob(user, target, 1 SECONDS)) + return + playsound(target.loc, 'sound/weapons/slash.ogg', 50, TRUE, -1) + if(!do_mob(user, target, 1 SECONDS)) + return + to_chat(user, span_notice("You suck all the blood out of [target], turning them into a Living Husk!")) + to_chat(target, span_notice("Your master has mutated you into a Living Husk!")) + playsound(target.loc, 'sound/magic/mutate.ogg', 50, TRUE, -1) + /// Just take it all + blood_gained = 250 + target.remove_all_languages() + target.grant_language(/datum/language/vampiric) + H.become_husk() + bloodsuckerdatum.bloodsucker_level_unspent++ + if(ARMMY_MONSTER) + var/mob/living/simple_animal/hostile/bloodsucker/tzimisce/armmy/A + if(!(HAS_TRAIT(target, TRAIT_HUSK))) + to_chat(user, span_warning("You need to mutilate [target] into a husk first before doing this.")) + return + if(meat_points < 4) + to_chat(user, span_warning("You need atleast [4 - meat_points] more meat points to do this.")) + return + if(!do_mob(user, target, 1 SECONDS)) + return + playsound(target.loc, 'sound/weapons/slash.ogg', 50, TRUE, -1) + to_chat(user, span_notice("You transfer your blood and toy with [target]'s flesh, leaving their body as a head and arm almalgam.")) + to_chat(target, span_notice("Your master has mutated you into a tiny arm monster!")) + B.blood_volume -= 100 + A = new /mob/living/simple_animal/hostile/bloodsucker/tzimisce/armmy(target.loc) + target.forceMove(A) + target.mind.transfer_to(A) + A.bloodsucker = target + /// Chance to give Bat form, or turn them into a bat. + if(CALCIUM_MONSTER) + var/mob/living/simple_animal/hostile/bloodsucker/tzimisce/calcium/C + if(!(HAS_TRAIT(target, TRAIT_HUSK))) + to_chat(user, span_warning("You need to mutilate [target] into a husk first before doing this.")) + return + if(meat_points < 8) + to_chat(user, span_warning("You need atleast [8 - meat_points] more meat points to do this.")) + return + if(!do_mob(user, target, 1 SECONDS)) + return + playsound(target.loc, 'sound/weapons/slash.ogg', 50, TRUE, -1) + to_chat(user, span_notice("You transfer your blood and toy with [target]'s flesh and bones, leaving their body as a boney and flesh amalgam.")) + to_chat(target, span_notice("Your master has mutated you into a fractured monster!")) + B.blood_volume -= 150 + C = new /mob/living/simple_animal/hostile/bloodsucker/tzimisce/calcium(target.loc) + target.forceMove(C) + target.mind.transfer_to(C) + C.bloodsucker = target + if(TRIPLECHEST_MONSTER) + var/mob/living/simple_animal/hostile/bloodsucker/tzimisce/triplechest/T + if(!(HAS_TRAIT(target, TRAIT_HUSK))) + to_chat(user, span_warning("You need to mutilate [target] into a husk first before doing this.")) + return + if(meat_points < 12) + to_chat(user, span_warning("You need atleast [12 - meat_points] more meat points to do this.")) + return + if(!do_mob(user, target, 1 SECONDS)) + return + playsound(target.loc, 'sound/weapons/slash.ogg', 50, TRUE, -1) + if(!do_mob(user, target, 1 SECONDS)) + return + to_chat(user, span_notice("You transfer your blood and toy with [target]'s flesh and bones, leaving their body as a huge pile of flesh and organs.")) + to_chat(target, span_notice("Your master has mutated you into a gigartuan monster!")) + B.blood_volume -= 300 + T = new /mob/living/simple_animal/hostile/bloodsucker/tzimisce/triplechest(target.loc) + target.forceMove(T) + target.mind.transfer_to(T) + T.bloodsucker = target + if(blood_gained) + user.blood_volume += blood_gained //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -767,6 +995,12 @@ Hunter_desc = "This is a blue Candelabrum, which causes insanity to those near it while active." var/lit = FALSE +/obj/structure/bloodsucker/candelabrum/deconstruct(disassembled = TRUE) + . = ..() + new /obj/item/candle(loc, 1) + new /obj/item/stack/rods(loc, 4) + qdel(src) + /obj/structure/bloodsucker/candelabrum/Destroy() STOP_PROCESSING(SSobj, src) return ..() diff --git a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_life.dm b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_life.dm index 8875736f10be..7ae3d85770ae 100644 --- a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_life.dm +++ b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_life.dm @@ -56,7 +56,7 @@ blood_taken /= 4 if(!ishuman(target)) // Penalty for Non-Human Blood blood_taken /= 3 - if(!target.mind) + if(!target.mind && !target.client) blood_taken /= 5 // Penalty for Catatonics / Braindead //if (!iscarbon(target)) // Penalty for Animals (they're junk food) // Apply to Volume diff --git a/code/modules/events/monsterhunter.dm b/code/modules/events/monsterhunter.dm index 94584c3a7f9c..5089974fb140 100644 --- a/code/modules/events/monsterhunter.dm +++ b/code/modules/events/monsterhunter.dm @@ -17,7 +17,6 @@ weight = 2000 min_players = 10 earliest_start = 35 MINUTES - alert_observers = FALSE gamemode_whitelist = list("bloodsucker","traitorsucker","dynamic") /datum/round_event/bloodsucker_hunters @@ -63,7 +62,6 @@ weight = 7 min_players = 10 earliest_start = 25 MINUTES - alert_observers = TRUE gamemode_whitelist = list("traitorchan","changeling","heresy","cult","clockwork_cult","dynamic") /datum/round_event/monster_hunters diff --git a/code/modules/events/tzimisce.dm b/code/modules/events/tzimisce.dm new file mode 100644 index 000000000000..204df6009c3c --- /dev/null +++ b/code/modules/events/tzimisce.dm @@ -0,0 +1,81 @@ +/datum/round_event_control/tzimisce/tzimiscebloodsucker + name = "Spawn Tzimisce - Bloodsucker" + max_occurrences = 1 + weight = 2000 + min_players = 10 + earliest_start = 30 MINUTES + gamemode_whitelist = list("bloodsucker","traitorsucker","dynamic") + + +/datum/round_event_control/tzimisce + name = "Spawn Tzimisce" + typepath = /datum/round_event/ghost_role/tzimisce + max_occurrences = 1 + min_players = 15 + earliest_start = 45 MINUTES + +/datum/round_event/ghost_role/tzimisce + var/success_spawn = 0 + minimum_required = 1 + role_name = "Tzimisce" + fakeable = FALSE + +/datum/round_event/ghost_role/tzimisce/kill() + if(!success_spawn && control) + control.occurrences-- + return ..() + +/datum/round_event/ghost_role/tzimisce/spawn_role() + //selecting a spawn_loc + if(!SSjob.latejoin_trackers.len) + return MAP_ERROR + + //selecting a candidate player + var/list/candidates = get_candidates(ROLE_BLOODSUCKER, null, ROLE_BLOODSUCKER) + if(!candidates.len) + return NOT_ENOUGH_PLAYERS + + var/mob/dead/selected_candidate = pick_n_take(candidates) + var/key = selected_candidate.key + + var/datum/mind/Mind = create_tzimisce_mind(key) + Mind.active = TRUE + + var/mob/living/carbon/human/tzimisce = spawn_event_tzimisce() + Mind.transfer_to(tzimisce) + Mind.add_antag_datum(/datum/antagonist/bloodsucker) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = tzimisce.mind.has_antag_datum(/datum/antagonist/bloodsucker) + bloodsuckerdatum.bloodsucker_level_unspent += round(world.time / (15 MINUTES), 1) + bloodsuckerdatum.my_clan = CLAN_TZIMISCE + var/list/powerstoremove = list(/datum/action/bloodsucker/veil, /datum/action/bloodsucker/masquerade) + for(var/datum/action/bloodsucker/Forbidden in bloodsuckerdatum.powers) + if(is_type_in_list(Forbidden, powerstoremove)) + bloodsuckerdatum.RemovePower(Forbidden) + bloodsuckerdatum.BuyPower(new /datum/action/bloodsucker/targeted/dice) + + spawned_mobs += tzimisce + message_admins("[ADMIN_LOOKUPFLW(tzimisce)] has been made into a tzimisce bloodsucker an event.") + log_game("[key_name(tzimisce)] was spawned as a tzimisce bloodsucker by an event.") + var/datum/job/jobdatum = SSjob.GetJob(pick("Assistant", "Botanist", "Station Engineer", "Medical Doctor", "Scientist", "Cargo Technician", "Cook")) + set_antag_hud(tzimisce, "tzimisce") + tzimisce.job = jobdatum + tzimisce.update_internals_hud_icon(TRUE) + jobdatum.equip(tzimisce) + tzimisce.update_move_intent_slowdown() //prevents you from going super duper fast + return SUCCESSFUL_SPAWN + + +/proc/spawn_event_tzimisce(spawn_loc) + var/mob/living/carbon/human/new_tzimisce = new(spawn_loc) + if(!spawn_loc) + SSjob.SendToLateJoin(new_tzimisce) + var/datum/preferences/A = new() //Randomize appearance for the demon. + A.copy_to(new_tzimisce) + new_tzimisce.dna.update_dna_identity() + return new_tzimisce + +/proc/create_tzimisce_mind(key) + var/datum/mind/Mind = new /datum/mind(key) + Mind.assigned_role = ROLE_BLOODSUCKER + Mind.special_role = ROLE_BLOODSUCKER + return Mind diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index d50d0b015d39..324beccad878 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -90,7 +90,7 @@ if(!(SLOT_GLASSES in obscured)) if(glasses) . += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes." - else if(eye_color == BLOODCULT_EYE && iscultist(src) && HAS_TRAIT(src, CULT_EYES)) + else if(eye_color == BLOODCULT_EYE && HAS_TRAIT(src, CULT_EYES)) . += span_warning("[t_His] eyes are glowing an unnatural red!") //ears @@ -512,7 +512,7 @@ if(!(SLOT_GLASSES in obscured)) if(glasses) . += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes." - else if(eye_color == BLOODCULT_EYE && iscultist(src) && HAS_TRAIT(src, CULT_EYES)) + else if(eye_color == BLOODCULT_EYE && HAS_TRAIT(src, CULT_EYES)) . += span_warning("[t_His] eyes are glowing an unnatural red!") //ears diff --git a/icons/mob/actions/actions_gangrel_bloodsucker.dmi b/icons/mob/actions/actions_gangrel_bloodsucker.dmi index bcd1ca942ba0f139c5c3fd6d1e94f0051793c345..30b9532502d87966466b05d281fcc309a689d76c 100644 GIT binary patch literal 12771 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 literal 12784 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 diff --git a/icons/mob/actions/actions_lasombra_bloodsucker.dmi b/icons/mob/actions/actions_lasombra_bloodsucker.dmi index 103c35bdd6b2a6c56cff2ddcff90a30ab57ec82d..bc6c89bb0dfe6b61b09deb3a0aaeeb89c6c42deb 100644 GIT binary patch delta 3642 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 M07*qoM6N<$f_uN)4*&oF delta 3634 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

    ~!-ji@qLX@u#q(b4aP+GDQ=TS`IDVzbgm%Hf&l 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 P00000NkvXXu0mjf#UZts diff --git a/yogstation.dme b/yogstation.dme index af3c7d9e9d03..4d883d56db69 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -1421,6 +1421,7 @@ #include "code\modules\antagonists\bloodsuckers\powers\targeted\lunge.dm" #include "code\modules\antagonists\bloodsuckers\powers\targeted\mesmerize.dm" #include "code\modules\antagonists\bloodsuckers\powers\targeted\trespass.dm" +#include "code\modules\antagonists\bloodsuckers\powers\targeted\tzimisce.dm" #include "code\modules\antagonists\bloodsuckers\structures\bloodsucker_coffin.dm" #include "code\modules\antagonists\bloodsuckers\structures\bloodsucker_crypt.dm" #include "code\modules\antagonists\bloodsuckers\structures\bloodsucker_life.dm" @@ -1931,6 +1932,7 @@ #include "code\modules\events\stray_cargo.dm" #include "code\modules\events\supermatter_surge.dm" #include "code\modules\events\swarmer.dm" +#include "code\modules\events\tzimisce.dm" #include "code\modules\events\vent_clog.dm" #include "code\modules\events\wormholes.dm" #include "code\modules\events\zombie_infection.dm" diff --git a/yogstation/icons/mob/hud.dmi b/yogstation/icons/mob/hud.dmi index 3ff39cf9fdb4b46383e417c2dc259329cbfd5cb9..a800423a878b4a2bd4f926740beb8b8ef356dbe9 100644 GIT binary patch delta 17927 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 delta 17757 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 Date: Mon, 2 May 2022 02:34:36 -0300 Subject: [PATCH 08/20] l --- code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm index 7f3358ada584..6536c42bff89 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm @@ -185,10 +185,6 @@ /// Tzimisce /// /////////////////////////// -/mob/living/simple_animal/hostile/bloodsucker/tzimisce/calcium/Initialize() - . = ..() - new /datum/action/bloodsucker/targeted/bloodbolt.Grant(src) - //////////////////////////// /// Werewolf /// /////////////////////////// From efaa75051f76001b992bfd753560cae793d94889 Mon Sep 17 00:00:00 2001 From: tattax <71668564+tattax@users.noreply.github.com> Date: Mon, 2 May 2022 11:17:50 -0300 Subject: [PATCH 09/20] adds bs into rotation --- config/game_options.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config/game_options.txt b/config/game_options.txt index 3d1817a2ef79..bd125971d09a 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -107,11 +107,13 @@ ALERT_DELTA Destruction of the station is imminent. All crew are instructed to o PROBABILITY DARKSPAWN 6 PROBABILITY HERESY 4 PROBABILITY INFILTRATION 4 +PROBABILITY BLOODSUCKER 5 # Lowpop PROBABILITY TRAITOR 5 PROBABILITY TRAITORBRO 5 PROBABILITY TRAITORCHAN 6 +PROBABILITY TRAITORSUCKER 4 PROBABILITY TRAITORVAMP 4 PROBABILITY INTERNAL_AFFAIRS 3 PROBABILITY CHANGELING 4 From 444e6fc64e11a18f2ad0ac9d4441bc7e842739a9 Mon Sep 17 00:00:00 2001 From: tattax <71668564+tattax@users.noreply.github.com> Date: Mon, 2 May 2022 21:08:53 -0300 Subject: [PATCH 10/20] . Co-authored-by: Theos --- .../bloodsuckers/bloodsucker_mobs.dm | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm index 6536c42bff89..2b64bb2bd428 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm @@ -169,15 +169,15 @@ if(O.zone == "chest") foundorgans++ qdel(O) - if(foundorgans) - if(istype(src, /mob/living/simple_animal/hostile/bloodsucker/werewolf)) - var/mob/living/simple_animal/hostile/bloodsucker/werewolf/ww = src - ww.satiation++ - src.visible_message(span_danger("[src] devours [target]'s organs!"), \ - span_userdanger("As you devour [target]'s organs you feel as if the beast inside you has calmed itself down, you'll need to feast [3 - ww.satiation] more times to become human again.")) - for(var/obj/item/bodypart/B in H.bodyparts) - if(B.body_zone == "chest") - B.dismember() + if(foundorgans) + if(istype(src, /mob/living/simple_animal/hostile/bloodsucker/werewolf)) + var/mob/living/simple_animal/hostile/bloodsucker/werewolf/ww = src + ww.satiation++ + src.visible_message(span_danger("[src] devours [target]'s organs!"), \ + span_userdanger("As you devour [target]'s organs you feel as if the beast inside you has calmed itself down, you'll need to feast [3 - ww.satiation] more times to become human again.")) + for(var/obj/item/bodypart/B in H.bodyparts) + if(B.body_zone == "chest") + B.dismember() else to_chat(src, span_warning("There are no organs left in this corpse.")) From 5668b3709247f80e08108391a121248ac7f5811a Mon Sep 17 00:00:00 2001 From: tattax <71668564+tattax@users.noreply.github.com> Date: Mon, 2 May 2022 22:50:26 -0300 Subject: [PATCH 11/20] try --- .../bloodsuckers/bloodsucker_daylight.dm | 4 +++- .../antagonists/bloodsuckers/bloodsucker_mobs.dm | 9 +++++++-- .../antagonists/bloodsuckers/powers/_powers.dm | 8 ++++---- .../antagonists/bloodsuckers/powers/gangrel.dm | 11 ----------- .../bloodsuckers/powers/targeted/lunge.dm | 6 ++++++ .../bloodsuckers/structures/bloodsucker_crypt.dm | 9 ++++++--- code/modules/events/tzimisce.dm | 16 +++++++++++++++- 7 files changed, 41 insertions(+), 22 deletions(-) diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_daylight.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_daylight.dm index 359a6e228ebc..5960ff7569ba 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_daylight.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_daylight.dm @@ -88,7 +88,7 @@ var/datum/antagonist/bloodsucker/bloodsuckerdatum = bloodsucker_minds.has_antag_datum(/datum/antagonist/bloodsucker) if(!istype(bloodsuckerdatum)) continue - if(bloodsuckerdatum.my_clan == CLAN_GANGREL) + if(bloodsuckerdatum.my_clan == CLAN_GANGREL) give_transform_power() if(bloodsuckerdatum.altar_uses > 0) to_chat(bloodsuckerdatum, span_notice("Your Altar uses have been reset!")) @@ -186,5 +186,7 @@ if(!istype(bloodsucker_minds) || !istype(bloodsucker_minds.current)) continue var/datum/antagonist/bloodsucker/bloodsuckerdatum = bloodsucker_minds.has_antag_datum(/datum/antagonist/bloodsucker) + if(bloodsuckerdatum.my_clan != CLAN_GANGREL) + continue if(!(locate(/datum/action/bloodsucker/gangrel/transform) in bloodsuckerdatum.powers)) bloodsuckerdatum.BuyPower(new /datum/action/bloodsucker/gangrel/transform) diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm index 2b64bb2bd428..20ceb60b087d 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm @@ -162,7 +162,7 @@ ..() /mob/living/simple_animal/hostile/bloodsucker/proc/devour(mob/living/target) - health += target.maxHealth / 2 + health += target.maxHealth / 4 var/mob/living/carbon/human/H = target var/foundorgans = 0 for(var/obj/item/organ/O in H.internal_organs) @@ -195,8 +195,13 @@ /mob/living/simple_animal/hostile/bloodsucker/werewolf/process() if(bloodsucker) + if(ishuman(bloodsucker)) + var/mob/living/carbon/human/user = bloodsucker + var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) + if(user.blood_volume < 560) + bloodsuckerdatum.AddBloodVolume(10) health -= 0.25 //3 minutes to die - if(satiation == 3) + if(satiation >= 3) to_chat(src, span_notice("It has been fed. You turn back to normal.")) qdel(src) return diff --git a/code/modules/antagonists/bloodsuckers/powers/_powers.dm b/code/modules/antagonists/bloodsuckers/powers/_powers.dm index b4b92e894001..4dcfd47c6512 100644 --- a/code/modules/antagonists/bloodsuckers/powers/_powers.dm +++ b/code/modules/antagonists/bloodsuckers/powers/_powers.dm @@ -181,15 +181,15 @@ user.blood_volume -= bloodcost bloodsuckerdatum_power?.update_hud() -/datum/action/bloodsucker/proc/ActivatePower() +/datum/action/bloodsucker/proc/ActivatePower(process = TRUE) active = TRUE - if(power_flags & BP_AM_TOGGLE) + if(power_flags & BP_AM_TOGGLE && process == TRUE) START_PROCESSING(SSprocessing, src) owner.log_message("used [src][bloodcost != 0 ? " at the cost of [bloodcost]" : ""].", LOG_ATTACK, color="red") UpdateButtonIcon() -/datum/action/bloodsucker/proc/DeactivatePower() - if(power_flags & BP_AM_TOGGLE) +/datum/action/bloodsucker/proc/DeactivatePower(process = TRUE) + if(power_flags & BP_AM_TOGGLE && process == TRUE) STOP_PROCESSING(SSprocessing, src) if(power_flags & BP_AM_SINGLEUSE) RemoveAfterUse() diff --git a/code/modules/antagonists/bloodsuckers/powers/gangrel.dm b/code/modules/antagonists/bloodsuckers/powers/gangrel.dm index 3eca3f58f178..8009a091cf36 100644 --- a/code/modules/antagonists/bloodsuckers/powers/gangrel.dm +++ b/code/modules/antagonists/bloodsuckers/powers/gangrel.dm @@ -91,17 +91,6 @@ QDEL_IN(gb, 2 MINUTES) playsound(gb.loc, 'sound/items/toysqueak1.ogg', 50, 1) to_chat(owner, span_notice("You transform into a fatty beast!")) - /*if(2000 to INFINITY) - var/mob/living/simple_animal/hostile/bloodsucker/werewolf/ww - if(!ww || ww.stat == DEAD) - ww = new /mob/living/simple_animal/hostile/bloodsucker/werewolf(user.loc) - user.forceMove(ww) - ww.bloodsucker = user - user.mind.transfer_to(ww) - var/datum/action/bloodsucker/gangrel/transform_back/E = new - E.Grant(ww) - playsound(ww.loc, 'sound/weapons/slash.ogg', 50, 1) - to_chat(owner, span_notice("You transform into a feral beast!"))*/ . = ..() /datum/action/bloodsucker/gangrel/transform_back diff --git a/code/modules/antagonists/bloodsuckers/powers/targeted/lunge.dm b/code/modules/antagonists/bloodsuckers/powers/targeted/lunge.dm index 7bcefaf6a50a..2ca8ec15649b 100644 --- a/code/modules/antagonists/bloodsuckers/powers/targeted/lunge.dm +++ b/code/modules/antagonists/bloodsuckers/powers/targeted/lunge.dm @@ -23,6 +23,12 @@ * Level 3: Grapple 3 from Shadows */ +/datum/action/bloodsucker/targeted/lunge/ActivatePower(process = FALSE) + . = ..() + +/datum/action/bloodsucker/targeted/lunge/DeactivatePower(process = FALSE) + . = ..() + /datum/action/bloodsucker/targeted/lunge/CheckCanUse(mob/living/carbon/user) . = ..() if(!.) diff --git a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm index 6d6ce7b7b374..beeb6fe00159 100644 --- a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm +++ b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm @@ -846,18 +846,20 @@ /obj/structure/bloodsucker/vassalrack/proc/do_ritual(mob/living/user, mob/living/target) var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) if(!target.mind) - to_chat(user, span_warning("[target] is braindead!")) - var/datum/antagonist/vassal/vassaldatum = target.mind.has_antag_datum(/datum/antagonist/vassal) + to_chat(user, span_warning("[target] is catatonic!")) /// To deal with Blood var/mob/living/carbon/human/B = user var/mob/living/carbon/human/H = target /// Due to the checks leding up to this, if they fail this, they're dead & Not our vassal. - if(!vassaldatum) + if(!IS_VASSAL(target)) to_chat(user, span_notice("Do you wish to rebuild this body? This will remove any restraints they might have, and will cost 150 Blood!")) var/revive_response = alert(usr, "Would you like to revive [target]?", "Ghetto Medbay", "Yes", "No") switch(revive_response) if("Yes") + if(!do_mob(user, src, 7 SECONDS)) + to_chat(user, span_danger("The ritual has been interrupted!")) + return if(prob(15) && bloodsuckerdatum.bloodsucker_level <= 2) to_chat(user, span_danger("Something has gone terribly wrong! You have accidentally turned [target] into a High-Functioning Zombie!")) to_chat(target, span_announce("As Blood drips over your body, your heart fails to beat... But you still wake up.")) @@ -895,6 +897,7 @@ if(!do_mob(user, src, 5 SECONDS)) to_chat(user, span_danger("The ritual has been interrupted!")) return + playsound(target.loc, 'sound/weapons/slash.ogg', 50, TRUE, -1) switch(answer) if(HUSK_MONSTER) if(HAS_TRAIT(target, TRAIT_HUSK)) diff --git a/code/modules/events/tzimisce.dm b/code/modules/events/tzimisce.dm index 204df6009c3c..51789eb11af9 100644 --- a/code/modules/events/tzimisce.dm +++ b/code/modules/events/tzimisce.dm @@ -1,11 +1,25 @@ /datum/round_event_control/tzimisce/tzimiscebloodsucker name = "Spawn Tzimisce - Bloodsucker" max_occurrences = 1 + typepath = /datum/round_event/ghost_role/tzimisce/bloodsucker weight = 2000 - min_players = 10 + min_players = 25 earliest_start = 30 MINUTES gamemode_whitelist = list("bloodsucker","traitorsucker","dynamic") +/datum/round_event/ghost_role/tzimisce/bloodsucker + fakeable = FALSE + var/cancel_me = TRUE + +/datum/round_event/ghost_role/tzimisce/bloodsucker/start() + for(var/mob/living/carbon/human/all_players in GLOB.player_list) + if(IS_BLOODSUCKER(all_players) || IS_MONSTERHUNTER(all_players)) + message_admins("BLOODSUCKER NOTICE: Tzimisces have found a valid Target.") + cancel_me = FALSE + break + if(cancel_me) + kill() + return /datum/round_event_control/tzimisce name = "Spawn Tzimisce" From 8ff0c1569b3750c3ea0a1d2ffb7086666e1ae6d2 Mon Sep 17 00:00:00 2001 From: Byemoh Date: Tue, 3 May 2022 01:22:23 -0500 Subject: [PATCH 12/20] Update code/modules/events/tzimisce.dm --- code/modules/events/tzimisce.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/events/tzimisce.dm b/code/modules/events/tzimisce.dm index 51789eb11af9..b0c4c063d6b3 100644 --- a/code/modules/events/tzimisce.dm +++ b/code/modules/events/tzimisce.dm @@ -2,7 +2,7 @@ name = "Spawn Tzimisce - Bloodsucker" max_occurrences = 1 typepath = /datum/round_event/ghost_role/tzimisce/bloodsucker - weight = 2000 + weight = 5 min_players = 25 earliest_start = 30 MINUTES gamemode_whitelist = list("bloodsucker","traitorsucker","dynamic") From aa2cea3e9561f1f5de714381709fc5acb6afc393 Mon Sep 17 00:00:00 2001 From: tattax <71668564+tattax@users.noreply.github.com> Date: Tue, 3 May 2022 11:40:18 -0300 Subject: [PATCH 13/20] adds a new message for info clears up https://github.com/yogstation13/Yogstation/issues/13987 --- .../antagonists/bloodsuckers/structures/bloodsucker_life.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_life.dm b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_life.dm index 7ae3d85770ae..e686ccbb3977 100644 --- a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_life.dm +++ b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_life.dm @@ -71,6 +71,8 @@ if(current_task) if(target.mind) task_blood_drank += blood_taken + else + to_chat(owner, span_warning("[target] is catatonic and won't yield any usable blood for tasks!")) return blood_taken ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// From 977145547c6f21f6f587e1d78df5be7a881525cd Mon Sep 17 00:00:00 2001 From: tattax <71668564+tattax@users.noreply.github.com> Date: Fri, 6 May 2022 01:33:01 -0300 Subject: [PATCH 14/20] does the thing uh huh fixes the issue of the heartbeat @Sniblet --- code/__DEFINES/is_helpers.dm | 1 + .../bloodsuckers/bloodsucker_flaws.dm | 20 ++++- .../bloodsuckers/bloodsucker_integration.dm | 7 +- .../bloodsuckers/bloodsucker_mobs.dm | 10 +-- .../bloodsuckers/powers/gangrel.dm | 20 ++--- .../bloodsuckers/powers/targeted/tzimisce.dm | 37 ++++++++ .../structures/bloodsucker_crypt.dm | 46 +++++++--- .../structures/bloodsucker_life.dm | 80 ++++++++++-------- .../antagonists/bloodsuckers/vassal.dm | 18 +++- code/modules/clothing/neck/_neck.dm | 4 +- code/modules/events/tzimisce.dm | 13 +-- code/modules/surgery/bodyparts/_bodyparts.dm | 4 + icons/mob/bloodsucker_mobs.dmi | Bin 7535 -> 7441 bytes icons/obj/vamp_obj.dmi | Bin 22088 -> 22729 bytes .../carbon/human/species_types/szlachta.dm | 26 ++++++ yogstation/icons/mob/human_parts.dmi | Bin 82521 -> 84643 bytes 16 files changed, 198 insertions(+), 88 deletions(-) create mode 100644 yogstation/code/modules/mob/living/carbon/human/species_types/szlachta.dm diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index ad37bb80e11d..7759f4403d79 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -79,6 +79,7 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( #define isethereal(A) (is_species(A, /datum/species/ethereal)) #define isvampire(A) (is_species(A,/datum/species/vampire)) #define ispreternis(A) (is_species(A,/datum/species/preternis)) +#define isszlachta(A) (is_species(A, /datum/species/szlachta)) //more carbon mobs #define ismonkey(A) (istype(A, /mob/living/carbon/monkey)) diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_flaws.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_flaws.dm index 1438e8c0ea03..21dfc2d05144 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_flaws.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_flaws.dm @@ -1,7 +1,24 @@ ///////////////////////////////////////////////////////////////////////////////////////// // Any changes to clans have to be reflected in '/obj/item/book/kindred' /search proc. // ///////////////////////////////////////////////////////////////////////////////////////// -/datum/antagonist/bloodsucker/proc/AssignClanAndBane() +/datum/antagonist/bloodsucker/proc/AssignClanAndBane(tzimisce = FALSE) + var/mob/living/carbon/human/bloodsucker = owner.current + if(tzimisce) + my_clan = CLAN_TZIMISCE + to_chat(owner, span_announce("As you arrive near the station, you recall all you know and why you are here.\n\ + * As a part of the Tzimisce Clan, you are able to Dice corpses into muscle pieces.\n\ + * With muscles pieces you are able to mutilate dead husked vassals into greater beings,\n\ + * The more you climb up the Ranks the more research you gather about fleshcrafting and beings you can make.\n\ + * Remember to fuel a vassalrack with the muscles to be able to toy with those dead vassals, you are also able to ressurect people this way.\n\ + * Finally, your Favorite Vassal will turn into a battle monster to help you in combat.")) + AddHumanityLost(5.6) + BuyPower(new /datum/action/bloodsucker/targeted/dice) + bloodsucker.faction |= "bloodhungry" //flesh monster's clan + var/list/powerstoremove = list(/datum/action/bloodsucker/veil, /datum/action/bloodsucker/masquerade) + for(var/datum/action/bloodsucker/P in powers) + if(is_type_in_list(P, powerstoremove)) + RemovePower(P) + return var/static/list/clans = list( CLAN_GANGREL, CLAN_LASOMBRA, @@ -17,7 +34,6 @@ if(!answer) to_chat(owner, span_warning("You have wilingfully decided to stay ignorant.")) return - var/mob/living/carbon/human/bloodsucker = owner.current switch(answer) if(CLAN_GANGREL) my_clan = CLAN_GANGREL diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_integration.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_integration.dm index 18fc9fdd7d12..22da2397b596 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_integration.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_integration.dm @@ -18,10 +18,7 @@ /// Prevents Bloodsuckers from naturally regenerating Blood - Even while on masquerade /mob/living/carbon/human/handle_blood(delta_time, times_fired) - if(mind && IS_BLOODSUCKER(src)) - return - /// For Vassals -- Bloodsuckers get this removed while on Masquerade, so we don't want to remove the check above. - if(HAS_TRAIT(src, TRAIT_NOPULSE)) + if(mind || IS_BLOODSUCKER(src)) return . = ..() @@ -53,6 +50,8 @@ if(bloodsuckerdatum) . += "" . += "Blood Drank: [bloodsuckerdatum.total_blood_drank]" + if(bloodsuckerdatum.current_task) + . += "Task Blood Drank: [bloodsuckerdatum.task_blood_drank]" // INTEGRATION: Adding Procs and Datums to existing "classes" // diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm index 20ceb60b087d..783cd72a3f9c 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm @@ -153,12 +153,7 @@ if(bloodsucker && mind) mind.transfer_to(bloodsucker) bloodsucker.death() - if(istype(src, /mob/living/simple_animal/hostile/bloodsucker/tzimisce)) - return ..() - if(istype(src, /mob/living/simple_animal/hostile/bloodsucker/possessedarmor)) - qdel(src) - else - addtimer(CALLBACK(src, .proc/gib), 20 SECONDS) + qdel(src) ..() /mob/living/simple_animal/hostile/bloodsucker/proc/devour(mob/living/target) @@ -197,9 +192,8 @@ if(bloodsucker) if(ishuman(bloodsucker)) var/mob/living/carbon/human/user = bloodsucker - var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) if(user.blood_volume < 560) - bloodsuckerdatum.AddBloodVolume(10) + user.blood_volume += 10 health -= 0.25 //3 minutes to die if(satiation >= 3) to_chat(src, span_notice("It has been fed. You turn back to normal.")) diff --git a/code/modules/antagonists/bloodsuckers/powers/gangrel.dm b/code/modules/antagonists/bloodsuckers/powers/gangrel.dm index 8009a091cf36..46269cd1abbd 100644 --- a/code/modules/antagonists/bloodsuckers/powers/gangrel.dm +++ b/code/modules/antagonists/bloodsuckers/powers/gangrel.dm @@ -46,13 +46,9 @@ user_species.punchdamagehigh += 5.0 //stronk user_species.armor += 30 to_chat(user, span_notice("You aren't strong enough to morph into something stronger! But you do certainly feel more feral and stronger than before.")) - return - if(minortransformdone) - user_species.punchdamagelow += 1 - user_species.punchdamagehigh += 1 - user_species.armor += 2.5 - to_chat(user, span_notice("Using a bit more of blood you manage to get a tad stronger, but you still haven't evolved your ability yet.")) - bloodsuckerdatum.AddBloodVolume(50) + else + to_chat(user, span_notice("You still haven't evolved your ability yet.")) + bloodsuckerdatum.AddBloodVolume(75) if(500 to 1000) if(!mediumtransformdone) user.set_species(/datum/species/gorilla) @@ -64,13 +60,9 @@ user_species.punchdamagehigh += 7.5 //very stronk user_species.armor += 35 to_chat(owner, span_notice("You transform into a gorrila-ey beast, you feel stronger!")) - return - if(mediumtransformdone) - user_species.punchdamagelow += 2 - user_species.punchdamagehigh += 2 - user_species.armor += 5 - to_chat(owner, span_notice("Using a bit more of blood you manage to get a tad stronger, but you still haven't evolved your ability yet.")) - bloodsuckerdatum.AddBloodVolume(25) + else + to_chat(owner, span_notice("You still haven't evolved your ability yet.")) + bloodsuckerdatum.AddBloodVolume(50) if(1500 to INFINITY) var/mob/living/simple_animal/hostile/bloodsucker/giantbat/gb if(!gb || gb.stat == DEAD) diff --git a/code/modules/antagonists/bloodsuckers/powers/targeted/tzimisce.dm b/code/modules/antagonists/bloodsuckers/powers/targeted/tzimisce.dm index c9c419cb14f6..98f7bb400f1e 100644 --- a/code/modules/antagonists/bloodsuckers/powers/targeted/tzimisce.dm +++ b/code/modules/antagonists/bloodsuckers/powers/targeted/tzimisce.dm @@ -9,6 +9,7 @@ power_explanation = "Dice:\n\ Use on a dead corpse to extract muscle from it to be able to feed it to a vassalrack.\n\ This won't take long and is your primary source of muscle acquiring, necessary for future endeavours.\n\ + This ability takes well to leveling up, higher levels will increase your mastery over a person's flesh while using the ability for it's combat purpose.\n\ You shouldn't use this on your allies.." power_flags = BP_AM_TOGGLE|BP_AM_STATIC_COOLDOWN bloodcost = 10 @@ -100,7 +101,41 @@ /datum/action/bloodsucker/targeted/dice/FireTargetedPower(atom/target_atom) var/mob/living/target = target_atom + var/mob/living/carbon/user = owner + user.face_atom(target) if(target.stat != DEAD) + if(iscarbon(target)) + var/mob/living/carbon/Ctarget = target + var/selected_zone = user.zone_selected + var/list/viable_zones = list(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM) + if(!viable_zones.Find(selected_zone)) + selected_zone = pick(viable_zones) + var/obj/item/bodypart/target_part = Ctarget.get_bodypart(selected_zone) + user.do_attack_animation(Ctarget, ATTACK_EFFECT_PUNCH) + playsound(usr.loc, "sound/weapons/slice.ogg", 50, TRUE) + if(!target_part) + to_chat(user, span_warning("[Ctarget] has no limb there!")) + Ctarget.adjustBruteLoss(15 * level_current / 2) + return + switch(level_current) + if(0 to 3) + Ctarget.apply_damage(50, STAMINA, selected_zone) + to_chat(user, span_warning("You swiftly disable the nerves in [Ctarget]'s [target_part] with a precise strike.")) + if(3 to 6) + Ctarget.apply_damage(25, STAMINA, selected_zone) + Ctarget.apply_damage(25, BRUTE, selected_zone) + Ctarget.drop_all_held_items() + to_chat(user, span_warning("You hastly damage the ligaments in [Ctarget]'s [target_part] with a fierce blow.")) + if(6 to INFINITY) + if(target_part.dismemberable) + target_part.dismember() + to_chat(user, span_warning("You sever [Ctarget]'s [target_part] with a clean swipe.")) + else + Ctarget.apply_damage(30, BRUTE, selected_zone) + Ctarget.drop_all_held_items() + to_chat(user, span_warning("As [Ctarget]'s [target_part] is too tough to chop in a single action!")) + else + target.adjustBruteLoss(25) return playsound(usr.loc, "sound/weapons/slice.ogg", 50, TRUE) if(!do_mob(usr, target, 2.5 SECONDS)) @@ -113,6 +148,8 @@ bodypart.dismember() qdel(bodypart) new /obj/item/muscle/medium(H.loc) + else + to_chat(user, span_warning("You can't dismember this [bodypart] of [target]")) return if(iscarbon(target)) var/mob/living/carbon/C = target diff --git a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm index beeb6fe00159..e69618d159c6 100644 --- a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm +++ b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm @@ -477,6 +477,7 @@ if(bloodsuckerdatum.my_clan == CLAN_TZIMISCE) if(meat_amount > 0) . += span_boldnotice("It currently contains [meat_points] points to use in rituals.") + . += span_boldnotice("You can add meat points to the rack by using muscle, acquired from Dicing corpses, on it.") else return ..() @@ -591,6 +592,8 @@ // Can we assign a Favorite Vassal? if(istype(vassaldatum) && !bloodsuckerdatum.has_favorite_vassal) offer_favorite_vassal(user, buckled_carbons) + else if(bloodsuckerdatum.my_clan == CLAN_TZIMISCE) + do_ritual(user, buckled_carbons) use_lock = FALSE return @@ -630,9 +633,9 @@ add_overlay("mediummeat_[intermeat]") add_overlay("smallmeat_[intermeat]") if(mediummeat > 0) - add_overlay("mediummeat_[mediummeat]") + add_overlay("mediummeat_[mediummeat + intermeat]") if(smallmeat > 0) - add_overlay("smallmeat_[smallmeat]") + add_overlay("smallmeat_[smallmeat + intermeat]") /obj/structure/bloodsucker/vassalrack/CtrlClick(mob/user) if(!anchored) @@ -645,23 +648,19 @@ new /obj/item/muscle/small(user.drop_location()) smallmeat-- meat_points -= 1 - return if(mediummeat > 0) new /obj/item/muscle/medium(user.drop_location()) mediummeat-- meat_points -= 2 - return if(intermeat > 0) new /obj/item/muscle/medium(user.drop_location()) new /obj/item/muscle/small(user.drop_location()) intermeat-- meat_points -= 3 - return if(bigmeat > 0) new /obj/item/muscle/big(user.drop_location()) bigmeat-- meat_points -= 4 - return else to_chat(user, span_warning("There's no meat to retrieve in [src]")) meat_amount = bigmeat + intermeat + mediummeat + smallmeat @@ -889,6 +888,7 @@ var/list/options = list() options = races var/answer = input(user, "We have the chance to mutate our Vassal, how should we mutilate their corpse? This will cost us blood.", "What do we do with our Vassal?") in options + var/meat_cost = 0 var/blood_gained if(!answer) to_chat(user, span_notice("You decide to leave your Vassal just the way they are.")) @@ -918,12 +918,13 @@ H.become_husk() bloodsuckerdatum.bloodsucker_level_unspent++ if(ARMMY_MONSTER) + meat_cost = 4 var/mob/living/simple_animal/hostile/bloodsucker/tzimisce/armmy/A if(!(HAS_TRAIT(target, TRAIT_HUSK))) to_chat(user, span_warning("You need to mutilate [target] into a husk first before doing this.")) return - if(meat_points < 4) - to_chat(user, span_warning("You need atleast [4 - meat_points] more meat points to do this.")) + if(meat_points < meat_cost) + to_chat(user, span_warning("You need atleast [meat_cost - meat_points] more meat points to do this.")) return if(!do_mob(user, target, 1 SECONDS)) return @@ -937,12 +938,13 @@ A.bloodsucker = target /// Chance to give Bat form, or turn them into a bat. if(CALCIUM_MONSTER) + meat_cost = 8 var/mob/living/simple_animal/hostile/bloodsucker/tzimisce/calcium/C if(!(HAS_TRAIT(target, TRAIT_HUSK))) to_chat(user, span_warning("You need to mutilate [target] into a husk first before doing this.")) return - if(meat_points < 8) - to_chat(user, span_warning("You need atleast [8 - meat_points] more meat points to do this.")) + if(meat_points < meat_cost) + to_chat(user, span_warning("You need atleast [meat_cost - meat_points] more meat points to do this.")) return if(!do_mob(user, target, 1 SECONDS)) return @@ -955,12 +957,13 @@ target.mind.transfer_to(C) C.bloodsucker = target if(TRIPLECHEST_MONSTER) + meat_cost = 12 var/mob/living/simple_animal/hostile/bloodsucker/tzimisce/triplechest/T if(!(HAS_TRAIT(target, TRAIT_HUSK))) to_chat(user, span_warning("You need to mutilate [target] into a husk first before doing this.")) return - if(meat_points < 12) - to_chat(user, span_warning("You need atleast [12 - meat_points] more meat points to do this.")) + if(meat_points < meat_cost) + to_chat(user, span_warning("You need atleast [meat_cost - meat_points] more meat points to do this.")) return if(!do_mob(user, target, 1 SECONDS)) return @@ -976,6 +979,25 @@ T.bloodsucker = target if(blood_gained) user.blood_volume += blood_gained + var/meatlost = 0 + while(meat_cost) + meat_points-- + meat_cost-- + meatlost++ + if(smallmeat && meatlost == 1) + smallmeat-- + meatlost-- + if(mediummeat && meatlost == 2) + mediummeat-- + meatlost -= 2 + if(intermeat && meatlost == 3) + intermeat-- + meatlost -= 3 + if(bigmeat && meatlost == 4) + bigmeat-- + meatlost -= 4 + update_icon() + meat_amount = bigmeat + intermeat + mediummeat + smallmeat //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_life.dm b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_life.dm index e686ccbb3977..31feda4c345d 100644 --- a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_life.dm +++ b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_life.dm @@ -168,6 +168,9 @@ current_eyes.sight_flags = SEE_MOBS current_eyes.see_in_dark = 8 current_eyes.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE + if(my_clan == CLAN_LASOMBRA && ishuman(bloodsuckeruser)) + var/mob/living/carbon/human/bloodsucker = bloodsuckeruser + bloodsucker.eye_color = "f00" bloodsuckeruser.update_sight() // Step 3 @@ -258,40 +261,49 @@ /datum/antagonist/bloodsucker/proc/enter_frenzy() if(my_clan == CLAN_GANGREL) var/mob/living/carbon/user = owner.current - AddBloodVolume(560 - user.blood_volume) //so it doesn't happen multiple times and refills your blood when you get out again - if(!do_mob(user, user, 2 SECONDS, TRUE)) - return - playsound(user.loc, 'sound/weapons/slash.ogg', 25, 1) - to_chat(user, span_warning("You skin rips and tears.")) - if(!do_mob(user, user, 1 SECONDS, TRUE)) - return - playsound(user.loc, 'sound/weapons/slashmiss.ogg', 25, 1) - to_chat(user, span_warning("You heart pumps blackened blood into your veins as your skin turns into fur.")) - if(!do_mob(user, user, 1 SECONDS, TRUE)) - return - playsound(user.loc, 'sound/weapons/slice.ogg', 25, 1) - to_chat(user, span_boldnotice("YOU HAVE AWOKEN.")) - var/mob/living/simple_animal/hostile/bloodsucker/werewolf/ww - if(!ww || ww.stat == DEAD) - ww = new /mob/living/simple_animal/hostile/bloodsucker/werewolf(user.loc) - user.forceMove(ww) - ww.bloodsucker = user - user.mind.transfer_to(ww) - var/list/wolf_powers = list(new /datum/action/bloodsucker/targeted/feast,) - for(var/datum/action/bloodsucker/power in powers) - if(istype(power, /datum/action/bloodsucker/fortitude)) - wolf_powers += new /datum/action/bloodsucker/gangrel/wolfortitude - if(istype(power, /datum/action/bloodsucker/targeted/lunge)) - wolf_powers += new /datum/action/bloodsucker/targeted/pounce - if(istype(power, /datum/action/bloodsucker/cloak)) - wolf_powers += new /datum/action/bloodsucker/gangrel/howl - if(istype(power, /datum/action/bloodsucker/targeted/trespass)) - wolf_powers += new /datum/action/bloodsucker/gangrel/rabidism - for(var/datum/action/bloodsucker/power in wolf_powers) - power.Grant(ww) - frenzies++ - return - owner.current.apply_status_effect(STATUS_EFFECT_FRENZY) + switch(frenzies) + if(0) + owner.current.apply_status_effect(STATUS_EFFECT_FRENZY) + return + if(1) + to_chat(owner, span_warning("You start feeling hungrier, you feel like a normal frenzy won't satiate it enough anymore.")) + owner.current.apply_status_effect(STATUS_EFFECT_FRENZY) + return + if(2 to INFINITY) + AddBloodVolume(560 - user.blood_volume) //so it doesn't happen multiple times and refills your blood when you get out again + if(!do_mob(user, user, 2 SECONDS, TRUE)) + return + playsound(user.loc, 'sound/weapons/slash.ogg', 25, 1) + to_chat(user, span_warning("You skin rips and tears.")) + if(!do_mob(user, user, 1 SECONDS, TRUE)) + return + playsound(user.loc, 'sound/weapons/slashmiss.ogg', 25, 1) + to_chat(user, span_warning("You heart pumps blackened blood into your veins as your skin turns into fur.")) + if(!do_mob(user, user, 1 SECONDS, TRUE)) + return + playsound(user.loc, 'sound/weapons/slice.ogg', 25, 1) + to_chat(user, span_boldnotice("YOU HAVE AWOKEN.")) + var/mob/living/simple_animal/hostile/bloodsucker/werewolf/ww + if(!ww || ww.stat == DEAD) + ww = new /mob/living/simple_animal/hostile/bloodsucker/werewolf(user.loc) + user.forceMove(ww) + ww.bloodsucker = user + user.mind.transfer_to(ww) + var/list/wolf_powers = list(new /datum/action/bloodsucker/targeted/feast,) + for(var/datum/action/bloodsucker/power in powers) + if(istype(power, /datum/action/bloodsucker/fortitude)) + wolf_powers += new /datum/action/bloodsucker/gangrel/wolfortitude + if(istype(power, /datum/action/bloodsucker/targeted/lunge)) + wolf_powers += new /datum/action/bloodsucker/targeted/pounce + if(istype(power, /datum/action/bloodsucker/cloak)) + wolf_powers += new /datum/action/bloodsucker/gangrel/howl + if(istype(power, /datum/action/bloodsucker/targeted/trespass)) + wolf_powers += new /datum/action/bloodsucker/gangrel/rabidism + for(var/datum/action/bloodsucker/power in wolf_powers) + power.Grant(ww) + frenzies++ + else + owner.current.apply_status_effect(STATUS_EFFECT_FRENZY) /** * # Torpor diff --git a/code/modules/antagonists/bloodsuckers/vassal.dm b/code/modules/antagonists/bloodsuckers/vassal.dm index 73ef497ebbb8..ba6180271ea9 100644 --- a/code/modules/antagonists/bloodsuckers/vassal.dm +++ b/code/modules/antagonists/bloodsuckers/vassal.dm @@ -15,7 +15,7 @@ var/datum/game_mode/blooodsucker /// List of all Purchased Powers, like Bloodsuckers. var/list/datum/action/powers = list() - /// The favorite vassal gets unique features, and Ventrue can upgrade theirs + /// The favorite vassal gets unique features. var/favorite_vassal = FALSE /// Bloodsucker levels, but for Vassals. var/vassal_level @@ -114,14 +114,26 @@ to_chat(master, span_danger("You have turned [owner.current] into your Favorite Vassal! They will no longer be deconverted upon Mindshielding!")) to_chat(owner, span_notice("As Blood drips over your body, you feel closer to your Master... You are now the Favorite Vassal!")) var/datum/antagonist/bloodsucker/bloodsuckerdatum = master.mind.has_antag_datum(/datum/antagonist/bloodsucker) + var/mob/living/carbon/human/vassal = owner.current switch(bloodsuckerdatum.my_clan) if(CLAN_GANGREL) var/obj/effect/proc_holder/spell/targeted/shapeshift/bat/batform = new - owner.current.AddSpell(batform) + owner.AddSpell(batform) if(CLAN_LASOMBRA) + if(ishuman(owner.current)) + vassal.see_in_dark = 8 + vassal.eye_color = "f00" var/list/powers = list(new /obj/effect/proc_holder/spell/targeted/lesser_glare, new /obj/effect/proc_holder/spell/targeted/shadowwalk) for(var/obj/effect/proc_holder/spell/targeted/power in powers) - owner.current.AddSpell(powers) + owner.AddSpell(power) + if(CLAN_TZIMISCE) + if(!do_mob(master, owner.current, 1 SECONDS, TRUE)) + return + playsound(vassal.loc, 'sound/weapons/slash.ogg', 50, TRUE, -1) + if(!do_mob(master, owner.current, 1 SECONDS, TRUE)) + return + playsound(vassal.loc, 'sound/effects/splat.ogg', 50, TRUE) + vassal.set_species(/datum/species/szlachta) /// 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) diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index ab8a8ad56890..a99c4aa11767 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -75,9 +75,9 @@ if(!(M.stat == DEAD || (HAS_TRAIT(M, TRAIT_FAKEDEATH)))) if(heart && istype(heart)) - heart_strength = span_danger("an unstable") + heart_strength = heart.HeartStrengthMessage() if(heart.beating) - heart_strength = "a healthy" + heart_strength = heart.HeartStrengthMessage() if(lungs && istype(lungs)) lung_strength = span_danger("strained") if(!(M.failed_last_breath || M.losebreath)) diff --git a/code/modules/events/tzimisce.dm b/code/modules/events/tzimisce.dm index b0c4c063d6b3..76fca9507cd7 100644 --- a/code/modules/events/tzimisce.dm +++ b/code/modules/events/tzimisce.dm @@ -1,8 +1,8 @@ -/datum/round_event_control/tzimisce/tzimiscebloodsucker +/datum/round_event_control/tzimisce/bloodsucker name = "Spawn Tzimisce - Bloodsucker" max_occurrences = 1 - typepath = /datum/round_event/ghost_role/tzimisce/bloodsucker weight = 5 + typepath = /datum/round_event/ghost_role/tzimisce/bloodsucker min_players = 25 earliest_start = 30 MINUTES gamemode_whitelist = list("bloodsucker","traitorsucker","dynamic") @@ -60,12 +60,7 @@ Mind.add_antag_datum(/datum/antagonist/bloodsucker) var/datum/antagonist/bloodsucker/bloodsuckerdatum = tzimisce.mind.has_antag_datum(/datum/antagonist/bloodsucker) bloodsuckerdatum.bloodsucker_level_unspent += round(world.time / (15 MINUTES), 1) - bloodsuckerdatum.my_clan = CLAN_TZIMISCE - var/list/powerstoremove = list(/datum/action/bloodsucker/veil, /datum/action/bloodsucker/masquerade) - for(var/datum/action/bloodsucker/Forbidden in bloodsuckerdatum.powers) - if(is_type_in_list(Forbidden, powerstoremove)) - bloodsuckerdatum.RemovePower(Forbidden) - bloodsuckerdatum.BuyPower(new /datum/action/bloodsucker/targeted/dice) + bloodsuckerdatum.AssignClanAndBane(tzimisce = TRUE) spawned_mobs += tzimisce message_admins("[ADMIN_LOOKUPFLW(tzimisce)] has been made into a tzimisce bloodsucker an event.") @@ -83,7 +78,7 @@ var/mob/living/carbon/human/new_tzimisce = new(spawn_loc) if(!spawn_loc) SSjob.SendToLateJoin(new_tzimisce) - var/datum/preferences/A = new() //Randomize appearance for the demon. + var/datum/preferences/A = new() //Randomize appearance. A.copy_to(new_tzimisce) new_tzimisce.dna.update_dna_identity() return new_tzimisce diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 7498c510ecc6..7767872265e4 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -715,6 +715,10 @@ no_update = FALSE if(HAS_TRAIT(C, TRAIT_HUSK) && is_organic_limb()) + if(ishuman(C)) + var/mob/living/carbon/human/S = C + if(isszlachta(S)) + return species_id = "husk" //overrides species_id dmg_overlay_type = "" //no damage overlay shown when husked should_draw_gender = FALSE diff --git a/icons/mob/bloodsucker_mobs.dmi b/icons/mob/bloodsucker_mobs.dmi index b8036c20e04b5483a353ec9bdf2cf04274a534ac..20276e91d0cbe2873429ac39452bac3f46acc97e 100644 GIT binary patch delta 6884 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 Kxmm93i2i@&b(P`( delta 6955 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 U(NK91LUq1w>YM7->$su*58{QP4*&oF diff --git a/icons/obj/vamp_obj.dmi b/icons/obj/vamp_obj.dmi index 269bab3d46b7b8d3ad13350ae3efc5680f01d214..2b3f5814f816a217ee612bb8dd683e47a6332508 100644 GIT binary patch literal 22729 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�~2LmRj?q6Njgdh~#r=Wz2^}6x1U@)Tk)r(fJ`w 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
      ~!-ji@qLX@u#q(b4aP+GDQ=TS`IDVzbgm%Hf&l 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 HHV*tBLKM+I delta 5988 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 OhB{gX_o_4;pZyD$qRNf{ From 0fffbc3203072cfb6ad473c963ba0fcc4f6f74d8 Mon Sep 17 00:00:00 2001 From: tattax <71668564+tattax@users.noreply.github.com> Date: Fri, 6 May 2022 12:12:25 -0300 Subject: [PATCH 15/20] aaggh --- yogstation.dme | 1 + 1 file changed, 1 insertion(+) diff --git a/yogstation.dme b/yogstation.dme index ea5551f37ebd..8a72edc83e7d 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -3683,6 +3683,7 @@ #include "yogstation\code\modules\mob\living\carbon\human\species_types\jellypeople.dm" #include "yogstation\code\modules\mob\living\carbon\human\species_types\lizard.dm" #include "yogstation\code\modules\mob\living\carbon\human\species_types\plantpeople.dm" +#include "yogstation/code/modules/mob/living/carbon/human/species_types/szlachta.dm" #include "yogstation\code\modules\mob\living\carbon\human\species_types\preternis\organs.dm" #include "yogstation\code\modules\mob\living\carbon\human\species_types\preternis\power_suck.dm" #include "yogstation\code\modules\mob\living\carbon\human\species_types\preternis\preternis.dm" From 72214abfee8b346528e4147b7bbcacafb9b783ac Mon Sep 17 00:00:00 2001 From: tattax <71668564+tattax@users.noreply.github.com> Date: Fri, 6 May 2022 12:17:21 -0300 Subject: [PATCH 16/20] f --- yogstation.dme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yogstation.dme b/yogstation.dme index 8a72edc83e7d..3000ba118a1c 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -3683,7 +3683,7 @@ #include "yogstation\code\modules\mob\living\carbon\human\species_types\jellypeople.dm" #include "yogstation\code\modules\mob\living\carbon\human\species_types\lizard.dm" #include "yogstation\code\modules\mob\living\carbon\human\species_types\plantpeople.dm" -#include "yogstation/code/modules/mob/living/carbon/human/species_types/szlachta.dm" +#include "yogstation\code\modules\mob\living\carbon\human\species_types\szlachta.dm" #include "yogstation\code\modules\mob\living\carbon\human\species_types\preternis\organs.dm" #include "yogstation\code\modules\mob\living\carbon\human\species_types\preternis\power_suck.dm" #include "yogstation\code\modules\mob\living\carbon\human\species_types\preternis\preternis.dm" From 52f0d54b829a3e1f1fde346bd47d801d81bd2b36 Mon Sep 17 00:00:00 2001 From: tattax <71668564+tattax@users.noreply.github.com> Date: Sat, 7 May 2022 20:12:07 -0300 Subject: [PATCH 17/20] fixes runtimes runtimes stopped frenzy from applying the burn effect ( i didn't even know about it cause it doesn't say it anywhre lol) + masquerade runtimes + gangrel runtimes which fucked everything and coffin runtimes (coffins have had 0 armor for some time) --- .../bloodsuckers/bloodsucker_frenzy.dm | 10 +++--- .../bloodsuckers/bloodsucker_integration.dm | 6 ---- .../bloodsuckers/bloodsucker_objectives.dm | 22 ++++++------- .../antagonists/bloodsuckers/bloodsuckers.dm | 16 +++------- .../bloodsuckers/powers/masquerade.dm | 6 ++-- .../structures/bloodsucker_coffin.dm | 8 ++--- .../structures/bloodsucker_crypt.dm | 29 +++++++----------- .../monsterhunter/monsterhunter.dm | 26 ++++++---------- code/modules/mob/living/blood.dm | 4 +++ icons/obj/vamp_obj.dmi | Bin 22729 -> 21508 bytes 10 files changed, 53 insertions(+), 74 deletions(-) diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_frenzy.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_frenzy.dm index 8c851bf8e6c2..4840fcf5a999 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_frenzy.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_frenzy.dm @@ -28,20 +28,20 @@ status_type = STATUS_EFFECT_UNIQUE duration = -1 tick_interval = 10 - examine_text = "They seem... inhumane, and feral!" - alert_type = /atom/movable/screen/alert/status_effect/frenzy + examine_text = span_notice("They seem... inhumane, and feral!") + alert_type = /obj/screen/alert/status_effect/frenzy /// Store whether they were an advancedtooluser, to give the trait back upon exiting. var/was_tooluser = FALSE /// The stored Bloodsucker antag datum var/datum/antagonist/bloodsucker/bloodsuckerdatum -/atom/movable/screen/alert/status_effect/frenzy +/obj/screen/alert/status_effect/frenzy name = "Frenzy" desc = "You are in a Frenzy! You are entirely Feral and, depending on your Clan, fighting for your life!" icon = 'icons/mob/actions/actions_bloodsucker.dmi' icon_state = "power_recover" -/atom/movable/screen/alert/status_effect/masquerade/MouseEntered(location,control,params) +/obj/screen/alert/status_effect/masquerade/MouseEntered(location,control,params) desc = initial(desc) return ..() @@ -97,4 +97,4 @@ var/mob/living/carbon/human/user = owner if(!bloodsuckerdatum.frenzied) return - user.adjustFireLoss(1.5 + (bloodsuckerdatum.humanity_lost / 10)) + user.adjustFireLoss(0.5 + (bloodsuckerdatum.humanity_lost / 15)) diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_integration.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_integration.dm index 22da2397b596..30b560a9db34 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_integration.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_integration.dm @@ -16,12 +16,6 @@ return . = ..() -/// Prevents Bloodsuckers from naturally regenerating Blood - Even while on masquerade -/mob/living/carbon/human/handle_blood(delta_time, times_fired) - if(mind || IS_BLOODSUCKER(src)) - return - . = ..() - /mob/living/carbon/human/natural_bodytemperature_stabilization(datum/gas_mixture/environment, delta_time, times_fired) // Return 0 as your natural temperature. Species proc handle_environment() will adjust your temperature based on this. if(HAS_TRAIT(src, TRAIT_COLDBLOODED)) diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_objectives.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_objectives.dm index a964e4932b34..4ebd20744c2f 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_objectives.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_objectives.dm @@ -252,17 +252,17 @@ // WIN CONDITIONS? /datum/objective/bloodsucker/monsterhunter/check_completion() var/list/datum/mind/monsters = list() - for(var/mob/living/players in GLOB.alive_mob_list) - if(IS_HERETIC(players) || IS_BLOODSUCKER(players) || iscultist(players) || is_wizard(players) || is_servant_of_ratvar(players)) - monsters += players - if(players?.mind?.has_antag_datum(/datum/antagonist/changeling)) - monsters += players - if(players?.mind?.has_antag_datum(/datum/antagonist/wizard/apprentice)) - monsters += players - for(var/datum/mind/monster_minds in monsters) - if(monster_minds && monster_minds != owner && monster_minds.current.stat != DEAD) - return FALSE - return TRUE + for(var/datum/antagonist/monster in GLOB.antagonists) + var/datum/mind/brain = monster.owner + if(!brain || brain == owner) + continue + if(brain.current.stat == DEAD) + continue + if(IS_HERETIC(brain.current) || IS_BLOODSUCKER(brain.current) || iscultist(brain.current) || is_servant_of_ratvar(brain.current) || is_wizard(brain.current)) + monsters += brain + if(brain.has_antag_datum(/datum/antagonist/changeling)) + monsters += brain + return completed || !monsters.len diff --git a/code/modules/antagonists/bloodsuckers/bloodsuckers.dm b/code/modules/antagonists/bloodsuckers/bloodsuckers.dm index f4e9588bf16c..cc8f58d1a9e5 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsuckers.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsuckers.dm @@ -495,19 +495,13 @@ switch(rand(1, 3)) if(1) // Protege and Drink Objective rolled_objectives = list(new /datum/objective/bloodsucker/protege, new /datum/objective/bloodsucker/gourmand) - for(var/datum/objective/bloodsucker/objective in rolled_objectives) - objective.owner = owner - objectives += objective if(2) // Heart Thief and Protege Objective rolled_objectives = list(new /datum/objective/bloodsucker/protege, new /datum/objective/bloodsucker/heartthief) - for(var/datum/objective/bloodsucker/objective in rolled_objectives) - objective.owner = owner - objectives += objective - if(3) // All of them - rolled_objectives = list(new /datum/objective/bloodsucker/protege, new /datum/objective/bloodsucker/heartthief, new /datum/objective/bloodsucker/gourmand) - for(var/datum/objective/bloodsucker/objective in rolled_objectives) - objective.owner = owner - objectives += objective + if(3) // Heart Thief and Drink Objective + rolled_objectives = list(new /datum/objective/bloodsucker/heartthief, new /datum/objective/bloodsucker/gourmand) + for(var/datum/objective/bloodsucker/objective in rolled_objectives) + objective.owner = owner + objectives += objective /// Name shown on antag list /datum/antagonist/bloodsucker/antag_listing_name() diff --git a/code/modules/antagonists/bloodsuckers/powers/masquerade.dm b/code/modules/antagonists/bloodsuckers/powers/masquerade.dm index a564836bdfbd..b162b239932f 100644 --- a/code/modules/antagonists/bloodsuckers/powers/masquerade.dm +++ b/code/modules/antagonists/bloodsuckers/powers/masquerade.dm @@ -142,14 +142,14 @@ id = "masquerade" duration = -1 tick_interval = -1 - alert_type = /atom/movable/screen/alert/status_effect/masquerade + alert_type = /obj/screen/alert/status_effect/masquerade -/atom/movable/screen/alert/status_effect/masquerade +/obj/screen/alert/status_effect/masquerade name = "Masquerade" desc = "You are currently hiding your identity using the Masquerade power. This halts Vampiric healing." icon = 'icons/mob/actions/actions_bloodsucker.dmi' icon_state = "power_human" -/atom/movable/screen/alert/status_effect/masquerade/MouseEntered(location,control,params) +/obj/screen/alert/status_effect/masquerade/MouseEntered(location,control,params) desc = initial(desc) return ..() diff --git a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_coffin.dm b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_coffin.dm index 9aa8d29ed465..9cee00d12b88 100644 --- a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_coffin.dm +++ b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_coffin.dm @@ -47,7 +47,7 @@ resistance_flags = NONE material_drop = /obj/item/stack/sheet/metal material_drop_amount = 2 - armor = list(MELEE = 50, BULLET = 20, LASER = 30, ENERGY = 0, BOMB = 50, BIO = 0, FIRE = 70, ACID = 60) + armor = list("melee" = 50, "bullet" = 20, "laser" = 30, "energy" = 0, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 60) /obj/structure/closet/crate/coffin/securecoffin name = "secure coffin" @@ -61,7 +61,7 @@ resistance_flags = FIRE_PROOF | LAVA_PROOF | ACID_PROOF material_drop = /obj/item/stack/sheet/metal material_drop_amount = 2 - armor = list(MELEE = 35, BULLET = 20, LASER = 20, ENERGY = 0, BOMB = 100, BIO = 0, FIRE = 100, ACID = 100) + armor = list("melee" = 35, "bullet" = 20, "laser" = 20, "energy" = 0, "bomb" = 100, "bio" = 0, "rad" = 100, "fire" = 100, "acid" = 100) /obj/structure/closet/crate/coffin/meatcoffin name = "meat coffin" @@ -75,7 +75,7 @@ pryLidTimer = 20 SECONDS material_drop = /obj/item/reagent_containers/food/snacks/meat/slab material_drop_amount = 3 - armor = list(MELEE = 70, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 70, BIO = 0, FIRE = 70, ACID = 60) + armor = list("melee" = 70, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 70, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 60) /obj/structure/closet/crate/coffin/metalcoffin name = "metal coffin" @@ -88,7 +88,7 @@ breakout_time = 25 SECONDS pryLidTimer = 30 SECONDS material_drop = /obj/item/stack/sheet/metal - armor = list(MELEE = 40, BULLET = 15, LASER = 50, ENERGY = 0, BOMB = 10, BIO = 0, FIRE = 70, ACID = 60) + armor = list("melee" = 40, "bullet" = 15, "laser" = 50, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 50, "fire" = 70, "acid" = 60) ////////////////////////////////////////////// diff --git a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm index e69618d159c6..fc7c8727b4b3 100644 --- a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm +++ b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_crypt.dm @@ -362,7 +362,6 @@ Good for immediate defense of your lair." Vassal_desc = "This is a possesed knight's armor, it will protect your master if people get too close to it." Hunter_desc = "This is a suspicious knight's armor. These things shouldn't be here, i shouldn't get too close." - var/active = FALSE var/upgraded = FALSE /obj/structure/bloodsucker/possessedarmor/upgraded @@ -372,11 +371,11 @@ /obj/structure/bloodsucker/possessedarmor/bolt() . = ..() anchored = TRUE + START_PROCESSING(SSprocessing, src) /obj/structure/bloodsucker/possessedarmor/unbolt() . = ..() anchored = FALSE - active = FALSE STOP_PROCESSING(SSprocessing, src) /obj/structure/bloodsucker/possessedarmor/AltClick(mob/user) @@ -403,26 +402,20 @@ return return ..() -/obj/structure/bloodsucker/possessedarmor/attack_hand(mob/user, list/modifiers) - . = ..() - active = TRUE - START_PROCESSING(SSprocessing, src) - /obj/structure/bloodsucker/possessedarmor/Destroy() . = ..() STOP_PROCESSING(SSprocessing, src) /obj/structure/bloodsucker/possessedarmor/process() - if(active) - for(var/mob/living/passerby in dview(1, get_turf(src))) - if(IS_BLOODSUCKER(passerby) || IS_VASSAL(passerby)) - continue - to_chat(passerby, span_warning("The armor starts moving!")) - if(upgraded) - new /mob/living/simple_animal/hostile/bloodsucker/possessedarmor/upgraded(src.loc) - else - new /mob/living/simple_animal/hostile/bloodsucker/possessedarmor(src.loc) - qdel(src) + for(var/mob/living/passerby in dview(1, get_turf(src))) + if(IS_BLOODSUCKER(passerby) || IS_VASSAL(passerby)) + continue + to_chat(passerby, span_warning("The armor starts moving!")) + if(upgraded) + new /mob/living/simple_animal/hostile/bloodsucker/possessedarmor/upgraded(src.loc) + else + new /mob/living/simple_animal/hostile/bloodsucker/possessedarmor(src.loc) + qdel(src) //////////////////////////////////////////////////// @@ -867,7 +860,7 @@ to_chat(user, span_danger("You have brought [target] back from the Dead!")) to_chat(target, span_announce("As Blood drips over your body, your heart begins to beat... You live again!")) B.blood_volume -= 150 - target.revive(full_heal = TRUE, admin_revive = TRUE) + target.revive(full_heal = TRUE, admin_revive = FALSE) return to_chat(user, span_danger("You decide not to revive [target].")) // Unbuckle them now. diff --git a/code/modules/antagonists/monsterhunter/monsterhunter.dm b/code/modules/antagonists/monsterhunter/monsterhunter.dm index c184096242ae..5bc9a6113641 100644 --- a/code/modules/antagonists/monsterhunter/monsterhunter.dm +++ b/code/modules/antagonists/monsterhunter/monsterhunter.dm @@ -135,22 +135,16 @@ var/turf/my_loc = get_turf(owner) var/list/mob/living/carbon/monsters = list() - for(var/mob/living/carbon/all_carbons in GLOB.alive_mob_list) - if(all_carbons != owner && all_carbons.mind) - var/datum/mind/carbon_minds = all_carbons.mind - if(IS_HERETIC(all_carbons) || IS_BLOODSUCKER(all_carbons) || iscultist(all_carbons) || is_servant_of_ratvar(all_carbons) || is_wizard(all_carbons)) - monsters += carbon_minds - if(carbon_minds.has_antag_datum(/datum/antagonist/changeling)) - monsters += carbon_minds - if(carbon_minds.has_antag_datum(/datum/antagonist/ashwalker)) - monsters += carbon_minds - if(carbon_minds.has_antag_datum(/datum/antagonist/wizard/apprentice)) - monsters += carbon_minds - if(istype(monsters)) - var/their_loc = get_turf(all_carbons) - var/distance = get_dist_euclidian(my_loc, their_loc) - if(distance < HUNTER_SCAN_MAX_DISTANCE) - monsters[all_carbons] = (HUNTER_SCAN_MAX_DISTANCE ** 2) - (distance ** 2) + for(var/datum/antagonist/monster in GLOB.antagonists) + var/datum/mind/brain = monster.owner + if(brain == owner || !brain) + continue + if(IS_HERETIC(brain.current) || IS_BLOODSUCKER(brain.current) || iscultist(brain.current) || is_servant_of_ratvar(brain.current) || is_wizard(brain.current)) + monsters += brain + if(brain.has_antag_datum(/datum/antagonist/changeling)) + monsters += brain + if(brain.has_antag_datum(/datum/antagonist/ashwalker)) + monsters += brain if(monsters.len) /// Point at a 'random' monster, biasing heavily towards closer ones. diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index e10fd12c1ca0..2d30c1107d6c 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -27,6 +27,10 @@ if(NOBLOOD in dna.species.species_traits || bleedsuppress || (HAS_TRAIT(src, TRAIT_FAKEDEATH))) return + + if(mind && IS_BLOODSUCKER(src)) // Prevents Bloodsuckers from naturally regenerating Blood - Even while on masquerade + return + if(HAS_TRAIT(src, TRAIT_NOPULSE)) // Fulpstation Bloodsuckers edit - Dont regenerate blood, damnmit! return diff --git a/icons/obj/vamp_obj.dmi b/icons/obj/vamp_obj.dmi index 2b3f5814f816a217ee612bb8dd683e47a6332508..7818e30ed392d98a2fc9e9f2a887a4c86863f626 100644 GIT binary patch literal 21508 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

      89Gsbps&+D}^n*yfu^l)j5gZ0}VCl1ZUD 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 G{J#K!*Ial2 literal 22729 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�~2LmRj?q6Njgdh~#r=Wz2^}6x1U@)Tk)r(fJ`w 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 Date: Sat, 7 May 2022 20:39:10 -0300 Subject: [PATCH 18/20] d --- code/modules/antagonists/bloodsuckers/bloodsucker_frenzy.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_frenzy.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_frenzy.dm index 4840fcf5a999..eb605ff68e7d 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_frenzy.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_frenzy.dm @@ -51,7 +51,7 @@ // Disable ALL Powers and notify their entry bloodsuckerdatum.DisableAllPowers() - to_chat(owner, span_userdanger("Blood! You need Blood, now! You enter a total Frenzy!")) + to_chat(owner, span_userdanger("Blood! You need Blood, now! You enter a total Frenzy! Your skin starts sizzling....")) to_chat(owner, span_announce("* Bloodsucker Tip: While in Frenzy, you instantly Aggresively grab, have stun resistance, cannot speak, hear, or use any powers outside of Feed and Trespass (If you have it).")) // Stamina resistances user.physiology.stamina_mod *= 0.4 From 43330d8b4093b1654ac8cc2b1be2f8c95c4b3019 Mon Sep 17 00:00:00 2001 From: tattax <71668564+tattax@users.noreply.github.com> Date: Sun, 8 May 2022 14:27:38 -0300 Subject: [PATCH 19/20] a --- .../antagonists/bloodsuckers/powers/_powers.dm | 12 +++++++----- .../modules/antagonists/bloodsuckers/powers/cloak.dm | 3 +-- code/modules/antagonists/bloodsuckers/powers/feed.dm | 3 +-- .../antagonists/bloodsuckers/powers/fortitude.dm | 3 +-- .../antagonists/bloodsuckers/powers/gohome.dm | 4 ++-- .../antagonists/bloodsuckers/powers/recuperate.dm | 3 +-- .../bloodsuckers/powers/targeted/_powers_targeted.dm | 2 +- 7 files changed, 14 insertions(+), 16 deletions(-) diff --git a/code/modules/antagonists/bloodsuckers/powers/_powers.dm b/code/modules/antagonists/bloodsuckers/powers/_powers.dm index 4dcfd47c6512..cf3e472a378b 100644 --- a/code/modules/antagonists/bloodsuckers/powers/_powers.dm +++ b/code/modules/antagonists/bloodsuckers/powers/_powers.dm @@ -184,13 +184,13 @@ /datum/action/bloodsucker/proc/ActivatePower(process = TRUE) active = TRUE if(power_flags & BP_AM_TOGGLE && process == TRUE) - START_PROCESSING(SSprocessing, src) + RegisterSignal(owner, COMSIG_LIVING_BIOLOGICAL_LIFE, .proc/UsePower) owner.log_message("used [src][bloodcost != 0 ? " at the cost of [bloodcost]" : ""].", LOG_ATTACK, color="red") UpdateButtonIcon() /datum/action/bloodsucker/proc/DeactivatePower(process = TRUE) if(power_flags & BP_AM_TOGGLE && process == TRUE) - STOP_PROCESSING(SSprocessing, src) + UnregisterSignal(owner, COMSIG_LIVING_BIOLOGICAL_LIFE) if(power_flags & BP_AM_SINGLEUSE) RemoveAfterUse() return @@ -199,12 +199,14 @@ StartCooldown() ///Used by powers that are continuously active (That have BP_AM_TOGGLE flag) -/datum/action/bloodsucker/process(delta_time) - if(!ContinueActive(owner)) // We can't afford the Power? Deactivate it. +/datum/action/bloodsucker/proc/UsePower(mob/living/user) + if(!active) // Power isn't active? Then stop here, so we dont keep looping UsePower for a non existent Power. + return FALSE + if(!ContinueActive(user)) // We can't afford the Power? Deactivate it. DeactivatePower() return FALSE // We can keep this up (For now), so Pay Cost! - if(!(power_flags & BP_AM_COSTLESS_UNCONSCIOUS) && owner.stat != CONSCIOUS) + if(!(power_flags & BP_AM_COSTLESS_UNCONSCIOUS) && user.stat != CONSCIOUS) bloodsuckerdatum_power?.AddBloodVolume(-constant_bloodcost) return TRUE diff --git a/code/modules/antagonists/bloodsuckers/powers/cloak.dm b/code/modules/antagonists/bloodsuckers/powers/cloak.dm index b28b06a5791f..7d119a9a9bf6 100644 --- a/code/modules/antagonists/bloodsuckers/powers/cloak.dm +++ b/code/modules/antagonists/bloodsuckers/powers/cloak.dm @@ -37,12 +37,11 @@ user.digitalcamo = 1 to_chat(user, span_notice("You put your Cloak of Darkness on.")) -/datum/action/bloodsucker/cloak/process(delta_time) +/datum/action/bloodsucker/cloak/UsePower(mob/living/user) // Checks that we can keep using this. . = ..() if(!.) return - var/mob/living/user = owner animate(user, alpha = max(25, owner.alpha - min(75, 10 + 5 * level_current)), time = 1.5 SECONDS) // Prevents running while on Cloak of Darkness if(runbound) diff --git a/code/modules/antagonists/bloodsuckers/powers/feed.dm b/code/modules/antagonists/bloodsuckers/powers/feed.dm index 963dc9ccac8e..0f5c19e440e4 100644 --- a/code/modules/antagonists/bloodsuckers/powers/feed.dm +++ b/code/modules/antagonists/bloodsuckers/powers/feed.dm @@ -225,8 +225,7 @@ ADD_TRAIT(user, TRAIT_MUTE, BLOODSUCKER_TRAIT) // My mouth is full! user.Immobilize(10 SECONDS) // Prevents spilling blood accidentally. -/datum/action/bloodsucker/feed/process(delta_time) - var/mob/living/user = owner +/datum/action/bloodsucker/feed/UsePower(mob/living/user) if(!ContinueActive(user, feed_target)) if(amSilent) to_chat(user, span_warning("Your feeding has been interrupted... but [feed_target.p_they()] didn't seem to notice you.")) diff --git a/code/modules/antagonists/bloodsuckers/powers/fortitude.dm b/code/modules/antagonists/bloodsuckers/powers/fortitude.dm index eab22a055d49..6c4c7522347c 100644 --- a/code/modules/antagonists/bloodsuckers/powers/fortitude.dm +++ b/code/modules/antagonists/bloodsuckers/powers/fortitude.dm @@ -40,12 +40,11 @@ if(was_running) bloodsucker_user.toggle_move_intent() -/datum/action/bloodsucker/fortitude/process(delta_time) +/datum/action/bloodsucker/fortitude/UsePower(mob/living/carbon/user) // Checks that we can keep using this. . = ..() if(!.) return - var/mob/living/carbon/user = owner /// Prevents running while on Fortitude if(user.m_intent != MOVE_INTENT_WALK) user.toggle_move_intent() diff --git a/code/modules/antagonists/bloodsuckers/powers/gohome.dm b/code/modules/antagonists/bloodsuckers/powers/gohome.dm index d776a6b4382c..e82d4475b61b 100644 --- a/code/modules/antagonists/bloodsuckers/powers/gohome.dm +++ b/code/modules/antagonists/bloodsuckers/powers/gohome.dm @@ -42,7 +42,7 @@ . = ..() to_chat(owner, span_notice("You focus on separating your consciousness from your physical form...")) -/datum/action/bloodsucker/gohome/process(delta_time) +/datum/action/bloodsucker/gohome/UsePower(mob/living/user) . = ..() if(!.) return FALSE @@ -57,7 +57,7 @@ if(GOHOME_FLICKER_TWO) INVOKE_ASYNC(src, .proc/flicker_lights, 4, 60) if(GOHOME_TELEPORT) - INVOKE_ASYNC(src, .proc/teleport_to_coffin, owner) + INVOKE_ASYNC(src, .proc/teleport_to_coffin, user) teleporting_stage++ /datum/action/bloodsucker/gohome/ContinueActive(mob/living/user, mob/living/target) diff --git a/code/modules/antagonists/bloodsuckers/powers/recuperate.dm b/code/modules/antagonists/bloodsuckers/powers/recuperate.dm index 2721b77abf98..51a7a0bc0d4b 100644 --- a/code/modules/antagonists/bloodsuckers/powers/recuperate.dm +++ b/code/modules/antagonists/bloodsuckers/powers/recuperate.dm @@ -27,12 +27,11 @@ . = ..() to_chat(owner, span_notice("Your muscles clench as your master's immortal blood mixes with your own, knitting your wounds.")) -/datum/action/bloodsucker/recuperate/process(delta_time) +/datum/action/bloodsucker/recuperate/UsePower(mob/living/carbon/user) . = ..() if(!.) return - var/mob/living/carbon/user = owner var/datum/antagonist/vassal/vassaldatum = IS_VASSAL(user) vassaldatum.master.AddBloodVolume(-1) user.Jitter(5) diff --git a/code/modules/antagonists/bloodsuckers/powers/targeted/_powers_targeted.dm b/code/modules/antagonists/bloodsuckers/powers/targeted/_powers_targeted.dm index 1d2224929f89..6057734f8e33 100644 --- a/code/modules/antagonists/bloodsuckers/powers/targeted/_powers_targeted.dm +++ b/code/modules/antagonists/bloodsuckers/powers/targeted/_powers_targeted.dm @@ -38,7 +38,7 @@ /datum/action/bloodsucker/targeted/DeactivatePower() if(power_flags & BP_AM_TOGGLE) - STOP_PROCESSING(SSprocessing, src) + UnregisterSignal(owner, COMSIG_LIVING_BIOLOGICAL_LIFE) active = FALSE DeactivateRangedAbility() UpdateButtonIcon() From 0f175b1607d1d15656615c1c8664a8c8e1a46528 Mon Sep 17 00:00:00 2001 From: Jamie D <993128+JamieD1@users.noreply.github.com> Date: Mon, 9 May 2022 15:04:34 +0100 Subject: [PATCH 20/20] Apply suggestions from code review --- config/game_options.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/game_options.txt b/config/game_options.txt index bd125971d09a..10d857d15c1a 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -107,13 +107,13 @@ ALERT_DELTA Destruction of the station is imminent. All crew are instructed to o PROBABILITY DARKSPAWN 6 PROBABILITY HERESY 4 PROBABILITY INFILTRATION 4 -PROBABILITY BLOODSUCKER 5 +PROBABILITY BLOODSUCKER 4 # Lowpop PROBABILITY TRAITOR 5 PROBABILITY TRAITORBRO 5 PROBABILITY TRAITORCHAN 6 -PROBABILITY TRAITORSUCKER 4 +PROBABILITY TRAITORSUCKER 3 PROBABILITY TRAITORVAMP 4 PROBABILITY INTERNAL_AFFAIRS 3 PROBABILITY CHANGELING 4