Deduplicate frame2spr2
This commit is contained in:
parent
08726d4098
commit
60abb9f010
4 changed files with 78 additions and 131 deletions
68
src/g_demo.c
68
src/g_demo.c
|
|
@ -408,69 +408,6 @@ static UINT8 *G_ReadZipTic(ticcmd_t *cmd, UINT8 *dp, UINT16 version)
|
|||
return dp;
|
||||
}
|
||||
|
||||
#define F(x) case x - 'A':
|
||||
static void frame2spr2(ziptic_t *zt, skin_t *skin, UINT32 inframe)
|
||||
{
|
||||
UINT8 spr2, outframe = 0;
|
||||
switch (inframe & FF_FRAMEMASK)
|
||||
{
|
||||
F('A') F('B')
|
||||
spr2 = SPR2_STIN;
|
||||
outframe = inframe & 1;
|
||||
break;
|
||||
F('C') F('D')
|
||||
spr2 = SPR2_STIL;
|
||||
outframe = inframe & 1;
|
||||
break;
|
||||
F('E') F('F')
|
||||
spr2 = SPR2_STIR;
|
||||
outframe = inframe & 1;
|
||||
break;
|
||||
F('G')
|
||||
spr2 = SPR2_SLWN;
|
||||
break;
|
||||
F('H')
|
||||
spr2 = SPR2_SLWL;
|
||||
break;
|
||||
F('I')
|
||||
spr2 = SPR2_SLWR;
|
||||
break;
|
||||
F('J')
|
||||
spr2 = SPR2_FSTN;
|
||||
break;
|
||||
F('K')
|
||||
spr2 = SPR2_FSTL;
|
||||
break;
|
||||
F('L')
|
||||
spr2 = SPR2_FSTR;
|
||||
break;
|
||||
F('M') F('N')
|
||||
spr2 = SPR2_DRLN;
|
||||
outframe = inframe & 1;
|
||||
break;
|
||||
F('O') F('P')
|
||||
spr2 = SPR2_DRRN;
|
||||
outframe = inframe & 1;
|
||||
break;
|
||||
F('Q')
|
||||
spr2 = SPR2_SPIN;
|
||||
break;
|
||||
F('R')
|
||||
spr2 = SPR2_KART;
|
||||
break;
|
||||
F('S')
|
||||
spr2 = SPR2_SIGN;
|
||||
break;
|
||||
default:
|
||||
spr2 = SPR2_KART;
|
||||
outframe = inframe - 18; // not 19! frame 0 is squish
|
||||
break;
|
||||
}
|
||||
zt->frame = (inframe & ~FF_FRAMEMASK) | outframe;
|
||||
zt->spr2 = P_GetSkinSprite2(skin, spr2, NULL);
|
||||
}
|
||||
#undef F
|
||||
|
||||
// call G_FreeExtraZipTic, you get the idea
|
||||
static UINT8 *G_ReadExtraZipTic(ziptic_t *zt, UINT8 *dp, UINT16 version, mobj_t *mo)
|
||||
{
|
||||
|
|
@ -509,7 +446,7 @@ static UINT8 *G_ReadExtraZipTic(ziptic_t *zt, UINT8 *dp, UINT16 version, mobj_t
|
|||
{
|
||||
if (kart)
|
||||
{
|
||||
frame2spr2(zt, mo->skin, READUINT8(dp));
|
||||
zt->spr2 = P_KartFrameToSprite2(mo->skin, READUINT8(dp), &zt->frame);
|
||||
zt->flags |= GZT_SPR2;
|
||||
}
|
||||
else
|
||||
|
|
@ -1851,8 +1788,6 @@ void G_ConsGhostTic(INT32 playernum)
|
|||
}
|
||||
}
|
||||
|
||||
G_FreeExtraZipTic(&zt);
|
||||
|
||||
if (testmo)
|
||||
{
|
||||
// Re-synchronise
|
||||
|
|
@ -1904,6 +1839,7 @@ void G_ConsGhostTic(INT32 playernum)
|
|||
}
|
||||
|
||||
skip:
|
||||
G_FreeExtraZipTic(&zt);
|
||||
if (*demobuf.p == DEMOMARKER)
|
||||
{
|
||||
// end of demo data stream
|
||||
|
|
|
|||
|
|
@ -573,69 +573,6 @@ static int mobj_get(lua_State *L)
|
|||
return 1;
|
||||
}
|
||||
|
||||
#define F(x) case x - 'A':
|
||||
static void frame2spr2(mobj_t *mo, UINT32 inframe)
|
||||
{
|
||||
UINT8 spr2, outframe = 0;
|
||||
switch (inframe & FF_FRAMEMASK)
|
||||
{
|
||||
F('A') F('B')
|
||||
spr2 = SPR2_STIN;
|
||||
outframe = inframe & 1;
|
||||
break;
|
||||
F('C') F('D')
|
||||
spr2 = SPR2_STIL;
|
||||
outframe = inframe & 1;
|
||||
break;
|
||||
F('E') F('F')
|
||||
spr2 = SPR2_STIR;
|
||||
outframe = inframe & 1;
|
||||
break;
|
||||
F('G')
|
||||
spr2 = SPR2_SLWN;
|
||||
break;
|
||||
F('H')
|
||||
spr2 = SPR2_SLWL;
|
||||
break;
|
||||
F('I')
|
||||
spr2 = SPR2_SLWR;
|
||||
break;
|
||||
F('J')
|
||||
spr2 = SPR2_FSTN;
|
||||
break;
|
||||
F('K')
|
||||
spr2 = SPR2_FSTL;
|
||||
break;
|
||||
F('L')
|
||||
spr2 = SPR2_FSTR;
|
||||
break;
|
||||
F('M') F('N')
|
||||
spr2 = SPR2_DRLN;
|
||||
outframe = inframe & 1;
|
||||
break;
|
||||
F('O') F('P')
|
||||
spr2 = SPR2_DRRN;
|
||||
outframe = inframe & 1;
|
||||
break;
|
||||
F('Q')
|
||||
spr2 = SPR2_SPIN;
|
||||
break;
|
||||
F('R')
|
||||
spr2 = SPR2_KART;
|
||||
break;
|
||||
F('S')
|
||||
spr2 = SPR2_SIGN;
|
||||
break;
|
||||
default:
|
||||
spr2 = SPR2_KART;
|
||||
outframe = inframe - 18; // not 19! frame 0 is squish
|
||||
break;
|
||||
}
|
||||
mo->frame = (inframe & ~FF_FRAMEMASK) | outframe;
|
||||
mo->sprite2 = P_GetSkinSprite2((skin_t *)mo->skin, spr2, mo->player);
|
||||
}
|
||||
#undef F
|
||||
|
||||
#define NOSET luaL_error(L, LUA_QL("mobj_t") " field " LUA_QS " should not be set directly.", mobj_opt[field])
|
||||
#define NOSETPOS luaL_error(L, LUA_QL("mobj_t") " field " LUA_QS " should not be set directly. Use " LUA_QL("P_Move") ", " LUA_QL("P_TryMove") ", or " LUA_QL("P_SetOrigin") ", or " LUA_QL("P_MoveOrigin") " instead.", mobj_opt[field])
|
||||
static int mobj_set(lua_State *L)
|
||||
|
|
@ -698,14 +635,22 @@ static int mobj_set(lua_State *L)
|
|||
{
|
||||
spritenum_t newsprite = luaL_checkinteger(L, 3);
|
||||
if (lua_compatmode && mo->sprite != SPR_PLAY && newsprite == SPR_PLAY)
|
||||
frame2spr2(mo, mo->frame);
|
||||
{
|
||||
UINT8 outframe;
|
||||
mo->sprite2 = P_KartFrameToSprite2(mo->skin, mo->frame, &outframe);
|
||||
mo->frame = (mo->frame & ~FF_FRAMEMASK) | outframe;
|
||||
}
|
||||
mo->sprite = newsprite;
|
||||
break;
|
||||
}
|
||||
case mobj_frame:
|
||||
// Check for SPR2
|
||||
if (lua_compatmode && mo->sprite == SPR_PLAY)
|
||||
frame2spr2(mo, (UINT32)luaL_checkinteger(L, 3));
|
||||
{
|
||||
UINT8 outframe;
|
||||
mo->sprite2 = P_KartFrameToSprite2(mo->skin, luaL_checkinteger(L, 3), &outframe);
|
||||
mo->frame = (mo->frame & ~FF_FRAMEMASK) | outframe;
|
||||
}
|
||||
else
|
||||
mo->frame = (UINT32)luaL_checkinteger(L, 3);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -95,6 +95,71 @@ UINT8 P_GetSkinSprite2(skin_t *skin, UINT8 spr2, player_t *player)
|
|||
return spr2;
|
||||
}
|
||||
|
||||
// converts the kart player frame in inframe to the equivalent sprite2 + frame
|
||||
UINT8 P_KartFrameToSprite2(skin_t *skin, UINT8 inframe, UINT8 *outframe)
|
||||
{
|
||||
UINT8 spr2, frame = 0;
|
||||
#define F(x) case x - 'A':
|
||||
switch (inframe & FF_FRAMEMASK)
|
||||
{
|
||||
F('A') F('B')
|
||||
spr2 = SPR2_STIN;
|
||||
frame = inframe & 1;
|
||||
break;
|
||||
F('C') F('D')
|
||||
spr2 = SPR2_STIL;
|
||||
frame = inframe & 1;
|
||||
break;
|
||||
F('E') F('F')
|
||||
spr2 = SPR2_STIR;
|
||||
frame = inframe & 1;
|
||||
break;
|
||||
F('G')
|
||||
spr2 = SPR2_SLWN;
|
||||
break;
|
||||
F('H')
|
||||
spr2 = SPR2_SLWL;
|
||||
break;
|
||||
F('I')
|
||||
spr2 = SPR2_SLWR;
|
||||
break;
|
||||
F('J')
|
||||
spr2 = SPR2_FSTN;
|
||||
break;
|
||||
F('K')
|
||||
spr2 = SPR2_FSTL;
|
||||
break;
|
||||
F('L')
|
||||
spr2 = SPR2_FSTR;
|
||||
break;
|
||||
F('M') F('N')
|
||||
spr2 = SPR2_DRLN;
|
||||
frame = inframe & 1;
|
||||
break;
|
||||
F('O') F('P')
|
||||
spr2 = SPR2_DRRN;
|
||||
frame = inframe & 1;
|
||||
break;
|
||||
F('Q')
|
||||
spr2 = SPR2_SPIN;
|
||||
break;
|
||||
F('R')
|
||||
spr2 = SPR2_KART;
|
||||
break;
|
||||
F('S')
|
||||
spr2 = SPR2_SIGN;
|
||||
break;
|
||||
default:
|
||||
spr2 = SPR2_KART;
|
||||
frame = (inframe & FF_FRAMEMASK) - 18; // not 19! frame 0 is squish
|
||||
break;
|
||||
}
|
||||
#undef F
|
||||
if (outframe)
|
||||
*outframe = frame;
|
||||
return P_GetSkinSprite2(skin, spr2, NULL);
|
||||
}
|
||||
|
||||
static void Sk_SetDefaultValue(skin_t *skin)
|
||||
{
|
||||
INT32 i;
|
||||
|
|
|
|||
|
|
@ -96,6 +96,7 @@ void R_PatchSkins(UINT16 wadnum);
|
|||
void R_AddSkins(UINT16 wadnum);
|
||||
|
||||
UINT8 P_GetSkinSprite2(skin_t *skin, UINT8 spr2, player_t *player);
|
||||
UINT8 P_KartFrameToSprite2(skin_t *skin, UINT8 inframe, UINT8 *outframe);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
|
|
|
|||
Loading…
Reference in a new issue