--- id: fire-modes title: Ultra and Rotary autocannon rates are a choice status: open dependsOn: [ev] exitCriterion: > A Rotary AC is fired at a rate the bot chose against the jam risk, and a different rate is chosen when the risk is worth taking. --- # fire-modes Partly built. `Weapon::shots_per_firing` exists, `Mode`, `WeaponMode` and `OneOf` are in `volley.rs`, and a launcher's modes already resolve through `OneOf::resolve` - the type has no `sum` and no `iter` precisely so a caller cannot add two alternatives together by accident. What is not there is the *risk*. An Ultra AC firing double can jam; a Rotary firing at four or six can jam harder. The bot picks a rate without pricing the chance of losing the weapon for the rest of the match, which makes the highest rate always look best. ## What it needs - The jam roll per rate, from MegaMek rather than a rulebook. Probe it the way `SdsMinimumRange` probed range. - A term in the volley's value for the expected cost of jamming: a weapon lost for the remaining rounds, weighted by how much of the force's firepower it is. - A check that `ammo_spent` prices the higher rate correctly - it now counts rounds rather than declarations, so an Ultra in double mode should already spend two.