From 2e33456c208b9b9fa1cf63ef809cc81e74cf87e6 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sat, 31 Mar 2018 19:01:21 -0700 Subject: [PATCH] fixes wiz boots, adds ancient vamp, archwiz, nt undercover ops --- code/datums/outfits/outfit_admin.dm | 126 +++++++++++++++++- code/game/gamemodes/vampire/vampire_powers.dm | 57 ++++++++ 2 files changed, 182 insertions(+), 1 deletion(-) diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm index 8421beed3d8..031575b15db 100644 --- a/code/datums/outfits/outfit_admin.dm +++ b/code/datums/outfits/outfit_admin.dm @@ -259,6 +259,57 @@ if(istype(I)) apply_to_card(I, H, get_centcom_access("Nanotrasen Navy Representative"), "Nanotrasen Diplomat") + +/datum/outfit/admin/nt_undercover + name = "NT Undercover Operative" + // Disguised NT special forces, sent to quietly eliminate mutinous people in high positions (e.g: captain) + + uniform = /obj/item/clothing/under/chameleon + back = /obj/item/weapon/storage/backpack + belt = /obj/item/weapon/storage/belt/utility/full/multitool + gloves = /obj/item/clothing/gloves/combat + shoes = /obj/item/clothing/shoes/syndigaloshes + l_ear = /obj/item/device/radio/headset/heads/captain + id = /obj/item/weapon/card/id/syndicate + pda = /obj/item/device/pda + backpack_contents = list( + /obj/item/weapon/storage/box/engineer = 1, + /obj/item/device/flashlight = 1, + /obj/item/weapon/gun/projectile/automatic/proto = 1, // NT saber SMG + /obj/item/weapon/suppressor = 1, // silencer for SMG + /obj/item/ammo_box/magazine/smgm9mm = 3, // SMG ammo + /obj/item/weapon/door_remote/omni = 1, + /obj/item/weapon/implanter/mindshield = 1, // not implanted by default, as that would make them suspicious + /obj/item/weapon/implanter/storage = 1 // do not auto-implant this, that causes a bug + ) + implants = list( + /obj/item/weapon/implant/dust + ) + cybernetic_implants = list( + /obj/item/organ/internal/cyberimp/eyes/hud/security, + /obj/item/organ/internal/cyberimp/eyes/xray, + /obj/item/organ/internal/cyberimp/brain/anti_drop, + /obj/item/organ/internal/cyberimp/brain/anti_stun, + /obj/item/organ/internal/cyberimp/chest/nutriment/plus + ) + +/datum/outfit/admin/nt_undercover/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + if(visualsOnly) + return + + var/obj/item/weapon/card/id/I = H.wear_id + if(istype(I)) + apply_to_card(I, H, get_all_accesses(), "Civilian") + I.icon_state = "deathsquad" + + + var/obj/item/device/radio/R = H.l_ear + if(istype(R)) + R.name = "radio headset" + R.icon_state = "headset" + + /datum/outfit/admin/death_commando name = "NT Death Commando" @@ -723,6 +774,7 @@ name = "Wizard Hardsuit" suit = /obj/item/clothing/suit/space/hardsuit/wizard head = /obj/item/clothing/head/helmet/space/hardsuit/wizard + shoes = /obj/item/clothing/shoes/magboots /datum/outfit/admin/hardsuit/medical name = "Medical Hardsuit" @@ -938,7 +990,7 @@ /obj/item/weapon/suppressor = 1, /obj/item/weapon/card/emag = 1, /obj/item/device/flashlight = 1, - /obj/item/weapon/implanter/storage = 1 // do not auto-implant this, it causes a bug + /obj/item/weapon/implanter/storage = 1 // do not auto-implant this, that causes a bug ) implants = list( /obj/item/weapon/implant/dust @@ -993,6 +1045,46 @@ if(istype(I)) apply_to_card(I, H, get_all_accesses(), "Dark Lord", "syndie") + +/datum/outfit/admin/ancient_vampire + name = "Ancient Vampire" + // Vampire with tons of blood, and ability to convert others into vampires. + + uniform = /obj/item/clothing/under/color/black + suit = /obj/item/clothing/suit/hooded/chaplain_hoodie + back = /obj/item/weapon/storage/backpack + gloves = /obj/item/clothing/gloves/color/black + shoes = /obj/item/clothing/shoes/black + l_ear = /obj/item/device/radio/headset/syndicate + id = /obj/item/weapon/card/id/syndicate + backpack_contents = list( + /obj/item/weapon/storage/box/survival = 1, + /obj/item/device/flashlight = 1, + ) + +/datum/outfit/admin/ancient_vampire/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + if(visualsOnly) + return + + var/obj/item/clothing/suit/hooded/chaplain_hoodie/C = H.wear_suit + if(istype(C)) + C.name = "ancient robes" + C.hood.name = "ancient hood" + + var/obj/item/weapon/card/id/I = H.wear_id + if(istype(I)) + apply_to_card(I, H, get_all_accesses(), "Ancient", "syndie") + + H.make_vampire() + if(H.mind && H.mind.vampire) + H.mind.vampire.bloodtotal = 2500 + H.mind.vampire.bloodusable = 2500 + H.mind.vampire.add_ability(/obj/effect/proc_holder/spell/vampire/targetted/sire) + H.mind.vampire.check_vampire_upgrade() + + + /datum/outfit/admin/wizard uniform = /obj/item/clothing/under/color/lightpurple suit = /obj/item/clothing/suit/wizrobe @@ -1034,6 +1126,38 @@ shoes = /obj/item/clothing/shoes/sandal/marisa head = /obj/item/clothing/head/wizard/marisa +/datum/outfit/admin/wizard/arch + name = "Arch Wizard" + + suit = /obj/item/clothing/suit/wizrobe/magusred + head = /obj/item/clothing/head/wizard/magus + belt = /obj/item/weapon/storage/belt/wands/full + l_hand = null + backpack_contents = list( + /obj/item/weapon/storage/box/engineer = 1, + /obj/item/clothing/suit/space/hardsuit/wizard = 1, + /obj/item/clothing/head/helmet/space/hardsuit/wizard = 1, + /obj/item/clothing/shoes/magboots = 1, + /obj/item/weapon/kitchen/knife/ritual = 1, + /obj/item/clothing/suit/wizrobe/red = 1, + /obj/item/clothing/head/wizard/red = 1 + ) + +/datum/outfit/admin/wizard/arch/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + if(visualsOnly) + return + //if(H.mind) + // H.mind.make_wizard() + var/obj/item/weapon/spellbook/B = H.r_hand + if(istype(B)) + B.owner = H // force-bind it so it can never be stolen, no matter what. + B.name = "Archwizard Spellbook" + B.uses = 50 + var/obj/item/weapon/card/id/I = H.wear_id + if(istype(I)) + apply_to_card(I, H, get_all_accesses(), "Arch Wizard") + /datum/outfit/admin/dark_priest name = "Dark Priest" diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index c78cc55676f..d54addd0b1d 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -349,6 +349,63 @@ to_chat(user, "You have successfully Enthralled [H]. If they refuse to do as you say just adminhelp.") add_logs(user, H, "vampire-thralled") + +/obj/effect/proc_holder/spell/vampire/targetted/sire + name = "Sire (300)" + desc = "You infect the mind of a human with one of your own kind, creating a new vampire." + gain_desc = "You have gained the sire ability which allows you to create new vampires." + action_icon_state = "vampire_enthrall" + required_blood = 300 + +/obj/effect/proc_holder/spell/vampire/targetted/sire/cast(list/targets, mob/user = usr) + for(var/mob/living/target in targets) + user.visible_message("[user] bites [target]'s neck!", "You bite [target]'s neck and begin the flow of power.") + to_chat(target, "You feel the tendrils of evil invade your mind.") + if(!ishuman(target)) + to_chat(user, "You can only sire humans.") + break + if(do_mob(user, target, 50)) + if(can_sire(user, target)) + handle_sire(user, target) + else + revert_cast(user) + to_chat(user, "You or your target either moved or you dont have enough usable blood.") + +/obj/effect/proc_holder/spell/vampire/targetted/sire/proc/can_sire(mob/living/user, mob/living/carbon/C) + // Unlike can_enthrall, this proc allows usage on mindshielded and traitor targets. Deletes mindshield on use. + if(!C) + log_runtime(EXCEPTION("something bad happened on sireing a mob, attacker is [user] [user.key] \ref[user]"), user) + return 0 + if(!C.mind) + to_chat(user, "[C.name]'s mind is not there for you to sire.") + return 0 + if( ( C.mind in ticker.mode.vampires )||( C.mind.vampire )||( C.mind in ticker.mode.vampire_enthralled )) + C.visible_message("[C] seems to resist the takeover!", "You feel a familiar sensation in your skull that quickly dissipates.") + return 0 + if(!affects(C)) + C.visible_message("[C] seems to resist the takeover!", "Your faith of [ticker.Bible_deity_name] has kept your mind clear of all evil.") + return 0 + if(!ishuman(C)) + to_chat(user, "You can only sire humans!") + return 0 + return 1 + +/obj/effect/proc_holder/spell/vampire/targetted/sire/proc/handle_sire(mob/living/user, mob/living/carbon/human/H as mob) + if(!istype(H)) + return 0 + for(var/obj/item/weapon/implant/mindshield/L in H) + if(L && L.implanted) + to_chat(H, "Your mental protection implant unexpectedly falters, dims, dies.") + qdel(L) + H.make_vampire() + ticker.mode.forge_vampire_objectives(H.mind) + ticker.mode.greet_vampire(H.mind) + ticker.mode.update_vampire_icons_added(H.mind) + to_chat(H, "You have been sireed by [user]. Follow their every command.") + to_chat(user, "You have successfully sireed [H].") + add_logs(user, H, "vampire-sired") + + /obj/effect/proc_holder/spell/vampire/self/cloak name = "Cloak of Darkness" desc = "Toggles whether you are currently cloaking yourself in darkness."