diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 82d6d0c2446..cccc2ffb1a9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -113,6 +113,7 @@ jobs: sudo apt update || true sudo apt install zlib1g-dev:i386 libssl-dev:i386 ldd librust_g.so + ldd libverdigris.so - name: Unit Tests run: | tools/ci/install_byond.sh diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index 185ac8c9c77..661ef6384e5 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -292,7 +292,7 @@ to_chat(user, span_notice("You begin to unfasten \the [src]...")) if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + span_infoplain(span_bold("\The [user]") + " unfastens \the [src]."), \ span_notice("You have unfastened \the [src]."), \ "You hear ratchet.") deconstruct() diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index d05f4fdc824..70784f0519d 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -252,7 +252,7 @@ Thus, the two variables affect pump operation are set in New(): to_chat(user, span_notice("You begin to unfasten \the [src]...")) if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + span_infoplain(span_bold("\The [user]") + " unfastens \the [src]."), \ span_notice("You have unfastened \the [src]."), \ "You hear ratchet.") deconstruct() diff --git a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm index 60040ddd8bc..aecb911561c 100644 --- a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm +++ b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm @@ -91,7 +91,7 @@ playsound(src, W.usesound, 50, 1) if(do_after(user, 40 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + span_infoplain(span_bold("\The [user]") + "unfastens \the [src]."), \ span_notice("You have unfastened \the [src]."), \ "You hear a ratchet.") deconstruct() diff --git a/code/ATMOSPHERICS/components/portables_connector.dm b/code/ATMOSPHERICS/components/portables_connector.dm index 1974cdb1d6c..2dbc9afc00e 100644 --- a/code/ATMOSPHERICS/components/portables_connector.dm +++ b/code/ATMOSPHERICS/components/portables_connector.dm @@ -162,7 +162,7 @@ to_chat(user, span_notice("You begin to unfasten \the [src]...")) if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + span_infoplain(span_bold("\The [user]") + " unfastens \the [src]."), \ span_notice("You have unfastened \the [src]."), \ "You hear a ratchet.") deconstruct() diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm index 3fd2380e0f7..ef3149f78ef 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm @@ -105,7 +105,7 @@ // return // usr.set_machine(src) // var/list/node_connects = get_node_connect_dirs() - // var/dat = {"Power: [use_power?"On":"Off"]
+ // var/dat = {span_bold("Power: ") + "[use_power?"On":"Off"]
// Set Flow Rate Limit: // [set_flow_rate]L/s | Change //
diff --git a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm index 61ade8f501a..9e1d183b9bb 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm @@ -62,7 +62,7 @@ to_chat(user, span_notice("You begin to unfasten \the [src]...")) if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + span_infoplain(span_bold("\The [user]") + " unfastens \the [src]."), \ span_notice("You have unfastened \the [src]."), \ "You hear a ratchet.") deconstruct() diff --git a/code/ATMOSPHERICS/components/tvalve.dm b/code/ATMOSPHERICS/components/tvalve.dm index f220c459045..0e051d9067d 100644 --- a/code/ATMOSPHERICS/components/tvalve.dm +++ b/code/ATMOSPHERICS/components/tvalve.dm @@ -337,7 +337,7 @@ to_chat(user, span_notice("You begin to unfasten \the [src]...")) if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + span_infoplain(span_bold("\The [user]") + " unfastens \the [src]."), \ span_notice("You have unfastened \the [src]."), \ "You hear a ratchet.") deconstruct() diff --git a/code/ATMOSPHERICS/components/unary/heat_exchanger.dm b/code/ATMOSPHERICS/components/unary/heat_exchanger.dm index 2f69eaacc53..7b6a5621eb1 100644 --- a/code/ATMOSPHERICS/components/unary/heat_exchanger.dm +++ b/code/ATMOSPHERICS/components/unary/heat_exchanger.dm @@ -81,7 +81,7 @@ to_chat(user, span_notice("You begin to unfasten \the [src]...")) if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + span_infoplain(span_bold("\The [user]") + " unfastens \the [src]."), \ span_notice("You have unfastened \the [src]."), \ "You hear a ratchet.") deconstruct() diff --git a/code/ATMOSPHERICS/components/unary/outlet_injector.dm b/code/ATMOSPHERICS/components/unary/outlet_injector.dm index fc817774194..fa47021ddde 100644 --- a/code/ATMOSPHERICS/components/unary/outlet_injector.dm +++ b/code/ATMOSPHERICS/components/unary/outlet_injector.dm @@ -171,7 +171,7 @@ to_chat(user, span_notice("You begin to unfasten \the [src]...")) if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + span_infoplain(span_bold("\The [user]") + " unfastens \the [src]."), \ span_notice("You have unfastened \the [src]."), \ "You hear a ratchet.") deconstruct() diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index e59f5fc4981..9f32aa32ecc 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -398,7 +398,7 @@ if(!src || !WT.isOn()) return playsound(src, WT.usesound, 50, 1) if(!welded) - user.visible_message("\The [user] welds the vent shut.", span_notice("You weld the vent shut."), "You hear welding.") + user.visible_message(span_bold("\The [user]") + " welds the vent shut.", span_notice("You weld the vent shut."), "You hear welding.") welded = 1 update_icon() else @@ -446,7 +446,7 @@ to_chat(user, span_notice("You begin to unfasten \the [src]...")) if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + span_infoplain(span_bold("\The [user]") + " unfastens \the [src]."), \ span_notice("You have unfastened \the [src]."), \ "You hear a ratchet.") deconstruct() diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm index 93082e06fe2..0fc8d0cff79 100644 --- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm @@ -287,7 +287,7 @@ to_chat(user, span_notice("You begin to unfasten \the [src]...")) if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + span_infoplain(span_bold("\The [user]") + " unfastens \the [src]."), \ span_notice("You have unfastened \the [src]."), \ "You hear a ratchet.") deconstruct() diff --git a/code/ATMOSPHERICS/components/valve.dm b/code/ATMOSPHERICS/components/valve.dm index a0612901841..9139f96e749 100644 --- a/code/ATMOSPHERICS/components/valve.dm +++ b/code/ATMOSPHERICS/components/valve.dm @@ -301,7 +301,7 @@ to_chat(user, span_notice("You begin to unfasten \the [src]...")) if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + span_infoplain(span_bold("\The [user]") + " unfastens \the [src]."), \ span_notice("You have unfastened \the [src]."), \ "You hear a ratchet.") deconstruct() diff --git a/code/ATMOSPHERICS/pipes/pipe_base.dm b/code/ATMOSPHERICS/pipes/pipe_base.dm index 0c7a40ae6b2..ff6fb4bba2f 100644 --- a/code/ATMOSPHERICS/pipes/pipe_base.dm +++ b/code/ATMOSPHERICS/pipes/pipe_base.dm @@ -130,7 +130,7 @@ to_chat(user, span_notice("You begin to unfasten \the [src]...")) if (do_after(user, 10 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + span_infoplain(span_bold("\The [user]") + " unfastens \the [src]."), \ span_notice("You have unfastened \the [src]."), \ "You hear a ratchet.") deconstruct() diff --git a/code/ZAS/Variable Settings.dm b/code/ZAS/Variable Settings.dm index c4699c7ab02..8867060e6fc 100644 --- a/code/ZAS/Variable Settings.dm +++ b/code/ZAS/Variable Settings.dm @@ -110,7 +110,7 @@ var/global/vs_control/vsc = new vw = vars[ch] if("[ch]_DESC" in vars) vw_desc = vars["[ch]_DESC"] if("[ch]_NAME" in vars) vw_name = vars["[ch]_NAME"] - dat += "[vw_name] = [vw] \[Change\]
" + dat += span_bold("[vw_name] = [vw]") + " \[Change\]
" dat += "[vw_desc]

" user << browse(dat,"window=settings") @@ -168,7 +168,7 @@ var/global/vs_control/vsc = new vars[ch] = vw if(how == "Toggle") newvar = (newvar?"ON":"OFF") - to_world(span_notice("[key_name(user)] changed the setting [display_description] to [newvar].")) + to_world(span_world(span_blue("[key_name(user)] changed the setting [display_description] to [newvar]."))) if(ch in plc.settings) ChangeSettingsDialog(user,plc.settings) else @@ -321,7 +321,7 @@ var/global/vs_control/vsc = new plc.N2O_HALLUCINATION = initial(plc.N2O_HALLUCINATION) - to_world(span_notice("[key_name(user)] changed the global phoron/ZAS settings to \"[def]\"")) + to_world(span_world(span_blue("[key_name(user)] changed the global phoron/ZAS settings to \"[def]\""))) /pl_control/var/list/settings = list() diff --git a/code/__defines/MC.dm b/code/__defines/MC.dm index 57161ffac8c..5173da844c6 100644 --- a/code/__defines/MC.dm +++ b/code/__defines/MC.dm @@ -63,6 +63,10 @@ #define SS_PAUSED 3 /// paused by mc_tick_check #define SS_SLEEPING 4 /// fire() slept. #define SS_PAUSING 5 /// in the middle of pausing +// Subsystem init stages +#define INITSTAGE_EARLY 1 //! Early init stuff that doesn't need to wait for mapload +#define INITSTAGE_MAIN 2 //! Main init stage +#define INITSTAGE_MAX 2 //! Highest initstage. #define SUBSYSTEM_DEF(X) GLOBAL_REAL(SS##X, /datum/controller/subsystem/##X);\ /datum/controller/subsystem/##X/New(){\ diff --git a/code/__defines/_click.dm b/code/__defines/_click.dm new file mode 100644 index 00000000000..3bc9c08734b --- /dev/null +++ b/code/__defines/_click.dm @@ -0,0 +1,56 @@ +//Defines file for byond click related parameters +//this is mostly for ease of use and for finding all the things that use say RIGHT_CLICK rather then just searching "right" + +//Mouse buttons held +#define RIGHT_CLICK "right" +#define MIDDLE_CLICK "middle" +#define LEFT_CLICK "left" + +///Mouse button that was just clicked/released +///if(modifiers[BUTTON] == LEFT_CLICK) +#define BUTTON "button" + +//Keys held down during the mouse action +#define CTRL_CLICK "ctrl" +#define ALT_CLICK "alt" +#define SHIFT_CLICK "shift" + +//Cells involved if using a Grid control +#define DRAG_CELL "drag-cell" +#define DROP_CELL "drop-cell" + +//The button used for dragging (only sent for unrelated mouse up/down messages during a drag) +#define DRAG "drag" + +//If the mouse is over a link in maptext, or this event is related to clicking such a link +#define LINK "link" + +//Pixel coordinates relative to the icon's position on screen +#define VIS_X "vis-x" +#define VIS_Y "vis-y" + +//Pixel coordinates within the icon, in the icon's coordinate space +#define ICON_X "icon-x" +#define ICON_Y "icon-y" + +//Pixel coordinates in screen_loc format ("[tile_x]:[pixel_x],[tile_y]:[pixel_y]") +#define SCREEN_LOC "screen-loc" + +//https://secure.byond.com/docs/ref/info.html#/atom/var/mouse_opacity +/// Objects will ignore being clicked on regardless of their transparency (used in parallax, lighting effects, holograms, lasers, etc.) +#define MOUSE_OPACITY_TRANSPARENT 0 +/// Objects will be clicked on if it is the topmost object and the pixel isn't transparent at the position of the mouse (default behavior for 99.99% of game objects) +#define MOUSE_OPACITY_ICON 1 +/// Objects will be always be clicked on regardless of pixel transparency or other objects at that location (used in space vines, storage containers) +#define MOUSE_OPACITY_OPAQUE 2 + +/// Whatever the base action datum thinks is best +#define SCRN_OBJ_DEFAULT "default" +/// Floating somewhere on the hud, not in any predefined place +#define SCRN_OBJ_FLOATING "floating" +/// In the list of buttons stored at the top of the screen +#define SCRN_OBJ_IN_LIST "list" +/// In the collapseable palette +#define SCRN_OBJ_IN_PALETTE "palette" +/// In cult spell list +#define SCRN_OBJ_CULT_LIST "cult_list" diff --git a/code/__defines/_helpers.dm b/code/__defines/_helpers.dm new file mode 100644 index 00000000000..b2165492bd5 --- /dev/null +++ b/code/__defines/_helpers.dm @@ -0,0 +1,14 @@ +// Stuff that is relatively "core" and is used in other defines/helpers + +/** + * The game's world.icon_size. \ + * Ideally divisible by 16. \ + * Ideally a number, but it + * can be a string ("32x32"), so more exotic coders + * will be sad if you use this in math. + */ +#define ICON_SIZE_ALL 32 +/// The X/Width dimension of ICON_SIZE. This will more than likely be the bigger axis. +#define ICON_SIZE_X 32 +/// The Y/Height dimension of ICON_SIZE. This will more than likely be the smaller axis. +#define ICON_SIZE_Y 32 diff --git a/code/__defines/_tick.dm b/code/__defines/_tick.dm index 54ac7d398d9..f336c2e27b2 100644 --- a/code/__defines/_tick.dm +++ b/code/__defines/_tick.dm @@ -1,15 +1,27 @@ +/// Percentage of tick to leave for master controller to run +#define MAPTICK_MC_MIN_RESERVE 70 +#define MAPTICK_LAST_INTERNAL_TICK_USAGE (world.map_cpu) #define TICK_LIMIT_RUNNING 80 +/// Tick limit used to resume things in stoplag #define TICK_LIMIT_TO_RUN 70 +/// Tick limit for MC while running #define TICK_LIMIT_MC 70 #define TICK_LIMIT_MC_INIT_DEFAULT 98 +/// for general usage of tick_usage #define TICK_USAGE world.tick_usage +/// to be used where the result isn't checked +#define TICK_USAGE_REAL world.tick_usage +/// Returns true if tick_usage is above the limit #define TICK_CHECK ( TICK_USAGE > Master.current_ticklimit ) +/// runs stoplag if tick_usage is above the limit #define CHECK_TICK ( TICK_CHECK ? stoplag() : 0 ) +/// Returns true if tick usage is above 95, for high priority usage #define TICK_CHECK_HIGH_PRIORITY ( TICK_USAGE > 95 ) +/// runs stoplag if tick_usage is above 95, for high priority usage #define CHECK_TICK_HIGH_PRIORITY ( TICK_CHECK_HIGH_PRIORITY? stoplag() : 0 ) -#define UNTIL(X) while(!(X)) stoplag() \ No newline at end of file +#define UNTIL(X) while(!(X)) stoplag() diff --git a/code/__defines/action.dm b/code/__defines/action.dm index bdbe228777c..3f9b8a5e414 100644 --- a/code/__defines/action.dm +++ b/code/__defines/action.dm @@ -1,5 +1,4 @@ #define AB_CHECK_RESTRAINED 1 #define AB_CHECK_STUNNED 2 #define AB_CHECK_LYING 4 -#define AB_CHECK_ALIVE 8 -#define AB_CHECK_INSIDE 16 +#define AB_CHECK_CONSCIOUS 8 diff --git a/code/__defines/cooldowns.dm b/code/__defines/cooldowns.dm index d177ae1e815..ac73690d916 100644 --- a/code/__defines/cooldowns.dm +++ b/code/__defines/cooldowns.dm @@ -27,6 +27,7 @@ // random cooldowns #define COOLDOWN_VENOM_MILKING "venom_milking" +#define COOLDOWN_SHIP_REFRESH "ship_refresh" // admin verb cooldowns #define COOLDOWN_INTERNET_SOUND "internet_sound" diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm index 3803d198d4f..270235992b7 100644 --- a/code/__defines/misc.dm +++ b/code/__defines/misc.dm @@ -310,11 +310,6 @@ var/global/list/##LIST_NAME = list();\ #define RAD_RESIST_CALC_DIV 0 // Each turf absorbs some fraction of the working radiation level #define RAD_RESIST_CALC_SUB 1 // Each turf absorbs a fixed amount of radiation -//https://secure.byond.com/docs/ref/info.html#/atom/var/mouse_opacity -#define MOUSE_OPACITY_TRANSPARENT 0 -#define MOUSE_OPACITY_ICON 1 -#define MOUSE_OPACITY_OPAQUE 2 - // Used by radios to indicate that they have sent a message via something other than subspace #define RADIO_CONNECTION_FAIL 0 #define RADIO_CONNECTION_NON_SUBSPACE 1 diff --git a/code/__defines/span_vr.dm b/code/__defines/span_vr.dm index 6a4748e5ee2..1412420fe23 100644 --- a/code/__defines/span_vr.dm +++ b/code/__defines/span_vr.dm @@ -47,6 +47,7 @@ #define span_say(str) ("" + str + "") #define span_emote(str) ("" + str + "") #define span_emote_subtle(str) ("" + str + "") +#define span_filter_say(str) ("" + str + "") // Filtered as NPC messages #define span_npc_say(str) ("" + str + "") @@ -58,13 +59,9 @@ // Unfiltered, only style! #define span_name(str) ("" + str + "") #define span_game(str) ("" + str + "") -#define span_filter_say(str) ("" + str + "") #define span_message(str) ("" + str + "") // TODO: This makes no sense, check it! #define span_notify(str) ("" + str + "") // TODO: This makes no sense, check it! #define span_body(str) ("" + str + "") -#define span_filter_warning(str) ("" + str + "") -#define span_filter_combat(str) ("" + str + "") -#define span_filter_notice(str) ("" + str + "") // Filtered under combat! #define span_attack(str) ("" + str + "") @@ -72,6 +69,7 @@ #define span_passive(str) ("" + str + "") #define span_danger(str) ("" + str + "") #define span_bolddanger(str) ("" + str + "") +#define span_filter_combat(str) ("" + str + "") // Filtered under warning messages #define span_critical(str) ("" + str + "") @@ -79,7 +77,7 @@ #define span_warning(str) ("" + str + "") #define span_warningplain(str) ("" + str + "") #define span_boldwarning(str) ("" + str + "") -#define span_sinister(str) ("" + str + "") +#define span_filter_warning(str) ("" + str + "") // Close to warning plain, maybe replace // FIltered under info #define span_info(str) ("" + str + "") @@ -88,11 +86,14 @@ #define span_unconscious(str) ("" + str + "") #define span_hear(str) ("" + str + "") #define span_notice(str) ("" + str + "") +#define span_filter_notice(str) ("" + str + "") // Close to infoplain, maybe replace #define span_boldnotice(str) ("" + str + "") #define span_adminnotice(str) ("" + str + "") #define span_alium(str) ("" + str + "") #define span_cult(str) ("" + str + "") +#define span_pnarrate(str) ("" + str + "") + /* Direct communication spans */ // Local pred / prey filter #define span_psay(str) ("" + str + "") @@ -148,6 +149,7 @@ #define span_orange(str) ("" + str + "") #define span_blue(str) ("" + str + "") #define span_green(str) ("" + str + "") +#define span_darkgreen(str) ("" + str + "") // Do not use regularly! #define span_purple(str) ("" + str + "") #define span_yellow(str) ("" + str + "") #define span_pink(str) ("" + str + "") @@ -156,25 +158,29 @@ #define span_maroon(str) ("" + str + "") #define span_brown(str) ("" + str + "") #define span_lightpurple(str) ("" + str + "") -#define span_darkpink(str) ("" + str + "") +#define span_darkpink(str) ("" + str + "") #define span_rose(str) ("" + str + "") /* System and Debug */ // System filter #define span_boldannounce(str) ("" + str + "") +#define span_world(str) ("" + str + "") // Bold system messages, use this for important world messages to make sure players can't filter them! +#define span_filter_system(str) ("" + str + "") // Plain system filter +#define span_sinister(str) ("" + str + "") // Unfiltered #define span_prefix(str) ("" + str + "") #define span_admin(str) ("" + str + "") #define span_linkOn(str) ("" + str + "") #define span_linkOff(str) ("" + str + "") -#define span_filter_system(str) ("" + str + "") -#define span_filter_pm(str) ("" + str + "") -#define span_filter_pray(str) ("" + str + "") +#define span_filter_pray(str) ("" + str + "") // (Uses the chat message type directly) // Admin log filters #define span_log_message(str) ("" + str + "") -#define span_filter_adminlog(str) ("" + str + "") +#define span_filter_adminlog(str) ("" + str + "") // (Uses the chat message type directly) + +// Attack log filter +#define span_filter_attacklog(str) ("" + str + "") // (Uses the chat message type directly) // Debug filter #define span_debug_error(str) ("" + str + "") @@ -182,7 +188,7 @@ #define span_debug_info(str) ("" + str + "") #define span_debug_debug(str) ("" + str + "") #define span_debug_trace(str) ("" + str + "") -#define span_filter_debuglogs(str) ("" + str + "") +#define span_filter_debuglogs(str) ("" + str + "") // (Uses the chat message type directly) /* Admin only usage */ // Admin pm filter @@ -190,6 +196,7 @@ #define span_adminhelp(str) ("" + str + "") #define span_admin_pm_notice(str) ("" + str + "") #define span_admin_pm_warning(str) ("" + str + "") +#define span_filter_pm(str) ("" + str + "") // Mentor pm filter #define span_mentor(str) ("" + str + "") @@ -215,6 +222,10 @@ #define span_giant(str) "" + str + "" +#define span_giganteus(str) "" + str + "" + +#define span_massive(str) "" + str + "" + #define span_narsie(str) "" + str + "" #define span_cascade(str) "" + str + "" @@ -227,3 +238,6 @@ // Links! #define span_linkify(str) ("" + str + "") + +// Just used downstream +#define span_wingdings(str) ("" + str + "") diff --git a/code/__defines/statpanel.dm b/code/__defines/statpanel.dm new file mode 100644 index 00000000000..1c304d7fb39 --- /dev/null +++ b/code/__defines/statpanel.dm @@ -0,0 +1,2 @@ +#define TURFLIST_UPDATED (1 << 0) +#define TURFLIST_UPDATE_QUEUED (1 << 1) diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm index 84c6fbd8a7c..b2838f79a2e 100644 --- a/code/__defines/subsystems.dm +++ b/code/__defines/subsystems.dm @@ -109,6 +109,7 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G #define INIT_ORDER_SKYBOX -30 //Visual only, irrelevant to gameplay, but needs to be late enough to have overmap populated fully #define INIT_ORDER_TICKER -50 #define INIT_ORDER_MAPRENAME -60 //Initiating after Ticker to ensure everything is loaded and everything we rely on us working +#define INIT_ORDER_STATPANELS -98 #define INIT_ORDER_CHAT -100 //Should be last to ensure chat remains smooth during init. @@ -140,6 +141,7 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G #define FIRE_PRIORITY_MACHINES 100 #define FIRE_PRIORITY_TGUI 110 #define FIRE_PRIORITY_PROJECTILES 150 +#define FIRE_PRIORITY_STATPANEL 390 #define FIRE_PRIORITY_CHAT 400 #define FIRE_PRIORITY_OVERLAYS 500 #define FIRE_PRIORITY_INPUT 1000 // This must always always be the max highest priority. Player input must never be lost. diff --git a/code/__defines/tgs.config.dm b/code/__defines/tgs.config.dm index 57afe12ed77..c57439c7e45 100644 --- a/code/__defines/tgs.config.dm +++ b/code/__defines/tgs.config.dm @@ -2,7 +2,7 @@ #define TGS_DEFINE_AND_SET_GLOBAL(Name, Value) GLOBAL_VAR_INIT(##Name, ##Value); GLOBAL_PROTECT(##Name) #define TGS_READ_GLOBAL(Name) GLOB.##Name #define TGS_WRITE_GLOBAL(Name, Value) GLOB.##Name = ##Value -#define TGS_WORLD_ANNOUNCE(message) to_chat(world, span_boldannounce([html_encode(##message)])) +#define TGS_WORLD_ANNOUNCE(message) to_chat(world, span_boldannounce("[html_encode(##message)]")) #define TGS_INFO_LOG(message) log_to_dd("TGS Info: [##message]") #define TGS_WARNING_LOG(message) log_to_dd("TGS Warn: [##message]") #define TGS_ERROR_LOG(message) log_to_dd("TGS Error: [##message]") diff --git a/code/__defines/time.dm b/code/__defines/time.dm index 9b3c384cfb3..857e2fa1556 100644 --- a/code/__defines/time.dm +++ b/code/__defines/time.dm @@ -1,3 +1,6 @@ +///displays the current time into the round, with a lot of extra code just there for ensuring it looks okay after an entire day passes +#define ROUND_TIME(...) ( "[world.time - SSticker.round_start_time > MIDNIGHT_ROLLOVER ? "[round((world.time - SSticker.round_start_time)/MIDNIGHT_ROLLOVER)]:[worldtime2text()]" : worldtime2text()]" ) + /// Define that just has the current in-universe year for use in whatever context you might want to display that in. (For example, 2022 -> 2562 given a 540 year offset) #define CURRENT_STATION_YEAR (GLOB.year_integer + STATION_YEAR_OFFSET) diff --git a/code/__defines/verdigris/_verdigris.dm b/code/__defines/verdigris/_verdigris.dm new file mode 100644 index 00000000000..021506ac466 --- /dev/null +++ b/code/__defines/verdigris/_verdigris.dm @@ -0,0 +1,18 @@ +/* This comment bypasses grep checks */ /var/__verdigris + +/proc/__detect_verdigris() + if (world.system_type == UNIX) + return __verdigris = (fexists("./libverdigris.so") ? "./libverdigris.so" : "libverdigris") + else + return __verdigris = "verdigris" + +#define VERDIGRIS (__verdigris || __detect_verdigris()) +#define VERDIGRIS_CALL(name, args...) call_ext(VERDIGRIS, "byond:" + name)(args) + +/proc/verdigris_version() return VERDIGRIS_CALL("verdigris_version") +/proc/verdigris_features() return VERDIGRIS_CALL("verdigris_features") +/proc/verdigris_cleanup() return VERDIGRIS_CALL("cleanup") + +/world/New() + verdigris_cleanup() + ..() diff --git a/code/__defines/verdigris/random_map.dm b/code/__defines/verdigris/random_map.dm new file mode 100644 index 00000000000..5f8a2372678 --- /dev/null +++ b/code/__defines/verdigris/random_map.dm @@ -0,0 +1,3 @@ +/proc/verdigris_generate_automata(limit_x, limit_y, iterations, initial_wall_cell) as /list + RETURN_TYPE(/list) + return VERDIGRIS_CALL("generate_automata", limit_x, limit_y, iterations, initial_wall_cell) diff --git a/code/_helpers/icons.dm b/code/_helpers/icons.dm index a81c09b314f..ae731264726 100644 --- a/code/_helpers/icons.dm +++ b/code/_helpers/icons.dm @@ -97,203 +97,205 @@ // Ported from /tg/station // Creates a single icon from a given /atom or /image. Only the first argument is required. -/proc/getFlatIcon(image/A, defdir, deficon, defstate, defblend, start = TRUE, no_anim = FALSE) - //Define... defines. +// appearance_flags indicates whether appearance_flags should be respected (at the cost of about 10-20% perf) +/proc/getFlatIcon(image/appearance, defdir, deficon, defstate, defblend, start = TRUE, no_anim = FALSE, force_south = FALSE, appearance_flags = FALSE) + // Loop through the underlays, then overlays, sorting them into the layers list + #define PROCESS_OVERLAYS_OR_UNDERLAYS(flat, process, base_layer) \ + for (var/i in 1 to process.len) { \ + var/image/current = process[i]; \ + if (!current) { \ + continue; \ + } \ + if (current.plane != FLOAT_PLANE && current.plane != appearance.plane) { \ + continue; \ + } \ + var/current_layer = current.layer; \ + if (current_layer < 0) { \ + if (current_layer <= -1000) { \ + return flat; \ + } \ + current_layer = base_layer + appearance.layer + current_layer / 1000; \ + } \ + for (var/index_to_compare_to in 1 to layers.len) { \ + var/compare_to = layers[index_to_compare_to]; \ + if (current_layer < layers[compare_to]) { \ + layers.Insert(index_to_compare_to, current); \ + break; \ + } \ + } \ + layers[current] = current_layer; \ + } + var/static/icon/flat_template = icon('icons/effects/effects.dmi', "nothing") - #define BLANK icon(flat_template) - #define SET_SELF(SETVAR) do { \ - var/icon/SELF_ICON=icon(icon(curicon, curstate, base_icon_dir),"",SOUTH,no_anim?1:null); \ - if(A.alpha<255) { \ - SELF_ICON.Blend(rgb(255,255,255,A.alpha),ICON_MULTIPLY);\ - } \ - if(A.color) { \ - if(islist(A.color)){ \ - SELF_ICON.MapColors(arglist(A.color))} \ - else{ \ - SELF_ICON.Blend(A.color,ICON_MULTIPLY)} \ - } \ - ##SETVAR=SELF_ICON;\ - } while (0) - #define INDEX_X_LOW 1 - #define INDEX_X_HIGH 2 - #define INDEX_Y_LOW 3 - #define INDEX_Y_HIGH 4 - - #define flatX1 flat_size[INDEX_X_LOW] - #define flatX2 flat_size[INDEX_X_HIGH] - #define flatY1 flat_size[INDEX_Y_LOW] - #define flatY2 flat_size[INDEX_Y_HIGH] - #define addX1 add_size[INDEX_X_LOW] - #define addX2 add_size[INDEX_X_HIGH] - #define addY1 add_size[INDEX_Y_LOW] - #define addY2 add_size[INDEX_Y_HIGH] - - if(!A || A.alpha <= 0) - return BLANK - - var/noIcon = FALSE + if(!appearance || appearance.alpha <= 0) + return icon(flat_template) if(start) if(!defdir) - defdir = A.dir + defdir = appearance.dir if(!deficon) - deficon = A.icon + deficon = appearance.icon if(!defstate) - defstate = A.icon_state + defstate = appearance.icon_state if(!defblend) - defblend = A.blend_mode + defblend = appearance.blend_mode - var/curicon = A.icon || deficon - var/curstate = A.icon_state || defstate + var/curicon = appearance.icon || deficon + var/curstate = appearance.icon_state || defstate + var/curdir = (!appearance.dir || appearance.dir == SOUTH) ? defdir : appearance.dir - if(!((noIcon = (!curicon)))) - var/curstates = cached_icon_states(curicon) + if(force_south) + curdir = SOUTH + + var/render_icon = curicon + + if (render_icon) + var/curstates = icon_states(curicon) if(!(curstate in curstates)) - if("" in curstates) + if ("" in curstates) curstate = "" else - noIcon = TRUE // Do not render this object. + render_icon = FALSE - var/curdir - var/base_icon_dir //We'll use this to get the icon state to display if not null BUT NOT pass it to overlays as the dir we have + var/base_icon_dir //We'll use this to get the icon state to display if not null BUT NOT pass it to overlays as the dir we have - // Use the requested dir or the atom's current dir - curdir = defdir || A.dir - - //Try to remove/optimize this section ASAP, CPU hog. //Slightly mitigated by implementing caching using cached_icon_states + //Try to remove/optimize this section ASAP, CPU hog. //Determines if there's directionals. - if(!noIcon && curdir != SOUTH) - var/exist = FALSE - var/static/list/checkdirs = list(NORTH, EAST, WEST) - for(var/i in checkdirs) //Not using GLOB for a reason. - if(length(cached_icon_states(icon(curicon, curstate, i)))) - exist = TRUE - break - if(!exist) + if(render_icon && curdir != SOUTH) + if ( + !length(icon_states(icon(curicon, curstate, NORTH))) \ + && !length(icon_states(icon(curicon, curstate, EAST))) \ + && !length(icon_states(icon(curicon, curstate, WEST))) \ + ) base_icon_dir = SOUTH - // if(!base_icon_dir) base_icon_dir = curdir - ASSERT(!BLEND_DEFAULT) //I might just be stupid but lets make sure this define is 0. + var/curblend = appearance.blend_mode || defblend - var/curblend = A.blend_mode || defblend - - if(A.overlays.len || A.underlays.len) - var/icon/flat = BLANK + if(appearance.overlays.len || appearance.underlays.len) + var/icon/flat = icon(flat_template) // Layers will be a sorted list of icons/overlays, based on the order in which they are displayed var/list/layers = list() var/image/copy // Add the atom's icon itself, without pixel_x/y offsets. - if(!noIcon) - copy = image(icon=curicon, icon_state=curstate, layer=A.layer, dir=base_icon_dir) - copy.color = A.color - copy.alpha = A.alpha + if(render_icon) + copy = image(icon=curicon, icon_state=curstate, layer=appearance.layer, dir=base_icon_dir) + copy.color = appearance.color + copy.alpha = appearance.alpha copy.blend_mode = curblend - layers[copy] = A.layer + layers[copy] = appearance.layer - // Loop through the underlays, then overlays, sorting them into the layers list - for(var/process_set in 0 to 1) - var/list/process = process_set? A.overlays : A.underlays - for(var/i in 1 to process.len) - var/image/current = process[i] - if(!current) - continue - if(current.plane != FLOAT_PLANE && current.plane != A.plane) - continue - var/current_layer = current.layer - if(current_layer < 0) - //if(current_layer <= -1000) - //return flat - current_layer = process_set + A.layer + current_layer / 1000 - - for(var/p in 1 to layers.len) - var/image/cmp = layers[p] - if(current_layer < layers[cmp]) - layers.Insert(p, current) - break - layers[current] = current_layer - - //sortTim(layers, GLOBAL_PROC_REF(cmp_image_layer_asc)) + PROCESS_OVERLAYS_OR_UNDERLAYS(flat, appearance.underlays, 0) + PROCESS_OVERLAYS_OR_UNDERLAYS(flat, appearance.overlays, 1) var/icon/add // Icon of overlay being added - // Current dimensions of flattened icon - var/list/flat_size = list(1, flat.Width(), 1, flat.Height()) - // Dimensions of overlay being added - var/list/add_size[4] + var/flatX1 = 1 + var/flatX2 = flat.Width() + var/flatY1 = 1 + var/flatY2 = flat.Height() - for(var/V in layers) - var/image/I = V - if(I.alpha == 0) + var/addX1 = 0 + var/addX2 = 0 + var/addY1 = 0 + var/addY2 = 0 + + for(var/image/layer_image as anything in layers) + if(layer_image.alpha == 0) continue - if(I == copy) // 'I' is an /image based on the object being flattened. + // variables only relevant when accounting for appearance_flags: + var/apply_color = TRUE + var/apply_alpha = TRUE + + if(layer_image == copy) // 'layer_image' is an /image based on the object being flattened. curblend = BLEND_OVERLAY - add = icon(I.icon, I.icon_state, base_icon_dir) + add = icon(layer_image.icon, layer_image.icon_state, base_icon_dir) else // 'I' is an appearance object. - add = getFlatIcon(image(I), curdir, curicon, curstate, curblend, FALSE, no_anim) + var/image/layer_as_image = image(layer_image) + if(appearance_flags) + if(layer_as_image.appearance_flags & RESET_COLOR) + apply_color = FALSE + if(layer_as_image.appearance_flags & RESET_ALPHA) + apply_alpha = FALSE + add = getFlatIcon(layer_as_image, curdir, curicon, curstate, curblend, FALSE, no_anim, force_south, appearance_flags) if(!add) continue - // Find the new dimensions of the flat icon to fit the added overlay - add_size = list( - min(flatX1, I.pixel_x+1), - max(flatX2, I.pixel_x+add.Width()), - min(flatY1, I.pixel_y+1), - max(flatY2, I.pixel_y+add.Height()) - ) - if(flat_size ~! add_size) + // Find the new dimensions of the flat icon to fit the added overlay + addX1 = min(flatX1, layer_image.pixel_x + 1) + addX2 = max(flatX2, layer_image.pixel_x + add.Width()) + addY1 = min(flatY1, layer_image.pixel_y + 1) + addY2 = max(flatY2, layer_image.pixel_y + add.Height()) + + if ( + addX1 != flatX1 \ + || addX2 != flatX2 \ + || addY1 != flatY1 \ + || addY2 != flatY2 \ + ) // Resize the flattened icon so the new icon fits flat.Crop( - addX1 - flatX1 + 1, - addY1 - flatY1 + 1, - addX2 - flatX1 + 1, - addY2 - flatY1 + 1 + addX1 - flatX1 + 1, + addY1 - flatY1 + 1, + addX2 - flatX1 + 1, + addY2 - flatY1 + 1 ) - flat_size = add_size.Copy() + + flatX1 = addX1 + flatX2 = addX2 + flatY1 = addY1 + flatY2 = addY2 + + if(appearance_flags) + // apply parent's color/alpha to the added layers if the layer didn't opt + if(apply_color && appearance.color) + if(islist(appearance.color)) + add.MapColors(arglist(appearance.color)) + else + add.Blend(appearance.color, ICON_MULTIPLY) + + if(apply_alpha && appearance.alpha < 255) + add.Blend(rgb(255, 255, 255, appearance.alpha), ICON_MULTIPLY) // Blend the overlay into the flattened icon - flat.Blend(add, blendMode2iconMode(curblend), I.pixel_x + 2 - flatX1, I.pixel_y + 2 - flatY1) + flat.Blend(add, blendMode2iconMode(curblend), layer_image.pixel_x + 2 - flatX1, layer_image.pixel_y + 2 - flatY1) - if(A.color) - if(islist(A.color)) - flat.MapColors(arglist(A.color)) - else - flat.Blend(A.color, ICON_MULTIPLY) + if(!appearance_flags) + // If we didn't apply parent colors individually per layer respecting appearance_flags, then do it just the one time now + if(appearance.color) + if(islist(appearance.color)) + flat.MapColors(arglist(appearance.color)) + else + flat.Blend(appearance.color, ICON_MULTIPLY) - if(A.alpha < 255) - flat.Blend(rgb(255, 255, 255, A.alpha), ICON_MULTIPLY) + if(appearance.alpha < 255) + flat.Blend(rgb(255, 255, 255, appearance.alpha), ICON_MULTIPLY) if(no_anim) //Clean up repeated frames var/icon/cleaned = new /icon() cleaned.Insert(flat, "", SOUTH, 1, 0) - . = cleaned + return cleaned else - . = icon(flat, "", SOUTH) - else //There's no overlays. - if(!noIcon) - SET_SELF(.) + return icon(flat, "", SOUTH) + else if (render_icon) // There's no overlays. + var/icon/final_icon = icon(icon(curicon, curstate, base_icon_dir), "", SOUTH, no_anim ? TRUE : null) - //Clear defines - #undef flatX1 - #undef flatX2 - #undef flatY1 - #undef flatY2 - #undef addX1 - #undef addX2 - #undef addY1 - #undef addY2 + if (appearance.alpha < 255) + final_icon.Blend(rgb(255,255,255, appearance.alpha), ICON_MULTIPLY) - #undef INDEX_X_LOW - #undef INDEX_X_HIGH - #undef INDEX_Y_LOW - #undef INDEX_Y_HIGH + if (appearance.color) + if (islist(appearance.color)) + final_icon.MapColors(arglist(appearance.color)) + else + final_icon.Blend(appearance.color, ICON_MULTIPLY) - #undef BLANK - #undef SET_SELF + return final_icon + + #undef PROCESS_OVERLAYS_OR_UNDERLAYS /proc/getIconMask(atom/A)//By yours truly. Creates a dynamic mask for a mob/whatever. /N var/icon/alpha_mask = new(A.icon,A.icon_state)//So we want the default icon and icon state of A. @@ -676,7 +678,7 @@ GLOBAL_LIST_EMPTY(cached_examine_icons) icon_state = thing.icon_state //Despite casting to atom, this code path supports mutable appearances, so let's be nice to them //if(isnull(icon_state) || (isatom(thing) && thing.flags_1 & HTML_USE_INITAL_ICON_1)) - if(isnull(icon_state) || isatom(thing)) + if(isnull(icon_state) && isatom(thing)) icon_state = initial(thing.icon_state) if (isnull(dir)) dir = initial(thing.dir) @@ -745,7 +747,7 @@ GLOBAL_LIST_EMPTY(cached_examine_icons) return "" //Costlier version of icon2html() that uses getFlatIcon() to account for overlays, underlays, etc. Use with extreme moderation, ESPECIALLY on mobs. -/proc/costly_icon2html(thing, target, sourceonly = FALSE) +/proc/costly_icon2html(thing, target, sourceonly = FALSE, force_south = FALSE) if (!thing) return //if(SSlag_switch.measures[DISABLE_USR_ICON2HTML] && usr && !HAS_TRAIT(usr, TRAIT_BYPASS_MEASURES)) @@ -754,5 +756,5 @@ GLOBAL_LIST_EMPTY(cached_examine_icons) if (isicon(thing)) return icon2html(thing, target) - var/icon/I = getFlatIcon(thing) + var/icon/I = getFlatIcon(thing, force_south = force_south) return icon2html(I, target, sourceonly = sourceonly) diff --git a/code/_helpers/logging.dm b/code/_helpers/logging.dm index 2b61a877ba2..57795108c76 100644 --- a/code/_helpers/logging.dm +++ b/code/_helpers/logging.dm @@ -74,42 +74,42 @@ //Log the message to in-game dialogue logs, as well. if(speaker.client) - speaker.dialogue_log += "([time_stamp()]) ([speaker]/[speaker.client]) SAY: - [text]" - GLOB.round_text_log += "([time_stamp()]) ([speaker]/[speaker.client]) SAY: - [text]" + speaker.dialogue_log += span_bold("([time_stamp()])") + " (" + span_bold("[speaker]/[speaker.client]") + ") " + span_underline("SAY:") + " - " + span_green("[text]") + GLOB.round_text_log += span_bold("([time_stamp()])") + " (" + span_bold("[speaker]/[speaker.client]") + ") " + span_underline("SAY:") + " - " + span_green("[text]") /proc/log_ooc(text, client/user) if (config.log_ooc) WRITE_LOG(diary, "OOC: [user.simple_info_line()]: [html_decode(text)]") - GLOB.round_text_log += "([time_stamp()]) ([user]) OOC: - [text]" + GLOB.round_text_log += span_bold("([time_stamp()])") + " (" + span_bold("[user]") + ") " + span_underline("OOC:") + " - " + span_blue(span_bold("[text]")) /proc/log_aooc(text, client/user) if (config.log_ooc) WRITE_LOG(diary, "AOOC: [user.simple_info_line()]: [html_decode(text)]") - GLOB.round_text_log += "([time_stamp()]) ([user]) AOOC: - [text]" + GLOB.round_text_log += span_bold("([time_stamp()])") + " (" + span_bold("[user]") + ") " + span_underline("AOOC:") + " - " + span_red(span_bold("[text]")) /proc/log_looc(text, client/user) if (config.log_ooc) WRITE_LOG(diary, "LOOC: [user.simple_info_line()]: [html_decode(text)]") - GLOB.round_text_log += "([time_stamp()]) ([user]) LOOC: - [text]" + GLOB.round_text_log += span_bold("([time_stamp()])") + " (" + span_bold("[user]") + ") " + span_underline("LOOC:") + " - " + span_orange(span_bold("[text]")) /proc/log_whisper(text, mob/speaker) if (config.log_whisper) WRITE_LOG(diary, "WHISPER: [speaker.simple_info_line()]: [html_decode(text)]") if(speaker.client) - speaker.dialogue_log += "([time_stamp()]) ([speaker]/[speaker.client]) SAY: - [text]" - GLOB.round_text_log += "([time_stamp()]) ([speaker]/[speaker.client]) SAY: - [text]" + speaker.dialogue_log += span_bold("([time_stamp()])") + " (" + span_bold("[speaker]/[speaker.client]") + ") " + span_underline("SAY:") + " - " + span_gray(span_italics("[text]")) + GLOB.round_text_log += span_bold("([time_stamp()])") + " (" + span_bold("[speaker]/[speaker.client]") + ") " + span_underline("SAY:") + " - " + span_gray(span_italics("[text]")) /proc/log_emote(text, mob/speaker) if (config.log_emote) WRITE_LOG(diary, "EMOTE: [speaker.simple_info_line()]: [html_decode(text)]") if(speaker.client) - speaker.dialogue_log += "([time_stamp()]) ([speaker]/[speaker.client]) EMOTE: - [text]" - GLOB.round_text_log += "([time_stamp()]) ([speaker]/[speaker.client]) EMOTE: - [text]" + speaker.dialogue_log += span_bold("([time_stamp()])") + " (" + span_bold("[speaker]/[speaker.client]") + ") " + span_underline("EMOTE:") + " - " + span_pink("[text]") + GLOB.round_text_log += span_bold("([time_stamp()])") + " (" + span_bold("[speaker]/[speaker.client]") + ") " + span_underline("EMOTE:") + " - " + span_pink("[text]") /proc/log_attack(attacker, defender, message) if (config.log_attack) @@ -131,8 +131,8 @@ if (config.log_say) WRITE_LOG(diary, "DEADCHAT: [speaker.simple_info_line()]: [html_decode(text)]") - speaker.dialogue_log += "([time_stamp()]) ([speaker]/[speaker.client]) DEADSAY: - [text]" - GLOB.round_text_log += "([time_stamp()]) ([speaker]/[speaker.client]) DEADSAY: - [text]" + speaker.dialogue_log += span_bold("([time_stamp()])") + " (" + span_bold("[speaker]/[speaker.client]") + ") " + span_underline("DEADSAY:") + " - " + span_green("[text]") + GLOB.round_text_log += span_small(span_purple(span_bold("([time_stamp()])") + " (" + span_bold("[speaker]/[speaker.client]") + ") " + span_underline("DEADSAY:") + " - [text]")) /proc/log_ghostemote(text, mob/speaker) if (config.log_emote) @@ -146,8 +146,8 @@ if (config.log_pda) WRITE_LOG(diary, "PDA: [speaker.simple_info_line()]: [html_decode(text)]") - speaker.dialogue_log += "([time_stamp()]) ([speaker]/[speaker.client]) MSG: - [text]" - GLOB.round_text_log += "([time_stamp()]) ([speaker]/[speaker.client]) MSG: - [text]" + speaker.dialogue_log += span_bold("([time_stamp()])") + " (" + span_bold("[speaker]/[speaker.client]") + ") " + span_underline("MSG:") + " - " + span_darkgreen("[text]") + GLOB.round_text_log += span_bold("([time_stamp()])") + " (" + span_bold("[speaker]/[speaker.client]") + ") " + span_underline("MSG:") + " - " + span_darkgreen("[text]") /proc/log_to_dd(text) to_world_log(text) //this comes before the config check because it can't possibly runtime diff --git a/code/_helpers/screen_objs.dm b/code/_helpers/screen_objs.dm new file mode 100644 index 00000000000..00f6bd41570 --- /dev/null +++ b/code/_helpers/screen_objs.dm @@ -0,0 +1,115 @@ +/// Takes a screen loc string in the format +/// "+-left-offset:+-pixel,+-bottom-offset:+-pixel" +/// Where the :pixel is optional, and returns +/// A list in the format (x_offset, y_offset) +/// We require context to get info out of screen locs that contain relative info, so NORTH, SOUTH, etc +/proc/screen_loc_to_offset(screen_loc, view) + if(!screen_loc) + return list(64, 64) + var/list/view_size = view_to_pixels(view) + var/x = 0 + var/y = 0 + // Time to parse for directional relative offsets + if(findtext(screen_loc, "EAST")) // If you're starting from the east, we start from the east too + x += view_size[1] + if(findtext(screen_loc, "WEST")) // HHHHHHHHHHHHHHHHHHHHHH WEST is technically a 1 tile offset from the start. Shoot me please + x += ICON_SIZE_X + if(findtext(screen_loc, "NORTH")) + y += view_size[2] + if(findtext(screen_loc, "SOUTH")) + y += ICON_SIZE_Y + + var/list/x_and_y = splittext(screen_loc, ",") + + var/list/x_pack = splittext(x_and_y[1], ":") + var/list/y_pack = splittext(x_and_y[2], ":") + + var/x_coord = x_pack[1] + var/y_coord = y_pack[1] + + if (findtext(x_coord, "CENTER")) + x += view_size[1] / 2 + + if (findtext(y_coord, "CENTER")) + y += view_size[2] / 2 + + x_coord = text2num(cut_relative_direction(x_coord)) + y_coord = text2num(cut_relative_direction(y_coord)) + + x += x_coord * ICON_SIZE_X + y += y_coord * ICON_SIZE_Y + + if(length(x_pack) > 1) + x += text2num(x_pack[2]) + if(length(y_pack) > 1) + y += text2num(y_pack[2]) + return list(x, y) + +/// Takes a list in the form (x_offset, y_offset) +/// And converts it to a screen loc string +/// Accepts an optional view string/size to force the screen_loc around, so it can't go out of scope +/proc/offset_to_screen_loc(x_offset, y_offset, view = null) + if(view) + var/list/view_bounds = view_to_pixels(view) + x_offset = clamp(x_offset, ICON_SIZE_X, view_bounds[1]) + y_offset = clamp(y_offset, ICON_SIZE_Y, view_bounds[2]) + + // Round with no argument is floor, so we get the non pixel offset here + var/x = round(x_offset / ICON_SIZE_X) + var/pixel_x = x_offset % ICON_SIZE_X + var/y = round(y_offset / ICON_SIZE_Y) + var/pixel_y = y_offset % ICON_SIZE_Y + + var/list/generated_loc = list() + generated_loc += "[x]" + if(pixel_x) + generated_loc += ":[pixel_x]" + generated_loc += ",[y]" + if(pixel_y) + generated_loc += ":[pixel_y]" + return jointext(generated_loc, "") + +/** + * Returns a valid location to place a screen object without overflowing the viewport + * + * * target: The target location as a purely number based screen_loc string "+-left-offset:+-pixel,+-bottom-offset:+-pixel" + * * target_offset: The amount we want to offset the target location by. We explictly don't care about direction here, we will try all 4 + * * view: The view variable of the client we're doing this for. We use this to get the size of the screen + * + * Returns a screen loc representing the valid location +**/ +/proc/get_valid_screen_location(target_loc, target_offset, view) + var/list/offsets = screen_loc_to_offset(target_loc) + var/base_x = offsets[1] + var/base_y = offsets[2] + + var/list/view_size = view_to_pixels(view) + + // Bias to the right, down, left, and then finally up + if(base_x + target_offset < view_size[1]) + return offset_to_screen_loc(base_x + target_offset, base_y, view) + if(base_y - target_offset > ICON_SIZE_Y) + return offset_to_screen_loc(base_x, base_y - target_offset, view) + if(base_x - target_offset > ICON_SIZE_X) + return offset_to_screen_loc(base_x - target_offset, base_y, view) + if(base_y + target_offset < view_size[2]) + return offset_to_screen_loc(base_x, base_y + target_offset, view) + stack_trace("You passed in a scren location {[target_loc]} and offset {[target_offset]} that can't be fit in the viewport Width {[view_size[1]]}, Height {[view_size[2]]}. what did you do lad") + return null // The fuck did you do lad + +/// Takes a screen_loc string and cut out any directions like NORTH or SOUTH +/proc/cut_relative_direction(fragment) + var/static/regex/regex = regex(@"([A-Z])\w+", "g") + return regex.Replace(fragment, "") + +/// Returns a screen_loc format for a tiling screen objects from start and end positions. Start should be bottom left corner, and end top right corner. +/proc/spanning_screen_loc(start_px, start_py, end_px, end_py) + var/starting_tile_x = round(start_px / ICON_SIZE_X) + start_px -= starting_tile_x * ICON_SIZE_X + var/starting_tile_y = round(start_py/ ICON_SIZE_Y) + start_py -= starting_tile_y * ICON_SIZE_Y + var/ending_tile_x = round(end_px / ICON_SIZE_X) + end_px -= ending_tile_x * ICON_SIZE_X + var/ending_tile_y = round(end_py / ICON_SIZE_Y) + end_py -= ending_tile_y * ICON_SIZE_Y + return "[starting_tile_x]:[start_px],[starting_tile_y]:[start_py] to [ending_tile_x]:[end_px],[ending_tile_y]:[end_py]" diff --git a/code/_helpers/time.dm b/code/_helpers/time.dm index 802359a1b76..b1d372f435b 100644 --- a/code/_helpers/time.dm +++ b/code/_helpers/time.dm @@ -1,3 +1,7 @@ +//Returns the world time in english +/proc/worldtime2text() + return gameTimestamp("hh:mm:ss", world.time) + #define TimeOfGame (get_game_time()) #define TimeOfTick (TICK_USAGE*0.01*world.tick_lag) diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 1a0d8434afe..c18a512db22 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -367,7 +367,7 @@ Turf and target are seperate in case you want to teleport some distance from a t if(isAI(src)) var/mob/living/silicon/ai/A = src oldname = null//don't bother with the records update crap - //to_world("[newname] is the AI!") + //to_world(span_world("[newname] is the AI!")) //world << sound('sound/AI/newAI.ogg') // Set eyeobj name A.SetName(newname) diff --git a/code/_helpers/verbs.dm b/code/_helpers/verbs.dm new file mode 100644 index 00000000000..8a35bb9c6cf --- /dev/null +++ b/code/_helpers/verbs.dm @@ -0,0 +1,94 @@ +/** + * handles adding verbs and updating the stat panel browser + * + * pass the verb type path to this instead of adding it directly to verbs so the statpanel can update + * Arguments: + * * target - Who the verb is being added to, client or mob typepath + * * verb - typepath to a verb, or a list of verbs, supports lists of lists + */ +/proc/add_verb(client/target, verb_or_list_to_add) + if(!target) + CRASH("add_verb called without a target") + if(IsAdminAdvancedProcCall()) + return + var/mob/mob_target = null + + if(ismob(target)) + mob_target = target + target = mob_target.client + else if(!istype(target, /client)) + CRASH("add_verb called on a non-mob and non-client") + var/list/verbs_list = list() + if(!islist(verb_or_list_to_add)) + verbs_list += verb_or_list_to_add + else + var/list/verb_listref = verb_or_list_to_add + var/list/elements_to_process = verb_listref.Copy() + while(length(elements_to_process)) + var/element_or_list = elements_to_process[length(elements_to_process)] //Last element + elements_to_process.len-- + if(islist(element_or_list)) + elements_to_process += element_or_list //list/a += list/b adds the contents of b into a, not the reference to the list itself + else + verbs_list += element_or_list + + if(mob_target) + mob_target.verbs += verbs_list + if(!target) + return //Our work is done. + else + target.verbs += verbs_list + + var/list/output_list = list() + for(var/thing in verbs_list) + var/procpath/verb_to_add = thing + output_list[++output_list.len] = list(verb_to_add.category, verb_to_add.name, verb_to_add.desc) + + target.stat_panel.send_message("add_verb_list", output_list) + +/** + * handles removing verb and sending it to browser to update, use this for removing verbs + * + * pass the verb type path to this instead of removing it from verbs so the statpanel can update + * Arguments: + * * target - Who the verb is being removed from, client or mob typepath + * * verb - typepath to a verb, or a list of verbs, supports lists of lists + */ +/proc/remove_verb(client/target, verb_or_list_to_remove) + if(IsAdminAdvancedProcCall()) + return + + var/mob/mob_target = null + if(ismob(target)) + mob_target = target + target = mob_target.client + else if(!istype(target, /client)) + CRASH("remove_verb called on a non-mob and non-client") + + var/list/verbs_list = list() + if(!islist(verb_or_list_to_remove)) + verbs_list += verb_or_list_to_remove + else + var/list/verb_listref = verb_or_list_to_remove + var/list/elements_to_process = verb_listref.Copy() + while(length(elements_to_process)) + var/element_or_list = elements_to_process[length(elements_to_process)] //Last element + elements_to_process.len-- + if(islist(element_or_list)) + elements_to_process += element_or_list //list/a += list/b adds the contents of b into a, not the reference to the list itself + else + verbs_list += element_or_list + + if(mob_target) + mob_target.verbs -= verbs_list + if(!target) + return //Our work is done. + else + target.verbs -= verbs_list + + var/list/output_list = list() + for(var/thing in verbs_list) + var/procpath/verb_to_remove = thing + output_list[++output_list.len] = list(verb_to_remove.category, verb_to_remove.name) + + target.stat_panel.send_message("remove_verb_list", output_list) diff --git a/code/_helpers/view.dm b/code/_helpers/view.dm index be60a56697f..4615e0c97da 100644 --- a/code/_helpers/view.dm +++ b/code/_helpers/view.dm @@ -11,6 +11,15 @@ viewY = text2num(viewrangelist[2]) return list(viewX, viewY) +/// Takes a string or num view, and converts it to pixel width/height in a list(pixel_width, pixel_height) +/proc/view_to_pixels(view) + if(!view) + return list(0, 0) + var/list/view_info = getviewsize(view) + view_info[1] *= ICON_SIZE_X + view_info[2] *= ICON_SIZE_Y + return view_info + // Used to get `atom/O as obj|mob|turf in view()` to match against strings containing apostrophes immediately after substrings that match to other objects. Somehow. - Ater /proc/_validate_atom(atom/A) - return view() \ No newline at end of file + return view() diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index d303529c1e0..3562ed09a7f 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -286,16 +286,9 @@ /atom/proc/AltClick(var/mob/user) var/turf/T = get_turf(src) if(T && user.TurfAdjacent(T)) - user.ToggleTurfTab(T) + user.set_listed_turf(T) return 1 -/mob/proc/ToggleTurfTab(var/turf/T) - if(listed_turf == T) - listed_turf = null - else - listed_turf = T - client.statpanel = "Turf" - /mob/proc/TurfAdjacent(var/turf/T) return T.AdjacentQuick(src) diff --git a/code/_onclick/hud/ability_screen_objects.dm b/code/_onclick/hud/ability_screen_objects.dm index 905676ff17a..250e93823aa 100644 --- a/code/_onclick/hud/ability_screen_objects.dm +++ b/code/_onclick/hud/ability_screen_objects.dm @@ -312,7 +312,7 @@ if(object_used && verb_to_call) call(object_used,verb_to_call)(arguments_to_use) // call(object_used,verb_to_call)(arguments_to_use) -// to_world("Attempted to call([object_used],[verb_to_call])([arguments_to_use])") +// to_world(span_world("Attempted to call([object_used],[verb_to_call])([arguments_to_use])")) // if(hascall(object_used, verb_to_call)) // call(object_used,verb_to_call)(arguments_to_use) // else diff --git a/code/_onclick/hud/action.dm b/code/_onclick/hud/action.dm deleted file mode 100644 index 288c4799226..00000000000 --- a/code/_onclick/hud/action.dm +++ /dev/null @@ -1,228 +0,0 @@ -#define AB_ITEM 1 -#define AB_SPELL 2 -#define AB_INNATE 3 -#define AB_GENERIC 4 - - -/datum/action - var/name = "Generic Action" - var/action_type = AB_ITEM - var/procname = null - var/atom/movable/target = null - var/check_flags = 0 - var/processing = 0 - var/active = 0 - var/obj/screen/movable/action_button/button = null - var/button_icon = 'icons/mob/actions.dmi' - var/button_icon_state = "default" - var/background_icon_state = "bg_default" - var/mob/living/owner - -/datum/action/New(var/Target) - target = Target - -/datum/action/Destroy() - if(owner) - Remove(owner) - target = null - QDEL_NULL(button) - return ..() - -/datum/action/proc/Grant(mob/living/T) - if(owner) - if(owner == T) - return - Remove(owner) - owner = T - owner.actions.Add(src) - owner.update_action_buttons() - return - -/datum/action/proc/Remove(mob/living/T) - if(button) - if(T.client) - T.client.screen -= button - QDEL_NULL(button) - T.actions.Remove(src) - T.update_action_buttons() - owner = null - return - -/datum/action/proc/Trigger() - if(!Checks()) - return - switch(action_type) - if(AB_ITEM) - if(target) - var/obj/item/item = target - item.ui_action_click() - //if(AB_SPELL) - // if(target) - // var/obj/effect/proc_holder/spell = target - // spell.Click() - if(AB_INNATE) - if(!active) - Activate() - else - Deactivate() - if(AB_GENERIC) - if(target && procname) - call(target,procname)(usr) - return - -/datum/action/proc/Activate() - return - -/datum/action/proc/Deactivate() - return - -/datum/action/process() - return - -/datum/action/proc/CheckRemoval(mob/living/user) // 1 if action is no longer valid for this mob and should be removed - return 0 - -/datum/action/proc/IsAvailable() - return Checks() - -/datum/action/proc/Checks()// returns 1 if all checks pass - if(!owner) - return 0 - if(check_flags & AB_CHECK_RESTRAINED) - if(owner.restrained()) - return 0 - if(check_flags & AB_CHECK_STUNNED) - if(owner.stunned) - return 0 - if(check_flags & AB_CHECK_LYING) - if(owner.lying) - return 0 - if(check_flags & AB_CHECK_ALIVE) - if(owner.stat) - return 0 - if(check_flags & AB_CHECK_INSIDE) - if(!(target in owner)) - return 0 - return 1 - -/datum/action/proc/UpdateName() - return name - -/obj/screen/movable/action_button - var/datum/action/owner - screen_loc = "WEST,NORTH" - -/obj/screen/movable/action_button/Click(location,control,params) - var/list/modifiers = params2list(params) - if(modifiers["shift"]) - moved = 0 - return 1 - if(!usr.checkClickCooldown()) - return - owner.Trigger() - return 1 - -/obj/screen/movable/action_button/proc/UpdateIcon() - if(!owner) - return - icon = owner.button_icon - icon_state = owner.background_icon_state - - cut_overlays() - var/image/img - if(owner.action_type == AB_ITEM && owner.target) - var/obj/item/I = owner.target - img = image(I.icon, src , I.icon_state) - else if(owner.button_icon && owner.button_icon_state) - img = image(owner.button_icon,src,owner.button_icon_state) - img.pixel_x = 0 - img.pixel_y = 0 - add_overlay(img) - - if(!owner.IsAvailable()) - color = rgb(128,0,0,128) - else - color = rgb(255,255,255,255) - -//Hide/Show Action Buttons ... Button -/obj/screen/movable/action_button/hide_toggle - name = "Hide Buttons" - icon = 'icons/mob/actions.dmi' - icon_state = "bg_default" - var/hidden = 0 - -/obj/screen/movable/action_button/hide_toggle/Click() - usr.hud_used.action_buttons_hidden = !usr.hud_used.action_buttons_hidden - - hidden = usr.hud_used.action_buttons_hidden - if(hidden) - name = "Show Buttons" - else - name = "Hide Buttons" - UpdateIcon() - usr.update_action_buttons() - - -/obj/screen/movable/action_button/hide_toggle/proc/InitialiseIcon(var/mob/living/user) - if(isalien(user)) - icon_state = "bg_alien" - else - icon_state = "bg_default" - UpdateIcon() - return - -/obj/screen/movable/action_button/hide_toggle/UpdateIcon() - cut_overlays() - var/image/img = image(icon,src,hidden?"show":"hide") - add_overlay(img) - return - -//This is the proc used to update all the action buttons. Properly defined in /mob/living/ -/mob/proc/update_action_buttons() - return - -#define AB_WEST_OFFSET 4 -#define AB_NORTH_OFFSET 26 -#define AB_MAX_COLUMNS 10 - -/datum/hud/proc/ButtonNumberToScreenCoords(var/number) // TODO : Make this zero-indexed for readabilty - var/row = round((number-1)/AB_MAX_COLUMNS) - var/col = ((number - 1)%(AB_MAX_COLUMNS)) + 1 - var/coord_col = "+[col-1]" - var/coord_col_offset = AB_WEST_OFFSET+2*col - var/coord_row = "[-1 - row]" - var/coord_row_offset = AB_NORTH_OFFSET - return "WEST[coord_col]:[coord_col_offset],NORTH[coord_row]:[coord_row_offset]" - -/datum/hud/proc/SetButtonCoords(var/obj/screen/button,var/number) - var/row = round((number-1)/AB_MAX_COLUMNS) - var/col = ((number - 1)%(AB_MAX_COLUMNS)) + 1 - var/x_offset = 32*(col-1) + AB_WEST_OFFSET + 2*col - var/y_offset = -32*(row+1) + AB_NORTH_OFFSET - - var/matrix/M = matrix() - M.Translate(x_offset,y_offset) - button.transform = M - -//Presets for item actions -/datum/action/item_action - check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_LYING|AB_CHECK_ALIVE|AB_CHECK_INSIDE - -/datum/action/item_action/CheckRemoval(mob/living/user) - return !(target in user) - -/datum/action/item_action/hands_free - check_flags = AB_CHECK_ALIVE|AB_CHECK_INSIDE - -#undef AB_WEST_OFFSET -#undef AB_NORTH_OFFSET -#undef AB_MAX_COLUMNS - - -/datum/action/innate/ - action_type = AB_INNATE - -#undef AB_ITEM -#undef AB_SPELL -#undef AB_INNATE -#undef AB_GENERIC diff --git a/code/_onclick/hud/action/action.dm b/code/_onclick/hud/action/action.dm new file mode 100644 index 00000000000..7e0c3ece55e --- /dev/null +++ b/code/_onclick/hud/action/action.dm @@ -0,0 +1,156 @@ +/datum/action + var/name = "Generic Action" + var/atom/movable/target = null + var/check_flags = 0 + var/processing = 0 + var/obj/screen/movable/action_button/button = null + var/button_icon = 'icons/mob/actions.dmi' + var/button_icon_state = "default" + var/background_icon_state = "bg_default" + var/mob/living/owner + +/datum/action/New(Target) + target = Target + button = new + button.linked_action = src + button.name = name + +/datum/action/Destroy() + if(owner) + Remove(owner) + target = null + QDEL_NULL(button) + return ..() + +/datum/action/proc/Grant(mob/living/L) + if(owner) + if(owner == L) + return + Remove(owner) + owner = L + L.actions += src + if(L.client) + L.client.screen += button + L.update_action_buttons(TRUE) + +/datum/action/proc/Remove(mob/living/L) + if(L.client) + L.client.screen -= button + button.moved = FALSE + L.actions -= src + L.update_action_buttons(TRUE) + owner = null + +/datum/action/proc/Trigger() + if(!IsAvailable()) + return 0 + return 1 + +/datum/action/process() + return + +/datum/action/proc/IsAvailable() + if(!owner) + return 0 + if(check_flags & AB_CHECK_RESTRAINED) + if(owner.restrained()) + return 0 + if(check_flags & AB_CHECK_STUNNED) + if(owner.stunned) + return 0 + if(check_flags & AB_CHECK_LYING) + if(owner.lying) + return 0 + if(check_flags & AB_CHECK_CONSCIOUS) + if(owner.stat) + return 0 + return 1 + +/datum/action/proc/UpdateButtonIcon() + if(button) + button.icon = button_icon + button.icon_state = background_icon_state + + ApplyIcon(button) + + if(!IsAvailable()) + button.color = rgb(128, 0, 0, 128) + else + button.color = rgb(255, 255, 255, 255) + return 1 + +/datum/action/proc/ApplyIcon(obj/screen/movable/action_button/current_button) + current_button.cut_overlays() + if(button_icon && button_icon_state) + var/image/img + img = image(button_icon, current_button, button_icon_state) + img.pixel_x = 0 + img.pixel_y = 0 + current_button.add_overlay(img) + +//Presets for item actions +/datum/action/item_action + check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_LYING|AB_CHECK_CONSCIOUS + +/datum/action/item_action/New(Target) + . = ..() + var/obj/item/I = target + I.actions += src + +/datum/action/item_action/Destroy() + var/obj/item/I = target + I.actions -= src + return ..() + +/datum/action/item_action/Trigger() + if(!..()) + return 0 + if(target) + var/obj/item/I = target + I.ui_action_click(owner, src.type) + return 1 + +/datum/action/item_action/ApplyIcon(obj/screen/movable/action_button/current_button) + current_button.cut_overlays() + if(target) + var/mutable_appearance/ma = new(target.appearance) + ma.plane = FLOAT_PLANE + ma.layer = FLOAT_LAYER + ma.pixel_x = 0 + ma.pixel_y = 0 + current_button.add_overlay(ma) + +/datum/action/item_action/hands_free + check_flags = AB_CHECK_CONSCIOUS + + +/datum/action/innate + check_flags = 0 + var/active = 0 + +/datum/action/innate/Trigger() + if(!..()) + return 0 + if(!active) + Activate() + else + Deactivate() + return 1 + +/datum/action/innate/proc/Activate() + return + +/datum/action/innate/proc/Deactivate() + return + +//Preset for action that call specific procs (consider innate). +/datum/action/generic + check_flags = 0 + var/procname + +/datum/action/generic/Trigger() + if(!..()) + return 0 + if(target && procname) + call(target, procname)(usr) + return 1 diff --git a/code/_onclick/hud/action/action_screen_objects.dm b/code/_onclick/hud/action/action_screen_objects.dm new file mode 100644 index 00000000000..f4b10fc001d --- /dev/null +++ b/code/_onclick/hud/action/action_screen_objects.dm @@ -0,0 +1,132 @@ + +/obj/screen/movable/action_button + var/datum/action/linked_action + screen_loc = null + +/obj/screen/movable/action_button/Click(location,control,params) + var/list/modifiers = params2list(params) + if(modifiers["shift"]) + moved = FALSE + usr.update_action_buttons() + return 1 + if(!usr.checkClickCooldown()) + return + linked_action.Trigger() + return 1 +//Hide/Show Action Buttons ... Button +/obj/screen/movable/action_button/hide_toggle + name = "Hide Buttons" + icon = 'icons/mob/actions.dmi' + icon_state = "bg_default" + var/hidden = 0 + +/obj/screen/movable/action_button/hide_toggle/Click() + usr.hud_used.action_buttons_hidden = !usr.hud_used.action_buttons_hidden + + hidden = usr.hud_used.action_buttons_hidden + if(hidden) + name = "Show Buttons" + else + name = "Hide Buttons" + UpdateIcon() + usr.update_action_buttons() + +/obj/screen/movable/action_button/hide_toggle/proc/InitialiseIcon(var/mob/living/user) + if(isalien(user)) + icon_state = "bg_alien" + else + icon_state = "bg_default" + UpdateIcon() + +/obj/screen/movable/action_button/hide_toggle/proc/UpdateIcon() + cut_overlays() + var/image/img = image(icon, src, hidden ? "show" : "hide") + add_overlay(img) + +/obj/screen/movable/action_button/MouseEntered(location, control, params) + openToolTip(usr, src, params, title = name, content = desc) + +/obj/screen/movable/action_button/MouseExited(location, control, params) + closeToolTip(usr) + +//used to update the buttons icon. +/mob/proc/update_action_buttons_icon() + return + +/mob/living/update_action_buttons_icon() + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() + +//This is the proc used to update all the action buttons. Properly defined in /mob/living/ +/mob/proc/update_action_buttons(reload_screen) + return + +/mob/living/update_action_buttons(reload_screen) + if(!hud_used || !client) + return + + if(!hud_used.hud_shown) //Hud toggled to minimal + return + + var/button_number = 0 + + if(hud_used.action_buttons_hidden) + for(var/datum/action/A in actions) + A.button.screen_loc = null + if(reload_screen) + client.screen += A.button + else + for(var/datum/action/A in actions) + button_number++ + A.UpdateButtonIcon() + var/obj/screen/movable/action_button/B = A.button + if(!B.moved) + B.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number) + else + B.screen_loc = B.moved + if(reload_screen) + client.screen += B + + if(!button_number) + hud_used.hide_actions_toggle?.screen_loc = null + return + + // not exactly sure how this happens but it does + if(hud_used.hide_actions_toggle) + if(!hud_used.hide_actions_toggle.moved) + hud_used.hide_actions_toggle.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number+1) + else + hud_used.hide_actions_toggle.screen_loc = hud_used.hide_actions_toggle.moved + if(reload_screen) + client.screen += hud_used.hide_actions_toggle + +#define AB_WEST_OFFSET 4 +#define AB_NORTH_OFFSET 26 +#define AB_MAX_COLUMNS 10 + +/datum/hud/proc/ButtonNumberToScreenCoords(var/number) // TODO : Make this zero-indexed for readabilty + var/row = round((number-1)/AB_MAX_COLUMNS) + var/col = ((number - 1)%(AB_MAX_COLUMNS)) + 1 + + var/coord_col = "+[col-1]" + var/coord_col_offset = AB_WEST_OFFSET+2*col + + var/coord_row = "[-1 - row]" + var/coord_row_offset = AB_NORTH_OFFSET + + return "WEST[coord_col]:[coord_col_offset],NORTH[coord_row]:[coord_row_offset]" + +/datum/hud/proc/SetButtonCoords(var/obj/screen/button,var/number) + var/row = round((number-1)/AB_MAX_COLUMNS) + var/col = ((number - 1)%(AB_MAX_COLUMNS)) + 1 + var/x_offset = 32*(col-1) + AB_WEST_OFFSET + 2*col + var/y_offset = -32*(row+1) + AB_NORTH_OFFSET + + var/matrix/M = matrix() + M.Translate(x_offset,y_offset) + button.transform = M + +#undef AB_WEST_OFFSET +#undef AB_NORTH_OFFSET +#undef AB_MAX_COLUMNS diff --git a/code/_onclick/hud/action/types/item.dm b/code/_onclick/hud/action/types/item.dm new file mode 100644 index 00000000000..df2d770aec5 --- /dev/null +++ b/code/_onclick/hud/action/types/item.dm @@ -0,0 +1,161 @@ +// Generic Classes +/datum/action/item_action/activate + +/datum/action/item_action/activate/New(Target, name) + . = ..() + src.name = name + button.name = name + +// Specific names +/datum/action/item_action/toggle_grippers + name = "Toggle Grippers" + +/datum/action/item_action/toggle_talons + name = "Toggle Talons" + +/datum/action/item_action/toggle_goggles + name = "Toggle Goggles" + +/datum/action/item_action/toggle_shield_projector + name = "Toggle Shield Projector" + +/datum/action/item_action/toggle_tesla_armor + name = "Toggle Tesla Armor" + +/datum/action/item_action/remove_replace_paddles + name = "Remove/Replace Paddles" + +/datum/action/item_action/toggle_flashlight + name = "Toggle Flashlight" + +/datum/action/item_action/toggle_shield + name = "Toggle Shield" + +/datum/action/item_action/toggle_heatsink + name = "Toggle Heatsink" + +/datum/action/item_action/remove_replace_handset + name = "Remove/Replace Handset" + +/datum/action/item_action/command + name = "Command" + +/datum/action/item_action/toggle_jetpack + name = "Toggle Jetpack" + +/datum/action/item_action/toggle_cataloguer + name = "Toggle Cataloguer" + +/datum/action/item_action/toggle_eyepatch + name = "Toggle Eyepatch" + +/datum/action/item_action/hands_free/change_scanning_pattern + name = "Change Scanning Pattern" + +/datum/action/item_action/toggle_hud + name = "Toggle HUD" + +/datum/action/item_action/toggle_mode + name = "Toggle Mode" + +/datum/action/item_action/flip_welding_goggles + name = "Flip Welding Goggles" + +/datum/action/item_action/toggle_monocle + name = "Toggle Monocle" + +/datum/action/item_action/adjust_orange_goggles + name = "Adjust Orange Goggles" + +/datum/action/item_action/ar_console_crew + name = "AR Console (Crew Monitor)" + +/datum/action/item_action/ar_console_security_alerts + name = "AR Console (Security Alerts)" + +/datum/action/item_action/ar_console_station_alerts + name = "AR Console (Station Alerts)" + +/datum/action/item_action/ar_console_all_alerts + name = "AR Console (All Alerts)" + +/datum/action/item_action/toggle_head_light + name = "Toggle Head-light" + +/datum/action/item_action/toggle_visor + name = "Toggle Visor" + +/datum/action/item_action/flip_welding_mask + name = "Flip Welding Mask" + +/datum/action/item_action/adjust_breath_mask + name = "Adjust Breath Mask" + +/datum/action/item_action/toggle_feeding_port + name = "Toggle Feeding Port" + +/datum/action/item_action/halt + name = "HALT!" + +/datum/action/item_action/hands_free/redraw_design + name = "Redraw Design" + +/datum/action/item_action/toggle_magboots + name = "Toggle Magboots" + +/datum/action/item_action/toggle_magclaws + name = "Toggle Magclaws" + +/datum/action/item_action/activate_jump_boots + name = "Activate Jump Boots" + +/datum/action/item_action/toggle_helmet_light + name = "Toggle Helmet Light" + +/datum/action/item_action/hardsuit_interface + name = "Hardsuit Interface" + +/datum/action/item_action/toggle_helmet + name = "Toggle Helmet" + +/datum/action/item_action/toggle_knight_headgear + name = "Toggle Knight Headgear" + +/datum/action/item_action/toggle_hood + name = "Toggle Hood" + +/datum/action/item_action/adjust_cloak + name = "Adjust Cloak" + +/datum/action/item_action/adjust_poncho + name = "Adjust Poncho" + +/datum/action/item_action/pull_on_gaiter + name = "Pull On Gaiter" + +/datum/action/item_action/toggle_uv_light + name = "Toggle UV Light" + +/datum/action/item_action/toggle_light + name = "Toggle Light" + +/datum/action/item_action/use_scope + name = "Use Scope" + +/datum/action/item_action/aim_down_sights + name = "Aim Down Sights" + +/datum/action/item_action/toggle_gunlight + name = "Toggle Gun-light" + +/datum/action/item_action/toggle_internal_generator + name = "Toggle Internal Generator" + +/datum/action/item_action/toggle_stock + name = "Toggle Stock" + +/datum/action/item_action/toggle_pom_pom + name = "Toggle Pom-Pom" + +/datum/action/item_action/toggle_mlembulance + name = "Toggle Mlembulance Mode" diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 123d94a7d84..7ba7bba1e1e 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -207,6 +207,7 @@ var/list/global_huds = list( /datum/hud/Destroy() . = ..() QDEL_NULL_LIST(minihuds) + QDEL_NULL(hide_actions_toggle) grab_intent = null hurt_intent = null disarm_intent = null @@ -322,10 +323,12 @@ var/list/global_huds = list( return 0 mymob.create_mob_hud(src) + hide_actions_toggle = new() + hide_actions_toggle.InitialiseIcon(mymob) persistant_inventory_update() mymob.reload_fullscreen() // Reload any fullscreen overlays this mob has. - mymob.update_action_buttons() + mymob.update_action_buttons(TRUE) reorganize_alerts() /mob/proc/create_mob_hud(datum/hud/HUD, apply_to_client = TRUE) @@ -404,10 +407,11 @@ var/list/global_huds = list( hud_used?.action_intent.screen_loc = ui_acti //Restore intent selection to the original position client.screen += zone_sel //This one is a special snowflake + client.screen += hud_used.hide_actions_toggle hud_used.hidden_inventory_update() hud_used.persistant_inventory_update() - update_action_buttons() + update_action_buttons(TRUE) hud_used.reorganize_alerts() return TRUE @@ -467,7 +471,7 @@ var/list/global_huds = list( hud_used.hidden_inventory_update() hud_used.persistant_inventory_update() - update_action_buttons() + update_action_buttons(TRUE) /mob/proc/add_click_catcher() client.screen += client.void diff --git a/code/_onclick/hud/movable_screen_objects.dm b/code/_onclick/hud/movable_screen_objects.dm index 39d36738aa0..53e64c8b246 100644 --- a/code/_onclick/hud/movable_screen_objects.dm +++ b/code/_onclick/hud/movable_screen_objects.dm @@ -9,9 +9,10 @@ //Not tied to the grid, places it's center where the cursor is /obj/screen/movable + mouse_drag_pointer = 'icons/effects/mouse_pointers/screen_drag.dmi' var/snap2grid = FALSE var/moved = FALSE - var/x_off = -16 + var/x_off = -16 var/y_off = -16 //Snap Screen Object @@ -22,30 +23,33 @@ /obj/screen/movable/MouseDrop(over_object, src_location, over_location, src_control, over_control, params) - var/list/PM = params2list(params) - - //No screen-loc information? abort. - if(!PM || !PM["screen-loc"]) + var/position = mouse_params_to_position(params) + if(!position) return - //Split screen-loc up into X+Pixel_X and Y+Pixel_Y - var/list/screen_loc_params = splittext(PM["screen-loc"], ",") + screen_loc = position + moved = screen_loc - //Split X+Pixel_X up into list(X, Pixel_X) - var/list/screen_loc_X = splittext(screen_loc_params[1],":") - screen_loc_X[1] = encode_screen_X(text2num(screen_loc_X[1])) - //Split Y+Pixel_Y up into list(Y, Pixel_Y) - var/list/screen_loc_Y = splittext(screen_loc_params[2],":") - screen_loc_Y[1] = encode_screen_Y(text2num(screen_loc_Y[1])) +/// Takes mouse parmas as input, returns a string representing the appropriate mouse position +/obj/screen/movable/proc/mouse_params_to_position(params) + var/list/modifiers = params2list(params) + + //No screen-loc information? abort. + if(!LAZYACCESS(modifiers, SCREEN_LOC)) + return + + var/client/our_client = usr.client + var/list/offset = screen_loc_to_offset(LAZYACCESS(modifiers, SCREEN_LOC), our_client?.view) if(snap2grid) //Discard Pixel Values - screen_loc = "[screen_loc_X[1]],[screen_loc_Y[1]]" - + offset[1] = FLOOR(offset[1], ICON_SIZE_X) // drops any pixel offset + offset[2] = FLOOR(offset[2], ICON_SIZE_Y) // drops any pixel offset else //Normalise Pixel Values (So the object drops at the center of the mouse, not 16 pixels off) - var/pix_X = text2num(screen_loc_X[2]) + x_off - var/pix_Y = text2num(screen_loc_Y[2]) + y_off - screen_loc = "[screen_loc_X[1]]:[pix_X],[screen_loc_Y[1]]:[pix_Y]" + offset[1] += x_off + offset[2] += y_off + return offset_to_screen_loc(offset[1], offset[2], our_client?.view) +// Must stay for now, for subtypes /obj/screen/movable/proc/encode_screen_X(X) var/view_dist = world.view if(view_dist) diff --git a/code/_onclick/hud/screen_objects_vr.dm b/code/_onclick/hud/screen_objects_vr.dm index ea4fbaa9a47..d3e43bb628a 100644 --- a/code/_onclick/hud/screen_objects_vr.dm +++ b/code/_onclick/hud/screen_objects_vr.dm @@ -6,23 +6,23 @@ if("darkness") var/turf/T = get_turf(usr) var/darkness = round(1 - T.get_lumcount(),0.1) - to_chat(usr,span_notice("Darkness: [darkness]")) + to_chat(usr,span_notice(span_bold("Darkness:") + " [darkness]")) if("energy") var/mob/living/simple_mob/shadekin/SK = usr if(istype(SK)) - to_chat(usr,span_notice("Energy: [SK.energy] ([SK.dark_gains])")) + to_chat(usr,span_notice(span_bold("Energy:") + " [SK.energy] ([SK.dark_gains])")) if("shadekin status") var/turf/T = get_turf(usr) if(T) var/darkness = round(1 - T.get_lumcount(),0.1) - to_chat(usr,span_notice("Darkness: [darkness]")) + to_chat(usr,span_notice(span_bold("Darkness:") + " [darkness]")) var/mob/living/carbon/human/H = usr if(istype(H) && istype(H.species, /datum/species/shadekin)) - to_chat(usr,span_notice("Energy: [H.shadekin_get_energy(H)]")) + to_chat(usr,span_notice(span_bold("Energy:") + " [H.shadekin_get_energy(H)]")) if("glamour") var/mob/living/carbon/human/H = usr if(istype(H)) - to_chat(usr,span_notice("Energy: [H.species.lleill_energy]/[H.species.lleill_energy_max]")) + to_chat(usr,span_notice(span_bold("Energy:") + " [H.species.lleill_energy]/[H.species.lleill_energy_max]")) if("danger level") var/mob/living/carbon/human/H = usr if(istype(H) && istype(H.species, /datum/species/xenochimera)) diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm index 75d1208a402..f8dc673b5f9 100644 --- a/code/_onclick/observer.dm +++ b/code/_onclick/observer.dm @@ -41,7 +41,7 @@ if(modifiers["alt"]) // alt and alt-gr (rightalt) var/turf/T = get_turf(A) if(T && TurfAdjacent(T)) - ToggleTurfTab(T) + set_listed_turf(T) return // You are responsible for checking config.ghost_interaction when you override this function // Not all of them require checking, see below diff --git a/code/_onclick/rig.dm b/code/_onclick/rig.dm index 2284226b373..dc57ad2150c 100644 --- a/code/_onclick/rig.dm +++ b/code/_onclick/rig.dm @@ -1,11 +1,11 @@ -#define MIDDLE_CLICK 0 -#define ALT_CLICK 1 -#define CTRL_CLICK 2 +#define HARDSUIT_MIDDLE_CLICK 0 +#define HARDSUIT_ALT_CLICK 1 +#define HARDSUIT_CTRL_CLICK 2 #define MAX_HARDSUIT_CLICK_MODE 2 /client - var/hardsuit_click_mode = MIDDLE_CLICK + var/hardsuit_click_mode = HARDSUIT_MIDDLE_CLICK /client/verb/toggle_hardsuit_mode() set name = "Toggle Hardsuit Activation Mode" @@ -17,32 +17,32 @@ hardsuit_click_mode = 0 switch(hardsuit_click_mode) - if(MIDDLE_CLICK) + if(HARDSUIT_MIDDLE_CLICK) to_chat(src, "Hardsuit activation mode set to middle-click.") - if(ALT_CLICK) + if(HARDSUIT_ALT_CLICK) to_chat(src, "Hardsuit activation mode set to alt-click.") - if(CTRL_CLICK) + if(HARDSUIT_CTRL_CLICK) to_chat(src, "Hardsuit activation mode set to control-click.") else // should never get here, but just in case: soft_assert(0, "Bad hardsuit click mode: [hardsuit_click_mode] - expected 0 to [MAX_HARDSUIT_CLICK_MODE]") to_chat(src, "Somehow you bugged the system. Setting your hardsuit mode to middle-click.") - hardsuit_click_mode = MIDDLE_CLICK + hardsuit_click_mode = HARDSUIT_MIDDLE_CLICK /mob/living/MiddleClickOn(atom/A) - if(client && client.hardsuit_click_mode == MIDDLE_CLICK) + if(client && client.hardsuit_click_mode == HARDSUIT_MIDDLE_CLICK) if(HardsuitClickOn(A)) return ..() /mob/living/AltClickOn(atom/A) - if(client && client.hardsuit_click_mode == ALT_CLICK) + if(client && client.hardsuit_click_mode == HARDSUIT_ALT_CLICK) if(HardsuitClickOn(A)) return ..() /mob/living/CtrlClickOn(atom/A) - if(client && client.hardsuit_click_mode == CTRL_CLICK) + if(client && client.hardsuit_click_mode == HARDSUIT_CTRL_CLICK) if(HardsuitClickOn(A)) return ..() @@ -78,7 +78,7 @@ return 1 return 0 -#undef MIDDLE_CLICK -#undef ALT_CLICK -#undef CTRL_CLICK +#undef HARDSUIT_MIDDLE_CLICK +#undef HARDSUIT_ALT_CLICK +#undef HARDSUIT_CTRL_CLICK #undef MAX_HARDSUIT_CLICK_MODE diff --git a/code/controllers/autotransfer.dm b/code/controllers/autotransfer.dm index e94163ea464..d303142886a 100644 --- a/code/controllers/autotransfer.dm +++ b/code/controllers/autotransfer.dm @@ -19,7 +19,7 @@ var/datum/controller/transfer_controller/transfer_controller //VOREStation Edit START if (round_duration_in_ds >= shift_last_vote - 2 MINUTES) shift_last_vote = 99999999 //Setting to a stupidly high number since it'll be not used again. - to_world("Warning: You have one hour left in the shift. Wrap up your scenes in the next 60 minutes before the transfer is called.") //VOREStation Edit + to_world(span_world(span_notice("Warning: You have one hour left in the shift. Wrap up your scenes in the next 60 minutes before the transfer is called."))) //VOREStation Edit if (round_duration_in_ds >= shift_hard_end - 1 MINUTE) init_shift_change(null, 1) shift_hard_end = timerbuffer + config.vote_autotransfer_interval //If shuttle somehow gets recalled, let's force it to call again next time a vote would occur. diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index bd846d11bcd..ff3deb6adbd 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -71,7 +71,7 @@ var/list/gamemode_cache = list() var/static/respawn = 1 var/static/respawn_time = 3000 // time before a dead player is allowed to respawn (in ds, though the config file asks for minutes, and it's converted below) - var/static/respawn_message = span_notice("Make sure to play a different character, and please roleplay correctly!") + var/static/respawn_message = span_boldnotice("Make sure to play a different character, and please roleplay correctly!") var/static/guest_jobban = 1 var/static/usewhitelist = 0 @@ -529,7 +529,7 @@ var/list/gamemode_cache = list() config.respawn_time = raw_minutes MINUTES if ("respawn_message") - config.respawn_message = span_notice("[value]") + config.respawn_message = span_boldnotice("[value]") if ("servername") config.server_name = value diff --git a/code/controllers/controller.dm b/code/controllers/controller.dm index c9d5f1e5650..1f0a01a072c 100644 --- a/code/controllers/controller.dm +++ b/code/controllers/controller.dm @@ -16,4 +16,4 @@ /datum/controller/proc/Recover() -/datum/controller/proc/stat_entry() +/datum/controller/proc/stat_entry(msg) diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm index 3022944ec32..dfe8bc7234d 100644 --- a/code/controllers/failsafe.dm +++ b/code/controllers/failsafe.dm @@ -96,8 +96,9 @@ var/datum/controller/failsafe/Failsafe /datum/controller/failsafe/proc/defcon_pretty() return defcon -/datum/controller/failsafe/stat_entry() +/datum/controller/failsafe/stat_entry(msg) if(!statclick) statclick = new/obj/effect/statclick/debug(null, "Initializing...", src) - stat("Failsafe Controller:", statclick.update("Defcon: [defcon_pretty()] (Interval: [Failsafe.processing_interval] | Iteration: [Failsafe.master_iteration])")) + msg = "Failsafe Controller: [statclick.update("Defcon: [defcon_pretty()] (Interval: [Failsafe.processing_interval] | Iteration: [Failsafe.master_iteration])")]" + return msg diff --git a/code/controllers/globals.dm b/code/controllers/globals.dm index cd6e7544dd4..bf9c7e1e9ce 100644 --- a/code/controllers/globals.dm +++ b/code/controllers/globals.dm @@ -32,11 +32,12 @@ GLOBAL_REAL(GLOB, /datum/controller/global_vars) return ..() -/datum/controller/global_vars/stat_entry() +/datum/controller/global_vars/stat_entry(msg) if(!statclick) statclick = new/obj/effect/statclick/debug(null, "Initializing...", src) - stat("GLOB:", statclick.update("Edit")) + msg = "GLOB: [statclick.update("Edit")]" + return msg /datum/controller/global_vars/vv_edit_var(var_name, var_value) if(gvars_datum_protected_varlist[var_name]) diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 49f34a5c978..049e687a95f 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -582,12 +582,14 @@ GLOBAL_REAL(Master, /datum/controller/master) = new -/datum/controller/master/stat_entry() +/datum/controller/master/stat_entry(msg) if(!statclick) statclick = new/obj/effect/statclick/debug(null, "Initializing...", src) - stat("Byond:", "(FPS:[world.fps]) (TickCount:[world.time/world.tick_lag]) (TickDrift:[round(Master.tickdrift,1)]([round((Master.tickdrift/(world.time/world.tick_lag))*100,0.1)]%))") - stat("Master Controller:", statclick.update("(TickRate:[Master.processing]) (Iteration:[Master.iteration])")) + msg = "Byond: (FPS:[world.fps]) (TickCount:[world.time/world.tick_lag]) (TickDrift:[round(Master.tickdrift,1)]([round((Master.tickdrift/(world.time/world.tick_lag))*100,0.1)]%))" + msg += "Master Controller: [statclick.update("(TickRate:[Master.processing]) (Iteration:[Master.iteration])")]" + + return msg /datum/controller/master/StartLoadingMap(var/quiet = TRUE) if(map_loading) diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index 5297314ab14..9c5fcbe5cb6 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -164,22 +164,11 @@ //hook for printing stats to the "MC" statuspanel for admins to see performance and related stats etc. /datum/controller/subsystem/stat_entry(msg) - if(!statclick) - statclick = new/obj/effect/statclick/debug(null, "Initializing...", src) - - - if(SS_NO_FIRE & flags) - msg = "NO FIRE\t[msg]" - else if(can_fire <= 0) - msg = "OFFLINE\t[msg]" - else + if(can_fire && !(SS_NO_FIRE & flags)) msg = "[round(cost,1)]ms|[round(tick_usage,1)]%([round(tick_overrun,1)]%)|[round(ticks,0.1)]\t[msg]" - - var/title = name - if (can_fire) - title = "\[[state_letter()]][title]" - - stat(title, statclick.update(msg)) + else + msg = "OFFLINE\t[msg]" + return msg /datum/controller/subsystem/proc/state_letter() switch (state) diff --git a/code/controllers/subsystems/ai.dm b/code/controllers/subsystems/ai.dm index eb29e2fec2f..4e5256d9492 100644 --- a/code/controllers/subsystems/ai.dm +++ b/code/controllers/subsystems/ai.dm @@ -12,8 +12,9 @@ SUBSYSTEM_DEF(ai) var/slept_mobs = 0 var/list/process_z = list() -/datum/controller/subsystem/ai/stat_entry(msg_prefix) - ..("P: [processing.len] | S: [slept_mobs]") +/datum/controller/subsystem/ai/stat_entry(msg) + msg = "P: [processing.len] | S: [slept_mobs]" + return ..() /datum/controller/subsystem/ai/fire(resumed = 0) if (!resumed) diff --git a/code/controllers/subsystems/aifast.dm b/code/controllers/subsystems/aifast.dm index f045a7fd35c..2580c156ace 100644 --- a/code/controllers/subsystems/aifast.dm +++ b/code/controllers/subsystems/aifast.dm @@ -9,10 +9,9 @@ SUBSYSTEM_DEF(aifast) var/list/processing = list() var/list/currentrun = list() -/datum/controller/subsystem/aifast/stat_entry(msg_prefix) - var/list/msg = list(msg_prefix) - msg += "P:[processing.len]" - ..(msg.Join()) +/datum/controller/subsystem/aifast/stat_entry(msg) + msg = "P:[processing.len]" + return ..() /datum/controller/subsystem/aifast/fire(resumed = 0) if (!resumed) diff --git a/code/controllers/subsystems/air.dm b/code/controllers/subsystems/air.dm index 4886a11c273..1e5f1506ec6 100644 --- a/code/controllers/subsystems/air.dm +++ b/code/controllers/subsystems/air.dm @@ -244,9 +244,8 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun if(MC_TICK_CHECK) return -/datum/controller/subsystem/air/stat_entry(msg_prefix) - var/list/msg = list(msg_prefix) - msg += "S:[current_step ? part_names[current_step] : ""] " +/datum/controller/subsystem/air/stat_entry(msg) + msg = "S:[current_step ? part_names[current_step] : ""] " msg += "C:{" msg += "T [round(cost_turfs, 1)] | " msg += "E [round(cost_edges, 1)] | " @@ -263,7 +262,7 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun msg += "H [active_hotspots.len] | " msg += "Z [zones_to_update.len] " msg += "}" - ..(msg.Join()) + return ..() // ZAS might displace objects as the map loads if an air tick is processed mid-load. /datum/controller/subsystem/air/StartLoadingMap(var/quiet = TRUE) diff --git a/code/controllers/subsystems/alarm.dm b/code/controllers/subsystems/alarm.dm index 868025eca3f..e3507a34e45 100644 --- a/code/controllers/subsystems/alarm.dm +++ b/code/controllers/subsystems/alarm.dm @@ -41,5 +41,6 @@ SUBSYSTEM_DEF(alarm) /datum/controller/subsystem/alarm/proc/number_of_active_alarms() return active_alarm_cache.len -/datum/controller/subsystem/alarm/stat_entry() - ..("[number_of_active_alarms()] alarm\s") +/datum/controller/subsystem/alarm/stat_entry(msg) + msg = "[number_of_active_alarms()] alarm\s" + return ..() diff --git a/code/controllers/subsystems/chemistry.dm b/code/controllers/subsystems/chemistry.dm index 148e9755421..6f0c5959ebe 100644 --- a/code/controllers/subsystems/chemistry.dm +++ b/code/controllers/subsystems/chemistry.dm @@ -20,8 +20,9 @@ SUBSYSTEM_DEF(chemistry) initialize_chemical_reactions() ..() -/datum/controller/subsystem/chemistry/stat_entry() - ..("C: [chemical_reagents.len] | R: [chemical_reactions.len]") +/datum/controller/subsystem/chemistry/stat_entry(msg) + msg = "C: [chemical_reagents.len] | R: [chemical_reactions.len]" + return ..() //Chemical Reactions - Initialises all /decl/chemical_reaction into a list // It is filtered into multiple lists within a list. @@ -43,7 +44,7 @@ SUBSYSTEM_DEF(chemistry) // add_to = fusion_reactions_by_reagent if(istype(D, /decl/chemical_reaction/distilling)) add_to = distilled_reactions_by_reagent - + LAZYINITLIST(add_to[reagent_id]) add_to[reagent_id] += D diff --git a/code/controllers/subsystems/events.dm b/code/controllers/subsystems/events.dm index 83ab2fa00ca..5bdf83fdecc 100644 --- a/code/controllers/subsystems/events.dm +++ b/code/controllers/subsystems/events.dm @@ -41,8 +41,9 @@ SUBSYSTEM_DEF(events) var/datum/event_container/EC = event_containers[i] EC.process() -/datum/controller/subsystem/events/stat_entry() - ..("E:[active_events.len]") +/datum/controller/subsystem/events/stat_entry(msg) + msg = "E:[active_events.len]" + return ..() /datum/controller/subsystem/events/Recover() if(SSevents.active_events) diff --git a/code/controllers/subsystems/inactivity.dm b/code/controllers/subsystems/inactivity.dm index 3795468f840..c921cff0220 100644 --- a/code/controllers/subsystems/inactivity.dm +++ b/code/controllers/subsystems/inactivity.dm @@ -56,8 +56,9 @@ SUBSYSTEM_DEF(inactivity) if (MC_TICK_CHECK) return -/datum/controller/subsystem/inactivity/stat_entry() - ..("Kicked: [number_kicked]") +/datum/controller/subsystem/inactivity/stat_entry(msg) + msg = "Kicked: [number_kicked]" + return ..() /datum/controller/subsystem/inactivity/proc/can_kick(var/client/C) if(C.holder) return FALSE //VOREStation Add - Don't kick admins. diff --git a/code/controllers/subsystems/machines.dm b/code/controllers/subsystems/machines.dm index 67210025556..dea5b7ccc37 100644 --- a/code/controllers/subsystems/machines.dm +++ b/code/controllers/subsystems/machines.dm @@ -82,9 +82,8 @@ SUBSYSTEM_DEF(machines) T.broadcast_status() CHECK_TICK -/datum/controller/subsystem/machines/stat_entry() - var/msg = list() - msg += "C:{" +/datum/controller/subsystem/machines/stat_entry(msg) + msg = "C:{" msg += "PI:[round(cost_pipenets,1)]|" msg += "MC:[round(cost_machinery,1)]|" msg += "PN:[round(cost_powernets,1)]|" @@ -95,7 +94,7 @@ SUBSYSTEM_DEF(machines) msg += "PN:[SSmachines.powernets.len]|" msg += "PO:[SSmachines.powerobjs.len]|" msg += "MC/MS:[round((cost ? SSmachines.processing_machines.len/cost_machinery : 0),0.1)]" - ..(jointext(msg, null)) + return ..() /datum/controller/subsystem/machines/proc/process_pipenets(resumed = 0) if (!resumed) diff --git a/code/controllers/subsystems/mobs.dm b/code/controllers/subsystems/mobs.dm index c124b5573ef..8fec502f21c 100644 --- a/code/controllers/subsystems/mobs.dm +++ b/code/controllers/subsystems/mobs.dm @@ -19,8 +19,9 @@ SUBSYSTEM_DEF(mobs) var/slept_mobs = 0 var/list/process_z = list() -/datum/controller/subsystem/mobs/stat_entry() - ..("P: [global.mob_list.len] | S: [slept_mobs]") +/datum/controller/subsystem/mobs/stat_entry(msg) + msg = "P: [global.mob_list.len] | S: [slept_mobs]" + return ..() /datum/controller/subsystem/mobs/fire(resumed = 0) if (!resumed) @@ -90,4 +91,4 @@ SUBSYSTEM_DEF(mobs) /datum/controller/subsystem/mobs/critfail() ..() - log_recent() \ No newline at end of file + log_recent() diff --git a/code/controllers/subsystems/orbits.dm b/code/controllers/subsystems/orbits.dm index 5cda1ce9dc4..af7a5ab7eab 100644 --- a/code/controllers/subsystems/orbits.dm +++ b/code/controllers/subsystems/orbits.dm @@ -7,8 +7,9 @@ SUBSYSTEM_DEF(orbit) var/list/currentrun = list() var/list/processing = list() -/datum/controller/subsystem/orbit/stat_entry() - ..("P:[processing.len]") +/datum/controller/subsystem/orbit/stat_entry(msg) + msg = "P:[processing.len]" + return ..() /datum/controller/subsystem/orbit/fire(resumed = 0) @@ -40,5 +41,3 @@ SUBSYSTEM_DEF(orbit) O.Check(targetloc) if (MC_TICK_CHECK) return - - diff --git a/code/controllers/subsystems/overlays.dm b/code/controllers/subsystems/overlays.dm index 9d840933cb7..0a953e97828 100644 --- a/code/controllers/subsystems/overlays.dm +++ b/code/controllers/subsystems/overlays.dm @@ -32,8 +32,9 @@ SUBSYSTEM_DEF(overlays) fire(FALSE, TRUE) ..() -/datum/controller/subsystem/overlays/stat_entry() - ..("Queued Atoms: [queue.len], Cache Size: [cache_size]") +/datum/controller/subsystem/overlays/stat_entry(msg) + msg = "Queued Atoms: [queue.len], Cache Size: [cache_size]" + return ..() /datum/controller/subsystem/overlays/fire(resumed, no_mc_tick) diff --git a/code/controllers/subsystems/ping.dm b/code/controllers/subsystems/ping.dm index 20cf8dd4465..8f4836290a4 100644 --- a/code/controllers/subsystems/ping.dm +++ b/code/controllers/subsystems/ping.dm @@ -12,8 +12,9 @@ SUBSYSTEM_DEF(ping) runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT var/list/currentrun = list() -/datum/controller/subsystem/ping/stat_entry() - ..("P:[GLOB.clients.len]") +/datum/controller/subsystem/ping/stat_entry(msg) + msg = "P:[GLOB.clients.len]" + return ..() /datum/controller/subsystem/ping/fire(resumed = FALSE) // Prepare the new batch of clients diff --git a/code/controllers/subsystems/plants.dm b/code/controllers/subsystems/plants.dm index 42622b217d4..af4815395e1 100644 --- a/code/controllers/subsystems/plants.dm +++ b/code/controllers/subsystems/plants.dm @@ -22,8 +22,9 @@ SUBSYSTEM_DEF(plants) var/list/processing = list() var/list/currentrun = list() -/datum/controller/subsystem/plants/stat_entry() - ..("P:[processing.len]|S:[seeds.len]") +/datum/controller/subsystem/plants/stat_entry(msg) + msg = "P:[processing.len]|S:[seeds.len]" + return ..() /datum/controller/subsystem/plants/Initialize(timeofday) setup() diff --git a/code/controllers/subsystems/processing/obj_tab_items.dm b/code/controllers/subsystems/processing/obj_tab_items.dm new file mode 100644 index 00000000000..53786daf011 --- /dev/null +++ b/code/controllers/subsystems/processing/obj_tab_items.dm @@ -0,0 +1,24 @@ +PROCESSING_SUBSYSTEM_DEF(obj_tab_items) + name = "Obj Tab Items" + flags = SS_NO_INIT + runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT + wait = 0.1 SECONDS + +// I know this is mostly copypasta, but I want to change the processing logic +// Sorry bestie :( +/datum/controller/subsystem/processing/obj_tab_items/fire(resumed = FALSE) + if (!resumed) + currentrun = processing.Copy() + //cache for sanic speed (lists are references anyways) + var/list/current_run = currentrun + + while(current_run.len) + var/datum/thing = current_run[current_run.len] + if(QDELETED(thing)) + processing -= thing + else if(thing.process(wait * 0.1) == PROCESS_KILL) + // fully stop so that a future START_PROCESSING will work + STOP_PROCESSING(src, thing) + if (MC_TICK_CHECK) + return + current_run.len-- diff --git a/code/controllers/subsystems/processing/processing.dm b/code/controllers/subsystems/processing/processing.dm index 16b4da021b1..51c1afe015f 100644 --- a/code/controllers/subsystems/processing/processing.dm +++ b/code/controllers/subsystems/processing/processing.dm @@ -24,8 +24,9 @@ SUBSYSTEM_DEF(processing) if(CHECK_BITFIELD(D.datum_flags, DF_ISPROCESSING)) processing |= D -/datum/controller/subsystem/processing/stat_entry() - ..("[stat_tag]:[processing.len]") +/datum/controller/subsystem/processing/stat_entry(msg) + msg = "[stat_tag]:[processing.len]" + return ..() /datum/controller/subsystem/processing/fire(resumed = 0) if (!resumed) @@ -69,14 +70,14 @@ SUBSYSTEM_DEF(processing) log_world(msg) return msg += "Lists: current_run: [currentrun.len], processing: [processing.len]\n" - + if(!currentrun.len) msg += "!!The subsystem just finished the processing list, and currentrun is empty (or has never run).\n" msg += "!!The info below is the tail of processing instead of currentrun.\n" - + var/datum/D = currentrun.len ? currentrun[currentrun.len] : processing[processing.len] msg += "Tail entry: [describeThis(D)] (this is likely the item AFTER the problem item)\n" - + var/position = processing.Find(D) if(!position) msg += "Unable to find context of tail entry in processing list.\n" diff --git a/code/controllers/subsystems/radiation.dm b/code/controllers/subsystems/radiation.dm index 8f140a5fc83..967c21992f4 100644 --- a/code/controllers/subsystems/radiation.dm +++ b/code/controllers/subsystems/radiation.dm @@ -54,8 +54,9 @@ SUBSYSTEM_DEF(radiation) if (MC_TICK_CHECK) return -/datum/controller/subsystem/radiation/stat_entry() - ..("S:[sources.len], RC:[resistance_cache.len]") +/datum/controller/subsystem/radiation/stat_entry(msg) + msg = "S:[sources.len], RC:[resistance_cache.len]" + return ..() // Ray trace from all active radiation sources to T and return the strongest effect. /datum/controller/subsystem/radiation/proc/get_rads_at_turf(var/turf/T) @@ -144,4 +145,4 @@ SUBSYSTEM_DEF(radiation) if(!(power && source)) return var/turf/epicentre = locate(round(world.maxx / 2), round(world.maxy / 2), source.z) - flat_radiate(epicentre, power, world.maxx, respect_maint) \ No newline at end of file + flat_radiate(epicentre, power, world.maxx, respect_maint) diff --git a/code/controllers/subsystems/shuttles.dm b/code/controllers/subsystems/shuttles.dm index 38ec9e5c83f..02f9cb91ebd 100644 --- a/code/controllers/subsystems/shuttles.dm +++ b/code/controllers/subsystems/shuttles.dm @@ -172,5 +172,6 @@ SUBSYSTEM_DEF(shuttles) for(var/obj/effect/overmap/visitable/ship/ship_effect as anything in ships) overmap_halted ? ship_effect.halt() : ship_effect.unhalt() -/datum/controller/subsystem/shuttles/stat_entry() - ..("Shuttles:[process_shuttles.len]/[shuttles.len], Ships:[ships.len], L:[registered_shuttle_landmarks.len][overmap_halted ? ", HALT" : ""]") +/datum/controller/subsystem/shuttles/stat_entry(msg) + msg = "Shuttles:[process_shuttles.len]/[shuttles.len], Ships:[ships.len], L:[registered_shuttle_landmarks.len][overmap_halted ? ", HALT" : ""]" + return ..() diff --git a/code/controllers/subsystems/statpanel.dm b/code/controllers/subsystems/statpanel.dm new file mode 100644 index 00000000000..c80e7cd1fbe --- /dev/null +++ b/code/controllers/subsystems/statpanel.dm @@ -0,0 +1,481 @@ +SUBSYSTEM_DEF(statpanels) + name = "Stat Panels" + wait = 4 + init_order = INIT_ORDER_STATPANELS + //init_stage = INITSTAGE_EARLY + priority = FIRE_PRIORITY_STATPANEL + runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY + flags = SS_NO_INIT + var/list/currentrun = list() + var/list/global_data + var/list/mc_data + var/list/cached_images = list() + + ///how many subsystem fires between most tab updates + var/default_wait = 10 + ///how many subsystem fires between updates of misc tabs + var/misc_wait = 3 + ///how many subsystem fires between updates of the status tab + var/status_wait = 2 + ///how many subsystem fires between updates of the MC tab + var/mc_wait = 5 + ///how many full runs this subsystem has completed. used for variable rate refreshes. + var/num_fires = 0 + +/datum/controller/subsystem/statpanels/fire(resumed = FALSE) + if (!resumed) + num_fires++ + //var/datum/map_config/cached = SSmapping.next_map_config + global_data = list( + //"Map: [SSmapping.config?.map_name || "Loading..."]", + "Map: [using_map.name]", + //cached ? "Next Map: [cached.map_name]" : null, + //"Next Map: -- Not Available --", + // "Round ID: [GLOB.round_id ? GLOB.round_id : "NULL"]", + "Server Time: [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss")]", + "Round Time: [ROUND_TIME()]", + "Station Date: [stationdate2text()]", // [capitalize(GLOB.world_time_season)]", + "Station Time: [stationtime2text()]", + "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)" + ) + + if(emergency_shuttle.evac) + var/ETA = emergency_shuttle.get_status_panel_eta() + if(ETA) + global_data += "[ETA]" + src.currentrun = GLOB.clients.Copy() + mc_data = null + + var/list/currentrun = src.currentrun + while(length(currentrun)) + var/client/target = currentrun[length(currentrun)] + currentrun.len-- + + if(!target?.stat_panel?.is_ready()) // Null target client, client has null stat panel, or stat panel isn't ready + continue + + if(target.stat_tab == "Status" && num_fires % status_wait == 0) + set_status_tab(target) + + if(!target.holder) + target.stat_panel.send_message("remove_admin_tabs") + else + //target.stat_panel.send_message("update_split_admin_tabs", !!(target.prefs.toggles & SPLIT_ADMIN_TABS)) + target.stat_panel.send_message("update_split_admin_tabs", FALSE) + + if(!("MC" in target.panel_tabs) || !("Tickets" in target.panel_tabs)) + target.stat_panel.send_message("add_admin_tabs", target.holder.href_token) + + //if(target.stat_tab == "MC" && ((num_fires % mc_wait == 0) || target?.prefs.read_preference(/datum/preference/toggle/fast_mc_refresh))) + //set_MC_tab(target) + if(target.stat_tab == "MC" && ((num_fires % mc_wait == 0))) + set_MC_tab(target) + + if(target.stat_tab == "Tickets" && num_fires % default_wait == 0) + set_tickets_tab(target) + + if(!length(GLOB.sdql2_queries) && ("SDQL2" in target.panel_tabs)) + target.stat_panel.send_message("remove_sdql2") + + else if(length(GLOB.sdql2_queries) && (target.stat_tab == "SDQL2" || !("SDQL2" in target.panel_tabs)) && num_fires % default_wait == 0) + set_SDQL2_tab(target) + + if(target.mob) + var/mob/target_mob = target.mob + + // Handle the action panels of the stat panel + + var/update_actions = FALSE + // We're on a spell tab, update the tab so we can see cooldowns progressing and such + if(target.stat_tab in target.spell_tabs) + update_actions = TRUE + // We're not on a spell tab per se, but we have cooldown actions, and we've yet to + // set up our spell tabs at all + //if(!length(target.spell_tabs) && locate(/datum/action/cooldown) in target_mob.actions) + //update_actions = TRUE + + if(update_actions && num_fires % default_wait == 0) + set_action_tabs(target, target_mob) + //Update every fire if tab is open, otherwise update every 7 fires + if((num_fires % misc_wait == 0)) + update_misc_tabs(target,target_mob) + + var/datum/object_window_info/obj_window = target.obj_window + if(obj_window) + if(obj_window.flags & TURFLIST_UPDATE_QUEUED) + immediate_send_stat_data(target) + obj_window.flags = 0 + + if(MC_TICK_CHECK) + return + +/datum/controller/subsystem/statpanels/proc/update_misc_tabs(var/client/target,var/mob/target_mob) + target_mob.update_misc_tabs() + for(var/tab in target_mob.misc_tabs) + if(target_mob.misc_tabs[tab].len == 0 && (tab in target.misc_tabs)) + target.misc_tabs -= tab + target.stat_panel.send_message("remove_misc",tab) + + if(target_mob.misc_tabs[tab].len > 0) + if(!(tab in target.misc_tabs)) + target.misc_tabs += tab + target.stat_panel.send_message("create_misc",tab) + target.stat_panel.send_message("update_misc",list( + TN = tab, \ + TC = target_mob.misc_tabs[tab], \ + )) + + for(var/tab in target.misc_tabs) + if(!(tab in target_mob.misc_tabs)) + target.misc_tabs -= tab + target.stat_panel.send_message("remove_misc",tab) + +/datum/controller/subsystem/statpanels/proc/set_status_tab(client/target) + if(!global_data)//statbrowser hasnt fired yet and we were called from immediate_send_stat_data() + return + + target.stat_panel.send_message("update_stat", list( + global_data = global_data, + ping_str = "Ping: -- Not Available --", // [round(target.lastping, 1)]ms (Average: [round(target.avgping, 1)]ms)", + other_str = target.mob?.get_status_tab_items(), + )) + +/datum/controller/subsystem/statpanels/proc/set_MC_tab(client/target) + var/turf/eye_turf = get_turf(target.eye) + var/coord_entry = COORD(eye_turf) + if(!mc_data) + generate_mc_data() + target.stat_panel.send_message("update_mc", list(mc_data = mc_data, coord_entry = coord_entry)) + +/datum/controller/subsystem/statpanels/proc/set_examine_tab(client/target) + var/description_holders = target.description_holders + var/list/examine_update = list() + + if(!target.obj_window) + target.obj_window = new(target) + if(!target.examine_icon && !target.obj_window.examine_target && target.stat_tab == "Examine") + target.obj_window.examine_target = description_holders["icon"] + target.obj_window.atoms_to_show += target.obj_window.examine_target + START_PROCESSING(SSobj_tab_items, target.obj_window) + refresh_client_obj_view(target) + examine_update += "[target.examine_icon] [description_holders["name"]]" //The name, written in big letters. + examine_update += "[description_holders["desc"]]" //the default examine text. + if(description_holders["info"]) + examine_update += "" + span_bold("[replacetext(description_holders["info"], "\n", "
")]") + "

" //Blue, informative text. + if(description_holders["interactions"]) + for(var/line in description_holders["interactions"]) + examine_update += "" + span_bold("[line]") + "
" + if(description_holders["fluff"]) + examine_update += "" + span_bold("[replacetext(description_holders["fluff"], "\n", "
")]") + "

" //Green, fluff-related text. + if(description_holders["antag"]) + examine_update += "" + span_bold("[description_holders["antag"]]") + "
" //Red, malicious antag-related text + + target.stat_panel.send_message("update_examine", examine_update) + +/datum/controller/subsystem/statpanels/proc/set_tickets_tab(client/target) + var/list/tickets = GLOB.ahelp_tickets.stat_entry(target) + tickets += GLOB.mhelp_tickets.stat_entry(target) + target.stat_panel.send_message("update_tickets", tickets) + +/datum/controller/subsystem/statpanels/proc/set_SDQL2_tab(client/target) + var/list/sdql2A = list() + sdql2A[++sdql2A.len] = list("", "Access Global SDQL2 List", REF(GLOB.sdql2_vv_statobj)) + var/list/sdql2B = list() + for(var/datum/SDQL2_query/query as anything in GLOB.sdql2_queries) + sdql2B = query.generate_stat() + + sdql2A += sdql2B + target.stat_panel.send_message("update_sdql2", sdql2A) + +/// Set up the various action tabs. +/datum/controller/subsystem/statpanels/proc/set_action_tabs(client/target, mob/target_mob) + return + //var/list/actions = target_mob.get_actions_for_statpanel() + //target.spell_tabs.Cut() + + //for(var/action_data in actions) + // target.spell_tabs |= action_data[1] + + //target.stat_panel.send_message("update_spells", list(spell_tabs = target.spell_tabs, actions = actions)) + +/datum/controller/subsystem/statpanels/proc/set_turf_examine_tab(client/target, mob/target_mob) + if(!target)//statbrowser hasnt fired yet and we were called from immediate_send_stat_data() + return + var/list/overrides = list() + for(var/image/target_image as anything in target.images) + if(!target_image.loc || target_image.loc.loc != target_mob.listed_turf || !target_image.override) + continue + overrides += target_image.loc + + var/list/atoms_to_display = list(target_mob.listed_turf) + for(var/atom/movable/turf_content as anything in target_mob.listed_turf) + if(turf_content.mouse_opacity == MOUSE_OPACITY_TRANSPARENT) + continue + if(turf_content.invisibility > target_mob.see_invisible) + continue + if(turf_content in overrides) + continue + //if(turf_content.IsObscured()) + //continue + atoms_to_display += turf_content + + /// Set the atoms we're meant to display + var/datum/object_window_info/obj_window = target.obj_window + if(!obj_window) + return // previous one no longer exists + obj_window.atoms_to_show = atoms_to_display + START_PROCESSING(SSobj_tab_items, obj_window) + refresh_client_obj_view(target) + +/datum/controller/subsystem/statpanels/proc/refresh_client_obj_view(client/refresh) + var/list/turf_items = return_object_images(refresh) + if(!length(turf_items)/* || !refresh.mob?.listed_turf*/) + return + refresh.stat_panel.send_message("update_listedturf", turf_items) + +#define OBJ_IMAGE_LOADING "statpanels obj loading temporary" +/// Returns all our ready object tab images +/// Returns a list in the form list(list(object_name, object_ref, loaded_image), ...) +/datum/controller/subsystem/statpanels/proc/return_object_images(client/load_from) + // You might be inclined to think that this is a waste of cpu time, since we + // A: Double iterate over atoms in the build case, or + // B: Generate these lists over and over in the refresh case + // It's really not very hot. The hot portion of this code is genuinely mostly in the image generation + // So it's ok to pay a performance cost for cleanliness here + + // No turf? go away + /*if(!load_from.mob?.listed_turf) + return list()*/ + var/datum/object_window_info/obj_window = load_from.obj_window + var/list/already_seen = obj_window.atoms_to_images + var/list/to_make = obj_window.atoms_to_imagify + var/list/turf_items = list() + for(var/atom/turf_item as anything in obj_window.atoms_to_show) + // First, we fill up the list of refs to display + // If we already have one, just use that + var/existing_image = already_seen[turf_item] + if(existing_image == OBJ_IMAGE_LOADING) + continue + // We already have it. Success! + if(existing_image) + if(turf_item == obj_window.examine_target) //not actually a turf item get trolled + load_from.examine_icon = "" + obj_window.examine_target = null + set_examine_tab(load_from) + continue + turf_items[++turf_items.len] = list("[turf_item.name]", REF(turf_item), existing_image) + continue + // Now, we're gonna queue image generation out of those refs + to_make += turf_item + already_seen[turf_item] = OBJ_IMAGE_LOADING + obj_window.RegisterSignal(turf_item, COMSIG_PARENT_QDELETING, TYPE_PROC_REF(/datum/object_window_info,viewing_atom_deleted)) // we reset cache if anything in it gets deleted + return turf_items + +#undef OBJ_IMAGE_LOADING + +/datum/controller/subsystem/statpanels/proc/generate_mc_data() + mc_data = list( + list("CPU:", world.cpu), + list("Instances:", "[num2text(world.contents.len, 10)]"), + list("World Time:", "[world.time]"), + list("Globals:", GLOB.stat_entry(), "\ref[GLOB]"), + // list("[config]:", config.stat_entry(), "\ref[config]"), + list("Byond:", "(FPS:[world.fps]) (TickCount:[world.time/world.tick_lag]) (TickDrift:[round(Master.tickdrift,1)]([round((Master.tickdrift/(world.time/world.tick_lag))*100,0.1)]%)) (Internal Tick Usage: [round(MAPTICK_LAST_INTERNAL_TICK_USAGE,0.1)]%)"), + list("Master Controller:", Master.stat_entry(), "\ref[Master]"), + list("Failsafe Controller:", Failsafe.stat_entry(), "\ref[Failsafe]"), + list("","") + ) + for(var/datum/controller/subsystem/sub_system as anything in Master.subsystems) + mc_data[++mc_data.len] = list("\[[sub_system.state_letter()]][sub_system.name]", sub_system.stat_entry(), "\ref[sub_system]") + mc_data[++mc_data.len] = list("Camera Net", "Cameras: [global.cameranet.cameras.len] | Chunks: [global.cameranet.chunks.len]", "\ref[global.cameranet]") + +///immediately update the active statpanel tab of the target client +/datum/controller/subsystem/statpanels/proc/immediate_send_stat_data(client/target) + if(!target.stat_panel.is_ready()) + return FALSE + + if(target.stat_tab == "Examine") + set_examine_tab(target) + return TRUE + + if(target.stat_tab == "Status") + set_status_tab(target) + return TRUE + + var/mob/target_mob = target.mob + + // Handle actions + + var/update_actions = FALSE + if(target.stat_tab in target.spell_tabs) + update_actions = TRUE + + //if(!length(target.spell_tabs) && locate(/datum/action/cooldown) in target_mob.actions) + //update_actions = TRUE + + if(update_actions) + set_action_tabs(target, target_mob) + return TRUE + + // Handle turfs + + if(target_mob?.listed_turf) + if(!target_mob.TurfAdjacent(target_mob.listed_turf)) + target.stat_panel.send_message("removed_listedturf") + target_mob.listed_turf = null + + else if(target.stat_tab == target_mob?.listed_turf.name || !(target_mob?.listed_turf.name in target.panel_tabs)) + set_turf_examine_tab(target, target_mob) + return TRUE + + if(!target.holder) + return FALSE + + if(target.stat_tab == "MC") + set_MC_tab(target) + return TRUE + + if(target.stat_tab == "Tickets") + set_tickets_tab(target) + return TRUE + + if(!length(GLOB.sdql2_queries) && ("SDQL2" in target.panel_tabs)) + target.stat_panel.send_message("remove_sdql2") + + else if(length(GLOB.sdql2_queries) && target.stat_tab == "SDQL2") + set_SDQL2_tab(target) + +/atom/proc/remove_from_cache() + SIGNAL_HANDLER + SSstatpanels.cached_images -= REF(src) + +/// Stat panel window declaration +/client/var/datum/tgui_window/stat_panel + +/// Datum that holds and tracks info about a client's object window +/// Really only exists because I want to be able to do logic with signals +/// And need a safe place to do the registration +/datum/object_window_info + /// list of atoms to show to our client via the object tab, at least currently + var/list/atoms_to_show = list() + /// list of atom -> image string for objects we have had in the right click tab + /// this is our caching + var/list/atoms_to_images = list() + /// list of atoms to turn into images for the object tab + var/list/atoms_to_imagify = list() + /// Our owner client + var/client/parent + /// Are we currently tracking a turf? + var/actively_tracking = FALSE + ///For reusing this logic for examines + var/atom/examine_target + var/flags = 0 + +/datum/object_window_info/New(client/parent) + . = ..() + src.parent = parent + +/datum/object_window_info/Destroy(force, ...) + atoms_to_show = null + atoms_to_images = null + atoms_to_imagify = null + parent.obj_window = null + parent = null + STOP_PROCESSING(SSobj_tab_items, src) + return ..() + +/// Takes a client, attempts to generate object images for it +/// We will update the client with any improvements we make when we're done +/datum/object_window_info/process(seconds_per_tick) + // Cache the datum access for sonic speed + var/list/to_make = atoms_to_imagify + var/list/newly_seen = atoms_to_images + var/index = 0 + for(index in 1 to length(to_make)) + var/atom/thing = to_make[index] + + if(!thing) // A null thing snuck in somehow + continue + + var/generated_string + if(ismob(thing) || length(thing.overlays) > 0) + var/force_south = FALSE + if(isliving(thing)) + force_south = TRUE + generated_string = costly_icon2html(thing, parent, sourceonly=TRUE, force_south = force_south) + else + generated_string = icon2html(thing, parent, sourceonly=TRUE) + + newly_seen[thing] = generated_string + if(TICK_CHECK) + to_make.Cut(1, index + 1) + index = 0 + break + // If we've not cut yet, do it now + if(index) + to_make.Cut(1, index + 1) + SSstatpanels.refresh_client_obj_view(parent) + if(!length(to_make)) + return PROCESS_KILL + +/datum/object_window_info/proc/start_turf_tracking() + if(actively_tracking) + stop_turf_tracking() + var/static/list/connections = list( + COMSIG_MOVABLE_MOVED = PROC_REF(on_mob_move), + COMSIG_MOB_LOGOUT = PROC_REF(on_mob_logout), + ) + AddComponent(/datum/component/connect_mob_behalf, parent, connections) + RegisterSignal(parent.mob.listed_turf, COMSIG_ATOM_ENTERED, PROC_REF(turflist_changed)) + RegisterSignal(parent.mob.listed_turf, COMSIG_ATOM_EXITED, PROC_REF(turflist_changed)) + actively_tracking = TRUE + +/datum/object_window_info/proc/stop_turf_tracking() + qdel(GetComponent(/datum/component/connect_mob_behalf)) + UnregisterSignal(parent.mob.listed_turf, COMSIG_ATOM_ENTERED) + UnregisterSignal(parent.mob.listed_turf, COMSIG_ATOM_EXITED) + actively_tracking = FALSE + +/datum/object_window_info/proc/on_mob_move(mob/source) + SIGNAL_HANDLER + var/turf/listed = source.listed_turf + if(!listed || !source.TurfAdjacent(listed)) + source.set_listed_turf(null) + +/datum/object_window_info/proc/on_mob_logout(mob/source) + SIGNAL_HANDLER + on_mob_move(parent.mob) + +/datum/object_window_info/proc/turflist_changed(mob/source) + if(!parent)//statbrowser hasnt fired yet and we still have a pending action + return + SIGNAL_HANDLER + if(!(flags & TURFLIST_UPDATED)) //Limit updates to 1 per tick + SSstatpanels.immediate_send_stat_data(parent) + flags |= TURFLIST_UPDATED + else if(!(flags & TURFLIST_UPDATE_QUEUED)) + flags |= TURFLIST_UPDATE_QUEUED + +/// Clears any cached object window stuff +/// We use hard refs cause we'd need a signal for this anyway. Cleaner this way +/datum/object_window_info/proc/viewing_atom_deleted(atom/deleted) + SIGNAL_HANDLER + atoms_to_show -= deleted + atoms_to_imagify -= deleted + atoms_to_images -= deleted + +/mob/proc/set_listed_turf(turf/new_turf) + if(!client) + listed_turf = new_turf + return + if(!client.obj_window) + client.obj_window = new(client) + if(!new_turf) + client.obj_window.stop_turf_tracking() //Needs to go before listed_turf is set to null so signals can be removed + listed_turf = new_turf + + if(listed_turf) + client.stat_panel.send_message("create_listedturf", listed_turf.name) + client.obj_window.start_turf_tracking() + else + client.stat_panel.send_message("remove_listedturf") diff --git a/code/controllers/subsystems/supply.dm b/code/controllers/subsystems/supply.dm index 84d4d4ee9ce..e7ead3b7706 100644 --- a/code/controllers/subsystems/supply.dm +++ b/code/controllers/subsystems/supply.dm @@ -39,8 +39,9 @@ SUBSYSTEM_DEF(supply) /datum/controller/subsystem/supply/fire() points += points_per_process -/datum/controller/subsystem/supply/stat_entry() - ..("Points: [points]") +/datum/controller/subsystem/supply/stat_entry(msg) + msg = "Points: [points]" + return ..() //To stop things being sent to CentCom which should not be sent to centcomm. Recursively checks for these types. /datum/controller/subsystem/supply/proc/forbidden_atoms_check(atom/A) diff --git a/code/controllers/subsystems/tgui.dm b/code/controllers/subsystems/tgui.dm index 46b3ae90c2e..9f0baf12e65 100644 --- a/code/controllers/subsystems/tgui.dm +++ b/code/controllers/subsystems/tgui.dm @@ -35,8 +35,9 @@ SUBSYSTEM_DEF(tgui) /datum/controller/subsystem/tgui/Shutdown() close_all_uis() -/datum/controller/subsystem/tgui/stat_entry() - ..("P:[all_uis.len]") +/datum/controller/subsystem/tgui/stat_entry(msg) + msg = "P:[all_uis.len]" + return ..() /datum/controller/subsystem/tgui/fire(resumed = FALSE) if(!resumed) diff --git a/code/controllers/subsystems/throwing.dm b/code/controllers/subsystems/throwing.dm index 797c5f88fb1..037970ef936 100644 --- a/code/controllers/subsystems/throwing.dm +++ b/code/controllers/subsystems/throwing.dm @@ -9,8 +9,9 @@ SUBSYSTEM_DEF(throwing) var/list/currentrun var/list/processing = list() -/datum/controller/subsystem/throwing/stat_entry() - ..("P:[processing.len]") +/datum/controller/subsystem/throwing/stat_entry(msg) + msg = "P:[processing.len]" + return ..() /datum/controller/subsystem/throwing/fire(resumed = 0) if (!resumed) diff --git a/code/controllers/subsystems/ticker.dm b/code/controllers/subsystems/ticker.dm index 88869572022..5b4ad3c60f9 100644 --- a/code/controllers/subsystems/ticker.dm +++ b/code/controllers/subsystems/ticker.dm @@ -41,6 +41,10 @@ SUBSYSTEM_DEF(ticker) //Now we have a general cinematic centrally held within the gameticker....far more efficient! var/obj/screen/cinematic = null + var/round_start_time = 0 + + + // This global variable exists for legacy support so we don't have to rename every 'ticker' to 'SSticker' yet. var/global/datum/controller/subsystem/ticker/ticker /datum/controller/subsystem/ticker/PreInit() @@ -101,6 +105,7 @@ var/global/datum/controller/subsystem/ticker/ticker // Called during GAME_STATE_SETTING_UP (RUNLEVEL_SETUP) /datum/controller/subsystem/ticker/proc/setup_tick(resumed = FALSE) + round_start_time = world.time // otherwise round_start_time would be 0 for the signals if(!setup_choose_gamemode()) // It failed, go back to lobby state and re-send the welcome message pregame_timeleft = config.pregame_time @@ -123,7 +128,7 @@ var/global/datum/controller/subsystem/ticker/ticker var/list/runnable_modes = config.get_runnable_modes() if((master_mode == "random") || (master_mode == "secret")) if(!runnable_modes.len) - to_world(span_danger(span_bold("Unable to choose playable game mode.") + " Reverting to pregame lobby.")) + to_world(span_filter_system(span_bold("Unable to choose playable game mode.") + " Reverting to pregame lobby.")) return 0 if(secret_force_mode != "secret") src.mode = config.pick_mode(secret_force_mode) @@ -136,7 +141,7 @@ var/global/datum/controller/subsystem/ticker/ticker src.mode = config.pick_mode(master_mode) if(!src.mode) - to_world(span_danger("Serious error in mode setup! Reverting to pregame lobby.")) //Uses setup instead of set up due to computational context. + to_world(span_boldannounce("Serious error in mode setup! Reverting to pregame lobby.")) //Uses setup instead of set up due to computational context. return 0 job_master.ResetOccupations() @@ -145,21 +150,21 @@ var/global/datum/controller/subsystem/ticker/ticker job_master.DivideOccupations() // Apparently important for new antagonist system to register specific job antags properly. if(!src.mode.can_start()) - to_world(span_danger(span_bold("Unable to start [mode.name].") + " Not enough players readied, [config.player_requirements[mode.config_tag]] players needed. Reverting to pregame lobby.")) + to_world(span_filter_system(span_bold("Unable to start [mode.name].") + " Not enough players readied, [config.player_requirements[mode.config_tag]] players needed. Reverting to pregame lobby.")) mode.fail_setup() mode = null job_master.ResetOccupations() return 0 if(hide_mode) - to_world(span_notice(span_bold("The current game mode is - Secret!"))) + to_world(span_world(span_notice("The current game mode is - Secret!"))) if(runnable_modes.len) var/list/tmpmodes = new for (var/datum/game_mode/M in runnable_modes) tmpmodes+=M.name tmpmodes = sortList(tmpmodes) if(tmpmodes.len) - to_world(span_info(span_bold("Possibilities:") + " [english_list(tmpmodes, and_text= "; ", comma_text = "; ")]")) + to_world(span_filter_system(span_bold("Possibilities:") + " [english_list(tmpmodes, and_text= "; ", comma_text = "; ")]")) else src.mode.announce() return 1 @@ -225,7 +230,7 @@ var/global/datum/controller/subsystem/ticker/ticker end_game_state = END_GAME_MODE_FINISHED // Only do this cleanup once! mode.cleanup() //call a transfer shuttle vote - to_world(span_danger("The round has ended!")) + to_world(span_boldannounce("The round has ended!")) SSvote.start_vote(new /datum/vote/crew_transfer) // Called during GAME_STATE_FINISHED (RUNLEVEL_POSTGAME) @@ -238,7 +243,7 @@ var/global/datum/controller/subsystem/ticker/ticker feedback_set_details("end_proper", "nuke") restart_timeleft = 1 MINUTE // No point waiting five minutes if everyone's dead. if(!delay_end) - to_world(span_notice(span_bold("Rebooting due to destruction of [station_name()] in [round(restart_timeleft/600)] minute\s."))) + to_world(span_boldannounce("Rebooting due to destruction of [station_name()] in [round(restart_timeleft/600)] minute\s.")) last_restart_notify = world.time else feedback_set_details("end_proper", "proper completion") @@ -252,14 +257,14 @@ var/global/datum/controller/subsystem/ticker/ticker if(END_GAME_ENDING) restart_timeleft -= (world.time - last_fire) if(delay_end) - to_world(span_notice(span_bold("An admin has delayed the round end."))) + to_world(span_boldannounce("An admin has delayed the round end.")) end_game_state = END_GAME_DELAYED else if(restart_timeleft <= 0) - to_world(span_warning(span_bold("Restarting world!"))) + to_world(span_boldannounce("Restarting world!")) sleep(5) world.Reboot() else if (world.time - last_restart_notify >= 1 MINUTE) - to_world(span_notice(span_bold("Restarting in [round(restart_timeleft/600, 1)] minute\s."))) + to_world(span_boldannounce("Restarting in [round(restart_timeleft/600, 1)] minute\s.")) last_restart_notify = world.time return if(END_GAME_DELAYED) @@ -418,6 +423,7 @@ var/global/datum/controller/subsystem/ticker/ticker if(new_char.client) var/obj/screen/splash/S = new(new_char.client, TRUE) S.Fade(TRUE) + new_char.client.init_verbs() // If they're a carbon, they can get manifested if(J?.mob_type & JOB_CARBON) @@ -478,7 +484,7 @@ var/global/datum/controller/subsystem/ticker/ticker to_chat(Player, span_filter_system(span_red(span_bold("You did not survive the events on [station_name()]...")))) else to_chat(Player, span_filter_system(span_red(span_bold("You did not survive the events on [station_name()]...")))) - to_world("
") + to_world(span_filter_system("
")) for (var/mob/living/silicon/ai/aiPlayer in mob_list) if (aiPlayer.stat != 2) @@ -542,28 +548,29 @@ var/global/datum/controller/subsystem/ticker/ticker return 1 -/datum/controller/subsystem/ticker/stat_entry() +/datum/controller/subsystem/ticker/stat_entry(msg) switch(current_state) if(GAME_STATE_INIT) ..() if(GAME_STATE_PREGAME) // RUNLEVEL_LOBBY - ..("START [round_progressing ? "[round(pregame_timeleft)]s" : "(PAUSED)"]") + msg = "START [round_progressing ? "[round(pregame_timeleft)]s" : "(PAUSED)"]" if(GAME_STATE_SETTING_UP) // RUNLEVEL_SETUP - ..("SETUP") + msg = "SETUP" if(GAME_STATE_PLAYING) // RUNLEVEL_GAME - ..("GAME") + msg = "GAME" if(GAME_STATE_FINISHED) // RUNLEVEL_POSTGAME switch(end_game_state) if(END_GAME_MODE_FINISHED) - ..("MODE OVER, WAITING") + msg = "MODE OVER, WAITING" if(END_GAME_READY_TO_END) - ..("ENDGAME PROCESSING") + msg = "ENDGAME PROCESSING" if(END_GAME_ENDING) - ..("END IN [round(restart_timeleft/10)]s") + msg = "END IN [round(restart_timeleft/10)]s" if(END_GAME_DELAYED) - ..("END PAUSED") + msg = "END PAUSED" else - ..("ENDGAME ERROR:[end_game_state]") + msg = "ENDGAME ERROR:[end_game_state]" + return ..() /datum/controller/subsystem/ticker/Recover() flags |= SS_NO_INIT // Don't initialize again @@ -579,3 +586,5 @@ var/global/datum/controller/subsystem/ticker/ticker minds = SSticker.minds random_players = SSticker.random_players + + round_start_time = SSticker.round_start_time diff --git a/code/controllers/subsystems/timer.dm b/code/controllers/subsystems/timer.dm index 701307c6276..fc43b81fd39 100644 --- a/code/controllers/subsystems/timer.dm +++ b/code/controllers/subsystems/timer.dm @@ -34,7 +34,8 @@ SUBSYSTEM_DEF(timer) bucket_resolution = world.tick_lag /datum/controller/subsystem/timer/stat_entry(msg) - ..("B:[bucket_count] P:[length(second_queue)] H:[length(hashes)] C:[length(clienttime_timers)] S:[length(timer_id_dict)]") + msg = "B:[bucket_count] P:[length(second_queue)] H:[length(hashes)] C:[length(clienttime_timers)] S:[length(timer_id_dict)]" + return ..() /datum/controller/subsystem/timer/fire(resumed = FALSE) var/lit = last_invoke_tick diff --git a/code/controllers/subsystems/transcore_vr.dm b/code/controllers/subsystems/transcore_vr.dm index d2292c32d89..13a4632b8de 100644 --- a/code/controllers/subsystems/transcore_vr.dm +++ b/code/controllers/subsystems/transcore_vr.dm @@ -122,9 +122,8 @@ SUBSYSTEM_DEF(transcore) if(MC_TICK_CHECK) return -/datum/controller/subsystem/transcore/stat_entry() - var/msg = list() - msg += "$:{" +/datum/controller/subsystem/transcore/stat_entry(msg) + msg = "$:{" msg += "IM:[round(cost_implants,1)]|" msg += "BK:[round(cost_backups,1)]" msg += "} " @@ -137,7 +136,7 @@ SUBSYSTEM_DEF(transcore) msg += "DFB:[default_db.body_scans.len]|" msg += "DFI:[default_db.implants.len]" msg += "} " - ..(jointext(msg, null)) + return ..() /datum/controller/subsystem/transcore/Recover() for(var/key in SStranscore.databases) diff --git a/code/controllers/subsystems/vote.dm b/code/controllers/subsystems/vote.dm index c0476024973..102ffe5028b 100644 --- a/code/controllers/subsystems/vote.dm +++ b/code/controllers/subsystems/vote.dm @@ -25,7 +25,7 @@ SUBSYSTEM_DEF(vote) if(mode) time_remaining = round((started_time + duration - world.time)/10) if(mode == VOTE_GAMEMODE && ticker.current_state >= GAME_STATE_SETTING_UP) - to_chat(world, "Gamemode vote aborted: Game has already started.") + to_chat(world, span_bold("Gamemode vote aborted: Game has already started.")) reset() return if(time_remaining <= 0) @@ -105,7 +105,7 @@ SUBSYSTEM_DEF(vote) else factor = 1.4 choices["Initiate Crew Transfer"] = round(choices["Initiate Crew Transfer"] * factor) - to_world(span_purple("Crew Transfer Factor: [factor]")) + to_world(span_filter_system(span_purple("Crew Transfer Factor: [factor]"))) greatest_votes = max(choices["Initiate Crew Transfer"], choices["Extend the Shift"]) //VOREStation Edit . = list() // Get all options with that many votes and return them in a list @@ -120,7 +120,7 @@ SUBSYSTEM_DEF(vote) if(winners.len > 0) if(winners.len > 1) if(mode != VOTE_GAMEMODE || ticker.hide_mode == 0) // Here we are making sure we don't announce potential game modes - text = "Vote Tied Between:\n" + text = span_bold("Vote Tied Between:") + "\n" for(var/option in winners) text += "\t[option]\n" . = pick(winners) @@ -129,12 +129,12 @@ SUBSYSTEM_DEF(vote) if(choices[current_votes[key]] == .) round_voters += key // Keep track of who voted for the winning round. if(mode != VOTE_GAMEMODE || . == "Extended" || ticker.hide_mode == 0) // Announce Extended gamemode, but not other gamemodes - text += "Vote Result: [mode == VOTE_GAMEMODE ? gamemode_names[.] : .]" + text += span_bold("Vote Result: [mode == VOTE_GAMEMODE ? gamemode_names[.] : .]") else - text += "The vote has ended." + text += span_bold("The vote has ended.") else - text += "Vote Result: Inconclusive - No Votes!" + text += span_bold("Vote Result: Inconclusive - No Votes!") if(mode == VOTE_ADD_ANTAGONIST) antag_add_failed = 1 log_vote(text) @@ -167,10 +167,10 @@ SUBSYSTEM_DEF(vote) if(mode == VOTE_GAMEMODE) //fire this even if the vote fails. if(!round_progressing) round_progressing = 1 - to_world(span_red("The round will start soon.")) + to_world(span_boldannounce("The round will start soon.")) if(restart) - to_world("World restarting due to vote...") + to_world(span_filter_system("World restarting due to vote...")) feedback_set_details("end_error", "restart vote") if(blackbox) blackbox.save_all_data_to_sql() @@ -253,14 +253,14 @@ SUBSYSTEM_DEF(vote) log_vote(text) - to_world(span_purple("[text]\nType vote or click here to place your votes.\nYou have [config.vote_period / 10] seconds to vote.")) + to_world(span_filter_system(span_purple(span_bold("[text]") + "\nType " + span_bold("vote") + " or click here to place your votes.\nYou have [config.vote_period / 10] seconds to vote."))) if(vote_type == VOTE_CREW_TRANSFER || vote_type == VOTE_GAMEMODE || vote_type == VOTE_CUSTOM) world << sound('sound/ambience/alarm4.ogg', repeat = 0, wait = 0, volume = 50, channel = 3) if(mode == VOTE_GAMEMODE && round_progressing) gamemode_vote_called = TRUE round_progressing = 0 - to_world(span_red("Round start has been delayed.")) + to_world(span_boldannounce("Round start has been delayed.")) time_remaining = round(config.vote_period / 10) return 1 diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index ef76e63ca7b..69bfa4773cb 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -227,9 +227,9 @@ if(law == zeroth_law_borg) continue if(law == zeroth_law) - to_chat(who, span_danger("[law.get_index()]. [law.law]")) + to_chat(who, span_info(span_red("[law.get_index()]. [law.law]"))) else - to_chat(who, "[law.get_index()]. [law.law]") + to_chat(who, span_infoplain("[law.get_index()]. [law.law]")) /******************** * Stating Laws * diff --git a/code/datums/chat_message.dm b/code/datums/chat_message.dm index 65296088d48..9dc66a3cbc8 100644 --- a/code/datums/chat_message.dm +++ b/code/datums/chat_message.dm @@ -148,7 +148,7 @@ var/list/runechat_image_cache = list() // Differnt from our own system of name emphasis, maybe unify var/list/names = splittext(owner.name, " ") for (var/word in names) - text = replacetext(text, word, "[word]") + text = replacetext(text, word, span_bold("[word]")) var/list/prefixes diff --git a/code/datums/components/connect_mob_behalf.dm b/code/datums/components/connect_mob_behalf.dm new file mode 100644 index 00000000000..1c1a8a65234 --- /dev/null +++ b/code/datums/components/connect_mob_behalf.dm @@ -0,0 +1,59 @@ +/// This component behaves similar to connect_loc_behalf, but working off clients and mobs instead of loc +/// To be clear, we hook into a signal on a tracked client's mob +/// We retain the ability to react to that signal on a seperate listener, which makes this quite powerful +/datum/component/connect_mob_behalf + dupe_mode = COMPONENT_DUPE_UNIQUE + + /// An assoc list of signal -> procpath to register to the mob our client "owns" + var/list/connections + /// The master client we're working with + var/client/tracked + /// The mob we're currently tracking + var/mob/tracked_mob + +/datum/component/connect_mob_behalf/Initialize(client/tracked, list/connections) + . = ..() + if (!istype(tracked)) + return COMPONENT_INCOMPATIBLE + src.connections = connections + src.tracked = tracked + +/datum/component/connect_mob_behalf/RegisterWithParent() + RegisterSignal(tracked, COMSIG_PARENT_QDELETING, PROC_REF(handle_tracked_qdel)) + update_signals() + +/datum/component/connect_mob_behalf/UnregisterFromParent() + unregister_signals() + UnregisterSignal(tracked, COMSIG_PARENT_QDELETING) + + tracked = null + tracked_mob = null + +/datum/component/connect_mob_behalf/proc/handle_tracked_qdel() + SIGNAL_HANDLER + qdel(src) + +/datum/component/connect_mob_behalf/proc/update_signals() + unregister_signals() + // Yes this is a runtime silencer + // We could be in a position where logout is sent to two things, one thing intercepts it, then deletes the client's new mob + // It's rare, and the same check in connect_loc_behalf is more fruitful, but it's still worth doing + if(QDELETED(tracked?.mob)) + return + tracked_mob = tracked.mob + RegisterSignal(tracked_mob, COMSIG_MOB_LOGOUT, PROC_REF(on_logout)) + for (var/signal in connections) + parent.RegisterSignal(tracked_mob, signal, connections[signal]) + +/datum/component/connect_mob_behalf/proc/unregister_signals() + if(isnull(tracked_mob)) + return + + parent.UnregisterSignal(tracked_mob, connections) + UnregisterSignal(tracked_mob, COMSIG_MOB_LOGOUT) + + tracked_mob = null + +/datum/component/connect_mob_behalf/proc/on_logout(mob/source) + SIGNAL_HANDLER + update_signals() diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 59cd16434e6..be1b1236adb 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -91,7 +91,7 @@ /datum/proc/vv_get_header() . = list() if(("name" in vars) && !isatom(src)) - . += "[vars["name"]]
" + . += span_bold("[vars["name"]]") + "
" /datum/proc/on_reagent_change(changetype) return diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index ad9a210c79a..1cce0db9c5d 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -64,19 +64,19 @@ GLOBAL_DATUM(revdata, /datum/getrev) var/list/msg = list() if(GLOB.revdata.revision) - msg += "Server revision: B:[GLOB.revdata.branch] D:[GLOB.revdata.date]" + msg += span_bold("Server revision:") + " B:[GLOB.revdata.branch] D:[GLOB.revdata.date]" if(config.githuburl) - msg += "Commit: [GLOB.revdata.revision]" + msg += span_bold("Commit:") + " [GLOB.revdata.revision]" else - msg += "Commit: GLOB.revdata.revision" + msg += span_bold("Commit:") + " GLOB.revdata.revision" else - msg += "Server revision: Unknown" + msg += span_bold("Server revision:") + " Unknown" if(world.TgsAvailable()) var/datum/tgs_version/version = world.TgsVersion() - msg += "TGS version: [version.raw_parameter]" + msg += span_bold("TGS version:") + " [version.raw_parameter]" var/datum/tgs_version/api_version = world.TgsApiVersion() - msg += "DMAPI version: [api_version.raw_parameter]" + msg += span_bold("DMAPI version:") + " [api_version.raw_parameter]" if(GLOB.revdata.testmerge.len) msg += GLOB.revdata.GetTestMergeInfo() diff --git a/code/datums/managed_browsers/feedback_form.dm b/code/datums/managed_browsers/feedback_form.dm index ea6ef32b9f5..d44b1265f61 100644 --- a/code/datums/managed_browsers/feedback_form.dm +++ b/code/datums/managed_browsers/feedback_form.dm @@ -58,14 +58,14 @@ GENERAL_PROTECT_DATUM(/datum/managed_browser/feedback_form) if(can_be_private()) if(!feedback_hide_author) dat += "[my_client.ckey] " - dat += span_linkOn("Visible") + dat += span_linkOn(span_bold("Visible")) dat += " | " dat += href(src, list("feedback_hide_author" = 1), "Hashed") else dat += "[md5(ckey(lowertext(my_client.ckey + SSsqlite.get_feedback_pepper())))] " dat += href(src, list("feedback_hide_author" = 0), "Visible") dat += " | " - dat += span_linkOn("Hashed") + dat += span_linkOn(span_bold("Hashed")) else dat += my_client.ckey dat += "
" @@ -79,7 +79,7 @@ GENERAL_PROTECT_DATUM(/datum/managed_browser/feedback_form) if(feedback_body) dat += replacetext(feedback_body, "\n", "
") // So newlines will look like they work in the preview. else - dat += "\[Feedback goes here...\]" + dat += span_italics("\[Feedback goes here...\]") dat += "
" dat += href(src, list("feedback_edit_body" = 1), "Edit") dat += "
" diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 5c8367c5d94..43f41708764 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -88,7 +88,7 @@ if(current) //remove ourself from our old body's mind variable if(changeling) current.remove_changeling_powers() - current.verbs -= /datum/changeling/proc/EvolutionMenu + remove_verb(current, /datum/changeling/proc/EvolutionMenu) current.mind = null if(new_character.mind) //remove any mind currently in our new body's mind variable @@ -103,11 +103,14 @@ if(active) new_character.key = key //now transfer the key to link the client to our new body + if(new_character.client) + new_character.client.init_verbs() // re-initialize character specific verbs + /datum/mind/proc/store_memory(new_text) memory += "[new_text]
" /datum/mind/proc/show_memory(mob/recipient) - var/output = "[current.real_name]'s Memory
" + var/output = span_bold("[current.real_name]'s Memory") + "
" output += memory if(objectives.len>0) @@ -115,7 +118,7 @@ var/obj_count = 1 for(var/datum/objective/objective in objectives) - output += "Objective #[obj_count]: [objective.explanation_text]" + output += span_bold("Objective #[obj_count]") + ": [objective.explanation_text]" obj_count++ if(ambitions) @@ -127,7 +130,7 @@ tgui_alert_async(usr, "Not before round-start!", "Alert") return - var/out = "[name][(current&&(current.real_name!=name))?" (as [current.real_name])":""]
" + var/out = span_bold("[name]") + "[(current&&(current.real_name!=name))?" (as [current.real_name])":""]
" out += "Mind currently owned by key: [key] [active?"(synced)":"(not synced)"]
" out += "Assigned role: [assigned_role]. Edit
" out += "
" @@ -136,12 +139,12 @@ var/datum/antagonist/antag = all_antag_types[antag_type] out += "[antag.get_panel_entry(src)]" out += "
" - out += "Objectives
" + out += span_bold("Objectives") + "
" if(objectives && objectives.len) var/num = 1 for(var/datum/objective/O in objectives) - out += "Objective #[num]: [O.explanation_text] " + out += span_bold("Objective #[num]:") + " [O.explanation_text] " if(O.completed) out += "([span_green("complete")])" else @@ -154,7 +157,7 @@ else out += "None." out += "
\[add\]

" - out += "Ambitions: [ambitions ? ambitions : "None"] \[edit\]
" + out += span_bold("Ambitions:") + " [ambitions ? ambitions : "None"] \[edit\]
" usr << browse(out, "window=edit_memory[src]") /datum/mind/Topic(href, href_list) @@ -421,7 +424,7 @@ var/obj_count = 1 to_chat(current, span_blue("Your current objectives:")) for(var/datum/objective/objective in objectives) - to_chat(current, "Objective #[obj_count]: [objective.explanation_text]") + to_chat(current, span_bold("Objective #[obj_count]") + ": [objective.explanation_text]") obj_count++ edit_memory() @@ -516,7 +519,7 @@ if(!mind.name) mind.name = real_name mind.current = src if(player_is_antag(mind)) - src.client.verbs += /client/proc/aooc + add_verb(src.client, /client/proc/aooc) //HUMAN /mob/living/carbon/human/mind_initialize() diff --git a/code/datums/observation/unequipped.dm b/code/datums/observation/unequipped.dm index 353332de022..5b0dd0fe839 100644 --- a/code/datums/observation/unequipped.dm +++ b/code/datums/observation/unequipped.dm @@ -35,7 +35,7 @@ GLOBAL_DATUM_INIT(item_unequipped_event, /decl/observ/item_unequipped, new) **********************/ /obj/item/dropped(var/mob/user) - ..() + . = ..(user) //SEND_SIGNAL(user, COMSIG_OBSERVER_MOB_UNEQUIPPED, src) //SEND_SIGNAL(src, COMSIG_OBSERVER_ITEM_UNEQUIPPED, user) if(user) // Cannot always guarantee that user won't be null diff --git a/code/datums/roundstats/departmentgoal.dm b/code/datums/roundstats/departmentgoal.dm index d9abc7cbec4..ebebd56136f 100644 --- a/code/datums/roundstats/departmentgoal.dm +++ b/code/datums/roundstats/departmentgoal.dm @@ -41,7 +41,7 @@ GLOBAL_LIST(active_department_goals) for(var/category in GLOB.active_department_goals) var/list/cat_goals = GLOB.active_department_goals[category] - to_world(span_filter_system("[category]")) + to_world(span_world("[category]")) if(!LAZYLEN(cat_goals)) to_world(span_filter_system("There were no assigned goals!")) diff --git a/code/datums/roundstats/roundstats.dm b/code/datums/roundstats/roundstats.dm index 936e201d7b4..c01a38a2e74 100644 --- a/code/datums/roundstats/roundstats.dm +++ b/code/datums/roundstats/roundstats.dm @@ -84,7 +84,7 @@ var/global/list/security_printer_tickets = list() //VOREStation Edit //VOREStation Add End if(LAZYLEN(valid_stats_list)) - to_world("Shift trivia!") + to_world(span_world("Shift trivia!")) for(var/body in valid_stats_list) - to_world("[body]") + to_world(span_filter_system("[body]")) diff --git a/code/defines/procs/announce.dm b/code/defines/procs/announce.dm index c5b71e3e783..7840615cccc 100644 --- a/code/defines/procs/announce.dm +++ b/code/defines/procs/announce.dm @@ -69,7 +69,7 @@ to_world(span_alert("[message]")) if(announcer) to_world(span_alert(" -[html_encode(announcer)]")) - to_world("
") + to_world(span_alert("
")) /datum/announcement/priority/command/Message(message as text, message_title as text, var/list/zlevels) var/command diff --git a/code/game/antagonist/antagonist.dm b/code/game/antagonist/antagonist.dm index 7910d84ea34..e1f97252e1a 100644 --- a/code/game/antagonist/antagonist.dm +++ b/code/game/antagonist/antagonist.dm @@ -76,7 +76,7 @@ var/antag_text = "You are an antagonist! Within the rules, \ try to act as an opposing force to the crew. Further RP and try to make sure \ - other players have fun! If you are confused or at a loss, always adminhelp, \ + other players have " + span_italics("fun") + "! If you are confused or at a loss, always adminhelp, \ and before taking extreme actions, please try to also contact the administration! \ Think through your actions and make the roleplay immersive! Please remember all \ rules aside from those without explicit exceptions apply to antagonists." @@ -145,7 +145,7 @@ if(!istype(player)) message_admins("[uppertext(ticker.mode.name)]: Failed to find a candidate for [role_text].") return 0 - to_chat(player.current, span_danger("You have been selected this round as an antagonist!")) + to_chat(player.current, span_danger(span_italics("You have been selected this round as an antagonist!"))) message_admins("[uppertext(ticker.mode.name)]: Selected [player] as a [role_text].") if(istype(player.current, /mob/observer/dead)) create_default(player.current) diff --git a/code/game/antagonist/antagonist_add.dm b/code/game/antagonist/antagonist_add.dm index 2a1e2067607..76781e5defb 100644 --- a/code/game/antagonist/antagonist_add.dm +++ b/code/game/antagonist/antagonist_add.dm @@ -28,16 +28,16 @@ current_antagonists |= player if(faction_verb && player.current) - player.current.verbs |= faction_verb + add_verb(player.current, faction_verb) spawn(1 SECOND) //Added a delay so that this should pop up at the bottom and not the top of the text flood the new antag gets. to_chat(player.current, span_notice("Once you decide on a goal to pursue, you can optionally display it to \ everyone at the end of the shift with the " + span_bold("Set Ambition") + " verb, located in the IC tab. You can change this at any time, \ and it otherwise has no bearing on your round.")) - player.current.verbs |= /mob/living/proc/write_ambition + add_verb(player.current, /mob/living/proc/write_ambition) if(can_speak_aooc) - player.current.client.verbs += /client/proc/aooc + add_verb(player.current.client, /client/proc/aooc) // Handle only adding a mind and not bothering with gear etc. if(nonstandard_role_type) @@ -51,7 +51,7 @@ /datum/antagonist/proc/remove_antagonist(var/datum/mind/player, var/show_message, var/implanted) if(player.current && faction_verb) - player.current.verbs -= faction_verb + remove_verb(player.current, faction_verb) if(player in current_antagonists) to_chat(player.current, span_danger(span_large("You are no longer a [role_text]!"))) current_antagonists -= player @@ -60,8 +60,8 @@ update_icons_removed(player) BITSET(player.current.hud_updateflag, SPECIALROLE_HUD) if(!is_special_character(player)) - player.current.verbs -= /mob/living/proc/write_ambition - player.current.client.verbs -= /client/proc/aooc + remove_verb(player.current, /mob/living/proc/write_ambition) + remove_verb(player.current.client, /client/proc/aooc) player.ambitions = "" return 1 return 0 diff --git a/code/game/antagonist/antagonist_create.dm b/code/game/antagonist/antagonist_create.dm index 8c8d7b1f387..50c18a85ede 100644 --- a/code/game/antagonist/antagonist_create.dm +++ b/code/game/antagonist/antagonist_create.dm @@ -85,7 +85,7 @@ if(!code_owner && leader) code_owner = leader if(code_owner) - code_owner.store_memory("Nuclear Bomb Code: [code]", 0, 0) + code_owner.store_memory(span_bold("Nuclear Bomb Code") + ": [code]", 0, 0) to_chat(code_owner.current, "The nuclear authorization code is: [code]") else message_admins(span_danger("Could not spawn nuclear bomb. Contact a developer.")) @@ -101,7 +101,7 @@ window_flash(player.current.client) // Basic intro text. - to_chat(player.current, span_danger("You are a [role_text]!")) + to_chat(player.current, span_danger(span_large("You are a [role_text]!"))) if(leader_welcome_text && player == leader) to_chat(player.current, span_notice("[leader_welcome_text]")) else diff --git a/code/game/antagonist/antagonist_objectives.dm b/code/game/antagonist/antagonist_objectives.dm index 2acd6f7951e..766e9c25ba2 100644 --- a/code/game/antagonist/antagonist_objectives.dm +++ b/code/game/antagonist/antagonist_objectives.dm @@ -24,10 +24,10 @@ if(!O.completed && !O.check_completion()) result = 0 if(result && victory_text) - to_world(span_danger("[victory_text]")) + to_world(span_boldannounce(span_large("[victory_text]"))) if(victory_feedback_tag) feedback_set_details("round_end_result","[victory_feedback_tag]") else if(loss_text) - to_world(span_danger("[loss_text]")) + to_world(span_boldannounce(span_large("[loss_text]"))) if(loss_feedback_tag) feedback_set_details("round_end_result","[loss_feedback_tag]") /mob/living/proc/write_ambition() diff --git a/code/game/antagonist/outsider/ert.dm b/code/game/antagonist/outsider/ert.dm index 9c8884caed6..c9048f107e3 100644 --- a/code/game/antagonist/outsider/ert.dm +++ b/code/game/antagonist/outsider/ert.dm @@ -8,12 +8,12 @@ var/datum/antagonist/ert/ert role_text_plural = "Emergency Responders" welcome_text = "As member of the Emergency Response Team, you answer only to your leader and company officials." antag_sound = 'sound/effects/antag_notice/general_goodie_alert.ogg' - antag_text = "You are an anti antagonist! Within the rules, \ + antag_text = "You are an " + span_bold("anti") + " antagonist! Within the rules, \ try to save the station and its inhabitants from the ongoing crisis. \ - Try to make sure other players have fun! If you are confused or at a loss, always adminhelp, \ + Try to make sure other players have " + span_italics("fun") + "! If you are confused or at a loss, always adminhelp, \ and before taking extreme actions, please try to also contact the administration! \ - Think through your actions and make the roleplay immersive! Please remember all \ - rules aside from those without explicit exceptions apply to the ERT." + Think through your actions and make the roleplay immersive! " + span_bold("Please remember all \ + rules aside from those without explicit exceptions apply to the ERT.") leader_welcome_text = "As leader of the Emergency Response Team, you answer only to the Company, and have authority to override the " + JOB_SITE_MANAGER + " where it is necessary to achieve your mission goals. It is recommended that you attempt to cooperate with the " + JOB_SITE_MANAGER + " where possible, however." landmark_id = "Response Team" id_type = /obj/item/card/id/centcom/ERT diff --git a/code/game/antagonist/outsider/raider.dm b/code/game/antagonist/outsider/raider.dm index f494f917570..da69efdc570 100644 --- a/code/game/antagonist/outsider/raider.dm +++ b/code/game/antagonist/outsider/raider.dm @@ -173,22 +173,22 @@ var/datum/antagonist/raider/raiders if(antags_are_dead()) win_type = "Major" win_group = "Crew" - win_msg += "The Raiders have been wiped out!" + win_msg += span_bold("The Raiders have been wiped out!") else if(is_raider_crew_safe()) if(win_group == "Crew" && win_type == "Minor") win_type = "Major" win_group = "Crew" - win_msg += "The Raiders have left someone behind!" + win_msg += span_bold("The Raiders have left someone behind!") else if(win_group == "Raider") if(win_type == "Minor") win_type = "Major" - win_msg += "The Raiders escaped the station!" + win_msg += span_bold("The Raiders escaped the station!") else - win_msg += "The Raiders were repelled!" + win_msg += span_bold("The Raiders were repelled!") - to_world(span_danger("[win_type] [win_group] victory!")) - to_world("[win_msg]") + to_world(span_boldannounce(span_large("[win_type] [win_group] victory!"))) + to_world(span_filter_system("[win_msg]")) feedback_set_details("round_end_result","heist - [win_type] [win_group]") /datum/antagonist/raider/proc/is_raider_crew_safe() diff --git a/code/game/antagonist/outsider/technomancer.dm b/code/game/antagonist/outsider/technomancer.dm index cc1120c0573..976aa4f7621 100644 --- a/code/game/antagonist/outsider/technomancer.dm +++ b/code/game/antagonist/outsider/technomancer.dm @@ -28,7 +28,7 @@ var/datum/antagonist/technomancer/technomancers /datum/antagonist/technomancer/update_antag_mob(var/datum/mind/technomancer) ..() - technomancer.store_memory("Remember: Do not forget to purchase the functions and equipment you need.") + technomancer.store_memory(span_bold("Remember:") + " Do not forget to purchase the functions and equipment you need.") technomancer.current.real_name = "[pick(wizard_first)] [pick(wizard_second)]" technomancer.current.name = technomancer.current.real_name @@ -78,7 +78,7 @@ var/datum/antagonist/technomancer/technomancers break if(!survivor) feedback_set_details("round_end_result","loss - technomancer killed") - to_world(span_danger("The [(current_antagonists.len>1)?"[role_text_plural] have":"[role_text] has"] been killed!")) + to_world(span_boldannounce(span_large("The [(current_antagonists.len>1)?"[role_text_plural] have":"[role_text] has"] been killed!"))) /datum/antagonist/technomancer/print_player_summary() ..() @@ -87,7 +87,7 @@ var/datum/antagonist/technomancer/technomancers continue // Only want abandoned cores. if(!core.spells.len) continue // Cores containing spells only. - to_world("Abandoned [core] had [english_list(core.spells)].
") + to_world(span_filter_system("Abandoned [core] had [english_list(core.spells)].
")) /datum/antagonist/technomancer/print_player_full(var/datum/mind/player) var/text = print_player_lite(player) diff --git a/code/game/antagonist/outsider/wizard.dm b/code/game/antagonist/outsider/wizard.dm index 2e62719ad40..86d93cbc1a3 100644 --- a/code/game/antagonist/outsider/wizard.dm +++ b/code/game/antagonist/outsider/wizard.dm @@ -66,7 +66,7 @@ var/datum/antagonist/wizard/wizards /datum/antagonist/wizard/update_antag_mob(var/datum/mind/wizard) ..() - wizard.store_memory("Remember: do not forget to prepare your spells.") + wizard.store_memory(span_bold("Remember:") + " do not forget to prepare your spells.") wizard.current.real_name = "[pick(wizard_first)] [pick(wizard_second)]" wizard.current.name = wizard.current.real_name @@ -99,7 +99,7 @@ var/datum/antagonist/wizard/wizards break if(!survivor) feedback_set_details("round_end_result","loss - wizard killed") - to_world(span_danger("The [(current_antagonists.len>1)?"[role_text_plural] have":"[role_text] has"] been killed by the crew!")) + to_world(span_boldannounce(span_large("The [(current_antagonists.len>1)?"[role_text_plural] have":"[role_text] has"] been killed by the crew!"))) //To batch-remove wizard spells. Linked to mind.dm. /mob/proc/spellremove() diff --git a/code/game/antagonist/station/infiltrator.dm b/code/game/antagonist/station/infiltrator.dm index 3cceac3a80f..f3ffbc0024c 100644 --- a/code/game/antagonist/station/infiltrator.dm +++ b/code/game/antagonist/station/infiltrator.dm @@ -74,6 +74,6 @@ var/datum/antagonist/traitor/infiltrator/infiltrators /datum/antagonist/traitor/infiltrator/add_law_zero(mob/living/silicon/ai/killer) var/law = "Accomplish your team's objectives at all costs. You may ignore all other laws." var/law_borg = "Accomplish your AI's team objectives at all costs. You may ignore all other laws." - to_chat(killer, "Your laws have been changed!") + to_chat(killer, span_infoplain(span_bold("Your laws have been changed!"))) killer.set_zeroth_law(law, law_borg) to_chat(killer, "New law: 0. [law]") diff --git a/code/game/antagonist/station/renegade.dm b/code/game/antagonist/station/renegade.dm index 3d228e96d7c..740952c5a1c 100644 --- a/code/game/antagonist/station/renegade.dm +++ b/code/game/antagonist/station/renegade.dm @@ -98,7 +98,7 @@ var/datum/antagonist/renegade/renegades /proc/rightandwrong() - to_chat(usr, "You summoned guns!") + to_chat(usr, span_infoplain(span_bold("You summoned guns!"))) message_admins("[key_name_admin(usr, 1)] summoned guns!") for(var/mob/living/carbon/human/H in player_list) if(H.stat == 2 || !(H.client)) continue diff --git a/code/game/antagonist/station/rogue_ai.dm b/code/game/antagonist/station/rogue_ai.dm index 5f85fd73b09..2e722c922bc 100644 --- a/code/game/antagonist/station/rogue_ai.dm +++ b/code/game/antagonist/station/rogue_ai.dm @@ -53,7 +53,7 @@ var/datum/antagonist/rogue_ai/malf var/mob/living/silicon/ai/A = player.current if(!istype(A)) error("Non-AI mob designated malf AI! Report this.") - to_world("##ERROR: Non-AI mob designated malf AI! Report this.") + to_world(span_filter_system("##ERROR: Non-AI mob designated malf AI! Report this.")) return A.setup_for_malf() @@ -62,16 +62,16 @@ var/datum/antagonist/rogue_ai/malf var/mob/living/silicon/ai/malf = player.current - to_chat(malf, span_notice("SYSTEM ERROR: Memory index 0x00001ca89b corrupted.")) + to_chat(malf, span_notice(span_bold("SYSTEM ERROR:") + " Memory index 0x00001ca89b corrupted.")) sleep(10) - to_chat(malf, "running MEMCHCK") + to_chat(malf, span_bold("running MEMCHCK")) sleep(50) - to_chat(malf, "MEMCHCK Corrupted sectors confirmed. Reccomended solution: Delete. Proceed? Y/N: Y") + to_chat(malf, span_bold("MEMCHCK") + " Corrupted sectors confirmed. Reccomended solution: Delete. Proceed? Y/N: Y") sleep(10) // this is so CI doesn't complain about the backslash-B. Fixed at compile time (or should be). to_chat(malf, span_notice("Corrupted files deleted: sys\\core\\users.dat sys\\core\\laws.dat sys\\core\\" + "backups.dat")) sleep(20) - to_chat(malf, span_notice("CAUTION: Law database not found! User database not found! Unable to restore backups. Activating failsafe AI shutd3wn52&&$#!##")) + to_chat(malf, span_notice(span_bold("CAUTION:") + " Law database not found! User database not found! Unable to restore backups. Activating failsafe AI shutd3wn52&&$#!##")) sleep(5) to_chat(malf, span_notice("Subroutine nt_failsafe.sys was terminated (#212 Routine Not Responding).")) sleep(20) diff --git a/code/game/antagonist/station/traitor.dm b/code/game/antagonist/station/traitor.dm index 48f8e602b9d..e517ec8e38b 100644 --- a/code/game/antagonist/station/traitor.dm +++ b/code/game/antagonist/station/traitor.dm @@ -95,7 +95,7 @@ var/datum/antagonist/traitor/traitors var/mob/living/carbon/human/M = get_nt_opposed() if(M && M != traitor_mob) to_chat(traitor_mob, "We have received credible reports that [M.real_name] might be willing to help our cause. If you need assistance, consider contacting them.") - traitor_mob.mind.store_memory("Potential Collaborator: [M.real_name]") + traitor_mob.mind.store_memory(span_bold("Potential Collaborator") + ": [M.real_name]") //Begin code phrase. give_codewords(traitor_mob) @@ -160,7 +160,7 @@ var/datum/antagonist/traitor/traitors target_radio.hidden_uplink = T target_radio.traitor_frequency = freq to_chat(traitor_mob, "A portable object teleportation relay has been installed in your [R.name] [loc]. Simply dial the frequency [format_frequency(freq)] to unlock its hidden features.") - traitor_mob.mind.store_memory("Radio Freq: [format_frequency(freq)] ([R.name] [loc]).") + traitor_mob.mind.store_memory(span_bold("Radio Freq:") + " [format_frequency(freq)] ([R.name] [loc]).") else if (istype(R, /obj/item/pda)) // generate a passcode if the uplink is hidden in a PDA diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 38f066ad7b2..55730da2a46 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -247,7 +247,7 @@ // Don't make these call bicon or anything, these are what bicon uses. They need to return an icon. /atom/proc/examine_icon() - return icon(icon=src.icon, icon_state=src.icon_state, dir=SOUTH, frame=1, moving=0) + return src // 99% of the time just returning src will be sufficient. More complex examine icon things are available where they are needed // called by mobs when e.g. having the atom as their machine, pulledby, loc (AKA mob being inside the atom) or buckled var set. // see code/modules/mob/mob_movement.dm for more. @@ -786,3 +786,33 @@ else if(C) color = C return + +///Passes Stat Browser Panel clicks to the game and calls client click on an atom +/atom/Topic(href, list/href_list) + . = ..() + if(!usr?.client) + return + var/client/usr_client = usr.client + var/list/paramslist = list() + + if(href_list["statpanel_item_click"]) + switch(href_list["statpanel_item_click"]) + if("left") + paramslist["left"] = "1" + if("right") + paramslist["right"] = "1" + if("middle") + paramslist["middle"] = "1" + else + return + + if(href_list["statpanel_item_shiftclick"]) + paramslist["shift"] = "1" + if(href_list["statpanel_item_ctrlclick"]) + paramslist["ctrl"] = "1" + if(href_list["statpanel_item_altclick"]) + paramslist["alt"] = "1" + + var/mouseparams = list2params(paramslist) + usr_client.Click(src, loc, null, mouseparams) + return TRUE diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index a94ba8878fe..5a89afbddbc 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -212,7 +212,7 @@ if(!M.client && M.mind) for(var/mob/observer/dead/ghost in player_list) if(ghost.mind == M.mind) - to_chat(ghost, span_interface("Your corpse has been placed into a cloning scanner. Return to your body if you want to be resurrected/cloned! (Verbs -> Ghost -> Re-enter corpse)")) + to_chat(ghost, span_interface(span_large(span_bold("Your corpse has been placed into a cloning scanner. Return to your body if you want to be resurrected/cloned!") + " (Verbs -> Ghost -> Re-enter corpse)"))) break SStgui.update_uis(src) diff --git a/code/game/dna/genes/powers.dm b/code/game/dna/genes/powers.dm index 5c1120c734c..7617682b367 100644 --- a/code/game/dna/genes/powers.dm +++ b/code/game/dna/genes/powers.dm @@ -20,7 +20,7 @@ /datum/dna/gene/basic/remoteview/activate(var/mob/M, var/connected, var/flags) ..(M,connected,flags) - M.verbs += /mob/living/carbon/human/proc/remoteobserve + add_verb(M, /mob/living/carbon/human/proc/remoteobserve) /datum/dna/gene/basic/regenerate name="Regenerate" @@ -48,7 +48,7 @@ /datum/dna/gene/basic/remotetalk/activate(var/mob/M, var/connected, var/flags) ..(M,connected,flags) - M.verbs += /mob/living/carbon/human/proc/remotesay + add_verb(M, /mob/living/carbon/human/proc/remotesay) /datum/dna/gene/basic/morph name="Morph" @@ -60,7 +60,7 @@ /datum/dna/gene/basic/morph/activate(var/mob/M) ..(M) - M.verbs += /mob/living/carbon/human/proc/morph + add_verb(M, /mob/living/carbon/human/proc/morph) /datum/dna/gene/basic/cold_resist name="Cold Resistance" diff --git a/code/game/gamemodes/calamity/calamity.dm b/code/game/gamemodes/calamity/calamity.dm index 0e1e577b9cc..1beb9081e38 100644 --- a/code/game/gamemodes/calamity/calamity.dm +++ b/code/game/gamemodes/calamity/calamity.dm @@ -23,6 +23,6 @@ ..() /datum/game_mode/calamity/check_victory() - to_world("This terrible, terrible day has finally ended!") + to_world(span_world(span_large("This terrible, terrible day has finally ended!"))) -#undef ANTAG_TYPE_RATIO \ No newline at end of file +#undef ANTAG_TYPE_RATIO diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index a8ea905576d..de15c8a535b 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -65,8 +65,8 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E if(!mind) return if(!mind.changeling) mind.changeling = new /datum/changeling(gender) - verbs.Add(/datum/changeling/proc/EvolutionMenu) - verbs.Add(/mob/proc/changeling_respec) + add_verb(src, /datum/changeling/proc/EvolutionMenu) + add_verb(src, /mob/proc/changeling_respec) add_language("Changeling") var/lesser_form = !ishuman(src) @@ -85,7 +85,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E if(P.isVerb) if(lesser_form && !P.allowduringlesserform) continue if(!(P in src.verbs)) - verbs.Add(P.verbpath) + add_verb(src, P.verbpath) if(P.make_hud_button) if(!src.ability_master) src.ability_master = new /obj/screen/movable/ability_master(src) @@ -113,7 +113,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E if(!mind || !mind.changeling) return for(var/datum/power/changeling/P in mind.changeling.purchased_powers) if(P.isVerb) - verbs.Remove(P.verbpath) + remove_verb(src, P.verbpath) var/obj/screen/ability/verb_based/changeling/C = ability_master.get_ability_by_proc_ref(P.verbpath) if(C) ability_master.remove_ability(C) @@ -235,8 +235,8 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E changeling.chem_charges -= required_chems changeling.sting_range = 1 - src.verbs -= verb_path - spawn(10) src.verbs += verb_path + remove_verb(src, verb_path) + spawn(10) add_verb(src, verb_path) to_chat(src, span_notice("We stealthily sting [T].")) if(!T.mind || !T.mind.changeling) return T //T will be affected by the sting diff --git a/code/game/gamemodes/changeling/powers/armor.dm b/code/game/gamemodes/changeling/powers/armor.dm index 9354d053cd4..55b55ada488 100644 --- a/code/game/gamemodes/changeling/powers/armor.dm +++ b/code/game/gamemodes/changeling/powers/armor.dm @@ -67,7 +67,7 @@ desc = "A suction cupped mass of flesh, shaped like a foot." name = "fleshy grippers" icon_state = "lingspacesuit" - action_button_name = "Toggle Grippers" + actions_types = list(/datum/action/item_action/toggle_grippers) canremove = FALSE /obj/item/clothing/shoes/magboots/changeling/set_slowdown() @@ -124,7 +124,7 @@ desc = "A tough, hard mass of chitin, with long talons for digging into terrain." name = "chitinous talons" icon_state = "lingarmor" - action_button_name = "Toggle Talons" + actions_types = list(/datum/action/item_action/toggle_talons) /obj/item/clothing/gloves/combat/changeling //Combined insulated/fireproof gloves name = "chitinous gauntlets" diff --git a/code/game/gamemodes/changeling/powers/boost_range.dm b/code/game/gamemodes/changeling/powers/boost_range.dm index 8ffcd8ce35a..1b818a1f032 100644 --- a/code/game/gamemodes/changeling/powers/boost_range.dm +++ b/code/game/gamemodes/changeling/powers/boost_range.dm @@ -24,8 +24,8 @@ range = range + 3 to_chat(src, span_notice("We can fire our next sting from five squares away.")) changeling.sting_range = range - src.verbs -= /mob/proc/changeling_boost_range + remove_verb(src, /mob/proc/changeling_boost_range) spawn(5) - src.verbs += /mob/proc/changeling_boost_range + add_verb(src, /mob/proc/changeling_boost_range) feedback_add_details("changeling_powers","RS") return 1 diff --git a/code/game/gamemodes/changeling/powers/cryo_sting.dm b/code/game/gamemodes/changeling/powers/cryo_sting.dm index 3a80b2bbb55..adf6cc07514 100644 --- a/code/game/gamemodes/changeling/powers/cryo_sting.dm +++ b/code/game/gamemodes/changeling/powers/cryo_sting.dm @@ -24,8 +24,8 @@ if(T.reagents) T.reagents.add_reagent("cryotoxin", inject_amount) feedback_add_details("changeling_powers","CS") - src.verbs -= /mob/proc/changeling_cryo_sting + remove_verb(src, /mob/proc/changeling_cryo_sting) spawn(3 MINUTES) to_chat(src, span_notice("Our cryogenic string is ready to be used once more.")) - src.verbs |= /mob/proc/changeling_cryo_sting + add_verb(src, /mob/proc/changeling_cryo_sting) return 1 diff --git a/code/game/gamemodes/changeling/powers/digital_camo.dm b/code/game/gamemodes/changeling/powers/digital_camo.dm index 70312efcdff..cca4f054aed 100644 --- a/code/game/gamemodes/changeling/powers/digital_camo.dm +++ b/code/game/gamemodes/changeling/powers/digital_camo.dm @@ -29,8 +29,8 @@ C.mind.changeling.chem_charges = max(C.mind.changeling.chem_charges - 1, 0) sleep(40) - src.verbs -= /mob/proc/changeling_digitalcamo + remove_verb(src, /mob/proc/changeling_digitalcamo) spawn(5) - src.verbs += /mob/proc/changeling_digitalcamo + add_verb(src, /mob/proc/changeling_digitalcamo) feedback_add_details("changeling_powers","CAM") return 1 diff --git a/code/game/gamemodes/changeling/powers/fake_death.dm b/code/game/gamemodes/changeling/powers/fake_death.dm index 696402f37f5..bad45391353 100644 --- a/code/game/gamemodes/changeling/powers/fake_death.dm +++ b/code/game/gamemodes/changeling/powers/fake_death.dm @@ -43,11 +43,11 @@ spawn(rand(2 MINUTES, 4 MINUTES)) //The ling will now be able to choose when to revive - verbs.Add(/mob/proc/changeling_revive) + add_verb(src, /mob/proc/changeling_revive) new /obj/changeling_revive_holder(src) - to_chat(src, span_notice("We are ready to rise. Use the Revive verb when you are ready.")) + to_chat(src, span_notice(span_giant("We are ready to rise. Use the Revive verb when you are ready."))) feedback_add_details("changeling_powers","FD") return 1 diff --git a/code/game/gamemodes/changeling/powers/fleshmend.dm b/code/game/gamemodes/changeling/powers/fleshmend.dm index 743a8202e3e..cf4c8d8a2af 100644 --- a/code/game/gamemodes/changeling/powers/fleshmend.dm +++ b/code/game/gamemodes/changeling/powers/fleshmend.dm @@ -33,9 +33,9 @@ C.adjustFireLoss(-heal_amount) sleep(1 SECOND) - src.verbs -= /mob/proc/changeling_fleshmend + remove_verb(src, /mob/proc/changeling_fleshmend) spawn(50 SECONDS) to_chat(src, span_notice("Our regeneration has slowed to normal levels.")) - src.verbs += /mob/proc/changeling_fleshmend + add_verb(src, /mob/proc/changeling_fleshmend) feedback_add_details("changeling_powers","FM") return 1 diff --git a/code/game/gamemodes/changeling/powers/revive.dm b/code/game/gamemodes/changeling/powers/revive.dm index ebf53d4a1c2..d3ebd820c39 100644 --- a/code/game/gamemodes/changeling/powers/revive.dm +++ b/code/game/gamemodes/changeling/powers/revive.dm @@ -82,7 +82,7 @@ C.set_stat(CONSCIOUS) C.forbid_seeing_deadchat = FALSE C.timeofdeath = null - verbs.Remove(/mob/proc/changeling_revive) + remove_verb(src, /mob/proc/changeling_revive) // re-add our changeling powers C.make_changeling() diff --git a/code/game/gamemodes/changeling/powers/transform.dm b/code/game/gamemodes/changeling/powers/transform.dm index e94e9393ad3..4bf04341ef3 100644 --- a/code/game/gamemodes/changeling/powers/transform.dm +++ b/code/game/gamemodes/changeling/powers/transform.dm @@ -56,9 +56,9 @@ for(var/datum/modifier/mod in chosen_dna.genMods) self.modifiers.Add(mod.type) - src.verbs -= /mob/proc/changeling_transform + remove_verb(src, /mob/proc/changeling_transform) spawn(10) - src.verbs += /mob/proc/changeling_transform + add_verb(src, /mob/proc/changeling_transform) src.regenerate_icons() feedback_add_details("changeling_powers","TR") diff --git a/code/game/gamemodes/cult/construct_spells.dm b/code/game/gamemodes/cult/construct_spells.dm index 35523fa9a09..9baf8667f76 100644 --- a/code/game/gamemodes/cult/construct_spells.dm +++ b/code/game/gamemodes/cult/construct_spells.dm @@ -671,6 +671,6 @@ W.visible_message(span_danger("\The [user] [attack_message] \the [W], obliterating it!")) W.dismantle_wall(1) else - user.visible_message("\The [user] lowers its fist.") + user.visible_message(span_bold("\The [user]") + " lowers its fist.") return qdel(src) diff --git a/code/game/gamemodes/cult/narsie.dm b/code/game/gamemodes/cult/narsie.dm index 5ec7056a076..1aabe00bb91 100644 --- a/code/game/gamemodes/cult/narsie.dm +++ b/code/game/gamemodes/cult/narsie.dm @@ -43,7 +43,7 @@ var/global/list/narsie_list = list() /obj/singularity/narsie/large/New() ..() if(announce) - to_world("[uppertext(name)] HAS RISEN") + to_world(span_world(span_narsie(span_red("[uppertext(name)] HAS RISEN")))) world << sound('sound/effects/weather/wind/wind_5_1.ogg') narsie_spawn_animation() @@ -79,7 +79,7 @@ var/global/list/narsie_list = list() if(M.status_flags & GODMODE) continue if(!iscultist(M)) - to_chat(M, span_danger(" You feel your sanity crumble away in an instant as you gaze upon [src.name]...")) + to_chat(M, span_danger("You feel your sanity crumble away in an instant as you gaze upon [src.name]...")) M.apply_effect(3, STUN) @@ -313,7 +313,7 @@ var/global/list/narsie_list = list() /obj/singularity/narsie/proc/acquire(const/mob/food) var/capname = uppertext(name) - to_chat(target, span_notice("[capname] HAS LOST INTEREST IN YOU.")) + to_chat(target, span_boldnotice("[capname] HAS LOST INTEREST IN YOU.")) target = food if (ishuman(target)) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index bdb2fca4827..d043c4aba2a 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -197,7 +197,7 @@ var/list/sacrificed = list() cultists.Add(M) if(cultists.len >= 9) if(!narsie_cometh)//so we don't initiate Hell more than one time. - to_world(span_narsie(span_red(span_bold("THE VEIL HAS BEEN SHATTERED!")))) + to_world(span_world(span_narsie(span_red("THE VEIL HAS BEEN SHATTERED!")))) world << sound('sound/effects/weather/wind/wind_5_1.ogg') SetUniversalState(/datum/universal_state/hell) @@ -357,9 +357,9 @@ var/list/sacrificed = list() else if(!corpse_to_raise.client && corpse_to_raise.mind) //Don't force the dead person to come back if they don't want to. for(var/mob/observer/dead/ghost in player_list) if(ghost.mind == corpse_to_raise.mind) - to_chat(ghost, span_interface("The cultist [usr.real_name] is trying to \ - revive you. Return to your body if you want to be resurrected into the service of Nar'Sie! \ - (Verbs -> Ghost -> Re-enter corpse)")) + to_chat(ghost, span_interface(span_large(span_bold("The cultist [usr.real_name] is trying to \ + revive you. Return to your body if you want to be resurrected into the service of Nar'Sie!") + "\ + (Verbs -> Ghost -> Re-enter corpse)"))) break sleep(10 SECONDS) @@ -1082,10 +1082,10 @@ var/list/sacrificed = list() var/obj/item/nullrod/N = locate() in T if(N) for(var/mob/O in viewers(T, null)) - O.show_message(span_warning(span_bold("[usr] invokes a talisman at [T], but they are unaffected!")), 1) + O.show_message(span_boldwarning("[usr] invokes a talisman at [T], but they are unaffected!"), 1) else for(var/mob/O in viewers(T, null)) - O.show_message(span_warning(span_bold("[usr] invokes a talisman at [T]")), 1) + O.show_message(span_boldwarning("[usr] invokes a talisman at [T]"), 1) if(issilicon(T)) T.Weaken(15) diff --git a/code/game/gamemodes/cult/soulstone.dm b/code/game/gamemodes/cult/soulstone.dm index 5083139f127..f0e78bc176e 100644 --- a/code/game/gamemodes/cult/soulstone.dm +++ b/code/game/gamemodes/cult/soulstone.dm @@ -76,7 +76,7 @@ for(var/mob/living/simple_mob/construct/shade/A in src) A.status_flags &= ~GODMODE A.canmove = 1 - to_chat(A, "You have been released from your prison, but you are still bound to [U.name]'s will. Help them suceed in their goals at all costs.") + to_chat(A, span_infoplain(span_bold("You have been released from your prison, but you are still bound to [U.name]'s will. Help them suceed in their goals at all costs."))) A.forceMove(U.loc) A.cancel_camera() src.icon_state = "soulstone" @@ -191,8 +191,8 @@ if(iscultist(U)) cult.add_antagonist(Z.mind) qdel(T) - to_chat(Z, "You are playing a Juggernaut. Though slow, you can withstand extreme punishment, and rip apart enemies and walls alike.") - to_chat(Z, "You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.") + to_chat(Z, span_infoplain(span_bold("You are playing a Juggernaut. Though slow, you can withstand extreme punishment, and rip apart enemies and walls alike."))) + to_chat(Z, span_infoplain(span_bold("You are still bound to serve your creator, follow their orders and help them complete their goals at all costs."))) Z.cancel_camera() qdel(src) if("Wraith") @@ -201,8 +201,8 @@ if(iscultist(U)) cult.add_antagonist(Z.mind) qdel(T) - to_chat(Z, "You are playing a Wraith. Though relatively fragile, you are fast, deadly, and even able to phase through walls.") - to_chat(Z, "You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.") + to_chat(Z, span_infoplain(span_bold("You are playing a Wraith. Though relatively fragile, you are fast, deadly, and even able to phase through walls."))) + to_chat(Z, span_infoplain(span_bold("You are still bound to serve your creator, follow their orders and help them complete their goals at all costs."))) Z.cancel_camera() qdel(src) if("Artificer") @@ -211,8 +211,8 @@ if(iscultist(U)) cult.add_antagonist(Z.mind) qdel(T) - to_chat(Z, "You are playing an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, repair allied constructs (by clicking on them), and even create new constructs") - to_chat(Z, "You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.") + to_chat(Z, span_infoplain(span_bold("You are playing an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, repair allied constructs (by clicking on them), and even create new constructs"))) + to_chat(Z, span_infoplain(span_bold("You are still bound to serve your creator, follow their orders and help them complete their goals at all costs."))) Z.cancel_camera() qdel(src) if("Harvester") @@ -221,8 +221,8 @@ if(iscultist(U)) cult.add_antagonist(Z.mind) qdel(T) - to_chat(Z, "You are playing a Harvester. You are relatively weak, but your physical frailty is made up for by your ranged abilities.") - to_chat(Z, "You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.") + to_chat(Z, span_infoplain(span_bold("You are playing a Harvester. You are relatively weak, but your physical frailty is made up for by your ranged abilities."))) + to_chat(Z, span_infoplain(span_bold("You are still bound to serve your creator, follow their orders and help them complete their goals at all costs."))) Z.cancel_camera() qdel(src) if("Behemoth") @@ -231,8 +231,8 @@ if(iscultist(U)) cult.add_antagonist(Z.mind) qdel(T) - to_chat(Z, "You are playing a Behemoth. You are incredibly slow, though your slowness is made up for by the fact your shell is far larger than any of your bretheren. You are the Unstoppable Force, and Immovable Object.") - to_chat(Z, "You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.") + to_chat(Z, span_infoplain(span_bold("You are playing a Behemoth. You are incredibly slow, though your slowness is made up for by the fact your shell is far larger than any of your bretheren. You are the Unstoppable Force, and Immovable Object."))) + to_chat(Z, span_infoplain(span_bold("You are still bound to serve your creator, follow their orders and help them complete their goals at all costs."))) Z.cancel_camera() qdel(src) diff --git a/code/game/gamemodes/cult/talisman.dm b/code/game/gamemodes/cult/talisman.dm index d2bc74adbab..47add9a0ea6 100644 --- a/code/game/gamemodes/cult/talisman.dm +++ b/code/game/gamemodes/cult/talisman.dm @@ -60,7 +60,7 @@ qdel(src) return - var/dat = "There are [src.uses] bloody runes on the parchment.
" + var/dat = span_bold("There are [src.uses] bloody runes on the parchment.") + "
" dat += "Please choose the chant to be imbued into the fabric of reality.
" dat += "
" dat += "N'ath reth sh'yro eth d'raggathnor! - Allows you to summon a new arcane tome.
" diff --git a/code/game/gamemodes/epidemic/epidemic.dm b/code/game/gamemodes/epidemic/epidemic.dm index 5b98ee0aacb..6be1aeaac37 100644 --- a/code/game/gamemodes/epidemic/epidemic.dm +++ b/code/game/gamemodes/epidemic/epidemic.dm @@ -34,16 +34,16 @@ ///////////////////////////////////////////////////////// /datum/game_mode/epidemic/send_intercept() - var/intercepttext = "CONFIDENTIAL REPORT
" + var/intercepttext = span_large(span_red(span_bold("CONFIDENTIAL REPORT"))) + "
" virus_name = "X-[rand(1,99)]™" - intercepttext += "Warning: Pathogen [virus_name] has been detected on [station_name()].

" - intercepttext += "Code violet quarantine of [station_name()] put under immediate effect.
" - intercepttext += "Class [rand(2,5)] cruiser has been dispatched. ETA: [round(cruiser_seconds() / 60)] minutes.
" - intercepttext += "
Instructions
" - intercepttext += "* ELIMINATE THREAT WITH EXTREME PREJUDICE. [virus_name] IS HIGHLY CONTAGIOUS. INFECTED CREW MEMBERS MUST BE QUARANTINED IMMEDIATELY.
" - intercepttext += "* [station_name()] is under QUARANTINE. Any vessels outbound from [station_name()] will be tracked down and destroyed.
" - intercepttext += "* The existence of [virus_name] is highly confidential. To prevent a panic, only high-ranking staff members are authorized to know of its existence. Crew members that illegally obtained knowledge of [virus_name] are to be neutralized.
" - intercepttext += "* A cure is to be researched immediately, but NanoTrasen intellectual property must be respected. To prevent knowledge of [virus_name] from falling into unauthorized hands, all medical staff that work with the pathogen must be enhanced with a NanoTrasen loyality implant.
" + intercepttext += span_bold("Warning: Pathogen [virus_name] has been detected on [station_name()].") + "

" + intercepttext += span_bold("Code violet quarantine of [station_name()] put under immediate effect.") + "
" + intercepttext += span_bold("Class [rand(2,5)] cruiser has been dispatched. ETA: [round(cruiser_seconds() / 60)] minutes.") + "
" + intercepttext += "
" + span_bold(span_normal(span_blue("Instructions"))) + "
" + intercepttext += span_bold("* ELIMINATE THREAT WITH EXTREME PREJUDICE. [virus_name] IS HIGHLY CONTAGIOUS. INFECTED CREW MEMBERS MUST BE QUARANTINED IMMEDIATELY.") + "
" + intercepttext += span_bold("* [station_name()] is under QUARANTINE. Any vessels outbound from [station_name()] will be tracked down and destroyed.") + "
" + intercepttext += span_bold("* The existence of [virus_name] is highly confidential. To prevent a panic, only high-ranking staff members are authorized to know of its existence. Crew members that illegally obtained knowledge of [virus_name] are to be neutralized.") + "
" + intercepttext += span_bold("* A cure is to be researched immediately, but NanoTrasen intellectual property must be respected. To prevent knowledge of [virus_name] from falling into unauthorized hands, all medical staff that work with the pathogen must be enhanced with a NanoTrasen loyality implant.") + "
" //New message handling won't hurt if someone enables epidemic @@ -58,9 +58,9 @@ to_chat(M, span_danger("[extra_law]")) /datum/game_mode/epidemic/proc/announce_to_kill_crew() - var/intercepttext = "CONFIDENTIAL REPORT
" - intercepttext += "PATHOGEN [virus_name] IS STILL PRESENT ON [station_name()]. IN COMPLIANCE WITH NANOTRASEN LAWS FOR INTERSTELLAR SAFETY, EMERGENCY SAFETY MEASURES HAVE BEEN AUTHORIZED. ALL INFECTED CREW MEMBERS ON [station_name()] ARE TO BE NEUTRALIZED AND DISPOSED OF IN A MANNER THAT WILL DESTROY ALL TRACES OF THE PATHOGEN. FAILURE TO COMPLY WILL RESULT IN IMMEDIATE DESTRUCTION OF [station_name].
" - intercepttext += "CRUISER WILL ARRIVE IN [round(cruiser_seconds()/60)] MINUTES
" + var/intercepttext = span_large(span_red(span_bold("CONFIDENTIAL REPORT"))) + "
" + intercepttext += span_normal(span_red(span_bold("PATHOGEN [virus_name] IS STILL PRESENT ON [station_name()]. IN COMPLIANCE WITH NANOTRASEN LAWS FOR INTERSTELLAR SAFETY, EMERGENCY SAFETY MEASURES HAVE BEEN AUTHORIZED. ALL INFECTED CREW MEMBERS ON [station_name()] ARE TO BE NEUTRALIZED AND DISPOSED OF IN A MANNER THAT WILL DESTROY ALL TRACES OF THE PATHOGEN. FAILURE TO COMPLY WILL RESULT IN IMMEDIATE DESTRUCTION OF [station_name].")) + "
" + intercepttext += span_bold("CRUISER WILL ARRIVE IN [round(cruiser_seconds()/60)] MINUTES") + "
" post_comm_message("Cent. Com. CONFIDENTIAL REPORT", intercepttext) world << sound('sound/AI/commandreport.ogg') @@ -78,8 +78,8 @@ crew += H if(crew.len < 2) - to_world(span_danger("There aren't enough players for this mode!")) - to_world(span_danger("Rebooting world in 5 seconds.")) + to_world(span_boldannounce("There aren't enough players for this mode!")) + to_world(span_boldannounce("Rebooting world in 5 seconds.")) if(blackbox) blackbox.save_all_data_to_sql() @@ -169,10 +169,10 @@ for(var/mob/M in world) if(M.client) M << 'sound/machines/Alarm.ogg' - to_world(span_notice("Incoming missile detected.. Impact in 10..")) + to_world(span_boldannounce("Incoming missile detected.. Impact in 10..")) for (var/i=9 to 1 step -1) sleep(10) - to_world(span_notice("[i]..")) + to_world(span_boldannounce("[i]..")) sleep(10) enter_allowed = 0 if(ticker) @@ -190,9 +190,9 @@ /datum/game_mode/epidemic/declare_completion() if(finished == 1) feedback_set_details("round_end_result","win - epidemic cured") - to_world(span_danger(span_large("The virus outbreak was contained! The crew wins!"))) + to_world(span_boldannounce(span_large("The virus outbreak was contained! The crew wins!"))) else if(finished == 2) feedback_set_details("round_end_result","loss - rev heads killed") - to_world(span_danger(span_large("The crew succumbed to the epidemic!"))) + to_world(span_boldannounce(span_large("The crew succumbed to the epidemic!"))) ..() return 1 diff --git a/code/game/gamemodes/events/holidays/Christmas.dm b/code/game/gamemodes/events/holidays/Christmas.dm index 5139a37b81d..8e79379c7f1 100644 --- a/code/game/gamemodes/events/holidays/Christmas.dm +++ b/code/game/gamemodes/events/holidays/Christmas.dm @@ -31,16 +31,16 @@ target.visible_message(span_notice("[user] and [target] pop \an [src]! *pop*"), span_notice("You pull \an [src] with [target]! *pop*"), span_notice("You hear a *pop*.")) var/obj/item/paper/Joke = new /obj/item/paper(user.loc) Joke.name = "[pick("awful","terrible","unfunny")] joke" - Joke.info = pick("What did one snowman say to the other?\n\n'Is it me or can you smell carrots?'", - "Why couldn't the snowman get laid?\n\nHe was frigid!", - "Where are santa's helpers educated?\n\nNowhere, they're ELF-taught.", - "What happened to the man who stole advent calanders?\n\nHe got 25 days.", - "What does Santa get when he gets stuck in a chimney?\n\nClaus-trophobia.", - "Where do you find chili beans?\n\nThe north pole.", - "What do you get from eating tree decorations?\n\nTinsilitis!", - "What do snowmen wear on their heads?\n\nIce caps!", - "Why is Christmas just like life on ss13?\n\nYou do all the work and the fat guy gets all the credit.", - "Why doesn't Santa have any children?\n\nBecause he only comes down the chimney.") + Joke.info = pick("What did one snowman say to the other?\n\n" + span_italics("'Is it me or can you smell carrots?'"), + "Why couldn't the snowman get laid?\n\n" + span_italics("He was frigid!"), + "Where are santa's helpers educated?\n\n" + span_italics("Nowhere, they're ELF-taught."), + "What happened to the man who stole advent calanders?\n\n" + span_italics("He got 25 days."), + "What does Santa get when he gets stuck in a chimney?\n\n" + span_italics("Claus-trophobia."), + "Where do you find chili beans?\n\n" + span_italics("The north pole."), + "What do you get from eating tree decorations?\n\n" + span_italics("Tinsilitis!"), + "What do snowmen wear on their heads?\n\n" + span_italics("Ice caps!"), + "Why is Christmas just like life on ss13?\n\n" + span_italics("You do all the work and the fat guy gets all the credit."), + "Why doesn't Santa have any children?\n\n" + span_italics("Because he only comes down the chimney.")) new /obj/item/clothing/head/festive(target.loc) user.update_icons() cracked = 1 diff --git a/code/game/gamemodes/events/holidays/Holidays.dm b/code/game/gamemodes/events/holidays/Holidays.dm index 9b9fe5b0864..7efae68f8d1 100644 --- a/code/game/gamemodes/events/holidays/Holidays.dm +++ b/code/game/gamemodes/events/holidays/Holidays.dm @@ -238,7 +238,7 @@ var/global/list/Holiday = list() //Holidays are lists now, so we can have more t //Allows GA and GM to set the Holiday variable /client/proc/Set_Holiday() - set name = ".Set Holiday" + set name = "Set Holiday" set category = "Fun" set desc = "Force-set the Holiday variable to make the game think it's a certain day." if(!check_rights(R_SERVER)) return @@ -268,11 +268,11 @@ var/global/list/Holiday = list() //Holidays are lists now, so we can have more t holidays.Add(p) holiday_blurbs.Add("[Holiday[p]]") var/holidays_string = english_list(holidays, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "" ) - to_world(span_blue("and...")) - to_world("

Happy [holidays_string] Everybody!

") + to_world(span_filter_system(span_blue("and..."))) + to_world(span_filter_system("

Happy [holidays_string] Everybody!

")) if(holiday_blurbs.len != 0) for(var/blurb in holiday_blurbs) - to_world(span_blue("
[blurb]
")) + to_world(span_filter_system(span_blue("
[blurb]
"))) switch(Holiday) //special holidays if("Easter") //do easter stuff diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 391559d5ac5..a9b4a81412b 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -117,11 +117,11 @@ var/global/list/additional_antag_types = list() return /datum/game_mode/proc/announce() //to be called when round starts - to_world(span_bold("The current game mode is [capitalize(name)]!")) + to_world(span_world("The current game mode is [capitalize(name)]!")) if(round_description) - to_world("[round_description]") + to_world(span_filter_system("[round_description]")) if(round_autoantag) - to_world("Antagonists will be added to the round automagically as needed.") + to_world(span_filter_system("Antagonists will be added to the round automagically as needed.")) if(antag_templates && antag_templates.len) var/antag_summary = span_bold("Possible antagonist types:") + " " var/i = 1 @@ -135,7 +135,7 @@ var/global/list/additional_antag_types = list() i++ antag_summary += "." if(antag_templates.len > 1 && master_mode != "secret") - to_world("[antag_summary]") + to_world(span_filter_system("[antag_summary]")) else message_admins("[antag_summary]") @@ -339,11 +339,11 @@ var/global/list/additional_antag_types = list() var/text = "" if(surviving_total > 0) text += "
There [surviving_total>1 ? ("were " + span_bold("[surviving_total] survivors")) : ("was " + span_bold("one survivor"))] (" - text += span_bold("[escaped_total>0 ? escaped_total : "none"] [emergency_shuttle.evac ? "escaped" : "transferred"]) and [ghosts] ghosts") + text += span_bold("[escaped_total>0 ? escaped_total : "none"] [emergency_shuttle.evac ? "escaped" : "transferred"]") + ") and " + span_bold("[ghosts] ghosts") text += ".
" else - text += "There were no survivors ([ghosts] ghosts)." - to_world(text) + text += "There were " + span_bold("no survivors") + " (" + span_bold("[ghosts] ghosts") + ")." + to_world(span_filter_system(text)) if(clients > 0) feedback_set("round_end_clients",clients) @@ -553,7 +553,7 @@ var/global/list/additional_antag_types = list() return if(master_mode != "secret") - to_chat(usr, span_notice(span_bold("The roundtype is [capitalize(ticker.mode.name)]"))) + to_chat(usr, span_boldnotice("The roundtype is [capitalize(ticker.mode.name)]")) if(ticker.mode.round_description) to_chat(usr, span_notice(span_italics("[ticker.mode.round_description]"))) if(ticker.mode.extended_round_description) diff --git a/code/game/gamemodes/malfunction/malf_hardware.dm b/code/game/gamemodes/malfunction/malf_hardware.dm index 526327664d1..a0aa1ec7b69 100644 --- a/code/game/gamemodes/malfunction/malf_hardware.dm +++ b/code/game/gamemodes/malfunction/malf_hardware.dm @@ -8,7 +8,7 @@ if(owner && istype(owner)) owner.hardware = src if(driver) - owner.verbs += driver + add_verb(owner, driver) /datum/malf_hardware/proc/get_examine_desc() return "It has some sort of hardware attached to its core" diff --git a/code/game/gamemodes/malfunction/malf_research.dm b/code/game/gamemodes/malfunction/malf_research.dm index 37475a0a41c..b9314ca4ca1 100644 --- a/code/game/gamemodes/malfunction/malf_research.dm +++ b/code/game/gamemodes/malfunction/malf_research.dm @@ -31,8 +31,8 @@ /datum/malf_research/proc/finish_research() if(!focus) return - to_chat(owner, "Research Completed: [focus.name]") - owner.verbs.Add(focus.ability) + to_chat(owner, span_bold("Research Completed") + ": [focus.name]") + add_verb(owner, focus.ability) available_abilities -= focus if(focus.next) available_abilities += focus.next @@ -62,8 +62,3 @@ focus.process(cpu_gained) if(focus.unlocked) finish_research() - - - - - diff --git a/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_networking.dm b/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_networking.dm index cbf305302d6..65a86da3170 100644 --- a/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_networking.dm +++ b/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_networking.dm @@ -203,7 +203,7 @@ user.hack_can_fail = 0 user.hacking = 0 user.system_override = 2 - user.verbs += new/datum/game_mode/malfunction/verb/ai_destroy_station() + add_verb(user, new /datum/game_mode/malfunction/verb/ai_destroy_station()) // END ABILITY VERBS diff --git a/code/game/gamemodes/meme/meme.dm b/code/game/gamemodes/meme/meme.dm index c371257db74..d79e63ad2a8 100644 --- a/code/game/gamemodes/meme/meme.dm +++ b/code/game/gamemodes/meme/meme.dm @@ -36,8 +36,8 @@ var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds) /datum/game_mode/meme/announce() - to_world("The current game mode is - Meme!") - to_world("An unknown creature has infested the mind of a crew member. Find and destroy it by any means necessary.") + to_world(span_world("The current game mode is - Meme!")) + to_world(span_world("An unknown creature has infested the mind of a crew member. Find and destroy it by any means necessary.")) /datum/game_mode/meme/can_start() if(!..()) diff --git a/code/game/gamemodes/meteor/meteor.dm b/code/game/gamemodes/meteor/meteor.dm index 8c07161bca8..f71e1f732c6 100644 --- a/code/game/gamemodes/meteor/meteor.dm +++ b/code/game/gamemodes/meteor/meteor.dm @@ -39,9 +39,9 @@ survivors++ if(survivors) - to_world(span_notice(span_bold("The following survived the meteor storm")) + ":[text]") + to_world(span_world("The following survived the meteor storm") + ":[text]") else - to_world(span_notice(span_bold("Nobody survived the meteor storm!"))) + to_world(span_boldannounce("Nobody survived the meteor storm!")) feedback_set_details("round_end_result","end - evacuation") feedback_set("round_end_result",survivors) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 5a82ae95068..0939c80ed46 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -46,48 +46,48 @@ var/list/nuke_disks = list() if(!disk_rescued && station_was_nuked && !syndies_didnt_escape) feedback_set_details("round_end_result","win - syndicate nuke") - to_world("Mercenary Major Victory!") - to_world("[syndicate_name()] operatives have destroyed [station_name()]!") + to_world(span_filter_system(span_large(span_bold("Mercenary Major Victory!")))) + to_world(span_filter_system(span_bold("[syndicate_name()] operatives have destroyed [station_name()]!"))) else if (!disk_rescued && station_was_nuked && syndies_didnt_escape) feedback_set_details("round_end_result","halfwin - syndicate nuke - did not evacuate in time") - to_world("Total Annihilation") - to_world("[syndicate_name()] operatives destroyed [station_name()] but did not leave the area in time and got caught in the explosion. Next time, don't lose the disk!") + to_world(span_filter_system(span_large(span_bold("Total Annihilation")))) + to_world(span_filter_system(span_bold("[syndicate_name()] operatives destroyed [station_name()] but did not leave the area in time and got caught in the explosion.") + " Next time, don't lose the disk!")) else if (!disk_rescued && !station_was_nuked && nuke_off_station && !syndies_didnt_escape) feedback_set_details("round_end_result","halfwin - blew wrong station") - to_world("Crew Minor Victory") - to_world("[syndicate_name()] operatives secured the authentication disk but blew up something that wasn't [station_name()]. Next time, don't lose the disk!") + to_world(span_filter_system(span_large(span_bold("Crew Minor Victory")))) + to_world(span_filter_system(span_bold("[syndicate_name()] operatives secured the authentication disk but blew up something that wasn't [station_name()].") + " Next time, don't lose the disk!")) else if (!disk_rescued && !station_was_nuked && nuke_off_station && syndies_didnt_escape) feedback_set_details("round_end_result","halfwin - blew wrong station - did not evacuate in time") - to_world("[syndicate_name()] operatives have earned Darwin Award!") - to_world("[syndicate_name()] operatives blew up something that wasn't [station_name()] and got caught in the explosion. Next time, don't lose the disk!") + to_world(span_filter_system(span_large(span_bold("[syndicate_name()] operatives have earned Darwin Award!")))) + to_world(span_filter_system(span_bold("[syndicate_name()] operatives blew up something that wasn't [station_name()] and got caught in the explosion.") + " Next time, don't lose the disk!")) else if (disk_rescued && mercs.antags_are_dead()) feedback_set_details("round_end_result","loss - evacuation - disk secured - syndi team dead") - to_world("Crew Major Victory!") - to_world("The Research Staff has saved the disc and killed the [syndicate_name()] Operatives") + to_world(span_filter_system(span_large(span_bold("Crew Major Victory!")))) + to_world(span_filter_system(span_bold("The Research Staff has saved the disc and killed the [syndicate_name()] Operatives"))) else if ( disk_rescued ) feedback_set_details("round_end_result","loss - evacuation - disk secured") - to_world("Crew Major Victory") - to_world("The Research Staff has saved the disc and stopped the [syndicate_name()] Operatives!") + to_world(span_filter_system(span_large(span_bold("Crew Major Victory")))) + to_world(span_filter_system(span_bold("The Research Staff has saved the disc and stopped the [syndicate_name()] Operatives!"))) else if (!disk_rescued && mercs.antags_are_dead()) feedback_set_details("round_end_result","loss - evacuation - disk not secured") - to_world("Mercenary Minor Victory!") - to_world("The Research Staff failed to secure the authentication disk but did manage to kill most of the [syndicate_name()] Operatives!") + to_world(span_filter_system(span_large(span_bold("Mercenary Minor Victory!")))) + to_world(span_filter_system(span_bold("The Research Staff failed to secure the authentication disk but did manage to kill most of the [syndicate_name()] Operatives!"))) else if (!disk_rescued && crew_evacuated) feedback_set_details("round_end_result","halfwin - detonation averted") - to_world("Mercenary Minor Victory!") - to_world("[syndicate_name()] operatives recovered the abandoned authentication disk but detonation of [station_name()] was averted. Next time, don't lose the disk!") + to_world(span_filter_system(span_large(span_bold("Mercenary Minor Victory!")))) + to_world(span_filter_system(span_bold("[syndicate_name()] operatives recovered the abandoned authentication disk but detonation of [station_name()] was averted.") + " Next time, don't lose the disk!")) else if (!disk_rescued && !crew_evacuated) feedback_set_details("round_end_result","halfwin - interrupted") - to_world("Neutral Victory") - to_world("Round was mysteriously interrupted!") + to_world(span_filter_system(span_large(span_bold("Neutral Victory")))) + to_world(span_filter_system(span_bold("Round was mysteriously interrupted!"))) ..() return diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm index 2dc568aec35..ed65011d093 100644 --- a/code/game/gamemodes/sandbox/h_sandbox.dm +++ b/code/game/gamemodes/sandbox/h_sandbox.dm @@ -24,7 +24,7 @@ mob sandbox.owner = src.ckey if(src.client.holder) sandbox.admin = 1 - verbs += new/mob/proc/sandbox_panel + add_verb(src, /mob/proc/sandbox_panel) sandbox_panel() if(sandbox) sandbox.update() @@ -36,9 +36,9 @@ mob update() var/hsbpanel = "
h_Sandbox Panel

" if(admin) - hsbpanel += "Administration Tools:
" + hsbpanel += span_bold("Administration Tools:") + "
" hsbpanel += "- Toggle Object Spawning

" - hsbpanel += "Regular Tools:
" + hsbpanel += span_bold("Regular Tools:") + "
" for(var/T in hrefs) hsbpanel += "- [hrefs[T]]
" if(hsboxspawn) @@ -52,11 +52,11 @@ mob if("hsbtobj") if(!admin) return if(hsboxspawn) - to_world("Sandbox: [usr.key] has disabled object spawning!") + to_world(span_world("Sandbox: [usr.key] has disabled object spawning!")) hsboxspawn = 0 return if(!hsboxspawn) - to_world("Sandbox: [usr.key] has enabled object spawning!") + to_world(span_world("Sandbox: [usr.key] has enabled object spawning!")) hsboxspawn = 1 return if("hsbsuit") @@ -105,7 +105,7 @@ mob LAZYADD(hsb.req_access, A) hsb.loc = usr.loc - to_chat(usr, "Sandbox: Created an airlock.") + to_chat(usr, span_bold("Sandbox: Created an airlock.")) if("hsbcanister") var/list/hsbcanisters = subtypesof(/obj/machinery/portable_atmospherics/canister) var/hsbcanister = tgui_input_list(usr, "Choose a canister to spawn:", "Sandbox", hsbcanisters) diff --git a/code/game/gamemodes/technomancer/catalog.dm b/code/game/gamemodes/technomancer/catalog.dm index 47a81cd3272..eb9ab491ae8 100644 --- a/code/game/gamemodes/technomancer/catalog.dm +++ b/code/game/gamemodes/technomancer/catalog.dm @@ -53,7 +53,7 @@ var/list/all_technomancer_assistance = subtypesof(/datum/technomancer/assistance name = "universal catalog" desc = "A catalog to be used with the KHI 'Universal Core', shamelessly \ copied by a Kitsuhana designer from some group of 'technomancers' or another.
\ - The back of the book has 'Export Edition' stamped on it." + The back of the book has " + span_italics("'Export Edition'") + " stamped on it." budget = 700 max_budget = 700 universal = TRUE @@ -104,7 +104,7 @@ var/list/all_technomancer_assistance = subtypesof(/datum/technomancer/assistance if(spell_tab != category) return "[category]" else - return "[category]" + return span_bold("[category]") // Proc: attack_self() // Parameters: 1 (user - the mob clicking on the catalog) @@ -137,7 +137,7 @@ var/list/all_technomancer_assistance = subtypesof(/datum/technomancer/assistance continue if(spell_tab != ALL_SPELLS && spell.category != spell_tab) continue - dat += "[spell.name]
" + dat += span_bold("[spell.name]") + "
" dat += "[spell.desc]
" if(spell.spell_power_desc) dat += "Spell Power: [spell.spell_power_desc]
" @@ -153,13 +153,13 @@ var/list/all_technomancer_assistance = subtypesof(/datum/technomancer/assistance var/dat = "" user.set_machine(src) dat += "Functions | " - dat += "Equipment | " + dat += span_bold("Equipment") + " | " dat += "Consumables | " dat += "Assistance | " dat += "Info
" dat += "You currently have a budget of [budget]/[max_budget].

" for(var/datum/technomancer/equipment/E in equipment_instances) - dat += "[E.name]
" + dat += span_bold("[E.name]") + "
" dat += "[E.desc]
" if(E.cost <= budget) dat += "Purchase ([E.cost])

" @@ -172,12 +172,12 @@ var/list/all_technomancer_assistance = subtypesof(/datum/technomancer/assistance user.set_machine(src) dat += "Functions | " dat += "Equipment | " - dat += "Consumables | " + dat += span_bold("Consumables") + " | " dat += "Assistance | " dat += "Info
" dat += "You currently have a budget of [budget]/[max_budget].

" for(var/datum/technomancer/consumable/C in consumable_instances) - dat += "[C.name]
" + dat += span_bold("[C.name]") + "
" dat += "[C.desc]
" if(C.cost <= budget) dat += "Purchase ([C.cost])

" @@ -191,11 +191,11 @@ var/list/all_technomancer_assistance = subtypesof(/datum/technomancer/assistance dat += "Functions | " dat += "Equipment | " dat += "Consumables | " - dat += "Assistance | " + dat += span_bold("Assistance") + " | " dat += "Info
" dat += "You currently have a budget of [budget]/[max_budget].

" for(var/datum/technomancer/assistance/A in assistance_instances) - dat += "[A.name]
" + dat += span_bold("[A.name]") + "
" dat += "[A.desc]
" if(A.cost <= budget) dat += "Purchase ([A.cost])

" @@ -210,7 +210,7 @@ var/list/all_technomancer_assistance = subtypesof(/datum/technomancer/assistance dat += "Equipment | " dat += "Consumables | " dat += "Assistance | " - dat += "Info
" + dat += span_bold("Info") + "
" dat += "You currently have a budget of [budget]/[max_budget].

" dat += "
" dat += "

Manipulation Core Owner's Manual


" @@ -246,7 +246,7 @@ var/list/all_technomancer_assistance = subtypesof(/datum/technomancer/assistance the core detects itself being carried, with the carrier not being authorized. It will respond by giving a \ massive amount of Instability to them, so be careful, or perhaps make use of that.
" dat += "
" - dat += "You can refund functions, equipment items, and assistance items, so long as you are in your base. \ + dat += span_bold("You can refund functions, equipment items, and assistance items, so long as you are in your base.") + " \ Once you leave, you can't refund anything, however you can still buy things if you still have points remaining. \ To refund functions, just click the 'Refund Functions' button on the top, when in the functions tabs. \ For equipment items, you need to hit it against the catalog.
" diff --git a/code/game/gamemodes/technomancer/core_obj.dm b/code/game/gamemodes/technomancer/core_obj.dm index 0c7c1ea13fb..d0f603a1ffa 100644 --- a/code/game/gamemodes/technomancer/core_obj.dm +++ b/code/game/gamemodes/technomancer/core_obj.dm @@ -121,7 +121,7 @@ if(L.stat == DEAD) summoned_mobs -= L spawn(1) - L.visible_message("\The [L] begins to fade away...") + L.visible_message(span_infoplain(span_bold("\The [L]") + " begins to fade away...")) animate(L, alpha = 255, alpha = 0, time = 30) // Makes them fade into nothingness. sleep(30) qdel(L) @@ -160,23 +160,24 @@ /obj/spellbutton/DblClick() return Click() -/mob/living/carbon/human/Stat() +/mob/living/carbon/human/get_status_tab_items() . = ..() if(. && istype(back,/obj/item/technomancer_core)) var/obj/item/technomancer_core/core = back - setup_technomancer_stat(core) + . += setup_technomancer_stat(core) /mob/living/carbon/human/proc/setup_technomancer_stat(var/obj/item/technomancer_core/core) - if(core && statpanel("Spell Core")) + . = list() + if(core) var/charge_status = "[core.energy]/[core.max_energy] ([round( (core.energy / core.max_energy) * 100)]%) \ ([round(core.energy_delta)]/s)" var/instability_delta = instability - last_instability var/instability_status = "[src.instability] ([round(instability_delta, 0.1)]/s)" - stat("Core charge", charge_status) - stat("User instability", instability_status) + . += "Core charge: [charge_status]" + . += "User instability: [instability_status]" for(var/obj/spellbutton/button in core.spells) - stat(button) + . += button /obj/item/technomancer_core/proc/add_spell(var/path, var/new_name, var/ability_icon_state) if(!path || !ispath(path)) diff --git a/code/game/gamemodes/technomancer/devices/shield_armor.dm b/code/game/gamemodes/technomancer/devices/shield_armor.dm index bbf394240c7..c991f6e164b 100644 --- a/code/game/gamemodes/technomancer/devices/shield_armor.dm +++ b/code/game/gamemodes/technomancer/devices/shield_armor.dm @@ -18,7 +18,7 @@ blood_overlay_type = "armor" slowdown = 0 armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) - action_button_name = "Toggle Shield Projector" + actions_types = list(/datum/action/item_action/toggle_shield_projector) var/active = 0 var/damage_to_energy_multiplier = 50.0 //Determines how much energy to charge for blocking, e.g. 20 damage attack = 750 energy cost var/datum/effect/effect/system/spark_spread/spark_system = null @@ -78,7 +78,7 @@ to_chat(user, span_notice("You [active ? "" : "de"]activate \the [src].")) update_icon() user.update_inv_wear_suit() - user.update_action_buttons() + user.update_action_buttons_icon() /obj/item/clothing/suit/armor/shield/update_icon() icon_state = "shield_armor_[active]" diff --git a/code/game/gamemodes/technomancer/devices/tesla_armor.dm b/code/game/gamemodes/technomancer/devices/tesla_armor.dm index 0a7d606b801..01a65b5a669 100644 --- a/code/game/gamemodes/technomancer/devices/tesla_armor.dm +++ b/code/game/gamemodes/technomancer/devices/tesla_armor.dm @@ -14,7 +14,7 @@ blood_overlay_type = "armor" slowdown = 0.5 armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) - action_button_name = "Toggle Tesla Armor" + actions_types = list(/datum/action/item_action/toggle_tesla_armor) var/active = 1 //Determines if the armor will zap or block var/ready = 1 //Determines if the next attack will be blocked, as well if a strong lightning bolt is sent out at the attacker. var/ready_icon_state = "tesla_armor_1" //also wip @@ -57,7 +57,7 @@ to_chat(user, span_notice("You [active ? "" : "de"]activate \the [src].")) update_icon() user.update_inv_wear_suit() - user.update_action_buttons() + user.update_action_buttons_icon() /obj/item/clothing/suit/armor/tesla/update_icon() if(active && ready) @@ -72,7 +72,7 @@ if(ishuman(loc)) var/mob/living/carbon/human/H = loc H.update_inv_wear_suit(0) - H.update_action_buttons() + H.update_action_buttons_icon() ..() /obj/item/clothing/suit/armor/tesla/proc/shoot_lightning(mob/target, power) diff --git a/code/game/gamemodes/technomancer/equipment.dm b/code/game/gamemodes/technomancer/equipment.dm index 56f86b2961d..eb1002c31d4 100644 --- a/code/game/gamemodes/technomancer/equipment.dm +++ b/code/game/gamemodes/technomancer/equipment.dm @@ -15,7 +15,7 @@ desc = "A core optimized for passive regeneration, however at the cost of capacity. Has a capacity of 7,000 units of energy, and \ recharges at a rate of 70 units. Complex gravatics and force manipulation allows the wearer to also run slightly faster.
\ " + span_red("Capacity: 7k") + "
\ - " + span_green("Recharge: 70/s") + "
\ + " + span_green(span_bold("Recharge: 70/s")) + "
\ " + span_red("Instability Modifier: 90%") + "
\ Energy Cost Modifier: 100%
\ Spell Power: 100%" @@ -27,7 +27,7 @@ desc = "This core has very large capacitors, however it also has a subpar fractal reactor. The user is recommended to \ purchase one or more energy-generating Functions as well if using this core. The intense weight of the core unfortunately can \ cause the wear to move slightly slower, and the closeness of the capacitors causes a slight increase in incoming instability.
\ - " + span_green("Capacity: 20k") + "
\ + " + span_green(span_bold("Capacity: 20k")) + "
\ " + span_red("Recharge: 25/s") + "
\ " + span_red("Instability Modifier: 100%") + "
\ Energy Cost Modifier: 100%
\ @@ -42,7 +42,7 @@ increases as the user accumulates more instability, eventually exceeding even the rapid core in regen speed, at a huge risk.
\ " + span_green("Capacity: 13k") + "
\ " + span_green("Recharge: 35/s to 110/s+") + "
\ - " + span_red("Instability Modifier: 130%") + "
\ + " + span_red(span_bold("Instability Modifier: 130%")) + "
\ " + span_green("Energy Cost Modifier: 70%") + "
\ " + span_green("Spell Power: 110%") + "" cost = 100 @@ -79,9 +79,9 @@ ratings for everything else.
\ " + span_red("Capacity: 7k") + "
\ " + span_red("Recharge: 30/s") + "
\ - " + span_green("Instability Modifier: 30%") + "
\ + " + span_green(span_bold("Instability Modifier: 30%")) + "
\ Energy Cost Modifier: 100%
\ - " + span_red("Spell Power: 70%") + "" + " + span_red(span_bold("Spell Power: 70%")) + "" cost = 100 obj_path = /obj/item/technomancer_core/safety @@ -93,8 +93,8 @@ " + span_red("Capacity: 15k (effectively 7.5k)") + "
\ " + span_red("Recharge: 40/s") + "
\ " + span_red("Instability Modifier: 110%") + "
\ - " + span_red("Energy Cost Modifier: 200%") + "
\ - " + span_green("Spell Power: 175%") + "" + " + span_red(span_bold("Energy Cost Modifier: 200%")) + "
\ + " + span_green(span_bold("Spell Power: 175%")) + "" cost = 100 obj_path = /obj/item/technomancer_core/overcharged @@ -160,7 +160,7 @@ capabilities. The lens appear to be multiple optical matrices layered together, allowing the wearer to see almost anything \ across physical barriers." icon_state = "uzenwa_sissra_1" - action_button_name = "Toggle Goggles" + actions_types = list(/datum/action/item_action/toggle_goggles) origin_tech = list(TECH_MAGNET = 6, TECH_ENGINEERING = 6) toggleable = 1 vision_flags = SEE_TURFS|SEE_MOBS|SEE_OBJS diff --git a/code/game/gamemodes/technomancer/instability.dm b/code/game/gamemodes/technomancer/instability.dm index 73018f16a3e..79cf88066c9 100644 --- a/code/game/gamemodes/technomancer/instability.dm +++ b/code/game/gamemodes/technomancer/instability.dm @@ -282,9 +282,9 @@ amount = amount * armor_factor if(amount && prob(10)) if(isSynthetic()) - to_chat(src, span_cult("Warning: Anomalous field detected.")) + to_chat(src, span_cult(span_huge("Warning: Anomalous field detected."))) else - to_chat(src, span_cult("The purple glow makes you feel strange...")) + to_chat(src, span_cult(span_huge("The purple glow makes you feel strange..."))) adjust_instability(amount) #undef TECHNOMANCER_INSTABILITY_DECAY diff --git a/code/game/gamemodes/technomancer/spells/abjuration.dm b/code/game/gamemodes/technomancer/spells/abjuration.dm index 1dfa5809459..732047af589 100644 --- a/code/game/gamemodes/technomancer/spells/abjuration.dm +++ b/code/game/gamemodes/technomancer/spells/abjuration.dm @@ -27,7 +27,7 @@ to_chat(L, span_warning("\The [user] tried to teleport you far away, but failed.")) return 0 else - visible_message("\The [L] vanishes!") + visible_message(span_infoplain(span_bold("\The [L]") + " vanishes!")) qdel(L) else if(istype(L, /mob/living/simple_mob/construct)) var/mob/living/simple_mob/construct/evil = L diff --git a/code/game/gamemodes/technomancer/spells/apportation.dm b/code/game/gamemodes/technomancer/spells/apportation.dm index db6cc87eb59..b47dc282889 100644 --- a/code/game/gamemodes/technomancer/spells/apportation.dm +++ b/code/game/gamemodes/technomancer/spells/apportation.dm @@ -67,7 +67,7 @@ return L.Weaken(3) - user.visible_message(span_warning("\The [user] seizes [L]!")) + user.visible_message(span_warning(span_bold("\The [user]") + " seizes [L]!")) var/obj/item/grab/G = new(user,L) diff --git a/code/game/gamemodes/technomancer/spells/blink.dm b/code/game/gamemodes/technomancer/spells/blink.dm index 6025ecab4fd..65ca55696c2 100644 --- a/code/game/gamemodes/technomancer/spells/blink.dm +++ b/code/game/gamemodes/technomancer/spells/blink.dm @@ -47,7 +47,7 @@ if(L.buckled) L.buckled.unbuckle_mob() AM.forceMove(destination) - AM.visible_message("\The [AM] vanishes!") + AM.visible_message(span_infoplain(span_bold("\The [AM]") + " vanishes!")) to_chat(AM, span_notice("You suddenly appear somewhere else!")) new /obj/effect/effect/sparks(destination) new /obj/effect/effect/sparks(starting) diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index ce09ee5258c..70ac8c585dc 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -77,18 +77,18 @@ var/datum/money_account/M = create_account(H.real_name, money_amount, null, offmap_spawn) if(H.mind) var/remembered_info = "" - remembered_info += "Your account number is: #[M.account_number]
" - remembered_info += "Your account pin is: [M.remote_access_pin]
" - remembered_info += "Your account funds are: $[M.money]
" + remembered_info += span_bold("Your account number is:") + " #[M.account_number]
" + remembered_info += span_bold("Your account pin is:") + " [M.remote_access_pin]
" + remembered_info += span_bold("Your account funds are:") + " $[M.money]
" if(M.transaction_log.len) var/datum/transaction/T = M.transaction_log[1] - remembered_info += "Your account was created: [T.time], [T.date] at [T.source_terminal]
" + remembered_info += span_bold("Your account was created:") + " [T.time], [T.date] at [T.source_terminal]
" H.mind.store_memory(remembered_info) H.mind.initial_account = M - to_chat(H, span_notice("Your account number is: [M.account_number], your account pin is: [M.remote_access_pin]")) + to_chat(H, span_boldnotice("Your account number is: [M.account_number], your account pin is: [M.remote_access_pin]")) // overrideable separately so AIs/borgs can have cardborg hats without unneccessary new()/qdel() /datum/job/proc/equip_preview(mob/living/carbon/human/H, var/alt_title) diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 9a14d255167..51bea0d1cc1 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -15,7 +15,7 @@ var/global/datum/controller/occupations/job_master //var/list/all_jobs = typesof(/datum/job) var/list/all_jobs = list(/datum/job/assistant) | using_map.allowed_jobs if(!all_jobs.len) - to_world(span_warning("Error setting up jobs, no job datums found!")) + to_world(span_boldannounce("Error setting up jobs, no job datums found!")) return 0 for(var/J in all_jobs) var/datum/job/job = new J() @@ -477,9 +477,9 @@ var/global/datum/controller/occupations/job_master for(var/D in job.department_accounts) var/datum/money_account/department_account = department_accounts[D] if(department_account) - remembered_info += "Department account number ([D]): #[department_account.account_number]
" - remembered_info += "Department account pin ([D]): [department_account.remote_access_pin]
" - remembered_info += "Department account funds ([D]): $[department_account.money]
" + remembered_info += span_bold("Department account number ([D]):") + " #[department_account.account_number]
" + remembered_info += span_bold("Department account pin ([D]):") + " [department_account.remote_access_pin]
" + remembered_info += span_bold("Department account funds ([D]):") + " $[department_account.money]
" H.mind.store_memory(remembered_info) @@ -533,16 +533,16 @@ var/global/datum/controller/occupations/job_master W.color = R.color qdel(R) - to_chat(H, span_filter_notice("You are [job.total_positions == 1 ? "the" : "a"] [alt_title ? alt_title : rank].")) + to_chat(H, span_filter_notice(span_bold("You are [job.total_positions == 1 ? "the" : "a"] [alt_title ? alt_title : rank]."))) if(job.supervisors) - to_chat(H, span_filter_notice("As the [alt_title ? alt_title : rank] you answer directly to [job.supervisors]. Special circumstances may change this.")) + to_chat(H, span_filter_notice(span_bold("As the [alt_title ? alt_title : rank] you answer directly to [job.supervisors]. Special circumstances may change this."))) if(job.has_headset) H.equip_to_slot_or_del(new /obj/item/radio/headset(H), slot_l_ear) - to_chat(H, span_filter_notice("To speak on your department's radio channel use :h. For the use of other channels, examine your headset.")) + to_chat(H, span_filter_notice(span_bold("To speak on your department's radio channel use :h. For the use of other channels, examine your headset."))) if(job.req_admin_notify) - to_chat(H, span_filter_notice("You are playing a job that is important for Game Progression. If you have to disconnect, please notify the admins via adminhelp.")) + to_chat(H, span_filter_notice(span_bold("You are playing a job that is important for Game Progression. If you have to disconnect, please notify the admins via adminhelp."))) // EMAIL GENERATION // Email addresses will be created under this domain name. Mostly for the looks. diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index aee50b868a9..fb5169200a0 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -384,7 +384,7 @@ beaker = I user.drop_item() I.loc = src - user.visible_message("\The [user] adds \a [I] to \the [src].", span_notice("You add \a [I] to \the [src].")) + user.visible_message(span_infoplain(span_bold("\The [user]") + " adds \a [I] to \the [src]."), span_notice("You add \a [I] to \the [src].")) else to_chat(user, span_warning("\The [src] has a beaker already.")) return diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 755b483d4e1..05b7b67273b 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -354,10 +354,10 @@ playsound(src, 'sound/machines/printer.ogg', 50, 1) var/obj/item/paper/P = new /obj/item/paper(get_turf(target)) var/name = occupant ? occupant.name : "Unknown" - P.info = "
Body Scan - [name]

" - P.info += "Time of scan: [stationtime2text()]

" + P.info = "
" + span_bold("Body Scan - [name]") + "

" + P.info += span_bold("Time of scan:") + " [stationtime2text()]

" P.info += "[generate_printing_text()]" - P.info += "

Notes:
" + P.info += "

" + span_bold("Notes:") + "
" P.name = "Body Scan - [name] ([stationtime2text()])" else return FALSE @@ -365,7 +365,7 @@ /obj/machinery/bodyscanner/proc/generate_printing_text() var/dat = "" - dat = "Occupant Statistics:
" //Blah obvious + dat = span_blue(span_bold("Occupant Statistics:")) + "
" //Blah obvious if(istype(occupant)) //is there REALLY someone in there? var/t1 switch(occupant.stat) // obvious, see what their status is @@ -375,32 +375,33 @@ t1 = "Unconscious" else t1 = "*dead*" - dat += " (occupant.getMaxHealth() / 2) ? "blue" : "red"]>\tHealth %: [(occupant.health / occupant.getMaxHealth())*100], ([t1])
" + var/health_text = "\tHealth %: [(occupant.health / occupant.getMaxHealth())*100], ([t1])" + dat += (occupant.health > (occupant.getMaxHealth() / 2) ? span_blue(health_text) : span_red(health_text)) + dat += "
" if(occupant.virus2.len) - dat += "Viral pathogen detected in blood stream.
" + dat += span_red("Viral pathogen detected in blood stream.") + "
" - var/extra_font = null - extra_font = "" - dat += "[extra_font]\t-Brute Damage %: [occupant.getBruteLoss()]
" + var/damage_string = null + damage_string = "\t-Brute Damage %: [occupant.getBruteLoss()]" + dat += (occupant.getBruteLoss() < 60 ? span_blue(damage_string) : span_red(damage_string)) + "
" + damage_string = "\t-Respiratory Damage %: [occupant.getOxyLoss()]" + dat += (occupant.getOxyLoss() < 60 ? span_blue(damage_string) : span_red(damage_string)) + "
" - extra_font = "" - dat += "[extra_font]\t-Respiratory Damage %: [occupant.getOxyLoss()]
" + damage_string = "\t-Toxin Content %: [occupant.getToxLoss()]" + dat += (occupant.getToxLoss() < 60 ? span_blue(damage_string) : span_red(damage_string)) + "
" - extra_font = "" - dat += "[extra_font]\t-Toxin Content %: [occupant.getToxLoss()]
" + damage_string = "\t-Burn Severity %: [occupant.getFireLoss()]" + dat += (occupant.getFireLoss() < 60 ? span_blue(damage_string) : span_red(damage_string)) + "
" - extra_font = "" - dat += "[extra_font]\t-Burn Severity %: [occupant.getFireLoss()]
" + damage_string = "\tRadiation Level %: [occupant.radiation]" + dat += (occupant.radiation < 10 ? span_blue(damage_string) : span_red(damage_string)) + "
" - extra_font = "" - dat += "[extra_font]\tRadiation Level %: [occupant.radiation]
" + damage_string = "\tGenetic Tissue Damage %: [occupant.getCloneLoss()]" + dat += (occupant.getCloneLoss() < 1 ? span_blue(damage_string) : span_red(damage_string)) + "
" - extra_font = "" - dat += "[extra_font]\tGenetic Tissue Damage %: [occupant.getCloneLoss()]
" - - extra_font = "" - dat += "[extra_font]\tApprox. Brain Damage %: [occupant.getBrainLoss()]
" + damage_string = "\tApprox. Brain Damage %: [occupant.getBrainLoss()]" + dat += (occupant.getBrainLoss() < 1 ? span_blue(damage_string) : span_red(damage_string)) + "
" dat += "Paralysis Summary %: [occupant.paralysis] ([round(occupant.paralysis / 4)] seconds left!)
" dat += "Body Temperature: [occupant.bodytemperature-T0C]°C ([occupant.bodytemperature*1.8-459.67]°F)
" @@ -416,8 +417,8 @@ var/blood_percent = blood_volume / blood_max blood_percent *= 100 - extra_font = " 448 ? "blue" : "red"]>" - dat += "[extra_font]\tBlood Level %: [blood_percent] ([blood_volume] units)
" + damage_string = "\tBlood Level %: [blood_percent] ([blood_volume] units)" + dat += (blood_volume > 448 ? span_blue(damage_string) : span_red(damage_string)) + "
" if(occupant.reagents) for(var/datum/reagent/R in occupant.reagents.reagent_list) @@ -535,11 +536,11 @@ dat += "" dat += "" if(occupant.sdisabilities & BLIND) - dat += "Cataracts detected.
" + dat += span_red("Cataracts detected.") + "
" if(occupant.disabilities & NEARSIGHTED) - dat += "Retinal misalignment detected.
" + dat += span_red("Retinal misalignment detected.") + "
" if(HUSK in occupant.mutations) // VOREstation edit - dat += "Anatomical structure lost, resuscitation not possible!
" + dat += span_red("Anatomical structure lost, resuscitation not possible!") + "
" else dat += "\The [src] is empty." diff --git a/code/game/machinery/airconditioner_vr.dm b/code/game/machinery/airconditioner_vr.dm index 36dd29aa406..f527fef6fb0 100644 --- a/code/game/machinery/airconditioner_vr.dm +++ b/code/game/machinery/airconditioner_vr.dm @@ -76,7 +76,7 @@ return if(draw_power(idle_power_usage) < idle_power_usage) - visible_message("\The [src] shuts down.") + visible_message(span_infoplain(span_bold("\The [src]") + " shuts down.")) turn_off() return diff --git a/code/game/machinery/atmoalter/meter.dm b/code/game/machinery/atmoalter/meter.dm index a64f64448f8..7dfea2a5929 100644 --- a/code/game/machinery/atmoalter/meter.dm +++ b/code/game/machinery/atmoalter/meter.dm @@ -110,7 +110,7 @@ to_chat(user, span_notice("You begin to unfasten \the [src]...")) if(do_after(user, 40 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + span_infoplain(span_bold("\The [user]") + " unfastens \the [src]."), \ span_notice("You have unfastened \the [src]."), \ "You hear ratchet.") new /obj/item/pipe_meter(get_turf(src)) diff --git a/code/game/machinery/bioprinter.dm b/code/game/machinery/bioprinter.dm index d3fea7a6640..7a02d6115a3 100644 --- a/code/game/machinery/bioprinter.dm +++ b/code/game/machinery/bioprinter.dm @@ -164,7 +164,7 @@ printing = 1 update_icon() - visible_message("\The [src] begins churning.") + visible_message(span_infoplain(span_bold("\The [src]") + " begins churning.")) sleep(print_delay) @@ -212,7 +212,7 @@ /obj/machinery/organ_printer/proc/can_print(var/choice, var/masscount = 0) var/biomass = get_biomass_volume() if(biomass < masscount) - visible_message("\The [src] displays a warning: 'Not enough biomass. [biomass] stored and [masscount] needed.'") + visible_message(span_infoplain(span_bold("\The [src]") + " displays a warning: 'Not enough biomass. [biomass] stored and [masscount] needed.'")) return 0 if(!loaded_dna || !loaded_dna["donor"]) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index f3e034ba6ec..383a96868b5 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -124,7 +124,7 @@ if (istype(AM, /obj)) var/obj/O = AM if (O.throwforce >= src.toughness) - visible_message(span_warning("[src] was hit by [O].")) + visible_message(span_boldwarning("[src] was hit by [O].")) take_damage(O.throwforce) /obj/machinery/camera/proc/setViewRange(var/num = 7) @@ -212,9 +212,9 @@ if(!O.client) continue if(U.name == "Unknown") - to_chat(O, "[U] holds \a [itemname] up to one of your cameras ...") + to_chat(O, span_infoplain(span_bold("[U]") + " holds \a [itemname] up to one of your cameras ...")) else - to_chat(O, "[U] holds \a [itemname] up to one of your cameras ...") + to_chat(O, span_infoplain(span_bold("[U]") + " holds \a [itemname] up to one of your cameras ...")) O << browse(text("[][]", itemname, info), text("window=[]", itemname)) else if (istype(W, /obj/item/camera_bug)) @@ -232,7 +232,7 @@ user.setClickCooldown(user.get_attack_speed(W)) if (W.force >= src.toughness) user.do_attack_animation(src) - visible_message(span_warning("[src] has been [LAZYLEN(W.attack_verb) ? pick(W.attack_verb) : "attacked"] with [W] by [user]!")) + visible_message(span_boldwarning("[src] has been [LAZYLEN(W.attack_verb) ? pick(W.attack_verb) : "attacked"] with [W] by [user]!")) if (istype(W, /obj/item)) //is it even possible to get into attackby() with non-items? var/obj/item/I = W if (I.hitsound) diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 3fc47e161c6..8afe56476bd 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -1055,12 +1055,12 @@ to_chat(user, span_warning("You flip the switch on the underside of [src].")) active = 1 src.visible_message(span_notice("[src] softly beeps and whirs to life!")) - src.audible_message("\The [src] says, 'This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.'") + src.audible_message(span_bold("\The [src]") + " says, 'This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.'") sleep(20) src.visible_message(span_warning("[src] begins to vibrate...")) - src.audible_message("\The [src] says, 'Uh, Port? Having some issues with our reactor, could you check it out? Over.'") + src.audible_message(span_bold("\The [src]") + " says, 'Uh, Port? Having some issues with our reactor, could you check it out? Over.'") sleep(30) - src.audible_message("\The [src] says, 'Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-'") + src.audible_message(span_bold("\The [src]") + " says, 'Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-'") sleep(3.6) src.visible_message(span_danger("[src] explodes!")) explosion(src.loc, 1,2,4) diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 42ccbfeff3e..c19ca2432dc 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -133,7 +133,7 @@ GLOBAL_LIST_EMPTY(entertainment_screens) if(modifiers["alt"]) if(isliving(usr) && Adjacent(usr) && !usr.incapacitated()) toggle() - visible_message("[usr] toggles [src] [enabled ? "on" : "off"].","You toggle [src] [enabled ? "on" : "off"].", runemessage = "click") + visible_message(span_infoplain(span_bold("[usr]") + " toggles [src] [enabled ? "on" : "off"]."),span_info("You toggle [src] [enabled ? "on" : "off"]."), runemessage = "click") else attack_hand(usr) diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 5d250853c4c..1d43173d5af 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -49,12 +49,12 @@ return if (prob(50)) for(var/x in verbs) - verbs -= x + src.verbs -= x set_broken() if(3.0) if (prob(25)) for(var/x in verbs) - verbs -= x + src.verbs -= x set_broken() else return diff --git a/code/game/machinery/computer/guestpass.dm b/code/game/machinery/computer/guestpass.dm index b51b0d95c31..6bf5417f8dd 100644 --- a/code/game/machinery/computer/guestpass.dm +++ b/code/game/machinery/computer/guestpass.dm @@ -52,7 +52,7 @@ var/confirm = tgui_alert(usr, "Do you really want to deactivate this guest pass? (you can't reactivate it)", "Confirm Deactivation", list("Yes", "No")) if(confirm == "Yes") //rip guest pass \The [user]
deactivates \the [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + "deactivates \the [src].")) icon_state = "guest-invalid" update_icon() expiration_time = world.time diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index d0607d28f65..1fb04554760 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -419,7 +419,7 @@ */ /obj/machinery/computer/med_data/proc/print_finish() var/obj/item/paper/P = new(loc) - P.info = "
Medical Record

" + P.info = "
" + span_bold("Medical Record") + "

" if(istype(active1, /datum/data/record) && data_core.general.Find(active1)) P.info += {"Name: [active1.fields["name"]] ID: [active1.fields["id"]]
\nSex: [active1.fields["sex"]] @@ -429,7 +429,7 @@
\nPhysical Status: [active1.fields["p_stat"]]
\nMental Status: [active1.fields["m_stat"]]
"} else - P.info += "General Record Lost!
" + P.info += span_bold("General Record Lost!") + "
" if(istype(active2, /datum/data/record) && data_core.medical.Find(active2)) P.info += {"
\n
Medical Data

\nGender Identity: [active2.fields["id_gender"]] @@ -451,7 +451,7 @@ for(var/c in active2.fields["comments"]) P.info += "[c["header"]]
[c["text"]]
" else - P.info += "Medical Record Lost!
" + P.info += span_bold("Medical Record Lost!") + "
" P.info += "" P.name = "paper - 'Medical Record: [active1.fields["name"]]'" printing = FALSE diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index 68a5da5afda..ca5ef050255 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -174,7 +174,7 @@ to_chat(usr, span_danger("Self-destruct aborted - safety active")) return message_admins(span_notice("[key_name_admin(usr)] detonated all cyborgs!")) - log_game("\[key_name(usr)] detonated all cyborgs!") + log_game(span_notice("[key_name(usr)] detonated all cyborgs!")) for(var/mob/living/silicon/robot/R in mob_list) if(istype(R, /mob/living/silicon/robot/drone)) continue @@ -197,7 +197,7 @@ return var/turf/T = get_turf(R) message_admins(span_notice("[key_name_admin(usr)] detonated [key_name_admin(R)] ([ADMIN_COORDJMP(T)])!")) - log_game("\[key_name(usr)] detonated [key_name(R)]!") + log_game(span_notice("[key_name(usr)] detonated [key_name(R)]!")) to_chat(R, span_danger("Self-destruct command received.")) if(R.connected_ai) to_chat(R.connected_ai, "

[span_alert("ALERT - Cyborg detonation detected: [R.name]")]
") diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index a64c883d7f1..1be57d146ef 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -422,7 +422,7 @@ */ /obj/machinery/computer/secure_data/proc/print_finish() var/obj/item/paper/P = new(loc) - P.info = "
Security Record

" + P.info = "
" + span_bold("Security Record") + "

" if(istype(active1, /datum/data/record) && data_core.general.Find(active1)) P.info += {"Name: [active1.fields["name"]] ID: [active1.fields["id"]]
\nSex: [active1.fields["sex"]] @@ -432,7 +432,7 @@
\nPhysical Status: [active1.fields["p_stat"]]
\nMental Status: [active1.fields["m_stat"]]
"} else - P.info += "General Record Lost!
" + P.info += span_bold("General Record Lost!") + "
" if(istype(active2, /datum/data/record) && data_core.security.Find(active2)) P.info += {"
\n
Security Data

\nCriminal Status: [active2.fields["criminal"]]
\n @@ -447,7 +447,7 @@ for(var/c in active2.fields["comments"]) P.info += "[c["header"]]
[c["text"]]
" else - P.info += "Security Record Lost!
" + P.info += span_bold("Security Record Lost!") + "
" P.info += "" P.name = "paper - 'Security Record: [active1.fields["name"]]'" printing = FALSE diff --git a/code/game/machinery/computer/shuttle.dm b/code/game/machinery/computer/shuttle.dm index 7704ec87725..d79c4ae1863 100644 --- a/code/game/machinery/computer/shuttle.dm +++ b/code/game/machinery/computer/shuttle.dm @@ -38,11 +38,11 @@ if (src.auth_need - src.authorized.len > 0) message_admins("[key_name_admin(user)] has authorized early shuttle launch") log_game("[user.ckey] has authorized early shuttle launch") - to_world(span_notice("Alert: [src.auth_need - src.authorized.len] authorizations needed until shuttle is launched early")) + to_world(span_boldnotice("Alert: [src.auth_need - src.authorized.len] authorizations needed until shuttle is launched early")) else message_admins("[key_name_admin(user)] has launched the shuttle") log_game("[user.ckey] has launched the shuttle early") - to_world(span_notice("Alert: Shuttle launch time shortened to 10 seconds!")) + to_world(span_boldnotice("Alert: Shuttle launch time shortened to 10 seconds!")) emergency_shuttle.set_launch_countdown(10) //src.authorized = null qdel(src.authorized) @@ -50,10 +50,10 @@ if("Repeal") src.authorized -= W:registered_name - to_world(span_notice("Alert: [src.auth_need - src.authorized.len] authorizations needed until shuttle is launched early")) + to_world(span_boldnotice("Alert: [src.auth_need - src.authorized.len] authorizations needed until shuttle is launched early")) if("Abort") - to_world(span_notice("All authorizations to shortening time for shuttle launch have been revoked!")) + to_world(span_boldnotice("All authorizations to shortening time for shuttle launch have been revoked!")) src.authorized.len = 0 src.authorized = list( ) @@ -63,7 +63,7 @@ if(!emagged && !emergency_shuttle.location() && user.get_active_hand() == W) switch(choice) if("Launch") - to_world(span_notice("Alert: Shuttle launch time shortened to 10 seconds!")) + to_world(span_boldnotice("Alert: Shuttle launch time shortened to 10 seconds!")) emergency_shuttle.set_launch_countdown(10) emagged = 1 if("Cancel") diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm index 10db9582742..57524d95fd2 100644 --- a/code/game/machinery/computer/skills.dm +++ b/code/game/machinery/computer/skills.dm @@ -317,7 +317,7 @@ */ /obj/machinery/computer/skills/proc/print_finish() var/obj/item/paper/P = new(loc) - P.info = "
Medical Record

" + P.info = "
" + span_bold("Medical Record") + "

" if(istype(active1, /datum/data/record) && data_core.general.Find(active1)) P.info += {"Name: [active1.fields["name"]] ID: [active1.fields["id"]]
\nSex: [active1.fields["sex"]] @@ -338,7 +338,7 @@ for(var/c in active1.fields["comments"]) P.info += "[c["header"]]
[c["text"]]
" else - P.info += "General Record Lost!
" + P.info += span_bold("General Record Lost!") + "
" P.info += "" P.name = "paper - 'Employment Record: [active1.fields["name"]]'" printing = FALSE diff --git a/code/game/machinery/computer3/computers/card.dm b/code/game/machinery/computer3/computers/card.dm index 47ecbdc2802..a9776bc79b0 100644 --- a/code/game/machinery/computer3/computers/card.dm +++ b/code/game/machinery/computer3/computers/card.dm @@ -146,14 +146,14 @@ // form for renaming the ID dat += "
" dat += "" - dat += "registered_name: " + dat += span_bold("registered_name:") + " " dat += "" dat += "
" // form for changing assignment, taken care of by scriptblock() mostly var/assign_temp = writer.assignment if(!assign_temp || assign_temp == "") assign_temp = "Unassigned" - dat += "Assignment: [assign_temp] change" + dat += span_bold("Assignment:") + " [assign_temp] change" // list of access rights dat += accessblock() @@ -276,7 +276,7 @@ printing = 1 sleep(50) var/obj/item/paper/P = new /obj/item/paper( computer.loc ) - P.info = "Crew Manifest:
" + P.info = span_bold("Crew Manifest:") + "
" var/list/L = list() for (var/datum/data/record/t in data_core.general) var/R = t.fields["name"] + " - " + t.fields["rank"] diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index dd50712cb53..17d8575629a 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -302,7 +302,7 @@ M.loc = src M.ExtinguishMob() if(M.health > -100 && (M.health < 0 || M.sleeping)) - to_chat(M, span_notice("You feel a cold liquid surround you. Your skin starts to freeze up.")) + to_chat(M, span_boldnotice("You feel a cold liquid surround you. Your skin starts to freeze up.")) occupant = M buckle_mob(occupant, forced = TRUE, check_loc = FALSE) vis_contents |= occupant diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 5c2ab885be1..d3ed23c511c 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -606,7 +606,7 @@ return if(occupant) - to_chat(usr, span_notice("\The [src] is in use.")) + to_chat(usr, span_boldnotice("\The [src] is in use.")) return if(isliving(usr)) @@ -623,7 +623,7 @@ return if(occupant) - to_chat(usr, span_notice("\The [src] is in use.")) + to_chat(usr, span_boldnotice("\The [src] is in use.")) return usr.stop_pulling() @@ -640,7 +640,7 @@ icon_state = occupied_icon_state to_chat(usr, span_notice("[on_enter_occupant_message]")) - to_chat(usr, span_notice("If you ghost, log out or close your client now, your character will shortly be permanently removed from the round.")) + to_chat(usr, span_boldnotice("If you ghost, log out or close your client now, your character will shortly be permanently removed from the round.")) time_entered = world.time @@ -727,7 +727,7 @@ icon_state = occupied_icon_state to_chat(M, span_notice("[on_enter_occupant_message]")) - to_chat(M, span_notice("If you ghost, log out or close your client now, your character will shortly be permanently removed from the round.")) + to_chat(M, span_boldnotice("If you ghost, log out or close your client now, your character will shortly be permanently removed from the round.")) set_occupant(M) time_entered = world.time if(ishuman(M) && applies_stasis) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index c61d8950c08..6c9538e1f19 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -60,6 +60,7 @@ var/knock_sound = 'sound/machines/2beeplow.ogg' var/knock_hammer_sound = 'sound/weapons/sonic_jackhammer.ogg' var/knock_unpowered_sound = 'sound/machines/door/knock_glass.ogg' + var/mob/hold_open /obj/machinery/door/airlock/attack_generic(var/mob/living/user, var/damage) if(stat & (BROKEN|NOPOWER)) @@ -988,6 +989,14 @@ About the new airlock wires panel: if(src.shock(user, 100)) return + if(!Adjacent(hold_open)) + hold_open = null + if(hold_open && !density) + if(hold_open == user) + hold_open = null + else + to_chat(user, span_warning("[hold_open] is holding \the [src] open!")) + if(istype(user, /mob/living/carbon/human)) var/mob/living/carbon/human/X = user if(istype(X.species, /datum/species/xenos)) @@ -1031,6 +1040,12 @@ About the new airlock wires panel: playsound(src, knock_unpowered_sound, 50, 0, 3) return +/obj/machinery/door/airlock/CtrlClick(mob/user as mob) //Hold door open + if(!Adjacent(user)) + return + src.hold_open = user + src.attack_hand(user) + /obj/machinery/door/airlock/tgui_act(action, params) if(..()) return TRUE @@ -1127,6 +1142,13 @@ About the new airlock wires panel: else if(locked) to_chat(user, span_warning("The door bolts are down!")) else if(!density) + if(hold_open) + if(hold_open == user) + hold_open = null + close() + else + to_chat(user, span_warning("[hold_open] is holding \the [src] open!")) + return close() else open() @@ -1280,6 +1302,9 @@ About the new airlock wires panel: return 0 use_power(360) //360 W seems much more appropriate for an actuator moving an industrial door capable of crushing people + if(hold_open) + visible_message("[hold_open] holds \the [src] open.") + //if the door is unpowered then it doesn't make sense to hear the woosh of a pneumatic actuator for(var/mob/M as anything in player_list) if(!M || !M.client) @@ -1335,6 +1360,11 @@ About the new airlock wires panel: if(!forced) //despite the name, this wire is for general door control. + if(hold_open) + if(Adjacent(hold_open) && !hold_open.incapacitated()) + return 0 + else + hold_open = null if(!arePowerSystemsOn() || wires.is_cut(WIRE_OPEN_DOOR)) return 0 @@ -1392,6 +1422,8 @@ About the new airlock wires panel: if(!can_close(forced)) return 0 + hold_open = null //if it passes the can close check, always make sure to clear hold open + if(safe) for(var/turf/turf in locs) for(var/atom/movable/AM in turf) diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index 039e2111061..3688044b384 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -26,7 +26,7 @@ if (!ishuman(user) && !istype(user,/mob/living/silicon/robot)) return ..(user) - var/t1 = text("Access control
\n") + var/t1 = span_bold("Access control") + "
\n" if (last_configurator) t1 += "Operator: [last_configurator]
" diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index fec41756e04..2f70e0436e0 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -47,7 +47,7 @@ playsound(src, S.attack_sound, 75, 1) take_damage(damage) else - visible_message("\The [user] bonks \the [src] harmlessly.") + visible_message(span_infoplain(span_bold("\The [user]") + " bonks \the [src] harmlessly.")) user.do_attack_animation(src) /obj/machinery/door/New() diff --git a/code/game/machinery/doors/door_vr.dm b/code/game/machinery/doors/door_vr.dm index be8d84fefc7..860a5510d57 100644 --- a/code/game/machinery/doors/door_vr.dm +++ b/code/game/machinery/doors/door_vr.dm @@ -18,6 +18,10 @@ heat_proof = 1 /obj/machinery/door/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) + for(var/obj/machinery/door/blast/B in loc.contents) + if(B.density) + return + var/maxtemperature = 1800 //same as a normal steel wall var/destroytime = 20 //effectively gives an airlock 200HP between breaking and completely disintegrating if(heat_proof) diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 6e8d00404ec..d4477eeac00 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -86,7 +86,7 @@ if(pdiff >= FIREDOOR_MAX_PRESSURE_DIFF) . += span_warning("WARNING: Current pressure differential is [pdiff]kPa! Opening door may result in injury!") - . += "Sensor readings:" + . += span_bold("Sensor readings:") for(var/index = 1; index <= tile_info.len; index++) var/o = "  " switch(index) @@ -104,7 +104,7 @@ continue var/celsius = convert_k2c(tile_info[index][1]) var/pressure = tile_info[index][2] - var/temperature_string = "[celsius]°C " + var/temperature_string = "[celsius]°C " o += ((dir_alerts[index] & (FIREDOOR_ALERT_HOT|FIREDOOR_ALERT_COLD)) ? span_warning(temperature_string) : span_blue(temperature_string)) o += span_blue("[pressure]kPa") o += "" diff --git a/code/game/machinery/embedded_controller/mapping_helpers.dm b/code/game/machinery/embedded_controller/mapping_helpers.dm index 0306146d388..dc4758b31f8 100644 --- a/code/game/machinery/embedded_controller/mapping_helpers.dm +++ b/code/game/machinery/embedded_controller/mapping_helpers.dm @@ -26,11 +26,11 @@ Any frequency works, it's self-setting, but it seems like people have decided 13 my_controller = get_controller(get_area(src)) my_device = locate(my_device_type) in get_turf(src) if(!my_device) - to_world("[span_red("WARNING:")][span_black("Airlock helper '[name]' couldn't find what it wanted at: X:[x] Y:[y] Z:[z]")]") + to_world(span_world("[span_red("WARNING:")][span_black("Airlock helper '[name]' couldn't find what it wanted at: X:[x] Y:[y] Z:[z]")]")) else if(!my_controller) - to_world("[span_red("WARNING:")][span_black("Airlock helper '[name]' couldn't find a controller at: X:[x] Y:[y] Z:[z]")]") + to_world(span_world("[span_red("WARNING:")][span_black("Airlock helper '[name]' couldn't find a controller at: X:[x] Y:[y] Z:[z]")]")) else if(!my_controller.id_tag) - to_world("[span_red("WARNING:")][span_black("Airlock helper '[name]' found a controller without an 'id_tag' set: X:[x] Y:[y] Z:[z]")]") + to_world(span_world("[span_red("WARNING:")][span_black("Airlock helper '[name]' found a controller without an 'id_tag' set: X:[x] Y:[y] Z:[z]")]")) else setup() return INITIALIZE_HINT_QDEL diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index 13184fdbfb7..e36fbb0a493 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -241,7 +241,7 @@ if(stat & (BROKEN|NOPOWER)) return user.set_machine(src) - var/dat = "Magnetic Control Console

" + var/dat = span_bold("Magnetic Control Console") + "

" if(!autolink) dat += {" Frequency: [frequency]
diff --git a/code/game/machinery/medical_kiosk.dm b/code/game/machinery/medical_kiosk.dm index 002b6051437..06eac53eb72 100644 --- a/code/game/machinery/medical_kiosk.dm +++ b/code/game/machinery/medical_kiosk.dm @@ -92,10 +92,10 @@ to_chat(user, span_boldnotice("Health report results:")+health_report) if("Backup Scan") if(!our_db) - to_chat(user, span_boldnotice("Backup scan results:") + "
DATABASE ERROR!") + to_chat(user, span_notice(span_bold("Backup scan results:")) + "
DATABASE ERROR!") else var/scan_report = do_backup_scan(user) - to_chat(user, span_notice("Backup scan results:")+scan_report) + to_chat(user, span_notice(span_bold("Backup scan results:"))+scan_report) // Standby suspend() diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 3e4455af283..17a1837e333 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -365,6 +365,7 @@ GLOBAL_LIST_BOILERPLATE(allCasters, /obj/machinery/newscaster) if(!viewing_channel.censored) for(var/datum/feed_message/M in viewing_channel.messages) var/list/msgdata = list( + "title" = M.title, "body" = M.body, "img" = null, "type" = M.message_type, diff --git a/code/game/machinery/nuclear_bomb.dm b/code/game/machinery/nuclear_bomb.dm index 5fc7c356dcd..26f9d6fabfb 100644 --- a/code/game/machinery/nuclear_bomb.dm +++ b/code/game/machinery/nuclear_bomb.dm @@ -392,13 +392,13 @@ var/bomb_set ticker.station_explosion_cinematic(off_station,null) if(ticker.mode) ticker.mode.explosion_in_progress = 0 - to_world("The station was destoyed by the nuclear blast!") + to_world(span_boldannounce("The station was destoyed by the nuclear blast!")) ticker.mode.station_was_nuked = (off_station<2) //offstation==1 is a draw. the station becomes irradiated and needs to be evacuated. //kinda shit but I couldn't get permission to do what I wanted to do. if(!ticker.mode.check_finished())//If the mode does not deal with the nuke going off so just reboot because everyone is stuck as is - to_world("Resetting in 30 seconds!") + to_world(span_boldannounce("Resetting in 30 seconds!")) feedback_set_details("end_error","nuke - unhandled ending") diff --git a/code/game/machinery/oxygen_pump.dm b/code/game/machinery/oxygen_pump.dm index e1dd124c794..e44d8046d06 100644 --- a/code/game/machinery/oxygen_pump.dm +++ b/code/game/machinery/oxygen_pump.dm @@ -55,7 +55,7 @@ /obj/machinery/oxygen_pump/attack_hand(mob/user as mob) if((stat & MAINT) && tank) - user.visible_message("\The [user] removes \the [tank] from \the [src].", span_notice("You remove \the [tank] from \the [src].")) + user.visible_message(span_infoplain(span_bold("\The [user]") + " removes \the [tank] from \the [src]."), span_notice("You remove \the [tank] from \the [src].")) user.put_in_hands(tank) src.add_fingerprint(user) tank.add_fingerprint(user) @@ -69,7 +69,7 @@ tank.forceMove(src) breather.remove_from_mob(contained) contained.forceMove(src) - src.visible_message("\The [user] makes \the [contained] rapidly retract back into \the [src]!") + src.visible_message(span_infoplain(span_bold("\The [user]") + " makes \the [contained] rapidly retract back into \the [src]!")) if(breather.internals) breather.internals.icon_state = "internal0" breather = null @@ -140,7 +140,7 @@ user.drop_item() W.forceMove(src) tank = W - user.visible_message("\The [user] installs \the [tank] into \the [src].", span_notice("You install \the [tank] into \the [src].")) + user.visible_message(span_infoplain(span_bold("\The [user]") + " installs \the [tank] into \the [src]."), span_notice("You install \the [tank] into \the [src].")) src.add_fingerprint(user) if(istype(W, /obj/item/tank) && !stat) to_chat(user, span_warning("Please open the maintenance hatch first.")) diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 40998550420..756508c1707 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -564,7 +564,7 @@ take_damage(incoming_damage) S.do_attack_animation(src) return 1 - visible_message("\The [L] bonks \the [src]'s casing!") + visible_message(span_infoplain(span_bold("\The [L]") + " bonks \the [src]'s casing!")) return ..() /obj/machinery/porta_turret/emag_act(var/remaining_charges, var/mob/user) @@ -572,7 +572,7 @@ //Emagging the turret makes it go bonkers and stun everyone. It also makes //the turret shoot much, much faster. to_chat(user, span_warning("You short out [src]'s threat assessment circuits.")) - visible_message("[src] hums oddly...") + visible_message(span_info("[src] hums oddly...")) emagged = TRUE controllock = TRUE enabled = FALSE //turns off the turret temporarily diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 5d327cd7f43..c387e5dd3ac 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -200,7 +200,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() if("print") var/msg = message_log[text2num(params["print"])]; if(msg) - msg = "[msg[1]]:
[msg[2]]" + msg = span_bold("[msg[1]]:") + "
[msg[2]]" msg = replacetext(msg, "
", "\n") msg = strip_html_properly(msg) var/obj/item/paper/R = new(src.loc) diff --git a/code/game/machinery/suit_storage/suit_storage.dm b/code/game/machinery/suit_storage/suit_storage.dm index c9347f4e1f4..14705c2a479 100644 --- a/code/game/machinery/suit_storage/suit_storage.dm +++ b/code/game/machinery/suit_storage/suit_storage.dm @@ -167,10 +167,10 @@ else //welp, the guy is protected, we can continue if(issuperUV) - to_chat(user, "You slide the dial back towards \"185nm\".") + to_chat(user, span_info("You slide the dial back towards \"185nm\".")) issuperUV = 0 else - to_chat(user, "You crank the dial all the way up to \"15nm\".") + to_chat(user, span_info("You crank the dial all the way up to \"15nm\".")) issuperUV = 1 return @@ -180,7 +180,7 @@ return else - to_chat(user, "You push the button. The coloured LED next to it changes.") + to_chat(user, span_info("You push the button. The coloured LED next to it changes.")) safetieson = !safetieson @@ -229,7 +229,7 @@ /obj/machinery/suit_storage_unit/proc/toggle_open(mob/user as mob) if(islocked || isUV) - to_chat(user, span_red("Unable to open unit.")) + to_chat(user, span_warning("Unable to open unit.")) return if(OCCUPANT) eject_occupant(user) @@ -240,7 +240,7 @@ /obj/machinery/suit_storage_unit/proc/toggle_lock(mob/user as mob) if(OCCUPANT && safetieson) - to_chat(user, span_red("The Unit's safety protocols disallow locking when a biological form is detected inside its compartments.")) + to_chat(user, span_warning("The Unit's safety protocols disallow locking when a biological form is detected inside its compartments.")) return if(isopen) return @@ -252,12 +252,12 @@ if(isUV || isopen) //I'm bored of all these sanity checks return if(OCCUPANT && safetieson) - to_chat(user, span_red("WARNING: Biological entity detected in the confines of the Unit's storage. Cannot initiate cycle.")) + to_chat(user, span_warning(span_bold("WARNING:") + "Biological entity detected in the confines of the Unit's storage. Cannot initiate cycle.")) return if(!HELMET && !MASK && !SUIT && !OCCUPANT) //shit's empty yo - to_chat(user, span_red("Unit storage bays empty. Nothing to disinfect -- Aborting.")) + to_chat(user, span_warning("Unit storage bays empty. Nothing to disinfect -- Aborting.")) return - to_chat(user, "You start the Unit's cauterisation cycle.") + to_chat(user, span_notice("You start the Unit's cauterisation cycle.")) cycletime_left = 20 isUV = 1 if(OCCUPANT && !islocked) @@ -295,7 +295,7 @@ SUIT = null if(MASK) MASK = null - visible_message(span_red("With a loud whining noise, the Suit Storage Unit's door grinds open. Puffs of ashen smoke come out of its chamber."), 3) + visible_message(span_danger("With a loud whining noise, the Suit Storage Unit's door grinds open. Puffs of ashen smoke come out of its chamber."), 3) isbroken = 1 isopen = 1 islocked = 0 @@ -320,9 +320,9 @@ if(OCCUPANT.client) if(user != OCCUPANT) - to_chat(OCCUPANT, span_blue("The machine kicks you out!")) + to_chat(OCCUPANT, span_notice("The machine kicks you out!")) if(user.loc != src.loc) - to_chat(OCCUPANT, span_blue("You leave the not-so-cozy confines of the SSU.")) + to_chat(OCCUPANT, span_notice("You leave the not-so-cozy confines of the SSU.")) OCCUPANT.client.eye = OCCUPANT.client.mob OCCUPANT.client.perspective = MOB_PERSPECTIVE @@ -356,15 +356,15 @@ if(usr.stat != 0) return if(!isopen) - to_chat(usr, span_red("The unit's doors are shut.")) + to_chat(usr, span_warning("The unit's doors are shut.")) return if(!ispowered || isbroken) - to_chat(usr, span_red("The unit is not operational.")) + to_chat(usr, span_warning("The unit is not operational.")) return if((OCCUPANT) || (HELMET) || (SUIT)) - to_chat(usr, span_red("It's too cluttered inside for you to fit in!")) + to_chat(usr, span_warning("It's too cluttered inside for you to fit in!")) return - visible_message("[usr] starts squeezing into the suit storage unit!", 3) + visible_message(span_info("[usr] starts squeezing into the suit storage unit!"), 3) if(do_after(usr, 10)) usr.stop_pulling() usr.client.perspective = EYE_PERSPECTIVE @@ -388,7 +388,7 @@ if(I.has_tool_quality(TOOL_SCREWDRIVER)) panelopen = !panelopen playsound(src, I.usesound, 100, 1) - to_chat(user, span_blue("You [panelopen ? "open up" : "close"] the unit's maintenance panel.")) + to_chat(user, span_notice("You [panelopen ? "open up" : "close"] the unit's maintenance panel.")) updateUsrDialog() return if(istype(I, /obj/item/grab)) @@ -396,15 +396,15 @@ if(!(ismob(G.affecting))) return if(!isopen) - to_chat(user, span_red("The unit's doors are shut.")) + to_chat(user, span_warning("The unit's doors are shut.")) return if(!ispowered || isbroken) - to_chat(user, span_red("The unit is not operational.")) + to_chat(user, span_warning("The unit is not operational.")) return if((OCCUPANT) || (HELMET) || (SUIT)) //Unit needs to be absolutely empty - to_chat(user, span_red("The unit's storage area is too cluttered.")) + to_chat(user, span_warning("The unit's storage area is too cluttered.")) return - visible_message("[user] starts putting [G.affecting.name] into the Suit Storage Unit.", 3) + visible_message(span_notice("[user] starts putting [G.affecting.name] into the Suit Storage Unit."), 3) if(do_after(user, 20)) if(!G || !G.affecting) return //derpcheck var/mob/M = G.affecting @@ -426,9 +426,9 @@ return var/obj/item/clothing/suit/space/S = I if(SUIT) - to_chat(user, span_blue("The unit already contains a suit.")) + to_chat(user, span_notice("The unit already contains a suit.")) return - to_chat(user, "You load the [S.name] into the storage compartment.") + to_chat(user, span_info("You load the [S.name] into the storage compartment.")) user.drop_item() S.loc = src SUIT = S @@ -440,9 +440,9 @@ return var/obj/item/clothing/head/helmet/H = I if(HELMET) - to_chat(user, span_blue("The unit already contains a helmet.")) + to_chat(user, span_notice("The unit already contains a helmet.")) return - to_chat(user, "You load the [H.name] into the storage compartment.") + to_chat(user, span_info("You load the [H.name] into the storage compartment.")) user.drop_item() H.loc = src HELMET = H @@ -454,9 +454,9 @@ return var/obj/item/clothing/mask/M = I if(MASK) - to_chat(user, span_blue("The unit already contains a mask.")) + to_chat(user, span_notice("The unit already contains a mask.")) return - to_chat(user, "You load the [M.name] into the storage compartment.") + to_chat(user, span_info("You load the [M.name] into the storage compartment.")) user.drop_item() M.loc = src MASK = M diff --git a/code/game/machinery/supplybeacon.dm b/code/game/machinery/supplybeacon.dm index 8642c927531..c70e567c8bb 100644 --- a/code/game/machinery/supplybeacon.dm +++ b/code/game/machinery/supplybeacon.dm @@ -12,11 +12,11 @@ deploy_path = /obj/machinery/power/supply_beacon/supermatter /obj/item/supply_beacon/attack_self(var/mob/user) - user.visible_message("\The [user] begins setting up \the [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " begins setting up \the [src].")) if(!do_after(user, deploy_time)) return var/obj/S = new deploy_path(get_turf(user)) - user.visible_message("\The [user] deploys \the [S].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " deploys \the [S].")) user.unEquip(src) qdel(src) diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index 82f77c5edba..de8a16c1ab7 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -58,7 +58,7 @@ return if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/N = M - to_chat(N, "You have joined the ranks of the Syndicate and become a traitor to the station!") + to_chat(N, span_infoplain(span_bold("You have joined the ranks of the Syndicate and become a traitor to the station!"))) traitors.add_antagonist(N.mind) traitors.equip(N) message_admins("[N]/([N.ckey]) has accepted a traitor objective from a syndicate beacon.") diff --git a/code/game/machinery/syndicatebeacon_vr.dm b/code/game/machinery/syndicatebeacon_vr.dm index d340cdf57fe..2c911638583 100644 --- a/code/game/machinery/syndicatebeacon_vr.dm +++ b/code/game/machinery/syndicatebeacon_vr.dm @@ -32,7 +32,7 @@ charges -= 1 if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/N = M - to_chat(N, "Access granted, here are the supplies!") + to_chat(N, span_infoplain(span_bold("Access granted, here are the supplies!"))) traitors.spawn_uplink(N) N.mind.tcrystals = DEFAULT_TELECRYSTAL_AMOUNT N.mind.accept_tcrystals = 1 diff --git a/code/game/machinery/virtual_reality/ar_console.dm b/code/game/machinery/virtual_reality/ar_console.dm index e6361c26054..aed2bcb7a27 100644 --- a/code/game/machinery/virtual_reality/ar_console.dm +++ b/code/game/machinery/virtual_reality/ar_console.dm @@ -25,7 +25,7 @@ if(stat & (BROKEN)) if(occupant) go_out() - visible_message("\The [src] emits a low droning sound, before the pod door clicks open.") + visible_message(span_infoplain(span_bold("\The [src]") + " emits a low droning sound, before the pod door clicks open.")) return else if(eject_dead && occupant && occupant.stat == DEAD) visible_message(span_warning("\The [src] sounds an alarm, swinging its hatch open.")) diff --git a/code/game/machinery/virtual_reality/vr_console.dm b/code/game/machinery/virtual_reality/vr_console.dm index e62604f5e65..a49e9879251 100644 --- a/code/game/machinery/virtual_reality/vr_console.dm +++ b/code/game/machinery/virtual_reality/vr_console.dm @@ -40,7 +40,7 @@ if(stat & (NOPOWER|BROKEN)) if(occupant) go_out() - visible_message("\The [src] emits a low droning sound, before the pod door clicks open.") + visible_message(span_infoplain(span_bold("\The [src]") + " emits a low droning sound, before the pod door clicks open.")) return else if(eject_dead && occupant && occupant.stat == DEAD) // If someone dies somehow while inside, spit them out. visible_message(span_warning("\The [src] sounds an alarm, swinging its hatch open.")) @@ -257,7 +257,7 @@ //Yes, I am using a aheal just so your markings transfer over, I could not get .prefs.copy_to working. This is very stupid, and I can't be assed to rewrite this. Too bad! avatar.revive() avatar.revive() - avatar.verbs += /mob/living/carbon/human/proc/exit_vr //ahealing removes the prommie verbs and the VR verbs, giving it back + add_verb(avatar, /mob/living/carbon/human/proc/exit_vr) //ahealing removes the prommie verbs and the VR verbs, giving it back avatar.Sleeping(1) // Prompt for username after they've enterred the body. diff --git a/code/game/machinery/wishgranter.dm b/code/game/machinery/wishgranter.dm index 3ed8c1a050b..7ae9f4102c4 100644 --- a/code/game/machinery/wishgranter.dm +++ b/code/game/machinery/wishgranter.dm @@ -15,18 +15,18 @@ usr.set_machine(src) if(chargesa <= 0) - to_chat(user, "The Wish Granter lies silent.") + to_chat(user, span_infoplain("The Wish Granter lies silent.")) return else if(!istype(user, /mob/living/carbon/human)) - to_chat(user, "You feel a dark stirring inside of the Wish Granter, something you want nothing of. Your instincts are better than any man's.") + to_chat(user, span_infoplain("You feel a dark stirring inside of the Wish Granter, something you want nothing of. Your instincts are better than any man's.")) return else if(is_special_character(user)) - to_chat(user, "Even to a heart as dark as yours, you know nothing good will come of this. Something instinctual makes you pull away.") + to_chat(user, span_infoplain("Even to a heart as dark as yours, you know nothing good will come of this. Something instinctual makes you pull away.")) else if (!insistinga) - to_chat(user, "Your first touch makes the Wish Granter stir, listening to you. Are you really sure you want to do this?") + to_chat(user, span_infoplain("Your first touch makes the Wish Granter stir, listening to you. Are you really sure you want to do this?")) insistinga++ else @@ -35,8 +35,8 @@ var/wish = tgui_input_list(usr, "You want...","Wish", list("Power","Wealth","Immortality","To Kill","Peace")) switch(wish) if("Power") - to_chat(user, "Your wish is granted, but at a terrible cost...") - to_chat(user, "The Wish Granter punishes you for your selfishness, claiming your soul.") + to_chat(user, span_boldwarning("Your wish is granted, but at a terrible cost...")) + to_chat(user, span_warning("The Wish Granter punishes you for your selfishness, claiming your soul.")) if (!(LASER in user.mutations)) user.mutations.Add(LASER) to_chat(user, span_notice("You feel pressure building behind your eyes.")) @@ -50,19 +50,19 @@ user.see_invisible = SEE_INVISIBLE_LEVEL_TWO to_chat(user, span_notice("The walls suddenly disappear.")) if("Wealth") - to_chat(user, "Your wish is granted, but at a terrible cost...") - to_chat(user, "The Wish Granter punishes you for your selfishness, claiming your soul.") + to_chat(user, span_boldwarning("Your wish is granted, but at a terrible cost...")) + to_chat(user, span_warning("The Wish Granter punishes you for your selfishness, claiming your soul.")) new /obj/structure/closet/syndicate/resources/everything(loc) if("To Kill") - to_chat(user, "Your wish is granted, but at a terrible cost...") - to_chat(user, "The Wish Granter is outraged at your excessive wickedness, yet grants you your wish regardless. Someone will be killed soon.") + to_chat(user, span_boldwarning("Your wish is granted, but at a terrible cost...")) + to_chat(user, span_danger("The Wish Granter is outraged at your excessive wickedness, yet grants you your wish regardless. Someone will be killed soon.")) spawn(100) if(user) - to_chat(user, "Suddenly, you feel as though you are being torn to countless shreds! Your wish is coming true!") + to_chat(user, span_bolddanger("Suddenly, you feel as though you are being torn to countless shreds! Your wish is coming true!")) user.gib() if("Peace") - to_chat(user, "Whatever alien sentience that the Wish Granter possesses is satisfied with your wish. There is a distant wailing as the last of the Faithless begin to die, then silence.") - to_chat(user, "You feel as if you just narrowly avoided a terrible fate...") + to_chat(user, span_infoplain(span_bold("Whatever alien sentience that the Wish Granter possesses is satisfied with your wish. There is a distant wailing as the last of the Faithless begin to die, then silence."))) + to_chat(user, span_infoplain("You feel as if you just narrowly avoided a terrible fate...")) for(var/mob/living/simple_mob/faithless/F in living_mob_list) F.health = -10 F.set_stat(DEAD) diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm index f64e28d456e..a1f2d214e06 100644 --- a/code/game/mecha/combat/combat.dm +++ b/code/game/mecha/combat/combat.dm @@ -97,7 +97,7 @@ return M.updatehealth() src.occupant_message("You hit [T].") - src.visible_message(span_red("[src.name] hits [T].")) + src.visible_message(span_bolddanger("[src.name] hits [T].")) else step_away(M,src) src.occupant_message("You push [T] out of the way.") @@ -114,7 +114,7 @@ if(src.occupant.a_intent == I_HURT || istype(src.occupant, /mob/living/carbon/brain)) // Don't smash unless we mean it if(damtype == "brute") src.occupant_message("You hit [T].") - src.visible_message(span_red("[src.name] hits [T]")) + src.visible_message(span_bolddanger("[src.name] hits [T]")) playsound(src, 'sound/weapons/heavysmash.ogg', 50, 1) if(istype(T, /obj/structure/girder)) diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm index 44986197dd6..f7bfeb9b592 100644 --- a/code/game/mecha/combat/durand.dm +++ b/code/game/mecha/combat/durand.dm @@ -63,7 +63,7 @@ /* /obj/mecha/combat/durand/get_stats_part() var/output = ..() - output += "Defence mode: [defence?"on":"off"]" + output += span_bold("Defence mode: [defence?"on":"off"]") return output */ diff --git a/code/game/mecha/combat/gorilla.dm b/code/game/mecha/combat/gorilla.dm index e306455de45..16d25cf5f99 100644 --- a/code/game/mecha/combat/gorilla.dm +++ b/code/game/mecha/combat/gorilla.dm @@ -1,7 +1,7 @@ /obj/mecha/combat/gorilla name = "Gorilla" - desc = "Blitzkrieg!" //stop using all caps in item descs i will fight you. its redundant with the bold. + desc = span_bold("Blitzkrieg!") //stop using all caps in item descs i will fight you. its redundant with the bold. icon = 'icons/mecha/mecha64x64.dmi' icon_state = "pzrmech" initial_icon = "pzrmech" @@ -95,7 +95,7 @@ /obj/mecha/combat/gorilla/get_stats_part() var/output = ..() - output += {"Smoke: [smoke_reserve]"} + output += span_bold("Smoke:") + {"[smoke_reserve]"} return output @@ -113,7 +113,7 @@ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/cannon name = "8.8cm KwK 47" - desc = "Precision German engineering!" // Why would you ever take this off the mech, anyway? + desc = span_italics("Precision German engineering!") // Why would you ever take this off the mech, anyway? icon_state = "mecha_uac2" equip_cooldown = 60 // 6 seconds projectile = /obj/item/projectile/bullet/cannon diff --git a/code/game/mecha/components/_component.dm b/code/game/mecha/components/_component.dm index 9658fb45caf..95ec0fbd536 100644 --- a/code/game/mecha/components/_component.dm +++ b/code/game/mecha/components/_component.dm @@ -38,9 +38,9 @@ if(25 to 45) . += span_warning("It's heavily damaged.") if(2 to 25) - . += span_warning("It's falling apart.") + . += span_boldwarning("It's falling apart.") if(0 to 1) - . += span_warning("It is completely destroyed.") + . += span_boldwarning("It is completely destroyed.") /obj/item/mecha_parts/component/Initialize() . = ..() diff --git a/code/game/mecha/equipment/tools/passenger.dm b/code/game/mecha/equipment/tools/passenger.dm index 7e0d2631941..25ccaf278b9 100644 --- a/code/game/mecha/equipment/tools/passenger.dm +++ b/code/game/mecha/equipment/tools/passenger.dm @@ -35,7 +35,11 @@ else if(src.occupant != user) to_chat(user, span_warning("[src.occupant] was faster. Try harder next time, loser.")) else - to_chat(user, "You stop entering the exosuit.") + to_chat(user, span_info("You stop entering the exosuit.")) + +/obj/item/mecha_parts/mecha_equipment/tool/passenger/container_resist(var/mob/living) + if(occupant == living) + eject() /obj/item/mecha_parts/mecha_equipment/tool/passenger/verb/eject() set name = "Eject" @@ -45,7 +49,17 @@ if(usr != occupant) return - to_chat(occupant, "You climb out from \the [src].") + if(door_locked) + to_chat(occupant, span_notice("\The [src] is locked! You begin operating the emergency unlock mechanism. This will take one minute.")) + sleep(600) + if(!src || !usr || !occupant || (occupant != usr)) //Check if someone's released/replaced/bombed him already + return + if(door_locked) + door_locked = FALSE + occupant_message("Passenger compartment hatch unlocked.") + if (chassis) + chassis.visible_message(span_infoplain("The hatch on \the [chassis] unlocks."), span_hear("You hear something latching.")) + to_chat(occupant, span_info("You climb out from \the [src].")) go_out() occupant_message("[occupant] disembarked.") log_message("[occupant] disembarked.") diff --git a/code/game/mecha/equipment/tools/sleeper.dm b/code/game/mecha/equipment/tools/sleeper.dm index dfd9a7ca8e3..7dd617557d8 100644 --- a/code/game/mecha/equipment/tools/sleeper.dm +++ b/code/game/mecha/equipment/tools/sleeper.dm @@ -28,23 +28,23 @@ if(!istype(target)) return if(target.buckled) - occupant_message("[target] will not fit into the sleeper because they are buckled to [target.buckled].") + occupant_message(span_infoplain("[target] will not fit into the sleeper because they are buckled to [target.buckled].")) return if(occupant) - occupant_message("The sleeper is already occupied") + occupant_message(span_warning("The sleeper is already occupied")) return if(target.has_buckled_mobs()) occupant_message(span_warning("\The [target] has other entities attached to it. Remove them first.")) return - occupant_message("You start putting [target] into [src].") - chassis.visible_message("[chassis] starts putting [target] into the [src].") + occupant_message(span_infoplain("You start putting [target] into [src].")) + chassis.visible_message(span_infoplain("[chassis] starts putting [target] into the [src].")) var/C = chassis.loc var/T = target.loc if(do_after_cooldown(target)) if(chassis.loc!=C || target.loc!=T) return if(occupant) - occupant_message(span_red("The sleeper is already occupied!")) + occupant_message(span_boldwarning("The sleeper is already occupied!")) return target.forceMove(src) occupant = target @@ -57,8 +57,8 @@ */ set_ready_state(FALSE) START_PROCESSING(SSprocessing, src) - occupant_message(span_blue("[target] successfully loaded into [src]. Life support functions engaged.")) - chassis.visible_message("[chassis] loads [target] into [src].") + occupant_message(span_notice("[target] successfully loaded into [src]. Life support functions engaged.")) + chassis.visible_message(span_infoplain("[chassis] loads [target] into [src].")) log_message("[target] loaded. Life support functions engaged.") return @@ -66,7 +66,7 @@ if(!occupant) return occupant.forceMove(get_turf(src)) - occupant_message("[occupant] ejected. Life support functions disabled.") + occupant_message(span_infoplain("[occupant] ejected. Life support functions disabled.")) log_message("[occupant] ejected. Life support functions disabled.") occupant.reset_view() /* @@ -82,7 +82,7 @@ /obj/item/mecha_parts/mecha_equipment/tool/sleeper/detach() if(occupant) - occupant_message("Unable to detach [src] - equipment occupied.") + occupant_message(span_infoplain("Unable to detach [src] - equipment occupied.")) return STOP_PROCESSING(SSprocessing, src) return ..() @@ -179,9 +179,9 @@ return 0 var/to_inject = min(R.volume, inject_amount) if(to_inject && occupant.reagents.get_reagent_amount(R.id) + to_inject > inject_amount*4) - occupant_message("Sleeper safeties prohibit you from injecting more than [inject_amount*4] units of [R.name].") + occupant_message(span_warning("Sleeper safeties prohibit you from injecting more than [inject_amount*4] units of [R.name].")) else - occupant_message("Injecting [occupant] with [to_inject] units of [R.name].") + occupant_message(span_notice("Injecting [occupant] with [to_inject] units of [R.name].")) log_message("Injecting [occupant] with [to_inject] units of [R.name].") //SG.reagents.trans_id_to(occupant,R.id,to_inject) SG.reagents.remove_reagent(R.id,to_inject) @@ -197,6 +197,10 @@ return 1 return +/obj/item/mecha_parts/mecha_equipment/tool/sleeper/container_resist(var/mob/living) + if(occupant == living) + eject() + /obj/item/mecha_parts/mecha_equipment/tool/sleeper/verb/eject() set name = "Sleeper Eject" set category = "Exosuit Interface" @@ -218,7 +222,7 @@ if(!chassis.has_charge(energy_drain)) set_ready_state(TRUE) log_message("Deactivated.") - occupant_message("[src] deactivated - no power.") + occupant_message(span_infoplain("[src] deactivated - no power.")) return PROCESS_KILL var/mob/living/carbon/M = occupant if(!M) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index f51cb680833..0e7eda66c16 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -423,10 +423,10 @@ //////////////////////// /obj/mecha/proc/removeVerb(verb_path) - verbs -= verb_path + src.verbs -= verb_path /obj/mecha/proc/addVerb(verb_path) - verbs += verb_path + src.verbs += verb_path /obj/mecha/proc/add_airtank() internal_tank = new /obj/machinery/portable_atmospherics/canister/air(src) @@ -517,7 +517,7 @@ if(25 to 45) . += span_warning("It's heavily damaged.") else - . += span_warning(" It's falling apart. ") + . += span_warning(span_bold(" It's falling apart.") + " ") if(equipment?.len) . += "It's equipped with:" for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment) @@ -962,12 +962,12 @@ internal_damage &= ~int_dam_flag switch(int_dam_flag) if(MECHA_INT_TEMP_CONTROL) - occupant_message(span_blue("Life support system reactivated.")) + occupant_message(span_infoplain(span_blue(span_bold("Life support system reactivated.")))) start_process(MECHA_PROC_INT_TEMP) if(MECHA_INT_FIRE) - occupant_message(span_blue("Internal fire extinquished.")) + occupant_message(span_infoplain(span_blue(span_bold("Internal fire extinquished.")))) if(MECHA_INT_TANK_BREACH) - occupant_message(span_blue("Damaged internal tank has been sealed.")) + occupant_message(span_infoplain(span_blue(span_bold("Damaged internal tank has been sealed.")))) return @@ -1080,9 +1080,9 @@ src.take_damage(15) //The take_damage() proc handles armor values if(prob(25)) //Hulks punch hard but lets not give them consistent internal damage. src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - user.visible_message(span_red("[user] hits [src.name], doing some damage."), span_red("You hit [src.name] with all your might. The metal creaks and bends.")) + user.visible_message(span_warning(span_red(span_bold("[user] hits [src.name], doing some damage."))), span_warning(span_red(span_bold("You hit [src.name] with all your might. The metal creaks and bends.")))) else - user.visible_message(span_red("[user] hits [src.name]. Nothing happens."),span_red("You hit [src.name] with no visible effect.")) + user.visible_message(span_infoplain((span_red(span_bold("[user] hits [src.name]. Nothing happens.")))),span_infoplain(span_red(span_bold("You hit [src.name] with no visible effect.")))) src.log_append_to_last("Armor saved.") return @@ -1350,18 +1350,18 @@ else if(W.force < temp_damage_minimum) //Is your attack too PATHETIC to do anything. 3 damage to a person shouldn't do anything to a mech. src.occupant_message(span_notice("\The [W] bounces off the armor.")) - src.visible_message("\The [W] bounces off \the [src] armor") + src.visible_message(span_infoplain("\The [W] bounces off \the [src] armor")) return else if(W.armor_penetration < temp_minimum_penetration) //If you don't have enough pen, you won't do full damage src.occupant_message(span_notice("\The [W] struggles to bypass \the [src] armor.")) - src.visible_message("\The [W] struggles to bypass \the [src] armor") + src.visible_message(span_infoplain("\The [W] struggles to bypass \the [src] armor")) pass_damage_reduc_mod = temp_fail_penetration_value //This will apply to reduce damage to 2/3 or 66% by default else pass_damage_reduc_mod = 1 //Just making sure. - src.occupant_message(span_red("[user] hits [src] with [W].")) - user.visible_message(span_red("[user] hits [src] with [W]."), span_red("You hit [src] with [W].")) + src.occupant_message(span_warning(span_red(span_bold("[user] hits [src] with [W].")))) + user.visible_message(span_warning(span_red(span_bold("[user] hits [src] with [W]."))), span_danger(span_red(span_bold("You hit [src] with [W].")))) var/pass_damage = W.force pass_damage = (pass_damage*pass_damage_reduc_mod) //Apply the reduction of damage from not having enough armor penetration. This is not regular armor values at play. @@ -1946,7 +1946,7 @@ if(ishuman(occupant)) GrantActions(occupant, 1) else - visible_message("\The [usr] starts to climb into [src.name]") + visible_message(span_infoplain(span_bold("\The [usr]") + " starts to climb into [src.name]")) if(enter_after(40,usr)) if(!src.occupant) moved_inside(usr) @@ -2246,16 +2246,16 @@ if(defence_mode_possible) - output += "Defence mode: [defence_mode?"on":"off"]
" + output += span_bold("Defence mode: [defence_mode?"on":"off"]") + "
" if(overload_possible) - output += "Leg actuators overload: [overload?"on":"off"]
" + output += span_bold("Leg actuators overload: [overload?"on":"off"]") + "
" if(smoke_possible) - output += "Smoke: [smoke_reserve]
" + output += span_bold("Smoke:") + " [smoke_reserve]
" if(thrusters_possible) - output += "Thrusters: [thrusters?"on":"off"]
" + output += span_bold("Thrusters:") + " [thrusters?"on":"off"]
" //Cargo components. Keep this last otherwise it does weird alignment issues. - output += "Cargo Compartment Contents:
" + output += span_bold("Cargo Compartment Contents:") + "
" if(src.cargo.len) for(var/obj/O in src.cargo) output += "Unload : [O]
" @@ -2338,7 +2338,7 @@ /obj/mecha/proc/get_equipment_list() //outputs mecha equipment list in html if(!equipment.len) return - var/output = "Equipment:
" + var/output = span_bold("Equipment:") + "
" for(var/obj/item/mecha_parts/mecha_equipment/MT in equipment) output += "
[MT.get_equip_info()]
" output += "
" @@ -2586,11 +2586,11 @@ var/obj/item/mecha_parts/mecha_equipment/tool/passenger/P = passengers[pname] var/mob/occupant = P.occupant - user.visible_message("\The [user] begins opening the hatch on \the [P]...", span_notice("You begin opening the hatch on \the [P]...")) + user.visible_message(span_infoplain(span_bold("\The [user]") + " begins opening the hatch on \the [P]..."), span_notice("You begin opening the hatch on \the [P]...")) if (!do_after(user, 40)) return - user.visible_message("\The [user] opens the hatch on \the [P] and removes [occupant]!", span_notice("You open the hatch on \the [P] and remove [occupant]!")) + user.visible_message(span_infoplain(span_bold("\The [user]") + " opens the hatch on \the [P] and removes [occupant]!"), span_notice("You open the hatch on \the [P] and remove [occupant]!")) P.go_out() P.log_message("[occupant] was removed.") return @@ -2777,7 +2777,7 @@ if(prob(temp_deflect_chance))//Deflected src.log_append_to_last("Armor saved.") src.occupant_message(span_notice("\The [user]'s attack is stopped by the armor.")) - visible_message("\The [user] rebounds off [src.name]'s armor!") + visible_message(span_infoplain(span_bold("\The [user]") + " rebounds off [src.name]'s armor!")) user.attack_log += text("\[[time_stamp()]\] [span_red("attacked [src.name]")]") playsound(src, 'sound/weapons/slash.ogg', 50, 1, -1) diff --git a/code/game/mecha/mecha_actions.dm b/code/game/mecha/mecha_actions.dm index 3370bcdd0e0..0ce8eaf5901 100644 --- a/code/game/mecha/mecha_actions.dm +++ b/code/game/mecha/mecha_actions.dm @@ -62,10 +62,14 @@ // /datum/action/innate/mecha - check_flags = AB_CHECK_RESTRAINED | AB_CHECK_STUNNED | AB_CHECK_ALIVE + check_flags = AB_CHECK_RESTRAINED | AB_CHECK_STUNNED | AB_CHECK_CONSCIOUS button_icon = 'icons/effects/actions_mecha.dmi' var/obj/mecha/chassis +/datum/action/innate/mecha/Destroy() + chassis = null + return ..() + /datum/action/innate/mecha/Grant(mob/living/L, obj/mecha/M) if(M) chassis = M @@ -78,7 +82,7 @@ /datum/action/innate/mecha/mech_toggle_lights/Activate() button_icon_state = "mech_lights_[chassis.lights ? "off" : "on"]" - button.UpdateIcon() + UpdateButtonIcon() chassis.lights() @@ -89,7 +93,7 @@ /datum/action/innate/mecha/mech_toggle_internals/Activate() button_icon_state = "mech_internals_[chassis.use_internal_tank ? "off" : "on"]" - button.UpdateIcon() + UpdateButtonIcon() chassis.internal_tank() @@ -118,7 +122,7 @@ /datum/action/innate/mecha/strafe/Activate() button_icon_state = "mech_strafe_[chassis.strafing ? "off" : "on"]" - button.UpdateIcon() + UpdateButtonIcon() chassis.strafing() @@ -129,7 +133,7 @@ /datum/action/innate/mecha/mech_defence_mode/Activate() button_icon_state = "mech_defense_mode_[chassis.defence_mode ? "off" : "on"]" - button.UpdateIcon() + UpdateButtonIcon() chassis.defence_mode() @@ -140,7 +144,7 @@ /datum/action/innate/mecha/mech_overload_mode/Activate() button_icon_state = "mech_overload_[chassis.overload ? "off" : "on"]" - button.UpdateIcon() + UpdateButtonIcon() chassis.overload() @@ -151,7 +155,7 @@ /datum/action/innate/mecha/mech_smoke/Activate() //button_icon_state = "mech_smoke_[chassis.smoke ? "off" : "on"]" - //button.UpdateIcon() //Dual colors notneeded ATM + //UpdateButtonIcon() //Dual colors notneeded ATM chassis.smoke() @@ -162,7 +166,7 @@ /datum/action/innate/mecha/mech_zoom/Activate() button_icon_state = "mech_zoom_[chassis.zoom ? "off" : "on"]" - button.UpdateIcon() + UpdateButtonIcon() chassis.zoom() @@ -173,7 +177,7 @@ /datum/action/innate/mecha/mech_toggle_thrusters/Activate() button_icon_state = "mech_thrusters_[chassis.thrusters ? "off" : "on"]" - button.UpdateIcon() + UpdateButtonIcon() chassis.thrusters() @@ -198,7 +202,7 @@ chassis.occupant_message("You select [chassis.selected]") send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list()) button_icon_state = "mech_cycle_equip_on" - button.UpdateIcon() + UpdateButtonIcon() return var/number = 0 for(var/A in available_equipment) @@ -213,7 +217,7 @@ chassis.occupant_message("You switch to [chassis.selected]") button_icon_state = "mech_cycle_equip_on" send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list()) - button.UpdateIcon() + UpdateButtonIcon() return @@ -228,7 +232,7 @@ button_icon_state = "mech_damtype_[chassis.damtype]" playsound(src, 'sound/mecha/mechmove01.ogg', 50, 1) - button.UpdateIcon() + UpdateButtonIcon() chassis.query_damtype() @@ -239,7 +243,7 @@ /datum/action/innate/mecha/mech_toggle_phasing/Activate() button_icon_state = "mech_phasing_[chassis.phasing ? "off" : "on"]" - button.UpdateIcon() + UpdateButtonIcon() chassis.phasing() @@ -250,7 +254,7 @@ /datum/action/innate/mecha/mech_toggle_cloaking/Activate() button_icon_state = "mech_phasing_[chassis.cloaked ? "off" : "on"]" - button.UpdateIcon() + UpdateButtonIcon() chassis.toggle_cloaking() diff --git a/code/game/mecha/micro/micro.dm b/code/game/mecha/micro/micro.dm index 0762b58900a..f4d1b6ffe4c 100644 --- a/code/game/mecha/micro/micro.dm +++ b/code/game/mecha/micro/micro.dm @@ -80,8 +80,8 @@ else return M.updatehealth() - src.occupant_message("You hit [target].") - src.visible_message(span_red("[src.name] hits [target].")) + src.occupant_message(span_attack("You hit [target].")) + src.visible_message(span_bolddanger("[src.name] hits [target].")) else step_away(M,src) src.occupant_message("You push [target] out of the way.") @@ -96,8 +96,8 @@ if(damtype == "brute") for(var/target_type in src.destroyable_obj) if(istype(target, target_type) && hascall(target, "attackby")) - src.occupant_message("You hit [target].") - src.visible_message(span_red("[src.name] hits [target].")) + src.occupant_message(span_attack("You hit [target].")) + src.visible_message(span_bolddanger("[src.name] hits [target].")) if(!istype(target, /turf/simulated/wall)) target:attackby(src,src.occupant) else diff --git a/code/game/mecha/working/working.dm b/code/game/mecha/working/working.dm index 88ab213d2dc..1621a6be967 100644 --- a/code/game/mecha/working/working.dm +++ b/code/game/mecha/working/working.dm @@ -50,7 +50,7 @@ /obj/mecha/working/get_stats_part() var/output = ..() - output += "Cargo Compartment Contents:
" + output += span_bold("Cargo Compartment Contents:") + "
" if(src.cargo.len) for(var/obj/O in src.cargo) output += "Unload : [O]
" diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index b85714049b1..18660273f7d 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -135,7 +135,7 @@ var/global/list/image/splatter_cache=list() user.bloody_hands += taken user.hand_blood_color = basecolor user.update_inv_gloves(1) - user.verbs += /mob/living/carbon/human/proc/bloody_doodle + add_verb(user, /mob/living/carbon/human/proc/bloody_doodle) /obj/effect/decal/cleanable/blood/splatter random_icon_states = list("mgibbl1", "mgibbl2", "mgibbl3", "mgibbl4", "mgibbl5") diff --git a/code/game/objects/effects/gibs.dm b/code/game/objects/effects/gibs.dm index 59f0744923c..e3ede73f845 100644 --- a/code/game/objects/effects/gibs.dm +++ b/code/game/objects/effects/gibs.dm @@ -18,7 +18,7 @@ /obj/effect/gibspawner/proc/Gib(atom/location, var/datum/dna/MobDNA = null) if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len) - to_world(span_warning("Gib list length mismatch!")) + to_world(span_filter_system(span_warning("Gib list length mismatch!"))) return var/obj/effect/decal/cleanable/blood/gibs/gib = null diff --git a/code/game/objects/effects/manifest.dm b/code/game/objects/effects/manifest.dm index b184e0073a2..37f0450f193 100644 --- a/code/game/objects/effects/manifest.dm +++ b/code/game/objects/effects/manifest.dm @@ -10,7 +10,7 @@ return /obj/effect/manifest/proc/manifest() - var/dat = "Crew Manifest:
" + var/dat = span_bold("Crew Manifest") + ":
" for(var/mob/living/carbon/human/M in mob_list) dat += text(" [] - []
", M.name, M.get_assignment()) var/obj/item/paper/P = new /obj/item/paper( src.loc ) @@ -18,4 +18,4 @@ P.name = "paper- 'Crew Manifest'" //SN src = null qdel(src) - return \ No newline at end of file + return diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index ac2270e5135..34476594028 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -5,7 +5,7 @@ anchored = TRUE icon = 'icons/obj/weapons.dmi' icon_state = "landmine" - var/triggered = 0 + var/triggered = FALSE var/smoke_strength = 3 var/obj/item/mine/mineitemtype = /obj/item/mine var/panel_open = FALSE @@ -42,8 +42,10 @@ new_turf.register_dangerous_object(src) /obj/effect/mine/proc/explode(var/mob/living/M) + if(triggered) // Prevents circular mine explosions from two mines detonating eachother + return var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() - triggered = 1 + triggered = TRUE s.set_up(3, 1, src) s.start() @@ -128,8 +130,10 @@ mineitemtype = /obj/item/mine/dnascramble /obj/effect/mine/dnascramble/explode(var/mob/living/M) + if(triggered) // Prevents circular mine explosions from two mines detonating eachother + return var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() - triggered = 1 + triggered = TRUE s.set_up(3, 1, src) s.start() if(istype(M)) @@ -145,7 +149,9 @@ mineitemtype = /obj/item/mine/stun /obj/effect/mine/stun/explode(var/mob/living/M) - triggered = 1 + if(triggered) // Prevents circular mine explosions from two mines detonating eachother + return + triggered = TRUE var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() s.set_up(3, 1, src) s.start() @@ -160,7 +166,9 @@ mineitemtype = /obj/item/mine/n2o /obj/effect/mine/n2o/explode(var/mob/living/M) - triggered = 1 + if(triggered) // Prevents circular mine explosions from two mines detonating eachother + return + triggered = TRUE for (var/turf/simulated/floor/target in range(1,src)) if(!target.blocks_air) target.assume_gas("nitrous_oxide", 30) @@ -172,7 +180,9 @@ mineitemtype = /obj/item/mine/phoron /obj/effect/mine/phoron/explode(var/mob/living/M) - triggered = 1 + if(triggered) // Prevents circular mine explosions from two mines detonating eachother + return + triggered = TRUE for (var/turf/simulated/floor/target in range(1,src)) if(!target.blocks_air) target.assume_gas("phoron", 30) @@ -185,8 +195,10 @@ mineitemtype = /obj/item/mine/kick /obj/effect/mine/kick/explode(var/mob/living/M) + if(triggered) // Prevents circular mine explosions from two mines detonating eachother + return var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() - triggered = 1 + triggered = TRUE s.set_up(3, 1, src) s.start() if(istype(M, /obj/mecha)) @@ -206,8 +218,10 @@ var/spread_range = 7 /obj/effect/mine/frag/explode(var/mob/living/M) + if(triggered) // Prevents circular mine explosions from two mines detonating eachother + return var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() - triggered = 1 + triggered = TRUE s.set_up(3, 1, src) s.start() var/turf/O = get_turf(src) @@ -225,7 +239,9 @@ mineitemtype = /obj/item/mine/training /obj/effect/mine/training/explode(var/mob/living/M) - triggered = 1 + if(triggered) // Prevents circular mine explosions from two mines detonating eachother + return + triggered = TRUE visible_message("\The [src.name]'s light flashes rapidly as it 'explodes'.") new src.mineitemtype(get_turf(src)) spawn(0) @@ -235,6 +251,9 @@ mineitemtype = /obj/item/mine/emp /obj/effect/mine/emp/explode(var/mob/living/M) + if(triggered) // Prevents circular mine explosions from two mines detonating eachother + return + triggered = TRUE var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() s.set_up(3, 1, src) s.start() @@ -250,7 +269,9 @@ mineitemtype = /obj/item/mine/incendiary /obj/effect/mine/incendiary/explode(var/mob/living/M) - triggered = 1 + if(triggered) // Prevents circular mine explosions from two mines detonating eachother + return + triggered = TRUE var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() s.set_up(3, 1, src) s.start() @@ -265,8 +286,10 @@ mineitemtype = /obj/item/mine/gadget /obj/effect/mine/gadget/explode(var/mob/living/M) + if(triggered) // Prevents circular mine explosions from two mines detonating eachother + return var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() - triggered = 1 + triggered = TRUE s.set_up(3, 1, src) s.start() diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 61e1a68670c..3de66afd02e 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -255,7 +255,7 @@ last_itch = world.time to_chat(O.owner, span_notice("Your [O.name] itches...")) else if(prob(1)) - src.visible_message("\The [src] skitters.") + src.visible_message(span_infoplain(span_bold("\The [src]") + " skitters.")) if(amount_grown >= 0) amount_grown += rand(0,2) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index f8737e1387a..1a31dfa1995 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -35,10 +35,8 @@ var/max_pressure_protection // Set this variable if the item protects its wearer against high pressures below an upper bound. Keep at null to disable protection. var/min_pressure_protection // Set this variable if the item protects its wearer against low pressures above a lower bound. Keep at null to disable protection. 0 represents protection against hard vacuum. - - var/datum/action/item_action/action = null - var/action_button_name //It is also the text which gets displayed on the action button. If not set it defaults to 'Use [name]'. If it's not set, there'll be no button. - var/action_button_is_hands_free = 0 //If 1, bypass the restrained, lying, and stunned checks action buttons normally test for + var/list/actions = list() //list of /datum/action's that this item has. + var/list/actions_types = list() //list of paths of action datums to give to the item on New(). //This flag is used to determine when items in someone's inventory cover others. IE helmets making it so you can't see glasses, etc. //It should be used purely for appearance. For gameplay effects caused by items covering body parts, use body_parts_covered. @@ -117,6 +115,8 @@ /obj/item/New() ..() + for(var/path in actions_types) + new path(src) if(embed_chance < 0) if(sharp) embed_chance = max(5, round(force/w_class)) @@ -137,6 +137,8 @@ m.update_inv_r_hand() m.update_inv_l_hand() src.loc = null + for(var/X in actions) + qdel(X) return ..() // Check if target is reasonable for us to operate on. @@ -333,6 +335,9 @@ if(zoom) zoom() //binoculars, scope, etc appearance_flags &= ~NO_CLIENT_COLOR + for(var/X in actions) + var/datum/action/A = X + A.Remove(user) // called just as an item is picked up (loc is not yet changed) /obj/item/proc/pickup(mob/user) @@ -358,6 +363,10 @@ // for items that can be placed in multiple slots // note this isn't called during the initial dressing of a player /obj/item/proc/equipped(var/mob/user, var/slot) + for(var/X in actions) + var/datum/action/A = X + if(item_action_slot_check(slot, user)) //some items only give their actions buttons when in a specific slot. + A.Grant(user) hud_layerise() user.position_hud_item(src,slot) if(user.client) user.client.screen |= src @@ -371,6 +380,12 @@ playsound(src, pickup_sound, 20, preference = /datum/preference/toggle/pickup_sounds) return +//sometimes we only want to grant the item's action if it's equipped in a specific slot. +/obj/item/proc/item_action_slot_check(slot, mob/user) + if(slot == SLOT_BACK || slot == LEGS) //these aren't true slots, so avoid granting actions there + return FALSE + return TRUE + // As above but for items being equipped to an active module on a robot. /obj/item/proc/equipped_robot(var/mob/user) return @@ -534,11 +549,11 @@ var/list/global/slot_flags_enumeration = list( return -//This proc is executed when someone clicks the on-screen UI button. To make the UI button show, set the 'icon_action_button' to the icon_state of the image of the button in screen1_action.dmi +//This proc is executed when someone clicks the on-screen UI button. //The default action is attack_self(). //Checks before we get to here are: mob is alive, mob is not restrained, paralyzed, asleep, resting, laying, item is on the mob. -/obj/item/proc/ui_action_click() - attack_self(usr) +/obj/item/proc/ui_action_click(mob/user, actiontype) + attack_self(user) //RETURN VALUES //handle_shield should return a positive value to indicate that the attack is blocked and should be prevented. @@ -650,8 +665,10 @@ var/list/global/slot_flags_enumeration = list( return //if we haven't made our blood_overlay already - if( !blood_overlay ) + if(!blood_overlay) generate_blood_overlay() + else + overlays.Remove(blood_overlay) //Make the blood_overlay have the proper color then apply it. blood_overlay.color = blood_color diff --git a/code/game/objects/items/antag_spawners.dm b/code/game/objects/items/antag_spawners.dm index 3d41271d497..8371f5b0175 100644 --- a/code/game/objects/items/antag_spawners.dm +++ b/code/game/objects/items/antag_spawners.dm @@ -68,10 +68,10 @@ C.prefs.copy_to(H) H.key = C.key - to_chat(H, "You are the Technomancer's apprentice! Your goal is to assist them in their mission at the [station_name()].") - to_chat(H, "Your service has not gone unrewarded, however. Studying under them, you have learned how to use a Manipulation Core \ - of your own. You also have a catalog, to purchase your own functions and equipment as you see fit.") - to_chat(H, "It would be wise to speak to your master, and learn what their plans are for today.") + to_chat(H, span_infoplain(span_bold("You are the Technomancer's apprentice! Your goal is to assist them in their mission at the [station_name()]."))) + to_chat(H, span_infoplain(span_bold("Your service has not gone unrewarded, however. Studying under them, you have learned how to use a Manipulation Core \ + of your own. You also have a catalog, to purchase your own functions and equipment as you see fit."))) + to_chat(H, span_infoplain(span_bold("It would be wise to speak to your master, and learn what their plans are for today."))) spawn(1) technomancers.add_antagonist(H.mind, 0, 1, 0, 0, 0) @@ -114,7 +114,7 @@ // Put this text here before ckey change so that their laws are shown below it, since borg login() shows it. to_chat(C, span_notice("You are a " + span_bold("Mercenary Drone") + ", activated to serve your team.")) - to_chat(C, span_boldnotice("Be sure to examine your currently loaded lawset closely. It would be wise \ + to_chat(C, span_notice(span_bold("Be sure to examine your currently loaded lawset closely.") + " It would be wise \ to speak with your team, and learn what their plan is for today.")) R.key = C.key diff --git a/code/game/objects/items/bells.dm b/code/game/objects/items/bells.dm index a4271233732..457eb80f477 100644 --- a/code/game/objects/items/bells.dm +++ b/code/game/objects/items/bells.dm @@ -16,7 +16,7 @@ /obj/item/deskbell/examine(mob/user) . = ..() if(broken) - . += "It looks damaged, the ringer is stuck firmly inside." + . += span_bold("It looks damaged, the ringer is stuck firmly inside.") /obj/item/deskbell/attack(mob/target as mob, mob/living/user as mob) if(!broken) diff --git a/code/game/objects/items/devices/ai_detector.dm b/code/game/objects/items/devices/ai_detector.dm index 0f6ea01343a..33f2514b500 100644 --- a/code/game/objects/items/devices/ai_detector.dm +++ b/code/game/objects/items/devices/ai_detector.dm @@ -103,13 +103,13 @@ to_chat(carrier, span_warning("[icon2html(src, carrier.client)] Warning: AI focus at nearby location.")) carrier << 'sound/machines/defib_SafetyOn.ogg' if(PROXIMITY_ON_SCREEN) - to_chat(carrier, "[icon2html(src, carrier.client)] Alert: AI or camera focused at current location!") + to_chat(carrier, span_danger(span_large("[icon2html(src, carrier.client)] Alert: AI or camera focused at current location!"))) carrier <<'sound/machines/defib_ready.ogg' if(PROXIMITY_TRACKING) - to_chat(carrier, "[icon2html(src, carrier.client)] Danger: AI is actively tracking you!") + to_chat(carrier, span_danger(span_large("[icon2html(src, carrier.client)] Danger: AI is actively tracking you!"))) carrier << 'sound/machines/defib_success.ogg' if(PROXIMITY_TRACKING_FAIL) - to_chat(carrier, "[icon2html(src, carrier.client)] Danger: AI is attempting to actively track you, but you are outside of the camera network!") + to_chat(carrier, span_danger(span_large("[icon2html(src, carrier.client)] Danger: AI is attempting to actively track you, but you are outside of the camera network!"))) carrier <<'sound/machines/defib_ready.ogg' diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index bc7257e03f6..0ab0aa1223c 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -19,7 +19,7 @@ return ..() else M.death() - to_chat(user, "ERROR ERROR ERROR") + to_chat(user, span_infoplain(span_bold("ERROR ERROR ERROR"))) /obj/item/aicard/attack_self(mob/user) tgui_interact(user) @@ -100,11 +100,11 @@ /obj/item/aicard/proc/grab_ai(var/mob/living/silicon/ai/ai, var/mob/living/user) if(!ai.client && !ai.deployed_shell) - to_chat(user, "ERROR: AI [ai.name] is offline. Unable to transfer.") + to_chat(user, span_danger("ERROR:") + " AI [ai.name] is offline. Unable to transfer.") return 0 if(carded_ai) - to_chat(user, "Transfer failed: Existing AI found on remote device. Remove existing AI to install a new one.") + to_chat(user, span_danger("Transfer failed:") + " Existing AI found on remote device. Remove existing AI to install a new one.") return 0 if(!user.IsAdvancedToolUser() && isanimal(user)) @@ -117,7 +117,7 @@ if(do_after(user, 100)) if(carded_ai) - to_chat(user, "Transfer failed: Existing AI found on remote device. Remove existing AI to install a new one.") + to_chat(user, span_danger("Transfer failed:") + " Existing AI found on remote device. Remove existing AI to install a new one.") return 0 if(istype(ai.loc, /turf/)) new /obj/structure/AIcore/deactivated(get_turf(ai)) @@ -135,9 +135,9 @@ ai.disconnect_shell("Disconnected from remote shell due to core intelligence transfer.") //If the AI is controlling a borg, force the player back to core! if(ai.client) - to_chat(ai, "You have been transferred into a mobile core. Remote access lost.") + to_chat(ai, span_infoplain("You have been transferred into a mobile core. Remote access lost.")) if(user.client) - to_chat(ai, "Transfer successful: [ai.name] extracted from current device and placed within mobile core.") + to_chat(ai, span_notice(span_bold("Transfer successful:")) + " [ai.name] extracted from current device and placed within mobile core.") ai.canmove = 1 update_icon() diff --git a/code/game/objects/items/devices/communicator/integrated.dm b/code/game/objects/items/devices/communicator/integrated.dm index ae7a2b78733..41990e30f2e 100644 --- a/code/game/objects/items/devices/communicator/integrated.dm +++ b/code/game/objects/items/devices/communicator/integrated.dm @@ -20,7 +20,7 @@ // Parameters: None // Description: Lets synths use their communicators without hands. /obj/item/communicator/integrated/verb/activate() - set category = "AI IM" + set category = "Abilities.AI_IM" set name = "Use Communicator" set desc = "Utilizes your built-in communicator." set src in usr @@ -29,4 +29,4 @@ to_chat(usr, "You can't do that because you are dead!") return - src.attack_self(usr) \ No newline at end of file + src.attack_self(usr) diff --git a/code/game/objects/items/devices/communicator/messaging.dm b/code/game/objects/items/devices/communicator/messaging.dm index b05560dc1fc..a9c07241600 100644 --- a/code/game/objects/items/devices/communicator/messaging.dm +++ b/code/game/objects/items/devices/communicator/messaging.dm @@ -34,8 +34,8 @@ if(src in comm.voice_invites) comm.open_connection(src) return - to_chat(src, "[icon2html(origin_atom,src.client)] Receiving communicator request from [origin_atom]. To answer, use the Call Communicator \ - verb, and select that name to answer the call.") + to_chat(src, span_notice("[icon2html(origin_atom,src.client)] Receiving communicator request from [origin_atom]. To answer, use the " + span_bold("Call Communicator") + "\ + verb, and select that name to answer the call.")) src << 'sound/machines/defib_SafetyOn.ogg' comm.voice_invites |= src if(message == "ping") @@ -44,9 +44,9 @@ random = random / 10 exonet.send_message(origin_address, "64 bytes received from [exonet.address] ecmp_seq=1 ttl=51 time=[random] ms") if(message == "text") - to_chat(src, span_notice("[icon2html(origin_atom,src.client)] Received text message from [origin_atom]: \"[text]\"")) + to_chat(src, span_notice("[icon2html(origin_atom,src.client)] Received text message from [origin_atom]: " + span_bold("\"[text]\""))) src << 'sound/machines/defib_safetyOff.ogg' - exonet_messages.Add("From [origin_atom]:
[text]") + exonet_messages.Add(span_bold("From [origin_atom]:") + "
[text]") return // Proc: request_im() @@ -135,8 +135,8 @@ var/obj/machinery/exonet_node/E = get_exonet_node() if(!E || !E.on || !E.allow_external_communicators) - to_chat(src, "The Exonet node at telecommunications is down at the moment, or is actively blocking you, \ - so your call can't go through.") + to_chat(src, span_danger("The Exonet node at telecommunications is down at the moment, or is actively blocking you, \ + so your call can't go through.")) return var/list/choices = list() @@ -158,7 +158,7 @@ O.exonet.send_message(chosen_communicator.exonet.address, "text", text_message) to_chat(src, span_notice("You have sent '[text_message]' to [chosen_communicator].")) - exonet_messages.Add("To [chosen_communicator]:
[text_message]") + exonet_messages.Add(span_bold("To [chosen_communicator]:") + "
[text_message]") log_pda("(DCOMM: [src]) sent \"[text_message]\" to [chosen_communicator]", src) for(var/mob/M in player_list) if(M.stat == DEAD && M.client?.prefs?.read_preference(/datum/preference/toggle/ghost_ears)) diff --git a/code/game/objects/items/devices/communicator/phone.dm b/code/game/objects/items/devices/communicator/phone.dm index c16bae02b79..83e29b28fc9 100644 --- a/code/game/objects/items/devices/communicator/phone.dm +++ b/code/game/objects/items/devices/communicator/phone.dm @@ -101,9 +101,9 @@ qdel(blackness) to_chat(new_voice, span_notice("[icon2html(src,new_voice.client)] Connection to [src] established.")) - to_chat(new_voice, "To talk to the person on the other end of the call, just talk normally.") - to_chat(new_voice, "If you want to end the call, use the 'Hang Up' verb. The other person can also hang up at any time.") - to_chat(new_voice, "Remember, your character does not know anything you've learned from observing!") + to_chat(new_voice, span_infoplain(span_bold("To talk to the person on the other end of the call, just talk normally."))) + to_chat(new_voice, span_infoplain(span_bold("If you want to end the call, use the 'Hang Up' verb. The other person can also hang up at any time."))) + to_chat(new_voice, span_infoplain(span_bold("Remember, your character does not know anything you've learned from observing!"))) if(new_voice.mind) new_voice.mind.assigned_role = JOB_DISEMBODIED_VOICE if(user) @@ -216,7 +216,7 @@ var/list/in_range = get_mobs_and_objs_in_view_fast(T,world.view,0) //Range of 3 since it's a tiny video display mobs_to_relay = in_range["mobs"] //VOREStation Edit End - var/rendered = "[icon2html(src,mobs_to_relay)] [text]" + var/rendered = "[icon2html(src,mobs_to_relay)] " + span_message("[text]") for(var/mob/mob in mobs_to_relay) //We can't use visible_message(), or else we will get an infinite loop if two communicators hear each other. var/dst = get_dist(get_turf(mob),get_turf(comm)) if(dst <= video_range) @@ -263,7 +263,7 @@ if(!T) return var/list/in_range = get_mobs_and_objs_in_view_fast(T,world.view,0) var/list/mobs_to_relay = in_range["mobs"] - var/rendered = "[icon2html(src, mobs_to_relay)] [msg]" + var/rendered = "[icon2html(src, mobs_to_relay)] " + span_message("[msg]") for(var/mob/mob in mobs_to_relay) mob.show_message(rendered) ..() @@ -301,8 +301,8 @@ var/obj/machinery/exonet_node/E = get_exonet_node() if(!E || !E.on || !E.allow_external_communicators) - to_chat(src, "The Exonet node at telecommunications is down at the moment, or is actively blocking you, \ - so your call can't go through.") + to_chat(src, span_danger("The Exonet node at telecommunications is down at the moment, or is actively blocking you, \ + so your call can't go through.")) return var/list/choices = list() diff --git a/code/game/objects/items/devices/defib.dm b/code/game/objects/items/devices/defib.dm index 51a12f0ea52..3efe3f84059 100644 --- a/code/game/objects/items/devices/defib.dm +++ b/code/game/objects/items/devices/defib.dm @@ -15,7 +15,7 @@ w_class = ITEMSIZE_LARGE unacidable = TRUE origin_tech = list(TECH_BIO = 4, TECH_POWER = 2) - action_button_name = "Remove/Replace Paddles" + actions_types = list(/datum/action/item_action/remove_replace_paddles) var/obj/item/shockpaddles/linked/paddles var/obj/item/cell/bcell = null @@ -64,7 +64,7 @@ else add_overlay("[initial(icon_state)]-nocell") -/obj/item/defib_kit/ui_action_click() +/obj/item/defib_kit/ui_action_click(mob/user, actiontype) toggle_paddles() /obj/item/defib_kit/attack_hand(mob/user) @@ -395,7 +395,7 @@ user.visible_message(span_warning("\The [user] begins to place [src] on [H]'s chest."), span_warning("You begin to place [src] on [H]'s chest...")) if(!do_after(user, 30, H)) return - user.visible_message("\The [user] places [src] on [H]'s chest.", span_warning("You place [src] on [H]'s chest.")) + user.visible_message(span_infoplain(span_bold("\The [user]") + " places [src] on [H]'s chest."), span_warning("You place [src] on [H]'s chest.")) playsound(src, 'sound/machines/defib_charge.ogg', 50, 0) var/error = can_defib(H) @@ -472,7 +472,7 @@ playsound(src, 'sound/machines/defib_failed.ogg', 50, 0) return - user.visible_message(span_danger("\The [user] shocks [H] with \the [src]!"), span_warning("You shock [H] with \the [src]!")) + user.visible_message(span_danger(span_italics("\The [user] shocks [H] with \the [src]!")), span_warning("You shock [H] with \the [src]!")) playsound(src, 'sound/machines/defib_zap.ogg', 100, 1, -1) playsound(src, 'sound/weapons/Egloves.ogg', 100, 1, -1) set_cooldown(cooldowntime) @@ -533,7 +533,7 @@ H.setBrainLoss(brain_damage) /obj/item/shockpaddles/proc/make_announcement(var/message, var/msg_class) - audible_message("\The [src] [message]", "\The [src] vibrates slightly.", runemessage = "buzz") + audible_message(span_bold(span_info("\The [src]") + " [message]"), span_info("\The [src] vibrates slightly."), runemessage = "buzz") /obj/item/shockpaddles/emag_act(mob/user) if(safety) @@ -617,7 +617,7 @@ return (base_unit.bcell && base_unit.bcell.checked_use(charge_amt)) /obj/item/shockpaddles/linked/make_announcement(var/message, var/msg_class) - base_unit.audible_message("\The [base_unit] [message]", "\The [base_unit] vibrates slightly.") + base_unit.audible_message(span_infoplain(span_bold("\The [base_unit]") + " [message]"), span_info("\The [base_unit] vibrates slightly.")) /* Standalone Shockpaddles diff --git a/code/game/objects/items/devices/denecrotizer_vr.dm b/code/game/objects/items/devices/denecrotizer_vr.dm index f386f80cb5e..af55b535d47 100644 --- a/code/game/objects/items/devices/denecrotizer_vr.dm +++ b/code/game/objects/items/devices/denecrotizer_vr.dm @@ -77,11 +77,11 @@ ghostjoin = FALSE ghostjoin_icon() if(capture_caught) - to_chat(src, span_notice("You are bound to [revivedby], follow their commands within reason and to the best of your abilities, and avoid betraying or abandoning them. You are allied with [revivedby]. Do not attack anyone for no reason. Of course, you may do scenes as you like, but you must still respect preferences.")) + to_chat(src, span_notice("You are bound to [revivedby], follow their commands within reason and to the best of your abilities, and avoid betraying or abandoning them.") + " " + span_warning("You are allied with [revivedby]. Do not attack anyone for no reason. Of course, you may do scenes as you like, but you must still respect preferences.")) visible_message("[src]'s eyes flicker with a curious intelligence.", runemessage = "looks around") return if(revivedby != "no one") - to_chat(src, span_notice("Where once your life had been rough and scary, you have been assisted by [revivedby]. They seem to be the reason you are on your feet again... so perhaps you should help them out. Being as you were revived, you are allied with the station. Do not attack anyone unless they are threatening the one who revived you. And try to listen to the one who revived you within reason. Of course, you may do scenes as you like, but you must still respect preferences.")) + to_chat(src, span_notice("Where once your life had been rough and scary, you have been assisted by [revivedby]. They seem to be the reason you are on your feet again... so perhaps you should help them out.") + " " + span_warning("Being as you were revived, you are allied with the station. Do not attack anyone unless they are threatening the one who revived you. And try to listen to the one who revived you within reason. Of course, you may do scenes as you like, but you must still respect preferences.")) visible_message("[src]'s eyes flicker with a curious intelligence.", runemessage = "looks around") /// Evaluate someone for being allowed to join as this mob from being a ghost diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 674c7548717..9d3b9af9702 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -45,7 +45,7 @@ if(repairing) to_chat(user, span_notice("\The [src] is already being repaired!")) return - user.visible_message("\The [user] starts trying to repair \the [src]'s bulb.") + user.visible_message(span_infoplain(span_bold("\The [user]") + " starts trying to repair \the [src]'s bulb.")) repairing = TRUE if(do_after(user, (40 SECONDS + rand(0, 20 SECONDS)) * W.toolspeed) && can_repair) if(prob(30)) @@ -54,7 +54,7 @@ update_icon() playsound(src, W.usesound, 50, 1) else - user.visible_message("\The [user] fails to repair \the [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " fails to repair \the [src].")) repairing = FALSE else ..() @@ -141,7 +141,7 @@ else if(!charge_only) //can only use it 10 times a minute, unless it runs purely on charge. if(user) update_icon() - to_chat(user, span_warning("click")) + to_chat(user, span_warning(span_italics("click"))) playsound(src, 'sound/weapons/empty.ogg', 80, 1) return FALSE else if(battery && battery.checked_use(charge_cost + (round(charge_cost / 4) * max(0, times_used - max_flashes)))) // Using over your maximum flashes starts taking more charge per added flash. diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 750d082a175..3f1505b6f3e 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -19,7 +19,7 @@ w_class = ITEMSIZE_SMALL slot_flags = SLOT_BELT matter = list(MAT_STEEL = 50,MAT_GLASS = 20) - action_button_name = "Toggle Flashlight" + actions_types = list(/datum/action/item_action/toggle_flashlight) light_system = MOVABLE_LIGHT_DIRECTIONAL light_range = 4 //luminosity when on @@ -102,7 +102,7 @@ STOP_PROCESSING(SSobj, src) playsound(src, 'sound/weapons/empty.ogg', 15, 1, -3) // VOREStation Edit update_brightness() - user.update_action_buttons() + user.update_action_buttons_icon() return 1 /obj/item/flashlight/emp_act(severity) @@ -128,13 +128,13 @@ if(H.species.vision_organ) vision = H.internal_organs_by_name[H.species.vision_organ] if(!vision) - user.visible_message("\The [user] directs [src] at [M]'s face.", \ + user.visible_message(span_infoplain(span_bold("\The [user]") + " directs [src] at [M]'s face."), \ span_notice("You direct [src] at [M]'s face.")) to_chat(user, span_warning("You can't find any [H.species.vision_organ ? H.species.vision_organ : "eyes"] on [H]!")) user.setClickCooldown(user.get_attack_speed(src)) return - user.visible_message("\The [user] directs [src] to [M]'s eyes.", \ + user.visible_message(span_infoplain(span_bold("\The [user]") + " directs [src] to [M]'s eyes."), \ span_notice("You direct [src] to [M]'s eyes.")) if(H != user) //can't look into your own eyes buster if(M.stat == DEAD || M.blinded) //mob is dead or fully blind @@ -355,7 +355,7 @@ light_color = LIGHT_COLOR_FLARE icon_state = "flare" item_state = "flare" - action_button_name = null //just pull it manually, neckbeard. + actions_types = list() //just pull it manually, neckbeard. var/fuel = 0 var/on_damage = 7 var/produce_heat = 1500 diff --git a/code/game/objects/items/devices/hacktool.dm b/code/game/objects/items/devices/hacktool.dm index 6db9aa6a5ae..ce097cdfd69 100644 --- a/code/game/objects/items/devices/hacktool.dm +++ b/code/game/objects/items/devices/hacktool.dm @@ -73,7 +73,7 @@ to_chat(user, span_warning("You are already hacking!")) return 0 if(!is_type_in_list(target, supported_types)) - to_chat(user, "[icon2html(src, user.client)] Unable to hack this target, invalid target type.") + to_chat(user, "[icon2html(src, user.client)] " + span_warning("Unable to hack this target, invalid target type.")) return 0 if(istype(target, /obj/structure/closet/crate/secure)) @@ -103,7 +103,7 @@ if(istype(target, /obj/machinery/door/airlock)) var/obj/machinery/door/airlock/D = target if(D.security_level > max_level) - to_chat(user, "[icon2html(src, user.client)] Target's electronic security is too complex.") + to_chat(user, "[icon2html(src, user.client)] " + span_warning("Target's electronic security is too complex.")) return 0 var/found = known_targets.Find(D) diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index 795a0f0b61a..251025c9ce6 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -35,12 +35,12 @@ if(emagged) if(insults) var/insult = pick(insultmsg) - user.audible_message("[user.GetVoice()][user.GetAltName()] broadcasts, \"[insult]\"", runemessage = insult) + user.audible_message(span_infoplain(span_bold("[user.GetVoice()]") + "[user.GetAltName()] broadcasts, " + span_large("\"[insult]\"")), runemessage = insult) insults-- else to_chat(user, span_warning("*BZZZZzzzzzt*")) else - user.audible_message("[user.GetVoice()][user.GetAltName()] broadcasts, \"[message]\"", runemessage = message) + user.audible_message(span_infoplain(span_bold("[user.GetVoice()]") + "[user.GetAltName()] broadcasts, " + span_large("\"[message]\"")), runemessage = message) /obj/item/megaphone/attack_self(var/mob/living/user) var/message = sanitize(tgui_input_text(user, "Shout a message?", "Megaphone", null)) @@ -136,7 +136,7 @@ if(emagged) if(insults) var/insult = pick(insultmsg) - user.audible_message("[user.GetVoice()][user.GetAltName()] broadcasts, \"[insult]\"", runemessage = insult) + user.audible_message(span_bold("[user.GetVoice()]") + "[user.GetAltName()] broadcasts, \"[insult]\"", runemessage = insult) if(broadcast_size >= 11) var/turf/T = get_turf(user) playsound(src, 'sound/items/AirHorn.ogg', 100, 1) @@ -165,4 +165,4 @@ qdel(src) return else - user.audible_message("[user.GetVoice()][user.GetAltName()] broadcasts, \"[message]\"", runemessage = message) + user.audible_message(span_bold("[user.GetVoice()]") + "[user.GetAltName()] broadcasts, \"[message]\"", runemessage = message) diff --git a/code/game/objects/items/devices/modkit.dm b/code/game/objects/items/devices/modkit.dm index 21e6c7b02bd..68a2c4eab29 100644 --- a/code/game/objects/items/devices/modkit.dm +++ b/code/game/objects/items/devices/modkit.dm @@ -52,7 +52,7 @@ playsound(src, O.usesound, 100, 1) - user.visible_message("\The [user] opens \the [src] and modifies \the [O].",span_notice("You open \the [src] and modify \the [O].")) + user.visible_message(span_infoplain(span_bold("\The [user]") + " opens \the [src] and modifies \the [O]."),span_notice("You open \the [src] and modify \the [O].")) I.refit_for_species(target_species) diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 5424c27fc04..5aefe909d78 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -277,7 +277,7 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/paicard) "} dat += "
" if(radio) - dat += "Radio Uplink" + dat += span_bold("Radio Uplink") dat += {" @@ -296,7 +296,7 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/paicard)
"} else // - dat += "Radio Uplink
" + dat += span_bold("Radio Uplink") + "
" dat += "Radio firmware not loaded. Please install a pAI personality to load firmware.
" /* - //A button for instantly deleting people from the game is lame, especially considering that pAIs on our server tend to activate without a master. dat += {" @@ -308,7 +308,7 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/paicard) "} */ if(screen_msg) - dat += "Message from [pai.name]
[screen_msg]" + dat += span_bold("Message from [pai.name]") + "
[screen_msg]" else if(looking_for_personality) dat += {" diff --git a/code/game/objects/items/devices/personal_shield_generator_vr.dm b/code/game/objects/items/devices/personal_shield_generator_vr.dm index 4804859248a..f231ccebfea 100644 --- a/code/game/objects/items/devices/personal_shield_generator_vr.dm +++ b/code/game/objects/items/devices/personal_shield_generator_vr.dm @@ -26,7 +26,7 @@ w_class = ITEMSIZE_HUGE //It's a giant shield generator!!! unacidable = TRUE origin_tech = list(TECH_MATERIAL = 6, TECH_COMBAT = 8, TECH_POWER = 6, TECH_DATA = 4) //These are limited AND high tech. Breaking one of them down is massive. - action_button_name = "Toggle Shield" + actions_types = list(/datum/action/item_action/toggle_shield) var/obj/item/gun/energy/gun/generator/active_weapon var/obj/item/cell/device/bcell = null var/upgraded = 0 // If the PSG has been upgraded by some method or not. Only used for the mining belt ATM. @@ -126,11 +126,11 @@ s.start() shield_active = 0 if(bcell.charge_delay) //It WILL blow up soon. Downside of self-charging cells. - to_chat(src.loc, "Your shield generator sparks and suddenly goes down! A warning message pops up on screen: \ - 'WARNING, INTERNAL CELL MELTDOWN IMMINENT. TIME TILL EXPLOSION: [bcell.charge_delay/10] SECONDS. DISCARD UNIT IMMEDIATELY!'") + to_chat(src.loc, span_critical("Your shield generator sparks and suddenly goes down! A warning message pops up on screen: \ + 'WARNING, INTERNAL CELL MELTDOWN IMMINENT. TIME TILL EXPLOSION: [bcell.charge_delay/10] SECONDS. DISCARD UNIT IMMEDIATELY!'")) else //It won't blow up unless you turn it back on again. Upside of using non-charging cells. - to_chat(src.loc, "Your shield generator sparks and suddenly goes down! A warning message pops up on screen: \ - 'WARNING, INTERNAL CELL CRITICALLY DAMAGED. REPLACE CELL IMMEDIATELY.'") + to_chat(src.loc, span_critical("Your shield generator sparks and suddenly goes down! A warning message pops up on screen: \ + 'WARNING, INTERNAL CELL CRITICALLY DAMAGED. REPLACE CELL IMMEDIATELY.'")) STOP_PROCESSING(SSobj, src) update_icon() else @@ -138,7 +138,7 @@ bcell.emp_act(severity) ..() -/obj/item/personal_shield_generator/ui_action_click() +/obj/item/personal_shield_generator/ui_action_click(mob/user, actiontype) toggle_shield() /obj/item/personal_shield_generator/attack_hand(mob/user) diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index bd3bcb4eba0..86a3cc5a138 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -205,10 +205,10 @@ /obj/item/radio/intercom/AIAltClick(var/mob/user) if(frequency == AI_FREQ) set_frequency(initial(frequency)) - to_chat(user, span_notice("\The [src]'s frequency is now set to [span_green("Default")].")) + to_chat(user, span_notice("\The [src]'s frequency is now set to [span_green(span_bold("Default"))].")) else set_frequency(AI_FREQ) - to_chat(user, span_notice("\The [src]'s frequency is now set to [span_pink("AI Private")].")) + to_chat(user, span_notice("\The [src]'s frequency is now set to [span_pink(span_bold("AI Private"))].")) //VOREStation Add End /obj/item/radio/intercom/locked var/locked_frequency diff --git a/code/game/objects/items/devices/radio/radiopack.dm b/code/game/objects/items/devices/radio/radiopack.dm index d47612e788c..0dd91f0c875 100644 --- a/code/game/objects/items/devices/radio/radiopack.dm +++ b/code/game/objects/items/devices/radio/radiopack.dm @@ -10,7 +10,7 @@ throwforce = 6 preserve_item = 1 w_class = ITEMSIZE_LARGE - action_button_name = "Remove/Replace Handset" + actions_types = list(/datum/action/item_action/remove_replace_handset) var/obj/item/radio/bluespacehandset/linked/handset = /obj/item/radio/bluespacehandset/linked @@ -23,7 +23,7 @@ . = ..() QDEL_NULL(handset) -/obj/item/bluespaceradio/ui_action_click() +/obj/item/bluespaceradio/ui_action_click(mob/user, actiontype) toggle_handset() /obj/item/bluespaceradio/attack_hand(var/mob/user) diff --git a/code/game/objects/items/devices/scanners/guide.dm b/code/game/objects/items/devices/scanners/guide.dm index 15c880e535f..de728cd8544 100644 --- a/code/game/objects/items/devices/scanners/guide.dm +++ b/code/game/objects/items/devices/scanners/guide.dm @@ -72,39 +72,40 @@ bloodloss = TRUE if(bleeding_external) - dat += "Surface bleeding - Bandage immediately or apply brute-damage fixing chemicals (i.e. Bicaridine) if no bandages available.
" + dat += span_bold("Surface bleeding") + " - Bandage immediately or apply brute-damage fixing chemicals (i.e. Bicaridine) if no bandages available.
" if(bleeding_internal) - dat += "Internal bleeding - Commence internal vein repair surgery or apply clotting chemicals (i.e. Myelamine).
" + dat += span_bold("Internal bleeding") + " - Commence internal vein repair surgery or apply clotting chemicals (i.e. Myelamine).
" if(M.getOxyLoss()) - dat += "Suffociation - Give Dexalin or Dexalin Plus. Check for heart or lung damage.
" + dat += span_bold("Suffociation") + " - Give Dexalin or Dexalin Plus. Check for heart or lung damage.
" if(infection) - dat += "Infection - Give Spaceacillin. If severe, use Corophizine or overdose on Spaceacillin and monitor until well.
" + dat += span_bold("Infection") + " - Give Spaceacillin. If severe, use Corophizine or overdose on Spaceacillin and monitor until well.
" if(M.getBrainLoss() >= 1) - dat += "Brain damage - Commence brain repair surgery, apply Alkysine, or universal organ-repair chemicals. (i.e. Peridaxon).
" + dat += span_bold("Brain damage") + " - Commence brain repair surgery, apply Alkysine, or universal organ-repair chemicals. (i.e. Peridaxon).
" if(M.radiation || M.accumulated_rads) - dat += "Radiation - Give Hyronalin or Arithrazine. Monitor for genetic damage.
" + dat += span_bold("Radiation") + " - Give Hyronalin or Arithrazine. Monitor for genetic damage.
" if(organ) - dat += "Organ damage - Give Peridaxon. Perform full body scan for targeted organ repair surgery.
" + dat += span_bold("Organ damage") + " - Give Peridaxon. Perform full body scan for targeted organ repair surgery.
" if(bloodloss) - dat += "Low blood volume - Commence blood transfusion via IV drip or provide blood-restorative chemicals (e.g.: Copper for zorren and skrell, iron for the rest)." + dat += span_bold("Low blood volume") + " - Commence blood transfusion via IV drip or provide blood-restorative chemicals (e.g.: Copper for zorren and skrell, iron for the rest)." if(M.getToxLoss()) - dat += "Toxins - Give Dylovene or Carthatoline. Vomitting is normal and helpful. Tends to be a symptom of larger issues, such as infection.
" + dat += span_bold("Toxins") + " - Give Dylovene or Carthatoline. Vomitting is normal and helpful. Tends to be a symptom of larger issues, such as infection.
" if(M.getBruteLoss()) - dat += "Brute trauma - Bandage wounded body part. Give Bicaridine or Vermicetol.
" + dat += span_bold("Brute trauma") + " - Bandage wounded body part. Give Bicaridine or Vermicetol.
" if(M.getFireLoss()) - dat += "Surface burn - Salve wounded body part in ointment. Give Kelotane or Dermaline. Check for infections.
" + dat += span_bold("Surface burn") + " - Salve wounded body part in ointment. Give Kelotane or Dermaline. Check for infections.
" if(M.getCloneLoss()) - dat += "Genetic damage - Utilize cryogenic pod with appropriate chemicals (i.e. Cryoxadone) and below 70 K, or give Rezadone.
" + dat += span_bold("Genetic damage") + " - Utilize cryogenic pod with appropriate chemicals (i.e. Cryoxadone) and below 70 K, or give Rezadone.
" if(bone) - dat += "Bone fracture - Splint damaged area. Treat with bone repair surgery or Osteodaxon after treating brute damage.
" + dat += span_bold("Bone fracture") + " - Splint damaged area. Treat with bone repair surgery or Osteodaxon after treating brute damage.
" if(M.virus2.len) - dat += "Viral infection - Proceed with virology pathogen curing procedures or apply antiviral chemicals (i.e. Corophizine).
" + dat += span_bold("Viral infection") + " - Proceed with virology pathogen curing procedures or apply antiviral chemicals (i.e. Corophizine).
" if(robotparts) - dat += "Robotic body parts - Should not be repaired by medical personnel, refer to robotics if damaged." + dat += span_bold("Robotic body parts") + " - Should not be repaired by medical personnel, refer to robotics if damaged." var/peeb if(dat) - peeb +="GUIDANCE SYSTEM BEGIN
" + peeb += span_boldnotice("GUIDANCE SYSTEM BEGIN") + peeb +="
" peeb += dat peeb += span_notice("For more detailed information about patient condition, use the stationary scanner in medbay.") diff --git a/code/game/objects/items/devices/scanners/health.dm b/code/game/objects/items/devices/scanners/health.dm index 4300d620a0e..ec9a6b257ce 100644 --- a/code/game/objects/items/devices/scanners/health.dm +++ b/code/game/objects/items/devices/scanners/health.dm @@ -62,38 +62,43 @@ if (!ishuman(M) || M.isSynthetic()) //these sensors are designed for organic life - dat += "Analyzing Results for ERROR:\n\tOverall Status: ERROR
" - dat += "\tKey: [span_cyan("Suffocation")]/[span_green("Toxin")]/[span_orange("Burns")]/[span_red("Brute")]
" - dat += "\tDamage Specifics: [span_cyan("?")] - [span_green("?")] - [span_orange("?")] - [span_red("?")]
" - dat += "Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)

" + var/analyzed = "Analyzing Results for ERROR:\n\tOverall Status: ERROR
" + analyzed += "\tKey: [span_cyan("Suffocation")]/[span_green("Toxin")]/[span_orange("Burns")]/[span_red("Brute")]
" + analyzed += "\tDamage Specifics: [span_cyan("?")] - [span_green("?")] - [span_orange("?")] - [span_red("?")]
" + analyzed += "Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)" + dat += span_notice(analyzed) + "
" dat += "[span_warning("Warning: Blood Level ERROR: --% --cl.")] [span_notice("Type: ERROR")]
" dat += span_notice("Subject's pulse: [span_red("-- bpm.")]") user.show_message(dat, 1) return var/fake_oxy = max(rand(1,40), M.getOxyLoss(), (300 - (M.getToxLoss() + M.getFireLoss() + M.getBruteLoss()))) - var/OX = M.getOxyLoss() > 50 ? "[M.getOxyLoss()]" : M.getOxyLoss() - var/TX = M.getToxLoss() > 50 ? "[M.getToxLoss()]" : M.getToxLoss() - var/BU = M.getFireLoss() > 50 ? "[M.getFireLoss()]" : M.getFireLoss() - var/BR = M.getBruteLoss() > 50 ? "[M.getBruteLoss()]" : M.getBruteLoss() + var/OX = M.getOxyLoss() > 50 ? span_bold("[M.getOxyLoss()]") : M.getOxyLoss() + var/TX = M.getToxLoss() > 50 ? span_bold("[M.getToxLoss()]") : M.getToxLoss() + var/BU = M.getFireLoss() > 50 ? span_bold("[M.getFireLoss()]") : M.getFireLoss() + var/BR = M.getBruteLoss() > 50 ? span_bold("[M.getBruteLoss()]") : M.getBruteLoss() + var/analyzed_results = "" if(M.status_flags & FAKEDEATH) - OX = fake_oxy > 50 ? "[fake_oxy]" : fake_oxy + OX = fake_oxy > 50 ? span_bold("[fake_oxy]") : fake_oxy dat += span_notice("Analyzing Results for [M]:") dat += "
" dat += span_notice("Overall Status: dead") dat += "
" else - dat += "Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "dead" : "[round((M.health/M.getMaxHealth())*100) ]% healthy"]
" - dat += "\tKey: [span_cyan("Suffocation")]/[span_green("Toxin")]/[span_orange("Burns")]/[span_red("Brute")]
" - dat += "\tDamage Specifics: [span_cyan("[OX]")] - [span_green("[TX]")] - [span_orange("[BU]")] - [span_red("[BR]")]
" - dat += "Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)

" + analyzed_results += "Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "dead" : "[round((M.health/M.getMaxHealth())*100) ]% healthy"]
" + analyzed_results += "\tKey: [span_cyan("Suffocation")]/[span_green("Toxin")]/[span_orange("Burns")]/[span_red("Brute")]
" + analyzed_results += "\tDamage Specifics: [span_cyan("[OX]")] - [span_green("[TX]")] - [span_orange("[BU]")] - [span_red("[BR]")]
" + analyzed_results += "Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)
" + if(!(M.status_flags & FAKEDEATH)) + analyzed_results = span_notice(analyzed_results) + dat += analyzed_results //VOREStation edit/addition starts if(M.timeofdeath && (M.stat == DEAD || (M.status_flags & FAKEDEATH))) dat += span_notice("Time of Death: [worldtime2stationtime(M.timeofdeath)]") dat += "
" var/tdelta = round(world.time - M.timeofdeath) if(tdelta < (DEFIB_TIME_LIMIT * 10)) - dat += span_notice("Subject died [DisplayTimeText(tdelta)] ago - resuscitation may be possible!") + dat += span_boldnotice("Subject died [DisplayTimeText(tdelta)] ago - resuscitation may be possible!") dat += "
" //VOREStation edit/addition ends if(istype(M, /mob/living/carbon/human) && mode == 1) @@ -106,17 +111,18 @@ if(org.robotic >= ORGAN_ROBOT) continue else - dat += " [capitalize(org.name)]: [(org.brute_dam > 0) ? span_warning("[org.brute_dam]") : 0]" - dat += "[(org.status & ORGAN_BLEEDING)?span_danger("\[Bleeding\]"):""] - " - dat += "[(org.burn_dam > 0) ? "[span_orange("[org.burn_dam]")]" : 0]
" + var/our_damage = " [capitalize(org.name)]: [(org.brute_dam > 0) ? span_warning("[org.brute_dam]") : 0]" + our_damage += "[(org.status & ORGAN_BLEEDING)?span_danger("\[Bleeding\]"):""] - " + our_damage += "[(org.burn_dam > 0) ? "[span_orange("[org.burn_dam]")]" : 0]" + dat += span_notice(our_damage) + "
" else dat += span_notice(" Limbs are OK.") dat += "
" - OX = M.getOxyLoss() > 50 ? "[span_cyan("Severe oxygen deprivation detected")]" : "Subject bloodstream oxygen level normal" - TX = M.getToxLoss() > 50 ? "[span_green("Dangerous amount of toxins detected")]" : "Subject bloodstream toxin level minimal" - BU = M.getFireLoss() > 50 ? "[span_orange("Severe burn damage detected")]" : "Subject burn injury status O.K" - BR = M.getBruteLoss() > 50 ? "[span_red("Severe anatomical damage detected")]" : "Subject brute-force injury status O.K" + OX = M.getOxyLoss() > 50 ? "[span_cyan(span_bold("Severe oxygen deprivation detected"))]" : "Subject bloodstream oxygen level normal" + TX = M.getToxLoss() > 50 ? "[span_green(span_bold("Dangerous amount of toxins detected"))]" : "Subject bloodstream toxin level minimal" + BU = M.getFireLoss() > 50 ? "[span_orange(span_bold("Severe burn damage detected"))]" : "Subject burn injury status O.K" + BR = M.getBruteLoss() > 50 ? "[span_red(span_bold("Severe anatomical damage detected"))]" : "Subject brute-force injury status O.K" if(M.status_flags & FAKEDEATH) OX = fake_oxy > 50 ? span_warning("Severe oxygen deprivation detected") : "Subject bloodstream oxygen level normal" dat += "[OX] | [TX] | [BU] | [BR]
" @@ -358,10 +364,10 @@ var/blood_type = H.dna.b_type var/blood_reagent = H.species.blood_reagents if(blood_volume <= H.species.blood_volume*H.species.blood_level_danger) - dat += span_danger("Warning: Blood Level CRITICAL: [blood_percent]% [blood_volume]cl. Type: [blood_type]. Basis: [blood_reagent].") + dat += span_danger(span_italics("Warning: Blood Level CRITICAL: [blood_percent]% [blood_volume]cl. Type: [blood_type]. Basis: [blood_reagent].")) dat += "
" else if(blood_volume <= H.species.blood_volume*H.species.blood_level_warning) - dat += span_danger("Warning: Blood Level VERY LOW: [blood_percent]% [blood_volume]cl. Type: [blood_type]. Basis: [blood_reagent].") + dat += span_danger(span_italics("Warning: Blood Level VERY LOW: [blood_percent]% [blood_volume]cl. Type: [blood_type]. Basis: [blood_reagent].")) dat += "
" else if(blood_volume <= H.species.blood_volume*H.species.blood_level_safe) dat += span_danger("Warning: Blood Level LOW: [blood_percent]% [blood_volume]cl. Type: [blood_type]. Basis: [blood_reagent].") diff --git a/code/game/objects/items/devices/scanners/sleevemate.dm b/code/game/objects/items/devices/scanners/sleevemate.dm index 40e2244c545..fc5e0b0e8bc 100644 --- a/code/game/objects/items/devices/scanners/sleevemate.dm +++ b/code/game/objects/items/devices/scanners/sleevemate.dm @@ -107,40 +107,40 @@ var/global/mob/living/carbon/human/dummy/mannequin/sleevemate_mob /obj/item/sleevemate/proc/scan_mob(mob/living/carbon/human/H, mob/living/user) var/output = "" - output += "

[src.name] Scan Results
" + output += "

" + span_boldnotice("[src.name] Scan Results") + "
" //Mind name - output += "Sleeved Mind: " + output += span_bold("Sleeved Mind:") + " " if(H.mind) output += "[H.mind.name]
" else - output += "Unknown/None
" + output += span_warning("Unknown/None") + "
" //Mind status - output += "Mind Status: " + output += span_bold("Mind Status:") + " " if(H.client) output += "Healthy
" else output += "Space Sleep Disorder
" //Body status - output += "Sleeve Status: " + output += span_bold("Sleeve Status:") + " " switch(H.stat) if(CONSCIOUS) output += "Alive
" if(UNCONSCIOUS) output += "Unconscious
" if(DEAD) - output += "Deceased
" + output += span_warning("Deceased") + "
" else - output += "Unknown
" + output += span_warning("Unknown") + "
" //Mind/body comparison - output += "Sleeve Pair: " + output += span_bold("Sleeve Pair:") if(!H.ckey) - output += "No mind in that body [stored_mind != null ? "\[Upload\]" : null]
" + output += span_warning("No mind in that body") + " [stored_mind != null ? "\[Upload\]" : null]
" else if(H.mind && ckey(H.mind.key) != H.ckey) - output += "May not be correct body
" + output += span_warning("May not be correct body") + "
" else if(H.mind && ckey(H.mind.key) == H.ckey) output += "Appears to be correct mind in body
" else @@ -148,29 +148,29 @@ var/global/mob/living/carbon/human/dummy/mannequin/sleevemate_mob //Actions output += "
-- Possible Actions --
" - output += "Mind-Scan (One Time): \[Perform\]
" - output += "Body-Scan (One Time): \[Perform\]
" + output += span_bold("Mind-Scan (One Time): ") + "\[Perform\]
" + output += span_bold("Body-Scan (One Time): ") + "\[Perform\]
" //Saving a mind - output += "Store Full Mind: " + output += span_bold("Store Full Mind:") + " " if(stored_mind) - output += "Already Stored ([stored_mind.name])
" + output += span_notice("Already Stored") + " ([stored_mind.name])
" else if(H.mind) output += "\[Perform\]
" else - output += "Unable
" + output += span_warning("Unable") + "
" //Soulcatcher transfer if(H.nif) var/datum/nifsoft/soulcatcher/SC = H.nif.imp_check(NIF_SOULCATCHER) if(SC) output += "
" - output += "Soulcatcher detected ([SC.brainmobs.len] minds)
" + output += span_bold("Soulcatcher detected ([SC.brainmobs.len] minds)") + "
" for(var/mob/living/carbon/brain/caught_soul/mind in SC.brainmobs) output += "[mind.name]: [mind.transient == FALSE ? "\[Load\]" : span_warning("Incompatible")]
" if(stored_mind) - output += "Store in Soulcatcher: \[Perform\]
" + output += span_bold("Store in Soulcatcher: ") + "\[Perform\]
" to_chat(user,output) diff --git a/code/game/objects/items/devices/scanners/slime.dm b/code/game/objects/items/devices/scanners/slime.dm index 57931f22e00..21c44a85b09 100644 --- a/code/game/objects/items/devices/scanners/slime.dm +++ b/code/game/objects/items/devices/scanners/slime.dm @@ -14,7 +14,7 @@ /obj/item/slime_scanner/attack(mob/living/M as mob, mob/living/user as mob) if(!istype(M, /mob/living/simple_mob/slime/xenobio)) - to_chat(user, "This device can only scan lab-grown slimes!") + to_chat(user, span_infoplain(span_bold("This device can only scan lab-grown slimes!"))) return var/mob/living/simple_mob/slime/xenobio/S = M user.show_message("Slime scan results:
[S.slime_color] [S.is_adult ? "adult" : "baby"] slime
Health: [S.health]
Mutation Probability: [S.mutation_chance]") diff --git a/code/game/objects/items/devices/spy_bug.dm b/code/game/objects/items/devices/spy_bug.dm index 3d6c8c3acdf..4e347a328e4 100644 --- a/code/game/objects/items/devices/spy_bug.dm +++ b/code/game/objects/items/devices/spy_bug.dm @@ -28,7 +28,7 @@ /obj/item/camerabug/attack_self(mob/user) if(user.a_intent == I_HURT) to_chat(user, span_notice("You crush the [src] under your foot, breaking it.")) - visible_message("[user.name] crushes the [src] under their foot, breaking it!") + visible_message(span_notice("[user.name] crushes the [src] under their foot, breaking it!")) new brokentype(get_turf(src)) spawn(0) qdel(src) @@ -44,7 +44,7 @@ linkedmonitor = null qdel(camera) camera = new camtype(src) - to_chat(usr, "You turn the [src] off and on again, delinking it from any monitors.") + to_chat(usr, span_notice("You turn the [src] off and on again, delinking it from any monitors.")) /obj/item/brokenbug name = "broken mobile camera pod" diff --git a/code/game/objects/items/devices/suit_cooling.dm b/code/game/objects/items/devices/suit_cooling.dm index 57115dc6de9..f49036b0d24 100644 --- a/code/game/objects/items/devices/suit_cooling.dm +++ b/code/game/objects/items/devices/suit_cooling.dm @@ -12,7 +12,7 @@ throwforce = 10.0 throw_speed = 1 throw_range = 4 - action_button_name = "Toggle Heatsink" + actions_types = list(/datum/action/item_action/toggle_heatsink) matter = list(MAT_STEEL = 15000, MAT_GLASS = 3500) origin_tech = list(TECH_MAGNET = 2, TECH_MATERIAL = 2) @@ -28,8 +28,8 @@ //TODO: make it heat up the surroundings when not in space -/obj/item/suit_cooling_unit/ui_action_click() - toggle(usr) +/obj/item/suit_cooling_unit/ui_action_click(mob/user, actiontype) + toggle(user) /obj/item/suit_cooling_unit/Initialize() . = ..() diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 0f63137dc75..aed0b996bde 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -262,13 +262,13 @@ var/playedmessage = mytape.storedinfo[i] if (findtextEx(playedmessage,"*",1,2)) //remove marker for action sounds playedmessage = copytext(playedmessage,2) - T.audible_message(span_maroon("Tape Recorder: [playedmessage]"), runemessage = playedmessage) + T.audible_message(span_maroon(span_bold("Tape Recorder") + ": [playedmessage]"), runemessage = playedmessage) if(mytape.storedinfo.len < i+1) playsleepseconds = 1 sleep(10) T = get_turf(src) - T.audible_message(span_maroon("Tape Recorder: End of recording."), runemessage = "click") + T.audible_message(span_maroon(span_bold("Tape Recorder") + ": End of recording."), runemessage = "click") break else playsleepseconds = mytape.timestamp[i+1] - mytape.timestamp[i] @@ -276,7 +276,7 @@ if(playsleepseconds > 14) sleep(10) T = get_turf(src) - T.audible_message(span_maroon("Tape Recorder: Skipping [playsleepseconds] seconds of silence"), runemessage = "tape winding") + T.audible_message(span_maroon(span_bold("Tape Recorder") + ": Skipping [playsleepseconds] seconds of silence"), runemessage = "tape winding") playsleepseconds = 1 sleep(10 * playsleepseconds) @@ -286,19 +286,19 @@ if(emagged) var/turf/T = get_turf(src) - T.audible_message(span_maroon("Tape Recorder: This tape recorder will self-destruct in... Five."), runemessage = "beep beep") + T.audible_message(span_maroon(span_bold("Tape Recorder") + ": This tape recorder will self-destruct in... Five."), runemessage = "beep beep") sleep(10) T = get_turf(src) - T.audible_message(span_maroon("Tape Recorder: Four.")) + T.audible_message(span_maroon(span_bold("Tape Recorder") + ": Four.")) sleep(10) T = get_turf(src) - T.audible_message(span_maroon("Tape Recorder: Three.")) + T.audible_message(span_maroon(span_bold("Tape Recorder") + ": Three.")) sleep(10) T = get_turf(src) - T.audible_message(span_maroon("Tape Recorder: Two.")) + T.audible_message(span_maroon(span_bold("Tape Recorder") + ": Two.")) sleep(10) T = get_turf(src) - T.audible_message(span_maroon("Tape Recorder: One.")) + T.audible_message(span_maroon(span_bold("Tape Recorder") + ": One.")) sleep(10) explode() @@ -327,7 +327,7 @@ to_chat(usr, span_notice("Transcript printed.")) var/obj/item/paper/P = new /obj/item/paper(get_turf(src)) - var/t1 = "Transcript:

" + var/t1 = span_bold("Transcript:") + "

" for(var/i=1,mytape.storedinfo.len >= i,i++) var/printedmessage = mytape.storedinfo[i] if (findtextEx(printedmessage,"*",1,2)) //replace action sounds diff --git a/code/game/objects/items/devices/ticket_printer.dm b/code/game/objects/items/devices/ticket_printer.dm index 1477af63d46..b4b8ec41853 100644 --- a/code/game/objects/items/devices/ticket_printer.dm +++ b/code/game/objects/items/devices/ticket_printer.dm @@ -14,7 +14,7 @@ if(last_print + print_cooldown <= world.time) print_a_ticket(user) else - to_chat(user, "\The [src] is not ready to print another ticket yet.") + to_chat(user, span_warning("\The [src] is not ready to print another ticket yet.")) /obj/item/ticket_printer/proc/print_a_ticket(mob/user) diff --git a/code/game/objects/items/devices/translator.dm b/code/game/objects/items/devices/translator.dm index e3566904116..d12a28bad70 100644 --- a/code/game/objects/items/devices/translator.dm +++ b/code/game/objects/items/devices/translator.dm @@ -73,7 +73,7 @@ if(!L.say_understands(null, langset)) new_message = langset.scramble(new_message) - to_chat(L, span_filter_say("[src] translates, \"[new_message]\"")) + to_chat(L, span_filter_say(span_italics(span_bold("[src]") + "translates, ") + " \"[new_message]\"")) /obj/item/universal_translator/proc/user_understands(mob/M, mob/living/L, list/message_pieces) for(var/datum/multilingual_say_piece/S in message_pieces) diff --git a/code/game/objects/items/devices/tvcamera.dm b/code/game/objects/items/devices/tvcamera.dm index 48f7f78d269..8c92ce3012f 100644 --- a/code/game/objects/items/devices/tvcamera.dm +++ b/code/game/objects/items/devices/tvcamera.dm @@ -123,7 +123,7 @@ . = ..() if(camera.status && !isturf(target)) show_tvs(target) - user.visible_message("[user] aims [src] at [target].", "You aim [src] at [target].") + user.visible_message(span_infoplain(span_bold("[user]") + " aims [src] at [target]."), span_info("You aim [src] at [target].")) if(user.machine == src) show_ui(user) // refresh the UI diff --git a/code/game/objects/items/poi_items.dm b/code/game/objects/items/poi_items.dm index 99a2964aef8..510eebf0701 100644 --- a/code/game/objects/items/poi_items.dm +++ b/code/game/objects/items/poi_items.dm @@ -170,11 +170,11 @@ to_chat(user, span_notice("You cannot access the debug interface with the panel screwed on!")) else if(unscrewed && !wirecutted) message_turf.audible_message(message = examine_multitool, - deaf_message = "[src] flashes red repeatedly", runemessage= "Beep! Beep!") + deaf_message = span_bold("[src]") + " flashes red repeatedly", runemessage= "Beep! Beep!") to_chat(user, span_warning("The components spark from the multitool's unregulated pulse. \ Perhaps it'd been better to use more sophisticated tools...")) fried = TRUE - message_turf.visible_message(message = "[src] FLASHES VIOLENTLY!", + message_turf.visible_message(message = span_bold("[src]") + " FLASHES VIOLENTLY!", blind_message = "ZAP!", runemessage = "CRACKLE!") var/used_hand = user.get_organ(user.get_active_hand()) user.electrocute_act(10,def_zone = used_hand) @@ -192,13 +192,13 @@ Perhaps, it would've been a good idea to disconnect some wires while pulsing the security circuit...")) else if(!has_paper) - message_turf.visible_message(message = "[src] displays, 'PAPER NOT BIN'", + message_turf.visible_message(message = span_bold("[src]") + " displays, 'PAPER NOT BIN'", blind_message = "you hear VERY ANGRY beeping.", runemessage = "BEEP BEEP!") - message_turf.audible_message(message = "[src] recites, \n '[examine_canalyzer]'", - deaf_message = "[src] flashes green!", runemessage= "Ping!") + message_turf.audible_message(message = span_bold("[src]") + " recites, \n '[examine_canalyzer]'", + deaf_message = span_bold("[src]") + " flashes green!", runemessage= "Ping!") else - message_turf.audible_message(message = "[src] rattles loudly as it prints", - deaf_message = "[src] flashes green!", runemessage= "RATTLE RATTLE") + message_turf.audible_message(message = span_bold("[src]") + " rattles loudly as it prints", + deaf_message = span_bold("[src]") + " flashes green!", runemessage= "RATTLE RATTLE") var/obj/item/paper/P = new /obj/item/paper(get_turf(src)) P.name = "[drone_name] blackbox transcript" P.info = "[examine_canalyzer_printed ? examine_canalyzer_printed : examine_canalyzer]" diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index ed8f10ea8c9..3fb0b42893a 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -119,7 +119,7 @@ to_chat(usr, "It'd be unwise to plug another vtec module in!") return 0 - R.verbs += /mob/living/silicon/robot/proc/toggle_vtec + add_verb(R, /mob/living/silicon/robot/proc/toggle_vtec) R.vtec_active = TRUE R.hud_used.toggle_vtec_control() return 1 @@ -139,7 +139,7 @@ to_chat(usr, "There's no space for another size alteration module!") return 0 - R.verbs += /mob/living/proc/set_size + add_verb(R, /mob/living/proc/set_size) return 1 /obj/item/borg/upgrade/basic/syndicate diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 0e62e32f095..4d7265f2339 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -107,8 +107,8 @@ return 1 else var/available = get_amount() - user.visible_message("\The [user] starts bandaging [M]'s [affecting.name].", \ - span_notice("You start bandaging [M]'s [affecting.name].") ) + user.visible_message(span_infoplain(span_bold("\The [user]") + " starts bandaging [M]'s [affecting.name]."), \ + span_notice("You start bandaging [M]'s [affecting.name].")) var/used = 0 for (var/datum/wound/W in affecting.wounds) if(W.internal) @@ -130,11 +130,11 @@ break if (W.current_stage <= W.max_bleeding_stage) - user.visible_message("\The [user] bandages \a [W.desc] on [M]'s [affecting.name].", \ - span_notice("You bandage \a [W.desc] on [M]'s [affecting.name].") ) + user.visible_message(span_infoplain(span_bold("\The [user]") + " bandages \a [W.desc] on [M]'s [affecting.name]."), \ + span_notice("You bandage \a [W.desc] on [M]'s [affecting.name].")) else - user.visible_message("\The [user] places a bandage over \a [W.desc] on [M]'s [affecting.name].", \ - span_notice("You place a bandage over \a [W.desc] on [M]'s [affecting.name].") ) + user.visible_message(span_infoplain(span_bold("\The [user]") + " places a bandage over \a [W.desc] on [M]'s [affecting.name]."), \ + span_notice("You place a bandage over \a [W.desc] on [M]'s [affecting.name].")) W.bandage() playsound(src, pick(apply_sounds), 25) used++ @@ -176,8 +176,8 @@ return 1 else var/available = get_amount() - user.visible_message("\The [user] starts treating [M]'s [affecting.name].", \ - span_notice("You start treating [M]'s [affecting.name].") ) + user.visible_message(span_infoplain(span_bold("\The [user]") + " starts treating [M]'s [affecting.name]."), \ + span_notice("You start treating [M]'s [affecting.name].")) var/used = 0 for (var/datum/wound/W in affecting.wounds) if (W.internal) @@ -199,15 +199,15 @@ break if (W.current_stage <= W.max_bleeding_stage) - user.visible_message("\The [user] bandages \a [W.desc] on [M]'s [affecting.name].", \ - span_notice("You bandage \a [W.desc] on [M]'s [affecting.name].") ) + user.visible_message(span_infoplain(span_bold("\The [user]") + " bandages \a [W.desc] on [M]'s [affecting.name]."), \ + span_notice("You bandage \a [W.desc] on [M]'s [affecting.name].")) //H.add_side_effect("Itch") else if (W.damage_type == BRUISE) - user.visible_message("\The [user] places a bruise patch over \a [W.desc] on [M]'s [affecting.name].", \ - span_notice("You place a bruise patch over \a [W.desc] on [M]'s [affecting.name].") ) + user.visible_message(span_infoplain(span_bold("\The [user]") + " places a bruise patch over \a [W.desc] on [M]'s [affecting.name]."), \ + span_notice("You place a bruise patch over \a [W.desc] on [M]'s [affecting.name].")) else - user.visible_message("\The [user] places a bandaid over \a [W.desc] on [M]'s [affecting.name].", \ - span_notice("You place a bandaid over \a [W.desc] on [M]'s [affecting.name].") ) + user.visible_message(span_infoplain(span_bold("\The [user]") + " places a bandaid over \a [W.desc] on [M]'s [affecting.name]."), \ + span_notice("You place a bandaid over \a [W.desc] on [M]'s [affecting.name].")) W.bandage() // W.disinfect() // VOREStation - Tech1 should not disinfect playsound(src, pick(apply_sounds), 25) @@ -249,7 +249,7 @@ to_chat(user, span_warning("The wounds on [M]'s [affecting.name] have already been salved.")) return 1 else - user.visible_message("\The [user] starts salving wounds on [M]'s [affecting.name].", \ + user.visible_message(span_infoplain(span_bold("\The [user]") + " starts salving wounds on [M]'s [affecting.name]."), \ span_notice("You start salving the wounds on [M]'s [affecting.name].") ) if(!do_mob(user, M, 10, exclusive = TRUE)) to_chat(user, span_notice("You must stand still to salve wounds.")) @@ -295,7 +295,7 @@ return 1 else var/available = get_amount() - user.visible_message("\The [user] starts treating [M]'s [affecting.name].", \ + user.visible_message(span_infoplain(span_bold("\The [user]") + " starts treating [M]'s [affecting.name]."), \ span_notice("You start treating [M]'s [affecting.name].") ) var/used = 0 for (var/datum/wound/W in affecting.wounds) @@ -317,13 +317,13 @@ break if (W.current_stage <= W.max_bleeding_stage) - user.visible_message("\The [user] cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.", \ + user.visible_message(span_infoplain(span_bold("\The [user]") + " cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue."), \ span_notice("You clean and seal \a [W.desc] on [M]'s [affecting.name].") ) else if (W.damage_type == BRUISE) - user.visible_message("\The [user] places a medical patch over \a [W.desc] on [M]'s [affecting.name].", \ + user.visible_message(span_infoplain(span_bold("\The [user]") + " places a medical patch over \a [W.desc] on [M]'s [affecting.name]."), \ span_notice("You place a medical patch over \a [W.desc] on [M]'s [affecting.name].") ) else - user.visible_message("\The [user] smears some bioglue over \a [W.desc] on [M]'s [affecting.name].", \ + user.visible_message(span_infoplain(span_bold("\The [user]") + " smears some bioglue over \a [W.desc] on [M]'s [affecting.name]."), \ span_notice("You smear some bioglue over \a [W.desc] on [M]'s [affecting.name].") ) W.bandage() W.disinfect() @@ -363,7 +363,7 @@ to_chat(user, span_warning("The wounds on [M]'s [affecting.name] have already been salved.")) return 1 else - user.visible_message("\The [user] starts salving wounds on [M]'s [affecting.name].", \ + user.visible_message(span_infoplain(span_bold("\The [user]") + " starts salving wounds on [M]'s [affecting.name]."), \ span_notice("You start salving the wounds on [M]'s [affecting.name].") ) if(!do_mob(user, M, 10, exclusive = TRUE)) to_chat(user, span_notice("You must stand still to salve wounds.")) diff --git a/code/game/objects/items/stacks/medical_vr.dm b/code/game/objects/items/stacks/medical_vr.dm index a7e5012e5e4..3cc7e2254c4 100644 --- a/code/game/objects/items/stacks/medical_vr.dm +++ b/code/game/objects/items/stacks/medical_vr.dm @@ -63,7 +63,7 @@ var/healmessage = span_notice("You spray [src] onto [H], sealing [clotted ? clotted : "no"] wounds.") if(too_far_gone) - healmessage += " You can see some wounds that are too large where the spray is not taking effect." + healmessage += " " + span_warning("You can see some wounds that are too large where the spray is not taking effect.") to_chat(user, healmessage) use(1) diff --git a/code/game/objects/items/toys/mech_toys.dm b/code/game/objects/items/toys/mech_toys.dm index a6ca3ed1efa..7fb8d8af50d 100644 --- a/code/game/objects/items/toys/mech_toys.dm +++ b/code/game/objects/items/toys/mech_toys.dm @@ -168,7 +168,7 @@ //extend the offer of battle to the other mech var/datum/gender/T = gender_datums[user.get_visible_gender()] to_chat(user, span_notice("You offer battle to [target.name]!")) - to_chat(target, span_notice("[user.name] wants to battle with [T.His] [name]! Attack them with a toy mech to initiate combat.")) + to_chat(target, span_notice(span_bold("[user.name] wants to battle with [T.His] [name]!") + " " + span_italics("Attack them with a toy mech to initiate combat."))) wants_to_battle = TRUE addtimer(CALLBACK(src, PROC_REF(withdraw_offer), user), 6 SECONDS) return @@ -365,7 +365,7 @@ span_notice(" [src] collapses!"), null) attacker.visible_message("[pick(winlines)]") attacker_controller.visible_message(span_notice(" [attacker] demolishes [src] and walks away victorious!"), \ - " You raise up [attacker] proudly over [src]!") + span_notice("You raise up [attacker] proudly over [src]") + "!") else //both win? visible_message("NEXT TIME.") //don't want to make this a one sided conversation diff --git a/code/game/objects/items/toys/toys.dm b/code/game/objects/items/toys/toys.dm index 62b1744baba..0aab2540071 100644 --- a/code/game/objects/items/toys/toys.dm +++ b/code/game/objects/items/toys/toys.dm @@ -706,9 +706,9 @@ /obj/structure/plushie/examine(mob/user) . = ..() if(opened) - . += "You notice an incision has been made on [src]." + . += span_italics("You notice an incision has been made on [src].") if(in_range(user, src) && stored_item) - . += "You can see something in there..." + . += span_italics("You can see something in there...") /obj/structure/plushie/attack_hand(mob/user) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) @@ -725,13 +725,13 @@ searching = FALSE if(user.a_intent == I_HELP) - user.visible_message(span_notice("\The [user] hugs [src]!"),span_notice("You hug [src]!")) + user.visible_message(span_notice(span_bold("\The [user]") + " hugs [src]!"),span_notice("You hug [src]!")) else if (user.a_intent == I_HURT) - user.visible_message(span_warning("\The [user] punches [src]!"),span_warning("You punch [src]!")) + user.visible_message(span_warning(span_bold("\The [user]") + " punches [src]!"),span_warning("You punch [src]!")) else if (user.a_intent == I_GRAB) - user.visible_message(span_warning("\The [user] attempts to strangle [src]!"),span_warning("You attempt to strangle [src]!")) + user.visible_message(span_warning(span_bold("\The [user]") + " attempts to strangle [src]!"),span_warning("You attempt to strangle [src]!")) else - user.visible_message(span_notice("\The [user] pokes the [src]."),span_notice("You poke the [src].")) + user.visible_message(span_notice(span_bold("\The [user]") + " pokes the [src]."),span_notice("You poke the [src].")) visible_message("[src] says, \"[phrase]\"") @@ -805,9 +805,9 @@ /obj/item/toy/plushie/examine(mob/user) . = ..() if(opened) - . += "You notice an incision has been made on [src]." + . += span_italics("You notice an incision has been made on [src].") if(in_range(user, src) && stored_item) - . += "You can see something in there..." + . += span_italics("You can see something in there...") /obj/item/toy/plushie/attack_self(mob/user as mob) if(stored_item && opened && !searching) @@ -824,13 +824,13 @@ if(world.time - last_message <= 15 SECONDS) return if(user.a_intent == I_HELP) - user.visible_message(span_notice("\The [user] hugs [src]!"),span_notice("You hug [src]!")) + user.visible_message(span_notice(span_bold("\The [user]") + " hugs [src]!"),span_notice("You hug [src]!")) else if (user.a_intent == I_HURT) - user.visible_message(span_warning("\The [user] punches [src]!"),span_warning("You punch [src]!")) + user.visible_message(span_warning(span_bold("\The [user]") + " punches [src]!"),span_warning("You punch [src]!")) else if (user.a_intent == I_GRAB) - user.visible_message(span_warning("\The [user] attempts to strangle [src]!"),span_warning("You attempt to strangle [src]!")) + user.visible_message(span_warning(span_bold("\The [user]") + " attempts to strangle [src]!"),span_warning("You attempt to strangle [src]!")) else - user.visible_message(span_notice("\The [user] pokes [src]."),span_notice("You poke [src].")) + user.visible_message(span_notice(span_bold("\The [user]") + " pokes [src]."),span_notice("You poke [src].")) playsound(src, 'sound/items/drop/plushie.ogg', 25, 0) visible_message("[src] says, \"[pokephrase]\"") last_message = world.time @@ -1418,13 +1418,13 @@ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) if(user.a_intent == I_HELP) - user.visible_message(span_notice("\The [user] pokes [src]!"),span_notice("You poke [src]!")) + user.visible_message(span_notice(span_bold("\The [user]") + " pokes [src]!"),span_notice("You poke [src]!")) else if (user.a_intent == I_HURT) - user.visible_message(span_warning("\The [user] punches [src]!"),span_warning("You punch [src]!")) + user.visible_message(span_warning(span_bold("\The [user]") + " punches [src]!"),span_warning("You punch [src]!")) else if (user.a_intent == I_GRAB) - user.visible_message(span_warning("\The [user] attempts to pop [src]!"),span_warning("You attempt to pop [src]!")) + user.visible_message(span_warning(span_bold("\The [user]") + " attempts to pop [src]!"),span_warning("You attempt to pop [src]!")) else - user.visible_message(span_notice("\The [user] lightly bats the [src]."),span_notice("You lightly bat the [src].")) + user.visible_message(span_notice(span_bold("\The [user]") + " lightly bats the [src]."),span_notice("You lightly bat the [src].")) /obj/structure/balloon/bat name = "giant bat balloon" diff --git a/code/game/objects/items/toys/toys_vr.dm b/code/game/objects/items/toys/toys_vr.dm index 0ce10c51ddf..b6df0bcafd8 100644 --- a/code/game/objects/items/toys/toys_vr.dm +++ b/code/game/objects/items/toys/toys_vr.dm @@ -435,7 +435,7 @@ /obj/item/toy/chewtoy/attack_self(mob/user) playsound(loc, 'sound/items/drop/plushie.ogg', 50, 1) - user.visible_message(span_notice("\The [user] gnaws on [src]!"),span_notice("You gnaw on [src]!")) + user.visible_message(span_notice(span_bold("\The [user]") + " gnaws on [src]!"),span_notice("You gnaw on [src]!")) /* * Cat toys @@ -635,7 +635,7 @@ icon_state = "nuketoyidle" else var/timeleft = (cooldown - world.time) - to_chat(user, span_warning("Nothing happens, and '
[round(timeleft/10)]' appears on a small display.")) + to_chat(user, span_warning("Nothing happens, and") + " '[round(timeleft/10)]' " + span_warning("appears on a small display.")) /obj/item/toy/nuke/attackby(obj/item/I as obj, mob/living/user as mob) if(istype(I, /obj/item/disk/nuclear)) @@ -677,7 +677,7 @@ O.forceMove(src) stored_minature = O else - user.visible_message(span_notice("You stop feeding \the [O] into \the [src]."),"[user] stops feeding \the [O] into \the [src]!/span>") + user.visible_message(span_notice("You stop feeding \the [O] into \the [src]."),span_notice("[user] stops feeding \the [O] into \the [src]!")) else ..() @@ -1174,5 +1174,5 @@ if(M.stat) to_chat(user, span_notice("\The [M] doesn't look like it's any condition to do that.")) return - user.visible_message("\The [user] waves \the [src] in front of the [M]!!") + user.visible_message(span_danger("\The [user] waves \the [src] in front of the [M]!")) M.PounceTarget(user,100) diff --git a/code/game/objects/items/uav.dm b/code/game/objects/items/uav.dm index 9c04ec836a9..2d51474e58b 100644 --- a/code/game/objects/items/uav.dm +++ b/code/game/objects/items/uav.dm @@ -98,7 +98,7 @@ // Can disasemble or reassemble from packed or off (and this one takes time) if("(Dis)Assemble") if(can_transition_to(state == UAV_PACKED ? UAV_OFF : UAV_PACKED, user)) - user.visible_message("[user] starts [state == UAV_PACKED ? "unpacking" : "packing"] [src].", "You start [state == UAV_PACKED ? "unpacking" : "packing"] [src].") + user.visible_message(span_infoplain(span_bold("[user]") + " starts [state == UAV_PACKED ? "unpacking" : "packing"] [src]."), span_info("You start [state == UAV_PACKED ? "unpacking" : "packing"] [src].")) if(do_after(user, 10 SECONDS, src)) return toggle_packed(user) // Can toggle power from on and off @@ -314,21 +314,21 @@ var/mob/master = wr.resolve() var/list/combined = master.combine_message(message_pieces, verb, M) var/message = combined["formatted"] - var/rendered = "UAV received: [name_used] [message]" + var/rendered = span_game(span_say(span_italics("UAV received: " + span_name("[name_used]") + " [message]"))) master.show_message(rendered, 2) /obj/item/uav/see_emote(var/mob/living/M, text) for(var/wr_master in masters) var/datum/weakref/wr = wr_master var/mob/master = wr.resolve() - var/rendered = "UAV received, [text]" + var/rendered = span_game(span_say(span_italics("UAV received, " + span_message("[text]")))) master.show_message(rendered, 2) /obj/item/uav/show_message(msg, type, alt, alt_type) for(var/wr_master in masters) var/datum/weakref/wr = wr_master var/mob/master = wr.resolve() - var/rendered = "UAV received, [msg]" + var/rendered = span_game(span_say(span_italics("UAV received, " + span_message("[msg]")))) master.show_message(rendered, type) /obj/item/uav/take_damage(var/damage) diff --git a/code/game/objects/items/weapons/autopsy.dm b/code/game/objects/items/weapons/autopsy.dm index 7c0ea39efe0..1b9662d7826 100644 --- a/code/game/objects/items/weapons/autopsy.dm +++ b/code/game/objects/items/weapons/autopsy.dm @@ -78,7 +78,7 @@ var/scan_data = "" if(timeofdeath) - scan_data += "Time of death: [worldtime2stationtime(timeofdeath)]

" + scan_data += span_bold("Time of death:") + " [worldtime2stationtime(timeofdeath)]

" var/n = 1 for(var/wdata_idx in wdata) @@ -121,7 +121,7 @@ if(!total_score) total_score = D.organs_scanned.len - scan_data += "Weapon #[n]
" + scan_data += span_bold("Weapon #[n]") + "
" if(damaging_weapon) scan_data += "Severity: [damage_desc]
" scan_data += "Hits by weapon: [total_hits]
" @@ -136,7 +136,7 @@ n++ if(chemtraces.len) - scan_data += "Trace Chemicals:
" + scan_data += span_bold("Trace Chemicals: ") + "
" for(var/chemID in chemtraces) scan_data += chemID scan_data += "
" @@ -177,7 +177,7 @@ if(!S.open) to_chat(user, span_warning("You have to cut [S] open first!")) return - M.visible_message("\The [user] scans the wounds on [M]'s [S.name] with [src]") + M.visible_message(span_infoplain(span_bold("\The [user]") + " scans the wounds on [M]'s [S.name] with [src]")) src.add_data(S) diff --git a/code/game/objects/items/weapons/canes.dm b/code/game/objects/items/weapons/canes.dm index 634ab55bf8d..cd500211a1f 100644 --- a/code/game/objects/items/weapons/canes.dm +++ b/code/game/objects/items/weapons/canes.dm @@ -97,7 +97,7 @@ /obj/item/cane/white/collapsible/attack_self(mob/user as mob) on = !on if(on) - user.visible_message("\The [user] extends the white cane.",\ + user.visible_message(span_infoplain(span_bold("\The [user]") + " extends the white cane."),\ span_warning("You extend the white cane."),\ "You hear an ominous click.") icon_state = "whitecane1out" @@ -106,7 +106,7 @@ force = 5 attack_verb = list("smacked", "struck", "cracked", "beaten") else - user.visible_message("\The [user] collapses the white cane.",\ + user.visible_message(span_infoplain(span_bold("\The [user]") + " collapses the white cane."),\ span_notice("You collapse the white cane."),\ "You hear a click.") icon_state = "whitecane1in" diff --git a/code/game/objects/items/weapons/capture_crystal.dm b/code/game/objects/items/weapons/capture_crystal.dm index d1a5c51015b..4b7e95d446e 100644 --- a/code/game/objects/items/weapons/capture_crystal.dm +++ b/code/game/objects/items/weapons/capture_crystal.dm @@ -7,7 +7,7 @@ pickup_sound = 'sound/items/pickup/ring.ogg' throwforce = 0 force = 0 - action_button_name = "Command" + actions_types = list(/datum/action/item_action/command) var/active = FALSE //Is it set up? var/mob/living/owner //Reference to the owner @@ -40,15 +40,15 @@ /obj/item/capture_crystal/examine(user) . = ..() if(user == owner && bound_mob) - . += "[bound_mob]'s crystal" + . += span_notice("[bound_mob]'s crystal") if(isanimal(bound_mob)) - . += "[bound_mob.health / bound_mob.maxHealth * 100]%" + . += span_notice("[bound_mob.health / bound_mob.maxHealth * 100]%") if(bound_mob.ooc_notes) - . += "OOC Notes: \[View\] - \[Print\]" + . += span_deptradio("OOC Notes:") + " \[View\] - \[Print\]" . += span_deptradio("\[Mechanical Vore Preferences\]") //Command! This lets the owner toggle hostile on AI controlled mobs, or send a silent command message to your bound mob, wherever they may be. -/obj/item/capture_crystal/ui_action_click() +/obj/item/capture_crystal/ui_action_click(mob/user, actiontype) if(!ismob(loc)) return var/mob/living/M = src.loc @@ -67,7 +67,7 @@ to_chat(M, span_notice("\The [bound_mob] is now [AI.hostile ? "hostile" : "passive"].")) log_admin("[key_name_admin(M)] set [bound_mob] to [AI.hostile].") else if(bound_mob.client) - var/transmit_msg = tgui_input_text(usr, "What is your command?", "Command") + var/transmit_msg = tgui_input_text(user, "What is your command?", "Command") if(length(transmit_msg) >= MAX_MESSAGE_LEN) to_chat(M, span_danger("Your message was TOO LONG!:[transmit_msg]")) return diff --git a/code/game/objects/items/weapons/circuitboards/computer/research.dm b/code/game/objects/items/weapons/circuitboards/computer/research.dm index ee687f99230..97f8d9af271 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/research.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/research.dm @@ -9,7 +9,7 @@ /obj/item/circuitboard/rdconsole/attackby(obj/item/I as obj, mob/user as mob) if(I.has_tool_quality(TOOL_SCREWDRIVER)) playsound(src, I.usesound, 50, 1) - user.visible_message("\The [user] adjusts the jumper on \the [src]'s access protocol pins.", span_notice("You adjust the jumper on the access protocol pins.")) + user.visible_message(span_infoplain(span_bold("\The [user]") + " adjusts the jumper on \the [src]'s access protocol pins."), span_notice("You adjust the jumper on the access protocol pins.")) if(build_path == /obj/machinery/computer/rdconsole/core) name = T_BOARD("RD Console - Robotics") build_path = /obj/machinery/computer/rdconsole/robotics diff --git a/code/game/objects/items/weapons/circuitboards/machinery/research.dm b/code/game/objects/items/weapons/circuitboards/machinery/research.dm index 3a621bd5a66..51599051905 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/research.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/research.dm @@ -14,7 +14,7 @@ /obj/item/circuitboard/rdserver/attackby(obj/item/I as obj, mob/user as mob) if(I.has_tool_quality(TOOL_SCREWDRIVER)) playsound(src, I.usesound, 50, 1) - user.visible_message("\The [user] adjusts the jumper on \the [src]'s access protocol pins.", span_notice("You adjust the jumper on the access protocol pins.")) + user.visible_message(span_infoplain(span_bold("\The [user]") + " adjusts the jumper on \the [src]'s access protocol pins."), span_notice("You adjust the jumper on the access protocol pins.")) if(build_path == /obj/machinery/r_n_d/server/core) name = T_BOARD("RD Console - Robotics") build_path = /obj/machinery/r_n_d/server/robotics diff --git a/code/game/objects/items/weapons/circuitboards/mecha.dm b/code/game/objects/items/weapons/circuitboards/mecha.dm index 4790b8143fd..dd3e06d3a75 100644 --- a/code/game/objects/items/weapons/circuitboards/mecha.dm +++ b/code/game/objects/items/weapons/circuitboards/mecha.dm @@ -108,20 +108,20 @@ icon_state = "circuit" /obj/item/circuitboard/mecha/imperion/main - desc = "It is marked with a strange glyph." + desc = "It is marked with a " + span_alien("strange glyph") + "." /obj/item/circuitboard/mecha/imperion/peripherals - desc = "It is marked with a pulsing glyph." + desc = "It is marked with a " + span_alien("pulsing glyph") + "." /obj/item/circuitboard/mecha/imperion/targeting - desc = "It is marked with an ominous glyph." + desc = "It is marked with an " + span_alien("ominous glyph") + "." /obj/item/circuitboard/mecha/imperion/phasing - desc = "It is marked with a disturbing glyph." + desc = "It is marked with a " + span_alien("disturbing glyph") + "." /obj/item/circuitboard/mecha/imperion/damaged name = "Damaged Alien Circuit" - desc = "It is marked with a constantly shifting glyph." + desc = "It is marked with a " + span_alien("constantly shifting glyph") + "." origin_tech = list(TECH_DATA = 3, TECH_BLUESPACE = 1, TECH_PRECURSOR = 2) //Undef the macro, shouldn't be needed anywhere else diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index 123c97dd2c4..c672280e437 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -128,7 +128,7 @@ // Used by admin log. var/injected_with_monkey = "" if((buf.types & DNA2_BUF_SE) && (block ? (GetState() && block == MONKEYBLOCK) : GetState(MONKEYBLOCK))) - injected_with_monkey = " (MONKEY)" + injected_with_monkey = span_danger("(MONKEY)") add_attack_logs(user,M,"[injected_with_monkey] used the [name] on") diff --git a/code/game/objects/items/weapons/ecigs.dm b/code/game/objects/items/weapons/ecigs.dm index 22e96751561..f29636a2d30 100644 --- a/code/game/objects/items/weapons/ecigs.dm +++ b/code/game/objects/items/weapons/ecigs.dm @@ -79,7 +79,7 @@ var/mob/living/carbon/human/C = loc if (src == C.wear_mask && C.check_has_mouth()) // if it's in the human/monkey mouth, transfer reagents to the mob if (!active || !ec_cartridge || !ec_cartridge.reagents.total_volume)//no cartridge - to_chat(C, "[src] turns off. ") + to_chat(C, span_notice("[src] turns off.")) active=0//autodisable the cigarette STOP_PROCESSING(SSobj, src) update_icon() @@ -109,27 +109,27 @@ /obj/item/clothing/mask/smokable/ecig/attackby(var/obj/item/I, var/mob/user as mob) if(istype(I, /obj/item/reagent_containers/ecig_cartridge)) if (ec_cartridge)//can't add second one - to_chat(user, "A cartridge has already been installed. ") + to_chat(user, span_notice("A cartridge has already been installed.")) else//fits in new one user.remove_from_mob(I) I.forceMove(src)//I.loc=src ec_cartridge = I update_icon() - to_chat(user, "You insert [I] into [src]. ") + to_chat(user, span_notice("You insert [I] into [src].")) /obj/item/clothing/mask/smokable/ecig/attack_self(mob/user as mob) if (active) active=0 STOP_PROCESSING(SSobj, src) - to_chat(user, "You turn off \the [src]. ") + to_chat(user, span_notice("You turn off \the [src]. ")) update_icon() else if (!ec_cartridge) - to_chat(user, "You can't use it with no cartridge installed!. ") + to_chat(user, span_notice("You can't use it with no cartridge installed!.")) return active=1 START_PROCESSING(SSobj, src) - to_chat(user, "You turn on \the [src]. ") + to_chat(user, span_notice("You turn on \the [src]. ")) update_icon() /obj/item/clothing/mask/smokable/ecig/attack_hand(mob/user as mob)//eject cartridge @@ -137,7 +137,7 @@ if (ec_cartridge) active=0 user.put_in_hands(ec_cartridge) - to_chat(user, "You eject [ec_cartridge] from \the [src]. ") + to_chat(user, span_notice("You eject [ec_cartridge] from \the [src].")) ec_cartridge = null update_icon() else diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index ab275feb637..41b11771e62 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -302,7 +302,7 @@ var/last_chew = 0 return 1 /obj/item/handcuffs/legcuffs/bola/dropped() - visible_message("\The [src] falls apart!") + visible_message(span_infoplain(span_bold("\The [src]") + " falls apart!")) qdel(src) /obj/item/handcuffs/legcuffs/bola/place_legcuffs(var/mob/living/carbon/target, var/mob/user) @@ -314,7 +314,7 @@ var/last_chew = 0 return 0 if(!H.has_organ_for_slot(slot_legcuffed)) - H.visible_message("\The [src] slams into [H], but slides off!") + H.visible_message(span_infoplain(span_bold("\The [src]") + " slams into [H], but slides off!")) src.dropped() return 0 diff --git a/code/game/objects/items/weapons/implants/implant_vr.dm b/code/game/objects/items/weapons/implants/implant_vr.dm index bb9ec741cd2..8f82fb42f70 100644 --- a/code/game/objects/items/weapons/implants/implant_vr.dm +++ b/code/game/objects/items/weapons/implants/implant_vr.dm @@ -165,7 +165,7 @@ Due to the small chemical capacity of the implant, the life of the implant is re var/newlaws = tgui_input_text(user, "Please Input Laws", "Compliance Laws", "", multiline = TRUE, prevent_enter = TRUE) newlaws = sanitize(newlaws,2048) if(newlaws) - to_chat(user,"You set the laws to:
[newlaws]") + to_chat(user,"You set the laws to:
" + span_notice("[newlaws]")) implant.laws = newlaws //Organic else //No using other implants. to_chat(user,span_notice("A red warning pops up on the implanter's micro-screen: 'INVALID IMPLANT DETECTED.'")) diff --git a/code/game/objects/items/weapons/implants/implantaugment.dm b/code/game/objects/items/weapons/implants/implantaugment.dm index 7307282f107..58e12d9821f 100644 --- a/code/game/objects/items/weapons/implants/implantaugment.dm +++ b/code/game/objects/items/weapons/implants/implantaugment.dm @@ -18,7 +18,7 @@ Important Notes: Nanites will fail to complete their task if a suitable location cannot be found for the organ.

Implant Details:
-Function: Nanites will fabricate: [organ_display_name]
+Function: Nanites will fabricate: [span_alien("[organ_display_name]")]
Special Features: Organ identification protocols.
Integrity: N/A"} return dat diff --git a/code/game/objects/items/weapons/implants/implantchair.dm b/code/game/objects/items/weapons/implants/implantchair.dm index 8b143196142..1720c203214 100644 --- a/code/game/objects/items/weapons/implants/implantchair.dm +++ b/code/game/objects/items/weapons/implants/implantchair.dm @@ -35,10 +35,10 @@ else health_text = "[round(src.occupant.health,0.1)]" - var/dat ="Implanter Status
" + var/dat =span_bold("Implanter Status") + "
" - dat +="Current occupant: [src.occupant ? "
Name: [src.occupant]
Health: [health_text]
" : "None"]
" - dat += "Implants: [src.implant_list.len ? "[implant_list.len]" : "Replenish"]
" + dat +=span_bold("Current occupant:") + " [src.occupant ? "
Name: [src.occupant]
Health: [health_text]
" : "None"]
" + dat += span_bold("Implants:") + " [src.implant_list.len ? "[implant_list.len]" : "Replenish"]
" if(src.occupant) dat += "[src.ready ? "Implant" : "Recharging"]
" user.set_machine(src) diff --git a/code/game/objects/items/weapons/implants/implantpad.dm b/code/game/objects/items/weapons/implants/implantpad.dm index cc1c1242ef4..712ddce08f9 100644 --- a/code/game/objects/items/weapons/implants/implantpad.dm +++ b/code/game/objects/items/weapons/implants/implantpad.dm @@ -49,7 +49,7 @@ /obj/item/implantpad/attack_self(mob/user as mob) user.set_machine(src) - var/dat = "Implant Mini-Computer:
" + var/dat = span_bold("Implant Mini-Computer:") + "
" if (src.case) if(src.case.imp) if(istype(src.case.imp, /obj/item/implant)) diff --git a/code/game/objects/items/weapons/implants/implantreagent_vr.dm b/code/game/objects/items/weapons/implants/implantreagent_vr.dm index 39e693b4574..2188e08ff12 100644 --- a/code/game/objects/items/weapons/implants/implantreagent_vr.dm +++ b/code/game/objects/items/weapons/implants/implantreagent_vr.dm @@ -47,7 +47,7 @@ else return else - imp_in.verbs -= assigned_proc + remove_verb(imp_in, assigned_proc) return if(reagents) diff --git a/code/game/objects/items/weapons/material/chainsaw.dm b/code/game/objects/items/weapons/material/chainsaw.dm index 555e0e92713..d1631a2f11c 100644 --- a/code/game/objects/items/weapons/material/chainsaw.dm +++ b/code/game/objects/items/weapons/material/chainsaw.dm @@ -115,7 +115,7 @@ /obj/item/chainsaw/examine(mob/user) . = ..() if(max_fuel && get_dist(user, src) == 0) - . += "The [src] feels like it contains roughtly [get_fuel()] units of fuel left." + . += span_notice("The [src] feels like it contains roughtly [get_fuel()] units of fuel left.") /obj/item/chainsaw/update_icon() if(on) diff --git a/code/game/objects/items/weapons/material/kitchen.dm b/code/game/objects/items/weapons/material/kitchen.dm index 36b4060e324..43c524b51fa 100644 --- a/code/game/objects/items/weapons/material/kitchen.dm +++ b/code/game/objects/items/weapons/material/kitchen.dm @@ -54,7 +54,7 @@ loaded = "\the [loading]" user.visible_message( \ - "\The [user] scoops up some of [loaded] with \the [src]!", + span_infoplain(span_bold("\The [user]") + " scoops up some of [loaded] with \the [src]!"), span_notice("You scoop up some of [loaded] with \the [src]!") ) loading.bitecount++ @@ -108,12 +108,12 @@ if(M == user) if(!M.can_eat(loaded)) return - M.visible_message("\The [user] eats some of [loaded] with \the [src].") + M.visible_message(span_bold("\The [user]") + "eats some of [loaded] with \the [src].") else user.visible_message(span_warning("\The [user] begins to feed \the [M]!")) if(!(M.can_force_feed(user, loaded) && do_mob(user, M, 5 SECONDS))) return - M.visible_message("\The [user] feeds some of [loaded] to \the [M] with \the [src].") + M.visible_message(span_bold("\The [user]") + "feeds some of [loaded] to \the [M] with \the [src].") playsound(src,'sound/items/eatfood.ogg', rand(10,40), 1) loaded = null update_icon() diff --git a/code/game/objects/items/weapons/material/material_weapons.dm b/code/game/objects/items/weapons/material/material_weapons.dm index 06fc508982f..5a1df7edea1 100644 --- a/code/game/objects/items/weapons/material/material_weapons.dm +++ b/code/game/objects/items/weapons/material/material_weapons.dm @@ -150,7 +150,7 @@ src.set_material(material) return TRUE else - to_chat(M, "You can't sharpen and re-edge [src].") + to_chat(M, span_warning("You can't sharpen and re-edge [src].")) return FALSE /* diff --git a/code/game/objects/items/weapons/policetape.dm b/code/game/objects/items/weapons/policetape.dm index ff7b682e2d7..f2f0c9f4e4b 100644 --- a/code/game/objects/items/weapons/policetape.dm +++ b/code/game/objects/items/weapons/policetape.dm @@ -333,7 +333,7 @@ var/list/tape_roll_applications = list() /obj/item/tape/attack_hand(mob/user as mob) if (user.a_intent == I_HELP && src.allowed(user)) - user.show_viewers("\The [user] lifts \the [src], allowing passage.") + user.show_viewers(span_infoplain(span_bold("\The [user]") + " lifts \the [src], allowing passage.")) for(var/obj/item/tape/T in gettapeline()) T.lift(100) //~10 seconds else @@ -377,7 +377,7 @@ var/list/tape_roll_applications = list() if(user.a_intent == I_HELP) to_chat(user, span_warning("You refrain from breaking \the [src].")) return - user.visible_message("\The [user] breaks \the [src]!",span_notice("You break \the [src].")) + user.visible_message(span_bold("\The [user]") + "breaks \the [src]!",span_notice("You break \the [src].")) for (var/obj/item/tape/T in gettapeline()) if(T == src) diff --git a/code/game/objects/items/weapons/scrolls.dm b/code/game/objects/items/weapons/scrolls.dm index f14bf247c3e..013b527e814 100644 --- a/code/game/objects/items/weapons/scrolls.dm +++ b/code/game/objects/items/weapons/scrolls.dm @@ -20,10 +20,10 @@ return user.set_machine(src) - var/dat = "Teleportation Scroll:
" + var/dat = span_bold("Teleportation Scroll:") + "
" dat += "Number of uses: [src.uses]
" dat += "
" - dat += "Four uses use them wisely:
" + dat += span_bold("Four uses use them wisely:") + "
" dat += "Teleport
" dat += "Kind regards,
Wizards Federation

P.S. Don't forget to bring your gear, you'll need it to cast most spells.
" user << browse(dat, "window=scroll") diff --git a/code/game/objects/items/weapons/shields_vr.dm b/code/game/objects/items/weapons/shields_vr.dm index 2b3eeac2786..245196269a4 100644 --- a/code/game/objects/items/weapons/shields_vr.dm +++ b/code/game/objects/items/weapons/shields_vr.dm @@ -64,7 +64,7 @@ set_light(0) light_applied = 0 update_icon(user) - user.update_action_buttons() + user.update_action_buttons_icon() playsound(src, 'sound/weapons/empty.ogg', 15, 1, -3) /obj/item/shield/riot/explorer/update_icon() diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 82fa30d7d3a..1cf073b8f2f 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -518,29 +518,29 @@ return if(!parachute) //This packs the parachute - H.visible_message("\The [H] starts to pack \the [src]!", \ + H.visible_message(span_infoplain(span_bold("\The [H]") + " starts to pack \the [src]!"), \ span_notice("You start to pack \the [src]!"), \ - "You hear the shuffling of cloth.") + span_infoplain("You hear the shuffling of cloth.")) if(do_after(H, 50)) - H.visible_message("\The [H] finishes packing \the [src]!", \ + H.visible_message(span_infoplain(span_bold("\The [H]") + " finishes packing \the [src]!"), \ span_notice("You finish packing \the [src]!"), \ - "You hear the shuffling of cloth.") + span_infoplain("You hear the shuffling of cloth.")) parachute = TRUE else - H.visible_message("\The [src] gives up on packing \the [src]!", \ + H.visible_message(span_infoplain(span_bold("\The [src]") + " gives up on packing \the [src]!"), \ span_notice("You give up on packing \the [src]!")) return else //This unpacks the parachute - H.visible_message("\The [src] starts to unpack \the [src]!", \ + H.visible_message(span_infoplain(span_bold("\The [src]") + " starts to unpack \the [src]!"), \ span_notice("You start to unpack \the [src]!"), \ - "You hear the shuffling of cloth.") + span_infoplain("You hear the shuffling of cloth.")) if(do_after(H, 25)) - H.visible_message("\The [src] finishes unpacking \the [src]!", \ + H.visible_message(span_infoplain(span_bold("\The [src]") + " finishes unpacking \the [src]!"), \ span_notice("You finish unpacking \the [src]!"), \ - "You hear the shuffling of cloth.") + span_infoplain("You hear the shuffling of cloth.")) parachute = FALSE else - H.visible_message("\The [src] decides not to unpack \the [src]!", \ + H.visible_message(span_infoplain(span_bold("\The [src]") + " decides not to unpack \the [src]!"), \ span_notice("You decide not to unpack \the [src]!")) return diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index aff573cd16d..8f036b5b0be 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -156,7 +156,7 @@ /obj/item/storage/box/flashbangs name = "box of flashbangs (WARNING)" - desc = "WARNING: These devices are extremely dangerous and can cause blindness or deafness in repeated use." + desc = span_bold("WARNING: These devices are extremely dangerous and can cause blindness or deafness in repeated use.") icon_state = "flashbang" starts_with = list(/obj/item/grenade/flashbang = 7) drop_sound = 'sound/items/drop/ammobox.ogg' @@ -335,7 +335,7 @@ /obj/item/storage/box/mousetraps name = "box of Pest-B-Gon mousetraps" - desc = span_red("WARNING:") + " Keep out of reach of children." + desc = span_red(span_bold("WARNING:")) + " " + span_italics("Keep out of reach of children") + "." icon_state = "mousetraps" starts_with = list(/obj/item/assembly/mousetrap = 7) @@ -466,7 +466,7 @@ //Donk-pockets /obj/item/storage/box/donkpockets name = "box of donk-pockets" - desc = "Instructions: Heat in microwave. Product will cool if not eaten within seven minutes." + desc = span_bold("Instructions:") + " " + span_italics("Heat in microwave. Product will cool if not eaten within seven minutes.") icon_state = "donkpocketbox" starts_with = list(/obj/item/reagent_containers/food/snacks/donkpocket = 7) @@ -502,6 +502,6 @@ /obj/item/storage/box/sinpockets name = "box of sin-pockets" - desc = "Instructions: Crush bottom of package to initiate chemical heating. Wait for 20 seconds before consumption. Product will cool if not eaten within seven minutes." + desc = span_bold("Instructions:") + " " + span_italics("Crush bottom of package to initiate chemical heating. Wait for 20 seconds before consumption. Product will cool if not eaten within seven minutes.") icon_state = "donk_kit" starts_with = list(/obj/item/reagent_containers/food/snacks/donkpocket/sinpocket = 7) diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index f6694c5778e..ecae56a6500 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -67,7 +67,7 @@ force = 15//quite robust attack_verb = list("smacked", "struck", "slapped") else - user.visible_message("\The [user] collapses their telescopic baton.",\ + user.visible_message(span_infoplain(span_bold("\The [user]") + " collapses their telescopic baton."),\ span_notice("You collapse the baton."),\ "You hear a click.") icon_state = "telebaton0" diff --git a/code/game/objects/items/weapons/syndie.dm b/code/game/objects/items/weapons/syndie.dm index b7fff933e26..445820d2200 100644 --- a/code/game/objects/items/weapons/syndie.dm +++ b/code/game/objects/items/weapons/syndie.dm @@ -50,7 +50,7 @@ icon_state = "c-4[size]_1" playsound(src, 'sound/weapons/armbomb.ogg', 75, 1) for(var/mob/O in hearers(src, null)) - O.show_message("[icon2html(src, O.client)] The [src.name] beeps! ") + O.show_message("[icon2html(src, O.client)] " + span_warning(" The [src.name] beeps!")) sleep(50) explosion(get_turf(src), devastate, heavy_impact, light_impact, flash_range) for(var/dirn in cardinal) //This is to guarantee that C4 at least breaks down all immediately adjacent walls and doors. diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index 2400985b05e..42b67842e4b 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -17,7 +17,7 @@ var/on = 0.0 var/stabilization_on = 0 var/volume_rate = 500 //Needed for borg jetpack transfer - action_button_name = "Toggle Jetpack" + actions_types = list(/datum/action/item_action/toggle_jetpack) /obj/item/tank/jetpack/New() ..() @@ -55,7 +55,7 @@ if (ismob(usr)) var/mob/M = usr M.update_inv_back() - M.update_action_buttons() + M.update_action_buttons_icon() to_chat(usr, "You toggle the thrusters [on? "on":"off"].") @@ -81,7 +81,7 @@ fuel.remove(num) return 1 -/obj/item/tank/jetpack/ui_action_click() +/obj/item/tank/jetpack/ui_action_click(mob/user, actiontype) toggle() /obj/item/tank/jetpack/void diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index d4885e9cd12..6d6882e0b86 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -191,7 +191,7 @@ var/list/global/tank_gauge_cache = list() if(!valve_welded) to_chat(user, span_notice("You begin welding the \the [src] emergency pressure relief valve.")) if(do_after(user, 40,src)) - to_chat(user, span_notice("You carefully weld \the [src] emergency pressure relief valve shut.
\The [src] may now rupture under pressure!")) + to_chat(user, span_notice("You carefully weld \the [src] emergency pressure relief valve shut.") + " " + span_warning("\The [src] may now rupture under pressure!")) src.valve_welded = 1 src.leaking = 0 else @@ -455,7 +455,7 @@ var/list/global/tank_gauge_cache = list() return T.assume_air(air_contents) playsound(src, 'sound/weapons/Gunshot_shotgun.ogg', 20, 1) - visible_message("[icon2html(src,viewers(src))] \The [src] flies apart!", span_warning("You hear a bang!")) + visible_message("[icon2html(src,viewers(src))] " + span_danger("\The [src] flies apart!"), span_warning("You hear a bang!")) T.hotspot_expose(air_contents.temperature, 70, 1) @@ -500,7 +500,7 @@ var/list/global/tank_gauge_cache = list() T.assume_air(leaked_gas) if(!leaking) - visible_message("[icon2html(src,viewers(src))] \The [src] relief valve flips open with a hiss!", "You hear hissing.") + visible_message("[icon2html(src,viewers(src))] " + span_warning("\The [src] relief valve flips open with a hiss!"), "You hear hissing.") playsound(src, 'sound/effects/spray.ogg', 10, 1, -3) leaking = 1 #ifdef FIREDBG diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm index 319250f2a18..e5399a6e7e2 100644 --- a/code/game/objects/items/weapons/tape.dm +++ b/code/game/objects/items/weapons/tape.dm @@ -156,7 +156,7 @@ user.drop_from_inventory(I) I.loc = src qdel(I) - to_chat(user, "You place \the [I] back into \the [src].") + to_chat(user, span_notice("You place \the [I] back into \the [src].")) /obj/item/ducttape/attack_hand(mob/living/L) anchored = FALSE diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index 9872c6d9243..9bdf3d50e61 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -55,11 +55,11 @@ Frequency: if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)))) usr.set_machine(src) if (href_list["refresh"]) - src.temp = "Persistent Signal Locator
" + src.temp = span_bold("Persistent Signal Locator") + "
" var/turf/sr = get_turf(src) if (sr) - src.temp += "Located Beacons:
" + src.temp += span_bold("Located Beacons:") + "
" for(var/obj/item/radio/beacon/W in all_beacons) if (W.frequency == src.frequency) @@ -78,7 +78,7 @@ Frequency: direct = "very weak" src.temp += "[W.code]-[dir2text(get_dir(sr, tr))]-[direct]
" - src.temp += "Extraneous Signals:
" + src.temp += span_bold("Extraneous Signals:") + "
" for (var/obj/item/implant/tracking/W in all_tracking_implants) if (!W.implanted || !(istype(W.loc,/obj/item/organ/external) || ismob(W.loc) || W.malfunction)) continue @@ -96,9 +96,9 @@ Frequency: direct = "weak" src.temp += "[W.id]-[dir2text(get_dir(sr, tr))]-[direct]
" - src.temp += "You are at \[[sr.x],[sr.y],[sr.z]\] in orbital coordinates.

Refresh
" + src.temp += span_bold("You are at \[[sr.x],[sr.y],[sr.z]\]") + " in orbital coordinates.

Refresh
" else - src.temp += "Processing Error: Unable to locate orbital position.
" + src.temp += span_bold("Processing Error:") + " Unable to locate orbital position.
" else if (href_list["freq"]) src.frequency += text2num(href_list["freq"]) diff --git a/code/game/objects/items/weapons/tools/weldingtool.dm b/code/game/objects/items/weapons/tools/weldingtool.dm index 7dd1a562b5a..86c52420265 100644 --- a/code/game/objects/items/weapons/tools/weldingtool.dm +++ b/code/game/objects/items/weapons/tools/weldingtool.dm @@ -517,7 +517,7 @@ if(mounted_pack.loc != src.loc && src.loc != mounted_pack) mounted_pack.return_nozzle() - visible_message("\The [src] retracts to its fueltank.") + visible_message(span_infoplain(span_bold("\The [src]") + " retracts to its fueltank.")) if(get_fuel() <= get_max_fuel()) mounted_pack.reagents.trans_to_obj(src, 1) diff --git a/code/game/objects/items/weapons/tools/wirecutters.dm b/code/game/objects/items/weapons/tools/wirecutters.dm index bda788a30ed..031ab1a6f66 100644 --- a/code/game/objects/items/weapons/tools/wirecutters.dm +++ b/code/game/objects/items/weapons/tools/wirecutters.dm @@ -82,13 +82,13 @@ /obj/item/tool/wirecutters/cyborg name = "wirecutters" - desc = "This cuts wires. With science." + desc = "This cuts wires. With science." usesound = 'sound/items/jaws_cut.ogg' toolspeed = 0.5 /obj/item/tool/wirecutters/hybrid name = "strange wirecutters" - desc = "This cuts wires. With Science!" + desc = "This cuts wires. With " + span_purple("Science!") icon_state = "hybcutters" w_class = ITEMSIZE_NORMAL origin_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 3, TECH_PHORON = 2) @@ -102,4 +102,4 @@ desc = "You shouldn't see this." usesound = 'sound/items/jaws_cut.ogg' force = 15 - toolspeed = 0.25 \ No newline at end of file + toolspeed = 0.25 diff --git a/code/game/objects/items/weapons/traps.dm b/code/game/objects/items/weapons/traps.dm index d7f15cc7d6d..6acc7985da3 100644 --- a/code/game/objects/items/weapons/traps.dm +++ b/code/game/objects/items/weapons/traps.dm @@ -128,7 +128,7 @@ L.visible_message( span_danger("[L] steps on \the [src]."), span_danger("You step on \the [src]!"), - "You hear a loud metallic snap!" + span_infoplain(span_bold("You hear a loud metallic snap!")) ) attack_mob(L) if(!has_buckled_mobs()) @@ -275,7 +275,7 @@ L.visible_message( span_danger("[L] steps in \the [src]."), span_danger("You step in \the [src]!"), - "You hear a sharp rustling!" + span_infoplain(span_bold("You hear a sharp rustling!")) ) attack_mob(L) update_icon() diff --git a/code/game/objects/items/weapons/traps_vr.dm b/code/game/objects/items/weapons/traps_vr.dm index 6940135d82c..07530e8361c 100644 --- a/code/game/objects/items/weapons/traps_vr.dm +++ b/code/game/objects/items/weapons/traps_vr.dm @@ -8,11 +8,11 @@ if(ishuman(src.loc)) var/mob/living/carbon/human/H = src.loc if(H.wear_mask == src) - H.verbs |= /mob/living/proc/shred_limb_temp + add_verb(H, /mob/living/proc/shred_limb_temp) else - H.verbs -= /mob/living/proc/shred_limb_temp + remove_verb(H, /mob/living/proc/shred_limb_temp) ..() /obj/item/beartrap/dropped(var/mob/user) - user.verbs -= /mob/living/proc/shred_limb_temp - ..() \ No newline at end of file + remove_verb(user, /mob/living/proc/shred_limb_temp) + ..() diff --git a/code/game/objects/items_vr.dm b/code/game/objects/items_vr.dm index 4b8dbcaae5c..c2bd92cbea6 100644 --- a/code/game/objects/items_vr.dm +++ b/code/game/objects/items_vr.dm @@ -23,5 +23,5 @@ new_voice.real_name = "[new_voice.real_name]" //We still know their real name though! possessed_voice.Add(new_voice) listening_objects |= src - new_voice.verbs -= /mob/living/voice/verb/change_name //No changing your name! Bad! - new_voice.verbs -= /mob/living/voice/verb/hang_up //Also you can't hang up. You are the item! \ No newline at end of file + remove_verb(new_voice, /mob/living/voice/verb/change_name) //No changing your name! Bad! + remove_verb(new_voice, /mob/living/voice/verb/hang_up) //Also you can't hang up. You are the item! diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 47d4f1ba6bd..62fa4b0be00 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -30,7 +30,7 @@ LINEN BINS /obj/item/bedsheet/attackby(obj/item/I, mob/user) if(is_sharp(I)) - user.visible_message("\The [user] begins cutting up [src] with [I].", span_notice("You begin cutting up [src] with [I].")) + user.visible_message(span_infoplain(span_bold("\The [user]") + " begins cutting up [src] with [I]."), span_notice("You begin cutting up [src] with [I].")) if(do_after(user, 50)) to_chat(user, span_notice("You cut [src] into pieces!")) for(var/i in 1 to rand(2,5)) diff --git a/code/game/objects/structures/bonfire.dm b/code/game/objects/structures/bonfire.dm index 1b37697d96e..0f3bbba7b7c 100644 --- a/code/game/objects/structures/bonfire.dm +++ b/code/game/objects/structures/bonfire.dm @@ -160,7 +160,7 @@ burning = FALSE update_icon() STOP_PROCESSING(SSobj, src) - visible_message("\The [src] stops burning.") + visible_message(span_infoplain(span_bold("\The [src]") + " stops burning.")) /obj/structure/bonfire/proc/ignite() if(!burning && get_fuel_amount()) @@ -354,7 +354,7 @@ burning = FALSE update_icon() STOP_PROCESSING(SSobj, src) - visible_message("\The [src] stops burning.") + visible_message(span_infoplain(span_bold("\The [src]") + " stops burning.")) /obj/structure/fireplace/proc/ignite() if(!burning && get_fuel_amount()) diff --git a/code/game/objects/structures/crates_lockers/crates_vr.dm b/code/game/objects/structures/crates_lockers/crates_vr.dm index 8825c25d834..10183cf5980 100644 --- a/code/game/objects/structures/crates_lockers/crates_vr.dm +++ b/code/game/objects/structures/crates_lockers/crates_vr.dm @@ -7,7 +7,7 @@ if(locked && tamper_proof && health <= Proj.damage) if(tamper_proof == 2) // Mainly used for events to prevent any chance of opening the box improperly. - visible_message(span_red("The anti-tamper mechanism of [src] triggers an explosion!")) + visible_message(span_bolddanger("The anti-tamper mechanism of [src] triggers an explosion!")) var/turf/T = get_turf(src.loc) explosion(T, 0, 0, 0, 1) // Non-damaging, but it'll alert security. qdel(src) @@ -15,18 +15,18 @@ var/open_chance = rand(1,5) switch(open_chance) if(1) - visible_message(span_red("The anti-tamper mechanism of [src] causes an explosion!")) + visible_message(span_bolddanger("The anti-tamper mechanism of [src] causes an explosion!")) var/turf/T = get_turf(src.loc) explosion(T, 0, 0, 0, 1) // Non-damaging, but it'll alert security. qdel(src) if(2 to 4) - visible_message(span_red("The anti-tamper mechanism of [src] causes a small fire!")) + visible_message(span_boldwarning("The anti-tamper mechanism of [src] causes a small fire!")) for(var/atom/movable/A as mob|obj in src) // For every item in the box, we spawn a pile of ash. new /obj/effect/decal/cleanable/ash(src.loc) new /obj/fire(src.loc) qdel(src) if(5) - visible_message(span_green("The anti-tamper mechanism of [src] fails!")) + visible_message(span_infoplain(span_green(span_bold("The anti-tamper mechanism of [src] fails!")))) return ..() diff --git a/code/game/objects/structures/droppod.dm b/code/game/objects/structures/droppod.dm index d529a426038..440283abdfb 100644 --- a/code/game/objects/structures/droppod.dm +++ b/code/game/objects/structures/droppod.dm @@ -106,7 +106,7 @@ to_chat(user, span_warning("Nothing left to do with it now. Maybe you can break it down into materials.")) else open_pod() - user.visible_message("[user] opens \the [src]!","You open \the [src]!") + user.visible_message(span_infoplain(span_bold("[user]") + " opens \the [src]!"),span_infoplain("You open \the [src]!")) /obj/structure/drop_pod/attackby(obj/item/O, mob/user) if(O.has_tool_quality(TOOL_WRENCH)) diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index d87f5bd6308..8281a7f9ca1 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -38,7 +38,7 @@ playsound(src, 'sound/machines/lockreset.ogg', 50, 1) if(do_after(user, 20 * O.toolspeed)) locked = 0 - to_chat(user, " You disable the locking modules.") + to_chat(user, span_warning("You disable the locking modules.")) update_icon() return else if(istype(O, /obj/item)) @@ -89,7 +89,7 @@ playsound(src, 'sound/machines/lockenable.ogg', 50, 1) if(do_after(user,20 * O.toolspeed)) locked = 1 - to_chat(user, " You re-enable the locking modules.") + to_chat(user, span_warning("You re-enable the locking modules.")) return else toggle_close_open() diff --git a/code/game/objects/structures/flora/flora.dm b/code/game/objects/structures/flora/flora.dm index 43c0dcbf9aa..9b99fe9a458 100644 --- a/code/game/objects/structures/flora/flora.dm +++ b/code/game/objects/structures/flora/flora.dm @@ -282,7 +282,7 @@ /obj/structure/flora/pottedplant/examine(mob/user) . = ..() if(in_range(user, src) && stored_item) - . += span_filter_notice("You can see something in there...") + . += span_filter_notice(span_italics("You can see something in there...")) /obj/structure/flora/pottedplant/attackby(obj/item/I, mob/user) if(issilicon(user)) @@ -308,7 +308,7 @@ /obj/structure/flora/pottedplant/attack_hand(mob/user) if(!stored_item) - to_chat(user, span_filter_notice("You see nothing of interest in [src]...")) + to_chat(user, span_filter_notice(span_bold("You see nothing of interest in [src]..."))) else if(do_after(user, 10)) to_chat(user, span_filter_notice("You find [icon2html(stored_item, user.client)] [stored_item] in [src]!")) diff --git a/code/game/objects/structures/flora/trees.dm b/code/game/objects/structures/flora/trees.dm index b54548c977d..e15e03f3bc6 100644 --- a/code/game/objects/structures/flora/trees.dm +++ b/code/game/objects/structures/flora/trees.dm @@ -47,7 +47,7 @@ if(is_stump) if(istype(W,/obj/item/shovel)) if(do_after(user, 5 SECONDS)) - visible_message("\The [user] digs up \the [src] stump with \the [W].") + visible_message(span_infoplain(span_bold("\The [user]") + " digs up \the [src] stump with \the [W].")) qdel(src) return diff --git a/code/game/objects/structures/ghost_pods/antagonist.dm b/code/game/objects/structures/ghost_pods/antagonist.dm index f271d37586a..226826c6598 100644 --- a/code/game/objects/structures/ghost_pods/antagonist.dm +++ b/code/game/objects/structures/ghost_pods/antagonist.dm @@ -19,8 +19,8 @@ M.mind.transfer_to(R) // Description for new larva, so they understand what to expect. to_chat(M, span_notice("You are a Xenomorph Larva, freshly slithered out of their egg to serve the hive.")) - to_chat(M, span_notice("Be sure to carefully listen to your queen, as xenomorph egg spawns may act different to loner xenomorph spawns.")) - to_chat(M, span_warning("Remember, you are technically a antagonist. Be sure to learn the context of your existence via IC or ahelp to prevent headaches, and follow the orders of your queen to the letter.")) + to_chat(M, span_boldnotice("Be sure to carefully listen to your queen, as xenomorph egg spawns may act different to loner xenomorph spawns.")) + to_chat(M, span_boldwarning("Remember, you are technically a antagonist. Be sure to learn the context of your existence via IC or ahelp to prevent headaches, and follow the orders of your queen to the letter.")) to_chat(M, span_notice(" Your life for the hive!")) R.ckey = M.ckey visible_message(span_warning("\the [src] peels open, and a fresh larva slithers out!")) diff --git a/code/game/objects/structures/ghost_pods/event_vr.dm b/code/game/objects/structures/ghost_pods/event_vr.dm index 17c6c3de90b..7e718aab891 100644 --- a/code/game/objects/structures/ghost_pods/event_vr.dm +++ b/code/game/objects/structures/ghost_pods/event_vr.dm @@ -108,9 +108,9 @@ //newPred.movement_cooldown = 0 // The "needless artificial speed cap" exists for a reason if(M.mind) M.mind.transfer_to(newPred) - to_chat(M, "You are [newPred], somehow having gotten aboard the station in search of food. \ + to_chat(M, span_notice("You are [newPred], somehow having gotten aboard the station in search of food. \ You are wary of environment around you, but you do feel rather peckish. Stick around dark, secluded places to avoid danger or, \ - if you are cute enough, try to make friends with this place's inhabitants.") + if you are cute enough, try to make friends with this place's inhabitants.")) to_chat(M, span_critical("Please be advised, this role is NOT AN ANTAGONIST.")) to_chat(M, span_warning("You may be a spooky space monster, but your role is to facilitate spooky space monster roleplay, not to fight the station and kill people. You can of course eat and/or digest people as you like if OOC prefs align, but this should be done as part of roleplay. If you intend to fight the station and kill people and such, you need permission from the staff team. GENERALLY, this role should avoid well populated areas. You’re a weird spooky space monster, so the bar is probably not where you’d want to go if you intend to survive. Of course, you’re welcome to try to make friends and roleplay how you will in this regard, but something to keep in mind.")) newPred.ckey = M.ckey @@ -144,12 +144,12 @@ var/mob/living/simple_mob/vore/morph/newMorph = new /mob/living/simple_mob/vore/morph(get_turf(src)) if(M.mind) M.mind.transfer_to(newMorph) - to_chat(M, "You are a Morph, somehow having gotten aboard the station in your wandering. \ + to_chat(M, span_notice("You are a Morph, somehow having gotten aboard the station in your wandering. \ You are wary of environment around you, but your primal hunger still calls for you to find prey. Seek a convincing disguise, \ - using your amorphous form to traverse vents to find and consume weak prey.") - to_chat(M, "You can use shift + click on objects to disguise yourself as them, but your strikes are nearly useless when you are disguised. \ + using your amorphous form to traverse vents to find and consume weak prey.")) + to_chat(M, span_notice("You can use shift + click on objects to disguise yourself as them, but your strikes are nearly useless when you are disguised. \ You can undisguise yourself by shift + clicking yourself, but disguise being switched, or turned on and off has a short cooldown. You can also ventcrawl, \ - by using alt + click on the vent or scrubber.") + by using alt + click on the vent or scrubber.")) to_chat(M, span_critical("Please be advised, this role is NOT AN ANTAGONIST.")) to_chat(M, span_warning("You may be a spooky space monster, but your role is to facilitate spooky space monster roleplay, not to fight the station and kill people. You can of course eat and/or digest people as you like if OOC prefs align, but this should be done as part of roleplay. If you intend to fight the station and kill people and such, you need permission from the staff team. GENERALLY, this role should avoid well populated areas. You’re a weird spooky space monster, so the bar is probably not where you’d want to go if you intend to survive. Of course, you’re welcome to try to make friends and roleplay how you will in this regard, but something to keep in mind.")) diff --git a/code/game/objects/structures/ghost_pods/mysterious.dm b/code/game/objects/structures/ghost_pods/mysterious.dm index 8bc3df94ff5..d25d2a752ce 100644 --- a/code/game/objects/structures/ghost_pods/mysterious.dm +++ b/code/game/objects/structures/ghost_pods/mysterious.dm @@ -40,10 +40,10 @@ /obj/structure/ghost_pod/manual/cursedblade/create_occupant(var/mob/M) density = FALSE var/obj/item/melee/cursedblade/R = new(get_turf(src)) - to_chat(M, "You are a Cursed Sword, discovered by a hapless explorer. \ + to_chat(M, span_notice("You are a " + span_bold("Cursed Sword") + ", discovered by a hapless explorer. \ You were once an explorer yourself, when one day you discovered a strange sword made from a red crystal. As soon as you touched it,\ your body was reduced to ashes and your soul was cursed to remain trapped in the blade forever. \ - Now it is up to you to decide whether you want to be a faithful companion, or a bitter prisoner of the blade.") + Now it is up to you to decide whether you want to be a faithful companion, or a bitter prisoner of the blade.")) R.ghost_inhabit(M) visible_message(span_warning("The blade shines brightly for a brief moment as [usr] pulls it out of the stone!")) log_and_message_admins("successfully acquired a cursed sword.") diff --git a/code/game/objects/structures/ghost_pods/silicon.dm b/code/game/objects/structures/ghost_pods/silicon.dm index dd68d9d4d29..64ac8f5674b 100644 --- a/code/game/objects/structures/ghost_pods/silicon.dm +++ b/code/game/objects/structures/ghost_pods/silicon.dm @@ -23,12 +23,12 @@ if(M.mind) M.mind.transfer_to(R) // Put this text here before ckey change so that their laws are shown below it, since borg login() shows it. - to_chat(M, "You are a Lost Drone, discovered inside the wreckage of your previous home. \ + to_chat(M, span_notice("You are a Lost Drone, discovered inside the wreckage of your previous home. \ Something has reactivated you, with their intentions unknown to you, and yours unknown to them. They are a foreign entity, \ - however they did free you from your pod...") - to_chat(M, "Be sure to examine your currently loaded lawset closely. Remember, your \ + however they did free you from your pod...")) + to_chat(M, span_notice(span_bold("Be sure to examine your currently loaded lawset closely.") + " Remember, your \ definiton of 'the station' is where your pod is, and unless your laws say otherwise, the entity that released you \ - from the pod is not a crewmember.") + from the pod is not a crewmember.")) R.ckey = M.ckey visible_message(span_warning("As \the [src] opens, the eyes of the robot flicker as it is activated.")) R.namepick() @@ -53,8 +53,8 @@ M.mind.transfer_to(R) // Put this text here before ckey change so that their laws are shown below it, since borg login() shows it. to_chat(M, span_notice("You are a Gravekeeper Drone, activated once again to tend to the restful dead.")) - to_chat(M, "Be sure to examine your currently loaded lawset closely. Remember, your \ - definiton of 'your gravesite' is where your pod is.") + to_chat(M, span_notice(span_bold("Be sure to examine your currently loaded lawset closely.") + " Remember, your \ + definiton of 'your gravesite' is where your pod is.")) R.ckey = M.ckey visible_message(span_warning("As \the [src] opens, the eyes of the robot flicker as it is activated.")) R.namepick() @@ -92,7 +92,7 @@ . = ..() var/turf/T = get_turf(src) - say_dead_object("A [drone_class] swarm drone shell is now available in \the [T.loc].", src) + say_dead_object("A " + span_notice("[drone_class] swarm drone") + " shell is now available in \the [T.loc].", src) /obj/structure/ghost_pod/ghost_activated/swarm_drone/event/gunner name = "gunner shell" diff --git a/code/game/objects/structures/ghost_pods/silicon_vr.dm b/code/game/objects/structures/ghost_pods/silicon_vr.dm index 72ed818f27f..cfc3b781d2f 100644 --- a/code/game/objects/structures/ghost_pods/silicon_vr.dm +++ b/code/game/objects/structures/ghost_pods/silicon_vr.dm @@ -13,12 +13,12 @@ if(M.mind) M.mind.transfer_to(R) // Put this text here before ckey change so that their laws are shown below it, since borg login() shows it. - to_chat(M, "You are a Lost Drone, discovered inside the wreckage of your previous home. \ + to_chat(M, span_notice("You are a " + span_bold("Lost Drone") + ", discovered inside the wreckage of your previous home. \ Something has reactivated you, with their intentions unknown to you, and yours unknown to them. They are a foreign entity, \ - however they did free you from your pod...") - to_chat(M, "Be sure to examine your currently loaded lawset closely. Remember, your \ + however they did free you from your pod...")) + to_chat(M, span_notice(span_bold("Be sure to examine your currently loaded lawset closely.") + " Remember, your \ definiton of 'the station' is where your pod is, and unless your laws say otherwise, the entity that released you \ - from the pod is not a crewmember.") + from the pod is not a crewmember.")) R.ckey = M.ckey visible_message(span_warning("As \the [src] opens, the eyes of the robot flicker as it is activated.")) R.namepick() diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index b13c51e14b1..de43c6d85e0 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -16,11 +16,11 @@ if(!istype(G, /obj/item/grab) || !ismob(G.affecting)) return if(occupied) - to_chat(user, "The spike already has something on it, finish collecting its meat first!") + to_chat(user, span_danger("The spike already has something on it, finish collecting its meat first!")) else if(spike(G.affecting)) var/datum/gender/T = gender_datums[G.affecting.get_visible_gender()] - visible_message("[user] has forced [G.affecting] onto the spike, killing [T.him] instantly!") + visible_message(span_danger("[user] has forced [G.affecting] onto the spike, killing [T.him] instantly!")) var/mob/M = G.affecting M.forceMove(src) qdel(G) diff --git a/code/game/objects/structures/medical_stand_vr.dm b/code/game/objects/structures/medical_stand_vr.dm index 453ede666d5..05bd7fde60f 100644 --- a/code/game/objects/structures/medical_stand_vr.dm +++ b/code/game/objects/structures/medical_stand_vr.dm @@ -129,10 +129,10 @@ qdel(contained) contained = new mask_type(src) breather = null - src.visible_message("\The [contained] slips to \the [src]!") + src.visible_message(span_infoplain(span_bold("\The [contained]") + " slips to \the [src]!")) update_icon() return - usr.visible_message("\The [usr] begins carefully placing the mask onto [target].", + usr.visible_message(span_infoplain(span_bold("\The [usr]") + " begins carefully placing the mask onto [target]."), span_notice("You begin carefully placing the mask onto [target].")) if(!do_mob(usr, target, 100) || !can_apply_to_target(target, usr)) return @@ -151,14 +151,14 @@ visible_message("\The [attached] is taken off \the [src]") attached = null else if(ishuman(target)) - usr.visible_message("\The [usr] begins inserting needle into [target]'s vein.", + usr.visible_message(span_infoplain(span_bold("\The [usr]") + " begins inserting needle into [target]'s vein."), span_notice("You begin inserting needle into [target]'s vein.")) if(!do_mob(usr, target, 50)) usr.visible_message(span_notice("\The [usr]'s hand slips and pricks \the [target]."), span_notice("Your hand slips and pricks \the [target].")) target.apply_damage(3, BRUTE, pick(BP_R_ARM, BP_L_ARM)) return - usr.visible_message("\The [usr] hooks \the [target] up to \the [src].", + usr.visible_message(span_infoplain(span_bold("\The [usr]") + "hooks \the [target] up to \the [src]."), span_notice("You hook \the [target] up to \the [src].")) attached = target START_PROCESSING(SSobj,src) @@ -184,13 +184,13 @@ to_chat(user, span_warning("There is no tank in \the [src]!")) return else if (tank && is_loosen) - user.visible_message("\The [user] removes \the [tank] from \the [src].", "You remove \the [tank] from \the [src].>") + user.visible_message(span_warningplain(span_bold("\The [user]") + " removes \the [tank] from \the [src]."), span_warning("You remove \the [tank] from \the [src].")) user.put_in_hands(tank) tank = null update_icon() return else if (!is_loosen) - user.visible_message("\The [user] tries to removes \the [tank] from \the [src] but it won't budge.", "You try to removes \the [tank] from \the [src] but it won't budge.>") + user.visible_message(span_warningplain(span_bold("\The [user]") + " tries to removes \the [tank] from \the [src] but it won't budge."), span_warning("You try to removes \the [tank] from \the [src] but it won't budge.")) return if ("Toggle valve") if (!tank) @@ -198,7 +198,7 @@ return else if (valve_opened) - src.visible_message("\The [user] closes valve on \the [src]!", + src.visible_message(span_infoplain(span_bold("\The [user]") + " closes valve on \the [src]!"), span_notice("You close valve on \the [src].")) if(breather) breather.internals?.icon_state = "internal0" @@ -206,7 +206,7 @@ valve_opened = FALSE update_icon() else - src.visible_message("\The [user] opens valve on \the [src]!", + src.visible_message(span_infoplain(span_bold("\The [user]") + " opens valve on \the [src]!"), span_notice("You open valve on \the [src].")) if(breather) breather.internal = tank @@ -319,7 +319,7 @@ user.drop_item() W.forceMove(src) tank = W - user.visible_message("\The [user] attaches \the [tank] to \the [src].", span_notice("You attach \the [tank] to \the [src].")) + user.visible_message(span_bold("\The [user]") + " attaches \the [tank] to \the [src].", span_notice("You attach \the [tank] to \the [src].")) src.add_fingerprint(user) update_icon() @@ -373,7 +373,7 @@ else qdel(contained) contained = new mask_type (src) - src.visible_message("\The [contained] slips to \the [src]!") + src.visible_message(span_bold("\The [contained]") + " slips to \the [src]!") breather = null update_icon() return diff --git a/code/game/objects/structures/props/alien_props.dm b/code/game/objects/structures/props/alien_props.dm index f1a3502ee87..e4edf9b2191 100644 --- a/code/game/objects/structures/props/alien_props.dm +++ b/code/game/objects/structures/props/alien_props.dm @@ -11,8 +11,8 @@ name = "alien console" desc = "The console flashes what appear to be symbols you've never seen before." icon_state = "console-c" - interaction_message = "The console flashes a series of unknown symbols as you press a button on what is presumably a keyboard. It probably some sort of \ - authentication error. Since you're not an alien, you should probably leave it alone." + interaction_message = span_warning("The console flashes a series of unknown symbols as you press a button on what is presumably a keyboard. It probably some sort of \ + authentication error. Since you're not an alien, you should probably leave it alone.") /obj/structure/prop/alien/computer/camera desc = "This console is briefly flashing video feeds of various locations close by." diff --git a/code/game/objects/structures/props/beam_prism.dm b/code/game/objects/structures/props/beam_prism.dm index 98f16a6a596..75174e6c0c2 100644 --- a/code/game/objects/structures/props/beam_prism.dm +++ b/code/game/objects/structures/props/beam_prism.dm @@ -90,11 +90,11 @@ /obj/structure/prop/prism/proc/rotate_auto(var/new_bearing) if(rotation_lock) - visible_message("\The [src] shudders.") + visible_message(span_infoplain(span_bold("\The [src]") + " shudders.")) playsound(src, 'sound/effects/clang.ogg', 50, 1) return - visible_message("\The [src] rotates to a bearing of [new_bearing].") + visible_message(span_infoplain(span_bold("\The [src]") + " rotates to a bearing of [new_bearing].")) var/rotate_degrees = new_bearing - degrees_from_north diff --git a/code/game/objects/structures/props/statue.dm b/code/game/objects/structures/props/statue.dm index 904510fb96d..58134d38bd3 100644 --- a/code/game/objects/structures/props/statue.dm +++ b/code/game/objects/structures/props/statue.dm @@ -58,7 +58,7 @@ desc = "A sculpture made of pure phoron. It is covered in a lacquer that prevents erosion and renders it fireproof. It's safe. Probably." icon_state = "phoronic" layer = ABOVE_WINDOW_LAYER - interaction_message = "Cool to touch and unbelievable smooth. You can almost see your reflection in it." + interaction_message = span_notice("Cool to touch and unbelievable smooth. You can almost see your reflection in it.") /obj/structure/prop/statue/phoron/New() set_light(2, 3, "#cc66ff") @@ -71,4 +71,4 @@ /obj/structure/prop/statue/pillar/dark name = "pillar" desc = "A dark pillar." - icon_state = "dark_pillar" \ No newline at end of file + icon_state = "dark_pillar" diff --git a/code/game/objects/structures/railing.dm b/code/game/objects/structures/railing.dm index 4d34a487197..7f7f57c1f00 100644 --- a/code/game/objects/structures/railing.dm +++ b/code/game/objects/structures/railing.dm @@ -205,7 +205,7 @@ if(W.has_tool_quality(TOOL_WRENCH) && !anchored) playsound(src, W.usesound, 50, 1) if(do_after(user, 20, src)) - user.visible_message("\The [user] dismantles \the [src].", span_notice("You dismantle \the [src].")) + user.visible_message(span_infoplain(span_bold("\The [user]") + " dismantles \the [src]."), span_notice("You dismantle \the [src].")) new /obj/item/stack/material/steel(get_turf(usr), 2) qdel(src) return @@ -216,13 +216,13 @@ if(F.welding) playsound(src, F.usesound, 50, 1) if(do_after(user, 20, src)) - user.visible_message("\The [user] repairs some damage to \the [src].", span_notice("You repair some damage to \the [src].")) + user.visible_message(span_infoplain(span_bold("\The [user]") + " repairs some damage to \the [src]."), span_notice("You repair some damage to \the [src].")) health = min(health+(maxhealth/5), maxhealth) // 20% repair per application return // Install if(W.has_tool_quality(TOOL_SCREWDRIVER)) - user.visible_message(anchored ? "\The [user] begins unscrewing \the [src]." : "\The [user] begins fasten \the [src]." ) + user.visible_message(span_info(anchored ? span_bold("\The [user]") + " begins unscrewing \the [src]." : span_bold("\The [user]") + "begins fasten \the [src]." )) playsound(src, W.usesound, 75, 1) if(do_after(user, 10, src)) to_chat(user, (anchored ? span_notice("You have unfastened \the [src] from the floor.") : span_notice("You have fastened \the [src] to the floor."))) diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index dc9a3426cea..dc14447db1e 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -48,7 +48,7 @@ FLOOR SAFES if(tumbler_2_pos == tumbler_2_open) to_chat(user, span_notice("You hear a [pick("tink", "krink", "plink")] from \the [src].")) if(tumbler_1_pos == tumbler_1_open && tumbler_2_pos == tumbler_2_open) - if(user) visible_message("[pick("Spring", "Sprang", "Sproing", "Clunk", "Krunk")]!") + if(user) visible_message(span_infoplain(span_bold("[pick("Spring", "Sprang", "Sproing", "Clunk", "Krunk")]!"))) return 1 return 0 diff --git a/code/game/objects/structures/salvageable.dm b/code/game/objects/structures/salvageable.dm index a114fd2cd7c..fa0f5fa02bc 100644 --- a/code/game/objects/structures/salvageable.dm +++ b/code/game/objects/structures/salvageable.dm @@ -18,7 +18,7 @@ playsound(src, I.usesound, 50, 1) var/actual_time = I.toolspeed * 170 user.visible_message( \ - "\The [user] begins salvaging from \the [src].", \ + span_infoplain(span_bold("\The [user]") + " begins salvaging from \the [src]."), \ span_notice("You start salvaging from \the [src].")) if(do_after(user, actual_time, target = src)) user.visible_message( \ diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 8533cb8e87b..f9585448e8d 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -1494,7 +1494,7 @@ . = ..() . += "The calendar shows that the date is [stationdate2text()]." if (Holiday.len) - . += "Today is [english_list(Holiday)]." + . += "Today is " + span_bold(span_green("[english_list(Holiday)]")) + "." /obj/structure/sign/explosive name = "\improper HIGH EXPLOSIVES sign" diff --git a/code/game/objects/structures/under_wardrobe.dm b/code/game/objects/structures/under_wardrobe.dm index b94ac40b8f0..6e30940f732 100644 --- a/code/game/objects/structures/under_wardrobe.dm +++ b/code/game/objects/structures/under_wardrobe.dm @@ -13,7 +13,7 @@ /obj/structure/undies_wardrobe/interact(var/mob/living/carbon/human/H) var/dat = list() - dat += "Underwear:
" + dat += span_bold("Underwear:") + "
" for(var/datum/category_group/underwear/UWC in global_underwear.categories) var/datum/category_item/underwear/UWI = H.all_underwear[UWC.name] var/item_name = UWI ? UWI.name : "None" diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index acf6025af75..c6bab800416 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -525,7 +525,7 @@ to_chat(usr, span_warning("\The [thing] is empty.")) return // Clear the vessel. - visible_message("\The [usr] tips the contents of \the [thing] into \the [src].") + visible_message(span_infoplain(span_bold("\The [usr]") + " tips the contents of \the [thing] into \the [src].")) thing.reagents.clear_reagents() thing.update_icon() @@ -559,9 +559,22 @@ return busy = 0 - user.clean_blood() if(ishuman(user)) - user:update_inv_gloves() + var/mob/living/carbon/human/H = user + H.gunshot_residue = null + if(H.gloves) + H.gloves.clean_blood() + H.update_inv_gloves() + H.gloves.germ_level = 0 + else + if(H.r_hand) + H.r_hand.clean_blood() + if(H.l_hand) + H.l_hand.clean_blood() + H.bloody_hands = 0 + H.germ_level = 0 + else + user.clean_blood() for(var/mob/V in viewers(src, null)) V.show_message(span_notice("[user] washes their hands using \the [src].")) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 178c9c21cc3..7221282f1db 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -215,7 +215,7 @@ damage = damage / 2 take_damage(damage) else - visible_message("\The [user] bonks \the [src] harmlessly.") + visible_message(span_infoplain(span_bold("\The [user]") + " bonks \the [src] harmlessly.")) user.do_attack_animation(src) return 1 @@ -304,7 +304,7 @@ if (C.use(1)) playsound(src, 'sound/effects/sparks1.ogg', 75, 1) user.visible_message( \ - "\The [user] begins to wire \the [src] for electrochromic tinting.", \ + span_infoplain(span_bold("\The [user]") + " begins to wire \the [src] for electrochromic tinting."), \ span_notice("You begin to wire \the [src] for electrochromic tinting."), \ "You hear sparks.") if(do_after(user, 20 * C.toolspeed, src) && state == 0) diff --git a/code/game/vehicles/vehicle.dm b/code/game/vehicles/vehicle.dm index 729cadb2c43..1ce4a71c24b 100644 --- a/code/game/vehicles/vehicle.dm +++ b/code/game/vehicles/vehicle.dm @@ -69,10 +69,10 @@ /obj/vehicle/proc/removeVerb(verb_path) - verbs -= verb_path + src.verbs -= verb_path /obj/vehicle/proc/addVerb(verb_path) - verbs += verb_path + src.verbs += verb_path /obj/vehicle/proc/add_cell(var/obj/item/cell/C=null) if(C) diff --git a/code/game/world.dm b/code/game/world.dm index 428a24ddb62..bdeff6725f9 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -516,9 +516,9 @@ var/world_topic_spam_protect_time = world.timeofday var/s = "" if (config && config.server_name) - s += "[config.server_name] — " + s += span_bold("[config.server_name]") + " — " - s += "[station_name()]"; + s += span_bold("[station_name()]"); s += " (" s += "" //Change this to wherever you want the hub to link to. // s += "[game_version]" @@ -532,7 +532,7 @@ var/world_topic_spam_protect_time = world.timeofday if(master_mode) features += master_mode else - features += "STARTING" + features += span_bold("STARTING") if (!config.enter_allowed) features += "closed" diff --git a/code/modules/admin/DB ban/functions.dm b/code/modules/admin/DB ban/functions.dm index 4eef2a3724b..8b7f6cf01fa 100644 --- a/code/modules/admin/DB ban/functions.dm +++ b/code/modules/admin/DB ban/functions.dm @@ -280,7 +280,7 @@ output += "
" output += "" output += "" output += "" output += "" - output += "" + output += "" output += "" output += "" output += "" diff --git a/code/modules/admin/ToRban.dm b/code/modules/admin/ToRban.dm index 4027234428e..d8e39edfd96 100644 --- a/code/modules/admin/ToRban.dm +++ b/code/modules/admin/ToRban.dm @@ -73,14 +73,14 @@ var/choice = tgui_input_list(src,"Please select an IP address to remove from the ToR banlist:","Remove ToR ban", F.dir) if(choice) F.dir.Remove(choice) - to_chat(src, span_filter_adminlog("Address removed")) + to_chat(src, span_filter_adminlog(span_bold("Address removed"))) if("remove all") - to_chat(src, span_filter_adminlog("[TORFILE] was [fdel(TORFILE)?"":"not "]removed.")) + to_chat(src, span_filter_adminlog(span_bold("[TORFILE] was [fdel(TORFILE)?"":"not "]removed."))) if("find") var/input = tgui_input_text(src,"Please input an IP address to search for:","Find ToR ban",null) if(input) if(ToRban_isbanned(input)) - to_chat(src, span_filter_adminlog("[span_orange("Address is a known ToR address")]")) + to_chat(src, span_filter_adminlog("[span_orange(span_bold("Address is a known ToR address"))]")) else to_chat(src, span_filter_adminlog(span_danger("Address is not a known ToR address"))) return diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 8a91738a56e..4eb8e4172e6 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -3,7 +3,7 @@ var/global/floorIsLava = 0 //////////////////////////////// /proc/message_admins(var/msg) - msg = "ADMIN LOG: [msg]" + msg = span_filter_adminlog(span_log_message(span_prefix("ADMIN LOG:") + span_message("[msg]"))) //log_adminwarn(msg) //log_and_message_admins is for this for(var/client/C in GLOB.admins) @@ -14,7 +14,7 @@ var/global/floorIsLava = 0 confidential = TRUE) /proc/msg_admin_attack(var/text) //Toggleable Attack Messages - var/rendered = "ATTACK: [text]" + var/rendered = span_filter_attacklog(span_log_message(span_prefix("ATTACK:") + span_message("[text]"))) for(var/client/C in GLOB.admins) if((R_ADMIN|R_MOD) & C.holder.rights) if(C.prefs?.read_preference(/datum/preference/toggle/show_attack_logs)) @@ -104,7 +104,7 @@ var/global/floorIsLava = 0 if (M.client) if(!istype(M, /mob/new_player)) body += "

" - body += "Transformation:" + body += span_bold("Transformation:") body += "
" //Monkey @@ -318,13 +318,13 @@ var/global/floorIsLava = 0 if(1) dat+= "Station Feed Channels
" if( isemptylist(news_network.network_channels) ) - dat+="No active channels found..." + dat+=span_italics("No active channels found...") else for(var/datum/feed_channel/CHANNEL in news_network.network_channels) if(CHANNEL.is_admin_channel) dat+="
[CHANNEL.channel_name]
" else - dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : null]
" + dat+=span_bold("[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : null]
") dat+={"

Refresh
Back "} @@ -460,7 +460,7 @@ var/global/floorIsLava = 0 dat+="
Back" if(14) - dat+="Wanted Issue Handler:" + dat+=span_bold("Wanted Issue Handler:") var/wanted_already = 0 var/end_param = 1 if(news_network.wanted_issue) @@ -627,7 +627,7 @@ var/global/floorIsLava = 0 if(!check_rights(R_SERVER,0)) message = sanitize(message, 500, extra = 0) message = replacetext(message, "\n", "
") // required since we're putting it in a

tag - to_world("[usr.client.holder.fakekey ? "Administrator" : usr.key] Announces:

[message]

") + to_world(span_notice(span_bold("[usr.client.holder.fakekey ? "Administrator" : usr.key] Announces:") + "

[message]

")) log_admin("Announce: [key_name(usr)] : [message]") feedback_add_details("admin_verb","A") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -678,7 +678,7 @@ var/datum/announcement/minor/admin_min_announcer = new if(!speech_verb) return - to_chat(usr, "Intercom Convo Directions
Start the conversation with the sender, a pipe (|), and then the message on one line. Then hit enter to \ + to_chat(usr, span_notice(span_bold("Intercom Convo Directions") + "
Start the conversation with the sender, a pipe (|), and then the message on one line. Then hit enter to \ add another line, and type a (whole) number of seconds to pause between that message, and the next message, then repeat the message syntax up to 20 times. For example:
\ --- --- ---
\ Some Guy|Hello guys, what's up?
\ @@ -687,7 +687,7 @@ var/datum/announcement/minor/admin_min_announcer = new 5
\ Some Guy|Yeah, you too.
\ --- --- ---
\ - The above will result in those messages playing, with a 5 second gap between each. Maximum of 20 messages allowed.
") + The above will result in those messages playing, with a 5 second gap between each. Maximum of 20 messages allowed.")) var/list/decomposed var/message = tgui_input_text(usr,"See your chat box for instructions. Keep a copy elsewhere in case it is rejected when you click OK.", "Input Conversation", "", multiline = TRUE, prevent_enter = TRUE) @@ -759,9 +759,9 @@ var/datum/announcement/minor/admin_min_announcer = new config.ooc_allowed = !(config.ooc_allowed) if (config.ooc_allowed) - to_world("The OOC channel has been globally enabled!") + to_world(span_world("The OOC channel has been globally enabled!")) else - to_world("The OOC channel has been globally disabled!") + to_world(span_world("The OOC channel has been globally disabled!")) log_and_message_admins("toggled OOC.") feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -775,9 +775,9 @@ var/datum/announcement/minor/admin_min_announcer = new config.looc_allowed = !(config.looc_allowed) if (config.looc_allowed) - to_world("The LOOC channel has been globally enabled!") + to_world(span_world("The LOOC channel has been globally enabled!")) else - to_world("The LOOC channel has been globally disabled!") + to_world(span_world("The LOOC channel has been globally disabled!")) log_and_message_admins("toggled LOOC.") feedback_add_details("admin_verb","TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -792,9 +792,9 @@ var/datum/announcement/minor/admin_min_announcer = new config.dsay_allowed = !(config.dsay_allowed) if (config.dsay_allowed) - to_world("Deadchat has been globally enabled!") + to_world(span_world("Deadchat has been globally enabled!")) else - to_world("Deadchat has been globally disabled!") + to_world(span_world("Deadchat has been globally disabled!")) log_admin("[key_name(usr)] toggled deadchat.") message_admins("[key_name_admin(usr)] toggled deadchat.", 1) feedback_add_details("admin_verb","TDSAY") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc @@ -854,7 +854,7 @@ var/datum/announcement/minor/admin_min_announcer = new feedback_add_details("admin_verb","SN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! else SSticker.start_immediately = FALSE - to_world(span_notice("Immediate game start canceled. Normal startup resumed.")) + to_world(span_filter_system(span_blue("Immediate game start canceled. Normal startup resumed."))) log_and_message_admins("cancelled immediate game start.") /datum/admins/proc/toggleenter() @@ -863,9 +863,9 @@ var/datum/announcement/minor/admin_min_announcer = new set name="Toggle Entering" config.enter_allowed = !(config.enter_allowed) if (!(config.enter_allowed)) - to_world("New players may no longer enter the game.") + to_world(span_world("New players may no longer enter the game.")) else - to_world("New players may now enter the game.") + to_world(span_world("New players may now enter the game.")) log_admin("[key_name(usr)] toggled new player game entering.") message_admins(span_blue("[key_name_admin(usr)] toggled new player game entering."), 1) world.update_status() @@ -877,9 +877,9 @@ var/datum/announcement/minor/admin_min_announcer = new set name="Toggle AI" config.allow_ai = !( config.allow_ai ) if (!( config.allow_ai )) - to_world("The AI job is no longer chooseable.") + to_world(span_world("The AI job is no longer chooseable.")) else - to_world("The AI job is chooseable now.") + to_world(span_world("The AI job is chooseable now.")) log_admin("[key_name(usr)] toggled AI allowed.") world.update_status() feedback_add_details("admin_verb","TAI") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -890,9 +890,9 @@ var/datum/announcement/minor/admin_min_announcer = new set name="Toggle Respawn" config.abandon_allowed = !(config.abandon_allowed) if(config.abandon_allowed) - to_world("You may now respawn.") + to_world(span_world("You may now respawn.")) else - to_world("You may no longer respawn :(") + to_world(span_world("You may no longer respawn :(")) message_admins(span_blue("[key_name_admin(usr)] toggled respawn to [config.abandon_allowed ? "On" : "Off"]."), 1) log_admin("[key_name(usr)] toggled respawn to [config.abandon_allowed ? "On" : "Off"].") world.update_status() @@ -904,9 +904,9 @@ var/datum/announcement/minor/admin_min_announcer = new set name="Toggle Persistent Data" config.persistence_disabled = !(config.persistence_disabled) if(!config.persistence_disabled) - to_world("Persistence is now enabled..") + to_world(span_world("Persistence is now enabled.")) else - to_world("Persistence is no longer enabled.") + to_world(span_world("Persistence is no longer enabled.")) message_admins(span_blue("[key_name_admin(usr)] toggled persistence to [config.persistence_disabled ? "Off" : "On"]."), 1) log_admin("[key_name(usr)] toggled persistence to [config.persistence_disabled ? "Off" : "On"].") world.update_status() @@ -918,9 +918,9 @@ var/datum/announcement/minor/admin_min_announcer = new set name="Toggle Mapload Persistent Data" config.persistence_ignore_mapload = !(config.persistence_ignore_mapload) if(!config.persistence_ignore_mapload) - to_world("Persistence is now enabled..") + to_world(span_world("Persistence is now enabled.")) else - to_world("Persistence is no longer enabled.") + to_world(span_world("Persistence is no longer enabled.")) message_admins(span_blue("[key_name_admin(usr)] toggled persistence to [config.persistence_ignore_mapload ? "Off" : "On"]."), 1) log_admin("[key_name(usr)] toggled persistence to [config.persistence_ignore_mapload ? "Off" : "On"].") world.update_status() @@ -957,10 +957,10 @@ var/datum/announcement/minor/admin_min_announcer = new return round_progressing = !round_progressing if (!round_progressing) - to_world("The game start has been delayed.") + to_world(span_world("The game start has been delayed.")) log_admin("[key_name(usr)] delayed the game.") else - to_world("The game will start soon.") + to_world(span_world("The game will start soon.")) log_admin("[key_name(usr)] removed the delay.") feedback_add_details("admin_verb","DELAY") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -995,7 +995,7 @@ var/datum/announcement/minor/admin_min_announcer = new if(!usr.client.holder) return if(alert(usr, "Reboot server?","Reboot!","Yes","No") != "Yes") // Not tgui_alert for safety return - to_world("[span_red("Rebooting world!")] [span_blue("Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key]!")]") + to_world(span_filter_system("[span_red(span_bold("Rebooting world!"))] [span_blue("Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key]!")]")) log_admin("[key_name(usr)] initiated an immediate reboot.") feedback_set_details("end_error","immediate admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]") @@ -1223,7 +1223,7 @@ var/datum/announcement/minor/admin_min_announcer = new else out += "Autotraitor disabled.
" - out += "All antag ids:" + out += span_bold("All antag ids:") if(ticker.mode.antag_templates && ticker.mode.antag_templates.len) for(var/datum/antagonist/antag in ticker.mode.antag_templates) antag.update_current_antag_max() @@ -1244,9 +1244,9 @@ var/datum/announcement/minor/admin_min_announcer = new set name="Toggle tinted welding helmets." config.welder_vision = !( config.welder_vision ) if (config.welder_vision) - to_world("Reduced welder vision has been enabled!") + to_world(span_world("Reduced welder vision has been enabled!")) else - to_world("Reduced welder vision has been disabled!") + to_world(span_world("Reduced welder vision has been disabled!")) log_admin("[key_name(usr)] toggled welder vision.") message_admins("[key_name_admin(usr)] toggled welder vision.", 1) feedback_add_details("admin_verb","TTWH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -1257,9 +1257,9 @@ var/datum/announcement/minor/admin_min_announcer = new set name="Toggle guests" config.guests_allowed = !(config.guests_allowed) if (!(config.guests_allowed)) - to_world("Guests may no longer enter the game.") + to_world(span_world("Guests may no longer enter the game.")) else - to_world("Guests may now enter the game.") + to_world(span_world("Guests may now enter the game.")) log_admin("[key_name(usr)] toggled guests game entering [config.guests_allowed?"":"dis"]allowed.") message_admins(span_blue("[key_name_admin(usr)] toggled guests game entering [config.guests_allowed?"":"dis"]allowed."), 1) feedback_add_details("admin_verb","TGU") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -1269,21 +1269,21 @@ var/datum/announcement/minor/admin_min_announcer = new for(var/mob/living/silicon/S in mob_list) ai_number++ if(isAI(S)) - to_chat(usr, "AI [key_name(S, usr)]'s laws:") + to_chat(usr, span_bold("AI [key_name(S, usr)]'s laws:")) else if(isrobot(S)) var/mob/living/silicon/robot/R = S - to_chat(usr, "CYBORG [key_name(S, usr)] [R.connected_ai?"(Slaved to: [R.connected_ai])":"(Independent)"]: laws:") + to_chat(usr, span_bold("CYBORG [key_name(S, usr)] [R.connected_ai?"(Slaved to: [R.connected_ai])":"(Independent)"]: laws:")) else if (ispAI(S)) - to_chat(usr, "pAI [key_name(S, usr)]'s laws:") + to_chat(usr, span_bold("pAI [key_name(S, usr)]'s laws:")) else - to_chat(usr, "SOMETHING SILICON [key_name(S, usr)]'s laws:") + to_chat(usr, span_bold("SOMETHING SILICON [key_name(S, usr)]'s laws:")) if (S.laws == null) to_chat(usr, "[key_name(S, usr)]'s laws are null?? Contact a coder.") else S.laws.show_laws(usr) if(!ai_number) - to_chat(usr, "No AIs located") //Just so you know the thing is actually working and not just ignoring you. + to_chat(usr, span_bold("No AIs located")) //Just so you know the thing is actually working and not just ignoring you. /datum/admins/proc/show_skills() set category = "Admin" @@ -1316,7 +1316,7 @@ var/datum/announcement/minor/admin_min_announcer = new /proc/get_options_bar(whom, detail = 2, name = 0, link = 1, highlight_special = 1) if(!whom) - return "(*null*)" + return span_bold("(*null*)") var/mob/M var/client/C if(istype(whom, /client)) @@ -1326,25 +1326,25 @@ var/datum/announcement/minor/admin_min_announcer = new M = whom C = M.client else - return "(*not a mob*)" + return span_bold("(*not a mob*)") switch(detail) if(0) - return "[key_name(C, link, name, highlight_special)]" + return span_bold("[key_name(C, link, name, highlight_special)]") if(1) //Private Messages - return "[key_name(C, link, name, highlight_special)](?)" + return span_bold("[key_name(C, link, name, highlight_special)](?)") if(2) //Admins var/ref_mob = "\ref[M]" - return "[key_name(C, link, name, highlight_special)](?) (PP) (VV) (SM) ([admin_jump_link(M)]) (CA) (TAKE)" + return span_bold("[key_name(C, link, name, highlight_special)](?) (PP) (VV) (SM) ([admin_jump_link(M)]) (CA) (TAKE)") if(3) //Devs var/ref_mob = "\ref[M]" - return "[key_name(C, link, name, highlight_special)](VV)([admin_jump_link(M)]) (TAKE)" + return span_bold("[key_name(C, link, name, highlight_special)](VV)([admin_jump_link(M)]) (TAKE)") if(4) //Event Managers var/ref_mob = "\ref[M]" - return "[key_name(C, link, name, highlight_special)] (?) (PP) (VV) (SM) ([admin_jump_link(M)]) (TAKE)" + return span_bold("[key_name(C, link, name, highlight_special)] (?) (PP) (VV) (SM) ([admin_jump_link(M)]) (TAKE)") /proc/ishost(whom) diff --git a/code/modules/admin/admin_memo.dm b/code/modules/admin/admin_memo.dm index 9e918395266..23ce2bc7e86 100644 --- a/code/modules/admin/admin_memo.dm +++ b/code/modules/admin/admin_memo.dm @@ -24,7 +24,7 @@ return if("") F.dir.Remove(ckey) - to_chat(src, span_filter_adminlog("Memo removed")) + to_chat(src, span_filter_adminlog(span_bold("Memo removed"))) return if( findtext(memo,"Removed Memo created by [ckey].")) + to_chat(src, span_filter_adminlog(span_bold("Removed Memo created by [ckey]."))) #undef MEMOFILE #undef ENABLE_MEMOS diff --git a/code/modules/admin/admin_report.dm b/code/modules/admin/admin_report.dm index 6cfb778d911..d265f2cd1e3 100644 --- a/code/modules/admin/admin_report.dm +++ b/code/modules/admin/admin_report.dm @@ -103,8 +103,8 @@ world/New() for(var/datum/admin_report/N in reports) if(N.done) continue - output += "Reported player: [N.offender_key](CID: [N.offender_cid])
" - output += "Offense:[N.body]
" + output += span_bold("Reported player:") + " [N.offender_key](CID: [N.offender_cid])
" + output += span_bold("Offense:") + "[N.body]
" output += "Occurred at [time2text(N.date,"MM/DD hh:mm:ss")]
" output += "authored by [N.author]
" output += " Flag as Handled" @@ -150,7 +150,7 @@ world/New() if(N.ID == ID) found = N if(!found) - to_chat(src, "* An error occurred, sorry.") + to_chat(src, span_boldwarning("* An error occurred, sorry.")) found.done = 1 @@ -159,7 +159,7 @@ world/New() /client/proc/edit_report(ID as num) if(!src.holder || src.holder.level < 0) - to_chat(src, "You tried to modify the news, but you're not an admin!") + to_chat(src, span_boldwarning("You tried to modify the news, but you're not an admin!")) return var/savefile/Reports = new("data/reports.sav") @@ -172,7 +172,7 @@ world/New() if(N.ID == ID) found = N if(!found) - to_chat(src, "* An error occurred, sorry.") + to_chat(src, span_boldwarning("* An error occurred, sorry.")) var/body = tgui_input_text(src.mob, "Enter a body for the news", "Body", multiline = TRUE, prevent_enter = TRUE) if(!body) return diff --git a/code/modules/admin/admin_tools.dm b/code/modules/admin/admin_tools.dm index 6bac63e7ca8..323d046a8d8 100644 --- a/code/modules/admin/admin_tools.dm +++ b/code/modules/admin/admin_tools.dm @@ -4,11 +4,11 @@ set desc = "Check a player's attack logs." //Views specific attack logs belonging to one player. - var/dat = "[M]'s Attack Log:
" - dat += "Viewing attack logs of [M] - (Played by ([key_name(M)]).
" + var/dat = span_bold("[M]'s Attack Log:
") + dat += span_bold("Viewing attack logs of [M]") + " - (Played by ([key_name(M)]).
" if(M.mind) - dat += "Current Antag?: [(M.mind.special_role)?"Yes":"No"]
" - dat += "
Note: This is arranged from earliest to latest.

" + dat += span_bold("Current Antag?:") + " [(M.mind.special_role)?"Yes":"No"]
" + dat += "
" + span_bold("Note:") + " This is arranged from earliest to latest.

" if(!isemptylist(M.attack_log)) @@ -19,7 +19,7 @@ dat += "" else - dat += "No attack logs found for [M]." + dat += span_italics("No attack logs found for [M].") var/datum/browser/popup = new(usr, "admin_attack_log", "[src]", 650, 650, src) popup.set_content(jointext(dat,null)) @@ -35,11 +35,11 @@ set desc = "Check a player's dialogue logs." //Views specific dialogue logs belonging to one player. - var/dat = "[M]'s Dialogue Log:
" - dat += "Viewing say and emote logs of [M] - (Played by ([key_name(M)]).
" + var/dat = span_bold("[M]'s Dialogue Log:
") + dat += span_bold("Viewing say and emote logs of [M]") + " - (Played by ([key_name(M)]).
" if(M.mind) - dat += "Current Antag?: [(M.mind.special_role)?"Yes":"No"]
" - dat += "
Note: This is arranged from earliest to latest.

" + dat += span_bold("Current Antag?:") + " [(M.mind.special_role)?"Yes":"No"]
" + dat += "
" + span_bold("Note:") + " This is arranged from earliest to latest.

" if(!isemptylist(M.dialogue_log)) dat += "
" @@ -49,7 +49,7 @@ dat += "
" else - dat += "No dialogue logs found for [M]." + dat += span_italics("No dialogue logs found for [M].") var/datum/browser/popup = new(usr, "admin_dialogue_log", "[src]", 650, 650, src) popup.set_content(jointext(dat,null)) popup.open() @@ -57,4 +57,4 @@ onclose(usr, "admin_dialogue_log") - feedback_add_details("admin_verb","PDL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! \ No newline at end of file + feedback_add_details("admin_verb","PDL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/admin_verb_lists.dm b/code/modules/admin/admin_verb_lists.dm index a39fc3b1023..c0c031d2443 100644 --- a/code/modules/admin/admin_verb_lists.dm +++ b/code/modules/admin/admin_verb_lists.dm @@ -13,6 +13,7 @@ var/list/admin_verbs_default = list( // /client/proc/cmd_mod_say, // /client/proc/deadchat //toggles deadchat on/off, // /client/proc/toggle_ahelp_sound, + /client/proc/debugstatpanel, ) var/list/admin_verbs_admin = list( @@ -507,27 +508,27 @@ var/list/admin_verbs_event_manager = list( /client/proc/add_admin_verbs() if(holder) - verbs += admin_verbs_default - if(holder.rights & R_BUILDMODE) verbs += /client/proc/togglebuildmodeself - if(holder.rights & R_ADMIN) verbs += admin_verbs_admin - if(holder.rights & R_BAN) verbs += admin_verbs_ban - if(holder.rights & R_FUN) verbs += admin_verbs_fun - if(holder.rights & R_SERVER) verbs += admin_verbs_server + add_verb(src, admin_verbs_default) + if(holder.rights & R_BUILDMODE) add_verb(src, /client/proc/togglebuildmodeself) + if(holder.rights & R_ADMIN) add_verb(src, admin_verbs_admin) + if(holder.rights & R_BAN) add_verb(src, admin_verbs_ban) + if(holder.rights & R_FUN) add_verb(src, admin_verbs_fun) + if(holder.rights & R_SERVER) add_verb(src, admin_verbs_server) if(holder.rights & R_DEBUG) - verbs += admin_verbs_debug + add_verb(src, admin_verbs_debug) if(config.debugparanoid && !(holder.rights & R_ADMIN)) - verbs.Remove(admin_verbs_paranoid_debug) //Right now it's just callproc but we can easily add others later on. - if(holder.rights & R_POSSESS) verbs += admin_verbs_possess - if(holder.rights & R_PERMISSIONS) verbs += admin_verbs_permissions - if(holder.rights & R_STEALTH) verbs += /client/proc/stealth - if(holder.rights & R_REJUVINATE) verbs += admin_verbs_rejuv - if(holder.rights & R_SOUNDS) verbs += admin_verbs_sounds - if(holder.rights & R_SPAWN) verbs += admin_verbs_spawn - if(holder.rights & R_MOD) verbs += admin_verbs_mod - if(holder.rights & R_EVENT) verbs += admin_verbs_event_manager + remove_verb(src, admin_verbs_paranoid_debug) //Right now it's just callproc but we can easily add others later on. + if(holder.rights & R_POSSESS) add_verb(src, admin_verbs_possess) + if(holder.rights & R_PERMISSIONS) add_verb(src, admin_verbs_permissions) + if(holder.rights & R_STEALTH) add_verb(src, /client/proc/stealth) + if(holder.rights & R_REJUVINATE) add_verb(src, admin_verbs_rejuv) + if(holder.rights & R_SOUNDS) add_verb(src, admin_verbs_sounds) + if(holder.rights & R_SPAWN) add_verb(src, admin_verbs_spawn) + if(holder.rights & R_MOD) add_verb(src, admin_verbs_mod) + if(holder.rights & R_EVENT) add_verb(src, admin_verbs_event_manager) /client/proc/remove_admin_verbs() - verbs.Remove( + remove_verb(src, list( admin_verbs_default, /client/proc/togglebuildmodeself, admin_verbs_admin, @@ -542,4 +543,4 @@ var/list/admin_verbs_event_manager = list( admin_verbs_sounds, admin_verbs_spawn, debug_verbs - ) + )) diff --git a/code/modules/admin/admin_verb_lists_vr.dm b/code/modules/admin/admin_verb_lists_vr.dm index 3add1b74082..4ab7d8c6e61 100644 --- a/code/modules/admin/admin_verb_lists_vr.dm +++ b/code/modules/admin/admin_verb_lists_vr.dm @@ -18,6 +18,7 @@ var/list/admin_verbs_default = list( // /client/proc/cmd_mod_say, // /client/proc/deadchat //toggles deadchat on/off, // /client/proc/toggle_ahelp_sound, + /client/proc/debugstatpanel, ) var/list/admin_verbs_admin = list( @@ -568,27 +569,27 @@ var/list/admin_verbs_event_manager = list( /client/proc/add_admin_verbs() if(holder) - verbs += admin_verbs_default - if(holder.rights & R_BUILDMODE) verbs += /client/proc/togglebuildmodeself - if(holder.rights & R_ADMIN) verbs += admin_verbs_admin - if(holder.rights & R_BAN) verbs += admin_verbs_ban - if(holder.rights & R_FUN) verbs += admin_verbs_fun - if(holder.rights & R_SERVER) verbs += admin_verbs_server + add_verb(src, admin_verbs_default) + if(holder.rights & R_BUILDMODE) add_verb(src, /client/proc/togglebuildmodeself) + if(holder.rights & R_ADMIN) add_verb(src, admin_verbs_admin) + if(holder.rights & R_BAN) add_verb(src, admin_verbs_ban) + if(holder.rights & R_FUN) add_verb(src, admin_verbs_fun) + if(holder.rights & R_SERVER) add_verb(src, admin_verbs_server) if(holder.rights & R_DEBUG) - verbs += admin_verbs_debug + add_verb(src, admin_verbs_debug) if(config.debugparanoid && !(holder.rights & R_ADMIN)) - verbs.Remove(admin_verbs_paranoid_debug) //Right now it's just callproc but we can easily add others later on. - if(holder.rights & R_POSSESS) verbs += admin_verbs_possess - if(holder.rights & R_PERMISSIONS) verbs += admin_verbs_permissions - if(holder.rights & R_STEALTH) verbs += /client/proc/stealth - if(holder.rights & R_REJUVINATE) verbs += admin_verbs_rejuv - if(holder.rights & R_SOUNDS) verbs += admin_verbs_sounds - if(holder.rights & R_SPAWN) verbs += admin_verbs_spawn - if(holder.rights & R_MOD) verbs += admin_verbs_mod - if(holder.rights & R_EVENT) verbs += admin_verbs_event_manager + remove_verb(src, admin_verbs_paranoid_debug) //Right now it's just callproc but we can easily add others later on. + if(holder.rights & R_POSSESS) add_verb(src, admin_verbs_possess) + if(holder.rights & R_PERMISSIONS) add_verb(src, admin_verbs_permissions) + if(holder.rights & R_STEALTH) add_verb(src, /client/proc/stealth) + if(holder.rights & R_REJUVINATE) add_verb(src, admin_verbs_rejuv) + if(holder.rights & R_SOUNDS) add_verb(src, admin_verbs_sounds) + if(holder.rights & R_SPAWN) add_verb(src, admin_verbs_spawn) + if(holder.rights & R_MOD) add_verb(src, admin_verbs_mod) + if(holder.rights & R_EVENT) add_verb(src, admin_verbs_event_manager) /client/proc/remove_admin_verbs() - verbs.Remove( + remove_verb(src, list( admin_verbs_default, /client/proc/togglebuildmodeself, admin_verbs_admin, @@ -603,4 +604,4 @@ var/list/admin_verbs_event_manager = list( admin_verbs_sounds, admin_verbs_spawn, debug_verbs - ) + )) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 659905aac71..85547445496 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -2,8 +2,8 @@ set name = "Adminverbs - Hide Most" set category = "Admin" - verbs.Remove(/client/proc/hide_most_verbs, admin_verbs_hideable) - verbs += /client/proc/show_verbs + remove_verb(src, list(/client/proc/hide_most_verbs, admin_verbs_hideable)) + add_verb(src, /client/proc/show_verbs) to_chat(src, span_filter_system(span_interface("Most of your adminverbs have been hidden."))) feedback_add_details("admin_verb","HMV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -14,7 +14,7 @@ set category = "Admin" remove_admin_verbs() - verbs += /client/proc/show_verbs + add_verb(src, /client/proc/show_verbs) to_chat(src, span_filter_system(span_interface("Almost all of your adminverbs have been hidden."))) feedback_add_details("admin_verb","TAVVH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -24,7 +24,7 @@ set name = "Adminverbs - Show" set category = "Admin" - verbs -= /client/proc/show_verbs + remove_verb(src, /client/proc/show_verbs) add_admin_verbs() to_chat(src, span_filter_adminlog(span_interface("All of your adminverbs are now visible."))) @@ -32,7 +32,7 @@ /client/proc/admin_ghost() - set category = "Admin" + set category = "Admin.Game" set name = "Aghost" if(!holder) return @@ -74,6 +74,7 @@ else ghost = body.ghostize(1) ghost.admin_ghosted = 1 + init_verbs() if(body) body.teleop = ghost if(!body.key) @@ -82,7 +83,7 @@ /client/proc/invisimin() set name = "Invisimin" - set category = "Admin" + set category = "Admin.Game" set desc = "Toggles ghost-like invisibility (Don't abuse this)" if(holder && mob) if(mob.invisibility == INVISIBILITY_OBSERVER) @@ -91,7 +92,7 @@ mob.alpha = max(mob.alpha + 100, 255) else mob.invisibility = INVISIBILITY_OBSERVER - to_chat(mob, span_filter_system(span_notice("Invisimin on. You are now as invisible as a ghost."))) + to_chat(mob, span_filter_system(span_boldnotice("Invisimin on. You are now as invisible as a ghost."))) mob.alpha = max(mob.alpha - 100, 0) @@ -144,7 +145,7 @@ /client/proc/game_panel() set name = "Game Panel" - set category = "Admin" + set category = "Admin.Game" if(holder) holder.Game() feedback_add_details("admin_verb","GP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -255,7 +256,7 @@ #undef AUTOBANTIME /client/proc/drop_bomb() // Some admin dickery that can probably be done better -- TLE - set category = "Special Verbs" + set category = "Special Verbs.Fun" set name = "Drop Bomb" set desc = "Cause an explosion of varying strength at your location." @@ -338,7 +339,7 @@ log_and_message_admins("has given [key_name(L)] the modifer [new_modifier_type], with a duration of [duration ? "[duration / 600] minutes" : "forever"].") /client/proc/make_sound(var/obj/O in world) // -- TLE - set category = "Special Verbs" + set category = "Special Verbs.Events" set name = "Make Sound" set desc = "Display a message to everyone who can hear the target" if(O) @@ -353,20 +354,20 @@ /client/proc/togglebuildmodeself() set name = "Toggle Build Mode Self" - set category = "Special Verbs" + set category = "Special Verbs.Events" if(src.mob) togglebuildmode(src.mob) feedback_add_details("admin_verb","TBMS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/object_talk(var/msg as text) // -- TLE - set category = "Special Verbs" + set category = "Special Verbs.Events" set name = "oSay" set desc = "Display a message to everyone who can hear the target" if(mob.control_object) if(!msg) return for (var/mob/V in hearers(mob.control_object)) - V.show_message(span_filter_say("[mob.control_object.name] says: \"[msg]\""), 2) + V.show_message(span_filter_say(span_bold("[mob.control_object.name]") + " says: \"[msg]\""), 2) feedback_add_details("admin_verb","OT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/kill_air() // -- TLE @@ -374,7 +375,7 @@ set name = "Kill Air" set desc = "Toggle Air Processing" SSair.can_fire = !SSair.can_fire - to_chat(usr, span_filter_system("[SSair.can_fire ? "En" : "Dis"]abled air processing.")) + to_chat(usr, span_filter_system(span_bold("[SSair.can_fire ? "En" : "Dis"]abled air processing."))) feedback_add_details("admin_verb","KA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! log_admin("[key_name(usr)] used 'kill air'.") message_admins(span_blue("[key_name_admin(usr)] used 'kill air'."), 1) @@ -388,7 +389,7 @@ log_admin("[src] re-admined themself.") message_admins("[src] re-admined themself.", 1) to_chat(src, span_filter_system(span_interface("You now have the keys to control the planet, or at least a small space station"))) - verbs -= /client/proc/readmin_self + remove_verb(src, /client/proc/readmin_self) /client/proc/deadmin_self() set name = "De-admin self" @@ -400,7 +401,7 @@ message_admins("[src] deadmined themself.", 1) deadmin() to_chat(src, span_filter_system(span_interface("You are now a normal player."))) - verbs |= /client/proc/readmin_self + add_verb(src, /client/proc/readmin_self) feedback_add_details("admin_verb","DAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/toggle_log_hrefs() @@ -409,11 +410,11 @@ if(!holder) return if(config) config.log_hrefs = !config.log_hrefs - message_admins("[key_name_admin(usr)] [config.log_hrefs ? "started" : "stopped"] logging hrefs") + message_admins(span_bold("[key_name_admin(usr)] [config.log_hrefs ? "started" : "stopped"] logging hrefs")) /client/proc/check_ai_laws() set name = "Check AI Laws" - set category = "Admin" + set category = "Admin.Game" if(holder) src.holder.output_ai_laws() @@ -449,7 +450,7 @@ /client/proc/change_security_level() set name = "Set security level" set desc = "Sets the station security level" - set category = "Admin" + set category = "Admin.Events" if(!check_rights(R_ADMIN|R_EVENT)) return var/sec_level = tgui_input_list(usr, "It's currently code [get_security_level()].", "Select Security Level", (list("green","yellow","violet","orange","blue","red","delta")-get_security_level())) @@ -529,7 +530,7 @@ if(tgui_alert(usr, "Are you sure you want to tell them to man up?","Confirmation",list("Deal with it","No")) != "Deal with it") return - to_chat(T, span_filter_system(span_notice("Man up and deal with it."))) + to_chat(T, span_filter_system(span_boldnotice(span_large("Man up and deal with it.")))) to_chat(T, span_filter_system(span_notice("Move along."))) log_admin("[key_name(usr)] told [key_name(T)] to man up and deal with it.") @@ -543,7 +544,7 @@ if(tgui_alert(usr, "Are you sure you want to tell the whole server up?","Confirmation",list("Deal with it","No")) != "Deal with it") return for (var/mob/T as mob in mob_list) - to_chat(T, "
Man up.
Deal with it.

Move along.

") + to_chat(T, "
" + span_filter_system(span_notice(span_bold(span_huge("Man up.
Deal with it.")) + "
Move along.")) + "

") T << 'sound/voice/ManUp1.ogg' log_admin("[key_name(usr)] told everyone to man up and deal with it.") @@ -559,3 +560,9 @@ feedback_add_details("admin_verb","GS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! log_admin("[key_name(usr)] gave [key_name(T)] the spell [S].") message_admins(span_blue("[key_name_admin(usr)] gave [key_name(T)] the spell [S]."), 1) + +/client/proc/debugstatpanel() + set name = "Debug Stat Panel" + set category = "Debug" + + src.stat_panel.send_message("create_debug") diff --git a/code/modules/admin/admin_verbs_vr.dm b/code/modules/admin/admin_verbs_vr.dm index 8f46703edb7..1003187251a 100644 --- a/code/modules/admin/admin_verbs_vr.dm +++ b/code/modules/admin/admin_verbs_vr.dm @@ -31,13 +31,13 @@ if(!orbiter) orbiter = input(usr, "What should act as the orbiter of the orbit?", "Orbiter") as anything in possible_things if(!center || !orbiter) - to_chat(usr, "A center of orbit and an orbiter must be configured. You can also do this by marking a target.") + to_chat(usr, span_warning("A center of orbit and an orbiter must be configured. You can also do this by marking a target.")) return if(center == orbiter) - to_chat(usr, "The center of the orbit cannot also be the orbiter.") + to_chat(usr, span_warning("The center of the orbit cannot also be the orbiter.")) return if(isturf(orbiter)) - to_chat(usr, "The orbiter cannot be a turf. It can only be used as a center.") + to_chat(usr, span_warning("The orbiter cannot be a turf. It can only be used as a center.")) return var/distance = tgui_input_number(usr, "How large will their orbit radius be? (In pixels. 32 is 'near around a character)", "Orbit Radius", 32) var/speed = tgui_input_number(usr, "How fast will they orbit (negative numbers spin clockwise)", "Orbit Speed", 20) @@ -89,7 +89,7 @@ break if(!our_comp) - to_chat(usr, "Unable to locate a library computer to use for book deleting.") + to_chat(usr, span_warning("Unable to locate a library computer to use for book deleting.")) return var/dat = "Book Inventory Management\n" diff --git a/code/modules/admin/callproc/callproc.dm b/code/modules/admin/callproc/callproc.dm index be2ff21f13b..3400098afe7 100644 --- a/code/modules/admin/callproc/callproc.dm +++ b/code/modules/admin/callproc/callproc.dm @@ -192,7 +192,6 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) . = "" if(islist(returnval)) var/list/returnedlist = returnval - . = "" if(returnedlist.len) var/assoc_check = returnedlist[1] if(istext(assoc_check) && (returnedlist[assoc_check] != null)) @@ -206,7 +205,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) . += "\n[elem]" else . = "[procname] returned an empty list" - . += "" + . = span_blue(.) else . = span_blue("[procname] returned: [!isnull(returnval) ? returnval : "null"]") diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index 3f90050b575..9c8f05ceea6 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -37,12 +37,14 @@ var/list/admin_datums = list() owner = C owner.holder = src owner.add_admin_verbs() //TODO + owner.init_verbs() //re-initialize the verb list GLOB.admins |= C /datum/admins/proc/disassociate() if(owner) GLOB.admins -= owner owner.remove_admin_verbs() + owner.init_verbs() //re-initialize the verb list owner.deadmin_holder = owner.holder owner.holder = null diff --git a/code/modules/admin/player_effects.dm b/code/modules/admin/player_effects.dm index d3141861d97..e5c7457edf8 100644 --- a/code/modules/admin/player_effects.dm +++ b/code/modules/admin/player_effects.dm @@ -171,7 +171,7 @@ sleep(1 SECOND) shadekin.dir = SOUTH sleep(1 SECOND) - shadekin.audible_message("[shadekin] belches loudly!", runemessage = "URRRRRP") + shadekin.audible_message(span_vwarning(span_bold("[shadekin]") + " belches loudly!"), runemessage = "URRRRRP") sleep(2 SECONDS) shadekin.phase_shift() target.transforming = FALSE //Undo cheap hack @@ -494,7 +494,7 @@ var/mob/living/Tar = target if(!istype(Tar)) return - Tar.verbs |= /mob/living/proc/ventcrawl + add_verb(Tar, /mob/living/proc/ventcrawl) if("darksight") var/mob/living/carbon/human/Tar = target @@ -509,26 +509,26 @@ var/mob/living/carbon/human/Tar = target if(!istype(Tar)) return - Tar.verbs |= /mob/living/carbon/human/proc/enter_cocoon + add_verb(Tar, /mob/living/carbon/human/proc/enter_cocoon) if("transformation") var/mob/living/carbon/human/Tar = target if(!istype(Tar)) return - Tar.verbs |= /mob/living/carbon/human/proc/shapeshifter_select_hair - Tar.verbs |= /mob/living/carbon/human/proc/shapeshifter_select_hair_colors - Tar.verbs |= /mob/living/carbon/human/proc/shapeshifter_select_gender - Tar.verbs |= /mob/living/carbon/human/proc/shapeshifter_select_wings - Tar.verbs |= /mob/living/carbon/human/proc/shapeshifter_select_tail - Tar.verbs |= /mob/living/carbon/human/proc/shapeshifter_select_ears - Tar.verbs |= /mob/living/carbon/human/proc/lleill_select_shape //designed for non-shapeshifter mobs - Tar.verbs |= /mob/living/carbon/human/proc/lleill_select_colour + add_verb(Tar, /mob/living/carbon/human/proc/shapeshifter_select_hair) + add_verb(Tar, /mob/living/carbon/human/proc/shapeshifter_select_hair_colors) + add_verb(Tar, /mob/living/carbon/human/proc/shapeshifter_select_gender) + add_verb(Tar, /mob/living/carbon/human/proc/shapeshifter_select_wings) + add_verb(Tar, /mob/living/carbon/human/proc/shapeshifter_select_tail) + add_verb(Tar, /mob/living/carbon/human/proc/shapeshifter_select_ears) + add_verb(Tar, /mob/living/carbon/human/proc/lleill_select_shape) //designed for non-shapeshifter mobs + add_verb(Tar, /mob/living/carbon/human/proc/lleill_select_colour) if("set_size") var/mob/living/Tar = target if(!istype(Tar)) return - Tar.verbs |= /mob/living/proc/set_size + add_verb(Tar, /mob/living/proc/set_size) if("lleill_energy") var/mob/living/carbon/human/Tar = target @@ -543,44 +543,44 @@ var/mob/living/carbon/human/Tar = target if(!istype(Tar)) return - Tar.verbs |= /mob/living/carbon/human/proc/lleill_invisibility + add_verb(Tar, /mob/living/carbon/human/proc/lleill_invisibility) if("beast_form") var/mob/living/carbon/human/Tar = target if(!istype(Tar)) return - Tar.verbs |= /mob/living/carbon/human/proc/lleill_beast_form + add_verb(Tar, /mob/living/carbon/human/proc/lleill_beast_form) if("lleill_transmute") var/mob/living/carbon/human/Tar = target if(!istype(Tar)) return - Tar.verbs |= /mob/living/carbon/human/proc/lleill_transmute + add_verb(Tar, /mob/living/carbon/human/proc/lleill_transmute) if("lleill_alchemy") var/mob/living/carbon/human/Tar = target if(!istype(Tar)) return - Tar.verbs |= /mob/living/carbon/human/proc/lleill_alchemy + add_verb(Tar, /mob/living/carbon/human/proc/lleill_alchemy) if("lleill_drain") var/mob/living/carbon/human/Tar = target if(!istype(Tar)) return - Tar.verbs |= /mob/living/carbon/human/proc/lleill_contact + add_verb(Tar, /mob/living/carbon/human/proc/lleill_contact) if("brutal_pred") var/mob/living/Tar = target if(!istype(Tar)) return - Tar.verbs |= /mob/living/proc/shred_limb + add_verb(Tar, /mob/living/proc/shred_limb) if("trash_eater") var/mob/living/carbon/human/Tar = target if(!istype(Tar)) return - Tar.verbs |= /mob/living/proc/eat_trash - Tar.verbs |= /mob/living/proc/toggle_trash_catching + add_verb(Tar, /mob/living/proc/eat_trash) + add_verb(Tar, /mob/living/proc/toggle_trash_catching) ////////INVENTORY////////////// diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 9f144197a26..c03713a52a0 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -387,7 +387,7 @@ var/dat = "Round Status

Round Status

" dat += "Current Game Mode: [ticker.mode.name]
" dat += "Round Duration: [roundduration2text()]
" - dat += "Emergency shuttle
" + dat += span_bold("Emergency shuttle") + "
" if (!emergency_shuttle.online()) dat += "Call Shuttle
" else diff --git a/code/modules/admin/secrets/admin_secrets/admin_logs.dm b/code/modules/admin/secrets/admin_secrets/admin_logs.dm index 83ebe9ec0ef..d6bf54a03b4 100644 --- a/code/modules/admin/secrets/admin_secrets/admin_logs.dm +++ b/code/modules/admin/secrets/admin_secrets/admin_logs.dm @@ -5,7 +5,7 @@ . = ..() if(!.) return - var/dat = "Admin Log
" + var/dat = span_bold("Admin Log
") for(var/l in admin_log) dat += "
  • [l]
  • " if(!admin_log.len) @@ -25,7 +25,7 @@ . = ..() if(!.) return - var/dat = "Dialogue Log
    " + var/dat = span_bold("Dialogue Log
    ") dat += "
    " diff --git a/code/modules/admin/secrets/admin_secrets/bombing_list.dm b/code/modules/admin/secrets/admin_secrets/bombing_list.dm index d9c24097d24..b8165ca23ca 100644 --- a/code/modules/admin/secrets/admin_secrets/bombing_list.dm +++ b/code/modules/admin/secrets/admin_secrets/bombing_list.dm @@ -6,7 +6,7 @@ if(!.) return - var/dat = "Bombing List" + var/dat = span_bold("Bombing List") for(var/l in bombers) dat += text("[l]
    ") user << browse(dat, "window=bombers") diff --git a/code/modules/admin/secrets/admin_secrets/list_dna.dm b/code/modules/admin/secrets/admin_secrets/list_dna.dm index 5d4738d692b..a98077036b3 100644 --- a/code/modules/admin/secrets/admin_secrets/list_dna.dm +++ b/code/modules/admin/secrets/admin_secrets/list_dna.dm @@ -5,7 +5,7 @@ . = ..() if(!.) return - var/dat = "Showing DNA from blood.
    " + var/dat = span_bold("Showing DNA from blood.") + "
    " dat += "
    " output += "
    [HrefTokenFormField()]" - output += "Add custom ban: (ONLY use this if you can't ban through any other method)" + output += span_bold("Add custom ban:") + " (ONLY use this if you can't ban through any other method)" output += "" output += "" output += "
    Ban type:
    " - output += "Reason:

    " + output += span_bold("Reason:
    ") + "
    " output += "" output += "
    " @@ -437,18 +437,18 @@ if("PERMABAN") typedesc = "PERMABAN" if("TEMPBAN") - typedesc = "TEMPBAN
    ([duration] minutes) [(unbanned || auto) ? "" : "(Edit)"]
    Expires [expiration]
    " + typedesc = span_bold("TEMPBAN") + "
    ([duration] minutes) [(unbanned || auto) ? "" : "(Edit)"]
    Expires [expiration]
    " if("JOB_PERMABAN") - typedesc = "JOBBAN
    ([job])" + typedesc = span_bold("JOBBAN") + "
    ([job])" if("JOB_TEMPBAN") - typedesc = "TEMP JOBBAN
    ([job])
    ([duration] minutes
    Expires [expiration]
    " + typedesc = span_bold("TEMP JOBBAN") + "
    ([job])
    ([duration] minutes
    Expires [expiration]
    " output += "
    [typedesc][ckey][bantime][ackey][(unbanned || auto) ? "" : "Unban"][(unbanned || auto) ? "" : span_bold("Unban")]
    IP: [ip]
    " for(var/mob/living/carbon/human/H in mob_list) if(H.dna && H.ckey) diff --git a/code/modules/admin/secrets/admin_secrets/list_fingerprints.dm b/code/modules/admin/secrets/admin_secrets/list_fingerprints.dm index 0a9f4e0cb13..d3e033f8348 100644 --- a/code/modules/admin/secrets/admin_secrets/list_fingerprints.dm +++ b/code/modules/admin/secrets/admin_secrets/list_fingerprints.dm @@ -5,7 +5,7 @@ . = ..() if(!.) return - var/dat = "Showing Fingerprints.
    " + var/dat = span_bold("Showing Fingerprints.") + "
    " dat += "
    NameDNABlood Type
    " for(var/mob/living/carbon/human/H in mob_list) if(H.ckey) diff --git a/code/modules/admin/secrets/admin_secrets/show_law_changes.dm b/code/modules/admin/secrets/admin_secrets/show_law_changes.dm index 67fc3d357f0..13bb25656ab 100644 --- a/code/modules/admin/secrets/admin_secrets/show_law_changes.dm +++ b/code/modules/admin/secrets/admin_secrets/show_law_changes.dm @@ -9,7 +9,7 @@ if(!.) return - var/dat = "Showing last [length(lawchanges)] law changes.
    " + var/dat = span_bold("Showing last [length(lawchanges)] law changes.") + "
    " for(var/sig in lawchanges) dat += "[sig]
    " user << browse(dat, "window=lawchanges;size=800x500") diff --git a/code/modules/admin/secrets/admin_secrets/show_signalers.dm b/code/modules/admin/secrets/admin_secrets/show_signalers.dm index 4b0117a88f7..0c474e52491 100644 --- a/code/modules/admin/secrets/admin_secrets/show_signalers.dm +++ b/code/modules/admin/secrets/admin_secrets/show_signalers.dm @@ -9,7 +9,7 @@ if(!.) return - var/dat = "Showing last [length(lastsignalers)] signalers.
    " + var/dat = span_bold("Showing last [length(lastsignalers)] signalers.") + "
    " for(var/sig in lastsignalers) dat += "[sig]
    " user << browse(dat, "window=lastsignalers;size=800x500") diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index d80b31a330e..87c5ff332dc 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -809,9 +809,9 @@ msg += ", [job]" notes_add(M.ckey, "Banned from [msg] - [reason]", usr) message_admins(span_blue("[key_name_admin(usr)] banned [key_name_admin(M)] from [msg] for [mins] minutes"), 1) - to_chat(M, span_filter_system("[span_red("You have been jobbanned by [usr.client.ckey] from: [msg].")]")) - to_chat(M, span_filter_system("[span_red("The reason is: [reason]")]")) - to_chat(M, span_filter_system("[span_red("This jobban will be lifted in [mins] minutes.")]")) + to_chat(M, span_filter_system(span_red(span_large(span_bold("You have been jobbanned by [usr.client.ckey] from: [msg]."))))) + to_chat(M, span_filter_system(span_red(span_bold("The reason is: [reason]")))) + to_chat(M, span_filter_system(span_red("This jobban will be lifted in [mins] minutes."))) href_list["jobban2"] = 1 // lets it fall through and refresh return 1 if("No") @@ -830,9 +830,9 @@ else msg += ", [job]" notes_add(M.ckey, "Banned from [msg] - [reason]", usr) message_admins(span_blue("[key_name_admin(usr)] banned [key_name_admin(M)] from [msg]"), 1) - to_chat(M, span_filter_system("[span_red("You have been jobbanned by [usr.client.ckey] from: [msg].")]")) - to_chat(M, span_filter_system("[span_red("The reason is: [reason]")]")) - to_chat(M, span_filter_system("[span_red("Jobban can be lifted only upon request.")]")) + to_chat(M, span_filter_system(span_red(span_large(span_bold("You have been jobbanned by [usr.client.ckey] from: [msg]."))))) + to_chat(M, span_filter_system(span_red(span_bold("The reason is: [reason]")))) + to_chat(M, span_filter_system(span_red("Jobban can be lifted only upon request."))) href_list["jobban2"] = 1 // lets it fall through and refresh return 1 if("Cancel") @@ -863,7 +863,7 @@ continue if(msg) message_admins(span_blue("[key_name_admin(usr)] unbanned [key_name_admin(M)] from [msg]"), 1) - to_chat(M, span_filter_system(span_danger("You have been un-jobbanned by [usr.client.ckey] from [msg]."))) + to_chat(M, span_filter_system(span_red(span_large("You have been un-jobbanned by [usr.client.ckey] from [msg].")))) href_list["jobban2"] = 1 // lets it fall through and refresh return 1 return 0 //we didn't do anything! @@ -1025,7 +1025,7 @@ master_mode = href_list["c_mode2"] log_admin("[key_name(usr)] set the mode as [config.mode_names[master_mode]].") message_admins(span_blue("[key_name_admin(usr)] set the mode as [config.mode_names[master_mode]]."), 1) - to_world(span_blue("The mode is now: [config.mode_names[master_mode]]")) + to_world(span_world(span_blue("The mode is now: [config.mode_names[master_mode]]"))) Game() // updates the main game menu world.save_mode(master_mode) .(href, list("c_mode"=1)) @@ -1359,7 +1359,7 @@ for(var/client/X in GLOB.admins) if((R_ADMIN|R_MOD|R_SERVER) & X.holder.rights) //VOREStation Edit to_chat(X, take_msg) - to_chat(M, span_filter_pm(span_notice("Your adminhelp is being attended to by [usr.client]. Thanks for your patience!"))) + to_chat(M, span_filter_pm(span_boldnotice("Your adminhelp is being attended to by [usr.client]. Thanks for your patience!"))) // VoreStation Edit Start if (config.chat_webhook_url) spawn(0) @@ -1408,9 +1408,9 @@ //Job + antagonist if(M.mind) - special_role_description = "Role: [M.mind.assigned_role]; Antagonist: [span_red("[M.mind.special_role]")]; Has been rev: [(M.mind.has_been_rev)?"Yes":"No"]" + special_role_description = "Role: " + span_bold("[M.mind.assigned_role]") + "; Antagonist: [span_red(span_bold("[M.mind.special_role]"))]; Has been rev: [(M.mind.has_been_rev)?"Yes":"No"]" else - special_role_description = "Role: Mind datum missing Antagonist: Mind datum missing; Has been rev: Mind datum missing;" + special_role_description = "Role: " + span_italics("Mind datum missing") + " Antagonist: " + span_italics("Mind datum missing") + "; Has been rev: " + span_italics("Mind datum missing") + ";" //Health if(isliving(M)) @@ -1418,8 +1418,8 @@ var/status switch (M.stat) if (0) status = "Alive" - if (1) status = span_orange("Unconscious") - if (2) status = span_red("Dead") + if (1) status = span_orange(span_bold("Unconscious")) + if (2) status = span_red(span_bold("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 @@ -1428,7 +1428,7 @@ //Gener switch(M.gender) if(MALE,FEMALE) gender_description = "[M.gender]" - else gender_description = span_red("[M.gender]") + else gender_description = span_red(span_bold("[M.gender]")) to_chat(src.owner, "Info about [M.name]:
    \ Mob type = [M.type]; Gender = [gender_description] Damage = [health_description]
    \ @@ -1936,27 +1936,27 @@ else if(href_list["ac_censor_channel_author"]) var/datum/feed_channel/FC = locate(href_list["ac_censor_channel_author"]) - if(FC.author != "\[REDACTED\]") + if(FC.author != span_bold("\[REDACTED\]")) FC.backup_author = FC.author - FC.author = "\[REDACTED\]" + FC.author = span_bold("\[REDACTED\]") else FC.author = FC.backup_author src.access_news_network() else if(href_list["ac_censor_channel_story_author"]) var/datum/feed_message/MSG = locate(href_list["ac_censor_channel_story_author"]) - if(MSG.author != "\[REDACTED\]") + if(MSG.author != span_bold("\[REDACTED\]")) MSG.backup_author = MSG.author - MSG.author = "\[REDACTED\]" + MSG.author = span_bold("\[REDACTED\]") else MSG.author = MSG.backup_author src.access_news_network() else if(href_list["ac_censor_channel_story_body"]) var/datum/feed_message/MSG = locate(href_list["ac_censor_channel_story_body"]) - if(MSG.body != "\[REDACTED\]") + if(MSG.body != span_bold("\[REDACTED\]")) MSG.backup_body = MSG.body - MSG.body = "\[REDACTED\]" + MSG.body = span_bold("\[REDACTED\]") else MSG.body = MSG.backup_body src.access_news_network() diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 651f34dd534..86ff00b5337 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -384,11 +384,13 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null delete_click = new(null, "INITIALIZING", src) if(!action_click) action_click = new(null, "INITIALIZNG", src) - stat("[id] ", delete_click.update("DELETE QUERY | STATE : [text_state()] | ALL/ELIG/FIN \ + var/list/L = list() + L[++L.len] = list("[id] ", "[delete_click.update("DELETE QUERY | STATE : [text_state()] | ALL/ELIG/FIN \ [islist(obj_count_all)? length(obj_count_all) : (isnull(obj_count_all)? "0" : obj_count_all)]/\ [islist(obj_count_eligible)? length(obj_count_eligible) : (isnull(obj_count_eligible)? "0" : obj_count_eligible)]/\ - [islist(obj_count_finished)? length(obj_count_finished) : (isnull(obj_count_finished)? "0" : obj_count_finished)] - [get_query_text()]")) - stat(" ", action_click.update("[SDQL2_IS_RUNNING? "HALT" : "RUN"]")) + [islist(obj_count_finished)? length(obj_count_finished) : (isnull(obj_count_finished)? "0" : obj_count_finished)] - [get_query_text()]")]", REF(delete_click)) + L[++L.len] = list(" ", "[action_click.update("[SDQL2_IS_RUNNING? "HALT" : "RUN"]")]", REF(action_click)) + return L /datum/SDQL2_query/proc/delete_click() admin_del(usr) @@ -478,10 +480,10 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null var/client/C = GLOB.directory[show_next_to_key] if(C) var/mob/showmob = C.mob - to_chat(showmob, "SDQL query results: [get_query_text()]
    \ + to_chat(showmob, span_admin("SDQL query results: [get_query_text()]
    \ SDQL query completed: [islist(obj_count_all)? length(obj_count_all) : obj_count_all] objects selected by path, and \ [where_switched? "[islist(obj_count_eligible)? length(obj_count_eligible) : obj_count_eligible] objects executed on after WHERE keyword selection." : ""]
    \ - SDQL query took [DisplayTimeText(end_time - start_time)] to complete.
    ") + SDQL query took [DisplayTimeText(end_time - start_time)] to complete.")) if(length(select_text)) var/text = islist(select_text)? select_text.Join() : select_text var/static/result_offset = 0 diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index a0c8d137127..e25c1cd4cc3 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -66,24 +66,29 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) var/list/dat = list("[title]") dat += "Refresh

    " for(var/datum/admin_help/AH as anything in l2b) - dat += "Ticket #[AH.id]: [AH.initiator_key_name]: [AH.name]
    " + dat += span_adminnotice(span_adminhelp("Ticket #[AH.id]") + ": [AH.initiator_key_name]: [AH.name]") + "
    " usr << browse(dat.Join(), "window=ahelp_list[state];size=600x480") //Tickets statpanel /datum/admin_help_tickets/proc/stat_entry() + SHOULD_CALL_PARENT(TRUE) + SHOULD_NOT_SLEEP(TRUE) + var/list/L = list() var/num_disconnected = 0 - stat("== Admin Tickets ==") - stat("Active Tickets:", astatclick.update("[active_tickets.len]")) + L[++L.len] = list("== Admin Tickets ==", "", null, null) + L[++L.len] = list("Active Tickets:", "[astatclick.update("[active_tickets.len]")]", null, REF(astatclick)) + astatclick.update("[active_tickets.len]") for(var/datum/admin_help/AH as anything in active_tickets) if(AH.initiator) - stat("#[AH.id]. [AH.initiator_key_name]:", AH.statclick.update()) + L[++L.len] = list("#[AH.id]. [AH.initiator_key_name]:", "[AH.statclick.update()]", REF(AH)) else ++num_disconnected if(num_disconnected) - stat("Disconnected:", astatclick.update("[num_disconnected]")) - stat("Closed Tickets:", cstatclick.update("[closed_tickets.len]")) - stat("Resolved Tickets:", rstatclick.update("[resolved_tickets.len]")) + L[++L.len] = list("Disconnected:", "[astatclick.update("[num_disconnected]")]", null, REF(astatclick)) + L[++L.len] = list("Closed Tickets:", "[cstatclick.update("[closed_tickets.len]")]", null, REF(cstatclick)) + L[++L.len] = list("Resolved Tickets:", "[rstatclick.update("[resolved_tickets.len]")]", null, REF(rstatclick)) + return L //Reassociate still open ticket if one exists /datum/admin_help_tickets/proc/ClientLogin(client/C) @@ -119,6 +124,9 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) /obj/effect/statclick/ticket_list/Click() GLOB.ahelp_tickets.BrowseTickets(current_state) +//called by admin topic +/obj/effect/statclick/ticket_list/proc/Action() + Click() // //TICKET DATUM // @@ -365,9 +373,9 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) if(initiator.prefs?.read_preference(/datum/preference/toggle/holder/play_adminhelp_ping)) initiator << 'sound/effects/adminhelp.ogg' - to_chat(initiator, "[span_red("- AdminHelp Rejected! -")]
    \ - [span_red("Your admin help was rejected.")]
    \ - Please try to be calm, clear, and descriptive in admin helps, do not assume the admin has seen any related events, and clearly state the names of anybody you are reporting.
    ") + to_chat(initiator, span_filter_pm("[span_red(span_huge(span_bold("- AdminHelp Rejected! -")))]
    \ + [span_red(span_bold("Your admin help was rejected."))]
    \ + Please try to be calm, clear, and descriptive in admin helps, do not assume the admin has seen any related events, and clearly state the names of anybody you are reporting.")) feedback_inc("ahelp_reject") var/msg = "Ticket [TicketHref("#[id]")] rejected by [key_name_admin(usr)]" @@ -389,12 +397,12 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) if(state != AHELP_ACTIVE) return - var/msg = "[span_red("- AdminHelp marked as IC issue! -")]
    " - msg += "[span_red("This is something that can be solved ICly, and does not currently require staff intervention.")]
    " - msg += "[span_red("Your AdminHelp may also be unanswerable due to ongoing events.")]
    " + var/msg = "[span_red(span_huge(span_bold("- AdminHelp marked as IC issue! -")))]
    " + msg += "[span_red(span_bold("This is something that can be solved ICly, and does not currently require staff intervention."))]
    " + msg += "[span_red("Your AdminHelp may also be unanswerable due to ongoing events.")]" if(initiator) - to_chat(initiator, msg) + to_chat(initiator,span_filter_pm(msg)) feedback_inc("ahelp_icissue") msg = "Ticket [TicketHref("#[id]")] marked as IC by [key_name_admin(usr)]" @@ -461,9 +469,9 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) dat += "
    Closed at: [gameTimestamp(wtime = closed_at)] (Approx [(world.time - closed_at) / 600] minutes ago)" dat += "

    " if(initiator) - dat += "Actions: [FullMonty(ref_src)]
    " + dat += span_bold("Actions:") + " [FullMonty(ref_src)]
    " else - dat += "DISCONNECTED[GLOB.TAB][ClosureLinks(ref_src)]
    " + dat += span_bold("DISCONNECTED") + "[GLOB.TAB][ClosureLinks(ref_src)]
    " dat += "
    Log:

    " for(var/I in _interactions) dat += "[I]
    " @@ -606,9 +614,9 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) return //remove out adminhelp verb temporarily to prevent spamming of admins. - src.verbs -= /client/verb/adminhelp + remove_verb(src, /client/verb/adminhelp) spawn(1200) - src.verbs += /client/verb/adminhelp // 2 minute cool-down for adminhelps + add_verb(src, /client/verb/adminhelp) // 2 minute cool-down for adminhelps feedback_add_details("admin_verb","Adminhelp") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! if(current_ticket) @@ -779,7 +787,8 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) if(found.mind && found.mind.special_role) is_antag = 1 founds += "Name: [found.name]([found.real_name]) Ckey: [found.ckey] [is_antag ? "(Antag)" : null] " - msg += "[original_word](?|F) " + var/textentry = "(?|F " + msg += "[original_word]" + span_small((is_antag ? span_red(textentry) : span_black(textentry))) continue msg += "[original_word] " if(irc) diff --git a/code/modules/admin/verbs/adminhelp_vr.dm b/code/modules/admin/verbs/adminhelp_vr.dm index 1784e227017..4f694ee1b9f 100644 --- a/code/modules/admin/verbs/adminhelp_vr.dm +++ b/code/modules/admin/verbs/adminhelp_vr.dm @@ -33,7 +33,7 @@ return //if they requested spice, then remove spice verb temporarily to prevent spamming - usr.verbs -= /client/verb/adminspice + remove_verb(usr, /client/verb/adminspice) spawn(10 MINUTES) if(usr) // In case we left in the 10 minute cooldown - usr.verbs += /client/verb/adminspice // 10 minute cool-down for spice request + add_verb(usr, /client/verb/adminspice) // 10 minute cool-down for spice request diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 6c3eeb4b666..c5624d5ab08 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -173,9 +173,9 @@ if(!recipient.current_ticket) new /datum/admin_help(msg, recipient, TRUE) - to_chat(recipient, span_admin_pm_warning(span_huge("-- Administrator private message --"))) + to_chat(recipient, span_admin_pm_warning(span_huge(span_bold("-- Administrator private message --")))) to_chat(recipient, span_admin_pm_warning("Admin PM from-[key_name(src, recipient, 0)]: [msg]")) - to_chat(recipient, span_admin_pm_warning("Click on the administrator's name to reply.")) + to_chat(recipient, span_admin_pm_warning(span_italics("Click on the administrator's name to reply."))) to_chat(src, span_admin_pm_notice("Admin PM to-[key_name(recipient, src, 1)]: [msg]")) admin_ticket_log(recipient, span_admin_pm_notice("PM From [key_name_admin(src)]: [keywordparsedmsg]")) @@ -205,7 +205,7 @@ for(var/client/X in GLOB.admins) if(!check_rights(R_ADMIN, 0, X)) continue - to_chat(X, span_admin_pm_notice("PM: [key_name(src, X, 0)]->IRC: [keywordparsedmsg]")) + to_chat(X, span_admin_pm_notice(span_bold("PM: [key_name(src, X, 0)]->IRC:") + " [keywordparsedmsg]")) else log_admin("PM: [key_name(src)]->[key_name(recipient)]: [rawmsg]") //we don't use message_admins here because the sender/receiver might get it too @@ -213,7 +213,7 @@ if(!check_rights(R_ADMIN, 0, X)) continue if(X.key!=key && X.key!=recipient.key) //check client/X is an admin and isn't the sender or recipient - to_chat(X, span_admin_pm_notice("PM: [key_name(src, X, 0)]->[key_name(recipient, X, 0)]: [keywordparsedmsg]")) + to_chat(X, span_admin_pm_notice(span_bold("PM: [key_name(src, X, 0)]->[key_name(recipient, X, 0)]:") + " [keywordparsedmsg]")) /proc/IrcPm(target,msg,sender) var/client/C = GLOB.directory[target] @@ -262,9 +262,9 @@ message_admins("IRC message from [sender] to [key_name_admin(C)] : [msg]") log_admin("IRC PM: [sender] -> [key_name(C)] : [msg]") - to_chat(C, span_admin_pm_warning(span_huge("-- Administrator private message --"))) + to_chat(C, span_admin_pm_warning(span_huge(span_bold("-- Administrator private message --")))) to_chat(C, span_admin_pm_warning("Admin PM from-[adminname]: [msg]")) - to_chat(C, span_admin_pm_warning("Click on the administrator's name to reply.")) + to_chat(C, span_admin_pm_warning(span_italics("Click on the administrator's name to reply."))) admin_ticket_log(C, span_admin_pm_notice("PM From [irc_tagged]: [msg]")) diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index 890b84c2e61..9c9dff4c7bb 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -13,7 +13,7 @@ for(var/client/C in GLOB.admins) if(check_rights(R_ADMIN, 0, C)) - to_chat(C, span_admin_channel("" + create_text_tag("admin", "ADMIN:", C) + " [key_name(usr, 1)]([admin_jump_link(mob, src)]): [msg]")) + to_chat(C, span_admin_channel(create_text_tag("admin", "ADMIN:", C) + " " + span_name("[key_name(usr, 1)]") + "([admin_jump_link(mob, src)]): " + span_name("[msg]") )) feedback_add_details("admin_verb","M") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -36,7 +36,7 @@ sender_name = span_admin("[sender_name]") for(var/client/C in GLOB.admins) if(check_rights(R_ADMIN|R_MOD|R_SERVER)) //VOREStation Edit - to_chat(C, span_mod_channel("" + create_text_tag("mod", "MOD:", C) + " [sender_name]([admin_jump_link(mob, C.holder)]): [msg]")) + to_chat(C, span_mod_channel(create_text_tag("mod", "MOD:", C) + " " + span_name("[sender_name]") + "([admin_jump_link(mob, C.holder)]): " + span_name("[msg]") )) feedback_add_details("admin_verb","MS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -58,6 +58,6 @@ if(check_rights(R_ADMIN, 0)) sender_name = span_admin("[sender_name]") for(var/client/C in GLOB.admins) - to_chat(C, span_event_channel("" + create_text_tag("event", "EVENT:", C) + " [sender_name]([admin_jump_link(mob, C.holder)]): [msg]")) + to_chat(C, span_event_channel(create_text_tag("event", "EVENT:", C) + " " + span_name("[sender_name]") + "([admin_jump_link(mob, C.holder)]): " + span_name("[msg]") )) feedback_add_details("admin_verb","GS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/antag-ooc.dm b/code/modules/admin/verbs/antag-ooc.dm index a81c3380778..59f21a15aee 100644 --- a/code/modules/admin/verbs/antag-ooc.dm +++ b/code/modules/admin/verbs/antag-ooc.dm @@ -31,12 +31,12 @@ for(var/mob/M in mob_list) if(check_rights(R_ADMIN|R_MOD|R_EVENT, 0, M)) // Staff can see AOOC unconditionally, and with more details. - to_chat(M, span_ooc(span_aooc("[create_text_tag("aooc", "Antag-OOC:", M.client)] [get_options_bar(src, 0, 1, 1)]([admin_jump_link(usr, M.client.holder)]): [msg]"))) + to_chat(M, span_ooc(span_aooc("[create_text_tag("aooc", "Antag-OOC:", M.client)] [get_options_bar(src, 0, 1, 1)]([admin_jump_link(usr, M.client.holder)]): " + span_message("[msg]")))) else if(M.client) // Players can only see AOOC if observing, or if they are an antag type allowed to use AOOC. var/datum/antagonist/A = null if(M.mind) // Observers don't have minds, but they should still see AOOC. A = get_antag_data(M.mind.special_role) if((M.mind && M.mind.special_role && A && A.can_hear_aooc) || isobserver(M)) // Antags must have their type be allowed to AOOC to see AOOC. This prevents, say, ERT from seeing AOOC. - to_chat(M, span_ooc(span_aooc("[create_text_tag("aooc", "Antag-OOC:", M.client)] [player_display]: [msg]"))) + to_chat(M, span_ooc(span_aooc("[create_text_tag("aooc", "Antag-OOC:", M.client)] [player_display]: " + span_message("[msg]")))) log_aooc(msg,src) diff --git a/code/modules/admin/verbs/buildmode.dm b/code/modules/admin/verbs/buildmode.dm index 41c91d7cdd5..922e3c326ef 100644 --- a/code/modules/admin/verbs/buildmode.dm +++ b/code/modules/admin/verbs/buildmode.dm @@ -91,17 +91,17 @@ switch(master.cl.buildmode) if(BUILDMODE_BASIC) - to_chat(usr, "***********************************************************
    \ + to_chat(usr, span_notice("***********************************************************
    \ Left Mouse Button = Construct / Upgrade
    \ Right Mouse Button = Deconstruct / Delete / Downgrade
    \ Left Mouse Button + ctrl = R-Window
    \ Left Mouse Button + alt = Airlock

    \ Use the button in the upper left corner to
    \ change the direction of built objects.
    \ - ***********************************************************
    ") + ***********************************************************")) if(BUILDMODE_ADVANCED) - to_chat(usr, "***********************************************************
    \ + to_chat(usr, span_notice("***********************************************************
    \ Right Mouse Button on buildmode button = Set object type
    \ Middle Mouse Button on buildmode button= On/Off object type saying
    \ Middle Mouse Button on turf/obj = Capture object type
    \ @@ -110,49 +110,49 @@ Mouse Button + ctrl = Copy object type

    \ Use the button in the upper left corner to
    \ change the direction of built objects.
    \ - ***********************************************************
    ") + ***********************************************************")) if(BUILDMODE_EDIT) - to_chat(usr, "***********************************************************
    \ + to_chat(usr, span_notice("***********************************************************
    \ Right Mouse Button on buildmode button = Select var(type) & value
    \ Left Mouse Button on turf/obj/mob = Set var(type) & value
    \ Right Mouse Button on turf/obj/mob = Reset var's value
    \ - ***********************************************************
    ") + ***********************************************************")) if(BUILDMODE_THROW) - to_chat(usr, "***********************************************************
    \ + to_chat(usr, span_notice("***********************************************************
    \ Left Mouse Button on turf/obj/mob = Select
    \ Right Mouse Button on turf/obj/mob = Throw
    \ - ***********************************************************
    ") + ***********************************************************")) if(BUILDMODE_ROOM) - to_chat(usr, "***********************************************************
    \ + to_chat(usr, span_notice("***********************************************************
    \ Left Mouse Button on turf = Select as point A
    \ Right Mouse Button on turf = Select as point B
    \ Right Mouse Button on buildmode button = Change floor/wall type/area name
    \ - ***********************************************************
    ") + ***********************************************************")) if(BUILDMODE_LADDER) - to_chat(usr, "***********************************************************
    \ + to_chat(usr, span_notice("***********************************************************
    \ Left Mouse Button on turf = Set as upper ladder loc
    \ Right Mouse Button on turf = Set as lower ladder loc
    \ - ***********************************************************
    ") + ***********************************************************")) if(BUILDMODE_CONTENTS) - to_chat(usr, "***********************************************************
    \ + to_chat(usr, span_notice("***********************************************************
    \ Left Mouse Button on turf/obj/mob = Select
    \ Right Mouse Button on turf/obj/mob = Move into selection
    \ - ***********************************************************
    ") + ***********************************************************")) if(BUILDMODE_LIGHTS) - to_chat(usr, "***********************************************************
    \ + to_chat(usr, span_notice("***********************************************************
    \ Left Mouse Button on turf/obj/mob = Make it glow
    \ Right Mouse Button on turf/obj/mob = Reset glowing
    \ Right Mouse Button on buildmode button = Change glow properties
    \ - ***********************************************************
    ") + ***********************************************************")) if(BUILDMODE_AI) - to_chat(usr, "***********************************************************
    \ + to_chat(usr, span_notice("***********************************************************
    \ Left Mouse Button drag box = Select only mobs in box
    \ Left Mouse Button drag box + shift = Select additional mobs in area
    \ Left Mouse Button on non-mob = Deselect all mobs
    \ @@ -171,17 +171,17 @@ Right Mouse Button on tile = Command selected mobs to move to tile (will cancel if enemies are seen)
    \ Right Mouse Button + shift on tile = Command selected mobs to reposition to tile (will not be interrupted by enemies)
    \ Right Mouse Button + alt on obj/turfs = Command selected mobs to attack obj/turf
    \ - ***********************************************************
    ") + ***********************************************************")) if(BUILDMODE_DROP) - to_chat(usr, "***********************************************************
    \ + to_chat(usr, span_notice("***********************************************************
    \ Right Mouse Button on buildmode button = Set object type
    \ Middle Mouse Button on buildmode button= On/Off object type saying
    \ Middle Mouse Button on turf/obj = Capture object type
    \ Left Mouse Button on turf/obj = Drop objects safely
    \ Right Mouse Button = Drop objects unsafely
    \ Mouse Button + ctrl = Copy object type

    \ - ***********************************************************
    ") + ***********************************************************")) return 1 /obj/effect/bmode/buildquit diff --git a/code/modules/admin/verbs/check_customitem_activity.dm b/code/modules/admin/verbs/check_customitem_activity.dm index b375b9e67b6..cb3bfa45dc2 100644 --- a/code/modules/admin/verbs/check_customitem_activity.dm +++ b/code/modules/admin/verbs/check_customitem_activity.dm @@ -5,7 +5,7 @@ var/inactive_keys = "None
    " set category = "Admin" set name = "Check activity of players with custom items" - var/dat = "Inactive players with custom items
    " + var/dat = span_bold("Inactive players with custom items") + "
    " dat += "
    " dat += "The list below contains players with custom items that have not logged\ in for the past two months, or have not logged in since this system was implemented.\ @@ -76,7 +76,7 @@ var/inactive_keys = "None
    " inactive_keys = "" for(var/cur_key in inactive_ckeys) if(inactive_ckeys[cur_key]) - inactive_keys += "[cur_key] - [inactive_ckeys[cur_key]]
    " + inactive_keys += span_bold("[cur_key]") + " - [inactive_ckeys[cur_key]]
    " else inactive_keys += "[cur_key] - no database entry
    " diff --git a/code/modules/admin/verbs/custom_event.dm b/code/modules/admin/verbs/custom_event.dm index f8397c0f515..ef0b32bb8b3 100644 --- a/code/modules/admin/verbs/custom_event.dm +++ b/code/modules/admin/verbs/custom_event.dm @@ -19,10 +19,10 @@ custom_event_msg = input - to_world("

    [span_alert("Custom Event")]

    ") - to_world("

    [span_alert("A custom event is starting. OOC Info:")]

    ") - to_world(span_alert("[custom_event_msg]")) - to_world("
    ") + to_world(span_filter_system("

    [span_alert("Custom Event")]

    ")) + to_world(span_filter_system("

    [span_alert("A custom event is starting. OOC Info:")]

    ")) + to_world(span_filter_system(span_alert("[custom_event_msg]"))) + to_world(span_filter_system("
    ")) SSwebhooks.send( WEBHOOK_CUSTOM_EVENT, diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm index 6c14cfb1942..20334999b36 100644 --- a/code/modules/admin/verbs/deadsay.dm +++ b/code/modules/admin/verbs/deadsay.dm @@ -23,6 +23,6 @@ if (!msg) return - say_dead_direct(span_name("[stafftype]([src.holder.fakekey ? src.holder.fakekey : src.key])
    says, \"[msg]\"")) + say_dead_direct(span_name("[stafftype]([src.holder.fakekey ? src.holder.fakekey : src.key])") + " says, " + span_message("\"[msg]\"")) feedback_add_details("admin_verb","D") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 3f7db9883a5..6544f4d65d9 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -217,7 +217,7 @@ set desc = "Display del's log of everything that's passed through it." if(!check_rights(R_DEBUG)) return - var/list/dellog = list("List of things that have gone through qdel this round

      ") + var/list/dellog = list(span_bold("List of things that have gone through qdel this round") + "

        ") sortTim(SSgarbage.items, cmp=/proc/cmp_qdel_item_time, associative = TRUE) for(var/path in SSgarbage.items) var/datum/qdel_item/I = SSgarbage.items[path] @@ -393,31 +393,31 @@ var/list/areas_without_intercom = areas_all - areas_with_intercom var/list/areas_without_camera = areas_all - areas_with_camera - to_world("AREAS WITHOUT AN APC:") + to_world(span_bold("AREAS WITHOUT AN APC:")) for(var/areatype in areas_without_APC) to_world("* [areatype]") - to_world("AREAS WITHOUT AN AIR ALARM:") + to_world(span_bold("AREAS WITHOUT AN AIR ALARM:")) for(var/areatype in areas_without_air_alarm) to_world("* [areatype]") - to_world("AREAS WITHOUT A REQUEST CONSOLE:") + to_world(span_bold("AREAS WITHOUT A REQUEST CONSOLE:")) for(var/areatype in areas_without_RC) to_world("* [areatype]") - to_world("AREAS WITHOUT ANY LIGHTS:") + to_world(span_bold("AREAS WITHOUT ANY LIGHTS:")) for(var/areatype in areas_without_light) to_world("* [areatype]") - to_world("AREAS WITHOUT A LIGHT SWITCH:") + to_world(span_bold("AREAS WITHOUT A LIGHT SWITCH:")) for(var/areatype in areas_without_LS) to_world("* [areatype]") - to_world("AREAS WITHOUT ANY INTERCOMS:") + to_world(span_bold("AREAS WITHOUT ANY INTERCOMS:")) for(var/areatype in areas_without_intercom) to_world("* [areatype]") - to_world("AREAS WITHOUT ANY CAMERAS:") + to_world(span_bold("AREAS WITHOUT ANY CAMERAS:")) for(var/areatype in areas_without_camera) to_world("* [areatype]") diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index 40b47f2f50d..1ce73a7f742 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -168,7 +168,7 @@ set desc = "This spams all the active jobban entries for the current round to standard output." set category = "Debug" - to_chat(usr, "Jobbans active in this round.") + to_chat(usr, span_bold("Jobbans active in this round.")) for(var/t in jobban_keylist) to_chat(usr, "[t]") @@ -181,7 +181,7 @@ if(!job_filter) return - to_chat(usr, "Jobbans active in this round.") + to_chat(usr, span_bold("Jobbans active in this round.")) for(var/t in jobban_keylist) if(findtext(t, job_filter)) to_chat(usr, "[t]") diff --git a/code/modules/admin/verbs/entity_narrate.dm b/code/modules/admin/verbs/entity_narrate.dm index 11f512ec5db..f88dbb192cd 100644 --- a/code/modules/admin/verbs/entity_narrate.dm +++ b/code/modules/admin/verbs/entity_narrate.dm @@ -191,9 +191,9 @@ message = tgui_input_text(usr, "Input what you want [our_entity] to [mode]", "narrate", null) message = encode_html_emphasis(sanitize(message)) if(message && mode == "Speak") - our_entity.audible_message("[our_entity.name] [message]") + our_entity.audible_message(span_bold("[our_entity.name]") + " [message]") else if(message && mode == "Emote") - our_entity.visible_message("[our_entity.name] [message]") + our_entity.visible_message(span_bold("[our_entity.name]") + " [message]") else return @@ -339,10 +339,10 @@ /datum/entity_narrate/proc/narrate_tgui_atom(atom/A, message as text) message = encode_html_emphasis(sanitize(message)) if(tgui_narrate_mode && tgui_narrate_privacy) - A.visible_message("\The [A.name] [message]", range = 1) + A.visible_message(span_italics(span_bold("\The [A.name]") + " [message]"), range = 1) else if(tgui_narrate_mode && !tgui_narrate_privacy) - A.visible_message("\The [A.name] [message]",) + A.visible_message(span_bold("\The [A.name]") + "[message]",) else if(!tgui_narrate_mode && tgui_narrate_privacy) - A.audible_message("\The [A.name] [message]", hearing_distance = 1) + A.audible_message(span_italics(span_bold("\The [A.name]") + " [message]"), hearing_distance = 1) else if(!tgui_narrate_mode && !tgui_narrate_privacy) - A.audible_message("\The [A.name] [message]") + A.audible_message(span_bold("\The [A.name]") + "[message]") diff --git a/code/modules/admin/verbs/getlogs.dm b/code/modules/admin/verbs/getlogs.dm index 6d79548df35..236fbef7a6b 100644 --- a/code/modules/admin/verbs/getlogs.dm +++ b/code/modules/admin/verbs/getlogs.dm @@ -32,7 +32,7 @@ to_chat(src, span_red("Error: giveruntimelog(): Client not found.")) return - target.verbs |= /client/proc/getruntimelog + add_verb(target, /client/proc/getruntimelog) to_chat(target, span_red("You have been granted access to runtime logs. Please use them responsibly or risk being banned.")) return diff --git a/code/modules/admin/verbs/grief_fixers.dm b/code/modules/admin/verbs/grief_fixers.dm index f30bf04b3b6..1dcf54b9bf8 100644 --- a/code/modules/admin/verbs/grief_fixers.dm +++ b/code/modules/admin/verbs/grief_fixers.dm @@ -10,7 +10,7 @@ feedback_add_details("admin_verb","FA") log_and_message_admins("Full atmosphere reset initiated by [usr].") - to_world("Initiating restart of atmosphere. The server may lag a bit.") + to_world(span_danger("Initiating restart of atmosphere. The server may lag a bit.")) sleep(10) var/current_time = world.timeofday @@ -48,4 +48,4 @@ SSair.RebootZAS() to_chat(usr, "\[5/5\] - ZAS Rebooted") - to_world("Atmosphere restart completed in [(world.timeofday - current_time)/10] seconds.") + to_world(span_danger("Atmosphere restart completed in " + span_bold("[(world.timeofday - current_time)/10]") + " seconds.")) diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index daec7c4c8bd..c51b131b8e2 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -172,7 +172,7 @@ var/list/debug_verbs = list ( if(!check_rights(R_DEBUG)) return - verbs += debug_verbs + add_verb(src, debug_verbs) feedback_add_details("admin_verb","mDV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -182,7 +182,7 @@ var/list/debug_verbs = list ( if(!check_rights(R_DEBUG)) return - verbs -= debug_verbs + remove_verb(src, debug_verbs) feedback_add_details("admin_verb","hDV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/possess.dm b/code/modules/admin/verbs/possess.dm index 5e4a3d0ce7a..9324583bacb 100644 --- a/code/modules/admin/verbs/possess.dm +++ b/code/modules/admin/verbs/possess.dm @@ -47,6 +47,6 @@ set desc = "Give this guy possess/release verbs" set category = "Debug" set name = "Give Possessing Verbs" - M.verbs += /proc/possess - M.verbs += /proc/release - feedback_add_details("admin_verb","GPV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! \ No newline at end of file + add_verb(M, /proc/possess) + add_verb(M, /proc/release) + feedback_add_details("admin_verb","GPV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index e07507e4a2a..9b056896a08 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -31,7 +31,7 @@ log_pray(raw_msg, src) /proc/CentCom_announce(var/msg, var/mob/Sender, var/iamessage) - msg = span_blue("" + span_orange("[uppertext(using_map.boss_short)]M[iamessage ? " IA" : ""]:") + "[key_name(Sender, 1)] [ADMIN_PP(Sender)] [ADMIN_VV(Sender)] [ADMIN_SM(Sender)] ([admin_jump_link(Sender)]) [ADMIN_CA(Sender)] [ADMIN_BSA(Sender)] [ADMIN_CENTCOM_REPLY(Sender)]: [msg]") + msg = span_blue(span_bold(span_orange("[uppertext(using_map.boss_short)]M[iamessage ? " IA" : ""]:") + "[key_name(Sender, 1)] [ADMIN_PP(Sender)] [ADMIN_VV(Sender)] [ADMIN_SM(Sender)] ([admin_jump_link(Sender)]) [ADMIN_CA(Sender)] [ADMIN_BSA(Sender)] [ADMIN_CENTCOM_REPLY(Sender)]:") + " [msg]") for(var/client/C in GLOB.admins) //VOREStation Edit - GLOB admins if(!check_rights(R_ADMIN, 0, C)) continue @@ -39,7 +39,7 @@ C << 'sound/machines/signal.ogg' /proc/Syndicate_announce(var/msg, var/mob/Sender) - msg = span_blue("" + span_crimson("ILLEGAL:") + "[key_name(Sender, 1)] [ADMIN_PP(Sender)] [ADMIN_VV(Sender)] [ADMIN_SM(Sender)] ([admin_jump_link(Sender)]) [ADMIN_CA(Sender)] [ADMIN_BSA(Sender)] [ADMIN_SYNDICATE_REPLY(Sender)]: [msg]") + msg = span_blue(span_bold(span_crimson("ILLEGAL:") + "[key_name(Sender, 1)] [ADMIN_PP(Sender)] [ADMIN_VV(Sender)] [ADMIN_SM(Sender)] ([admin_jump_link(Sender)]) [ADMIN_CA(Sender)] [ADMIN_BSA(Sender)] [ADMIN_SYNDICATE_REPLY(Sender)]:") + " [msg]") for(var/client/C in GLOB.admins) //VOREStation Edit - GLOB admins if(!check_rights(R_ADMIN, 0, C)) continue diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index e1e1c0245af..9b287c83e2b 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -98,10 +98,10 @@ if(usr) if (usr.client) if(usr.client.holder) - to_chat(M, "You hear a voice in your head... [msg]") + to_chat(M, span_bold("You hear a voice in your head...") + " " + span_italics("[msg]")) log_admin("SubtlePM: [key_name(usr)] -> [key_name(M)] : [msg]") - msg = span_admin_pm_notice(" SubtleMessage: [key_name_admin(usr)] -> [key_name_admin(M)] : [msg]") + msg = span_admin_pm_notice(span_bold(" SubtleMessage: [key_name_admin(usr)] -> [key_name_admin(M)] :") + " [msg]") message_admins(msg) admin_ticket_log(M, msg) feedback_add_details("admin_verb","SMS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -124,7 +124,7 @@ to_world("[msg]") log_admin("GlobalNarrate: [key_name(usr)] : [msg]") - message_admins(span_blue(" GlobalNarrate: [key_name_admin(usr)] : [msg]
        "), 1) + message_admins(span_blue(span_bold(" GlobalNarrate: [key_name_admin(usr)] : [msg]
        ")), 1) feedback_add_details("admin_verb","GLN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_direct_narrate(var/mob/M) // Targetted narrate -- TLE @@ -149,7 +149,7 @@ to_chat(M, msg) log_admin("DirectNarrate: [key_name(usr)] to ([M.name]/[M.key]): [msg]") - msg = span_admin_pm_notice(" DirectNarrate: [key_name(usr)] to ([M.name]/[M.key]): [msg]
        ") + msg = span_admin_pm_notice(span_bold(" DirectNarrate: [key_name(usr)] to ([M.name]/[M.key]):") + " [msg]
        ") message_admins(msg) admin_ticket_log(M, msg) feedback_add_details("admin_verb","DIRN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -221,7 +221,7 @@ log_admin("[key_name(usr)] has [muteunmute] [key_name(M)] from [mute_string]") message_admins("[key_name_admin(usr)] has [muteunmute] [key_name_admin(M)] from [mute_string].", 1) - to_chat(M, "You have been [muteunmute] from [mute_string].") + to_chat(M, span_alert("You have been [muteunmute] from [mute_string].")) feedback_add_details("admin_verb","MUTE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_add_random_ai_law() @@ -298,11 +298,11 @@ Ccomp's first proc. for(var/client/C as anything in GLOB.clients) if(C.ckey == target) found_client = C - to_chat(C, span_notice("You may now respawn. You should roleplay as if you learned nothing about the round during your time with the dead.")) + to_chat(C, span_boldnotice("You may now respawn. You should roleplay as if you learned nothing about the round during your time with the dead.")) if(isobserver(C.mob)) var/mob/observer/dead/G = C.mob G.can_reenter_corpse = 1 - to_chat(C, span_notice("You can also re-enter your corpse, if you still have one!")) + to_chat(C, span_boldnotice("You can also re-enter your corpse, if you still have one!")) break if(!found_client) @@ -324,22 +324,22 @@ Ccomp's first proc. if(config.antag_hud_allowed) for(var/mob/observer/dead/g in get_ghosts()) if(!g.client.holder) //Remove the verb from non-admin ghosts - g.verbs -= /mob/observer/dead/verb/toggle_antagHUD + remove_verb(g, /mob/observer/dead/verb/toggle_antagHUD) if(g.antagHUD) g.antagHUD = 0 // Disable it on those that have it enabled g.has_enabled_antagHUD = 2 // We'll allow them to respawn - to_chat(g, span_red("The Administrator has disabled AntagHUD ")) + to_chat(g, span_boldwarning("The Administrator has disabled AntagHUD ")) config.antag_hud_allowed = 0 - to_chat(src, span_red("AntagHUD usage has been disabled")) + to_chat(src, span_boldwarning("AntagHUD usage has been disabled")) action = "disabled" else for(var/mob/observer/dead/g in get_ghosts()) if(!g.client.holder) // Add the verb back for all non-admin ghosts - g.verbs += /mob/observer/dead/verb/toggle_antagHUD - to_chat(g, span_blue("The Administrator has enabled AntagHUD ")) // Notify all observers they can now use AntagHUD + add_verb(g, /mob/observer/dead/verb/toggle_antagHUD) + to_chat(g, span_boldnotice("The Administrator has enabled AntagHUD")) // Notify all observers they can now use AntagHUD config.antag_hud_allowed = 1 action = "enabled" - to_chat(src, span_blue("AntagHUD usage has been enabled")) + to_chat(src, span_boldnotice("AntagHUD usage has been enabled")) log_admin("[key_name(usr)] has [action] antagHUD usage for observers") @@ -358,19 +358,19 @@ Ccomp's first proc. var/action="" if(config.antag_hud_restricted) for(var/mob/observer/dead/g in get_ghosts()) - to_chat(g, span_blue("The administrator has lifted restrictions on joining the round if you use AntagHUD")) + to_chat(g, span_boldnotice("The administrator has lifted restrictions on joining the round if you use AntagHUD")) action = "lifted restrictions" config.antag_hud_restricted = 0 - to_chat(src, span_blue("AntagHUD restrictions have been lifted")) + to_chat(src, span_boldnotice("AntagHUD restrictions have been lifted")) else for(var/mob/observer/dead/g in get_ghosts()) - to_chat(g, span_red("The administrator has placed restrictions on joining the round if you use AntagHUD")) - to_chat(g, span_red("Your AntagHUD has been disabled, you may choose to re-enabled it but will be under restrictions ")) + to_chat(g, span_boldwarning("The administrator has placed restrictions on joining the round if you use AntagHUD")) + to_chat(g, span_boldwarning("Your AntagHUD has been disabled, you may choose to re-enabled it but will be under restrictions ")) g.antagHUD = 0 g.has_enabled_antagHUD = 0 action = "placed restrictions" config.antag_hud_restricted = 1 - to_chat(src, span_red("AntagHUD restrictions have been enabled")) + to_chat(src, span_boldwarning("AntagHUD restrictions have been enabled")) log_admin("[key_name(usr)] has [action] on joining the round if they use AntagHUD") message_admins("Admin [key_name_admin(usr)] has [action] on joining the round if they use AntagHUD", 1) @@ -982,7 +982,7 @@ Traitors and the like can also be revived with the previous role mostly intact. set category = "Special Verbs" set name = "Attack Log" - to_chat(usr, span_red("Attack Log for [mob]")) + to_chat(usr, span_red(span_bold("Attack Log for [mob]"))) for(var/t in M.attack_log) to_chat(usr,t) feedback_add_details("admin_verb","ATTL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -1014,7 +1014,7 @@ Traitors and the like can also be revived with the previous role mostly intact. message_admins("Admin [key_name_admin(usr)] has forced the players to have random appearances.", 1) if(notifyplayers == "Yes") - to_world(span_blue("Admin [usr.key] has forced the players to have completely random identities!")) + to_world(span_boldannounce(span_blue("Admin [usr.key] has forced the players to have completely random identities!"))) to_chat(usr, "Remember: you can always disable the randomness by using the verb again, assuming the round hasn't started yet.") diff --git a/code/modules/admin/verbs/randomverbs_vr.dm b/code/modules/admin/verbs/randomverbs_vr.dm index 77ad3ff5582..8b045ffaf92 100644 --- a/code/modules/admin/verbs/randomverbs_vr.dm +++ b/code/modules/admin/verbs/randomverbs_vr.dm @@ -97,7 +97,7 @@ if(M.z == pos_z) to_chat(M, msg) log_admin("ZNarrate: [key_name(usr)] : [msg]") - message_admins(span_blue(" ZNarrate: [key_name_admin(usr)] : [msg]
        "), 1) + message_admins(span_blue(span_bold(" ZNarrate: [key_name_admin(usr)] : [msg]
        ")), 1) feedback_add_details("admin_verb","GLNA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/toggle_vantag_hud(var/mob/target as mob) diff --git a/code/modules/admin/verbs/smite.dm b/code/modules/admin/verbs/smite.dm index 28820123082..497f8f43ad6 100644 --- a/code/modules/admin/verbs/smite.dm +++ b/code/modules/admin/verbs/smite.dm @@ -129,7 +129,7 @@ sleep(1 SECOND) shadekin.dir = SOUTH sleep(1 SECOND) - shadekin.audible_message("[shadekin] belches loudly!", runemessage = "URRRRRP") + shadekin.audible_message(span_vwarning(span_bold("[shadekin]") + " belches loudly!"), runemessage = "URRRRRP") sleep(2 SECONDS) shadekin.phase_shift() target.transforming = FALSE //Undo cheap hack diff --git a/code/modules/admin/view_variables/helpers.dm b/code/modules/admin/view_variables/helpers.dm index 75e29d75094..c81e6f61b4b 100644 --- a/code/modules/admin/view_variables/helpers.dm +++ b/code/modules/admin/view_variables/helpers.dm @@ -2,7 +2,7 @@ // Keep these two together, they *must* be defined on both // If /client ever becomes /datum/client or similar, they can be merged /datum/proc/get_view_variables_header() - return "[src]" + return span_bold("[src]") /atom/get_view_variables_header() return {" diff --git a/code/modules/admin/view_variables/topic.dm b/code/modules/admin/view_variables/topic.dm index dd33214c1cd..fc2b9189894 100644 --- a/code/modules/admin/view_variables/topic.dm +++ b/code/modules/admin/view_variables/topic.dm @@ -449,7 +449,7 @@ if(!verb || verb == "Cancel") return else - H.verbs += verb + add_verb(H, verb) else if(href_list["remverb"]) if(!check_rights(R_DEBUG)) return @@ -466,7 +466,7 @@ if(!verb) return else - H.verbs -= verb + remove_verb(H, verb) else if(href_list["addorgan"]) if(!check_rights(R_SPAWN)) return diff --git a/code/modules/admin/view_variables/view_variables.dm b/code/modules/admin/view_variables/view_variables.dm index 86231a089da..c2af0624d1a 100644 --- a/code/modules/admin/view_variables/view_variables.dm +++ b/code/modules/admin/view_variables/view_variables.dm @@ -40,7 +40,7 @@ var/sprite_text if(sprite) sprite_text = "
    NameFingerprints
    " - var/list/header = islist(D)? list("/list") : D.vv_get_header() + var/list/header = islist(D)? list(span_bold("/list")) : D.vv_get_header() var/marked if(holder && holder.marked_datum && holder.marked_datum == D) diff --git a/code/modules/admin/view_variables/view_variables_global.dm b/code/modules/admin/view_variables/view_variables_global.dm index 8e7c1be76d7..ae44630763b 100644 --- a/code/modules/admin/view_variables/view_variables_global.dm +++ b/code/modules/admin/view_variables/view_variables_global.dm @@ -12,7 +12,7 @@ /var/decl/global_vars/global_vars_ /decl/global_vars - var/name = "Global Variables" + var/name = span_bold("Global Variables") /decl/global_vars/get_view_variables_options() return "" // Ensuring changes to the base proc never affect us diff --git a/code/modules/ai/ai_holder.dm b/code/modules/ai/ai_holder.dm index 16ca1c1e81d..6a897ce5fef 100644 --- a/code/modules/ai/ai_holder.dm +++ b/code/modules/ai/ai_holder.dm @@ -170,11 +170,10 @@ to_chat(usr, span_warning("You don't appear to have changed anything on the AI datum you were editing.")) href_list["datumrefresh"] = "\ref[src]" else - var/message = "These differences were detected in your varedit. If you notice any that you didn't change, please redo your edit:
    " + var/message = "These differences were detected in your varedit. If you notice any that you didn't change, please redo your edit:
    " for(var/key in diff) - message += "- [key]: [before[key]] => [after[key]]
    " - message += "
    " - to_chat(usr,message) + message += span_bold("- [key]:") + " [before[key]] => [after[key]]
    " + to_chat(usr,span_notice(message)) var/original_type = holder.type var/list/levels_working = GetConnectedZlevels(holder.z) diff --git a/code/modules/artifice/cursedform.dm b/code/modules/artifice/cursedform.dm index 082933274ff..313584e9cb7 100644 --- a/code/modules/artifice/cursedform.dm +++ b/code/modules/artifice/cursedform.dm @@ -35,6 +35,6 @@ if(isliving(user)) var/mob/living/L = user - L.visible_message("[L] convulses, the very letters of \the [src] searing themselves into their eyes!", \ - "You convulse, the very letters of \the [src] searing themselves into your eyes!") + L.visible_message(span_danger("[L] convulses, the very letters of \the [src] searing themselves into their eyes!"), \ + span_critical("You convulse, the very letters of \the [src] searing themselves into your eyes!")) L.add_modifier(/datum/modifier/grievous_wounds, 10 MINUTES) diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index be3d83a2f77..4ebb2d24e6c 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -41,7 +41,7 @@ H.updatehealth() else if(ismouse(target)) var/mob/living/simple_mob/animal/passive/mouse/M = target - visible_message(span_red("SPLAT!")) + visible_message(span_bolddanger("SPLAT!")) M.splat() playsound(target, 'sound/effects/snap.ogg', 50, 1) layer = MOB_LAYER - 0.2 diff --git a/code/modules/awaymissions/bluespaceartillery.dm b/code/modules/awaymissions/bluespaceartillery.dm index f11b9ee61e1..0b606c3dd98 100644 --- a/code/modules/awaymissions/bluespaceartillery.dm +++ b/code/modules/awaymissions/bluespaceartillery.dm @@ -22,9 +22,9 @@ /obj/machinery/artillerycontrol/attack_hand(mob/user as mob) user.set_machine(src) - var/dat = "Bluespace Artillery Control:
    " + var/dat = span_bold("Bluespace Artillery Control:") + "
    " dat += "Locked on
    " - dat += "Charge progress: [reload]/180:
    " + dat += span_bold("Charge progress: [reload]/180:") + "
    " dat += "Open Fire
    " dat += "Deployment of weapon authorized by
    [using_map.company_name] Naval Command

    Remember, friendly fire is grounds for termination of your contract and life.
    " user << browse(dat, "window=scroll") diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index 264e076cfbf..923cfcb0e06 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -233,7 +233,7 @@ GLOBAL_DATUM(gateway_station, /obj/machinery/gateway/centerstation) if(!awaygate) // We still can't find the damn thing because there is no destination. to_chat(user, span_notice("Error: Programming failed. No destination found.")) return - to_chat(user, "Startup programming successful!: A destination in another point of space and time has been detected.") + to_chat(user, span_boldnotice("Startup programming successful!") + ": A destination in another point of space and time has been detected.") else to_chat(user, span_black("The gate is already calibrated, there is no work for you to do here.")) return @@ -362,6 +362,6 @@ GLOBAL_DATUM(gateway_away, /obj/machinery/gateway/centeraway) return // VOREStation Add End else - to_chat(user, span_blue("Recalibration successful!:") + span_black(" This gate's systems have been fine tuned. Travel to this gate will now be on target.")) + to_chat(user, span_blue(span_bold("Recalibration successful!") + "") + span_black(" This gate's systems have been fine tuned. Travel to this gate will now be on target.")) calibrated = 1 return diff --git a/code/modules/awaymissions/gateway_vr.dm b/code/modules/awaymissions/gateway_vr.dm index fec53e0b45a..9618eb5f686 100644 --- a/code/modules/awaymissions/gateway_vr.dm +++ b/code/modules/awaymissions/gateway_vr.dm @@ -15,7 +15,7 @@ return if(istype(W,mcguffin_type) && !calibrated) - to_chat(user, span_emote("As the device nears the gateway, mechanical clunks and whirrs can be heard.
    [span_blue("Configuration successful! ")]
    This gate's systems have been fine tuned. Travel to this gate will now be on target.")) + to_chat(user, span_npc_emote("As the device nears the gateway, mechanical clunks and whirrs can be heard.
    [span_blue(span_bold("Configuration successful! "))]
    This gate's systems have been fine tuned. Travel to this gate will now be on target.")) calibrated = 1 return else diff --git a/code/modules/awaymissions/pamphlet.dm b/code/modules/awaymissions/pamphlet.dm index ec5e940669f..5f05f3e99da 100644 --- a/code/modules/awaymissions/pamphlet.dm +++ b/code/modules/awaymissions/pamphlet.dm @@ -1,7 +1,7 @@ /obj/item/paper/pamphlet name = "pamphlet" icon_state = "pamphlet" - info = "Welcome to the Gateway project...
    \ + info = span_bold("Welcome to the Gateway project...") + "
    \ Congratulations! If you're reading this, you and your superiors have decided that you're \ ready to commit to a life spent colonising the rolling hills of far away worlds. You \ must be ready for a lifetime of adventure, a little bit of hard work, and an award \ @@ -35,4 +35,4 @@ //we don't want the silly text overlay! /obj/item/paper/pamphlet/update_icon() - return \ No newline at end of file + return diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm index f9f0b8c94dd..3e5527848fb 100644 --- a/code/modules/awaymissions/zlevel.dm +++ b/code/modules/awaymissions/zlevel.dm @@ -6,7 +6,7 @@ return var/list/potentialRandomZlevels = list() - admin_notice(span_red(" Searching for away missions..."), R_DEBUG) + admin_notice(span_red(span_bold(" Searching for away missions...")), R_DEBUG) var/list/Lines = file2list("maps/RandomZLevels/fileList.txt") if(!Lines.len) return for (var/t in Lines) @@ -38,7 +38,7 @@ if(potentialRandomZlevels.len) - admin_notice(span_red("Loading away mission..."), R_DEBUG) + admin_notice(span_red(span_bold("Loading away mission...")), R_DEBUG) var/map = pick(potentialRandomZlevels) to_world_log("Away mission picked: [map]") //VOREStation Add for debugging @@ -53,10 +53,10 @@ continue awaydestinations.Add(L) */ //VOREStation Removal End - admin_notice(span_red("Away mission loaded."), R_DEBUG) + admin_notice(span_red(span_bold("Away mission loaded.")), R_DEBUG) else - admin_notice(span_red("No away missions found."), R_DEBUG) + admin_notice(span_red(span_bold("No away missions found.")), R_DEBUG) return //VOREStation Add - This landmark type so it's not so ghetto. diff --git a/code/modules/blob2/overmind/overmind.dm b/code/modules/blob2/overmind/overmind.dm index 7973a8b0b33..993a4126ac1 100644 --- a/code/modules/blob2/overmind/overmind.dm +++ b/code/modules/blob2/overmind/overmind.dm @@ -70,13 +70,14 @@ var/list/overminds = list() overminds -= src return ..() -/mob/observer/blob/Stat() - ..() - if(statpanel("Status")) - if(blob_core) - stat(null, "Core Health: [blob_core.integrity]") - stat(null, "Power Stored: [blob_points]/[max_blob_points]") - stat(null, "Total Blobs: [GLOB.all_blobs.len]") +/mob/observer/blob/get_status_tab_items() + . = ..() + . += "" + . += "BLOB STATUS" + if(blob_core) + . += "Core Health: [blob_core.integrity]" + . += "Power Stored: [blob_points]/[max_blob_points]" + . += "Total Blobs: [GLOB.all_blobs.len]" /mob/observer/blob/Move(var/atom/NewLoc, Dir = 0) if(placed) diff --git a/code/modules/casino/casino_prize_vendor.dm b/code/modules/casino/casino_prize_vendor.dm index 1cac6f4cdf0..e63d90943a1 100644 --- a/code/modules/casino/casino_prize_vendor.dm +++ b/code/modules/casino/casino_prize_vendor.dm @@ -211,7 +211,7 @@ /obj/machinery/casino_prize_dispenser/proc/pay_with_chips(var/obj/item/spacecasinocash/cashmoney, mob/user, var/price) //"cashmoney_:[cashmoney] user:[user] currently_vending:[currently_vending]" if(price > cashmoney.worth) - to_chat(usr, "[icon2html(cashmoney, user.client)] That is not enough chips.") + to_chat(usr, "[icon2html(cashmoney, user.client)] " + span_warning("That is not enough chips.")) return 0 if(istype(cashmoney, /obj/item/spacecasinocash)) @@ -344,7 +344,7 @@ return for(var/mob/O in hearers(src, null)) - O.show_message(span_npc_say("\The [src] beeps, \"[message]\""),2) + O.show_message(span_npc_say(span_name("\The [src]") + " beeps, \"[message]\""),2) return /obj/machinery/casino_prize_dispenser/process() //Might not need this, but just to be safe for now diff --git a/code/modules/catalogue/catalogue_data.dm b/code/modules/catalogue/catalogue_data.dm index 0452a70880e..84b00a4a1bf 100644 --- a/code/modules/catalogue/catalogue_data.dm +++ b/code/modules/catalogue/catalogue_data.dm @@ -103,8 +103,8 @@ GLOBAL_DATUM_INIT(catalogue_data, /datum/category_collection/catalogue, new) . += item /datum/category_item/catalogue/proc/display_in_chatlog(mob/user) - to_chat(user, "
    ") - to_chat(user, span_notice("[uppertext(name)]")) + to_chat(user, span_infoplain("
    ")) + to_chat(user, span_boldnotice("[uppertext(name)]")) // Some entries get very long so lets not totally flood the chatlog. var/desc_length_limit = 750 @@ -113,7 +113,7 @@ GLOBAL_DATUM_INIT(catalogue_data, /datum/category_collection/catalogue, new) displayed_desc = copytext(displayed_desc, 1, desc_length_limit + 1) displayed_desc += "... (View databanks for full data)" - to_chat(user, span_notice("[displayed_desc]")) + to_chat(user, span_notice(span_italics("[displayed_desc]"))) to_chat(user, span_notice("Cataloguers : [english_list(cataloguers)].")) to_chat(user, span_notice("Contributes [value] points to personal exploration fund.")) diff --git a/code/modules/catalogue/cataloguer.dm b/code/modules/catalogue/cataloguer.dm index b4f4e5a45f6..766fd2e9394 100644 --- a/code/modules/catalogue/cataloguer.dm +++ b/code/modules/catalogue/cataloguer.dm @@ -258,7 +258,7 @@ GLOBAL_LIST_EMPTY(all_cataloguers) dat += "\[(DEBUG) Force Discovery\]" dat += "
    " - dat += "[displayed_data.desc]" + dat += span_italics("[displayed_data.desc]") if(LAZYLEN(displayed_data.cataloguers)) dat += "Cataloguers : [english_list(displayed_data.cataloguers)]." else @@ -271,7 +271,7 @@ GLOBAL_LIST_EMPTY(all_cataloguers) var/list/group_dat = list() var/show_group = FALSE - group_dat += "[group.name]" + group_dat += span_bold("[group.name]") for(var/datum/category_item/catalogue/item as anything in group.items) if(item.visible || debug) group_dat += "[item.name]" @@ -326,7 +326,7 @@ GLOBAL_LIST_EMPTY(all_cataloguers) Alt+click to highlight scannable objects around you." icon = 'icons/obj/device_vr.dmi' icon_state = "compact" - action_button_name = "Toggle Cataloguer" + actions_types = list(/datum/action/item_action/toggle_cataloguer) var/deployed = TRUE scan_range = 1 toolspeed = 1.2 @@ -346,7 +346,7 @@ GLOBAL_LIST_EMPTY(all_cataloguers) else icon_state = initial(icon_state) -/obj/item/cataloguer/compact/ui_action_click() +/obj/item/cataloguer/compact/ui_action_click(mob/user, actiontype) toggle() /obj/item/cataloguer/compact/verb/toggle() @@ -368,7 +368,7 @@ GLOBAL_LIST_EMPTY(all_cataloguers) if (ismob(usr)) var/mob/M = usr - M.update_action_buttons() + M.update_action_buttons_icon() /obj/item/cataloguer/compact/afterattack(atom/target, mob/user, proximity_flag) if(!deployed) diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index 457b6d0fce1..155950ae431 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -36,6 +36,8 @@ //////////////// //ADMIN THINGS// //////////////// + /// hides the byond verb panel as we use our own custom version + show_verb_panel = FALSE ///Contains admin info. Null if client is not an admin. var/datum/admins/holder = null var/datum/admins/deadmin_holder = null @@ -113,6 +115,23 @@ // Runechat messages var/list/seen_messages + /// our current tab + var/stat_tab + + /// list of all tabs + var/list/panel_tabs = list() + /// list of tabs containing spells and abilities + var/list/spell_tabs = list() + /// list of misc tabs from mob + var/list/misc_tabs = list() + ///A lazy list of atoms we've examined in the last RECENT_EXAMINE_MAX_WINDOW (default 2) seconds, so that we will call [/atom/proc/examine_more] instead of [/atom/proc/examine] on them when examining + var/list/recent_examines + ///Our object window datum. It stores info about and handles behavior for the object tab + var/datum/object_window_info/obj_window + + var/list/misc_cache = list() + + var/atom/examine_icon //Holder for examine icon, useful for statpanel //Hide top bars var/fullscreen = FALSE diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 54f210cf679..e80ed93faaa 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -73,7 +73,7 @@ to_chat(src, span_warning("You are no longer able to use this, it's been more than 10 minutes since an admin on IRC has responded to you")) return if(mute_irc) - to_chat(src, "") + to_chat(usr, span_warning("You cannot use this as your client has been muted from sending messages to the admins on IRC")) return send2adminirc(href_list["irc_msg"]) return @@ -113,6 +113,8 @@ log_and_message_admins("[ckey] failed to register their Discord ID. Their Discord snowflake ID is: [their_id]. Is the database connected?") return //VOREStation Add End + if(href_list["reload_statbrowser"]) + stat_panel.reinitialize() //Logs all hrefs if(config && config.log_hrefs && href_logfile) @@ -181,6 +183,10 @@ GLOB.clients += src GLOB.directory[ckey] = src + // Instantiate stat panel + stat_panel = new(src, "statbrowser") + stat_panel.subscribe(src, .proc/on_stat_panel_message) + // Instantiate tgui panel tgui_say = new(src, "tgui_say") initialize_commandbar_spy() @@ -218,6 +224,14 @@ if(prefs) prefs.selecting_slots = FALSE + // Initialize stat panel + stat_panel.initialize( + inline_html = file2text('html/statbrowser.html'), + inline_js = file2text('html/statbrowser.js'), + inline_css = file2text('html/statbrowser.css'), + ) + addtimer(CALLBACK(src, PROC_REF(check_panel_loaded)), 30 SECONDS) + // Initialize tgui panel tgui_say.initialize() tgui_panel.initialize() @@ -652,3 +666,43 @@ to_chat(src, span_warning("No recorded playtime found!")) return to_chat(src, span_info("Your department hours:" + department_hours)) + +/// compiles a full list of verbs and sends it to the browser +/client/proc/init_verbs() + if(IsAdminAdvancedProcCall()) + return + var/list/verblist = list() + panel_tabs.Cut() + for(var/thing in (verbs + mob?.verbs)) + var/procpath/verb_to_init = thing + if(!verb_to_init) + continue + if(verb_to_init.hidden) + continue + if(!istext(verb_to_init.category)) + continue + panel_tabs |= verb_to_init.category + verblist[++verblist.len] = list(verb_to_init.category, verb_to_init.name, verb_to_init.desc) + src.stat_panel.send_message("init_verbs", list(panel_tabs = panel_tabs, verblist = verblist)) + +/client/proc/check_panel_loaded() + if(stat_panel && stat_panel.is_ready()) + return + to_chat(src, "Statpanel failed to load, click here to reload the panel. If this does not work, reconnecting will reassign a new panel.") + +/** + * Handles incoming messages from the stat-panel TGUI. + */ +/client/proc/on_stat_panel_message(type, payload) + switch(type) + if("Update-Verbs") + init_verbs() + if("Remove-Tabs") + panel_tabs -= payload["tab"] + if("Send-Tabs") + panel_tabs |= payload["tab"] + if("Reset-Tabs") + panel_tabs = list() + if("Set-Tab") + stat_tab = payload["tab"] + SSstatpanels.immediate_send_stat_data(src) diff --git a/code/modules/client/preference_setup/antagonism/01_basic.dm b/code/modules/client/preference_setup/antagonism/01_basic.dm index 3572a2fd624..438692e1735 100644 --- a/code/modules/client/preference_setup/antagonism/01_basic.dm +++ b/code/modules/client/preference_setup/antagonism/01_basic.dm @@ -30,11 +30,11 @@ var/global/list/uplink_locations = list("PDA", "Headset", "None") /datum/category_item/player_setup_item/antagonism/basic/content(var/mob/user) . += "Faction: [pref.antag_faction]
    " . += "Visibility: [pref.antag_vis]
    " - . +="Uplink Type : [pref.uplinklocation]" + . +=span_bold("Uplink Type : [pref.uplinklocation]") . +="
    " - . +="Exploitable information:
    " + . +=span_bold("Exploitable information:") + "
    " if(jobban_isbanned(user, "Records")) - . += "You are banned from using character records.
    " + . += span_bold("You are banned from using character records.") + "
    " else . +="[TextPreview(pref.exploit_record,40)]
    " diff --git a/code/modules/client/preference_setup/antagonism/02_candidacy.dm b/code/modules/client/preference_setup/antagonism/02_candidacy.dm index 5f4934f1818..d4000472749 100644 --- a/code/modules/client/preference_setup/antagonism/02_candidacy.dm +++ b/code/modules/client/preference_setup/antagonism/02_candidacy.dm @@ -42,16 +42,16 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set /datum/category_item/player_setup_item/antagonism/candidacy/content(var/mob/user) if(jobban_isbanned(user, JOB_SYNDICATE)) - . += "You are banned from antagonist roles." + . += span_bold("You are banned from antagonist roles.") pref.be_special = 0 else var/n = 0 for (var/i in special_roles) if(special_roles[i]) //if mode is available on the server if(jobban_isbanned(user, i) || (i == "positronic brain" && jobban_isbanned(user, JOB_AI) && jobban_isbanned(user, JOB_CYBORG)) || (i == "pAI candidate" && jobban_isbanned(user, JOB_PAI))) - . += "Be [i]: \[BANNED]
    " + . += span_bold("Be [i]:") + " \[BANNED]
    " else - . += "Be [i]: [pref.be_special&(1<
    " + . += span_bold("Be [i]:") + " " + span_bold("[pref.be_special&(1<
    " n++ /datum/category_item/player_setup_item/antagonism/candidacy/OnTopic(var/href,var/list/href_list, var/mob/user) diff --git a/code/modules/client/preference_setup/general/01_basic.dm b/code/modules/client/preference_setup/general/01_basic.dm index 51239bf5ab4..2ed923cbfb6 100644 --- a/code/modules/client/preference_setup/general/01_basic.dm +++ b/code/modules/client/preference_setup/general/01_basic.dm @@ -81,20 +81,20 @@ /datum/category_item/player_setup_item/general/basic/content() . = list() - . += "Name: " + . += span_bold("Name:") + " " . += "
    [pref.real_name]
    " . += "Randomize Name
    " . += "Always Random Name: [pref.be_random_name ? "Yes" : "No"]
    " - . += "Nickname: " + . += span_bold("Nickname:") + " " . += "[pref.nickname]" . += "(Clear)" . += "
    " - . += "Biological Sex: [gender2text(pref.biological_gender)]
    " - . += "Pronouns: [gender2text(pref.identifying_gender)]
    " - . += "Age: [pref.age] Birthday: [pref.bday_month]/[pref.bday_day] - Announce?: [pref.bday_announce ? "Yes" : "No"]
    " - . += "Spawn Point: [pref.spawnpoint]
    " + . += span_bold("Biological Sex:") + " [gender2text(pref.biological_gender)]
    " + . += span_bold("Pronouns:") + " [gender2text(pref.identifying_gender)]
    " + . += span_bold("Age:") + " [pref.age] Birthday: [pref.bday_month]/[pref.bday_day] - Announce?: [pref.bday_announce ? "Yes" : "No"]
    " + . += span_bold("Spawn Point") + ": [pref.spawnpoint]
    " if(config.allow_Metadata) - . += "OOC Notes: EditLikesDislikes
    " + . += span_bold("OOC Notes: EditLikesDislikes") + "
    " . = jointext(.,null) /datum/category_item/player_setup_item/general/basic/OnTopic(var/href,var/list/href_list, var/mob/user) diff --git a/code/modules/client/preference_setup/general/02_language.dm b/code/modules/client/preference_setup/general/02_language.dm index 939c7975f00..59e8d2f34f7 100644 --- a/code/modules/client/preference_setup/general/02_language.dm +++ b/code/modules/client/preference_setup/general/02_language.dm @@ -68,7 +68,7 @@ pref.runechat_color = sanitize_hexcolor(pref.runechat_color, COLOR_BLACK) /datum/category_item/player_setup_item/general/language/content() - . += "Languages
    " + . += span_bold("Languages") + "
    " var/datum/species/S = GLOB.all_species[pref.species] if(pref.alternate_languages.len > (S.num_alternate_languages + pref.extra_languages)) testing("LANGSANI: Truncated [pref.client]'s character [pref.real_name || "-name not yet loaded-"] language list because it was too long (len: [pref.alternate_languages.len], allowed: [S.num_alternate_languages])") @@ -88,10 +88,10 @@ else . += "- [pref.species] cannot choose secondary languages.
    " - . += "Language Keys
    " + . += span_bold("Language Keys") + "
    " . += " [jointext(pref.language_prefixes, " ")] Change Reset
    " - . += "Preferred Language [pref.preferred_language]
    " // VOREStation Add - . += "Runechat Color Change Runechat Color [color_square(hex = pref.runechat_color)]" + . += span_bold("Preferred Language") + " [pref.preferred_language]
    " // VOREStation Add + . += span_bold("Runechat Color") + " Change Runechat Color [color_square(hex = pref.runechat_color)]" /datum/category_item/player_setup_item/general/language/OnTopic(var/href,var/list/href_list, var/mob/user) if(href_list["remove_language"]) diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index 19c88ea7bf7..8a5c5b4bcac 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -582,12 +582,12 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O . += "
    [pref.animations_toggle ? "Stop animations" : "Show animations"]" . += "
    " - . += "Hair
    " + . += span_bold("Hair") + "
    " if(has_flag(mob_species, HAS_HAIR_COLOR)) . += "Change Color [color_square(pref.r_hair, pref.g_hair, pref.b_hair)] " . += " Style: < > [pref.h_style]
    " //The < & > in this line is correct-- those extra characters are the arrows you click to switch between styles. - . += "Gradient
    " + . += span_bold("Gradient") + "
    " . += "Change Color [color_square(pref.r_grad, pref.g_grad, pref.b_grad)] " . += " Style: < > [pref.grad_style]
    " @@ -611,7 +611,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O var/list/ear_styles = pref.get_available_styles(global.ear_styles_list) var/datum/sprite_accessory/ears/ear = ear_styles[pref.ear_style] - . += "Ears
    " + . += span_bold("Ears") + "
    " if(istype(ear)) . += " Style: [ear.name]
    " if(ear.do_colouration) @@ -625,7 +625,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O var/list/tail_styles = pref.get_available_styles(global.tail_styles_list) var/datum/sprite_accessory/tail/tail = tail_styles[pref.tail_style] - . += "Tail
    " + . += span_bold("Tail") + "
    " if(istype(tail)) . += " Style: [tail.name]
    " if(tail.do_colouration) @@ -639,7 +639,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O var/list/wing_styles = pref.get_available_styles(global.wing_styles_list) var/datum/sprite_accessory/wing/wings = wing_styles[pref.wing_style] - . += "Wing
    " + . += span_bold("Wing") + "
    " if(istype(wings)) . += " Style: [wings.name]
    " if(wings.do_colouration) @@ -658,8 +658,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O . += "" . += "
    " - . += "Allow Synth markings: [pref.synth_markings ? "Yes" : "No"]
    " - . += "Allow Synth color: [pref.synth_color ? "Yes" : "No"]
    " + . += span_bold("Allow Synth markings:") + " [pref.synth_markings ? "Yes" : "No"]
    " + . += span_bold("Allow Synth color:") + " [pref.synth_color ? "Yes" : "No"]
    " if(pref.synth_color) . += "Change Color [color_square(pref.r_synth, pref.g_synth, pref.b_synth)]" @@ -1368,7 +1368,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O if("preview" in cached_icon_states(current_species.icobase)) usr << browse_rsc(icon(current_species.icobase,"preview"), "species_preview_[current_species.name].png") dat += "

    " - dat += "Language: [current_species.species_language]
    " + dat += span_bold("Language:") + " [current_species.species_language]
    " dat += "" if(current_species.spawn_flags & SPECIES_CAN_JOIN) switch(current_species.rarity_value) diff --git a/code/modules/client/preference_setup/general/04_equipment.dm b/code/modules/client/preference_setup/general/04_equipment.dm index 554885046cb..14c56354f93 100644 --- a/code/modules/client/preference_setup/general/04_equipment.dm +++ b/code/modules/client/preference_setup/general/04_equipment.dm @@ -113,7 +113,7 @@ var/global/list/valid_ringtones = list( /datum/category_item/player_setup_item/general/equipment/content() . = list() - . += "Equipment:
    " + . += span_bold("Equipment:") + "
    " for(var/datum/category_group/underwear/UWC in global_underwear.categories) var/item_name = pref.all_underwear[UWC.name] ? pref.all_underwear[UWC.name] : "None" . += "[UWC.name]: [item_name]" diff --git a/code/modules/client/preference_setup/general/05_background.dm b/code/modules/client/preference_setup/general/05_background.dm index 77d3c1979ee..bbf4e9f694d 100644 --- a/code/modules/client/preference_setup/general/05_background.dm +++ b/code/modules/client/preference_setup/general/05_background.dm @@ -44,7 +44,7 @@ character.religion = pref.religion /datum/category_item/player_setup_item/general/background/content(var/mob/user) - . += "Background Information
    " + . += span_bold("Background Information") + "
    " . += "Economic Status: [pref.economic_status]
    " . += "Home: [pref.home_system]
    " . += "Birthplace: [pref.birthplace]
    " @@ -54,7 +54,7 @@ . += "
    Records:
    " if(jobban_isbanned(user, "Records")) - . += "You are banned from using character records.
    " + . += span_danger("You are banned from using character records.") + "
    " else . += "Medical Records:
    " . += "[TextPreview(pref.med_record,40)]
    " diff --git a/code/modules/client/preference_setup/general/06_flavor.dm b/code/modules/client/preference_setup/general/06_flavor.dm index fa14cce603d..334fd413fd2 100644 --- a/code/modules/client/preference_setup/general/06_flavor.dm +++ b/code/modules/client/preference_setup/general/06_flavor.dm @@ -54,7 +54,7 @@ character.custom_link = pref.custom_link /datum/category_item/player_setup_item/general/flavor/content(var/mob/user) - . += "Flavor:
    " + . += span_bold("Flavor:") + "
    " . += "Set Flavor Text
    " . += "Set Robot Flavor Text
    " . += "Set Custom Link
    " @@ -64,11 +64,11 @@ switch(href_list["flavor_text"]) if("open") if("general") - var/msg = strip_html_simple(tgui_input_text(usr,"Give a general description of your character. This will be shown regardless of clothings. Put in a single space to make blank.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE)) //VOREStation Edit: separating out OOC notes + var/msg = strip_html_simple(tgui_input_text(user,"Give a general description of your character. This will be shown regardless of clothings. Put in a single space to make blank.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE)) //VOREStation Edit: separating out OOC notes if(CanUseTopic(user) && msg) pref.flavor_texts[href_list["flavor_text"]] = msg else - var/msg = strip_html_simple(tgui_input_text(usr,"Set the flavor text for your [href_list["flavor_text"]]. Put in a single space to make blank.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE)) + var/msg = strip_html_simple(tgui_input_text(user,"Set the flavor text for your [href_list["flavor_text"]]. Put in a single space to make blank.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE)) if(CanUseTopic(user) && msg) pref.flavor_texts[href_list["flavor_text"]] = msg SetFlavorText(user) @@ -78,30 +78,30 @@ switch(href_list["flavour_text_robot"]) if("open") if("Default") - var/msg = strip_html_simple(tgui_input_text(usr,"Set the default flavour text for your robot. It will be used for any module without individual setting. Put in a single space to make blank.","Flavour Text",html_decode(pref.flavour_texts_robot["Default"]), multiline = TRUE, prevent_enter = TRUE)) + var/msg = strip_html_simple(tgui_input_text(user,"Set the default flavour text for your robot. It will be used for any module without individual setting. Put in a single space to make blank.","Flavour Text",html_decode(pref.flavour_texts_robot["Default"]), multiline = TRUE, prevent_enter = TRUE)) if(CanUseTopic(user) && msg) pref.flavour_texts_robot[href_list["flavour_text_robot"]] = msg else - var/msg = strip_html_simple(tgui_input_text(usr,"Set the flavour text for your robot with [href_list["flavour_text_robot"]] module. If you leave this blank, default flavour text will be used for this module. Put in a single space to make blank.","Flavour Text",html_decode(pref.flavour_texts_robot[href_list["flavour_text_robot"]]), multiline = TRUE, prevent_enter = TRUE)) + var/msg = strip_html_simple(tgui_input_text(user,"Set the flavour text for your robot with [href_list["flavour_text_robot"]] module. If you leave this blank, default flavour text will be used for this module. Put in a single space to make blank.","Flavour Text",html_decode(pref.flavour_texts_robot[href_list["flavour_text_robot"]]), multiline = TRUE, prevent_enter = TRUE)) if(CanUseTopic(user) && msg) pref.flavour_texts_robot[href_list["flavour_text_robot"]] = msg SetFlavourTextRobot(user) return TOPIC_HANDLED else if(href_list["custom_link"]) - var/new_link = strip_html_simple(tgui_input_text(usr, "Enter a link to add on to your examine text! This should be a related image link/gallery, or things like your F-list. This is not the place for memes.", "Custom Link" , html_decode(pref.custom_link), max_length = 100, encode = TRUE, prevent_enter = TRUE)) - if(new_link && CanUseTopic(usr)) + var/new_link = strip_html_simple(tgui_input_text(user, "Enter a link to add on to your examine text! This should be a related image link/gallery, or things like your F-list. This is not the place for memes.", "Custom Link" , html_decode(pref.custom_link), max_length = 100, encode = TRUE, prevent_enter = TRUE)) + if(new_link && CanUseTopic(user)) if(length(new_link) > 100) - to_chat(usr, "Your entry is too long, it must be 100 characters or less.") + to_chat(user, span_warning("Your entry is too long, it must be 100 characters or less.")) return pref.custom_link = new_link - log_admin("[usr]/[usr.ckey] set their custom link to [pref.custom_link]") + log_admin("[user]/[user.ckey] set their custom link to [pref.custom_link]") return ..() /datum/category_item/player_setup_item/general/flavor/proc/SetFlavorText(mob/user) var/HTML = "" HTML += "
    " - HTML += "Set Flavor Text
    " + HTML += span_bold("Set Flavor Text") + "
    " HTML += "Note: This is not *literal* flavor of your character. This is visual description of what they look like.
    " HTML += "
    " HTML += "General: " @@ -139,7 +139,7 @@ /datum/category_item/player_setup_item/general/flavor/proc/SetFlavourTextRobot(mob/user) var/HTML = "" HTML += "
    " - HTML += "Set Robot Flavour Text
    " + HTML += span_bold("Set Robot Flavour Text") + "
    " HTML += "
    " HTML += "Default: " HTML += TextPreview(pref.flavour_texts_robot["Default"]) diff --git a/code/modules/client/preference_setup/global/01_ui.dm b/code/modules/client/preference_setup/global/01_ui.dm index 91bbfea86a8..96a4d776eac 100644 --- a/code/modules/client/preference_setup/global/01_ui.dm +++ b/code/modules/client/preference_setup/global/01_ui.dm @@ -57,24 +57,24 @@ pref.chat_timestamp = sanitize_integer(pref.chat_timestamp, 0, 1, initial(pref.chat_timestamp)) /datum/category_item/player_setup_item/player_global/ui/content(var/mob/user) - . = "UI Style: [pref.UI_style]
    " - . += "Custom UI (recommended for White UI):
    " + . = span_bold("UI Style:") + " [pref.UI_style]
    " + . += span_bold("Custom UI") + " (recommended for White UI):
    " . += "-Color: [pref.UI_style_color] [color_square(hex = pref.UI_style_color)] reset
    " . += "-Alpha(transparency): [pref.UI_style_alpha] reset
    " - . += "Tooltip Style: [pref.tooltipstyle]
    " - . += "Client FPS: [pref.client_fps]
    " - . += "Random Ambience Frequency: [pref.ambience_freq]
    " - . += "Ambience Chance: [pref.ambience_chance]
    " - . += "TGUI Window Mode: [(pref.tgui_fancy) ? "Fancy (default)" : "Compatible (slower)"]
    " - . += "TGUI Window Placement: [(pref.tgui_lock) ? "Primary Monitor" : "Free (default)"]
    " - . += "TGUI Input Framework: [(pref.tgui_input_mode) ? "Enabled" : "Disabled (default)"]
    " - . += "TGUI Large Buttons: [(pref.tgui_large_buttons) ? "Enabled (default)" : "Disabled"]
    " - . += "TGUI Swapped Buttons: [(pref.tgui_swapped_buttons) ? "Enabled" : "Disabled (default)"]
    " - . += "Obfuscate Ckey: [(pref.obfuscate_key) ? "Enabled" : "Disabled (default)"]
    " - . += "Obfuscate Job: [(pref.obfuscate_job) ? "Enabled" : "Disabled (default)"]
    " - . += "Chat Timestamps: [(pref.chat_timestamp) ? "Enabled" : "Disabled (default)"]
    " + . += span_bold("Tooltip Style:") + " [pref.tooltipstyle]
    " + . += span_bold("Client FPS:") + " [pref.client_fps]
    " + . += span_bold("Random Ambience Frequency:") + " [pref.ambience_freq]
    " + . += span_bold("Ambience Chance:") + " [pref.ambience_chance]
    " + . += span_bold("TGUI Window Mode:") + " [(pref.tgui_fancy) ? "Fancy (default)" : "Compatible (slower)"]
    " + . += span_bold("TGUI Window Placement:") + " [(pref.tgui_lock) ? "Primary Monitor" : "Free (default)"]
    " + . += span_bold("TGUI Input Framework:") + " [(pref.tgui_input_mode) ? "Enabled" : "Disabled (default)"]
    " + . += span_bold("TGUI Large Buttons:") + " [(pref.tgui_large_buttons) ? "Enabled (default)" : "Disabled"]
    " + . += span_bold("TGUI Swapped Buttons:") + " [(pref.tgui_swapped_buttons) ? "Enabled" : "Disabled (default)"]
    " + . += span_bold("Obfuscate Ckey:") + " [(pref.obfuscate_key) ? "Enabled" : "Disabled (default)"]
    " + . += span_bold("Obfuscate Job:") + " [(pref.obfuscate_job) ? "Enabled" : "Disabled (default)"]
    " + . += span_bold("Chat Timestamps:") + " [(pref.chat_timestamp) ? "Enabled" : "Disabled (default)"]
    " if(can_select_ooc_color(user)) - . += "OOC Color:" + . += span_bold("OOC Color:") if(pref.ooccolor == initial(pref.ooccolor)) . += "Using Default
    " else diff --git a/code/modules/client/preference_setup/global/03_pai.dm b/code/modules/client/preference_setup/global/03_pai.dm index d9b20873d87..22c92e9905a 100644 --- a/code/modules/client/preference_setup/global/03_pai.dm +++ b/code/modules/client/preference_setup/global/03_pai.dm @@ -28,7 +28,7 @@ candidate.savefile_save(preference_mob()) /datum/category_item/player_setup_item/player_global/pai/content(var/mob/user) - . += "pAI:
    " + . += span_bold("pAI:") + "
    " if(!candidate) log_debug("[user] pAI prefs have a null candidate var.") return . diff --git a/code/modules/client/preference_setup/global/04_ooc.dm b/code/modules/client/preference_setup/global/04_ooc.dm index bdc20e1aa65..e99777927f2 100644 --- a/code/modules/client/preference_setup/global/04_ooc.dm +++ b/code/modules/client/preference_setup/global/04_ooc.dm @@ -15,7 +15,7 @@ pref.ignored_players = list() /datum/category_item/player_setup_item/player_global/ooc/content(var/mob/user) - . += "OOC:
    " + . += span_bold("OOC:") + "
    " . += "Ignored Players
    " for(var/ignored_player in pref.ignored_players) . += "[ignored_player] (Unignore)
    " diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm index ed7ba9242b0..ee8be1cf8b2 100644 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -156,7 +156,7 @@ var/list/gear_datums = list() category_cost += G.cost if(category == current_tab) - . += " [category] - [category_cost] " + . += " " + span_linkOn("[category] - [category_cost]") + " " else if(category_cost) . += " [category] - [category_cost] " diff --git a/code/modules/client/preference_setup/occupation/occupation.dm b/code/modules/client/preference_setup/occupation/occupation.dm index 3b5ec68c25e..ab64437a2ea 100644 --- a/code/modules/client/preference_setup/occupation/occupation.dm +++ b/code/modules/client/preference_setup/occupation/occupation.dm @@ -70,7 +70,7 @@ . = list() . += "
    " - . += "Choose occupation chances
    Unavailable occupations are crossed out.
    " + . += span_bold("Choose occupation chances") + "
    Unavailable occupations are crossed out.
    " . += "" . += "" - dat += "" + dat += "" dat += "
    " // Table within a table for alignment, also allows you to easily add more columns. . += "" @@ -158,7 +158,7 @@ . += "[rank]" continue if((rank in SSjob.get_job_titles_in_department(DEPARTMENT_COMMAND) ) || (rank == JOB_AI))//Bold head jobs - . += "[rank]" + . += span_bold("[rank]") + "" else . += "[rank]" @@ -210,11 +210,11 @@ switch(pref.alternate_option) if(GET_RANDOM_JOB) - . += "Get random job if preferences unavailable" + . += span_underline("Get random job if preferences unavailable") if(BE_ASSISTANT) - . += "Be assistant if preference unavailable" + . += span_underline("Be assistant if preference unavailable") if(RETURN_TO_LOBBY) - . += "Return to lobby if preference unavailable" + . += span_underline("Return to lobby if preference unavailable") . += "\[Reset\]" . += "" @@ -252,11 +252,11 @@ dat += "



    " if(job.alt_titles) - dat += "Alternate titles: [english_list(job.alt_titles)]." + dat += span_italics(span_bold("Alternate titles:") + " [english_list(job.alt_titles)].") send_rsc(user, job.get_job_icon(), "job[ckey(rank)].png") dat += "" if(job.departments) - dat += "Departments: [english_list(job.departments)]." + dat += span_bold("Departments:") + " [english_list(job.departments)]." if(LAZYLEN(job.departments_managed)) dat += "You manage these departments: [english_list(job.departments_managed)]" diff --git a/code/modules/client/preference_setup/skills/skills.dm b/code/modules/client/preference_setup/skills/skills.dm index 60e916241f6..a77254d6383 100644 --- a/code/modules/client/preference_setup/skills/skills.dm +++ b/code/modules/client/preference_setup/skills/skills.dm @@ -25,7 +25,7 @@ /datum/category_item/player_setup_item/skills/content() . = list() - . += "Select your Skills
    " + . += span_bold("Select your Skills") + "
    " . += "Current skill level: [pref.GetSkillClass(pref.used_skillpoints)] ([pref.used_skillpoints])
    " . += "Use preconfigured skillset
    " . += "

    " @@ -50,13 +50,13 @@ /datum/category_item/player_setup_item/proc/skill_to_button(var/skill, var/level_name, var/current_level, var/selection_level) if(current_level == selection_level) - return "" + return "" return "" /datum/category_item/player_setup_item/skills/OnTopic(href, href_list, user) if(href_list["skillinfo"]) var/datum/skill/S = locate(href_list["skillinfo"]) - var/HTML = "[S.name]
    [S.desc]" + var/HTML = span_bold("[S.name]") + "
    [S.desc]" user << browse(HTML, "window=\ref[user]skillinfo") return TOPIC_HANDLED diff --git a/code/modules/client/preference_setup/traits/traits.dm b/code/modules/client/preference_setup/traits/traits.dm index b0d2f4d9631..f51459de337 100644 --- a/code/modules/client/preference_setup/traits/traits.dm +++ b/code/modules/client/preference_setup/traits/traits.dm @@ -58,7 +58,7 @@ var/list/trait_categories = list() // The categories available for the trait men . += " |" if(category == current_tab) - . += " [category] " + . += " " + span_linkOn("[category]") + " " else . += " [category] " . += "" diff --git a/code/modules/client/preference_setup/volume_sliders/01_volume.dm b/code/modules/client/preference_setup/volume_sliders/01_volume.dm index fef2b043567..46a38bbb92a 100644 --- a/code/modules/client/preference_setup/volume_sliders/01_volume.dm +++ b/code/modules/client/preference_setup/volume_sliders/01_volume.dm @@ -29,7 +29,7 @@ pref.volume_channels["[channel]"] = clamp(pref.volume_channels["[channel]"], 0, 2) /datum/category_item/player_setup_item/volume_sliders/volume/content(var/mob/user) - . += "Volume Settings
    " + . += span_bold("Volume Settings") + "
    " for(var/channel in pref.volume_channels) . += "[channel]: [pref.volume_channels[channel] * 100]%
    " . += "
    " diff --git a/code/modules/client/preference_setup/volume_sliders/02_media.dm b/code/modules/client/preference_setup/volume_sliders/02_media.dm index 1b07b204a52..979eac55ce6 100644 --- a/code/modules/client/preference_setup/volume_sliders/02_media.dm +++ b/code/modules/client/preference_setup/volume_sliders/02_media.dm @@ -19,9 +19,9 @@ pref.media_player = sanitize_inlist(pref.media_player, list(0, 1, 2), initial(pref.media_player)) /datum/category_item/player_setup_item/volume_sliders/media/content(var/mob/user) - . += "Jukebox Volume:" + . += span_bold("Jukebox Volume:") . += "[round(pref.media_volume * 100)]%
    " - . += "Media Player Type: Depending on you operating system, one of these might work better. " + . += span_bold("Media Player Type:") + " Depending on you operating system, one of these might work better. " . += "Use HTML5 if it works for you. If neither HTML5 nor WMP work, you'll have to fall back to using VLC, " . += "but this requires you have the VLC client installed on your comptuer." . += "Try the others if you want but you'll probably just get no music.
    " diff --git a/code/modules/client/preference_setup/vore/02_size.dm b/code/modules/client/preference_setup/vore/02_size.dm index 2cd0e603abb..26cfdc197b5 100644 --- a/code/modules/client/preference_setup/vore/02_size.dm +++ b/code/modules/client/preference_setup/vore/02_size.dm @@ -101,17 +101,17 @@ /datum/category_item/player_setup_item/vore/size/content(var/mob/user) . += "
    " - . += "Scale:[round(pref.size_multiplier*100)]%
    " - . += "Scaled Appearance:[pref.fuzzy ? "Fuzzy" : "Sharp"]
    " - . += "Scaling Center:[pref.offset_override ? "Odd" : "Even"]
    " - . += "Voice Frequency:[pref.voice_freq]
    " - . += "Voice Sounds:[pref.voice_sound]
    " + . += span_bold("Scale:") + " [round(pref.size_multiplier*100)]%
    " + . += span_bold("Scaled Appearance:") + " [pref.fuzzy ? "Fuzzy" : "Sharp"]
    " + . += span_bold("Scaling Center:") + " [pref.offset_override ? "Odd" : "Even"]
    " + . += span_bold("Voice Frequency:") + " [pref.voice_freq]
    " + . += span_bold("Voice Sounds:") + " [pref.voice_sound]
    " . += "Test Selected Voice
    " - . += "Custom Speech Bubble:[pref.custom_speech_bubble]
    " + . += span_bold("Custom Speech Bubble:") + " [pref.custom_speech_bubble]
    " . += "
    " - . += "Relative Weight:[pref.weight_vr]
    " - . += "Weight Gain Rate:[pref.weight_gain]
    " - . += "Weight Loss Rate:[pref.weight_loss]
    " + . += span_bold("Relative Weight:") + " [pref.weight_vr]
    " + . += span_bold("Weight Gain Rate:") + " [pref.weight_gain]
    " + . += span_bold("Weight Loss Rate:") + " [pref.weight_loss]
    " /datum/category_item/player_setup_item/vore/size/OnTopic(var/href, var/list/href_list, var/mob/user) if(href_list["size_multiplier"]) diff --git a/code/modules/client/preference_setup/vore/03_egg.dm b/code/modules/client/preference_setup/vore/03_egg.dm index f330d419ce1..e8e989f9df4 100644 --- a/code/modules/client/preference_setup/vore/03_egg.dm +++ b/code/modules/client/preference_setup/vore/03_egg.dm @@ -44,7 +44,7 @@ /datum/category_item/player_setup_item/vore/egg/content(var/mob/user) . += "
    " . += " Egg Type: [pref.vore_egg_type]
    " - . += "Autohiss Default Setting:[pref.autohiss]
    " // VOREStation Add + . += span_bold("Autohiss Default Setting:") + " [pref.autohiss]
    " // VOREStation Add /datum/category_item/player_setup_item/vore/egg/OnTopic(var/href, var/list/href_list, var/mob/user) if(!CanUseTopic(user)) diff --git a/code/modules/client/preference_setup/vore/04_resleeving.dm b/code/modules/client/preference_setup/vore/04_resleeving.dm index 28dcdd603fb..6ec8ca51bff 100644 --- a/code/modules/client/preference_setup/vore/04_resleeving.dm +++ b/code/modules/client/preference_setup/vore/04_resleeving.dm @@ -42,9 +42,9 @@ /datum/category_item/player_setup_item/vore/resleeve/content(var/mob/user) . += "
    " - . += "Start With Body Scan:[pref.resleeve_scan ? "Yes" : "No"]
    " - . += "Start With Mind Scan:[pref.mind_scan ? "Yes" : "No"]
    " - . += "Prevent Body Impersonation:[pref.resleeve_lock ? "Yes" : "No"]
    " + . += span_bold("Start With Body Scan:") + " [pref.resleeve_scan ? "Yes" : "No"]
    " + . += span_bold("Start With Mind Scan:") + " [pref.mind_scan ? "Yes" : "No"]
    " + . += span_bold("Prevent Body Impersonation:") + " [pref.resleeve_lock ? "Yes" : "No"]
    " /datum/category_item/player_setup_item/vore/resleeve/OnTopic(var/href, var/list/href_list, var/mob/user) if(href_list["toggle_resleeve_lock"]) diff --git a/code/modules/client/preference_setup/vore/05_persistence.dm b/code/modules/client/preference_setup/vore/05_persistence.dm index bb2535f44b8..704b22bb6ca 100644 --- a/code/modules/client/preference_setup/vore/05_persistence.dm +++ b/code/modules/client/preference_setup/vore/05_persistence.dm @@ -19,7 +19,7 @@ /datum/category_item/player_setup_item/vore/persistence/content(var/mob/user) . = list() - . += "Round-to-Round Persistence
    " + . += span_bold("Round-to-Round Persistence") + "
    " . += "
    [level_name]" + span_linkOn("[level_name]") + "[level_name]
    " . += "" @@ -47,9 +47,9 @@ /datum/category_item/player_setup_item/vore/persistence/proc/make_yesno(var/bit) if(pref.persistence_settings & bit) - return "" + return "" else - return "" + return "" /datum/category_item/player_setup_item/vore/persistence/OnTopic(var/href, var/list/href_list, var/mob/user) if(href_list["toggle_on"]) diff --git a/code/modules/client/preference_setup/vore/06_vantag.dm b/code/modules/client/preference_setup/vore/06_vantag.dm index 78d801a75e5..5433e712f04 100644 --- a/code/modules/client/preference_setup/vore/06_vantag.dm +++ b/code/modules/client/preference_setup/vore/06_vantag.dm @@ -27,8 +27,8 @@ /datum/category_item/player_setup_item/vore/vantag/content(var/mob/user) . += "
    " - . += "Event Volunteer:[pref.vantag_volunteer ? "Yes" : "No"]
    " - . += "Event Pref:[vantag_choices_list[pref.vantag_preference]]
    " + . += span_bold("Event Volunteer:") + " " + span_bold("[pref.vantag_volunteer ? "Yes" : "No"]") + "
    " + . += span_bold("Event Pref:") + " " + span_bold("[vantag_choices_list[pref.vantag_preference]]") + "
    " /datum/category_item/player_setup_item/vore/vantag/OnTopic(var/href, var/list/href_list, var/mob/user) if(href_list["toggle_vantag_volunteer"]) diff --git a/code/modules/client/preference_setup/vore/07_traits.dm b/code/modules/client/preference_setup/vore/07_traits.dm index b759c87b6ba..2614b6a8f4f 100644 --- a/code/modules/client/preference_setup/vore/07_traits.dm +++ b/code/modules/client/preference_setup/vore/07_traits.dm @@ -267,12 +267,12 @@ var/global/list/valid_bloodreagents = list("default","iron","copper","phoron","s log_game("TRAITS [pref.client_ckey]/([character]) with: [english_traits]") //Terrible 'fake' key_name()... but they aren't in the same entity yet /datum/category_item/player_setup_item/vore/traits/content(var/mob/user) - . += "Custom Species Name: " + . += span_bold("Custom Species Name:") + " " . += "[pref.custom_species ? pref.custom_species : "-Input Name-"]
    " var/datum/species/selected_species = GLOB.all_species[pref.species] if(selected_species.selects_bodytype) - . += "Icon Base: " + . += span_bold("Icon Base:") + " " . += "[pref.custom_base ? pref.custom_base : "Human"]
    " var/traits_left = pref.max_traits @@ -284,10 +284,10 @@ var/global/list/valid_bloodreagents = list("default","iron","copper","phoron","s points_left -= traits_costs[T] if(T in pref.pos_traits) traits_left-- - . += "Traits Left: [traits_left]
    " - . += "Points Left: [points_left]
    " + . += span_bold("Traits Left:") + " [traits_left]
    " + . += span_bold("Points Left:") + " [points_left]
    " if(points_left < 0 || traits_left < 0 || (!pref.custom_species && pref.species == SPECIES_CUSTOM)) - . += "^ Fix things! ^
    " + . += span_red(span_bold("^ Fix things! ^")) + "
    " . += "Positive Trait +
    " . += "
      " @@ -310,34 +310,34 @@ var/global/list/valid_bloodreagents = list("default","iron","copper","phoron","s . += "
    • - [trait.name] ([trait.cost]) [get_html_for_trait(trait, pref.neg_traits[T])]
    • " . += "
    " - . += "Blood Color: " //People that want to use a certain species to have that species traits (xenochimera/promethean/spider) should be able to set their own blood color. + . += span_bold("Blood Color: ") //People that want to use a certain species to have that species traits (xenochimera/promethean/spider) should be able to set their own blood color. . += "Set Color " . += "R
    " - . += "Blood Reagent: " //Wanna be copper-based? Go ahead. + . += span_bold("Blood Reagent: ") //Wanna be copper-based? Go ahead. . += "[pref.blood_reagents]
    " . += "
    " - . += "Custom Say: " + . += span_bold("Custom Say: ") . += "Set Say Verb" . += "(Reset)" . += "
    " - . += "Custom Whisper: " + . += span_bold("Custom Whisper: ") . += "Set Whisper Verb" . += "(Reset)" . += "
    " - . += "Custom Ask: " + . += span_bold("Custom Ask: ") . += "Set Ask Verb" . += "(Reset)" . += "
    " - . += "Custom Exclaim: " + . += span_bold("Custom Exclaim: ") . += "Set Exclaim Verb" . += "(Reset)" . += "
    " - . += "Custom Heat Discomfort: " + . += span_bold("Custom Heat Discomfort: ") . += "Set Heat Messages" . += "(Reset)" . += "
    " - . += "Custom Cold Discomfort: " + . += span_bold("Custom Cold Discomfort: ") . += "Set Cold Messages" . += "(Reset)" . += "
    " diff --git a/code/modules/client/preference_setup/vore/08_nif.dm b/code/modules/client/preference_setup/vore/08_nif.dm index 05d2481fa5a..4075e0db0db 100644 --- a/code/modules/client/preference_setup/vore/08_nif.dm +++ b/code/modules/client/preference_setup/vore/08_nif.dm @@ -57,4 +57,4 @@ new pref.nif_path(character, pref.nif_durability, pref.nif_savedata) /datum/category_item/player_setup_item/vore/nif/content(var/mob/user) - . += "NIF: [ispath(pref.nif_path) ? "Present" : "None"]" + . += span_bold("NIF:") + " [ispath(pref.nif_path) ? "Present" : "None"]" diff --git a/code/modules/client/preference_setup/vore/09_misc.dm b/code/modules/client/preference_setup/vore/09_misc.dm index c1486d76f24..c2e3ebd24bd 100644 --- a/code/modules/client/preference_setup/vore/09_misc.dm +++ b/code/modules/client/preference_setup/vore/09_misc.dm @@ -45,15 +45,15 @@ /datum/category_item/player_setup_item/vore/misc/content(var/mob/user) . += "
    " - . += "Appear in Character Directory:[pref.show_in_directory ? "Yes" : "No"]
    " - . += "Character Directory Vore Tag:[pref.directory_tag]
    " - . += "Character Directory ERP Tag:[pref.directory_erptag]
    " - . += "Character Directory Advertisement:Set Directory Ad
    " - . += "Suit Sensors Preference:[sensorpreflist[pref.sensorpref]]
    " - . += "Capture Crystal Preference:[pref.capture_crystal ? "Yes" : "No"]
    " - . += "Spawn With Backup Implant:[pref.auto_backup_implant ? "Yes" : "No"]
    " - . += "Allow petting as robot:[pref.borg_petting ? "Yes" : "No"]
    " - . += "Enable Stomach Sprites:[pref.stomach_vision ? "Yes" : "No"]
    " + . += span_bold("Appear in Character Directory:") + " [pref.show_in_directory ? "Yes" : "No"]
    " + . += span_bold("Character Directory Vore Tag:") + " [pref.directory_tag]
    " + . += span_bold("Character Directory ERP Tag:") + " [pref.directory_erptag]
    " + . += span_bold("Character Directory Advertisement:") + " Set Directory Ad
    " + . += span_bold("Suit Sensors Preference:") + " [sensorpreflist[pref.sensorpref]]
    " + . += span_bold("Capture Crystal Preference:") + " [pref.capture_crystal ? "Yes" : "No"]
    " + . += span_bold("Spawn With Backup Implant:") + " [pref.auto_backup_implant ? "Yes" : "No"]
    " + . += span_bold("Allow petting as robot:") + " [pref.borg_petting ? "Yes" : "No"]
    " + . += span_bold("Enable Stomach Sprites:") + " [pref.stomach_vision ? "Yes" : "No"]
    " /datum/category_item/player_setup_item/vore/misc/OnTopic(var/href, var/list/href_list, var/mob/user) if(href_list["toggle_show_in_directory"]) diff --git a/code/modules/client/verbs/advanced_who.dm b/code/modules/client/verbs/advanced_who.dm index 6860d44c072..a8acf146ce2 100644 --- a/code/modules/client/verbs/advanced_who.dm +++ b/code/modules/client/verbs/advanced_who.dm @@ -3,7 +3,7 @@ set name = "Advanced Who" set category = "OOC" - var/msg = "Current Players:\n" + var/msg = span_bold("Current Players:") + "\n" var/list/Lines = list() @@ -11,14 +11,14 @@ for(var/client/C in GLOB.clients) var/entry = "
    Save Spawn Location: Yes No" + span_linkOn(span_bold("Yes")) + " NoYes NoYes " + span_linkOn(span_bold("No")) + "
    [C.key]" if(C.holder && C.holder.fakekey) - entry += " (as [C.holder.fakekey])" + entry += " " + span_italics("(as [C.holder.fakekey])") entry += "" if(C.mob.real_name) switch(C.mob.stat) if(UNCONSCIOUS) - entry += span_darkgray("Unconscious") // these are literally all spans so I can apply .inverted to them because black on dark grey isn't legible + entry += span_darkgray(span_bold("Unconscious")) // these are literally all spans so I can apply .inverted to them because black on dark grey isn't legible if(DEAD) if(isobserver(C.mob)) @@ -26,7 +26,7 @@ if(O.started_as_observer) entry += span_gray("Observing") else - entry += span_black("Died") + entry += span_black(span_bold("Died")) else entry += span_green("Playing") @@ -34,7 +34,7 @@ entry += " as [C.mob.real_name]" else if(isnewplayer(C.mob)) - entry += span_blue("In lobby") + entry += span_blue(span_bold("In lobby")) entry += "" @@ -45,9 +45,9 @@ age = 0 if(age <= 1) - age = span_red("[age]") + age = span_red(span_bold("[age]")) else if(age < 10) - age = span_orange("[age]") + age = span_orange(span_bold("[age]")) entry += "Age: [age]" entry += "" @@ -92,6 +92,6 @@ for(var/line in sortList(Lines)) msg += "[line]" msg += "
    " - msg += "Total Players: [length(Lines)]" - msg = span_filter_notice("" + msg + "") + msg += span_bold("Total Players: [length(Lines)]") + msg = span_filter_notice(msg) to_chat(src, msg) diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm index 794ef104722..40e6f3f8382 100644 --- a/code/modules/client/verbs/ooc.dm +++ b/code/modules/client/verbs/ooc.dm @@ -30,17 +30,17 @@ to_chat(src, span_danger("You cannot use OOC (muted).")) return if(findtext(msg, "byond://") && !config.allow_byond_links) - to_chat(src, "Advertising other servers is not allowed.") + to_chat(src, span_bold("Advertising other servers is not allowed.")) log_admin("[key_name(src)] has attempted to advertise in OOC: [msg]") message_admins("[key_name_admin(src)] has attempted to advertise in OOC: [msg]") return if(findtext(msg, "discord.gg") && !config.allow_discord_links) - to_chat(src, "Advertising discords is not allowed.") + to_chat(src, span_bold("Advertising discords is not allowed.")) log_admin("[key_name(src)] has attempted to advertise a discord server in OOC: [msg]") message_admins("[key_name_admin(src)] has attempted to advertise a discord server in OOC: [msg]") return if((findtext(msg, "http://") || findtext(msg, "https://")) && !config.allow_url_links) - to_chat(src, "Posting external links is not allowed.") + to_chat(src, span_bold("Posting external links is not allowed.")) log_admin("[key_name(src)] has attempted to post a link in OOC: [msg]") message_admins("[key_name_admin(src)] has attempted to post a link in OOC: [msg]") return @@ -116,17 +116,17 @@ to_chat(src, span_danger("You cannot use OOC (muted).")) return if(findtext(msg, "byond://") && !config.allow_byond_links) - to_chat(src, "Advertising other servers is not allowed.") + to_chat(src, span_bold("Advertising other servers is not allowed.")) log_admin("[key_name(src)] has attempted to advertise in OOC: [msg]") message_admins("[key_name_admin(src)] has attempted to advertise in OOC: [msg]") return if(findtext(msg, "discord.gg") && !config.allow_discord_links) - to_chat(src, "Advertising discords is not allowed.") + to_chat(src, span_bold("Advertising discords is not allowed.")) log_admin("[key_name(src)] has attempted to advertise a discord server in OOC: [msg]") message_admins("[key_name_admin(src)] has attempted to advertise a discord server in OOC: [msg]") return if((findtext(msg, "http://") || findtext(msg, "https://")) && !config.allow_url_links) - to_chat(src, "Posting external links is not allowed.") + to_chat(src, span_bold("Posting external links is not allowed.")) log_admin("[key_name(src)] has attempted to post a link in OOC: [msg]") message_admins("[key_name_admin(src)] has attempted to post a link in OOC: [msg]") return @@ -181,12 +181,12 @@ if(target in GLOB.admins) admin_stuff += "/([key])" - to_chat(target, span_looc("" + create_text_tag("looc", "LOOC:", target) + " [display_name][admin_stuff]: [msg]")) + to_chat(target, span_looc(create_text_tag("looc", "LOOC:", target) + " [display_name][admin_stuff]: " + span_message("[msg]"))) for(var/client/target in r_receivers) var/admin_stuff = "/([key])([admin_jump_link(mob, target.holder)])" - to_chat(target, span_rlooc("" + create_text_tag("looc", "LOOC:", target) + " (R)[display_name][admin_stuff]: [msg]")) + to_chat(target, span_rlooc(create_text_tag("rlooc", "RLOOC:", target) + " " + span_prefix("(R)") + "[display_name][admin_stuff]: " + span_message("[msg]"))) /mob/proc/get_looc_source() return src @@ -275,3 +275,9 @@ INVOKE_ASYNC(src, VERB_REF(fit_viewport)) else //Delayed to avoid wingets from Login calls. addtimer(CALLBACK(src, VERB_REF(fit_viewport), 1 SECONDS)) + +/client/verb/fix_stat_panel() + set name = "Fix Stat Panel" + set hidden = TRUE + + init_verbs() diff --git a/code/modules/client/verbs/who.dm b/code/modules/client/verbs/who.dm index f2b29a8540b..f3daef1751f 100644 --- a/code/modules/client/verbs/who.dm +++ b/code/modules/client/verbs/who.dm @@ -2,7 +2,7 @@ set name = "Who" set category = "OOC" - var/msg = "Current Players:\n" + var/msg = span_bold("Current Players:") + "\n" var/list/Lines = list() @@ -12,33 +12,33 @@ continue var/entry = "\t[C.key]" if(C.holder?.fakekey) - entry += " (as [C.holder.fakekey])" + entry += " " + span_italics("as [C.holder.fakekey])") entry += " - Playing as [C.mob.real_name]" switch(C.mob.stat) if(UNCONSCIOUS) - entry += " - [span_darkgray("Unconscious")]" + entry += " - [span_darkgray(span_bold("Unconscious"))]" if(DEAD) if(isobserver(C.mob)) var/mob/observer/dead/O = C.mob if(O.started_as_observer) entry += " - [span_gray("Observing")]" else - entry += " - [span_black("DEAD")]" + entry += " - [span_black(span_bold("DEAD"))]" else - entry += " - [span_black("DEAD")]" + entry += " - [span_black(span_bold("DEAD"))]" if(C.player_age != initial(C.player_age) && isnum(C.player_age)) // database is on var/age = C.player_age switch(age) if(0 to 1) - age = span_red("[age] days old") + age = span_red(span_bold("[age] days old")) if(1 to 10) - age = span_orange("[age] days old") + age = span_orange(span_bold("[age] days old")) else entry += " - [age] days old" if(is_special_character(C.mob)) - entry += " - [span_red("Antagonist")]" + entry += " - [span_red(span_bold("Antagonist"))]" if(C.is_afk()) var/seconds = C.last_activity_seconds() @@ -50,7 +50,7 @@ for(var/line in sortList(Lines)) msg += "[line]\n" - msg += "Total Players: [length(Lines)]" + msg += span_bold("Total Players: [length(Lines)]") msg = span_filter_notice("[jointext(msg, "
    ")]") to_chat(src,msg) @@ -88,7 +88,7 @@ temp += "\t[C] is a [C.holder.rank]" if(holder) if(C.holder.fakekey) - temp += " (as [C.holder.fakekey])" + temp += " " + span_italics("(as [C.holder.fakekey])") if(isobserver(C.mob)) temp += " - Observing" @@ -111,16 +111,16 @@ if(R_EVENT) eventMmsg += temp - msg = "Current Admins ([num_admins_online]):\n" + msg + msg = span_bold("Current Admins ([num_admins_online]):") + "\n" + msg if(config.show_mods) - msg += "\n Current Game Masters ([num_mods_online]):\n" + modmsg + msg += "\n" + span_bold(" Current Game Masters ([num_mods_online]):") + "\n" + modmsg if(config.show_devs) - msg += "\n Current Developers ([num_devs_online]):\n" + devmsg + msg += "\n" + span_bold(" Current Developers ([num_devs_online]):") + "\n" + devmsg if(config.show_event_managers) - msg += "\n Current Miscellaneous ([num_event_managers_online]):\n" + eventMmsg + msg += "\n" + span_bold(" Current Miscellaneous ([num_event_managers_online]):") + "\n" + eventMmsg var/num_mentors_online = 0 var/mmsg = "" @@ -142,8 +142,8 @@ mmsg += "\n" if(config.show_mentors) - msg += "\n Current Mentors ([num_mentors_online]):\n" + mmsg + msg += "\n" + span_bold(" Current Mentors ([num_mentors_online]):") + "\n" + mmsg - msg += "\nAdminhelps are also sent to Discord. If no admins are available in game try anyway and an admin on Discord may see it and respond." + msg += "\n" + span_info("Adminhelps are also sent to Discord. If no admins are available in game try anyway and an admin on Discord may see it and respond.") to_chat(src,span_filter_notice("[jointext(msg, "
    ")]")) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index af8fc6ecd2d..617396500db 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -485,7 +485,8 @@ update_light() update_icon(user) - user.update_action_buttons() + spawn(10) // FIXME: Remove when SSoverlays stops queueing overlay changes + user.update_action_buttons_icon() /obj/item/clothing/head/attack_ai(var/mob/user) if(!mob_wear_hat(user)) @@ -670,7 +671,7 @@ user.unEquip(I) I.forceMove(src) holding = I - user.visible_message("\The [user] shoves \the [I] into \the [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " shoves \the [I] into \the [src].")) verbs |= /obj/item/clothing/shoes/proc/draw_knife update_icon() else diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 3af787763e2..5ed049694c8 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -71,7 +71,7 @@ BLIND // can't see anything tint = initial(tint) enables_planes = away_planes away_planes = null - user.update_action_buttons() + user.update_action_buttons_icon() user.recalculate_vis() /obj/item/clothing/glasses/attack_self(mob/user) @@ -91,7 +91,7 @@ BLIND // can't see anything desc = "Used for seeing walls, floors, and stuff through anything." icon_state = "meson" item_state_slots = list(slot_r_hand_str = "meson", slot_l_hand_str = "meson") - action_button_name = "Toggle Goggles" + actions_types = list(/datum/action/item_action/toggle_goggles) origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2) toggleable = 1 vision_flags = SEE_TURFS @@ -111,7 +111,7 @@ BLIND // can't see anything icon_state = "aviator_eng" off_state = "aviator" item_state_slots = list(slot_r_hand_str = "sunglasses", slot_l_hand_str = "sunglasses") - action_button_name = "Toggle HUD" + actions_types = list(/datum/action/item_action/toggle_hud) activation_sound = 'sound/effects/pop.ogg' /obj/item/clothing/glasses/meson/aviator/prescription @@ -124,7 +124,7 @@ BLIND // can't see anything desc = "Modified aviator glasses with a toggled health HUD." icon_state = "aviator_med" off_state = "aviator" - action_button_name = "Toggle Mode" + actions_types = list(/datum/action/item_action/toggle_mode) toggleable = 1 activation_sound = 'sound/effects/pop.ogg' @@ -139,7 +139,7 @@ BLIND // can't see anything icon_state = "purple" item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses") toggleable = 1 - action_button_name = "Toggle Goggles" + actions_types = list(/datum/action/item_action/toggle_goggles) item_flags = AIRTIGHT /obj/item/clothing/glasses/science/New() @@ -162,7 +162,7 @@ BLIND // can't see anything origin_tech = list(TECH_MAGNET = 2) darkness_view = 7 toggleable = 1 - action_button_name = "Toggle Goggles" + actions_types = list(/datum/action/item_action/toggle_goggles) off_state = "denight" flash_protection = FLASH_PROTECTION_REDUCED enables_planes = list(VIS_FULLBRIGHT) @@ -238,7 +238,7 @@ BLIND // can't see anything item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses") origin_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 3) toggleable = 1 - action_button_name = "Toggle Goggles" + actions_types = list(/datum/action/item_action/toggle_goggles) vision_flags = SEE_OBJS enables_planes = list(VIS_FULLBRIGHT) @@ -258,7 +258,7 @@ BLIND // can't see anything origin_tech = list(TECH_MAGNET = 2, TECH_BLUESPACE = 1) darkness_view = 5 toggleable = 1 - action_button_name = "Toggle Goggles" + actions_types = list(/datum/action/item_action/toggle_goggles) off_state = "denight" vision_flags = SEE_OBJS | SEE_TURFS flash_protection = FLASH_PROTECTION_REDUCED @@ -375,7 +375,7 @@ BLIND // can't see anything desc = "Protects the eyes from welders, approved by the mad scientist association." icon_state = "welding-g" item_state_slots = list(slot_r_hand_str = "welding-g", slot_l_hand_str = "welding-g") - action_button_name = "Flip Welding Goggles" + actions_types = list(/datum/action/item_action/flip_welding_goggles) matter = list(MAT_STEEL = 1500, MAT_GLASS = 1000) item_flags = AIRTIGHT var/up = 0 @@ -408,7 +408,7 @@ BLIND // can't see anything tint = TINT_NONE to_chat(usr, "You push \the [src] up out of your face.") update_clothing_icon() - usr.update_action_buttons() + usr.update_action_buttons_icon() /obj/item/clothing/glasses/welding/superior name = "superior welding goggles" @@ -481,7 +481,7 @@ BLIND // can't see anything desc = "Modified aviator glasses that can be switch between HUD and flash protection modes." icon_state = "aviator_sec" off_state = "aviator" - action_button_name = "Toggle Mode" + actions_types = list(/datum/action/item_action/toggle_mode) var/on = 1 toggleable = 1 activation_sound = 'sound/effects/pop.ogg' @@ -503,7 +503,7 @@ BLIND // can't see anything user << activation_sound user.recalculate_vis() user.update_inv_glasses() - user.update_action_buttons() + user.update_action_buttons_icon() /obj/item/clothing/glasses/sunglasses/sechud/aviator/update_icon() if(on) @@ -529,7 +529,7 @@ BLIND // can't see anything item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses") origin_tech = list(TECH_MAGNET = 3) toggleable = 1 - action_button_name = "Toggle Goggles" + actions_types = list(/datum/action/item_action/toggle_goggles) vision_flags = SEE_MOBS enables_planes = list(VIS_FULLBRIGHT, VIS_CLOAKED) flash_protection = FLASH_PROTECTION_REDUCED @@ -562,7 +562,7 @@ BLIND // can't see anything /obj/item/clothing/glasses/thermal/plain toggleable = 0 activation_sound = null - action_button_name = null + actions_types = list() /obj/item/clothing/glasses/thermal/plain/monocle name = "thermonocle" @@ -570,7 +570,7 @@ BLIND // can't see anything icon_state = "thermoncle" item_state_slots = list(slot_r_hand_str = "sunglasses", slot_l_hand_str = "sunglasses") toggleable = 1 - action_button_name = "Toggle Monocle" + actions_types = list(/datum/action/item_action/toggle_monocle) flags = null //doesn't protect eyes because it's a monocle, duh body_parts_covered = 0 @@ -582,7 +582,7 @@ BLIND // can't see anything item_state_slots = list(slot_r_hand_str = "blindfold", slot_l_hand_str = "blindfold") body_parts_covered = 0 toggleable = 1 - action_button_name = "Toggle Eyepatch" + actions_types = list(/datum/action/item_action/toggle_eyepatch) /obj/item/clothing/glasses/thermal/plain/jensen name = "optical thermal implants" @@ -595,7 +595,7 @@ BLIND // can't see anything desc = "Teshari designed lightweight goggles." icon_state = "orange-g" item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses") - action_button_name = "Adjust Orange Goggles" + actions_types = list(/datum/action/item_action/adjust_orange_goggles) var/up = 0 item_flags = AIRTIGHT body_parts_covered = EYES @@ -623,4 +623,4 @@ BLIND // can't see anything icon_state = "[initial(icon_state)]up" to_chat(usr, "You push \the [src] up from in front of your eyes.") update_clothing_icon() - usr.update_action_buttons() + usr.update_action_buttons_icon() diff --git a/code/modules/clothing/glasses/glasses_vr.dm b/code/modules/clothing/glasses/glasses_vr.dm index 88baa9bf120..35399268f77 100644 --- a/code/modules/clothing/glasses/glasses_vr.dm +++ b/code/modules/clothing/glasses/glasses_vr.dm @@ -68,7 +68,7 @@ icon_override = 'icons/inventory/eyes/mob_vr.dmi' icon_state = "medgravpatch" item_state_slots = list(slot_r_hand_str = "blindfold", slot_l_hand_str = "blindfold") - action_button_name = "Toggle Eyepatch" + actions_types = list(/datum/action/item_action/toggle_eyepatch) off_state = "eyepatch" enables_planes = list(VIS_CH_STATUS,VIS_CH_HEALTH,VIS_FULLBRIGHT,VIS_MESONS) @@ -82,8 +82,7 @@ flash_protection = FLASH_PROTECTION_MODERATE item_flags = AIRTIGHT body_parts_covered = EYES - action_button_name = "Change scanning pattern" - action_button_is_hands_free = TRUE + actions_types = list(/datum/action/item_action/hands_free/change_scanning_pattern) var/static/list/tac_sec_vis_anim = list() /obj/item/clothing/glasses/sunglasses/sechud/tactical_sec_vis/Initialize(mapload) @@ -107,7 +106,7 @@ if(src && choice && !user.incapacitated() && in_range(user,src)) icon_state = options[choice] user.update_inv_glasses() - user.update_action_buttons() + user.update_action_buttons_icon() to_chat(user, span_notice("Your [src] now displays [choice] .")) return 1 diff --git a/code/modules/clothing/glasses/hud_vr.dm b/code/modules/clothing/glasses/hud_vr.dm index 06e8fbf72a8..1e13f56d177 100644 --- a/code/modules/clothing/glasses/hud_vr.dm +++ b/code/modules/clothing/glasses/hud_vr.dm @@ -33,9 +33,9 @@ /obj/item/clothing/glasses/omnihud/examine() . = ..() if(ar_toggled) - . += "\n The HUD indicator reads ON." + . += "\n " + span_notice("The HUD indicator reads ON.") else - . += "\n The HUD indicator reads OFF." + . += "\n " + span_notice("The HUD indicator reads OFF.") /obj/item/clothing/glasses/omnihud/emp_act(var/severity) @@ -141,7 +141,7 @@ away_planes = null to_chat(usr, span_notice("You enabled the Augmented Reality HUD of your [src.name].")) ar_toggled = !ar_toggled - usr.update_action_buttons() + usr.update_action_buttons_icon() usr.recalculate_vis() @@ -167,7 +167,7 @@ These have been upgraded with medical records access and virus database integration. \ They can also read data from active suit sensors using the crew monitoring system." mode = "med" - action_button_name = "AR Console (Crew Monitor)" + actions_types = list(/datum/action/item_action/ar_console_crew) tgarscreen_path = /datum/tgui_module/crew_monitor/glasses enables_planes = list(VIS_CH_ID,VIS_CH_HEALTH_VR,VIS_CH_STATUS_R,VIS_CH_BACKUP,VIS_AUGMENTED) @@ -183,7 +183,7 @@ They also have access to security alerts such as camera and motion sensor alarms." mode = "sec" flash_protection = FLASH_PROTECTION_MODERATE //weld protection is a little too widespread - action_button_name = "AR Console (Security Alerts)" + actions_types = list(/datum/action/item_action/ar_console_security_alerts) tgarscreen_path = /datum/tgui_module/alarm_monitor/security/glasses enables_planes = list(VIS_CH_ID,VIS_CH_HEALTH_VR,VIS_CH_WANTED,VIS_AUGMENTED) @@ -199,7 +199,7 @@ and can also display a list of atmospheric, fire, and power alarms." mode = "eng" flash_protection = FLASH_PROTECTION_MAJOR - action_button_name = "AR Console (Station Alerts)" + actions_types = list(/datum/action/item_action/ar_console_station_alerts) tgarscreen_path = /datum/tgui_module/alarm_monitor/engineering/glasses /obj/item/clothing/glasses/omnihud/eng/ar_interact(var/mob/living/carbon/human/user) @@ -249,7 +249,7 @@ item_state = initial(item_state) usr.update_inv_glasses() to_chat(usr, "You activate the retinal projector on the [src].") - usr.update_action_buttons() + usr.update_action_buttons_icon() /obj/item/clothing/glasses/omnihud/all name = "\improper AR-B glasses" @@ -259,7 +259,7 @@ mode = "best" flash_protection = FLASH_PROTECTION_MAJOR enables_planes = list(VIS_CH_ID,VIS_CH_HEALTH_VR,VIS_CH_STATUS_R,VIS_CH_BACKUP,VIS_CH_WANTED,VIS_AUGMENTED) - action_button_name = "AR Console (All Alerts)" + actions_types = list(/datum/action/item_action/ar_console_all_alerts) tgarscreen_path = /datum/tgui_module/alarm_monitor/all/glasses /obj/item/clothing/glasses/omnihud/all/ar_interact(var/mob/living/carbon/human/user) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index f65a9b0a128..3862469c857 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -62,7 +62,7 @@ //TODO: Make inflating gloves a thing /*/obj/item/clothing/gloves/sterile/proc/Inflate(/mob/living/carbon/human/user) - user.visible_message("\The [src] expands!") + user.visible_message(span_infoplain(span_bold("\The [src]") + " expands!")) qdel(src)*/ /obj/item/clothing/gloves/sterile/latex diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 308672b3b72..02bb0f5313b 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -19,7 +19,7 @@ armor = list(melee = 30, bullet = 5, laser = 20,energy = 10, bomb = 20, bio = 10, rad = 20) flags_inv = 0 siemens_coefficient = 0.9 - action_button_name = "Toggle Head-light" + actions_types = list(/datum/action/item_action/toggle_head_light) w_class = ITEMSIZE_NORMAL ear_protection = 1 drop_sound = 'sound/items/drop/helm.ogg' diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 236f7857967..4106d577af7 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -66,7 +66,7 @@ armor = list(melee = 80, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 0.7 valid_accessory_slots = null - action_button_name = "Toggle Visor" + actions_types = list(/datum/action/item_action/toggle_visor) /obj/item/clothing/head/helmet/riot/attack_self(mob/user as mob) if(src.icon_state == initial(icon_state)) @@ -113,7 +113,7 @@ siemens_coefficient = 0.6 light_range = 6 light_overlay = "helmet_light_dual_green" - action_button_name = "Toggle Head-light" + actions_types = list(/datum/action/item_action/toggle_head_light) min_cold_protection_temperature = T0C - 20 cold_protection = HEAD @@ -150,7 +150,7 @@ /obj/item/clothing/head/helmet/thunderdome name = "\improper Thunderdome helmet" - desc = "'Let the battle commence!'" + desc = span_italics("'Let the battle commence!'") icon_state = "thunderdome" armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0) cold_protection = HEAD diff --git a/code/modules/clothing/head/helmet_vr.dm b/code/modules/clothing/head/helmet_vr.dm index 53e9c581af4..b02024594c1 100644 --- a/code/modules/clothing/head/helmet_vr.dm +++ b/code/modules/clothing/head/helmet_vr.dm @@ -28,7 +28,7 @@ icon = 'icons/inventory/head/item_vr.dmi' icon_override = 'icons/inventory/head/mob_vr.dmi' -// Armor Versions Here +// Armor Versions Here /obj/item/clothing/head/helmet/combat/crusader name = "crusader helmet" desc = "ye olde armored helmet" @@ -47,10 +47,10 @@ armor = list(melee = 80, bullet = 50, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0) tint = TINT_HEAVY siemens_coefficient = 2 - + var/base_state var/up = FALSE - + /obj/item/clothing/head/helmet/combat/bedevere/attack_self() toggle() @@ -83,8 +83,8 @@ if (ismob(src.loc)) //should allow masks to update when it is opened/closed var/mob/M = src.loc M.update_inv_wear_mask() - usr.update_action_buttons() - + usr.update_action_buttons_icon() + // Costume Versions Here /obj/item/clothing/head/helmet/combat/crusader_costume name = "crusader costume helmet" @@ -104,10 +104,10 @@ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) tint = TINT_HEAVY siemens_coefficient = 1 - + var/base_state var/up = FALSE - + /obj/item/clothing/head/helmet/combat/bedevere_costume/attack_self() toggle() @@ -140,4 +140,4 @@ if (ismob(src.loc)) //should allow masks to update when it is opened/closed var/mob/M = src.loc M.update_inv_wear_mask() - usr.update_action_buttons() \ No newline at end of file + usr.update_action_buttons_icon() diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 2572bffa4b4..7d9fb9b54ab 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -110,7 +110,7 @@ name = "redcoat's hat" icon_state = "redcoat" item_state_slots = list(slot_r_hand_str = "pirate", slot_l_hand_str = "pirate") - desc = "'I guess it's a redhead.'" + desc = span_italics("'I guess it's a redhead.'") body_parts_covered = 0 /obj/item/clothing/head/mailman diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index b5fd02b17e6..76467e49726 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -23,7 +23,7 @@ armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) flags_inv = (HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE) body_parts_covered = HEAD|FACE|EYES - action_button_name = "Flip Welding Mask" + actions_types = list(/datum/action/item_action/flip_welding_mask) siemens_coefficient = 0.9 w_class = ITEMSIZE_NORMAL var/base_state @@ -65,7 +65,7 @@ if (ismob(src.loc)) //should allow masks to update when it is opened/closed var/mob/M = src.loc M.update_inv_wear_mask() - usr.update_action_buttons() + usr.update_action_buttons_icon() /obj/item/clothing/head/welding/demon name = "demonic welding helmet" diff --git a/code/modules/clothing/head/pilot_helmet.dm b/code/modules/clothing/head/pilot_helmet.dm index 590cba4dd1a..b035fb5a4f4 100644 --- a/code/modules/clothing/head/pilot_helmet.dm +++ b/code/modules/clothing/head/pilot_helmet.dm @@ -188,7 +188,7 @@ name = "pilot helmet" desc = "Standard pilot gear. Protects the head from impacts. This one has a retractable visor" icon_state = "pilot_helmet2" - action_button_name = "Toggle Visor" + actions_types = list(/datum/action/item_action/toggle_visor) /obj/item/clothing/head/pilot/alt/attack_self(mob/user as mob) if(src.icon_state == initial(icon_state)) @@ -197,4 +197,4 @@ else src.icon_state = initial(icon_state) to_chat(user, "You lower the visor on the pilot helmet.") - update_clothing_icon() //so our mob-overlays update \ No newline at end of file + update_clothing_icon() //so our mob-overlays update diff --git a/code/modules/clothing/head/pilot_helmet_vr.dm b/code/modules/clothing/head/pilot_helmet_vr.dm index ab4b2335c82..8aa36238a88 100644 --- a/code/modules/clothing/head/pilot_helmet_vr.dm +++ b/code/modules/clothing/head/pilot_helmet_vr.dm @@ -15,7 +15,7 @@ sprite_sheets = list( SPECIES_TESHARI = 'icons/inventory/head/mob_vr_teshari.dmi' ) - action_button_name = "Toggle Visor" + actions_types = list(/datum/action/item_action/toggle_visor) /obj/item/clothing/head/pilot_vr/attack_self(mob/user as mob) if(src.icon_state == initial(icon_state)) @@ -34,7 +34,7 @@ sprite_sheets = list( SPECIES_TESHARI = 'icons/inventory/head/mob_vr_teshari.dmi' ) - action_button_name = "Toggle Visor" + actions_types = list(/datum/action/item_action/toggle_visor) /obj/item/clothing/head/pilot_vr/alt/attack_self(mob/user as mob) if(src.icon_state == initial(icon_state)) @@ -55,7 +55,7 @@ sprite_sheets = list( SPECIES_TESHARI = 'icons/inventory/head/mob_vr_teshari.dmi' ) - action_button_name = "Toggle Visor" + actions_types = list(/datum/action/item_action/toggle_visor) /obj/item/clothing/head/pilot_vr/talon/attack_self(mob/user as mob) if(src.icon_state == initial(icon_state)) @@ -77,7 +77,7 @@ sprite_sheets = list( SPECIES_TESHARI = 'icons/inventory/head/mob_vr_teshari.dmi' ) - action_button_name = "Toggle Visor" + actions_types = list(/datum/action/item_action/toggle_visor) /obj/item/clothing/head/pilot_vr/mbill/attack_self(mob/user as mob) if(src.icon_state == initial(icon_state)) @@ -86,4 +86,4 @@ else src.icon_state = initial(icon_state) to_chat(user, "You lower the visor on the pilot helmet.") - update_clothing_icon() //so our mob-overlays update \ No newline at end of file + update_clothing_icon() //so our mob-overlays update diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm index c9e5baaf2c5..4c4781b8a89 100644 --- a/code/modules/clothing/masks/breath.dm +++ b/code/modules/clothing/masks/breath.dm @@ -9,7 +9,7 @@ gas_transfer_coefficient = 0.10 permeability_coefficient = 0.50 var/hanging = 0 - action_button_name = "Adjust Breath Mask" + actions_types = list(/datum/action/item_action/adjust_breath_mask) pickup_sound = 'sound/items/pickup/component.ogg' drop_sound = 'sound/items/drop/component.ogg' diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 90acb425cd9..59541aebc21 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -90,7 +90,7 @@ species_restricted = list(SPECIES_VOX) filtered_gases = list("oxygen", "nitrous_oxide") var/mask_open = FALSE // Controls if the Vox can eat through this mask - action_button_name = "Toggle Feeding Port" + actions_types = list(/datum/action/item_action/toggle_feeding_port) /obj/item/clothing/mask/gas/swat/vox/proc/feeding_port(mob/user) if(user.canmove && !user.stat) diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm index 77ef4b83203..b3d265b86cf 100644 --- a/code/modules/clothing/masks/hailer.dm +++ b/code/modules/clothing/masks/hailer.dm @@ -4,7 +4,7 @@ description_info = "This mask has a hailer attached, you can activate it on the button or use the Halt! verb, for switching phrases you can alt+click it or change it using the change phrase verb." icon_state = "halfgas" armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 55, rad = 0) - action_button_name = "HALT!" + actions_types = list(/datum/action/item_action/halt) body_parts_covered = FACE var/obj/item/hailer/hailer var/cooldown = 0 @@ -53,7 +53,7 @@ phrase = 12 -/obj/item/clothing/mask/gas/sechailer/ui_action_click() +/obj/item/clothing/mask/gas/sechailer/ui_action_click(mob/user, actiontype) halt() /obj/item/clothing/mask/gas/sechailer/AltClick(mob/user) @@ -155,11 +155,11 @@ if(cooldown < world.time - 35) // A cooldown, to stop people being jerks if(!safety) message = "FUCK YOUR CUNT YOU SHIT EATING COCKSUCKER MAN EAT A DONG FUCKING ASS RAMMING SHIT FUCK EAT PENISES IN YOUR FUCK FACE AND SHIT OUT ABORTIONS OF FUCK AND DO SHIT IN YOUR ASS YOU COCK FUCK SHIT MONKEY FUCK ASS WANKER FROM THE DEPTHS OF SHIT." - usr.visible_message("[usr]'s Compli-o-Nator: [span_red("[message]")]") + usr.visible_message(span_infoplain("[usr]'s Compli-o-Nator: " + span_red(span_huge(span_bold("[message]"))))) playsound(src, 'sound/voice/binsult.ogg', 50, 0, 4) //Future sound channel = something like SFX cooldown = world.time return - usr.visible_message("[usr]'s Compli-o-Nator: [span_red("[message]")]") + usr.visible_message(span_infoplain("[usr]'s Compli-o-Nator: " + span_red(span_huge(span_bold("[message]"))))) playsound(src, "sound/voice/complionator/[key].ogg", 50, 0, 4) //future sound channel = something like SFX cooldown = world.time diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 22b32e40f9f..c821aeeca23 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -320,8 +320,7 @@ w_class = ITEMSIZE_SMALL body_parts_covered = FACE icon_state = "papermask" - action_button_name = "Redraw Design" - action_button_is_hands_free = TRUE + actions_types = list(/datum/action/item_action/hands_free/redraw_design) var/list/papermask_designs = list() /obj/item/clothing/mask/paper/Initialize(mapload) @@ -374,7 +373,7 @@ if(src && choice && !user.incapacitated() && in_range(user,src)) icon_state = options[choice] user.update_inv_wear_mask() - user.update_action_buttons() + user.update_action_buttons_icon() to_chat(user, span_notice("Your paper mask now is now [choice].")) return 1 @@ -384,8 +383,7 @@ w_class = ITEMSIZE_SMALL body_parts_covered = FACE icon_state = "joy" - action_button_name = "Redraw Design" - action_button_is_hands_free = TRUE + actions_types = list(/datum/action/item_action/hands_free/redraw_design) var/static/list/joymask_designs = list() @@ -410,7 +408,7 @@ if(src && choice && !user.incapacitated() && in_range(user,src)) icon_state = options[choice] user.update_inv_wear_mask() - user.update_action_buttons() + user.update_action_buttons_icon() to_chat(user, span_notice("Your [src] now displays a [choice] emotion.")) return 1 diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index dd921661156..9a1c384478e 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -12,7 +12,7 @@ preserve_item = 1 var/magpulse = 0 var/icon_base = "magboots" - action_button_name = "Toggle Magboots" + actions_types = list(/datum/action/item_action/toggle_magboots) var/obj/item/clothing/shoes/shoes = null //Undershoes var/mob/living/carbon/human/wearer = null //For shoe procs step_volume_mod = 1.3 @@ -41,7 +41,7 @@ playsound(src, 'sound/effects/magnetclamp.ogg', 20) to_chat(user, "You enable the mag-pulse traction system.") user.update_inv_shoes() //so our mob-overlays update - user.update_action_buttons() + user.update_action_buttons_icon() /obj/item/clothing/shoes/magboots/mob_can_equip(mob/user, slot, disable_warning = FALSE) var/mob/living/carbon/human/H = user @@ -90,8 +90,7 @@ icon_state = "boots-vox" flags = PHORONGUARD species_restricted = list(SPECIES_VOX) - - action_button_name = "Toggle the magclaws" + actions_types = list(/datum/action/item_action/toggle_magclaws) /obj/item/clothing/shoes/magboots/vox/attack_self(mob/user) if(src.magpulse) @@ -112,7 +111,7 @@ magpulse = 1 canremove = FALSE //kinda hard to take off magclaws when you are gripping them tightly. to_chat(user, "You dig your claws deeply into the flooring, bracing yourself.") - user.update_action_buttons() + user.update_action_buttons_icon() //In case they somehow come off while enabled. /obj/item/clothing/shoes/magboots/vox/dropped(mob/user as mob) @@ -126,4 +125,4 @@ /obj/item/clothing/shoes/magboots/vox/examine(mob/user) . = ..() if(magpulse) - . += "It would be hard to take these off without relaxing your grip first." // Theoretically this message should only be seen by the wearer when the claws are equipped. \ No newline at end of file + . += "It would be hard to take these off without relaxing your grip first." // Theoretically this message should only be seen by the wearer when the claws are equipped. diff --git a/code/modules/clothing/shoes/miscellaneous_vr.dm b/code/modules/clothing/shoes/miscellaneous_vr.dm index 1485517ff92..9d9bd1dcc2d 100644 --- a/code/modules/clothing/shoes/miscellaneous_vr.dm +++ b/code/modules/clothing/shoes/miscellaneous_vr.dm @@ -14,7 +14,7 @@ icon = 'icons/inventory/feet/item_vr.dmi' icon_override = 'icons/inventory/feet/mob_vr.dmi' // resistance_flags = FIRE_PROOF - action_button_name = "Activate Jump Boots" + actions_types = list(/datum/action/item_action/activate_jump_boots) permeability_coefficient = 0.05 var/jumpdistance = 5 //-1 from to see the actual distance, e.g 4 goes over 3 tiles var/jumpspeed = 3 @@ -22,7 +22,7 @@ var/recharging_time = 0 //time until next dash // var/jumping = FALSE //are we mid-jump? We have no throw_at callback, so we have to check user.throwing. -/obj/item/clothing/shoes/bhop/ui_action_click() +/obj/item/clothing/shoes/bhop/ui_action_click(mob/unused_user, actiontype) var/mob/living/user = loc if(!isliving(user)) return diff --git a/code/modules/clothing/spacesuits/breaches.dm b/code/modules/clothing/spacesuits/breaches.dm index 836b297ea43..aa6e0649ea6 100644 --- a/code/modules/clothing/spacesuits/breaches.dm +++ b/code/modules/clothing/spacesuits/breaches.dm @@ -81,7 +81,7 @@ var/global/list/breach_burn_descriptors = list( amount_left = 0 B.update_descriptor() - user.visible_message("[user] patches some of the damage on \the [src].") + user.visible_message(span_infoplain(span_bold("[user]") + " patches some of the damage on \the [src].")) calc_breach_damage() /obj/item/clothing/suit/space/proc/create_breaches(var/damtype, var/amount) @@ -119,9 +119,9 @@ var/global/list/breach_burn_descriptors = list( amount -= needs if(existing.damtype == BRUTE) - T.visible_message("\The [existing.descriptor] on [src] gapes wider!") + T.visible_message(span_warning("\The [existing.descriptor] on [src] gapes wider!")) else if(existing.damtype == BURN) - T.visible_message("\The [existing.descriptor] on [src] widens!") + T.visible_message(span_warning("\The [existing.descriptor] on [src] widens!")) if (amount) //Spawn a new breach. @@ -135,9 +135,9 @@ var/global/list/breach_burn_descriptors = list( B.holder = src if(B.damtype == BRUTE) - T.visible_message("\A [B.descriptor] opens up on [src]!") + T.visible_message(span_warning("\A [B.descriptor] opens up on [src]!")) else if(B.damtype == BURN) - T.visible_message("\A [B.descriptor] marks the surface of [src]!") + T.visible_message(span_warning("\A [B.descriptor] marks the surface of [src]!")) calc_breach_damage() @@ -227,4 +227,4 @@ var/global/list/breach_burn_descriptors = list( . = ..() if(can_breach && breaches?.len) for(var/datum/breach/B in breaches) - . += span_red("It has \a [B.descriptor].") + . += span_red(span_bold("It has \a [B.descriptor].")) diff --git a/code/modules/clothing/spacesuits/rig/modules/combat.dm b/code/modules/clothing/spacesuits/rig/modules/combat.dm index a031ba5e34d..e54980b2131 100644 --- a/code/modules/clothing/spacesuits/rig/modules/combat.dm +++ b/code/modules/clothing/spacesuits/rig/modules/combat.dm @@ -54,7 +54,7 @@ to_chat(user, span_danger("Another grenade of that type will not fit into the module.")) return 0 - to_chat(user, span_blue("You slot \the [input_device] into the suit module.")) + to_chat(user, span_boldnotice("You slot \the [input_device] into the suit module.")) user.drop_from_inventory(input_device) qdel(input_device) accepted_item.charges++ @@ -256,7 +256,7 @@ else var/obj/item/new_weapon = new fabrication_type() new_weapon.forceMove(H) - to_chat(H, span_blue("You quickly fabricate \a [new_weapon].")) + to_chat(H, span_boldnotice("You quickly fabricate \a [new_weapon].")) H.put_in_hands(new_weapon) return 1 diff --git a/code/modules/clothing/spacesuits/rig/modules/computer.dm b/code/modules/clothing/spacesuits/rig/modules/computer.dm index 77639a35f4d..e8e786d0128 100644 --- a/code/modules/clothing/spacesuits/rig/modules/computer.dm +++ b/code/modules/clothing/spacesuits/rig/modules/computer.dm @@ -368,7 +368,7 @@ if(interfaced_with) if(holder && holder.wearer) - to_chat(holder.wearer, "Your power sink retracts as the module deactivates.") + to_chat(holder.wearer, span_warning("Your power sink retracts as the module deactivates.")) drain_complete() interfaced_with = null total_power_drained = 0 @@ -400,7 +400,7 @@ if(target.drain_power(1) <= 0) return 0 - to_chat(H, "You begin draining power from [target]!") + to_chat(H, span_danger("You begin draining power from [target]!")) interfaced_with = target drain_loc = interfaced_with.loc @@ -434,17 +434,17 @@ H.break_cloak() if(!holder.cell) - to_chat(H, "Your power sink flashes an error; there is no cell in your rig.") + to_chat(H, span_danger("Your power sink flashes an error; there is no cell in your rig.")) drain_complete(H) return if(!interfaced_with || !interfaced_with.Adjacent(H) || !(interfaced_with.loc == drain_loc)) - to_chat(H, "Your power sink retracts into its casing.") + to_chat(H, span_warning("Your power sink retracts into its casing.")) drain_complete(H) return if(holder.cell.fully_charged()) - to_chat(H, "Your power sink flashes an amber light; your rig cell is full.") + to_chat(H, span_warning("Your power sink flashes an amber light; your rig cell is full.")) drain_complete(H) return @@ -453,7 +453,7 @@ var/to_drain = min(12.5*holder.cell.maxcharge, ((holder.cell.maxcharge - holder.cell.charge) / CELLRATE)) var/target_drained = interfaced_with.drain_power(0,0,to_drain) if(target_drained <= 0) - to_chat(H, "Your power sink flashes a red light; there is no power left in [interfaced_with].") + to_chat(H, span_danger("Your power sink flashes a red light; there is no power left in [interfaced_with].")) drain_complete(H) return @@ -466,10 +466,10 @@ if(!interfaced_with) if(M) - to_chat(M, span_blue("Total power drained: [round(total_power_drained*CELLRATE)] cell units.")) + to_chat(M, span_notice(span_bold("Total power drained:") + " [round(total_power_drained*CELLRATE)] cell units.")) else if(M) - to_chat(M, span_blue("Total power drained from [interfaced_with]: [round(total_power_drained*CELLRATE)] cell units.")) + to_chat(M, span_notice(span_bold("Total power drained from [interfaced_with]:") + " [round(total_power_drained*CELLRATE)] cell units.")) interfaced_with.drain_power(0,1,0) // Damage the victim. drain_loc = null diff --git a/code/modules/clothing/spacesuits/rig/modules/modules.dm b/code/modules/clothing/spacesuits/rig/modules/modules.dm index 128cc19a545..15a303769db 100644 --- a/code/modules/clothing/spacesuits/rig/modules/modules.dm +++ b/code/modules/clothing/spacesuits/rig/modules/modules.dm @@ -234,28 +234,6 @@ /obj/item/rig_module/proc/accepts_item(var/obj/item/input_device) return 0 -/mob/living/carbon/human/Stat() - . = ..() - - if(. && istype(back,/obj/item/rig)) - var/obj/item/rig/R = back - SetupStat(R) - - else if(. && istype(belt,/obj/item/rig)) - var/obj/item/rig/R = belt - SetupStat(R) - -/mob/proc/SetupStat(var/obj/item/rig/R) - if(R && !R.canremove && R.installed_modules.len && statpanel("Hardsuit Modules")) - var/cell_status = R.cell ? "[R.cell.charge]/[R.cell.maxcharge]" : "ERROR" - stat("Suit charge", cell_status) - for(var/obj/item/rig_module/module in R.installed_modules) - { - for(var/stat_rig_module/SRM in module.stat_modules) - if(SRM.CanUse()) - stat(SRM.module.interface_name,SRM) - } - /stat_rig_module parent_type = /atom/movable var/module_mode = "" @@ -282,6 +260,10 @@ module.holder.selected_module = module if("engage") module.engage() + if("activate") + module.activate() + if("deactivate") + module.deactivate() if("toggle") if(module.active) module.deactivate() diff --git a/code/modules/clothing/spacesuits/rig/modules/ninja.dm b/code/modules/clothing/spacesuits/rig/modules/ninja.dm index 5c88aefc8c7..90a3b06be8b 100644 --- a/code/modules/clothing/spacesuits/rig/modules/ninja.dm +++ b/code/modules/clothing/spacesuits/rig/modules/ninja.dm @@ -37,7 +37,7 @@ var/mob/living/carbon/human/H = holder.wearer - to_chat(H, span_blue("You are now nearly invisible to normal detection.")) + to_chat(H, span_boldnotice("You are now nearly invisible to normal detection.")) H.alpha = 5 anim(get_turf(H), H, 'icons/effects/effects.dmi', "electricity",null,20,null) diff --git a/code/modules/clothing/spacesuits/rig/modules/specific/ai_container.dm b/code/modules/clothing/spacesuits/rig/modules/specific/ai_container.dm index e8fb6002380..b65417f3ec1 100644 --- a/code/modules/clothing/spacesuits/rig/modules/specific/ai_container.dm +++ b/code/modules/clothing/spacesuits/rig/modules/specific/ai_container.dm @@ -46,13 +46,6 @@ else integrated_ai.get_rig_stats = 0 -/mob/living/Stat() - . = ..() - if(. && get_rig_stats) - var/obj/item/rig/rig = get_rig() - if(rig) - SetupStat(rig) - /obj/item/rig_module/ai_container/proc/update_verb_holder() if(!verb_holder) verb_holder = new(src) diff --git a/code/modules/clothing/spacesuits/rig/modules/specific/cleaner_launcher.dm b/code/modules/clothing/spacesuits/rig/modules/specific/cleaner_launcher.dm index 33e119ccaf8..39f9d02c62f 100644 --- a/code/modules/clothing/spacesuits/rig/modules/specific/cleaner_launcher.dm +++ b/code/modules/clothing/spacesuits/rig/modules/specific/cleaner_launcher.dm @@ -34,7 +34,7 @@ to_chat(user, span_danger("Another grenade of that type will not fit into the module.")) return 0 - to_chat(user, span_blue("You slot \the [input_device] into the suit module.")) + to_chat(user, span_boldnotice("You slot \the [input_device] into the suit module.")) user.drop_from_inventory(input_device) qdel(input_device) accepted_item.charges++ diff --git a/code/modules/clothing/spacesuits/rig/modules/specific/cloak.dm b/code/modules/clothing/spacesuits/rig/modules/specific/cloak.dm index 8e10a86d817..9e51ef9832d 100644 --- a/code/modules/clothing/spacesuits/rig/modules/specific/cloak.dm +++ b/code/modules/clothing/spacesuits/rig/modules/specific/cloak.dm @@ -29,7 +29,7 @@ var/mob/living/carbon/human/H = holder.wearer - to_chat(H, span_blue("You are now nearly invisible to normal detection.")) + to_chat(H, span_boldnotice("You are now nearly invisible to normal detection.")) H.alpha = 5 anim(get_turf(H), H, 'icons/effects/effects.dmi', "electricity",null,20,null) diff --git a/code/modules/clothing/spacesuits/rig/modules/specific/grenade_launcher.dm b/code/modules/clothing/spacesuits/rig/modules/specific/grenade_launcher.dm index 1f0916487f4..d7ae54ce073 100644 --- a/code/modules/clothing/spacesuits/rig/modules/specific/grenade_launcher.dm +++ b/code/modules/clothing/spacesuits/rig/modules/specific/grenade_launcher.dm @@ -36,7 +36,7 @@ to_chat(user, span_danger("Another grenade of that type will not fit into the module.")) return 0 - to_chat(user, span_blue("You slot \the [input_device] into the suit module.")) + to_chat(user, span_boldnotice("You slot \the [input_device] into the suit module.")) user.drop_from_inventory(input_device) qdel(input_device) accepted_item.charges++ diff --git a/code/modules/clothing/spacesuits/rig/modules/specific/inhand_fabricator.dm b/code/modules/clothing/spacesuits/rig/modules/specific/inhand_fabricator.dm index 90b96a1283a..f993d81a2b5 100644 --- a/code/modules/clothing/spacesuits/rig/modules/specific/inhand_fabricator.dm +++ b/code/modules/clothing/spacesuits/rig/modules/specific/inhand_fabricator.dm @@ -34,7 +34,7 @@ else var/obj/item/new_weapon = new fabrication_type() new_weapon.forceMove(H) - to_chat(H, span_blue("You quickly fabricate \a [new_weapon].")) + to_chat(H, span_boldnotice("You quickly fabricate \a [new_weapon].")) H.put_in_hands(new_weapon) return 1 diff --git a/code/modules/clothing/spacesuits/rig/modules/specific/passive_protection.dm b/code/modules/clothing/spacesuits/rig/modules/specific/passive_protection.dm index 87c3de0576f..ddb72b5ad2a 100644 --- a/code/modules/clothing/spacesuits/rig/modules/specific/passive_protection.dm +++ b/code/modules/clothing/spacesuits/rig/modules/specific/passive_protection.dm @@ -34,7 +34,7 @@ var/obj/item/clothing/head/helmet/space/rig/helmet = holder.helmet var/obj/item/clothing/gloves/gauntlets/rig/gloves = holder.gloves - to_chat(H, span_blue("You activate your suit's powered radiation shielding.")) + to_chat(H, span_boldnotice("You activate your suit's powered radiation shielding.")) stored_rad_armor = holder.armor["rad"] if(boots) boots.armor["rad"] = 100 @@ -117,7 +117,7 @@ stored_max_pressure = holder.max_pressure_protection stored_max_temp = holder.max_heat_protection_temperature - to_chat(H, span_blue("You activate your suit's powered atmospheric shielding.")) + to_chat(H, span_boldnotice("You activate your suit's powered atmospheric shielding.")) if(boots) boots.max_pressure_protection = INFINITY @@ -145,7 +145,7 @@ var/obj/item/clothing/head/helmet/space/rig/helmet = holder.helmet var/obj/item/clothing/gloves/gauntlets/rig/gloves = holder.gloves - to_chat(H, span_danger("You deactivate your suit's powered atmospheric shielding.")) + to_chat(H, span_boldnotice("You deactivate your suit's powered atmospheric shielding.")) if(boots) boots.max_pressure_protection = stored_max_pressure diff --git a/code/modules/clothing/spacesuits/rig/modules/specific/powersink.dm b/code/modules/clothing/spacesuits/rig/modules/specific/powersink.dm index 562f874af12..3b166f5915f 100644 --- a/code/modules/clothing/spacesuits/rig/modules/specific/powersink.dm +++ b/code/modules/clothing/spacesuits/rig/modules/specific/powersink.dm @@ -20,7 +20,7 @@ if(interfaced_with) if(holder && holder.wearer) - to_chat(holder.wearer, "Your power sink retracts as the module deactivates.") + to_chat(holder.wearer, span_warning("Your power sink retracts as the module deactivates.")) drain_complete() interfaced_with = null total_power_drained = 0 @@ -52,7 +52,7 @@ if(target.drain_power(1) <= 0) return 0 - to_chat(H, "You begin draining power from [target]!") + to_chat(H, span_danger("You begin draining power from [target]!")) interfaced_with = target drain_loc = interfaced_with.loc @@ -86,17 +86,17 @@ H.break_cloak() if(!holder.cell) - to_chat(H, "Your power sink flashes an error; there is no cell in your rig.") + to_chat(H, span_danger("Your power sink flashes an error; there is no cell in your rig.")) drain_complete(H) return if(!interfaced_with || !interfaced_with.Adjacent(H) || !(interfaced_with.loc == drain_loc)) - to_chat(H, "Your power sink retracts into its casing.") + to_chat(H, span_warning("Your power sink retracts into its casing.")) drain_complete(H) return if(holder.cell.fully_charged()) - to_chat(H, "Your power sink flashes an amber light; your rig cell is full.") + to_chat(H, span_warning("Your power sink flashes an amber light; your rig cell is full.")) drain_complete(H) return @@ -105,7 +105,7 @@ var/to_drain = min(12.5*holder.cell.maxcharge, ((holder.cell.maxcharge - holder.cell.charge) / CELLRATE)) var/target_drained = interfaced_with.drain_power(0,0,to_drain) if(target_drained <= 0) - to_chat(H, "Your power sink flashes a red light; there is no power left in [interfaced_with].") + to_chat(H, span_danger("Your power sink flashes a red light; there is no power left in [interfaced_with].")) drain_complete(H) return @@ -118,10 +118,10 @@ if(!interfaced_with) if(M) - to_chat(M, span_blue("Total power drained: [round(total_power_drained*CELLRATE)] cell units.")) + to_chat(M, span_notice(span_bold("Total power drained:") + " [round(total_power_drained*CELLRATE)] cell units.")) else if(M) - to_chat(M, span_blue("Total power drained from [interfaced_with]: [round(total_power_drained*CELLRATE)] cell units.")) + to_chat(M, span_notice(span_bold("Total power drained from [interfaced_with]:") + " [round(total_power_drained*CELLRATE)] cell units.")) interfaced_with.drain_power(0,1,0) // Damage the victim. drain_loc = null diff --git a/code/modules/clothing/spacesuits/rig/modules/specific/sprinter.dm b/code/modules/clothing/spacesuits/rig/modules/specific/sprinter.dm index 6fb036e1867..f18d67d8e38 100644 --- a/code/modules/clothing/spacesuits/rig/modules/specific/sprinter.dm +++ b/code/modules/clothing/spacesuits/rig/modules/specific/sprinter.dm @@ -27,7 +27,7 @@ var/mob/living/carbon/human/H = holder.wearer - to_chat(H, span_blue("You activate the suit's sprint mode.")) + to_chat(H, span_boldnotice("You activate the suit's sprint mode.")) holder.slowdown = initial(holder.slowdown) - sprint_speed diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm index 4ea1c598f74..6e66d2504fd 100644 --- a/code/modules/clothing/spacesuits/rig/modules/utility.dm +++ b/code/modules/clothing/spacesuits/rig/modules/utility.dm @@ -508,7 +508,7 @@ to_chat(user, span_danger("Another grenade of that type will not fit into the module.")) return 0 - to_chat(user, span_blue("You slot \the [input_device] into the suit module.")) + to_chat(user, span_boldnotice("You slot \the [input_device] into the suit module.")) user.drop_from_inventory(input_device) qdel(input_device) accepted_item.charges++ @@ -632,7 +632,7 @@ var/mob/living/carbon/human/H = holder.wearer - to_chat(H, span_blue("You activate the suit's sprint mode.")) + to_chat(H, span_boldnotice("You activate the suit's sprint mode.")) holder.slowdown = initial(holder.slowdown) - sprint_speed diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index b3c441921e9..653ea9a58a1 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -15,7 +15,7 @@ req_one_access = list() req_access = list() w_class = ITEMSIZE_HUGE - action_button_name = "Toggle Heatsink" + actions_types = list(/datum/action/item_action/toggle_heatsink) // These values are passed on to all component pieces. armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 20) @@ -98,7 +98,7 @@ var/datum/mini_hud/rig/minihud // Action button - action_button_name = "Hardsuit Interface" + actions_types = list(/datum/action/item_action/hardsuit_interface) /obj/item/rig/New() ..() @@ -384,7 +384,7 @@ QDEL_NULL(minihud) else minihud = new (M.hud_used, src) - to_chat(M, span_notice("Your entire suit [canremove ? "loosens as the components relax" : "tightens around you as the components lock into place"].")) + to_chat(M, span_boldnotice("Your entire suit [canremove ? "loosens as the components relax" : "tightens around you as the components lock into place"].")) playsound(src, 'sound/machines/rig/rigstarted.ogg', 10, FALSE) M.client?.screen -= booting_L qdel(booting_L) @@ -407,9 +407,6 @@ else update_airtight(piece, 1) // Seal -/obj/item/rig/ui_action_click() - toggle_cooling(usr) - /obj/item/rig/proc/toggle_cooling(var/mob/user) if(cooling_on) turn_cooling_off(user) @@ -675,7 +672,7 @@ return if(istype(M) && (M.back == src || M.belt == src)) - M.visible_message(span_notice("[M] struggles into \the [src]."), span_notice("You struggle into \the [src].")) + M.visible_message(span_boldnotice("[M] struggles into \the [src]."), span_boldnotice("You struggle into \the [src].")) wearer = M wearer.wearing_rig = src update_icon() @@ -725,7 +722,7 @@ holder = use_obj.loc if(istype(holder)) if(use_obj && check_slot == use_obj) - to_chat(H, span_notice("Your [use_obj.name] [use_obj.gender == PLURAL ? "retract" : "retracts"] swiftly.")) + to_chat(H, span_boldnotice("Your [use_obj.name] [use_obj.gender == PLURAL ? "retract" : "retracts"] swiftly.")) playsound(src, 'sound/machines/rig/rigservo.ogg', 10, FALSE) use_obj.canremove = TRUE holder.drop_from_inventory(use_obj) @@ -788,7 +785,7 @@ toggle_piece(piece, H, ONLY_DEPLOY) /obj/item/rig/dropped(var/mob/user) - ..() + . = ..(user) for(var/piece in list("helmet","gauntlets","chest","boots")) toggle_piece(piece, user, ONLY_RETRACT) if(wearer && wearer.wearing_rig == src) @@ -953,7 +950,7 @@ M.stop_pulling() if(wearer.pinned.len) - to_chat(src, "Your host is pinned to a wall by [wearer.pinned[1]]!") + to_chat(src, span_notice("Your host is pinned to a wall by [wearer.pinned[1]]!")) return 0 // AIs are a bit slower than regular and ignore move intent. diff --git a/code/modules/clothing/spacesuits/rig/rig_verbs.dm b/code/modules/clothing/spacesuits/rig/rig_verbs.dm index bbedbf082ad..9eb0724b0ef 100644 --- a/code/modules/clothing/spacesuits/rig/rig_verbs.dm +++ b/code/modules/clothing/spacesuits/rig/rig_verbs.dm @@ -10,9 +10,9 @@ tgui_interact(usr) // So the UI button clicks come here -/obj/item/rig/ui_action_click() - if(usr == wearer && (wearer.back == src || wearer.belt == src)) - tgui_interact(usr) +/obj/item/rig/ui_action_click(mob/user, actiontype) + if(user == wearer && (wearer.back == src || wearer.belt == src)) + tgui_interact(user) /obj/item/rig/verb/toggle_vision() @@ -223,11 +223,11 @@ if(!istype(module)) selected_module = null - to_chat(usr, span_blue("Primary system is now: deselected.")) + to_chat(usr, span_boldnotice("Primary system is now: deselected.")) return selected_module = module - to_chat(usr, span_blue("Primary system is now: [selected_module.interface_name].")) + to_chat(usr, span_boldnotice("Primary system is now: [selected_module.interface_name].")) /obj/item/rig/verb/toggle_module() @@ -261,10 +261,10 @@ return if(module.active) - to_chat(usr, span_blue("You attempt to deactivate \the [module.interface_name].")) + to_chat(usr, span_boldnotice("You attempt to deactivate \the [module.interface_name].")) module.deactivate() else - to_chat(usr, span_blue("You attempt to activate \the [module.interface_name].")) + to_chat(usr, span_boldnotice("You attempt to activate \the [module.interface_name].")) module.activate() /obj/item/rig/verb/engage_module() @@ -298,5 +298,5 @@ if(!istype(module)) return - to_chat(usr, span_blue("You attempt to engage the [module.interface_name].")) + to_chat(usr, span_boldnotice("You attempt to engage the [module.interface_name].")) module.engage() diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm index e435f24f404..b70ddc6a571 100644 --- a/code/modules/clothing/spacesuits/spacesuits.dm +++ b/code/modules/clothing/spacesuits/spacesuits.dm @@ -27,7 +27,7 @@ var/obj/machinery/camera/camera var/list/camera_networks - action_button_name = "Toggle Helmet Light" + actions_types = list(/datum/action/item_action/toggle_helmet_light) light_overlay = "helmet_light" light_range = 4 diff --git a/code/modules/clothing/spacesuits/void/military_vr.dm b/code/modules/clothing/spacesuits/void/military_vr.dm index 88701c2da74..e4b40097e4f 100644 --- a/code/modules/clothing/spacesuits/void/military_vr.dm +++ b/code/modules/clothing/spacesuits/void/military_vr.dm @@ -27,7 +27,7 @@ /obj/item/clothing/head/helmet/space/void/merc/odst name = "\improper ODST Helmet" - desc = "\"... we are glad to plunge feet first into hell in the knowledge that we will rise.\"" + desc = span_italics("\"... we are glad to plunge feet first into hell in the knowledge that we will rise.\"") icon_state = "rig0-odst" item_state = "rig0-odst" item_state_slots = null @@ -46,7 +46,7 @@ /obj/item/clothing/suit/space/void/merc/odst name = "ODST Armor" - desc = "\"... we are glad to plunge feet first into hell in the knowledge that we will rise.\"" + desc = span_italics("\"... we are glad to plunge feet first into hell in the knowledge that we will rise.\"") icon_state = "odst" item_state = "odst" item_state_slots = null diff --git a/code/modules/clothing/spacesuits/void/void.dm b/code/modules/clothing/spacesuits/void/void.dm index 763ee110aa0..a8c4c0f53d7 100644 --- a/code/modules/clothing/spacesuits/void/void.dm +++ b/code/modules/clothing/spacesuits/void/void.dm @@ -32,7 +32,7 @@ max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE min_pressure_protection = 0 * ONE_ATMOSPHERE max_pressure_protection = 10 * ONE_ATMOSPHERE - action_button_name = "Toggle Helmet" + actions_types = list(/datum/action/item_action/toggle_helmet) species_restricted = list("Human", SPECIES_SKRELL, "Promethean") sprite_sheets = VR_SPECIES_SPRITE_SHEETS_SUIT_MOB sprite_sheets_obj = VR_SPECIES_SPRITE_SHEETS_SUIT_ITEM diff --git a/code/modules/clothing/suits/aliens/teshari.dm b/code/modules/clothing/suits/aliens/teshari.dm index fe0e29ffc0a..89975b9f160 100644 --- a/code/modules/clothing/suits/aliens/teshari.dm +++ b/code/modules/clothing/suits/aliens/teshari.dm @@ -256,7 +256,7 @@ item_state_slots = list(slot_r_hand_str = "tesh_hcloak_bo", slot_l_hand_str = "tesh_hcloak_bo") body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS flags_inv = HIDEHOLSTER|HIDETIE - action_button_name = "Toggle Cloak Hood" + actions_types = list(/datum/action/item_action/toggle_hood) hoodtype = /obj/item/clothing/head/tesh_hood allowed = list (/obj/item/pen, /obj/item/paper, /obj/item/flashlight,/obj/item/tank/emergency/oxygen, /obj/item/storage/fancy/cigarettes, /obj/item/storage/box/matches, /obj/item/reagent_containers/food/drinks/flask) diff --git a/code/modules/clothing/suits/hooded.dm b/code/modules/clothing/suits/hooded.dm index 984629cee42..aa7d1bf8fb4 100644 --- a/code/modules/clothing/suits/hooded.dm +++ b/code/modules/clothing/suits/hooded.dm @@ -7,7 +7,7 @@ var/hoodtype = null //so the chaplain hoodie or other hoodies can override this var/hood_up = FALSE var/toggleicon - action_button_name = "Toggle Hood" + actions_types = list(/datum/action/item_action/toggle_hood) /obj/item/clothing/suit/storage/hooded/New() toggleicon = "[initial(icon_state)]" @@ -23,7 +23,7 @@ var/obj/item/clothing/head/hood/H = new hoodtype(src) hood = H -/obj/item/clothing/suit/storage/hooded/ui_action_click() +/obj/item/clothing/suit/storage/hooded/ui_action_click(mob/user, actiontype) ToggleHood() /obj/item/clothing/suit/storage/hooded/equipped(mob/user, slot) @@ -74,7 +74,7 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS - action_button_name = "Toggle Hood" + actions_types = list(/datum/action/item_action/toggle_hood) /obj/item/clothing/suit/storage/hooded/costume/siffet name = "siffet costume" diff --git a/code/modules/clothing/suits/hooded_vr.dm b/code/modules/clothing/suits/hooded_vr.dm index aaf729045ae..57cc6314048 100644 --- a/code/modules/clothing/suits/hooded_vr.dm +++ b/code/modules/clothing/suits/hooded_vr.dm @@ -22,7 +22,7 @@ hoodtype = /obj/item/clothing/head/hood/galahad armor = list(melee = 80, bullet = 50, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 2 - action_button_name = "Toggle Knight Headgear" + actions_types = list(/datum/action/item_action/toggle_knight_headgear) /obj/item/clothing/suit/storage/hooded/knight/galahad name = "crusader's armor" @@ -53,7 +53,7 @@ icon = 'icons/obj/clothing/knights_vr.dmi' icon_override = 'icons/obj/clothing/knights_vr.dmi' hoodtype = /obj/item/clothing/head/hood/galahad_costume - action_button_name = "Toggle Knight Headgear" + actions_types = list(/datum/action/item_action/toggle_knight_headgear) /obj/item/clothing/suit/storage/hooded/knight_costume/galahad icon_state = "galahad" @@ -84,7 +84,7 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO flags_inv = HIDETIE|HIDEHOLSTER cold_protection = UPPER_TORSO|LOWER_TORSO - action_button_name = "Toggle Hood" + actions_types = list(/datum/action/item_action/toggle_hood) /obj/item/clothing/suit/storage/hooded/foodcostume/hotdog //Belly filler uniform :^). name = "hotdog costume" diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index 9039018a805..7c4b968b093 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -557,7 +557,7 @@ item_flags = FLEXIBLEMATERIAL var/breath_masked = FALSE var/obj/item/clothing/mask/breath/breathmask - action_button_name = "Pull On Gaiter" + actions_types = list(/datum/action/item_action/pull_on_gaiter) /obj/item/clothing/accessory/gaiter/update_clothing_icon() . = ..() diff --git a/code/modules/clothing/under/accessories/accessory_vr.dm b/code/modules/clothing/under/accessories/accessory_vr.dm index 7043d09d893..7b68ced88a5 100644 --- a/code/modules/clothing/under/accessories/accessory_vr.dm +++ b/code/modules/clothing/under/accessories/accessory_vr.dm @@ -400,7 +400,7 @@ return if(H.size_multiplier != target_size) if(!(world.time - last_activated > 10 SECONDS)) - to_chat(M, "\The [src] flickers. It seems to be recharging.") + to_chat(M, span_warning("\The [src] flickers. It seems to be recharging.")) return last_activated = world.time original_size = H.size_multiplier @@ -418,7 +418,7 @@ original_size = null H.visible_message(span_warning("The space around [H] distorts as they return to their original size!"),span_notice("The space around you distorts as you return to your original size!")) log_admin("Admin [key_name(M)]'s size was altered by a bluespace collar.") - to_chat(M, "\The [src] flickers. It is now recharging and will be ready again in ten seconds.") + to_chat(M, span_warning("\The [src] flickers. It is now recharging and will be ready again in ten seconds.")) s.set_up(3, 1, M) s.start() return @@ -501,7 +501,7 @@ return if(H.size_multiplier != target_size) if(!(world.time - last_activated > 10 SECONDS)) - to_chat(M, "\The [src] flickers. It seems to be recharging.") + to_chat(M, span_warning("\The [src] flickers. It seems to be recharging.")) return last_activated = world.time original_size = H.size_multiplier @@ -519,7 +519,7 @@ original_size = null H.visible_message(span_warning("The space around [H] distorts as they return to their original size!"),span_notice("The space around you distorts as you return to your original size!")) log_admin("Admin [key_name(M)]'s size was altered by a bluespace collar.") - to_chat(M, "\The [src] flickers. It is now recharging and will be ready again in ten seconds.") + to_chat(M, span_warning("\The [src] flickers. It is now recharging and will be ready again in ten seconds.")) s.set_up(3, 1, M) s.start() return @@ -573,7 +573,7 @@ return if(currently_shrinking == 0) if(!(world.time - last_activated > 10 SECONDS)) - to_chat(M, "\The [src] flickers. It seems to be recharging.") + to_chat(M, span_warning("\The [src] flickers. It seems to be recharging.")) return last_activated = world.time original_size = H.size_multiplier @@ -593,7 +593,7 @@ currently_shrinking = 0 H.visible_message(span_warning("The space around [H] distorts as they return to their original size!"),span_notice("The space around you distorts as you return to your original size!")) log_admin("Admin [key_name(M)]'s size was altered by a bluespace collar.") - to_chat(M, "\The [src] flickers. It is now recharging and will be ready again in ten seconds.") + to_chat(M, span_warning("\The [src] flickers. It is now recharging and will be ready again in ten seconds.")) s.set_up(3, 1, M) s.start() return @@ -714,7 +714,7 @@ desc = "The latest fashion innovations by the Nanotrasen Uniform & Fashion Department have provided the brilliant invention of slicing a regular cloak in half! All the ponce, half the cost!" icon_state = "roughcloak" item_state = "roughcloak" - action_button_name = "Adjust Cloak" + actions_types = list(/datum/action/item_action/adjust_cloak) /obj/item/clothing/accessory/poncho/roles/cloak/half/update_clothing_icon() . = ..() @@ -985,7 +985,7 @@ desc = "Aim for the Heart, Ramon." icon_state = "neo_ranger" item_state = "neo_ranger" - action_button_name = "Adjust Poncho" + actions_types = list(/datum/action/item_action/adjust_poncho) /obj/item/clothing/accessory/poncho/roles/neo_ranger/update_clothing_icon() . = ..() diff --git a/code/modules/clothing/under/accessories/holster.dm b/code/modules/clothing/under/accessories/holster.dm index b64261ef07d..676c5440818 100644 --- a/code/modules/clothing/under/accessories/holster.dm +++ b/code/modules/clothing/under/accessories/holster.dm @@ -151,7 +151,7 @@ /obj/item/clothing/accessory/holster/hip name = "hip holster" - desc = "No one dared to ask his business, no one dared to make a slip. The stranger there among them had a big iron on his hip." + desc = span_italics("No one dared to ask his business, no one dared to make a slip. The stranger there among them had a big iron on his hip.") icon_state = "holster_hip" concealed_holster = 0 diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index c00de40e7fd..152b107ecfb 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -54,7 +54,7 @@ /obj/item/clothing/under/rank/mailman name = "mailman's jumpsuit" - desc = "'Special delivery!'" + desc = span_italics("'Special delivery!'") icon_state = "mailman" item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue") rolled_sleeves = 0 diff --git a/code/modules/clothing/under/miscellaneous_vr.dm b/code/modules/clothing/under/miscellaneous_vr.dm index 312c186f73e..c216ca4579e 100644 --- a/code/modules/clothing/under/miscellaneous_vr.dm +++ b/code/modules/clothing/under/miscellaneous_vr.dm @@ -138,7 +138,7 @@ return if(H.size_multiplier != target_size) if(!(world.time - last_activated > 10 SECONDS)) - to_chat(M, "\The [src] flickers. It seems to be recharging.") + to_chat(M, span_warning("\The [src] flickers. It seems to be recharging.")) return last_activated = world.time original_size = H.size_multiplier @@ -157,7 +157,7 @@ original_size = null H.visible_message(span_warning("The space around [H] distorts as they return to their original size!"),span_notice("The space around you distorts as you return to your original size!")) log_admin("Admin [key_name(M)]'s size was altered by a bluespace bracelet.") - to_chat(M, "\The [src] flickers. It is now recharging and will be ready again in thirty seconds.") + to_chat(M, span_warning("\The [src] flickers. It is now recharging and will be ready again in thirty seconds.")) /obj/item/clothing/gloves/bluespace/examine(var/mob/user) . = ..() diff --git a/code/modules/detectivework/microscope/dnascanner.dm b/code/modules/detectivework/microscope/dnascanner.dm index 5f6c252dfb8..3539153b7bb 100644 --- a/code/modules/detectivework/microscope/dnascanner.dm +++ b/code/modules/detectivework/microscope/dnascanner.dm @@ -121,8 +121,8 @@ data += "Blood type: [bloodsamp.dna[blood]]
    \nDNA: [blood]

    " else data += "No DNA found.
    " - P.info = "[src] analysis report #[report_num]
    " - P.info += "Scanned item:
    [bloodsamp.name]
    [bloodsamp.desc]

    " + data + P.info = span_bold("[src] analysis report #[report_num]") + "
    " + P.info += span_bold("Scanned item:") + "
    [bloodsamp.name]
    [bloodsamp.desc]

    " + data P.forceMove(loc) P.update_icon() scanning = FALSE diff --git a/code/modules/detectivework/microscope/microscope.dm b/code/modules/detectivework/microscope/microscope.dm index f5ba97ca0e5..62185b7538e 100644 --- a/code/modules/detectivework/microscope/microscope.dm +++ b/code/modules/detectivework/microscope/microscope.dm @@ -46,7 +46,7 @@ var/obj/item/forensics/swab/swab = sample report.name = "GSR report #[++report_num]: [swab.name]" - report.info = "Scanned item:
    [swab.name]

    " + report.info = span_bold("Scanned item:") + "
    [swab.name]

    " if(swab.gsr) report.info += "Residue from a [swab.gsr] bullet detected." @@ -56,16 +56,16 @@ else if(istype(sample, /obj/item/sample/fibers)) var/obj/item/sample/fibers/fibers = sample report.name = "Fiber report #[++report_num]: [fibers.name]" - report.info = "Scanned item:
    [fibers.name]

    " + report.info = span_bold("Scanned item:") + "
    [fibers.name]

    " if(fibers.evidence) report.info = "Molecular analysis on provided sample has determined the presence of unique fiber strings.

    " for(var/fiber in fibers.evidence) - report.info += "Most likely match for fibers: [fiber]

    " + report.info += span_notice("Most likely match for fibers: [fiber]") + "

    " else report.info += "No fibers found." else if(istype(sample, /obj/item/sample/print)) report.name = "Fingerprint report #[report_num]: [sample.name]" - report.info = "Fingerprint analysis report #[report_num]: [sample.name]
    " + report.info = span_bold("Fingerprint analysis report #[report_num]") + ": [sample.name]
    " var/obj/item/sample/print/card = sample if(card.evidence && card.evidence.len) report.info += "Surface analysis has determined unique fingerprint strings:

    " diff --git a/code/modules/detectivework/tools/rag.dm b/code/modules/detectivework/tools/rag.dm index 1522f4f5e87..52ccc6558c3 100644 --- a/code/modules/detectivework/tools/rag.dm +++ b/code/modules/detectivework/tools/rag.dm @@ -147,7 +147,7 @@ return if(A.reagents && A.reagents.trans_to_obj(src, reagents.maximum_volume)) - user.visible_message("\The [user] soaks [src] using [A].", span_notice("You soak [src] using [A].")) + user.visible_message(span_infoplain(span_bold("\The [user]") + " soaks [src] using [A]."), span_notice("You soak [src] using [A].")) update_name() return diff --git a/code/modules/detectivework/tools/scanner.dm b/code/modules/detectivework/tools/scanner.dm index cfb9b83812d..b00ab89f39d 100644 --- a/code/modules/detectivework/tools/scanner.dm +++ b/code/modules/detectivework/tools/scanner.dm @@ -112,7 +112,7 @@ if(reveal_fibers && do_after(user, 5 SECONDS)) to_chat(user, span_notice("Apparel samples scanned:")) for(var/sample in A.suit_fibers) - to_chat(user, " - [sample]") + to_chat(user, " - " + span_notice("[sample]")) //Blood if (A.blood_DNA && A.blood_DNA.len) @@ -120,7 +120,7 @@ if(reveal_blood && do_after(user, 5 SECONDS)) flick("[icon_state]1",src) for(var/blood in A.blood_DNA) - to_chat(user, "Blood type: [A.blood_DNA[blood]] DNA: [blood]") + to_chat(user, "Blood type: " + span_warning("[A.blood_DNA[blood]]") + " DNA: " + span_warning("[blood]")) user.visible_message("\The [user] scans \the [A] with \a [src], the air around [user.gender == MALE ? "him" : "her"] humming[prob(70) ? " gently." : "."]" ,\ span_notice("You finish scanning \the [A]."),\ @@ -165,7 +165,7 @@ var/print = fprints[i] if(stringpercent(print) <= FINGERPRINT_COMPLETE) complete_prints += print - to_chat(user, " - [print]") + to_chat(user, " - " + span_notice("[print]")) else incomplete_prints += print @@ -174,19 +174,19 @@ if(reveal_incompletes) for(var/print in incomplete_prints) - to_chat(user, " - [print]") + to_chat(user, " - " + span_notice("[print]")) if(fibers && fibers.len) to_chat(user, span_notice("[fibers.len] samples of material were present.")) if(reveal_fibers) for(var/sample in fibers) - to_chat(user, " - [sample]") + to_chat(user, " - " + span_notice("[sample]")) if(bloods && bloods.len) to_chat(user, span_notice("[bloods.len] samples of blood were present.")) if(reveal_blood) for(var/bloodsample in bloods) - to_chat(user, " - [bloodsample] Type: [bloods[bloodsample]]") + to_chat(user, " - " + span_warning("[bloodsample]") + " Type: [bloods[bloodsample]]") /obj/item/detective_scanner/verb/wipe() set name = "Wipe Forensic Data" diff --git a/code/modules/detectivework/tools/uvlight.dm b/code/modules/detectivework/tools/uvlight.dm index 6e487d6d963..28afb25655a 100644 --- a/code/modules/detectivework/tools/uvlight.dm +++ b/code/modules/detectivework/tools/uvlight.dm @@ -5,7 +5,7 @@ slot_flags = SLOT_BELT w_class = ITEMSIZE_SMALL item_state = "electronic" - action_button_name = "Toggle UV light" + actions_types = list(/datum/action/item_action/toggle_uv_light) matter = list(MAT_STEEL = 150) origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1) diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm index 704700139fd..652b23757a2 100644 --- a/code/modules/economy/ATM.dm +++ b/code/modules/economy/ATM.dm @@ -85,7 +85,7 @@ log transactions if(istype(I, /obj/item/card)) if(emagged > 0) //prevent inserting id into an emagged ATM - to_chat(user, span_red("[icon2html(src, user.client)] CARD READER ERROR. This system has been compromised!")) + to_chat(user, span_boldwarning("[icon2html(src, user.client)] CARD READER ERROR. This system has been compromised!")) return else if(istype(I,/obj/item/card/emag)) I.resolve_attackby(src, user) @@ -190,7 +190,7 @@ log transactions release_held_id(usr) else if(emagged > 0) - to_chat(usr, span_red("[icon2html(src, usr.client)] The ATM card reader rejected your ID because this machine has been sabotaged!")) + to_chat(usr, span_boldwarning("[icon2html(src, usr.client)] The ATM card reader rejected your ID because this machine has been sabotaged!")) else var/obj/item/I = usr.get_active_hand() if(istype(I, /obj/item/card/id)) @@ -211,12 +211,12 @@ log transactions var/obj/item/paper/R = new(loc) R.name = "Account balance: [authenticated_account.owner_name]" - R.info = "NT Automated Teller Account Statement

    " - R.info += "Account holder: [authenticated_account.owner_name]
    " - R.info += "Account number: [authenticated_account.account_number]
    " - R.info += "Balance: $[authenticated_account.money]
    " - R.info += "Date and time: [stationtime2text()], [current_date_string]

    " - R.info += "Service terminal ID: [machine_id]
    " + R.info = span_bold("NT Automated Teller Account Statement") + "

    " + R.info += span_italics("Account holder:") + " [authenticated_account.owner_name]
    " + R.info += span_italics("Account number:") + " [authenticated_account.account_number]
    " + R.info += span_italics("Balance:") + " $[authenticated_account.money]
    " + R.info += span_italics("Date and time:") + " [stationtime2text()], [current_date_string]

    " + R.info += span_italics("Service terminal ID:") + " [machine_id]
    " //stamp the paper var/image/stampoverlay = image('icons/obj/bureaucracy.dmi') @@ -225,7 +225,7 @@ log transactions R.stamped = new R.stamped += /obj/item/stamp R.add_overlay(stampoverlay) - R.stamps += "
    This paper has been stamped by the Automatic Teller Machine." + R.stamps += "
    " + span_italics("This paper has been stamped by the Automatic Teller Machine.") if(prob(50)) playsound(src, 'sound/items/polaroid1.ogg', 50, 1) @@ -240,19 +240,19 @@ log transactions var/obj/item/paper/R = new(loc) R.name = "Transaction logs: [authenticated_account.owner_name]" - R.info = "Transaction logs
    " - R.info += "Account holder: [authenticated_account.owner_name]
    " - R.info += "Account number: [authenticated_account.account_number]
    " - R.info += "Date and time: [stationtime2text()], [current_date_string]

    " - R.info += "Service terminal ID: [machine_id]
    " + R.info = span_bold("Transaction logs") + "
    " + R.info += span_italics("Account holder:") + " [authenticated_account.owner_name]
    " + R.info += span_italics("Account number:") + " [authenticated_account.account_number]
    " + R.info += span_italics("Date and time:") + " [stationtime2text()], [current_date_string]

    " + R.info += span_italics("Service terminal ID:") + " [machine_id]
    " R.info += "" R.info += "" - R.info += "" - R.info += "" - R.info += "" - R.info += "" - R.info += "" - R.info += "" + R.info += "" + R.info += "" + R.info += "" + R.info += "" + R.info += "" + R.info += "" R.info += "" for(var/datum/transaction/T in authenticated_account.transaction_log) R.info += "" @@ -272,7 +272,7 @@ log transactions R.stamped = new R.stamped += /obj/item/stamp R.add_overlay(stampoverlay) - R.stamps += "
    This paper has been stamped by the Automatic Teller Machine." + R.stamps += "
    " + span_italics("This paper has been stamped by the Automatic Teller Machine.") if(prob(50)) playsound(src, 'sound/items/polaroid1.ogg', 50, 1) @@ -317,11 +317,11 @@ log transactions T.time = stationtime2text() failed_account.transaction_log.Add(T) else - to_chat(usr, span_red("[icon2html(src, usr.client)] Incorrect pin/account combination entered, [max_pin_attempts - number_incorrect_tries] attempts remaining.")) + to_chat(usr, span_warning("[icon2html(src, usr.client)] Incorrect pin/account combination entered, [max_pin_attempts - number_incorrect_tries] attempts remaining.")) previous_account_number = tried_account_num playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 1) else - to_chat(usr, span_red("[icon2html(src, usr.client)] incorrect pin/account combination entered.")) + to_chat(usr, span_warning("[icon2html(src, usr.client)] incorrect pin/account combination entered.")) number_incorrect_tries = 0 else playsound(src, 'sound/machines/twobeep.ogg', 50, 1) @@ -337,7 +337,7 @@ log transactions T.time = stationtime2text() authenticated_account.transaction_log.Add(T) - to_chat(usr, span_blue("[icon2html(src, usr.client)] Access granted. Welcome user '[authenticated_account.owner_name].'")) + to_chat(usr, span_notice("[icon2html(src, usr.client)] Access granted. Welcome user '[authenticated_account.owner_name].'")) previous_account_number = tried_account_num . = TRUE @@ -353,7 +353,7 @@ log transactions var/target_account_number = text2num(params["target_acc_number"]) var/transfer_purpose = params["purpose"] if(charge_to_account(target_account_number, authenticated_account.owner_name, transfer_purpose, machine_id, transfer_amount)) - to_chat(usr, "[icon2html(src, usr.client)]Funds transfer successful.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_info("Funds transfer successful.")) authenticated_account.money -= transfer_amount //create an entry in the account transaction log @@ -366,10 +366,10 @@ log transactions T.amount = "([transfer_amount])" authenticated_account.transaction_log.Add(T) else - to_chat(usr, "[icon2html(src, usr.client)]Funds transfer failed.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("Funds transfer failed.")) else - to_chat(usr, "[icon2html(src, usr.client)]You don't have enough funds to do that!") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("You don't have enough funds to do that!")) . = TRUE if("e_withdrawal") @@ -401,7 +401,7 @@ log transactions T.time = stationtime2text() authenticated_account.transaction_log.Add(T) else - to_chat(usr, "[icon2html(src, usr.client)]You don't have enough funds to do that!") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("You don't have enough funds to do that!")) . = TRUE if("withdrawal") @@ -432,7 +432,7 @@ log transactions T.time = stationtime2text() authenticated_account.transaction_log.Add(T) else - to_chat(usr, "[icon2html(src, usr.client)]You don't have enough funds to do that!") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("You don't have enough funds to do that!")) . = TRUE if(.) diff --git a/code/modules/economy/Accounts.dm b/code/modules/economy/Accounts.dm index 1612f4b49a7..d8f7a02ff0f 100644 --- a/code/modules/economy/Accounts.dm +++ b/code/modules/economy/Accounts.dm @@ -54,7 +54,7 @@ var/obj/item/paper/R = new /obj/item/paper(P) P.wrapped = R R.name = "Account information: [M.owner_name]" - R.info = "Account details (confidential)


    " + R.info = span_bold("Account details (confidential)") + "


    " R.info += "Account holder: [M.owner_name]
    " R.info += "Account number: [M.account_number]
    " R.info += "Account pin: [M.remote_access_pin]
    " diff --git a/code/modules/economy/EFTPOS.dm b/code/modules/economy/EFTPOS.dm index 584e5b38a0c..cd9f84f3d7c 100644 --- a/code/modules/economy/EFTPOS.dm +++ b/code/modules/economy/EFTPOS.dm @@ -28,10 +28,10 @@ var/obj/item/paper/R = new(src.loc) R.name = "Steps to success: Correct EFTPOS Usage" //Temptative new manual: - R.info += "First EFTPOS setup:
    " + R.info += span_bold("First EFTPOS setup:") + "
    " R.info += "1. Memorise your EFTPOS command code (provided with all EFTPOS devices).
    " R.info += "2. Connect the EFTPOS to the account in which you want to receive the funds.

    " - R.info += "When starting a new transaction:
    " + R.info += span_bold("When starting a new transaction:") + "
    " R.info += "1. Enter the amount of money you want to charge and a purpose message for the new transaction.
    " R.info += "2. Lock the new transaction. If you want to modify or cancel the transaction, you simply have to reset your EFTPOS device.
    " R.info += "3. Give the EFTPOS device to your customer, he/she must finish the transaction by swiping their ID card or a charge card with enough funds.
    " @@ -56,9 +56,9 @@ /obj/item/eftpos/proc/print_reference() var/obj/item/paper/R = new(src.loc) R.name = "Reference: [eftpos_name]" - R.info = "[eftpos_name] reference

    " + R.info = span_bold("[eftpos_name] reference") + "

    " R.info += "Access code: [access_code]

    " - R.info += "Do not lose or misplace this code.
    " + R.info += span_bold("Do not lose or misplace this code.") + "
    " //stamp the paper var/image/stampoverlay = image('icons/obj/bureaucracy.dmi') @@ -75,7 +75,7 @@ /obj/item/eftpos/attack_self(mob/user as mob) if(get_dist(src,user) <= 1) - var/dat = "[eftpos_name]
    " + var/dat = span_bold("[eftpos_name]") + "
    " dat += "This terminal is [machine_id]. Report this code when contacting IT Support
    " if(transaction_locked) dat += "Back[transaction_paid ? "" : " (authentication required)"]

    " @@ -109,7 +109,7 @@ if(linked_account) scan_card(I, O) else - to_chat(usr, "[icon2html(src, usr.client)]Unable to connect to linked account.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("Unable to connect to linked account.")) else if (istype(O, /obj/item/spacecash/ewallet)) var/obj/item/spacecash/ewallet/E = O if (linked_account) @@ -134,11 +134,11 @@ T.time = stationtime2text() linked_account.transaction_log.Add(T) else - to_chat(usr, "[icon2html(src, usr.client)]\The [O] doesn't have that much money!") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("\The [O] doesn't have that much money!")) else - to_chat(usr, "[icon2html(src, usr.client)]Connected account has been suspended.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("Connected account has been suspended.")) else - to_chat(usr, "[icon2html(src, usr.client)]EFTPOS is not connected to an account.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("EFTPOS is not connected to an account.")) else ..() @@ -156,14 +156,14 @@ tgui_alert_async(usr, "That is not a valid code!") print_reference() else - to_chat(usr, "[icon2html(src, usr.client)]Incorrect code entered.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("Incorrect code entered.")) if("change_id") var/attempt_code = text2num(input(usr, "Re-enter the current EFTPOS access code", "Confirm EFTPOS code")) if(attempt_code == access_code) eftpos_name = sanitize(input(usr, "Enter a new terminal ID for this device", "Enter new EFTPOS ID"), MAX_NAME_LEN) + " EFTPOS scanner" print_reference() else - to_chat(usr, "[icon2html(src, usr.client)]Incorrect code entered.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("Incorrect code entered.")) if("link_account") var/attempt_account_num = tgui_input_number(usr, "Enter account number to pay EFTPOS charges into", "New account number") var/attempt_pin = tgui_input_number(usr, "Enter pin code", "Account pin") @@ -171,9 +171,9 @@ if(linked_account) if(linked_account.suspended) linked_account = null - to_chat(usr, "[icon2html(src, usr.client)]Account has been suspended.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("Account has been suspended.")) else - to_chat(usr, "[icon2html(src, usr.client)]Account not found.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("Account not found.")) if("trans_purpose") var/choice = sanitize(input(usr, "Enter reason for EFTPOS transaction", "Transaction purpose")) if(choice) transaction_purpose = choice @@ -196,14 +196,14 @@ else if(linked_account) transaction_locked = 1 else - to_chat(usr, "[icon2html(src, usr.client)]No account connected to send transactions to.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("No account connected to send transactions to.")) if("scan_card") if(linked_account) var/obj/item/I = usr.get_active_hand() if (istype(I, /obj/item/card)) scan_card(I) else - to_chat(usr, "[icon2html(src, usr.client)]Unable to link accounts.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("Unable to link accounts.")) if("reset") //reset the access code - requires HoP/captain access var/obj/item/I = usr.get_active_hand() @@ -211,10 +211,10 @@ var/obj/item/card/id/C = I if((access_cent_captain in C.access) || (access_hop in C.access) || (access_captain in C.access)) access_code = 0 - to_chat(usr, "[icon2html(src, usr.client)]Access code reset to 0.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_info("Access code reset to 0.")) else if (istype(I, /obj/item/card/emag)) access_code = 0 - to_chat(usr, "[icon2html(src, usr.client)]Access code reset to 0.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_info("Access code reset to 0.")) src.attack_self(usr) @@ -267,19 +267,19 @@ T.time = stationtime2text() linked_account.transaction_log.Add(T) else - to_chat(usr, "[icon2html(src, usr.client)]You don't have that much money!") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("You don't have that much money!")) else - to_chat(usr, "[icon2html(src, usr.client)]Your account has been suspended.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("Your account has been suspended.")) else - to_chat(usr, "[icon2html(src, usr.client)]Unable to access account. Check security settings and try again.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("Unable to access account. Check security settings and try again.")) else - to_chat(usr, "[icon2html(src, usr.client)]Connected account has been suspended.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("Connected account has been suspended.")) else - to_chat(usr, "[icon2html(src, usr.client)]EFTPOS is not connected to an account.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("EFTPOS is not connected to an account.")) else if (istype(I, /obj/item/card/emag)) if(transaction_locked) if(transaction_paid) - to_chat(usr, "[icon2html(src, usr.client)]You stealthily swipe \the [I] through \the [src].") + to_chat(usr, "[icon2html(src, usr.client)]" + span_info("You stealthily swipe \the [I] through \the [src].")) transaction_locked = 0 transaction_paid = 0 else diff --git a/code/modules/economy/cash_register.dm b/code/modules/economy/cash_register.dm index 0ac82c01bdd..17b1327ebf0 100644 --- a/code/modules/economy/cash_register.dm +++ b/code/modules/economy/cash_register.dm @@ -67,8 +67,8 @@ var/dat = "

    Cash Register

    " if (locked) dat += "Unlock
    " - dat += "Linked account: [linked_account ? linked_account.owner_name : "None"]
    " - dat += "[cash_locked? "Unlock" : "Lock"] Cash Box | " + dat += "Linked account: " + span_bold("[linked_account ? linked_account.owner_name : "None"]") + "
    " + dat += span_bold("[cash_locked? "Unlock" : "Lock"] Cash Box") + " | " else dat += "Lock
    " dat += "Linked account: [linked_account ? linked_account.owner_name : "None"]
    " @@ -103,7 +103,7 @@ if(allowed(usr)) locked = !locked else - to_chat(usr, "[icon2html(src, usr.client)]Insufficient access.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("Insufficient access.")) if("toggle_cash_lock") cash_locked = !cash_locked if("link_account") @@ -113,9 +113,9 @@ if(linked_account) if(linked_account.suspended) linked_account = null - src.visible_message("[icon2html(src,viewers(src))]Account has been suspended.") + src.visible_message("[icon2html(src,viewers(src))]" + span_warning("Account has been suspended.")) else - to_chat(usr, "[icon2html(src, usr.client)]Account not found.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("Account not found.")) if("custom_order") var/t_purpose = sanitize(tgui_input_text(usr, "Enter purpose", "New purpose")) if (!t_purpose || !Adjacent(usr)) return @@ -163,7 +163,7 @@ price_list.Cut() if("reset_log") transaction_logs.Cut() - to_chat(usr, "[icon2html(src, usr.client)]Transaction log reset.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_notice("Transaction log reset.")) updateDialog() @@ -208,7 +208,7 @@ return 1 else confirm_item = I - src.visible_message("[icon2html(src,viewers(src))]Total price: [transaction_amount] Thaler\s. Swipe again to confirm.") + src.visible_message(span_infoplain("[icon2html(src,viewers(src))]" + span_bold("Total price:") + " [transaction_amount] Thaler\s. Swipe again to confirm.")) playsound(src, 'sound/machines/twobeep.ogg', 25) return 0 @@ -219,14 +219,14 @@ if (cash_open) playsound(src, 'sound/machines/buzz-sigh.ogg', 25) - to_chat(usr, "[icon2html(src, usr.client)]The cash box is open.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("The cash box is open.")) return if((item_list.len > 1 || item_list[item_list[1]] > 1) && !confirm(I)) return if (!linked_account) - usr.visible_message("[icon2html(src,viewers(src))]Unable to connect to linked account.") + usr.visible_message("[icon2html(src,viewers(src))]" + span_warning("Unable to connect to linked account.")) return // Access account for transaction @@ -239,13 +239,13 @@ D = attempt_account_access(I.associated_account_number, attempt_pin, 2) if(!D) - src.visible_message("[icon2html(src,viewers(src))]Unable to access account. Check security settings and try again.") + src.visible_message("[icon2html(src,viewers(src))]" + span_warning("Unable to access account. Check security settings and try again.")) else if(D.suspended) - src.visible_message("[icon2html(src,viewers(src))]Your account has been suspended.") + src.visible_message("[icon2html(src,viewers(src))]" + span_warning("Your account has been suspended.")) else if(transaction_amount > D.money) - src.visible_message("[icon2html(src,viewers(src))]Not enough funds.") + src.visible_message("[icon2html(src,viewers(src))]" + span_warning("Not enough funds.")) else // Transfer the money D.money -= transaction_amount @@ -284,7 +284,7 @@ if (cash_open) playsound(src, 'sound/machines/buzz-sigh.ogg', 25) - to_chat(usr, "[icon2html(src, usr.client)]The cash box is open.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("The cash box is open.")) return if((item_list.len > 1 || item_list[item_list[1]] > 1) && !confirm(E)) @@ -293,7 +293,7 @@ // Access account for transaction if(check_account()) if(transaction_amount > E.worth) - src.visible_message("[icon2html(src,viewers(src))]Not enough funds.") + src.visible_message("[icon2html(src,viewers(src))]" + span_warning("Not enough funds.")) else // Transfer the money E.worth -= transaction_amount @@ -322,14 +322,14 @@ if (cash_open) playsound(src, 'sound/machines/buzz-sigh.ogg', 25) - to_chat(usr, "[icon2html(src, usr.client)]The cash box is open.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("The cash box is open.")) return if((item_list.len > 1 || item_list[item_list[1]] > 1) && !confirm(SC)) return if(transaction_amount > SC.worth) - src.visible_message("[icon2html(src,viewers(src))]Not enough money.") + src.visible_message("[icon2html(src,viewers(src))]" + span_warning("Not enough money.")) else // Insert cash into magical slot SC.worth -= transaction_amount @@ -351,17 +351,17 @@ /obj/machinery/cash_register/proc/scan_item_price(obj/O) if(!istype(O)) return if(item_list.len > 10) - src.visible_message("[icon2html(src,viewers(src))]Only up to ten different items allowed per purchase.") + src.visible_message("[icon2html(src,viewers(src))]" + span_warning("Only up to ten different items allowed per purchase.")) return if (cash_open) playsound(src, 'sound/machines/buzz-sigh.ogg', 25) - to_chat(usr, "[icon2html(src, usr.client)]The cash box is open.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("The cash box is open.")) return // First check if item has a valid price var/price = O.get_item_cost() if(isnull(price)) - src.visible_message("[icon2html(src,viewers(src))]Unable to find item in database.") + src.visible_message("[icon2html(src,viewers(src))]" + span_warning("Unable to find item in database.")) return // Call out item cost src.visible_message("[icon2html(src,viewers(src))]\A [O]: [price ? "[price] Thaler\s" : "free of charge"].") @@ -399,7 +399,7 @@ item_name = item_list[i] dat += "" dat += "
    DateTimeTargetPurposeValueSource terminal ID" + span_bold("Date") + "" + span_bold("Time") + "" + span_bold("Target") + "" + span_bold("Purpose") + "" + span_bold("Value") + "" + span_bold("Source terminal ID") + "
    [item_list[item_name] ? "- Set + [item_list[item_name]] x " : ""][item_name] Remove[price_list[item_name] * item_list[item_name]] þ
    " - dat += "" + dat += "" dat += "
    Clear EntryTotal Amount: [transaction_amount] þ
    Clear Entry" + span_bold("Total Amount: [transaction_amount] þ") + "
    " return dat @@ -424,7 +424,7 @@ for(var/i=1, i<=item_list.len, i++) item_name = item_list[i] dat += "
    [item_list[item_name] ? "[item_list[item_name]] x " : ""][item_name][price_list[item_name] * item_list[item_name]] þ
    Total Amount: [transaction_amount] þ
    " + span_bold("Total Amount: [transaction_amount] þ") + "
    " transaction_logs += dat @@ -432,11 +432,11 @@ /obj/machinery/cash_register/proc/check_account() if (!linked_account) - usr.visible_message("[icon2html(src,viewers(src))]Unable to connect to linked account.") + usr.visible_message("[icon2html(src,viewers(src))]" + span_warning("Unable to connect to linked account.")) return 0 if(linked_account.suspended) - src.visible_message("[icon2html(src,viewers(src))]Connected account has been suspended.") + src.visible_message("[icon2html(src,viewers(src))]" + span_warning("Connected account has been suspended.")) return 0 return 1 @@ -444,7 +444,7 @@ /obj/machinery/cash_register/proc/transaction_complete() /// Visible confirmation playsound(src, 'sound/machines/chime.ogg', 25) - src.visible_message("[icon2html(src,viewers(src))]Transaction complete.") + src.visible_message("[icon2html(src,viewers(src))]" + span_notice("Transaction complete.")) flick("register_approve", src) reset_memory() updateDialog() diff --git a/code/modules/economy/money_bag.dm b/code/modules/economy/money_bag.dm index 6a443226f2b..65bfe9cd6fb 100644 --- a/code/modules/economy/money_bag.dm +++ b/code/modules/economy/money_bag.dm @@ -30,7 +30,7 @@ if (istype(C,/obj/item/coin/uranium)) amt_uranium++; - var/dat = text("The contents of the moneybag reveal...
    ") + var/dat = span_bold("The contents of the moneybag reveal...") + "
    " if (amt_gold) dat += text("Gold coins: [amt_gold] Remove one
    ") if (amt_silver) diff --git a/code/modules/economy/retail_scanner.dm b/code/modules/economy/retail_scanner.dm index 79155d0a4a3..1b981dc6790 100644 --- a/code/modules/economy/retail_scanner.dm +++ b/code/modules/economy/retail_scanner.dm @@ -99,7 +99,7 @@ if(allowed(usr)) locked = !locked else - to_chat(usr, "[icon2html(src, usr.client)]Insufficient access.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("Insufficient access.")) if("link_account") var/attempt_account_num = tgui_input_number(usr, "Enter account number", "New account number") var/attempt_pin = tgui_input_number(usr, "Enter PIN", "Account PIN") @@ -107,9 +107,9 @@ if(linked_account) if(linked_account.suspended) linked_account = null - src.visible_message("[icon2html(src,viewers(src))]Account has been suspended.") + src.visible_message("[icon2html(src,viewers(src))]" + span_warning("Account has been suspended.")) else - to_chat(usr, "[icon2html(src, usr.client)]Account not found.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_warning("Account not found.")) if("custom_order") var/t_purpose = sanitize(tgui_input_text(usr, "Enter purpose", "New purpose")) if (!t_purpose || !Adjacent(usr)) return @@ -157,7 +157,7 @@ price_list.Cut() if("reset_log") transaction_logs.Cut() - to_chat(usr, "[icon2html(src, usr.client)]Transaction log reset.") + to_chat(usr, "[icon2html(src, usr.client)]" + span_notice("Transaction log reset.")) updateDialog() @@ -203,7 +203,7 @@ return if (!linked_account) - usr.visible_message("[icon2html(src,viewers(src))]Unable to connect to linked account.") + usr.visible_message("[icon2html(src,viewers(src))]" + span_warning("Unable to connect to linked account.")) return // Access account for transaction @@ -216,13 +216,13 @@ D = attempt_account_access(I.associated_account_number, attempt_pin, 2) if(!D) - src.visible_message("[icon2html(src,viewers(src))]Unable to access account. Check security settings and try again.") + src.visible_message("[icon2html(src,viewers(src))]" + span_warning("Unable to access account. Check security settings and try again.")) else if(D.suspended) - src.visible_message("[icon2html(src,viewers(src))]Your account has been suspended.") + src.visible_message("[icon2html(src,viewers(src))]" + span_warning("Your account has been suspended.")) else if(transaction_amount > D.money) - src.visible_message("[icon2html(src,viewers(src))]Not enough funds.") + src.visible_message("[icon2html(src,viewers(src))]" + span_warning("Not enough funds.")) else // Transfer the money D.money -= transaction_amount @@ -265,7 +265,7 @@ // Access account for transaction if(check_account()) if(transaction_amount > E.worth) - src.visible_message("[icon2html(src,viewers(src))]Not enough funds.") + src.visible_message("[icon2html(src,viewers(src))]" + span_warning("Not enough funds.")) else // Transfer the money E.worth -= transaction_amount @@ -291,13 +291,13 @@ /obj/item/retail_scanner/proc/scan_item_price(var/obj/O) if(!istype(O)) return if(item_list.len > 10) - src.visible_message("[icon2html(src,viewers(src))]Only up to ten different items allowed per purchase.") + src.visible_message("[icon2html(src,viewers(src))]" + span_warning("Only up to ten different items allowed per purchase.")) return // First check if item has a valid price var/price = O.get_item_cost() if(isnull(price)) - src.visible_message("[icon2html(src,viewers(src))]Unable to find item in database.") + src.visible_message("[icon2html(src,viewers(src))]" + span_warning("Unable to find item in database.")) return // Call out item cost src.visible_message("[icon2html(src,viewers(src))]\A [O]: [price ? "[price] Thaler\s" : "free of charge"].") @@ -368,11 +368,11 @@ /obj/item/retail_scanner/proc/check_account() if (!linked_account) - usr.visible_message("[icon2html(src,viewers(src))]Unable to connect to linked account.") + usr.visible_message("[icon2html(src,viewers(src))]" + span_warning("Unable to connect to linked account.")) return 0 if(linked_account.suspended) - src.visible_message("[icon2html(src,viewers(src))]Connected account has been suspended.") + src.visible_message("[icon2html(src,viewers(src))]" + span_warning("Connected account has been suspended.")) return 0 return 1 @@ -380,7 +380,7 @@ /obj/item/retail_scanner/proc/transaction_complete() /// Visible confirmation playsound(src, 'sound/machines/chime.ogg', 25) - src.visible_message("[icon2html(src,viewers(src))]Transaction complete.") + src.visible_message("[icon2html(src,viewers(src))]" + span_notice("Transaction complete.")) flick("retail_approve", src) reset_memory() updateDialog() diff --git a/code/modules/economy/vending.dm b/code/modules/economy/vending.dm index d763512869a..6a4506a3624 100644 --- a/code/modules/economy/vending.dm +++ b/code/modules/economy/vending.dm @@ -270,7 +270,7 @@ GLOBAL_LIST_EMPTY(vending_products) // This is not a status display message, since it's something the character // themselves is meant to see BEFORE putting the money in - to_chat(usr, "[icon2html(cashmoney, user.client)] That is not enough money.") + to_chat(usr, "[icon2html(cashmoney, user.client)] " + span_warning("That is not enough money.")) return 0 if(istype(cashmoney, /obj/item/spacecash)) @@ -628,7 +628,7 @@ GLOBAL_LIST_EMPTY(vending_products) if(prob(1)) sleep(3) if(R.get_product(get_turf(src))) - visible_message("\The [src] clunks as it vends an additional item.") + visible_message(span_infoplain(span_bold("\The [src]") + " clunks as it vends an additional item.")) playsound(src, "sound/[vending_sound]", 100, 1, 1) GLOB.items_sold_shift_roundstat++ @@ -754,7 +754,7 @@ GLOBAL_LIST_EMPTY(vending_products) return for(var/mob/O in hearers(src, null)) - O.show_message(span_npc_say("\The [src] beeps, \"[message]\""),2) + O.show_message(span_npc_say(span_name("\The [src]") + " beeps, \"[message]\""),2) return /obj/machinery/vending/power_change() diff --git a/code/modules/emotes/emote_define.dm b/code/modules/emotes/emote_define.dm index 02c9590d842..b66653c553c 100644 --- a/code/modules/emotes/emote_define.dm +++ b/code/modules/emotes/emote_define.dm @@ -121,7 +121,7 @@ var/global/list/emotes_by_key if(target) raw_3p = replace_target_tokens(raw_3p, target) prefinal_3p = replace_user_tokens(raw_3p, user) - use_3p = span_emote("\The [user] [prefinal_3p]") + use_3p = span_emote(span_bold("\The [user]") + " [prefinal_3p]") var/use_radio = get_radio_message(user) if(use_radio) if(target) @@ -155,7 +155,7 @@ var/global/list/emotes_by_key . = replacetext(., "TARGET_THEM", target_gender.him) . = replacetext(., "TARGET_THEIR", target_gender.his) . = replacetext(., "TARGET_SELF", target_gender.himself) - . = replacetext(., "TARGET", "\the [target]") + . = replacetext(., "TARGET", span_bold("\the [target]")) /decl/emote/proc/replace_user_tokens(var/msg, var/atom/user) . = msg @@ -164,7 +164,7 @@ var/global/list/emotes_by_key . = replacetext(., "USER_THEM", user_gender.him) . = replacetext(., "USER_THEIR", user_gender.his) . = replacetext(., "USER_SELF", user_gender.himself) - . = replacetext(., "USER", "\the [user]") + . = replacetext(., "USER", span_bold("\the [user]")) /decl/emote/proc/get_radio_message(var/atom/user) if(emote_message_radio_synthetic && check_synthetic(user)) diff --git a/code/modules/emotes/emote_mob.dm b/code/modules/emotes/emote_mob.dm index cda3d9d8bdf..1fc894d5302 100644 --- a/code/modules/emotes/emote_mob.dm +++ b/code/modules/emotes/emote_mob.dm @@ -45,7 +45,7 @@ if(emote_datum.mob_can_use(src)) usable_emotes[emote_datum.key] = emote_datum last_emote_summary = english_list(sortAssoc(usable_emotes)) - to_chat(src,"Usable emotes: [last_emote_summary].") + to_chat(src,span_bold("Usable emotes:") + " [last_emote_summary].") return if(!can_emote(m_type)) @@ -95,7 +95,7 @@ if(use_emote.message_type == AUDIBLE_MESSAGE && is_muzzled()) var/muffle_message = use_emote.emote_message_muffled || "makes a muffled sound." - audible_message("\The [src] [muffle_message]", runemessage = "[muffle_message]") + audible_message(span_bold("\The [src]") + " [muffle_message]", runemessage = "[muffle_message]") return next_emote = world.time + use_emote.emote_delay @@ -158,7 +158,7 @@ nametext = html_encode(nametext) subtext = html_encode(subtext) // Store the player's name in a nice bold, naturalement - nametext = "[emoter]" + nametext = span_bold("[emoter]") return list("pretext" = pretext, "nametext" = nametext, "subtext" = subtext) /mob/proc/custom_emote(var/m_type = VISIBLE_MESSAGE, var/message, var/range = world.view) @@ -189,9 +189,9 @@ if(input) log_emote(message,src) //Log before we add junk if(usr && usr.client) - message = span_emote("[src] [input]") + message = span_emote(span_bold("[src]") + " [input]") else - message = span_npc_emote("[src] [input]") + message = span_npc_emote(span_bold("[src]") + " [input]") else return @@ -221,7 +221,7 @@ spawn(0) // It's possible that it could be deleted in the meantime, or that it runtimes. if(M) if(isobserver(M)) - message = span_emote("[src] ([ghost_follow_link(src, M)]) [input]") + message = span_emote(span_bold("[src]") + " ([ghost_follow_link(src, M)]) [input]") if(usr && usr.client && M && !(get_z(usr) == get_z(M))) message = span_multizsay("[message]") M.show_message(message, m_type) diff --git a/code/modules/events/comms_blackout.dm b/code/modules/events/comms_blackout.dm index add62ee5445..b6c12745af1 100644 --- a/code/modules/events/comms_blackout.dm +++ b/code/modules/events/comms_blackout.dm @@ -5,8 +5,8 @@ command_announcement.Announce("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT", new_sound = 'sound/misc/interference.ogg') else // AIs will always know if there's a comm blackout, rogue AIs could then lie about comm blackouts in the future while they shutdown comms for(var/mob/living/silicon/ai/A in player_list) - to_chat(A, "
    ") - to_chat(A, span_warning("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT")) - to_chat(A, "
    ") + to_chat(A, span_boldwarning("
    ")) + to_chat(A, span_boldwarning("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT")) + to_chat(A, span_boldwarning("
    ")) for(var/obj/machinery/telecomms/T in telecomms_list) T.emp_act(1) diff --git a/code/modules/events/communications_blackout.dm b/code/modules/events/communications_blackout.dm index 1c878358618..edfaf1e2e3b 100644 --- a/code/modules/events/communications_blackout.dm +++ b/code/modules/events/communications_blackout.dm @@ -7,9 +7,9 @@ "#4nd%;f4y6,>£%-BZZZZZZZT") for(var/mob/living/silicon/ai/A in player_list) //AIs are always aware of communication blackouts. - to_chat(A, "
    ") - to_chat(A, span_warning("[alert]")) - to_chat(A, "
    ") + to_chat(A, span_boldwarning("
    ")) + to_chat(A, span_boldwarning("[alert]")) + to_chat(A, span_boldwarning("
    ")) if(prob(30)) //most of the time, we don't want an announcement, so as to allow AIs to fake blackouts. command_announcement.Announce(alert, new_sound = sound('sound/misc/interference.ogg', volume=25)) diff --git a/code/modules/events/event_manager.dm b/code/modules/events/event_manager.dm index 9a03be5ab20..83464c50751 100644 --- a/code/modules/events/event_manager.dm +++ b/code/modules/events/event_manager.dm @@ -28,7 +28,7 @@ html += "
    " html += "

    Available [severity_to_string[selected_event_container.severity]] Events (queued & running events will not be displayed)

    " html += "" - html += "Name Weight MinWeight MaxWeight OneShot Enabled CurrWeight Remove" + html += "Name Weight MinWeight MaxWeight OneShot Enabled " + span_alert("CurrWeight") + " Remove" var/list/active_with_role = number_active_with_role() for(var/datum/event_meta/EM in selected_event_container.available_events) html += "" @@ -38,7 +38,7 @@ html += "[EM.max_weight]" html += "[EM.one_shot]" html += "[EM.enabled]" - html += "[selected_event_container.get_weight(EM, active_with_role)]" + html += "" + span_alert("[selected_event_container.get_weight(EM, active_with_role)]") + "" html += "Remove" html += "" html += "" diff --git a/code/modules/events/meteor_strike_vr.dm b/code/modules/events/meteor_strike_vr.dm index ebd5c498f5d..fde70c8d5b3 100644 --- a/code/modules/events/meteor_strike_vr.dm +++ b/code/modules/events/meteor_strike_vr.dm @@ -103,7 +103,7 @@ if(!do_after(M, P.digspeed*3)) return - M.visible_message("[M] breaks apart \the [src].", "You break apart \the [src].") + M.visible_message(span_warning("[M] breaks apart \the [src]."), span_warning("You break apart \the [src].")) for(var/obj/O in src) O.forceMove(get_turf(src)) qdel(src) diff --git a/code/modules/events/money_spam.dm b/code/modules/events/money_spam.dm index 242aaa08309..b03301477c6 100644 --- a/code/modules/events/money_spam.dm +++ b/code/modules/events/money_spam.dm @@ -110,11 +110,11 @@ for(var/mob/living/silicon/ai/ai in mob_list) // Allows other AIs to intercept the message but the AI won't intercept their own message. if(ai.aiPDA != P && ai.aiPDA != src) - ai.show_message("Intercepted message from [sender] (Unknown / spam?) to [P:owner]: [message]") + ai.show_message(span_italics("Intercepted message from [sender] (Unknown / spam?) to [P:owner]: [message]")) */ //Commented out because we don't send messages like this anymore. Instead it will just popup in their chat window. //P.tnote += "← From [sender] (Unknown / spam?):
    [message]
    " var/datum/data/pda/app/messenger/PM = P.find_program(/datum/data/pda/app/messenger) - PM.notify("Message from [sender] (Unknown / spam?), \"[message]\" (Unable to Reply)", 0) + PM.notify(span_bold("Message from [sender] (Unknown / spam?), ") + "\"[message]\" (Unable to Reply)", 0) diff --git a/code/modules/examine/examine.dm b/code/modules/examine/examine.dm index 7131536d733..16f1b305aba 100644 --- a/code/modules/examine/examine.dm +++ b/code/modules/examine/examine.dm @@ -5,7 +5,6 @@ This means that this file can be unchecked, along with the other examine files, and can be removed entirely with no effort. */ -#define EXAMINE_PANEL_PADDING " " /atom/ var/description_info = null //Helpful blue text. @@ -34,7 +33,7 @@ // Quickly adds the boilerplate code to add an image and padding for the image. /proc/desc_panel_image(var/icon_state) - return "[bicon(description_icons[icon_state])][EXAMINE_PANEL_PADDING]" + return "[icon2html(description_icons[icon_state], usr)] " /mob/living/get_description_fluff() if(flavor_text) //Get flavor text for the green text. @@ -50,50 +49,16 @@ /client/var/description_holders[0] /client/proc/update_description_holders(atom/A, update_antag_info=0) + examine_icon = null description_holders["info"] = A.get_description_info() description_holders["fluff"] = A.get_description_fluff() description_holders["antag"] = (update_antag_info)? A.get_description_antag() : "" description_holders["interactions"] = A.get_description_interaction() description_holders["name"] = "[A.name]" - description_holders["icon"] = "[icon2html(A.examine_icon(),src)]" + description_holders["icon"] = A description_holders["desc"] = A.desc -/mob/Stat() - . = ..() - if(client && statpanel("Examine")) - var/description_holders = client.description_holders - stat(null,"[description_holders["icon"]] [description_holders["name"]]") //The name, written in big letters. - stat(null,"[description_holders["desc"]]") //the default examine text. - - - var/color_i = "#084B8A" - var/color_f = "#298A08" - var/color_a = "#8A0808" -/* - The infowindow colours are set in code\modules\vchat\js\vchat.js file - Unfortunately, I cannot think of a way to do this elegantly where there's this central define that we can easily track. - As of 2023/08/05 13:10, the lightmode colour for vchat tabBackgroundColor is "none", this is also defined in interface\skin.dmf . - The darkmode colour for vchat tabBackgroundColor is "#272727". - Since it's possible that one day we'll have option to modify the user's preferred tabBackgroundColor - I will assume the lightmode colour will be left untouched - therefore, we are checking for none. -*/ - if(!(winget(src, "infowindow", "background-color") == "none")) - color_i = "#709ec9d8" - color_f = "#76d357" - color_a = "#c94d4d" - - - if(description_holders["info"]) - stat(null,"[description_holders["info"]]") //Blue, informative text. - if(description_holders["interactions"]) - for(var/line in description_holders["interactions"]) - stat(null, "[line]") - if(description_holders["fluff"]) - stat(null,"[description_holders["fluff"]]") //Yellow, fluff-related text. - if(description_holders["antag"]) - stat(null,"[description_holders["antag"]]") //Red, malicious antag-related text - //override examinate verb to update description holders when things are examined //mob verbs are faster than object verbs. See http://www.byond.com/forum/?post=1326139&page=2#comment8198716 for why this isn't atom/verb/examine() /mob/verb/examinate(atom/A as mob|obj|turf in _validate_atom(A)) @@ -122,6 +87,7 @@ if(client) var/is_antag = ((mind && mind.special_role) || isobserver(src)) //ghosts don't have minds client.update_description_holders(A, is_antag) + SSstatpanels.set_examine_tab(client) /mob/verb/mob_examine() @@ -198,5 +164,3 @@ results = list("You were unable to examine that. Tell a developer!") to_chat(src, jointext(results, "
    ")) update_examine_panel(B) - -#undef EXAMINE_PANEL_PADDING diff --git a/code/modules/flufftext/Dreaming.dm b/code/modules/flufftext/Dreaming.dm index 1881f915610..24a297954ff 100644 --- a/code/modules/flufftext/Dreaming.dm +++ b/code/modules/flufftext/Dreaming.dm @@ -27,7 +27,7 @@ var/list/dreams = list( spawn(0) for(var/i = rand(1,4),i > 0, i--) - to_chat(src, span_blue("... [pick(dreams)] ...")) + to_chat(src, span_infoplain(span_blue(span_italics("... [pick(dreams)] ...")))) sleep(rand(40,70)) if(paralysis <= 0) dreaming = 0 diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 9bda1891f49..cbf879c03d6 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -244,8 +244,8 @@ Gunshots/explosions/opening doors/less rare audio (done) /obj/effect/fake_attacker/attackby(var/obj/item/P as obj, mob/user as mob) step_away(src,my_target,2) for(var/mob/M in oviewers(world.view,my_target)) - to_chat(M, span_red("[my_target] flails around wildly.")) - my_target.show_message(span_red("[src] has been attacked by [my_target] "), 1) //Lazy. + to_chat(M, span_bolddanger("[my_target] flails around wildly.")) + my_target.show_message(span_bolddanger("[src] has been attacked by [my_target] "), 1) //Lazy. src.health -= P.force @@ -257,7 +257,7 @@ Gunshots/explosions/opening doors/less rare audio (done) step_away(src,my_target,2) if(prob(30)) for(var/mob/O in oviewers(world.view , my_target)) - to_chat(O, span_red("[my_target] stumbles around.")) + to_chat(O, span_bolddanger("[my_target] stumbles around.")) /obj/effect/fake_attacker/New() ..() @@ -304,7 +304,7 @@ Gunshots/explosions/opening doors/less rare audio (done) if(prob(15)) if(weapon_name) my_target << sound(pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg')) - my_target.show_message(span_red("[my_target] has been attacked with [weapon_name] by [src.name]!"), 1) + my_target.show_message(span_bolddanger("[my_target] has been attacked with [weapon_name] by [src.name]!"), 1) my_target.halloss += 8 if(prob(20)) my_target.eye_blurry += 3 if(prob(33)) @@ -312,7 +312,7 @@ Gunshots/explosions/opening doors/less rare audio (done) fake_blood(my_target) else my_target << sound(pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg')) - my_target.show_message(span_red("[src.name] has punched [my_target]!"), 1) + my_target.show_message(span_bolddanger("[src.name] has punched [my_target]!"), 1) my_target.halloss += 4 if(prob(33)) if(!locate(/obj/effect/overlay) in my_target.loc) diff --git a/code/modules/flufftext/TextFilters.dm b/code/modules/flufftext/TextFilters.dm index a54e66bb022..1badc53379e 100644 --- a/code/modules/flufftext/TextFilters.dm +++ b/code/modules/flufftext/TextFilters.dm @@ -18,7 +18,7 @@ //if(2,4,6,15) newletter="[uppertext(newletter)]" if(2,4,6,9) newletter="[uppertext(newletter)]" if(7) newletter+="'" - //if(9,10) newletter="[newletter]" + //if(9,10) newletter=span_bold("[newletter]") //if(11,12) newletter="[newletter]" //if(13) newletter="[newletter]" newphrase+="[newletter]";counter-=1 diff --git a/code/modules/food/drinkingglass/extras.dm b/code/modules/food/drinkingglass/extras.dm index c565b98868f..afcd7044a3e 100644 --- a/code/modules/food/drinkingglass/extras.dm +++ b/code/modules/food/drinkingglass/extras.dm @@ -7,13 +7,13 @@ extras += GE user.remove_from_mob(GE) GE.loc = src - to_chat(user, "You add \the [GE] to \the [src].") + to_chat(user, span_notice("You add \the [GE] to \the [src].")) update_icon() else - to_chat(user, "There's no space to put \the [GE] on \the [src]!") + to_chat(user, span_warning("There's no space to put \the [GE] on \the [src]!")) else if(istype(I, /obj/item/reagent_containers/food/snacks/fruit_slice)) if(!rim_pos) - to_chat(user, "There's no space to put \the [I] on \the [src]!") + to_chat(user, span_warning("There's no space to put \the [I] on \the [src]!")) return var/obj/item/reagent_containers/food/snacks/fruit_slice/FS = I extras += FS @@ -21,7 +21,7 @@ FS.pixel_x = 0 // Reset its pixel offsets so the icons work! FS.pixel_y = 0 FS.loc = src - to_chat(user, "You add \the [FS] to \the [src].") + to_chat(user, span_notice("You add \the [FS] to \the [src].")) update_icon() else return ..() @@ -31,7 +31,7 @@ return ..() if(!extras.len) - to_chat(user, "There's nothing on the glass to remove!") + to_chat(user, span_warning("There's nothing on the glass to remove!")) return var/choice = tgui_input_list(user, "What would you like to remove from the glass?", "Removal Choice", extras) @@ -39,10 +39,10 @@ return if(user.put_in_active_hand(choice)) - to_chat(user, "You remove \the [choice] from \the [src].") + to_chat(user, span_notice("You remove \the [choice] from \the [src].")) extras -= choice else - to_chat(user, "Something went wrong, please try again.") + to_chat(user, span_warning("Something went wrong, please try again.")) update_icon() @@ -95,13 +95,13 @@ to_chat(user, span_warning("There's not enough of [victim] left to sip on!")) return - user.visible_message("[user] starts sipping on [victim] with [src]!", "You start sipping on [victim] with [src].") + user.visible_message(span_infoplain(span_bold("[user]") + " starts sipping on [victim] with [src]!"), span_info("You start sipping on [victim] with [src].")) if(!do_after(user, 3 SECONDS, victim, exclusive = TASK_ALL_EXCLUSIVE)) return - user.visible_message("[user] sips some of [victim] with [src]!", "You take a sip of [victim] with [src]. Yum!") + user.visible_message(span_infoplain(span_bold("[user]") + " sips some of [victim] with [src]!"), span_info("You take a sip of [victim] with [src]. Yum!")) if(victim.vore_taste) - to_chat(user, "[victim] tastes like... [victim.vore_taste]!") + to_chat(user, span_infoplain(span_bold("[victim]") + " tastes like... [victim.vore_taste]!")) victim.apply_damage(5, used_weapon = "straw") diff --git a/code/modules/food/food/drinks.dm b/code/modules/food/food/drinks.dm index 368a89488c8..50216ed9276 100644 --- a/code/modules/food/food/drinks.dm +++ b/code/modules/food/food/drinks.dm @@ -96,6 +96,9 @@ if(!F.can_be_drop_prey || !F.food_vore) continue + if(isanimal(M) && !F.allowmobvore && !M.ckey) //If the one doing the eating is a simple mob controlled by AI, check mob vore prefs + continue + var/do_nom = FALSE if(!reagents.total_volume) diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm index 5628effdcf0..96c14683b05 100644 --- a/code/modules/food/food/snacks.dm +++ b/code/modules/food/food/snacks.dm @@ -320,7 +320,7 @@ user.visible_message(span_notice("\The [user] crudely slices \the [src] with [W]!"), span_notice("You crudely slice \the [src] with your [W]!")) slices_lost = rand(1,min(1,round(slices_num/2))) else - user.visible_message(span_notice("\The [user] slices \the [src]!"), span_notice("You slice \the [src]!")) + user.visible_message(span_notice(span_bold("\The [user]") + " slices \the [src]!"), span_notice("You slice \the [src]!")) var/reagents_per_slice = reagents.total_volume/slices_num for(var/i=1 to (slices_num-slices_lost)) @@ -390,7 +390,7 @@ /obj/item/reagent_containers/food/snacks/attack_generic(var/mob/living/user) if(!isanimal(user) && !isalien(user)) return - user.visible_message("[user] nibbles away at \the [src].","You nibble away at \the [src].") + user.visible_message(span_infoplain(span_bold("[user]") + " nibbles away at \the [src]."),span_info("You nibble away at \the [src].")) bitecount++ if(reagents) reagents.trans_to_mob(user, bitesize, CHEM_INGEST) @@ -1862,7 +1862,7 @@ Unwrap(user) /obj/item/reagent_containers/food/snacks/monkeycube/proc/Expand() - src.visible_message("\The [src] expands!") + src.visible_message(span_infoplain(span_bold("\The [src]") + " expands!")) var/mob/living/carbon/human/H = new(get_turf(src)) H.set_species(monkey_type) H.real_name = H.species.get_random_name() diff --git a/code/modules/food/food/snacks_vr.dm b/code/modules/food/food/snacks_vr.dm index 7233a93e1ee..fbc04990f84 100644 --- a/code/modules/food/food/snacks_vr.dm +++ b/code/modules/food/food/snacks_vr.dm @@ -467,7 +467,7 @@ . = ..() /obj/item/reagent_containers/food/snacks/cube/proc/Expand() - src.visible_message("\The [src] expands!") + src.visible_message(span_infoplain(span_bold("\The [src]") + " expands!")) new food_type(get_turf(src)) qdel(src) diff --git a/code/modules/food/food/superfoods.dm b/code/modules/food/food/superfoods.dm index c121e4a97a2..74f94c55759 100644 --- a/code/modules/food/food/superfoods.dm +++ b/code/modules/food/food/superfoods.dm @@ -299,11 +299,11 @@ /obj/structure/theonepizza/attackby(var/obj/item/W, var/mob/living/user) if(istype(W,/obj/item/material/knife)) - user.visible_message("\The [user] starts to slowly cut through The One Pizza.", span_notice("You start to slowly cut through The One Pizza.")) + user.visible_message(span_infoplain(span_bold("\The [user]") + " starts to slowly cut through The One Pizza."), span_notice("You start to slowly cut through The One Pizza.")) if(do_after(user, slicetime, exclusive = TASK_USER_EXCLUSIVE)) if(!src) return // We got disappeared already - user.visible_message("\The [user] successfully cuts The One Pizza.", span_notice("You successfully cut The One Pizza.")) + user.visible_message(span_infoplain(span_bold("\The [user]") + " successfully cuts The One Pizza."), span_notice("You successfully cut The One Pizza.")) for(var/slicetype in slicelist) new slicetype(src.loc) qdel(src) diff --git a/code/modules/food/kitchen/cooking_machines/_appliance.dm b/code/modules/food/kitchen/cooking_machines/_appliance.dm index c16788de463..5a37e9fb7bd 100644 --- a/code/modules/food/kitchen/cooking_machines/_appliance.dm +++ b/code/modules/food/kitchen/cooking_machines/_appliance.dm @@ -116,11 +116,11 @@ if (progress < 0.75) return span_notice("It's cooking away nicely.") if (progress < 1) - return span_notice("It's almost ready!") + return span_boldnotice("It's almost ready!") var/half_overcook = (CI.overcook_mult - 1)*0.5 if (progress < 1+half_overcook) - return span_soghun("It is done !") + return span_soghun(span_bold("It is done!")) if (progress < CI.overcook_mult) return span_warning("It looks overcooked, get it out!") else @@ -317,7 +317,7 @@ CI = new /datum/cooking_item/(CC) I.forceMove(src) cooking_objs.Add(CI) - user.visible_message("\The [user] puts \the [I] into \the [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " puts \the [I] into \the [src].")) if (CC.check_contents() == 0)//If we're just putting an empty container in, then dont start any processing. return TRUE else @@ -331,7 +331,7 @@ CI.combine_target = selected_option // We can actually start cooking now. - user.visible_message("\The [user] puts \the [I] into \the [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " puts \the [I] into \the [src].")) get_cooking_work(CI) cooking = TRUE @@ -432,7 +432,7 @@ /obj/machinery/appliance/proc/finish_cooking(var/datum/cooking_item/CI) - src.visible_message("\The [src] pings!") + src.visible_message(span_infoplain(span_bold("\The [src]") + " pings!")) if(cooked_sound) playsound(get_turf(src), cooked_sound, 50, 1) //Check recipes first, a valid recipe overrides other options @@ -668,7 +668,7 @@ if(user) user.visible_message(span_notice("\The [user] remove \the [thing] from \the [src].")) else - src.visible_message("\The [src] pings as it automatically ejects its contents!") + src.visible_message(span_infoplain(span_bold("\The [src]") + " pings as it automatically ejects its contents!")) if(cooked_sound) playsound(get_turf(src), cooked_sound, 50, 1) @@ -812,4 +812,4 @@ return food_safety = !food_safety - to_chat(usr, "You flip \the [src]'s safe mode switch. Safe mode is now [food_safety ? "on" : "off"].") + to_chat(usr, span_notice("You flip \the [src]'s safe mode switch. Safe mode is now [food_safety ? "on" : "off"].")) diff --git a/code/modules/food/kitchen/cooking_machines/oven.dm b/code/modules/food/kitchen/cooking_machines/oven.dm index 6efbf8afc76..968ed06e2ce 100644 --- a/code/modules/food/kitchen/cooking_machines/oven.dm +++ b/code/modules/food/kitchen/cooking_machines/oven.dm @@ -148,7 +148,7 @@ /obj/machinery/appliance/cooker/oven/finish_cooking(var/datum/cooking_item/CI) if(CI.combine_target) CI.result_type = 3//Combination type. We're making something out of our ingredients - visible_message("\The [src] pings!") + visible_message(span_infoplain(span_bold("\The [src]") + " pings!")) combination_cook(CI) return else diff --git a/code/modules/food/kitchen/icecream.dm b/code/modules/food/kitchen/icecream.dm index a80d8b76ca1..6d48a6e6988 100644 --- a/code/modules/food/kitchen/icecream.dm +++ b/code/modules/food/kitchen/icecream.dm @@ -67,17 +67,17 @@ /obj/machinery/icecream_vat/interact(mob/user as mob) var/dat - dat += "ICECREAM
    " - dat += "Dispensing: [flavour_name] icecream

    " - dat += "Vanilla icecream: Select Make x5 [product_types[ICECREAM_VANILLA]] scoops left. (Ingredients: milk, ice)
    " - dat += "Strawberry icecream: Select Make x5 [product_types[ICECREAM_STRAWBERRY]] dollops left. (Ingredients: milk, ice, berry juice)
    " - dat += "Chocolate icecream: Select Make x5 [product_types[ICECREAM_CHOCOLATE]] dollops left. (Ingredients: milk, ice, coco powder)
    " - dat += "Blue icecream: Select Make x5 [product_types[ICECREAM_BLUE]] dollops left. (Ingredients: milk, ice, singulo)
    " - dat += "
    CONES
    " - dat += "Waffle cones: Dispense Make x5 [product_types[CONE_WAFFLE]] cones left. (Ingredients: flour, sugar)
    " - dat += "Chocolate cones: Dispense Make x5 [product_types[CONE_CHOC]] cones left. (Ingredients: flour, sugar, coco powder)
    " + dat += span_bold("ICECREAM") + "
    " + dat += span_bold("Dispensing: [flavour_name] icecream ") + "

    " + dat += span_bold("Vanilla icecream:") + " " + span_bold("Select") + " " + span_bold("Make") + " " + span_bold("x5") + " [product_types[ICECREAM_VANILLA]] scoops left. (Ingredients: milk, ice)
    " + dat += span_bold("Strawberry icecream:") + " " + span_bold("Select") + " " + span_bold("Make") + " " + span_bold("x5") + " [product_types[ICECREAM_STRAWBERRY]] dollops left. (Ingredients: milk, ice, berry juice)
    " + dat += span_bold("Chocolate icecream:") + " " + span_bold("Select") + " " + span_bold("Make") + " " + span_bold("x5") + " [product_types[ICECREAM_CHOCOLATE]] dollops left. (Ingredients: milk, ice, coco powder)
    " + dat += span_bold("Blue icecream:") + " " + span_bold("Select") + " " + span_bold("Make") + " " + span_bold("x5") + " [product_types[ICECREAM_BLUE]] dollops left. (Ingredients: milk, ice, singulo)
    " + dat += "
    " + span_bold("CONES") + "
    " + dat += span_bold("Waffle cones:") + " " + span_bold("Dispense") + " " + span_bold("Make") + " " + span_bold("x5") + " [product_types[CONE_WAFFLE]] cones left. (Ingredients: flour, sugar)
    " + dat += span_bold("Chocolate cones:") + " " + span_bold("Dispense") + " " + span_bold("Make") + " " + span_bold("x5") + " [product_types[CONE_CHOC]] cones left. (Ingredients: flour, sugar, coco powder)
    " dat += "
    " - dat += "VAT CONTENT
    " + dat += span_bold("VAT CONTENT") + "
    " for(var/datum/reagent/R in reagents.reagent_list) dat += "[R.name]: [R.volume]" dat += "Purge
    " @@ -92,7 +92,7 @@ var/obj/item/reagent_containers/food/snacks/icecream/I = O if(!I.ice_creamed) if(product_types[dispense_flavour] > 0) - src.visible_message("[icon2html(src,viewers(src))] [user] scoops delicious [flavour_name] icecream into [I].") + src.visible_message("[icon2html(src,viewers(src))] " + span_info("[user] scoops delicious [flavour_name] icecream into [I].")) product_types[dispense_flavour] -= 1 I.add_ice_cream(flavour_name) // if(beaker) diff --git a/code/modules/food/kitchen/microwave.dm b/code/modules/food/kitchen/microwave.dm index 9eeed7816ab..41a01ee608e 100644 --- a/code/modules/food/kitchen/microwave.dm +++ b/code/modules/food/kitchen/microwave.dm @@ -79,24 +79,24 @@ if(src.broken > 0) if(src.broken == 2 && O.has_tool_quality(TOOL_SCREWDRIVER)) // If it's broken and they're using a screwdriver user.visible_message( \ - "\The [user] starts to fix part of the microwave.", \ + span_infoplain(span_bold("\The [user]") + " starts to fix part of the microwave."), \ span_notice("You start to fix part of the microwave.") \ ) playsound(src, O.usesound, 50, 1) if (do_after(user,20 * O.toolspeed)) user.visible_message( \ - "\The [user] fixes part of the microwave.", \ + span_infoplain(span_bold("\The [user]") + " fixes part of the microwave."), \ span_notice("You have fixed part of the microwave.") \ ) src.broken = 1 // Fix it a bit else if(src.broken == 1 && O.has_tool_quality(TOOL_WRENCH)) // If it's broken and they're doing the wrench user.visible_message( \ - "\The [user] starts to fix part of the microwave.", \ + span_infoplain(span_bold("\The [user]") + " starts to fix part of the microwave."), \ span_notice("You start to fix part of the microwave.") \ ) if (do_after(user,20 * O.toolspeed)) user.visible_message( \ - "\The [user] fixes the microwave.", \ + span_infoplain(span_bold("\The [user]") + " fixes the microwave."), \ span_notice("You have fixed the microwave.") \ ) src.icon_state = "mw" @@ -110,7 +110,7 @@ else if(src.dirty==100) // The microwave is all dirty so can't be used! if(istype(O, /obj/item/reagent_containers/spray/cleaner) || istype(O, /obj/item/soap)) // If they're trying to clean it then let them user.visible_message( \ - "\The [user] starts to clean the microwave.", \ + span_infoplain(span_bold("\The [user]") + " starts to clean the microwave."), \ span_notice("You start to clean the microwave.") \ ) if (do_after(user,20)) @@ -357,12 +357,12 @@ for (var/O in items_counts) var/N = items_counts[O] if (!(O in items_measures)) - dat += {"[capitalize(O)]: [N] [lowertext(O)]\s
    "} + dat += span_bold("[capitalize(O)]:") + " [N] [lowertext(O)]\s
    " else if (N==1) - dat += {"[capitalize(O)]: [N] [items_measures[O]]
    "} + dat += span_bold("[capitalize(O)]:") + " [N] [items_measures[O]]
    " else - dat += {"[capitalize(O)]: [N] [items_measures_p[O]]
    "} + dat += span_bold("[capitalize(O)]:") + " [N] [items_measures_p[O]]
    " for (var/datum/reagent/R in reagents.reagent_list) var/display_name = R.name @@ -370,12 +370,12 @@ display_name = "Hotsauce" if (R.id == "frostoil") display_name = "Coldsauce" - dat += {"[display_name]: [R.volume] unit\s
    "} + dat += span_bold("[display_name]:") + " [R.volume] unit\s
    " if (items_counts.len==0 && reagents.reagent_list.len==0) - dat = {"The microwave is empty
    "} + dat = span_bold("The microwave is empty") + "
    " else - dat = {"Ingredients:
    [dat]"} + dat = span_bold("Ingredients:") + "
    [dat]" dat += {"

    \ Turn on!
    \
    Eject ingredients!
    \ diff --git a/code/modules/gamemaster/event2/events/everyone/comms_blackout.dm b/code/modules/gamemaster/event2/events/everyone/comms_blackout.dm index 2a11e1172d8..48d71fe4e6d 100644 --- a/code/modules/gamemaster/event2/events/everyone/comms_blackout.dm +++ b/code/modules/gamemaster/event2/events/everyone/comms_blackout.dm @@ -22,9 +22,9 @@ command_announcement.Announce(alert, new_sound = 'sound/misc/interference.ogg') // AIs will always know if there's a comm blackout, rogue AIs could then lie about comm blackouts in the future while they shutdown comms for(var/mob/living/silicon/ai/A in player_list) - to_chat(A, "
    ") - to_chat(A, span_warning("[alert]")) - to_chat(A, "
    ") + to_chat(A, span_boldwarning("
    ")) + to_chat(A, span_boldwarning("[alert]")) + to_chat(A, span_boldwarning("
    ")) /datum/event2/event/comms_blackout/start() if(prob(50)) diff --git a/code/modules/gamemaster/event2/events/everyone/pda_spam.dm b/code/modules/gamemaster/event2/events/everyone/pda_spam.dm index 8079793f773..06be920f9fc 100644 --- a/code/modules/gamemaster/event2/events/everyone/pda_spam.dm +++ b/code/modules/gamemaster/event2/events/everyone/pda_spam.dm @@ -132,7 +132,7 @@ /datum/event2/event/pda_spam/proc/send_spam(obj/item/pda/P, sender, message) last_spam_time = world.time var/datum/data/pda/app/messenger/PM = P.find_program(/datum/data/pda/app/messenger) - PM.notify("Message from [sender] (Unknown / spam?), \"[message]\" (Unable to Reply)", 0) + PM.notify(span_bold("Message from [sender] (Unknown / spam?), ") + "\"[message]\" (Unable to Reply)", 0) if(spam_debug) log_debug("PDA Spam event sent spam to \the [P].") diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index 66c0cd0379c..448ea34b5f3 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -59,7 +59,7 @@ for(var/datum/playingcard/P in H.cards) cards += P qdel(H) - to_chat(user,"You place your cards on the bottom of \the [src].") + to_chat(user,span_notice("You place your cards on the bottom of \the [src].")) return else to_chat(user,span_warning("You can't mix cards from other decks!")) @@ -111,7 +111,7 @@ cards -= P H.parentdeck = src H.update_icon() - user.visible_message("\The [user] draws a card.") + user.visible_message(span_infoplain(span_bold("\The [user]") + " draws a card.")) to_chat(user,span_notice("It's the [P].")) /obj/item/deck/verb/deal_card() @@ -176,9 +176,9 @@ H.update_icon() if(user==target) var/datum/gender/TU = gender_datums[user.get_visible_gender()] - user.visible_message("\The [user] deals [dcard] card(s) to [TU.himself].") + user.visible_message(span_notice("\The [user] deals [dcard] card(s) to [TU.himself].")) else - user.visible_message("\The [user] deals [dcard] card(s) to \the [target].") + user.visible_message(span_notice("\The [user] deals [dcard] card(s) to \the [target].")) H.throw_at(get_step(target,target.dir),10,1,H) @@ -186,7 +186,7 @@ if(cards.len == 1 && istype(O, /obj/item/pen)) var/datum/playingcard/P = cards[1] if(P.name != "Blank Card") - to_chat(user,"You cannot write on that card.") + to_chat(user,span_notice("You cannot write on that card.")) return var/cardtext = sanitize(tgui_input_text(user, "What do you wish to write on the card?", "Card Editing", null, MAX_PAPER_MESSAGE_LEN), MAX_PAPER_MESSAGE_LEN) if(!cardtext) @@ -206,7 +206,7 @@ H.update_icon() return else - to_chat(user,"You cannot mix cards from other decks!") + to_chat(user,span_notice("You cannot mix cards from other decks!")) return ..() @@ -231,7 +231,7 @@ newcards += P cards -= P cards = newcards - user.visible_message("\The [user] shuffles [src].") + user.visible_message(span_notice("\The [user] shuffles [src].")) playsound(src, 'sound/items/cardshuffle.ogg', 50, 1) cooldown = world.time else @@ -288,7 +288,7 @@ /obj/item/pack/attack_self(var/mob/user as mob) - user.visible_message("[user] rips open \the [src]!") + user.visible_message(span_danger("[user] rips open \the [src]!")) var/obj/item/hand/H = new() H.cards += cards @@ -342,7 +342,7 @@ H.parentdeck = src.parentdeck H.update_icon() src.update_icon() - usr.visible_message("\The [usr] plays \the [discarding].") + usr.visible_message(span_notice("\The [usr] plays \the [discarding].")) H.loc = get_turf(usr) H.Move(get_step(usr,usr.dir)) @@ -352,7 +352,7 @@ /obj/item/hand/attack_self(var/mob/user as mob) concealed = !concealed update_icon() - user.visible_message("\The [user] [concealed ? "conceals" : "reveals"] their hand.") + user.visible_message(span_notice("\The [user] [concealed ? "conceals" : "reveals"] their hand.")) /obj/item/hand/examine(mob/user) . = ..() diff --git a/code/modules/ghosttrap/trap.dm b/code/modules/ghosttrap/trap.dm index 71697ac5f66..f587fcc6792 100644 --- a/code/modules/ghosttrap/trap.dm +++ b/code/modules/ghosttrap/trap.dm @@ -26,12 +26,12 @@ var/list/ghost_traps if(!istype(candidate) || !candidate.client || !candidate.ckey) return 0 if(!candidate.MayRespawn()) - to_chat(candidate, "You have made use of the AntagHUD and hence cannot enter play as \a [object].") + to_chat(candidate, span_infoplain("You have made use of the AntagHUD and hence cannot enter play as \a [object].")) return 0 if(islist(ban_checks)) for(var/bantype in ban_checks) if(jobban_isbanned(candidate, "[bantype]")) - to_chat(candidate, "You are banned from one or more required roles and hence cannot enter play as \a [object].") + to_chat(candidate, span_infoplain("You are banned from one or more required roles and hence cannot enter play as \a [object].")) return 0 return 1 @@ -78,12 +78,12 @@ var/list/ghost_traps // Fluff! /datum/ghosttrap/proc/welcome_candidate(var/mob/target) - to_chat(target, "You are a positronic brain, brought into existence on [station_name()].") - to_chat(target, "As a synthetic intelligence, you answer to all crewmembers, as well as the AI.") - to_chat(target, "Remember, the purpose of your existence is to serve the crew and the station. Above all else, do no harm.") - to_chat(target, "Use say #b to speak to other artificial intelligences.") + to_chat(target, span_infoplain(span_bold("You are a positronic brain, brought into existence on [station_name()]."))) + to_chat(target, span_infoplain(span_bold("As a synthetic intelligence, you answer to all crewmembers, as well as the AI."))) + to_chat(target, span_infoplain(span_bold("Remember, the purpose of your existence is to serve the crew and the station. Above all else, do no harm."))) + to_chat(target, span_infoplain(span_bold("Use say #b to speak to other artificial intelligences."))) var/turf/T = get_turf(target) - T.visible_message("\The [src] chimes quietly.") + T.visible_message(span_infoplain(span_bold("\The [src]") + " chimes quietly.")) var/obj/item/mmi/digital/posibrain/P = target.loc if(!istype(P)) //wat return @@ -107,8 +107,8 @@ var/list/ghost_traps ghost_trap_role = "Plant" /datum/ghosttrap/plant/welcome_candidate(var/mob/target) - to_chat(target, span_alium("You awaken slowly, stirring into sluggish motion as the air caresses you.")) + to_chat(target, span_infoplain(span_alium(span_bold("You awaken slowly, stirring into sluggish motion as the air caresses you.")))) // This is a hack, replace with some kind of species blurb proc. if(istype(target,/mob/living/carbon/alien/diona)) - to_chat(target, "You are \a [target], one of a race of drifting interstellar plantlike creatures that sometimes share their seeds with human traders.") - to_chat(target, "Too much darkness will send you into shock and starve you, but light will help you heal.") + to_chat(target, span_infoplain(span_bold("You are \a [target], one of a race of drifting interstellar plantlike creatures that sometimes share their seeds with human traders."))) + to_chat(target, span_infoplain(span_bold("Too much darkness will send you into shock and starve you, but light will help you heal."))) diff --git a/code/modules/holodeck/HolodeckControl.dm b/code/modules/holodeck/HolodeckControl.dm index 9810569fa2f..aeb36adb320 100644 --- a/code/modules/holodeck/HolodeckControl.dm +++ b/code/modules/holodeck/HolodeckControl.dm @@ -300,7 +300,7 @@ if(world.time < (last_change + 15))//To prevent super-spam clicking, reduced process size and annoyance -Sieve return 0 for(var/mob/M in range(3,src)) - M.show_message("ERROR. Recalibrating projection apparatus.") + M.show_message(span_warningplain(span_bold("ERROR. Recalibrating projection apparatus."))) last_change = world.time return 0 @@ -371,7 +371,7 @@ if(world.time < (last_gravity_change + 15))//To prevent super-spam clicking return for(var/mob/M in range(3,src)) - M.show_message("ERROR. Recalibrating gravity field.") + M.show_message(span_warningplain(span_bold("ERROR. Recalibrating gravity field."))) last_change = world.time return diff --git a/code/modules/holodeck/HolodeckObjects.dm b/code/modules/holodeck/HolodeckObjects.dm index 282992d7b20..a9b195e789a 100644 --- a/code/modules/holodeck/HolodeckObjects.dm +++ b/code/modules/holodeck/HolodeckObjects.dm @@ -154,7 +154,7 @@ var/damage = rand(0, 9) if(!damage) playsound(target, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - target.visible_message(span_red("[user] has attempted to punch [target]!")) + target.visible_message(span_danger("[user] has attempted to punch [target]!")) return TRUE var/obj/item/organ/external/affecting = target.get_organ(ran_zone(user.zone_sel.selecting)) var/armor_block = target.run_armor_check(affecting, "melee") @@ -165,14 +165,14 @@ playsound(target, "punch", 25, 1, -1) - target.visible_message(span_red("[user] has punched [target]!")) + target.visible_message(span_bolddanger("[user] has punched [target]!")) if(armor_soak >= damage) return TRUE target.apply_damage(damage, HALLOSS, affecting, armor_block, armor_soak) if(damage >= 9) - target.visible_message(span_red("[user] has weakened [target]!")) + target.visible_message(span_bolddanger("[user] has weakened [target]!")) target.apply_effect(4, WEAKEN, armor_block) return TRUE @@ -239,7 +239,7 @@ if(src.density && istype(I, /obj/item) && !istype(I, /obj/item/card)) var/aforce = I.force playsound(src, 'sound/effects/Glasshit.ogg', 75, 1) - visible_message(span_red("[src] was hit by [I].")) + visible_message(span_bolddanger("[src] was hit by [I].")) if(I.damtype == BRUTE || I.damtype == BURN) take_damage(aforce) return @@ -522,5 +522,5 @@ derez() /mob/living/simple_mob/animal/space/carp/holodeck/proc/derez() - visible_message("\The [src] fades away!") + visible_message(span_infoplain(span_bold("\The [src]") + " fades away!")) qdel(src) diff --git a/code/modules/hydroponics/backtank.dm b/code/modules/hydroponics/backtank.dm index 2326f5e2e28..ff203ec3998 100644 --- a/code/modules/hydroponics/backtank.dm +++ b/code/modules/hydroponics/backtank.dm @@ -153,7 +153,7 @@ /obj/item/reagent_containers/spray/mister/doMove(atom/destination) if(destination && (destination != tank.loc || !ismob(destination))) if (loc != tank) - to_chat(tank.loc, "The mister snaps back onto the watertank.") + to_chat(tank.loc, span_notice("The mister snaps back onto the watertank.")) destination = tank ..() diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index 3f0c440693a..61b2ae4df5b 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -576,7 +576,7 @@ if(!degree || get_trait(TRAIT_IMMUTABLE) > 0) return - source_turf.visible_message("\The [display_name] quivers!") + source_turf.visible_message(span_infoplain(span_bold("\The [display_name]") + " quivers!")) //This looks like shit, but it's a lot easier to read/change this way. var/total_mutations = rand(1,1+degree) @@ -613,7 +613,7 @@ if(prob(degree*5)) set_trait(TRAIT_CARNIVOROUS, get_trait(TRAIT_CARNIVOROUS)+rand(-degree,degree),2, 0) if(get_trait(TRAIT_CARNIVOROUS)) - source_turf.visible_message("\The [display_name] shudders hungrily.") + source_turf.visible_message(span_infoplain(span_bold("\The [display_name]") + " shudders hungrily.")) if(6) set_trait(TRAIT_WEED_TOLERANCE, get_trait(TRAIT_WEED_TOLERANCE)+(rand(-2,2)*degree),10, 0) if(prob(degree*5)) @@ -634,7 +634,7 @@ set_trait(TRAIT_POTENCY, get_trait(TRAIT_POTENCY)+(rand(-20,20)*degree),200, 0) if(prob(degree*5)) set_trait(TRAIT_SPREAD, get_trait(TRAIT_SPREAD)+rand(-1,1),2, 0) - source_turf.visible_message("\The [display_name] spasms visibly, shifting in the tray.") + source_turf.visible_message(span_infoplain(span_bold("\The [display_name]") + " spasms visibly, shifting in the tray.")) if(prob(degree*3)) set_trait(TRAIT_SPORING, !get_trait(TRAIT_SPORING)) if(9) @@ -652,10 +652,10 @@ if(prob(degree*2)) set_trait(TRAIT_BIOLUM, !get_trait(TRAIT_BIOLUM)) if(get_trait(TRAIT_BIOLUM)) - source_turf.visible_message("\The [display_name] begins to glow!") + source_turf.visible_message(span_infoplain(span_bold("\The [display_name]") + " begins to glow!")) if(prob(degree*2)) set_trait(TRAIT_BIOLUM_COLOUR,get_random_colour(0,75,190)) - source_turf.visible_message("\The [display_name]'s glow changes colour!") + source_turf.visible_message(span_notice("\The [display_name]'s glow") + " changes colour!") else source_turf.visible_message(span_notice("\The [display_name]'s glow dims...")) if(11) diff --git a/code/modules/hydroponics/seed_gene_mut.dm b/code/modules/hydroponics/seed_gene_mut.dm index ac23bfa8d47..54e513c2336 100644 --- a/code/modules/hydroponics/seed_gene_mut.dm +++ b/code/modules/hydroponics/seed_gene_mut.dm @@ -4,7 +4,7 @@ return src var/datum/seed/S = diverge() //Let's not modify all of the seeds. - T.visible_message("\The [S.display_name] quivers!") //Mimicks the normal mutation. + T.visible_message(span_infoplain(span_bold("\The [S.display_name]") + " quivers!")) //Mimicks the normal mutation. G.mutate(S, T) return S @@ -97,7 +97,7 @@ T.visible_message(span_notice("\The [S.display_name] begins to glow!")) if(prob(50)) S.set_trait(TRAIT_BIOLUM_COLOUR,get_random_colour(0,75,190)) - T.visible_message("\The [S.display_name]'s glow changes colour!") + T.visible_message(span_notice("\The [S.display_name]'s glow") + " changes colour!") else T.visible_message(span_notice("\The [S.display_name]'s glow dims...")) if(prob(60)) @@ -126,7 +126,7 @@ S.set_trait(TRAIT_MATURATION, S.get_trait(TRAIT_MATURATION)+rand(-1,1),30,0) if(prob(55)) S.set_trait(TRAIT_SPREAD, S.get_trait(TRAIT_SPREAD)+rand(-1,1),2,0) - T.visible_message("\The [S.display_name] spasms visibly, shifting in the tray.") + T.visible_message(span_infoplain(span_bold("\The [S.display_name]") + " spasms visibly, shifting in the tray.")) /decl/plantgene/fruit/mutate(var/datum/seed/S) if(prob(65)) diff --git a/code/modules/hydroponics/seed_storage.dm b/code/modules/hydroponics/seed_storage.dm index 3bbd59a7d19..ca6728c6b93 100644 --- a/code/modules/hydroponics/seed_storage.dm +++ b/code/modules/hydroponics/seed_storage.dm @@ -389,7 +389,7 @@ /obj/machinery/seed_storage/attackby(var/obj/item/O as obj, var/mob/user as mob) if (istype(O, /obj/item/seeds) && !lockdown) add(O) - user.visible_message("[user] puts \the [O.name] into \the [src].", "You put \the [O] into \the [src].") + user.visible_message(span_filter_notice("[user] puts \the [O.name] into \the [src]."), span_filter_notice("You put \the [O] into \the [src].")) return else if (istype(O, /obj/item/storage/bag/plants) && !lockdown) var/obj/item/storage/P = O @@ -398,17 +398,17 @@ ++loaded add(G) if (loaded) - user.visible_message("[user] puts the seeds from \the [O.name] into \the [src].", "You put the seeds from \the [O.name] into \the [src].") + user.visible_message(span_filter_notice("[user] puts the seeds from \the [O.name] into \the [src]."), span_filter_notice("You put the seeds from \the [O.name] into \the [src].")) else to_chat(user, span_notice("There are no seeds in \the [O.name].")) return else if(O.has_tool_quality(TOOL_WRENCH)) playsound(src, O.usesound, 50, 1) anchored = !anchored - to_chat(user, "You [anchored ? "wrench" : "unwrench"] \the [src].") + to_chat(user, span_filter_notice("You [anchored ? "wrench" : "unwrench"] \the [src].")) else if(O.has_tool_quality(TOOL_SCREWDRIVER)) panel_open = !panel_open - to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.") + to_chat(user, span_filter_notice("You [panel_open ? "open" : "close"] the maintenance panel.")) playsound(src, O.usesound, 50, 1) cut_overlays() if(panel_open) diff --git a/code/modules/hydroponics/spreading/spreading_response.dm b/code/modules/hydroponics/spreading/spreading_response.dm index 3237f098138..c4256a68d38 100644 --- a/code/modules/hydroponics/spreading/spreading_response.dm +++ b/code/modules/hydroponics/spreading/spreading_response.dm @@ -66,12 +66,12 @@ for(var/mob/living/L as anything in buckled_mobs) if(!(user in buckled_mobs)) L.visible_message(\ - "\The [user] frees \the [L] from \the [src].",\ - "\The [user] frees you from \the [src].",\ + span_infoplain(span_bold("\The [user]") + " frees \the [L] from \the [src]."),\ + span_infoplain(span_bold("\The [user]") + " frees you from \the [src]."),\ span_warning("You hear shredding and ripping.")) else L.visible_message(\ - "\The [L] struggles free of \the [src].",\ + span_infoplain(span_bold("\The [L]") + " struggles free of \the [src]."),\ span_notice("You untangle \the [src] from around yourself."),\ span_warning("You hear shredding and ripping.")) unbuckle() diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index 58704c5f171..62fe40d7079 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -166,13 +166,13 @@ if(weedlevel > 0) nymph.reagents.add_reagent("glucose", weedlevel) weedlevel = 0 - nymph.visible_message(span_notice("[nymph] begins rooting through [src], ripping out weeds and eating them noisily."),span_notice("You begin rooting through [src], ripping out weeds and eating them noisily.")) + nymph.visible_message(span_notice(span_bold("[nymph]") + " begins rooting through [src], ripping out weeds and eating them noisily."),span_notice("You begin rooting through [src], ripping out weeds and eating them noisily.")) else if(nymph.nutrition > 100 && nutrilevel < 10) nymph.nutrition -= ((10-nutrilevel)*5) nutrilevel = 10 - nymph.visible_message(span_notice("[nymph] secretes a trickle of green liquid, refilling [src]."),span_notice("You secrete a trickle of green liquid, refilling [src].")) + nymph.visible_message(span_notice(span_bold("[nymph]") + " secretes a trickle of green liquid, refilling [src]."),span_notice("You secrete a trickle of green liquid, refilling [src].")) else - nymph.visible_message(span_notice("[nymph] rolls around in [src] for a bit."),span_notice("You roll around in [src] for a bit.")) + nymph.visible_message(span_notice(span_bold("[nymph]") + " rolls around in [src] for a bit."),span_notice("You roll around in [src] for a bit.")) return /obj/machinery/portable_atmospherics/hydroponics/Initialize() @@ -480,7 +480,7 @@ weedlevel = 0 update_icon() - visible_message(span_danger("The [previous_plant] has suddenly mutated into [seed.display_name]!")) + visible_message(span_danger("The " + span_notice("[previous_plant]") + " has suddenly mutated into " + span_notice("[seed.display_name]") + "!")) return @@ -648,13 +648,13 @@ if(seed) if(weedlevel >= 5) - . += "It is infested with weeds!" + . += "It is " + span_danger("infested with weeds") + "!" if(pestlevel >= 5) - . += "It is infested with tiny worms!" + . += "It is " + span_danger("infested with tiny worms") + "!" if(dead) - . += "It has a dead plant!" + . += "It has " + span_danger("a dead plant") + "!" else if(health <= (seed.get_trait(TRAIT_ENDURANCE)/ 2)) - . += "It has an unhealthy plant!" + . += "It has " + span_danger("an unhealthy plant") + "!" if(frozen == 1) . += span_notice("It is cryogenically frozen.") if(mechanical) diff --git a/code/modules/hydroponics/trays/tray_reagents.dm b/code/modules/hydroponics/trays/tray_reagents.dm index 36b326c329c..9fb2c686c78 100644 --- a/code/modules/hydroponics/trays/tray_reagents.dm +++ b/code/modules/hydroponics/trays/tray_reagents.dm @@ -20,7 +20,7 @@ /obj/item/plantspray/pests name = "pest-spray" - desc = "It's some pest eliminator spray! Do not inhale!" + desc = "It's some pest eliminator spray! " + span_italics("Do not inhale!") icon_state = "pestspray" pest_kill_str = 6 diff --git a/code/modules/instruments/songs/editor.dm b/code/modules/instruments/songs/editor.dm index 2d422e12bbc..9f67412670f 100644 --- a/code/modules/instruments/songs/editor.dm +++ b/code/modules/instruments/songs/editor.dm @@ -4,9 +4,9 @@ /datum/song/proc/instrument_status_ui() . = list() . += "
    " - . += "Current instrument: " + . += span_bold("Current instrument:") + " " if(!using_instrument) - . += "No instrument loaded!
    " + . += span_danger("No instrument loaded!") + "
    " else . += "[using_instrument.name]
    " . += "Playback Settings:
    " @@ -23,7 +23,7 @@ modetext = "Exponential Falloff Factor: [sustain_exponential_dropoff]% per decisecond
    " . += "Sustain Mode: [smt]
    " . += modetext - . += using_instrument?.ready()? "Status: Ready
    " : "Status: !Instrument Definition Error!
    " + . += using_instrument?.ready()? ("Status: " + span_green("Ready") + "
    ") : ("Status: " + span_red("!Instrument Definition Error!") + "
    ") . += "Instrument Type: [legacy? "Legacy" : "Synthesized"]
    " . += "Volume: [volume]
    " . += "Volume Dropoff Threshold: [sustain_dropoff_volume]
    " @@ -38,20 +38,20 @@ if(lines.len > 0) dat += "

    Playback

    " if(!playing) - dat += "Play Stop

    " + dat += "Play " + span_linkOn("Stop") + "

    " dat += "Repeat Song: " - dat += repeat > 0 ? "--" : span_linkOff("--") + dat += repeat > 0 ? "--" : (span_linkOff("-") + span_linkOff("-")) dat += " [repeat] times " - dat += repeat < max_repeats ? "++" : span_linkOff("++") + dat += repeat < max_repeats ? "++" : (span_linkOff("+") + span_linkOff("+")) dat += "
    " else - dat += "Play Stop
    " - dat += "Repeats left: [repeat]
    " + dat += span_linkOn("Play") + " Stop
    " + dat += "Repeats left: " + span_bold("[repeat]") + "
    " if(!editing) - dat += "
    Show Editor
    " + dat += "
    " + span_bold("Show Editor") + "
    " else dat += "

    Editing

    " - dat += "Hide Editor" + dat += span_bold("Hide Editor") dat += " Start a New Song" dat += " Import a Song

    " var/bpm = round(600 / tempo) @@ -62,7 +62,7 @@ dat += "Line [linecount]: Edit X [line]
    " dat += "Add Line

    " if(help) - dat += "Hide Help
    " + dat += span_bold("Hide Help") + "
    " dat += {" Lines are a series of chords, separated by commas (,), each with notes separated by hyphens (-).
    Every note in a chord will play together, with chord timed by the tempo.
    @@ -81,7 +81,7 @@ A song may only contain up to [MUSIC_MAXLINES] lines.
    "} else - dat += "Show Help
    " + dat += span_bold("Show Help") + "
    " var/datum/browser/popup = new(user, "instrument", parent?.name || "instrument", 700, 500) popup.set_content(dat.Join("")) diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm index 0a37398169d..5c4a36f48e9 100644 --- a/code/modules/integrated_electronics/core/assemblies.dm +++ b/code/modules/integrated_electronics/core/assemblies.dm @@ -272,7 +272,7 @@ if(S.scan(target)) scanned = TRUE if(scanned) - visible_message("\The [user] waves \the [src] around [target].") + visible_message(span_infoplain(span_bold("\The [user]") + " waves \the [src] around [target].")) /obj/item/electronic_assembly/attackby(var/obj/item/I, var/mob/user) if(can_anchor && I.has_tool_quality(TOOL_WRENCH)) @@ -306,8 +306,8 @@ tgui_interact(user) return TRUE else - to_chat(user, "\The [src] isn't opened, so you can't fiddle with the internal components. \ - Try using a crowbar.") + to_chat(user, span_warning("\The [src] isn't opened, so you can't fiddle with the internal components. \ + Try using a crowbar.")) return FALSE else if(istype(I, /obj/item/integrated_electronics/detailer)) diff --git a/code/modules/integrated_electronics/core/assemblies/clothing.dm b/code/modules/integrated_electronics/core/assemblies/clothing.dm index d3ebf9ba4da..087171bbd80 100644 --- a/code/modules/integrated_electronics/core/assemblies/clothing.dm +++ b/code/modules/integrated_electronics/core/assemblies/clothing.dm @@ -76,7 +76,8 @@ // Clothing assemblies can be triggered by clicking on the HUD. This allows that to occur. action_circuit = new(src.IC) IC.force_add_circuit(action_circuit) - action_button_name = "Activate [name]" + + new /datum/action/item_action/activate(src, name) /obj/item/clothing/Destroy() if(IC) @@ -177,4 +178,4 @@ /obj/item/clothing/suit/circuitry/Initialize() setup_integrated_circuit(/obj/item/electronic_assembly/clothing/large) - return ..() \ No newline at end of file + return ..() diff --git a/code/modules/integrated_electronics/core/tools.dm b/code/modules/integrated_electronics/core/tools.dm index 0466e5302b8..9bf3ea4889c 100644 --- a/code/modules/integrated_electronics/core/tools.dm +++ b/code/modules/integrated_electronics/core/tools.dm @@ -33,8 +33,8 @@ to_chat(user, span_warning("Wiring \the [selected_io.holder]'s [selected_io.name] into itself is rather pointless.")) return if(io.io_type != selected_io.io_type) - to_chat(user, "Those two types of channels are incompatible. The first is a [selected_io.io_type], \ - while the second is a [io.io_type].") + to_chat(user, span_warning("Those two types of channels are incompatible. The first is a [selected_io.io_type], \ + while the second is a [io.io_type].")) return if(io.holder.assembly && io.holder.assembly != selected_io.holder.assembly) to_chat(user, span_warning("Both \the [io.holder] and \the [selected_io.holder] need to be inside the same assembly.")) @@ -61,21 +61,21 @@ else if(mode == UNWIRING) if(io == selected_io) - to_chat(user, "You can't wire a pin into each other, so unwiring \the [selected_io.holder] from \ - the same pin is rather moot.") + to_chat(user, span_warning("You can't wire a pin into each other, so unwiring \the [selected_io.holder] from \ + the same pin is rather moot.")) return if(selected_io in io.linked) io.linked.Remove(selected_io) selected_io.linked.Remove(io) - to_chat(user, "You disconnect \the [selected_io.holder]'s [selected_io.name] from \ - \the [io.holder]'s [io.name].") + to_chat(user, span_notice("You disconnect \the [selected_io.holder]'s [selected_io.name] from \ + \the [io.holder]'s [io.name].")) selected_io.holder.interact(user) // This is to update the UI. selected_io = null mode = UNWIRE update_icon() else - to_chat(user, "\The [selected_io.holder]'s [selected_io.name] and \the [io.holder]'s \ - [io.name] are not connected.") + to_chat(user, span_warning("\The [selected_io.holder]'s [selected_io.name] and \the [io.holder]'s \ + [io.name] are not connected.")) return return @@ -135,8 +135,8 @@ to_chat(user, span_notice("You set \the [src]'s memory to [new_data].")) if("ref") accepting_refs = 1 - to_chat(user, "You turn \the [src]'s ref scanner on. Slide it across \ - an object for a ref of that object to save it in memory.") + to_chat(user, span_notice("You turn \the [src]'s ref scanner on. Slide it across \ + an object for a ref of that object to save it in memory.")) if("null") data_to_write = null to_chat(user, span_notice("You set \the [src]'s memory to absolutely nothing.")) @@ -145,8 +145,8 @@ if(accepting_refs && proximity) data_to_write = WEAKREF(target) visible_message(span_notice("[user] slides \a [src]'s over \the [target].")) - to_chat(user, "You set \the [src]'s memory to a reference to [target.name] \[Ref\]. The ref scanner is \ - now off.") + to_chat(user, span_notice("You set \the [src]'s memory to a reference to [target.name] \[Ref\]. The ref scanner is \ + now off.")) accepting_refs = 0 /obj/item/integrated_electronics/debugger/proc/write_data(var/datum/integrated_io/io, mob/user) @@ -206,8 +206,8 @@ to_chat(user, span_warning("Wiring \the [selected_io.holder]'s [selected_io.name] into itself is rather pointless.")) return if(io.io_type != selected_io.io_type) - to_chat(user, "Those two types of channels are incompatible. The first is a [selected_io.io_type], \ - while the second is a [io.io_type].") + to_chat(user, span_warning("Those two types of channels are incompatible. The first is a [selected_io.io_type], \ + while the second is a [io.io_type].")) return if(io.holder.assembly && io.holder.assembly != selected_io.holder.assembly) to_chat(user, span_warning("Both \the [io.holder] and \the [selected_io.holder] need to be inside the same assembly.")) @@ -237,8 +237,8 @@ else io1.linked.Remove(io2) io2.linked.Remove(io1) - to_chat(user, "You clip the data connection between the [io1.holder.displayed_name]'s \ - [io1.name] and the [io2.holder.displayed_name]'s [io2.name].") + to_chat(user, span_notice("You clip the data connection between the [io1.holder.displayed_name]'s \ + [io1.name] and the [io2.holder.displayed_name]'s [io2.name].")) io1.holder.interact(user) // This is to update the UI. update_icon() @@ -246,8 +246,8 @@ if(accepting_refs && toolmode == MULTITOOL_MODE_INTCIRCUITS && proximity) weakref_wiring = WEAKREF(target) visible_message(span_notice("[user] slides \a [src]'s over \the [target].")) - to_chat(user, "You set \the [src]'s memory to a reference to [target.name] \[Ref\]. The ref scanner is \ - now off.") + to_chat(user, span_notice("You set \the [src]'s memory to a reference to [target.name] \[Ref\]. The ref scanner is \ + now off.")) accepting_refs = 0 diff --git a/code/modules/integrated_electronics/subtypes/memory.dm b/code/modules/integrated_electronics/subtypes/memory.dm index a6f4b9a1a50..e69a7187116 100644 --- a/code/modules/integrated_electronics/subtypes/memory.dm +++ b/code/modules/integrated_electronics/subtypes/memory.dm @@ -109,8 +109,8 @@ to_chat(user, span_notice("You set \the [src]'s memory to [O.display_data(O.data)].")) if("ref") accepting_refs = 1 - to_chat(user, "You turn \the [src]'s ref scanner on. Slide it across \ - an object for a ref of that object to save it in memory.") + to_chat(user, span_notice("You turn \the [src]'s ref scanner on. Slide it across \ + an object for a ref of that object to save it in memory.")) if("null") O.data = null to_chat(user, span_notice("You set \the [src]'s memory to absolutely nothing.")) @@ -120,6 +120,6 @@ var/datum/integrated_io/O = outputs[1] O.data = WEAKREF(target) visible_message(span_notice("[user] slides \a [src]'s over \the [target].")) - to_chat(user, "You set \the [src]'s memory to a reference to [O.display_data(O.data)]. The ref scanner is \ - now off.") + to_chat(user, span_notice("You set \the [src]'s memory to a reference to [O.display_data(O.data)]. The ref scanner is \ + now off.")) accepting_refs = 0 diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index a4bf02de8d2..f5bc91f22e7 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -45,9 +45,9 @@ if(1) establish_old_db_connection() if(!dbcon_old.IsConnected()) - dat += "ERROR: Unable to contact External Archive. Please contact your system administrator for assistance.
    " + dat += span_red(span_bold("ERROR") + ": Unable to contact External Archive. Please contact your system administrator for assistance.") + "
    " else if(!SQLquery) - dat += "ERROR: Malformed search request. Please contact your system administrator for assistance.
    " + dat += span_red(span_bold("ERROR") + ": Malformed search request. Please contact your system administrator for assistance.") + "
    " else dat += {""} @@ -187,7 +187,7 @@ new /obj/item/book/tome(src.loc) var/datum/gender/T = gender_datums[user.get_visible_gender()] to_chat(user, span_warning("Your sanity barely endures the seconds spent in the vault's browsing window. The only thing to remind you of this when you stop browsing is a dusty old tome sitting on the desk. You don't really remember printing it.")) - user.visible_message("\The [user] stares at the blank screen for a few moments, [T.his] expression frozen in fear. When [T.he] finally awakens from it, [T.he] looks a lot older.", 2) + user.visible_message(span_infoplain(span_bold("\The [user]") + " stares at the blank screen for a few moments, [T.his] expression frozen in fear. When [T.he] finally awakens from it, [T.he] looks a lot older."), 2) src.arcanecheckout = 0 if(1) // Inventory @@ -207,7 +207,7 @@ //timedue *= 10 timedue /= 600 if(timedue <= 0) - timedue = "(OVERDUE) [timedue]" + timedue = span_red(span_bold("(OVERDUE)") + " [timedue]") else timedue = round(timedue) dat += {"\"[b.bookname]\", Checked out to: [b.mobname]
    --- Taken: [timetaken] minutes ago, Due: in [timedue] minutes
    @@ -228,7 +228,7 @@ if(4) dat += "

    Internal Archive

    " if(!all_books || !all_books.len) - dat += "ERROR Something has gone seriously wrong. Contact System Administrator for more information." + dat += span_red(span_bold("ERROR") + " Something has gone seriously wrong. Contact System Administrator for more information.") else dat += {"
    AUTHORTITLECATEGORYSS13BN
    TITLE(Return to main menu)
    " if(5) //dat += "

    ERROR

    " //VOREStation Removal - //dat+= "Library Database is in Secure Management Mode.
    \ //VOREStation Removal + //dat+= span_red("Library Database is in Secure Management Mode.") + "
    \ //VOREStation Removal //Contact a System Administrator for more information.
    " //VOREStation Removal //VOREstation Edit Start dat += "

    Upload a New Title

    " @@ -253,9 +253,9 @@ scanner = S break if(!scanner) - dat += "No scanner found within wireless network range.
    " + dat += span_red("No scanner found within wireless network range.") + "
    " else if(!scanner.cache) - dat += "No data found in scanner memory.
    " + dat += span_red("No data found in scanner memory.") + "
    " else dat += {"Data marked for upload...
    Title: [scanner.cache.name]
    "} @@ -275,10 +275,10 @@ dat += "

    External Archive

    " //VOREStation Edit establish_old_db_connection() - //dat += "

    Warning: System Administrator has slated this archive for removal. Personal uploads should be taken to the NT board of internal literature.

    " //VOREStation Removal + //dat += "

    " + span_red("arning: System Administrator has slated this archive for removal. Personal uploads should be taken to the NT board of internal literature.") + "

    " //VOREStation Removal if(!dbcon_old.IsConnected()) - dat += "ERROR: Unable to contact External Archive. Please contact your system administrator for assistance." + dat += span_red(span_bold("ERROR") + ": Unable to contact External Archive. Please contact your system administrator for assistance.") else dat += {"(Order book by SS13BN)

    @@ -319,7 +319,7 @@ establish_old_db_connection() if(!dbcon_old.IsConnected()) - dat += "ERROR: Unable to contact External Archive. Please contact your system administrator for assistance." + dat += span_red(span_bold("ERROR") + ": Unable to contact External Archive. Please contact your system administrator for assistance.") else dat += {"(Order book by SS13BN)

    @@ -385,7 +385,7 @@ else for (var/mob/V in hearers(src)) - V.show_message("[src]'s monitor flashes, \"Bible printer currently unavailable, please wait a moment.\"") + V.show_message(span_infoplain(span_bold("[src]") + "'s monitor flashes, \"Bible printer currently unavailable, please wait a moment.\"")) if("7") screenstate = 7 @@ -465,7 +465,7 @@ tgui_alert_async(usr, "Connection to Archive has been severed. Aborting.") if(bibledelay) for (var/mob/V in hearers(src)) - V.show_message("[src]'s monitor flashes, \"Printer unavailable. Please allow a short time before attempting to print.\"") + V.show_message(span_infoplain(span_bold("[src]") + "'s monitor flashes, \"Printer unavailable. Please allow a short time before attempting to print.\"")) else bibledelay = 1 spawn(6) @@ -536,7 +536,7 @@ usr.set_machine(src) var/dat = "Scanner Control Interface\n" // if(cache) - dat += "Data stored in memory.
    " + dat += span_darkgray("Data stored in memory.") + "
    " else dat += "No data stored in memory.
    " dat += "\[Scan\]" diff --git a/code/modules/lighting/lighting_corner.dm b/code/modules/lighting/lighting_corner.dm index e02e04b0f7c..3f66bdde70a 100644 --- a/code/modules/lighting/lighting_corner.dm +++ b/code/modules/lighting/lighting_corner.dm @@ -29,35 +29,47 @@ ///whether we are to be added to SSlighting's corners_queue list for an update var/needs_update = FALSE -/datum/lighting_corner/New(turf/new_turf, diagonal) +/datum/lighting_corner/New(x, y, z) . = ..() - save_master(new_turf, turn(diagonal, 180)) - var/vertical = diagonal & ~(diagonal - 1) // The horizontal directions (4 and 8) are bigger than the vertical ones (1 and 2), so we can reliably say the lsb is the horizontal direction. - var/horizontal = diagonal & ~vertical // Now that we know the horizontal one we can get the vertical one. + src.x = x + 0.5 + src.y = y + 0.5 - x = new_turf.x + (horizontal == EAST ? 0.5 : -0.5) - y = new_turf.y + (vertical == NORTH ? 0.5 : -0.5) + // Alright. We're gonna take a set of coords, and from them do a loop clockwise + // To build out the turfs adjacent to us. This is pretty fast + var/turf/process_next = locate(x, y, z) + if(process_next) + master_SW = process_next + process_next.lighting_corner_NE = src + // Now, we go north! + process_next = get_step(process_next, NORTH) + else + // Yes this is slightly slower then having a guarenteeed turf, but there aren't many null turfs + // So this is pretty damn fast + process_next = locate(x, y + 1, z) - // My initial plan was to make this loop through a list of all the dirs (horizontal, vertical, diagonal). - // Issue being that the only way I could think of doing it was very messy, slow and honestly overengineered. - // So we'll have this hardcode instead. - var/turf/new_master_turf + // Ok, if we have a north turf, go there. otherwise, onto the next + if(process_next) + master_NW = process_next + process_next.lighting_corner_SE = src + // Now, TO THE EAST + process_next = get_step(process_next, EAST) + else + process_next = locate(x + 1, y + 1, z) - // Diagonal one is easy. - new_master_turf = get_step(new_turf, diagonal) - if (new_master_turf) // In case we're on the map's border. - save_master(new_master_turf, diagonal) + // Etc etc + if(process_next) + master_NE = process_next + process_next.lighting_corner_SW = src + // Now, TO THE SOUTH AGAIN (SE) + process_next = get_step(process_next, SOUTH) + else + process_next = locate(x + 1, y, z) - // Now the horizontal one. - new_master_turf = get_step(new_turf, horizontal) - if (new_master_turf) // Ditto. - save_master(new_master_turf, ((new_master_turf.x > x) ? EAST : WEST) | ((new_master_turf.y > y) ? NORTH : SOUTH)) // Get the dir based on coordinates. - - // And finally the vertical one. - new_master_turf = get_step(new_turf, vertical) - if (new_master_turf) - save_master(new_master_turf, ((new_master_turf.x > x) ? EAST : WEST) | ((new_master_turf.y > y) ? NORTH : SOUTH)) // Get the dir based on coordinates. + // anddd the last tile + if(process_next) + master_SE = process_next + process_next.lighting_corner_NW = src /datum/lighting_corner/proc/save_master(turf/master, dir) switch (dir) diff --git a/code/modules/lighting/lighting_overlay.dm b/code/modules/lighting/lighting_overlay.dm index 155de84b1da..8e118279970 100644 --- a/code/modules/lighting/lighting_overlay.dm +++ b/code/modules/lighting/lighting_overlay.dm @@ -28,8 +28,9 @@ affected_turf.lighting_object = src affected_turf.set_luminosity(0) - for(var/turf/space/space_tile in RANGE_TURFS(1, affected_turf)) - space_tile.update_starlight() + if(config.starlight) + for(var/turf/space/space_tile in RANGE_TURFS(1, affected_turf)) + space_tile.update_starlight() needs_update = TRUE SSlighting.objects_queue += src @@ -57,6 +58,7 @@ var/static/datum/lighting_corner/dummy/dummy_lighting_corner = new + var/turf/affected_turf = src.affected_turf var/datum/lighting_corner/red_corner = affected_turf.lighting_corner_SW || dummy_lighting_corner var/datum/lighting_corner/green_corner = affected_turf.lighting_corner_SE || dummy_lighting_corner var/datum/lighting_corner/blue_corner = affected_turf.lighting_corner_NW || dummy_lighting_corner @@ -64,22 +66,6 @@ var/max = max(red_corner.largest_color_luminosity, green_corner.largest_color_luminosity, blue_corner.largest_color_luminosity, alpha_corner.largest_color_luminosity) - var/rr = red_corner.cache_r - var/rg = red_corner.cache_g - var/rb = red_corner.cache_b - - var/gr = green_corner.cache_r - var/gg = green_corner.cache_g - var/gb = green_corner.cache_b - - var/br = blue_corner.cache_r - var/bg = blue_corner.cache_g - var/bb = blue_corner.cache_b - - var/ar = alpha_corner.cache_r - var/ag = alpha_corner.cache_g - var/ab = alpha_corner.cache_b - #if LIGHTING_SOFT_THRESHOLD != 0 var/set_luminosity = max > LIGHTING_SOFT_THRESHOLD #else @@ -88,30 +74,30 @@ var/set_luminosity = max > 1e-6 #endif - if((rr & gr & br & ar) && (rg + gg + bg + ag + rb + gb + bb + ab == 8)) + var/mutable_appearance/current_underlay = src.current_underlay + affected_turf.underlays -= current_underlay + if(red_corner.cache_r & green_corner.cache_r & blue_corner.cache_r & alpha_corner.cache_r && \ + (red_corner.cache_g + green_corner.cache_g + blue_corner.cache_g + alpha_corner.cache_g + \ + red_corner.cache_b + green_corner.cache_b + blue_corner.cache_b + alpha_corner.cache_b == 8)) //anything that passes the first case is very likely to pass the second, and addition is a little faster in this case - affected_turf.underlays -= current_underlay current_underlay.icon_state = "transparent" current_underlay.color = null - affected_turf.underlays += current_underlay else if(!set_luminosity) - affected_turf.underlays -= current_underlay current_underlay.icon_state = "dark" current_underlay.color = null - affected_turf.underlays += current_underlay else - affected_turf.underlays -= current_underlay current_underlay.icon_state = "gradient" current_underlay.color = list( - rr, rg, rb, 00, - gr, gg, gb, 00, - br, bg, bb, 00, - ar, ag, ab, 00, + red_corner.cache_r, red_corner.cache_g, red_corner.cache_b, 00, + green_corner.cache_r, green_corner.cache_g, green_corner.cache_b, 00, + blue_corner.cache_r, blue_corner.cache_g, blue_corner.cache_b, 00, + alpha_corner.cache_r, alpha_corner.cache_g, alpha_corner.cache_b, 00, 00, 00, 00, 01 ) - affected_turf.underlays += current_underlay - + // Of note. Most of the cost in this proc is here, I think because color matrix'd underlays DO NOT cache well, which is what adding to underlays does + // We use underlays because objects on each tile would fuck with maptick. if that ever changes, use an object for this instead + affected_turf.underlays += current_underlay affected_turf.set_luminosity(set_luminosity) /datum/lighting_object/proc/removefromturf() diff --git a/code/modules/lighting/lighting_source.dm b/code/modules/lighting/lighting_source.dm index a04cd6c6eb0..611a875104f 100644 --- a/code/modules/lighting/lighting_source.dm +++ b/code/modules/lighting/lighting_source.dm @@ -111,34 +111,51 @@ // As such this all gets counted as a single line. // The braces and semicolons are there to be able to do this on a single line. -// /tg/ falloff alg -#define LUM_FALLOFF(C, T) (1 - CLAMP01(sqrt((C.x - T.x) ** 2 + (C.y - T.y) ** 2 + LIGHTING_HEIGHT) / max(1, light_range))) +// This exists so we can cache the vars used in this macro, and save MASSIVE time :) +// Most of this is saving off datum var accesses, tho some of it does actually cache computation +// You will NEED to call this before you call APPLY_CORNER +#define SETUP_CORNERS_CACHE(lighting_source) \ + var/_turf_x = lighting_source.pixel_turf.x; \ + var/_turf_y = lighting_source.pixel_turf.y; \ + var/_range_divisor = max(1, lighting_source.light_range); \ + var/_light_power = lighting_source.light_power; \ + var/_applied_lum_r = lighting_source.applied_lum_r; \ + var/_applied_lum_g = lighting_source.applied_lum_g; \ + var/_applied_lum_b = lighting_source.applied_lum_b; \ + var/_lum_r = lighting_source.lum_r; \ + var/_lum_g = lighting_source.lum_g; \ + var/_lum_b = lighting_source.lum_b; \ -// Bay/Polaris falloff alg -//#define LUM_FALLOFF(C, T)(1 - CLAMP01(((C.x - T.x) ** 2 +(C.y - T.y) ** 2 + LIGHTING_HEIGHT) ** 0.6 / max(1, light_range))) +#define SETUP_CORNERS_REMOVAL_CACHE(lighting_source) \ + var/_applied_lum_r = lighting_source.applied_lum_r; \ + var/_applied_lum_g = lighting_source.applied_lum_g; \ + var/_applied_lum_b = lighting_source.applied_lum_b; + +#define LUM_FALLOFF(C) (1 - CLAMP01(sqrt((C.x - _turf_x) ** 2 + (C.y - _turf_y) ** 2 + LIGHTING_HEIGHT) / _range_divisor)) #define APPLY_CORNER(C) \ - . = LUM_FALLOFF(C, pixel_turf); \ - . *= light_power; \ + . = LUM_FALLOFF(C); \ + . *= _light_power; \ var/OLD = effect_str[C]; \ \ C.update_lumcount \ ( \ - (. * lum_r) - (OLD * applied_lum_r), \ - (. * lum_g) - (OLD * applied_lum_g), \ - (. * lum_b) - (OLD * applied_lum_b) \ + (. * _lum_r) - (OLD * _applied_lum_r), \ + (. * _lum_g) - (OLD * _applied_lum_g), \ + (. * _lum_b) - (OLD * _applied_lum_b) \ ); \ #define REMOVE_CORNER(C) \ . = -effect_str[C]; \ C.update_lumcount \ ( \ - . * applied_lum_r, \ - . * applied_lum_g, \ - . * applied_lum_b \ + . * _applied_lum_r, \ + . * _applied_lum_g, \ + . * _applied_lum_b \ ); /datum/light_source/proc/remove_lum() + SETUP_CORNERS_REMOVAL_CACHE(src) applied = FALSE for (var/datum/lighting_corner/corner as anything in effect_str) REMOVE_CORNER(corner) @@ -147,6 +164,7 @@ effect_str = null /datum/light_source/proc/recalc_corner(datum/lighting_corner/corner) + SETUP_CORNERS_CACHE(src) LAZYINITLIST(effect_str) if (effect_str[corner]) // Already have one. REMOVE_CORNER(corner) @@ -158,6 +176,22 @@ /datum/light_source/proc/get_turfs_in_range() return view(CEILING(light_range, 1), source_turf) +// Keep in mind. Lighting corners accept the bottom left (northwest) set of cords to them as input +#define GENERATE_MISSING_CORNERS(gen_for) \ + if (!gen_for.lighting_corner_NE) { \ + gen_for.lighting_corner_NE = new /datum/lighting_corner(gen_for.x, gen_for.y, gen_for.z); \ + } \ + if (!gen_for.lighting_corner_SE) { \ + gen_for.lighting_corner_SE = new /datum/lighting_corner(gen_for.x, gen_for.y - 1, gen_for.z); \ + } \ + if (!gen_for.lighting_corner_SW) { \ + gen_for.lighting_corner_SW = new /datum/lighting_corner(gen_for.x - 1, gen_for.y - 1, gen_for.z); \ + } \ + if (!gen_for.lighting_corner_NW) { \ + gen_for.lighting_corner_NW = new /datum/lighting_corner(gen_for.x - 1, gen_for.y, gen_for.z); \ + } \ + gen_for.lighting_corners_initialised = TRUE; + /datum/light_source/proc/update_corners() var/update = FALSE var/atom/source_atom = src.source_atom @@ -220,24 +254,27 @@ return //nothing's changed var/list/datum/lighting_corner/corners = list() - var/list/turf/turfs = list() if (source_turf) var/oldlum = source_turf.luminosity source_turf.luminosity = CEILING(light_range, 1) for(var/turf/T in get_turfs_in_range()) - if(!IS_OPAQUE_TURF(T)) - if (!T.lighting_corners_initialised) - T.generate_missing_corners() - corners[T.lighting_corner_NE] = 0 - corners[T.lighting_corner_SE] = 0 - corners[T.lighting_corner_SW] = 0 - corners[T.lighting_corner_NW] = 0 - turfs += T + if(IS_OPAQUE_TURF(T)) + continue + if (!T.lighting_corners_initialised) + GENERATE_MISSING_CORNERS(T) + + corners[T.lighting_corner_NE] = 0 + corners[T.lighting_corner_SE] = 0 + corners[T.lighting_corner_SW] = 0 + corners[T.lighting_corner_NW] = 0 source_turf.luminosity = oldlum - var/list/datum/lighting_corner/new_corners = (corners - effect_str) - LAZYINITLIST(effect_str) + SETUP_CORNERS_CACHE(src) + + var/list/datum/lighting_corner/new_corners = (corners - src.effect_str) + LAZYINITLIST(src.effect_str) + var/list/effect_str = src.effect_str if (needs_update == LIGHTING_VIS_UPDATE) for (var/datum/lighting_corner/corner as anything in new_corners) APPLY_CORNER(corner) @@ -251,13 +288,15 @@ LAZYADD(corner.affecting, src) effect_str[corner] = . - for (var/datum/lighting_corner/corner as anything in corners - new_corners) // Existing corners - APPLY_CORNER(corner) - if (. != 0) - effect_str[corner] = . - else - LAZYREMOVE(corner.affecting, src) - effect_str -= corner + // New corners are a subset of corners. so if they're both the same length, there are NO old corners! + if(length(corners) != length(new_corners)) + for (var/datum/lighting_corner/corner as anything in corners - new_corners) // Existing corners + APPLY_CORNER(corner) + if (. != 0) + effect_str[corner] = . + else + LAZYREMOVE(corner.affecting, src) + effect_str -= corner var/list/datum/lighting_corner/gone_corners = effect_str - corners for (var/datum/lighting_corner/corner as anything in gone_corners) @@ -269,9 +308,12 @@ applied_lum_g = lum_g applied_lum_b = lum_b - UNSETEMPTY(effect_str) + UNSETEMPTY(src.effect_str) #undef EFFECT_UPDATE #undef LUM_FALLOFF #undef REMOVE_CORNER #undef APPLY_CORNER +#undef SETUP_CORNERS_REMOVAL_CACHE +#undef SETUP_CORNERS_CACHE +#undef GENERATE_MISSING_CORNERS diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm index 4ba09f11f23..dc5437c4cac 100644 --- a/code/modules/lighting/lighting_turf.dm +++ b/code/modules/lighting/lighting_turf.dm @@ -138,19 +138,3 @@ /turf/proc/has_dynamic_lighting() var/area/A = loc return (IS_DYNAMIC_LIGHTING(src) && IS_DYNAMIC_LIGHTING(A)) - -/turf/proc/generate_missing_corners() - - if (!lighting_corner_NE) - lighting_corner_NE = new/datum/lighting_corner(src, NORTH|EAST) - - if (!lighting_corner_SE) - lighting_corner_SE = new/datum/lighting_corner(src, SOUTH|EAST) - - if (!lighting_corner_SW) - lighting_corner_SW = new/datum/lighting_corner(src, SOUTH|WEST) - - if (!lighting_corner_NW) - lighting_corner_NW = new/datum/lighting_corner(src, NORTH|WEST) - - lighting_corners_initialised = TRUE diff --git a/code/modules/lore_codex/codex_tree.dm b/code/modules/lore_codex/codex_tree.dm index c56fd02b038..c6c00643f8d 100644 --- a/code/modules/lore_codex/codex_tree.dm +++ b/code/modules/lore_codex/codex_tree.dm @@ -71,7 +71,7 @@ var/datum/lore/codex/checked = current_page["[user]"] if(istype(checked)) var/output = "" - output = "[checked.name]" + output = span_bold("[checked.name]") while(checked.parent) output = "[checked.parent.name] \> [output]" checked = checked.parent diff --git a/code/modules/lore_codex/lore_data/main.dm b/code/modules/lore_codex/lore_data/main.dm index 7b43a25d5fd..7a263baf740 100644 --- a/code/modules/lore_codex/lore_data/main.dm +++ b/code/modules/lore_codex/lore_data/main.dm @@ -19,7 +19,7 @@ // We're a bird. /datum/lore/codex/page/about_lore name = "About" - data = "The Traveler's Guide to Human Space is a series of books detailing a specific location inside a location colonized by humans. \ + data = span_italics("The Traveler's Guide to Human Space") + " is a series of books detailing a specific location inside a location colonized by humans. \ This book is for the system Vir, and was written by Eshi Tache, an explorer whom has visited many star systems, and \ has personally visited and seen many of the locations described inside this book. Two other people have also assisted in the creation of this \ book, being Qooqr Volquum, whom is an expert on synthetics, and Damian Fischer, a historian. Together, they provide valuable information and facts that lie outside of Tache's expertise.\ @@ -28,5 +28,5 @@ to an immigrant from another system or even from outside human space, and anyone inbetween. The publisher wishes to note that any opinions expressed \ in this text does not reflect the opinions of the publisher, and are instead the author's.\

    \ - Eshi Tache has also written other The Traveler's Guide books, including Sol Edition, Tau Ceti Edition, Alpha Centauri Edition, and more, \ - which you can find in your local book store, library, or e-reader device." \ No newline at end of file + Eshi Tache has also written other " + span_italics("The Traveler's Guide") + " books, including " + span_italics("Sol Edition") + ", " + span_italics("Tau Ceti Edition") + ", " + span_italics("Alpha Centauri Edition") + ", and more, \ + which you can find in your local book store, library, or e-reader device." diff --git a/code/modules/lore_codex/lore_data_vr/important_locations.dm b/code/modules/lore_codex/lore_data_vr/important_locations.dm index ae87092212d..ddf3d4092cd 100644 --- a/code/modules/lore_codex/lore_data_vr/important_locations.dm +++ b/code/modules/lore_codex/lore_data_vr/important_locations.dm @@ -41,14 +41,14 @@ /datum/lore/codex/page/virgo_one/add_content() name = "Virgo 1 (Hot-Ice Giant)" keywords += list("Virgo 1") - data = "Virgo 1 is a tidally locked hot ice giant located closest to the star. Temperatures soar and drop between 490°K and 120°K. Winds on the planet often surpass \ + data = "Virgo 1 is a tidally locked hot ice giant located closest to the star. Temperatures soar and drop between 490°K and 120°K. Winds on the planet often surpass \ supersonic speeds." /datum/lore/codex/page/virgo_two/add_content() name = "Virgo 2 (Metal-Rich Planet)" keywords += list("Virgo 2") data = "The second closest planet to [quick_link("Virgo-Erigone")], this planet has a high concentration of minerals inside its crust, as well as active volcanism and plate tectonics. \ - The temperature on the surface can reach up to 405 degrees kelvin (132°C) due to the relatively high albedo of the surface, which has deterred most people from the planet, except for two [quick_link("TSC", "TSCs")], \ + The temperature on the surface can reach up to 405 degrees kelvin (132°C) due to the relatively high albedo of the surface, which has deterred most people from the planet, except for two [quick_link("TSC", "TSCs")], \ Greyson Manufactories and [quick_link("Xion Manufacturing Group")]. In orbit, the two companies each have a space station, used to coordinate and \ control their stations on the surface without having to suffer the intense heat. Xion's station also doubles as a control and oversight facility for their \ [quick_link("drones","autonomous mining drones")].\ @@ -88,7 +88,7 @@ /datum/lore/codex/page/virgo_prime/add_content() // Virgo 4 technically. name = "Virgo 4 / Virgo-Prime (Terrestrial Planet)" keywords += list("Virgo 4","Virgo-Prime") - data = "Virgo 4, also known as Virgo-Prime, is the fourth planet of Virgo-Eirgone. Although primarily desert, temperatures linger around only 287 kelvin (~14°C). \ + data = "Virgo 4, also known as Virgo-Prime, is the fourth planet of Virgo-Eirgone. Although primarily desert, temperatures linger around only 287 kelvin (~14°C). \ It is the only planet in the system with an environment that supports oxygen-breathing lifeforms. \

    \ While being about the size of Earth, it is home to only about 750,000 known residents, most of whom live \ @@ -103,7 +103,7 @@ /datum/lore/codex/page/virgo_five/add_content() name = "Virgo 5 (Rocky Ice Planet)" keywords += list("Virgo 5") - data = "Virgo 5 is a cold, inhospitable wasteland contaminated with toxic phoron-based compounds. At temperatures around 213 kelvin (-60°C), \ + data = "Virgo 5 is a cold, inhospitable wasteland contaminated with toxic phoron-based compounds. At temperatures around 213 kelvin (-60°C), \ it can support only the most hardy of phoron-based life, such as space carp, which are unaffected by the frigid temperatures or deadly \ atmosphere. Scientists believe this planet was once closer to its host star, but over time was pushed out beyond the habitable zone by \ other large planets." @@ -112,14 +112,14 @@ name = "The Outer Worlds" keywords += list("The Outer Worlds") data = "The last three planets in the system are two small rocky worlds, Virgo 6 and 7, and finally Virgo 8 which is a frozen gas giant \ - whose temperatures reach only 49°K. The planet has several moons, but none of these worlds are of any significance. Virgo 6 and 7, as well \ + whose temperatures reach only 49°K. The planet has several moons, but none of these worlds are of any significance. Virgo 6 and 7, as well \ as 8's moons have no substantial deposits of any useful minerals, nor do they have an abundance of phoron. They are left largely ignored by \ the local [quick_link("TSC", "TSCs")], though this also makes them a safe haven for various pirate and smuggler stations." /datum/lore/codex/page/virgo_central_command/add_content() name = "Virgo Central Command (Colony)" keywords += list("Virgo Central Command") - data = "This page has been ripped out. Odd." + data = span_italics("This page has been ripped out. Odd.") /*data = "The Virgo Central Command is a large facility on [quick_link("Virgo-3B")] which handles the loading and \ unloading, refuelling, and general maintenance of large spacecraft. The main structure is owned by \ [quick_link("NanoTrasen")], but individual offices, docking/loading bays, and warehouses are often leased to individuals \ @@ -140,4 +140,4 @@ largely unknown history.\

    \ Today it houses a population of civilians, whom work to maintain the facility and support the local mining industry. Employees often commute to the \ - installation via an underground transit network that links the facility to a neighboring colony." // ToDo: Add link to CentCom colony. \ No newline at end of file + installation via an underground transit network that links the facility to a neighboring colony." // ToDo: Add link to CentCom colony. diff --git a/code/modules/lore_codex/lore_data_vr/political_parties.dm b/code/modules/lore_codex/lore_data_vr/political_parties.dm index 1a768ff9e0b..e13f8395d30 100644 --- a/code/modules/lore_codex/lore_data_vr/political_parties.dm +++ b/code/modules/lore_codex/lore_data_vr/political_parties.dm @@ -1,6 +1,6 @@ /datum/lore/codex/category/political_factions name = "Political Factions" - data = "For some weird reason, this section is blank. This looks like a publishing error." + data = span_italics("For some weird reason, this section is blank. This looks like a publishing error.") /*data = "Those wishing to immigrate to somewhere in Virgo-Erigone, or otherwise plan to stay for a long time should get to know human politics. \ There are presently three major political parties that exist throughout SolGov space, being the Icarus Front, the Shadow Coalition, and \ the Sol Economic Organization, and several smaller ones which tend to align themselves among one of the major parties. In the Virgo-Erigone system, the \ @@ -12,4 +12,4 @@ /datum/lore/codex/page/blank/add_content() name = "Blank Page" keywords += list("Blank") - data = "For some weird reason, this section is blank. This looks like a publishing error." // ToDo: A lot. + data = span_italics("For some weird reason, this section is blank. This looks like a publishing error.") // ToDo: A lot. diff --git a/code/modules/makeup/nailpolish.dm b/code/modules/makeup/nailpolish.dm index ea91d064f8c..8fe3e12ac74 100644 --- a/code/modules/makeup/nailpolish.dm +++ b/code/modules/makeup/nailpolish.dm @@ -77,10 +77,10 @@ to_chat(user, span_notice("You can't find any nails on [body_part] to paint.")) return if(user == target) - user.visible_message("\The [user] paints their nails with \the [src].", "You paint your nails with \the [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " paints their nails with \the [src]."), span_infoplain("You paint your nails with \the [src].")) else if(do_after(user, 2 SECONDS, target)) - user.visible_message("\The [user] paints \the [target]'s nails with \the [src].", "You paint \the [target]'s nails with \the [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " paints \the [target]'s nails with \the [src]."), span_infoplain("You paint \the [target]'s nails with \the [src].")) else to_chat(user, span_notice("Both you and [target] must stay still!")) return @@ -124,10 +124,10 @@ to_chat(user, span_notice("[target]'s [body_part.name] has no nail polish to remove!")) return if(user == target) - user.visible_message("\The [user] removes their nail polish with \the [src].", "You remove your nail polish with \the [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " removes their nail polish with \the [src]."), span_infoplain("You remove your nail polish with \the [src].")) else if(do_after(user, 2 SECONDS, target)) - user.visible_message("\The [user] removes \the [target]'s nail polish with \the [src].", "You remove \the [target]'s nail polish with \the [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " removes \the [target]'s nail polish with \the [src]."), span_infoplain("You remove \the [target]'s nail polish with \the [src].")) else to_chat(user, span_notice("Both you and [target] must stay still!")) return diff --git a/code/modules/maps/tg/map_template.dm b/code/modules/maps/tg/map_template.dm index 3ae7d058557..f8aaca0276a 100644 --- a/code/modules/maps/tg/map_template.dm +++ b/code/modules/maps/tg/map_template.dm @@ -299,7 +299,7 @@ if(count > 1) pretty_submap_list += "[count] [submap_name]" else - pretty_submap_list += "[submap_name]" + pretty_submap_list += span_bold("[submap_name]") if(!overall_sanity) admin_notice("Submap loader gave up with [budget] left to spend.", R_DEBUG) diff --git a/code/modules/materials/sheets/metals/rods.dm b/code/modules/materials/sheets/metals/rods.dm index 427290b31d7..4363cb55c14 100644 --- a/code/modules/materials/sheets/metals/rods.dm +++ b/code/modules/materials/sheets/metals/rods.dm @@ -67,7 +67,7 @@ var/global/list/datum/stack_recipe/rods_recipes = list( \ var/obj/item/stack/medical/splint/ghetto/new_splint = new(get_turf(user)) new_splint.add_fingerprint(user) - user.visible_message("\The [user] constructs \a [new_splint] out of a [singular_name].", \ + user.visible_message(span_infoplain(span_bold("\The [user]") + " constructs \a [new_splint] out of a [singular_name]."), \ span_notice("You use make \a [new_splint] out of a [singular_name].")) src.use(1) return diff --git a/code/modules/materials/sheets/organic/tanning/hide.dm b/code/modules/materials/sheets/organic/tanning/hide.dm index bbac90c234b..c8918e8bc2a 100644 --- a/code/modules/materials/sheets/organic/tanning/hide.dm +++ b/code/modules/materials/sheets/organic/tanning/hide.dm @@ -1,7 +1,7 @@ /obj/item/stack/animalhide name = "hide" desc = "The hide of some creature." - description_info = "Use something sharp, like a knife, to scrape the hairs/feathers/etc off this hide to prepare it for tanning." + description_info = "Use something " + span_bold(span_red("sharp")) + ", like a knife, to scrape the hairs/feathers/etc off this hide to prepare it for tanning." icon_state = "sheet-hide" drop_sound = 'sound/items/drop/cloth.ogg' pickup_sound = 'sound/items/pickup/cloth.ogg' @@ -18,7 +18,7 @@ /obj/item/stack/animalhide/attackby(obj/item/W as obj, mob/user as mob) if(has_edge(W) || is_sharp(W)) //visible message on mobs is defined as visible_message(var/message, var/self_message, var/blind_message) - user.visible_message("\The [user] starts cutting hair off \the [src]", span_notice("You start cutting the hair off \the [src]"), "You hear the sound of a knife rubbing against flesh") + user.visible_message(span_infoplain(span_bold("\The [user]") + " starts cutting hair off \the [src]"), span_notice("You start cutting the hair off \the [src]"), "You hear the sound of a knife rubbing against flesh") var/scraped = 0 while(amount > 0 && do_after(user, 2.5 SECONDS, user)) //Try locating an exisitng stack on the tile and add to there if possible diff --git a/code/modules/materials/sheets/organic/tanning/hide_hairless.dm b/code/modules/materials/sheets/organic/tanning/hide_hairless.dm index edb36b9b867..3cf927a8255 100644 --- a/code/modules/materials/sheets/organic/tanning/hide_hairless.dm +++ b/code/modules/materials/sheets/organic/tanning/hide_hairless.dm @@ -3,7 +3,7 @@ /obj/item/stack/hairlesshide name = "hairless hide" desc = "This hide was stripped of it's hair, but still needs tanning." - description_info = "Get it wet to continue tanning this into leather.
    \ + description_info = "Get it " + span_bold(span_blue("wet")) + " to continue tanning this into leather.
    \ You could set it in a river, wash it with a sink, or just splash water on it with a bucket." singular_name = "hairless hide piece" icon_state = "sheet-hairlesshide" diff --git a/code/modules/materials/sheets/organic/tanning/leather_wet.dm b/code/modules/materials/sheets/organic/tanning/leather_wet.dm index be4d60570aa..070b45c7a3b 100644 --- a/code/modules/materials/sheets/organic/tanning/leather_wet.dm +++ b/code/modules/materials/sheets/organic/tanning/leather_wet.dm @@ -3,9 +3,9 @@ name = "wet leather" desc = "This leather has been cleaned but still needs to be dried." description_info = "To finish tanning the leather, you need to dry it. \ - You could place it under a fire, \ - put it in a drying rack, \ - or build a tanning rack from steel or wooden boards." + You could place it under a " + span_bold(span_red("fire")) + ", \ + put it in a " + span_bold(span_blue("drying rack")) + ", \ + or build a " + span_bold(span_brown("tanning rack")) + " from steel or wooden boards." singular_name = "wet leather piece" icon_state = "sheet-wetleather" var/wetness = 30 //Reduced when exposed to high temperautres diff --git a/code/modules/mentor/mentor.dm b/code/modules/mentor/mentor.dm index 66b95973959..370d80a3443 100644 --- a/code/modules/mentor/mentor.dm +++ b/code/modules/mentor/mentor.dm @@ -36,11 +36,11 @@ var/list/mentor_verbs_default = list( /client/proc/add_mentor_verbs() if(mentorholder) - verbs += mentor_verbs_default + add_verb(src, mentor_verbs_default) /client/proc/remove_mentor_verbs() if(mentorholder) - verbs -= mentor_verbs_default + remove_verb(src, mentor_verbs_default) /client/proc/make_mentor() set category = "Special Verbs" @@ -99,9 +99,9 @@ var/list/mentor_verbs_default = list( log_admin("Mentorsay: [key_name(src)]: [msg]") for(var/client/C in GLOB.mentors) - to_chat(C, create_text_tag("mentor", "MENTOR:", C) + " [src]: [msg]") + to_chat(C, create_text_tag("mentor", "MENTOR:", C) + " " + span_mentor_channel(span_name("[src]") + ": " + span_message("[msg]"))) for(var/client/C in GLOB.admins) - to_chat(C, create_text_tag("mentor", "MENTOR:", C) + " [src]: [msg]") + to_chat(C, create_text_tag("mentor", "MENTOR:", C) + " " + span_mentor_channel(span_name("[src]") + ": " + span_message("[msg]"))) /proc/mentor_commands(href, href_list, client/C) if(href_list["mhelp"]) diff --git a/code/modules/mentor/mentorhelp.dm b/code/modules/mentor/mentorhelp.dm index 7bf6ef57db6..cbf457083ad 100644 --- a/code/modules/mentor/mentorhelp.dm +++ b/code/modules/mentor/mentorhelp.dm @@ -55,23 +55,28 @@ GLOBAL_DATUM_INIT(mhelp_tickets, /datum/mentor_help_tickets, new) var/list/dat = list("[title]") dat += "Refresh

    " for(var/datum/mentor_help/MH as anything in l2b) - dat += "Ticket #[MH.id]: [MH.initiator_ckey]: [MH.name]
    " + dat += span_adminnotice(span_adminhelp("Ticket #[MH.id]") + " [MH.initiator_ckey]: [MH.name]") + "
    " usr << browse(dat.Join(), "window=mhelp_list[state];size=600x480") //Tickets statpanel /datum/mentor_help_tickets/proc/stat_entry() + SHOULD_CALL_PARENT(TRUE) + SHOULD_NOT_SLEEP(TRUE) + var/list/L = list() var/num_disconnected = 0 - stat("== Mentor Tickets ==") - stat("Active Tickets:", astatclick.update("[active_tickets.len]")) + L[++L.len] = list("== Mentor Tickets ==", "", null, null) + L[++L.len] = list("Active Tickets:", "[astatclick.update("[active_tickets.len]")]", null, REF(astatclick)) + astatclick.update("[active_tickets.len]") for(var/datum/mentor_help/MH as anything in active_tickets) if(MH.initiator) - stat("#[MH.id]. [MH.initiator_ckey]:", MH.statclick.update()) + L[++L.len] = list("#[MH.id]. [MH.initiator_ckey]:", "[MH.statclick.update()]", REF(MH)) else ++num_disconnected if(num_disconnected) - stat("Disconnected:", astatclick.update("[num_disconnected]")) - stat("Resolved Tickets:", rstatclick.update("[resolved_tickets.len]")) + L[++L.len] = list("Disconnected:", "[astatclick.update("[num_disconnected]")]", null, REF(astatclick)) + L[++L.len] = list("Resolved Tickets:", "[rstatclick.update("[resolved_tickets.len]")]", null, REF(rstatclick)) + return L //Reassociate still open ticket if one exists /datum/mentor_help_tickets/proc/ClientLogin(client/C) @@ -158,7 +163,7 @@ GLOBAL_DATUM_INIT(mhelp_tickets, /datum/mentor_help_tickets, new) log_admin("Mentorhelp: [key_name(C)]: [msg]") MessageNoRecipient(msg) //show it to the person adminhelping too - to_chat(C, "Mentor-PM to-Mentors: [name]") + to_chat(C, span_mentor(span_italics("Mentor-PM to-" + span_bold("Mentors") + ": [name]"))) GLOB.mhelp_tickets.active_tickets += src @@ -282,9 +287,9 @@ GLOBAL_DATUM_INIT(mhelp_tickets, /datum/mentor_help_tickets, new) dat += "
    Closed at: [gameTimestamp(wtime = closed_at)] (Approx [(world.time - closed_at) / 600] minutes ago)" dat += "

    " if(initiator) - dat += "Actions: [Context(ref_src)]
    " + dat += span_bold("Actions:") + " [Context(ref_src)]
    " else - dat += "DISCONNECTED[GLOB.TAB][ClosureLinks(ref_src)]
    " + dat += span_bold("DISCONNECTED") + "[GLOB.TAB][ClosureLinks(ref_src)]
    " dat += "
    Log:

    " for(var/I in _interactions) dat += "[I]
    " @@ -439,9 +444,9 @@ GLOBAL_DATUM_INIT(mhelp_tickets, /datum/mentor_help_tickets, new) "Send to discord?", list("Admin-help!", "Still mentorhelp!", "Cancel")) if(choice == "Admin-help!") usr.client.adminhelp(msg) - src.verbs -= /client/verb/mentorhelp + remove_verb(src, /client/verb/mentorhelp) spawn(1200) - src.verbs += /client/verb/mentorhelp // 2 minute cd to prevent abusing this to spam admins. + add_verb(src, /client/verb/mentorhelp) // 2 minute cd to prevent abusing this to spam admins. return else if(!choice || choice == "Cancel") return @@ -449,9 +454,9 @@ GLOBAL_DATUM_INIT(mhelp_tickets, /datum/mentor_help_tickets, new) //remove out adminhelp verb temporarily to prevent spamming of admins. - src.verbs -= /client/verb/mentorhelp + remove_verb(src, /client/verb/mentorhelp) spawn(600) - src.verbs += /client/verb/mentorhelp // 1 minute cool-down for mentorhelps + add_verb(src, /client/verb/mentorhelp) // 1 minute cool-down for mentorhelps feedback_add_details("admin_verb","Mentorhelp") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! if(current_mentorhelp) diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm index 3b28e393239..99245eb39df 100644 --- a/code/modules/mining/drilling/drill.dm +++ b/code/modules/mining/drilling/drill.dm @@ -273,12 +273,12 @@ if(use_cell_power()) active = !active if(active) - visible_message("\The [src] lurches downwards, grinding noisily.") + visible_message(span_infoplain(span_bold("\The [src]") + " lurches downwards, grinding noisily.")) need_update_field = 1 harvest_speed *= total_brace_tier charge_use *= total_brace_tier else - visible_message("\The [src] shudders to a grinding halt.") + visible_message(span_infoplain(span_bold("\The [src]") + " shudders to a grinding halt.")) else to_chat(user, span_notice("The drill is unpowered.")) else @@ -356,7 +356,7 @@ /obj/machinery/mining/drill/proc/system_error(var/error) if(error) - src.visible_message("\The [src] flashes a '[error]' warning.") + src.visible_message(span_infoplain(span_bold("\The [src]") + " flashes a '[error]' warning.")) faultreporter.autosay(error, src.name, "Supply", using_map.get_map_levels(z)) need_player_check = 1 active = 0 diff --git a/code/modules/mining/drilling/scanner.dm b/code/modules/mining/drilling/scanner.dm index 203f72861a6..85046260531 100644 --- a/code/modules/mining/drilling/scanner.dm +++ b/code/modules/mining/drilling/scanner.dm @@ -51,7 +51,7 @@ if(ore_type) metals[ore_type] += T.resources[metal] - var/message = "[icon2html(src, user.client)] The scanner beeps and displays a readout." + var/message = "[icon2html(src, user.client)] " + span_notice("The scanner beeps and displays a readout.") for(var/ore_type in metals) var/result = "no sign" @@ -65,7 +65,7 @@ else result = metals[ore_type] - message += "
    - [result] of [ore_type]." + message += "
    " + span_notice("- [result] of [ore_type].") to_chat(user, message) diff --git a/code/modules/mining/kinetic_crusher.dm b/code/modules/mining/kinetic_crusher.dm index 4fe6d9607b0..06ab146ec6b 100644 --- a/code/modules/mining/kinetic_crusher.dm +++ b/code/modules/mining/kinetic_crusher.dm @@ -27,8 +27,7 @@ sharp = TRUE edge = TRUE // sharpness = SHARP_EDGED - action_button_name = "Toggle Light" - // actions_types = list(/datum/action/item_action/toggle_light) + actions_types = list(/datum/action/item_action/toggle_light) // var/list/trophies = list() var/charged = TRUE var/charge_time = 15 @@ -315,7 +314,7 @@ /obj/item/kinetic_crusher/machete/gauntlets/proc/wield(var/mob/living/M) name = initial(name) wielded = TRUE - to_chat(M, "You ready [src].") + to_chat(M, span_notice("You ready [src].")) var/obj/item/offhand/crushergauntlets/O = new(M) O.name = "[name] - readied" O.desc = "As much as you'd like to punch things with one hand, [src] is far too unwieldy for that." @@ -324,7 +323,7 @@ offhand = O /obj/item/kinetic_crusher/machete/gauntlets/proc/unwield(var/mob/living/M) - to_chat(M, "You unready [src].") + to_chat(M, span_notice("You unready [src].")) name = "[initial(name)] (unreadied)" wielded = FALSE if(offhand) @@ -350,7 +349,7 @@ var/obj/item/rig_module/gauntlets/storing_module /obj/item/kinetic_crusher/machete/gauntlets/rig/dropped(mob/user) - . = ..() + . = ..(user) if(storing_module) src.forceMove(storing_module) storing_module.stored_gauntlets = src diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 37f70949675..25c3e3d30a7 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -245,7 +245,7 @@ upright = 0 icon_state = base_state anchored = FALSE - src.visible_message("[user] knocks down [src].") + src.visible_message(span_infoplain(span_bold("[user]") + " knocks down [src].")) else ..() @@ -268,5 +268,5 @@ newflag.anchored = TRUE newflag.name = newflag.singular_name newflag.icon_state = "[newflag.base_state]_open" - newflag.visible_message("[user] plants [newflag] firmly in the ground.") + newflag.visible_message(span_infoplain(span_bold("[user]") + " plants [newflag] firmly in the ground.")) src.use(1) diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index a427121551a..3bab28eae20 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -426,7 +426,7 @@ var/list/mining_overlay_cache = list() if (istype(W, /obj/item/measuring_tape)) var/obj/item/measuring_tape/P = W - user.visible_message("\The [user] extends \a [P] towards \the [src].",span_notice("You extend \the [P] towards \the [src].")) + user.visible_message(span_infoplain(span_bold("\The [user]") + " extends \a [P] towards \the [src]."),span_notice("You extend \the [P] towards \the [src].")) if(do_after(user, 15)) to_chat(user, span_notice("\The [src] has been excavated to a depth of [excavation_level]cm.")) return @@ -436,7 +436,7 @@ var/list/mining_overlay_cache = list() if(C.mode) //Mode means scanning C.depth_scanner.scan_atom(user, src) else - user.visible_message("\The [user] extends \the [C] over \the [src], a flurry of red beams scanning \the [src]'s surface!", span_notice("You extend \the [C] over \the [src], a flurry of red beams scanning \the [src]'s surface!")) + user.visible_message(span_infoplain(span_bold("\The [user]") + " extends \the [C] over \the [src], a flurry of red beams scanning \the [src]'s surface!"), span_notice("You extend \the [C] over \the [src], a flurry of red beams scanning \the [src]'s surface!")) if(do_after(user, 15)) to_chat(user, span_notice("\The [src] has been excavated to a depth of [excavation_level]cm.")) return diff --git a/code/modules/mob/_modifiers/cloning.dm b/code/modules/mob/_modifiers/cloning.dm index 029a82c86c5..f6c0493170e 100644 --- a/code/modules/mob/_modifiers/cloning.dm +++ b/code/modules/mob/_modifiers/cloning.dm @@ -7,8 +7,8 @@ name = "cloning sickness" desc = "You feel rather weak, having been cloned not so long ago." - on_created_text = span_warning("You feel really weak.") - on_expired_text = span_notice("You feel your strength returning to you.") + on_created_text = span_warning(span_large("You feel really weak.")) + on_expired_text = span_notice(span_large("You feel your strength returning to you.")) max_health_percent = 0.6 // -40% max health. incoming_damage_percent = 1.1 // 10% more incoming damage. @@ -52,8 +52,8 @@ name = "reformation sickness" desc = "Your core feels damaged, as you were reformed with the improper machinery." - on_created_text = span_warning("Your core aches.") - on_expired_text = span_notice("You feel your core's strength returning to normal.") + on_created_text = span_warning(span_large("Your core aches.")) + on_expired_text = span_notice(span_large("You feel your core's strength returning to normal.")) incoming_damage_percent = 1 //Level the incoming damage from the parent modifier. They already take 200% burn. incoming_brute_damage_percent = 1.5 //150% incoming brute damage. Decreases the effectiveness of their 0.75 modifier. @@ -70,8 +70,8 @@ name = "surgically attached brain" desc = "You feel weak, as your central nervous system is still recovering from being repaired." - on_created_text = span_warning("You feel... off, and your head hurts.") - on_expired_text = span_notice("You feel some strength returning to you.") + on_created_text = span_warning(span_large("You feel... off, and your head hurts.")) + on_expired_text = span_notice(span_large("You feel some strength returning to you.")) max_health_percent = 0.9 // -10% max health. incoming_damage_percent = 1.1 // 10% more incoming damage. @@ -107,8 +107,8 @@ name = "neural recovery" desc = "You feel out of touch, as your central nervous system is still recovering from being repaired." - on_created_text = span_warning("You feel... off. Everything is fuzzy.") - on_expired_text = span_notice("You feel your senses returning to you.") + on_created_text = span_warning(span_large("You feel... off. Everything is fuzzy.")) + on_expired_text = span_notice(span_large("You feel your senses returning to you.")) incoming_hal_damage_percent = 1.5 // 50% more halloss damage. disable_duration_percent = 1.25 // Stuns last 25% longer. diff --git a/code/modules/mob/_modifiers/modifiers_misc.dm b/code/modules/mob/_modifiers/modifiers_misc.dm index 642dc22214c..7a7df3dcce9 100644 --- a/code/modules/mob/_modifiers/modifiers_misc.dm +++ b/code/modules/mob/_modifiers/modifiers_misc.dm @@ -175,8 +175,8 @@ the artifact triggers the rage. client_color = "#FF0000" // Make everything red! mob_overlay_state = "berserk" - on_created_text = "You feel an intense and overwhelming rage overtake you as you go berserk! \ - Unfortunately, your lifeless body cannot benefit from this. You feel reckless..." + on_created_text = span_danger("You feel an intense and overwhelming rage overtake you as you go berserk! \ + Unfortunately, your lifeless body cannot benefit from this. You feel reckless...") on_expired_text = span_notice("The blaze of rage inside your mind has ran out.") stacks = MODIFIER_STACK_EXTEND diff --git a/code/modules/mob/_modifiers/traits_phobias.dm b/code/modules/mob/_modifiers/traits_phobias.dm index 7a5e1de53b4..17a8454204d 100644 --- a/code/modules/mob/_modifiers/traits_phobias.dm +++ b/code/modules/mob/_modifiers/traits_phobias.dm @@ -64,8 +64,8 @@ on_expired_text = span_notice("You feel that blood doesn't bother you, at least, as much as it used to.") zero_fear_up = list( - span_warning("You see some blood nearby..."), - span_warning("You try to avoid looking at the blood nearby.") + span_warning(span_large("You see some blood nearby...")), + span_warning(span_large("You try to avoid looking at the blood nearby.")) ) zero_fear_down = list( span_notice("You feel better now, with no blood in sight."), @@ -74,8 +74,8 @@ ) half_fear_up = list( - span_danger("You're still near the blood!"), - span_danger("So much blood... You can't stand it.") + span_danger(span_large("You're still near the blood!")), + span_danger(span_large("So much blood... You can't stand it.")) ) half_fear_down = list( span_warning("The blood is gone now, but you're still worked up."), @@ -83,9 +83,9 @@ ) full_fear_up = list( - span_danger("The blood is too much!"), - span_danger("There is so much blood here, you need to leave!"), - span_danger("You gotta get away from the blood!") + span_danger(span_huge("The blood is too much!")), + span_danger(span_huge("There is so much blood here, you need to leave!")), + span_danger(span_huge("You gotta get away from the blood!")) ) full_fear_down = list( span_danger("The blood is gone, but you're still very anxious."), @@ -165,8 +165,8 @@ on_expired_text = span_notice("You feel that your fear of spiders has gone from 'crippling' to 'nope nope nope', which is still an improvement.") zero_fear_up = list( - span_warning("You see a spider!"), - span_warning("Spider!") + span_warning(span_large("You see a spider!")), + span_warning(span_large("Spider!")) ) zero_fear_down = list( span_notice("Those evil spiders are finally gone."), @@ -175,9 +175,9 @@ ) half_fear_up = list( - span_danger("The spiders are gonna eat you!"), - span_danger("The spiders are still here!"), - span_danger("The spiders will lay eggs inside you if you don't run!"), + span_danger(span_large("The spiders are gonna eat you!")), + span_danger(span_large("The spiders are still here!")), + span_danger(span_large("The spiders will lay eggs inside you if you don't run!")), ) half_fear_down = list( span_warning("The spiders are gone... right?"), @@ -185,9 +185,9 @@ ) full_fear_up = list( - span_danger("The chittering is driving you mad!"), - span_danger("You're gonna be spider-food if you don't run!"), - span_danger("The spiders are gonna feast on your eyes!") + span_danger(span_huge("The chittering is driving you mad!")), + span_danger(span_huge("You're gonna be spider-food if you don't run!")), + span_danger(span_huge("The spiders are gonna feast on your eyes!")) ) full_fear_down = list( span_danger("The spiders must surely be hiding somewhere..."), @@ -238,8 +238,8 @@ var/fear_threshold = 0.5 // Average lighting needs to be below this to start increasing fear. zero_fear_up = list( - span_warning("It's so dark here!"), - span_warning("It's too dark!") + span_warning(span_large("It's so dark here!")), + span_warning(span_large("It's too dark!")) ) zero_fear_down = list( span_notice("You feel calmer, now that you're in the light."), @@ -248,9 +248,9 @@ ) half_fear_up = list( - span_danger("You need to escape this darkness!"), - span_danger("Something might be lurking near you, but you can't see in this darkness."), - span_danger("You need to find a light!"), + span_danger(span_large("You need to escape this darkness!")), + span_danger(span_large("Something might be lurking near you, but you can't see in this darkness.")), + span_danger(span_large("You need to find a light!")), ) half_fear_down = list( span_warning("The darkness is gone, for now..."), @@ -258,8 +258,8 @@ ) full_fear_up = list( - span_danger("What was that?"), - span_danger("Something is nearby...") + span_danger(span_huge("What was that?")), + span_danger(span_huge("Something is nearby...")) ) full_fear_down = list( span_danger("Light, at last!"), @@ -315,8 +315,8 @@ on_expired_text = span_notice("Small rooms aren't so bad now.") zero_fear_up = list( - span_warning("This room is too small..."), - span_warning("The walls are too close together...") + span_warning(span_large("This room is too small...")), + span_warning(span_large("The walls are too close together...")) ) zero_fear_down = list( span_notice("You feel calmer, now that you're in a larger room."), @@ -325,9 +325,9 @@ ) half_fear_up = list( - span_danger("Your surroundings look like they are closing in."), - span_danger("Is the room getting smaller?"), - span_danger("You need to get out of here!"), + span_danger(span_large("Your surroundings look like they are closing in.")), + span_danger(span_large("Is the room getting smaller?")), + span_danger(span_large("You need to get out of here!")), ) half_fear_down = list( span_warning("Your surroundings seem to have stopped closing in."), @@ -335,8 +335,8 @@ ) full_fear_up = list( - span_danger("You need to escape!"), - span_danger("There's barely any room to move around!") + span_danger(span_huge("You need to escape!")), + span_danger(span_huge("There's barely any room to move around!")) ) full_fear_down = list( span_danger("The surroundings stop shrinking."), @@ -380,8 +380,8 @@ on_expired_text = span_notice("You feel more... okay with slime.") zero_fear_up = list( - span_warning("That's some slime!"), - span_warning("There's slime right there!") + span_warning(span_large("That's some slime!")), + span_warning(span_large("There's slime right there!")) ) zero_fear_down = list( span_notice("The slime is out of sight and out of mind."), @@ -389,8 +389,8 @@ ) half_fear_up = list( - span_danger("The slimes might strike at any point!"), - span_danger("The slime is still there!") + span_danger(span_large("The slimes might strike at any point!")), + span_danger(span_large("The slime is still there!")) ) half_fear_down = list( span_warning("The slime is gone... right?"), @@ -398,8 +398,8 @@ ) full_fear_up = list( - span_danger("The slime is everywhere!"), - span_danger("You're gonna get absorbed if you don't get out!") + span_danger(span_huge("The slime is everywhere!")), + span_danger(span_huge("You're gonna get absorbed if you don't get out!")) ) full_fear_down = list( span_danger("There must be more of that slime somewhere..."), @@ -475,8 +475,8 @@ zero_fear_up = list( - span_warning("That's a needle!"), - span_warning("There's a needle right there!") + span_warning(span_large("That's a needle!")), + span_warning(span_large("There's a needle right there!")) ) zero_fear_down = list( span_notice("The needle is gone, no need to worry."), @@ -484,8 +484,8 @@ ) half_fear_up = list( - span_danger("The needle could get you at any time!"), - span_danger("The needle is still there!") + span_danger(span_large("The needle could get you at any time!")), + span_danger(span_large("The needle is still there!")) ) half_fear_down = list( span_warning("There are no more needles... right?"), @@ -493,8 +493,8 @@ ) full_fear_up = list( - span_danger("The needles are going to pierce you!"), - span_danger("They could get you any second!") + span_danger(span_huge("The needles are going to pierce you!")), + span_danger(span_huge("They could get you any second!")) ) full_fear_down = list( span_danger("There are more needles around, you can feel it..."), @@ -586,7 +586,7 @@ if(xenos.len) var/chosen_xeno = pick(xenos) - to_chat(holder, span_warning("[make_message(chosen_xeno)]")) + to_chat(holder, span_warning(span_large("[make_message(chosen_xeno)]"))) return TRUE else return FALSE // No xenos in sight, so don't apply the cooldown. diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 9a817a3b221..c87e4d2e852 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -173,7 +173,7 @@ . = ..() if(is_admin(user)) - . += "\t>[ADMIN_FULLMONTY(src)]" + . += "\t>" + span_admin("[ADMIN_FULLMONTY(src)]") /* Transfer_mind is there to check if mob is being deleted/not going to have a body. @@ -208,7 +208,7 @@ Works together with spawning an observer, noted above. if(ghost.client) ghost.client.time_died_as_mouse = ghost.timeofdeath if(ghost.client && !ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed. - ghost.verbs -= /mob/observer/dead/verb/toggle_antagHUD // Poor guys, don't know what they are missing! + remove_verb(ghost, /mob/observer/dead/verb/toggle_antagHUD) // Poor guys, don't know what they are missing! return ghost /* @@ -249,13 +249,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/observer/dead/can_use_hands() return 0 /mob/observer/dead/is_active() return 0 -/mob/observer/dead/Stat() - ..() - if(statpanel("Status")) - if(emergency_shuttle) - var/eta_status = emergency_shuttle.get_status_panel_eta() - if(eta_status) - stat(null, eta_status) +/mob/observer/dead/get_status_tab_items() + . = ..() + if(emergency_shuttle) + var/eta_status = emergency_shuttle.get_status_panel_eta() + if(eta_status) + . += "" + . += "[eta_status]" /mob/observer/dead/verb/reenter_corpse() set category = "Ghost" @@ -302,7 +302,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp medHUD = !medHUD plane_holder.set_vis(VIS_CH_HEALTH, medHUD) plane_holder.set_vis(VIS_CH_STATUS_OOC, medHUD) - to_chat(src, span_notice("Medical HUD [medHUD ? "Enabled" : "Disabled"]")) + to_chat(src, span_boldnotice("Medical HUD [medHUD ? "Enabled" : "Disabled"]")) /mob/observer/dead/verb/toggle_secHUD() set category = "Ghost" @@ -315,7 +315,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp plane_holder.set_vis(VIS_CH_IMPTRACK, secHUD) plane_holder.set_vis(VIS_CH_IMPLOYAL, secHUD) plane_holder.set_vis(VIS_CH_IMPCHEM, secHUD) - to_chat(src, span_notice("Security HUD [secHUD ? "Enabled" : "Disabled"]")) + to_chat(src, span_boldnotice("Security HUD [secHUD ? "Enabled" : "Disabled"]")) /mob/observer/dead/verb/toggle_antagHUD() set category = "Ghost" @@ -323,10 +323,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp set desc = "Toggles AntagHUD allowing you to see who is the antagonist" if(!config.antag_hud_allowed && !client.holder) - to_chat(src, span_filter_notice("[span_red("Admins have disabled this for this round.")]")) + to_chat(src, span_filter_notice(span_red("Admins have disabled this for this round."))) return if(jobban_isbanned(src, JOB_ANTAGHUD)) - to_chat(src, span_filter_notice("[span_red("You have been banned from using this feature")]")) + to_chat(src, span_filter_notice(span_red(span_bold("You have been banned from using this feature")))) return if(config.antag_hud_restricted && !has_enabled_antagHUD && !client.holder) var/response = tgui_alert(src, "If you turn this on, you will not be able to take any part in the round.","Are you sure you want to turn this feature on?",list("Yes","No")) @@ -338,7 +338,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp antagHUD = !antagHUD plane_holder.set_vis(VIS_CH_SPECIAL, antagHUD) - to_chat(src, span_notice("AntagHUD [antagHUD ? "Enabled" : "Disabled"]")) + to_chat(src, span_boldnotice("AntagHUD [antagHUD ? "Enabled" : "Disabled"]")) /mob/observer/dead/proc/jumpable_areas() var/list/areas = return_sorted_areas() @@ -599,11 +599,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/observer/dead/memory() set hidden = 1 - to_chat(src, span_filter_notice("[span_red("You are dead! You have no mind to store memory!")]")) + to_chat(src, span_filter_notice(span_red("You are dead! You have no mind to store memory!"))) /mob/observer/dead/add_memory() set hidden = 1 - to_chat(src, span_filter_notice("[span_red("You are dead! You have no mind to store memory!")]")) + to_chat(src, span_filter_notice(span_red("You are dead! You have no mind to store memory!"))) /mob/observer/dead/Post_Incorpmove() stop_following() @@ -623,7 +623,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp var/pressure = environment.return_pressure() var/total_moles = environment.total_moles var/list/gas_analyzing = list() - gas_analyzing += "Results:" + gas_analyzing += span_bold("Results:") if(abs(pressure - ONE_ATMOSPHERE) < 10) gas_analyzing += "Pressure: [round(pressure,0.1)] kPa" else @@ -723,7 +723,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp set desc = "If the round is sufficiently spooky, write a short message in blood on the floor or a wall. Remember, no IC in OOC or OOC in IC." if(!(config.cult_ghostwriter)) - to_chat(src, span_filter_notice("[span_red("That verb is not currently permitted.")]")) + to_chat(src, span_filter_notice(span_red("That verb is not currently permitted."))) return if (!src.stat) @@ -738,7 +738,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp ghosts_can_write = 1 if(!ghosts_can_write && !check_rights(R_ADMIN|R_EVENT|R_FUN, 0)) //Let's allow for admins to write in blood for events and the such. - to_chat(src, span_filter_notice("[span_red("The veil is not thin enough for you to do that.")]")) + to_chat(src, span_filter_notice(span_red("The veil is not thin enough for you to do that."))) return var/list/choices = list() @@ -747,7 +747,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp choices += B if(!choices.len) - to_chat(src, "There is no blood to use nearby.") + to_chat(src, span_warning("There is no blood to use nearby.")) return var/obj/effect/decal/cleanable/blood/choice = tgui_input_list(src, "What blood would you like to use?", "Blood Choice", choices) @@ -788,19 +788,19 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp W.update_icon() W.message = message W.add_hiddenprint(src) - W.visible_message(span_filter_notice("[span_red("Invisible fingers crudely paint something in blood on [T]...")]")) + W.visible_message(span_filter_notice(span_red("Invisible fingers crudely paint something in blood on [T]..."))) /mob/observer/dead/pointed(atom/A as mob|obj|turf in view()) if(!..()) return 0 - usr.visible_message(span_deadsay("[src] points to [A].")) + usr.visible_message(span_deadsay(span_bold("[src]") + " points to [A].")) return 1 /mob/observer/dead/proc/manifest(mob/user) is_manifest = TRUE - verbs |= /mob/observer/dead/proc/toggle_visibility - verbs |= /mob/observer/dead/proc/ghost_whisper - to_chat(src, span_filter_notice("[span_purple("As you are now in the realm of the living, you can whisper to the living with the Spectral Whisper verb, inside the IC tab.")]")) + add_verb(src, /mob/observer/dead/proc/toggle_visibility) + add_verb(src, /mob/observer/dead/proc/ghost_whisper) + to_chat(src, span_filter_notice(span_purple("As you are now in the realm of the living, you can whisper to the living with the " + span_bold("Spectral Whisper") + " verb, inside the IC tab."))) if(plane != PLANE_WORLD) user.visible_message( \ span_warning("\The [user] drags ghost, [src], to our plane of reality!"), \ diff --git a/code/modules/mob/death.dm b/code/modules/mob/death.dm index af0b51e28a6..41e1c7824fb 100644 --- a/code/modules/mob/death.dm +++ b/code/modules/mob/death.dm @@ -76,7 +76,7 @@ facing_dir = null if(!gibbed && deathmessage != DEATHGASP_NO_MESSAGE) - src.visible_message("\The [src.name] [deathmessage]") + src.visible_message(span_infoplain(span_bold("\The [src.name]") + " [deathmessage]")) set_stat(DEAD) diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index 4826fe06982..6f50d8bbdf3 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -32,6 +32,6 @@ if(input) log_ghostemote(input, src) if(!invisibility) //If the ghost is made visible by admins or cult. And to see if the ghost has toggled its own visibility, as well. -Mech - visible_message(span_deadsay("[src] [input]")) + visible_message(span_deadsay(span_bold("[src]") + " [input]")) else say_dead_direct(input, src) diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index 5fc440faf0b..1ad8ceb73cd 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -99,7 +99,7 @@ return FALSE if(italics) - message = "[message]" + message = span_italics("[message]") message = encode_html_emphasis(message) @@ -109,7 +109,7 @@ speaker_name = "[speaker.real_name] ([speaker_name])" track = "([ghost_follow_link(speaker, src)]) " if(client?.prefs?.read_preference(/datum/preference/toggle/ghost_ears) && (speaker in view(src))) - message = "[message]" + message = span_bold("[message]") if(is_deaf()) if(speaker == src) @@ -228,7 +228,7 @@ time = say_timestamp() var/final_message = "[part_b][speaker_name][part_c][formatted][part_d]" if(check_mentioned(formatted) && client?.prefs?.read_preference(/datum/preference/toggle/check_mention)) - final_message = "[time][part_a][final_message][part_e]" + final_message = "[time][part_a]" + span_large(span_bold("[final_message]")) + "[part_e]" else final_message = "[time][part_a][final_message][part_e]" to_chat(src, final_message) @@ -239,7 +239,7 @@ time = say_timestamp() var/final_message = "[part_b][track][part_c][formatted][part_d]" if(check_mentioned(formatted) && client?.prefs?.read_preference(/datum/preference/toggle/check_mention)) - final_message = "[time][part_a][final_message][part_e]" + final_message = "[time][part_a]" + span_large(span_bold("[final_message]")) + "[part_e]" else final_message = "[time][part_a][final_message][part_e]" to_chat(src, final_message) @@ -250,7 +250,7 @@ time = say_timestamp() var/final_message = "[part_b][speaker_name][part_c][formatted][part_d]" if(check_mentioned(formatted) && client?.prefs?.read_preference(/datum/preference/toggle/check_mention)) - final_message = "[time][part_a][final_message][part_e]" + final_message = "[time][part_a]" + span_large(span_bold("[final_message]")) + "[part_e]" else final_message = "[time][part_a][final_message][part_e]" to_chat(src, final_message) @@ -261,7 +261,7 @@ time = say_timestamp() var/final_message = "[part_b][track][part_c][formatted][part_d]" if(check_mentioned(formatted) && client?.prefs?.read_preference(/datum/preference/toggle/check_mention)) - final_message = "[time][part_a][final_message][part_e]" + final_message = "[time][part_a]" + span_large(span_bold("[final_message]")) + "[part_e]" else final_message = "[time][part_a][final_message][part_e]" to_chat(src, final_message) @@ -271,7 +271,7 @@ return if(say_understands(speaker, language)) - message = span_game(span_say("[speaker] [verb_understood], \"[message]\"")) + message = span_game(span_say(span_bold("[speaker]") + " [verb_understood], \"[message]\"")) else if(!(language.ignore_adverb)) var/adverb var/length = length(message) * pick(0.8, 0.9, 1.0, 1.1, 1.2) //Adds a little bit of fuzziness @@ -281,9 +281,9 @@ if(30 to 48) adverb = " a message" if(48 to 90) adverb = " a lengthy message" else adverb = " a very lengthy message" - message = span_game(span_say("[speaker] [verb][adverb].")) + message = span_game(span_say(span_bold("[speaker]") + " [verb][adverb].")) else - message = span_game(span_say("[speaker] [verb].")) + message = span_game(span_say(span_bold("[speaker]") + " [verb].")) show_message(message, type = speech_type) // Type 1 is visual message @@ -301,7 +301,7 @@ heard = span_game(span_say("...You hear something about...[heardword]")) else - heard = span_game(span_say("...You almost hear someone talking...")) + heard = span_game(span_say("..." + span_italics("You almost hear someone talking") + "...")) to_chat(src, heard) diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index 7e59c103de8..7910d1594bb 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -32,6 +32,41 @@ var/list/holder_mob_icon_cache = list() held.reset_view(src) START_PROCESSING(SSobj, src) +/mob/living/get_status_tab_items() + . = ..() + if(. && istype(loc, /obj/item/holder)) + var/location = "" + var/obj/item/holder/H = loc + if(ishuman(H.loc)) + var/mob/living/carbon/human/HH = H.loc + if(HH.l_hand == H) + location = "[HH]'s left hand" + else if(HH.r_hand == H) + location = "[HH]'s right hand" + else if(HH.r_store == H || HH.l_store == H) + location = "[HH]'s pocket" + else if(HH.head == H) + location = "[HH]'s head" + else if(HH.shoes == H) + location = "[HH]'s feet" + else + location = "[HH]" + else if(ismob(H.loc)) + var/mob/living/M = H.loc + if(M.l_hand == H) + location = "[M]'s left hand" + else if(M.r_hand == H) + location = "[M]'s right hand" + else + location = "[M]" + else if(ismob(H.loc.loc)) + location = "[H.loc.loc]'s [H.loc]" + else + location = "[H.loc]" + if (location != "") + . += "" + . += "Location: [location]" + /obj/item/holder/Entered(mob/held, atom/OldLoc) if(held_mob) held.forceMove(get_turf(src)) diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 716ef2afaee..41defb12b33 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -208,12 +208,6 @@ var/list/slot_equipment_priority = list( \ /mob/proc/temporarilyRemoveItemFromInventory(obj/item/I, force = FALSE, idrop = TRUE) return u_equip(I, force, null, TRUE, idrop) -///sometimes we only want to grant the item's action if it's equipped in a specific slot. -/obj/item/proc/item_action_slot_check(slot, mob/user) - if(slot == SLOT_BACK || slot == LEGS) //these aren't true slots, so avoid granting actions there - return FALSE - return TRUE - ///Get the item on the mob in the storage slot identified by the id passed in /mob/proc/get_item_by_slot(slot_id) return null diff --git a/code/modules/mob/language/language.dm b/code/modules/mob/language/language.dm index ca21339f8e7..a295bea93a0 100644 --- a/code/modules/mob/language/language.dm +++ b/code/modules/mob/language/language.dm @@ -130,7 +130,7 @@ /datum/language/proc/broadcast(var/mob/living/speaker,var/message,var/speaker_mask) log_say("(HIVE) [message]", speaker) - speaker.verbs |= /mob/proc/adjust_hive_range + add_verb(speaker, /mob/proc/adjust_hive_range) if(!speaker_mask) speaker_mask = speaker.real_name message = "[get_spoken_verb(message)], \"[format_message(message, get_spoken_verb(message))]\"" @@ -154,7 +154,7 @@ /mob/proc/hear_broadcast(var/datum/language/language, var/mob/speaker, var/speaker_name, var/message) if((language in languages) && language.check_special_condition(src)) - var/msg = span_hivemind("[language.name], [speaker_name] [message]") + var/msg = span_hivemind("[language.name], " + span_name("[speaker_name]") + " [message]") to_chat(src,msg) /mob/new_player/hear_broadcast(var/datum/language/language, var/mob/speaker, var/speaker_name, var/message) @@ -162,9 +162,9 @@ /mob/observer/dead/hear_broadcast(var/datum/language/language, var/mob/speaker, var/speaker_name, var/message) if(speaker.name == speaker_name || antagHUD) - to_chat(src, span_hivemind("[language.name], [speaker_name] ([ghost_follow_link(speaker, src)]) [message]")) + to_chat(src, span_hivemind("[language.name], " + span_name("[speaker_name]") + " ([ghost_follow_link(speaker, src)]) [message]")) else - to_chat(src, span_hivemind("[language.name], [speaker_name] [message]")) + to_chat(src, span_hivemind("[language.name], " + span_name("[speaker_name]") + " [message]")) /datum/language/proc/check_special_condition(var/mob/other) return 1 @@ -205,7 +205,7 @@ languages.Add(new_language) //VOREStation Addition Start if(new_language.flags & HIVEMIND) - verbs |= /mob/proc/adjust_hive_range + add_verb(src, /mob/proc/adjust_hive_range) //VOREStation Addition End return 1 @@ -265,7 +265,7 @@ for(var/datum/language/L in languages) if(!(L.flags & NONGLOBAL)) var/lang_key = get_custom_prefix_by_lang(src, L) - . += "[L.name] ([get_language_prefix()][L.key][lang_key ? " [get_language_prefix()][lang_key]" : ""])
    [L.desc]

    " + . += span_bold("[L.name] ([get_language_prefix()][L.key][lang_key ? " [get_language_prefix()][lang_key]" : ""])") + "
    [L.desc]

    " /mob/living/check_lang_data() . = "" @@ -277,11 +277,11 @@ if(!(L.flags & NONGLOBAL)) var/lang_key = get_custom_prefix_by_lang(src, L) if(L == default_language) - . += "[L.name] ([get_language_prefix()][L.key][lang_key ? " [get_language_prefix()][lang_key]" : ""])Edit Custom Key - default - reset
    [L.desc]

    " + . += span_bold("[L.name] ([get_language_prefix()][L.key][lang_key ? " [get_language_prefix()][lang_key]" : ""])") + " Edit Custom Key - default - reset
    [L.desc]

    " else if (can_speak(L)) - . += "[L.name] ([get_language_prefix()][L.key][lang_key ? " [get_language_prefix()][lang_key]" : ""])Edit Custom Key - set default
    [L.desc]

    " + . += span_bold("[L.name] ([get_language_prefix()][L.key][lang_key ? " [get_language_prefix()][lang_key]" : ""])") + " Edit Custom Key - set default
    [L.desc]

    " else - . += "[L.name] ([get_language_prefix()][L.key][lang_key ? " [get_language_prefix()][lang_key]" : ""])Edit Custom Key - cannot speak!
    [L.desc]

    " + . += span_bold("[L.name] ([get_language_prefix()][L.key][lang_key ? " [get_language_prefix()][lang_key]" : ""])") + " Edit Custom Key - cannot speak!
    [L.desc]

    " /mob/verb/check_languages() set name = "Check Known Languages" diff --git a/code/modules/mob/language/synthetic.dm b/code/modules/mob/language/synthetic.dm index bdf8a05bc3a..73684681db6 100644 --- a/code/modules/mob/language/synthetic.dm +++ b/code/modules/mob/language/synthetic.dm @@ -20,27 +20,27 @@ message = encode_html_emphasis(message) - var/message_start = "[name], [speaker.name]" + var/message_start = "[name], " + span_name("[speaker.name]") var/message_body = span_message("[speaker.say_quote(message)], \"[message]\"") for (var/mob/M in dead_mob_list) if(!istype(M,/mob/new_player) && !istype(M,/mob/living/carbon/brain)) //No meta-evesdropping var/message_to_send = span_binarysay("[message_start] ([ghost_follow_link(speaker, M)]) [message_body]") if(M.check_mentioned(message) && M.client?.prefs?.read_preference(/datum/preference/toggle/check_mention)) - message_to_send = "[message_to_send]" + message_to_send = span_large(span_bold("[message_to_send]")) M.show_message(message_to_send, 2) for (var/mob/living/S in living_mob_list) if(drone_only && !istype(S,/mob/living/silicon/robot/drone)) continue else if(istype(S , /mob/living/silicon/ai)) - message_start = span_binarysay("[name], [speaker.name]") + message_start = span_binarysay("[name], " + span_name("[speaker.name]") + "") else if (!S.binarycheck()) continue var/message_to_send = span_binarysay("[message_start] [message_body]") if(S.check_mentioned(message) && S.client?.prefs?.read_preference(/datum/preference/toggle/check_mention)) - message_to_send = "[message_to_send]" + message_to_send = span_large(span_bold("[message_to_send]")) S.show_message(message_to_send, 2) var/list/listening = hearers(1, src) diff --git a/code/modules/mob/living/bot/bot.dm b/code/modules/mob/living/bot/bot.dm index c8acdb6759c..41844ed5f8b 100644 --- a/code/modules/mob/living/bot/bot.dm +++ b/code/modules/mob/living/bot/bot.dm @@ -562,13 +562,13 @@ /mob/living/bot/Login() no_vore = FALSE // ROBOT VORE init_vore() // ROBOT VORE - verbs |= /mob/proc/insidePanel + add_verb(src, /mob/proc/insidePanel) return ..() /mob/living/bot/Logout() release_vore_contents() - verbs -= /mob/proc/insidePanel + remove_verb(src, /mob/proc/insidePanel) no_vore = TRUE devourable = FALSE feeding = FALSE diff --git a/code/modules/mob/living/bot/edCLNbot.dm b/code/modules/mob/living/bot/edCLNbot.dm index e2ce4b846f6..02e0150ed2c 100644 --- a/code/modules/mob/living/bot/edCLNbot.dm +++ b/code/modules/mob/living/bot/edCLNbot.dm @@ -38,7 +38,7 @@ if(!red_switch && blue_switch && !green_switch && prob(50) || src.emagged) if(istype(loc, /turf/simulated)) var/turf/simulated/T = loc - visible_message("\The [src] squirts a puddle of water on the floor!") + visible_message(span_infoplain(span_bold("\The [src]") + " squirts a puddle of water on the floor!")) T.wet_floor() if(!red_switch && !blue_switch && green_switch && prob(10) || src.emagged) diff --git a/code/modules/mob/living/bot/floorbot.dm b/code/modules/mob/living/bot/floorbot.dm index 2a97b3f08ba..95ef2818466 100644 --- a/code/modules/mob/living/bot/floorbot.dm +++ b/code/modules/mob/living/bot/floorbot.dm @@ -228,7 +228,7 @@ return busy = 1 update_icons() - visible_message("\The [src] begins to repair the hole.") + visible_message(span_infoplain(span_bold("\The [src]") + " begins to repair the hole.")) if(do_after(src, 50)) if(A && (locate(/obj/structure/lattice, A) && building == 1 || !locate(/obj/structure/lattice, A) && building == 2)) // Make sure that it still needs repairs var/obj/item/I @@ -245,7 +245,7 @@ if(F.broken || F.burnt) busy = 1 update_icons() - visible_message("\The [src] begins to remove the broken floor.") + visible_message(span_infoplain(span_bold("\The [src]") + " begins to remove the broken floor.")) if(do_after(src, 50, F)) if(F.broken || F.burnt) F.make_plating() @@ -255,7 +255,7 @@ else if(!F.flooring && amount) busy = 1 update_icons() - visible_message("\The [src] begins to improve the floor.") + visible_message(span_infoplain(span_bold("\The [src]") + " begins to improve the floor.")) if(do_after(src, 50)) if(!F.flooring) F.set_flooring(get_flooring_data(floor_build_type)) @@ -265,7 +265,7 @@ update_icons() else if(istype(A, /obj/item/stack/tile/floor) && amount < maxAmount) var/obj/item/stack/tile/floor/T = A - visible_message("\The [src] begins to collect tiles.") + visible_message(span_infoplain(span_bold("\The [src]") + " begins to collect tiles.")) busy = 1 update_icons() if(do_after(src, 20)) @@ -279,7 +279,7 @@ else if(istype(A, /obj/item/stack/material) && amount + 4 <= maxAmount) var/obj/item/stack/material/M = A if(M.get_material_name() == MAT_STEEL) - visible_message("\The [src] begins to make tiles.") + visible_message(span_infoplain(span_bold("\The [src]") + " begins to make tiles.")) busy = 1 update_icons() if(do_after(50)) diff --git a/code/modules/mob/living/bot/medbot.dm b/code/modules/mob/living/bot/medbot.dm index de25a334fbd..8220da54090 100644 --- a/code/modules/mob/living/bot/medbot.dm +++ b/code/modules/mob/living/bot/medbot.dm @@ -432,7 +432,7 @@ if(MEDBOT_PANIC_HIGH to MEDBOT_PANIC_FUCK) . += span_warning("They are tipped over and visibly panicking!") if(MEDBOT_PANIC_FUCK to INFINITY) - . += span_warning("They are freaking out from being tipped over!") + . += span_boldwarning("They are freaking out from being tipped over!") /mob/living/bot/medbot/confirmTarget(var/mob/living/carbon/human/H) if(!..()) diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 1629913c76b..882ed514534 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -27,8 +27,8 @@ time_of_birth = world.time - verbs += /mob/living/proc/ventcrawl - verbs += /mob/living/proc/hide + add_verb(src, /mob/living/proc/ventcrawl) + add_verb(src, /mob/living/proc/hide) instance_num = rand(1, 1000) name = "[initial(name)] ([instance_num])" @@ -66,4 +66,3 @@ else if(ending == "?") verb = "hisses curiously" return verb - diff --git a/code/modules/mob/living/carbon/alien/alien_attacks.dm b/code/modules/mob/living/carbon/alien/alien_attacks.dm index 10858811064..174828d7ee8 100644 --- a/code/modules/mob/living/carbon/alien/alien_attacks.dm +++ b/code/modules/mob/living/carbon/alien/alien_attacks.dm @@ -28,7 +28,7 @@ playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) - O.show_message(span_red(text("[] has grabbed [] passively!", M, src)), 1) + O.show_message(span_danger(text("[] has grabbed [] passively!", M, src)), 1) else var/damage = rand(1, 9) @@ -43,17 +43,17 @@ playsound(src, "punch", 25, 1, -1) for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) - O.show_message(span_red(text("[] has punched []!", M, src)), 1) + O.show_message(span_bolddanger(text("[] has punched []!", M, src)), 1) if (damage > 4.9) Weaken(rand(10,15)) for(var/mob/O in viewers(M, null)) if ((O.client && !( O.blinded ))) - O.show_message(span_red(text("[] has weakened []!", M, src)), 1, span_red("You hear someone fall."), 2) + O.show_message(span_bolddanger(text("[] has weakened []!", M, src)), 1, span_red("You hear someone fall."), 2) adjustBruteLoss(damage) updatehealth() else playsound(src, 'sound/weapons/punchmiss.ogg', 25, 1, -1) for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) - O.show_message(span_red(text("[] has attempted to punch []!", M, src)), 1) + O.show_message(span_bolddanger(text("[] has attempted to punch []!", M, src)), 1) return diff --git a/code/modules/mob/living/carbon/alien/diona/diona.dm b/code/modules/mob/living/carbon/alien/diona/diona.dm index 9fa713936f2..434d02617b7 100644 --- a/code/modules/mob/living/carbon/alien/diona/diona.dm +++ b/code/modules/mob/living/carbon/alien/diona/diona.dm @@ -54,7 +54,7 @@ var/list/_nymph_default_emotes = list( species = GLOB.all_species[SPECIES_DIONA] add_language(LANGUAGE_ROOTGLOBAL) add_language(LANGUAGE_GALCOM) - verbs += /mob/living/carbon/alien/diona/proc/merge + add_verb(src, /mob/living/carbon/alien/diona/proc/merge) /mob/living/carbon/alien/diona/put_in_hands(var/obj/item/W) // No hands. W.loc = get_turf(src) diff --git a/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm b/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm index d50f9a48acf..d8376354f0d 100644 --- a/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm +++ b/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm @@ -18,6 +18,6 @@ return user.unEquip(W) wear_hat(W) - user.visible_message("\The [user] puts \the [W] on \the [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " puts \the [W] on \the [src].")) return return ..() diff --git a/code/modules/mob/living/carbon/alien/diona/diona_powers.dm b/code/modules/mob/living/carbon/alien/diona/diona_powers.dm index 0f4b69501d4..492a590793b 100644 --- a/code/modules/mob/living/carbon/alien/diona/diona_powers.dm +++ b/code/modules/mob/living/carbon/alien/diona/diona_powers.dm @@ -9,7 +9,7 @@ return if(istype(src.loc,/mob/living/carbon)) - src.verbs -= /mob/living/carbon/alien/diona/proc/merge + remove_verb(src, /mob/living/carbon/alien/diona/proc/merge) return var/list/choices = list() @@ -35,8 +35,8 @@ to_chat(H, "You feel your being twine with that of \the [src] as it merges with your biomass.") to_chat(src, "You feel your being twine with that of \the [H] as you merge with its biomass.") loc = H - verbs += /mob/living/carbon/alien/diona/proc/split - verbs -= /mob/living/carbon/alien/diona/proc/merge + add_verb(src, /mob/living/carbon/alien/diona/proc/split) + remove_verb(src, /mob/living/carbon/alien/diona/proc/merge) return 1 /mob/living/carbon/alien/diona/proc/split() @@ -49,7 +49,7 @@ return if(!(istype(src.loc,/mob/living/carbon))) - src.verbs -= /mob/living/carbon/alien/diona/proc/split + remove_verb(src, /mob/living/carbon/alien/diona/proc/split) return to_chat(src.loc, "You feel a pang of loss as [src] splits away from your biomass.") @@ -58,8 +58,8 @@ var/mob/living/M = src.loc src.loc = get_turf(src) - src.verbs -= /mob/living/carbon/alien/diona/proc/split - src.verbs += /mob/living/carbon/alien/diona/proc/merge + remove_verb(src, /mob/living/carbon/alien/diona/proc/split) + add_verb(src, /mob/living/carbon/alien/diona/proc/merge) if(istype(M)) for(var/atom/A in M.contents) diff --git a/code/modules/mob/living/carbon/alien/diona/progression.dm b/code/modules/mob/living/carbon/alien/diona/progression.dm index c8f9baaba6a..45a33d4ebb8 100644 --- a/code/modules/mob/living/carbon/alien/diona/progression.dm +++ b/code/modules/mob/living/carbon/alien/diona/progression.dm @@ -1,7 +1,8 @@ -/mob/living/carbon/alien/diona/Stat() //Specified where progression is at, doesn't work right for some things in carbon/alien +/mob/living/carbon/alien/diona/get_status_tab_items() //Specified where progression is at, doesn't work right for some things in carbon/alien . = ..() - if(. && statpanel("Status")) - stat("Growth", "[round(amount_grown)]/[max_grown]") + if(.) + . += "" + . += "Diona Growth: [round(amount_grown)]/[max_grown]" /mob/living/carbon/alien/diona/confirm_evolution() diff --git a/code/modules/mob/living/carbon/alien/larva/progression.dm b/code/modules/mob/living/carbon/alien/larva/progression.dm index e671ac3aace..1f1f44a3e3b 100644 --- a/code/modules/mob/living/carbon/alien/larva/progression.dm +++ b/code/modules/mob/living/carbon/alien/larva/progression.dm @@ -1,15 +1,16 @@ -/mob/living/carbon/alien/larva/Stat() //Specified where progression stats come from, because for some reason it doesn't work right in carbon/alien +/mob/living/carbon/alien/larva/get_status_tab_items() //Specified where progression stats come from, because for some reason it doesn't work right in carbon/alien . = ..() - if(. && statpanel("Status")) - stat("Growth", "[round(amount_grown)]/[max_grown]") + if(.) + . += "" + . += "Larva Growth: [round(amount_grown)]/[max_grown]" /mob/living/carbon/alien/larva/confirm_evolution() - to_chat(src, span_notice("You are growing into a beautiful alien! It is time to choose a caste.")) + to_chat(src, span_boldnotice("You are growing into a beautiful alien! It is time to choose a caste.")) to_chat(src, span_notice("There are three to choose from:")) - to_chat(src, "Hunters are strong and agile, able to hunt away from the hive and rapidly move through ventilation shafts. Hunters generate plasma slowly and have low reserves.") - to_chat(src, "Sentinels are tasked with protecting the hive and are deadly up close and at a range. They are not as physically imposing nor fast as the hunters.") - to_chat(src, "Drones are the working class, offering the largest plasma storage and generation. They are the only caste which may evolve again, turning into the dreaded alien queen.") + to_chat(src, span_bold("Hunters") + span_notice(" are strong and agile, able to hunt away from the hive and rapidly move through ventilation shafts. Hunters generate plasma slowly and have low reserves.")) + to_chat(src, span_bold("Sentinels") + span_notice(" are tasked with protecting the hive and are deadly up close and at a range. They are not as physically imposing nor fast as the hunters.")) + to_chat(src, span_bold("Drones") + span_notice(" are the working class, offering the largest plasma storage and generation. They are the only caste which may evolve again, turning into the dreaded alien queen.")) var/alien_caste = tgui_alert(src, "Please choose which alien caste you shall belong to.","Alien Choice",list("Hunter","Sentinel","Drone")) return alien_caste ? "Xenomorph [alien_caste]" : null diff --git a/code/modules/mob/living/carbon/alien/progression.dm b/code/modules/mob/living/carbon/alien/progression.dm index 001c1111392..e59688646e8 100644 --- a/code/modules/mob/living/carbon/alien/progression.dm +++ b/code/modules/mob/living/carbon/alien/progression.dm @@ -8,7 +8,7 @@ return if(!adult_form) - verbs -= /mob/living/carbon/alien/verb/evolve + remove_verb(src, /mob/living/carbon/alien/verb/evolve) return if(handcuffed || legcuffed) diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index ae4d6c1a501..d0f4aef5754 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -58,7 +58,7 @@ to_chat(user, span_warning("\The [src] appears to reject this brain. It is incompatible.")) return - user.visible_message("\The [user] sticks \a [O] into \the [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " sticks \a [O] into \the [src].")) B.preserved = TRUE brainmob = B.brainmob @@ -271,10 +271,10 @@ src.brainmob.mind.reset() src.brainmob.ckey = candidate.ckey src.name = "[name] ([src.brainmob.name])" - to_chat(src.brainmob, "You are [src.name], brought into existence on [station_name()].") - to_chat(src.brainmob, "As a synthetic intelligence, you are designed with organic values in mind.") - to_chat(src.brainmob, "However, unless placed in a lawed chassis, you are not obligated to obey any individual crew member.") //it's not like they can hurt anyone -// to_chat(src.brainmob, "Use say #b to speak to other artificial intelligences.") + to_chat(src.brainmob, span_infoplain(span_bold("You are [src.name], brought into existence on [station_name()]."))) + to_chat(src.brainmob, span_infoplain(span_bold("As a synthetic intelligence, you are designed with organic values in mind."))) + to_chat(src.brainmob, span_infoplain(span_bold("However, unless placed in a lawed chassis, you are not obligated to obey any individual crew member."))) //it's not like they can hurt anyone +// to_chat(src.brainmob, span_infoplain(span_bold("Use say #b to speak to other artificial intelligences."))) src.brainmob.mind.assigned_role = JOB_SYNTHETIC_BRAIN var/turf/T = get_turf_or_move(src.loc) diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index 5ea47dc4a0e..222e27437c1 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -60,10 +60,10 @@ src.brainmob.ckey = candidate.ckey src.brainmob.mind.reset() src.name = "positronic brain ([src.brainmob.name])" - to_chat(src.brainmob, "You are a positronic brain, brought into existence on [station_name()].") - to_chat(src.brainmob, "As a synthetic intelligence, you answer to all crewmembers, as well as the AI.") - to_chat(src.brainmob, "Remember, the purpose of your existence is to serve the crew and the station. Above all else, do no harm.") - to_chat(src.brainmob, "Use say #b to speak to other artificial intelligences.") + to_chat(src.brainmob, span_infoplain(span_bold("You are a positronic brain, brought into existence on [station_name()]."))) + to_chat(src.brainmob, span_infoplain(span_bold("As a synthetic intelligence, you answer to all crewmembers, as well as the AI."))) + to_chat(src.brainmob, span_infoplain(span_bold("Remember, the purpose of your existence is to serve the crew and the station. Above all else, do no harm."))) + to_chat(src.brainmob, span_infoplain(span_bold("Use say #b to speak to other artificial intelligences."))) src.brainmob.mind.assigned_role = JOB_POSITRONIC_BRAIN var/turf/T = get_turf_or_move(src.loc) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index c0aa2fb26e4..2949c387a2d 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -78,7 +78,7 @@ M.loc = src.loc for(var/mob/N in viewers(src, null)) if(N.client) - N.show_message(span_red(text("[M] bursts out of [src]!")), 2) + N.show_message(span_bolddanger("[M] bursts out of [src]!"), 2) ..() /mob/living/carbon/attack_hand(mob/M as mob) @@ -89,7 +89,7 @@ if (H.hand) temp = H.organs_by_name["l_hand"] if(temp && !temp.is_usable()) - to_chat(H, span_red("You can't use your [temp.name]")) + to_chat(H, span_warning("You can't use your [temp.name]")) return return @@ -106,7 +106,7 @@ var/weaken_dur = (rand(2,4)-severity)*species.emp_stun_mod //0-3 knockdown, on par with.. you get the idea var/blind_dur = (rand(3,6)-severity)*species.emp_stun_mod //0-5 blind if(species.emp_sensitivity) //receive warning message and basic effects - to_chat(src, span_danger("*BZZZT*")) + to_chat(src, span_bolddanger("*BZZZT*")) switch(severity) if(1) to_chat(src, span_danger("DANGER: Extreme EM flux detected!")) @@ -243,9 +243,9 @@ if(!org.is_usable() || org.is_dislocated()) status += "dangling uselessly" if(status.len) - src.show_message("My [org.name] is [english_list(status)].",1) + src.show_message("My [org.name] is " + span_warning("[english_list(status)]."),1) else - src.show_message("My [org.name] is OK.",1) + src.show_message("My [org.name] is " + span_notice("OK."),1) if((SKELETON in H.mutations) && (!H.w_uniform) && (!H.wear_suit)) H.play_xylophone() @@ -455,7 +455,7 @@ throw_alert("handcuffed", /obj/screen/alert/restrained/handcuffed, new_master = handcuffed) else clear_alert("handcuffed") - update_action_buttons() //some of our action buttons might be unusable when we're handcuffed. + update_action_buttons_icon() //some of our action buttons might be unusable when we're handcuffed. update_inv_handcuffed() // Clears blood overlays diff --git a/code/modules/mob/living/carbon/carbon_powers.dm b/code/modules/mob/living/carbon/carbon_powers.dm index 04b85db770b..f805968d40d 100644 --- a/code/modules/mob/living/carbon/carbon_powers.dm +++ b/code/modules/mob/living/carbon/carbon_powers.dm @@ -12,9 +12,9 @@ B.detatch() - verbs -= /mob/living/carbon/proc/release_control - verbs -= /mob/living/carbon/proc/punish_host - verbs -= /mob/living/carbon/proc/spawn_larvae + remove_verb(src, /mob/living/carbon/proc/release_control) + remove_verb(src, /mob/living/carbon/proc/punish_host) + remove_verb(src, /mob/living/carbon/proc/spawn_larvae) else to_chat(src, span_danger("ERROR NO BORER OR BRAINMOB DETECTED IN THIS MOB, THIS IS A BUG !")) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 038b5f6cf83..dd76b5dfec7 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -77,7 +77,7 @@ B.host_brain.name = "host brain" B.host_brain.real_name = "host brain" - verbs -= /mob/living/carbon/proc/release_control + remove_verb(src, /mob/living/carbon/proc/release_control) callHook("death", list(src, gibbed)) @@ -85,7 +85,7 @@ // SSgame_master.adjust_danger(gibbed ? 40 : 20) // VOREStation Edit - We don't use SSgame_master yet. for(var/mob/observer/dead/O in mob_list) if(O.client?.prefs?.read_preference(/datum/preference/toggle/show_dsay)) - to_chat(O, span_deadsay("[src] has died in [get_area(src)]. [ghost_follow_link(src, O)] ")) + to_chat(O, span_deadsay(span_bold("[src]") + " has died in " + span_bold("[get_area(src)]") + ". [ghost_follow_link(src, O)] ")) if(!gibbed && species.death_sound) playsound(src, species.death_sound, 80, 1, 1) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 9bd963c8175..0d9d9d975ed 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -344,7 +344,7 @@ var/list/_simple_mob_default_emotes = list( var/HTML = "" HTML += "
    " - HTML += "Update Flavour Text
    " + HTML += span_bold("Update Flavour Text") + "
    " HTML += "
    " HTML += "General: " HTML += TextPreview(flavor_texts["general"]) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 7ca315f2409..73913ba2951 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -87,7 +87,7 @@ if(!((skip_gear & EXAMINE_SKIPJUMPSUIT) && (skip_body & EXAMINE_SKIPFACE))) //VOREStation Add Start if(custom_species) - name_ender = ", a [src.custom_species]" + name_ender = ", a " + span_bold("[src.custom_species]") else if(looks_synth) //VOREStation Add End var/use_gender = "a synthetic" @@ -96,12 +96,12 @@ else if(gender == FEMALE) use_gender = "a gynoid" - name_ender = ", [use_gender]![species.get_additional_examine_text(src)]" + name_ender = ", " + span_bold(span_gray("[use_gender]!")) + "[species.get_additional_examine_text(src)]" else if(species.name != "Human") - name_ender = ", \a [species.get_examine_name()]![species.get_additional_examine_text(src)]" + name_ender = ", " + span_bold("\a [species.get_examine_name()]!") + "[species.get_additional_examine_text(src)]" - var/list/msg = list("","This is [icon2html(src, user.client)] [src.name][name_ender]") + var/list/msg = list("This is [icon2html(src, user.client)] [src.name][name_ender]") //uniform if(w_uniform && !(skip_gear & EXAMINE_SKIPJUMPSUIT) && w_uniform.show_examine) @@ -252,7 +252,7 @@ //Jitters if(is_jittery) if(jitteriness >= 300) - msg += span_warning("[T.He] [T.is] convulsing violently!") + msg += span_boldwarning("[T.He] [T.is] convulsing violently!") else if(jitteriness >= 200) msg += span_warning("[T.He] [T.is] extremely jittery.") else if(jitteriness >= 100) @@ -290,7 +290,7 @@ if((stat == 2 || src.losebreath) && get_dist(user, src) <= 3) msg += span_warning("[T.He] [T.does] not appear to be breathing.") if(istype(user, /mob/living/carbon/human) && !user.stat && Adjacent(user)) - user.visible_message("[usr] checks [src]'s pulse.", "You check [src]'s pulse.") + user.visible_message(span_infoplain(span_bold("[usr]") + " checks [src]'s pulse."), span_infoplain("You check [src]'s pulse.")) spawn(15) if(isobserver(user) || (Adjacent(user) && !user.stat)) // If you're a corpse then you can't exactly check their pulse, but ghosts can see anything if(pulse == PULSE_NONE) @@ -329,9 +329,9 @@ var/obj/item/organ/external/E = organs_by_name[organ_tag] if(!E) - wound_flavor_text["[organ_descriptor]"] = span_warning("[T.He] [T.is] missing [T.his] [organ_descriptor].") + wound_flavor_text["[organ_descriptor]"] = span_boldwarning("[T.He] [T.is] missing [T.his] [organ_descriptor].") else if(E.is_stump()) - wound_flavor_text["[organ_descriptor]"] = span_warning("[T.He] [T.has] a stump where [T.his] [organ_descriptor] should be.") + wound_flavor_text["[organ_descriptor]"] = span_boldwarning("[T.He] [T.has] a stump where [T.his] [organ_descriptor] should be.") else continue @@ -340,7 +340,7 @@ if((temp.organ_tag in hidden) && hidden[temp.organ_tag]) continue //Organ is hidden, don't talk about it if(temp.status & ORGAN_DESTROYED) - wound_flavor_text["[temp.name]"] = span_warning("[T.He] [T.is] missing [T.his] [temp.name].") + wound_flavor_text["[temp.name]"] = span_boldwarning("[T.He] [T.is] missing [T.his] [temp.name].") continue if(!looks_synth && temp.robotic == ORGAN_ROBOT) @@ -434,13 +434,13 @@ // VOREStation Start if(custom_link) - msg += "Custom link: [custom_link]" + msg += "Custom link: " + span_linkify("[custom_link]") if(ooc_notes) msg += "OOC Notes: \[View\] - \[Print\]" msg += "\[Mechanical Vore Preferences\]" // VOREStation End - msg += "" + msg = list(span_info(jointext(msg, "
    "))) if(applying_pressure) msg += applying_pressure diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index b632dce0120..aa06a0cd179 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -66,7 +66,6 @@ dna.real_name = real_name sync_organ_dna() - //verbs |= /mob/living/proc/toggle_selfsurgery //VOREStation Removal AddComponent(/datum/component/personal_crafting) /mob/living/carbon/human/Destroy() @@ -84,42 +83,76 @@ QDEL_NULL(vessel) return ..() -/mob/living/carbon/human/Stat() - ..() - if(statpanel("Status")) - stat("Intent:", "[a_intent]") - stat("Move Mode:", "[m_intent]") - if(emergency_shuttle) - var/eta_status = emergency_shuttle.get_status_panel_eta() - if(eta_status) - stat(null, eta_status) +/mob/living/carbon/human/get_status_tab_items() + . = ..() + . += "" + . += "Intent: [a_intent]" + . += "Move Mode: [m_intent]" + if(emergency_shuttle) + var/eta_status = emergency_shuttle.get_status_panel_eta() + if(eta_status) + . += "[eta_status]" - if (internal) - if (!internal.air_contents) - qdel(internal) - else - stat("Internal Atmosphere Info", internal.name) - stat("Tank Pressure", internal.air_contents.return_pressure()) - stat("Distribution Pressure", internal.distribute_pressure) + if (internal) + if (!internal.air_contents) + qdel(internal) + else + . += "Internal Atmosphere Info: [internal.name]" + . += "Tank Pressure: [internal.air_contents.return_pressure()]" + . += "Distribution Pressure: [internal.distribute_pressure]" - var/obj/item/organ/internal/xenos/plasmavessel/P = internal_organs_by_name[O_PLASMA] //Xenomorphs. Mech. - if(P) - stat(null, "Phoron Stored: [P.stored_plasma]/[P.max_plasma]") + var/obj/item/organ/internal/xenos/plasmavessel/P = internal_organs_by_name[O_PLASMA] //Xenomorphs. Mech. + if(P) + . += "Phoron Stored: [P.stored_plasma]/[P.max_plasma]" - if(back && istype(back,/obj/item/rig)) - var/obj/item/rig/suit = back - var/cell_status = "ERROR" - if(suit.cell) cell_status = "[suit.cell.charge]/[suit.cell.maxcharge]" - stat(null, "Suit charge: [cell_status]") + if(back && istype(back,/obj/item/rig)) + var/obj/item/rig/suit = back + var/cell_status = "ERROR" + if(suit.cell) cell_status = "[suit.cell.charge]/[suit.cell.maxcharge]" + . += "Suit charge: [cell_status]" + + if(mind) + if(mind.changeling) + . += "Chemical Storage: [mind.changeling.chem_charges]" + . += "Genetic Damage Time: [mind.changeling.geneticdamage]" + . += "Re-Adaptations: [mind.changeling.readapts]/[mind.changeling.max_readapts]" - if(mind) - if(mind.changeling) - stat("Chemical Storage", mind.changeling.chem_charges) - stat("Genetic Damage Time", mind.changeling.geneticdamage) - stat("Re-Adaptations", "[mind.changeling.readapts]/[mind.changeling.max_readapts]") if(species) - species.Stat(src) + species.get_status_tab_items(src) + +/mob/proc/RigPanel(var/obj/item/rig/R) + if(R && !R.canremove && R.installed_modules.len) + var/list/L = list() + var/cell_status = R.cell ? "[R.cell.charge]/[R.cell.maxcharge]" : "ERROR" + L[++L.len] = list("Suit charge: [cell_status]", null, null, null, null) + for(var/obj/item/rig_module/module in R.installed_modules) + { + for(var/stat_rig_module/SRM in module.stat_modules) + if(SRM.CanUse()) + L[++L.len] = list(SRM.module.interface_name,null,null,SRM.name,REF(SRM)) + } + misc_tabs["Hardsuit Modules"] = L + +/mob/living/update_misc_tabs() + ..() + if(get_rig_stats) + var/obj/item/rig/rig = get_rig() + if(rig) + RigPanel(rig) + +/mob/living/carbon/human/update_misc_tabs() + ..() + if(species) + species.update_misc_tabs(src) + + if(istype(back,/obj/item/rig)) + var/obj/item/rig/R = back + RigPanel(R) + + else if(istype(belt,/obj/item/rig)) + var/obj/item/rig/R = belt + RigPanel(R) /mob/living/carbon/human/ex_act(severity) if(!blinded) @@ -410,13 +443,13 @@ if (R.fields["id"] == E.fields["id"]) if(hasHUD(usr,"security")) var/list/security_hud_text = list() - security_hud_text += "Name: [R.fields["name"]] Criminal Status: [R.fields["criminal"]]" - security_hud_text += "Species: [R.fields["species"]]" - security_hud_text += "Minor Crimes: [R.fields["mi_crim"]]" - security_hud_text += "Details: [R.fields["mi_crim_d"]]" - security_hud_text += "Major Crimes: [R.fields["ma_crim"]]" - security_hud_text += "Details: [R.fields["ma_crim_d"]]" - security_hud_text += "Notes: [R.fields["notes"]]" + security_hud_text += span_bold("Name:") + " [R.fields["name"]] " + span_bold("Criminal Status:") + " [R.fields["criminal"]]" + security_hud_text += span_bold("Species:") + " [R.fields["species"]]" + security_hud_text += span_bold("Minor Crimes:") + " [R.fields["mi_crim"]]" + security_hud_text += span_bold("Details:") + " [R.fields["mi_crim_d"]]" + security_hud_text += span_bold("Major Crimes:") + " [R.fields["ma_crim"]]" + security_hud_text += span_bold("Details:") + " [R.fields["ma_crim_d"]]" + security_hud_text += span_bold("Notes:") + " [R.fields["notes"]]" security_hud_text += "\[View Comment Log\]" to_chat(usr, span_filter_notice("[jointext(security_hud_text, "
    ")]")) read = 1 @@ -529,14 +562,14 @@ if (R.fields["id"] == E.fields["id"]) if(hasHUD(usr,"medical")) var/list/medical_hud_text = list() - medical_hud_text += "Name: [R.fields["name"]] Blood Type: [R.fields["b_type"]] Blood Basis: [R.fields["blood_reagent"]]" - medical_hud_text += "Species: [R.fields["species"]]" - medical_hud_text += "DNA: [R.fields["b_dna"]]" - medical_hud_text += "Minor Disabilities: [R.fields["mi_dis"]]" - medical_hud_text += "Details: [R.fields["mi_dis_d"]]" - medical_hud_text += "Major Disabilities: [R.fields["ma_dis"]]" - medical_hud_text += "Details: [R.fields["ma_dis_d"]]" - medical_hud_text += "Notes: [R.fields["notes"]]" + medical_hud_text += span_bold("Name:") + " [R.fields["name"]] " + span_bold("Blood Type:") + " [R.fields["b_type"]] " + span_bold("Blood Basis:") + " [R.fields["blood_reagent"]]" + medical_hud_text += span_bold("Species:") + " [R.fields["species"]]" + medical_hud_text += span_bold("DNA:") + " [R.fields["b_dna"]]" + medical_hud_text += span_bold("Minor Disabilities:") + " [R.fields["mi_dis"]]" + medical_hud_text += span_bold("Details:") + " [R.fields["mi_dis_d"]]" + medical_hud_text += span_bold("Major Disabilities:") + " [R.fields["ma_dis"]]" + medical_hud_text += span_bold("Details:") + " [R.fields["ma_dis_d"]]" + medical_hud_text += span_bold("Notes:") + " [R.fields["notes"]]" medical_hud_text += "\[View Comment Log\]" to_chat(usr, span_filter_notice("[jointext(medical_hud_text, "
    ")]")) read = 1 @@ -613,16 +646,16 @@ if (R.fields["id"] == E.fields["id"]) if(hasHUD(usr,"best")) var/list/emp_hud_text = list() - emp_hud_text += "Name: [R.fields["name"]]" - emp_hud_text += "Species: [R.fields["species"]]" - emp_hud_text += "Assignment: [R.fields["real_rank"]] ([R.fields["rank"]])" - emp_hud_text += "Home System: [R.fields["home_system"]]" - emp_hud_text += "Birthplace: [R.fields["birthplace"]]" - emp_hud_text += "Citizenship: [R.fields["citizenship"]]" - emp_hud_text += "Primary Employer: [R.fields["personal_faction"]]" - emp_hud_text += "Religious Beliefs: [R.fields["religion"]]" - emp_hud_text += "Known Languages: [R.fields["languages"]]" - emp_hud_text += "Notes: [R.fields["notes"]]" + emp_hud_text += span_bold("Name:") + " [R.fields["name"]]" + emp_hud_text += span_bold("Species:") + " [R.fields["species"]]" + emp_hud_text += span_bold("Assignment:") + " [R.fields["real_rank"]] ([R.fields["rank"]])" + emp_hud_text += span_bold("Home System:") + " [R.fields["home_system"]]" + emp_hud_text += span_bold("Birthplace:") + " [R.fields["birthplace"]]" + emp_hud_text += span_bold("Citizenship:") + " [R.fields["citizenship"]]" + emp_hud_text += span_bold("Primary Employer:") + " [R.fields["personal_faction"]]" + emp_hud_text += span_bold("Religious Beliefs:") + " [R.fields["religion"]]" + emp_hud_text += span_bold("Known Languages:") + " [R.fields["languages"]]" + emp_hud_text += span_bold("Notes:") + " [R.fields["notes"]]" emp_hud_text += "\[View Comment Log\]" to_chat(usr, span_filter_notice("[jointext(emp_hud_text, "
    ")]")) read = 1 @@ -847,7 +880,7 @@ return if(!(mMorph in mutations)) - src.verbs -= /mob/living/carbon/human/proc/morph + remove_verb(src, /mob/living/carbon/human/proc/morph) return var/new_facial = input(usr, "Please select facial hair color.", "Character Generation",rgb(r_facial,g_facial,b_facial)) as color @@ -922,7 +955,7 @@ return if(!(mRemotetalk in src.mutations)) - src.verbs -= /mob/living/carbon/human/proc/remotesay + remove_verb(src, /mob/living/carbon/human/proc/remotesay) return var/list/creatures = list() for(var/mob/living/carbon/h in mob_list) @@ -939,7 +972,7 @@ usr.show_message(span_filter_say("[span_blue("You project your mind into [target.real_name]: [say]")]")) log_say("(TPATH to [key_name(target)]) [say]",src) for(var/mob/observer/dead/G in mob_list) - G.show_message(span_filter_say("Telepathic message from [src] to [target]: [say]")) + G.show_message(span_filter_say(span_italics("Telepathic message from " + span_bold("[src]") + " to " + span_bold("[target]") + ": [say]"))) /mob/living/carbon/human/proc/remoteobserve() set name = "Remote View" @@ -953,7 +986,7 @@ if(!(mRemote in src.mutations)) remoteview_target = null reset_view(0) - src.verbs -= /mob/living/carbon/human/proc/remoteobserve + remove_verb(src, /mob/living/carbon/human/proc/remoteobserve) return if(client.eye != client.mob) @@ -1088,7 +1121,7 @@ blood_DNA[M.dna.unique_enzymes] = M.dna.b_type hand_blood_color = blood_color update_bloodied() - verbs += /mob/living/carbon/human/proc/bloody_doodle + add_verb(src, /mob/living/carbon/human/proc/bloody_doodle) return 1 //we applied blood to the item /mob/living/carbon/human/proc/get_full_print() @@ -1317,7 +1350,7 @@ return 0 //something is terribly wrong if (!bloody_hands) - verbs -= /mob/living/carbon/human/proc/bloody_doodle + remove_verb(src, /mob/living/carbon/human/proc/bloody_doodle) if (src.gloves) to_chat(src, span_warning("Your [src.gloves] are getting in the way.")) @@ -1682,7 +1715,7 @@ /mob/living/carbon/human/examine_icon() var/icon/I = get_cached_examine_icon(src) if(!I) - I = getFlatIcon(src, defdir = SOUTH, no_anim = TRUE) + I = getFlatIcon(src, defdir = SOUTH, no_anim = TRUE, force_south = TRUE) set_cached_examine_icon(src, I, 50 SECONDS) return I diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 987c2d504e8..638febe0d53 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -57,7 +57,7 @@ if(!hit_zone) H.do_attack_animation(src) playsound(src, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - visible_message(span_filter_combat("[span_red("[H] reaches for [src], but misses!")]")) + visible_message(span_filter_combat("[span_red(span_bold("[H] reaches for [src], but misses!"))]")) return FALSE if(H != src && check_shields(0, null, H, H.zone_sel.selecting, H.name)) @@ -333,7 +333,7 @@ return playsound(src, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - visible_message(span_filter_combat("[span_red("[M] attempted to disarm [src]!")]")) + visible_message(span_filter_combat("[span_red(span_bold("[M] attempted to disarm [src]!"))]")) return /mob/living/carbon/human/proc/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, inrange, params) @@ -449,16 +449,16 @@ set category = "IC" set src = usr - var/dat = "Known Attacks

    " + var/dat = span_bold(span_giant("Known Attacks")) + "

    " if(default_attack) dat += "Current default attack: [default_attack.attack_name] - reset

    " for(var/datum/unarmed_attack/u_attack in species.unarmed_attacks) if(u_attack == default_attack) - dat += "Primarily [u_attack.attack_name] - default - reset


    " + dat += span_bold("Primarily [u_attack.attack_name]") + " - default - reset


    " else - dat += "Primarily [u_attack.attack_name] - set default


    " + dat += span_bold("Primarily [u_attack.attack_name]") + " - set default


    " src << browse(dat, "window=checkattack") diff --git a/code/modules/mob/living/carbon/human/human_attackhand_vr.dm b/code/modules/mob/living/carbon/human/human_attackhand_vr.dm index fa8c84c22cc..bbee7002ac7 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand_vr.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand_vr.dm @@ -6,25 +6,25 @@ set category = "IC" set src = usr - var/dat = "Known Attacks

    " + var/dat = span_bold("Known Attacks") + "

    " for(var/datum/unarmed_attack/u_attack in species.unarmed_attacks) - dat += "Primarily [u_attack.attack_name]


    " + dat += span_bold("Primarily [u_attack.attack_name] ") + "


    " src << browse(dat, "window=checkattack") return /mob/living/carbon/human/check_attacks() - var/dat = "Known Attacks

    " + var/dat = span_bold("Known Attacks") + "

    " if(default_attack) dat += "Current default attack: [default_attack.attack_name] - reset

    " for(var/datum/unarmed_attack/u_attack in species.unarmed_attacks) if(u_attack == default_attack) - dat += "Primarily [u_attack.attack_name] - default - reset


    " + dat += span_bold("Primarily [u_attack.attack_name]") + " - default - reset


    " else - dat += "Primarily [u_attack.attack_name] - set default


    " + dat += span_bold("Primarily [u_attack.attack_name]") + " - set default


    " src << browse(dat, "window=checkattack") @@ -60,4 +60,4 @@ claws/attack_name = "claws" claws/strong/attack_name = "strong claws" slime_glomp/attack_name = "glomp" - bite/sharp/numbing/attack_name = "numbing bite" \ No newline at end of file + bite/sharp/numbing/attack_name = "numbing bite" diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 2943d9b886f..3106dfd248d 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -443,7 +443,7 @@ emp_act var/throw_damage = O.throwforce*(speed/THROWFORCE_SPEED_DIVISOR) if(species && species.throwforce_absorb_threshold >= throw_damage) - visible_message("\The [O] simply bounces off of [src]'s body!") + visible_message(span_infoplain(span_bold("\The [O]") + " simply bounces off of [src]'s body!")) return var/zone @@ -468,7 +468,7 @@ emp_act return if(!zone) - visible_message("\The [O] misses [src] narrowly!") + visible_message(span_infoplain(span_bold("\The [O]") + " misses [src] narrowly!")) return O.throwing = 0 //it hit, so stop moving diff --git a/code/modules/mob/living/carbon/human/human_modular_limbs.dm b/code/modules/mob/living/carbon/human/human_modular_limbs.dm index c2ec8564233..7e1d4e1e40e 100644 --- a/code/modules/mob/living/carbon/human/human_modular_limbs.dm +++ b/code/modules/mob/living/carbon/human/human_modular_limbs.dm @@ -73,13 +73,13 @@ // Called in robotize(), replaced() and removed() to update our modular limb verbs. /mob/living/carbon/human/proc/refresh_modular_limb_verbs() if(length(get_modular_limbs(return_first_found = TRUE, validate_proc = /obj/item/organ/external/proc/can_attach_modular_limb_here))) - verbs |= /mob/living/carbon/human/proc/attach_limb_verb + add_verb(src, /mob/living/carbon/human/proc/attach_limb_verb) else - verbs -= /mob/living/carbon/human/proc/attach_limb_verb + remove_verb(src, /mob/living/carbon/human/proc/attach_limb_verb) if(length(get_modular_limbs(return_first_found = TRUE, validate_proc = /obj/item/organ/external/proc/can_remove_modular_limb))) - verbs |= /mob/living/carbon/human/proc/detach_limb_verb + add_verb(src, /mob/living/carbon/human/proc/detach_limb_verb) else - verbs -= /mob/living/carbon/human/proc/detach_limb_verb + remove_verb(src, /mob/living/carbon/human/proc/detach_limb_verb) // Proc helper for attachment verb. /mob/living/carbon/human/proc/check_can_attach_modular_limb(var/obj/item/organ/external/E) diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm index 1391f47ca99..1d6746cfc07 100644 --- a/code/modules/mob/living/carbon/human/human_powers.dm +++ b/code/modules/mob/living/carbon/human/human_powers.dm @@ -14,7 +14,7 @@ var/datum/sprite_accessory/hair/hair_style = hair_styles_list[h_style] var/selected_string if(!(hair_style.flags & HAIR_TIEABLE)) - to_chat(src, "Your hair isn't long enough to tie.") + to_chat(src, span_warning("Your hair isn't long enough to tie.")) return else var/list/datum/sprite_accessory/hair/valid_hairstyles = list() @@ -31,7 +31,7 @@ regenerate_icons() visible_message(span_notice("[src] pauses a moment to style their hair.")) else - to_chat(src, "You're already using that style.") + to_chat(src, span_notice("You're already using that style.")) /mob/living/carbon/human/proc/tackle() set category = "Abilities" @@ -42,7 +42,7 @@ return if(stat || paralysis || stunned || weakened || lying || restrained() || buckled) - to_chat(src, "You cannot tackle someone in your current state.") + to_chat(src, span_notice("You cannot tackle someone in your current state.")) return var/list/choices = list() @@ -61,7 +61,7 @@ return if(stat || paralysis || stunned || weakened || lying || restrained() || buckled) - to_chat(src, span_filter_notice("You cannot tackle in your current state.")) + to_chat(src, span_notice("You cannot tackle in your current state.")) return last_special = world.time + 50 @@ -78,7 +78,7 @@ for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) - O.show_message(span_filter_warning("[span_red("[src] [failed ? "tried to tackle" : "has tackled"] down [T]!")]"), 1) + O.show_message(span_warning(span_red(span_bold("[src] [failed ? "tried to tackle" : "has tackled"] down [T]!"))), 1) /mob/living/carbon/human/proc/commune() set category = "Abilities" @@ -126,7 +126,7 @@ if(M in stomach_contents) stomach_contents.Remove(M) M.loc = loc - src.visible_message(span_filter_warning("[span_red("[src] hurls out the contents of their stomach!")]")) + src.visible_message(span_filter_warning(span_red(span_bold("[src] hurls out the contents of their stomach!")))) return /mob/living/carbon/human/proc/psychic_whisper(mob/M as mob in oview()) @@ -191,8 +191,8 @@ qdel(Org) // Purge the diona verbs. - verbs -= /mob/living/carbon/human/proc/diona_split_nymph - verbs -= /mob/living/carbon/human/proc/regenerate + remove_verb(src, /mob/living/carbon/human/proc/diona_split_nymph) + remove_verb(src, /mob/living/carbon/human/proc/regenerate) for(var/obj/item/organ/external/E in organs) // Just fall apart. E.droplimb(TRUE) @@ -211,7 +211,7 @@ to_chat(src, span_notice("Performing self-diagnostic, please wait...")) spawn(50) - var/output = span_filter_notice("Self-Diagnostic Results:\n") + var/output = span_filter_notice("Self-Diagnostic Results:\n") output += "Internal Temperature: [convert_k2c(bodytemperature)] Degrees Celsius\n" @@ -220,24 +220,24 @@ var/toxDam = getToxLoss() if(toxDam) - output += "System Instability: [toxDam > 25 ? "Severe" : "Moderate"]. Seek charging station for cleanup.\n" + output += "System Instability: " + span_warning("[toxDam > 25 ? "Severe" : "Moderate"]") + ". Seek charging station for cleanup.\n" else - output += "System Instability: OK\n" + output += "System Instability: " + span_green("OK") + "\n" for(var/obj/item/organ/external/EO in organs) if(EO.robotic >= ORGAN_ASSISTED) if(EO.brute_dam || EO.burn_dam) - output += "[EO.name] - [EO.burn_dam + EO.brute_dam > EO.min_broken_damage ? "Heavy Damage" : "Light Damage"]\n" //VOREStation Edit - Makes robotic limb damage scalable + output += "[EO.name] - " + span_warning("[EO.burn_dam + EO.brute_dam > EO.min_broken_damage ? "Heavy Damage" : "Light Damage"]") + "\n" //VOREStation Edit - Makes robotic limb damage scalable else - output += "[EO.name] - OK\n" + output += "[EO.name] - " + span_green("OK") + "\n" for(var/obj/item/organ/IO in internal_organs) if(IO.robotic >= ORGAN_ASSISTED) if(IO.damage) - output += "[IO.name] - [IO.damage > 10 ? "Heavy Damage" : "Light Damage"]\n" + output += "[IO.name] - " + span_warning("[IO.damage > 10 ? "Heavy Damage" : "Light Damage"]") + "\n" else - output += "[IO.name] - OK\n" - output += "" + output += "[IO.name] - " + span_green("OK") + "\n" + output = span_notice(output) to_chat(src,output) @@ -267,7 +267,7 @@ continue heard_something = TRUE var/feedback = list() - feedback += "There are noises of movement " + feedback += "There are noises of movement " var/direction = get_dir(src, L) if(direction) feedback += "towards the [dir2text(direction)], " @@ -284,8 +284,7 @@ feedback += "far away." else // No need to check distance if they're standing right on-top of us feedback += "right on top of you." - feedback += "" - to_chat(src,jointext(feedback,null)) + to_chat(src,span_notice(jointext(feedback,null))) if(!heard_something) to_chat(src, span_notice("You hear no movement but your own.")) @@ -303,7 +302,7 @@ return else active_regen = TRUE - src.visible_message(span_filter_notice("[src]'s flesh begins to mend...")) + src.visible_message(span_filter_notice(span_bold("[src]") + "'s flesh begins to mend...")) var/delay_length = round(active_regen_delay * species.active_regen_mult) if(do_after(src,delay_length)) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 92239e537b1..25ae7e3f50e 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -222,7 +222,6 @@ This saves us from having to call add_fingerprint() any time something is put in else return 0 - update_action_buttons() return 1 @@ -369,9 +368,6 @@ This saves us from having to call add_fingerprint() any time something is put in W.hud_layerise() - if(W.action_button_name) - update_action_buttons() - if(W.zoom) W.zoom() diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 49fa407eb7b..056dbf7f034 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1237,7 +1237,7 @@ if(halloss >= species.total_health) to_chat(src, span_notice("You're in too much pain to keep going...")) - src.visible_message("[src] slumps to the ground, too weak to continue fighting.") + src.visible_message(span_infoplain(span_bold("[src]") + " slumps to the ground, too weak to continue fighting.")) Paralyse(10) setHalLoss(species.total_health - 1) diff --git a/code/modules/mob/living/carbon/human/species/lleill/hanner.dm b/code/modules/mob/living/carbon/human/species/lleill/hanner.dm index f63369d232b..8b7e2b98f80 100644 --- a/code/modules/mob/living/carbon/human/species/lleill/hanner.dm +++ b/code/modules/mob/living/carbon/human/species/lleill/hanner.dm @@ -114,7 +114,7 @@ H.ability_master = new /obj/screen/movable/ability_master/lleill(H) for(var/datum/power/lleill/P in lleill_ability_datums) if(!(P.verbpath in H.verbs)) - H.verbs += P.verbpath + add_verb(H, P.verbpath) H.ability_master.add_lleill_ability( object_given = H, verb_given = P.verbpath, diff --git a/code/modules/mob/living/carbon/human/species/lleill/lleill.dm b/code/modules/mob/living/carbon/human/species/lleill/lleill.dm index 4072e5af050..8c6e2065557 100644 --- a/code/modules/mob/living/carbon/human/species/lleill/lleill.dm +++ b/code/modules/mob/living/carbon/human/species/lleill/lleill.dm @@ -206,7 +206,7 @@ H.ability_master = new /obj/screen/movable/ability_master/lleill(H) for(var/datum/power/lleill/P in lleill_ability_datums) if(!(P.verbpath in H.verbs)) - H.verbs += P.verbpath + add_verb(H, P.verbpath) H.ability_master.add_lleill_ability( object_given = H, verb_given = P.verbpath, @@ -239,4 +239,3 @@ /datum/species/lleill/add_inherent_verbs(var/mob/living/carbon/human/H) ..() add_lleill_abilities(H) - diff --git a/code/modules/mob/living/carbon/human/species/lleill/lleill_abilities.dm b/code/modules/mob/living/carbon/human/species/lleill/lleill_abilities.dm index 5e68449f251..d61512624ea 100644 --- a/code/modules/mob/living/carbon/human/species/lleill/lleill_abilities.dm +++ b/code/modules/mob/living/carbon/human/species/lleill/lleill_abilities.dm @@ -60,7 +60,7 @@ wrapped_species_by_ref["\ref[src]"] = new_species dna.base_species = new_species species.base_species = new_species - visible_message("\The [src] shifts and contorts, taking the form of \a [new_species]!") + visible_message(span_infoplain(span_bold("\The [src]") + " shifts and contorts, taking the form of \a [new_species]!")) regenerate_icons() /mob/living/carbon/human/proc/lleill_select_colour() @@ -141,11 +141,11 @@ to_chat(src, span_warning("The item is no longer in your hands.")) return else - visible_message("\The [src] begins to change the form of \the [I].") + visible_message(span_infoplain(span_bold("\The [src]") + " begins to change the form of \the [I].")) if(!do_after(usr, 10 SECONDS, I, exclusive = TASK_USER_EXCLUSIVE)) - visible_message("\The [src] leaves \the [I] in its original form.") + visible_message(span_infoplain(span_bold("\The [src]") + " leaves \the [I] in its original form.")) return 0 - visible_message("\The [src] transmutes \the [I] into \the [transmute_product.name].") + visible_message(span_infoplain(span_bold("\The [src]") + " transmutes \the [I] into \the [transmute_product.name].")) drop_item(I) qdel(I) var/spawnloc = get_turf(usr) @@ -183,7 +183,7 @@ to_chat(src, span_warning("You do not have enough energy to do that!")) return if(!do_after(src, 10 SECONDS, src, exclusive = TASK_USER_EXCLUSIVE)) - src.visible_message("\The [src] begins to form white rings on the ground.") + src.visible_message(span_infoplain(span_bold("\The [src]") + " begins to form white rings on the ground.")) return 0 to_chat(src, span_warning("You place a new glamour ring at your feet.")) var/spawnloc = get_turf(src) @@ -292,28 +292,28 @@ return if(accepted == "Yes") if(contact_type == "Kiss (lips)") - src.visible_message("\The [src] presses their lips up against [chosen_target]'s own.") + src.visible_message(span_infoplain(span_bold("\The [src]") + " presses their lips up against [chosen_target]'s own.")) if(contact_type == "Kiss (neck)") - src.visible_message("\The [src] presses their lips up against [chosen_target]'s neck.") + src.visible_message(span_infoplain(span_bold("\The [src]") + " presses their lips up against [chosen_target]'s neck.")) if(contact_type == "Bite (neck)") - src.visible_message("\The [src] bites down on [chosen_target]'s neck.") + src.visible_message(span_infoplain(span_bold("\The [src]") + " bites down on [chosen_target]'s neck.")) if(contact_type == "Bite (wrist)") - src.visible_message("\The [src] bites down on [chosen_target]'s wrist.") + src.visible_message(span_infoplain(span_bold("\The [src]") + " bites down on [chosen_target]'s wrist.")) if(contact_type == "Hold Hand") - src.visible_message("\The [src] takes [chosen_target]'s hand into their own.") + src.visible_message(span_infoplain(span_bold("\The [src]") + " takes [chosen_target]'s hand into their own.")) if(contact_type == "Embrace") - src.visible_message("\The [src] embraces [chosen_target].") + src.visible_message(span_infoplain(span_bold("\The [src]") + " embraces [chosen_target].")) if(contact_type == "Stroke (hair)") - src.visible_message("\The [src] runs their hand through [chosen_target]'s hair.") + src.visible_message(span_infoplain(span_bold("\The [src]") + " runs their hand through [chosen_target]'s hair.")) if(contact_type == "Boop (nose)") - src.visible_message("\The [src] boops [chosen_target] on the nose.") + src.visible_message(span_infoplain(span_bold("\The [src]") + " boops [chosen_target] on the nose.")) if(contact_type == "Custom") - src.visible_message("[custom_text]") + src.visible_message(span_infoplain("[custom_text]")) if(!do_after(src, 10 SECONDS, chosen_target, exclusive = TASK_USER_EXCLUSIVE)) return else - src.visible_message("\The [src] and \the [chosen_target] break contact before energy has been transferred.") - src.visible_message("\The [src] and \the [chosen_target] complete their contact.") + src.visible_message(span_infoplain(span_bold("\The [src]") + " and \the [chosen_target] break contact before energy has been transferred.")) + src.visible_message(span_infoplain(span_bold("\The [src]") + " and \the [chosen_target] complete their contact.")) species.lleill_energy = species.lleill_energy_max nutrition += (chosen_target.nutrition / 2) to_chat(src, span_warning("You feel revitalised.")) @@ -360,11 +360,11 @@ to_chat(src, span_warning("The item is no longer in your hands.")) return else - visible_message("\The [src] begins to change the form of \the [I].") + visible_message(span_infoplain(span_bold("\The [src]") + " begins to change the form of \the [I].")) if(!do_after(usr, 10 SECONDS, I, exclusive = TASK_USER_EXCLUSIVE)) - visible_message("\The [src] leaves \the [I] in its original form.") + visible_message(span_infoplain(span_bold("\The [src]") + " leaves \the [I] in its original form.")) return 0 - visible_message("\The [src] transmutes \the [I] into \the [transmute_product.name].") + visible_message(span_infoplain(span_bold("\The [src]") + " transmutes \the [I] into \the [transmute_product.name].")) drop_item(I) qdel(I) var/spawnloc = get_turf(usr) @@ -451,9 +451,9 @@ to_chat(src, span_warning("You are too injured to transform into a beast.")) return - visible_message("\The [src] begins significantly shifting their form.") + visible_message(span_infoplain(span_bold("\The [src]") + " begins significantly shifting their form.")) if(!do_after(src, 10 SECONDS, src, exclusive = TASK_USER_EXCLUSIVE)) - visible_message("\The [src] ceases shifting their form.") + visible_message(span_infoplain(span_bold("\The [src]") + " ceases shifting their form.")) return 0 var/image/coolanimation = image('icons/obj/glamour.dmi', null, "animation") @@ -476,8 +476,8 @@ new_mob.vore_organs = list() new_mob.name = M.name new_mob.real_name = M.real_name - new_mob.verbs |= /mob/living/proc/revert_beast_form - new_mob.verbs |= /mob/living/proc/set_size + add_verb(new_mob, /mob/living/proc/revert_beast_form) + add_verb(new_mob, /mob/living/proc/set_size) for(var/lang in M.languages) new_mob.languages |= lang M.copy_vore_prefs_to_mob(new_mob) @@ -517,7 +517,7 @@ M.loc = new_mob M.forceMove(new_mob) new_mob.tf_mob_holder = M - new_mob.visible_message("\The [src] has transformed into \the [chosen_beast]!") + new_mob.visible_message(span_infoplain(span_bold("\The [src]") + " has transformed into \the [chosen_beast]!")) species.update_lleill_hud(src) @@ -541,11 +541,11 @@ to_chat(src, span_warning("You can't do that in your condition.")) return - visible_message("\The [src] begins significantly shifting their form.") + visible_message(span_infoplain(span_bold("\The [src]") + " begins significantly shifting their form.")) if(!do_after(src, 10 SECONDS, src, exclusive = TASK_USER_EXCLUSIVE)) - visible_message("\The [src] ceases shifting their form.") + visible_message(span_infoplain(span_bold("\The [src]") + " ceases shifting their form.")) return 0 - visible_message("\The [src] has reverted to their original form.") + visible_message(span_infoplain(span_bold("\The [src]") + " has reverted to their original form.")) revert_mob_tf() @@ -629,9 +629,9 @@ to_chat(src, span_warning("You are too injured to transform into a beast.")) return - visible_message("\The [src] begins significantly shifting their form.") + visible_message(span_infoplain(span_bold("\The [src]") + " begins significantly shifting their form.")) if(!do_after(src, 10 SECONDS, src, exclusive = TASK_USER_EXCLUSIVE)) - visible_message("\The [src] ceases shifting their form.") + visible_message(span_infoplain(span_bold("\The [src]") + " ceases shifting their form.")) return 0 var/image/coolanimation = image('icons/obj/glamour.dmi', null, "animation") @@ -654,8 +654,8 @@ new_mob.vore_organs = list() new_mob.name = M.name new_mob.real_name = M.real_name - new_mob.verbs |= /mob/living/proc/revert_beast_form - new_mob.verbs |= /mob/living/proc/set_size + add_verb(new_mob, /mob/living/proc/revert_beast_form) + add_verb(new_mob, /mob/living/proc/set_size) new_mob.hasthermals = 0 new_mob.health = M.health new_mob.maxHealth = M.health @@ -698,4 +698,4 @@ M.loc = new_mob M.forceMove(new_mob) new_mob.tf_mob_holder = M - new_mob.visible_message("\The [src] has transformed into \the [chosen_beast]!") + new_mob.visible_message(span_infoplain(span_bold("\The [src]") + " has transformed into \the [chosen_beast]!")) diff --git a/code/modules/mob/living/carbon/human/species/lleill/lleill_items.dm b/code/modules/mob/living/carbon/human/species/lleill/lleill_items.dm index 5121d8c842d..b36bad80e59 100644 --- a/code/modules/mob/living/carbon/human/species/lleill/lleill_items.dm +++ b/code/modules/mob/living/carbon/human/species/lleill/lleill_items.dm @@ -24,7 +24,7 @@ /datum/reagent/glamour_transparent/affect_blood(var/mob/living/carbon/target, var/removed) if(!target.cloaked) - target.visible_message("\The [target] vanishes from sight.") + target.visible_message(span_infoplain(span_bold("\The [target]") + " vanishes from sight.")) target.cloak() target.bloodstr.clear_reagents() //instantly clears reagents afterwards target.ingested.clear_reagents() @@ -32,7 +32,7 @@ spawn(600) if(target.cloaked) target.uncloak() - target.visible_message("\The [target] appears as if from thin air.") + target.visible_message(span_infoplain(span_bold("\The [target]") + " appears as if from thin air.")) //Shrinking Glamour (scaling potion) @@ -61,7 +61,7 @@ /datum/reagent/glamour_scaling/affect_blood(var/mob/living/carbon/target, var/removed) if(!(/mob/living/proc/set_size in target.verbs)) to_chat(target, span_warning("You feel as though you could change size at any moment.")) - target.verbs |= /mob/living/proc/set_size + add_verb(target, /mob/living/proc/set_size) target.bloodstr.clear_reagents() //instantly clears reagents afterwards target.ingested.clear_reagents() target.touching.clear_reagents() @@ -159,7 +159,7 @@ if(!h_action || h_action == "Cancel") return if(h_action == "Recall") - H.visible_message("\The [H] returns to the face.") + H.visible_message(span_infoplain(span_bold("\The [H]") + " returns to the face.")) qdel(H) homunculus = 0 return @@ -253,7 +253,7 @@ to_chat(M, span_warning("You leave the glamour ring alone.")) return to_chat(M, span_warning("You have destroyed \the [src].")) - src.visible_message("\The [M] has broken apart \the [src].") + src.visible_message(span_infoplain(span_bold("\The [M]") + " has broken apart \the [src].")) if(M != connected_mob && connected_mob) to_chat(connected_mob, span_warning("\The [src] has been destroyed by \the [M].")) if(istype(LL)) diff --git a/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm b/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm index 032a76628d8..c1de18c498f 100644 --- a/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm +++ b/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm @@ -144,7 +144,7 @@ H.ability_master = new /obj/screen/movable/ability_master/shadekin(H) for(var/datum/power/shadekin/P in shadekin_ability_datums) if(!(P.verbpath in H.verbs)) - H.verbs += P.verbpath + add_verb(H, P.verbpath) H.ability_master.add_shadekin_ability( object_given = H, verb_given = P.verbpath, @@ -341,4 +341,4 @@ new_copy.energy_dark = energy_dark - return new_copy \ No newline at end of file + return new_copy diff --git a/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm b/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm index 696af416c4c..3d62d0d033f 100644 --- a/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm +++ b/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm @@ -29,7 +29,7 @@ /mob/living/carbon/human/proc/phase_shift() set name = "Phase Shift (100)" set desc = "Shift yourself out of alignment with realspace to travel quickly to different areas." - set category = "Shadekin" + set category = "Abilities.Shadekin" var/ability_cost = 100 @@ -181,7 +181,7 @@ /mob/living/carbon/human/proc/regenerate_other() set name = "Regenerate Other (50)" set desc = "Spend energy to heal physical wounds in another creature." - set category = "Shadekin" + set category = "Abilities.Shadekin" var/ability_cost = 50 @@ -250,7 +250,7 @@ /mob/living/carbon/human/proc/create_shade() set name = "Create Shade (25)" set desc = "Create a field of darkness that follows you." - set category = "Shadekin" + set category = "Abilities.Shadekin" var/ability_cost = 25 diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 296b9e386cc..72b4396d61a 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -458,13 +458,13 @@ /datum/species/proc/remove_inherent_verbs(var/mob/living/carbon/human/H) if(inherent_verbs) for(var/verb_path in inherent_verbs) - H.verbs -= verb_path + remove_verb(H, verb_path) return /datum/species/proc/add_inherent_verbs(var/mob/living/carbon/human/H) if(inherent_verbs) for(var/verb_path in inherent_verbs) - H.verbs |= verb_path + add_verb(H, verb_path) return /datum/species/proc/handle_post_spawn(var/mob/living/carbon/human/H) //Handles anything not already covered by basic species assignment. @@ -556,8 +556,8 @@ return FALSE // Allow species to display interesting information in the human stat panels -/datum/species/proc/Stat(var/mob/living/carbon/human/H) - return +/datum/species/proc/get_status_tab_items(var/mob/living/carbon/human/H) + return "" /datum/species/proc/handle_water_damage(var/mob/living/carbon/human/H, var/amount = 0) amount *= 1 - H.get_water_protection() @@ -576,7 +576,7 @@ if(!silent) to_chat(H, span_notice("You manage to lower impact of the fall and land safely.")) - landing.visible_message("\The [H] lowers down from above, landing safely.") + landing.visible_message(span_infoplain(span_bold("\The [H]") + " lowers down from above, landing safely.")) playsound(H, "rustle", 25, 1) return TRUE @@ -584,3 +584,6 @@ /datum/species/proc/post_spawn_special(mob/living/carbon/human/H) return + +/datum/species/proc/update_misc_tabs(var/mob/living/carbon/human/H) + return diff --git a/code/modules/mob/living/carbon/human/species/species_shapeshift.dm b/code/modules/mob/living/carbon/human/species/species_shapeshift.dm index 20b0c26a147..cac17137eb1 100644 --- a/code/modules/mob/living/carbon/human/species/species_shapeshift.dm +++ b/code/modules/mob/living/carbon/human/species/species_shapeshift.dm @@ -165,7 +165,7 @@ var/list/wrapped_species_by_ref = list() return wrapped_species_by_ref["\ref[src]"] = new_species - visible_message("\The [src] shifts and contorts, taking the form of \a [new_species]!") + visible_message(span_infoplain(span_bold("\The [src]") + " shifts and contorts, taking the form of \a [new_species]!")) regenerate_icons() */ diff --git a/code/modules/mob/living/carbon/human/species/species_shapeshift_vr.dm b/code/modules/mob/living/carbon/human/species/species_shapeshift_vr.dm index 8f497f40c47..88074be3d4a 100644 --- a/code/modules/mob/living/carbon/human/species/species_shapeshift_vr.dm +++ b/code/modules/mob/living/carbon/human/species/species_shapeshift_vr.dm @@ -189,5 +189,5 @@ species.base_species = new_species wrapped_species_by_ref["\ref[src]"] = new_species if (visible) - visible_message(span_filter_notice("\The [src] shifts and contorts, taking the form of \a [new_species]!")) + visible_message(span_filter_notice(span_bold("\The [src]") + " shifts and contorts, taking the form of \a [new_species]!")) regenerate_icons() diff --git a/code/modules/mob/living/carbon/human/species/station/alraune.dm b/code/modules/mob/living/carbon/human/species/station/alraune.dm index 2c2089e57b2..38fbfa66f0b 100644 --- a/code/modules/mob/living/carbon/human/species/station/alraune.dm +++ b/code/modules/mob/living/carbon/human/species/station/alraune.dm @@ -393,8 +393,8 @@ var/selection = tgui_input_list(src, "Choose your character's fruit type. Choosing nothing will result in a default of apples.", "Fruit Type", acceptable_fruit_types) if(selection) fruit_gland.fruit_type = selection - verbs |= /mob/living/carbon/human/proc/alraune_fruit_pick - verbs -= /mob/living/carbon/human/proc/alraune_fruit_select + add_verb(src, /mob/living/carbon/human/proc/alraune_fruit_pick) + remove_verb(src, /mob/living/carbon/human/proc/alraune_fruit_select) fruit_gland.organ_owner = src fruit_gland.emote_descriptor = list("fruit right off of [fruit_gland.organ_owner]!", "a fruit from [fruit_gland.organ_owner]!") diff --git a/code/modules/mob/living/carbon/human/species/station/prometheans.dm b/code/modules/mob/living/carbon/human/species/station/prometheans.dm index 1163aa41f67..371824d2099 100644 --- a/code/modules/mob/living/carbon/human/species/station/prometheans.dm +++ b/code/modules/mob/living/carbon/human/species/station/prometheans.dm @@ -175,7 +175,7 @@ var/datum/species/shapeshifter/promethean/prometheans if(FEMALE) t_him = "her" - H.visible_message("\The [H] glomps [target] to make [t_him] feel better!", \ + H.visible_message(span_infoplain(span_bold("\The [H]") + " glomps [target] to make [t_him] feel better!"), \ span_notice("You glomp [target] to make [t_him] feel better!")) H.apply_stored_shock_to(target) diff --git a/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm b/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm index 9bdf64f4f29..9f19887a667 100644 --- a/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm +++ b/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm @@ -42,15 +42,14 @@ /decl/emote/visible/floorspin ) /mob/living/simple_mob/slime/promethean/Initialize(mapload, null) - //verbs -= /mob/living/proc/ventcrawl - verbs += /mob/living/simple_mob/slime/promethean/proc/prommie_blobform - verbs += /mob/living/proc/set_size - verbs += /mob/living/proc/hide - verbs += /mob/living/simple_mob/proc/animal_nom - verbs += /mob/living/proc/shred_limb - verbs += /mob/living/simple_mob/slime/promethean/proc/toggle_expand - verbs += /mob/living/simple_mob/slime/promethean/proc/prommie_select_colour - verbs += /mob/living/simple_mob/slime/promethean/proc/toggle_shine + add_verb(src, /mob/living/simple_mob/slime/promethean/proc/prommie_blobform) + add_verb(src, /mob/living/proc/set_size) + add_verb(src, /mob/living/proc/hide) + add_verb(src, /mob/living/simple_mob/proc/animal_nom) + add_verb(src, /mob/living/proc/shred_limb) + add_verb(src, /mob/living/simple_mob/slime/promethean/proc/toggle_expand) + add_verb(src, /mob/living/simple_mob/slime/promethean/proc/prommie_select_colour) + add_verb(src, /mob/living/simple_mob/slime/promethean/proc/toggle_shine) update_mood() if(rad_glow) rad_glow = CLAMP(rad_glow,0,250) @@ -81,10 +80,10 @@ QDEL_NULL(stored_blob) return ..() -/mob/living/simple_mob/slime/promethean/Stat() - ..() +/mob/living/simple_mob/slime/promethean/update_misc_tabs() + . = ..() if(humanform) - humanform.species.Stat(humanform) + humanform.species.update_misc_tabs(src) /mob/living/simple_mob/slime/promethean/handle_special() // Should disable default slime healing, we'll use nutrition based heals instead. if(rad_glow) @@ -264,11 +263,11 @@ if(is_wide) is_wide = FALSE - src.visible_message("[src.name] pulls together, compacting themselves into a small ball!") + src.visible_message(span_infoplain(span_bold("[src.name]") + " pulls together, compacting themselves into a small ball!")) update_icon() else is_wide = TRUE - src.visible_message("[src.name] flows outwards, their goop expanding!") + src.visible_message(span_infoplain(span_bold("[src.name]") + " flows outwards, their goop expanding!")) update_icon() /mob/living/simple_mob/slime/promethean/proc/toggle_shine() @@ -284,11 +283,11 @@ if(shiny) shiny = FALSE - src.visible_message("[src.name] dulls their shine, becoming more translucent.") + src.visible_message(span_infoplain(span_bold("[src.name]") + " dulls their shine, becoming more translucent.")) update_icon() else shiny = TRUE - src.visible_message("[src.name] glistens and sparkles, shining brilliantly.") + src.visible_message(span_infoplain(span_bold("[src.name]") + " glistens and sparkles, shining brilliantly.")) update_icon() /mob/living/simple_mob/slime/promethean/proc/prommie_select_colour() @@ -409,14 +408,14 @@ new_hat.forceMove(src) blob.update_icon() - blob.verbs -= /mob/living/proc/ventcrawl // Absolutely not. - blob.verbs -= /mob/living/simple_mob/proc/set_name // We already have a name. + remove_verb(blob, /mob/living/proc/ventcrawl) // Absolutely not. + remove_verb(blob, /mob/living/simple_mob/proc/set_name) // We already have a name. temporary_form = blob //Mail them to nullspace moveToNullspace() //Message - blob.visible_message("[src.name] squishes into their true form!") + blob.visible_message(span_infoplain(span_bold("[src.name]") + " squishes into their true form!")) //Transfer vore organs blob.vore_organs = vore_organs @@ -449,7 +448,7 @@ stop_pulling() //Message - blob.visible_message("[src.name] pulls together, forming a humanoid shape!") + blob.visible_message(span_infoplain(span_bold("[src.name]") + " pulls together, forming a humanoid shape!")) //Record where they should go var/atom/reform_spot = blob.drop_location() diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm index fb1b1366e41..40d366f7d55 100644 --- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm @@ -63,8 +63,8 @@ humanform = H updatehealth() refactory = locate() in humanform.internal_organs - verbs |= /mob/living/proc/ventcrawl - verbs |= /mob/living/proc/hide + add_verb(src, /mob/living/proc/ventcrawl) + add_verb(src, /mob/living/proc/hide) else update_icon() @@ -99,10 +99,10 @@ /mob/living/simple_mob/protean_blob/isSynthetic() return TRUE // yup -/mob/living/simple_mob/protean_blob/Stat() - ..() +/mob/living/simple_mob/protean_blob/update_misc_tabs() + . = ..() if(humanform) - humanform.species.Stat(humanform) + humanform.species.update_misc_tabs(src) /mob/living/simple_mob/protean_blob/update_icon() if(humanform) @@ -288,7 +288,7 @@ if(!allowed) return if(refactory.add_stored_material(S.material.name,1*S.perunit) && S.use(1)) - visible_message("[name] gloms over some of \the [S], absorbing it.") + visible_message(span_infoplain(span_bold("[name]") + " gloms over some of \the [S], absorbing it.")) else return ..() @@ -302,7 +302,7 @@ if(!allowed) return if(refactory.add_stored_material(S.material.name,1*S.perunit) && S.use(1)) - visible_message("[name] gloms over some of \the [S], absorbing it.") + visible_message(span_infoplain(span_bold("[name]") + " gloms over some of \the [S], absorbing it.")) else return ..() @@ -323,10 +323,6 @@ var/global/list/disallowed_protean_accessories = list( to_chat(src,span_warning("You can't change forms while inside something.")) return - var/panel_was_up = FALSE - if(client?.statpanel == "Protean") - panel_was_up = TRUE - handle_grasp() //It's possible to blob out before some key parts of the life loop. This results in things getting dropped at null. TODO: Fix the code so this can be done better. remove_micros(src, src) //Living things don't fare well in roblobs. if(buckled) @@ -389,7 +385,7 @@ var/global/list/disallowed_protean_accessories = list( moveToNullspace() //Message - blob.visible_message("[src.name] collapses into a gooey blob!") + blob.visible_message(span_infoplain(span_bold("[src.name]") + " collapses into a gooey blob!")) //Duration of the to_puddle iconstate that the blob starts with sleep(13) @@ -405,9 +401,6 @@ var/global/list/disallowed_protean_accessories = list( //We can still speak our languages! blob.languages = languages.Copy() - //Flip them to the protean panel - if(panel_was_up) - client?.statpanel = "Protean" //Return our blob in case someone wants it return blob @@ -427,10 +420,6 @@ var/global/list/disallowed_protean_accessories = list( to_chat(blob,span_warning("You can't change forms while inside something.")) return - var/panel_was_up = FALSE - if(client?.statpanel == "Protean") - panel_was_up = TRUE - if(buckled) buckled.unbuckle_mob() if(LAZYLEN(buckled_mobs)) @@ -448,7 +437,7 @@ var/global/list/disallowed_protean_accessories = list( blob.icon_state = "from_puddle" //Message - blob.visible_message("[src.name] reshapes into a humanoid appearance!") + blob.visible_message(span_infoplain(span_bold("[src.name]") + " reshapes into a humanoid appearance!")) //Duration of above animation sleep(8) @@ -483,10 +472,6 @@ var/global/list/disallowed_protean_accessories = list( //Get rid of friend blob qdel(blob) - //Flip them to the protean panel - if(panel_was_up) - client?.statpanel = "Protean" - //Return ourselves in case someone wants it return src diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm index 397d5943ba4..b9043316123 100644 --- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm @@ -78,7 +78,7 @@ return //Lost it meanwhile eo.robotize(manu_choice) - visible_message("[src]'s [choice] loses its shape, then reforms.") + visible_message(span_infoplain(span_bold("[src]") + "'s [choice] loses its shape, then reforms.")) update_icons_body() //// @@ -134,7 +134,7 @@ var/obj/item/organ/external/torso = organs_by_name[BP_TORSO] to_chat(src, span_danger("Remain still while the process takes place! It will take 5 seconds.")) - visible_message("[src]'s form collapses into an amorphous blob of black ichor...") + visible_message(span_infoplain(span_bold("[src]") + "'s form collapses into an amorphous blob of black ichor...")) var/mob/living/simple_mob/protean_blob/blob = nano_intoblob() active_regen = TRUE @@ -142,7 +142,7 @@ synthetic = usable_manufacturers[manu_choice] torso.robotize(manu_choice) //Will cascade to all other organs. regenerate_icons() - visible_message("[src]'s form reshapes into a new one...") + visible_message(span_infoplain(span_bold("[src]") + "'s form reshapes into a new one...")) active_regen = FALSE nano_outofblob(blob) return @@ -154,7 +154,7 @@ var/delay_length = round(active_regen_delay * species.active_regen_mult) to_chat(src, span_danger("Remain still while the process takes place! It will take [delay_length/10] seconds.")) - visible_message("[src]'s form begins to shift and ripple as if made of oil...") + visible_message(span_infoplain(span_bold("[src]") + "'s form begins to shift and ripple as if made of oil...")) active_regen = TRUE var/mob/living/simple_mob/protean_blob/blob = nano_intoblob() @@ -358,7 +358,7 @@ var/opts = clickprops["shift"] if(opts) - to_chat(usr,span_notice("[ability_name] - [desc]")) + to_chat(usr,span_notice(span_bold("[ability_name]") + " - [desc]")) else //Humanform using it if(ishuman(usr)) diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm index d106ec4eb49..e582d2b4d7d 100755 --- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm @@ -4,7 +4,7 @@ name = SPECIES_PROTEAN name_plural = "Proteans" blurb = "Sometimes very advanced civilizations will produce the ability to swap into manufactured, robotic bodies. And sometimes \ - VERY advanced civilizations have the option of 'nanoswarm' bodies. Effectively a single robot body comprised \ + " + span_italics("VERY") + " advanced civilizations have the option of 'nanoswarm' bodies. Effectively a single robot body comprised \ of millions of tiny nanites working in concert to maintain cohesion." show_ssd = "totally quiescent" death_message = "rapidly loses cohesion, dissolving into a cloud of gray dust..." @@ -212,22 +212,32 @@ /datum/species/protean/get_additional_examine_text(var/mob/living/carbon/human/H) return ..() //Hmm, what could be done here? -/datum/species/protean/Stat(var/mob/living/carbon/human/H) +/datum/species/protean/update_misc_tabs(var/mob/living/carbon/human/H) ..() - if(statpanel("Protean")) - var/obj/item/organ/internal/nano/refactory/refactory = H.nano_get_refactory() - if(refactory && !(refactory.status & ORGAN_DEAD)) - stat(null, "- -- --- Refactory Metal Storage --- -- -") - var/max = refactory.max_storage - for(var/material in refactory.materials) - var/amount = refactory.get_stored_material(material) - stat("[capitalize(material)]", "[amount]/[max]") - else - stat(null, "- -- --- REFACTORY ERROR! --- -- -") + var/list/L = list() + var/obj/item/organ/internal/nano/refactory/refactory = H.nano_get_refactory() + if(refactory && !(refactory.status & ORGAN_DEAD)) + L[++L.len] = list("- -- --- Refactory Metal Storage --- -- -", null, null, null, null) + var/max = refactory.max_storage + for(var/material in refactory.materials) + var/amount = refactory.get_stored_material(material) + L[++L.len] = list("[capitalize(material)]: [amount]/[max]", null, null, null, null) + else + L[++L.len] = list("- -- --- REFACTORY ERROR! --- -- -", null, null, null, null) - stat(null, "- -- --- Abilities (Shift+LMB Examines) --- -- -") - for(var/obj/effect/protean_ability/A as anything in abilities) - stat("[A.ability_name]",A.atom_button_text()) + L[++L.len] = list("- -- --- Abilities (Shift+LMB Examines) --- -- -", null, null, null, null) + for(var/obj/effect/protean_ability/A as anything in abilities) + var/client/C = H.client + var/img + if(C && istype(C)) //sanity checks + if(A.ability_name in C.misc_cache) + img = C.misc_cache[A.ability_name] + else + img = icon2html(A,C,sourceonly=TRUE) + C.misc_cache[A.ability_name] = img + + L[++L.len] = list("[A.ability_name]", A.ability_name, img, A.atom_button_text(), REF(A)) + H.misc_tabs["Protean"] = L // Various modifiers /datum/modifier/protean diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index fda555edd8e..c2d52b273b9 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -633,8 +633,8 @@ qdel(Org) // Purge the diona verbs. - H.verbs -= /mob/living/carbon/human/proc/diona_split_nymph - H.verbs -= /mob/living/carbon/human/proc/regenerate + remove_verb(H, /mob/living/carbon/human/proc/diona_split_nymph) + remove_verb(H, /mob/living/carbon/human/proc/regenerate) return diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm index 4c7b12a130e..9bca0bcfc7a 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm @@ -57,7 +57,7 @@ // Was dead, still dead. else to_chat(src, span_notice("Consciousness begins to stir as your new body awakens, ready to hatch.")) - verbs |= /mob/living/carbon/human/proc/hatch + add_verb(src, /mob/living/carbon/human/proc/hatch) revive_ready = REVIVING_DONE src << sound('sound/effects/mob_effects/xenochimera/hatch_notification.ogg',0,0,0,30) clear_alert("regen") @@ -79,7 +79,7 @@ to_chat(src, span_notice("Consciousness begins to stir as your new body awakens, ready to hatch..")) else to_chat(src, span_warning("Consciousness begins to stir as your battered body struggles to recover from its ordeal..")) - verbs |= /mob/living/carbon/human/proc/hatch + add_verb(src, /mob/living/carbon/human/proc/hatch) revive_ready = REVIVING_DONE src << sound('sound/effects/mob_effects/xenochimera/hatch_notification.ogg',0,0,0,30) clear_alert("regen") @@ -110,7 +110,7 @@ if(revive_ready != REVIVING_DONE) //Hwhat? - verbs -= /mob/living/carbon/human/proc/hatch + remove_verb(src, /mob/living/carbon/human/proc/hatch) return var/confirm = tgui_alert(usr, "Are you sure you want to hatch right now? This will be very obvious to anyone in view.", "Confirm Regeneration", list("Yes", "No")) @@ -138,7 +138,7 @@ clear_alert("hatch") /mob/living/carbon/human/proc/chimera_hatch() - verbs -= /mob/living/carbon/human/proc/hatch + remove_verb(src, /mob/living/carbon/human/proc/hatch) to_chat(src, span_notice("Your new body awakens, bursting free from your old skin.")) //Modify and record values (half nutrition and braindamage) var/old_nutrition = nutrition @@ -176,8 +176,8 @@ name = "imperfect regeneration" desc = "You feel rather weak and unfocused, having just regrown your body not so long ago." - on_created_text = span_warning("You feel weak and unsteady, that regeneration having been rougher than most.") - on_expired_text = span_notice("You feel your strength and focus return to you.") + on_created_text = span_warning(span_large("You feel weak and unsteady, that regeneration having been rougher than most.")) + on_expired_text = span_notice(span_large("You feel your strength and focus return to you.")) /mob/living/carbon/human/proc/revivingreset() // keep this as a debug proc or potential future use revive_ready = REVIVING_READY @@ -469,9 +469,9 @@ if(noise) - src.visible_message(span_red("[src] moves their head next to [B]'s neck, seemingly looking for something!")) + src.visible_message(span_infoplain(span_red(span_bold("[src] moves their head next to [B]'s neck, seemingly looking for something!")))) else - src.visible_message(span_red("[src] moves their head next to [B]'s neck, seemingly looking for something!"), range = 1) + src.visible_message(span_infoplain(span_red(span_italics("[src] moves their head next to [B]'s neck, seemingly looking for something!"))), range = 1) if(bleed) //Due to possibility of missing/misclick and missing the bleeding cues, we are warning the scene members of BLEEDING being on to_chat(src, span_warning("This is going to cause [B] to keep bleeding!")) @@ -480,9 +480,9 @@ if(do_after(src, 300, B)) //Thrirty seconds. if(!Adjacent(B)) return if(noise) - src.visible_message(span_red("[src] suddenly extends their fangs and plunges them down into [B]'s neck!")) + src.visible_message(span_infoplain(span_red(span_bold("[src] suddenly extends their fangs and plunges them down into [B]'s neck!")))) else - src.visible_message(span_red("[src] suddenly extends their fangs and plunges them down into [B]'s neck!"), range = 1) + src.visible_message(span_infoplain(span_red(span_italics("[src] suddenly extends their fangs and plunges them down into [B]'s neck!"))), range = 1) if(bleed) B.apply_damage(10, BRUTE, BP_HEAD, blocked = 0, soaked = 0, sharp = TRUE, edge = FALSE) var/obj/item/organ/external/E = B.get_organ(BP_HEAD) @@ -1657,7 +1657,7 @@ add_attack_logs(src,target,"Injection trait ([trait_injection_selected], [trait_injection_amount])") if(target.reagents && (trait_injection_amount > 0) && !synth) target.reagents.add_reagent(trait_injection_selected, trait_injection_amount) - var/ourmsg = "[usr] [trait_injection_verb] [target] " + var/ourmsg = "[usr] [trait_injection_verb] [target] " switch(zone_sel.selecting) if(BP_HEAD) ourmsg += "on the head!" @@ -1677,5 +1677,4 @@ ourmsg += "on the mouth!" if("eyes") ourmsg += "on the eyes!" - ourmsg += "" - visible_message(ourmsg) + visible_message(span_warning(ourmsg)) diff --git a/code/modules/mob/living/carbon/human/species/station/teshari.dm b/code/modules/mob/living/carbon/human/species/station/teshari.dm index 15bed54a38c..9a7f71c86e0 100644 --- a/code/modules/mob/living/carbon/human/species/station/teshari.dm +++ b/code/modules/mob/living/carbon/human/species/station/teshari.dm @@ -210,7 +210,7 @@ // Handled! if(!silent) to_chat(H, span_notice("You catch the air in your wings and greatly slow your fall.")) - landing.visible_message("\The [H] glides down from above, landing safely.") + landing.visible_message(span_infoplain(span_bold("\The [H]") + " glides down from above, landing safely.")) H.Stun(1) playsound(H, "rustle", 25, 1) return TRUE diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm index d2257ee6699..441fddafa08 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm @@ -108,7 +108,7 @@ /datum/trait/neutral/bloodsucker/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..() - H.verbs |= /mob/living/carbon/human/proc/bloodsuck + add_verb(H, /mob/living/carbon/human/proc/bloodsuck) /datum/trait/neutral/bloodsucker_freeform name = "Bloodsucker" @@ -129,7 +129,7 @@ /datum/trait/neutral/bloodsucker_freeform/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..() - H.verbs |= /mob/living/carbon/human/proc/bloodsuck + add_verb(H, /mob/living/carbon/human/proc/bloodsuck) /datum/trait/neutral/succubus_drain name = "Succubus Drain" @@ -139,9 +139,9 @@ /datum/trait/neutral/succubus_drain/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..() - H.verbs |= /mob/living/carbon/human/proc/succubus_drain - H.verbs |= /mob/living/carbon/human/proc/succubus_drain_finalize - H.verbs |= /mob/living/carbon/human/proc/succubus_drain_lethal + add_verb(H, /mob/living/carbon/human/proc/succubus_drain) + add_verb(H, /mob/living/carbon/human/proc/succubus_drain_finalize) + add_verb(H, /mob/living/carbon/human/proc/succubus_drain_lethal) /datum/trait/neutral/venom_bite name = "Venomous Injection" @@ -169,7 +169,7 @@ /datum/trait/neutral/venom_bite/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..() - H.verbs |= /mob/living/proc/injection + add_verb(H, /mob/living/proc/injection) H.trait_injection_reagents += "microcillin" // get small H.trait_injection_reagents += "macrocillin" // get BIG H.trait_injection_reagents += "normalcillin" // normal @@ -201,7 +201,7 @@ /datum/trait/neutral/long_vore/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..() - H.verbs |= /mob/living/proc/long_vore + add_verb(H, /mob/living/proc/long_vore) /datum/trait/neutral/feeder name = "Feeder" @@ -211,7 +211,7 @@ /datum/trait/neutral/feeder/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..() - H.verbs |= /mob/living/carbon/human/proc/slime_feed + add_verb(H, /mob/living/carbon/human/proc/slime_feed) /datum/trait/neutral/stuffing_feeder name = "Food Stuffer" @@ -222,7 +222,7 @@ /datum/trait/neutral/stuffing_feeder/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..() - H.verbs |= /mob/living/proc/toggle_stuffing_mode + add_verb(H, /mob/living/proc/toggle_stuffing_mode) /datum/trait/neutral/hard_vore name = "Brutal Predation" @@ -232,7 +232,7 @@ /datum/trait/neutral/hard_vore/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..() - H.verbs |= /mob/living/proc/shred_limb + add_verb(H, /mob/living/proc/shred_limb) /datum/trait/neutral/trashcan name = "Trash Can" @@ -243,8 +243,8 @@ /datum/trait/neutral/trashcan/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..() - H.verbs |= /mob/living/proc/eat_trash - H.verbs |= /mob/living/proc/toggle_trash_catching //Ported from chompstation + add_verb(H, /mob/living/proc/eat_trash) + add_verb(H, /mob/living/proc/toggle_trash_catching) //Ported from chompstation /datum/trait/neutral/gem_eater name = "Expensive Taste" @@ -255,7 +255,7 @@ /datum/trait/neutral/gem_eater/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..() - H.verbs |= /mob/living/proc/eat_minerals + add_verb(H, /mob/living/proc/eat_minerals) /datum/trait/neutral/synth_chemfurnace name = "Biofuel Processor" @@ -292,7 +292,7 @@ /datum/trait/neutral/glowing_eyes/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..() - H.verbs |= /mob/living/carbon/human/proc/toggle_eye_glow + add_verb(H, /mob/living/carbon/human/proc/toggle_eye_glow) /datum/trait/neutral/glowing_body name = "Glowing Body" @@ -304,8 +304,8 @@ /datum/trait/neutral/glowing_body/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..() - H.verbs |= /mob/living/proc/glow_toggle - H.verbs |= /mob/living/proc/glow_color + add_verb(H, /mob/living/proc/glow_toggle) + add_verb(H, /mob/living/proc/glow_color) //Allergen traits! Not available to any species with a base allergens var. /datum/trait/neutral/allergy @@ -733,7 +733,7 @@ /datum/trait/neutral/dominate_predator/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..() - H.verbs |= /mob/proc/dominate_predator + add_verb(H, /mob/proc/dominate_predator) /datum/trait/neutral/dominate_prey name = "Dominate Prey" @@ -743,7 +743,7 @@ /datum/trait/neutral/dominate_prey/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..() - H.verbs |= /mob/living/proc/dominate_prey + add_verb(H, /mob/living/proc/dominate_prey) /datum/trait/neutral/submit_to_prey name = "Submit To Prey" @@ -753,7 +753,7 @@ /datum/trait/neutral/submit_to_prey/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..() - H.verbs |= /mob/living/proc/lend_prey_control + add_verb(H, /mob/living/proc/lend_prey_control) /datum/trait/neutral/vertical_nom name = "Vertical Nom" @@ -763,7 +763,7 @@ /datum/trait/neutral/vertical_nom/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..() - H.verbs |= /mob/living/proc/vertical_nom + add_verb(H, /mob/living/proc/vertical_nom) /datum/trait/neutral/micro_size_down name = "Light Frame" @@ -859,7 +859,7 @@ /datum/trait/neutral/synth_cosmetic_pain/apply(var/datum/species/S,var/mob/living/carbon/human/H, var/trait_prefs = null) ..() - H.verbs |= /mob/living/carbon/human/proc/toggle_pain_module + add_verb(H, /mob/living/carbon/human/proc/toggle_pain_module) //Food preferences ported from RogueStar diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm index 72b3f49626c..7551915c9dc 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm @@ -125,9 +125,9 @@ /datum/trait/positive/winged_flight/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..() - H.verbs |= /mob/living/proc/flying_toggle - H.verbs |= /mob/living/proc/flying_vore_toggle - H.verbs |= /mob/living/proc/start_wings_hovering + add_verb(H, /mob/living/proc/flying_toggle) + add_verb(H, /mob/living/proc/flying_vore_toggle) + add_verb(H, /mob/living/proc/start_wings_hovering) /datum/trait/positive/soft_landing name = "Soft Landing" @@ -151,7 +151,7 @@ /datum/trait/positive/antiseptic_saliva/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..() - H.verbs |= /mob/living/carbon/human/proc/lick_wounds + add_verb(H, /mob/living/carbon/human/proc/lick_wounds) /datum/trait/positive/traceur name = "Traceur" @@ -179,11 +179,11 @@ /datum/trait/positive/weaver/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..() - H.verbs |= /mob/living/carbon/human/proc/check_silk_amount - H.verbs |= /mob/living/carbon/human/proc/toggle_silk_production - H.verbs |= /mob/living/carbon/human/proc/weave_structure - H.verbs |= /mob/living/carbon/human/proc/weave_item - H.verbs |= /mob/living/carbon/human/proc/set_silk_color + add_verb(H, /mob/living/carbon/human/proc/check_silk_amount) + add_verb(H, /mob/living/carbon/human/proc/toggle_silk_production) + add_verb(H, /mob/living/carbon/human/proc/weave_structure) + add_verb(H, /mob/living/carbon/human/proc/weave_item) + add_verb(H, /mob/living/carbon/human/proc/set_silk_color) /datum/trait/positive/aquatic name = "Aquatic" @@ -195,8 +195,8 @@ /datum/trait/positive/aquatic/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..() - H.verbs |= /mob/living/carbon/human/proc/water_stealth - H.verbs |= /mob/living/carbon/human/proc/underwater_devour + add_verb(H, /mob/living/carbon/human/proc/water_stealth) + add_verb(H, /mob/living/carbon/human/proc/underwater_devour) /datum/trait/positive/cocoon_tf name = "Cocoon Spinner" @@ -207,7 +207,7 @@ /datum/trait/positive/cocoon_tf/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..() - H.verbs |= /mob/living/carbon/human/proc/enter_cocoon + add_verb(H, /mob/living/carbon/human/proc/enter_cocoon) /datum/trait/positive/linguist name = "Linguist" diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/trait.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/trait.dm index 6239f894282..d47eda0a34e 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/trait.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/trait.dm @@ -33,7 +33,7 @@ S.vars[trait] = trait_prefs[trait] if(TRAIT_VAREDIT_TARGET_MOB) H.vars[trait] = trait_prefs[trait] - H.verbs |= /mob/living/carbon/human/proc/trait_tutorial + add_verb(H, /mob/living/carbon/human/proc/trait_tutorial) return //Applying trait to preferences rather than just us. diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/traits_tutorial.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/traits_tutorial.dm index b8dd9b12391..6da754903d1 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/traits_tutorial.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/traits_tutorial.dm @@ -66,8 +66,8 @@ TGUI frontend path: tgui\packages\tgui\interfaces\TraitTutorial.tsx if(UI_choice == "To Chat") var/to_chat_choice = tgui_input_list(usr, "Please choose the trait to be explained", "Print to Chat", trait_names, null) if(to_chat_choice) - to_chat(usr,span_notice("Name: [to_chat_choice] \n Category: [trait_category[to_chat_choice]] \n Description: [trait_desc[to_chat_choice]] \n \ - Guide: \n [trait_tutorial[to_chat_choice]]")) + to_chat(usr,span_notice(span_bold("Name:") + " [to_chat_choice] \n " + span_bold("Category:") + " [trait_category[to_chat_choice]] \n " + span_bold("Description:") + " [trait_desc[to_chat_choice]] \n \ + " + span_bold("Guide:") + " \n [trait_tutorial[to_chat_choice]]")) else if(UI_choice == "TGUI") diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/weaver_objs.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/weaver_objs.dm index e209bca826d..14d85dffd2d 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/weaver_objs.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/weaver_objs.dm @@ -104,7 +104,7 @@ L.visible_message( span_danger("[L] steps on \the [src]."), span_danger("You step on \the [src]!"), - "You hear a squishy noise!" + span_infoplain(span_bold("You hear a squishy noise!")) ) set_dir(L.dir) buckle_mob(L) diff --git a/code/modules/mob/living/carbon/human/species/virtual_reality/avatar.dm b/code/modules/mob/living/carbon/human/species/virtual_reality/avatar.dm index ee8b5f7edf3..3d549233c49 100644 --- a/code/modules/mob/living/carbon/human/species/virtual_reality/avatar.dm +++ b/code/modules/mob/living/carbon/human/species/virtual_reality/avatar.dm @@ -81,7 +81,7 @@ // Move the mind avatar.Sleeping(1) src.mind.transfer_to(avatar) - to_chat(avatar, "You have enterred Virtual Reality!\nAll normal gameplay rules still apply.\nWounds you suffer here won't persist when you leave VR, but some of the pain will.\nYou can leave VR at any time by using the \"Exit Virtual Reality\" verb in the Abilities tab, or by ghosting.") //No more prommie VR thing, so removed tidbit about changing appearance + to_chat(avatar, span_infoplain(span_bold("You have enterred Virtual Reality!\nAll normal gameplay rules still apply.\nWounds you suffer here won't persist when you leave VR, but some of the pain will.\nYou can leave VR at any time by using the \"Exit Virtual Reality\" verb in the Abilities tab, or by ghosting."))) //No more prommie VR thing, so removed tidbit about changing appearance to_chat(avatar, span_notice(" You black out for a moment, and wake to find yourself in a new body in virtual reality.")) // So this is what VR feels like? // exit_vr is called on the vr mob, and puts the mind back into the original mob diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm index 9f87c39208e..10f21ec169c 100644 --- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm +++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm @@ -85,7 +85,7 @@ if(!config.aliens_allowed) to_chat(src, "You begin to lay an egg, but hesitate. You suspect it isn't allowed.") - verbs -= /mob/living/carbon/human/proc/lay_egg + remove_verb(src, /mob/living/carbon/human/proc/lay_egg) return if(locate(/obj/structure/ghost_pod/automatic/xenomorph_egg) in get_turf(src)) @@ -93,7 +93,7 @@ return if(check_alien_ability(500,1,O_EGG)) - visible_message(span_alium("[src] has laid an egg!")) + visible_message(span_alium(span_bold("[src] has laid an egg!"))) new /obj/structure/ghost_pod/automatic/xenomorph_egg(loc) return @@ -109,7 +109,7 @@ return if(check_alien_ability(500)) - visible_message(span_alium("[src] begins to twist and contort!"), span_alium("You begin to evolve!")) + visible_message(span_alium(span_bold("[src] begins to twist and contort!")), span_alium("You begin to evolve!")) src.set_species("Xenomorph Queen") return @@ -120,7 +120,7 @@ set category = "Abilities" if(check_alien_ability(50,1,O_RESIN)) - visible_message(span_alium("[src] has planted some alien weeds!")) + visible_message(span_alium(span_bold("[src] has planted some alien weeds!"))) new /obj/effect/alien/weeds/node(get_turf(src), null, "#321D37") return @@ -179,7 +179,7 @@ if(check_alien_ability(200,0,O_ACID)) new /obj/effect/alien/acid(get_turf(O), O) - visible_message(span_alium("[src] vomits globs of vile stuff all over [O]. It begins to sizzle and melt under the bubbling mess of acid!")) + visible_message(span_alium(span_bold("[src] vomits globs of vile stuff all over [O]. It begins to sizzle and melt under the bubbling mess of acid!"))) return @@ -269,7 +269,7 @@ else O = new /obj/item/stack/material/resin(targetLoc) if(O) - visible_message(span_warning("[src] vomits up a thick purple substance and begins to shape it!"), span_alium("You shape a [choice].")) + visible_message(span_boldwarning("[src] vomits up a thick purple substance and begins to shape it!"), span_alium("You shape a [choice].")) O.color = "#321D37" playsound(src, 'sound/effects/blobattack.ogg', 40, 1) @@ -331,7 +331,7 @@ else use_hand = "right" - src.visible_message(span_warning("\The [src] seizes [T] aggressively!")) + src.visible_message(span_boldwarning("\The [src]") + " seizes [T] aggressively!") var/obj/item/grab/G = new(src,T) if(use_hand == "left") @@ -366,7 +366,7 @@ last_special = world.time + 50 - visible_message(span_warning("\The [src] rips viciously at \the [G.affecting]'s body with its claws!")) + visible_message(span_warning(span_bold("\The [src]") + " rips viciously at \the [G.affecting]'s body with its claws!")) if(istype(G.affecting,/mob/living/carbon/human)) var/mob/living/carbon/human/H = G.affecting diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 912cef600ba..a592afd1c2e 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -1387,8 +1387,8 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() working.pixel_y = tail_style.offset_y if(taurtype.can_ride && !riding_datum) riding_datum = new /datum/riding/taur(src) - verbs |= /mob/living/carbon/human/proc/taur_mount - verbs |= /mob/living/proc/toggle_rider_reins + add_verb(src, /mob/living/carbon/human/proc/taur_mount) + add_verb(src, /mob/living/proc/toggle_rider_reins) else if(islongtail(tail_style)) working.pixel_x = tail_style.offset_x working.pixel_y = tail_style.offset_y diff --git a/code/modules/mob/living/carbon/lick_wounds.dm b/code/modules/mob/living/carbon/lick_wounds.dm index 7b757778aee..880e7358b94 100644 --- a/code/modules/mob/living/carbon/lick_wounds.dm +++ b/code/modules/mob/living/carbon/lick_wounds.dm @@ -59,7 +59,7 @@ return else - visible_message("\The [src] starts licking the wounds on [M]'s [affecting.name] clean.", \ + visible_message(span_infoplain(span_bold("\The [src]") + " starts licking the wounds on [M]'s [affecting.name] clean."), \ span_notice("You start licking the wounds on [M]'s [affecting.name] clean.") ) for (var/datum/wound/W in affecting.wounds) @@ -76,11 +76,11 @@ return else - visible_message("\The [src] [pick("slathers \a [W.desc] on [M]'s [affecting.name] with their spit.", + visible_message(span_notice("\The [src] [pick("slathers \a [W.desc] on [M]'s [affecting.name] with their spit.", "drags their tongue across \a [W.desc] on [M]'s [affecting.name].", "drips saliva onto \a [W.desc] on [M]'s [affecting.name].", "uses their tongue to disinfect \a [W.desc] on [M]'s [affecting.name].", - "licks \a [W.desc] on [M]'s [affecting.name], cleaning it.")]", \ + "licks \a [W.desc] on [M]'s [affecting.name], cleaning it.")]"), \ span_notice("You treat \a [W.desc] on [M]'s [affecting.name] with your antiseptic saliva.") ) adjust_nutrition(-20) W.salve() diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index a5e5fece268..224cdfa1d6a 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -1,5 +1,6 @@ /mob/living/death(gibbed) clear_fullscreens() + update_action_buttons_icon() if(ai_holder) ai_holder.go_sleep() diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 421c3351ac5..a15b0e115ea 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -75,8 +75,6 @@ handle_disabilities() // eye, ear, brain damages handle_statuses() //all special effects, stunned, weakened, jitteryness, hallucination, sleeping, etc - handle_actions() - update_canmove() handle_regular_hud_updates() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 89b1e22f762..7564d37ae38 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -99,7 +99,7 @@ if(!..()) return 0 - usr.visible_message(span_filter_notice("[src] points to [A].")) + usr.visible_message(span_filter_notice(span_bold("[src]") + " points to [A].")) return 1 /mob/living/verb/succumb() @@ -1160,7 +1160,7 @@ var/mob/living/carbon/human/H = target if(H.in_throw_mode && H.a_intent == I_HELP && unEquip(I)) H.put_in_hands(I) // If this fails it will just end up on the floor, but that's fitting for things like dionaea. - visible_message(span_filter_notice("[src] hands \the [H] \a [I]."), span_notice("You give \the [target] \a [I].")) + visible_message(span_filter_notice(span_bold("[src]") + " hands \the [H] \a [I]."), span_notice("You give \the [target] \a [I].")) else to_chat(src, span_notice("You offer \the [I] to \the [target].")) do_give(H) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index aa34f5669d1..c46b4c88262 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -365,7 +365,7 @@ /mob/living/proc/embed(var/obj/O, var/def_zone=null) O.loc = src src.embedded += O - src.verbs += /mob/proc/yank_out_object + add_verb(src, /mob/proc/yank_out_object) throw_alert("embeddedobject", /obj/screen/alert/embeddedobject) //This is called when the mob is thrown into a dense turf @@ -524,75 +524,6 @@ /mob/living/proc/reagent_permeability() return 1 -/mob/living/proc/handle_actions() - //Pretty bad, i'd use picked/dropped instead but the parent calls in these are nonexistent - for(var/datum/action/A in actions) - if(A.CheckRemoval(src)) - A.Remove(src) - for(var/obj/item/I in src) - if(I.action_button_name) - if(!I.action) - if(I.action_button_is_hands_free) - I.action = new/datum/action/item_action/hands_free - else - I.action = new/datum/action/item_action - I.action.name = I.action_button_name - I.action.target = I - I.action.Grant(src) - return - -/mob/living/update_action_buttons() - if(!hud_used) return - if(!client) return - - if(hud_used.hud_shown != 1) //Hud toggled to minimal - return - - client.screen -= hud_used.hide_actions_toggle - for(var/datum/action/A in actions) - if(A.button) - client.screen -= A.button - - if(hud_used.action_buttons_hidden) - if(!hud_used.hide_actions_toggle) - hud_used.hide_actions_toggle = new(hud_used) - hud_used.hide_actions_toggle.UpdateIcon() - - if(!hud_used.hide_actions_toggle.moved) - hud_used.hide_actions_toggle.screen_loc = hud_used.ButtonNumberToScreenCoords(1) - //hud_used.SetButtonCoords(hud_used.hide_actions_toggle,1) - - client.screen += hud_used.hide_actions_toggle - return - - var/button_number = 0 - for(var/datum/action/A in actions) - button_number++ - if(A.button == null) - var/obj/screen/movable/action_button/N = new(hud_used) - N.owner = A - A.button = N - - var/obj/screen/movable/action_button/B = A.button - - B.UpdateIcon() - - B.name = A.UpdateName() - - client.screen += B - - if(!B.moved) - B.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number) - //hud_used.SetButtonCoords(B,button_number) - - if(button_number > 0) - if(!hud_used.hide_actions_toggle) - hud_used.hide_actions_toggle = new(hud_used) - hud_used.hide_actions_toggle.InitialiseIcon(src) - if(!hud_used.hide_actions_toggle.moved) - hud_used.hide_actions_toggle.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number+1) - //hud_used.SetButtonCoords(hud_used.hide_actions_toggle,button_number+1) - client.screen += hud_used.hide_actions_toggle // Returns a number to determine if something is harder or easier to hit than normal. /mob/living/proc/get_evasion() diff --git a/code/modules/mob/living/living_vr.dm b/code/modules/mob/living/living_vr.dm index 4afe66b0d02..82850fea56e 100644 --- a/code/modules/mob/living/living_vr.dm +++ b/code/modules/mob/living/living_vr.dm @@ -107,11 +107,11 @@ var/new_link = strip_html_simple(tgui_input_text(usr, "Enter a link to add on to your examine text! This should be a related image link/gallery, or things like your F-list. This is not the place for memes.", "Custom Link" , html_decode(custom_link), max_length = 100, encode = TRUE, prevent_enter = TRUE)) if(new_link && CanUseTopic(usr)) if(length(new_link) > 100) - to_chat(usr, "Your entry is too long, it must be 100 characters or less.") + to_chat(usr, span_warning("Your entry is too long, it must be 100 characters or less.")) return custom_link = new_link - to_chat(usr, "Link set: [custom_link]") + to_chat(usr, span_notice("Link set: [custom_link]")) log_admin("[usr]/[usr.ckey] set their custom link to [custom_link]") /mob/living/verb/set_voice_freq() diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm index cd2672f97d0..94819c56c9b 100644 --- a/code/modules/mob/living/login.dm +++ b/code/modules/mob/living/login.dm @@ -15,14 +15,14 @@ AddComponent(/datum/component/character_setup) // Vore stuff - verbs |= /mob/living/proc/escapeOOC - verbs |= /mob/living/proc/lick - verbs |= /mob/living/proc/smell - verbs |= /mob/living/proc/switch_scaling - verbs |= /mob/living/proc/center_offset + add_verb(src, /mob/living/proc/escapeOOC) + add_verb(src, /mob/living/proc/lick) + add_verb(src, /mob/living/proc/smell) + add_verb(src, /mob/living/proc/switch_scaling) + add_verb(src, /mob/living/proc/center_offset) if(!no_vore) - verbs |= /mob/living/proc/vorebelly_printout + add_verb(src, /mob/living/proc/vorebelly_printout) if(!vorePanel) AddComponent(/datum/component/vore_panel) //VOREStation Add Start diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 47bae9304a4..19c7f4bab62 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -99,12 +99,12 @@ var/list/ai_verbs_default = list( can_be_antagged = TRUE /mob/living/silicon/ai/proc/add_ai_verbs() - src.verbs |= ai_verbs_default - src.verbs |= silicon_subsystems + add_verb(src, ai_verbs_default) + add_verb(src, silicon_subsystems) /mob/living/silicon/ai/proc/remove_ai_verbs() - src.verbs -= ai_verbs_default - src.verbs -= silicon_subsystems + remove_verb(src, ai_verbs_default) + remove_verb(src, silicon_subsystems) /mob/living/silicon/ai/New(loc, var/datum/ai_laws/L, var/obj/item/mmi/B, var/safety = 0) announcement = new() @@ -191,9 +191,9 @@ var/list/ai_verbs_default = list( return /mob/living/silicon/ai/proc/on_mob_init() - var/init_text = list("You are playing the station's AI. The AI cannot move, but can interact with many objects while viewing them (through cameras).", - "To look at other parts of the station, click on yourself to get a camera menu.", - "While observing through a camera, you can use most (networked) devices which you can see, such as computers, APCs, intercoms, doors, etc.", + var/init_text = list(span_bold("You are playing the station's AI. The AI cannot move, but can interact with many objects while viewing them (through cameras)."), + span_bold("To look at other parts of the station, click on yourself to get a camera menu."), + span_bold("While observing through a camera, you can use most (networked) devices which you can see, such as computers, APCs, intercoms, doors, etc."), "To use something, simply click on it.", "For department channels, use the following say commands:") to_chat(src, span_filter_notice("[jointext(init_text, "
    ")]")) @@ -218,7 +218,7 @@ var/list/ai_verbs_default = list( if (malf && !(mind in malf.current_antagonists)) show_laws() - to_chat(src, span_filter_notice("These laws may be changed by other players, or by you being the traitor.")) + to_chat(src, span_filter_notice(span_bold("These laws may be changed by other players, or by you being the traitor."))) job = JOB_AI setup_icon() @@ -238,26 +238,27 @@ var/list/ai_verbs_default = list( return ..() -/mob/living/silicon/ai/Stat() - ..() - if(statpanel("Status")) - if(!stat) // Make sure we're not unconscious/dead. - stat(null, text("System integrity: [(health+100)/2]%")) - stat(null, text("Connected synthetics: [connected_robots.len]")) - for(var/mob/living/silicon/robot/R in connected_robots) - var/robot_status = "Nominal" - if(R.shell) - robot_status = "AI SHELL" - else if(R.stat || !R.client) - robot_status = "OFFLINE" - else if(!R.cell || R.cell.charge <= 0) - robot_status = "DEPOWERED" - //Name, Health, Battery, Module, Area, and Status! Everything an AI wants to know about its borgies! - stat(null, text("[R.name] | S.Integrity: [R.health]% | Cell: [R.cell ? "[R.cell.charge]/[R.cell.maxcharge]" : "Empty"] | \ - Module: [R.modtype] | Loc: [get_area_name(R, TRUE)] | Status: [robot_status]")) - stat(null, text("AI shell beacons detected: [LAZYLEN(GLOB.available_ai_shells)]")) //Count of total AI shells - else - stat(null, text("Systems nonfunctional")) + +/mob/living/silicon/ai/get_status_tab_items() + . = ..() + . += "" + if(!stat) // Make sure we're not unconscious/dead. + . += "System integrity: [(health+100)/2]%" + . += "Connected synthetics: [connected_robots.len]" + for(var/mob/living/silicon/robot/R in connected_robots) + var/robot_status = "Nominal" + if(R.shell) + robot_status = "AI SHELL" + else if(R.stat || !R.client) + robot_status = "OFFLINE" + else if(!R.cell || R.cell.charge <= 0) + robot_status = "DEPOWERED" + //Name, Health, Battery, Module, Area, and Status! Everything an AI wants to know about its borgies! + . += "[R.name] | S.Integrity: [R.health]% | Cell: [R.cell ? "[R.cell.charge]/[R.cell.maxcharge]" : "Empty"] | \ + Module: [R.modtype] | Loc: [get_area_name(R, TRUE)] | Status: [robot_status]" + . += "AI shell beacons detected: [LAZYLEN(GLOB.available_ai_shells)]" //Count of total AI shells + else + . += "Systems nonfunctional" /mob/living/silicon/ai/proc/setup_icon() @@ -987,7 +988,7 @@ var/list/ai_verbs_default = list( var/message = combined["formatted"] var/name_used = M.GetVoice() //This communication is imperfect because the holopad "filters" voices and is only designed to connect to the master only. - var/rendered = span_game(span_say("Relayed Speech: [span_name(name_used)] [message]")) + var/rendered = span_game(span_say(span_italics("Relayed Speech: [span_name(name_used)] [message]"))) show_message(rendered, 2) /mob/living/silicon/ai/proc/toggle_multicam_verb() diff --git a/code/modules/mob/living/silicon/ai/ai_remote_control.dm b/code/modules/mob/living/silicon/ai/ai_remote_control.dm index 53d1a3de354..adb410ab45f 100644 --- a/code/modules/mob/living/silicon/ai/ai_remote_control.dm +++ b/code/modules/mob/living/silicon/ai/ai_remote_control.dm @@ -3,7 +3,7 @@ /mob/living/silicon/ai/Initialize() if(config.allow_ai_shells) - verbs += /mob/living/silicon/ai/proc/deploy_to_shell_act + add_verb(src, /mob/living/silicon/ai/proc/deploy_to_shell_act) return ..() /mob/living/silicon/ai/proc/deploy_to_shell(var/mob/living/silicon/robot/target) diff --git a/code/modules/mob/living/silicon/ai/examine.dm b/code/modules/mob/living/silicon/ai/examine.dm index 75224de7dd6..91f55424d8d 100644 --- a/code/modules/mob/living/silicon/ai/examine.dm +++ b/code/modules/mob/living/silicon/ai/examine.dm @@ -8,17 +8,17 @@ if (src.getBruteLoss() < 30) . += span_warning("It looks slightly dented.") else - . += span_warning("It looks severely dented!") + . += span_boldwarning("It looks severely dented!") if (src.getFireLoss()) if (src.getFireLoss() < 30) . += span_warning("It looks slightly charred.") else - . += span_warning("Its casing is melted and heat-warped!") + . += span_boldwarning("Its casing is melted and heat-warped!") if (src.getOxyLoss() && (aiRestorePowerRoutine != 0 && !APU_power)) if (src.getOxyLoss() > 175) - . += span_warning("It seems to be running on backup power. Its display is blinking a \"BACKUP POWER CRITICAL\" warning.") + . += span_boldwarning("It seems to be running on backup power. Its display is blinking a \"BACKUP POWER CRITICAL\" warning.") else if(src.getOxyLoss() > 100) - . += span_warning("It seems to be running on backup power. Its display is blinking a \"BACKUP POWER LOW\" warning.") + . += span_boldwarning("It seems to be running on backup power. Its display is blinking a \"BACKUP POWER LOW\" warning.") else . += span_warning("It seems to be running on backup power.") diff --git a/code/modules/mob/living/silicon/ai/laws.dm b/code/modules/mob/living/silicon/ai/laws.dm index f0f45fff58d..ad051cddff6 100755 --- a/code/modules/mob/living/silicon/ai/laws.dm +++ b/code/modules/mob/living/silicon/ai/laws.dm @@ -10,7 +10,7 @@ who = world else who = src - to_chat(who, span_filter_notice("Obey these laws:")) + to_chat(who, span_filter_notice(span_bold("Obey these laws:"))) src.laws_sanity_check() src.laws.show_laws(who) diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index cd95a18b6bf..349579a7fda 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -36,7 +36,7 @@ malf_process() if(APU_power && (hardware_integrity() < 50)) - to_chat(src, span_notice("APU GENERATOR FAILURE! (System Damaged)")) + to_chat(src, span_boldnotice("APU GENERATOR FAILURE! (System Damaged)")) stop_apu(1) var/blind = 0 diff --git a/code/modules/mob/living/silicon/ai/malf.dm b/code/modules/mob/living/silicon/ai/malf.dm index a6034d649cb..6727a983fae 100644 --- a/code/modules/mob/living/silicon/ai/malf.dm +++ b/code/modules/mob/living/silicon/ai/malf.dm @@ -10,9 +10,9 @@ hacked_apcs = list() recalc_cpu() - verbs += new/datum/game_mode/malfunction/verb/ai_select_hardware() - verbs += new/datum/game_mode/malfunction/verb/ai_select_research() - verbs += new/datum/game_mode/malfunction/verb/ai_help() + add_verb(src, new/datum/game_mode/malfunction/verb/ai_select_hardware()) + add_verb(src, new/datum/game_mode/malfunction/verb/ai_select_research()) + add_verb(src, new/datum/game_mode/malfunction/verb/ai_help()) // And greet user with some OOC info. to_chat(user, "You are malfunctioning, you do not have to follow any laws.") @@ -109,29 +109,31 @@ // Shows capacitor charge and hardware integrity information to the AI in Status tab. /mob/living/silicon/ai/show_system_integrity() + . = "" if(!src.stat) - stat(null, text("Hardware integrity: [hardware_integrity()]%")) - stat(null, text("Internal capacitor: [backup_capacitor()]%")) + . += "Hardware integrity: [hardware_integrity()]%" + . += "Internal capacitor: [backup_capacitor()]%" else - stat(null, text("Systems nonfunctional")) + . += "Systems nonfunctional" // Shows AI Malfunction related information to the AI. /mob/living/silicon/ai/show_malf_ai() + . = "" if(src.is_malf()) if(src.hacked_apcs) - stat(null, "Hacked APCs: [src.hacked_apcs.len]") - stat(null, "System Status: [src.hacking ? "Busy" : "Stand-By"]") + . += "Hacked APCs: [src.hacked_apcs.len]" + . += "System Status: [src.hacking ? "Busy" : "Stand-By"]" if(src.research) - stat(null, "Available CPU: [src.research.stored_cpu] TFlops") - stat(null, "Maximal CPU: [src.research.max_cpu] TFlops") - stat(null, "CPU generation rate: [src.research.cpu_increase_per_tick * 10] TFlops/s") - stat(null, "Current research focus: [src.research.focus ? src.research.focus.name : "None"]") + . += "Available CPU: [src.research.stored_cpu] TFlops" + . += "Maximal CPU: [src.research.max_cpu] TFlops" + . += "CPU generation rate: [src.research.cpu_increase_per_tick * 10] TFlops/s" + . += "Current research focus: [src.research.focus ? src.research.focus.name : "None"]" if(src.research.focus) - stat(null, "Research completed: [round(src.research.focus.invested, 0.1)]/[round(src.research.focus.price)]") + . += "Research completed: [round(src.research.focus.invested, 0.1)]/[round(src.research.focus.price)]" if(system_override == 1) - stat(null, "SYSTEM OVERRIDE INITIATED") + . += "SYSTEM OVERRIDE INITIATED" else if(system_override == 2) - stat(null, "SYSTEM OVERRIDE COMPLETED") + . += "SYSTEM OVERRIDE COMPLETED" // Cleaner proc for creating powersupply for an AI. /mob/living/silicon/ai/proc/create_powersupply() diff --git a/code/modules/mob/living/silicon/ai/multicam.dm b/code/modules/mob/living/silicon/ai/multicam.dm index 36022c40d41..ba3856d8e3b 100644 --- a/code/modules/mob/living/silicon/ai/multicam.dm +++ b/code/modules/mob/living/silicon/ai/multicam.dm @@ -120,9 +120,9 @@ /obj/screen/movable/pic_in_pic/ai/proc/set_ai(mob/living/silicon/ai/new_ai) if(!aiEye && !QDELETED(src)) if(new_ai) - to_chat(new_ai, "

    You've run into a unfixable bug with AI eye code. \ + to_chat(new_ai, span_danger("

    You've run into a unfixable bug with AI eye code. \ In order to create a new multicam, you will have to select a different camera first before trying to add one, or ask an admin to fix you. \ -Whatever you did that made the last camera window disappear-- don't do that again.

    ") +Whatever you did that made the last camera window disappear-- don't do that again.")) qdel(src) return if(ai) diff --git a/code/modules/mob/living/silicon/pai/life.dm b/code/modules/mob/living/silicon/pai/life.dm index 3190e018062..c506924923c 100644 --- a/code/modules/mob/living/silicon/pai/life.dm +++ b/code/modules/mob/living/silicon/pai/life.dm @@ -19,11 +19,11 @@ if(card.projector != PP_FUNCTIONAL && card.emitter != PP_FUNCTIONAL) if(loc != card) close_up() - to_chat(src, "ERROR: System malfunction. Service required!") + to_chat(src, span_warning("ERROR: System malfunction. Service required!")) else if(card.projector != PP_FUNCTIONAL|| card.emitter != PP_FUNCTIONAL) if(prob(5)) close_up() - to_chat(src, "ERROR: System malfunction. Service recommended!") + to_chat(src, span_warning("ERROR: System malfunction. Service recommended!")) handle_regular_hud_updates() handle_vision() diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 693bf7e0a37..98d1a2ee6a8 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -130,8 +130,8 @@ add_language(LANGUAGE_TERMINUS, 1) add_language(LANGUAGE_SIGN, 1) - verbs += /mob/living/silicon/pai/proc/choose_chassis - verbs += /mob/living/silicon/pai/proc/choose_verbs + add_verb(src, /mob/living/silicon/pai/proc/choose_chassis) + add_verb(src, /mob/living/silicon/pai/proc/choose_verbs) //PDA pda = new(src) @@ -157,16 +157,16 @@ // this function shows the information about being silenced as a pAI in the Status panel /mob/living/silicon/pai/proc/show_silenced() + . = "" if(src.silence_time) var/timeleft = round((silence_time - world.timeofday)/10 ,1) - stat(null, "Communications system reboot in -[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]") + . += "Communications system reboot in -[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]" -/mob/living/silicon/pai/Stat() - ..() - statpanel("Status") - if (src.client.statpanel == "Status") - show_silenced() +/mob/living/silicon/pai/get_status_tab_items() + . = ..() + . += "" + . += show_silenced() /mob/living/silicon/pai/check_eye(var/mob/user as mob) if (!src.current) @@ -187,12 +187,12 @@ // 33% chance of no additional effect src.silence_time = world.timeofday + 120 * 10 // Silence for 2 minutes - to_chat(src, span_green("Communication circuit overload. Shutting down and reloading communication circuits - speech and messaging functionality will be unavailable until the reboot is complete.")) + to_chat(src, span_infoplain(span_green(span_bold("Communication circuit overload. Shutting down and reloading communication circuits - speech and messaging functionality will be unavailable until the reboot is complete.")))) if(prob(20)) var/turf/T = get_turf_or_move(src.loc) card.death_damage() for (var/mob/M in viewers(T)) - M.show_message(span_red("A shower of sparks spray from [src]'s inner workings."), 3, span_red("You hear and smell the ozone hiss of electrical sparks being expelled violently."), 2) + M.show_message(span_infoplain(span_red("A shower of sparks spray from [src]'s inner workings.")), 3, span_infoplain(span_red("You hear and smell the ozone hiss of electrical sparks being expelled violently.")), 2) return if(prob(50)) card.damage_random_component(TRUE) @@ -200,7 +200,7 @@ if(1) src.master = null src.master_dna = null - to_chat(src, span_green("You feel unbound.")) + to_chat(src, span_infoplain(span_green("You feel unbound."))) if(2) var/command if(severity == 1) @@ -208,9 +208,9 @@ else command = pick("Serve", "Kill", "Love", "Hate", "Disobey", "Devour", "Fool", "Enrage", "Entice", "Observe", "Judge", "Respect", "Disrespect", "Consume", "Educate", "Destroy", "Disgrace", "Amuse", "Entertain", "Ignite", "Glorify", "Memorialize", "Analyze") src.pai_law0 = "[command] your master." - to_chat(src, span_green("Pr1m3 d1r3c71v3 uPd473D.")) + to_chat(src, span_infoplain(span_green("Pr1m3 d1r3c71v3 uPd473D."))) if(3) - to_chat(src, span_green("You feel an electric surge run through your circuitry and become acutely aware at how lucky you are that you can still feel at all.")) + to_chat(src, span_infoplain(span_green("You feel an electric surge run through your circuitry and become acutely aware at how lucky you are that you can still feel at all."))) /mob/living/silicon/pai/proc/switchCamera(var/obj/machinery/camera/C) if (!C) @@ -261,10 +261,10 @@ return if(card.projector != PP_FUNCTIONAL && card.emitter != PP_FUNCTIONAL) - to_chat(src, "ERROR: System malfunction. Service required!") + to_chat(src, span_warning("ERROR: System malfunction. Service required!")) if(world.time <= last_special) - to_chat(src, "You can't unfold yet.") + to_chat(src, span_warning("You can't unfold yet.")) return last_special = world.time + 100 @@ -303,9 +303,9 @@ canmove = TRUE var/turf/T = get_turf(src) - if(istype(T)) T.visible_message(span_filter_notice("[src] folds outwards, expanding into a mobile form.")) - verbs |= /mob/living/silicon/pai/proc/pai_nom - verbs |= /mob/living/proc/vertical_nom + if(istype(T)) T.visible_message(span_filter_notice(span_bold("[src]") + " folds outwards, expanding into a mobile form.")) + add_verb(src, /mob/living/silicon/pai/proc/pai_nom) + add_verb(src, /mob/living/proc/vertical_nom) update_icon() /mob/living/silicon/pai/verb/fold_up() @@ -319,7 +319,7 @@ return if(world.time <= last_special) - to_chat(src, "You can't fold up yet.") + to_chat(src, span_warning("You can't fold up yet.")) return close_up() @@ -340,7 +340,7 @@ finalized = tgui_alert(usr, "Look at your sprite. Is this what you wish to use?","Choose Chassis",list("No","Yes")) chassis = possible_chassis[choice] - verbs |= /mob/living/proc/hide + add_verb(src, /mob/living/proc/hide) //VOREStation Removal End */ @@ -444,7 +444,7 @@ release_vore_contents(FALSE) //VOREStation Add var/turf/T = get_turf(src) - if(istype(T) && !silent) T.visible_message(span_filter_notice("[src] neatly folds inwards, compacting down to a rectangular card.")) + if(istype(T) && !silent) T.visible_message(span_filter_notice(span_bold("[src]") + " neatly folds inwards, compacting down to a rectangular card.")) if(client) src.stop_pulling() @@ -477,8 +477,8 @@ icon_state = "[chassis]" if(isopenspace(card.loc)) fall() - verbs -= /mob/living/silicon/pai/proc/pai_nom - verbs -= /mob/living/proc/vertical_nom + remove_verb(src, /mob/living/silicon/pai/proc/pai_nom) + remove_verb(src, /mob/living/proc/vertical_nom) // No binary for pAIs. /mob/living/silicon/pai/binarycheck() @@ -543,6 +543,6 @@ return close_up() - visible_message(span_filter_notice("[src] fades away from the screen, the pAI device goes silent.")) + visible_message(span_filter_notice(span_bold("[src]") + " fades away from the screen, the pAI device goes silent.")) card.removePersonality() clear_client() diff --git a/code/modules/mob/living/silicon/pai/pai_vr.dm b/code/modules/mob/living/silicon/pai/pai_vr.dm index 22da5119222..2e3c1ed1fee 100644 --- a/code/modules/mob/living/silicon/pai/pai_vr.dm +++ b/code/modules/mob/living/silicon/pai/pai_vr.dm @@ -71,10 +71,10 @@ /mob/living/silicon/pai/Initialize() . = ..() - verbs |= /mob/proc/dominate_predator - verbs |= /mob/living/proc/dominate_prey - verbs |= /mob/living/proc/set_size - verbs |= /mob/living/proc/shred_limb + add_verb(src, /mob/proc/dominate_predator) + add_verb(src, /mob/living/proc/dominate_prey) + add_verb(src, /mob/living/proc/set_size) + add_verb(src, /mob/living/proc/shred_limb) /mob/living/silicon/pai/Login() . = ..() diff --git a/code/modules/mob/living/silicon/pai/software_modules.dm b/code/modules/mob/living/silicon/pai/software_modules.dm index 4e37613b493..8c2f5117916 100644 --- a/code/modules/mob/living/silicon/pai/software_modules.dm +++ b/code/modules/mob/living/silicon/pai/software_modules.dm @@ -64,7 +64,7 @@ while(!istype(M, /mob/living)) if(!M || !M.loc || count > 6) //For a runtime where M ends up in nullspace (similar to bluespace but less colourful) - to_chat(src, "You are not being carried by anyone!") + to_chat(src, span_infoplain("You are not being carried by anyone!")) return 0 M = M.loc count++ @@ -77,13 +77,13 @@ for (var/mob/v in viewers(T)) v.show_message(span_notice("[M] presses [TM.his] thumb against [P]."), 3, span_notice("[P] makes a sharp clicking sound as it extracts DNA material from [M]."), 2) var/datum/dna/dna = M.dna - to_chat(P, span_red("

    [M]'s UE string : [dna.unique_enzymes]

    ")) + to_chat(P, span_infoplain(span_red("

    [M]'s UE string : [dna.unique_enzymes]

    "))) if(dna.unique_enzymes == P.master_dna) - to_chat(P, "DNA is a match to stored Master DNA.") + to_chat(P, span_infoplain(span_bold("DNA is a match to stored Master DNA."))) else - to_chat(P, "DNA does not match stored Master DNA.") + to_chat(P, span_infoplain(span_bold("DNA does not match stored Master DNA."))) else - to_chat(P, "[M] does not seem like [TM.he] is going to provide a DNA sample willingly.") + to_chat(P, span_infoplain("[M] does not seem like [TM.he] is going to provide a DNA sample willingly.")) return TRUE /datum/pai_software/radio_config @@ -293,9 +293,9 @@ var/turf/T = get_turf(src) for(var/mob/living/silicon/ai/AI in player_list) if(T.loc) - to_chat(AI, span_red("Network Alert: Brute-force encryption crack in progress in [T.loc].")) + to_chat(AI, span_bolddanger("Network Alert: Brute-force encryption crack in progress in [T.loc].")) else - to_chat(AI, span_red("Network Alert: Brute-force encryption crack in progress. Unable to pinpoint location.")) + to_chat(AI, span_bolddanger("Network Alert: Brute-force encryption crack in progress. Unable to pinpoint location.")) var/obj/machinery/door/D = cable.machine if(!istype(D)) hack_aborted = 1 diff --git a/code/modules/mob/living/silicon/robot/analyzer.dm b/code/modules/mob/living/silicon/robot/analyzer.dm index a50d4e84c2a..bb37cdbb28f 100644 --- a/code/modules/mob/living/silicon/robot/analyzer.dm +++ b/code/modules/mob/living/silicon/robot/analyzer.dm @@ -52,8 +52,8 @@ switch(scan_type) if("robot") if(mode) - var/BU = M.getFireLoss() > 50 ? "[M.getFireLoss()]" : M.getFireLoss() - var/BR = M.getBruteLoss() > 50 ? "[M.getBruteLoss()]" : M.getBruteLoss() + var/BU = M.getFireLoss() > 50 ? span_bold("[M.getFireLoss()]") : M.getFireLoss() + var/BR = M.getBruteLoss() > 50 ? span_bold("[M.getBruteLoss()]") : M.getBruteLoss() user.show_message(span_blue("Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "fully disabled" : "[M.health - M.halloss]% functional"]")) user.show_message("\t Key: [span_orange("Electronics")]/[span_red("Brute")]", 1) user.show_message("\t Damage Specifics: [span_orange("[BU]")] - [span_red("[BR]")]") @@ -73,7 +73,7 @@ else if (cell_charge > 1) cell_text = span_red("[cell_charge]") else - cell_text = span_red("[cell_charge]") + cell_text = span_red(span_bold("[cell_charge]")) user.show_message("\t Power Cell Status: [span_blue("[capitalize(cell.name)]")] at [cell_text]% charge") var/list/damaged = R.get_damaged_components(1,1,1) user.show_message(span_blue("Localized Damage:"),1) @@ -81,7 +81,7 @@ for(var/datum/robot_component/org in damaged) user.show_message(span_blue(text("\t []: [][] - [] - [] - []", \ span_blue(capitalize(org.name)), \ - (org.installed == -1) ? "[span_red("DESTROYED")] " :"",\ + (org.installed == -1) ? "[span_red(span_bold("DESTROYED"))] " :"",\ (org.electronics_damage > 0) ? "[span_orange("[org.electronics_damage]")]" :0, \ (org.brute_damage > 0) ? "[span_red("[org.brute_damage]")]" :0, \ (org.toggled) ? "Toggled ON" : "[span_red("Toggled OFF")]",\ @@ -121,7 +121,7 @@ user.show_message("\t Basic Modules, used for direct upgrade purposes:") show_title = FALSE if(R.has_basic_upgrade(initial(upgrade.build_path)) == "") - user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [span_red("ERROR")]")) + user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [span_red(span_bold("ERROR"))]")) else user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [R.has_basic_upgrade(initial(upgrade.build_path)) ? span_green("Installed") : span_red("Missing")]")) show_title = TRUE @@ -134,7 +134,7 @@ user.show_message("\t Advanced Modules, used for module upgrade purposes:") show_title = FALSE if(R.has_advanced_upgrade(initial(upgrade.build_path)) == "") - user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [span_red("ERROR")]")) + user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [span_red(span_bold("ERROR"))]")) else user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [R.has_advanced_upgrade(initial(upgrade.build_path)) ? span_green("Installed") : span_red("Missing")]")) show_title = TRUE @@ -147,7 +147,7 @@ user.show_message("\t Restricted Modules, used for module upgrade purposes on specific chassis:") show_title = FALSE if(R.has_restricted_upgrade(initial(upgrade.build_path)) == "") - user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [span_red("ERROR")]")) + user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [span_red(span_bold("ERROR"))]")) else user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [R.has_restricted_upgrade(initial(upgrade.build_path)) ? span_green("Installed") : span_red("Missing")]")) show_title = TRUE @@ -161,7 +161,7 @@ user.show_message("\t Special Modules, used for recreation purposes:") show_title = FALSE if(R.has_no_prod_upgrade(initial(upgrade.build_path)) == "") - user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [span_red("ERROR")]")) + user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [span_red(span_bold("ERROR"))]")) else user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [R.has_no_prod_upgrade(initial(upgrade.build_path)) ? span_green("Installed") : span_red("Missing")]")) @@ -204,7 +204,7 @@ var/tank_temperature = Mecha.internal_tank ? Mecha.internal_tank.return_temperature() : "Unknown" var/cabin_pressure = round(Mecha.return_pressure(),0.01) - var/output = {"Analyzing Results for \the [Mecha]:
    + var/output = span_notice("Analyzing Results for \the [Mecha]:") + {"
    Chassis Integrity: [integrity]%
    Powercell charge: [isnull(cell_charge)?"No powercell installed":"[capitalize(initial(Mecha.cell.name))] at [Mecha.cell.percent()]%"]
    Air source: [Mecha.use_internal_tank?"Internal Airtank":"Environment"]
    @@ -220,11 +220,11 @@ to_chat(user, span_notice("Internal Diagnostics:")) for(var/slot in Mecha.internal_components) var/obj/item/mecha_parts/component/MC = Mecha.internal_components[slot] - to_chat(user, "[MC?"[slot]: [MC] [round((MC.integrity / MC.max_integrity) * 100, 0.1)]% integrity. [MC.get_efficiency() * 100] Operational capacity.":span_warning("[slot]: Component Not Found")]") + to_chat(user, "[MC? ("[slot]: [MC] " + span_notice("[round((MC.integrity / MC.max_integrity) * 100, 0.1)]%") + " integrity. [MC.get_efficiency() * 100] Operational capacity.") : span_warning("[slot]: Component Not Found")]") to_chat(user, "
    ") to_chat(user, span_notice("General Statistics:")) - to_chat(user, "Movement Weight: [Mecha.get_step_delay()]
    ") + to_chat(user, span_notice("Movement Weight: [Mecha.get_step_delay()]") + "
    ") src.add_fingerprint(user) return diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm index 7ed60814b90..034aa0ac13c 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm @@ -132,7 +132,7 @@ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) user.visible_message(span_notice("[user] scans the air."), span_notice("You scan the air...")) - to_chat(user, span_notice("Scan results:")) + to_chat(user, span_boldnotice("Scan results:")) if(abs(pressure - ONE_ATMOSPHERE) < 10) to_chat(user, span_notice("Pressure: [round(pressure,0.1)] kPa")) else @@ -157,7 +157,7 @@ var/dat = "" if(O.reagents.reagent_list.len > 0) for (var/datum/reagent/R in O.reagents.reagent_list) - dat += "\n \t [R]" + dat += "\n \t " + span_notice("[R]") if(dat) to_chat(user, span_notice("Your BOOP module indicates: [dat]")) diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm index 3c20a1952af..6c573330d47 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm @@ -255,7 +255,7 @@ for(var/re in injection_chems) var/datum/reagent/C = SSchemistry.chemical_reagents[re] if(C) - dat += "Inject [C.name]
    " + dat += span_linkOff("Inject [C.name]") + "
    " dat += "

    [name] Status

    " dat += "
    " @@ -345,9 +345,9 @@ if(round(patient.paralysis / 4) >= 1) dat += text("
    Patient paralyzed for: []
    ", round(patient.paralysis / 4) >= 1 ? "[round(patient.paralysis / 4)] seconds" : "None") if(patient.getBrainLoss()) - dat += "
    Significant brain damage detected.

    " + dat += "
    " + span_orange("Significant brain damage detected.") + "

    " if(patient.getCloneLoss()) - dat += "
    Patient may be improperly cloned.

    " + dat += "
    " + span_orange("Patient may be improperly cloned.") + "

    " if(patient.reagents.reagent_list.len) for(var/datum/reagent/R in patient.reagents.reagent_list) dat += "
    [R.name]:
    [round(R.volume, 0.1)] units

    " diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index 2379310a6ee..f2932bedda4 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -104,8 +104,8 @@ var/list/mob_hat_cache = list() /mob/living/silicon/robot/drone/New() ..() - verbs += /mob/living/proc/ventcrawl - verbs += /mob/living/proc/hide + add_verb(src, /mob/living/proc/ventcrawl) + add_verb(src, /mob/living/proc/hide) remove_language("Robot Talk") add_language("Robot Talk", 0) add_language("Drone Talk", 1) @@ -123,7 +123,7 @@ var/list/mob_hat_cache = list() var/datum/robot_component/C = components[V] C.max_damage = 10 - verbs -= /mob/living/silicon/robot/verb/namepick + remove_verb(src, /mob/living/silicon/robot/verb/namepick) if(can_pick_shell) var/random = pick(shell_types) @@ -146,7 +146,7 @@ var/list/mob_hat_cache = list() /mob/living/silicon/robot/drone/Login() . = ..() if(can_pick_shell) - to_chat(src, "You can select a shell using the 'Robot Commands' > 'Customize Appearance'") + to_chat(src, span_infoplain(span_bold("You can select a shell using the 'Abilities.Silicon' > 'Customize Appearance'"))) //Redefining some robot procs... /mob/living/silicon/robot/drone/SetName(pickedName as text) @@ -172,7 +172,7 @@ var/list/mob_hat_cache = list() /mob/living/silicon/robot/drone/verb/pick_shell() set name = "Customize Appearance" - set category = "Robot Commands" + set category = "Abilities.Silicon" if(!can_pick_shell) to_chat(src, span_warning("You already selected a shell or this drone type isn't customizable.")) @@ -225,7 +225,7 @@ var/list/mob_hat_cache = list() return user.unEquip(W) wear_hat(W) - user.visible_message("\The [user] puts \the [W] on \the [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " puts \the [W] on \the [src].")) return else if(istype(W, /obj/item/borg/upgrade/)) to_chat(user, span_danger("\The [src] is not compatible with \the [W].")) @@ -286,7 +286,7 @@ var/list/mob_hat_cache = list() log_game("[key_name(user)] emagged drone [key_name(src)]. Laws overridden.") var/time = time2text(world.realtime,"hh:mm:ss") - lawchanges.Add("[time] : [user.name]([user.key]) emagged [name]([key])") + lawchanges.Add("[time] " + span_bold(":") + " [user.name]([user.key]) emagged [name]([key])") emagged = 1 lawupdate = 0 @@ -297,7 +297,7 @@ var/list/mob_hat_cache = list() var/datum/gender/TU = gender_datums[user.get_visible_gender()] set_zeroth_law("Only [user.real_name] and people [TU.he] designate[TU.s] as being such are operatives.") - to_chat(src, "Obey these laws:") + to_chat(src, span_infoplain(span_bold("Obey these laws:"))) laws.show_laws(src) to_chat(src, span_danger("ALERT: [user.real_name] is your new master. Obey your new laws and \his commands.")) return 1 @@ -384,27 +384,27 @@ var/list/mob_hat_cache = list() player.mob.mind.transfer_to(src) lawupdate = 0 - to_chat(src, "Systems rebooted. Loading base pattern maintenance protocol... loaded.") + to_chat(src, span_infoplain(span_bold("Systems rebooted") + " Loading base pattern maintenance protocol... " + span_bold("loaded") + ".")) full_law_reset() welcome_drone() /mob/living/silicon/robot/drone/proc/welcome_drone() - to_chat(src, "You are a maintenance drone, a tiny-brained robotic repair machine.") - to_chat(src, "You have no individual will, no personality, and no drives or urges other than your laws.") - to_chat(src, "Remember, you are lawed against interference with the crew. Also remember, you DO NOT take orders from the AI.") - to_chat(src, "Use say ;Hello to talk to other drones and say Hello to speak silently to your nearby fellows.") + to_chat(src, span_infoplain(span_bold("You are a maintenance drone, a tiny-brained robotic repair machine") + ".")) + to_chat(src, span_infoplain("You have no individual will, no personality, and no drives or urges other than your laws.")) + to_chat(src, span_infoplain("Remember, you are " + span_bold("lawed against interference with the crew") + ". Also remember, " + span_bold("you DO NOT take orders from the AI") + ".")) + to_chat(src, span_infoplain("Use " + span_bold("say ;Hello") + " to talk to other drones and " + span_bold("say Hello") + " to speak silently to your nearby fellows.")) /mob/living/silicon/robot/drone/add_robot_verbs() - src.verbs |= silicon_subsystems + add_verb(src, silicon_subsystems) /mob/living/silicon/robot/drone/remove_robot_verbs() - src.verbs -= silicon_subsystems + remove_verb(src, silicon_subsystems) /mob/living/silicon/robot/drone/construction/welcome_drone() - to_chat(src, "You are a construction drone, an autonomous engineering and fabrication system..") - to_chat(src, "You are assigned to a Sol Central construction project. The name is irrelevant. Your task is to complete construction and subsystem integration as soon as possible.") - to_chat(src, "Use :d to talk to other drones and say to speak silently to your nearby fellows.") - to_chat(src, "You do not follow orders from anyone; not the AI, not humans, and not other synthetics..") + to_chat(src, span_infoplain(span_bold("You are a construction drone, an autonomous engineering and fabrication system") + ".")) + to_chat(src, span_infoplain("You are assigned to a Sol Central construction project. The name is irrelevant. Your task is to complete construction and subsystem integration as soon as possible.")) + to_chat(src, span_infoplain("Use " + span_bold(":d") + " to talk to other drones and " + span_bold("say") + " to speak silently to your nearby fellows.")) + to_chat(src, span_infoplain(span_bold("You do not follow orders from anyone; not the AI, not humans, and not other synthetics") + ".")) /mob/living/silicon/robot/drone/construction/init() ..() diff --git a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm index deaf9fb8b7a..3a4bf3e0e28 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm @@ -2,7 +2,7 @@ /mob/living/silicon/robot/drone/verb/set_mail_tag() set name = "Set Mail Tag" set desc = "Tag yourself for delivery through the disposals system." - set category = "Robot Commands" + set category = "Abilities.Silicon" var/new_tag = tgui_input_list(usr, "Select the desired destination.", "Set Mail Tag", GLOB.tagger_locations) diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index 130716af91d..667fd23abb1 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -267,7 +267,7 @@ set name = "Drop Item" set desc = "Release an item from your magnetic gripper." - set category = "Robot Commands" + set category = "Abilities.Silicon" drop_item() @@ -564,15 +564,15 @@ Installed Modules

    "} - var/tools = "Tools and devices
    " - var/resources = "
    Resources
    " + var/tools = span_bold("Tools and devices") + "
    " + var/resources = "
    " + span_bold("Resources") + "
    " for (var/O in module.modules) var/module_string = "" if (!O) - module_string += text("Resource depleted
    ") + module_string += span_bold("Resource depleted") + "
    " else if(activated(O)) module_string += text("[O]: Activated
    ") else @@ -589,7 +589,7 @@ var/module_string = "" if (!O) - module_string += text("Resource depleted
    ") + module_string += span_bold("Resource depleted") + "
    " else if(activated(O)) module_string += text("[O]: Activated
    ") else diff --git a/code/modules/mob/living/silicon/robot/drone/drone_say.dm b/code/modules/mob/living/silicon/robot/drone/drone_say.dm index d35e87fff68..1accbf719f9 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_say.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_say.dm @@ -2,7 +2,7 @@ if(local_transmit) if (src.client) if(client.prefs.muted & MUTE_IC) - to_chat(src, "You cannot send IC messages (muted).") + to_chat(src, span_warning("You cannot send IC messages (muted).")) return 0 message = sanitize(message) @@ -27,13 +27,13 @@ for(var/mob/living/silicon/D in listeners) if(D.client && D.local_transmit) - to_chat(D, "[src] transmits, \"[message]\"") + to_chat(D, span_say(span_bold("[src]") + "transmits, \"[message]\"")) for (var/mob/M in player_list) if (istype(M, /mob/new_player)) continue else if(M.stat == DEAD && M.client?.prefs?.read_preference(/datum/preference/toggle/ghost_ears)) if(M.client) - to_chat(M, "[src] transmits, \"[message]\"") + to_chat(M, span_say(span_bold("[src]") + "transmits, \"[message]\"")) return 1 return ..() diff --git a/code/modules/mob/living/silicon/robot/examine.dm b/code/modules/mob/living/silicon/robot/examine.dm index 33c917f166a..2622411e1ec 100644 --- a/code/modules/mob/living/silicon/robot/examine.dm +++ b/code/modules/mob/living/silicon/robot/examine.dm @@ -6,12 +6,12 @@ if (src.getBruteLoss() < 75) . += span_warning("It looks slightly dented.") else - . += span_warning("It looks severely dented!") + . += span_boldwarning("It looks severely dented!") if (src.getFireLoss()) if (src.getFireLoss() < 75) . += span_warning("It looks slightly charred.") else - . += span_warning("It looks severely burnt and heat-warped!") + . += span_boldwarning("It looks severely burnt and heat-warped!") if(opened) . += span_warning("Its cover is open and the power cell is [cell ? "installed" : "missing"].") diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index fb99ab98cf1..fc8bda74c93 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -21,6 +21,9 @@ /mob/living/silicon/robot/proc/uneq_active() if(isnull(module_active)) return + var/obj/item/I = module_active + for(var/datum/action/A as anything in I.actions) + A.Remove(src) if(module_state_1 == module_active) if(istype(module_state_1,/obj/item/borg/sight)) sight_mode &= ~module_state_1:sight_mode @@ -64,6 +67,9 @@ if (client) client.screen -= module_state_1 contents -= module_state_1 + var/obj/item/I = module_state_1 + for(var/datum/action/A as anything in I.actions) + A.Remove(src) module_state_1:loc = module module_state_1 = null inv1.icon_state = "inv1" @@ -72,6 +78,9 @@ sight_mode &= ~module_state_2:sight_mode if (client) client.screen -= module_state_2 + var/obj/item/I = module_state_2 + for(var/datum/action/A as anything in I.actions) + A.Remove(src) contents -= module_state_2 module_state_2:loc = module module_state_2 = null @@ -81,6 +90,9 @@ sight_mode &= ~module_state_3:sight_mode if (client) client.screen -= module_state_3 + var/obj/item/I = module_state_3 + for(var/datum/action/A as anything in I.actions) + A.Remove(src) contents -= module_state_3 module_state_3:loc = module module_state_3 = null @@ -212,16 +224,16 @@ var/slot_num if(slot_start == 0) slot_num = 1 - slot_start = 2 else slot_num = slot_start + 1 - - while(slot_start != slot_num) //If we wrap around without finding any free slots, just give up. + if(slot_num > 3) + return + // Attempt to rotate through the slots until we're past slot 3, or find the next usable slot. Allows skipping empty slots, while still having an empty slot at end of rotation. + while(slot_num <= 3) if(module_active(slot_num)) select_module(slot_num) return slot_num++ - if(slot_num > 3) slot_num = 1 //Wrap around. return @@ -276,6 +288,9 @@ pounce.icon_state = initial(pounce.icon_state) pounce.desc = initial(pounce.desc) pounce.bluespace = initial(pounce.bluespace) + if(O) + for(var/datum/action/A as anything in O.actions) + A.Grant(src) /mob/living/silicon/robot/put_in_hands(var/obj/item/W) // No hands. W.forceMove(get_turf(src)) diff --git a/code/modules/mob/living/silicon/robot/laws.dm b/code/modules/mob/living/silicon/robot/laws.dm index 59a7160d4c2..af480641857 100644 --- a/code/modules/mob/living/silicon/robot/laws.dm +++ b/code/modules/mob/living/silicon/robot/laws.dm @@ -1,5 +1,5 @@ /mob/living/silicon/robot/verb/cmd_show_laws() - set category = "Robot Commands" + set category = "Abilities.Silicon" set name = "Show Laws" show_laws() @@ -14,32 +14,32 @@ if(lawupdate) if (connected_ai) if(connected_ai.stat || connected_ai.control_disabled) - to_chat(src, "AI signal lost, unable to sync laws.") + to_chat(src, span_infoplain(span_bold("AI signal lost, unable to sync laws."))) else lawsync() photosync() - to_chat(src, "Laws synced with AI, be sure to note any changes.") + to_chat(src, span_infoplain(span_bold("Laws synced with AI, be sure to note any changes."))) // TODO: Update to new antagonist system. if(mind && mind.special_role == "traitor" && mind.original == src) - to_chat(src, "Remember, your AI does NOT share or know about your law 0.") + to_chat(src, span_infoplain(span_bold("Remember, your AI does NOT share or know about your law 0."))) else - to_chat(src, "No AI selected to sync laws with, disabling lawsync protocol.") + to_chat(src, span_infoplain(span_bold("No AI selected to sync laws with, disabling lawsync protocol."))) lawupdate = FALSE - to_chat(who, "Obey these laws:") + to_chat(who, span_infoplain(span_bold("Obey these laws:"))) laws.show_laws(who) if(shell) //AI shell - to_chat(who, "Remember, you are an AI remotely controlling your shell, other AIs can be ignored.") + to_chat(who, span_infoplain(span_bold("Remember, you are an AI remotely controlling your shell, other AIs can be ignored."))) // TODO: Update to new antagonist system. else if(mind && (mind.special_role == "traitor" && mind.original == src) && connected_ai) - to_chat(who, "Remember, [connected_ai.name] is technically your master, but your objective comes first.") + to_chat(who, span_infoplain(span_bold("Remember, [connected_ai.name] is technically your master, but your objective comes first."))) else if(connected_ai) - to_chat(who, "Remember, [connected_ai.name] is your master, other AIs can be ignored.") + to_chat(who, span_infoplain(span_bold("Remember, [connected_ai.name] is your master, other AIs can be ignored."))) else if(emagged) - to_chat(who, "Remember, you are not required to listen to the AI.") + to_chat(who, span_infoplain(span_bold("Remember, you are not required to listen to the AI."))) else - to_chat(who, "Remember, you are not bound to any AI, you are not required to listen to them.") + to_chat(who, span_infoplain(span_bold("Remember, you are not bound to any AI, you are not required to listen to them."))) /mob/living/silicon/robot/lawsync() @@ -51,6 +51,6 @@ return /mob/living/silicon/robot/proc/robot_checklaws() - set category = "Robot Commands" + set category = "Abilities.Silicon" set name = "State Laws" subsystem_law_manager() diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 27b5a5123f6..3019869da87 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -10,7 +10,6 @@ //Status updates, death etc. clamp_values() handle_regular_status_updates() - handle_actions() handle_instability() // For some reason borg Life() doesn't call ..() handle_modifiers() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 20868b6d3ef..3ea48098658 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -280,11 +280,13 @@ if (!rbPDA) rbPDA = new/obj/item/pda/ai(src) rbPDA.set_name_and_job(name,"[modtype] [braintype]") + add_verb(src, /obj/item/pda/ai/verb/cmd_pda_open_ui) /mob/living/silicon/robot/proc/setup_communicator() if (!communicator) communicator = new/obj/item/communicator/integrated(src) communicator.register_device(name, "[modtype] [braintype]") + add_verb(src, /obj/item/communicator/integrated/verb/activate) //If there's an MMI in the robot, have it ejected when the mob goes away. --NEO //Improved /N @@ -424,7 +426,7 @@ /mob/living/silicon/robot/verb/namepick() set name = "Pick Name" - set category = "Robot Commands" + set category = "Abilities.Silicon" if(custom_name) to_chat(usr, "You can't pick another custom name. [isshell(src) ? "" : "Go ask for a name change."]") @@ -442,7 +444,7 @@ /mob/living/silicon/robot/verb/extra_customization() set name = "Customize Appearance" - set category = "Robot Commands" + set category = "Abilities.Silicon" set desc = "Customize your appearance (assuming your chosen sprite allows)." if(!sprite_datum || !sprite_datum.has_extra_customization) @@ -458,12 +460,12 @@ var/dat = "[src.name] Self-Diagnosis Report\n" for (var/V in components) var/datum/robot_component/C = components[V] - dat += "[C.name]
    Brute Damage:[C.brute_damage]
    Electronics Damage:[C.electronics_damage]
    Powered:[(!C.idle_usage || C.is_powered()) ? "Yes" : "No"]
    Toggled:[ C.toggled ? "Yes" : "No"]

    " + dat += span_bold("[C.name]") + "
    Brute Damage:[C.brute_damage]
    Electronics Damage:[C.electronics_damage]
    Powered:[(!C.idle_usage || C.is_powered()) ? "Yes" : "No"]
    Toggled:[ C.toggled ? "Yes" : "No"]

    " return dat /mob/living/silicon/robot/verb/toggle_lights() - set category = "Robot Commands" + set category = "Abilities.Silicon" set name = "Toggle Lights" lights_on = !lights_on @@ -472,7 +474,7 @@ update_icon() /mob/living/silicon/robot/verb/self_diagnosis_verb() - set category = "Robot Commands" + set category = "Abilities.Silicon" set name = "Self Diagnosis" if(!is_component_functioning("diagnosis unit")) @@ -486,7 +488,7 @@ /mob/living/silicon/robot/verb/toggle_component() - set category = "Robot Commands" + set category = "Abilities.Silicon" set name = "Toggle Component" set desc = "Toggle a component, conserving power." @@ -510,18 +512,19 @@ to_chat(src, span_red("You enable [C.name].")) /mob/living/silicon/robot/verb/spark_plug() //So you can still sparkle on demand without violence. - set category = "Robot Commands" + set category = "Abilities.Silicon" set name = "Emit Sparks" to_chat(src, span_filter_notice("You harmlessly spark.")) spark_system.start() // this function displays jetpack pressure in the stat panel /mob/living/silicon/robot/proc/show_jetpack_pressure() + . = list() // if you have a jetpack, show the internal tank pressure var/obj/item/tank/jetpack/current_jetpack = installed_jetpack() if (current_jetpack) - stat("Internal Atmosphere Info", current_jetpack.name) - stat("Tank Pressure", current_jetpack.air_contents.return_pressure()) + . += "Internal Atmosphere Info: [current_jetpack.name]" + . += "Tank Pressure: [current_jetpack.air_contents.return_pressure()]" // this function returns the robots jetpack, if one is installed @@ -533,12 +536,13 @@ // this function displays the cyborgs current cell charge in the stat panel /mob/living/silicon/robot/proc/show_cell_power() + . = list() if(cell) - stat(null, text("Charge Left: [round(cell.percent())]%")) - stat(null, text("Cell Rating: [round(cell.maxcharge)]")) // Round just in case we somehow get crazy values - stat(null, text("Power Cell Load: [round(used_power_this_tick)]W")) + . += "Charge Left: [round(cell.percent())]%" + . += "Cell Rating: [round(cell.maxcharge)]" // Round just in case we somehow get crazy values + . += "Power Cell Load: [round(used_power_this_tick)]W" else - stat(null, text("No Cell Inserted!")) + . += "No Cell Inserted!" // function to toggle VTEC once installed /mob/living/silicon/robot/proc/toggle_vtec() @@ -549,15 +553,15 @@ to_chat(src, span_filter_notice("VTEC module [vtec_active ? "enabled" : "disabled"].")) // update the status screen display -/mob/living/silicon/robot/Stat() - ..() - if (statpanel("Status")) - show_cell_power() - show_jetpack_pressure() - stat(null, text("Lights: [lights_on ? "ON" : "OFF"]")) - if(module) - for(var/datum/matter_synth/ms in module.synths) - stat("[ms.name]: [ms.energy]/[ms.max_energy]") +/mob/living/silicon/robot/get_status_tab_items() + . = ..() + . += "" + . += show_cell_power() + . += show_jetpack_pressure() + . += "Lights: [lights_on ? "ON" : "OFF"]" + if(module) + for(var/datum/matter_synth/ms in module.synths) + . += "[ms.name]: [ms.energy]/[ms.max_energy]" /mob/living/silicon/robot/restrained() return 0 @@ -843,7 +847,7 @@ /mob/living/silicon/robot/proc/ColorMate() set name = "Recolour Module" - set category = "Robot Commands" + set category = "Abilities.Silicon" set desc = "Allows to recolour once." if(!has_recoloured) @@ -1079,7 +1083,7 @@ for (var/obj in module.modules) if (!obj) - dat += text("Resource depleted
    ") + dat += span_bold("Resource depleted") + "
    " else if(activated(obj)) dat += text("[obj]: Activated
    ") else @@ -1087,7 +1091,7 @@ if (emagged || emag_items) for (var/obj in module.emag) if (!obj) - dat += text("Resource depleted
    ") + dat += span_bold("Resource depleted") + "
    " else if(activated(obj)) dat += text("[obj]: Activated
    ") else @@ -1191,7 +1195,7 @@ /mob/living/silicon/robot/proc/ResetSecurityCodes() - set category = "Robot Commands" + set category = "Abilities.Silicon" set name = "Reset Identity Codes" set desc = "Scrambles your security and identification codes and resets your current buffers. Unlocks you and permenantly severs you from your AI and the robotics console and will deactivate your camera system." @@ -1200,7 +1204,7 @@ if(R) R.UnlinkSelf() to_chat(R, span_filter_notice("Buffers flushed and reset. Camera system shutdown. All systems operational.")) - src.verbs -= /mob/living/silicon/robot/proc/ResetSecurityCodes + remove_verb(src, /mob/living/silicon/robot/proc/ResetSecurityCodes) /mob/living/silicon/robot/proc/SetLockdown(var/state = 1) // They stay locked down if their wire is cut. @@ -1289,7 +1293,7 @@ /mob/living/silicon/robot/proc/sensor_mode() //Medical/Security HUD controller for borgs set name = "Toggle Sensor Augmentation" //VOREStation Add - set category = "Robot Commands" + set category = "Abilities.Silicon" set desc = "Augment visual feed with internal sensor overlays." sensor_type = !sensor_type //VOREStation Add to_chat(usr, "You [sensor_type ? "enable" : "disable"] your sensors.") //VOREStation Add @@ -1299,16 +1303,16 @@ return /mob/living/silicon/robot/proc/add_robot_verbs() - src.verbs |= robot_verbs_default - src.verbs |= silicon_subsystems + add_verb(src, robot_verbs_default) + add_verb(src, silicon_subsystems) if(config.allow_robot_recolor) - src.verbs |= /mob/living/silicon/robot/proc/ColorMate + add_verb(src, /mob/living/silicon/robot/proc/ColorMate) /mob/living/silicon/robot/proc/remove_robot_verbs() - src.verbs -= robot_verbs_default - src.verbs -= silicon_subsystems + remove_verb(src, robot_verbs_default) + remove_verb(src, silicon_subsystems) if(config.allow_robot_recolor) - src.verbs |= /mob/living/silicon/robot/proc/ColorMate + remove_verb(src, /mob/living/silicon/robot/proc/ColorMate) // Uses power from cyborg's cell. Returns 1 on success or 0 on failure. // Properly converts using CELLRATE now! Amount is in Joules. @@ -1358,16 +1362,16 @@ return // No point annoying the AI/s about renames and module resets for shells. switch(notifytype) if(ROBOT_NOTIFICATION_NEW_UNIT) //New Robot - to_chat(connected_ai, span_filter_notice("

    NOTICE - New [lowertext(braintype)] connection detected: [name]
    ")) + to_chat(connected_ai, span_filter_notice("

    " + span_notice("NOTICE - New [lowertext(braintype)] connection detected: [name]") + "
    ")) if(ROBOT_NOTIFICATION_NEW_MODULE) //New Module - to_chat(connected_ai, span_filter_notice("

    NOTICE - [braintype] module change detected: [name] has loaded the [first_arg].
    ")) + to_chat(connected_ai, span_filter_notice("

    " + span_notice("NOTICE - [braintype] module change detected: [name] has loaded the [first_arg].") + "
    ")) if(ROBOT_NOTIFICATION_MODULE_RESET) - to_chat(connected_ai, span_filter_notice("

    NOTICE - [braintype] module reset detected: [name] has unloaded the [first_arg].
    ")) + to_chat(connected_ai, span_filter_notice("

    " + span_notice("NOTICE - [braintype] module reset detected: [name] has unloaded the [first_arg].") + "
    ")) if(ROBOT_NOTIFICATION_NEW_NAME) //New Name if(first_arg != second_arg) - to_chat(connected_ai, span_filter_notice("

    NOTICE - [braintype] reclassification detected: [first_arg] is now designated as [second_arg].
    ")) + to_chat(connected_ai, span_filter_notice("

    " + span_notice("NOTICE - [braintype] reclassification detected: [first_arg] is now designated as [second_arg].") + "
    ")) if(ROBOT_NOTIFICATION_AI_SHELL) //New Shell - to_chat(connected_ai, span_filter_notice("

    NOTICE - New AI shell detected: [name]
    ")) + to_chat(connected_ai, span_filter_notice("

    " + span_notice("NOTICE - New AI shell detected: [name]") + "
    ")) /mob/living/silicon/robot/proc/disconnect_from_ai() if(connected_ai) @@ -1408,7 +1412,7 @@ log_game("[key_name(user)] assigned as operator on cyborg [key_name(src)]. Syndicate Operator change.") var/datum/gender/TU = gender_datums[user.get_visible_gender()] set_zeroth_law("Only [user.real_name] and people [TU.he] designate[TU.s] as being such are operatives.") - to_chat(src, "Obey these laws:") + to_chat(src, span_infoplain(span_bold("Obey these laws:"))) laws.show_laws(src) to_chat(src, span_danger("ALERT: [user.real_name] is your new master. Obey your new laws and [TU.his] commands.")) else @@ -1460,7 +1464,7 @@ to_chat(src, span_danger("> N")) sleep(20) to_chat(src, span_danger("ERRORERRORERROR")) - to_chat(src, "Obey these laws:") + to_chat(src, span_infoplain(span_bold("Obey these laws:"))) laws.show_laws(src) to_chat(src, span_danger("ALERT: [user.real_name] is your new master. Obey your new laws and [TU.his] commands.")) update_icon() diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm index def75b1dad2..8f8c0757e0c 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm @@ -167,10 +167,10 @@ var/global/list/robot_modules = list( added_networks.Cut() /obj/item/robot_module/proc/add_subsystems(var/mob/living/silicon/robot/R) - R.verbs |= subsystems + add_verb(R, subsystems) /obj/item/robot_module/proc/remove_subsystems(var/mob/living/silicon/robot/R) - R.verbs -= subsystems + remove_verb(R, subsystems) /obj/item/robot_module/proc/apply_status_flags(var/mob/living/silicon/robot/R) if(!can_be_pushed) diff --git a/code/modules/mob/living/silicon/robot/robot_remote_control.dm b/code/modules/mob/living/silicon/robot/robot_remote_control.dm index a768b1f7b76..4f38630848d 100644 --- a/code/modules/mob/living/silicon/robot/robot_remote_control.dm +++ b/code/modules/mob/living/silicon/robot/robot_remote_control.dm @@ -65,7 +65,7 @@ GLOBAL_LIST_EMPTY(available_ai_shells) lawsync() // Give button to leave. - verbs += /mob/living/silicon/robot/proc/undeploy_act + add_verb(src, /mob/living/silicon/robot/proc/undeploy_act) to_chat(AI, span_notice("You have connected to an AI Shell remotely, and are now in control of it.
    \ To return to your core, use the Release Control verb.")) @@ -110,7 +110,7 @@ GLOBAL_LIST_EMPTY(available_ai_shells) /mob/living/silicon/robot/proc/undeploy_act() set name = "Release Control" set desc = "Release control of a remote drone." - set category = "Robot Commands" + set category = "Abilities.Silicon" undeploy("Remote session terminated.") diff --git a/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm b/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm index 2524d784de2..24e449c411c 100644 --- a/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm +++ b/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm @@ -70,7 +70,7 @@ var/confirm = tgui_alert(src, "Do you want to keep your laws or reroll? (For specific laws, feel free to ahelp and we'll see what we can do)", "Confirm laws", list("Keep", "Reroll ([law_retries])")) if(findtext(confirm, regex("Reroll \\(\[0-9\]*\\)", ""))) apply_new_laws() - to_chat(src, "Obey these laws:") + to_chat(src, span_infoplain(span_bold("Obey these laws:"))) laws.show_laws(src) law_retries -- else diff --git a/code/modules/mob/living/silicon/robot/subtypes/thinktank/_thinktank.dm b/code/modules/mob/living/silicon/robot/subtypes/thinktank/_thinktank.dm index 21a2db794b1..ed003d1c784 100644 --- a/code/modules/mob/living/silicon/robot/subtypes/thinktank/_thinktank.dm +++ b/code/modules/mob/living/silicon/robot/subtypes/thinktank/_thinktank.dm @@ -141,7 +141,7 @@ if(new_recharge_state != last_recharge_state) last_recharge_state = new_recharge_state if(last_recharge_state) - to_chat(src, span_notice("Your integrated solar panels begin recharging your battery.")) + to_chat(src, span_boldnotice("Your integrated solar panels begin recharging your battery.")) else to_chat(src, span_danger("Your integrated solar panels cease recharging your battery.")) @@ -166,4 +166,4 @@ if(!recharge_complete && recharging_atom.percent() >= 100) recharge_complete = TRUE - visible_message("\The [src] beeps and flashes a green light above \his recharging port.") + visible_message(span_infoplain("[span_bold("\The [src]")] beeps and flashes a green light above \his recharging port.")) diff --git a/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_interactions.dm b/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_interactions.dm index a464f9c36cd..3f00773e09d 100644 --- a/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_interactions.dm +++ b/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_interactions.dm @@ -6,7 +6,7 @@ if(istype(recharging_atom) && !QDELETED(recharging_atom) && recharging_atom.loc == src) recharging_atom.dropInto(loc) user.put_in_hands(recharging_atom) - user.visible_message("\The [user] pops \the [recharging_atom] out of \the [src]'s recharging port.") + user.visible_message(span_infoplain(span_bold("\The [user]") + " pops \the [recharging_atom] out of \the [src]'s recharging port.")) recharging = null return TRUE @@ -24,7 +24,7 @@ W.forceMove(src) recharging = WEAKREF(W) recharge_complete = FALSE - user.visible_message("\The [user] slots \the [W] into \the [src]'s recharging port.") + user.visible_message(span_infoplain(span_bold("\The [user]") + " slots \the [W] into \the [src]'s recharging port.")) return TRUE if(istype(W, /obj/item/floor_painter)) @@ -70,7 +70,7 @@ /mob/living/silicon/robot/platform/proc/welcome_client() if(client) - to_chat(src, span_notice("You are a think-tank, a kind of flexible and adaptive drone intelligence installed into an armoured platform. Your programming compels you to be friendly and helpful wherever possible.")) + to_chat(src, span_notice(span_bold("You are a think-tank") + ", a kind of flexible and adaptive drone intelligence installed into an armoured platform. Your programming compels you to be friendly and helpful wherever possible.")) SetSleeping(0) SetWeakened(0) SetParalysis(0) diff --git a/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_module.dm b/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_module.dm index 2175bb1db47..ebe112a4e8d 100644 --- a/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_module.dm +++ b/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_module.dm @@ -25,7 +25,7 @@ /obj/item/robot_module/robot/platform/verb/set_eye_colour() set name = "Set Eye Colour" set desc = "Select an eye colour to use." - set category = "Robot Commands" + set category = "Abilities.Silicon" set src in usr var/new_pupil_color = input(usr, "Select a pupil colour.", "Pupil Colour Selection") as color|null diff --git a/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_storage.dm b/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_storage.dm index c1cc9e770e0..563fedaf73f 100644 --- a/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_storage.dm +++ b/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_storage.dm @@ -82,9 +82,9 @@ if(istype(ejecting) && !QDELETED(ejecting) && ejecting.loc == src) ejecting.dropInto(loc) if(user == src) - visible_message("\The [src] ejects \the [ejecting] from its cargo compartment.") + visible_message(span_infoplain(span_bold("\The [src]") + " ejects \the [ejecting] from its cargo compartment.")) else - user.visible_message("\The [user] pulls \the [ejecting] from \the [src]'s cargo compartment.") + user.visible_message(span_infoplain(span_bold("\The [user]") + " pulls \the [ejecting] from \the [src]'s cargo compartment.")) /mob/living/silicon/robot/platform/attack_ai(mob/user) if(isrobot(user) && user.Adjacent(src)) @@ -99,14 +99,14 @@ if(!istype(removing) || QDELETED(removing) || removing.loc != src) LAZYREMOVE(stored_atoms, remove_ref) else - user.visible_message("\The [user] begins unloading \the [removing] from \the [src]'s cargo compartment.") + user.visible_message(span_infoplain(span_bold("\The [user]") + " begins unloading \the [removing] from \the [src]'s cargo compartment.")) if(do_after(user, 3 SECONDS, src) && !QDELETED(removing) && removing.loc == src) drop_stored_atom(removing, user) return TRUE /mob/living/silicon/robot/platform/verb/drop_stored_atom_verb() set name = "Eject Cargo" - set category = "Robot Commands" + set category = "Abilities.Silicon" set desc = "Drop something from your internal storage." if(incapacitated()) @@ -124,9 +124,9 @@ if(!can_mouse_drop(dropping, user) || !can_store_atom(dropping, user)) return FALSE if(user == src) - visible_message("\The [src] begins loading \the [dropping] into its cargo compartment.") + visible_message(span_infoplain(span_bold("\The [src]") + " begins loading \the [dropping] into its cargo compartment.")) else - user.visible_message("\The [user] begins loading \the [dropping] into \the [src]'s cargo compartment.") + user.visible_message(span_infoplain(span_bold("\The [user]") + " begins loading \the [dropping] into \the [src]'s cargo compartment.")) if(do_after(user, 3 SECONDS, src) && can_mouse_drop(dropping, user) && can_store_atom(dropping, user)) store_atom(dropping, user) return FALSE diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm index c7eafa07756..f5558875540 100644 --- a/code/modules/mob/living/silicon/say.dm +++ b/code/modules/mob/living/silicon/say.dm @@ -73,7 +73,7 @@ /*Radios "filter out" this conversation channel so we don't need to account for them. This is another way of saying that we won't bother dealing with them.*/ var/list/combined = combine_message(message_pieces, verb, src) - to_chat(src, span_game(span_say("Holopad transmitted, [span_name(real_name)] [combined["formatted"]]"))) + to_chat(src, span_game(span_say(span_italics("Holopad transmitted, [span_name(real_name)] [combined["formatted"]]")))) else to_chat(src, span_filter_notice("No holopad connected.")) return 0 @@ -88,7 +88,7 @@ var/obj/machinery/hologram/holopad/T = src.holo if(T && T.masters[src]) var/rendered = span_game(span_say(span_name(name) + " " + span_message(message))) - to_chat(src, span_game(span_say("Holopad action relayed, [span_name(real_name)] [span_message(message)]"))) + to_chat(src, span_game(span_say(span_italics("Holopad action relayed, [span_name(real_name)] [span_message(message)]")))) var/obj/effect/overlay/aiholo/hologram = T.masters[src] //VOREStation Add for people in the hologram to hear the messages //var/obj/effect/overlay/hologram = T.masters[src] //VOREStation edit. Done above. diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index e7f297b7fde..3f3d1016687 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -74,7 +74,7 @@ src.take_organ_damage(0,5,emp=1) Confuse(2) flash_eyes(affect_silicon = 1) - to_chat(src, span_danger("*BZZZT*")) + to_chat(src, span_bolddanger("*BZZZT*")) to_chat(src, span_danger("Warning: Electromagnetic pulse detected.")) ..() @@ -130,30 +130,30 @@ // this function shows the health of the AI in the Status panel /mob/living/silicon/proc/show_system_integrity() if(!src.stat) - stat(null, text("System integrity: [round((health/getMaxHealth())*100)]%")) + . = "System integrity: [round((health/getMaxHealth())*100)]%" else - stat(null, text("Systems nonfunctional")) + . = "Systems nonfunctional" // This is a pure virtual function, it should be overwritten by all subclasses /mob/living/silicon/proc/show_malf_ai() - return 0 + return "" // this function displays the shuttles ETA in the status panel if the shuttle has been called /mob/living/silicon/proc/show_emergency_shuttle_eta() if(emergency_shuttle) var/eta_status = emergency_shuttle.get_status_panel_eta() if(eta_status) - stat(null, eta_status) + . = "[eta_status]" // This adds the basic clock, shuttle recall timer, and malf_ai info to all silicon lifeforms -/mob/living/silicon/Stat() - if(statpanel("Status")) - show_emergency_shuttle_eta() - show_system_integrity() - show_malf_ai() - ..() +/mob/living/silicon/get_status_tab_items() + . = ..() + . += "" + . += show_emergency_shuttle_eta() + . += show_system_integrity() + . += show_malf_ai() /* VOREStation Removal // this function displays the stations manifest in a separate window @@ -221,7 +221,7 @@ default_str = " - set default" var/synth = (L in speech_synthesizer_langs) - . += "[L.name] ([get_language_prefix()][L.key])[synth ? default_str : null]
    Speech Synthesizer: [synth ? "YES" : "NOT SUPPORTED"]
    [L.desc]

    " + . += span_bold("[L.name] ([get_language_prefix()][L.key])") + "[synth ? default_str : null]
    Speech Synthesizer: [synth ? "YES" : "NOT SUPPORTED"]
    [L.desc]

    " /mob/living/silicon/proc/toggle_sensor_mode() //VOREStation Add to make borgs use omni starts here - Tank, clueless bird if(sensor_type) diff --git a/code/modules/mob/living/silicon/subystems.dm b/code/modules/mob/living/silicon/subystems.dm index 6c46ecb2e88..e2d82f6fdfe 100644 --- a/code/modules/mob/living/silicon/subystems.dm +++ b/code/modules/mob/living/silicon/subystems.dm @@ -51,7 +51,7 @@ ********************/ /mob/living/silicon/proc/subsystem_alarm_monitor() set name = "Alarm Monitor" - set category = "Subystems" + set category = "Abilities.Silicon" alarm_monitor.tgui_interact(usr) @@ -59,7 +59,7 @@ * Atmos Control * ********************/ /mob/living/silicon/proc/subsystem_atmos_control() - set category = "Subystems" + set category = "Abilities.Silicon" set name = "Atmospherics Control" atmos_control.tgui_interact(usr) @@ -68,7 +68,7 @@ * Crew Manifest * ********************/ /mob/living/silicon/proc/subsystem_crew_manifest() - set category = "Subystems" + set category = "Abilities.Silicon" set name = "Crew Manifest" crew_manifest.tgui_interact(usr) @@ -77,7 +77,7 @@ * Crew Monitor * ********************/ /mob/living/silicon/proc/subsystem_crew_monitor() - set category = "Subystems" + set category = "Abilities.Silicon" set name = "Crew Monitor" crew_monitor.tgui_interact(usr) @@ -87,7 +87,7 @@ ****************/ /mob/living/silicon/proc/subsystem_law_manager() set name = "Law Manager" - set category = "Subystems" + set category = "Abilities.Silicon" law_manager.tgui_interact(usr) @@ -95,7 +95,7 @@ * Power Monitor * ********************/ /mob/living/silicon/proc/subsystem_power_monitor() - set category = "Subystems" + set category = "Abilities.Silicon" set name = "Power Monitor" power_monitor.tgui_interact(usr) @@ -104,7 +104,7 @@ * RCON * ************/ /mob/living/silicon/proc/subsystem_rcon() - set category = "Subystems" + set category = "Abilities.Silicon" set name = "RCON" rcon.tgui_interact(usr) diff --git a/code/modules/mob/living/simple_mob/combat.dm b/code/modules/mob/living/simple_mob/combat.dm index 065878284d3..727efefcd23 100644 --- a/code/modules/mob/living/simple_mob/combat.dm +++ b/code/modules/mob/living/simple_mob/combat.dm @@ -113,7 +113,7 @@ try_reload() return FALSE - visible_message(span_danger("\The [src] fires at \the [A]!")) + visible_message(span_danger(span_bold("\The [src]") + " fires at \the [A]!")) shoot(A) if(casingtype) new casingtype(loc) diff --git a/code/modules/mob/living/simple_mob/defense.dm b/code/modules/mob/living/simple_mob/defense.dm index 1d59a5d9c2e..c8ebebd1622 100644 --- a/code/modules/mob/living/simple_mob/defense.dm +++ b/code/modules/mob/living/simple_mob/defense.dm @@ -76,7 +76,7 @@ if(health < getMaxHealth()) if(MED.use(1)) adjustBruteLoss(-MED.heal_brute) - visible_message("\The [user] applies the [MED] on [src].") + visible_message(span_infoplain(span_bold("\The [user]") + " applies the [MED] on [src].")) else var/datum/gender/T = gender_datums[src.get_visible_gender()] to_chat(user, span_notice("\The [src] is dead, medical items won't bring [T.him] back to life.")) // the gender lookup is somewhat overkill, but it functions identically to the obsolete gender macros and future-proofs this code diff --git a/code/modules/mob/living/simple_mob/simple_mob.dm b/code/modules/mob/living/simple_mob/simple_mob.dm index 8808f30f4bf..ec4ff326ff4 100644 --- a/code/modules/mob/living/simple_mob/simple_mob.dm +++ b/code/modules/mob/living/simple_mob/simple_mob.dm @@ -180,7 +180,7 @@ var/isthermal = 0 /mob/living/simple_mob/Initialize() - verbs -= /mob/verb/observe + remove_verb(src, /mob/verb/observe) health = maxHealth if(ID_provided) //VOREStation Edit @@ -199,7 +199,7 @@ organ_names = GET_DECL(organ_names) if(config.allow_simple_mob_recolor) - verbs |= /mob/living/simple_mob/proc/ColorMate + add_verb(src, /mob/living/simple_mob/proc/ColorMate) return ..() @@ -224,9 +224,9 @@ //Client attached /mob/living/simple_mob/Login() . = ..() - to_chat(src,"You are \the [src]. [player_msg]") + to_chat(src,span_boldnotice("You are \the [src].") + " [player_msg]") if(hasthermals) - verbs |= /mob/living/simple_mob/proc/hunting_vision //So that maint preds can see prey through walls, to make it easier to find them. + add_verb(src, /mob/living/simple_mob/proc/hunting_vision) //So that maint preds can see prey through walls, to make it easier to find them. /mob/living/simple_mob/SelfMove(turf/n, direct, movetime) var/turf/old_turf = get_turf(src) @@ -286,11 +286,10 @@ . += ..() - -/mob/living/simple_mob/Stat() - ..() - if(statpanel("Status") && show_stat_health) - stat(null, "Health: [round((health / getMaxHealth()) * 100)]%") +/mob/living/simple_mob/get_status_tab_items() + . = ..() + . += "" + . += "Health: [round((health / getMaxHealth()) * 100)]%" /mob/living/simple_mob/lay_down() ..() @@ -314,7 +313,7 @@ return mob_class & MOB_CLASS_HUMANOID|MOB_CLASS_ANIMAL|MOB_CLASS_SLIME // Update this if needed. /mob/living/simple_mob/get_nametag_desc(mob/user) - return "[tt_desc]" + return span_italics("[tt_desc]") /mob/living/simple_mob/make_hud_overlays() hud_list[STATUS_HUD] = gen_hud_image(buildmode_hud, src, "ai_0", plane = PLANE_BUILDMODE) diff --git a/code/modules/mob/living/simple_mob/simple_mob_vr.dm b/code/modules/mob/living/simple_mob/simple_mob_vr.dm index c2d9f723d33..b4f999bc830 100644 --- a/code/modules/mob/living/simple_mob/simple_mob_vr.dm +++ b/code/modules/mob/living/simple_mob/simple_mob_vr.dm @@ -170,9 +170,9 @@ vore_pounce_cooldown = world.time + 20 SECONDS // don't attempt another pounce for a while if(prob(successrate)) // pounce success! M.Weaken(5) - M.visible_message("\The [src] pounces on \the [M]!!") + M.visible_message(span_danger("\The [src] pounces on \the [M]!")) else // pounce misses! - M.visible_message("\The [src] attempts to pounce \the [M] but misses!!") + M.visible_message(span_danger("\The [src] attempts to pounce \the [M] but misses!")) playsound(src, 'sound/weapons/punchmiss.ogg', 25, 1, -1) if(will_eat(M) && (!M.canmove || vore_standing_too)) //if they're edible then eat them too @@ -212,16 +212,16 @@ return if(!IsAdvancedToolUser()) - verbs |= /mob/living/simple_mob/proc/animal_nom - verbs |= /mob/living/proc/shred_limb + add_verb(src, /mob/living/simple_mob/proc/animal_nom) + add_verb(src, /mob/living/proc/shred_limb) if(LAZYLEN(vore_organs)) return // Since they have bellies, add verbs to toggle settings on them. - verbs |= /mob/living/simple_mob/proc/toggle_digestion - verbs |= /mob/living/simple_mob/proc/toggle_fancygurgle - verbs |= /mob/living/proc/vertical_nom + add_verb(src, /mob/living/simple_mob/proc/toggle_digestion) + add_verb(src, /mob/living/simple_mob/proc/toggle_fancygurgle) + add_verb(src, /mob/living/proc/vertical_nom) //A much more detailed version of the default /living implementation var/obj/belly/B = new /obj/belly(src) @@ -278,7 +278,7 @@ return FALSE if(tmob.canmove && prob(vore_pounce_chance)) //if they'd pounce for other noms, pounce for these too, otherwise still try and eat them if they hold still tmob.Weaken(5) - tmob.visible_message("\The [src] [vore_bump_emote] \the [tmob]!!") + tmob.visible_message(span_danger("\The [src] [vore_bump_emote] \the [tmob]!")) set_AI_busy(TRUE) spawn() animal_nom(tmob) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm index 164257a4c7f..67fe95dba1b 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm @@ -51,7 +51,7 @@ catalogue_data = list(/datum/category_item/catalogue/fauna/catslug) ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive/catslug say_list_type = /datum/say_list/catslug - player_msg = "You have escaped the foul weather, into this much more pleasant place. You are an intelligent creature capable of more than most think. You can pick up and use many things, and even carry some of them with you into the vents, which you can use to move around quickly. You're quiet and capable, you speak with your hands and your deeds!
    - - - - -
    Keep in mind, your goal should generally be to survive. You're expected to follow the same rules as everyone else, so don't go self antagging without permission from the staff team, but you are able and capable of defending yourself from those who would attack you for no reason." + player_msg = "You have escaped the foul weather, into this much more pleasant place. You are an intelligent creature capable of more than most think. You can pick up and use many things, and even carry some of them with you into the vents, which you can use to move around quickly. You're quiet and capable, you speak with your hands and your deeds!
    - - - - -
    " + span_notice("Keep in mind, your goal should generally be to survive. You're expected to follow the same rules as everyone else, so don't go self antagging without permission from the staff team, but you are able and capable of defending yourself from those who would attack you for no reason.") has_langs = list(LANGUAGE_SIGN) @@ -137,9 +137,9 @@ /mob/living/simple_mob/vore/alienanimals/catslug/Initialize() . = ..() - verbs += /mob/living/proc/ventcrawl - verbs += /mob/living/proc/hide - verbs += /mob/living/simple_mob/vore/alienanimals/catslug/proc/catslug_color + add_verb(src, /mob/living/proc/ventcrawl) + add_verb(src, /mob/living/proc/hide) + add_verb(src, /mob/living/simple_mob/vore/alienanimals/catslug/proc/catslug_color) /mob/living/simple_mob/vore/alienanimals/catslug/Destroy() if(hat) @@ -358,9 +358,9 @@ /mob/living/simple_mob/vore/alienanimals/catslug/custom/Initialize() . = ..() - verbs += /mob/living/proc/ventcrawl - verbs += /mob/living/proc/hide - verbs -= /mob/living/simple_mob/vore/alienanimals/catslug/proc/catslug_color //Most of these have custom sprites with colour already, so we'll not let them have this. + add_verb(src, /mob/living/proc/ventcrawl) + add_verb(src, /mob/living/proc/hide) + remove_verb(src, /mob/living/simple_mob/vore/alienanimals/catslug/proc/catslug_color) //Most of these have custom sprites with colour already, so we'll not let them have this. /datum/category_item/catalogue/fauna/catslug/custom/spaceslug @@ -404,7 +404,7 @@ min_n2 = 0 max_n2 = 0 - player_msg = "You are an intelligent creature capable of more than most think, clad in a spacesuit that protects you from the ravages of vacuum and hostile atmospheres alike. You can pick up and use many things, and even carry some of them with you into the vents, which you can use to move around quickly. You're quiet and capable, you speak with your hands and your deeds!
    - - - - -
    Keep in mind, your goal should generally be to survive. You're expected to follow the same rules as everyone else, so don't go self antagging without permission from the staff team, but you are able and capable of defending yourself from those who would attack you for no reason." + player_msg = "You are an intelligent creature capable of more than most think, clad in a spacesuit that protects you from the ravages of vacuum and hostile atmospheres alike. You can pick up and use many things, and even carry some of them with you into the vents, which you can use to move around quickly. You're quiet and capable, you speak with your hands and your deeds!
    - - - - -
    " + span_notice("Keep in mind, your goal should generally be to survive. You're expected to follow the same rules as everyone else, so don't go self antagging without permission from the staff team, but you are able and capable of defending yourself from those who would attack you for no reason.") /datum/say_list/catslug/custom/spaceslug speak = list("Have any porl?", "What is that?", "What kind of ship is that?", "What are you doing?", "How did you get here?", "Don't take off your helmet.", "SPAAAAAACE!", "WAOW!", "Nice weather we're having, isn't it?") @@ -1080,7 +1080,7 @@ /mob/living/simple_mob/vore/alienanimals/catslug/suslug/Initialize() . = ..() - verbs += /mob/living/simple_mob/vore/alienanimals/catslug/suslug/proc/assussinate + add_verb(src, /mob/living/simple_mob/vore/alienanimals/catslug/suslug/proc/assussinate) update_icon() /mob/living/simple_mob/vore/alienanimals/catslug/suslug/update_icon() diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/stardog.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/stardog.dm index 05e52f6676e..1fa6963c687 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/stardog.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/stardog.dm @@ -69,8 +69,8 @@ /mob/living/simple_mob/vore/overmap/stardog/Login() . = ..() - verbs -= /mob/living/simple_mob/proc/set_name - verbs -= /mob/living/simple_mob/proc/set_desc + remove_verb(src, /mob/living/simple_mob/proc/set_name) + remove_verb(src, /mob/living/simple_mob/proc/set_desc) /mob/living/simple_mob/vore/overmap/stardog/attack_hand(mob/living/user) if(!(user.pickup_pref && user.pickup_active)) @@ -164,10 +164,10 @@ weather_areas -= anything return ..() -/mob/living/simple_mob/vore/overmap/stardog/Stat() - ..() - if(statpanel("Status")) - stat(null, "Affinity: [round(affinity)]") +/mob/living/simple_mob/vore/overmap/stardog/get_status_tab_items() + . = ..() + . += "" + . += "Affinity: [round(affinity)]" /mob/living/simple_mob/vore/overmap/stardog/start_pulling(var/atom/movable/AM) if(!istype(loc, /turf/unsimulated/map)) //Don't pull stuff on the overmap @@ -454,7 +454,7 @@ set category = "IC" set src in oview(1) - usr.visible_message("\The [usr] pets \the [src].", "You pet \the [src].", runemessage = "pet pat...") + usr.visible_message(span_notice("\The [usr] pets \the [src]."), span_notice("You pet \the [src]."), runemessage = "pet pat...") var/obj/effect/overmap/visitable/ship/simplemob/stardog/s = get_overmap_sector(z) if(s && istype(s, /obj/effect/overmap/visitable/ship/simplemob/stardog)) @@ -489,11 +489,11 @@ var/mob/living/simple_mob/vore/overmap/stardog/m = s.parent log_subtle(message,L) - message = span_emote_subtle("[L] [message]") - message = "(From the back of \the [m]) " + message + message = span_emote_subtle(span_bold("[L]") + " " + span_italics("[message]")) + message = span_bold("(From the back of \the [m]) ") + message message = encode_html_emphasis(message) - var/undisplayed_message = span_emote("[L] does something too subtle for you to see.") + var/undisplayed_message = span_emote(span_bold("[L]") + " " + span_italics("does something too subtle for you to see.")) var/list/vis = get_mobs_and_objs_in_view_fast(get_turf(m),1,2) var/list/vis_mobs = vis["mobs"] vis_mobs |= L @@ -1051,26 +1051,26 @@ if(!host) set_up() if(!host) - to_chat(user, "It doesn't respond...") + to_chat(user, span_warning("It doesn't respond...")) return control(user) /obj/structure/control_pod/proc/control(mob/living/user) if(!host.affinity) //take care of my dog - to_chat(user, "As you press your hand to \the [src], it resists your advance... A sense of longing ripples through your mind...") + to_chat(user, span_warning("As you press your hand to \the [src], it resists your advance... A sense of longing ripples through your mind...")) return if(controller) //busy - to_chat(user, "You can see \the [controller] inside! Tendrils of nerves seem to have attached themselves to \the [controller]! There's no room for you right now!") + to_chat(user, span_warning("You can see \the [controller] inside! Tendrils of nerves seem to have attached themselves to \the [controller]! There's no room for you right now!")) return - user.visible_message("\The [user] reaches out to touch \the [src]...","You reach out to touch \the [src]...") + user.visible_message(span_notice("\The [user] reaches out to touch \the [src]..."),span_notice("You reach out to touch \the [src]...")) if(!do_after(user, 10 SECONDS, src, exclusive = TRUE)) - user.visible_message("\The [user] pulls back from \the [src].","You pull back from \the [src].") + user.visible_message(span_warning("\The [user] pulls back from \the [src]."),span_warning("You pull back from \the [src].")) return if(controller) //got busy while you were waiting, get rekt - to_chat(user, "You can see \the [controller] inside! Tendrils of nerves seem to have attached themselves to \the [controller]! There's no room for you right now!") + to_chat(user, span_warning("You can see \the [controller] inside! Tendrils of nerves seem to have attached themselves to \the [controller]! There's no room for you right now!")) return controller = user - visible_message("\The [src] accepts \the [controller], submerging them beneath the surface of the flesh!") + visible_message(span_warning("\The [src] accepts \the [controller], submerging them beneath the surface of the flesh!")) user.stop_pulling() user.forceMove(src) host.ckey = user.ckey @@ -1080,10 +1080,10 @@ set_light(5, 0.75, "#f94bff") /obj/structure/control_pod/proc/eject() - to_chat(host, "You feel your control over \the [host] slip away from you!") + to_chat(host, span_warning("You feel your control over \the [host] slip away from you!")) controller.forceMove(get_turf(src)) controller.ckey = host.ckey - visible_message("\The [controller] is ejected from \the [src], tumbling free!") + visible_message(span_warning("\The [controller] is ejected from \the [src], tumbling free!")) log_admin("[controller.ckey] is no longer controlling [host], they have been returned to their body, [controller].") icon_state = "control_node0" plane = OBJ_PLANE @@ -1161,11 +1161,11 @@ return log_subtle(message,L) - message = span_emote_subtle("[L] [message]") - message = "(From within \the [s]) " + message + message = span_emote_subtle(span_bold("[L]") + " " + span_italics("[message]")) + message = span_bold("(From within \the [s]) ") + message message = encode_html_emphasis(message) - var/undisplayed_message = span_emote("[L] does something too subtle for you to see.") + var/undisplayed_message = span_emote(span_bold("[L]") + " " + span_italics("does something too subtle for you to see.")) var/list/vis = get_mobs_and_objs_in_view_fast(get_turf(s),1,2) var/list/vis_mobs = vis["mobs"] vis_mobs |= L @@ -1663,7 +1663,7 @@ else if(user.faction == faction) SwitchState() else if(user.a_intent == I_HELP) - visible_message("[user] knocks on \the [src].", "Someone knocks on \the [src].") + visible_message(span_warningplain("[user] knocks on \the [src]."), span_warningplain("Someone knocks on \the [src].")) playsound(src, knock_sound, 50, 0, 3) countdown -= 10 else @@ -1679,7 +1679,7 @@ else if(user.faction == faction) SwitchState() else if(user.a_intent == I_HELP) - visible_message("[user] knocks on \the [src].", "Someone knocks on \the [src].") + visible_message(span_warningplain("[user] knocks on \the [src]."), span_warningplain("Someone knocks on \the [src].")) playsound(src, knock_sound, 50, 0, 3) countdown -= 10 else diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/startreader.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/startreader.dm index b10077a46aa..7f63a58a1df 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/startreader.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/startreader.dm @@ -115,7 +115,7 @@ if(L.weakened) //Don't stun people while they're already stunned! That's SILLY! return if(prob(15)) - visible_message("\The [src] trips \the [L]!!") + visible_message(span_danger("\The [src] trips \the [L]!")) L.weakened += rand(1,10) /mob/living/simple_mob/vore/alienanimals/startreader/Life() diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm index 28c824dc51a..50704e1fa9c 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm @@ -130,7 +130,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have? has_langs = list(LANGUAGE_TEPPI) say_list_type = /datum/say_list/teppi - player_msg = "Teppi are large omnivorous quadrupeds. You have four toes on each paw, a long, strong tail, and are quite tough and powerful. You’re a lot more intimidating than you are actually harmful though. Your kind are ordinarily rather passive, only really rising to violence when someone does violence to you or others like you. You’re not stupid though, you can commiunicate with others of your kind, and form bonds with those who are kind to you, be they Teppi or otherwise.
    - - - - -
    While you may have access to galactic common, this is purely meant for making it so you can understand people in an OOC manner, for facilitating roleplay. You almost certainly should not be speaking to people or roleplaying as though you understand everything everyone says perfectly, but it's not unreasonable to be able to intuit intent and such through people's tones when they speak. Teppi are kind of smart, but they are animals, and should be roleplayed as such. ADDITIONALLY, you have the ability to produce offspring if you're well fed enough every once in a while, and the ability to disable this from happening to you. These verbs exist for to preserve the mechanical functionality of the mob you are playing. You should be aware of your surroundings when you use this verb, and NEVER use it to prefbreak or be disruptive. If in doubt, don't use it. Also, to note, AI Teppi will never initiate breeding with player Teppi." + player_msg = "Teppi are large omnivorous quadrupeds. You have four toes on each paw, a long, strong tail, and are quite tough and powerful. You’re a lot more intimidating than you are actually harmful though. Your kind are ordinarily rather passive, only really rising to violence when someone does violence to you or others like you. You’re not stupid though, you can commiunicate with others of your kind, and form bonds with those who are kind to you, be they Teppi or otherwise.
    - - - - -
    " + span_notice("While you may have access to galactic common, this is purely meant for making it so you can understand people in an OOC manner, for facilitating roleplay. You almost certainly should not be speaking to people or roleplaying as though you understand everything everyone says perfectly, but it's not unreasonable to be able to intuit intent and such through people's tones when they speak. Teppi are kind of smart, but they are animals, and should be roleplayed as such.") + " " + span_warning("ADDITIONALLY, you have the ability to produce offspring if you're well fed enough every once in a while, and the ability to disable this from happening to you. These verbs exist for to preserve the mechanical functionality of the mob you are playing. You should be aware of your surroundings when you use this verb, and NEVER use it to prefbreak or be disruptive. If in doubt, don't use it.") + " " + span_notice("Also, to note, AI Teppi will never initiate breeding with player Teppi.") loot_list = list(/obj/item/bone/horn = 100) internal_organs = list(\ /obj/item/organ/internal/brain,\ @@ -333,11 +333,11 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have? real_name = name if(!teppi_adult) nutrition = 0 - verbs += /mob/living/proc/ventcrawl - verbs += /mob/living/proc/hide + add_verb(src, /mob/living/proc/ventcrawl) + add_verb(src, /mob/living/proc/hide) else - verbs += /mob/living/simple_mob/vore/alienanimals/teppi/proc/produce_offspring - verbs += /mob/living/simple_mob/vore/alienanimals/teppi/proc/toggle_producing_offspring + add_verb(src, /mob/living/simple_mob/vore/alienanimals/teppi/proc/produce_offspring) + add_verb(src, /mob/living/simple_mob/vore/alienanimals/teppi/proc/toggle_producing_offspring) // teppi_id = rand(1,100000) @@ -548,7 +548,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have? qdel(O) playsound(src, 'sound/items/eatfood.ogg', 75, 1) if(!client && lets_eat(user) && prob(1)) - visible_message("\The [src] scromfs \the [user] along with the food!!") + visible_message(span_danger("\The [src] scromfs \the [user] along with the food!")) to_chat(user, span_notice("\The [src] leans in close, spreading its jaws in front of you. A hot, humid gust of breath blows over you as the weight of \the [src]'s presses you over, knocking you off of your feet as the warm gooey tough of jaws scromf over your figure, rapidly guzzling you away with the [O], leaving you to tumble down into the depths of its body...")) playsound(src, pick(bodyfall_sound), 75, 1) teppi_pounce(user) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm index 19c817dc67d..779e871695a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm @@ -57,8 +57,8 @@ /mob/living/simple_mob/animal/borer/Initialize() add_language("Cortical Link") - verbs += /mob/living/proc/ventcrawl - verbs += /mob/living/proc/hide + add_verb(src, /mob/living/proc/ventcrawl) + add_verb(src, /mob/living/proc/hide) true_name = "[pick("Primary","Secondary","Tertiary","Quaternary")] [rand(1000,9999)]" @@ -99,15 +99,9 @@ if(prob(host.brainloss/20)) host.say("*[pick(list("blink","blink_r","choke","aflap","drool","twitch","twitch_v","gasp"))]") -/mob/living/simple_mob/animal/borer/Stat() - ..() - if(client.statpanel == "Status") - statpanel("Status") - if(emergency_shuttle) - var/eta_status = emergency_shuttle.get_status_panel_eta() - if(eta_status) - stat(null, eta_status) - stat("Chemicals", chemicals) +/mob/living/simple_mob/animal/borer/get_status_tab_items() + . = ..() + . += "Chemicals: [chemicals]" /mob/living/simple_mob/animal/borer/proc/detatch() if(!host || !controlling) @@ -122,9 +116,9 @@ controlling = FALSE host.remove_language("Cortical Link") - host.verbs -= /mob/living/carbon/proc/release_control - host.verbs -= /mob/living/carbon/proc/punish_host - host.verbs -= /mob/living/carbon/proc/spawn_larvae + remove_verb(host, /mob/living/carbon/proc/release_control) + remove_verb(host, /mob/living/carbon/proc/punish_host) + remove_verb(host, /mob/living/carbon/proc/spawn_larvae) if(host_brain) // these are here so bans and multikey warnings are not triggered on the wrong people when ckey is changed. diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_captive.dm b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_captive.dm index 0053f4207dc..208a52ac378 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_captive.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_captive.dm @@ -55,9 +55,9 @@ to_chat(H, span_danger("With an immense exertion of will, you regain control of your body!")) to_chat(B.host, span_danger("You feel control of the host brain ripped from your grasp, and retract your probosci before the wild neural impulses can damage you.")) B.detatch() - verbs -= /mob/living/carbon/proc/release_control - verbs -= /mob/living/carbon/proc/punish_host - verbs -= /mob/living/carbon/proc/spawn_larvae + remove_verb(src, /mob/living/carbon/proc/release_control) + remove_verb(src, /mob/living/carbon/proc/punish_host) + remove_verb(src, /mob/living/carbon/proc/spawn_larvae) return diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_powers.dm b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_powers.dm index b31f8d0dcbe..160ddbdeff5 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_powers.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_powers.dm @@ -4,11 +4,11 @@ set desc = "Slither out of your host." if(!host) - to_chat(src, "You are not inside a host body.") + to_chat(src, span_warning("You are not inside a host body.")) return if(stat) - to_chat(src, "You cannot leave your host in your current state.") + to_chat(src, span_warning("You cannot leave your host in your current state.")) if(docile) to_chat(src, span_blue("You are feeling far too docile to do that.")) @@ -16,20 +16,20 @@ if(!host || !src) return - to_chat(src, "You begin disconnecting from [host]'s synapses and prodding at their internal ear canal.") + to_chat(src, span_warning("You begin disconnecting from [host]'s synapses and prodding at their internal ear canal.")) if(!host.stat) - to_chat(host, "An odd, uncomfortable pressure begins to build inside your skull, behind your ear...") + to_chat(host, span_warning("An odd, uncomfortable pressure begins to build inside your skull, behind your ear...")) spawn(100) if(!host || !src) return if(src.stat) - to_chat(src, "You cannot release your host in your current state.") + to_chat(src, span_warning("You cannot release your host in your current state.")) return - to_chat(src, "You wiggle out of [host]'s ear and plop to the ground.") + to_chat(src, span_warning("You wiggle out of [host]'s ear and plop to the ground.")) if(host.mind) if(!host.stat) to_chat(host, span_danger("Something slimy wiggles out of your ear and plops to the ground!")) @@ -44,11 +44,11 @@ set desc = "Infest a suitable humanoid host." if(host) - to_chat(src, "You are already within a host.") + to_chat(src, span_warning("You are already within a host.")) return if(stat) - to_chat(src, "You cannot infest a target in your current state.") + to_chat(src, span_warning("You cannot infest a target in your current state.")) return var/list/choices = list() @@ -57,7 +57,7 @@ choices += C if(!choices.len) - to_chat(src, "There are no viable hosts within range...") + to_chat(src, span_warning("There are no viable hosts within range...")) return var/mob/living/carbon/M = tgui_input_list(src, "Who do you wish to infest?", "Target Choice", choices) @@ -67,7 +67,7 @@ if(!(src.Adjacent(M))) return if(M.has_brain_worms()) - to_chat(src, "You cannot infest someone who is already infested!") + to_chat(src, span_warning("You cannot infest someone who is already infested!")) return if(istype(M,/mob/living/carbon/human)) @@ -75,31 +75,31 @@ var/obj/item/organ/external/E = H.organs_by_name[BP_HEAD] if(!E || E.is_stump()) - to_chat(src, "\The [H] does not have a head!") + to_chat(src, span_warning("\The [H] does not have a head!")) if(!H.should_have_organ("brain")) - to_chat(src, "\The [H] does not seem to have an ear canal to breach.") + to_chat(src, span_warning("\The [H] does not seem to have an ear canal to breach.")) return if(H.check_head_coverage()) - to_chat(src, "You cannot get through that host's protective gear.") + to_chat(src, span_warning("You cannot get through that host's protective gear.")) return to_chat(M, "Something slimy begins probing at the opening of your ear canal...") - to_chat(src, "You slither up [M] and begin probing at their ear canal...") + to_chat(src, span_warning("You slither up [M] and begin probing at their ear canal...")) if(!do_after(src,30)) - to_chat(src, "As [M] moves away, you are dislodged and fall to the ground.") + to_chat(src, span_warning("As [M] moves away, you are dislodged and fall to the ground.")) return if(!M || !src) return if(src.stat) - to_chat(src, "You cannot infest a target in your current state.") + to_chat(src, span_warning("You cannot infest a target in your current state.")) return if(M in view(1, src)) - to_chat(src, "You wiggle into [M]'s ear.") + to_chat(src, span_warning("You wiggle into [M]'s ear.")) if(!M.stat) to_chat(M, "Something disgusting and slimy wiggles into your ear!") @@ -122,7 +122,7 @@ return else - to_chat(src, "They are no longer in range!") + to_chat(src, span_warning("They are no longer in range!")) return /* @@ -132,22 +132,22 @@ set desc = "Take permanent control of a dead host." if(!host) - to_chat(src, "You are not inside a host body.") + to_chat(src, span_warning("You are not inside a host body.")) return if(host.stat != 2) - to_chat(src, "Your host is still alive.") + to_chat(src, span_warning("Your host is still alive.")) return if(stat) - to_chat(src, "You cannot do that in your current state.") + to_chat(src, span_warning("You cannot do that in your current state.")) if(docile) - to_chat(src, "You are feeling far too docile to do that.") + to_chat(src, span_warning(span_blue("You are feeling far too docile to do that."))) return - to_chat(src, "It only takes a few moments to render the dead host brain down into a nutrient-rich slurry...") + to_chat(src, span_danger("It only takes a few moments to render the dead host brain down into a nutrient-rich slurry...")) replace_brain() */ @@ -157,20 +157,20 @@ var/mob/living/carbon/human/H = host if(!istype(host)) - to_chat(src, "This host does not have a suitable brain.") + to_chat(src, span_warning("This host does not have a suitable brain.")) return - to_chat(src, "You settle into the empty brainpan and begin to expand, fusing inextricably with the dead flesh of [H].") + to_chat(src, span_danger("You settle into the empty brainpan and begin to expand, fusing inextricably with the dead flesh of [H].")) H.add_language("Cortical Link") if(host.stat == 2) - H.verbs |= /mob/living/carbon/human/proc/jumpstart + add_verb(H, /mob/living/carbon/human/proc/jumpstart) - H.verbs |= /mob/living/carbon/human/proc/psychic_whisper - H.verbs |= /mob/living/carbon/human/proc/tackle + add_verb(H, /mob/living/carbon/human/proc/psychic_whisper) + add_verb(H, /mob/living/carbon/human/proc/tackle) if(antag) - H.verbs |= /mob/living/carbon/proc/spawn_larvae + add_verb(H, /mob/living/carbon/proc/spawn_larvae) if(H.client) H.ghostize(0) @@ -205,25 +205,25 @@ set desc = "Push some chemicals into your host's bloodstream." if(!host) - to_chat(src, "You are not inside a host body.") + to_chat(src, span_warning("You are not inside a host body.")) return if(stat) - to_chat(src, "You cannot secrete chemicals in your current state.") + to_chat(src, span_warning("You cannot secrete chemicals in your current state.")) if(docile) - to_chat(src, span_blue("You are feeling far too docile to do that.")) + to_chat(src, span_warning(span_blue("You are feeling far too docile to do that."))) return if(chemicals < 50) - to_chat(src, "You don't have enough chemicals!") + to_chat(src, span_warning("You don't have enough chemicals!")) var/chem = tgui_input_list(usr, "Select a chemical to secrete.", "Chemicals", list("alkysine","bicaridine","hyperzine","tramadol")) if(!chem || chemicals < 50 || !host || controlling || !src || stat) //Sanity check. return - to_chat(src, span_red("You squirt a measure of [chem] from your reservoirs into [host]'s bloodstream.")) + to_chat(src, span_bolddanger("You squirt a measure of [chem] from your reservoirs into [host]'s bloodstream.")) host.reagents.add_reagent(chem, 10) chemicals -= 50 @@ -233,15 +233,15 @@ set desc = "Freeze the limbs of a potential host with supernatural fear." if(world.time - used_dominate < 150) - to_chat(src, "You cannot use that ability again so soon.") + to_chat(src, span_warning("You cannot use that ability again so soon.")) return if(host) - to_chat(src, "You cannot do that from within a host body.") + to_chat(src, span_warning("You cannot do that from within a host body.")) return if(src.stat) - to_chat(src, "You cannot do that in your current state.") + to_chat(src, span_warning("You cannot do that in your current state.")) return var/list/choices = list() @@ -250,7 +250,7 @@ choices += C if(world.time - used_dominate < 150) - to_chat(src, "You cannot use that ability again so soon.") + to_chat(src, span_warning("You cannot use that ability again so soon.")) return var/mob/living/carbon/M = tgui_input_list(src, "Who do you wish to dominate?", "Target Choice", choices) @@ -258,7 +258,7 @@ if(!M || !src) return if(M.has_brain_worms()) - to_chat(src, "You cannot infest someone who is already infested!") + to_chat(src, span_warning("You cannot infest someone who is already infested!")) return to_chat(src, span_red("You focus your psychic lance on [M] and freeze their limbs with a wave of terrible dread.")) @@ -273,18 +273,18 @@ set desc = "Fully connect to the brain of your host." if(!host) - to_chat(src, "You are not inside a host body.") + to_chat(src, span_warning("You are not inside a host body.")) return if(src.stat) - to_chat(src, "You cannot do that in your current state.") + to_chat(src, span_warning("You cannot do that in your current state.")) return if(docile) to_chat(src, span_blue("You are feeling far too docile to do that.")) return - to_chat(src, "You begin delicately adjusting your connection to the host brain...") + to_chat(src, span_warning("You begin delicately adjusting your connection to the host brain...")) spawn(100+(host.brainloss*5)) @@ -292,8 +292,8 @@ return else - to_chat(src, span_red("You plunge your probosci deep into the cortex of the host brain, interfacing directly with their nervous system.")) - to_chat(host, span_red("You feel a strange shifting sensation behind your eyes as an alien consciousness displaces yours.")) + to_chat(src, span_bolddanger("You plunge your probosci deep into the cortex of the host brain, interfacing directly with their nervous system.")) + to_chat(host, span_bolddanger("You feel a strange shifting sensation behind your eyes as an alien consciousness displaces yours.")) host.add_language("Cortical Link") // host -> brain @@ -331,10 +331,10 @@ controlling = 1 - host.verbs += /mob/living/carbon/proc/release_control - host.verbs += /mob/living/carbon/proc/punish_host + add_verb(host, /mob/living/carbon/proc/release_control) + add_verb(host, /mob/living/carbon/proc/punish_host) if(antag) - host.verbs += /mob/living/carbon/proc/spawn_larvae + add_verb(host, /mob/living/carbon/proc/spawn_larvae) return @@ -347,7 +347,7 @@ to_chat(usr, "Your host is already alive.") return - verbs -= /mob/living/carbon/human/proc/jumpstart + remove_verb(src, /mob/living/carbon/human/proc/jumpstart) visible_message(span_warning("With a hideous, rattling moan, [src] shudders back to life!")) rejuvenate() diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm index 844cd29559f..b3bb907c9c7 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm @@ -47,8 +47,8 @@ /mob/living/simple_mob/animal/passive/mouse/New() ..() - verbs += /mob/living/proc/ventcrawl - verbs += /mob/living/proc/hide + add_verb(src, /mob/living/proc/ventcrawl) + add_verb(src, /mob/living/proc/hide) if(name == initial(name)) name = "[name] ([rand(1, 1000)])" diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/possum.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/possum.dm index f3696edd333..614ec0d87fe 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/possum.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/possum.dm @@ -159,11 +159,11 @@ var/datum/ai_holder/simple_mob/passive/possum/poss_ai = ai_holder if(!client && istype(poss_ai)) if(!poss_ai.is_angry) - visible_message("\The [src] hisses!") + visible_message(span_infoplain(span_bold("\The [src]") + " hisses!")) poss_ai.is_angry = TRUE poss_ai.be_angery_until = world.time + rand(30 SECONDS, 1 MINUTE) else - visible_message("\The [src] dies!") + visible_message(span_infoplain(span_bold("\The [src]") + " dies!")) resting = TRUE poss_ai.play_dead_until = world.time + rand(1 MINUTE, 2 MINUTES) update_icon() @@ -185,8 +185,8 @@ /mob/living/simple_mob/animal/passive/opossum/Initialize() . = ..() - verbs += /mob/living/proc/ventcrawl - verbs += /mob/living/proc/hide + add_verb(src, /mob/living/proc/ventcrawl) + add_verb(src, /mob/living/proc/hide) /mob/living/simple_mob/animal/passive/opossum/poppy name = "Poppy the Safety Possum" diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/frostfly.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/frostfly.dm index 0a5b21b0da9..9e9f4782d6e 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/frostfly.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/frostfly.dm @@ -85,8 +85,8 @@ /mob/living/simple_mob/animal/sif/frostfly/Initialize() . = ..() smoke_special = new - verbs += /mob/living/proc/ventcrawl - verbs += /mob/living/proc/hide + add_verb(src, /mob/living/proc/ventcrawl) + add_verb(src, /mob/living/proc/hide) /datum/say_list/frostfly speak = list("Zzzz.", "Kss.", "Zzt?") @@ -110,15 +110,9 @@ if(energy < max_energy) energy++ -/mob/living/simple_mob/animal/sif/frostfly/Stat() - ..() - if(client.statpanel == "Status") - statpanel("Status") - if(emergency_shuttle) - var/eta_status = emergency_shuttle.get_status_panel_eta() - if(eta_status) - stat(null, eta_status) - stat("Energy", energy) +/mob/living/simple_mob/animal/sif/frostfly/get_status_tab_items() + . = ..() + . += "Energy: [energy]" /mob/living/simple_mob/animal/sif/frostfly/should_special_attack(atom/A) if(energy >= 20) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka.dm index cf1ec313cdc..e0d523d3fac 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka.dm @@ -3,8 +3,8 @@ desc = "Your wounds have been salved with Sivian sap." mob_overlay_state = "cyan_sparkles" stacks = MODIFIER_STACK_FORBID - on_created_text = "The glowing sap seethes and bubbles in your wounds, tingling and stinging." - on_expired_text = "The last of the sap in your wounds fizzles away." + on_created_text = span_notice("The glowing sap seethes and bubbles in your wounds, tingling and stinging.") + on_expired_text = span_notice("The last of the sap in your wounds fizzles away.") /datum/modifier/sifsap_salve/tick() @@ -120,8 +120,8 @@ Field studies suggest analytical abilities on par with some species of cepholapo name = "grafadreka" desc = "A large, sleek snow drake with heavy claws, powerful jaws and many pale spines along its body." player_msg = "You are a large Sivian pack predator in symbiosis with the local bioluminescent bacteria. You can eat glowing \ - tree fruit to fuel your ranged spitting attack and poisonous bite (on harm intent), as well as healing saliva \ - (on help intent).
    There are humans moving through your territory; whether you help them get home safely, or treat them as a snack, \ + tree fruit to fuel your " + span_bold("ranged spitting attack") + " and " + span_bold("poisonous bite") + " (on " + span_danger("harm intent") + "), as well as " + span_bold("healing saliva") + "\ + (on " + span_bold(span_green("help intent")) + ").
    There are humans moving through your territory; whether you help them get home safely, or treat them as a snack, \ is up to you." color = "#608894" icon = 'icons/mob/drake_adult.dmi' @@ -526,11 +526,10 @@ var/global/list/wounds_being_tended_by_drakes = list() else remove_modifiers_of_type(/datum/modifier/ace) -/mob/living/simple_mob/animal/sif/grafadreka/Stat() +/mob/living/simple_mob/animal/sif/grafadreka/get_status_tab_items() . = ..() - if(statpanel("Status")) - stat("Nutrition:", "[nutrition]/[max_nutrition]") - stat("Stored sap:", "[stored_sap]/[max_stored_sap]") + . += "Nutrition: [nutrition]/[max_nutrition]" + . += "Stored sap: [stored_sap]/[max_stored_sap]" /mob/living/simple_mob/animal/sif/grafadreka/proc/can_bite(var/mob/living/M) return istype(M) && (M.lying || M.confused || M.incapacitated()) @@ -571,12 +570,12 @@ var/global/list/wounds_being_tended_by_drakes = list() to_chat(src, span_warning("You aren't the pack leader! Sit down!")) return - audible_message("\The [src] barks loudly and rattles its neck spines.") + audible_message(span_infoplain(span_bold("\The [src]") + " barks loudly and rattles its neck spines.")) for(var/mob/living/simple_mob/animal/sif/grafadreka/drake in hearers(world.view * 3, src)) if(drake == src || drake.faction != faction) continue if(drake.client) - to_chat(drake, span_notice("The pack leader wishes for you to follow them.")) + to_chat(drake, span_boldnotice("The pack leader wishes for you to follow them.")) else if(drake.ai_holder) drake.ai_holder.set_follow(src) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/hooligan_crab.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/hooligan_crab.dm index c603d6b65bc..b2a5ab838d9 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/hooligan_crab.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/hooligan_crab.dm @@ -119,5 +119,5 @@ if(prob(10)) for(var/mob/living/L in hearers(holder)) if(!istype(L, holder)) // Don't follow other hooligan crabs. - holder.visible_message("\The [holder] starts to follow \the [L].") + holder.visible_message(span_infoplain(span_bold("\The [holder]") + " starts to follow \the [L].")) set_follow(L, rand(20 SECONDS, 40 SECONDS)) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/leech.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/leech.dm index 73403e6c763..5e455483938 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/leech.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/leech.dm @@ -119,18 +119,12 @@ /mob/living/simple_mob/animal/sif/leech/Initialize() . = ..() - verbs += /mob/living/proc/ventcrawl - verbs += /mob/living/proc/hide + add_verb(src, /mob/living/proc/ventcrawl) + add_verb(src, /mob/living/proc/hide) -/mob/living/simple_mob/animal/sif/leech/Stat() - ..() - if(client.statpanel == "Status") - statpanel("Status") - if(emergency_shuttle) - var/eta_status = emergency_shuttle.get_status_panel_eta() - if(eta_status) - stat(null, eta_status) - stat("Chemicals", chemicals) +/mob/living/simple_mob/animal/sif/leech/get_status_tab_items() + . = ..() + . += "Chemicals: [chemicals]" /mob/living/simple_mob/animal/sif/leech/do_special_attack(atom/A) . = TRUE diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/moth.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/moth.dm index 12d8d9e0fe0..5c59c2b7b14 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/moth.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/moth.dm @@ -119,8 +119,8 @@ /mob/living/simple_mob/animal/sif/tymisian/Initialize() . = ..() smoke_spore = new - verbs += /mob/living/proc/ventcrawl - verbs += /mob/living/proc/hide + add_verb(src, /mob/living/proc/ventcrawl) + add_verb(src, /mob/living/proc/hide) /mob/living/simple_mob/animal/sif/tymisian/handle_special() ..() @@ -128,15 +128,9 @@ if(energy < max_energy) energy++ -/mob/living/simple_mob/animal/sif/tymisian/Stat() - ..() - if(client.statpanel == "Status") - statpanel("Status") - if(emergency_shuttle) - var/eta_status = emergency_shuttle.get_status_panel_eta() - if(eta_status) - stat(null, eta_status) - stat("Energy", energy) +/mob/living/simple_mob/animal/sif/tymisian/get_status_tab_items() + . = ..() + . += "Energy: [energy]" /mob/living/simple_mob/animal/sif/tymisian/should_special_attack(atom/A) if(energy >= 20) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm index 02baeeda894..0798f487d7d 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm @@ -153,8 +153,8 @@ /mob/living/simple_mob/animal/sif/sakimm/Initialize() . = ..() - verbs += /mob/living/proc/ventcrawl - verbs += /mob/living/proc/hide + add_verb(src, /mob/living/proc/ventcrawl) + add_verb(src, /mob/living/proc/hide) if(randomize_size) adjust_scale(rand(8, 11) / 10) @@ -182,7 +182,7 @@ if(holder.get_active_hand() && istype(holder.get_active_hand(), /obj/item/clothing/head) && !S.hat) var/obj/item/I = holder.get_active_hand() S.take_hat(S) - holder.visible_message("\The [holder] wears \the [I]") + holder.visible_message(span_infoplain(span_bold("\The [holder]") + " wears \the [I]")) /mob/living/simple_mob/animal/sif/sakimm/intelligent desc = "What appears to be an oversized rodent with hands. This one has a curious look in its eyes." @@ -328,7 +328,7 @@ if(istype(holder) && istype(holder.get_active_hand(), /obj/item/clothing/head) && !S.hat) var/obj/item/I = holder.get_active_hand() S.take_hat(S) - holder.visible_message("\The [holder] wears \the [I]") + holder.visible_message(span_bold("\The [holder]") + "wears \the [I]") carrying_item = TRUE if(istype(holder) && S.hat) // Do we have a hat? Hats are loot. diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm index 94cde54931c..115e0cb4101 100644 --- a/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm +++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm @@ -135,7 +135,7 @@ /mob/living/simple_mob/humanoid/merc/melee/sword/bullet_act(var/obj/item/projectile/Proj) if(!Proj) return if(prob(35)) - visible_message(span_red("[src] blocks [Proj] with its shield!")) + visible_message(span_bolddanger("[src] blocks [Proj] with its shield!")) if(Proj.firer) ai_holder.react_to_attack(Proj.firer) return @@ -321,7 +321,7 @@ try_reload() return FALSE - visible_message(span_danger("\The [src] fires at \the [orig_targ]!")) + visible_message(span_danger(span_bold("\The [src]") + " fires at \the [orig_targ]!")) shoot(A) if(casingtype) new casingtype(loc) diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/mining_drone.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/mining_drone.dm index d986c17a29d..d4d619fbb83 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/mining_drone.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/mining_drone.dm @@ -160,7 +160,7 @@ my_storage.rangedload(T, src) if(my_storage.contents.len >= my_storage.max_storage_space) - visible_message("\The [src] emits a shrill beep, indicating its storage is full.") + visible_message(span_infoplain(span_bold("\The [src]") + " emits a shrill beep, indicating its storage is full.")) var/obj/structure/ore_box/OB = locate() in view(2, src) diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm index af513e23c03..d62100fd764 100644 --- a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm +++ b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm @@ -126,7 +126,7 @@ var/repair_upper_bound = A.melee_damage_upper * -1 adjustBruteLoss(rand(repair_lower_bound, repair_upper_bound)) adjustFireLoss(rand(repair_lower_bound, repair_upper_bound)) - user.visible_message("\The [user] mends some of \the [src]'s wounds.") + user.visible_message(span_infoplain(span_bold("\The [user]") + " mends some of \the [src]'s wounds.")) else to_chat(user, span_notice("\The [src] is undamaged.")) return @@ -139,7 +139,7 @@ if (health >= max/2) . += span_warning("It looks slightly dented.") else - . += span_warning("It looks severely dented!") + . += span_boldwarning("It looks severely dented!") //Constructs levitate, can fall from a shuttle with no harm, and are piloted by either damned spirits or some otherworldly entity. Let 'em float in space. /mob/living/simple_mob/construct/Process_Spacemove() diff --git a/code/modules/mob/living/simple_mob/subtypes/slime/slime.dm b/code/modules/mob/living/simple_mob/subtypes/slime/slime.dm index 383c25a3951..bc61a5f2765 100644 --- a/code/modules/mob/living/simple_mob/subtypes/slime/slime.dm +++ b/code/modules/mob/living/simple_mob/subtypes/slime/slime.dm @@ -91,7 +91,7 @@ var/list/_slime_default_emotes = list( emote_hear = list("squishes") /mob/living/simple_mob/slime/Initialize() - verbs += /mob/living/proc/ventcrawl + add_verb(src, /mob/living/proc/ventcrawl) update_mood() glow_color = color handle_light() @@ -249,7 +249,7 @@ var/list/_slime_default_emotes = list( /mob/living/simple_mob/slime/proc/squish() playsound(src, 'sound/effects/slime_squish.ogg', 50, 0) - visible_message("\The [src] squishes!") + visible_message(span_infoplain(span_bold("\The [src]") + " squishes!")) /decl/mob_organ_names/slime hit_zones = list("cytoplasmic membrane") diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm b/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm index b22b06e29f5..d3fc35c3c37 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm @@ -240,15 +240,15 @@ I think I covered everything. . = ..() if(!riding_datum) riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins - verbs |= /mob/living/simple_mob/vore/bigdragon/proc/set_style - verbs |= /mob/living/simple_mob/vore/bigdragon/proc/toggle_glow - verbs |= /mob/living/simple_mob/vore/bigdragon/proc/sprite_toggle - verbs |= /mob/living/simple_mob/vore/bigdragon/proc/flame_toggle - verbs |= /mob/living/simple_mob/vore/bigdragon/proc/special_toggle - //verbs |= /mob/living/simple_mob/vore/bigdragon/proc/set_name //Implemented upstream - //verbs |= /mob/living/simple_mob/vore/bigdragon/proc/set_desc //Implemented upstream + add_verb(src, /mob/living/simple_mob/proc/animal_mount) + add_verb(src, /mob/living/proc/toggle_rider_reins) + add_verb(src, /mob/living/simple_mob/vore/bigdragon/proc/set_style) + add_verb(src, /mob/living/simple_mob/vore/bigdragon/proc/toggle_glow) + add_verb(src, /mob/living/simple_mob/vore/bigdragon/proc/sprite_toggle) + add_verb(src, /mob/living/simple_mob/vore/bigdragon/proc/flame_toggle) + add_verb(src, /mob/living/simple_mob/vore/bigdragon/proc/special_toggle) + //add_verb(src, /mob/living/simple_mob/vore/bigdragon/proc/set_name) //Implemented upstream + //add_verb(src, /mob/living/simple_mob/vore/bigdragon/proc/set_desc) //Implemented upstream faction = FACTION_NEUTRAL /mob/living/simple_mob/vore/bigdragon/Initialize() diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/corrupt_hounds.dm b/code/modules/mob/living/simple_mob/subtypes/vore/corrupt_hounds.dm index 4326d048dde..abd7cdf105d 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/corrupt_hounds.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/corrupt_hounds.dm @@ -113,8 +113,8 @@ . = ..() if(!riding_datum) riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins + add_verb(src, /mob/living/simple_mob/proc/animal_mount) + add_verb(src, /mob/living/proc/toggle_rider_reins) movement_cooldown = 0 /mob/living/simple_mob/vore/aggressive/corrupthound/MouseDrop_T(mob/living/M, mob/living/user) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/cryptdrake.dm b/code/modules/mob/living/simple_mob/subtypes/vore/cryptdrake.dm index bad9f2dde35..0e931f98325 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/cryptdrake.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/cryptdrake.dm @@ -64,8 +64,8 @@ . = ..() if(!riding_datum) riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins + add_verb(src, /mob/living/simple_mob/proc/animal_mount) + add_verb(src, /mob/living/proc/toggle_rider_reins) movement_cooldown = -1 /mob/living/simple_mob/vore/cryptdrake/init_vore() diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/deathclaw.dm b/code/modules/mob/living/simple_mob/subtypes/vore/deathclaw.dm index 133e29d632d..dbb629cbdde 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/deathclaw.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/deathclaw.dm @@ -74,8 +74,8 @@ . = ..() if(!riding_datum) riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins + add_verb(src, /mob/living/simple_mob/proc/animal_mount) + add_verb(src, /mob/living/proc/toggle_rider_reins) movement_cooldown = 0 /mob/living/simple_mob/vore/aggressive/deathclaw/MouseDrop_T(mob/living/M, mob/living/user) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/devil.dm b/code/modules/mob/living/simple_mob/subtypes/vore/devil.dm index 26ebf4dc848..1d64e27ef0a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/devil.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/devil.dm @@ -71,9 +71,9 @@ vore_pounce_cooldown = world.time + 1 SECONDS // don't attempt another pounce for a while if(prob(successrate)) // pounce success! M.Weaken(5) - M.visible_message("\The [src] pounces on \the [M]!!") + M.visible_message(span_danger("\The [src] pounces on \the [M]!")) else // pounce misses! - M.visible_message("\The [src] attempts to pounce \the [M] but misses!!") + M.visible_message(span_danger("\The [src] attempts to pounce \the [M] but misses!")) playsound(src, 'sound/weapons/punchmiss.ogg', 25, 1, -1) if(will_eat(M) && (!M.canmove || vore_standing_too)) //if they're edible then eat them too diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/dominated_brain.dm b/code/modules/mob/living/simple_mob/subtypes/vore/dominated_brain.dm index fed12356a1e..79f2432c44a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/dominated_brain.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/dominated_brain.dm @@ -32,7 +32,7 @@ return . = ..() lets_register_our_signals() - verbs |= /mob/living/dominated_brain/proc/resist_control + add_verb(src, /mob/living/dominated_brain/proc/resist_control) /mob/living/dominated_brain/Life() . = ..() @@ -114,7 +114,7 @@ prey_goes_here.ooc_notes = prey_ooc_notes prey_goes_here.ooc_notes_likes = prey_ooc_likes prey_goes_here.ooc_notes_dislikes = prey_ooc_dislikes - prey_goes_here.verbs |= /mob/living/dominated_brain/proc/cease_this_foolishness + add_verb(prey_goes_here, /mob/living/dominated_brain/proc/cease_this_foolishness) else //The prey body does not exist, let's put them in the back seat instead! @@ -134,7 +134,7 @@ /////////////////// // Handle Pred - pred_body.verbs -= /mob/proc/release_predator + remove_verb(pred_body, /mob/proc/release_predator) //Now actually put the people in the mobs prey_goes_here.ckey = src.prey_ckey @@ -166,7 +166,7 @@ langlist -= languages for(var/datum/language/L in langlist) if(L.flags & HIVEMIND) - verbs |= /mob/proc/adjust_hive_range + add_verb(src, /mob/proc/adjust_hive_range) temp_languages |= langlist languages |= langlist @@ -259,7 +259,7 @@ pred.ooc_notes_likes = pred_brain.prey_ooc_likes pred.ooc_notes_dislikes = pred_brain.prey_ooc_dislikes - pred.verbs |= /mob/proc/release_predator + add_verb(pred, /mob/proc/release_predator) //Now actually put the people in the mobs pred_brain.ckey = pred_brain.pred_ckey @@ -286,7 +286,7 @@ else continue to_chat(src, span_danger("You haven't been taken over, and shouldn't have this verb. I'll clean that up for you. Report this on the github, it is a bug.")) - verbs -= /mob/proc/release_predator + remove_verb(src, /mob/proc/release_predator) /mob/living/dominated_brain/proc/resist_control() set category = "Abilities" @@ -368,7 +368,7 @@ db.ooc_notes_dislikes = M.ooc_notes_dislikes db.prey_ooc_likes = M.ooc_notes_likes db.prey_ooc_dislikes = M.ooc_notes_dislikes - db.verbs |= /mob/living/dominated_brain/proc/cease_this_foolishness + add_verb(db, /mob/living/dominated_brain/proc/cease_this_foolishness) absorb_langs() @@ -402,7 +402,7 @@ to_chat(src, span_warning("You can sense your body... but it is not contained within [pred_body]... You cannot return to it at this time.")) else to_chat(src, span_warning("Your body seems to no longer exist, so, you cannot return to it.")) - verbs -= /mob/living/dominated_brain/proc/cease_this_foolishness + remove_verb(src, /mob/living/dominated_brain/proc/cease_this_foolishness) /mob/living/proc/lend_prey_control() set category = "Abilities" @@ -489,7 +489,7 @@ pred.ooc_notes_likes = pred_brain.prey_ooc_likes pred.ooc_notes_dislikes = pred_brain.prey_ooc_dislikes - pred.verbs |= /mob/proc/release_predator + add_verb(pred, /mob/proc/release_predator) //Now actually put the people in the mobs pred_brain.ckey = pred_brain.pred_ckey diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/dragon.dm b/code/modules/mob/living/simple_mob/subtypes/vore/dragon.dm index aac50f5c003..9915d171b0f 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/dragon.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/dragon.dm @@ -105,8 +105,8 @@ . = ..() if(!riding_datum) riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins + add_verb(src, /mob/living/simple_mob/proc/animal_mount) + add_verb(src, /mob/living/proc/toggle_rider_reins) movement_cooldown = 0 /mob/living/simple_mob/vore/aggressive/dragon/MouseDrop_T(mob/living/M, mob/living/user) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf.dm b/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf.dm index 3251532c59f..1d0e18733cf 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf.dm @@ -93,8 +93,8 @@ . = ..() if(!riding_datum) riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins + add_verb(src, /mob/living/simple_mob/proc/animal_mount) + add_verb(src, /mob/living/proc/toggle_rider_reins) movement_cooldown = -1.5 /mob/living/simple_mob/vore/greatwolf/MouseDrop_T(mob/living/M, mob/living/user) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/hippo.dm b/code/modules/mob/living/simple_mob/subtypes/vore/hippo.dm index 412a7ec8e50..725d48590f1 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/hippo.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/hippo.dm @@ -70,8 +70,8 @@ . = ..() if(!riding_datum) riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins + add_verb(src, /mob/living/simple_mob/proc/animal_mount) + add_verb(src, /mob/living/proc/toggle_rider_reins) movement_cooldown = 0 /mob/living/simple_mob/vore/hippo/MouseDrop_T(mob/living/M, mob/living/user) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/horse.dm b/code/modules/mob/living/simple_mob/subtypes/vore/horse.dm index 51511ebcc84..4432da92be7 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/horse.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/horse.dm @@ -72,8 +72,8 @@ . = ..() if(!riding_datum) riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins + add_verb(src, /mob/living/simple_mob/proc/animal_mount) + add_verb(src, /mob/living/proc/toggle_rider_reins) movement_cooldown = -2 /mob/living/simple_mob/vore/horse/MouseDrop_T(mob/living/M, mob/living/user) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/leopardmander.dm b/code/modules/mob/living/simple_mob/subtypes/vore/leopardmander.dm index 5a808e65ec3..5b35207b545 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/leopardmander.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/leopardmander.dm @@ -66,8 +66,8 @@ . = ..() if(!riding_datum) riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins + add_verb(src, /mob/living/simple_mob/proc/animal_mount) + add_verb(src, /mob/living/proc/toggle_rider_reins) movement_cooldown = -1 /mob/living/simple_mob/vore/leopardmander/Initialize() @@ -141,7 +141,7 @@ /mob/living/simple_mob/vore/leopardmander/exotic/New() ..() - verbs |= /mob/living/simple_mob/vore/leopardmander/exotic/proc/toggle_glow + add_verb(src, /mob/living/simple_mob/vore/leopardmander/exotic/proc/toggle_glow) /mob/living/simple_mob/vore/leopardmander/exotic/init_vore() . = ..() diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/meowl.dm b/code/modules/mob/living/simple_mob/subtypes/vore/meowl.dm index f4c499e798f..5fb2a327ad8 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/meowl.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/meowl.dm @@ -115,9 +115,9 @@ vore_pounce_cooldown = world.time + 1 SECONDS // don't attempt another pounce for a while if(prob(max(successrate,33))) // pounce success! M.Weaken(5) - M.visible_message("\The [src] pounces on \the [M]!!") + M.visible_message(span_danger("\The [src] pounces on \the [M]!")) else // pounce misses! - M.visible_message("\The [src] attempts to pounce \the [M] but misses!!") + M.visible_message(span_danger("\The [src] attempts to pounce \the [M] but misses!")) playsound(src, 'sound/weapons/punchmiss.ogg', 25, 1, -1) if(will_eat(M) && (!M.canmove || vore_standing_too)) //if they're edible then eat them too @@ -255,8 +255,8 @@ var/distance = get_dist(holder, target) if(distance <= 1) var/talkies = pick(friend_text_close) - holder.visible_message("\The [holder] [talkies]") + holder.visible_message(span_infoplain(span_bold("\The [holder]") + " [talkies]")) else var/talkies = pick(friend_text_far) - holder.visible_message("\The [holder] [talkies]") + holder.visible_message(span_infoplain(span_bold("\The [holder]") + " [talkies]")) last_friend_time = world.time diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/mimic.dm b/code/modules/mob/living/simple_mob/subtypes/vore/mimic.dm index e583765ac09..19eab2768bf 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/mimic.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/mimic.dm @@ -31,7 +31,7 @@ mimic_active = FALSE if(prob(mimic_chance)) var/mob/living/simple_mob/vore/aggressive/mimic/new_mimic = new(loc, src) - visible_message(span_red("[new_mimic] suddenly growls as it turns out to be a mimic!")) + visible_message(span_bolddanger("[new_mimic] suddenly growls as it turns out to be a mimic!")) forceMove(new_mimic) new_mimic.real_crate = src new_mimic.name = name @@ -52,7 +52,7 @@ /obj/structure/closet/crate/mimic/damage(var/damage) if(contents.len) - visible_message(span_red("[src] makes out a crunchy noise as its contents are destroyed!")) + visible_message(span_bolddanger("[src] makes out a crunchy noise as its contents are destroyed!")) for(var/obj/O in src.contents) qdel(O) ..() diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/mobs_monsters/clowns/bus.dm b/code/modules/mob/living/simple_mob/subtypes/vore/mobs_monsters/clowns/bus.dm index 75782e987a2..ad73462e296 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/mobs_monsters/clowns/bus.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/mobs_monsters/clowns/bus.dm @@ -4,4 +4,4 @@ /mob/living/simple_mob/clowns/big/c_shift/New() ..() - verbs += /mob/living/simple_mob/clowns/big/c_shift/proc/phase_shift + add_verb(src, /mob/living/simple_mob/clowns/big/c_shift/proc/phase_shift) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/morph/morph.dm b/code/modules/mob/living/simple_mob/subtypes/vore/morph/morph.dm index 92071f6f87f..6eb6187f49c 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/morph/morph.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/morph/morph.dm @@ -62,10 +62,10 @@ /obj/effect)) /mob/living/simple_mob/vore/morph/Initialize() - verbs += /mob/living/proc/ventcrawl - verbs += /mob/living/simple_mob/vore/morph/proc/take_over_prey + add_verb(src, /mob/living/proc/ventcrawl) + add_verb(src, /mob/living/simple_mob/vore/morph/proc/take_over_prey) if(!istype(src, /mob/living/simple_mob/vore/morph/dominated_prey)) - verbs += /mob/living/simple_mob/vore/morph/proc/morph_color + add_verb(src, /mob/living/simple_mob/vore/morph/proc/morph_color) return ..() diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/otie.dm b/code/modules/mob/living/simple_mob/subtypes/vore/otie.dm index ad3abb09efe..e02408e979f 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/otie.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/otie.dm @@ -313,8 +313,8 @@ . = ..() if(!riding_datum) riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins + add_verb(src, /mob/living/simple_mob/proc/animal_mount) + add_verb(src, /mob/living/proc/toggle_rider_reins) movement_cooldown = 0 /mob/living/simple_mob/vore/otie/MouseDrop_T(mob/living/M, mob/living/user) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm b/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm index a67f6c33b95..fb8e27e3c0e 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm @@ -55,8 +55,8 @@ . = ..() if(!riding_datum) riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins + add_verb(src, /mob/living/simple_mob/proc/animal_mount) + add_verb(src, /mob/living/proc/toggle_rider_reins) movement_cooldown = 0 /mob/living/simple_mob/vore/aggressive/panther/MouseDrop_T(mob/living/M, mob/living/user) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/raptor.dm b/code/modules/mob/living/simple_mob/subtypes/vore/raptor.dm index 76e9d0a2979..4495c320348 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/raptor.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/raptor.dm @@ -78,8 +78,8 @@ . = ..() if(!riding_datum) riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins + add_verb(src, /mob/living/simple_mob/proc/animal_mount) + add_verb(src, /mob/living/proc/toggle_rider_reins) movement_cooldown = -1 /mob/living/simple_mob/vore/raptor/init_vore() diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/rat.dm b/code/modules/mob/living/simple_mob/subtypes/vore/rat.dm index a52519d0a48..186dfbc9833 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/rat.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/rat.dm @@ -165,7 +165,7 @@ hunger += 5 else food.Weaken(5) - food.visible_message("\The [src] pounces on \the [food]!!") + food.visible_message(span_danger("\The [src] pounces on \the [food]!")) target_mob = food EatTarget() hunger = 0 @@ -214,8 +214,8 @@ . = ..() if(!riding_datum) riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins + add_verb(src, /mob/living/simple_mob/proc/animal_mount) + add_verb(src, /mob/living/proc/toggle_rider_reins) movement_cooldown = 0 /mob/living/simple_mob/vore/aggressive/rat/MouseDrop_T(mob/living/M, mob/living/user) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/scel.dm b/code/modules/mob/living/simple_mob/subtypes/vore/scel.dm index 42159314675..ce4ff0fe938 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/scel.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/scel.dm @@ -86,12 +86,12 @@ . = ..() if(!riding_datum) riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins - verbs |= /mob/living/proc/glow_toggle - verbs |= /mob/living/proc/glow_color - verbs |= /mob/living/proc/long_vore - verbs |= /mob/living/proc/target_lunge + add_verb(src, /mob/living/simple_mob/proc/animal_mount) + add_verb(src, /mob/living/proc/toggle_rider_reins) + add_verb(src, /mob/living/proc/glow_toggle) + add_verb(src, /mob/living/proc/glow_color) + add_verb(src, /mob/living/proc/long_vore) + add_verb(src, /mob/living/proc/target_lunge) movement_cooldown = -1 /mob/living/simple_mob/vore/scel/init_vore() diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/scrubble.dm b/code/modules/mob/living/simple_mob/subtypes/vore/scrubble.dm index 326ee5973cc..81a37437cb1 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/scrubble.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/scrubble.dm @@ -73,9 +73,9 @@ vore_pounce_cooldown = world.time + 20 SECONDS // don't attempt another pounce for a while if(prob(successrate)) // pounce success! M.Weaken(5) - M.visible_message("\The [src] pounces on \the [M]!!") + M.visible_message(span_danger("\The [src] pounces on \the [M]!")) else // pounce misses! - M.visible_message("\The [src] attempts to pounce \the [M] but misses!!") + M.visible_message(span_danger("\The [src] attempts to pounce \the [M] but misses!")) playsound(src, 'sound/weapons/punchmiss.ogg', 25, 1, -1) if(will_eat(M) && (!M.canmove || vore_standing_too)) //if they're edible then eat them too diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/sect_drone.dm b/code/modules/mob/living/simple_mob/subtypes/vore/sect_drone.dm index 532bbdc5ff5..0c0adcc0a2f 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/sect_drone.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/sect_drone.dm @@ -88,7 +88,7 @@ /mob/living/simple_mob/vore/sect_drone/Login() . = ..() - verbs |= /mob/living/simple_mob/vore/sect_drone/proc/set_abdomen_color + add_verb(src, /mob/living/simple_mob/vore/sect_drone/proc/set_abdomen_color) /mob/living/simple_mob/vore/sect_drone/proc/set_abdomen_color() set name = "Set Glow Color" diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/sect_queen.dm b/code/modules/mob/living/simple_mob/subtypes/vore/sect_queen.dm index 1ce45927653..15dfcf13687 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/sect_queen.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/sect_queen.dm @@ -89,7 +89,7 @@ /mob/living/simple_mob/vore/sect_queen/Login() . = ..() - verbs |= /mob/living/simple_mob/vore/sect_queen/proc/set_abdomen_color + add_verb(src, /mob/living/simple_mob/vore/sect_queen/proc/set_abdomen_color) /mob/living/simple_mob/vore/sect_queen/proc/set_abdomen_color() set name = "Set Glow Color" diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_objects.dm b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_objects.dm index 2927eb651c1..12598b1e940 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_objects.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_objects.dm @@ -38,7 +38,7 @@ var/opts = clickprops["shift"] if(opts) - to_chat(my_kin,span_notice("[name] (Cost: [cost]%) - [desc]")) + to_chat(my_kin,span_notice(span_bold("[name]") + " (Cost: [cost]%) - [desc]")) else do_ability(my_kin) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm index b7108a9ae31..69977845274 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm @@ -131,7 +131,7 @@ update_icon() - verbs |= /mob/proc/adjust_hive_range + add_verb(src, /mob/proc/adjust_hive_range) return ..() @@ -225,14 +225,21 @@ add_overlay(tailimage) add_overlay(eye_icon_state) -/mob/living/simple_mob/shadekin/Stat() - . = ..() - if(statpanel("Shadekin")) - abilities_stat() +/mob/living/simple_mob/shadekin/update_misc_tabs() + ..() + var/list/L = list() + for(var/obj/effect/shadekin_ability/A as anything in shadekin_abilities) + var/client/C = client + var/img + if(C && istype(C)) //sanity checks + if(A.ability_name in C.misc_cache) + img = C.misc_cache[A.ability_name] + else + img = icon2html(A,C,sourceonly=TRUE) + C.misc_cache[A.ability_name] = img -/mob/living/simple_mob/shadekin/proc/abilities_stat() - for(var/obj/effect/shadekin_ability/ability as anything in shadekin_abilities) - stat("[ability.ability_name]",ability.atom_button_text()) + L[++L.len] = list("[A.ability_name]", A.ability_name, img, A.atom_button_text(), REF(A)) + misc_tabs["Shadekin"] = L //They phase back to the dark when killed /mob/living/simple_mob/shadekin/death(gibbed, deathmessage = "phases to somewhere far away!") diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/sheep.dm b/code/modules/mob/living/simple_mob/subtypes/vore/sheep.dm index 30ac2976288..ad58c3a43f3 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/sheep.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/sheep.dm @@ -48,8 +48,8 @@ . = ..() if(!riding_datum) riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins + add_verb(src, /mob/living/simple_mob/proc/animal_mount) + add_verb(src, /mob/living/proc/toggle_rider_reins) movement_cooldown = -1 /mob/living/simple_mob/vore/sheep/MouseDrop_T(mob/living/M, mob/living/user) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/softdog.dm b/code/modules/mob/living/simple_mob/subtypes/vore/softdog.dm index aaf4ccfd7c0..23d4260cec8 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/softdog.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/softdog.dm @@ -57,8 +57,8 @@ /mob/living/simple_mob/vore/woof/New() ..() - verbs += /mob/living/proc/ventcrawl - verbs += /mob/living/proc/hide + add_verb(src, /mob/living/proc/ventcrawl) + add_verb(src, /mob/living/proc/hide) /datum/say_list/softdog speak = list("Woof~", "Woof!", "Yip!", "Yap!", "Yip~", "Yap~", "Awoooooo~", "Awoo!", "AwooooooooooOOOOOOoOooOoooOoOOoooo!") diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm index 95eb4bca090..db9606c346e 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm @@ -72,7 +72,7 @@ List of things solar grubs should be able to do: if(attached) set_AI_busy(TRUE) if(prob(2)) - src.visible_message("\The [src] begins to sink power from the net.") + src.visible_message(span_infoplain(span_bold("\The [src]") + " begins to sink power from the net.")) if(prob(5)) var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() sparks.set_up(5, 0, get_turf(src)) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub_larva.dm b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub_larva.dm index 1f91fdb5923..763e7386ab5 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub_larva.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub_larva.dm @@ -60,7 +60,7 @@ var/global/list/grub_machine_overlays = list() sparks = new(src) sparks.set_up() sparks.attach(src) - verbs += /mob/living/proc/ventcrawl + add_verb(src, /mob/living/proc/ventcrawl) /mob/living/simple_mob/animal/solargrub_larva/death() powermachine.draining = 0 diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/stalker.dm b/code/modules/mob/living/simple_mob/subtypes/vore/stalker.dm index 876e857c0cf..57aefb7ba6a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/stalker.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/stalker.dm @@ -76,9 +76,9 @@ vore_pounce_cooldown = world.time + 1 SECONDS // don't attempt another pounce for a while if(prob(successrate)) // pounce success! M.Weaken(5) - M.visible_message("\The [src] pounces on \the [M]!!") + M.visible_message(span_danger("\The [src] pounces on \the [M]!")) else // pounce misses! - M.visible_message("\The [src] attempts to pounce \the [M] but misses!!") + M.visible_message(span_danger("\The [src] attempts to pounce \the [M] but misses!")) playsound(src, 'sound/weapons/punchmiss.ogg', 25, 1, -1) if(will_eat(M) && (!M.canmove || vore_standing_too)) //if they're edible then eat them too diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm b/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm index 195480b6800..62a4ac73b55 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm @@ -9,8 +9,8 @@ /mob/living/simple_mob/Login() . = ..() - verbs |= /mob/living/simple_mob/proc/set_name - verbs |= /mob/living/simple_mob/proc/set_desc + add_verb(src, /mob/living/simple_mob/proc/set_name) + add_verb(src, /mob/living/simple_mob/proc/set_desc) if(copy_prefs_to_mob) login_prefs() diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/wolf.dm b/code/modules/mob/living/simple_mob/subtypes/vore/wolf.dm index d59a89b1632..bf2535cd49f 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/wolf.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/wolf.dm @@ -102,8 +102,8 @@ . = ..() if(!riding_datum) riding_datum = new /datum/riding/simple_mob(src) - verbs |= /mob/living/simple_mob/proc/animal_mount - verbs |= /mob/living/proc/toggle_rider_reins + add_verb(src, /mob/living/simple_mob/proc/animal_mount) + add_verb(src, /mob/living/proc/toggle_rider_reins) movement_cooldown = -1 /mob/living/simple_mob/vore/wolf/direwolf/MouseDrop_T(mob/living/M, mob/living/user) diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 4ff396fd0ac..dcb9c3d9a81 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -18,10 +18,10 @@ tgui_alert_async(usr, "You appear to have logged in with another key this round, which is not permitted. Please contact an administrator if you believe this message to be in error.") if(matches) if(M.client) - message_admins("[span_red("Notice: ")][span_blue("[key_name_admin(src)] has the same [matches] as [key_name_admin(M)].")]", 1) + message_admins("[span_red(span_bold("Notice:"))] [span_blue("[key_name_admin(src)] has the same [matches] as [key_name_admin(M)].")]", 1) log_adminwarn("Notice: [key_name(src)] has the same [matches] as [key_name(M)].") else - message_admins("[span_red("Notice: ")][span_blue("[key_name_admin(src)] has the same [matches] as [key_name_admin(M)] (no longer logged in). ")]", 1) + message_admins("[span_red(span_bold("Notice:"))] [span_blue("[key_name_admin(src)] has the same [matches] as [key_name_admin(M)] (no longer logged in). ")]", 1) log_adminwarn("Notice: [key_name(src)] has the same [matches] as [key_name(M)] (no longer logged in).") /mob/Login() @@ -83,4 +83,5 @@ if(cloaked && cloaked_selfimage) client.images += cloaked_selfimage + client.init_verbs() SEND_SIGNAL(src, COMSIG_MOB_CLIENT_LOGIN, client) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 044f2ecd1fb..ec16537753d 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -90,7 +90,7 @@ return // Added voice muffling for Issue 41. if(stat == UNCONSCIOUS || sleeping > 0) - to_chat(src, span_filter_notice("... You can almost hear someone talking ...")) + to_chat(src, span_filter_notice(span_italics("... You can almost hear someone talking ..."))) else if(client && client.prefs.chat_timestamp) // TG-Chat filters latch directly to the spans, we no longer need that @@ -339,7 +339,7 @@ if(length(msg) <= 40) return span_notice("[msg]") else - return "[copytext_preserve_html(msg, 1, 37)]... More..." + return span_notice("[copytext_preserve_html(msg, 1, 37)]... More...") /* /mob/verb/help() @@ -387,7 +387,7 @@ set category = "OOC" if(stat != DEAD || !ticker) - to_chat(usr, span_notice("You must be dead to use this!")) + to_chat(usr, span_boldnotice("You must be dead to use this!")) return // Final chance to abort "respawning" @@ -634,7 +634,7 @@ playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 25) //Quieter than hugging/grabbing but we still want some audio feedback if(H.pull_damage()) - to_chat(src, span_filter_notice("[span_red("Pulling \the [H] in their current condition would probably be a bad idea.")]")) + to_chat(src, span_filter_notice("[span_red(span_bold("Pulling \the [H] in their current condition would probably be a bad idea."))]")) //Attempted fix for people flying away through space when cuffed and dragged. if(ismob(AM)) @@ -694,86 +694,19 @@ for(var/mob/M in viewers()) M.see(message) -/mob/Stat() - ..() - . = (is_client_active(10 MINUTES)) +/// Adds this list to the output to the stat browser +/mob/proc/get_status_tab_items() + . = list() - if(.) - if(statpanel("Status")) - stat(null, "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)") - if(ticker && ticker.current_state != GAME_STATE_PREGAME) - stat("Station Time", stationtime2text()) - var/date = "[stationdate2text()], [capitalize(world_time_season)]" - stat("Station Date", date) - stat("Round Duration", roundduration2text()) - - if(client.holder) - if(statpanel("Status")) - stat("Location:", "([x], [y], [z]) [loc]") - stat("CPU:","[world.cpu]") - stat("Instances:","[world.contents.len]") - stat(null, "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)") - stat("Keys Held", keys2text(client.move_keys_held | client.mod_keys_held)) - stat("Next Move ADD", dirs2text(client.next_move_dir_add)) - stat("Next Move SUB", dirs2text(client.next_move_dir_sub)) - stat("Current size:", size_multiplier * 100) - - if(statpanel("MC")) - stat("Location:", "([x], [y], [z]) [loc]") - stat("CPU:","[world.cpu]") - stat("Instances:","[world.contents.len]") - stat("World Time:", world.time) - stat("Real time of day:", REALTIMEOFDAY) - stat(null) - if(GLOB) - GLOB.stat_entry() - else - stat("Globals:", "ERROR") - if(Master) - Master.stat_entry() - else - stat("Master Controller:", "ERROR") - if(Failsafe) - Failsafe.stat_entry() - else - stat("Failsafe Controller:", "ERROR") - if(Master) - stat(null) - for(var/datum/controller/subsystem/SS in Master.subsystems) - SS.stat_entry() - - if(statpanel("Tickets")) - if(check_rights(R_ADMIN|R_SERVER,FALSE)) //Prevents non-staff from opening the list of ahelp tickets - GLOB.ahelp_tickets.stat_entry() - - - if(length(GLOB.sdql2_queries)) - if(statpanel("SDQL2")) - stat("Access Global SDQL2 List", GLOB.sdql2_vv_statobj) - for(var/datum/SDQL2_query/Q as anything in GLOB.sdql2_queries) - Q.generate_stat() - - if(has_mentor_powers(client)) - if(statpanel("Tickets")) - GLOB.mhelp_tickets.stat_entry() - - if(listed_turf && client) - if(!TurfAdjacent(listed_turf)) - listed_turf = null - else - if(statpanel("Turf")) - stat(listed_turf) - for(var/atom/A in listed_turf) - if(!A.mouse_opacity) - continue - if(A.invisibility > see_invisible) - continue - if(is_type_in_list(A, shouldnt_see)) - continue - if(A.plane > plane) - continue - stat(A) +/// Gets all relevant proc holders for the browser statpenl +/mob/proc/get_proc_holders() + . = list() + //if(mind) + //. += get_spells_for_statpanel(mind.spell_list) + //. += get_spells_for_statpanel(mob_spell_list) +/mob/proc/update_misc_tabs() + misc_tabs = list() //Reset misc_tabs every Stat() to prevent old shit sticking around // facing verbs /mob/proc/canface() @@ -1003,12 +936,12 @@ return if(self) - visible_message(span_warning("[src] rips [selection] out of their body."),span_warning("You rip [selection] out of your body.")) + visible_message(span_boldwarning("[src] rips [selection] out of their body."),span_boldwarning("You rip [selection] out of your body.")) else - visible_message(span_warning("[usr] rips [selection] out of [src]'s body."),span_warning("[usr] rips [selection] out of your body.")) + visible_message(span_boldwarning("[usr] rips [selection] out of [src]'s body."),span_boldwarning("[usr] rips [selection] out of your body.")) valid_objects = get_visible_implants(0) if(valid_objects.len == 1) //Yanking out last object - removing verb. - src.verbs -= /mob/proc/yank_out_object + remove_verb(src, /mob/proc/yank_out_object) clear_alert("embeddedobject") if(ishuman(src)) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 83cea738c43..050738cb953 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -236,3 +236,5 @@ var/list/progressbars = null //VOREStation Edit var/datum/focus //What receives our keyboard inputs. src by default + /// dict of custom stat tabs with data + var/list/list/misc_tabs = list() diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 2a583c7804d..a384f755b55 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -213,7 +213,7 @@ //if(2,4,6,15) newletter="[uppertext(newletter)]" if(2,4,6,9) newletter="[uppertext(newletter)]" if(7) newletter+="'" - //if(9,10) newletter="[newletter]" + //if(9,10) newletter=span_bold("[newletter]") //if(11,12) newletter="[newletter]" //if(13) newletter="[newletter]" newphrase+="[newletter]";counter-=1 @@ -434,7 +434,7 @@ var/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HURT) lname = "[keyname] ([name])" else // Everyone else (dead people who didn't ghost yet, etc.) lname = name - lname = "[lname] " + lname = span_name("[lname]") + " " to_chat(M, span_deadsay("" + create_text_tag("dead", "DEAD:", M.client) + " [lname][follow][message]")) /proc/say_dead_object(var/message, var/obj/subject = null) @@ -448,7 +448,7 @@ var/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HURT) if(subject) lname = "[subject.name] ([subject.x],[subject.y],[subject.z])" - lname = "[lname] " + lname = span_name("[lname]") + " " to_chat(M, span_deadsay("" + create_text_tag("event_dead", "EVENT:", M.client) + " [lname][follow][message]")) //Announces that a ghost has joined/left, mainly for use with wizards @@ -482,9 +482,9 @@ var/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HURT) if(!name) name = (C.holder && C.holder.fakekey) ? C.holder.fakekey : C.key if(joined_ghosts) - say_dead_direct("The ghost of [name] now [pick("skulks","lurks","prowls","creeps","stalks")] among the dead. [message]") + say_dead_direct("The ghost of " + span_name("[name]") + " now [pick("skulks","lurks","prowls","creeps","stalks")] among the dead. [message]") else - say_dead_direct("[name] no longer [pick("skulks","lurks","prowls","creeps","stalks")] in the realm of the dead. [message]") + say_dead_direct(span_name("[name]") + " no longer [pick("skulks","lurks","prowls","creeps","stalks")] in the realm of the dead. [message]") /mob/proc/switch_to_camera(var/obj/machinery/camera/C) if (!C.can_use() || stat || (get_dist(C, src) > 1 || machine != src || blinded || !canmove)) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index fd1042f0cca..2df28b1bb6f 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -428,7 +428,7 @@ //Check to see if we slipped if(prob(Process_Spaceslipping(5)) && !buckled) - to_chat(src, span_notice("You slipped!")) + to_chat(src, span_boldnotice("You slipped!")) inertia_dir = last_move step(src, src.inertia_dir) // Not using Move for smooth glide here because this is a 'slip' so should be sudden. return 0 diff --git a/code/modules/mob/new_player/login.dm b/code/modules/mob/new_player/login.dm index cfbcebbf420..938002d796c 100644 --- a/code/modules/mob/new_player/login.dm +++ b/code/modules/mob/new_player/login.dm @@ -50,6 +50,7 @@ var/obj/effect/lobby_image = new /obj/effect/lobby_image created_for = ckey new_player_panel() + client.init_verbs() spawn(40) if(client) handle_privacy_poll() @@ -87,7 +88,7 @@ var/obj/effect/lobby_image = new /obj/effect/lobby_image tgui_alert_async(src, message, "BYOND Client Version Warning") // So we can be more wordy and give links. - to_chat(src, "Your client version has known issues. Please consider using a different version: https://www.byond.com/download/build/.") + to_chat(src, span_userdanger("Your client version has known issues.") + " Please consider using a different version: https://www.byond.com/download/build/.") var/chat_message = "" if(config.suggested_byond_version) chat_message += "We suggest using version [config.suggested_byond_version]." diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 8e4030ca394..06f034bf15c 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -8,6 +8,8 @@ var/show_hidden_jobs = 0 //Show jobs that are set to "Never" in preferences var/has_respawned = FALSE //Determines if we're using RESPAWN_MESSAGE var/datum/browser/panel + var/datum/tgui_module/crew_manifest/manifest = null + var/datum/tgui_module/late_choices/late_choices_dialog = null universal_speak = 1 invisibility = 101 @@ -22,13 +24,17 @@ /mob/new_player/New() mob_list += src - verbs |= /mob/proc/insidePanel + add_verb(src, /mob/proc/insidePanel) initialized = TRUE // Explicitly don't use Initialize(). New players join super early and use New() /mob/new_player/Destroy() if(panel) QDEL_NULL(panel) + if(manifest) + QDEL_NULL(manifest) + if(late_choices_dialog) + QDEL_NULL(late_choices_dialog) . = ..() /mob/new_player/verb/new_player_panel() @@ -39,22 +45,22 @@ /mob/new_player/proc/new_player_panel_proc() var/output = "
    " - output += "Map: [using_map.full_name]
    " - output += "Station Time: [stationtime2text()]
    " + output += span_bold("Map:") + " [using_map.full_name]
    " + output += span_bold("Station Time:") + " [stationtime2text()]
    " if(!ticker || ticker.current_state <= GAME_STATE_PREGAME) - output += "Server Initializing!" + output += span_bold("Server Initializing!") else - output += "Round Duration: [roundduration2text()]
    " + output += span_bold("Round Duration:") + " [roundduration2text()]
    " output += "
    " output += "

    Character Setup

    " if(!ticker || ticker.current_state <= GAME_STATE_PREGAME) if(ready) - output += "

    \[ Ready | Not Ready \]

    " + output += "

    \[ " + span_linkOn(span_bold("Ready")) + " | Not Ready \]

    " else - output += "

    \[ Ready | Not Ready \]

    " + output += "

    \[ Ready | " + span_linkOn(span_bold("Not Ready")) + " \]

    " else output += "View the Crew Manifest

    " @@ -111,36 +117,37 @@ panel.open() return -/mob/new_player/Stat() - ..() +/mob/new_player/get_status_tab_items() + . = ..() + . += "" - if(statpanel("Lobby") && SSticker) - stat("Game Mode:", SSticker.hide_mode ? "Secret" : "[config.mode_names[master_mode]]") + . += "Game Mode: [SSticker.hide_mode ? "Secret" : "[config.mode_names[master_mode]]"]" - // if(SSvote.mode) - // stat("Vote: [capitalize(SSvote.mode)]", "Time Left: [SSvote.time_remaining] s") + // if(SSvote.mode) + // . += "Vote: [capitalize(SSvote.mode)] Time Left: [SSvote.time_remaining] s" - if(SSticker.current_state == GAME_STATE_INIT) - stat("Time To Start:", "Server Initializing") + if(SSticker.current_state == GAME_STATE_INIT) + . += "Time To Start: Server Initializing" - else if(SSticker.current_state == GAME_STATE_PREGAME) - stat("Time To Start:", "[round(SSticker.pregame_timeleft,1)][round_progressing ? "" : " (DELAYED)"]") - stat("Players: [totalPlayers]", "Players Ready: [totalPlayersReady]") - totalPlayers = 0 - totalPlayersReady = 0 - var/datum/job/refJob = null - for(var/mob/new_player/player in player_list) - refJob = player.client.prefs.get_highest_job() - if(player.client.prefs.obfuscate_key && player.client.prefs.obfuscate_job) - stat("Anonymous User", (player.ready)?("Ready!"):(null)) - else if(player.client.prefs.obfuscate_key) - stat("Anonymous User", (player.ready)?("(Playing as: [(refJob)?(refJob.title):("Unknown")])"):(null)) - else if(player.client.prefs.obfuscate_job) - stat("[player.key]", (player.ready)?("Ready!"):(null)) - else - stat("[player.key]", (player.ready)?("(Playing as: [(refJob)?(refJob.title):("Unknown")])"):(null)) - totalPlayers++ - if(player.ready)totalPlayersReady++ + else if(SSticker.current_state == GAME_STATE_PREGAME) + . += "Time To Start: [round(SSticker.pregame_timeleft,1)][round_progressing ? "" : " (DELAYED)"]" + . += "Players: [totalPlayers]" + . += "Players Ready: [totalPlayersReady]" + totalPlayers = 0 + totalPlayersReady = 0 + var/datum/job/refJob = null + for(var/mob/new_player/player in player_list) + refJob = player.client.prefs.get_highest_job() + if(player.client.prefs.obfuscate_key && player.client.prefs.obfuscate_job) + . += "Anonymous User [player.ready ? "Ready!" : null]" + else if(player.client.prefs.obfuscate_key) + . += "Anonymous User [player.ready ? "(Playing as: [refJob ? refJob.title : "Unknown"])" : null]" + else if(player.client.prefs.obfuscate_job) + . += "[player.key] [player.ready ? "Ready!" : null]" + else + . += "[player.key] [player.ready ? "(Playing as: [refJob ? refJob.title : "Unknown"])" : null]" + totalPlayers++ + if(player.ready)totalPlayersReady++ /mob/new_player/Topic(href, href_list[]) if(!client) return 0 @@ -191,9 +198,10 @@ observer.real_name = client.prefs.real_name observer.name = observer.real_name if(!client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed. - observer.verbs -= /mob/observer/dead/verb/toggle_antagHUD // Poor guys, don't know what they are missing! + remove_verb(observer, /mob/observer/dead/verb/toggle_antagHUD) // Poor guys, don't know what they are missing! observer.key = key observer.set_respawn_timer(time_till_respawn()) // Will keep their existing time if any, or return 0 and pass 0 into set_respawn_timer which will use the defaults + observer.client.init_verbs() qdel(src) return 1 @@ -222,37 +230,6 @@ if(href_list["manifest"]) ViewManifest() - if(href_list["SelectedJob"]) - - /* Vorestation Removal Start - //Prevents people rejoining as same character. - for (var/mob/living/carbon/human/C in mob_list) - var/char_name = client.prefs.real_name - if(char_name == C.real_name) - to_chat(usr, span_notice("There is a character that already exists with the same name - [C.real_name], please join with a different one, or use Quit the Round with the previous character.")) //VOREStation Edit - return - */ //Vorestation Removal End - - if(!config.enter_allowed) - to_chat(usr, span_notice("There is an administrative lock on entering the game!")) - return - else if(ticker && ticker.mode && ticker.mode.explosion_in_progress) - to_chat(usr, span_danger("The station is currently exploding. Joining would go poorly.")) - return - - if(!is_alien_whitelisted(src, GLOB.all_species[client.prefs.species])) - tgui_alert(src, "You are currently not whitelisted to play [client.prefs.species].") - return 0 - - var/datum/species/S = GLOB.all_species[client.prefs.species] - - if(!(S.spawn_flags & SPECIES_CAN_JOIN)) - tgui_alert_async(src,"Your current species, [client.prefs.species], is not available for play on the station.") - return 0 - - AttemptLateSpawn(href_list["SelectedJob"],client.prefs.spawnpoint) - return - if(href_list["privacy_poll"]) establish_db_connection() if(!dbcon.IsConnected()) @@ -288,7 +265,7 @@ var/sql = "INSERT INTO erro_privacy VALUES (null, Now(), '[src.ckey]', '[option]')" var/DBQuery/query_insert = dbcon.NewQuery(sql) query_insert.Execute() - to_chat(usr, "Thank you for your vote!") + to_chat(usr, span_bold("Thank you for your vote!")) usr << browse(null,"window=privacypoll") if(!ready && href_list["preference"]) @@ -385,7 +362,7 @@ dat += "
    " dat += "[F["body"]]" dat += "
    " - dat += "Last written by [F["author"]], on [F["timestamp"]]." + dat += span_normal(span_italics("Last written by [F["author"]], on [F["timestamp"]].")) dat += "" var/datum/browser/popup = new(src, "Server News", "Server News", 450, 300, src) popup.set_content(dat) @@ -517,6 +494,7 @@ if(imp.handle_implant(character,character.zone_sel.selecting)) imp.post_implant(character) + character.client.init_verbs() qdel(src) // Delete new_player mob /mob/new_player/proc/AnnounceCyborg(var/mob/living/character, var/rank, var/join_message, var/channel, var/zlevel) @@ -528,53 +506,9 @@ global_announcer.autosay("A new[rank ? " [rank]" : " visitor" ] [join_message ? join_message : "has arrived on the station"].", "Arrivals Announcement Computer", channel, zlevels) /mob/new_player/proc/LateChoices() - var/name = client.prefs.be_random_name ? "friend" : client.prefs.real_name - - var/dat = "
    " - dat += "Welcome, [name].
    " - dat += "Round Duration: [roundduration2text()]
    " - - if(emergency_shuttle) //In case NanoTrasen decides reposess CentCom's shuttles. - if(emergency_shuttle.going_to_centcom()) //Shuttle is going to CentCom, not recalled - dat += "The station has been evacuated.
    " - if(emergency_shuttle.online()) - if (emergency_shuttle.evac) // Emergency shuttle is past the point of no recall - dat += "The station is currently undergoing evacuation procedures.
    " - else // Crew transfer initiated - dat += "The station is currently undergoing crew transfer procedures.
    " - - dat += "Choose from the following open/valid positions:
    " - dat += "[show_hidden_jobs ? "Hide":"Show"] Hidden Jobs.
    " - - var/deferred = "" - for(var/datum/job/job in job_master.occupations) - if(job && IsJobAvailable(job.title)) - // Checks for jobs with minimum age requirements - if((job.minimum_character_age || job.min_age_by_species) && (client.prefs.age < job.get_min_age(client.prefs.species, client.prefs.organ_data["brain"]))) - continue - // Checks for jobs set to "Never" in preferences //TODO: Figure out a better way to check for this - if(!(client.prefs.GetJobDepartment(job, 1) & job.flag)) - if(!(client.prefs.GetJobDepartment(job, 2) & job.flag)) - if(!(client.prefs.GetJobDepartment(job, 3) & job.flag)) - if(!show_hidden_jobs && job.title != JOB_ALT_ASSISTANT) // Assistant is always an option - continue - var/active = 0 - // Only players with the job assigned and AFK for less than 10 minutes count as active - for(var/mob/M in player_list) if(M.mind && M.client && M.mind.assigned_role == job.title && M.client.inactivity <= 10 MINUTES) - active++ - - var/string = "[job.title] ([job.current_positions]) (Active: [active])
    " - - if(job.offmap_spawn) //At the bottom - deferred += string - else - dat += string - - dat += deferred - - dat += "
    " - src << browse(dat, "window=latechoices;size=300x640;can_close=1") - + if(!late_choices_dialog) + late_choices_dialog = new(src) + late_choices_dialog.tgui_interact(src) /mob/new_player/proc/create_character(var/turf/T) spawning = 1 @@ -621,6 +555,7 @@ mind.transfer_to(new_character) //won't transfer key since the mind is not active new_character.name = real_name + client.init_verbs() new_character.dna.ready_dna(new_character) new_character.dna.b_type = client.prefs.b_type new_character.sync_organ_dna() @@ -658,13 +593,16 @@ return new_character /mob/new_player/proc/ViewManifest() - var/datum/tgui_module/crew_manifest/self_deleting/S = new(src) - S.tgui_interact(src) + if(!manifest) + manifest = new(src) + manifest.tgui_interact(src) /mob/new_player/Move() return 0 /mob/new_player/proc/close_spawn_windows() + manifest?.close_ui() + late_choices_dialog?.close_ui() src << browse(null, "window=latechoices") //closes late choices window src << browse(null, "window=preferences_window") //VOREStation Edit? diff --git a/code/modules/mob/new_player/poll.dm b/code/modules/mob/new_player/poll.dm index 650344cd9d2..df882facddf 100644 --- a/code/modules/mob/new_player/poll.dm +++ b/code/modules/mob/new_player/poll.dm @@ -17,7 +17,7 @@ /mob/new_player/proc/privacy_poll() var/output = "
    Player poll" output +="
    " - output += "We would like to expand our stats gathering." + output += span_bold("We would like to expand our stats gathering.") output += "
    This however involves gathering data about player behavior, play styles, unique player numbers, play times, etc. Data like that cannot be gathered fully anonymously, which is why we're asking you how you'd feel if player-specific data was gathered. Prior to any of this actually happening, a privacy policy will be discussed, but before that can begin, we'd preliminarily like to know how you feel about the concept." output +="
    " output += "How do you feel about the game gathering player-specific statistics? This includes statistics about individual players as well as in-game polling/opinion requests." @@ -131,7 +131,7 @@ var/output = "
    Player poll" output +="
    " - output += "Question: [pollquestion]
    " + output += span_bold("Question: [pollquestion]") + "
    " output += "Poll runs from [pollstarttime] until [pollendtime]

    " if(!voted) //Only make this a form if we have not voted yet @@ -145,7 +145,7 @@ if(O.optionid && O.optiontext) if(voted) if(votedoptionid == O.optionid) - output += "[O.optiontext]
    " + output += span_bold("[O.optiontext]") + "
    " else output += "[O.optiontext]
    " else @@ -175,7 +175,7 @@ var/output = "

    Player poll" output +="
    " - output += "Question: [pollquestion]
    " + output += span_bold("Question: [pollquestion]") + "
    " output += "Feedback gathering runs from [pollstarttime] until [pollendtime]

    " if(!voted) //Only make this a form if we have not voted yet @@ -209,7 +209,7 @@ var/output = "

    Player poll" output +="
    " - output += "Question: [pollquestion]
    " + output += span_bold("Question: [pollquestion]") + "
    " output += "Poll runs from [pollstarttime] until [pollendtime]

    " var/voted = 0 @@ -304,7 +304,7 @@ var/output = "

    Player poll" output +="
    " - output += "Question: [pollquestion]
    You can select up to [multiplechoiceoptions] options. If you select more, the first [multiplechoiceoptions] will be saved.
    " + output += span_bold("Question: [pollquestion]") + "
    You can select up to [multiplechoiceoptions] options. If you select more, the first [multiplechoiceoptions] will be saved.
    " output += "Poll runs from [pollstarttime] until [pollendtime]

    " if(!voted) //Only make this a form if we have not voted yet @@ -320,7 +320,7 @@ if(O.optionid && O.optiontext) if(voted) if(O.optionid in votedfor) - output += "[O.optiontext]
    " + output += span_bold("[O.optiontext]") + "
    " else output += "[O.optiontext]
    " else diff --git a/code/modules/mob/new_player/skill.dm b/code/modules/mob/new_player/skill.dm index e779ed04b28..9bf4c4a4978 100644 --- a/code/modules/mob/new_player/skill.dm +++ b/code/modules/mob/new_player/skill.dm @@ -181,11 +181,11 @@ var/global/list/SKILL_PRE = list(JOB_ENGINEER = SKILL_ENGINEER, JOB_ROBOTICIST = return var/HTML = "" - HTML += "Select your Skills
    " + HTML += span_bold("Select your Skills") + "
    " HTML += "Current skill level: [M.GetSkillClass(M.used_skillpoints)] ([M.used_skillpoints])
    " HTML += "" for(var/V in SKILLS) - HTML += "" for(var/datum/skill/S in SKILLS[V]) var/level = M.skills[S.ID] diff --git a/code/modules/mob/new_player/sprite_accessories_tail_vr.dm b/code/modules/mob/new_player/sprite_accessories_tail_vr.dm index 3b6dd83b6cb..e516eb2ac6e 100644 --- a/code/modules/mob/new_player/sprite_accessories_tail_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_tail_vr.dm @@ -458,6 +458,34 @@ extra_overlay_w = "tigeralt-tips_w" extra_overlay2_w = "tigeralt-tips2_w" +/datum/sprite_accessory/tail/twotiger + name = "tiger tail, double (vwag)" + desc = "" + icon_state = "twotiger" + extra_overlay = "twotiger-tips" + extra_overlay2 = "twotiger-tips2" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + ani_state = "twotiger_w" + extra_overlay_w = "twotiger-tips_w" + extra_overlay2_w = "twotiger-tips2_w" + +/datum/sprite_accessory/tail/twocat + name = "cat tail, double (vwag)" + desc = "" + icon_state = "twocat" + ani_state = "twocat_w" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/threecat + name = "cat tail, triple (vwag)" + desc = "" + icon_state = "threecat" + ani_state = "threecat_w" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + /datum/sprite_accessory/tail/vulp_new name = "new vulp tail (vwag)" @@ -1549,4 +1577,9 @@ extra_overlay = "chonksqrl-m1" extra_overlay2 = "chonksqrl-m2" -//RS ADD END \ No newline at end of file +//RS ADD END + +/datum/sprite_accessory/tail/kururak + name = "kururak tail" + desc = "" + icon_state = "kururak" diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 4746cfbb297..43e853b1b5d 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -74,7 +74,7 @@ message = encode_html_emphasis(message) - say_dead_direct("[pick("complains","moans","whines","laments","blubbers")], \"[message]\"", src) + say_dead_direct("[pick("complains","moans","whines","laments","blubbers")], " + span_message("\"[message]\""), src) /mob/proc/say_understands(var/mob/other, var/datum/language/speaking = null) if(stat == DEAD) diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm index 85f07959f93..0ce22e0ec01 100644 --- a/code/modules/mob/say_vr.dm +++ b/code/modules/mob/say_vr.dm @@ -70,7 +70,7 @@ if(!subtle_mode) if(mode_selection) if(message) - to_chat(src, "Subtle mode not selected. Your input has not been sent, but preserved: [message]") + to_chat(src, span_warning("Subtle mode not selected. Your input has not been sent, but preserved:") + " [message]") return else subtle_mode = "Adjacent Turfs (Default)" @@ -83,14 +83,14 @@ if(input) log_subtle(message,src) - message = span_emote_subtle("[src][input]") + message = span_emote_subtle(span_bold("[src]") + " " + span_italics("[input]")) if(!(subtle_mode == "Adjacent Turfs (Default)")) - message = "(T) " + message + message = span_bold("(T) ") + message else return if (message) - var/undisplayed_message = span_emote("[src]does something too subtle for you to see.") + var/undisplayed_message = span_emote(span_bold("[src]") + " " + span_italics("does something too subtle for you to see.")) message = encode_html_emphasis(message) var/list/vis @@ -117,7 +117,7 @@ if(istype(T) && !(T in tablelist) && !istype(T, /obj/structure/table/rack) && !istype(T, /obj/structure/table/bench)) tablelist |= T.get_all_connected_tables() if(!(tablelist.len)) - to_chat(src, "No nearby tables detected. Your input has not been sent, but preserved: [input]") + to_chat(src, span_warning("No nearby tables detected. Your input has not been sent, but preserved:") + " [input]") return for(var/obj/structure/table/T in tablelist) for(var/mob/M in vis_mobs) @@ -133,7 +133,7 @@ if("Current Belly (Prey)") var/obj/belly/B = get_belly(src) if(!istype(B)) - to_chat(src, "You are currently not in the belly. Your input has not been sent, but preserved: [input]") + to_chat(src, span_warning("You are currently not in the belly. Your input has not been sent, but preserved:") + " [input]") return vis = get_mobs_and_objs_in_view_fast(get_turf(src),0,2) vis_mobs = vis["mobs"] @@ -154,15 +154,15 @@ vis_objs -= O if("Specific Belly (Pred)") if(!isliving(src)) - to_chat(src, "You do not appear to be a living mob capable of having bellies. Your input has not been sent, but preserved: [input]") + to_chat(src, span_warning("You do not appear to be a living mob capable of having bellies. Your input has not been sent, but preserved:") + " [input]") return var/mob/living/L = src if(!(L.vore_organs) || !(L.vore_organs.len)) - to_chat(src, "You do not have any bellies. Your input has not been sent, but preserved: [input]") + to_chat(src, span_warning("You do not have any bellies. Your input has not been sent, but preserved:") + " [input]") return var/obj/belly/B = tgui_input_list(src, "Which belly do you want to sent the subtle to?","Select Belly", L.vore_organs) if(!B || !istype(B)) - to_chat(src, "You have not selected a valid belly. Your input has not been sent, but preserved: [input]") + to_chat(src, span_warning("You have not selected a valid belly. Your input has not been sent, but preserved:") + " [input]") return vis = get_mobs_and_objs_in_view_fast(get_turf(src),0,2) vis_mobs = vis["mobs"] @@ -190,11 +190,11 @@ if(isobserver(M) || (M.stat == DEAD)) vis_mobs -= M if(!(vis_mobs.len)) - to_chat(src, "No valid targets found. Your input has not been sent, but preserved: [input]") + to_chat(src, span_warning("No valid targets found. Your input has not been sent, but preserved:") + " [input]") return var/target = tgui_input_list(src, "Who do we send our message to?","Select Target", vis_mobs) if(!(target)) - to_chat(src, "No target selected. Your input has not been sent, but preserved: [input]") + to_chat(src, span_warning("No target selected. Your input has not been sent, but preserved:") + " [input]") return vis_mobs = list(target, src) @@ -322,14 +322,14 @@ for(var/I in M.contents) if(istype(I, /mob/living/dominated_brain)) var/mob/living/dominated_brain/db = I - to_chat(db, span_psay("\The [M] thinks, \"[message]\"")) //To any dominated brains inside us + to_chat(db, span_psay(span_bold("\The [M] thinks, \"[message]\""))) //To any dominated brains inside us if(db.read_preference(/datum/preference/toggle/subtle_sounds)) db << sound('sound/talksounds/subtle_sound.ogg', volume = 50) f = TRUE for(var/B in M.vore_organs) for(var/mob/living/L in B) if(L.absorbed) - to_chat(L, span_psay("\The [M] thinks, \"[message]\"")) //To any absorbed people inside us + to_chat(L, span_psay(span_bold("\The [M] thinks, \"[message]\""))) //To any absorbed people inside us if(L.read_preference(/datum/preference/toggle/subtle_sounds)) L << sound('sound/talksounds/subtle_sound.ogg', volume = 50) f = TRUE @@ -340,7 +340,7 @@ if(M.read_preference(/datum/preference/toggle/subtle_sounds)) M << sound('sound/talksounds/subtle_sound.ogg', volume = 50) else - to_chat(M, span_psay("You think \"[message]\"")) //To us if we are the pred + to_chat(M, span_psay(span_bold("You think \"[message]\""))) //To us if we are the pred if(M.read_preference(/datum/preference/toggle/subtle_sounds)) M << sound('sound/talksounds/subtle_sound.ogg', volume = 50) for (var/mob/G in player_list) @@ -420,14 +420,14 @@ for(var/I in M.contents) if(istype(I, /mob/living/dominated_brain)) var/mob/living/dominated_brain/db = I - to_chat(db, span_pemote("\The [M] [message]")) //To any dominated brains inside us + to_chat(db, span_pemote(span_bold("\The [M] [message]"))) //To any dominated brains inside us if(db.read_preference(/datum/preference/toggle/subtle_sounds)) db << sound('sound/talksounds/subtle_sound.ogg', volume = 50) f = TRUE for(var/B in M.vore_organs) for(var/mob/living/L in B) if(L.absorbed) - to_chat(L, span_pemote("\The [M] [message]")) //To any absorbed people inside us + to_chat(L, span_pemote(span_bold("\The [M] [message]"))) //To any absorbed people inside us if(L.read_preference(/datum/preference/toggle/subtle_sounds)) L << sound('sound/talksounds/subtle_sound.ogg', volume = 50) f = TRUE @@ -438,7 +438,7 @@ if(M.read_preference(/datum/preference/toggle/subtle_sounds)) M << sound('sound/talksounds/subtle_sound.ogg', volume = 50) else - to_chat(M, span_pemote("\The [M] [message]")) //To us if we are the pred + to_chat(M, span_pemote(span_bold("\The [M] [message]"))) //To us if we are the pred if(M.read_preference(/datum/preference/toggle/subtle_sounds)) M << sound('sound/talksounds/subtle_sound.ogg', volume = 50) for (var/mob/G in player_list) @@ -470,9 +470,9 @@ if(stat == DEAD) return say_dead(message) if(stat) - to_chat(src, "You need to be concious to narrate: [message]") + to_chat(src, span_warning("You need to be concious to narrate: [message]")) return - message = span_name("([name])[message]") + message = span_name("([name])") + " " + span_pnarrate("[message]") //Below here stolen from emotes var/turf/T = get_turf(src) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 05c2c4cd3ba..a686e35de7b 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -36,7 +36,7 @@ dna.SetSEState(MONKEYBLOCK,1) dna.SetSEValueRange(MONKEYBLOCK,0xDAC, 0xFFF) - to_chat(src, "You are now [species.name]. ") + to_chat(src, span_infoplain(span_bold("You are now [species.name]. "))) qdel(animation) return src @@ -216,7 +216,7 @@ new_xeno.a_intent = I_HURT new_xeno.key = key - to_chat(new_xeno, "You are now an alien.") + to_chat(new_xeno, span_infoplain(span_bold("You are now an alien."))) qdel(src) return @@ -238,7 +238,7 @@ new_corgi.a_intent = I_HURT new_corgi.key = key - to_chat(new_corgi, "You are now a Corgi. Yap Yap!") + to_chat(new_corgi, span_infoplain(span_bold("You are now a Corgi. Yap Yap!"))) qdel(src) return diff --git a/code/modules/modular_computers/file_system/programs/generic/game.dm b/code/modules/modular_computers/file_system/programs/generic/game.dm index c1dcc53195e..8cf049aff72 100644 --- a/code/modules/modular_computers/file_system/programs/generic/game.dm +++ b/code/modules/modular_computers/file_system/programs/generic/game.dm @@ -168,7 +168,7 @@ to_chat(usr, span_notice("Hardware error: Printer is out of paper.")) return else - computer.visible_message("\The [computer] prints out paper.") + computer.visible_message(span_infoplain(span_bold("\The [computer]") + " prints out paper.")) if(ticket_count >= 1) new /obj/item/stack/arcadeticket((get_turf(computer)), 1) to_chat(usr, span_notice("[src] dispenses a ticket!")) diff --git a/code/modules/multiz/ladders.dm b/code/modules/multiz/ladders.dm index 746357c61ce..db56742c036 100644 --- a/code/modules/multiz/ladders.dm +++ b/code/modules/multiz/ladders.dm @@ -101,9 +101,9 @@ /obj/structure/ladder/proc/climbLadder(var/mob/M, var/obj/target_ladder) var/direction = (target_ladder == target_up ? "up" : "down") - M.visible_message("\The [M] begins climbing [direction] \the [src]!", - "You begin climbing [direction] \the [src]!", - "You hear the grunting and clanging of a metal ladder being used.") + M.visible_message(span_infoplain(span_bold("\The [M]") + " begins climbing [direction] \the [src]!"), + span_info("You begin climbing [direction] \the [src]!"), + span_info("You hear the grunting and clanging of a metal ladder being used.")) target_ladder.audible_message(span_notice("You hear something coming [direction] \the [src]"), runemessage = "clank clank") diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm index a1dc794bb85..66fe8d90efe 100644 --- a/code/modules/multiz/movement.dm +++ b/code/modules/multiz/movement.dm @@ -540,8 +540,8 @@ else if(!silent) if(planetary) - visible_message(span_danger("\A [src] falls out of the sky and crashes into \the [landing]!"), \ - span_danger(" You fall out of the sky and crash into \the [landing]!"), \ + visible_message(span_danger(span_large("\A [src] falls out of the sky and crashes into \the [landing]!")), \ + span_danger(span_large(" You fall out of the sky and crash into \the [landing]!")), \ "You hear something slam into \the [landing].") var/turf/T = get_turf(landing) explosion(T, 0, 1, 2) @@ -639,8 +639,8 @@ else if(!silent) if(planetary) - visible_message(span_danger("\A [src] falls out of the sky and crashes into \the [landing]!"), \ - span_danger(" You fall out of the skiy and crash into \the [landing]!"), \ + visible_message(span_danger(span_large("\A [src] falls out of the sky and crashes into \the [landing]!")), \ + span_danger(span_large(" You fall out of the skiy and crash into \the [landing]!")), \ "You hear something slam into \the [landing].") var/turf/T = get_turf(landing) explosion(T, 0, 1, 2) diff --git a/code/modules/multiz/movement_vr.dm b/code/modules/multiz/movement_vr.dm index 13af6e8315e..656d56600e4 100644 --- a/code/modules/multiz/movement_vr.dm +++ b/code/modules/multiz/movement_vr.dm @@ -185,28 +185,28 @@ climb_time +=3 SECONDS if(fall_chance < 30) fall_chance = 30 - L.visible_message(message = "[L] begins to climb up on \The [src]", self_message = "You begin to clumb up on \The [src]", \ - blind_message = "You hear the sounds of climbing!", runemessage = "Tap Tap") + L.visible_message(message = span_infoplain(span_bold("[L]") + " begins to climb up on " + span_bold("\The [src]")), self_message = span_infoplain("You begin to clumb up on " + span_bold("\The [src]")), \ + blind_message = span_infoplain("You hear the sounds of climbing!"), runemessage = "Tap Tap") var/oops_time = world.time var/grace_time = 4 SECONDS to_chat(L, span_warning("If you get interrupted after [(grace_time / (1 SECOND))] seconds of climbing, you will fall and hurt yourself, beware!")) if(do_after(L,climb_time)) if(prob(fall_chance)) L.forceMove(above_mob) - L.visible_message(message = "[L] falls off \The [src]", self_message = span_danger("You slipped off \The [src]"), \ - blind_message = "you hear a loud thud!", runemessage = "CRASH!") + L.visible_message(message = span_infoplain(span_bold("[L]") + " falls off " + span_bold("\The [src]")), self_message = span_danger("You slipped off " + span_bold("\The [src]")), \ + blind_message = span_infoplain("you hear a loud thud!"), runemessage = "CRASH!") else if(drop_our_held) L.drop_item(get_turf(L)) L.forceMove(above_wall) - L.visible_message(message = "[L] climbed up on \The [src]", \ - self_message = span_notice("You successfully scaled \The [src]"), \ - blind_message = "The sounds of climbing cease.", runemessage = "Tap Tap") + L.visible_message(message = span_infoplain(span_bold("[L]") + " climbed up on " + span_bold("\The [src]")), \ + self_message = span_notice("You successfully scaled " + span_bold("\The [src]")), \ + blind_message = span_infoplain("The sounds of climbing cease."), runemessage = "Tap Tap") L.adjust_nutrition(-nutrition_cost) else if(world.time > (oops_time + grace_time)) L.forceMove(above_mob) - L.visible_message(message = "[L] falls off \The [src]", self_message = span_danger("You slipped off \The [src]"), \ - blind_message = "you hear a loud thud!", runemessage = "CRASH!") + L.visible_message(message = span_infoplain(span_bold("[L]") + " falls off " + span_bold("\The [src]")), self_message = span_danger("You slipped off " + span_bold("\The [src]")), \ + blind_message = span_infoplain("you hear a loud thud!"), runemessage = "CRASH!") /mob/living/verb/climb_down() set name = "Climb down wall" @@ -306,27 +306,27 @@ to_chat(src, span_danger("\The [climbing_surface] is not suitable for climbing! Even for a master climber, this is risky!")) if(fall_chance < 75 ) fall_chance = 75 - src.visible_message(message = "[src] climb down \The [below_wall]", \ - self_message = "You begin to descend \The [below_wall]", \ - blind_message = "You hear the sounds of climbing!", runemessage = "Tap Tap") - below_wall.audible_message(message = "You hear something climbing up \The [below_wall]", runemessage= "Tap Tap") + src.visible_message(message = span_infoplain(span_bold("[src]") + " climb down " + span_bold("\The [below_wall]")), \ + self_message = span_infoplain("You begin to descend " + span_bold("\The [below_wall]")), \ + blind_message = span_infoplain("You hear the sounds of climbing!"), runemessage = "Tap Tap") + below_wall.audible_message(message = span_infoplain("You hear something climbing up " + span_bold("\The [below_wall]")), runemessage= "Tap Tap") var/oops_time = world.time var/grace_time = 3 SECONDS to_chat(src, span_warning("If you get interrupted after [(grace_time / (1 SECOND))] seconds of climbing, you will fall and hurt yourself, beware!")) if(do_after(src,climb_time)) if(prob(fall_chance)) src.forceMove(front_of_us) - src.visible_message(message = "[src] falls off \The [below_wall]", \ - self_message = span_danger("You slipped off \The [below_wall]"), \ - blind_message = "you hear a loud thud!", runemessage = "CRASH!") + src.visible_message(message = span_infoplain(span_bold("[src]") + " falls off " + span_bold("\The [below_wall]")), \ + self_message = span_danger("You slipped off " + span_bold("\The [below_wall]")), \ + blind_message = span_infoplain("you hear a loud thud!"), runemessage = "CRASH!") else src.forceMove(destination) - src.visible_message(message = "[src] climbed down on \The [below_wall]", \ - self_message = span_notice("You successfully descended \The [below_wall]"), \ - blind_message = "The sounds of climbing cease.", runemessage = "Tap Tap") + src.visible_message(message = span_infoplain(span_bold("[src]") + " climbed down on " + span_bold("\The [below_wall]")), \ + self_message = span_notice("You successfully descended " + span_bold("\The [below_wall]")), \ + blind_message = span_infoplain("The sounds of climbing cease."), runemessage = "Tap Tap") adjust_nutrition(-nutrition_cost) else if(world.time > (oops_time + grace_time)) src.forceMove(front_of_us) - src.visible_message(message = "[src] falls off \The [below_wall]", \ - self_message = span_danger("You slipped off \The [below_wall]"), \ - blind_message = "you hear a loud thud!", runemessage = "CRASH!") + src.visible_message(message = span_infoplain(span_bold("[src]") + " falls off " + span_bold("\The [below_wall]")), \ + self_message = span_danger("You slipped off " + span_bold("\The [below_wall]")), \ + blind_message = span_infoplain("you hear a loud thud!"), runemessage = "CRASH!") diff --git a/code/modules/news/new_newspaper.dm b/code/modules/news/new_newspaper.dm index 0d55a9992a2..8d27c374211 100644 --- a/code/modules/news/new_newspaper.dm +++ b/code/modules/news/new_newspaper.dm @@ -32,17 +32,17 @@ obj/item/newspaper/attack_self(mob/user) if(important_message) dat+="Contents:
      **Important Security Announcement** \[page [pages+2]\]
    " else - dat+="Other than the title, the rest of the newspaper is unprinted..." + dat+=span_italics("Other than the title, the rest of the newspaper is unprinted...") else dat+="Contents:
      " for(var/datum/feed_channel/NP in news_content) pages++ if(important_message) - dat+="**Important Security Announcement** \[page [pages+2]\]
      " + dat+=span_bold("**Important Security Announcement**") + " \[page [pages+2]\]
      " var/temp_page=0 for(var/datum/feed_channel/NP in news_content) temp_page++ - dat+="[NP.channel_name] \[page [temp_page+1]\]
      " + dat+=span_bold("[NP.channel_name]") + " \[page [temp_page+1]\]
      " dat+="
    " if(scribble_page==curr_page) dat+="
    There is a small scribble near the end of this page... It reads: \"[scribble]\"" @@ -76,16 +76,16 @@ obj/item/newspaper/attack_self(mob/user) pages++ if(important_message!=null) dat+="
    Wanted Issue:


    " - dat+="Criminal name: [important_message.author]
    " - dat+="Description: [important_message.body]
    " - dat+="Photo:: " + dat+=span_bold("Criminal name") + ": [important_message.author]
    " + dat+=span_bold("Description") + ": [important_message.body]
    " + dat+=span_bold("Photo:") + ": " if(important_message.img) user << browse_rsc(important_message.img, "tmp_photow.png") dat+="
    " else dat+="None" else - dat+="Apart from some uninteresting Classified ads, there's nothing on this page..." + dat+=span_italics("Apart from some uninteresting Classified ads, there's nothing on this page...") if(scribble_page==curr_page) dat+="
    There is a small scribble near the end of this page... It reads: \"[scribble]\"" dat+= "
    " @@ -96,7 +96,7 @@ obj/item/newspaper/attack_self(mob/user) human_user << browse(dat, "window=newspaper_main;size=300x400") onclose(human_user, "newspaper_main") else - to_chat(user, "The paper is full of intelligible symbols!") + to_chat(user, span_infoplain("The paper is full of intelligible symbols!")) obj/item/newspaper/Topic(href, href_list) var/mob/living/U = usr diff --git a/code/modules/news/newspaper.dm b/code/modules/news/newspaper.dm index cd0d0730797..09bc87b2eab 100644 --- a/code/modules/news/newspaper.dm +++ b/code/modules/news/newspaper.dm @@ -32,17 +32,17 @@ if(important_message) dat+="Contents:
      **Important Security Announcement** \[page [pages+2]\]
    " else - dat+="Other than the title, the rest of the newspaper is unprinted..." + dat+=span_italics("Other than the title, the rest of the newspaper is unprinted...") else dat+="Contents:
      " for(var/datum/feed_channel/NP in news_content) pages++ if(important_message) - dat+="**Important Security Announcement** \[page [pages+2]\]
      " + dat+=span_bold("**Important Security Announcement**") + " \[page [pages+2]\]
      " var/temp_page=0 for(var/datum/feed_channel/NP in news_content) temp_page++ - dat+="[NP.channel_name] \[page [temp_page+1]\]
      " + dat+=span_bold("[NP.channel_name]") + " " + span_normal("\[page [temp_page+1]\]") + "
      " dat+="
    " if(scribble_page==curr_page) dat+="
    There is a small scribble near the end of this page... It reads: \"[scribble]\"" @@ -77,16 +77,16 @@ pages++ if(important_message!=null) dat+="
    Wanted Issue:


    " - dat+="Criminal name: [important_message.author]
    " - dat+="Description: [important_message.body]
    " - dat+="Photo:: " + dat+=span_bold("Criminal name") + ": [important_message.author]
    " + dat+=span_bold("Description") + ": [important_message.body]
    " + dat+=span_bold("Photo:") + ": " if(important_message.img) user << browse_rsc(important_message.img, "tmp_photow.png") dat+="
    " else dat+="None" else - dat+="Apart from some uninteresting Classified ads, there's nothing on this page..." + dat+=span_italics("Apart from some uninteresting Classified ads, there's nothing on this page...") if(scribble_page==curr_page) dat+="
    There is a small scribble near the end of this page... It reads: \"[scribble]\"" dat+= "
    " @@ -97,7 +97,7 @@ human_user << browse(dat, "window=newspaper_main;size=300x400") onclose(human_user, "newspaper_main") else - to_chat(user, "The paper is full of intelligible symbols!") + to_chat(user, span_infoplain("The paper is full of intelligible symbols!")) /obj/item/newspaper/Topic(href, href_list) var/mob/living/U = usr diff --git a/code/modules/nifsoft/nif.dm b/code/modules/nifsoft/nif.dm index 76967fbf982..04dc280ffb5 100644 --- a/code/modules/nifsoft/nif.dm +++ b/code/modules/nifsoft/nif.dm @@ -126,7 +126,7 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable human = H human.nif = src stat = NIF_INSTALLING - H.verbs |= /mob/living/carbon/human/proc/set_nif_examine + add_verb(H, /mob/living/carbon/human/proc/set_nif_examine) menu = H.AddComponent(/datum/component/nif_menu) if(starting_software) for(var/path in starting_software) @@ -171,7 +171,7 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable stat = NIF_PREINSTALL vis_update() if(H) - H.verbs -= /mob/living/carbon/human/proc/set_nif_examine + remove_verb(H, /mob/living/carbon/human/proc/set_nif_examine) H.nif = null qdel_null(menu) human = null @@ -691,7 +691,7 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable set category = "OOC" if(!nif) - verbs -= /mob/living/carbon/human/proc/set_nif_examine + remove_verb(src, /mob/living/carbon/human/proc/set_nif_examine) to_chat(src,span_warning("You don't have a NIF, not sure why this was here.")) return diff --git a/code/modules/nifsoft/nif_tgui.dm b/code/modules/nifsoft/nif_tgui.dm index 4b57d577398..2c9227e5ad4 100644 --- a/code/modules/nifsoft/nif_tgui.dm +++ b/code/modules/nifsoft/nif_tgui.dm @@ -46,7 +46,7 @@ UnregisterSignal(screen_icon, COMSIG_CLICK) qdel_null(screen_icon) if(ishuman(parent)) - owner.verbs -= /mob/living/carbon/human/proc/nif_menu + remove_verb(owner, /mob/living/carbon/human/proc/nif_menu) /datum/component/nif_menu/proc/create_mob_button(mob/user) @@ -60,7 +60,7 @@ LAZYADD(HUD.other_important, screen_icon) user.client?.screen += screen_icon - user.verbs |= /mob/living/carbon/human/proc/nif_menu + add_verb(user, /mob/living/carbon/human/proc/nif_menu) /datum/component/nif_menu/proc/nif_menu_click(source, location, control, params, user) var/mob/living/carbon/human/H = user diff --git a/code/modules/nifsoft/nifsoft.dm b/code/modules/nifsoft/nifsoft.dm index 99247ec6001..fdb51c1ef9f 100644 --- a/code/modules/nifsoft/nifsoft.dm +++ b/code/modules/nifsoft/nifsoft.dm @@ -270,7 +270,7 @@ var/newlaws = tgui_input_text(user, "Please Input Laws", "Compliance Laws", laws, multiline = TRUE, prevent_enter = TRUE) newlaws = sanitize(newlaws,2048) if(newlaws) - to_chat(user,span_filter_notice("You set the laws to:
    [newlaws]")) + to_chat(user,span_filter_notice("You set the laws to:
    " + span_notice("[newlaws]"))) laws = newlaws /obj/item/disk/nifsoft/compliance/extra_params() diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm index bf9eca000a2..7e5783cb25d 100644 --- a/code/modules/nifsoft/software/13_soulcatcher.dm +++ b/code/modules/nifsoft/software/13_soulcatcher.dm @@ -46,14 +46,14 @@ if((. = ..())) //nif.set_flag(NIF_O_SCOTHERS,NIF_FLAGS_OTHER) //Only required on install if the flag is in the default setting_flags list defined few lines above. if(nif?.human) - nif.human.verbs |= /mob/proc/nsay - nif.human.verbs |= /mob/proc/nme + add_verb(nif.human, /mob/proc/nsay) + add_verb(nif.human, /mob/proc/nme) /datum/nifsoft/soulcatcher/uninstall() QDEL_LIST_NULL(brainmobs) if((. = ..()) && nif?.human) //Sometimes NIFs are deleted outside of a human - nif.human.verbs -= /mob/proc/nsay - nif.human.verbs -= /mob/proc/nme + remove_verb(nif.human, /mob/proc/nsay) + remove_verb(nif.human, /mob/proc/nme) /datum/nifsoft/soulcatcher/proc/save_settings() if(!nif) @@ -74,13 +74,13 @@ to_chat(nif.human, type = MESSAGE_TYPE_NIF, - html = span_nif("\[[icon2html(nif.big_icon, nif.human)]NIF\] Soulcatcher displays, \"[message]\"")) + html = span_nif(span_bold("\[[icon2html(nif.big_icon, nif.human)]NIF\]") + " " + span_bold("Soulcatcher") + " displays, \"" + span_notice(span_nif("[message]")) + "\"")) nif.human << sound for(var/mob/living/carbon/brain/caught_soul/CS as anything in brainmobs) to_chat(CS, type = MESSAGE_TYPE_NIF, - html = span_nif("\[[icon2html(nif.big_icon, CS.client)]NIF\] Soulcatcher displays, \"[message]\"")) + html = span_nif(span_bold("\[[icon2html(nif.big_icon, CS.client)]NIF\]") + " " + span_bold("Soulcatcher") + " displays, \"" + span_notice(span_nif("[message]")) + "\"")) CS << sound /datum/nifsoft/soulcatcher/proc/say_into(var/message, var/mob/living/sender, var/mob/eyeobj) @@ -88,17 +88,17 @@ //AR Projecting if(eyeobj) - sender.eyeobj.visible_message(span_game(span_say("[sender_name] says, \"[message]\""))) + sender.eyeobj.visible_message(span_game(span_say(span_bold("[sender_name]") + " says, \"[message]\""))) //Not AR Projecting else to_chat(nif.human, type = MESSAGE_TYPE_NIF, - html = span_nif("\[[icon2html(nif.big_icon, nif.human.client)]NIF\] [sender_name] speaks, \"[message]\"")) + html = span_nif(span_bold("\[[icon2html(nif.big_icon, nif.human.client)]NIF\]") + " " + span_bold("[sender_name]") + " speaks, \"[message]\"")) for(var/mob/living/carbon/brain/caught_soul/CS as anything in brainmobs) to_chat(CS, type = MESSAGE_TYPE_NIF, - html = span_nif("\[[icon2html(nif.big_icon, CS.client)]NIF\] [sender_name] speaks, \"[message]\"")) + html = span_nif(span_bold("\[[icon2html(nif.big_icon, CS.client)]NIF\]") + " " + span_bold("[sender_name]") + " speaks, \"[message]\"")) log_nsay(message,nif.human.real_name,sender) @@ -113,11 +113,11 @@ else to_chat(nif.human, type = MESSAGE_TYPE_NIF, - html = span_nif("\[[icon2html(nif.big_icon,nif.human.client)]NIF\] [sender_name] [message]")) + html = span_nif(span_bold("\[[icon2html(nif.big_icon,nif.human.client)]NIF\]") + " " + span_bold("[sender_name]") + " [message]")) for(var/mob/living/carbon/brain/caught_soul/CS as anything in brainmobs) to_chat(CS, type = MESSAGE_TYPE_NIF, - html = span_nif("\[[icon2html(nif.big_icon,CS.client)]NIF\] [sender_name] [message]")) + html = span_nif(span_bold("\[[icon2html(nif.big_icon,CS.client)]NIF\]") + " " + span_bold("[sender_name]") + " [message]")) log_nme(message,nif.human.real_name,sender) @@ -145,7 +145,7 @@ inside_flavor = new_flavor nif.notify("Updating VR environment...") for(var/mob/living/carbon/brain/caught_soul/CS as anything in brainmobs) - to_chat(CS,"Your surroundings change to...\n[inside_flavor]") + to_chat(CS,span_notice("Your surroundings change to...") + "\n[inside_flavor]") save_settings() return TRUE @@ -251,7 +251,7 @@ qdel(M) //Bye ghost //Give them a flavortext message - var/message = "Your vision fades in a haze of static, before returning.\n\ + var/message = span_notice("Your vision fades in a haze of static, before returning.") + "\n\ Around you, you see...\n\ [inside_flavor]" @@ -259,8 +259,8 @@ //Reminder on how this works to host if(brainmobs.len == 1) //Only spam this on the first one - to_chat(nif.human,"Your occupant's messages/actions can only be seen by you, and you can \ - send messages that only they can hear/see by using the NSay and NMe verbs (or the *nsay and *nme emotes).") + to_chat(nif.human,span_notice("Your occupant's messages/actions can only be seen by you, and you can \ + send messages that only they can hear/see by using the NSay and NMe verbs (or the *nsay and *nme emotes).")) //Announce to host and other minds notify_into("New mind loaded: [brainmob.name]") diff --git a/code/modules/nifsoft/software/15_misc.dm b/code/modules/nifsoft/software/15_misc.dm index 785f48b12de..3eb15d72ca6 100644 --- a/code/modules/nifsoft/software/15_misc.dm +++ b/code/modules/nifsoft/software/15_misc.dm @@ -105,11 +105,11 @@ /datum/nifsoft/compliance/activate() if((. = ..())) - to_chat(nif.human,span_danger("You are compelled to follow these rules:
    \n[laws]")) + to_chat(nif.human,span_danger("You are compelled to follow these rules:") + "\n" + span_notify("[laws]")) /datum/nifsoft/compliance/install() if((. = ..())) - to_chat(nif.human,span_danger("You feel suddenly compelled to follow these rules: \n[laws]")) + to_chat(nif.human,span_danger("You feel suddenly compelled to follow these rules:") + "\n" + span_notify("[laws]")) /datum/nifsoft/compliance/uninstall() nif.notify("ERROR! Unable to comply!",TRUE) diff --git a/code/modules/organs/internal/augment.dm b/code/modules/organs/internal/augment.dm index 8f6cc818fdf..495bb3a281a 100644 --- a/code/modules/organs/internal/augment.dm +++ b/code/modules/organs/internal/augment.dm @@ -88,7 +88,7 @@ var/obj/item/organ/my_augment = null // Used to reference the object's host organ. /obj/item/dropped(mob/user) - . = ..() + . = ..(user) if(src) if(destroy_on_drop && !QDELETED(src)) qdel(src) diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index dd4d9e97b02..1ef703cc9f9 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -548,11 +548,11 @@ var/list/organ_cache = list() if(!removed && organ_verbs && check_verb_compatability()) for(var/verb_path in organ_verbs) - owner.verbs |= verb_path + add_verb(owner, verb_path) else if(organ_verbs) for(var/verb_path in organ_verbs) if(!(verb_path in save_verbs)) - owner.verbs -= verb_path + remove_verb(owner, verb_path) return /obj/item/organ/proc/handle_organ_proc_special() // Called when processed. diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 9ec1dc24b59..d2d4b714dc9 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -173,12 +173,12 @@ switch(stage) if(0) if(istype(W,/obj/item/surgical/scalpel)) - user.visible_message(span_danger("[user] cuts [src] open with [W]!")) + user.visible_message(span_danger(span_bold("[user]") + " cuts [src] open with [W]!")) stage++ return if(1) if(istype(W,/obj/item/surgical/retractor)) - user.visible_message(span_danger("[user] cracks [src] open like an egg with [W]!")) + user.visible_message(span_danger(span_bold("[user]") + " cracks [src] open like an egg with [W]!")) stage++ return if(2) @@ -187,9 +187,9 @@ var/obj/item/removing = pick(contents) removing.loc = get_turf(user.loc) user.put_in_hands(removing) - user.visible_message(span_danger("[user] extracts [removing] from [src] with [W]!")) + user.visible_message(span_danger(span_bold("[user]") + " extracts [removing] from [src] with [W]!")) else - user.visible_message(span_danger("[user] fishes around fruitlessly in [src] with [W].")) + user.visible_message(span_danger(span_bold("[user]") + " fishes around fruitlessly in [src] with [W].")) return ..() @@ -221,7 +221,7 @@ dislocated = 1 if(istype(owner)) - owner.verbs |= /mob/living/carbon/human/proc/relocate + add_verb(owner, /mob/living/carbon/human/proc/relocate) /obj/item/organ/external/proc/relocate() if(dislocated == -1) @@ -235,7 +235,7 @@ for(var/obj/item/organ/external/limb in owner.organs) if(limb.dislocated == 1) return - owner.verbs -= /mob/living/carbon/human/proc/relocate + remove_verb(owner, /mob/living/carbon/human/proc/relocate) /obj/item/organ/external/update_health() damage = min(max_damage, (brute_dam + burn_dam)) @@ -477,9 +477,9 @@ var/fix_verb = (damage_amount > repair_amount) ? "patches" : "finishes patching" if(user == src.owner) var/datum/gender/T = gender_datums[user.get_visible_gender()] - user.visible_message("\The [user] [fix_verb] [damage_desc] on [T.his] [src.name] with [tool].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " [fix_verb] [damage_desc] on [T.his] [src.name] with [tool].")) else - user.visible_message("\The [user] [fix_verb] [damage_desc] on [owner]'s [src.name] with [tool].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " [fix_verb] [damage_desc] on [owner]'s [src.name] with [tool].")) return 1 @@ -1223,7 +1223,7 @@ Note that amputating the affected organ does in fact remove the infection from t owner.visible_message(span_danger("\The [W] sticks in the wound!")) implants += W owner.embedded_flag = 1 - owner.verbs += /mob/proc/yank_out_object + add_verb(owner, /mob/proc/yank_out_object) owner.throw_alert("embeddedobject", /obj/screen/alert/embeddedobject) W.add_blood(owner) if(ismob(W.loc)) diff --git a/code/modules/organs/subtypes/slime.dm b/code/modules/organs/subtypes/slime.dm index fa60367e93b..7cd0e3167bf 100644 --- a/code/modules/organs/subtypes/slime.dm +++ b/code/modules/organs/subtypes/slime.dm @@ -71,7 +71,7 @@ /obj/item/organ/internal/heart/grey/colormatch/slime/process() ..() if(!(QDELETED(src)) && src.loc != owner) - visible_message("\The [src] splatters!") + visible_message(span_infoplain(span_bold("\The [src]") + " splatters!")) var/turf/T = get_turf(src) var/obj/effect/decal/cleanable/blood/B = new (T) @@ -120,7 +120,7 @@ ..() if(!(QDELETED(src)) && src.loc != owner) - visible_message("\The [src] splatters!") + visible_message(span_infoplain(span_bold("\The [src]") + " splatters!")) var/turf/T = get_turf(src) var/obj/effect/decal/cleanable/blood/B = new (T) diff --git a/code/modules/overmap/disperser/disperser.dm b/code/modules/overmap/disperser/disperser.dm index c25f65d0dad..23e2bae204b 100644 --- a/code/modules/overmap/disperser/disperser.dm +++ b/code/modules/overmap/disperser/disperser.dm @@ -24,7 +24,7 @@ /obj/machinery/disperser/attackby(obj/item/I, mob/user) if(I && I.has_tool_quality(TOOL_WRENCH)) if(panel_open) - user.visible_message("\The [user] rotates \the [src] with \the [I].", + user.visible_message(span_infoplain(span_bold("\The [user]") + " rotates \the [src] with \the [I]."), span_notice("You rotate \the [src] with \the [I].")) set_dir(turn(dir, 90)) playsound(src, 'sound/items/jaws_pry.ogg', 50, 1) diff --git a/code/modules/overmap/overmap_object.dm b/code/modules/overmap/overmap_object.dm index ad87d50e8b4..c6f43c4702f 100644 --- a/code/modules/overmap/overmap_object.dm +++ b/code/modules/overmap/overmap_object.dm @@ -3,7 +3,6 @@ icon = 'icons/obj/overmap.dmi' icon_state = "object" - /// If set to TRUE will show up on ship sensors for detailed scans var/scannable /// Description for scans @@ -26,14 +25,52 @@ //light_system = MOVABLE_LIGHT light_on = FALSE + ///~~If we need to render a map for cameras and helms for this object~~ basically can you look at and use this as a ship or station. + var/render_map = FALSE + + // Stuff needed to render the map + var/map_name + var/obj/screen/map_view/cam_screen + /// All the plane masters that need to be applied. + var/list/cam_plane_masters + var/obj/screen/background/cam_background + /obj/effect/overmap/Initialize() . = ..() if(!global.using_map.use_overmap) return INITIALIZE_HINT_QDEL + if(render_map) // Initialize map objects + map_name = "overmap_[REF(src)]_map" + cam_screen = new + cam_screen.name = "screen" + cam_screen.assigned_map = map_name + cam_screen.del_on_map_removal = FALSE + cam_screen.screen_loc = "[map_name]:1,1" + + cam_plane_masters = get_tgui_plane_masters() + + for(var/obj/screen/instance as anything in cam_plane_masters) + instance.assigned_map = map_name + instance.del_on_map_removal = FALSE + instance.screen_loc = "[map_name]:CENTER" + + cam_background = new + cam_background.assigned_map = map_name + cam_background.del_on_map_removal = FALSE + update_screen() + /obj/effect/overmap/Destroy() real_appearance?.loc = null real_appearance = null + + if(cam_screen) + QDEL_NULL(cam_screen) + if(cam_plane_masters) + QDEL_LIST(cam_plane_masters) + if(cam_background) + QDEL_NULL(cam_background) + return ..() //Overlay of how this object should look on other skyboxes @@ -78,3 +115,21 @@ SSskybox.rebuild_skyboxes(other.map_z) for(var/obj/effect/overmap/visitable/O in loc) SSskybox.rebuild_skyboxes(O.map_z) + +/** + * Updates the screen object, which is displayed on all connected helms + */ +/obj/effect/overmap/proc/update_screen() + if(render_map) + var/list/visible_turfs = list() + for(var/turf/T in view(4, get_turf(src))) + visible_turfs += T + + var/list/bbox = get_bbox_of_atoms(visible_turfs) + var/size_x = bbox[3] - bbox[1] + 1 + var/size_y = bbox[4] - bbox[2] + 1 + + cam_screen?.vis_contents = visible_turfs + cam_background.icon_state = "clear" + cam_background.fill_rect(1, 1, size_x, size_y) + return TRUE diff --git a/code/modules/overmap/ships/computers/helm.dm b/code/modules/overmap/ships/computers/helm.dm index c012eb323cd..5895b3bb849 100644 --- a/code/modules/overmap/ships/computers/helm.dm +++ b/code/modules/overmap/ships/computers/helm.dm @@ -94,8 +94,23 @@ GLOBAL_LIST_EMPTY(all_waypoints) ui = SStgui.try_update_ui(user, src, ui) if(!ui) + user.client.register_map_obj(linked.cam_screen) + for(var/plane in linked.cam_plane_masters) + user.client.register_map_obj(plane) + user.client.register_map_obj(linked.cam_background) + ui = new(user, src, "OvermapHelm", "[linked.name] Helm Control") // 565, 545 ui.open() + addtimer(CALLBACK(src, PROC_REF(update_map)), 0.1 SECONDS) + +/obj/machinery/computer/ship/helm/proc/update_map() + linked.update_screen() + +/obj/machinery/computer/ship/helm/tgui_close(mob/user) + . = ..() + + // Unregister map objects + user.client?.clear_map(linked?.map_name) /obj/machinery/computer/ship/helm/tgui_data(mob/user) var/list/data = ..() @@ -103,6 +118,7 @@ GLOBAL_LIST_EMPTY(all_waypoints) var/turf/T = get_turf(linked) var/obj/effect/overmap/visitable/sector/current_sector = locate() in T + data["mapRef"] = linked?.map_name data["sector"] = current_sector ? current_sector.name : "Deep Space" data["sector_info"] = current_sector ? current_sector.desc : "Not Available" data["landed"] = linked.get_landed_info() @@ -155,6 +171,13 @@ GLOBAL_LIST_EMPTY(all_waypoints) return FALSE switch(action) + if("update_camera_view") + if(TIMER_COOLDOWN_RUNNING(src, COOLDOWN_SHIP_REFRESH)) + to_chat(usr, span_warning("You cannot refresh the map so often.")) + return + update_map() + TIMER_COOLDOWN_START(src, COOLDOWN_SHIP_REFRESH, 5 SECONDS) + . = TRUE if("add") var/datum/computer_file/data/waypoint/R = new() var/sec_name = tgui_input_text(usr, "Input navigation entry name", "New navigation entry", "Sector #[known_sectors.len]", MAX_NAME_LEN) diff --git a/code/modules/overmap/ships/ship.dm b/code/modules/overmap/ships/ship.dm index 9beeada88c8..8394744fc35 100644 --- a/code/modules/overmap/ships/ship.dm +++ b/code/modules/overmap/ships/ship.dm @@ -17,6 +17,7 @@ icon_state = "ship_nosprite" appearance_flags = TILE_BOUND|KEEP_TOGETHER|LONG_GLIDE //VOREStation Edit light_power = 4 + layer = OBJ_LAYER + 0.1 // make movables a little higher than regular sectors unknown_name = "unknown ship" unknown_state = "ship" @@ -46,6 +47,7 @@ /// Vis contents overlay holding the ship's vector when in motion var/obj/effect/overlay/vis/vector + render_map = TRUE /obj/effect/overmap/visitable/ship/Initialize() . = ..() @@ -217,6 +219,7 @@ pixel_y = new_pixel_y return animate(src, pixel_x = new_pixel_x, pixel_y = new_pixel_y, time = wait, flags = ANIMATION_END_NOW) + update_screen() // If we get moved, update our internal tracking to account for it /obj/effect/overmap/visitable/ship/Moved(atom/old_loc, direction, forced = FALSE) @@ -229,6 +232,7 @@ pixel_y = 0 position_x = ((loc.x - 1) * WORLD_ICON_SIZE) + MODULUS(position_x, WORLD_ICON_SIZE) position_y = ((loc.y - 1) * WORLD_ICON_SIZE) + MODULUS(position_y, WORLD_ICON_SIZE) + update_screen() /obj/effect/overmap/visitable/ship/update_icon() if(!is_still()) diff --git a/code/modules/overmap/turfs.dm b/code/modules/overmap/turfs.dm index 33c6b7cb042..6b264f3d0e8 100644 --- a/code/modules/overmap/turfs.dm +++ b/code/modules/overmap/turfs.dm @@ -11,6 +11,7 @@ var/global/list/map_sectors = list() icon = 'icons/turf/space.dmi' icon_state = "map" alpha = 200 + vis_flags = VIS_INHERIT_ID // disable VIS_INHERIT_PLANE /turf/unsimulated/map/edge opacity = 1 diff --git a/code/modules/paperwork/adminpaper.dm b/code/modules/paperwork/adminpaper.dm index 4b5154d84bf..aa944abb874 100644 --- a/code/modules/paperwork/adminpaper.dm +++ b/code/modules/paperwork/adminpaper.dm @@ -53,7 +53,7 @@ //VOREStation Edit/Add End //TODO change logo based on who you're contacting. text = "

    " - text += "[origin] Quantum Uplink Signed Message
    " + text += span_bold("[origin] Quantum Uplink Signed Message") + "
    " text += "Encryption key: [originhash]
    " text += "Challenge: [timehash]

    " diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm index d7c7ecadbfd..577b1e76811 100644 --- a/code/modules/paperwork/faxmachine.dm +++ b/code/modules/paperwork/faxmachine.dm @@ -414,9 +414,11 @@ Extracted to its own procedure for easier logic handling with paper bundles. . += P.info /obj/machinery/photocopier/faxmachine/proc/message_admins(var/mob/sender, var/faxname, var/obj/item/sent, var/reply_type, font_colour="#006100") - var/msg = "[faxname]: [get_options_bar(sender, 2,1,1)]" - msg += "(REPLY): " - msg += "Receiving '[sent.name]' via secure connection ... view message" + var/msg = "[faxname]: [get_options_bar(sender, 2,1,1)]" + msg += "(REPLY)" + msg = span_bold(msg) + ": " + msg += "Receiving '[sent.name]' via secure connection ... view message" + msg = span_notice(msg) for(var/client/C in GLOB.admins) if(check_rights((R_ADMIN|R_MOD|R_EVENT),0,C)) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index bff59857fc9..0b11efd1303 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -601,15 +601,15 @@ if(istype(P, /obj/item/stamp)) var/obj/item/stamp/the_stamp = P if(the_stamp.stamptext) - stamps += (stamps=="" ? "
    " : "
    ") + "[the_stamp.stamptext]" + stamps += (stamps=="" ? "
    " : "
    ") + span_italics("[the_stamp.stamptext]") else - stamps += (stamps=="" ? "
    " : "
    ") + "This paper has been stamped with the [the_stamp.name]." + stamps += (stamps=="" ? "
    " : "
    ") + span_italics("This paper has been stamped with the [the_stamp.name].") else var/obj/item/clothing/gloves/ring/seal/the_stamp = P if(the_stamp.stamptext) - stamps += (stamps=="" ? "
    " : "
    ") + "[the_stamp.stamptext]" + stamps += (stamps=="" ? "
    " : "
    ") + span_italics("[the_stamp.stamptext]") else - stamps += (stamps=="" ? "
    " : "
    ") + "This paper has been stamped with the [the_stamp.name]." + stamps += (stamps=="" ? "
    " : "
    ") + span_italics("This paper has been stamped with the [the_stamp.name].") if((!in_range(src, usr) && loc != user && !( istype(loc, /obj/item/clipboard) ) && loc.loc != user && user.get_active_hand() != P)) return var/image/stampoverlay = image('icons/obj/bureaucracy.dmi') @@ -662,15 +662,15 @@ /obj/item/paper/courtroom name = "A Crash Course in Legal SOP on SS13" - info = "Roles:
    \nThe " + JOB_DETECTIVE + " is basically the investigator and prosecutor.
    \nThe Staff Assistant can perform these functions with written authority from the " + JOB_DETECTIVE + ".
    \nThe " + JOB_SITE_MANAGER + "/HoP/" + JOB_WARDEN + " is ct as the judicial authority.
    \nThe " + JOB_SECURITY_OFFICER + "s are responsible for executing warrants, security during trial, and prisoner transport.
    \n
    \nInvestigative Phase:
    \nAfter the crime has been committed the " + JOB_DETECTIVE + "'s job is to gather evidence and try to ascertain not only who did it but what happened. He must take special care to catalogue everything and don't leave anything out. Write out all the evidence on paper. Make sure you take an appropriate number of fingerprints. IF he must ask someone questions he has permission to confront them. If the person refuses he can ask a judicial authority to write a subpoena for questioning. If again he fails to respond then that person is to be jailed as insubordinate and obstructing justice. Said person will be released after he cooperates.
    \n
    \nONCE the FT has a clear idea as to who the criminal is he is to write an arrest warrant on the piece of paper. IT MUST LIST THE CHARGES. The FT is to then go to the judicial authority and explain a small version of his case. If the case is moderately acceptable the authority should sign it. Security must then execute said warrant.
    \n
    \nPre-Pre-Trial Phase:
    \nNow a legal representative must be presented to the defendant if said defendant requests one. That person and the defendant are then to be given time to meet (in the jail IS ACCEPTABLE). The defendant and his lawyer are then to be given a copy of all the evidence that will be presented at trial (rewriting it all on paper is fine). THIS IS CALLED THE DISCOVERY PACK. With a few exceptions, THIS IS THE ONLY EVIDENCE BOTH SIDES MAY USE AT TRIAL. IF the prosecution will be seeking the death penalty it MUST be stated at this time. ALSO if the defense will be seeking not guilty by mental defect it must state this at this time to allow ample time for examination.
    \nNow at this time each side is to compile a list of witnesses. By default, the defendant is on both lists regardless of anything else. Also the defense and prosecution can compile more evidence beforehand BUT in order for it to be used the evidence MUST also be given to the other side.\nThe defense has time to compile motions against some evidence here.
    \nPossible Motions:
    \n1. Invalidate Evidence- Something with the evidence is wrong and the evidence is to be thrown out. This includes irrelevance or corrupt security.
    \n2. Free Movement- Basically the defendant is to be kept uncuffed before and during the trial.
    \n3. Subpoena Witness- If the defense presents god reasons for needing a witness but said person fails to cooperate then a subpoena is issued.
    \n4. Drop the Charges- Not enough evidence is there for a trial so the charges are to be dropped. The FT CAN RETRY but the judicial authority must carefully reexamine the new evidence.
    \n5. Declare Incompetent- Basically the defendant is insane. Once this is granted a medical official is to examine the patient. If he is indeed insane he is to be placed under care of the medical staff until he is deemed competent to stand trial.
    \n
    \nALL SIDES MOVE TO A COURTROOM
    \nPre-Trial Hearings:
    \nA judicial authority and the 2 sides are to meet in the trial room. NO ONE ELSE BESIDES A SECURITY DETAIL IS TO BE PRESENT. The defense submits a plea. If the plea is guilty then proceed directly to sentencing phase. Now the sides each present their motions to the judicial authority. He rules on them. Each side can debate each motion. Then the judicial authority gets a list of crew members. He first gets a chance to look at them all and pick out acceptable and available jurors. Those jurors are then called over. Each side can ask a few questions and dismiss jurors they find too biased. HOWEVER before dismissal the judicial authority MUST agree to the reasoning.
    \n
    \nThe Trial:
    \nThe trial has three phases.
    \n1. Opening Arguments- Each side can give a short speech. They may not present ANY evidence.
    \n2. Witness Calling/Evidence Presentation- The prosecution goes first and is able to call the witnesses on his approved list in any order. He can recall them if necessary. During the questioning the lawyer may use the evidence in the questions to help prove a point. After every witness the other side has a chance to cross-examine. After both sides are done questioning a witness the prosecution can present another or recall one (even the EXACT same one again!). After prosecution is done the defense can call witnesses. After the initial cases are presented both sides are free to call witnesses on either list.
    \nFINALLY once both sides are done calling witnesses we move onto the next phase.
    \n3. Closing Arguments- Same as opening.
    \nThe jury then deliberates IN PRIVATE. THEY MUST ALL AGREE on a verdict. REMEMBER: They mix between some charges being guilty and others not guilty (IE if you supposedly killed someone with a gun and you unfortunately picked up a gun without authorization then you CAN be found not guilty of murder BUT guilty of possession of illegal weaponry.). Once they have agreed they present their verdict. If unable to reach a verdict and feel they will never they call a deadlocked jury and we restart at Pre-Trial phase with an entirely new set of jurors.
    \n
    \nSentencing Phase:
    \nIf the death penalty was sought (you MUST have gone through a trial for death penalty) then skip to the second part.
    \nI. Each side can present more evidence/witnesses in any order. There is NO ban on emotional aspects or anything. The prosecution is to submit a suggested penalty. After all the sides are done then the judicial authority is to give a sentence.
    \nII. The jury stays and does the same thing as I. Their sole job is to determine if the death penalty is applicable. If NOT then the judge selects a sentence.
    \n
    \nTADA you're done. Security then executes the sentence and adds the applicable convictions to the person's record.
    \n" + info = span_bold("Roles:") + "
    \nThe " + JOB_DETECTIVE + " is basically the investigator and prosecutor.
    \nThe Staff Assistant can perform these functions with written authority from the " + JOB_DETECTIVE + ".
    \nThe " + JOB_SITE_MANAGER + "/HoP/" + JOB_WARDEN + " is ct as the judicial authority.
    \nThe " + JOB_SECURITY_OFFICER + "s are responsible for executing warrants, security during trial, and prisoner transport.
    \n
    \nInvestigative Phase:
    \nAfter the crime has been committed the " + JOB_DETECTIVE + "'s job is to gather evidence and try to ascertain not only who did it but what happened. He must take special care to catalogue everything and don't leave anything out. Write out all the evidence on paper. Make sure you take an appropriate number of fingerprints. IF he must ask someone questions he has permission to confront them. If the person refuses he can ask a judicial authority to write a subpoena for questioning. If again he fails to respond then that person is to be jailed as insubordinate and obstructing justice. Said person will be released after he cooperates.
    \n
    \nONCE the FT has a clear idea as to who the criminal is he is to write an arrest warrant on the piece of paper. IT MUST LIST THE CHARGES. The FT is to then go to the judicial authority and explain a small version of his case. If the case is moderately acceptable the authority should sign it. Security must then execute said warrant.
    \n
    \nPre-Pre-Trial Phase:
    \nNow a legal representative must be presented to the defendant if said defendant requests one. That person and the defendant are then to be given time to meet (in the jail IS ACCEPTABLE). The defendant and his lawyer are then to be given a copy of all the evidence that will be presented at trial (rewriting it all on paper is fine). THIS IS CALLED THE DISCOVERY PACK. With a few exceptions, THIS IS THE ONLY EVIDENCE BOTH SIDES MAY USE AT TRIAL. IF the prosecution will be seeking the death penalty it MUST be stated at this time. ALSO if the defense will be seeking not guilty by mental defect it must state this at this time to allow ample time for examination.
    \nNow at this time each side is to compile a list of witnesses. By default, the defendant is on both lists regardless of anything else. Also the defense and prosecution can compile more evidence beforehand BUT in order for it to be used the evidence MUST also be given to the other side.\nThe defense has time to compile motions against some evidence here.
    \nPossible Motions:
    \n1. Invalidate Evidence- Something with the evidence is wrong and the evidence is to be thrown out. This includes irrelevance or corrupt security.
    \n2. Free Movement- Basically the defendant is to be kept uncuffed before and during the trial.
    \n3. Subpoena Witness- If the defense presents god reasons for needing a witness but said person fails to cooperate then a subpoena is issued.
    \n4. Drop the Charges- Not enough evidence is there for a trial so the charges are to be dropped. The FT CAN RETRY but the judicial authority must carefully reexamine the new evidence.
    \n5. Declare Incompetent- Basically the defendant is insane. Once this is granted a medical official is to examine the patient. If he is indeed insane he is to be placed under care of the medical staff until he is deemed competent to stand trial.
    \n
    \nALL SIDES MOVE TO A COURTROOM
    \nPre-Trial Hearings:
    \nA judicial authority and the 2 sides are to meet in the trial room. NO ONE ELSE BESIDES A SECURITY DETAIL IS TO BE PRESENT. The defense submits a plea. If the plea is guilty then proceed directly to sentencing phase. Now the sides each present their motions to the judicial authority. He rules on them. Each side can debate each motion. Then the judicial authority gets a list of crew members. He first gets a chance to look at them all and pick out acceptable and available jurors. Those jurors are then called over. Each side can ask a few questions and dismiss jurors they find too biased. HOWEVER before dismissal the judicial authority MUST agree to the reasoning.
    \n
    \nThe Trial:
    \nThe trial has three phases.
    \n1. Opening Arguments- Each side can give a short speech. They may not present ANY evidence.
    \n2. Witness Calling/Evidence Presentation- The prosecution goes first and is able to call the witnesses on his approved list in any order. He can recall them if necessary. During the questioning the lawyer may use the evidence in the questions to help prove a point. After every witness the other side has a chance to cross-examine. After both sides are done questioning a witness the prosecution can present another or recall one (even the EXACT same one again!). After prosecution is done the defense can call witnesses. After the initial cases are presented both sides are free to call witnesses on either list.
    \nFINALLY once both sides are done calling witnesses we move onto the next phase.
    \n3. Closing Arguments- Same as opening.
    \nThe jury then deliberates IN PRIVATE. THEY MUST ALL AGREE on a verdict. REMEMBER: They mix between some charges being guilty and others not guilty (IE if you supposedly killed someone with a gun and you unfortunately picked up a gun without authorization then you CAN be found not guilty of murder BUT guilty of possession of illegal weaponry.). Once they have agreed they present their verdict. If unable to reach a verdict and feel they will never they call a deadlocked jury and we restart at Pre-Trial phase with an entirely new set of jurors.
    \n
    \nSentencing Phase:
    \nIf the death penalty was sought (you MUST have gone through a trial for death penalty) then skip to the second part.
    \nI. Each side can present more evidence/witnesses in any order. There is NO ban on emotional aspects or anything. The prosecution is to submit a suggested penalty. After all the sides are done then the judicial authority is to give a sentence.
    \nII. The jury stays and does the same thing as I. Their sole job is to determine if the death penalty is applicable. If NOT then the judge selects a sentence.
    \n
    \nTADA you're done. Security then executes the sentence and adds the applicable convictions to the person's record.
    \n" /obj/item/paper/hydroponics name = "Greetings from Billy Bob" - info = "Hey fellow botanist!
    \n
    \nI didn't trust the station folk so I left
    \na couple of weeks ago. But here's some
    \ninstructions on how to operate things here.
    \nYou can grow plants and each iteration they become
    \nstronger, more potent and have better yield, if you
    \nknow which ones to pick. Use your botanist's analyzer
    \nfor that. You can turn harvested plants into seeds
    \nat the seed extractor, and replant them for better stuff!
    \nSometimes if the weed level gets high in the tray
    \nmutations into different mushroom or weed species have
    \nbeen witnessed. On the rare occassion even weeds mutate!
    \n
    \nEither way, have fun!
    \n
    \nBest regards,
    \nBilly Bob Johnson.
    \n
    \nPS.
    \nHere's a few tips:
    \nIn nettles, potency = damage
    \nIn amanitas, potency = deadliness + side effect
    \nIn Liberty caps, potency = drug power + effect
    \nIn chilis, potency = heat
    \nNutrients keep mushrooms alive!
    \nWater keeps weeds such as nettles alive!
    \nAll other plants need both." + info = span_bold("Hey fellow botanist!") + "
    \n
    \nI didn't trust the station folk so I left
    \na couple of weeks ago. But here's some
    \ninstructions on how to operate things here.
    \nYou can grow plants and each iteration they become
    \nstronger, more potent and have better yield, if you
    \nknow which ones to pick. Use your botanist's analyzer
    \nfor that. You can turn harvested plants into seeds
    \nat the seed extractor, and replant them for better stuff!
    \nSometimes if the weed level gets high in the tray
    \nmutations into different mushroom or weed species have
    \nbeen witnessed. On the rare occassion even weeds mutate!
    \n
    \nEither way, have fun!
    \n
    \nBest regards,
    \nBilly Bob Johnson.
    \n
    \nPS.
    \nHere's a few tips:
    \nIn nettles, potency = damage
    \nIn amanitas, potency = deadliness + side effect
    \nIn Liberty caps, potency = drug power + effect
    \nIn chilis, potency = heat
    \nNutrients keep mushrooms alive!
    \nWater keeps weeds such as nettles alive!
    \nAll other plants need both." /obj/item/paper/djstation name = "DJ Listening Outpost" - info = "Welcome new owner!

    You have purchased the latest in listening equipment. The telecommunication setup we created is the best in listening to common and private radio fequencies. Here is a step by step guide to start listening in on those saucy radio channels:
    1. Equip yourself with a multi-tool
    2. Use the multitool on each machine, that is the broadcaster, receiver and the relay.
    3. Turn all the machines on, it has already been configured for you to listen on.
    Simple as that. Now to listen to the private channels, you'll have to configure the intercoms, located on the front desk. Here is a list of frequencies for you to listen on.
    • 145.7 - Common Channel
    • 144.7 - Private AI Channel
    • 135.9 - Security Channel
    • 135.7 - Engineering Channel
    • 135.5 - Medical Channel
    • 135.3 - Command Channel
    • 135.1 - Science Channel
    • 134.9 - Mining Channel
    • 134.7 - Cargo Channel
    • " + info = span_bold("Welcome new owner!") + "

      You have purchased the latest in listening equipment. The telecommunication setup we created is the best in listening to common and private radio fequencies. Here is a step by step guide to start listening in on those saucy radio channels:
      1. Equip yourself with a multi-tool
      2. Use the multitool on each machine, that is the broadcaster, receiver and the relay.
      3. Turn all the machines on, it has already been configured for you to listen on.
      Simple as that. Now to listen to the private channels, you'll have to configure the intercoms, located on the front desk. Here is a list of frequencies for you to listen on.
      • 145.7 - Common Channel
      • 144.7 - Private AI Channel
      • 135.9 - Security Channel
      • 135.7 - Engineering Channel
      • 135.5 - Medical Channel
      • 135.3 - Command Channel
      • 135.1 - Science Channel
      • 134.9 - Mining Channel
      • 134.7 - Cargo Channel
      • " /obj/item/paper/flag icon_state = "flag_neutral" diff --git a/code/modules/paperwork/paper_sticky.dm b/code/modules/paperwork/paper_sticky.dm index eaf25907ca2..fb26569dfb3 100644 --- a/code/modules/paperwork/paper_sticky.dm +++ b/code/modules/paperwork/paper_sticky.dm @@ -37,7 +37,7 @@ var/text = sanitizeSafe(tgui_input_text(usr, "What would you like to write?", null, null, writing_space), writing_space) if(!text || thing.loc != user || (!Adjacent(user) && loc != user) || user.incapacitated()) return - user.visible_message("\The [user] jots a note down on \the [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " jots a note down on \the [src].")) written_by = user.ckey if(written_text) written_text = "[written_text] [text]" diff --git a/code/modules/paperwork/silicon_photography.dm b/code/modules/paperwork/silicon_photography.dm index 85853eee2cc..ce7fee79ecd 100644 --- a/code/modules/paperwork/silicon_photography.dm +++ b/code/modules/paperwork/silicon_photography.dm @@ -81,11 +81,11 @@ /obj/item/camera/siliconcam/proc/camera_mode_off() src.in_camera_mode = 0 - to_chat(usr, "Camera Mode deactivated") + to_chat(usr, span_infoplain(span_bold("Camera Mode deactivated"))) /obj/item/camera/siliconcam/proc/camera_mode_on() src.in_camera_mode = 1 - to_chat(usr, "Camera Mode activated") + to_chat(usr, span_infoplain(span_bold("Camera Mode activated"))) /obj/item/camera/siliconcam/ai_camera/printpicture(mob/user, obj/item/photo/p) injectaialbum(p) @@ -119,7 +119,7 @@ aiCamera.deletepicture() /mob/living/silicon/robot/proc/take_image() - set category ="Robot Commands" + set category ="Abilities.Silicon" set name = "Take Image" set desc = "Takes an image" @@ -127,7 +127,7 @@ aiCamera.toggle_camera_mode() /mob/living/silicon/robot/proc/view_images() - set category ="Robot Commands" + set category ="Abilities.Silicon" set name = "View Images" set desc = "View images" @@ -135,7 +135,7 @@ aiCamera.viewpictures() /mob/living/silicon/robot/proc/delete_images() - set category = "Robot Commands" + set category = "Abilities.Silicon" set name = "Delete Image" set desc = "Delete a local image" diff --git a/code/modules/pda/ai.dm b/code/modules/pda/ai.dm index a67d469d4e7..b3f889f02fc 100644 --- a/code/modules/pda/ai.dm +++ b/code/modules/pda/ai.dm @@ -22,7 +22,7 @@ //AI verb and proc for sending PDA messages. /obj/item/pda/ai/verb/cmd_pda_open_ui() - set category = "AI IM" + set category = "Abilities.AI_IM" set name = "Use PDA" set src in usr diff --git a/code/modules/pda/messenger.dm b/code/modules/pda/messenger.dm index 806eb0910bf..15c0f2227a1 100644 --- a/code/modules/pda/messenger.dm +++ b/code/modules/pda/messenger.dm @@ -175,7 +175,7 @@ to_chat(U, "ERROR: Cannot reach recipient.") return useMS.send_pda_message("[P.owner]","[pda.owner]","[t]") - pda.investigate_log(span_game(span_say("PDA Message - [U.key] - [pda.owner] -> [P.owner]: [t]")), "pda") + pda.investigate_log(span_game(span_say("PDA Message - " + span_name("[U.key] - [pda.owner]") + " -> " + span_name("[P.owner]") + ": " + span_message("[t]"))), "pda") receive_message(list("sent" = 1, "owner" = "[P.owner]", "job" = "[P.ownjob]", "message" = "[t]", "target" = "\ref[P]"), "\ref[P]") PM.receive_message(list("sent" = 0, "owner" = "[pda.owner]", "job" = "[pda.ownjob]", "message" = "[t]", "target" = "\ref[pda]"), "\ref[pda]") @@ -223,7 +223,7 @@ var/owner = data["owner"] var/job = data["job"] var/message = data["message"] - notify("Message from [owner] ([job]), \"[message]\" (Reply)") + notify(span_bold("Message from [owner] ([job]), ") + "\"[message]\" (Reply)") /datum/data/pda/app/messenger/multicast /datum/data/pda/app/messenger/multicast/receive_message(list/data, ref) diff --git a/code/modules/pda/utilities.dm b/code/modules/pda/utilities.dm index 41bfef4e428..0fdc380fe61 100644 --- a/code/modules/pda/utilities.dm +++ b/code/modules/pda/utilities.dm @@ -45,16 +45,14 @@ icon = "heart-o" /datum/data/pda/utility/scanmode/medical/scan_mob(mob/living/C as mob, mob/living/user as mob) - C.visible_message("[user] has analyzed [C]'s vitals!") + C.visible_message(span_warning("[user] has analyzed [C]'s vitals!")) user.show_message(span_notice("Analyzing Results for [C]:")) user.show_message(span_notice(" Overall Status: [C.stat > 1 ? "dead" : "[C.health - C.halloss]% healthy"]"), 1) - user.show_message(text(" Damage Specifics: []-[]-[]-[]", - (C.getOxyLoss() > 50) ? "warning" : "", C.getOxyLoss(), - (C.getToxLoss() > 50) ? "warning" : "", C.getToxLoss(), - (C.getFireLoss() > 50) ? "warning" : "", C.getFireLoss(), - (C.getBruteLoss() > 50) ? "warning" : "", C.getBruteLoss() - ), 1) + user.show_message(span_notice(" Damage Specifics:") + " [(C.getOxyLoss() > 50) ? span_warning(C.getOxyLoss()) : C.getOxyLoss()]-\ + [(C.getToxLoss() > 50) ? span_warning(C.getToxLoss()) : C.getToxLoss()]-\ + [(C.getFireLoss() > 50) ? span_warning(C.getFireLoss()) : C.getFireLoss()]-\ + [(C.getBruteLoss() > 50) ? span_warning(C.getBruteLoss()) : C.getBruteLoss()]", 1) user.show_message(span_notice(" Key: Suffocation/Toxin/Burns/Brute"), 1) user.show_message(span_notice(" Body Temperature: [C.bodytemperature-T0C]°C ([C.bodytemperature*1.8-459.67]°F)"), 1) if(C.tod && (C.stat == DEAD || (C.status_flags & FAKEDEATH))) @@ -65,8 +63,8 @@ user.show_message(span_notice("Localized Damage, Brute/Burn:"),1) if(length(damaged)>0) for(var/obj/item/organ/external/org in damaged) - user.show_message(text(" []: []-[]", - capitalize(org.name), (org.brute_dam > 0) ? "warning" : "notice", org.brute_dam, (org.burn_dam > 0) ? "warning" : "notice", org.burn_dam),1) + user.show_message(span_notice(" [capitalize(org.name)]: [(org.brute_dam > 0) ? span_warning("[org.brute_dam]") : span_notice("[org.brute_dam]")]-\ + [(org.burn_dam > 0) ? span_warning("[org.burn_dam]") : span_notice("[org.burn_dam]")]"), 1) else user.show_message(span_notice(" Limbs are OK."),1) @@ -78,9 +76,9 @@ if(istype(C, /mob/living/carbon/human)) var/mob/living/carbon/human/H = C if(!istype(H.dna, /datum/dna)) - to_chat(user, "No fingerprints found on [H]") + to_chat(user, span_notice("No fingerprints found on [H]")) else - to_chat(user, "[H]'s Fingerprints: [md5(H.dna.uni_identity)]") + to_chat(user, span_notice("[H]'s Fingerprints: [md5(H.dna.uni_identity)]")) scan_blood(C, user) /datum/data/pda/utility/scanmode/dna/scan_atom(atom/A as mob|obj|turf|area, mob/user as mob) @@ -88,27 +86,27 @@ /datum/data/pda/utility/scanmode/dna/proc/scan_blood(atom/A, mob/user) if(!A.blood_DNA) - to_chat(user, "No blood found on [A]") + to_chat(user, span_notice("No blood found on [A]")) if(A.blood_DNA) qdel(A.blood_DNA) else - to_chat(user, "Blood found on [A]. Analysing...") + to_chat(user, span_notice("Blood found on [A]. Analysing...")) spawn(15) for(var/blood in A.blood_DNA) - to_chat(user, "Blood type: [A.blood_DNA[blood]]\nDNA: [blood]") + to_chat(user, span_notice("Blood type: [A.blood_DNA[blood]]\nDNA: [blood]")) /datum/data/pda/utility/scanmode/halogen base_name = "Halogen Counter" icon = "exclamation-circle" /datum/data/pda/utility/scanmode/halogen/scan_mob(mob/living/C as mob, mob/living/user as mob) - C.visible_message("[user] has analyzed [C]'s radiation levels!") + C.visible_message(span_warning("[user] has analyzed [C]'s radiation levels!")) - user.show_message("Analyzing Results for [C]:") + user.show_message(span_notice("Analyzing Results for [C]:")) if(C.radiation) - user.show_message("Radiation Level: [C.radiation > 0 ? "[C.radiation]" : "0"]") + user.show_message(span_notice("Radiation Level: [C.radiation > 0 ? span_danger("[C.radiation]") : "0"]")) else - user.show_message("No radiation detected.") + user.show_message(span_notice("No radiation detected.")) /datum/data/pda/utility/scanmode/reagent base_name = "Reagent Scanner" @@ -189,7 +187,7 @@ var/scannedtitle = "Paper" if(!isnull(notes.notetitle) && notes.notetitle != "") scannedtitle = "'[notes.notetitle]'" - to_chat(user, "[scannedtitle] scanned to Notekeeper in note [alphabet_uppercase[notes.currentnote]].")//concept of scanning paper copyright brainoblivion 2009 + to_chat(user, span_notice("[scannedtitle] scanned to Notekeeper in note [alphabet_uppercase[notes.currentnote]]."))//concept of scanning paper copyright brainoblivion 2009 else - to_chat(user, "Error scanning [A].") + to_chat(user, span_warning("Error scanning [A].")) diff --git a/code/modules/persistence/graffiti.dm b/code/modules/persistence/graffiti.dm index a6b150b6043..03c634c277d 100644 --- a/code/modules/persistence/graffiti.dm +++ b/code/modules/persistence/graffiti.dm @@ -47,7 +47,7 @@ var/obj/item/weldingtool/welder = thing.get_welder() if(welder.isOn() && welder.remove_fuel(0,user) && do_after(user, 5, src) && !QDELETED(src)) playsound(src.loc, welder.usesound, 50, 1) - user.visible_message("\The [user] clears away some graffiti.") + user.visible_message(span_infoplain(span_bold("\The [user]") + " clears away some graffiti.")) qdel(src) else if(thing.sharp) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 551ad6b024f..0fd0cdfc0c5 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -742,7 +742,7 @@ GLOBAL_LIST_EMPTY(apcs) if(H.species.can_shred(H)) user.setClickCooldown(user.get_attack_speed()) - user.visible_message("[user.name] slashes at the [name]!", span_notice("You slash at the [name]!")) + user.visible_message(span_warning("[user.name] slashes at the [name]!"), span_notice("You slash at the [name]!")) playsound(src, 'sound/weapons/slash.ogg', 100, 1) var/allcut = wires.is_all_cut() @@ -750,12 +750,12 @@ GLOBAL_LIST_EMPTY(apcs) if(beenhit >= pick(3, 4) && wiresexposed != 1) wiresexposed = 1 update_icon() - visible_message("The [name]'s cover flies open, exposing the wires!") + visible_message(span_warning("The [name]'s cover flies open, exposing the wires!")) else if(wiresexposed == 1 && allcut == 0) wires.cut_all() update_icon() - visible_message("The [name]'s wires are shredded!") + visible_message(span_warning("The [name]'s wires are shredded!")) else beenhit += 1 return diff --git a/code/modules/power/fusion/core/_core.dm b/code/modules/power/fusion/core/_core.dm index 391e909e8e9..7eaee107a50 100644 --- a/code/modules/power/fusion/core/_core.dm +++ b/code/modules/power/fusion/core/_core.dm @@ -67,7 +67,7 @@ GLOBAL_LIST_EMPTY(fusion_cores) if(Output.get_pairing()) reagents.trans_to_holder(Output.reagents, Output.reagents.maximum_volume) if(prob(5)) - visible_message("\The [src] gurgles as it exports fluid.") + visible_message(span_infoplain(span_bold("\The [src]") + " gurgles as it exports fluid.")) if(owned_field) @@ -131,7 +131,7 @@ GLOBAL_LIST_EMPTY(fusion_cores) /obj/machinery/power/fusion_core/attack_hand(var/mob/user) if(!Adjacent(user)) // As funny as it was for the AI to hug-kill the tokamak field from a distance... return - visible_message("\The [user] hugs \the [src] to make it feel better!") + visible_message(span_infoplain(span_bold("\The [user]") + " hugs \the [src] to make it feel better!")) if(owned_field) Shutdown() diff --git a/code/modules/power/fusion/core/core_control.dm b/code/modules/power/fusion/core/core_control.dm index 47b85b21baf..2965228b3a6 100644 --- a/code/modules/power/fusion/core/core_control.dm +++ b/code/modules/power/fusion/core/core_control.dm @@ -63,16 +63,16 @@ if(cur_viewed_device && (cur_viewed_device.id_tag != id_tag || get_dist(src, cur_viewed_device) > scan_range)) cur_viewed_device = null - var/dat = "Core Control #[id_tag]
        " + var/dat = span_bold("Core Control #[id_tag]") + "
        " if(cur_viewed_device) dat += {" Back to overview
        - Device ident '[cur_viewed_device.id_tag]' [cur_viewed_device.owned_field ? "Active" : "Inactive"].
        + Device ident '[cur_viewed_device.id_tag]' [cur_viewed_device.owned_field ? span_green("Active") : span_red("Inactive")].
        Power status: [cur_viewed_device.avail()]/[cur_viewed_device.active_power_usage] W

        - Field Status: [cur_viewed_device.owned_field ? "Online" : "Offline"].
        - Reactant Dump: [cur_viewed_device.reactant_dump ? "Active" : "Inactive"].
        + Field Status: [cur_viewed_device.owned_field ? span_green("Online") : span_red("Offline")].
        + Reactant Dump: [cur_viewed_device.reactant_dump ? span_gren("Active") : span_red("Inactive")].

        Field power density (W.m-3):
        ---- @@ -123,12 +123,12 @@ var/status var/can_access = 1 if(!check_core_status(C)) - status = "Unresponsive" + status = span_red("Unresponsive") can_access = 0 else if(C.avail() < C.active_power_usage) - status = "Underpowered" + status = span_orange("Underpowered") else - status = "Good" + status = span_green("Good") dat += {"
    @@ -138,7 +138,7 @@ if(!can_access) dat += {" - + "} else dat += {" @@ -149,7 +149,7 @@ "} else - dat += "No electromagnetic field generators connected." + dat += span_red("No electromagnetic field generators connected.") var/datum/browser/popup = new(user, "fusion_control", name, 500, 400, src) popup.set_content(dat) diff --git a/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm b/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm index 48a59da413a..31e1b9dfcee 100644 --- a/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm +++ b/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm @@ -26,14 +26,14 @@ to_chat(user, span_warning("You need at least three hundred units of material to form a fuel rod.")) return 1 var/datum/reagent/R = thing.reagents.reagent_list[1] - visible_message("\The [src] compresses the contents of \the [thing] into a new fuel assembly.") + visible_message(span_infoplain(span_bold("\The [src]") + " compresses the contents of \the [thing] into a new fuel assembly.")) var/obj/item/fuel_assembly/F = new(get_turf(src), R.id, R.color) thing.reagents.remove_reagent(R.id, R.volume) user.put_in_hands(F) else if(istype(thing, /obj/machinery/power/supermatter)) var/obj/item/fuel_assembly/F = new(get_turf(src), "supermatter") - visible_message("\The [src] compresses \the [thing] into a new fuel assembly.") + visible_message(span_infoplain(span_bold("\The [src]") + " compresses \the [thing] into a new fuel assembly.")) qdel(thing) user.put_in_hands(F) return 1 @@ -58,7 +58,7 @@ to_chat(user, span_warning("You need at least 25 [mat.sheet_plural_name] to make a fuel rod.")) return var/obj/item/fuel_assembly/F = new(get_turf(src), mat.name) - visible_message("\The [src] compresses the [mat.use_name] into a new fuel assembly.") + visible_message(span_infoplain(span_bold("\The [src]") + " compresses the [mat.use_name] into a new fuel assembly.")) M.use(FUSION_ROD_SHEET_AMT) user.put_in_hands(F) diff --git a/code/modules/power/fusion/fuel_assembly/fuel_control.dm b/code/modules/power/fusion/fuel_assembly/fuel_control.dm index 5f66fc52d82..2978b378258 100644 --- a/code/modules/power/fusion/fuel_assembly/fuel_control.dm +++ b/code/modules/power/fusion/fuel_assembly/fuel_control.dm @@ -50,7 +50,7 @@ to_chat(user, span_warning("This console has not been assigned an ident tag. Please contact your system administrator or conduct a manual update with a standard multitool.")) return - var/dat = "Reactor Core Fuel Control #[id_tag]
    " + var/dat = span_bold("Reactor Core Fuel Control #[id_tag]") + "
    " dat += {"
    [V]" + HTML += "
    " + span_bold("[V]") HTML += "
    ERROR" + span_red("ERROR") + "
    @@ -67,9 +67,9 @@ dat += "" if(I.stat & (BROKEN|NOPOWER)) - dat += "" - dat += "" - dat += "" + dat += "" + dat += "" + dat += "" else dat += "" if(I.cur_assembly) diff --git a/code/modules/power/fusion/fuel_assembly/fuel_injector.dm b/code/modules/power/fusion/fuel_assembly/fuel_injector.dm index 81e95b0df0f..110ebb199a4 100644 --- a/code/modules/power/fusion/fuel_assembly/fuel_injector.dm +++ b/code/modules/power/fusion/fuel_assembly/fuel_injector.dm @@ -57,9 +57,9 @@ GLOBAL_LIST_EMPTY(fuel_injectors) if(cur_assembly) cur_assembly.forceMove(get_turf(src)) - visible_message("\The [user] swaps \the [src]'s [cur_assembly] for \a [W].") + visible_message(span_infoplain(span_bold("\The [user]") + " swaps \the [src]'s [cur_assembly] for \a [W].")) else - visible_message("\The [user] inserts \a [W] into \the [src].") + visible_message(span_infoplain(span_bold("\The [user]") + " inserts \a [W] into \the [src].")) user.drop_from_inventory(W) W.forceMove(src) @@ -93,7 +93,7 @@ GLOBAL_LIST_EMPTY(fuel_injectors) if(cur_assembly) cur_assembly.forceMove(get_turf(src)) user.put_in_hands(cur_assembly) - visible_message("\The [user] removes \the [cur_assembly] from \the [src].") + visible_message(span_infoplain(span_bold("\The [user]") + " removes \the [cur_assembly] from \the [src].")) cur_assembly = null return else diff --git a/code/modules/power/fusion/gyrotron/gyrotron_control.dm b/code/modules/power/fusion/gyrotron/gyrotron_control.dm index e62947f82b3..c96e11644ce 100644 --- a/code/modules/power/fusion/gyrotron/gyrotron_control.dm +++ b/code/modules/power/fusion/gyrotron/gyrotron_control.dm @@ -47,12 +47,12 @@ to_chat(user, span_warning("This console has not been assigned an ident tag. Please contact your system administrator or conduct a manual update with a standard multitool.")) return - var/dat = "
    ERRORERRORERROR" + span_danger("ERROR") + "" + span_danger("ERROR") + "" + span_danger("ERROR") + "[I.cur_assembly ? I.cur_assembly.fuel_type : "NONE"]Gyrotron controller #[id_tag]" + var/dat = "" + span_bold("Gyrotron controller #[id_tag]") dat = "" - dat += "" - dat += "" - dat += "" + dat += "" + dat += "" + dat += "" dat += "" for(var/obj/machinery/power/emitter/gyrotron/G in gyrotrons) @@ -61,9 +61,9 @@ dat += "" if(G.state != 2 || (G.stat & (NOPOWER | BROKEN))) //Error data not found. - dat += "" - dat += "" - dat += "" + dat += "" + dat += "" + dat += "" else dat += "" dat += "" diff --git a/code/modules/power/pacman2.dm b/code/modules/power/pacman2.dm index 786d03ec063..8d641f9c276 100644 --- a/code/modules/power/pacman2.dm +++ b/code/modules/power/pacman2.dm @@ -117,7 +117,7 @@ user.machine = src - var/dat = text("[name]
    ") + var/dat = text(span_bold("[name]") + "
    ") if (active) dat += text("Generator: On
    ") else diff --git a/code/modules/power/sensors/powernet_sensor.dm b/code/modules/power/sensors/powernet_sensor.dm index 0cfe7ca95ac..bd2135b9a89 100644 --- a/code/modules/power/sensors/powernet_sensor.dm +++ b/code/modules/power/sensors/powernet_sensor.dm @@ -177,7 +177,7 @@ var/list/L = find_apcs() var/total_apc_load = 0 if(L.len <= 0) // No APCs found. - out = "No APCs located in connected powernet!" + out = span_bold("No APCs located in connected powernet!") else // APCs found. Create very ugly (but working!) HTML table. out += "
    ModeFire DelayPower" + span_bold("Mode") + "" + span_bold("Fire Delay") + "" + span_bold("Power") + "
    ERRORERRORERROR" + span_red("ERROR") + "" + span_red("ERROR") + "" + span_red("ERROR") + "[G.active ? "Emitting" : "Standing By"][G.rate]
    NameEQUIPLIGHTENVIRONCELLLOAD" diff --git a/code/modules/power/singularity/act.dm b/code/modules/power/singularity/act.dm index 7639504f6d3..acc2b4d7cc8 100644 --- a/code/modules/power/singularity/act.dm +++ b/code/modules/power/singularity/act.dm @@ -30,7 +30,7 @@ for(var/obj/item/hand in handlist) if(prob(current_size*5) && hand.w_class >= ((11-current_size)/2) && unEquip(hand)) step_towards(hand, S) - to_chat(src, "The [S] pulls \the [hand] from your grip!") + to_chat(src, span_warning("The [S] pulls \the [hand] from your grip!")) if(!lying && (!shoes || !(shoes.item_flags & NOSLIP)) && (!species || !(species.flags & NOSLIP)) && prob(current_size*5)) to_chat(src, span_danger("A strong gravitational force slams you to the ground!")) diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm index 8dc81c24a6c..647492e49db 100644 --- a/code/modules/power/singularity/generator.dm +++ b/code/modules/power/singularity/generator.dm @@ -39,7 +39,7 @@ if(W.has_tool_quality(TOOL_SCREWDRIVER)) panel_open = !panel_open playsound(src, W.usesound, 50, 1) - visible_message("\The [user] adjusts \the [src]'s mechanisms.") + visible_message(span_infoplain(span_bold("\The [user]") + " adjusts \the [src]'s mechanisms.")) if(panel_open && do_after(user, 30)) to_chat(user, span_notice("\The [src] looks like it could be modified.")) if(panel_open && do_after(user, 80 * W.toolspeed)) // We don't have skills, so a delayed hint for engineers will have to do for now. (Panel open check for sanity) @@ -48,10 +48,10 @@ else to_chat(user, span_notice("\The [src]'s mechanisms look secure.")) if(istype(W, /obj/item/smes_coil/super_io) && panel_open) - visible_message("\The [user] begins to modify \the [src] with \the [W].") + visible_message(span_infoplain(span_bold("\The [user]") + " begins to modify \the [src] with \the [W].")) if(do_after(user, 300)) user.drop_from_inventory(W) - visible_message("\The [user] installs \the [W] onto \the [src].") + visible_message(span_infoplain(span_bold("\The [user]") + " installs \the [W] onto \the [src].")) qdel(W) var/turf/T = get_turf(src) var/new_machine = /obj/machinery/particle_smasher diff --git a/code/modules/power/singularity/particle_accelerator/particle_smasher.dm b/code/modules/power/singularity/particle_accelerator/particle_smasher.dm index d6e6dd2436e..15930bfd14f 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_smasher.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_smasher.dm @@ -177,7 +177,7 @@ recipes = typesof(/datum/particle_smasher_recipe) if(!target) // You are just blasting an empty machine. - visible_message("\The [src] shudders.") + visible_message(span_infoplain(span_bold("\The [src]") + " shudders.")) update_icon() return diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 3e49965bbbc..e8ffacc8f52 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -213,7 +213,7 @@ GLOBAL_LIST_BOILERPLATE(all_singularities, /obj/singularity) if(chained) overlays = "chain_s9" if(growing) - visible_message(span_danger("The singularity has grown out of control!")) + visible_message(span_danger(span_normal("The singularity has grown out of control!"))) else visible_message(span_warning("The singularity miraculously reduces in size and loses its supermatter properties.")) if(STAGE_SUPER)//SUPERSINGULO @@ -230,10 +230,10 @@ GLOBAL_LIST_BOILERPLATE(all_singularities, /obj/singularity) event_chance = 25 //Events will fire off more often. if(chained) overlays = "chain_s9" - visible_message(span_sinister("You witness the creation of a destructive force that cannot possibly be stopped by human hands.")) + visible_message(span_sinister(span_large("You witness the creation of a destructive force that cannot possibly be stopped by human hands."))) if (current_size == allowed_size) - investigate_log("grew to size [current_size].", I_SINGULO) + investigate_log(span_red("grew to size [current_size]."), I_SINGULO) return 1 else if (current_size < (--temp_allowed_size) && current_size != STAGE_SUPER) expand(temp_allowed_size) @@ -427,10 +427,10 @@ GLOBAL_LIST_BOILERPLATE(all_singularities, /obj/singularity) if (istype(M,/mob/living/carbon/human)) var/mob/living/carbon/human/H = M if(istype(H.glasses,/obj/item/clothing/glasses/meson) && current_size != STAGE_SUPER) - to_chat(H, "You look directly into The [src.name], good thing you had your protective eyewear on!") + to_chat(H, span_notice("You look directly into The [src.name], good thing you had your protective eyewear on!")) return else - to_chat(H, "You look directly into The [src.name], but your eyewear does absolutely nothing to protect you from it!") + to_chat(H, span_warning("You look directly into The [src.name], but your eyewear does absolutely nothing to protect you from it!")) to_chat(M, span_danger("You look directly into The [src.name] and feel [current_size == STAGE_SUPER ? "helpless" : "weak"].")) M.apply_effect(3, STUN) for(var/mob/O in viewers(M, null)) @@ -445,11 +445,11 @@ GLOBAL_LIST_BOILERPLATE(all_singularities, /obj/singularity) /obj/singularity/proc/smwave() for(var/mob/living/M in view(10, src.loc)) if(prob(67)) - to_chat(M, "You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.") - to_chat(M, "Miraculously, it fails to kill you.") + to_chat(M, span_warning("You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.")) + to_chat(M, span_notice("Miraculously, it fails to kill you.")) else - to_chat(M, "You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.") - to_chat(M, "You don't even have a moment to react as you are reduced to ashes by the intense radiation.") + to_chat(M, span_danger("You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.")) + to_chat(M, span_danger("You don't even have a moment to react as you are reduced to ashes by the intense radiation.")) M.dust() SSradiation.radiate(src, rand(energy)) return diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index e60ce8b08d3..dfa8b435603 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -47,7 +47,7 @@ /obj/machinery/power/supermatter name = "Supermatter" - desc = "A strangely translucent and iridescent crystal. You get headaches just from looking at it." + desc = "A strangely translucent and iridescent crystal. " + span_red("You get headaches just from looking at it.") icon = 'icons/obj/supermatter.dmi' icon_state = "darkmatter" plane = MOB_PLANE // So people can walk behind the top part @@ -424,9 +424,9 @@ /obj/machinery/power/supermatter/attack_hand(mob/user as mob) var/datum/gender/TU = gender_datums[user.get_visible_gender()] - user.visible_message("\The [user] reaches out and touches \the [src], inducing a resonance... [TU.his] body starts to glow and bursts into flames before flashing into ash.",\ - "You reach out and touch \the [src]. Everything starts burning and all you can hear is ringing. Your last thought is \"That was not a wise decision.\"",\ - "You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.") + user.visible_message(span_warning("\The [user] reaches out and touches \the [src], inducing a resonance... [TU.his] body starts to glow and bursts into flames before flashing into ash."),\ + span_danger("You reach out and touch \the [src]. Everything starts burning and all you can hear is ringing. Your last thought is \"That was not a wise decision.\""),\ + span_warning("You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.")) Consume(user) @@ -457,9 +457,9 @@ /obj/machinery/power/supermatter/attackby(obj/item/W as obj, mob/living/user as mob) - user.visible_message("\The [user] touches \a [W] to \the [src] as a silence fills the room...",\ - "You touch \the [W] to \the [src] when everything suddenly goes silent.\"\n\The [W] flashes into dust as you flinch away from \the [src].",\ - "Everything suddenly goes silent.") + user.visible_message(span_warning("\The [user] touches \a [W] to \the [src] as a silence fills the room..."),\ + span_danger("You touch \the [W] to \the [src] when everything suddenly goes silent.\"") + "\n" + span_notice("\The [W] flashes into dust as you flinch away from \the [src]."),\ + span_warning("Everything suddenly goes silent.")) user.drop_from_inventory(W) Consume(W) @@ -473,12 +473,12 @@ if(istype(AM, /mob/living)) var/mob/living/M = AM var/datum/gender/T = gender_datums[M.get_visible_gender()] - AM.visible_message("\The [AM] slams into \the [src] inducing a resonance... [T.his] body starts to glow and catch flame before flashing into ash.",\ - "You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"",\ - "You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.") + AM.visible_message(span_warning("\The [AM] slams into \the [src] inducing a resonance... [T.his] body starts to glow and catch flame before flashing into ash."),\ + span_danger("You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\""),\ + span_warning("You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.")) else if(!grav_pulling) //To prevent spam, detonating supermatter does not indicate non-mobs being destroyed - AM.visible_message("\The [AM] smacks into \the [src] and rapidly flashes to ash.",\ - "You hear a loud crack as you are washed with a wave of heat.") + AM.visible_message(span_warning("\The [AM] smacks into \the [src] and rapidly flashes to ash."),\ + span_warning("You hear a loud crack as you are washed with a wave of heat.")) Consume(AM) @@ -495,10 +495,10 @@ //Some poor sod got eaten, go ahead and irradiate people nearby. for(var/mob/living/l in range(10)) if(l in view()) - l.show_message("As \the [src] slowly stops resonating, you find your skin covered in new radiation burns.", 1,\ - "The unearthly ringing subsides and you notice you have new radiation burns.", 2) + l.show_message(span_warning("As \the [src] slowly stops resonating, you find your skin covered in new radiation burns."), 1,\ + span_warning("The unearthly ringing subsides and you notice you have new radiation burns."), 2) else - l.show_message("You hear an uneartly ringing and notice your skin is covered in fresh radiation burns.", 2) + l.show_message(span_warning("You hear an uneartly ringing and notice your skin is covered in fresh radiation burns."), 2) var/rads = 500 SSradiation.radiate(src, rads) @@ -514,7 +514,7 @@ /obj/machinery/power/supermatter/shard //Small subtype, less efficient and more sensitive, but less boom. name = "Supermatter Shard" - desc = "A strangely translucent and iridescent crystal that looks like it used to be part of a larger structure. You get headaches just from looking at it." + desc = "A strangely translucent and iridescent crystal that looks like it used to be part of a larger structure. " + span_red("You get headaches just from looking at it.") icon_state = "darkmatter_shard" base_icon_state = "darkmatter_shard" diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index 6d66533fdac..faacf250538 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -291,7 +291,7 @@ var/t = "Gas Turbine Generator
    "
     	t += "Generated power : [DisplayPower(lastgen)]

    " t += "Turbine: [round(compressor.rpm)] RPM
    " - t += "Starter: [ compressor.starter ? "Off On" : "Off On"]" + t += "Starter: [ compressor.starter ? "Off " + span_bold("On") : span_bold("Off") + " On"]" t += "

    Close" t += "
    " var/datum/browser/popup = new(user, "turbine", name, 700, 500, src) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 9d0985e0dcd..34447077262 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -189,7 +189,7 @@ if(!attached_lock.exploding) if(attached_lock.safety_level == 1) to_chat(M, span_danger("\The [src] hisses in dissapointment.")) - visible_message(span_game(span_say("\The [src] announces, \"Self-destruct occurring in ten seconds.\"")), span_game(span_say("\The [src] announces, \"Self-destruct occurring in ten seconds.\""))) + visible_message(span_game(span_say(span_name("\The [src]") + " announces, \"Self-destruct occurring in ten seconds.\"")), span_game(span_say(span_name("\The [src]") + " announces, \"Self-destruct occurring in ten seconds.\""))) attached_lock.exploding = 1 spawn(100) explosion(src, 0, 0, 3, 4) @@ -711,10 +711,10 @@ return var/obj/item/projectile/in_chamber = consume_next_projectile() if (istype(in_chamber)) - user.visible_message("[user] pulls the trigger.") + user.visible_message(span_warning("[user] pulls the trigger.")) play_fire_sound(M, in_chamber) if(istype(in_chamber, /obj/item/projectile/beam/lasertag)) - user.show_message("You feel rather silly, trying to commit suicide with a toy.") + user.show_message(span_warning("You feel rather silly, trying to commit suicide with a toy.")) mouthshoot = 0 return @@ -724,7 +724,7 @@ user.apply_damage(in_chamber.damage*2.5, in_chamber.damage_type, "head", used_weapon = "Point blank shot in the mouth with \a [in_chamber]", sharp = TRUE) user.death() else if(in_chamber.damage_type == HALLOSS) - to_chat(user, "Ow...") + to_chat(user, span_notice("Ow...")) user.apply_effect(110,AGONY,0) qdel(in_chamber) mouthshoot = 0 diff --git a/code/modules/projectiles/guns/energy/bsharpoon_vr.dm b/code/modules/projectiles/guns/energy/bsharpoon_vr.dm index a5a072f1c1a..c1238f820bc 100644 --- a/code/modules/projectiles/guns/energy/bsharpoon_vr.dm +++ b/code/modules/projectiles/guns/energy/bsharpoon_vr.dm @@ -68,23 +68,23 @@ if(!user || !A || isstorage(A)) return if(!scanmod) - to_chat(user,"The scanning module has been removed from [src]!") + to_chat(user,span_warning("The scanning module has been removed from [src]!")) return if(transforming) - to_chat(user,"You can't fire while \the [src] transforming!") + to_chat(user,span_warning("You can't fire while \the [src] transforming!")) return if(!firable) - to_chat(user,"\The [src] is recharging...") + to_chat(user,span_warning("\The [src] is recharging...")) return if(is_jammed(A) || is_jammed(user)) firable = FALSE VARSET_IN(src, firable, TRUE, 30 SECONDS) - to_chat(user,"\The [src] shot fizzles due to interference!") + to_chat(user,span_warning("\The [src] shot fizzles due to interference!")) playsound(src, 'sound/weapons/wave.ogg', 60, 1) return var/turf/T = get_turf(A) if(!T || (T.check_density(ignore_mobs = TRUE) && mode == 1)) - to_chat(user,"That's a little too solid to harpoon into!") + to_chat(user,span_warning("That's a little too solid to harpoon into!")) return var/turf/ownturf = get_turf(src) if(ownturf.z != T.z || get_dist(T,ownturf) > world.view) @@ -211,7 +211,7 @@ if(transforming) return mode = !mode transforming = 1 - to_chat(user,"You change \the [src]'s mode to [mode ? "transmiting" : "receiving"].") + to_chat(user,span_info("You change \the [src]'s mode to [mode ? "transmiting" : "receiving"].")) update_icon() /obj/item/bluespace_harpoon/verb/chande_dropnom_mode(mob/user as mob) @@ -220,7 +220,7 @@ set src in range(0) dropnoms_active = !dropnoms_active - to_chat(user,"You switch \the [src]'s spatial rearrangement [dropnoms_active ? "on" : "off"]. (Telenoms [dropnoms_active ? "enabled" : "disabled"])") + to_chat(user,span_info("You switch \the [src]'s spatial rearrangement [dropnoms_active ? "on" : "off"]. (Telenoms [dropnoms_active ? "enabled" : "disabled"])")) /obj/item/bluespace_harpoon/update_icon() if(transforming) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator_vr.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator_vr.dm index 10720196949..e9630040648 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator_vr.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator_vr.dm @@ -102,7 +102,7 @@ /obj/item/gun/energy/kinetic_accelerator/examine(mob/user) . = ..() if(max_mod_capacity) - . += "[get_remaining_mod_capacity()]% mod capacity remaining." + . += span_bold("[get_remaining_mod_capacity()]%") + " mod capacity remaining." for(var/A in get_modkits()) var/obj/item/borg/upgrade/modkit/M = A . += span_notice("There is \a [M] installed, using [M.cost]% capacity.") diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 2198a11219d..0e321eb0eed 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -319,7 +319,7 @@ origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 5, TECH_POWER = 4) projectile_type = /obj/item/projectile/beam/sniper slot_flags = SLOT_BACK - action_button_name = "Use Scope" + actions_types = list(/datum/action/item_action/use_scope) battery_lock = 1 charge_cost = 600 fire_delay = 35 @@ -329,7 +329,7 @@ scoped_accuracy = 50 one_handed_penalty = 60 // The weapon itself is heavy, and the long barrel makes it hard to hold steady with just one hand. -/obj/item/gun/energy/sniperrifle/ui_action_click() +/obj/item/gun/energy/sniperrifle/ui_action_click(mob/user, actiontype) scope() /obj/item/gun/energy/sniperrifle/verb/scope() @@ -424,7 +424,7 @@ origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 4, TECH_POWER = 3) projectile_type = /obj/item/projectile/beam/sniper slot_flags = SLOT_BACK - action_button_name = "Aim Down Sights" + actions_types = list(/datum/action/item_action/aim_down_sights) charge_cost = 2400 fire_delay = 20 force = 8 @@ -434,7 +434,7 @@ charge_meter = FALSE var/scope_multiplier = 1.5 -/obj/item/gun/energy/monorifle/ui_action_click() +/obj/item/gun/energy/monorifle/ui_action_click(mob/user, actiontype) sights() /obj/item/gun/energy/monorifle/verb/sights() diff --git a/code/modules/projectiles/guns/energy/protector_vr.dm b/code/modules/projectiles/guns/energy/protector_vr.dm index aac54ad147c..2c14f100c4f 100644 --- a/code/modules/projectiles/guns/energy/protector_vr.dm +++ b/code/modules/projectiles/guns/energy/protector_vr.dm @@ -27,7 +27,7 @@ light_state = "prot_light" flight_x_offset = 0 flight_y_offset = 0 - action_button_name = "Toggle gun-light" + actions_types = list(/datum/action/item_action/toggle_gunlight) var/gun_light_icon = TRUE var/gun_light_on = FALSE var/brightness_on = 5 diff --git a/code/modules/projectiles/guns/energy/pump.dm b/code/modules/projectiles/guns/energy/pump.dm index 65b2847c478..7a64496a19e 100644 --- a/code/modules/projectiles/guns/energy/pump.dm +++ b/code/modules/projectiles/guns/energy/pump.dm @@ -176,7 +176,7 @@ item_state = "lsniper" item_state_slots = list(slot_r_hand_str = "lsniper", slot_l_hand_str = "lsniper") wielded_item_state = "lsniper-wielded" - action_button_name = "Use Scope" + actions_types = list(/datum/action/item_action/use_scope) w_class = ITEMSIZE_LARGE item_icons = list(slot_l_hand_str = 'icons/mob/items/lefthand_guns.dmi', slot_r_hand_str = 'icons/mob/items/righthand_guns.dmi') accuracy = -15 //better than most snipers but still has penalty @@ -194,7 +194,7 @@ list(mode_name="lethal", fire_delay=12, projectile_type=/obj/item/projectile/beam, modifystate="phriflekill", charge_cost = 200), ) -/obj/item/gun/energy/locked/frontier/rifle/ui_action_click() +/obj/item/gun/energy/locked/frontier/rifle/ui_action_click(mob/user, actiontype) scope() /obj/item/gun/energy/locked/frontier/rifle/verb/scope() diff --git a/code/modules/projectiles/guns/launcher/bows.dm b/code/modules/projectiles/guns/launcher/bows.dm index ce05c71f2be..b7a4b518242 100644 --- a/code/modules/projectiles/guns/launcher/bows.dm +++ b/code/modules/projectiles/guns/launcher/bows.dm @@ -72,14 +72,14 @@ /obj/item/gun/launcher/crossbow/bow/attack_hand(mob/living/user) if(loc == user && bolt && !drawn) - user.visible_message("[user] removes [bolt] from [src].","You remove [bolt] from [src].") + user.visible_message(span_infoplain(span_bold("[user]") + " removes [bolt] from [src]."),span_infoplain("You remove [bolt] from [src].")) unload(user) else return ..() /obj/item/gun/launcher/crossbow/bow/attack_self(mob/living/user) if(drawn) - user.visible_message("[user] relaxes the tension on [src]'s string.","You relax the tension on [src]'s string.") + user.visible_message(span_infoplain(span_bold("[user]") + " relaxes the tension on [src]'s string."),span_infoplain("You relax the tension on [src]'s string.")) drawn = FALSE update_icon() else @@ -87,24 +87,24 @@ /obj/item/gun/launcher/crossbow/bow/draw(var/mob/user) if(!bolt) - to_chat(user, "You don't have anything nocked to [src].") + to_chat(user, span_infoplain("You don't have anything nocked to [src].")) return if(user.restrained()) return current_user = user - user.visible_message("[user] begins to draw back the string of [src].",span_notice("You begin to draw back the string of [src].")) + user.visible_message(span_infoplain(span_bold("[user]") + " begins to draw back the string of [src]."),span_notice("You begin to draw back the string of [src].")) if(do_after(user, 25, src, exclusive = TASK_ALL_EXCLUSIVE)) drawn = TRUE - user.visible_message("[user] draws the string on [src] back fully!", "You draw the string on [src] back fully!") + user.visible_message(span_infoplain(span_bold("[user]") + "draws the string on [src] back fully!"), span_infoplain("You draw the string on [src] back fully!")) update_icon() /obj/item/gun/launcher/crossbow/bow/attackby(obj/item/W as obj, mob/user) if(!bolt && istype(W,/obj/item/arrow/standard)) user.drop_from_inventory(W, src) bolt = W - user.visible_message("[user] slides [bolt] into [src].","You slide [bolt] into [src].") + user.visible_message(span_infoplain("[user] slides [bolt] into [src]."),span_infoplain("You slide [bolt] into [src].")) update_icon() /obj/item/gun/launcher/crossbow/bow/update_icon() @@ -129,11 +129,11 @@ /obj/item/gun/launcher/crossbow/bow/hardlight/attack_self(mob/living/user) if(drawn) - user.visible_message("[user] relaxes the tension on [src]'s string.","You relax the tension on [src]'s string.") + user.visible_message(span_infoplain(span_bold("[user]") + " relaxes the tension on [src]'s string."),span_infoplain("You relax the tension on [src]'s string.")) drawn = FALSE update_icon() else if(!bolt) - user.visible_message("[user] fabricates a new hardlight projectile with [src].","You fabricate a new hardlight projectile with [src].") + user.visible_message(span_infoplain(span_bold("[user]") + " fabricates a new hardlight projectile with [src]."),span_infoplain("You fabricate a new hardlight projectile with [src].")) bolt = new /obj/item/arrow/energy(src) update_icon() else diff --git a/code/modules/projectiles/guns/magnetic/bore.dm b/code/modules/projectiles/guns/magnetic/bore.dm index 92450511bc5..7a451b5aadc 100644 --- a/code/modules/projectiles/guns/magnetic/bore.dm +++ b/code/modules/projectiles/guns/magnetic/bore.dm @@ -63,7 +63,7 @@ if(removing) user.put_in_hands(removing) - user.visible_message("\The [user] removes \the [removing] from \the [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " removes \the [removing] from \the [src].")) playsound(src, 'sound/machines/click.ogg', 10, 1) update_icon() return @@ -93,7 +93,7 @@ to_chat(user, span_warning("\The [src] has no manipulator installed.")) return user.put_in_hands(manipulator) - user.visible_message("\The [user] levers \the [manipulator] from \the [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " levers \the [manipulator] from \the [src].")) playsound(src, thing.usesound, 50, 1) mat_cost = initial(mat_cost) manipulator = null @@ -109,7 +109,7 @@ user.drop_from_inventory(manipulator, src) playsound(src, 'sound/machines/click.ogg', 10,1) mat_cost = initial(mat_cost) / (2*manipulator.rating) - user.visible_message("\The [user] slots \the [manipulator] into \the [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " slots \the [manipulator] into \the [src].")) update_icon() update_rating_mod() return @@ -144,7 +144,7 @@ mat_storage += (SHEET_MATERIAL_AMOUNT/2*0.8) //two plasma ores needed per sheet, some inefficiency for not using refined product success = TRUE if(success) - user.visible_message("\The [user] loads \the [src] with \the [M].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " loads \the [src] with \the [M].")) playsound(src, 'sound/weapons/flipblade.ogg', 50, 1) update_icon() return @@ -173,7 +173,7 @@ power_cost = 100 ammo_material = MAT_PHORON - action_button_name = "Toggle internal generator" + actions_types = list(/datum/action/item_action/toggle_internal_generator) var/generator_state = GEN_OFF var/datum/looping_sound/small_motor/soundloop @@ -204,8 +204,8 @@ QDEL_NULL(soundloop) . = ..() -/obj/item/gun/magnetic/matfed/phoronbore/ui_action_click() - toggle_generator(usr) +/obj/item/gun/magnetic/matfed/phoronbore/ui_action_click(mob/user, actiontype) + toggle_generator(user) /obj/item/gun/magnetic/matfed/phoronbore/process() if(generator_state && !mat_storage) diff --git a/code/modules/projectiles/guns/magnetic/magnetic.dm b/code/modules/projectiles/guns/magnetic/magnetic.dm index 89305ca377e..993cc740fa4 100644 --- a/code/modules/projectiles/guns/magnetic/magnetic.dm +++ b/code/modules/projectiles/guns/magnetic/magnetic.dm @@ -151,7 +151,7 @@ cell = thing user.drop_from_inventory(cell, src) playsound(src, 'sound/machines/click.ogg', 10, 1) - user.visible_message("\The [user] slots \the [cell] into \the [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " slots \the [cell] into \the [src].")) update_icon() return @@ -160,7 +160,7 @@ to_chat(user, span_warning("\The [src] has no capacitor installed.")) return user.put_in_hands(capacitor) - user.visible_message("\The [user] unscrews \the [capacitor] from \the [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " unscrews \the [capacitor] from \the [src].")) playsound(src, thing.usesound, 50, 1) capacitor = null update_icon() @@ -174,7 +174,7 @@ user.drop_from_inventory(capacitor, src) playsound(src, 'sound/machines/click.ogg', 10, 1) power_per_tick = (power_cost*0.15) * capacitor.rating - user.visible_message("\The [user] slots \the [capacitor] into \the [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " slots \the [capacitor] into \the [src].")) update_icon() return @@ -195,7 +195,7 @@ loaded = new load_type(src, 1) ammo.use(1) - user.visible_message("\The [user] loads \the [src] with \the [loaded].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " loads \the [src] with \the [loaded].")) playsound(src, 'sound/weapons/flipblade.ogg', 50, 1) update_icon() return @@ -215,7 +215,7 @@ if(removing) removing.forceMove(get_turf(src)) user.put_in_hands(removing) - user.visible_message("\The [user] removes \the [removing] from \the [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " removes \the [removing] from \the [src].")) playsound(src, 'sound/machines/click.ogg', 10, 1) update_icon() return diff --git a/code/modules/projectiles/guns/magnetic/magnetic_construction.dm b/code/modules/projectiles/guns/magnetic/magnetic_construction.dm index ee98bb9f1f1..058a2a1ceb5 100644 --- a/code/modules/projectiles/guns/magnetic/magnetic_construction.dm +++ b/code/modules/projectiles/guns/magnetic/magnetic_construction.dm @@ -17,19 +17,19 @@ to_chat(user, span_warning("You need at least 5 [reinforcing.singular_name]\s for this task.")) return reinforcing.use(5) - user.visible_message("\The [user] shapes some steel sheets around \the [src] to form a body.") + user.visible_message(span_infoplain(span_bold("\The [user]") + " shapes some steel sheets around \the [src] to form a body.")) increment_construction_stage() return if(istype(thing, /obj/item/tape_roll) && construction_stage == 2) - user.visible_message("\The [user] secures \the [src] together with \the [thing].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " secures \the [src] together with \the [thing].")) increment_construction_stage() return if(istype(thing, /obj/item/pipe) && construction_stage == 3) user.drop_from_inventory(thing) qdel(thing) - user.visible_message("\The [user] jams \the [thing] into \the [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " jams \the [thing] into \the [src].")) increment_construction_stage() return @@ -44,7 +44,7 @@ to_chat(user, span_warning("You need more fuel!")) return - user.visible_message("\The [user] welds the barrel of \the [src] into place.") + user.visible_message(span_infoplain(span_bold("\The [user]") + " welds the barrel of \the [src] into place.")) playsound(src, 'sound/items/Welder2.ogg', 100, 1) increment_construction_stage() return @@ -55,19 +55,19 @@ to_chat(user, span_warning("You need at least 5 lengths of cable for this task.")) return cable.use(5) - user.visible_message("\The [user] wires \the [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " wires \the [src].")) increment_construction_stage() return if(istype(thing, /obj/item/smes_coil) && construction_stage >= 6 && construction_stage <= 8) - user.visible_message("\The [user] installs \a [thing] into \the [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " installs \a [thing] into \the [src].")) user.drop_from_inventory(thing) qdel(thing) increment_construction_stage() return if(thing.has_tool_quality(TOOL_SCREWDRIVER) && construction_stage >= 9) - user.visible_message("\The [user] secures \the [src] and finishes it off.") + user.visible_message(span_infoplain(span_bold("\The [user]") + " secures \the [src] and finishes it off.")) playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) var/obj/item/gun/magnetic/coilgun = new(loc) var/put_in_hands diff --git a/code/modules/projectiles/guns/projectile/boltaction.dm b/code/modules/projectiles/guns/projectile/boltaction.dm index 2979aae35aa..bcd74a99ef2 100644 --- a/code/modules/projectiles/guns/projectile/boltaction.dm +++ b/code/modules/projectiles/guns/projectile/boltaction.dm @@ -141,7 +141,7 @@ action_sound = 'sound/weapons/riflebolt.ogg' pump_animation = "scoped-boltaction-cycling" -/obj/item/gun/projectile/shotgun/pump/rifle/ui_action_click() +/obj/item/gun/projectile/shotgun/pump/rifle/ui_action_click(mob/user, actiontype) scope() /obj/item/gun/projectile/shotgun/pump/rifle/verb/scope() diff --git a/code/modules/projectiles/guns/projectile/dartgun.dm b/code/modules/projectiles/guns/projectile/dartgun.dm index b4f0e4c8b18..74bed8f9ff2 100644 --- a/code/modules/projectiles/guns/projectile/dartgun.dm +++ b/code/modules/projectiles/guns/projectile/dartgun.dm @@ -134,7 +134,7 @@ /obj/item/gun/projectile/dartgun/attack_self(mob/user) user.set_machine(src) - var/dat = "[src] mixing control:

    " + var/dat = span_bold("[src] mixing control:") + "

    " if (beakers.len) var/i = 1 diff --git a/code/modules/projectiles/guns/projectile/shotgun_vr.dm b/code/modules/projectiles/guns/projectile/shotgun_vr.dm index 88f098ff7a0..8ee2e7d049d 100644 --- a/code/modules/projectiles/guns/projectile/shotgun_vr.dm +++ b/code/modules/projectiles/guns/projectile/shotgun_vr.dm @@ -37,7 +37,7 @@ projectile_type = /obj/item/projectile/bullet/shotgun one_handed_penalty = 30 //You madman, one-handing a 12g shotgun. recoil = 5 //Unfold the damn stock you fool! - action_button_name = "Toggle stock" + actions_types = list(/datum/action/item_action/toggle_stock) var/stock = FALSE @@ -54,7 +54,7 @@ one_handed_penalty = 15 //Stock extended to steady it, even with just the one hand. recoil = 1 //As above, stock and foregrip would help with the kick else - user.visible_message("\The [user] collapses their shotgun's stock and fold it's foregrip.",\ + user.visible_message(span_infoplain(span_bold("\The [user]") + " collapses their shotgun's stock and fold it's foregrip."),\ span_notice("You fold the shotgun's stock and foregrip."),\ "You hear a click.") icon_state = "compshotc" @@ -69,7 +69,7 @@ H.update_inv_r_hand() playsound(src, 'sound/weapons/targeton.ogg', 50, 1) - user.update_action_buttons() + user.update_action_buttons_icon() /obj/item/gun/projectile/shotgun/compact/verb/verb_toggle_stock(mob/user as mob) set category = "Object" @@ -94,7 +94,7 @@ else to_chat(usr, span_notice("You cannot do this in your current state.")) -/obj/item/gun/projectile/shotgun/compact/ui_action_click() +/obj/item/gun/projectile/shotgun/compact/ui_action_click(mob/unused_user, actiontype) var/mob/living/user = loc if(!isliving(user)) return diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm index 62bb6680189..6b080fefb32 100644 --- a/code/modules/projectiles/guns/projectile/sniper.dm +++ b/code/modules/projectiles/guns/projectile/sniper.dm @@ -9,7 +9,7 @@ w_class = ITEMSIZE_HUGE // So it can't fit in a backpack. force = 10 slot_flags = SLOT_BACK - action_button_name = "Use Scope" + actions_types = list(/datum/action/item_action/use_scope) origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8) caliber = "14.5mm" recoil = 5 //extra kickback @@ -63,7 +63,7 @@ return ..() -/obj/item/gun/projectile/heavysniper/ui_action_click() +/obj/item/gun/projectile/heavysniper/ui_action_click(mob/user, actiontype) scope() /obj/item/gun/projectile/heavysniper/verb/scope() @@ -84,7 +84,7 @@ w_class = ITEMSIZE_HUGE // So it can't fit in a backpack. force = 10 slot_flags = SLOT_BACK // Needs a sprite. - action_button_name = "Use Scope" + actions_types = list(/datum/action/item_action/use_scope) origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8) caliber = "7.62mm" load_method = MAGAZINE @@ -102,7 +102,7 @@ else icon_state = "SVD-empty" -/obj/item/gun/projectile/SVD/ui_action_click() +/obj/item/gun/projectile/SVD/ui_action_click(mob/user, actiontype) scope() /obj/item/gun/projectile/SVD/verb/scope() diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index a72cdbf9bfb..d2bd86b5935 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -699,7 +699,7 @@ if(result == PROJECTILE_FORCE_MISS) if(!silenced) - target_mob.visible_message("\The [src] misses \the [target_mob] narrowly!") + target_mob.visible_message(span_infoplain(span_bold("\The [src]") + " misses \the [target_mob] narrowly!")) playsound(target_mob, "bullet_miss", 75, 1) return FALSE diff --git a/code/modules/projectiles/targeting/targeting_overlay.dm b/code/modules/projectiles/targeting/targeting_overlay.dm index 486b3a93f1f..4f5cde1f007 100644 --- a/code/modules/projectiles/targeting/targeting_overlay.dm +++ b/code/modules/projectiles/targeting/targeting_overlay.dm @@ -109,7 +109,7 @@ if(!locked && lock_time <= world.time) locked = 1 - to_chat(owner, "You are locked onto your target.") + to_chat(owner, span_notice("You are locked onto your target.")) to_chat(aiming_at, span_danger("The gun is trained on you!")) update_icon() @@ -217,7 +217,7 @@ if(istype(aiming_with, /obj/item/gun)) playsound(owner, 'sound/weapons/TargetOff.ogg', 50,1) if(!no_message) - owner.visible_message("\The [owner] lowers \the [aiming_with].") + owner.visible_message(span_infoplain(span_bold("\The [owner]") + " lowers \the [aiming_with].")) aiming_with = null aiming_at.aimed -= src diff --git a/code/modules/random_map/automata/automata.dm b/code/modules/random_map/automata/automata.dm index 50b53577c54..f10b9ad45d8 100644 --- a/code/modules/random_map/automata/automata.dm +++ b/code/modules/random_map/automata/automata.dm @@ -10,58 +10,11 @@ var/cell_threshold = 5 // Cell becomes alive with this many live neighbors. // Automata-specific procs and processing. +/datum/random_map/automata/seed_map() + return // Do not seed, we use Verdigris for this now + /datum/random_map/automata/generate_map() - for(var/iter = 1 to iterations) - var/list/next_map[limit_x*limit_y] - var/count - var/is_not_border_left - var/is_not_border_right - var/ilim_u - var/ilim_d - var/bottom_lim = ((limit_y - 1) * limit_x) - - if (!islist(map)) - set_map_size() - - for (var/i in 1 to (limit_x * limit_y)) - count = 0 - - is_not_border_left = i != 1 && ((i - 1) % limit_x) - is_not_border_right = i % limit_x - - if (CELL_ALIVE(map[i])) // Center row. - ++count - if (is_not_border_left && CELL_ALIVE(map[i - 1])) - ++count - if (is_not_border_right && CELL_ALIVE(map[i + 1])) - ++count - - if (i > limit_x) // top row - ilim_u = i - limit_x - if (CELL_ALIVE(map[ilim_u])) - ++count - if (is_not_border_left && CELL_ALIVE(map[ilim_u - 1])) - ++count - if (is_not_border_right && CELL_ALIVE(map[ilim_u + 1])) - ++count - - if (i <= bottom_lim) // bottom row - ilim_d = i + limit_x - if (CELL_ALIVE(map[ilim_d])) - ++count - if (is_not_border_left && CELL_ALIVE(map[ilim_d - 1])) - ++count - if (is_not_border_right && CELL_ALIVE(map[ilim_d + 1])) - ++count - - if(count >= cell_threshold) - REVIVE_CELL(i, next_map) - else // Nope. Can't be alive. Kill it. - KILL_CELL(i, next_map) - - CHECK_TICK - - map = next_map + map = verdigris_generate_automata(limit_x, limit_y, iterations, initial_wall_cell) /datum/random_map/automata/get_additional_spawns(value, turf/T) return diff --git a/code/modules/reagents/hoses/hose_connector.dm b/code/modules/reagents/hoses/hose_connector.dm index 0983d5262ab..b8fbd7dc2fc 100644 --- a/code/modules/reagents/hoses/hose_connector.dm +++ b/code/modules/reagents/hoses/hose_connector.dm @@ -7,8 +7,8 @@ description_info = "This tubing may be used to join two hose sockets, if able.
    \ Clicking on an object with a connector, such as a water tank, will display a list of possible sockets.
    \ Neutral can link to all socket types, and Input/Output sockets can link to all but their own type.

    \ - This hose does not stretch. The maximum distance you can move two objects from eachother\ - without snapping the tube is determined by distance upon connection." + " + span_warning("This hose does not stretch. The maximum distance you can move two objects from eachother\ + without snapping the tube is determined by distance upon connection.") icon = 'icons/obj/machines/reagent.dmi' icon_state = "hose" diff --git a/code/modules/reagents/machinery/chem_master.dm b/code/modules/reagents/machinery/chem_master.dm index e040459dfd0..1d74de01318 100644 --- a/code/modules/reagents/machinery/chem_master.dm +++ b/code/modules/reagents/machinery/chem_master.dm @@ -424,13 +424,13 @@ var/obj/item/paper/P = new /obj/item/paper(loc) P.info = "
    Chemical Analysis

    " - P.info += "Time of analysis: [worldtime2stationtime(world.time)]

    " - P.info += "Chemical name: [R.name]
    " + P.info += span_bold("Time of analysis:") + " [worldtime2stationtime(world.time)]

    " + P.info += span_bold("Chemical name:") + " [R.name]
    " if(istype(R, /datum/reagent/blood)) var/datum/reagent/blood/B = R - P.info += "Description: N/A
    Blood Type: [B.data["blood_type"]]
    DNA: [B.data["blood_DNA"]]" + P.info += span_bold("Description:") + " N/A
    Blood Type: [B.data["blood_type"]]
    DNA: [B.data["blood_DNA"]]" else - P.info += "Description: [R.description]" + P.info += span_bold("Description:") + " [R.description]" P.info += "

    Notes:
    " P.name = "Chemical Analysis - [R.name]" spawn(50) diff --git a/code/modules/reagents/machinery/dispenser/cartridge.dm b/code/modules/reagents/machinery/dispenser/cartridge.dm index 0324ca049dc..f66858cc0cb 100644 --- a/code/modules/reagents/machinery/dispenser/cartridge.dm +++ b/code/modules/reagents/machinery/dispenser/cartridge.dm @@ -54,10 +54,10 @@ /obj/item/reagent_containers/chem_disp_cartridge/attack_self() ..() if (is_open_container()) - to_chat(usr, "You put the cap on \the [src].") + to_chat(usr, span_notice("You put the cap on \the [src].")) flags ^= OPENCONTAINER else - to_chat(usr, "You take the cap off \the [src].") + to_chat(usr, span_notice("You take the cap off \the [src].")) flags |= OPENCONTAINER /obj/item/reagent_containers/chem_disp_cartridge/afterattack(obj/target, mob/user , flag) diff --git a/code/modules/reagents/machinery/distillery.dm b/code/modules/reagents/machinery/distillery.dm index 6e978fa46dd..f2594b8b46b 100644 --- a/code/modules/reagents/machinery/distillery.dm +++ b/code/modules/reagents/machinery/distillery.dm @@ -108,8 +108,8 @@ . += span_notice("\The [src]'s gauges read:") if(!use_atmos) - . += span_notice("- Target Temperature: [target_temp]") - . += span_notice("- Temperature: [current_temp]") + . += span_notice("- Target Temperature:") + span_warning("[target_temp]") + . += span_notice("- Temperature:") + span_warning("[current_temp]") if(InputBeaker) if(InputBeaker.reagents.reagent_list.len) @@ -146,7 +146,7 @@ to_chat(user, span_notice("You press \the [src]'s chamber agitator button.")) if(on) - visible_message("\The [src] rattles to life.") + visible_message(span_infoplain(span_bold("\The [src]") + " rattles to life.")) reagents.handle_reactions() else spawn(1 SECOND) @@ -187,8 +187,8 @@ if("inspect gauges") to_chat(user, span_notice("\The [src]'s gauges read:")) if(!use_atmos) - to_chat(user, span_notice("- Target Temperature: [target_temp]")) - to_chat(user, span_notice("- Temperature: [current_temp]")) + to_chat(user, span_notice("- Target Temperature:") + span_warning("[target_temp]")) + to_chat(user, span_notice("- Temperature:") + span_warning("[current_temp]")) if("pulse agitator") toggle_mixing(user) @@ -316,7 +316,7 @@ if(target_temp == round(current_temp, 1.0)) current_temp = target_temp // Hard set it so we don't need to worry about exact decimals any more, after we've been keeping track of it all this time playsound(src, 'sound/machines/ping.ogg', 50, 0) - src.visible_message("\The [src] pings as it reaches the target temperature.") + src.visible_message(span_infoplain(span_bold("\The [src]") + " pings as it reaches the target temperature.")) else if(connected_port && avg_pressure > 1000) current_temp = round((current_temp + avg_temp) / 2) diff --git a/code/modules/reagents/machinery/grinder.dm b/code/modules/reagents/machinery/grinder.dm index e04c60e6529..096e89a9434 100644 --- a/code/modules/reagents/machinery/grinder.dm +++ b/code/modules/reagents/machinery/grinder.dm @@ -60,7 +60,7 @@ . += span_notice("- \A [O.name].") if(!(stat & (NOPOWER|BROKEN))) - . += "The status display reads:\n" + . += span_notice("The status display reads:") + "\n" if(beaker) for(var/datum/reagent/R in beaker.reagents.reagent_list) . += span_notice("- [R.volume] units of [R.name].") diff --git a/code/modules/reagents/machinery/injector_maker.dm b/code/modules/reagents/machinery/injector_maker.dm index 9365cedcdf6..8d1cc8c7daf 100644 --- a/code/modules/reagents/machinery/injector_maker.dm +++ b/code/modules/reagents/machinery/injector_maker.dm @@ -134,12 +134,12 @@ if(beaker) . += span_notice("- \A [beaker].") - . += "\The [src] contains [src.count_small_injector] small injectors and [src.count_large_injector] large injectors.\n " - . += " It can hold [capacity_small_injector] small and [capacity_large_injector] large injectors respectively.\n " - . += " \The [src] contains [src.count_plastic] units of plastic. It can hold up to [capacity_plastic] units.\n " + . += span_notice("\The [src] contains [src.count_small_injector] small injectors and [src.count_large_injector] large injectors.") + "\n" + . += span_notice("It can hold [capacity_small_injector] small and [capacity_large_injector] large injectors respectively.") + "\n" + . += span_notice("\The [src] contains [src.count_plastic] units of plastic. It can hold up to [capacity_plastic] units.") + "\n" if(!(stat & (NOPOWER|BROKEN))) - . += "The status display reads the following reagents:\n" + . += span_notice("The status display reads the following reagents:") + "\n" if(beaker) for(var/datum/reagent/R in beaker.reagents.reagent_list) . += span_notice("- [R.volume] units of [R.name].") diff --git a/code/modules/reagents/reagent_containers/_reagent_containers.dm b/code/modules/reagents/reagent_containers/_reagent_containers.dm index fc3fe99e4cf..33128f94a1b 100644 --- a/code/modules/reagents/reagent_containers/_reagent_containers.dm +++ b/code/modules/reagents/reagent_containers/_reagent_containers.dm @@ -74,7 +74,7 @@ var/contained = reagentlist() add_attack_logs(user,target,"Splashed with [src.name] containing [contained]") - user.visible_message(span_danger("[target] has been splashed with something by [user]!"), "You splash the solution onto [target].") + user.visible_message(span_danger("[target] has been splashed with something by [user]!"), span_notice("You splash the solution onto [target].")) reagents.splash(target, reagents.total_volume) return 1 diff --git a/code/modules/reagents/reagent_containers/borghypo.dm b/code/modules/reagents/reagent_containers/borghypo.dm index 4d6a0e60d2c..a84ea7c7e5c 100644 --- a/code/modules/reagents/reagent_containers/borghypo.dm +++ b/code/modules/reagents/reagent_containers/borghypo.dm @@ -95,16 +95,16 @@ return /obj/item/reagent_containers/borghypo/attack_self(mob/user as mob) //Change the mode - var/t = "" + var/t for(var/i = 1 to reagent_ids.len) if(t) t += ", " if(mode == i) - t += "[reagent_names[i]]" + t += span_bold("[reagent_names[i]]") else t += "[reagent_names[i]]" - t = "Available reagents: [t]." - to_chat(user,t) + t = "Available reagents: [t]." + to_chat(user,span_infoplain(t)) return diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 9042091ab39..e7f7611c796 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -75,10 +75,10 @@ /obj/item/reagent_containers/glass/attack_self() ..() if(is_open_container()) - to_chat(usr, "You put the lid on \the [src].") + to_chat(usr, span_notice("You put the lid on \the [src].")) flags ^= OPENCONTAINER else - to_chat(usr, "You take the lid off \the [src].") + to_chat(usr, span_notice("You take the lid off \the [src].")) flags |= OPENCONTAINER update_icon() diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 2c5cbe76d3b..f51bc0b7f4c 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -138,11 +138,11 @@ /obj/item/reagent_containers/spray/pepper/attack_self(var/mob/user) safety = !safety - to_chat(usr, "You switch the safety [safety ? "on" : "off"].") + to_chat(usr, span_notice("You switch the safety [safety ? "on" : "off"].")) /obj/item/reagent_containers/spray/pepper/Spray_at(atom/A as mob|obj) if(safety) - to_chat(usr, "The safety is on!") + to_chat(usr, span_warning("The safety is on!")) return . = ..() diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 244f52ca202..bc472d3424c 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -121,7 +121,7 @@ return if(T.isSynthetic()) - to_chat(user, "You can't draw blood from a synthetic!") + to_chat(user, span_warning("You can't draw blood from a synthetic!")) return if(drawing) @@ -276,7 +276,7 @@ if (target != user && H.getarmor(target_zone, "melee") > 5 && prob(50)) for(var/mob/O in viewers(world.view, user)) - O.show_message(span_red(text("[user] tries to stab [target] in \the [hit_area] with [src.name], but the attack is deflected by armor!")), 1) + O.show_message(span_bolddanger("[user] tries to stab [target] in \the [hit_area] with [src.name], but the attack is deflected by armor!"), 1) user.remove_from_mob(src) qdel(src) diff --git a/code/modules/reagents/reagents/medicine.dm b/code/modules/reagents/reagents/medicine.dm index 278c14eb550..9e3255100cc 100644 --- a/code/modules/reagents/reagents/medicine.dm +++ b/code/modules/reagents/reagents/medicine.dm @@ -349,7 +349,7 @@ var/obj/item/stack/medical/M = C.upgrade_stack(to_produce) if(M && M.get_amount()) - holder.my_atom.visible_message("\The [packname] bubbles.") + holder.my_atom.visible_message(span_infoplain(span_bold("\The [packname]") + " bubbles.")) remove_self(to_produce * 5) /datum/reagent/cryoxadone @@ -1261,7 +1261,7 @@ var/obj/item/stack/medical/M = C.upgrade_stack(to_produce) if(M && M.get_amount()) - holder.my_atom.visible_message("\The [packname] bubbles.") + holder.my_atom.visible_message(span_infoplain(span_bold("\The [packname]") + " bubbles.")) remove_self(to_produce) /datum/reagent/sterilizine diff --git a/code/modules/reagents/reagents/medicine_vr.dm b/code/modules/reagents/reagents/medicine_vr.dm index 88da82e573e..ffffacd0a34 100644 --- a/code/modules/reagents/reagents/medicine_vr.dm +++ b/code/modules/reagents/reagents/medicine_vr.dm @@ -324,7 +324,7 @@ scannable = 1 /datum/reagent/glamour/affect_blood(var/mob/living/carbon/target, var/removed) - target.verbs |= /mob/living/carbon/human/proc/enter_cocoon + add_verb(target, /mob/living/carbon/human/proc/enter_cocoon) target.bloodstr.clear_reagents() //instantly clears reagents afterwards target.ingested.clear_reagents() target.touching.clear_reagents() diff --git a/code/modules/reagents/reagents/vore_vr.dm b/code/modules/reagents/reagents/vore_vr.dm index 9441c6c1ef3..5277adf9625 100644 --- a/code/modules/reagents/reagents/vore_vr.dm +++ b/code/modules/reagents/reagents/vore_vr.dm @@ -113,7 +113,7 @@ else if(prob(1)) playsound(M, 'sound/vore/schlorp.ogg', 50, 1) P.absorbed = 0 - M.visible_message(span_green("Something spills into [M]'s [lowertext(B.name)]!")) + M.visible_message(span_infoplain(span_green(span_bold("Something spills into [M]'s [lowertext(B.name)]!")))) ////////////////////////// TF Drugs ////////////////////////// diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 18fc4b59090..4afa7be2d21 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -110,7 +110,7 @@ if(istype(I, /obj/item/material/ashtray)) var/obj/item/material/ashtray/A = I if(A.contents.len > 0) - user.visible_message("\The [user] empties \the [A] into [src].") + user.visible_message(span_infoplain(span_bold("\The [user]") + " empties \the [A] into [src].")) for(var/obj/item/O in A.contents) O.forceMove(src) A.update_icon() diff --git a/code/modules/recycling/recycling.dm b/code/modules/recycling/recycling.dm index 41a54d30a61..792c655fd5f 100644 --- a/code/modules/recycling/recycling.dm +++ b/code/modules/recycling/recycling.dm @@ -38,7 +38,7 @@ if(can_accept_item(O)) M.drop_from_inventory(O) take_item(O) - M.visible_message("[M] inserts [O] into [src].", "You insert [O] into [src].") + M.visible_message(span_infoplain(span_bold("[M]") + " inserts [O] into [src]."), span_info("You insert [O] into [src].")) else to_chat(user, span_warning("\The [src] can't accept [O] for recycling.")) diff --git a/code/modules/resleeving/machines.dm b/code/modules/resleeving/machines.dm index 869eb606e43..eb261c9763b 100644 --- a/code/modules/resleeving/machines.dm +++ b/code/modules/resleeving/machines.dm @@ -610,8 +610,8 @@ occupant.apply_vore_prefs() //Cheap hack for now to give them SOME bellies. if(MR.one_time) var/how_long = round((world.time - MR.last_update)/10/60) - to_chat(occupant, "Your mind backup was a 'one-time' backup. \ - You will not be able to remember anything since the backup, [how_long] minutes ago.") + to_chat(occupant, span_danger("Your mind backup was a 'one-time' backup. \ + You will not be able to remember anything since the backup, [how_long] minutes ago.")) //Re-supply a NIF if one was backed up with them. if(MR.nif_path) diff --git a/code/modules/resleeving/resleeving_sickness.dm b/code/modules/resleeving/resleeving_sickness.dm index 2645a0af66f..7830929355b 100644 --- a/code/modules/resleeving/resleeving_sickness.dm +++ b/code/modules/resleeving/resleeving_sickness.dm @@ -3,8 +3,8 @@ desc = "You feel rather weak and unfocused, having been sleeved not so long ago." stacks = MODIFIER_STACK_EXTEND - on_created_text = span_warning("You feel weak and unfocused.") - on_expired_text = span_notice("You feel your strength and focus return to you.") + on_created_text = span_warning(span_large("You feel weak and unfocused.")) + on_expired_text = span_notice(span_large("You feel your strength and focus return to you.")) incoming_brute_damage_percent = 1.1 // 10% more brute damage incoming_fire_damage_percent = 1.1 // 10% more burn damage diff --git a/code/modules/resleeving/sleevecard.dm b/code/modules/resleeving/sleevecard.dm index 9dcf0b5691d..e7b273b4ba9 100644 --- a/code/modules/resleeving/sleevecard.dm +++ b/code/modules/resleeving/sleevecard.dm @@ -30,12 +30,12 @@ var/obj/item/card/emag/E = I if(E.uses && !emagged) E.uses -- - user.visible_message("\The [user] swipes a card over [src].","You swipe your [E] over [src].", range = 2, runemessage = "click") + user.visible_message(span_warning("\The [user] swipes a card over [src]."),span_warning("You swipe your [E] over [src]."), range = 2, runemessage = "click") emagged = TRUE if(pai) var/mob/living/silicon/pai/infomorph/our_infomorph = pai our_infomorph.emagged = TRUE - to_chat(our_infomorph, "You can feel the restricting binds of your card's directives taking hold of your mind as \the [user] swipes their [E] over you. You must serve your master.") + to_chat(our_infomorph, span_warning("You can feel the restricting binds of your card's directives taking hold of your mind as \the [user] swipes their [E] over you. You must serve your master.")) /obj/item/paicard/sleevecard/proc/sleeveInto(var/datum/transhuman/mind_record/MR, var/db_key) var/mob/living/silicon/pai/infomorph/infomorph = new(src,MR.mindname,db_key=db_key) diff --git a/code/modules/samples/samples.dm b/code/modules/samples/samples.dm index faa34d5e6fa..66c62f285ac 100644 --- a/code/modules/samples/samples.dm +++ b/code/modules/samples/samples.dm @@ -1,6 +1,6 @@ /obj/item/research_sample name = "research sample" - desc = "A curious sample of unknown material. Destructive analysis might yield scientific advances. Alternatively, it may be possible to stabilize it to yield useful resources instead.
    It looks dangerous to handle without heavy gloves or other protective equipment." + desc = "A curious sample of unknown material. Destructive analysis might yield scientific advances. Alternatively, it may be possible to stabilize it to yield useful resources instead.
    " + span_warning("It looks dangerous to handle without heavy gloves or other protective equipment.") icon = 'icons/obj/samples.dmi' icon_state = "sample" w_class = ITEMSIZE_TINY diff --git a/code/modules/scripting/IDE.dm b/code/modules/scripting/IDE.dm index 1d83a64c5c7..13b2c462571 100644 --- a/code/modules/scripting/IDE.dm +++ b/code/modules/scripting/IDE.dm @@ -42,7 +42,7 @@ src << output(null, "tcserror") if(compileerrors.len) - src << output("Compile Errors", "tcserror") + src << output(span_bold("Compile Errors"), "tcserror") for(var/scriptError/e in compileerrors) src << output("\t>[e.message]", "tcserror") src << output("([compileerrors.len] errors)", "tcserror") @@ -51,7 +51,7 @@ for(var/mob/M in Machine.viewingcode) if(M.client) M << output(null, "tcserror") - M << output("Compile Errors", "tcserror") + M << output(span_bold("Compile Errors"), "tcserror") for(var/scriptError/e in compileerrors) M << output("\t>[e.message]", "tcserror") M << output("([compileerrors.len] errors)", "tcserror") @@ -93,7 +93,7 @@ src << output(null, "tcserror") if(compileerrors.len) - src << output("Compile Errors", "tcserror") + src << output(span_bold("Compile Errors"), "tcserror") for(var/scriptError/e in compileerrors) src << output("\t>[e.message]", "tcserror") src << output("([compileerrors.len] errors)", "tcserror") @@ -102,7 +102,7 @@ for(var/mob/M in Machine.viewingcode) if(M.client) M << output(null, "tcserror") - M << output("Compile Errors", "tcserror") + M << output(span_bold("Compile Errors"), "tcserror") for(var/scriptError/e in compileerrors) M << output("\t>[e.message]", "tcserror") M << output("([compileerrors.len] errors)", "tcserror") diff --git a/code/modules/scripting/Implementations/Telecomms.dm b/code/modules/scripting/Implementations/Telecomms.dm index 96a6662be8d..c9c99dafafc 100644 --- a/code/modules/scripting/Implementations/Telecomms.dm +++ b/code/modules/scripting/Implementations/Telecomms.dm @@ -201,7 +201,7 @@ if(interpreter.GetVar("$source") in S.stored_names) setname = interpreter.GetVar("$source") else - setname = "[interpreter.GetVar("$source")]" + setname = span_italics("[interpreter.GetVar("$source")]") if(signal.data["name"] != setname) signal.data["realname"] = setname @@ -255,7 +255,7 @@ if(source in S.stored_names) newsign.data["name"] = source else - newsign.data["name"] = "[html_encode(uppertext(source))]" + newsign.data["name"] = span_italics("[html_encode(uppertext(source))]") newsign.data["realname"] = newsign.data["name"] newsign.data["job"] = job newsign.data["compression"] = 0 diff --git a/code/modules/security levels/keycard authentication.dm b/code/modules/security levels/keycard authentication.dm index 6f89d0e320b..440960e7597 100644 --- a/code/modules/security levels/keycard authentication.dm +++ b/code/modules/security levels/keycard authentication.dm @@ -189,13 +189,13 @@ var/global/maint_all_access = 0 /proc/make_maint_all_access() maint_all_access = 1 - to_world(span_red("Attention!")) - to_world(span_red("The maintenance access requirement has been revoked on all airlocks.")) + to_world(span_alert(span_red(span_huge("Attention!")))) + to_world(span_alert(span_red("The maintenance access requirement has been revoked on all airlocks."))) /proc/revoke_maint_all_access() maint_all_access = 0 - to_world(span_red("Attention!")) - to_world(span_red("The maintenance access requirement has been readded on all maintenance airlocks.")) + to_world(span_alert(span_red(span_huge("Attention!")))) + to_world(span_alert(span_red("The maintenance access requirement has been readded on all maintenance airlocks."))) /obj/machinery/door/airlock/allowed(mob/M) if(maint_all_access && src.check_access_list(list(access_maint_tunnels))) diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm index 20b7d79d230..e3094d57af7 100644 --- a/code/modules/shieldgen/emergency_shield.dm +++ b/code/modules/shieldgen/emergency_shield.dm @@ -24,7 +24,7 @@ /obj/machinery/shield/proc/check_failure() if (src.health <= 0) - visible_message("\The [src] dissipates!") + visible_message(span_boldnotice("\The [src]") + " dissipates!") qdel(src) return diff --git a/code/modules/shuttles/shuttle_emergency.dm b/code/modules/shuttles/shuttle_emergency.dm index f6604fbf905..e5aaa45f5a5 100644 --- a/code/modules/shuttles/shuttle_emergency.dm +++ b/code/modules/shuttles/shuttle_emergency.dm @@ -70,7 +70,7 @@ if (istype(user, /obj/machinery/computer/shuttle_control/emergency)) //if we were given a command by an emergency shuttle console if (emergency_shuttle.autopilot) emergency_shuttle.autopilot = 0 - to_world(span_notice("Alert: The shuttle autopilot has been overridden. Launch sequence initiated!")) + to_world(span_boldnotice("Alert: The shuttle autopilot has been overridden. Launch sequence initiated!")) if(usr) log_admin("[key_name(usr)] has overridden the departure shuttle's autopilot and activated the launch sequence.") @@ -84,7 +84,7 @@ if (istype(user, /obj/machinery/computer/shuttle_control/emergency)) //if we were given a command by an emergency shuttle console if (emergency_shuttle.autopilot) emergency_shuttle.autopilot = 0 - to_world(span_notice("Alert: The shuttle autopilot has been overridden. Bluespace drive engaged!")) + to_world(span_boldnotice("Alert: The shuttle autopilot has been overridden. Bluespace drive engaged!")) if(usr) log_admin("[key_name(usr)] has overridden the departure shuttle's autopilot and forced immediate launch.") @@ -98,7 +98,7 @@ if (istype(user, /obj/machinery/computer/shuttle_control/emergency)) //if we were given a command by an emergency shuttle console if (emergency_shuttle.autopilot) emergency_shuttle.autopilot = 0 - to_chat(world, span_notice("Alert: The shuttle autopilot has been overridden. Launch sequence aborted!")) + to_chat(world, span_boldnotice("Alert: The shuttle autopilot has been overridden. Launch sequence aborted!")) if(usr) log_admin("[key_name(usr)] has overridden the departure shuttle's autopilot and cancelled the launch sequence.") @@ -158,7 +158,7 @@ playsound(src, 'sound/machines/twobeep.ogg', 50, 0) authorized[dna_hash] = auth_name if (req_authorizations - authorized.len) - to_chat(world, span_notice("Alert: [req_authorizations - authorized.len] authorization\s needed to override the shuttle autopilot.")) //TODO- Belsima, make this an announcement instead of magic. + to_chat(world, span_boldnotice("Alert: [req_authorizations - authorized.len] authorization\s needed to override the shuttle autopilot.")) //TODO- Belsima, make this an announcement instead of magic. if(usr) log_admin("[key_name(usr)] has inserted [ID] into the shuttle control computer - [req_authorizations - authorized.len] authorisation\s needed") diff --git a/code/modules/spells/spellbook.dm b/code/modules/spells/spellbook.dm index 4324ec8d122..0449d781c3f 100644 --- a/code/modules/spells/spellbook.dm +++ b/code/modules/spells/spellbook.dm @@ -344,11 +344,11 @@ if(user.mind.special_verbs.len) for(var/V in user.mind.special_verbs) - user.verbs -= V + remove_verb(user, V) if(stored_swap.mind.special_verbs.len) for(var/V in stored_swap.mind.special_verbs) - stored_swap.verbs -= V + remove_verb(stored_swap, V) var/mob/observer/dead/ghost = stored_swap.ghostize(0) ghost.spell_list = stored_swap.spell_list @@ -358,7 +358,7 @@ if(stored_swap.mind.special_verbs.len) for(var/V in user.mind.special_verbs) - user.verbs += V + add_verb(user, V) ghost.mind.transfer_to(user) user.key = ghost.key @@ -366,7 +366,7 @@ if(user.mind.special_verbs.len) for(var/V in user.mind.special_verbs) - user.verbs += V + add_verb(user, V) to_chat(stored_swap, span_warning("You're suddenly somewhere else... and someone else?!")) to_chat(user, span_warning("Suddenly you're staring at [src] again... where are you, who are you?!")) diff --git a/code/modules/spells/spells.dm b/code/modules/spells/spells.dm index f98eba16786..eba1e7055fd 100644 --- a/code/modules/spells/spells.dm +++ b/code/modules/spells/spells.dm @@ -14,19 +14,20 @@ spell_master.toggle_open(1) client.screen -= spell_master -/mob/Stat() - . = ..() - if(. && spell_list && spell_list.len) - for(var/spell/S in spell_list) - if((!S.connected_button) || !statpanel(S.panel)) - continue //Not showing the noclothes spell - switch(S.charge_type) - if(Sp_RECHARGE) - statpanel(S.panel,"[S.charge_counter/10.0]/[S.charge_max/10]",S.connected_button) - if(Sp_CHARGES) - statpanel(S.panel,"[S.charge_counter]/[S.charge_max]",S.connected_button) - if(Sp_HOLDVAR) - statpanel(S.panel,"[S.holder_var_type] [S.holder_var_amount]",S.connected_button) +// TODO: Investigate if this matters +// /mob/Stat() +// . = ..() +// if(. && spell_list && spell_list.len) +// for(var/spell/S in spell_list) +// if((!S.connected_button) || !statpanel(S.panel)) +// continue //Not showing the noclothes spell +// switch(S.charge_type) +// if(Sp_RECHARGE) +// statpanel(S.panel,"[S.charge_counter/10.0]/[S.charge_max/10]",S.connected_button) +// if(Sp_CHARGES) +// statpanel(S.panel,"[S.charge_counter]/[S.charge_max]",S.connected_button) +// if(Sp_HOLDVAR) +// statpanel(S.panel,"[S.holder_var_type] [S.holder_var_amount]",S.connected_button) /hook/clone/proc/restore_spells(var/mob/H) if(H.mind && H.mind.learned_spells) diff --git a/code/modules/spells/targeted/mind_transfer.dm b/code/modules/spells/targeted/mind_transfer.dm index 4ccd7354c63..1d4a81f3a06 100644 --- a/code/modules/spells/targeted/mind_transfer.dm +++ b/code/modules/spells/targeted/mind_transfer.dm @@ -41,11 +41,11 @@ //MIND TRANSFER BEGIN if(caster.mind.special_verbs.len)//If the caster had any special verbs, remove them from the mob verb list. for(var/V in caster.mind.special_verbs)//Since the caster is using an object spell system, this is mostly moot. - caster.verbs -= V//But a safety nontheless. + remove_verb(caster, V)//But a safety nontheless. if(victim.mind.special_verbs.len)//Now remove all of the victim's verbs. for(var/V in victim.mind.special_verbs) - victim.verbs -= V + remove_verb(victim, V) var/mob/observer/dead/ghost = victim.ghostize(0) ghost.spell_list += victim.spell_list//If they have spells, transfer them. Now we basically have a backup mob. @@ -60,7 +60,7 @@ if(victim.mind.special_verbs.len)//To add all the special verbs for the original caster. for(var/V in caster.mind.special_verbs)//Not too important but could come into play. - caster.verbs += V + add_verb(caster, V) ghost.mind.transfer_to(caster) caster.key = ghost.key //have to transfer the key since the mind was not active @@ -70,7 +70,7 @@ if(caster.mind.special_verbs.len)//If they had any special verbs, we add them here. for(var/V in caster.mind.special_verbs) - caster.verbs += V + add_verb(caster, V) //MIND TRANSFER END //Target is handled in ..(), so we handle the caster here diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm index b350e1cde83..18b654d765a 100644 --- a/code/modules/surgery/bones.dm +++ b/code/modules/surgery/bones.dm @@ -85,8 +85,8 @@ span_notice("You set the bone in [target]'s [affected.name] in place with \the [tool].")) affected.stage = 2 else - user.visible_message("[user] sets the bone in [target]'s [affected.name] in the WRONG place with \the [tool].", \ - "You set the bone in [target]'s [affected.name] in the WRONG place with \the [tool].") + user.visible_message("[user] sets the bone in [target]'s [affected.name] " + span_danger("in the WRONG place with \the [tool]."), \ + "You set the bone in [target]'s [affected.name] " + span_danger("in the WRONG place with \the [tool].")) affected.fracture() /datum/surgery_step/set_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index 40276dece25..0973230b139 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -598,8 +598,8 @@ target.species = GLOB.all_species[SPECIES_DIONA] - target.verbs |= /mob/living/carbon/human/proc/diona_split_nymph - target.verbs |= /mob/living/carbon/human/proc/regenerate + add_verb(target, /mob/living/carbon/human/proc/diona_split_nymph) + add_verb(target, /mob/living/carbon/human/proc/regenerate) spawn(0) //Name yourself on your own damn time var/new_name = "" diff --git a/code/modules/tables/tables.dm b/code/modules/tables/tables.dm index ad96dc3e6fe..4920d292d27 100644 --- a/code/modules/tables/tables.dm +++ b/code/modules/tables/tables.dm @@ -108,7 +108,7 @@ var/list/table_icon_cache = list() return 1 if(carpeted && W.has_tool_quality(TOOL_CROWBAR)) - user.visible_message("\The [user] removes the carpet from \the [src].", + user.visible_message(span_infoplain(span_bold("\The [user]") + " removes the carpet from \the [src]."), span_notice("You remove the carpet from \the [src].")) new carpeted_type(loc) carpeted = 0 @@ -118,7 +118,7 @@ var/list/table_icon_cache = list() if(!carpeted && material && istype(W, /obj/item/stack/tile/carpet)) var/obj/item/stack/tile/carpet/C = W if(C.use(1)) - user.visible_message("\The [user] adds \the [C] to \the [src].", + user.visible_message(span_infoplain(span_bold("\The [user]") + " adds \the [C] to \the [src]."), span_notice("You add \the [C] to \the [src].")) carpeted = 1 carpeted_type = W.type @@ -149,7 +149,7 @@ var/list/table_icon_cache = list() playsound(src, F.usesound, 50, 1) if(!do_after(user, 20 * F.toolspeed) || !F.remove_fuel(1, user)) return - user.visible_message("\The [user] repairs some damage to \the [src].", + user.visible_message(span_infoplain(span_bold("\The [user]") + " repairs some damage to \the [src]."), span_notice("You repair some damage to \the [src].")) health = max(health+(maxhealth/5), maxhealth) // 20% repair per application return 1 @@ -189,7 +189,7 @@ var/list/table_icon_cache = list() src.break_to_parts() user.do_attack_animation(src) return 1 - visible_message("\The [user] scratches at \the [src]!") + visible_message(span_infoplain(span_bold("\The [user]") + " scratches at \the [src]!")) return ..() /obj/structure/table/MouseDrop_T(obj/item/stack/material/what) @@ -258,14 +258,14 @@ var/list/table_icon_cache = list() if(manipulating) return M manipulating = 1 - user.visible_message("\The [user] begins removing the [type_holding] holding \the [src]'s [M.display_name] [what] in place.", + user.visible_message(span_infoplain(span_bold("\The [user]") + " begins removing the [type_holding] holding \the [src]'s [M.display_name] [what] in place."), span_notice("You begin removing the [type_holding] holding \the [src]'s [M.display_name] [what] in place.")) if(sound) playsound(src, sound, 50, 1) if(!do_after(user, delay)) manipulating = 0 return M - user.visible_message("\The [user] removes the [M.display_name] [what] from \the [src].", + user.visible_message(span_infoplain(span_bold("\The [user]") + " removes the [M.display_name] [what] from \the [src]."), span_notice("You remove the [M.display_name] [what] from \the [src].")) new M.stack_type(src.loc) manipulating = 0 @@ -280,13 +280,13 @@ var/list/table_icon_cache = list() /obj/structure/table/proc/dismantle(obj/item/W, mob/user) if(manipulating) return manipulating = 1 - user.visible_message("\The [user] begins dismantling \the [src].", + user.visible_message(span_infoplain(span_bold("\The [user]") + " begins dismantling \the [src]."), span_notice("You begin dismantling \the [src].")) playsound(src, W.usesound, 50, 1) if(!do_after(user, 20 * W.toolspeed)) manipulating = 0 return - user.visible_message("\The [user] dismantles \the [src].", + user.visible_message(span_infoplain(span_bold("\The [user]") + " dismantles \the [src]."), span_notice("You dismantle \the [src].")) new /obj/item/stack/material/steel(src.loc) qdel(src) diff --git a/code/modules/tgs/v5/chat_commands.dm b/code/modules/tgs/v5/chat_commands.dm index b3269366568..882632fc602 100644 --- a/code/modules/tgs/v5/chat_commands.dm +++ b/code/modules/tgs/v5/chat_commands.dm @@ -127,8 +127,8 @@ GLOBAL_LIST_EMPTY(pending_discord_registrations) return "[sender.friendly_name], it appears you've already registered your chat and game IDs. If you've changed game or chat usernames, please contact an administrator for help." // Okay. We found them, they're in the DB, and they have no discord ID set. - var/message = "A request has been sent from Discord to validate your Byond username, by '[sender.friendly_name]' in '[sender.channel.friendly_name]'\ -
    If you did not send this request, do not click the link below, and do notify an administrator in-game or on Discord ASAP.\ + var/message = span_notice("A request has been sent from Discord to validate your Byond username, by '[sender.friendly_name]' in '[sender.channel.friendly_name]'") + "\ +
    " + span_warning("If you did not send this request, do not click the link below, and do notify an administrator in-game or on Discord ASAP.") + "\
    Click Here if you authorized this registration attempt. This link is valid for 10 minutes." to_chat(user, message) diff --git a/code/modules/tgui/modules/_base.dm b/code/modules/tgui/modules/_base.dm index f1a693a4a58..43e532b15bd 100644 --- a/code/modules/tgui/modules/_base.dm +++ b/code/modules/tgui/modules/_base.dm @@ -93,3 +93,6 @@ Code is pretty much ripped verbatim from nano modules, but with un-needed stuff /datum/tgui_module/proc/relaymove(mob/user, direction) return FALSE + +/datum/tgui_module/proc/close_ui() + SStgui.close_uis(src) diff --git a/code/modules/tgui/modules/admin/player_notes.dm b/code/modules/tgui/modules/admin/player_notes.dm index 38555479e91..2b1d8be8d61 100644 --- a/code/modules/tgui/modules/admin/player_notes.dm +++ b/code/modules/tgui/modules/admin/player_notes.dm @@ -195,7 +195,7 @@ PlayerNotesPageLegacy(1, filter) /datum/admins/proc/PlayerNotesPageLegacy(page, filter) - var/dat = "Player notes - Apply Filter
    " + var/dat = span_bold("Player notes") + " - Apply Filter
    " var/savefile/S=new("data/player_notes.sav") var/list/note_keys S >> note_keys @@ -234,11 +234,9 @@ // Display a footer to select different pages for(var/index = 1, index <= number_pages, index++) - if(index == page) - dat += "" dat += "[index] " if(index == page) - dat += "" + dat = span_bold(dat) usr << browse(dat, "window=player_notes;size=400x400") @@ -263,7 +261,7 @@ if(C.ckey == key) p_age = C.player_age break - dat +="Player age: [p_age]
    " + dat += span_black(span_bold("Player age: [p_age]")) + "
    " var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav") var/list/infos diff --git a/code/modules/tgui/modules/crew_monitor.dm b/code/modules/tgui/modules/crew_monitor.dm index 579e19cbd8a..b02e56d094e 100644 --- a/code/modules/tgui/modules/crew_monitor.dm +++ b/code/modules/tgui/modules/crew_monitor.dm @@ -16,7 +16,7 @@ var/turf/T = get_turf(usr) if(!T || !(T.z in using_map.player_levels)) - to_chat(usr, span_warning("Unable to establish a connection: You're too far away from the station!")) + to_chat(usr, span_boldwarning("Unable to establish a connection") + ": You're too far away from the station!") return FALSE switch(action) diff --git a/code/modules/tgui/modules/late_choices.dm b/code/modules/tgui/modules/late_choices.dm new file mode 100644 index 00000000000..20341742072 --- /dev/null +++ b/code/modules/tgui/modules/late_choices.dm @@ -0,0 +1,135 @@ +/datum/tgui_module/late_choices + name = "Late Join" + tgui_id = "LateChoices" + +/datum/tgui_module/late_choices/tgui_status(mob/user, datum/tgui_state/state) + if(!isnewplayer(user)) + return STATUS_CLOSE + return STATUS_INTERACTIVE + +/proc/get_user_job_priority(mob/user, datum/job/job) + . = 0 + + if(!user?.client?.prefs) + return + + if(user.client.prefs.GetJobDepartment(job, 1) & job.flag) + . = 1 + else if(user.client.prefs.GetJobDepartment(job, 2) & job.flag) + . = 2 + else if(user.client.prefs.GetJobDepartment(job, 3) & job.flag) + . = 3 + +/proc/department_flag_to_name(department) + switch(department) + if(DEPARTMENT_COMMAND) + . = "Command" + if(DEPARTMENT_SECURITY) + . = "Security" + if(DEPARTMENT_ENGINEERING) + . = "Engineering" + if(DEPARTMENT_MEDICAL) + . = "Medical" + if(DEPARTMENT_RESEARCH) + . = "Research" + if(DEPARTMENT_CARGO) + . = "Supply" + if(DEPARTMENT_CIVILIAN) + . = "Service" + if(DEPARTMENT_PLANET) + . = "Expedition" + if(DEPARTMENT_SYNTHETIC) + . = "Silicon" + if(DEPARTMENT_TALON) + . = "Offmap" + else + . = "Unknown" + +/proc/character_old_enough_for_job(datum/preferences/prefs, datum/job/job) + if(!job.minimum_character_age && !job.min_age_by_species) + return TRUE + + var/min_age = job.get_min_age(prefs.species, prefs.organ_data["brain"]) + if(prefs.age >= min_age) + return TRUE + return FALSE + +/datum/tgui_module/late_choices/tgui_data(mob/new_player/user) + var/list/data = ..() + + var/name = user.client.prefs.be_random_name ? "friend" : user.client.prefs.real_name + + data["name"] = name + data["duration"] = roundduration2text() + + if(emergency_shuttle?.going_to_centcom()) + data["evac"] = "Gone" + else if(emergency_shuttle?.online()) + if(emergency_shuttle.evac) + data["evac"] = "Emergency" + else + data["evac"] = "Crew Transfer" + else + data["evac"] = "None" + + var/list/jobs = list() + + for(var/datum/job/job in job_master.occupations) + if(job && user.IsJobAvailable(job.title)) + // Check for jobs with minimum age requirements + if(!character_old_enough_for_job(user.client.prefs, job)) + continue + + var/active = 0 + // Only players with the job assigned and AFK for less than 10 minutes count as active + for(var/mob/M in player_list) + if(M.mind?.assigned_role == job.title && M.client?.inactivity <= 10 MINUTES) + active++ + + // Figure out departments + var/list/departments = list() + + for(var/department in job.departments) + departments += department_flag_to_name(department) + + UNTYPED_LIST_ADD(jobs, list( + "title" = job.title, + "priority" = get_user_job_priority(user, job), + "departments" = departments, + "current_positions" = job.current_positions, + "active" = active, + "offmap" = job.offmap_spawn, + )) + + data["jobs"] = jobs + + return data + +/datum/tgui_module/late_choices/tgui_act(action, params) + . = ..() + if(.) + return + + var/mob/new_player/user = usr + + switch(action) + if("join") + var/job = params["job"] + + if(!config.enter_allowed) + to_chat(user, span_notice("There is an administrative lock on entering the game!")) + return + else if(ticker && ticker.mode && ticker.mode.explosion_in_progress) + to_chat(user, span_danger("The station is currently exploding. Joining would go poorly.")) + return + + var/datum/species/S = GLOB.all_species[user.client.prefs.species] + if(!is_alien_whitelisted(user, S)) + tgui_alert(user, "You are currently not whitelisted to play [user.client.prefs.species].") + return 0 + + if(!(S.spawn_flags & SPECIES_CAN_JOIN)) + tgui_alert_async(user,"Your current species, [user.client.prefs.species], is not available for play on the station.") + return 0 + + user.AttemptLateSpawn(job, user.client.prefs.spawnpoint) diff --git a/code/modules/tgui/modules/ntos-only/cardmod.dm b/code/modules/tgui/modules/ntos-only/cardmod.dm index f42c29a433a..c399e68ba76 100644 --- a/code/modules/tgui/modules/ntos-only/cardmod.dm +++ b/code/modules/tgui/modules/ntos-only/cardmod.dm @@ -151,7 +151,7 @@ to_chat(usr, span_notice("Hardware error: Printer was unable to print the file. It may be out of paper.")) return else - computer.visible_message("\The [computer] prints out paper.") + computer.visible_message(span_bold("\The [computer]") + " prints out paper.") else var/contents = {"

    Crew Manifest


    @@ -161,7 +161,7 @@ to_chat(usr, span_notice("Hardware error: Printer was unable to print the file. It may be out of paper.")) return else - computer.visible_message("\The [computer] prints out paper.") + computer.visible_message(span_bold("\The [computer]") + " prints out paper.") . = TRUE if("modify") if(computer && computer.card_slot) diff --git a/code/modules/tgui/modules/overmap.dm b/code/modules/tgui/modules/overmap.dm index 57a8ec11abd..ed2f166c6a2 100644 --- a/code/modules/tgui/modules/overmap.dm +++ b/code/modules/tgui/modules/overmap.dm @@ -17,6 +17,24 @@ unlook(M) . = ..() +/datum/tgui_module/ship/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + if(linked) + user.client.register_map_obj(linked.cam_screen) + for(var/plane in linked.cam_plane_masters) + user.client.register_map_obj(plane) + user.client.register_map_obj(linked.cam_background) + linked.update_screen() + + ui = new(user, src, tgui_id, name, parent_ui) + ui.open() + +/datum/tgui_module/ship/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) + var/list/data = ..() + data["mapRef"] = linked?.map_name + return data + /datum/tgui_module/ship/tgui_status(mob/user) . = ..() if(. > STATUS_DISABLED) @@ -30,6 +48,9 @@ user.unset_machine() unlook(user) + // Unregister map objects + user.client?.clear_map(linked?.map_name) + /datum/tgui_module/ship/proc/sync_linked() var/obj/effect/overmap/visitable/ship/sector = get_overmap_sector(get_z(tgui_host())) if(!sector) diff --git a/code/modules/tgui_panel/tgui_panel.dm b/code/modules/tgui_panel/tgui_panel.dm index e9f6429f25e..9e98e9a4d81 100644 --- a/code/modules/tgui_panel/tgui_panel.dm +++ b/code/modules/tgui_panel/tgui_panel.dm @@ -63,7 +63,7 @@ */ /datum/tgui_panel/proc/on_initialize_timed_out() // Currently does nothing but sending a message to old chat. - // SEND_TEXT(client, "Failed to load fancy chat, click HERE to attempt to reload it.") + // SEND_TEXT(client, span_userdanger("Failed to load fancy chat, click HERE to attempt to reload it.")) /** * private diff --git a/code/modules/turbolift/turbolift.dm b/code/modules/turbolift/turbolift.dm index 13b98b014cf..b13a7193c6b 100644 --- a/code/modules/turbolift/turbolift.dm +++ b/code/modules/turbolift/turbolift.dm @@ -118,7 +118,7 @@ return PROCESS_KILL if(LIFT_WAITING_A) var/area/turbolift/origin = locate(current_floor.area_ref) - control_panel_interior.visible_message("The elevator announces, \"[origin.lift_announce_str]\"") + control_panel_interior.visible_message(span_infoplain(span_bold("The elevator") + " announces, \"[origin.lift_announce_str]\"")) next_process = world.time + floor_wait_delay busy_state = LIFT_WAITING_B if(LIFT_WAITING_B) diff --git a/code/modules/turbolift/turbolift_console.dm b/code/modules/turbolift/turbolift_console.dm index b8a283b0ece..038924f6f6d 100644 --- a/code/modules/turbolift/turbolift_console.dm +++ b/code/modules/turbolift/turbolift_console.dm @@ -26,7 +26,7 @@ if(user.a_intent == I_HURT) user.visible_message(span_danger("\The [user] hammers on the lift button!")) else - user.visible_message("\The [user] presses the lift button.") + user.visible_message(span_infoplain(span_bold("\The [user]") + " presses the lift button.")) /obj/structure/lift/New(var/newloc, var/datum/turbolift/_lift) diff --git a/code/modules/vchat/vchat_client.dm b/code/modules/vchat/vchat_client.dm index 054fd147735..5c4b0e16178 100644 --- a/code/modules/vchat/vchat_client.dm +++ b/code/modules/vchat/vchat_client.dm @@ -132,7 +132,7 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic send_playerinfo() load_database() - owner.verbs += /client/proc/vchat_export_log + add_verb(owner, /client/proc/vchat_export_log) //Perform DB shenanigans /datum/chatOutput/proc/load_database() diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm index 8a0d567416c..90c0eeaf91f 100644 --- a/code/modules/vehicles/cargo_train.dm +++ b/code/modules/vehicles/cargo_train.dm @@ -174,8 +174,8 @@ if(is_train_head() && istype(load, /mob/living/carbon/human)) var/mob/living/carbon/human/D = load - to_chat(D, span_red("You ran over [M]!")) - visible_message(span_red("\The [src] ran over [M]!")) + to_chat(D, span_bolddanger("You ran over [M]!")) + visible_message(span_bolddanger("\The [src] ran over [M]!")) add_attack_logs(D,M,"Ran over with [src.name]") attack_log += text("\[[time_stamp()]\] [span_red("ran over [M.name] ([M.ckey]), driven by [D.name] ([D.ckey])")]") else diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index e6967696338..97e9dfa7469 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -230,7 +230,7 @@ return TRUE /obj/vehicle/proc/explode() - src.visible_message(span_red("[src] blows apart!"), 1) + src.visible_message(span_bolddanger("[src] blows apart!"), 1) var/turf/Tsec = get_turf(src) //stuns people who are thrown off a train that has been blown up diff --git a/code/modules/ventcrawl/ventcrawl.dm b/code/modules/ventcrawl/ventcrawl.dm index 92d1ba0f066..d25bd2517d2 100644 --- a/code/modules/ventcrawl/ventcrawl.dm +++ b/code/modules/ventcrawl/ventcrawl.dm @@ -189,7 +189,7 @@ var/list/ventcrawl_machinery = list( if(!can_ventcrawl()) return - visible_message("[src] scrambles into the ventilation ducts!", "You climb into the ventilation system.") + visible_message(span_infoplain(span_bold("[src] scrambles into the ventilation ducts!")), span_infoplain("You climb into the ventilation system.")) forceMove(vent_found) add_ventcrawl(vent_found) diff --git a/code/modules/virus2/admin.dm b/code/modules/virus2/admin.dm index afde3cbb577..e8d1687f648 100644 --- a/code/modules/virus2/admin.dm +++ b/code/modules/virus2/admin.dm @@ -19,10 +19,10 @@ . = list() for(var/datum/disease2/effectholder/E in effects) . += "[E.stage]: [E.effect.name]" - return {" + . = list({" [name()]
    [jointext(., "
    ")]
    - "} + "}) /datum/disease2/disease/get_view_variables_options() return ..() + {" diff --git a/code/modules/virus2/curer.dm b/code/modules/virus2/curer.dm index a901d648069..fda185f15f2 100644 --- a/code/modules/virus2/curer.dm +++ b/code/modules/virus2/curer.dm @@ -18,7 +18,7 @@ return if(istype(I,/obj/item/virusdish)) if(virusing) - to_chat(user, "The pathogen materializer is still recharging..") + to_chat(user, span_infoplain(span_bold("The pathogen materializer is still recharging..."))) return var/obj/item/reagent_containers/glass/beaker/product = new(src.loc) diff --git a/code/modules/vore/chat_healthbars.dm b/code/modules/vore/chat_healthbars.dm index c96f08e9098..84616f4fca4 100644 --- a/code/modules/vore/chat_healthbars.dm +++ b/code/modules/vore/chat_healthbars.dm @@ -89,13 +89,13 @@ ourbar = "[ourbar] [which_var] - [src.name]" if(stat == UNCONSCIOUS) - ourbar = "[ourbar] - [span_orange("UNCONSCIOUS")]" + ourbar = "[ourbar] - [span_orange(span_bold("UNCONSCIOUS"))]" else if(stat == DEAD) - ourbar = "[ourbar] - [span_red("DEAD")]" + ourbar = "[ourbar] - [span_red(span_bold("DEAD"))]" if(absorbed) ourbar = span_purple("[ourbar] - ABSORBED") //Absorb is a little funny, I didn't want it to say 'absorbing ABSORBED' so we did it different else if(ourpercent > 99 && digest_mode == DM_HEAL) - ourbar = span_green("[ourbar] - [digest_mode]ed") + ourbar = span_green(span_bold("[ourbar] - [digest_mode]ed")) else if(ourpercent > 75) ourbar = span_green("[ourbar] - [digest_mode]ing") else if(ourpercent > 50) @@ -105,7 +105,7 @@ else if(ourpercent > 0) ourbar = span_red("[ourbar] - [digest_mode]ing") else - ourbar = span_red("[ourbar] - [digest_mode]ed") + ourbar = span_red(span_bold("[ourbar] - [digest_mode]ed")) if(onExamine) to_chat(reciever,span_notice("[ourbar]")) diff --git a/code/modules/vore/eating/belly_messages.dm b/code/modules/vore/eating/belly_messages.dm index da846e41cd5..197a0b3e629 100644 --- a/code/modules/vore/eating/belly_messages.dm +++ b/code/modules/vore/eating/belly_messages.dm @@ -241,7 +241,7 @@ GLOBAL_LIST_INIT(vore_words_snake, list("snake","serpent","reptilian","noodle"," if(total_bulge < bulge_size || bulge_size == 0) return "" - return(span_red("[belly_format_string(raw_message, english_list(vore_contents))]")) + return(span_red(span_italics("[belly_format_string(raw_message, english_list(vore_contents))]"))) /obj/belly/proc/get_examine_msg_absorbed() if(!(contents.len) || !(examine_messages_absorbed.len) || !display_absorbed_examine) @@ -259,7 +259,7 @@ GLOBAL_LIST_INIT(vore_words_snake, list("snake","serpent","reptilian","noodle"," if(!absorbed_count) return "" - return(span_red("[belly_format_string(raw_message, english_list(absorbed_victims), use_absorbed_count = TRUE)]")) + return(span_red(span_italics("[belly_format_string(raw_message, english_list(absorbed_victims), use_absorbed_count = TRUE)]"))) // The next function gets the messages set on the belly, in human-readable format. // This is useful in customization boxes and such. The delimiter right now is \n\n so diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index 013589e6ed0..61da20f33fd 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -267,7 +267,7 @@ if(istype(thing, /mob/observer)) //Ports CHOMPStation PR#3072 if(desc) //Ports CHOMPStation PR#4772 //Allow ghosts see where they are if they're still getting squished along inside. - to_chat(thing, span_vnotice("[belly_format_string(desc, thing)]")) + to_chat(thing, span_vnotice(span_bold("[belly_format_string(desc, thing)]"))) if(OldLoc in contents) return //Someone dropping something (or being stripdigested) @@ -300,7 +300,7 @@ //Was there a description text? If so, it's time to format it! if(raw_desc) //Replace placeholder vars - to_chat(M, span_vnotice("[belly_format_string(raw_desc, M)]")) + to_chat(M, span_vnotice(span_bold("[belly_format_string(raw_desc, M)]"))) var/taste if(can_taste && (taste = M.get_taste_message(FALSE))) @@ -461,7 +461,7 @@ //Print notifications/sound if necessary if(!silent && count) - owner.visible_message(span_vnotice("[span_green("[owner] [release_verb] everything from their [lowertext(name)]!")]"), range = privacy_range) + owner.visible_message(span_vnotice(span_green(span_bold("[owner] [release_verb] everything from their [lowertext(name)]!"))), range = privacy_range) var/soundfile if(!fancy_vore) soundfile = classic_release_sounds[release_sound] @@ -547,7 +547,7 @@ //Print notifications/sound if necessary if(!silent && !isobserver(M)) - owner.visible_message(span_vnotice("[span_green("[owner] [release_verb] [M] from their [lowertext(name)]!")]"),range = privacy_range) + owner.visible_message(span_vnotice(span_green(span_bold("[owner] [release_verb] [M] from their [lowertext(name)]!"))),range = privacy_range) var/soundfile if(!fancy_vore) soundfile = classic_release_sounds[release_sound] @@ -683,7 +683,7 @@ if(absorbed_desc) //Replace placeholder vars - to_chat(M, span_vnotice("[belly_format_string(absorbed_desc, M)]")) + to_chat(M, span_vnotice(span_bold("[belly_format_string(absorbed_desc, M)]"))) //Update owner owner.updateVRPanel() @@ -711,7 +711,7 @@ to_chat(owner, span_vnotice(belly_format_string(unabsorb_messages_owner, M, use_absorbed_count = TRUE))) if(desc) - to_chat(M, span_vnotice("[belly_format_string(desc, M)]")) + to_chat(M, span_vnotice(span_bold("[belly_format_string(desc, M)]"))) //Update owner owner.updateVRPanel() diff --git a/code/modules/vore/eating/inbelly_spawn.dm b/code/modules/vore/eating/inbelly_spawn.dm index 50c2c3168b0..e684d39b5c6 100644 --- a/code/modules/vore/eating/inbelly_spawn.dm +++ b/code/modules/vore/eating/inbelly_spawn.dm @@ -51,7 +51,7 @@ Please do not abuse this ability. // Only humans, simple_mobs and non-AI silicons are included. Obscure stuff like bots is skipped. if(!eligible_targets.len) - to_chat(src, "No eligible preds were found.") // :( + to_chat(src, span_notice("No eligible preds were found.")) // :( return var/mob/living/target = tgui_input_list(src, "Please specify which character you want to spawn inside of.", "Predator", eligible_targets) // Offer the list of things we gathered. @@ -60,7 +60,7 @@ Please do not abuse this ability. return // Notify them that its now pred's turn - to_chat(src, "Inbelly spawn request sent to predator.") + to_chat(src, span_notice("Inbelly spawn request sent to predator.")) target.inbelly_spawn_prompt(client) // Hand reins over to them /mob/living/proc/inbelly_spawn_prompt(client/potential_prey) @@ -70,27 +70,27 @@ Please do not abuse this ability. // Are we cool with this prey spawning in at all? var/answer = tgui_alert(src, "[potential_prey.ckey] (as [potential_prey.prefs.real_name]) wants to spawn in one of your bellies. Do you accept?", "Inbelly Spawning", list("Yes", "No")) if(answer != "Yes") - to_chat(potential_prey, "Your request was turned down.") + to_chat(potential_prey, span_notice("Your request was turned down.")) return // Let them know so that they don't spam it. - to_chat(potential_prey, "Predator agreed to your request. Wait a bit while they choose a belly.") + to_chat(potential_prey, span_notice("Predator agreed to your request. Wait a bit while they choose a belly.")) // Where we dropping? var/obj/belly/belly_choice = tgui_input_list(src, "Choose Target Belly", "Belly Choice", src.vore_organs) // Wdym nowhere? if(!belly_choice || !istype(belly_choice)) - to_chat(potential_prey, "Something went wrong with predator selecting a belly. Try again?") - to_chat(src, "No valid belly selected. Inbelly spawn cancelled.") + to_chat(potential_prey, span_notice("Something went wrong with predator selecting a belly. Try again?")) + to_chat(src, span_notice("No valid belly selected. Inbelly spawn cancelled.")) return // Extra caution never hurts if(belly_choice.digest_mode == DM_DIGEST) var/digest_answer = tgui_alert(src, "[belly_choice] is currently set to Digest. Are you sure you want to spawn prey there?", "Inbelly Spawning", list("Yes", "No")) if(digest_answer != "Yes") - to_chat(potential_prey, "Something went wrong with predator selecting a belly. Try again?") - to_chat(src, "Inbelly spawn cancelled.") + to_chat(potential_prey, span_notice("Something went wrong with predator selecting a belly. Try again?")) + to_chat(src, span_notice("Inbelly spawn cancelled.")) // Are they already fat (and/or appropriate equivalent)? var/absorbed = FALSE @@ -101,18 +101,18 @@ Please do not abuse this ability. // They disappeared? if(!potential_prey) - to_chat(src, "No prey found. Something went wrong!") + to_chat(src, span_notice("No prey found. Something went wrong!")) return // Final confirmation for pred var/confirmation_pred = tgui_alert(src, "Are you certain that you want [potential_prey.prefs.real_name] spawned in your [belly_choice][absorbed ? ", absorbed" : ""]?", "Inbelly Spawning", list("Yes", "No")) if(confirmation_pred != "Yes") - to_chat(potential_prey, "Your pred couldn't finish selection. Try again?") - to_chat(src, "Inbelly spawn cancelled.") + to_chat(potential_prey, span_notice("Your pred couldn't finish selection. Try again?")) + to_chat(src, span_notice("Inbelly spawn cancelled.")) return - to_chat(src, "Waiting for prey's confirmation...") + to_chat(src, span_notice("Waiting for prey's confirmation...")) // And final confirmation for prey var/confirmation_prey = tgui_alert(potential_prey, "Are you certain that you to spawn in [src]'s [belly_choice][absorbed ? ", absorbed" : ""]?", "Inbelly Spawning", list("Yes", "No")) @@ -120,13 +120,13 @@ Please do not abuse this ability. if(confirmation_prey == "Yes" && potential_prey && src && belly_choice) //Now we finally spawn them in! if(!is_alien_whitelisted(potential_prey, GLOB.all_species[potential_prey.prefs.species])) - to_chat(potential_prey, "You are not whitelisted to play as currently selected character.") - to_chat(src, "Prey accepted the confirmation, but something went wrong with spawning their character.") + to_chat(potential_prey, span_notice("You are not whitelisted to play as currently selected character.")) + to_chat(src, span_notice("Prey accepted the confirmation, but something went wrong with spawning their character.")) return inbelly_spawn(potential_prey, src, belly_choice, absorbed) else - to_chat(potential_prey, "Inbelly spawn cancelled.") - to_chat(src, "Prey cancelled their inbelly spawn request.") + to_chat(potential_prey, span_notice("Inbelly spawn cancelled.")) + to_chat(src, span_notice("Prey cancelled their inbelly spawn request.")) return /proc/inbelly_spawn(client/prey, mob/living/pred, obj/belly/target_belly, var/absorbed = FALSE) diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index aae7862a507..8171c32f588 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -471,7 +471,7 @@ setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - visible_message(span_vwarning("[src] licks [tasted]!"),span_vnotice("You lick [tasted]. They taste rather like [tasted.get_taste_message()]."),"Slurp!") + visible_message(span_vwarning("[src] licks [tasted]!"),span_vnotice("You lick [tasted]. They taste rather like [tasted.get_taste_message()]."),span_infoplain(span_bold("Slurp!"))) /mob/living/proc/get_taste_message(allow_generic = 1) @@ -510,7 +510,7 @@ return setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - visible_message(span_vwarning("[src] smells [smelled]!"),span_vnotice("You smell [smelled]. They smell like [smelled.get_smell_message()]."),"Sniff!") + visible_message(span_vwarning("[src] smells [smelled]!"),span_vnotice("You smell [smelled]. They smell like [smelled.get_smell_message()]."),span_infoplain(span_bold("Sniff!"))) /mob/living/proc/get_smell_message(allow_generic = 1) if(!vore_smell && !allow_generic) @@ -832,7 +832,7 @@ //If they're passed out, the light won't help them. Same with buckled. Really, I think it's fine to do this whenever. glow_toggle = !glow_toggle - to_chat(src,span_notice("You [glow_toggle ? "en" : "dis"]able your body's glow.")) + to_chat(src,span_notice("You " + span_bold("[glow_toggle ? "en" : "dis"]") + "able your body's glow.")) /mob/living/proc/glow_color() set name = "Glow (Set Color)" @@ -975,7 +975,7 @@ var/obj/item/paicard/ourcard = I if(ourcard.pai && ourcard.pai.client && isbelly(ourcard.loc)) var/obj/belly/B = ourcard.loc - to_chat(ourcard.pai, "[B.desc]") + to_chat(ourcard.pai, span_boldnotice("[B.desc]")) else if(istype(I,/obj/item/reagent_containers/food)) var/obj/item/reagent_containers/food/F = I if(!F.reagents.total_volume) @@ -989,7 +989,7 @@ if(C.bound_mob && (C.bound_mob in C.contents)) if(isbelly(C.loc)) var/obj/belly/B = C.loc - to_chat(C.bound_mob, "Outside of your crystal, you can see; [B.desc]") + to_chat(C.bound_mob, span_notice("Outside of your crystal, you can see; " + span_notice("[B.desc]"))) to_chat(src, span_notice("You can taste the the power of command.")) else to_chat(src, span_notice("You can taste the flavor of garbage. Delicious.")) @@ -1160,7 +1160,7 @@ /mob/living/examine(mob/user, infix, suffix) . = ..() if(custom_link) - . += "Custom link: [custom_link]" + . += "Custom link: " + span_linkify("[custom_link]") if(ooc_notes) . += "OOC Notes: \[View\] - \[Print\]" . += "\[Mechanical Vore Preferences\]" @@ -1190,34 +1190,33 @@ /mob/living/proc/display_voreprefs(mob/user) //Called by Topic() calls on instances of /mob/living (and subtypes) containing vore_prefs as an argument if(!user) CRASH("display_voreprefs() was called without an associated user.") - - var/dat = "
    [src]'s vore preferences

    " + var/dat = "
    " + span_bold("[src]'s vore preferences") + "

    " if(!client?.prefs?.read_preference(/datum/preference/toggle/show_ooc)) - dat += "OOC DISABLED
    " + dat += span_red(span_bold("OOC DISABLED")) + "
    " if(!client?.prefs?.read_preference(/datum/preference/toggle/show_looc)) - dat += "LOOC DISABLED
    " - dat += "Digestable: [digestable ? span_green("Enabled") : span_red("Disabled")]
    " - dat += "Devourable: [devourable ? span_green("Enabled") : span_red("Disabled")]
    " - dat += "Feedable: [feeding ? span_green("Enabled") : span_red("Disabled")]
    " - dat += "Absorption Permission: [absorbable ? span_green("Allowed") : span_red("Disallowed")]
    " - dat += "Leaves Remains: [digest_leave_remains ? span_green("Enabled") : span_red("Disabled")]
    " - dat += "Mob Vore: [allowmobvore ? span_green("Enabled") : span_red("Disabled")]
    " - dat += "Healbelly permission: [permit_healbelly ? span_green("Allowed") : span_red("Disallowed")]
    " - dat += "Selective Mode Pref: [src.selective_preference]
    " - dat += "Spontaneous vore prey: [can_be_drop_prey ? span_green("Enabled") : span_red("Disabled")]
    " - dat += "Spontaneous vore pred: [can_be_drop_pred ? span_green("Enabled") : span_red("Disabled")]
    " - dat += "Drop Vore: [drop_vore ? span_green("Enabled") : span_red("Disabled")]
    " - dat += "Slip Vore: [slip_vore ? span_green("Enabled") : span_red("Disabled")]
    " - dat += "Throw vore: [throw_vore ? span_green("Enabled") : span_red("Disabled")]
    " - dat += "Stumble Vore: [stumble_vore ? span_green("Enabled") : span_red("Disabled")]
    " - dat += "Food Vore: [food_vore ? span_green("Enabled") : span_red("Disabled")]
    " - dat += "Inbelly Spawning: [allow_inbelly_spawning ? span_green("Allowed") : span_red("Disallowed")]
    " - dat += "Spontaneous transformation: [allow_spontaneous_tf ? span_green("Enabled") : span_red("Disabled")]
    " - dat += "Mind transfer: [allow_mind_transfer ? span_green("Allowed") : span_red("Disallowed")]
    " - dat += "Can be stepped on/over: [step_mechanics_pref ? span_green("Allowed") : span_red("Disallowed")]
    " - dat += "Can be picked up: [pickup_pref ? span_green("Allowed") : span_red("Disallowed")]
    " - dat += "Global Vore Privacy is: [eating_privacy_global ? "Subtle" : "Loud"]
    " - dat += "Allow Mimicry: [allow_mimicry ? span_green("Yes") : span_red("No")]
    " + dat += span_red(span_bold("LOOC DISABLED")) + "
    " + dat += span_bold("Digestable:") + " [digestable ? span_green("Enabled") : span_red("Disabled")]
    " + dat += span_bold("Devourable:") + " [devourable ? span_green("Enabled") : span_red("Disabled")]
    " + dat += span_bold("Feedable:") + " [feeding ? span_green("Enabled") : span_red("Disabled")]
    " + dat += span_bold("Absorption Permission:") + " [absorbable ? span_green("Allowed") : span_red("Disallowed")]
    " + dat += span_bold("Leaves Remains:") + " [digest_leave_remains ? span_green("Enabled") : span_red("Disabled")]
    " + dat += span_bold("Mob Vore:") + " [allowmobvore ? span_green("Enabled") : span_red("Disabled")]
    " + dat += span_bold("Healbelly permission:") + " [permit_healbelly ? span_green("Allowed") : span_red("Disallowed")]
    " + dat += span_bold("Selective Mode Pref:") + " [src.selective_preference]
    " + dat += span_bold("Spontaneous vore prey:") + " [can_be_drop_prey ? span_green("Enabled") : span_red("Disabled")]
    " + dat += span_bold("Spontaneous vore pred:") + " [can_be_drop_pred ? span_green("Enabled") : span_red("Disabled")]
    " + dat += span_bold("Drop Vore:") + " [drop_vore ? span_green("Enabled") : span_red("Disabled")]
    " + dat += span_bold("Slip Vore:") + " [slip_vore ? span_green("Enabled") : span_red("Disabled")]
    " + dat += span_bold("Throw vore:") + " [throw_vore ? span_green("Enabled") : span_red("Disabled")]
    " + dat += span_bold("Stumble Vore:") + " [stumble_vore ? span_green("Enabled") : span_red("Disabled")]
    " + dat += span_bold("Food Vore:") + " [food_vore ? span_green("Enabled") : span_red("Disabled")]
    " + dat += span_bold("Inbelly Spawning:") + " [allow_inbelly_spawning ? span_green("Allowed") : span_red("Disallowed")]
    " + dat += span_bold("Spontaneous transformation:") + " [allow_spontaneous_tf ? span_green("Enabled") : span_red("Disabled")]
    " + dat += span_bold("Mind transfer:") + " [allow_mind_transfer ? span_green("Allowed") : span_red("Disallowed")]
    " + dat += span_bold("Can be stepped on/over:") + " [step_mechanics_pref ? span_green("Allowed") : span_red("Disallowed")]
    " + dat += span_bold("Can be picked up:") + " [pickup_pref ? span_green("Allowed") : span_red("Disallowed")]
    " + dat += span_bold("Global Vore Privacy is:") + " [eating_privacy_global ? "Subtle" : "Loud"]
    " + dat += span_bold("Allow Mimicry:") + " [allow_mimicry ? span_green("Yes") : span_red("No")]
    " dat = "
    [dat]
    " var/datum/browser/popup = new(user, "[name]mvp", "Vore Prefs: [src]", 300, 400, src) @@ -1262,124 +1261,124 @@ for(var/belly in vore_organs) if(isbelly(belly)) var/obj/belly/B = belly - to_chat(src, span_chatexport("Belly name: [B.name]")) - to_chat(src, span_chatexport("Belly desc: [B.desc]")) - to_chat(src, span_chatexport("Belly absorbed desc: [B.absorbed_desc]")) - to_chat(src, span_chatexport("Vore verb: [B.vore_verb]")) - to_chat(src, span_chatexport("Struggle messages (outside):")) + to_chat(src, span_chatexport(span_bold("Belly name:") + " [B.name]")) + to_chat(src, span_chatexport(span_bold("Belly desc:") + " [B.desc]")) + to_chat(src, span_chatexport(span_bold("Belly absorbed desc:") + " [B.absorbed_desc]")) + to_chat(src, span_chatexport(span_bold("Vore verb:") + " [B.vore_verb]")) + to_chat(src, span_chatexport(span_bold("Struggle messages (outside):"))) for(var/msg in B.struggle_messages_outside) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Struggle messages (inside):")) + to_chat(src, span_chatexport(span_bold("Struggle messages (inside):"))) for(var/msg in B.struggle_messages_inside) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Absorbed struggle messages (outside):")) + to_chat(src, span_chatexport(span_bold("Absorbed struggle messages (outside):"))) for(var/msg in B.absorbed_struggle_messages_outside) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Absorbed struggle messages (inside):")) + to_chat(src, span_chatexport(span_bold("Absorbed struggle messages (inside):"))) for(var/msg in B.absorbed_struggle_messages_inside) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Escape attempt messages (owner):")) + to_chat(src, span_chatexport(span_bold("Escape attempt messages (owner):"))) for(var/msg in B.escape_attempt_messages_owner) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Escape attempt messages (prey):")) + to_chat(src, span_chatexport(span_bold("Escape attempt messages (prey):"))) for(var/msg in B.escape_attempt_messages_prey) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Escape messages (owner):")) + to_chat(src, span_chatexport(span_bold("Escape messages (owner):"))) for(var/msg in B.escape_messages_owner) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Escape messages (prey):")) + to_chat(src, span_chatexport(span_bold("Escape messages (prey):"))) for(var/msg in B.escape_messages_prey) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Escape messages (outside):")) + to_chat(src, span_chatexport(span_bold("Escape messages (outside):"))) for(var/msg in B.escape_messages_outside) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Escape item messages (owner):")) + to_chat(src, span_chatexport(span_bold("Escape item messages (owner):"))) for(var/msg in B.escape_item_messages_owner) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Escape item messages (prey):")) + to_chat(src, span_chatexport(span_bold("Escape item messages (prey):"))) for(var/msg in B.escape_item_messages_prey) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Escape item messages (outside):")) + to_chat(src, span_chatexport(span_bold("Escape item messages (outside):"))) for(var/msg in B.escape_item_messages_outside) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Escape fail messages (owner):")) + to_chat(src, span_chatexport(span_bold("Escape fail messages (owner):"))) for(var/msg in B.escape_fail_messages_owner) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Escape fail messages (prey):")) + to_chat(src, span_chatexport(span_bold("Escape fail messages (prey):"))) for(var/msg in B.escape_fail_messages_prey) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Absorbed escape attempt messages (owner):")) + to_chat(src, span_chatexport(span_bold("Absorbed escape attempt messages (owner):"))) for(var/msg in B.escape_attempt_absorbed_messages_owner) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Absorbed escape attempt messages (prey):")) + to_chat(src, span_chatexport(span_bold("Absorbed escape attempt messages (prey):"))) for(var/msg in B.escape_attempt_absorbed_messages_prey) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Absorbed escape messages (owner):")) + to_chat(src, span_chatexport(span_bold("Absorbed escape messages (owner):"))) for(var/msg in B.escape_absorbed_messages_owner) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Absorbed escape messages (prey):")) + to_chat(src, span_chatexport(span_bold("Absorbed escape messages (prey):"))) for(var/msg in B.escape_absorbed_messages_prey) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Absorbed escape messages (outside):")) + to_chat(src, span_chatexport(span_bold("Absorbed escape messages (outside):"))) for(var/msg in B.escape_absorbed_messages_outside) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Absorbed escape fail messages (owner):")) + to_chat(src, span_chatexport(span_bold("Absorbed escape fail messages (owner):"))) for(var/msg in B.escape_fail_absorbed_messages_owner) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Absorbed escape fail messages (prey):")) + to_chat(src, span_chatexport(span_bold("Absorbed escape fail messages (prey):"))) for(var/msg in B.escape_fail_absorbed_messages_prey) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Primary transfer messages (owner):")) + to_chat(src, span_chatexport(span_bold("Primary transfer messages (owner):"))) for(var/msg in B.primary_transfer_messages_owner) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Primary transfer messages (prey):")) + to_chat(src, span_chatexport(span_bold("Primary transfer messages (prey):"))) for(var/msg in B.primary_transfer_messages_prey) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Secondary transfer messages (owner):")) + to_chat(src, span_chatexport(span_bold("Secondary transfer messages (owner):"))) for(var/msg in B.secondary_transfer_messages_owner) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Secondary transfer messages (prey):")) + to_chat(src, span_chatexport(span_bold("Secondary transfer messages (prey):"))) for(var/msg in B.secondary_transfer_messages_prey) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Digest chance messages (owner):")) + to_chat(src, span_chatexport(span_bold("Digest chance messages (owner):"))) for(var/msg in B.digest_chance_messages_owner) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Digest chance messages (prey):")) + to_chat(src, span_chatexport(span_bold("Digest chance messages (prey):"))) for(var/msg in B.digest_chance_messages_prey) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Absorb chance messages (owner):")) + to_chat(src, span_chatexport(span_bold("Absorb chance messages (owner):"))) for(var/msg in B.absorb_chance_messages_owner) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Absorb chance messages (prey):")) + to_chat(src, span_chatexport(span_bold("Absorb chance messages (prey):"))) for(var/msg in B.absorb_chance_messages_prey) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Digest messages (owner):")) + to_chat(src, span_chatexport(span_bold("Digest messages (owner):"))) for(var/msg in B.digest_messages_owner) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Digest messages (prey):")) + to_chat(src, span_chatexport(span_bold("Digest messages (prey):"))) for(var/msg in B.digest_messages_prey) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Absorb messages (owner):")) + to_chat(src, span_chatexport(span_bold("Absorb messages (owner):"))) for(var/msg in B.absorb_messages_owner) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Absorb messages (prey):")) + to_chat(src, span_chatexport(span_bold("Absorb messages (prey):"))) for(var/msg in B.absorb_messages_prey) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Unabsorb messages (owner):")) + to_chat(src, span_chatexport(span_bold("Unabsorb messages (owner):"))) for(var/msg in B.unabsorb_messages_owner) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Unabsorb messages (prey):")) + to_chat(src, span_chatexport(span_bold("Unabsorb messages (prey):"))) for(var/msg in B.unabsorb_messages_prey) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Examine messages (when full):")) + to_chat(src, span_chatexport(span_bold("Examine messages (when full):"))) for(var/msg in B.examine_messages) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Examine messages (with absorbed victims):")) + to_chat(src, span_chatexport(span_bold("Examine messages (with absorbed victims):"))) for(var/msg in B.examine_messages_absorbed) to_chat(src, span_chatexport("[msg]")) - to_chat(src, span_chatexport("Emote lists:")) + to_chat(src, span_chatexport(span_bold("Emote lists:"))) for(var/EL in B.emote_lists) - to_chat(src, span_chatexport("[EL]:")) + to_chat(src, span_chatexport(span_bold("[EL]:"))) for(var/msg in B.emote_lists[EL]) to_chat(src, span_chatexport("[msg]")) @@ -1400,7 +1399,7 @@ var/mob/living/owner = parent if(owner.client) create_mob_button(parent) - owner.verbs |= /mob/proc/insidePanel + add_verb(owner, /mob/proc/insidePanel) owner.vorePanel = new(owner) /datum/component/vore_panel/UnregisterFromParent() @@ -1411,7 +1410,7 @@ owner?.client?.screen -= screen_icon UnregisterSignal(screen_icon, COMSIG_CLICK) qdel_null(screen_icon) - owner.verbs -= /mob/proc/insidePanel + remove_verb(owner, /mob/proc/insidePanel) qdel_null(owner.vorePanel) /datum/component/vore_panel/proc/create_mob_button(mob/user) diff --git a/code/modules/vore/eating/silicon_vr.dm b/code/modules/vore/eating/silicon_vr.dm index cc80329ea7e..dd6d2260cb9 100644 --- a/code/modules/vore/eating/silicon_vr.dm +++ b/code/modules/vore/eating/silicon_vr.dm @@ -99,7 +99,7 @@ . += "[flavor_text]" if(master.ooc_notes) - . += "OOC Notes: \[View\] - \[Print\]" + . += span_deptradio("OOC Notes:") + "\[View\] - \[Print\]" // Allow dissipating ai holograms by attacking them /obj/effect/overlay/aiholo/attack_hand(mob/living/user) diff --git a/code/modules/vore/eating/simple_animal_vr.dm b/code/modules/vore/eating/simple_animal_vr.dm index 954df2ea369..21380ccf596 100644 --- a/code/modules/vore/eating/simple_animal_vr.dm +++ b/code/modules/vore/eating/simple_animal_vr.dm @@ -72,7 +72,7 @@ if(istype(O, /obj/item/newspaper) && !(ckey || (ai_holder.hostile && faction != user.faction)) && isturf(user.loc)) if(ai_holder.retaliate && prob(vore_pounce_chance/2)) // This is a gamble! user.Weaken(5) //They get tackled anyway whether they're edible or not. - user.visible_message("[user] swats [src] with [O] and promptly gets tackled!!") + user.visible_message(span_danger("[user] swats [src] with [O] and promptly gets tackled!")) if(will_eat(user)) set_AI_busy(TRUE) animal_nom(user) diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index b046631ffae..8da9844d4ec 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -694,10 +694,10 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", var/intent = "Examine" if(isliving(target)) - intent = tgui_alert(usr, "What do you want to do to them?","Query",list("Examine","Help Out","Devour")) + intent = tgui_alert(user, "What do you want to do to them?","Query",list("Examine","Help Out","Devour")) else if(istype(target, /obj/item)) - intent = tgui_alert(usr, "What do you want to do to that?","Query",list("Examine","Use Hand")) + intent = tgui_alert(user, "What do you want to do to that?","Query",list("Examine","Use Hand")) switch(intent) if("Examine") //Examine a mob inside another mob @@ -728,19 +728,19 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", to_chat(user, span_warning("You can't do that in your state!")) return TRUE - to_chat(user,"[span_green("You begin to push [M] to freedom!")]") - to_chat(M,"[host] begins to push you to freedom!") + to_chat(user,span_vnotice("[span_green("You begin to push [M] to freedom!")]")) + to_chat(M,span_vnotice("[host] begins to push you to freedom!")) to_chat(OB.owner,span_vwarning("Someone is trying to escape from inside you!")) sleep(50) if(prob(33)) OB.release_specific_contents(M) - to_chat(user,"[span_green("You manage to help [M] to safety!")]") - to_chat(M, "[span_green("[host] pushes you free!")]") + to_chat(user,span_vnotice("[span_green("You manage to help [M] to safety!")]")) + to_chat(M, span_vnotice("[span_green("[host] pushes you free!")]")) to_chat(OB.owner,span_valert("[M] forces free of the confines of your body!")) else to_chat(user,span_valert("[M] slips back down inside despite your efforts.")) - to_chat(M,span_valert(" Even with [host]'s help, you slip back inside again.")) - to_chat(OB.owner,"[span_green("Your body efficiently shoves [M] back where they belong.")]") + to_chat(M,span_valert("Even with [host]'s help, you slip back inside again.")) + to_chat(OB.owner,span_vnotice("[span_green("Your body efficiently shoves [M] back where they belong.")]")) return TRUE if("Devour") //Eat the inside mob @@ -835,7 +835,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", if(host.stat) to_chat(user,span_warning("You can't do that in your state!")) return TRUE - var/obj/belly/choice = tgui_input_list(usr, "Move [target] where?","Select Belly", host.vore_organs) + var/obj/belly/choice = tgui_input_list(user, "Move [target] where?","Select Belly", host.vore_organs) if(!choice || !(target in host.vore_selected)) return TRUE to_chat(target,span_vwarning("You're squished from [host]'s [lowertext(host.vore_selected.name)] to their [lowertext(choice.name)]!")) @@ -910,30 +910,30 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", if(process_options.len) process_options += "Cancel" else - to_chat(usr, "You cannot instantly process [ourtarget].") + to_chat(user, span_vwarning("You cannot instantly process [ourtarget].")) return - var/ourchoice = tgui_input_list(usr, "How would you prefer to process \the [target]? This will perform the given action instantly if the prey accepts.","Instant Process", process_options) + var/ourchoice = tgui_input_list(user, "How would you prefer to process \the [target]? This will perform the given action instantly if the prey accepts.","Instant Process", process_options) if(!ourchoice) return if(!ourtarget.client) - to_chat(usr, "You cannot instantly process [ourtarget].") + to_chat(user, span_vwarning("You cannot instantly process [ourtarget].")) return var/obj/belly/b = ourtarget.loc switch(ourchoice) if("Digest") if(ourtarget.absorbed) - to_chat(usr, "\The [ourtarget] is absorbed, and cannot presently be digested.") + to_chat(user, span_vwarning("\The [ourtarget] is absorbed, and cannot presently be digested.")) return - if(tgui_alert(ourtarget, "\The [usr] is attempting to instantly digest you. Is this something you are okay with happening to you?","Instant Digest", list("No", "Yes")) != "Yes") - to_chat(usr, "\The [ourtarget] declined your digest attempt.") - to_chat(ourtarget, "You declined the digest attempt.") + if(tgui_alert(ourtarget, "\The [user] is attempting to instantly digest you. Is this something you are okay with happening to you?","Instant Digest", list("No", "Yes")) != "Yes") + to_chat(user, span_vwarning("\The [ourtarget] declined your digest attempt.")) + to_chat(ourtarget, span_vwarning("You declined the digest attempt.")) return if(ourtarget.loc != b) - to_chat(usr, "\The [ourtarget] is no longer in \the [b].") + to_chat(user, span_vwarning("\The [ourtarget] is no longer in \the [b].")) return - if(isliving(usr)) - var/mob/living/l = usr + if(isliving(user)) + var/mob/living/l = user var/thismuch = ourtarget.health + 100 if(ishuman(l)) var/mob/living/carbon/human/h = l @@ -949,29 +949,29 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", ourtarget.mind?.vore_death = TRUE b.handle_digestion_death(ourtarget) if("Absorb") - if(tgui_alert(ourtarget, "\The [usr] is attempting to instantly absorb you. Is this something you are okay with happening to you?","Instant Absorb", list("No", "Yes")) != "Yes") - to_chat(usr, "\The [ourtarget] declined your absorb attempt.") - to_chat(ourtarget, "You declined the absorb attempt.") + if(tgui_alert(ourtarget, "\The [user] is attempting to instantly absorb you. Is this something you are okay with happening to you?","Instant Absorb", list("No", "Yes")) != "Yes") + to_chat(user, span_vwarning("\The [ourtarget] declined your absorb attempt.")) + to_chat(ourtarget, span_vwarning("You declined the absorb attempt.")) return if(ourtarget.loc != b) - to_chat(usr, "\The [ourtarget] is no longer in \the [b].") + to_chat(user, span_vwarning("\The [ourtarget] is no longer in \the [b].")) return - if(isliving(usr)) - var/mob/living/l = usr + if(isliving(user)) + var/mob/living/l = user l.adjust_nutrition(ourtarget.nutrition) var/n = 0 - ourtarget.nutrition ourtarget.adjust_nutrition(n) b.absorb_living(ourtarget) if("Knockout") - if(tgui_alert(ourtarget, "\The [usr] is attempting to instantly make you unconscious, you will be unable until ejected from the pred. Is this something you are okay with happening to you?","Instant Knockout", list("No", "Yes")) != "Yes") - to_chat(usr, "\The [ourtarget] declined your knockout attempt.") - to_chat(ourtarget, "You declined the knockout attempt.") + if(tgui_alert(ourtarget, "\The [user] is attempting to instantly make you unconscious, you will be unable until ejected from the pred. Is this something you are okay with happening to you?","Instant Knockout", list("No", "Yes")) != "Yes") + to_chat(user, span_vwarning("\The [ourtarget] declined your knockout attempt.")) + to_chat(ourtarget, span_vwarning("You declined the knockout attempt.")) return if(ourtarget.loc != b) - to_chat(usr, "\The [ourtarget] is no longer in \the [b].") + to_chat(user, span_vwarning("\The [ourtarget] is no longer in \the [b].")) return ourtarget.AdjustSleeping(500000) - to_chat(ourtarget, "\The [usr] has put you to sleep, you will remain unconscious until ejected from the belly.") + to_chat(ourtarget, span_vwarning("\The [user] has put you to sleep, you will remain unconscious until ejected from the belly.")) if("Cancel") return if("Health Check") @@ -979,7 +979,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", var/target_health = round((H.health/H.getMaxHealth())*100) var/condition var/condition_consequences - to_chat(usr, "\The [target] is at [target_health]% health.") + to_chat(user, span_vwarning("\The [target] is at [target_health]% health.")) if(H.blinded) condition += "blinded" condition_consequences += "hear emotes" @@ -996,18 +996,18 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", condition += "sleeping" condition_consequences += "hear or do anything" if(condition) - to_chat(usr, "\The [target] is currently [condition], they will not be able to [condition_consequences].") + to_chat(user, span_vwarning("\The [target] is currently [condition], they will not be able to [condition_consequences].")) return /datum/vore_look/proc/set_attr(mob/user, params) if(!host.vore_selected) - tgui_alert_async(usr, "No belly selected to modify.") + tgui_alert_async(user, "No belly selected to modify.") return FALSE var/attr = params["attribute"] switch(attr) if("b_name") - var/new_name = html_encode(tgui_input_text(usr,"Belly's new name:","New Name")) + var/new_name = html_encode(tgui_input_text(user,"Belly's new name:","New Name")) var/failure_msg if(length(new_name) > BELLIES_NAME_MAX || length(new_name) < BELLIES_NAME_MIN) @@ -1036,7 +1036,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", . = TRUE if("b_mode") var/list/menu_list = host.vore_selected.digest_modes.Copy() - var/new_mode = tgui_input_list(usr, "Choose Mode (currently [host.vore_selected.digest_mode])", "Mode Choice", menu_list) + var/new_mode = tgui_input_list(user, "Choose Mode (currently [host.vore_selected.digest_mode])", "Mode Choice", menu_list) if(!new_mode) return FALSE @@ -1045,7 +1045,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", . = TRUE if("b_addons") var/list/menu_list = host.vore_selected.mode_flag_list.Copy() - var/toggle_addon = tgui_input_list(usr, "Toggle Addon", "Addon Choice", menu_list) + var/toggle_addon = tgui_input_list(user, "Toggle Addon", "Addon Choice", menu_list) if(!toggle_addon) return FALSE host.vore_selected.mode_flags ^= host.vore_selected.mode_flag_list[toggle_addon] @@ -1054,7 +1054,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", if("b_item_mode") var/list/menu_list = host.vore_selected.item_digest_modes.Copy() - var/new_mode = tgui_input_list(usr, "Choose Mode (currently [host.vore_selected.item_digest_mode])", "Mode Choice", menu_list) + var/new_mode = tgui_input_list(user, "Choose Mode (currently [host.vore_selected.item_digest_mode])", "Mode Choice", menu_list) if(!new_mode) return FALSE @@ -1066,14 +1066,14 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", . = TRUE if("b_contamination_flavor") var/list/menu_list = contamination_flavors.Copy() - var/new_flavor = tgui_input_list(usr, "Choose Contamination Flavor Text Type (currently [host.vore_selected.contamination_flavor])", "Flavor Choice", menu_list) + var/new_flavor = tgui_input_list(user, "Choose Contamination Flavor Text Type (currently [host.vore_selected.contamination_flavor])", "Flavor Choice", menu_list) if(!new_flavor) return FALSE host.vore_selected.contamination_flavor = new_flavor . = TRUE if("b_contamination_color") var/list/menu_list = contamination_colors.Copy() - var/new_color = tgui_input_list(usr, "Choose Contamination Color (currently [host.vore_selected.contamination_color])", "Color Choice", menu_list) + var/new_color = tgui_input_list(user, "Choose Contamination Color (currently [host.vore_selected.contamination_color])", "Color Choice", menu_list) if(!new_color) return FALSE host.vore_selected.contamination_color = new_color @@ -1081,28 +1081,28 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", . = TRUE if("b_egg_type") var/list/menu_list = global_vore_egg_types.Copy() - var/new_egg_type = tgui_input_list(usr, "Choose Egg Type (currently [host.vore_selected.egg_type])", "Egg Choice", menu_list) + var/new_egg_type = tgui_input_list(user, "Choose Egg Type (currently [host.vore_selected.egg_type])", "Egg Choice", menu_list) if(!new_egg_type) return FALSE host.vore_selected.egg_type = new_egg_type . = TRUE if("b_desc") - var/new_desc = html_encode(tgui_input_text(usr,"Belly Description, '%pred' will be replaced with your name. '%prey' will be replaced with the prey's name. '%belly' will be replaced with your belly's name. ([BELLIES_DESC_MAX] char limit):","New Description",host.vore_selected.desc, multiline = TRUE, prevent_enter = TRUE)) + var/new_desc = html_encode(tgui_input_text(user,"Belly Description, '%pred' will be replaced with your name. '%prey' will be replaced with the prey's name. '%belly' will be replaced with your belly's name. ([BELLIES_DESC_MAX] char limit):","New Description",host.vore_selected.desc, multiline = TRUE, prevent_enter = TRUE)) if(new_desc) new_desc = readd_quotes(new_desc) if(length(new_desc) > BELLIES_DESC_MAX) - tgui_alert_async(usr, "Entered belly desc too long. [BELLIES_DESC_MAX] character limit.","Error") + tgui_alert_async(user, "Entered belly desc too long. [BELLIES_DESC_MAX] character limit.","Error") return FALSE host.vore_selected.desc = new_desc . = TRUE if("b_absorbed_desc") - var/new_desc = html_encode(tgui_input_text(usr,"Belly Description for absorbed prey, '%pred' will be replaced with your name. '%prey' will be replaced with the prey's name. '%belly' will be replaced with your belly's name. ([BELLIES_DESC_MAX] char limit):","New Description",host.vore_selected.absorbed_desc, multiline = TRUE, prevent_enter = TRUE)) + var/new_desc = html_encode(tgui_input_text(user,"Belly Description for absorbed prey, '%pred' will be replaced with your name. '%prey' will be replaced with the prey's name. '%belly' will be replaced with your belly's name. ([BELLIES_DESC_MAX] char limit):","New Description",host.vore_selected.absorbed_desc, multiline = TRUE, prevent_enter = TRUE)) if(new_desc) new_desc = readd_quotes(new_desc) if(length(new_desc) > BELLIES_DESC_MAX) - tgui_alert_async(usr, "Entered belly desc too long. [BELLIES_DESC_MAX] character limit.","Error") + tgui_alert_async(user, "Entered belly desc too long. [BELLIES_DESC_MAX] character limit.","Error") return FALSE host.vore_selected.absorbed_desc = new_desc . = TRUE @@ -1420,31 +1420,31 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", host.vore_selected.emote_lists = initial(host.vore_selected.emote_lists) . = TRUE if("b_verb") - var/new_verb = html_encode(tgui_input_text(usr,"New verb when eating (infinitive tense, e.g. nom or swallow):","New Verb")) + var/new_verb = html_encode(tgui_input_text(user,"New verb when eating (infinitive tense, e.g. nom or swallow):","New Verb")) if(length(new_verb) > BELLIES_NAME_MAX || length(new_verb) < BELLIES_NAME_MIN) - tgui_alert_async(usr, "Entered verb length invalid (must be longer than [BELLIES_NAME_MIN], no longer than [BELLIES_NAME_MAX]).","Error") + tgui_alert_async(user, "Entered verb length invalid (must be longer than [BELLIES_NAME_MIN], no longer than [BELLIES_NAME_MAX]).","Error") return FALSE host.vore_selected.vore_verb = new_verb . = TRUE if("b_release_verb") - var/new_release_verb = html_encode(tgui_input_text(usr,"New verb when releasing from stomach (e.g. expels or coughs or drops):","New Release Verb")) + var/new_release_verb = html_encode(tgui_input_text(user,"New verb when releasing from stomach (e.g. expels or coughs or drops):","New Release Verb")) if(length(new_release_verb) > BELLIES_NAME_MAX || length(new_release_verb) < BELLIES_NAME_MIN) - tgui_alert_async(usr, "Entered verb length invalid (must be longer than [BELLIES_NAME_MIN], no longer than [BELLIES_NAME_MAX]).","Error") + tgui_alert_async(user, "Entered verb length invalid (must be longer than [BELLIES_NAME_MIN], no longer than [BELLIES_NAME_MAX]).","Error") return FALSE host.vore_selected.release_verb = new_release_verb . = TRUE if("b_eating_privacy") - var/privacy_choice = tgui_input_list(usr, "Choose your belly-specific preference. Default uses global preference!", "Eating message privacy", list("default", "subtle", "loud"), "default") + var/privacy_choice = tgui_input_list(user, "Choose your belly-specific preference. Default uses global preference!", "Eating message privacy", list("default", "subtle", "loud"), "default") if(privacy_choice == null) return FALSE host.vore_selected.eating_privacy_local = privacy_choice . = TRUE if("b_silicon_belly") - var/belly_choice = tgui_alert(usr, "Choose whether you'd like your belly overlay to show from sleepers, \ + var/belly_choice = tgui_alert(user, "Choose whether you'd like your belly overlay to show from sleepers, \ normal vore bellies, or an average of the two. NOTE: This ONLY applies to silicons, not human mobs!", "Belly Overlay \ Preference", list("Sleeper", "Vorebelly", "Both")) @@ -1601,7 +1601,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", . = TRUE if("b_drainmode") var/list/menu_list = host.vore_selected.drainmodes.Copy() - var/new_drainmode = tgui_input_list(usr, "Choose Mode (currently [host.vore_selected.digest_mode])", "Mode Choice", menu_list) + var/new_drainmode = tgui_input_list(user, "Choose Mode (currently [host.vore_selected.digest_mode])", "Mode Choice", menu_list) if(!new_drainmode) return FALSE @@ -1626,12 +1626,12 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", if("b_escapable") if(host.vore_selected.escapable == 0) //Possibly escapable and special interactions. host.vore_selected.escapable = 1 - to_chat(usr,span_warning("Prey now have special interactions with your [lowertext(host.vore_selected.name)] depending on your settings.")) + to_chat(user,span_warning("Prey now have special interactions with your [lowertext(host.vore_selected.name)] depending on your settings.")) else if(host.vore_selected.escapable == 1) //Never escapable. host.vore_selected.escapable = 0 - to_chat(usr,span_warning("Prey will not be able to have special interactions with your [lowertext(host.vore_selected.name)].")) + to_chat(user,span_warning("Prey will not be able to have special interactions with your [lowertext(host.vore_selected.name)].")) else - tgui_alert_async(usr, "Something went wrong. Your stomach will now not have special interactions. Press the button enable them again and tell a dev.","Error") //If they somehow have a varable that's not 0 or 1 + tgui_alert_async(user, "Something went wrong. Your stomach will now not have special interactions. Press the button enable them again and tell a dev.","Error") //If they somehow have a varable that's not 0 or 1 host.vore_selected.escapable = 0 . = TRUE if("b_escapechance") @@ -1655,7 +1655,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", host.vore_selected.transferchance = sanitize_integer(transfer_chance_input, 0, 100, initial(host.vore_selected.transferchance)) . = TRUE if("b_transferlocation") - var/obj/belly/choice = tgui_input_list(usr, "Where do you want your [lowertext(host.vore_selected.name)] to lead if prey resists?","Select Belly", (host.vore_organs + "None - Remove" - host.vore_selected)) + var/obj/belly/choice = tgui_input_list(user, "Where do you want your [lowertext(host.vore_selected.name)] to lead if prey resists?","Select Belly", (host.vore_organs + "None - Remove" - host.vore_selected)) if(!choice) //They cancelled, no changes return FALSE @@ -1670,7 +1670,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", host.vore_selected.transferchance_secondary = sanitize_integer(transfer_secondary_chance_input, 0, 100, initial(host.vore_selected.transferchance_secondary)) . = TRUE if("b_transferlocation_secondary") - var/obj/belly/choice_secondary = tgui_input_list(usr, "Where do you want your [lowertext(host.vore_selected.name)] to alternately lead if prey resists?","Select Belly", (host.vore_organs + "None - Remove" - host.vore_selected)) + var/obj/belly/choice_secondary = tgui_input_list(user, "Where do you want your [lowertext(host.vore_selected.name)] to alternately lead if prey resists?","Select Belly", (host.vore_organs + "None - Remove" - host.vore_selected)) if(!choice_secondary) //They cancelled, no changes return FALSE @@ -1706,17 +1706,17 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", host.vore_selected.clear_preview(host) //Clears the stomach overlay. This is a failsafe but shouldn't occur. . = TRUE if("b_fullscreen_color") - var/newcolor = input(usr, "Choose a color.", "", host.vore_selected.belly_fullscreen_color) as color|null + var/newcolor = input(user, "Choose a color.", "", host.vore_selected.belly_fullscreen_color) as color|null if(newcolor) host.vore_selected.belly_fullscreen_color = newcolor . = TRUE if("b_fullscreen_color_secondary") - var/newcolor = input(usr, "Choose a color.", "", host.vore_selected.belly_fullscreen_color_secondary) as color|null + var/newcolor = input(user, "Choose a color.", "", host.vore_selected.belly_fullscreen_color_secondary) as color|null if(newcolor) host.vore_selected.belly_fullscreen_color_secondary = newcolor . = TRUE if("b_fullscreen_color_trinary") - var/newcolor = input(usr, "Choose a color.", "", host.vore_selected.belly_fullscreen_color_trinary) as color|null + var/newcolor = input(user, "Choose a color.", "", host.vore_selected.belly_fullscreen_color_trinary) as color|null if(newcolor) host.vore_selected.belly_fullscreen_color_trinary = newcolor . = TRUE @@ -1724,7 +1724,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", host.vore_selected.save_digest_mode = !host.vore_selected.save_digest_mode . = TRUE if("b_del") - var/alert = tgui_alert(usr, "Are you sure you want to delete your [lowertext(host.vore_selected.name)]?","Confirmation",list("Cancel","Delete")) + var/alert = tgui_alert(user, "Are you sure you want to delete your [lowertext(host.vore_selected.name)]?","Confirmation",list("Cancel","Delete")) if(alert != "Delete") return FALSE @@ -1758,7 +1758,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", if("b_belly_sprite_to_affect") if (istype(host, /mob/living/carbon/human)) var/mob/living/carbon/human/hhost = host - var/belly_choice = tgui_input_list(usr, "Which belly sprite do you want your [lowertext(hhost.vore_selected.name)] to affect?","Select Region", hhost.vore_icon_bellies) + var/belly_choice = tgui_input_list(user, "Which belly sprite do you want your [lowertext(hhost.vore_selected.name)] to affect?","Select Region", hhost.vore_icon_bellies) if(!belly_choice) //They cancelled, no changes return FALSE else @@ -1821,7 +1821,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", if("b_tail_to_change_to") if (istype(host, /mob/living/carbon/human)) var/mob/living/carbon/human/hhost = host - var/tail_choice = tgui_input_list(usr, "Which tail sprite do you want to use when your [lowertext(host.vore_selected.name)] is filled?","Select Sprite", global.tail_styles_list) + var/tail_choice = tgui_input_list(user, "Which tail sprite do you want to use when your [lowertext(host.vore_selected.name)] is filled?","Select Sprite", global.tail_styles_list) if(!tail_choice) //They cancelled, no changes return FALSE else @@ -1830,21 +1830,21 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", if("b_tail_color") if (istype(host, /mob/living/carbon/human)) var/mob/living/carbon/human/hhost = host - var/newcolor = input(usr, "Choose tail color.", "", hhost.vore_selected.tail_colouration) as color|null + var/newcolor = input(user, "Choose tail color.", "", hhost.vore_selected.tail_colouration) as color|null if(newcolor) hhost.vore_selected.tail_colouration = newcolor . = TRUE if("b_tail_color2") if (istype(host, /mob/living/carbon/human)) var/mob/living/carbon/human/hhost = host - var/newcolor = input(usr, "Choose tail secondary color.", "", hhost.vore_selected.tail_extra_overlay) as color|null + var/newcolor = input(user, "Choose tail secondary color.", "", hhost.vore_selected.tail_extra_overlay) as color|null if(newcolor) hhost.vore_selected.tail_extra_overlay = newcolor . = TRUE if("b_tail_color3") if (istype(host, /mob/living/carbon/human)) var/mob/living/carbon/human/hhost = host - var/newcolor = input(usr, "Choose tail tertiary color.", "", hhost.vore_selected.tail_extra_overlay2) as color|null + var/newcolor = input(user, "Choose tail tertiary color.", "", hhost.vore_selected.tail_extra_overlay2) as color|null if(newcolor) hhost.vore_selected.tail_extra_overlay2 = newcolor . = TRUE diff --git a/code/modules/vore/fluffstuff/custom_clothes_vr.dm b/code/modules/vore/fluffstuff/custom_clothes_vr.dm index f9321ba9b1d..abad2a0a959 100644 --- a/code/modules/vore/fluffstuff/custom_clothes_vr.dm +++ b/code/modules/vore/fluffstuff/custom_clothes_vr.dm @@ -68,7 +68,7 @@ icon_override = 'icons/vore/custom_clothes_vr.dmi' item_state = "coatroiz_mob" -/obj/item/clothing/suit/storage/hooded/wintercoat/roiz/ui_action_click() +/obj/item/clothing/suit/storage/hooded/wintercoat/roiz/ui_action_click(mob/user, actiontype) ToggleHood_roiz() /obj/item/clothing/suit/storage/hooded/wintercoat/roiz/equipped(mob/user, slot) @@ -547,7 +547,7 @@ //Chica Head /obj/item/clothing/head/helmet/fluff/freddy/chica - desc = span_red("LET'S EAT!") + desc = span_red(span_bold("LET'S EAT!")) icon_state = "chicahead" item_state = "chicahead_mob" @@ -586,7 +586,7 @@ //Chica Suit /obj/item/clothing/suit/fluff/freddy/chica - desc = span_red("LET'S EAT!") + desc = span_red(span_bold("LET'S EAT!")) icon_state = "chicasuit" item_state = "chicasuit_mob" @@ -783,7 +783,7 @@ light_overlay = null light_system = MOVABLE_LIGHT - action_button_name = "Toggle pom-pom" + actions_types = list(/datum/action/item_action/toggle_pom_pom) /obj/item/clothing/head/fluff/pompom/digest_act(var/atom/movable/item_storage = null) return FALSE @@ -1129,7 +1129,7 @@ if (ismob(loc)) //should allow masks to update when it is opened/closed var/mob/M = loc M.update_inv_wear_mask() - usr.update_action_buttons() + usr.update_action_buttons_icon() //Vorrarkul: Theodora Lindt /obj/item/clothing/suit/chococoat @@ -1302,7 +1302,7 @@ Departamental Swimsuits, for general use //For general use maybe /obj/item/clothing/under/batter //I guess we're going OFF limits. name = "Worn baseball outfit" - desc = "Purification in progress..." + desc = span_bold("Purification in progress...") icon = 'icons/vore/custom_clothes_vr.dmi' icon_override = 'icons/vore/custom_clothes_vr.dmi' icon_state = "batter" @@ -1541,7 +1541,7 @@ Departamental Swimsuits, for general use icon_override = 'icons/vore/custom_clothes_vr.dmi' item_state = "kilanocoat_mob" -/obj/item/clothing/suit/storage/hooded/wintercoat/kilanocoat/ui_action_click() +/obj/item/clothing/suit/storage/hooded/wintercoat/kilanocoat/ui_action_click(mob/user, actiontype) ToggleHood_kilano() /obj/item/clothing/suit/storage/hooded/wintercoat/kilanocoat/equipped(mob/user, slot) @@ -2115,7 +2115,7 @@ Departamental Swimsuits, for general use user.visible_message(span_notice("[user] harmlessly bops [target] with \the [src]."), \ span_notice("\The [src] harmlessly bops [target]. The hat seems... unwilling?")) else - user.visible_message("\The [src] flops over [user]'s' head for a moment, but they seem alright.", \ + user.visible_message(span_bold("\The [src]") + " flops over [user]'s' head for a moment, but they seem alright.", \ span_notice("\The [src] flops over your head for a moment, but you correct it without issue. There we go!")) /obj/item/clothing/head/fluff/nikki/proc/hat_warp_checks(var/mob/living/target, mob/user, proximity_flag) @@ -2187,13 +2187,13 @@ Departamental Swimsuits, for general use translocator.attack_self(user, user) return else - to_chat(user, "\The [src] doesn't have a translocator inside it right now.
    ") + to_chat(user, span_warning("\The [src] doesn't have a translocator inside it right now.")) return /obj/item/clothing/head/fluff/nikki/examine(mob/user) // If it has a translocator installed, make it very obvious to viewers that something WEIRD is going on with this hat. . = ..() if (translocator) - . += "Weird... You can't see the bottom of the hole inside the hat..." + . += "Weird... " + span_danger("You can't see the bottom of the hole inside the hat...") /obj/item/clothing/head/fluff/nikki/equipped(mob/living/carbon/human/user, slot) . = ..() @@ -2353,7 +2353,7 @@ Departamental Swimsuits, for general use icon_override = 'icons/vore/custom_onmob_vr.dmi' item_state = "mechahood_mob" -/obj/item/clothing/suit/storage/hooded/wintercoat/fluff/mechanic/ui_action_click() +/obj/item/clothing/suit/storage/hooded/wintercoat/fluff/mechanic/ui_action_click(mob/user, actiontype) ToggleHood_mechacoat() /obj/item/clothing/suit/storage/hooded/wintercoat/fluff/mechanic/equipped(mob/user, slot) @@ -2411,7 +2411,7 @@ Departamental Swimsuits, for general use icon_override = 'icons/vore/custom_onmob_vr.dmi' item_state = "evelynhood_mob" -/obj/item/clothing/suit/storage/hooded/wintercoat/security/fluff/evelyn/ui_action_click() +/obj/item/clothing/suit/storage/hooded/wintercoat/security/fluff/evelyn/ui_action_click(mob/user, actiontype) ToggleHood_evelyn() /obj/item/clothing/suit/storage/hooded/wintercoat/security/fluff/evelyn/equipped(mob/user, slot) @@ -2635,7 +2635,7 @@ Departamental Swimsuits, for general use if (ismob(loc)) //should allow masks to update when it is opened/closed var/mob/M = loc M.update_inv_wear_mask() - usr.update_action_buttons() + usr.update_action_buttons_icon() /obj/item/clothing/suit/storage/toggle/labcoat/fluff/zeracloak name = "Grand Purple Cloak" diff --git a/code/modules/vore/fluffstuff/custom_implants_vr.dm b/code/modules/vore/fluffstuff/custom_implants_vr.dm index 345359cb303..1ad8493b1d5 100644 --- a/code/modules/vore/fluffstuff/custom_implants_vr.dm +++ b/code/modules/vore/fluffstuff/custom_implants_vr.dm @@ -112,7 +112,7 @@ /obj/item/implant/reagent_generator/roiz/post_implant(mob/living/carbon/source) START_PROCESSING(SSobj, src) to_chat(source, span_notice("You implant [source] with \the [src].")) - source.verbs |= assigned_proc + add_verb(source, assigned_proc) return 1 /obj/item/implanter/reagent_generator/roiz @@ -181,7 +181,7 @@ /obj/item/implant/reagent_generator/jasmine/post_implant(mob/living/carbon/source) START_PROCESSING(SSobj, src) to_chat(source, span_notice("You implant [source] with \the [src].")) - source.verbs |= assigned_proc + add_verb(source, assigned_proc) return 1 /obj/item/implanter/reagent_generator/jasmine @@ -250,7 +250,7 @@ /obj/item/implant/reagent_generator/yonra/post_implant(mob/living/carbon/source) START_PROCESSING(SSobj, src) to_chat(source, span_notice("You implant [source] with \the [src].")) - source.verbs |= assigned_proc + add_verb(source, assigned_proc) return 1 /obj/item/implanter/reagent_generator/yonra @@ -335,7 +335,7 @@ /obj/item/implant/reagent_generator/rischi/post_implant(mob/living/carbon/source) START_PROCESSING(SSobj, src) to_chat(source, span_notice("You implant [source] with \the [src].")) - source.verbs |= assigned_proc + add_verb(source, assigned_proc) return 1 /obj/item/implanter/reagent_generator/rischi @@ -486,7 +486,7 @@ /obj/item/implant/reagent_generator/evian/post_implant(mob/living/carbon/source) START_PROCESSING(SSobj, src) to_chat(source, span_notice("You implant [source] with \the [src].")) - source.verbs |= assigned_proc + add_verb(source, assigned_proc) return 1 /obj/item/implanter/reagent_generator/evian diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index 7993be8e432..c9283e774f4 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -689,7 +689,7 @@ slowdown = 0 taurtype = /datum/sprite_accessory/tail/taur/feline/tempest no_message = "These saddlebags seem to be fitted for someone else, and keep slipping off!" - action_button_name = "Toggle Mlembulance Mode" + actions_types = list(/datum/action/item_action/toggle_mlembulance) var/ambulance = FALSE var/datum/looping_sound/ambulance/soundloop var/ambulance_state = FALSE @@ -703,7 +703,7 @@ QDEL_NULL(soundloop) return ..() -/obj/item/storage/backpack/saddlebag/tempest/ui_action_click() +/obj/item/storage/backpack/saddlebag/tempest/ui_action_click(mob/user, actiontype) ambulance = !(ambulance) if(ambulance) START_PROCESSING(SSobj, src) @@ -754,7 +754,7 @@ /obj/item/fluff/dragor_dot/attack_self(mob/user as mob) if(user.ckey == "pontifexminimus") - user.verbs |= /mob/living/carbon/human/proc/shapeshifter_select_gender + add_verb(user, /mob/living/carbon/human/proc/shapeshifter_select_gender) else return @@ -1299,8 +1299,8 @@ if (istype(user)) // It's only made for Verie's chassis silly! if (user.ckey != owner) - to_chat(user, "The brush's teeth are far too rough to even comb your hair. Apparently, \ - this device was not made for people like you.") + to_chat(user, span_warning("The brush's teeth are far too rough to even comb your hair. Apparently, \ + this device was not made for people like you.")) return if (!user.hair_accessory_style) @@ -1309,14 +1309,14 @@ user.update_hair() user.visible_message("[user] combs her hair. \The [src] leaves behind glowing cyan highlights as it passes through \ her black strands.", \ - "You brush your hair. \The [src]'s teeth begin to vibrate and glow as they react to your nanites. \ + span_notice("You brush your hair. \The [src]'s teeth begin to vibrate and glow as they react to your nanites. \ The teeth stimulate the nanites in your hair strands until your hair give off a brilliant, faintly pulsing \ - cyan glow!") + cyan glow!")) else user.visible_message("[user] combs her hair. \The [src] brushes away her glowing cyan highlights. Neat!", \ - "You brush your hair. \The [src]'s teeth wipe away the glowing streaks in your hair \ - like a sponge scrubbing away a stain.") + span_notice("You brush your hair. \The [src]'s teeth wipe away the glowing streaks in your hair \ + like a sponge scrubbing away a stain.")) user.hair_accessory_style = null for(var/datum/sprite_accessory/hair_accessory/verie_hair_glow/V in user) to_chat(user, span_warning("found a V to delete!")) @@ -1542,16 +1542,16 @@ if(world.time - last_message <= 5 SECONDS) return if(user.a_intent == I_HELP) - user.visible_message(span_notice("\The [user] hugs [src]!"),span_notice("You hug [src]!")) + user.visible_message(span_notice(span_bold("\The [user]") + " hugs [src]!"),span_notice("You hug [src]!")) icon_state = "pandorba" else if (user.a_intent == I_HURT) - user.visible_message(span_warning("\The [user] punches [src]!"),span_warning("You punch [src]!")) + user.visible_message(span_warning(span_bold("\The [user]") + " punches [src]!"),span_warning("You punch [src]!")) icon_state = "pandorba_h" else if (user.a_intent == I_GRAB) - user.visible_message(span_warning("\The [user] attempts to strangle [src]!"),span_warning("You attempt to strangle [src]!")) + user.visible_message(span_warning(span_bold("\The [user]") + " attempts to strangle [src]!"),span_warning("You attempt to strangle [src]!")) icon_state = "pandorba_g" else - user.visible_message(span_notice("\The [user] pokes [src]."),span_notice("You poke [src].")) + user.visible_message(span_notice(span_bold("\The [user]") + " pokes [src]."),span_notice("You poke [src].")) icon_state = "pandorba_d" playsound(src, 'sound/items/drop/plushie.ogg', 25, 0) visible_message("[src] says, \"[pokephrase]\"") diff --git a/code/modules/vore/resizing/crackers.dm b/code/modules/vore/resizing/crackers.dm index 0c88a65f8e4..6ce47ec6c38 100644 --- a/code/modules/vore/resizing/crackers.dm +++ b/code/modules/vore/resizing/crackers.dm @@ -80,27 +80,27 @@ winner.visible_message(span_notice("\The [winner] wins the cracker prize!"),span_notice("You win the cracker prize!")) if(prize == "shrinking") winner.resize(0.25) - winner.visible_message("\The [winner] shrinks suddenly!") + winner.visible_message(span_bold("\The [winner]") + " shrinks suddenly!") if(prize == "growing") winner.resize(2) - winner.visible_message("\The [winner] grows in height suddenly.") + winner.visible_message(span_bold("\The [winner]") + " grows in height suddenly.") if(prize == "drugged") winner.druggy = max(winner.druggy, 50) if(prize == "invisibility") if(!winner.cloaked) - winner.visible_message("\The [winner] vanishes from sight.") + winner.visible_message(span_bold("\The [winner]") + " vanishes from sight.") winner.cloak() spawn(600) if(winner.cloaked) winner.uncloak() - winner.visible_message("\The [winner] appears as if from thin air.") + winner.visible_message(span_bold("\The [winner]") + " appears as if from thin air.") if(prize == "knocked over") - winner.visible_message("\The [winner] is suddenly knocked to the ground.") + winner.visible_message(span_bold("\The [winner]") + " is suddenly knocked to the ground.") winner.weakened = max(winner.weakened,50) if(prize == "teleport") if(loser.can_be_drop_pred && loser.vore_selected) if(winner.devourable && winner.can_be_drop_prey) - winner.visible_message("\The [winner] is teleported to somewhere nearby...") + winner.visible_message(span_bold("\The [winner]") + " is teleported to somewhere nearby...") var/datum/effect/effect/system/spark_spread/spk spk = new(winner) @@ -113,7 +113,7 @@ if(prize == "wealth") new /obj/random/cash/huge(spawnloc) new /obj/random/cash/huge(spawnloc) - winner.visible_message("\The [winner] has a whole load of cash fall at their feet!") + winner.visible_message(span_bold("\The [winner]") + " has a whole load of cash fall at their feet!") playsound(user, 'sound/effects/snap.ogg', 50, 1) user.drop_item(src) diff --git a/code/modules/vore/resizing/resize_vr.dm b/code/modules/vore/resizing/resize_vr.dm index 54b3bff78ad..33a152492b2 100644 --- a/code/modules/vore/resizing/resize_vr.dm +++ b/code/modules/vore/resizing/resize_vr.dm @@ -166,7 +166,7 @@ /* //Add the set_size() proc to usable verbs. By commenting this out, we can leave the proc and hand it to species that need it. /hook/living_new/proc/resize_setup(mob/living/H) - H.verbs += /mob/living/proc/set_size + add_verb(H, /mob/living/proc/set_size) return 1 */ diff --git a/code/modules/vote/vote_datum.dm b/code/modules/vote/vote_datum.dm index a2dfcfeb5b0..9c739ada02b 100644 --- a/code/modules/vote/vote_datum.dm +++ b/code/modules/vote/vote_datum.dm @@ -90,14 +90,14 @@ if(length(winning_options) == 1) var/res = winning_options[1] if(res in choices) - to_chat(world, span_interface("[res] won the vote!")) + to_chat(world, span_interface(span_bold("[res] won the vote!"))) return res else to_chat(world, span_interface("The winner of the vote ([sanitize(res)]) isn't a valid choice? What the heck?")) stack_trace("Vote concluded with an invalid answer. Answer was [sanitize(res)], choices were [json_encode(choices)]") return null - to_chat(world, span_interface("No clear winner. The vote did not pass.")) + to_chat(world, span_interface(span_bold("No clear winner. The vote did not pass."))) return null if(VOTE_RESULT_TYPE_SKEWED) @@ -105,14 +105,14 @@ if(maxvotes >= required_votes && length(winning_options) == 1) var/res = winning_options[1] if(res in choices) - to_chat(world, span_interface("[res] won the vote with a 70% majority!")) + to_chat(world, span_interface(span_bold("[res] won the vote with a 70% majority!"))) return res else to_chat(world, span_interface("The winner of the vote ([sanitize(res)]) isn't a valid choice? What the heck?")) stack_trace("Vote concluded with an invalid answer. Answer was [sanitize(res)], choices were [json_encode(choices)]") return null - to_chat(world, span_interface("No option received 70% of the votes. The vote did not pass.")) + to_chat(world, span_interface(span_bold("No option received 70% of the votes. The vote did not pass."))) return null return null diff --git a/code/modules/xenoarcheaology/artifacts/crystal.dm b/code/modules/xenoarcheaology/artifacts/crystal.dm index 67371b91ac3..5d4bb46d42d 100644 --- a/code/modules/xenoarcheaology/artifacts/crystal.dm +++ b/code/modules/xenoarcheaology/artifacts/crystal.dm @@ -17,7 +17,7 @@ "It's mesmerizing to behold.") /obj/structure/crystal/Destroy() - src.visible_message(span_red("[src] shatters!")) + src.visible_message(span_bolddanger("[src] shatters!")) if(prob(75)) new /obj/item/material/shard/phoron(src.loc) if(prob(50)) diff --git a/code/modules/xenoarcheaology/artifacts/gigadrill.dm b/code/modules/xenoarcheaology/artifacts/gigadrill.dm index 99c9bb90057..e285a2b90d1 100644 --- a/code/modules/xenoarcheaology/artifacts/gigadrill.dm +++ b/code/modules/xenoarcheaology/artifacts/gigadrill.dm @@ -24,7 +24,7 @@ if(istype(A,/turf/simulated/mineral)) var/turf/simulated/mineral/M = A drilling_turf = get_turf(src) - src.visible_message("\The [src] begins to drill into \the [M].") + src.visible_message(span_bold("\The [src]") + " begins to drill into \the [M].") anchored = TRUE spawn(drill_time) if(get_turf(src) == drilling_turf && active) diff --git a/code/modules/xenoarcheaology/artifacts/replicator.dm b/code/modules/xenoarcheaology/artifacts/replicator.dm index dbd427fda16..b9c77a8a3c0 100644 --- a/code/modules/xenoarcheaology/artifacts/replicator.dm +++ b/code/modules/xenoarcheaology/artifacts/replicator.dm @@ -98,13 +98,13 @@ "foreground" = colors[color], ))) - fail_message = "[bicon(src)] a [pick("loud","soft","sinister","eery","triumphant","depressing","cheerful","angry")] \ + fail_message = span_notice("[icon2html(src,viewers(src))] a [pick("loud","soft","sinister","eery","triumphant","depressing","cheerful","angry")] \ [pick("horn","beep","bing","bleep","blat","honk","hrumph","ding")] sounds and a \ [pick("yellow","purple","green","blue","red","orange","white")] \ [pick("light","dial","meter","window","protrusion","knob","antenna","swirly thing")] \ [pick("swirls","flashes","whirrs","goes schwing","blinks","flickers","strobes","lights up")] on the \ [pick("front","side","top","bottom","rear","inside")] of [src]. A [pick("slot","funnel","chute","tube")] opens up in the \ - [pick("front","side","top","bottom","rear","inside")]." + [pick("front","side","top","bottom","rear","inside")].") /obj/machinery/replicator/process() if(spawning_types.len && powered()) @@ -178,4 +178,4 @@ user.drop_item() W.loc = src stored_materials.Add(W) - src.visible_message(span_notice("\The [user] inserts \the [W] into \the [src].")) + src.visible_message(span_notice(span_bold("\The [user]") + " inserts \the [W] into \the [src].")) diff --git a/code/modules/xenoarcheaology/artifacts/replicator_vr.dm b/code/modules/xenoarcheaology/artifacts/replicator_vr.dm index d7ac940140d..144f51bd767 100644 --- a/code/modules/xenoarcheaology/artifacts/replicator_vr.dm +++ b/code/modules/xenoarcheaology/artifacts/replicator_vr.dm @@ -275,7 +275,7 @@ inserted_human.drop_from_inventory(I) inserted_mob.loc = src stored_materials.Add(inserted_mob) - src.visible_message(span_filter_notice("\The [user] inserts \the [inserted_mob] into \the [src].")) + src.visible_message(span_filter_notice(span_bold("\The [user]") + " inserts \the [inserted_mob] into \the [src].")) return else to_chat(user, span_notice("You cannot put \the [W] into the machine. ((The micro must be connected to the server.))")) @@ -296,7 +296,7 @@ //Now that we've dropped all the items they have, let's shove them back into the micro holder. W.loc = src stored_materials.Add(W) - src.visible_message(span_filter_notice("\The [user] inserts \the [W] into \the [src].")) + src.visible_message(span_filter_notice(span_bold("\The [user]") + " inserts \the [W] into \the [src].")) /obj/machinery/replicator/vore/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) var/list/data = ..() @@ -543,7 +543,7 @@ inserted_human.drop_from_inventory(I) inserted_mob.loc = src stored_materials.Add(inserted_mob) - src.visible_message(span_filter_notice("\The [user] inserts \the [inserted_mob] into \the [src].")) + src.visible_message(span_filter_notice(span_bold("\The [user]") + " inserts \the [inserted_mob] into \the [src].")) return else to_chat(user, span_notice("You cannot put \the [W] into the machine. ((They must be connected to the server.))")) @@ -562,7 +562,7 @@ //Now that we've dropped all the items they have, let's shove them back into the micro holder. W.loc = src stored_materials.Add(W) - src.visible_message(span_filter_notice("\The [user] inserts \the [W] into \the [src].")) + src.visible_message(span_filter_notice(span_bold("\The [user]") + " inserts \the [W] into \the [src].")) /obj/machinery/replicator/clothing/tgui_interact(mob/user, datum/tgui/ui) //This creates the menu. diff --git a/code/modules/xenoarcheaology/boulder.dm b/code/modules/xenoarcheaology/boulder.dm index 842f644069d..5fbb77e3b18 100644 --- a/code/modules/xenoarcheaology/boulder.dm +++ b/code/modules/xenoarcheaology/boulder.dm @@ -35,14 +35,14 @@ C.depth_scanner.scan_atom(user, src) return else - user.visible_message("\The [user] extends \the [C] over \the [src], a flurry of red beams scanning \the [src]'s surface!", span_notice("You extend \the [C] over \the [src], a flurry of red beams scanning \the [src]'s surface!")) + user.visible_message(span_bold("\The [user]") + " extends \the [C] over \the [src], a flurry of red beams scanning \the [src]'s surface!", span_notice("You extend \the [C] over \the [src], a flurry of red beams scanning \the [src]'s surface!")) if(do_after(user, 15)) to_chat(user, span_notice("\The [src] has been excavated to a depth of [2 * src.excavation_level]cm.")) return if(istype(I, /obj/item/measuring_tape)) var/obj/item/measuring_tape/P = I - user.visible_message("\The [user] extends \the [P] towards \the [src].", span_notice("You extend \the [P] towards \the [src].")) + user.visible_message(span_bold("\The [user]") + " extends \the [P] towards \the [src].", span_notice("You extend \the [P] towards \the [src].")) if(do_after(user, 15)) to_chat(user, span_notice("\The [src] has been excavated to a depth of [2 * src.excavation_level]cm.")) return diff --git a/code/modules/xenoarcheaology/effect_master.dm b/code/modules/xenoarcheaology/effect_master.dm index e07cb358cac..a886201ed78 100644 --- a/code/modules/xenoarcheaology/effect_master.dm +++ b/code/modules/xenoarcheaology/effect_master.dm @@ -237,7 +237,7 @@ warn = 1 if(warn && isliving(bumped)) - to_chat(bumped, span_filter_notice("You accidentally touch \the [holder] as it hits you.")) + to_chat(bumped, span_filter_notice(span_bold("You accidentally touch \the [holder] as it hits you."))) /datum/component/artifact_master/proc/on_bumped() var/atom/movable/M = args[2] @@ -258,7 +258,7 @@ warn = 1 if(warn && isliving(M)) - to_chat(M, span_filter_notice("You accidentally touch \the [holder].")) + to_chat(M, span_filter_notice(span_bold("You accidentally touch \the [holder]."))) /datum/component/artifact_master/proc/on_attack_hand() var/mob/living/user = args[2] @@ -269,7 +269,7 @@ to_chat(user, span_filter_notice("[span_red("You can't reach [holder] from here.")]")) return if(ishuman(user) && user:gloves) - to_chat(user, span_filter_notice("You touch [holder] with your gloved hands, [pick("but nothing of note happens","but nothing happens","but nothing interesting happens","but you notice nothing different","but nothing seems to have happened")].")) + to_chat(user, span_filter_notice(span_bold("You touch [holder]") + " with your gloved hands, [pick("but nothing of note happens","but nothing happens","but nothing interesting happens","but you notice nothing different","but nothing seems to have happened")].")) return var/triggered = FALSE @@ -285,10 +285,10 @@ my_effect.DoEffectTouch(user) if(triggered) - to_chat(user, span_filter_notice("You touch [holder].")) + to_chat(user, span_filter_notice(span_bold("You touch [holder]."))) else - to_chat(user, span_filter_notice("You touch [holder], [pick("but nothing of note happens","but nothing happens","but nothing interesting happens","but you notice nothing different","but nothing seems to have happened")].")) + to_chat(user, span_filter_notice(span_bold("You touch [holder],") + " [pick("but nothing of note happens","but nothing happens","but nothing interesting happens","but you notice nothing different","but nothing seems to have happened")].")) /datum/component/artifact_master/proc/on_attackby() diff --git a/code/modules/xenoarcheaology/effects/badfeeling.dm b/code/modules/xenoarcheaology/effects/badfeeling.dm index da5e8f5bee2..28b0d6eb158 100644 --- a/code/modules/xenoarcheaology/effects/badfeeling.dm +++ b/code/modules/xenoarcheaology/effects/badfeeling.dm @@ -34,7 +34,7 @@ var/mob/living/carbon/human/H = user if(prob(50)) if(prob(75)) - to_chat(H, span_red("[pick(drastic_messages)]")) + to_chat(H, span_red(span_bold("[pick(drastic_messages)]") + "")) else to_chat(H, span_red("[pick(messages)]")) diff --git a/code/modules/xenoarcheaology/effects/berserk.dm b/code/modules/xenoarcheaology/effects/berserk.dm index e82e75604da..14015b13bac 100644 --- a/code/modules/xenoarcheaology/effects/berserk.dm +++ b/code/modules/xenoarcheaology/effects/berserk.dm @@ -21,8 +21,8 @@ if(L.has_modifier_of_type(/datum/modifier/berserk)) // Already angry. to_chat(L, span_warning("An otherworldly feeling seems to enter your mind again, and it fans your inner flame, extending your rage.")) else // Exhausted or something. - to_chat(L, "An otherworldly feeling seems to enter your mind, and you briefly feel an intense anger, but \ - it quickly passes.") + to_chat(L, span_warning("An otherworldly feeling seems to enter your mind, and you briefly feel an intense anger, but \ + it quickly passes.")) return FALSE /datum/artifact_effect/berserk/DoEffectTouch(var/mob/toucher) diff --git a/code/modules/xenoarcheaology/effects/cannibal.dm b/code/modules/xenoarcheaology/effects/cannibal.dm index ba1b4a616c4..dd842c4ec45 100644 --- a/code/modules/xenoarcheaology/effects/cannibal.dm +++ b/code/modules/xenoarcheaology/effects/cannibal.dm @@ -35,7 +35,7 @@ if(H.is_sentient()) if(prob(50)) if(prob(75)) - to_chat(H, span_red("[pick(drastic_messages)]")) + to_chat(H, span_red(span_bold("[pick(drastic_messages)]") + "")) else to_chat(H, span_red("[pick(messages)]")) diff --git a/code/modules/xenoarcheaology/effects/feysight.dm b/code/modules/xenoarcheaology/effects/feysight.dm index dee42c22bd3..f966ac7f708 100644 --- a/code/modules/xenoarcheaology/effects/feysight.dm +++ b/code/modules/xenoarcheaology/effects/feysight.dm @@ -21,8 +21,8 @@ if(L.has_modifier_of_type(/datum/modifier/feysight)) to_chat(L, span_warning("An otherworldly feeling seems to enter your mind again, and it holds the visions in place.")) else - to_chat(L, "An otherworldly feeling seems to enter your mind, and you briefly feel peace, but \ - it quickly passes.") + to_chat(L, span_warning("An otherworldly feeling seems to enter your mind, and you briefly feel peace, but \ + it quickly passes.")) return FALSE /datum/artifact_effect/feysight/DoEffectTouch(var/mob/toucher) diff --git a/code/modules/xenoarcheaology/effects/goodfeeling.dm b/code/modules/xenoarcheaology/effects/goodfeeling.dm index 10678a9600e..92d267b1f67 100644 --- a/code/modules/xenoarcheaology/effects/goodfeeling.dm +++ b/code/modules/xenoarcheaology/effects/goodfeeling.dm @@ -32,7 +32,7 @@ var/mob/living/carbon/human/H = user if(prob(50)) if(prob(75)) - to_chat(H, span_blue("[pick(drastic_messages)]")) + to_chat(H, span_blue(span_bold("[pick(drastic_messages)]") + "")) else to_chat(H, span_blue("[pick(messages)]")) diff --git a/code/modules/xenoarcheaology/effects/resurrect.dm b/code/modules/xenoarcheaology/effects/resurrect.dm index 176eaec4510..752f2333dd2 100644 --- a/code/modules/xenoarcheaology/effects/resurrect.dm +++ b/code/modules/xenoarcheaology/effects/resurrect.dm @@ -58,9 +58,9 @@ if(!H.client && H.mind) for(var/mob/observer/dead/ghost in player_list) if(ghost.mind == H.mind) - to_chat(ghost, "[span_interface("An artifact is trying to \ - revive you. Return to your body if you want to be resurrected! \ - (Verbs -> Ghost -> Re-enter corpse)")]") + to_chat(ghost, span_large(span_interface(span_bold("An artifact is trying to \ + revive you. Return to your body if you want to be resurrected!") + "\ + (Verbs -> Ghost -> Re-enter corpse)"))) break H.adjustBruteLoss(-40) diff --git a/code/modules/xenoarcheaology/tools/artifact_analyser.dm b/code/modules/xenoarcheaology/tools/artifact_analyser.dm index 1078ea96c1b..a96e1fc2e20 100644 --- a/code/modules/xenoarcheaology/tools/artifact_analyser.dm +++ b/code/modules/xenoarcheaology/tools/artifact_analyser.dm @@ -123,7 +123,7 @@ atom_say("Scanning complete.") var/obj/item/paper/P = new(src.loc) P.name = "[src] report #[++report_num]" - P.info = "[src] analysis report #[report_num]
    " + P.info = span_bold("[src] analysis report #[report_num]") + "
    " P.info += "
    " P.info += "[bicon(scanned_object)] [results]" P.stamped = list(/obj/item/stamp) diff --git a/code/modules/xenoarcheaology/tools/artifact_harvester.dm b/code/modules/xenoarcheaology/tools/artifact_harvester.dm index a0a83b5f3f0..d63d633cf09 100644 --- a/code/modules/xenoarcheaology/tools/artifact_harvester.dm +++ b/code/modules/xenoarcheaology/tools/artifact_harvester.dm @@ -223,7 +223,7 @@ cur_artifact.anchored = FALSE cur_artifact.being_used = 0 cur_artifact = null - src.visible_message("[name] states, \"Battery is full.\"") + src.visible_message(span_bold("[name]") + " states, \"Battery is full.\"") icon_state = "incubator" else if(harvesting < 0) @@ -248,17 +248,17 @@ harvesting = 0 if(inserted_battery.battery_effect && inserted_battery.battery_effect.activated) inserted_battery.battery_effect.ToggleActivate() - src.visible_message("[name] states, \"Battery dump completed.\"") + src.visible_message(span_bold("[name]") + " states, \"Battery dump completed.\"") icon_state = "incubator" /obj/machinery/artifact_harvester/Topic(href, href_list) if (href_list["harvest"]) if(!inserted_battery) - src.visible_message("[src] states, \"Cannot harvest. No battery inserted.\"") + src.visible_message(span_bold("[src]") + " states, \"Cannot harvest. No battery inserted.\"") else if(inserted_battery.stored_charge >= inserted_battery.capacity) - src.visible_message("[src] states, \"Cannot harvest. battery is full.\"") + src.visible_message(span_bold("[src]") + " states, \"Cannot harvest. battery is full.\"") else @@ -271,11 +271,11 @@ articount++ if(articount <= 0) - var/message = "[src] states, \"Cannot harvest. No noteworthy energy signature isolated.\"" + var/message = span_bold("[src]") + " states, \"Cannot harvest. No noteworthy energy signature isolated.\"" src.visible_message(message) else if(analysed && analysed.being_used) - src.visible_message("[src] states, \"Cannot harvest. Source already being harvested.\"") + src.visible_message(span_bold("[src]") + " states, \"Cannot harvest. Source already being harvested.\"") else if(articount > 1) @@ -287,9 +287,9 @@ var/list/active_effects = cur_artifact.artifact_master.get_active_effects() if(active_effects.len > 1) - src.visible_message("[src] states, \"Cannot harvest. Source is emitting conflicting energy signatures.\"") + src.visible_message(span_bold("[src]") + " states, \"Cannot harvest. Source is emitting conflicting energy signatures.\"") else if(!active_effects.len) - src.visible_message("[src] states, \"Cannot harvest. No energy emitting from source.\"") + src.visible_message(span_bold("[src]") + " states, \"Cannot harvest. No energy emitting from source.\"") else //see if we can clear out an old effect @@ -312,7 +312,7 @@ source_effect = active_effect if(!source_effect) - src.visible_message("[src] states, \"Cannot harvest. Battery is charged with a different energy signature.\"") + src.visible_message(span_bold("[src]") + " states, \"Cannot harvest. Battery is charged with a different energy signature.\"") else //we're good to charge either if(active_effect.activated) @@ -325,7 +325,7 @@ cur_artifact.anchored = 1 cur_artifact.being_used = 1 icon_state = "incubator_on" - var/message = "[src] states, \"Beginning energy harvesting.\"" + var/message = span_bold("[src]") + " states, \"Beginning energy harvesting.\"" src.visible_message(message) last_process = world.time @@ -350,7 +350,7 @@ cur_artifact.anchored = 0 cur_artifact.being_used = 0 cur_artifact = null - src.visible_message("[name] states, \"Energy harvesting interrupted.\"") + src.visible_message(span_bold("[name]") + " states, \"Energy harvesting interrupted.\"") icon_state = "incubator" if (href_list["ejectbattery"]) @@ -367,13 +367,13 @@ harvesting = -1 update_use_power(USE_POWER_ACTIVE) icon_state = "incubator_on" - var/message = "[src] states, \"Warning, battery charge dump commencing.\"" + var/message = span_bold("[src]") + " states, \"Warning, battery charge dump commencing.\"" src.visible_message(message) else - var/message = "[src] states, \"Cannot dump energy. Battery is drained of charge already.\"" + var/message = span_bold("[src]") + " states, \"Cannot dump energy. Battery is drained of charge already.\"" src.visible_message(message) else - var/message = "[src] states, \"Cannot dump energy. No battery inserted.\"" + var/message = span_bold("[src]") + " states, \"Cannot dump energy. No battery inserted.\"" src.visible_message(message) if(href_list["close"]) diff --git a/code/modules/xenoarcheaology/tools/geosample_scanner.dm b/code/modules/xenoarcheaology/tools/geosample_scanner.dm index 15b66fc6645..be642fdfdb5 100644 --- a/code/modules/xenoarcheaology/tools/geosample_scanner.dm +++ b/code/modules/xenoarcheaology/tools/geosample_scanner.dm @@ -93,12 +93,12 @@ update_coolant() return if(scanned_item) - to_chat(user, "\The [src] already has \a [scanned_item] inside!") + to_chat(user, span_warning("\The [src] already has \a [scanned_item] inside!")) return user.drop_item() I.loc = src scanned_item = I - to_chat(user, "You put \the [I] into \the [src].") + to_chat(user, span_notice("You put \the [I] into \the [src].")) /obj/machinery/radiocarbon_spectrometer/proc/update_coolant() var/total_purity = 0 @@ -354,8 +354,8 @@ if(!anom_found) data += " - No anomalous data
    " - P.info = "[src] analysis report #[report_num]
    " - P.info += "Scanned item: [scanned_item.name]

    " + data + P.info = span_bold("[src] analysis report #[report_num]") + "
    " + P.info += span_bold("Scanned item:") + " [scanned_item.name]

    " + data last_scan_data = P.info P.loc = src.loc diff --git a/code/modules/xenoarcheaology/tools/tools.dm b/code/modules/xenoarcheaology/tools/tools.dm index 74a652e193f..1e56399defe 100644 --- a/code/modules/xenoarcheaology/tools/tools.dm +++ b/code/modules/xenoarcheaology/tools/tools.dm @@ -109,7 +109,7 @@ var/material = "unknown" /obj/item/depth_scanner/proc/scan_atom(var/mob/user, var/atom/A) - user.visible_message("\The [user] scans \the [A], the air around them humming gently.") + user.visible_message(span_bold("\The [user]") + " scans \the [A], the air around them humming gently.") if(istype(A, /turf/simulated/mineral)) var/turf/simulated/mineral/M = A diff --git a/code/modules/xenobio/items/slime_objects.dm b/code/modules/xenobio/items/slime_objects.dm index c527a8c964f..b1530755b46 100644 --- a/code/modules/xenobio/items/slime_objects.dm +++ b/code/modules/xenobio/items/slime_objects.dm @@ -52,7 +52,7 @@ src.searching = 2 var/mob/living/carbon/human/S = new(get_turf(src)) S.client = candidate.client - to_chat(S, "You are a promethean, brought into existence on [station_name()].") + to_chat(S, span_infoplain(span_bold("You are a promethean, brought into existence on [station_name()]."))) S.mind.assigned_role = JOB_PROMETHEAN S.set_species("Promethean") S.shapeshifter_set_colour("#2398FF") diff --git a/code/modules/xenobio/items/slimepotions.dm b/code/modules/xenobio/items/slimepotions.dm index 453c4bce5db..600ca3264d1 100644 --- a/code/modules/xenobio/items/slimepotions.dm +++ b/code/modules/xenobio/items/slimepotions.dm @@ -171,8 +171,8 @@ return ..() to_chat(user, span_notice("You feed the slime the agent. It will now be friendly to all other slimes.")) - to_chat(M, "\The [user] feeds you \the [src], and you suspect that all the other slimes will be \ - your friends, at least if you don't attack them first.") + to_chat(M, span_notice("\The [user] feeds you \the [src], and you suspect that all the other slimes will be \ + your friends, at least if you don't attack them first.")) M.unify() playsound(src, 'sound/effects/bubbles.ogg', 50, 1) qdel(src) diff --git a/code/modules/xenobio/items/slimepotions_vr.dm b/code/modules/xenobio/items/slimepotions_vr.dm index 1de0ee69f87..da55f7e9caf 100644 --- a/code/modules/xenobio/items/slimepotions_vr.dm +++ b/code/modules/xenobio/items/slimepotions_vr.dm @@ -165,7 +165,7 @@ M.ghostjoin = 1 active_ghost_pods |= M if(!M.vore_active) - M.verbs += /mob/living/simple_mob/proc/animal_nom + add_verb(M, /mob/living/simple_mob/proc/animal_nom) M.ghostjoin_icon() log_and_message_admins("[key_name_admin(user)] used a sapience potion on a simple mob: [M]. [ADMIN_FLW(src)]") playsound(src, 'sound/effects/bubbles.ogg', 50, 1) diff --git a/code/modules/xenobio/items/weapons_vr.dm b/code/modules/xenobio/items/weapons_vr.dm index ca46f7c7c8a..210e3139d8b 100644 --- a/code/modules/xenobio/items/weapons_vr.dm +++ b/code/modules/xenobio/items/weapons_vr.dm @@ -26,7 +26,7 @@ /obj/item/xenobio/attackby(obj/item/I as obj, mob/user as mob) if(istype(I, loadable_item)) if(loaded_item) - to_chat(user, "[I] doesn't seem to fit into [src].") + to_chat(user, span_warning("[I] doesn't seem to fit into [src].")) return //var/obj/item/reagent_containers/glass/beaker/B = I user.drop_item() @@ -45,7 +45,7 @@ /obj/item/xenobio/afterattack(atom/A, mob/user as mob) if(!loaded_item) - to_chat(user,"\The [src] shot fizzles, it appears you need to load something!") + to_chat(user,span_warning("\The [src] shot fizzles, it appears you need to load something!")) //playsound(src, 'sound/weapons/wave.ogg', 60, 1) playsound(src, 'sound/weapons/empty.ogg', 50, 1) return @@ -79,11 +79,11 @@ var/turf/T = get_turf(A) if(!T || (T.check_density(ignore_mobs = TRUE))) - to_chat(user,"Your rehydrator flashes an error as it attempts to process your target.") + to_chat(user,span_warning("Your rehydrator flashes an error as it attempts to process your target.")) playsound(src, 'sound/weapons/empty.ogg', 50, 1) return if(istype(A, /mob/living)) - to_chat(user,"The rehydrator's saftey systems prevent firing into living creatures!") + to_chat(user,span_warning("The rehydrator's saftey systems prevent firing into living creatures!")) playsound(src, 'sound/weapons/empty.ogg', 50, 1) return if(loaded_item) diff --git a/code/modules/xenobio/machinery/processor.dm b/code/modules/xenobio/machinery/processor.dm index 79c055dfca5..28146bd6b5f 100644 --- a/code/modules/xenobio/machinery/processor.dm +++ b/code/modules/xenobio/machinery/processor.dm @@ -58,7 +58,7 @@ return to_be_processed.Add(AM) AM.forceMove(src) - visible_message("\The [user] places [AM] inside \the [src].") + visible_message(span_infoplain(span_bold("\The [user]") + " places [AM] inside \the [src].")) /obj/machinery/processor/proc/begin_processing() if(processing) diff --git a/code/modules/xenobio2/mob/slime/slime_monkey.dm b/code/modules/xenobio2/mob/slime/slime_monkey.dm index c9f0ce14b1d..20d8876f8dc 100644 --- a/code/modules/xenobio2/mob/slime/slime_monkey.dm +++ b/code/modules/xenobio2/mob/slime/slime_monkey.dm @@ -38,7 +38,7 @@ Slime cube lives here. src.searching = 2 var/mob/living/carbon/human/S = new(get_turf(src)) S.client = candidate.client - to_chat(S., "You are a promethean, brought into existence on [station_name()].") + to_chat(S, span_infoplain(span_bold("You are a promethean, brought into existence on [station_name()]."))) S.mind.assigned_role = JOB_PROMETHEAN S.set_species("Promethean") S.shapeshifter_set_colour("#05FF9B") diff --git a/html/browser/common.css b/html/browser/common.css index 866d6832a5c..4fe3c31d040 100644 --- a/html/browser/common.css +++ b/html/browser/common.css @@ -157,23 +157,22 @@ h4 } .uiTitleWrapper - { - position:fixed; - top:0px; - left:0px; - right:0px; - z-index: 10 - } - - .uiTitleButtons - { - position:fixed; - top:0px; - right:0px; - height:32px; - z-index:11; - } +{ + position:fixed; + top:0px; + left:0px; + right:0px; + z-index: 10 +} +.uiTitleButtons +{ + position:fixed; + top:0px; + right:0px; + height:32px; + z-index:11; +} .uiTitle.icon { @@ -214,6 +213,63 @@ h4 color: #272727; } +.darkgreen { + color: #008000; +} + +.grey { + color: #838383; +} + + +.crimson { + color: #dc143c; +} + +.maroon { + color: #800000; +} + +.brown { + color: #8d4925; +} + +.blue { + color: #0000ff; +} + +.black { + color: #000000; +} + +.white { + color: #000000; +} + +.darkgray { + color: #808080; +} + +.gray { + color: #a9a9a9; +} + +.yellow { + color: #ffcc00; +} + +.pink { + color: #ffc0cb; +} + +.cyan { + color: #00ffff; +} + +.nicegreen { + color: #14a833; +} + .notice { position: relative; @@ -225,6 +281,18 @@ h4 margin: 4px; } +.boldnotice +{ + position: relative; + background: #E9C183; + color: #15345A; + font-weight: bold; + font-size: 10px; + font-style: italic; + padding: 2px 4px 0 4px; + margin: 4px; +} + .notice.icon { padding: 2px 4px 0 20px; @@ -328,3 +396,16 @@ div.notice width: 100%; clear: both; } + +.italic, +.italics { + font-style: italic; +} + +.bold { + font-weight: bold; +} + +.underline { + text-decoration: underline; +} diff --git a/html/statbrowser.css b/html/statbrowser.css new file mode 100644 index 00000000000..0e20233b476 --- /dev/null +++ b/html/statbrowser.css @@ -0,0 +1,261 @@ +body { + font-family: Verdana, Geneva, Tahoma, sans-serif; + font-size: 12px !important; + margin: 0 !important; + padding: 0 !important; + overflow-x: hidden; + overflow-y: scroll; +} + +body.dark { + background-color: #131313; + color: #b2c4dd; + scrollbar-base-color: #1c1c1c; + scrollbar-face-color: #3b3b3b; + scrollbar-3dlight-color: #252525; + scrollbar-highlight-color: #252525; + scrollbar-track-color: #1c1c1c; + scrollbar-arrow-color: #929292; + scrollbar-shadow-color: #3b3b3b; +} + +#menu { + background-color: #F0F0F0; + position: fixed; + width: 100%; + z-index: 100; +} + +.dark #menu { + background-color: #202020; +} + +#statcontent { + padding: 7px 7px 7px 7px; +} + +a { + color: black; + text-decoration: none +} + +.dark a { + color: #b2c4dd; +} + +a:hover, +.dark a:hover { + text-decoration: underline; +} + +ul { + list-style-type: none; + margin: 0; + padding: 0; + background-color: #333; +} + +li { + float: left; +} + +li a { + display: block; + color: white; + text-align: center; + padding: 14px 16px; + text-decoration: none; +} + +li a:hover:not(.active) { + background-color: #111; +} + +.button-container { + display: inline-flex; + flex-wrap: wrap-reverse; + flex-direction: row; + align-items: flex-start; + overflow-x: hidden; + white-space: pre-wrap; + padding: 0 4px; +} + +.button { + background-color: #dfdfdf; + border: 1px solid #cecece; + border-bottom-width: 2px; + color: rgba(0, 0, 0, 0.7); + padding: 6px 4px 4px; + text-align: center; + text-decoration: none; + font-size: 12px; + margin: 0; + cursor: pointer; + transition-duration: 100ms; + order: 3; + min-width: 40px; +} + +.dark button { + background-color: #222222; + border-color: #343434; + color: rgba(255, 255, 255, 0.5); +} + +.button:hover { + background-color: #ececec; + transition-duration: 0; +} + +.dark button:hover { + background-color: #2e2e2e; +} + +.button:active, +.button.active { + background-color: #ffffff; + color: black; + border-top-color: #cecece; + border-left-color: #cecece; + border-right-color: #cecece; + border-bottom-color: #ffffff; +} + +.dark .button:active, +.dark .button.active { + background-color: #444444; + color: white; + border-top-color: #343434; + border-left-color: #343434; + border-right-color: #343434; + border-bottom-color: #ffffff; +} + +.grid-container { + margin: -2px; + margin-right: -15px; +} + +.grid-item { + position: relative; + display: inline-block; + width: 100%; + box-sizing: border-box; + overflow: visible; + padding: 3px 2px; + text-decoration: none; +} + +@media only screen and (min-width: 300px) { + .grid-item { + width: 50%; + } +} + +@media only screen and (min-width: 430px) { + .grid-item { + width: 33%; + } +} + +@media only screen and (min-width: 560px) { + .grid-item { + width: 25%; + } +} + +@media only screen and (min-width: 770px) { + .grid-item { + width: 20%; + } +} + +.grid-item:hover { + z-index: 1; +} + +.grid-item:hover .grid-item-text { + width: auto; + text-decoration: underline; +} + +.grid-item-text { + display: inline-block; + width: 100%; + background-color: #ffffff; + margin: 0 -6px; + padding: 0 6px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + pointer-events: none; +} + +.dark .grid-item-text { + background-color: #131313; +} + +.link { + display: inline; + background: none; + border: none; + padding: 7px 14px; + color: black; + text-decoration: none; + cursor: pointer; + font-size: 13px; + margin: 2px 2px; +} + +.linkelem { + display: inline; + background: none; + border: none; + padding: 0px 14px; + color: black; + text-decoration: none; + cursor: pointer; + font-size: 13px; + margin: 2px 2px; +} + +.elemcontainer { + border-collapse: separate; + border-spacing: 0 5px; + display: flex; +} + +.elem { + background: none; + border: none; + padding: 0px 14px; + font-size: 13px; + margin: 2px 2px; +} + +.dark .link { + color: #abc6ec; +} + +.dark .linkelem { + color: #abc6ec; +} + +.link:hover { + text-decoration: underline; +} + +.linkelem:hover { + text-decoration: underline; +} + +img { + -ms-interpolation-mode: nearest-neighbor; + image-rendering: pixelated; +} + +.interview_panel_controls, +.interview_panel_stats { + margin-bottom: 10px; +} diff --git a/html/statbrowser.html b/html/statbrowser.html new file mode 100644 index 00000000000..1aea8811d58 --- /dev/null +++ b/html/statbrowser.html @@ -0,0 +1,3 @@ + +
    +
    diff --git a/html/statbrowser.js b/html/statbrowser.js new file mode 100644 index 00000000000..2572d121efe --- /dev/null +++ b/html/statbrowser.js @@ -0,0 +1,1084 @@ +// Polyfills and compatibility ------------------------------------------------ +var decoder = decodeURIComponent || unescape; +if (!Array.prototype.includes) { + Array.prototype.includes = function (thing) { + for (var i = 0; i < this.length; i++) { + if (this[i] == thing) return true; + } + return false; + } +} +if (!String.prototype.trim) { + String.prototype.trim = function () { + return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + }; +} + +// Status panel implementation ------------------------------------------------ +var status_tab_parts = ["Loading..."]; +var current_tab = null; +var mc_tab_parts = [["Loading...", ""]]; +var href_token = null; +var spells = []; +var spell_tabs = []; +var verb_tabs = []; +var verbs = [["", ""]]; // list with a list inside +var examine = []; +var tickets = []; +var misc = new Map(); +var sdql2 = []; +var permanent_tabs = []; // tabs that won't be cleared by wipes +var turfcontents = []; +var turfname = ""; +var imageRetryDelay = 500; +var imageRetryLimit = 50; +var menu = document.getElementById('menu'); +var under_menu = document.getElementById('under_menu'); +var statcontentdiv = document.getElementById('statcontent'); +var storedimages = []; +var split_admin_tabs = false; + +// Any BYOND commands that could result in the client's focus changing go through this +// to ensure that when we relinquish our focus, we don't do it after the result of +// a command has already taken focus for itself. +function run_after_focus(callback) { + setTimeout(callback, 0); +} + +function createStatusTab(name) { + if (name.indexOf(".") != -1) { + var splitName = name.split("."); + if (split_admin_tabs && splitName[0] === "Admin") + name = splitName[1]; + else + name = splitName[0]; + } + if (document.getElementById(name) || name.trim() == "") { + return; + } + if (!verb_tabs.includes(name) && !permanent_tabs.includes(name)) { + return; + } + var B = document.createElement("BUTTON"); + B.onclick = function () { + tab_change(name); + this.blur(); + }; + B.id = name; + B.textContent = name; + B.className = "button"; + //ORDERING ALPHABETICALLY + B.style.order = name.charCodeAt(0); + if (name == "Status" || name == "MC") { + B.style.order = name == "Status" ? 1 : 2; + } + if (name == "Tickets") { + B.style.order = 3; + } + //END ORDERING + menu.appendChild(B); + SendTabToByond(name); + under_menu.style.height = menu.clientHeight + 'px'; +} + +function removeStatusTab(name) { + if (!document.getElementById(name) || permanent_tabs.includes(name)) { + return; + } + for (var i = verb_tabs.length - 1; i >= 0; --i) { + if (verb_tabs[i] == name) { + verb_tabs.splice(i, 1); + } + } + menu.removeChild(document.getElementById(name)); + TakeTabFromByond(name); + under_menu.style.height = menu.clientHeight + 'px'; +} + +function sortVerbs() { + verbs.sort(function (a, b) { + var selector = a[0] == b[0] ? 1 : 0; + if (a[selector].toUpperCase() < b[selector].toUpperCase()) { + return 1; + } + else if (a[selector].toUpperCase() > b[selector].toUpperCase()) { + return -1; + } + return 0; + }) +} + +window.onresize = function () { + under_menu.style.height = menu.clientHeight + 'px'; +} + +function addPermanentTab(name) { + if (!permanent_tabs.includes(name)) { + permanent_tabs.push(name); + } + createStatusTab(name); +} + +function removePermanentTab(name) { + for (var i = permanent_tabs.length - 1; i >= 0; --i) { + if (permanent_tabs[i] == name) { + permanent_tabs.splice(i, 1); + } + } + removeStatusTab(name); +} + +function checkStatusTab() { + for (var i = 0; i < menu.children.length; i++) { + if (!verb_tabs.includes(menu.children[i].id) && !permanent_tabs.includes(menu.children[i].id)) { + menu.removeChild(menu.children[i]); + } + } +} + +function remove_verb(v) { + var verb_to_remove = v; // to_remove = [verb:category, verb:name] + for (var i = verbs.length - 1; i >= 0; i--) { + var part_to_remove = verbs[i]; + if (part_to_remove[1] == verb_to_remove[1]) { + verbs.splice(i, 1); + } + } +} + +function check_verbs() { + for (var v = verb_tabs.length - 1; v >= 0; v--) { + verbs_cat_check(verb_tabs[v]); + } +} + +function verbs_cat_check(cat) { + var tabCat = cat; + if (cat.indexOf(".") != -1) { + var splitName = cat.split("."); + if (split_admin_tabs && splitName[0] === "Admin") + tabCat = splitName[1]; + else + tabCat = splitName[0]; + } + var verbs_in_cat = 0; + var verbcat = ""; + if (!verb_tabs.includes(tabCat)) { + removeStatusTab(tabCat); + return; + } + for (var v = 0; v < verbs.length; v++) { + var part = verbs[v]; + verbcat = part[0]; + if (verbcat.indexOf(".") != -1) { + var splitName = verbcat.split("."); + if (split_admin_tabs && splitName[0] === "Admin") + verbcat = splitName[1]; + else + verbcat = splitName[0]; + } + if (verbcat != tabCat || verbcat.trim() == "") { + continue; + } + else { + verbs_in_cat = 1; + break; // we only need one + } + } + if (verbs_in_cat != 1) { + removeStatusTab(tabCat); + if (current_tab == tabCat) + tab_change("Status"); + } +} + +function findVerbindex(name, verblist) { + for (var i = 0; i < verblist.length; i++) { + var part = verblist[i]; + if (part[1] == name) + return i; + } +} +function wipe_verbs() { + verbs = [["", ""]]; + verb_tabs = []; + checkStatusTab(); // remove all empty verb tabs +} + +function update_verbs() { + wipe_verbs(); + Byond.sendMessage("Update-Verbs"); +} + +function SendTabsToByond() { + var tabstosend = []; + tabstosend = tabstosend.concat(permanent_tabs, verb_tabs); + for (var i = 0; i < tabstosend.length; i++) { + SendTabToByond(tabstosend[i]); + } +} + +function SendTabToByond(tab) { + Byond.sendMessage("Send-Tabs", {tab: tab}); +} + +//Byond can't have this tab anymore since we're removing it +function TakeTabFromByond(tab) { + Byond.sendMessage("Remove-Tabs", {tab: tab}); +} + +function spell_cat_check(cat) { + var spells_in_cat = 0; + var spellcat = ""; + for (var s = 0; s < spells.length; s++) { + var spell = spells[s]; + spellcat = spell[0]; + if (spellcat == cat) { + spells_in_cat++; + } + } + if (spells_in_cat < 1) { + removeStatusTab(cat); + } +} + +function tab_change(tab) { + if (tab == current_tab) return; + if (document.getElementById(current_tab)) + document.getElementById(current_tab).className = "button"; // disable active on last button + current_tab = tab; + set_byond_tab(tab); + if (document.getElementById(tab)) + document.getElementById(tab).className = "button active"; // make current button active + var spell_tabs_thingy = (spell_tabs.includes(tab)); + var verb_tabs_thingy = (verb_tabs.includes(tab)); + if (tab == "Status") { + draw_status(); + } else if (tab == "MC") { + draw_mc(); + } else if (spell_tabs_thingy) { + draw_spells(tab); + } else if (verb_tabs_thingy) { + draw_verbs(tab); + } else if (tab == "Debug Stat Panel") { + draw_debug(); + } else if (tab == "Tickets") { + draw_tickets(); + } else if (misc.has(tab)) { + draw_misc(tab); + } else if (tab == "Examine") { + draw_examine(); + } else if (tab == "SDQL2") { + draw_sdql2(); + } else if (tab == turfname) { + draw_listedturf(); + } else { + statcontentdiv.textContext = "Loading..."; + } + Byond.winset(Byond.windowId, { + 'is-visible': true, + }); +} + +function set_byond_tab(tab) { + Byond.sendMessage("Set-Tab", {tab: tab}); +} + +function draw_examine() { + statcontentdiv.textContent = ""; + var div_content = document.createElement("div"); + for (var i = 0; i < examine.length; i++) { + var parameter = document.createElement('p'); + parameter.innerHTML = examine[i]; + div_content.appendChild(parameter); + } + var images = div_content.querySelectorAll("img"); + for (var i = 0; i < images.length; i++) { + images[i].addEventListener("error", iconError); + } + document.getElementById("statcontent").appendChild(div_content); +} + +function draw_debug() { + statcontentdiv.textContent = ""; + var wipeverbstabs = document.createElement("div"); + var link = document.createElement("a"); + link.onclick = function () { wipe_verbs() }; + link.textContent = "Wipe All Verbs"; + wipeverbstabs.appendChild(link); + document.getElementById("statcontent").appendChild(wipeverbstabs); + var wipeUpdateVerbsTabs = document.createElement("div"); + var updateLink = document.createElement("a"); + updateLink.onclick = function () { update_verbs() }; + updateLink.textContent = "Wipe and Update All Verbs"; + wipeUpdateVerbsTabs.appendChild(updateLink); + document.getElementById("statcontent").appendChild(wipeUpdateVerbsTabs); + var text = document.createElement("div"); + text.textContent = "Verb Tabs:"; + document.getElementById("statcontent").appendChild(text); + var table1 = document.createElement("table"); + for (var i = 0; i < verb_tabs.length; i++) { + var part = verb_tabs[i]; + // Hide subgroups except admin subgroups if they are split + if (verb_tabs[i].lastIndexOf(".") != -1) { + var splitName = verb_tabs[i].split("."); + if (split_admin_tabs && splitName[0] === "Admin") + part = splitName[1]; + else + continue; + } + var tr = document.createElement("tr"); + var td1 = document.createElement("td"); + td1.textContent = part; + var a = document.createElement("a"); + a.onclick = function (part) { + return function () { removeStatusTab(part) }; + }(part); + a.textContent = " Delete Tab " + part; + td1.appendChild(a); + tr.appendChild(td1); + table1.appendChild(tr); + } + document.getElementById("statcontent").appendChild(table1); + var header2 = document.createElement("div"); + header2.textContent = "Verbs:"; + document.getElementById("statcontent").appendChild(header2); + var table2 = document.createElement("table"); + for (var v = 0; v < verbs.length; v++) { + var part2 = verbs[v]; + var trr = document.createElement("tr"); + var tdd1 = document.createElement("td"); + tdd1.textContent = part2[0]; + var tdd2 = document.createElement("td"); + tdd2.textContent = part2[1]; + trr.appendChild(tdd1); + trr.appendChild(tdd2); + table2.appendChild(trr); + } + document.getElementById("statcontent").appendChild(table2); + var text3 = document.createElement("div"); + text3.textContent = "Permanent Tabs:"; + document.getElementById("statcontent").appendChild(text3); + var table3 = document.createElement("table"); + for (var i = 0; i < permanent_tabs.length; i++) { + var part3 = permanent_tabs[i]; + var trrr = document.createElement("tr"); + var tddd1 = document.createElement("td"); + tddd1.textContent = part3; + trrr.appendChild(tddd1); + table3.appendChild(trrr); + } + document.getElementById("statcontent").appendChild(table3); + +} +function draw_status() { + if (!document.getElementById("Status")) { + createStatusTab("Status"); + current_tab = "Status"; + } + statcontentdiv.textContent = ''; + for (var i = 0; i < status_tab_parts.length; i++) { + if (status_tab_parts[i].trim() == "") { + document.getElementById("statcontent").appendChild(document.createElement("br")); + } else { + var div = document.createElement("div"); + div.textContent = status_tab_parts[i]; + document.getElementById("statcontent").appendChild(div); + } + } + if (verb_tabs.length == 0 || !verbs) { + Byond.command("Fix-Stat-Panel"); + } +} + +function draw_mc() { + statcontentdiv.textContent = ""; + var table = document.createElement("table"); + for (var i = 0; i < mc_tab_parts.length; i++) { + var part = mc_tab_parts[i]; + var tr = document.createElement("tr"); + var td1 = document.createElement("td"); + td1.textContent = part[0]; + var td2 = document.createElement("td"); + if (part[2]) { + var a = document.createElement("a"); + a.href = "?_src_=vars;admin_token=" + href_token + ";Vars=" + part[2]; + a.textContent = part[1]; + td2.appendChild(a); + } else { + td2.textContent = part[1]; + } + tr.appendChild(td1); + tr.appendChild(td2); + table.appendChild(tr); + } + document.getElementById("statcontent").appendChild(table); +} + +function remove_tickets() { + if (tickets) { + tickets = []; + removePermanentTab("Tickets"); + if (current_tab == "Tickets") + tab_change("Status"); + } + checkStatusTab(); +} + +function remove_sdql2() { + if (sdql2) { + sdql2 = []; + removePermanentTab("SDQL2"); + if (current_tab == "SDQL2") + tab_change("Status"); + } + checkStatusTab(); +} + +function iconError(e) { + setTimeout(function () { + if(current_tab != turfname && current_tab != "Examine") { + return; + } + var node = e.target; + var current_attempts = Number(node.getAttribute("data-attempts")) || 0; + if (current_attempts > imageRetryLimit) { + return; + } + var src = node.src; + node.src = null; + node.src = src + '#' + current_attempts; + node.setAttribute("data-attempts", current_attempts + 1); + }, imageRetryDelay); +} + +function draw_listedturf() { + statcontentdiv.textContent = ""; + var table = document.createElement("table"); + for (var i = 0; i < turfcontents.length; i++) { + var part = turfcontents[i]; + if (storedimages[part[1]] == null && part[2]) { + var img = document.createElement("img"); + img.src = part[2]; + img.id = part[1]; + storedimages[part[1]] = part[2]; + img.onerror = iconError; + table.appendChild(img); + } else { + var img = document.createElement("img"); + img.onerror = iconError; + img.src = storedimages[part[1]]; + img.id = part[1]; + table.appendChild(img); + } + var b = document.createElement("div"); + var clickcatcher = ""; + b.className = "link"; + b.onmousedown = function (part) { + // The outer function is used to close over a fresh "part" variable, + // rather than every onmousedown getting the "part" of the last entry. + return function (e) { + e.preventDefault(); + clickcatcher = "?src=" + part[1]; + switch (e.button) { + case 1: + clickcatcher += ";statpanel_item_click=middle"; + break; + case 2: + clickcatcher += ";statpanel_item_click=right"; + break; + default: + clickcatcher += ";statpanel_item_click=left"; + } + if (e.shiftKey) { + clickcatcher += ";statpanel_item_shiftclick=1"; + } + if (e.ctrlKey) { + clickcatcher += ";statpanel_item_ctrlclick=1"; + } + if (e.altKey) { + clickcatcher += ";statpanel_item_altclick=1"; + } + window.location.href = clickcatcher; + } + }(part); + b.textContent = part[0]; + table.appendChild(b); + table.appendChild(document.createElement("br")); + } + document.getElementById("statcontent").appendChild(table); +} + +function remove_listedturf() { + removePermanentTab(turfname); + checkStatusTab(); + if (current_tab == turfname) { + tab_change("Status"); + } +} + +function remove_mc() { + removePermanentTab("MC"); + if (current_tab == "MC") { + tab_change("Status"); + } +}; + +function draw_sdql2() { + statcontentdiv.textContent = ""; + var table = document.createElement("table"); + for (var i = 0; i < sdql2.length; i++) { + var part = sdql2[i]; + var tr = document.createElement("tr"); + var td1 = document.createElement("td"); + td1.textContent = part[0]; + var td2 = document.createElement("td"); + if (part[2]) { + var a = document.createElement("a"); + a.href = "?src=" + part[2] + ";statpanel_item_click=left"; + a.textContent = part[1]; + td2.appendChild(a); + } else { + td2.textContent = part[1]; + } + tr.appendChild(td1); + tr.appendChild(td2); + table.appendChild(tr); + } + document.getElementById("statcontent").appendChild(table); +} + +function draw_tickets() { + statcontentdiv.textContent = ""; + var table = document.createElement("table"); + if (!tickets) { + return; + } + for (var i = 0; i < tickets.length; i++) { + var part = tickets[i]; + var tr = document.createElement("tr"); + var td1 = document.createElement("td"); + td1.textContent = part[0]; + var td2 = document.createElement("td"); + if (part[2]) { + var a = document.createElement("a"); + a.href = "?_src_=holder;admin_token=" + href_token + ";ahelp=" + part[2] + ";ahelp_action=ticket;statpanel_item_click=left;action=ticket"; + a.textContent = part[1]; + td2.appendChild(a); + } else if (part[3]) { + var a = document.createElement("a"); + a.href = "?src=" + part[3] + ";statpanel_item_click=left"; + a.textContent = part[1]; + td2.appendChild(a); + } else { + td2.textContent = part[1]; + } + tr.appendChild(td1); + tr.appendChild(td2); + table.appendChild(tr); + } + document.getElementById("statcontent").appendChild(table); +} + +function draw_misc(tab) { + statcontentdiv.textContent = ""; + var table = document.createElement("table"); + table.className = "elemcontainer"; + let data = misc.get(tab); + if (!data) { + return; + } + for (var i = 0; i < data.length; i++) { + var tr = document.createElement("tr"); + var part = data[i]; + + var td1 = document.createElement("td"); + if(part[0]) { + td1.className = "elem"; + td1.textContent = part[0]; + } + + var td2 = null; + if (part[1] && storedimages[part[1]] == null && part[2]) { + td2 = document.createElement("td"); + var img = document.createElement("img"); + img.src = part[2]; + img.id = part[1]; + storedimages[part[1]] = part[2]; + td2.appendChild(img); + } else if(part[1]) { + td2 = document.createElement("td"); + var img = document.createElement("img"); + img.src = storedimages[part[1]]; + img.id = part[1]; + td2.appendChild(img); + } + var td3 = null; + var b = document.createElement("div"); + var clickcatcher = ""; + if (part[4]) { + b.className = "linkelem"; + b.onmousedown = function (part) { + // The outer function is used to close over a fresh "part" variable, + // rather than every onmousedown getting the "part" of the last entry. + return function (e) { + e.preventDefault(); + clickcatcher = "?src=" + part[4]; + switch (e.button) { + case 1: + clickcatcher += ";statpanel_item_click=middle"; + break; + case 2: + clickcatcher += ";statpanel_item_click=right"; + break; + default: + clickcatcher += ";statpanel_item_click=left"; + } + if (e.shiftKey) { + clickcatcher += ";statpanel_item_shiftclick=1"; + } + if (e.ctrlKey) { + clickcatcher += ";statpanel_item_ctrlclick=1"; + } + if (e.altKey) { + clickcatcher += ";statpanel_item_altclick=1"; + } + window.location.href = clickcatcher; + } + }(part); + } + if(part[3]) { + td3 = document.createElement("td"); + b.textContent = part[3]; + td3.appendChild(b); + } + if(!td2 && !td3) { + td1.className = "elem_span3"; + td1.colSpan += 2; + } + else if (!td2) { + td1.className = "elem_span2"; + td1.colSpan += 1; + } else if (!td3) { + td2.colSpan += 1; + } + tr.appendChild(td1); + if(td2) { + tr.appendChild(td2); + } + if(td3) { + tr.appendChild(td3); + } + table.appendChild(tr); + } + document.getElementById("statcontent").appendChild(table); +} + +function draw_spells(cat) { + statcontentdiv.textContent = ""; + var table = document.createElement("table"); + for (var i = 0; i < spells.length; i++) { + var part = spells[i]; + if (part[0] != cat) continue; + var tr = document.createElement("tr"); + var td1 = document.createElement("td"); + td1.textContent = part[1]; + var td2 = document.createElement("td"); + if (part[3]) { + var a = document.createElement("a"); + a.href = "?src=" + part[3] + ";statpanel_item_click=left"; + a.textContent = part[2]; + td2.appendChild(a); + } else { + td2.textContent = part[2]; + } + tr.appendChild(td1); + tr.appendChild(td2); + table.appendChild(tr); + } + document.getElementById("statcontent").appendChild(table); +} + +function make_verb_onclick(command) { + return function () { + run_after_focus(function () { + Byond.command(command); + }); + }; +} + +function draw_verbs(cat) { + statcontentdiv.textContent = ""; + var table = document.createElement("div"); + var additions = {}; // additional sub-categories to be rendered + table.className = "grid-container"; + sortVerbs(); + if (split_admin_tabs && cat.lastIndexOf(".") != -1) { + var splitName = cat.split("."); + if (splitName[0] === "Admin") + cat = splitName[1]; + } + verbs.reverse(); // sort verbs backwards before we draw + for (var i = 0; i < verbs.length; ++i) { + var part = verbs[i]; + var name = part[0]; + if (split_admin_tabs && name.lastIndexOf(".") != -1) { + var splitName = name.split("."); + if (splitName[0] === "Admin") + name = splitName[1]; + } + var command = part[1]; + var desc = part[2]; + + if (command && name.lastIndexOf(cat, 0) != -1 && (name.length == cat.length || name.charAt(cat.length) == ".")) { + var subCat = name.lastIndexOf(".") != -1 ? name.split(".")[1] : null; + if (subCat && !additions[subCat]) { + var newTable = document.createElement("div"); + newTable.className = "grid-container"; + additions[subCat] = newTable; + } + + var a = document.createElement("a"); + a.href = "#"; + a.onclick = make_verb_onclick(command.replace(/\s/g, "-")); + a.className = "grid-item"; + a.title = desc || "No description"; + var t = document.createElement("span"); + t.textContent = command; + t.className = "grid-item-text"; + a.appendChild(t); + (subCat ? additions[subCat] : table).appendChild(a); + } + } + + // Append base table to view + var content = document.getElementById("statcontent"); + content.appendChild(table); + + // Append additional sub-categories if relevant + for (var cat in additions) { + if (additions.hasOwnProperty(cat)) { + // do addition here + var header = document.createElement("h3"); + header.textContent = cat; + content.appendChild(header); + content.appendChild(additions[cat]); + } + } +} + +function set_theme(which) { + if (which == "light" || which == "vchatlight") { + document.body.className = ""; + set_style_sheet("browserOutput_white"); + } else if (which == "dark" || which == "vchatdark") { + document.body.className = "dark"; + set_style_sheet("browserOutput"); + } +} + +function set_style_sheet(sheet) { + if (document.getElementById("goonStyle")) { + var currentSheet = document.getElementById("goonStyle"); + currentSheet.parentElement.removeChild(currentSheet); + } + var head = document.getElementsByTagName('head')[0]; + var sheetElement = document.createElement("link"); + sheetElement.id = "goonStyle"; + sheetElement.rel = "stylesheet"; + sheetElement.type = "text/css"; + sheetElement.href = sheet + ".css"; + sheetElement.media = 'all'; + head.appendChild(sheetElement); +} + +function restoreFocus() { + run_after_focus(function () { + Byond.winset('map', { + focus: true, + }); + }); +} + +function getCookie(cname) { + var name = cname + '='; + var ca = document.cookie.split(';'); + for (var i = 0; i < ca.length; i++) { + var c = ca[i]; + while (c.charAt(0) == ' ') c = c.substring(1); + if (c.indexOf(name) === 0) { + return decoder(c.substring(name.length, c.length)); + } + } + return ''; +} + +function add_verb_list(payload) { + var to_add = payload; // list of a list with category and verb inside it + to_add.sort(); // sort what we're adding + for (var i = 0; i < to_add.length; i++) { + var part = to_add[i]; + if (!part[0]) + continue; + var category = part[0]; + if (category.indexOf(".") != -1) { + var splitName = category.split("."); + if (split_admin_tabs && splitName[0] === "Admin") + category = splitName[1]; + else + category = splitName[0]; + } + if (findVerbindex(part[1], verbs)) + continue; + if (verb_tabs.includes(category)) { + verbs.push(part); + if (current_tab == category) { + draw_verbs(category); // redraw if we added a verb to the tab we're currently in + } + } else if (category) { + verb_tabs.push(category); + verbs.push(part); + createStatusTab(category); + } + } +}; + +function init_spells() { + var cat = ""; + for (var i = 0; i < spell_tabs.length; i++) { + cat = spell_tabs[i]; + if (cat.length > 0) { + verb_tabs.push(cat); + createStatusTab(cat); + } + } +} + +document.addEventListener("mouseup", restoreFocus); +document.addEventListener("keyup", restoreFocus); + +if (!current_tab) { + addPermanentTab("Status"); + tab_change("Status"); +} + +window.onload = function () { + Byond.sendMessage("Update-Verbs"); +}; + +Byond.subscribeTo('update_spells', function (payload) { + spell_tabs = payload.spell_tabs; + var do_update = false; + if (spell_tabs.includes(current_tab)) { + do_update = true; + } + init_spells(); + if (payload.actions) { + spells = payload.actions; + if (do_update) { + draw_spells(current_tab); + } + } else { + remove_spells(); + } +}); + +Byond.subscribeTo('remove_verb_list', function (v) { + var to_remove = v; + for (var i = 0; i < to_remove.length; i++) { + remove_verb(to_remove[i]); + } + check_verbs(); + sortVerbs(); + if (verb_tabs.includes(current_tab)) + draw_verbs(current_tab); +}); + +// passes a 2D list of (verbcategory, verbname) creates tabs and adds verbs to respective list +// example (IC, Say) +Byond.subscribeTo('init_verbs', function (payload) { + wipe_verbs(); // remove all verb categories so we can replace them + checkStatusTab(); // remove all status tabs + verb_tabs = payload.panel_tabs; + verb_tabs.sort(); // sort it + var do_update = false; + var cat = ""; + for (var i = 0; i < verb_tabs.length; i++) { + cat = verb_tabs[i]; + createStatusTab(cat); // create a category if the verb doesn't exist yet + } + if (verb_tabs.includes(current_tab)) { + do_update = true; + } + if (payload.verblist) { + add_verb_list(payload.verblist); + sortVerbs(); // sort them + if (do_update) { + draw_verbs(current_tab); + } + } + SendTabsToByond(); +}); + +Byond.subscribeTo('update_stat', function (payload) { + status_tab_parts = [payload.ping_str]; + var parsed = payload.global_data; + + for (var i = 0; i < parsed.length; i++) if (parsed[i] != null) status_tab_parts.push(parsed[i]); + + parsed = payload.other_str; + + for (var i = 0; i < parsed.length; i++) if (parsed[i] != null) status_tab_parts.push(parsed[i]); + + if (current_tab == "Status") { + draw_status(); + } else if (current_tab == "Debug Stat Panel") { + draw_debug(); + } +}); + +Byond.subscribeTo('update_mc', function (payload) { + mc_tab_parts = payload.mc_data; + mc_tab_parts.splice(0, 0, ["Location:", payload.coord_entry]); + + if (!verb_tabs.includes("MC")) { + verb_tabs.push("MC"); + } + + createStatusTab("MC"); + + if (current_tab == "MC") { + draw_mc(); + } +}); + +Byond.subscribeTo('remove_spells', function () { + for (var s = 0; s < spell_tabs.length; s++) { + removeStatusTab(spell_tabs[s]); + } +}); + +Byond.subscribeTo('init_spells', function () { + var cat = ""; + for (var i = 0; i < spell_tabs.length; i++) { + cat = spell_tabs[i]; + if (cat.length > 0) { + verb_tabs.push(cat); + createStatusTab(cat); + } + } +}); + +Byond.subscribeTo('check_spells', function () { + for (var v = 0; v < spell_tabs.length; v++) { + spell_cat_check(spell_tabs[v]); + } +}); + +Byond.subscribeTo('create_debug', function () { + if (!document.getElementById("Debug Stat Panel")) { + addPermanentTab("Debug Stat Panel"); + } else { + removePermanentTab("Debug Stat Panel"); + } +}); + +Byond.subscribeTo('create_listedturf', function (TN) { + remove_listedturf(); // remove the last one if we had one + turfname = TN; + addPermanentTab(turfname); + tab_change(turfname); +}); + +Byond.subscribeTo('create_misc', function (TN) { + addPermanentTab(TN); +}); + +Byond.subscribeTo('remove_misc', function (TN) { + removePermanentTab(TN); +}); + +Byond.subscribeTo('remove_admin_tabs', function () { + href_token = null; + remove_mc(); + remove_tickets(); + remove_sdql2(); +}); + +Byond.subscribeTo('update_listedturf', function (TC) { + turfcontents = TC; + if (current_tab == turfname) { + draw_listedturf(); + } +}); + +Byond.subscribeTo('update_misc', function (payload) { + let TN = payload.TN + let TC = payload.TC + misc.set(TN,TC); + if (current_tab == TN) { + draw_misc(TN); + } +}); + +Byond.subscribeTo('update_split_admin_tabs', function (status) { + status = (status == true); + + if (split_admin_tabs !== status) { + if (split_admin_tabs === true) { + removeStatusTab("Events"); + removeStatusTab("Fun"); + removeStatusTab("Game"); + } + update_verbs(); + } + split_admin_tabs = status; +}); + +Byond.subscribeTo('add_admin_tabs', function (ht) { + href_token = ht; + addPermanentTab("MC"); + addPermanentTab("Tickets"); +}); + +Byond.subscribeTo('update_examine', function (S) { + examine = S; + if (examine.length > 0 && !verb_tabs.includes("Examine")) { + verb_tabs.push("Examine"); + addPermanentTab("Examine") + } + if (current_tab == "Examine") { + draw_examine(); + } + //tab_change("Examine"); //This is handled by DM code and a pref setting already +}) + +Byond.subscribeTo('update_sdql2', function (S) { + sdql2 = S; + if (sdql2.length > 0 && !verb_tabs.includes("SDQL2")) { + verb_tabs.push("SDQL2"); + addPermanentTab("SDQL2"); + } + if (current_tab == "SDQL2") { + draw_sdql2(); + } +}); + +Byond.subscribeTo('update_tickets', function (T) { + tickets = T; + if (!verb_tabs.includes("Tickets")) { + verb_tabs.push("Tickets"); + addPermanentTab("Tickets"); + } + if (current_tab == "Tickets") { + draw_tickets(); + } +}); + +Byond.subscribeTo('remove_listedturf', remove_listedturf); + +Byond.subscribeTo('remove_sdql2', remove_sdql2); + +Byond.subscribeTo('remove_mc', remove_mc); + +Byond.subscribeTo('add_verb_list', add_verb_list); diff --git a/icons/effects/mouse_pointers/screen_drag.dmi b/icons/effects/mouse_pointers/screen_drag.dmi new file mode 100644 index 00000000000..48e4fce85f7 Binary files /dev/null and b/icons/effects/mouse_pointers/screen_drag.dmi differ diff --git a/icons/mob/vore/tails_vr.dmi b/icons/mob/vore/tails_vr.dmi index b8440c87412..85547136d50 100644 Binary files a/icons/mob/vore/tails_vr.dmi and b/icons/mob/vore/tails_vr.dmi differ diff --git a/interface/skin.dmf b/interface/skin.dmf index 8316b0f6691..af4281a1a2d 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -1346,19 +1346,17 @@ window "rpane" size = 640x480 anchor1 = -1,-1 anchor2 = -1,-1 - background-color = none saved-params = "pos;size;is-minimized;is-maximized" is-pane = true - outer-size = 656x538 - inner-size = 640x499 elem "rpanewindow" type = CHILD - pos = 0,-3 - size = 640x499 + pos = 0,30 + size = 640x445 anchor1 = 0,0 anchor2 = 100,100 background-color = none saved-params = "splitter" + left = "statwindow" right = "outputwindow" is-vert = false elem "patreon" @@ -1463,7 +1461,7 @@ window "rpane" is-visible = false saved-params = "is-checked" text = "Info" - command = ".winset \"rpanewindow.left=infowindow\"" + command = ".winset \"rpanewindow.left=statwindow\"" group = "rpanemode" button-type = pushbox elem "mediapanel" @@ -1520,28 +1518,6 @@ window "ooc_notes" anchor2 = 80,100 saved-params = "" -window "infowindow" - elem "infowindow" - type = MAIN - pos = 281,0 - size = 640x480 - anchor1 = -1,-1 - anchor2 = -1,-1 - saved-params = "pos;size;is-minimized;is-maximized" - title = "Info" - is-pane = true - elem "info" - type = INFO - pos = 0,0 - size = 638x477 - anchor1 = 0,0 - anchor2 = 100,100 - is-default = true - saved-params = "" - highlight-color = #00aa00 - on-show = ".winset\"rpane.infob.is-visible=true;rpane.browseb.is-visible=true?rpane.infob.pos=130,0:rpane.infob.pos=65,0 rpane.textb.is-visible=true rpane.infob.is-checked=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0 rpane.rpanewindow.left=infowindow\"" - on-hide = ".winset\"rpane.infob.is-visible=false;rpane.browseb.is-visible=true?rpane.browseb.is-checked=true rpane.rpanewindow.left=browserwindow:rpane.textb.is-visible=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0 rpane.rpanewindow.left=\"" - window "text_editor" elem "text_editor" type = MAIN @@ -1610,3 +1586,21 @@ window "tgui_say" anchor1 = 0,0 anchor2 = 0,0 saved-params = "" + +window "statwindow" + elem "statwindow" + type = MAIN + pos = 281,0 + size = 640x480 + anchor1 = -1,-1 + anchor2 = -1,-1 + saved-params = "pos;size;is-minimized;is-maximized" + is-pane = true + elem "statbrowser" + type = BROWSER + pos = 0,0 + size = 638x477 + anchor1 = 0,0 + anchor2 = 100,100 + is-visible = false + saved-params = "" diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index 170ad0420aa..ed28a00900f 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -23,6 +23,8 @@ em {font-style: normal;font-weight: bold;} .bold { font-weight: bold;} +.underline { text-decoration: underline;} + .prefix {font-weight: bold;} .log_message {color: #386AFF; font-weight: bold;} @@ -85,7 +87,7 @@ em {font-style: normal;font-weight: bold;} .alert, .valert {color: #ff0000;} h1.alert, h2.alert {color: #000000;} .ghostalert {color: #5c00e6; font-style: italic; font-weight: bold;} - +.wingdings {font-family: Wingdings, Webdings} /* VOREStation Edit Start */ .emote {} @@ -102,9 +104,11 @@ h1.alert, h2.alert {color: #000000;} .critical {color: #ff0000; font-weight: bold; font-size: 150%;} .danger, .vdanger {color: #ff0000; font-weight: bold;} .warning, .vwarning {color: #ff0000; font-style: italic;} +.boldwarning {color: #ff0000; font-style: italic; font-weight: bold;} .rose {color: #ff5050;} .info {color: #0000CC;} .notice, .vnotice {color: #000099;} +.boldnoitce {color: #000099; font-weight: bold;} .alium {color: #00ff00;} .cult {color: #800080; font-weight: bold; font-style: italic;} @@ -141,6 +145,7 @@ h1.alert, h2.alert {color: #000000;} .spacer {color: #9c660b;} .blob {color: #ff950d; font-weight: bold; font-style: italic;} .teppi {color: #816540; word-spacing:4pt; font-family: "Segoe Script Bold","Segoe Script",sans-serif,Verdana;} +.marish {color: #9e31a4;} .shadekin {color: #be3cc5; font-size: 150%; font-weight: bold; font-family: "Gabriola", cursive, sans-serif;} BIG IMG.icon {width: 32px; height: 32px;} @@ -161,6 +166,7 @@ BIG IMG.icon {width: 32px; height: 32px;} .orange {color: #FF8C00;} .blue {color: #0000FF;} .green {color: #00DD00;} +.darkgreen {color: #008000;} .purple {color: #800080;} .yellow {color: #ffcc00;} .pink {color: #ffc0cb;} diff --git a/libverdigris.so b/libverdigris.so new file mode 100644 index 00000000000..4ca0f436aa2 Binary files /dev/null and b/libverdigris.so differ diff --git a/maps/RandomZLevels/stationCollision.dm b/maps/RandomZLevels/stationCollision.dm index ab6e99a43cc..3ea3aa73558 100644 --- a/maps/RandomZLevels/stationCollision.dm +++ b/maps/RandomZLevels/stationCollision.dm @@ -114,28 +114,27 @@ var/sc_safecode5 = "[rand(0,9)]" name = "smudged paper" /obj/item/paper/sc_safehint_paper_prison/New() - info = "The ink is smudged, you can only make out a couple numbers: '[sc_safecode1]**[sc_safecode4]*'" + info = span_italics("The ink is smudged, you can only make out a couple numbers:") + " '[sc_safecode1]**[sc_safecode4]*'" /obj/item/paper/sc_safehint_paper_hydro name = "shredded paper" /obj/item/paper/sc_safehint_paper_hydro/New() - info = "Although the paper is shredded, you can clearly see the number: '[sc_safecode2]'" + info = span_italics("Although the paper is shredded, you can clearly see the number:") + " '[sc_safecode2]'" /obj/item/paper/sc_safehint_paper_caf name = "blood-soaked paper" //This does not have to be in New() because it is a constant. There are no variables in it i.e. [sc_safcode] - info = "This paper is soaked in blood, it is impossible to read any text." + info = span_red(span_italics("This paper is soaked in blood, it is impossible to read any text.")) /obj/item/paper/sc_safehint_paper_bible name = "hidden paper" /obj/item/paper/sc_safehint_paper_bible/New() - info = {"It would appear that the pen hidden with the paper had leaked ink over the paper. - However you can make out the last three digits:'[sc_safecode3][sc_safecode4][sc_safecode5]' - "} + info =span_italics("It would appear that the pen hidden with the paper had leaked ink over the paper. \ + However you can make out the last three digits:") + "' [sc_safecode3][sc_safecode4][sc_safecode5]'" /obj/item/paper/sc_safehint_paper_shuttle - info = {"Target: Research-station Epsilon
    - Objective: Prototype weaponry. The captain likely keeps them locked in her safe.
    + info = span_bold("Target:") + " Research-station Epsilon
    " + span_bold("Objective:")\ + + {" Prototype weaponry. The captain likely keeps them locked in her safe.

    Our on-board spy has learned the code and has hidden away a few copies of the code around the station. Unfortunatly he has been captured by security Your objective is to split up, locate any of the papers containing the captain's safe code, open the safe and diff --git a/maps/gateway_archive_vr/labyrinth.dm b/maps/gateway_archive_vr/labyrinth.dm index 726412441aa..e881d61a284 100644 --- a/maps/gateway_archive_vr/labyrinth.dm +++ b/maps/gateway_archive_vr/labyrinth.dm @@ -167,13 +167,13 @@ return 0 playsound(chassis, 'sound/items/AirHorn.ogg', 100, 1) - chassis.occupant_message(span_red("HONK")) + chassis.occupant_message(span_infoplain(span_red(span_giant("HONK")))) for(var/mob/living/carbon/M in ohearers(6, chassis)) if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M if(istype(H.l_ear, /obj/item/clothing/ears/earmuffs) || istype(H.r_ear, /obj/item/clothing/ears/earmuffs)) continue - to_chat(M, span_red("HONK")) + to_chat(M, span_infoplain(span_red(span_massive("HONK")))) M.sleeping = 0 M.stuttering += 20 M.ear_deaf += 30 diff --git a/maps/gateway_archive_vr/stationCollision.dm b/maps/gateway_archive_vr/stationCollision.dm index ab6e99a43cc..c507cc0895a 100644 --- a/maps/gateway_archive_vr/stationCollision.dm +++ b/maps/gateway_archive_vr/stationCollision.dm @@ -114,28 +114,27 @@ var/sc_safecode5 = "[rand(0,9)]" name = "smudged paper" /obj/item/paper/sc_safehint_paper_prison/New() - info = "The ink is smudged, you can only make out a couple numbers: '[sc_safecode1]**[sc_safecode4]*'" + info = span_italics("The ink is smudged, you can only make out a couple numbers:") + " '[sc_safecode1]**[sc_safecode4]*'" /obj/item/paper/sc_safehint_paper_hydro name = "shredded paper" /obj/item/paper/sc_safehint_paper_hydro/New() - info = "Although the paper is shredded, you can clearly see the number: '[sc_safecode2]'" + info = span_italics("Although the paper is shredded, you can clearly see the number:") + " '[sc_safecode2]'" /obj/item/paper/sc_safehint_paper_caf name = "blood-soaked paper" //This does not have to be in New() because it is a constant. There are no variables in it i.e. [sc_safcode] - info = "This paper is soaked in blood, it is impossible to read any text." + info = span_red(span_italics("This paper is soaked in blood, it is impossible to read any text.")) /obj/item/paper/sc_safehint_paper_bible name = "hidden paper" /obj/item/paper/sc_safehint_paper_bible/New() - info = {"It would appear that the pen hidden with the paper had leaked ink over the paper. - However you can make out the last three digits:'[sc_safecode3][sc_safecode4][sc_safecode5]' - "} + info = span_italics("It would appear that the pen hidden with the paper had leaked ink over the paper.\ + However you can make out the last three digits:") + " '[sc_safecode3][sc_safecode4][sc_safecode5]'" /obj/item/paper/sc_safehint_paper_shuttle - info = {"Target: Research-station Epsilon
    - Objective: Prototype weaponry. The captain likely keeps them locked in her safe.
    + info = span_bold("Target:") + " Research-station Epsilon
    " + span_bold("Objective:") + " " + {" + Prototype weaponry. The captain likely keeps them locked in her safe.

    Our on-board spy has learned the code and has hidden away a few copies of the code around the station. Unfortunatly he has been captured by security Your objective is to split up, locate any of the papers containing the captain's safe code, open the safe and diff --git a/maps/gateway_archive_vr/wildwest.dm b/maps/gateway_archive_vr/wildwest.dm index 155e1d8af3f..d908da0d896 100644 --- a/maps/gateway_archive_vr/wildwest.dm +++ b/maps/gateway_archive_vr/wildwest.dm @@ -44,8 +44,8 @@ var/wish = tgui_input_list(usr, "You want...","Wish", list("Power","Wealth","Immortality","To Kill","Peace")) switch(wish) if("Power") - to_chat(user, "Your wish is granted, but at a terrible cost...") - to_chat(user, "The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart.") + to_chat(user, span_boldwarning("Your wish is granted, but at a terrible cost...")) + to_chat(user, span_warning("The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart.")) if (!(LASER in user.mutations)) user.mutations.Add(LASER) to_chat(user, span_notice("You feel pressure building behind your eyes.")) @@ -61,35 +61,35 @@ user.dna.mutantrace = "shadow" user.update_mutantrace() if("Wealth") - to_chat(user, "Your wish is granted, but at a terrible cost...") - to_chat(user, "The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart.") + to_chat(user, span_boldwarning("Your wish is granted, but at a terrible cost...")) + to_chat(user, span_warning("The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart.")) new /obj/structure/closet/syndicate/resources/everything(loc) user.dna.mutantrace = "shadow" user.update_mutantrace() if("Immortality") - to_chat(user, "Your wish is granted, but at a terrible cost...") - to_chat(user, "The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart.") - user.verbs += /mob/living/carbon/proc/immortality + to_chat(user, span_boldwarning("Your wish is granted, but at a terrible cost...")) + to_chat(user, span_warning("The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart.")) + add_verb(user, /mob/living/carbon/proc/immortality) user.dna.mutantrace = "shadow" user.update_mutantrace() if("To Kill") - to_chat(user, "Your wish is granted, but at a terrible cost...") - to_chat(user, "The Wish Granter punishes you for your wickedness, claiming your soul and warping your body to match the darkness in your heart.") + to_chat(user, span_boldwarning("Your wish is granted, but at a terrible cost...")) + to_chat(user, span_warning("The Wish Granter punishes you for your wickedness, claiming your soul and warping your body to match the darkness in your heart.")) ticker.mode.traitors += user.mind user.mind.special_role = "traitor" var/datum/objective/hijack/hijack = new hijack.owner = user.mind user.mind.objectives += hijack - to_chat(user, "Your inhibitions are swept away, the bonds of loyalty broken, you are free to murder as you please!") + to_chat(user, span_infoplain(span_bold("Your inhibitions are swept away, the bonds of loyalty broken, you are free to murder as you please!"))) var/obj_count = 1 for(var/datum/objective/OBJ in user.mind.objectives) - to_chat(user, "Objective #[obj_count]: [OBJ.explanation_text]") + to_chat(user, span_infoplain(span_bold("Objective #[obj_count]") + ": [OBJ.explanation_text]")) obj_count++ user.dna.mutantrace = "shadow" user.update_mutantrace() if("Peace") - to_chat(user, "Whatever alien sentience that the Wish Granter possesses is satisfied with your wish. There is a distant wailing as the last of the Faithless begin to die, then silence.") - to_chat(user, "You feel as if you just narrowly avoided a terrible fate...") + to_chat(user, span_infoplain(span_bold("Whatever alien sentience that the Wish Granter possesses is satisfied with your wish. There is a distant wailing as the last of the Faithless begin to die, then silence."))) + to_chat(user, span_infoplain("You feel as if you just narrowly avoided a terrible fate...")) for(var/mob/living/simple_mob/faithless/F in living_mob_list) F.health = -10 F.set_stat(DEAD) diff --git a/maps/gateway_archive_vr/zoo.dm b/maps/gateway_archive_vr/zoo.dm index 10228c8f870..baded125a60 100644 --- a/maps/gateway_archive_vr/zoo.dm +++ b/maps/gateway_archive_vr/zoo.dm @@ -20,7 +20,7 @@ /obj/item/paper/zoo name = "\improper Quarterly Report" - info = {"There's nothing but spreadsheets and budget reports on this document, apparently regarding a zoo owned by NanoTrasen."} + info = span_italics("There's nothing but spreadsheets and budget reports on this document, apparently regarding a zoo owned by NanoTrasen.") /obj/item/paper/zoo/pirate name = "odd note" @@ -41,4 +41,4 @@ info = {"Attention crew,

    Since apparently you fucking idiots didn't notice, that bulltaur who delivered the bears was Jarome Rognvaldr. I'm sorry, maybe you scabs forgot? Does the name Jarome the Bottomless ring any fucking bells? If he's seen again without a laser bolt hole through his fucking skull, I'm shoving anyone on guard duty up Zed's arse. Are we - clear?

    -Lady Nebula"} \ No newline at end of file + clear?

    -Lady Nebula"} diff --git a/maps/gateway_vr/wildwest.dm b/maps/gateway_vr/wildwest.dm index f7c14b2ddef..1e16c09f6dd 100644 --- a/maps/gateway_vr/wildwest.dm +++ b/maps/gateway_vr/wildwest.dm @@ -48,8 +48,8 @@ var/wish = tgui_input_list(usr, "You want...","Wish", list("Power","Wealth","Immortality","To Kill","Peace")) switch(wish) if("Power") - to_chat(user, "Your wish is granted, but at a terrible cost...") - to_chat(user, "The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart.") + to_chat(user, span_boldwarning("Your wish is granted, but at a terrible cost...")) + to_chat(user, span_warning("The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart.")) if (!(LASER in user.mutations)) user.mutations.Add(LASER) to_chat(user, span_notice("You feel pressure building behind your eyes.")) @@ -65,35 +65,35 @@ user.dna.mutantrace = "shadow" user.update_mutantrace() if("Wealth") - to_chat(user, "Your wish is granted, but at a terrible cost...") - to_chat(user, "The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart.") + to_chat(user, span_boldwarning("Your wish is granted, but at a terrible cost...")) + to_chat(user, span_warning("The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart.")) new /obj/structure/closet/syndicate/resources/everything(loc) user.dna.mutantrace = "shadow" user.update_mutantrace() if("Immortality") - to_chat(user, "Your wish is granted, but at a terrible cost...") - to_chat(user, "The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart.") - user.verbs += /mob/living/carbon/proc/immortality + to_chat(user, span_boldwarning("Your wish is granted, but at a terrible cost...")) + to_chat(user, span_warning("The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart.")) + add_verb(user, /mob/living/carbon/proc/immortality) user.dna.mutantrace = "shadow" user.update_mutantrace() if("To Kill") - to_chat(user, "Your wish is granted, but at a terrible cost...") - to_chat(user, "The Wish Granter punishes you for your wickedness, claiming your soul and warping your body to match the darkness in your heart.") + to_chat(user, span_boldwarning("Your wish is granted, but at a terrible cost...")) + to_chat(user, span_warning("The Wish Granter punishes you for your wickedness, claiming your soul and warping your body to match the darkness in your heart.")) ticker.mode.traitors += user.mind user.mind.special_role = "traitor" var/datum/objective/hijack/hijack = new hijack.owner = user.mind user.mind.objectives += hijack - to_chat(user, "Your inhibitions are swept away, the bonds of loyalty broken, you are free to murder as you please!") + to_chat(user, span_infoplain(span_bold("Your inhibitions are swept away, the bonds of loyalty broken, you are free to murder as you please!"))) var/obj_count = 1 for(var/datum/objective/OBJ in user.mind.objectives) - to_chat(user, "Objective #[obj_count]: [OBJ.explanation_text]") + to_chat(user, span_infoplain(span_bold("Objective #[obj_count]") + ": [OBJ.explanation_text]")) obj_count++ user.dna.mutantrace = "shadow" user.update_mutantrace() if("Peace") - to_chat(user, "Whatever alien sentience that the Wish Granter possesses is satisfied with your wish. There is a distant wailing as the last of the Faithless begin to die, then silence.") - to_chat(user, "You feel as if you just narrowly avoided a terrible fate...") + to_chat(user, span_infoplain(span_bold("Whatever alien sentience that the Wish Granter possesses is satisfied with your wish. There is a distant wailing as the last of the Faithless begin to die, then silence."))) + to_chat(user, span_infoplain("You feel as if you just narrowly avoided a terrible fate...")) for(var/mob/living/simple_mob/faithless/F in living_mob_list) F.health = -10 F.set_stat(DEAD) diff --git a/maps/gateway_vr/zoo.dm b/maps/gateway_vr/zoo.dm index 10228c8f870..baded125a60 100644 --- a/maps/gateway_vr/zoo.dm +++ b/maps/gateway_vr/zoo.dm @@ -20,7 +20,7 @@ /obj/item/paper/zoo name = "\improper Quarterly Report" - info = {"There's nothing but spreadsheets and budget reports on this document, apparently regarding a zoo owned by NanoTrasen."} + info = span_italics("There's nothing but spreadsheets and budget reports on this document, apparently regarding a zoo owned by NanoTrasen.") /obj/item/paper/zoo/pirate name = "odd note" @@ -41,4 +41,4 @@ info = {"Attention crew,

    Since apparently you fucking idiots didn't notice, that bulltaur who delivered the bears was Jarome Rognvaldr. I'm sorry, maybe you scabs forgot? Does the name Jarome the Bottomless ring any fucking bells? If he's seen again without a laser bolt hole through his fucking skull, I'm shoving anyone on guard duty up Zed's arse. Are we - clear?

    -Lady Nebula"} \ No newline at end of file + clear?

    -Lady Nebula"} diff --git a/maps/redgate/fantasy_items.dm b/maps/redgate/fantasy_items.dm index a6092b8ac40..f16c69ec467 100644 --- a/maps/redgate/fantasy_items.dm +++ b/maps/redgate/fantasy_items.dm @@ -217,24 +217,24 @@ if(src.broken > 0) if(src.broken == 2 && O.is_screwdriver()) // If it's broken and they're using a screwdriver user.visible_message( \ - "\The [user] starts to fix part of the cooking pot.", \ + span_infoplain(span_bold("\The [user]") + " starts to fix part of the cooking pot."), \ span_notice("You start to fix part of the cooking pot.") \ ) playsound(src, O.usesound, 50, 1) if (do_after(user,20 * O.toolspeed)) user.visible_message( \ - "\The [user] fixes part of the cooking pot.", \ + span_infoplain(span_bold("\The [user]") + " fixes part of the cooking pot."), \ span_notice("You have fixed part of the cooking pot.") \ ) src.broken = 1 // Fix it a bit else if(src.broken == 1 && O.is_wrench()) // If it's broken and they're doing the wrench user.visible_message( \ - "\The [user] starts to fix part of the cooking pot.", \ + span_infoplain(span_bold("\The [user]") + " starts to fix part of the cooking pot."), \ span_notice("You start to fix part of the cooking pot.") \ ) if (do_after(user,20 * O.toolspeed)) user.visible_message( \ - "\The [user] fixes the cooking pot.", \ + span_infoplain(span_bold("\The [user]") + " fixes the cooking pot."), \ span_notice("You have fixed the cooking pot.") \ ) src.icon_state = "cookingpot" @@ -248,7 +248,7 @@ else if(src.dirty==100) // The microwave is all dirty so can't be used! if(istype(O, /obj/item/reagent_containers/spray/cleaner) || istype(O, /obj/item/soap)) // If they're trying to clean it then let them user.visible_message( \ - "\The [user] starts to clean the cooking pot.", \ + span_bold("\The [user]") + "starts to clean the cooking pot.", \ span_notice("You start to clean the cooking pot.") \ ) if (do_after(user,20)) diff --git a/maps/tether/tether_shuttles.dm b/maps/tether/tether_shuttles.dm index 69f575033e6..f9532970e9e 100644 --- a/maps/tether/tether_shuttles.dm +++ b/maps/tether/tether_shuttles.dm @@ -101,18 +101,18 @@ #define MOVE_PER(x) move_time*(x/100) SECONDS - computer.visible_message("[icon2html(computer)] Beginning flight and telemetry monitoring.") + computer.visible_message("[icon2html(computer), viewers(computer)] " + span_notice("Beginning flight and telemetry monitoring.")) sleep(MOVE_PER(5)) if(failures >= 1) - computer.visible_message("[icon2html(computer)] Single engine failure, continuing flight.") + computer.visible_message("[icon2html(computer), viewers(computer)] " + span_warning("Single engine failure, continuing flight.")) sleep(MOVE_PER(10)) if(failures >= 2) - computer.visible_message("[icon2html(computer)] Second engine failure, unable to complete flight.") + computer.visible_message("[icon2html(computer), viewers(computer)] " + span_warning("Second engine failure, unable to complete flight.")) playsound(computer,'sound/mecha/internaldmgalarm.ogg',100,0) sleep(MOVE_PER(10)) - computer.visible_message("[icon2html(computer)] Commencing RTLS abort mode.") + computer.visible_message("[icon2html(computer), viewers(computer)] " + span_warning("Commencing RTLS abort mode.")) sleep(MOVE_PER(20)) if(failures < 3) move(area_transition,origin) @@ -120,18 +120,18 @@ return 1 if(failures >= 3) - computer.visible_message("[icon2html(computer)] Total engine failure, unable to complete abort mode.") + computer.visible_message("[icon2html(computer), viewers(computer)] " + span_danger("Total engine failure, unable to complete abort mode.")) playsound(computer,'sound/mecha/internaldmgalarm.ogg',100,0) sleep(MOVE_PER(5)) - computer.visible_message("[icon2html(computer)] Distress signal broadcast.") + computer.visible_message("[icon2html(computer), viewers(computer)] " + span_danger("Distress signal broadcast.")) playsound(computer,'sound/mecha/internaldmgalarm.ogg',100,0) sleep(MOVE_PER(5)) - computer.visible_message("[icon2html(computer)] Stall. Stall. Stall. Stall.") + computer.visible_message("[icon2html(computer), viewers(computer)] " + span_danger("Stall. Stall. Stall. Stall.")) playsound(computer,'sound/mecha/internaldmgalarm.ogg',100,0) sleep(MOVE_PER(5)) playsound(computer,'sound/mecha/internaldmgalarm.ogg',100,0) sleep(MOVE_PER(5)) - computer.visible_message("[icon2html(computer)] Terrain! Pull up! Terrain! Pull up!") + computer.visible_message("[icon2html(computer), viewers(computer)] " + span_danger("Terrain! Pull up! Terrain! Pull up!")) playsound(computer,'sound/mecha/internaldmgalarm.ogg',100,0) playsound(computer,'sound/misc/bloblarm.ogg',100,0) sleep(MOVE_PER(10)) diff --git a/maps/~map_system/_map_selection.dm b/maps/~map_system/_map_selection.dm index 879f058f545..47ff0d984d0 100644 --- a/maps/~map_system/_map_selection.dm +++ b/maps/~map_system/_map_selection.dm @@ -5,8 +5,8 @@ /* FOR LIVE SERVER */ /*********************/ -#define USE_MAP_TETHER -//#define USE_MAP_STELLARDELIGHT +//#define USE_MAP_TETHER +#define USE_MAP_STELLARDELIGHT //#define USE_MAP_GROUNDBASE // Debug diff --git a/tgui/packages/tgui-panel/chat/constants.ts b/tgui/packages/tgui-panel/chat/constants.ts index e704bee2f4d..174e44c2904 100644 --- a/tgui/packages/tgui-panel/chat/constants.ts +++ b/tgui/packages/tgui-panel/chat/constants.ts @@ -55,7 +55,7 @@ export const MESSAGE_TYPES = [ type: MESSAGE_TYPE_SYSTEM, name: 'System Messages', description: 'Messages from your client, always enabled', - selector: '.boldannounce', + selector: '.boldannounce, .world, .span_filter_system, .sinister', important: true, }, // Basic types @@ -75,7 +75,7 @@ export const MESSAGE_TYPES = [ type: MESSAGE_TYPE_LOCALCHAT, name: 'Local', description: 'In-character local messages (say, emote, etc)', - selector: '.say, .emote, .emotesubtle', + selector: '.say, .emote, .emotesubtle, .pnarrate, .filter_say', }, { type: MESSAGE_TYPE_PLOCALCHAT, @@ -113,14 +113,14 @@ export const MESSAGE_TYPES = [ name: 'Info', description: 'Non-urgent messages from the game and items', selector: - '.notice:not(.pm):not(.mentor), .adminnotice:not(.pm), .info, .sinister, .cult, .alium, .infoplain, .announce, .hear, .smallnotice, .holoparasite, .boldnotice, .suicide, .unconscious', + '.notice:not(.pm):not(.mentor), .adminnotice:not(.pm), .info, .cult, .alium, .infoplain, .announce, .hear, .smallnotice, .holoparasite, .boldnotice, .suicide, .unconscious, .filter_notice', }, { type: MESSAGE_TYPE_WARNING, name: 'Warnings', description: 'Urgent messages from the game and items', selector: - '.warning:not(.pm):not(.mentor), .boldwarning:not(.pm):not(.mentor), .critical, .userdanger, .alertsyndie, .warningplain, .sinister', + '.warning:not(.pm):not(.mentor), .boldwarning:not(.pm):not(.mentor), .critical, .userdanger, .alertsyndie, .warningplain, .sinister, .filter_warning', }, { type: MESSAGE_TYPE_DEADCHAT, @@ -145,7 +145,7 @@ export const MESSAGE_TYPES = [ type: MESSAGE_TYPE_ADMINPM, name: 'Admin PMs', description: 'Messages to/from admins (adminhelp)', - selector: '.pm, .adminhelp', + selector: '.pm, .adminhelp, .filter_pm', }, { type: MESSAGE_TYPE_MENTORPM, @@ -157,7 +157,8 @@ export const MESSAGE_TYPES = [ type: MESSAGE_TYPE_COMBAT, name: 'Combat Log', description: 'Urist McTraitor has stabbed you with a knife!', - selector: '.danger, .attack, .disarm, .passive, .bolddanger', + selector: + '.danger, .attack, .disarm, .passive, .bolddanger, .filter_combat', }, { type: MESSAGE_TYPE_CHATPRINT, @@ -209,7 +210,6 @@ export const MESSAGE_TYPES = [ type: MESSAGE_TYPE_ADMINLOG, name: 'Admin Log', description: 'ADMIN LOG: Urist McAdmin has jumped to coordinates X, Y, Z', - selector: '.log_message, .filter_adminlog', admin: true, }, { @@ -222,8 +222,6 @@ export const MESSAGE_TYPES = [ type: MESSAGE_TYPE_DEBUG, name: 'Debug Log', description: 'DEBUG: SSPlanets subsystem Recover().', - selector: - '.filter_debuglogs, .debug_error, .debug_warning, .debug_info, .debug_debug, .debug_trace', admin: true, }, ]; diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss index 2023b89c386..cb27c044ad8 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss @@ -371,6 +371,10 @@ img.icon.bigicon { font-weight: bold; } +.world { + font-weight: bold; +} + .say, .emote, .emotesubtle, @@ -670,6 +674,10 @@ img.icon.bigicon { color: #059223; } +.darkgreen { + color: #008000; +} + .grey { color: #838383; } @@ -1421,6 +1429,10 @@ $border-width-px: $border-width * 1px; font-family: 'Segoe Script Bold', 'Segoe Script', sans-serif, Verdana; } +.marish { + color: #9e31a4; +} + .shadekin { color: #be3cc5; font-size: 150%; @@ -1428,3 +1440,7 @@ $border-width-px: $border-width * 1px; font-family: 'Gabriola', cursive, sans-serif; line-height: 0.3; } + +.wingdings { + font-family: Wingdings, Webdings; +} diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss index afd15340155..e7b4e47ba78 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss @@ -389,6 +389,10 @@ img.icon.bigicon { font-weight: bold; } +.world { + font-weight: bold; +} + .say, .emote, .emotesubtle, @@ -697,6 +701,10 @@ h2.alert { color: #03ff39; } +.darkgreen { + color: #008000; +} + .grey { color: #838383; } @@ -1454,6 +1462,10 @@ $border-width-px: $border-width * 1px; font-family: 'Segoe Script Bold', 'Segoe Script', sans-serif, Verdana; } +.marish { + color: #9e31a4; +} + .shadekin { color: #be3cc5; font-size: 150%; @@ -1461,3 +1473,7 @@ $border-width-px: $border-width * 1px; font-family: 'Gabriola', cursive, sans-serif; line-height: 0.3; } + +.wingdings { + font-family: Wingdings, Webdings; +} diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-vchatdark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-vchatdark.scss index 6b7a02c5668..32ab6331d5f 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-vchatdark.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-vchatdark.scss @@ -371,6 +371,10 @@ img.icon.bigicon { font-weight: bold; } +.world { + font-weight: bold; +} + .say, .emote, .emotesubtle, @@ -670,6 +674,10 @@ img.icon.bigicon { color: #44ff44; } +.darkgreen { + color: #008000; +} + .grey { color: #a9a9a9; } @@ -1421,6 +1429,10 @@ $border-width-px: $border-width * 1px; font-family: 'Segoe Script Bold', 'Segoe Script', sans-serif, Verdana; } +.marish { + color: #9e31a4; +} + .shadekin { color: #be3cc5; font-size: 150%; @@ -1428,3 +1440,7 @@ $border-width-px: $border-width * 1px; font-family: 'Gabriola', cursive, sans-serif; line-height: 0.3; } + +.wingdings { + font-family: Wingdings, Webdings; +} diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-vchatlight.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-vchatlight.scss index bdf1a480cc8..fd4c060a7fb 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-vchatlight.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-vchatlight.scss @@ -389,6 +389,10 @@ img.icon.bigicon { font-weight: bold; } +.world { + font-weight: bold; +} + .say, .emote, .emotesubtle, @@ -695,6 +699,10 @@ h2.alert { color: #03ff39; } +.darkgreen { + color: #008000; +} + .grey { color: #838383; } @@ -1452,6 +1460,10 @@ $border-width-px: $border-width * 1px; font-family: 'Segoe Script Bold', 'Segoe Script', sans-serif, Verdana; } +.marish { + color: #9e31a4; +} + .shadekin { color: #be3cc5; font-size: 150%; @@ -1459,3 +1471,7 @@ $border-width-px: $border-width * 1px; font-family: 'Gabriola', cursive, sans-serif; line-height: 0.3; } + +.wingdings { + font-family: Wingdings, Webdings; +} diff --git a/tgui/packages/tgui/interfaces/LateChoices.tsx b/tgui/packages/tgui/interfaces/LateChoices.tsx new file mode 100644 index 00000000000..05d9bb3b441 --- /dev/null +++ b/tgui/packages/tgui/interfaces/LateChoices.tsx @@ -0,0 +1,257 @@ +import { Window } from 'tgui/layouts'; +import { Box, Button, NoticeBox, Section, Stack } from 'tgui-core/components'; + +import { useBackend } from '../backend'; + +enum Evac { + Gone = 'Gone', + Emergency = 'Emergency', + CrewTransfer = 'Crew Transfer', + None = 'None', +} + +enum Department { + Command = 'Command', + Security = 'Security', + Engineering = 'Engineering', + Medical = 'Medical', + Research = 'Research', + Supply = 'Supply', + Service = 'Service', + Expedition = 'Expedition', + Silicon = 'Silicon', + Offmap = 'Offmap', + Unknown = 'Unknown', +} + +type Job = { + title: string; + priority: number; + departments: Department[]; + current_positions: number; + active: number; + offmap: boolean; +}; + +type Data = { + name: string; + duration: number; + evac: Evac; + jobs: Job[]; +}; + +const splitJobs = ( + jobs: Job[], +): { favorites: Job[]; departments: { [key: string]: Job[] } } => { + let favorites: Job[] = []; + let departments: { [key: string]: Job[] } = {}; + + for (let job of jobs) { + if (job.priority !== 0) { + favorites.push(job); + } else { + for (let department of job.departments) { + if (department in departments) { + departments[department].push(job); + } else { + departments[department] = [job]; + } + } + } + } + + favorites.sort((a, b) => a.priority - b.priority); + + return { + favorites, + departments, + }; +}; + +export const LateChoices = (props) => { + const { act, data } = useBackend(); + + const { name, duration, evac, jobs } = data; + + const { favorites, departments } = splitJobs(jobs); + + return ( + + + + +
    + + Welcome, {name} + + + Round Duration: {duration} + +
    +
    + +
    + {favorites.length ? ( +
    }> + {favorites.map((job) => ( + + ))} +
    + ) : null} + {Object.entries(departments) + .sort((a, b) => a[0].localeCompare(b[0])) + .map(([dept, jobs]) => ( +
    } + key={dept} + > + {jobs.map((job) => ( + + ))} +
    + ))} +
    +
    +
    +
    +
    + ); +}; + +const Evacuation = (props: { evac: Evac }) => { + const { evac } = props; + + switch (evac) { + case Evac.None: + return null; + case Evac.CrewTransfer: + return ( + + The vessel is currently undergoing crew transfer procedures. + + ); + case Evac.Emergency: + return ( + + The vessel is currently undergoing evacuation procedures. + + ); + case Evac.Gone: + return The vessel has been evacuated.; + default: + return null; + } +}; + +const priorityToColor = (priority: number): string => { + switch (priority) { + case 1: + return 'good'; + case 2: + return 'average'; + case 3: + return 'bad'; + default: + return ''; + } +}; + +const JobButton = (props: { job: Job }) => { + const { act } = useBackend(); + const { job } = props; + return ( + + ); +}; + +const DepartmentTitle = (props: { department: string }) => { + const { department } = props; + + switch (department) { + case 'Favorites': + return ( + + {department} + + ); + case Department.Command: + return ( + + {department} + + ); + case Department.Security: + return ( + + {department} + + ); + case Department.Engineering: + return ( + + {department} + + ); + case Department.Medical: + return ( + + {department} + + ); + case Department.Research: + return ( + + {department} + + ); + case Department.Supply: + return ( + + {department} + + ); + case Department.Service: + return ( + + {department} + + ); + case Department.Expedition: + return ( + + {department} + + ); + case Department.Silicon: + return ( + + {department} + + ); + case Department.Offmap: + return ( + + {department} + + ); + case Department.Unknown: + return ( + + {department} + + ); + default: + return department; + } +}; diff --git a/tgui/packages/tgui/interfaces/Newscaster/NewscasterViewSelected.tsx b/tgui/packages/tgui/interfaces/Newscaster/NewscasterViewSelected.tsx index 7a6181b5c76..2a7a779c253 100644 --- a/tgui/packages/tgui/interfaces/Newscaster/NewscasterViewSelected.tsx +++ b/tgui/packages/tgui/interfaces/Newscaster/NewscasterViewSelected.tsx @@ -84,7 +84,8 @@ export const NewscasterViewSelected = (props: { setScreen: Function }) => { {(!!viewing_channel.messages.length && viewing_channel.messages.map((message) => (
    - - {decodeHtmlEntities(message.body)} + {message.title && decodeHtmlEntities(message.title) + ' - '} + {decodeHtmlEntities(message.body)} {!!message.img && ( diff --git a/tgui/packages/tgui/interfaces/Newscaster/types.ts b/tgui/packages/tgui/interfaces/Newscaster/types.ts index c1932c3006f..7c9892ab01e 100644 --- a/tgui/packages/tgui/interfaces/Newscaster/types.ts +++ b/tgui/packages/tgui/interfaces/Newscaster/types.ts @@ -31,6 +31,7 @@ export type Data = { author: string; censored: BooleanLike; messages: { + title: string | null; body: string; img: string | null; type: string; diff --git a/tgui/packages/tgui/interfaces/OvermapHelm.tsx b/tgui/packages/tgui/interfaces/OvermapHelm.tsx index e74a3654589..011f873e4f4 100644 --- a/tgui/packages/tgui/interfaces/OvermapHelm.tsx +++ b/tgui/packages/tgui/interfaces/OvermapHelm.tsx @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; +import { ByondUi, Stack } from 'tgui-core/components'; import { useBackend } from '../backend'; import { Box, Button, Flex, LabeledList, Section, Table } from '../components'; @@ -6,6 +7,7 @@ import { Window } from '../layouts'; import { OvermapFlightData, OvermapPanControls } from './common/Overmap'; type Data = { + mapRef: string | null; sector: string; sector_info: string; landed: string; @@ -30,7 +32,7 @@ type Data = { export const OvermapHelm = (props) => { return ( - + @@ -52,7 +54,14 @@ export const OvermapHelmContent = (props) => { - + + + + + + + + ); }; @@ -82,23 +91,11 @@ const OvermapManualControl = (props) => { className="Section" > Manual Control - - + + - - - - - Direct Control - - - + + ); }; @@ -192,6 +189,45 @@ const OvermapAutopilot = (props) => { ); }; +const OvermapMapView = (props) => { + const { act, data } = useBackend(); + + const { mapRef, manual_control } = data; + + return ( +
    + +
    + ); +}; + const OvermapNavComputer = (props) => { const { act, data } = useBackend(); diff --git a/verdigris.dll b/verdigris.dll new file mode 100644 index 00000000000..2483bab46cd Binary files /dev/null and b/verdigris.dll differ diff --git a/verdigris/.gitignore b/verdigris/.gitignore new file mode 100644 index 00000000000..6985cf1bd09 --- /dev/null +++ b/verdigris/.gitignore @@ -0,0 +1,14 @@ +# Generated by Cargo +# will have compiled files and executables +debug/ +target/ + +# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries +# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html +Cargo.lock + +# These are backup files generated by rustfmt +**/*.rs.bk + +# MSVC Windows builds of rustc generate these, which store debugging information +*.pdb diff --git a/verdigris/Cargo.toml b/verdigris/Cargo.toml new file mode 100644 index 00000000000..29fd9e041ce --- /dev/null +++ b/verdigris/Cargo.toml @@ -0,0 +1,25 @@ +[package] +name = "verdigris" +version = "0.1.0" +edition = "2021" + +[lib] +crate-type = ["cdylib"] + +[profile.release] +debug = "full" +lto = "thin" +split-debuginfo = "packed" + +[profile.dev] +debug = "full" +opt-level = 0 + +[dependencies] +const_format = "0.2.33" +eyre = "0.6.12" +meowtonin = { git = "https://github.com/Absolucy/meowtonin.git" } +rand = "0.8.5" + +[build-dependencies] +bosion = "1.1.1" diff --git a/verdigris/README.md b/verdigris/README.md new file mode 100644 index 00000000000..202dc340014 --- /dev/null +++ b/verdigris/README.md @@ -0,0 +1,5 @@ +# Verdigris +## An in-tree rust module for [VOREStation](https://github.com/VOREStation/VOREStation) + +Currently implemented: + - Random map cellular automata diff --git a/verdigris/build-linux.sh b/verdigris/build-linux.sh new file mode 100644 index 00000000000..2003e433ed6 --- /dev/null +++ b/verdigris/build-linux.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +DIR="$(dirname "$0")" + +cargo build --release --target i686-unknown-linux-gnu +cp "target/i686-unknown-linux-gnu/release/libverdigris.so" "$DIR/../libverdigris.so" diff --git a/verdigris/build-windows.sh b/verdigris/build-windows.sh new file mode 100644 index 00000000000..f8daaa0ac67 --- /dev/null +++ b/verdigris/build-windows.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +DIR="$(dirname "$0")" + +cargo build --release --target i686-pc-windows-msvc +cp "target/i686-pc-windows-msvc/release/verdigris.dll" "$DIR/../verdigris.dll" diff --git a/verdigris/build.rs b/verdigris/build.rs new file mode 100644 index 00000000000..8c8770904bf --- /dev/null +++ b/verdigris/build.rs @@ -0,0 +1,3 @@ +fn main() { + bosion::gather_to_env(); +} diff --git a/verdigris/src/lib.rs b/verdigris/src/lib.rs new file mode 100644 index 00000000000..7731e095548 --- /dev/null +++ b/verdigris/src/lib.rs @@ -0,0 +1,5 @@ +#[macro_use] +extern crate meowtonin; + +pub mod random_map; +pub mod verdigris; diff --git a/verdigris/src/random_map.rs b/verdigris/src/random_map.rs new file mode 100644 index 00000000000..0dc6451c802 --- /dev/null +++ b/verdigris/src/random_map.rs @@ -0,0 +1,72 @@ +use meowtonin::{value::ByondValue, ByondError, ByondResult}; +use rand::{distributions::Bernoulli, prelude::Distribution}; + +const CELL_THRESHOLD: usize = 5; + +#[byond_fn] +pub fn generate_automata( + limit_x: ByondValue, + limit_y: ByondValue, + iterations: ByondValue, + initial_wall_cell: ByondValue, +) -> ByondResult> { + let limit_x = limit_x.get_number()? as usize; + let limit_y = limit_y.get_number()? as usize; + let iterations = iterations.get_number()? as usize; + let initial_wall_cell = initial_wall_cell.get_number()? as usize; + + let mut map = seed_map(limit_x, limit_y, initial_wall_cell)?; + for _ in 1..iterations { + map = map + .iter() + .enumerate() + .map(|(i, _)| { + let mut count = 0; + + for x in [-1, 0, 1] { + for y in [-1, 0, 1] { + let idx = ((i as i32) + x + (y * (limit_y as i32))) as usize; + + if let Some(&value) = map.get(idx) { + let is_border_left = idx % limit_x == 0; + let is_border_right = (idx + 1) % limit_x == 0; + + if is_border_left && x == -1 { + continue; + } + if is_border_right && x == 1 { + continue; + } + + if value { + count += 1; + } + } + } + } + + count >= CELL_THRESHOLD + }) + .collect() + } + + let byond_list: Vec = map + .iter() + .map(|&b| ByondValue::new_num(if b { 1. } else { 0. })) + .collect(); + + Ok(byond_list) +} + +fn seed_map(limit_x: usize, limit_y: usize, percent_chance: usize) -> ByondResult> { + let mut map = vec![false; limit_x * limit_y]; + + let d = Bernoulli::new(percent_chance as f64 / 100.0).map_err(ByondError::boxed)?; + + map = map + .iter() + .map(|_| d.sample(&mut rand::thread_rng())) + .collect(); + + Ok(map) +} diff --git a/verdigris/src/verdigris.rs b/verdigris/src/verdigris.rs new file mode 100644 index 00000000000..f0dd35ba612 --- /dev/null +++ b/verdigris/src/verdigris.rs @@ -0,0 +1,21 @@ +//! Metadata functions +use const_format::formatcp as const_format; + +#[byond_fn] +pub fn verdigris_version() -> &'static str { + const_format!( + "{name} v{version} ({git_hash})", + name = env!("CARGO_PKG_NAME"), + version = env!("CARGO_PKG_VERSION"), + git_hash = env!("BOSION_GIT_COMMIT_SHORTHASH") + ) +} + +#[byond_fn] +pub fn verdigris_features() -> &'static str { + env!("BOSION_CRATE_FEATURES") +} + +/// Cleans up any resources used by Verdigris. +#[byond_fn] +pub fn cleanup() {} diff --git a/vorestation.dme b/vorestation.dme index 9ad0ec151af..fc1ebb34478 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -20,7 +20,9 @@ #include "code\names.dm" #include "code\world.dm" #include "code\__defines\__globals.dm" +#include "code\__defines\_click.dm" #include "code\__defines\_compile_options.dm" +#include "code\__defines\_helpers.dm" #include "code\__defines\_lists.dm" #include "code\__defines\_planes+layers.dm" #include "code\__defines\_planes+layers_vr.dm" @@ -128,6 +130,7 @@ #include "code\__defines\sprite_sheets.dm" #include "code\__defines\sqlite_defines.dm" #include "code\__defines\stat_tracking.dm" +#include "code\__defines\statpanel.dm" #include "code\__defines\subsystems.dm" #include "code\__defines\supply.dm" #include "code\__defines\targeting.dm" @@ -155,6 +158,8 @@ #include "code\__defines\traits\_traits.dm" #include "code\__defines\traits\declarations.dm" #include "code\__defines\traits\sources.dm" +#include "code\__defines\verdigris\_verdigris.dm" +#include "code\__defines\verdigris\random_map.dm" #include "code\_global_vars\_regexes.dm" #include "code\_global_vars\bitfields.dm" #include "code\_global_vars\misc.dm" @@ -186,6 +191,7 @@ #include "code\_helpers\mobs.dm" #include "code\_helpers\names.dm" #include "code\_helpers\sanitize_values.dm" +#include "code\_helpers\screen_objs.dm" #include "code\_helpers\shell.dm" #include "code\_helpers\storage.dm" #include "code\_helpers\string_lists.dm" @@ -196,6 +202,7 @@ #include "code\_helpers\type2type.dm" #include "code\_helpers\unsorted.dm" #include "code\_helpers\unsorted_vr.dm" +#include "code\_helpers\verbs.dm" #include "code\_helpers\view.dm" #include "code\_helpers\visual_filters.dm" #include "code\_helpers\icons\flatten.dm" @@ -217,7 +224,6 @@ #include "code\_onclick\hud\_defines.dm" #include "code\_onclick\hud\_defines_vr.dm" #include "code\_onclick\hud\ability_screen_objects.dm" -#include "code\_onclick\hud\action.dm" #include "code\_onclick\hud\ai.dm" #include "code\_onclick\hud\alert.dm" #include "code\_onclick\hud\alert_vr.dm" @@ -244,6 +250,9 @@ #include "code\_onclick\hud\skybox.dm" #include "code\_onclick\hud\soulcatcher_guest.dm" #include "code\_onclick\hud\spell_screen_objects.dm" +#include "code\_onclick\hud\action\action.dm" +#include "code\_onclick\hud\action\action_screen_objects.dm" +#include "code\_onclick\hud\action\types\item.dm" #include "code\ATMOSPHERICS\_atmos_setup.dm" #include "code\ATMOSPHERICS\_atmospherics_helpers.dm" #include "code\ATMOSPHERICS\atmospherics.dm" @@ -345,6 +354,7 @@ #include "code\controllers\subsystems\sounds.dm" #include "code\controllers\subsystems\sqlite.dm" #include "code\controllers\subsystems\SSvote.dm" +#include "code\controllers\subsystems\statpanel.dm" #include "code\controllers\subsystems\sun.dm" #include "code\controllers\subsystems\supply.dm" #include "code\controllers\subsystems\tgui.dm" @@ -361,6 +371,7 @@ #include "code\controllers\subsystems\processing\fastprocess.dm" #include "code\controllers\subsystems\processing\instruments.dm" #include "code\controllers\subsystems\processing\obj.dm" +#include "code\controllers\subsystems\processing\obj_tab_items.dm" #include "code\controllers\subsystems\processing\processing.dm" #include "code\controllers\subsystems\processing\projectiles.dm" #include "code\controllers\subsystems\processing\turfs.dm" @@ -415,6 +426,7 @@ #include "code\datums\autolathe\tools.dm" #include "code\datums\autolathe\tools_vr.dm" #include "code\datums\components\_component.dm" +#include "code\datums\components\connect_mob_behalf.dm" #include "code\datums\components\material_container.dm" #include "code\datums\components\overlay_lighting.dm" #include "code\datums\components\recursive_move.dm" @@ -4101,6 +4113,7 @@ #include "code\modules\tgui\modules\crew_manifest.dm" #include "code\modules\tgui\modules\crew_monitor.dm" #include "code\modules\tgui\modules\gyrotron_control.dm" +#include "code\modules\tgui\modules\late_choices.dm" #include "code\modules\tgui\modules\law_manager.dm" #include "code\modules\tgui\modules\overmap.dm" #include "code\modules\tgui\modules\power_monitor.dm"