diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm index 13c6d9cc3fc..f52edfb969d 100644 --- a/code/datums/outfits/outfit_admin.dm +++ b/code/datums/outfits/outfit_admin.dm @@ -427,7 +427,10 @@ /obj/item/storage/box/survival = 1, /obj/item/flashlight = 1, /obj/item/reagent_containers/food/drinks/bottle/bottleofbanana = 1, - /obj/item/grenade/clown_grenade = 1 + /obj/item/grenade/clown_grenade = 1, + /obj/item/melee/baton/cattleprod = 1, + /obj/item/stock_parts/cell/super = 1, + /obj/item/bikehorn/rubberducky = 1 ) /datum/outfit/admin/tunnel_clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) @@ -487,6 +490,7 @@ var/obj/item/card/id/I = H.wear_id if(istype(I)) apply_to_card(I, H, list(access_mime, access_theatre, access_maint_tunnels), "Mime") + H.sec_hud_set_ID() /datum/outfit/admin/greytide name = "Greytide" @@ -597,8 +601,9 @@ if(istype(I)) apply_to_card(I, H, list(access_maint_tunnels), "Bard") - - + var/obj/item/clothing/ears/headphones/P = r_ear + if(istype(P)) + P.attack_self(H) // activate them, display musical notes effect /datum/outfit/admin/soviet @@ -1050,8 +1055,8 @@ /datum/outfit/admin/ancient_vampire name = "Ancient Vampire" - uniform = /obj/item/clothing/under/color/black - suit = /obj/item/clothing/suit/hooded/chaplain_hoodie + uniform = /obj/item/clothing/under/victsuit/red + suit = /obj/item/clothing/suit/draculacoat back = /obj/item/storage/backpack gloves = /obj/item/clothing/gloves/combat shoes = /obj/item/clothing/shoes/syndigaloshes/black @@ -1060,6 +1065,7 @@ backpack_contents = list( /obj/item/storage/box/survival = 1, /obj/item/flashlight = 1, + /obj/item/clothing/under/color/black = 1 ) /datum/outfit/admin/ancient_vampire/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) @@ -1067,10 +1073,11 @@ if(visualsOnly) return - var/obj/item/clothing/suit/hooded/chaplain_hoodie/C = H.wear_suit + var/obj/item/clothing/suit/hooded/chaplain_hoodie/C = new(H.loc) if(istype(C)) C.name = "ancient robes" C.hood.name = "ancient hood" + H.equip_to_slot_or_del(C, slot_in_backpack) var/obj/item/card/id/I = H.wear_id if(istype(I)) @@ -1080,10 +1087,17 @@ if(!H.mind.vampire) H.make_vampire() if(H.mind.vampire) - H.mind.vampire.bloodusable = 999 - H.mind.vampire.bloodtotal = 999 + H.mind.vampire.bloodusable = 9999 + H.mind.vampire.bloodtotal = 9999 H.mind.vampire.check_vampire_upgrade(0) - + H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shapeshift/bats) + to_chat(H, "You have gained the ability to shapeshift into bat form. While capable of basic self defense, you cannot use your other abilities in that form.") + H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/raise_vampires) + to_chat(H, "You have gained the ability to Raise Vampires. This extremely powerful AOE ability affects all humans near you. Vampires/thralls are healed. Corpses are raised as vampires. Others are stunned, then brain damaged, then killed.") + H.dna.SetSEState(JUMPBLOCK, 1) + genemutcheck(H, JUMPBLOCK, null, MUTCHK_FORCED) + H.update_mutations() + H.gene_stability = 100 /datum/outfit/admin/wizard name = "Blue Wizard" diff --git a/code/datums/spells/shapeshift.dm b/code/datums/spells/shapeshift.dm index a814c84fa59..1b0a7587940 100644 --- a/code/datums/spells/shapeshift.dm +++ b/code/datums/spells/shapeshift.dm @@ -79,4 +79,16 @@ shapeshift_type = /mob/living/simple_animal/hostile/megafauna/dragon/lesser list/current_shapes = list(/mob/living/simple_animal/hostile/megafauna/dragon/lesser) list/current_casters = list() - list/possible_shapes = list(/mob/living/simple_animal/hostile/megafauna/dragon/lesser) \ No newline at end of file + list/possible_shapes = list(/mob/living/simple_animal/hostile/megafauna/dragon/lesser) + +/obj/effect/proc_holder/spell/targeted/shapeshift/bats + name = "Bat Form" + desc = "Take on the shape of a swarm of bats." + invocation = "none" + invocation_type = "none" + action_icon_state = "vampire_bats" + + shapeshift_type = /mob/living/simple_animal/hostile/scarybat/batswarm + list/current_shapes = list(/mob/living/simple_animal/hostile/scarybat/batswarm) + list/current_casters = list() + list/possible_shapes = list(/mob/living/simple_animal/hostile/scarybat/batswarm) \ No newline at end of file diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index c45da8ac279..3fc01527481 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -535,3 +535,75 @@ /datum/vampire_passive/full gain_desc = "You have reached your full potential and are no longer weak to the effects of anything holy and your vision has been improved greatly." + + +/obj/effect/proc_holder/spell/targeted/raise_vampires + name = "Raise Vampires" + desc = "Summons deadly vampires from bluespace." + school = "transmutation" + charge_max = 100 + clothes_req = 0 + human_req = 1 + invocation = "none" + invocation_type = "none" + max_targets = 0 + range = 3 + cooldown_min = 20 + action_icon_state = "revive_thrall" + sound = 'sound/magic/WandODeath.ogg' + +/obj/effect/proc_holder/spell/targeted/raise_vampires/cast(list/targets, mob/user = usr) + var/raised_count = 0 + new /obj/effect/temp_visual/cult/sparks(user.loc) + var/turf/T = get_turf(user) + to_chat(user, "You call out within bluespace, summoning more vampiric spirits to aid you!") + for(var/mob/living/carbon/human/H in targets) + T.Beam(H, "sendbeam", 'icons/effects/effects.dmi', time=30, maxdistance=7, beam_type=/obj/effect/ebeam) + new /obj/effect/temp_visual/cult/sparks(H.loc) + raised_count += H.raise_vampire(user) + + +/mob/living/carbon/human/proc/raise_vampire(var/mob/M) + if(!istype(M)) + log_debug("human/proc/raise_vampire called with invalid argument.") + return 0 + if(!mind) + visible_message("[src] looks to be too stupid to understand what is going on.") + return 0 + if(dna && (NO_BLOOD in dna.species.species_traits) || dna.species.exotic_blood || !blood_volume) + visible_message("[src] looks unfazed!") + return 0 + if(mind.vampire || mind.special_role == SPECIAL_ROLE_VAMPIRE || mind.special_role == SPECIAL_ROLE_VAMPIRE_THRALL) + visible_message("[src] looks refreshed!") + adjustBruteLoss(-60) + adjustFireLoss(-60) + for(var/obj/item/organ/external/E in bodyparts) + if(prob(25)) + if(E.mend_fracture()) + E.perma_injury = 0 + return 0 + if(stat != DEAD) + if(weakened) + visible_message("[src] looks to be in pain!") + adjustBrainLoss(60) + else + visible_message("[src] looks to be stunned by the energy!") + Weaken(20) + return 0 + for(var/obj/item/implant/mindshield/L in src) + if(L && L.implanted) + qdel(L) + for(var/obj/item/implant/traitor/T in src) + if(T && T.implanted) + qdel(T) + visible_message("[src] gets an eerie red glow in their eyes!") + var/datum/objective/protect/protect_objective = new + protect_objective.owner = mind + protect_objective.target = M.mind + protect_objective.explanation_text = "Protect [M.real_name]." + mind.objectives += protect_objective + add_attack_logs(M, src, "Vampire-sired") + mind.make_Vampire() + revive() + Weaken(20) + return 1 \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm index 2bb792fbb81..94a20968baf 100644 --- a/code/modules/mob/living/simple_animal/hostile/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/bat.dm @@ -60,4 +60,17 @@ if(istype(L)) if(prob(15)) L.Stun(1) - L.visible_message("\the [src] scares \the [L]!") \ No newline at end of file + L.visible_message("\the [src] scares \the [L]!") + + +/mob/living/simple_animal/hostile/scarybat/batswarm + name = "bat swarm" + desc = "A swarm of vicious, angry-looking space bats." + speed = 1 + harm_intent_damage = 25 + maxHealth = 300 + melee_damage_lower = 10 + melee_damage_upper = 30 + a_intent = INTENT_HARM + universal_speak = 1 + universal_understand = 1 \ No newline at end of file