From 87ea0bb72f2d3832b29a9592814f924cc1bd5ec5 Mon Sep 17 00:00:00 2001 From: DragonTrance Date: Tue, 2 Mar 2021 20:30:26 -0700 Subject: [PATCH] dragon's blood tweaking --- .../mining/lavaland/necropolis_chests.dm | 127 ++++++++++++++---- .../simple_animal/hostile/megafauna/legion.dm | 63 +-------- 2 files changed, 99 insertions(+), 91 deletions(-) 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