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