mirror of
https://github.com/ZDoom/Raze.git
synced 2024-11-15 17:01:28 +00:00
Add tilehasmodelorvoxel() function and fix instances where voxels for multi-sided sprites would get flipped based on the viewing angle
git-svn-id: https://svn.eduke32.com/eduke32@7767 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
31f66f7de4
commit
7e7f19b5fd
3 changed files with 20 additions and 30 deletions
|
@ -1444,6 +1444,15 @@ static FORCE_INLINE int32_t md_tilehasmodel(int32_t const tilenume, int32_t cons
|
||||||
}
|
}
|
||||||
#endif // defined USE_OPENGL
|
#endif // defined USE_OPENGL
|
||||||
|
|
||||||
|
static FORCE_INLINE bool tilehasmodelorvoxel(int const tilenume, int const pal)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
#ifdef USE_OPENGL
|
||||||
|
(videoGetRenderMode() >= REND_POLYMOST && mdinited && usemodels && tile2model[Ptile2tile(tilenume, pal)].modelid != -1) ||
|
||||||
|
#endif
|
||||||
|
(videoGetRenderMode() <= REND_POLYMOST && usevoxels && tiletovox[tilenume] != -1);
|
||||||
|
}
|
||||||
|
|
||||||
int32_t md_defineframe(int32_t modelid, const char *framename, int32_t tilenume,
|
int32_t md_defineframe(int32_t modelid, const char *framename, int32_t tilenume,
|
||||||
int32_t skinnum, float smoothduration, int32_t pal);
|
int32_t skinnum, float smoothduration, int32_t pal);
|
||||||
int32_t md_defineanimation(int32_t modelid, const char *framestart, const char *frameend,
|
int32_t md_defineanimation(int32_t modelid, const char *framestart, const char *frameend,
|
||||||
|
|
|
@ -10635,9 +10635,7 @@ void ExtAnalyzeSprites(int32_t ourx, int32_t oury, int32_t oura, int32_t smoothr
|
||||||
}
|
}
|
||||||
// else tspr->cstat&=32767;
|
// else tspr->cstat&=32767;
|
||||||
|
|
||||||
#ifdef USE_OPENGL
|
if (!tilehasmodelorvoxel(tspr->picnum,tspr->pal))
|
||||||
if (!usemodels || md_tilehasmodel(tspr->picnum,tspr->pal) < 0)
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
if (frames!=0)
|
if (frames!=0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -3658,13 +3658,11 @@ void G_DoSpriteAnimations(int32_t ourx, int32_t oury, int32_t oura, int32_t smoo
|
||||||
t->xrepeat = t->yrepeat = 0;
|
t->xrepeat = t->yrepeat = 0;
|
||||||
continue;
|
continue;
|
||||||
case CHAIR3__STATIC:
|
case CHAIR3__STATIC:
|
||||||
#ifdef USE_OPENGL
|
if (tilehasmodelorvoxel(t->picnum,t->pal) && !(spriteext[i].flags&SPREXT_NOTMD))
|
||||||
if (videoGetRenderMode() >= REND_POLYMOST && usemodels && md_tilehasmodel(t->picnum,t->pal) >= 0 && !(spriteext[i].flags&SPREXT_NOTMD))
|
|
||||||
{
|
{
|
||||||
t->cstat &= ~4;
|
t->cstat &= ~4;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
frameOffset = getofs_viewtype_mirrored<5>(t->cstat, t->ang - oura);
|
frameOffset = getofs_viewtype_mirrored<5>(t->cstat, t->ang - oura);
|
||||||
t->picnum = s->picnum+frameOffset;
|
t->picnum = s->picnum+frameOffset;
|
||||||
break;
|
break;
|
||||||
|
@ -3897,9 +3895,7 @@ void G_DoSpriteAnimations(int32_t ourx, int32_t oury, int32_t oura, int32_t smoo
|
||||||
t->picnum = GROWSPARK+((totalclock>>4)&3);
|
t->picnum = GROWSPARK+((totalclock>>4)&3);
|
||||||
break;
|
break;
|
||||||
case RPG__STATIC:
|
case RPG__STATIC:
|
||||||
#ifdef USE_OPENGL
|
if (tilehasmodelorvoxel(t->picnum,t->pal) && !(spriteext[i].flags & SPREXT_NOTMD))
|
||||||
if (videoGetRenderMode() >= REND_POLYMOST && usemodels && md_tilehasmodel(t->picnum,t->pal) >= 0 &&
|
|
||||||
!(spriteext[i].flags & SPREXT_NOTMD))
|
|
||||||
{
|
{
|
||||||
int32_t v = getangle(t->xvel, t->zvel>>4);
|
int32_t v = getangle(t->xvel, t->zvel>>4);
|
||||||
|
|
||||||
|
@ -3907,19 +3903,16 @@ void G_DoSpriteAnimations(int32_t ourx, int32_t oury, int32_t oura, int32_t smoo
|
||||||
t->cstat &= ~4;
|
t->cstat &= ~4;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
frameOffset = getofs_viewtype_mirrored<7>(t->cstat, pSprite->ang - getangle(pSprite->x-ourx, pSprite->y-oury));
|
frameOffset = getofs_viewtype_mirrored<7>(t->cstat, pSprite->ang - getangle(pSprite->x-ourx, pSprite->y-oury));
|
||||||
t->picnum = RPG+frameOffset;
|
t->picnum = RPG+frameOffset;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RECON__STATIC:
|
case RECON__STATIC:
|
||||||
#ifdef USE_OPENGL
|
if (tilehasmodelorvoxel(t->picnum,t->pal) >= 0 && !(spriteext[i].flags&SPREXT_NOTMD))
|
||||||
if (videoGetRenderMode() >= REND_POLYMOST && usemodels && md_tilehasmodel(t->picnum,t->pal) >= 0 && !(spriteext[i].flags&SPREXT_NOTMD))
|
|
||||||
{
|
{
|
||||||
t->cstat &= ~4;
|
t->cstat &= ~4;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
frameOffset = getofs_viewtype_mirrored<7>(t->cstat, pSprite->ang - getangle(pSprite->x-ourx, pSprite->y-oury));
|
frameOffset = getofs_viewtype_mirrored<7>(t->cstat, pSprite->ang - getangle(pSprite->x-ourx, pSprite->y-oury));
|
||||||
|
|
||||||
// RECON_T4
|
// RECON_T4
|
||||||
|
@ -3940,8 +3933,7 @@ void G_DoSpriteAnimations(int32_t ourx, int32_t oury, int32_t oura, int32_t smoo
|
||||||
t->ang = fix16_to_int(
|
t->ang = fix16_to_int(
|
||||||
g_player[playerNum].ps->q16ang
|
g_player[playerNum].ps->q16ang
|
||||||
+ mulscale16((((g_player[playerNum].ps->q16ang + 1024 - g_player[playerNum].ps->oq16ang) & 2047) - 1024), smoothratio));
|
+ mulscale16((((g_player[playerNum].ps->q16ang + 1024 - g_player[playerNum].ps->oq16ang) & 2047) - 1024), smoothratio));
|
||||||
#ifdef USE_OPENGL
|
if (tilehasmodelorvoxel(t->picnum, t->pal) >= 0)
|
||||||
if (bpp > 8 && usemodels && md_tilehasmodel(t->picnum, t->pal) >= 0)
|
|
||||||
{
|
{
|
||||||
static int32_t targetang = 0;
|
static int32_t targetang = 0;
|
||||||
|
|
||||||
|
@ -3964,7 +3956,6 @@ void G_DoSpriteAnimations(int32_t ourx, int32_t oury, int32_t oura, int32_t smoo
|
||||||
t->ang += targetang;
|
t->ang += targetang;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
|
||||||
t->cstat |= 2;
|
t->cstat |= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4006,14 +3997,12 @@ void G_DoSpriteAnimations(int32_t ourx, int32_t oury, int32_t oura, int32_t smoo
|
||||||
|
|
||||||
if (pSprite->owner == -1)
|
if (pSprite->owner == -1)
|
||||||
{
|
{
|
||||||
#ifdef USE_OPENGL
|
if (tilehasmodelorvoxel(pSprite->picnum,t->pal) && !(spriteext[i].flags&SPREXT_NOTMD))
|
||||||
if (videoGetRenderMode() >= REND_POLYMOST && usemodels && md_tilehasmodel(pSprite->picnum,t->pal) >= 0 && !(spriteext[i].flags&SPREXT_NOTMD))
|
|
||||||
{
|
{
|
||||||
frameOffset = 0;
|
frameOffset = 0;
|
||||||
t->cstat &= ~4;
|
t->cstat &= ~4;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
|
||||||
frameOffset = getofs_viewtype_mirrored<5>(t->cstat, pSprite->ang - oura);
|
frameOffset = getofs_viewtype_mirrored<5>(t->cstat, pSprite->ang - oura);
|
||||||
|
|
||||||
if (sector[pSprite->sectnum].lotag == ST_2_UNDERWATER) frameOffset += 1795-1405;
|
if (sector[pSprite->sectnum].lotag == ST_2_UNDERWATER) frameOffset += 1795-1405;
|
||||||
|
@ -4063,14 +4052,12 @@ void G_DoSpriteAnimations(int32_t ourx, int32_t oury, int32_t oura, int32_t smoo
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_OPENGL
|
if (tilehasmodelorvoxel(pSprite->picnum, t->pal) && !(spriteext[i].flags&SPREXT_NOTMD))
|
||||||
if (videoGetRenderMode() >= REND_POLYMOST && usemodels && md_tilehasmodel(pSprite->picnum, t->pal) >= 0 && !(spriteext[i].flags&SPREXT_NOTMD))
|
|
||||||
{
|
{
|
||||||
frameOffset = 0;
|
frameOffset = 0;
|
||||||
t->cstat &= ~4;
|
t->cstat &= ~4;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
|
||||||
frameOffset = getofs_viewtype_mirrored<5>(t->cstat, pSprite->ang - oura);
|
frameOffset = getofs_viewtype_mirrored<5>(t->cstat, pSprite->ang - oura);
|
||||||
|
|
||||||
if (sector[t->sectnum].lotag == ST_2_UNDERWATER) frameOffset += 1795-1405;
|
if (sector[t->sectnum].lotag == ST_2_UNDERWATER) frameOffset += 1795-1405;
|
||||||
|
@ -4155,14 +4142,12 @@ PALONLY:
|
||||||
int const invertp = l < 0;
|
int const invertp = l < 0;
|
||||||
l = klabs(l);
|
l = klabs(l);
|
||||||
|
|
||||||
#ifdef USE_OPENGL
|
if (tilehasmodelorvoxel(pSprite->picnum,t->pal) && !(spriteext[i].flags&SPREXT_NOTMD))
|
||||||
if (videoGetRenderMode() >= REND_POLYMOST && usemodels && md_tilehasmodel(pSprite->picnum,t->pal) >= 0 && !(spriteext[i].flags&SPREXT_NOTMD))
|
|
||||||
{
|
{
|
||||||
frameOffset = 0;
|
frameOffset = 0;
|
||||||
t->cstat &= ~4;
|
t->cstat &= ~4;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
int const viewAng = ((l > 4 && l != 8) || action_flags & AF_VIEWPOINT) ? getangle(pSprite->x-ourx, pSprite->y-oury) : oura;
|
int const viewAng = ((l > 4 && l != 8) || action_flags & AF_VIEWPOINT) ? getangle(pSprite->x-ourx, pSprite->y-oury) : oura;
|
||||||
int const angDiff = invertp ? viewAng - pSprite->ang : pSprite->ang - viewAng;
|
int const angDiff = invertp ? viewAng - pSprite->ang : pSprite->ang - viewAng;
|
||||||
|
@ -4287,7 +4272,7 @@ skip:
|
||||||
#ifdef USE_OPENGL
|
#ifdef USE_OPENGL
|
||||||
if (videoGetRenderMode() >= REND_POLYMOST)
|
if (videoGetRenderMode() >= REND_POLYMOST)
|
||||||
{
|
{
|
||||||
if (usemodels && md_tilehasmodel(t->picnum,t->pal) >= 0)
|
if (tilehasmodelorvoxel(t->picnum,t->pal))
|
||||||
{
|
{
|
||||||
tsprShadow->yrepeat = 0;
|
tsprShadow->yrepeat = 0;
|
||||||
// 512:trans reverse
|
// 512:trans reverse
|
||||||
|
@ -4369,7 +4354,7 @@ skip:
|
||||||
if (haveAction)
|
if (haveAction)
|
||||||
break;
|
break;
|
||||||
#ifdef USE_OPENGL
|
#ifdef USE_OPENGL
|
||||||
if (videoGetRenderMode() >= REND_POLYMOST && usemodels && md_tilehasmodel(pSprite->picnum,pSprite->pal) >= 0 && !(spriteext[i].flags&SPREXT_NOTMD))
|
if (tilehasmodelorvoxel(pSprite->picnum,pSprite->pal) && !(spriteext[i].flags&SPREXT_NOTMD))
|
||||||
{
|
{
|
||||||
frameOffset = 0;
|
frameOffset = 0;
|
||||||
t->cstat &= ~4;
|
t->cstat &= ~4;
|
||||||
|
@ -4427,13 +4412,11 @@ skip:
|
||||||
case RAT__STATIC:
|
case RAT__STATIC:
|
||||||
if (haveAction)
|
if (haveAction)
|
||||||
break;
|
break;
|
||||||
#ifdef USE_OPENGL
|
if (tilehasmodelorvoxel(pSprite->picnum,pSprite->pal) && !(spriteext[i].flags&SPREXT_NOTMD))
|
||||||
if (videoGetRenderMode() >= REND_POLYMOST && usemodels && md_tilehasmodel(pSprite->picnum,pSprite->pal) >= 0 && !(spriteext[i].flags&SPREXT_NOTMD))
|
|
||||||
{
|
{
|
||||||
t->cstat &= ~4;
|
t->cstat &= ~4;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
frameOffset = getofs_viewtype_mirrored<5>(t->cstat, t->ang - oura);
|
frameOffset = getofs_viewtype_mirrored<5>(t->cstat, t->ang - oura);
|
||||||
t->picnum = pSprite->picnum+frameOffset;
|
t->picnum = pSprite->picnum+frameOffset;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue