From c87cc44e04f4061e515387658eba8d89f20fa88a Mon Sep 17 00:00:00 2001 From: Thunder12345 Date: Tue, 7 Feb 2023 23:41:44 +0000 Subject: [PATCH] Capture The Flag: Skill Issue (#72960) ## About The Pull Request QoL update for CTF to make the experience better and smoother. ## Why It's Good For The Game The CTF experience is a bit unpolished in some areas such as important information (shield charge, control point score) being obscured, mandatory hand switching on spawning, and players messing with their team by blocking the controller. ## Changelog :cl: qol: CTF guns spawn in the default active hand qol: CTF shields become transparent as they lose charge qol: CTF King of the Hill scores are visible to players in-game qol: CTF controllers can no longer be blocked by players standing on them /:cl: --- code/__DEFINES/text.dm | 3 ++ code/__HELPERS/text.dm | 5 +++ code/_globalvars/_regexes.dm | 3 ++ code/datums/components/shielded.dm | 10 ++++- code/modules/balloon_alert/balloon_alert.dm | 14 +++---- code/modules/capture_the_flag/ctf_classes.dm | 40 +++++++++---------- .../modules/capture_the_flag/ctf_equipment.dm | 17 ++++++-- code/modules/capture_the_flag/ctf_game.dm | 25 ++++++++---- .../tgui-panel/styles/goon/chat-dark.scss | 8 ++-- .../tgui-panel/styles/goon/chat-light.scss | 8 ++-- 10 files changed, 83 insertions(+), 50 deletions(-) diff --git a/code/__DEFINES/text.dm b/code/__DEFINES/text.dm index 711ca4cc716..3cffec0521f 100644 --- a/code/__DEFINES/text.dm +++ b/code/__DEFINES/text.dm @@ -21,6 +21,9 @@ /// Simply removes the < and > characters, and limits the length of the message. #define STRIP_HTML_SIMPLE(text, limit) (GLOB.angular_brackets.Replace(copytext(text, 1, limit), "")) +/// Removes everything enclose in < and > inclusive of the bracket, and limits the length of the message. +#define STRIP_HTML_FULL(text, limit) (GLOB.html_tags.Replace(copytext(text, 1, limit), "")) + /// Folder directory for strings #define STRING_DIRECTORY "strings" diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index e8aeafc329a..91837dfb3ea 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -44,6 +44,11 @@ return sanitize(STRIP_HTML_SIMPLE(text, limit)) +/// Runs STRIP_HTML_FULL and sanitize. +/proc/strip_html_full(text, limit = MAX_MESSAGE_LEN) + return sanitize(STRIP_HTML_FULL(text, limit)) + + /// Runs STRIP_HTML_SIMPLE and byond's sanitization proc. /proc/adminscrub(text, limit = MAX_MESSAGE_LEN) return html_encode(STRIP_HTML_SIMPLE(text, limit)) diff --git a/code/_globalvars/_regexes.dm b/code/_globalvars/_regexes.dm index 7e571576213..63d9c73c451 100644 --- a/code/_globalvars/_regexes.dm +++ b/code/_globalvars/_regexes.dm @@ -13,6 +13,9 @@ GLOBAL_DATUM_INIT(has_discord_embeddable_links, /regex, regex("(https?://\[^\\s| //All < and > characters GLOBAL_DATUM_INIT(angular_brackets, /regex, regex(@"[<>]", "g")) +//All characters between < a > inclusive of the bracket +GLOBAL_DATUM_INIT(html_tags, /regex, regex(@"<.*?>", "g")) + //All characters forbidden by filenames: ", \, \n, \t, /, ?, %, *, :, |, <, >, .. GLOBAL_DATUM_INIT(filename_forbidden_chars, /regex, regex(@{""|[\\\n\t/?%*:|<>]|\.\."}, "g")) GLOBAL_PROTECT(filename_forbidden_chars) diff --git a/code/datums/components/shielded.dm b/code/datums/components/shielded.dm index 86364155223..86bcbf5369e 100644 --- a/code/datums/components/shielded.dm +++ b/code/datums/components/shielded.dm @@ -23,6 +23,8 @@ var/shield_inhand = FALSE /// Should the shield lose charges equal to the damage dealt by a hit? var/lose_multiple_charges = FALSE + /// Should the shield's alpha change to show its remaining charge + var/show_charge_as_alpha = FALSE /// The item we use for recharging var/recharge_path /// The cooldown tracking when we were last hit @@ -32,7 +34,7 @@ /// A callback for the sparks/message that play when a charge is used, see [/datum/component/shielded/proc/default_run_hit_callback] var/datum/callback/on_hit_effects -/datum/component/shielded/Initialize(max_charges = 3, recharge_start_delay = 20 SECONDS, charge_increment_delay = 1 SECONDS, charge_recovery = 1, lose_multiple_charges = FALSE, recharge_path = null, starting_charges = null, shield_icon_file = 'icons/effects/effects.dmi', shield_icon = "shield-old", shield_inhand = FALSE, run_hit_callback) +/datum/component/shielded/Initialize(max_charges = 3, recharge_start_delay = 20 SECONDS, charge_increment_delay = 1 SECONDS, charge_recovery = 1, lose_multiple_charges = FALSE, show_charge_as_alpha = FALSE, recharge_path = null, starting_charges = null, shield_icon_file = 'icons/effects/effects.dmi', shield_icon = "shield-old", shield_inhand = FALSE, run_hit_callback) if(!isitem(parent) || max_charges <= 0) return COMPONENT_INCOMPATIBLE @@ -41,6 +43,7 @@ src.charge_increment_delay = charge_increment_delay src.charge_recovery = charge_recovery src.lose_multiple_charges = lose_multiple_charges + src.show_charge_as_alpha = show_charge_as_alpha src.recharge_path = recharge_path src.shield_icon_file = shield_icon_file src.shield_icon = shield_icon @@ -132,7 +135,10 @@ /datum/component/shielded/proc/on_update_overlays(atom/parent_atom, list/overlays) SIGNAL_HANDLER - overlays += mutable_appearance(shield_icon_file, (current_charges > 0 ? shield_icon : "broken"), MOB_SHIELD_LAYER) + var/mutable_appearance/shield_appearance = mutable_appearance(shield_icon_file, (current_charges > 0 ? shield_icon : "broken"), MOB_SHIELD_LAYER) + if(show_charge_as_alpha) + shield_appearance.alpha = (current_charges/max_charges)*255 + overlays += shield_appearance /** * This proc fires when we're hit, and is responsible for checking if we're charged, then deducting one + returning that we're blocking if so. diff --git a/code/modules/balloon_alert/balloon_alert.dm b/code/modules/balloon_alert/balloon_alert.dm index b9481969136..b814491e41c 100644 --- a/code/modules/balloon_alert/balloon_alert.dm +++ b/code/modules/balloon_alert/balloon_alert.dm @@ -54,16 +54,12 @@ viewer_client?.images += balloon_alert - var/duration_mult = 1 - var/duration_length = length(text) - BALLOON_TEXT_CHAR_LIFETIME_INCREASE_MIN - - if(duration_length > 0) - duration_mult += duration_length*BALLOON_TEXT_CHAR_LIFETIME_INCREASE_MULT + var/length_mult = 1 + max(0, length(strip_html_full(text)) - BALLOON_TEXT_CHAR_LIFETIME_INCREASE_MIN) * BALLOON_TEXT_CHAR_LIFETIME_INCREASE_MULT animate( balloon_alert, pixel_y = world.icon_size * 1.2, - time = BALLOON_TEXT_TOTAL_LIFETIME(1), + time = BALLOON_TEXT_TOTAL_LIFETIME(length_mult), easing = SINE_EASING | EASE_OUT, ) @@ -76,7 +72,7 @@ animate( alpha = 0, - time = BALLOON_TEXT_FULLY_VISIBLE_TIME*duration_mult, + time = BALLOON_TEXT_FULLY_VISIBLE_TIME * length_mult, easing = CUBIC_EASING | EASE_IN, ) @@ -84,8 +80,8 @@ // These two timers are not the same // One manages the relation to the atom that spawned us, the other to the client we're displaying to // We could lose our loc, and still need to talk to our client, so they are done seperately - addtimer(CALLBACK(balloon_alert.loc, PROC_REF(forget_balloon_alert), balloon_alert), BALLOON_TEXT_TOTAL_LIFETIME(duration_mult)) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(remove_image_from_client), balloon_alert, viewer_client), BALLOON_TEXT_TOTAL_LIFETIME(duration_mult)) + addtimer(CALLBACK(balloon_alert.loc, PROC_REF(forget_balloon_alert), balloon_alert), BALLOON_TEXT_TOTAL_LIFETIME(length_mult)) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(remove_image_from_client), balloon_alert, viewer_client), BALLOON_TEXT_TOTAL_LIFETIME(length_mult)) /atom/proc/forget_balloon_alert(image/balloon_alert) LAZYREMOVE(update_on_z, balloon_alert) diff --git a/code/modules/capture_the_flag/ctf_classes.dm b/code/modules/capture_the_flag/ctf_classes.dm index 50be334aca7..95a61bcf64f 100644 --- a/code/modules/capture_the_flag/ctf_classes.dm +++ b/code/modules/capture_the_flag/ctf_classes.dm @@ -11,7 +11,7 @@ belt = /obj/item/gun/ballistic/automatic/pistol/deagle/ctf l_pocket = /obj/item/ammo_box/magazine/recharge/ctf r_pocket = /obj/item/ammo_box/magazine/recharge/ctf - r_hand = /obj/item/gun/ballistic/automatic/laser/ctf + l_hand = /obj/item/gun/ballistic/automatic/laser/ctf ///Description to be shown in the class selection menu var/class_description = "General purpose combat class. Armed with a laser rifle and backup pistol." @@ -60,7 +60,7 @@ /datum/outfit/ctf/instagib name = "CTF Instagib (Solo)" - r_hand = /obj/item/gun/energy/laser/instakill/ctf + l_hand = /obj/item/gun/energy/laser/instakill/ctf shoes = /obj/item/clothing/shoes/jackboots/fast icon_state = "ctf_instakill" class_description = "General purpose combat class. Armed with a laser rifle and backup pistol." @@ -68,7 +68,7 @@ /datum/outfit/ctf/assault name = "CTF Assaulter (Solo)" suit = /obj/item/clothing/suit/armor/vest/ctf/light - r_hand = /obj/item/gun/ballistic/shotgun/ctf + l_hand = /obj/item/gun/ballistic/shotgun/ctf gloves = /obj/item/clothing/gloves/tackler/rocket l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/shotgun r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/shotgun @@ -78,7 +78,7 @@ /datum/outfit/ctf/marksman name = "CTF Marksman (Solo)" - r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/marksman + l_hand = /obj/item/gun/ballistic/automatic/laser/ctf/marksman l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/marksman r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/marksman belt = null @@ -90,7 +90,7 @@ /datum/outfit/ctf/red name = "CTF Rifleman (Red)" suit = /obj/item/clothing/suit/armor/vest/ctf/red - r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/red + l_hand = /obj/item/gun/ballistic/automatic/laser/ctf/red l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/rifle/red r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/rifle/red id = /obj/item/card/id/red //it's red @@ -98,14 +98,14 @@ /datum/outfit/ctf/red/instagib name = "CTF Instagib (Red)" - r_hand = /obj/item/gun/energy/laser/instakill/ctf/red + l_hand = /obj/item/gun/energy/laser/instakill/ctf/red shoes = /obj/item/clothing/shoes/jackboots/fast team_radio_freq = FREQ_CTF_RED /datum/outfit/ctf/assault/red name = "CTF Assaulter (Red)" suit = /obj/item/clothing/suit/armor/vest/ctf/light/red - r_hand = /obj/item/gun/ballistic/shotgun/ctf/red + l_hand = /obj/item/gun/ballistic/shotgun/ctf/red l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/shotgun/red r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/shotgun/red id = /obj/item/card/id/red @@ -114,7 +114,7 @@ /datum/outfit/ctf/marksman/red name = "CTF Marksman (Red)" suit = /obj/item/clothing/suit/armor/vest/ctf/red - r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/marksman/red + l_hand = /obj/item/gun/ballistic/automatic/laser/ctf/marksman/red l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/marksman/red r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/marksman/red id = /obj/item/card/id/red @@ -125,7 +125,7 @@ /datum/outfit/ctf/blue name = "CTF Rifleman (Blue)" suit = /obj/item/clothing/suit/armor/vest/ctf/blue - r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/blue + l_hand = /obj/item/gun/ballistic/automatic/laser/ctf/blue l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/rifle/blue r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/rifle/blue id = /obj/item/card/id/blue //it's blue @@ -133,14 +133,14 @@ /datum/outfit/ctf/blue/instagib name = "CTF Instagib (Blue)" - r_hand = /obj/item/gun/energy/laser/instakill/ctf/blue + l_hand = /obj/item/gun/energy/laser/instakill/ctf/blue shoes = /obj/item/clothing/shoes/jackboots/fast team_radio_freq = FREQ_CTF_BLUE /datum/outfit/ctf/assault/blue name = "CTF Assaulter (Blue)" suit = /obj/item/clothing/suit/armor/vest/ctf/light/blue - r_hand = /obj/item/gun/ballistic/shotgun/ctf/blue + l_hand = /obj/item/gun/ballistic/shotgun/ctf/blue l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/shotgun/blue r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/shotgun/blue id = /obj/item/card/id/blue @@ -149,7 +149,7 @@ /datum/outfit/ctf/marksman/blue name = "CTF Marksman (Blue)" suit = /obj/item/clothing/suit/armor/vest/ctf/blue - r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/marksman/blue + l_hand = /obj/item/gun/ballistic/automatic/laser/ctf/marksman/blue l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/marksman/blue r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/marksman/blue id = /obj/item/card/id/blue @@ -160,7 +160,7 @@ /datum/outfit/ctf/green name = "CTF Rifleman (Green)" suit = /obj/item/clothing/suit/armor/vest/ctf/green - r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/green + l_hand = /obj/item/gun/ballistic/automatic/laser/ctf/green l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/rifle/green r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/rifle/green id = /obj/item/card/id/green //it's green @@ -168,14 +168,14 @@ /datum/outfit/ctf/green/instagib name = "CTF Instagib (Green)" - r_hand = /obj/item/gun/energy/laser/instakill/ctf/green + l_hand = /obj/item/gun/energy/laser/instakill/ctf/green shoes = /obj/item/clothing/shoes/jackboots/fast team_radio_freq = FREQ_CTF_GREEN /datum/outfit/ctf/assault/green name = "CTF Assaulter (Green)" suit = /obj/item/clothing/suit/armor/vest/ctf/light/green - r_hand = /obj/item/gun/ballistic/shotgun/ctf/green + l_hand = /obj/item/gun/ballistic/shotgun/ctf/green l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/shotgun/green r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/shotgun/green id = /obj/item/card/id/green @@ -184,7 +184,7 @@ /datum/outfit/ctf/marksman/green name = "CTF Marksman (Green)" suit = /obj/item/clothing/suit/armor/vest/ctf/green - r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/marksman/green + l_hand = /obj/item/gun/ballistic/automatic/laser/ctf/marksman/green l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/marksman/green r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/marksman/green id = /obj/item/card/id/green @@ -195,7 +195,7 @@ /datum/outfit/ctf/yellow name = "CTF Rifleman (Yellow)" suit = /obj/item/clothing/suit/armor/vest/ctf/yellow - r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/yellow + l_hand = /obj/item/gun/ballistic/automatic/laser/ctf/yellow l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/rifle/yellow r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/rifle/yellow id = /obj/item/card/id/yellow //it's yellow @@ -203,14 +203,14 @@ /datum/outfit/ctf/yellow/instagib name = "CTF Instagib (Yellow)" - r_hand = /obj/item/gun/energy/laser/instakill/ctf/yellow + l_hand = /obj/item/gun/energy/laser/instakill/ctf/yellow shoes = /obj/item/clothing/shoes/jackboots/fast team_radio_freq = FREQ_CTF_YELLOW /datum/outfit/ctf/assault/yellow name = "CTF Assaulter (Yellow)" suit = /obj/item/clothing/suit/armor/vest/ctf/light/yellow - r_hand = /obj/item/gun/ballistic/shotgun/ctf/yellow + l_hand = /obj/item/gun/ballistic/shotgun/ctf/yellow l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/shotgun/yellow r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/shotgun/yellow id = /obj/item/card/id/yellow @@ -219,7 +219,7 @@ /datum/outfit/ctf/marksman/yellow name = "CTF Marksman (Yellow)" suit = /obj/item/clothing/suit/armor/vest/ctf/yellow - r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/marksman/yellow + l_hand = /obj/item/gun/ballistic/automatic/laser/ctf/marksman/yellow l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/marksman/yellow r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/marksman/yellow id = /obj/item/card/id/yellow diff --git a/code/modules/capture_the_flag/ctf_equipment.dm b/code/modules/capture_the_flag/ctf_equipment.dm index 13109488c05..2ff0cf9b447 100644 --- a/code/modules/capture_the_flag/ctf_equipment.dm +++ b/code/modules/capture_the_flag/ctf_equipment.dm @@ -206,9 +206,19 @@ ///Icon state to be fed into the shielded component var/team_shield_icon = "shield-old" + var/max_charges = 150 + var/recharge_start_delay = 20 SECONDS + var/charge_increment_delay = 1 SECONDS + var/charge_recovery = 30 + var/lose_multiple_charges = TRUE + var/show_charge_as_alpha = TRUE -/obj/item/clothing/suit/armor/vest/ctf/setup_shielding() - AddComponent(/datum/component/shielded, max_charges = 150, recharge_start_delay = 20 SECONDS, charge_increment_delay = 1 SECONDS, charge_recovery = 30, lose_multiple_charges = TRUE, shield_icon = team_shield_icon) +/obj/item/clothing/suit/armor/vest/ctf/equipped(mob/user, slot) + . = ..() + if(!slot || slot & ITEM_SLOT_HANDS) + return + AddComponent(/datum/component/shielded, max_charges = max_charges, recharge_start_delay = recharge_start_delay, charge_increment_delay = charge_increment_delay, \ + charge_recovery = charge_recovery, lose_multiple_charges = lose_multiple_charges, show_charge_as_alpha = show_charge_as_alpha, shield_icon = team_shield_icon) // LIGHT SHIELDED VEST @@ -220,8 +230,7 @@ greyscale_config_worn = /datum/greyscale_config/ctf_light_worn slowdown = -0.25 -/obj/item/clothing/suit/armor/vest/ctf/light/setup_shielding() - AddComponent(/datum/component/shielded, max_charges = 30, recharge_start_delay = 20 SECONDS, charge_increment_delay = 1 SECONDS, charge_recovery = 30, lose_multiple_charges = TRUE, shield_icon = team_shield_icon) + max_charges = 30 // RED TEAM GUNS diff --git a/code/modules/capture_the_flag/ctf_game.dm b/code/modules/capture_the_flag/ctf_game.dm index b9ce443ce47..d9be15db3cc 100644 --- a/code/modules/capture_the_flag/ctf_game.dm +++ b/code/modules/capture_the_flag/ctf_game.dm @@ -240,6 +240,7 @@ desc = "Used for running friendly games of capture the flag." icon = 'icons/obj/device.dmi' icon_state = "syndbeacon" + density = TRUE resistance_flags = INDESTRUCTIBLE var/game_id = CTF_GHOST_CTF_GAME_ID @@ -377,7 +378,7 @@ var/client/new_team_member = user.client team_members |= new_team_member.ckey - to_chat(user, "You are now a member of [src.team]. Get the enemy flag and bring it back to your team's controller!") + to_chat(user, "You are now a member of [src.team]. Get the enemy flag and bring it back to your team's controller!") spawn_team_member(new_team_member) @@ -423,7 +424,8 @@ //there isn't a game going on any more, you are no longer a member of this team (perhaps a new match already started?) chosen_class = ctf_gear[choice] - var/mob/living/carbon/human/M = new /mob/living/carbon/human(get_turf(src)) + var/turf/spawn_point = pick(get_adjacent_open_turfs(get_turf(src))) + var/mob/living/carbon/human/M = new /mob/living/carbon/human(spawn_point) new_team_member.prefs.safe_transfer_prefs_to(M, is_antag = TRUE) if(M.dna.species.outfit_important_for_life) M.set_species(/datum/species/human) @@ -640,6 +642,15 @@ if(controlling.control_points >= controlling.control_points_to_win) controlling.victory() + var/scores + + for(var/obj/machinery/capture_the_flag/team as anything in GLOB.ctf_panel.ctf_machines) + if (!team.ctf_enabled) + continue + scores += UNLINT("[team.team] - [team.control_points]/[team.control_points_to_win]\n") + + balloon_alert_to_viewers(scores) + /obj/machinery/control_point/attackby(mob/user, params) capture(user) @@ -651,14 +662,14 @@ /obj/machinery/control_point/proc/capture(mob/user) if(do_after(user, 30, target = src)) - for(var/obj/machinery/capture_the_flag/CTF as anything in GLOB.ctf_panel.ctf_machines) - if(CTF.ctf_enabled && (user.ckey in CTF.team_members)) - controlling = CTF - icon_state = "dominator-[CTF.team]" + for(var/obj/machinery/capture_the_flag/team as anything in GLOB.ctf_panel.ctf_machines) + if(team.ctf_enabled && (user.ckey in team.team_members)) + controlling = team + icon_state = "dominator-[team.team]" for(var/mob/M in GLOB.player_list) var/area/mob_area = get_area(M) if(istype(mob_area, game_area)) - to_chat(M, span_userdanger("[user.real_name] has captured \the [src], claiming it for [CTF.team]! Go take it back!")) + to_chat(M, "[user.real_name] has captured \the [src], claiming it for [team.team]! Go take it back!") break /proc/is_ctf_target(atom/target) diff --git a/tgui/packages/tgui-panel/styles/goon/chat-dark.scss b/tgui/packages/tgui-panel/styles/goon/chat-dark.scss index 2e1e100b53c..b32181b8e13 100644 --- a/tgui/packages/tgui-panel/styles/goon/chat-dark.scss +++ b/tgui/packages/tgui-panel/styles/goon/chat-dark.scss @@ -371,19 +371,19 @@ em { } .redteamradio { - color: #ff4444; + color: #ff4444 !important; } .blueteamradio { - color: #3434fd; + color: #3434fd !important; } .greenteamradio { - color: #34fd34; + color: #34fd34 !important; } .yellowteamradio { - color: #fdfd34; + color: #fdfd34 !important; } .yell { diff --git a/tgui/packages/tgui-panel/styles/goon/chat-light.scss b/tgui/packages/tgui-panel/styles/goon/chat-light.scss index f29871ab9d5..44fbdc37411 100644 --- a/tgui/packages/tgui-panel/styles/goon/chat-light.scss +++ b/tgui/packages/tgui-panel/styles/goon/chat-light.scss @@ -388,19 +388,19 @@ em { } .redteamradio { - color: #ff0000; + color: #ff0000 !important; } .blueteamradio { - color: #0000ff; + color: #0000ff !important; } .greenteamradio { - color: #00ff00; + color: #00ff00 !important; } .yellowteamradio { - color: #d1ba22; + color: #d1ba22 !important; } .yell {