Reworked the console/loading screen a little. The console is no longer directly shown at startup. MSVC2005 project files update for npqtv.

Added vid_wndalpha to make the window transparent (only supported in GL-win32).
Multiple issues with SW rendering, which I'll fix eventually. It does at least run, even if it looks ugly.
Plugins are now able to read the console input. Bigfoot, feel free to tweek.
Fixed up a few mismatched prototypes.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@3153 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2009-04-06 00:34:32 +00:00
parent 6ebabd8d88
commit 2adb420a6d
45 changed files with 1091 additions and 533 deletions

View File

@ -856,17 +856,7 @@ static int CG_SystemCallsEx(void *offset, unsigned int mask, int fn, const int *
case CG_S_RESPATIALIZE://void trap_S_Respatialize( int entityNum, const vec3_t origin, vec3_t axis[3], int inwater ); case CG_S_RESPATIALIZE://void trap_S_Respatialize( int entityNum, const vec3_t origin, vec3_t axis[3], int inwater );
{ {
float *org = VM_POINTER(arg[1]); float *org = VM_POINTER(arg[1]);
float *axis = VM_POINTER(arg[2]); vec3_t *axis = VM_POINTER(arg[2]);
/*
vec3_t listener_origin;
vec3_t listener_forward;
vec3_t listener_right;
vec3_t listener_up;
*/
VectorCopy(org, listener_origin);
VectorCopy(axis+0, listener_forward);
VectorCopy(axis+3, listener_right);
VectorCopy(axis+6, listener_up);
S_UpdateListener(org, axis[0], axis[1], axis[2], false); S_UpdateListener(org, axis[0], axis[1], axis[2], false);
} }

View File

@ -1925,6 +1925,8 @@ void CL_QTVPlay_f (void)
return; return;
} }
SCR_SetLoadingStage(LS_CONNECTION);
host = connrequest; host = connrequest;
connrequest = strchrrev(connrequest, '@'); connrequest = strchrrev(connrequest, '@');
@ -1935,6 +1937,7 @@ void CL_QTVPlay_f (void)
if (!newf) if (!newf)
{ {
SCR_SetLoadingStage(LS_NONE);
Con_Printf("Couldn't connect to proxy\n"); Con_Printf("Couldn't connect to proxy\n");
return; return;
} }

View File

@ -1596,7 +1596,7 @@ void CL_LinkPacketEntities (void)
autorotate = anglemod(100*servertime); autorotate = anglemod(100*servertime);
#ifdef CSQC_DAT #ifdef CSQC_DAT
CLCSQC_DeltaStart(); CSQC_DeltaStart(servertime);
#endif #endif
for (newpnum=0 ; newpnum<pack->num_entities ; newpnum++) for (newpnum=0 ; newpnum<pack->num_entities ; newpnum++)
@ -1612,7 +1612,7 @@ void CL_LinkPacketEntities (void)
} }
#ifdef CSQC_DAT #ifdef CSQC_DAT
if (CLCSQC_DeltaUpdate(state)) if (CSQC_DeltaUpdate(state))
continue; continue;
#endif #endif
@ -1879,7 +1879,7 @@ void CL_LinkPacketEntities (void)
} }
} }
#ifdef CSQC_DAT #ifdef CSQC_DAT
CLCSQC_DeltaEnd(); CSQC_DeltaEnd();
#endif #endif
} }
#else #else
@ -2780,13 +2780,13 @@ void CL_LinkPlayers (void)
if (state->messagenum != cl.validsequence) if (state->messagenum != cl.validsequence)
{ {
#ifdef CSQC_DAT #ifdef CSQC_DAT
CLCSQC_DeltaPlayer(j, NULL); CSQC_DeltaPlayer(j, NULL);
#endif #endif
continue; // not present this frame continue; // not present this frame
} }
#ifdef CSQC_DAT #ifdef CSQC_DAT
if (CLCSQC_DeltaPlayer(j, state)) if (CSQC_DeltaPlayer(j, state))
continue; continue;
#endif #endif

View File

@ -542,6 +542,16 @@ void CL_SendConnectPacket (
CL_RegisterSplitCommands(); CL_RegisterSplitCommands();
} }
char *CL_TryingToConnect(void)
{
if (connect_time == -1)
return NULL;
if (cls.state != ca_disconnected)
return NULL;
return cls.servername;
}
/* /*
================= =================
CL_CheckForResend CL_CheckForResend
@ -699,6 +709,7 @@ void CL_CheckForResend (void)
void CL_BeginServerConnect(void) void CL_BeginServerConnect(void)
{ {
SCR_SetLoadingStage(LS_CONNECTION);
connect_time = 0; connect_time = 0;
connect_type = 0; connect_type = 0;
connect_tries = 0; connect_tries = 0;
@ -707,6 +718,7 @@ void CL_BeginServerConnect(void)
#ifdef NQPROT #ifdef NQPROT
void CLNQ_BeginServerConnect(void) void CLNQ_BeginServerConnect(void)
{ {
SCR_SetLoadingStage(LS_CONNECTION);
connect_time = 0; connect_time = 0;
connect_type = 1; connect_type = 1;
connect_tries = 0; connect_tries = 0;
@ -963,7 +975,8 @@ void CL_ClearState (void)
Cvar_ApplyLatches(CVAR_LATCH); Cvar_ApplyLatches(CVAR_LATCH);
} }
CL_ClearTEnts (); CL_ClearParseState();
CL_ClearTEnts();
CL_ClearCustomTEnts(); CL_ClearCustomTEnts();
SCR_ShowPic_Clear(); SCR_ShowPic_Clear();
@ -1056,6 +1069,8 @@ void CL_Disconnect (void)
connect_time = -1; connect_time = -1;
connect_tries = 0; connect_tries = 0;
SCR_SetLoadingStage(0);
Cvar_ApplyLatches(CVAR_SERVEROVERRIDE); Cvar_ApplyLatches(CVAR_SERVEROVERRIDE);
if (VID_SetWindowCaption) if (VID_SetWindowCaption)
@ -1169,6 +1184,7 @@ void CL_Disconnect (void)
r_worldentity.model = NULL; r_worldentity.model = NULL;
cl.spectator = 0; cl.spectator = 0;
cl.sendprespawn = false; cl.sendprespawn = false;
cl.intermission = 0;
#ifdef NQPROT #ifdef NQPROT
cls.signon=0; cls.signon=0;
@ -2256,7 +2272,7 @@ client_connect: //fixme: make function
total_loading_size = 100; total_loading_size = 100;
current_loading_size = 0; current_loading_size = 0;
loading_stage = 2; SCR_SetLoadingStage(LS_CLIENT);
Validation_Apply_Ruleset(); Validation_Apply_Ruleset();
@ -2390,7 +2406,7 @@ void CLNQ_ConnectionlessPacket(void)
total_loading_size = 100; total_loading_size = 100;
current_loading_size = 0; current_loading_size = 0;
loading_stage = 2; SCR_SetLoadingStage(LS_CLIENT);
allowremotecmd = false; // localid required now for remote cmds allowremotecmd = false; // localid required now for remote cmds
@ -3376,19 +3392,19 @@ void Host_Frame (double time)
// update audio // update audio
#ifdef CSQC_DAT #ifdef CSQC_DAT
if (CSQC_SettingListener()) if (!CSQC_SettingListener())
S_ExtraUpdate();
else
#endif #endif
if (cls.state == ca_active)
{ {
if (cls.protocol == CP_QUAKE3) if (cls.state == ca_active)
S_ExtraUpdate(); {
if (cls.protocol != CP_QUAKE3)
S_UpdateListener (r_origin, vpn, vright, vup, false);
}
else else
S_UpdateListener (r_origin, vpn, vright, vup, false); S_UpdateListener (vec3_origin, vec3_origin, vec3_origin, vec3_origin, false);
} }
else
S_UpdateListener (vec3_origin, vec3_origin, vec3_origin, vec3_origin, false); S_ExtraUpdate ();
CDAudio_Update(); CDAudio_Update();
@ -3590,10 +3606,6 @@ void Host_Init (quakeparms_t *parms)
Cbuf_Execute (); //if the server initialisation causes a problem, give it a place to abort to Cbuf_Execute (); //if the server initialisation causes a problem, give it a place to abort to
Cmd_StuffCmds();
Cbuf_Execute (); //if the server initialisation causes a problem, give it a place to abort to
//assuming they didn't use any waits in their config (fools) //assuming they didn't use any waits in their config (fools)
//the configs should be fully loaded. //the configs should be fully loaded.
@ -3626,6 +3638,11 @@ void Host_Init (quakeparms_t *parms)
if (COM_CheckParm ("-current")) if (COM_CheckParm ("-current"))
Cvar_Set(Cvar_FindVar("vid_desktopsettings"), "1"); Cvar_Set(Cvar_FindVar("vid_desktopsettings"), "1");
//now exec their commandline
Cmd_StuffCmds();
Cbuf_Execute (); //if the server initialisation causes a problem, give it a place to abort to
Cvar_ApplyLatches(CVAR_RENDERERLATCH); Cvar_ApplyLatches(CVAR_RENDERERLATCH);
#ifndef NPQTV #ifndef NPQTV
@ -3686,6 +3703,14 @@ Con_TPrintf (TL_NL);
"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. " "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. "
"\n" "\n"
"See the GNU General Public License for more details.\n"); "See the GNU General Public License for more details.\n");
if (!*cls.servername)
if (!sv.state)
{
if (qrenderer > QR_NONE)
M_ToggleMenu_f();
//Con_ForceActiveNow();
}
} }

View File

@ -370,7 +370,7 @@ void CL_GetDownloadSizes(unsigned int *filecount, unsigned int *totalsize, qbool
*somesizesunknown = false; *somesizesunknown = false;
for(dl = cl.downloadlist; dl; dl = dl->next) for(dl = cl.downloadlist; dl; dl = dl->next)
{ {
*filecount++; *filecount += 1;
if (dl->flags & DLLF_SIZEUNKNOWN) if (dl->flags & DLLF_SIZEUNKNOWN)
*somesizesunknown = true; *somesizesunknown = true;
else else
@ -399,7 +399,7 @@ void CL_DisenqueDownload(char *filename)
} }
else else
{ {
for (dl = cl.downloadlist->next; dl->next; dl = dl->next) for (dl = cl.downloadlist; dl->next; dl = dl->next)
{ {
if (!strcmp(dl->next->name, filename)) if (!strcmp(dl->next->name, filename))
{ {
@ -733,8 +733,7 @@ static qboolean CL_CheckModelResources (char *name)
Model_NextDownload Model_NextDownload
================= =================
*/ */
void Sound_NextDownload (void); void Model_CheckDownloads (void)
void Model_NextDownload (void)
{ {
// char *twf; // char *twf;
char *s; char *s;
@ -743,14 +742,6 @@ void Model_NextDownload (void)
// Con_TPrintf (TLC_CHECKINGMODELS); // Con_TPrintf (TLC_CHECKINGMODELS);
/* if (cls.downloadnumber == 0)
{
Con_TPrintf (TLC_CHECKINGMODELS);
cls.downloadnumber = 1;
cl.worldmodel = NULL;
}
*/
#ifdef Q2CLIENT #ifdef Q2CLIENT
if (cls.protocol == CP_QUAKE2) if (cls.protocol == CP_QUAKE2)
{ {
@ -785,22 +776,16 @@ void Model_NextDownload (void)
CL_CheckOrEnqueDownloadFile(s, s, (i==1)?DLLF_REQUIRED:0); //world is required to be loaded. CL_CheckOrEnqueDownloadFile(s, s, (i==1)?DLLF_REQUIRED:0); //world is required to be loaded.
CL_CheckModelResources(s); CL_CheckModelResources(s);
} }
CL_AllowIndependantSendCmd(false); //stop it now, the indep stuff *could* require model tracing.
Hunk_Check (); // make sure nothing is hurt
cl.sendprespawn = true;
} }
int CL_LoadModels(int stage) int CL_LoadModels(int stage, qboolean dontactuallyload)
{ {
extern model_t *loadmodel; extern model_t *loadmodel;
int i; int i;
float giveuptime = Sys_DoubleTime()+0.1; //small things get padded into a single frame float giveuptime = Sys_DoubleTime()+0.1; //small things get padded into a single frame
#define atstage() ((cl.contentstage == stage++)?++cl.contentstage:false) #define atstage() ((cl.contentstage == stage++ && !dontactuallyload)?++cl.contentstage:false)
#define endstage() if (giveuptime<Sys_DoubleTime()) return -1; #define endstage() if (giveuptime<Sys_DoubleTime()) return -1;
pmove.numphysent = 0; pmove.numphysent = 0;
@ -995,13 +980,13 @@ int CL_LoadModels(int stage)
return stage; return stage;
} }
int CL_LoadSounds(int stage) int CL_LoadSounds(int stage, qboolean dontactuallyload)
{ {
int i; int i;
float giveuptime = Sys_DoubleTime()+0.1; //small things get padded into a single frame float giveuptime = Sys_DoubleTime()+0.1; //small things get padded into a single frame
#define atstage() ((cl.contentstage == stage++)?++cl.contentstage:false) //#define atstage() ((cl.contentstage == stage++)?++cl.contentstage:false)
#define endstage() if (giveuptime<Sys_DoubleTime()) return -1; //#define endstage() if (giveuptime<Sys_DoubleTime()) return -1;
for (i=1 ; i<MAX_SOUNDS ; i++) for (i=1 ; i<MAX_SOUNDS ; i++)
{ {
@ -1027,7 +1012,7 @@ int CL_LoadSounds(int stage)
Sound_NextDownload Sound_NextDownload
================= =================
*/ */
void Sound_NextDownload (void) void Sound_CheckDownloads (void)
{ {
char mangled[512]; char mangled[512];
char *s; char *s;
@ -1061,7 +1046,10 @@ void Sound_NextDownload (void)
; i++) ; i++)
{ {
s = cl.sound_name[i]; s = cl.sound_name[i];
if (*s == '*') if (*s == '*') //q2 sexed sound
continue;
if (!S_HaveOutput())
continue; continue;
//check without the sound/ prefix //check without the sound/ prefix
@ -1089,40 +1077,6 @@ void Sound_NextDownload (void)
//download the one the server said. //download the one the server said.
CL_CheckOrEnqueDownloadFile(s, NULL, 0); CL_CheckOrEnqueDownloadFile(s, NULL, 0);
} }
// done with sounds, request models now
memset (cl.model_precache, 0, sizeof(cl.model_precache));
cl_playerindex = -1;
cl_h_playerindex = -1;
cl_spikeindex = -1;
cl_flagindex = -1;
cl_rocketindex = -1;
cl_grenadeindex = -1;
cl_gib1index = -1;
cl_gib2index = -1;
cl_gib3index = -1;
#ifdef Q2CLIENT
if (cls.protocol == CP_QUAKE2)
{
Model_NextDownload();
}
else
#endif
{
if (cls.demoplayback == DPB_EZTV)
{
if (CL_RemoveClientCommands("qtvmodellist"))
Con_Printf("Multiple modellists\n");
CL_SendClientCommand (true, "qtvmodellist %i 0", cl.servercount);
}
else
{
if (CL_RemoveClientCommands("modellist"))
Con_Printf("Multiple modellists\n");
// CL_SendClientCommand ("modellist %i 0", cl.servercount);
CL_SendClientCommand (true, modellist_name, cl.servercount, 0);
}
}
} }
/* /*
@ -1141,6 +1095,8 @@ void CL_RequestNextDownload (void)
if (cl.downloadlist) if (cl.downloadlist)
{ {
downloadlist_t *dl; downloadlist_t *dl;
//download required downloads first
for (dl = cl.downloadlist; dl; dl = dl->next) for (dl = cl.downloadlist; dl; dl = dl->next)
{ {
if (dl->flags & DLLF_REQUIRED) if (dl->flags & DLLF_REQUIRED)
@ -1167,11 +1123,24 @@ void CL_RequestNextDownload (void)
if (cl.sendprespawn) if (cl.sendprespawn)
{ // get next signon phase { // get next signon phase
extern int total_loading_size, current_loading_size;
if (!cl.contentstage)
{
stage = 0;
stage = CL_LoadModels(stage, true);
stage = CL_LoadSounds(stage, true);
total_loading_size = stage;
cl.contentstage = 0;
}
stage = 0; stage = 0;
stage = CL_LoadModels(stage); stage = CL_LoadModels(stage, false);
current_loading_size = cl.contentstage;
if (stage < 0) if (stage < 0)
return; //not yet return; //not yet
stage = CL_LoadSounds(stage); stage = CL_LoadSounds(stage, false);
current_loading_size = cl.contentstage;
if (stage < 0) if (stage < 0)
return; return;
@ -1182,27 +1151,29 @@ void CL_RequestNextDownload (void)
#warning timedemo timer should start here #warning timedemo timer should start here
#endif #endif
if (!cl.worldmodel || cl.worldmodel->needload)
{
Con_Printf("\n\n-------------\nCouldn't download %s - cannot fully connect\n", cl.worldmodel->name);
SCR_SetLoadingStage(LS_NONE);
return;
}
#ifdef Q2CLIENT #ifdef Q2CLIENT
if (cls.protocol == CP_QUAKE2) if (cls.protocol == CP_QUAKE2)
{ {
Skin_NextDownload(); Skin_NextDownload();
SCR_SetLoadingStage(LS_NONE);
CL_SendClientCommand(true, "begin %i\n", cl.servercount); CL_SendClientCommand(true, "begin %i\n", cl.servercount);
} }
else else
#endif #endif
{ {
if (!cl.worldmodel || cl.worldmodel->needload)
{
Con_Printf("\n\n-------------\nCouldn't download %s - cannot fully connect\n", cl.worldmodel->name);
return;
}
if (cls.demoplayback == DPB_EZTV) if (cls.demoplayback == DPB_EZTV)
{ {
if (CL_RemoveClientCommands("qtvspawn")) if (CL_RemoveClientCommands("qtvspawn"))
Con_Printf("Multiple prespawns\n"); Con_Printf("Multiple prespawns\n");
CL_SendClientCommand(true, "qtvspawn %i 0 %i", cl.servercount, cl.worldmodel->checksum2); CL_SendClientCommand(true, "qtvspawn %i 0 %i", cl.servercount, cl.worldmodel->checksum2);
SCR_SetLoadingStage(LS_NONE);
} }
else else
{ {
@ -1943,6 +1914,21 @@ qboolean CL_StartUploadFile(char *filename)
float nextdemotime; float nextdemotime;
#endif #endif
void CL_ClearParseState(void)
{
// done with sounds, request models now
memset (cl.model_precache, 0, sizeof(cl.model_precache));
cl_playerindex = -1;
cl_h_playerindex = -1;
cl_spikeindex = -1;
cl_flagindex = -1;
cl_rocketindex = -1;
cl_grenadeindex = -1;
cl_gib1index = -1;
cl_gib2index = -1;
cl_gib3index = -1;
}
/* /*
================== ==================
CL_ParseServerData CL_ParseServerData
@ -1962,6 +1948,7 @@ void CL_ParseServerData (void)
// wipe the client_state_t struct // wipe the client_state_t struct
// //
SCR_SetLoadingStage(LS_CLIENT);
SCR_BeginLoadingPlaque(); SCR_BeginLoadingPlaque();
// parse protocol version number // parse protocol version number
@ -2164,6 +2151,7 @@ void CLQ2_ParseServerData (void)
// //
// wipe the client_state_t struct // wipe the client_state_t struct
// //
SCR_SetLoadingStage(LS_CLIENT);
SCR_BeginLoadingPlaque(); SCR_BeginLoadingPlaque();
// CL_ClearState (); // CL_ClearState ();
cls.state = ca_onserver; cls.state = ca_onserver;
@ -2264,6 +2252,7 @@ void CLNQ_ParseServerData(void) //Doesn't change gamedir - use with caution.
int protover; int protover;
if (developer.value) if (developer.value)
Con_TPrintf (TLC_GOTSVDATAPACKET); Con_TPrintf (TLC_GOTSVDATAPACKET);
SCR_SetLoadingStage(LS_CLIENT);
CL_ClearState (); CL_ClearState ();
Stats_NewMap(); Stats_NewMap();
Cvar_ForceCallback(Cvar_FindVar("r_particlesdesc")); Cvar_ForceCallback(Cvar_FindVar("r_particlesdesc"));
@ -2661,7 +2650,32 @@ void CL_ParseSoundlist (qboolean lots)
return; return;
} }
Sound_NextDownload (); #ifdef Q2CLIENT
if (cls.protocol == CP_QUAKE2)
{
CL_AllowIndependantSendCmd(false); //stop it now, the indep stuff *could* require model tracing.
Hunk_Check (); // make sure nothing is hurt
cl.sendprespawn = true;
}
else
#endif
{
if (cls.demoplayback == DPB_EZTV)
{
if (CL_RemoveClientCommands("qtvmodellist"))
Con_Printf("Multiple modellists\n");
CL_SendClientCommand (true, "qtvmodellist %i 0", cl.servercount);
}
else
{
if (CL_RemoveClientCommands("modellist"))
Con_Printf("Multiple modellists\n");
// CL_SendClientCommand ("modellist %i 0", cl.servercount);
CL_SendClientCommand (true, modellist_name, cl.servercount, 0);
}
}
} }
/* /*
@ -2731,7 +2745,14 @@ void CL_ParseModellist (qboolean lots)
return; return;
} }
Model_NextDownload (); Model_CheckDownloads();
CL_AllowIndependantSendCmd(false); //stop it now, the indep stuff *could* require model tracing.
Hunk_Check (); // make sure nothing is hurt
//set the flag to load models and send prespawn
cl.sendprespawn = true;
} }
void CL_ProcessUserInfo (int slot, player_info_t *player); void CL_ProcessUserInfo (int slot, player_info_t *player);
@ -2950,8 +2971,12 @@ void CL_ParseBaseline2 (void)
void CLQ2_Precache_f (void) void CLQ2_Precache_f (void)
{ {
Model_CheckDownloads();
Sound_CheckDownloads();
cl.contentstage = 0;
cl.sendprespawn = true; cl.sendprespawn = true;
Sound_NextDownload();
#ifdef VM_CG #ifdef VM_CG
CG_Start(); CG_Start();
#endif #endif
@ -4424,7 +4449,8 @@ void CL_ParsePrecache(void)
if (i >= 1 && i < MAX_SOUNDS) if (i >= 1 && i < MAX_SOUNDS)
{ {
sfx_t *sfx; sfx_t *sfx;
CL_CheckOrEnqueDownloadFile(va("sound/%s", s), NULL, 0); if (S_HaveOutput())
CL_CheckOrEnqueDownloadFile(va("sound/%s", s), NULL, 0);
sfx = S_PrecacheSound (s); sfx = S_PrecacheSound (s);
if (!sfx) if (!sfx)
Con_Printf("svc_precache: S_PrecacheSound(\"%s\") failed\n", s); Con_Printf("svc_precache: S_PrecacheSound(\"%s\") failed\n", s);

View File

@ -25,7 +25,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "glquake.h"//would prefer not to have this #include "glquake.h"//would prefer not to have this
#endif #endif
//name of the current backdrop for the loading screen
char levelshotname[MAX_QPATH];
void RSpeedShow(void) void RSpeedShow(void)
@ -1442,28 +1443,32 @@ SCR_DrawLoading
*/ */
int total_loading_size, current_loading_size, loading_stage; int total_loading_size, current_loading_size, loading_stage;
int CL_DownloadRate(void);
int SCR_GetLoadingStage(void)
{
return loading_stage;
}
void SCR_SetLoadingStage(int stage)
{
loading_stage = stage;
}
char levelshotname[MAX_QPATH];
void SCR_DrawLoading (void) void SCR_DrawLoading (void)
{ {
int sizex, x, y;
mpic_t *pic; mpic_t *pic;
char *s;
int qdepth;
int h2depth;
int mtype = M_GameType();
y = vid.height/2;
if (!scr_drawloading) qdepth = COM_FDepthFile("gfx/loading.lmp", true);
return; h2depth = COM_FDepthFile("gfx/menu/loading.lmp", true);
if (*levelshotname) if (qdepth < h2depth || h2depth > 0xffffff)
{
if(Draw_ScalePic)
Draw_ScalePic(0, 0, vid.width, vid.height, Draw_SafeCachePic (levelshotname));
else
Draw_ConsoleBackground(vid.height);
}
else
Draw_ConsoleBackground(vid.height);
if (COM_FDepthFile("gfx/loading.lmp", true) < COM_FDepthFile("gfx/menu/loading.lmp", true))
{ //quake files { //quake files
int sizex, x, y;
pic = Draw_SafeCachePic ("gfx/loading.lmp"); pic = Draw_SafeCachePic ("gfx/loading.lmp");
if (pic) if (pic)
@ -1478,12 +1483,14 @@ void SCR_DrawLoading (void)
{ {
x = (vid.width/2) - 96; x = (vid.width/2) - 96;
y = (vid.height/2) - 8; y = (vid.height/2) - 8;
Draw_String((vid.width-7*8)/2, y-16, "Loading");
} }
if (loading_stage) if (loading_stage > LS_CONNECTION)
{ {
sizex = current_loading_size * 192 / total_loading_size; sizex = current_loading_size * 192 / total_loading_size;
if (loading_stage == 1) if (loading_stage == LS_SERVER)
{ {
Draw_FillRGB(x, y, sizex, 16, 1.0, 0.0, 0.0); Draw_FillRGB(x, y, sizex, 16, 1.0, 0.0, 0.0);
Draw_FillRGB(x+sizex, y, 192-sizex, 16, 0.0, 0.0, 0.0); Draw_FillRGB(x+sizex, y, 192-sizex, 16, 0.0, 0.0, 0.0);
@ -1495,8 +1502,10 @@ void SCR_DrawLoading (void)
} }
Draw_String(x+8, y+4, va("Loading %s... %i%%", Draw_String(x+8, y+4, va("Loading %s... %i%%",
(loading_stage == 1) ? "server" : "client", (loading_stage == LS_SERVER) ? "server" : "client",
current_loading_size * 100 / total_loading_size)); current_loading_size * 100 / total_loading_size));
y += 16;
} }
} }
else else
@ -1512,7 +1521,7 @@ void SCR_DrawLoading (void)
offset = (vid.width - pic->width)/2; offset = (vid.width - pic->width)/2;
Draw_TransPic (offset , 0, pic); Draw_TransPic (offset , 0, pic);
if (loading_stage == 0) if (loading_stage == LS_NONE)
return; return;
if (total_loading_size) if (total_loading_size)
@ -1520,7 +1529,7 @@ void SCR_DrawLoading (void)
else else
size = 0; size = 0;
if (loading_stage == 1) if (loading_stage == LS_CLIENT)
count = size; count = size;
else else
count = 106; count = 106;
@ -1529,7 +1538,7 @@ void SCR_DrawLoading (void)
Draw_Fill (offset+42, 87+1, count, 4, 138); Draw_Fill (offset+42, 87+1, count, 4, 138);
Draw_Fill (offset+42, 87+5, count, 1, 136); Draw_Fill (offset+42, 87+5, count, 1, 136);
if (loading_stage == 2) if (loading_stage == LS_SERVER)
count = size; count = size;
else else
count = 0; count = 0;
@ -1537,11 +1546,57 @@ void SCR_DrawLoading (void)
Draw_Fill (offset+42, 97, count, 1, 168); Draw_Fill (offset+42, 97, count, 1, 168);
Draw_Fill (offset+42, 97+1, count, 4, 170); Draw_Fill (offset+42, 97+1, count, 4, 170);
Draw_Fill (offset+42, 97+5, count, 1, 168); Draw_Fill (offset+42, 97+5, count, 1, 168);
y = 104;
} }
} }
SCR_SetUpToDrawConsole(); if (cl.downloadlist || cls.downloadmethod)
SCR_DrawConsole(!!*levelshotname); {
unsigned int fcount;
unsigned int tsize;
qboolean sizeextra;
x = vid.conwidth/2 - 160;
CL_GetDownloadSizes(&fcount, &tsize, &sizeextra);
//downloading files?
if (cls.downloadmethod)
Draw_String(x+8, y+4, va("Downloading %s... %i%%",
cls.downloadname,
cls.downloadpercent));
if (tsize > 1024*1024*16)
{
Draw_String(x+8, y+8+4, va("%5ukbps %8umb%s remaining (%i files)",
(unsigned int)(CL_DownloadRate()/1000.0f),
tsize/(1024*1024),
sizeextra?"+":"",
fcount));
}
else
{
Draw_String(x+8, y+8+4, va("%5ukbps %8ukb%s remaining (%i files)",
(unsigned int)(CL_DownloadRate()/1000.0f),
tsize/1024,
sizeextra?"+":"",
fcount));
}
y+= 16+8;
}
else if (CL_TryingToConnect())
{
char dots[4];
s = CL_TryingToConnect();
x = (vid.width - (strlen(s)+15)*8) / 2;
dots[0] = '.';
dots[1] = '.';
dots[2] = '.';
dots[(int)realtime & 3] = 0;
Draw_String(x, y+4, va("Connecting to: %s%s", s, dots));
}
} }
void SCR_BeginLoadingPlaque (void) void SCR_BeginLoadingPlaque (void)
@ -1636,7 +1691,7 @@ void SCR_SetUpToDrawConsole (void)
// decide on the height of the console // decide on the height of the console
if (!scr_disabled_for_loading) if (!scr_disabled_for_loading)
{ {
if (cls.state != ca_active && !Media_PlayingFullScreen() /*if (cls.state != ca_active && !Media_PlayingFullScreen()
#ifdef TEXTEDITOR #ifdef TEXTEDITOR
&& !editoractive && !editoractive
#endif #endif
@ -1649,6 +1704,10 @@ void SCR_SetUpToDrawConsole (void)
scr_con_current = scr_conlines; scr_con_current = scr_conlines;
scr_con_forcedraw = true; scr_con_forcedraw = true;
} }
else */
scr_con_forcedraw = false;
if ((key_dest == key_console || key_dest == key_game) && !cl.sendprespawn && cl.worldmodel && cl.worldmodel->needload)
Con_ForceActiveNow();
else if (key_dest == key_console || scr_chatmode) else if (key_dest == key_console || scr_chatmode)
{ {
scr_conlines = vid.height*scr_consize.value; // half screen scr_conlines = vid.height*scr_consize.value; // half screen
@ -1662,14 +1721,14 @@ void SCR_SetUpToDrawConsole (void)
if (scr_conlines < scr_con_current) if (scr_conlines < scr_con_current)
{ {
scr_con_current -= scr_conspeed.value*host_frametime; scr_con_current -= scr_conspeed.value*host_frametime * (vid.height/320.0f);
if (scr_conlines > scr_con_current) if (scr_conlines > scr_con_current)
scr_con_current = scr_conlines; scr_con_current = scr_conlines;
} }
else if (scr_conlines > scr_con_current) else if (scr_conlines > scr_con_current)
{ {
scr_con_current += scr_conspeed.value*host_frametime; scr_con_current += scr_conspeed.value*host_frametime * (vid.height/320.0f);
if (scr_conlines < scr_con_current) if (scr_conlines < scr_con_current)
scr_con_current = scr_conlines; scr_con_current = scr_conlines;
} }
@ -1707,8 +1766,6 @@ SCR_DrawConsole
*/ */
void SCR_DrawConsole (qboolean noback) void SCR_DrawConsole (qboolean noback)
{ {
if (key_dest == key_menu)
return;
if (scr_con_current) if (scr_con_current)
{ {
scr_copyeverything = 1; scr_copyeverything = 1;
@ -2295,9 +2352,9 @@ void SCR_DrawTwoDimensional(int uimenu, qboolean nohud)
SCR_DrawNotifyString (); SCR_DrawNotifyString ();
scr_copyeverything = true; scr_copyeverything = true;
} }
else if (scr_drawloading) else if (scr_drawloading || loading_stage)
{ {
SCR_DrawLoading (); SCR_DrawLoading();
if (!nohud) if (!nohud)
{ {
@ -2313,20 +2370,16 @@ void SCR_DrawTwoDimensional(int uimenu, qboolean nohud)
} }
SCR_ShowPics_Draw(); SCR_ShowPics_Draw();
} }
else if (cl.intermission == 1 && key_dest == key_game) else if (cl.intermission == 1)
{ {
Sbar_IntermissionOverlay (); Sbar_IntermissionOverlay ();
M_Draw (uimenu);
#ifdef MENU_DAT
MP_Draw();
#endif
} }
else if (cl.intermission == 2 && key_dest == key_game) else if (cl.intermission == 2)
{ {
Sbar_FinaleOverlay (); Sbar_FinaleOverlay ();
SCR_CheckDrawCenterString (); SCR_CheckDrawCenterString ();
} }
else if (cl.intermission == 3 && key_dest == key_game) else if (cl.intermission == 3)
{ {
} }
else else
@ -2363,16 +2416,19 @@ void SCR_DrawTwoDimensional(int uimenu, qboolean nohud)
if (qrenderer == QR_OPENGL) if (qrenderer == QR_OPENGL)
qglTexEnvi ( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); qglTexEnvi ( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
#endif #endif
#ifdef TEXTEDITOR
if (editoractive)
Editor_Draw();
#endif
M_Draw (uimenu);
#ifdef MENU_DAT
MP_Draw();
#endif
SCR_DrawConsole (false);
} }
#ifdef TEXTEDITOR
if (editoractive)
Editor_Draw();
#endif
SCR_DrawConsole (false);
M_Draw (uimenu);
#ifdef MENU_DAT
MP_Draw();
#endif
RSpeedEnd(RSPEED_2D); RSpeedEnd(RSPEED_2D);
} }

View File

@ -530,6 +530,9 @@ void CL_AddBeam (int tent, int ent, vec3_t start, vec3_t end) //fixme: use TE_ n
#endif #endif
} }
if (!m || m->needload)
CL_CheckOrEnqueDownloadFile(m->name, NULL, 0);
// save end position for truelightning // save end position for truelightning
if (ent) if (ent)
{ {

View File

@ -950,6 +950,11 @@ qboolean CSQC_KeyPress(int key, qboolean down);
int CSQC_StartSound(int entnum, int channel, char *soundname, vec3_t pos, float vol, float attenuation); int CSQC_StartSound(int entnum, int channel, char *soundname, vec3_t pos, float vol, float attenuation);
void CSQC_ParseEntities(void); void CSQC_ParseEntities(void);
qboolean CSQC_SettingListener(void); qboolean CSQC_SettingListener(void);
qboolean CSQC_DeltaPlayer(int playernum, player_state_t *state);
void CSQC_DeltaStart(float time);
qboolean CSQC_DeltaUpdate(entity_state_t *src);
void CSQC_DeltaEnd(void);
#endif #endif
// //

View File

@ -329,11 +329,7 @@ void Con_ToggleConsole_f (void)
{ {
if (m_state) if (m_state)
key_dest = key_menu; key_dest = key_menu;
else if (cls.state == ca_active || Media_PlayingFullScreen() else
#ifdef VM_UI
|| UI_MenuState()
#endif
)
key_dest = key_game; key_dest = key_game;
} }
else else
@ -495,6 +491,11 @@ void Con_CheckResize (void)
Con_ResizeCon (c); Con_ResizeCon (c);
} }
void Con_ForceActiveNow(void)
{
key_dest = key_console;
scr_conlines = scr_con_current = vid.height;
}
/* /*
================ ================
@ -910,7 +911,7 @@ void Con_DrawInput (void)
int si, x; int si, x;
if (key_dest != key_console && cls.state == ca_active) if (key_dest != key_console && con_current->vislines != vid.height)
return; // don't draw anything (always draw if not active) return; // don't draw anything (always draw if not active)
if (!con_current->linebuffered) if (!con_current->linebuffered)
@ -980,7 +981,16 @@ void Con_DrawInput (void)
} //that's the default compleation applied } //that's the default compleation applied
maskedtext[i] = '\0'; maskedtext[i] = '\0';
maskedtext[i+1] = '\0'; //just in case maskedtext[i+1] = '\0'; //just in case i==key_linepos
x = 8;
y = con_current->vislines-22;
if (i >= con_current->linewidth) //work out the start point
si = i - con_current->linewidth;
else
si = 0;
if (con_current->commandcompletion) if (con_current->commandcompletion)
{ {
@ -989,18 +999,24 @@ void Con_DrawInput (void)
for (p = 1; (maskedtext[p]&255)>' '; p++) for (p = 1; (maskedtext[p]&255)>' '; p++)
maskedtext[p] = (maskedtext[p]&255) | (COLOR_YELLOW<<CON_FGSHIFT); maskedtext[p] = (maskedtext[p]&255) | (COLOR_YELLOW<<CON_FGSHIFT);
} }
else
Plug_SpellCheckMaskedText(maskedtext+1, i-1, x, y, 8);
if (key_linepos == i) //cursor is at end if (key_linepos == i) //cursor is at end
{ {
x = text[1] == '/'?2:1; int cmdstart;
fname = Cmd_CompleteCommand(text+x, true, true, con_commandmatch); cmdstart = text[1] == '/'?2:1;
fname = Cmd_CompleteCommand(text+cmdstart, true, true, con_commandmatch);
if (fname) //we can compleate it to: if (fname) //we can compleate it to:
{ {
for (p = i-x; fname[p]>' '; p++) for (p = i-cmdstart; fname[p]>' '; p++)
maskedtext[p+x] = (unsigned char)fname[p] | (COLOR_GREEN<<CON_FGSHIFT); maskedtext[p+cmdstart] = (unsigned char)fname[p] | (COLOR_GREEN<<CON_FGSHIFT);
maskedtext[p+x] = '\0'; maskedtext[p+cmdstart] = '\0';
} }
} }
} }
else
Plug_SpellCheckMaskedText(maskedtext+1, i-1, x, y, 8, si, con_current->linewidth);
#ifdef _WIN32 #ifdef _WIN32
if (ActiveApp) if (ActiveApp)
@ -1010,14 +1026,7 @@ void Con_DrawInput (void)
maskedtext[key_linepos] = 11|CON_WHITEMASK; //make it blink maskedtext[key_linepos] = 11|CON_WHITEMASK; //make it blink
} }
if (i >= con_current->linewidth) //work out the start point for (i=0,p=0; x<=con_current->linewidth*8 ; p++) //draw it
si = i - con_current->linewidth;
else
si = 0;
y = con_current->vislines-22;
for (i=0,p=0,x=8; x<=con_current->linewidth*8 ; p++) //draw it
{ {
if (!maskedtext[p]) if (!maskedtext[p])
break; break;
@ -1302,6 +1311,7 @@ void Con_DrawConsole (int lines, qboolean noback)
unsigned char progresspercenttext[128]; unsigned char progresspercenttext[128];
char *progresstext; char *progresstext;
int progresspercent; int progresspercent;
extern qboolean scr_con_forcedraw;
#ifdef RUNTIMELIGHTING #ifdef RUNTIMELIGHTING
extern model_t *lightmodel; extern model_t *lightmodel;
@ -1320,7 +1330,7 @@ void Con_DrawConsole (int lines, qboolean noback)
// draw the background // draw the background
if (!noback) if (!noback)
Draw_ConsoleBackground (lines); Draw_ConsoleBackground (0, lines, scr_con_forcedraw);
con_current->unseentext = false; con_current->unseentext = false;

View File

@ -210,6 +210,10 @@ keyname_t keynames[] =
{"SEMICOLON", ';'}, // because a raw semicolon seperates commands {"SEMICOLON", ';'}, // because a raw semicolon seperates commands
{"TILDE", '~'},
{"BACKQUOTE", '`'},
{"BACKSLASH", '\\'},
{NULL,0} {NULL,0}
}; };
@ -1378,8 +1382,6 @@ qboolean Key_MouseShouldBeFree(void)
} }
if (key_dest == key_console) if (key_dest == key_console)
return true; return true;
if (key_dest == key_game && cls.state < ca_connected)
return true;
#ifdef VM_UI #ifdef VM_UI
if (UI_MenuState()) if (UI_MenuState())
@ -1715,6 +1717,8 @@ void Key_Event (int key, qboolean down)
#endif #endif
case key_game: case key_game:
case key_console: case key_console:
if ((key >= ' ' && key <= 127) || key == K_ENTER || key == K_TAB)
key_dest = key_console;
Key_Console (key); Key_Console (key);
break; break;
default: default:

View File

@ -921,7 +921,7 @@ qboolean Media_WinAvi_DecodeFrame(cin_t *cin, qboolean nosound)
#ifdef SWQUAKE #ifdef SWQUAKE
D_EnableBackBufferAccess (); // of all overlay stuff if drawing directly D_EnableBackBufferAccess (); // of all overlay stuff if drawing directly
#endif #endif
Draw_ConsoleBackground(vid.height); Draw_ConsoleBackground(0, vid.height, true);
Draw_String(0, 0, "Video stream is corrupt\n"); Draw_String(0, 0, "Video stream is corrupt\n");
} }
else else

View File

@ -1010,7 +1010,6 @@ void M_Draw (int uimenu)
#ifdef VM_UI #ifdef VM_UI
UI_DrawMenu(); UI_DrawMenu();
#endif #endif
S_ExtraUpdate ();
} }
if (m_state != m_complex) if (m_state != m_complex)
@ -1029,15 +1028,7 @@ void M_Draw (int uimenu)
if ((!menu_script || scr_con_current) && !m_recursiveDraw) if ((!menu_script || scr_con_current) && !m_recursiveDraw)
{ {
scr_copyeverything = 1; scr_copyeverything = 1;
Draw_FadeScreen ();
if (scr_con_current)
{
Draw_ConsoleBackground (vid.height);
S_ExtraUpdate ();
}
else
Draw_FadeScreen ();
scr_fullupdate = 0; scr_fullupdate = 0;
} }
else else
@ -1080,8 +1071,6 @@ void M_Draw (int uimenu)
return; return;
#endif #endif
} }
S_ExtraUpdate ();
} }
@ -1148,6 +1137,7 @@ void M_Keyup (int key)
// Generic function to choose which game menu to draw // Generic function to choose which game menu to draw
int M_GameType (void) int M_GameType (void)
{ {
int cached;
int q1, h2, q2; int q1, h2, q2;
q1 = COM_FDepthFile("gfx/sp_menu.lmp", true); q1 = COM_FDepthFile("gfx/sp_menu.lmp", true);
@ -1155,16 +1145,13 @@ int M_GameType (void)
q2 = COM_FDepthFile("pics/m_banner_game.pcx", true); q2 = COM_FDepthFile("pics/m_banner_game.pcx", true);
if (q2 < h2 && q2 < q1) if (q2 < h2 && q2 < q1)
{ //AND QUAKE 2 WINS!!! cached = MGT_QUAKE2;
return MGT_QUAKE2;
}
else if (h2 < q1) else if (h2 < q1)
{ //AND THE WINNER IS HEXEN 2!!! cached = MGT_HEXEN2;
return MGT_HEXEN2; else
} cached = MGT_QUAKE1;
//QUAKE 1 WINS BY DEFAULT! return cached;
return MGT_QUAKE1;
} }

View File

@ -393,6 +393,7 @@ void MP_RegisterCvarsAndCmds(void);
void MP_Keydown(int key); void MP_Keydown(int key);
void MP_Keyup(int key); void MP_Keyup(int key);
#define MGT_BAD ~0
#define MGT_QUAKE1 0 #define MGT_QUAKE1 0
#define MGT_HEXEN2 1 #define MGT_HEXEN2 1
#define MGT_QUAKE2 2 #define MGT_QUAKE2 2

View File

@ -63,7 +63,7 @@ extern void (*Draw_ScalePic) (int x, int y, int width, int height, mpic_t *
extern void (*Draw_SubPic) (int x, int y, mpic_t *pic, int srcx, int srcy, int width, int height); extern void (*Draw_SubPic) (int x, int y, mpic_t *pic, int srcx, int srcy, int width, int height);
extern void (*Draw_TransPic) (int x, int y, mpic_t *pic); extern void (*Draw_TransPic) (int x, int y, mpic_t *pic);
extern void (*Draw_TransPicTranslate) (int x, int y, int width, int height, qbyte *image, qbyte *translation); extern void (*Draw_TransPicTranslate) (int x, int y, int width, int height, qbyte *image, qbyte *translation);
extern void (*Draw_ConsoleBackground) (int lines); extern void (*Draw_ConsoleBackground) (int firstline, int lastline, qboolean forceopaque);
extern void (*Draw_EditorBackground) (int lines); extern void (*Draw_EditorBackground) (int lines);
extern void (*Draw_TileClear) (int x, int y, int w, int h); extern void (*Draw_TileClear) (int x, int y, int w, int h);
extern void (*Draw_Fill) (int x, int y, int w, int h, unsigned int c); extern void (*Draw_Fill) (int x, int y, int w, int h, unsigned int c);
@ -178,7 +178,7 @@ typedef struct {
void (*Draw_SubPic) (int x, int y, mpic_t *pic, int srcx, int srcy, int width, int height); void (*Draw_SubPic) (int x, int y, mpic_t *pic, int srcx, int srcy, int width, int height);
void (*Draw_TransPic) (int x, int y, mpic_t *pic); void (*Draw_TransPic) (int x, int y, mpic_t *pic);
void (*Draw_TransPicTranslate) (int x, int y, int w, int h, qbyte *pic, qbyte *translation); void (*Draw_TransPicTranslate) (int x, int y, int w, int h, qbyte *pic, qbyte *translation);
void (*Draw_ConsoleBackground) (int lines); void (*Draw_ConsoleBackground) (int firstline, int lastline, qboolean forceopaque);
void (*Draw_EditorBackground) (int lines); void (*Draw_EditorBackground) (int lines);
void (*Draw_TileClear) (int x, int y, int w, int h); void (*Draw_TileClear) (int x, int y, int w, int h);
void (*Draw_Fill) (int x, int y, int w, int h, unsigned int c); void (*Draw_Fill) (int x, int y, int w, int h, unsigned int c);

View File

@ -4252,7 +4252,7 @@ float csqcdelta_time;
static csqcedict_t *csqcdelta_playerents[MAX_CLIENTS]; static csqcedict_t *csqcdelta_playerents[MAX_CLIENTS];
qboolean CLCSQC_DeltaPlayer(int playernum, player_state_t *state) qboolean CSQC_DeltaPlayer(int playernum, player_state_t *state)
{ {
func_t func; func_t func;
@ -4298,7 +4298,7 @@ qboolean CLCSQC_DeltaPlayer(int playernum, player_state_t *state)
return false; return false;
} }
void CLCSQC_DeltaStart(float time) void CSQC_DeltaStart(float time)
{ {
csqcdelta_pack_t tmp; csqcdelta_pack_t tmp;
csqcdelta_time = time; csqcdelta_time = time;
@ -4312,7 +4312,7 @@ void CLCSQC_DeltaStart(float time)
csqcdelta_pack_new.readpos = 0; csqcdelta_pack_new.readpos = 0;
csqcdelta_pack_old.readpos = 0; csqcdelta_pack_old.readpos = 0;
} }
qboolean CLCSQC_DeltaUpdate(entity_state_t *src) qboolean CSQC_DeltaUpdate(entity_state_t *src)
{ {
//FTE ensures that this function is called with increasing ent numbers each time //FTE ensures that this function is called with increasing ent numbers each time
func_t func; func_t func;
@ -4392,7 +4392,7 @@ qboolean CLCSQC_DeltaUpdate(entity_state_t *src)
return false; return false;
} }
void CLCSQC_DeltaEnd(void) void CSQC_DeltaEnd(void)
{ {
//remove any unreferenced ents stuck on the end //remove any unreferenced ents stuck on the end
while (csqcdelta_pack_old.readpos < csqcdelta_pack_old.numents) while (csqcdelta_pack_old.readpos < csqcdelta_pack_old.numents)

View File

@ -80,6 +80,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#pragma warning( 4 : 4267) //truncation from const double to float #pragma warning( 4 : 4267) //truncation from const double to float
//#pragma warning(error:4013)
#endif #endif

View File

@ -188,7 +188,7 @@ static cvar_t vid_fullscreen = SCVARF ("vid_fullscreen_embedded", "0",
static cvar_t vid_fullscreen = SCVARF ("vid_fullscreen", "1", static cvar_t vid_fullscreen = SCVARF ("vid_fullscreen", "1",
CVAR_ARCHIVE | CVAR_RENDERERLATCH); CVAR_ARCHIVE | CVAR_RENDERERLATCH);
#endif #endif
static cvar_t vid_height = SCVARF ("vid_height", "480", cvar_t vid_height = SCVARF ("vid_height", "480",
CVAR_ARCHIVE | CVAR_RENDERERLATCH); CVAR_ARCHIVE | CVAR_RENDERERLATCH);
static cvar_t vid_multisample = SCVARF ("vid_multisample", "0", static cvar_t vid_multisample = SCVARF ("vid_multisample", "0",
CVAR_ARCHIVE | CVAR_RENDERERLATCH); CVAR_ARCHIVE | CVAR_RENDERERLATCH);
@ -196,8 +196,9 @@ static cvar_t vid_refreshrate = SCVARF ("vid_displayfrequency", "0",
CVAR_ARCHIVE | CVAR_RENDERERLATCH); CVAR_ARCHIVE | CVAR_RENDERERLATCH);
static cvar_t vid_stretch = SCVARF ("vid_stretch", "1", static cvar_t vid_stretch = SCVARF ("vid_stretch", "1",
CVAR_ARCHIVE | CVAR_RENDERERLATCH); CVAR_ARCHIVE | CVAR_RENDERERLATCH);
cvar_t vid_wndalpha = SCVAR ("vid_wndalpha", "1");
//more readable defaults to match conwidth/conheight. //more readable defaults to match conwidth/conheight.
static cvar_t vid_width = SCVARF ("vid_width", "640", cvar_t vid_width = SCVARF ("vid_width", "640",
CVAR_ARCHIVE | CVAR_RENDERERLATCH); CVAR_ARCHIVE | CVAR_RENDERERLATCH);
extern cvar_t bul_backcol; extern cvar_t bul_backcol;
@ -600,6 +601,7 @@ void Renderer_Init(void)
Cvar_Register (&vid_stretch, VIDCOMMANDGROUP); Cvar_Register (&vid_stretch, VIDCOMMANDGROUP);
Cvar_Register (&_windowed_mouse, VIDCOMMANDGROUP); Cvar_Register (&_windowed_mouse, VIDCOMMANDGROUP);
Cvar_Register (&vid_renderer, VIDCOMMANDGROUP); Cvar_Register (&vid_renderer, VIDCOMMANDGROUP);
Cvar_Register (&vid_wndalpha, VIDCOMMANDGROUP);
#ifdef NPQTV #ifdef NPQTV
Cvar_Register (&vid_fullscreen_npqtv, VIDCOMMANDGROUP); Cvar_Register (&vid_fullscreen_npqtv, VIDCOMMANDGROUP);
@ -739,7 +741,7 @@ void (*Draw_ScalePic) (int x, int y, int width, int height, mpic_t *pic);
void (*Draw_SubPic) (int x, int y, mpic_t *pic, int srcx, int srcy, int width, int height); void (*Draw_SubPic) (int x, int y, mpic_t *pic, int srcx, int srcy, int width, int height);
void (*Draw_TransPic) (int x, int y, mpic_t *pic); void (*Draw_TransPic) (int x, int y, mpic_t *pic);
void (*Draw_TransPicTranslate) (int x, int y, int w, int h, qbyte *image, qbyte *translation); void (*Draw_TransPicTranslate) (int x, int y, int w, int h, qbyte *image, qbyte *translation);
void (*Draw_ConsoleBackground) (int lines); void (*Draw_ConsoleBackground) (int firstline, int lastline, qboolean forceopaque);
void (*Draw_EditorBackground) (int lines); void (*Draw_EditorBackground) (int lines);
void (*Draw_TileClear) (int x, int y, int w, int h); void (*Draw_TileClear) (int x, int y, int w, int h);
void (*Draw_Fill) (int x, int y, int w, int h, unsigned int c); void (*Draw_Fill) (int x, int y, int w, int h, unsigned int c);

View File

@ -96,3 +96,13 @@ void Draw_TextBox (int x, int y, int width, int lines);
qboolean SCR_ScreenShot (char *filename); qboolean SCR_ScreenShot (char *filename);
void SCR_DrawTwoDimensional(int uimenu, qboolean nohud); void SCR_DrawTwoDimensional(int uimenu, qboolean nohud);
enum
{
LS_NONE,
LS_CONNECTION,
LS_SERVER,
LS_CLIENT,
};
int SCR_GetLoadingStage(void);
void SCR_SetLoadingStage(int stage);

View File

@ -20,7 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "quakedef.h" #include "quakedef.h"
cvar_t baseskin = SCVAR("baseskin", "base"); cvar_t baseskin = SCVAR("baseskin", "");
cvar_t noskins = SCVAR("noskins", "0"); cvar_t noskins = SCVAR("noskins", "0");
extern cvar_t cl_teamskin; extern cvar_t cl_teamskin;
@ -537,6 +537,9 @@ void Skin_NextDownload (void)
if (strchr(sc->skin->name, ' ')) //skip over skins using a space if (strchr(sc->skin->name, ' ')) //skip over skins using a space
continue; continue;
if (!*sc->skin->name)
continue;
CL_CheckOrEnqueDownloadFile(va("skins/%s.pcx", sc->skin->name), NULL, 0); CL_CheckOrEnqueDownloadFile(va("skins/%s.pcx", sc->skin->name), NULL, 0);
} }
@ -595,6 +598,8 @@ void Skin_Skins_f (void)
Skin_NextDownload (); Skin_NextDownload ();
SCR_SetLoadingStage(LS_NONE);
CL_SendClientCommand(true, "begin %i", cl.servercount); CL_SendClientCommand(true, "begin %i", cl.servercount);
Cache_Report (); // print remaining memory Cache_Report (); // print remaining memory
} }

View File

@ -1271,7 +1271,7 @@ void S_UpdateListener(vec3_t origin, vec3_t forward, vec3_t right, vec3_t up, qb
VectorCopy(right, listener_right); VectorCopy(right, listener_right);
VectorCopy(up, listener_up); VectorCopy(up, listener_up);
if (dontmix) if (!dontmix)
{ {
S_RunCapture(); S_RunCapture();

View File

@ -114,9 +114,14 @@ void S_StartSoundDelayed(int entnum, int entchannel, sfx_t *sfx, vec3_t origin,
void S_StaticSound (sfx_t *sfx, vec3_t origin, float vol, float attenuation); void S_StaticSound (sfx_t *sfx, vec3_t origin, float vol, float attenuation);
void S_StopSound (int entnum, int entchannel); void S_StopSound (int entnum, int entchannel);
void S_StopAllSounds(qboolean clear); void S_StopAllSounds(qboolean clear);
void S_Update (vec3_t origin, vec3_t v_forward, vec3_t v_right, vec3_t v_up); void S_UpdateListener(vec3_t origin, vec3_t forward, vec3_t right, vec3_t up, qboolean dontmix);
void S_ExtraUpdate (void); void S_ExtraUpdate (void);
qboolean S_HaveOutput(void);
void S_Music_Clear(sfx_t *onlyifsample);
void S_Music_Seek(float time);
sfx_t *S_PrecacheSound (char *sample); sfx_t *S_PrecacheSound (char *sample);
void S_TouchSound (char *sample); void S_TouchSound (char *sample);
void S_ClearPrecache (void); void S_ClearPrecache (void);

View File

@ -33,7 +33,9 @@ NPNetscapeFuncs *browserfuncs;
#endif #endif
extern HWND sys_hijackwindow; extern HWND sys_parentwindow;
extern unsigned int sys_parentwidth;
extern unsigned int sys_parentheight;
HINSTANCE global_hInstance; HINSTANCE global_hInstance;
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
@ -310,6 +312,8 @@ void LoadSplashImage(struct context *ctx, vfsfile_t *f, const char *name)
free(buffer); free(buffer);
if (image) if (image)
{ {
if (ctx->splashdata)
free(ctx->splashdata);
ctx->splashdata = malloc(width*height*4); ctx->splashdata = malloc(width*height*4);
for (y = 0; y < height; y++) for (y = 0; y < height; y++)
{ {
@ -449,9 +453,9 @@ LRESULT CALLBACK MyPluginWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPar
free(str); free(str);
} }
if (sys_hijackwindow != ctx->window.window) if (sys_parentwindow != ctx->window.window)
{ {
if (!sys_hijackwindow) if (!sys_parentwindow)
{ {
switch(ctx->qtvf.connectiontype) switch(ctx->qtvf.connectiontype)
{ {
@ -472,13 +476,14 @@ LRESULT CALLBACK MyPluginWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPar
} }
} }
sys_hijackwindow = ctx->window.window; sys_parentwindow = ctx->window.window;
if (sys_hijackwindow) if (sys_parentwindow)
{ {
Cvar_SetValue(Cvar_FindVar("vid_width"), ctx->window.width); sys_parentwidth = ctx->window.width;
Cvar_SetValue(Cvar_FindVar("vid_height"), ctx->window.height); sys_parentheight = ctx->window.height;
Cmd_ExecuteString("vid_restart", RESTRICT_LOCAL); Cmd_ExecuteString("vid_restart", RESTRICT_LOCAL);
} }
} }
else else
{ {
@ -502,7 +507,7 @@ LRESULT CALLBACK MyPluginWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPar
{ {
int argc; int argc;
char *argv[16]; char *argv[16];
sys_hijackwindow = NULL; sys_parentwindow = NULL;
GetModuleFileName(global_hInstance, binaryname, sizeof(binaryname)); GetModuleFileName(global_hInstance, binaryname, sizeof(binaryname));
argv[0] = binaryname; argv[0] = binaryname;
@ -527,14 +532,14 @@ LRESULT CALLBACK MyPluginWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPar
argv[argc++] = "-basegame"; argv[argc++] = "-basegame";
argv[argc++] = ctx->gamename; argv[argc++] = ctx->gamename;
} }
sys_parentwidth = ctx->window.width;
sys_parentheight = ctx->window.height;
ctx->contextrunning = NPQTV_Sys_Startup(argc, argv); ctx->contextrunning = NPQTV_Sys_Startup(argc, argv);
Cvar_SetValue(Cvar_FindVar("vid_width"), ctx->window.width);
Cvar_SetValue(Cvar_FindVar("vid_height"), ctx->window.height);
if (*ctx->datadownload) if (*ctx->datadownload)
{ {
if (!FS_FLocateFile("default.cfg", FSLFRT_IFFOUND, NULL) || !FS_FLocateFile("gfx.wad", FSLFRT_IFFOUND, NULL)) if (!FS_FLocateFile("default.cfg", FSLFRT_IFFOUND, NULL) && !FS_FLocateFile("gfx.wad", FSLFRT_IFFOUND, NULL))
{ {
browserfuncs->geturlnotify(ctx->nppinstance, ctx->datadownload, NULL, &UnpackAndExtractPakFiles); browserfuncs->geturlnotify(ctx->nppinstance, ctx->datadownload, NULL, &UnpackAndExtractPakFiles);
ctx->waitingfordatafiles++; ctx->waitingfordatafiles++;
@ -576,7 +581,7 @@ LRESULT CALLBACK MyPluginWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPar
EndPaint(hWnd, &paint); EndPaint(hWnd, &paint);
return TRUE; return TRUE;
} }
else if (!ctx->contextrunning) else
{ {
HDC hdc; HDC hdc;
PAINTSTRUCT paint; PAINTSTRUCT paint;
@ -585,17 +590,20 @@ LRESULT CALLBACK MyPluginWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPar
hdc = BeginPaint(hWnd, &paint); hdc = BeginPaint(hWnd, &paint);
DrawWndBack(ctx, hWnd, hdc, &paint); DrawWndBack(ctx, hWnd, hdc, &paint);
SetBkMode(hdc, TRANSPARENT); SetBkMode(hdc, TRANSPARENT);
if (!activecontext) if (!ctx->contextrunning)
{ {
s = "Click to activate"; if (!activecontext)
TextOutA(hdc, 0, 0, s, strlen(s)); {
} s = "Click to activate";
if (ctx->availver) TextOutA(hdc, 0, 0, s, strlen(s));
{ }
s = va("Your plugin is out of date"); if (ctx->availver)
TextOutA(hdc, 0, 16, s, strlen(s)); {
s = va("Version %3.1f is available", ctx->availver); s = va("Your plugin is out of date");
TextOutA(hdc, 0, 32, s, strlen(s)); TextOutA(hdc, 0, 16, s, strlen(s));
s = va("Version %3.1f is available", ctx->availver);
TextOutA(hdc, 0, 32, s, strlen(s));
}
} }
EndPaint(hWnd, &paint); EndPaint(hWnd, &paint);
return TRUE; return TRUE;
@ -608,7 +616,7 @@ LRESULT CALLBACK MyPluginWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPar
activecontext = ctx; activecontext = ctx;
InvalidateRgn(hWnd, NULL, FALSE); InvalidateRgn(hWnd, NULL, FALSE);
} }
else else if (activecontext != ctx)
Cbuf_AddText("quit\n", RESTRICT_LOCAL); Cbuf_AddText("quit\n", RESTRICT_LOCAL);
break; break;
default: default:
@ -654,7 +662,7 @@ NPError NP_LOADDS NPP_New(NPMIMEType pluginType, NPP instance,
//parse out the properties //parse out the properties
for (i = 0; i < argc; i++) for (i = 0; i < argc; i++)
{ {
if (!stricmp(argn[i], "datadownload")) if (!stricmp(argn[i], "dataDownload"))
{ {
Q_strncpyz(ctx->datadownload, argv[i], sizeof(ctx->datadownload)); Q_strncpyz(ctx->datadownload, argv[i], sizeof(ctx->datadownload));
} }
@ -666,19 +674,41 @@ NPError NP_LOADDS NPP_New(NPMIMEType pluginType, NPP instance,
if (!strstr(argn[i], ":")) if (!strstr(argn[i], ":"))
Q_strncpyz(ctx->gamename, argv[i], sizeof(ctx->gamename)); Q_strncpyz(ctx->gamename, argv[i], sizeof(ctx->gamename));
} }
else if (!stricmp(argn[i], "onstart")) else if (!stricmp(argn[i], "connType"))
{
if (!stricmp(argn[i], "join"))
ctx->qtvf.connectiontype = QTVCT_JOIN;
else if (!stricmp(argn[i], "qtv"))
ctx->qtvf.connectiontype = QTVCT_STREAM;
else if (!stricmp(argn[i], "connect"))
ctx->qtvf.connectiontype = QTVCT_CONNECT;
else if (!stricmp(argn[i], "join"))
ctx->qtvf.connectiontype = QTVCT_JOIN;
else if (!stricmp(argn[i], "observe"))
ctx->qtvf.connectiontype = QTVCT_OBSERVE;
else
ctx->qtvf.connectiontype = QTVCT_NONE;
}
else if (!stricmp(argn[i], "server") || !stricmp(argn[i], "stream"))
Q_strncpyz(ctx->qtvf.server, argv[i], sizeof(ctx->qtvf.server));
else if (!stricmp(argn[i], "splash"))
{
Q_strncpyz(ctx->qtvf.splashscreen, argv[i], sizeof(ctx->qtvf.splashscreen));
browserfuncs->geturlnotify(ctx->nppinstance, ctx->qtvf.splashscreen, NULL, &SplashscreenImageDescriptor);
}
else if (!stricmp(argn[i], "onStart"))
{ {
ctx->onstart = strdup(argv[i]); ctx->onstart = strdup(argv[i]);
} }
else if (!stricmp(argn[i], "onend")) else if (!stricmp(argn[i], "onEnd"))
{ {
ctx->onend = strdup(argv[i]); ctx->onend = strdup(argv[i]);
} }
else if (!stricmp(argn[i], "ondemoend")) else if (!stricmp(argn[i], "onDemoEnd"))
{ {
ctx->ondemoend = strdup(argv[i]); ctx->ondemoend = strdup(argv[i]);
} }
else if (!stricmp(argn[i], "availver")) else if (!stricmp(argn[i], "availVer"))
{ {
ctx->availver = atof(argv[i]); ctx->availver = atof(argv[i]);
if (ctx->availver <= NPQTV_VERSION) if (ctx->availver <= NPQTV_VERSION)
@ -689,9 +719,13 @@ NPError NP_LOADDS NPP_New(NPMIMEType pluginType, NPP instance,
if (atoi(argv[i]) && !activecontext) if (atoi(argv[i]) && !activecontext)
activecontext = ctx; activecontext = ctx;
} }
} }
if (!*ctx->qtvf.server)
ctx->qtvf.connectiontype = QTVCT_NONE;
else if (ctx->qtvf.connectiontype == QTVCT_NONE)
ctx->qtvf.connectiontype = QTVCT_STREAM;
//add it to the linked list //add it to the linked list
ctx->next = contextlist; ctx->next = contextlist;
contextlist = ctx; contextlist = ctx;
@ -738,7 +772,7 @@ NPError NP_LOADDS NPP_Destroy(NPP instance, NPSavedData** save)
if (ctx == activecontext) if (ctx == activecontext)
{ {
activecontext = NULL; activecontext = NULL;
sys_hijackwindow = NULL; sys_parentwindow = NULL;
} }
free(ctx); free(ctx);
@ -748,6 +782,7 @@ NPError NP_LOADDS NPP_Destroy(NPP instance, NPSavedData** save)
} }
NPError NP_LOADDS NPP_SetWindow(NPP instance, NPWindow* window) NPError NP_LOADDS NPP_SetWindow(NPP instance, NPWindow* window)
{ {
extern cvar_t vid_width;
struct context *ctx = instance->pdata; struct context *ctx = instance->pdata;
#ifdef _WIN32 #ifdef _WIN32
@ -778,17 +813,21 @@ NPError NP_LOADDS NPP_SetWindow(NPP instance, NPWindow* window)
SetWindowLongPtr(ctx->window.window, GWL_WNDPROC, (LONG_PTR)MyPluginWndProc); SetWindowLongPtr(ctx->window.window, GWL_WNDPROC, (LONG_PTR)MyPluginWndProc);
SetWindowLongPtr(ctx->window.window, GWL_USERDATA, (LONG_PTR)ctx); SetWindowLongPtr(ctx->window.window, GWL_USERDATA, (LONG_PTR)ctx);
if (ctx->contextrunning && mainwindow && oldwindow == sys_hijackwindow) if (ctx->contextrunning && mainwindow && oldwindow == sys_parentwindow)
{ {
sys_hijackwindow = ctx->window.window; sys_parentwindow = ctx->window.window;
SetParent(mainwindow, ctx->window.window); SetParent(mainwindow, ctx->window.window);
oldwindow = sys_hijackwindow; oldwindow = sys_parentwindow;
} }
} }
if (ctx->contextrunning && mainwindow && oldwindow == sys_hijackwindow) if (ctx->contextrunning)
MoveWindow(mainwindow, 0, 0, ctx->window.width, ctx->window.height, FALSE); {
sys_parentwidth = ctx->window.width;
sys_parentheight = ctx->window.height;
Cvar_ForceCallback(&vid_width);
}
InvalidateRgn(ctx->window.window, NULL, FALSE); InvalidateRgn(ctx->window.window, NULL, FALSE);
#endif #endif
@ -865,8 +904,6 @@ NPError NP_LOADDS NPP_DestroyStream(NPP instance, NPStream* stream,
ctx->donestreams = qstr; ctx->donestreams = qstr;
} }
//CL_QTVPlay(pipe, false);
return NPERR_NO_ERROR; return NPERR_NO_ERROR;
} }
int32 NP_LOADDS NPP_WriteReady(NPP instance, NPStream* stream) int32 NP_LOADDS NPP_WriteReady(NPP instance, NPStream* stream)

View File

@ -41,7 +41,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
qboolean isDedicated = false; qboolean isDedicated = false;
#endif #endif
HWND sys_hijackwindow; HWND sys_parentwindow;
unsigned int sys_parentwidth; //valid if sys_parentwindow is set
unsigned int sys_parentheight;
void Sys_CloseLibrary(dllhandle_t *lib) void Sys_CloseLibrary(dllhandle_t *lib)
{ {

View File

@ -62,7 +62,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
extern HINSTANCE global_hInstance; extern HINSTANCE global_hInstance;
extern int global_nCmdShow; extern int global_nCmdShow;
extern HWND sys_hijackwindow; extern HWND sys_parentwindow;
extern unsigned int sys_parentwidth;
extern unsigned int sys_parentheight;
#ifndef SERVERONLY #ifndef SERVERONLY

View File

@ -342,6 +342,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define VARGS #define VARGS
#endif #endif
#ifdef _WIN32
#define ZEXPORT VARGS
#define ZEXPORTVA VARGS
#endif
// !!! if this is changed, it must be changed in d_ifacea.h too !!! // !!! if this is changed, it must be changed in d_ifacea.h too !!!
#define CACHE_SIZE 32 // used to align key data structures #define CACHE_SIZE 32 // used to align key data structures

View File

@ -336,7 +336,7 @@ typedef struct vfsfile_s {
#define VFS_FLUSH(vf) do{if(vf->Flush)vf->Flush(vf);}while(0) #define VFS_FLUSH(vf) do{if(vf->Flush)vf->Flush(vf);}while(0)
#define VFS_PUTS(vf,s) do{const char *t=s;vf->WriteBytes(vf,t,strlen(t));}while(0) #define VFS_PUTS(vf,s) do{const char *t=s;vf->WriteBytes(vf,t,strlen(t));}while(0)
char *VFS_GETS(vfsfile_t *vf, char *buffer, int buflen); char *VFS_GETS(vfsfile_t *vf, char *buffer, int buflen);
void VFS_PRINTF(vfsfile_t *vf, char *fmt, ...); void VARGS VFS_PRINTF(vfsfile_t *vf, char *fmt, ...);
enum fs_relative{ enum fs_relative{
FS_GAME, //standard search (not generally valid for save/rename/delete/etc) FS_GAME, //standard search (not generally valid for save/rename/delete/etc)
@ -351,6 +351,7 @@ void FS_CreatePath(const char *pname, enum fs_relative relativeto);
int FS_Rename(const char *oldf, const char *newf, enum fs_relative relativeto); //0 on success, non-0 on error int FS_Rename(const char *oldf, const char *newf, enum fs_relative relativeto); //0 on success, non-0 on error
int FS_Rename2(const char *oldf, const char *newf, enum fs_relative oldrelativeto, enum fs_relative newrelativeto); int FS_Rename2(const char *oldf, const char *newf, enum fs_relative oldrelativeto, enum fs_relative newrelativeto);
int FS_Remove(const char *fname, enum fs_relative relativeto); //0 on success, non-0 on error int FS_Remove(const char *fname, enum fs_relative relativeto); //0 on success, non-0 on error
qboolean FS_Copy(const char *source, const char *dest, enum fs_relative relativesource, enum fs_relative relativedest);
qboolean FS_NativePath(const char *fname, enum fs_relative relativeto, char *out, int outlen); //if you really need to fopen yourself qboolean FS_NativePath(const char *fname, enum fs_relative relativeto, char *out, int outlen); //if you really need to fopen yourself
qboolean FS_WriteFile (const char *filename, const void *data, int len, enum fs_relative relativeto); qboolean FS_WriteFile (const char *filename, const void *data, int len, enum fs_relative relativeto);
vfsfile_t *FS_OpenVFS(const char *filename, const char *mode, enum fs_relative relativeto); vfsfile_t *FS_OpenVFS(const char *filename, const char *mode, enum fs_relative relativeto);

View File

@ -83,7 +83,7 @@ char *VFS_GETS(vfsfile_t *vf, char *buffer, int buflen)
return buffer; return buffer;
} }
void VFS_PRINTF(vfsfile_t *vf, char *format, ...) void VARGS VFS_PRINTF(vfsfile_t *vf, char *format, ...)
{ {
va_list argptr; va_list argptr;
char string[1024]; char string[1024];

View File

@ -3,10 +3,6 @@
#ifdef AVAIL_ZLIB #ifdef AVAIL_ZLIB
#ifndef ZEXPORT
#define ZEXPORT VARGS
#endif
#include <zlib.h> #include <zlib.h>
#include "unzip.c" #include "unzip.c"

View File

@ -117,6 +117,9 @@ typedef struct plugin_s {
int blockcloses; int blockcloses;
void *inputptr;
unsigned int inputbytes;
int tick; int tick;
int executestring; int executestring;
#ifndef SERVERONLY #ifndef SERVERONLY
@ -127,6 +130,9 @@ typedef struct plugin_s {
//protocol-in-a-plugin //protocol-in-a-plugin
int connectionlessclientpacket; int connectionlessclientpacket;
//called to discolour console input text if they spelt it wrongly
int spellcheckmaskedtext;
#endif #endif
int svmsgfunction; int svmsgfunction;
int chatmsgfunction; int chatmsgfunction;
@ -386,6 +392,8 @@ int VARGS Plug_ExportToEngine(void *offset, unsigned int mask, const int *arg)
currentplug->chatmsgfunction = functionid; currentplug->chatmsgfunction = functionid;
else if (!strcmp(name, "CenterPrintMessage")) else if (!strcmp(name, "CenterPrintMessage"))
currentplug->centerprintfunction = functionid; currentplug->centerprintfunction = functionid;
else if (!strcmp(name, "SpellCheckMaskedText"))
currentplug->spellcheckmaskedtext = functionid;
#endif #endif
else else
return 0; return 0;
@ -1330,6 +1338,25 @@ int VARGS Plug_Net_Close(void *offset, unsigned int mask, const int *arg)
return 0; return 0;
} }
int VARGS Plug_ReadInputBuffer(void *offset, unsigned int mask, const int *arg)
{
void *buffer = VM_POINTER(arg[0]);
int bufferlen = VM_LONG(arg[1]);
if (bufferlen > currentplug->inputbytes)
bufferlen = currentplug->inputbytes;
memcpy(buffer, currentplug->inputptr, currentplug->inputbytes);
return bufferlen;
}
int VARGS Plug_UpdateInputBuffer(void *offset, unsigned int mask, const int *arg)
{
void *buffer = VM_POINTER(arg[0]);
int bufferlen = VM_LONG(arg[1]);
if (bufferlen > currentplug->inputbytes)
bufferlen = currentplug->inputbytes;
memcpy(currentplug->inputptr, buffer, currentplug->inputbytes);
return bufferlen;
}
void Plug_CloseAll_f(void); void Plug_CloseAll_f(void);
void Plug_List_f(void); void Plug_List_f(void);
void Plug_Close_f(void); void Plug_Close_f(void);
@ -1437,7 +1464,8 @@ void Plug_Init(void)
Plug_RegisterBuiltin("cos", Plug_cos, 0); Plug_RegisterBuiltin("cos", Plug_cos, 0);
Plug_RegisterBuiltin("atan2", Plug_atan2, 0); Plug_RegisterBuiltin("atan2", Plug_atan2, 0);
Plug_RegisterBuiltin("GetPluginName", Plug_GetPluginName, 0); Plug_RegisterBuiltin("ReadInputBuffer", Plug_ReadInputBuffer, 0);
Plug_RegisterBuiltin("UpdateInputBuffer", Plug_UpdateInputBuffer, 0);
Plug_Client_Init(); Plug_Client_Init();
@ -1511,6 +1539,23 @@ void Plug_SubConsoleCommand(console_t *con, char *line)
VM_Call(currentplug->vm, currentplug->conexecutecommand, 0); VM_Call(currentplug->vm, currentplug->conexecutecommand, 0);
currentplug = oldplug; currentplug = oldplug;
} }
void Plug_SpellCheckMaskedText(unsigned int *maskedstring, int maskedchars, int x, int y, int cs, int firstc, int charlimit)
{
plugin_t *oldplug = currentplug;
for (currentplug = plugs; currentplug; currentplug = currentplug->next)
{
if (currentplug->spellcheckmaskedtext)
{
currentplug->inputptr = maskedstring;
currentplug->inputbytes = sizeof(*maskedstring)*maskedchars;
VM_Call(currentplug->vm, currentplug->spellcheckmaskedtext, x, y, cs, firstc, charlimit);
currentplug->inputptr = NULL;
currentplug->inputbytes = 0;
}
}
currentplug = oldplug;
}
#endif #endif
#ifndef SERVERONLY #ifndef SERVERONLY

View File

@ -1393,21 +1393,28 @@ void PF_vtos (progfuncs_t *prinst, struct globalvars_s *pr_globals)
RETURN_TSTRING(pr_string_temp); RETURN_TSTRING(pr_string_temp);
} }
#pragma message("this should use something more... less hacky")
void PF_forgetstring(progfuncs_t *prinst, struct globalvars_s *pr_globals) void PF_forgetstring(progfuncs_t *prinst, struct globalvars_s *pr_globals)
{ {
char *s=PR_GetStringOfs(prinst, OFS_PARM0); char *s=PR_RemoveProgsString(prinst, G_INT(OFS_PARM0));
s-=8; if (!s)
if (((int *)s)[0] != PRSTR)
{ {
Con_Printf("QC tried to free a non allocated string: "); Con_Printf("string was not strzoned\n");
Con_Printf("%s\n", s+8); //two prints, so that logged prints ensure the first is written. (*prinst->pr_trace) = 1;
return;
}
// char *s=PR_GetStringOfs(prinst, OFS_PARM0);
s-=8;
if (!((int *)s)[0] != PRSTR)
{
Con_Printf("QC tried to free a non dynamic string: ");
Con_Printf("%s\n", s); //two prints, so that logged prints ensure the first is written.
(*prinst->pr_trace) = 1; (*prinst->pr_trace) = 1;
PR_StackTrace(prinst); PR_StackTrace(prinst);
return; return;
} }
((int *)s)[0] = 0xabcd1234; ((int *)s)[0] = 0xabcd1234;
Z_TagFree(s); Z_TagFree(s);
} }
void PF_dupstring(progfuncs_t *prinst, struct globalvars_s *pr_globals) //frik_file void PF_dupstring(progfuncs_t *prinst, struct globalvars_s *pr_globals) //frik_file

View File

@ -5,6 +5,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftequake", "ftequake.vcproj
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gas2masm", "gas2masm.vcproj", "{382E6790-D1CA-48F5-8E53-D114635EB61D}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gas2masm", "gas2masm.vcproj", "{382E6790-D1CA-48F5-8E53-D114635EB61D}"
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "npqtv", "npqtv.vcproj", "{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
D3DDebug|Win32 = D3DDebug|Win32 D3DDebug|Win32 = D3DDebug|Win32
@ -128,6 +130,48 @@ Global
{382E6790-D1CA-48F5-8E53-D114635EB61D}.Release|Win32.Build.0 = Debug|Win32 {382E6790-D1CA-48F5-8E53-D114635EB61D}.Release|Win32.Build.0 = Debug|Win32
{382E6790-D1CA-48F5-8E53-D114635EB61D}.Release|x64.ActiveCfg = Debug|x64 {382E6790-D1CA-48F5-8E53-D114635EB61D}.Release|x64.ActiveCfg = Debug|x64
{382E6790-D1CA-48F5-8E53-D114635EB61D}.Release|x64.Build.0 = Debug|x64 {382E6790-D1CA-48F5-8E53-D114635EB61D}.Release|x64.Build.0 = Debug|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.D3DDebug|Win32.ActiveCfg = SWRelease|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.D3DDebug|x64.ActiveCfg = SWRelease|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.D3DDebug|x64.Build.0 = SWRelease|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.Debug Dedicated Server|Win32.ActiveCfg = SWRelease|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.Debug Dedicated Server|x64.ActiveCfg = SWRelease|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.Debug Dedicated Server|x64.Build.0 = SWRelease|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.Debug|Win32.ActiveCfg = SWDebug|Win32
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.Debug|Win32.Build.0 = SWDebug|Win32
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.Debug|x64.ActiveCfg = SWDebug|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.Debug|x64.Build.0 = SWDebug|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.GLDebug|Win32.ActiveCfg = GLDebug|Win32
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.GLDebug|Win32.Build.0 = GLDebug|Win32
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.GLDebug|x64.ActiveCfg = GLDebug|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.GLDebug|x64.Build.0 = GLDebug|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.GLRelease|Win32.ActiveCfg = GLRelease|Win32
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.GLRelease|Win32.Build.0 = GLRelease|Win32
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.GLRelease|x64.ActiveCfg = GLRelease|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.GLRelease|x64.Build.0 = GLRelease|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.MDebug|Win32.ActiveCfg = GLDebug|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.MDebug|x64.ActiveCfg = SWRelease|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.MDebug|x64.Build.0 = SWRelease|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.MinGLDebug|Win32.ActiveCfg = GLDebug|Win32
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.MinGLDebug|Win32.Build.0 = GLDebug|Win32
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.MinGLDebug|x64.ActiveCfg = GLDebug|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.MinGLDebug|x64.Build.0 = GLDebug|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.MinGLRelease|Win32.ActiveCfg = GLRelease|Win32
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.MinGLRelease|Win32.Build.0 = GLRelease|Win32
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.MinGLRelease|x64.ActiveCfg = GLRelease|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.MinGLRelease|x64.Build.0 = GLRelease|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.MinSW|Win32.ActiveCfg = GLRelease|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.MinSW|x64.ActiveCfg = GLRelease|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.MinSW|x64.Build.0 = GLRelease|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.MRelease|Win32.ActiveCfg = GLRelease|Win32
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.MRelease|x64.ActiveCfg = SWRelease|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.MRelease|x64.Build.0 = SWRelease|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.Release Dedicated Server|Win32.ActiveCfg = SWRelease|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.Release Dedicated Server|x64.ActiveCfg = SWRelease|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.Release Dedicated Server|x64.Build.0 = SWRelease|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.Release|Win32.ActiveCfg = SWRelease|Win32
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.Release|Win32.Build.0 = SWRelease|Win32
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.Release|x64.ActiveCfg = SWRelease|x64
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.Release|x64.Build.0 = SWRelease|x64
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

View File

@ -6637,6 +6637,46 @@
<File <File
RelativePath="..\server\svhl_game.c" RelativePath="..\server\svhl_game.c"
> >
<FileConfiguration
Name="MinGLDebug|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="D3DDebug|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="MinSW|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="MinGLRelease|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="GLDebug|Win32" Name="GLDebug|Win32"
> >
@ -6645,10 +6685,98 @@
PrecompiledHeaderThrough="qwsvdef.h" PrecompiledHeaderThrough="qwsvdef.h"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Release Dedicated Server|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="MRelease|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="Debug Dedicated Server|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="MDebug|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="GLRelease|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
</File> </File>
<File <File
RelativePath="..\server\svhl_phys.c" RelativePath="..\server\svhl_phys.c"
> >
<FileConfiguration
Name="MinGLDebug|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="D3DDebug|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="MinSW|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="MinGLRelease|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="GLDebug|Win32" Name="GLDebug|Win32"
> >
@ -6657,10 +6785,98 @@
PrecompiledHeaderThrough="qwsvdef.h" PrecompiledHeaderThrough="qwsvdef.h"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Release Dedicated Server|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="MRelease|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="Debug Dedicated Server|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="MDebug|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="GLRelease|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
</File> </File>
<File <File
RelativePath="..\server\svhl_world.c" RelativePath="..\server\svhl_world.c"
> >
<FileConfiguration
Name="MinGLDebug|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="D3DDebug|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="MinSW|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="MinGLRelease|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="GLDebug|Win32" Name="GLDebug|Win32"
> >
@ -6669,6 +6885,54 @@
PrecompiledHeaderThrough="qwsvdef.h" PrecompiledHeaderThrough="qwsvdef.h"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Release Dedicated Server|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="MRelease|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="Debug Dedicated Server|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="MDebug|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
<FileConfiguration
Name="GLRelease|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="qwsvdef.h"
/>
</FileConfiguration>
</File> </File>
<File <File
RelativePath="..\server\svq2_ents.c" RelativePath="..\server\svq2_ents.c"
@ -7203,7 +7467,6 @@
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Debug|Win32"
ExcludedFromBuild="true"
> >
<Tool <Tool
Name="VCCLCompilerTool" Name="VCCLCompilerTool"
@ -7285,7 +7548,6 @@
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release Dedicated Server|Win32" Name="Release Dedicated Server|Win32"
ExcludedFromBuild="true"
> >
<Tool <Tool
Name="VCCLCompilerTool" Name="VCCLCompilerTool"
@ -7325,7 +7587,6 @@
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|Win32" Name="Release|Win32"
ExcludedFromBuild="true"
> >
<Tool <Tool
Name="VCCLCompilerTool" Name="VCCLCompilerTool"

View File

@ -108,7 +108,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0 # PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /G5 /W3 /GX /ZI /Od /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /D "_DEBUG" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /FR".\GLDebug/" /Fp".\GLDebug/qwcl.pch" /Yu"quakedef.h" /Fo".\GLDebug/" /Fd".\GLDebug/" /FD /c # ADD CPP /nologo /G5 /MT /W3 /GX /ZI /Od /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /D "_DEBUG" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /FR".\GLDebug/" /Fp".\GLDebug/qwcl.pch" /Yu"quakedef.h" /Fo".\GLDebug/" /Fd".\GLDebug/" /FD /c
# SUBTRACT CPP /X # SUBTRACT CPP /X
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
@ -147,7 +147,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 comctl32.lib ..\dxsdk\sdk\lib\dxguid.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib /nologo /subsystem:windows /machine:I386 /out:"../../../fteqw.exe" # ADD BASE LINK32 comctl32.lib ..\dxsdk\sdk\lib\dxguid.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib /nologo /subsystem:windows /machine:I386 /out:"../../../fteqw.exe"
# ADD LINK32 comctl32.lib wsock32.lib winmm.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /pdb:none /map /machine:I386 /nodefaultlib:"msvcrt.lib" /out:"../../fteglqw.exe" /libpath:"../libs/dxsdk7/lib" # ADD LINK32 comctl32.lib wsock32.lib winmm.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /pdb:none /map /machine:I386 /nodefaultlib:"msvcrt" /nodefaultlib:"libc" /out:"../../fteglqw.exe" /libpath:"../libs/dxsdk7/lib"
# SUBTRACT LINK32 /debug # SUBTRACT LINK32 /debug
!ELSEIF "$(CFG)" == "ftequake - Win32 MDebug" !ELSEIF "$(CFG)" == "ftequake - Win32 MDebug"
@ -551,191 +551,17 @@ SOURCE=..\server\sv_user.c
# Begin Source File # Begin Source File
SOURCE=..\server\svhl_game.c SOURCE=..\server\svhl_game.c
!IF "$(CFG)" == "ftequake - Win32 Release"
# ADD CPP /Yu"qwsvdef.h" # ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebug"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLRelease"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 MDebug"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 MRelease"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLDebug"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLRelease"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated Server"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 Release Dedicated Server"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 MinSW"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebugQ3"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated ServerQ3"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 D3DDebug"
# ADD CPP /Yu"qwsvdef.h"
!ENDIF
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=..\server\svhl_phys.c SOURCE=..\server\svhl_phys.c
!IF "$(CFG)" == "ftequake - Win32 Release"
# ADD CPP /Yu"qwsvdef.h" # ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebug"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLRelease"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 MDebug"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 MRelease"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLDebug"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLRelease"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated Server"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 Release Dedicated Server"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 MinSW"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebugQ3"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated ServerQ3"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 D3DDebug"
# ADD CPP /Yu"qwsvdef.h"
!ENDIF
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=..\server\svhl_world.c SOURCE=..\server\svhl_world.c
!IF "$(CFG)" == "ftequake - Win32 Release"
# ADD CPP /Yu"qwsvdef.h" # ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebug"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLRelease"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 MDebug"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 MRelease"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLDebug"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLRelease"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated Server"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 Release Dedicated Server"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 MinSW"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebugQ3"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated ServerQ3"
# ADD CPP /Yu"qwsvdef.h"
!ELSEIF "$(CFG)" == "ftequake - Win32 D3DDebug"
# ADD CPP /Yu"qwsvdef.h"
!ENDIF
# End Source File # End Source File
# Begin Source File # Begin Source File
@ -6539,7 +6365,7 @@ SOURCE=..\qclib\execloop.h
!IF "$(CFG)" == "ftequake - Win32 Release" !IF "$(CFG)" == "ftequake - Win32 Release"
# Begin Custom Build # Begin Custom Build
InputDir=\engine\qclib InputDir=\Quake\ftesrc\engine\QCLIB
InputPath=..\qclib\execloop.h InputPath=..\qclib\execloop.h
BuildCmds= \ BuildCmds= \
@ -6561,7 +6387,7 @@ BuildCmds= \
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug" !ELSEIF "$(CFG)" == "ftequake - Win32 Debug"
# Begin Custom Build # Begin Custom Build
InputDir=\engine\qclib InputDir=\Quake\ftesrc\engine\QCLIB
InputPath=..\qclib\execloop.h InputPath=..\qclib\execloop.h
BuildCmds= \ BuildCmds= \
@ -6583,7 +6409,7 @@ BuildCmds= \
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebug" !ELSEIF "$(CFG)" == "ftequake - Win32 GLDebug"
# Begin Custom Build # Begin Custom Build
InputDir=\engine\qclib InputDir=\Quake\ftesrc\engine\QCLIB
InputPath=..\qclib\execloop.h InputPath=..\qclib\execloop.h
BuildCmds= \ BuildCmds= \
@ -6605,7 +6431,7 @@ BuildCmds= \
!ELSEIF "$(CFG)" == "ftequake - Win32 GLRelease" !ELSEIF "$(CFG)" == "ftequake - Win32 GLRelease"
# Begin Custom Build # Begin Custom Build
InputDir=\engine\qclib InputDir=\Quake\ftesrc\engine\QCLIB
InputPath=..\qclib\execloop.h InputPath=..\qclib\execloop.h
BuildCmds= \ BuildCmds= \
@ -6627,7 +6453,7 @@ BuildCmds= \
!ELSEIF "$(CFG)" == "ftequake - Win32 MDebug" !ELSEIF "$(CFG)" == "ftequake - Win32 MDebug"
# Begin Custom Build # Begin Custom Build
InputDir=\engine\qclib InputDir=\Quake\ftesrc\engine\QCLIB
InputPath=..\qclib\execloop.h InputPath=..\qclib\execloop.h
BuildCmds= \ BuildCmds= \
@ -6649,7 +6475,7 @@ BuildCmds= \
!ELSEIF "$(CFG)" == "ftequake - Win32 MRelease" !ELSEIF "$(CFG)" == "ftequake - Win32 MRelease"
# Begin Custom Build # Begin Custom Build
InputDir=\engine\qclib InputDir=\Quake\ftesrc\engine\QCLIB
InputPath=..\qclib\execloop.h InputPath=..\qclib\execloop.h
BuildCmds= \ BuildCmds= \
@ -6671,7 +6497,7 @@ BuildCmds= \
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLDebug" !ELSEIF "$(CFG)" == "ftequake - Win32 MinGLDebug"
# Begin Custom Build # Begin Custom Build
InputDir=\engine\qclib InputDir=\Quake\ftesrc\engine\QCLIB
InputPath=..\qclib\execloop.h InputPath=..\qclib\execloop.h
BuildCmds= \ BuildCmds= \
@ -6693,7 +6519,7 @@ BuildCmds= \
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLRelease" !ELSEIF "$(CFG)" == "ftequake - Win32 MinGLRelease"
# Begin Custom Build # Begin Custom Build
InputDir=\engine\qclib InputDir=\Quake\ftesrc\engine\QCLIB
InputPath=..\qclib\execloop.h InputPath=..\qclib\execloop.h
BuildCmds= \ BuildCmds= \
@ -6715,7 +6541,7 @@ BuildCmds= \
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated Server" !ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated Server"
# Begin Custom Build # Begin Custom Build
InputDir=\engine\qclib InputDir=\Quake\ftesrc\engine\QCLIB
InputPath=..\qclib\execloop.h InputPath=..\qclib\execloop.h
BuildCmds= \ BuildCmds= \
@ -6737,7 +6563,7 @@ BuildCmds= \
!ELSEIF "$(CFG)" == "ftequake - Win32 Release Dedicated Server" !ELSEIF "$(CFG)" == "ftequake - Win32 Release Dedicated Server"
# Begin Custom Build # Begin Custom Build
InputDir=\engine\qclib InputDir=\Quake\ftesrc\engine\QCLIB
InputPath=..\qclib\execloop.h InputPath=..\qclib\execloop.h
BuildCmds= \ BuildCmds= \
@ -6759,7 +6585,7 @@ BuildCmds= \
!ELSEIF "$(CFG)" == "ftequake - Win32 MinSW" !ELSEIF "$(CFG)" == "ftequake - Win32 MinSW"
# Begin Custom Build # Begin Custom Build
InputDir=\engine\qclib InputDir=\Quake\ftesrc\engine\QCLIB
InputPath=..\qclib\execloop.h InputPath=..\qclib\execloop.h
BuildCmds= \ BuildCmds= \
@ -6781,7 +6607,7 @@ BuildCmds= \
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebugQ3" !ELSEIF "$(CFG)" == "ftequake - Win32 GLDebugQ3"
# Begin Custom Build # Begin Custom Build
InputDir=\engine\qclib InputDir=\Quake\ftesrc\engine\QCLIB
InputPath=..\qclib\execloop.h InputPath=..\qclib\execloop.h
BuildCmds= \ BuildCmds= \
@ -6803,7 +6629,7 @@ BuildCmds= \
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated ServerQ3" !ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated ServerQ3"
# Begin Custom Build # Begin Custom Build
InputDir=\engine\qclib InputDir=\Quake\ftesrc\engine\QCLIB
InputPath=..\qclib\execloop.h InputPath=..\qclib\execloop.h
BuildCmds= \ BuildCmds= \
@ -6825,7 +6651,7 @@ BuildCmds= \
!ELSEIF "$(CFG)" == "ftequake - Win32 D3DDebug" !ELSEIF "$(CFG)" == "ftequake - Win32 D3DDebug"
# Begin Custom Build # Begin Custom Build
InputDir=\engine\qclib InputDir=\Quake\ftesrc\engine\QCLIB
InputPath=..\qclib\execloop.h InputPath=..\qclib\execloop.h
BuildCmds= \ BuildCmds= \

View File

@ -14,6 +14,9 @@ Package=<4>
Begin Project Dependency Begin Project Dependency
Project_Dep_Name gas2masm Project_Dep_Name gas2masm
End Project Dependency End Project Dependency
Begin Project Dependency
Project_Dep_Name spellcheck
End Project Dependency
}}} }}}
############################################################################### ###############################################################################
@ -60,7 +63,7 @@ Package=<4>
############################################################################### ###############################################################################
Project: "q3asm2"=..\..\Q3ASM2\q3asm2.dsp - Package Owner=<4> Project: "q3asm2"=..\..\..\Q3ASM2\q3asm2.dsp - Package Owner=<4>
Package=<5> Package=<5>
{{{ {{{
@ -96,6 +99,18 @@ Package=<4>
############################################################################### ###############################################################################
Project: "spellcheck"=..\..\plugins\spellcheck\spellcheck.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global: Global:
Package=<5> Package=<5>

View File

@ -7,7 +7,7 @@
// //
// Generated from the TEXTINCLUDE 2 resource. // Generated from the TEXTINCLUDE 2 resource.
// //
#include "afxres.h" #include "windows.h"
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS #undef APSTUDIO_READONLY_SYMBOLS

View File

@ -793,6 +793,14 @@ void GLDraw_ReInit (void)
lightmap_textures=NULL; lightmap_textures=NULL;
filmtexture=0; filmtexture=0;
glmenu_numcachepics=0; glmenu_numcachepics=0;
draw_mesh.numvertexes = 4;
draw_mesh.numindexes = 6;
draw_mesh.xyz_array = draw_mesh_xyz;
draw_mesh.st_array = draw_mesh_st;
draw_mesh.colors_array = NULL;
draw_mesh.indexes = r_quad_indexes;
#ifdef Q3SHADERS #ifdef Q3SHADERS
r_fogtexture=0; r_fogtexture=0;
#endif #endif
@ -1911,17 +1919,16 @@ Draw_ConsoleBackground
================ ================
*/ */
void GLDraw_ConsoleBackground (int lines) void GLDraw_ConsoleBackground (int firstline, int lastline, qboolean forceopaque)
{ {
// char ver[80]; // char ver[80];
// int x, i; // int x, i;
float a; float a;
extern qboolean scr_con_forcedraw;
conback->width = vid.conwidth; conback->width = vid.conwidth;
conback->height = vid.conheight; conback->height = vid.conheight;
if (scr_con_forcedraw) if (forceopaque)
{ {
a = 1; // console background is necessary a = 1; // console background is necessary
} }
@ -1943,7 +1950,7 @@ void GLDraw_ConsoleBackground (int lines)
if (shader_console) if (shader_console)
{ {
currententity = &r_worldentity; currententity = &r_worldentity;
GLDraw_ShaderPic(0, lines - conback->height, vid.width, vid.height, shader_console, 1, 1, 1, a); GLDraw_ShaderPic(0, lastline - conback->height, vid.width, vid.height, shader_console, 1, 1, 1, a);
qglBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); qglBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
return; return;
} }
@ -1952,11 +1959,11 @@ void GLDraw_ConsoleBackground (int lines)
if (a >= 1) if (a >= 1)
{ {
qglColor3f (1,1,1); qglColor3f (1,1,1);
GLDraw_Pic(0, lines-conback->height, conback); GLDraw_Pic(0, lastline-conback->height, conback);
} }
else else
{ {
GLDraw_AlphaPic (0, lines - conback->height, conback, a); GLDraw_AlphaPic (0, lastline - conback->height, conback, a);
} }
} }

View File

@ -34,7 +34,7 @@ void GLDraw_Pic (int x, int y, mpic_t *pic);
void GLDraw_ScalePic (int x, int y, int width, int height, mpic_t *pic); void GLDraw_ScalePic (int x, int y, int width, int height, mpic_t *pic);
void GLDraw_TransPic (int x, int y, mpic_t *pic); void GLDraw_TransPic (int x, int y, mpic_t *pic);
void GLDraw_TransPicTranslate (int x, int y, int w, int h, qbyte *pic, qbyte *translation); void GLDraw_TransPicTranslate (int x, int y, int w, int h, qbyte *pic, qbyte *translation);
void GLDraw_ConsoleBackground (int lines); void GLDraw_ConsoleBackground (int firstline, int lastline, qboolean forceopaque);
void GLDraw_EditorBackground (int lines); void GLDraw_EditorBackground (int lines);
void GLDraw_BeginDisc (void); void GLDraw_BeginDisc (void);
void GLDraw_EndDisc (void); void GLDraw_EndDisc (void);

View File

@ -159,6 +159,7 @@ void GLSCR_UpdateScreen (void)
extern qboolean editormodal; extern qboolean editormodal;
#endif #endif
qboolean nohud; qboolean nohud;
qboolean noworld;
RSpeedMark(); RSpeedMark();
if (block_drawing) if (block_drawing)
@ -249,6 +250,7 @@ void GLSCR_UpdateScreen (void)
// //
SCR_SetUpToDrawConsole (); SCR_SetUpToDrawConsole ();
noworld = false;
nohud = false; nohud = false;
#ifdef VM_CG #ifdef VM_CG
@ -261,10 +263,14 @@ void GLSCR_UpdateScreen (void)
nohud = true; nohud = true;
else else
#endif #endif
if (r_worldentity.model && uimenu != 1) if (uimenu != 1)
{ {
V_RenderView (); if (r_worldentity.model && cls.state == ca_active)
// Q1BSP_TestClipDecal(); V_RenderView ();
else
{
noworld = true;
}
} }
else else
GL_DoSwap(); GL_DoSwap();
@ -273,7 +279,27 @@ void GLSCR_UpdateScreen (void)
GLR_BrightenScreen(); GLR_BrightenScreen();
if (!nohud) if (noworld)
{
extern char levelshotname[];
if ((key_dest == key_console || key_dest == key_game) && SCR_GetLoadingStage() == LS_NONE)
scr_con_current = vid.height;
//draw the levelshot or the conback fullscreen
if (*levelshotname)
{
if(Draw_ScalePic)
Draw_ScalePic(0, 0, vid.width, vid.height, Draw_SafeCachePic (levelshotname));
else
Draw_ConsoleBackground(0, vid.height, true);
}
else
Draw_ConsoleBackground(0, vid.height, true);
nohud = true;
}
else if (!nohud)
SCR_TileClear (); SCR_TileClear ();
SCR_DrawTwoDimensional(uimenu, nohud); SCR_DrawTwoDimensional(uimenu, nohud);

View File

@ -65,6 +65,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define WM_INPUT 255 #define WM_INPUT 255
#endif #endif
#ifndef WS_EX_LAYERED
#define WS_EX_LAYERED 0x00080000
#define LWA_ALPHA 0x00000002
#endif
typedef BOOL (WINAPI *lpfnSetLayeredWindowAttributes)(HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
extern cvar_t vid_conwidth, vid_conautoscale; extern cvar_t vid_conwidth, vid_conautoscale;
@ -79,6 +85,10 @@ extern cvar_t vid_conwidth, vid_conautoscale;
#define BASEWIDTH 320 #define BASEWIDTH 320
#define BASEHEIGHT 200 #define BASEHEIGHT 200
extern cvar_t vid_width;
extern cvar_t vid_height;
extern cvar_t vid_wndalpha;
typedef enum {MS_WINDOWED, MS_FULLSCREEN, MS_FULLDIB, MS_UNINIT} modestate_t; typedef enum {MS_WINDOWED, MS_FULLSCREEN, MS_FULLDIB, MS_UNINIT} modestate_t;
#ifdef USE_D3D #ifdef USE_D3D
@ -143,7 +153,7 @@ LONG WINAPI GLMainWndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
qboolean GLAppActivate(BOOL fActive, BOOL minimize); qboolean GLAppActivate(BOOL fActive, BOOL minimize);
char *VID_GetModeDescription (int mode); char *VID_GetModeDescription (int mode);
void ClearAllStates (void); void ClearAllStates (void);
void VID_UpdateWindowStatus (void); void VID_UpdateWindowStatus (HWND hWnd);
void GL_Init(void *(*getglfunction) (char *name)); void GL_Init(void *(*getglfunction) (char *name));
typedef void (APIENTRY *lp3DFXFUNC) (int, int, int, int, int, const void*); typedef void (APIENTRY *lp3DFXFUNC) (int, int, int, int, int, const void*);
@ -349,14 +359,26 @@ qboolean VID_SetWindowedMode (rendererstate_t *info)
WindowRect.right = info->width; WindowRect.right = info->width;
WindowRect.bottom = info->height; WindowRect.bottom = info->height;
DIBWidth = info->width;
DIBHeight = info->height;
if (sys_hijackwindow) if (sys_parentwindow)
{ {
SetWindowLong(sys_hijackwindow, GWL_STYLE, GetWindowLong(sys_hijackwindow, GWL_STYLE)|WS_OVERLAPPED); SetWindowLong(sys_parentwindow, GWL_STYLE, GetWindowLong(sys_parentwindow, GWL_STYLE)|WS_OVERLAPPED);
WindowStyle = WS_CHILDWINDOW|WS_OVERLAPPED; WindowStyle = WS_CHILDWINDOW|WS_OVERLAPPED;
ExWindowStyle = 0; ExWindowStyle = 0;
if (info->width > sys_parentwidth)
WindowRect.right = sys_parentwidth;
else if (info->width < sys_parentwidth)
WindowRect.left = (sys_parentwidth - info->width)/2;
if (info->height > sys_parentheight)
WindowRect.bottom = sys_parentheight;
else if (info->height < sys_parentheight)
WindowRect.top = (sys_parentheight - info->height)/2;
WindowRect.right += WindowRect.left;
WindowRect.bottom += WindowRect.top;
} }
else else
{ {
@ -367,6 +389,9 @@ qboolean VID_SetWindowedMode (rendererstate_t *info)
WindowStyle |= WS_SIZEBOX | WS_MAXIMIZEBOX; WindowStyle |= WS_SIZEBOX | WS_MAXIMIZEBOX;
} }
DIBWidth = WindowRect.right - WindowRect.left;
DIBHeight = WindowRect.bottom - WindowRect.top;
rect = WindowRect; rect = WindowRect;
AdjustWindowRectEx(&rect, WindowStyle, FALSE, 0); AdjustWindowRectEx(&rect, WindowStyle, FALSE, 0);
@ -382,7 +407,7 @@ qboolean VID_SetWindowedMode (rendererstate_t *info)
rect.left, rect.top, rect.left, rect.top,
wwidth, wwidth,
wheight, wheight,
sys_hijackwindow, sys_parentwindow,
NULL, NULL,
global_hInstance, global_hInstance,
NULL); NULL);
@ -393,8 +418,30 @@ qboolean VID_SetWindowedMode (rendererstate_t *info)
return false; return false;
} }
if (!sys_hijackwindow) if (!sys_parentwindow)
{ {
#ifdef WS_EX_LAYERED
int av;
av = 255*vid_wndalpha.value;
if (av < 70)
av = 70;
if (av < 255)
{
HMODULE hm = GetModuleHandle("user32.dll");
lpfnSetLayeredWindowAttributes pSetLayeredWindowAttributes;
pSetLayeredWindowAttributes = (void*)GetProcAddress(hm, "SetLayeredWindowAttributes");
if (pSetLayeredWindowAttributes)
{
// Set WS_EX_LAYERED on this window
SetWindowLong(dibwindow, GWL_EXSTYLE, GetWindowLong(dibwindow, GWL_EXSTYLE) | WS_EX_LAYERED);
// Make this window 70% alpha
pSetLayeredWindowAttributes(dibwindow, 0, av, LWA_ALPHA);
}
}
#endif
// Center and show the DIB window // Center and show the DIB window
CenterWindow(dibwindow, WindowRect.right - WindowRect.left, CenterWindow(dibwindow, WindowRect.right - WindowRect.left,
WindowRect.bottom - WindowRect.top, false); WindowRect.bottom - WindowRect.top, false);
@ -675,7 +722,7 @@ int GLVID_SetMode (rendererstate_t *info, unsigned char *palette)
window_width = DIBWidth; window_width = DIBWidth;
window_height = DIBHeight; window_height = DIBHeight;
VID_UpdateWindowStatus (); VID_UpdateWindowStatus (mainwindow);
CDAudio_Resume (); CDAudio_Resume ();
scr_disabled_for_loading = temp; scr_disabled_for_loading = temp;
@ -783,8 +830,28 @@ void VID_UnSetMode (void)
VID_UpdateWindowStatus VID_UpdateWindowStatus
================ ================
*/ */
void VID_UpdateWindowStatus (void) void VID_UpdateWindowStatus (HWND hWnd)
{ {
POINT p;
RECT nr;
GetClientRect(hWnd, &nr);
//if its bad then we're probably minimised
if (nr.right <= nr.left)
return;
if (nr.bottom <= nr.top)
return;
WindowRect = nr;
p.x = 0;
p.y = 0;
ClientToScreen(hWnd, &p);
window_x = p.x;
window_y = p.y;
window_width = WindowRect.right - WindowRect.left;
window_height = WindowRect.bottom - WindowRect.top;
glwidth = window_width;
glheight = window_height;
window_rect.left = window_x; window_rect.left = window_x;
window_rect.top = window_y; window_rect.top = window_y;
@ -919,6 +986,62 @@ void VID_Wait_Override_Callback(struct cvar_s *var, char *oldvalue)
qwglSwapIntervalEXT(_vid_wait_override.value); qwglSwapIntervalEXT(_vid_wait_override.value);
} }
void VID_Size_Override_Callback(struct cvar_s *var, char *oldvalue)
{
int nw = vid_width.value;
int nh = vid_height.value;
int nx = 0;
int ny = 0;
if (sys_parentwindow && modestate==MS_WINDOWED)
{
if (nw > sys_parentwidth)
nw = sys_parentwidth;
else
nx = (sys_parentwidth - nw)/2;
if (nh > sys_parentheight)
nh = sys_parentheight;
else
ny = (sys_parentheight - nh)/2;
MoveWindow(mainwindow, nx, ny, nw, nh, FALSE);
}
}
void VID_WndAlpha_Override_Callback(struct cvar_s *var, char *oldvalue)
{
#ifdef GWL_EXSTYLE
if (modestate==MS_WINDOWED)
{
int av;
HMODULE hm = GetModuleHandle("user32.dll");
lpfnSetLayeredWindowAttributes pSetLayeredWindowAttributes;
pSetLayeredWindowAttributes = (void*)GetProcAddress(hm, "SetLayeredWindowAttributes");
av = 255 * var->value;
if (av < 70)
av = 70;
if (av > 255)
av = 255;
if (pSetLayeredWindowAttributes)
{
// Set WS_EX_LAYERED on this window
if (av < 255)
{
SetWindowLong(mainwindow, GWL_EXSTYLE, GetWindowLong(mainwindow, GWL_EXSTYLE) | WS_EX_LAYERED);
// Make this window 70% alpha
pSetLayeredWindowAttributes(mainwindow, 0, av, LWA_ALPHA);
}
else
SetWindowLong(mainwindow, GWL_EXSTYLE, GetWindowLong(mainwindow, GWL_EXSTYLE) & ~WS_EX_LAYERED);
}
}
#endif
}
qboolean screenflush; qboolean screenflush;
void GL_DoSwap (void) void GL_DoSwap (void)
{ {
@ -1358,7 +1481,6 @@ qboolean GLAppActivate(BOOL fActive, BOOL minimize)
return true; return true;
} }
/* main window procedure */ /* main window procedure */
LONG WINAPI GLMainWndProc ( LONG WINAPI GLMainWndProc (
HWND hWnd, HWND hWnd,
@ -1391,19 +1513,7 @@ LONG WINAPI GLMainWndProc (
break; break;
case WM_MOVE: case WM_MOVE:
{ VID_UpdateWindowStatus (hWnd);
RECT r;
// window_x = (int) LOWORD(lParam);
// window_y = (int) HIWORD(lParam);
GetWindowRect(hWnd, &r);
window_x = r.left;
window_y = r.top;
window_width = r.right - r.left;
window_height = r.bottom - r.top;
glwidth = window_width;
glheight = window_height;
}
VID_UpdateWindowStatus ();
break; break;
case WM_KEYDOWN: case WM_KEYDOWN:
@ -1502,13 +1612,9 @@ LONG WINAPI GLMainWndProc (
case WM_SIZE: case WM_SIZE:
if (!vid_initializing) if (!vid_initializing)
{ {
WindowRect.right = ((short*)&lParam)[0] - WindowRect.left;
WindowRect.bottom = ((short*)&lParam)[1] - WindowRect.top;
// force width/height to be updated
glwidth = WindowRect.right - WindowRect.left;
glheight = WindowRect.bottom - WindowRect.top;
Cvar_ForceCallback(&vid_conautoscale); Cvar_ForceCallback(&vid_conautoscale);
Cvar_ForceCallback(&vid_conwidth); Cvar_ForceCallback(&vid_conwidth);
VID_UpdateWindowStatus (hWnd);
} }
break; break;
@ -1602,6 +1708,7 @@ void GLVID_DeInit (void)
ActiveApp = false; ActiveApp = false;
Cvar_Unhook(&_vid_wait_override); Cvar_Unhook(&_vid_wait_override);
Cvar_Unhook(&vid_wndalpha);
UnregisterClass(WINDOW_CLASS_NAME, global_hInstance); UnregisterClass(WINDOW_CLASS_NAME, global_hInstance);
} }
@ -1661,6 +1768,9 @@ qboolean GLVID_Init (rendererstate_t *info, unsigned char *palette)
S_Restart_f(); S_Restart_f();
Cvar_Hook(&_vid_wait_override, VID_Wait_Override_Callback); Cvar_Hook(&_vid_wait_override, VID_Wait_Override_Callback);
Cvar_Hook(&vid_width, VID_Size_Override_Callback);
Cvar_Hook(&vid_height, VID_Size_Override_Callback);
Cvar_Hook(&vid_wndalpha, VID_WndAlpha_Override_Callback);
vid_initialized = true; vid_initialized = true;
vid_initializing = false; vid_initializing = false;

View File

@ -423,6 +423,39 @@ string_t PR_StringToProgs (progfuncs_t *progfuncs, char *str)
return 0; return 0;
} }
char *PR_RemoveProgsString (progfuncs_t *progfuncs, string_t str)
{
char *ret;
//input string is expected to be an allocated string
//if its a temp, or a constant, just return NULL.
if ((unsigned int)str & 0xc0000000)
{
if ((unsigned int)str & 0x80000000)
{
int i = str & ~0x80000000;
if (i >= prinst->numallocedstrings)
{
pr_trace = 1;
return NULL;
}
if (prinst->allocedstrings[i])
{
ret = prinst->allocedstrings[i];
prinst->allocedstrings[i] = NULL; //remove it
return ret;
}
else
{
pr_trace = 1;
return NULL; //urm, was freed...
}
}
}
pr_trace = 1;
return NULL;
}
char *PR_StringToNative (progfuncs_t *progfuncs, string_t str) char *PR_StringToNative (progfuncs_t *progfuncs, string_t str)
{ {
if ((unsigned int)str & 0xc0000000) if ((unsigned int)str & 0xc0000000)

View File

@ -988,7 +988,7 @@ void SV_Savegame_f (void)
{ {
VFS_PRINTF(f, "%s\n", cache->mapname); VFS_PRINTF(f, "%s\n", cache->mapname);
FS_Copy(va("saves/%s.lvc", cache->mapname), va("saves/%s/%s.lvc", savename, cache->mapname), FS_GAME); FS_Copy(va("saves/%s.lvc", cache->mapname), va("saves/%s/%s.lvc", savename, cache->mapname), FS_GAME, FS_GAME);
cache = cache->next; cache = cache->next;
} }

View File

@ -426,8 +426,8 @@ typedef struct client_s
char downloadfn[MAX_QPATH]; char downloadfn[MAX_QPATH];
vfsfile_t *download; // file being downloaded vfsfile_t *download; // file being downloaded
int downloadsize; // total bytes unsigned int downloadsize; // total bytes
int downloadcount; // bytes sent unsigned int downloadcount; // bytes sent
int downloadacked; //DP-specific int downloadacked; //DP-specific
int downloadstarted; //DP-specific int downloadstarted; //DP-specific
@ -1041,6 +1041,7 @@ void SV_UserInit (void);
qboolean SV_TogglePause (client_t *cl); qboolean SV_TogglePause (client_t *cl);
void SV_ClientThink (void); void SV_ClientThink (void);
void SV_Begin_Core(client_t *split);
void VoteFlushAll(void); void VoteFlushAll(void);
void SV_SetUpClientEdict (client_t *cl, edict_t *ent); void SV_SetUpClientEdict (client_t *cl, edict_t *ent);

View File

@ -603,7 +603,7 @@ void SV_SpawnServer (char *server, char *startspot, qboolean noents, qboolean us
#ifndef SERVERONLY #ifndef SERVERONLY
total_loading_size = 100; total_loading_size = 100;
current_loading_size = 0; current_loading_size = 0;
loading_stage = 1; SCR_SetLoadingStage(LS_SERVER);
// SCR_BeginLoadingPlaque(); // SCR_BeginLoadingPlaque();
SCR_ImageName(server); SCR_ImageName(server);
#endif #endif

View File

@ -1742,7 +1742,7 @@ void SV_DarkPlacesDownloadAck(client_t *cl)
} }
} }
void SV_NextChunkedDownload(int chunknum, int ezpercent, int ezfilenum) void SV_NextChunkedDownload(unsigned int chunknum, int ezpercent, int ezfilenum)
{ {
#define CHUNKSIZE 1024 #define CHUNKSIZE 1024
char buffer[CHUNKSIZE]; char buffer[CHUNKSIZE];
@ -1753,9 +1753,9 @@ void SV_NextChunkedDownload(int chunknum, int ezpercent, int ezfilenum)
msg = &host_client->datagram; msg = &host_client->datagram;
if (chunknum < 0 || (chunknum*CHUNKSIZE > host_client->downloadsize)) if (chunknum*CHUNKSIZE > host_client->downloadsize)
{ {
Con_Printf ("Invalid file chunk requested %i to %i of .\n", chunknum*CHUNKSIZE, (chunknum+1)*CHUNKSIZE, host_client->downloadsize); SV_ClientPrintf (host_client, PRINT_HIGH, "Invalid file chunk requested %u to %u of %u.\n", chunknum*CHUNKSIZE, (chunknum+1)*CHUNKSIZE, host_client->downloadsize);
error = true; error = true;
} }
@ -1786,7 +1786,7 @@ void SV_NextChunkedDownload(int chunknum, int ezpercent, int ezfilenum)
if (i > 0) if (i > 0)
{ {
if (msg == &msg_oob)//host_client->datagram.cursize + CHUNKSIZE+5+50 > host_client->datagram.maxsize) if (msg == &msg_oob)
{ {
msg = &msg_oob; msg = &msg_oob;
msg->cursize = 0; msg->cursize = 0;
@ -1798,7 +1798,7 @@ void SV_NextChunkedDownload(int chunknum, int ezpercent, int ezfilenum)
msg->data = oobdata; msg->data = oobdata;
MSG_WriteByte(msg, A2C_PRINT); MSG_WriteByte(msg, A2C_PRINT);
SZ_Write(msg, "\\chunk", 6); SZ_Write(msg, "\\chunk", 6);
MSG_WriteLong(msg, ezfilenum); MSG_WriteLong(msg, ezfilenum); //echoing the file num is used so the packets don't go out of sync.
} }
if (i != CHUNKSIZE) if (i != CHUNKSIZE)
@ -1850,7 +1850,10 @@ void SV_NextDownload_f (void)
#ifdef PEXT_CHUNKEDDOWNLOADS #ifdef PEXT_CHUNKEDDOWNLOADS
if (host_client->fteprotocolextensions & PEXT_CHUNKEDDOWNLOADS) if (host_client->fteprotocolextensions & PEXT_CHUNKEDDOWNLOADS)
{ {
SV_NextChunkedDownload(atoi(Cmd_Argv(1)), atoi(Cmd_Argv(2)), atoi(Cmd_Argv(3))); if (Cmd_Argc() < 2)
SV_NextChunkedDownload(atoi(Cmd_Argv(1)), atoi(Cmd_Argv(2)), atoi(Cmd_Argv(3)));
else
SV_NextChunkedDownload(atoi(Cmd_Argv(1)), atoi(Cmd_Argv(2)), atoi(Cmd_Argv(3)));
return; return;
} }
#endif #endif
@ -2378,7 +2381,7 @@ void SV_StopDownload_f(void)
host_client->download = NULL; host_client->download = NULL;
} }
else else
Con_Printf ("But you're not downloading anything\n"); SV_ClientPrintf(host_client, PRINT_HIGH, "But you're not downloading anything\n");
host_client->downloadstarted = false; host_client->downloadstarted = false;
} }
@ -3015,14 +3018,14 @@ void SV_SetInfo_f (void)
if (Cmd_Argc() == 1) if (Cmd_Argc() == 1)
{ {
Con_Printf ("User info settings:\n"); SV_ClientPrintf(host_client, PRINT_HIGH, "User info settings:\n");
Info_Print (host_client->userinfo); Info_Print (host_client->userinfo);
return; return;
} }
if (Cmd_Argc() != 3) if (Cmd_Argc() != 3)
{ {
Con_Printf ("usage: setinfo [ <key> <value> ]\n"); SV_ClientPrintf(host_client, PRINT_HIGH, "usage: setinfo [ <key> <value> ]\n");
return; return;
} }
@ -3114,7 +3117,9 @@ Dumps the serverinfo info string
*/ */
void SV_ShowServerinfo_f (void) void SV_ShowServerinfo_f (void)
{ {
SV_BeginRedirect(RD_CLIENT, host_client->language);
Info_Print (svs.info); Info_Print (svs.info);
SV_EndRedirect();
} }
void SV_NoSnap_f(void) void SV_NoSnap_f(void)
@ -3228,12 +3233,12 @@ void SV_Vote_f (void)
if (!votelevel.value) if (!votelevel.value)
{ {
Con_TPrintf(STL_NOVOTING); SV_ClientTPrintf(host_client, PRINT_HIGH, STL_NOVOTING);
return; return;
} }
if (host_client->ismuted) if (host_client->ismuted)
{ {
Con_TPrintf(STL_MUTEDVOTE); SV_ClientTPrintf(host_client, PRINT_HIGH, STL_MUTEDVOTE);
return; return;
} }
@ -3247,7 +3252,7 @@ void SV_Vote_f (void)
base = NULL; base = NULL;
if (strchr(command, ';') || !strcmp(command, "if")) if (strchr(command, ';') || !strcmp(command, "if"))
{ {
Con_TPrintf(STL_BADVOTE); SV_ClientTPrintf(host_client, PRINT_HIGH, STL_BADVOTE);
return; return;
} }
num = Cmd_Level(command); num = Cmd_Level(command);
@ -3255,7 +3260,7 @@ void SV_Vote_f (void)
*base = ' '; *base = ' ';
if (num != Cmd_ExecLevel) if (num != Cmd_ExecLevel)
{ {
Con_TPrintf(STL_BADVOTE); SV_ClientTPrintf(host_client, PRINT_HIGH, STL_BADVOTE);
return; return;
} }
@ -3269,13 +3274,13 @@ void SV_Vote_f (void)
if (VoteCount(command, id)) if (VoteCount(command, id))
{ {
VoteRemoveCommands(command, id); VoteRemoveCommands(command, id);
Con_TPrintf(STL_OLDVOTEREMOVED); SV_ClientTPrintf(host_client, PRINT_HIGH, STL_OLDVOTEREMOVED);
return; return;
} }
if (VoteCount(NULL, id)>=3) if (VoteCount(NULL, id)>=3)
{ {
VoteRemoveCommands(NULL, id); VoteRemoveCommands(NULL, id);
Con_TPrintf(STL_VOTESREMOVED); SV_ClientTPrintf(host_client, PRINT_HIGH, STL_VOTESREMOVED);
} }
num = VoteCount(command, -1)+1; num = VoteCount(command, -1)+1;
@ -3312,7 +3317,7 @@ void Cmd_Notarget_f (void)
{ {
if (!sv_allow_cheats) if (!sv_allow_cheats)
{ {
Con_Printf ("Cheats are not allowed on this server\n"); SV_PrintToClient(host_client, PRINT_HIGH, "Cheats are not allowed on this server\n");
return; return;
} }
@ -3328,7 +3333,7 @@ void Cmd_God_f (void)
{ {
if (!sv_allow_cheats) if (!sv_allow_cheats)
{ {
Con_Printf ("Cheats are not allowed on this server\n"); SV_PrintToClient(host_client, PRINT_HIGH, "Cheats are not allowed on this server\n");
return; return;
} }
@ -3355,7 +3360,7 @@ void Cmd_Give_f (void)
if (!sv_allow_cheats) if (!sv_allow_cheats)
{ {
Con_Printf ("Cheats are not allowed on this server\n"); SV_PrintToClient(host_client, PRINT_HIGH, "Cheats are not allowed on this server\n");
return; return;
} }
@ -3410,7 +3415,7 @@ void Cmd_Noclip_f (void)
{ {
if (!sv_allow_cheats) if (!sv_allow_cheats)
{ {
Con_Printf ("Cheats are not allowed on this server\n"); SV_PrintToClient(host_client, PRINT_HIGH, "Cheats are not allowed on this server\n");
return; return;
} }
@ -3436,7 +3441,7 @@ void Cmd_Fly_f (void)
{ {
if (!sv_allow_cheats) if (!sv_allow_cheats)
{ {
Con_Printf ("Cheats are not allowed on this server\n"); SV_PrintToClient(host_client, PRINT_HIGH, "Cheats are not allowed on this server\n");
return; return;
} }
@ -3467,20 +3472,20 @@ void Cmd_SetPos_f(void)
{ {
if (!sv_allow_cheats) if (!sv_allow_cheats)
{ {
Con_Printf ("Cheats are not allowed on this server\n"); SV_PrintToClient(host_client, PRINT_HIGH, "Cheats are not allowed on this server\n");
return; return;
} }
if (Cmd_Argc() != 4) if (Cmd_Argc() != 4)
{ {
Con_Printf ("setpos %i %i %i\n", (int)sv_player->v->origin[0], (int)sv_player->v->origin[1], (int)sv_player->v->origin[2]); SV_ClientPrintf(host_client, PRINT_HIGH, "setpos %f %f %f\n", sv_player->v->origin[0], sv_player->v->origin[1], sv_player->v->origin[2]);
return; return;
} }
SV_LogPlayer(host_client, "setpos cheat"); SV_LogPlayer(host_client, "setpos cheat");
if (sv_player->v->movetype != MOVETYPE_NOCLIP) if (sv_player->v->movetype != MOVETYPE_NOCLIP)
{ {
sv_player->v->movetype = MOVETYPE_NOCLIP; sv_player->v->movetype = MOVETYPE_NOCLIP;
Con_Printf("noclip on\n"); SV_PrintToClient(host_client, PRINT_HIGH, "noclip on\n");
} }
sv_player->v->origin[0] = atof(Cmd_Argv(1)); sv_player->v->origin[0] = atof(Cmd_Argv(1));
@ -3499,7 +3504,6 @@ void SV_SetUpClientEdict (client_t *cl, edict_t *ent)
string_t preserve; string_t preserve;
preserve = ent->v->netname; preserve = ent->v->netname;
Q1QVMED_ClearEdict(ent, true); Q1QVMED_ClearEdict(ent, true);
Con_Printf("client netname: %x\n", preserve);
ent->v->netname = preserve; ent->v->netname = preserve;
} }
else else
@ -3553,19 +3557,19 @@ void Cmd_Join_f (void)
if (svs.gametype != GT_PROGS) if (svs.gametype != GT_PROGS)
{ {
Con_Printf ("Sorry, not implemented in this gamecode type. Try moaning at the dev team\n"); SV_PrintToClient(host_client, PRINT_HIGH, "Sorry, not implemented in this gamecode type. Try moaning at the dev team\n");
return; return;
} }
if (!(host_client->zquake_extensions & Z_EXT_JOIN_OBSERVE)) if (!(host_client->zquake_extensions & Z_EXT_JOIN_OBSERVE))
{ {
Con_Printf ("Your QW client doesn't support this command\n"); SV_PrintToClient(host_client, PRINT_HIGH, "Your QW client doesn't support this command\n");
return; return;
} }
if (password.string[0] && stricmp(password.string, "none")) if (password.string[0] && stricmp(password.string, "none"))
{ {
Con_Printf ("This server requires a %s password. Please disconnect, set the password and reconnect as %s.\n", "player", "player"); SV_ClientPrintf(host_client, PRINT_HIGH, "This server requires a %s password. Please disconnect, set the password and reconnect as %s.\n", "player", "player");
return; return;
} }
@ -3578,7 +3582,7 @@ void Cmd_Join_f (void)
} }
if (numclients >= maxclients.value) if (numclients >= maxclients.value)
{ {
Con_Printf ("Can't join, all player slots full\n"); SV_PrintToClient(host_client, PRINT_HIGH, "Can't join, all player slots full\n");
return; return;
} }
@ -3646,19 +3650,19 @@ void Cmd_Observe_f (void)
if (svs.gametype != GT_PROGS) if (svs.gametype != GT_PROGS)
{ {
Con_Printf ("Sorry, not implemented in this gamecode type. Try moaning at the dev team\n"); SV_PrintToClient(host_client, PRINT_HIGH, "Sorry, not implemented in this gamecode type. Try moaning at the dev team\n");
return; return;
} }
if (!(host_client->zquake_extensions & Z_EXT_JOIN_OBSERVE)) if (!(host_client->zquake_extensions & Z_EXT_JOIN_OBSERVE))
{ {
Con_Printf ("Your QW client doesn't support this command\n"); SV_PrintToClient(host_client, PRINT_HIGH, "Your QW client doesn't support this command\n");
return; return;
} }
if (spectator_password.string[0] && stricmp(spectator_password.string, "none")) if (spectator_password.string[0] && stricmp(spectator_password.string, "none"))
{ {
Con_Printf ("This server requires a %s password. Please disconnect, set the password and reconnect as %s.\n", "spectator", "spectator"); SV_ClientPrintf(host_client, PRINT_HIGH, "This server requires a %s password. Please disconnect, set the password and reconnect as %s.\n", "spectator", "spectator");
return; return;
} }
@ -3670,7 +3674,7 @@ void Cmd_Observe_f (void)
} }
if (numspectators >= maxspectators.value) if (numspectators >= maxspectators.value)
{ {
Con_Printf ("Can't join, all spectator slots full\n"); SV_PrintToClient(host_client, PRINT_HIGH, "Can't join, all spectator slots full\n");
return; return;
} }
@ -3754,9 +3758,9 @@ void Cmd_FPSList_f(void)
} }
if (frames) if (frames)
Con_Printf("%s: %ffps (min%f max %f\n", cl->name, ftime/frames, minf, maxf); SV_ClientPrintf(host_client, PRINT_HIGH, "%s: %ffps (min%f max %f\n", cl->name, ftime/frames, minf, maxf);
else else
Con_Printf("%s: no information available\n", cl->name); SV_ClientPrintf(host_client, PRINT_HIGH, "%s: no information available\n", cl->name);
} }
} }
@ -3766,7 +3770,7 @@ void SV_EnableClientsCSQC(void)
if (host_client->fteprotocolextensions & PEXT_CSQC || atoi(Cmd_Argv(1))) if (host_client->fteprotocolextensions & PEXT_CSQC || atoi(Cmd_Argv(1)))
host_client->csqcactive = true; host_client->csqcactive = true;
else else
Con_Printf("CSQC entities not enabled - no support from network protocol\n"); SV_ClientPrintf(host_client, PRINT_HIGH, "CSQC entities not enabled - no support from network protocol\n");
#endif #endif
} }
void SV_DisableClientsCSQC(void) void SV_DisableClientsCSQC(void)

View File

@ -1755,7 +1755,7 @@ void SV_ClipToLinks ( areanode_t *node, moveclip_t *clip )
if (touch == clip->passedict) if (touch == clip->passedict)
continue; continue;
if (touch->v->solid == SOLID_TRIGGER || touch->v->solid == SOLID_LADDER) if (touch->v->solid == SOLID_TRIGGER || touch->v->solid == SOLID_LADDER)
SV_Error ("Trigger (%s) in clipping list", PR_StringToNative(svprogfuncs, touch->v->classname)); SV_Error ("Trigger (%s) in clipping list", PR_GetString(svprogfuncs, touch->v->classname));
if (clip->type & MOVE_NOMONSTERS && touch->v->solid != SOLID_BSP) if (clip->type & MOVE_NOMONSTERS && touch->v->solid != SOLID_BSP)
continue; continue;