I've thought about this system a bit more and have come up with what I believe would be a better system than the current one, at least one that is more accurate to history and allows for better ship ASW.
General Suggestions
1. The game should track # of merchant ships so that submarines aren't sinking infinite merchant ships. A certain portion should be fuel, the rest cargo. If you lose too many fuel ships you have a fuel shortage, too many cargo ships and your population gets mad. Some ships are built every month. If you are losing too many ships you should get an event that states "we are losing too many merchants to the submarine menace, should we divert funds to build more merchants? (y/n)" which costs funds but massively increases the number of merchant ships created per month.
2. The game should track how many merchants are in an area in a certain month, whether or not it tracks overall numbers
3. Ship based helicopters and carrier based aircraft should contribute to air ASW in the sea zone the ship is in
4. Submarines (specifically SSC, SS, and SSL) post Wire Guided Torpedoes should have ASW that applies every turn
The way ship ASW works should change somewhat depending on the tech/era.
Era 1 is Pre- Convoy. This era is where ship ASW acts most like the current system. A sub has a high chance to make an attack against a lone merchant. After the attack, there is a chance that an ASW escort can intercept, after which ASW score determines if it can kill the sub. This has a very low chance of success. More escorts reduce the chance that a sub will attack.
Era 2 is Post-Convoy, Pre-Wolfpack. The game sorts merchants into convoys and assigns escorts (ASW and gun) randomly to the convoys, some ships are not in convoys. Subs have a low chance to either attack a single ship or a convoy. When they attack a convoy, they can attack more than one merchant, depending on sub type (SSC have lowest # of tubes, meaning low chance of attacking multiple merchants, SSL highest #, so they can attack more merchants), multiple ASW escorts can attack the sub, more escorts and more ASW value on those escorts reduces chance of the sub to attack, and increases the chance that the sub will be discovered before it can attack (skipping attack and moving straight to ASW counterattack). Subs can attack the same convoy again if ASW escorts fail to sink them, this chance increases with reliability and sub type (SSC->SSM/SS->SSL).
Era 3 is Post-Wolfpack, Pre-Improved ASW tactics. Now, when a sub attacks a convoy, it calls more submarines to also attack the convoy. (post Shipborne HF/DF escorts can attack this sub, preventing extra subs from attacking). Extra subs means that less escorts are assigned to attack each submarine that gets attacked by the escorts, it also means that more merchants get sunk as more submarines attack. There is a higher chance to re-attack convoys
Era 4 is Post Improved ASW tactics.
Improved ASW tactics should give a higher chance for submarines to be attacked and sunk by escorts, but it should also add Hunter/Killer(H/K) groups and escort groups. Pre-era 4, escorts above the necessary amount in a sea zone are randomly assigned to convoys. In Era 4, once more than the necessary number of escorts in a sea zone are present, escorts are assigned to escort groups. These escort groups are assigned when a sub re-attacks a convoy. H/K groups are groups of escorts centered around a (heli)carrier. These escorts’ ASW score is applied to hunt subs every turn. Extra escorts are assigned to H/K groups first, escort groups second.
For attacks on ships on AF, a division is chosen, escorts are assigned to the division, and then the sub attacks a ship in the group (sub attacks 1BX, 1BX is escorted by 1CA, 1Cl, 1,2,3DD. Sub attacks a CA in 1CA, damages the ship, 3 DDs attack the sub, sub is sunk by DD).
If a Raider attacks a convoy, the game rolls to see if the raider continues the attack (adjusted by raider size and escort size), if it attacks then the game generates a convoy battle. (This will have to be tested to see if the convoy battles are too overbearing.) If it doesn’t attack, and a cruiser is present there is a chance to generate a raider battle.
I tried to make changes that would improve the way ship ASW works while also maintaining enough abstraction. I am not a coder so I don’t know how complicated this would be to implement.