mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-11-13 07:58:04 +00:00
Add the 'yoffset' token to model definitions to allow models to compensate for ART tiles with large yoffsets, such as #603. Under normal circumstances the existing 'zadd' parameter should be used instead. Special thanks to Supertanker.
git-svn-id: https://svn.eduke32.com/eduke32@2264 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
ff94311f13
commit
426ef1494e
5 changed files with 18 additions and 8 deletions
|
@ -767,7 +767,7 @@ int32_t hicclearsubst(int32_t picnum, int32_t palnum);
|
||||||
|
|
||||||
int32_t Ptile2tile(int32_t tile, int32_t pallet);
|
int32_t Ptile2tile(int32_t tile, int32_t pallet);
|
||||||
int32_t md_loadmodel(const char *fn);
|
int32_t md_loadmodel(const char *fn);
|
||||||
int32_t md_setmisc(int32_t modelid, float scale, int32_t shadeoff, float zadd, int32_t flags);
|
int32_t md_setmisc(int32_t modelid, float scale, int32_t shadeoff, float zadd, float yoffset, int32_t flags);
|
||||||
// int32_t md_tilehasmodel(int32_t tilenume, int32_t pal);
|
// int32_t md_tilehasmodel(int32_t tilenume, int32_t pal);
|
||||||
|
|
||||||
extern char defsfilename[BMAX_PATH];
|
extern char defsfilename[BMAX_PATH];
|
||||||
|
|
|
@ -9,7 +9,7 @@ typedef struct
|
||||||
{
|
{
|
||||||
int32_t mdnum; //VOX=1, MD2=2, MD3=3. NOTE: must be first in structure!
|
int32_t mdnum; //VOX=1, MD2=2, MD3=3. NOTE: must be first in structure!
|
||||||
int32_t shadeoff;
|
int32_t shadeoff;
|
||||||
float scale, bscale, zadd;
|
float scale, bscale, zadd, yoffset;
|
||||||
GLuint *texid; // skins
|
GLuint *texid; // skins
|
||||||
int32_t flags;
|
int32_t flags;
|
||||||
} mdmodel_t;
|
} mdmodel_t;
|
||||||
|
@ -68,7 +68,7 @@ typedef struct
|
||||||
//WARNING: This top block is a union between md2model&md3model: Make sure it matches!
|
//WARNING: This top block is a union between md2model&md3model: Make sure it matches!
|
||||||
int32_t mdnum; //VOX=1, MD2=2, MD3=3. NOTE: must be first in structure!
|
int32_t mdnum; //VOX=1, MD2=2, MD3=3. NOTE: must be first in structure!
|
||||||
int32_t shadeoff;
|
int32_t shadeoff;
|
||||||
float scale, bscale, zadd;
|
float scale, bscale, zadd, yoffset;
|
||||||
GLuint *texid; // texture ids for base skin if no mappings defined
|
GLuint *texid; // texture ids for base skin if no mappings defined
|
||||||
int32_t flags;
|
int32_t flags;
|
||||||
|
|
||||||
|
@ -154,7 +154,7 @@ typedef struct
|
||||||
//WARNING: This top block is a union between md2model&md3model: Make sure it matches!
|
//WARNING: This top block is a union between md2model&md3model: Make sure it matches!
|
||||||
int32_t mdnum; //VOX=1, MD2=2, MD3=3. NOTE: must be first in structure!
|
int32_t mdnum; //VOX=1, MD2=2, MD3=3. NOTE: must be first in structure!
|
||||||
int32_t shadeoff;
|
int32_t shadeoff;
|
||||||
float scale, bscale, zadd;
|
float scale, bscale, zadd, yoffset;
|
||||||
uint32_t *texid; // texture ids for base skin if no mappings defined
|
uint32_t *texid; // texture ids for base skin if no mappings defined
|
||||||
int32_t flags;
|
int32_t flags;
|
||||||
|
|
||||||
|
|
|
@ -728,7 +728,7 @@ static int32_t defsparser(scriptfile *script)
|
||||||
initprintf("Warning: Failed loading MD2/MD3 model \"%s\"\n", modelfn);
|
initprintf("Warning: Failed loading MD2/MD3 model \"%s\"\n", modelfn);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
md_setmisc(lastmodelid,(float)scale, shadeoffs,0.0,0);
|
md_setmisc(lastmodelid,(float)scale, shadeoffs,0.0,0.0,0);
|
||||||
if (glrendmode==4)
|
if (glrendmode==4)
|
||||||
md3postload_polymer((md3model_t *)models[lastmodelid]);
|
md3postload_polymer((md3model_t *)models[lastmodelid]);
|
||||||
#endif
|
#endif
|
||||||
|
@ -933,7 +933,7 @@ static int32_t defsparser(scriptfile *script)
|
||||||
case T_MODEL:
|
case T_MODEL:
|
||||||
{
|
{
|
||||||
char *modelend, *modelfn;
|
char *modelend, *modelfn;
|
||||||
double scale=1.0, mzadd=0.0;
|
double scale=1.0, mzadd=0.0, myoffset=0.0;
|
||||||
int32_t shadeoffs=0, pal=0, flags=0;
|
int32_t shadeoffs=0, pal=0, flags=0;
|
||||||
uint8_t usedframebitmap[1024>>3];
|
uint8_t usedframebitmap[1024>>3];
|
||||||
|
|
||||||
|
@ -944,6 +944,7 @@ static int32_t defsparser(scriptfile *script)
|
||||||
{ "scale", T_SCALE },
|
{ "scale", T_SCALE },
|
||||||
{ "shade", T_SHADE },
|
{ "shade", T_SHADE },
|
||||||
{ "zadd", T_ZADD },
|
{ "zadd", T_ZADD },
|
||||||
|
{ "yoffset", T_YOFFSET },
|
||||||
{ "frame", T_FRAME },
|
{ "frame", T_FRAME },
|
||||||
{ "anim", T_ANIM },
|
{ "anim", T_ANIM },
|
||||||
{ "skin", T_SKIN },
|
{ "skin", T_SKIN },
|
||||||
|
@ -983,6 +984,8 @@ static int32_t defsparser(scriptfile *script)
|
||||||
scriptfile_getnumber(script,&shadeoffs); break;
|
scriptfile_getnumber(script,&shadeoffs); break;
|
||||||
case T_ZADD:
|
case T_ZADD:
|
||||||
scriptfile_getdouble(script,&mzadd); break;
|
scriptfile_getdouble(script,&mzadd); break;
|
||||||
|
case T_YOFFSET:
|
||||||
|
scriptfile_getdouble(script,&myoffset); break;
|
||||||
case T_FLAGS:
|
case T_FLAGS:
|
||||||
scriptfile_getnumber(script,&flags); break;
|
scriptfile_getnumber(script,&flags); break;
|
||||||
case T_FRAME:
|
case T_FRAME:
|
||||||
|
@ -1344,7 +1347,7 @@ static int32_t defsparser(scriptfile *script)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_OPENGL
|
#ifdef USE_OPENGL
|
||||||
md_setmisc(lastmodelid,(float)scale,shadeoffs,(float)mzadd,flags);
|
md_setmisc(lastmodelid,(float)scale,shadeoffs,(float)mzadd,(float)myoffset,flags);
|
||||||
|
|
||||||
// thin out the loaded model by throwing away unused frames
|
// thin out the loaded model by throwing away unused frames
|
||||||
// FIXME: CURRENTLY DISABLED: interpolation may access frames we consider 'unused'?
|
// FIXME: CURRENTLY DISABLED: interpolation may access frames we consider 'unused'?
|
||||||
|
|
|
@ -210,7 +210,7 @@ int32_t md_loadmodel(const char *fn)
|
||||||
return(nextmodelid-1);
|
return(nextmodelid-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t md_setmisc(int32_t modelid, float scale, int32_t shadeoff, float zadd, int32_t flags)
|
int32_t md_setmisc(int32_t modelid, float scale, int32_t shadeoff, float zadd, float yoffset, int32_t flags)
|
||||||
{
|
{
|
||||||
mdmodel_t *m;
|
mdmodel_t *m;
|
||||||
|
|
||||||
|
@ -221,6 +221,7 @@ int32_t md_setmisc(int32_t modelid, float scale, int32_t shadeoff, float zadd, i
|
||||||
m->bscale = scale;
|
m->bscale = scale;
|
||||||
m->shadeoff = shadeoff;
|
m->shadeoff = shadeoff;
|
||||||
m->zadd = zadd;
|
m->zadd = zadd;
|
||||||
|
m->yoffset = yoffset;
|
||||||
m->flags = flags;
|
m->flags = flags;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1948,6 +1949,9 @@ static int32_t md3draw(md3model_t *m, const spritetype *tspr)
|
||||||
}
|
}
|
||||||
if (globalorientation&4) { m0.y = -m0.y; m1.y = -m1.y; a0.y = -a0.y; } //x-flipping
|
if (globalorientation&4) { m0.y = -m0.y; m1.y = -m1.y; a0.y = -a0.y; } //x-flipping
|
||||||
|
|
||||||
|
// yoffset differs from zadd in that it does not follow cstat&8 y-flipping
|
||||||
|
a0.z += m->yoffset*m->scale;
|
||||||
|
|
||||||
f = ((float)tspr->xrepeat)/64*m->bscale;
|
f = ((float)tspr->xrepeat)/64*m->bscale;
|
||||||
m0.x *= f; m1.x *= f; a0.x *= f; f = -f; // 20040610: backwards models aren't cool
|
m0.x *= f; m1.x *= f; a0.x *= f; f = -f; // 20040610: backwards models aren't cool
|
||||||
m0.y *= f; m1.y *= f; a0.y *= f;
|
m0.y *= f; m1.y *= f; a0.y *= f;
|
||||||
|
|
|
@ -3989,6 +3989,9 @@ static void polymer_drawmdsprite(spritetype *tspr)
|
||||||
if ((tspr->cstat & 128) && (((tspr->cstat>>4) & 3) != 2))
|
if ((tspr->cstat & 128) && (((tspr->cstat>>4) & 3) != 2))
|
||||||
bglTranslatef(0.0f, 0.0, -(float)(tilesizy[tspr->picnum] * tspr->yrepeat) / 8.0f);
|
bglTranslatef(0.0f, 0.0, -(float)(tilesizy[tspr->picnum] * tspr->yrepeat) / 8.0f);
|
||||||
|
|
||||||
|
// yoffset differs from zadd in that it does not follow cstat&8 y-flipping
|
||||||
|
bglTranslatef(0.0f, 0.0, m->yoffset * 64 * scale * tspr->yrepeat);
|
||||||
|
|
||||||
if (tspr->cstat & 8)
|
if (tspr->cstat & 8)
|
||||||
{
|
{
|
||||||
bglTranslatef(0.0f, 0.0, (float)(tilesizy[tspr->picnum] * tspr->yrepeat) / 4.0f);
|
bglTranslatef(0.0f, 0.0, (float)(tilesizy[tspr->picnum] * tspr->yrepeat) / 4.0f);
|
||||||
|
|
Loading…
Reference in a new issue