Nails and I ran more tests on this and our research was consistent with their finding of the minimum damage roll being removed.
A Mega Alakazam with a neutral nature and no stat points in Special Attack (195 SpA) attacking into a Torterra with a neutral nature and no stat points in Special Defense (105 Sp. Def), using Grass Knot, never dealt the expected minimum damage.
Assuming the base damage formula is identical to Scarlet/Violet, and uses integer division:
((BP * Atk * (Level * 2 / 5 + 2) / Defense) / 50) + 2
((120 * 195 * (50 * 2 / 5 + 2) / 105) / 50) + 2
((120 * 195 * 22 / 105) / 50) + 2
((514800 / 105) / 50) + 2
(4902 / 50) + 2
98 + 2
100
This comes out to 100 base damage. No other modifiers are happening in this calculation, so if the distribution of damage rolls were the same as in past games, it could be any of [85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]. But like saburoh326 found, we never hit 85. Here was the distribution of damage rolls in the footage above:
| Damage Roll | Count |
|---|
| 85 | 0 |
| 86 | 9 |
| 87 | 13 |
| 88 | 8 |
| 89 | 11 |
| 90 | 19 |
| 91 | 9 |
| 92 | 10 |
| 93 | 11 |
| 94 | 9 |
| 95 | 8 |
| 96 | 9 |
| 97 | 16 |
| 98 | 4 |
| 99 | 11 |
| 100 | 13 |
| Total: | 160 |
It would be extremely improbable for both saburoh326 (who tested 152 times) and Nails/myself (who tested 160 times) to have never hit the minimum damage roll once between our tests.
However, these tests assume the Scarlet/Violet base damage formula is identical to what's being used in Champions. That is a reasonable assumption, I think, since the distribution is so close. But let's explore two possible scenarios:
1) The base damage formula has sufficiently changed such that the result is not 100, but some other integer.
If true, you would expect it to be very close, at either 99 or 101. However, both 99 and 101 cannot produce a damage roll of 100.
Base damage of 99: 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
Base damage of 101: 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 101
2) The base damage formula and the random damage roll no longer use integer division; instead, damage is a float (i.e. uses decimals) that is later rounded at the end in some way.
If true, ((514800 / 105) / 50) + 2 would evaluate to something close to 100.05714285714286 rather than 100. If this is multiplied by 85-100, then divided by 100, here are the possible damage rolls:
[85.04857142857144, 86.04914285714287, 87.04971428571429, 88.05028571428574, 89.05085714285715, 90.05142857142857, 91.052, 92.05257142857143, 93.05314285714286, 94.05371428571429, 95.05428571428573, 96.05485714285714, 97.05542857142858, 98.056, 99.05657142857144, 100.05714285714286]
Note that I am just using Javascript for this, which is probably not what Champions's server-side backend is using, but rounding differences here would be very minor. Whatever rounding method you pick, 85 is still expected, which we did not hit.
So I don't think a different base damage formula explains it. Moreover, I can think of a plausible explanation for why there are only 15 damage rolls. In Scarlet/Violet, there is a constant associated with the damage formula's random damage roll that has a value of 15. My guess is that it's intended to represent that damage can be a range of 85-100% of the original damage. When the random damage roll is actually applied, however, they have to add 1 to the RNG call so it returns 0-15 rather than 0-14. Then, that random number is subtracted from 100, multiplied by current damage, divided by 100, and that's the adjusted damage. Perhaps Champions kept the constant the same, but forgot to do the +1? That's sheer speculation of course, but it would explain why the minimum damage roll in particular is what's missing.