Small changes and fixes.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@1406 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2005-10-01 03:01:12 +00:00
parent 95a9c06645
commit 56f3dd788b
1 changed files with 110 additions and 24 deletions

View File

@ -767,13 +767,8 @@ static qboolean CopyCSQCEdictToEntity(csqcedict_t *in, entity_t *out)
model_t *model; model_t *model;
i = in->v->modelindex; i = in->v->modelindex;
if (i == 0) model = CSQC_GetModelForIndex(in->v->modelindex);
return false; if (!model)
else if (i > 0 && i < MAX_MODELS)
model = cl.model_precache[i];
else if (i < 0 && i > -MAX_CSQCMODELS)
model = cl.model_csqcprecache[-i];
else
return false; //there might be other ent types later as an extension that stop this. return false; //there might be other ent types later as an extension that stop this.
if (!model) if (!model)
@ -789,7 +784,7 @@ static qboolean CopyCSQCEdictToEntity(csqcedict_t *in, entity_t *out)
{ {
i = in->v->renderflags; i = in->v->renderflags;
if (i & CSQCRF_VIEWMODEL) if (i & CSQCRF_VIEWMODEL)
out->flags |= Q2RF_DEPTHHACK; out->flags |= Q2RF_DEPTHHACK|Q2RF_WEAPONMODEL;
if (i & CSQCRF_EXTERNALMODEL) if (i & CSQCRF_EXTERNALMODEL)
out->flags |= Q2RF_EXTERNALMODEL; out->flags |= Q2RF_EXTERNALMODEL;
if (i & CSQCRF_DEPTHHACK) if (i & CSQCRF_DEPTHHACK)
@ -810,6 +805,7 @@ static qboolean CopyCSQCEdictToEntity(csqcedict_t *in, entity_t *out)
VectorCopy(csqcg.forward, out->axis[0]); VectorCopy(csqcg.forward, out->axis[0]);
VectorNegate(csqcg.right, out->axis[1]); VectorNegate(csqcg.right, out->axis[1]);
VectorCopy(csqcg.up, out->axis[2]); VectorCopy(csqcg.up, out->axis[2]);
out->scale = 1;
} }
else else
{ {
@ -817,6 +813,11 @@ static qboolean CopyCSQCEdictToEntity(csqcedict_t *in, entity_t *out)
out->angles[0]*=-1; out->angles[0]*=-1;
AngleVectors(out->angles, out->axis[0], out->axis[1], out->axis[2]); AngleVectors(out->angles, out->axis[0], out->axis[1], out->axis[2]);
VectorInverse(out->axis[1]); VectorInverse(out->axis[1]);
if (!in->v->scale)
out->scale = 1;
else
out->scale = in->v->scale;
} }
out->frame1time = in->v->frame1time; out->frame1time = in->v->frame1time;
@ -832,10 +833,7 @@ static qboolean CopyCSQCEdictToEntity(csqcedict_t *in, entity_t *out)
out->alpha = 1; out->alpha = 1;
else else
out->alpha = in->v->alpha; out->alpha = in->v->alpha;
if (!in->v->scale)
out->scale = 1;
else
out->scale = in->v->scale;
out->skinnum = in->v->skin; out->skinnum = in->v->skin;
out->fatness = in->v->fatness; out->fatness = in->v->fatness;
#ifdef Q3SHADERS #ifdef Q3SHADERS
@ -1091,7 +1089,7 @@ typedef enum
VF_ANGLES_Y = 17, VF_ANGLES_Y = 17,
VF_ANGLES_Z = 18, VF_ANGLES_Z = 18,
VF_DRAWWORLD = 19, VF_DRAWWORLD = 19,
VF_NOENGINESBAR = 20, VF_ENGINESBAR = 20,
VF_DRAWCROSSHAIR = 21, VF_DRAWCROSSHAIR = 21,
VF_PERSPECTIVE = 200 VF_PERSPECTIVE = 200
} viewflags; } viewflags;
@ -1171,8 +1169,8 @@ static void PF_R_SetViewFlag(progfuncs_t *prinst, struct globalvars_s *pr_global
case VF_DRAWWORLD: case VF_DRAWWORLD:
r_refdef.flags = r_refdef.flags&~Q2RDF_NOWORLDMODEL | (*p?0:Q2RDF_NOWORLDMODEL); r_refdef.flags = r_refdef.flags&~Q2RDF_NOWORLDMODEL | (*p?0:Q2RDF_NOWORLDMODEL);
break; break;
case VF_NOENGINESBAR: case VF_ENGINESBAR:
csqc_drawsbar = !*p; csqc_drawsbar = *p;
break; break;
case VF_DRAWCROSSHAIR: case VF_DRAWCROSSHAIR:
csqc_addcrosshair = *p; csqc_addcrosshair = *p;
@ -1701,7 +1699,7 @@ static void PF_cs_getinputstate (progfuncs_t *prinst, struct globalvars_s *pr_gl
usercmd_t *cmd; usercmd_t *cmd;
f = G_FLOAT(OFS_PARM0); f = G_FLOAT(OFS_PARM0);
if (f > cls.netchan.outgoing_sequence) if (f >= cls.netchan.outgoing_sequence)
{ {
G_FLOAT(OFS_RETURN) = false; G_FLOAT(OFS_RETURN) = false;
return; return;
@ -1719,9 +1717,9 @@ static void PF_cs_getinputstate (progfuncs_t *prinst, struct globalvars_s *pr_gl
*csqcg.input_timelength = cmd->msec/1000.0f; *csqcg.input_timelength = cmd->msec/1000.0f;
if (csqcg.input_angles) if (csqcg.input_angles)
{ {
csqcg.input_angles[0] = SHORT2ANGLE(cmd->angles[0]); csqcg.input_angles[0] = SHORT2ANGLE(cmd->angles[0]+0.5);
csqcg.input_angles[1] = SHORT2ANGLE(cmd->angles[1]); csqcg.input_angles[1] = SHORT2ANGLE(cmd->angles[1]+0.5);
csqcg.input_angles[2] = SHORT2ANGLE(cmd->angles[2]); csqcg.input_angles[2] = SHORT2ANGLE(cmd->angles[2]+0.5);
} }
if (csqcg.input_movevalues) if (csqcg.input_movevalues)
{ {
@ -1738,7 +1736,7 @@ static void PF_cs_getinputstate (progfuncs_t *prinst, struct globalvars_s *pr_gl
//read lots of globals, run the default player physics, write lots of globals. //read lots of globals, run the default player physics, write lots of globals.
static void PF_cs_runplayerphysics (progfuncs_t *prinst, struct globalvars_s *pr_globals) static void PF_cs_runplayerphysics (progfuncs_t *prinst, struct globalvars_s *pr_globals)
{ {
int msecs; unsigned int msecs;
extern vec3_t player_mins; extern vec3_t player_mins;
extern vec3_t player_maxs; extern vec3_t player_maxs;
@ -1811,9 +1809,12 @@ typedef struct {
pmove.cmd.angles[0] = ANGLE2SHORT(csqcg.input_angles[0]); pmove.cmd.angles[0] = ANGLE2SHORT(csqcg.input_angles[0]);
pmove.cmd.angles[1] = ANGLE2SHORT(csqcg.input_angles[1]); pmove.cmd.angles[1] = ANGLE2SHORT(csqcg.input_angles[1]);
pmove.cmd.angles[2] = ANGLE2SHORT(csqcg.input_angles[2]); pmove.cmd.angles[2] = ANGLE2SHORT(csqcg.input_angles[2]);
VectorCopy(csqcg.input_angles, pmove.angles);
pmove.cmd.forwardmove = csqcg.input_movevalues[0]; pmove.cmd.forwardmove = csqcg.input_movevalues[0];
pmove.cmd.sidemove = csqcg.input_movevalues[1]; pmove.cmd.sidemove = csqcg.input_movevalues[1];
pmove.cmd.upmove = csqcg.input_movevalues[2]; pmove.cmd.upmove = csqcg.input_movevalues[2];
pmove.cmd.buttons = *csqcg.input_buttons;
VectorCopy(csqcg.pmove_org, pmove.origin); VectorCopy(csqcg.pmove_org, pmove.origin);
VectorCopy(csqcg.pmove_vel, pmove.velocity); VectorCopy(csqcg.pmove_vel, pmove.velocity);
@ -1821,8 +1822,11 @@ typedef struct {
VectorCopy(csqcg.pmove_mins, player_mins); VectorCopy(csqcg.pmove_mins, player_mins);
pmove.hullnum = 1; pmove.hullnum = 1;
CL_SetSolidEntities();
while(msecs)
while(msecs) //break up longer commands
{ {
pmove.cmd.msec = msecs; pmove.cmd.msec = msecs;
if (pmove.cmd.msec > 50) if (pmove.cmd.msec > 50)
@ -1848,6 +1852,71 @@ static void CheckSendPings(void)
} }
} }
static void PF_cs_serverkey (progfuncs_t *prinst, struct globalvars_s *pr_globals)
{
char *keyname = PF_VarString(prinst, 0, pr_globals);
char *ret;
if (!strcmp(keyname, "ip"))
ret = NET_AdrToString(cls.netchan.remote_address);
else if (!strcmp(keyname, "protocol"))
{ //using this is pretty acedemic, really. Not particuarly portable.
switch (cls.protocol)
{ //a tokenizable string
//first is the base game qw/nq
//second is branch (custom engine name)
//third is protocol version.
default:
case CP_UNKNOWN:
ret = "Unknown";
break;
case CP_QUAKEWORLD:
if (cls.fteprotocolextensions)
ret = "QuakeWorld FTE";
else if (cls.z_ext)
ret = "QuakeWorld ZQuake";
else
ret = "QuakeWorld";
break;
case CP_NETQUAKE:
switch (nq_dp_protocol)
{
default:
ret = "NetQuake";
break;
case 5:
ret = "NetQuake DarkPlaces 5";
break;
case 6:
ret = "NetQuake DarkPlaces 6";
break;
case 7:
ret = "NetQuake DarkPlaces 7";
break;
}
break;
case CP_QUAKE2:
ret = "Quake2";
break;
case CP_QUAKE3:
ret = "Quake3";
break;
case CP_PLUGIN:
ret = "External";
break;
}
}
else
{
ret = Info_ValueForKey(cl.serverinfo, keyname);
}
if (*ret)
RETURN_SSTRING(ret);
else
G_INT(OFS_RETURN) = 0;
}
//string(float pnum, string keyname) //string(float pnum, string keyname)
static void PF_cs_getplayerkey (progfuncs_t *prinst, struct globalvars_s *pr_globals) static void PF_cs_getplayerkey (progfuncs_t *prinst, struct globalvars_s *pr_globals)
{ {
@ -1870,7 +1939,7 @@ static void PF_cs_getplayerkey (progfuncs_t *prinst, struct globalvars_s *pr_glo
if (pnum < 0 || pnum >= MAX_CLIENTS) if (pnum < 0 || pnum >= MAX_CLIENTS)
ret = ""; ret = "";
else if (!*cl.players[pnum].userinfo) else if (!*cl.players[pnum].userinfo)
ret = ""; ret = ""; //player isn't on the server.
else if (!strcmp(keyname, "ping")) else if (!strcmp(keyname, "ping"))
{ {
CheckSendPings(); CheckSendPings();
@ -2551,10 +2620,12 @@ static void PF_cl_getlight (progfuncs_t *prinst, struct globalvars_s *pr_globals
VectorMA(ambient, 0.5, diffuse, G_VECTOR(OFS_RETURN)); VectorMA(ambient, 0.5, diffuse, G_VECTOR(OFS_RETURN));
} }
/*
static void PF_Stub (progfuncs_t *prinst, struct globalvars_s *pr_globals) static void PF_Stub (progfuncs_t *prinst, struct globalvars_s *pr_globals)
{ {
Con_Printf("Obsolete csqc builtin (%i) executed\n", prinst->lastcalledbuiltinnumber); Con_Printf("Obsolete csqc builtin (%i) executed\n", prinst->lastcalledbuiltinnumber);
} }
*/
void PF_rotatevectorsbytag (progfuncs_t *prinst, struct globalvars_s *pr_globals) void PF_rotatevectorsbytag (progfuncs_t *prinst, struct globalvars_s *pr_globals)
{ {
@ -2587,6 +2658,17 @@ void PF_rotatevectorsbytag (progfuncs_t *prinst, struct globalvars_s *pr_globals
VectorCopy(csqcg.up, src+8); VectorCopy(csqcg.up, src+8);
src[11] = 0; src[11] = 0;
if (ent->v->scale)
{
for (i = 0; i < 12; i+=4)
{
transforms[i+0] *= ent->v->scale;
transforms[i+1] *= ent->v->scale;
transforms[i+2] *= ent->v->scale;
transforms[i+3] *= ent->v->scale;
}
}
R_ConcatRotationsPad((void*)transforms, (void*)src, (void*)dest); R_ConcatRotationsPad((void*)transforms, (void*)src, (void*)dest);
VectorCopy(dest+0, csqcg.forward); VectorCopy(dest+0, csqcg.forward);
@ -3296,7 +3378,7 @@ PF_cs_setlistener, // #351 void(vector origin, vector forward, vector right,
PF_cs_registercommand, // #352 void(string cmdname) registercommand (EXT_CSQC) PF_cs_registercommand, // #352 void(string cmdname) registercommand (EXT_CSQC)
PF_WasFreed, // #353 float(entity ent) wasfreed (EXT_CSQC) (should be availabe on server too) PF_WasFreed, // #353 float(entity ent) wasfreed (EXT_CSQC) (should be availabe on server too)
PF_Fixme, // #354 PF_cs_serverkey, // #354 string(string key) serverkey;
PF_Fixme, // #355 PF_Fixme, // #355
PF_Fixme, // #356 PF_Fixme, // #356
PF_Fixme, // #357 PF_Fixme, // #357
@ -3535,7 +3617,6 @@ int CSQC_PRFileSize (char *path)
} }
return com_filesize; return com_filesize;
} }
return COM_FileSize(path); return COM_FileSize(path);
@ -3676,6 +3757,8 @@ qboolean CSQC_DrawView(void)
r_secondaryview = 0; r_secondaryview = 0;
CL_CalcClientTime();
DropPunchAngle (0); DropPunchAngle (0);
if (cl.worldmodel) if (cl.worldmodel)
R_LessenStains(); R_LessenStains();
@ -3837,6 +3920,9 @@ void CSQC_ParseEntities(void)
if (csqcg.time) if (csqcg.time)
*csqcg.time = Sys_DoubleTime(); *csqcg.time = Sys_DoubleTime();
if (csqcg.clientcommandframe)
*csqcg.clientcommandframe = cls.netchan.outgoing_sequence;
if (csqcg.servercommandframe) if (csqcg.servercommandframe)
*csqcg.servercommandframe = cls.netchan.incoming_sequence; *csqcg.servercommandframe = cls.netchan.incoming_sequence;