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:
Roman Fomin 2024-01-06 17:40:03 +07:00 committed by GitHub
parent dd4e2b55b6
commit 63e625e295
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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);