Fix P_GetStateSprite2

This commit is contained in:
Lactozilla 2023-11-12 22:52:17 -03:00
parent 7ed5e39b1f
commit 0f0ee4d156
3 changed files with 25 additions and 36 deletions

View file

@ -1541,7 +1541,7 @@ boolean HWR_DrawModel(gl_vissprite_t *spr)
#endif
if (!mod)
mod = 1;
frame = spr2frames->frames[frame%mod];
frame = spr2frames->frames[frame % mod];
}
else
{

View file

@ -395,30 +395,24 @@ boolean P_SetPlayerMobjState(mobj_t *mobj, statenum_t state)
UINT16 frame = (mobj->frame & FF_FRAMEMASK)+1;
UINT8 numframes;
UINT16 spr2;
boolean is_super = P_IsStateSprite2Super(st);
if (skin)
{
// Add/Remove SPR2F_SUPER based on certain conditions
if (player->charflags & SF_NOSUPERSPRITES)
is_super = false;
else if (player->powers[pw_super])
is_super = true;
if (is_super)
{
if (mobj->eflags & MFE_FORCENOSUPER)
is_super = false;
}
else if (mobj->eflags & MFE_FORCESUPER)
is_super = true;
spr2 = P_GetStateSprite2(st);
if (is_super)
spr2 |= SPR2F_SUPER;
else
// Add/Remove SPR2F_SUPER based on certain conditions
if (player->charflags & SF_NOSUPERSPRITES)
spr2 &= ~SPR2F_SUPER;
else if (player->powers[pw_super])
spr2 |= SPR2F_SUPER;
if (spr2 & SPR2F_SUPER)
{
if (mobj->eflags & MFE_FORCENOSUPER)
spr2 &= ~SPR2F_SUPER;
}
else if (mobj->eflags & MFE_FORCESUPER)
spr2 |= SPR2F_SUPER;
// Get the sprite2 and frame number
spr2 = P_GetSkinSprite2(skin, spr2, mobj->player);
@ -558,25 +552,19 @@ boolean P_SetMobjState(mobj_t *mobj, statenum_t state)
UINT16 frame = (mobj->frame & FF_FRAMEMASK)+1;
UINT8 numframes;
UINT16 spr2;
boolean is_super = P_IsStateSprite2Super(st);
if (skin)
{
// Add/Remove SPR2F_SUPER based on certain conditions
if (is_super)
{
if (mobj->eflags & MFE_FORCENOSUPER)
is_super = false;
}
else if (mobj->eflags & MFE_FORCESUPER)
is_super = true;
spr2 = P_GetStateSprite2(st);
if (is_super)
// Add/Remove SPR2F_SUPER based on certain conditions
if (spr2 & SPR2F_SUPER)
{
if (mobj->eflags & MFE_FORCENOSUPER)
spr2 &= ~SPR2F_SUPER;
}
else if (mobj->eflags & MFE_FORCESUPER)
spr2 |= SPR2F_SUPER;
else
spr2 &= ~SPR2F_SUPER;
// Get the sprite2 and frame number
spr2 = P_GetSkinSprite2(skin, spr2, NULL);

View file

@ -46,8 +46,9 @@ UINT16 P_GetStateSprite2(state_t *state)
return state->sprite2;
else
{
boolean is_super = state->frame & FF_SPR2SUPER;
UINT16 frame = state->frame & (FF_FRAMEMASK | ~FF_SPR2SUPER);
UINT32 frame = state->frame & FF_FRAMEMASK;
boolean is_super = frame & FF_SPR2SUPER;
frame &= ~FF_SPR2SUPER;
if (is_super)
frame |= SPR2F_SUPER;
return frame;
@ -588,10 +589,10 @@ static UINT16 W_CheckForPatchSkinMarkerInPwad(UINT16 wadid, UINT16 startlump)
return INT16_MAX; // not found
}
static void R_LoadSkinSprites(UINT16 wadnum, UINT16 *lump, UINT16 *lastlump, skin_t *skin, UINT8 start_spr2)
static void R_LoadSkinSprites(UINT16 wadnum, UINT16 *lump, UINT16 *lastlump, skin_t *skin, UINT16 start_spr2)
{
UINT16 newlastlump;
UINT8 sprite2;
UINT16 sprite2;
*lump += 1; // start after S_SKIN
*lastlump = W_CheckNumForNamePwad("S_END",wadnum,*lump); // stop at S_END