@alkexr
Sorry for missing that you have an exception for plains! This changes things a bit but I think my thoughts still hold:
Stacking bonuses: stacking different bonuses is unaffected by the simplification I am proposing. It is still posible in exactly the same way, it is just easier because there are fewer categories.
Cleaning up the table: let us look at a 4/5 "poor" unit. If you change it to a 4/6 “poor” unit, to keep everything the same, you would need to change the river modifier to -1 and the plains modifier to -1 as well but all the other (defence) modifiers would be zero. If you do this for all units you get much cleaner stats. “Poor” units would have only one modifier (-1) for two terrain types and the rest would be zero. You are correct that it would not improve the situation for rivers and plains would be worse of (1/-1 instead of 1/0) but it would be much better for ever other terrain type.
Getting Rid of unit types part one: you are correct in that you cannot simply get rid of “excellent” and “good” unit classes if you make a special case for plains. But you can (and should) still get rid of both classes. You just need a tag that improves (or worsens) a unit in plains by 1. That would be a lot cleaner than introducing to separate classes of units which only differ in exactly this one thing from already existing classes. It would even be the same modifier. Formerly “excellent” and “good” units would receive a tag “maneuverable” (or something nicer sounding) which give them +1 to their defence on plains. Afterwards my original approach works again. Which was:
You do not need "excellent" units at all. Let us take your example: an excellent unit with 4/4 stats. You could give it a +1 baseline stat instead (making it a 4/5) and it would get a +1 bonus everywhere but on plains and rivers which makes it (almost) identical to a "poor" unit. You do this with all "excellent" units (and give them “maneuverable”) and you get rid of the whole category of "excellent" units and your matrix shortens by a whole row/line! With minimal changes to your logic. It would be a "poor" 4/5 unit (or a 4/6 “poor” unit if you implement the first change).
Getting Rid of unit types part two: you do the same for “good” units. You don’t even need a new tag, maneuverable works here as well.
This would be the resulting table changes:
[image: 1784497258931-cbfde471-020f-4564-80ec-ec57c1f71277-image.jpeg]
[image: 1784497273329-6e28783b-7fe2-4282-b9f2-92bc18950a18-image.jpeg]
(This includes merging territories that are identical.)
Sorry for coming back to this, I am a mathematician and these kind of things are just fun