mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-13 00:55:20 +01:00
Ghosts now have (better) runechat (#95843)
## About The Pull Request Ports our optimizations to the version of ghost runechat introduced by https://github.com/tgstation/tgstation/pull/95223 Instead of looping through all the mobs a second time it will do it in deadchat_broadcast(). Also adds a global for if drunechat is enabled/disabled and an admin verb for toggling it on or off. <details><summary>still works</summary> <img width="330" height="220" alt="dreamseeker_kkNBPBjbMv" src="https://github.com/user-attachments/assets/4706ad98-fafe-4f88-9de0-6b72983ab044" /> </details> ## Why It's Good For The Game Better option for performance ## Changelog 🆑 code: speeds ghost runechat up a bit, and makes it show as italic admin: adds a 'toggle dead runechat' admin verb in case you need to disable it midround for an event or something /🆑
This commit is contained in:
@@ -16,5 +16,7 @@
|
||||
#define DISABLE_PARALLAX 7
|
||||
/// Disables footsteps, TRAIT_BYPASS_MEASURES exempted
|
||||
#define DISABLE_FOOTSTEPS 8
|
||||
/// Disables runechat for ghosts
|
||||
#define DISABLE_DEAD_RUNECHAT 9
|
||||
|
||||
#define MEASURES_AMOUNT 8 // The total number of switches defined above
|
||||
#define MEASURES_AMOUNT 9 // The total number of switches defined above
|
||||
|
||||
+15
-5
@@ -363,9 +363,11 @@ GLOBAL_LIST_INIT(skin_tone_names, list(
|
||||
|
||||
return spawned_mobs
|
||||
|
||||
#define SEE_DEADCHAT_ADMIN (1<<0)
|
||||
#define SEE_DEADCHAT_NORMAL (1<<1)
|
||||
// Displays a message in deadchat, sent by source. source is not linkified, message is, to avoid stuff like character names to be linkified.
|
||||
// Automatically gives the class deadsay to the whole message (message + source)
|
||||
/proc/deadchat_broadcast(message, source=null, mob/follow_target=null, turf/turf_target=null, speaker_key=null, message_type=DEADCHAT_REGULAR, admin_only=FALSE)
|
||||
/proc/deadchat_broadcast(message, source=null, mob/follow_target=null, turf/turf_target=null, speaker_key=null, message_type=DEADCHAT_REGULAR, admin_only=FALSE, original_message)
|
||||
message = span_deadsay("[source][span_linkify(message)]")
|
||||
|
||||
if(admin_only)
|
||||
@@ -383,13 +385,13 @@ GLOBAL_LIST_INIT(skin_tone_names, list(
|
||||
if(admin_only)
|
||||
if(!M.client?.holder)
|
||||
continue
|
||||
var/override = FALSE
|
||||
var/override = NONE
|
||||
if(M.client?.holder && (chat_toggles & CHAT_DEAD))
|
||||
override = TRUE
|
||||
override = SEE_DEADCHAT_ADMIN
|
||||
if(HAS_TRAIT(M, TRAIT_SIXTHSENSE) && message_type == DEADCHAT_REGULAR)
|
||||
override = TRUE
|
||||
override = SEE_DEADCHAT_NORMAL
|
||||
if(SSticker.current_state == GAME_STATE_FINISHED)
|
||||
override = TRUE
|
||||
override = SEE_DEADCHAT_NORMAL
|
||||
if(isnewplayer(M) && !override)
|
||||
continue
|
||||
if(M.stat != DEAD && !override)
|
||||
@@ -413,6 +415,7 @@ GLOBAL_LIST_INIT(skin_tone_names, list(
|
||||
|
||||
if(isobserver(M))
|
||||
var/rendered_message = message
|
||||
override = SEE_DEADCHAT_NORMAL
|
||||
|
||||
if(follow_target)
|
||||
var/F
|
||||
@@ -429,6 +432,13 @@ GLOBAL_LIST_INIT(skin_tone_names, list(
|
||||
else
|
||||
to_chat(M, message, avoid_highlighting = speaker_key == M.key)
|
||||
|
||||
// Ghost runechat
|
||||
if(original_message && ((override & SEE_DEADCHAT_NORMAL) || M.see_invisible >= follow_target.invisibility) && (!SSlag_switch.measures[DISABLE_DEAD_RUNECHAT] || HAS_TRAIT(M, TRAIT_BYPASS_MEASURES)) && M.runechat_prefs_check(M))
|
||||
M.create_chat_message(follow_target, /datum/language/common, original_message, list(SPAN_ITALICS))
|
||||
#undef SEE_DEADCHAT_ADMIN
|
||||
#undef SEE_DEADCHAT_NORMAL
|
||||
|
||||
|
||||
//Used in chemical_mob_spawn. Generates a random mob based on a given gold_core_spawnable value.
|
||||
/proc/create_random_mob(spawn_location, mob_class = HOSTILE_SPAWN)
|
||||
var/static/list/mob_spawn_meancritters = list() // list of possible hostile mobs
|
||||
|
||||
@@ -10,7 +10,7 @@ SUBSYSTEM_DEF(lag_switch)
|
||||
/// List of bools corresponding to code/__DEFINES/lag_switch.dm
|
||||
var/static/list/measures[MEASURES_AMOUNT]
|
||||
/// List of measures that toggle automatically
|
||||
var/list/auto_measures = list(DISABLE_GHOST_ZOOM_TRAY, DISABLE_RUNECHAT, DISABLE_USR_ICON2HTML, DISABLE_PARALLAX, DISABLE_FOOTSTEPS)
|
||||
var/list/auto_measures = list(DISABLE_GHOST_ZOOM_TRAY, DISABLE_RUNECHAT, DISABLE_USR_ICON2HTML, DISABLE_PARALLAX, DISABLE_FOOTSTEPS, DISABLE_DEAD_RUNECHAT)
|
||||
/// Timer ID for the automatic veto period
|
||||
var/veto_timer_id
|
||||
/// Cooldown between say verb uses when slowmode is enabled
|
||||
|
||||
@@ -484,6 +484,7 @@ ADMIN_VERB(lag_switch_panel, R_ADMIN, "Show Lag Switches", "Display the controls
|
||||
dat += "<br/><b>Measures below can be bypassed with a <abbr title='TRAIT_BYPASS_MEASURES'><u>special trait</u></abbr></b><br/>"
|
||||
dat += "Slowmode say verb (informs world): <a href='byond://?_src_=holder;[HrefToken()];change_lag_switch=[SLOWMODE_SAY]'><b>[SSlag_switch.measures[SLOWMODE_SAY] ? "On" : "Off"]</b></a><br/>"
|
||||
dat += "Disable runechat: <a href='byond://?_src_=holder;[HrefToken()];change_lag_switch=[DISABLE_RUNECHAT]'><b>[SSlag_switch.measures[DISABLE_RUNECHAT] ? "On" : "Off"]</b></a> - <span style='font-size:80%'>trait applies to speaker</span><br/>"
|
||||
dat += "Disable dead runechat: <a href='byond://?_src_=holder;[HrefToken()];change_lag_switch=[DISABLE_DEAD_RUNECHAT]'><b>[SSlag_switch.measures[DISABLE_DEAD_RUNECHAT] ? "On" : "Off"]</b></a> - <span style='font-size:80%'>trait applies to speaker</span><br/>"
|
||||
dat += "Disable examine icons: <a href='byond://?_src_=holder;[HrefToken()];change_lag_switch=[DISABLE_USR_ICON2HTML]'><b>[SSlag_switch.measures[DISABLE_USR_ICON2HTML] ? "On" : "Off"]</b></a> - <span style='font-size:80%'>trait applies to examiner</span><br/>"
|
||||
dat += "Disable parallax: <a href='byond://?_src_=holder;[HrefToken()];change_lag_switch=[DISABLE_PARALLAX]'><b>[SSlag_switch.measures[DISABLE_PARALLAX] ? "On" : "Off"]</b></a> - <span style='font-size:80%'>trait applies to character</span><br />"
|
||||
dat += "Disable footsteps: <a href='byond://?_src_=holder;[HrefToken()];change_lag_switch=[DISABLE_FOOTSTEPS]'><b>[SSlag_switch.measures[DISABLE_FOOTSTEPS] ? "On" : "Off"]</b></a> - <span style='font-size:80%'>trait applies to character</span><br />"
|
||||
|
||||
@@ -133,7 +133,6 @@ GLOBAL_VAR_INIT(normal_ooc_colour, "#002eb8")
|
||||
else
|
||||
GLOB.dooc_allowed = !GLOB.dooc_allowed
|
||||
|
||||
|
||||
/client/proc/set_ooc()
|
||||
set name = "Set Player OOC Color"
|
||||
set desc = "Modifies player OOC Color"
|
||||
|
||||
@@ -159,12 +159,7 @@
|
||||
var/displayed_key = key
|
||||
if(client?.holder?.fakekey)
|
||||
displayed_key = null
|
||||
deadchat_broadcast(rendered, source, follow_target = src, speaker_key = displayed_key)
|
||||
for(var/mob/mobs_hearing as anything in GLOB.player_list)
|
||||
if(SSticker.current_state != GAME_STATE_FINISHED && (mobs_hearing.see_invisible < invisibility || !isdead(mobs_hearing)))
|
||||
continue
|
||||
if(runechat_prefs_check(mobs_hearing))
|
||||
mobs_hearing.create_chat_message(src, /datum/language/common, message)
|
||||
deadchat_broadcast(rendered, source, follow_target = src, speaker_key = displayed_key, original_message = message)
|
||||
|
||||
///Check if this message is an emote
|
||||
/mob/proc/check_emote(message, forced)
|
||||
|
||||
Reference in New Issue
Block a user