OK, so all above is sorted, to summate:
So I had an irregular grid of 30 regions, 20 with names, 10 with digits.
Using digits is very handy for loops counting or deploying units.
However it resulted in ugly movement messages like Mekong->7.
I implemented zones, with 1 irregular grid for the 20 with names, and 10 one region zones for the digited regions (with each zone being given the regions ‘geographical’ name).
The large zone reports back using $gridlocation$, and the small ones report back using $name$.
This works for message reports, which now report back Mekong → Saigon. Luverly.
It works for sendToLocation, which sends the unit to the right region.
However it has run into two problems which seem to mean that the cure is worse than the problem.
It doesn’t work great for at-start stacks. If you nominate the digit as the starting location, it returns a can’t find error. If you nominate the name (in effect the zone name) it does not appear to place the unit on the region per see, just near it. Thus when further units are added or move to the region, they form their own stack (instead of all being a single stack on a single region in a single zone). Not a deal-breaker as their are workarounds (like sendthetoLocation at starting instant of game), just annoying.
But uh-oh, it doesn’t work for census functions, which initialise some Num=0, some Destination=7, then send a GK asking each unit to increment Num if its location matches Destination.
What I was hoping for was a method by which a unit thinks it is at region 7 for counting/calculation purposes, but thinks it is at Saigon for message reporting purposes.
I guess the problem could be solved by a java lookup function, or by actually using pieces as the locations instead of region, but I’m a bit reluctant for either. Maybe I will just drop the movement reporting (the census functions are too valuable).
Actually given that cards and pieces are all pieces, I am surprised the system does not treat regions as pieces as well. I must have a look at the source code sometime see what it does.