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