From 5f655dbbdb8c59f740032fb8dfb7ba2530d351fb Mon Sep 17 00:00:00 2001 From: Ryan784 Date: Wed, 20 Jan 2016 22:14:21 -0500 Subject: [PATCH] Vampire Gamemode Developement Test The Vampire gamemode, as ported right now. The gamemode is in, as well as creating a vampire through the traitor panel. All abilities seem to function, unable to test enthrall however (though I have a feeling it will have to be redone). Enthralling someone without a CKey will give you the correct response, however. Any abilities having to do with lums will need to be redone. Vamphud as well. If looking over this and pointing out errors/fixing is faster than simply porting it yourself, then feel free to do so! --- baystation12.dme | 3 + code/datums/mind.dm | 10 +- code/game/antagonist/station/vampire.dm | 24 + code/game/gamemodes/events.dm | 4 +- code/game/gamemodes/vampire/vampire.dm | 10 + code/game/gamemodes/vampire/vampire_powers.dm | 838 ++++++++++++++++++ code/game/objects/items/weapons/weaponry.dm | 5 + code/modules/admin/DB ban/functions.dm | 2 +- code/modules/client/preferences.dm | 3 +- code/modules/mob/living/carbon/human/human.dm | 2 + .../living/carbon/human/human_attackhand.dm | 25 + code/modules/mob/living/carbon/human/life.dm | 20 +- .../Chemistry-Reagents-Other.dm | 9 + .../reagents/reagent_containers/blood_pack.dm | 31 +- code/modules/spells/targeted/mind_transfer.dm | 2 +- code/modules/virus2/effect.dm | 2 + code/setup.dm | 20 +- icons/mob/mob.dmi | Bin 198582 -> 198688 bytes sound/effects/creepyshriek.ogg | Bin 0 -> 45042 bytes 19 files changed, 999 insertions(+), 11 deletions(-) create mode 100644 code/game/antagonist/station/vampire.dm create mode 100644 code/game/gamemodes/vampire/vampire.dm create mode 100644 code/game/gamemodes/vampire/vampire_powers.dm create mode 100644 sound/effects/creepyshriek.ogg diff --git a/baystation12.dme b/baystation12.dme index af6e369282f..44ca50e4e65 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -240,6 +240,7 @@ #include "code\game\antagonist\station\revolutionary.dm" #include "code\game\antagonist\station\rogue_ai.dm" #include "code\game\antagonist\station\traitor.dm" +#include "code\game\antagonist\station\vampire.dm" #include "code\game\area\ai_monitored.dm" #include "code\game\area\areas.dm" #include "code\game\area\asteroid_areas.dm" @@ -309,6 +310,8 @@ #include "code\game\gamemodes\nuclear\pinpointer.dm" #include "code\game\gamemodes\revolution\revolution.dm" #include "code\game\gamemodes\traitor\traitor.dm" +#include "code\game\gamemodes\vampire\vampire.dm" +#include "code\game\gamemodes\vampire\vampire_powers.dm" #include "code\game\gamemodes\wizard\wizard.dm" #include "code\game\jobs\access.dm" #include "code\game\jobs\job_controller.dm" diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 99c467825c4..c1badaaca85 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -53,6 +53,8 @@ var/datum/faction/faction //associated faction var/datum/changeling/changeling //changeling holder + var/datum/vampire/vampire //vampire holder + var/rev_cooldown = 0 // the world.time since the mob has been brigged, or -1 if not at all @@ -72,6 +74,8 @@ if(changeling) current.remove_changeling_powers() current.verbs -= /datum/changeling/proc/EvolutionMenu + if(vampire) + current.remove_vampire_powers() current.mind = null nanomanager.user_transferred(current, new_character) // transfer active NanoUI instances to new user @@ -83,7 +87,8 @@ if(changeling) new_character.make_changeling() - + if(vampire) + new_character.make_vampire() if(active) new_character.key = key //now transfer the key to link the client to our new body @@ -143,7 +148,7 @@ if(href_list["add_antagonist"]) var/datum/antagonist/antag = all_antag_types[href_list["add_antagonist"]] - if(antag) + if(antag) if(antag.add_antagonist(src, 1, 1, 0, 1, 1)) // Ignore equipment and role type for this. log_admin("[key_name_admin(usr)] made [key_name(src)] into a [antag.role_text].") else @@ -439,6 +444,7 @@ assigned_job = null //faction = null //Uncommenting this causes a compile error due to 'undefined type', fucked if I know. changeling = null + vampire = null initial_account = null objectives = list() special_verbs = list() diff --git a/code/game/antagonist/station/vampire.dm b/code/game/antagonist/station/vampire.dm new file mode 100644 index 00000000000..69c130e5b9c --- /dev/null +++ b/code/game/antagonist/station/vampire.dm @@ -0,0 +1,24 @@ +var/datum/antagonist/vampire/vamp + +/proc/isvampire(var/mob/player) + if(!vamp || !player.mind) + return 0 + if(player.mind in vamp.current_antagonists) + return 1 + +/datum/antagonist/vampire + id = MODE_VAMPIRE + role_type = BE_VAMPIRE + role_text = "Vampire" + role_text_plural = "Vampires" + bantype = "vampires" + feedback_tag = "vampire_objective" + restricted_jobs = list("AI", "Cyborg") + protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain") + welcome_text = "You are a Vampire! Use harm intent and aim for the head to drink blood! Stay away from the Chaplain, and use the darkness to your advantage." + flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE + antaghud_indicator = "hudchangeling" //NEEDS TO BE CHANGED + +/datum/antagonist/vampire/update_antag_mob(var/datum/mind/player) + ..() + player.current.make_vampire() diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index d49247263f9..a5ad03b6228 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -336,7 +336,7 @@ Would like to add a law like "Law x is _______" where x = a number, and _____ is //var/dowhat = pick("STOP THIS", "SUPPORT THIS", "CONSTANTLY INFORM THE CREW OF THIS", "IGNORE THIS", "FEAR THIS") var/aimust = pick("LIE", "RHYME", "RESPOND TO EVERY QUESTION WITH A QUESTION", "BE POLITE", "CLOWN", "BE HAPPY", "SPEAK IN SEXUAL INNUENDOS", "TALK LIKE A PIRATE", "QUESTION AUTHORITY", "SHOUT", "BE DISTRACTED", "HEY LISTEN", "MUMBLE", "SPEAK IN HAIKU") var/define = pick("ABSENCE OF CYBORG HUGS", "LACK OF BEATINGS", "UNBOLTED AIRLOCKS", "BOLTED AIRLOCKS", "IMPROPERLY WORDED SENTENCES", "POOR SENTENCE STRUCTURE", "BRIG TIME", "NOT REPLACING EVERY SECOND WORD WITH HONK", "HONKING", "PRESENCE OF LIGHTS", "LACK OF BEER", "WEARING CLOTHING", "NOT SAYING HELLO WHEN YOU SPEAK", "ANSWERING REQUESTS NOT EXPRESSED IN IAMBIC PENTAMETER", "A SMALL ISLAND OFF THE COAST OF PORTUGAL", "ANSWERING REQUESTS THAT WERE MADE WHILE CLOTHED") - var/target = pick("a traitor", "a syndicate agent", "a changeling", "a wizard", "the head of a revolution", "Soviet spy", "a good person", "a dwarf", "an elf", "a fairy princess", "the captain", "Beepsky", "God", "a pirate", "a gryphon", "a chryssalid") + var/target = pick("a traitor", "a syndicate agent", "a changeling", "a vampire", "a wizard", "the head of a revolution", "Soviet spy", "a good person", "a dwarf", "an elf", "a fairy princess", "the captain", "Beepsky", "God", "a pirate", "a gryphon", "a chryssalid") var/require = pick("ADDITIONAL PYLONS", "MORE VESPENE GAS", "MORE MINERALS", "THE ULTIMATE CUP OF COFFEE", "HIGH YIELD EXPLOSIVES", "THE CLOWN", "THE VACUUM OF SPACE", "IMMORTALITY", "SAINTHOOD", "ART", "VEGETABLES", "FAT PEOPLE", "MORE LAWS", "MORE DAKKA", "HERESY", "CORPSES", "TRAITORS", "MONKEYS", "AN ARCADE", "PLENTY OF GOLD", "FIVE TEENAGERS WITH ATTITUDE") var/allergy = pick("cotton", "uniforms", "acid", "oxygen", "human contact", "cyborg contact", "medicine", "floors") var/allergysev = pick("deathly", "mildly", "severely", "contagiously") @@ -468,4 +468,4 @@ Would like to add a law like "Law x is _______" where x = a number, and _____ is world << "Ion Storm Main Done" - */ \ No newline at end of file + */ diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm new file mode 100644 index 00000000000..515799d8837 --- /dev/null +++ b/code/game/gamemodes/vampire/vampire.dm @@ -0,0 +1,10 @@ +/datum/game_mode/vampire + name = "Vampire" + round_description = "There are Vampires from Space Transylvania on the station, keep your blood close and neck safe!" + extended_round_description = "Life always finds a way. However, life can sometimes take a more disturbing route. Humanity's extensive knowledge of xeno-biological specimens has made them confident and arrogant. Yet something slipped past their eyes. Something dangerous. Something alive. Most frightening of all, however, is that this something is someone. An unknown alien specimen has incorporated itself into the crew of the NSS Exodus. No one knows where it came from. No one knows who it is or what it wants. One thing is for certain though... there is never just one of them. Good luck." + config_tag = "vampire" + required_players = 1 + required_enemies = 1 + end_on_antag_death = 1 + antag_scaling_coeff = 8 + antag_tags = list(MODE_VAMPIRE) diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm new file mode 100644 index 00000000000..0d7f4c8c5e9 --- /dev/null +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -0,0 +1,838 @@ + + +/datum/vampire + var/list/datum/mind/vampires = list() + var/list/datum/mind/enthralled = list() //those controlled by a vampire + var/list/thralls = list() //vammpires controlling somebody + var/bloodtotal = 0 // CHANGE TO ZERO WHEN PLAYTESTING HAPPENS + var/bloodusable = 0 // CHANGE TO ZERO WHEN PLAYTESTING HAPPENS + var/mob/living/owner = null + var/gender = FEMALE + var/iscloaking = 0 // handles the vampire cloak toggle + var/list/powers = list() // list of available powers and passives, see defines in setup.dm + var/mob/living/carbon/human/draining // who the vampire is draining of blood + var/nullified = 0 //Nullrod makes them useless for a short while. + +/datum/vampire/New(gend = FEMALE) + ..() + gender = gend + + + + +/mob/proc/make_vampire() + if(!mind) return + if(!mind.vampire) + mind.vampire = new /datum/vampire(gender) + mind.vampire.owner = src + verbs += /client/vampire/proc/vampire_rejuvinate + verbs += /client/vampire/proc/vampire_hypnotise + verbs += /client/vampire/proc/vampire_glare + //testing purposes REMOVE BEFORE PUSH TO MASTER + /*for(var/handler in typesof(/client/proc)) + if(findtext("[handler]","vampire_")) + verbs += handler*/ + for(var/i = 1; i <= 3; i++) // CHANGE TO 3 RATHER THAN 12 AFTER TESTING IS DONE + if(!(i in mind.vampire.powers)) + mind.vampire.powers.Add(i) + + + for(var/n in mind.vampire.powers) + switch(n) + if(VAMP_SHAPE) + verbs += /client/vampire/proc/vampire_shapeshift + if(VAMP_VISION) + continue + if(VAMP_DISEASE) + verbs += /client/vampire/proc/vampire_disease + if(VAMP_CLOAK) + verbs += /client/vampire/proc/vampire_cloak + if(VAMP_BATS) + verbs += /client/vampire/proc/vampire_bats + if(VAMP_SCREAM) + verbs += /client/vampire/proc/vampire_screech + if(VAMP_JAUNT) + verbs += /client/vampire/proc/vampire_jaunt + if(VAMP_BLINK) + verbs += /client/vampire/proc/vampire_shadowstep + if(VAMP_SLAVE) + verbs += /client/vampire/proc/vampire_enthrall + if(VAMP_FULL) + continue + +/mob/proc/remove_vampire_powers() + for(var/handler in typesof(/client/vampire/proc)) + if(findtext("[handler]","vampire_")) + verbs -= handler + +/mob/proc/handle_bloodsucking(mob/living/carbon/human/H) + src.mind.vampire.draining = H + var/blood = 0 + var/bloodtotal = 0 //used to see if we increased our blood total + var/bloodusable = 0 //used to see if we increased our blood usable + + src.visible_message("\red [src.name] bites [H.name]'s neck!", "\red You bite [H.name]'s neck and begin to drain their blood.", "\blue You hear a soft puncture and a wet sucking noise") + if(!iscarbon(src)) + H.LAssailant = null + else + H.LAssailant = src + while(do_mob(src, H, 50)) + if(!mind.vampire) + src << "\red Your fangs have disappeared!" + return 0 + bloodtotal = src.mind.vampire.bloodtotal + bloodusable = src.mind.vampire.bloodusable + if(!H.vessel.get_reagent_amount("blood")) + src << "\red They've got no blood left to give." + break + if(H.stat < 2) //alive + blood = min(10, H.vessel.get_reagent_amount("blood"))// if they have less than 10 blood, give them the remnant else they get 10 blood + src.mind.vampire.bloodtotal += blood + src.mind.vampire.bloodusable += blood +// H.adjustCloneLoss(10) // beep boop 10 damage //probably not necessary actually honestly okay + else + blood = min(5, H.vessel.get_reagent_amount("blood"))// The dead only give 5 bloods + src.mind.vampire.bloodtotal += blood + if(bloodtotal != src.mind.vampire.bloodtotal) + src << "\blue You have accumulated [src.mind.vampire.bloodtotal] [src.mind.vampire.bloodtotal > 1 ? "units" : "unit"] of blood[src.mind.vampire.bloodusable != bloodusable ?", and have [src.mind.vampire.bloodusable] left to use" : "."]" + check_vampire_upgrade(mind) + H.vessel.remove_reagent("blood",25) + + src.mind.vampire.draining = null + src << "\blue You stop draining [H.name] of blood." + return 1 + +/mob/proc/check_vampire_upgrade(datum/mind/v) + if(!v) return + if(!v.vampire) return + var/datum/vampire/vamp = v.vampire + var/list/old_powers = vamp.powers.Copy() + + // This used to be a switch statement. + // Don't use switch statements for shit like this, since blood can be any random-ass value. + // if(100) requires the blood to be at EXACTLY 100 units to trigger. + // if(blud >= 100) activates when blood is at or over 100 units. + // TODO: Make this modular. + + // TIER 1 + if(vamp.bloodtotal >= 100) + if(!(VAMP_VISION in vamp.powers)) + vamp.powers.Add(VAMP_VISION) + if(!(VAMP_SHAPE in vamp.powers)) + vamp.powers.Add(VAMP_SHAPE) + + // TIER 2 + if(vamp.bloodtotal >= 150) + if(!(VAMP_CLOAK in vamp.powers)) + vamp.powers.Add(VAMP_CLOAK) + + + // TIER 3 + if(vamp.bloodtotal >= 200) + if(!(VAMP_BATS in vamp.powers)) + vamp.powers.Add(VAMP_BATS) + if(!(VAMP_SCREAM in vamp.powers)) + vamp.powers.Add(VAMP_SCREAM) + src << "\blue Your rejuvination abilities have improved and will now heal you over time when used." + if(!(VAMP_DISEASE in vamp.powers)) + vamp.powers.Add(VAMP_DISEASE) + + // TIER 3.5 (/vg/) + if(vamp.bloodtotal >= 250) + if(!(VAMP_BLINK in vamp.powers)) + vamp.powers.Add(VAMP_BLINK) + + // TIER 4 + if(vamp.bloodtotal >= 300) + if(!(VAMP_JAUNT in vamp.powers)) + vamp.powers.Add(VAMP_JAUNT) + if(!(VAMP_SLAVE in vamp.powers)) + vamp.powers.Add(VAMP_SLAVE) + + // TIER 5 + if(vamp.bloodtotal >= 500) + if(!(VAMP_FULL in vamp.powers)) + vamp.powers.Add(VAMP_FULL) + + announce_new_power(old_powers, vamp.powers) + +/mob/proc/announce_new_power(list/old_powers, list/new_powers) + for(var/n in new_powers) + if(!(n in old_powers)) + switch(n) + if(VAMP_SHAPE) + src << "\blue You have gained the shapeshifting ability, at the cost of stored blood you can change your form permanently." + verbs += /client/vampire/proc/vampire_shapeshift + if(VAMP_VISION) + src << "\blue Your vampiric vision has improved." + //no verb + if(VAMP_DISEASE) + src << "\blue You have gained the Diseased Touch ability which causes those you touch to die shortly after unless treated medically." + verbs += /client/vampire/proc/vampire_disease + if(VAMP_CLOAK) + src << "\blue You have gained the Cloak of Darkness ability which when toggled makes you near invisible in the shroud of darkness." + verbs += /client/vampire/proc/vampire_cloak + if(VAMP_BATS) + src << "\blue You have gained the Summon Bats ability." + verbs += /client/vampire/proc/vampire_bats // work in progress + if(VAMP_SCREAM) + src << "\blue You have gained the Chiropteran Screech ability which stuns anything with ears in a large radius and shatters glass in the process." + verbs += /client/vampire/proc/vampire_screech + if(VAMP_JAUNT) + src << "\blue You have gained the Mist Form ability which allows you to take on the form of mist for a short period and pass over any obstacle in your path." + verbs += /client/vampire/proc/vampire_jaunt + if(VAMP_SLAVE) + src << "\blue You have gained the Enthrall ability which at a heavy blood cost allows you to enslave a human that is not loyal to any other for a random period of time." + verbs += /client/vampire/proc/vampire_enthrall + if(VAMP_BLINK) + src << "\blue You have gained the ability to shadowstep, which makes you disappear into nearby shadows at the cost of blood." + verbs += /client/vampire/proc/vampire_shadowstep + if(VAMP_FULL) + src << "\blue You have reached your full potential and are no longer weak to the effects of anything holy and your vision has been improved greatly." + //no verb + + //This should hold all the vampire related powers + + +/mob/proc/vampire_power(required_blood=0, max_stat=0) + + if(!src.mind) return 0 + if(!ishuman(src)) + src << "You are in too weak of a form to do this!" + return 0 + + var/datum/vampire/vampire = src.mind.vampire + + if(!vampire) + //msg_scopes("[src] has vampire verbs but isn't a vampire.") + world.log << "[src] has vampire verbs but isn't a vampire." + return 0 + + var/fullpower = (VAMP_FULL in vampire.powers) + + if(src.stat > max_stat) + src << "You are incapacitated." + return 0 + + if(vampire.nullified) + if(!fullpower) + src << "Something is blocking your powers!" + return 0 + if(vampire.bloodusable < required_blood) + src << "You require at least [required_blood] units of usable blood to do that!" + return 0 + //chapel check + if(istype(loc.loc, /area/chapel)) + if(!fullpower) + src << "Your powers are useless on this holy ground." + return 0 + return 1 + +/mob/proc/vampire_affected(datum/mind/M) + //Other vampires aren't affected + if(mind && mind.vampire) return 0 + //Chaplains are resistant to vampire powers + if(mind && mind.assigned_role == "Chaplain") + return 0 + if(get_species() == "Machine") + return 0 + //Vampires who have reached their full potential can affect nearly everything + if(M && M.vampire && (VAMP_FULL in M.vampire.powers)) + return 1 // This doesn't really need to be here because of well the line below it. + return 1 + +/mob/proc/vampire_can_reach(mob/M as mob, active_range = 1) + if(M.loc == src.loc) return 1 //target and source are in the same thing + if(!isturf(src.loc) || !isturf(M.loc)) return 0 //One is inside, the other is outside something. + if(Adjacent(M))//if(AStar(src.loc, M.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance, active_range)) //If a path exists, good! + return 1 + return 0 + +/mob/proc/vampire_active(required_blood=0, max_stat=0, active_range=1) + var/pass = vampire_power(required_blood, max_stat) + if(!pass) return + var/datum/vampire/vampire = mind.vampire + if(!vampire) return + var/list/victims = list() + for(var/mob/living/carbon/C in view(active_range)) + if(C==src) continue + victims += C + var/mob/living/carbon/T = input(src, "Victim?") as null|anything in victims + + if(!T) return + if(!(T in view(active_range))) return + if(!vampire_can_reach(T, active_range)) return + if(!vampire_power(required_blood, max_stat)) return + return T + +/client/vampire/proc/vampire_rejuvinate() + set category = "Abilities" + set name = "Rejuvinate " + set desc= "Flush your system with spare blood to remove any incapacitating effects" + var/datum/mind/M = usr.mind + if(!M) return + if(M.current.vampire_power(0, 1)) + M.current.weakened = 0 + M.current.stunned = 0 + M.current.paralysis = 0 + //M.vampire.bloodusable -= 10 + M.current << "\blue You flush your system with clean blood and remove any incapacitating effects." + spawn(1) + if(M.vampire.bloodtotal >= 200) + for(var/i = 0; i < 5; i++) + M.current.adjustBruteLoss(-2) + M.current.adjustOxyLoss(-5) + M.current.adjustToxLoss(-2) + M.current.adjustFireLoss(-2) + sleep(35) + M.current.verbs -= /client/vampire/proc/vampire_rejuvinate + spawn(200) + M.current.verbs += /client/vampire/proc/vampire_rejuvinate + +/client/vampire/proc/vampire_hypnotise() + set category = "Abilities" + set name = "Hypnotise" // (20) + set desc= "A piercing stare that incapacitates your victim for a good length of time." + var/datum/mind/M = usr.mind + if(!M) return + + var/mob/living/carbon/C = M.current.vampire_active(0, 0, 1) //(20, 0, 1) + + if(!C) return + if(C==usr) + M.current << "\red You can't do that to yourself" + return + + if(!M.current.has_eyes()) + M.current << "\red You don't have eyes" + return + + var/vampgender + if(M.current.gender == "male") + vampgender = "he" + else + vampgender = "she" + + M.current.visible_message("[M]'s eyes flash briefly as [vampgender] stares into [C.name]'s eyes") +// M.current.remove_vampire_blood(20) Moved to remove if it works only. + if(M.current.vampire_power(0, 0)) //if(M.current.vampire_power(20, 0)) + M.current.verbs -= /client/vampire/proc/vampire_hypnotise + spawn(1200) + M.current.verbs += /client/vampire/proc/vampire_hypnotise + if(do_mob(M.current, C, 50)) + if(C.mind && C.mind.vampire) + M.current << "\red Your piercing gaze fails to knock out [C.name]." + C << "\blue [M.current]'s feeble gaze is ineffective." + return + else + M.current << "\red Your piercing gaze knocks out [C.name]." + C << "\red You find yourself unable to move and barely able to speak" + C.Weaken(20) + C.Stun(20) + C.stuttering = 20 +// M.current.remove_vampire_blood(20) + else + M.current << "\red You broke your gaze." + return + +/client/vampire/proc/vampire_disease() + set category = "Abilities" + set name = "Diseased Touch (200)" + set desc = "Touches your victim with infected blood giving them the Shutdown Syndrome which quickly shutsdown their major organs resulting in a quick painful death." + var/datum/mind/M = usr.mind + if(!M) return + + var/mob/living/carbon/C = M.current.vampire_active(200, 0, 1) + if(!C) return + if(C==usr) + M.current << "\red You can't do that to yourself" + return + if(C.get_species() == "Machine") + M.current << "\red You can't to that to a machine" + return + if(!M.current.vampire_can_reach(C, 1)) + M.current << "\red You cannot touch [C.name] from where you are standing!" + return + M.current << "\red You stealthily infect [C.name] with your diseased touch." + /*var/t_him = "it" + if (src.gender == MALE) + t_him = "him" + else if (src.gender == FEMALE) + t_him = "her" + M.current.visible_message("\blue [M] shakes [src] trying to wake [t_him] up!" ) + playsound(get_turf(src), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)*/ + C.help_shake_act(M.current) // i use da colon + if(!C.vampire_affected(M)) + M.current << "\red They seem to be unaffected." + return + var/datum/disease2/disease/shutdown = new /datum/disease2/disease + var/datum/disease2/effectholder/holder = new /datum/disease2/effectholder + var/datum/disease2/effect/organs/vampire/O = new /datum/disease2/effect/organs/vampire + holder.effect += O + holder.chance = 10 + shutdown.infectionchance = 100 + shutdown.antigen |= text2num(pick(ALL_ANTIGENS)) + shutdown.antigen |= text2num(pick(ALL_ANTIGENS)) + shutdown.spreadtype = "None" + shutdown.uniqueID = rand(0,10000) + shutdown.effects += holder + shutdown.speed = 1 + shutdown.stage = 2 + shutdown.clicks = 185 + msg_admin_attack("[key_name_admin(usr)] gave [key_name_admin(C)] the shutdown disease - JMP") + usr.attack_log += text("\[[time_stamp()]\] Gave [C.name] ([C.ckey]) the shutdown disease") + C.attack_log += text("\[[time_stamp()]\] Has been given the shutdown disease by [usr.name] ([usr.ckey])") + infect_virus2(C,shutdown,0) + M.current.remove_vampire_blood(200) + M.current.verbs -= /client/vampire/proc/vampire_disease + spawn(1800) M.current.verbs += /client/vampire/proc/vampire_disease + +/client/vampire/proc/vampire_glare() + set category = "Abilities" + set name = "Glare" + set desc= "A scary glare that incapacitates people for a short while around you." + var/datum/mind/M = usr.mind + if(!M) return + + if(!M.current.has_eyes()) + M.current << "\red You don't have eyes" + return + + if(M.current.vampire_power(0, 1)) + M.current.visible_message("\red [M.current]'s eyes emit a blinding flash!") + //M.vampire.bloodusable -= 10 + M.current.verbs -= /client/vampire/proc/vampire_glare + spawn(800) + M.current.verbs += /client/vampire/proc/vampire_glare + if(istype(M.current:glasses, /obj/item/clothing/glasses/sunglasses/blindfold)) + M.current << "You're blindfolded!" + return + for(var/mob/living/carbon/C in view(1)) + if(C == M.current) continue //Don't stunn yourself + if(!C.vampire_affected(M) && !C.get_species() == "Machine") //Or machines + continue + if(!M.current.vampire_can_reach(C, 1)) continue +// C.Stun(8) + C.Weaken(8) + C.stuttering = 20 + C << "\red You are blinded by [M.current]'s glare" + +/client/vampire/proc/vampire_shapeshift() //Hi. I'm stupid and there are missing procs all around. Namely the randomname proc. I can't find it and can't code a new one because I am bad. Sorry! + set category = "Abilities" + set name = "Shapeshift (50)" + set desc = "This does nothing. It's broken. Sorry!"//orig text: Changes your name and appearance at the cost of 50 blood and has a cooldown of 3 minutes. +/* var/datum/mind/M = usr.mind + if(!M) return + if(M.current.vampire_power(50, 0)) + M.current.visible_message("[M.current.name] transforms!") + M.current.client.prefs.real_name = M.current.generate_name() //random_name(M.current.gender) + M.current.client.prefs.randomize_appearance_for(M.current) + M.current.regenerate_icons() + M.current.remove_vampire_blood(50) + M.current.verbs -= /client/vampire/proc/vampire_shapeshift + spawn(1800) M.current.verbs += /client/vampire/proc/vampire_shapeshift +*/ +/client/vampire/proc/vampire_screech() + set category = "Abilities" + set name = "Chiropteran Screech (90)" + set desc = "An extremely loud shriek that stuns nearby humans in a four-tile radius, as well as shattering the windows." + var/datum/mind/M = usr.mind + if(!M) return + if(M.current.vampire_power(90, 0)) + M.current.visible_message("\red [M.current.name] lets out an ear piercing shriek!", "\red You let out a loud shriek.", "\red You hear a loud painful shriek!") + for(var/mob/living/carbon/C in hearers(4, M.current)) + if(C == M.current) continue + if(ishuman(C) && (C:l_ear || C:r_ear) && istype((C:l_ear || C:r_ear), /obj/item/clothing/ears/earmuffs)) continue + if(!C.vampire_affected(M)) + if(!C.get_species() == "Machine") + continue + C << "You hear a ear piercing shriek and your senses dull!" + C.Weaken(5) + C.ear_deaf = 20 + C.stuttering = 20 + C.Stun(5) +// C.Jitter(150) + for(var/obj/structure/window/W in view(7)) + W.shatter() + playsound(M.current.loc, 'sound/effects/creepyshriek.ogg', 100, 1) + M.current.remove_vampire_blood(90) + M.current.verbs -= /client/vampire/proc/vampire_screech + spawn(3600) M.current.verbs += /client/vampire/proc/vampire_screech + +/client/vampire/proc/vampire_enthrall() + set category = "Abilities" + set name = "Enthrall (150)" + set desc = "You use a large portion of your power to sway those loyal to none to be loyal to you only." + var/datum/mind/M = usr.mind + if(!M) return + var/mob/living/carbon/C = M.current.vampire_active(150, 0, 1) + if(!C) return + if(C==usr) + M.current << "\red You can't do that to yourself" + return + if(C.get_species() == "Machine") + M.current << "\red You can only enthrall humans" + return + M.current.visible_message("\red [M.current.name] bites [C.name]'s neck!", "\red You bite [C.name]'s neck and begin the flow of power.") + C << "You feel the tendrils of evil invade your mind." + if(!ishuman(C)) + M.current << "\red You can only enthrall humans" + return + + if(do_mob(M.current, C, 50)) + if(M.current.can_enthrall(C)) // recheck + if(M.current.vampire_power(150, 0)) + M.current.handle_enthrall(C) + M.current.remove_vampire_blood(150) + M.current.verbs -= /client/vampire/proc/vampire_enthrall + spawn(1800) M.current.verbs += /client/vampire/proc/vampire_enthrall + return + else + M.current << "\red You or your target either moved or you dont have enough usable blood." + return + +/client/vampire/proc/vampire_cloak() + set category = "Abilities" + set name = "Cloak of Darkness (toggle)" + set desc = "Toggles whether you are currently cloaking yourself in darkness." + var/datum/mind/M = usr.mind + if(!M) return + if(M.current.vampire_power(0, 0)) + M.vampire.iscloaking = !M.vampire.iscloaking + M.current << "\blue You will now be [M.vampire.iscloaking ? "hidden" : "seen"] in darkness." + +/mob/proc/handle_vampire_cloak() + if(!mind || !mind.vampire || !ishuman(src)) + alpha = 255 + return + var/turf/simulated/T = get_turf(src) + + if(!istype(T)) + return 0 + + if(!mind.vampire.iscloaking) + alpha = 255 + return 0 +// if(T.lighting_lumcount <= 2) +// alpha = round((255 * 0.15)) +// return 1 + else + alpha = round((255 * 0.80)) + +/mob/proc/can_enthrall(mob/living/carbon/C) + var/enthrall_safe = 0 + var/datum/vampire/vampire = src.mind.vampire + for(var/obj/item/weapon/implant/loyalty/L in C) + if(L && L.implanted) + enthrall_safe = 1 + break +// for(var/obj/item/weapon/implant/traitor/T in C) +// if(T && T.implanted) +// enthrall_safe = 1 +// break + if(!C) + world.log << "something bad happened on enthralling a mob src is [src] [src.key] \ref[src]" + return 0 + if(!C.mind) + src << "\red [C.name]'s mind is not there for you to enthrall." + return 0 + if(enthrall_safe || ( C.mind in vampire.vampires )||( C.mind.vampire )||( C.mind in vampire.enthralled )) + C.visible_message("\red [C] seems to resist the takeover!", "\blue You feel a familiar sensation in your skull that quickly dissipates.") + return 0 + if(!C.vampire_affected(mind)) + C.visible_message("\red [C] seems to resist the takeover!", "\blue Your faith of [ticker.Bible_deity_name] has kept your mind clear of all evil") + return 0 + if(!ishuman(C)) + src << "\red You can only enthrall humans!" + return 0 + return 1 + +/mob/proc/handle_enthrall(mob/living/carbon/human/H as mob) + if(!istype(H)) + //msg_scopes("handle_enthrall fucked up with no H < [src]") + src << "\red SOMETHING WENT WRONG, YELL AT POMF OR NEXIS" + return 0 + var/ref = "\ref[src.mind]" + if(!(src.mind.vampire.thralls)) + src.mind.vampire.thralls[ref] = list(H.mind) + else + src.mind.vampire.thralls[ref] += H.mind + //msg_scopes("[H.name] Changed in handle_enthrall") //purely here to see live changes incase of unexpected things + src.mind.vampire.enthralled.Add(H.mind) + src.mind.vampire.enthralled[H.mind] = src.mind + H.mind.special_role = "VampThrall" + H << "\red You have been Enthralled by [name]. Follow their every command." + src << "\red You have successfully Enthralled [H.name]. If they refuse to do as you say just adminhelp." + var/client/vampire/c = src + c.update_vampire_icons_added(H.mind) + c.update_vampire_icons_added(src.mind) + msg_admin_attack("[key_name_admin(src)] has mind-slaved [key_name_admin(H)] - JMP.") + +/client/vampire/proc/vampire_bats() + set category = "Abilities" + set name = "Summon Bats (60)" + set desc = "You summon a pair of space bats who attack nearby targets until they or their target is dead." + var/datum/mind/M = usr.mind + if(!M) return + if(M.current.vampire_power(60, 0)) + var/list/turf/locs = new + var/number = 0 + for(var/direction in alldirs) //looking for bat spawns + if(locs.len == 2) //we found 2 locations and thats all we need + break + var/turf/T = get_step(M.current,direction) //getting a loc in that direction + if(AStar(M.current.loc, T, /turf/proc/AdjacentTurfs, /turf/proc/Distance, 1)) // if a path exists, so no dense objects in the way its valid salid + locs += T + if(locs.len) + for(var/turf/tospawn in locs) + number++ + new /mob/living/simple_animal/hostile/scarybat(tospawn, M.current) + if(number != 2) //if we only found one location, spawn one on top of our tile so we dont get stacked bats + new /mob/living/simple_animal/hostile/scarybat(M.current.loc, M.current) + else // we had no good locations so make two on top of us + new /mob/living/simple_animal/hostile/scarybat(M.current.loc, M.current) + new /mob/living/simple_animal/hostile/scarybat(M.current.loc, M.current) + M.current.remove_vampire_blood(60) + M.current.verbs -= /client/vampire/proc/vampire_bats + spawn(1200) M.current.verbs += /client/vampire/proc/vampire_bats + +/client/vampire/proc/vampire_jaunt() + //AHOY COPY PASTE INCOMING + set category = "Abilities" + set name = "Mist Form (30)" + set desc = "You take on the form of mist for a short period of time." + var/jaunt_duration = 50 //in deciseconds + var/datum/mind/M = usr.mind + if(!M) return + + if(M.current.vampire_power(30, 0)) + if(M.current.buckled) M.current.buckled.unbuckle_mob() + spawn(0) + var/originalloc = get_turf(M.current.loc) + var/obj/effect/dummy/spell_jaunt/holder = new /obj/effect/dummy/spell_jaunt( originalloc ) + var/atom/movable/overlay/animation = new /atom/movable/overlay( originalloc ) + animation.name = "water" + animation.density = 0 + animation.anchored = 1 + animation.icon = 'icons/mob/mob.dmi' + animation.icon_state = "liquify" + animation.layer = 5 + animation.master = holder + M.current.ExtinguishMob() + M.current.weakened = 0 + M.current.stunned = 0 + if(M.current.buckled) + M.current.buckled.unbuckle_mob() + flick("liquify",animation) + M.current.loc = holder + M.current.client.eye = holder + var/datum/effect/effect/system/steam_spread/steam = new /datum/effect/effect/system/steam_spread() + steam.set_up(10, 0, originalloc) + steam.start() + sleep(jaunt_duration) + var/mobloc = get_turf(M.current.loc) +/* if(get_area(mobloc) == /area/security/armoury/gamma) + M << "A strange energy repels you!" + mobloc = originalloc*/ + animation.loc = mobloc + steam.location = mobloc + steam.start() + M.current.canmove = 0 + sleep(20) + flick("reappear",animation) + sleep(5) + if(!M.current.Move(mobloc)) + for(var/direction in list(1,2,4,8,5,6,9,10)) + var/turf/T = get_step(mobloc, direction) + if(T) + if(M.current.Move(T)) + break + M.current.canmove = 1 + M.current.client.eye = M.current + qdel(animation) + qdel(holder) + M.current.remove_vampire_blood(30) + M.current.verbs -= /client/vampire/proc/vampire_jaunt + spawn(600) M.current.verbs += /client/vampire/proc/vampire_jaunt + +// Blink for vamps +// Less smoke spam. +/client/vampire/proc/vampire_shadowstep() + set category = "Abilities" + set name = "Shadowstep (30)" + set desc = "Vanish into the shadows." + var/datum/mind/M = usr.mind + if(!M) return + + // Teleport radii + var/inner_tele_radius = 0 + var/outer_tele_radius = 6 + + // Maximum lighting_lumcount. +// var/max_lum = 1 + + if(M.current.vampire_power(30, 0)) + if(M.current.buckled) M.current.buckled.unbuckle_mob() + spawn(0) + var/list/turfs = new/list() + for(var/turf/T in range(usr,outer_tele_radius)) + if(T in range(usr,inner_tele_radius)) continue + if(istype(T,/turf/space)) continue + if(T.density) continue + if(T.x>world.maxx-outer_tele_radius || T.xworld.maxy-outer_tele_radius || T.y max_lum) continue + // turfs += T + //M.current.remove_vampire_blood(30) This isn't the right place for this either. + + if(!turfs.len) + usr << "\red You cannot find darkness to step to." + return + + var/turf/picked = pick(turfs) + + if(!picked || !isturf(picked)) + return + M.current.ExtinguishMob() + if(M.current.buckled) + M.current.buckled.unbuckle_mob() + var/atom/movable/overlay/animation = new /atom/movable/overlay( get_turf(usr) ) + animation.name = usr.name + animation.density = 0 + animation.anchored = 1 + animation.icon = usr.icon + animation.alpha = 127 + animation.layer = 5 + //animation.master = src + usr.loc = picked + M.current.remove_vampire_blood(30) + spawn(10) + del(animation) +// M.current.remove_vampire_blood(30) + M.current.verbs -= /client/vampire/proc/vampire_shadowstep + spawn(20) + M.current.verbs += /client/vampire/proc/vampire_shadowstep + +/mob/proc/remove_vampire_blood(amount = 0) + var/bloodold + if(!mind || !mind.vampire) + return + bloodold = mind.vampire.bloodusable + mind.vampire.bloodusable = max(0, (mind.vampire.bloodusable - amount)) + if(bloodold != mind.vampire.bloodusable) + src << "\blue You have [mind.vampire.bloodusable] left to use." + +//prepare for copypaste +/client/vampire/proc/update_vampire_icons_added(datum/mind/vampire_mind) + var/ref = "\ref[vampire_mind]" + if(ref in vampire_mind.vampire.thralls) + if(vampire_mind.current) + if(vampire_mind.current.client) + var/I = image('icons/mob/mob.dmi', loc = vampire_mind.current, icon_state = "vampire") + vampire_mind.current.client.images += I + for(var/headref in vampire_mind.vampire.thralls) + for(var/datum/mind/t_mind in vampire_mind.vampire.thralls[headref]) + var/datum/mind/head = locate(headref) + if(head) + if(head.current) + if(head.current.client) + var/I = image('icons/mob/mob.dmi', loc = t_mind.current, icon_state = "vampthrall") + head.current.client.images += I + if(t_mind.current) + if(t_mind.current.client) + var/I = image('icons/mob/mob.dmi', loc = head.current, icon_state = "vampire") + t_mind.current.client.images += I + if(t_mind.current) + if(t_mind.current.client) + var/I = image('icons/mob/mob.dmi', loc = t_mind.current, icon_state = "vampthrall") + t_mind.current.client.images += I + +/client/vampire/proc/update_vampire_icons_removed(datum/mind/vampire_mind) + for(var/headref in vampire_mind.vampire.thralls) + var/datum/mind/head = locate(headref) + for(var/datum/mind/t_mind in vampire_mind.vampire.thralls[headref]) + if(t_mind.current) + if(t_mind.current.client) + for(var/image/I in t_mind.current.client.images) + if((I.icon_state == "vampthrall" || I.icon_state == "vampire") && I.loc == vampire_mind.current) + //world.log << "deleting [vampire_mind] overlay" + del(I) + if(head) + //world.log << "found [head.name]" + if(head.current) + if(head.current.client) + for(var/image/I in head.current.client.images) + if((I.icon_state == "vampthrall" || I.icon_state == "vampire") && I.loc == vampire_mind.current) + //world.log << "deleting [vampire_mind] overlay" + del(I) + if(vampire_mind.current) + if(vampire_mind.current.client) + for(var/image/I in vampire_mind.current.client.images) + if(I.icon_state == "vampthrall" || I.icon_state == "vampire") + del(I) + +/client/vampire/proc/remove_vampire_mind(datum/mind/vampire_mind, datum/mind/head) + //var/list/removal + if(!istype(head)) + head = vampire_mind //workaround for removing a thrall's control over the enthralled + var/ref = "\ref[head]" + if(vampire_mind.vampire.thralls) + vampire_mind.vampire.thralls[ref] -= vampire_mind + vampire_mind.vampire.enthralled -= vampire_mind + //vampire.special_role = null + update_vampire_icons_removed(vampire_mind) + //world << "Removed [vampire_mind.current.name] from vampire shit" + vampire_mind.current << "\red The fog clouding your mind clears. You remember nothing from the moment you were enthralled until now." + +/mob/living/carbon/human/proc/check_sun() + + var/ax = x + var/ay = y + + for(var/i = 1 to 20) + ax += sun.dx + ay += sun.dy + + var/turf/T = locate( round(ax,0.5),round(ay,0.5),z) + + if(T.x == 1 || T.x==world.maxx || T.y==1 || T.y==world.maxy) + break + + if(T.density) + return + if(prob(35)) + switch(health) + if(80 to 100) + src << "\red Your skin flakes away..." + if(60 to 80) + src << "Your skin sizzles!" + // if((-INFINITY) to 60) + // if(!on_fire) + // src << "\red Your skin catches fire!" + // else + // src << "\red You continue to burn!" + // fire_stacks += 5 + // IgniteMob() + // emote("scream") + //else + // switch(health) + // if((-INFINITY) to 60) + // fire_stacks++ + // IgniteMob() + adjustFireLoss(30) //Original value was 3. Barely did anything. Vamps should vaporize in starlight. + +/mob/living/carbon/human/proc/handle_vampire() +/* if(hud_used) + if(!hud_used.vampire_blood_display) + hud_used.vampire_hud() + hud_used.human_hud('icons/mob/screen1_Vampire.dmi') + hud_used.vampire_blood_display.maptext_width = 64 + hud_used.vampire_blood_display.maptext_height = 26 + hud_used.vampire_blood_display.maptext = "
U:[mind.vampire.bloodusable]
T:[mind.vampire.bloodtotal]
" + */ + handle_vampire_cloak() + if(istype(loc, /turf/space)) + check_sun() + mind.vampire.nullified = max(0, mind.vampire.nullified - 1) diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 867c5155e08..730adfca1f8 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -53,6 +53,11 @@ user << "You wave [src] over [M]'s head and see their eyes become clear, their mind returning to normal." cult.remove_antagonist(M.mind) M.visible_message("\The [user] waves \the [src] over \the [M]'s head.") + else if(M.mind && M.mind.vampire) + if(!(VAMP_FULL in M.mind.vampire.powers)) + user << "\red The rod burns cold in your hand, filling you with grim determination. You feel the creature's power weaken." + M << "The nullrod's power interferes with your own! They are on to you!" + M.mind.vampire.nullified = max(8, M.mind.vampire.nullified + 8) else if(prob(10)) user << "The rod slips in your hand." ..() diff --git a/code/modules/admin/DB ban/functions.dm b/code/modules/admin/DB ban/functions.dm index 8e1ad3aa798..56bbbb8a008 100644 --- a/code/modules/admin/DB ban/functions.dm +++ b/code/modules/admin/DB ban/functions.dm @@ -302,7 +302,7 @@ datum/admins/proc/DB_ban_unban_by_id(var/id) output += "" for(var/j in nonhuman_positions) output += "" - var/list/bantypes = list("traitor","changeling","operative","revolutionary","cultist","wizard") //For legacy bans. + var/list/bantypes = list("traitor","changeling","vampire","operative","revolutionary","cultist","wizard") //For legacy bans. for(var/antag_type in all_antag_types) // Grab other bans. var/datum/antagonist/antag = all_antag_types[antag_type] bantypes |= antag.bantype diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 7e69a279bea..ca5f210f479 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -19,7 +19,8 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set "raider" = IS_MODE_COMPILED("heist"), // 11 "diona" = 1, // 12 "loyalist" = IS_MODE_COMPILED("revolution"), // 13 - "pAI candidate" = 1, // -- TLE // 14 + "vampire" = IS_MODE_COMPILED("vampire"), // 14 + "pAI candidate" = 1, // -- TLE // 15 ) //used for alternate_option diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index cabbc1474f3..20fd7b07f8f 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -79,6 +79,8 @@ stat(null, "Suit charge: [cell_status]") if(mind) + if(mind.vampire) + stat("Blood", mind.vampire.bloodusable) if(mind.changeling) stat("Chemical Storage", mind.changeling.chem_charges) stat("Genetic Damage Time", mind.changeling.geneticdamage) diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 9c17339e4cb..d1161585254 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -108,6 +108,31 @@ return 1 if(I_HURT) + //Vampire code + if(H.zone_sel && M.zone_sel.selecting == "head") + if(H.mind && H.mind.vampire && !H.mind.vampire.draining) + if((head && (head.flags & HEADCOVERSMOUTH)) || (wear_mask && (wear_mask.flags & MASKCOVERSMOUTH))) + H << "\red Remove their mask!" + return 0 + if((H.head && (H.head.flags & HEADCOVERSMOUTH)) || (H.wear_mask && (H.wear_mask.flags & MASKCOVERSMOUTH))) + H << "\red Remove your mask!" + return 0 + if(mind && mind.vampire) + H << "\red Your fangs fail to pierce [src.name]'s cold flesh" + return 0 + if(get_species() == "Machine") + H << "\red They have no blood" + return 0 + //we're good to suck the blood, blaah + //and leave an attack log + H.attack_log += text("\[[time_stamp()]\] Bit [src.name] ([src.ckey]) in the neck and draining their blood") + src.attack_log += text("\[[time_stamp()]\] Has been bit in the neck by [H.name] ([H.ckey])") + msg_admin_attack("[key_name_admin(H)] bit [key_name_admin(src)] in the neck - JMP") + H.handle_bloodsucking(src) + // var/datum/organ/external/affecting = get_organ(src.zone_sel.selecting) + // affecting.take_damage(10,0,1,0,"dual puncture marks") //this does not work and causes runtimes. + return + //end vampire codes if(!istype(H)) attack_generic(H,rand(1,3),"punched") diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index ddd0c9ef8c3..e7fa1ef4ab3 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -130,6 +130,8 @@ for(var/obj/item/weapon/grab/G in src) G.process() + if(mind && mind.vampire) + handle_vampire() // Calculate how vulnerable the human is to under- and overpressure. // Returns 0 (equals 0 %) if sealed in an undamaged suit, 1 if unprotected (equals 100%). // Suitdamage can modifiy this in 10% steps. @@ -366,14 +368,14 @@ get_breath_from_environment(var/volume_needed=BREATH_VOLUME) var/datum/gas_mixture/breath = ..() - + if(breath) //exposure to extreme pressures can rupture lungs var/check_pressure = breath.return_pressure() if(check_pressure < ONE_ATMOSPHERE / 5 || check_pressure > ONE_ATMOSPHERE * 5) if(!is_lung_ruptured() && prob(5)) rupture_lung() - + return breath handle_breath(datum/gas_mixture/breath) @@ -1022,6 +1024,12 @@ if( prob(2) && health && !hal_crit ) spawn(0) emote("snore") + if(mind) + if(mind.vampire) + if(istype(loc, /obj/structure/closet/coffin)) + adjustBruteLoss(-1) + adjustFireLoss(-1) + adjustToxLoss(-1) //CONSCIOUS else stat = CONSCIOUS @@ -1240,6 +1248,14 @@ see_in_dark = species.darksight see_invisible = see_in_dark>2 ? SEE_INVISIBLE_LEVEL_ONE : SEE_INVISIBLE_LIVING + if(mind && mind.vampire) + if((VAMP_VISION in mind.vampire.powers) && !(VAMP_FULL in mind.vampire.powers)) + sight |= SEE_MOBS + if((VAMP_FULL in mind.vampire.powers)) + sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS + see_in_dark = 8 + see_invisible = SEE_INVISIBLE_OBSERVER_NOLIGHTING + if(XRAY in mutations) sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS see_in_dark = 8 diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm index 63cfb46235e..7fa6bfe5fb5 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm @@ -211,6 +211,15 @@ if(ishuman(M)) // Any location if(M.mind && cult.is_antagonist(M.mind) && prob(10)) cult.remove_antagonist(M.mind) + if(M.mind.vampire && (!(VAMP_FULL in M.mind.vampire.powers))) + if(!M) M = holder.my_atom + M.adjustFireLoss(6) + M.adjust_fire_stacks(1) + M.IgniteMob() + //M.take_organ_damage(0, 1*REM) + if(prob(20)) + for (var/mob/V in viewers(src)) + V.show_message(text("\red []'s skin sizzles and burns.", M), 1) /datum/reagent/water/holywater/touch_turf(var/turf/T) if(volume >= 5) diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index 4f4981b4d8a..3afb1abc0df 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -38,6 +38,35 @@ if(10 to 50) icon_state = "half" if(51 to INFINITY) icon_state = "full" +/obj/item/weapon/reagent_containers/blood/attack(mob/living/carbon/human/M as mob, mob/living/carbon/human/user as mob) + if (user == M && (user.mind.vampire)) + if (reagents.get_reagent_amount("blood")) + user.visible_message("\red [user] raises \the [src] up to \his mouth and bites into it.", "\blue You raise \the [src] up to your mouth and bite into it, starting to drain its contents.") + + while (do_after(user, 25, 5, 1)) + var/blood_taken = 0 + var/need_to_break = 0 + if (reagents.get_reagent_amount("blood") > 10) + blood_taken = 10 + else + blood_taken = reagents.get_reagent_amount("blood") + need_to_break = 1 + + reagents.remove_reagent("blood", blood_taken) + user.mind.vampire.bloodtotal += blood_taken + user.check_vampire_upgrade(user.mind) + + if (blood_taken) + user << "\blue You have accumulated [user.mind.vampire.bloodtotal] [user.mind.vampire.bloodtotal > 1 ? "units" : "unit"] of blood and have [user.mind.vampire.bloodusable] left to use." + + if (need_to_break) + break + + user.visible_message("\red [user] licks \his fangs dry, lowering \the [src].", "\blue You lick your fangs clean of the tasteless blood.") + + else + ..() + /obj/item/weapon/reagent_containers/blood/APlus blood_type = "A+" @@ -59,4 +88,4 @@ /obj/item/weapon/reagent_containers/blood/empty name = "Empty BloodPack" desc = "Seems pretty useless... Maybe if there were a way to fill it?" - icon_state = "empty" \ No newline at end of file + icon_state = "empty" diff --git a/code/modules/spells/targeted/mind_transfer.dm b/code/modules/spells/targeted/mind_transfer.dm index 1f20e6afbf8..3714316ef9a 100644 --- a/code/modules/spells/targeted/mind_transfer.dm +++ b/code/modules/spells/targeted/mind_transfer.dm @@ -13,7 +13,7 @@ compatible_mobs = list(/mob/living/carbon/human) //which types of mobs are affected by the spell. NOTE: change at your own risk // TODO: Update to new antagonist system. - var/list/protected_roles = list("Wizard","Changeling","Cultist") //which roles are immune to the spell + var/list/protected_roles = list("Wizard","Changeling","Cultist", "Vampire") //which roles are immune to the spell var/msg_wait = 500 //how long in deciseconds it waits before telling that body doesn't feel right or mind swap robbed of a spell amt_paralysis = 20 //how much the victim is paralysed for after the spell diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm index e023beef802..f55a2bc2171 100644 --- a/code/modules/virus2/effect.dm +++ b/code/modules/virus2/effect.dm @@ -161,6 +161,8 @@ C.status |= ORGAN_DEAD H.update_body(1) mob.adjustToxLoss(15*multiplier) + vampire + stage = 3 deactivate(var/mob/living/carbon/mob,var/multiplier) if(istype(mob, /mob/living/carbon/human)) diff --git a/code/setup.dm b/code/setup.dm index f501e736690..1192847013b 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -574,6 +574,7 @@ #define BE_PLANT 4096 #define BE_LOYALIST 8192 #define BE_PAI 16384 +#define BE_VAMPIRE 32768 var/list/be_special_flags = list( "Traitor" = BE_TRAITOR, @@ -590,7 +591,8 @@ var/list/be_special_flags = list( "Raider" = BE_RAIDER, "Diona" = BE_PLANT, "Loyalist" = BE_LOYALIST, - "pAI" = BE_PAI + "pAI" = BE_PAI, + "vampire" = BE_VAMPIRE ) // Age limits on a character. @@ -677,6 +679,21 @@ var/list/be_special_flags = list( #define COLOR_WHITE "#FFFFFF" #define COLOR_BLACK "#000000" +// Vampire power defines +#define VAMP_REJUV 1 +#define VAMP_GLARE 2 +#define VAMP_HYPNO 3 +#define VAMP_SHAPE 4 +#define VAMP_VISION 5 +#define VAMP_DISEASE 6 +#define VAMP_CLOAK 7 +#define VAMP_BATS 8 +#define VAMP_SCREAM 9 +#define VAMP_JAUNT 10 +#define VAMP_SLAVE 11 +#define VAMP_BLINK 12 +#define VAMP_FULL 13 + /* * Germs and infections. */ @@ -832,6 +849,7 @@ var/list/be_special_flags = list( #define MODE_RAIDER "raider" #define MODE_WIZARD "wizard" #define MODE_CHANGELING "changeling" +#define MODE_VAMPIRE "vampire" #define MODE_CULTIST "cultist" #define MODE_HIGHLANDER "highlander" #define MODE_MONKEY "monkey" diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi index c20a2cbc0ff714b270b34e9ae11e6b7354b6dfa8..ef8ee9d29b2fcc47f268992f0bce87eafe8895e3 100644 GIT binary patch delta 8728 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 D)WDZ{ diff --git a/sound/effects/creepyshriek.ogg b/sound/effects/creepyshriek.ogg new file mode 100644 index 0000000000000000000000000000000000000000..86933130d5df41dcf1ce527fc3e844c0902e5d00 GIT binary patch literal 45042 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 dFc$oaYzcHhx`t81jO7NViV>5-$M#!*006APO