mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 20:48:56 +01:00
Maptext 2023: I can see clearly now (#76356)
## About The Pull Request We needed to replace our maptext font. Closes https://github.com/tgstation/tgstation/issues/73002 Replaced with a pair of new fonts, made some improvements and fixes while we're at it. - Two new maptext fonts: Grand9K and TinyUnicode - These two scale cleanly with BYOND icon sizes, so no antialiasing of already tiny fonts making it look bad when enlarged on screen - Fixed size fonts now have metrics to be used properly on overlays (such as status display) where a client (a requirement for MeasureText) is not feasible - VCR OSD Mono still here, usable as a variable size font with larger text - Synchronizes status display scrolling speed between lines - Fixed special maptexts for yelling, clown, redtext, greentext https://github.com/tgstation/tgstation/assets/83487515/7dbaf1d1-f1d5-46ff-8903-d95cab059ed8 ## Why It's Good For The Game Maptext looks like crap if you're one of the players who no longer have the old font. Even if you do have Small Fonts, this looks better. ## Changelog 🆑 LT3 refactor: Refactored maptext (those floating words) fix: Fixed special chat bubbles for yelling, clown, redtext, greentext fix: Fixed alignment of status display text code: Status displays now synchronize their message lines when scrolling /🆑
This commit is contained in:
@@ -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,
|
||||
))
|
||||
|
||||
+10
-1
@@ -4,9 +4,18 @@
|
||||
/// Prepares a text to be used for maptext. Use this so it doesn't look hideous.
|
||||
#define MAPTEXT(text) {"<span class='maptext'>[##text]</span>"}
|
||||
|
||||
/// Prepares a text to be used for maptext, using a font that can handle larger text better.
|
||||
/// 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) {"<span style='font-family: \"VCR OSD Mono\"'>[##text]</span>"}
|
||||
|
||||
/// Prepares a text to be used for maptext using a pixel font. Cleaner but less size choices.
|
||||
/// Standard size (ie: normal runechat) Use only sizing pt, multiples of 6: 6pt 12pt 18pt 24pt etc. - Not for use with px sizing
|
||||
#define MAPTEXT_GRAND9K(text) {"<span style='font-family: \"Grand9K Pixel\"'>[##text]</span>"}
|
||||
|
||||
/// Prepares a text to be used for maptext using a pixel font. Cleaner but less size choices.
|
||||
/// Small size. (ie: whisper runechat) Use only size pt, multiples of 12: 12pt 24pt 48pt etc. - Not for use with px sizing
|
||||
#define MAPTEXT_TINY_UNICODE(text) {"<span style='font-family: \"TinyUnicode\"'>[##text]</span>"}
|
||||
|
||||
/// Macro from Lummox used to get height from a MeasureText proc.
|
||||
/// resolves the MeasureText() return value once, then resolves the height, then sets return_var to that.
|
||||
#define WXH_TO_HEIGHT(measurement, return_var) \
|
||||
|
||||
@@ -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 = "<span class='center [extra_classes.Join(" ")]' style='color: [tgt_color]'>[owner.say_emphasis(text)]</span>"
|
||||
var/complete_text = "<span style='color: [tgt_color]'><span class='center [extra_classes.Join(" ")]'>[owner.say_emphasis(text)]</span></span>"
|
||||
|
||||
var/mheight
|
||||
WXH_TO_HEIGHT(owned_by.MeasureText(complete_text, null, CHAT_MESSAGE_WIDTH), mheight)
|
||||
|
||||
+5
-5
@@ -2035,7 +2035,7 @@
|
||||
active_hud.screentip_text.maptext = ""
|
||||
return
|
||||
|
||||
active_hud.screentip_text.maptext_y = 0
|
||||
active_hud.screentip_text.maptext_y = 16 // 16px 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 = ""
|
||||
@@ -2102,15 +2102,15 @@
|
||||
extra_lines++
|
||||
|
||||
if(extra_lines)
|
||||
extra_context = "<br><span style='font-size: 7px'>[lmb_rmb_line][ctrl_lmb_ctrl_rmb_line][alt_lmb_alt_rmb_line][shift_lmb_ctrl_shift_lmb_line]</span>"
|
||||
//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 = "<br><span class='small'>[lmb_rmb_line][ctrl_lmb_ctrl_rmb_line][alt_lmb_alt_rmb_line][shift_lmb_ctrl_shift_lmb_line]</span>"
|
||||
//first extra line pushes atom name line up 11px, subsequent lines push it up 8px, this offsets that and keeps the first line in the same place
|
||||
active_hud.screentip_text.maptext_y = 5 + (extra_lines - 1) * -8
|
||||
|
||||
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 = "<span class='maptext' style='text-align: center; font-size: 32px; color: [active_hud.screentip_color]'>[name][extra_context]</span>"
|
||||
active_hud.screentip_text.maptext = "<span class='maptext' style='text-align: center; font-size: 6pt; color: [active_hud.screentip_color]'>[name][extra_context]</span>"
|
||||
|
||||
/// Gets a merger datum representing the connected blob of objects in the allowed_types argument
|
||||
/atom/proc/GetMergeGroup(id, list/allowed_types)
|
||||
|
||||
@@ -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(1.5, 0.7, 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
|
||||
|
||||
@@ -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 {"<div style="color:[text_color];font:[FONT_STYLE][center ? ";text-align:center" : ""]" valign="top">[text]</div>"}
|
||||
return {"<div style="color:[text_color];font:[FONT_STYLE][center ? ";text-align:center" : "text-align:right"]" valign="top">[text]</div>"}
|
||||
|
||||
/// Evac display which shows shuttle timer or message set by Command.
|
||||
/obj/machinery/status_display/evac
|
||||
@@ -576,5 +551,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
|
||||
|
||||
@@ -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 = {"<div style="font:5pt 'Small Fonts';color:[LIGHT_COLOR_DARK_BLUE]">[current_lift_floor]</div>"}
|
||||
maptext = MAPTEXT_TINY_UNICODE("<div style='font-size:12pt; color:[LIGHT_COLOR_DARK_BLUE]'>[current_lift_floor]</div>")
|
||||
|
||||
/obj/machinery/lift_indicator/update_overlays()
|
||||
. = ..()
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
@@ -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'
|
||||
Binary file not shown.
Binary file not shown.
@@ -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
|
||||
@@ -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
|
||||
)
|
||||
@@ -0,0 +1,8 @@
|
||||
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)
|
||||
|
||||
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)
|
||||
|
||||
Tiny Unicode created by Jakob Riedle/DuffsDevice. Website indicates free for commercial use.
|
||||
(https://fontmeme.com/fonts/tiny-unicode-font/)
|
||||
@@ -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
|
||||
)
|
||||
@@ -0,0 +1,3 @@
|
||||
/datum/font/vcr_osd_mono
|
||||
name = "VCR OSD Mono"
|
||||
font_family = 'interface/fonts/VCR_OSD_Mono.ttf'
|
||||
@@ -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)
|
||||
+3
-3
@@ -111,12 +111,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; line-height: 1.1; } .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; } .small { font-family: 'TinyUnicode'; font-size: 12pt; line-height: 0.75; } .big { font-size: 8pt; } .reallybig { font-size: 8pt; } .extremelybig { font-size: 8pt; } .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: 'TinyUnicode'; font-size: 12pt; line-height: 0.75; }"
|
||||
elem "status_bar"
|
||||
type = LABEL
|
||||
pos = 0,464
|
||||
|
||||
+5
-1
@@ -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
|
||||
|
||||
@@ -5350,9 +5351,12 @@
|
||||
#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\tiny_unicode.dm"
|
||||
#include "interface\fonts\vcr_osd_mono.dm"
|
||||
#include "interface\skin.dmf"
|
||||
// END_INCLUDE
|
||||
|
||||
Reference in New Issue
Block a user