(global)
Vars | |
Failsafe | Failsafe |
---|---|
Master | StonedMC |
SSchat | Copyright (c) 2020 Aleksej Komarov SPDX-License-Identifier: MIT |
SSdiscord | |
SSrunechat | |
SStgui | tgui subsystem |
SStime_track | The reference to the end of round sound that we have chosen. |
SStimer | |
Procs | |
Gibberish | Turn text into complete gibberish! |
IsAdminGhost | Is the passed in mob an admin ghost |
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. |
_alert_drones | Broadcast a message to all drones in a faction |
above_neck | Would this zone be above the neck |
active_free_borgs | Silicon Mob Procs |
add_keybinding | Adds an instanced keybinding to the global tracker |
add_verb | handles adding verbs and updating the stat panel browser |
addtimer | Create a new timer and insert it in the queue |
anonymous_ai_name | anonymous_ai_name: generates a corporate random name (but for sillycones). used in admin event tool anonymous names |
anonymous_name | anonymous_name: generates a corporate random name. used in admin event tool anonymous names |
callback_select | Runs a list of callbacks asyncronously, returning only when all have finished |
check_zone | Convert a PRECISE ZONE into the BODY_ZONE |
completed_bounty_count | Subtype Gens |
considered_exiled | Exiled check |
cultslur | Makes you talk like you got cult stunned, which is slurring but with some dark messages |
debug_variable | Get displayed variable in VV variable list |
deltimer | Delete a timer |
derpspeech | Convert a message to derpy speak |
do_after | Timed action involving one mob user. Target is optional. |
do_after_mob | Timed action involving at least one mob user and a list of targets. |
do_mob | Timed action involving two mobs, the user and the target. |
find_record | Returns datum/data/record |
findname | Find if the message has the real name of any user mob in the mob_list |
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 |
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 |
getFlatIcon | Create a single [/icon] from a given /atom or [/image]. |
get_allowed_instrument_ids | Get all non admin_only instruments as a list of text ids. |
get_bbox_of_atoms | Get a bounding box of a list of atoms. |
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_powernet_info_from_source | Extracts the powernet and cell of the provided power source |
get_ranged_target_turf_direct | Get ranged target turf, but with direct targets as opposed to directions |
getleftblocks | DNA HELPER-PROCS |
goonchem_vortex | Simulates a vortex that moves nearby movable atoms towards or away from the turf T. Range also determines the strength of the effect. High values cause nearby objects to be thrown. |
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) |
init_keybindings | Creates and sorts all the keybinding datums |
is_special_character | Is this mob special to the gamemode? |
item_heal_robotic | Heal a robotic body part on a mob |
json_deserialize_datum | Convert a list of json to datum |
json_serialize_datum | Convert a datum into a json blob |
load_map | Shortcut function to parse a map and apply it to the world. |
load_poll_data | Loads all current and future server polls and their options to store both as datums. |
log_combat | Log a combat message in the attack log |
log_directed_talk | Helper for logging of messages with only one sender and receiver |
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 |
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 |
notify_ghosts | Fancy notifications for ghosts |
nuke_request | Used by communications consoles to request the nuclear launch codes |
offer_control | Offer control of the passed in mob to dead player |
populate_editable_sign_types | This proc populates GLOBAL_LIST_EMPTY(editable_sign_types) |
populate_gear_list | Create a list of gear datums to sort |
process_teleport_locs | Generate a list of turfs you can teleport to from the areas list |
propagate_network | remove the old powernet and replace it with a new one throughout the network. |
ran_zone | Return the zone or randomly, another valid zone |
recursive_organ_check | |
remove_verb | handles removing verb and sending it to browser to update, use this for removing verbs |
sanitize_name | returns nothing with an alert instead of the message if it contains something in the ic filter, and sanitizes normally if the name is fine. It returns nothing so it backs out of the input the same way as if you had entered nothing. |
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 |
shake_camera | Shake the camera of the person viewing the mob SO REAL! |
slur | Makes you speak like you're drunk |
stars | Convert random parts of a passed in message to stars |
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. |
timeleft | Get the remaining deciseconds on a timer |
to_chat | Sends the message to the recipient (target). |
to_chat_immediate | Copyright (c) 2020 Aleksej Komarov SPDX-License-Identifier: MIT |
truncate | Truncate a string to the given length |
url2htmlloader | Return html to load a url. for use inside of browse() calls to html assets that might be loaded on a cdn. |
voice_of_god | VOICE OF GOD |
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
SSchat
Copyright (c) 2020 Aleksej Komarov SPDX-License-Identifier: MIT
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.
Copyright (c) 2020 Aleksej Komarov SPDX-License-Identifier: MIT
SStime_track
The reference to the end of round sound that we have chosen.
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
Gibberish
Turn text into complete gibberish!
text is the inputted message, replace_characters will cause original letters to be replaced and chance are the odds that a character gets modified.
IsAdminGhost
Is the passed in mob an admin ghost
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.
_alert_drones
Broadcast a message to all drones in a faction
Arguments:
- msg - The message to send
- dead_can_hear - Boolean that determines if ghosts can hear the message (
FALSE
by default) - source - /atom source that created the message
- faction_checked_mob - /mob/living to determine faction matches from
- exact_faction_match - Passed to /mob/proc/faction_check_mob
above_neck
Would this zone be above the neck
active_free_borgs
Silicon Mob Procs
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
addtimer
Create a new timer and insert it in the queue
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
anonymous_ai_name
anonymous_ai_name: generates a corporate random name (but for sillycones). used in admin event tool anonymous names
first letter is always a letter Example name = "Employee Assistant Assuming Delta" Arguments:
- is_ai - boolean to decide whether the name has "Core" (AI) or "Assistant" (Cyborg)
anonymous_name
anonymous_name: generates a corporate random name. used in admin event tool anonymous names
first letter is always a letter Example name = "Employee Q5460Z" Arguments:
- M - mob for preferences and gender
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_zone
Convert a PRECISE ZONE into the BODY_ZONE
completed_bounty_count
Subtype Gens
Strict Type Gens
Dynamic Gens
Cutoff for Non-Low Priority Bounties
Low Priority Gens
considered_exiled
Exiled check
Checks if the current body of the mind has an exile implant and is currently in an away mission. Returns FALSE if any of those conditions aren't met.
cultslur
Makes you talk like you got cult stunned, which is slurring but with some dark messages
debug_variable
Get displayed variable in VV variable list
deltimer
Delete a timer
Arguments:
- id a timerid or a /datum/timedevent
derpspeech
Convert a message to derpy speak
do_after
Timed action involving one mob user. Target is optional.
do_after_mob
Timed action involving at least one mob user and a list of targets.
do_mob
Timed action involving two mobs, the user and the target.
find_record
Returns datum/data/record
findname
Find if the message has the real name of any user mob in the mob_list
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
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.
getFlatIcon
Create a single [/icon] from a given /atom or [/image].
Very low-performance. Should usually only be used for HTML, where BYOND's appearance system (overlays/underlays, etc.) is not available.
Only the first argument is required.
get_allowed_instrument_ids
Get all non admin_only instruments as a list of text ids.
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_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_powernet_info_from_source
Extracts the powernet and cell of the provided power source
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
getleftblocks
DNA HELPER-PROCS
goonchem_vortex
Simulates a vortex that moves nearby movable atoms towards or away from the turf T. Range also determines the strength of the effect. High values cause nearby objects to be thrown.
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)
init_keybindings
Creates and sorts all the keybinding datums
is_special_character
Is this mob special to the gamemode?
returns 1 for special characters and 2 for heroes of gamemode
item_heal_robotic
Heal a robotic body part on a mob
json_deserialize_datum
Convert a list of json to datum
json_serialize_datum
Convert a datum into a json blob
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 map) to crop to (Optional).placeOnTop
: Whether to use turf/PlaceOnTop rather than turf/ChangeTurf (Optional).
load_poll_data
Loads all current and future server polls and their options to store both as datums.
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_directed_talk
Helper for logging of messages with only one sender and receiver
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
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
notify_ghosts
Fancy notifications for ghosts
The kitchen sink of notification procs
Arguments:
- message
- ghost_sound sound to play
- enter_link Href link to enter the ghost role being notified for
- source The source of the notification
- alert_overlay The alert overlay to show in the alert message
- action What action to take upon the ghost interacting with the notification, defaults to NOTIFY_JUMP
- flashwindow Flash the byond client window
- ignore_key Ignore keys if they're in the GLOB.poll_ignore list
- header The header of the notifiaction
- notify_suiciders If it should notify suiciders (who do not qualify for many ghost roles)
- notify_volume How loud the sound should be to spook the user
nuke_request
Used by communications consoles to request the nuclear launch codes
offer_control
Offer control of the passed in mob to dead player
Automatic logging and uses pollCandidatesForMob, how convenient
populate_editable_sign_types
This proc populates GLOBAL_LIST_EMPTY(editable_sign_types)
The first time a pen is used on any sign, this populates GLOBAL_LIST_EMPTY(editable_sign_types), creating a global list of all the signs that you can set a sign backing to with a pen.
populate_gear_list
Create a list of gear datums to sort
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
propagate_network
remove the old powernet and replace it with a new one throughout the network.
ran_zone
Return the zone or randomly, another valid zone
probability controls the chance it chooses the passed in zone, or another random zone defaults to 80
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
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
sanitize_name
returns nothing with an alert instead of the message if it contains something in the ic filter, and sanitizes normally if the name is fine. It returns nothing so it backs out of the input the same way as if you had entered nothing.
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).
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
shake_camera
Shake the camera of the person viewing the mob SO REAL!
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
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.
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. Set to zero for no timeout.
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.
- buttons - The options that can be chosen by the user, each string is assigned a button on the UI.
- timeout - The timeout of the input box, after which the input box will close and qdel itself. Set to zero for no timeout.
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.
- 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 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 [object]")
to_chat_immediate
Copyright (c) 2020 Aleksej Komarov SPDX-License-Identifier: MIT
Circumvents the message queue and sends the message to the recipient (target) as soon as possible.
truncate
Truncate a string to the given length
Will only truncate if the string is larger than the length and ignores unicode concerns
This exists soley because trim does other stuff too.
Arguments:
- text - String
- max_length - integer length to truncate at
url2htmlloader
Return html to load a url. for use inside of browse() calls to html assets that might be loaded on a cdn.
voice_of_god
VOICE OF GOD
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