diff --git a/code/__DEFINES/color/colors.dm b/code/__DEFINES/color/colors.dm
index 91c8d93933..1b819a72c3 100644
--- a/code/__DEFINES/color/colors.dm
+++ b/code/__DEFINES/color/colors.dm
@@ -127,6 +127,7 @@
#define COLOR_THEME_TRASENKNOX "#3ce375"
#define COLOR_THEME_DETECTIVE "#c7b08b"
#define COLOR_THEME_LITEWEB "#226611"
+#define COLOR_THEME_CORRU "#00FFFF"
///Colors for eigenstates
#define COLOR_PERIWINKLEE "#9999FF"
diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm
index 5df7b9f875..ac8046a68b 100644
--- a/code/__HELPERS/type2type.dm
+++ b/code/__HELPERS/type2type.dm
@@ -707,7 +707,9 @@
return 'modular_citadel/icons/ui/screen_trasenknox.dmi'
if('icons/mob/screen_detective.dmi')
return 'modular_citadel/icons/ui/screen_detective.dmi'
- if('modular_sand/icons/mob/screen_liteweb.dmi')
- return 'modular_sand/icons/mob/screen_liteweb.dmi'
+ if('modular_sand/icons/hud/screen_liteweb/base.dmi')
+ return 'modular_sand/icons/hud/screen_liteweb/base.dmi'
+ if('modular_sand/icons/hud/screen_corru/base.dmi')
+ return 'modular_sand/icons/hud/screen_corru/base.dmi'
else
return 'modular_citadel/icons/ui/screen_midnight.dmi'
diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm
index cb88f56dcb..20180be547 100644
--- a/code/_onclick/hud/action_button.dm
+++ b/code/_onclick/hud/action_button.dm
@@ -235,11 +235,12 @@
var/list/settings = our_hud.get_action_buttons_icons()
var/ui_icon = "[settings["bg_icon"]]"
- var/list/ui_segments = splittext(ui_icon, ".")
- var/list/ui_paths = splittext(ui_segments[1], "/")
- var/ui_name = ui_paths[length(ui_paths)]
+ var/static/regex/R
+ if(!R)
+ R = new(@"(screen_.+?)[\./]")
+ R.Find(ui_icon)
- icon_state = "[ui_name]_palette"
+ icon_state = "[R.group[1]]_palette"
/atom/movable/screen/button_palette/MouseEntered(location, control, params)
. = ..()
diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm
index 1e5c3b292b..20d7b18c46 100644
--- a/code/_onclick/hud/alert.dm
+++ b/code/_onclick/hud/alert.dm
@@ -194,7 +194,7 @@
/atom/movable/screen/alert/thirsty
name = "Thirsty"
desc = "Some water would be good right about now."
- icon = 'modular_sand/icons/mob/screen_alert.dmi'
+ icon = 'modular_sand/icons/hud/screen_alert.dmi'
icon_state = "thirsty"
/atom/movable/screen/alert/starving
@@ -205,7 +205,7 @@
/atom/movable/screen/alert/dehydrated
name = "Dehydrated"
desc = "You're severely dehydrated."
- icon = 'modular_sand/icons/mob/screen_alert.dmi'
+ icon = 'modular_sand/icons/hud/screen_alert.dmi'
icon_state = "dehydrated"
*/
diff --git a/code/_onclick/hud/generic_dextrous.dm b/code/_onclick/hud/generic_dextrous.dm
index a7cfec5a06..54cb0513c0 100644
--- a/code/_onclick/hud/generic_dextrous.dm
+++ b/code/_onclick/hud/generic_dextrous.dm
@@ -34,8 +34,8 @@
action_intent = new /atom/movable/screen/act_intent/segmented(null, src)
else
action_intent = new /atom/movable/screen/act_intent(null, src)
- action_intent.icon = ui_style
- action_intent.icon_state = mymob.a_intent
+ action_intent.icon = ui_style_modular(ui_style)
+ action_intent.update_icon()
static_inventory += action_intent
diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index 1dac577a5c..437df49f23 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -15,7 +15,8 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
"Clockwork" = 'icons/mob/screen_clockwork.dmi',
"Trasen-Knox" = 'icons/mob/screen_trasenknox.dmi',
"Detective" = 'icons/mob/screen_detective.dmi',
- "Liteweb" = 'modular_sand/icons/mob/screen_liteweb.dmi'
+ "Liteweb" = 'modular_sand/icons/hud/screen_liteweb/base.dmi',
+ "Corru" = 'modular_sand/icons/hud/screen_corru/base.dmi'
))
/proc/ui_style2icon(ui_style)
@@ -44,7 +45,7 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
var/atom/movable/screen/synth/coolant_counter/coolant_display
var/atom/movable/screen/action_intent
- var/atom/movable/screen/zone_select
+ var/atom/movable/screen/zone_sel/zone_select
var/atom/movable/screen/pull_icon
var/atom/movable/screen/rest_icon
var/atom/movable/screen/throw_icon
diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm
index 81cd1c420e..86ccd00759 100644
--- a/code/_onclick/hud/human.dm
+++ b/code/_onclick/hud/human.dm
@@ -3,6 +3,7 @@
/atom/movable/screen/human/toggle
name = "toggle"
+ base_icon_state = "toggle"
icon_state = "toggle"
mouse_over_pointer = MOUSE_HAND_POINTER
@@ -34,9 +35,19 @@
targetmob.hud_used.extra_inventory_update(usr)
// Sandstorm edit END
+ update_icon()
+
+/atom/movable/screen/human/toggle/update_icon_state()
+ . = ..()
+ icon_state = check_on() ? "[base_icon_state]_on" : "[base_icon_state]"
+
+/atom/movable/screen/human/toggle/proc/check_on()
+ return hud.inventory_shown
+
// Sandstorm edit
/atom/movable/screen/human/toggle/extra
name = "toggle extra"
+ base_icon_state = "toggle_extra"
icon_state = "toggle_extra"
/atom/movable/screen/human/toggle/extra/Click()
@@ -56,8 +67,13 @@
usr.client.screen += targetmob.hud_used.extra_inventory
targetmob.hud_used.extra_inventory_update(usr)
+
+ update_icon()
//
+/atom/movable/screen/human/toggle/extra/check_on()
+ return hud.extra_shown
+
/atom/movable/screen/human/equip
name = "equip"
icon_state = "act_equip"
@@ -240,7 +256,8 @@
static_inventory += using
action_intent = new /atom/movable/screen/act_intent/segmented(null, src)
- action_intent.icon_state = mymob.a_intent
+ action_intent.icon = ui_style_modular(ui_style)
+ action_intent.icon_state = "[action_intent.base_icon_state]_[mymob.a_intent]"
static_inventory += action_intent
assert_move_intent_ui(owner, TRUE)
@@ -332,7 +349,7 @@
inv_box.name = "left pocket"
inv_box.icon = ui_style
inv_box.icon_state = "pocket"
- inv_box.icon_full = "template"
+ inv_box.icon_full = "template_small"
inv_box.screen_loc = ui_storage1
inv_box.slot_id = ITEM_SLOT_LPOCKET
static_inventory += inv_box
@@ -341,7 +358,7 @@
inv_box.name = "right pocket"
inv_box.icon = ui_style
inv_box.icon_state = "pocket"
- inv_box.icon_full = "template"
+ inv_box.icon_full = "template_small"
inv_box.screen_loc = ui_storage2
inv_box.slot_id = ITEM_SLOT_RPOCKET
static_inventory += inv_box
@@ -494,17 +511,21 @@
infodisplay += thirst
healths = new /atom/movable/screen/healths(null, src)
+ healths.icon = ui_style_modular(ui_style, "health")
infodisplay += healths
staminas = new /atom/movable/screen/staminas(null, src)
+ staminas.icon = ui_style_modular(ui_style, "stamina")
infodisplay += staminas
if(!CONFIG_GET(flag/disable_stambuffer))
staminabuffer = new /atom/movable/screen/staminabuffer(null, src)
+ staminabuffer.icon = ui_style_modular(ui_style, "stamina")
infodisplay += staminabuffer
//END OF CIT CHANGES
healthdoll = new /atom/movable/screen/healthdoll(null, src)
+ healthdoll.icon = ui_style_modular(ui_style, "health")
infodisplay += healthdoll
pull_icon = new /atom/movable/screen/pull(null, src)
@@ -536,6 +557,7 @@
zone_select = new /atom/movable/screen/zone_sel(null, src)
zone_select.icon = ui_style
+ zone_select.overlay_icon = ui_style_modular(ui_style, "zone")
zone_select.update_icon()
static_inventory += zone_select
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index ace6303c03..bf5af2c122 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -156,7 +156,7 @@
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/language_menu/Click()
- usr.get_language_holder().open_language_menu(usr)
+ hud.mymob.get_language_holder().open_language_menu(hud.mymob)
/atom/movable/screen/inventory
/// The identifier for the slot. It has nothing to do with ID cards.
@@ -306,26 +306,36 @@
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/act_intent/Click(location, control, params)
- usr.a_intent_change(INTENT_HOTKEY_RIGHT)
+ hud.mymob.a_intent_change(INTENT_HOTKEY_RIGHT)
+
+/atom/movable/screen/act_intent/update_icon_state()
+ icon_state = hud.mymob.a_intent || initial(icon_state)
+
+/atom/movable/screen/act_intent/segmented
+ base_icon_state = "intent"
/atom/movable/screen/act_intent/segmented/Click(location, control, params)
- if(usr.client.prefs.toggles & INTENT_STYLE)
- var/_x = text2num(params2list(params)["icon-x"])
- var/_y = text2num(params2list(params)["icon-y"])
-
- if(_x<=16 && _y<=16)
- usr.a_intent_change(INTENT_HARM)
-
- else if(_x<=16 && _y>=17)
- usr.a_intent_change(INTENT_HELP)
-
- else if(_x>=17 && _y<=16)
- usr.a_intent_change(INTENT_GRAB)
-
- else if(_x>=17 && _y>=17)
- usr.a_intent_change(INTENT_DISARM)
- else
+ if(!(hud.mymob?.client.prefs.toggles & INTENT_STYLE))
return ..()
+ var/_x = text2num(params2list(params)["icon-x"])
+ var/_y = text2num(params2list(params)["icon-y"])
+
+ if(_x<=16 && _y<=16)
+ usr.a_intent_change(INTENT_HARM)
+
+ else if(_x<=16 && _y>=17)
+ usr.a_intent_change(INTENT_HELP)
+
+ else if(_x>=17 && _y<=16)
+ usr.a_intent_change(INTENT_GRAB)
+
+ else if(_x>=17 && _y>=17)
+ usr.a_intent_change(INTENT_DISARM)
+
+ update_icon()
+
+/atom/movable/screen/act_intent/segmented/update_icon_state()
+ icon_state = "[base_icon_state]_[hud.mymob.a_intent]"
/atom/movable/screen/act_intent/alien
icon = 'icons/mob/screen_alien.dmi'
@@ -427,9 +437,13 @@
screen_loc = ui_zonesel
mouse_over_pointer = MOUSE_HAND_POINTER
var/overlay_icon = 'icons/mob/screen_gen.dmi'
- var/static/list/hover_overlays_cache = list()
+ var/list/hover_overlays_cache = list()
var/hovering
+/atom/movable/screen/zone_sel/Destroy()
+ QDEL_LIST_ASSOC(hover_overlays_cache)
+ return ..()
+
/atom/movable/screen/zone_sel/Click(location, control,params)
if(isobserver(usr))
return
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 4ca0b82c09..03dd76c967 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -962,6 +962,8 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
outline_color = COLOR_THEME_DETECTIVE
if("liteweb")
outline_color = COLOR_THEME_LITEWEB
+ if("corru")
+ outline_color = COLOR_THEME_CORRU
else //this should never happen, hopefully
outline_color = COLOR_WHITE
if(color)
diff --git a/code/modules/asset_cache/assets/font.dm b/code/modules/asset_cache/assets/font.dm
new file mode 100644
index 0000000000..3257c4a617
--- /dev/null
+++ b/code/modules/asset_cache/assets/font.dm
@@ -0,0 +1,9 @@
+/datum/asset/simple/namespaced/fonts
+ parents = list("fonts.css" = 'interface/fonts/fonts.css')
+
+/datum/asset/simple/namespaced/fonts/New()
+ for(var/datum/font/font as anything in subtypesof(/datum/font))
+ var/file = "[initial(font.font_family)]"
+ var/file_name = copytext(file, findlasttext(file, "/") + 1)
+ assets[file_name] = file
+ return ..()
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 888b6b027c..a798448357 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -651,11 +651,11 @@
if(hal_screwyhud == SCREWYHUD_HEALTHY)
icon_num = 0
if(icon_num)
- hud_used.healthdoll.add_overlay(mutable_appearance('icons/mob/screen_gen.dmi', "[BP.body_zone][icon_num]"))
+ hud_used.healthdoll.add_overlay(mutable_appearance(ui_style_modular(hud_used.ui_style, "health"), "[BP.body_zone][icon_num]"))
for(var/t in get_missing_limbs()) //Missing limbs
- hud_used.healthdoll.add_overlay(mutable_appearance('icons/mob/screen_gen.dmi', "[t]6"))
+ hud_used.healthdoll.add_overlay(mutable_appearance(ui_style_modular(hud_used.ui_style, "health"), "[t]6"))
for(var/t in get_disabled_limbs()) //Disabled limbs
- hud_used.healthdoll.add_overlay(mutable_appearance('icons/mob/screen_gen.dmi', "[t]7"))
+ hud_used.healthdoll.add_overlay(mutable_appearance(ui_style_modular(hud_used.ui_style, "health"), "[t]7"))
else
hud_used.healthdoll.icon_state = "healthdoll_DEAD"
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 9d19903281..dc57cc2f11 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -308,7 +308,7 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
a_intent = possible_a_intents[current_intent]
if(hud_used && hud_used.action_intent)
- hud_used.action_intent.icon_state = "[a_intent]"
+ hud_used.action_intent.update_icon()
/proc/is_blind(A)
diff --git a/code/modules/tooltip/tooltip.dm b/code/modules/tooltip/tooltip.dm
index 290f610f41..ace7f1f280 100644
--- a/code/modules/tooltip/tooltip.dm
+++ b/code/modules/tooltip/tooltip.dm
@@ -44,7 +44,13 @@ Notes:
owner = C
var/datum/asset/stuff = get_asset_datum(/datum/asset/simple/jquery)
stuff.send(owner)
- owner << browse(file2text('code/modules/tooltip/tooltip.html'), "window=[control]")
+ var/datum/asset/simple/namespaced/fonts/fonts = get_asset_datum(/datum/asset/simple/namespaced/fonts)
+ fonts.send(owner)
+ var/static/file2send
+ if(!file2send)
+ file2send = replacetext(file2text('code/modules/tooltip/tooltip.html'), "THE_FONT_GOES_HERE!!!!!!!!!!!!!!!", SSassets.transport.get_asset_url("fonts.css"))
+
+ owner << browse(file2send, "window=[control]")
..()
diff --git a/code/modules/tooltip/tooltip.html b/code/modules/tooltip/tooltip.html
index b772ef0019..f8fa555c45 100644
--- a/code/modules/tooltip/tooltip.html
+++ b/code/modules/tooltip/tooltip.html
@@ -4,6 +4,7 @@
Tooltip
+
diff --git a/icons/hud/64x16_actions.dmi b/icons/hud/64x16_actions.dmi
index cec3d4b9d1..a2cdafc584 100644
Binary files a/icons/hud/64x16_actions.dmi and b/icons/hud/64x16_actions.dmi differ
diff --git a/icons/mob/screen_clockwork.dmi b/icons/mob/screen_clockwork.dmi
index d84503c768..2ae2ea123a 100644
Binary files a/icons/mob/screen_clockwork.dmi and b/icons/mob/screen_clockwork.dmi differ
diff --git a/icons/mob/screen_detective.dmi b/icons/mob/screen_detective.dmi
index 5de29ad1e8..8bf99f67c6 100644
Binary files a/icons/mob/screen_detective.dmi and b/icons/mob/screen_detective.dmi differ
diff --git a/icons/mob/screen_glass.dmi b/icons/mob/screen_glass.dmi
index 4948171883..992b556cf8 100644
Binary files a/icons/mob/screen_glass.dmi and b/icons/mob/screen_glass.dmi differ
diff --git a/icons/mob/screen_midnight.dmi b/icons/mob/screen_midnight.dmi
index c180ed4f37..5a7c729a75 100644
Binary files a/icons/mob/screen_midnight.dmi and b/icons/mob/screen_midnight.dmi differ
diff --git a/icons/mob/screen_operative.dmi b/icons/mob/screen_operative.dmi
index 8e2eeaa315..e41e2bcec0 100644
Binary files a/icons/mob/screen_operative.dmi and b/icons/mob/screen_operative.dmi differ
diff --git a/icons/mob/screen_plasmafire.dmi b/icons/mob/screen_plasmafire.dmi
index 18f99515b9..912dfc4447 100644
Binary files a/icons/mob/screen_plasmafire.dmi and b/icons/mob/screen_plasmafire.dmi differ
diff --git a/icons/mob/screen_retro.dmi b/icons/mob/screen_retro.dmi
index 8c8b920908..5d17b10686 100644
Binary files a/icons/mob/screen_retro.dmi and b/icons/mob/screen_retro.dmi differ
diff --git a/icons/mob/screen_slimecore.dmi b/icons/mob/screen_slimecore.dmi
index 91b01910e3..4e38efbba5 100644
Binary files a/icons/mob/screen_slimecore.dmi and b/icons/mob/screen_slimecore.dmi differ
diff --git a/icons/mob/screen_trasenknox.dmi b/icons/mob/screen_trasenknox.dmi
index bf229f7bad..86e0d076ae 100644
Binary files a/icons/mob/screen_trasenknox.dmi and b/icons/mob/screen_trasenknox.dmi differ
diff --git a/interface/fonts/SpaceMono.ttf b/interface/fonts/SpaceMono.ttf
new file mode 100644
index 0000000000..04e56b923f
Binary files /dev/null and b/interface/fonts/SpaceMono.ttf differ
diff --git a/interface/fonts/fonts.css b/interface/fonts/fonts.css
new file mode 100644
index 0000000000..2fa13f3325
--- /dev/null
+++ b/interface/fonts/fonts.css
@@ -0,0 +1,29 @@
+@font-face {
+ font-family: "Grand9K Pixel";
+ src: url("Grand9K_Pixel.ttf");
+}
+
+@font-face {
+ font-family: "Pixellari";
+ src: url("Pixellari.ttf");
+}
+
+@font-face {
+ font-family: "Space Mono";
+ src: url("SpaceMono.ttf");
+}
+
+@font-face {
+ font-family: "Spess Font";
+ src: url("SpessFont.ttf");
+}
+
+@font-face {
+ font-family: "Tiny Unicode";
+ src: url("TinyUnicode.ttf");
+}
+
+@font-face {
+ font-family: "VCR OSD Mono";
+ src: url("VCR_OSD_MONO.ttf");
+}
diff --git a/interface/fonts/license.txt b/interface/fonts/license.txt
index 9aa70fbac2..b7e6fe6446 100644
--- a/interface/fonts/license.txt
+++ b/interface/fonts/license.txt
@@ -6,6 +6,9 @@ Pixellari created by Zacchary Dempsey-Plante. Website indicates free for commerc
Spess Font created by MTandi (discord) for /tg/station.
+Space Mono Licensed by Google under SIL Open Font License, V1.1.
+(https://openfontlicense.org) (https://fonts.google.com/specimen/Space+Mono)
+
Tiny Unicode created by Jakob Riedle/DuffsDevice. Website indicates free for commercial use.
(https://fontmeme.com/fonts/tiny-unicode-font/)
diff --git a/interface/fonts/space_mono.dm b/interface/fonts/space_mono.dm
new file mode 100644
index 0000000000..3df5e1e954
--- /dev/null
+++ b/interface/fonts/space_mono.dm
@@ -0,0 +1,3 @@
+/datum/font/spacemono
+ name = "Space Mono"
+ font_family = 'interface/fonts/SpaceMono.ttf'
diff --git a/modular_sand/code/_onclick/hud/hud.dm b/modular_sand/code/_onclick/hud/hud.dm
index e925228264..202a1afdb2 100644
--- a/modular_sand/code/_onclick/hud/hud.dm
+++ b/modular_sand/code/_onclick/hud/hud.dm
@@ -9,24 +9,38 @@
/// UI element for thirst
var/atom/movable/screen/thirst
-// Used for getting icons for extra inventory slots
-GLOBAL_LIST_INIT(modular_ui_styles, list(
- 'icons/mob/screen_midnight.dmi' = 'modular_sand/icons/mob/screen_midnight.dmi',
- 'icons/mob/screen_retro.dmi' = 'modular_sand/icons/mob/screen_retro.dmi',
- 'icons/mob/screen_plasmafire.dmi' = 'modular_sand/icons/mob/screen_plasmafire.dmi',
- 'icons/mob/screen_slimecore.dmi' = 'modular_sand/icons/mob/screen_slimecore.dmi',
- 'icons/mob/screen_operative.dmi' = 'modular_sand/icons/mob/screen_operative.dmi',
- 'icons/mob/screen_clockwork.dmi' = 'modular_sand/icons/mob/screen_clockwork.dmi',
- 'icons/mob/screen_trasenknox.dmi' = 'modular_sand/icons/mob/screen_trasenknox.dmi',
- 'modular_sand/icons/mob/screen_liteweb.dmi' = 'modular_sand/icons/mob/screen_liteweb.dmi'
-))
+/proc/ui_style_modular(ui_style, variant = "base")
+ var/static/cache = list()
-// Same as above
-/proc/ui_style_modular(ui_style)
- if(isfile(ui_style))
- return GLOB.modular_ui_styles[ui_style] || GLOB.modular_ui_styles[GLOB.modular_ui_styles[1]]
- else
- return GLOB.modular_ui_styles[ui_style] || GLOB.modular_ui_styles[GLOB.modular_ui_styles[1]]
+ var/check = LAZYACCESSASSOC(cache, ui_style, variant)
+ if(check)
+ return check
+
+ switch(ui_style)
+ if('icons/mob/screen_plasmafire.dmi')
+ . = "modular_sand/icons/hud/screen_plasmafire/"
+ if('icons/mob/screen_slimecore.dmi')
+ . = "modular_sand/icons/hud/screen_slimecore/"
+ if('icons/mob/screen_operative.dmi')
+ . = "modular_sand/icons/hud/screen_operative/"
+ if('icons/mob/screen_clockwork.dmi')
+ . = "modular_sand/icons/hud/screen_clockwork/"
+ if('icons/mob/screen_glass.dmi')
+ . = "modular_sand/icons/hud/screen_glass/"
+ if('icons/mob/screen_trasenknox.dmi')
+ . = "modular_sand/icons/hud/screen_trasenknox/"
+ if('icons/mob/screen_detective.dmi')
+ . = "modular_sand/icons/hud/screen_detective/"
+ if('modular_sand/icons/hud/screen_liteweb/base.dmi')
+ . = "modular_sand/icons/hud/screen_liteweb/"
+ if('modular_sand/icons/hud/screen_corru/base.dmi')
+ . = "modular_sand/icons/hud/screen_corru/"
+ else
+ . = "modular_sand/icons/hud/screen_midnight/"
+
+ . = file("[.][variant].dmi")
+ LAZYADDASSOC(cache, ui_style, variant)
+ cache[ui_style][variant] = .
// Called after updating extra inventory
/datum/hud/proc/extra_inventory_update()
diff --git a/modular_sand/code/_onclick/hud/screen_objects.dm b/modular_sand/code/_onclick/hud/screen_objects.dm
index 76645f025b..c00e378213 100644
--- a/modular_sand/code/_onclick/hud/screen_objects.dm
+++ b/modular_sand/code/_onclick/hud/screen_objects.dm
@@ -2,13 +2,13 @@
/atom/movable/screen/hunger
name = "hunger"
- icon = 'modular_sand/icons/mob/screen_gen.dmi'
+ icon = 'modular_sand/icons/hud/screen_gen.dmi'
icon_state = "nutrition0"
screen_loc = ui_hunger_thirst
/atom/movable/screen/thirst
name = "thirst"
- icon = 'modular_sand/icons/mob/screen_gen.dmi'
+ icon = 'modular_sand/icons/hud/screen_gen.dmi'
icon_state = "hydration0"
screen_loc = ui_hunger_thirst
diff --git a/modular_sand/code/datums/status_effects/buffs.dm b/modular_sand/code/datums/status_effects/buffs.dm
index 165f58c64a..8804fb604b 100644
--- a/modular_sand/code/datums/status_effects/buffs.dm
+++ b/modular_sand/code/datums/status_effects/buffs.dm
@@ -8,5 +8,5 @@
/atom/movable/screen/alert/status_effect/argent
name = "Argent Energized"
desc = "Argent energy rushes through your body! You'll only take 10% damage for the duration of the energy rush!"
- icon = 'modular_sand/icons/mob/screen_alert.dmi'
+ icon = 'modular_sand/icons/hud/screen_alert.dmi'
icon_state = "argent"
diff --git a/modular_sand/code/datums/status_effects/neutral.dm b/modular_sand/code/datums/status_effects/neutral.dm
index 60d9fb13dc..6bbf129bbb 100644
--- a/modular_sand/code/datums/status_effects/neutral.dm
+++ b/modular_sand/code/datums/status_effects/neutral.dm
@@ -84,7 +84,7 @@
/atom/movable/screen/alert/status_effect/dripping_cum
name = "Dripping Cum"
desc = "Your last affairs left you dripping someone's seed."
- icon = 'modular_sand/icons/mob/screen_alert.dmi'
+ icon = 'modular_sand/icons/hud/screen_alert.dmi'
icon_state = "dripping_cum"
/atom/movable/screen/alert/status_effect/dripping_cum/MouseEntered(location,control,params)
diff --git a/modular_sand/icons/mob/screen_alert.dmi b/modular_sand/icons/hud/screen_alert.dmi
similarity index 100%
rename from modular_sand/icons/mob/screen_alert.dmi
rename to modular_sand/icons/hud/screen_alert.dmi
diff --git a/modular_sand/icons/hud/screen_clockwork/base.dmi b/modular_sand/icons/hud/screen_clockwork/base.dmi
new file mode 100644
index 0000000000..1cafaa97a0
Binary files /dev/null and b/modular_sand/icons/hud/screen_clockwork/base.dmi differ
diff --git a/modular_sand/icons/hud/screen_clockwork/health.dmi b/modular_sand/icons/hud/screen_clockwork/health.dmi
new file mode 100644
index 0000000000..bd33d814fa
Binary files /dev/null and b/modular_sand/icons/hud/screen_clockwork/health.dmi differ
diff --git a/modular_sand/icons/hud/screen_clockwork/stamina.dmi b/modular_sand/icons/hud/screen_clockwork/stamina.dmi
new file mode 100644
index 0000000000..69f5b69b50
Binary files /dev/null and b/modular_sand/icons/hud/screen_clockwork/stamina.dmi differ
diff --git a/modular_sand/icons/hud/screen_clockwork/zone.dmi b/modular_sand/icons/hud/screen_clockwork/zone.dmi
new file mode 100644
index 0000000000..5a19d8803a
Binary files /dev/null and b/modular_sand/icons/hud/screen_clockwork/zone.dmi differ
diff --git a/modular_sand/icons/hud/screen_corru/base.dmi b/modular_sand/icons/hud/screen_corru/base.dmi
new file mode 100644
index 0000000000..f5bc0454d3
Binary files /dev/null and b/modular_sand/icons/hud/screen_corru/base.dmi differ
diff --git a/modular_sand/icons/hud/screen_corru/health.dmi b/modular_sand/icons/hud/screen_corru/health.dmi
new file mode 100644
index 0000000000..21b9ce4b8f
Binary files /dev/null and b/modular_sand/icons/hud/screen_corru/health.dmi differ
diff --git a/modular_sand/icons/hud/screen_corru/stamina.dmi b/modular_sand/icons/hud/screen_corru/stamina.dmi
new file mode 100644
index 0000000000..4dde592968
Binary files /dev/null and b/modular_sand/icons/hud/screen_corru/stamina.dmi differ
diff --git a/modular_sand/icons/hud/screen_corru/zone.dmi b/modular_sand/icons/hud/screen_corru/zone.dmi
new file mode 100644
index 0000000000..aa0b660b63
Binary files /dev/null and b/modular_sand/icons/hud/screen_corru/zone.dmi differ
diff --git a/modular_sand/icons/hud/screen_detective/base.dmi b/modular_sand/icons/hud/screen_detective/base.dmi
new file mode 100644
index 0000000000..89832a30e1
Binary files /dev/null and b/modular_sand/icons/hud/screen_detective/base.dmi differ
diff --git a/modular_sand/icons/hud/screen_detective/health.dmi b/modular_sand/icons/hud/screen_detective/health.dmi
new file mode 100644
index 0000000000..bd33d814fa
Binary files /dev/null and b/modular_sand/icons/hud/screen_detective/health.dmi differ
diff --git a/modular_sand/icons/hud/screen_detective/stamina.dmi b/modular_sand/icons/hud/screen_detective/stamina.dmi
new file mode 100644
index 0000000000..69f5b69b50
Binary files /dev/null and b/modular_sand/icons/hud/screen_detective/stamina.dmi differ
diff --git a/modular_sand/icons/hud/screen_detective/zone.dmi b/modular_sand/icons/hud/screen_detective/zone.dmi
new file mode 100644
index 0000000000..5a19d8803a
Binary files /dev/null and b/modular_sand/icons/hud/screen_detective/zone.dmi differ
diff --git a/modular_sand/icons/mob/screen_gen.dmi b/modular_sand/icons/hud/screen_gen.dmi
similarity index 100%
rename from modular_sand/icons/mob/screen_gen.dmi
rename to modular_sand/icons/hud/screen_gen.dmi
diff --git a/modular_sand/icons/hud/screen_glass/base.dmi b/modular_sand/icons/hud/screen_glass/base.dmi
new file mode 100644
index 0000000000..7fd9dba2be
Binary files /dev/null and b/modular_sand/icons/hud/screen_glass/base.dmi differ
diff --git a/modular_sand/icons/hud/screen_glass/health.dmi b/modular_sand/icons/hud/screen_glass/health.dmi
new file mode 100644
index 0000000000..bd33d814fa
Binary files /dev/null and b/modular_sand/icons/hud/screen_glass/health.dmi differ
diff --git a/modular_sand/icons/hud/screen_glass/stamina.dmi b/modular_sand/icons/hud/screen_glass/stamina.dmi
new file mode 100644
index 0000000000..69f5b69b50
Binary files /dev/null and b/modular_sand/icons/hud/screen_glass/stamina.dmi differ
diff --git a/modular_sand/icons/hud/screen_glass/zone.dmi b/modular_sand/icons/hud/screen_glass/zone.dmi
new file mode 100644
index 0000000000..5a19d8803a
Binary files /dev/null and b/modular_sand/icons/hud/screen_glass/zone.dmi differ
diff --git a/modular_sand/icons/hud/screen_liteweb/base.dmi b/modular_sand/icons/hud/screen_liteweb/base.dmi
new file mode 100644
index 0000000000..b44e2f944f
Binary files /dev/null and b/modular_sand/icons/hud/screen_liteweb/base.dmi differ
diff --git a/modular_sand/icons/hud/screen_liteweb/health.dmi b/modular_sand/icons/hud/screen_liteweb/health.dmi
new file mode 100644
index 0000000000..bd33d814fa
Binary files /dev/null and b/modular_sand/icons/hud/screen_liteweb/health.dmi differ
diff --git a/modular_sand/icons/hud/screen_liteweb/stamina.dmi b/modular_sand/icons/hud/screen_liteweb/stamina.dmi
new file mode 100644
index 0000000000..69f5b69b50
Binary files /dev/null and b/modular_sand/icons/hud/screen_liteweb/stamina.dmi differ
diff --git a/modular_sand/icons/hud/screen_liteweb/zone.dmi b/modular_sand/icons/hud/screen_liteweb/zone.dmi
new file mode 100644
index 0000000000..5a19d8803a
Binary files /dev/null and b/modular_sand/icons/hud/screen_liteweb/zone.dmi differ
diff --git a/modular_sand/icons/hud/screen_midnight/base.dmi b/modular_sand/icons/hud/screen_midnight/base.dmi
new file mode 100644
index 0000000000..89832a30e1
Binary files /dev/null and b/modular_sand/icons/hud/screen_midnight/base.dmi differ
diff --git a/modular_sand/icons/hud/screen_midnight/health.dmi b/modular_sand/icons/hud/screen_midnight/health.dmi
new file mode 100644
index 0000000000..bd33d814fa
Binary files /dev/null and b/modular_sand/icons/hud/screen_midnight/health.dmi differ
diff --git a/modular_sand/icons/hud/screen_midnight/stamina.dmi b/modular_sand/icons/hud/screen_midnight/stamina.dmi
new file mode 100644
index 0000000000..69f5b69b50
Binary files /dev/null and b/modular_sand/icons/hud/screen_midnight/stamina.dmi differ
diff --git a/modular_sand/icons/hud/screen_midnight/zone.dmi b/modular_sand/icons/hud/screen_midnight/zone.dmi
new file mode 100644
index 0000000000..5a19d8803a
Binary files /dev/null and b/modular_sand/icons/hud/screen_midnight/zone.dmi differ
diff --git a/modular_sand/icons/hud/screen_operative/base.dmi b/modular_sand/icons/hud/screen_operative/base.dmi
new file mode 100644
index 0000000000..bc3a651875
Binary files /dev/null and b/modular_sand/icons/hud/screen_operative/base.dmi differ
diff --git a/modular_sand/icons/hud/screen_operative/health.dmi b/modular_sand/icons/hud/screen_operative/health.dmi
new file mode 100644
index 0000000000..bd33d814fa
Binary files /dev/null and b/modular_sand/icons/hud/screen_operative/health.dmi differ
diff --git a/modular_sand/icons/hud/screen_operative/stamina.dmi b/modular_sand/icons/hud/screen_operative/stamina.dmi
new file mode 100644
index 0000000000..69f5b69b50
Binary files /dev/null and b/modular_sand/icons/hud/screen_operative/stamina.dmi differ
diff --git a/modular_sand/icons/hud/screen_operative/zone.dmi b/modular_sand/icons/hud/screen_operative/zone.dmi
new file mode 100644
index 0000000000..5a19d8803a
Binary files /dev/null and b/modular_sand/icons/hud/screen_operative/zone.dmi differ
diff --git a/modular_sand/icons/hud/screen_plasmafire/base.dmi b/modular_sand/icons/hud/screen_plasmafire/base.dmi
new file mode 100644
index 0000000000..24aa4de840
Binary files /dev/null and b/modular_sand/icons/hud/screen_plasmafire/base.dmi differ
diff --git a/modular_sand/icons/hud/screen_plasmafire/health.dmi b/modular_sand/icons/hud/screen_plasmafire/health.dmi
new file mode 100644
index 0000000000..bd33d814fa
Binary files /dev/null and b/modular_sand/icons/hud/screen_plasmafire/health.dmi differ
diff --git a/modular_sand/icons/hud/screen_plasmafire/stamina.dmi b/modular_sand/icons/hud/screen_plasmafire/stamina.dmi
new file mode 100644
index 0000000000..69f5b69b50
Binary files /dev/null and b/modular_sand/icons/hud/screen_plasmafire/stamina.dmi differ
diff --git a/modular_sand/icons/hud/screen_plasmafire/zone.dmi b/modular_sand/icons/hud/screen_plasmafire/zone.dmi
new file mode 100644
index 0000000000..5a19d8803a
Binary files /dev/null and b/modular_sand/icons/hud/screen_plasmafire/zone.dmi differ
diff --git a/modular_sand/icons/hud/screen_retro/base.dmi b/modular_sand/icons/hud/screen_retro/base.dmi
new file mode 100644
index 0000000000..fa95f0e5a7
Binary files /dev/null and b/modular_sand/icons/hud/screen_retro/base.dmi differ
diff --git a/modular_sand/icons/hud/screen_retro/health.dmi b/modular_sand/icons/hud/screen_retro/health.dmi
new file mode 100644
index 0000000000..bd2900d344
Binary files /dev/null and b/modular_sand/icons/hud/screen_retro/health.dmi differ
diff --git a/modular_sand/icons/hud/screen_retro/stamina.dmi b/modular_sand/icons/hud/screen_retro/stamina.dmi
new file mode 100644
index 0000000000..2102225b8a
Binary files /dev/null and b/modular_sand/icons/hud/screen_retro/stamina.dmi differ
diff --git a/modular_sand/icons/hud/screen_retro/zone.dmi b/modular_sand/icons/hud/screen_retro/zone.dmi
new file mode 100644
index 0000000000..e19907bbc8
Binary files /dev/null and b/modular_sand/icons/hud/screen_retro/zone.dmi differ
diff --git a/modular_sand/icons/hud/screen_slimecore/base.dmi b/modular_sand/icons/hud/screen_slimecore/base.dmi
new file mode 100644
index 0000000000..dc0fde238e
Binary files /dev/null and b/modular_sand/icons/hud/screen_slimecore/base.dmi differ
diff --git a/modular_sand/icons/hud/screen_slimecore/health.dmi b/modular_sand/icons/hud/screen_slimecore/health.dmi
new file mode 100644
index 0000000000..bd33d814fa
Binary files /dev/null and b/modular_sand/icons/hud/screen_slimecore/health.dmi differ
diff --git a/modular_sand/icons/hud/screen_slimecore/stamina.dmi b/modular_sand/icons/hud/screen_slimecore/stamina.dmi
new file mode 100644
index 0000000000..69f5b69b50
Binary files /dev/null and b/modular_sand/icons/hud/screen_slimecore/stamina.dmi differ
diff --git a/modular_sand/icons/hud/screen_slimecore/zone.dmi b/modular_sand/icons/hud/screen_slimecore/zone.dmi
new file mode 100644
index 0000000000..5a19d8803a
Binary files /dev/null and b/modular_sand/icons/hud/screen_slimecore/zone.dmi differ
diff --git a/modular_sand/icons/hud/screen_trasenknox/base.dmi b/modular_sand/icons/hud/screen_trasenknox/base.dmi
new file mode 100644
index 0000000000..9cae260e4a
Binary files /dev/null and b/modular_sand/icons/hud/screen_trasenknox/base.dmi differ
diff --git a/modular_sand/icons/hud/screen_trasenknox/health.dmi b/modular_sand/icons/hud/screen_trasenknox/health.dmi
new file mode 100644
index 0000000000..bd33d814fa
Binary files /dev/null and b/modular_sand/icons/hud/screen_trasenknox/health.dmi differ
diff --git a/modular_sand/icons/hud/screen_trasenknox/stamina.dmi b/modular_sand/icons/hud/screen_trasenknox/stamina.dmi
new file mode 100644
index 0000000000..69f5b69b50
Binary files /dev/null and b/modular_sand/icons/hud/screen_trasenknox/stamina.dmi differ
diff --git a/modular_sand/icons/hud/screen_trasenknox/zone.dmi b/modular_sand/icons/hud/screen_trasenknox/zone.dmi
new file mode 100644
index 0000000000..5a19d8803a
Binary files /dev/null and b/modular_sand/icons/hud/screen_trasenknox/zone.dmi differ
diff --git a/modular_sand/icons/mob/screen_clockwork.dmi b/modular_sand/icons/mob/screen_clockwork.dmi
deleted file mode 100644
index eefd18fdc5..0000000000
Binary files a/modular_sand/icons/mob/screen_clockwork.dmi and /dev/null differ
diff --git a/modular_sand/icons/mob/screen_liteweb.dmi b/modular_sand/icons/mob/screen_liteweb.dmi
deleted file mode 100644
index b4d8cbeac0..0000000000
Binary files a/modular_sand/icons/mob/screen_liteweb.dmi and /dev/null differ
diff --git a/modular_sand/icons/mob/screen_midnight.dmi b/modular_sand/icons/mob/screen_midnight.dmi
deleted file mode 100644
index 9366925181..0000000000
Binary files a/modular_sand/icons/mob/screen_midnight.dmi and /dev/null differ
diff --git a/modular_sand/icons/mob/screen_operative.dmi b/modular_sand/icons/mob/screen_operative.dmi
deleted file mode 100644
index a435e1bece..0000000000
Binary files a/modular_sand/icons/mob/screen_operative.dmi and /dev/null differ
diff --git a/modular_sand/icons/mob/screen_plasmafire.dmi b/modular_sand/icons/mob/screen_plasmafire.dmi
deleted file mode 100644
index 61d501dbe2..0000000000
Binary files a/modular_sand/icons/mob/screen_plasmafire.dmi and /dev/null differ
diff --git a/modular_sand/icons/mob/screen_retro.dmi b/modular_sand/icons/mob/screen_retro.dmi
deleted file mode 100644
index a25def4d11..0000000000
Binary files a/modular_sand/icons/mob/screen_retro.dmi and /dev/null differ
diff --git a/modular_sand/icons/mob/screen_slimecore.dmi b/modular_sand/icons/mob/screen_slimecore.dmi
deleted file mode 100644
index 1b51613f97..0000000000
Binary files a/modular_sand/icons/mob/screen_slimecore.dmi and /dev/null differ
diff --git a/modular_sand/icons/mob/screen_trasenknox.dmi b/modular_sand/icons/mob/screen_trasenknox.dmi
deleted file mode 100644
index 2cd7d59617..0000000000
Binary files a/modular_sand/icons/mob/screen_trasenknox.dmi and /dev/null differ
diff --git a/tgstation.dme b/tgstation.dme
index a1c8a8eab3..9fac7f9b7d 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -1922,6 +1922,7 @@
#include "code\modules\asset_cache\assets\common.dm"
#include "code\modules\asset_cache\assets\condiments.dm"
#include "code\modules\asset_cache\assets\fish.dm"
+#include "code\modules\asset_cache\assets\font.dm"
#include "code\modules\asset_cache\assets\fontawesome.dm"
#include "code\modules\asset_cache\assets\genetics.dm"
#include "code\modules\asset_cache\assets\headers.dm"
@@ -3940,6 +3941,7 @@
#include "interface\fonts\fonts_datum.dm"
#include "interface\fonts\grand_9k.dm"
#include "interface\fonts\pixellari.dm"
+#include "interface\fonts\space_mono.dm"
#include "interface\fonts\spess_font.dm"
#include "interface\fonts\tiny_unicode.dm"
#include "interface\fonts\vcr_osd_mono.dm"
diff --git a/tools/build/build.js b/tools/build/build.js
index f8d3a9a7dd..d2c76458b6 100755
--- a/tools/build/build.js
+++ b/tools/build/build.js
@@ -62,6 +62,8 @@ export const DmTarget = new Juke.Target({
'icons/**',
'interface/**',
`${DME_NAME}.dme`,
+ 'modular_citadel/**',
+ 'modular_sand/**',
],
outputs: [
`${DME_NAME}.dmb`,