mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-12-18 22:12:31 +00:00
Fix visuals on roulette latency compensation
- Latency is based on D0 instead of D2. - Confirm offset is now adjusted for latency, so it should feel more correct when stopping it. - Slot machine offset is properly set up to use the slot machine offset instead of the item roulette offset.
This commit is contained in:
parent
6c678bf347
commit
0b22e8eb00
3 changed files with 36 additions and 17 deletions
|
|
@ -1358,7 +1358,7 @@ static void K_drawKartItem(void)
|
||||||
|
|
||||||
if (stplyr->itemRoulette.active == true)
|
if (stplyr->itemRoulette.active == true)
|
||||||
{
|
{
|
||||||
rouletteOffset = K_GetRouletteOffset(&stplyr->itemRoulette, rendertimefrac);
|
rouletteOffset = K_GetRouletteOffset(&stplyr->itemRoulette, rendertimefrac, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -1712,7 +1712,7 @@ static void K_drawKartSlotMachine(void)
|
||||||
|
|
||||||
if (stplyr->itemRoulette.active == true)
|
if (stplyr->itemRoulette.active == true)
|
||||||
{
|
{
|
||||||
rouletteOffset = K_GetSlotOffset(&stplyr->itemRoulette, rendertimefrac);
|
rouletteOffset = K_GetSlotOffset(&stplyr->itemRoulette, rendertimefrac, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1513,16 +1513,23 @@ void K_StopRoulette(itemroulette_t *const roulette)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
fixed_t K_GetRouletteOffset(itemroulette_t *const roulette, fixed_t renderDelta)
|
fixed_t K_GetRouletteOffset(itemroulette_t *const roulette, fixed_t renderDelta, UINT8 fudge)
|
||||||
|
|
||||||
See header file for description.
|
See header file for description.
|
||||||
--------------------------------------------------*/
|
--------------------------------------------------*/
|
||||||
fixed_t K_GetRouletteOffset(itemroulette_t *const roulette, fixed_t renderDelta)
|
fixed_t K_GetRouletteOffset(itemroulette_t *const roulette, fixed_t renderDelta, UINT8 fudge)
|
||||||
{
|
{
|
||||||
const fixed_t curTic = (roulette->tics << FRACBITS) - renderDelta;
|
const fixed_t curTic = (roulette->tics << FRACBITS) - renderDelta;
|
||||||
const fixed_t midTic = roulette->speed * (FRACUNIT >> 1);
|
const fixed_t midTic = roulette->speed * (FRACUNIT >> 1);
|
||||||
|
|
||||||
return FixedMul(FixedDiv(midTic - curTic, ((roulette->speed + 1) << FRACBITS)), ROULETTE_SPACING);
|
fixed_t result = FixedMul(FixedDiv(midTic - curTic, ((roulette->speed + 1) << FRACBITS)), ROULETTE_SPACING);
|
||||||
|
|
||||||
|
if (fudge > 0)
|
||||||
|
{
|
||||||
|
result += (roulette->speed + 1) * fudge;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
|
|
@ -1530,12 +1537,19 @@ fixed_t K_GetRouletteOffset(itemroulette_t *const roulette, fixed_t renderDelta)
|
||||||
|
|
||||||
See header file for description.
|
See header file for description.
|
||||||
--------------------------------------------------*/
|
--------------------------------------------------*/
|
||||||
fixed_t K_GetSlotOffset(itemroulette_t *const roulette, fixed_t renderDelta)
|
fixed_t K_GetSlotOffset(itemroulette_t *const roulette, fixed_t renderDelta, UINT8 fudge)
|
||||||
{
|
{
|
||||||
const fixed_t curTic = (roulette->tics << FRACBITS) - renderDelta;
|
const fixed_t curTic = (roulette->tics << FRACBITS) - renderDelta;
|
||||||
const fixed_t midTic = roulette->speed * (FRACUNIT >> 1);
|
const fixed_t midTic = roulette->speed * (FRACUNIT >> 1);
|
||||||
|
|
||||||
return FixedMul(FixedDiv(midTic - curTic, ((roulette->speed + 1) << FRACBITS)), SLOT_SPACING);
|
fixed_t result = FixedMul(FixedDiv(midTic - curTic, ((roulette->speed + 1) << FRACBITS)), SLOT_SPACING);
|
||||||
|
|
||||||
|
if (fudge > 0)
|
||||||
|
{
|
||||||
|
result += (roulette->speed + 1) * fudge;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
|
|
@ -1631,7 +1645,7 @@ void K_KartItemRoulette(player_t *const player, ticcmd_t *const cmd)
|
||||||
|
|
||||||
//player->karthud[khud_itemblink] = TICRATE;
|
//player->karthud[khud_itemblink] = TICRATE;
|
||||||
//player->karthud[khud_itemblinkmode] = 1;
|
//player->karthud[khud_itemblinkmode] = 1;
|
||||||
//player->karthud[khud_rouletteoffset] = K_GetRouletteOffset(roulette, FRACUNIT);
|
//player->karthud[khud_rouletteoffset] = K_GetRouletteOffset(roulette, FRACUNIT, 0);
|
||||||
|
|
||||||
if (K_IsPlayingDisplayPlayer(player))
|
if (K_IsPlayingDisplayPlayer(player))
|
||||||
{
|
{
|
||||||
|
|
@ -1640,12 +1654,13 @@ void K_KartItemRoulette(player_t *const player, ticcmd_t *const cmd)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// D2 fudge factor. Roulette was originally designed and tested with this delay.
|
UINT8 baseFudge = player->cmd.latency; // max(0, player->cmd.latency - 2);
|
||||||
UINT8 fudgedDelay = (player->cmd.latency <= 2) ? 0 : player->cmd.latency - 2;
|
|
||||||
|
|
||||||
if (roulette->autoroulette)
|
if (roulette->autoroulette)
|
||||||
fudgedDelay = 0; // We didn't manually stop this, you jackwagon
|
{
|
||||||
|
baseFudge = 0; // We didn't manually stop this, you jackwagon
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT8 fudgedDelay = baseFudge;
|
||||||
while (fudgedDelay > 0)
|
while (fudgedDelay > 0)
|
||||||
{
|
{
|
||||||
UINT8 gap = (roulette->speed - roulette->tics); // How long has the roulette been on this entry?
|
UINT8 gap = (roulette->speed - roulette->tics); // How long has the roulette been on this entry?
|
||||||
|
|
@ -1670,15 +1685,16 @@ void K_KartItemRoulette(player_t *const player, ticcmd_t *const cmd)
|
||||||
{
|
{
|
||||||
player->ringboxdelay = TICRATE;
|
player->ringboxdelay = TICRATE;
|
||||||
player->ringboxaward = finalItem;
|
player->ringboxaward = finalItem;
|
||||||
|
player->karthud[khud_rouletteoffset] = K_GetSlotOffset(roulette, FRACUNIT, baseFudge);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
K_KartGetItemResult(player, finalItem);
|
K_KartGetItemResult(player, finalItem);
|
||||||
|
player->karthud[khud_rouletteoffset] = K_GetRouletteOffset(roulette, FRACUNIT, baseFudge);
|
||||||
}
|
}
|
||||||
|
|
||||||
player->karthud[khud_itemblink] = TICRATE;
|
player->karthud[khud_itemblink] = TICRATE;
|
||||||
player->karthud[khud_itemblinkmode] = 0;
|
player->karthud[khud_itemblinkmode] = 0;
|
||||||
player->karthud[khud_rouletteoffset] = K_GetRouletteOffset(roulette, FRACUNIT);
|
|
||||||
|
|
||||||
if (K_IsPlayingDisplayPlayer(player))
|
if (K_IsPlayingDisplayPlayer(player))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -173,7 +173,7 @@ void K_StopRoulette(itemroulette_t *const roulette);
|
||||||
|
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
fixed_t K_GetRouletteOffset(itemroulette_t *const roulette, fixed_t renderDelta);
|
fixed_t K_GetRouletteOffset(itemroulette_t *const roulette, fixed_t renderDelta, UINT8 fudge);
|
||||||
|
|
||||||
Gets the Y offset, for use in the roulette HUD.
|
Gets the Y offset, for use in the roulette HUD.
|
||||||
A separate function since it is used both by the
|
A separate function since it is used both by the
|
||||||
|
|
@ -182,15 +182,17 @@ void K_StopRoulette(itemroulette_t *const roulette);
|
||||||
Input Arguments:-
|
Input Arguments:-
|
||||||
roulette - The roulette we are drawing for.
|
roulette - The roulette we are drawing for.
|
||||||
renderDelta - Fractional tic delta, when used for HUD.
|
renderDelta - Fractional tic delta, when used for HUD.
|
||||||
|
fudge - Input latency fudge factor, when used for gameplay.
|
||||||
|
|
||||||
Return:-
|
Return:-
|
||||||
The Y offset when drawing the item.
|
The Y offset when drawing the item.
|
||||||
--------------------------------------------------*/
|
--------------------------------------------------*/
|
||||||
|
|
||||||
fixed_t K_GetRouletteOffset(itemroulette_t *const roulette, fixed_t renderDelta);
|
fixed_t K_GetRouletteOffset(itemroulette_t *const roulette, fixed_t renderDelta, UINT8 fudge);
|
||||||
|
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
fixed_t K_GetSlotOffset(itemroulette_t *const roulette, fixed_t renderDelta);
|
fixed_t K_GetSlotOffset(itemroulette_t *const roulette, fixed_t renderDelta, UINT8 fudge);
|
||||||
|
|
||||||
Gets the Y offset, for use in the slot HUD.
|
Gets the Y offset, for use in the slot HUD.
|
||||||
A separate function since it is used both by the
|
A separate function since it is used both by the
|
||||||
|
|
@ -199,12 +201,13 @@ fixed_t K_GetRouletteOffset(itemroulette_t *const roulette, fixed_t renderDelta)
|
||||||
Input Arguments:-
|
Input Arguments:-
|
||||||
roulette - The roulette we are drawing for.
|
roulette - The roulette we are drawing for.
|
||||||
renderDelta - Fractional tic delta, when used for HUD.
|
renderDelta - Fractional tic delta, when used for HUD.
|
||||||
|
fudge - Input latency fudge factor, when used for gameplay.
|
||||||
|
|
||||||
Return:-
|
Return:-
|
||||||
The Y offset when drawing the item.
|
The Y offset when drawing the item.
|
||||||
--------------------------------------------------*/
|
--------------------------------------------------*/
|
||||||
|
|
||||||
fixed_t K_GetSlotOffset(itemroulette_t *const roulette, fixed_t renderDelta);
|
fixed_t K_GetSlotOffset(itemroulette_t *const roulette, fixed_t renderDelta, UINT8 fudge);
|
||||||
|
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue