diff --git a/Strategic/Scheduling.cpp b/Strategic/Scheduling.cpp index 270ace33..a7f996e2 100644 --- a/Strategic/Scheduling.cpp +++ b/Strategic/Scheduling.cpp @@ -489,14 +489,36 @@ 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(src.ubSoldierID); + usFlags = src.usFlags; + } + return(*this); +} + BOOLEAN SCHEDULENODE::Load(INT8** hBuffer, FLOAT dMajorMapVersion) { - if(dMajorMapVersion < 7.0) + if (dMajorMapVersion < 7.0) { _OLD_SCHEDULENODE OldScheduleNode; 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); diff --git a/Strategic/Scheduling.h b/Strategic/Scheduling.h index bf3e9cd6..e35ef34a 100644 --- a/Strategic/Scheduling.h +++ b/Strategic/Scheduling.h @@ -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); };