Hmm, sounds easy enough for the two player case. Just don't randomize. Do you plan on similar setups for more players?
For the two player case, you could try something like this:
int InitProc()
{
int i;
// Randomize starting locations
//RandomizeStartingLocations(autosize(startLocation));
i = TethysGame::GetRand(6); // Determine location for first base
// Place all bases on the map
InitPlayerResources(0);
StartLocation &sLoc = startLocation[i];
CreateBase(0, sLoc.x, sLoc.y, *sLoc.baseInfo);
Player[0].CenterViewOn(sLoc.x, sLoc.y);
InitPlayerResources(1);
StartLocation &sLoc = startLocation[5-i];
CreateBase(1, sLoc.x, sLoc.y, *sLoc.baseInfo);
Player[1].CenterViewOn(sLoc.x, sLoc.y);
...
Edit: Hmm, since you want more players...
Ok, so the locations aren't changing, but the way you're selecting is. I'd say maybe use a seperate list of integers to represent the starting locations. (Note: I'm using 0 based indexes here, so numbers 0-5 instead of 1-6 as in your diagram).
int twoPlayers[][2] =
{
{ 0, 5 },
{ 1, 4 },
{ 2, 3 },
}
int threePlayers[][3] =
{
{ 0, 2, 4 },
{ 1, 3, 5 },
}
// 4, 5, and 6 maybe just complely randomize the 6 starting locations? Doesn't seem like there is a way to make it any more fairer
int sixPlayers[][6] =
{
{ 0, 1, 2, 3, 4, 5 }
}
Use the TethysGame.NoPlayers() to determine which array to use, and then use TethysGame.GetRand to determine which row of the array we want. Then you can permute the row and use the indexes into the starting location array when creating the bases.
I'm gonna go try out some test code and see if I can clean this up a bit.