SITREP Thursday 20 December
Hi all. Good news. I have just uploaded a new build for our in-house beta testers to test. It's a nice Xmas present for them and hopefully it will translate into a nice outcome for you all in the New Year, probably in February, given the holiday season. It's a massive set of changes. It won't all fit in one post.
Changes (Part 1). Needless to say there are lots and lots. Here is the change log from builds since 5.1.33:
- Updated Dev installer script. I disabled the condition test for the registry keys. It was interpreting the status result for the Control dialog as null. That's the trouble for using 0 as Open. I'll need to think of something else. But have commented it out for now.
- Refactored ScenFireEvent constructor
- Wrapped on Linux/DXVK due to RenderTarget failure into an exception
- Issue #21: Added support to EstabEditor, EstabManager and core EstabService class for AttackReassessmentDurations, incremented Estab version to 146
- Reassessment Changes, including to the way the reassessment duration is calced. Rather than a fixed value we now use a sliding scale based on efficiency modifier
- Fixed memory leaks in RouteAversionMap and FPRouteInput by migrating from raw pointers to STL RAII
- Changes to GameRecorder code - changed checksum variable size from int to double to prevent data overflow when checking large numbers of units. Also replaced extremely large value being used when an ID Ptr was null. This was resulting in overflows after the second case.
- Added safety checks in all Destroy() that include PodIDPtrs to ScenTaskEvents.
- First hack at tackling the circularity issue with events, tasks and forces. Didn't work. Hence why I'm branching now. Need to make structural changes to the ScenTask, ScenRealForce and ScenTaskEvent classes.
- Out of Sync (OOS) Changes to 27 Jul 2018, including:
- Increased checksum size from INT to DOUBLE
- Restructured ScenTask, ScenRealForce and ScenTaskEvent classes to remove circularity. Specifically, I removed mCurrentEvent from ScenRealForce. The force now accesses this via its current unit task member. Responsibility for destroying ScenTaskEvents now resides in ScenTask and GameEvent loop. ScenTask::SetEvent() will now destroy the old event after setting the new event. If the old event is the current event in the event loop, it will not destroy it, but simply set its mTask member to NULL. The event loop will destroy the event at the conclusion of the loop.
- NOTE ScenTypes has changed: kCurrentScenarioDatabaseFormat is now at version 190 and all scenarios will need conversion. I have changed the Archive members to automatically convert.
- Fixed bug inside ScenRoute that was not capping the mNextMoveRouteIndex to the size of the route.
- OOS Changes as of 3 Aug 2018
- Replaced use of doubles with uint64_t in chechsum code
- Replaced all direct calls to ObjectID() inside GetForceChecksum(). These now use GetPointerChecksum().
- Similarly replaced direct calls to MapLoc members with GetMapLocChecksum().
- Ensured a force has a Depot and a Dump before calling functions on them.
- Added calls to GameRecorder::RecordOrVerifyState() throughout scheduling code in an attempt to narrow down where the game goes out of sync.
- Fixed bug inside ScenRealForce:
etermineFuelRequirement() that was failing to add nonAFVs fuel requirements for static events - such as Defend.
- Refactored ScenPlanScheduling::ScheduleNextEvent(), hiving off over 15000 lines of code into subFunctions.
- Fixed various logic flow errors. These included ensuring ScenTask::IsHHourSet() is called and set at the beginning of functions such as ScenMissionPlan::GetAssaultStart(). This avoids the potential to return a false value when the start time is cribbed.
- Added numerous asserts to advise when logic flows incorrectly.
- Issue #17: Out of Sync, reverted std::unordered_set back to std::set, cleanup of unused code
- Issue #17: Out of sync, disabled sending action-based reports when replaying
- Issue #17: Out of sync, added extra RecordOrVerify calls to enfore synchronisation of every single frame processing, removed commented out or unnecessary calls
- Merge remote-tracking branch 'remotes/origin/master' into RefactorScheduleNextEvent
- Refactor ScheduleNextEvent()
- Changes to address the reassessment and intel issues. Specifically:
* Ensure that the ForceData for GameAnimForce is updated every minute.
* Ensure that that the GameAnim force icon's location is updated every frame.
* Added Observers to all force data dialogs to ensure that those displaying enemy intel force data are updated every minute
* Ensure that if an enemy intel report icon is no longer visible that its corresponding data dialog is cleared. Also ensure that the dialog is re-populated if the icon later becomes visible again.
* Fixed a bug in MapTerrainTable::CanSeeProbability() that was erroneously applying a modifier for intervening vegetation in cases where the ground sloped away and then rose again.
* Removed redundant call to update intel force levels from ScenFireEvent.
* Fixed bug inside ScenIntelEnemyForce::UpdateIntelForceLevels() that failed under certain circumstances to update the location for the enemy force intel icon when the real force had moved
* Changed the behaviour of enemy intel force icons where the force was deployed. Previously all deployed, dug in, entrenched and fortified unit icons had their duration till stale set to whatever the duration was to the end of the scenario. This meant their icons would never expire till the end of the scenario. Now deployed units go stale after four hours.
* Ensure that enemy intel icons temporarily made inactive are activated again when their status changes back.
* Ensure that inside ScenPlanScheduling::SpotEnemyForces() all enemy units are checked if no one else has spotted them so far this minute. This adds extra processing but ensures all enemy forces are checked.