Hopefully fix overwritesprite issues

This commit is contained in:
nukeykt 2019-09-01 04:05:16 +09:00 committed by Christoph Oelckers
parent 664596e369
commit 3b40420b84
4 changed files with 24 additions and 18 deletions

View file

@ -15,10 +15,29 @@ void overwritesprite(int thex, int they, short tilenum, signed char shade, char
(char)(((flags & 1 ^ 1) << 4) + (flags & 2) + ((flags & 4) >> 2) + ((flags & 16) >> 2) ^ ((flags & 8) >> 1)),
windowx1, windowy1, windowx2, windowy2);
#endif
// no animation
uint8_t animbak = picanm[tilenum].sf;
picanm[tilenum].sf = 0;
int offx = 0, offy = 0;
if (stat & 1)
{
offx -= tilesiz[tilenum].x>>1;
if (stat & 8)
offx += picanm[tilenum].xofs;
else
offx -= picanm[tilenum].xofs;
offy -= (tilesiz[tilenum].y>>1)+picanm[tilenum].yofs;
}
if (stat&8)
offx += tilesiz[tilenum].x;
if (stat&16)
offy += tilesiz[tilenum].y;
thex += offx;
they += offy;
rotatesprite(thex << 16, they << 16, 65536L, (stat & 8) << 7, tilenum, shade, dapalnum,
(((stat & 1) ^ 1) << 4) + (stat & 2) + ((stat & 4) >> 2) + (((stat & 16) >> 2) ^ ((stat & 8) >> 1)),
16 + (stat & 2) + ((stat & 4) >> 2) + (((stat & 16) >> 2) ^ ((stat & 8) >> 1)),
windowxy1.x, windowxy1.y, windowxy2.x, windowxy2.y);
picanm[tilenum].sf = animbak;
}
void permanentwritesprite(int thex, int they, short tilenum, signed char shade, int cx1, int cy1, int cx2, int cy2, char dapalnum)

View file

@ -703,9 +703,9 @@ void faketimerhandler()
{
if ((totalclock < ototalclock + 1) || bInMove)
return;
ototalclock += 1;
ototalclock++;
if (moveframes < 4)
if (!(ototalclock&3) && moveframes < 4)
moveframes++;
PlayerInterruptKeys();

View file

@ -513,7 +513,7 @@ void menu_DoPlasma()
}
// draw the fire urn/lamp thingies
int dword_9AB5F = ((totalclock - ((totalclock >> 31) + 16 * (totalclock >> 31))) >> 4) & 3;
int dword_9AB5F = (totalclock/16) & 3;
overwritesprite(50, 150, kTile3512 + dword_9AB5F, 0, 3, kPalNormal);
overwritesprite(270, 150, kTile3512 + ((dword_9AB5F + 2) & 3), 0, 3, kPalNormal);

View file

@ -343,19 +343,6 @@ void seq_DrawStatusSequence(short nSequence, uint16_t edx, short ebx)
laststatusx = ChunkXpos[nFrameBase] + 160;
laststatusy = ChunkYpos[nFrameBase] + 100 + ebx;
int thex = laststatusx;
int they = laststatusy;
if (laststatusx >= 155 && laststatusx <= 162) {
laststatusx = 159;
}
// TEMP
if (laststatusy == 188 && laststatusx == 159)
laststatusy = 189;
short chunkFlag = ChunkFlag[nFrameBase];
if (chunkFlag & 1) {