mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
This reverts commit e529bab840.
This commit is contained in:
@@ -99,14 +99,6 @@
|
||||
}\
|
||||
/datum/controller/subsystem/##X
|
||||
|
||||
#define TIMER_SUBSYSTEM_DEF(X) GLOBAL_REAL(SS##X, /datum/controller/subsystem/timer/##X);\
|
||||
/datum/controller/subsystem/timer/##X/New(){\
|
||||
NEW_SS_GLOBAL(SS##X);\
|
||||
PreInit();\
|
||||
}\
|
||||
/datum/controller/subsystem/timer/##X/fire() {..() /*just so it shows up on the profiler*/} \
|
||||
/datum/controller/subsystem/timer/##X
|
||||
|
||||
#define PROCESSING_SUBSYSTEM_DEF(X) GLOBAL_REAL(SS##X, /datum/controller/subsystem/processing/##X);\
|
||||
/datum/controller/subsystem/processing/##X/New(){\
|
||||
NEW_SS_GLOBAL(SS##X);\
|
||||
|
||||
@@ -22,11 +22,6 @@
|
||||
/// runs stoplag if tick_usage is above the limit
|
||||
#define CHECK_TICK ( TICK_CHECK ? stoplag() : 0 )
|
||||
|
||||
/// Checks if a sleeping proc is running before or after the master controller
|
||||
#define RUNNING_BEFORE_MASTER ( Master.last_run != null && Master.last_run != world.time )
|
||||
/// Returns true if a verb ought to yield to the MC (IE: queue up to be processed by a subsystem)
|
||||
#define VERB_SHOULD_YIELD ( TICK_CHECK || RUNNING_BEFORE_MASTER )
|
||||
|
||||
/// Returns true if tick usage is above 95, for high priority usage
|
||||
#define TICK_CHECK_HIGH_PRIORITY ( TICK_USAGE > 95 )
|
||||
/// runs stoplag if tick_usage is above 95, for high priority usage
|
||||
|
||||
@@ -20,8 +20,5 @@
|
||||
#define MESSAGE_TYPE_MENTORPM "mentorpm"
|
||||
#define MESSAGE_TYPE_DONATOR "donator"
|
||||
|
||||
/// Max length of chat message in characters
|
||||
#define CHAT_MESSAGE_MAX_LENGTH 110
|
||||
|
||||
/// Adds a generic box around whatever message you're sending in chat. Really makes things stand out.
|
||||
#define examine_block(str) ("<div class='examine_block'>" + str + "</div>")
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
// 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,
|
||||
))
|
||||
@@ -92,6 +92,9 @@
|
||||
#define EMISSIVE_BLOCKER_LAYER 12
|
||||
#define EMISSIVE_BLOCKER_RENDER_TARGET "*EMISSIVE_BLOCKER_PLANE"
|
||||
|
||||
#define CHAT_LAYER 12.0001 // Do not insert layers between these two values
|
||||
#define CHAT_LAYER_MAX 12.9999
|
||||
|
||||
#define EMISSIVE_PLANE 13
|
||||
#define EMISSIVE_LAYER 13
|
||||
#define EMISSIVE_RENDER_TARGET "*EMISSIVE_PLANE"
|
||||
|
||||
@@ -1,25 +1,8 @@
|
||||
/// 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 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) \
|
||||
do { \
|
||||
var/_measurement = measurement; \
|
||||
return_var = text2num(copytext(_measurement, findtextEx(_measurement, "x") + 1)); \
|
||||
} while(FALSE);
|
||||
/// Macro from Lummox used to get height from a MeasureText proc
|
||||
#define WXH_TO_HEIGHT(x) text2num(copytext(x, findtextEx(x, "x") + 1))
|
||||
|
||||
/*
|
||||
* Uses MAPTEXT to format antag points into a more appealing format
|
||||
|
||||
@@ -134,8 +134,6 @@
|
||||
#define TRAIT_CRITICAL_CONDITION "critical-condition"
|
||||
/// Is frozen in place
|
||||
#define TRAIT_FROZEN "frozen"
|
||||
/// Is runechat for this atom/movable currently disabled, regardless of prefs or anything?
|
||||
#define TRAIT_RUNECHAT_HIDDEN "runechat_hidden"
|
||||
/// trait associated to a stat value or range of
|
||||
#define STAT_TRAIT "stat"
|
||||
#define TRAIT_INCAPACITATED "incapacitated"
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
GLOBAL_LIST_INIT(traits_by_type, list(
|
||||
/mob = list(/atom/movable = list(
|
||||
"TRAIT_MOVE_PHASING" = TRAIT_MOVE_PHASING,
|
||||
"TRAIT_RUNECHAT_HIDDEN" = TRAIT_RUNECHAT_HIDDEN,
|
||||
))))
|
||||
/// value -> trait name, generated on use from trait_by_type global
|
||||
GLOBAL_LIST(trait_name_map)
|
||||
|
||||
@@ -1,14 +1,243 @@
|
||||
TIMER_SUBSYSTEM_DEF(runechat)
|
||||
/// Controls how many buckets should be kept, each representing a tick. (30 seconds worth)
|
||||
#define BUCKET_LEN (world.fps * 1 * 30)
|
||||
/// Helper for getting the correct bucket for a given chatmessage
|
||||
#define BUCKET_POS(scheduled_destruction) (((round((scheduled_destruction - SSrunechat.head_offset) / world.tick_lag) + 1) % BUCKET_LEN) || BUCKET_LEN)
|
||||
/// Gets the maximum time at which messages will be handled in buckets, used for deferring to secondary queue
|
||||
#define BUCKET_LIMIT (world.time + TICKS2DS(min(BUCKET_LEN - (SSrunechat.practical_offset - DS2TICKS(world.time - SSrunechat.head_offset)) - 1, BUCKET_LEN - 1)))
|
||||
|
||||
/**
|
||||
* # Runechat Subsystem
|
||||
*
|
||||
* Maintains a timer-like system to handle destruction of runechat messages. Much of this code is modeled
|
||||
* after or adapted from the timer subsystem.
|
||||
*
|
||||
* Note that this has the same structure for storing and queueing messages as the timer subsystem does
|
||||
* for handling timers: the bucket_list is a list of chatmessage datums, each of which are the head
|
||||
* of a circularly linked list. Any given index in bucket_list could be null, representing an empty bucket.
|
||||
*/
|
||||
SUBSYSTEM_DEF(runechat)
|
||||
name = "Runechat"
|
||||
flags = SS_TICKER | SS_NO_INIT
|
||||
wait = 1
|
||||
priority = FIRE_PRIORITY_RUNECHAT
|
||||
|
||||
var/list/datum/callback/message_queue = list()
|
||||
/// world.time of the first entry in the bucket list, effectively the 'start time' of the current buckets
|
||||
var/head_offset = 0
|
||||
/// Index of the first non-empty bucket
|
||||
var/practical_offset = 1
|
||||
/// world.tick_lag the bucket was designed for
|
||||
var/bucket_resolution = 0
|
||||
/// How many messages are in the buckets
|
||||
var/bucket_count = 0
|
||||
/// List of buckets, each bucket holds every message that has to be killed that byond tick
|
||||
var/list/bucket_list = list()
|
||||
/// Queue used for storing messages that are scheduled for deletion too far in the future for the buckets
|
||||
var/list/datum/chatmessage/second_queue = list()
|
||||
|
||||
/datum/controller/subsystem/timer/runechat/fire(resumed)
|
||||
. = ..() //poggers
|
||||
while(message_queue.len)
|
||||
var/datum/callback/queued_message = message_queue[message_queue.len]
|
||||
queued_message.Invoke()
|
||||
message_queue.len--
|
||||
if(MC_TICK_CHECK)
|
||||
return
|
||||
/datum/controller/subsystem/runechat/PreInit()
|
||||
bucket_list.len = BUCKET_LEN
|
||||
head_offset = world.time
|
||||
bucket_resolution = world.tick_lag
|
||||
|
||||
/datum/controller/subsystem/runechat/stat_entry(msg)
|
||||
msg += "ActMsgs:[bucket_count] SecQueue:[length(second_queue)]"
|
||||
return msg
|
||||
|
||||
/datum/controller/subsystem/runechat/get_metrics()
|
||||
. = ..()
|
||||
.["buckets"] = bucket_count
|
||||
.["second_queue"] = length(second_queue)
|
||||
|
||||
/datum/controller/subsystem/runechat/fire(resumed = FALSE)
|
||||
// Store local references to datum vars as it is faster to access them this way
|
||||
var/list/bucket_list = src.bucket_list
|
||||
|
||||
if (MC_TICK_CHECK)
|
||||
return
|
||||
|
||||
// Check for when we need to loop the buckets, this occurs when
|
||||
// the head_offset is approaching BUCKET_LEN ticks in the past
|
||||
if (practical_offset > BUCKET_LEN)
|
||||
head_offset += TICKS2DS(BUCKET_LEN)
|
||||
practical_offset = 1
|
||||
resumed = FALSE
|
||||
|
||||
// Check for when we have to reset buckets, typically from auto-reset
|
||||
if ((length(bucket_list) != BUCKET_LEN) || (world.tick_lag != bucket_resolution))
|
||||
reset_buckets()
|
||||
bucket_list = src.bucket_list
|
||||
resumed = FALSE
|
||||
|
||||
// Store a reference to the 'working' chatmessage so that we can resume if the MC
|
||||
// has us stop mid-way through processing
|
||||
var/static/datum/chatmessage/cm
|
||||
if (!resumed)
|
||||
cm = null
|
||||
|
||||
// Iterate through each bucket starting from the practical offset
|
||||
while (practical_offset <= BUCKET_LEN && head_offset + ((practical_offset - 1) * world.tick_lag) <= world.time)
|
||||
var/datum/chatmessage/bucket_head = bucket_list[practical_offset]
|
||||
if (!cm || !bucket_head || cm == bucket_head)
|
||||
bucket_head = bucket_list[practical_offset]
|
||||
cm = bucket_head
|
||||
|
||||
while (cm)
|
||||
// If the chatmessage hasn't yet had its life ended then do that now
|
||||
var/datum/chatmessage/next = cm.next
|
||||
if (!cm.eol_complete)
|
||||
cm.end_of_life()
|
||||
else if (!QDELETED(cm)) // otherwise if we haven't deleted it yet, do so (this is after EOL completion)
|
||||
qdel(cm)
|
||||
|
||||
if (MC_TICK_CHECK)
|
||||
return
|
||||
|
||||
// Break once we've processed the entire bucket
|
||||
cm = next
|
||||
if (cm == bucket_head)
|
||||
break
|
||||
|
||||
// Empty the bucket, check if anything in the secondary queue should be shifted to this bucket
|
||||
bucket_list[practical_offset++] = null
|
||||
var/i = 0
|
||||
for (i in 1 to length(second_queue))
|
||||
cm = second_queue[i]
|
||||
if (cm.scheduled_destruction >= BUCKET_LIMIT)
|
||||
i--
|
||||
break
|
||||
|
||||
// Transfer the message into the bucket, performing necessary circular doubly-linked list operations
|
||||
bucket_count++
|
||||
var/bucket_pos = max(1, BUCKET_POS(cm.scheduled_destruction))
|
||||
var/datum/timedevent/head = bucket_list[bucket_pos]
|
||||
if (!head)
|
||||
bucket_list[bucket_pos] = cm
|
||||
cm.next = null
|
||||
cm.prev = null
|
||||
continue
|
||||
|
||||
if (!head.prev)
|
||||
head.prev = head
|
||||
cm.next = head
|
||||
cm.prev = head.prev
|
||||
cm.next.prev = cm
|
||||
cm.prev.next = cm
|
||||
if (i)
|
||||
second_queue.Cut(1, i + 1)
|
||||
cm = null
|
||||
|
||||
/datum/controller/subsystem/runechat/Recover()
|
||||
bucket_list |= SSrunechat.bucket_list
|
||||
second_queue |= SSrunechat.second_queue
|
||||
|
||||
/datum/controller/subsystem/runechat/proc/reset_buckets()
|
||||
bucket_list.len = BUCKET_LEN
|
||||
head_offset = world.time
|
||||
bucket_resolution = world.tick_lag
|
||||
|
||||
/**
|
||||
* Enters the runechat subsystem with this chatmessage, inserting it into the end-of-life queue
|
||||
*
|
||||
* This will also account for a chatmessage already being registered, and in which case
|
||||
* the position will be updated to remove it from the previous location if necessary
|
||||
*
|
||||
* Arguments:
|
||||
* * new_sched_destruction Optional, when provided is used to update an existing message with the new specified time
|
||||
*/
|
||||
/datum/chatmessage/proc/enter_subsystem(new_sched_destruction = 0)
|
||||
// Get local references from subsystem as they are faster to access than the datum references
|
||||
var/list/bucket_list = SSrunechat.bucket_list
|
||||
var/list/second_queue = SSrunechat.second_queue
|
||||
|
||||
// When necessary, de-list the chatmessage from its previous position
|
||||
if (new_sched_destruction)
|
||||
if (scheduled_destruction >= BUCKET_LIMIT)
|
||||
second_queue -= src
|
||||
else
|
||||
SSrunechat.bucket_count--
|
||||
var/bucket_pos = BUCKET_POS(scheduled_destruction)
|
||||
if (bucket_pos > 0)
|
||||
var/datum/chatmessage/bucket_head = bucket_list[bucket_pos]
|
||||
if (bucket_head == src)
|
||||
bucket_list[bucket_pos] = next
|
||||
if (prev != next)
|
||||
prev.next = next
|
||||
next.prev = prev
|
||||
else
|
||||
prev?.next = null
|
||||
next?.prev = null
|
||||
prev = next = null
|
||||
scheduled_destruction = new_sched_destruction
|
||||
|
||||
// Ensure the scheduled destruction time is properly bound to avoid missing a scheduled event
|
||||
scheduled_destruction = max(CEILING(scheduled_destruction, world.tick_lag), world.time + world.tick_lag)
|
||||
|
||||
// Handle insertion into the secondary queue if the required time is outside our tracked amounts
|
||||
if (scheduled_destruction >= BUCKET_LIMIT)
|
||||
BINARY_INSERT(src, SSrunechat.second_queue, /datum/chatmessage, src, scheduled_destruction, COMPARE_KEY)
|
||||
return
|
||||
|
||||
// Get bucket position and a local reference to the datum var, it's faster to access this way
|
||||
var/bucket_pos = BUCKET_POS(scheduled_destruction)
|
||||
|
||||
// Get the bucket head for that bucket, increment the bucket count
|
||||
var/datum/chatmessage/bucket_head = bucket_list[bucket_pos]
|
||||
SSrunechat.bucket_count++
|
||||
|
||||
// If there is no existing head of this bucket, we can set this message to be that head
|
||||
if (!bucket_head)
|
||||
bucket_list[bucket_pos] = src
|
||||
return
|
||||
|
||||
// Otherwise it's a simple insertion into the circularly doubly-linked list
|
||||
if (!bucket_head.prev)
|
||||
bucket_head.prev = bucket_head
|
||||
next = bucket_head
|
||||
prev = bucket_head.prev
|
||||
next.prev = src
|
||||
prev.next = src
|
||||
|
||||
|
||||
/**
|
||||
* Removes this chatmessage datum from the runechat subsystem
|
||||
*/
|
||||
/datum/chatmessage/proc/leave_subsystem()
|
||||
// Attempt to find the bucket that contains this chat message
|
||||
var/bucket_pos = BUCKET_POS(scheduled_destruction)
|
||||
|
||||
// Get local references to the subsystem's vars, faster than accessing on the datum
|
||||
var/list/bucket_list = SSrunechat.bucket_list
|
||||
var/list/second_queue = SSrunechat.second_queue
|
||||
|
||||
// Attempt to get the head of the bucket
|
||||
var/datum/chatmessage/bucket_head
|
||||
if (bucket_pos > 0)
|
||||
bucket_head = bucket_list[bucket_pos]
|
||||
|
||||
// Decrement the number of messages in buckets if the message is
|
||||
// the head of the bucket, or has a SD less than BUCKET_LIMIT implying it fits
|
||||
// into an existing bucket, or is otherwise not present in the secondary queue
|
||||
if(bucket_head == src)
|
||||
bucket_list[bucket_pos] = next
|
||||
SSrunechat.bucket_count--
|
||||
else if(scheduled_destruction < BUCKET_LIMIT)
|
||||
SSrunechat.bucket_count--
|
||||
else
|
||||
var/l = length(second_queue)
|
||||
second_queue -= src
|
||||
if(l == length(second_queue))
|
||||
SSrunechat.bucket_count--
|
||||
|
||||
// Remove the message from the bucket, ensuring to maintain
|
||||
// the integrity of the bucket's list if relevant
|
||||
if(prev != next)
|
||||
prev.next = next
|
||||
next.prev = prev
|
||||
else
|
||||
prev?.next = null
|
||||
next?.prev = null
|
||||
prev = next = null
|
||||
|
||||
#undef BUCKET_LEN
|
||||
#undef BUCKET_POS
|
||||
#undef BUCKET_LIMIT
|
||||
|
||||
@@ -1,38 +1,33 @@
|
||||
/// How long the chat message's spawn-in animation will occur for
|
||||
#define CHAT_MESSAGE_SPAWN_TIME (0.2 SECONDS)
|
||||
#define CHAT_MESSAGE_SPAWN_TIME 0.2 SECONDS
|
||||
/// How long the chat message will exist prior to any exponential decay
|
||||
#define CHAT_MESSAGE_LIFESPAN (5 SECONDS)
|
||||
#define CHAT_MESSAGE_LIFESPAN 5 SECONDS
|
||||
/// How long the chat message's end of life fading animation will occur for
|
||||
#define CHAT_MESSAGE_EOL_FADE (0.7 SECONDS)
|
||||
/// Grace period for fade before we actually delete the chat message
|
||||
#define CHAT_MESSAGE_GRACE_PERIOD (0.2 SECONDS)
|
||||
#define CHAT_MESSAGE_EOL_FADE 0.7 SECONDS
|
||||
/// Factor of how much the message index (number of messages) will account to exponential decay
|
||||
#define CHAT_MESSAGE_EXP_DECAY 0.7
|
||||
#define CHAT_MESSAGE_EXP_DECAY 0.7
|
||||
/// Factor of how much height will account to exponential decay
|
||||
#define CHAT_MESSAGE_HEIGHT_DECAY 0.9
|
||||
#define CHAT_MESSAGE_HEIGHT_DECAY 0.9
|
||||
/// Approximate height in pixels of an 'average' line, used for height decay
|
||||
#define CHAT_MESSAGE_APPROX_LHEIGHT 11
|
||||
#define CHAT_MESSAGE_APPROX_LHEIGHT 11
|
||||
/// Max width of chat message in pixels
|
||||
#define CHAT_MESSAGE_WIDTH 112
|
||||
/// The dimensions of the chat message icons
|
||||
#define CHAT_MESSAGE_ICON_SIZE 9
|
||||
|
||||
///Base layer of chat elements
|
||||
#define CHAT_LAYER 12.0001
|
||||
///Highest possible layer of chat elements
|
||||
#define CHAT_LAYER_MAX 12.9999
|
||||
#define CHAT_MESSAGE_WIDTH 96
|
||||
/// Max length of chat message in characters
|
||||
#define CHAT_MESSAGE_MAX_LENGTH 110
|
||||
/// Maximum precision of float before rounding errors occur (in this context)
|
||||
#define CHAT_LAYER_Z_STEP 0.0001
|
||||
#define CHAT_LAYER_Z_STEP 0.0001
|
||||
/// The number of z-layer 'slices' usable by the chat message layering
|
||||
#define CHAT_LAYER_MAX_Z (CHAT_LAYER_MAX - CHAT_LAYER) / CHAT_LAYER_Z_STEP
|
||||
#define CHAT_LAYER_MAX_Z (CHAT_LAYER_MAX - CHAT_LAYER) / CHAT_LAYER_Z_STEP
|
||||
/// The dimensions of the chat message icons
|
||||
#define CHAT_MESSAGE_ICON_SIZE 9
|
||||
|
||||
/**
|
||||
* # Chat Message Overlay
|
||||
*
|
||||
* Datum for generating a message overlay on the map
|
||||
*/
|
||||
* # Chat Message Overlay
|
||||
*
|
||||
* Datum for generating a message overlay on the map
|
||||
*/
|
||||
/datum/chatmessage
|
||||
/// The visual element of the chat message
|
||||
/// The visual element of the chat messsage
|
||||
var/image/message
|
||||
/// The location in which the message is appearing
|
||||
var/atom/message_loc
|
||||
@@ -50,22 +45,18 @@
|
||||
var/datum/chatmessage/prev
|
||||
/// The current index used for adjusting the layer of each sequential chat message such that recent messages will overlay older ones
|
||||
var/static/current_z_idx = 0
|
||||
/// When we started animating the message
|
||||
var/animate_start = 0
|
||||
/// Our animation lifespan, how long this message will last
|
||||
var/animate_lifespan = 0
|
||||
|
||||
/**
|
||||
* Constructs a chat message overlay
|
||||
*
|
||||
* Arguments:
|
||||
* * text - The text content of the overlay
|
||||
* * target - The target atom to display the overlay at
|
||||
* * owner - The mob that owns this overlay, only this mob will be able to view it
|
||||
* * language - The language this message was spoken in
|
||||
* * extra_classes - Extra classes to apply to the span that holds the text
|
||||
* * lifespan - The lifespan of the message in deciseconds
|
||||
*/
|
||||
* Constructs a chat message overlay
|
||||
*
|
||||
* Arguments:
|
||||
* * text - The text content of the overlay
|
||||
* * target - The target atom to display the overlay at
|
||||
* * owner - The mob that owns this overlay, only this mob will be able to view it
|
||||
* * language - The language this message was spoken in
|
||||
* * extra_classes - Extra classes to apply to the span that holds the text
|
||||
* * lifespan - The lifespan of the message in deciseconds
|
||||
*/
|
||||
/datum/chatmessage/New(text, atom/target, mob/owner, datum/language/language, list/extra_classes = list(), lifespan = CHAT_MESSAGE_LIFESPAN)
|
||||
. = ..()
|
||||
if (!istype(target))
|
||||
@@ -77,44 +68,41 @@
|
||||
INVOKE_ASYNC(src, PROC_REF(generate_image), text, target, owner, language, extra_classes, lifespan)
|
||||
|
||||
/datum/chatmessage/Destroy()
|
||||
if (!QDELING(owned_by))
|
||||
if(REALTIMEOFDAY < animate_start + animate_lifespan)
|
||||
stack_trace("Del'd before we finished fading, with [(animate_start + animate_lifespan) - REALTIMEOFDAY] time left")
|
||||
|
||||
if (owned_by)
|
||||
if (owned_by.seen_messages)
|
||||
LAZYREMOVEASSOC(owned_by.seen_messages, message_loc, src)
|
||||
owned_by.images.Remove(message)
|
||||
|
||||
owned_by = null
|
||||
message_loc = null
|
||||
message = null
|
||||
leave_subsystem()
|
||||
return ..()
|
||||
|
||||
/**
|
||||
* Calls qdel on the chatmessage when its parent is deleted, used to register qdel signal
|
||||
*/
|
||||
* Calls qdel on the chatmessage when its parent is deleted, used to register qdel signal
|
||||
*/
|
||||
/datum/chatmessage/proc/on_parent_qdel()
|
||||
SIGNAL_HANDLER
|
||||
qdel(src)
|
||||
|
||||
/**
|
||||
* Generates a chat message image representation
|
||||
*
|
||||
* Arguments:
|
||||
* * text - The text content of the overlay
|
||||
* * target - The target atom to display the overlay at
|
||||
* * owner - The mob that owns this overlay, only this mob will be able to view it
|
||||
* * language - The language this message was spoken in
|
||||
* * extra_classes - Extra classes to apply to the span that holds the text
|
||||
* * lifespan - The lifespan of the message in deciseconds
|
||||
*/
|
||||
* Generates a chat message image representation
|
||||
*
|
||||
* Arguments:
|
||||
* * text - The text content of the overlay
|
||||
* * target - The target atom to display the overlay at
|
||||
* * owner - The mob that owns this overlay, only this mob will be able to view it
|
||||
* * language - The language this message was spoken in
|
||||
* * extra_classes - Extra classes to apply to the span that holds the text
|
||||
* * lifespan - The lifespan of the message in deciseconds
|
||||
*/
|
||||
/datum/chatmessage/proc/generate_image(text, atom/target, mob/owner, datum/language/language, list/extra_classes, lifespan)
|
||||
/// Cached icons to show what language the user is speaking
|
||||
var/static/list/language_icons
|
||||
|
||||
// Register client who owns this message
|
||||
owned_by = owner.client
|
||||
RegisterSignal(owned_by, COMSIG_PARENT_QDELETING, PROC_REF(on_parent_qdel))
|
||||
RegisterSignal(owned_by, COMSIG_PARENT_QDELETING, PROC_REF(on_parent_qdel), src)
|
||||
|
||||
// Remove spans in the message from things like the recorder
|
||||
var/static/regex/span_check = new(@"<\/?span[^>]*>", "gi")
|
||||
@@ -145,10 +133,6 @@
|
||||
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
|
||||
@@ -175,67 +159,26 @@
|
||||
var/tgt_color = extra_classes.Find("italics") ? target.chat_color_darkened : target.chat_color
|
||||
|
||||
// Approximate text height
|
||||
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)
|
||||
|
||||
|
||||
if(!VERB_SHOULD_YIELD)
|
||||
return finish_image_generation(mheight, target, owner, complete_text, lifespan)
|
||||
|
||||
var/datum/callback/our_callback = CALLBACK(src, PROC_REF(finish_image_generation), mheight, target, owner, complete_text, lifespan)
|
||||
SSrunechat.message_queue += our_callback
|
||||
return
|
||||
|
||||
///finishes the image generation after the MeasureText() call in generate_image().
|
||||
///necessary because after that call the proc can resume at the end of the tick and cause overtime.
|
||||
/datum/chatmessage/proc/finish_image_generation(mheight, atom/target, mob/owner, complete_text, lifespan)
|
||||
var/rough_time = REALTIMEOFDAY
|
||||
var/complete_text = "<span class='center maptext [extra_classes.Join(" ")]' style='color: [tgt_color]'>[text]</span>"
|
||||
var/mheight = WXH_TO_HEIGHT(owned_by.MeasureText(complete_text, null, CHAT_MESSAGE_WIDTH))
|
||||
approx_lines = max(1, mheight / CHAT_MESSAGE_APPROX_LHEIGHT)
|
||||
var/starting_height = target.maptext_height
|
||||
|
||||
// Translate any existing messages upwards, apply exponential decay factors to timers
|
||||
message_loc = isturf(target) ? target : get_atom_on_turf(target)
|
||||
message_loc = get_atom_on_turf(target)
|
||||
if (owned_by.seen_messages)
|
||||
var/idx = 1
|
||||
var/combined_height = approx_lines
|
||||
for(var/datum/chatmessage/m as anything in owned_by.seen_messages[message_loc])
|
||||
for(var/msg in owned_by.seen_messages[message_loc])
|
||||
var/datum/chatmessage/m = msg
|
||||
animate(m.message, pixel_y = m.message.pixel_y + mheight, time = CHAT_MESSAGE_SPAWN_TIME)
|
||||
combined_height += m.approx_lines
|
||||
|
||||
var/time_spent = rough_time - m.animate_start
|
||||
var/time_before_fade = m.animate_lifespan - CHAT_MESSAGE_EOL_FADE
|
||||
|
||||
// When choosing to update the remaining time we have to be careful not to update the
|
||||
// scheduled time once the EOL has been executed.
|
||||
if (time_spent >= time_before_fade)
|
||||
if(m.message.pixel_y < starting_height)
|
||||
var/max_height = m.message.pixel_y + m.approx_lines * CHAT_MESSAGE_APPROX_LHEIGHT - starting_height
|
||||
if(max_height > 0)
|
||||
animate(m.message, pixel_y = m.message.pixel_y + max_height, time = CHAT_MESSAGE_SPAWN_TIME, flags = ANIMATION_PARALLEL)
|
||||
else if(mheight + starting_height >= m.message.pixel_y)
|
||||
animate(m.message, pixel_y = m.message.pixel_y + mheight, time = CHAT_MESSAGE_SPAWN_TIME, flags = ANIMATION_PARALLEL)
|
||||
continue
|
||||
|
||||
var/remaining_time = time_before_fade * (CHAT_MESSAGE_EXP_DECAY ** idx++) * (CHAT_MESSAGE_HEIGHT_DECAY ** combined_height)
|
||||
// Ensure we don't accidentially spike alpha up or something silly like that
|
||||
m.message.alpha = m.get_current_alpha(time_spent)
|
||||
if (remaining_time > 0)
|
||||
// Stay faded in for a while, then
|
||||
animate(m.message, alpha = 255, remaining_time)
|
||||
// Fade out
|
||||
animate(alpha = 0, time = CHAT_MESSAGE_EOL_FADE)
|
||||
m.animate_lifespan = remaining_time + CHAT_MESSAGE_EOL_FADE
|
||||
else
|
||||
// Your time has come my son
|
||||
animate(alpha = 0, time = CHAT_MESSAGE_EOL_FADE)
|
||||
// We run this after the alpha animate, because we don't want to interrup it, but also don't want to block it by running first
|
||||
// Sooo instead we do this. bit messy but it fuckin works
|
||||
if(m.message.pixel_y < starting_height)
|
||||
var/max_height = m.message.pixel_y + m.approx_lines * CHAT_MESSAGE_APPROX_LHEIGHT - starting_height
|
||||
if(max_height > 0)
|
||||
animate(m.message, pixel_y = m.message.pixel_y + max_height, time = CHAT_MESSAGE_SPAWN_TIME, flags = ANIMATION_PARALLEL)
|
||||
else if(mheight + starting_height >= m.message.pixel_y)
|
||||
animate(m.message, pixel_y = m.message.pixel_y + mheight, time = CHAT_MESSAGE_SPAWN_TIME, flags = ANIMATION_PARALLEL)
|
||||
// scheduled time once the EOL completion time has been set.
|
||||
var/sched_remaining = m.scheduled_destruction - world.time
|
||||
if (!m.eol_complete)
|
||||
var/remaining_time = (sched_remaining) * (CHAT_MESSAGE_EXP_DECAY ** idx++) * (CHAT_MESSAGE_HEIGHT_DECAY ** combined_height)
|
||||
m.enter_subsystem(world.time + remaining_time) // push updated time to runechat SS
|
||||
|
||||
// Reset z index if relevant
|
||||
if (current_z_idx >= CHAT_LAYER_MAX_Z)
|
||||
@@ -246,53 +189,43 @@
|
||||
message.plane = RUNECHAT_PLANE
|
||||
message.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA | KEEP_APART
|
||||
message.alpha = 0
|
||||
message.pixel_y = starting_height
|
||||
message.pixel_x = -target.base_pixel_x
|
||||
message.pixel_y = owner.bound_height * 0.95
|
||||
message.maptext_width = CHAT_MESSAGE_WIDTH
|
||||
message.maptext_height = mheight * 1.25 // We add extra because some characters are superscript, like actions
|
||||
message.maptext_height = mheight
|
||||
message.maptext_x = (CHAT_MESSAGE_WIDTH - owner.bound_width) * -0.5
|
||||
message.maptext = MAPTEXT(complete_text)
|
||||
|
||||
animate_start = rough_time
|
||||
animate_lifespan = lifespan
|
||||
message.maptext = complete_text
|
||||
|
||||
// View the message
|
||||
LAZYADDASSOCLIST(owned_by.seen_messages, message_loc, src)
|
||||
owned_by.images |= message
|
||||
|
||||
// Fade in
|
||||
animate(message, alpha = 255, time = CHAT_MESSAGE_SPAWN_TIME)
|
||||
var/time_before_fade = lifespan - CHAT_MESSAGE_SPAWN_TIME - CHAT_MESSAGE_EOL_FADE
|
||||
// Stay faded in
|
||||
animate(alpha = 255, time = time_before_fade)
|
||||
// Fade out
|
||||
animate(alpha = 0, time = CHAT_MESSAGE_EOL_FADE)
|
||||
|
||||
// Register with the runechat SS to handle destruction
|
||||
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), src), lifespan + CHAT_MESSAGE_GRACE_PERIOD, TIMER_DELETE_ME, SSrunechat)
|
||||
|
||||
/datum/chatmessage/proc/get_current_alpha(time_spent)
|
||||
if(time_spent < CHAT_MESSAGE_SPAWN_TIME)
|
||||
return (time_spent / CHAT_MESSAGE_SPAWN_TIME) * 255
|
||||
|
||||
var/time_before_fade = animate_lifespan - CHAT_MESSAGE_EOL_FADE
|
||||
if(time_spent <= time_before_fade)
|
||||
return 255
|
||||
|
||||
return (1 - ((time_spent - time_before_fade) / CHAT_MESSAGE_EOL_FADE)) * 255
|
||||
// Register with the runechat SS to handle EOL and destruction
|
||||
scheduled_destruction = world.time + (lifespan - CHAT_MESSAGE_EOL_FADE)
|
||||
enter_subsystem()
|
||||
|
||||
/**
|
||||
* Creates a message overlay at a defined location for a given speaker
|
||||
*
|
||||
* Arguments:
|
||||
* * speaker - The atom who is saying this message
|
||||
* * message_language - The language that the message is said in
|
||||
* * raw_message - The text content of the message
|
||||
* * spans - Additional classes to be added to the message
|
||||
*/
|
||||
* Applies final animations to overlay CHAT_MESSAGE_EOL_FADE deciseconds prior to message deletion,
|
||||
* sets time for scheduling deletion and re-enters the runechat SS for qdeling
|
||||
*
|
||||
* Arguments:
|
||||
* * fadetime - The amount of time to animate the message's fadeout for
|
||||
*/
|
||||
/datum/chatmessage/proc/end_of_life(fadetime = CHAT_MESSAGE_EOL_FADE)
|
||||
eol_complete = scheduled_destruction + fadetime
|
||||
animate(message, alpha = 0, time = fadetime, flags = ANIMATION_PARALLEL)
|
||||
enter_subsystem(eol_complete) // re-enter the runechat SS with the EOL completion time to QDEL self
|
||||
|
||||
/**
|
||||
* Creates a message overlay at a defined location for a given speaker
|
||||
*
|
||||
* Arguments:
|
||||
* * speaker - The atom who is saying this message
|
||||
* * message_language - The language that the message is said in
|
||||
* * raw_message - The text content of the message
|
||||
* * spans - Additional classes to be added to the message
|
||||
*/
|
||||
/mob/proc/create_chat_message(atom/movable/speaker, datum/language/message_language, raw_message, list/spans, runechat_flags = NONE)
|
||||
if(HAS_TRAIT(speaker, TRAIT_RUNECHAT_HIDDEN))
|
||||
return
|
||||
// Ensure the list we are using, if present, is a copy so we don't modify the list provided to us
|
||||
spans = spans ? spans.Copy() : list()
|
||||
|
||||
@@ -302,11 +235,11 @@
|
||||
var/atom/movable/virtualspeaker/v = speaker
|
||||
speaker = v.source
|
||||
spans |= "virtual-speaker"
|
||||
|
||||
|
||||
//NTSL doesn't pass a speaker when you do broadcast() since technically nothing is actually speaking.
|
||||
if(!speaker)
|
||||
return
|
||||
|
||||
|
||||
// Ignore virtual speaker (most often radio messages) from ourself
|
||||
if (originalSpeaker != src && speaker == src)
|
||||
return
|
||||
@@ -315,24 +248,25 @@
|
||||
if(runechat_flags & EMOTE_MESSAGE)
|
||||
new /datum/chatmessage(raw_message, speaker, src, message_language, list("emote", "italics"))
|
||||
else
|
||||
new /datum/chatmessage(raw_message, speaker, src, message_language, spans)
|
||||
new /datum/chatmessage(lang_treat(speaker, message_language, raw_message, spans, null, TRUE), speaker, src, message_language, spans)
|
||||
|
||||
|
||||
// Tweak these defines to change the available color ranges
|
||||
#define CM_COLOR_SAT_MIN 0.6
|
||||
#define CM_COLOR_SAT_MAX 0.7
|
||||
#define CM_COLOR_LUM_MIN 0.65
|
||||
#define CM_COLOR_LUM_MAX 0.75
|
||||
#define CM_COLOR_SAT_MIN 0.6
|
||||
#define CM_COLOR_SAT_MAX 0.7
|
||||
#define CM_COLOR_LUM_MIN 0.65
|
||||
#define CM_COLOR_LUM_MAX 0.75
|
||||
|
||||
/**
|
||||
* Gets a color for a name, will return the same color for a given string consistently within a round.atom
|
||||
*
|
||||
* Note that this proc aims to produce pastel-ish colors using the HSL colorspace. These seem to be favorable for displaying on the map.
|
||||
*
|
||||
* Arguments:
|
||||
* * name - The name to generate a color for
|
||||
* * sat_shift - A value between 0 and 1 that will be multiplied against the saturation
|
||||
* * lum_shift - A value between 0 and 1 that will be multiplied against the luminescence
|
||||
*/
|
||||
* Gets a color for a name, will return the same color for a given string consistently within a round.atom
|
||||
*
|
||||
* Note that this proc aims to produce pastel-ish colors using the HSL colorspace. These seem to be favorable for displaying on the map.
|
||||
*
|
||||
* Arguments:
|
||||
* * name - The name to generate a color for
|
||||
* * sat_shift - A value between 0 and 1 that will be multiplied against the saturation
|
||||
* * lum_shift - A value between 0 and 1 that will be multiplied against the luminescence
|
||||
*/
|
||||
/datum/chatmessage/proc/colorize_string(name, sat_shift = 1, lum_shift = 1)
|
||||
// seed to help randomness
|
||||
var/static/rseed = rand(1,26)
|
||||
@@ -369,19 +303,13 @@
|
||||
if(5)
|
||||
return "#[num2hex(c, 2)][num2hex(m, 2)][num2hex(x, 2)]"
|
||||
|
||||
|
||||
#undef CHAT_LAYER_MAX_Z
|
||||
#undef CHAT_LAYER_Z_STEP
|
||||
#undef CHAT_MESSAGE_APPROX_LHEIGHT
|
||||
#undef CHAT_MESSAGE_GRACE_PERIOD
|
||||
#undef CHAT_MESSAGE_SPAWN_TIME
|
||||
#undef CHAT_MESSAGE_LIFESPAN
|
||||
#undef CHAT_MESSAGE_EOL_FADE
|
||||
#undef CHAT_MESSAGE_EXP_DECAY
|
||||
#undef CHAT_MESSAGE_HEIGHT_DECAY
|
||||
#undef CHAT_MESSAGE_ICON_SIZE
|
||||
#undef CHAT_MESSAGE_LIFESPAN
|
||||
#undef CHAT_MESSAGE_SPAWN_TIME
|
||||
#undef CHAT_MESSAGE_APPROX_LHEIGHT
|
||||
#undef CHAT_MESSAGE_WIDTH
|
||||
#undef CM_COLOR_LUM_MAX
|
||||
#undef CM_COLOR_LUM_MIN
|
||||
#undef CM_COLOR_SAT_MAX
|
||||
#undef CM_COLOR_SAT_MIN
|
||||
#undef CHAT_LAYER_Z_STEP
|
||||
#undef CHAT_LAYER_MAX_Z
|
||||
#undef CHAT_MESSAGE_ICON_SIZE
|
||||
|
||||
@@ -61,7 +61,7 @@ GLOBAL_LIST_INIT(freqtospan, list(
|
||||
var/endspanpart = "</span></a>"// Yogs
|
||||
|
||||
//Message
|
||||
var/messagepart = " [span_message("[say_emphasis(lang_treat(speaker, message_language, raw_message, spans, message_mods))]")]</span>"
|
||||
var/messagepart = " [span_message("[lang_treat(speaker, message_language, raw_message, spans, message_mods)]")]</span>"
|
||||
|
||||
var/languageicon = ""
|
||||
var/datum/language/D = GLOB.language_datum_instances[message_language]
|
||||
@@ -100,22 +100,6 @@ GLOBAL_LIST_INIT(freqtospan, list(
|
||||
var/spanned = attach_spans(input, spans)
|
||||
return "[say_mod(input, message_mods)], \"[spanned]\""
|
||||
|
||||
/// 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("(?<!\\\\)[char](.+?)(?<!\\\\)[char]", "g");\
|
||||
input = varname.Replace_char(input, "<[html]>$1</[html]>")
|
||||
|
||||
/// Scans the input sentence for speech emphasis modifiers, notably |italics|, +bold+, and _underline_ -mothblocks
|
||||
/atom/movable/proc/say_emphasis(input)
|
||||
ENCODE_HTML_EMPHASIS(input, "\\|", "i", italics)
|
||||
ENCODE_HTML_EMPHASIS(input, "\\+", "b", bold)
|
||||
ENCODE_HTML_EMPHASIS(input, "_", "u", underline)
|
||||
var/static/regex/remove_escape_backlashes = regex("\\\\(_|\\+|\\|)", "g") // Removes backslashes used to escape text modification.
|
||||
input = remove_escape_backlashes.Replace_char(input, "$1")
|
||||
return input
|
||||
|
||||
#undef ENCODE_HTML_EMPHASIS
|
||||
|
||||
/atom/movable/proc/lang_treat(atom/movable/speaker, datum/language/language, raw_message, list/spans, list/message_mods = list(), no_quote = FALSE)
|
||||
if(has_language(language))
|
||||
var/atom/movable/AM = speaker.GetSource()
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
balloon_alert.appearance_flags = RESET_ALPHA|RESET_COLOR|RESET_TRANSFORM
|
||||
balloon_alert.maptext = MAPTEXT("<span style='text-align: center; -dm-text-outline: 1px #0005'>[text]</span>")
|
||||
balloon_alert.maptext_x = (BALLOON_TEXT_WIDTH - bound_width) * -0.5
|
||||
WXH_TO_HEIGHT(viewer_client?.MeasureText(text, null, BALLOON_TEXT_WIDTH), balloon_alert.maptext_height)
|
||||
balloon_alert.maptext_height = WXH_TO_HEIGHT(viewer_client?.MeasureText(text, null, BALLOON_TEXT_WIDTH))
|
||||
balloon_alert.maptext_width = BALLOON_TEXT_WIDTH
|
||||
|
||||
viewer_client?.images += balloon_alert
|
||||
|
||||
@@ -142,7 +142,7 @@
|
||||
if(key)
|
||||
K = src.key
|
||||
|
||||
var/spanned = say_quote(say_emphasis(message))
|
||||
var/spanned = say_quote(message)
|
||||
var/source = "<span class='game'>[span_prefix("DEAD:")] [span_name("[(src.client.prefs.chat_toggles & GHOST_CKEY) ? "" : "([K]) "][name]")][alt_name]" // yogs - i have no clue
|
||||
var/rendered = " [span_message("[emoji_parse(spanned)]")]</span>"
|
||||
log_talk(message, LOG_SAY, tag="DEAD")
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,78 +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
|
||||
|
||||
/// 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
|
||||
@@ -1,253 +0,0 @@
|
||||
/// 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
|
||||
)
|
||||
@@ -1,13 +0,0 @@
|
||||
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)
|
||||
@@ -1,252 +0,0 @@
|
||||
/// 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)
|
||||
@@ -1,252 +0,0 @@
|
||||
/// 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)
|
||||
@@ -1,253 +0,0 @@
|
||||
/// 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
|
||||
)
|
||||
@@ -1,3 +0,0 @@
|
||||
/datum/font/vcr_osd_mono
|
||||
name = "VCR OSD Mono"
|
||||
font_family = 'interface/fonts/VCR_OSD_Mono.ttf'
|
||||
@@ -1,5 +1,3 @@
|
||||
@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 <u>ass</u> <i>is</i> <b>heavy</b>."). 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\<b>2\</b>3").
|
||||
♪ Hey, have you ever tried appending the % character before your messages when speaking in-game? ♫
|
||||
Where the space map levels connect is randomized every round, but are otherwise kept consistent within rounds. Remember that they are not necessarily bidirectional!
|
||||
You can catch thrown items by toggling on your throw mode with an empty hand active.
|
||||
To crack the safe in the vault, use a stethoscope or three plastic explosives on it.
|
||||
|
||||
@@ -66,7 +66,6 @@
|
||||
#include "code\__DEFINES\fantasy_affixes.dm"
|
||||
#include "code\__DEFINES\fastdmm2.dm"
|
||||
#include "code\__DEFINES\flags.dm"
|
||||
#include "code\__DEFINES\fonts.dm"
|
||||
#include "code\__DEFINES\food.dm"
|
||||
#include "code\__DEFINES\footsteps.dm"
|
||||
#include "code\__DEFINES\forensics.dm"
|
||||
@@ -3804,12 +3803,6 @@
|
||||
#include "interface\menu.dm"
|
||||
#include "interface\stylesheet.dm"
|
||||
#include "interface\skin.dmf"
|
||||
#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 "yogstation\code\__HELPERS\_lists.dm"
|
||||
#include "yogstation\code\__HELPERS\_logging.dm"
|
||||
#include "yogstation\code\__HELPERS\game.dm"
|
||||
|
||||
Reference in New Issue
Block a user