/// Standard maptext /// Prepares a text to be used for maptext. Use this so it doesn't look hideous. #define MAPTEXT(text) {"[##text]"} /** * Pixel-perfect scaled fonts for use in the MAP element as defined in skin.dmf * * Four sizes to choose from, use the sizes as mentioned below. * Between the variations and a step there should be an option that fits your use case. * BYOND uses pt sizing, different than px used in TGUI. Using px will make it look blurry due to poor antialiasing. * * Default sizes are prefilled in the macro for ease of use and a consistent visual look. * To use a step other than the default in the macro, specify it in a span style. * For example: MAPTEXT_PIXELLARI("Some large maptext here") */ /// Large size (ie: context tooltips) - Size options: 12pt 24pt. #define MAPTEXT_PIXELLARI(text) {"[##text]"} /// Standard size (ie: normal runechat) - Size options: 6pt 12pt 18pt. #define MAPTEXT_GRAND9K(text) {"[##text]"} /// Small size. (ie: context subtooltips, spell delays) - Size options: 12pt 24pt. #define MAPTEXT_TINY_UNICODE(text) {"[##text]"} /// Smallest size. (ie: whisper runechat) - Size options: 6pt 12pt 18pt. #define MAPTEXT_SPESSFONT(text) {"[##text]"} /* DEFINES USED FOR "generate_floating_text" */ ///Whispers and similar #define GENERATE_FLOATING_TEXT_SMALL BITFLAG(1) ///Normal talking #define GENERATE_FLOATING_TEXT_MEDIUM BITFLAG(2) ///Screaming #define GENERATE_FLOATING_TEXT_LARGE BITFLAG(3) /// Macro from Lummox used to get height from a MeasureText proc. /// resolves the MeasureText() return value once, then resolves the height, then sets return_var to that. #define WXH_TO_HEIGHT(measurement, return_var) \ do { \ var/_measurement = measurement; \ return_var = text2num(copytext(_measurement, findtextEx(_measurement, "x") + 1)); \ } while(FALSE); #define SMALL_FONTS(FONTSIZE, MSG) "[MSG]" /// Max width of chat message in pixels #define CHAT_MESSAGE_WIDTH 112 // Setting this much higher than 1024 could allow spammers to DOS the server easily. #define MAX_MESSAGE_LEN 4096 #define MAX_PAPER_MESSAGE_LEN 3072 #define MAX_BOOK_MESSAGE_LEN 9216 #define MAX_LNAME_LEN 64 #define MAX_NAME_LEN 63 #define MAX_MESSAGE_CHUNKS 20 //All < and > characters GLOBAL_DATUM_INIT(angular_brackets, /regex, regex(@"[<>]", "g")) //All characters between < a > inclusive of the bracket GLOBAL_DATUM_INIT(html_tags, /regex, regex(@"<.*?>", "g")) //All characters forbidden by filenames: ", \, \n, \t, /, ?, %, *, :, |, <, >, .. GLOBAL_DATUM_INIT(filename_forbidden_chars, /regex, regex(@{""|[\\\n\t/?%*:|<>]|\.\."}, "g")) GLOBAL_PROTECT(filename_forbidden_chars) // had to use the OR operator for quotes instead of putting them in the character class because it breaks the syntax highlighting otherwise. /// Removes characters incompatible with file names. #define SANITIZE_FILENAME(text) (GLOB.filename_forbidden_chars.Replace(text, "")) /// Simply removes the < and > characters, and limits the length of the message. #define STRIP_HTML_SIMPLE(text, limit) (GLOB.angular_brackets.Replace(copytext(text, 1, limit), "")) /// Removes everything enclose in < and > inclusive of the bracket, and limits the length of the message. #define STRIP_HTML_FULL(text, limit) (GLOB.html_tags.Replace(copytext(text, 1, limit), "")) /// BYOND's string procs don't support being used on datum references (as in it doesn't look for a name for stringification) /// We just use this macro to ensure that we will only pass strings to this BYOND-level function without developers needing to really worry about it. #define LOWER_TEXT(thing) lowertext(UNLINT("[thing]"))