diff --git a/engine/client/cl_main.c b/engine/client/cl_main.c index ca6ec03e2..dc54e0c10 100644 --- a/engine/client/cl_main.c +++ b/engine/client/cl_main.c @@ -2940,7 +2940,7 @@ void Host_Frame (double time) */ Mod_Think(); //think even on idle (which means small walls and a fast cpu can get more surfaces done. - if (cl_maxfps.value>0 && cl_netfps.value>0 || cls.demoplayback) + if ((cl_maxfps.value>0 && cl_netfps.value>0) || cls.demoplayback) { //limit the fps freely, and expect the netfps to cope. if ((realtime - oldrealtime) < 1/cl_maxfps.value) return; diff --git a/engine/client/cl_parse.c b/engine/client/cl_parse.c index 95b82bbd5..b875dfab9 100644 --- a/engine/client/cl_parse.c +++ b/engine/client/cl_parse.c @@ -512,7 +512,7 @@ void Model_NextDownload (void) // char *twf; char *s; int i; - extern char gamedirfile[]; +// extern char gamedirfile[]; Con_TPrintf (TLC_CHECKINGMODELS); @@ -3162,7 +3162,6 @@ char *CL_ParseChat(char *text, player_info_t **player) int offset=0; qboolean suppress_talksound; char *p; - extern cvar_t cl_parsewhitetext; char *s; int check_flood; @@ -3482,7 +3481,7 @@ void CL_PrintChat(player_info_t *plr, char *rawmsg, char *msg, int plrflags) { char *t, *u; - while (t = strchr(msg, '{')) + while ((t = strchr(msg, '{'))) { u = strchr(msg, '}'); if (u) @@ -3789,7 +3788,7 @@ void CL_ParseServerMessage (void) if (TP_SuppressMessage(s)) break; //if this was unseen-sent from us, ignore it. - if (msg = CL_ParseChat(s, &plr)) + if ((msg = CL_ParseChat(s, &plr))) { CL_ParsePrint(s, i); CL_PrintChat(plr, s, msg, msgflags); @@ -4254,7 +4253,7 @@ void CLQ2_ParseServerMessage (void) char *msg; player_info_t *plr = NULL; - if (msg = CL_ParseChat(s, &plr)) + if ((msg = CL_ParseChat(s, &plr))) { CL_ParsePrint(s, i); CL_PrintChat(plr, s, msg, msgflags); @@ -4491,7 +4490,7 @@ void CLNQ_ParseServerMessage (void) char *msg; player_info_t *plr = NULL; - if (msg = CL_ParseChat(s+1, &plr)) + if ((msg = CL_ParseChat(s+1, &plr))) { CL_ParsePrint(s+1, PRINT_CHAT); CL_PrintChat(plr, s+1, msg, msgflags); diff --git a/engine/client/clq3_parse.c b/engine/client/clq3_parse.c index f6ec2b831..7f8355623 100644 --- a/engine/client/clq3_parse.c +++ b/engine/client/clq3_parse.c @@ -1026,4 +1026,5 @@ void CLQ3_SendConnectPacket(netadr_t to) Huff_PreferedCompressionCRC(); NET_SendPacket (NS_CLIENT, msg.cursize, msg.data, to); } -#endif \ No newline at end of file +#endif + diff --git a/engine/client/m_download.c b/engine/client/m_download.c index da3cab2ac..e1bb8b1d0 100644 --- a/engine/client/m_download.c +++ b/engine/client/m_download.c @@ -175,7 +175,7 @@ static void WriteInstalledPackages(void) { if (p->flags & DPF_HAVEAVERSION) { - s = ("\"%s\" \"%s\" \"%s\" %i \"%s\"\n", p->fullname, p->src, p->dest, p->version, p->gamedir); + s = va("\"%s\" \"%s\" \"%s\" %i \"%s\"\n", p->fullname, p->src, p->dest, p->version, p->gamedir); VFS_WRITE(f, s, strlen(s)); } } diff --git a/engine/client/m_options.c b/engine/client/m_options.c index bff5b6762..622ea43b0 100644 --- a/engine/client/m_options.c +++ b/engine/client/m_options.c @@ -427,7 +427,7 @@ void M_Menu_FPS_f (void) #ifdef SWQUAKE extern cvar_t d_smooth, d_mipscale, d_mipcap; #endif - extern cvar_t r_stains, r_bloodstains, r_loadlits, r_dynamic, v_contentblend, show_fps, gl_skyboxname; + extern cvar_t r_stains, r_bloodstains, r_loadlits, r_dynamic, v_contentblend, show_fps; key_dest = key_menu; m_state = m_complex; diff --git a/engine/client/menu.c b/engine/client/menu.c index 6343a390c..8641a1321 100644 --- a/engine/client/menu.c +++ b/engine/client/menu.c @@ -483,7 +483,7 @@ void M_Keys_Key (int k) } else if (k != '`') { - sprintf (cmd, "bind %s \"%s\"\n", Key_KeynumToString (k), bindnames[keys_cursor].command, false); + sprintf (cmd, "bind %s \"%s\"\n", Key_KeynumToString (k), bindnames[keys_cursor].command); Cbuf_InsertText (cmd, RESTRICT_LOCAL, false); } diff --git a/engine/common/vm.h b/engine/common/vm.h index c555a74a4..1acc791ff 100644 --- a/engine/common/vm.h +++ b/engine/common/vm.h @@ -76,6 +76,7 @@ void VMUI_fcloseall (int owner); int VMQ3_GetFileList(char *path, char *ext, char *output, int buffersize); //sans botlib +struct pc_token_s; int Script_LoadFile(char *filename); void Script_Free(int handle); int Script_Read(int handle, struct pc_token_s *token); diff --git a/engine/server/pr_cmds.c b/engine/server/pr_cmds.c index ee1dcaf25..4e74ede9e 100644 --- a/engine/server/pr_cmds.c +++ b/engine/server/pr_cmds.c @@ -64,6 +64,7 @@ cvar_t pr_tempstringcount = SCVAR("pr_tempstringcount", "16"); cvar_t pr_tempstringsize = SCVAR("pr_tempstringsize", "4096"); cvar_t sv_gameplayfix_blowupfallenzombies = SCVAR("sv_gameplayfix_blowupfallenzombies", "0"); +extern cvar_t sv_gameplayfix_noairborncorpse; cvar_t sv_addon[MAXADDONS]; char cvargroup_progs[] = "Progs variables"; @@ -933,6 +934,7 @@ void PR_Init(void) Cvar_Register (&pr_tempstringsize, cvargroup_progs); Cvar_Register (&sv_gameplayfix_blowupfallenzombies, cvargroup_progs); + Cvar_Register (&sv_gameplayfix_noairborncorpse, cvargroup_progs); } void Q_InitProgs(void) diff --git a/engine/server/sv_ents.c b/engine/server/sv_ents.c index ee03d67ae..84a514f61 100644 --- a/engine/server/sv_ents.c +++ b/engine/server/sv_ents.c @@ -1601,7 +1601,7 @@ void SV_WritePlayersToClient (client_t *client, edict_t *clent, qbyte *pvs, size for (j=0,cl=svs.clients ; jstate && cl->name[0] || cl->protocol == SCP_BAD; + isbot = !cl->state && (cl->name[0] || cl->protocol == SCP_BAD); if (cl->state != cs_spawned) //this includes bots if (!isbot || progstype == PROG_QW) //unless they're NQ bots... continue; diff --git a/engine/server/sv_phys.c b/engine/server/sv_phys.c index 2d4c57a8f..2e55b3ffc 100644 --- a/engine/server/sv_phys.c +++ b/engine/server/sv_phys.c @@ -8,7 +8,7 @@ of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -28,7 +28,7 @@ extern nqglobalvars_t realpr_nqglobal_struct; pushmove objects do not obey gravity, and do not interact with each other or trigger fields, but block normal movement and push normal objects when they move. -onground is set for toss objects when they come to a complete rest. it is set for steping or walking objects +onground is set for toss objects when they come to a complete rest. it is set for steping or walking objects doors, plats, etc are SOLID_BSP, and MOVETYPE_PUSH bonus items are SOLID_TRIGGER touch, and MOVETYPE_TOSS @@ -52,6 +52,7 @@ cvar_t sv_airaccelerate = SCVAR( "sv_airaccelerate", "0.7"); cvar_t sv_wateraccelerate = SCVAR( "sv_wateraccelerate", "10"); cvar_t sv_friction = SCVAR( "sv_friction", "4"); cvar_t sv_waterfriction = SCVAR( "sv_waterfriction", "4"); +cvar_t sv_gameplayfix_noairborncorpse = SCVAR( "sv_gameplayfix_noairborncorpse", "0"); cvar_t pm_ktjump = SCVARF("pm_ktjump", "", CVAR_SERVERINFO); cvar_t pm_bunnyspeedcap = SCVARF("pm_bunnyspeedcap", "", CVAR_SERVERINFO); @@ -146,7 +147,7 @@ qboolean SV_RunThink (edict_t *ent) thinktime = ent->v->nextthink; if (thinktime <= 0 || thinktime > sv.time + host_frametime) return true; - + if (thinktime < sv.time) thinktime = sv.time; // don't let things stay in the past. // it is possible to start that way @@ -166,7 +167,7 @@ qboolean SV_RunThink (edict_t *ent) return true; if (thinktime > sv.time + host_frametime) return true; - + if (thinktime < sv.time) thinktime = sv.time; // don't let things stay in the past. // it is possible to start that way @@ -198,10 +199,10 @@ Two entities have touched, so run their touch functions void SV_Impact (edict_t *e1, edict_t *e2) { int old_self, old_other; - + old_self = pr_global_struct->self; old_other = pr_global_struct->other; - + pr_global_struct->time = sv.time; if (e1->v->touch && e1->v->solid != SOLID_NOT) { @@ -209,7 +210,7 @@ void SV_Impact (edict_t *e1, edict_t *e2) pr_global_struct->other = EDICT_TO_PROG(svprogfuncs, e2); PR_ExecuteProgram (svprogfuncs, e1->v->touch); } - + if (e2->v->touch && e2->v->solid != SOLID_NOT) { pr_global_struct->self = EDICT_TO_PROG(svprogfuncs, e2); @@ -275,14 +276,14 @@ int SV_FlyMove (edict_t *ent, float time, trace_t *steptrace) vec3_t diff; vec3_t startorg; - + numbumps = 4; - + blocked = 0; VectorCopy (ent->v->velocity, original_velocity); VectorCopy (ent->v->velocity, primal_velocity); numplanes = 0; - + time_left = time; VectorCopy (ent->v->origin, startorg); @@ -336,9 +337,9 @@ int SV_FlyMove (edict_t *ent, float time, trace_t *steptrace) if (ent->isfree) break; // removed by the impact function - + time_left -= time_left * trace.fraction; - + // cliped to another plane if (numplanes >= MAX_CLIP_PLANES) { // this shouldn't really happen @@ -453,7 +454,7 @@ trace_t SV_PushEntity (edict_t *ent, vec3_t push) { trace_t trace; vec3_t end; - + VectorAdd (ent->v->origin, push, end); if (ent->v->movetype == MOVETYPE_FLYMISSILE) @@ -463,7 +464,7 @@ trace_t SV_PushEntity (edict_t *ent, vec3_t push) trace = SV_Move (ent->v->origin, ent->v->mins, ent->v->maxs, end, MOVE_NOMONSTERS, ent); else trace = SV_Move (ent->v->origin, ent->v->mins, ent->v->maxs, end, MOVE_NORMAL, ent); - + // if (trace.ent) // VectorMA(trace.endpos, sv_impactpush.value, trace.plane.normal, ent->v->origin); // else @@ -471,10 +472,10 @@ trace_t SV_PushEntity (edict_t *ent, vec3_t push) SV_LinkEdict (ent, true); if (trace.ent) - SV_Impact (ent, trace.ent); + SV_Impact (ent, trace.ent); return trace; -} +} @@ -537,7 +538,7 @@ qboolean SV_PushAngles (edict_t *pusher, vec3_t move, vec3_t amove) check = EDICT_NUM(svprogfuncs, e); if (check->isfree) continue; - + if (check->v->movetype == MOVETYPE_PUSH || check->v->movetype == MOVETYPE_NONE || check->v->movetype == MOVETYPE_NOCLIP) @@ -567,7 +568,7 @@ qboolean SV_PushAngles (edict_t *pusher, vec3_t move, vec3_t amove) || check->v->absmax[1] <= mins[1] || check->v->absmax[2] <= mins[2] ) continue; - + // see if the ent's bbox is inside the pusher's final position if (!SV_TestEntityPosition (check)) @@ -582,7 +583,7 @@ qboolean SV_PushAngles (edict_t *pusher, vec3_t move, vec3_t amove) VectorCopy (check->v->angles, pushed_p->angles); pushed_p++; - // try moving the contacted entity + // try moving the contacted entity VectorAdd (check->v->origin, move, check->v->origin); // if (check->client) // { // FIXME: doesn't rotate monsters? @@ -598,6 +599,8 @@ qboolean SV_PushAngles (edict_t *pusher, vec3_t move, vec3_t amove) VectorSubtract (org2, org, move2); VectorAdd (check->v->origin, move2, check->v->origin); + check->v->flags = (int)check->v->flags & ~FL_ONGROUND; + // may have pushed them off an edge if (PROG_TO_EDICT(svprogfuncs, check->v->groundentity) != pusher) check->v->groundentity = 0; @@ -630,7 +633,7 @@ qboolean SV_PushAngles (edict_t *pusher, vec3_t move, vec3_t amove) SV_LinkEdict (check, false); continue; } - + // Con_Printf("Pusher hit %s\n", PR_GetString(svprogfuncs, check->v->classname)); if (pusher->v->blocked) { @@ -692,7 +695,7 @@ qboolean SV_Push (edict_t *pusher, vec3_t move, vec3_t amove) } VectorCopy (pusher->v->origin, pushorig); - + // move the pusher to it's final position VectorAdd (pusher->v->origin, move, pusher->v->origin); @@ -720,7 +723,7 @@ qboolean SV_Push (edict_t *pusher, vec3_t move, vec3_t amove) // if the entity is standing on the pusher, it will definately be moved if ( ! ( ((int)check->v->flags & FL_ONGROUND) - && + && PROG_TO_EDICT(svprogfuncs, check->v->groundentity) == pusher) ) { if ( check->v->absmin[0] >= maxs[0] @@ -740,7 +743,9 @@ qboolean SV_Push (edict_t *pusher, vec3_t move, vec3_t amove) moved_edict[num_moved] = check; num_moved++; - // try moving the contacted entity + check->v->flags = (int)check->v->flags & ~FL_ONGROUND; + + // try moving the contacted entity VectorAdd (check->v->origin, move, check->v->origin); block = SV_TestEntityPosition (check); if (!block) @@ -771,7 +776,7 @@ qboolean SV_Push (edict_t *pusher, vec3_t move, vec3_t amove) SV_LinkEdict (check, false); continue; } - + VectorCopy (pushorig, pusher->v->origin); SV_LinkEdict (pusher, false); @@ -783,7 +788,7 @@ qboolean SV_Push (edict_t *pusher, vec3_t move, vec3_t amove) pr_global_struct->other = EDICT_TO_PROG(svprogfuncs, check); PR_ExecuteProgram (svprogfuncs, pusher->v->blocked); } - + // move back any entities we already moved for (i=0 ; iv->ltime; - + thinktime = ent->v->nextthink; if (thinktime < ent->v->ltime + host_frametime) { @@ -858,7 +863,7 @@ float l; { SV_PushMove (ent, movetime); // advances ent->v->ltime if not blocked } - + if (thinktime > oldltime && thinktime <= ent->v->ltime) { VectorCopy (ent->v->origin, oldorg); @@ -942,7 +947,7 @@ void SV_Physics_Noclip (edict_t *ent) // regular thinking if (!SV_RunThink (ent)) return; - + VectorMA (ent->v->angles, host_frametime, ent->v->avelocity, ent->v->angles); VectorMA (ent->v->origin, host_frametime, ent->v->velocity, ent->v->origin); @@ -985,13 +990,13 @@ void SV_CheckWaterTransition (edict_t *ent) ent->v->waterlevel = 1; return; } - + if (cont <= Q1CONTENTS_WATER) { if (ent->v->watertype == Q1CONTENTS_EMPTY) { // just crossed into water SV_StartSound (ent, 0, "misc/h2ohit1.wav", 255, 1); - } + } ent->v->watertype = cont; ent->v->waterlevel = 1; } @@ -1000,7 +1005,7 @@ void SV_CheckWaterTransition (edict_t *ent) if (ent->v->watertype != Q1CONTENTS_EMPTY) { // just crossed into open SV_StartSound (ent, 0, "misc/h2ohit1.wav", 255, 1); - } + } ent->v->watertype = Q1CONTENTS_EMPTY; ent->v->waterlevel = cont; } @@ -1027,12 +1032,24 @@ void SV_Physics_Toss (edict_t *ent) if (!SV_RunThink (ent)) return; - if (ent->v->velocity[2] > 0) - ent->v->flags = (int)ent->v->flags & ~FL_ONGROUND; - // if onground, return without moving if ( ((int)ent->v->flags & FL_ONGROUND) ) - return; + { + if (ent->v->velocity[2] > 0) + ent->v->flags = (int)ent->v->flags & ~FL_ONGROUND; + else if (ent->v->groundentity) + { + if (sv_gameplayfix_noairborncorpse.value) + { + edict_t *onent; + onent = PROG_TO_EDICT(svprogfuncs, ent->v->groundentity); + if (!onent->isfree) + return; //don't drop if our fround is still valid + } + else + return; //don't drop, even if the item we were on was removed (certain dm maps do this for q3 style stuff). + } + } // add gravity if (ent->v->movetype != MOVETYPE_FLY @@ -1058,7 +1075,7 @@ void SV_Physics_Toss (edict_t *ent) return; VectorCopy(trace.endpos, move); - + if (ent->v->movetype == MOVETYPE_BOUNCE) backoff = 1.5; else if (ent->v->movetype == MOVETYPE_BOUNCEMISSILE) @@ -1071,7 +1088,7 @@ void SV_Physics_Toss (edict_t *ent) // stop if on ground if ((trace.plane.normal[2] > 0.7) && (ent->v->movetype != MOVETYPE_BOUNCEMISSILE)) - { + { if (ent->v->velocity[2] < 60 || ent->v->movetype != MOVETYPE_BOUNCE ) { ent->v->flags = (int)ent->v->flags | FL_ONGROUND; @@ -1080,7 +1097,7 @@ void SV_Physics_Toss (edict_t *ent) VectorCopy (vec3_origin, ent->v->avelocity); } } - + // check for in water SV_CheckWaterTransition (ent); } @@ -1136,7 +1153,7 @@ void SV_Physics_Step (edict_t *ent) // regular thinking SV_RunThink (ent); - + SV_CheckWaterTransition (ent); } @@ -1192,7 +1209,7 @@ void SV_CheckStuck (edict_t *ent) SV_LinkEdict (ent, true); return; } - + for (z=0 ; z < pm_stepheight ; z++) for (i=-1 ; i <= 1 ; i++) for (j=-1 ; j <= 1 ; j++) @@ -1207,7 +1224,7 @@ void SV_CheckStuck (edict_t *ent) return; } } - + VectorCopy (org, ent->v->origin); Con_DPrintf ("player is stuck.\n"); } @@ -1224,7 +1241,7 @@ qboolean SV_CheckWater (edict_t *ent) point[0] = ent->v->origin[0]; point[1] = ent->v->origin[1]; - point[2] = ent->v->origin[2] + ent->v->mins[2] + 1; + point[2] = ent->v->origin[2] + ent->v->mins[2] + 1; ent->v->waterlevel = 0; ent->v->watertype = Q1CONTENTS_EMPTY; @@ -1237,7 +1254,7 @@ qboolean SV_CheckWater (edict_t *ent) ent->v->watertype = Q1CONTENTS_SLIME; else if (cont & FTECONTENTS_WATER) ent->v->watertype = Q1CONTENTS_WATER; - else + else ent->v->watertype = Q1CONTENTS_SKY; ent->v->waterlevel = 1; point[2] = ent->v->origin[2] + (ent->v->mins[2] + ent->v->maxs[2])*0.5; @@ -1251,7 +1268,7 @@ qboolean SV_CheckWater (edict_t *ent) ent->v->waterlevel = 3; } } - + return ent->v->waterlevel > 1; } @@ -1267,19 +1284,19 @@ void SV_WallFriction (edict_t *ent, trace_t *trace) vec3_t forward, right, up; float d, i; vec3_t into, side; - + AngleVectors (ent->v->v_angle, forward, right, up); d = DotProduct (trace->plane.normal, forward); - + d += 0.5; if (d >= 0 || IS_NAN(d)) return; - + // cut the tangential velocity i = DotProduct (trace->plane.normal, ent->v->velocity); VectorScale (trace->plane.normal, i, into); VectorSubtract (ent->v->velocity, into, side); - + ent->v->velocity[0] = side[0] * (1 + d); ent->v->velocity[1] = side[1] * (1 + d); } @@ -1303,7 +1320,7 @@ int SV_TryUnstick (edict_t *ent, vec3_t oldvel) vec3_t dir; int clip; trace_t steptrace; - + VectorCopy (ent->v->origin, oldorg); VectorCopy (vec3_origin, dir); @@ -1321,7 +1338,7 @@ int SV_TryUnstick (edict_t *ent, vec3_t oldvel) case 6: dir[0] = 2; dir[1] = -2; break; case 7: dir[0] = -2; dir[1] = -2; break; } - + SV_PushEntity (ent, dir); // retry the original move @@ -1336,11 +1353,11 @@ int SV_TryUnstick (edict_t *ent, vec3_t oldvel) //Con_DPrintf ("unstuck!\n"); return clip; } - + // go back to the original pos and try again VectorCopy (oldorg, ent->v->origin); } - + VectorCopy (vec3_origin, ent->v->velocity); return 7; // still not moving } @@ -1362,16 +1379,16 @@ void SV_WalkMove (edict_t *ent) int clip; int oldonground; trace_t steptrace, downtrace; - + // // do a regular slide move unless it looks like you ran into a step // oldonground = (int)ent->v->flags & FL_ONGROUND; ent->v->flags = (int)ent->v->flags & ~FL_ONGROUND; - + VectorCopy (ent->v->origin, oldorg); VectorCopy (ent->v->velocity, oldvel); - + clip = SV_FlyMove (ent, host_frametime, &steptrace); if ( !(clip & 2) ) @@ -1379,13 +1396,13 @@ void SV_WalkMove (edict_t *ent) if (!oldonground && ent->v->waterlevel == 0) return; // don't stair up while jumping - + if (ent->v->movetype != MOVETYPE_WALK) return; // gibbed by a trigger - + // if (sv_nostep.value) // return; - + if ( (int)ent->v->flags & FL_WATERJUMP ) return; @@ -1423,7 +1440,7 @@ void SV_WalkMove (edict_t *ent) // Con_Printf("Try unstick fwd\n"); } } - + // extra friction based on view angle if ( clip & 2 ) { @@ -1502,7 +1519,7 @@ void SV_WalkMove (edict_t *ent) { // if the push down didn't end up on good ground, use the move without // the step up. This happens near wall / slope combinations, and can -// cause the player to hop up higher on a slope too steep to climb +// cause the player to hop up higher on a slope too steep to climb VectorCopy (nosteporg, ent->v->origin); VectorCopy (nostepvel, ent->v->velocity); @@ -1562,31 +1579,31 @@ void SV_WalkMove (edict_t *ent) // if (sv_nostep.value) // return; - + // if move didn't block on a step, return if (clip & 2) { // if move was not trying to move into the step, return if (fabs(start_velocity[0]) < 0.03125 && fabs(start_velocity[1]) < 0.03125) return; - + if (ent->v->movetype != MOVETYPE_FLY) { // return if gibbed by a trigger if (ent->v->movetype != MOVETYPE_WALK) return; - + // only step up while jumping if that is enabled // if (!(sv_jumpstep.value && sv_gameplayfix_stepwhilejumping.value)) if (!oldonground && ent->v->waterlevel == 0) return; } - + // try moving up and forward to go up a step // back to start pos VectorCopy (start_origin, ent->v->origin); VectorCopy (start_velocity, ent->v->velocity); - + // move up VectorClear (upmove); upmove[2] = pm_stepheight; @@ -1597,9 +1614,9 @@ void SV_WalkMove (edict_t *ent) ent->v->velocity[2] = 0; clip = SV_FlyMove (ent, host_frametime, &steptrace); ent->v->velocity[2] += start_velocity[2]; - + SV_CheckVelocity(ent); - + // check for stuckness, possibly due to the limited precision of floats // in the clipping hulls if (clip @@ -1612,7 +1629,7 @@ void SV_WalkMove (edict_t *ent) VectorCopy(originalmove_velocity, ent->v->velocity); //clip = originalmove_clip; ent->v->flags = originalmove_flags; - ent->v->groundentity = originalmove_groundentity; + ent->v->groundentity = originalmove_groundentity; // now try to unstick if needed //clip = SV_TryUnstick (ent, oldvel); return; @@ -1656,7 +1673,7 @@ void SV_WalkMove (edict_t *ent) VectorCopy(originalmove_velocity, ent->v->velocity); //clip = originalmove_clip; ent->v->flags = originalmove_flags; - ent->v->groundentity = originalmove_groundentity; + ent->v->groundentity = originalmove_groundentity; } SV_SetOnGround (ent); @@ -1696,12 +1713,12 @@ void SV_RunEntity (edict_t *ent) // // call standard client pre-think - // + // pr_global_struct->time = sv.time; pr_global_struct->self = EDICT_TO_PROG(svprogfuncs, ent); if (pr_global_struct->PlayerPreThink) PR_ExecuteProgram (svprogfuncs, pr_global_struct->PlayerPreThink); - + if (readyforjump) //qw progs can't jump for themselves... { if (!ent->v->button2 && !((int)ent->v->flags & FL_JUMPRELEASED) && ent->v->velocity[2] <= 0) @@ -1826,9 +1843,9 @@ void SV_RunNewmis (void) ent = PROG_TO_EDICT(svprogfuncs, pr_global_struct->newmis); host_frametime = 0.05; pr_global_struct->newmis = 0; - - SV_RunEntity (ent); - + + SV_RunEntity (ent); + host_frametime = pr_global_struct->frametime; } @@ -1981,9 +1998,9 @@ qboolean SV_Physics (void) SV_RunEntity (ent); SV_RunNewmis (); } - + if (retouch) - pr_global_struct->force_retouch-=1; + pr_global_struct->force_retouch-=1; if (EndFrameQC) { @@ -1999,15 +2016,15 @@ qboolean SV_Physics (void) void SV_SetMoveVars(void) { - movevars.gravity = sv_gravity.value; - movevars.stopspeed = sv_stopspeed.value; - movevars.maxspeed = sv_maxspeed.value; - movevars.spectatormaxspeed = sv_spectatormaxspeed.value; - movevars.accelerate = sv_accelerate.value; - movevars.airaccelerate = sv_airaccelerate.value; - movevars.wateraccelerate = sv_wateraccelerate.value; - movevars.friction = sv_friction.value; - movevars.waterfriction = sv_waterfriction.value; + movevars.gravity = sv_gravity.value; + movevars.stopspeed = sv_stopspeed.value; + movevars.maxspeed = sv_maxspeed.value; + movevars.spectatormaxspeed = sv_spectatormaxspeed.value; + movevars.accelerate = sv_accelerate.value; + movevars.airaccelerate = sv_airaccelerate.value; + movevars.wateraccelerate = sv_wateraccelerate.value; + movevars.friction = sv_friction.value; + movevars.waterfriction = sv_waterfriction.value; movevars.entgravity = 1.0; } #endif diff --git a/engine/server/sv_send.c b/engine/server/sv_send.c index 00d57fe58..c8317c5d9 100644 --- a/engine/server/sv_send.c +++ b/engine/server/sv_send.c @@ -558,6 +558,9 @@ void SV_MulticastProtExt(vec3_t origin, multicast_t to, int dimension_mask, int case SCP_BAD: continue; //a bot. + default: + SV_Error("Multicast: Client is using a bad protocl"); + #ifdef NQPROT case SCP_NETQUAKE: case SCP_DARKPLACES6: @@ -672,6 +675,8 @@ void SV_MulticastProtExt(vec3_t origin, multicast_t to, int dimension_mask, int { case SCP_BAD: continue; //a bot. + default: + SV_Error("multicast: Client is using a bad protocol"); #ifdef NQPROT case SCP_NETQUAKE: diff --git a/engine/server/sv_user.c b/engine/server/sv_user.c index 6e8b58847..772f6e544 100644 --- a/engine/server/sv_user.c +++ b/engine/server/sv_user.c @@ -348,7 +348,6 @@ void SVNQ_New_f (void) #ifdef Q2SERVER void SVQ2_ConfigStrings_f (void) { - extern int map_checksum; int start; char *str; @@ -447,6 +446,7 @@ void SVQ2_ConfigStrings_f (void) } else if (start < Q2CS_MODELS) { + extern int map_checksum; MSG_WriteByte (&host_client->netchan.message, svcq2_configstring); MSG_WriteShort (&host_client->netchan.message, start); MSG_WriteString (&host_client->netchan.message, va("%i", map_checksum)); @@ -3993,7 +3993,6 @@ void SV_RunCmd (usercmd_t *ucmd, qboolean recurse) int oldmsec; double tmp_time; qboolean jumpable; - extern cvar_t sv_gravity; // DMW copied this KK hack copied from QuakeForge anti-cheat