mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Merge branch 'spinout-type-cleanup' into 'master'
Don't run out wipeout in the air See merge request KartKrew/Kart!314
This commit is contained in:
commit
89c5d35fce
7 changed files with 55 additions and 23 deletions
|
|
@ -257,6 +257,25 @@ typedef enum
|
||||||
NUMKARTSHIELDS
|
NUMKARTSHIELDS
|
||||||
} kartshields_t;
|
} kartshields_t;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
KSPIN_THRUST = (1<<0),
|
||||||
|
KSPIN_IFRAMES = (1<<1),
|
||||||
|
KSPIN_AIRTIMER = (1<<2),
|
||||||
|
|
||||||
|
KSPIN_TYPEBIT = (1<<3),
|
||||||
|
KSPIN_TYPEMASK = ~( KSPIN_TYPEBIT - 1 ),
|
||||||
|
|
||||||
|
#define KSPIN_TYPE( type ) ( KSPIN_TYPEBIT << type )
|
||||||
|
|
||||||
|
KSPIN_SPINOUT = KSPIN_TYPE(0)|KSPIN_IFRAMES|KSPIN_THRUST,
|
||||||
|
KSPIN_WIPEOUT = KSPIN_TYPE(1)|KSPIN_IFRAMES,
|
||||||
|
KSPIN_STUNG = KSPIN_TYPE(2),
|
||||||
|
KSPIN_EXPLOSION = KSPIN_TYPE(3)|KSPIN_IFRAMES|KSPIN_AIRTIMER,
|
||||||
|
|
||||||
|
#undef KSPIN_TYPE
|
||||||
|
} kartspinoutflags_t;
|
||||||
|
|
||||||
//{ SRB2kart - kartstuff
|
//{ SRB2kart - kartstuff
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
|
|
@ -270,7 +289,7 @@ typedef enum
|
||||||
k_instashield, // Instashield no-damage animation timer
|
k_instashield, // Instashield no-damage animation timer
|
||||||
|
|
||||||
k_floorboost, // Prevents Sneaker sounds for a breif duration when triggered by a floor panel
|
k_floorboost, // Prevents Sneaker sounds for a breif duration when triggered by a floor panel
|
||||||
k_spinouttype, // Determines whether to thrust forward or not while spinning out; 0 = move forwards, 1 = stay still, 2 = stay still & no flashing tics
|
k_spinouttype, // Determines the mode of spinout/wipeout, see kartspinoutflags_t
|
||||||
|
|
||||||
k_drift, // Drifting Left or Right, plus a bigger counter = sharper turn
|
k_drift, // Drifting Left or Right, plus a bigger counter = sharper turn
|
||||||
k_driftend, // Drift has ended, used to adjust character angle after drift
|
k_driftend, // Drift has ended, used to adjust character angle after drift
|
||||||
|
|
|
||||||
|
|
@ -9429,6 +9429,19 @@ struct {
|
||||||
{"KSHIELD_FLAME",KSHIELD_FLAME},
|
{"KSHIELD_FLAME",KSHIELD_FLAME},
|
||||||
{"NUMKARTSHIELDS",NUMKARTSHIELDS},
|
{"NUMKARTSHIELDS",NUMKARTSHIELDS},
|
||||||
|
|
||||||
|
// kartspinoutflags_t
|
||||||
|
{"KSPIN_THRUST",KSPIN_THRUST},
|
||||||
|
{"KSPIN_IFRAMES",KSPIN_IFRAMES},
|
||||||
|
{"KSPIN_AIRTIMER",KSPIN_AIRTIMER},
|
||||||
|
|
||||||
|
{"KSPIN_TYPEBIT",KSPIN_TYPEBIT},
|
||||||
|
{"KSPIN_TYPEMASK",KSPIN_TYPEMASK},
|
||||||
|
|
||||||
|
{"KSPIN_SPINOUT",KSPIN_SPINOUT},
|
||||||
|
{"KSPIN_WIPEOUT",KSPIN_WIPEOUT},
|
||||||
|
{"KSPIN_STUNG",KSPIN_STUNG},
|
||||||
|
{"KSPIN_EXPLOSION",KSPIN_EXPLOSION},
|
||||||
|
|
||||||
// translation colormaps
|
// translation colormaps
|
||||||
{"TC_DEFAULT",TC_DEFAULT},
|
{"TC_DEFAULT",TC_DEFAULT},
|
||||||
{"TC_BOSS",TC_BOSS},
|
{"TC_BOSS",TC_BOSS},
|
||||||
|
|
|
||||||
|
|
@ -148,7 +148,7 @@ boolean K_BananaBallhogCollide(mobj_t *t1, mobj_t *t2)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Player Damage
|
// Player Damage
|
||||||
K_SpinPlayer(t2->player, t1->target, 0, t1, (t1->type == MT_BANANA || t1->type == MT_BANANA_SHIELD));
|
K_SpinPlayer(t2->player, t1->target, KSPIN_SPINOUT, t1, (t1->type == MT_BANANA || t1->type == MT_BANANA_SHIELD));
|
||||||
}
|
}
|
||||||
|
|
||||||
damageitem = true;
|
damageitem = true;
|
||||||
|
|
@ -332,7 +332,7 @@ boolean K_MineExplosionCollide(mobj_t *t1, mobj_t *t2)
|
||||||
if (t1->state == &states[S_MINEEXPLOSION1])
|
if (t1->state == &states[S_MINEEXPLOSION1])
|
||||||
K_ExplodePlayer(t2->player, t1->target, t1);
|
K_ExplodePlayer(t2->player, t1->target, t1);
|
||||||
else
|
else
|
||||||
K_SpinPlayer(t2->player, t1->target, 0, t1, false);
|
K_SpinPlayer(t2->player, t1->target, KSPIN_SPINOUT, t1, false);
|
||||||
}
|
}
|
||||||
else if (t2->flags & MF_SHOOTABLE)
|
else if (t2->flags & MF_SHOOTABLE)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
20
src/k_kart.c
20
src/k_kart.c
|
|
@ -1055,7 +1055,7 @@ static void K_DebtStingPlayer(player_t *player, INT32 length)
|
||||||
player->kartstuff[k_driftcharge] = 0;
|
player->kartstuff[k_driftcharge] = 0;
|
||||||
player->kartstuff[k_pogospring] = 0;
|
player->kartstuff[k_pogospring] = 0;
|
||||||
|
|
||||||
player->kartstuff[k_spinouttype] = 2;
|
player->kartstuff[k_spinouttype] = KSPIN_STUNG;
|
||||||
player->kartstuff[k_spinouttimer] = length;
|
player->kartstuff[k_spinouttimer] = length;
|
||||||
player->kartstuff[k_wipeoutslow] = min(length-1, wipeoutslowtime+1);
|
player->kartstuff[k_wipeoutslow] = min(length-1, wipeoutslowtime+1);
|
||||||
|
|
||||||
|
|
@ -2456,7 +2456,7 @@ void K_SpinPlayer(player_t *player, mobj_t *source, INT32 type, mobj_t *inflicto
|
||||||
if (player->health <= 0)
|
if (player->health <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinouttype] != 2)
|
if (player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && ( player->kartstuff[k_spinouttype] & KSPIN_IFRAMES ))
|
||||||
|| player->kartstuff[k_invincibilitytimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_hyudorotimer] > 0
|
|| player->kartstuff[k_invincibilitytimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_hyudorotimer] > 0
|
||||||
|| (G_BattleGametype() && ((player->kartstuff[k_bumper] <= 0 && player->kartstuff[k_comebacktimer]) || player->kartstuff[k_comebackmode] == 1)))
|
|| (G_BattleGametype() && ((player->kartstuff[k_bumper] <= 0 && player->kartstuff[k_comebacktimer]) || player->kartstuff[k_comebackmode] == 1)))
|
||||||
{
|
{
|
||||||
|
|
@ -2528,7 +2528,7 @@ void K_SpinPlayer(player_t *player, mobj_t *source, INT32 type, mobj_t *inflicto
|
||||||
|
|
||||||
player->kartstuff[k_spinouttype] = type;
|
player->kartstuff[k_spinouttype] = type;
|
||||||
|
|
||||||
if (player->kartstuff[k_spinouttype] <= 0) // type 0 is spinout, type 1 is wipeout, type 2 is no-invuln wipeout
|
if (( player->kartstuff[k_spinouttype] & KSPIN_THRUST ))
|
||||||
{
|
{
|
||||||
// At spinout, player speed is increased to 1/4 their regular speed, moving them forward
|
// At spinout, player speed is increased to 1/4 their regular speed, moving them forward
|
||||||
if (player->speed < K_GetKartSpeed(player, true)/4)
|
if (player->speed < K_GetKartSpeed(player, true)/4)
|
||||||
|
|
@ -2759,7 +2759,7 @@ void K_ExplodePlayer(player_t *player, mobj_t *source, mobj_t *inflictor) // A b
|
||||||
player->kartstuff[k_pogospring] = 0;
|
player->kartstuff[k_pogospring] = 0;
|
||||||
|
|
||||||
// This is the only part that SHOULDN'T combo :VVVVV
|
// This is the only part that SHOULDN'T combo :VVVVV
|
||||||
if (G_BattleGametype() && !(player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinouttype] != 2)))
|
if (G_BattleGametype() && !(player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && ( player->kartstuff[k_spinouttype] & KSPIN_IFRAMES ))))
|
||||||
{
|
{
|
||||||
if (source && source->player && player != source->player)
|
if (source && source->player && player != source->player)
|
||||||
{
|
{
|
||||||
|
|
@ -2798,7 +2798,7 @@ void K_ExplodePlayer(player_t *player, mobj_t *source, mobj_t *inflictor) // A b
|
||||||
K_CheckBumpers();
|
K_CheckBumpers();
|
||||||
}
|
}
|
||||||
|
|
||||||
player->kartstuff[k_spinouttype] = 1;
|
player->kartstuff[k_spinouttype] = KSPIN_EXPLOSION;
|
||||||
player->kartstuff[k_spinouttimer] = (3*TICRATE/2)+2;
|
player->kartstuff[k_spinouttimer] = (3*TICRATE/2)+2;
|
||||||
|
|
||||||
player->powers[pw_flashing] = K_GetKartFlashing(player);
|
player->powers[pw_flashing] = K_GetKartFlashing(player);
|
||||||
|
|
@ -2849,7 +2849,7 @@ void K_StealBumper(player_t *player, player_t *victim, boolean force)
|
||||||
if (player->kartstuff[k_squishedtimer] > 0 || player->kartstuff[k_spinouttimer] > 0)
|
if (player->kartstuff[k_squishedtimer] > 0 || player->kartstuff[k_spinouttimer] > 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (victim->powers[pw_flashing] > 0 || victim->kartstuff[k_squishedtimer] > 0 || (victim->kartstuff[k_spinouttimer] > 0 && victim->kartstuff[k_spinouttype] != 2)
|
if (victim->powers[pw_flashing] > 0 || victim->kartstuff[k_squishedtimer] > 0 || (victim->kartstuff[k_spinouttimer] > 0 && ( victim->kartstuff[k_spinouttype] & KSPIN_IFRAMES ))
|
||||||
|| victim->kartstuff[k_invincibilitytimer] > 0 || victim->kartstuff[k_growshrinktimer] > 0 || victim->kartstuff[k_hyudorotimer] > 0)
|
|| victim->kartstuff[k_invincibilitytimer] > 0 || victim->kartstuff[k_growshrinktimer] > 0 || victim->kartstuff[k_hyudorotimer] > 0)
|
||||||
{
|
{
|
||||||
K_DoInstashield(victim);
|
K_DoInstashield(victim);
|
||||||
|
|
@ -5862,7 +5862,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
||||||
player->karthud[khud_timeovercam] = 0;
|
player->karthud[khud_timeovercam] = 0;
|
||||||
|
|
||||||
// Specific hack because it insists on setting flashing tics during this anyway...
|
// Specific hack because it insists on setting flashing tics during this anyway...
|
||||||
if (player->kartstuff[k_spinouttype] == 2)
|
if (( player->kartstuff[k_spinouttype] & KSPIN_IFRAMES ) == 0)
|
||||||
{
|
{
|
||||||
player->powers[pw_flashing] = 0;
|
player->powers[pw_flashing] = 0;
|
||||||
}
|
}
|
||||||
|
|
@ -5881,7 +5881,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
||||||
if (player->kartstuff[k_spinouttimer])
|
if (player->kartstuff[k_spinouttimer])
|
||||||
{
|
{
|
||||||
if ((P_IsObjectOnGround(player->mo)
|
if ((P_IsObjectOnGround(player->mo)
|
||||||
|| (player->kartstuff[k_spinouttype] != 0))
|
|| ( player->kartstuff[k_spinouttype] & KSPIN_AIRTIMER ))
|
||||||
&& (!player->kartstuff[k_sneakertimer]))
|
&& (!player->kartstuff[k_sneakertimer]))
|
||||||
{
|
{
|
||||||
player->kartstuff[k_spinouttimer]--;
|
player->kartstuff[k_spinouttimer]--;
|
||||||
|
|
@ -6038,7 +6038,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
||||||
player->kartstuff[k_killfield]++;
|
player->kartstuff[k_killfield]++;
|
||||||
if (player->kartstuff[k_killfield] > 4*TICRATE)
|
if (player->kartstuff[k_killfield] > 4*TICRATE)
|
||||||
{
|
{
|
||||||
K_SpinPlayer(player, NULL, 0, NULL, false);
|
K_SpinPlayer(player, NULL, KSPIN_SPINOUT, NULL, false);
|
||||||
//player->kartstuff[k_killfield] = 1;
|
//player->kartstuff[k_killfield] = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -7150,7 +7150,7 @@ static void K_KartSpindash(player_t *player)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (chargetime < -TICRATE)
|
else if (chargetime < -TICRATE)
|
||||||
K_SpinPlayer(player, NULL, 0, NULL, false);
|
K_SpinPlayer(player, NULL, KSPIN_SPINOUT, NULL, false);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (player->kartstuff[k_spindash] % 4 == 0)
|
if (player->kartstuff[k_spindash] % 4 == 0)
|
||||||
|
|
|
||||||
|
|
@ -557,7 +557,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
||||||
P_RemoveMobj(special);
|
P_RemoveMobj(special);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
K_SpinPlayer(player, special->target, 0, special, false);
|
K_SpinPlayer(player, special->target, KSPIN_SPINOUT, special, false);
|
||||||
return;
|
return;
|
||||||
/*case MT_EERIEFOG:
|
/*case MT_EERIEFOG:
|
||||||
special->frame &= ~FF_TRANS80;
|
special->frame &= ~FF_TRANS80;
|
||||||
|
|
@ -3234,14 +3234,14 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
||||||
player->kartstuff[k_sneakertimer] = 0;
|
player->kartstuff[k_sneakertimer] = 0;
|
||||||
player->kartstuff[k_numsneakers] = 0;
|
player->kartstuff[k_numsneakers] = 0;
|
||||||
|
|
||||||
K_SpinPlayer(player, source, 1, inflictor, false);
|
K_SpinPlayer(player, source, KSPIN_WIPEOUT, inflictor, false);
|
||||||
K_KartPainEnergyFling(player);
|
K_KartPainEnergyFling(player);
|
||||||
|
|
||||||
if (P_IsDisplayPlayer(player))
|
if (P_IsDisplayPlayer(player))
|
||||||
P_StartQuake(32<<FRACBITS, 5);
|
P_StartQuake(32<<FRACBITS, 5);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
K_SpinPlayer(player, source, 0, inflictor, false);
|
K_SpinPlayer(player, source, KSPIN_SPINOUT, inflictor, false);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
12
src/p_map.c
12
src/p_map.c
|
|
@ -777,7 +777,7 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// Player Damage
|
// Player Damage
|
||||||
K_SpinPlayer(tmthing->player, thing, 0, ((thing->type == MT_BUBBLESHIELD) ? thing->target : thing), false);
|
K_SpinPlayer(tmthing->player, thing, KSPIN_SPINOUT, ((thing->type == MT_BUBBLESHIELD) ? thing->target : thing), false);
|
||||||
S_StartSound(thing, sfx_s3k44);
|
S_StartSound(thing, sfx_s3k44);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -835,7 +835,7 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// Player Damage
|
// Player Damage
|
||||||
K_SpinPlayer(thing->player, tmthing, 0, ((tmthing->type == MT_BUBBLESHIELD) ? tmthing->target : tmthing), false);
|
K_SpinPlayer(thing->player, tmthing, KSPIN_SPINOUT, ((tmthing->type == MT_BUBBLESHIELD) ? tmthing->target : tmthing), false);
|
||||||
S_StartSound(tmthing, sfx_s3k44);
|
S_StartSound(tmthing, sfx_s3k44);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -1429,7 +1429,7 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
||||||
if (G_BattleGametype() && tmthing->player->kartstuff[k_pogospring])
|
if (G_BattleGametype() && tmthing->player->kartstuff[k_pogospring])
|
||||||
{
|
{
|
||||||
K_StealBumper(tmthing->player, thing->player, false);
|
K_StealBumper(tmthing->player, thing->player, false);
|
||||||
K_SpinPlayer(thing->player, tmthing, 0, tmthing, false);
|
K_SpinPlayer(thing->player, tmthing, KSPIN_SPINOUT, tmthing, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (P_IsObjectOnGround(tmthing) && thing->momz < 0)
|
else if (P_IsObjectOnGround(tmthing) && thing->momz < 0)
|
||||||
|
|
@ -1439,7 +1439,7 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
||||||
if (G_BattleGametype() && thing->player->kartstuff[k_pogospring])
|
if (G_BattleGametype() && thing->player->kartstuff[k_pogospring])
|
||||||
{
|
{
|
||||||
K_StealBumper(thing->player, tmthing->player, false);
|
K_StealBumper(thing->player, tmthing->player, false);
|
||||||
K_SpinPlayer(tmthing->player, thing, 0, thing, false);
|
K_SpinPlayer(tmthing->player, thing, KSPIN_SPINOUT, thing, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1448,12 +1448,12 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
||||||
if (thing->player->kartstuff[k_sneakertimer] && !(tmthing->player->kartstuff[k_sneakertimer]) && !(thing->player->powers[pw_flashing])) // Don't steal bumpers while intangible
|
if (thing->player->kartstuff[k_sneakertimer] && !(tmthing->player->kartstuff[k_sneakertimer]) && !(thing->player->powers[pw_flashing])) // Don't steal bumpers while intangible
|
||||||
{
|
{
|
||||||
K_StealBumper(thing->player, tmthing->player, false);
|
K_StealBumper(thing->player, tmthing->player, false);
|
||||||
K_SpinPlayer(tmthing->player, thing, 0, tmthing, false);
|
K_SpinPlayer(tmthing->player, thing, KSPIN_SPINOUT, tmthing, false);
|
||||||
}
|
}
|
||||||
else if (tmthing->player->kartstuff[k_sneakertimer] && !(thing->player->kartstuff[k_sneakertimer]) && !(tmthing->player->powers[pw_flashing]))
|
else if (tmthing->player->kartstuff[k_sneakertimer] && !(thing->player->kartstuff[k_sneakertimer]) && !(tmthing->player->powers[pw_flashing]))
|
||||||
{
|
{
|
||||||
K_StealBumper(tmthing->player, thing->player, false);
|
K_StealBumper(tmthing->player, thing->player, false);
|
||||||
K_SpinPlayer(thing->player, tmthing, 0, thing, false);
|
K_SpinPlayer(thing->player, tmthing, KSPIN_SPINOUT, thing, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6802,7 +6802,7 @@ void P_NukeEnemies(mobj_t *inflictor, mobj_t *source, fixed_t radius)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (mo->type == MT_PLAYER) // Players wipe out in Kart
|
if (mo->type == MT_PLAYER) // Players wipe out in Kart
|
||||||
K_SpinPlayer(mo->player, source, 0, inflictor, false);
|
K_SpinPlayer(mo->player, source, KSPIN_SPINOUT, inflictor, false);
|
||||||
//}
|
//}
|
||||||
else
|
else
|
||||||
P_DamageMobj(mo, inflictor, source, 1000);
|
P_DamageMobj(mo, inflictor, source, 1000);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue