mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
K_PlayerIsEmptyHandedInSpecial
Replaces the simple condition in K_HandleLapIncrement for successful player exit Essentially means you can get EMPTY HANDED? for crossing the finish line before the player with the emerald does
This commit is contained in:
parent
385988eeed
commit
c3112ea0c8
3 changed files with 63 additions and 1 deletions
|
|
@ -161,6 +161,53 @@ mobj_t *K_GetPossibleSpecialTarget(void)
|
|||
return specialstageinfo.ufo;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------
|
||||
boolean K_PlayerIsEmptyHandedInSpecial(void)
|
||||
|
||||
See header file for description.
|
||||
--------------------------------------------------*/
|
||||
boolean K_PlayerIsEmptyHandedInSpecial(player_t *player)
|
||||
{
|
||||
if (specialstageinfo.valid == false)
|
||||
return false; // Not Sealed Star
|
||||
|
||||
if (!(specialstageinfo.ufo == NULL || P_MobjWasRemoved(specialstageinfo.ufo)))
|
||||
return true; // UFO exists
|
||||
|
||||
thinker_t *think;
|
||||
mobj_t *thing;
|
||||
player_t *orbitplayer = NULL;
|
||||
for (think = thlist[THINK_MOBJ].next; think != &thlist[THINK_MOBJ]; think = think->next)
|
||||
{
|
||||
if (think->function.acp1 == (actionf_p1)P_RemoveThinkerDelayed)
|
||||
continue;
|
||||
|
||||
thing = (mobj_t *)think;
|
||||
if (thing->type != MT_EMERALD)
|
||||
continue;
|
||||
|
||||
// emerald_award(thing)
|
||||
if (!thing->tracer || P_MobjWasRemoved(thing->tracer))
|
||||
continue;
|
||||
if (thing->tracer->type != MT_PLAYER || !thing->tracer->player)
|
||||
continue;
|
||||
|
||||
orbitplayer = thing->tracer->player;
|
||||
|
||||
if (orbitplayer->exiting && !(orbitplayer->pflags & PF_NOCONTEST))
|
||||
{
|
||||
// Another player has successfully taken the emerald to the end
|
||||
return false;
|
||||
}
|
||||
|
||||
// The emerald is being carried, but not by you
|
||||
return (orbitplayer != player);
|
||||
}
|
||||
|
||||
// EMERALD DELETED!?
|
||||
return true;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------
|
||||
void K_FadeOutSpecialMusic(UINT32 distance)
|
||||
|
||||
|
|
|
|||
|
|
@ -68,6 +68,21 @@ void K_TickSpecialStage(void);
|
|||
|
||||
mobj_t *K_GetPossibleSpecialTarget(void);
|
||||
|
||||
/*--------------------------------------------------
|
||||
boolean K_PlayerIsEmptyHandedInSpecial(player_t *player)
|
||||
|
||||
Gets whether the player has failed a Sealed
|
||||
Star via finishing without an Emerald
|
||||
|
||||
Input Arguments:-
|
||||
player - Player to check for
|
||||
|
||||
Return:-
|
||||
Should player fail or not
|
||||
--------------------------------------------------*/
|
||||
|
||||
boolean K_PlayerIsEmptyHandedInSpecial(player_t *player);
|
||||
|
||||
/*--------------------------------------------------
|
||||
void K_FadeOutSpecialMusic(UINT32 distance)
|
||||
|
||||
|
|
|
|||
|
|
@ -1997,7 +1997,7 @@ static void K_HandleLapIncrement(player_t *player)
|
|||
if (specialstageinfo.valid == true)
|
||||
{
|
||||
// Don't permit a win just by sneaking ahead of the UFO/emerald.
|
||||
if (!(specialstageinfo.ufo == NULL || P_MobjWasRemoved(specialstageinfo.ufo)))
|
||||
if (K_PlayerIsEmptyHandedInSpecial(player))
|
||||
{
|
||||
applyflags |= PF_NOCONTEST;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue