summaryrefslogtreecommitdiffstats
path: root/src/jake2/client/SCR.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jake2/client/SCR.java')
-rw-r--r--src/jake2/client/SCR.java1322
1 files changed, 1006 insertions, 316 deletions
diff --git a/src/jake2/client/SCR.java b/src/jake2/client/SCR.java
index 9755008..8363f6e 100644
--- a/src/jake2/client/SCR.java
+++ b/src/jake2/client/SCR.java
@@ -2,9 +2,9 @@
* SCR.java
* Copyright (C) 2003
*
- * $Id: SCR.java,v 1.1 2004-07-07 19:58:51 hzi Exp $
+ * $Id: SCR.java,v 1.2 2004-07-08 15:58:42 hzi Exp $
*/
- /*
+/*
Copyright (C) 1997-2001 Id Software, Inc.
This program is free software; you can redistribute it and/or
@@ -24,7 +24,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-
package jake2.client;
import jake2.Globals;
@@ -39,17 +38,15 @@ import java.awt.Dimension;
/**
* SCR
*/
-public final class SCR extends Globals {
+public final class SCR extends Globals
+{
// cl_scrn.c -- master for refresh, status bar, console, chat, notify, etc
-
- static String[][] sb_nums =
- {
- {"num_0", "num_1", "num_2", "num_3", "num_4", "num_5",
- "num_6", "num_7", "num_8", "num_9", "num_minus"},
- {"anum_0", "anum_1", "anum_2", "anum_3", "anum_4", "anum_5",
- "anum_6", "anum_7", "anum_8", "anum_9", "anum_minus"}
- };
+
+ static String[][] sb_nums =
+ { { "num_0", "num_1", "num_2", "num_3", "num_4", "num_5", "num_6", "num_7", "num_8", "num_9", "num_minus" }, {
+ "anum_0", "anum_1", "anum_2", "anum_3", "anum_4", "anum_5", "anum_6", "anum_7", "anum_8", "anum_9", "anum_minus" }
+ };
/*
full screen console
@@ -58,14 +55,14 @@ public final class SCR extends Globals {
blanked background with menu
cinematics
full screen image for quit and victory
-
+
end of unit intermissions
*/
- static float scr_con_current; // aproaches scr_conlines at scr_conspeed
- static float scr_conlines; // 0.0 to 1.0 lines of console to display
+ static float scr_con_current; // aproaches scr_conlines at scr_conspeed
+ static float scr_conlines; // 0.0 to 1.0 lines of console to display
- static boolean scr_initialized; // ready to draw
+ static boolean scr_initialized; // ready to draw
static int scr_draw_loading;
@@ -86,9 +83,11 @@ public final class SCR extends Globals {
static cvar_t scr_graphscale;
static cvar_t scr_graphshift;
static cvar_t scr_drawall;
+ static cvar_t fps;
+ static cvar_t fps_updates;
static dirty_t scr_dirty = new dirty_t();
- static dirty_t[] scr_old_dirty = { new dirty_t(), new dirty_t() };
+ static dirty_t[] scr_old_dirty = { new dirty_t(), new dirty_t()};
static String crosshair_pic;
static int crosshair_width, crosshair_height;
@@ -103,28 +102,28 @@ public final class SCR extends Globals {
/*
===============================================================================
-
+
BAR GRAPHS
-
+
===============================================================================
*/
-
-// typedef struct
-// {
-// float value;
-// int color;
-// } graphsamp_t;
- static class graphsamp_t {
+ // typedef struct
+ // {
+ // float value;
+ // int color;
+ // } graphsamp_t;
+ static class graphsamp_t
+ {
float value;
int color;
}
static int current;
static graphsamp_t[] values = new graphsamp_t[1024];
-
+
static {
- for (int n=0; n < 1024; n++)
- values[n]= new graphsamp_t();
+ for (int n = 0; n < 1024; n++)
+ values[n] = new graphsamp_t();
}
/*
@@ -132,9 +131,10 @@ public final class SCR extends Globals {
SCR_DebugGraph
==============
*/
- public static void DebugGraph(float value, int color) {
- values[current&1023].value = value;
- values[current&1023].color = color;
+ public static void DebugGraph(float value, int color)
+ {
+ values[current & 1023].value = value;
+ values[current & 1023].color = color;
current++;
}
@@ -143,7 +143,8 @@ public final class SCR extends Globals {
SCR_DrawDebugGraph
==============
*/
- static void DrawDebugGraph() {
+ static void DrawDebugGraph()
+ {
int a, x, y, w, i, h;
float v;
int color;
@@ -154,9 +155,10 @@ public final class SCR extends Globals {
x = scr_vrect.x;
y = scr_vrect.y + scr_vrect.height;
- re.DrawFill(x, (int) (y - scr_graphheight.value), w, (int)scr_graphheight.value, 8);
+ re.DrawFill(x, (int) (y - scr_graphheight.value), w, (int) scr_graphheight.value, 8);
- for (a = 0; a < w; a++) {
+ for (a = 0; a < w; a++)
+ {
i = (current - 1 - a + 1024) & 1023;
v = values[i].value;
color = values[i].color;
@@ -164,22 +166,22 @@ public final class SCR extends Globals {
if (v < 0)
v += scr_graphheight.value * (1 + (int) (-v / scr_graphheight.value));
- h = (int)v % (int)scr_graphheight.value;
+ h = (int) v % (int) scr_graphheight.value;
re.DrawFill(x + w - 1 - a, y - h, 1, h, color);
}
}
/*
===============================================================================
-
+
CENTER PRINTING
-
+
===============================================================================
*/
// char scr_centerstring[1024];
static String scr_centerstring;
- static float scr_centertime_start; // for slow victory printing
+ static float scr_centertime_start; // for slow victory printing
static float scr_centertime_off;
static int scr_center_lines;
static int scr_erase_center;
@@ -187,12 +189,13 @@ public final class SCR extends Globals {
/*
==============
SCR_CenterPrint
-
+
Called for important messages that should stay in the center of the screen
for a few moments
==============
*/
- static void CenterPrint(String str) {
+ static void CenterPrint(String str)
+ {
//char *s;
int s;
StringBuffer line = new StringBuffer(64);
@@ -206,7 +209,8 @@ public final class SCR extends Globals {
// count the number of lines for centering
scr_center_lines = 1;
s = 0;
- while (s < str.length()) {
+ while (s < str.length())
+ {
if (str.charAt(s) == '\n')
scr_center_lines++;
s++;
@@ -217,10 +221,11 @@ public final class SCR extends Globals {
"\n\n\35\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\37\n\n");
s = 0;
-
+
if (str.length() != 0)
{
- do {
+ do
+ {
// scan the width of the line
for (l = 0; l < 40 && (l + s) < str.length(); l++)
@@ -228,18 +233,19 @@ public final class SCR extends Globals {
break;
for (i = 0; i < (40 - l) / 2; i++)
line.append(' ');
-
- for (j = 0; j < l; j++) {
+
+ for (j = 0; j < l; j++)
+ {
line.append(str.charAt(s + j));
}
-
+
line.append('\n');
-
+
Com.Printf(line.toString());
-
+
while (s < str.length() && str.charAt(s) != '\n')
s++;
-
+
if (s == str.length())
break;
s++; // skip the \n
@@ -251,8 +257,9 @@ public final class SCR extends Globals {
Console.ClearNotify();
}
- static void DrawCenterString() {
- String cs = scr_centerstring +"\0";
+ static void DrawCenterString()
+ {
+ String cs = scr_centerstring + "\0";
int start;
int l;
int j;
@@ -275,15 +282,16 @@ public final class SCR extends Globals {
else
y = 48;
- do {
+ do
+ {
// scan the width of the line
for (l = 0; l < 40; l++)
-
if (start + l == cs.length() - 1 || cs.charAt(start + l) == '\n')
break;
x = (viddef.width - l * 8) / 2;
SCR.AddDirtyPoint(x, y);
- for (j = 0; j < l; j++, x += 8) {
+ for (j = 0; j < l; j++, x += 8)
+ {
re.DrawChar(x, y, cs.charAt(start + j));
if (remaining == 0)
return;
@@ -306,19 +314,19 @@ public final class SCR extends Globals {
static void CheckDrawCenterString()
{
scr_centertime_off -= cls.frametime;
-
+
if (scr_centertime_off <= 0)
return;
DrawCenterString();
}
-// =============================================================================
+ // =============================================================================
/*
=================
SCR_CalcVrect
-
+
Sets scr_vrect, the coordinates of the rendered window
=================
*/
@@ -328,59 +336,57 @@ public final class SCR extends Globals {
// bound viewsize
if (scr_viewsize.value < 40)
- Cvar.Set ("viewsize","40");
+ Cvar.Set("viewsize", "40");
if (scr_viewsize.value > 100)
- Cvar.Set ("viewsize","100");
+ Cvar.Set("viewsize", "100");
- size = (int)scr_viewsize.value;
+ size = (int) scr_viewsize.value;
- scr_vrect.width = viddef.width*size/100;
+ scr_vrect.width = viddef.width * size / 100;
scr_vrect.width &= ~7;
- scr_vrect.height = viddef.height*size/100;
+ scr_vrect.height = viddef.height * size / 100;
scr_vrect.height &= ~1;
- scr_vrect.x = (viddef.width - scr_vrect.width)/2;
- scr_vrect.y = (viddef.height - scr_vrect.height)/2;
+ scr_vrect.x = (viddef.width - scr_vrect.width) / 2;
+ scr_vrect.y = (viddef.height - scr_vrect.height) / 2;
}
-
/*
=================
SCR_SizeUp_f
-
+
Keybinding command
=================
*/
static void SizeUp_f()
{
- Cvar.SetValue("viewsize",scr_viewsize.value+10);
+ Cvar.SetValue("viewsize", scr_viewsize.value + 10);
}
-
/*
=================
SCR_SizeDown_f
-
+
Keybinding command
=================
*/
static void SizeDown_f()
{
- Cvar.SetValue("viewsize",scr_viewsize.value-10);
+ Cvar.SetValue("viewsize", scr_viewsize.value - 10);
}
/*
=================
SCR_Sky_f
-
+
Set a specific sky and rotation speed
=================
*/
static void Sky_f()
{
- float rotate;
- float[] axis = {0, 0, 0};
+ float rotate;
+ float[] axis = { 0, 0, 0 };
if (Cmd.Argc() < 2)
{
@@ -407,53 +413,66 @@ public final class SCR extends Globals {
re.SetSky(Cmd.Argv(1), rotate, axis);
}
-// ============================================================================
+ // ============================================================================
/*
==================
SCR_Init
==================
*/
- static void Init() {
+ static void Init()
+ {
scr_viewsize = Cvar.Get("viewsize", "100", CVAR_ARCHIVE);
scr_conspeed = Cvar.Get("scr_conspeed", "3", 0);
- scr_showturtle = Cvar.Get ("scr_showturtle", "0", 0);
- scr_showpause = Cvar.Get ("scr_showpause", "1", 0);
- scr_centertime = Cvar.Get ("scr_centertime", "2.5", 0);
- scr_printspeed = Cvar.Get ("scr_printspeed", "8", 0);
- scr_netgraph = Cvar.Get ("netgraph", "1", 0);
- scr_timegraph = Cvar.Get ("timegraph", "1", 0);
- scr_debuggraph = Cvar.Get ("debuggraph", "1", 0);
- scr_graphheight = Cvar.Get ("graphheight", "32", 0);
- scr_graphscale = Cvar.Get ("graphscale", "1", 0);
- scr_graphshift = Cvar.Get ("graphshift", "0", 0);
- scr_drawall = Cvar.Get ("scr_drawall", "1", 0);
+ scr_showturtle = Cvar.Get("scr_showturtle", "0", 0);
+ scr_showpause = Cvar.Get("scr_showpause", "1", 0);
+ scr_centertime = Cvar.Get("scr_centertime", "2.5", 0);
+ scr_printspeed = Cvar.Get("scr_printspeed", "8", 0);
+ scr_netgraph = Cvar.Get("netgraph", "1", 0);
+ scr_timegraph = Cvar.Get("timegraph", "1", 0);
+ scr_debuggraph = Cvar.Get("debuggraph", "1", 0);
+ scr_graphheight = Cvar.Get("graphheight", "32", 0);
+ scr_graphscale = Cvar.Get("graphscale", "1", 0);
+ scr_graphshift = Cvar.Get("graphshift", "0", 0);
+ scr_drawall = Cvar.Get("scr_drawall", "1", 0);
+ fps = Cvar.Get("fps", "0", 0);
+ fps_updates = Cvar.Get("fps_updates", "1", 0);
//
// register our commands
//
- Cmd.AddCommand ("timerefresh", new xcommand_t() {
- public void execute() {
+ Cmd.AddCommand("timerefresh", new xcommand_t()
+ {
+ public void execute()
+ {
TimeRefresh_f();
}
});
- Cmd.AddCommand ("loading", new xcommand_t() {
- public void execute() {
+ Cmd.AddCommand("loading", new xcommand_t()
+ {
+ public void execute()
+ {
Loading_f();
}
});
- Cmd.AddCommand ("sizeup", new xcommand_t() {
- public void execute() {
+ Cmd.AddCommand("sizeup", new xcommand_t()
+ {
+ public void execute()
+ {
SizeUp_f();
}
});
- Cmd.AddCommand ("sizedown", new xcommand_t() {
- public void execute() {
+ Cmd.AddCommand("sizedown", new xcommand_t()
+ {
+ public void execute()
+ {
SizeDown_f();
}
});
- Cmd.AddCommand ("sky", new xcommand_t() {
- public void execute() {
+ Cmd.AddCommand("sky", new xcommand_t()
+ {
+ public void execute()
+ {
Sky_f();
}
});
@@ -461,7 +480,6 @@ public final class SCR extends Globals {
scr_initialized = true;
}
-
/*
==============
SCR_DrawNet
@@ -469,11 +487,10 @@ public final class SCR extends Globals {
*/
static void DrawNet()
{
- if (cls.netchan.outgoing_sequence - cls.netchan.incoming_acknowledged
- < CMD_BACKUP - 1)
+ if (cls.netchan.outgoing_sequence - cls.netchan.incoming_acknowledged < CMD_BACKUP - 1)
return;
- re.DrawPic(scr_vrect.x+64, scr_vrect.y, "net");
+ re.DrawPic(scr_vrect.x + 64, scr_vrect.y, "net");
}
/*
@@ -485,14 +502,14 @@ public final class SCR extends Globals {
{
Dimension dim = new Dimension();
- if (scr_showpause.value == 0) // turn off for screenshots
+ if (scr_showpause.value == 0) // turn off for screenshots
return;
if (cl_paused.value == 0)
return;
- re.DrawGetPicSize (dim, "pause");
- re.DrawPic ((viddef.width - dim.width) / 2, viddef.height / 2 + 8, "pause");
+ re.DrawGetPicSize(dim, "pause");
+ re.DrawPic((viddef.width - dim.width) / 2, viddef.height / 2 + 8, "pause");
}
/*
@@ -503,41 +520,42 @@ public final class SCR extends Globals {
static void DrawLoading()
{
Dimension dim = new Dimension();
-
+
if (scr_draw_loading == 0)
return;
scr_draw_loading = 0;
re.DrawGetPicSize(dim, "loading");
- re.DrawPic ((viddef.width - dim.width)/2, (viddef.height - dim.height)/2, "loading");
+ re.DrawPic((viddef.width - dim.width) / 2, (viddef.height - dim.height) / 2, "loading");
}
-// =============================================================================
+ // =============================================================================
/*
==================
SCR_RunConsole
-
+
Scroll it up or down
==================
*/
- static void RunConsole() {
+ static void RunConsole()
+ {
// decide on the height of the console
if (cls.key_dest == key_console)
- scr_conlines = 0.5f; // half screen
+ scr_conlines = 0.5f; // half screen
else
- scr_conlines = 0; // none visible
-
+ scr_conlines = 0; // none visible
+
if (scr_conlines < scr_con_current)
{
- scr_con_current -= scr_conspeed.value*cls.frametime;
+ scr_con_current -= scr_conspeed.value * cls.frametime;
if (scr_conlines > scr_con_current)
scr_con_current = scr_conlines;
}
else if (scr_conlines > scr_con_current)
{
- scr_con_current += scr_conspeed.value*cls.frametime;
+ scr_con_current += scr_conspeed.value * cls.frametime;
if (scr_conlines < scr_con_current)
scr_con_current = scr_conlines;
}
@@ -551,17 +569,17 @@ public final class SCR extends Globals {
static void DrawConsole()
{
Console.CheckResize();
-
+
if (cls.state == ca_disconnected || cls.state == ca_connecting)
- { // forced full screen console
+ { // forced full screen console
Console.DrawConsole(1.0f);
return;
}
if (cls.state != ca_active || !cl.refresh_prepped)
- { // connected, but can't render
+ { // connected, but can't render
Console.DrawConsole(0.5f);
- re.DrawFill (0, viddef.height/2, viddef.width, viddef.height/2, 0);
+ re.DrawFill(0, viddef.height / 2, viddef.width, viddef.height / 2, 0);
return;
}
@@ -572,33 +590,35 @@ public final class SCR extends Globals {
else
{
if (cls.key_dest == key_game || cls.key_dest == key_message)
- Console.DrawNotify(); // only draw notify in game
+ Console.DrawNotify(); // only draw notify in game
}
}
-// =============================================================================
+ // =============================================================================
/*
================
SCR_BeginLoadingPlaque
================
*/
- public static void BeginLoadingPlaque() {
- S.StopAllSounds ();
+ public static void BeginLoadingPlaque()
+ {
+ S.StopAllSounds();
cl.sound_prepped = false; // don't play ambients
- CDAudio.Stop();
+
if (cls.disable_screen != 0)
return;
if (developer.value != 0)
return;
if (cls.state == ca_disconnected)
- return; // if at console, don't bring up the plaque
+ return; // if at console, don't bring up the plaque
if (cls.key_dest == key_console)
return;
if (cl.cinematictime > 0)
- scr_draw_loading = 2; // clear to balack first
+ scr_draw_loading = 2; // clear to balack first
else
scr_draw_loading = 1;
+
UpdateScreen();
cls.disable_screen = Sys.Milliseconds();
cls.disable_servercount = cl.servercount;
@@ -609,7 +629,8 @@ public final class SCR extends Globals {
SCR_EndLoadingPlaque
================
*/
- public static void EndLoadingPlaque() {
+ public static void EndLoadingPlaque()
+ {
cls.disable_screen = 0;
Console.ClearNotify();
}
@@ -629,7 +650,8 @@ public final class SCR extends Globals {
SCR_TimeRefresh_f
================
*/
- static void TimeRefresh_f() {
+ static void TimeRefresh_f()
+ {
int i;
int start, stop;
float time;
@@ -639,15 +661,20 @@ public final class SCR extends Globals {
start = Sys.Milliseconds();
- if (Cmd.Argc() == 2) { // run without page flipping
+ if (Cmd.Argc() == 2)
+ { // run without page flipping
re.BeginFrame(0);
- for (i = 0; i < 128; i++) {
+ for (i = 0; i < 128; i++)
+ {
cl.refdef.viewangles[1] = i / 128.0f * 360.0f;
re.RenderFrame(cl.refdef);
}
re.EndFrame();
- } else {
- for (i = 0; i < 128; i++) {
+ }
+ else
+ {
+ for (i = 0; i < 128; i++)
+ {
cl.refdef.viewangles[1] = i / 128.0f * 360.0f;
re.BeginFrame(0);
@@ -661,15 +688,16 @@ public final class SCR extends Globals {
Com.Printf("%f seconds (%f fps)\n", new Vargs(2).add(time).add(128.0f / time));
}
- static void DirtyScreen() {
+ static void DirtyScreen()
+ {
AddDirtyPoint(0, 0);
- AddDirtyPoint(viddef.width-1, viddef.height-1);
+ AddDirtyPoint(viddef.width - 1, viddef.height - 1);
}
/*
==============
SCR_TileClear
-
+
Clear any parts of the tiled background that were drawn on last frame
==============
*/
@@ -680,19 +708,19 @@ public final class SCR extends Globals {
dirty_t clear = new dirty_t();
if (scr_drawall.value != 0)
- DirtyScreen (); // for power vr or broken page flippers...
+ DirtyScreen(); // for power vr or broken page flippers...
if (scr_con_current == 1.0f)
- return; // full screen console
+ return; // full screen console
if (scr_viewsize.value == 100)
- return; // full screen rendering
+ return; // full screen rendering
if (cl.cinematictime > 0)
- return; // full screen cinematic
+ return; // full screen cinematic
// erase rect will be the union of the past three frames
// so tripple buffering works properly
clear = scr_dirty;
- for (i=0 ; i<2 ; i++)
+ for (i = 0; i < 2; i++)
{
if (scr_old_dirty[i].x1 < clear.x1)
clear.x1 = scr_old_dirty[i].x1;
@@ -713,55 +741,50 @@ public final class SCR extends Globals {
scr_dirty.y2 = -9999;
// don't bother with anything convered by the console)
- top = (int)(scr_con_current * viddef.height);
+ top = (int) (scr_con_current * viddef.height);
if (top >= clear.y1)
clear.y1 = top;
if (clear.y2 <= clear.y1)
- return; // nothing disturbed
+ return; // nothing disturbed
top = scr_vrect.y;
- bottom = top + scr_vrect.height-1;
+ bottom = top + scr_vrect.height - 1;
left = scr_vrect.x;
- right = left + scr_vrect.width-1;
+ right = left + scr_vrect.width - 1;
if (clear.y1 < top)
- { // clear above view screen
- i = clear.y2 < top-1 ? clear.y2 : top-1;
- re.DrawTileClear (clear.x1 , clear.y1,
- clear.x2 - clear.x1 + 1, i - clear.y1+1, "backtile");
+ { // clear above view screen
+ i = clear.y2 < top - 1 ? clear.y2 : top - 1;
+ re.DrawTileClear(clear.x1, clear.y1, clear.x2 - clear.x1 + 1, i - clear.y1 + 1, "backtile");
clear.y1 = top;
}
if (clear.y2 > bottom)
- { // clear below view screen
- i = clear.y1 > bottom+1 ? clear.y1 : bottom+1;
- re.DrawTileClear (clear.x1, i,
- clear.x2-clear.x1+1, clear.y2-i+1, "backtile");
+ { // clear below view screen
+ i = clear.y1 > bottom + 1 ? clear.y1 : bottom + 1;
+ re.DrawTileClear(clear.x1, i, clear.x2 - clear.x1 + 1, clear.y2 - i + 1, "backtile");
clear.y2 = bottom;
}
if (clear.x1 < left)
- { // clear left of view screen
- i = clear.x2 < left-1 ? clear.x2 : left-1;
- re.DrawTileClear (clear.x1, clear.y1,
- i-clear.x1+1, clear.y2 - clear.y1 + 1, "backtile");
+ { // clear left of view screen
+ i = clear.x2 < left - 1 ? clear.x2 : left - 1;
+ re.DrawTileClear(clear.x1, clear.y1, i - clear.x1 + 1, clear.y2 - clear.y1 + 1, "backtile");
clear.x1 = left;
}
if (clear.x2 > right)
- { // clear left of view screen
- i = clear.x1 > right+1 ? clear.x1 : right+1;
- re.DrawTileClear (i, clear.y1,
- clear.x2-i+1, clear.y2 - clear.y1 + 1, "backtile");
+ { // clear left of view screen
+ i = clear.x1 > right + 1 ? clear.x1 : right + 1;
+ re.DrawTileClear(i, clear.y1, clear.x2 - i + 1, clear.y2 - clear.y1 + 1, "backtile");
clear.x2 = right;
}
}
-
-// ===============================================================
+ // ===============================================================
static final int STAT_MINUS = 10; // num frame for '-' stats digit
- static final int ICON_WIDTH = 24;
+ static final int ICON_WIDTH = 24;
static final int ICON_HEIGHT = 24;
static final int CHAR_WIDTH = 16;
static final int ICON_SPACE = 8;
@@ -769,22 +792,27 @@ public final class SCR extends Globals {
/*
================
SizeHUDString
-
+
Allow embedded \n in the string
================
*/
- static void SizeHUDString(String string, Dimension dim) {
+ static void SizeHUDString(String string, Dimension dim)
+ {
int lines, width, current;
lines = 1;
width = 0;
current = 0;
- for (int i = 0; i < string.length(); i++) {
- if (string.charAt(i) == '\n') {
+ for (int i = 0; i < string.length(); i++)
+ {
+ if (string.charAt(i) == '\n')
+ {
lines++;
current = 0;
- } else {
+ }
+ else
+ {
current++;
if (current > width)
width = current;
@@ -796,7 +824,8 @@ public final class SCR extends Globals {
dim.height = lines * 8;
}
- static void DrawHUDString(String string, int x, int y, int centerwidth, int xor) {
+ static void DrawHUDString(String string, int x, int y, int centerwidth, int xor)
+ {
int margin;
//char line[1024];
StringBuffer line = new StringBuffer(1024);
@@ -804,7 +833,8 @@ public final class SCR extends Globals {
margin = x;
- for (int l = 0; l < string.length();) {
+ for (int l = 0; l < string.length();)
+ {
// scan out one line of text from the string
line = new StringBuffer(1024);
while (string.charAt(l) != '\n')
@@ -815,11 +845,13 @@ public final class SCR extends Globals {
x = margin + (centerwidth - line.length() * 8) / 2;
else
x = margin;
- for (i = 0; i < line.length(); i++) {
+ for (i = 0; i < line.length(); i++)
+ {
re.DrawChar(x, y, line.charAt(i) ^ xor);
x += 8;
}
- if (l < string.length()) {
+ if (l < string.length())
+ {
l++; // skip the \n
x = margin;
y += 8;
@@ -827,7 +859,6 @@ public final class SCR extends Globals {
}
}
-
/*
==============
SCR_DrawField
@@ -836,7 +867,6 @@ public final class SCR extends Globals {
static void DrawField(int x, int y, int color, int width, int value)
{
char ptr;
- int ptrp;
String num;
int l;
int frame;
@@ -855,10 +885,10 @@ public final class SCR extends Globals {
l = num.length();
if (l > width)
l = width;
- x += 2 + CHAR_WIDTH*(width - l);
+ x += 2 + CHAR_WIDTH * (width - l);
ptr = num.charAt(0);
- ptrp = 0;
+
for (int i = 0; i < l; i++)
{
ptr = num.charAt(i);
@@ -867,7 +897,7 @@ public final class SCR extends Globals {
else
frame = ptr - '0';
- re.DrawPic (x,y,sb_nums[color][frame]);
+ re.DrawPic(x, y, sb_nums[color][frame]);
x += CHAR_WIDTH;
}
}
@@ -875,58 +905,59 @@ public final class SCR extends Globals {
/*
===============
SCR_TouchPics
-
+
Allows rendering code to cache all needed sbar graphics
===============
*/
- static void TouchPics() {
+ static void TouchPics()
+ {
int i, j;
-
- for (i=0 ; i<2 ; i++)
- for (j=0 ; j<11 ; j++)
+
+ for (i = 0; i < 2; i++)
+ for (j = 0; j < 11; j++)
re.RegisterPic(sb_nums[i][j]);
-
- if (crosshair.value != 0.0f) {
+
+ if (crosshair.value != 0.0f)
+ {
if (crosshair.value > 3.0f || crosshair.value < 0.0f)
crosshair.value = 3.0f;
-
- crosshair_pic = "ch" + (int)crosshair.value;
- Dimension dim = new Dimension();
- re.DrawGetPicSize(dim, crosshair_pic);
- crosshair_width = dim.width;
- crosshair_height = dim.height;
- if (crosshair_width == 0)
- crosshair_pic = "";
+
+ crosshair_pic = "ch" + (int) crosshair.value;
+ Dimension dim = new Dimension();
+ re.DrawGetPicSize(dim, crosshair_pic);
+ crosshair_width = dim.width;
+ crosshair_height = dim.height;
+ if (crosshair_width == 0)
+ crosshair_pic = "";
}
}
-
/*
================
SCR_ExecuteLayoutString
-
+
================
*/
static void ExecuteLayoutString(String s)
{
- int x, y;
- int value;
+ int x, y;
+ int value;
String token;
- int width;
- int index;
- clientinfo_t ci;
+ int width;
+ int index;
+ clientinfo_t ci;
if (cls.state != ca_active || !cl.refresh_prepped)
return;
-// if (!s[0])
+ // if (!s[0])
if (s == null || s.length() == 0)
return;
x = 0;
y = 0;
width = 3;
-
+
Com.ParseHelp ph = new Com.ParseHelp(s);
while (!ph.isEof())
@@ -947,7 +978,7 @@ public final class SCR extends Globals {
if (token.equals("xv"))
{
token = Com.Parse(ph);
- x = viddef.width/2 - 160 + atoi(token);
+ x = viddef.width / 2 - 160 + atoi(token);
continue;
}
@@ -966,40 +997,40 @@ public final class SCR extends Globals {
if (token.equals("yv"))
{
token = Com.Parse(ph);
- y = viddef.height/2 - 120 + atoi(token);
+ y = viddef.height / 2 - 120 + atoi(token);
continue;
}
if (token.equals("pic"))
- { // draw a pic from a stat number
+ { // draw a pic from a stat number
token = Com.Parse(ph);
value = cl.frame.playerstate.stats[atoi(token)];
if (value >= MAX_IMAGES)
- Com.Error (ERR_DROP, "Pic >= MAX_IMAGES");
- if (cl.configstrings[CS_IMAGES+value] != null)
+ Com.Error(ERR_DROP, "Pic >= MAX_IMAGES");
+ if (cl.configstrings[CS_IMAGES + value] != null)
{
- AddDirtyPoint (x, y);
- AddDirtyPoint (x+23, y+23);
- re.DrawPic (x, y, cl.configstrings[CS_IMAGES+value]);
+ AddDirtyPoint(x, y);
+ AddDirtyPoint(x + 23, y + 23);
+ re.DrawPic(x, y, cl.configstrings[CS_IMAGES + value]);
}
continue;
}
if (token.equals("client"))
- { // draw a deathmatch client block
- int score, ping, time;
+ { // draw a deathmatch client block
+ int score, ping, time;
token = Com.Parse(ph);
- x = viddef.width/2 - 160 + atoi(token);
+ x = viddef.width / 2 - 160 + atoi(token);
token = Com.Parse(ph);
- y = viddef.height/2 - 120 + atoi(token);
- AddDirtyPoint (x, y);
- AddDirtyPoint (x+159, y+31);
+ y = viddef.height / 2 - 120 + atoi(token);
+ AddDirtyPoint(x, y);
+ AddDirtyPoint(x + 159, y + 31);
token = Com.Parse(ph);
value = atoi(token);
if (value >= MAX_CLIENTS || value < 0)
- Com.Error (ERR_DROP, "client >= MAX_CLIENTS");
+ Com.Error(ERR_DROP, "client >= MAX_CLIENTS");
ci = cl.clientinfo[value];
token = Com.Parse(ph);
@@ -1011,33 +1042,33 @@ public final class SCR extends Globals {
token = Com.Parse(ph);
time = atoi(token);
- Console.DrawAltString (x+32, y, ci.name);
- Console.DrawString (x+32, y+8, "Score: ");
- Console.DrawAltString (x+32+7*8, y+8, "" + score);
- Console.DrawString (x+32, y+16, "Ping: " + ping);
- Console.DrawString (x+32, y+24, "Time: " + time);
+ Console.DrawAltString(x + 32, y, ci.name);
+ Console.DrawString(x + 32, y + 8, "Score: ");
+ Console.DrawAltString(x + 32 + 7 * 8, y + 8, "" + score);
+ Console.DrawString(x + 32, y + 16, "Ping: " + ping);
+ Console.DrawString(x + 32, y + 24, "Time: " + time);
if (ci.icon == null)
ci = cl.baseclientinfo;
- re.DrawPic (x, y, ci.iconname);
+ re.DrawPic(x, y, ci.iconname);
continue;
}
if (token.equals("ctf"))
- { // draw a ctf client block
- int score, ping;
+ { // draw a ctf client block
+ int score, ping;
token = Com.Parse(ph);
- x = viddef.width/2 - 160 + atoi(token);
+ x = viddef.width / 2 - 160 + atoi(token);
token = Com.Parse(ph);
- y = viddef.height/2 - 120 + atoi(token);
- AddDirtyPoint (x, y);
- AddDirtyPoint (x+159, y+31);
+ y = viddef.height / 2 - 120 + atoi(token);
+ AddDirtyPoint(x, y);
+ AddDirtyPoint(x + 159, y + 31);
token = Com.Parse(ph);
value = atoi(token);
if (value >= MAX_CLIENTS || value < 0)
- Com.Error (ERR_DROP, "client >= MAX_CLIENTS");
+ Com.Error(ERR_DROP, "client >= MAX_CLIENTS");
ci = cl.clientinfo[value];
token = Com.Parse(ph);
@@ -1052,142 +1083,141 @@ public final class SCR extends Globals {
String block = Com.sprintf("%3d %3d %-12.12s", new Vargs(3).add(score).add(ping).add(ci.name));
if (value == cl.playernum)
- Console.DrawAltString (x, y, block);
+ Console.DrawAltString(x, y, block);
else
- Console.DrawString (x, y, block);
+ Console.DrawString(x, y, block);
continue;
}
if (token.equals("picn"))
- { // draw a pic from a name
+ { // draw a pic from a name
token = Com.Parse(ph);
- AddDirtyPoint (x, y);
- AddDirtyPoint (x+23, y+23);
- re.DrawPic (x, y, token);
+ AddDirtyPoint(x, y);
+ AddDirtyPoint(x + 23, y + 23);
+ re.DrawPic(x, y, token);
continue;
}
if (token.equals("num"))
- { // draw a number
+ { // draw a number
token = Com.Parse(ph);
width = atoi(token);
token = Com.Parse(ph);
value = cl.frame.playerstate.stats[atoi(token)];
- DrawField (x, y, 0, width, value);
+ DrawField(x, y, 0, width, value);
continue;
}
if (token.equals("hnum"))
- { // health number
- int color;
+ { // health number
+ int color;
width = 3;
value = cl.frame.playerstate.stats[STAT_HEALTH];
if (value > 25)
- color = 0; // green
+ color = 0; // green
else if (value > 0)
- color = (cl.frame.serverframe>>2) & 1; // flash
+ color = (cl.frame.serverframe >> 2) & 1; // flash
else
color = 1;
if ((cl.frame.playerstate.stats[STAT_FLASHES] & 1) != 0)
- re.DrawPic (x, y, "field_3");
+ re.DrawPic(x, y, "field_3");
- DrawField (x, y, color, width, value);
+ DrawField(x, y, color, width, value);
continue;
}
if (token.equals("anum"))
- { // ammo number
- int color;
+ { // ammo number
+ int color;
width = 3;
value = cl.frame.playerstate.stats[STAT_AMMO];
if (value > 5)
- color = 0; // green
+ color = 0; // green
else if (value >= 0)
- color = (cl.frame.serverframe>>2) & 1; // flash
+ color = (cl.frame.serverframe >> 2) & 1; // flash
else
- continue; // negative number = don't show
+ continue; // negative number = don't show
if ((cl.frame.playerstate.stats[STAT_FLASHES] & 4) != 0)
- re.DrawPic (x, y, "field_3");
+ re.DrawPic(x, y, "field_3");
- DrawField (x, y, color, width, value);
+ DrawField(x, y, color, width, value);
continue;
}
if (token.equals("rnum"))
- { // armor number
- int color;
+ { // armor number
+ int color;
width = 3;
value = cl.frame.playerstate.stats[STAT_ARMOR];
if (value < 1)
continue;
- color = 0; // green
+ color = 0; // green
if ((cl.frame.playerstate.stats[STAT_FLASHES] & 2) != 0)
- re.DrawPic (x, y, "field_3");
+ re.DrawPic(x, y, "field_3");
- DrawField (x, y, color, width, value);
+ DrawField(x, y, color, width, value);
continue;
}
-
if (token.equals("stat_string"))
{
token = Com.Parse(ph);
index = atoi(token);
if (index < 0 || index >= MAX_CONFIGSTRINGS)
- Com.Error (ERR_DROP, "Bad stat_string index");
+ Com.Error(ERR_DROP, "Bad stat_string index");
index = cl.frame.playerstate.stats[index];
if (index < 0 || index >= MAX_CONFIGSTRINGS)
- Com.Error (ERR_DROP, "Bad stat_string index");
- Console.DrawString (x, y, cl.configstrings[index]);
+ Com.Error(ERR_DROP, "Bad stat_string index");
+ Console.DrawString(x, y, cl.configstrings[index]);
continue;
}
if (token.equals("cstring"))
{
token = Com.Parse(ph);
- DrawHUDString (token, x, y, 320, 0);
+ DrawHUDString(token, x, y, 320, 0);
continue;
}
if (token.equals("string"))
{
token = Com.Parse(ph);
- Console.DrawString (x, y, token);
+ Console.DrawString(x, y, token);
continue;
}
if (token.equals("cstring2"))
{
token = Com.Parse(ph);
- DrawHUDString (token, x, y, 320,0x80);
+ DrawHUDString(token, x, y, 320, 0x80);
continue;
}
if (token.equals("string2"))
{
token = Com.Parse(ph);
- Console.DrawAltString (x, y, token);
+ Console.DrawAltString(x, y, token);
continue;
}
if (token.equals("if"))
- { // draw a number
+ { // draw a number
token = Com.Parse(ph);
value = cl.frame.playerstate.stats[atoi(token)];
if (value == 0)
- { // skip to endif
-// while (s && strcmp(token, "endif") )
-// {
-// token = Com.Parse(ph);
-// }
-
+ { // skip to endif
+ // while (s && strcmp(token, "endif") )
+ // {
+ // token = Com.Parse(ph);
+ // }
+
while (!ph.isEof() && !(token = Com.Parse(ph)).equals("endif"));
}
@@ -1195,19 +1225,19 @@ public final class SCR extends Globals {
continue;
}
-
}
}
/*
================
SCR_DrawStats
-
+
The status bar is a small layout program that
is based on the stats array
================
*/
- static void DrawStats() {
+ static void DrawStats()
+ {
//TODO:
SCR.ExecuteLayoutString(cl.configstrings[CS_STATUSBAR]);
}
@@ -1215,12 +1245,13 @@ public final class SCR extends Globals {
/*
================
SCR_DrawLayout
-
+
================
*/
static final int STAT_LAYOUTS = 13;
- static void DrawLayout() {
+ static void DrawLayout()
+ {
if (cl.frame.playerstate.stats[STAT_LAYOUTS] != 0)
return;
SCR.ExecuteLayoutString(cl.layout);
@@ -1231,7 +1262,7 @@ public final class SCR extends Globals {
/*
==================
SCR_UpdateScreen
-
+
This is called every frame, and can also be called explicitly to flush
text to the screen.
==================
@@ -1241,7 +1272,7 @@ public final class SCR extends Globals {
int numframes;
int i;
float[] separation = { 0, 0 };
-
+
// if the screen is disabled (loading plaque is up, or vid mode changing)
// do nothing at all
if (cls.disable_screen != 0)
@@ -1255,23 +1286,23 @@ public final class SCR extends Globals {
}
if (!scr_initialized || !con.initialized)
- return; // not initialized yet
+ return; // not initialized yet
/*
** range check cl_camera_separation so we don't inadvertently fry someone's
** brain
*/
- if ( cl_stereo_separation.value > 1.0 )
- Cvar.SetValue( "cl_stereo_separation", 1.0f );
- else if ( cl_stereo_separation.value < 0 )
- Cvar.SetValue( "cl_stereo_separation", 0.0f );
+ if (cl_stereo_separation.value > 1.0)
+ Cvar.SetValue("cl_stereo_separation", 1.0f);
+ else if (cl_stereo_separation.value < 0)
+ Cvar.SetValue("cl_stereo_separation", 0.0f);
- if ( cl_stereo.value != 0 )
+ if (cl_stereo.value != 0)
{
numframes = 2;
separation[0] = -cl_stereo_separation.value / 2;
- separation[1] = cl_stereo_separation.value / 2;
- }
+ separation[1] = cl_stereo_separation.value / 2;
+ }
else
{
separation[0] = 0;
@@ -1279,19 +1310,19 @@ public final class SCR extends Globals {
numframes = 1;
}
- for ( i = 0; i < numframes; i++ )
+ for (i = 0; i < numframes; i++)
{
- re.BeginFrame( separation[i] );
+ re.BeginFrame(separation[i]);
if (scr_draw_loading == 2)
- { // loading plaque over black screen
+ { // loading plaque over black screen
Dimension dim = new Dimension();
re.CinematicSetPalette(null);
scr_draw_loading = 0; // false
- re.DrawGetPicSize (dim, "loading");
- re.DrawPic ((viddef.width-dim.width)/2, (viddef.height-dim.height)/2, "loading");
- }
+ re.DrawGetPicSize(dim, "loading");
+ re.DrawPic((viddef.width - dim.width) / 2, (viddef.height - dim.height) / 2, "loading");
+ }
// if a cinematic is supposed to be running, handle menus
// and console specially
else if (cl.cinematictime > 0)
@@ -1317,10 +1348,10 @@ public final class SCR extends Globals {
else
{
// TODO impl: cl_cin.c for cinematics
- //DrawCinematic();
+ DrawCinematic();
}
}
- else
+ else
{
// make sure the game palette is active
if (cl.cinematicpalette_active)
@@ -1335,7 +1366,7 @@ public final class SCR extends Globals {
// clear any dirty part of the background
TileClear();
- V.RenderView( separation[i] );
+ V.RenderView(separation[i]);
DrawStats();
// TODO impl this
@@ -1346,22 +1377,22 @@ public final class SCR extends Globals {
DrawNet();
CheckDrawCenterString();
-//
-// if (scr_timegraph->value)
-// SCR_DebugGraph (cls.frametime*300, 0);
-//
-// if (scr_debuggraph->value || scr_timegraph->value || scr_netgraph->value)
-// SCR_DrawDebugGraph ();
-//
+ DrawFPS();
+
+ //
+ // if (scr_timegraph->value)
+ // SCR_DebugGraph (cls.frametime*300, 0);
+ //
+ // if (scr_debuggraph->value || scr_timegraph->value || scr_netgraph->value)
+ // SCR_DrawDebugGraph ();
+ //
DrawPause();
-
DrawConsole();
-
- Menu.Draw ();
-
+ Menu.Draw();
DrawLoading();
}
}
+
Globals.re.EndFrame();
}
@@ -1370,11 +1401,13 @@ public final class SCR extends Globals {
SCR_DrawCrosshair
=================
*/
- static void DrawCrosshair() {
+ static void DrawCrosshair()
+ {
if (crosshair.value == 0.0f)
return;
- if (crosshair.modified) {
+ if (crosshair.modified)
+ {
crosshair.modified = false;
SCR.TouchPics();
}
@@ -1382,21 +1415,25 @@ public final class SCR extends Globals {
if (crosshair_pic.length() == 0)
return;
- re.DrawPic(scr_vrect.x + ((scr_vrect.width - crosshair_width)>>1),
- scr_vrect.y + ((scr_vrect.height - crosshair_height)>>1), crosshair_pic);
+ re.DrawPic(
+ scr_vrect.x + ((scr_vrect.width - crosshair_width) >> 1),
+ scr_vrect.y + ((scr_vrect.height - crosshair_height) >> 1),
+ crosshair_pic);
}
-
+
// wird anstelle von der richtigen UpdateScreen benoetigt
- public static void UpdateScreen() {
+ public static void UpdateScreen()
+ {
Globals.re.updateScreen(null);
}
-
+
/*
=================
SCR_AddDirtyPoint
=================
*/
- static void AddDirtyPoint(int x, int y) {
+ static void AddDirtyPoint(int x, int y)
+ {
if (x < scr_dirty.x1)
scr_dirty.x1 = x;
if (x > scr_dirty.x2)
@@ -1407,14 +1444,667 @@ public final class SCR extends Globals {
scr_dirty.y2 = y;
}
-
- public static void PlayCinematic(String str) {
- // TODO: implement PlayCinematic
+ private static int lastframes = 0;
+ private static int lasttime = 0;
+ private static String fpsvalue = "";
+ static void DrawFPS()
+ {
+ if (fps.value > 0.0f)
+ {
+ int diff = cls.realtime - lasttime;
+ if (diff > (int) (fps.value * 1000))
+ {
+ fpsvalue = (cls.framecount - lastframes) * 100000 / diff / 100.0f + " fps";
+ lastframes = cls.framecount;
+ lasttime = cls.realtime;
+ }
+ int x = viddef.width - 8 * fpsvalue.length() - 2;
+ for (int i = 0; i < fpsvalue.length(); i++)
+ {
+ re.DrawChar(x, 2, fpsvalue.charAt(i));
+ x += 8;
+ }
+ }
}
- static void FinishCinematic() {
+ /*
+ =================================================================
+
+ cl_cin.c
+
+ Play Cinematics
+
+ =================================================================
+ */
+
+// typedef struct
+// {
+// byte *data;
+// int count;
+// } cblock_t;
+//
+// typedef struct
+// {
+// qboolean restart_sound;
+// int s_rate;
+// int s_width;
+// int s_channels;
+//
+// int width;
+// int height;
+// byte *pic;
+// byte *pic_pending;
+//
+// // order 1 huffman stuff
+// int *hnodes1; // [256][256][2];
+// int numhnodes1[256];
+//
+// int h_used[512];
+// int h_count[512];
+// } cinematics_t;
+//
+// cinematics_t cin;
+//
+// /*
+// =================================================================
+//
+// PCX LOADING
+//
+// =================================================================
+// */
+//
+//
+// /*
+// ==============
+// SCR_LoadPCX
+// ==============
+// */
+// void SCR_LoadPCX (char *filename, byte **pic, byte **palette, int *width, int *height)
+// {
+// byte *raw;
+// pcx_t *pcx;
+// int x, y;
+// int len;
+// int dataByte, runLength;
+// byte *out, *pix;
+//
+// *pic = NULL;
+//
+// //
+// // load the file
+// //
+// len = FS_LoadFile (filename, (void **)&raw);
+// if (!raw)
+// return; // Com_Printf ("Bad pcx file %s\n", filename);
+//
+// //
+// // parse the PCX file
+// //
+// pcx = (pcx_t *)raw;
+// raw = &pcx->data;
+//
+// if (pcx->manufacturer != 0x0a
+// || pcx->version != 5
+// || pcx->encoding != 1
+// || pcx->bits_per_pixel != 8
+// || pcx->xmax >= 640
+// || pcx->ymax >= 480)
+// {
+// Com_Printf ("Bad pcx file %s\n", filename);
+// return;
+// }
+//
+// out = Z_Malloc ( (pcx->ymax+1) * (pcx->xmax+1) );
+//
+// *pic = out;
+//
+// pix = out;
+//
+// if (palette)
+// {
+// *palette = Z_Malloc(768);
+// memcpy (*palette, (byte *)pcx + len - 768, 768);
+// }
+//
+// if (width)
+// *width = pcx->xmax+1;
+// if (height)
+// *height = pcx->ymax+1;
+//
+// for (y=0 ; y<=pcx->ymax ; y++, pix += pcx->xmax+1)
+// {
+// for (x=0 ; x<=pcx->xmax ; )
+// {
+// dataByte = *raw++;
+//
+// if((dataByte & 0xC0) == 0xC0)
+// {
+// runLength = dataByte & 0x3F;
+// dataByte = *raw++;
+// }
+// else
+// runLength = 1;
+//
+// while(runLength-- > 0)
+// pix[x++] = dataByte;
+// }
+//
+// }
+//
+// if ( raw - (byte *)pcx > len)
+// {
+// Com_Printf ("PCX file %s was malformed", filename);
+// Z_Free (*pic);
+// *pic = NULL;
+// }
+//
+// FS_FreeFile (pcx);
+// }
+//
+ // =============================================================
+
+ /*
+ ==================
+ SCR_StopCinematic
+ ==================
+ */
+ static void StopCinematic()
+ {
+ cl.cinematictime = 0; // done
+// if (cin.pic)
+// {
+// Z_Free (cin.pic);
+// cin.pic = NULL;
+// }
+// if (cin.pic_pending)
+// {
+// Z_Free (cin.pic_pending);
+// cin.pic_pending = NULL;
+// }
+ if (cl.cinematicpalette_active)
+ {
+ re.CinematicSetPalette(null);
+ cl.cinematicpalette_active = false;
+ }
+// if (cl.cinematic_file)
+// {
+// fclose (cl.cinematic_file);
+// cl.cinematic_file = NULL;
+// }
+// if (cin.hnodes1)
+// {
+// Z_Free (cin.hnodes1);
+// cin.hnodes1 = NULL;
+// }
+//
+// // switch back down to 11 khz sound if necessary
+// if (cin.restart_sound)
+// {
+// cin.restart_sound = false;
+// CL_Snd_Restart_f ();
+// }
+//
+ }
+
+ /*
+ ====================
+ SCR_FinishCinematic
+
+ Called when either the cinematic completes, or it is aborted
+ ====================
+ */
+ static void FinishCinematic()
+ {
// tell the server to advance to the next map / cinematic
MSG.WriteByte(cls.netchan.message, clc_stringcmd);
SZ.Print(cls.netchan.message, "nextserver " + cl.servercount + '\n');
}
+
+ // ==========================================================================
+
+// /*
+// ==================
+// SmallestNode1
+// ==================
+// */
+// int SmallestNode1 (int numhnodes)
+// {
+// int i;
+// int best, bestnode;
+//
+// best = 99999999;
+// bestnode = -1;
+// for (i=0 ; i<numhnodes ; i++)
+// {
+// if (cin.h_used[i])
+// continue;
+// if (!cin.h_count[i])
+// continue;
+// if (cin.h_count[i] < best)
+// {
+// best = cin.h_count[i];
+// bestnode = i;
+// }
+// }
+//
+// if (bestnode == -1)
+// return -1;
+//
+// cin.h_used[bestnode] = true;
+// return bestnode;
+// }
+//
+//
+// /*
+// ==================
+// Huff1TableInit
+//
+// Reads the 64k counts table and initializes the node trees
+// ==================
+// */
+// void Huff1TableInit (void)
+// {
+// int prev;
+// int j;
+// int *node, *nodebase;
+// byte counts[256];
+// int numhnodes;
+//
+// cin.hnodes1 = Z_Malloc (256*256*2*4);
+// memset (cin.hnodes1, 0, 256*256*2*4);
+//
+// for (prev=0 ; prev<256 ; prev++)
+// {
+// memset (cin.h_count,0,sizeof(cin.h_count));
+// memset (cin.h_used,0,sizeof(cin.h_used));
+//
+// // read a row of counts
+// FS_Read (counts, sizeof(counts), cl.cinematic_file);
+// for (j=0 ; j<256 ; j++)
+// cin.h_count[j] = counts[j];
+//
+// // build the nodes
+// numhnodes = 256;
+// nodebase = cin.hnodes1 + prev*256*2;
+//
+// while (numhnodes != 511)
+// {
+// node = nodebase + (numhnodes-256)*2;
+//
+// // pick two lowest counts
+// node[0] = SmallestNode1 (numhnodes);
+// if (node[0] == -1)
+// break; // no more
+//
+// node[1] = SmallestNode1 (numhnodes);
+// if (node[1] == -1)
+// break;
+//
+// cin.h_count[numhnodes] = cin.h_count[node[0]] + cin.h_count[node[1]];
+// numhnodes++;
+// }
+//
+// cin.numhnodes1[prev] = numhnodes-1;
+// }
+// }
+//
+// /*
+// ==================
+// Huff1Decompress
+// ==================
+// */
+// cblock_t Huff1Decompress (cblock_t in)
+// {
+// byte *input;
+// byte *out_p;
+// int nodenum;
+// int count;
+// cblock_t out;
+// int inbyte;
+// int *hnodes, *hnodesbase;
+//// int i;
+//
+// // get decompressed count
+// count = in.data[0] + (in.data[1]<<8) + (in.data[2]<<16) + (in.data[3]<<24);
+// input = in.data + 4;
+// out_p = out.data = Z_Malloc (count);
+//
+// // read bits
+//
+// hnodesbase = cin.hnodes1 - 256*2; // nodes 0-255 aren't stored
+//
+// hnodes = hnodesbase;
+// nodenum = cin.numhnodes1[0];
+// while (count)
+// {
+// inbyte = *input++;
+// //-----------
+// if (nodenum < 256)
+// {
+// hnodes = hnodesbase + (nodenum<<9);
+// *out_p++ = nodenum;
+// if (!--count)
+// break;
+// nodenum = cin.numhnodes1[nodenum];
+// }
+// nodenum = hnodes[nodenum*2 + (inbyte&1)];
+// inbyte >>=1;
+// //-----------
+// if (nodenum < 256)
+// {
+// hnodes = hnodesbase + (nodenum<<9);
+// *out_p++ = nodenum;
+// if (!--count)
+// break;
+// nodenum = cin.numhnodes1[nodenum];
+// }
+// nodenum = hnodes[nodenum*2 + (inbyte&1)];
+// inbyte >>=1;
+// //-----------
+// if (nodenum < 256)
+// {
+// hnodes = hnodesbase + (nodenum<<9);
+// *out_p++ = nodenum;
+// if (!--count)
+// break;
+// nodenum = cin.numhnodes1[nodenum];
+// }
+// nodenum = hnodes[nodenum*2 + (inbyte&1)];
+// inbyte >>=1;
+// //-----------
+// if (nodenum < 256)
+// {
+// hnodes = hnodesbase + (nodenum<<9);
+// *out_p++ = nodenum;
+// if (!--count)
+// break;
+// nodenum = cin.numhnodes1[nodenum];
+// }
+// nodenum = hnodes[nodenum*2 + (inbyte&1)];
+// inbyte >>=1;
+// //-----------
+// if (nodenum < 256)
+// {
+// hnodes = hnodesbase + (nodenum<<9);
+// *out_p++ = nodenum;
+// if (!--count)
+// break;
+// nodenum = cin.numhnodes1[nodenum];
+// }
+// nodenum = hnodes[nodenum*2 + (inbyte&1)];
+// inbyte >>=1;
+// //-----------
+// if (nodenum < 256)
+// {
+// hnodes = hnodesbase + (nodenum<<9);
+// *out_p++ = nodenum;
+// if (!--count)
+// break;
+// nodenum = cin.numhnodes1[nodenum];
+// }
+// nodenum = hnodes[nodenum*2 + (inbyte&1)];
+// inbyte >>=1;
+// //-----------
+// if (nodenum < 256)
+// {
+// hnodes = hnodesbase + (nodenum<<9);
+// *out_p++ = nodenum;
+// if (!--count)
+// break;
+// nodenum = cin.numhnodes1[nodenum];
+// }
+// nodenum = hnodes[nodenum*2 + (inbyte&1)];
+// inbyte >>=1;
+// //-----------
+// if (nodenum < 256)
+// {
+// hnodes = hnodesbase + (nodenum<<9);
+// *out_p++ = nodenum;
+// if (!--count)
+// break;
+// nodenum = cin.numhnodes1[nodenum];
+// }
+// nodenum = hnodes[nodenum*2 + (inbyte&1)];
+// inbyte >>=1;
+// }
+//
+// if (input - in.data != in.count && input - in.data != in.count+1)
+// {
+// Com_Printf ("Decompression overread by %i", (input - in.data) - in.count);
+// }
+// out.count = out_p - out.data;
+//
+// return out;
+// }
+//
+// /*
+// ==================
+// SCR_ReadNextFrame
+// ==================
+// */
+// byte *SCR_ReadNextFrame (void)
+// {
+// int r;
+// int command;
+// byte samples[22050/14*4];
+// byte compressed[0x20000];
+// int size;
+// byte *pic;
+// cblock_t in, huf1;
+// int start, end, count;
+//
+// // read the next frame
+// r = fread (&command, 4, 1, cl.cinematic_file);
+// if (r == 0) // we'll give it one more chance
+// r = fread (&command, 4, 1, cl.cinematic_file);
+//
+// if (r != 1)
+// return NULL;
+// command = LittleLong(command);
+// if (command == 2)
+// return NULL; // last frame marker
+//
+// if (command == 1)
+// { // read palette
+// FS_Read (cl.cinematicpalette, sizeof(cl.cinematicpalette), cl.cinematic_file);
+// cl.cinematicpalette_active=0; // dubious.... exposes an edge case
+// }
+//
+// // decompress the next frame
+// FS_Read (&size, 4, cl.cinematic_file);
+// size = LittleLong(size);
+// if (size > sizeof(compressed) || size < 1)
+// Com_Error (ERR_DROP, "Bad compressed frame size");
+// FS_Read (compressed, size, cl.cinematic_file);
+//
+// // read sound
+// start = cl.cinematicframe*cin.s_rate/14;
+// end = (cl.cinematicframe+1)*cin.s_rate/14;
+// count = end - start;
+//
+// FS_Read (samples, count*cin.s_width*cin.s_channels, cl.cinematic_file);
+//
+// S_RawSamples (count, cin.s_rate, cin.s_width, cin.s_channels, samples);
+//
+// in.data = compressed;
+// in.count = size;
+//
+// huf1 = Huff1Decompress (in);
+//
+// pic = huf1.data;
+//
+// cl.cinematicframe++;
+//
+// return pic;
+// }
+//
+//
+ /*
+ ==================
+ SCR_RunCinematic
+
+ ==================
+ */
+ static void RunCinematic()
+ {
+ int frame;
+
+ if (cl.cinematictime <= 0)
+ {
+ StopCinematic();
+ return;
+ }
+
+// if (cl.cinematicframe == -1)
+// return; // static image
+//
+// if (cls.key_dest != key_game)
+// { // pause if menu or console is up
+// cl.cinematictime = cls.realtime - cl.cinematicframe*1000/14;
+// return;
+// }
+//
+// frame = (cls.realtime - cl.cinematictime)*14.0/1000;
+// if (frame <= cl.cinematicframe)
+// return;
+// if (frame > cl.cinematicframe+1)
+// {
+// Com_Printf ("Dropped frame: %i > %i\n", frame, cl.cinematicframe+1);
+// cl.cinematictime = cls.realtime - cl.cinematicframe*1000/14;
+// }
+// if (cin.pic)
+// Z_Free (cin.pic);
+// cin.pic = cin.pic_pending;
+// cin.pic_pending = NULL;
+// cin.pic_pending = SCR_ReadNextFrame ();
+// if (!cin.pic_pending)
+// {
+// SCR_StopCinematic ();
+// SCR_FinishCinematic ();
+// cl.cinematictime = 1; // hack to get the black screen behind loading
+// SCR_BeginLoadingPlaque ();
+// cl.cinematictime = 0;
+// return;
+// }
+ }
+
+ /*
+ ==================
+ SCR_DrawCinematic
+
+ Returns true if a cinematic is active, meaning the view rendering
+ should be skipped
+ ==================
+ */
+ static boolean DrawCinematic()
+ {
+// if (cl.cinematictime <= 0)
+// {
+ return false;
+// }
+//
+// if (cls.key_dest == key_menu)
+// { // blank screen and pause if menu is up
+// re.CinematicSetPalette(NULL);
+// cl.cinematicpalette_active = false;
+// return true;
+// }
+//
+// if (!cl.cinematicpalette_active)
+// {
+// re.CinematicSetPalette(cl.cinematicpalette);
+// cl.cinematicpalette_active = true;
+// }
+//
+// if (!cin.pic)
+// return true;
+//
+// re.DrawStretchRaw (0, 0, viddef.width, viddef.height,
+// cin.width, cin.height, cin.pic);
+//
+// return true;
+ }
+
+ /*
+ ==================
+ SCR_PlayCinematic
+
+ ==================
+ */
+ static void PlayCinematic(String arg)
+ {
+// int width, height;
+// byte *palette;
+// char name[MAX_OSPATH], *dot;
+// int old_khz;
+//
+// // make sure CD isn't playing music
+ //CDAudio.Stop();
+
+ cl.cinematicframe = 0;
+// dot = strstr (arg, ".");
+// if (dot && !strcmp (dot, ".pcx"))
+// { // static pcx image
+// Com_sprintf (name, sizeof(name), "pics/%s", arg);
+// SCR_LoadPCX (name, &cin.pic, &palette, &cin.width, &cin.height);
+// cl.cinematicframe = -1;
+// cl.cinematictime = 1;
+// SCR_EndLoadingPlaque ();
+// cls.state = ca_active;
+// if (!cin.pic)
+// {
+// Com_Printf ("%s not found.\n", name);
+// cl.cinematictime = 0;
+// }
+// else
+// {
+// memcpy (cl.cinematicpalette, palette, sizeof(cl.cinematicpalette));
+// Z_Free (palette);
+// }
+// return;
+// }
+//
+// Com_sprintf (name, sizeof(name), "video/%s", arg);
+// FS_FOpenFile (name, &cl.cinematic_file);
+// if (!cl.cinematic_file)
+// {
+ // Com_Error (ERR_DROP, "Cinematic %s not found.\n", name);
+ FinishCinematic();
+ cl.cinematictime = 0; // done
+ return;
+// }
+//
+// SCR_EndLoadingPlaque ();
+//
+// cls.state = ca_active;
+//
+// FS_Read (&width, 4, cl.cinematic_file);
+// FS_Read (&height, 4, cl.cinematic_file);
+// cin.width = LittleLong(width);
+// cin.height = LittleLong(height);
+//
+// FS_Read (&cin.s_rate, 4, cl.cinematic_file);
+// cin.s_rate = LittleLong(cin.s_rate);
+// FS_Read (&cin.s_width, 4, cl.cinematic_file);
+// cin.s_width = LittleLong(cin.s_width);
+// FS_Read (&cin.s_channels, 4, cl.cinematic_file);
+// cin.s_channels = LittleLong(cin.s_channels);
+//
+// Huff1TableInit ();
+//
+// // switch up to 22 khz sound if necessary
+// old_khz = Cvar_VariableValue ("s_khz");
+// if (old_khz != cin.s_rate/1000)
+// {
+// cin.restart_sound = true;
+// Cvar_SetValue ("s_khz", cin.s_rate/1000);
+// CL_Snd_Restart_f ();
+// Cvar_SetValue ("s_khz", old_khz);
+// }
+//
+// cl.cinematicframe = 0;
+// cin.pic = SCR_ReadNextFrame ();
+// cl.cinematictime = Sys_Milliseconds ();
+ }
+
} \ No newline at end of file