diff --git a/code/__DEFINES/fonts.dm b/code/__DEFINES/fonts.dm
index 6b00195f59b0..e3e2e7ab7f69 100644
--- a/code/__DEFINES/fonts.dm
+++ b/code/__DEFINES/fonts.dm
@@ -14,3 +14,11 @@
/// Emoji icon set
#define EMOJI_SET 'icons/ui_icons/emoji/emoji.dmi'
+
+// Font metrics bitfield
+/// Include leading A width and trailing C width in GetWidth() or in DrawText()
+#define INCLUDE_AC (1<<0)
+
+DEFINE_BITFIELD(font_flags, list(
+ "INCLUDE_AC" = INCLUDE_AC,
+))
diff --git a/code/__DEFINES/text.dm b/code/__DEFINES/text.dm
index 3cffec0521f7..8a7731618bbf 100644
--- a/code/__DEFINES/text.dm
+++ b/code/__DEFINES/text.dm
@@ -1,10 +1,44 @@
/// Does 4 spaces. Used as a makeshift tabulator.
#define FOURSPACES " "
+/// Standard maptext
/// Prepares a text to be used for maptext. Use this so it doesn't look hideous.
#define MAPTEXT(text) {"[##text]"}
-/// Prepares a text to be used for maptext, using a font that can handle larger text better.
+/**
+ * Pixel-perfect scaled fonts for use in the MAP element as defined in skin.dmf
+ *
+ * Four sizes to choose from, use the sizes as mentioned below.
+ * Between the variations and a step there should be an option that fits your use case.
+ * BYOND uses pt sizing, different than px used in TGUI. Using px will make it look blurry due to poor antialiasing.
+ *
+ * Default sizes are prefilled in the macro for ease of use and a consistent visual look.
+ * To use a step other than the default in the macro, specify it in a span style.
+ * For example: MAPTEXT_PIXELLARI("Some large maptext here")
+ */
+/// Large size (ie: context tooltips) - Size options: 12pt 24pt.
+#define MAPTEXT_PIXELLARI(text) {"[##text]"}
+
+/// Standard size (ie: normal runechat) - Size options: 6pt 12pt 18pt.
+#define MAPTEXT_GRAND9K(text) {"[##text]"}
+
+/// Small size. (ie: context subtooltips, spell delays) - Size options: 12pt 24pt.
+#define MAPTEXT_TINY_UNICODE(text) {"[##text]"}
+
+/// Smallest size. (ie: whisper runechat) - Size options: 6pt 12pt 18pt.
+#define MAPTEXT_SPESSFONT(text) {"[##text]"}
+
+/**
+ * Prepares a text to be used for maptext, using a variable size font.
+ *
+ * More flexible but doesn't scale pixel perfect to BYOND icon resolutions.
+ * (May be blurry.) Can use any size in pt or px.
+ *
+ * You MUST Specify the size when using the macro
+ * For example: MAPTEXT_VCR_OSD_MONO("Some large maptext here")
+ */
+/// Prepares a text to be used for maptext, using a variable size font.
+/// Variable size font. More flexible but doesn't scale pixel perfect to BYOND icon resolutions. (May be blurry.) Can use any size in pt or px.
#define MAPTEXT_VCR_OSD_MONO(text) {"[##text]"}
/// Macro from Lummox used to get height from a MeasureText proc.
diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm
index adabbeee3ce4..6b197dbc5e43 100644
--- a/code/__HELPERS/icons.dm
+++ b/code/__HELPERS/icons.dm
@@ -992,7 +992,7 @@ world
letter = lowertext(letter)
var/image/text_image = new(loc = A)
- text_image.maptext = MAPTEXT("[letter]")
+ text_image.maptext = MAPTEXT("[letter]")
text_image.pixel_x = 7
text_image.pixel_y = 5
qdel(atom_icon)
diff --git a/code/_onclick/hud/credits.dm b/code/_onclick/hud/credits.dm
index 6de4b735bd19..e39e1ef36d07 100644
--- a/code/_onclick/hud/credits.dm
+++ b/code/_onclick/hud/credits.dm
@@ -44,7 +44,7 @@
icon = I
parent = P
icon_state = credited
- maptext = MAPTEXT(credited)
+ maptext = MAPTEXT_PIXELLARI(credited)
maptext_x = world.icon_size + 8
maptext_y = (world.icon_size / 2) - 4
maptext_width = world.icon_size * 3
diff --git a/code/datums/actions/cooldown_action.dm b/code/datums/actions/cooldown_action.dm
index d4d02901dda2..ed4309c36e1c 100644
--- a/code/datums/actions/cooldown_action.dm
+++ b/code/datums/actions/cooldown_action.dm
@@ -66,10 +66,10 @@
/datum/action/cooldown/create_button()
var/atom/movable/screen/movable/action_button/button = ..()
button.maptext = ""
- button.maptext_x = 6
+ button.maptext_x = 4
button.maptext_y = 2
- button.maptext_width = 24
- button.maptext_height = 12
+ button.maptext_width = 32
+ button.maptext_height = 16
return button
/datum/action/cooldown/update_button_status(atom/movable/screen/movable/action_button/button, force = FALSE)
@@ -79,9 +79,9 @@
button.maptext = ""
else
if (cooldown_rounding > 0)
- button.maptext = MAPTEXT("[round(time_left/10, cooldown_rounding)]")
+ button.maptext = MAPTEXT_TINY_UNICODE("[round(time_left/10, cooldown_rounding)]")
else
- button.maptext = MAPTEXT("[round(time_left/10)]")
+ button.maptext = MAPTEXT_TINY_UNICODE("[round(time_left/10)]")
if(!IsAvailable() || !is_action_active(button))
return
diff --git a/code/datums/chatmessage.dm b/code/datums/chatmessage.dm
index 361915e5941d..7c5c8a6df5b1 100644
--- a/code/datums/chatmessage.dm
+++ b/code/datums/chatmessage.dm
@@ -13,7 +13,7 @@
/// Approximate height in pixels of an 'average' line, used for height decay
#define CHAT_MESSAGE_APPROX_LHEIGHT 11
/// Max width of chat message in pixels
-#define CHAT_MESSAGE_WIDTH 96
+#define CHAT_MESSAGE_WIDTH 112
/// The dimensions of the chat message icons
#define CHAT_MESSAGE_ICON_SIZE 9
@@ -145,6 +145,10 @@
if (!ismob(target))
extra_classes |= "small"
+ // Why are you yelling?
+ if(copytext_char(text, -2) == "!!")
+ extra_classes |= SPAN_YELL
+
var/list/prefixes
// Append radio icon if from a virtual speaker
@@ -171,7 +175,7 @@
var/tgt_color = extra_classes.Find("italics") ? target.chat_color_darkened : target.chat_color
// Approximate text height
- var/complete_text = ""
+ var/complete_text = ""
var/mheight
WXH_TO_HEIGHT(owned_by.MeasureText(complete_text, null, CHAT_MESSAGE_WIDTH), mheight)
@@ -235,7 +239,7 @@
message.pixel_y = target.maptext_height
message.pixel_x = -target.base_pixel_x
message.maptext_width = CHAT_MESSAGE_WIDTH
- message.maptext_height = mheight
+ message.maptext_height = mheight * 1.25 // We add extra because some characters are superscript, like actions
message.maptext_x = (CHAT_MESSAGE_WIDTH - owner.bound_width) * -0.5
message.maptext = MAPTEXT(complete_text)
diff --git a/code/datums/components/admin_popup.dm b/code/datums/components/admin_popup.dm
index 6edd839942d5..1c821808a40d 100644
--- a/code/datums/components/admin_popup.dm
+++ b/code/datums/components/admin_popup.dm
@@ -104,9 +104,9 @@
last_color_index = (last_color_index % colors.len) + 1
- var/message = ""
- message += "HEY! An admin is trying to talk to you!
Check your chat window, and click their name to respond!"
- message += ""
+ var/message = ""
+ message += "HEY!
An admin is trying to talk to you!
Check your chat window,
and click their name to respond!"
+ message += ""
maptext = MAPTEXT(message)
last_update_time = world.time
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 70d35dd1bdf1..d3d5f6095427 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -2046,7 +2046,7 @@
active_hud.screentip_text.maptext = ""
return
- active_hud.screentip_text.maptext_y = 0
+ active_hud.screentip_text.maptext_y = 10 // 10px lines us up with the action buttons top left corner
var/lmb_rmb_line = ""
var/ctrl_lmb_ctrl_rmb_line = ""
var/alt_lmb_alt_rmb_line = ""
@@ -2113,15 +2113,15 @@
extra_lines++
if(extra_lines)
- extra_context = "
[lmb_rmb_line][ctrl_lmb_ctrl_rmb_line][alt_lmb_alt_rmb_line][shift_lmb_ctrl_shift_lmb_line]"
- //first extra line pushes atom name line up 10px, subsequent lines push it up 9px, this offsets that and keeps the first line in the same place
- active_hud.screentip_text.maptext_y = -10 + (extra_lines - 1) * -9
+ extra_context = "
[lmb_rmb_line][ctrl_lmb_ctrl_rmb_line][alt_lmb_alt_rmb_line][shift_lmb_ctrl_shift_lmb_line]"
+ //first extra line pushes atom name line up 11px, subsequent lines push it up 9px, this offsets that and keeps the first line in the same place
+ active_hud.screentip_text.maptext_y = -1 + (extra_lines - 1) * -9
if (screentips_enabled == SCREENTIP_PREFERENCE_CONTEXT_ONLY && extra_context == "")
active_hud.screentip_text.maptext = ""
else
//We inline a MAPTEXT() here, because there's no good way to statically add to a string like this
- active_hud.screentip_text.maptext = "[name][extra_context]"
+ active_hud.screentip_text.maptext = "[name][extra_context]"
/// Gets a merger datum representing the connected blob of objects in the allowed_types argument
/atom/proc/GetMergeGroup(id, list/allowed_types)
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index 0a7bfd308ede..96dc1918e7df 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -1,11 +1,15 @@
// Status display
-// (formerly Countdown timer display)
-#define MAX_STATIC_WIDTH 25
-#define FONT_STYLE "5pt 'Small Fonts'"
+#define MAX_STATIC_WIDTH 22
+#define FONT_STYLE "12pt 'TinyUnicode'"
#define SCROLL_RATE (0.04 SECONDS) // time per pixel
-#define LINE1_Y -8
-#define LINE2_Y -15
+#define SCROLL_PADDING 2 // how many pixels we chop to make a smooth loop
+#define LINE1_X 1
+#define LINE1_Y -4
+#define LINE2_X 1
+#define LINE2_Y -11
+#define STATUS_DISPLAY_FONT_DATUM /datum/font/tiny_unicode/size_12pt
+
/// Status display which can show images and scrolling text.
/obj/machinery/status_display
name = "status display"
@@ -124,14 +128,14 @@
* * message - the new message text.
* Returns new /obj/effect/overlay/status_display_text or null if unchanged.
*/
-/obj/machinery/status_display/proc/update_message(obj/effect/overlay/status_display_text/overlay, line_y, message, x_offset)
+/obj/machinery/status_display/proc/update_message(obj/effect/overlay/status_display_text/overlay, line_y, message, x_offset, line_pair)
if(overlay && message == overlay.message)
return null
if(overlay)
qdel(overlay)
- var/obj/effect/overlay/status_display_text/new_status_display_text = new(src, line_y, message, text_color, header_text_color, x_offset)
+ var/obj/effect/overlay/status_display_text/new_status_display_text = new(src, line_y, message, text_color, header_text_color, x_offset, line_pair)
// Draw our object visually "in front" of this display, taking advantage of sidemap
new_status_display_text.pixel_y = -32
new_status_display_text.pixel_z = 32
@@ -149,7 +153,7 @@
return
set_light(l_outer_range = 1.4, l_power = 0.7, l_color = LIGHT_COLOR_BLUE) // blue light
-/obj/machinery/status_display/update_overlays()
+/obj/machinery/status_display/update_overlays(updates)
. = ..()
if(machine_stat & (NOPOWER|BROKEN))
@@ -167,10 +171,18 @@
if(current_picture == AI_DISPLAY_DONT_GLOW) // If the thing's off, don't display the emissive yeah?
return .
else
- var/overlay = update_message(message1_overlay, LINE1_Y, message1)
+ var/line1_metric
+ var/line2_metric
+ var/line_pair
+ var/datum/font/display_font = new STATUS_DISPLAY_FONT_DATUM()
+ line1_metric = display_font.get_metrics(message1)
+ line2_metric = display_font.get_metrics(message2)
+ line_pair = (line1_metric > line2_metric ? line1_metric : line2_metric)
+
+ var/overlay = update_message(message1_overlay, LINE1_Y, message1, LINE1_X, line_pair)
if(overlay)
message1_overlay = overlay
- overlay = update_message(message2_overlay, LINE2_Y, message2)
+ overlay = update_message(message2_overlay, LINE2_Y, message2, LINE2_X, line_pair)
if(overlay)
message2_overlay = overlay
@@ -217,10 +229,10 @@
/obj/machinery/status_display/proc/display_shuttle_status(obj/docking_port/mobile/shuttle)
if(!shuttle)
// the shuttle is missing - no processing
- set_messages("shutl?","")
+ set_messages("shutl","not in service")
return PROCESS_KILL
else if(shuttle.timer)
- var/line1 = "- [shuttle.getModeStr()] -"
+ var/line1 = "<<< [shuttle.getModeStr()]"
var/line2 = shuttle.getTimerStr()
set_messages(line1, line2)
@@ -245,39 +257,23 @@
// If the line is short enough to not marquee, and it matches this, it's a header.
var/static/regex/header_regex = regex("^-.*-$")
- /// Width of each character, including kerning gap afterwards.
- /// We don't use rich text or anything fancy, so we can bake these values.
- var/static/list/char_widths = list(
- // ! " # $ % & ' ( ) * + , - . /
- 1, 2, 3, 5, 4, 5, 5, 2, 3, 3, 3, 4, 2, 3, 2, 3,
- // 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
- 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 3, 3, 3, 3,
- // @ A B C D E F G H I J K L M N O
- 7, 5, 5, 5, 5, 4, 4, 5, 5, 2, 4, 5, 4, 6, 5, 5,
- // P Q R S T U V W X Y Z [ \ ] ^ _
- 5, 5, 5, 5, 4, 5, 4, 6, 4, 4, 4, 3, 3, 3, 4, 4,
- // ` a b c d e f g h i j k l m n o
- 3, 5, 5, 5, 5, 4, 4, 5, 5, 2, 4, 5, 4, 6, 5, 5,
- // p q r s t u v w x y z { | } ~
- 5, 5, 5, 5, 4, 5, 4, 6, 4, 4, 4, 3, 2, 3, 4,
- )
-
-/obj/effect/overlay/status_display_text/Initialize(mapload, yoffset, line, text_color, header_text_color, xoffset = 0)
+/obj/effect/overlay/status_display_text/Initialize(mapload, yoffset, line, text_color, header_text_color, xoffset = 0, line_pair)
. = ..()
maptext_y = yoffset
message = line
- var/line_width = measure_width(line)
+ var/datum/font/display_font = new STATUS_DISPLAY_FONT_DATUM()
+ var/line_width = display_font.get_metrics(line)
if(line_width > MAX_STATIC_WIDTH)
// Marquee text
- var/marquee_message = "[line] - [line] - [line]"
+ var/marquee_message = "[line] [line] [line]"
// Width of full content. Must of these is never revealed unless the user inputted a single character.
- var/full_marquee_width = measure_width(marquee_message)
+ var/full_marquee_width = display_font.get_metrics("[marquee_message] ")
// We loop after only this much has passed.
- var/looping_marquee_width = measure_width("[line] - ")
+ var/looping_marquee_width = (display_font.get_metrics("[line] ]") - SCROLL_PADDING)
maptext = generate_text(marquee_message, center = FALSE, text_color = text_color)
maptext_width = full_marquee_width
@@ -287,45 +283,24 @@
add_filter("mask", 1, alpha_mask_filter(icon = icon(icon, "outline")))
// Scroll.
- var/time = looping_marquee_width * SCROLL_RATE
- animate(src, maptext_x = -looping_marquee_width, time = time, loop = -1)
- animate(maptext_x = 0, time = 0)
+ var/time = line_pair * SCROLL_RATE
+ animate(src, maptext_x = (-looping_marquee_width) + MAX_STATIC_WIDTH, time = time, loop = -1)
+ animate(maptext_x = MAX_STATIC_WIDTH, time = 0)
else
// Centered text
var/color = header_regex.Find(line) ? header_text_color : text_color
maptext = generate_text(line, center = TRUE, text_color = color)
maptext_x = xoffset //Defaults to 0, this would be centered unless overided
-/**
- * A hyper-streamlined version of MeasureText that doesn't support different fonts, rich formatting, or multiline.
- * But it also doesn't require a client.
- *
- * Returns the width in pixels
- *
- * Arguments:
- * * text - the text to measure
- */
-/obj/effect/overlay/status_display_text/proc/measure_width(text)
- var/width = 0
- for(var/text_idx in 1 to length(text))
- var/ascii = text2ascii(text, text_idx)
- if(!(ascii in 0x20 to 0x7E))
- // So we can't possibly runtime, even though the input should be in range already.
- width += 3
- continue
- width += char_widths[ascii - 0x1F]
-
- return width
-
/**
* Generate the actual maptext.
* Arguments:
* * text - the text to display
- * * center - center the text if TRUE, otherwise left-align
+ * * center - center the text if TRUE, otherwise right-align (the direction the text is coming from)
* * text_color - the text color
*/
/obj/effect/overlay/status_display_text/proc/generate_text(text, center, text_color)
- return {"
[text]
"}
+ return {"[text]
"}
/// Evac display which shows shuttle timer or message set by Command.
/obj/machinery/status_display/evac
@@ -412,8 +387,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/status_display/evac, 32)
if(!SSshuttle.supply)
// Might be missing in our first update on initialize before shuttles
// have loaded. Cross our fingers that it will soon return.
- line1 = "CARGO"
- line2 = "shutl?"
+ line1 = "shutl"
+ line2 = "not in service"
else if(SSshuttle.supply.mode == SHUTTLE_IDLE)
if(is_station_level(SSshuttle.supply.z))
line1 = "CARGO"
@@ -422,7 +397,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/status_display/evac, 32)
line1 = ""
line2 = ""
else
- line1 = "- [SSshuttle.supply.getModeStr()] -"
+ line1 = "<<< [SSshuttle.supply.getModeStr()]"
line2 = SSshuttle.supply.getTimerStr()
set_messages(line1, line2)
@@ -602,5 +577,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/status_display/ai, 32)
#undef MAX_STATIC_WIDTH
#undef FONT_STYLE
#undef SCROLL_RATE
+#undef LINE1_X
#undef LINE1_Y
+#undef LINE2_X
#undef LINE2_Y
+#undef STATUS_DISPLAY_FONT_DATUM
diff --git a/code/game/objects/effects/countdown.dm b/code/game/objects/effects/countdown.dm
index cccf77b20655..f820397c0d9f 100644
--- a/code/game/objects/effects/countdown.dm
+++ b/code/game/objects/effects/countdown.dm
@@ -64,7 +64,7 @@
displayed_text = new_val
if(displayed_text)
- maptext = MAPTEXT("[displayed_text]")
+ maptext = MAPTEXT("[displayed_text]")
else
maptext = null
@@ -102,14 +102,13 @@
/obj/effect/countdown/supermatter
name = "supermatter damage"
- text_size = 1
color = "#00ff80"
/obj/effect/countdown/supermatter/get_value()
var/obj/machinery/power/supermatter_crystal/S = attached_to
if(!istype(S))
return
- return "[round(S.get_integrity_percent())]%
"
+ return "[round(S.get_integrity_percent())]%
"
/obj/effect/countdown/transformer
name = "transformer countdown"
diff --git a/code/game/say.dm b/code/game/say.dm
index 2afb765f6066..83f14d6e7452 100644
--- a/code/game/say.dm
+++ b/code/game/say.dm
@@ -164,7 +164,7 @@ GLOBAL_LIST_INIT(freqtospan, list(
/// Transforms the speech emphasis mods from [/atom/movable/proc/say_emphasis] into the appropriate HTML tags. Includes escaping.
#define ENCODE_HTML_EMPHASIS(input, char, html, varname) \
var/static/regex/##varname = regex("(?$1[html]>")
+ input = varname.Replace_char(input, "<[html]>$1[html]>") //zero-width space to force maptext to respect closing tags.
/// Scans the input sentence for speech emphasis modifiers, notably |italics|, +bold+, and _underline_ -mothblocks
/atom/movable/proc/say_emphasis(input)
diff --git a/code/modules/client/preferences/screentips.dm b/code/modules/client/preferences/screentips.dm
index 5566f28b539f..fe2578233751 100644
--- a/code/modules/client/preferences/screentips.dm
+++ b/code/modules/client/preferences/screentips.dm
@@ -35,4 +35,4 @@
client.mob?.hud_used?.screentip_color = value
/datum/preference/color/screentip_color/create_default_value()
- return "#ffd391"
+ return LIGHT_COLOR_FAINT_BLUE
diff --git a/code/modules/events/wizard/rpgtitles.dm b/code/modules/events/wizard/rpgtitles.dm
index b2890150c93d..37eae2459f62 100644
--- a/code/modules/events/wizard/rpgtitles.dm
+++ b/code/modules/events/wizard/rpgtitles.dm
@@ -42,7 +42,7 @@ GLOBAL_DATUM(rpgtitle_controller, /datum/rpgtitle_controller)
//we must prepare for the mother of all strings
new_crewmember.maptext_height = max(new_crewmember.maptext_height, 32)
- new_crewmember.maptext_width = max(new_crewmember.maptext_width, 80)
+ new_crewmember.maptext_width = max(new_crewmember.maptext_width, 112)
new_crewmember.maptext_x = -24 - new_crewmember.base_pixel_x
new_crewmember.maptext_y = -32
@@ -90,7 +90,7 @@ GLOBAL_DATUM(rpgtitle_controller, /datum/rpgtitle_controller)
maptext_title += "[applicable_biotypes[iteration][1]] "
//mother of all strings...
- new_crewmember.maptext = "Level [rand(1, 100)] [maptext_title]"
+ new_crewmember.maptext = MAPTEXT_TINY_UNICODE("Level [rand(1, 100)] [maptext_title]")
if(!(job.job_flags & JOB_CREW_MEMBER))
return
diff --git a/code/modules/industrial_lift/elevator/elevator_indicator.dm b/code/modules/industrial_lift/elevator/elevator_indicator.dm
index 87ff496e3a44..77de8f5fed1e 100644
--- a/code/modules/industrial_lift/elevator/elevator_indicator.dm
+++ b/code/modules/industrial_lift/elevator/elevator_indicator.dm
@@ -19,10 +19,10 @@
light_color = LIGHT_COLOR_DARK_BLUE
luminosity = 1
- maptext_x = 17
- maptext_y = 21
- maptext_width = 4
- maptext_height = 8
+ maptext_x = 18
+ maptext_y = 20
+ maptext_width = 8
+ maptext_height = 16
/// What specific_lift_id do we link with?
var/linked_elevator_id
@@ -150,7 +150,7 @@
return
set_light(l_on = TRUE)
- maptext = {"[current_lift_floor]
"}
+ maptext = "[current_lift_floor]
"
/obj/machinery/lift_indicator/update_overlays()
. = ..()
diff --git a/interface/fonts.dm b/interface/fonts.dm
deleted file mode 100644
index 0bfc9c728c7c..000000000000
--- a/interface/fonts.dm
+++ /dev/null
@@ -1,10 +0,0 @@
-/// A font datum, it exists to define a custom font to use in a span style later.
-/datum/font
- /// Font name, just so people know what to put in their span style.
- var/name
- /// The font file we link to.
- var/font_family
-
-/datum/font/vcr_osd_mono
- name = "VCR OSD Mono"
- font_family = 'interface/VCR_OSD_Mono.ttf'
diff --git a/interface/fonts/Grand9K_Pixel.ttf b/interface/fonts/Grand9K_Pixel.ttf
new file mode 100644
index 000000000000..cf6fdf44e2ec
Binary files /dev/null and b/interface/fonts/Grand9K_Pixel.ttf differ
diff --git a/interface/fonts/Pixellari.ttf b/interface/fonts/Pixellari.ttf
new file mode 100644
index 000000000000..5a3a3c2b1104
Binary files /dev/null and b/interface/fonts/Pixellari.ttf differ
diff --git a/interface/fonts/SpessFont.ttf b/interface/fonts/SpessFont.ttf
new file mode 100644
index 000000000000..8f7c7e08d0d8
Binary files /dev/null and b/interface/fonts/SpessFont.ttf differ
diff --git a/interface/fonts/TinyUnicode.ttf b/interface/fonts/TinyUnicode.ttf
new file mode 100644
index 000000000000..74d0d3e386e6
Binary files /dev/null and b/interface/fonts/TinyUnicode.ttf differ
diff --git a/interface/VCR_OSD_Mono.ttf b/interface/fonts/VCR_OSD_Mono.ttf
similarity index 100%
rename from interface/VCR_OSD_Mono.ttf
rename to interface/fonts/VCR_OSD_Mono.ttf
diff --git a/interface/fonts/fonts_datum.dm b/interface/fonts/fonts_datum.dm
new file mode 100644
index 000000000000..a346706d7fa0
--- /dev/null
+++ b/interface/fonts/fonts_datum.dm
@@ -0,0 +1,78 @@
+/// A font datum, it exists to define a custom font to use in a span style later.
+/datum/font
+ /// Font name, just so people know what to put in their span style.
+ var/name
+ /// The font file we link to.
+ var/font_family
+
+ /// Font features and metrics
+ /// Generated by Lummox's dmifontsplus (https://www.byond.com/developer/LummoxJR/DmiFontsPlus)
+ /// Note: these variable names have been changed, so you can't straight copy/paste from dmifontsplus.exe
+
+ /// list of font size/spacing metrics
+ var/list/metrics
+ /// total height of a line
+ var/height
+ /// distance above baseline (including whitespace)
+ var/ascent
+ /// distance below baseline
+ var/descent
+ /// average character width
+ var/average_width
+ /// maximum character width
+ var/max_width
+ /// extra width, such as from italics, for a line
+ var/overhang
+ /// internal leading vertical space, for accent marks
+ var/in_leading
+ /// external leading vertical space, just plain blank
+ var/ex_leading
+ /// default character (for undefined chars)
+ var/default_character
+ /// first character in metrics
+ var/start
+ /// last character in metrics
+ var/end
+
+/// Get font metrics
+/// From Lummox's dmifontsplus (https://www.byond.com/developer/LummoxJR/DmiFontsPlus)
+/datum/font/proc/get_metrics(text, flags, first_line)
+ . = 0
+ var/longest = 0
+ if(!length(text))
+ return
+
+ var/i = 1
+ var/idx
+ while(i <= length(text))
+ var/character = text2ascii(text, i++)
+ if(character <= 10)
+ if(character <= 7)
+ . += character // spacers for justification
+
+ if(character <= 9)
+ continue // soft-break chars
+
+ if(. && idx && !(flags & INCLUDE_AC))
+ . -= max(metrics[idx + 3], 0)
+
+ longest = max(longest, . + first_line)
+ . = 0
+ first_line = 0
+ idx = 0
+ continue
+
+ idx = (character - start) * 3
+ if(idx <= 0 || idx >= metrics.len)
+ idx = (default_character - start) * 3
+
+ if(!. && !(flags & INCLUDE_AC))
+ . -= metrics[idx + 1]
+ . += metrics[idx + 1] + metrics[idx + 2] + metrics[idx +3]
+
+ if(. && idx && !(flags & INCLUDE_AC))
+ . -= max(metrics[idx + 3], 0)
+
+ . = max(. + first_line, longest)
+ if(. > 0)
+ . += overhang
diff --git a/interface/fonts/grand_9k.dm b/interface/fonts/grand_9k.dm
new file mode 100644
index 000000000000..7993d307bcbe
--- /dev/null
+++ b/interface/fonts/grand_9k.dm
@@ -0,0 +1,253 @@
+/// For clean results on map, use only sizing pt, multiples of 6: 6pt 12pt 18pt 24pt etc. - Not for use with px sizing
+/// Can be used in TGUI etc, px sizing is pt / 0.75. 6pt = 8px, 12pt = 16px etc.
+
+/// Base font
+/datum/font/grand9k
+ name = "Grand9K Pixel"
+ font_family = 'interface/fonts/Grand9K_Pixel.ttf'
+
+/// For icon overlays
+/// Grand9K 6pt metrics generated using Lummox's dmifontsplus (https://www.byond.com/developer/LummoxJR/DmiFontsPlus)
+/// Note: these variable names have been changed, so you can't straight copy/paste from dmifontsplus.exe
+/datum/font/grand9k/size_6pt
+ name = "Grand9K Pixel 6pt"
+ height = 12
+ ascent = 10
+ descent = 2
+ average_width = 4
+ max_width = 9
+ overhang = 0
+ in_leading = 4
+ ex_leading = 1
+ default_character = 31
+ start = 30
+ end = 255
+ metrics = list(
+ 0, 5, 1, // char 30
+ 0, 5, 1, // char 31
+ 0, 1, 1, // char 32
+ 0, 1, 1, // char 33
+ 0, 3, 1, // char 34
+ 0, 6, 1, // char 35
+ 0, 5, 1, // char 36
+ 0, 7, 1, // char 37
+ 0, 5, 1, // char 38
+ 0, 1, 1, // char 39
+ 0, 3, 1, // char 40
+ 0, 3, 1, // char 41
+ 0, 5, 1, // char 42
+ 0, 5, 1, // char 43
+ 0, 1, 1, // char 44
+ 0, 4, 1, // char 45
+ 0, 1, 1, // char 46
+ 0, 3, 1, // char 47
+ 0, 5, 1, // char 48
+ 0, 2, 1, // char 49
+ 0, 5, 1, // char 50
+ 0, 4, 1, // char 51
+ 0, 5, 1, // char 52
+ 0, 5, 1, // char 53
+ 0, 5, 1, // char 54
+ 0, 5, 1, // char 55
+ 0, 5, 1, // char 56
+ 0, 5, 1, // char 57
+ 0, 1, 1, // char 58
+ 0, 1, 1, // char 59
+ 0, 4, 1, // char 60
+ 0, 4, 1, // char 61
+ 0, 4, 1, // char 62
+ 0, 4, 1, // char 63
+ 0, 7, 1, // char 64
+ 0, 5, 1, // char 65
+ 0, 5, 1, // char 66
+ 0, 4, 1, // char 67
+ 0, 5, 1, // char 68
+ 0, 4, 1, // char 69
+ 0, 4, 1, // char 70
+ 0, 5, 1, // char 71
+ 0, 5, 1, // char 72
+ 0, 1, 1, // char 73
+ 0, 5, 1, // char 74
+ 0, 5, 1, // char 75
+ 0, 5, 1, // char 76
+ 0, 5, 1, // char 77
+ 0, 5, 1, // char 78
+ 0, 5, 1, // char 79
+ 0, 5, 1, // char 80
+ 0, 6, 1, // char 81
+ 0, 5, 1, // char 82
+ 0, 5, 1, // char 83
+ 0, 5, 1, // char 84
+ 0, 5, 1, // char 85
+ 0, 5, 1, // char 86
+ 0, 5, 1, // char 87
+ 0, 5, 1, // char 88
+ 0, 5, 1, // char 89
+ 0, 5, 1, // char 90
+ 0, 3, 1, // char 91
+ 0, 3, 1, // char 92
+ 0, 3, 1, // char 93
+ 0, 5, 1, // char 94
+ 0, 4, 0, // char 95
+ 0, 2, 1, // char 96
+ 0, 4, 1, // char 97
+ 0, 4, 1, // char 98
+ 0, 3, 1, // char 99
+ 0, 4, 1, // char 100
+ 0, 4, 1, // char 101
+ 0, 4, 1, // char 102
+ 0, 4, 1, // char 103
+ 0, 4, 1, // char 104
+ 0, 1, 1, // char 105
+ 0, 3, 1, // char 106
+ 0, 4, 1, // char 107
+ 0, 1, 1, // char 108
+ 0, 5, 1, // char 109
+ 0, 4, 1, // char 110
+ 0, 4, 1, // char 111
+ 0, 4, 1, // char 112
+ 0, 4, 1, // char 113
+ 0, 4, 1, // char 114
+ 0, 4, 1, // char 115
+ 0, 4, 1, // char 116
+ 0, 4, 1, // char 117
+ 0, 5, 1, // char 118
+ 0, 5, 1, // char 119
+ 0, 5, 1, // char 120
+ 0, 4, 1, // char 121
+ 0, 5, 1, // char 122
+ 0, 4, 1, // char 123
+ 0, 1, 1, // char 124
+ 0, 4, 1, // char 125
+ 0, 6, 1, // char 126
+ 0, 5, 1, // char 127
+ 0, 5, 1, // char 128
+ 0, 5, 1, // char 129
+ 0, 1, 1, // char 130
+ 0, 5, 1, // char 131
+ 0, 3, 1, // char 132
+ 0, 5, 1, // char 133
+ 0, 5, 1, // char 134
+ 0, 5, 1, // char 135
+ 0, 5, 1, // char 136
+ 0, 5, 1, // char 137
+ 0, 5, 1, // char 138
+ 0, 3, 1, // char 139
+ 0, 6, 1, // char 140
+ 0, 5, 1, // char 141
+ 0, 5, 1, // char 142
+ 0, 5, 1, // char 143
+ 0, 5, 1, // char 144
+ 0, 1, 1, // char 145
+ 0, 1, 1, // char 146
+ 0, 3, 1, // char 147
+ 0, 3, 1, // char 148
+ 0, 1, 1, // char 149
+ 0, 5, 1, // char 150
+ 0, 5, 1, // char 151
+ 0, 5, 1, // char 152
+ 0, 8, 1, // char 153
+ 0, 4, 1, // char 154
+ 0, 3, 1, // char 155
+ 0, 5, 1, // char 156
+ 0, 5, 1, // char 157
+ 0, 5, 1, // char 158
+ 0, 5, 1, // char 159
+ 0, 1, 1, // char 160
+ 0, 1, 1, // char 161
+ 0, 4, 1, // char 162
+ 0, 5, 1, // char 163
+ 0, 5, 1, // char 164
+ 0, 5, 1, // char 165
+ 0, 1, 1, // char 166
+ 0, 5, 1, // char 167
+ 0, 3, 1, // char 168
+ 0, 8, 1, // char 169
+ 0, 5, 1, // char 170
+ 0, 6, 1, // char 171
+ 0, 4, 1, // char 172
+ 0, 5, 1, // char 173
+ 0, 8, 1, // char 174
+ 0, 5, 1, // char 175
+ 0, 3, 1, // char 176
+ 0, 5, 1, // char 177
+ 0, 5, 1, // char 178
+ 0, 5, 1, // char 179
+ 0, 2, 1, // char 180
+ 0, 4, 1, // char 181
+ 0, 5, 1, // char 182
+ 0, 1, 1, // char 183
+ 0, 2, 1, // char 184
+ 0, 5, 1, // char 185
+ 0, 5, 1, // char 186
+ 0, 6, 1, // char 187
+ 0, 5, 1, // char 188
+ 0, 5, 1, // char 189
+ 0, 5, 1, // char 190
+ 0, 4, 1, // char 191
+ 0, 5, 1, // char 192
+ 0, 5, 1, // char 193
+ 0, 5, 1, // char 194
+ 0, 6, 0, // char 195
+ 0, 5, 1, // char 196
+ 0, 5, 1, // char 197
+ 0, 6, 1, // char 198
+ 0, 4, 1, // char 199
+ 0, 4, 1, // char 200
+ 0, 4, 1, // char 201
+ 0, 4, 1, // char 202
+ 0, 4, 1, // char 203
+ 1, 2, 0, // char 204
+ 0, 2, 1, // char 205
+ 0, 3, 0, // char 206
+ 0, 3, 0, // char 207
+ 0, 6, 1, // char 208
+ 0, 6, 0, // char 209
+ 0, 5, 1, // char 210
+ 0, 5, 1, // char 211
+ 0, 5, 1, // char 212
+ 0, 6, 1, // char 213
+ 0, 5, 1, // char 214
+ 0, 5, 1, // char 215
+ 0, 5, 1, // char 216
+ 0, 5, 1, // char 217
+ 0, 5, 1, // char 218
+ 0, 5, 1, // char 219
+ 0, 5, 1, // char 220
+ 0, 5, 1, // char 221
+ 0, 5, 1, // char 222
+ 0, 5, 1, // char 223
+ 0, 4, 1, // char 224
+ 0, 4, 1, // char 225
+ 0, 4, 1, // char 226
+ 0, 4, 1, // char 227
+ 0, 4, 1, // char 228
+ 0, 4, 1, // char 229
+ 0, 5, 1, // char 230
+ 0, 3, 1, // char 231
+ 0, 4, 1, // char 232
+ 0, 4, 1, // char 233
+ 0, 4, 1, // char 234
+ 0, 4, 1, // char 235
+ 0, 2, 1, // char 236
+ 1, 2, 0, // char 237
+ 0, 3, 0, // char 238
+ 0, 3, 0, // char 239
+ 0, 5, 0, // char 240
+ 0, 4, 1, // char 241
+ 0, 4, 1, // char 242
+ 0, 4, 1, // char 243
+ 0, 4, 1, // char 244
+ 0, 4, 1, // char 245
+ 0, 4, 1, // char 246
+ 0, 5, 1, // char 247
+ 0, 4, 1, // char 248
+ 0, 4, 1, // char 249
+ 0, 4, 1, // char 250
+ 0, 4, 1, // char 251
+ 0, 4, 1, // char 252
+ 0, 4, 1, // char 253
+ 0, 4, 1, // char 254
+ 0, 4, 1, // char 255
+ 226
+ )
diff --git a/interface/fonts/license.txt b/interface/fonts/license.txt
new file mode 100644
index 000000000000..9aa70fbac2a9
--- /dev/null
+++ b/interface/fonts/license.txt
@@ -0,0 +1,13 @@
+Grand9K Pixel created by Jayvee Enaguas. Licensed under Creative Commons Attribution 4.0 International (CC BY 4.0)
+(https://creativecommons.org/licenses/by/4.0/) (https://www.dafont.com/grand9k-pixel.font)
+
+Pixellari created by Zacchary Dempsey-Plante. Website indicates free for commercial use.
+(https://www.dafont.com/pixellari.font?fpp=200)
+
+Spess Font created by MTandi (discord) for /tg/station.
+
+Tiny Unicode created by Jakob Riedle/DuffsDevice. Website indicates free for commercial use.
+(https://fontmeme.com/fonts/tiny-unicode-font/)
+
+VCR OSD Mono created by Riciery Leal/mrmanet. Website indicates 100% free, author confirms it's free for all to use.
+(https://www.dafont.com/font-comment.php?file=vcr_osd_mono)
diff --git a/interface/fonts/pixellari.dm b/interface/fonts/pixellari.dm
new file mode 100644
index 000000000000..24fcd1961fec
--- /dev/null
+++ b/interface/fonts/pixellari.dm
@@ -0,0 +1,252 @@
+/// For clean results on map, use only sizing pt, multiples of 12: 12pt 24pt 48pt etc. - Not for use with px sizing
+/// Can be used in TGUI etc, px sizing is pt / 0.75. 12pt = 16px, 24pt = 32px etc.
+
+/// Base font
+/datum/font/pixellari
+ name = "Pixellari"
+ font_family = 'interface/fonts/Pixellari.ttf'
+
+/// For icon overlays
+/// Pixellari 12pt metrics generated using Lummox's dmifontsplus (https://www.byond.com/developer/LummoxJR/DmiFontsPlus)
+/// Note: these variable names have been changed, so you can't straight copy/paste from dmifontsplus.exe
+/datum/font/pixellari/size_12pt
+ name = "Pixellari 12pt"
+ height = 16
+ ascent = 12
+ descent = 4
+ average_width = 7
+ max_width = 15
+ overhang = 0
+ in_leading = 0
+ ex_leading = 1
+ default_character = 31
+ start = 30
+ end = 255
+ metrics = list(\
+ 1, 5, 0, /* char 30 */ \
+ 1, 5, 0, /* char 31 */ \
+ 0, 1, 4, /* char 32 */ \
+ 1, 2, 1, /* char 33 */ \
+ 1, 5, 1, /* char 34 */ \
+ 0, 8, 1, /* char 35 */ \
+ 2, 6, 1, /* char 36 */ \
+ 0, 13, 1, /* char 37 */ \
+ 1, 8, 1, /* char 38 */ \
+ 1, 2, 1, /* char 39 */ \
+ 1, 3, 1, /* char 40 */ \
+ 2, 3, 1, /* char 41 */ \
+ 0, 6, 1, /* char 42 */ \
+ 1, 6, 1, /* char 43 */ \
+ 1, 2, 1, /* char 44 */ \
+ 1, 6, 1, /* char 45 */ \
+ 1, 2, 1, /* char 46 */ \
+ 0, 6, 1, /* char 47 */ \
+ 1, 7, 1, /* char 48 */ \
+ 2, 6, 1, /* char 49 */ \
+ 1, 6, 1, /* char 50 */ \
+ 1, 6, 1, /* char 51 */ \
+ 1, 7, 1, /* char 52 */ \
+ 1, 6, 1, /* char 53 */ \
+ 1, 6, 1, /* char 54 */ \
+ 1, 7, 1, /* char 55 */ \
+ 1, 6, 1, /* char 56 */ \
+ 1, 6, 1, /* char 57 */ \
+ 1, 2, 1, /* char 58 */ \
+ 1, 2, 1, /* char 59 */ \
+ 0, 10, 1, /* char 60 */ \
+ 1, 6, 1, /* char 61 */ \
+ 0, 10, 1, /* char 62 */ \
+ 1, 6, 1, /* char 63 */ \
+ 1, 12, 1, /* char 64 */ \
+ 1, 8, 1, /* char 65 */ \
+ 1, 8, 1, /* char 66 */ \
+ 2, 7, 1, /* char 67 */ \
+ 2, 8, 1, /* char 68 */ \
+ 2, 6, 1, /* char 69 */ \
+ 2, 6, 1, /* char 70 */ \
+ 2, 7, 1, /* char 71 */ \
+ 1, 8, 1, /* char 72 */ \
+ 1, 4, 1, /* char 73 */ \
+ 0, 7, 1, /* char 74 */ \
+ 1, 8, 1, /* char 75 */ \
+ 1, 6, 1, /* char 76 */ \
+ 1, 10, 1, /* char 77 */ \
+ 1, 9, 1, /* char 78 */ \
+ 2, 8, 1, /* char 79 */ \
+ 1, 7, 1, /* char 80 */ \
+ 2, 9, 1, /* char 81 */ \
+ 1, 8, 1, /* char 82 */ \
+ 1, 8, 1, /* char 83 */ \
+ 1, 8, 1, /* char 84 */ \
+ 2, 8, 1, /* char 85 */ \
+ 2, 8, 1, /* char 86 */ \
+ 1, 10, 1, /* char 87 */ \
+ 1, 8, 1, /* char 88 */ \
+ 1, 8, 1, /* char 89 */ \
+ 0, 10, 1, /* char 90 */ \
+ 1, 3, 1, /* char 91 */ \
+ 0, 6, 1, /* char 92 */ \
+ 2, 3, 1, /* char 93 */ \
+ 0, 7, 1, /* char 94 */ \
+ 0, 8, 1, /* char 95 */ \
+ 1, 3, 1, /* char 96 */ \
+ 1, 6, 1, /* char 97 */ \
+ 1, 7, 1, /* char 98 */ \
+ 1, 6, 1, /* char 99 */ \
+ 1, 7, 1, /* char 100 */ \
+ 1, 6, 1, /* char 101 */ \
+ 1, 4, 1, /* char 102 */ \
+ 1, 7, 1, /* char 103 */ \
+ 1, 7, 1, /* char 104 */ \
+ 1, 2, 1, /* char 105 */ \
+ -1, 4, 1, /* char 106 */ \
+ 0, 7, 1, /* char 107 */ \
+ 1, 2, 1, /* char 108 */ \
+ 1, 10, 1, /* char 109 */ \
+ 1, 6, 1, /* char 110 */ \
+ 1, 6, 1, /* char 111 */ \
+ 1, 7, 1, /* char 112 */ \
+ 1, 7, 1, /* char 113 */ \
+ 1, 6, 1, /* char 114 */ \
+ 1, 6, 1, /* char 115 */ \
+ 0, 4, 1, /* char 116 */ \
+ 1, 6, 1, /* char 117 */ \
+ 1, 6, 1, /* char 118 */ \
+ 1, 10, 1, /* char 119 */ \
+ 1, 6, 1, /* char 120 */ \
+ 1, 6, 1, /* char 121 */ \
+ 1, 6, 1, /* char 122 */ \
+ 0, 5, 1, /* char 123 */ \
+ 1, 2, 1, /* char 124 */ \
+ 0, 5, 1, /* char 125 */ \
+ 1, 8, 1, /* char 126 */ \
+ 1, 5, 0, /* char 127 */ \
+ 1, 8, 1, /* char 128 */ \
+ 1, 5, 0, /* char 129 */ \
+ 1, 5, 0, /* char 130 */ \
+ 1, 5, 0, /* char 131 */ \
+ 1, 5, 0, /* char 132 */ \
+ 1, 5, 0, /* char 133 */ \
+ 1, 5, 0, /* char 134 */ \
+ 1, 5, 0, /* char 135 */ \
+ 1, 5, 0, /* char 136 */ \
+ 1, 5, 0, /* char 137 */ \
+ 1, 8, 1, /* char 138 */ \
+ 1, 5, 0, /* char 139 */ \
+ 0, 14, 1, /* char 140 */ \
+ 1, 5, 0, /* char 141 */ \
+ 0, 10, 1, /* char 142 */ \
+ 1, 5, 0, /* char 143 */ \
+ 1, 5, 0, /* char 144 */ \
+ 1, 5, 0, /* char 145 */ \
+ 1, 5, 0, /* char 146 */ \
+ 1, 5, 0, /* char 147 */ \
+ 1, 5, 0, /* char 148 */ \
+ 1, 5, 0, /* char 149 */ \
+ 1, 5, 0, /* char 150 */ \
+ 1, 5, 0, /* char 151 */ \
+ 1, 5, 0, /* char 152 */ \
+ 1, 5, 0, /* char 153 */ \
+ 1, 6, 1, /* char 154 */ \
+ 1, 5, 0, /* char 155 */ \
+ 1, 11, 1, /* char 156 */ \
+ 1, 5, 0, /* char 157 */ \
+ 1, 6, 1, /* char 158 */ \
+ 1, 8, 1, /* char 159 */ \
+ 0, 1, 4, /* char 160 */ \
+ 1, 2, 1, /* char 161 */ \
+ 1, 6, 1, /* char 162 */ \
+ 0, 8, 1, /* char 163 */ \
+ 0, 9, 1, /* char 164 */ \
+ 1, 8, 1, /* char 165 */ \
+ 1, 2, 1, /* char 166 */ \
+ 1, 7, 1, /* char 167 */ \
+ 0, 5, 1, /* char 168 */ \
+ -1, 12, 1, /* char 169 */ \
+ 0, 6, 1, /* char 170 */ \
+ 0, 8, 1, /* char 171 */ \
+ 1, 8, 1, /* char 172 */ \
+ 1, 5, 0, /* char 173 */ \
+ -1, 12, 1, /* char 174 */ \
+ 2, 4, 1, /* char 175 */ \
+ 0, 6, 1, /* char 176 */ \
+ 1, 6, 1, /* char 177 */ \
+ 0, 5, 1, /* char 178 */ \
+ 0, 5, 1, /* char 179 */ \
+ 1, 3, 1, /* char 180 */ \
+ 1, 6, 1, /* char 181 */ \
+ 1, 7, 1, /* char 182 */ \
+ 1, 2, 1, /* char 183 */ \
+ 1, 3, 1, /* char 184 */ \
+ 1, 4, 1, /* char 185 */ \
+ 0, 6, 1, /* char 186 */ \
+ 0, 8, 1, /* char 187 */ \
+ 1, 13, 1, /* char 188 */ \
+ 1, 12, 1, /* char 189 */ \
+ 0, 13, 1, /* char 190 */ \
+ 1, 6, 1, /* char 191 */ \
+ 1, 8, 1, /* char 192 */ \
+ 1, 8, 1, /* char 193 */ \
+ 1, 8, 1, /* char 194 */ \
+ 1, 8, 1, /* char 195 */ \
+ 1, 8, 1, /* char 196 */ \
+ 1, 8, 1, /* char 197 */ \
+ 0, 13, 1, /* char 198 */ \
+ 2, 7, 1, /* char 199 */ \
+ 2, 6, 1, /* char 200 */ \
+ 2, 6, 1, /* char 201 */ \
+ 2, 6, 1, /* char 202 */ \
+ 2, 6, 1, /* char 203 */ \
+ 1, 4, 1, /* char 204 */ \
+ 1, 4, 1, /* char 205 */ \
+ 1, 4, 1, /* char 206 */ \
+ 1, 4, 1, /* char 207 */ \
+ 0, 10, 1, /* char 208 */ \
+ 1, 9, 1, /* char 209 */ \
+ 2, 8, 1, /* char 210 */ \
+ 2, 8, 1, /* char 211 */ \
+ 2, 8, 1, /* char 212 */ \
+ 2, 8, 1, /* char 213 */ \
+ 2, 8, 1, /* char 214 */ \
+ 1, 6, 1, /* char 215 */ \
+ -2, 14, 1, /* char 216 */ \
+ 2, 8, 1, /* char 217 */ \
+ 2, 8, 1, /* char 218 */ \
+ 2, 8, 1, /* char 219 */ \
+ 2, 8, 1, /* char 220 */ \
+ 1, 8, 1, /* char 221 */ \
+ 1, 8, 1, /* char 222 */ \
+ 1, 8, 1, /* char 223 */ \
+ 1, 6, 1, /* char 224 */ \
+ 1, 6, 1, /* char 225 */ \
+ 1, 6, 1, /* char 226 */ \
+ 1, 6, 1, /* char 227 */ \
+ 1, 6, 1, /* char 228 */ \
+ 1, 6, 1, /* char 229 */ \
+ 1, 11, 1, /* char 230 */ \
+ 1, 6, 1, /* char 231 */ \
+ 1, 6, 1, /* char 232 */ \
+ 1, 6, 1, /* char 233 */ \
+ 1, 6, 1, /* char 234 */ \
+ 1, 6, 1, /* char 235 */ \
+ 1, 2, 1, /* char 236 */ \
+ 1, 2, 1, /* char 237 */ \
+ 0, 4, 1, /* char 238 */ \
+ 0, 4, 1, /* char 239 */ \
+ 1, 7, 1, /* char 240 */ \
+ 1, 6, 1, /* char 241 */ \
+ 1, 6, 1, /* char 242 */ \
+ 1, 6, 1, /* char 243 */ \
+ 1, 6, 1, /* char 244 */ \
+ 1, 6, 1, /* char 245 */ \
+ 1, 6, 1, /* char 246 */ \
+ 1, 6, 1, /* char 247 */ \
+ 0, 10, 1, /* char 248 */ \
+ 1, 6, 1, /* char 249 */ \
+ 1, 6, 1, /* char 250 */ \
+ 1, 6, 1, /* char 251 */ \
+ 1, 6, 1, /* char 252 */ \
+ 1, 6, 1, /* char 253 */ \
+ 1, 8, 1, /* char 254 */ \
+ 1, 6, 1, /* char 255 */ \
+ 226)
diff --git a/interface/fonts/spess_font.dm b/interface/fonts/spess_font.dm
new file mode 100644
index 000000000000..07e8ea5b3ba6
--- /dev/null
+++ b/interface/fonts/spess_font.dm
@@ -0,0 +1,252 @@
+/// For clean results on map, use only sizing pt, multiples of 6: 6t 12pt 18pt etc. - Not for use with px sizing
+/// Can be used in TGUI etc, px sizing is pt / 0.75. 12pt = 16px, 24pt = 32px etc.
+
+/// Base font
+/datum/font/spessfont
+ name = "Spess Font"
+ font_family = 'interface/fonts/SpessFont.ttf'
+
+/// For icon overlays
+/// Spess Font 6pt metrics generated using Lummox's dmifontsplus (https://www.byond.com/developer/LummoxJR/DmiFontsPlus)
+/// Note: these variable names have been changed, so you can't straight copy/paste from dmifontsplus.exe
+/datum/font/spessfont/size_6pt
+ name = "Spess Font 6pt"
+ height = 8
+ ascent = 6
+ descent = 2
+ average_width = 4
+ max_width = 6
+ overhang = 0
+ in_leading = 0
+ ex_leading = 0
+ default_character = 31
+ start = 30
+ end = 255
+ metrics = list(\
+ 0, 1, 0, /* char 30 */ \
+ 0, 1, 0, /* char 31 */ \
+ 0, 1, 1, /* char 32 */ \
+ 0, 1, 1, /* char 33 */ \
+ 0, 3, 1, /* char 34 */ \
+ 0, 5, 1, /* char 35 */ \
+ 0, 3, 1, /* char 36 */ \
+ 0, 5, 1, /* char 37 */ \
+ 0, 5, 1, /* char 38 */ \
+ 0, 1, 1, /* char 39 */ \
+ 0, 2, 1, /* char 40 */ \
+ 0, 2, 1, /* char 41 */ \
+ 0, 3, 1, /* char 42 */ \
+ 0, 3, 1, /* char 43 */ \
+ 0, 1, 1, /* char 44 */ \
+ 0, 3, 1, /* char 45 */ \
+ 0, 1, 1, /* char 46 */ \
+ 0, 3, 1, /* char 47 */ \
+ 0, 4, 1, /* char 48 */ \
+ 0, 2, 1, /* char 49 */ \
+ 0, 4, 1, /* char 50 */ \
+ 0, 4, 1, /* char 51 */ \
+ 0, 4, 1, /* char 52 */ \
+ 0, 4, 1, /* char 53 */ \
+ 0, 4, 1, /* char 54 */ \
+ 0, 4, 1, /* char 55 */ \
+ 0, 4, 1, /* char 56 */ \
+ 0, 4, 1, /* char 57 */ \
+ 0, 1, 1, /* char 58 */ \
+ 0, 1, 1, /* char 59 */ \
+ 0, 3, 1, /* char 60 */ \
+ 0, 3, 1, /* char 61 */ \
+ 0, 3, 1, /* char 62 */ \
+ 0, 3, 1, /* char 63 */ \
+ 0, 4, 1, /* char 64 */ \
+ 0, 4, 1, /* char 65 */ \
+ 0, 4, 1, /* char 66 */ \
+ 0, 4, 1, /* char 67 */ \
+ 0, 4, 1, /* char 68 */ \
+ 0, 4, 1, /* char 69 */ \
+ 0, 4, 1, /* char 70 */ \
+ 0, 4, 1, /* char 71 */ \
+ 0, 4, 1, /* char 72 */ \
+ 0, 3, 1, /* char 73 */ \
+ 0, 4, 1, /* char 74 */ \
+ 0, 4, 1, /* char 75 */ \
+ 0, 4, 1, /* char 76 */ \
+ 0, 5, 1, /* char 77 */ \
+ 0, 4, 1, /* char 78 */ \
+ 0, 4, 1, /* char 79 */ \
+ 0, 4, 1, /* char 80 */ \
+ 0, 4, 1, /* char 81 */ \
+ 0, 4, 1, /* char 82 */ \
+ 0, 4, 1, /* char 83 */ \
+ 0, 5, 1, /* char 84 */ \
+ 0, 4, 1, /* char 85 */ \
+ 0, 4, 1, /* char 86 */ \
+ 0, 5, 1, /* char 87 */ \
+ 0, 5, 1, /* char 88 */ \
+ 0, 4, 1, /* char 89 */ \
+ 0, 4, 1, /* char 90 */ \
+ 0, 2, 1, /* char 91 */ \
+ 0, 3, 1, /* char 92 */ \
+ 0, 2, 1, /* char 93 */ \
+ 0, 3, 1, /* char 94 */ \
+ 0, 4, 1, /* char 95 */ \
+ 0, 2, 1, /* char 96 */ \
+ 0, 3, 1, /* char 97 */ \
+ 0, 4, 1, /* char 98 */ \
+ 0, 3, 1, /* char 99 */ \
+ 0, 4, 1, /* char 100 */ \
+ 0, 3, 1, /* char 101 */ \
+ 0, 2, 1, /* char 102 */ \
+ 0, 4, 1, /* char 103 */ \
+ 0, 3, 1, /* char 104 */ \
+ 0, 1, 1, /* char 105 */ \
+ 0, 1, 1, /* char 106 */ \
+ 0, 3, 1, /* char 107 */ \
+ 0, 1, 1, /* char 108 */ \
+ 0, 5, 1, /* char 109 */ \
+ 0, 3, 1, /* char 110 */ \
+ 0, 4, 1, /* char 111 */ \
+ 0, 4, 1, /* char 112 */ \
+ 0, 4, 1, /* char 113 */ \
+ 0, 2, 1, /* char 114 */ \
+ 0, 3, 1, /* char 115 */ \
+ 0, 2, 1, /* char 116 */ \
+ 0, 3, 1, /* char 117 */ \
+ 0, 3, 1, /* char 118 */ \
+ 0, 5, 1, /* char 119 */ \
+ 0, 3, 1, /* char 120 */ \
+ 0, 3, 1, /* char 121 */ \
+ 0, 3, 1, /* char 122 */ \
+ 0, 3, 1, /* char 123 */ \
+ 0, 1, 1, /* char 124 */ \
+ 0, 3, 1, /* char 125 */ \
+ 0, 4, 1, /* char 126 */ \
+ 0, 1, 0, /* char 127 */ \
+ 0, 1, 0, /* char 128 */ \
+ 0, 1, 0, /* char 129 */ \
+ 0, 1, 0, /* char 130 */ \
+ 0, 1, 0, /* char 131 */ \
+ 0, 1, 0, /* char 132 */ \
+ 0, 1, 0, /* char 133 */ \
+ 0, 1, 0, /* char 134 */ \
+ 0, 1, 0, /* char 135 */ \
+ 0, 1, 0, /* char 136 */ \
+ 0, 1, 0, /* char 137 */ \
+ 0, 1, 0, /* char 138 */ \
+ 0, 1, 0, /* char 139 */ \
+ 0, 1, 0, /* char 140 */ \
+ 0, 1, 0, /* char 141 */ \
+ 0, 1, 0, /* char 142 */ \
+ 0, 1, 0, /* char 143 */ \
+ 0, 1, 0, /* char 144 */ \
+ 0, 1, 0, /* char 145 */ \
+ 0, 1, 0, /* char 146 */ \
+ 0, 1, 0, /* char 147 */ \
+ 0, 1, 0, /* char 148 */ \
+ 0, 1, 0, /* char 149 */ \
+ 0, 1, 0, /* char 150 */ \
+ 0, 1, 0, /* char 151 */ \
+ 0, 1, 0, /* char 152 */ \
+ 0, 1, 0, /* char 153 */ \
+ 0, 1, 0, /* char 154 */ \
+ 0, 1, 0, /* char 155 */ \
+ 0, 1, 0, /* char 156 */ \
+ 0, 1, 0, /* char 157 */ \
+ 0, 1, 0, /* char 158 */ \
+ 0, 1, 0, /* char 159 */ \
+ 0, 1, 0, /* char 160 */ \
+ 0, 1, 0, /* char 161 */ \
+ 0, 1, 0, /* char 162 */ \
+ 0, 1, 0, /* char 163 */ \
+ 0, 1, 0, /* char 164 */ \
+ 0, 1, 0, /* char 165 */ \
+ 0, 1, 0, /* char 166 */ \
+ 0, 1, 0, /* char 167 */ \
+ 0, 1, 0, /* char 168 */ \
+ 0, 1, 0, /* char 169 */ \
+ 0, 1, 0, /* char 170 */ \
+ 0, 1, 0, /* char 171 */ \
+ 0, 1, 0, /* char 172 */ \
+ 0, 1, 0, /* char 173 */ \
+ 0, 1, 0, /* char 174 */ \
+ 0, 1, 0, /* char 175 */ \
+ 0, 1, 0, /* char 176 */ \
+ 0, 1, 0, /* char 177 */ \
+ 0, 1, 0, /* char 178 */ \
+ 0, 1, 0, /* char 179 */ \
+ 0, 1, 0, /* char 180 */ \
+ 0, 1, 0, /* char 181 */ \
+ 0, 1, 0, /* char 182 */ \
+ 0, 1, 0, /* char 183 */ \
+ 0, 1, 0, /* char 184 */ \
+ 0, 1, 0, /* char 185 */ \
+ 0, 1, 0, /* char 186 */ \
+ 0, 1, 0, /* char 187 */ \
+ 0, 1, 0, /* char 188 */ \
+ 0, 1, 0, /* char 189 */ \
+ 0, 1, 0, /* char 190 */ \
+ 0, 1, 0, /* char 191 */ \
+ 0, 1, 0, /* char 192 */ \
+ 0, 1, 0, /* char 193 */ \
+ 0, 1, 0, /* char 194 */ \
+ 0, 1, 0, /* char 195 */ \
+ 0, 1, 0, /* char 196 */ \
+ 0, 1, 0, /* char 197 */ \
+ 0, 1, 0, /* char 198 */ \
+ 0, 1, 0, /* char 199 */ \
+ 0, 1, 0, /* char 200 */ \
+ 0, 1, 0, /* char 201 */ \
+ 0, 1, 0, /* char 202 */ \
+ 0, 1, 0, /* char 203 */ \
+ 0, 1, 0, /* char 204 */ \
+ 0, 1, 0, /* char 205 */ \
+ 0, 1, 0, /* char 206 */ \
+ 0, 1, 0, /* char 207 */ \
+ 0, 1, 0, /* char 208 */ \
+ 0, 1, 0, /* char 209 */ \
+ 0, 1, 0, /* char 210 */ \
+ 0, 1, 0, /* char 211 */ \
+ 0, 1, 0, /* char 212 */ \
+ 0, 1, 0, /* char 213 */ \
+ 0, 1, 0, /* char 214 */ \
+ 0, 1, 0, /* char 215 */ \
+ 0, 1, 0, /* char 216 */ \
+ 0, 1, 0, /* char 217 */ \
+ 0, 1, 0, /* char 218 */ \
+ 0, 1, 0, /* char 219 */ \
+ 0, 1, 0, /* char 220 */ \
+ 0, 1, 0, /* char 221 */ \
+ 0, 1, 0, /* char 222 */ \
+ 0, 1, 0, /* char 223 */ \
+ 0, 1, 0, /* char 224 */ \
+ 0, 1, 0, /* char 225 */ \
+ 0, 1, 0, /* char 226 */ \
+ 0, 1, 0, /* char 227 */ \
+ 0, 1, 0, /* char 228 */ \
+ 0, 1, 0, /* char 229 */ \
+ 0, 1, 0, /* char 230 */ \
+ 0, 1, 0, /* char 231 */ \
+ 0, 1, 0, /* char 232 */ \
+ 0, 1, 0, /* char 233 */ \
+ 0, 1, 0, /* char 234 */ \
+ 0, 1, 0, /* char 235 */ \
+ 0, 1, 0, /* char 236 */ \
+ 0, 1, 0, /* char 237 */ \
+ 0, 1, 0, /* char 238 */ \
+ 0, 1, 0, /* char 239 */ \
+ 0, 1, 0, /* char 240 */ \
+ 0, 1, 0, /* char 241 */ \
+ 0, 1, 0, /* char 242 */ \
+ 0, 1, 0, /* char 243 */ \
+ 0, 1, 0, /* char 244 */ \
+ 0, 1, 0, /* char 245 */ \
+ 0, 1, 0, /* char 246 */ \
+ 0, 1, 0, /* char 247 */ \
+ 0, 1, 0, /* char 248 */ \
+ 0, 1, 0, /* char 249 */ \
+ 0, 1, 0, /* char 250 */ \
+ 0, 1, 0, /* char 251 */ \
+ 0, 1, 0, /* char 252 */ \
+ 0, 1, 0, /* char 253 */ \
+ 0, 1, 0, /* char 254 */ \
+ 0, 1, 0, /* char 255 */ \
+ 226)
diff --git a/interface/fonts/tiny_unicode.dm b/interface/fonts/tiny_unicode.dm
new file mode 100644
index 000000000000..d6af265d5182
--- /dev/null
+++ b/interface/fonts/tiny_unicode.dm
@@ -0,0 +1,253 @@
+/// For clean results on map, use only sizing pt, multiples of 12: 12pt 24pt 48pt etc. - Not for use with px sizing
+/// Can be used in TGUI etc, px sizing is pt / 0.75. 12pt = 16px, 24pt = 32px etc.
+
+/// Base font
+/datum/font/tiny_unicode
+ name = "TinyUnicode"
+ font_family = 'interface/fonts/TinyUnicode.ttf'
+
+/// For icon overlays
+/// TinyUnicode 12pt metrics generated using Lummox's dmifontsplus (https://www.byond.com/developer/LummoxJR/DmiFontsPlus)
+/// Note: these variable names have been changed, so you can't straight copy/paste from dmifontsplus.exe
+/datum/font/tiny_unicode/size_12pt
+ name = "TinyUnicode 12pt"
+ height = 13
+ ascent = 11
+ descent = 2
+ average_width = 5
+ max_width = 11
+ overhang = 0
+ in_leading = -3
+ ex_leading = 1
+ default_character = 31
+ start = 30
+ end = 255
+ metrics = list(
+ 1, 5, 0, // char 30
+ 1, 5, 0, // char 31
+ 0, 1, 4, // char 32
+ 0, 1, 1, // char 33
+ 0, 3, 1, // char 34
+ 0, 5, 1, // char 35
+ 0, 4, 1, // char 36
+ 0, 3, 1, // char 37
+ 0, 5, 1, // char 38
+ 0, 1, 1, // char 39
+ 0, 2, 1, // char 40
+ 0, 2, 1, // char 41
+ 0, 3, 1, // char 42
+ 0, 3, 1, // char 43
+ 0, 2, 1, // char 44
+ 0, 3, 1, // char 45
+ 0, 1, 1, // char 46
+ 0, 3, 1, // char 47
+ 0, 4, 1, // char 48
+ 0, 2, 1, // char 49
+ 0, 4, 1, // char 50
+ 0, 4, 1, // char 51
+ 0, 4, 1, // char 52
+ 0, 4, 1, // char 53
+ 0, 4, 1, // char 54
+ 0, 4, 1, // char 55
+ 0, 4, 1, // char 56
+ 0, 4, 1, // char 57
+ 0, 1, 1, // char 58
+ 0, 2, 1, // char 59
+ 0, 2, 1, // char 60
+ 0, 4, 1, // char 61
+ 0, 2, 1, // char 62
+ 0, 4, 1, // char 63
+ 0, 7, 1, // char 64
+ 0, 4, 1, // char 65
+ 0, 4, 1, // char 66
+ 0, 3, 1, // char 67
+ 0, 4, 1, // char 68
+ 0, 3, 1, // char 69
+ 0, 3, 1, // char 70
+ 0, 4, 1, // char 71
+ 0, 4, 1, // char 72
+ 0, 3, 1, // char 73
+ 0, 4, 1, // char 74
+ 0, 4, 1, // char 75
+ 0, 3, 1, // char 76
+ 0, 5, 1, // char 77
+ 0, 4, 1, // char 78
+ 0, 4, 1, // char 79
+ 0, 4, 1, // char 80
+ 0, 4, 1, // char 81
+ 0, 4, 1, // char 82
+ 0, 4, 1, // char 83
+ 0, 3, 1, // char 84
+ 0, 4, 1, // char 85
+ 0, 4, 1, // char 86
+ 0, 5, 1, // char 87
+ 0, 4, 1, // char 88
+ 0, 4, 1, // char 89
+ 0, 3, 1, // char 90
+ 0, 2, 1, // char 91
+ 0, 3, 1, // char 92
+ 0, 2, 1, // char 93
+ 0, 3, 1, // char 94
+ 0, 5, 1, // char 95
+ 0, 2, 1, // char 96
+ 0, 4, 1, // char 97
+ 0, 4, 1, // char 98
+ 0, 3, 1, // char 99
+ 0, 4, 1, // char 100
+ 0, 4, 1, // char 101
+ 0, 3, 1, // char 102
+ 0, 4, 1, // char 103
+ 0, 4, 1, // char 104
+ 0, 1, 1, // char 105
+ 0, 2, 1, // char 106
+ 0, 4, 1, // char 107
+ 0, 1, 1, // char 108
+ 0, 5, 1, // char 109
+ 0, 4, 1, // char 110
+ 0, 4, 1, // char 111
+ 0, 4, 1, // char 112
+ 0, 4, 1, // char 113
+ 0, 3, 1, // char 114
+ 0, 4, 1, // char 115
+ 0, 3, 1, // char 116
+ 0, 4, 1, // char 117
+ 0, 4, 1, // char 118
+ 0, 5, 1, // char 119
+ 0, 3, 1, // char 120
+ 0, 4, 1, // char 121
+ 0, 4, 1, // char 122
+ 0, 3, 1, // char 123
+ 0, 1, 1, // char 124
+ 0, 3, 1, // char 125
+ 0, 5, 1, // char 126
+ 1, 5, 0, // char 127
+ 0, 4, 1, // char 128
+ 1, 5, 0, // char 129
+ 1, 5, 0, // char 130
+ 1, 5, 0, // char 131
+ 1, 5, 0, // char 132
+ 1, 5, 0, // char 133
+ 1, 5, 0, // char 134
+ 1, 5, 0, // char 135
+ 1, 5, 0, // char 136
+ 0, 5, 1, // char 137
+ 1, 5, 0, // char 138
+ 1, 5, 0, // char 139
+ 0, 6, 1, // char 140
+ 1, 5, 0, // char 141
+ 1, 5, 0, // char 142
+ 1, 5, 0, // char 143
+ 1, 5, 0, // char 144
+ 1, 5, 0, // char 145
+ 1, 5, 0, // char 146
+ 1, 5, 0, // char 147
+ 1, 5, 0, // char 148
+ 0, 2, 1, // char 149
+ 1, 5, 0, // char 150
+ 1, 5, 0, // char 151
+ 1, 5, 0, // char 152
+ 0, 4, 1, // char 153
+ 1, 5, 0, // char 154
+ 1, 5, 0, // char 155
+ 1, 5, 0, // char 156
+ 1, 5, 0, // char 157
+ 1, 5, 0, // char 158
+ 0, 4, 1, // char 159
+ 1, 5, 0, // char 160
+ 0, 1, 1, // char 161
+ 0, 4, 1, // char 162
+ 0, 4, 1, // char 163
+ 0, 5, 1, // char 164
+ 0, 3, 1, // char 165
+ 0, 1, 1, // char 166
+ 0, 4, 1, // char 167
+ 0, 3, 1, // char 168
+ 0, 2, 1, // char 169
+ 0, 8, 1, // char 170
+ 0, 4, 1, // char 171
+ 0, 4, 1, // char 172
+ 1, 5, 0, // char 173
+ 0, 2, 1, // char 174
+ 0, 4, 1, // char 175
+ 0, 3, 1, // char 176
+ 0, 3, 1, // char 177
+ 0, 2, 1, // char 178
+ 0, 2, 1, // char 179
+ 0, 2, 1, // char 180
+ 0, 4, 1, // char 181
+ 0, 5, 1, // char 182
+ 1, 1, 1, // char 183
+ 0, 8, 1, // char 184
+ 0, 2, 1, // char 185
+ 0, 2, 1, // char 186
+ 0, 4, 1, // char 187
+ 0, 7, 1, // char 188
+ 0, 8, 1, // char 189
+ 0, 8, 1, // char 190
+ 0, 4, 1, // char 191
+ 0, 4, 1, // char 192
+ 0, 4, 1, // char 193
+ 0, 4, 1, // char 194
+ 0, 4, 1, // char 195
+ 0, 4, 1, // char 196
+ 0, 4, 1, // char 197
+ 0, 6, 1, // char 198
+ 0, 3, 1, // char 199
+ 0, 3, 1, // char 200
+ 0, 3, 1, // char 201
+ 0, 3, 1, // char 202
+ 0, 3, 1, // char 203
+ 0, 3, 1, // char 204
+ 0, 3, 1, // char 205
+ 0, 3, 1, // char 206
+ 0, 3, 1, // char 207
+ 0, 10, 1, // char 208
+ 0, 4, 1, // char 209
+ 0, 4, 1, // char 210
+ 0, 4, 1, // char 211
+ 0, 4, 1, // char 212
+ 0, 4, 1, // char 213
+ 0, 4, 1, // char 214
+ 0, 3, 1, // char 215
+ 0, 5, 1, // char 216
+ 0, 4, 1, // char 217
+ 0, 4, 1, // char 218
+ 0, 4, 1, // char 219
+ 0, 4, 1, // char 220
+ 0, 4, 1, // char 221
+ 0, 3, 1, // char 222
+ 0, 3, 1, // char 223
+ 0, 4, 1, // char 224
+ 0, 4, 1, // char 225
+ 0, 4, 1, // char 226
+ 0, 4, 1, // char 227
+ 0, 4, 1, // char 228
+ 0, 4, 1, // char 229
+ 0, 7, 1, // char 230
+ 0, 3, 1, // char 231
+ 0, 4, 1, // char 232
+ 0, 4, 1, // char 233
+ 0, 4, 1, // char 234
+ 0, 4, 1, // char 235
+ 0, 2, 1, // char 236
+ 0, 2, 1, // char 237
+ 0, 3, 1, // char 238
+ 0, 3, 1, // char 239
+ 0, 5, 1, // char 240
+ 0, 4, 1, // char 241
+ 0, 4, 1, // char 242
+ 0, 4, 1, // char 243
+ 0, 4, 1, // char 244
+ 0, 4, 1, // char 245
+ 0, 4, 1, // char 246
+ 0, 5, 1, // char 247
+ 0, 4, 1, // char 248
+ 0, 4, 1, // char 249
+ 0, 4, 1, // char 250
+ 0, 4, 1, // char 251
+ 0, 4, 1, // char 252
+ 0, 4, 1, // char 253
+ 0, 10, 1, // char 254
+ 0, 4, 1, // char 255
+ 226
+ )
diff --git a/interface/fonts/vcr_osd_mono.dm b/interface/fonts/vcr_osd_mono.dm
new file mode 100644
index 000000000000..301d90d2f7ea
--- /dev/null
+++ b/interface/fonts/vcr_osd_mono.dm
@@ -0,0 +1,3 @@
+/datum/font/vcr_osd_mono
+ name = "VCR OSD Mono"
+ font_family = 'interface/fonts/VCR_OSD_Mono.ttf'
diff --git a/interface/license.txt b/interface/license.txt
deleted file mode 100644
index 5f74403c50af..000000000000
--- a/interface/license.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-VCR OSD Mono created by Riciery Leal/mrmanet. Website indicates 100% free, author confirms it's free for all to use.
-(https://www.dafont.com/font-comment.php?file=vcr_osd_mono)
diff --git a/interface/skin.dmf b/interface/skin.dmf
index 8ab3258f9a6b..cc5fa5de9af9 100644
--- a/interface/skin.dmf
+++ b/interface/skin.dmf
@@ -110,12 +110,12 @@ window "mapwindow"
size = 640x480
anchor1 = 0,0
anchor2 = 100,100
- font-family = "Arial"
- font-size = 7
+ font-family = "Grand9K Pixel"
+ font-size = 6pt
is-default = true
right-click = true
saved-params = "zoom;letterbox;zoom-mode"
- style = ".center { text-align: center; } .maptext { font-family: 'Small Fonts'; font-size: 7px; -dm-text-outline: 1px black; color: white; } .command_headset { font-weight: bold;\tfont-size: 8px; } .small { font-size: 6px; } .big { font-size: 8px; } .reallybig { font-size: 8px; } .extremelybig { font-size: 8px; } .greentext { color: #00FF00; font-size: 7px; } .redtext { color: #FF0000; font-size: 7px; } .clown { color: #FF69Bf; font-size: 7px; font-weight: bold; } .his_grace { color: #15D512; } .hypnophrase { color: #0d0d0d; font-weight: bold; } .yell { font-weight: bold; } .italics { font-size: 6px; }"
+ style = ".center { text-align: center; } .maptext { font-family: 'Grand9K Pixel'; font-size: 6pt; -dm-text-outline: 1px black; color: white; line-height: 1.0; } .command_headset { font-weight: bold; } .context { font-family: 'Pixellari'; font-size: 12pt; -dm-text-outline: 1px black; } .subcontext { font-family: 'TinyUnicode'; font-size: 12pt; line-height: 0.75; } .small { font-family: 'Spess Font'; font-size: 6pt; line-height: 1.4; } .big { font-family: 'Pixellari'; font-size: 12pt; } .reallybig { font-size: 12pt; } .extremelybig { font-size: 12pt; } .greentext { color: #00FF00; font-size: 6pt; } .redtext { color: #FF0000; font-size: 6pt; } .clown { color: #FF69BF; font-weight: bold; } .his_grace { color: #15D512; } .hypnophrase { color: #0d0d0d; font-weight: bold; } .yell { font-weight: bold; } .italics { font-family: 'Spess Font'; font-size: 6pt; line-height: 1.4; }"
elem "status_bar"
type = LABEL
pos = 0,464
diff --git a/strings/tips.txt b/strings/tips.txt
index 0569c19c09af..146515ebd012 100644
--- a/strings/tips.txt
+++ b/strings/tips.txt
@@ -1,4 +1,4 @@
-@You can use the |, + and _ characters to emphasize parts of what you say in-game (e.g. say"my _ass_ |is| +heavy+." will be outputted as "my ass is heavy."). You can also escape these emphasizers by appending backslashes before them (e.g. say"1\+2\+3" will come out as "1+2+3" and not "1\2\3").
+@You can italicize, embolden or underline portions of your messages by enclosing them with |, + or _ respectively. You can also avoid this by adding backslashes (they won't show in the message) before these characters.
♪ Hey, have you ever tried appending the % character before your messages when speaking in-game? ♫
A Scientist will pay top dollar for your frogs!
A thrown glass of water can make a slippery tile, allowing you to slow down your pursuers in a pinch.
diff --git a/tgstation.dme b/tgstation.dme
index 49e4ec44ee8a..6113cd36a7ce 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -1,6 +1,7 @@
// DM Environment file for tgstation.dme.
// All manual changes should be made outside the BEGIN_ and END_ blocks.
// New source code should be placed in .dm files: choose File/New --> Code File.
+// interface\skin.dmf needs to be at the very end of the file.
// BEGIN_INTERNALS
// END_INTERNALS
@@ -5623,10 +5624,15 @@
#include "code\modules\zombie\items.dm"
#include "code\modules\zombie\organs.dm"
#include "code\ze_genesis_call\genesis_call.dm"
-#include "interface\fonts.dm"
#include "interface\interface.dm"
#include "interface\menu.dm"
#include "interface\stylesheet.dm"
+#include "interface\fonts\fonts_datum.dm"
+#include "interface\fonts\grand_9k.dm"
+#include "interface\fonts\pixellari.dm"
+#include "interface\fonts\spess_font.dm"
+#include "interface\fonts\tiny_unicode.dm"
+#include "interface\fonts\vcr_osd_mono.dm"
#include "interface\skin.dmf"
#include "monkestation\code\__DEFINES\projectile.dm"
#include "monkestation\code\__HELPERS\_lists.dm"