/(global)
Vars | |
Failsafe | Failsafe |
---|---|
Master | StonedMC |
SSdiscord | |
SSrunechat | |
SStgui | tgui subsystem |
SStimer | |
Procs | |
CreateBans | DEBUG |
GetJobName | Gets the job title, if the job name is an alt title, locates the original title using a prebuilt cache |
HeapPathWeightCompare | TODO: Macro this to reduce proc overhead |
WrapAdminProcCall | Wrapper for proccalls where the datum is flagged as vareditted |
___TraitAdd | DO NOT USE ___TraitAdd OR ___TraitRemove as a replacement for ADD_TRAIT / REMOVE_TRAIT defines. To be used explicitly for callback. |
___TraitRemove | DO NOT USE ___TraitAdd OR ___TraitRemove as a replacement for ADD_TRAIT / REMOVE_TRAIT defines. To be used explicitly for callback. |
_addtimer | Create a new timer and insert it in the queue. You should not call this directly, and should instead use the addtimer macro, which includes source information. |
_turf_in_offset | Locating turfs |
actionspeed_data_null_check | Checks if a action speed modifier is valid and not missing any data |
add_keybinding | Adds an instanced keybinding to the global tracker |
add_verb | handles adding verbs and updating the stat panel browser |
announce_arrival | Send a message in common radio when a player arrives |
block_calculate_resultant_damage | Considers a block return_list and calculates damage to use from that. |
callHook | @file hooks.dm Implements hooks, a simple way to run code on pre-defined events. |
call_emergency_meeting | Summon the crew for an emergency meeting |
callback_select | Runs a list of callbacks asyncronously, returning only when all have finished |
check_admin_pings | Checks a given message to see if any of the words contain an active admin's ckey with an @ before it |
color_matrix_contrast_percent | Exxagerates or removes brightness |
color_matrix_hsv | Builds a color matrix that transforms the hue, saturation, and value, all in one operation. |
color_matrix_rotation | Moves all colors angle degrees around the color wheel while maintaining intensity of the color and not affecting whites TODO: Need a version that only affects one color (ie shift red to blue but leave greens and blues alone) |
color_matrix_saturation_percent | Exxagerates or removes colors |
create_mafia_game | Creates the global datum for playing mafia games, destroys the last if that's required and returns the new. |
create_strippable_list | Creates an assoc list of keys to /datum/strippable_item |
cultslur | Makes you talk like you got cult stunned, which is slurring but with some dark messages |
cut_relative_direction | Takes a screen_loc string and cut out any directions like NORTH or SOUTH |
dd_file2list | Reading files |
dd_hasprefix | Prefix checking |
dd_hassuffix | Suffix checking |
dd_replacetext | Replacing text |
dd_text2list | Turning text into lists |
debug_variable | Get displayed variable in VV variable list |
default_ui_state | The sane defaults for a UI such as a computer or a machine. |
delete_all_SS_and_recreate_master | Delete all existing SS to basically start over |
deltimer | Delete a timer |
diff_appearances | Takes two appearances as args, prints out, logs, and returns a text representation of their differences Including suboverlays |
emissive_appearance | Produces a mutable appearance glued to the [EMISSIVE_PLANE] dyed to be the EMISSIVE_COLOR. |
end_cooldown | Callback called by a timer to end an associative-list-indexed cooldown. |
english_list_assoc | English_list but associative supporting. Higher overhead. @depricated |
find_record | Returns datum/data/record |
finish_unequip_mob | A utility function for /datum/strippable_item s to finish unequipping an item from a mob. |
firing_squad | firing_squad is a proc for the :B:erforate smite to shoot each individual bullet at them, so that we can add actual delays without sleep() nonsense |
format_frequency | Format frequency by moving the decimal. |
generate_asset_name | Generate a filename for this asset The same asset will always lead to the same asset name (Generated names do not include file extention.) |
generate_bitfields | Turns /datum/bitfield subtypes into a list for use in debugging |
generate_selectable_species | Generates species available to choose in character setup at roundstart |
get_allowed_instrument_ids | Get all non admin_only instruments. |
get_atom_on_turf | Returns the top-most atom sitting on the turf. For example, using this on a disk, which is in a bag, on a mob, will return the mob because it's on the turf. |
get_base_area | Returns the base area the target is located in if there is one. Alternatively, returns the area as is. |
get_bbox_of_atoms | Get a bounding box of a list of atoms. |
get_cached_actionspeed_modifier | Grabs a STATIC MODIFIER datum from cache. YOU MUST NEVER EDIT THESE DATUMS, OR IT WILL AFFECT ANYTHING ELSE USING IT TOO! |
get_cached_movespeed_modifier | Grabs a STATIC MODIFIER datum from cache. YOU MUST NEVER EDIT THESE DATUMS, OR IT WILL AFFECT ANYTHING ELSE USING IT TOO! |
get_path_to | This file contains the stuff you need for using JPS (Jump Point Search) pathing, an alternative to A* that skips over large numbers of uninteresting tiles resulting in much quicker pathfinding solutions. Mind that diagonals cost the same as cardinal moves currently, so paths may look a bit strange, but should still be optimal. |
get_ranged_target_turf_direct | Get ranged target turf, but with direct targets as opposed to directions |
get_sub_areas | Returns either null, or a list containing every sub area associated with our base area. If include_base is TRUE, the base area will also be added to the return list. |
get_sub_areas_contents | Simple proc that returns a sum of all contents from every sub area, Think of the above but for all contents, not just turfs, and without target z. |
get_sub_areas_turfs | Proc used for purposes similar to get_areas_turfs(), but aimed to include associated areas. Only accepts area instances and paths for the first arg, no text strings. Returns a list of all turfs found in the sub areas (including the base's if include_base is TRUE) and located in a z level matching target_z, or anywhere if target_z is 0 |
get_thirst | Don't blame me if they have negative thirst, admeme. |
get_valid_screen_location | Returns a valid location to place a screen object without overflowing the viewport |
get_vog_special | get special role multiplier for voice of god. No double dipping. |
getleftblocks | DNA HELPER-PROCS |
give_admin_popup | Tries to give the target an admin popup. If it fails, will send the error to the passed admin. |
hull_shielding_get_tiles_around_area | HELPER FILE FOR SHIELDING Gets hull exterior adjacent tiles of a certain area Area method. EXPENSIVE. If the area itself is already considered exterior, it'll find all tiles inside it that's next to an interior area. |
hull_shielding_get_tiles_in_z | Gets hull adjacent exterior tiles of an entire zlevel EXPENSIVE. Gets the tiles in the exterior area touching to a non-exterior area |
icon2base64 | Converts an icon to base64. Operates by putting the icon in the iconCache savefile, exporting it as text, and then parsing the base64 from that. (This relies on byond automatically storing icons in savefiles as base64) |
immerse_player | "Immerse", or how I made the entire playerbase quit the game. |
init_keybindings | Creates and sorts all the keybinding datums |
is_energy_reflectable_projectile | //// MISC HELPERS //////// Is this atom reflectable with ""standardized"" reflection methods like you know eshields and deswords and similar |
is_guest_key | Returns whether or not a player is a guest using their ckey as an input |
isemptylist | @depricated |
json_deserialize_datum | Convert a list of json to datum |
json_serialize_datum | Convert a datum into a json blob |
lightningbolt | this is the actual bolt effect and damage, made into its own proc because it is used elsewhere |
listgetindex | @depricated |
load_map | Shortcut function to parse a map and apply it to the world. |
log_combat | Log a combat message in the attack log |
log_suspicious_login | Writes to a special log file if the log_suspicious_login config flag is set, which is intended to contain all logins that failed under suspicious circumstances. |
log_tgui | Appends a tgui-related log entry. All arguments are optional. |
log_wound | log_wound() is for when someone is attacked and suffers a wound. Note that this only captures wounds from damage, so smites/forced wounds aren't logged, as well as demotions like cuts scabbing over |
make_datum_references_lists | Initial Building |
md5asfile | Save file as an external file then md5 it. Used because md5ing files stored in the rsc sometimes gives incorrect md5 results. |
md5filepath | Returns the md5 of a file at a given path. |
message_centcom | Used by communications consoles to message CentCom |
message_syndicate | Used by communications consoles to message the Syndicate |
message_to_html | Message-related procs |
movespeed_data_null_check | Checks if a move speed modifier is valid and not missing any data |
nuke_request | Used by communications consoles to request the nuclear launch codes |
offset_to_screen_loc | Takes a list in the form (x_offset, y_offset) And converts it to a screen loc string Accepts an optional view string/size to force the screen_loc around, so it can't go out of scope |
overlays2text | Converts an overlay list into text for debug printing Of note: overlays aren't actually mutable appearances, they're just appearances Don't have access to that type tho, so this is the best you're gonna get |
parse_caught_click_modifiers | Returns a turf based on text inputs, original turf and viewing client |
pick_n_take | Pick a random element from the list and remove it from the list. |
podspawn | One proc for easy spawning of pods in the code to drop off items before whizzling (please don't proc call this in game, it will destroy you) |
process_teleport_locs | Generate a list of turfs you can teleport to from the areas list |
qdel | Should be treated as a replacement for the 'del' keyword. |
realize_appearance_queue | Takes a list of appearnces, makes them mutable so they can be properly vv'd and inspected |
recover_all_SS_and_recreate_master | Recreate all SSs which will still cause data survive due to Recover(), the new Master will then find and take them from global.vars |
recursive_organ_check | |
release_gas_to | Releases gas from src to output air. This means that it can not transfer air to gas mixture with higher pressure. a global proc due to rustmos |
remove_image_from_client | Removes an image from a client's .images . Useful as a callback. |
remove_verb | handles removing verb and sending it to browser to update, use this for removing verbs |
reset_cooldown | Proc used by stoppable timers to end a cooldown before the time has ran out. |
return_unused_frequency | returns a random unused frequency between MIN_FREE_FREQ & MAX_FREE_FREQ if free = TRUE, and MIN_FREQ & MAX_FREQ if FALSE |
rgb_construct_color_matrix | Assembles a color matrix, defaulting to identity |
rgba_construct_color_matrix | Assembles a color matrix, defaulting to identity |
rustg_get_version | Gets the version of rust_g |
rustg_redis_disconnect_rq | Disconnects from a previously connected redis server |
rustg_unix_timestamp | Returns the timestamp as a string |
safepick | @depricated |
sanitize_css_class_name | Removes all non-alphanumerics from the text, keep in mind this can lead to id conflicts |
sanitize_frequency | Ensure the frequency is within bounds of what it should be sending/receiving at |
sanitize_hexcolor | Sanitizes a hexadecimal color. Always outputs lowercase. |
sanitize_ooccolor | Makes sure the input color is text with a # at the start followed by 6 hexadecimal characters. Examples: "#ff1234", "#A38321", COLOR_GREEN_GRAY |
scramble_message_replace_chars | Slightly expensive proc to scramble a message using equal probabilities of character replacement from a list. DOES NOT SUPPORT HTML! |
screen_loc_to_offset | Takes a screen loc string in the format "+-left-offset:+-pixel,+-bottom-offset:+-pixel" Where the :pixel is optional, and returns A list in the format (x_offset, y_offset) We require context to get info out of screen locs that contain relative info, so NORTH, SOUTH, etc |
seedify | Finds and extracts seeds from an object |
send2adminchat | Sends a message to TGS admin chat channels. |
send2chat | Sends a message to TGS chat channels. |
send2otherserver | Sends a message to a set of cross-communications-enabled servers using world topic calls |
setup_mod_themes | Global proc that sets up all MOD themes as singletons in a list and returns it. |
single_path_typecache_immutable | Makes a typecache of a single typecache |
slur | Makes you speak like you're drunk |
stars | Convert random parts of a passed in message to stars |
start_unequip_mob | A utility function for /datum/strippable_item s to start unequipping an item from a mob. |
stripped_multiline_input_or_reflect | stripped_multiline_input but reflects to the user instead if it's too big and returns null. |
stutter | Adds stuttering to the message passed in |
tgalert | DEPRECATED: USE tgui_alert(...) INSTEAD |
tgui_Topic | Middleware for /client/Topic. |
tgui_alert | Creates a TGUI alert window and returns the user's response. |
tgui_alert_async | Creates an asynchronous TGUI alert window with an associated callback. |
tgui_input_list | Creates a TGUI input list window and returns the user's response. |
tgui_input_list_async | Creates an asynchronous TGUI input list window with an associated callback. |
tgui_input_number | Creates a TGUI window with a number input. Returns the user's response as num | null. |
tgui_input_number_async | Creates an asynchronous TGUI input num window with an associated callback. |
tgui_input_text | Creates a TGUI window with a text input. Returns the user's response. |
tgui_input_text_async | Creates an asynchronous TGUI input text window with an associated callback. |
timeleft | Get the remaining deciseconds on a timer |
to_chat | Sends the message to the recipient (target). |
to_chat_immediate | Circumvents the message queue and sends the message to the recipient (target) as soon as possible. |
transform_matrix_construct | constructs a transform matrix, defaulting to identity |
typecacheof | Like typesof() or subtypesof(), but returns a typecache instead of a list |
ui_status_only_living | Returns a UI status such that the dead will be able to watch, but not interact. |
ui_status_silicon_has_access | Returns a UI status such that silicons will be able to interact with whatever they would have access to if this was a machine. For example, AIs can interact if there's cameras with wireless control is enabled. |
ui_status_user_has_free_hands | Returns a UI status such that those without blocked hands will be able to interact, but everyone else can only watch. |
ui_status_user_is_abled | Returns a UI status such that users with debilitating conditions, such as being dead or not having power for silicons, will not be able to interact. Being dead will disable UI, being incapacitated will continue updating it, and anything else will make it interactive. |
ui_status_user_is_adjacent | Returns a UI status such that users adjacent to source will be able to interact,
far away users will be able to see, and anyone farther won't see anything.
Dead users will receive updates no matter what, though you likely want to add
a [ui_status_only_living ] check for finer observer interactions. |
ui_status_user_is_advanced_tool_user | Returns a UI status such that advanced tool users will be able to interact, but everyone else can only watch. |
ui_status_user_is_conscious_and_lying_down | Returns UI_INTERACTIVE if the user is conscious and lying down. Returns UI_UPDATE otherwise. |
ui_status_user_strictly_adjacent | Return UI_INTERACTIVE if the user is strictly adjacent to the target atom, whether they can see it or not. Return UI_CLOSE otherwise. |
unformat_frequency | Opposite of format, returns as a number |
url2htmlloader | Return html to load a url. for use inside of browse() calls to html assets that might be loaded on a cdn. |
valid_window_location | Checks whether the target turf is in a valid state to accept a directional window or other directional pseudo-dense object such as railings. |
velvetspeech | FermiChem |
view_to_pixels | Takes a string or num view, and converts it to pixel width/height in a list(pixel_width, pixel_height) |
voice_of_god | VOICE OF GOD |
wave_explosion | Creates a wave explosion at a certain place |
woundscan | Displays wounds with extended information on their status vs medscanners |
zone2body_parts_covered | For finding out what body parts a body zone covers, the inverse of the below basically |
Var Details
Failsafe
Failsafe
Pretty much pokes the MC to make sure it's still alive.
Master
StonedMC
Designed to properly split up a given tick among subsystems Note: if you read parts of this code and think "why is it doing it that way" Odds are, there is a reason
SSdiscord
Discord Subsystem
This subsystem handles some integrations with discord
NOTES:
- There is a DB table to track ckeys and associated discord IDs. (discord_link)
- This system REQUIRES TGS for notifying users at end of the round
- The SS uses fire() instead of just pure shutdown, so people can be notified if it comes back after a crash, where the SS wasn't properly shutdown
- It only writes to the disk every 5 minutes, and it won't write to disk if the file is the same as it was the last time it was written. This is to save on disk writes
- The system is kept per-server (EG: Terry will not notify people who pressed notify on Sybil), but the accounts are between servers so you dont have to relink on each server.
HOW NOTIFYING WORKS
ROUNDSTART:
- The file is loaded and the discord IDs are extracted
- A ping is sent to the discord with the IDs of people who wished to be notified
- The file is emptied
MIDROUND:
- Someone usees the notify verb, it adds their discord ID to the list.
- On fire, it will write that to the disk, as long as conditions above are correct
END ROUND:
- The file is force-saved, incase it hasn't fired at end round
This is an absolute clusterfuck, but its my clusterfuck -aa07
SSrunechat
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.
SStgui
tgui subsystem
Contains all tgui state and subsystem code.
SStimer
Timer Subsystem
Handles creation, callbacks, and destruction of timed events.
It is important to understand the buckets used in the timer subsystem are just a series of circular doubly-linked lists. The object at a given index in bucket_list is a /datum/timedevent, the head of a circular list, which has prev and next references for the respective elements in that bucket's circular list.
Proc Details
CreateBans
DEBUG
GetJobName
Gets the job title, if the job name is an alt title, locates the original title using a prebuilt cache
HeapPathWeightCompare
TODO: Macro this to reduce proc overhead
WrapAdminProcCall
Wrapper for proccalls where the datum is flagged as vareditted
___TraitAdd
DO NOT USE ___TraitAdd OR ___TraitRemove as a replacement for ADD_TRAIT / REMOVE_TRAIT defines. To be used explicitly for callback.
___TraitRemove
DO NOT USE ___TraitAdd OR ___TraitRemove as a replacement for ADD_TRAIT / REMOVE_TRAIT defines. To be used explicitly for callback.
_addtimer
Create a new timer and insert it in the queue. You should not call this directly, and should instead use the addtimer macro, which includes source information.
Arguments:
- callback the callback to call on timer finish
- wait deciseconds to run the timer for
- flags flags for this timer, see: code__DEFINES\subsystems.dm
_turf_in_offset
Locating turfs
actionspeed_data_null_check
Checks if a action speed modifier is valid and not missing any data
add_keybinding
Adds an instanced keybinding to the global tracker
add_verb
handles adding verbs and updating the stat panel browser
pass the verb type path to this instead of adding it directly to verbs so the statpanel can update Arguments:
- target - Who the verb is being added to, client or mob typepath
- verb - typepath to a verb, or a list of verbs, supports lists of lists
announce_arrival
Send a message in common radio when a player arrives
block_calculate_resultant_damage
Considers a block return_list and calculates damage to use from that.
callHook
@file hooks.dm Implements hooks, a simple way to run code on pre-defined events.
-
@page hooks Code hooks
-
@section hooks Hooks
-
A hook is defined under /hook in the type tree.
-
To add some code to be called by the hook, define a proc under the type, as so:
-
@code /hook/foo/proc/bar() if(1) return TRUE //Sucessful else return FALSE //Error, or runtime.
-
@endcode
-
All hooks must return nonzero on success, as runtimes will force return null.
Calls a hook, executing every piece of code that's attached to it. @param hook Identifier of the hook to call. @returns 1 if all hooked code runs successfully, 0 otherwise.
call_emergency_meeting
Summon the crew for an emergency meeting
Teleports the crew to a specified area, and tells everyone (via an announcement) who called the meeting. Should only be used during april fools! Arguments:
- user - Mob who called the meeting
- button_zone - Area where the meeting was called and where everyone will get teleported to
callback_select
Runs a list of callbacks asyncronously, returning only when all have finished
Callbacks can be repeated, to call it multiple times
Arguments:
- list/callbacks the list of callbacks to be called
- list/callback_args the list of lists of arguments to pass into each callback
- savereturns Optionally save and return the list of returned values from each of the callbacks
- resolution The number of byond ticks between each time you check if all callbacks are complete
check_admin_pings
Checks a given message to see if any of the words contain an active admin's ckey with an @ before it
Returns nothing if no pings are found, otherwise returns an associative list with ckey -> client Also modifies msg to underline the pings, then stores them in the key ADMINSAY_PING_UNDERLINE_NAME_INDEX for returning
Arguments:
- msg - the message being scanned
color_matrix_contrast_percent
Exxagerates or removes brightness
color_matrix_hsv
Builds a color matrix that transforms the hue, saturation, and value, all in one operation.
color_matrix_rotation
Moves all colors angle degrees around the color wheel while maintaining intensity of the color and not affecting whites TODO: Need a version that only affects one color (ie shift red to blue but leave greens and blues alone)
color_matrix_saturation_percent
Exxagerates or removes colors
create_mafia_game
Creates the global datum for playing mafia games, destroys the last if that's required and returns the new.
create_strippable_list
Creates an assoc list of keys to /datum/strippable_item
cultslur
Makes you talk like you got cult stunned, which is slurring but with some dark messages
cut_relative_direction
Takes a screen_loc string and cut out any directions like NORTH or SOUTH
dd_file2list
Reading files
dd_hasprefix
Prefix checking
dd_hassuffix
Suffix checking
dd_replacetext
Replacing text
dd_text2list
Turning text into lists
debug_variable
Get displayed variable in VV variable list
default_ui_state
The sane defaults for a UI such as a computer or a machine.
delete_all_SS_and_recreate_master
Delete all existing SS to basically start over
deltimer
Delete a timer
Arguments:
- id a timerid or a /datum/timedevent
diff_appearances
Takes two appearances as args, prints out, logs, and returns a text representation of their differences Including suboverlays
emissive_appearance
Produces a mutable appearance glued to the [EMISSIVE_PLANE] dyed to be the EMISSIVE_COLOR.
end_cooldown
Callback called by a timer to end an associative-list-indexed cooldown.
Arguments:
- source - datum storing the cooldown
- index - string index storing the cooldown on the cooldowns associative list
This sends a signal reporting the cooldown end.
english_list_assoc
English_list but associative supporting. Higher overhead. @depricated
find_record
Returns datum/data/record
finish_unequip_mob
A utility function for /datum/strippable_item
s to finish unequipping an item from a mob.
firing_squad
firing_squad is a proc for the :B:erforate smite to shoot each individual bullet at them, so that we can add actual delays without sleep() nonsense
Hilariously, if you drag someone away mid smite, the bullets will still chase after them from the original spot, possibly hitting other people. Too funny to fix imo
Arguments:
- target- guy we're shooting obviously
- source_turf- where the bullet begins, preferably on a turf next to the target
- body_zone- which bodypart we're aiming for, if there is one there
- wound_bonus- the wounding power we're assigning to the bullet, since we don't care about the base one
- damage- the damage we're assigning to the bullet, since we don't care about the base one
format_frequency
Format frequency by moving the decimal.
generate_asset_name
Generate a filename for this asset The same asset will always lead to the same asset name (Generated names do not include file extention.)
generate_bitfields
Turns /datum/bitfield subtypes into a list for use in debugging
generate_selectable_species
Generates species available to choose in character setup at roundstart
This proc generates which species are available to pick from in character setup. If there are no available roundstart species, defaults to human.
get_allowed_instrument_ids
Get all non admin_only instruments.
get_atom_on_turf
Returns the top-most atom sitting on the turf. For example, using this on a disk, which is in a bag, on a mob, will return the mob because it's on the turf.
Arguments
- something_in_turf - a movable within the turf, somewhere.
- stop_type - optional - stops looking if stop_type is found in the turf, returning that type (if found).
get_base_area
Returns the base area the target is located in if there is one. Alternatively, returns the area as is.
get_bbox_of_atoms
Get a bounding box of a list of atoms.
Arguments:
- atoms - List of atoms. Can accept output of view() and range() procs.
Returns: list(x1, y1, x2, y2)
get_cached_actionspeed_modifier
Grabs a STATIC MODIFIER datum from cache. YOU MUST NEVER EDIT THESE DATUMS, OR IT WILL AFFECT ANYTHING ELSE USING IT TOO!
get_cached_movespeed_modifier
Grabs a STATIC MODIFIER datum from cache. YOU MUST NEVER EDIT THESE DATUMS, OR IT WILL AFFECT ANYTHING ELSE USING IT TOO!
get_path_to
This file contains the stuff you need for using JPS (Jump Point Search) pathing, an alternative to A* that skips over large numbers of uninteresting tiles resulting in much quicker pathfinding solutions. Mind that diagonals cost the same as cardinal moves currently, so paths may look a bit strange, but should still be optimal.
This is the proc you use whenever you want to have pathfinding more complex than "try stepping towards the thing". If no path was found, returns an empty list, which is important for bots like medibots who expect an empty list rather than nothing.
Arguments:
- caller: The movable atom that's trying to find the path
- end: What we're trying to path to. It doesn't matter if this is a turf or some other atom, we're gonna just path to the turf it's on anyway
- max_distance: The maximum number of steps we can take in a given path to search (default: 30, 0 = infinite)
- mintargetdistance: Minimum distance to the target before path returns, could be used to get near a target, but not right to it - for an AI mob with a gun, for example.
- id: An ID card representing what access we have and what doors we can open. Its location relative to the pathing atom is irrelevant
- simulated_only: Whether we consider turfs without atmos simulation (AKA do we want to ignore space)
- exclude: If we want to avoid a specific turf, like if we're a mulebot who already got blocked by some turf
- skip_first: Whether or not to delete the first item in the path. This would be done because the first item is the starting tile, which can break movement for some creatures.
get_ranged_target_turf_direct
Get ranged target turf, but with direct targets as opposed to directions
Starts at atom A and gets the exact angle between A and target Moves from A with that angle, Range amount of times, until it stops, bound to map size Arguments:
- A - Initial Firer / Position
- target - Target to aim towards
- range - Distance of returned target turf from A
- offset - Angle offset, 180 input would make the returned target turf be in the opposite direction
get_sub_areas
Returns either null, or a list containing every sub area associated with our base area. If include_base is TRUE, the base area will also be added to the return list.
get_sub_areas_contents
Simple proc that returns a sum of all contents from every sub area, Think of the above but for all contents, not just turfs, and without target z.
get_sub_areas_turfs
Proc used for purposes similar to get_areas_turfs(), but aimed to include associated areas. Only accepts area instances and paths for the first arg, no text strings. Returns a list of all turfs found in the sub areas (including the base's if include_base is TRUE) and located in a z level matching target_z, or anywhere if target_z is 0
get_thirst
Don't blame me if they have negative thirst, admeme.
get_valid_screen_location
Returns a valid location to place a screen object without overflowing the viewport
- target: The target location as a purely number based screen_loc string "+-left-offset:+-pixel,+-bottom-offset:+-pixel"
- target_offset: The amount we want to offset the target location by. We explictly don't care about direction here, we will try all 4
- view: The view variable of the client we're doing this for. We use this to get the size of the screen
Returns a screen loc representing the valid location
get_vog_special
get special role multiplier for voice of god. No double dipping.
getleftblocks
DNA HELPER-PROCS
give_admin_popup
Tries to give the target an admin popup. If it fails, will send the error to the passed admin.
hull_shielding_get_tiles_around_area
HELPER FILE FOR SHIELDING Gets hull exterior adjacent tiles of a certain area Area method. EXPENSIVE. If the area itself is already considered exterior, it'll find all tiles inside it that's next to an interior area.
hull_shielding_get_tiles_in_z
Gets hull adjacent exterior tiles of an entire zlevel EXPENSIVE. Gets the tiles in the exterior area touching to a non-exterior area
icon2base64
Converts an icon to base64. Operates by putting the icon in the iconCache savefile, exporting it as text, and then parsing the base64 from that. (This relies on byond automatically storing icons in savefiles as base64)
immerse_player
"Immerse", or how I made the entire playerbase quit the game.
init_keybindings
Creates and sorts all the keybinding datums
is_energy_reflectable_projectile
//// MISC HELPERS //////// Is this atom reflectable with ""standardized"" reflection methods like you know eshields and deswords and similar
is_guest_key
Returns whether or not a player is a guest using their ckey as an input
isemptylist
@depricated
json_deserialize_datum
Convert a list of json to datum
json_serialize_datum
Convert a datum into a json blob
lightningbolt
this is the actual bolt effect and damage, made into its own proc because it is used elsewhere
listgetindex
@depricated
load_map
Shortcut function to parse a map and apply it to the world.
dmm_file
: A .dmm file to load (Required).x_offset
,y_offset
,z_offset
: Positions representign where to load the map (Optional).cropMap
: When true, the map will be cropped to fit the existing world dimensions (Optional).measureOnly
: When true, no changes will be made to the world (Optional).no_changeturf
: When true, turf/AfterChange won't be called on loaded turfsx_lower
,x_upper
,y_lower
,y_upper
: Coordinates (relative to the game world) to crop to (Optional).placeOnTop
: Whether to use turf/PlaceOnTop rather than turf/ChangeTurf (Optional).
log_combat
Log a combat message in the attack log
Arguments:
- atom/user - argument is the actor performing the action
- atom/target - argument is the target of the action
- what_done - is a verb describing the action (e.g. punched, throwed, kicked, etc.)
- atom/object - is a tool with which the action was made (usually an item)
- addition - is any additional text, which will be appended to the rest of the log line
log_suspicious_login
Writes to a special log file if the log_suspicious_login config flag is set, which is intended to contain all logins that failed under suspicious circumstances.
Mirrors this log entry to log_access when access_log_mirror is TRUE, so this proc doesn't need to be used alongside log_access and can replace it where appropriate.
log_tgui
Appends a tgui-related log entry. All arguments are optional.
log_wound
log_wound() is for when someone is attacked and suffers a wound. Note that this only captures wounds from damage, so smites/forced wounds aren't logged, as well as demotions like cuts scabbing over
Note that this has no info on the attack that dealt the wound: information about where damage came from isn't passed to the bodypart's damaged proc. When in doubt, check the attack log for attacks at that same time TODO later: Add logging for healed wounds, though that will require some rewriting of healing code to prevent admin heals from spamming the logs. Not high priority
Arguments:
- victim- The guy who got wounded
- suffered_wound- The wound, already applied, that we're logging. It has to already be attached so we can get the limb from it
- dealt_damage- How much damage is associated with the attack that dealt with this wound.
- dealt_wound_bonus- The wound_bonus, if one was specified, of the wounding attack
- dealt_bare_wound_bonus- The bare_wound_bonus, if one was specified and applied, of the wounding attack. Not shown if armor was present
- base_roll- Base wounding ability of an attack is a random number from 1 to (dealt_damage ** WOUND_DAMAGE_EXPONENT). This is the number that was rolled in there, before mods
make_datum_references_lists
Initial Building
md5asfile
Save file as an external file then md5 it. Used because md5ing files stored in the rsc sometimes gives incorrect md5 results.
md5filepath
Returns the md5 of a file at a given path.
message_centcom
Used by communications consoles to message CentCom
message_syndicate
Used by communications consoles to message the Syndicate
message_to_html
Message-related procs
Message format (/list):
- type - Message type, must be one of defines in
code/__DEFINES/chat.dm
- text - Plain message text
- html - HTML message text
- Optional metadata, can be any key/value pair.
Copyright (c) 2020 Aleksej Komarov SPDX-License-Identifier: MIT
movespeed_data_null_check
Checks if a move speed modifier is valid and not missing any data
nuke_request
Used by communications consoles to request the nuclear launch codes
offset_to_screen_loc
Takes a list in the form (x_offset, y_offset) And converts it to a screen loc string Accepts an optional view string/size to force the screen_loc around, so it can't go out of scope
overlays2text
Converts an overlay list into text for debug printing Of note: overlays aren't actually mutable appearances, they're just appearances Don't have access to that type tho, so this is the best you're gonna get
parse_caught_click_modifiers
Returns a turf based on text inputs, original turf and viewing client
pick_n_take
Pick a random element from the list and remove it from the list.
podspawn
One proc for easy spawning of pods in the code to drop off items before whizzling (please don't proc call this in game, it will destroy you)
Arguments:
- specifications: special mods to the pod, see non var edit specifications for details on what you should fill this with Non var edit specifications:
- target = where you want the pod to drop
- path = a special specific pod path if you want, this can save you a lot of var edits
- style = style of the pod, defaults to the normal pod
- spawn = spawned path or a list of the paths spawned, what you're sending basically Returns the pod spawned, in case you want to spawn items yourself and modify them before putting them in.
process_teleport_locs
Generate a list of turfs you can teleport to from the areas list
Includes areas if they're not a shuttle or not not teleport or have no contents
The chosen turf is the first item in the areas contents that is a station level
The returned list of turfs is sorted by name
qdel
Should be treated as a replacement for the 'del' keyword.
Datums passed to this will be given a chance to clean up references to allow the GC to collect them.
realize_appearance_queue
Takes a list of appearnces, makes them mutable so they can be properly vv'd and inspected
recover_all_SS_and_recreate_master
Recreate all SSs which will still cause data survive due to Recover(), the new Master will then find and take them from global.vars
recursive_organ_check
- recursive_organ_check
- inputs: O (object to start with)
- outputs:
- description: A pseudo-recursive loop based off of the recursive mob check, this check looks for any organs held
-
within 'O', toggling their frozen flag. This check excludes items held within other safe organ
-
storage units, so that only the lowest level of container dictates whether we do or don't decompose
release_gas_to
Releases gas from src to output air. This means that it can not transfer air to gas mixture with higher pressure. a global proc due to rustmos
remove_image_from_client
Removes an image from a client's .images
. Useful as a callback.
remove_verb
handles removing verb and sending it to browser to update, use this for removing verbs
pass the verb type path to this instead of removing it from verbs so the statpanel can update Arguments:
- target - Who the verb is being removed from, client or mob typepath
- verb - typepath to a verb, or a list of verbs, supports lists of lists
reset_cooldown
Proc used by stoppable timers to end a cooldown before the time has ran out.
Arguments:
- source - datum storing the cooldown
- index - string index storing the cooldown on the cooldowns associative list
This sends a signal reporting the cooldown end, passing the time left as an argument.
return_unused_frequency
returns a random unused frequency between MIN_FREE_FREQ & MAX_FREE_FREQ if free = TRUE, and MIN_FREQ & MAX_FREQ if FALSE
rgb_construct_color_matrix
Assembles a color matrix, defaulting to identity
rgba_construct_color_matrix
Assembles a color matrix, defaulting to identity
rustg_get_version
Gets the version of rust_g
rustg_redis_disconnect_rq
Disconnects from a previously connected redis server
rustg_unix_timestamp
Returns the timestamp as a string
safepick
@depricated
sanitize_css_class_name
Removes all non-alphanumerics from the text, keep in mind this can lead to id conflicts
sanitize_frequency
Ensure the frequency is within bounds of what it should be sending/receiving at
sanitize_hexcolor
Sanitizes a hexadecimal color. Always outputs lowercase.
@params
- color - input color, 3 or 6 characters without the #.
- desired_format - 3 or 6 characters without the potential #. can only put in 3 or 6 here.
- include_crunch - do we put a # at the start
- default - default color. must be 3 or 6 characters with or without #.
- default_replacement - what we replace broken letters with.
sanitize_ooccolor
Makes sure the input color is text with a # at the start followed by 6 hexadecimal characters. Examples: "#ff1234", "#A38321", COLOR_GREEN_GRAY
scramble_message_replace_chars
Slightly expensive proc to scramble a message using equal probabilities of character replacement from a list. DOES NOT SUPPORT HTML!
screen_loc_to_offset
Takes a screen loc string in the format "+-left-offset:+-pixel,+-bottom-offset:+-pixel" Where the :pixel is optional, and returns A list in the format (x_offset, y_offset) We require context to get info out of screen locs that contain relative info, so NORTH, SOUTH, etc
seedify
Finds and extracts seeds from an object
Checks if the object is such that creates a seed when extracted. Used by seed extractors or posably anything that would create seeds in some way. The seeds are dropped either at the extractor, if it exists, or where the original object was and it qdel's the object
Arguments:
- O - Object containing the seed, can be the loc of the dumping of seeds
- t_max - Amount of seed copies to dump, -1 is ranomized
- extractor - Seed Extractor, used as the dumping loc for the seeds and seed multiplier
- user - checks if we can remove the object from the inventory
send2adminchat
Sends a message to TGS admin chat channels.
category - The category of the mssage. message - The message to send.
send2chat
Sends a message to TGS chat channels.
message - The message to send. channel_tag - Required. If "", the message with be sent to all connected (Game-type for TGS3) channels. Otherwise, it will be sent to TGS4 channels with that tag (Delimited by ','s). admin_only - Determines if this communication can only be sent to admin only channels.
send2otherserver
Sends a message to a set of cross-communications-enabled servers using world topic calls
Arguments:
- source - Who sent this message
- msg - The message body
- type - The type of message, becomes the topic command under the hood
- target_servers - A collection of servers to send the message to, defined in config
- additional_data - An (optional) associated list of extra parameters and data to send with this world topic call
setup_mod_themes
Global proc that sets up all MOD themes as singletons in a list and returns it.
single_path_typecache_immutable
Makes a typecache of a single typecache
Obviously in BYOND we don't have the efficiency around here to have proper enforcement so If you use this you better know what you're doing. The list you get back is globally cached and if it's modified, you might break multiple things.
slur
Makes you speak like you're drunk
stars
Convert random parts of a passed in message to stars
- phrase - the string to convert
- probability - probability any character gets changed
This proc is dangerously laggy, avoid it or die
start_unequip_mob
A utility function for /datum/strippable_item
s to start unequipping an item from a mob.
stripped_multiline_input_or_reflect
stripped_multiline_input but reflects to the user instead if it's too big and returns null.
stutter
Adds stuttering to the message passed in
tgalert
DEPRECATED: USE tgui_alert(...) INSTEAD
Designed as a drop in replacement for alert(); functions the same. (outside of needing User specified) Arguments:
- User - The user to show the alert to.
- Message - The textual body of the alert.
- Title - The title of the alert's window.
- Button1 - The first button option.
- Button2 - The second button option.
- Button3 - The third button option.
- StealFocus - Boolean operator controlling if the alert will steal the user's window focus.
- Timeout - The timeout of the window, after which no responses will be valid.
tgui_Topic
Middleware for /client/Topic.
return bool If TRUE, prevents propagation of the topic call.
tgui_alert
Creates a TGUI alert window and returns the user's response.
This proc should be used to create alerts that the caller will wait for a response from. Arguments:
- user - The user to show the alert to.
- message - The content of the alert, shown in the body of the TGUI window.
- title - The of the alert modal, shown on the top of the TGUI window.
- buttons - The options that can be chosen by the user, each string is assigned a button on the UI.
- timeout - The timeout of the alert, after which the modal will close and qdel itself. Set to zero for no timeout.
- autofocus - The bool that controls if this alert should grab window focus.
tgui_alert_async
Creates an asynchronous TGUI alert window with an associated callback.
This proc should be used to create alerts that invoke a callback with the user's chosen option. Arguments:
- user - The user to show the alert to.
- message - The content of the alert, shown in the body of the TGUI window.
- title - The of the alert modal, shown on the top of the TGUI window.
- buttons - The options that can be chosen by the user, each string is assigned a button on the UI.
- callback - The callback to be invoked when a choice is made.
- timeout - The timeout of the alert, after which the modal will close and qdel itself. Disabled by default, can be set to seconds otherwise.
tgui_input_list
Creates a TGUI input list window and returns the user's response.
This proc should be used to create alerts that the caller will wait for a response from. Arguments:
- user - The user to show the input box to.
- message - The content of the input box, shown in the body of the TGUI window.
- title - The title of the input box, shown on the top of the TGUI window.
- items - The options that can be chosen by the user, each string is assigned a button on the UI.
- default - The option with this value will be selected on first paint of the TGUI window.
- timeout - The timeout of the input box, after which the input box will close and qdel itself. Set to zero for no timeout.
- strict_modern - Disabled the preference check of the input box, only allowing the TGUI window to show.
tgui_input_list_async
Creates an asynchronous TGUI input list window with an associated callback.
This proc should be used to create inputs that invoke a callback with the user's chosen option. Arguments:
- user - The user to show the input box to.
- message - The content of the input box, shown in the body of the TGUI window.
- title - The title of the input box, shown on the top of the TGUI window.
- items - The options that can be chosen by the user, each string is assigned a button on the UI.
- default - The option with this value will be selected on first paint of the TGUI window.
- callback - The callback to be invoked when a choice is made.
- timeout - The timeout of the input box, after which the menu will close and qdel itself. Set to zero for no timeout.
tgui_input_number
Creates a TGUI window with a number input. Returns the user's response as num | null.
This proc should be used to create windows for number entry that the caller will wait for a response from. If tgui fancy chat is turned off: Will return a normal input. If a max or min value is specified, will validate the input inside the UI and ui_act.
Arguments:
- user - The user to show the number input to.
- message - The content of the number input, shown in the body of the TGUI window.
- title - The title of the number input modal, shown on the top of the TGUI window.
- default - The default (or current) value, shown as a placeholder. Users can press refresh with this.
- max_value - Specifies a maximum value. If none is set, any number can be entered. Pressing "max" defaults to 1000.
- min_value - Specifies a minimum value. Often 0.
- timeout - The timeout of the number input, after which the modal will close and qdel itself. Set to zero for no timeout.
- round_value - whether the inputted number is rounded down into an integer.
tgui_input_number_async
Creates an asynchronous TGUI input num window with an associated callback.
This proc should be used to create inputs that invoke a callback with the user's chosen option. Arguments:
- user - The user to show the input box to.
- message - The content of the input box, shown in the body of the TGUI window.
- title - The title of the input box, shown on the top of the TGUI window.
- default - The default value pre-populated in the input box.
- callback - The callback to be invoked when a choice is made.
- timeout - The timeout of the input box, after which the menu will close and qdel itself. Set to zero for no timeout.
- round_value - whether the inputted number is rounded down into an integer.
tgui_input_text
Creates a TGUI window with a text input. Returns the user's response.
This proc should be used to create windows for text entry that the caller will wait for a response from. If tgui fancy chat is turned off: Will return a normal input. If max_length is specified, will return stripped_multiline_input.
Arguments:
- user - The user to show the text input to.
- message - The content of the text input, shown in the body of the TGUI window.
- title - The title of the text input modal, shown on the top of the TGUI window.
- default - The default (or current) value, shown as a placeholder.
- max_length - Specifies a max length for input. MAX_MESSAGE_LEN is default (4096)
- multiline - Bool that determines if the input box is much larger. Good for large messages, laws, etc.
- encode - Toggling this determines if input is filtered via html_encode. Setting this to FALSE gives raw input.
- timeout - The timeout of the textbox, after which the modal will close and qdel itself. Set to zero for no timeout.
tgui_input_text_async
Creates an asynchronous TGUI input text window with an associated callback.
This proc should be used to create inputs that invoke a callback with the user's chosen option. Arguments:
- user - The user to show the input box to.
- message - The content of the input box, shown in the body of the TGUI window.
- title - The title of the input box, shown on the top of the TGUI window.
- default - The default value pre-populated in the input box.
- callback - The callback to be invoked when a choice is made.
- timeout - The timeout of the input box, after which the menu will close and qdel itself. Set to zero for no timeout.
timeleft
Get the remaining deciseconds on a timer
Arguments:
- id a timerid or a /datum/timedevent
to_chat
Sends the message to the recipient (target).
Recommended way to write to_chat calls:
to_chat(client,
type = MESSAGE_TYPE_INFO,
html = "You have found <strong>[object]</strong>")
to_chat_immediate
Circumvents the message queue and sends the message to the recipient (target) as soon as possible.
transform_matrix_construct
constructs a transform matrix, defaulting to identity
typecacheof
Like typesof() or subtypesof(), but returns a typecache instead of a list
ui_status_only_living
Returns a UI status such that the dead will be able to watch, but not interact.
ui_status_silicon_has_access
Returns a UI status such that silicons will be able to interact with whatever they would have access to if this was a machine. For example, AIs can interact if there's cameras with wireless control is enabled.
ui_status_user_has_free_hands
Returns a UI status such that those without blocked hands will be able to interact, but everyone else can only watch.
ui_status_user_is_abled
Returns a UI status such that users with debilitating conditions, such as being dead or not having power for silicons, will not be able to interact. Being dead will disable UI, being incapacitated will continue updating it, and anything else will make it interactive.
ui_status_user_is_adjacent
Returns a UI status such that users adjacent to source will be able to interact,
far away users will be able to see, and anyone farther won't see anything.
Dead users will receive updates no matter what, though you likely want to add
a [ui_status_only_living
] check for finer observer interactions.
ui_status_user_is_advanced_tool_user
Returns a UI status such that advanced tool users will be able to interact, but everyone else can only watch.
ui_status_user_is_conscious_and_lying_down
Returns UI_INTERACTIVE if the user is conscious and lying down. Returns UI_UPDATE otherwise.
ui_status_user_strictly_adjacent
Return UI_INTERACTIVE if the user is strictly adjacent to the target atom, whether they can see it or not. Return UI_CLOSE otherwise.
unformat_frequency
Opposite of format, returns as a number
url2htmlloader
Return html to load a url. for use inside of browse() calls to html assets that might be loaded on a cdn.
valid_window_location
Checks whether the target turf is in a valid state to accept a directional window or other directional pseudo-dense object such as railings.
Returns FALSE if the target turf cannot accept a directional window or railing. Returns TRUE otherwise.
Arguments:
- dest_turf - The destination turf to check for existing windows and railings
- test_dir - The prospective dir of some atom you'd like to put on this turf.
- is_fulltile - Whether the thing you're attempting to move to this turf takes up the entire tile or whether it supports multiple movable atoms on its tile.
velvetspeech
FermiChem
view_to_pixels
Takes a string or num view, and converts it to pixel width/height in a list(pixel_width, pixel_height)
voice_of_god
VOICE OF GOD
wave_explosion
Creates a wave explosion at a certain place
woundscan
Displays wounds with extended information on their status vs medscanners
zone2body_parts_covered
For finding out what body parts a body zone covers, the inverse of the below basically