mirror of
https://github.com/fabiangreffrath/woof.git
synced 2025-09-23 03:52:12 -04:00
savegame fixes (#1376)
* restore function pointer reading There seems to be a check for NULL somewhere. * remove saveg_compat checks in write function, formatting
This commit is contained in:
parent
dd4e2b55b6
commit
63e625e295
117
src/p_saveg.c
117
src/p_saveg.c
@ -264,8 +264,7 @@ static void saveg_read_thinker_t(thinker_t *str)
|
|||||||
str->next = saveg_readp();
|
str->next = saveg_readp();
|
||||||
|
|
||||||
// think_t function;
|
// think_t function;
|
||||||
saveg_readp();
|
str->function.v = (actionf_v)saveg_readp();
|
||||||
str->function.v = NULL;
|
|
||||||
|
|
||||||
// struct thinker_s* cnext;
|
// struct thinker_s* cnext;
|
||||||
str->cnext = saveg_readp();
|
str->cnext = saveg_readp();
|
||||||
@ -384,12 +383,12 @@ static void saveg_read_mobj_t(mobj_t *str)
|
|||||||
|
|
||||||
if (saveg_compat > saveg_woof510)
|
if (saveg_compat > saveg_woof510)
|
||||||
{
|
{
|
||||||
// [Woof!]: mbf21: int flags2;
|
// [Woof!]: mbf21: int flags2;
|
||||||
str->flags2 = saveg_read32();
|
str->flags2 = saveg_read32();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
str->flags2 = mobjinfo[str->type].flags2;
|
str->flags2 = mobjinfo[str->type].flags2;
|
||||||
}
|
}
|
||||||
|
|
||||||
// int intflags
|
// int intflags
|
||||||
@ -448,11 +447,11 @@ static void saveg_read_mobj_t(mobj_t *str)
|
|||||||
|
|
||||||
if (saveg_compat > saveg_mbf)
|
if (saveg_compat > saveg_mbf)
|
||||||
{
|
{
|
||||||
// [Woof!]: int friction;
|
// [Woof!]: int friction;
|
||||||
str->friction = saveg_read32();
|
str->friction = saveg_read32();
|
||||||
|
|
||||||
// [Woof!]: int movefactor;
|
// [Woof!]: int movefactor;
|
||||||
str->movefactor = saveg_read32();
|
str->movefactor = saveg_read32();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -465,20 +464,20 @@ static void saveg_read_mobj_t(mobj_t *str)
|
|||||||
|
|
||||||
if (saveg_compat > saveg_mbf)
|
if (saveg_compat > saveg_mbf)
|
||||||
{
|
{
|
||||||
// [Woof!]: int interp;
|
// [Woof!]: int interp;
|
||||||
str->interp = saveg_read32();
|
str->interp = saveg_read32();
|
||||||
|
|
||||||
// [Woof!]: fixed_t oldx;
|
// [Woof!]: fixed_t oldx;
|
||||||
str->oldx = saveg_read32();
|
str->oldx = saveg_read32();
|
||||||
|
|
||||||
// [Woof!]: fixed_t oldy;
|
// [Woof!]: fixed_t oldy;
|
||||||
str->oldy = saveg_read32();
|
str->oldy = saveg_read32();
|
||||||
|
|
||||||
// [Woof!]: fixed_t oldz;
|
// [Woof!]: fixed_t oldz;
|
||||||
str->oldz = saveg_read32();
|
str->oldz = saveg_read32();
|
||||||
|
|
||||||
// [Woof!]: angle_t oldangle;
|
// [Woof!]: angle_t oldangle;
|
||||||
str->oldangle = saveg_read32();
|
str->oldangle = saveg_read32();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -491,12 +490,12 @@ static void saveg_read_mobj_t(mobj_t *str)
|
|||||||
|
|
||||||
if (saveg_compat > saveg_woof510)
|
if (saveg_compat > saveg_woof510)
|
||||||
{
|
{
|
||||||
// [Woof!]: int bloodcolor;
|
// [Woof!]: int bloodcolor;
|
||||||
str->bloodcolor = saveg_read32();
|
str->bloodcolor = saveg_read32();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
str->bloodcolor = 0;
|
str->bloodcolor = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// [FG] height of the sprite in pixels
|
// [FG] height of the sprite in pixels
|
||||||
@ -583,11 +582,8 @@ static void saveg_write_mobj_t(mobj_t *str)
|
|||||||
// int flags;
|
// int flags;
|
||||||
saveg_write32(str->flags);
|
saveg_write32(str->flags);
|
||||||
|
|
||||||
if (saveg_compat > saveg_woof510)
|
|
||||||
{
|
|
||||||
// [Woof!]: mbf21: int flags2;
|
// [Woof!]: mbf21: int flags2;
|
||||||
saveg_write32(str->flags2);
|
saveg_write32(str->flags2);
|
||||||
}
|
|
||||||
|
|
||||||
// int intflags;
|
// int intflags;
|
||||||
saveg_write32(str->intflags);
|
saveg_write32(str->intflags);
|
||||||
@ -667,11 +663,8 @@ static void saveg_write_mobj_t(mobj_t *str)
|
|||||||
// [Woof!]: int oldangle;
|
// [Woof!]: int oldangle;
|
||||||
saveg_write32(str->oldangle);
|
saveg_write32(str->oldangle);
|
||||||
|
|
||||||
if (saveg_compat > saveg_woof510)
|
|
||||||
{
|
|
||||||
// [Woof!]: int bloodcolor;
|
// [Woof!]: int bloodcolor;
|
||||||
saveg_write32(str->bloodcolor);
|
saveg_write32(str->bloodcolor);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -752,11 +745,11 @@ static void saveg_read_pspdef_t(pspdef_t *str)
|
|||||||
|
|
||||||
if (saveg_compat > saveg_mbf)
|
if (saveg_compat > saveg_mbf)
|
||||||
{
|
{
|
||||||
// [Woof!]: fixed_t sx2;
|
// [Woof!]: fixed_t sx2;
|
||||||
str->sx2 = saveg_read32();
|
str->sx2 = saveg_read32();
|
||||||
|
|
||||||
// [Woof!]: fixed_t sy2;
|
// [Woof!]: fixed_t sy2;
|
||||||
str->sy2 = saveg_read32();
|
str->sy2 = saveg_read32();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -767,7 +760,6 @@ static void saveg_read_pspdef_t(pspdef_t *str)
|
|||||||
|
|
||||||
static void saveg_write_pspdef_t(pspdef_t *str)
|
static void saveg_write_pspdef_t(pspdef_t *str)
|
||||||
{
|
{
|
||||||
// state_t* state;
|
|
||||||
if (str->state)
|
if (str->state)
|
||||||
{
|
{
|
||||||
saveg_write32(str->state - states);
|
saveg_write32(str->state - states);
|
||||||
@ -839,13 +831,13 @@ static void saveg_read_player_t(player_t *str)
|
|||||||
str->armortype = saveg_read32();
|
str->armortype = saveg_read32();
|
||||||
|
|
||||||
// int powers[NUMPOWERS];
|
// int powers[NUMPOWERS];
|
||||||
for (i=0; i<NUMPOWERS; ++i)
|
for (i = 0; i < NUMPOWERS; ++i)
|
||||||
{
|
{
|
||||||
str->powers[i] = saveg_read32();
|
str->powers[i] = saveg_read32();
|
||||||
}
|
}
|
||||||
|
|
||||||
// boolean cards[NUMCARDS];
|
// boolean cards[NUMCARDS];
|
||||||
for (i=0; i<NUMCARDS; ++i)
|
for (i = 0; i < NUMCARDS; ++i)
|
||||||
{
|
{
|
||||||
str->cards[i] = saveg_read32();
|
str->cards[i] = saveg_read32();
|
||||||
}
|
}
|
||||||
@ -854,7 +846,7 @@ static void saveg_read_player_t(player_t *str)
|
|||||||
str->backpack = saveg_read32();
|
str->backpack = saveg_read32();
|
||||||
|
|
||||||
// int frags[MAXPLAYERS];
|
// int frags[MAXPLAYERS];
|
||||||
for (i=0; i<MAXPLAYERS; ++i)
|
for (i = 0; i < MAXPLAYERS; ++i)
|
||||||
{
|
{
|
||||||
str->frags[i] = saveg_read32();
|
str->frags[i] = saveg_read32();
|
||||||
}
|
}
|
||||||
@ -866,19 +858,19 @@ static void saveg_read_player_t(player_t *str)
|
|||||||
str->pendingweapon = saveg_read_enum();
|
str->pendingweapon = saveg_read_enum();
|
||||||
|
|
||||||
// boolean weaponowned[NUMWEAPONS];
|
// boolean weaponowned[NUMWEAPONS];
|
||||||
for (i=0; i<NUMWEAPONS; ++i)
|
for (i = 0; i < NUMWEAPONS; ++i)
|
||||||
{
|
{
|
||||||
str->weaponowned[i] = saveg_read32();
|
str->weaponowned[i] = saveg_read32();
|
||||||
}
|
}
|
||||||
|
|
||||||
// int ammo[NUMAMMO];
|
// int ammo[NUMAMMO];
|
||||||
for (i=0; i<NUMAMMO; ++i)
|
for (i = 0; i < NUMAMMO; ++i)
|
||||||
{
|
{
|
||||||
str->ammo[i] = saveg_read32();
|
str->ammo[i] = saveg_read32();
|
||||||
}
|
}
|
||||||
|
|
||||||
// int maxammo[NUMAMMO];
|
// int maxammo[NUMAMMO];
|
||||||
for (i=0; i<NUMAMMO; ++i)
|
for (i = 0; i < NUMAMMO; ++i)
|
||||||
{
|
{
|
||||||
str->maxammo[i] = saveg_read32();
|
str->maxammo[i] = saveg_read32();
|
||||||
}
|
}
|
||||||
@ -926,7 +918,7 @@ static void saveg_read_player_t(player_t *str)
|
|||||||
str->colormap = saveg_read32();
|
str->colormap = saveg_read32();
|
||||||
|
|
||||||
// pspdef_t psprites[NUMPSPRITES];
|
// pspdef_t psprites[NUMPSPRITES];
|
||||||
for (i=0; i<NUMPSPRITES; ++i)
|
for (i = 0; i < NUMPSPRITES; ++i)
|
||||||
{
|
{
|
||||||
saveg_read_pspdef_t(&str->psprites[i]);
|
saveg_read_pspdef_t(&str->psprites[i]);
|
||||||
}
|
}
|
||||||
@ -939,12 +931,12 @@ static void saveg_read_player_t(player_t *str)
|
|||||||
|
|
||||||
if (saveg_compat > saveg_mbf)
|
if (saveg_compat > saveg_mbf)
|
||||||
{
|
{
|
||||||
// [Woof!]: angle_t oldviewz;
|
// [Woof!]: angle_t oldviewz;
|
||||||
str->oldviewz = saveg_read32();
|
str->oldviewz = saveg_read32();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
str->oldviewz = 0;
|
str->oldviewz = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -989,13 +981,13 @@ static void saveg_write_player_t(player_t *str)
|
|||||||
saveg_write32(str->armortype);
|
saveg_write32(str->armortype);
|
||||||
|
|
||||||
// int powers[NUMPOWERS];
|
// int powers[NUMPOWERS];
|
||||||
for (i=0; i<NUMPOWERS; ++i)
|
for (i = 0; i < NUMPOWERS; ++i)
|
||||||
{
|
{
|
||||||
saveg_write32(str->powers[i]);
|
saveg_write32(str->powers[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// boolean cards[NUMCARDS];
|
// boolean cards[NUMCARDS];
|
||||||
for (i=0; i<NUMCARDS; ++i)
|
for (i = 0; i < NUMCARDS; ++i)
|
||||||
{
|
{
|
||||||
saveg_write32(str->cards[i]);
|
saveg_write32(str->cards[i]);
|
||||||
}
|
}
|
||||||
@ -1004,7 +996,7 @@ static void saveg_write_player_t(player_t *str)
|
|||||||
saveg_write32(str->backpack);
|
saveg_write32(str->backpack);
|
||||||
|
|
||||||
// int frags[MAXPLAYERS];
|
// int frags[MAXPLAYERS];
|
||||||
for (i=0; i<MAXPLAYERS; ++i)
|
for (i = 0; i < MAXPLAYERS; ++i)
|
||||||
{
|
{
|
||||||
saveg_write32(str->frags[i]);
|
saveg_write32(str->frags[i]);
|
||||||
}
|
}
|
||||||
@ -1016,19 +1008,19 @@ static void saveg_write_player_t(player_t *str)
|
|||||||
saveg_write_enum(str->pendingweapon);
|
saveg_write_enum(str->pendingweapon);
|
||||||
|
|
||||||
// boolean weaponowned[NUMWEAPONS];
|
// boolean weaponowned[NUMWEAPONS];
|
||||||
for (i=0; i<NUMWEAPONS; ++i)
|
for (i = 0; i < NUMWEAPONS; ++i)
|
||||||
{
|
{
|
||||||
saveg_write32(str->weaponowned[i]);
|
saveg_write32(str->weaponowned[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// int ammo[NUMAMMO];
|
// int ammo[NUMAMMO];
|
||||||
for (i=0; i<NUMAMMO; ++i)
|
for (i = 0; i < NUMAMMO; ++i)
|
||||||
{
|
{
|
||||||
saveg_write32(str->ammo[i]);
|
saveg_write32(str->ammo[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// int maxammo[NUMAMMO];
|
// int maxammo[NUMAMMO];
|
||||||
for (i=0; i<NUMAMMO; ++i)
|
for (i = 0; i < NUMAMMO; ++i)
|
||||||
{
|
{
|
||||||
saveg_write32(str->maxammo[i]);
|
saveg_write32(str->maxammo[i]);
|
||||||
}
|
}
|
||||||
@ -1076,7 +1068,7 @@ static void saveg_write_player_t(player_t *str)
|
|||||||
saveg_write32(str->colormap);
|
saveg_write32(str->colormap);
|
||||||
|
|
||||||
// pspdef_t psprites[NUMPSPRITES];
|
// pspdef_t psprites[NUMPSPRITES];
|
||||||
for (i=0; i<NUMPSPRITES; ++i)
|
for (i = 0; i < NUMPSPRITES; ++i)
|
||||||
{
|
{
|
||||||
saveg_write_pspdef_t(&str->psprites[i]);
|
saveg_write_pspdef_t(&str->psprites[i]);
|
||||||
}
|
}
|
||||||
@ -1204,7 +1196,7 @@ static void saveg_write_ceiling_t(ceiling_t *str)
|
|||||||
|
|
||||||
static void saveg_read_vldoor_t(vldoor_t *str)
|
static void saveg_read_vldoor_t(vldoor_t *str)
|
||||||
{
|
{
|
||||||
int sector;
|
int sector, line;
|
||||||
|
|
||||||
// thinker_t thinker;
|
// thinker_t thinker;
|
||||||
saveg_read_thinker_t(&str->thinker);
|
saveg_read_thinker_t(&str->thinker);
|
||||||
@ -1232,7 +1224,16 @@ static void saveg_read_vldoor_t(vldoor_t *str)
|
|||||||
str->topcountdown = saveg_read32();
|
str->topcountdown = saveg_read32();
|
||||||
|
|
||||||
// line_t *line;
|
// line_t *line;
|
||||||
str->line = saveg_readp();
|
//jff 1/31/98 unarchive line remembered by door as well
|
||||||
|
line = saveg_read32();
|
||||||
|
if (line == -1)
|
||||||
|
{
|
||||||
|
str->line = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
str->line = &lines[line];
|
||||||
|
}
|
||||||
|
|
||||||
// int lighttag;
|
// int lighttag;
|
||||||
str->lighttag = saveg_read32();
|
str->lighttag = saveg_read32();
|
||||||
@ -1267,9 +1268,13 @@ static void saveg_write_vldoor_t(vldoor_t *str)
|
|||||||
// line_t *line;
|
// line_t *line;
|
||||||
//jff 1/31/98 archive line remembered by door as well
|
//jff 1/31/98 archive line remembered by door as well
|
||||||
if (str->line)
|
if (str->line)
|
||||||
saveg_write32(str->line - lines);
|
{
|
||||||
|
saveg_write32(str->line - lines);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
saveg_write32(-1);
|
{
|
||||||
|
saveg_write32(-1);
|
||||||
|
}
|
||||||
|
|
||||||
// int lighttag;
|
// int lighttag;
|
||||||
saveg_write32(str->lighttag);
|
saveg_write32(str->lighttag);
|
||||||
@ -2593,10 +2598,6 @@ void P_UnArchiveSpecials (void)
|
|||||||
{
|
{
|
||||||
vldoor_t *door = Z_Malloc (sizeof(*door), PU_LEVEL, NULL);
|
vldoor_t *door = Z_Malloc (sizeof(*door), PU_LEVEL, NULL);
|
||||||
saveg_read_vldoor_t(door);
|
saveg_read_vldoor_t(door);
|
||||||
|
|
||||||
//jff 1/31/98 unarchive line remembered by door as well
|
|
||||||
door->line = (intptr_t)door->line!=-1? &lines[(size_t)door->line] : NULL;
|
|
||||||
|
|
||||||
door->sector->ceilingdata = door; //jff 2/22/98
|
door->sector->ceilingdata = door; //jff 2/22/98
|
||||||
door->thinker.function.p1 = (actionf_p1)T_VerticalDoor;
|
door->thinker.function.p1 = (actionf_p1)T_VerticalDoor;
|
||||||
P_AddThinker (&door->thinker);
|
P_AddThinker (&door->thinker);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user