1
0
Fork 0
forked from fte/fteqw

hopefully, everything will work that little bit better.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@1072 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2005-06-04 04:20:20 +00:00
parent 87b0e0aa80
commit c2930803d4
44 changed files with 498 additions and 505 deletions

View file

@ -667,7 +667,7 @@ entity_state_t *CL_FindOldPacketEntity(int num)
packet_entities_t *pack; packet_entities_t *pack;
if (!cl.validsequence) if (!cl.validsequence)
return NULL; return NULL;
pack = &cl.frames[(cl.validsequence)&UPDATE_MASK].packet_entities; pack = &cl.frames[(cls.netchan.incoming_sequence-1)&UPDATE_MASK].packet_entities;
for (pnum=0 ; pnum<pack->num_entities ; pnum++) for (pnum=0 ; pnum<pack->num_entities ; pnum++)
{ {
@ -962,9 +962,9 @@ void CLNQ_ParseDarkPlaces5Entities(void) //the things I do.. :o(
//1: stepping monsters. These have frames and tick at 10fps. //1: stepping monsters. These have frames and tick at 10fps.
//2: physics. Objects moving acording to gravity. //2: physics. Objects moving acording to gravity.
//3: both. This is really awkward. And I'm really lazy. //3: both. This is really awkward. And I'm really lazy.
cl.lerpents[to->number].lerprate = cl.time-cl.lerpents[to->number].lerptime; //time per update cl.lerpents[to->number].lerprate = cl.oldgametime-cl.lerpents[to->number].lerptime; //time per update
cl.lerpents[to->number].frame = from->frame; cl.lerpents[to->number].frame = from->frame;
cl.lerpents[to->number].lerptime = cl.time; cl.lerpents[to->number].lerptime = cl.oldgametime;
if (cl.lerpents[to->number].lerprate>0.2) if (cl.lerpents[to->number].lerprate>0.2)
cl.lerpents[to->number].lerprate=0.2; cl.lerpents[to->number].lerprate=0.2;
@ -974,7 +974,7 @@ void CLNQ_ParseDarkPlaces5Entities(void) //the things I do.. :o(
// cl.lerpents[state->number].lerptime = newlerprate; // cl.lerpents[state->number].lerptime = newlerprate;
// else // else
if (to->frame == from->frame) if (to->frame == from->frame)
newlerprate = cl.time-cl.lerpents[to->number].lerptime; newlerprate = cl.lerpents[to->number].lerprate;
} }
} }
@ -1319,8 +1319,12 @@ void CL_RotateAroundTag(entity_t *ent, int num, int tagent, int tagnum)
void V_AddEntity(entity_t *in) void V_AddEntity(entity_t *in)
{ {
entity_t *ent; entity_t *ent;
if (cl_numvisedicts == MAX_VISEDICTS) if (cl_numvisedicts == MAX_VISEDICTS)
{
Con_Printf("Visedict list is full!\n");
return; // object list is full return; // object list is full
}
ent = &cl_visedicts[cl_numvisedicts]; ent = &cl_visedicts[cl_numvisedicts];
cl_numvisedicts++; cl_numvisedicts++;
@ -1391,6 +1395,11 @@ void CL_LinkPacketEntities (void)
{ {
s1 = &pack->entities[pnum]; s1 = &pack->entities[pnum];
if (cl_numvisedicts == MAX_VISEDICTS)
{
Con_Printf("Too many visible entities\n");
break;
}
ent = &cl_visedicts[cl_numvisedicts]; ent = &cl_visedicts[cl_numvisedicts];
#ifdef Q3SHADERS #ifdef Q3SHADERS
ent->forcedshader = NULL; ent->forcedshader = NULL;
@ -1398,7 +1407,7 @@ void CL_LinkPacketEntities (void)
//figure out the lerp factor //figure out the lerp factor
if (cl.lerpents[s1->number].lerprate<=0) if (cl.lerpents[s1->number].lerprate<=0)
ent->lerpfrac = 1; ent->lerpfrac = 0;
else else
ent->lerpfrac = 1-(cl.time-cl.lerpents[s1->number].lerptime)/cl.lerpents[s1->number].lerprate; ent->lerpfrac = 1-(cl.time-cl.lerpents[s1->number].lerptime)/cl.lerpents[s1->number].lerprate;
if (ent->lerpfrac<0) if (ent->lerpfrac<0)

View file

@ -834,7 +834,7 @@ void VARGS CL_SendClientCommand(qboolean reliable, char *format, ...)
// Con_Printf("Queing stringcmd %s\n", string); // Con_Printf("Queing stringcmd %s\n", string);
#ifdef Q3CLIENT #ifdef Q3CLIENT
if (cls.q2server==2) if (cls.protocol == CP_QUAKE3)
{ {
CLQ3_SendClientCommand("%s", string); CLQ3_SendClientCommand("%s", string);
return; return;
@ -891,6 +891,8 @@ int CL_RemoveClientCommands(char *command)
first->next = next; first->next = next;
removed++; removed++;
} }
else
first = first->next;
} }
return removed; return removed;
@ -952,7 +954,8 @@ unsigned long _stdcall CL_IndepPhysicsThread(void *param)
sleeptime = 1000/fps; sleeptime = 1000/fps;
Sleep(sleeptime); if (sleeptime)
Sleep(sleeptime);
} }
} }
@ -1024,32 +1027,6 @@ void CL_SendCmd (float frametime)
extern cvar_t cl_maxfps; extern cvar_t cl_maxfps;
#ifdef Q3CLIENT
if (cls.q2server==2)
{ //guess what? q3 rules don't require network packet limiting!
usercmd_t ncmd;
memset(&ncmd, 0, sizeof(ncmd));
ncmd.msec = frametime*1000;
CL_BaseMove (&ncmd, 0);
// allow mice or other external controllers to add to the move
IN_Move (&ncmd, 0);
// if we are spectator, try autocam
if (cl.spectator)
Cam_Track(0, &ncmd);
CL_FinishMove(&ncmd, (int)(frametime*1000), 0);
Cam_FinishMove(0, &ncmd);
CLQ3_SendCmd(&ncmd);
return;
}
#endif
if (cls.demoplayback != DPB_NONE) if (cls.demoplayback != DPB_NONE)
{ {
if (cls.demoplayback == DPB_MVD) if (cls.demoplayback == DPB_MVD)
@ -1152,10 +1129,10 @@ void CL_SendCmd (float frametime)
independantphysics[plnum].msec = msecstouse; independantphysics[plnum].msec = msecstouse;
} }
if (!CL_FilterTime(msecstouse, cl_netfps.value<=0?cl_maxfps.value:cl_netfps.value) && msecstouse<255 && cls.state == ca_active) // if (!CL_FilterTime(msecstouse, cl_netfps.value<=0?cl_maxfps.value:cl_netfps.value) && msecstouse<255 && cls.state == ca_active)
{ // {
return; // return;
} // }
#ifdef NQPROT #ifdef NQPROT
if (cls.protocol == CP_NETQUAKE) if (cls.protocol == CP_NETQUAKE)
@ -1168,6 +1145,15 @@ void CL_SendCmd (float frametime)
} }
#endif #endif
#ifdef Q3CLIENT
if (cls.protocol == CP_QUAKE3)
{
CLQ3_SendCmd(&independantphysics[0]);
memset(&independantphysics[0], 0, sizeof(independantphysics[0]));
return;
}
#endif
// Con_Printf("sending %i msecs\n", msecstouse); // Con_Printf("sending %i msecs\n", msecstouse);
seq_hash = cls.netchan.outgoing_sequence; seq_hash = cls.netchan.outgoing_sequence;
@ -1233,6 +1219,7 @@ void CL_SendCmd (float frametime)
i = cls.netchan.outgoing_sequence & UPDATE_MASK; i = cls.netchan.outgoing_sequence & UPDATE_MASK;
cmd = &cl.frames[i].cmd[plnum]; cmd = &cl.frames[i].cmd[plnum];
*cmd = independantphysics[plnum]; *cmd = independantphysics[plnum];
cl.frames[i].senttime = realtime;
memset(&independantphysics[plnum], 0, sizeof(independantphysics[plnum])); memset(&independantphysics[plnum], 0, sizeof(independantphysics[plnum]));
#ifdef Q2CLIENT #ifdef Q2CLIENT

View file

@ -418,7 +418,7 @@ void CL_SendConnectPacket (
#endif #endif
#ifdef Q3CLIENT #ifdef Q3CLIENT
if (cls.q2server==2) if (cls.protocol == CP_QUAKE3)
{ //q3 requires some very strange things. { //q3 requires some very strange things.
CLQ3_SendConnectPacket(adr); CLQ3_SendConnectPacket(adr);
return; return;
@ -494,7 +494,7 @@ void CL_CheckForResend (void)
{ {
#ifdef Q3CLIENT #ifdef Q3CLIENT
case GT_QUAKE3: case GT_QUAKE3:
cls.q2server = 2; cls.protocol = CP_QUAKE3;
break; break;
#endif #endif
#ifdef Q2CLIENT #ifdef Q2CLIENT
@ -602,11 +602,11 @@ void CL_BeginServerReconnect(void)
{ {
#ifndef CLIENTONLY #ifndef CLIENTONLY
if (isDedicated) if (isDedicated)
#endif
{ {
Con_TPrintf (TLC_DEDICATEDCANNOTCONNECT); Con_TPrintf (TLC_DEDICATEDCANNOTCONNECT);
return; return;
} }
#endif
connect_time = 0; connect_time = 0;
CL_CheckForResend(); CL_CheckForResend();
} }
@ -972,6 +972,7 @@ void CL_Disconnect (void)
SCR_EndLoadingPlaque(); SCR_EndLoadingPlaque();
cls.protocol = CP_UNKNOWN; cls.protocol = CP_UNKNOWN;
cl.servercount = 0;
} }
#undef serverrunning #undef serverrunning
@ -1663,7 +1664,7 @@ void CL_ConnectionlessPacket (void)
if (!strcmp(com_token, "hallengeResponse")) if (!strcmp(com_token, "hallengeResponse"))
{ {
#ifdef Q3CLIENT #ifdef Q3CLIENT
cls.q2server = 2; cls.protocol = CP_QUAKE3;
cls.challenge = atoi(s+17); cls.challenge = atoi(s+17);
CL_SendConnectPacket (0, 0/*, ...*/); CL_SendConnectPacket (0, 0/*, ...*/);
return; return;
@ -1709,9 +1710,9 @@ void CL_ConnectionlessPacket (void)
{ {
goto client_connect; goto client_connect;
} }
#endif
else else
cls.protocol = CP_QUAKEWORLD; cls.protocol = CP_QUAKEWORLD;
#endif
cls.challenge = atoi(s); cls.challenge = atoi(s);
for(;;) for(;;)
@ -1807,8 +1808,11 @@ void CL_ConnectionlessPacket (void)
if (c == 'd') //note - this conflicts with qw masters, our browser uses a different socket. if (c == 'd') //note - this conflicts with qw masters, our browser uses a different socket.
{ {
Con_Printf("Disconnect\n"); if (cls.demoplayback != DPB_NONE)
CL_Disconnect_f(); {
Con_Printf("Disconnect\n");
CL_Disconnect_f();
}
return; return;
} }
@ -1829,7 +1833,7 @@ client_connect: //fixme: make function
Netchan_Setup (NS_CLIENT, &cls.netchan, net_from, cls.qport); Netchan_Setup (NS_CLIENT, &cls.netchan, net_from, cls.qport);
cls.netchan.compress = compress; cls.netchan.compress = compress;
#ifdef Q3CLIENT #ifdef Q3CLIENT
if (cls.q2server < 2) if (cls.protocol != CP_QUAKE3)
#endif #endif
CL_SendClientCommand(true, "new"); CL_SendClientCommand(true, "new");
cls.state = ca_connected; cls.state = ca_connected;
@ -1901,6 +1905,13 @@ client_connect: //fixme: make function
Con_Print (s); Con_Print (s);
return; return;
} }
if (c == 'r')//dp's reject
{
s = MSG_ReadString ();
Con_Printf("r%s\n", s);
return;
}
// ping from somewhere // ping from somewhere
if (c == A2A_PING) if (c == A2A_PING)
@ -1965,7 +1976,7 @@ void CLNQ_ConnectionlessPacket(void)
case CCREP_REJECT: case CCREP_REJECT:
s = MSG_ReadString(); s = MSG_ReadString();
Con_Printf("Connect failed\n%s\n"); Con_Printf("Connect failed\n%s\n", s);
return; return;
} }
} }
@ -2357,6 +2368,8 @@ void CL_Init (void)
Cvar_Register (&host_mapname, "Scripting"); Cvar_Register (&host_mapname, "Scripting");
Cvar_Register (&cl_indepphysics, cl_controlgroup);
#ifdef IRCCLIENT #ifdef IRCCLIENT
Cmd_AddCommand ("irc", CL_IRC_f); Cmd_AddCommand ("irc", CL_IRC_f);
#endif #endif

