mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-02-02 06:23:03 +00:00
Update sprite2 serialize
Increase demo version Fix code not using P_GetSkinSpritedef Fix code not using correct data type for player sprite
This commit is contained in:
parent
0f0ee4d156
commit
5f5f8053fe
6 changed files with 31 additions and 23 deletions
|
@ -3527,7 +3527,7 @@ void F_TitleDemoTicker(void)
|
|||
// ==========
|
||||
|
||||
static skin_t *contskins[2];
|
||||
static UINT8 cont_spr2[2][6];
|
||||
static UINT16 cont_spr2[2][6];
|
||||
static UINT8 *contcolormaps[2];
|
||||
|
||||
void F_StartContinue(void)
|
||||
|
|
20
src/g_demo.c
20
src/g_demo.c
|
@ -98,7 +98,7 @@ demoghost *ghosts = NULL;
|
|||
// DEMO RECORDING
|
||||
//
|
||||
|
||||
#define DEMOVERSION 0x0010
|
||||
#define DEMOVERSION 0x0011
|
||||
#define DEMOHEADER "\xF0" "SRB2Replay" "\x0F"
|
||||
|
||||
#define DF_GHOST 0x01 // This demo contains ghost data too!
|
||||
|
@ -409,7 +409,7 @@ void G_WriteGhostTic(mobj_t *ghost)
|
|||
{
|
||||
oldghost.sprite2 = ghost->sprite2;
|
||||
ziptic |= GZT_SPR2;
|
||||
WRITEUINT8(demo_p,oldghost.sprite2);
|
||||
WRITEUINT16(demo_p,oldghost.sprite2);
|
||||
}
|
||||
|
||||
// Check for sprite set changes
|
||||
|
@ -509,7 +509,7 @@ void G_WriteGhostTic(mobj_t *ghost)
|
|||
temp = ghost->player->followmobj->z-ghost->z;
|
||||
WRITEFIXED(demo_p,temp);
|
||||
if (followtic & FZT_SKIN)
|
||||
WRITEUINT8(demo_p,ghost->player->followmobj->sprite2);
|
||||
WRITEUINT16(demo_p,ghost->player->followmobj->sprite2);
|
||||
WRITEUINT16(demo_p,ghost->player->followmobj->sprite);
|
||||
WRITEUINT8(demo_p,(ghost->player->followmobj->frame & FF_FRAMEMASK));
|
||||
WRITEUINT16(demo_p,ghost->player->followmobj->color);
|
||||
|
@ -722,7 +722,7 @@ void G_GhostTicker(void)
|
|||
if (ziptic & GZT_FRAME)
|
||||
g->oldmo.frame = READUINT8(g->p);
|
||||
if (ziptic & GZT_SPR2)
|
||||
g->oldmo.sprite2 = READUINT8(g->p);
|
||||
g->oldmo.sprite2 = (g->version < 0x0011) ? READUINT8(g->p) : READUINT16(g->p);
|
||||
|
||||
// Update ghost
|
||||
P_UnsetThingPosition(g->mo);
|
||||
|
@ -924,7 +924,7 @@ void G_GhostTicker(void)
|
|||
follow->z = g->mo->z + temp;
|
||||
P_SetThingPosition(follow);
|
||||
if (followtic & FZT_SKIN)
|
||||
follow->sprite2 = READUINT8(g->p);
|
||||
follow->sprite2 = (g->version < 0x0011) ? READUINT8(g->p) : READUINT16(g->p);
|
||||
else
|
||||
follow->sprite2 = 0;
|
||||
follow->sprite = READUINT16(g->p);
|
||||
|
@ -1039,7 +1039,7 @@ void G_ReadMetalTic(mobj_t *metal)
|
|||
oldmetal.frame = G_ConvertOldFrameFlags(oldmetal.frame);
|
||||
}
|
||||
if (ziptic & GZT_SPR2)
|
||||
oldmetal.sprite2 = READUINT8(metal_p);
|
||||
oldmetal.sprite2 = (g->version < 0x0011) ? READUINT8(metal_p) : READUINT16(metal_p);
|
||||
|
||||
// Set movement, position, and angle
|
||||
// oldmetal contains where you're supposed to be.
|
||||
|
@ -1172,7 +1172,7 @@ void G_ReadMetalTic(mobj_t *metal)
|
|||
follow->z = metal->z + temp;
|
||||
P_SetThingPosition(follow);
|
||||
if (followtic & FZT_SKIN)
|
||||
follow->sprite2 = READUINT8(metal_p);
|
||||
follow->sprite2 = (g->version < 0x0011) ? READUINT8(metal_p) : READUINT16(metal_p);
|
||||
else
|
||||
follow->sprite2 = 0;
|
||||
follow->sprite = READUINT16(metal_p);
|
||||
|
@ -1180,7 +1180,7 @@ void G_ReadMetalTic(mobj_t *metal)
|
|||
if (metalversion < 0x000f)
|
||||
follow->frame = G_ConvertOldFrameFlags(follow->frame);
|
||||
follow->angle = metal->angle;
|
||||
follow->color = (metalversion==0x000c) ? READUINT8(metal_p) : READUINT16(metal_p);
|
||||
follow->color = (metalversion == 0x000c) ? READUINT8(metal_p) : READUINT16(metal_p);
|
||||
|
||||
if (!(followtic & FZT_SPAWNED))
|
||||
{
|
||||
|
@ -1281,7 +1281,7 @@ void G_WriteMetalTic(mobj_t *metal)
|
|||
{
|
||||
oldmetal.sprite2 = metal->sprite2;
|
||||
ziptic |= GZT_SPR2;
|
||||
WRITEUINT8(demo_p,oldmetal.sprite2);
|
||||
WRITEUINT16(demo_p,oldmetal.sprite2);
|
||||
}
|
||||
|
||||
// Check for sprite set changes
|
||||
|
@ -1356,7 +1356,7 @@ void G_WriteMetalTic(mobj_t *metal)
|
|||
temp = metal->player->followmobj->z-metal->z;
|
||||
WRITEFIXED(demo_p,temp);
|
||||
if (followtic & FZT_SKIN)
|
||||
WRITEUINT8(demo_p,metal->player->followmobj->sprite2);
|
||||
WRITEUINT16(demo_p,metal->player->followmobj->sprite2);
|
||||
WRITEUINT16(demo_p,metal->player->followmobj->sprite);
|
||||
WRITEUINT32(demo_p,metal->player->followmobj->frame); // NOT & FF_FRAMEMASK here, so 32 bits
|
||||
WRITEUINT16(demo_p,metal->player->followmobj->color);
|
||||
|
|
|
@ -1076,9 +1076,6 @@ typedef enum sprite
|
|||
NUMSPRITES
|
||||
} spritenum_t;
|
||||
|
||||
// Make sure to be conscious of FF_FRAMEMASK and the fact sprite2 is stored as a UINT8 whenever you change this table.
|
||||
// Currently, FF_FRAMEMASK is 0xff, or 255 - but the second half is used by FF_SPR2SUPER, so the limitation is 0x7f.
|
||||
// Since this is zero-based, there can be at most 128 different SPR2_'s without changing that.
|
||||
typedef enum playersprite
|
||||
{
|
||||
SPR2_STND = 0,
|
||||
|
|
|
@ -11984,7 +11984,7 @@ static void M_HandleConnectIP(INT32 choice)
|
|||
|
||||
static fixed_t multi_tics;
|
||||
static UINT8 multi_frame;
|
||||
static UINT8 multi_spr2;
|
||||
static UINT16 multi_spr2;
|
||||
static boolean multi_paused;
|
||||
static boolean multi_invcolor;
|
||||
|
||||
|
|
21
src/p_mobj.c
21
src/p_mobj.c
|
@ -83,9 +83,15 @@ void P_AddCachedAction(mobj_t *mobj, INT32 statenum)
|
|||
//
|
||||
static void P_SetupStateAnimation(mobj_t *mobj, state_t *st)
|
||||
{
|
||||
INT32 animlength = (mobj->sprite == SPR_PLAY && mobj->skin)
|
||||
? (INT32)(((skin_t *)mobj->skin)->sprites[mobj->sprite2].numframes) - 1
|
||||
: st->var1;
|
||||
INT32 animlength;
|
||||
|
||||
if (mobj->sprite == SPR_PLAY && mobj->skin)
|
||||
{
|
||||
spritedef_t *spritedef = P_GetSkinSpritedef(mobj->skin, mobj->sprite2);
|
||||
animlength = (INT32)(spritedef->numframes);
|
||||
}
|
||||
else
|
||||
animlength = st->var1;
|
||||
|
||||
if (!(st->frame & FF_ANIMATE))
|
||||
return;
|
||||
|
@ -136,8 +142,13 @@ FUNCINLINE static ATTRINLINE void P_CycleStateAnimation(mobj_t *mobj)
|
|||
}
|
||||
|
||||
// sprite2 version of above
|
||||
if (mobj->skin && (((++mobj->frame) & FF_FRAMEMASK) >= (UINT32)(((skin_t *)mobj->skin)->sprites[mobj->sprite2].numframes)))
|
||||
mobj->frame &= ~FF_FRAMEMASK;
|
||||
if (mobj->skin)
|
||||
{
|
||||
spritedef_t *spritedef = P_GetSkinSpritedef(mobj->skin, mobj->sprite2);
|
||||
UINT32 anim_length = (UINT32)(spritedef->numframes);
|
||||
if (((++mobj->frame) & FF_FRAMEMASK) >= anim_length)
|
||||
mobj->frame &= ~FF_FRAMEMASK;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
@ -1898,7 +1898,7 @@ static void SaveMobjThinker(const thinker_t *th, const UINT8 type)
|
|||
if (diff & MD_SPRITE) {
|
||||
WRITEUINT16(save_p, mobj->sprite);
|
||||
if (mobj->sprite == SPR_PLAY)
|
||||
WRITEUINT8(save_p, mobj->sprite2);
|
||||
WRITEUINT16(save_p, mobj->sprite2);
|
||||
}
|
||||
if (diff & MD_FRAME)
|
||||
{
|
||||
|
@ -2926,12 +2926,12 @@ static thinker_t* LoadMobjThinker(actionf_p1 thinker)
|
|||
if (diff & MD_SPRITE) {
|
||||
mobj->sprite = READUINT16(save_p);
|
||||
if (mobj->sprite == SPR_PLAY)
|
||||
mobj->sprite2 = READUINT8(save_p);
|
||||
mobj->sprite2 = READUINT16(save_p);
|
||||
}
|
||||
else {
|
||||
mobj->sprite = mobj->state->sprite;
|
||||
if (mobj->sprite == SPR_PLAY)
|
||||
mobj->sprite2 = mobj->state->frame&FF_FRAMEMASK;
|
||||
mobj->sprite2 = P_GetStateSprite2(mobj->state);
|
||||
}
|
||||
if (diff & MD_FRAME)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue