Small changes, a few bugs fixed.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@905 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2005-03-18 06:14:33 +00:00
parent 67950ee8ac
commit 2000d01334
8 changed files with 108 additions and 6 deletions

View File

@ -591,7 +591,7 @@ static galiastexnum_t *GL_ChooseSkin(galiasinfo_t *inf, char *modelname, entity_
int tc, bc;
if (!gl_nocolors.value)
if (!gl_nocolors.value && !cls.q2server)
{
if (e->scoreboard)
{
@ -809,6 +809,9 @@ static galiastexnum_t *GL_ChooseSkin(galiasinfo_t *inf, char *modelname, entity_
}
}
if (!inf->numskins)
return NULL;
skins = (galiasskin_t*)((char *)inf + inf->ofsskins);
if (e->skinnum >= 0 && e->skinnum < inf->numskins)
skins += e->skinnum;
@ -2322,13 +2325,15 @@ static void Q2_LoadSkins(char *skins)
int i;
galiastexnum_t *texnums;
galiasskin_t *outskin = (galiasskin_t *)((char *)galias + galias->ofsskins);
galias->numskins = pq2inmodel->num_skins;
for (i = 0; i < pq2inmodel->num_skins; i++)
for (i = 0; i < pq2inmodel->num_skins; i++, outskin++)
{
texnums = Hunk_Alloc(sizeof(*texnums));
outskin->ofstexnums = (char *)texnums - (char *)outskin;
outskin->texnums=1;
COM_CleanUpPath(skins); //blooming tanks.
texnums->base = Mod_LoadReplacementTexture(skins, true, false, true);
outskin->skinwidth = 0;
outskin->skinheight = 0;
@ -2374,6 +2379,8 @@ void GL_LoadQ2Model (model_t *mod, void *buffer)
pq2inmodel = (md2_t *)buffer;
//FIXME: Endian
version = LittleLong (pq2inmodel->version);
if (version != MD2ALIAS_VERSION)
Sys_Error ("%s has wrong version number (%i should be %i)",
@ -2390,6 +2397,8 @@ void GL_LoadQ2Model (model_t *mod, void *buffer)
mod->flags = 0;
loadmodel->numframes = pq2inmodel->num_frames;
size = sizeof(galiasinfo_t)
+ pq2inmodel->num_frames*sizeof(galiasgroup_t)
+ pq2inmodel->num_skins*sizeof(galiasskin_t);
@ -2800,6 +2809,8 @@ void GL_LoadQ3Model(model_t *mod, void *buffer)
surf = (md3Surface_t *)((qbyte *)header + header->ofsSurfaces);
for (s = 0; s < header->numSurfaces; s++)
{
if (surf->ident != MD3_IDENT)
Con_Printf("Warning: md3 sub-surface doesn't match ident\n");
size = sizeof(galiasinfo_t) + sizeof(galiasgroup_t)*header->numFrames;
galias = Hunk_Alloc(size);
galias->groupofs = sizeof(*galias); //frame groups

View File

@ -247,6 +247,11 @@ qboolean Draw_RealPicFromWad (mpic_t *out, char *name)
if (texnum)
{
if (!in)
{
out->width = image_width;
out->height = image_height;
}
gl->texnum = texnum;
gl->sl = 0;
gl->sh = 1;

View File

@ -3038,6 +3038,8 @@ void GLMod_LoadSprite2Model (model_t *mod, void *buffer)
frame->down = frame->height - origin[1];
frame->left = -origin[0];
frame->right = frame->width - origin[0];
pframetype++;
}
mod->type = mod_sprite;

View File

@ -805,7 +805,7 @@ void CM_Init(void);
qboolean CM_SetAreaPortalState (int portalnum, qboolean open);
qboolean CM_HeadnodeVisible (int nodenum, qbyte *visbits);
qboolean CM_AreasConnected (int area1, int area2);
qboolean VARGS CM_AreasConnected (int area1, int area2);
int CM_NumClusters (void);
int CM_ClusterSize (void);
int CM_LeafContents (int leafnum);
@ -824,7 +824,7 @@ struct model_s *CM_TempBoxModel(vec3_t mins, vec3_t maxs);
void Mod_ParseInfoFromEntityLump(char *data);
void CMQ2_SetAreaPortalState (int portalnum, qboolean open);
void VARGS CMQ2_SetAreaPortalState (int portalnum, qboolean open);
#endif

View File

@ -1806,6 +1806,75 @@ void PPL_BaseBModelTextures(entity_t *e)
R_IBrokeTheArrays();
}
void RotatePointAroundVector( vec3_t dst, const vec3_t dir, const vec3_t point, float degrees );
void PerpendicularVector( vec3_t dst, const vec3_t src );
void R_DrawBeam( entity_t *e )
{
#define NUM_BEAM_SEGS 6
int i;
float r, g, b;
vec3_t perpvec;
vec3_t direction, normalized_direction;
vec3_t start_points[NUM_BEAM_SEGS], end_points[NUM_BEAM_SEGS];
vec3_t oldorigin, origin;
oldorigin[0] = e->oldorigin[0];
oldorigin[1] = e->oldorigin[1];
oldorigin[2] = e->oldorigin[2];
origin[0] = e->origin[0];
origin[1] = e->origin[1];
origin[2] = e->origin[2];
normalized_direction[0] = direction[0] = oldorigin[0] - origin[0];
normalized_direction[1] = direction[1] = oldorigin[1] - origin[1];
normalized_direction[2] = direction[2] = oldorigin[2] - origin[2];
if ( VectorNormalize( normalized_direction ) == 0 )
return;
PerpendicularVector( perpvec, normalized_direction );
VectorScale( perpvec, e->frame / 2, perpvec );
for ( i = 0; i < 6; i++ )
{
RotatePointAroundVector( start_points[i], normalized_direction, perpvec, (360.0/NUM_BEAM_SEGS)*i );
VectorAdd( start_points[i], origin, start_points[i] );
VectorAdd( start_points[i], direction, end_points[i] );
}
qglDisable( GL_TEXTURE_2D );
qglEnable( GL_BLEND );
qglDepthMask( GL_FALSE );
qglDisable(GL_ALPHA_TEST);
r = ( d_8to24rgbtable[e->skinnum & 0xFF] ) & 0xFF;
g = ( d_8to24rgbtable[e->skinnum & 0xFF] >> 8 ) & 0xFF;
b = ( d_8to24rgbtable[e->skinnum & 0xFF] >> 16 ) & 0xFF;
r *= 1/255.0F;
g *= 1/255.0F;
b *= 1/255.0F;
qglColor4f( r, g, b, e->alpha );
qglBegin( GL_TRIANGLE_STRIP );
for ( i = 0; i < NUM_BEAM_SEGS; i++ )
{
qglVertex3fv( start_points[i] );
qglVertex3fv( end_points[i] );
qglVertex3fv( start_points[(i+1)%NUM_BEAM_SEGS] );
qglVertex3fv( end_points[(i+1)%NUM_BEAM_SEGS] );
}
qglEnd();
qglEnable( GL_TEXTURE_2D );
qglDisable( GL_BLEND );
qglDepthMask( GL_TRUE );
}
void PPL_BaseEntTextures(void)
{
extern qboolean r_inmirror;
@ -1849,6 +1918,11 @@ void PPL_BaseEntTextures(void)
continue;
}
if (currententity->flags & Q2RF_BEAM)
{
R_DrawBeam(currententity);
continue;
}
if (!currententity->model)
continue;
@ -2419,6 +2493,9 @@ void PPL_DrawEntFullBrights(void)
if (!Cam_DrawPlayer(0, currententity->keynum-1))
continue;
if (currententity->flags & Q2RF_BEAM)
continue;
if (!currententity->model)
continue;

View File

@ -731,6 +731,9 @@ void GLR_DrawEntitiesOnList (void)
if (!Cam_DrawPlayer(0, currententity->keynum-1))
continue;
if (currententity->flags & Q2RF_BEAM)
continue;
if (!currententity->model)
continue;
@ -787,6 +790,9 @@ void GLR_DrawEntitiesOnList (void)
if (cl.viewentity[r_refdef.currentplayernum] && currententity->keynum == cl.viewentity[r_refdef.currentplayernum])
continue;
if (currententity->flags & Q2RF_BEAM)
continue;
if (!currententity->model)
continue;

View File

@ -3899,7 +3899,7 @@ void GL_BuildLightmaps (void)
gl_lightmap_format = GL_RGB;
if (COM_CheckParm ("-lm_4"))
gl_lightmap_format = GL_RGBA;
if (*gl_lightmapmode.string)
/* if (*gl_lightmapmode.string)
{
switch(*gl_lightmapmode.string)
{
@ -3924,6 +3924,7 @@ void GL_BuildLightmaps (void)
break;
}
}
*/
if (cl.worldmodel->fromgame == fg_quake3 && gl_lightmap_format != GL_RGB && gl_lightmap_format != GL_RGBA)
gl_lightmap_format = GL_RGB;

View File

@ -401,7 +401,7 @@ void R_DrawSkyChain (msurface_t *s)
GL_DisableMultitexture();
if (r_fastsky.value||!solidskytexture) //this is for visability only... we'd otherwise not stoop this low (and this IS low)
if (r_fastsky.value||(!solidskytexture&&!usingskybox)) //this is for visability only... we'd otherwise not stoop this low (and this IS low)
{
int fc;
qbyte *pal;