View file

@ -373,7 +373,16 @@ void CL_FinishDownload(char *filename, char *tempname)
Skin_FlushSkin(filename); Skin_FlushSkin(filename);
} }
} }
/*
void MapDownload(char *name, qboolean gotornot)
{
if (gotornot) //yay
return;
CL_EnqueDownload(filename, false, false);
}
*/
/* /*
=============== ===============
CL_CheckOrDownloadFile CL_CheckOrDownloadFile
@ -407,6 +416,15 @@ qboolean CL_CheckOrDownloadFile (char *filename, int nodelay)
SCR_EndLoadingPlaque(); //release console. SCR_EndLoadingPlaque(); //release console.
/* if (1)
if (strncmp(filename, "maps/", 5))
if (strcmp(filename + strlen(filename)-4, ".bsp"))
{
char base[MAX_QPATH];
COM_FileBase(filename, base);
HTTP_CL_Get(va("http://maps.quakeworld.nu/%s/download/", base), filename, MapDownload);
}
*/
if (CL_EnqueDownload(filename, false, false)) if (CL_EnqueDownload(filename, false, false))
return !nodelay; return !nodelay;
else else
@ -1314,6 +1332,9 @@ void CL_ParseServerData (void)
Con_TPrintf (TLC_LINEBREAK_NEWLEVEL); Con_TPrintf (TLC_LINEBREAK_NEWLEVEL);
Con_TPrintf (TLC_PC_PS_NL, 2, str); Con_TPrintf (TLC_PC_PS_NL, 2, str);
if (CL_RemoveClientCommands("new")) //mvdsv is really appaling some times.
Con_Printf("Multiple 'new' commands?!?!? This server needs reinstalling!\n");
memset(cl.sound_name, 0, sizeof(cl.sound_name)); memset(cl.sound_name, 0, sizeof(cl.sound_name));
#ifdef PEXT_PK3DOWNLOADS #ifdef PEXT_PK3DOWNLOADS
if (cls.fteprotocolextensions & PEXT_PK3DOWNLOADS) //instead of going for a soundlist, go for the pk3 list instead. The server will make us go for the soundlist after. if (cls.fteprotocolextensions & PEXT_PK3DOWNLOADS) //instead of going for a soundlist, go for the pk3 list instead. The server will make us go for the soundlist after.
@ -2190,7 +2211,8 @@ void CL_ParseStartSoundPacket(void)
S_StartSound (ent, channel, cl.sound_precache[sound_num], pos, volume/255.0, attenuation); S_StartSound (ent, channel, cl.sound_precache[sound_num], pos, volume/255.0, attenuation);
TP_CheckPickupSound(cl.sound_name[sound_num], pos); if (ent == cl.playernum[0]+1)
TP_CheckPickupSound(cl.sound_name[sound_num], pos);
} }
#ifdef Q2CLIENT #ifdef Q2CLIENT
@ -2296,6 +2318,9 @@ void CLNQ_ParseStartSoundPacket(void)
pos[i] = MSG_ReadCoord (); pos[i] = MSG_ReadCoord ();
S_StartSound (ent, channel, cl.sound_precache[sound_num], pos, volume/255.0, attenuation); S_StartSound (ent, channel, cl.sound_precache[sound_num], pos, volume/255.0, attenuation);
if (ent == cl.playernum[0]+1)
TP_CheckPickupSound(cl.sound_name[sound_num], pos);
} }
#endif #endif
@ -2632,7 +2657,7 @@ void CL_MuzzleFlash (void)
if ((unsigned)(i) <= MAX_CLIENTS && i > 0) if ((unsigned)(i) <= MAX_CLIENTS && i > 0)
{ {
// don't draw our own muzzle flash in gl if flashblending // don't draw our own muzzle flash in gl if flashblending
if (i-1 == cl.playernum[0] && r_flashblend.value) if (i-1 == cl.playernum[0] && r_flashblend.value && qrenderer == QR_OPENGL)
return; return;
pl = &cl.frames[parsecountmod].playerstate[i-1]; pl = &cl.frames[parsecountmod].playerstate[i-1];
@ -2654,8 +2679,8 @@ void CL_MuzzleFlash (void)
dl->color[1] = 0.1; dl->color[1] = 0.1;
dl->color[2] = 0.05; dl->color[2] = 0.05;
dl->channelfade[0] = 1.5; dl->channelfade[0] = 1.5;
dl->channelfade[1] = 0.75; dl->channelfade[1] = 0.75;
dl->channelfade[2] = 0.375; dl->channelfade[2] = 0.375;
} }
@ -3878,6 +3903,7 @@ void CLNQ_ParseServerMessage (void)
received_framecount = host_framecount; received_framecount = host_framecount;
cl.last_servermessage = realtime; cl.last_servermessage = realtime;
cl.oldgametime = cl.gametime; cl.oldgametime = cl.gametime;
cl.oldgametimemark = cl.gametimemark;
cl.gametime = MSG_ReadFloat(); cl.gametime = MSG_ReadFloat();
cl.gametimemark = realtime; cl.gametimemark = realtime;
if (nq_dp_protocol<5) if (nq_dp_protocol<5)

View file

@ -555,9 +555,20 @@ void CL_PredictMovePNum (int pnum)
if (cl.oldgametime) if (cl.oldgametime)
{ {
cl.time = cl.gametime; float want;
if (cl.time > realtime) float off;
cl.time = realtime;
want = cl.oldgametime + realtime - cl.gametimemark;
off = (want - cl.time);
if (want>cl.time)
cl.time = want;
// Con_Printf("Drifted to %f off by %f\n", cl.time, off);
if (cl.time > cl.gametime)
cl.time = cl.gametime;
if (cl.time < cl.oldgametime)
cl.time = cl.oldgametime;
} }
else else
{ {
@ -612,6 +623,31 @@ void CL_PredictMovePNum (int pnum)
old = CL_FindOldPacketEntity (cl.viewentity[pnum]); old = CL_FindOldPacketEntity (cl.viewentity[pnum]);
if (state) if (state)
{ {
float f;
extern cvar_t cl_nolerp;
//figure out the lerp factor
if (cl.lerpents[state->number].lerprate<=0)
f = 1;
else
f = (cl.time-cl.lerpents[state->number].lerptime)/cl.lerpents[state->number].lerprate;
if (f<0)
f=0;
if (f>1)
f=1;
// if (cl_nolerp.value)
// f = 1;
// calculate origin
for (i=0 ; i<3 ; i++)
lrp[i] = cl.lerpents[state->number].origin[i] +
f * (state->origin[i] - cl.lerpents[state->number].origin[i]);
org = lrp;
/*
if (old) if (old)
{ {
float f = (cl.time-cl.lerpents[cl.viewentity[pnum]].lerptime)/cl.lerpents[cl.viewentity[pnum]].lerprate; float f = (cl.time-cl.lerpents[cl.viewentity[pnum]].lerptime)/cl.lerpents[cl.viewentity[pnum]].lerprate;
@ -632,6 +668,7 @@ void CL_PredictMovePNum (int pnum)
org = state->origin; org = state->origin;
Con_Printf("No old\n"); Con_Printf("No old\n");
} }
*/
goto fixedorg; goto fixedorg;
} }

View file

@ -760,6 +760,10 @@ void SCR_CalcRefdef (void)
} }
r_refdef.fov_x = scr_fov.value; r_refdef.fov_x = scr_fov.value;
if (r_refdef.fov_x < 10)
r_refdef.fov_x = 10;
else if (r_refdef.fov_x > 170)
r_refdef.fov_x = 170;
r_refdef.fov_y = CalcFov (r_refdef.fov_x, r_refdef.vrect.width, r_refdef.vrect.height); r_refdef.fov_y = CalcFov (r_refdef.fov_x, r_refdef.vrect.width, r_refdef.vrect.height);

View file

@ -289,7 +289,8 @@ typedef struct
CP_UNKNOWN, CP_UNKNOWN,
CP_QUAKEWORLD, CP_QUAKEWORLD,
CP_NETQUAKE, CP_NETQUAKE,
CP_QUAKE2 CP_QUAKE2,
CP_QUAKE3
} protocol; } protocol;
qboolean resendinfo; qboolean resendinfo;
@ -452,8 +453,8 @@ typedef struct
// is rendering at. allways <= realtime // is rendering at. allways <= realtime
float gametime; float gametime;
float gametimemark; float gametimemark;
float oldgametime; //used as the old time to lerp cl.time from. float oldgametime; //used as the old time to lerp cl.time from.
//if it's 0, cl.time will casually increase. float oldgametimemark; //if it's 0, cl.time will casually increase.
vec3_t simorg[MAX_SPLITS]; vec3_t simorg[MAX_SPLITS];
vec3_t simvel[MAX_SPLITS]; vec3_t simvel[MAX_SPLITS];

View file

@ -911,7 +911,7 @@ void Con_DrawInput (void)
if (key_linepos == i) //cursor is at end if (key_linepos == i) //cursor is at end
{ {
x = text[1] == '/'?2:1; x = text[1] == '/'?2:1;
fname = Cmd_CompleteCommand(text+x, true, con_commandmatch); fname = Cmd_CompleteCommand(text+x, 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-x; fname[p]>' '; p++)

View file

@ -1027,7 +1027,11 @@ static void ProcessMouse(mouse_t *mouse, usercmd_t *cmd, int pnum)
if ( (in_strafe.state[pnum] & 1) || (lookstrafe.value && (in_mlook.state[pnum] & 1) )) if ( (in_strafe.state[pnum] & 1) || (lookstrafe.value && (in_mlook.state[pnum] & 1) ))
cmd->sidemove += m_side.value * mouse_x; cmd->sidemove += m_side.value * mouse_x;
else else
{
if ((int)((cl.viewangles[pnum][PITCH]+89.99)/180) & 1)
mouse_x *= -1;
cl.viewangles[pnum][YAW] -= m_yaw.value * mouse_x; cl.viewangles[pnum][YAW] -= m_yaw.value * mouse_x;
}
if (in_mlook.state[pnum] & 1) if (in_mlook.state[pnum] & 1)
V_StopPitchDrift (pnum); V_StopPitchDrift (pnum);

View file

@ -227,7 +227,7 @@ qboolean Cmd_IsCommand (char *line)
command[i] = s[i]; command[i] = s[i];
command[i] = 0; command[i] = 0;
cmd = Cmd_CompleteCommand (command, true, -1); cmd = Cmd_CompleteCommand (command, true, false, -1);
if (!cmd || strcmp (cmd, command) ) if (!cmd || strcmp (cmd, command) )
return false; // just a chat message return false; // just a chat message
return true; return true;
@ -282,7 +282,7 @@ void CompleteCommand (qboolean force)
int x=0; int x=0;
for (i = 1; ; i++) for (i = 1; ; i++)
{ {
cmd = Cmd_CompleteCommand (s, true, i); cmd = Cmd_CompleteCommand (s, true, true, i);
if (!cmd) if (!cmd)
break; break;
if (i == 1) if (i == 1)
@ -293,13 +293,13 @@ void CompleteCommand (qboolean force)
Con_Printf("\n"); Con_Printf("\n");
} }
cmd = Cmd_CompleteCommand (s, true, 2); cmd = Cmd_CompleteCommand (s, true, true, 2);
if (!cmd || force) if (!cmd || force)
{ {
if (!force) if (!force)
cmd = Cmd_CompleteCommand (s, false, 1); cmd = Cmd_CompleteCommand (s, false, true, 1);
else else
cmd = Cmd_CompleteCommand (s, true, con_commandmatch); cmd = Cmd_CompleteCommand (s, true, true, con_commandmatch);
if (cmd) if (cmd)
{ {
key_lines[edit_line][1] = '/'; key_lines[edit_line][1] = '/';
@ -312,7 +312,7 @@ void CompleteCommand (qboolean force)
// if (strlen(cmd)>strlen(s)) // if (strlen(cmd)>strlen(s))
{ {
cmd = Cmd_CompleteCommand (s, true, 0); cmd = Cmd_CompleteCommand (s, true, true, 0);
if (cmd && !strcmp(s, cmd)) //also a compleate var if (cmd && !strcmp(s, cmd)) //also a compleate var
{ {
key_lines[edit_line][key_linepos] = ' '; key_lines[edit_line][key_linepos] = ' ';
@ -323,7 +323,7 @@ void CompleteCommand (qboolean force)
return; return;
} }
} }
cmd = Cmd_CompleteCommand (s, false, 0); cmd = Cmd_CompleteCommand (s, false, true, 0);
if (cmd) if (cmd)
{ {
i = key_lines[edit_line][1] == '/'?2:1; i = key_lines[edit_line][1] == '/'?2:1;
@ -344,7 +344,7 @@ void CompleteCommand (qboolean force)
} }
con_commandmatch++; con_commandmatch++;
if (!Cmd_CompleteCommand(s, true, con_commandmatch)) if (!Cmd_CompleteCommand(s, true, true, con_commandmatch))
con_commandmatch = 1; con_commandmatch = 1;
} }
@ -424,7 +424,7 @@ void Key_Console (int key)
if (key == K_SPACE && con_current->commandcompletion) if (key == K_SPACE && con_current->commandcompletion)
{ {
if (keydown[K_SHIFT] && Cmd_CompleteCommand(key_lines[edit_line]+1, true, con_current->commandcompletion)) if (keydown[K_SHIFT] && Cmd_CompleteCommand(key_lines[edit_line]+1, true, true, con_current->commandcompletion))
{ {
CompleteCommand (true); CompleteCommand (true);
return; return;

View file

@ -918,6 +918,8 @@ void MasterInfo_ProcessHTTP(char *name, qboolean success)
return; return;
el = COM_LoadTempFile(name); el = COM_LoadTempFile(name);
if (!el)
return;
while(*el) while(*el)
{ {
s = el; s = el;
@ -1362,12 +1364,16 @@ int CL_ReadServerInfo(char *msg, int servertype, qboolean favorite)
Q_strncpyz(info->map, Info_ValueForKey(msg, "map"), sizeof(info->map)); Q_strncpyz(info->map, Info_ValueForKey(msg, "map"), sizeof(info->map));
} }
strcpy(details.info, msg);
msg = msg+strlen(msg)+1;
info->players=details.numplayers = 0;
if (!strchr(msg, '\n'))
info->players = atoi(Info_ValueForKey(details.info, "clients"));
else
{ {
int clnum; int clnum;
strcpy(details.info, msg);
msg = msg+strlen(msg)+1;
info->players=details.numplayers = 0;
for (clnum=0; clnum < MAX_CLIENTS; clnum++) for (clnum=0; clnum < MAX_CLIENTS; clnum++)
{ {
nl = strchr(msg, '\n'); nl = strchr(msg, '\n');

View file

@ -333,7 +333,67 @@ static void PF_makevectors (progfuncs_t *prinst, struct globalvars_s *pr_globals
AngleVectors (G_VECTOR(OFS_PARM0), csqcg.forward, csqcg.right, csqcg.up); AngleVectors (G_VECTOR(OFS_PARM0), csqcg.forward, csqcg.right, csqcg.up);
} }
static void PF_R_AddEntity(progfuncs_t *prinst, struct globalvars_s *pr_globals) void QuaternainToAngleMatrix(float *quat, vec3_t *mat)
{
float xx = quat[0] * quat[0];
float xy = quat[0] * quat[1];
float xz = quat[0] * quat[2];
float xw = quat[0] * quat[3];
float yy = quat[1] * quat[1];
float yz = quat[1] * quat[2];
float yw = quat[1] * quat[3];
float zz = quat[2] * quat[2];
float zw = quat[2] * quat[3];
mat[0][0] = 1 - 2 * ( yy + zz );
mat[0][1] = 2 * ( xy - zw );
mat[0][2] = 2 * ( xz + yw );
mat[1][0] = 2 * ( xy + zw );
mat[1][1] = 1 - 2 * ( xx + zz );
mat[1][2] = 2 * ( yz - xw );
mat[2][0] = 2 * ( xz - yw );
mat[2][1] = 2 * ( yz + xw );
mat[2][2] = 1 - 2 * ( xx + yy );
}
void quaternion_multiply(float *a, float *b, float *c)
{
#define x1 a[0]
#define y1 a[1]
#define z1 a[2]
#define w1 a[3]
#define x2 b[0]
#define y2 b[1]
#define z2 b[2]
#define w2 b[3]
c[0] = w1*x2 + x1*w2 + y1*z2 - z1*y2;
c[1] = w1*y2 + y1*w2 + z1*x2 - x1*z2;
c[2] = w1*z2 + z1*w2 + x1*y2 - y1*x2;
c[3] = w1*w2 - x1*x2 - y1*y2 - z1*z2;
}
void quaternion_rotation(float pitch, float roll, float yaw, float angle, float *quat)
{
float sin_a, cos_a;
sin_a = sin( angle / 360 );
cos_a = cos( angle / 360 );
quat[0] = pitch * sin_a;
quat[1] = yaw * sin_a;
quat[2] = roll * sin_a;
quat[3] = cos_a;
}
void EularToQuaternian(vec3_t angles, float *quat)
{
float x[4] = {sin(angles[2]/360), 0, 0, cos(angles[2]/360)};
float y[4] = {0, sin(angles[1]/360), 0, cos(angles[1]/360)};
float z[4] = {0, 0, sin(angles[0]/360), cos(angles[0]/360)};
float t[4];
quaternion_multiply(x, y, t);
quaternion_multiply(t, z, quat);
}
void _PF_R_AddEntity(progfuncs_t *prinst, struct globalvars_s *pr_globals)
{ {
csqcedict_t *in = (void*)G_EDICT(prinst, OFS_PARM0); csqcedict_t *in = (void*)G_EDICT(prinst, OFS_PARM0);
entity_t ent; entity_t ent;
@ -375,6 +435,7 @@ static void PF_R_AddEntity(progfuncs_t *prinst, struct globalvars_s *pr_globals)
ent.angles[0] = in->v->angles[0]; ent.angles[0] = in->v->angles[0];
ent.angles[1] = in->v->angles[1]; ent.angles[1] = in->v->angles[1];
ent.angles[2] = in->v->angles[2]; ent.angles[2] = in->v->angles[2];
memcpy(ent.origin, in->v->origin, sizeof(vec3_t)); memcpy(ent.origin, in->v->origin, sizeof(vec3_t));
AngleVectors(ent.angles, ent.axis[0], ent.axis[1], ent.axis[2]); AngleVectors(ent.angles, ent.axis[0], ent.axis[1], ent.axis[2]);
VectorInverse(ent.axis[1]); VectorInverse(ent.axis[1]);
@ -384,6 +445,30 @@ static void PF_R_AddEntity(progfuncs_t *prinst, struct globalvars_s *pr_globals)
ent.skinnum = in->v->skin; ent.skinnum = in->v->skin;
V_AddEntity(&ent); V_AddEntity(&ent);
/*
{
float a[4];
float q[4];
float r[4];
EularToQuaternian(ent.angles, a);
QuaternainToAngleMatrix(a, ent.axis);
ent.origin[0] += 16;
V_AddEntity(&ent);
quaternion_rotation(0, 0, 1, cl.time*360, r);
quaternion_multiply(a, r, q);
QuaternainToAngleMatrix(q, ent.axis);
ent.origin[0] -= 32;
ent.angles[1] = cl.time;
V_AddEntity(&ent);
}
*/
}
void PF_R_AddEntity(progfuncs_t *prinst, struct globalvars_s *pr_globals)
{
_PF_R_AddEntity(prinst, pr_globals);
} }
static void PF_R_AddDynamicLight(progfuncs_t *prinst, struct globalvars_s *pr_globals) static void PF_R_AddDynamicLight(progfuncs_t *prinst, struct globalvars_s *pr_globals)
@ -937,11 +1022,10 @@ static void PF_cs_setsensativityscaler (progfuncs_t *prinst, struct globalvars_s
static void PF_cs_pointparticles (progfuncs_t *prinst, struct globalvars_s *pr_globals) static void PF_cs_pointparticles (progfuncs_t *prinst, struct globalvars_s *pr_globals)
{ {
char *effectname = PR_GetStringOfs(prinst, OFS_PARM0); int effectnum = G_FLOAT(OFS_PARM0);
float *org = G_VECTOR(OFS_PARM1); float *org = G_VECTOR(OFS_PARM1);
float *vel = G_VECTOR(OFS_PARM2); float *vel = G_VECTOR(OFS_PARM2);
float count = G_FLOAT(OFS_PARM3); float count = G_FLOAT(OFS_PARM3);
int effectnum = P_AllocateParticleType(effectname);
if (*prinst->callargc < 3) if (*prinst->callargc < 3)
vel = vec3_origin; vel = vec3_origin;
@ -954,7 +1038,7 @@ static void PF_cs_pointparticles (progfuncs_t *prinst, struct globalvars_s *pr_g
static void PF_cs_particlesloaded (progfuncs_t *prinst, struct globalvars_s *pr_globals) static void PF_cs_particlesloaded (progfuncs_t *prinst, struct globalvars_s *pr_globals)
{ {
char *effectname = PR_GetStringOfs(prinst, OFS_PARM0); char *effectname = PR_GetStringOfs(prinst, OFS_PARM0);
G_FLOAT(OFS_RETURN) = P_DescriptionIsLoaded(effectname); G_FLOAT(OFS_RETURN) = P_ParticleTypeForName(effectname);
} }
//get the input commands, and stuff them into some globals. //get the input commands, and stuff them into some globals.
@ -1172,6 +1256,26 @@ static void PF_checkextension (progfuncs_t *prinst, struct globalvars_s *pr_glob
G_FLOAT(OFS_RETURN) = 0; G_FLOAT(OFS_RETURN) = 0;
} }
void PF_cs_sound(progfuncs_t *prinst, struct globalvars_s *pr_globals)
{
char *sample;
int channel;
csqcedict_t *entity;
int volume;
float attenuation;
sfx_t *sfx;
entity = G_EDICT(prinst, OFS_PARM0);
channel = G_FLOAT(OFS_PARM1);
sample = PR_GetStringOfs(prinst, OFS_PARM2);
volume = G_FLOAT(OFS_PARM3) * 255;
attenuation = G_FLOAT(OFS_PARM4);
sfx = S_PrecacheSound(sample);
if (sfx)
S_StartSound(-entity->entnum, channel, sfx, entity->v->origin, volume, attenuation);
};
#define PF_FixTen PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme #define PF_FixTen PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme
@ -1186,7 +1290,7 @@ static builtin_t csqc_builtins[] = {
PF_Fixme, PF_Fixme,
PF_Fixme, //PF_break, PF_Fixme, //PF_break,
PF_random, PF_random,
PF_Fixme, //PF_sound, PF_cs_sound, //PF_sound,
PF_normalize, PF_normalize,
//10 //10
PF_error, PF_error,

View file

@ -1287,7 +1287,7 @@ void P_NewServer(void)
Con_Printf("Couldn't find particle description, using spikeset\n"); Con_Printf("Couldn't find particle description, using spikeset\n");
Cbuf_AddText(particle_set_spikeset, RESTRICT_SERVER); Cbuf_AddText(particle_set_spikeset, RESTRICT_SERVER);
} }
/*#if defined(_DEBUG) && defined(WIN32) //expand the particles cfg into a C style quoted string, and copy to clipboard so I can paste it in. #if defined(_DEBUG) && defined(WIN32) //expand the particles cfg into a C style quoted string, and copy to clipboard so I can paste it in.
{ {
char *TL_ExpandToCString(char *in); char *TL_ExpandToCString(char *in);
extern HWND mainwindow; extern HWND mainwindow;
@ -1324,7 +1324,7 @@ void P_NewServer(void)
SetClipboardData(CF_TEXT, hglbCopy); SetClipboardData(CF_TEXT, hglbCopy);
CloseClipboard(); CloseClipboard();
} }
#endif*/ #endif
} }
} }
@ -1471,7 +1471,11 @@ glEnable(GL_DEPTH_TEST);
if (Length(vdist) > (1024+512)*frandom()) if (Length(vdist) > (1024+512)*frandom())
continue; continue;
VectorMA(org, 0.5, st->face->normal, org); if (st->face->flags & SURF_PLANEBACK)
VectorMA(org, -0.5, st->face->plane->normal, org);
else
VectorMA(org, 0.5, st->face->plane->normal, org);
if (!(cl.worldmodel->hulls->funcs.HullPointContents(cl.worldmodel->hulls, org) & FTECONTENTS_SOLID)) if (!(cl.worldmodel->hulls->funcs.HullPointContents(cl.worldmodel->hulls, org) & FTECONTENTS_SOLID))
{ {
if (st->face->flags & SURF_PLANEBACK) if (st->face->flags & SURF_PLANEBACK)
@ -1726,7 +1730,7 @@ int P_RunParticleEffectTypeString (vec3_t org, vec3_t dir, float count, char *na
return P_RunParticleEffectType(org, dir, count, type); return P_RunParticleEffectType(org, dir, count, type);
} }
int Q1BSP_ClipDecal(vec3_t center, vec3_t normal, vec3_t tangent, float size, float **out); int Q1BSP_ClipDecal(vec3_t center, vec3_t normal, vec3_t tangent, vec3_t tangent2, float size, float **out);
int P_RunParticleEffectType (vec3_t org, vec3_t dir, float count, int typenum) int P_RunParticleEffectType (vec3_t org, vec3_t dir, float count, int typenum)
{ {
part_type_t *ptype = &part_type[typenum]; part_type_t *ptype = &part_type[typenum];
@ -1763,7 +1767,7 @@ int P_RunParticleEffectType (vec3_t org, vec3_t dir, float count, int typenum)
CrossProduct(dir, vec, tangent); CrossProduct(dir, vec, tangent);
CrossProduct(dir, tangent, t2); CrossProduct(dir, tangent, t2);
decalcount = Q1BSP_ClipDecal(org, dir, tangent, ptype->scale, &decverts); decalcount = Q1BSP_ClipDecal(org, dir, tangent, t2, ptype->scale, &decverts);
while(decalcount) while(decalcount)
{ {
if (!free_decals) if (!free_decals)
@ -1781,9 +1785,8 @@ int P_RunParticleEffectType (vec3_t org, vec3_t dir, float count, int typenum)
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
{ {
VectorSubtract(d->vertex[i], org, vec); VectorSubtract(d->vertex[i], org, vec);
dist = DotProduct(vec, dir)/ptype->scale; d->texcoords[i][0] = (DotProduct(vec, t2)/ptype->scale)+0.5;
d->texcoords[i][0] = ((DotProduct(vec, t2)*(1-dist))/ptype->scale)+0.5; d->texcoords[i][1] = (DotProduct(vec, tangent)/ptype->scale)+0.5;
d->texcoords[i][1] = ((DotProduct(vec, tangent)*(1-dist))/ptype->scale)+0.5;
} }
d->die = ptype->randdie*frandom(); d->die = ptype->randdie*frandom();
@ -3414,7 +3417,7 @@ void DrawParticleTypes (void texturedparticles(particle_t *,part_type_t*), void
{ {
if (type->clippeddecals) if (type->clippeddecals)
{ {
for ( ;; ) /* for ( ;; )
{ {
dkill = type->clippeddecals; dkill = type->clippeddecals;
if (dkill && dkill->die < particletime) if (dkill && dkill->die < particletime)
@ -3431,9 +3434,9 @@ void DrawParticleTypes (void texturedparticles(particle_t *,part_type_t*), void
} }
break; break;
} }
for (d=type->clippeddecals ; d ; d=d->next) */ for (d=type->clippeddecals ; d ; d=d->next)
{ {
for ( ;; ) /* for ( ;; )
{ {
dkill = d->next; dkill = d->next;
if (dkill && dkill->die < particletime) if (dkill && dkill->die < particletime)
@ -3446,7 +3449,7 @@ void DrawParticleTypes (void texturedparticles(particle_t *,part_type_t*), void
continue; continue;
} }
break; break;
} }*/

View file

@ -40,7 +40,7 @@ typedef struct entity_s
{ {
int keynum; // for matching entities in different frames int keynum; // for matching entities in different frames
vec3_t origin; vec3_t origin;
vec3_t angles; vec3_t angles;
vec3_t axis[3]; vec3_t axis[3];
byte_vec4_t shaderRGBA; byte_vec4_t shaderRGBA;

View file

@ -111,6 +111,7 @@ static cvar_t vid_height = {"vid_height", "480", NULL, CVAR_ARCHIVE|CVAR_RENDERE
static cvar_t vid_refreshrate = {"vid_displayfrequency", "0", NULL, CVAR_ARCHIVE|CVAR_RENDERERLATCH}; static cvar_t vid_refreshrate = {"vid_displayfrequency", "0", NULL, CVAR_ARCHIVE|CVAR_RENDERERLATCH};
cvar_t gl_motionblur = {"gl_motionblur", "0"}; cvar_t gl_motionblur = {"gl_motionblur", "0"};
cvar_t gl_motionblurscale = {"gl_motionblurscale", "1"};
cvar_t gl_fontedgeclamp = {"gl_fontedgeclamp", "0"}; //gl blends. Set this to 1 to stop the outside of your conchars from being visible cvar_t gl_fontedgeclamp = {"gl_fontedgeclamp", "0"}; //gl blends. Set this to 1 to stop the outside of your conchars from being visible
cvar_t gl_font = {"gl_font", ""}; cvar_t gl_font = {"gl_font", ""};
cvar_t gl_conback = {"gl_conback", ""}; cvar_t gl_conback = {"gl_conback", ""};
@ -287,6 +288,7 @@ void GLRenderer_Init(void)
Cvar_Register (&gl_ztrick, GLRENDEREROPTIONS); Cvar_Register (&gl_ztrick, GLRENDEREROPTIONS);
Cvar_Register (&gl_motionblur, GLRENDEREROPTIONS); Cvar_Register (&gl_motionblur, GLRENDEREROPTIONS);
Cvar_Register (&gl_motionblurscale, GLRENDEREROPTIONS);
Cvar_Register (&gl_max_size, GLRENDEREROPTIONS); Cvar_Register (&gl_max_size, GLRENDEREROPTIONS);
Cvar_Register (&gl_maxdist, GLRENDEREROPTIONS); Cvar_Register (&gl_maxdist, GLRENDEREROPTIONS);
Cvar_Register (&vid_conwidth, GLRENDEREROPTIONS); Cvar_Register (&vid_conwidth, GLRENDEREROPTIONS);
@ -1647,8 +1649,6 @@ TRACE(("dbg: R_ApplyRenderer: reloading ALL models\n"));
UI_Reset(); UI_Reset();
return false; return false;
} }
S_ExtraUpdate();
} }
loadmodel = cl.worldmodel = cl.model_precache[1]; loadmodel = cl.worldmodel = cl.model_precache[1];
@ -1700,9 +1700,12 @@ TRACE(("dbg: R_ApplyRenderer: efrags\n"));
break; break;
} }
TRACE(("dbg: R_ApplyRenderer: S_Restart_f\n"));
if (!isDedicated) if (!isDedicated)
S_Restart_f(); S_Restart_f();
TRACE(("dbg: R_ApplyRenderer: done\n"));
memcpy(&currentrendererstate, newr, sizeof(currentrendererstate)); memcpy(&currentrendererstate, newr, sizeof(currentrendererstate));
return true; return true;
} }

View file

@ -554,6 +554,10 @@ void S_Init (void)
void S_ShutdownCard(soundcardinfo_t *sc) void S_ShutdownCard(soundcardinfo_t *sc)
{ {
#ifndef NODIRECTX
extern int aimedforguid;
aimedforguid = 0;
#endif
if (!fakedma) if (!fakedma)
{ {
SNDDMA_Shutdown(sc); SNDDMA_Shutdown(sc);

View file

@ -3248,7 +3248,7 @@ static void CL_Say (qboolean team, char *extra)
} }
#ifdef Q3CLIENT #ifdef Q3CLIENT
if (cls.q2server==2) if (cls.protocol == CP_QUAKE3)
CLQ3_SendClientCommand("%s %s%s", team ? "say_team " : "say ", extra?extra:"", sendtext); CLQ3_SendClientCommand("%s %s%s", team ? "say_team " : "say ", extra?extra:"", sendtext);
else else
#endif #endif

View file

@ -490,8 +490,11 @@ void Cmd_Exec_f (void)
else else
Q_strncpyz(name, Cmd_Argv(1), sizeof(name)); Q_strncpyz(name, Cmd_Argv(1), sizeof(name));
f = (char *)COM_LoadMallocFile(name); if ((f = (char *)COM_LoadMallocFile(name)))
if (!f) ;
else if ((f = (char *)COM_LoadMallocFile(va("%s.cfg", name))))
;
else
{ {
Con_TPrintf (TL_EXECFAILED,name); Con_TPrintf (TL_EXECFAILED,name);
return; return;
@ -1461,7 +1464,7 @@ void Cmd_CompleteCheck(char *check, match_t *match) //compare cumulative strings
strcpy(match->result, check); strcpy(match->result, check);
} }
} }
char *Cmd_CompleteCommand (char *partial, qboolean fullonly, int matchnum) char *Cmd_CompleteCommand (char *partial, qboolean fullonly, qboolean caseinsens, int matchnum)
{ {
extern cvar_group_t *cvar_groups; extern cvar_group_t *cvar_groups;
cmd_function_t *cmd; cmd_function_t *cmd;
@ -1490,18 +1493,34 @@ char *Cmd_CompleteCommand (char *partial, qboolean fullonly, int matchnum)
strcpy(match.result, ""); strcpy(match.result, "");
// check for partial match // check for partial match
for (cmd=cmd_functions ; cmd ; cmd=cmd->next) if (caseinsens)
if (!Q_strncmp (partial,cmd->name, len)) {
Cmd_CompleteCheck(cmd->name, &match); for (cmd=cmd_functions ; cmd ; cmd=cmd->next)
for (a=cmd_alias ; a ; a=a->next) if (!Q_strncasecmp (partial,cmd->name, len))
if (!Q_strncmp (partial, a->name, len)) Cmd_CompleteCheck(cmd->name, &match);
Cmd_CompleteCheck(a->name, &match); for (a=cmd_alias ; a ; a=a->next)
for (grp=cvar_groups ; grp ; grp=grp->next) if (!Q_strncasecmp (partial, a->name, len))
for (cvar=grp->cvars ; cvar ; cvar=cvar->next) Cmd_CompleteCheck(a->name, &match);
if (!Q_strncmp (partial,cvar->name, len)) for (grp=cvar_groups ; grp ; grp=grp->next)
Cmd_CompleteCheck(cvar->name, &match); for (cvar=grp->cvars ; cvar ; cvar=cvar->next)
if (!Q_strncasecmp (partial,cvar->name, len))
Cmd_CompleteCheck(cvar->name, &match);
}
else
{
for (cmd=cmd_functions ; cmd ; cmd=cmd->next)
if (!Q_strncmp (partial,cmd->name, len))
Cmd_CompleteCheck(cmd->name, &match);
for (a=cmd_alias ; a ; a=a->next)
if (!Q_strncmp (partial, a->name, len))
Cmd_CompleteCheck(a->name, &match);
for (grp=cvar_groups ; grp ; grp=grp->next)
for (cvar=grp->cvars ; cvar ; cvar=cvar->next)
if (!Q_strncmp (partial,cvar->name, len))
Cmd_CompleteCheck(cvar->name, &match);
}
if (match.matchnum>0) if (match.matchnum>0)
return NULL; return NULL;
if (!*match.result) if (!*match.result)
@ -1550,7 +1569,7 @@ void Cmd_ForwardToServer (void)
return; // not really connected return; // not really connected
#ifdef Q3CLIENT #ifdef Q3CLIENT
if (cls.q2server == 2) if (cls.protocol == CP_QUAKE3)
{ {
CLQ3_SendClientCommand("%s %s", Cmd_Argv(0), Cmd_Args()); CLQ3_SendClientCommand("%s %s", Cmd_Argv(0), Cmd_Args());
return; return;

View file

@ -83,7 +83,7 @@ qboolean Cmd_AddCommand (char *cmd_name, xcommand_t function);
qboolean Cmd_Exists (char *cmd_name); qboolean Cmd_Exists (char *cmd_name);
// used by the cvar code to check for cvar / command name overlap // used by the cvar code to check for cvar / command name overlap
char *Cmd_CompleteCommand (char *partial, qboolean fullonly, int matchnum); char *Cmd_CompleteCommand (char *partial, qboolean fullonly, qboolean caseinsens, int matchnum);
qboolean Cmd_IsCommand (char *line); qboolean Cmd_IsCommand (char *line);
// attempts to match a partial command for automatic command line completion // attempts to match a partial command for automatic command line completion
// returns NULL if nothing fits // returns NULL if nothing fits

View file

@ -491,7 +491,7 @@ cvar_t *Cvar_Get(const char *name, const char *defaultvalue, int flags, const ch
{ {
//allow this to change all < cvar_latch values. //allow this to change all < cvar_latch values.
//this allows q2 dlls to apply different flags to a cvar without destroying our important ones (like cheat). //this allows q2 dlls to apply different flags to a cvar without destroying our important ones (like cheat).
var->flags = (flags & (CVAR_LATCH-1)) | (var->flags & ~(CVAR_LATCH-1)); var->flags = (var->flags & ~(CVAR_NOSET)) | (flags & (CVAR_NOSET|CVAR_SERVERINFO|CVAR_USERINFO|CVAR_ARCHIVE));
return var; return var;
} }

View file

@ -617,6 +617,8 @@ void CM_CreateBrush ( q2cbrush_t *brush, vec3_t *verts, q2mapsurface_t *surface
qboolean skip[20]; qboolean skip[20];
int numpatchplanes = 0; int numpatchplanes = 0;
int matchplane;
// calc absmins & absmaxs // calc absmins & absmaxs
ClearBounds ( absmins, absmaxs ); ClearBounds ( absmins, absmaxs );
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
@ -703,11 +705,22 @@ void CM_CreateBrush ( q2cbrush_t *brush, vec3_t *verts, q2mapsurface_t *surface
skip[i] = true; skip[i] = true;
if (numplanes == MAX_Q2MAP_PLANES) for (matchplane = 0; matchplane < numplanes; matchplane++)
Host_Error ("CM_CreateBrush: numplanes == MAX_CM_PLANES"); {
if (!memcmp(&map_planes[matchplane], &patchplanes[i], sizeof(patchplanes[i])))
{
plane = &map_planes[matchplane];
break;
}
}
if (matchplane == numplanes)
{
if (numplanes == MAX_Q2MAP_PLANES)
Host_Error ("CM_CreateBrush: numplanes == MAX_CM_PLANES");
plane = &map_planes[numplanes++]; plane = &map_planes[numplanes++];
*plane = patchplanes[i]; *plane = patchplanes[i];
}
if (numbrushsides == MAX_CM_BRUSHSIDES) if (numbrushsides == MAX_CM_BRUSHSIDES)
Host_Error ("CM_CreateBrush: numbrushsides == MAX_CM_BRUSHSIDES"); Host_Error ("CM_CreateBrush: numbrushsides == MAX_CM_BRUSHSIDES");
@ -715,10 +728,10 @@ void CM_CreateBrush ( q2cbrush_t *brush, vec3_t *verts, q2mapsurface_t *surface
side = &map_brushsides[numbrushsides++]; side = &map_brushsides[numbrushsides++];
side->plane = plane; side->plane = plane;
// if (DotProduct(plane->normal, mainplane.normal) >= 0) if (DotProduct(plane->normal, mainplane.normal) >= 0)
side->surface = surface; side->surface = surface;
// else else
// side->surface = NULL; // don't clip against this side side->surface = NULL; // don't clip against this side
brush->numsides++; brush->numsides++;
} }

View file

@ -91,7 +91,6 @@ typedef struct
#ifdef NQPROT #ifdef NQPROT
qboolean isnqprotocol; qboolean isnqprotocol;
struct qsocket_s *qsocket;
#endif #endif
float last_received; // for timeouts float last_received; // for timeouts
@ -140,9 +139,9 @@ typedef struct
qboolean compress; qboolean compress;
//nq servers must recieve truncated packets. //nq servers must recieve truncated packets.
int in_reliable_length; int in_fragment_length;
char in_reliable_buf[MAX_OVERALLMSGLEN]; char in_fragment_buf[MAX_OVERALLMSGLEN];
int in_reliable_start; int in_fragment_start;
} netchan_t; } netchan_t;
extern int net_drop; // packets dropped before this one extern int net_drop; // packets dropped before this one

View file

@ -180,9 +180,7 @@ called to open a channel to a remote system
void Netchan_Setup (netsrc_t sock, netchan_t *chan, netadr_t adr, int qport) void Netchan_Setup (netsrc_t sock, netchan_t *chan, netadr_t adr, int qport)
{ {
memset (chan, 0, sizeof(*chan)); memset (chan, 0, sizeof(*chan));
#ifdef NQPROT
chan->qsocket = NULL;
#endif
chan->sock = sock; chan->sock = sock;
chan->remote_address = adr; chan->remote_address = adr;
chan->last_received = realtime; chan->last_received = realtime;
@ -302,20 +300,20 @@ qboolean NQNetChan_Process(netchan_t *chan)
{ {
chan->incoming_reliable_sequence++; chan->incoming_reliable_sequence++;
if (chan->in_reliable_length + net_message.cursize-8 >= sizeof(chan->in_reliable_buf)) if (chan->in_fragment_length + net_message.cursize-8 >= sizeof(chan->in_fragment_buf))
{ {
chan->fatal_error = true; chan->fatal_error = true;
return false; return false;
} }
memcpy(chan->in_reliable_buf + chan->in_reliable_length, net_message.data+8, net_message.cursize-8); memcpy(chan->in_fragment_buf + chan->in_fragment_length, net_message.data+8, net_message.cursize-8);
chan->in_reliable_length += net_message.cursize-8; chan->in_fragment_length += net_message.cursize-8;
if (header & NETFLAG_EOM) if (header & NETFLAG_EOM)
{ {
SZ_Clear(&net_message); SZ_Clear(&net_message);
SZ_Write(&net_message, chan->in_reliable_buf, chan->in_reliable_length); SZ_Write(&net_message, chan->in_fragment_buf, chan->in_fragment_length);
chan->in_reliable_length = 0; chan->in_fragment_length = 0;
MSG_BeginReading(); MSG_BeginReading();
return 2; //we can read it now return 2; //we can read it now
} }

View file

@ -119,7 +119,7 @@ void (*pfreeaddrinfo) (struct addrinfo*);
#endif #endif
extern cvar_t sv_public; extern cvar_t sv_public, sv_listen;
@ -1196,7 +1196,7 @@ void NET_InitServer(void)
int p; int p;
port = PORT_SERVER; port = PORT_SERVER;
if (sv_public.value) if (sv_listen.value)
{ {
p = COM_CheckParm ("-svport"); p = COM_CheckParm ("-svport");
if (p && p < com_argc) if (p && p < com_argc)

View file

@ -606,6 +606,7 @@ enum {
#define DPTE_BLOOD 50 #define DPTE_BLOOD 50
#define DPTE_SPARK 51 #define DPTE_SPARK 51
#define DPTE_BLOODSHOWER 52 #define DPTE_BLOODSHOWER 52
#define DPTE_EXPLOSIONRGB 53
#define DPTE_PARTICLECUBE 54 #define DPTE_PARTICLECUBE 54
#define DPTE_SMALLFLASH 72 #define DPTE_SMALLFLASH 72
#define DPTE_CUSTOMFLASH 73 #define DPTE_CUSTOMFLASH 73

View file

@ -631,6 +631,17 @@ void Q1BSP_ClipDecalToNodes (fragmentdecal_t *dec, mnode_t *node)
surf = cl.worldmodel->surfaces + node->firstsurface; surf = cl.worldmodel->surfaces + node->firstsurface;
for (i=0 ; i<node->numsurfaces ; i++, surf++) for (i=0 ; i<node->numsurfaces ; i++, surf++)
{ {
if (surf->flags & SURF_PLANEBACK)
{
if (DotProduct(surf->plane->normal, dec->normal) < -0.1)
continue;
}
else
{
if (-DotProduct(surf->plane->normal, dec->normal) < -0.1)
continue;
}
Q1BSP_FragmentToMesh(dec, surf->mesh); Q1BSP_FragmentToMesh(dec, surf->mesh);
} }
@ -638,7 +649,7 @@ void Q1BSP_ClipDecalToNodes (fragmentdecal_t *dec, mnode_t *node)
Q1BSP_ClipDecalToNodes (dec, node->children[1]); Q1BSP_ClipDecalToNodes (dec, node->children[1]);
} }
int Q1BSP_ClipDecal(vec3_t center, vec3_t normal, vec3_t tangent, float size, float **out) int Q1BSP_ClipDecal(vec3_t center, vec3_t normal, vec3_t tangent, vec3_t tangent2, float size, float **out)
{ //quad marks a full, independant quad { //quad marks a full, independant quad
int p; int p;
fragmentdecal_t dec; fragmentdecal_t dec;
@ -646,7 +657,7 @@ int Q1BSP_ClipDecal(vec3_t center, vec3_t normal, vec3_t tangent, float size, fl
VectorCopy(center, dec.center); VectorCopy(center, dec.center);
VectorCopy(normal, dec.normal); VectorCopy(normal, dec.normal);
VectorCopy(tangent, dec.tangent1); VectorCopy(tangent, dec.tangent1);
CrossProduct(tangent, normal, dec.tangent2); VectorCopy(tangent2, dec.tangent2);
dec.radius = size/2; dec.radius = size/2;
dec.numtris = 0; dec.numtris = 0;

View file

@ -360,7 +360,7 @@ LINK32=link.exe
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /G5 /ML /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" /D "AVAIL_OGGVORBIS" /D "Q3CLIENT" /FR".\GLDebug/" /Fp".\GLDebug/qwcl.pch" /YX /Fo".\GLDebug/" /Fd".\GLDebug/" /FD /c # ADD BASE CPP /nologo /G5 /ML /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" /D "AVAIL_OGGVORBIS" /D "Q3CLIENT" /FR".\GLDebug/" /Fp".\GLDebug/qwcl.pch" /YX /Fo".\GLDebug/" /Fd".\GLDebug/" /FD /c
# SUBTRACT BASE CPP /X # SUBTRACT BASE CPP /X
# 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" /D "AVAIL_OGGVORBIS" /D "Q3CLIENT" /D "Q3SERVER" /FR /Fp".\GLDebugQ3/qwcl.pch" /Yu"quakedef.h" /Fo".\GLDebugQ3/" /Fd".\GLDebugQ3/" /FD /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" /D "Q3CLIENT" /D "Q3SERVER" /FR /Fp".\GLDebugQ3/qwcl.pch" /Yu"quakedef.h" /Fo".\GLDebugQ3/" /Fd".\GLDebugQ3/" /FD /c
# 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
# ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD BASE RSC /l 0x809 /d "_DEBUG"
@ -4920,230 +4920,6 @@ SOURCE=..\sw\vid_win2.c
!ENDIF !ENDIF
# End Source File
# End Group
# Begin Group "nq"
# PROP Default_Filter ""
# Begin Source File
SOURCE=..\nqnet\net_dgrm.c
!IF "$(CFG)" == "ftequake - Win32 Release"
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebug"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLRelease"
!ELSEIF "$(CFG)" == "ftequake - Win32 MDebug"
# PROP Exclude_From_Build 1
!ELSEIF "$(CFG)" == "ftequake - Win32 MRelease"
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLDebug"
# PROP Exclude_From_Build 1
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLRelease"
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated Server"
!ELSEIF "$(CFG)" == "ftequake - Win32 Release Dedicated Server"
!ELSEIF "$(CFG)" == "ftequake - Win32 MinSW"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebugQ3"
# SUBTRACT CPP /YX /Yc /Yu
!ENDIF
# End Source File
# Begin Source File
SOURCE=..\nqnet\net_loop.c
!IF "$(CFG)" == "ftequake - Win32 Release"
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebug"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLRelease"
!ELSEIF "$(CFG)" == "ftequake - Win32 MDebug"
# PROP Exclude_From_Build 1
!ELSEIF "$(CFG)" == "ftequake - Win32 MRelease"
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLDebug"
# PROP Exclude_From_Build 1
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLRelease"
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated Server"
!ELSEIF "$(CFG)" == "ftequake - Win32 Release Dedicated Server"
!ELSEIF "$(CFG)" == "ftequake - Win32 MinSW"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebugQ3"
# SUBTRACT CPP /YX /Yc /Yu
!ENDIF
# End Source File
# Begin Source File
SOURCE=..\nqnet\net_main.c
!IF "$(CFG)" == "ftequake - Win32 Release"
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebug"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLRelease"
!ELSEIF "$(CFG)" == "ftequake - Win32 MDebug"
# PROP Exclude_From_Build 1
!ELSEIF "$(CFG)" == "ftequake - Win32 MRelease"
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLDebug"
# PROP Exclude_From_Build 1
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLRelease"
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated Server"
!ELSEIF "$(CFG)" == "ftequake - Win32 Release Dedicated Server"
!ELSEIF "$(CFG)" == "ftequake - Win32 MinSW"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebugQ3"
# SUBTRACT CPP /YX /Yc /Yu
!ENDIF
# End Source File
# Begin Source File
SOURCE=..\nqnet\net_win.c
!IF "$(CFG)" == "ftequake - Win32 Release"
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebug"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLRelease"
!ELSEIF "$(CFG)" == "ftequake - Win32 MDebug"
# PROP Exclude_From_Build 1
!ELSEIF "$(CFG)" == "ftequake - Win32 MRelease"
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLDebug"
# PROP Exclude_From_Build 1
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLRelease"
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated Server"
!ELSEIF "$(CFG)" == "ftequake - Win32 Release Dedicated Server"
!ELSEIF "$(CFG)" == "ftequake - Win32 MinSW"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebugQ3"
# SUBTRACT CPP /YX /Yc /Yu
!ENDIF
# End Source File
# Begin Source File
SOURCE=..\nqnet\net_wipx.c
!IF "$(CFG)" == "ftequake - Win32 Release"
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebug"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLRelease"
!ELSEIF "$(CFG)" == "ftequake - Win32 MDebug"
# PROP Exclude_From_Build 1
!ELSEIF "$(CFG)" == "ftequake - Win32 MRelease"
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLDebug"
# PROP Exclude_From_Build 1
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLRelease"
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated Server"
!ELSEIF "$(CFG)" == "ftequake - Win32 Release Dedicated Server"
!ELSEIF "$(CFG)" == "ftequake - Win32 MinSW"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebugQ3"
# SUBTRACT CPP /YX /Yc /Yu
!ENDIF
# End Source File
# Begin Source File
SOURCE=..\nqnet\nqnet.h
!IF "$(CFG)" == "ftequake - Win32 Release"
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebug"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLRelease"
!ELSEIF "$(CFG)" == "ftequake - Win32 MDebug"
# PROP Exclude_From_Build 1
!ELSEIF "$(CFG)" == "ftequake - Win32 MRelease"
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLDebug"
# PROP Exclude_From_Build 1
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLRelease"
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated Server"
!ELSEIF "$(CFG)" == "ftequake - Win32 Release Dedicated Server"
!ELSEIF "$(CFG)" == "ftequake - Win32 MinSW"
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebugQ3"
!ENDIF
# End Source File # End Source File
# End Group # End Group
# Begin Group "common" # Begin Group "common"

View file

@ -182,13 +182,7 @@ static void R_LerpFrames(mesh_t *mesh, galiaspose_t *p1, galiaspose_t *p2, float
mesh->xyz_array = p1v; mesh->xyz_array = p1v;
if (r_nolightdir.value) if (r_nolightdir.value)
{ {
for (i = 0; i < mesh->numvertexes; i++) mesh->colors_array = NULL;
{
mesh->colors_array[i][0] = /*ambientlight[0]/2*/+shadelight[0];
mesh->colors_array[i][1] = /*ambientlight[1]/2*/+shadelight[1];
mesh->colors_array[i][2] = /*ambientlight[2]/2*/+shadelight[2];
mesh->colors_array[i][3] = alpha;
}
} }
else else
{ {
@ -1469,11 +1463,14 @@ void R_DrawGAliasModel (entity_t *e)
fog = CM_FogForOrigin(currententity->origin); fog = CM_FogForOrigin(currententity->origin);
#endif #endif
qglColor4f(shadelight[0], shadelight[1], shadelight[2], e->alpha);
memset(&mesh, 0, sizeof(mesh)); memset(&mesh, 0, sizeof(mesh));
for(; inf; ((inf->nextsurf)?(inf = (galiasinfo_t*)((char *)inf + inf->nextsurf)):(inf=NULL))) for(; inf; ((inf->nextsurf)?(inf = (galiasinfo_t*)((char *)inf + inf->nextsurf)):(inf=NULL)))
{ {
if (R_GAliasBuildMesh(&mesh, inf, e->frame, e->oldframe, e->lerpfrac, e->alpha) && r_vertexdlights.value) if (R_GAliasBuildMesh(&mesh, inf, e->frame, e->oldframe, e->lerpfrac, e->alpha) && r_vertexdlights.value)
R_GAliasAddDlights(&mesh, e->origin, e->angles); if (mesh.colors_array)
R_GAliasAddDlights(&mesh, e->origin, e->angles);
c_alias_polys += mesh.numindexes/3; c_alias_polys += mesh.numindexes/3;
@ -2238,12 +2235,12 @@ static void *Q1_LoadSkins (daliasskintype_t *pskintype, qboolean alpha)
outskin->texnums=1; outskin->texnums=1;
outskin->ofstexnums = (char *)texnums - (char *)outskin; outskin->ofstexnums = (char *)texnums - (char *)outskin;
/*
#ifdef Q3SHADERS #ifdef Q3SHADERS
sprintf(skinname, "%s_%i", loadname, i); sprintf(skinname, "%s_%i", loadname, i);
texnums->shader = R_RegisterSkin(skinname); texnums->shader = R_RegisterSkin(skinname);
#endif #endif
*/
texnums->base = texture; texnums->base = texture;
texnums->fullbright = fbtexture; texnums->fullbright = fbtexture;
@ -2317,11 +2314,12 @@ static void *Q1_LoadSkins (daliasskintype_t *pskintype, qboolean alpha)
if (t != 0) //only keep the first. if (t != 0) //only keep the first.
BZ_Free(saved); BZ_Free(saved);
} }
/*
sprintf(skinname, "%s_%i_%i", loadname, i, t);
#ifdef Q3SHADERS #ifdef Q3SHADERS
sprintf(skinname, "%s_%i_%i", loadname, i, t);
texnums->shader = R_RegisterSkin(skinname); texnums->shader = R_RegisterSkin(skinname);
#endif #endif
*/
texnums->base = texture; texnums->base = texture;
texnums->fullbright = fbtexture; texnums->fullbright = fbtexture;
} }

View file

@ -736,15 +736,14 @@ void R_FlushArraysMtex (void)
return; return;
} }
GL_MBind( mtexid0, r_texNums[0] );
qglEnableClientState( GL_TEXTURE_COORD_ARRAY );
if ( numColors > 1 ) { if ( numColors > 1 ) {
qglEnableClientState( GL_COLOR_ARRAY ); qglEnableClientState( GL_COLOR_ARRAY );
} else if ( numColors == 1 ) { } else if ( numColors == 1 ) {
qglColor4ubv ( colorArray[0] ); qglColor4ubv ( colorArray[0] );
} }
GL_MBind( mtexid0, r_texNums[0] );
qglEnableClientState( GL_TEXTURE_COORD_ARRAY );
for ( i = 1; i < r_numUnits; i++ ) for ( i = 1; i < r_numUnits; i++ )
{ {
GL_MBind( mtexid0 + i, r_texNums[i] ); GL_MBind( mtexid0 + i, r_texNums[i] );
@ -1764,15 +1763,15 @@ void R_RenderMeshCombined ( meshbuffer_t *mb, shaderpass_t *pass )
R_ModifyColor ( mb, pass ); R_ModifyColor ( mb, pass );
GL_SelectTexture( mtexid0 ); GL_SelectTexture( mtexid0 );
R_ModifyTextureCoords ( pass, 0 );
if ( pass->blendmode == GL_REPLACE ) if ( pass->blendmode == GL_REPLACE )
GL_TexEnv( GL_REPLACE ); GL_TexEnv( GL_REPLACE );
else else
GL_TexEnv( GL_MODULATE ); GL_TexEnv( GL_MODULATE );
R_ModifyTextureCoords ( pass, 0 );
for ( i = 1, pass++; i < r_numUnits; i++, pass++ ) for ( i = 1, pass++; i < r_numUnits; i++, pass++ )
{ {
GL_SelectTexture( mtexid1 + i ); GL_SelectTexture( mtexid0 + i );
if ( pass->blendmode ) if ( pass->blendmode )
{ {

View file

@ -203,9 +203,6 @@ typedef struct glpoly_s
{ {
struct glpoly_s *next; struct glpoly_s *next;
int numverts; int numverts;
#ifdef SHADERS
float texcenter[2]; //center of texture made by adveraging the tex coords
#endif
float verts[4][VERTEXSIZE]; // variable sized (xyz s1t1 s2t2 (ldir_xyz) float verts[4][VERTEXSIZE]; // variable sized (xyz s1t1 s2t2 (ldir_xyz)
} glpoly_t; } glpoly_t;
@ -221,12 +218,14 @@ typedef struct mfog_s
} mfog_t; } mfog_t;
#endif #endif
#if MAX_SWDECALS
typedef struct decal_s { typedef struct decal_s {
int xpos, ypos; int xpos, ypos;
struct msurface_s *owner; struct msurface_s *owner;
struct decal_s *next; struct decal_s *next;
struct decal_s *prev; struct decal_s *prev;
} decal_t; } decal_t;
#endif
typedef struct msurface_s typedef struct msurface_s
@ -256,9 +255,9 @@ typedef struct msurface_s
mesh_t *mesh; mesh_t *mesh;
entity_t *ownerent; entity_t *ownerent;
struct msurface_s *texturechain; struct msurface_s *texturechain;
#if 0
vec3_t normal; vec3_t normal;
#endif
mtexinfo_t *texinfo; mtexinfo_t *texinfo;
// lighting info // lighting info
@ -276,8 +275,9 @@ typedef struct msurface_s
qboolean stained; qboolean stained;
#endif #endif
qbyte *samples; // [numstyles*surfsize] qbyte *samples; // [numstyles*surfsize]
#ifdef MAX_SWDECALS
decal_t *decal; decal_t *decal;
#endif
} msurface_t; } msurface_t;
typedef struct mnode_s typedef struct mnode_s

View file

@ -355,34 +355,6 @@ void GLR_PushDlights (void)
continue; continue;
cl.worldmodel->funcs.MarkLights( l, 1<<i, cl.worldmodel->nodes ); cl.worldmodel->funcs.MarkLights( l, 1<<i, cl.worldmodel->nodes );
} }
/*
if (cl.worldmodel->fromgame == fg_quake3)
{
for (i=0 ; i<MAX_SWLIGHTS ; i++, l++)
{
if (l->die < cl.time || !l->radius)
continue;
GLR_MarkQ3Lights ( l, 1<<i, cl.worldmodel->nodes );
}
return;
}
if (cl.worldmodel->fromgame == fg_quake2)
{
for (i=0 ; i<MAX_SWLIGHTS ; i++, l++)
{
if (l->die < cl.time || !l->radius)
continue;
GLR_MarkQ2Lights ( l, 1<<i, cl.worldmodel->nodes );
}
return;
}
for (i=0 ; i<MAX_DLIGHTS ; i++, l++)
{
if (l->die < cl.time || !l->radius)
continue;
GLR_MarkLights ( l, 1<<i, cl.worldmodel->nodes );
}*/
} }

View file

@ -125,6 +125,7 @@ cvar_t gl_contrast = {"gl_contrast", "1"};
cvar_t gl_dither = {"gl_dither", "1"}; cvar_t gl_dither = {"gl_dither", "1"};
cvar_t gl_maxdist = {"gl_maxdist", "8192"}; cvar_t gl_maxdist = {"gl_maxdist", "8192"};
extern cvar_t gl_motionblur; extern cvar_t gl_motionblur;
extern cvar_t gl_motionblurscale;
extern cvar_t gl_ati_truform; extern cvar_t gl_ati_truform;
extern cvar_t gl_ati_truform_type; extern cvar_t gl_ati_truform_type;
@ -1776,14 +1777,20 @@ void R_Mirror (void)
//enable stencil writing //enable stencil writing
qglClearStencil(0); qglClearStencil(0);
qglClear(GL_STENCIL_BUFFER_BIT);
qglDisable(GL_ALPHA_TEST);
qglEnable(GL_STENCIL_TEST); qglEnable(GL_STENCIL_TEST);
qglStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); //replace where it passes qglStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); //replace where it passes
qglStencilFunc( GL_ALWAYS, 1, ~0 ); //always pass (where z passes set to 1) qglStencilFunc( GL_ALWAYS, 1, ~0 ); //always pass (where z passes set to 1)
qglColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE ); qglColorMask( GL_FALSE, GL_TRUE, GL_FALSE, GL_FALSE );
qglDepthMask( GL_FALSE ); qglDepthMask( GL_FALSE );
qglEnableClientState( GL_VERTEX_ARRAY );
for (prevs = s; s; s=s->texturechain) //write the polys to the stencil buffer. for (prevs = s; s; s=s->texturechain) //write the polys to the stencil buffer.
R_RenderBrushPoly (s); {
qglVertexPointer(3, GL_FLOAT, 0, s->mesh->xyz_array);
qglDrawElements(GL_TRIANGLES, s->mesh->numindexes, GL_UNSIGNED_INT, s->mesh->indexes);
}
qglColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); qglColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE );
qglDepthMask( GL_TRUE ); qglDepthMask( GL_TRUE );
@ -1820,7 +1827,7 @@ void R_Mirror (void)
r_refdef.vieworg[1] = 575; r_refdef.vieworg[1] = 575;
r_refdef.vieworg[2] = 64; r_refdef.vieworg[2] = 64;
*/ */
// AngleVectors (r_refdef.viewangles, vpn, vright, vup); AngleVectors (r_refdef.viewangles, vpn, vright, vup);
gldepthmin = 0.5; gldepthmin = 0.5;
@ -1873,6 +1880,7 @@ void R_Mirror (void)
qglCullFace(GL_BACK); qglCullFace(GL_BACK);
// cl_numvisedicts = oldvisents; // cl_numvisedicts = oldvisents;
} }
qglDisable(GL_STENCIL_TEST);
memcpy(r_refdef.viewangles, oldangles, sizeof(vec3_t)); memcpy(r_refdef.viewangles, oldangles, sizeof(vec3_t));
memcpy(r_refdef.vieworg, oldorg, sizeof(vec3_t)); memcpy(r_refdef.vieworg, oldorg, sizeof(vec3_t));
@ -2154,14 +2162,19 @@ void GLR_RenderView (void)
if (gl_motionblur.value>=0 && gl_motionblur.value < 1) if (gl_motionblur.value>=0 && gl_motionblur.value < 1)
{ {
int vwidth = 1, vheight = 1; int vwidth = 1, vheight = 1;
float vs, vt; float vs, vt, cs, ct;
while (vwidth < glwidth)
{ if (gl_config.arb_texture_non_power_of_two)
vwidth *= 2; { //we can use any size, supposedly
vwidth = glwidth;
vheight = glheight;
} }
while (vheight < glheight) else
{ { //limit the texture size to square and use padding.
vheight *= 2; while (vwidth < glwidth)
vwidth *= 2;
while (vheight < glheight)
vheight *= 2;
} }
qglViewport (glx, gly, glwidth, glheight); qglViewport (glx, gly, glwidth, glheight);
@ -2179,22 +2192,24 @@ void GLR_RenderView (void)
//blend the last frame onto the scene //blend the last frame onto the scene
//the maths is because our texture is over-sized (must be power of two) //the maths is because our texture is over-sized (must be power of two)
vs = (float)glwidth / vwidth; cs = vs = (float)glwidth / vwidth * 0.5;
vt = (float)glheight / vheight; ct = vt = (float)glheight / vheight * 0.5;
vs *= gl_motionblurscale.value;
vt *= gl_motionblurscale.value;
qglDisable (GL_DEPTH_TEST); qglDisable (GL_DEPTH_TEST);
qglDisable (GL_CULL_FACE); qglDisable (GL_CULL_FACE);
qglDisable (GL_BLEND);
qglDisable (GL_ALPHA_TEST); qglDisable (GL_ALPHA_TEST);
qglEnable(GL_BLEND); qglEnable(GL_BLEND);
qglColor4f(1, 1, 1, gl_motionblur.value); qglColor4f(1, 1, 1, gl_motionblur.value);
qglBegin(GL_QUADS); qglBegin(GL_QUADS);
qglTexCoord2f(0, 0); qglTexCoord2f(cs-vs, ct-vt);
qglVertex2f(0, 0); qglVertex2f(0, 0);
qglTexCoord2f(vs, 0); qglTexCoord2f(cs+vs, ct-vt);
qglVertex2f(glwidth, 0); qglVertex2f(glwidth, 0);
qglTexCoord2f(vs, vt); qglTexCoord2f(cs+vs, ct+vt);
qglVertex2f(glwidth, glheight); qglVertex2f(glwidth, glheight);
qglTexCoord2f(0, vt); qglTexCoord2f(cs-vs, ct+vt);
qglVertex2f(0, glheight); qglVertex2f(0, glheight);
qglEnd(); qglEnd();

View file

@ -2878,7 +2878,6 @@ start:
// deal with model fragments in this leaf // deal with model fragments in this leaf
if (pleaf->efrags) if (pleaf->efrags)
R_StoreEfrags (&pleaf->efrags); R_StoreEfrags (&pleaf->efrags);
return; return;
} }
@ -2918,10 +2917,10 @@ start:
{ {
surf = cl.worldmodel->surfaces + node->firstsurface; surf = cl.worldmodel->surfaces + node->firstsurface;
if (dot < 0 -BACKFACE_EPSILON) // if (dot < 0 -BACKFACE_EPSILON)
side = SURF_PLANEBACK; // side = SURF_PLANEBACK;
else if (dot > BACKFACE_EPSILON) // else if (dot > BACKFACE_EPSILON)
side = 0; // side = 0;
{ {
for ( ; c ; c--, surf++) for ( ; c ; c--, surf++)
{ {
@ -3855,15 +3854,6 @@ void GL_BuildLightmaps (void)
currentmodel = m; currentmodel = m;
for (i=0 ; i<m->numsurfaces ; i++) for (i=0 ; i<m->numsurfaces ; i++)
{ {
fa = &m->surfaces[i];
VectorCopy(fa->plane->normal, fa->normal);
if (fa->flags & SURF_PLANEBACK)
{
fa->normal[0]*=-1;
fa->normal[1]*=-1;
fa->normal[2]*=-1;
}
GL_CreateSurfaceLightmap (m->surfaces + i); GL_CreateSurfaceLightmap (m->surfaces + i);
P_EmitSkyEffectTris(m, &m->surfaces[i]); P_EmitSkyEffectTris(m, &m->surfaces[i]);
if (m->surfaces[i].mesh) //there are some surfaces that have a display list already (the subdivided ones) if (m->surfaces[i].mesh) //there are some surfaces that have a display list already (the subdivided ones)

View file

@ -742,12 +742,15 @@ qboolean VID_AttachGL (rendererstate_t *info)
break; break;
} }
if (!stricmp(info->glrenderer, "opengl32.dll") || !stricmp(info->glrenderer, "opengl32")) //go for windows system dir if we failed with the default. Should help to avoid the 3dfx problem. if (!*info->glrenderer || !stricmp(info->glrenderer, "opengl32.dll") || !stricmp(info->glrenderer, "opengl32")) //go for windows system dir if we failed with the default. Should help to avoid the 3dfx problem.
{ {
char systemgl[MAX_OSPATH+1]; char systemgl[MAX_OSPATH+1];
GetSystemDirectory(systemgl, sizeof(systemgl)-1); GetSystemDirectory(systemgl, sizeof(systemgl)-1);
strncat(systemgl, "\\", sizeof(systemgl)-1); strncat(systemgl, "\\", sizeof(systemgl)-1);
strncat(systemgl, info->glrenderer, sizeof(systemgl)-1); if (*info->glrenderer)
strncat(systemgl, info->glrenderer, sizeof(systemgl)-1);
else
strncat(systemgl, "opengl32.dll", sizeof(systemgl)-1);
TRACE(("dbg: VID_AttachGL: GLInitialise (system dir specific)\n")); TRACE(("dbg: VID_AttachGL: GLInitialise (system dir specific)\n"));
if (GLInitialise(systemgl)) if (GLInitialise(systemgl))
{ {

View file

@ -279,7 +279,10 @@ R_LoadSkys
static char *skyname_suffix[][6] = { static char *skyname_suffix[][6] = {
{"px", "py", "nx", "ny", "pz", "nz"}, {"px", "py", "nx", "ny", "pz", "nz"},
{"posx", "posy", "negx", "negy", "posz", "negz"}, {"posx", "posy", "negx", "negy", "posz", "negz"},
{"rt", "bk", "lf", "ft", "up", "dn"} {"rt", "bk", "lf", "ft", "up", "dn"},
{"_px", "_py", "_nx", "_ny", "_pz", "_nz"},
{"_posx", "_posy", "_negx", "_negy", "_posz", "_negz"},
{"_rt", "_bk", "_lf", "_ft", "_up", "_dn"}
}; };
static char *skyname_pattern[] = { static char *skyname_pattern[] = {
@ -318,7 +321,11 @@ void R_LoadSkys (void)
{ {
_snprintf (name, sizeof(name), skyname_pattern[p], boxname, skyname_suffix[s][i]); _snprintf (name, sizeof(name), skyname_pattern[p], boxname, skyname_suffix[s][i]);
skyboxtex[i] = Mod_LoadHiResTexture(name, NULL, false, false, true); skyboxtex[i] = Mod_LoadHiResTexture(name, NULL, false, false, true);
if (skyboxtex[i])
break;
} }
if (skyboxtex[i])
break;
} }
if (!skyboxtex[i]) if (!skyboxtex[i])
break; break;
@ -326,7 +333,7 @@ void R_LoadSkys (void)
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
} }
if (boxname != defaultskybox && i < 6) if (boxname != defaultskybox && i < 6 && *defaultskybox)
{ {
boxname = defaultskybox; boxname = defaultskybox;
continue; continue;
@ -593,10 +600,10 @@ void R_DrawSkyBoxChain (msurface_t *s)
R_DrawSkyBox (s); R_DrawSkyBox (s);
} }
#define skygridx 32 #define skygridx 16
#define skygridx1 (skygridx + 1) #define skygridx1 (skygridx + 1)
#define skygridxrecip (1.0f / (skygridx)) #define skygridxrecip (1.0f / (skygridx))
#define skygridy 32 #define skygridy 16
#define skygridy1 (skygridy + 1) #define skygridy1 (skygridy + 1)
#define skygridyrecip (1.0f / (skygridy)) #define skygridyrecip (1.0f / (skygridy))
#define skysphere_numverts (skygridx1 * skygridy1) #define skysphere_numverts (skygridx1 * skygridy1)

View file

@ -1,9 +1,7 @@
#ifdef RGLQUAKE
#include "quakedef.h" #include "quakedef.h"
#include "glquake.h"
#ifdef DOOMWADS #ifdef DOOMWADS
#ifdef RGLQUAKE
#include "glquake.h"
#include "doommap.h" #include "doommap.h"

View file

@ -551,4 +551,13 @@ typedef void (APIENTRY * PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count);
typedef void (APIENTRY * PFNGLUNLOCKARRAYSEXTPROC) (void); typedef void (APIENTRY * PFNGLUNLOCKARRAYSEXTPROC) (void);
#endif #endif
#ifndef GL_EXT_texture_filter_anisotropic
#define GL_EXT_texture_filter_anisotropic 1
#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
#endif
#endif #endif

View file

@ -331,7 +331,7 @@ static qboolean HTTP_CL_Run(http_con_t *con)
{ //server closed off the connection. { //server closed off the connection.
if (con->chunksize) if (con->chunksize)
Con_Printf("Download was part way through chunking - must be corrupt - %s\n", con->filename); Con_Printf("Download was part way through chunking - must be corrupt - %s\n", con->filename);
else if (con->bufferused != con->contentlength) else if (con->bufferused != con->contentlength && !con->file)
Con_Printf("Recieved file isn't the correct length - must be corrupt - %s\n", con->filename); Con_Printf("Recieved file isn't the correct length - must be corrupt - %s\n", con->filename);
Con_Printf("Retrieved %s\n", con->filename); Con_Printf("Retrieved %s\n", con->filename);
if (con->file) if (con->file)

View file

@ -92,6 +92,7 @@ pbool opt_stripfunctions; //if a functions is only ever called directly or by e
pbool opt_locals_marshalling; //make the local vars of all functions occupy the same globals. pbool opt_locals_marshalling; //make the local vars of all functions occupy the same globals.
pbool opt_logicops; //don't make conditions enter functions if the return value will be discarded due to a previous value. (C style if statements) pbool opt_logicops; //don't make conditions enter functions if the return value will be discarded due to a previous value. (C style if statements)
pbool opt_vectorcalls; //vectors can be packed into 3 floats, which can yield lower numpr_globals, but cost two more statements per call (only works for q1 calling conventions). pbool opt_vectorcalls; //vectors can be packed into 3 floats, which can yield lower numpr_globals, but cost two more statements per call (only works for q1 calling conventions).
pbool opt_simplifiedifs; //if (f != 0) -> if (f). if (f == 0) -> ifnot (f)
//bool opt_comexprremoval; //bool opt_comexprremoval;
//these are the results of the opt_. The values are printed out when compilation is compleate, showing effectivness. //these are the results of the opt_. The values are printed out when compilation is compleate, showing effectivness.
@ -4860,13 +4861,17 @@ void QCC_PR_ParseStatement (void)
if (QCC_PR_CheckKeyword(keyword_if, "if")) if (QCC_PR_CheckKeyword(keyword_if, "if"))
{ {
if (QCC_PR_CheckKeyword(keyword_not, "not")) pbool negate = QCC_PR_CheckKeyword(keyword_not, "not");
{
QCC_PR_Expect ("(");
conditional = 1;
e = QCC_PR_Expression (TOP_PRIORITY);
conditional = 0;
QCC_PR_Expect ("(");
conditional = 1;
e = QCC_PR_Expression (TOP_PRIORITY);
conditional = 0;
// negate = negate != 0;
if (negate)
{
if (e->type == type_string && flag_ifstring) //special case, as strings are now pointers, not offsets from string table if (e->type == type_string && flag_ifstring) //special case, as strings are now pointers, not offsets from string table
{ {
QCC_PR_ParseWarning(WARN_IFSTRING_USED, "if not(string) can result in bizzare behaviour"); QCC_PR_ParseWarning(WARN_IFSTRING_USED, "if not(string) can result in bizzare behaviour");
@ -4877,11 +4882,6 @@ void QCC_PR_ParseStatement (void)
} }
else else
{ {
QCC_PR_Expect ("(");
conditional = 1;
e = QCC_PR_Expression (TOP_PRIORITY);
conditional = 0;
if (e->type == type_string && flag_ifstring) //special case, as strings are now pointers, not offsets from string table if (e->type == type_string && flag_ifstring) //special case, as strings are now pointers, not offsets from string table
{ {
QCC_PR_ParseWarning(WARN_IFSTRING_USED, "if (string) can result in bizzare behaviour"); QCC_PR_ParseWarning(WARN_IFSTRING_USED, "if (string) can result in bizzare behaviour");

View file

@ -2068,7 +2068,7 @@ int QCC_PR_CheakCompConst(void)
time_t long_time; time_t long_time;
time( &long_time ); time( &long_time );
strftime( retbuf, sizeof(retbuf), strftime( retbuf, sizeof(retbuf),
"\"%R\"", localtime( &long_time )); "\"%H:%M\"", localtime( &long_time ));
pr_file_p = retbuf; pr_file_p = retbuf;
QCC_PR_Lex(); //translate the macro's value QCC_PR_Lex(); //translate the macro's value

View file

@ -104,7 +104,8 @@ cvar_t allow_download_textures = {"allow_download_textures", "1"};
cvar_t allow_download_pk3s = {"allow_download_pk3s", "1"}; cvar_t allow_download_pk3s = {"allow_download_pk3s", "1"};
cvar_t allow_download_wads = {"allow_download_wads", "1"}; cvar_t allow_download_wads = {"allow_download_wads", "1"};
cvar_t sv_public = {"sv_public", "1"}; cvar_t sv_public = {"sv_public", "0"};
cvar_t sv_listen = {"sv_listen", "1"};
cvar_t sv_highchars = {"sv_highchars", "1"}; cvar_t sv_highchars = {"sv_highchars", "1"};
cvar_t sv_loadentfiles = {"sv_loadentfiles", "1"}; cvar_t sv_loadentfiles = {"sv_loadentfiles", "1"};
cvar_t sv_maxrate = {"sv_maxrate", "10000"}; cvar_t sv_maxrate = {"sv_maxrate", "10000"};
@ -996,7 +997,7 @@ void SVC_GetChallenge (void)
Netchan_OutOfBand(NS_SERVER, net_from, over-buf, buf); Netchan_OutOfBand(NS_SERVER, net_from, over-buf, buf);
// buf = va("challenge %i", svs.challenges[i].challenge); // buf = va("challenge FTE%i", svs.challenges[i].challenge);
// Netchan_OutOfBand(NS_SERVER, net_from, strlen(buf)+1, buf); // Netchan_OutOfBand(NS_SERVER, net_from, strlen(buf)+1, buf);
} }
@ -2028,7 +2029,10 @@ void SVNQ_ConnectionlessPacket(void)
client_t *client; client_t *client;
char *str; char *str;
char buffer[256]; char buffer[256];
// if (net_from.type == NA_LOOPBACK) if (net_from.type == NA_LOOPBACK)
return;
if (sv_listen.value < 2)
return; return;
MSG_BeginReading(); MSG_BeginReading();
@ -2068,33 +2072,7 @@ void SVNQ_ConnectionlessPacket(void)
str = va("connect %i %i %i \"\\name\\unconnected\"", NET_PROTOCOL_VERSION, 0, SV_NewChallenge()); str = va("connect %i %i %i \"\\name\\unconnected\"", NET_PROTOCOL_VERSION, 0, SV_NewChallenge());
Cmd_TokenizeString (str, false, false); Cmd_TokenizeString (str, false, false);
client = SVC_DirectConnect(); SVC_DirectConnect();
if (client)
{
SZ_Clear(&sb);
MSG_WriteLong(&sb, 0);
MSG_WriteByte(&sb, CCREP_ACCEPT);
MSG_WriteLong(&sb, BigShort(net_local_sv_ipadr.port));
*(int*)sb.data = BigLong(NETFLAG_CTL|sb.cursize);
NET_SendPacket(NS_SERVER, sb.cursize, sb.data, net_from);
//nq supports packet truncation, so give them the full ammount
client->netchan.message.maxsize = sizeof(client->netchan.message_buf);
host_client = client;
SVNQ_New_f();
}
else
{
SZ_Clear(&sb);
MSG_WriteLong(&sb, 0);
MSG_WriteByte(&sb, CCREP_REJECT);
MSG_WriteString(&sb, "Bugger ye off");
*(int*)sb.data = BigLong(NETFLAG_CTL|sb.cursize);
NET_SendPacket(NS_SERVER, sb.cursize, sb.data, net_from);
}
break; break;
} }
} }
@ -2901,6 +2879,7 @@ void SV_InitLocal (void)
Cvar_Register (&sv_resetparms, cvargroup_servercontrol); Cvar_Register (&sv_resetparms, cvargroup_servercontrol);
Cvar_Register (&sv_public, cvargroup_servercontrol); Cvar_Register (&sv_public, cvargroup_servercontrol);
Cvar_Register (&sv_listen, cvargroup_servercontrol);
#ifndef SERVERONLY #ifndef SERVERONLY
if (isDedicated) if (isDedicated)
@ -3145,10 +3124,13 @@ void Master_Heartbeat (void)
NET_SendPacket (NS_SERVER, strlen(string), string, sv_masterlist[i].adr); NET_SendPacket (NS_SERVER, strlen(string), string, sv_masterlist[i].adr);
break; break;
case true: case true:
Con_Printf ("Sending heartbeat to %s\n", NET_AdrToString (sv_masterlist[i].adr)); if (sv_listen.value>=2) //set listen to 1 to allow qw connections, 2 to allow nq connections too.
{ {
char *str = "\377\377\377\377heartbeat DarkPlaces\x0A"; Con_Printf ("Sending heartbeat to %s\n", NET_AdrToString (sv_masterlist[i].adr));
NET_SendPacket (NS_SERVER, strlen(str), str, sv_masterlist[i].adr); {
char *str = "\377\377\377\377heartbeat DarkPlaces\x0A";
NET_SendPacket (NS_SERVER, strlen(str), str, sv_masterlist[i].adr);
}
} }
break; break;
} }

View file

@ -411,6 +411,8 @@ SV_AddGravity
*/ */
void SV_AddGravity (edict_t *ent, float scale) void SV_AddGravity (edict_t *ent, float scale)
{ {
if (!scale && progstype != PROG_QW)
scale = 1;
ent->v->velocity[2] -= scale * sv_gravity.value/*movevars.gravity*/ * host_frametime; ent->v->velocity[2] -= scale * sv_gravity.value/*movevars.gravity*/ * host_frametime;
} }

View file

@ -53,8 +53,8 @@ void D_WarpScreen (void)
int column[MAXWIDTH+AMP2*2]; int column[MAXWIDTH+AMP2*2];
float wratio, hratio; float wratio, hratio;
w = r_refdef.vrect.width; w = WARP_WIDTH;
h = r_refdef.vrect.height; h = WARP_HEIGHT;
wratio = w / (float)scr_vrect.width; wratio = w / (float)scr_vrect.width;
hratio = h / (float)scr_vrect.height; hratio = h / (float)scr_vrect.height;

View file

@ -27,10 +27,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#endif #endif
//#define MAX_DECALS (1<<8) //#define MAX_SWDECALS (1<<8)
#if MAX_DECALS #if MAX_SWDECALS
decal_t decals[MAX_DECALS]; decal_t decals[MAX_SWDECALS];
int nextdecal; int nextdecal;
void SWR_AddDecal(vec3_t org); void SWR_AddDecal(vec3_t org);
@ -213,7 +213,7 @@ void SWR_AddStain(vec3_t org, float red, float green, float blue, float radius)
int i; int i;
float parms[5]; float parms[5];
#if MAX_DECALS #if MAX_SWDECALS
SWR_AddDecal(org); SWR_AddDecal(org);
#endif #endif
@ -415,7 +415,7 @@ void SWR_BuildLightmaps(void)
#endif #endif
//retrieves the next decal to be used, unlinking if needed. //retrieves the next decal to be used, unlinking if needed.
#if MAX_DECALS #if MAX_SWDECALS
decal_t *R_GetFreeDecal(void) decal_t *R_GetFreeDecal(void)
{ {
decal_t *dec = &decals[nextdecal]; decal_t *dec = &decals[nextdecal];
@ -430,7 +430,7 @@ decal_t *R_GetFreeDecal(void)
dec->owner->cached_dlight = -1; //get the surface to redraw. dec->owner->cached_dlight = -1; //get the surface to redraw.
} }
nextdecal = (nextdecal+1)&(MAX_DECALS-1); nextdecal = (nextdecal+1)&(MAX_SWDECALS-1);
memset(dec, 0, sizeof(decal_t)); memset(dec, 0, sizeof(decal_t));
@ -440,7 +440,7 @@ decal_t *R_GetFreeDecal(void)
void R_WipeDecals(void) void R_WipeDecals(void)
{ {
#if MAX_DECALS #if MAX_SWDECALS
int i; int i;
memset(decals, 0, sizeof(decals)); memset(decals, 0, sizeof(decals));
@ -449,7 +449,7 @@ void R_WipeDecals(void)
#endif #endif
} }
#if MAX_DECALS #if MAX_SWDECALS
static vec3_t decalorg; static vec3_t decalorg;
static float decalradius; static float decalradius;
@ -1077,7 +1077,7 @@ void R_DrawSurface (void)
unsigned char *pcolumndest; unsigned char *pcolumndest;
void (*pblockdrawer)(void); void (*pblockdrawer)(void);
texture_t *mt; texture_t *mt;
#if MAX_DECALS #if MAX_SWDECALS
decal_t *dec; decal_t *dec;
#endif #endif
@ -1154,7 +1154,7 @@ void R_DrawSurface (void)
pcolumndest += horzblockstep; pcolumndest += horzblockstep;
} }
#if MAX_DECALS #if MAX_SWDECALS
if (r_drawsurf.surf->decal && !r_drawsurf.surfmip) if (r_drawsurf.surf->decal && !r_drawsurf.surfmip)
{ {
if (r_pixbytes == 1 || r_pixbytes == 4) if (r_pixbytes == 1 || r_pixbytes == 4)