- interpolation fix from EDuke: "Patch from Striker to improve sprite interpolation"

Fixes #109
This commit is contained in:
Christoph Oelckers 2020-09-11 22:54:52 +02:00
parent 807dd17165
commit 1f7bc6d69e
6 changed files with 37 additions and 5 deletions

View file

@ -5080,6 +5080,12 @@ void fall_common(int g_i, int g_p, int JIBS6, int DRONE, int BLOODPOOL, int SHOT
} }
} }
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
int LocateTheLocator(int n, int sn) int LocateTheLocator(int n, int sn)
{ {
int i; int i;
@ -5094,6 +5100,31 @@ int LocateTheLocator(int n, int sn)
return -1; return -1;
} }
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void recordoldspritepos()
{
for (int statNum = 0; statNum < MAXSTATUS; statNum++)
{
int spriteNum = headspritestat[statNum];
while (spriteNum >= 0)
{
int const nextSprite = nextspritestat[spriteNum];
hittype[spriteNum].bposx = sprite[spriteNum].x;
hittype[spriteNum].bposy = sprite[spriteNum].y;
hittype[spriteNum].bposz = sprite[spriteNum].z;
spriteNum = nextSprite;
}
}
}
END_DUKE_NS END_DUKE_NS

View file

@ -4388,6 +4388,7 @@ void think_d(void)
{ {
thinktime.Reset(); thinktime.Reset();
thinktime.Clock(); thinktime.Clock();
recordoldspritepos();
movefta_d(); //ST 2 movefta_d(); //ST 2
moveweapons_d(); //ST 4 moveweapons_d(); //ST 4

View file

@ -4681,6 +4681,7 @@ void think_r(void)
{ {
thinktime.Reset(); thinktime.Reset();
thinktime.Clock(); thinktime.Clock();
recordoldspritepos();
movefta_r(); //ST 2 movefta_r(); //ST 2
moveweapons_r(); //ST 4 moveweapons_r(); //ST 4

View file

@ -60,7 +60,7 @@ void animatesprites_d(int x,int y,int a,int smoothratio)
{ {
case DEVELOPERCOMMENTARY: case DEVELOPERCOMMENTARY:
case DEVELOPERCOMMENTARY + 1: case DEVELOPERCOMMENTARY + 1:
if(!isWorldTour() || !dukewt_commentary) if(isWorldTour() && !dukewt_commentary)
t->xrepeat = t->yrepeat = 0; t->xrepeat = t->yrepeat = 0;
break; break;
case BLOODPOOL: case BLOODPOOL:
@ -175,8 +175,7 @@ void animatesprites_d(int x,int y,int a,int smoothratio)
t->z = ps[s->yvel].oposz + mulscale16(smoothratio,ps[s->yvel].posz-ps[s->yvel].oposz); t->z = ps[s->yvel].oposz + mulscale16(smoothratio,ps[s->yvel].posz-ps[s->yvel].oposz);
t->z += (40<<8); t->z += (40<<8);
} }
else if( ( s->statnum == STAT_DEFAULT && s->picnum != CRANEPOLE) || s->statnum == STAT_PLAYER || else if(s->picnum != CRANEPOLE)
s->statnum == STAT_STANDABLE || s->statnum == STAT_PROJECTILE || s->statnum == STAT_MISC || s->statnum == STAT_ACTOR )
{ {
t->x -= mulscale16(MaxSmoothRatio-smoothratio,s->x-hittype[i].bposx); t->x -= mulscale16(MaxSmoothRatio-smoothratio,s->x-hittype[i].bposx);
t->y -= mulscale16(MaxSmoothRatio-smoothratio,s->y-hittype[i].bposy); t->y -= mulscale16(MaxSmoothRatio-smoothratio,s->y-hittype[i].bposy);

View file

@ -162,8 +162,7 @@ void animatesprites_r(int x,int y,int a,int smoothratio)
s->xrepeat = 24; s->xrepeat = 24;
s->yrepeat = 17; s->yrepeat = 17;
} }
else if ((s->statnum == STAT_DEFAULT && s->picnum != CRANEPOLE) || s->statnum == STAT_PLAYER || else if (s->picnum != CRANEPOLE)
s->statnum == STAT_STANDABLE || s->statnum == STAT_PROJECTILE || s->statnum == STAT_MISC || s->statnum == STAT_ACTOR)
{ {
t->x -= mulscale16(MaxSmoothRatio-smoothratio,s->x-hittype[i].bposx); t->x -= mulscale16(MaxSmoothRatio-smoothratio,s->x-hittype[i].bposx);
t->y -= mulscale16(MaxSmoothRatio-smoothratio,s->y-hittype[i].bposy); t->y -= mulscale16(MaxSmoothRatio-smoothratio,s->y-hittype[i].bposy);

View file

@ -232,6 +232,7 @@ void calcviewpitch(player_struct* p, double factor);
void sethorizon(int snum, ESyncBits actions, double factor, fixed_t adjustment); void sethorizon(int snum, ESyncBits actions, double factor, fixed_t adjustment);
bool movementBlocked(int snum); bool movementBlocked(int snum);
void loadcons(); void loadcons();
void recordoldspritepos();
void updateinterpolations(); void updateinterpolations();
void restoreinterpolations(); void restoreinterpolations();