/tg/ Station 13 - Modules - TypesVar Details - Proc Details

client

Client datum

A datum that is created whenever a user joins a BYOND world, one will exist for every active connected player

when they first connect, this client object is created and [/client/New] is called

When they disconnect, this client object is deleted and [/client/Del] is called

All client topic calls go through [/client/Topic] first, so a lot of our specialised topic handling starts here

Vars

AI_InteractUsed for admin AI interaction
account_ageAge of byond account in days
account_join_dateDate of byond account creation in ISO 8601 format
admin_music_volumeAdmin music volume, from 0 to 1.
adminhelptimeridClient var used for returning the ahelp verb
avgpingAverage ping of the client
ban_cacheUsed to cache this client's bans to save on DB queries
ban_cache_startIf we are currently building this client's ban cache, this var stores the timeofday we started at
char_render_holdersShould only be a key-value list of north/south/east/west = atom/movable/screen.
click_interceptNeeds to implement InterceptClickOn(user,params,atom) proc
click_intercept_timeTime when the click was intercepted
clicklimiterUsed for limiting the rate of clicks sends by the client to avoid abuse
client_keysend_amountAmount of keydowns in the last keysend checking interval
combo_hud_enabledWhether or not this client has the combo HUD enabled
completed_asset_jobsList of all completed blocking send jobs awaiting acknowledgement by send_asset
connection_realtimeworld.realtime they connected
connection_timeworld.time they connected
connection_timeofdayworld.timeofday they connected
creditslazy list of all credit object bound to this client
crew_manifest_delayrate limiting for the crew manifest
current_ticketClient var used for tracking the ticket the (usually) not-admin client is dealing with
do_parallax_animationsDo we want to do parallax animations at all? Exists to prevent laptop fires
dont_animate_parallaxworld.time of when we can state animate()ing parallax again
externalreplyamountInternal counter for clients sending external (IRC/Discord) relay messages via ahelp to prevent spamming. Set to a number every time an admin reply is sent, decremented for every client send.
fully_createdIf this client has been fully initialized or not
holderContains admin info. Null if client is not an admin.
hotkeysWhether or not this client has standard hotkeys enabled
intended_directionThe direction we WANT to move, based off our keybinds Will be udpated to be the actual direction later on
intervieweeIf the client is currently under the restrictions of the interview system
ip_intelUsed for ip intel checking to identify evaders, disabled because of issues with traffic
key_combos_heldA buffer for combinations such of modifiers + keys (ex: CtrlD, AltE, ShiftT). Format: "key" -> "combo" (ex: "D" -> "CtrlD")
keys_heldA buffer of currently held keys.
keysend_trippedWhen set to true, user will be autokicked if they trip the keysends in a second limit again
last_asset_jobLast asset send job id.
last_messageContains the last message sent by this client - used to protect against copy-paste spamming.
last_message_countcontins a number of how many times a message identical to last_message was sent.
lastpingLast ping of the client
mouseParamsUsed in MouseDrag to preserve the original mouse click parameters
mouse_down_iconused to make a special mouse cursor, this one for mouse up icon
mouse_location_refUsed in MouseDrag to preserve the last mouse-entered location. Weakref
mouse_object_refUsed in MouseDrag to preserve the last mouse-entered object. Weakref
mouse_override_iconused to override the mouse cursor so it doesnt get reset
mouse_up_iconused to make a special mouse cursor, this one for mouse up icon
move_delayMove delay of controlled mob, any keypresses inside this period will persist until the next proper move
movement_keyscustom movement keys for this client
movement_lockedAre we locking our movement input?
movingmobthis is the last recorded client eye by SSparallax/fire()
navigation_imagesImages of the path created by navigate().
next_keysend_resetWorld tick time where client_keysend_amount will reset
next_keysend_trip_resetWorld tick time where keysend_tripped will reset back to false
next_move_dir_addOn next move, add this dir to the move that would otherwise be done
next_move_dir_subOn next move, subtract this dir from the move that would otherwise be done
obj_windowOur object window datum. It stores info about and handles behavior for the object tab
panel_tabslist of all tabs
parallax_animate_timerTimer for the area directional animation
parallax_layers_maxHow many parallax layers to show our client
parallax_movedirDirection our current area wants to move parallax
parent_typeThis line makes clients parent type be a datum
player_ageUsed to determine how old the account is - in days.
player_detailsthese persist between logins/logouts during the same round.
player_join_dateDate that this account was first seen in the server
prefsPlayer preferences datum for the client
recent_examinesA lazy list of atoms we've examined in the last RECENT_EXAMINE_MAX_WINDOW (default 2) seconds, so that we will call /atom/proc/examine_more instead of /atom/proc/examine on them when examining
related_accounts_cidSo admins know why it isn't working - Used to determine what other accounts previously logged in from this computer id
related_accounts_ipSo admins know why it isn't working - Used to determine what other accounts previously logged in from this ip
say_slowmodeTracks say() usage for ic/dchat while slowmode is enabled
screen_mapsAssoc list with all the active maps - when a screen obj is added to a map, it's put in here as well.
script!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!HEY LISTEN!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
seen_messagesMessages currently seen by this client
selected_targetAutoclick list of two elements, first being the clicked thing, second being the parameters.
show_verb_panelhides the byond verb panel as we use our own custom version
spell_tabslist of tabs containing spells and abilities
stat_panelStat panel window declaration
stat_tabour current tab
tgui_cache_reloadedglobal
tgui_sayAssigned say modal of the client
tgui_windowsglobal
tooltipsdatum that controls the displaying and hiding of tooltips
topiclimiterUsed for limiting the rate of topic sends by the client to avoid abuse
total_count_resetNext tick to reset the total message counter
total_message_countHow many messages sent in the last 10 seconds
typing_indicatorsDoes this client have typing indicators enabled?
urgent_ahelp_cooldownThe last urgent ahelp that this player sent
view_sizedatum wrapper for client view
visual_delayThe visual delay to use for the current client.Move(), mostly used for making a client based move look like it came from some other slower source

Procs

MoveMove a client in a direction
Process_GrabChecks to see if you're being grabbed and if so attempts to break it
Process_IncorpmoveAllows mobs to ignore density and phase through objects
_Topicdumb workaround because byond doesnt seem to recognize the Topic() typepath for /datum/proc/Topic() from the client Topic, so we cant queue it without this
adjust_heartGives someone hearted status for OOC, from behavior commendations
admin_followAttempts to make the client orbit the given object, for administrative purposes. If they are not an observer, will try to aghost them.
adminpm_filter_textAccepts a message and an ambiguious recipient (some sort of client representative, or [EXTERNAL_PM_USER]) Returns the filtered message if it passes all checks, or null if the send fails
asset_cache_confirm_arrivalProcess asset cache client topic calls for "asset_cache_confirm_arrival=[INT]"
asset_cache_preload_dataProcess asset cache client topic calls for "asset_cache_preload_data=[HTML+JSON_STRING]"
asset_cache_update_jsonUpdates the client side stored json file used to keep track of what assets the client has between restarts/reconnects.
attempt_auto_fit_viewportAttempt to automatically fit the viewport, assuming the user wants it
body_chestHidden verb to target the chest, bound to 5
body_eyesHidden verb to target the eyes, bound to 7
body_groinHidden verb to target the groin, bound to 2
body_headHidden verb to target the head, unbound by default.
body_l_armHidden verb to target the left arm, bound to 6
body_l_legHidden verb to target the left leg, bound to 3
body_mouthHidden verb to target the mouth, bound to 9
body_r_armHidden verb to target the right arm, bound to 4
body_r_legHidden verb to target the right leg, bound to 1
body_toggle_headHidden verbs to set desired body target zone
browse_queue_flushBlocks until all currently sending browse and browse_rsc assets have been sent. Due to byond limitations, this proc will sleep for 1 client round trip even if the client has no pending asset sends. This proc will return an untrue value if it had to return before confirming the send, such as timeout or the client going away.
check_drag_proximityHandles treating drags as clicks if they're within some conditions Does some other stuff adjacent to trying to figure out what the user actually "wanted" to click Returns TRUE if it caused a click, FALSE otherwise
check_has_body_selectValidate the client's mob has a valid zone selected
clear_all_mapsClears all the maps of registered screen objects.
clear_mapClears the map of registered screen objects.
clear_screenClears the client's screen, aside from ones that opt out
close_popupCloses a popup.
cmd_ahelp_replyReplys to some existing ahelp, reply to whom, which can be a client or ckey
create_popupCreates a popup window with a basic map element in it, without any further initialization.
drop_itemIf your mob is concious, drop the item in the active hand
fix_tgui_paneltgui panel / chat troubleshooting verb
generate_adminwho_stringProc that generates the applicable string to dispatch to the client for adminwho.
getStealthKeyReturns this client's stealthed ckey
get_award_statusRedirect proc that makes it easier to get the status of an achievement. Achievement type is the typepath to the award.
get_remaining_daysChecks if this client has met the days requirement passed in, or if they are exempt from it. Returns the number of days left, or 0.
give_awardRedirect proc that makes it easier to call the unlock achievement proc. Achievement type is the typepath to the award, user is the mob getting the award, and value is an optional variable used for leaderboard value increments
handle_popup_closeWhen the popup closes in any way (player or proc call) it calls this.
init_verbscompiles a full list of verbs and sends it to the browser
initialize_menusInitializes dropdown menus on client
is_drag_clickableDoes the logic for checking if a drag counts as a click or not Returns true if it does, false otherwise
is_veteranReturns whether the client should receive the gamer cloak
keyUpCheck if the key is short enough to even be a real key
makepAINew pAI's get a brand new mind to prevent meta stuff from their previous life. This new mind causes problems down the line if it's not deleted here.
notify_adminpm_messageNotifies all admins about the existance of an admin pm, then logs the pm message_target here can be either [EXTERNAL_PM_USER], indicating that this message is intended for some external chat channel or a /client, in which case we send in the standard form log_message is the raw message to send, it will be filtered and treated to ensure we do not break any text handling
on_stat_panel_messageHandles incoming messages from the stat-panel TGUI.
only_oneGives everyone kilts, berets, claymores, and pinpointers, with the objective to hijack the emergency shuttle. Uses highlander controller to do so!
ooctalking in OOC uses this
open_escape_menuOpens the escape menu. Verb, hardcoded to Escape, set in the client skin.
open_particle_editoropens the particle editor UI for the in_atom object for this client
register_map_objRegisters screen obj with the client, which makes it visible on the assigned map, and becomes a part of the assigned map's lifecycle.
request_adminpm_messageRequests an admin pm message to send message_target here can be either [EXTERNAL_PM_USER], indicating that this message is intended for some external chat channel or a /client, which we will then store info about to ensure logout -> logins are protected as expected Accepts an optional existing message, which will be used in place of asking the recipient assuming all other conditions are met Returns the message to send or null if no message is found Sleeps
reset_held_keysManually clears any held keys, in case due to lag or other undefined behavior a key gets stuck.
send_resourcesSend resources to the client. Sends both game resources and browser assets.
sends_adminpm_messageSends a pm message via the tickets system message_target here can be either [EXTERNAL_PM_USER], indicating that this message is intended for some external chat channel or a /client, in which case we send in the standard form send_message is the raw message to send, it will be filtered and treated to ensure we do not break any text handling Returns FALSE if the send failed, TRUE otherwise
setup_popupCreate the popup, and get it ready for generic use by giving it a background.
tgui_say_create_open_commandCreates a JSON encoded message to open TGUI say modals properly.
toggle_walk_runVerb to toggle the walk or run status
uicloseverb
update_exp_listTallies up the exp for the playtime tracking and adds it to the global update list.
update_special_keybindsUpdates the keybinds for special keys

