From e3cd6f86cc2730a6998fa675cd24ac4535d54dc3 Mon Sep 17 00:00:00 2001 From: danij Date: Fri, 22 Jun 2012 15:58:58 +0100 Subject: [PATCH] libcommon|Refactor: Use Reader/Writer for (de)serializing Hexen's save game header Also, removed ASEG_GAME_HEADER (its in the wrong place and no use). --- doomsday/plugins/common/include/p_saveg.h | 17 +++++----- doomsday/plugins/common/src/p_saveio.c | 39 +++++++++++++---------- 2 files changed, 30 insertions(+), 26 deletions(-) diff --git a/doomsday/plugins/common/include/p_saveg.h b/doomsday/plugins/common/include/p_saveg.h index e4cc59abdd..71d01f6eea 100644 --- a/doomsday/plugins/common/include/p_saveg.h +++ b/doomsday/plugins/common/include/p_saveg.h @@ -60,21 +60,20 @@ void SV_LoadClient(uint gameId); #endif typedef enum gamearchivesegment_e { - ASEG_GAME_HEADER = 101, //jhexen only - ASEG_MAP_HEADER, //jhexen only + ASEG_MAP_HEADER = 102, // Hexen only ASEG_WORLD, - ASEG_POLYOBJS, //jhexen only - ASEG_MOBJS, //jhexen < ver 4 only + ASEG_POLYOBJS, // Hexen only + ASEG_MOBJS, // Hexen < ver 4 only ASEG_THINKERS, - ASEG_SCRIPTS, //jhexen only + ASEG_SCRIPTS, // Hexen only ASEG_PLAYERS, - ASEG_SOUNDS, //jhexen only - ASEG_MISC, //jhexen only + ASEG_SOUNDS, // Hexen only + ASEG_MISC, // Hexen only ASEG_END, ASEG_MATERIAL_ARCHIVE, - ASEG_MAP_HEADER2, //jhexen only + ASEG_MAP_HEADER2, // Hexen only ASEG_PLAYER_HEADER, - ASEG_GLOBALSCRIPTDATA //jhexen only + ASEG_GLOBALSCRIPTDATA // Hexen only } gamearchivesegment_t; /** diff --git a/doomsday/plugins/common/src/p_saveio.c b/doomsday/plugins/common/src/p_saveio.c index d9cc1fb7e4..2fb6029a1a 100644 --- a/doomsday/plugins/common/src/p_saveio.c +++ b/doomsday/plugins/common/src/p_saveio.c @@ -783,25 +783,27 @@ static void swd(Writer* w, const char* data, int len) #if __JHEXEN__ void SV_Header_Write(saveheader_t* hdr) { + Writer* svWriter = Writer_NewWithCallbacks(swi8, swi16, swi32, swf, swd); char versionText[HXS_VERSION_TEXT_LENGTH]; // Write game save name. - SV_Write(hdr->name, SAVESTRINGSIZE); + Writer_Write(svWriter, hdr->name, SAVESTRINGSIZE); // Write version info. memset(versionText, 0, HXS_VERSION_TEXT_LENGTH); sprintf(versionText, HXS_VERSION_TEXT"%i", hdr->version); - SV_Write(versionText, HXS_VERSION_TEXT_LENGTH); + Writer_Write(svWriter, versionText, HXS_VERSION_TEXT_LENGTH); - // Place a header marker. - SV_BeginSegment(ASEG_GAME_HEADER); + Writer_WriteInt32(svWriter, 0); // Junk. // Write current map and difficulty. - SV_WriteByte(hdr->map); - SV_WriteByte(hdr->skill); - SV_WriteByte(hdr->deathmatch); - SV_WriteByte(hdr->noMonsters); - SV_WriteByte(hdr->randomClasses); + Writer_WriteByte(svWriter, hdr->map); + Writer_WriteByte(svWriter, hdr->skill); + Writer_WriteByte(svWriter, hdr->deathmatch); + Writer_WriteByte(svWriter, hdr->noMonsters); + Writer_WriteByte(svWriter, hdr->randomClasses); + + Writer_Delete(svWriter); } #else void SV_Header_Write(saveheader_t* hdr) @@ -876,21 +878,24 @@ static void srd(Reader* r, char* data, int len) #if __JHEXEN__ void SV_Header_Read(saveheader_t* hdr) { + Reader* svReader = Reader_NewWithCallbacks(sri8, sri16, sri32, srf, srd); char verText[HXS_VERSION_TEXT_LENGTH]; - SV_Read(&hdr->name, SAVESTRINGSIZE); - SV_Read(&verText, HXS_VERSION_TEXT_LENGTH); + Reader_Read(svReader, &hdr->name, SAVESTRINGSIZE); + Reader_Read(svReader, &verText, HXS_VERSION_TEXT_LENGTH); hdr->version = atoi(&verText[8]); memcpy(hdr->magic, verText, 8); - SV_AssertSegment(ASEG_GAME_HEADER); + SV_Seek(4); // Junk. hdr->episode = 1; - hdr->map = SV_ReadByte(); - hdr->skill = SV_ReadByte(); - hdr->deathmatch = SV_ReadByte(); - hdr->noMonsters = SV_ReadByte(); - hdr->randomClasses = SV_ReadByte(); + hdr->map = Reader_ReadByte(svReader); + hdr->skill = Reader_ReadByte(svReader); + hdr->deathmatch = Reader_ReadByte(svReader); + hdr->noMonsters = Reader_ReadByte(svReader); + hdr->randomClasses = Reader_ReadByte(svReader); + + Reader_Delete(svReader); } #else void SV_Header_Read(saveheader_t* hdr)