Changes (Part 2) Here's the rest of the changes: - Dave's Big Commit for Attack Slipping Issue. Changes include: - Changed all aspects of the Withdraw reaction to Pull Back reaction, so the name doesn't confuse with the Withdraw doctrine. Specifically: - Change kWithdrawingUnitGoal to kPullingBackUnitGoal in GameAnimForceData - replaced IsWithrawing() with IsPullingBack() in GameDiagnostics::GetForceChecksum() - Changed kWithdrawing to kPullingBack to ReactionStatusType enum in ScenForceTypes - Changed ScenRealForce::IsWithdrawing() to ScenRealForce::IsPullingBack() - Changed "Withdrawing" to "PullingBack" in kActionText in UnitActions.cpp - Ditto in TaskAttack.cpp - Changed links within a ScenMissionPlan from singular next and previous plans to vectors of next and previous plans. Specifically: - Changed FPDataDump to use vectors of next and prev plans - Ditto for GameDiagnostics_CheckObjectReferences() - Ditto for ScenCompletedMissionEvent - Ditto for ScenMissionPlan including Archive() NEED CONVERSION OF DATA - Ditto for ScenOpPlan including adding LinkPlans() - Ditto for ScenPlanScheduling including adding code to link related plans inside DevelopCurrentMissionPlans() - Dito for ScenTask - Made FPPlanningParams:IsForceReacting() and IsSubForceAttacking() private to prevent calling them by mistake. Added IsAnyoneRouting(), IsForceRouting() and DermineIfSubForceRouting(). Added new members mSubForceRouting and mSubjectRouting. - Extended duration from 5 to 15 minutes for IsMakingProgress() test when force is assaulting. This helps prevent the assault force calling off its assault. - Revised default map movement effects using the Tutorial STVith map as the template. These are listed in MapBuilder::kMotorisedMovEff and kNonMotorisedMoveEff - Mods to ScenAbandonMissionEvent. SPecifically: - Replaced CPodPtrs for objectiveTask, missionTask and planSubject with standard C pointers inside ProcessEvent(). - Exempt orders delay after processing. - Removed duplicate calls to SetSOPTimings() - When a subordinate abandons its attack task within our attack plan and bunkers down, we no longer change the task type to an independent Defend. Instead we now wait for him to recover. See ProcessSubordinateTask() - Added entries to kScenEventTypeNames for FireResolution, Bombardment Resolution, Strike Resolution and Bunker Down Recovery inside ScenEvent - Moved ComparePlanTasksByStatus and ComparePlansByAscendingStart from ScenOpPlan to ScenCommonAI - Overhauled BunkerDown() code. Attacking units will now bunker down in-situ rather than pull back. Handles cases where the assaultSubject is not the boss of the attack. While it still abandons the original attack/probe/assault task and plan it adds a link to the Bunker Down mission's previous plans so it later if it recovers it can get stuck back into the attack/assault. - Filler Mission Plan functions now pass around a formation type so we can handle in-situ bunker downs. - Overhauled ScenPlanScheduling::ScheduleNextEvent(). Including: - Moved AssessMorale() above AssessToCallInFireSupport(). It now handles routers. This ensures routers continue to surrender. It also passes the planning result up and down the line, ensuring if it the force does surrender we stop all processing. - Ensured UpdateEnemyUnit() was actioned immediately after UpdateFriendlyUnit() inside AdjustAndExpendPerMinute() - AssessEndOfTask() now ensures that an assault that is not self assigned and that has not achieved its objective will now bunker down in addition to just stop processing the plan. - ExtendAssaultTask() now ensures it's extended for 30 minutes rather than 15. This ensures there is time for orders processing and to allow some progress to occur. - ShouldStartNextPlan() now exempts plans that are not self assigned and all Hold plans that have yet to finish their assigned duration - ShouldStartRelatedPlan() now handles multiple next plans and exempts assaults where a HHour has been set and timeNow is not the set HHour - Reduced the default duration of kSOP_PullBack from 120 to 40 and for kSOP_BunkerDown from 120 to 20. This ensures that the attack boss and assault subject reassesses for these reactions more frequently. Note that a force size modifier is applied to the default durations - eg the duration for a Bn will be significantly less. See ScenSOP. - Ensured that ScenTask:etermineBestFacing() does not try and change facing using the next plans facing if in fact the next plan does not have an assigned location. - Added ScenTask::IsSelfAssigned() - Incremented database format to handle change to next and previous plans. DATA NEEDS CONVERSION. See ScenTypes.cpp - Removed reduntant calls to SetSOPTimings() in TaskAttack - Overhauled TaskDoctrine::SurrenderRouters(). Replaced use of "decimated" absolute threshold with variable fragility Mod. This now adjusts the min and max surrender percentages based on the units current personnel level. the lower this gets the more fragile it is and hence the greater percentage of its personnel surrender. - Overhauled TaskDoctrine::AssessRecovery(). This now supports cases where the assaultSubject has bunkered down, followed by the boss of the basic atttack (usually a Bn HQ) also bunkering down as a result and then the boss of the complex attack restraining from reaction so as to allow the subordinates to recover. - TaskDoctrine::TryToBunkerDown() now handles the difference between a pull back and in-situ bunker down - Removed reduntant calls to SetSOPTimings() in TaskMove - Pre Build 5.1.34 - Added "Recordings\\" to autosave backup recording pathname so the previous recordings are stored in the Recordings subDirectory - Ensured the Initial Orders Delay value was saved properly in the ScenMaker - Removed redundant Assert from ScenPlanScheduling::MoraleCheck() - Removed ScenBunkerDownRecoveryEvent.cpp and .h files and PodClassID but have kept these locally in case we need to go down this path later. - Pre Build 5.1.35 - Overhauled formation movement for units in road column. Instead of the using the hub offset to control spacing and movement, units in road column now manage this using a combination of the unit ahead and the unit behind. Specifically: - Added mUnitBehind member to ScenRealForce - Remove redundant IsAheadOf() and SetUnitPersonnelQty() functions from ScenRealForce.cpp and added DetermineUnitBehind() and ShouldHaveUnitBehind() - Added GetSubGroupBehindSubGroup(), DetermineUnitBehind() and ShouldHaveUnitBehind() to ScenForceFormation.cpp - Replaced GetVanguard() return type from ScenFormationSubGroup* to ScenRealForce* - Added GetVanguard() to ScenFormationGroup.cpp - Added MustWaitForUnitBehind() to ScenRoute.cpp - Fixed bug that null and voided caution factor when calculating best route. This was introduced when I stopped using mEffectiveFriendlyFP in the FPRouteInput:etermineFirepowerMovementMod(). That member was affected by the caution factor. So we now store the caution factor directly and use it to increase the cost of movement. This should reduce the instances of HQs and support units using silly routes through enemy terrain.