Judder on incomplete fill for rank-based progression to Sealed Star

- Cleaner handling of player arrow position through addition rather than overwrite
- Cleaner inputs to FixedDiv
This commit is contained in:
toaster 2023-05-09 17:11:41 +01:00
parent 9fca550ab6
commit 5a20a4756f

View file

@ -83,7 +83,7 @@ typedef struct
boolean showrank; // show rank-restricted queue entry at the end, if it exists boolean showrank; // show rank-restricted queue entry at the end, if it exists
boolean encore; // encore mode boolean encore; // encore mode
tic_t linemeter; // For GP only INT32 linemeter; // For GP only
} y_data; } y_data;
static y_data data; static y_data data;
@ -814,6 +814,12 @@ skiptallydrawer:
} }
} }
if (roundqueue.position == i+1)
{
playerx = x;
playery = y;
}
if (choose_line != NULL) if (choose_line != NULL)
{ {
// Draw the line to the right of the dot // Draw the line to the right of the dot
@ -856,20 +862,30 @@ skiptallydrawer:
else if (roundqueue.position == roundqueue.size-1 else if (roundqueue.position == roundqueue.size-1
&& timer <= 2*TICRATE) && timer <= 2*TICRATE)
{ {
const INT32 through = ((2*TICRATE) - (timer - 1));
const fixed_t percent = FixedDiv( const fixed_t percent = FixedDiv(
min( min( data.linemeter, through ) * FRACUNIT,
data.linemeter,
((2*TICRATE) - (timer - 1))
) * FRACUNIT,
(2*TICRATE) * FRACUNIT (2*TICRATE) * FRACUNIT
); );
playerx = x + playerx +=
FixedMul( FixedMul(
(x2 - x) * FRACUNIT, (x2 - x) * FRACUNIT,
percent percent
) / FRACUNIT; ) / FRACUNIT;
playery = y;
if (timer > 2)
{
// Small judder
if (through == (data.linemeter + 1))
{
playerx++;
}
else if (through == (data.linemeter + 2))
{
playerx--;
}
}
} }
// Special background bump // Special background bump
@ -935,12 +951,6 @@ skiptallydrawer:
); );
} }
if (roundqueue.position == i+1 && playery == 0)
{
playerx = x;
playery = y;
}
x += 24; x += 24;
} }