mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-05-10 10:51:42 +00:00
Fix up item order of operations, spilled rings carry some momentum, don't pick up rings in spinout/wipeout
This commit is contained in:
parent
32ecf05f4b
commit
6803e68420
2 changed files with 59 additions and 43 deletions
92
src/k_kart.c
92
src/k_kart.c
|
|
@ -727,8 +727,7 @@ static INT32 K_KartGetItemOdds(UINT8 pos, SINT8 item, fixed_t mashed)
|
||||||
break;
|
break;
|
||||||
case KITEM_SPB:
|
case KITEM_SPB:
|
||||||
//POWERITEMODDS(newodds);
|
//POWERITEMODDS(newodds);
|
||||||
if (((indirectitemcooldown > 0) || (pexiting > 0) || (secondist/DISTVAR < 3))
|
if ((indirectitemcooldown > 0) || (pexiting > 0) || (secondist/DISTVAR < 3))
|
||||||
&& (pos != 9)) // Force SPB
|
|
||||||
newodds = 0;
|
newodds = 0;
|
||||||
else
|
else
|
||||||
newodds *= min((secondist/DISTVAR)-4, 3);
|
newodds *= min((secondist/DISTVAR)-4, 3);
|
||||||
|
|
@ -926,6 +925,14 @@ static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd)
|
||||||
if (cmd->buttons & BT_ATTACK)
|
if (cmd->buttons & BT_ATTACK)
|
||||||
player->pflags |= PF_ATTACKDOWN;
|
player->pflags |= PF_ATTACKDOWN;
|
||||||
|
|
||||||
|
if (franticitems) // Frantic items make the distances between everyone artifically higher, for crazier items
|
||||||
|
pdis = (15 * pdis) / 14;
|
||||||
|
|
||||||
|
if (spbplace != -1 && player->kartstuff[k_position] == spbplace+1) // SPB Rush Mode: It's 2nd place's job to catch-up items and make 1st place's job hell
|
||||||
|
pdis = (3 * pdis) / 2;
|
||||||
|
|
||||||
|
pdis = ((28 + (8-pingame)) * pdis) / 28; // scale with player count
|
||||||
|
|
||||||
// SPECIAL CASE No. 1:
|
// SPECIAL CASE No. 1:
|
||||||
// Fake Eggman items
|
// Fake Eggman items
|
||||||
if (player->kartstuff[k_roulettetype] == 2)
|
if (player->kartstuff[k_roulettetype] == 2)
|
||||||
|
|
@ -5177,33 +5184,36 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
{
|
{
|
||||||
// First, the really specific, finicky items that function without the item being directly in your item slot.
|
// First, the really specific, finicky items that function without the item being directly in your item slot.
|
||||||
// Karma item dropping
|
// Karma item dropping
|
||||||
if (ATTACK_IS_DOWN && player->kartstuff[k_comebackmode] && !player->kartstuff[k_comebacktimer])
|
if (player->kartstuff[k_comebackmode] && !player->kartstuff[k_comebacktimer])
|
||||||
{
|
{
|
||||||
mobj_t *newitem;
|
if (ATTACK_IS_DOWN)
|
||||||
|
|
||||||
if (player->kartstuff[k_comebackmode] == 1)
|
|
||||||
{
|
{
|
||||||
newitem = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_RANDOMITEM);
|
mobj_t *newitem;
|
||||||
newitem->threshold = 69; // selected "randomly".
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newitem = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_EGGMANITEM);
|
|
||||||
if (player->kartstuff[k_eggmanblame] >= 0
|
|
||||||
&& player->kartstuff[k_eggmanblame] < MAXPLAYERS
|
|
||||||
&& playeringame[player->kartstuff[k_eggmanblame]]
|
|
||||||
&& !players[player->kartstuff[k_eggmanblame]].spectator
|
|
||||||
&& players[player->kartstuff[k_eggmanblame]].mo)
|
|
||||||
P_SetTarget(&newitem->target, players[player->kartstuff[k_eggmanblame]].mo);
|
|
||||||
player->kartstuff[k_eggmanblame] = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
newitem->flags2 = (player->mo->flags2 & MF2_OBJECTFLIP);
|
if (player->kartstuff[k_comebackmode] == 1)
|
||||||
newitem->fuse = 15*TICRATE; // selected randomly.
|
{
|
||||||
|
newitem = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_RANDOMITEM);
|
||||||
|
newitem->threshold = 69; // selected "randomly".
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
newitem = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_EGGMANITEM);
|
||||||
|
if (player->kartstuff[k_eggmanblame] >= 0
|
||||||
|
&& player->kartstuff[k_eggmanblame] < MAXPLAYERS
|
||||||
|
&& playeringame[player->kartstuff[k_eggmanblame]]
|
||||||
|
&& !players[player->kartstuff[k_eggmanblame]].spectator
|
||||||
|
&& players[player->kartstuff[k_eggmanblame]].mo)
|
||||||
|
P_SetTarget(&newitem->target, players[player->kartstuff[k_eggmanblame]].mo);
|
||||||
|
player->kartstuff[k_eggmanblame] = -1;
|
||||||
|
}
|
||||||
|
|
||||||
player->kartstuff[k_comebackmode] = 0;
|
newitem->flags2 = (player->mo->flags2 & MF2_OBJECTFLIP);
|
||||||
player->kartstuff[k_comebacktimer] = comebacktime;
|
newitem->fuse = 15*TICRATE; // selected randomly.
|
||||||
S_StartSound(player->mo, sfx_s254);
|
|
||||||
|
player->kartstuff[k_comebackmode] = 0;
|
||||||
|
player->kartstuff[k_comebacktimer] = comebacktime;
|
||||||
|
S_StartSound(player->mo, sfx_s254);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Eggman Monitor exploding
|
// Eggman Monitor exploding
|
||||||
else if (player->kartstuff[k_eggmanexplode])
|
else if (player->kartstuff[k_eggmanexplode])
|
||||||
|
|
@ -5212,24 +5222,28 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
player->kartstuff[k_eggmanexplode] = 1;
|
player->kartstuff[k_eggmanexplode] = 1;
|
||||||
}
|
}
|
||||||
// Eggman Monitor throwing
|
// Eggman Monitor throwing
|
||||||
else if (ATTACK_IS_DOWN && player->kartstuff[k_eggmanheld])
|
else if (player->kartstuff[k_eggmanheld])
|
||||||
{
|
{
|
||||||
K_ThrowKartItem(player, false, MT_EGGMANITEM, -1, 0);
|
if (ATTACK_IS_DOWN)
|
||||||
K_PlayAttackTaunt(player->mo);
|
{
|
||||||
player->kartstuff[k_eggmanheld] = 0;
|
K_ThrowKartItem(player, false, MT_EGGMANITEM, -1, 0);
|
||||||
K_UpdateHnextList(player, true);
|
K_PlayAttackTaunt(player->mo);
|
||||||
|
player->kartstuff[k_eggmanheld] = 0;
|
||||||
|
K_UpdateHnextList(player, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Rocket Sneaker
|
// Rocket Sneaker usage
|
||||||
else if (ATTACK_IS_DOWN && !HOLDING_ITEM && onground && NO_HYUDORO
|
else if (player->kartstuff[k_rocketsneakertimer] > 1)
|
||||||
&& player->kartstuff[k_rocketsneakertimer] > 1)
|
|
||||||
{
|
{
|
||||||
K_DoSneaker(player, 2);
|
if (ATTACK_IS_DOWN && !HOLDING_ITEM && onground && NO_HYUDORO)
|
||||||
K_PlayBoostTaunt(player->mo);
|
{
|
||||||
player->kartstuff[k_rocketsneakertimer] -= 2*TICRATE;
|
K_DoSneaker(player, 2);
|
||||||
if (player->kartstuff[k_rocketsneakertimer] < 1)
|
K_PlayBoostTaunt(player->mo);
|
||||||
player->kartstuff[k_rocketsneakertimer] = 1;
|
player->kartstuff[k_rocketsneakertimer] -= 2*TICRATE;
|
||||||
|
if (player->kartstuff[k_rocketsneakertimer] < 1)
|
||||||
|
player->kartstuff[k_rocketsneakertimer] = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Ring boosts with no item
|
|
||||||
else if (player->kartstuff[k_itemtype] == KITEM_NONE)
|
else if (player->kartstuff[k_itemtype] == KITEM_NONE)
|
||||||
{
|
{
|
||||||
if ((player->pflags & PF_ATTACKDOWN) && !HOLDING_ITEM && NO_HYUDORO
|
if ((player->pflags & PF_ATTACKDOWN) && !HOLDING_ITEM && NO_HYUDORO
|
||||||
|
|
|
||||||
|
|
@ -682,7 +682,9 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Don't immediately pick up spilled rings
|
// Don't immediately pick up spilled rings
|
||||||
if (special->threshold > 0)
|
if (special->threshold > 0
|
||||||
|
|| player->kartstuff[k_squishedtimer]
|
||||||
|
|| player->kartstuff[k_spinouttimer])
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!(P_CanPickupItem(player, 0)))
|
if (!(P_CanPickupItem(player, 0)))
|
||||||
|
|
@ -3323,11 +3325,11 @@ void P_PlayerRingBurst(player_t *player, INT32 num_rings)
|
||||||
}
|
}
|
||||||
|
|
||||||
ns = FixedMul(momxy, mo->scale);
|
ns = FixedMul(momxy, mo->scale);
|
||||||
mo->momx = FixedMul(FINECOSINE(fa>>ANGLETOFINESHIFT), ns);
|
mo->momx = (mo->target->momx/2) + FixedMul(FINECOSINE(fa>>ANGLETOFINESHIFT), ns);
|
||||||
mo->momy = FixedMul(FINESINE(fa>>ANGLETOFINESHIFT), ns);
|
mo->momy = (mo->target->momy/2) + FixedMul(FINESINE(fa>>ANGLETOFINESHIFT), ns);
|
||||||
|
|
||||||
ns = FixedMul(momz, mo->scale);
|
ns = FixedMul(momz, mo->scale);
|
||||||
P_SetObjectMomZ(mo, ns, false);
|
P_SetObjectMomZ(mo, (mo->target->momz/2) + ns, false);
|
||||||
|
|
||||||
if (player->mo->eflags & MFE_VERTICALFLIP)
|
if (player->mo->eflags & MFE_VERTICALFLIP)
|
||||||
mo->momz *= -1;
|
mo->momz *= -1;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue