diff --git a/source/duke3d/src/game.h b/source/duke3d/src/game.h index c7477c595..0789949d9 100644 --- a/source/duke3d/src/game.h +++ b/source/duke3d/src/game.h @@ -191,6 +191,8 @@ typedef struct { int32_t returnvar[MAX_RETURN_VALUES-1]; + uint32_t userbytever; + #if !defined LUNATIC fix16_t cameraq16ang, cameraq16horiz; int16_t camerasect; diff --git a/source/duke3d/src/gamedef.cpp b/source/duke3d/src/gamedef.cpp index 78d20dc90..26750ec27 100644 --- a/source/duke3d/src/gamedef.cpp +++ b/source/duke3d/src/gamedef.cpp @@ -1307,6 +1307,7 @@ const memberlabel_t UserdefsLabels[]= { "menu_scrollbarz", USERDEFS_MENU_SCROLLBARZ, 0, 0 }, { "menu_scrollcursorz", USERDEFS_MENU_SCROLLCURSORZ, 0, 0 }, { "return", USERDEFS_RETURN, LABEL_HASPARM2, MAX_RETURN_VALUES }, + { "userbyteversion", USERDEFS_USERBYTEVERSION, 0, 0 }, { NULL, -1, 0, 0 } // END OF LIST }; diff --git a/source/duke3d/src/gamedef.h b/source/duke3d/src/gamedef.h index c6edaffe8..817768c09 100644 --- a/source/duke3d/src/gamedef.h +++ b/source/duke3d/src/gamedef.h @@ -601,6 +601,7 @@ enum UserdefsLabel_t USERDEFS_MENU_SCROLLBARZ, USERDEFS_MENU_SCROLLCURSORZ, USERDEFS_RETURN, + USERDEFS_USERBYTEVERSION, USERDEFS_END }; diff --git a/source/duke3d/src/gamestructures.cpp b/source/duke3d/src/gamestructures.cpp index 43d799a4e..98e1ec42e 100644 --- a/source/duke3d/src/gamestructures.cpp +++ b/source/duke3d/src/gamestructures.cpp @@ -230,6 +230,7 @@ int32_t __fastcall VM_GetUserdef(int32_t labelNum, int32_t const lParm2) else labelNum = ud.returnvar[lParm2-1]; break; + case USERDEFS_USERBYTEVERSION: labelNum = ud.userbytever; break; default: labelNum = -1; break; } @@ -418,6 +419,7 @@ void __fastcall VM_SetUserdef(int32_t const labelNum, int32_t const lParm2, int3 else ud.returnvar[lParm2-1] = iSet; break; + case USERDEFS_USERBYTEVERSION: ud.userbytever = iSet; break; default: break; } } diff --git a/source/duke3d/src/menus.cpp b/source/duke3d/src/menus.cpp index 19002071e..f32a87fca 100644 --- a/source/duke3d/src/menus.cpp +++ b/source/duke3d/src/menus.cpp @@ -2213,11 +2213,11 @@ static void Menu_PreDraw(MenuID_t cm, MenuEntry_t *entry, const vec2_t origin) menutext_centeralign(origin.x + (101<<16), origin.y + (97<<16), "Previous\nVersion"); #ifndef EDUKE32_SIMPLE_MENU - Bsprintf(tempbuf,"Saved: %d.%d.%d %d-bit", savehead.majorver, savehead.minorver, - savehead.bytever, 8*savehead.getPtrSize()); + Bsprintf(tempbuf,"Saved: %d.%d.%d.%d %d-bit", savehead.majorver, savehead.minorver, + savehead.bytever, savehead.userbytever, 8*savehead.getPtrSize()); mgametext(origin.x + (31<<16), origin.y + (104<<16), tempbuf); - Bsprintf(tempbuf,"Our: %d.%d.%d %d-bit", SV_MAJOR_VER, SV_MINOR_VER, BYTEVERSION, - (int32_t)(8*sizeof(intptr_t))); + Bsprintf(tempbuf,"Our: %d.%d.%d.%d %d-bit", SV_MAJOR_VER, SV_MINOR_VER, BYTEVERSION, + ud.userbytever, (int32_t)(8*sizeof(intptr_t))); mgametext(origin.x + ((31+16)<<16), origin.y + (114<<16), tempbuf); #endif @@ -2273,11 +2273,11 @@ static void Menu_PreDraw(MenuID_t cm, MenuEntry_t *entry, const vec2_t origin) menutext_centeralign(origin.x + (101<<16), origin.y + (97<<16), "Previous\nVersion"); #ifndef EDUKE32_SIMPLE_MENU - Bsprintf(tempbuf,"Saved: %d.%d.%d %d-bit", savehead.majorver, savehead.minorver, - savehead.bytever, 8*savehead.getPtrSize()); + Bsprintf(tempbuf,"Saved: %d.%d.%d.%d %d-bit", savehead.majorver, savehead.minorver, + savehead.bytever, savehead.userbytever, 8*savehead.getPtrSize()); mgametext(origin.x + (31<<16), origin.y + (104<<16), tempbuf); - Bsprintf(tempbuf,"Our: %d.%d.%d %d-bit", SV_MAJOR_VER, SV_MINOR_VER, BYTEVERSION, - (int32_t)(8*sizeof(intptr_t))); + Bsprintf(tempbuf,"Our: %d.%d.%d.%d %d-bit", SV_MAJOR_VER, SV_MINOR_VER, BYTEVERSION, + ud.userbytever, (int32_t)(8*sizeof(intptr_t))); mgametext(origin.x + ((31+16)<<16), origin.y + (114<<16), tempbuf); #endif diff --git a/source/duke3d/src/savegame.cpp b/source/duke3d/src/savegame.cpp index 6631b51af..3e4ed6de7 100644 --- a/source/duke3d/src/savegame.cpp +++ b/source/duke3d/src/savegame.cpp @@ -1339,6 +1339,7 @@ int32_t sv_saveandmakesnapshot(FILE *fil, char const *name, int8_t spot, int8_t h.minorver = SV_MINOR_VER; h.ptrsize = sizeof(intptr_t); h.bytever = BYTEVERSION; + h.userbytever = ud.userbytever; h.comprthres = savegame_comprthres; h.recdiffsp = recdiffsp; @@ -1465,12 +1466,12 @@ int32_t sv_loadheader(int32_t fil, int32_t spot, savehead_t *h) return -2; } - if (h->majorver != SV_MAJOR_VER || h->minorver != SV_MINOR_VER || h->bytever != BYTEVERSION) + if (h->majorver != SV_MAJOR_VER || h->minorver != SV_MINOR_VER || h->bytever != BYTEVERSION || h->userbytever != ud.userbytever) { if (havedemo) - OSD_Printf("Incompatible demo version. Expected %d.%d.%d, found %d.%d.%d\n", - SV_MAJOR_VER, SV_MINOR_VER, BYTEVERSION, - h->majorver, h->minorver, h->bytever); + OSD_Printf("Incompatible demo version. Expected %d.%d.%d.%d, found %d.%d.%d.%d\n", + SV_MAJOR_VER, SV_MINOR_VER, BYTEVERSION, ud.userbytever, + h->majorver, h->minorver, h->bytever, h->userbytever); if (h->majorver == SV_MAJOR_VER && h->minorver == SV_MINOR_VER) { diff --git a/source/duke3d/src/savegame.h b/source/duke3d/src/savegame.h index 17454b575..9ffe201b6 100644 --- a/source/duke3d/src/savegame.h +++ b/source/duke3d/src/savegame.h @@ -34,7 +34,7 @@ extern "C" { #else # define SV_MAJOR_VER 1 #endif -#define SV_MINOR_VER 4 +#define SV_MINOR_VER 5 #pragma pack(push,1) typedef struct @@ -44,6 +44,8 @@ typedef struct uint16_t bytever; // 16 bytes + uint32_t userbytever; + uint8_t comprthres; uint8_t recdiffsp, diffcompress, synccompress; // 4 bytes @@ -54,7 +56,7 @@ typedef struct char savename[MAXSAVEGAMENAMESTRUCT]; uint8_t numplayers, volnum, levnum, skill; char boardfn[BMAX_PATH]; - // 282 bytes + // 286 bytes #ifdef __ANDROID__ char skillname[32], volname[32]; #endif