Var Details

AI_Interact

Used for admin AI interaction

account_age

Age of byond account in days

account_join_date

Date of byond account creation in ISO 8601 format

admin_music_volume

Admin music volume, from 0 to 1.

adminhelptimerid

Client var used for returning the ahelp verb

avgping

Average ping of the client

ban_cache

Used to cache this client's bans to save on DB queries

ban_cache_start

If we are currently building this client's ban cache, this var stores the timeofday we started at

char_render_holders

Should only be a key-value list of north/south/east/west = atom/movable/screen.

click_intercept

Needs to implement InterceptClickOn(user,params,atom) proc

click_intercept_time

Time when the click was intercepted

clicklimiter

Used for limiting the rate of clicks sends by the client to avoid abuse

client_keysend_amount

Amount of keydowns in the last keysend checking interval

combo_hud_enabled

Whether or not this client has the combo HUD enabled

completed_asset_jobs

List of all completed blocking send jobs awaiting acknowledgement by send_asset

connection_realtime

world.realtime they connected

connection_time

world.time they connected

connection_timeofday

world.timeofday they connected

credits

lazy list of all credit object bound to this client

crew_manifest_delay

rate limiting for the crew manifest

current_ticket

Client var used for tracking the ticket the (usually) not-admin client is dealing with

