1cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich/*
2cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichCopyright (C) 1996-1997 Id Software, Inc.
3cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
4cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichThis program is free software; you can redistribute it and/or
5cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichmodify it under the terms of the GNU General Public License
6cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichas published by the Free Software Foundation; either version 2
7cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichof the License, or (at your option) any later version.
8cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
9cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichThis program is distributed in the hope that it will be useful,
10cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichbut WITHOUT ANY WARRANTY; without even the implied warranty of
11cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
13cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichSee the GNU General Public License for more details.
14cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
15cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichYou should have received a copy of the GNU General Public License
16cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichalong with this program; if not, write to the Free Software
17cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
19cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich*/
209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// screen.c -- master for refresh, status bar, console, chat, notify, etc
229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#include "quakedef.h"
249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreambackground clear
289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamrendering
299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamturtle/net/ram icons
309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamsbar
319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamcenterprint / slow centerprint
329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamnotify lines
339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamintermission / finale overlay
349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamloading plaque
359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamconsole
369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreammenu
379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamrequired background clears
399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamrequired update regions
409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamsyncronous draw mode or async
439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamOne off screen buffer, with updates either copied or xblited
449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamNeed to double buffer?
459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamasync draw will require the refresh area to be cleared, because it will be
489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamxblited, but sync draw can just ignore it.
499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamsync
519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamdraw
529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamCenterPrint ()
549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSlowPrint ()
559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamScreen_Update ();
569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamCon_Printf ();
579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
58cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichnet
599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamturn off messages option
609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamthe refresh is allways rendered, unless the console is full screen
629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamconsole is:
659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	notify lines
669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	half
679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	full
68cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/
719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint			glx, gly, glwidth, glheight;
749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
75cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// only the refresh window will be updated unless these variables are flagged
769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint			scr_copytop;
779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint			scr_copyeverything;
789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamfloat		scr_con_current;
809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamfloat		scr_conlines;		// lines of console to display
819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamfloat		oldscreensize, oldfov;
83cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichcvar_t          scr_viewsize = CVAR3("viewsize","100", true);
84cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichcvar_t          scr_fov = CVAR2("fov","90"); // 10 - 170
85cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichcvar_t          scr_conspeed = CVAR2("scr_conspeed","300");
86cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichcvar_t          scr_centertime = CVAR2("scr_centertime","2");
87cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichcvar_t          scr_showram = CVAR2("showram","1");
88cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichcvar_t          scr_showturtle = CVAR2("showturtle","0");
89cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichcvar_t          scr_showpause = CVAR2("showpause","1");
90cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichcvar_t          scr_printspeed = CVAR2("scr_printspeed","8");
91cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichcvar_t			scr_allowsnap = CVAR2("scr_allowsnap", "1");
92cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichcvar_t			gl_triplebuffer = CVAR3("gl_triplebuffer", "1", true );
939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	crosshair;
949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqboolean	scr_initialized;		// ready to draw
969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqpic_t		*scr_ram;
989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqpic_t		*scr_net;
999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqpic_t		*scr_turtle;
1009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint			scr_fullupdate;
1029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint			clearconsole;
1049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint			clearnotify;
1059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
106cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// int			sb_lines;
1079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamviddef_t	vid;				// global video state
1099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvrect_t		scr_vrect;
1119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqboolean	scr_disabled_for_loading;
1139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqboolean	scr_drawloading;
1149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamfloat		scr_disabled_time;
1159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqboolean	block_drawing;
1179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid SCR_ScreenShot_f (void);
1199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
1219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream===============================================================================
1229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamCENTER PRINTING
1249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream===============================================================================
1269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/
1279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamchar		scr_centerstring[1024];
1299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamfloat		scr_centertime_start;	// for slow victory printing
1309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamfloat		scr_centertime_off;
1319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint			scr_center_lines;
1329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint			scr_erase_lines;
1339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint			scr_erase_center;
1349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
1369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream==============
1379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSCR_CenterPrint
1389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamCalled for important messages that should stay in the center of the screen
1409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamfor a few moments
1419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream==============
1429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/
1439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid SCR_CenterPrint (char *str)
1449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
1459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	strncpy (scr_centerstring, str, sizeof(scr_centerstring)-1);
1469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_centertime_off = scr_centertime.value;
1479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_centertime_start = cl.time;
1489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// count the number of lines for centering
1509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_center_lines = 1;
1519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	while (*str)
1529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	{
1539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		if (*str == '\n')
1549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream			scr_center_lines++;
1559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		str++;
1569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	}
1579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}
1589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid SCR_DrawCenterString (void)
1619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
1629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	char	*start;
1639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int		l;
1649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int		j;
1659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int		x, y;
1669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int		remaining;
1679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// the finale prints the characters one at a time
1699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (cl.intermission)
170cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich		remaining = (int) (scr_printspeed.value * (cl.time - scr_centertime_start));
1719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	else
1729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		remaining = 9999;
1739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_erase_center = 0;
1759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	start = scr_centerstring;
1769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (scr_center_lines <= 4)
178cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich		y = (int)(vid.height*0.35);
1799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	else
1809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		y = 48;
1819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
182cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	do
1839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	{
1849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	// scan the width of the line
1859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		for (l=0 ; l<40 ; l++)
1869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream			if (start[l] == '\n' || !start[l])
1879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream				break;
1889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		x = (vid.width - l*8)/2;
1899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		for (j=0 ; j<l ; j++, x+=8)
1909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		{
191cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich			Draw_Character (x, y, start[j]);
1929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream			if (!remaining--)
1939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream				return;
1949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		}
195cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
1969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		y += 8;
1979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		while (*start && *start != '\n')
1999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream			start++;
2009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		if (!*start)
2029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream			break;
2039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		start++;		// skip the \n
2049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	} while (1);
2059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}
2069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid SCR_CheckDrawCenterString (void)
2089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
2099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_copytop = 1;
2109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (scr_center_lines > scr_erase_lines)
2119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		scr_erase_lines = scr_center_lines;
2129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_centertime_off -= host_frametime;
214cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
2159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (scr_centertime_off <= 0 && !cl.intermission)
2169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		return;
2179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (key_dest != key_game)
2189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		return;
2199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	SCR_DrawCenterString ();
2219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}
2229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//=============================================================================
2249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
2269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream====================
2279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamCalcFov
2289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream====================
2299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/
2309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamfloat CalcFov (float fov_x, float width, float height)
2319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
2329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream        float   a;
2339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream        float   x;
2349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream        if (fov_x < 1 || fov_x > 179)
2369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                Sys_Error ("Bad fov: %f", fov_x);
2379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream        x = width/tan(fov_x/360*M_PI);
2399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream        a = atan (height/x);
2419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream        a = a*360/M_PI;
2439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream        return a;
2459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}
2469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
2489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream=================
2499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSCR_CalcRefdef
2509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamMust be called whenever vid changes
2529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamInternal use only
2539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream=================
2549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/
2559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamstatic void SCR_CalcRefdef (void)
2569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
2579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	vrect_t		vrect;
2589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float		size;
2599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int		h;
2609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	qboolean		full = false;
2619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_fullupdate = 0;		// force a background redraw
2649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	vid.recalc_refdef = 0;
2659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// force the status bar to redraw
2679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	Sbar_Changed ();
2689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//========================================
270cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
2719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// bound viewsize
2729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (scr_viewsize.value < 30)
2739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		Cvar_Set ("viewsize","30");
2749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (scr_viewsize.value > 120)
2759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		Cvar_Set ("viewsize","120");
2769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// bound field of view
2789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (scr_fov.value < 10)
2799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		Cvar_Set ("fov","10");
2809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (scr_fov.value > 170)
2819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		Cvar_Set ("fov","170");
2829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
283cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// intermission is always full screen
2849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (cl.intermission)
2859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		size = 120;
2869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	else
2879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		size = scr_viewsize.value;
2889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (size >= 120)
2909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		sb_lines = 0;		// no status bar at all
2919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	else if (size >= 110)
2929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		sb_lines = 24;		// no inventory
2939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	else
2949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		sb_lines = 24+16+8;
2959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (scr_viewsize.value >= 100.0) {
2979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		full = true;
2989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		size = 100.0;
2999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	} else
3009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		size = scr_viewsize.value;
3019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (cl.intermission)
3029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	{
3039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		full = true;
3049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		size = 100;
3059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		sb_lines = 0;
3069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	}
3079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	size /= 100.0;
3089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	h = vid.height - sb_lines;
3109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
311cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	r_refdef.vrect.width = (int) (vid.width * size);
3129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (r_refdef.vrect.width < 96)
3139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	{
3149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		size = 96.0 / r_refdef.vrect.width;
3159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		r_refdef.vrect.width = 96;	// min for icons
3169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	}
3179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
318cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	r_refdef.vrect.height = (int)(vid.height * size);
319cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	if ((int)(r_refdef.vrect.height) > (int)(vid.height - sb_lines))
3209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		r_refdef.vrect.height = vid.height - sb_lines;
321cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	if ((int)(r_refdef.vrect.height) > (int)(vid.height))
3229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream			r_refdef.vrect.height = vid.height;
3239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	r_refdef.vrect.x = (vid.width - r_refdef.vrect.width)/2;
3249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (full)
3259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		r_refdef.vrect.y = 0;
326cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	else
3279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		r_refdef.vrect.y = (h - r_refdef.vrect.height)/2;
3289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	r_refdef.fov_x = scr_fov.value;
3309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	r_refdef.fov_y = CalcFov (r_refdef.fov_x, r_refdef.vrect.width, r_refdef.vrect.height);
3319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_vrect = r_refdef.vrect;
3339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}
3349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
3379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream=================
3389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSCR_SizeUp_f
3399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamKeybinding command
3419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream=================
3429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/
3439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid SCR_SizeUp_f (void)
3449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
3459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	Cvar_SetValue ("viewsize",scr_viewsize.value+10);
3469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	vid.recalc_refdef = 1;
3479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}
3489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
3519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream=================
3529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSCR_SizeDown_f
3539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamKeybinding command
3559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream=================
3569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/
3579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid SCR_SizeDown_f (void)
3589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
3599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	Cvar_SetValue ("viewsize",scr_viewsize.value-10);
3609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	vid.recalc_refdef = 1;
3619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}
3629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//============================================================================
3649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
3669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream==================
3679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSCR_Init
3689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream==================
3699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/
3709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid SCR_Init (void)
3719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
3729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	Cvar_RegisterVariable (&scr_fov);
3749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	Cvar_RegisterVariable (&scr_viewsize);
3759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	Cvar_RegisterVariable (&scr_conspeed);
3769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	Cvar_RegisterVariable (&scr_showram);
3779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	Cvar_RegisterVariable (&scr_showturtle);
3789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	Cvar_RegisterVariable (&scr_showpause);
3799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	Cvar_RegisterVariable (&scr_centertime);
3809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	Cvar_RegisterVariable (&scr_printspeed);
3819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	Cvar_RegisterVariable (&gl_triplebuffer);
3829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
3849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// register our commands
3859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
3869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	Cmd_AddCommand ("screenshot",SCR_ScreenShot_f);
3879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	Cmd_AddCommand ("sizeup",SCR_SizeUp_f);
3889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	Cmd_AddCommand ("sizedown",SCR_SizeDown_f);
3899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_ram = Draw_PicFromWad ("ram");
3919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_net = Draw_PicFromWad ("net");
3929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_turtle = Draw_PicFromWad ("turtle");
3939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_initialized = true;
3959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}
3969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
4009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream==============
4019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSCR_DrawRam
4029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream==============
4039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/
4049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid SCR_DrawRam (void)
4059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
4069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (!scr_showram.value)
4079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		return;
4089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (!r_cache_thrash)
4109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		return;
4119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	Draw_Pic (scr_vrect.x+32, scr_vrect.y, scr_ram);
4139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}
4149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
4169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream==============
4179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSCR_DrawTurtle
4189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream==============
4199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/
4209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid SCR_DrawTurtle (void)
4219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
4229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	static int	count;
423cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
4249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (!scr_showturtle.value)
4259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		return;
4269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (host_frametime < 0.1)
4289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	{
4299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		count = 0;
4309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		return;
4319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	}
4329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	count++;
4349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (count < 3)
4359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		return;
4369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	Draw_Pic (scr_vrect.x, scr_vrect.y, scr_turtle);
4389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}
4399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
4419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream==============
4429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSCR_DrawNet
4439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream==============
4449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/
4459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid SCR_DrawNet (void)
4469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
4479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (realtime - cl.last_received_message < 0.3)
4489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		return;
4499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (cls.demoplayback)
4509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		return;
4519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	Draw_Pic (scr_vrect.x+64, scr_vrect.y, scr_net);
4539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}
4549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
4569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream==============
4579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDrawPause
4589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream==============
4599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/
4609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid SCR_DrawPause (void)
4619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
4629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	qpic_t	*pic;
4639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (!scr_showpause.value)		// turn off for screenshots
4659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		return;
4669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (!cl.paused)
4689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		return;
4699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	pic = Draw_CachePic ("gfx/pause.lmp");
471cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	Draw_Pic ( (vid.width - pic->width)/2,
4729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		(vid.height - 48 - pic->height)/2, pic);
4739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}
4749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
4789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream==============
4799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSCR_DrawLoading
4809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream==============
4819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/
4829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid SCR_DrawLoading (void)
4839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
4849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	qpic_t	*pic;
4859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (!scr_drawloading)
4879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		return;
488cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
4899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	pic = Draw_CachePic ("gfx/loading.lmp");
490cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	Draw_Pic ( (vid.width - pic->width)/2,
4919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		(vid.height - 48 - pic->height)/2, pic);
4929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}
4939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//=============================================================================
4979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
5009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream==================
5019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSCR_SetUpToDrawConsole
5029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream==================
5039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/
5049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid SCR_SetUpToDrawConsole (void)
5059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
5069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	Con_CheckResize ();
507cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
5089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (scr_drawloading)
5099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		return;		// never a console with loading plaque
510cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
5119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// decide on the height of the console
5129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	con_forcedup = !cl.worldmodel || cls.signon != SIGNONS;
5139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (con_forcedup)
5159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	{
5169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		scr_conlines = vid.height;		// full screen
5179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		scr_con_current = scr_conlines;
5189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	}
5199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	else if (key_dest == key_console)
5209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		scr_conlines = vid.height/2;	// half screen
5219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	else
5229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		scr_conlines = 0;				// none visible
523cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
5249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (scr_conlines < scr_con_current)
5259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	{
5269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		scr_con_current -= scr_conspeed.value*host_frametime;
5279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		if (scr_conlines > scr_con_current)
5289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream			scr_con_current = scr_conlines;
5299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	}
5319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	else if (scr_conlines > scr_con_current)
5329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	{
5339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		scr_con_current += scr_conspeed.value*host_frametime;
5349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		if (scr_conlines < scr_con_current)
5359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream			scr_con_current = scr_conlines;
5369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	}
5379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (clearconsole++ < vid.numpages)
5399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	{
5409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		Sbar_Changed ();
5419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	}
5429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	else if (clearnotify++ < vid.numpages)
5439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	{
5449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	}
5459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	else
5469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		con_notifylines = 0;
5479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}
548cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
5499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
5509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream==================
5519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSCR_DrawConsole
5529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream==================
5539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/
5549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid SCR_DrawConsole (void)
5559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
5569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (scr_con_current)
5579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	{
5589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		scr_copyeverything = 1;
559cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich		Con_DrawConsole ((int) scr_con_current, true);
5609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		clearconsole = 0;
5619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	}
5629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	else
5639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	{
5649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		if (key_dest == key_game || key_dest == key_message)
5659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream			Con_DrawNotify ();	// only draw notify in game
5669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	}
5679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}
5689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
570cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich/*
571cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich==============================================================================
572cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
573cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich						SCREEN SHOTS
574cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
575cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich==============================================================================
576cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich*/
5779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct _TargaHeader {
5799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	unsigned char 	id_length, colormap_type, image_type;
5809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	unsigned short	colormap_index, colormap_length;
5819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	unsigned char	colormap_size;
5829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	unsigned short	x_origin, y_origin, width, height;
5839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	unsigned char	pixel_size, attributes;
5849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} TargaHeader;
5859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
587cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich/*
588cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich==================
5899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSCR_ScreenShot_f
590cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich==================
591cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich*/
592cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid SCR_ScreenShot_f (void)
5939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
5949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	byte		*buffer;
595cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	char		pcxname[80];
5969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	char		checkname[MAX_OSPATH];
5979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			i, c, temp;
598cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
599cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// find a file name to save it to
600cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
6019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	strcpy(pcxname,"quake00.tga");
602cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
603cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	for (i=0 ; i<=99 ; i++)
604cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	{
605cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich		pcxname[5] = i/10 + '0';
606cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich		pcxname[6] = i%10 + '0';
6079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		sprintf (checkname, "%s/%s", com_gamedir, pcxname);
6089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		if (Sys_FileTime(checkname) == -1)
6099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream			break;	// file doesn't exist
610cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	}
611cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	if (i==100)
6129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	{
613cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich		Con_Printf ("SCR_ScreenShot_f: Couldn't create a PCX file\n");
6149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		return;
6159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 	}
6169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
618cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	buffer = (byte*) malloc(glwidth*glheight*3 + 18);
6199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	memset (buffer, 0, 18);
6209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	buffer[2] = 2;		// uncompressed type
6219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	buffer[12] = glwidth&255;
6229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	buffer[13] = glwidth>>8;
6239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	buffer[14] = glheight&255;
6249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	buffer[15] = glheight>>8;
6259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	buffer[16] = 24;	// pixel size
6269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
627cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	glReadPixels (glx, gly, glwidth, glheight, GL_RGB, GL_UNSIGNED_BYTE, buffer+18 );
6289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	// swap rgb to bgr
6309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	c = 18+glwidth*glheight*3;
6319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	for (i=18 ; i<c ; i+=3)
6329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	{
6339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		temp = buffer[i];
6349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		buffer[i] = buffer[i+2];
6359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		buffer[i+2] = temp;
6369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	}
6379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	COM_WriteFile (pcxname, buffer, glwidth*glheight*3 + 18 );
6389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	free (buffer);
6409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	Con_Printf ("Wrote %s\n", pcxname);
641cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich}
6429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//=============================================================================
6459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
6489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream===============
6499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSCR_BeginLoadingPlaque
6509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================
6529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/
6539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid SCR_BeginLoadingPlaque (void)
6549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
6559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	S_StopAllSounds (true);
6569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (cls.state != ca_connected)
6589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		return;
6599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (cls.signon != SIGNONS)
6609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		return;
661cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
6629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// redraw with no console and the loading plaque
6639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	Con_ClearNotify ();
6649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_centertime_off = 0;
6659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_con_current = 0;
6669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_drawloading = true;
6689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_fullupdate = 0;
6699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	Sbar_Changed ();
6709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	SCR_UpdateScreen ();
6719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_drawloading = false;
6729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_disabled_for_loading = true;
6749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_disabled_time = realtime;
6759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_fullupdate = 0;
6769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}
6779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
6799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream===============
6809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSCR_EndLoadingPlaque
6819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================
6839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/
6849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid SCR_EndLoadingPlaque (void)
6859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
6869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_disabled_for_loading = false;
6879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_fullupdate = 0;
6889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	Con_ClearNotify ();
6899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}
6909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//=============================================================================
6929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
693cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichconst char	*scr_notifystring;
6949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqboolean	scr_drawdialog;
6959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid SCR_DrawNotifyString (void)
6979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
698cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	const char	*start;
6999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int		l;
7009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int		j;
7019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int		x, y;
7029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	start = scr_notifystring;
7049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
705cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	y = (int)(vid.height*0.35);
7069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
707cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	do
7089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	{
7099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	// scan the width of the line
7109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		for (l=0 ; l<40 ; l++)
7119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream			if (start[l] == '\n' || !start[l])
7129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream				break;
7139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		x = (vid.width - l*8)/2;
7149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		for (j=0 ; j<l ; j++, x+=8)
715cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich			Draw_Character (x, y, start[j]);
716cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
7179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		y += 8;
7189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		while (*start && *start != '\n')
7209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream			start++;
7219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		if (!*start)
7239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream			break;
7249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		start++;		// skip the \n
7259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	} while (1);
7269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}
7279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
7299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream==================
7309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSCR_ModalMessage
7319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDisplays a text string in the center of the screen and waits for a Y or N
733cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichkeypress.
7349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream==================
7359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/
736cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichint SCR_ModalMessage (const char *text)
7379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
7389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (cls.state == ca_dedicated)
7399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		return true;
7409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
741cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#if 1
742cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	// On Android we can't do modal key events, so just say "yes"
743cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	return 1;
744cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#else
7459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_notifystring = text;
746cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
7479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// draw a fresh screen
7489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_fullupdate = 0;
7499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_drawdialog = true;
7509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	SCR_UpdateScreen ();
7519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_drawdialog = false;
752cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
7539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	S_ClearBuffer ();		// so dma doesn't loop current sound
7549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	do
7569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	{
7579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		key_count = -1;		// wait for a key down and up
7589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		Sys_SendKeyEvents ();
7599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	} while (key_lastpress != 'y' && key_lastpress != 'n' && key_lastpress != K_ESCAPE);
7609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_fullupdate = 0;
7629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	SCR_UpdateScreen ();
7639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	return key_lastpress == 'y';
765cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif
7669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}
7679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//=============================================================================
7709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
7729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream===============
7739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSCR_BringDownConsole
7749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamBrings the console down and fades the palettes back to normal
7769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================
7779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/
7789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid SCR_BringDownConsole (void)
7799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
7809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int		i;
781cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
7829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_centertime_off = 0;
783cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
7849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	for (i=0 ; i<20 && scr_conlines != scr_con_current ; i++)
7859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		SCR_UpdateScreen ();
7869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	cl.cshifts[0].percent = 0;		// no area contents palette on next frame
7889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	VID_SetPalette (host_basepal);
7899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}
7909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid SCR_TileClear (void)
7929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
7939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (r_refdef.vrect.x > 0) {
7949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		// left
7959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		Draw_TileClear (0, 0, r_refdef.vrect.x, vid.height - sb_lines);
7969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		// right
797cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich		Draw_TileClear (r_refdef.vrect.x + r_refdef.vrect.width, 0,
798cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich			vid.width - r_refdef.vrect.x + r_refdef.vrect.width,
7999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream			vid.height - sb_lines);
8009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	}
8019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (r_refdef.vrect.y > 0) {
8029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		// top
803cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich		Draw_TileClear (r_refdef.vrect.x, 0,
804cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich			r_refdef.vrect.x + r_refdef.vrect.width,
8059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream			r_refdef.vrect.y);
8069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		// bottom
8079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		Draw_TileClear (r_refdef.vrect.x,
808cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich			r_refdef.vrect.y + r_refdef.vrect.height,
809cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich			r_refdef.vrect.width,
810cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich			vid.height - sb_lines -
8119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream			(r_refdef.vrect.height + r_refdef.vrect.y));
8129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	}
8139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}
8149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
8169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream==================
8179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSCR_UpdateScreen
8189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamThis is called every frame, and can also be called explicitly to flush
8209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtext to the screen.
8219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamWARNING: be very careful calling this from elsewhere, because the refresh
8239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamneeds almost the entire 256k of stack space!
8249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream==================
8259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/
8269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid SCR_UpdateScreen (void)
8279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
8289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	static float	oldscr_viewsize;
8299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	vrect_t		vrect;
8309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (block_drawing)
8329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		return;
8339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
834cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	vid.numpages = (int)(2 + gl_triplebuffer.value);
8359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_copytop = 0;
8379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	scr_copyeverything = 0;
8389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (scr_disabled_for_loading)
8409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	{
8419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		if (realtime - scr_disabled_time > 60)
8429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		{
8439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream			scr_disabled_for_loading = false;
8449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream			Con_Printf ("load failed.\n");
8459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		}
8469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		else
8479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream			return;
8489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	}
8499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (!scr_initialized || !con_initialized)
8519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		return;				// not initialized yet
8529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	GL_BeginRendering (&glx, &gly, &glwidth, &glheight);
855cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
8569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	//
8579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	// determine size of refresh window
8589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	//
8599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (oldfov != scr_fov.value)
860cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	{
8619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		oldfov = scr_fov.value;
8629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		vid.recalc_refdef = true;
8639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	}
8649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (oldscreensize != scr_viewsize.value)
8669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	{
8679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		oldscreensize = scr_viewsize.value;
8689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		vid.recalc_refdef = true;
8699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	}
8709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (vid.recalc_refdef)
8729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		SCR_CalcRefdef ();
8739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
8759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// do 3D refresh drawing, and then update the screen
8769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
8779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	SCR_SetUpToDrawConsole ();
878cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
8799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	V_RenderView ();
8809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	GL_Set2D ();
8829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	//
8849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	// draw any areas not covered by the refresh
8859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	//
8869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	SCR_TileClear ();
8879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	if (scr_drawdialog)
8899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	{
8909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		Sbar_Draw ();
8919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		Draw_FadeScreen ();
8929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		SCR_DrawNotifyString ();
8939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		scr_copyeverything = true;
8949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	}
8959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	else if (scr_drawloading)
8969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	{
8979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		SCR_DrawLoading ();
8989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		Sbar_Draw ();
8999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	}
9009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	else if (cl.intermission == 1 && key_dest == key_game)
9019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	{
9029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		Sbar_IntermissionOverlay ();
9039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	}
9049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	else if (cl.intermission == 2 && key_dest == key_game)
9059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	{
9069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		Sbar_FinaleOverlay ();
9079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		SCR_CheckDrawCenterString ();
9089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	}
9099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	else
9109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	{
9119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		if (crosshair.value)
9129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream			Draw_Character (scr_vrect.x + scr_vrect.width/2, scr_vrect.y + scr_vrect.height/2, '+');
913cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
9149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		SCR_DrawRam ();
9159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		SCR_DrawNet ();
9169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		SCR_DrawTurtle ();
9179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		SCR_DrawPause ();
9189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		SCR_CheckDrawCenterString ();
9199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		Sbar_Draw ();
920cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich		SCR_DrawConsole ();
9219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream		M_Draw ();
9229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	}
9239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
9249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	V_UpdatePalette ();
9259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
9269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	GL_EndRendering ();
9279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}
928