diff --git a/source/duke3d/src/duke3d.h b/source/duke3d/src/duke3d.h index 89e115ca1..cf584a6f0 100644 --- a/source/duke3d/src/duke3d.h +++ b/source/duke3d/src/duke3d.h @@ -66,10 +66,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // increase by 3, because atomic GRP adds 1, and Shareware adds 2 #ifdef LUNATIC // Lunatic -# define BYTEVERSION_EDUKE32 315 +# define BYTEVERSION_EDUKE32 318 #else // Non-Lua build -# define BYTEVERSION_EDUKE32 315 +# define BYTEVERSION_EDUKE32 318 #endif //#define BYTEVERSION_13 27 diff --git a/source/duke3d/src/game.cpp b/source/duke3d/src/game.cpp index 3e7683818..f2c02975d 100644 --- a/source/duke3d/src/game.cpp +++ b/source/duke3d/src/game.cpp @@ -5516,6 +5516,8 @@ static void G_Cleanup(void) // Bfree(MusicPtr); + Gv_Clear(); + hash_free(&h_gamevars); hash_free(&h_arrays); hash_free(&h_labels); diff --git a/source/duke3d/src/gamevars.cpp b/source/duke3d/src/gamevars.cpp index 4e4df38d7..ed8ed3639 100644 --- a/source/duke3d/src/gamevars.cpp +++ b/source/duke3d/src/gamevars.cpp @@ -62,7 +62,7 @@ intptr_t *aplWeaponFlashColor[MAX_WEAPONS]; // Muzzle flash color // counts to zero. Call this function as many times as needed. // // Returns: old g_gameVarCount | (g_gameArrayCount<<16). -static int Gv_Free(void) +int Gv_Free(void) { for (bssize_t i=0; i> 16; @@ -115,7 +115,7 @@ int Gv_ReadSave(int32_t kFile) if (kread(kFile, tbuf, 12)!=12) goto corrupt; if (Bmemcmp(tbuf, "BEG: EDuke32", 12)) { OSD_Printf("BEG ERR\n"); return 2; } - Bmemset(&savedstate,0,sizeof(savedstate)); + Bmemset(savedstate, 0, sizeof(savedstate)); // AddLog("Reading gamevars from savegame"); @@ -218,6 +218,13 @@ int Gv_ReadSave(int32_t kFile) if (kdfread(&g_mapInfo[i].savedstate->vars[j][0],sizeof(intptr_t), MAXSPRITES, kFile) != MAXSPRITES) goto corrupt; } } + + for (bssize_t j=0; jarrays[j] = (intptr_t *) Xaligned_alloc(16, Gv_GetArrayAllocSize(j)); + if (kdfread(&g_mapInfo[i].savedstate->arrays[j][0], Gv_GetArrayAllocSize(j), 1, kFile) != (int32_t)Gv_GetArrayAllocSize(j)) goto corrupt; + } } else { @@ -250,7 +257,7 @@ void Gv_WriteSave(FILE *fil) { char savedstate[MAXVOLUMES*MAXLEVELS]; - Bmemset(&savedstate,0,sizeof(savedstate)); + Bmemset(savedstate, 0, sizeof(savedstate)); // AddLog("Saving Game Vars to File"); fwrite("BEG: EDuke32", 12, 1, fil); @@ -312,6 +319,10 @@ void Gv_WriteSave(FILE *fil) dfwrite(&g_mapInfo[i].savedstate->vars[j][0],sizeof(intptr_t), MAXSPRITES, fil); } } + + for (bssize_t j=0; jarrays[j][0], Gv_GetArrayAllocSize(j), 1, fil); } fwrite("EOF: EDuke32", 12, 1, fil); diff --git a/source/duke3d/src/gamevars.h b/source/duke3d/src/gamevars.h index c127a06e9..89251c992 100644 --- a/source/duke3d/src/gamevars.h +++ b/source/duke3d/src/gamevars.h @@ -143,6 +143,7 @@ void Gv_RefreshPointers(void); void Gv_ResetVars(void); int Gv_ReadSave(int32_t kFile); void Gv_WriteSave(FILE *fil); +void Gv_Clear(void); #else extern int32_t g_noResetVars; extern LUNATIC_CB void (*A_ResetVars)(int32_t spriteNum);