do_parallax_animations

Do we want to do parallax animations at all? Exists to prevent laptop fires

dont_animate_parallax

world.time of when we can state animate()ing parallax again

externalreplyamount

Internal counter for clients sending external (IRC/Discord) relay messages via ahelp to prevent spamming. Set to a number every time an admin reply is sent, decremented for every client send.

fully_created

If this client has been fully initialized or not

holder

Contains admin info. Null if client is not an admin.

hotkeys

Whether or not this client has standard hotkeys enabled

intended_direction

The direction we WANT to move, based off our keybinds Will be udpated to be the actual direction later on

interviewee

If the client is currently under the restrictions of the interview system

ip_intel

Used for ip intel checking to identify evaders, disabled because of issues with traffic

key_combos_held

A buffer for combinations such of modifiers + keys (ex: CtrlD, AltE, ShiftT). Format: "key" -> "combo" (ex: "D" -> "CtrlD")

keys_held

A buffer of currently held keys.

keysend_tripped

When set to true, user will be autokicked if they trip the keysends in a second limit again

last_asset_job

Last asset send job id.

last_message

Contains the last message sent by this client - used to protect against copy-paste spamming.

last_message_count

contins a number of how many times a message identical to last_message was sent.

lastping

Last ping of the client

mouseParams

Used in MouseDrag to preserve the original mouse click parameters

mouse_down_icon

used to make a special mouse cursor, this one for mouse up icon

mouse_location_ref

Used in MouseDrag to preserve the last mouse-entered location. Weakref

mouse_object_ref

Used in MouseDrag to preserve the last mouse-entered object. Weakref

mouse_override_icon

used to override the mouse cursor so it doesnt get reset

mouse_up_icon

used to make a special mouse cursor, this one for mouse up icon

move_delay

Move delay of controlled mob, any keypresses inside this period will persist until the next proper move

movement_keys

custom movement keys for this client

movement_locked

Are we locking our movement input?

movingmob

this is the last recorded client eye by SSparallax/fire()

navigation_images

Images of the path created by navigate().

next_keysend_reset

World tick time where client_keysend_amount will reset

next_keysend_trip_reset

World tick time where keysend_tripped will reset back to false

next_move_dir_add

On next move, add this dir to the move that would otherwise be done

next_move_dir_sub

On next move, subtract this dir from the move that would otherwise be done

obj_window

Our object window datum. It stores info about and handles behavior for the object tab

panel_tabs

list of all tabs

parallax_animate_timer

Timer for the area directional animation

parallax_layers_max

How many parallax layers to show our client

parallax_movedir

Direction our current area wants to move parallax

parent_type

This line makes clients parent type be a datum

By default in byond if you define a proc on datums, that proc will exist on nearly every single type from icons to images to atoms to mobs to objs to turfs to areas, it won't however, appear on client

instead by default they act like their own independent type so while you can do isdatum(icon) and have it return true, you can't do isdatum(client), it will always return false.

This makes writing oo code hard, when you have to consider this extra special case

This line prevents that, and has never appeared to cause any ill effects, while saving us an extra pain to think about

This line is widely considered black fucking magic, and the fact it works is a puzzle to everyone involved, including the current engine developer, lummox

If you are a future developer and the engine source is now available and you can explain why this is the way it is, please do update this comment

player_age

Used to determine how old the account is - in days.

player_details

these persist between logins/logouts during the same round.

player_join_date

Date that this account was first seen in the server

prefs

Player preferences datum for the client

recent_examines

A lazy list of atoms we've examined in the last RECENT_EXAMINE_MAX_WINDOW (default 2) seconds, so that we will call /atom/proc/examine_more instead of /atom/proc/examine on them when examining

related_accounts_cid

So admins know why it isn't working - Used to determine what other accounts previously logged in from this computer id

related_accounts_ip

So admins know why it isn't working - Used to determine what other accounts previously logged in from this ip

say_slowmode

Tracks say() usage for ic/dchat while slowmode is enabled

screen_maps

Assoc list with all the active maps - when a screen obj is added to a map, it's put in here as well.

Format: list( = list(/atom/movable/screen))

script

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!HEY LISTEN!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

seen_messages

Messages currently seen by this client

selected_target

Autoclick list of two elements, first being the clicked thing, second being the parameters.

show_verb_panel

