diff --git a/SaveLoadGame.cpp b/SaveLoadGame.cpp index f8a9f48a..a5426dcf 100644 --- a/SaveLoadGame.cpp +++ b/SaveLoadGame.cpp @@ -2477,12 +2477,23 @@ BOOLEAN StackedObjectData::Load( INT8** hBuffer, float dMajorMapVersion, UINT8 u { int size; - // When saving maps with the new map editor that has weapon overheated feature included! - if (dMajorMapVersion >= 7 && ubMinorMapVersion >= 28) + if (dMajorMapVersion >= 7 && ubMinorMapVersion >= 30) { // Flugente: changed this, otherwise game would crash when reading WF maps if class ObjectData was different. this is a rough fix and by no means perfect LOADDATA(&(this->data), *hBuffer, sizeof(ObjectData) ); } + // When saving maps with the new map editor that has weapon overheated feature included! + else if (dMajorMapVersion >= 7 && ubMinorMapVersion >= 28) + { + // Flugente 12-09-30: ok, this will look really odd, so I'll explain. We have to account for padding of structures. Before map version 30, ObjectData had size 32 due to padding. + // Up to ubWireNetworkFlag the size is 28, then bDefuseFrequency adds size 1 - but due to padding, the size was 32. Now, upon adding sRepairThreshold, the size is still 32, as the padded 3 bytes + // are now used. Due to this, we only have to reduce for the sizes of bDirtLevel and sObjectFlag, but not sRepairThreshold (sizeof(ObjectData) is now 40). + // But of course, we now 'read' the values for sRepairThreshold, but there weren't any in older map versions, resulting in garbage values - we therefore set that manually to 100 + // Of course, once the ObjectData-Class is altered, this has to be altered as well! + LOADDATA(&(this->data), *hBuffer, sizeof(ObjectData) - (sizeof(this->data.bDirtLevel) + sizeof(this->data.sObjectFlag) ) ); + + this->data.sRepairThreshold = 100; + } else { // WF Maps have old format diff --git a/TileEngine/worlddef.h b/TileEngine/worlddef.h index 2cb62107..af40a653 100644 --- a/TileEngine/worlddef.h +++ b/TileEngine/worlddef.h @@ -42,7 +42,8 @@ class SOLDIERTYPE; #define MAJOR_MAP_VERSION 7.0 //Current minor map version updater. //#define MINOR_MAP_VERSION 28 // 27 -> 28: increased to 28 because of included weapon overheated and tripwire feature. See ObjectClass for the new Tags! -#define MINOR_MAP_VERSION 29 // 28 -> 29: increased range of roomnumbers to full UINT16 by DBrot +//#define MINOR_MAP_VERSION 29 // 28 -> 29: increased range of roomnumbers to full UINT16 by DBrot +#define MINOR_MAP_VERSION 30 // 30 -> 29: necessary change due to repair system by Flugente //dnl ch33 230909 #define VANILLA_MAJOR_MAP_VERSION 5.00 #define VANILLA_MINOR_MAP_VERSION 25