"Realistically, what percentage of people playing Stardock games are still using 32-bit OS's? I"m curious."
Both my computers are running 32 bit OS, and I forced to use a 32 bit OS for my netbook anyway.
If you want to make a 64 bit version of the game, then why not make 2 different EXE.
For modding, one thing to consider could be to only load in memory what the game needs. So that creating a mod does not load all elemental stuff + all the mod stuff.
"No matter how much memory is on your computer, a PC game will only be able to see 2 gigabytes of it unless the game itself is 64-bit which"
I am not really sure about that, let me see ... googleling ... Got it.
32 bit OS can address up to 4 Gig of ram. But since this is adressable memory, you must leave addresses for the video ram and other devices that need memory address. The the amount of memory you can have is 4 gig minus video ram and other stuff which gives in average 3.xx gig of ram.
"Most games work around this problem with unit limits."
I think your problem is that your unit data is too large because you keep the design of the unit within each unit. So each unit must keep track of the equipment and appearance it has.
Instead, you should use unit models which are stored in a separate table and add a unit entry which has a foreign key toward the unit model. This way, you will need to keep much lees information about each unit. In fact you only need to keep track of:
1- X/Y coordinates
2- Current movement points available (the maximum is in the unit design)
3- Current HP (maximum is in unit design)
4- Experience points
There might be a few other things, but as you can see, you only need a few bytes to record the information. The only feature you lose is being able to equip a unit while it's on the filed. But you generally want to reserve that privilege to heroes, not military units.
"The Kumquat engine is highly multithreaded. [...] But it comes at a cost – memory"
Personally, allowing players to change some options would be the best solution. For example, I dont care if there are people working in my city. I could simply deactivate that feature and I save memory and threading.
"Most people don’t connect gameplay limitations to memory."
There is always different solutions that can be used to optimized how the data organized to save memory. I remember when programming "wizardry legacy" that some information were coded in bits to maximize the amount of space required for each tile of the maze. For example the walls doors and grid were encoded on 8 bits:
there was 2 bits for each side : noreath, east south and west.
and the value of these 2 bits could be one of the following combination which means different things:
00 - No wall
10 - Wall
11 - Wall and door
01 - Grid
So in the example above, the first bit was for the wall and the 2nd bit was for the door. But there I realized that it would never happen to have a door without wall, so I changed the encoding to make the 01 combination become a grid-wall that you could see through.