hides the byond verb panel as we use our own custom version

spell_tabs

list of tabs containing spells and abilities

stat_panel

Stat panel window declaration

stat_tab

our current tab

tgui_cache_reloaded

global

TRUE if cache was reloaded by tgui dev server at least once.

tgui_say

Assigned say modal of the client

tgui_windows

global

Tracks open windows for a user.

tooltips

datum that controls the displaying and hiding of tooltips

topiclimiter

Used for limiting the rate of topic sends by the client to avoid abuse

total_count_reset

Next tick to reset the total message counter

total_message_count

How many messages sent in the last 10 seconds

typing_indicators

Does this client have typing indicators enabled?

urgent_ahelp_cooldown

The last urgent ahelp that this player sent

view_size

datum wrapper for client view

visual_delay

The visual delay to use for the current client.Move(), mostly used for making a client based move look like it came from some other slower source

Proc Details

Move

Move a client in a direction

Huge proc, has a lot of functionality

Mostly it will despatch to the mob that you are the owner of to actually move in the physical realm

Things that stop you moving as a mob:

Things that stop you moving as a mob living (why even have OO if you're just shoving it all in the parent proc with istype checks right?):

At this point, if the mob is is confused, then a random direction and target turf will be calculated for you to travel to instead

Now the parent call is made (to the byond builtin move), which moves you

Some final move delay calculations (doubling if you moved diagonally successfully)

if mob throwing is set I believe it's unset at this point via a call to finalize

Finally if you're pulling an object and it's dense, you are turned 180 after the move (if you ask me, this should be at the top of the move so you don't dance around)

Process_Grab

Checks to see if you're being grabbed and if so attempts to break it

Called by client/Move()

Process_Incorpmove

Allows mobs to ignore density and phase through objects

Called by client/Move()

The behaviour depends on the incorporeal_move value of the mob

You'll note this is another mob living level proc living at the client level

_Topic

dumb workaround because byond doesnt seem to recognize the Topic() typepath for /datum/proc/Topic() from the client Topic, so we cant queue it without this

adjust_heart

Gives someone hearted status for OOC, from behavior commendations

admin_follow

Attempts to make the client orbit the given object, for administrative purposes. If they are not an observer, will try to aghost them.

adminpm_filter_text

Accepts a message and an ambiguious recipient (some sort of client representative, or [EXTERNAL_PM_USER]) Returns the filtered message if it passes all checks, or null if the send fails

asset_cache_confirm_arrival

Process asset cache client topic calls for "asset_cache_confirm_arrival=[INT]"

asset_cache_preload_data

Process asset cache client topic calls for "asset_cache_preload_data=[HTML+JSON_STRING]"

asset_cache_update_json

Updates the client side stored json file used to keep track of what assets the client has between restarts/reconnects.

attempt_auto_fit_viewport

Attempt to automatically fit the viewport, assuming the user wants it

body_chest

Hidden verb to target the chest, bound to 5

body_eyes

Hidden verb to target the eyes, bound to 7

body_groin

Hidden verb to target the groin, bound to 2

body_head

Hidden verb to target the head, unbound by default.

body_l_arm

Hidden verb to target the left arm, bound to 6

body_l_leg

Hidden verb to target the left leg, bound to 3

body_mouth

Hidden verb to target the mouth, bound to 9

body_r_arm

Hidden verb to target the right arm, bound to 4

body_r_leg

Hidden verb to target the right leg, bound to 1

body_toggle_head

Hidden verbs to set desired body target zone

Uses numpad keys 1-9 Hidden verb to cycle through head zone with repeated presses, head - eyes - mouth. Bound to 8

browse_queue_flush

Blocks until all currently sending browse and browse_rsc assets have been sent. Due to byond limitations, this proc will sleep for 1 client round trip even if the client has no pending asset sends. This proc will return an untrue value if it had to return before confirming the send, such as timeout or the client going away.

check_drag_proximity

Handles treating drags as clicks if they're within some conditions Does some other stuff adjacent to trying to figure out what the user actually "wanted" to click Returns TRUE if it caused a click, FALSE otherwise

check_has_body_select

Validate the client's mob has a valid zone selected

clear_all_maps

Clears all the maps of registered screen objects.

clear_map

Clears the map of registered screen objects.

clear_screen

Clears the client's screen, aside from ones that opt out

close_popup

Closes a popup.

cmd_ahelp_reply

Replys to some existing ahelp, reply to whom, which can be a client or ckey

create_popup

Creates a popup window with a basic map element in it, without any further initialization.

Ratio is how many pixels by how many pixels (keep it simple).

Returns a map name.

drop_item

If your mob is concious, drop the item in the active hand

This is a hidden verb, likely for binding with winset for hotkeys

fix_tgui_panel

tgui panel / chat troubleshooting verb

generate_adminwho_string

Proc that generates the applicable string to dispatch to the client for adminwho.

getStealthKey

Returns this client's stealthed ckey

get_award_status

Redirect proc that makes it easier to get the status of an achievement. Achievement type is the typepath to the award.

get_remaining_days

Checks if this client has met the days requirement passed in, or if they are exempt from it. Returns the number of days left, or 0.

give_award

Redirect proc that makes it easier to call the unlock achievement proc. Achievement type is the typepath to the award, user is the mob getting the award, and value is an optional variable used for leaderboard value increments

handle_popup_close

When the popup closes in any way (player or proc call) it calls this.

init_verbs

compiles a full list of verbs and sends it to the browser

initialize_menus

Initializes dropdown menus on client

is_drag_clickable

Does the logic for checking if a drag counts as a click or not Returns true if it does, false otherwise

is_veteran

Returns whether the client should receive the gamer cloak

keyUp

Check if the key is short enough to even be a real key

makepAI

New pAI's get a brand new mind to prevent meta stuff from their previous life. This new mind causes problems down the line if it's not deleted here.

notify_adminpm_message

Notifies all admins about the existance of an admin pm, then logs the pm message_target here can be either [EXTERNAL_PM_USER], indicating that this message is intended for some external chat channel or a /client, in which case we send in the standard form log_message is the raw message to send, it will be filtered and treated to ensure we do not break any text handling

on_stat_panel_message

Handles incoming messages from the stat-panel TGUI.

only_one

Gives everyone kilts, berets, claymores, and pinpointers, with the objective to hijack the emergency shuttle. Uses highlander controller to do so!

Arguments:

ooc

talking in OOC uses this

open_escape_menu

Opens the escape menu. Verb, hardcoded to Escape, set in the client skin.

open_particle_editor

opens the particle editor UI for the in_atom object for this client

register_map_obj

Registers screen obj with the client, which makes it visible on the assigned map, and becomes a part of the assigned map's lifecycle.

request_adminpm_message

Requests an admin pm message to send message_target here can be either [EXTERNAL_PM_USER], indicating that this message is intended for some external chat channel or a /client, which we will then store info about to ensure logout -> logins are protected as expected Accepts an optional existing message, which will be used in place of asking the recipient assuming all other conditions are met Returns the message to send or null if no message is found Sleeps

reset_held_keys

Manually clears any held keys, in case due to lag or other undefined behavior a key gets stuck.

send_resources

Send resources to the client. Sends both game resources and browser assets.

sends_adminpm_message

Sends a pm message via the tickets system message_target here can be either [EXTERNAL_PM_USER], indicating that this message is intended for some external chat channel or a /client, in which case we send in the standard form send_message is the raw message to send, it will be filtered and treated to ensure we do not break any text handling Returns FALSE if the send failed, TRUE otherwise

setup_popup

Create the popup, and get it ready for generic use by giving it a background.

Width and height are multiplied by 64 by default.

tgui_say_create_open_command

Creates a JSON encoded message to open TGUI say modals properly.

Arguments: channel - The channel to open the modal in. Returns: string - A JSON encoded message to open the modal.

toggle_walk_run

Verb to toggle the walk or run status

uiclose

verb

Called by UIs when they are closed. Must be a verb so winset() can call it.

required uiref ref The UI that was closed.

update_exp_list

Tallies up the exp for the playtime tracking and adds it to the global update list.

For a client mob of /mob/dead/observer, it adds EXP_TYPE_GHOST.

For a client mob of /mob/living, it grabs the exp list from a mob proc call. Being dead but still in your body will tally time towards your /mob/living roles instead of ghost roles. If /mob/living returns an empty list, uses "Unknown" instead.

For anything else, it doesn't update anything.

Arguments:

update_special_keybinds

Updates the keybinds for special keys

Handles adding macros for the keys that need it And adding movement keys to the clients movement_keys list At the time of writing this, communication(OOC, Say, IC, ASAY) require macros Arguments: