some bugfixes
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@867 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
d29d5e71e6
commit
95eafd7427
30 changed files with 673 additions and 382 deletions
|
@ -509,23 +509,21 @@ sw-rel:
|
||||||
sw-dbg:
|
sw-dbg:
|
||||||
$(MAKE) sw-tmp TYPE=_clsv-dbg OUT_DIR="$(DEBUG_DIR)/$(SWB_DIR)"
|
$(MAKE) sw-tmp TYPE=_clsv-dbg OUT_DIR="$(DEBUG_DIR)/$(SWB_DIR)"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mcl-tmp:
|
mcl-tmp:
|
||||||
$(MAKE) $(TYPE) OUT_DIR="$(OUT_DIR)" EXE_NAME="$(MCL_EXE_NAME)" WCFLAGS="$(M_CFLAGS)" LDFLAGS="$(M_LDFLAGS)" SOBJS="$(MCL_OBJS)"
|
$(MAKE) $(TYPE) OUT_DIR="$(OUT_DIR)" EXE_NAME="$(MCL_EXE_NAME)" WCFLAGS="$(M_CFLAGS)" LDFLAGS="$(M_LDFLAGS)" SOBJS="$(MCL_OBJS)"
|
||||||
|
m-tmp:
|
||||||
|
$(MAKE) $(TYPE) OUT_DIR="$(OUT_DIR)" EXE_NAME="$(M_EXE_NAME)" WCFLAGS="$(M_CFLAGS)" LDFLAGS="$(M_LDFLAGS)" SOBJS="$(MCL_OBJS)"
|
||||||
|
|
||||||
mcl-rel:
|
mcl-rel:
|
||||||
$(MAKE) mcl-tmp TYPE=_cl-rel OUT_DIR="$(RELEASE_DIR)/$(MCL_DIR)"
|
$(MAKE) mcl-tmp TYPE=_cl-rel OUT_DIR="$(RELEASE_DIR)/$(MCL_DIR)"
|
||||||
mcl-dbg:
|
mcl-dbg:
|
||||||
$(MAKE) mcl-tmp TYPE=_cl-dbg OUT_DIR="$(DEBUG_DIR)/$(MCL_DIR)"
|
$(MAKE) mcl-tmp TYPE=_cl-dbg OUT_DIR="$(DEBUG_DIR)/$(MCL_DIR)"
|
||||||
|
|
||||||
|
|
||||||
m-tmp:
|
|
||||||
$(MAKE) $(TYPE) OUT_DIR="$(OUT_DIR)" EXE_NAME="$(M_EXE_NAME)" WCFLAGS="$(M_CFLAGS)" LDFLAGS="$(M_LDFLAGS)" SOBJS="$(MCL_OBJS)"
|
|
||||||
m-rel:
|
m-rel:
|
||||||
$(MAKE) m-tmp TYPE=_clsv-rel OUT_DIR="$(RELEASE_DIR)/$(MCL_DIR)"
|
$(MAKE) m-tmp TYPE=_clsv-rel OUT_DIR="$(RELEASE_DIR)/$(MCL_DIR)"
|
||||||
m-dbg:
|
m-dbg:
|
||||||
$(MAKE) m-tmp TYPE=_clsv-dbg OUT_DIR="$(DEBUG_DIR)/$(MCL_DIR)"
|
$(MAKE) m-tmp TYPE=_clsv-dbg OUT_DIR="$(DEBUG_DIR)/$(MCL_DIR)"
|
||||||
|
|
||||||
|
.PHONY: m-tmp mcl-tmp sw-tmp swcl-tmp mingl-tmp glcl-tmp gl-tmp sv-tmp _clsv-dbg _clsv-rel _cl-dbg _cl-rel _out-rel _out-dbg
|
||||||
|
|
||||||
ifdef windir
|
ifdef windir
|
||||||
debugdir:
|
debugdir:
|
||||||
|
|
|
@ -667,7 +667,6 @@ void CL_Record_f (void)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ //automagically generate a name
|
{ //automagically generate a name
|
||||||
|
|
||||||
if (cl.spectator)
|
if (cl.spectator)
|
||||||
{ // FIXME: if tracking a player, use his name
|
{ // FIXME: if tracking a player, use his name
|
||||||
fname = va ("spec_%s_%s",
|
fname = va ("spec_%s_%s",
|
||||||
|
|
|
@ -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,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
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.
|
See the GNU General Public License for more details.
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ qboolean CL_FilterModelindex(int modelindex, int frame)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cl_gibfilter.value && (
|
if (cl_gibfilter.value && (
|
||||||
modelindex == cl_h_playerindex ||
|
modelindex == cl_h_playerindex ||
|
||||||
modelindex == cl_gib1index ||
|
modelindex == cl_gib1index ||
|
||||||
modelindex == cl_gib2index ||
|
modelindex == cl_gib2index ||
|
||||||
modelindex == cl_gib3index))
|
modelindex == cl_gib3index))
|
||||||
|
@ -204,28 +204,28 @@ void CL_DecayLights (void)
|
||||||
dl->radius = 0;
|
dl->radius = 0;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl->radius -= host_frametime*dl->decay;
|
dl->radius -= host_frametime*dl->decay;
|
||||||
if (dl->radius < 0)
|
if (dl->radius < 0)
|
||||||
dl->radius = 0;
|
dl->radius = 0;
|
||||||
|
|
||||||
if (dl->channelfade[0])
|
if (dl->channelfade[0])
|
||||||
{
|
{
|
||||||
dl->color[0] -= host_frametime*dl->channelfade[0];
|
dl->color[0] -= host_frametime*dl->channelfade[0];
|
||||||
if (dl->color[0] < 0)
|
if (dl->color[0] < 0)
|
||||||
dl->color[0] = 0;
|
dl->color[0] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dl->channelfade[1])
|
if (dl->channelfade[1])
|
||||||
{
|
{
|
||||||
dl->color[1] -= host_frametime*dl->channelfade[1];
|
dl->color[1] -= host_frametime*dl->channelfade[1];
|
||||||
if (dl->color[1] < 0)
|
if (dl->color[1] < 0)
|
||||||
dl->color[1] = 0;
|
dl->color[1] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dl->channelfade[2])
|
if (dl->channelfade[2])
|
||||||
{
|
{
|
||||||
dl->color[2] -= host_frametime*dl->channelfade[2];
|
dl->color[2] -= host_frametime*dl->channelfade[2];
|
||||||
if (dl->color[2] < 0)
|
if (dl->color[2] < 0)
|
||||||
dl->color[2] = 0;
|
dl->color[2] = 0;
|
||||||
}
|
}
|
||||||
|
@ -305,19 +305,19 @@ void CL_ParseDelta (entity_state_t *from, entity_state_t *to, int bits, qboolean
|
||||||
|
|
||||||
if (bits & U_ORIGIN1)
|
if (bits & U_ORIGIN1)
|
||||||
to->origin[0] = MSG_ReadCoord ();
|
to->origin[0] = MSG_ReadCoord ();
|
||||||
|
|
||||||
if (bits & U_ANGLE1)
|
if (bits & U_ANGLE1)
|
||||||
to->angles[0] = MSG_ReadAngle ();
|
to->angles[0] = MSG_ReadAngle ();
|
||||||
|
|
||||||
if (bits & U_ORIGIN2)
|
if (bits & U_ORIGIN2)
|
||||||
to->origin[1] = MSG_ReadCoord ();
|
to->origin[1] = MSG_ReadCoord ();
|
||||||
|
|
||||||
if (bits & U_ANGLE2)
|
if (bits & U_ANGLE2)
|
||||||
to->angles[1] = MSG_ReadAngle ();
|
to->angles[1] = MSG_ReadAngle ();
|
||||||
|
|
||||||
if (bits & U_ORIGIN3)
|
if (bits & U_ORIGIN3)
|
||||||
to->origin[2] = MSG_ReadCoord ();
|
to->origin[2] = MSG_ReadCoord ();
|
||||||
|
|
||||||
if (bits & U_ANGLE3)
|
if (bits & U_ANGLE3)
|
||||||
to->angles[2] = MSG_ReadAngle ();
|
to->angles[2] = MSG_ReadAngle ();
|
||||||
|
|
||||||
|
@ -541,7 +541,7 @@ void CL_ParsePacketEntities (qboolean delta)
|
||||||
newnum += 512;
|
newnum += 512;
|
||||||
if (excessive & U_ENTITYDBL2)
|
if (excessive & U_ENTITYDBL2)
|
||||||
newnum += 1024;
|
newnum += 1024;
|
||||||
}
|
}
|
||||||
|
|
||||||
msg_readcount = oldpos;//undo the read...
|
msg_readcount = oldpos;//undo the read...
|
||||||
}
|
}
|
||||||
|
@ -677,7 +677,7 @@ entity_state_t *CL_FindOldPacketEntity(int num)
|
||||||
// byte = bound(0, s->scale * 16, 255)
|
// byte = bound(0, s->scale * 16, 255)
|
||||||
#define E5_SCALE (1<<10)
|
#define E5_SCALE (1<<10)
|
||||||
// flag
|
// flag
|
||||||
#define E5_ORIGIN32 (1<<11)
|
#define E5_ORIGIN32 (1<<11)
|
||||||
// flag
|
// flag
|
||||||
#define E5_ANGLES16 (1<<12)
|
#define E5_ANGLES16 (1<<12)
|
||||||
// flag
|
// flag
|
||||||
|
@ -766,9 +766,9 @@ void DP5_ParseDelta(entity_state_t *s)
|
||||||
{
|
{
|
||||||
if (bits & E5_ANGLES16)
|
if (bits & E5_ANGLES16)
|
||||||
{
|
{
|
||||||
s->angles[0] = MSG_ReadAngle16();
|
s->angles[0] = MSG_ReadAngle16();
|
||||||
s->angles[1] = MSG_ReadAngle16();
|
s->angles[1] = MSG_ReadAngle16();
|
||||||
s->angles[2] = MSG_ReadAngle16();
|
s->angles[2] = MSG_ReadAngle16();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -848,7 +848,7 @@ void CLNQ_ParseDarkPlaces5Entities(void) //the things I do.. :o(
|
||||||
|
|
||||||
packet_entities_t *pack, *oldpack;
|
packet_entities_t *pack, *oldpack;
|
||||||
|
|
||||||
entity_state_t *to, *from;
|
entity_state_t *to, *from;
|
||||||
unsigned short read;
|
unsigned short read;
|
||||||
int oldi;
|
int oldi;
|
||||||
qboolean remove;
|
qboolean remove;
|
||||||
|
@ -967,7 +967,7 @@ void CLNQ_ParseEntity(unsigned int bits)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int num, pnum;
|
int num, pnum;
|
||||||
entity_state_t *state, *from;
|
entity_state_t *state, *from;
|
||||||
entity_state_t *base;
|
entity_state_t *base;
|
||||||
static float lasttime;
|
static float lasttime;
|
||||||
packet_entities_t *pack;
|
packet_entities_t *pack;
|
||||||
|
@ -990,7 +990,7 @@ void CLNQ_ParseEntity(unsigned int bits)
|
||||||
#define NQU_EFFECTS (1<<13)
|
#define NQU_EFFECTS (1<<13)
|
||||||
#define NQU_LONGENTITY (1<<14)
|
#define NQU_LONGENTITY (1<<14)
|
||||||
|
|
||||||
|
|
||||||
// LordHavoc's: protocol extension
|
// LordHavoc's: protocol extension
|
||||||
#define DPU_EXTEND1 (1<<15)
|
#define DPU_EXTEND1 (1<<15)
|
||||||
// LordHavoc: first extend byte
|
// LordHavoc: first extend byte
|
||||||
|
@ -1018,8 +1018,8 @@ void CLNQ_ParseEntity(unsigned int bits)
|
||||||
{ // first update is the final signon stage
|
{ // first update is the final signon stage
|
||||||
cls.signon = 4;
|
cls.signon = 4;
|
||||||
CLNQ_SignonReply ();
|
CLNQ_SignonReply ();
|
||||||
}
|
}
|
||||||
pack = &cl.frames[cls.netchan.incoming_sequence&UPDATE_MASK].packet_entities;
|
pack = &cl.frames[cls.netchan.incoming_sequence&UPDATE_MASK].packet_entities;
|
||||||
|
|
||||||
|
|
||||||
if (bits & NQU_MOREBITS)
|
if (bits & NQU_MOREBITS)
|
||||||
|
@ -1038,7 +1038,7 @@ void CLNQ_ParseEntity(unsigned int bits)
|
||||||
bits |= (i<<24);
|
bits |= (i<<24);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bits & NQU_LONGENTITY)
|
if (bits & NQU_LONGENTITY)
|
||||||
num = MSG_ReadShort ();
|
num = MSG_ReadShort ();
|
||||||
else
|
else
|
||||||
num = MSG_ReadByte ();
|
num = MSG_ReadByte ();
|
||||||
|
@ -1064,7 +1064,7 @@ void CLNQ_ParseEntity(unsigned int bits)
|
||||||
|
|
||||||
state->number = num;
|
state->number = num;
|
||||||
|
|
||||||
if (bits & NQU_MODEL)
|
if (bits & NQU_MODEL)
|
||||||
state->modelindex = MSG_ReadByte ();
|
state->modelindex = MSG_ReadByte ();
|
||||||
else
|
else
|
||||||
state->modelindex = base->modelindex;
|
state->modelindex = base->modelindex;
|
||||||
|
@ -1186,7 +1186,7 @@ entity_state_t *CL_FindPacketEntity(int num)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void CL_RotateAroundTag(entity_t *ent, int num, int tagent)
|
void CL_RotateAroundTag(entity_t *ent, int num, int tagent, int tagnum)
|
||||||
{
|
{
|
||||||
entity_state_t *ps;
|
entity_state_t *ps;
|
||||||
float *org=NULL, *ang=NULL;
|
float *org=NULL, *ang=NULL;
|
||||||
|
@ -1199,6 +1199,11 @@ void CL_RotateAroundTag(entity_t *ent, int num, int tagent)
|
||||||
float *tagorg=NULL;
|
float *tagorg=NULL;
|
||||||
float *tagaxis;
|
float *tagaxis;
|
||||||
|
|
||||||
|
// ent->keynum = tagent;
|
||||||
|
|
||||||
|
if (cl.lerpents[tagent].tagent)
|
||||||
|
CL_RotateAroundTag(ent, num, cl.lerpents[tagent].tagent, cl.lerpents[tagent].tagindex);
|
||||||
|
|
||||||
ps = CL_FindPacketEntity(tagent);
|
ps = CL_FindPacketEntity(tagent);
|
||||||
if (ps)
|
if (ps)
|
||||||
{
|
{
|
||||||
|
@ -1210,6 +1215,7 @@ void CL_RotateAroundTag(entity_t *ent, int num, int tagent)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
extern int parsecountmod;
|
extern int parsecountmod;
|
||||||
|
// Con_Printf("tagent %i\n", tagent);
|
||||||
if (tagent <= MAX_CLIENTS && tagent > 0)
|
if (tagent <= MAX_CLIENTS && tagent > 0)
|
||||||
{
|
{
|
||||||
if (tagent-1 == cl.playernum[0])
|
if (tagent-1 == cl.playernum[0])
|
||||||
|
@ -1233,27 +1239,22 @@ void CL_RotateAroundTag(entity_t *ent, int num, int tagent)
|
||||||
VectorInverse(axis[1]);
|
VectorInverse(axis[1]);
|
||||||
|
|
||||||
if (Mod_GetTag)
|
if (Mod_GetTag)
|
||||||
Mod_GetTag(cl.model_precache[model], cl.lerpents[tagent].tagindex, frame, &tagorg, &tagaxis);
|
Mod_GetTag(cl.model_precache[model], tagnum, frame, &tagorg, &tagaxis);
|
||||||
else
|
else
|
||||||
tagaxis = NULL;
|
tagaxis = NULL;
|
||||||
if (tagaxis)
|
if (tagaxis)
|
||||||
{
|
{
|
||||||
Matrix3_Multiply(ent->axis, (void*)tagaxis, temp);
|
// Con_Printf("Found tag %i\n", cl.lerpents[tagent].tagindex);
|
||||||
|
R_ConcatRotations(ent->axis, (void*)tagaxis, temp);
|
||||||
}
|
}
|
||||||
else //hrm.
|
else //hrm.
|
||||||
|
{
|
||||||
memcpy(temp, ent->axis, sizeof(temp));
|
memcpy(temp, ent->axis, sizeof(temp));
|
||||||
Matrix3_Multiply(axis, temp, ent->axis);
|
}
|
||||||
|
R_ConcatRotations(axis, temp, ent->axis);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (org)
|
if (org)
|
||||||
VectorAdd(ent->origin, org, ent->origin);
|
VectorAdd(ent->origin, org, ent->origin);
|
||||||
if (tagorg)
|
|
||||||
VectorAdd(ent->origin, tagorg, ent->origin);
|
|
||||||
|
|
||||||
ent->keynum = tagent;
|
|
||||||
|
|
||||||
if (cl.lerpents[tagent].tagent)
|
|
||||||
CL_RotateAroundTag(ent, num, cl.lerpents[tagent].tagent);
|
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
===============
|
===============
|
||||||
|
@ -1336,7 +1337,7 @@ void CL_LinkPacketEntities (void)
|
||||||
ent->flags = 0;
|
ent->flags = 0;
|
||||||
|
|
||||||
// set colormap
|
// set colormap
|
||||||
if (s1->colormap && (s1->colormap <= MAX_CLIENTS)
|
if (s1->colormap && (s1->colormap <= MAX_CLIENTS)
|
||||||
&& (gl_nocolors.value == -1 || (ent->model/* && s1->modelindex == cl_playerindex*/)))
|
&& (gl_nocolors.value == -1 || (ent->model/* && s1->modelindex == cl_playerindex*/)))
|
||||||
{
|
{
|
||||||
ent->colormap = cl.players[s1->colormap-1].translations;
|
ent->colormap = cl.players[s1->colormap-1].translations;
|
||||||
|
@ -1366,7 +1367,7 @@ void CL_LinkPacketEntities (void)
|
||||||
{
|
{
|
||||||
ent->lerptime = 1-(cl.time-cl.lerpents[s1->number].lerptime)/cl.lerpents[s1->number].lerprate;
|
ent->lerptime = 1-(cl.time-cl.lerpents[s1->number].lerptime)/cl.lerpents[s1->number].lerprate;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ent->lerptime<0)ent->lerptime=0;
|
if (ent->lerptime<0)ent->lerptime=0;
|
||||||
if (ent->lerptime>1)ent->lerptime=1;
|
if (ent->lerptime>1)ent->lerptime=1;
|
||||||
|
|
||||||
|
@ -1393,7 +1394,7 @@ void CL_LinkPacketEntities (void)
|
||||||
|
|
||||||
// calculate origin
|
// calculate origin
|
||||||
for (i=0 ; i<3 ; i++)
|
for (i=0 ; i<3 ; i++)
|
||||||
ent->origin[i] = s1->origin[i] +
|
ent->origin[i] = s1->origin[i] +
|
||||||
f * (cl.lerpents[s1->number].origin[i] - s1->origin[i]);
|
f * (cl.lerpents[s1->number].origin[i] - s1->origin[i]);
|
||||||
|
|
||||||
// rotate binary objects locally
|
// rotate binary objects locally
|
||||||
|
@ -1430,7 +1431,7 @@ void CL_LinkPacketEntities (void)
|
||||||
|
|
||||||
if (cl.lerpents[s1->number].tagent)
|
if (cl.lerpents[s1->number].tagent)
|
||||||
{ //ent is attached to a tag, rotate this ent accordingly.
|
{ //ent is attached to a tag, rotate this ent accordingly.
|
||||||
CL_RotateAroundTag(ent, s1->number, cl.lerpents[s1->number].tagent);
|
CL_RotateAroundTag(ent, s1->number, cl.lerpents[s1->number].tagent, cl.lerpents[s1->number].tagindex);
|
||||||
}
|
}
|
||||||
|
|
||||||
// add automatic particle trails
|
// add automatic particle trails
|
||||||
|
@ -1962,14 +1963,14 @@ void CL_AddFlagModels (entity_t *ent, int team)
|
||||||
f = 14;
|
f = 14;
|
||||||
if (ent->frame >= 29 && ent->frame <= 40) {
|
if (ent->frame >= 29 && ent->frame <= 40) {
|
||||||
if (ent->frame >= 29 && ent->frame <= 34) { //axpain
|
if (ent->frame >= 29 && ent->frame <= 34) { //axpain
|
||||||
if (ent->frame == 29) f = f + 2;
|
if (ent->frame == 29) f = f + 2;
|
||||||
else if (ent->frame == 30) f = f + 8;
|
else if (ent->frame == 30) f = f + 8;
|
||||||
else if (ent->frame == 31) f = f + 12;
|
else if (ent->frame == 31) f = f + 12;
|
||||||
else if (ent->frame == 32) f = f + 11;
|
else if (ent->frame == 32) f = f + 11;
|
||||||
else if (ent->frame == 33) f = f + 10;
|
else if (ent->frame == 33) f = f + 10;
|
||||||
else if (ent->frame == 34) f = f + 4;
|
else if (ent->frame == 34) f = f + 4;
|
||||||
} else if (ent->frame >= 35 && ent->frame <= 40) { // pain
|
} else if (ent->frame >= 35 && ent->frame <= 40) { // pain
|
||||||
if (ent->frame == 35) f = f + 2;
|
if (ent->frame == 35) f = f + 2;
|
||||||
else if (ent->frame == 36) f = f + 10;
|
else if (ent->frame == 36) f = f + 10;
|
||||||
else if (ent->frame == 37) f = f + 10;
|
else if (ent->frame == 37) f = f + 10;
|
||||||
else if (ent->frame == 38) f = f + 8;
|
else if (ent->frame == 38) f = f + 8;
|
||||||
|
@ -1978,7 +1979,7 @@ void CL_AddFlagModels (entity_t *ent, int team)
|
||||||
}
|
}
|
||||||
} else if (ent->frame >= 103 && ent->frame <= 118) {
|
} else if (ent->frame >= 103 && ent->frame <= 118) {
|
||||||
if (ent->frame >= 103 && ent->frame <= 104) f = f + 6; //nailattack
|
if (ent->frame >= 103 && ent->frame <= 104) f = f + 6; //nailattack
|
||||||
else if (ent->frame >= 105 && ent->frame <= 106) f = f + 6; //light
|
else if (ent->frame >= 105 && ent->frame <= 106) f = f + 6; //light
|
||||||
else if (ent->frame >= 107 && ent->frame <= 112) f = f + 7; //rocketattack
|
else if (ent->frame >= 107 && ent->frame <= 112) f = f + 7; //rocketattack
|
||||||
else if (ent->frame >= 112 && ent->frame <= 118) f = f + 7; //shotattack
|
else if (ent->frame >= 112 && ent->frame <= 118) f = f + 7; //shotattack
|
||||||
}
|
}
|
||||||
|
@ -2057,7 +2058,7 @@ void CL_LinkPlayers (void)
|
||||||
|
|
||||||
frame = &cl.frames[cl.parsecount&UPDATE_MASK];
|
frame = &cl.frames[cl.parsecount&UPDATE_MASK];
|
||||||
|
|
||||||
for (j=0, info=cl.players, state=frame->playerstate ; j < MAX_CLIENTS
|
for (j=0, info=cl.players, state=frame->playerstate ; j < MAX_CLIENTS
|
||||||
; j++, info++, state++)
|
; j++, info++, state++)
|
||||||
{
|
{
|
||||||
if (state->messagenum != cl.parsecount)
|
if (state->messagenum != cl.parsecount)
|
||||||
|
@ -2096,7 +2097,7 @@ void CL_LinkPlayers (void)
|
||||||
ent->flags = 0;
|
ent->flags = 0;
|
||||||
|
|
||||||
ent->model = cl.model_precache[state->modelindex];
|
ent->model = cl.model_precache[state->modelindex];
|
||||||
ent->skinnum = state->skinnum;
|
ent->skinnum = state->skinnum;
|
||||||
|
|
||||||
ent->frame = state->frame;
|
ent->frame = state->frame;
|
||||||
ent->oldframe = state->oldframe;
|
ent->oldframe = state->oldframe;
|
||||||
|
@ -2230,7 +2231,7 @@ void CL_SetSolidEntities (void)
|
||||||
if (!cl.model_precache[state->modelindex])
|
if (!cl.model_precache[state->modelindex])
|
||||||
continue;
|
continue;
|
||||||
if (*cl.model_precache[state->modelindex]->name == '*' || cl.model_precache[state->modelindex]->numsubmodels)
|
if (*cl.model_precache[state->modelindex]->name == '*' || cl.model_precache[state->modelindex]->numsubmodels)
|
||||||
if ( cl.model_precache[state->modelindex]->hulls[1].firstclipnode
|
if ( cl.model_precache[state->modelindex]->hulls[1].firstclipnode
|
||||||
|| cl.model_precache[state->modelindex]->clipbox )
|
|| cl.model_precache[state->modelindex]->clipbox )
|
||||||
{
|
{
|
||||||
pmove.physents[pmove.numphysent].model = cl.model_precache[state->modelindex];
|
pmove.physents[pmove.numphysent].model = cl.model_precache[state->modelindex];
|
||||||
|
@ -2274,7 +2275,7 @@ void CL_SetUpPlayerPrediction(qboolean dopred)
|
||||||
|
|
||||||
frame = &cl.frames[cl.parsecount&UPDATE_MASK];
|
frame = &cl.frames[cl.parsecount&UPDATE_MASK];
|
||||||
|
|
||||||
for (j=0, pplayer = predicted_players, state=frame->playerstate;
|
for (j=0, pplayer = predicted_players, state=frame->playerstate;
|
||||||
j < MAX_CLIENTS;
|
j < MAX_CLIENTS;
|
||||||
j++, pplayer++, state++)
|
j++, pplayer++, state++)
|
||||||
{
|
{
|
||||||
|
@ -2336,7 +2337,7 @@ void CL_SetUpPlayerPrediction(qboolean dopred)
|
||||||
{
|
{
|
||||||
if (!Cam_DrawPlayer(0, j))
|
if (!Cam_DrawPlayer(0, j))
|
||||||
VectorCopy(pplayer->origin, cl.simorg[0]);
|
VectorCopy(pplayer->origin, cl.simorg[0]);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2458,7 +2459,7 @@ void MVD_Interpolate(void)
|
||||||
VectorCopy(oldself->velocity, self->velocity);
|
VectorCopy(oldself->velocity, self->velocity);
|
||||||
VectorCopy(oldself->viewangles, self->viewangles);
|
VectorCopy(oldself->viewangles, self->viewangles);
|
||||||
|
|
||||||
|
|
||||||
cls.netchan.outgoing_sequence = cl.parsecount+1;
|
cls.netchan.outgoing_sequence = cl.parsecount+1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -616,6 +616,9 @@ void CL_UpdatePrydonCursor(float cursor_screen[2], vec3_t cursor_start, vec3_t c
|
||||||
ML_ModelViewMatrix(modelview, cl.viewangles[0], cl.simorg[0]);
|
ML_ModelViewMatrix(modelview, cl.viewangles[0], cl.simorg[0]);
|
||||||
Matrix4_Transform3(modelview, temp, cursor_end);
|
Matrix4_Transform3(modelview, temp, cursor_end);
|
||||||
|
|
||||||
|
CL_SetSolidEntities();
|
||||||
|
//don't bother with players, they don't exist in NQ...
|
||||||
|
|
||||||
tr = PM_PlayerTrace(cursor_start, cursor_end);
|
tr = PM_PlayerTrace(cursor_start, cursor_end);
|
||||||
VectorCopy(tr.endpos, cursor_impact);
|
VectorCopy(tr.endpos, cursor_impact);
|
||||||
// CL_SelectTraceLine(cursor_start, cursor_end, cursor_impact, entnum);
|
// CL_SelectTraceLine(cursor_start, cursor_end, cursor_impact, entnum);
|
||||||
|
|
|
@ -2820,6 +2820,7 @@ Host_Init
|
||||||
*/
|
*/
|
||||||
void Host_Init (quakeparms_t *parms)
|
void Host_Init (quakeparms_t *parms)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
int qrc, hrc, def;
|
int qrc, hrc, def;
|
||||||
|
|
||||||
extern cvar_t vid_renderer;
|
extern cvar_t vid_renderer;
|
||||||
|
@ -2907,9 +2908,10 @@ void Host_Init (quakeparms_t *parms)
|
||||||
|
|
||||||
Cbuf_AddText ("+mlook\n", RESTRICT_LOCAL); //fixme: this is bulky, only exec one of these.
|
Cbuf_AddText ("+mlook\n", RESTRICT_LOCAL); //fixme: this is bulky, only exec one of these.
|
||||||
|
|
||||||
qrc = COM_FDepthFile("quake.rc", true);
|
//who should we imitate?
|
||||||
hrc = COM_FDepthFile("hexen.rc", true);
|
qrc = COM_FDepthFile("quake.rc", true); //q1
|
||||||
def = COM_FDepthFile("default.cfg", true);
|
hrc = COM_FDepthFile("hexen.rc", true); //h2
|
||||||
|
def = COM_FDepthFile("default.cfg", true); //q2/q3
|
||||||
|
|
||||||
if (qrc >= def && qrc >= hrc && qrc!=0x7fffffff)
|
if (qrc >= def && qrc >= hrc && qrc!=0x7fffffff)
|
||||||
Cbuf_AddText ("exec quake.rc\n", RESTRICT_LOCAL);
|
Cbuf_AddText ("exec quake.rc\n", RESTRICT_LOCAL);
|
||||||
|
@ -2935,15 +2937,34 @@ void Host_Init (quakeparms_t *parms)
|
||||||
|
|
||||||
Cbuf_Execute (); //if the server initialisation causes a problem, give it a place to abort to
|
Cbuf_Execute (); //if the server initialisation causes a problem, give it a place to abort to
|
||||||
|
|
||||||
#ifndef NOMEDIA
|
//assuming they didn't use any waits in thier config (fools)
|
||||||
if (!cls.demofile && !cls.state && !media_filmtype)
|
//the configs should be fully loaded.
|
||||||
|
//so convert the backwards compable commandline parameters in cvar sets.
|
||||||
|
|
||||||
|
if (COM_CheckParm ("-window") || COM_CheckParm ("-startwindowed"))
|
||||||
|
Cvar_Set(Cvar_FindVar("vid_fullscreen"), "0");
|
||||||
|
if (COM_CheckParm ("-fullscreen"))
|
||||||
|
Cvar_Set(Cvar_FindVar("vid_fullscreen"), "1");
|
||||||
|
|
||||||
|
if ((i = COM_CheckParm ("-width"))) //width on it's own also sets height
|
||||||
{
|
{
|
||||||
if (COM_FDepthFile("video/idlogo.roq", true) > COM_FDepthFile("video/idlog.cin", true))
|
Cvar_Set(Cvar_FindVar("vid_width"), com_argv[i+1]);
|
||||||
Media_PlayFilm("video/idlog.cin");
|
Cvar_SetValue(Cvar_FindVar("vid_height"), (atoi(com_argv[i+1])/3)*4);
|
||||||
else
|
|
||||||
Media_PlayFilm("video/idlogo.roq");
|
|
||||||
}
|
}
|
||||||
#endif
|
if ((i = COM_CheckParm ("-height")))
|
||||||
|
Cvar_Set(Cvar_FindVar("vid_height"), com_argv[i+1]);
|
||||||
|
|
||||||
|
if ((i = COM_CheckParm ("-conwidth"))) //width on it's own also sets height
|
||||||
|
{
|
||||||
|
Cvar_Set(Cvar_FindVar("vid_conwidth"), com_argv[i+1]);
|
||||||
|
Cvar_SetValue(Cvar_FindVar("vid_conheight"), (atoi(com_argv[i+1])/3)*4);
|
||||||
|
}
|
||||||
|
if ((i = COM_CheckParm ("-conheight")))
|
||||||
|
Cvar_Set(Cvar_FindVar("vid_conheight"), com_argv[i+1]);
|
||||||
|
|
||||||
|
if ((i = COM_CheckParm ("-bpp")))
|
||||||
|
Cvar_Set(Cvar_FindVar("vid_bpp"), com_argv[i+1]);
|
||||||
|
|
||||||
if (!qrenderer && *vid_renderer.string)
|
if (!qrenderer && *vid_renderer.string)
|
||||||
{
|
{
|
||||||
Cmd_ExecuteString("vid_restart\n", RESTRICT_LOCAL);
|
Cmd_ExecuteString("vid_restart\n", RESTRICT_LOCAL);
|
||||||
|
@ -2956,6 +2977,15 @@ void Host_Init (quakeparms_t *parms)
|
||||||
|
|
||||||
UI_Init();
|
UI_Init();
|
||||||
|
|
||||||
|
#ifndef NOMEDIA
|
||||||
|
if (!cls.demofile && !cls.state && !media_filmtype)
|
||||||
|
{
|
||||||
|
if (COM_FDepthFile("video/idlogo.roq", true) > COM_FDepthFile("video/idlog.cin", true))
|
||||||
|
Media_PlayFilm("video/idlog.cin");
|
||||||
|
else
|
||||||
|
Media_PlayFilm("video/idlogo.roq");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
Con_TPrintf (TL_NL);
|
Con_TPrintf (TL_NL);
|
||||||
#ifdef VERSION3PART
|
#ifdef VERSION3PART
|
||||||
|
|
|
@ -791,6 +791,8 @@ void Model_NextDownload (void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Hunk_Check();
|
||||||
|
|
||||||
cls.downloadtype = dl_model;
|
cls.downloadtype = dl_model;
|
||||||
|
|
||||||
for (
|
for (
|
||||||
|
@ -816,6 +818,8 @@ void Model_NextDownload (void)
|
||||||
if (CL_CheckMD2Skins(s))
|
if (CL_CheckMD2Skins(s))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Hunk_Check();
|
||||||
|
|
||||||
if (cl.playernum[0] == -1)
|
if (cl.playernum[0] == -1)
|
||||||
{ //q2 cinematic - don't load the models.
|
{ //q2 cinematic - don't load the models.
|
||||||
|
@ -827,9 +831,13 @@ void Model_NextDownload (void)
|
||||||
{
|
{
|
||||||
if (!cl.model_name[i][0])
|
if (!cl.model_name[i][0])
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Hunk_Check();
|
||||||
|
|
||||||
cl.model_precache[i] = NULL;
|
cl.model_precache[i] = NULL;
|
||||||
cl.model_precache[i] = Mod_ForName (cl.model_name[i], false);
|
cl.model_precache[i] = Mod_ForName (cl.model_name[i], false);
|
||||||
|
|
||||||
|
Hunk_Check();
|
||||||
|
|
||||||
if (!cl.model_precache[i] || (i == 1 && (cl.model_precache[i]->type == mod_dummy || cl.model_precache[i]->needload)))
|
if (!cl.model_precache[i] || (i == 1 && (cl.model_precache[i]->type == mod_dummy || cl.model_precache[i]->needload)))
|
||||||
{
|
{
|
||||||
|
|
|
@ -126,7 +126,8 @@ typedef struct
|
||||||
} q2player_state_t;
|
} q2player_state_t;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define MAX_SCOREBOARDNAME 16
|
#define MAX_SCOREBOARDNAME 64
|
||||||
|
#define MAX_DISPLAYEDNAME 16
|
||||||
typedef struct player_info_s
|
typedef struct player_info_s
|
||||||
{
|
{
|
||||||
int userid;
|
int userid;
|
||||||
|
|
|
@ -612,7 +612,7 @@ void CSQC_Init (void)
|
||||||
|
|
||||||
CSQC_InitFields(); //let the qclib know the field order that the engine needs.
|
CSQC_InitFields(); //let the qclib know the field order that the engine needs.
|
||||||
|
|
||||||
if (PR_LoadProgs(csqcprogs, "qwprogs.dat", 0, NULL, 0) < 0) //no per-progs builtins.
|
if (PR_LoadProgs(csqcprogs, "csprogs.dat", 0, NULL, 0) < 0) //no per-progs builtins.
|
||||||
{
|
{
|
||||||
//failed to load or something
|
//failed to load or something
|
||||||
return;
|
return;
|
||||||
|
@ -637,7 +637,7 @@ void CSQC_Init (void)
|
||||||
|
|
||||||
qboolean CSQC_DrawView(void)
|
qboolean CSQC_DrawView(void)
|
||||||
{
|
{
|
||||||
if (!csqc_draw_function)
|
if (!csqc_draw_function || !csqcprogs)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
PR_ExecuteProgram(csqcprogs, csqc_draw_function);
|
PR_ExecuteProgram(csqcprogs, csqc_draw_function);
|
||||||
|
|
|
@ -256,7 +256,6 @@ void R_StoreEfrags (efrag_t **ppefrag)
|
||||||
entity_t *pent;
|
entity_t *pent;
|
||||||
model_t *clmodel;
|
model_t *clmodel;
|
||||||
efrag_t *pefrag;
|
efrag_t *pefrag;
|
||||||
return;
|
|
||||||
|
|
||||||
while ((pefrag = *ppefrag) != NULL)
|
while ((pefrag = *ppefrag) != NULL)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1381,6 +1381,8 @@ qboolean R_ApplyRenderer (rendererstate_t *newr)
|
||||||
|
|
||||||
COM_FlushTempoaryPacks();
|
COM_FlushTempoaryPacks();
|
||||||
|
|
||||||
|
S_Shutdown();
|
||||||
|
|
||||||
if (qrenderer == QR_NONE || qrenderer==-1)
|
if (qrenderer == QR_NONE || qrenderer==-1)
|
||||||
{
|
{
|
||||||
if (newr->renderer == QR_NONE && qrenderer != -1)
|
if (newr->renderer == QR_NONE && qrenderer != -1)
|
||||||
|
@ -1684,6 +1686,9 @@ TRACE(("dbg: R_ApplyRenderer: efrags\n"));
|
||||||
"OpenGL renderer initialized\n");
|
"OpenGL renderer initialized\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!isDedicated)
|
||||||
|
S_Restart_f();
|
||||||
|
|
||||||
memcpy(¤trendererstate, newr, sizeof(currentrendererstate));
|
memcpy(¤trendererstate, newr, sizeof(currentrendererstate));
|
||||||
return true;
|
return true;
|
||||||
|
@ -1713,6 +1718,7 @@ TRACE(("dbg: R_RestartRenderer_f\n"));
|
||||||
newr.fullscreen = vid_fullscreen.value;
|
newr.fullscreen = vid_fullscreen.value;
|
||||||
newr.rate = vid_refreshrate.value;
|
newr.rate = vid_refreshrate.value;
|
||||||
Q_strncpyz(newr.glrenderer, gl_driver.string, sizeof(newr.glrenderer));
|
Q_strncpyz(newr.glrenderer, gl_driver.string, sizeof(newr.glrenderer));
|
||||||
|
|
||||||
if (!*vid_renderer.string)
|
if (!*vid_renderer.string)
|
||||||
{
|
{
|
||||||
//gotta do this after main hunk is saved off.
|
//gotta do this after main hunk is saved off.
|
||||||
|
|
|
@ -175,6 +175,75 @@ void Draw_FunString(int x, int y, char *str)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Draw_FunStringLen(int x, int y, char *str, int len)
|
||||||
|
{
|
||||||
|
int ext = COLOR_WHITE<<8;
|
||||||
|
int extstack[4];
|
||||||
|
int extstackdepth = 0;
|
||||||
|
|
||||||
|
|
||||||
|
while(*str)
|
||||||
|
{
|
||||||
|
if (*str == '^')
|
||||||
|
{
|
||||||
|
str++;
|
||||||
|
if (*str >= '0' && *str <= '7')
|
||||||
|
{
|
||||||
|
ext = (*str++-'0')*256 + (ext&~CON_COLOURMASK); //change colour only.
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if (*str == 'a')
|
||||||
|
{
|
||||||
|
str++;
|
||||||
|
ext = (ext & ~CON_2NDCHARSETTEXT) + (CON_2NDCHARSETTEXT - (ext & CON_2NDCHARSETTEXT));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if (*str == 'b')
|
||||||
|
{
|
||||||
|
str++;
|
||||||
|
ext = (ext & ~CON_BLINKTEXT) + (CON_BLINKTEXT - (ext & CON_BLINKTEXT));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if (*str == 's') //store on stack (it's great for names)
|
||||||
|
{
|
||||||
|
str++;
|
||||||
|
if (extstackdepth < sizeof(extstack)/sizeof(extstack[0]))
|
||||||
|
{
|
||||||
|
extstack[extstackdepth] = ext;
|
||||||
|
extstackdepth++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (*str == 'r') //restore from stack (it's great for names)
|
||||||
|
{
|
||||||
|
str++;
|
||||||
|
if (extstackdepth)
|
||||||
|
{
|
||||||
|
extstackdepth--;
|
||||||
|
ext = extstack[extstackdepth];
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if (*str == '^')
|
||||||
|
{
|
||||||
|
Draw_ColouredCharacter(x, y, '^' + ext);
|
||||||
|
str++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Draw_ColouredCharacter(x, y, '^' + ext);
|
||||||
|
x += 8;
|
||||||
|
Draw_ColouredCharacter (x, y, (*str++) + ext);
|
||||||
|
}
|
||||||
|
x += 8;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
Draw_ColouredCharacter (x, y, (*str++) + ext);
|
||||||
|
x += 8;
|
||||||
|
if (--len< 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static qboolean largegame = false;
|
static qboolean largegame = false;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1813,7 +1882,7 @@ void Sbar_DeathmatchOverlay (int start)
|
||||||
int total;
|
int total;
|
||||||
int minutes;
|
int minutes;
|
||||||
int p;
|
int p;
|
||||||
char team[5];
|
char team[64];
|
||||||
int skip = 10;
|
int skip = 10;
|
||||||
|
|
||||||
if (largegame)
|
if (largegame)
|
||||||
|
@ -1884,7 +1953,7 @@ void Sbar_DeathmatchOverlay (int start)
|
||||||
if (p < 0 || p > 999)
|
if (p < 0 || p > 999)
|
||||||
p = 999;
|
p = 999;
|
||||||
sprintf (num, "%4i", p);
|
sprintf (num, "%4i", p);
|
||||||
Draw_String ( x, y, num);
|
Draw_FunString ( x, y, num);
|
||||||
|
|
||||||
// draw pl
|
// draw pl
|
||||||
p = s->pl;
|
p = s->pl;
|
||||||
|
@ -1947,7 +2016,7 @@ void Sbar_DeathmatchOverlay (int start)
|
||||||
if (cl.teamplay)
|
if (cl.teamplay)
|
||||||
{
|
{
|
||||||
Q_strncpyz (team, Info_ValueForKey(s->userinfo, "team"), sizeof(team));
|
Q_strncpyz (team, Info_ValueForKey(s->userinfo, "team"), sizeof(team));
|
||||||
Draw_String (x+152, y, team);
|
Draw_FunStringLen (x+152, y, team, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
// draw name
|
// draw name
|
||||||
|
@ -1958,6 +2027,8 @@ void Sbar_DeathmatchOverlay (int start)
|
||||||
|
|
||||||
y += skip;
|
y += skip;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Draw_Character(0,0,COLOR_WHITE<<8);
|
||||||
|
|
||||||
if (y >= vid.height-10) // we ran over the screen size, squish
|
if (y >= vid.height-10) // we ran over the screen size, squish
|
||||||
largegame = true;
|
largegame = true;
|
||||||
|
@ -2061,6 +2132,8 @@ void Sbar_ChatModeOverlay(void)
|
||||||
|
|
||||||
y += skip;
|
y += skip;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Draw_Character(0,0,COLOR_WHITE<<8);
|
||||||
|
|
||||||
if (y >= vid.height-10) // we ran over the screen size, squish
|
if (y >= vid.height-10) // we ran over the screen size, squish
|
||||||
largegame = true;
|
largegame = true;
|
||||||
|
@ -2082,9 +2155,9 @@ void Sbar_MiniDeathmatchOverlay (void)
|
||||||
int x, y, f;
|
int x, y, f;
|
||||||
char num[12];
|
char num[12];
|
||||||
player_info_t *s;
|
player_info_t *s;
|
||||||
char team[5];
|
char team[64];
|
||||||
int numlines;
|
int numlines;
|
||||||
char name[16+1];
|
char name[64+1];
|
||||||
team_t *tm;
|
team_t *tm;
|
||||||
|
|
||||||
if (sbar_rect.width < 512 || !sb_lines)
|
if (sbar_rect.width < 512 || !sb_lines)
|
||||||
|
@ -2144,7 +2217,7 @@ void Sbar_MiniDeathmatchOverlay (void)
|
||||||
f = s->frags;
|
f = s->frags;
|
||||||
sprintf (num, "%3i",f);
|
sprintf (num, "%3i",f);
|
||||||
|
|
||||||
Draw_Character ( x+8 , y, num[0]);
|
Draw_ColouredCharacter ( x+8 , y, (COLOR_WHITE<<8)|num[0]);
|
||||||
Draw_Character ( x+16, y, num[1]);
|
Draw_Character ( x+16, y, num[1]);
|
||||||
Draw_Character ( x+24, y, num[2]);
|
Draw_Character ( x+24, y, num[2]);
|
||||||
|
|
||||||
|
@ -2155,19 +2228,17 @@ void Sbar_MiniDeathmatchOverlay (void)
|
||||||
Draw_Character ( x + 32, y, 17);
|
Draw_Character ( x + 32, y, 17);
|
||||||
}
|
}
|
||||||
|
|
||||||
// team
|
Q_strncpyz(name, s->name, sizeof(name));
|
||||||
|
// team and name
|
||||||
if (cl.teamplay)
|
if (cl.teamplay)
|
||||||
{
|
{
|
||||||
Q_strncpyz (team, Info_ValueForKey(s->userinfo, "team"), sizeof(team));
|
Q_strncpyz (team, Info_ValueForKey(s->userinfo, "team"), sizeof(team));
|
||||||
Draw_String (x+48, y, team);
|
Draw_FunStringLen (x+48, y, team, 4);
|
||||||
|
|
||||||
|
Draw_FunStringLen (x+48+40, y, name, MAX_DISPLAYEDNAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
// draw name
|
|
||||||
Q_strncpyz(name, s->name, sizeof(name));
|
|
||||||
if (cl.teamplay)
|
|
||||||
Draw_FunString (x+48+40, y, name);
|
|
||||||
else
|
else
|
||||||
Draw_FunString (x+48, y, name);
|
Draw_FunStringLen (x+48, y, name, MAX_DISPLAYEDNAME);
|
||||||
y += 8;
|
y += 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2178,7 +2249,7 @@ void Sbar_MiniDeathmatchOverlay (void)
|
||||||
// draw seperator
|
// draw seperator
|
||||||
x += 208;
|
x += 208;
|
||||||
for (y = sbar_rect.height - sb_lines; y < sbar_rect.height - 6; y += 2)
|
for (y = sbar_rect.height - sb_lines; y < sbar_rect.height - 6; y += 2)
|
||||||
Draw_Character(x, y, 14);
|
Draw_ColouredCharacter(x, y, (COLOR_WHITE<<8)|14);
|
||||||
|
|
||||||
x += 16;
|
x += 16;
|
||||||
|
|
||||||
|
@ -2190,11 +2261,11 @@ void Sbar_MiniDeathmatchOverlay (void)
|
||||||
|
|
||||||
// draw pings
|
// draw pings
|
||||||
Q_strncpyz (team, tm->team, sizeof(team));
|
Q_strncpyz (team, tm->team, sizeof(team));
|
||||||
Draw_String (x, y, team);
|
Draw_FunStringLen (x, y, team, 4);
|
||||||
|
|
||||||
// draw total
|
// draw total
|
||||||
sprintf (num, "%5i", tm->frags);
|
sprintf (num, "%5i", tm->frags);
|
||||||
Draw_String (x + 40, y, num);
|
Draw_FunString(x + 40, y, num);
|
||||||
|
|
||||||
if (!strncmp(Info_ValueForKey(cl.players[cl.playernum[0]].userinfo,
|
if (!strncmp(Info_ValueForKey(cl.players[cl.playernum[0]].userinfo,
|
||||||
"team"), tm->team, 16)) {
|
"team"), tm->team, 16)) {
|
||||||
|
|
|
@ -34,7 +34,7 @@ void S_Update_(soundcardinfo_t *sc);
|
||||||
void S_StopAllSounds(qboolean clear);
|
void S_StopAllSounds(qboolean clear);
|
||||||
void S_StopAllSoundsC(void);
|
void S_StopAllSoundsC(void);
|
||||||
|
|
||||||
void S_UpdateCard(soundcardinfo_t *sc, vec3_t origin, vec3_t forward, vec3_t right, vec3_t up);
|
void S_UpdateCard(soundcardinfo_t *sc);
|
||||||
|
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
// Internal sound data & structures
|
// Internal sound data & structures
|
||||||
|
@ -162,6 +162,8 @@ void S_Startup (void)
|
||||||
if (sound_started)
|
if (sound_started)
|
||||||
S_Shutdown();
|
S_Shutdown();
|
||||||
|
|
||||||
|
snd_blocked = 0;
|
||||||
|
|
||||||
if (!fakedma)
|
if (!fakedma)
|
||||||
{
|
{
|
||||||
#if defined(_WIN32) && !defined(NODIRECTX)
|
#if defined(_WIN32) && !defined(NODIRECTX)
|
||||||
|
@ -1109,13 +1111,18 @@ void S_Update(vec3_t origin, vec3_t forward, vec3_t right, vec3_t up)
|
||||||
{
|
{
|
||||||
soundcardinfo_t *sc;
|
soundcardinfo_t *sc;
|
||||||
|
|
||||||
|
VectorCopy(origin, listener_origin);
|
||||||
|
VectorCopy(forward, listener_forward);
|
||||||
|
VectorCopy(right, listener_right);
|
||||||
|
VectorCopy(up, listener_up);
|
||||||
|
|
||||||
S_UpdateCapture();
|
S_UpdateCapture();
|
||||||
|
|
||||||
for (sc = sndcardinfo; sc; sc = sc->next)
|
for (sc = sndcardinfo; sc; sc = sc->next)
|
||||||
S_UpdateCard(sc, origin, forward, right, up);
|
S_UpdateCard(sc);
|
||||||
|
|
||||||
}
|
}
|
||||||
void S_UpdateCard(soundcardinfo_t *sc, vec3_t origin, vec3_t forward, vec3_t right, vec3_t up)
|
void S_UpdateCard(soundcardinfo_t *sc)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
int total;
|
int total;
|
||||||
|
@ -1129,11 +1136,6 @@ void S_UpdateCard(soundcardinfo_t *sc, vec3_t origin, vec3_t forward, vec3_t rig
|
||||||
if (!sc->inactive_sound)
|
if (!sc->inactive_sound)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
VectorCopy(origin, listener_origin);
|
|
||||||
VectorCopy(forward, listener_forward);
|
|
||||||
VectorCopy(right, listener_right);
|
|
||||||
VectorCopy(up, listener_up);
|
|
||||||
|
|
||||||
// update general area ambient sound sources
|
// update general area ambient sound sources
|
||||||
S_UpdateAmbientSounds (sc);
|
S_UpdateAmbientSounds (sc);
|
||||||
|
@ -1253,6 +1255,9 @@ void S_ExtraUpdate (void)
|
||||||
{
|
{
|
||||||
soundcardinfo_t *sc;
|
soundcardinfo_t *sc;
|
||||||
|
|
||||||
|
if (!sound_started)
|
||||||
|
return;
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
IN_Accumulate ();
|
IN_Accumulate ();
|
||||||
#endif
|
#endif
|
||||||
|
@ -1272,13 +1277,17 @@ void S_Update_(soundcardinfo_t *sc)
|
||||||
{
|
{
|
||||||
unsigned endtime;
|
unsigned endtime;
|
||||||
int samps;
|
int samps;
|
||||||
|
|
||||||
if (!sound_started)// || (snd_blocked > 0))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (sc->selfpainting)
|
if (sc->selfpainting)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if ((snd_blocked > 0))
|
||||||
|
{
|
||||||
|
if (!sc->inactive_sound)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Updates DMA time
|
// Updates DMA time
|
||||||
GetSoundtime(sc);
|
GetSoundtime(sc);
|
||||||
|
|
||||||
|
|
|
@ -1143,9 +1143,6 @@ int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLin
|
||||||
|
|
||||||
Sys_Init ();
|
Sys_Init ();
|
||||||
|
|
||||||
// because sound is off until we become active
|
|
||||||
S_BlockSound ();
|
|
||||||
|
|
||||||
Sys_Printf ("Host_Init\n");
|
Sys_Printf ("Host_Init\n");
|
||||||
Host_Init (&parms);
|
Host_Init (&parms);
|
||||||
|
|
||||||
|
|
|
@ -731,6 +731,64 @@ static char *Macro_demoplayback (void)
|
||||||
}
|
}
|
||||||
return "1"; //unknown.
|
return "1"; //unknown.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *Macro_Match_Name (void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
i = TP_CountPlayers();
|
||||||
|
if (cl.teamplay && i >= 3)
|
||||||
|
{ // Teamplay
|
||||||
|
return va ("%s %s vs %s - %s",
|
||||||
|
TP_PlayerName(),
|
||||||
|
TP_PlayerTeam(),
|
||||||
|
TP_EnemyTeam(),
|
||||||
|
TP_MapName());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (i == 2)
|
||||||
|
{ // Duel
|
||||||
|
return va ("%s vs %s - %s",
|
||||||
|
TP_PlayerName(),
|
||||||
|
TP_EnemyName(),
|
||||||
|
TP_MapName());
|
||||||
|
}
|
||||||
|
else if (i > 2)
|
||||||
|
{ // FFA
|
||||||
|
return va ("%s ffa - %s",
|
||||||
|
TP_PlayerName(),
|
||||||
|
TP_MapName());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ // one player
|
||||||
|
return va ("%s - %s",
|
||||||
|
TP_PlayerName(),
|
||||||
|
TP_MapName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//$matchtype
|
||||||
|
//duel,2on2,4on4,ffa,etc...
|
||||||
|
static char *Macro_Match_Type (void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
i = TP_CountPlayers();
|
||||||
|
if (cl.teamplay && i >= 3)
|
||||||
|
{
|
||||||
|
if (i >= 6)
|
||||||
|
return "4on4";
|
||||||
|
return "2on2";
|
||||||
|
}
|
||||||
|
if (i == 2)
|
||||||
|
return "duel";
|
||||||
|
if (i == 1)
|
||||||
|
return "single";
|
||||||
|
if (i == 0)
|
||||||
|
return "empty";
|
||||||
|
return "ffa";
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
$droploc
|
$droploc
|
||||||
Tells location of the dropped flag.
|
Tells location of the dropped flag.
|
||||||
|
@ -764,9 +822,6 @@ $matchstatus
|
||||||
("disconnected", "standby" or "normal"). This can be
|
("disconnected", "standby" or "normal"). This can be
|
||||||
used for detecting prewar/prematch on ktpro/oztf servers.
|
used for detecting prewar/prematch on ktpro/oztf servers.
|
||||||
|
|
||||||
$matchtype
|
|
||||||
duel,2on2,4on4,ffa,etc...
|
|
||||||
|
|
||||||
$mp3info
|
$mp3info
|
||||||
Evaluates to "author - title".
|
Evaluates to "author - title".
|
||||||
Examples:
|
Examples:
|
||||||
|
@ -775,19 +830,6 @@ then hitting space will say something like
|
||||||
"listening to disturbed - rise".
|
"listening to disturbed - rise".
|
||||||
bind x "if disturbed isin $mp3info then say dde music is cool"
|
bind x "if disturbed isin $mp3info then say dde music is cool"
|
||||||
|
|
||||||
$need
|
|
||||||
What you need.
|
|
||||||
Note: you have to set this with tp_need* variables.
|
|
||||||
|
|
||||||
$point
|
|
||||||
Name of object you are looking at.
|
|
||||||
|
|
||||||
$pointatloc
|
|
||||||
Name of object and location of object you are looking at.
|
|
||||||
|
|
||||||
$pointloc
|
|
||||||
Location of object you are looking at.
|
|
||||||
|
|
||||||
$triggermatch
|
$triggermatch
|
||||||
$triggermatch is the last chat message that exec'd a msg_trigger.
|
$triggermatch is the last chat message that exec'd a msg_trigger.
|
||||||
|
|
||||||
|
@ -828,14 +870,14 @@ static void TP_InitMacros(void)
|
||||||
Cmd_AddMacro("point", Macro_PointName);
|
Cmd_AddMacro("point", Macro_PointName);
|
||||||
Cmd_AddMacro("pointatloc", Macro_PointNameAtLocation);
|
Cmd_AddMacro("pointatloc", Macro_PointNameAtLocation);
|
||||||
Cmd_AddMacro("pointloc", Macro_PointLocation);
|
Cmd_AddMacro("pointloc", Macro_PointLocation);
|
||||||
|
Cmd_AddMacro("matchname", Macro_Match_Name);
|
||||||
|
Cmd_AddMacro("matchtype", Macro_Match_Type);
|
||||||
|
|
||||||
// Cmd_AddMacro("droploc", Macro_LastDrop);
|
// Cmd_AddMacro("droploc", Macro_LastDrop);
|
||||||
// Cmd_AddMacro("droptime", Macro_LastDropTime);
|
// Cmd_AddMacro("droptime", Macro_LastDropTime);
|
||||||
// Cmd_AddMacro("ledpoint", Macro_Point_LED);
|
// Cmd_AddMacro("ledpoint", Macro_Point_LED);
|
||||||
// Cmd_AddMacro("ledstatus", Macro_MyStatus_LED);
|
// Cmd_AddMacro("ledstatus", Macro_MyStatus_LED);
|
||||||
// Cmd_AddMacro("matchname", Macro_Match_Name);
|
|
||||||
// Cmd_AddMacro("matchstatus", Macro_Match_Status);
|
// Cmd_AddMacro("matchstatus", Macro_Match_Status);
|
||||||
// Cmd_AddMacro("matchtype", Macro_Match_Type);
|
|
||||||
// Cmd_AddMacro("mp3info", );
|
// Cmd_AddMacro("mp3info", );
|
||||||
// Cmd_AddMacro("triggermatch", Macro_LastTrigger_Match);
|
// Cmd_AddMacro("triggermatch", Macro_LastTrigger_Match);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
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.
|
See the GNU General Public License for more details.
|
||||||
|
|
||||||
|
@ -62,13 +62,13 @@ int PM_ClipVelocity (vec3_t in, vec3_t normal, vec3_t out, float overbounce)
|
||||||
float backoff;
|
float backoff;
|
||||||
float change;
|
float change;
|
||||||
int i, blocked;
|
int i, blocked;
|
||||||
|
|
||||||
blocked = 0;
|
blocked = 0;
|
||||||
if (normal[2] > 0)
|
if (normal[2] > 0)
|
||||||
blocked |= BLOCKED_FLOOR; // floor
|
blocked |= BLOCKED_FLOOR; // floor
|
||||||
if (!normal[2])
|
if (!normal[2])
|
||||||
blocked |= BLOCKED_STEP; // step
|
blocked |= BLOCKED_STEP; // step
|
||||||
|
|
||||||
backoff = DotProduct (in, normal) * overbounce;
|
backoff = DotProduct (in, normal) * overbounce;
|
||||||
|
|
||||||
for (i=0 ; i<3 ; i++)
|
for (i=0 ; i<3 ; i++)
|
||||||
|
@ -78,7 +78,7 @@ int PM_ClipVelocity (vec3_t in, vec3_t normal, vec3_t out, float overbounce)
|
||||||
if (out[i] > -STOP_EPSILON && out[i] < STOP_EPSILON)
|
if (out[i] > -STOP_EPSILON && out[i] < STOP_EPSILON)
|
||||||
out[i] = 0;
|
out[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return blocked;
|
return blocked;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,14 +105,14 @@ int PM_SlideMove (void)
|
||||||
vec3_t end;
|
vec3_t end;
|
||||||
float time_left;
|
float time_left;
|
||||||
int blocked;
|
int blocked;
|
||||||
|
|
||||||
numbumps = 4;
|
numbumps = 4;
|
||||||
|
|
||||||
blocked = 0;
|
blocked = 0;
|
||||||
VectorCopy (pmove.velocity, original_velocity);
|
VectorCopy (pmove.velocity, original_velocity);
|
||||||
VectorCopy (pmove.velocity, primal_velocity);
|
VectorCopy (pmove.velocity, primal_velocity);
|
||||||
numplanes = 0;
|
numplanes = 0;
|
||||||
|
|
||||||
time_left = frametime;
|
time_left = frametime;
|
||||||
|
|
||||||
for (bumpcount=0 ; bumpcount<numbumps ; bumpcount++)
|
for (bumpcount=0 ; bumpcount<numbumps ; bumpcount++)
|
||||||
|
@ -152,7 +152,7 @@ int PM_SlideMove (void)
|
||||||
blocked |= BLOCKED_OTHER;
|
blocked |= BLOCKED_OTHER;
|
||||||
|
|
||||||
time_left -= time_left * trace.fraction;
|
time_left -= time_left * trace.fraction;
|
||||||
|
|
||||||
// cliped to another plane
|
// cliped to another plane
|
||||||
if (numplanes >= MAX_CLIP_PLANES)
|
if (numplanes >= MAX_CLIP_PLANES)
|
||||||
{ // this shouldn't really happen
|
{ // this shouldn't really happen
|
||||||
|
@ -178,9 +178,8 @@ int PM_SlideMove (void)
|
||||||
&& Length(pmove.velocity)>200 && pmove.cmd.buttons & 2 && !pmove.jump_held && !pmove.waterjumptime)
|
&& Length(pmove.velocity)>200 && pmove.cmd.buttons & 2 && !pmove.jump_held && !pmove.waterjumptime)
|
||||||
{
|
{
|
||||||
PM_ClipVelocity (original_velocity, planes[i], pmove.velocity, 2);
|
PM_ClipVelocity (original_velocity, planes[i], pmove.velocity, 2);
|
||||||
pmove.velocity[2] += 270;
|
if (pmove.velocity[2] < 270)
|
||||||
if (pmove.velocity[2] < 125)
|
pmove.velocity[2] = 270;
|
||||||
pmove.velocity[2] = 125;
|
|
||||||
pmove.jump_msec = pmove.cmd.msec;
|
pmove.jump_msec = pmove.cmd.msec;
|
||||||
pmove.jump_held = true;
|
pmove.jump_held = true;
|
||||||
pmove.waterjumptime = 0;
|
pmove.waterjumptime = 0;
|
||||||
|
@ -196,7 +195,7 @@ int PM_SlideMove (void)
|
||||||
if (j == numplanes)
|
if (j == numplanes)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i != numplanes)
|
if (i != numplanes)
|
||||||
{ // go along this plane
|
{ // go along this plane
|
||||||
}
|
}
|
||||||
|
@ -302,7 +301,7 @@ usedown:
|
||||||
VectorCopy (downvel, pmove.velocity);
|
VectorCopy (downvel, pmove.velocity);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// copy z value from slide move
|
// copy z value from slide move
|
||||||
pmove.velocity[2] = downvel[2];
|
pmove.velocity[2] = downvel[2];
|
||||||
|
|
||||||
|
@ -332,7 +331,7 @@ void PM_Friction (void)
|
||||||
float drop;
|
float drop;
|
||||||
vec3_t start, stop;
|
vec3_t start, stop;
|
||||||
trace_t trace;
|
trace_t trace;
|
||||||
|
|
||||||
if (pmove.waterjumptime)
|
if (pmove.waterjumptime)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -408,7 +407,7 @@ void PM_Accelerate (vec3_t wishdir, float wishspeed, float accel)
|
||||||
accelspeed = accel*frametime*wishspeed;
|
accelspeed = accel*frametime*wishspeed;
|
||||||
if (accelspeed > addspeed)
|
if (accelspeed > addspeed)
|
||||||
accelspeed = addspeed;
|
accelspeed = addspeed;
|
||||||
|
|
||||||
for (i=0 ; i<3 ; i++)
|
for (i=0 ; i<3 ; i++)
|
||||||
pmove.velocity[i] += accelspeed*wishdir[i];
|
pmove.velocity[i] += accelspeed*wishdir[i];
|
||||||
}
|
}
|
||||||
|
@ -418,7 +417,7 @@ void PM_AirAccelerate (vec3_t wishdir, float wishspeed, float accel)
|
||||||
int i;
|
int i;
|
||||||
float addspeed, accelspeed, currentspeed, wishspd = wishspeed;
|
float addspeed, accelspeed, currentspeed, wishspd = wishspeed;
|
||||||
float originalspeed, newspeed, speedcap;
|
float originalspeed, newspeed, speedcap;
|
||||||
|
|
||||||
if (pmove.pm_type == PM_DEAD)
|
if (pmove.pm_type == PM_DEAD)
|
||||||
return;
|
return;
|
||||||
if (pmove.waterjumptime)
|
if (pmove.waterjumptime)
|
||||||
|
@ -441,7 +440,7 @@ void PM_AirAccelerate (vec3_t wishdir, float wishspeed, float accel)
|
||||||
accelspeed = accel * wishspeed * frametime;
|
accelspeed = accel * wishspeed * frametime;
|
||||||
if (accelspeed > addspeed)
|
if (accelspeed > addspeed)
|
||||||
accelspeed = addspeed;
|
accelspeed = addspeed;
|
||||||
|
|
||||||
for (i=0 ; i<3 ; i++)
|
for (i=0 ; i<3 ; i++)
|
||||||
pmove.velocity[i] += accelspeed*wishdir[i];
|
pmove.velocity[i] += accelspeed*wishdir[i];
|
||||||
|
|
||||||
|
@ -517,19 +516,19 @@ void PM_FlyMove ()
|
||||||
|
|
||||||
for (i=0 ; i<3 ; i++)
|
for (i=0 ; i<3 ; i++)
|
||||||
wishvel[i] = forward[i]*pmove.cmd.forwardmove + right[i]*pmove.cmd.sidemove;
|
wishvel[i] = forward[i]*pmove.cmd.forwardmove + right[i]*pmove.cmd.sidemove;
|
||||||
|
|
||||||
wishvel[2] += pmove.cmd.upmove;
|
wishvel[2] += pmove.cmd.upmove;
|
||||||
|
|
||||||
VectorCopy (wishvel, wishdir);
|
VectorCopy (wishvel, wishdir);
|
||||||
wishspeed = VectorNormalize(wishdir);
|
wishspeed = VectorNormalize(wishdir);
|
||||||
|
|
||||||
if (wishspeed > movevars.maxspeed) {
|
if (wishspeed > movevars.maxspeed) {
|
||||||
VectorScale (wishvel, movevars.maxspeed/wishspeed, wishvel);
|
VectorScale (wishvel, movevars.maxspeed/wishspeed, wishvel);
|
||||||
wishspeed = movevars.maxspeed;
|
wishspeed = movevars.maxspeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
PM_Accelerate (wishdir, wishspeed, movevars.accelerate);
|
PM_Accelerate (wishdir, wishspeed, movevars.accelerate);
|
||||||
|
|
||||||
PM_StepSlideMove ();
|
PM_StepSlideMove ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -544,7 +543,7 @@ void PM_LadderMove (void)
|
||||||
|
|
||||||
//
|
//
|
||||||
// user intentions
|
// user intentions
|
||||||
//
|
//
|
||||||
for (i=0 ; i<3 ; i++)
|
for (i=0 ; i<3 ; i++)
|
||||||
wishvel[i] = forward[i]*pmove.cmd.forwardmove + right[i]*pmove.cmd.sidemove + up[i]*pmove.cmd.upmove;
|
wishvel[i] = forward[i]*pmove.cmd.forwardmove + right[i]*pmove.cmd.sidemove + up[i]*pmove.cmd.upmove;
|
||||||
|
|
||||||
|
@ -575,7 +574,7 @@ void PM_LadderMove (void)
|
||||||
VectorCopy (trace.endpos, pmove.origin);
|
VectorCopy (trace.endpos, pmove.origin);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PM_FlyMove ();
|
PM_FlyMove ();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -596,7 +595,7 @@ void PM_AirMove (void)
|
||||||
|
|
||||||
fmove = pmove.cmd.forwardmove;
|
fmove = pmove.cmd.forwardmove;
|
||||||
smove = pmove.cmd.sidemove;
|
smove = pmove.cmd.sidemove;
|
||||||
|
|
||||||
forward[2] = 0;
|
forward[2] = 0;
|
||||||
right[2] = 0;
|
right[2] = 0;
|
||||||
VectorNormalize (forward);
|
VectorNormalize (forward);
|
||||||
|
@ -617,7 +616,7 @@ void PM_AirMove (void)
|
||||||
VectorScale (wishvel, movevars.maxspeed/wishspeed, wishvel);
|
VectorScale (wishvel, movevars.maxspeed/wishspeed, wishvel);
|
||||||
wishspeed = movevars.maxspeed;
|
wishspeed = movevars.maxspeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pmove.onground)
|
if (pmove.onground)
|
||||||
{
|
{
|
||||||
if (pmove.velocity[2] > 0 || !movevars.slidefix)
|
if (pmove.velocity[2] > 0 || !movevars.slidefix)
|
||||||
|
@ -731,7 +730,7 @@ void PM_CategorizePosition (void)
|
||||||
{
|
{
|
||||||
trace_t t;
|
trace_t t;
|
||||||
vec3_t flatforward, fwd1;
|
vec3_t flatforward, fwd1;
|
||||||
|
|
||||||
flatforward[0] = forward[0];
|
flatforward[0] = forward[0];
|
||||||
flatforward[1] = forward[1];
|
flatforward[1] = forward[1];
|
||||||
flatforward[2] = 0;
|
flatforward[2] = 0;
|
||||||
|
@ -952,7 +951,7 @@ void PM_SpectatorMove (void)
|
||||||
// accelerate
|
// accelerate
|
||||||
fmove = pmove.cmd.forwardmove;
|
fmove = pmove.cmd.forwardmove;
|
||||||
smove = pmove.cmd.sidemove;
|
smove = pmove.cmd.sidemove;
|
||||||
|
|
||||||
VectorNormalize (forward);
|
VectorNormalize (forward);
|
||||||
VectorNormalize (right);
|
VectorNormalize (right);
|
||||||
|
|
||||||
|
@ -986,9 +985,9 @@ void PM_SpectatorMove (void)
|
||||||
accelspeed = movevars.accelerate*frametime*wishspeed;
|
accelspeed = movevars.accelerate*frametime*wishspeed;
|
||||||
if (accelspeed > addspeed)
|
if (accelspeed > addspeed)
|
||||||
accelspeed = addspeed;
|
accelspeed = addspeed;
|
||||||
|
|
||||||
for (i=0 ; i<3 ; i++)
|
for (i=0 ; i<3 ; i++)
|
||||||
pmove.velocity[i] += accelspeed*wishdir[i];
|
pmove.velocity[i] += accelspeed*wishdir[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
// move
|
// move
|
||||||
|
|
|
@ -593,219 +593,222 @@ static galiastexnum_t *GL_ChooseSkin(galiasinfo_t *inf, char *modelname, entity_
|
||||||
|
|
||||||
int tc, bc;
|
int tc, bc;
|
||||||
|
|
||||||
if (e->scoreboard)
|
if (gl_nocolors.value)
|
||||||
{
|
{
|
||||||
if (!e->scoreboard->skin && !gl_nocolors.value)
|
if (e->scoreboard)
|
||||||
Skin_Find(e->scoreboard);
|
|
||||||
tc = e->scoreboard->topcolor;
|
|
||||||
bc = e->scoreboard->bottomcolor;
|
|
||||||
|
|
||||||
//colour forcing
|
|
||||||
if (cl.splitclients<2 && !(cl.fpd & FPD_NO_FORCE_COLOR)) //no colour/skin forcing in splitscreen.
|
|
||||||
{
|
{
|
||||||
if (cl.teamplay && !strcmp(e->scoreboard->team, cl.players[cl.playernum[0]].team))
|
if (!e->scoreboard->skin)
|
||||||
|
Skin_Find(e->scoreboard);
|
||||||
|
tc = e->scoreboard->topcolor;
|
||||||
|
bc = e->scoreboard->bottomcolor;
|
||||||
|
|
||||||
|
//colour forcing
|
||||||
|
if (cl.splitclients<2 && !(cl.fpd & FPD_NO_FORCE_COLOR)) //no colour/skin forcing in splitscreen.
|
||||||
{
|
{
|
||||||
if (cl_teamtopcolor>=0)
|
if (cl.teamplay && !strcmp(e->scoreboard->team, cl.players[cl.playernum[0]].team))
|
||||||
tc = cl_teamtopcolor;
|
{
|
||||||
if (cl_teambottomcolor>=0)
|
if (cl_teamtopcolor>=0)
|
||||||
bc = cl_teambottomcolor;
|
tc = cl_teamtopcolor;
|
||||||
}
|
if (cl_teambottomcolor>=0)
|
||||||
else
|
bc = cl_teambottomcolor;
|
||||||
{
|
}
|
||||||
if (cl_enemytopcolor>=0)
|
else
|
||||||
tc = cl_enemytopcolor;
|
{
|
||||||
if (cl_enemybottomcolor>=0)
|
if (cl_enemytopcolor>=0)
|
||||||
bc = cl_enemybottomcolor;
|
tc = cl_enemytopcolor;
|
||||||
|
if (cl_enemybottomcolor>=0)
|
||||||
|
bc = cl_enemybottomcolor;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
tc = 1;
|
|
||||||
bc = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!gl_nocolors.value && (tc != 1 || bc != 1 || (e->scoreboard && e->scoreboard->skin)))
|
|
||||||
{
|
|
||||||
int inwidth, inheight;
|
|
||||||
int tinwidth, tinheight;
|
|
||||||
char *skinname;
|
|
||||||
qbyte *original;
|
|
||||||
int cc;
|
|
||||||
galiascolourmapped_t *cm;
|
|
||||||
cc = (tc<<4)|bc;
|
|
||||||
|
|
||||||
if (!strstr(modelname, "progs/player.mdl"))
|
|
||||||
skinname = modelname;
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (e->scoreboard && e->scoreboard->skin && !gl_nocolors.value)
|
tc = 1;
|
||||||
skinname = e->scoreboard->skin->name;
|
bc = 1;
|
||||||
else
|
}
|
||||||
|
|
||||||
|
if (tc != 1 || bc != 1 || (e->scoreboard && e->scoreboard->skin))
|
||||||
|
{
|
||||||
|
int inwidth, inheight;
|
||||||
|
int tinwidth, tinheight;
|
||||||
|
char *skinname;
|
||||||
|
qbyte *original;
|
||||||
|
int cc;
|
||||||
|
galiascolourmapped_t *cm;
|
||||||
|
cc = (tc<<4)|bc;
|
||||||
|
|
||||||
|
if (!strstr(modelname, "progs/player.mdl"))
|
||||||
skinname = modelname;
|
skinname = modelname;
|
||||||
}
|
else
|
||||||
|
|
||||||
if (!skincolourmapped.numbuckets)
|
|
||||||
Hash_InitTable(&skincolourmapped, 256, BZ_Malloc(Hash_BytesForBuckets(256)));
|
|
||||||
|
|
||||||
for (cm = Hash_Get(&skincolourmapped, skinname); cm; cm = Hash_GetNext(&skincolourmapped, skinname, cm))
|
|
||||||
{
|
|
||||||
if (cm->colour == cc && cm->skinnum == e->skinnum)
|
|
||||||
{
|
{
|
||||||
return &cm->texnum;
|
if (e->scoreboard && e->scoreboard->skin && !gl_nocolors.value)
|
||||||
|
skinname = e->scoreboard->skin->name;
|
||||||
|
else
|
||||||
|
skinname = modelname;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
if (!skincolourmapped.numbuckets)
|
||||||
skins = (galiasskin_t*)((char *)inf + inf->ofsskins);
|
Hash_InitTable(&skincolourmapped, 256, BZ_Malloc(Hash_BytesForBuckets(256)));
|
||||||
if (!skins->texnums)
|
|
||||||
return NULL;
|
for (cm = Hash_Get(&skincolourmapped, skinname); cm; cm = Hash_GetNext(&skincolourmapped, skinname, cm))
|
||||||
if (e->skinnum >= 0 && e->skinnum < inf->numskins)
|
|
||||||
skins += e->skinnum;
|
|
||||||
texnums = (galiastexnum_t*)((char *)skins + skins->ofstexnums);
|
|
||||||
|
|
||||||
|
|
||||||
//colourmap isn't present yet.
|
|
||||||
cm = BZ_Malloc(sizeof(*cm));
|
|
||||||
Q_strncpyz(cm->name, skinname, sizeof(cm->name));
|
|
||||||
Hash_Add2(&skincolourmapped, cm->name, cm, &cm->bucket);
|
|
||||||
cm->colour = cc;
|
|
||||||
cm->skinnum = e->skinnum;
|
|
||||||
cm->texnum.fullbright = 0;
|
|
||||||
cm->texnum.base = 0;
|
|
||||||
cm->texnum.bump = texnums[cm->skinnum].bump; //can't colour bumpmapping
|
|
||||||
if (skinname!=modelname && e->scoreboard && e->scoreboard->skin)
|
|
||||||
{
|
|
||||||
original = Skin_Cache8(e->scoreboard->skin);
|
|
||||||
inwidth = e->scoreboard->skin->width;
|
|
||||||
inheight = e->scoreboard->skin->height;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
original = NULL;
|
|
||||||
inwidth = 0;
|
|
||||||
}
|
|
||||||
if (!original)
|
|
||||||
{
|
|
||||||
if (skins->ofstexels)
|
|
||||||
{
|
{
|
||||||
original = (qbyte *)skins + skins->ofstexels;
|
if (cm->colour == cc && cm->skinnum == e->skinnum)
|
||||||
inwidth = skins->skinwidth;
|
{
|
||||||
inheight = skins->skinheight;
|
return &cm->texnum;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
skins = (galiasskin_t*)((char *)inf + inf->ofsskins);
|
||||||
|
if (!skins->texnums)
|
||||||
|
return NULL;
|
||||||
|
if (e->skinnum >= 0 && e->skinnum < inf->numskins)
|
||||||
|
skins += e->skinnum;
|
||||||
|
texnums = (galiastexnum_t*)((char *)skins + skins->ofstexnums);
|
||||||
|
|
||||||
|
|
||||||
|
//colourmap isn't present yet.
|
||||||
|
cm = BZ_Malloc(sizeof(*cm));
|
||||||
|
Q_strncpyz(cm->name, skinname, sizeof(cm->name));
|
||||||
|
Hash_Add2(&skincolourmapped, cm->name, cm, &cm->bucket);
|
||||||
|
cm->colour = cc;
|
||||||
|
cm->skinnum = e->skinnum;
|
||||||
|
cm->texnum.fullbright = 0;
|
||||||
|
cm->texnum.base = 0;
|
||||||
|
cm->texnum.bump = texnums[cm->skinnum].bump; //can't colour bumpmapping
|
||||||
|
if (skinname!=modelname && e->scoreboard && e->scoreboard->skin)
|
||||||
|
{
|
||||||
|
original = Skin_Cache8(e->scoreboard->skin);
|
||||||
|
inwidth = e->scoreboard->skin->width;
|
||||||
|
inheight = e->scoreboard->skin->height;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
original = NULL;
|
original = NULL;
|
||||||
inwidth = 0;
|
inwidth = 0;
|
||||||
inheight = 0;
|
|
||||||
}
|
}
|
||||||
}
|
if (!original)
|
||||||
tinwidth = skins->skinwidth;
|
|
||||||
tinheight = skins->skinheight;
|
|
||||||
if (original)
|
|
||||||
{
|
|
||||||
int i, j;
|
|
||||||
qbyte translate[256];
|
|
||||||
unsigned translate32[256];
|
|
||||||
static unsigned pixels[512*512];
|
|
||||||
unsigned *out;
|
|
||||||
unsigned frac, fracstep;
|
|
||||||
|
|
||||||
unsigned scaled_width, scaled_height;
|
|
||||||
qbyte *inrow;
|
|
||||||
|
|
||||||
texnums = &cm->texnum;
|
|
||||||
|
|
||||||
texnums->base = 0;
|
|
||||||
texnums->fullbright = 0;
|
|
||||||
|
|
||||||
scaled_width = gl_max_size.value < 512 ? gl_max_size.value : 512;
|
|
||||||
scaled_height = gl_max_size.value < 512 ? gl_max_size.value : 512;
|
|
||||||
|
|
||||||
for (i=0 ; i<256 ; i++)
|
|
||||||
translate[i] = i;
|
|
||||||
|
|
||||||
tc<<=4;
|
|
||||||
bc<<=4;
|
|
||||||
|
|
||||||
for (i=0 ; i<16 ; i++)
|
|
||||||
{
|
{
|
||||||
if (tc < 128) // the artists made some backwards ranges. sigh.
|
if (skins->ofstexels)
|
||||||
translate[TOP_RANGE+i] = tc+i;
|
|
||||||
else
|
|
||||||
translate[TOP_RANGE+i] = tc+15-i;
|
|
||||||
|
|
||||||
if (bc < 128)
|
|
||||||
translate[BOTTOM_RANGE+i] = bc+i;
|
|
||||||
else
|
|
||||||
translate[BOTTOM_RANGE+i] = bc+15-i;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
for (i=0 ; i<256 ; i++)
|
|
||||||
translate32[i] = d_8to24rgbtable[translate[i]];
|
|
||||||
|
|
||||||
out = pixels;
|
|
||||||
fracstep = tinwidth*0x10000/scaled_width;
|
|
||||||
for (i=0 ; i<scaled_height ; i++, out += scaled_width)
|
|
||||||
{
|
|
||||||
inrow = original + inwidth*(i*tinheight/scaled_height);
|
|
||||||
frac = fracstep >> 1;
|
|
||||||
for (j=0 ; j<scaled_width ; j+=4)
|
|
||||||
{
|
{
|
||||||
out[j] = translate32[inrow[frac>>16]];
|
original = (qbyte *)skins + skins->ofstexels;
|
||||||
frac += fracstep;
|
inwidth = skins->skinwidth;
|
||||||
out[j+1] = translate32[inrow[frac>>16]];
|
inheight = skins->skinheight;
|
||||||
frac += fracstep;
|
}
|
||||||
out[j+2] = translate32[inrow[frac>>16]];
|
else
|
||||||
frac += fracstep;
|
{
|
||||||
out[j+3] = translate32[inrow[frac>>16]];
|
original = NULL;
|
||||||
frac += fracstep;
|
inwidth = 0;
|
||||||
|
inheight = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
texnums->base = texture_extension_number++;
|
tinwidth = skins->skinwidth;
|
||||||
GL_Bind(texnums->base);
|
tinheight = skins->skinheight;
|
||||||
qglTexImage2D (GL_TEXTURE_2D, 0, gl_solid_format, scaled_width, scaled_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
|
if (original)
|
||||||
|
|
||||||
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
|
||||||
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
|
||||||
|
|
||||||
|
|
||||||
//now do the fullbrights.
|
|
||||||
out = pixels;
|
|
||||||
fracstep = tinwidth*0x10000/scaled_width;
|
|
||||||
for (i=0 ; i<scaled_height ; i++, out += scaled_width)
|
|
||||||
{
|
{
|
||||||
inrow = original + inwidth*(i*tinheight/scaled_height);
|
int i, j;
|
||||||
frac = fracstep >> 1;
|
qbyte translate[256];
|
||||||
for (j=0 ; j<scaled_width ; j+=1)
|
unsigned translate32[256];
|
||||||
|
static unsigned pixels[512*512];
|
||||||
|
unsigned *out;
|
||||||
|
unsigned frac, fracstep;
|
||||||
|
|
||||||
|
unsigned scaled_width, scaled_height;
|
||||||
|
qbyte *inrow;
|
||||||
|
|
||||||
|
texnums = &cm->texnum;
|
||||||
|
|
||||||
|
texnums->base = 0;
|
||||||
|
texnums->fullbright = 0;
|
||||||
|
|
||||||
|
scaled_width = gl_max_size.value < 512 ? gl_max_size.value : 512;
|
||||||
|
scaled_height = gl_max_size.value < 512 ? gl_max_size.value : 512;
|
||||||
|
|
||||||
|
for (i=0 ; i<256 ; i++)
|
||||||
|
translate[i] = i;
|
||||||
|
|
||||||
|
tc<<=4;
|
||||||
|
bc<<=4;
|
||||||
|
|
||||||
|
for (i=0 ; i<16 ; i++)
|
||||||
{
|
{
|
||||||
if (inrow[frac>>16] < 255-vid.fullbright)
|
if (tc < 128) // the artists made some backwards ranges. sigh.
|
||||||
((char *) (&out[j]))[3] = 0; //alpha 0
|
translate[TOP_RANGE+i] = tc+i;
|
||||||
frac += fracstep;
|
else
|
||||||
|
translate[TOP_RANGE+i] = tc+15-i;
|
||||||
|
|
||||||
|
if (bc < 128)
|
||||||
|
translate[BOTTOM_RANGE+i] = bc+i;
|
||||||
|
else
|
||||||
|
translate[BOTTOM_RANGE+i] = bc+15-i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (i=0 ; i<256 ; i++)
|
||||||
|
translate32[i] = d_8to24rgbtable[translate[i]];
|
||||||
|
|
||||||
|
out = pixels;
|
||||||
|
fracstep = tinwidth*0x10000/scaled_width;
|
||||||
|
for (i=0 ; i<scaled_height ; i++, out += scaled_width)
|
||||||
|
{
|
||||||
|
inrow = original + inwidth*(i*tinheight/scaled_height);
|
||||||
|
frac = fracstep >> 1;
|
||||||
|
for (j=0 ; j<scaled_width ; j+=4)
|
||||||
|
{
|
||||||
|
out[j] = translate32[inrow[frac>>16]];
|
||||||
|
frac += fracstep;
|
||||||
|
out[j+1] = translate32[inrow[frac>>16]];
|
||||||
|
frac += fracstep;
|
||||||
|
out[j+2] = translate32[inrow[frac>>16]];
|
||||||
|
frac += fracstep;
|
||||||
|
out[j+3] = translate32[inrow[frac>>16]];
|
||||||
|
frac += fracstep;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
texnums->base = texture_extension_number++;
|
||||||
|
GL_Bind(texnums->base);
|
||||||
|
qglTexImage2D (GL_TEXTURE_2D, 0, gl_solid_format, scaled_width, scaled_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
|
||||||
|
|
||||||
|
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
|
||||||
|
|
||||||
|
//now do the fullbrights.
|
||||||
|
out = pixels;
|
||||||
|
fracstep = tinwidth*0x10000/scaled_width;
|
||||||
|
for (i=0 ; i<scaled_height ; i++, out += scaled_width)
|
||||||
|
{
|
||||||
|
inrow = original + inwidth*(i*tinheight/scaled_height);
|
||||||
|
frac = fracstep >> 1;
|
||||||
|
for (j=0 ; j<scaled_width ; j+=1)
|
||||||
|
{
|
||||||
|
if (inrow[frac>>16] < 255-vid.fullbright)
|
||||||
|
((char *) (&out[j]))[3] = 0; //alpha 0
|
||||||
|
frac += fracstep;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
texnums->fullbright = texture_extension_number++;
|
||||||
|
GL_Bind(texnums->fullbright);
|
||||||
|
qglTexImage2D (GL_TEXTURE_2D, 0, gl_alpha_format, scaled_width, scaled_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
|
||||||
|
|
||||||
|
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
}
|
}
|
||||||
texnums->fullbright = texture_extension_number++;
|
else
|
||||||
GL_Bind(texnums->fullbright);
|
{
|
||||||
qglTexImage2D (GL_TEXTURE_2D, 0, gl_alpha_format, scaled_width, scaled_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
|
skins = (galiasskin_t*)((char *)inf + inf->ofsskins);
|
||||||
|
if (e->skinnum >= 0 && e->skinnum < inf->numskins)
|
||||||
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
skins += e->skinnum;
|
||||||
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
|
||||||
|
if (!skins->texnums)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
frame = cl.time*skins->skinspeed;
|
||||||
|
frame = frame%skins->texnums;
|
||||||
|
texnums = (galiastexnum_t*)((char *)skins + skins->ofstexnums + frame*sizeof(galiastexnum_t));
|
||||||
|
memcpy(&cm->texnum, texnums, sizeof(cm->texnum));
|
||||||
|
}
|
||||||
|
return &cm->texnum;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
skins = (galiasskin_t*)((char *)inf + inf->ofsskins);
|
|
||||||
if (e->skinnum >= 0 && e->skinnum < inf->numskins)
|
|
||||||
skins += e->skinnum;
|
|
||||||
|
|
||||||
if (!skins->texnums)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
frame = cl.time*skins->skinspeed;
|
|
||||||
frame = frame%skins->texnums;
|
|
||||||
texnums = (galiastexnum_t*)((char *)skins + skins->ofstexnums + frame*sizeof(galiastexnum_t));
|
|
||||||
memcpy(&cm->texnum, texnums, sizeof(cm->texnum));
|
|
||||||
}
|
|
||||||
return &cm->texnum;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
skins = (galiasskin_t*)((char *)inf + inf->ofsskins);
|
skins = (galiasskin_t*)((char *)inf + inf->ofsskins);
|
||||||
|
|
|
@ -1881,6 +1881,10 @@ R_ModifyColor
|
||||||
*/
|
*/
|
||||||
void R_ModifyColor ( meshbuffer_t *mb, shaderpass_t *pass )
|
void R_ModifyColor ( meshbuffer_t *mb, shaderpass_t *pass )
|
||||||
{
|
{
|
||||||
|
extern qbyte *host_basepal;
|
||||||
|
extern qboolean gammaworks;
|
||||||
|
extern qbyte gammatable[256];
|
||||||
|
|
||||||
int i, b;
|
int i, b;
|
||||||
float *table, c, a;
|
float *table, c, a;
|
||||||
vec3_t t, v;
|
vec3_t t, v;
|
||||||
|
@ -1952,6 +1956,87 @@ void R_ModifyColor ( meshbuffer_t *mb, shaderpass_t *pass )
|
||||||
case RGB_GEN_EXACT_VERTEX:
|
case RGB_GEN_EXACT_VERTEX:
|
||||||
memcpy ( bArray, vArray, sizeof(byte_vec4_t)*numColors );
|
memcpy ( bArray, vArray, sizeof(byte_vec4_t)*numColors );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case RGB_GEN_TOPCOLOR: //multiply vertex by topcolor (for player models)
|
||||||
|
{
|
||||||
|
int rc, gc, bc;
|
||||||
|
if (currententity->scoreboard)
|
||||||
|
{
|
||||||
|
i = currententity->scoreboard->topcolor;
|
||||||
|
//colour forcing
|
||||||
|
if (cl.splitclients<2 && !(cl.fpd & FPD_NO_FORCE_COLOR)) //no colour/skin forcing in splitscreen.
|
||||||
|
{
|
||||||
|
if (cl.teamplay && !strcmp(currententity->scoreboard->team, cl.players[cl.playernum[0]].team))
|
||||||
|
{
|
||||||
|
if (cl_teamtopcolor>=0)
|
||||||
|
i = cl_teamtopcolor;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (cl_enemytopcolor>=0)
|
||||||
|
i = cl_enemytopcolor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
i = TOP_RANGE>>4;
|
||||||
|
rc = host_basepal[i<<4];
|
||||||
|
gc = host_basepal[i<<4];
|
||||||
|
bc = host_basepal[i<<4];
|
||||||
|
if (!gammaworks)
|
||||||
|
{
|
||||||
|
rc = gammatable[rc];
|
||||||
|
gc = gammatable[gc];
|
||||||
|
bc = gammatable[bc];
|
||||||
|
}
|
||||||
|
for ( i = 0; i < numColors; i++, bArray += 4, vArray += 4 ) {
|
||||||
|
bArray[0] = (vArray[0]*rc)>>8;
|
||||||
|
bArray[1] = (vArray[1]*gc)>>8;
|
||||||
|
bArray[2] = (vArray[2]*bc)>>8;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case RGB_GEN_BOTTOMCOLOR: //multiply vertex by bottomcolor (for player models)
|
||||||
|
{
|
||||||
|
int rc, gc, bc;
|
||||||
|
if (currententity->scoreboard)
|
||||||
|
{
|
||||||
|
i = currententity->scoreboard->bottomcolor;
|
||||||
|
//colour forcing
|
||||||
|
if (cl.splitclients<2 && !(cl.fpd & FPD_NO_FORCE_COLOR)) //no colour/skin forcing in splitscreen.
|
||||||
|
{
|
||||||
|
if (cl.teamplay && !strcmp(currententity->scoreboard->team, cl.players[cl.playernum[0]].team))
|
||||||
|
{
|
||||||
|
if (cl_teambottomcolor>=0)
|
||||||
|
i = cl_teambottomcolor;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (cl_enemybottomcolor>=0)
|
||||||
|
i = cl_enemybottomcolor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
i = BOTTOM_RANGE>>4;
|
||||||
|
rc = host_basepal[i<<4];
|
||||||
|
gc = host_basepal[i<<4];
|
||||||
|
bc = host_basepal[i<<4];
|
||||||
|
if (!gammaworks)
|
||||||
|
{
|
||||||
|
rc = gammatable[rc];
|
||||||
|
gc = gammatable[gc];
|
||||||
|
bc = gammatable[bc];
|
||||||
|
}
|
||||||
|
for ( i = 0; i < numColors; i++, bArray += 4, vArray += 4 ) {
|
||||||
|
bArray[0] = (vArray[0]*rc)>>8;
|
||||||
|
bArray[1] = (vArray[1]*gc)>>8;
|
||||||
|
bArray[2] = (vArray[2]*bc)>>8;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
case RGB_GEN_ONE_MINUS_VERTEX:
|
case RGB_GEN_ONE_MINUS_VERTEX:
|
||||||
for ( i = 0; i < numColors; i++, bArray += 4, vArray += 4 ) {
|
for ( i = 0; i < numColors; i++, bArray += 4, vArray += 4 ) {
|
||||||
|
|
|
@ -548,6 +548,7 @@ model_t *GLMod_LoadModel (model_t *mod, qboolean crash)
|
||||||
{
|
{
|
||||||
Mod_LoadQ2BrushModel (mod, buf);
|
Mod_LoadQ2BrushModel (mod, buf);
|
||||||
mod->needload = false;
|
mod->needload = false;
|
||||||
|
R_DefaultTrail(mod);
|
||||||
return mod;
|
return mod;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -561,11 +562,14 @@ model_t *GLMod_LoadModel (model_t *mod, qboolean crash)
|
||||||
{
|
{
|
||||||
char mdlbase[MAX_QPATH];
|
char mdlbase[MAX_QPATH];
|
||||||
COM_StripExtension(mod->name, mdlbase);
|
COM_StripExtension(mod->name, mdlbase);
|
||||||
|
#ifdef MD3MODELS
|
||||||
if (!buf)
|
if (!buf)
|
||||||
buf = (unsigned *)COM_LoadStackFile (va("%s.md3", mdlbase), stackbuf, sizeof(stackbuf));
|
buf = (unsigned *)COM_LoadStackFile (va("%s.md3", mdlbase), stackbuf, sizeof(stackbuf));
|
||||||
|
#endif
|
||||||
|
#ifdef MD2MODELS
|
||||||
if (!buf)
|
if (!buf)
|
||||||
buf = (unsigned *)COM_LoadStackFile (va("%s.md2", mdlbase), stackbuf, sizeof(stackbuf));
|
buf = (unsigned *)COM_LoadStackFile (va("%s.md2", mdlbase), stackbuf, sizeof(stackbuf));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
if (!buf)
|
if (!buf)
|
||||||
{
|
{
|
||||||
|
@ -578,6 +582,7 @@ model_t *GLMod_LoadModel (model_t *mod, qboolean crash)
|
||||||
{
|
{
|
||||||
mod->needload = false;
|
mod->needload = false;
|
||||||
GLMod_LoadDoomSprite(mod);
|
GLMod_LoadDoomSprite(mod);
|
||||||
|
R_DefaultTrail(mod);
|
||||||
return mod;
|
return mod;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -595,6 +600,7 @@ couldntload:
|
||||||
mod->maxs[1] = 16;
|
mod->maxs[1] = 16;
|
||||||
mod->maxs[2] = 16;
|
mod->maxs[2] = 16;
|
||||||
mod->needload = true;
|
mod->needload = true;
|
||||||
|
R_DefaultTrail(mod);
|
||||||
return mod;
|
return mod;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1808,7 +1808,7 @@ void PPL_BaseBModelTextures(entity_t *e)
|
||||||
void PPL_BaseEntTextures(void)
|
void PPL_BaseEntTextures(void)
|
||||||
{
|
{
|
||||||
extern model_t *currentmodel;
|
extern model_t *currentmodel;
|
||||||
int i;
|
int i,j;
|
||||||
|
|
||||||
if (!r_drawentities.value)
|
if (!r_drawentities.value)
|
||||||
return;
|
return;
|
||||||
|
@ -1818,6 +1818,17 @@ void PPL_BaseEntTextures(void)
|
||||||
{
|
{
|
||||||
currententity = &cl_visedicts[i];
|
currententity = &cl_visedicts[i];
|
||||||
|
|
||||||
|
j = currententity->keynum;
|
||||||
|
while(j)
|
||||||
|
{
|
||||||
|
if (j == cl.viewentity[r_refdef.currentplayernum]+1)
|
||||||
|
break;
|
||||||
|
|
||||||
|
j = cl.lerpents[j].tagent;
|
||||||
|
}
|
||||||
|
if (j)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (cl.viewentity[r_refdef.currentplayernum] && currententity->keynum == cl.viewentity[r_refdef.currentplayernum])
|
if (cl.viewentity[r_refdef.currentplayernum] && currententity->keynum == cl.viewentity[r_refdef.currentplayernum])
|
||||||
continue;
|
continue;
|
||||||
if (!Cam_DrawPlayer(0, currententity->keynum-1))
|
if (!Cam_DrawPlayer(0, currententity->keynum-1))
|
||||||
|
|
|
@ -144,12 +144,12 @@ void GLSCR_UpdateScreen (void)
|
||||||
//let let the user be too crazy
|
//let let the user be too crazy
|
||||||
if (vid_conwidth.value > 2048) //anything higher is unreadable.
|
if (vid_conwidth.value > 2048) //anything higher is unreadable.
|
||||||
Cvar_Set(&vid_conwidth, "2048");
|
Cvar_Set(&vid_conwidth, "2048");
|
||||||
if (vid_conwidth.value < 320) //lower would be wrong
|
if (vid_conwidth.value < 240) //lower would be wrong
|
||||||
Cvar_Set(&vid_conwidth, "320");
|
Cvar_Set(&vid_conwidth, "320");
|
||||||
if (vid_conheight.value > 1536) //anything higher is unreadable.
|
if (vid_conheight.value > 1536) //anything higher is unreadable.
|
||||||
Cvar_Set(&vid_conheight, "1536");
|
Cvar_Set(&vid_conheight, "1536");
|
||||||
if (vid_conheight.value < 320) //lower would be wrong
|
if (vid_conheight.value < 240) //lower would be wrong
|
||||||
Cvar_Set(&vid_conheight, "320");
|
Cvar_Set(&vid_conheight, "200");
|
||||||
|
|
||||||
vid_conwidth.modified = false;
|
vid_conwidth.modified = false;
|
||||||
vid_conheight.modified = false;
|
vid_conheight.modified = false;
|
||||||
|
|
|
@ -651,32 +651,38 @@ static void Shaderpass_RGBGen ( shader_t *shader, shaderpass_t *pass, char **ptr
|
||||||
char *token;
|
char *token;
|
||||||
|
|
||||||
token = Shader_ParseString ( ptr );
|
token = Shader_ParseString ( ptr );
|
||||||
if ( !Q_stricmp (token, "identitylighting") ) {
|
if ( !Q_stricmp (token, "identitylighting") )
|
||||||
pass->rgbgen = RGB_GEN_IDENTITY_LIGHTING;
|
pass->rgbgen = RGB_GEN_IDENTITY_LIGHTING;
|
||||||
} else if ( !Q_stricmp (token, "identity") ) {
|
else if ( !Q_stricmp (token, "identity") )
|
||||||
pass->rgbgen = RGB_GEN_IDENTITY;
|
pass->rgbgen = RGB_GEN_IDENTITY;
|
||||||
} else if ( !Q_stricmp (token, "wave") ) {
|
else if ( !Q_stricmp (token, "wave") )
|
||||||
|
{
|
||||||
pass->rgbgen = RGB_GEN_WAVE;
|
pass->rgbgen = RGB_GEN_WAVE;
|
||||||
|
|
||||||
Shader_ParseFunc ( ptr, &pass->rgbgen_func );
|
Shader_ParseFunc ( ptr, &pass->rgbgen_func );
|
||||||
} else if ( !Q_stricmp(token, "entity") ) {
|
}
|
||||||
|
else if ( !Q_stricmp(token, "entity") )
|
||||||
pass->rgbgen = RGB_GEN_ENTITY;
|
pass->rgbgen = RGB_GEN_ENTITY;
|
||||||
} else if ( !Q_stricmp (token, "oneMinusEntity") ) {
|
else if ( !Q_stricmp (token, "oneMinusEntity") )
|
||||||
pass->rgbgen = RGB_GEN_ONE_MINUS_ENTITY;
|
pass->rgbgen = RGB_GEN_ONE_MINUS_ENTITY;
|
||||||
} else if ( !Q_stricmp (token, "vertex")) {
|
else if ( !Q_stricmp (token, "vertex"))
|
||||||
pass->rgbgen = RGB_GEN_VERTEX;
|
pass->rgbgen = RGB_GEN_VERTEX;
|
||||||
} else if ( !Q_stricmp (token, "oneMinusVertex") ) {
|
else if ( !Q_stricmp (token, "oneMinusVertex") )
|
||||||
pass->rgbgen = RGB_GEN_ONE_MINUS_VERTEX;
|
pass->rgbgen = RGB_GEN_ONE_MINUS_VERTEX;
|
||||||
} else if ( !Q_stricmp (token, "lightingDiffuse") ) {
|
else if ( !Q_stricmp (token, "lightingDiffuse") )
|
||||||
pass->rgbgen = RGB_GEN_LIGHTING_DIFFUSE;
|
pass->rgbgen = RGB_GEN_LIGHTING_DIFFUSE;
|
||||||
} else if ( !Q_stricmp (token, "exactvertex") ) {
|
else if ( !Q_stricmp (token, "exactvertex") )
|
||||||
pass->rgbgen = RGB_GEN_EXACT_VERTEX;
|
pass->rgbgen = RGB_GEN_EXACT_VERTEX;
|
||||||
} else if ( !Q_stricmp (token, "const") || !Q_stricmp (token, "constant") ) {
|
else if ( !Q_stricmp (token, "const") || !Q_stricmp (token, "constant") )
|
||||||
|
{
|
||||||
pass->rgbgen = RGB_GEN_CONST;
|
pass->rgbgen = RGB_GEN_CONST;
|
||||||
pass->rgbgen_func.type = SHADER_FUNC_CONSTANT;
|
pass->rgbgen_func.type = SHADER_FUNC_CONSTANT;
|
||||||
|
|
||||||
Shader_ParseVector ( ptr, pass->rgbgen_func.args );
|
Shader_ParseVector ( ptr, pass->rgbgen_func.args );
|
||||||
}
|
}
|
||||||
|
else if ( !Q_stricmp (token, "topcolor") )
|
||||||
|
pass->rgbgen = RGB_GEN_TOPCOLOR;
|
||||||
|
else if ( !Q_stricmp (token, "bottomcolor") )
|
||||||
|
pass->rgbgen = RGB_GEN_BOTTOMCOLOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Shaderpass_AlphaGen ( shader_t *shader, shaderpass_t *pass, char **ptr )
|
static void Shaderpass_AlphaGen ( shader_t *shader, shaderpass_t *pass, char **ptr )
|
||||||
|
|
|
@ -842,7 +842,8 @@ qboolean GLVID_Init (rendererstate_t *info, unsigned char *palette)
|
||||||
|
|
||||||
GL_Init(&GLX_GetSymbol);
|
GL_Init(&GLX_GetSymbol);
|
||||||
|
|
||||||
VID_SetPalette(palette);
|
GLVID_SetPalette(palette);
|
||||||
|
GLVID_ShiftPalette(palette);
|
||||||
|
|
||||||
Con_SafePrintf ("Video mode %dx%d initialized.\n", info->width, info->height);
|
Con_SafePrintf ("Video mode %dx%d initialized.\n", info->width, info->height);
|
||||||
|
|
||||||
|
|
|
@ -138,7 +138,9 @@ typedef struct shaderpass_s {
|
||||||
RGB_GEN_IDENTITY,
|
RGB_GEN_IDENTITY,
|
||||||
RGB_GEN_CONST,
|
RGB_GEN_CONST,
|
||||||
RGB_GEN_UNKNOWN,
|
RGB_GEN_UNKNOWN,
|
||||||
RGB_GEN_LIGHTING_DIFFUSE
|
RGB_GEN_LIGHTING_DIFFUSE,
|
||||||
|
RGB_GEN_TOPCOLOR,
|
||||||
|
RGB_GEN_BOTTOMCOLOR
|
||||||
} rgbgen;
|
} rgbgen;
|
||||||
enum {
|
enum {
|
||||||
ALPHA_GEN_ENTITY,
|
ALPHA_GEN_ENTITY,
|
||||||
|
|
|
@ -1000,6 +1000,7 @@ pbool ED_ParseEpair (progfuncs_t *progfuncs, void *base, ddefXX_t *key, char *s,
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Sys_Error("Bad bits in ED_ParseEpair");
|
Sys_Error("Bad bits in ED_ParseEpair");
|
||||||
|
d = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
|
|
|
@ -7669,7 +7669,7 @@ void PF_setattachment(progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||||
|
|
||||||
if (tagentity != sv.edicts && tagname && tagname[0])
|
if (tagentity != sv.edicts && tagname && tagname[0])
|
||||||
{
|
{
|
||||||
modelindex = (int)e->v.modelindex;
|
modelindex = (int)tagentity->v.modelindex;
|
||||||
if (modelindex > 0 && modelindex < MAX_MODELS && (model = SV_GetTags(modelindex, &tagcount)))
|
if (modelindex > 0 && modelindex < MAX_MODELS && (model = SV_GetTags(modelindex, &tagcount)))
|
||||||
{
|
{
|
||||||
for (i = 0;i < tagcount;i++)
|
for (i = 0;i < tagcount;i++)
|
||||||
|
|
|
@ -1281,24 +1281,24 @@ void SVC_DirectConnect
|
||||||
if (atof(Info_ValueForKey (temp.userinfo, "*FuhQuake")) < 0.3)
|
if (atof(Info_ValueForKey (temp.userinfo, "*FuhQuake")) < 0.3)
|
||||||
{
|
{
|
||||||
SV_OutOfBandPrintf (isquake2client, adr, "%c\nThe server is using a halflife level and we don't think your client supports this\nuse 'setinfo iknow 1' to ignore this check\nYou can go to "ENGINEWEBSITE" to get a compatable client\n\nYou may need to enable an option\n\n", A2C_PRINT);
|
SV_OutOfBandPrintf (isquake2client, adr, "%c\nThe server is using a halflife level and we don't think your client supports this\nuse 'setinfo iknow 1' to ignore this check\nYou can go to "ENGINEWEBSITE" to get a compatable client\n\nYou may need to enable an option\n\n", A2C_PRINT);
|
||||||
Con_Printf("player %s was dropped due to incompatable client\n", name);
|
// Con_Printf("player %s was dropped due to incompatable client\n", name);
|
||||||
return;
|
// return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef PEXT_Q2BSP
|
#ifdef PEXT_Q2BSP
|
||||||
else if (sv.worldmodel->fromgame == fg_quake2 && !(newcl->fteprotocolextensions & PEXT_Q2BSP))
|
else if (sv.worldmodel->fromgame == fg_quake2 && !(newcl->fteprotocolextensions & PEXT_Q2BSP))
|
||||||
{
|
{
|
||||||
SV_OutOfBandPrintf (isquake2client, adr, "%c\nThe server is using a quake 2 level and we don't think your client supports this\nuse 'setinfo iknow 1' to ignore this check\nYou can go to "ENGINEWEBSITE" to get a compatable client\n\nYou may need to enable an option\n\n", A2C_PRINT);
|
SV_OutOfBandPrintf (isquake2client, adr, "%c\nThe server is using a quake 2 level and we don't think your client supports this\nuse 'setinfo iknow 1' to ignore this check\nYou can go to "ENGINEWEBSITE" to get a compatable client\n\nYou may need to enable an option\n\n", A2C_PRINT);
|
||||||
Con_Printf("player %s was dropped due to incompatable client\n", name);
|
// Con_Printf("player %s was dropped due to incompatable client\n", name);
|
||||||
return;
|
// return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef PEXT_Q3BSP
|
#ifdef PEXT_Q3BSP
|
||||||
else if (sv.worldmodel->fromgame == fg_quake3 && !(newcl->fteprotocolextensions & PEXT_Q3BSP))
|
else if (sv.worldmodel->fromgame == fg_quake3 && !(newcl->fteprotocolextensions & PEXT_Q3BSP))
|
||||||
{
|
{
|
||||||
SV_OutOfBandPrintf (isquake2client, adr, "%c\nThe server is using a quake 3 level and we don't think your client supports this\nuse 'setinfo iknow 1' to ignore this check\nYou can go to "ENGINEWEBSITE" to get a compatable client\n\nYou may need to enable an option\n\n", A2C_PRINT);
|
SV_OutOfBandPrintf (isquake2client, adr, "%c\nThe server is using a quake 3 level and we don't think your client supports this\nuse 'setinfo iknow 1' to ignore this check\nYou can go to "ENGINEWEBSITE" to get a compatable client\n\nYou may need to enable an option\n\n", A2C_PRINT);
|
||||||
Con_Printf("player %s was dropped due to incompatable client\n", name);
|
// Con_Printf("player %s was dropped due to incompatable client\n", name);
|
||||||
return;
|
// return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -195,20 +195,27 @@ void R_InitSkyBox (void)
|
||||||
|
|
||||||
wm = cl.worldmodel;
|
wm = cl.worldmodel;
|
||||||
|
|
||||||
r_skyfaces = wm->surfaces + wm->numsurfaces;
|
Hunk_Check();
|
||||||
wm->numsurfaces += 6;
|
|
||||||
r_skyverts = wm->vertexes + wm->numvertexes;
|
if (wm->numsurfaces+6 > MAX_MAP_FACES
|
||||||
wm->numvertexes += 8;
|
|| wm->numvertexes+8 > MAX_MAP_VERTS
|
||||||
r_skyedges = wm->edges + wm->numedges;
|
|| wm->numedges+12 > MAX_MAP_EDGES)
|
||||||
wm->numedges += 12;
|
|
||||||
r_skysurfedges = wm->surfedges + wm->numsurfedges;
|
|
||||||
wm->numsurfedges += 24;
|
|
||||||
if (wm->numsurfaces > MAX_MAP_FACES
|
|
||||||
|| wm->numvertexes > MAX_MAP_VERTS
|
|
||||||
|| wm->numedges > MAX_MAP_EDGES)
|
|
||||||
Host_Error ("InitSkyBox: map overflow");
|
Host_Error ("InitSkyBox: map overflow");
|
||||||
|
|
||||||
|
r_skyfaces = wm->surfaces + wm->numsurfaces;
|
||||||
|
// wm->numsurfaces += 6;
|
||||||
|
r_skyverts = wm->vertexes + wm->numvertexes;
|
||||||
|
// wm->numvertexes += 8;
|
||||||
|
r_skyedges = wm->edges + wm->numedges;
|
||||||
|
// wm->numedges += 12;
|
||||||
|
r_skysurfedges = wm->surfedges + wm->numsurfedges;
|
||||||
|
// wm->numsurfedges += 24;
|
||||||
|
|
||||||
|
Hunk_Check();
|
||||||
|
|
||||||
memset (r_skyfaces, 0, 6*sizeof(*r_skyfaces));
|
memset (r_skyfaces, 0, 6*sizeof(*r_skyfaces));
|
||||||
|
|
||||||
|
Hunk_Check();
|
||||||
for (i=0 ; i<6 ; i++)
|
for (i=0 ; i<6 ; i++)
|
||||||
{
|
{
|
||||||
r_skyplanes[i].normal[skybox_planes[i*2]] = 1;
|
r_skyplanes[i].normal[skybox_planes[i*2]] = 1;
|
||||||
|
@ -220,26 +227,30 @@ void R_InitSkyBox (void)
|
||||||
r_skyfaces[i].plane = &r_skyplanes[i];
|
r_skyfaces[i].plane = &r_skyplanes[i];
|
||||||
r_skyfaces[i].numedges = 4;
|
r_skyfaces[i].numedges = 4;
|
||||||
r_skyfaces[i].flags = box_faces[i] | SURF_DRAWSKYBOX;
|
r_skyfaces[i].flags = box_faces[i] | SURF_DRAWSKYBOX;
|
||||||
r_skyfaces[i].firstedge = wm->numsurfedges-24+i*4;
|
r_skyfaces[i].firstedge = wm->numsurfedges+i*4;
|
||||||
r_skyfaces[i].texinfo = &r_skytexinfo[i];
|
r_skyfaces[i].texinfo = &r_skytexinfo[i];
|
||||||
r_skyfaces[i].texturemins[0] = -128;
|
r_skyfaces[i].texturemins[0] = -128;
|
||||||
r_skyfaces[i].texturemins[1] = -128;
|
r_skyfaces[i].texturemins[1] = -128;
|
||||||
r_skyfaces[i].extents[0] = 256;
|
r_skyfaces[i].extents[0] = 256;
|
||||||
r_skyfaces[i].extents[1] = 256;
|
r_skyfaces[i].extents[1] = 256;
|
||||||
}
|
}
|
||||||
|
Hunk_Check();
|
||||||
|
|
||||||
for (i=0 ; i<24 ; i++)
|
for (i=0 ; i<24 ; i++)
|
||||||
if (box_surfedges[i] > 0)
|
if (box_surfedges[i] > 0)
|
||||||
r_skysurfedges[i] = wm->numedges-13 + box_surfedges[i];
|
r_skysurfedges[i] = wm->numedges-12 + box_surfedges[i];
|
||||||
else
|
else
|
||||||
r_skysurfedges[i] = - (wm->numedges-13 + -box_surfedges[i]);
|
r_skysurfedges[i] = - (wm->numedges-12 + -box_surfedges[i]);
|
||||||
|
|
||||||
|
Hunk_Check();
|
||||||
|
|
||||||
for(i=0 ; i<12 ; i++)
|
for(i=0 ; i<12 ; i++)
|
||||||
{
|
{
|
||||||
r_skyedges[i].v[0] = wm->numvertexes-9+box_edges[i*2+0];
|
r_skyedges[i].v[0] = wm->numvertexes-8+box_edges[i*2+0];
|
||||||
r_skyedges[i].v[1] = wm->numvertexes-9+box_edges[i*2+1];
|
r_skyedges[i].v[1] = wm->numvertexes-8+box_edges[i*2+1];
|
||||||
r_skyedges[i].cachededgeoffset = 0;
|
r_skyedges[i].cachededgeoffset = 0;
|
||||||
}
|
}
|
||||||
|
Hunk_Check();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -261,7 +261,7 @@ R_NewMap
|
||||||
void SWR_NewMap (void)
|
void SWR_NewMap (void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
memset (&r_worldentity, 0, sizeof(r_worldentity));
|
memset (&r_worldentity, 0, sizeof(r_worldentity));
|
||||||
AngleVectors(r_worldentity.angles, r_worldentity.axis[0], r_worldentity.axis[1], r_worldentity.axis[2]);
|
AngleVectors(r_worldentity.angles, r_worldentity.axis[0], r_worldentity.axis[1], r_worldentity.axis[2]);
|
||||||
VectorInverse(r_worldentity.axis[1]);
|
VectorInverse(r_worldentity.axis[1]);
|
||||||
|
|
|
@ -2926,9 +2926,6 @@ void SWMod_LoadAlias3Model (model_t *mod, void *buffer)
|
||||||
|
|
||||||
vec3_t mins, maxs;
|
vec3_t mins, maxs;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (!strcmp(loadmodel->name, "progs/player.mdl") ||
|
if (!strcmp(loadmodel->name, "progs/player.mdl") ||
|
||||||
!strcmp(loadmodel->name, "progs/eyes.mdl")) {
|
!strcmp(loadmodel->name, "progs/eyes.mdl")) {
|
||||||
unsigned short crc;
|
unsigned short crc;
|
||||||
|
@ -3225,7 +3222,7 @@ void SWMod_LoadAlias3Model (model_t *mod, void *buffer)
|
||||||
|
|
||||||
//
|
//
|
||||||
// move the complete, relocatable alias model to the cache
|
// move the complete, relocatable alias model to the cache
|
||||||
//
|
//
|
||||||
end = Hunk_LowMark ();
|
end = Hunk_LowMark ();
|
||||||
total = end - start;
|
total = end - start;
|
||||||
|
|
||||||
|
|
|
@ -109,15 +109,20 @@ void R_GammaCorrectAndSetPalette(const unsigned char *pal)
|
||||||
|
|
||||||
void SWAppActivate(BOOL fActive, BOOL minimize)
|
void SWAppActivate(BOOL fActive, BOOL minimize)
|
||||||
{
|
{
|
||||||
|
boolean newa;
|
||||||
Minimized = minimize;
|
Minimized = minimize;
|
||||||
|
|
||||||
Key_ClearStates();
|
|
||||||
|
|
||||||
// we don't want to act like we're active if we're minimized
|
// we don't want to act like we're active if we're minimized
|
||||||
if (fActive && !Minimized)
|
if (fActive && !Minimized)
|
||||||
ActiveApp = true;
|
newa = true;
|
||||||
else
|
else
|
||||||
ActiveApp = false;
|
newa = false;
|
||||||
|
|
||||||
|
if (ActiveApp == newa) //don't pause and resume these too often.
|
||||||
|
return;
|
||||||
|
ActiveApp = newa;
|
||||||
|
|
||||||
|
Key_ClearStates();
|
||||||
|
|
||||||
// minimize/restore mouse-capture on demand
|
// minimize/restore mouse-capture on demand
|
||||||
if (!ActiveApp)
|
if (!ActiveApp)
|
||||||
|
|
Loading…
Reference in a new issue