diff --git a/citadel.dme b/citadel.dme index 7f087fbca9b..a3c74aba1f2 100644 --- a/citadel.dme +++ b/citadel.dme @@ -33,7 +33,6 @@ #include "code\__DEFINES\_tick.dm" #include "code\__DEFINES\access.dm" #include "code\__DEFINES\actionspeed_modification.dm" -#include "code\__DEFINES\admin.dm" #include "code\__DEFINES\appearance.dm" #include "code\__DEFINES\automata.dm" #include "code\__DEFINES\belly_modes_vr.dm" @@ -111,6 +110,7 @@ #include "code\__DEFINES\_flags\item_flags.dm" #include "code\__DEFINES\_flags\obj_flags.dm" #include "code\__DEFINES\_flags\turf_flags.dm" +#include "code\__DEFINES\admin\admin.dm" #include "code\__DEFINES\admin\keybindings.dm" #include "code\__DEFINES\assets\medical.dm" #include "code\__DEFINES\atmospherics\atmos.dm" @@ -4233,7 +4233,7 @@ #include "maps\overmap\shuttles\skipjack.dm" #include "maps\overmap\shuttles\specialops.dm" #include "maps\rift\rift.dm" -#include "maps\submaps\_healpers.dm" +#include "maps\submaps\_helpers.dm" #include "maps\submaps\_readme.dm" #include "maps\submaps\engine_submaps\engine.dm" #include "maps\~map_system\maps.dm" diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm deleted file mode 100644 index ece599aee29..00000000000 --- a/code/__DEFINES/admin.dm +++ /dev/null @@ -1,83 +0,0 @@ -// A set of constants used to determine which type of mute an admin wishes to apply. -// Please read and understand the muting/automuting stuff before changing these. MUTE_IC_AUTO, etc. = (MUTE_IC << 1) -// Therefore there needs to be a gap between the flags for the automute flags. -#define MUTE_IC 0x1 -#define MUTE_OOC 0x2 -#define MUTE_PRAY 0x4 -#define MUTE_ADMINHELP 0x8 -#define MUTE_DEADCHAT 0x10 -#define MUTE_ALL 0xFFFF - -// Number of identical messages required to get the spam-prevention auto-mute thing to trigger warnings and automutes. -#define SPAM_TRIGGER_WARNING 5 -#define SPAM_TRIGGER_AUTOMUTE 10 - -// Some constants for DB_Ban -#define BANTYPE_PERMA 1 -#define BANTYPE_TEMP 2 -#define BANTYPE_JOB_PERMA 3 -#define BANTYPE_JOB_TEMP 4 -/// Used to locate stuff to unban. -#define BANTYPE_ANY_FULLBAN 5 -/// Amount of time (in deciseconds) after the rounds starts, that the player disconnect report is issued. -#define ROUNDSTART_LOGOUT_REPORT_TIME 6000 -// Admin permissions. -#define R_BUILDMODE 0x1 -#define R_ADMIN 0x2 -#define R_BAN 0x4 -#define R_FUN 0x8 -#define R_SERVER 0x10 -#define R_DEBUG 0x20 -#define R_POSSESS 0x40 -#define R_PERMISSIONS 0x80 -#define R_STEALTH 0x100 -#define R_REJUVINATE 0x200 -#define R_VAREDIT 0x400 -#define R_SOUNDS 0x800 -#define R_SPAWN 0x1000 -#define R_MOD 0x2000 -#define R_EVENT 0x4000 -///higher than this will overflow -#define R_HOST 0x8000 -/// This holds the maximum value for a permission. It is used in iteration, so keep it updated. -#define R_MAXPERMISSION 0x8000 -#define SMITE_BREAKLEGS "Break Legs" -#define SMITE_BLUESPACEARTILLERY "Bluespace Artillery" -#define SMITE_SPONTANEOUSCOMBUSTION "Spontaneous Combustion" -#define SMITE_LIGHTNINGBOLT "Lightning Bolt" -#define SMITE_DISLOCATEALL "Dislocate All Limbs" -#define SMITE_SHADEKIN_ATTACK "Shadekin (Attack)" -#define SMITE_SHADEKIN_NOMF "Shadekin (Devour)" -#define SMITE_DARKSPACE_ABDUCT "Darkspace Abduction" -#define SMITE_AUTOSAVE "10 Second Autosave" -#define SMITE_AUTOSAVE_WIDE "10 Second Autosave (AoE)" - -#define ADMIN_QUE(user) "(?)" -#define ADMIN_FLW(user) "(FLW)" -#define ADMIN_PP(user) "(PP)" -#define ADMIN_VV(atom) "(VV)" -#define ADMIN_SM(user) "(SM)" -#define ADMIN_TP(user) "(TP)" -#define ADMIN_BSA(user) "(BSA)" -#define ADMIN_KICK(user) "(KICK)" -#define ADMIN_CENTCOM_REPLY(user) "(RPLY)" -#define ADMIN_SYNDICATE_REPLY(user) "(RPLY)" -#define ADMIN_SC(user) "(SC)" -#define ADMIN_ST(user) "(ST)" -#define ADMIN_SMITE(user) "(SMITE)" -#define ADMIN_LOOKUP(user) "[key_name_admin(user)][ADMIN_QUE(user)]" -#define ADMIN_LOOKUPFLW(user) "[key_name_admin(user)][ADMIN_QUE(user)] [ADMIN_FLW(user)]" -#define ADMIN_FULLMONTY_NONAME(user) "[ADMIN_QUE(user)] [ADMIN_PP(user)] [ADMIN_VV(user)] [ADMIN_SM(user)] [ADMIN_FLW(user)] [ADMIN_TP(user)]" -#define ADMIN_FULLMONTY(user) "[key_name_admin(user)] [ADMIN_FULLMONTY_NONAME(user)]" -#define ADMIN_JMP(src) "(JMP)" -#define COORD(src) "[src ? "([src.x],[src.y],[src.z])" : "nonexistent location"]" -#define ADMIN_COORDJMP(src) "[src ? "[COORD(src)] [ADMIN_JMP(src)]" : "nonexistent location"]" -#define AREACOORD(src) "[src ? "[get_area_name(src, TRUE)] ([src.x], [src.y], [src.z])" : "nonexistent location"]" - -#define AHELP_ACTIVE 1 -#define AHELP_CLOSED 2 -#define AHELP_RESOLVED 3 - -// LOG BROWSE TYPES -#define BROWSE_ROOT_ALL_LOGS 1 -#define BROWSE_ROOT_CURRENT_LOGS 2 diff --git a/code/__DEFINES/admin/admin.dm b/code/__DEFINES/admin/admin.dm new file mode 100644 index 00000000000..e0ee2e70260 --- /dev/null +++ b/code/__DEFINES/admin/admin.dm @@ -0,0 +1,116 @@ +/** + * A set of constants used to determine which type of mute an admin wishes to apply. + * Please read and understand the muting/automuting stuff before changing these. MUTE_IC_AUTO, etc. = (MUTE_IC << 1) + * Therefore there needs to be a gap between the flags for the automute flags. + */ +#define MUTE_IC (1<<0) +#define MUTE_OOC (1<<1) +#define MUTE_PRAY (1<<2) +#define MUTE_ADMINHELP (1<<3) +#define MUTE_DEADCHAT (1<<4) +#define MUTE_ALL (~0) + +//! Number of identical messages required to get the spam-prevention auto-mute thing to trigger warnings and automutes. +#define SPAM_TRIGGER_WARNING 5 +#define SPAM_TRIGGER_AUTOMUTE 10 + +//! Some constants for DB_Ban +#define BANTYPE_PERMA 1 +#define BANTYPE_TEMP 2 +#define BANTYPE_JOB_PERMA 3 +#define BANTYPE_JOB_TEMP 4 +#define BANTYPE_ANY_FULLBAN 5 // Used to locate stuff to unban. + +/// Amount of time (in deciseconds) after the rounds starts, that the player disconnect report is issued. +#define ROUNDSTART_LOGOUT_REPORT_TIME 6000 + +//! Admin permissions. +#define R_BUILDMODE (1<<0) +#define R_ADMIN (1<<1) +#define R_BAN (1<<2) +#define R_FUN (1<<3) +#define R_SERVER (1<<4) +#define R_DEBUG (1<<5) +#define R_POSSESS (1<<6) +#define R_PERMISSIONS (1<<7) +#define R_STEALTH (1<<8) +#define R_REJUVINATE (1<<9) +#define R_VAREDIT (1<<10) +#define R_SOUNDS (1<<11) +#define R_SPAWN (1<<12) +#define R_MOD (1<<13) +#define R_EVENT (1<<14) + +#define R_HOST (1<<15) +/// This holds the maximum value for a permission. It is used in iteration, so keep it updated. +#define R_MAXPERMISSION R_HOST + +#define SMITE_AUTOSAVE "10 Second Autosave" +#define SMITE_AUTOSAVE_WIDE "10 Second Autosave (AoE)" +#define SMITE_BLUESPACEARTILLERY "Bluespace Artillery" +#define SMITE_BREAKLEGS "Break Legs" +#define SMITE_DARKSPACE_ABDUCT "Darkspace Abduction" +#define SMITE_DISLOCATEALL "Dislocate All Limbs" +#define SMITE_LIGHTNINGBOLT "Lightning Bolt" +#define SMITE_SHADEKIN_ATTACK "Shadekin (Attack)" +#define SMITE_SHADEKIN_NOMF "Shadekin (Devour)" +#define SMITE_SPONTANEOUSCOMBUSTION "Spontaneous Combustion" + +#define ADMIN_LOOKUP(user) ("[key_name_admin(user)][ADMIN_QUE(user)]") +#define ADMIN_LOOKUPFLW(user) ("[key_name_admin(user)][ADMIN_QUE(user)] [ADMIN_FLW(user)]") +#define COORD(src) ("[src ? src.Admin_Coordinates_Readable() : "nonexistent location"]") +#define AREACOORD(src) ("[src ? src.Admin_Coordinates_Readable(TRUE) : "nonexistent location"]") +#define ADMIN_COORDJMP(src) ("[src ? src.Admin_Coordinates_Readable(FALSE, TRUE) : "nonexistent location"]") +#define ADMIN_VERBOSEJMP(src) ("[src ? src.Admin_Coordinates_Readable(TRUE, TRUE) : "nonexistent location"]") + +#define ADMIN_QUE(user) ("([SPAN_TOOLTIP("See a short summary about the player.","?")])") +#define ADMIN_FLW(user) ("([SPAN_TOOLTIP("Orbit this player.","FLW")])") +#define ADMIN_PP(user) ("([SPAN_TOOLTIP("Open this user's player panel.","PP")])") +#define ADMIN_VV(atom) ("([SPAN_TOOLTIP("Open their atom's variable viewer.","VV")])") +#define ADMIN_SM(user) ("([SPAN_TOOLTIP("Send this user a subtle message.","SM")])") +#define ADMIN_TP(user) ("([SPAN_TOOLTIP("Open this user's traitor panel.","TP")])") +#define ADMIN_KICK(user) ("([SPAN_TOOLTIP("Open a prompt to kick this user.","KICK")])") +#define ADMIN_CENTCOM_REPLY(user) ("([SPAN_TOOLTIP("Open a prompt to reply to this fax.","RPLY")])") +#define ADMIN_SYNDICATE_REPLY(user) ("([SPAN_TOOLTIP("Open a prompt to reply to this fax.","RPLY")])") +#define ADMIN_SC(user) ("([SPAN_TOOLTIP("Give this user a cookie!","SC")])") +#define ADMIN_ST(user) ("([SPAN_TOOLTIP("Give this user a dog treat!","ST")])") +#define ADMIN_SMITE(user) ("([SPAN_TOOLTIP("Open a prompt to smite this heathen.","SMITE")])") +#define ADMIN_JMP(src) ("([SPAN_TOOLTIP("Jump to this location.","JMP")])") +#define ADMIN_FULLMONTY_NONAME(user) ("[ADMIN_QUE(user)] [ADMIN_PP(user)] [ADMIN_VV(user)] [ADMIN_SM(user)] [ADMIN_FLW(user)] [ADMIN_TP(user)] [ADMIN_SMITE(user)]") +#define ADMIN_FULLMONTY(user) ("[key_name_admin(user)] [ADMIN_FULLMONTY_NONAME(user)]") + +/atom/proc/Admin_Coordinates_Readable(area_name, admin_jump_ref) + var/turf/T = Safe_COORD_Location() + return T ? "[area_name ? "[get_area_name(T, TRUE)] " : " "]([T.x],[T.y],[T.z])[admin_jump_ref ? " [ADMIN_JMP(T)]" : ""]" : "nonexistent location" + +/atom/proc/Safe_COORD_Location() + var/atom/A = drop_location() + if(!A) + return // Not a valid atom. + var/turf/T = get_step(A, 0) // Resolve where the thing is. + if(!T) // Incase it's inside a valid drop container, inside another container. ie if a mech picked up a closet and has it inside it's internal storage. + var/atom/last_try = A.loc?.drop_location() // One last try, otherwise fuck it. + if(last_try) + T = get_step(last_try, 0) + return T + +/turf/Safe_COORD_Location() + return src + +/** + *! AHELP Commands. + */ +#define ADMIN_AHELP_REJECT(user) ("([SPAN_TOOLTIP("Reject and close this ticket.","REJT")])") +#define ADMIN_AHELP_IC(user) ("([SPAN_TOOLTIP("Close this ticket and mark it IC.","IC")])") +#define ADMIN_AHELP_CLOSE(user) ("([SPAN_TOOLTIP("Close this ticket.","CLOSE")])") +#define ADMIN_AHELP_RESOLVE(user) ("([SPAN_TOOLTIP("Close this ticket and mark it as Resolved.","RSLVE")])") +#define ADMIN_AHELP_HANDLE(user) ("([SPAN_TOOLTIP("Alert other Administrators that you're handling this ticket.","HANDLE")])") +#define ADMIN_AHELP_FULLMONTY(user) ("[ADMIN_AHELP_REJECT(user)] [ADMIN_AHELP_IC(user)] [ADMIN_AHELP_CLOSE(user)] [ADMIN_AHELP_RESOLVE(user)] [ADMIN_AHELP_HANDLE(user)]") + +#define AHELP_ACTIVE 1 +#define AHELP_CLOSED 2 +#define AHELP_RESOLVED 3 + +// LOG BROWSE TYPES +#define BROWSE_ROOT_ALL_LOGS 1 +#define BROWSE_ROOT_CURRENT_LOGS 2 diff --git a/code/__DEFINES/chat.dm b/code/__DEFINES/chat.dm index 8b8ee438ff4..d6129edd0dd 100644 --- a/code/__DEFINES/chat.dm +++ b/code/__DEFINES/chat.dm @@ -9,6 +9,7 @@ #define MESSAGE_TYPE_RADIO "radio" #define MESSAGE_TYPE_INFO "info" #define MESSAGE_TYPE_WARNING "warning" +#define MESSAGE_TYPE_HELPFUL "helpful" #define MESSAGE_TYPE_DEADCHAT "deadchat" #define MESSAGE_TYPE_OOC "ooc" #define MESSAGE_TYPE_ADMINPM "adminpm" diff --git a/code/__DEFINES/spans.dm b/code/__DEFINES/spans.dm index 639354064e4..355615a80a3 100644 --- a/code/__DEFINES/spans.dm +++ b/code/__DEFINES/spans.dm @@ -1,130 +1,143 @@ -// Sorted alphabetically -#define SPAN_ABDUCTOR(str) ("" + str + "") -#define SPAN_ADMIN(str) ("" + str + "") -#define SPAN_ADMINHELP(str) ("" + str + "") -#define SPAN_ADMINNOTICE(str) ("" + str + "") -#define SPAN_ADMINOBSERVEROOC(str) ("" + str + "") -#define SPAN_ADMINOOC(str) ("" + str + "") -#define SPAN_ADMINSAY(str) ("" + str + "") -#define SPAN_AIPRIVRADIO(str) ("" + str + "") -#define SPAN_ALERT(str) ("" + str + "") -#define SPAN_ALERTALIEN(str) ("" + str + "") -#define SPAN_ALERTSYNDIE(str) ("" + str + "") -#define SPAN_ALERTWARNING(str) ("" + str + "") -#define SPAN_ALIEN(str) ("" + str + "") -#define SPAN_ANNOUNCE(str) ("" + str + "") -#define SPAN_BIG(str) ("" + str + "") -#define SPAN_BIGICON(str) ("" + str + "") -#define SPAN_BINARYSAY(str) ("" + str + "") -#define SPAN_BLUE(str) ("" + str + "") -#define SPAN_BLUETEAMRADIO(str) ("" + str + "") -#define SPAN_BOLD(str) ("" + str + "") -#define SPAN_BOLDANNOUNCE(str) ("" + str + "") -#define SPAN_BOLDDANGER(str) ("" + str + "") -#define SPAN_BOLDNICEGREEN(str) ("" + str + "") -#define SPAN_BOLDNOTICE(str) ("" + str + "") -#define SPAN_BOLDWARNING(str) ("" + str + "") -#define SPAN_CAUTION(str) ("" + str + "") -#define SPAN_CENTCOMRADIO(str) ("" + str + "") -#define SPAN_CHANGELING(str) ("" + str + "") -#define SPAN_CLOWN(str) ("" + str + "") -#define SPAN_COLOSSUS(str) ("" + str + "") -#define SPAN_COMMAND_HEADSET(str) ("" + str + "") -#define SPAN_COMRADIO(str) ("" + str + "") -#define SPAN_CRITICAL(str) ("" + str + "") -#define SPAN_CULT(str) ("" + str + "") -#define SPAN_CULTBOLD(str) ("" + str + "") -#define SPAN_CULTBOLDTALIC(str) ("" + str + "") -#define SPAN_CULTITALIC(str) ("" + str + "") -#define SPAN_CULTLARGE(str) ("" + str + "") -#define SPAN_DANGER(str) ("" + str + "") -#define SPAN_DEADSAY(str) ("" + str + "") -#define SPAN_DEBUG(str) ("" + str + "") -#define SPAN_DEBUGERROR(str) ("" + str + "") -#define SPAN_DEBUGINFO(str) ("" + str + "") -#define SPAN_DEBUGTRACE(str) ("" + str + "") -#define SPAN_DEBUGWARNING(str) ("" + str + "") -#define SPAN_DECONVERSION_MESSAGE(str) ("" + str + "") -#define SPAN_DRONE(str) ("" + str + "") -#define SPAN_ENGRADIO(str) ("" + str + "") -#define SPAN_EXTREMELYBIG(str) ("" + str + "") -#define SPAN_GANGRADIO(str) ("" + str + "") -#define SPAN_GHOSTALERT(str) ("" + str + "") -#define SPAN_GREEN(str) ("" + str + "") -#define SPAN_GREENANNOUNCE(str) ("" + str + "") -#define SPAN_GREENTEAMRADIO(str) ("" + str + "") -#define SPAN_GREENTEXT(str) ("" + str + "") -#define SPAN_GREY(str) ("" + str + "") -#define SPAN_HEAR(str) ("" + str + "") -#define SPAN_HIDDEN(str) ("") -#define SPAN_HIEROPHANT_WARNING(str) ("" + str + "") -#define SPAN_HIEROPHANT(str) ("" + str + "") -#define SPAN_HIGHLIGHT(str) ("" + str + "") -#define SPAN_HIS_GRACE(str) ("" + str + "") -#define SPAN_HOLOPARASITE(str) ("" + str + "") -#define SPAN_HYPNOPHRASE(str) ("" + str + "") -#define SPAN_ICON(str) ("" + str + "") -#define SPAN_INFO(str) ("" + str + "") -#define SPAN_INFOPLAIN(str) ("" + str + "") -#define SPAN_INTERFACE(str) ("" + str + "") -#define SPAN_LOOC(str) ("" + str + "") -#define SPAN_MEDAL(str) ("" + str + "") -#define SPAN_MEDRADIO(str) ("" + str + "") -#define SPAN_MEMO(str) ("" + str + "") -#define SPAN_MEMOEDIT(str) ("" + str + "") -#define SPAN_MIND_CONTROL(str) ("" + str + "") -#define SPAN_MINORANNOUNCE(str) ("" + str + "") -#define SPAN_MONKEY(str) ("" + str + "") -#define SPAN_MONKEYHIVE(str) ("" + str + "") -#define SPAN_MONKEYLEAD(str) ("" + str + "") -#define SPAN_NAME(str) ("" + str + "") -#define SPAN_NARSIE(str) ("" + str + "") -#define SPAN_NARSIESMALL(str) ("" + str + "") -#define SPAN_NICEGREEN(str) ("" + str + "") -#define SPAN_NOTICE(str) ("" + str + "") -#define SPAN_NOTICEALIEN(str) ("" + str + "") -#define SPAN_OOC(str) ("" + str + "") -#define SPAN_PAPYRUS(str) ("" + str + "") -#define SPAN_PHOBIA(str) ("" + str + "") -#define SPAN_PREFIX(str) ("" + str + "") -#define SPAN_PURPLE(str) ("" + str + "") -#define SPAN_RADIO(str) ("" + str + "") -#define SPAN_REALLYBIG(str) ("" + str + "") -#define SPAN_RED(str) ("" + str + "") -#define SPAN_REDTEAMRADIO(str) ("" + str + "") -#define SPAN_REDTEXT(str) ("" + str + "") -#define SPAN_RESONATE(str) ("" + str + "") -#define SPAN_REVENBIGNOTICE(str) ("" + str + "") -#define SPAN_REVENBOLDNOTICE(str) ("" + str + "") -#define SPAN_REVENDANGER(str) ("" + str + "") -#define SPAN_REVENMINOR(str) ("" + str + "") -#define SPAN_REVENNOTICE(str) ("" + str + "") -#define SPAN_REVENWARNING(str) ("" + str + "") -#define SPAN_ROBOT(str) ("" + str + "") -#define SPAN_ROSE(str) ("" + str + "") -#define SPAN_SANS(str) ("" + str + "") -#define SPAN_SCIRADIO(str) ("" + str + "") -#define SPAN_SECRADIO(str) ("" + str + "") -#define SPAN_SERVRADIO(str) ("" + str + "") -#define SPAN_SINGING(str) ("" + str + "") -#define SPAN_SLIME(str) ("" + str + "") -#define SPAN_SMALL(str) ("" + str + "") -#define SPAN_SMALLNOTICE(str) ("" + str + "") -#define SPAN_SMALLNOTICEITAL(str) ("" + str + "") -#define SPAN_SOGHUN(str) ("" + str + "") -#define SPAN_SPIDER(str) ("" + str + "") -#define SPAN_SUICIDE(str) ("" + str + "") -#define SPAN_SUPPRADIO(str) ("" + str + "") -#define SPAN_SYNDRADIO(str) ("" + str + "") -#define SPAN_TAPE_RECORDER(str) ("" + str + "") -#define SPAN_TINYNOTICE(str) ("" + str + "") -#define SPAN_TINYNOTICEITAL(str) ("" + str + "") -#define SPAN_UNCONSCIOUS(str) ("" + str + "") -#define SPAN_USERDANGER(str) ("" + str + "") -#define SPAN_WARNING(str) ("" + str + "") -#define SPAN_YELL(str) ("" + str + "") -#define SPAN_YELLOWTEAMRADIO(str) ("" + str + "") +/** + * Standard Spans + * Sorted alphabetically + */ +#define SPAN_ABDUCTOR(str) ("[str]") +#define SPAN_ADMIN(str) ("[str]") +#define SPAN_ADMINHELP(str) ("[str]") +#define SPAN_ADMINNOTICE(str) ("[str]") +#define SPAN_ADMINOBSERVEROOC(str) ("[str]") +#define SPAN_ADMINOOC(str) ("[str]") +#define SPAN_ADMINSAY(str) ("[str]") +#define SPAN_AIPRIVRADIO(str) ("[str]") +#define SPAN_ALERT(str) ("[str]") +#define SPAN_ALERTALIEN(str) ("[str]") +#define SPAN_ALERTSYNDIE(str) ("[str]") +#define SPAN_ALERTWARNING(str) ("[str]") +#define SPAN_ALIEN(str) ("[str]") +#define SPAN_ANNOUNCE(str) ("[str]") +#define SPAN_BIG(str) ("[str]") +#define SPAN_BIGICON(str) ("[str]") +#define SPAN_BINARYSAY(str) ("[str]") +#define SPAN_BLUE(str) ("[str]") +#define SPAN_BLUETEAMRADIO(str) ("[str]") +#define SPAN_BOLD(str) ("[str]") +#define SPAN_BOLDANNOUNCE(str) ("[str]") +#define SPAN_BOLDDANGER(str) ("[str]") +#define SPAN_BOLDNICEGREEN(str) ("[str]") +#define SPAN_BOLDNOTICE(str) ("[str]") +#define SPAN_BOLDWARNING(str) ("[str]") +#define SPAN_CAUTION(str) ("[str]") +#define SPAN_CENTCOMRADIO(str) ("[str]") +#define SPAN_CHANGELING(str) ("[str]") +#define SPAN_CLOWN(str) ("[str]") +#define SPAN_COLOSSUS(str) ("[str]") +#define SPAN_COMMAND_HEADSET(str) ("[str]") +#define SPAN_COMRADIO(str) ("[str]") +#define SPAN_CRITICAL(str) ("[str]") +#define SPAN_CULT(str) ("[str]") +#define SPAN_CULTBOLD(str) ("[str]") +#define SPAN_CULTBOLDTALIC(str) ("[str]") +#define SPAN_CULTITALIC(str) ("[str]") +#define SPAN_CULTLARGE(str) ("[str]") +#define SPAN_DANGER(str) ("[str]") +#define SPAN_DEADSAY(str) ("[str]") +#define SPAN_DEBUG(str) ("[str]") +#define SPAN_DEBUGERROR(str) ("[str]") +#define SPAN_DEBUGINFO(str) ("[str]") +#define SPAN_DEBUGTRACE(str) ("[str]") +#define SPAN_DEBUGWARNING(str) ("[str]") +#define SPAN_DECONVERSION_MESSAGE(str) ("[str]") +#define SPAN_DRONE(str) ("[str]") +#define SPAN_ENGRADIO(str) ("[str]") +#define SPAN_EXTREMELYBIG(str) ("[str]") +#define SPAN_GANGRADIO(str) ("[str]") +#define SPAN_GHOSTALERT(str) ("[str]") +#define SPAN_GREEN(str) ("[str]") +#define SPAN_GREENANNOUNCE(str) ("[str]") +#define SPAN_GREENTEAMRADIO(str) ("[str]") +#define SPAN_GREENTEXT(str) ("[str]") +#define SPAN_GREY(str) ("[str]") +#define SPAN_HEAR(str) ("[str]") +#define SPAN_HELPFUL(X) "[X]" +#define SPAN_HIDDEN(str) ("") +#define SPAN_HIEROPHANT_WARNING(str) ("[str]") +#define SPAN_HIEROPHANT(str) ("[str]") +#define SPAN_HIGHLIGHT(str) ("[str]") +#define SPAN_HIS_GRACE(str) ("[str]") +#define SPAN_HOLOPARASITE(str) ("[str]") +#define SPAN_HYPNOPHRASE(str) ("[str]") +#define SPAN_ICON(str) ("[str]") +#define SPAN_INFO(str) ("[str]") +#define SPAN_INFOPLAIN(str) ("[str]") +#define SPAN_INTERFACE(str) ("[str]") +#define SPAN_LINKIFY(str) ("[str]") +#define SPAN_LOOC(str) ("[str]") +#define SPAN_MEDAL(str) ("[str]") +#define SPAN_MEDRADIO(str) ("[str]") +#define SPAN_MEMO(str) ("[str]") +#define SPAN_MEMOEDIT(str) ("[str]") +#define SPAN_MIND_CONTROL(str) ("[str]") +#define SPAN_MINORANNOUNCE(str) ("[str]") +#define SPAN_MONKEY(str) ("[str]") +#define SPAN_MONKEYHIVE(str) ("[str]") +#define SPAN_MONKEYLEAD(str) ("[str]") +#define SPAN_NAME(str) ("[str]") +#define SPAN_NARSIE(str) ("[str]") +#define SPAN_NARSIESMALL(str) ("[str]") +#define SPAN_NICEGREEN(str) ("[str]") +#define SPAN_NOTICE(str) ("[str]") +#define SPAN_NOTICEALIEN(str) ("[str]") +#define SPAN_OOC(str) ("[str]") +#define SPAN_PAPYRUS(str) ("[str]") +#define SPAN_PHOBIA(str) ("[str]") +#define SPAN_PREFIX(str) ("[str]") +#define SPAN_PURPLE(str) ("[str]") +#define SPAN_RADIO(str) ("[str]") +#define SPAN_REALLYBIG(str) ("[str]") +#define SPAN_RED(str) ("[str]") +#define SPAN_REDTEAMRADIO(str) ("[str]") +#define SPAN_REDTEXT(str) ("[str]") +#define SPAN_RESONATE(str) ("[str]") +#define SPAN_REVENBIGNOTICE(str) ("[str]") +#define SPAN_REVENBOLDNOTICE(str) ("[str]") +#define SPAN_REVENDANGER(str) ("[str]") +#define SPAN_REVENMINOR(str) ("[str]") +#define SPAN_REVENNOTICE(str) ("[str]") +#define SPAN_REVENWARNING(str) ("[str]") +#define SPAN_ROBOT(str) ("[str]") +#define SPAN_ROSE(str) ("[str]") +#define SPAN_SANS(str) ("[str]") +#define SPAN_SCIRADIO(str) ("[str]") +#define SPAN_SECRADIO(str) ("[str]") +#define SPAN_SERVRADIO(str) ("[str]") +#define SPAN_SINGING(str) ("[str]") +#define SPAN_SLIME(str) ("[str]") +#define SPAN_SMALL(str) ("[str]") +#define SPAN_SMALLNOTICE(str) ("[str]") +#define SPAN_SMALLNOTICEITAL(str) ("[str]") +#define SPAN_SOGHUN(str) ("[str]") +#define SPAN_SPIDER(str) ("[str]") +#define SPAN_SUICIDE(str) ("[str]") +#define SPAN_SUPPRADIO(str) ("[str]") +#define SPAN_SYNDRADIO(str) ("[str]") +#define SPAN_TAPE_RECORDER(str) ("[str]") +#define SPAN_TINYNOTICE(str) ("[str]") +#define SPAN_TINYNOTICEITAL(str) ("[str]") +#define SPAN_UNCONSCIOUS(str) ("[str]") +#define SPAN_USERDANGER(str) ("[str]") +#define SPAN_WARNING(str) ("[str]") +#define SPAN_YELL(str) ("[str]") +#define SPAN_YELLOWTEAMRADIO(str) ("[str]") -// Spans that use embedded tgui components: -// Sorted alphabetically -#define SPAN_TOOLTIP(tip, main_text) ("" + main_text + "") +/** + * Spans that use embedded tgui components: + * Sorted alphabetically + */ +#define SPAN_TOOLTIP(tip, str) ("[str]") + +/** + * Special Macros + * These aren't really spans but we'll call them such just to make shit easier + */ +#define SPAN_BLOCKQUOTE(str, span_type) ("
[str]
") diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index d403300c456..5d33b64d041 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -399,7 +399,11 @@ GLOBAL_LIST_INIT(testing_global_profiler, list("_PROFILE_NAME" = "Global")) for(var/client/C in GLOB.admins) if(C.is_preference_enabled(/datum/client_preference/debug/show_debug_logs)) - to_chat(C, "DEBUG: [text]") + to_chat(C, + type = MESSAGE_TYPE_DEBUG, + html = "DEBUG: [text]", + confidential = TRUE, + ) /proc/log_ghostsay(text, mob/speaker) if (config_legacy.log_say) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index af65a3d1da4..9dcf5a2d49d 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -1,8 +1,5 @@ //? BEHOLD THE LIST OF GLOBAL LISTS ?// -/// List of all clients whom are admins -var/list/admins = list() - //Since it didn't really belong in any other category, I'm putting this here //This is for procs to replace all the goddamn 'in world's that are chilling around the code diff --git a/code/__HELPERS/turfs.dm b/code/__HELPERS/turfs.dm index 9df35b0534d..9b870c8c4cf 100644 --- a/code/__HELPERS/turfs.dm +++ b/code/__HELPERS/turfs.dm @@ -76,7 +76,7 @@ var/turf/target = locate(dst_origin.x + x_pos, dst_origin.y + y_pos, dst_origin.z + z_pos) if(!target) - log_debug("Null turf in translation @ ([dst_origin.x + x_pos], [dst_origin.y + y_pos], [dst_origin.z + z_pos])") + log_debug(SPAN_DEBUGERROR("Null turf in translation @ ([dst_origin.x + x_pos], [dst_origin.y + y_pos], [dst_origin.z + z_pos] [ADMIN_JMP(dst_origin)])")) // If target is null, preserve that information in the turf map. turf_map[source] = target @@ -103,7 +103,7 @@ // You can stay, though. if (istype(Origin, /turf/space)) - log_debug("Tried to translate a space turf: src=[log_info_line(Origin)] dst=[log_info_line(Destination)]") + log_debug(SPAN_DEBUGERROR("Tried to translate a space turf: src=[log_info_line(Origin)][ADMIN_JMP(Origin)] dst=[log_info_line(Destination)][ADMIN_JMP(Destination)]")) return FALSE // TODO - Is this really okay to do nothing? var/turf/X // New Destination Turf diff --git a/code/_macros.dm b/code/_macros.dm index 507e032b99c..e9574fa6831 100644 --- a/code/_macros.dm +++ b/code/_macros.dm @@ -24,4 +24,3 @@ #define ARGS_DEBUG log_debug("[__FILE__] - [__LINE__]") ; for(var/arg in args) { log_debug("\t[log_info_line(arg)]") } #define JOINTEXT(X) jointext(X, null) -//thank you Kevin for not running checks again, now I have to update one file with a comment - Papalus diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 291b1b0ce55..2609242e860 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -47,14 +47,17 @@ SUBSYSTEM_DEF(air) S.update_air_properties() CHECK_TICK - var/to_send = "
" + // var/to_send = "
" + var/to_send = "" to_send += SPAN_DEBUG("Geometry initialized in [round(0.1*(REALTIMEOFDAY-timeofday),0.1)] seconds.
") to_send += SPAN_DEBUGINFO("Total Simulated Turfs: [simulated_turf_count]") to_send += SPAN_DEBUGINFO("\nTotal Zones: [zones.len]") to_send += SPAN_DEBUGINFO("\nTotal Edges: [edges.len]") to_send += SPAN_DEBUGINFO("\nTotal Active Edges: [active_edges.len ? SPAN_DANGER("[active_edges.len]") : "None"]") to_send += SPAN_DEBUGINFO("\nTotal Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_count]") - to_send += SPAN_DEBUGINFO("
") + // to_send += SPAN_DEBUGINFO("
") + + to_send = SPAN_BLOCKQUOTE(JOINTEXT(to_send), "info") admin_notice(to_send, R_DEBUG) diff --git a/code/controllers/subsystem/events.dm b/code/controllers/subsystem/events.dm index 2ab0446ba4a..be10dfb040c 100644 --- a/code/controllers/subsystem/events.dm +++ b/code/controllers/subsystem/events.dm @@ -67,7 +67,7 @@ SUBSYSTEM_DEF(events) active_events -= E if(!E.event_meta || !E.severity) // datum/event is used here and there for random reasons, maintaining "backwards compatibility" - log_debug("Event of '[E.type]' with missing meta-data has completed.") + log_debug(SPAN_DEBUG("Event of '[E.type]' with missing meta-data has completed.")) return finished_events += E @@ -78,7 +78,7 @@ SUBSYSTEM_DEF(events) if(EM.add_to_queue) EC.available_events += EM - log_debug("Event '[EM.name]' has completed at [worldtime2stationtime(world.time)].") + log_debug(SPAN_DEBUG("Event '[EM.name]' has completed at [worldtime2stationtime(world.time)].")) /datum/controller/subsystem/events/proc/delay_events(var/severity, var/delay) var/datum/event_container/EC = event_containers[severity] diff --git a/code/controllers/subsystem/game_master.dm b/code/controllers/subsystem/game_master.dm index 4e7d0375e1a..49f9cfd756d 100644 --- a/code/controllers/subsystem/game_master.dm +++ b/code/controllers/subsystem/game_master.dm @@ -45,13 +45,13 @@ SUBSYSTEM_DEF(gamemaster) adjust_staleness(global_afk) // Staleness increases faster if more people are less active. if(world.time < next_action && prob(staleness * 2) ) - log_debug("Game Master going to start something.") + log_debug(SPAN_DEBUG("Game Master going to start something.")) start_action() // This is run before committing to an action/event. /datum/controller/subsystem/gamemaster/proc/pre_action_checks() if(!SSticker || SSticker.current_state != GAME_STATE_PLAYING) - log_debug("Game Master unable to start event: SSticker is nonexistant, or the game is not ongoing.") + log_debug(SPAN_DEBUG("Game Master unable to start event: SSticker is nonexistant, or the game is not ongoing.")) return FALSE if(suspended) return FALSE @@ -63,17 +63,17 @@ SUBSYSTEM_DEF(gamemaster) var/hours = round(mills / 36000) if(hours < 1 && mins <= 20) // Don't do anything for the first twenty minutes of the round. - log_debug("Game Master unable to start event: It is too early.") + log_debug(SPAN_DEBUG("Game Master unable to start event: It is too early.")) return FALSE if(hours >= 2 && mins >= 40) // Don't do anything in the last twenty minutes of the round, as well. - log_debug("Game Master unable to start event: It is too late.") + log_debug(SPAN_DEBUG("Game Master unable to start event: It is too late.")) return FALSE return TRUE /datum/controller/subsystem/gamemaster/proc/start_action() if(!pre_action_checks()) // Make sure we're not doing last minute events, or early events. return - log_debug("Game Master now starting action decision.") + log_debug(SPAN_DEBUG("Game Master now starting action decision.")) var/list/most_active_departments = metric.assess_all_departments(3, list(last_department_used)) var/list/best_actions = decide_best_action(most_active_departments) @@ -86,7 +86,7 @@ SUBSYSTEM_DEF(gamemaster) var/datum/gm_action/choice = pickweight(weighted_actions) if(choice) - log_debug("[choice.name] was chosen by the Game Master, and is now being ran.") + log_debug(SPAN_DEBUG("[choice.name] was chosen by the Game Master, and is now being ran.")) INVOKE_ASYNC(src, .proc/run_action, choice) /datum/controller/subsystem/gamemaster/proc/run_action(var/datum/gm_action/action) @@ -104,7 +104,7 @@ SUBSYSTEM_DEF(gamemaster) /datum/controller/subsystem/gamemaster/proc/decide_best_action(var/list/most_active_departments) if(!most_active_departments.len) // Server's empty? - log_debug("Game Master failed to find any active departments.") + log_debug(SPAN_DEBUG("Game Master failed to find any active departments.")) return list() var/list/best_actions = list() // List of actions which involve the most active departments. @@ -115,7 +115,7 @@ SUBSYSTEM_DEF(gamemaster) // Try to incorporate an action with the top two departments first. if((most_active_departments[1] in action.departments) && (most_active_departments[2] in action.departments)) best_actions.Add(action) - log_debug("[action.name] is being considered because both most active departments are involved.") + log_debug(SPAN_DEBUG("[action.name] is being considered because both most active departments are involved.")) if(best_actions.len) // We found something for those two, let's do it. return best_actions @@ -126,7 +126,7 @@ SUBSYSTEM_DEF(gamemaster) continue if(most_active_departments[1] in action.departments) best_actions.Add(action) - log_debug("[action.name] is being considered because the most active department is involved.") + log_debug(SPAN_DEBUG("[action.name] is being considered because the most active department is involved.")) if(best_actions.len) // Found something for the one guy. return best_actions @@ -137,7 +137,7 @@ SUBSYSTEM_DEF(gamemaster) continue if(DEPARTMENT_EVERYONE in action.departments) best_actions.Add(action) - log_debug("[action.name] is being considered because it involves everyone.") + log_debug(SPAN_DEBUG("[action.name] is being considered because it involves everyone.")) if(best_actions.len) // Finally, perhaps? return best_actions @@ -147,9 +147,9 @@ SUBSYSTEM_DEF(gamemaster) if(!action.enabled) continue best_actions.Add(action) - log_debug("[action.name] is being considered because everything else failed.") + log_debug(SPAN_DEBUG("[action.name] is being considered because everything else failed.")) if(best_actions.len) // Finally, perhaps? return best_actions else - log_debug("Game Master failed to find a suitable event, something very wrong is going on.") + log_debug(SPAN_DEBUG("Game Master failed to find a suitable event, something very wrong is going on.")) diff --git a/code/controllers/subsystem/job/_job.dm b/code/controllers/subsystem/job/_job.dm index ad14c0e54a4..3f62678d064 100644 --- a/code/controllers/subsystem/job/_job.dm +++ b/code/controllers/subsystem/job/_job.dm @@ -193,4 +193,4 @@ SUBSYSTEM_DEF(job) /datum/controller/subsystem/job/proc/job_debug_message(message) if(debug_messages) - log_debug("JOB DEBUG: [message]") + log_debug(SPAN_DEBUG("JOB DEBUG: [message]")) diff --git a/code/controllers/subsystem/shuttles.dm b/code/controllers/subsystem/shuttles.dm index 100be71216a..d209e372e08 100644 --- a/code/controllers/subsystem/shuttles.dm +++ b/code/controllers/subsystem/shuttles.dm @@ -54,7 +54,7 @@ SUBSYSTEM_DEF(shuttle) var/datum/shuttle/S = working_shuttles[working_shuttles.len] working_shuttles.len-- if(!istype(S) || QDELETED(S)) - log_debug("Bad entry in SSshuttle.process_shuttles - [log_info_line(S)] ") + log_debug(SPAN_DEBUG("Bad entry in SSshuttle.process_shuttles - [log_info_line(S)] ")) process_shuttles -= S continue // NOTE - In old system, /datum/shuttle/ferry was processed only if (F.process_state || F.always_process) @@ -153,7 +153,7 @@ SUBSYSTEM_DEF(shuttle) if(initial(shuttle.category) != shuttle_type) // Skip if its an "abstract class" datum shuttle = new shuttle() shuttle_areas |= shuttle.shuttle_area - log_debug("Initialized shuttle [shuttle] ([shuttle.type])") + log_debug(SPAN_DEBUG("Initialized shuttle [shuttle] ([shuttle.type])")) return shuttle // Historical note: No need to call shuttle.init_docking_controllers(), controllers register themselves // and shuttles fetch refs in New(). Shuttles also dock() themselves in new if they want. @@ -167,7 +167,7 @@ SUBSYSTEM_DEF(shuttle) S.motherdock = S.current_location.landmark_tag mothership.shuttle_area |= S.shuttle_area else - log_debug("Shuttle [S] was unable to find mothership [mothership]!") + log_debug(SPAN_DEBUG("Shuttle [S] was unable to find mothership [mothership]!")) // Let shuttles scan their owned areas for objects they want to configure (Called after mothership hookup) /datum/controller/subsystem/shuttle/proc/hook_up_shuttle_objects(shuttles_list) diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index dd5f3811d30..5d64647a647 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -45,7 +45,7 @@ SUBSYSTEM_DEF(vote) break if(!players_are_in_round) - log_debug("The crew transfer shuttle was automatically called at vote time due to no players being present.") + log_debug(SPAN_DEBUG("The crew transfer shuttle was automatically called at vote time due to no players being present.")) init_shift_change(null, 1) return diff --git a/code/datums/observation/~cleanup.dm b/code/datums/observation/~cleanup.dm index 3ffe4de89cb..ca33901988d 100644 --- a/code/datums/observation/~cleanup.dm +++ b/code/datums/observation/~cleanup.dm @@ -43,7 +43,7 @@ GLOBAL_LIST_EMPTY(event_listen_count) for(var/entry in GLOB.all_observable_events.events) var/decl/observ/event = entry if(event.unregister_global(listener)) - log_debug("[event] - [listener] was deleted while still registered to global events.") + log_debug(SPAN_DEBUG("[event] - [listener] was deleted while still registered to global events.")) if(!(--listen_count)) return @@ -55,7 +55,7 @@ GLOBAL_LIST_EMPTY(event_listen_count) if(proc_owners) for(var/proc_owner in proc_owners) if(event.unregister(event_source, proc_owner)) - log_debug("[event] - [event_source] was deleted while still being listened to by [proc_owner].") + log_debug(SPAN_DEBUG("[event] - [event_source] was deleted while still being listened to by [proc_owner].")) if(!(--source_listener_count)) return @@ -65,6 +65,6 @@ GLOBAL_LIST_EMPTY(event_listen_count) var/decl/observ/event = entry for(var/event_source in event.event_sources) if(event.unregister(event_source, listener)) - log_debug("[event] - [listener] was deleted while still listening to [event_source].") + log_debug(SPAN_DEBUG("[event] - [listener] was deleted while still listening to [event_source].")) if(!(--listener_count)) return diff --git a/code/game/antagonist/antagonist.dm b/code/game/antagonist/antagonist.dm index 4f353751afd..b42c9a82e72 100644 --- a/code/game/antagonist/antagonist.dm +++ b/code/game/antagonist/antagonist.dm @@ -110,22 +110,22 @@ for(var/datum/mind/player in candidates) if(ghosts_only && !istype(player.current, /mob/observer/dead)) candidates -= player - log_debug("[key_name(player)] is not eligible to become a [role_text]: Only ghosts may join as this role! They have been removed from the draft.") + log_debug(SPAN_DEBUG("[key_name(player)] is not eligible to become a [role_text]: Only ghosts may join as this role! They have been removed from the draft.")) else if(config_legacy.use_age_restriction_for_antags && player.current.client.player_age < minimum_player_age) candidates -= player - log_debug("[key_name(player)] is not eligible to become a [role_text]: Is only [player.current.client.player_age] day\s old, has to be [minimum_player_age] day\s!") + log_debug(SPAN_DEBUG("[key_name(player)] is not eligible to become a [role_text]: Is only [player.current.client.player_age] day\s old, has to be [minimum_player_age] day\s!")) else if(player.special_role) candidates -= player - log_debug("[key_name(player)] is not eligible to become a [role_text]: They already have a special role ([player.special_role])! They have been removed from the draft.") + log_debug(SPAN_DEBUG("[key_name(player)] is not eligible to become a [role_text]: They already have a special role ([player.special_role])! They have been removed from the draft.")) else if (player in pending_antagonists) candidates -= player - log_debug("[key_name(player)] is not eligible to become a [role_text]: They have already been selected for this role! They have been removed from the draft.") + log_debug(SPAN_DEBUG("[key_name(player)] is not eligible to become a [role_text]: They have already been selected for this role! They have been removed from the draft.")) else if(!can_become_antag(player)) candidates -= player - log_debug("[key_name(player)] is not eligible to become a [role_text]: They are blacklisted for this role! They have been removed from the draft.") + log_debug(SPAN_DEBUG("[key_name(player)] is not eligible to become a [role_text]: They are blacklisted for this role! They have been removed from the draft.")) else if(player_is_antag(player)) candidates -= player - log_debug("[key_name(player)] is not eligible to become a [role_text]: They are already an antagonist! They have been removed from the draft.") + log_debug(SPAN_DEBUG("[key_name(player)] is not eligible to become a [role_text]: They are already an antagonist! They have been removed from the draft.")) return candidates @@ -179,17 +179,17 @@ /datum/antagonist/proc/draft_antagonist(var/datum/mind/player) //Check if the player can join in this antag role, or if the player has already been given an antag role. if(!can_become_antag(player) || (player.assigned_role in roundstart_restricted)) - log_debug("[player.key] was selected for [role_text] by lottery, but is not allowed to be that role.") + log_debug(SPAN_DEBUG("[player.key] was selected for [role_text] by lottery, but is not allowed to be that role.")) return 0 if(player.special_role) - log_debug("[player.key] was selected for [role_text] by lottery, but they already have a special role.") + log_debug(SPAN_DEBUG("[player.key] was selected for [role_text] by lottery, but they already have a special role.")) return 0 if(!(flags & ANTAG_OVERRIDE_JOB) && (!player.current || istype(player.current, /mob/new_player))) - log_debug("[player.key] was selected for [role_text] by lottery, but they have not joined the game.") + log_debug(SPAN_DEBUG("[player.key] was selected for [role_text] by lottery, but they have not joined the game.")) return 0 pending_antagonists |= player - log_debug("[player.key] has been selected for [role_text] by lottery.") + log_debug(SPAN_DEBUG("[player.key] has been selected for [role_text] by lottery.")) //Ensure that antags with ANTAG_OVERRIDE_JOB do not occupy job slots. if(flags & ANTAG_OVERRIDE_JOB) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 1da5db3ab33..43c2f10141a 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -390,7 +390,7 @@ var/global/list/additional_antag_types = list() if(istype(player, /mob/observer/dead) && !ghosts_only) continue if(!role || (player.client.prefs.be_special & role)) - log_debug("[player.key] had [antag_id] enabled, so we are drafting them.") + log_debug(SPAN_DEBUG("[player.key] had [antag_id] enabled, so we are drafting them.")) candidates |= player.mind else // Assemble a list of active players without jobbans. @@ -401,7 +401,7 @@ var/global/list/additional_antag_types = list() // Get a list of all the people who want to be the antagonist for this round for(var/mob/new_player/player in players) if(!role || (player.client.prefs.be_special & role)) - log_debug("[player.key] had [antag_id] enabled, so we are drafting them.") + log_debug(SPAN_DEBUG("[player.key] had [antag_id] enabled, so we are drafting them.")) candidates += player.mind players -= player @@ -411,7 +411,7 @@ var/global/list/additional_antag_types = list() if(candidates.len < required_enemies) for(var/mob/new_player/player in players) if(player.ckey in round_voters) - log_debug("[player.key] voted for this round, so we are drafting them.") + log_debug(SPAN_DEBUG("[player.key] voted for this round, so we are drafting them.")) candidates += player.mind players -= player break diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index bd6f9a32074..f1951021ca8 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -19,7 +19,7 @@ /////////////////////////////// /proc/spawn_meteors(var/number = 10, var/list/meteortypes, var/startSide, var/zlevel) - log_debug("Spawning [number] meteors on the [dir2text(startSide)] of [zlevel]") + log_debug(SPAN_DEBUG("Spawning [number] meteors on the [dir2text(startSide)] of [zlevel]")) for(var/i = 0; i < number; i++) spawn_meteor(meteortypes, startSide, zlevel) diff --git a/code/game/machinery/atm_ret_field.dm b/code/game/machinery/atm_ret_field.dm index 433d771043c..27f890b3bdf 100644 --- a/code/game/machinery/atm_ret_field.dm +++ b/code/game/machinery/atm_ret_field.dm @@ -157,7 +157,7 @@ //Delete ourselves if we find extra mapped in arfgs for(var/obj/machinery/atmospheric_field_generator/F in loc) if(F != src) - log_debug("Duplicate ARFGS at [x],[y],[z]") + log_debug(SPAN_DEBUG("Duplicate ARFGS at [x],[y],[z]")) return INITIALIZE_HINT_QDEL var/area/A = get_area(src) diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 66b53d5da7f..a986f8e0a10 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -190,7 +190,7 @@ var/input = sanitize(input("Please choose a message to transmit to [GLOB.using_map.boss_short] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", "")) if(!input || !(usr in view(1,src))) return - CentCom_announce(input, usr) + message_centcom(input, usr) to_chat(usr, "Message transmitted.") log_game("[key_name(usr)] has made an IA [GLOB.using_map.boss_short] announcement: [input]") centcomm_message_cooldown = 1 @@ -207,7 +207,7 @@ var/input = sanitize(input(usr, "Please choose a message to transmit to \[ABNORMAL ROUTING CORDINATES\] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", "")) if(!input || !(usr in view(1,src))) return - Syndicate_announce(input, usr) + message_syndicate(input, usr) to_chat(usr, "Message transmitted.") log_game("[key_name(usr)] has made an illegal announcement: [input]") centcomm_message_cooldown = 1 @@ -559,3 +559,11 @@ status_signal.data["picture_state"] = data1 frequency.post_signal(src, status_signal) + +//TODO: Convert to proper cooldowns. A bool for cooldowns is insanely dumb. +/// Override the cooldown for special actions +/// Used in places such as CentCom messaging back so that the crew can answer right away +/obj/machinery/computer/communications/proc/override_cooldown() + // COOLDOWN_RESET(src, important_action_cooldown) + centcomm_message_cooldown = 0 + message_cooldown = 0 diff --git a/code/game/machinery/computer/guestpass.dm b/code/game/machinery/computer/guestpass.dm index 80713ba0309..629dab4c24a 100755 --- a/code/game/machinery/computer/guestpass.dm +++ b/code/game/machinery/computer/guestpass.dm @@ -190,7 +190,7 @@ accesses.Add(A) else to_chat(usr, "Invalid selection, please consult technical support if there are any issues.") - log_debug("[key_name_admin(usr)] tried selecting an invalid guest pass terminal option.") + log_debug(SPAN_DEBUG("[key_name_admin(usr)] tried selecting an invalid guest pass terminal option.")) if (href_list["action"]) switch(href_list["action"]) if ("id") diff --git a/code/game/machinery/embedded_controller/docking_program.dm b/code/game/machinery/embedded_controller/docking_program.dm index 05eee5c5e2d..66ee04edc9e 100644 --- a/code/game/machinery/embedded_controller/docking_program.dm +++ b/code/game/machinery/embedded_controller/docking_program.dm @@ -117,7 +117,7 @@ if(docking_codes) var/code = signal.data["code"] if(code != docking_codes) - log_debug("Controller [id_tag] got request_dock but code:[code] != docking_codes:[docking_codes]") + log_debug(SPAN_DEBUG("Controller [id_tag] got request_dock but code:[code] != docking_codes:[docking_codes]")) return control_mode = MODE_SERVER diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index e4b3a05e7dd..905a3a72997 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -677,7 +677,7 @@ //Generic telecomm connectivity test proc /proc/can_telecomm(var/atom/A, var/atom/B, var/ad_hoc = FALSE) if(!A || !B) - log_debug("can_telecomm(): Undefined endpoints!") + log_debug(SPAN_DEBUG("can_telecomm(): Undefined endpoints!")) return FALSE //Can't in this case, obviously! diff --git a/code/game/objects/effects/map_effects/beam_point.dm b/code/game/objects/effects/map_effects/beam_point.dm index 18fc7642276..aa69b3a7fe7 100644 --- a/code/game/objects/effects/map_effects/beam_point.dm +++ b/code/game/objects/effects/map_effects/beam_point.dm @@ -91,7 +91,7 @@ GLOBAL_LIST_EMPTY(all_beam_points) /obj/effect/map_effect/beam_point/proc/build_beam(var/atom/beam_target) if(!beam_target) - log_debug("[src] ([src.type] \[[x],[y],[z]\]) failed to build its beam due to not having a target.") + log_debug(SPAN_DEBUG("[src] ([src.type] \[[x],[y],[z]\])[ADMIN_JMP(src)] failed to build its beam due to not having a target.")) return FALSE var/datum/beam/new_beam = Beam(beam_target, beam_icon_state, beam_icon, beam_time, beam_max_distance, beam_type, beam_sleep_time) @@ -103,11 +103,11 @@ GLOBAL_LIST_EMPTY(all_beam_points) /obj/effect/map_effect/beam_point/proc/destroy_beam(var/datum/beam/B) if(!B) - log_debug("[src] ([src.type] \[[x],[y],[z]\]) was asked to destroy a beam that does not exist.") + log_debug(SPAN_DEBUG("[src] ([src.type] \[[x],[y],[z]\])[ADMIN_JMP(src)] was asked to destroy a beam that does not exist.")) return FALSE if(!(B in my_beams)) - log_debug("[src] ([src.type] \[[x],[y],[z]\]) was asked to destroy a beam it did not own.") + log_debug(SPAN_DEBUG("[src] ([src.type] \[[x],[y],[z]\])[ADMIN_JMP(src)] was asked to destroy a beam it did not own.")) return FALSE my_beams -= B diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 84eff921795..efa4a592af2 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -457,7 +457,7 @@ GLOBAL_LIST_EMPTY(PDAs) ) else icon = 'icons/obj/pda_old.dmi' - log_debug("Invalid switch for PDA, defaulting to old PDA icons. [pdachoice] chosen.") + log_debug(SPAN_DEBUG("Invalid switch for PDA, defaulting to old PDA icons. [pdachoice] chosen.")) /obj/item/pda/proc/can_use() diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 11cfc6a52fa..38d258a9211 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -454,7 +454,7 @@ var/list/global/tank_gauge_cache = list() else if(pressure > TANK_RUPTURE_PRESSURE) #ifdef FIREDBG - log_debug("[x],[y] tank is rupturing: [pressure] kPa, integrity [integrity]") + log_debug(SPAN_DEBUGWARNING("[x],[y] tank is rupturing: [pressure] kPa, integrity [integrity]")) #endif air_contents.react() @@ -514,7 +514,7 @@ var/list/global/tank_gauge_cache = list() playsound(src.loc, 'sound/effects/spray.ogg', 10, 1, -3) leaking = 1 #ifdef FIREDBG - log_debug("[x],[y] tank is leaking: [pressure] kPa, integrity [integrity]") + log_debug(SPAN_DEBUG("[x],[y] tank is leaking: [pressure] kPa, integrity [integrity]")) #endif else integrity-= 1 diff --git a/code/game/verbs/ignore.dm b/code/game/verbs/ignore.dm index b1187db9bd9..be565f390ec 100644 --- a/code/game/verbs/ignore.dm +++ b/code/game/verbs/ignore.dm @@ -42,7 +42,7 @@ /client/proc/is_key_ignored(var/key_to_check) key_to_check = ckey(key_to_check) if(key_to_check in prefs.ignored_players) - if(GLOB.directory[key_to_check] in admins) // This is here so this is only evaluated if someone is actually being blocked. + if(GLOB.directory[key_to_check] in GLOB.admins) // This is here so this is only evaluated if someone is actually being blocked. return 0 return 1 return 0 diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index c94e5e36456..302a0e52ca2 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1309,9 +1309,9 @@ output_ai_laws() else if(href_list["adminmoreinfo"]) - var/mob/M = locate(href_list["adminmoreinfo"]) + var/mob/M = locate(href_list["adminmoreinfo"]) in GLOB.mob_list if(!ismob(M)) - to_chat(usr, "This can only be used on instances of type /mob") + to_chat(usr, "This can only be used on instances of type /mob.", confidential = TRUE) return var/location_description = "" @@ -1338,9 +1338,13 @@ var/mob/living/L = M var/status switch (M.stat) - if (0) status = "Alive" - if (1) status = "Unconscious" - if (2) status = "Dead" + if(CONSCIOUS) + status = "Alive" + if(UNCONSCIOUS) + status = "Unconscious" + if(DEAD) + status = "Dead" + health_description = "Status = [status]" health_description += "
Oxy: [L.getOxyLoss()] - Tox: [L.getToxLoss()] - Fire: [L.getFireLoss()] - Brute: [L.getBruteLoss()] - Clone: [L.getCloneLoss()] - Brain: [L.getBrainLoss()]" else @@ -1348,15 +1352,17 @@ //Gener switch(M.gender) - if(MALE,FEMALE) gender_description = "[M.gender]" - else gender_description = "[M.gender]" + if(MALE, FEMALE, PLURAL) + gender_description = "[M.gender]" + else + gender_description = "[M.gender]" - to_chat(src.owner, "Info about [M.name]: ") - to_chat(src.owner, "Mob type = [M.type]; Gender = [gender_description] Damage = [health_description]") - to_chat(src.owner, "Name = [M.name]; Real_name = [M.real_name]; Mind_name = [M.mind?"[M.mind.name]":""]; Key = [M.key];") - to_chat(src.owner, "Location = [location_description];") - to_chat(src.owner, "[special_role_description]") - to_chat(src.owner, "(PM) (PP) (VV) (SM) ([admin_jump_link(M, src)]) (CA)") + to_chat(src.owner, "Info about [M.name]: ", confidential = TRUE) + to_chat(src.owner, "Mob type = [M.type]; Gender = [gender_description] Damage = [health_description]", confidential = TRUE) + to_chat(src.owner, "Name = [M.name]; Real_name = [M.real_name]; Mind_name = [M.mind?"[M.mind.name]":""]; Key = [M.key];", confidential = TRUE) + to_chat(src.owner, "Location = [location_description];", confidential = TRUE) + to_chat(src.owner, "[special_role_description]", confidential = TRUE) + to_chat(src.owner, ADMIN_FULLMONTY_NONAME(M), confidential = TRUE) else if(href_list["adminspawncookie"]) if(!check_rights(R_ADMIN|R_FUN)) return diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 84088b83f9d..2893b1dda31 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -179,7 +179,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket_list) initiator_ckey = initiator.ckey initiator_key_name = key_name(initiator, FALSE, TRUE) if(initiator.current_ticket) //This is a bug - log_debug("Multiple ahelp current_tickets") + log_debug(SPAN_DEBUG("Multiple ahelp current_tickets")) initiator.current_ticket.AddInteraction("Ticket erroneously left open by code") initiator.current_ticket.Close() initiator.current_ticket = src @@ -218,7 +218,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket_list) //private /datum/admin_help/proc/FullMonty(ref_src) if(!ref_src) - ref_src = "\ref[src]" + ref_src = "[REF(src)]" . = ADMIN_FULLMONTY_NONAME(initiator.mob) if(state == AHELP_ACTIVE) . += ClosureLinks(ref_src) @@ -226,12 +226,8 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket_list) //private /datum/admin_help/proc/ClosureLinks(ref_src) if(!ref_src) - ref_src = "\ref[src]" - . = " (REJT)" - . += " (IC)" - . += " (CLOSE)" - . += " (RSLVE)" - . += " (HANDLE)" + ref_src = "[REF(src)]" + . = ADMIN_AHELP_FULLMONTY(ref_src) //private /datum/admin_help/proc/LinkedReplyName(ref_src) @@ -249,9 +245,9 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket_list) //won't bug irc /datum/admin_help/proc/MessageNoRecipient(msg) var/ref_src = "\ref[src]" - var/chat_msg = "Ticket [TicketHref("#[id]", ref_src)]: [LinkedReplyName(ref_src)] [FullMonty(ref_src)]: [msg]" + var/chat_msg = SPAN_ADMINNOTICE("Ticket [TicketHref(SPAN_TOOLTIP("Open the ticket in a new window.","#[id]"), ref_src)]: [SPAN_TOOLTIP("Open a prompt to reply to this ticket.","[LinkedReplyName(ref_src)]")] [FullMonty(ref_src)]: [msg]") - AddInteraction("[LinkedReplyName(ref_src)]: [msg]") + AddInteraction(SPAN_DANGER("[SPAN_TOOLTIP("Open a prompt to reply to this ticket.","[LinkedReplyName(ref_src)]")]: [msg]")) //send this msg to all admins for(var/client/X in GLOB.admins) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 05151dec112..b8ae5662bca 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -609,7 +609,7 @@ if("Players") to_chat(usr, jointext(GLOB.player_list,",")) if("Admins") - to_chat(usr, jointext(admins,",")) + to_chat(usr, jointext(GLOB.admins,",")) if("Mobs") to_chat(usr, jointext(GLOB.mob_list,",")) if("Living Mobs") diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index c7b3a35730b..3107e37a777 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -1,40 +1,89 @@ +/// Used by players to ask badmins to do things for them, but ICly. /mob/verb/pray(msg as text) set category = "IC" set name = "Pray" msg = sanitize(msg) - if(!msg) return + if(!msg) + return + msg = copytext_char(sanitize(msg), 1, MAX_MESSAGE_LEN) + if(!msg) + return + // log_prayer("[src.key]/([src.name]): [msg]") if(usr.client) - if(msg) - client.handle_spam_prevention(MUTE_PRAY) - if(usr.client.prefs.muted & MUTE_PRAY) - to_chat(usr, " You cannot pray (muted).") - return + if(usr.client.prefs.muted & MUTE_PRAY) + to_chat(usr, SPAN_DANGER("You cannot pray (muted)."), confidential = TRUE) + return + if(src.client.handle_spam_prevention(msg, MUTE_PRAY)) + return - var/image/cross = image('icons/obj/storage.dmi',"bible") - msg = "[icon2html(thing = cross, target = world)] PRAY: [key_name(src, 1)] (?) (PP) (VV) (SM) ([admin_jump_link(src, src)]) (CA) (SC) (ST) (SMITE): [msg]" + var/mutable_appearance/cross = mutable_appearance('icons/obj/storage.dmi', "bible") + var/font_color = "purple" + var/prayer_type = "PRAYER" + var/deity + //TODO: Unshit this when we have some better job and trait systems. @Zandario + // if(usr.job == JOB_CHAPLAIN) + if(usr.mind.assigned_role == CHAPLAIN) + cross.icon_state = "bible" + font_color = "blue" + prayer_type = "CHAPLAIN PRAYER" + if(GLOB.deity) + deity = GLOB.deity + // else if(IS_CULTIST(usr)) + // cross.icon_state = "tome" + // font_color = "red" + // prayer_type = "CULTIST PRAYER" + // deity = "Nar'Sie" + else if(isliving(usr)) + // var/mob/living/L = usr + // if(HAS_TRAIT(L, TRAIT_SPIRITUAL)) + if(usr.mind.isholy == TRUE) + cross.icon_state = "holylight" + font_color = "blue" + prayer_type = "SPIRITUAL PRAYER" + + var/msg_tmp = msg + // GLOB.requests.pray(usr.client, msg, usr.mind.assigned_role == CHAPLAIN) + msg = SPAN_ADMINNOTICE("[icon2html(cross, GLOB.admins)][SPAN_BOLD("[prayer_type][deity ? " (to [deity])" : ""]: [ADMIN_FULLMONTY(src)] [ADMIN_SC(src)] [ADMIN_ST(src)]:")] [SPAN_LINKIFY(msg)]") for(var/client/C in GLOB.admins) if((R_ADMIN|R_MOD) & C.holder.rights) if(C.is_preference_enabled(/datum/client_preference/admin/show_chat_prayers)) to_chat(C, msg) SEND_SOUND(C, sound('sound/effects/ding.ogg')) - to_chat(usr, "Your prayers have been received by the gods.") - feedback_add_details("admin_verb","PR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - //log_admin("HELP: [key_name(src)]: [msg]") + to_chat(usr, SPAN_INFO("You pray to the gods: \"[msg_tmp]\""), confidential = TRUE) -/proc/CentCom_announce(var/msg, var/mob/Sender, var/iamessage) - msg = "[uppertext(GLOB.using_map.boss_short)]M[iamessage ? " IA" : ""]:[key_name(Sender, 1)] (PP) (VV) (SM) ([admin_jump_link(Sender, null)]) (CA) (BSA) (RPLY): [msg]" + feedback_add_details("admin_verb", "PR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + + +//TODO: Reimplement IA CentcCom message, seems to have been lost to time. +/// Used by communications consoles to message CentCom. +/proc/message_centcom(text, mob/sender, iamessage) + var/msg = copytext_char(sanitize(text), 1, MAX_MESSAGE_LEN) + // GLOB.requests.message_centcom(sender.client, msg) + msg = SPAN_ADMINNOTICE("[uppertext(GLOB.using_map.boss_short)]M[iamessage ? " IA" : ""]:[ADMIN_FULLMONTY(sender)] [ADMIN_CENTCOM_REPLY(sender)]: [msg]") + // to_chat(GLOB.admins, msg, confidential = TRUE) for(var/client/C in GLOB.admins) - if((R_ADMIN|R_MOD) & C.holder.rights) + if((R_ADMIN | R_MOD) & C.holder.rights) to_chat(C, msg) SEND_SOUND(C, sound('sound/machines/signal.ogg')) -/proc/Syndicate_announce(var/msg, var/mob/Sender) - msg = "ILLEGAL:[key_name(Sender, 1)] (PP) (VV) (SM) ([admin_jump_link(Sender, null)]) (CA) (BSA) (RPLY): [msg]" + for(var/obj/machinery/computer/communications/console in GLOB.machines) + console.override_cooldown() + + +/// Used by communications consoles to message the Syndicate +/proc/message_syndicate(text, mob/sender) + var/msg = copytext_char(sanitize(text), 1, MAX_MESSAGE_LEN) + // GLOB.requests.message_syndicate(sender.client, msg) + msg = SPAN_ADMINNOTICE("ILLEGAL:[ADMIN_FULLMONTY(sender)] [ADMIN_SYNDICATE_REPLY(sender)]: [msg]") + // to_chat(GLOB.admins, msg, confidential = TRUE) for(var/client/C in GLOB.admins) - if((R_ADMIN|R_MOD) & C.holder.rights) + if((R_ADMIN | R_MOD) & C.holder.rights) to_chat(C, msg) SEND_SOUND(C, sound('sound/machines/signal.ogg')) + + for(var/obj/machinery/computer/communications/console in GLOB.machines) + console.override_cooldown() diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index 986937ea87e..29540dd6438 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -40,7 +40,7 @@ /obj/item/assembly/prox_sensor/Proximity(datum/proxfield/field, atom/movable/AM) if(!istype(AM)) - log_debug("DEBUG: HasProximity called with [AM] on [src] ([usr]).") + log_debug(SPAN_DEBUGINFO("DEBUG: HasProximity called with [AM] on [src] ([usr]).")) return if (istype(AM, /obj/effect/beam)) return diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index 2c8b1ecc0e1..a3d47caf12c 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -7,8 +7,8 @@ if((temperature > PHORON_MINIMUM_BURN_TEMPERATURE || force_burn) && (no_check ||check_recombustability(zone? zone.fuel_objs : null))) #ifdef FIREDBG - log_debug("***************** FIREDBG *****************") - log_debug("Burning [zone? zone.name : "zoneless gas_mixture"]!") + log_debug(SPAN_DEBUGINFO("***************** FIREDBG *****************")) + log_debug(SPAN_DEBUGINFO("Burning [zone? zone.name : "zoneless gas_mixture"]!")) #endif var/gas_fuel = 0 @@ -61,13 +61,13 @@ var/used_oxidizers = used_fuel*(FIRE_REACTION_OXIDIZER_AMOUNT/FIRE_REACTION_FUEL_AMOUNT) #ifdef FIREDBG - log_debug("gas_fuel = [gas_fuel], liquid_fuel = [liquid_fuel], total_oxidizers = [total_oxidizers]") - log_debug("fuel_area = [fuel_area], total_fuel = [total_fuel], reaction_limit = [reaction_limit]") - log_debug("firelevel -> [firelevel] (gas: [gas_firelevel], liquid: [liquid_firelevel])") - log_debug("liquid_reaction_progress = [liquid_reaction_progress]") - log_debug("gas_reaction_progress = [gas_reaction_progress]") - log_debug("total_reaction_progress = [total_reaction_progress]") - log_debug("used_fuel = [used_fuel], used_oxidizers = [used_oxidizers]; ") + log_debug(SPAN_DEBUGINFO("gas_fuel = [gas_fuel], liquid_fuel = [liquid_fuel], total_oxidizers = [total_oxidizers]")) + log_debug(SPAN_DEBUGINFO("fuel_area = [fuel_area], total_fuel = [total_fuel], reaction_limit = [reaction_limit]")) + log_debug(SPAN_DEBUGINFO("firelevel -> [firelevel] (gas: [gas_firelevel], liquid: [liquid_firelevel])")) + log_debug(SPAN_DEBUGINFO("liquid_reaction_progress = [liquid_reaction_progress]")) + log_debug(SPAN_DEBUGINFO("gas_reaction_progress = [gas_reaction_progress]")) + log_debug(SPAN_DEBUGINFO("total_reaction_progress = [total_reaction_progress]")) + log_debug(SPAN_DEBUGINFO("used_fuel = [used_fuel], used_oxidizers = [used_oxidizers]; ")) #endif //if the reaction is progressing too slow then it isn't self-sustaining anymore and burns out @@ -95,8 +95,8 @@ update_values() #ifdef FIREDBG - log_debug("used_gas_fuel = [used_gas_fuel]; used_liquid_fuel = [used_liquid_fuel]; total = [used_fuel]") - log_debug("new temperature = [temperature]; new pressure = [return_pressure()]") + log_debug(SPAN_DEBUGINFO("used_gas_fuel = [used_gas_fuel]; used_liquid_fuel = [used_liquid_fuel]; total = [used_fuel]")) + log_debug(SPAN_DEBUGINFO("new temperature = [temperature]; new pressure = [return_pressure()]")) #endif return firelevel diff --git a/code/modules/cargo/supplypacks/_supplypacks.dm b/code/modules/cargo/supplypacks/_supplypacks.dm index d7b5d3e01cb..6cdee933a28 100644 --- a/code/modules/cargo/supplypacks/_supplypacks.dm +++ b/code/modules/cargo/supplypacks/_supplypacks.dm @@ -92,7 +92,7 @@ var/list/all_supply_groups = list("Atmospherics", var/list/L = access O.req_access = L.Copy() else - log_debug("Supply pack with invalid access restriction [access] encountered!") + log_debug(SPAN_DEBUGERROR("Supply pack with invalid access restriction [access] encountered!")) /** * spawn an object of a certain type diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index f9e7330cf00..5e83b651306 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -186,16 +186,14 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( var/connecting_admin = FALSE //because de-admined admins connecting should be treated like admins. //Admin Authorisation holder = admin_datums[ckey] - var/debug_tools_allowed = FALSE //CITADEL EDIT + var/debug_tools_allowed = FALSE if(holder) GLOB.admins |= src holder.owner = src connecting_admin = TRUE - //CITADEL EDIT //if(check_rights_for(src, R_DEBUG)) if(R_DEBUG & holder?.rights) //same wiht this, check_rights when? debug_tools_allowed = TRUE - //END CITADEL EDIT /* else if(GLOB.deadmins[ckey]) verbs += /client/proc/readmin diff --git a/code/modules/customitems/item_spawning.dm b/code/modules/customitems/item_spawning.dm index 2fa1d521450..2b26a723ec9 100644 --- a/code/modules/customitems/item_spawning.dm +++ b/code/modules/customitems/item_spawning.dm @@ -185,14 +185,14 @@ // Check for requisite ckey and character name. if((lowertext(citem.assoc_key) != lowertext(M.ckey)) || (lowertext(citem.character_name) != lowertext(M.real_name))) - log_debug("Custom Item: [key_name(M)] Ckey or Char name does not match.") + log_debug(SPAN_DEBUG("Custom Item: [key_name(M)] Ckey or Char name does not match.")) continue // Check for required access. var/obj/item/card/id/current_id = M.wear_id if(citem.req_access && citem.req_access > 0) if(!(istype(current_id) && (citem.req_access in current_id.access))) - log_debug("Custom Item: [key_name(M)] Does not have required access.") + log_debug(SPAN_DEBUG("Custom Item: [key_name(M)] Does not have required access.")) continue // Check for required job title. @@ -204,7 +204,7 @@ has_title = 1 break if(!has_title) - log_debug("Custom Item: [key_name(M)] Does not have required job.") + log_debug(SPAN_DEBUG("Custom Item: [key_name(M)] Does not have required job.")) continue // ID cards and PDAs are applied directly to the existing object rather than spawned fresh. diff --git a/code/modules/emoji/emoji_parse.dm b/code/modules/emoji/emoji_parse.dm index 1e839807ef5..5e47e31df08 100644 --- a/code/modules/emoji/emoji_parse.dm +++ b/code/modules/emoji/emoji_parse.dm @@ -18,11 +18,11 @@ var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/chat) var/tag = sheet.icon_tag("emoji-[emoji]") if(tag) - parsed += "[tag]" //evil way of enforcing 16x16 + parsed += SPAN_TOOLTIP(":[emoji]:", "[tag]") //evil way of enforcing 16x16 pos = search + length(text[pos]) else if(ispath(isthisapath, /atom)) //path var/atom/thisisanatom = isthisapath - parsed += "[icon2html(initial(thisisanatom.icon), world, initial(thisisanatom.icon_state))]" + parsed += SPAN_TOOLTIP(":[isthisapath]:", "[icon2html(initial(thisisanatom.icon), world, initial(thisisanatom.icon_state))]") pos = search + length(text[pos]) else parsed += copytext(text, pos, search) diff --git a/code/modules/error_handler/error_viewer.dm b/code/modules/error_handler/error_viewer.dm index f67b8943070..e7722af726d 100644 --- a/code/modules/error_handler/error_viewer.dm +++ b/code/modules/error_handler/error_viewer.dm @@ -116,7 +116,7 @@ GLOBAL_DATUM(error_cache, /datum/error_viewer/error_cache) // from the same source hasn't been shown too recently if (error_source.next_message_at <= world.time) var/const/viewtext = "\[view]" // Nesting these in other brackets went poorly - //log_debug("Runtime in [e.file], line [e.line]: [html_encode(e.name)] [error_entry.make_link(viewtext)]") + //log_debug(SPAN_DEBUGERROR("Runtime in [e.file], line [e.line]: [html_encode(e.name)] [error_entry.make_link(viewtext)]")) /* var/err_msg_delay if(config?.loaded) diff --git a/code/modules/events/atmos_leak.dm b/code/modules/events/atmos_leak.dm index 14e6c347923..59bf63b2c1d 100644 --- a/code/modules/events/atmos_leak.dm +++ b/code/modules/events/atmos_leak.dm @@ -34,7 +34,7 @@ for(var/i in 1 to 10) var/area/A = pick(grand_list_of_areas) if(is_area_occupied(A)) - log_debug("atmos_leak event: Rejected [A] because it is occupied.") + log_debug(SPAN_DEBUGWARNING("atmos_leak event: Rejected [A] because it is occupied.")) continue // A good area, great! Lets try and pick a turf var/list/turfs = list() @@ -42,14 +42,14 @@ if(turf_clear(F)) turfs += F if(turfs.len == 0) - log_debug("atmos_leak event: Rejected [A] because it has no clear turfs.") + log_debug(SPAN_DEBUGWARNING("atmos_leak event: Rejected [A] because it has no clear turfs.")) continue target_area = A target_turf = pick(turfs) // If we can't find a good target, give up if(!target_area) - log_debug("atmos_leak event: Giving up after too many failures to pick target area") + log_debug(SPAN_DEBUGWARNING("atmos_leak event: Giving up after too many failures to pick target area")) kill() return diff --git a/code/modules/events/canister_leak.dm b/code/modules/events/canister_leak.dm index d485d59e60a..f55277881d5 100644 --- a/code/modules/events/canister_leak.dm +++ b/code/modules/events/canister_leak.dm @@ -13,18 +13,18 @@ for(var/i in 1 to 10) var/obj/machinery/portable_atmospherics/canister/C = pick(all_canisters) if(severity <= EVENT_LEVEL_MUNDANE && area_is_occupied(get_area(C))) - log_debug("canister_leak event: Rejecting canister [C] ([C.x],[C.y],[C.z]) because area is occupied") + log_debug(SPAN_DEBUGWARNING("canister_leak event: Rejecting canister [C] ([C.x],[C.y],[C.z]) because area is occupied")) continue // Okay lets break it break_canister(C) return // If we got to here we failed to find it - log_debug("canister_leak event: Giving up after too many failures to pick target canister") + log_debug(SPAN_DEBUGWARNING("canister_leak event: Giving up after too many failures to pick target canister")) kill() return /datum/event/canister_leak/proc/break_canister(var/obj/machinery/portable_atmospherics/canister/C) - log_debug("canister_leak event: Canister [C] ([C.x],[C.y],[C.z]) destroyed.") + log_debug(SPAN_DEBUGWARNING("canister_leak event: Canister [C] ([C.x],[C.y],[C.z]) destroyed.")) C.health = 0 C.healthcheck() diff --git a/code/modules/events/electrical_storm.dm b/code/modules/events/electrical_storm.dm index fe2d1281eb7..684f068f84a 100644 --- a/code/modules/events/electrical_storm.dm +++ b/code/modules/events/electrical_storm.dm @@ -46,7 +46,7 @@ if(shield_gen.deal_shield_damage(30 * severity, SHIELD_DAMTYPE_EM) <= SHIELD_BREACHED_MINOR) return if(!valid_apcs.len) - log_debug("No valid APCs found for electrical storm event ship=[victim]!") + log_debug(SPAN_DEBUGERROR("No valid APCs found for electrical storm event ship=[victim]!")) return var/list/picked_apcs = list() for(var/i=0, i< severity * 2, i++) // Up to 2/4/6 APCs per tick depending on severity diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm index 835ee6dbdea..c5c39a999d5 100644 --- a/code/modules/events/event_container.dm +++ b/code/modules/events/event_container.dm @@ -48,7 +48,7 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT new next_event.event_type(next_event) // Events are added and removed from the processing queue in their New/kill procs - log_debug("Starting event '[next_event.name]' of severity [severity_to_string[severity]].") + log_debug(SPAN_DEBUGINFO("Starting event '[next_event.name]' of severity [severity_to_string[severity]].")) next_event = null // When set to null, a random event will be selected next time else // If not, wait for one minute, instead of one tick, before checking again. @@ -113,7 +113,7 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT var/event_delay = rand(config_legacy.event_delay_lower[severity], config_legacy.event_delay_upper[severity]) * playercount_modifier next_event_time = world.time + event_delay - log_debug("Next event of severity [severity_to_string[severity]] in [(next_event_time - world.time)/600] minutes.") + log_debug(SPAN_DEBUGINFO("Next event of severity [severity_to_string[severity]] in [(next_event_time - world.time)/600] minutes.")) /datum/event_container/proc/SelectEvent() var/datum/event_meta/EM = input("Select an event to queue up.", "Event Selection", null) as null|anything in available_events diff --git a/code/modules/events/event_dynamic.dm b/code/modules/events/event_dynamic.dm index 0098b71fcc2..22ba75328ae 100644 --- a/code/modules/events/event_dynamic.dm +++ b/code/modules/events/event_dynamic.dm @@ -102,7 +102,7 @@ var/list/event_last_fired = list() for(var/V in possibleEvents) debug_message += "[V]:[possibleEvents[V]]" debug_message += "|||Picked:[picked_event]" - log_debug(debug_message) + log_debug(SPAN_DEBUG(debug_message)) if(!picked_event) return diff --git a/code/modules/events/supply_demand.dm b/code/modules/events/supply_demand.dm index c3d8aba2778..b0454cfff01 100644 --- a/code/modules/events/supply_demand.dm +++ b/code/modules/events/supply_demand.dm @@ -173,7 +173,7 @@ src.type_path = type_path src.name = initial(type_path.name) if(!name) - log_debug("supply_demand event: Order for thing [type_path] has no name.") + log_debug(SPAN_DEBUGWARNING("supply_demand event: Order for thing [type_path] has no name.")) /datum/supply_demand_order/thing/match_item(var/atom/I) if(istype(I, type_path)) @@ -214,7 +214,7 @@ qty_need = CEILING((qty_need - amount_to_take), 1) return 1 else - log_debug("supply_demand event: not taking reagent '[reagent_id]': [amount_to_take]") + log_debug(SPAN_DEBUGWARNING("supply_demand event: not taking reagent '[reagent_id]': [amount_to_take]")) return // @@ -240,14 +240,14 @@ if(!canmix || canmix.total_moles <= 0) return if(canmix.return_pressure() < mixture.return_pressure()) - log_debug("supply_demand event: canister fails to match [canmix.return_pressure()] kPa < [mixture.return_pressure()] kPa") + log_debug(SPAN_DEBUGWARNING("supply_demand event: canister fails to match [canmix.return_pressure()] kPa < [mixture.return_pressure()] kPa")) return // Make sure ratios are equal for(var/gas in mixture.gas) var/targetPercent = round((mixture.gas[gas] / mixture.total_moles) * 100) var/canPercent = round((canmix.gas[gas] / canmix.total_moles) * 100) if(abs(targetPercent-canPercent) > 1) - log_debug("supply_demand event: canister fails to match because '[gas]': [canPercent] != [targetPercent]") + log_debug(SPAN_DEBUGWARNING("supply_demand event: canister fails to match because '[gas]': [canPercent] != [targetPercent]")) return // Fail! // Huh, it actually matches! qty_need -= 1 diff --git a/code/modules/gamemaster/actions/atmos_leak.dm b/code/modules/gamemaster/actions/atmos_leak.dm index b9c09091b70..63f7546fc04 100644 --- a/code/modules/gamemaster/actions/atmos_leak.dm +++ b/code/modules/gamemaster/actions/atmos_leak.dm @@ -35,7 +35,7 @@ for(var/i in 1 to 10) var/area/A = pick(grand_list_of_areas) if(is_area_occupied(A)) - log_debug("atmos_leak event: Rejected [A] because it is occupied.") + log_debug(SPAN_DEBUGWARNING("atmos_leak event: Rejected [A] because it is occupied.")) continue // A good area, great! Lets try and pick a turf var/list/turfs = list() @@ -43,14 +43,14 @@ if(turf_clear(F)) turfs += F if(turfs.len == 0) - log_debug("atmos_leak event: Rejected [A] because it has no clear turfs.") + log_debug(SPAN_DEBUGWARNING("atmos_leak event: Rejected [A] because it has no clear turfs.")) continue target_area = A target_turf = pick(turfs) // If we can't find a good target, give up if(!target_area) - log_debug("atmos_leak event: Giving up after too many failures to pick target area") + log_debug(SPAN_DEBUGWARNING("atmos_leak event: Giving up after too many failures to pick target area")) return /datum/gm_action/atmos_leak/announce() diff --git a/code/modules/gamemaster/actions/blob.dm b/code/modules/gamemaster/actions/blob.dm index dd9939a11de..7a42937733c 100644 --- a/code/modules/gamemaster/actions/blob.dm +++ b/code/modules/gamemaster/actions/blob.dm @@ -28,20 +28,20 @@ for(var/i in 1 to 10) var/area/A = pick(grand_list_of_areas) if(is_area_occupied(A)) - log_debug("Blob infestation event: Rejected [A] because it is occupied.") + log_debug(SPAN_DEBUGWARNING("Blob infestation event: Rejected [A] because it is occupied.")) continue var/list/turfs = list() for(var/turf/simulated/floor/F in A) if(turf_clear(F)) turfs += F if(turfs.len == 0) - log_debug("Blob infestation event: Rejected [A] because it has no clear turfs.") + log_debug(SPAN_DEBUGWARNING("Blob infestation event: Rejected [A] because it has no clear turfs.")) continue target_area = A target_turf = pick(turfs) if(!target_area) - log_debug("Blob infestation event: Giving up after too many failures to pick target area") + log_debug(SPAN_DEBUGWARNING("Blob infestation event: Giving up after too many failures to pick target area")) /datum/gm_action/blob/start() ..() diff --git a/code/modules/gamemaster/actions/canister_leak.dm b/code/modules/gamemaster/actions/canister_leak.dm index 5e8e0a08195..31e172ece8b 100644 --- a/code/modules/gamemaster/actions/canister_leak.dm +++ b/code/modules/gamemaster/actions/canister_leak.dm @@ -18,7 +18,7 @@ if(!C.destroyed && (C.z in GLOB.using_map.station_levels) && C.air_contents.total_moles >= MOLES_CELLSTANDARD) all_canisters += C var/obj/machinery/portable_atmospherics/canister/C = pick(all_canisters) - log_debug("canister_leak event: Canister [C] ([C.x],[C.y],[C.z]) destroyed.") + log_debug(SPAN_DEBUGWARNING("canister_leak event: Canister [ADMIN_JMP(C)]) destroyed.")) C.health = 0 C.healthcheck() return diff --git a/code/modules/gamemaster/actions/stowaway.dm b/code/modules/gamemaster/actions/stowaway.dm index 7526f207f1e..f9e8be5714c 100644 --- a/code/modules/gamemaster/actions/stowaway.dm +++ b/code/modules/gamemaster/actions/stowaway.dm @@ -34,7 +34,7 @@ for(var/i in 1 to 10) var/area/A = pick(grand_list_of_areas) if(is_area_occupied(A)) - log_debug("[name] event: Rejected [A] because it is occupied.") + log_debug(SPAN_DEBUGWARNING("[name] event: Rejected [A] because it is occupied.")) continue // A good area, great! Lets try and pick a turf var/list/turfs = list() @@ -42,13 +42,13 @@ if(turf_clear(F)) turfs += F if(turfs.len == 0) - log_debug("[name] event: Rejected [A] because it has no clear turfs.") + log_debug(SPAN_DEBUGWARNING("[name] event: Rejected [A] because it has no clear turfs.")) continue target_area = A target_turf = pick(turfs) if(!target_area) - log_debug("[name] event: Giving up after too many failures to pick target area") + log_debug(SPAN_DEBUGWARNING("[name] event: Giving up after too many failures to pick target area")) return /datum/gm_action/stowaway/start() diff --git a/code/modules/gamemaster/actions/swarmboarder.dm b/code/modules/gamemaster/actions/swarmboarder.dm index e387b741909..3e0b4081d6b 100644 --- a/code/modules/gamemaster/actions/swarmboarder.dm +++ b/code/modules/gamemaster/actions/swarmboarder.dm @@ -34,7 +34,7 @@ for(var/i in 1 to 10) var/area/A = pick(grand_list_of_areas) if(is_area_occupied(A)) - log_debug("[name] event: Rejected [A] because it is occupied.") + log_debug(SPAN_DEBUG("[name] event: Rejected [A] because it is occupied.")) continue // A good area, great! Lets try and pick a turf var/list/turfs = list() @@ -42,13 +42,13 @@ if(turf_clear(F)) turfs += F if(turfs.len == 0) - log_debug("[name] event: Rejected [A] because it has no clear turfs.") + log_debug(SPAN_DEBUG("[name] event: Rejected [A] because it has no clear turfs.")) continue target_area = A target_turf = pick(turfs) if(!target_area) - log_debug("[name] event: Giving up after too many failures to pick target area") + log_debug(SPAN_DEBUG("[name] event: Giving up after too many failures to pick target area")) return /datum/gm_action/swarm_boarder/start() diff --git a/code/modules/holomap/station_holomap.dm b/code/modules/holomap/station_holomap.dm index ec01195fbba..f91273cc611 100644 --- a/code/modules/holomap/station_holomap.dm +++ b/code/modules/holomap/station_holomap.dm @@ -86,7 +86,7 @@ // couldn't really walk into us anyway. But in reality we are on the turf in front of the wall, so bumping // against where we seem is actually trying to *exit* our real loc /obj/machinery/station_map/CheckExit(atom/movable/mover as mob|obj, turf/target as turf) - // log_debug("[src] (dir=[dir]) CheckExit([mover], [target]) get_dir() = [get_dir(target, loc)]") + // log_debug(SPAN_DEBUG("[src] (dir=[dir]) CheckExit([mover], [target]) get_dir() = [get_dir(target, loc)]")) if(get_dir(target, loc) == dir) // Opposite of "normal" since we are visually in the next turf over return FALSE else diff --git a/code/modules/hydroponics/seed_gene_mut.dm b/code/modules/hydroponics/seed_gene_mut.dm index 09147c72b90..673f3df1889 100644 --- a/code/modules/hydroponics/seed_gene_mut.dm +++ b/code/modules/hydroponics/seed_gene_mut.dm @@ -1,6 +1,6 @@ /datum/seed/proc/diverge_mutate_gene(var/decl/plantgene/G, var/turf/T) if(!istype(G)) - log_debug("Attempted to mutate [src] with a non-plantgene var.") + log_debug(SPAN_DEBUG("Attempted to mutate [src] with a non-plantgene var.")) return src var/datum/seed/S = diverge() //Let's not modify all of the seeds. diff --git a/code/modules/keybindings/setup.dm b/code/modules/keybindings/setup.dm index 69171c0bc62..8d9867a206c 100644 --- a/code/modules/keybindings/setup.dm +++ b/code/modules/keybindings/setup.dm @@ -26,7 +26,7 @@ if(!SSinput.initialized) to_chat(src, "Input hasn't been initialized yet. Wait a while.") return - log_debug("[src] reset their keybindings.") + log_debug(SPAN_DEBUG("[src] reset their keybindings.")) to_chat(src, "Force-reasserting all macros.") set_macros(prefs) diff --git a/code/modules/language/language.dm b/code/modules/language/language.dm index 772c380e880..8c9e770095b 100644 --- a/code/modules/language/language.dm +++ b/code/modules/language/language.dm @@ -231,7 +231,7 @@ /mob/proc/can_speak(datum/language/speaking) //Prevents someone from speaking a null language. if(!speaking) - log_debug("[src] attempted to speak a null language.") + log_debug(SPAN_DEBUG("[src] attempted to speak a null language.")) return 0 if(speaking == SScharacters.resolve_language_name("Noise")) diff --git a/code/modules/maps/tether/levels/alienship.dm b/code/modules/maps/tether/levels/alienship.dm index a117803b427..7199c85bc5e 100644 --- a/code/modules/maps/tether/levels/alienship.dm +++ b/code/modules/maps/tether/levels/alienship.dm @@ -133,7 +133,7 @@ if(isliving(mob) && get_area(mob) == src) abduct(mob) catch - log_debug("Problem doing [mob] for Alienship arrival teleport!") + log_debug(SPAN_DEBUG("Problem doing [mob] for Alienship arrival teleport!")) did_entry = TRUE diff --git a/code/modules/maps/tg/map_template.dm b/code/modules/maps/tg/map_template.dm index ab9731ea993..18a6b1041da 100644 --- a/code/modules/maps/tg/map_template.dm +++ b/code/modules/maps/tg/map_template.dm @@ -149,14 +149,14 @@ /datum/map_template/proc/annihilate_bounds(turf/origin, centered = FALSE, orientation = SOUTH) var/deleted_atoms = 0 - log_debug("Annihilating objects in submap loading locatation.") + log_debug(SPAN_DEBUG("Annihilating objects in submap loading locatation.")) var/list/turfs_to_clean = get_affected_turfs(origin, centered, orientation) if(turfs_to_clean.len) for(var/turf/T in turfs_to_clean) for(var/atom/movable/AM in T) ++deleted_atoms qdel(AM) - log_debug("Annihilated [deleted_atoms] objects.") + log_debug(SPAN_DEBUG("Annihilated [deleted_atoms] objects.")) // For your ever biggening badminnery kevinz000 @@ -176,7 +176,7 @@ var/turf/T = locate(1, 1, zl) if(!T) CRASH("Z level [zl] does not exist - Not generating submaps") - log_debug("Seeding submaps for levels [english_list(z_levels)] with budget [budget], whitelist [whitelist] and template type [desired_map_template_type]") + log_debug(SPAN_DEBUG("Seeding submaps for levels [english_list(z_levels)] with budget [budget], whitelist [whitelist] and template type [desired_map_template_type]")) var/overall_sanity = 100 // If the proc fails to place a submap more than this, the whole thing aborts. var/list/potential_submaps = list() // Submaps we may or may not place. @@ -200,7 +200,7 @@ var/list/loaded_submap_names = list() var/list/template_groups_used = list() // Used to avoid spawning three seperate versions of the same PoI. - log_debug("[potential_submaps.len] potential with [priority_submaps.len] priority maps. Beginning placement.") + log_debug(SPAN_DEBUG("[potential_submaps.len] potential with [priority_submaps.len] priority maps. Beginning placement.")) // Now lets start choosing some. while(budget > 0 && overall_sanity > 0) @@ -214,7 +214,7 @@ chosen_template = pick(potential_submaps) else // We're out of submaps. - log_debug("Submap loader had no submaps to pick from with [budget] left to spend.") + log_debug(SPAN_DEBUG("Submap loader had no submaps to pick from with [budget] left to spend.")) break CHECK_TICK @@ -256,7 +256,7 @@ if(!valid) continue - log_debug("Submap \"[chosen_template.name]\" placed at ([T.x], [T.y], [T.z])") + log_debug(SPAN_DEBUG("Submap \"[chosen_template.name]\" placed at ([T.x], [T.y], [T.z])[ADMIN_JMP(T)]")) // Do loading here. chosen_template.load(T, centered = TRUE, orientation=orientation) // This is run before the main map's initialization routine, so that can initilize our submaps for us instead. @@ -294,7 +294,7 @@ pretty_submap_list += "[submap_name]" if(!overall_sanity) - log_debug("Submap loader gave up with [budget] left to spend.") + log_debug(SPAN_DEBUG("Submap loader gave up with [budget] left to spend.")) else - log_debug("Submaps loaded.") - log_debug("Loaded: [english_list(pretty_submap_list)]") + log_debug(SPAN_DEBUG("Submaps loaded.")) + log_debug(SPAN_DEBUG("Loaded: [english_list(pretty_submap_list)]")) diff --git a/code/modules/media/mediamanager.dm b/code/modules/media/mediamanager.dm index b110451c760..189e6a85a7b 100644 --- a/code/modules/media/mediamanager.dm +++ b/code/modules/media/mediamanager.dm @@ -25,7 +25,7 @@ // Stop media when the round ends. I guess so it doesn't play forever or something (for some reason?) /hook/roundend/proc/stop_all_media() - log_debug("Stopping all playing media...") + log_debug(SPAN_DEBUG("Stopping all playing media...")) // Stop all music. for(var/mob/M in GLOB.mob_list) if(M && M.client) diff --git a/code/modules/metric/activity.dm b/code/modules/metric/activity.dm index 6773c77fd46..22834ac19bd 100644 --- a/code/modules/metric/activity.dm +++ b/code/modules/metric/activity.dm @@ -40,13 +40,13 @@ var/list/activity = list() for(var/department in departments) activity[department] = assess_department(department) -// log_debug("Assessing department [department]. They have activity of [activity[department]].") +// log_debug(SPAN_DEBUG("Assessing department [department]. They have activity of [activity[department]].")) var/list/most_active_departments = list() // List of winners. var/highest_activity = null // Department who is leading in activity, if one exists. var/highest_number = 0 // Activity score needed to beat to be the most active department. for(var/i = 1, i <= cutoff_number, i++) -// log_debug("Doing [i]\th round of counting.") +// log_debug(SPAN_DEBUG("Doing [i]\th round of counting.")) for(var/department in activity) if(department in department_blacklist) // Blacklisted? continue @@ -57,7 +57,7 @@ if(highest_activity) // Someone's a winner. most_active_departments.Add(highest_activity) // Add to the list of most active. activity.Remove(highest_activity) // Remove them from the other list so they don't win more than once. -// log_debug("[highest_activity] has won the [i]\th round of activity counting.") +// log_debug(SPAN_DEBUG("[highest_activity] has won the [i]\th round of activity counting.")) highest_activity = null // Now reset for the next round. highest_number = 0 //todo: finish diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 2c546338edf..f6bb14d8e60 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -22,7 +22,7 @@ if (machine) machine.console = src else - log_debug("Ore processing machine console at [src.x], [src.y], [src.z] could not find its machine!") + log_debug(SPAN_DEBUG("Ore processing machine console at [src.x], [src.y], [src.z] [ADMIN_JMP(src)] could not find its machine!")) qdel(src) /obj/machinery/mineral/processing_unit_console/Destroy() diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index e6374b3feec..fc530599258 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -875,18 +875,18 @@ nutrition -= 2 var/recovery_amt = max((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), BODYTEMP_AUTORECOVERY_MINIMUM) //to_chat(world, "Cold. Difference = [body_temperature_difference]. Recovering [recovery_amt]") -// log_debug("Cold. Difference = [body_temperature_difference]. Recovering [recovery_amt]") +// log_debug(SPAN_DEBUG("Cold. Difference = [body_temperature_difference]. Recovering [recovery_amt]")) bodytemperature += recovery_amt else if(species.cold_level_1 <= bodytemperature && bodytemperature <= species.heat_level_1) var/recovery_amt = body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR //to_chat(world, "Norm. Difference = [body_temperature_difference]. Recovering [recovery_amt]") -// log_debug("Norm. Difference = [body_temperature_difference]. Recovering [recovery_amt]") +// log_debug(SPAN_DEBUG("Norm. Difference = [body_temperature_difference]. Recovering [recovery_amt]")) bodytemperature += recovery_amt else if(bodytemperature > species.heat_level_1) //360.15 is 310.15 + 50, the temperature where you start to feel effects. adjust_hydration(-(10 * DEFAULT_THIRST_FACTOR)) //Sweating var/recovery_amt = min((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), -BODYTEMP_AUTORECOVERY_MINIMUM) //We're dealing with negative numbers //to_chat(world, "Hot. Difference = [body_temperature_difference]. Recovering [recovery_amt]") -// log_debug("Hot. Difference = [body_temperature_difference]. Recovering [recovery_amt]") +// log_debug(SPAN_DEBUG("Hot. Difference = [body_temperature_difference]. Recovering [recovery_amt]")) bodytemperature += recovery_amt //This proc returns a number made up of the flags for body parts which you are protected on. (such as HEAD, UPPER_TORSO, LOWER_TORSO, etc. See setup.dm for the full list) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index c13a4654555..a13f2e753cf 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -464,7 +464,7 @@ var/list/ai_verbs_default = list( var/input = sanitize(input(usr, "Please choose a message to transmit to [GLOB.using_map.boss_short] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", "")) if(!input) return - CentCom_announce(input, usr) + message_centcom(input, usr) to_chat(usr, "Message transmitted.") log_game("[key_name(usr)] has made an IA [GLOB.using_map.boss_short] announcement: [input]") emergency_message_cooldown = 1 diff --git a/code/modules/modular_computers/file_system/programs/command/comm.dm b/code/modules/modular_computers/file_system/programs/command/comm.dm index 840df72e62c..9822b6f13c3 100644 --- a/code/modules/modular_computers/file_system/programs/command/comm.dm +++ b/code/modules/modular_computers/file_system/programs/command/comm.dm @@ -150,7 +150,7 @@ var/input = sanitize(input(usr, "Please choose a message to transmit to \[ABNORMAL ROUTING CORDINATES\] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", "") as null|text) if(!input || !can_still_topic()) return 1 - Syndicate_announce(input, usr) + message_syndicate(input, usr) to_chat(usr, "Message transmitted.") log_say("[key_name(usr)] has made an illegal announcement: [input]") centcomm_message_cooldown = 1 @@ -168,7 +168,7 @@ var/input = sanitize(input("Please choose a message to transmit to Centcomm via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", "") as null|text) if(!input || !can_still_topic()) return 1 - CentCom_announce(input, usr) + message_centcom(input, usr) to_chat(usr, "Message transmitted.") log_say("[key_name(usr)] has made an IA Centcomm announcement: [input]") centcomm_message_cooldown = 1 diff --git a/code/modules/multiz/turf_obj_hooks.dm b/code/modules/multiz/turf_obj_hooks.dm index 072d1cf8d95..38f1f7b29e0 100644 --- a/code/modules/multiz/turf_obj_hooks.dm +++ b/code/modules/multiz/turf_obj_hooks.dm @@ -5,7 +5,7 @@ if(SSopenspace.initialized && !AM.invisibility && isobj(AM)) var/turf/T = GetAbove(src) if(isopenturf(T)) - // log_debug("[T] ([T.x],[T.y],[T.z]) queued for update for [src].Entered([AM])") + // log_debug(SPAN_DEBUGINFO("[T][ADMIN_JMP(T)] ([T.x],[T.y],[T.z]) queued for update for [src].Entered([AM])")) SSopenspace.add_turf(T, 1) /turf/Exited(atom/movable/AM) @@ -13,19 +13,19 @@ if(SSopenspace.initialized && !AM.invisibility && isobj(AM)) var/turf/T = GetAbove(src) if(isopenturf(T)) - // log_debug("[T] ([T.x],[T.y],[T.z]) queued for update for [src].Exited([AM])") + // log_debug(SPAN_DEBUGINFO("[T][ADMIN_JMP(T)] ([T.x],[T.y],[T.z]) queued for update for [src].Exited([AM])")) SSopenspace.add_turf(T, 1) -///Updates the icon of the obj +/// Updates the icon of the obj. /obj/update_icon() . = ..() if(SSopenspace.initialized && !invisibility && isturf(loc)) var/turf/T = GetAbove(src) if(isopenturf(T)) - // log_debug("[T] ([T.x],[T.y],[T.z]) queued for update for [src].update_icon()") + // log_debug(SPAN_DEBUGINFO("[T][ADMIN_JMP(T)] ([T.x],[T.y],[T.z]) queued for update for [src].update_icon()")) SSopenspace.add_turf(T, 1) -///Just as New() we probably should hook Destroy() If we can think of something more efficient, lets hear it. +/// Just as New() we probably should hook Destroy() If we can think of something more efficient, lets hear it. /obj/Destroy() if(SSopenspace.initialized && !invisibility && isturf(loc)) var/turf/T = GetAbove(src) diff --git a/code/modules/overmap/champagne.dm b/code/modules/overmap/champagne.dm index 4d620ed188d..df7244796b4 100644 --- a/code/modules/overmap/champagne.dm +++ b/code/modules/overmap/champagne.dm @@ -89,7 +89,7 @@ var/obj/effect/overmap/visitable/ship/landable/champagne/newship = new(start_loc, shuttle_name, shuttle_name) // It automatically registers itself with SSshuttle - log_debug("Created new ship [newship] for shuttle [shuttle] at landmark [starting_landmark]") + log_debug(SPAN_DEBUGINFO("Created new ship [newship] for shuttle [shuttle] at landmark [starting_landmark]")) return shuttle // diff --git a/code/modules/overmap/events/event_handler.dm b/code/modules/overmap/events/event_handler.dm index 0eb2e1b837c..02495d9e048 100644 --- a/code/modules/overmap/events/event_handler.dm +++ b/code/modules/overmap/events/event_handler.dm @@ -24,7 +24,7 @@ GLOBAL_DATUM_INIT(overmap_event_handler, /decl/overmap_event_handler, new) break var/overmap_event_type = pick(subtypesof(/datum/overmap_event)) var/datum/overmap_event/datum_spawn = new overmap_event_type - log_debug("Generating cloud of [datum_spawn.count] [datum_spawn] overmap event hazards") + log_debug(SPAN_DEBUGINFO("Generating cloud of [datum_spawn.count] [datum_spawn] overmap event hazards")) var/list/event_turfs = acquire_event_turfs(datum_spawn.count, datum_spawn.radius, candidate_turfs, datum_spawn.continuous) candidate_turfs -= event_turfs diff --git a/code/modules/planet/weather.dm b/code/modules/planet/weather.dm index 7203a418e99..0a870378b97 100644 --- a/code/modules/planet/weather.dm +++ b/code/modules/planet/weather.dm @@ -65,7 +65,7 @@ // Updating the sun should be done sparingly. if(old_light_modifier && current_weather.light_modifier != old_light_modifier) our_planet.update_sun() - log_debug("[our_planet.name]'s weather is now [new_weather], with a temperature of [temperature]°K ([temperature - T0C]°C | [temperature * 1.8 - 459.67]°F).") + log_debug(SPAN_DEBUGINFO("[our_planet.name]'s weather is now [new_weather], with a temperature of [temperature]°K ([temperature - T0C]°C | [temperature * 1.8 - 459.67]°F).")) /datum/weather_holder/process(delta_time) @@ -128,7 +128,7 @@ /// Get a suitable weather pattern to shift to from this one. var/new_weather = get_next_weather(W) forecast += new_weather - log_debug("[our_planet.name]'s weather forecast is now '[english_list(forecast, and_text = " then ", final_comma_text = ", ")]'.") + log_debug(SPAN_DEBUGINFO("[our_planet.name]'s weather forecast is now '[english_list(forecast, and_text = " then ", final_comma_text = ", ")]'.")) /** diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index d11240040a1..79c9bcf1c3c 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -1231,7 +1231,7 @@ GLOBAL_LIST_EMPTY(apcs) main_status = 2 if(debug) - log_debug("Status: [main_status] - Excess: [excess] - Last Equip: [lastused_equip] - Last Light: [lastused_light] - Longterm: [longtermpower]") + log_debug(SPAN_DEBUGINFO("Status: [main_status] - Excess: [excess] - Last Equip: [lastused_equip] - Last Light: [lastused_light] - Longterm: [longtermpower]")) if(cell && !shorted && !grid_check) // draw power from cell as before to power the area diff --git a/code/modules/preferences/preference_setup/global/02_settings.dm b/code/modules/preferences/preference_setup/global/02_settings.dm index b39b7e24545..d4ab179e8c4 100644 --- a/code/modules/preferences/preference_setup/global/02_settings.dm +++ b/code/modules/preferences/preference_setup/global/02_settings.dm @@ -127,7 +127,7 @@ if(!client) return FALSE if(!client.prefs) - log_debug("Client prefs found to be null for mob [src] and client [ckey], this should be investigated.") + log_debug(SPAN_DEBUGWARNING("Client prefs found to be null for mob [src] and client [ckey], this should be investigated.")) return FALSE return client.set_preference(preference, set_preference) diff --git a/code/modules/preferences/preference_setup/global/03_pai.dm b/code/modules/preferences/preference_setup/global/03_pai.dm index 6e3acd9f496..33ca79e41f6 100644 --- a/code/modules/preferences/preference_setup/global/03_pai.dm +++ b/code/modules/preferences/preference_setup/global/03_pai.dm @@ -25,7 +25,7 @@ /datum/category_item/player_setup_item/player_global/pai/content(datum/preferences/prefs, mob/user, data) . += "pAI:
" if(!candidate) - log_debug("[user] pAI prefs have a null candidate var.") + log_debug(SPAN_DEBUGWARNING("[user] pAI prefs have a null candidate var.")) return . . += "Name: [candidate.name ? candidate.name : "None Set"]
" . += "Description: [candidate.description ? TextPreview(candidate.description, 40) : "None Set"]
" diff --git a/code/modules/resleeving/designer.dm b/code/modules/resleeving/designer.dm index ea1fa7e62bc..9c8999d3976 100644 --- a/code/modules/resleeving/designer.dm +++ b/code/modules/resleeving/designer.dm @@ -58,7 +58,7 @@ nano_ui_interact(user) /obj/machinery/computer/transhuman/designer/nano_ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - // log_debug("designer.nano_ui_interact([user], force_open = [force_open])") + // log_debug(SPAN_DEBUG("designer.nano_ui_interact([user], force_open = [force_open])")) user.set_machine(src) var/data[0] @@ -253,7 +253,7 @@ /obj/machinery/computer/transhuman/designer/proc/update_preview_mob(var/mob/living/carbon/human/H) ASSERT(!QDELETED(H)) ASSERT(!QDELETED(active_br)) - //log_debug("designer.update_preview_mob([H]) active_br = \ref[active_br]") + //log_debug(SPAN_DEBUG("designer.update_preview_mob([H]) active_br = \ref[active_br]")) //Get the DNA and generate a new mob var/datum/dna2/record/R = active_br.mydna H.set_species(R.dna.species) // This needs to happen before anything else becuase it sets some variables. diff --git a/code/modules/shieldgen/shield_generator.dm b/code/modules/shieldgen/shield_generator.dm index 03a9b6bfc90..c9fe0b69565 100644 --- a/code/modules/shieldgen/shield_generator.dm +++ b/code/modules/shieldgen/shield_generator.dm @@ -221,7 +221,7 @@ for(var/obj/effect/shield/S in startends) var/adjacent = startends[S] - log_debug("Processing startend [S] at [S?.x],[S?.y] adjacent=[adjacent]") + log_debug(SPAN_DEBUGINFO("Processing startend [S] at [S?.x],[S?.y] adjacent=[adjacent]")) var/turf/T = get_step(S, adjacent) var/obj/effect/shield/SO = locate() in T S.setDir(SO.dir) diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm index dc37939e6f7..b2575d846e0 100644 --- a/code/modules/shuttles/shuttle.dm +++ b/code/modules/shuttles/shuttle.dm @@ -66,7 +66,7 @@ else current_location = SSshuttle.get_landmark(current_location) if(!istype(current_location)) - log_debug("UM whoops, no initial? [src]") + log_debug(SPAN_DEBUGERROR("UM whoops, no initial? [src]")) CRASH("Shuttle '[name]' could not find its starting location landmark [current_location].") if(src.name in SSshuttle.shuttles) diff --git a/code/modules/shuttles/web_datums.dm b/code/modules/shuttles/web_datums.dm index 656eaadba13..b8c94c7a7b0 100644 --- a/code/modules/shuttles/web_datums.dm +++ b/code/modules/shuttles/web_datums.dm @@ -72,7 +72,7 @@ /datum/shuttle_destination/New(var/new_master) my_landmark = SSshuttle.get_landmark(my_landmark) if(!my_landmark) - log_debug("Web shuttle destination '[name]' could not find its landmark '[my_landmark]'.") + log_debug(SPAN_DEBUGERROR("Web shuttle destination '[name]' could not find its landmark '[my_landmark]'.")) master = new_master /datum/shuttle_destination/Destroy() diff --git a/code/modules/species/promethean/promethean_blob.dm b/code/modules/species/promethean/promethean_blob.dm index f5559c05798..70c4b35c40f 100644 --- a/code/modules/species/promethean/promethean_blob.dm +++ b/code/modules/species/promethean/promethean_blob.dm @@ -76,7 +76,7 @@ update_icon() if(!humanform) // If we somehow have a blob with no human, lets just clean up. - log_debug("Cleaning up blob with no prommie!") + log_debug(SPAN_DEBUGINFO("Cleaning up blob with no prommie!")) qdel(src) return @@ -500,4 +500,3 @@ else if(humanform.say_understands(other, speaking)) //So they're speaking something other than promethean or sign, let's just ask our original mob if it understands return TRUE else return FALSE - diff --git a/code/modules/species/protean/protean_powers.dm b/code/modules/species/protean/protean_powers.dm index 0b14de8182e..a4da7d29086 100644 --- a/code/modules/species/protean/protean_powers.dm +++ b/code/modules/species/protean/protean_powers.dm @@ -169,7 +169,7 @@ regenerate_icons() //Probably worth it, yeah. var/obj/item/organ/internal/nano/refactory/new_refactory = locate() in internal_organs if(!new_refactory) - log_debug("[src] protean-regen'd but lacked a refactory when done.") + log_debug(SPAN_DEBUGWARNING("[src] protean-regen'd but lacked a refactory when done.")) else new_refactory.materials = holder to_chat(src, "Your refactoring is complete.") //Guarantees the message shows no matter how bad the timing. diff --git a/code/modules/species/shadekin/shadekin_abilities.dm b/code/modules/species/shadekin/shadekin_abilities.dm index e6c83bc38bd..e71aacdf403 100644 --- a/code/modules/species/shadekin/shadekin_abilities.dm +++ b/code/modules/species/shadekin/shadekin_abilities.dm @@ -62,7 +62,7 @@ if(watcher>0) ability_cost = ability_cost + ( 15 * watcher ) if(!(ability_flags & AB_PHASE_SHIFTED)) - log_debug("[src] attempted to shift with [watcher] visible Carbons with a cost of [ability_cost] in a darkness level of [darkness]") + log_debug(SPAN_DEBUGWARNING("[src] attempted to shift with [watcher] visible Carbons with a cost of [ability_cost] in a darkness level of [darkness]")) if(!(ability_flags & AB_PHASE_SHIFTED)) shadekin_adjust_energy(-ability_cost) diff --git a/code/modules/tgui/modules/communications.dm b/code/modules/tgui/modules/communications.dm index 76c86990e1c..054c01709c4 100644 --- a/code/modules/tgui/modules/communications.dm +++ b/code/modules/tgui/modules/communications.dm @@ -346,7 +346,7 @@ if(length(input) < COMM_CCMSGLEN_MINIMUM) to_chat(usr, SPAN_WARNING("Message '[input]' is too short. [COMM_CCMSGLEN_MINIMUM] character minimum.")) return - CentCom_announce(input, usr) + message_centcom(input, usr) to_chat(usr, SPAN_NOTICE("Message transmitted.")) log_game("[key_name(usr)] has made an IA [using_map.boss_short] announcement: [input]") centcomm_message_cooldown = world.time + 300 // 30 seconds diff --git a/code/modules/turbolift/turbolift_floor.dm b/code/modules/turbolift/turbolift_floor.dm index 32c5ed77936..7156bf830d0 100644 --- a/code/modules/turbolift/turbolift_floor.dm +++ b/code/modules/turbolift/turbolift_floor.dm @@ -13,7 +13,7 @@ /datum/turbolift_floor/proc/set_area_ref(var/ref) var/area/turbolift/A = locate(ref) if(!istype(A)) - log_debug("Turbolift floor area was of the wrong type: ref=[ref]") + log_debug(SPAN_DEBUGERROR("Turbolift floor area was of the wrong type: ref=[ref]")) return area_ref = ref diff --git a/code/modules/turbolift/turbolift_map.dm b/code/modules/turbolift/turbolift_map.dm index 95c80a6bc9a..b74515bd113 100644 --- a/code/modules/turbolift/turbolift_map.dm +++ b/code/modules/turbolift/turbolift_map.dm @@ -131,7 +131,7 @@ var/turf/checking = locate(tx,ty,cz) if(!istype(checking)) - log_debug("[name] cannot find a component turf at [tx],[ty] on floor [cz]. Aborting.") + log_debug(SPAN_DEBUGERROR("[name] cannot find a component turf at [tx],[ty] on floor [cz]. Aborting.")) qdel(src) return @@ -202,7 +202,7 @@ // Update area. if(az > areas_to_use.len) - log_debug("Insufficient defined areas in turbolift datum, aborting.") + log_debug(SPAN_DEBUGWARNING("Insufficient defined areas in turbolift datum, aborting.")) qdel(src) return diff --git a/code/modules/virus2/helpers.dm b/code/modules/virus2/helpers.dm index 0f6f7b0d2b5..9529769cd8e 100644 --- a/code/modules/virus2/helpers.dm +++ b/code/modules/virus2/helpers.dm @@ -70,10 +70,10 @@ //Attemptes to infect mob M with virus. Set forced to 1 to ignore protective clothnig /proc/infect_virus2(var/mob/living/carbon/M,var/datum/disease2/disease/disease,var/forced = 0) if(!istype(disease)) -// log_debug("Bad virus") +// log_debug(SPAN_DEBUGWARNING("Bad virus")) return if(!istype(M)) -// log_debug("Bad mob") +// log_debug(SPAN_DEBUGWARNING("Bad mob")) return if ("[disease.uniqueID]" in M.virus2) return @@ -86,7 +86,7 @@ var/datum/disease2/disease/D = disease.getcopy() D.minormutate() D.resistance += rand(1,9) -// log_debug("Adding virus") +// log_debug(SPAN_DEBUGINFO("Adding virus")) M.virus2["[D.uniqueID]"] = D M.update_hud_med_status() else @@ -101,12 +101,12 @@ else return //not compatible with this species -// log_debug("Infecting [M]") +// log_debug(SPAN_DEBUGINFO("Infecting [M]")) if(forced || (infection_check(M, disease.spreadtype) && prob(disease.infectionchance))) var/datum/disease2/disease/D = disease.getcopy() D.minormutate() -// log_debug("Adding virus") +// log_debug(SPAN_DEBUGINFO("Adding virus")) M.virus2["[D.uniqueID]"] = D M.update_hud_med_status() @@ -137,10 +137,10 @@ if (src == victim) return "idiocy" -// log_debug("Spreading [vector] diseases from [src] to [victim]") +// log_debug(SPAN_DEBUGINFO("Spreading [vector] diseases from [src] to [victim]")) if (virus2.len > 0) for (var/ID in virus2) -// log_debug("Attempting virus [ID]") +// log_debug(SPAN_DEBUGINFO("Attempting virus [ID]")) var/datum/disease2/disease/V = virus2[ID] if(V.spreadtype != vector) continue @@ -149,19 +149,19 @@ if (vector == "Airborne") if(airborne_can_reach(get_turf(src), get_turf(victim))) -// log_debug("In range, infecting") +// log_debug(SPAN_DEBUGINFO("In range, infecting")) infect_virus2(victim,V) // else -// log_debug("Could not reach target") +// log_debug(SPAN_DEBUGWARNING("Could not reach target")) if (vector == "Contact") if (Adjacent(victim)) -// log_debug("In range, infecting") +// log_debug(SPAN_DEBUGINFO("In range, infecting")) infect_virus2(victim,V) //contact goes both ways if (victim.virus2.len > 0 && vector == "Contact" && Adjacent(victim)) -// log_debug("Spreading [vector] diseases from [victim] to [src]") +// log_debug(SPAN_DEBUGINFO("Spreading [vector] diseases from [victim] to [src]")) var/nudity = 1 if (ishuman(victim)) diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index ecd83c1eb9c..c60ead1b529 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -357,12 +357,12 @@ var/list/raw_list = text2list(html_encode(raw_text),delim) if(raw_list.len > 10) raw_list.Cut(11) - log_debug("[owner] tried to set [lowertext(name)] with 11+ messages") + log_debug(SPAN_DEBUGWARNING("[owner] tried to set [lowertext(name)] with 11+ messages")) for(var/i = 1, i <= raw_list.len, i++) if(length(raw_list[i]) > 160 || length(raw_list[i]) < 10) //160 is fudged value due to htmlencoding increasing the size raw_list.Cut(i,i) - log_debug("[owner] tried to set [lowertext(name)] with >121 or <10 char message") + log_debug(SPAN_DEBUGWARNING("[owner] tried to set [lowertext(name)] with >121 or <10 char message")) else raw_list[i] = readd_quotes(raw_list[i]) //Also fix % sign for var replacement diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 84853b372dd..4e14a3a3823 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -118,7 +118,7 @@ qdel(G) return TRUE else - log_debug("[attacker] attempted to feed [G.affecting] to [user] ([user.type]) but it failed.") + log_debug(SPAN_DEBUG("[attacker] attempted to feed [G.affecting] to [user] ([user.type]) but it failed.")) ///// If user clicked on their grabbed target else if((src == G.affecting) && (attacker.a_intent == INTENT_GRAB) && (attacker.zone_sel.selecting == BP_TORSO) && (is_vore_predator(G.affecting))) @@ -129,7 +129,7 @@ qdel(G) return TRUE else - log_debug("[attacker] attempted to feed [user] to [G.affecting] ([G.affecting.type]) but it failed.") + log_debug(SPAN_DEBUG("[attacker] attempted to feed [user] to [G.affecting] ([G.affecting.type]) but it failed.")) ///// If user clicked on anyone else but their grabbed target else if((src != G.affecting) && (src != G.assailant) && (is_vore_predator(src))) @@ -147,7 +147,7 @@ qdel(G) return TRUE else - log_debug("[attacker] attempted to feed [G.affecting] to [src] ([src.type]) but it failed.") + log_debug(SPAN_DEBUG("[attacker] attempted to feed [G.affecting] to [src] ([src.type]) but it failed.")) //Handle case: /obj/item/holder else if(istype(I,/obj/item/holder)) @@ -163,7 +163,7 @@ H.held_mob = null return TRUE //return TRUE to exit upper procs else - log_debug("[attacker] attempted to feed [H.contents] to [src] ([src.type]) but it failed.") + log_debug(SPAN_DEBUG("[attacker] attempted to feed [H.contents] to [src] ([src.type]) but it failed.")) //Handle case: /obj/item/radio/beacon else if(istype(I,/obj/item/radio/beacon)) @@ -475,7 +475,7 @@ /mob/living/proc/perform_the_nom(var/mob/living/user, var/mob/living/prey, var/mob/living/pred, var/obj/belly/belly, var/delay) //Sanity if(!user || !prey || !pred || !istype(belly) || !(belly in pred.vore_organs)) - log_debug("[user] attempted to feed [prey] to [pred], via [lowertext(belly.name)] but it went wrong.") + log_debug(SPAN_DEBUG("[user] attempted to feed [prey] to [pred], via [lowertext(belly.name)] but it went wrong.")) return // The belly selected at the time of noms diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm index ba45fddf4a9..a07539cec34 100644 --- a/code/modules/vore/eating/vore_vr.dm +++ b/code/modules/vore/eating/vore_vr.dm @@ -169,7 +169,7 @@ //List to JSON var/json_TO_FILE = json_encode(settings_list) if(!json_TO_FILE) - log_debug("Saving: [path] failed jsonencode") + log_debug(SPAN_DEBUG("Saving: [path] failed jsonencode")) return FALSE //Write it out @@ -178,7 +178,7 @@ fdel(path) //Byond only supports APPENDING to files, not replacing. text2file(json_TO_FILE, path) if(!fexists(path)) - log_debug("Saving: [path] failed file write") + log_debug(SPAN_DEBUG("Saving: [path] failed file write")) return FALSE return TRUE diff --git a/code/modules/vore/persist/persist_vr.dm b/code/modules/vore/persist/persist_vr.dm index bf6f91e4dbb..53722eec3f7 100644 --- a/code/modules/vore/persist/persist_vr.dm +++ b/code/modules/vore/persist/persist_vr.dm @@ -58,7 +58,7 @@ // For now as a safety measure we will only save if the name matches. if(prefs.real_name != persister.real_name) - log_debug("Persist (P4P): Skipping [persister] because ORIG:[persister.real_name] != CURR:[prefs.real_name].") + log_debug(SPAN_DEBUG("Persist (P4P): Skipping [persister] because ORIG:[persister.real_name] != CURR:[prefs.real_name].")) return return prefs @@ -186,10 +186,10 @@ var/datum/sprite_accessory/marking/mark_datum = ML["datum"] var/mark_color = ML["color"] if(!istype(mark_datum) || !mark_color) - log_debug("[character]'s organ [O] ([O.type]) has marking [list2params(ML)] with invalid/missing color/datum!") + log_debug(SPAN_DEBUG("[character]'s organ [O] ([O.type]) has marking [list2params(ML)] with invalid/missing color/datum!")) continue; if(!(mark_datum.name in body_marking_styles_list)) - log_debug("[character]'s organ [O] ([O.type]) has marking [mark_datum] which is not in body_marking_styles_list!") + log_debug(SPAN_DEBUG("[character]'s organ [O] ([O.type]) has marking [mark_datum] which is not in body_marking_styles_list!")) continue; // Note: Since datums can cover multiple organs, we may encounter it multiple times, but this is okay // because you're only allowed to have each marking type once! If this assumption changes, obviously update this. ~Leshana diff --git a/code/modules/xenobio2/controller.dm b/code/modules/xenobio2/controller.dm index 120809a1b38..bd016f2928f 100644 --- a/code/modules/xenobio2/controller.dm +++ b/code/modules/xenobio2/controller.dm @@ -22,7 +22,7 @@ var/global/datum/controller/xenobio/xenobio_controller // Set in New(). /datum/controller/xenobio/New() if(xenobio_controller && xenobio_controller != src) - log_debug("Rebuilding xenobio controller.") + log_debug(SPAN_DEBUG("Rebuilding xenobio controller.")) qdel(xenobio_controller) xenobio_controller = src setup() diff --git a/code/modules/xenobio2/mob/xeno procs.dm b/code/modules/xenobio2/mob/xeno procs.dm index 747904f730f..631a756cfdb 100644 --- a/code/modules/xenobio2/mob/xeno procs.dm +++ b/code/modules/xenobio2/mob/xeno procs.dm @@ -123,7 +123,7 @@ Divergence proc, used in mutation to make unique datums. var/complete_message = ",[language.key] [message]" if(!(complete_message in speak)) speech_buffer.Add(complete_message) - log_debug("Added '[complete_message]'.") + log_debug(SPAN_DEBUGINFO("Added '[complete_message]'.")) else */ if(!(message in speak)) @@ -136,8 +136,8 @@ Divergence proc, used in mutation to make unique datums. var/chosen = pick(speech_buffer) speak.Add(chosen) /* Uncoment for logging of speech list. - log_debug("Added [chosen] to speak list.") - log_debug("Speechlist cut.") */ + log_debug(SPAN_DEBUGINFO("Added [chosen] to speak list.")) + log_debug(SPAN_DEBUGINFO("Speechlist cut.")) */ speech_buffer.Cut() // /mob/living/simple_mob/xeno/proc/BuildReagentLists() diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index 63a8a7bfdb1..45651ee0592 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -105,6 +105,8 @@ h1.alert, h2.alert {color: #000000;} .disarm {color: #990000;} .passive {color: #660000;} +.helpful {color: #368f31;} + .announce {color: #228b22; font-weight: bold;} .boldannounce {color: #ff0000; font-weight: bold;} .minorannounce { font-weight: bold; font-size: 3;} diff --git a/maps/citadel_minitest/citadel_minitest_shuttles.dm b/maps/citadel_minitest/citadel_minitest_shuttles.dm index 79f7126ed72..1a0646d0883 100644 --- a/maps/citadel_minitest/citadel_minitest_shuttles.dm +++ b/maps/citadel_minitest/citadel_minitest_shuttles.dm @@ -59,7 +59,7 @@ shuttle_landmark_flags = SLANDMARK_FLAG_AUTOSET // /obj/machinery/computer/shuttle_control/power_change() -// log_debug("[src].power_change() - area=[get_area(src)] powered=[powered(power_channel)]") +// log_debug(SPAN_DEBUG("[src].power_change() - area=[get_area(src)] powered=[powered(power_channel)]")) // . = ..() diff --git a/maps/submaps/_healpers.dm b/maps/submaps/_helpers.dm similarity index 96% rename from maps/submaps/_healpers.dm rename to maps/submaps/_helpers.dm index baf6ce160c4..1ddd140230d 100644 --- a/maps/submaps/_healpers.dm +++ b/maps/submaps/_helpers.dm @@ -73,7 +73,7 @@ var/dir_to_use = stepoff_dir ? stepoff_dir : dir var/turf/T = get_step(src, dir_to_use) if(!T) - log_debug("Fake stairs at [x],[y],[z] couldn't move someone to their destination.") + log_debug(SPAN_DEBUGERROR("Fake stairs at [x],[y],[z] [ADMIN_JMP(src)] couldn't move someone to their destination.")) return AM.forceMove(T) spawn AM.setDir(dir_to_use) diff --git a/maps/~map_system/maps.dm b/maps/~map_system/maps.dm index 823ceeb176a..1b4debd169b 100644 --- a/maps/~map_system/maps.dm +++ b/maps/~map_system/maps.dm @@ -12,7 +12,7 @@ var/list/all_maps = list() else M = new type if(!M.path) - log_debug("Map '[M]' does not have a defined path, not adding to map list!") + log_debug(SPAN_DEBUGERROR("Map '[M]' does not have a defined path, not adding to map list!")) else all_maps[M.path] = M return 1 diff --git a/tgui/packages/tgui-panel/chat/constants.js b/tgui/packages/tgui-panel/chat/constants.js index 696cef60d37..b8854627b53 100644 --- a/tgui/packages/tgui-panel/chat/constants.js +++ b/tgui/packages/tgui-panel/chat/constants.js @@ -26,6 +26,7 @@ export const MESSAGE_TYPE_LOCALCHAT = 'localchat'; export const MESSAGE_TYPE_RADIO = 'radio'; export const MESSAGE_TYPE_INFO = 'info'; export const MESSAGE_TYPE_WARNING = 'warning'; +export const MESSAGE_TYPE_HELPFUL = 'helpful'; export const MESSAGE_TYPE_DEADCHAT = 'deadchat'; export const MESSAGE_TYPE_OOC = 'ooc'; export const MESSAGE_TYPE_ADMINPM = 'adminpm'; @@ -108,6 +109,12 @@ export const MESSAGE_TYPES = [ description: 'Urist McTraitor has stabbed you with a knife!', selector: '.danger', }, + { + type: MESSAGE_TYPE_HELPFUL, + name: 'Helpful', + description: 'PFC Unga Dunga starts feeding you a pill.', + selector: '.helpful', + }, { type: MESSAGE_TYPE_UNKNOWN, name: 'Unsorted', diff --git a/tgui/packages/tgui-panel/styles/goon/chat-dark.scss b/tgui/packages/tgui-panel/styles/goon/chat-dark.scss index 4f8ee86f984..59eb99744aa 100644 --- a/tgui/packages/tgui-panel/styles/goon/chat-dark.scss +++ b/tgui/packages/tgui-panel/styles/goon/chat-dark.scss @@ -624,6 +624,10 @@ blockquote.nicegreen { border-color: #059223; } +.helpful { + color: #368f31; +} + /* hornichems */ .userlove { color: #ff42a6; diff --git a/tgui/packages/tgui-panel/styles/goon/chat-light.scss b/tgui/packages/tgui-panel/styles/goon/chat-light.scss index 61da80b7756..21d0adfd06b 100644 --- a/tgui/packages/tgui-panel/styles/goon/chat-light.scss +++ b/tgui/packages/tgui-panel/styles/goon/chat-light.scss @@ -665,6 +665,10 @@ blockquote.nicegreen { border-color: #14a833; } +.helpful { + color: #368f31; +} + .userlove { color: #FF1493; font-style: italic; diff --git a/tgui/packages/tgui/components/Tooltip.tsx b/tgui/packages/tgui/components/Tooltip.tsx index d3ae1cccbdf..62885c3b6ed 100644 --- a/tgui/packages/tgui/components/Tooltip.tsx +++ b/tgui/packages/tgui/components/Tooltip.tsx @@ -1,11 +1,10 @@ - import { createPopper, Placement, VirtualElement } from '@popperjs/core'; import { Component, findDOMfromVNode, InfernoNode, render } from 'inferno'; type TooltipProps = { children?: InfernoNode; content: InfernoNode; - position?: Placement, + position?: Placement; }; type TooltipState = { @@ -13,10 +12,12 @@ type TooltipState = { }; const DEFAULT_OPTIONS = { - modifiers: [{ - name: "eventListeners", - enabled: false, - }], + modifiers: [ + { + name: 'eventListeners', + enabled: false, + }, + ], }; const NULL_RECT = { @@ -37,6 +38,7 @@ export class Tooltip extends Component { static singletonPopper: ReturnType | undefined; static currentHoveredElement: Element | undefined; static virtualElement: VirtualElement = { + // prettier-ignore getBoundingClientRect: () => ( Tooltip.currentHoveredElement?.getBoundingClientRect() ?? NULL_RECT @@ -62,23 +64,23 @@ export class Tooltip extends Component { return; } - domNode.addEventListener("mouseenter", () => { + domNode.addEventListener('mouseenter', () => { let renderedTooltip = Tooltip.renderedTooltip; if (renderedTooltip === undefined) { - renderedTooltip = document.createElement("div"); - renderedTooltip.className = "Tooltip"; + renderedTooltip = document.createElement('div'); + renderedTooltip.className = 'Tooltip'; document.body.appendChild(renderedTooltip); Tooltip.renderedTooltip = renderedTooltip; } Tooltip.currentHoveredElement = domNode; - renderedTooltip.style.opacity = "1"; + renderedTooltip.style.opacity = '1'; this.renderPopperContent(); }); - domNode.addEventListener("mouseleave", () => { + domNode.addEventListener('mouseleave', () => { this.fadeOut(); }); } @@ -89,7 +91,7 @@ export class Tooltip extends Component { } Tooltip.currentHoveredElement = undefined; - Tooltip.renderedTooltip!.style.opacity = "0"; + Tooltip.renderedTooltip!.style.opacity = '0'; } renderPopperContent() { @@ -109,7 +111,7 @@ export class Tooltip extends Component { renderedTooltip!, { ...DEFAULT_OPTIONS, - placement: this.props.position || "auto", + placement: this.props.position || 'auto', } ); @@ -117,13 +119,13 @@ export class Tooltip extends Component { } else { singletonPopper.setOptions({ ...DEFAULT_OPTIONS, - placement: this.props.position || "auto", + placement: this.props.position || 'auto', }); singletonPopper.update(); } }, - this.context, + this.context ); }