player hud stays post roundstart, has more info (#90632)

## About The Pull Request

Once the round starts, the TV's text shows the current map, how much
time it is in-game, how many players are connected, and what the
overflow job is (if the station trait is on). video as demonstration but
the overflow text has changed to "[job] overflow" instead of "Overflow
job: [job]"


https://github.com/user-attachments/assets/fe74b28b-06de-4827-9c4d-ca2e51f1e0b9

Closes https://github.com/tgstation/tgstation/issues/90651

## Why It's Good For The Game

Gives useful info on the TV instead of having it just magically
disappear (which currently doesn't work cause I forgot to deactivate it
on initialize for latejoiners) which will become more useful if the stat
panel is removed. Also makes overflow job more obvious, the TV is just a
good place to put info useful for new players though round time
personally was just put there to make the TV feel more full.

Wanted to put this in the original PR but wanted to try to match parity
to the stat panel in case this wasn't wanted.

## Changelog

🆑
qol: The TV on the title screen has round info once the round has
started or ended.
fix: The TV now fits on non-widescreen screens.
/🆑
This commit is contained in:
John Willard
2025-04-20 21:02:04 -04:00
committed by Shadow-Quill
parent 1cec9c60d1
commit 8a5a490aea
3 changed files with 42 additions and 50 deletions
+35 -49
View File
@@ -679,25 +679,20 @@
///Lobby screen that appears before the game has started showing how many players there are and who is ready.
/atom/movable/screen/lobby/new_player_info
name = "New Player Info"
screen_loc = "TOP:-20,CENTER:192"
screen_loc = "EAST-3,CENTER:140"
icon = 'icons/hud/lobby/newplayer.dmi'
icon_state = null //we only show up when we get update appearance called, cause we need our overlay to not look bad.
base_icon_state = "newplayer"
maptext_height = 70
maptext_height = 75
maptext_width = 80
maptext_x = OVERLAY_X_DIFF
maptext_y = OVERLAY_Y_DIFF
///Boolean on whether or not we should have our static overlay, so we 'turn' the TV off when collapsing.
var/show_static = TRUE
/atom/movable/screen/lobby/new_player_info/Initialize(mapload, datum/hud/hud_owner)
. = ..()
switch(SSticker.current_state)
if(GAME_STATE_PREGAME, GAME_STATE_STARTUP)
RegisterSignal(SSticker, COMSIG_TICKER_ENTER_SETTING_UP, PROC_REF(hide_info))
if(GAME_STATE_SETTING_UP)
RegisterSignal(SSticker, COMSIG_TICKER_ERROR_SETTING_UP, PROC_REF(show_info))
START_PROCESSING(SSnewplayer_info, src)
update_text()
update_appearance(UPDATE_ICON)
@@ -706,26 +701,22 @@
STOP_PROCESSING(SSnewplayer_info, src)
return ..()
/atom/movable/screen/lobby/new_player_info/update_overlays()
. = ..()
if(!always_available)
return .
. += mutable_appearance(icon, "[base_icon_state]_overlay", layer = src.layer+0.03)
if(show_static)
. += mutable_appearance(icon, "static_base", alpha = 20, layer = src.layer+0.01)
//we have this in a separate file because `generate_icon_alpha_mask` puts lighting even on non-existent pixels,
//giving the icon a weird background color.
var/mutable_appearance/scanline = mutable_appearance(generate_icon_alpha_mask('icons/hud/lobby/newplayer_scanline.dmi', "scanline"), alpha = 20, layer = src.layer+0.02)
scanline.pixel_y = OVERLAY_X_DIFF
scanline.pixel_x = OVERLAY_Y_DIFF
. += scanline
/atom/movable/screen/lobby/new_player_info/update_icon_state()
. = ..()
if(!always_available)
icon_state = "[base_icon_state]_disabled"
else
icon_state = base_icon_state
icon_state = base_icon_state
/atom/movable/screen/lobby/new_player_info/update_overlays()
. = ..()
. += mutable_appearance(icon, "[base_icon_state]_overlay", layer = src.layer+0.03)
if(!show_static)
return .
. += mutable_appearance(icon, "static_base", alpha = 20, layer = src.layer+0.01)
//we have this in a separate file because `generate_icon_alpha_mask` puts lighting even on non-existent pixels,
//giving the icon a weird background color.
var/mutable_appearance/scanline = mutable_appearance(generate_icon_alpha_mask('icons/hud/lobby/newplayer_scanline.dmi', "scanline"), alpha = 20, layer = src.layer+0.02)
scanline.pixel_y = OVERLAY_X_DIFF
scanline.pixel_x = OVERLAY_Y_DIFF
. += scanline
/atom/movable/screen/lobby/new_player_info/process(seconds_per_tick)
update_text()
@@ -744,33 +735,28 @@
update_appearance(UPDATE_ICON)
update_text()
/atom/movable/screen/lobby/new_player_info/proc/hide_info()
SIGNAL_HANDLER
STOP_PROCESSING(SSnewplayer_info, src)
UnregisterSignal(SSticker, COMSIG_TICKER_ENTER_SETTING_UP)
RegisterSignal(SSticker, COMSIG_TICKER_ERROR_SETTING_UP, PROC_REF(show_info))
always_available = FALSE
update_appearance(UPDATE_ICON)
update_text()
/atom/movable/screen/lobby/new_player_info/proc/show_info()
SIGNAL_HANDLER
always_available = TRUE
update_appearance(UPDATE_ICON)
update_text()
START_PROCESSING(SSnewplayer_info, src)
UnregisterSignal(SSticker, COMSIG_TICKER_ERROR_SETTING_UP)
RegisterSignal(SSticker, COMSIG_TICKER_ENTER_SETTING_UP, PROC_REF(hide_info))
/atom/movable/screen/lobby/new_player_info/proc/update_text()
if(!always_available || !hud || !show_static)
if(!hud || !show_static)
maptext = null
return
var/new_maptext
if(!MC_RUNNING())
new_maptext = "<span style='text-align: center; vertical-align: middle'>Loading...</span>"
maptext = MAPTEXT("<span style='text-align: center; vertical-align: middle'>Loading...</span>")
return
if(SSticker.IsPostgame())
maptext = MAPTEXT("<span style='text-align: center; vertical-align: middle'>Game ended, <br /> \
restart soon</span>")
return
var/new_maptext
var/round_started = SSticker.HasRoundStarted()
if(round_started)
new_maptext = "<span style='text-align: center; vertical-align: middle'>[SSmapping.current_map.map_name]<br /> \
[LAZYLEN(GLOB.clients)] player\s online<br /> \
[ROUND_TIME()] in<br />"
var/datum/station_trait/overflow_job_bureaucracy/overflow = locate() in SSstation.station_traits
if(overflow)
new_maptext += "[overflow.chosen_job_name] overflow"
new_maptext += "</span>"
else
var/time_remaining = SSticker.GetTimeLeft()
if(time_remaining > 0)
@@ -2,4 +2,4 @@ PROCESSING_SUBSYSTEM_DEF(newplayer_info)
name = "New Player Info"
flags = SS_NO_INIT | SS_BACKGROUND
wait = 1 SECONDS
runlevels = RUNLEVEL_LOBBY|RUNLEVEL_SETUP
runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT
+6
View File
@@ -546,12 +546,18 @@ SUBSYSTEM_DEF(ticker)
queued_players -= next_in_line
queue_delay = 0
///Whether the game has started, including roundend.
/datum/controller/subsystem/ticker/proc/HasRoundStarted()
return current_state >= GAME_STATE_PLAYING
///Whether the game is currently in progress, excluding roundend
/datum/controller/subsystem/ticker/proc/IsRoundInProgress()
return current_state == GAME_STATE_PLAYING
///Whether the game is currently in progress, excluding roundend
/datum/controller/subsystem/ticker/proc/IsPostgame()
return current_state == GAME_STATE_FINISHED
/datum/controller/subsystem/ticker/Recover()
current_state = SSticker.current_state
force_ending = SSticker.force_ending