Was thinking of possibility that it was burst too. Apart a drop in frame rate can it happen that the game won't play firing a shot?
For example, when getting one miss and one hit, and if you see only one bullet to fly and connect - then psychologically you might not automatically realize that this one "Miss" said above the character's head was referring to the second not-rendered/unseen bullet...
Will describe one suspicious situation happened to me while testing this but haven't recreated since. However, it wasn't many tries, not much free time these days:/ So I urge not to believe me. I don't.
Emilia starts the turn with 9AP, takes one step to the place she is now and then fires in burst mode at lady Urbana. You can see it took 8AP, as there is none left, but I've seen only one bullet fly. That one was a hit. (log added further below, it also says mode=2 etc)
There is something strange with adjacent units going on. It may not be the problem here, but let me describe anyway: If you have a gun and there is an adjacent enemy or more it seems the game somehow forces that your unit has to constantly aim at one of those adjacent enemies (esp. if he has a bat?), no matter at whom else you're pointing the mouse currently. Wondering if this is intended behaviour.
What think have seen was that Elena aims all the time at Bianca. And after clicking on Urbana, Elena swiftly turns around, makes a shot and then immediately turns back to aim at Bianca again. Possible I've been clicking around at the time if things can somehow combine.
The log says:
CharMainScript.CheckIfEnoughAP. Ap required:8 / current AP: 8
BattleControlScript.DetermineRightClickAction. SHIFT NOT BEING HELD DOWN
BattleControlScript.DisablePlayerInput. Method called
BattleControlScript.DetermineRightClickAction. Setting up ranged attack. No strafe. Use mode position is: 2
CharacterMainScript.SetupRangedAttack. Method called. Selected weapon name is: Raskol 148 use mode pos: 2 body part damage modifier1 status effect: -1 is overwatch: False
Item.CheckIfEnoughAmmoForAttack. Use mode: 2 has enough ammo
CharacterMainScript.CheckIfWeaponJams. This weapon can jam. Condition is: 1 Jam %: 0
CharacterMainScript.CheckIfWeaponJams. Weapon jams: False condition: 1
CharMainScript.SetupRangedAttack. Weapon has not jammed.
Item.ApplyDeteriorationFromUse. Method called. Item condition %: 1.057778
BattleControlScript.CheckForAdjacentEnemies. Criminal found at: (10.0, 2.0)
CharacterMainScript.SetupRangedAttack. Method called. Chance to hit: 20 body part modified CTH: 1
BattleControlScript.ReturnCriticalHitsList. Crit: 5.6 target penalty: 0
CharacterMainScript.StartRangedAttack. Method called. Is overwatch attack: False
BattleControlScript.NotifyEnemyTheyAreUnderAttack. Method called.
CameraControlScript.CheckIfRangedAttackerAndDefenderWithinFieldOfView. Method called.
CameraControlScript.CheckIfCameraHasLOSToBothCharacters. Character B has LOS.
CTHDisplayObjectScript.SetParticleSelectorBusy. METHOD CALLED
CharacterMainScript.StartRangedAttack. selected item is: Raskol 148 ranged weapon clas: 2 bullet spawn point is: 1
Gunscript.HandleFiringEffects. Is shotgun: False
CharacterMainScript.FireBullet. Method called. direction is: (1.0, 0.0, 0.0)
BulletScript.SetDirection. Method called. Direction is: (1.0, 0.0, 0.0)
BulletScript.OnTriggerEnter. Trigger event detected with object of tag: Characterbullet hits target: True
BulletScript.OnTriggerEnter. Hit character ID is: 7 target character id is: 7
BulletScript.OnTriggerEnter. Bullet hit correct character, destroying. Time when shot hit: 166
CharMainScript.StartRangedAttack. Attack has succeeded. Hit miss count: 2 attack damage list: 2
CharacterMainScript.ReduceHP. Method called. is overwatch: False /is AOO: Falsecharacter: Urbana Romero
Item.ReturnDamageAfterResistance. Damage is: 13.77 / damage type: 0
Item.ReturnDamageAfterResistance. Start Damage: 13.77 /armour condition %: 1 /absorbed 0 /resisted: 1.6524 /damage applied: 12.1176
Item.ApplyDamageToArmour. Method called damage: 13.77 /armour damage level: 2 /is crit:False /wrecking ball: False targetted body: False
Item.ApplyDamageToArmour. Total armour damage: 1.1016 /Total %: 0.08 /base: 0.08 /from crit: 0 /from wrecking ball: 0 /from target body: 0
CharMainScript.ReduceHP. This character is in combat. Updating combatant icons
CombatQueueManager.UpdateCombatantIcon. Method called for character ID: 7 health is: 6.8824
CharacterMainScript.ReduceHP. This character HP current: 6.8824
CharacterMainScript.ReduceHP. HP for Urbana Romero is > 0
CharMainScript.ReduceHP. Health for Urbana Romero reduced by 13.77
CharacterMainScript.HandleHitByRangedFire. Method called. Hit character is: Urbana Romero
CharacterMainScript.StartRangedAttack. selected item is: Raskol 148 ranged weapon clas: 2 bullet spawn point is: 1
CharMainScript.RaycastForMissedRangedAttack. This raycast hasn't hit anything and is valid
Gunscript.HandleFiringEffects. Is shotgun: False
BulletScript.SetDirection. Method called. Direction is: (1.0, 0.0, 0.0)
CharMainScript.StartRangedAttack. Attack has failed
CharacterMainScript.StartRangedSingleTargetAttack. Is in strafe origin: True
CharacterMainScript.ConcludeRangedAttack. Method called. Number of hits: 1 number of misses: 1
BattleControlScript.CheckForAdjacentEnemies. Criminal found at: (10.0, 2.0)
GameDataScript.IncreaseSkillAmountToNextLevel. Skill no: 1 amt to increase: 0.05 facility bonus: 1
GameDataScript.IncreaseSkillAmountToNextLevel. Skill no: 1 amt to increase: 0.025 facility bonus: 1
CharacterMainScript.ConcludeRangedAttack. ENABLING PLAYER INPUT
BattleControlScript.UnlockUserInput. Method called.
BulletScript.OnTriggerEnter. Trigger event detected with object of tag: Characterbullet hits target: False
BattleControlScript.DetermineMouseOverAction. Not enough AP for pistol attack