I've just signed off on the BFTB Patch #4. The files are uploading to Matrix as I type. They have to make and test an installer. So it will take a few days yet before it is publicly available.
The main fixes and features are:
• Overhauled Formation code
• Overhauled Reaction code, including retreats and routing
• Overhauled combat code, including effects of direct and indirect fire on casualties, suppression and morale.
• Overhauled Attack code, including adding code to assess for stalled attacks
• Overhauled On Call Support code
• Overhauled Scheduling code, including slippage and cribbage of tasks
• Fixed the “halting” issue
• Validated and Converted all data content
• Added code to automatically convert third party data content on load in Game and on save in ScenMaker.
• Added new Scenario Statistics feature to ScenMaker ( available form Scenario menu )
• Added new Cull Inactives feature to ScenMaker ( available form Scenario menu )
The complete list:
- Overhauled Formation code. This included:
- Accounting for variable HubToFrontDistances. Previously set the hubToFrontDistance to hubDepth /2. But this was compressing the deployments where more than 50% of the force was forward of the hub, which was in most cases.
- Modifying the UI so the task bounding box which depicts the force occupied area now uses a hub based on a variable hubToFrontDistance. Because of the need to make this thread safe, changes made while the game is paused such as to task facing may not be reflected till the game starts running.
- Fixed issue that was preventing the game running under Windows XP by exluding certain system dependencies from the installer. These included COMDLG32.dll, DSOUND.dll, VERSION.dll and WSOCK32.dll
- Ensure that attack are called off due to lack of time if the shortfall exceeds the assaultDuration. ( PA 10835 )
- Fix Assert in DetermineSlippageResponse() to account for cases where the FUP has been terminated and its times all set to its start. ( MSP 5511 )
- Ensure attackSubHQs determined after independents in End of Scenario attack ( PA 2343 )
- Ensure that all stored peripheral task force groups are factored into the unitCount inside VerifyPlanForceGroups() regardless of their status ( SMP 4097 )
- Modify Assert inside AssessForSubAttacksWhoseReorgsCanBeBroughtForward() to cater for cases where an attack is scheduled to start next minute while it's status is set to current. ( TA 1789 )
- Ensure that OnCallSpt forces subtracted from Independents before developing end of scenario attacks. This avoids the possibility of allocating the same unit to more than one current task - ie reserve and assault. ( SRF 16165 )
- Ensure that the start of concurrent tasks are not slipped if the sourceTask they are linked to is already current. This prevents continual slipping of complex tasks, where their starts are not coordinated. ( SMP 4228 )
- Prevent the allocation of a forceGroup subject to a task if it is not suitable. ( SFTTAR 4309 )
- Added new member to SlippageTask and modified slippage code to ignore End if nextTask is ignoring its start time. This ensures that linked tasks are slipped and cribbed correctly. ( SMP 4311 )
- Ensure that existing peripheral forceGroups are deducted from the CoreFG at the start of DevelopMissionPlan() ( SMP 4098 )
- Modified code inside TaskMove::ReassessOptions() to only Halt when under serious threat and not just because the unit is not making progress.
- Reduced probability of halting where unit is trying to move away from closest threat and the unit is not co-located with the closest threat.
- Where unit co-located with closest threat but is trying to move away, it will now retreat rather than halt.
- Remove LOS check inside CanFire() where a unit is passed in as unit will be from know visible threats. In other words stop double checking LOS. This ensures that a unit can have a chance to fire at a visible threat and reduced processing - excellent! In testing it increased the number of fire events by 70%.
- Increased range of routs from between 600 and 1200m to 1800 and 2700m
- Added code to give priority to covered terrain when retreating/routing.
- Extensive modification of Fire code both for APer and AArm fire to get more historical casualty results.
- Decreased the probability and quantum of surrenders that occur when a units routs.
- Fixed a number of access violations introduced in last build. ( SRF.inl 143 and PS 342 )
- Added new code to create IndDefendAtFUP task where a force is already at the FUP. It will now defend there till the main assault forces arrive and then it will join them in the FUPReorg and Assault. ( SCAI 7323 )
- Modified ConfirmTimings() for attacks to accomodate new IndDefendAtFUP task.
- Ensure that OnCallSpt forces subtracted from Independents before developing basic and complex attacks. this avoids the possibility of allocating the same unit to more than one current task - ie reserve and assault. ( SRF 16165 )
- Converted Estab files for both BFTB and COTA ensuring that all estab forces have their supplies, firepower counts and capabilities updated. This fixes a problem encountered in the COTA ExPack where bridging units had lost their constrcut bridge capability after the initial conversion.
- Doubled morale degradation for units low on supplies. Now such units lose around 30% morale per day. Cannot reduce below 20% for this purpose.
- Ensure the missionPlan is replanned in cases where the assault has ended and there is no final reorg task ( SPS 18063 )
- Ensure that a plan is not already in opPlan->pendingPlans before adding it. Ths avoid referenced corpse ( GameDiagnostic 1029 )
- Ensure that fuel vehicles from returning transport columns are not added as equipment to bases whose estab does not have any fuel vehicles. (SFGV 1378 )
- Ensure that independent advance to FUP and indepenedent defend at FUP tasks are properly linked as concurrent tasks. (PodDB 614 )
- Added code to check if the forces assigned to the advanceToFUP task are alreay near the FUP. If all are narby then the advanceToFUP task is killed off. If part, then the nearby forces are subtracted from its forceGroup and go on hold till the FUPReorg, leaving the rest to advance to the FUP. (SCAI 7323)
- Prevent face changing for assaulting units and those moving in road column
- Default the task settings for ArtyDirectFireOnly to true for attacks and probes
- Added the registrationTime to remainingDuration in bombardment events. This ensures that the arty unit fires for at least the specified number of minutes.
- Now cap maxSuppression to 75% for direct fire and to 85% for indirect fire when the target is in covered terrain.
- Reduced max registration times from 15 to 5 minutes and increased the range denominator from 200 to 500. Rego time = min( 5, range / 500 ). The overall effect is to reduce registration times for arty fire. Fatigue and training can increase time by up to 56% to a max of 8 minutes.
- OnCallSpt bombardment duration now reduced if arty ammo level below 50%.
- Ensured suitability iterator updated before allocating resources to nearby objectives.
- Overhauled Halting code to reduce instances of halting.
- Fix crash inside ScenRoute when the taskLoc == leaveLoc and the effEndIndex is not adjusted correctly.
- Added new Scenario Statistics feature to ScenMaker.
- Added new Cull Inactive Units feature to ScenMaker.
- Culled Inactive units from all converted COTA scenarios.
- Turned off FPAssert at ScenPlanScheduling.cpp, line 14529. There still occurs from time to time cases where a support units will be left without an order for some as yet to be explained reason. They get new orders after replanning. Given the rarity of this and the difficulty in determining the cause I have opted to ignore it.
- Ensured the sort function CompareResourcesByAscendingSizeDescendingSuitability() has a valid comparitor when both resources are not suitable.
- Ditto for CompareResourcesByHQsAndDescendingSuitability().
- Fixed bug in Terrain Popup which was adding the base altitude to the spot height, which it should not have done.
- Ensured that Impassable Cliffs in the Malta map had zero move effect for motorised units.
- Rebuilt the Sidi Rezeh map to eliminate data corruption.
- Fixed bug in Debug version when autoStaffSupport selected for human player. Recompile of Tools and Game PCHs required.
New Features:
- Added new AssessForStalledAttack() reassessment code. It now checks to see if an attack should be called off if subordinates are halting.
- Modified the code that prioritieses objectives. If a nearby enemy ( ie one within 3000m ) is closer to another objective then its values are reduced. This has the effect of reducing the amount of friendly forces assigned to friendly objectives and helps maintain momentum in an advance.