mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Safe-guard SPB from 1st place
This commit is contained in:
parent
9fa4654776
commit
f3742bad9d
1 changed files with 19 additions and 8 deletions
27
src/k_kart.c
27
src/k_kart.c
|
|
@ -584,6 +584,7 @@ INT32 K_KartGetItemOdds(
|
||||||
SINT8 first = -1, second = -1;
|
SINT8 first = -1, second = -1;
|
||||||
UINT32 firstDist = 0;
|
UINT32 firstDist = 0;
|
||||||
UINT32 secondToFirst = 0;
|
UINT32 secondToFirst = 0;
|
||||||
|
boolean isFirst = false;
|
||||||
|
|
||||||
boolean powerItem = false;
|
boolean powerItem = false;
|
||||||
boolean cooldownOnStart = false;
|
boolean cooldownOnStart = false;
|
||||||
|
|
@ -658,19 +659,24 @@ INT32 K_KartGetItemOdds(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (first != -1 && second != -1) // calculate 2nd's distance from 1st, for SPB
|
if (first != -1) // calculate 2nd's distance from 1st, for SPB
|
||||||
{
|
{
|
||||||
firstDist = players[first].distancetofinish;
|
firstDist = players[first].distancetofinish;
|
||||||
|
|
||||||
|
isFirst = (ourDist <= firstDist);
|
||||||
|
|
||||||
if (mapobjectscale != FRACUNIT)
|
if (mapobjectscale != FRACUNIT)
|
||||||
{
|
{
|
||||||
firstDist = FixedDiv(firstDist * FRACUNIT, mapobjectscale) / FRACUNIT;
|
firstDist = FixedDiv(firstDist * FRACUNIT, mapobjectscale) / FRACUNIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
secondToFirst = K_ScaleItemDistance(
|
if (second != -1)
|
||||||
players[second].distancetofinish - players[first].distancetofinish,
|
{
|
||||||
pingame
|
secondToFirst = K_ScaleItemDistance(
|
||||||
);
|
players[second].distancetofinish - players[first].distancetofinish,
|
||||||
|
pingame
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (item)
|
switch (item)
|
||||||
|
|
@ -714,7 +720,8 @@ INT32 K_KartGetItemOdds(
|
||||||
indirectItem = true;
|
indirectItem = true;
|
||||||
notNearEnd = true;
|
notNearEnd = true;
|
||||||
|
|
||||||
if (firstDist < ENDDIST*2) // No SPB when 1st is almost done
|
if (firstDist < ENDDIST*2 // No SPB when 1st is almost done
|
||||||
|
|| isFirst == true) // No SPB for 1st ever
|
||||||
{
|
{
|
||||||
newodds = 0;
|
newodds = 0;
|
||||||
}
|
}
|
||||||
|
|
@ -1108,8 +1115,12 @@ static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd)
|
||||||
|
|
||||||
// SPECIAL CASE No. 5:
|
// SPECIAL CASE No. 5:
|
||||||
// Force SPB onto 2nd if they get too far behind
|
// Force SPB onto 2nd if they get too far behind
|
||||||
if ((gametyperules & GTR_CIRCUIT) && pdis > SPBFORCEDIST
|
if ((gametyperules & GTR_CIRCUIT)
|
||||||
&& spbplace == -1 && !indirectitemcooldown && !dontforcespb
|
&& player->position > 1
|
||||||
|
&& pdis > SPBFORCEDIST
|
||||||
|
&& spbplace == -1
|
||||||
|
&& !indirectitemcooldown
|
||||||
|
&& !dontforcespb
|
||||||
&& cv_selfpropelledbomb.value)
|
&& cv_selfpropelledbomb.value)
|
||||||
{
|
{
|
||||||
K_KartGetItemResult(player, KITEM_SPB);
|
K_KartGetItemResult(player, KITEM_SPB);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue