Output bytes now track field sizes.
This removes the clumsy local variable pointer stuff.
This commit is contained in:
+11
-19
@@ -152,7 +152,6 @@ LoadShipQueue (void *fh, QUEUE *pQueue)
|
|||||||
HSHIPFRAG hStarShip;
|
HSHIPFRAG hStarShip;
|
||||||
SHIP_FRAGMENT *FragPtr;
|
SHIP_FRAGMENT *FragPtr;
|
||||||
COUNT Index;
|
COUNT Index;
|
||||||
BYTE tmpb;
|
|
||||||
|
|
||||||
read_16 (fh, &Index);
|
read_16 (fh, &Index);
|
||||||
|
|
||||||
@@ -184,7 +183,6 @@ LoadRaceQueue (void *fh, QUEUE *pQueue)
|
|||||||
HFLEETINFO hStarShip;
|
HFLEETINFO hStarShip;
|
||||||
FLEET_INFO *FleetPtr;
|
FLEET_INFO *FleetPtr;
|
||||||
COUNT Index;
|
COUNT Index;
|
||||||
BYTE tmpb;
|
|
||||||
|
|
||||||
read_16 (fh, &Index);
|
read_16 (fh, &Index);
|
||||||
|
|
||||||
@@ -195,10 +193,8 @@ LoadRaceQueue (void *fh, QUEUE *pQueue)
|
|||||||
read_16 (fh, &FleetPtr->allied_state);
|
read_16 (fh, &FleetPtr->allied_state);
|
||||||
read_8 (fh, &FleetPtr->days_left);
|
read_8 (fh, &FleetPtr->days_left);
|
||||||
read_8 (fh, &FleetPtr->growth_fract);
|
read_8 (fh, &FleetPtr->growth_fract);
|
||||||
read_8 (fh, &tmpb);
|
read_16 (fh, &FleetPtr->crew_level);
|
||||||
FleetPtr->crew_level = tmpb;
|
read_16 (fh, &FleetPtr->max_crew);
|
||||||
read_8 (fh, &tmpb);
|
|
||||||
FleetPtr->max_crew = tmpb;
|
|
||||||
read_8 (fh, &FleetPtr->growth);
|
read_8 (fh, &FleetPtr->growth);
|
||||||
read_8 (fh, &FleetPtr->max_energy);
|
read_8 (fh, &FleetPtr->max_energy);
|
||||||
read_16s(fh, &FleetPtr->loc.x);
|
read_16s(fh, &FleetPtr->loc.x);
|
||||||
@@ -228,20 +224,17 @@ LoadGroupQueue (void *fh, QUEUE *pQueue)
|
|||||||
{
|
{
|
||||||
HIPGROUP hGroup;
|
HIPGROUP hGroup;
|
||||||
IP_GROUP *GroupPtr;
|
IP_GROUP *GroupPtr;
|
||||||
BYTE tmpb;
|
|
||||||
|
|
||||||
hGroup = BuildGroup (pQueue, 0);
|
hGroup = BuildGroup (pQueue, 0);
|
||||||
GroupPtr = LockIpGroup (pQueue, hGroup);
|
GroupPtr = LockIpGroup (pQueue, hGroup);
|
||||||
|
|
||||||
read_16 (fh, &GroupPtr->group_counter);
|
read_16 (fh, &GroupPtr->group_counter);
|
||||||
read_8 (fh, &GroupPtr->race_id);
|
read_8 (fh, &GroupPtr->race_id);
|
||||||
read_8 (fh, &tmpb); /* was var2 */
|
read_8 (fh, &GroupPtr->sys_loc);
|
||||||
GroupPtr->sys_loc = LONIBBLE (tmpb);
|
read_8 (fh, &GroupPtr->task);
|
||||||
GroupPtr->task = HINIBBLE (tmpb);
|
|
||||||
read_8 (fh, &GroupPtr->in_system); /* was crew_level */
|
read_8 (fh, &GroupPtr->in_system); /* was crew_level */
|
||||||
read_8 (fh, &tmpb); /* was energy_level */
|
read_8 (fh, &GroupPtr->dest_loc);
|
||||||
GroupPtr->dest_loc = LONIBBLE (tmpb);
|
read_8 (fh, &GroupPtr->orbit_pos);
|
||||||
GroupPtr->orbit_pos = HINIBBLE (tmpb);
|
|
||||||
read_8 (fh, &GroupPtr->group_id); /* was max_energy */
|
read_8 (fh, &GroupPtr->group_id); /* was max_energy */
|
||||||
read_16s(fh, &GroupPtr->loc.x);
|
read_16s(fh, &GroupPtr->loc.x);
|
||||||
read_16s(fh, &GroupPtr->loc.y);
|
read_16s(fh, &GroupPtr->loc.y);
|
||||||
@@ -254,7 +247,6 @@ static void
|
|||||||
LoadEncounter (ENCOUNTER *EncounterPtr, void *fh)
|
LoadEncounter (ENCOUNTER *EncounterPtr, void *fh)
|
||||||
{
|
{
|
||||||
COUNT i;
|
COUNT i;
|
||||||
BYTE tmpb;
|
|
||||||
|
|
||||||
EncounterPtr->pred = 0;
|
EncounterPtr->pred = 0;
|
||||||
EncounterPtr->succ = 0;
|
EncounterPtr->succ = 0;
|
||||||
@@ -378,11 +370,11 @@ LoadSummary (SUMMARY_DESC *SummPtr, void *fp)
|
|||||||
DWORD nameSize = 0;
|
DWORD nameSize = 0;
|
||||||
if (!read_32s (fp, &magic))
|
if (!read_32s (fp, &magic))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (magic == SAVE_MAGIC)
|
if (magic == SAVEFILE_TAG)
|
||||||
{
|
{
|
||||||
if (read_32 (fp, &magic) != 1 || magic != SUMMARY_MAGIC)
|
if (read_32 (fp, &magic) != 1 || magic != SUMMARY_TAG)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (read_32 (fp, &magic) != 1 || magic < 161)
|
if (read_32 (fp, &magic) != 1 || magic < 160)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
nameSize = magic - 160;
|
nameSize = magic - 160;
|
||||||
}
|
}
|
||||||
@@ -475,7 +467,7 @@ LoadGame (COUNT which_game, SUMMARY_DESC *SummPtr)
|
|||||||
GlobData.SIS_state = SummPtr->SS;
|
GlobData.SIS_state = SummPtr->SS;
|
||||||
|
|
||||||
chunk = 0;
|
chunk = 0;
|
||||||
while (chunk != OMNIBUS_MAGIC)
|
while (chunk != OMNIBUS_TAG)
|
||||||
{
|
{
|
||||||
if (read_32(in_fp, &chunk) != 1)
|
if (read_32(in_fp, &chunk) != 1)
|
||||||
{
|
{
|
||||||
@@ -487,7 +479,7 @@ LoadGame (COUNT which_game, SUMMARY_DESC *SummPtr)
|
|||||||
res_CloseResFile (in_fp);
|
res_CloseResFile (in_fp);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
if (chunk == OMNIBUS_MAGIC)
|
if (chunk == OMNIBUS_TAG)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
log_add (log_Debug, "Skipping chunk of tag %08X (size %u)", chunk, chunkSize);
|
log_add (log_Debug, "Skipping chunk of tag %08X (size %u)", chunk, chunkSize);
|
||||||
|
|||||||
+9
-11
@@ -212,8 +212,8 @@ SaveRaceQueue (SAVEBUF *fh, QUEUE *pQueue)
|
|||||||
cwrite_16 (fh, FleetPtr->allied_state);
|
cwrite_16 (fh, FleetPtr->allied_state);
|
||||||
cwrite_8 (fh, FleetPtr->days_left);
|
cwrite_8 (fh, FleetPtr->days_left);
|
||||||
cwrite_8 (fh, FleetPtr->growth_fract);
|
cwrite_8 (fh, FleetPtr->growth_fract);
|
||||||
cwrite_8 (fh, FleetPtr->crew_level);
|
cwrite_16 (fh, FleetPtr->crew_level);
|
||||||
cwrite_8 (fh, FleetPtr->max_crew);
|
cwrite_16 (fh, FleetPtr->max_crew);
|
||||||
cwrite_8 (fh, FleetPtr->growth);
|
cwrite_8 (fh, FleetPtr->growth);
|
||||||
cwrite_8 (fh, FleetPtr->max_energy);
|
cwrite_8 (fh, FleetPtr->max_energy);
|
||||||
cwrite_16 (fh, FleetPtr->loc.x);
|
cwrite_16 (fh, FleetPtr->loc.x);
|
||||||
@@ -250,13 +250,11 @@ SaveGroupQueue (SAVEBUF *fh, QUEUE *pQueue)
|
|||||||
|
|
||||||
cwrite_16 (fh, GroupPtr->group_counter);
|
cwrite_16 (fh, GroupPtr->group_counter);
|
||||||
cwrite_8 (fh, GroupPtr->race_id);
|
cwrite_8 (fh, GroupPtr->race_id);
|
||||||
assert (GroupPtr->sys_loc < 0x10 && GroupPtr->task < 0x10);
|
cwrite_8 (fh, GroupPtr->sys_loc);
|
||||||
cwrite_8 (fh, MAKE_BYTE (GroupPtr->sys_loc, GroupPtr->task));
|
cwrite_8 (fh, GroupPtr->task);
|
||||||
/* was var2 */
|
|
||||||
cwrite_8 (fh, GroupPtr->in_system); /* was crew_level */
|
cwrite_8 (fh, GroupPtr->in_system); /* was crew_level */
|
||||||
assert (GroupPtr->dest_loc < 0x10 && GroupPtr->orbit_pos < 0x10);
|
cwrite_8 (fh, GroupPtr->dest_loc);
|
||||||
cwrite_8 (fh, MAKE_BYTE (GroupPtr->dest_loc, GroupPtr->orbit_pos));
|
cwrite_8 (fh, GroupPtr->orbit_pos);
|
||||||
/* was energy_level */
|
|
||||||
cwrite_8 (fh, GroupPtr->group_id); /* was max_energy */
|
cwrite_8 (fh, GroupPtr->group_id); /* was max_energy */
|
||||||
cwrite_16 (fh, GroupPtr->loc.x);
|
cwrite_16 (fh, GroupPtr->loc.x);
|
||||||
cwrite_16 (fh, GroupPtr->loc.y);
|
cwrite_16 (fh, GroupPtr->loc.y);
|
||||||
@@ -385,8 +383,8 @@ static BOOLEAN
|
|||||||
SaveSummary (const SUMMARY_DESC *SummPtr, void *fp)
|
SaveSummary (const SUMMARY_DESC *SummPtr, void *fp)
|
||||||
{
|
{
|
||||||
if (
|
if (
|
||||||
write_32 (fp, SAVE_MAGIC) != 1 ||
|
write_32 (fp, SAVEFILE_TAG) != 1 ||
|
||||||
write_32 (fp, SUMMARY_MAGIC) != 1 ||
|
write_32 (fp, SUMMARY_TAG) != 1 ||
|
||||||
write_32 (fp, 160 + strlen(SummPtr->SaveName)) != 1
|
write_32 (fp, 160 + strlen(SummPtr->SaveName)) != 1
|
||||||
)
|
)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -773,7 +771,7 @@ SaveGame (COUNT which_game, SUMMARY_DESC *SummPtr, const char *name)
|
|||||||
|
|
||||||
success = SaveSummary (SummPtr, out_fp);
|
success = SaveSummary (SummPtr, out_fp);
|
||||||
// Then write the rest of the data.
|
// Then write the rest of the data.
|
||||||
if (success && write_32 (out_fp, OMNIBUS_MAGIC) != 1)
|
if (success && write_32 (out_fp, OMNIBUS_TAG) != 1)
|
||||||
success = FALSE;
|
success = FALSE;
|
||||||
if (success && write_32 (out_fp, flen) != 1)
|
if (success && write_32 (out_fp, flen) != 1)
|
||||||
success = FALSE;
|
success = FALSE;
|
||||||
|
|||||||
+5
-3
@@ -31,11 +31,13 @@ extern "C" {
|
|||||||
// is only used for displaying savegame summaries. There is also
|
// is only used for displaying savegame summaries. There is also
|
||||||
// room for only 16 devices on screen.
|
// room for only 16 devices on screen.
|
||||||
#define MAX_EXCLUSIVE_DEVICES 16
|
#define MAX_EXCLUSIVE_DEVICES 16
|
||||||
#define SAVE_MAGIC 0x01534d55 // "UMS\x01": UQM Save version 1
|
|
||||||
#define SUMMARY_MAGIC 0x6d6d7553 // "Summ": Summary. Must be first!
|
|
||||||
#define OMNIBUS_MAGIC 0x696e6d4f // "Omni": All data, uncompressed
|
|
||||||
#define SAVE_NAME_SIZE 64
|
#define SAVE_NAME_SIZE 64
|
||||||
|
|
||||||
|
// The savefile tag numbers.
|
||||||
|
#define SAVEFILE_TAG 0x01534d55 // "UMS\x01": UQM Save version 1
|
||||||
|
#define OMNIBUS_TAG 0x696e6d4f // "Omni": All data, uncompressed
|
||||||
|
#define SUMMARY_TAG 0x6d6d7553 // "Summ": Summary. Must be first!
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
SIS_STATE SS;
|
SIS_STATE SS;
|
||||||
|
|||||||
Reference in New Issue
Block a user