zscript-doc/api/inter/StatusScreen.md

7.5 KiB

StatusScreen

The base class for intermission status screens. Any status screen used by MAPINFO/GameInfo must be derived from this class.

Status screens have four stages:

  • STATCOUNT, where the stats are counted and displayed.
  • SHOWNEXTLOC, where the next map is shown as "ENTERING (map name)" and in episodic maps, the world map.
  • NOSTATE, at the very end of this process, where the last frame is drawn and the intermission is exited.
  • LEAVINGINTERMISSION, which is used only to signify that all stages are done and the status screen has been exited.

These are provided as constants in StatusScreen. The starting stage is STATCOUNT.

class StatusScreen : Object abstract play
{
	const NG_STATSY;
	const SHOWNEXTLOCDELAY;
	const SP_STATSX;
	const SP_STATSY;
	const SP_TIMEX;
	const SP_TIMEY;
	const TITLEY;

	InterBackground BG;
	WBPlayerStruct  Plrs[MAXPLAYERS];
	WBStartStruct   Wbs;

	int   AccelerateStage;
	int   BCnt;
	int   Cnt;
	int   Cnt_Deaths[MAXPLAYERS];
	int   Cnt_Frags[MAXPLAYERS];
	int   Cnt_Items[MAXPLAYERS];
	int   Cnt_Kills[MAXPLAYERS];
	int   Cnt_Par;
	int   Cnt_Pause;
	int   Cnt_Secret[MAXPLAYERS];
	int   Cnt_Time;
	int   Cnt_Total_Time;
	int   CurState;
	int   DoFrags;
	int   Me;
	int   NG_State;
	bool  NoAutoStartMap;
	bool  PlayerReady[MAXPLAYERS];
	int   Player_Deaths[MAXPLAYERS];
	bool  Snl_PointerOn;
	int   SP_State;
	float ShadowAlpha;
	int   Total_Deaths;
	int   Total_Frags;

	PatchInfo Entering;
	PatchInfo Finished;
	PatchInfo MapName;

	textureid Items;
	textureid Kills;
	textureid P_Secret;
	textureid Par;
	textureid Secret;
	textureid Sucks;
	textureid Timepic;

	string LNameTexts[2];

	int  DrawCharPatch(Font fnt, int charcode, int x, int y, int translation = Font.CR_UNTRANSLATED, bool nomove = false);
	void DrawEL();
	int  DrawLF();
	int  DrawName(int y, textureid tex, string levelname);
	int  DrawNum(Font fnt, int x, int y, int n, int digits, bool leadingzeros = true, int translation = Font.CR_UNTRANSLATED);
	int  DrawPatchText(int y, PatchInfo pinfo, string stringname);
	void DrawPercent(Font fnt, int x, int y, int p, int b, bool show_total = true, int color = Font.CR_UNTRANSLATED);
	void DrawTime(int x, int y, int t, bool no_sucks = false);

	bool AutoSkip();

	virtual void Drawer();
	virtual void End();
	virtual void Start(WBStartStruct wbs_);
	virtual void StartMusic();
	virtual void Ticker();

	protected virtual void DrawNoState();
	protected virtual void DrawShowNextLoc();
	protected virtual void DrawStats();
	protected virtual void InitNoState();
	protected virtual void InitShowNextLoc();
	protected virtual void InitStats();
	protected virtual void UpdateNoState();
	protected virtual void UpdateShowNextLoc();
	protected virtual void UpdateStats();

	protected void CheckForAccelerate();
	protected int  FragSum(int playernum);

	static int, int, int GetPlayerWidths();
	static color GetRowColor(PlayerInfo player, bool highlight);
	static void  GetSortedPlayers(in out array<int> sorted, bool teamplay);
	static void  PlaySound(sound snd);
}

NG_STATSY

TODO

SHOWNEXTLOCDELAY

TODO

SP_STATSX

TODO

SP_STATSY

TODO

SP_TIMEX

TODO

SP_TIMEY

TODO

TITLEY

The Y position (in 320x200 pixels) to draw the top of the "finished" and "entering" texts. Used by DrawEL and DrawLF.

BG

The InterBackground object for this intermission, set by Start with the initial Wbs object.

Plrs

The value of Wbs.Plyr when Start was called. Usually not changed, so essentially equivalent to Wbs.Plyr.

Wbs

The WBStartStruct passed to this class via the Start function.

AccelerateStage

Used to signify to the current stage that it should go quicker or be skipped entirely.

BCnt

TODO

Cnt

TODO

Cnt_Deaths

TODO

Cnt_Frags

TODO

Cnt_Items

TODO

Cnt_Kills

TODO

Cnt_Par

TODO

Cnt_Pause

TODO

Cnt_Secret

TODO

Cnt_Time

TODO

Cnt_Total_Time

TODO

CurState

The current stage the intermission is in.

DoFrags

TODO

Me

The value of Wbs.PNum when Start was called. Usually not changed, so essentially equivalent to Wbs.PNum.

NG_State

TODO

NoAutoStartMap

TODO

PlayerReady

Used in networked games to signify when each player is ready to continue to the next map. Set by CheckForAccelerate.

Player_Deaths

TODO

Snl_PointerOn

TODO

SP_State

Used in single-player status screens during the STATCOUNT stage for indicating the current round of statistics to count up.

ShadowAlpha

TODO

Total_Deaths

TODO

Total_Frags

TODO

Entering

TODO

Finished

TODO

MapName

TODO

Items

The "ITEMS" (default WIOSTI) graphic.

Kills

The "KILLS" (default WIOSTK) graphic.

P_Secret

The "SECRET" (default WISCRT2) graphic.

Par

The "PAR" (default WIPAR) graphic.

Secret

The "SCRT" (default WIOSTS) graphic.

Sucks

The "SUCKS" (default WISUCKS) graphic.

Timepic

The "TIME" (default WITIME) graphic.

LNameTexts

TODO

DrawCharPatch

TODO

DrawEL

TODO

DrawLF

TODO

DrawName

TODO

DrawNum

TODO

DrawPatchText

TODO

DrawPercent

TODO

DrawTime

TODO

AutoSkip

TODO

Drawer

Called by WI_Drawer, which is called every frame when GameState is GS_INTERMISSION.

End

Called when the intermission should end. Default behaviour is to set CurState to LEAVINGINTERMISSION and remove bots in death-match. Generally, Level.WorldDone should be called directly after this.

Start

Called by WI_Start after the WBStartStruct is populated, sounds are stopped and the screen blend is set to black. Sets up initial values and runs InitStats.

StartMusic

Called in the first tick by Ticker to set the intermission music.

Ticker

Called by WI_Ticker, which is called every game tick when GameState is GS_INTERMISSION.

DrawNoState

Called by Drawer when CurState is NOSTATE or any other non-state.

DrawShowNextLoc

Called by Drawer when CurState is SHOWNEXTLOC and, by default, DrawNoState after setting Snl_PointerOn to true.

DrawStats

Called by Drawer directly after drawing the animated background when CurState is STATCOUNT.

InitNoState

Called by UpdateShowNextLoc to initiate the NOSTATE stage.

InitShowNextLoc

Called by UpdateStats to initiate the SHOWNEXTLOC stage.

InitStats

Called by Start to initiate the STATCOUNT stage.

UpdateNoState

Called by Ticker when CurState is NOSTATE or any other non-state. Exits the intermission by calling End and Level.WorldDone when appropriate.

UpdateShowNextLoc

Called by Ticker when CurState is SHOWNEXTLOC. Runs InitNoState when appropriate and alternates Snl_PointerOn.

UpdateStats

Called by Ticker when CurState is STATCOUNT. Runs InitShowNextLoc when appropriate.

CheckForAccelerate

Updates the values of AccelerateStage and PlayerReady according to each player's inputs.

FragSum

Returns the number of frags player playernum has accumulated against all currently in-game players. This is different from WBPlayerStruct.FragCount because it is counted dynamically, i.e. if a player leaves the count will be changed. This is only useful for game modes where frags do not count as score.

GetPlayerWidths

TODO

GetRowColor

TODO

GetSortedPlayers

TODO

PlaySound

Plays a UI sound at full volume using S_Sound.