Fix schedule compatibility between map versions 7 & 8

This commit is contained in:
Asdow
2025-09-28 10:35:13 +03:00
parent cf6cc2a213
commit 8fa2189a66
2 changed files with 36 additions and 1 deletions
+22
View File
@@ -489,6 +489,22 @@ SCHEDULENODE& SCHEDULENODE::operator=(const _OLD_SCHEDULENODE& src)
return(*this);
}
SCHEDULENODE& SCHEDULENODE::operator=(const _OLD_SCHEDULENODE_PRE_ITS& src)
{
if ((void*)this != (void*)&src)
{
next = NULL;
TranslateArrayFields(usTime, src.usTime, OLD_MAX_SCHEDULE_ACTIONS, UINT16_UINT16);
TranslateArrayFields(usData1, src.usData1, OLD_MAX_SCHEDULE_ACTIONS, UINT32_UINT32);
TranslateArrayFields(usData2, src.usData2, OLD_MAX_SCHEDULE_ACTIONS, UINT32_UINT32);
TranslateArrayFields(ubAction, src.ubAction, OLD_MAX_SCHEDULE_ACTIONS, UINT8_UINT8);
ubScheduleID = src.ubScheduleID;
ubSoldierID = static_cast<UINT16>(src.ubSoldierID);
usFlags = src.usFlags;
}
return(*this);
}
BOOLEAN SCHEDULENODE::Load(INT8** hBuffer, FLOAT dMajorMapVersion)
{
if (dMajorMapVersion < 7.0)
@@ -497,6 +513,12 @@ BOOLEAN SCHEDULENODE::Load(INT8** hBuffer, FLOAT dMajorMapVersion)
LOADDATA(&OldScheduleNode, *hBuffer, sizeof(_OLD_SCHEDULENODE));
*this = OldScheduleNode;
}
else if (dMajorMapVersion < 8.0)
{
_OLD_SCHEDULENODE_PRE_ITS OldScheduleNode;
LOADDATA(&OldScheduleNode, *hBuffer, sizeof(_OLD_SCHEDULENODE_PRE_ITS));
*this = OldScheduleNode;
}
else
LOADDATA(this, *hBuffer, sizeof(SCHEDULENODE));
return(TRUE);
+13
View File
@@ -54,6 +54,18 @@ typedef struct _OLD_SCHEDULENODE
UINT16 usFlags;
}_OLD_SCHEDULENODE;
typedef struct _OLD_SCHEDULENODE_PRE_ITS
{
struct _OLD_SCHEDULENODE_PRE_ITS* next;
UINT16 usTime[MAX_SCHEDULE_ACTIONS]; // Converted to minutes 12:30PM would be 12*60 + 30 = 750
UINT32 usData1[MAX_SCHEDULE_ACTIONS]; // Typically the gridno, but depends on the action
UINT32 usData2[MAX_SCHEDULE_ACTIONS]; // Secondary information, not used by most actions
UINT8 ubAction[MAX_SCHEDULE_ACTIONS];
UINT8 ubScheduleID;
UINT8 ubSoldierID;
UINT16 usFlags;
}_OLD_SCHEDULENODE_PRE_ITS;
class SCHEDULENODE
{
public:
@@ -67,6 +79,7 @@ public:
UINT16 usFlags;
public:
SCHEDULENODE& operator=(const _OLD_SCHEDULENODE& src);
SCHEDULENODE& operator=(const _OLD_SCHEDULENODE_PRE_ITS& src);
BOOLEAN Load(INT8** hBuffer, FLOAT dMajorMapVersion);
BOOLEAN Save(HWFILE hFile, FLOAT dMajorMapVersion, UINT8 ubMinorMapVersion);
};