(v23, linux, HB)
Mafia, fight with lieutenant Rico Lucchesi, Aug 6+, SlumConstruction1, district G7
Problem: The battle freezes when it's a turn of one of the brown coat specialists (CautiousAI). He's holding a shotgun (Eurocorp Orthrus). No errors in the log.
Notes:
In one of the previous combat rounds, he decided to do a double shot with the shotgun.
Guessing from the archived log, the last turn he starts with 8AP and 0 ammo. And it seems he decided to reload the shotgun + do a single shot (3+5=8 ap). But there is also something looking like movement lines. Unfortunately, I don't remember whether he reloaded and/or moved before it hangs (looks some orders were executed). For sure only know that he hadn't fired at all.
The last line: "Item.CheckIfEnoughAmmoForAttack. Use mode: 0"
-> thus I'm guessing he wanted to fire the single shot. It ends here, but on normal occasions it's followed by lines with "Item.ApplyDeteriorationFromUse", then "CharacterMainScript.SetupRangedAttack", checking criticals etc...
I suppose some lines in the log are just that AI contemplates options, and that there is also a lot under the hood what isn't printed. So the above musing upon his actions and where it all ended is probably very misleading.
Battle screen at the moment of freeze:
![](https://s13.postimg.cc/xxa5xqy6f/Mafia_Specialist_Hangs_With_Shotgun_v23.jpg)
Specialist's last turn in the log:
BattleControlScript.FindNextActiveCharacter. Method called
BattleControlScript.FindNextActiveCharacter. AI character at pos 4 is combat capable?: True is involved in combat:? True
CharMainScript.CheckIfBleedingReturnKilledAndApplyDamage. Method called. Checking for: DeStasio Masi
BattleControlScript.FindNextActiveCharacter. DeStasio Masi has not died from fire or bleeding
BCS.CacheCurrentCharacter. Method called for character at pos 4 on char script list. Is player controlled: False name is: DeStasio Masi
CameraControlScript.GetRequiredCameraPosition: Method called
CameraControlScript.FocusCamera. Method called. Return to default elevation: False target pos: (19.8, 24.0, -25.1) time scale: 1
CharacterContainer.DecreasActivePerkCooldowns. Method called.
BCS.CheckIfPlayerOrAITurn. Method called. Is character delaying turn: False
BattleControlScript.CheckIfPlayerOrAiTurn. DeStasio Masi is not delaying turn. Restoring AP
BattleControlScript.DisablePlayerInput. Method called
CharacterAIScript.InvokeGetPossibleOrdersForTurn. Method called. Character is: DeStasio Masi delay
CombatQueueManager.GenerateCombatantIcons. Method called. PRE GEN. Current list display objects: 6 combatant icon scripts: 6
CombatQueueManager.GenerateCombatantIcons. Method called. POST GEN. Current list display objects: 6 combatant icon scripts: 6
CameraControlScript.FocusCamera. Method complete
CharacterAIScript.DetermineCharacterActionForTurn. Method called
CharacterAIScript.DetermineCharacterActionForTurn. Character Has AP
CharAIScript.GetOrdersBasedOnBehaviourType. Method called
CharAIScript.GetOrdersBasedOnBehaviourType. has healing item: True character health %: 1 min health before heal: 0.6 heals this turn: 0 max heals per turn
CharAIScript.GetOrdersBasedOnBehaviourType. Checking for orders. Behaviour type is: 1
CharacterAIScript.GetMeleeMetaOrder. Found path, adjacent exit allowed, no pathing through fire
CharacterAIScript.GetMeleeMetaOrder. Method called. Is move required: True / avg distance to enemies: 9.25
CharAIScript.GetMeleeMetaOrder. Path found, route through fire
CharacterAIScript.GetMeleeMetaOrder. Method called. Is move required: True / avg distance to enemies: 9.25
CharacterAIScript.GetMeleeMetaOrder. Found path, adjacent exit allowed, no pathing through fire
CharacterAIScript.GetMeleeMetaOrder. Method called. Is move required: True / avg distance to enemies: 9.25
CharAIScript.GetMeleeMetaOrder. Path found, route through fire
CharacterAIScript.GetMeleeMetaOrder. Method called. Is move required: True / avg distance to enemies: 9.25
CharacterAIScript.GetMeleeMetaOrder. Found path, adjacent exit allowed, no pathing through fire
CharacterAIScript.GetMeleeMetaOrder. Method called. Is move required: True / avg distance to enemies: 9.25
CharAIScript.GetMeleeMetaOrder. Path found, route through fire
CharacterAIScript.GetMeleeMetaOrder. Method called. Is move required: True / avg distance to enemies: 9.25
CharacterAIScript.GetMeleeMetaOrder. Found path, adjacent exit allowed, no pathing through fire
CharacterAIScript.GetMeleeMetaOrder. Method called. Is move required: True / avg distance to enemies: 9.25
CharAIScript.GetMeleeMetaOrder. Path found, route through fire
CharacterAIScript.GetMeleeMetaOrder. Method called. Is move required: True / avg distance to enemies: 9.25
CharacterAIScript.GetMeleeOrdersAgainstEnvironmentObjects. Method called. There are: 6 IEOS. Current meta orders: 8
CharacterAIScript.GetMeleeOrdersAgainstEnvironmentObjects. There are IEOs in play
CharacterAIScript.GetMeleeOrdersAgainstEnvironmentObjects. Method called. There are: 0 more players than enemies around ieo 0
CharacterAIScript.GetMeleeOrdersAgainstEnvironmentObjects. Method called. There are: 0 more players than enemies around ieo 1
CharacterAIScript.GetMeleeOrdersAgainstEnvironmentObjects. Method called. There are: 0 more players than enemies around ieo 2
CharacterAIScript.GetMeleeOrdersAgainstEnvironmentObjects. Method called. There are: 1 more players than enemies around ieo 3
CharacterAIScript.GetMeleeOrdersAgainstEnvironmentObjects. Distance more than 1 - a move is required.
CharacterAIScript.GetMeleeOrdersAgainstEnvironmentObject. Move Req. Not Enough AP. Current AP: 8 total: 18path cost 14 move & attack: 4
CharacterAIScript.GetMeleeOrdersAgainstEnvironmentObjects. Method called. There are: 0 more players than enemies around ieo 4
CharacterAIScript.GetMeleeOrdersAgainstEnvironmentObjects. Method called. There are: 0 more players than enemies around ieo 5
CharacterAIScript.GetMeleeOrdersAgainstEnvironmentObjects. Completed. Current meta orders: 8
CharAIScript.GetRangedOrderForCautiousAI. Method Called.
CharAIScript.GetAPDistributionOptions. Ranged weapon is: Eurocorp Orthrus number of fire modes: 2 character ap: 8
CharacterAIScript.GetAPDistributionOptions. current clip is: 0
CharAIScript.GetAPDistributionOptions. Adding reload order at pos: 0 AP cost: 3 leftover AP: 8current clip: 0
CharAIScript.GetAPDistributionOptions. Not enough AP for another attack. Trying to add attack with lower AP cost.
CharAIScript.GetAPDistributionOptions. Adding ranged attack. AP cost: 5 leftover AP: 0
CharAIScript.GetAPDistributionOptions. Distribution complete. No AP for another attack
CharacterAIScript.GetAPDistributionOptions. current clip is: 0
CharAIScript.GetAPDistributionOptions. Adding reload order at pos: 0 AP cost: 3 leftover AP: 8current clip: 0
CharAIScript.GetAPDistributionOptions. Adding ranged attack. AP cost: 5 leftover AP: 0
CharAIScript.GetAPDistributionOptions. Distribution complete. No AP for another attack
CharacterAIScript.GetAPDistributionOptions. Number of distribution options found (Pre Attack -1) : 2
CharacterAIScript.GetRangedOrderForCautiousAI. Distro 1 no of attacks: 1 Distro 1 pos: 0 Distro 2 no of attacks: 1 Distro 2 pos: 1
CharacterAIScript.GetRangedOrderForCautiousAI. All but selected distributions have been removed. Number remaining: 2
CharacterAIScript.GetHoldPositionMetaOrder. method called
CharAIScript.GetRangedMetaOrder. No defender script has been passed. Searching for enemy to whom most damage can be done
CharAIScript.GetRangedMetaOrder. No defender script has been passed. Searching for enemy to whom most damage can be done
CharacterAIScript.GetRangedOrderForCautiousAI. Number of meta orders after baseline: 9
CharacterAIScript.GetRangedOrderForCautiousAI. (PRE LOWEST LEFTOVER DISTRIBUTION REMOVES) Number of high leftover ap tiles: 0
CharacterAIScript.GetRangedOrderForCautiousAI. (PRE LOWEST LEFTOVER DISTRIBUTION REMOVES) Number of high leftover ap tiles: 0
CharacterAIScript.GetRangedOrderForCautiousAI. Number of meta orders after baseline movement variant : 9
CharacterAIScript.GetRangedOrderForCautiousAI. No Ranged Orders. Searching for flanking movement orders. Number of existine meta orders: 9
CharacterAIScript.SampleClearLOSToTargetForFlanking. Method called. Current grid pos: (16.0, 14.0) character AP: 8
CharacterAIScript.SampleClearLOSToEnemy. Sample step: (2) is less than/equal to char AP: (8)
CharacterAIScript.SampleClearLOSToTargetForFlanking. Method called. APSampleStep: 2 iteration pos: 0
CharacterAIScript.SampleClearLOSToTargetForFlanking. Method called. APSampleStep: 2 iteration pos: 1
CharacterAIScript.SampleClearLOSToTargetForFlanking. Method called. APSampleStep: 2 iteration pos: 2
CharacterAIScript.SampleClearLOSToTargetForFlanking. Method called. APSampleStep: 2 iteration pos: 3
CharacterAIScript.SampleClearLOSToTargetForFlanking. Method called. APSampleStep: 2 iteration pos: 4
CharacterAIScript.SampleClearLOSToTargetForFlanking. Method called. APSampleStep: 2 iteration pos: 5
CharacterAIScript.SampleClearLOSToTargetForFlanking. Found path to sampled flanking position. Path AP: 4
CharacterAIScript.SampleClearLOSToTargetForFlanking. Direction: 5 number of adjacent tiles7
CharacterAIScript.GetFlankingMetaOrder. Method called.
CharAIScript.GetFlankingMetaOrder. Flanking order not valid
CharacterAIScript.GetFlankingMetaOrder. Method called.
CharAIScript.GetFlankingMetaOrder. Meta Order Added
CharacterAIScript.GetFlankingMetaOrder. Method called.
CharAIScript.GetFlankingMetaOrder. Meta Order Added
CharacterAIScript.GetFlankingMetaOrder. Method called.
CharAIScript.GetFlankingMetaOrder. Flanking order not valid
CharacterAIScript.GetFlankingMetaOrder. Method called.
CharAIScript.GetFlankingMetaOrder. Meta Order Added
CharacterAIScript.GetFlankingMetaOrder. Method called.
CharAIScript.GetFlankingMetaOrder. Meta Order Added
CharacterAIScript.GetFlankingMetaOrder. Method called.
CharAIScript.GetFlankingMetaOrder. Flanking order not valid
CharacterAIScript.SampleClearLOSToTargetForFlanking. Method called. Current grid: (16.0, 14.0) Sample grid pos: (14.0, 16.0) LOS to Elena Furey
CharacterAIScript.SampleClearLOSToTargetForFlanking. Method called. APSampleStep: 2 iteration pos: 6
CharacterAIScript.SampleClearLOSToTargetForFlanking. Found path to sampled flanking position. Path AP: 2
CharacterAIScript.SampleClearLOSToTargetForFlanking. Direction: 6 number of adjacent tiles8
CharacterAIScript.GetFlankingMetaOrder. Method called.
CharAIScript.GetFlankingMetaOrder. Flanking order not valid
CharacterAIScript.GetFlankingMetaOrder. Method called.
CharAIScript.GetFlankingMetaOrder. Meta Order Added
CharacterAIScript.GetFlankingMetaOrder. Method called.
CharAIScript.GetFlankingMetaOrder. Meta Order Added
CharacterAIScript.GetFlankingMetaOrder. Method called.
CharAIScript.GetFlankingMetaOrder. Flanking order not valid
CharacterAIScript.GetFlankingMetaOrder. Method called.
CharAIScript.GetFlankingMetaOrder. Meta Order Added
CharacterAIScript.GetFlankingMetaOrder. Method called.
CharAIScript.GetFlankingMetaOrder. Flanking order not valid
CharacterAIScript.GetFlankingMetaOrder. Method called.
CharAIScript.GetFlankingMetaOrder. Flanking order not valid
CharacterAIScript.GetFlankingMetaOrder. Method called.
CharAIScript.GetFlankingMetaOrder. Meta Order Added
CharacterAIScript.SampleClearLOSToTargetForFlanking. Method called. Current grid: (16.0, 14.0) Sample grid pos: (14.0, 14.0) LOS to Elena Furey
CharacterAIScript.SampleClearLOSToTargetForFlanking. Method called. APSampleStep: 2 iteration pos: 7
CharAIScript.GetThrownWeaponOrders. Distance between character 0 : Sam Contino and character 1 : Elena Furey is: 7
CharAIScript.GetThrownWeaponOrders. Distance between character 0 : Sam Contino and character 2 : Emilia DeSoto is: 2
CharAIScript.GetThrownWeaponOrders. Distance between character 0 : Sam Contino and character 3 : Ray Case is: 7
CharAIScript.GetThrownWeaponOrders. Distance between character 1 : Elena Furey and character 2 : Emilia DeSoto is: 5
CharAIScript.GetThrownWeaponOrders. Distance between character 1 : Elena Furey and character 3 : Ray Case is: 1
CharAIScript.GetThrownWeaponOrders. Distance between character 2 : Emilia DeSoto and character 3 : Ray Case is: 5
CharAIScript.GetThrownWeaponOrders. Number of AOE connections is: 2
CharAIScript.GetThrownWeaponOrders. Number of characters: 2
CharAIScript.GetThrownWeaponOrders. Target with most surrounding targets is: 0
CharAIScript.GetThrownWeaponOrders. Chose tile: (4.0, 29.0)
CharacterAIScript.SampleClearLOSToTargetForFlanking. Coroutine complete
CharAIScript.ScoreAndChooseMetaOrder. Method called. Number of Meta Orders to choose from: 17 behaviour type is: 1
CharAIScript.CalculateCautionOrderScore. Scoring orders for cautious character. Average distance to enemy: 15.5
CharAIScript.CalculateCautionOrderScore. This order is a hold. Turns since hold order: 0
CharAIScript.CalculateCautionOrderScore. This order is a hold. Turns since: 0 zeroing this order.
CharAIScript.GetFireScoreMultiplier. Not standing on fire tile. No penalty.
CharAIScript.CalculateCautionOrderScore. Zeroing this order
CharAIScript.ScoreAndChooseMetaOrder. Chosen order position is: 9
CharAIScript.ExecuteNextAIOrder. Chosen meta order position is: 9 current order position is: 0 number of orders is: 2 order type: 0
CharacterAIScript.ExecuteNextAIOrder. Current order is move. Current order position: 0 of: 2 Number of steps: 4 ref path count: 4
CharacterAIScript.ExecuteNextAIOrder. There are additional orders in this meta order. Next order type is: 2
CharacterMovementScript.InvokeSetAimingAnimationParameterFalse. Method called
CharacterMovementScript.HandleReturnOfControl. Method called
CharAIScript.ReturnControlToAI. Method called
CharAIScript.ReturnControlToAI. Still orders left in meta order. Advancing to order 1 of 2
CharAIScript.ExecuteNextAIOrder. Chosen meta order position is: 9 current order position is: 1 number of orders is: 2 order type: 2
CharacterMainScript.SetupRangedAttack. Method called. Selected weapon name is: Eurocorp Orthrus use mode pos: 0 body part damage modifier1 status effect: -1 is overwatch: False
Item.CheckIfEnoughAmmoForAttack. Use mode: 0