StringCharsTotal/2 is not half the length of one string, but half the length of ALL strings, just to clarify that.
linkThis is the link to the Blizzforums topic where I released my findings. I'll add a brief explanation as well:
With currently available editors, you are basically right (though you neglected string recycling). But those editors all follow the rules Staredit set up, instead of Starcraft's rules. Since string recycling already breaks compatability, why should we still go with the outdated rules of SE?
A string offset is a ushort. So a certain string's offset can range from 0 to 65535. Since the first 2 bytes are taken for MaxStrIndex (not NumberOfStrings, that's no proper name), and probably none of your strings will start with the value 0xFFFF (twice the y with the two dots), you'll count those 2 bytes off.
Only the strings beginning must be within the max(ushort) range, so the last string can extend beyond that.
Now the new thing: In SE, the string indexes all form a block at the beginning of the STR section. But Starcraft does not care abouta that. So instead of string 1 to 1023 (string 0 is defaulted for examplte to "Marine" in case of that unit), I use string indexes BEYOND 32768. Those are outside the range that is available for sting characters, and thus I can use an additional 2*NumberOfStrings characters.
Practically, this results in 25000+ strings with a total of ~65700 characters.
Btw, what you also can do is use sub-strings as strings, for example "hello world!" and "world!" could be used as 2 strings only taking up the space of the first string. Otherwise you'd never be able to fit 25000 non-stupid strings into 65700 characters...