Fixes the TF teleporter skin bug (which was a general problem with skingroups).

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@2040 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2006-03-01 20:47:24 +00:00
parent 57107d4f5c
commit c2aa755e86
1 changed files with 11 additions and 9 deletions

View File

@ -3078,7 +3078,7 @@ static void *Q1_LoadFrameGroup (daliasframetype_t *pframetype, int *seamremaps)
pframetype = (daliasframetype_t *)pinframe; pframetype = (daliasframetype_t *)pinframe;
break; break;
default: default:
Sys_Error("Bad frame type\n"); Sys_Error("Bad frame type in %s\n", loadmodel->name);
} }
frame++; frame++;
} }
@ -3124,8 +3124,8 @@ static void *Q1_LoadSkins (daliasskintype_t *pskintype, qboolean alpha)
char skinname[MAX_QPATH]; char skinname[MAX_QPATH];
int i; int i;
int s, t; int s, t;
int *count; daliasskingroup_t *count;
float *intervals; daliasskininterval_t *intervals;
qbyte *data, *saved; qbyte *data, *saved;
galiasskin_t *outskin = (galiasskin_t *)((char *)galias + galias->ofsskins); galiasskin_t *outskin = (galiasskin_t *)((char *)galias + galias->ofsskins);
@ -3219,13 +3219,15 @@ static void *Q1_LoadSkins (daliasskintype_t *pskintype, qboolean alpha)
default: default:
outskin->skinwidth = pq1inmodel->skinwidth; outskin->skinwidth = pq1inmodel->skinwidth;
outskin->skinheight = pq1inmodel->skinheight; outskin->skinheight = pq1inmodel->skinheight;
count = (int *)(pskintype+1); count = (daliasskingroup_t*)(pskintype+1);
intervals = (float *)(count+1); intervals = (daliasskininterval_t *)(count+1);
outskin->texnums = LittleLong(*count); outskin->texnums = LittleLong(count->numskins);
data = (qbyte *)(intervals + outskin->texnums); data = (qbyte *)(intervals + outskin->texnums);
texnums = Hunk_Alloc(sizeof(*texnums)*outskin->texnums); texnums = Hunk_Alloc(sizeof(*texnums)*outskin->texnums);
outskin->ofstexnums = (char *)texnums - (char *)outskin; outskin->ofstexnums = (char *)texnums - (char *)outskin;
outskin->ofstexels = 0; outskin->ofstexels = 0;
outskin->skinspeed = 1/LittleFloat(intervals[0].interval);
for (t = 0; t < outskin->texnums; t++,data+=s, texnums++) for (t = 0; t < outskin->texnums; t++,data+=s, texnums++)
{ {
texture = 0; texture = 0;
@ -3264,7 +3266,7 @@ static void *Q1_LoadSkins (daliasskintype_t *pskintype, qboolean alpha)
} }
else else
saved = BZ_Malloc(s); saved = BZ_Malloc(s);
memcpy(saved, pskintype+1, s); memcpy(saved, data, s);
GLMod_FloodFillSkin(saved, outskin->skinwidth, outskin->skinheight); GLMod_FloodFillSkin(saved, outskin->skinwidth, outskin->skinheight);
if (!texture) if (!texture)
{ {
@ -3385,8 +3387,8 @@ void GL_LoadQ1Model (model_t *mod, void *buffer)
galias->ofs_st_array = (char *)st_array - (char *)galias; galias->ofs_st_array = (char *)st_array - (char *)galias;
for (j=pq1inmodel->numverts,i = 0; i < pq1inmodel->numverts; i++) for (j=pq1inmodel->numverts,i = 0; i < pq1inmodel->numverts; i++)
{ {
st_array[i][0] = LittleLong(pinstverts[i].s)/(float)pq1inmodel->skinwidth; st_array[i][0] = (LittleLong(pinstverts[i].s)+0.5)/(float)pq1inmodel->skinwidth;
st_array[i][1] = LittleLong(pinstverts[i].t)/(float)pq1inmodel->skinheight; st_array[i][1] = (LittleLong(pinstverts[i].t)+0.5)/(float)pq1inmodel->skinheight;
if (pinstverts[i].onseam) if (pinstverts[i].onseam)
{ {