diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c index 7ccf3788d..15f1eb488 100644 --- a/src/hardware/hw_md2.c +++ b/src/hardware/hw_md2.c @@ -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 { diff --git a/src/p_mobj.c b/src/p_mobj.c index a9a6b18b3..73fd5bfac 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -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); diff --git a/src/r_skins.c b/src/r_skins.c index 783d1e697..e32e8b8fd 100644 --- a/src/r_skins.c +++ b/src/r_skins.c @@ -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