mirror of
https://github.com/ZDoom/qzdoom.git
synced 2025-02-06 15:51:02 +00:00
- Apply patch to prevent the flash state from being processed twice after using A_GunFlash.
SVN r3500 (trunk)
This commit is contained in:
parent
d9f7a250ba
commit
19ec79d4f3
3 changed files with 32 additions and 1 deletions
|
@ -28,6 +28,7 @@
|
||||||
#include "thingdef/thingdef.h"
|
#include "thingdef/thingdef.h"
|
||||||
#include "g_level.h"
|
#include "g_level.h"
|
||||||
#include "farchive.h"
|
#include "farchive.h"
|
||||||
|
#include "d_player.h"
|
||||||
|
|
||||||
|
|
||||||
// MACROS ------------------------------------------------------------------
|
// MACROS ------------------------------------------------------------------
|
||||||
|
@ -58,6 +59,30 @@ static FRandom pr_gunshot ("GunShot");
|
||||||
|
|
||||||
// CODE --------------------------------------------------------------------
|
// CODE --------------------------------------------------------------------
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// PROC P_NewPspriteTick
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void P_NewPspriteTick()
|
||||||
|
{
|
||||||
|
// This function should be called after the beginning of a tick, before any possible
|
||||||
|
// prprite-event, or near the end, after any possible psprite event.
|
||||||
|
// Because data is reset for every tick (which it must be) this has no impact on savegames.
|
||||||
|
for (int i = 0; i<MAXPLAYERS; i++)
|
||||||
|
{
|
||||||
|
if (playeringame[i])
|
||||||
|
{
|
||||||
|
pspdef_t *pspdef = players[i].psprites;
|
||||||
|
for (int j = 0;j < NUMPSPRITES; j++)
|
||||||
|
{
|
||||||
|
pspdef[j].processPending = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// PROC P_SetPsprite
|
// PROC P_SetPsprite
|
||||||
|
@ -74,6 +99,8 @@ void P_SetPsprite (player_t *player, int position, FState *state, bool nofunctio
|
||||||
}
|
}
|
||||||
|
|
||||||
psp = &player->psprites[position];
|
psp = &player->psprites[position];
|
||||||
|
psp->processPending = false; // Do not subsequently perform periodic processing within the same tick.
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (state == NULL)
|
if (state == NULL)
|
||||||
|
@ -837,7 +864,7 @@ void P_MovePsprites (player_t *player)
|
||||||
psp = &player->psprites[0];
|
psp = &player->psprites[0];
|
||||||
for (i = 0; i < NUMPSPRITES; i++, psp++)
|
for (i = 0; i < NUMPSPRITES; i++, psp++)
|
||||||
{
|
{
|
||||||
if ((state = psp->state) != NULL) // a null state means not active
|
if ((state = psp->state) != NULL && psp->processPending) // a null state means not active
|
||||||
{
|
{
|
||||||
// drop tic count and possibly change state
|
// drop tic count and possibly change state
|
||||||
if (psp->tics != -1) // a -1 tic count never changes
|
if (psp->tics != -1) // a -1 tic count never changes
|
||||||
|
|
|
@ -70,6 +70,7 @@ struct pspdef_t
|
||||||
fixed_t sy;
|
fixed_t sy;
|
||||||
int sprite;
|
int sprite;
|
||||||
int frame;
|
int frame;
|
||||||
|
bool processPending; // true: waiting for periodic processing on this tick
|
||||||
};
|
};
|
||||||
|
|
||||||
class FArchive;
|
class FArchive;
|
||||||
|
@ -80,6 +81,7 @@ class player_t;
|
||||||
class AActor;
|
class AActor;
|
||||||
struct FState;
|
struct FState;
|
||||||
|
|
||||||
|
void P_NewPspriteTick();
|
||||||
void P_SetPsprite (player_t *player, int position, FState *state, bool nofunction=false);
|
void P_SetPsprite (player_t *player, int position, FState *state, bool nofunction=false);
|
||||||
void P_CalcSwing (player_t *player);
|
void P_CalcSwing (player_t *player);
|
||||||
void P_BringUpWeapon (player_t *player);
|
void P_BringUpWeapon (player_t *player);
|
||||||
|
|
|
@ -84,6 +84,8 @@ void P_Ticker (void)
|
||||||
if (paused || P_CheckTickerPaused())
|
if (paused || P_CheckTickerPaused())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
P_NewPspriteTick();
|
||||||
|
|
||||||
// [RH] Frozen mode is only changed every 4 tics, to make it work with A_Tracer().
|
// [RH] Frozen mode is only changed every 4 tics, to make it work with A_Tracer().
|
||||||
if ((level.time & 3) == 0)
|
if ((level.time & 3) == 0)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue