diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index 1998bda8..c0c77efa 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -738,11 +738,10 @@
if(1)
new /obj/item/melee/ghost_sword(src)
if(2)
- new /obj/item/lava_staff(src)
- if(3)
new /obj/item/book/granter/spell/sacredflame(src)
new /obj/item/gun/magic/wand/fireball(src)
- if(4)
+ new /obj/item/lava_staff(src)
+ if(3 to 4)
new /obj/item/dragons_blood(src)
/obj/structure/closet/crate/necropolis/dragon/crusher
@@ -852,33 +851,19 @@
icon_state = "vial"
/obj/item/dragons_blood/attack_self(mob/living/carbon/human/user)
- if(!istype(user))
- return
-
- var/mob/living/carbon/human/H = user
- var/random = rand(1,4)
-
- switch(random)
- if(1)
- to_chat(user, "Your appearance morphs to that of a very small humanoid ash dragon! You get to look like a freak without the cool abilities.")
- H.dna.features = list("mcolor" = "A02720", "tail_lizard" = "Dark Tiger", "tail_human" = "None", "snout" = "Sharp", "horns" = "Curled", "ears" = "None", "wings" = "None", "frills" = "None", "spines" = "Long", "body_markings" = "Dark Tiger Body", "legs" = "Digitigrade Legs")
- H.eye_color = "fee5a3"
- H.set_species(/datum/species/lizard)
- if(2)
- to_chat(user, "Your flesh begins to melt! Miraculously, you seem fine otherwise.")
- H.set_species(/datum/species/skeleton)
- if(3)
- to_chat(user, "Power courses through you! You can now shift your form at will.")
- if(user.mind)
- var/obj/effect/proc_holder/spell/targeted/shapeshift/dragon/D = new
- user.mind.AddSpell(D)
- if(4)
- to_chat(user, "You feel like you could walk straight through lava now.")
- H.weather_immunities |= "lava"
+ if(prob(50))
+ to_chat(user, "You feel like you could walk straight through lava now.")
+ user.weather_immunities |= "lava"
+ else
+ to_chat(user, "Power courses through you! You can now shift your form at will.")
+ if(user.mind)
+ var/obj/effect/proc_holder/spell/targeted/shapeshift/dragon/D = new
+ user.mind.AddSpell(D)
playsound(user.loc,'sound/items/drink.ogg', rand(10,50), 1)
qdel(src)
+
/datum/disease/transformation/dragon
name = "dragon transformation"
cure_text = "nothing"
@@ -974,9 +959,7 @@
switch(loot)
if(1)
new /obj/item/mayhem(src)
- if(2)
- new /obj/item/gun/magic/staff/spellblade(src)
- if(3)
+ if(2 to 3)
new /obj/item/gun/magic/staff/spellblade(src)
/obj/structure/closet/crate/necropolis/bubblegum/crusher
@@ -1066,6 +1049,7 @@
var/random_crystal = pick(choices)
new random_crystal(src)
new /obj/item/organ/vocal_cords/colossus(src)
+ new /obj/item/skin_dissolver(src)
/obj/structure/closet/crate/necropolis/colossus/crusher
name = "angelic colossus chest"
@@ -1354,3 +1338,88 @@
new /obj/item/wisp_lantern(src)
if(3)
new /obj/item/prisoncube(src)
+
+//THE legion
+/obj/structure/closet/crate/necropolis/legion
+ name = "\improper Guardian of the Necropolis crate"
+
+/obj/structure/closet/crate/necropolis/legion/PopulateContents()
+ new /obj/item/staff/storm(src)
+ new /obj/item/skin_dissolver(src)
+
+/obj/item/staff/storm
+ name = "staff of storms"
+ desc = "An ancient staff retrieved from the remains of Legion. The wind stirs as you move it."
+ icon_state = "staffofstorms"
+ item_state = "staffofstorms"
+ icon = 'icons/obj/guns/magic.dmi'
+ slot_flags = ITEM_SLOT_BACK
+ w_class = WEIGHT_CLASS_BULKY
+ force = 25
+ damtype = BURN
+ hitsound = 'sound/weapons/sear.ogg'
+ var/storm_type = /datum/weather/ash_storm
+ var/storm_cooldown = 0
+ var/static/list/excluded_areas = list(/area/reebe/city_of_cogs)
+
+/obj/item/staff/storm/attack_self(mob/user)
+ if(storm_cooldown > world.time)
+ to_chat(user, "The staff is still recharging!")
+ return
+
+ var/area/user_area = get_area(user)
+ var/turf/user_turf = get_turf(user)
+ if(!user_area || !user_turf || (user_area.type in excluded_areas))
+ to_chat(user, "Something is preventing you from using the staff here.")
+ return
+ var/datum/weather/A
+ for(var/V in SSweather.processing)
+ var/datum/weather/W = V
+ if((user_turf.z in W.impacted_z_levels) && W.area_type == user_area.type)
+ A = W
+ break
+
+ if(A)
+ if(A.stage != END_STAGE)
+ if(A.stage == WIND_DOWN_STAGE)
+ to_chat(user, "The storm is already ending! It would be a waste to use the staff now.")
+ return
+ user.visible_message("[user] holds [src] skywards as an orange beam travels into the sky!", \
+ "You hold [src] skyward, dispelling the storm!")
+ playsound(user, 'sound/magic/staff_change.ogg', 200, 0)
+ A.wind_down()
+ log_game("[user] ([key_name(user)]) has dispelled a storm at [AREACOORD(user_turf)]")
+ return
+ else
+ A = new storm_type(list(user_turf.z))
+ A.name = "staff storm"
+ log_game("[user] ([key_name(user)]) has summoned [A] at [AREACOORD(user_turf)]")
+ if (is_special_character(user))
+ message_admins("[A] has been summoned in [ADMIN_VERBOSEJMP(user_turf)] by [user] ([key_name_admin(user)], a non-antagonist")
+ A.area_type = user_area.type
+ A.telegraph_duration = 100
+ A.end_duration = 100
+
+ user.visible_message("[user] holds [src] skywards as red lightning crackles into the sky!", \
+ "You hold [src] skyward, calling down a terrible storm!")
+ playsound(user, 'sound/magic/staff_change.ogg', 200, 0)
+ A.telegraph()
+ storm_cooldown = world.time + 200
+
+/obj/item/skin_dissolver
+ name = "bottle of acid"
+ desc = "Of course, you're only planning on keeping this in a safe place..."
+ icon = 'icons/obj/wizard.dmi'
+ icon_state = "vial"
+
+/obj/item/skin_dissolver/attack_self(mob/living/carbon/human/user)
+ to_chat(user, "Your flesh begins to melt! Miraculously, you seem fine otherwise.")
+ user.set_species(/datum/species/skeleton)
+ playsound(user.loc,'sound/items/drink.ogg', rand(10,50), 1)
+ qdel(src)
+
+/obj/item/skin_dissolver/attack(mob/M, mob/user)
+ if(M == user)
+ attack_self(user)
+ return
+ ..()
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
index 26d3ef11..0a54b975 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
@@ -135,7 +135,7 @@ Difficulty: Medium
last_legion = FALSE
break
if(last_legion)
- loot = list(/obj/item/staff/storm)
+ loot = list(/obj/structure/closet/crate/necropolis/legion)
elimination = 0
else if(prob(5))
loot = list(/obj/structure/closet/crate/necropolis/tendril)
@@ -147,64 +147,3 @@ Difficulty: Medium
desc = "The message repeats."
invisibility = 100
-
-//Loot
-
-/obj/item/staff/storm
- name = "staff of storms"
- desc = "An ancient staff retrieved from the remains of Legion. The wind stirs as you move it."
- icon_state = "staffofstorms"
- item_state = "staffofstorms"
- icon = 'icons/obj/guns/magic.dmi'
- slot_flags = ITEM_SLOT_BACK
- w_class = WEIGHT_CLASS_BULKY
- force = 25
- damtype = BURN
- hitsound = 'sound/weapons/sear.ogg'
- var/storm_type = /datum/weather/ash_storm
- var/storm_cooldown = 0
- var/static/list/excluded_areas = list(/area/reebe/city_of_cogs)
-
-/obj/item/staff/storm/attack_self(mob/user)
- if(storm_cooldown > world.time)
- to_chat(user, "The staff is still recharging!")
- return
-
- var/area/user_area = get_area(user)
- var/turf/user_turf = get_turf(user)
- if(!user_area || !user_turf || (user_area.type in excluded_areas))
- to_chat(user, "Something is preventing you from using the staff here.")
- return
- var/datum/weather/A
- for(var/V in SSweather.processing)
- var/datum/weather/W = V
- if((user_turf.z in W.impacted_z_levels) && W.area_type == user_area.type)
- A = W
- break
-
- if(A)
- if(A.stage != END_STAGE)
- if(A.stage == WIND_DOWN_STAGE)
- to_chat(user, "The storm is already ending! It would be a waste to use the staff now.")
- return
- user.visible_message("[user] holds [src] skywards as an orange beam travels into the sky!", \
- "You hold [src] skyward, dispelling the storm!")
- playsound(user, 'sound/magic/staff_change.ogg', 200, 0)
- A.wind_down()
- log_game("[user] ([key_name(user)]) has dispelled a storm at [AREACOORD(user_turf)]")
- return
- else
- A = new storm_type(list(user_turf.z))
- A.name = "staff storm"
- log_game("[user] ([key_name(user)]) has summoned [A] at [AREACOORD(user_turf)]")
- if (is_special_character(user))
- message_admins("[A] has been summoned in [ADMIN_VERBOSEJMP(user_turf)] by [user] ([key_name_admin(user)], a non-antagonist")
- A.area_type = user_area.type
- A.telegraph_duration = 100
- A.end_duration = 100
-
- user.visible_message("[user] holds [src] skywards as red lightning crackles into the sky!", \
- "You hold [src] skyward, calling down a terrible storm!")
- playsound(user, 'sound/magic/staff_change.ogg', 200, 0)
- A.telegraph()
- storm_cooldown = world.time + 200