mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Better SPB ring locking
Now triggers when locked on instead of when out, and has a temporary HUD colorize animation when ring pickup is locked. also: - SPB spawns rings more frequently - There's only a chance for Super Ring while in debt if you mashed at all - Added Battle fallback items when alone, for the future Break the Capsules
This commit is contained in:
parent
583b3bb4a7
commit
3b352bceea
5 changed files with 59 additions and 22 deletions
|
|
@ -297,6 +297,7 @@ typedef enum
|
|||
k_userings, // Have to be not holding the item button to change from using rings to using items (or vice versa), to prevent some weirdness with the button
|
||||
k_ringdelay, // 3 tic delay between every ring usage
|
||||
k_ringboost, // Ring boost timer
|
||||
k_ringlock, // Prevent picking up rings while SPB is locked on
|
||||
k_jmp, // In Mario Kart, letting go of the jump button stops the drift
|
||||
k_offroad, // In Super Mario Kart, going offroad has lee-way of about 1 second before you start losing speed
|
||||
k_pogospring, // Pogo spring bounce effect
|
||||
|
|
|
|||
|
|
@ -8379,6 +8379,7 @@ static const char *const KARTSTUFF_LIST[] = {
|
|||
"USERINGS",
|
||||
"RINGDELAY",
|
||||
"RINGBOOST",
|
||||
"RINGLOCK",
|
||||
"JMP",
|
||||
"OFFROAD",
|
||||
"POGOSPRING",
|
||||
|
|
|
|||
70
src/k_kart.c
70
src/k_kart.c
|
|
@ -1113,22 +1113,45 @@ static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd)
|
|||
// Record Attack / alone mashing behavior
|
||||
if (modeattacking || pingame == 1)
|
||||
{
|
||||
if (mashed && (modeattacking || cv_superring.value)) // ANY mashed value? You get rings.
|
||||
if (G_RaceGametype())
|
||||
{
|
||||
K_KartGetItemResult(player, KITEM_SUPERRING);
|
||||
player->kartstuff[k_itemblinkmode] = 1;
|
||||
if (P_IsLocalPlayer(player))
|
||||
S_StartSound(NULL, sfx_itrolm);
|
||||
if (mashed && (modeattacking || cv_superring.value)) // ANY mashed value? You get rings.
|
||||
{
|
||||
K_KartGetItemResult(player, KITEM_SUPERRING);
|
||||
player->kartstuff[k_itemblinkmode] = 1;
|
||||
if (P_IsLocalPlayer(player))
|
||||
S_StartSound(NULL, sfx_itrolm);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (modeattacking || cv_sneaker.value) // Waited patiently? You get a sneaker!
|
||||
K_KartGetItemResult(player, KITEM_SNEAKER);
|
||||
else // Default to sad if nothing's enabled...
|
||||
K_KartGetItemResult(player, KITEM_SAD);
|
||||
player->kartstuff[k_itemblinkmode] = 0;
|
||||
if (P_IsLocalPlayer(player))
|
||||
S_StartSound(NULL, sfx_itrolf);
|
||||
}
|
||||
}
|
||||
else
|
||||
else if (G_BattleGametype())
|
||||
{
|
||||
if (modeattacking || cv_sneaker.value) // Waited patiently? You get a sneaker!
|
||||
K_KartGetItemResult(player, KITEM_SNEAKER);
|
||||
else // Default to sad if nothing's enabled...
|
||||
K_KartGetItemResult(player, KITEM_SAD);
|
||||
player->kartstuff[k_itemblinkmode] = 0;
|
||||
if (P_IsLocalPlayer(player))
|
||||
S_StartSound(NULL, sfx_itrolf);
|
||||
if (mashed && (modeattacking || cv_banana.value)) // ANY mashed value? You get a banana.
|
||||
{
|
||||
K_KartGetItemResult(player, KITEM_BANANA);
|
||||
player->kartstuff[k_itemblinkmode] = 1;
|
||||
if (P_IsLocalPlayer(player))
|
||||
S_StartSound(NULL, sfx_itrolm);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (modeattacking || cv_orbinaut.value) // Waited patiently? You get an orbinaut!
|
||||
K_KartGetItemResult(player, KITEM_ORBINAUT);
|
||||
else // Default to sad if nothing's enabled...
|
||||
K_KartGetItemResult(player, KITEM_SAD);
|
||||
player->kartstuff[k_itemblinkmode] = 0;
|
||||
if (P_IsLocalPlayer(player))
|
||||
S_StartSound(NULL, sfx_itrolf);
|
||||
}
|
||||
}
|
||||
|
||||
player->kartstuff[k_itemblink] = TICRATE;
|
||||
|
|
@ -1138,15 +1161,15 @@ static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd)
|
|||
}
|
||||
|
||||
// SPECIAL CASE No. 4:
|
||||
// Being in ring debt occasionally forces Super Ring on you
|
||||
if (player->kartstuff[k_rings] <= 0 && cv_superring.value)
|
||||
// Being in ring debt occasionally forces Super Ring on you if you mashed
|
||||
if (mashed && player->kartstuff[k_rings] < 0 && cv_superring.value)
|
||||
{
|
||||
INT32 debtamount = min(20, abs(player->kartstuff[k_rings])+1);
|
||||
INT32 debtamount = min(20, abs(player->kartstuff[k_rings]));
|
||||
if (P_RandomChance((debtamount*FRACUNIT)/20))
|
||||
{
|
||||
K_KartGetItemResult(player, KITEM_SUPERRING);
|
||||
player->kartstuff[k_itemblink] = TICRATE;
|
||||
player->kartstuff[k_itemblinkmode] = (mashed ? 1 : 0);
|
||||
player->kartstuff[k_itemblinkmode] = 1;
|
||||
player->kartstuff[k_itemroulette] = 0;
|
||||
player->kartstuff[k_roulettetype] = 0;
|
||||
if (P_IsLocalPlayer(player))
|
||||
|
|
@ -6210,9 +6233,12 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
player->kartstuff[k_itemtype] = KITEM_NONE;
|
||||
}
|
||||
|
||||
if (spbplace == -1 || player->kartstuff[k_position] != spbplace)
|
||||
player->kartstuff[k_ringlock] = 0; // reset ring lock
|
||||
|
||||
if (player->kartstuff[k_itemtype] == KITEM_THUNDERSHIELD)
|
||||
{
|
||||
if ((player->kartstuff[k_rings]+player->kartstuff[k_pickuprings]) < 20)
|
||||
if ((player->kartstuff[k_rings]+player->kartstuff[k_pickuprings]) < 20 && !player->kartstuff[k_ringlock])
|
||||
K_LookForRings(player->mo);
|
||||
}
|
||||
else
|
||||
|
|
@ -8226,11 +8252,17 @@ static void K_drawKartRingsAndLives(void)
|
|||
UINT8 secondnum = (abs(stplyr->kartstuff[k_rings]) % 10);
|
||||
INT32 ringflip = 0;
|
||||
UINT8 *ringmap = NULL;
|
||||
boolean colorring = false;
|
||||
INT32 ringx = LAPS_X+7;
|
||||
|
||||
// Rings
|
||||
if (stplyr->kartstuff[k_rings] <= 0 && (leveltime/5 & 1)) // In debt
|
||||
{
|
||||
ringmap = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_CRIMSON, GTC_CACHE);
|
||||
colorring = true;
|
||||
}
|
||||
else if (stplyr->kartstuff[k_ringlock]) // SPB ring lock
|
||||
ringmap = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_JET, GTC_CACHE);
|
||||
else if (stplyr->kartstuff[k_rings] >= 20) // Maxed out
|
||||
ringmap = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_YELLOW, GTC_CACHE);
|
||||
|
||||
|
|
@ -8246,7 +8278,7 @@ static void K_drawKartRingsAndLives(void)
|
|||
ringx += SHORT(kp_ring[ringanim_realframe]->width);
|
||||
}
|
||||
|
||||
V_DrawMappedPatch(ringx, LAPS_Y-16, V_HUDTRANS|splitflags|ringflip, kp_ring[ringanim_realframe], (stplyr->kartstuff[k_rings] <= 0 ? ringmap : NULL)); // Don't do maxed out gold mapping
|
||||
V_DrawMappedPatch(ringx, LAPS_Y-16, V_HUDTRANS|splitflags|ringflip, kp_ring[ringanim_realframe], (colorring ? ringmap : NULL)); // Don't do maxed out gold mapping
|
||||
|
||||
if (stplyr->kartstuff[k_rings] < 0) // Draw the minus for ring debt
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3677,7 +3677,8 @@ void A_AttractChase(mobj_t *actor)
|
|||
if (actor->tracer && actor->tracer->player && actor->tracer->health
|
||||
//&& P_CheckSight(actor, actor->tracer)
|
||||
&& actor->tracer->player->kartstuff[k_itemtype] == KITEM_THUNDERSHIELD
|
||||
&& (actor->tracer->player->kartstuff[k_rings]+actor->tracer->player->kartstuff[k_pickuprings]) < 20)
|
||||
&& (actor->tracer->player->kartstuff[k_rings]+actor->tracer->player->kartstuff[k_pickuprings]) < 20
|
||||
&& !actor->tracer->player->kartstuff[k_ringlock])
|
||||
{
|
||||
fixed_t dist;
|
||||
angle_t hang, vang;
|
||||
|
|
@ -8458,6 +8459,7 @@ void A_SPBChase(mobj_t *actor)
|
|||
fixed_t easiness = ((actor->tracer->player->kartspeed + (10-spark)) << FRACBITS) / 2;
|
||||
|
||||
actor->lastlook = actor->tracer->player-players; // Save the player num for death scumming...
|
||||
actor->tracer->player->kartstuff[k_ringlock] = 1; // set ring lock
|
||||
|
||||
if (!P_IsObjectOnGround(actor->tracer) /*&& !actor->tracer->player->kartstuff[k_pogospring]*/)
|
||||
{
|
||||
|
|
@ -8539,7 +8541,7 @@ void A_SPBChase(mobj_t *actor)
|
|||
actor->momz = FixedMul(zspeed, FINESINE(actor->movedir>>ANGLETOFINESHIFT));
|
||||
|
||||
// Spawn a trail of rings behind the SPB!
|
||||
if (leveltime % 9 == 0)
|
||||
if (leveltime % 6 == 0)
|
||||
{
|
||||
mobj_t *ring = P_SpawnMobj(actor->x - actor->momx, actor->y - actor->momx,
|
||||
actor->z - actor->momz + (24*mapobjectscale), MT_RING);
|
||||
|
|
@ -8585,6 +8587,7 @@ void A_SPBChase(mobj_t *actor)
|
|||
&& !players[actor->lastlook].exiting)
|
||||
{
|
||||
spbplace = players[actor->lastlook].kartstuff[k_position];
|
||||
players[actor->lastlook].kartstuff[k_ringlock] = 1;
|
||||
if (actor->extravalue2-- <= 0 && players[actor->lastlook].mo)
|
||||
{
|
||||
P_SetTarget(&actor->tracer, players[actor->lastlook].mo);
|
||||
|
|
|
|||
|
|
@ -691,7 +691,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
|||
return;
|
||||
|
||||
// No picking up rings while SPB is targetting you
|
||||
if (player->kartstuff[k_position] == spbplace)
|
||||
if (player->kartstuff[k_ringlock])
|
||||
return;
|
||||
|
||||
// Don't immediately pick up spilled rings
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue