# 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 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`.