diff --git a/_maps/RandomZLevels/Academy.dmm b/_maps/RandomZLevels/Academy.dmm index bf489a05ec..3e1adb953b 100644 --- a/_maps/RandomZLevels/Academy.dmm +++ b/_maps/RandomZLevels/Academy.dmm @@ -2858,7 +2858,7 @@ "ib" = ( /obj/structure/closet, /obj/item/weapon/reagent_containers/food/drinks/beer, -/obj/item/clothing/under/color/purple, +/obj/item/clothing/under/color/lightpurple, /obj/item/weapon/poster/contraband, /turf/open/floor/plasteel, /area/awaymission/academy/academyaft) diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index d65814b309..61f719eb91 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -527,7 +527,7 @@ /obj/item/weapon/storage/handle_atom_del(atom/A) if(A in contents) usr = null - remove_from_storage(A, loc) + remove_from_storage(A, null) /obj/item/weapon/storage/contents_explosion(severity, target) for(var/atom/A in contents) diff --git a/code/modules/awaymissions/mission_code/Academy.dm b/code/modules/awaymissions/mission_code/Academy.dm index c56bccba62..b546c0d1a3 100644 --- a/code/modules/awaymissions/mission_code/Academy.dm +++ b/code/modules/awaymissions/mission_code/Academy.dm @@ -97,7 +97,7 @@ wizmind.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt) wizmind.AddSpell(new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile) - wizmind.AddSpell(new /obj/effect/proc_holder/spell/fireball) + wizmind.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball) current_wizard = wizbody diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index ef8e548b00..de03809c75 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -11,9 +11,9 @@ ..() /obj/item/clothing/suit/hooded/Destroy() + . = ..() qdel(hood) hood = null - return ..() /obj/item/clothing/suit/hooded/proc/MakeHood() if(!hood) diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index c26a98d874..93ad51bd30 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -75,35 +75,29 @@ item_state = "y_suit" item_color = "yellow" -/obj/item/clothing/under/color/lightblue - name = "lightblue jumpsuit" - icon_state = "lightblue" +/obj/item/clothing/under/color/darkblue + name = "darkblue jumpsuit" + icon_state = "darkblue" item_state = "b_suit" - item_color = "lightblue" + item_color = "darkblue" -/obj/item/clothing/under/color/aqua - name = "aqua jumpsuit" - icon_state = "aqua" +/obj/item/clothing/under/color/teal + name = "teal jumpsuit" + icon_state = "teal" item_state = "b_suit" - item_color = "aqua" - -/obj/item/clothing/under/color/purple - name = "purple jumpsuit" - icon_state = "purple" - item_state = "p_suit" - item_color = "purple" + item_color = "teal" /obj/item/clothing/under/color/lightpurple - name = "lightpurple jumpsuit" + name = "purple jumpsuit" icon_state = "lightpurple" item_state = "p_suit" item_color = "lightpurple" -/obj/item/clothing/under/color/lightgreen - name = "lightgreen jumpsuit" - icon_state = "lightgreen" +/obj/item/clothing/under/color/darkgreen + name = "darkgreen jumpsuit" + icon_state = "darkgreen" item_state = "g_suit" - item_color = "lightgreen" + item_color = "darkgreen" /obj/item/clothing/under/color/lightbrown name = "lightbrown jumpsuit" @@ -117,30 +111,6 @@ item_state = "lb_suit" item_color = "brown" -/obj/item/clothing/under/color/yellowgreen - name = "yellowgreen jumpsuit" - icon_state = "yellowgreen" - item_state = "y_suit" - item_color = "yellowgreen" - -/obj/item/clothing/under/color/darkblue - name = "darkblue jumpsuit" - icon_state = "darkblue" - item_state = "b_suit" - item_color = "darkblue" - -/obj/item/clothing/under/color/lightred - name = "lightred jumpsuit" - icon_state = "lightred" - item_state = "r_suit" - item_color = "lightred" - -/obj/item/clothing/under/color/darkred - name = "darkred jumpsuit" - icon_state = "darkred" - item_state = "r_suit" - item_color = "darkred" - /obj/item/clothing/under/color/maroon name = "maroon jumpsuit" icon_state = "maroon" diff --git a/code/modules/events/holiday/vday.dm b/code/modules/events/holiday/vday.dm index bcb215ff93..9530ee0f2c 100644 --- a/code/modules/events/holiday/vday.dm +++ b/code/modules/events/holiday/vday.dm @@ -36,6 +36,9 @@ forge_valentines_objective(date, L) + if(valentines.len && prob(4)) + var/mob/living/notgoodenough = pick_n_take(valentines) + forge_valentines_objective(notgoodenough, date) else diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm index bfbf23b1b1..085a490b30 100644 --- a/code/modules/events/ion_storm.dm +++ b/code/modules/events/ion_storm.dm @@ -4,7 +4,7 @@ /datum/round_event_control/ion_storm name = "Ion Storm" typepath = /datum/round_event/ion_storm - weight = 3 + weight = 15 min_players = 2 /datum/round_event/ion_storm @@ -545,7 +545,7 @@ message = "ALL [ionthreats] ARE NOW NAMED [ionspecies]." if(4) message = "ALL [ionthreats] ARE NOW NAMED [ionobjects]." - + return message #undef ION_RANDOM diff --git a/code/modules/events/wizard/magicarp.dm b/code/modules/events/wizard/magicarp.dm index 0266304728..81fa857f3c 100644 --- a/code/modules/events/wizard/magicarp.dm +++ b/code/modules/events/wizard/magicarp.dm @@ -37,9 +37,12 @@ projectilesound = 'sound/weapons/emitter.ogg' maxHealth = 50 health = 50 - + var/allowed_projectile_types = list(/obj/item/projectile/magic/change, /obj/item/projectile/magic/animate, /obj/item/projectile/magic/resurrection, + /obj/item/projectile/magic/death, /obj/item/projectile/magic/teleport, /obj/item/projectile/magic/door, /obj/item/projectile/magic/aoe/fireball, + /obj/item/projectile/magic/spellblade, /obj/item/projectile/magic/arcane_barrage) + /mob/living/simple_animal/hostile/carp/ranged/New() - projectiletype = pick(typesof(initial(projectiletype))) + projectiletype = pick(allowed_projectile_types) ..() /mob/living/simple_animal/hostile/carp/ranged/chaos @@ -50,5 +53,5 @@ health = 75 /mob/living/simple_animal/hostile/carp/ranged/chaos/Shoot() - projectiletype = pick(typesof(initial(projectiletype))) - ..() \ No newline at end of file + projectiletype = pick(allowed_projectile_types) + ..() diff --git a/code/modules/jobs/job_types/medical.dm b/code/modules/jobs/job_types/medical.dm index d437246ab3..e2a8368238 100644 --- a/code/modules/jobs/job_types/medical.dm +++ b/code/modules/jobs/job_types/medical.dm @@ -58,7 +58,7 @@ Medical Doctor outfit = /datum/outfit/job/doctor - access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_cloning, access_mineral_storeroom) + access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_genetics, access_cloning, access_mineral_storeroom) minimal_access = list(access_medical, access_morgue, access_surgery, access_cloning) /datum/outfit/job/doctor @@ -93,7 +93,7 @@ Chemist outfit = /datum/outfit/job/chemist - access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_cloning, access_mineral_storeroom) + access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_genetics, access_cloning, access_mineral_storeroom) minimal_access = list(access_medical, access_chemistry, access_mineral_storeroom) /datum/outfit/job/chemist @@ -127,7 +127,7 @@ Geneticist outfit = /datum/outfit/job/geneticist - access = list(access_medical, access_morgue, access_chemistry, access_virology, access_genetics, access_cloning, access_research, access_xenobiology, access_robotics, access_mineral_storeroom, access_tech_storage) + access = list(access_medical, access_morgue, access_chemistry, access_genetics, access_cloning, access_research, access_xenobiology, access_robotics, access_mineral_storeroom, access_tech_storage) minimal_access = list(access_medical, access_morgue, access_genetics, access_cloning, access_research) /datum/outfit/job/geneticist diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 48d07e6417..8d12c8b27e 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -684,6 +684,41 @@ animate(whole_screen, transform = matrix(), time = 5, easing = QUAD_EASING) ..() +/datum/reagent/toxin/skewium + name = "Skewium" + id = "skewium" + description = "A strange, dull coloured liquid that appears to warp back and forth inside its container. Causes any consumer to experience a visual phenomena similar to said warping." + reagent_state = LIQUID + color = "#ADBDCD" + metabolization_rate = 0.8 * REAGENTS_METABOLISM + toxpwr = 0.25 + +/datum/reagent/toxin/skewium/on_mob_life(mob/living/M) + if(M.hud_used) + if(current_cycle >= 5 && current_cycle % 3 == 0) + var/list/screens = list(M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"]) + var/matrix/skew = matrix() + var/intensity = 8 + skew.set_skew(rand(-intensity,intensity), rand(-intensity,intensity)) + var/matrix/newmatrix = skew + + if(prob(33)) // 1/3rd of the time, let's make it stack with the previous matrix! Mwhahahaha! + var/obj/screen/plane_master/PM = M.hud_used.plane_masters["[GAME_PLANE]"] + newmatrix = skew * PM.transform + + for(var/whole_screen in screens) + animate(whole_screen, transform = newmatrix, time = 5, easing = QUAD_EASING, loop = -1) + animate(transform = -newmatrix, time = 5, easing = QUAD_EASING) + return ..() + +/datum/reagent/toxin/skewium/on_mob_delete(mob/living/M) + if(M && M.hud_used) + var/list/screens = list(M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"]) + for(var/whole_screen in screens) + animate(whole_screen, transform = matrix(), time = 5, easing = QUAD_EASING) + ..() + + /datum/reagent/toxin/anacea name = "Anacea" id = "anacea" diff --git a/code/modules/reagents/chemistry/recipes/toxins.dm b/code/modules/reagents/chemistry/recipes/toxins.dm index 233e6fd1bc..6246d3adb2 100644 --- a/code/modules/reagents/chemistry/recipes/toxins.dm +++ b/code/modules/reagents/chemistry/recipes/toxins.dm @@ -94,7 +94,14 @@ results = list("rotatium" = 3) required_reagents = list("mindbreaker" = 1, "teslium" = 1, "neurotoxin2" = 1) mix_message = "After sparks, fire, and the smell of mindbreaker, the mix is constantly spinning with no stop in sight." - + +/datum/chemical_reaction/skewium + name = "Skewium" + id = "Skewium" + results = list("skewium" = 5) + required_reagents = list("rotatium" = 2, "plasma" = 2, "sacid" = 1) + mix_message = "Wow! it turns out if you mix rotatium with some plasma and sulphuric acid, it gets even worse!" + /datum/chemical_reaction/anacea name = "Anacea" id = "anacea" diff --git a/code/modules/spells/spell_types/aimed.dm b/code/modules/spells/spell_types/aimed.dm new file mode 100644 index 0000000000..111094d5d7 --- /dev/null +++ b/code/modules/spells/spell_types/aimed.dm @@ -0,0 +1,105 @@ + +/obj/effect/proc_holder/spell/aimed + name = "aimed projectile spell" + var/projectile_type = /obj/item/projectile/magic/teleport + var/deactive_msg = "You discharge your projectile..." + var/active_msg = "You charge your projectile!" + var/base_icon_state = "projectile" + var/active_icon_state = "projectile" + +/obj/effect/proc_holder/spell/aimed/Click() + var/mob/living/user = usr + if(!istype(user)) + return + var/msg + if(!can_cast(user)) + msg = "You can no longer cast [name]!" + remove_ranged_ability(msg) + return + if(active) + msg = "[deactive_msg]" + remove_ranged_ability(msg) + else + msg = "[active_msg]Left-click to shoot it at a target!" + add_ranged_ability(user, msg, TRUE) + +/obj/effect/proc_holder/spell/aimed/update_icon() + if(!action) + return + action.button_icon_state = "[base_icon_state][active]" + action.UpdateButtonIcon() + +/obj/effect/proc_holder/spell/aimed/InterceptClickOn(mob/living/caller, params, atom/target) + if(..()) + return FALSE + if(!cast_check(0, ranged_ability_user)) + remove_ranged_ability() + return FALSE + var/list/targets = list(target) + perform(targets,user = ranged_ability_user) + return TRUE + +/obj/effect/proc_holder/spell/aimed/cast(list/targets, mob/living/user) + var/target = targets[1] + var/turf/T = user.loc + var/turf/U = get_step(user, user.dir) // Get the tile infront of the move, based on their direction + if(!isturf(U) || !isturf(T)) + return FALSE + fire_projectile(user, target) + user.newtonian_move(get_dir(U, T)) + remove_ranged_ability() //Auto-disable the ability once successfully performed + return TRUE + +/obj/effect/proc_holder/spell/aimed/proc/fire_projectile(mob/living/user, atom/target) + var/obj/item/projectile/P = new projectile_type(user.loc) + P.current = get_turf(user) + P.preparePixelProjectile(target, get_turf(target), user) + P.fire() + return TRUE + +/obj/effect/proc_holder/spell/aimed/lightningbolt + name = "Lightning Bolt" + desc = "Fire a high powered lightning bolt at your foes!" + school = "evocation" + charge_max = 200 + clothes_req = 1 + invocation = "UN'LTD P'WAH" + invocation_type = "shout" + cooldown_min = 30 + active_icon_state = "lightning" + base_icon_state = "lightning" + sound = 'sound/magic/lightningbolt.ogg' + active = FALSE + var/tesla_range = 15 + var/tesla_power = 20000 + var/tesla_boom = FALSE + active_msg = "You energize your hand with arcane lightning!" + deactive_msg = "You let the energy flow out of your hands back into yourself..." + +/obj/effect/proc_holder/spell/aimed/lightningbolt/fire_projectile(mob/living/user, atom/target) + var/obj/item/projectile/magic/aoe/lightning/P = new /obj/item/projectile/magic/aoe/lightning(user.loc) + P.current = get_turf(user) + P.preparePixelProjectile(target, get_turf(target), user) + P.tesla_power = tesla_power + P.tesla_range = tesla_range + P.tesla_boom = tesla_boom + P.fire() + return TRUE + +/obj/effect/proc_holder/spell/aimed/fireball + name = "Fireball" + desc = "This spell fires a fireball at a target and does not require wizard garb." + school = "evocation" + charge_max = 60 + clothes_req = 0 + invocation = "ONI SOMA" + invocation_type = "shout" + range = 20 + cooldown_min = 20 //10 deciseconds reduction per rank + projectile_type = /obj/item/projectile/magic/aoe/fireball + base_icon_state = "fireball" + action_icon_state = "fireball0" + sound = "sound/magic/Fireball.ogg" + active_msg = "You prepare to cast your fireball spell!" + deactive_msg = "You extinguish your fireball... for now." + active = FALSE diff --git a/code/modules/spells/spell_types/devil.dm b/code/modules/spells/spell_types/devil.dm index b235184ddd..6f62b9488c 100644 --- a/code/modules/spells/spell_types/devil.dm +++ b/code/modules/spells/spell_types/devil.dm @@ -69,7 +69,7 @@ user << "[C] seems to not be sentient. You cannot summon a contract for [C.p_them()]." -/obj/effect/proc_holder/spell/fireball/hellish +/obj/effect/proc_holder/spell/aimed/fireball/hellish name = "Hellfire" desc = "This spell launches hellfire at the target." @@ -80,7 +80,7 @@ invocation_type = "shout" range = 2 - fireball_type = /obj/item/projectile/magic/fireball/infernal + projectile_type = /obj/item/projectile/magic/aoe/fireball/infernal action_background_icon_state = "bg_demon" diff --git a/code/modules/spells/spell_types/lightning.dm b/code/modules/spells/spell_types/lightning.dm index 73e958926c..c1058161f5 100644 --- a/code/modules/spells/spell_types/lightning.dm +++ b/code/modules/spells/spell_types/lightning.dm @@ -1,6 +1,6 @@ -/obj/effect/proc_holder/spell/targeted/lightning - name = "Lightning Bolt" - desc = "Charges up and throws a lightning bolt at nearby enemies. Classic." +/obj/effect/proc_holder/spell/targeted/tesla + name = "Tesla Blast" + desc = "Blast lightning at your foes!" charge_type = "recharge" charge_max = 300 clothes_req = 1 @@ -16,12 +16,12 @@ action_icon_state = "lightning" -/obj/effect/proc_holder/spell/targeted/lightning/Click() +/obj/effect/proc_holder/spell/targeted/tesla/Click() if(!ready && cast_check()) StartChargeup() return 1 -/obj/effect/proc_holder/spell/targeted/lightning/proc/StartChargeup(mob/user = usr) +/obj/effect/proc_holder/spell/targeted/tesla/proc/StartChargeup(mob/user = usr) ready = 1 user << "You start gathering the power." Snd = new/sound('sound/magic/lightning_chargeup.ogg',channel = 7) @@ -36,18 +36,18 @@ else revert_cast(user, 0) -/obj/effect/proc_holder/spell/targeted/lightning/proc/Reset(mob/user = usr) +/obj/effect/proc_holder/spell/targeted/tesla/proc/Reset(mob/user = usr) ready = 0 if(halo) user.overlays.Remove(halo) -/obj/effect/proc_holder/spell/targeted/lightning/revert_cast(mob/user = usr, message = 1) +/obj/effect/proc_holder/spell/targeted/tesla/revert_cast(mob/user = usr, message = 1) if(message) user << "No target found in range." Reset(user) ..() -/obj/effect/proc_holder/spell/targeted/lightning/cast(list/targets, mob/user = usr) +/obj/effect/proc_holder/spell/targeted/tesla/cast(list/targets, mob/user = usr) ready = 0 var/mob/living/carbon/target = targets[1] Snd=sound(null, repeat = 0, wait = 1, channel = Snd.channel) //byond, why you suck? @@ -63,7 +63,7 @@ Bolt(user,target,30,5,user) Reset(user) -/obj/effect/proc_holder/spell/targeted/lightning/proc/Bolt(mob/origin,mob/target,bolt_energy,bounces,mob/user = usr) +/obj/effect/proc_holder/spell/targeted/tesla/proc/Bolt(mob/origin,mob/target,bolt_energy,bounces,mob/user = usr) origin.Beam(target,icon_state="lightning[rand(1,12)]",time=5) var/mob/living/carbon/current = target if(bounces < 1) @@ -81,4 +81,4 @@ return var/mob/living/next = pick(possible_targets) if(next) - Bolt(current,next,max((bolt_energy-5),5),bounces-1,user) \ No newline at end of file + Bolt(current,next,max((bolt_energy-5),5),bounces-1,user) diff --git a/code/modules/spells/spell_types/wizard.dm b/code/modules/spells/spell_types/wizard.dm index a14424cdae..0d764fa9f2 100644 --- a/code/modules/spells/spell_types/wizard.dm +++ b/code/modules/spells/spell_types/wizard.dm @@ -227,78 +227,6 @@ mutations = list(BLINDMUT) duration = 300 sound="sound/magic/Blind.ogg" - -/obj/effect/proc_holder/spell/fireball - name = "Fireball" - desc = "This spell fires a fireball at a target and does not require wizard garb." - - school = "evocation" - charge_max = 60 - clothes_req = 0 - invocation = "ONI SOMA" - invocation_type = "shout" - range = 20 - cooldown_min = 20 //10 deciseconds reduction per rank - var/fireball_type = /obj/item/projectile/magic/fireball - action_icon_state = "fireball0" - sound = "sound/magic/Fireball.ogg" - - active = FALSE - - -/obj/effect/proc_holder/spell/fireball/Click() - var/mob/living/user = usr - if(!istype(user)) - return - - var/msg - - if(!can_cast(user)) - msg = "You can no longer cast Fireball." - remove_ranged_ability(msg) - return - - if(active) - msg = "You extinguish your fireball...for now." - remove_ranged_ability(msg) - else - msg = "Your prepare to cast your fireball spell! Left-click to cast at a target!" - add_ranged_ability(user, msg, TRUE) - -/obj/effect/proc_holder/spell/fireball/update_icon() - if(!action) - return - action.button_icon_state = "fireball[active]" - action.UpdateButtonIcon() - -/obj/effect/proc_holder/spell/fireball/InterceptClickOn(mob/living/caller, params, atom/target) - if(..()) - return FALSE - - if(!cast_check(0, ranged_ability_user)) - remove_ranged_ability() - return FALSE - - var/list/targets = list(target) - perform(targets,user = ranged_ability_user) - - return TRUE - -/obj/effect/proc_holder/spell/fireball/cast(list/targets, mob/living/user) - var/target = targets[1] //There is only ever one target for fireball - var/turf/T = user.loc - var/turf/U = get_step(user, user.dir) // Get the tile infront of the move, based on their direction - if(!isturf(U) || !isturf(T)) - return 0 - - var/obj/item/projectile/magic/fireball/FB = new fireball_type(user.loc) - FB.current = get_turf(user) - FB.preparePixelProjectile(target, get_turf(target), user) - FB.fire() - user.newtonian_move(get_dir(U, T)) - remove_ranged_ability() //Auto-disable the ability once successfully performed - return 1 - /obj/effect/proc_holder/spell/aoe_turf/repulse name = "Repulse" desc = "This spell throws everything around the user away." diff --git a/icons/misc/fullscreen.dmi b/icons/misc/fullscreen.dmi index 4bf628bd41..116ea7cfdc 100644 Binary files a/icons/misc/fullscreen.dmi and b/icons/misc/fullscreen.dmi differ diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index 0e3ffa053e..efb324966b 100644 Binary files a/icons/mob/actions.dmi and b/icons/mob/actions.dmi differ diff --git a/icons/mob/augments.dmi b/icons/mob/augments.dmi index 7124c35105..a2d816c8c9 100644 Binary files a/icons/mob/augments.dmi and b/icons/mob/augments.dmi differ diff --git a/icons/mob/lavaland/legion.dmi b/icons/mob/lavaland/legion.dmi index 9cc19c4558..d8d165b79a 100644 Binary files a/icons/mob/lavaland/legion.dmi and b/icons/mob/lavaland/legion.dmi differ diff --git a/icons/mob/screen_gen.dmi b/icons/mob/screen_gen.dmi index 28c8385c56..40500e84a8 100644 Binary files a/icons/mob/screen_gen.dmi and b/icons/mob/screen_gen.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index 8a48c84c2f..6313ef058e 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index 765f967625..2963275eea 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index d4f27ed2b8..0eb3441812 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/sound/effects/his_grace_awaken.ogg b/sound/effects/his_grace_awaken.ogg new file mode 100644 index 0000000000..4c0e87e5ab Binary files /dev/null and b/sound/effects/his_grace_awaken.ogg differ