I'm not saying there's a bug in OXC or OXCE. I'm saying this was a bug in OG, which OXC copied. That integer division should've been a float division.
Let me explain. At some point the OG developers decided to add stat increases to the game. 1, 2, 3 or 4. See the variable v21? That was supposed to be the amount the stat increased. 1 exp -> 1 stat, 3 exp -> 2 stat, 6 exp -> 3 stat, 11 exp -> 4 stat. It's a simple formula with diminishing returns. But after testing, they got feedback that predictable increases felt a bit unrealistic, so later they added some RNG to it. They copied the same algorithm with integer division that they used in other places, like damage range. But this integer division, with its floor rounding, changed the average stat increase from [1.0, 2.0, 3.0, 4.0] to [0.5, 2.0, 2.5, 4.0]. The main problem here is that this change ruined the "diminishing returns" part. 1 exp -> 0.5 stats, 3 exp -> 2 stats. The 2nd bucket is more efficient than the 1st bucket? That makes no sense. This is why I'm convinced that the integer division is a bug in the OG and if the OG developers weren't in a rush to release the game and looked at this part of the code again, they would've noticed the problem and changed the floor to a precise round.
Anyway, I noticed that stat awards are scriptable, so it should be possible to check if exp falls in 1st or 3rd bucket, and add roll for 0-1 extra stats if it does, which would correct the diminishing rewards curve. I'll post it here once I figure it out.