// Global Variables
// Declare two arrays to hold X/Y tile info for each player's start location
// For those who don't know, arrays are like "super variables" that can hold more than one variable at a time
short plStartX[6] = {0}; // Keep track of player Z's X-tile start location
short plStartY[6] = {0}; // Keep track of player Z's Y-tile start location
// --------------------------------------------------------
// Randomly assign start locations to the players
// Note that there's probably a better way to do this, but I don't care.
void RandomizeStartLocations()
{
// Randomize the list of all possible start locations
int allStarts[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
RandomizeList(autosize(allStarts) );
// Go through each active player
for (short s = 0; s < TethysGame::NoPlayers(); s++)
{
// Assign them their corresponding start location from the list
switch (allStarts[s])
{
case 0:
plStartX[s] = 48 + 31;
plStartY[s] = 43 - 1;
break;
case 1:
plStartX[s] = 80 + 31;
plStartY[s] = 68 - 1;
break;
case 2:
plStartX[s] = 56 + 31;
plStartY[s] = 97 - 1;
break;
case 3:
plStartX[s] = 95 + 31;
plStartY[s] = 120 - 1;
break;
case 4:
plStartX[s] = 64 + 31;
plStartY[s] = 167 - 1;
break;
case 5:
plStartX[s] = 79 + 31;
plStartY[s] = 202 - 1;
break;
case 6:
plStartX[s] = 14 + 31;
plStartY[s] = 205 - 1;
break;
case 7:
plStartX[s] = 69 + 31;
plStartY[s] = 234 - 1;
break;
case 8:
plStartX[s] = 113 + 31;
plStartY[s] = 152 - 1;
break;
case 9:
plStartX[s] = 69 + 31;
plStartY[s] = 14 - 1;
break;
// We shouldn't get to the default case, but better safe than sorry.
default:
plStartX[s] = 6 + 31;
plStartY[s] = 111 - 1;
break;
}
}
}
// Create player objects
void SetupPlayerLandRush(short s)
{
// Center view on start location
Player[s].CenterViewOn(plStartX[s], plStartY[s]);
Unit Unit1;
// High Resources setup
if (Player[s].Difficulty() == 0)
{
TethysGame::CreateUnit(Unit1, mapConVec, LOCATION(plStartX[s], plStartY[s] ), s, mapCommandCenter, 6);
Unit1.DoSetLights(1);
TethysGame::CreateUnit(Unit1, mapConVec, LOCATION(plStartX[s]+1, plStartY[s] ), s, mapStructureFactory, 6);
Unit1.DoSetLights(1);
TethysGame::CreateUnit(Unit1, mapConVec, LOCATION(plStartX[s]+2, plStartY[s] ), s, mapCommonOreSmelter, 6);
Unit1.DoSetLights(1);
TethysGame::CreateUnit(Unit1, mapConVec, LOCATION(plStartX[s]+3, plStartY[s] ), s, mapTokamak, 6);
Unit1.DoSetLights(1);
TethysGame::CreateUnit(Unit1, mapConVec, LOCATION(plStartX[s]+4, plStartY[s] ), s, mapAgridome, 6);
Unit1.DoSetLights(1);
TethysGame::CreateUnit(Unit1, mapConVec, LOCATION(plStartX[s], plStartY[s]+1), s, mapStandardLab, 6);
Unit1.DoSetLights(1);
TethysGame::CreateUnit(Unit1, mapConVec, LOCATION(plStartX[s]+1, plStartY[s]+1), s, mapVehicleFactory, 6);
Unit1.DoSetLights(1);
TethysGame::CreateUnit(Unit1, mapCargoTruck, LOCATION(plStartX[s], plStartY[s]+2), s, mapNone, 6);
Unit1.DoSetLights(1);
Unit1.SetTruckCargo(truckCommonMetal, 1000);
TethysGame::CreateUnit(Unit1, mapCargoTruck, LOCATION(plStartX[s]+1, plStartY[s]+2), s, mapNone, 6);
Unit1.DoSetLights(1);
Unit1.SetTruckCargo(truckCommonMetal, 1000);
TethysGame::CreateUnit(Unit1, mapCargoTruck, LOCATION(plStartX[s]+2, plStartY[s]+2), s, mapNone, 6);
Unit1.DoSetLights(1);
Unit1.SetTruckCargo(truckCommonMetal, 1000);
TethysGame::CreateUnit(Unit1, mapCargoTruck, LOCATION(plStartX[s]+3, plStartY[s]+2), s, mapNone, 6);
Unit1.DoSetLights(1);
Unit1.SetTruckCargo(truckFood, 1000);
TethysGame::CreateUnit(Unit1, mapRoboMiner, LOCATION(plStartX[s]+2, plStartY[s]+1), s, mapNone, 6);
Unit1.DoSetLights(1);
TethysGame::CreateUnit(Unit1, mapRoboSurveyor, LOCATION(plStartX[s]+3, plStartY[s]+1), s, mapNone, 6);
Unit1.DoSetLights(1);
TethysGame::CreateUnit(Unit1, mapEarthworker, LOCATION(plStartX[s]+4, plStartY[s]+1), s, mapNone, 6);
Unit1.DoSetLights(1);
// Sloppy Initial Vehicles Code
map_id Weapon1 = mapMicrowave;
if (Player[s].IsEden() )
{
Weapon1 = mapLaser;
}
switch (TethysGame::InitialUnits() )
{
case 12:
TethysGame::CreateUnit(Unit1, mapLynx, LOCATION(plStartX[s]+4, plStartY[s]+2), s, Weapon1, 6);
Unit1.DoSetLights(1);
case 11:
TethysGame::CreateUnit(Unit1, mapLynx, LOCATION(plStartX[s], plStartY[s]+3), s, Weapon1, 6);
Unit1.DoSetLights(1);
case 10:
TethysGame::CreateUnit(Unit1, mapLynx, LOCATION(plStartX[s]+1, plStartY[s]+3), s, Weapon1, 6);
Unit1.DoSetLights(1);
case 9:
TethysGame::CreateUnit(Unit1, mapLynx, LOCATION(plStartX[s]+2, plStartY[s]+3), s, Weapon1, 6);
Unit1.DoSetLights(1);
case 8:
TethysGame::CreateUnit(Unit1, mapLynx, LOCATION(plStartX[s]+3, plStartY[s]+3), s, Weapon1, 6);
Unit1.DoSetLights(1);
case 7:
TethysGame::CreateUnit(Unit1, mapLynx, LOCATION(plStartX[s]+4, plStartY[s]+3), s, Weapon1, 6);
Unit1.DoSetLights(1);
case 6:
TethysGame::CreateUnit(Unit1, mapLynx, LOCATION(plStartX[s], plStartY[s]+4), s, Weapon1, 6);
Unit1.DoSetLights(1);
case 5:
TethysGame::CreateUnit(Unit1, mapLynx, LOCATION(plStartX[s]+1, plStartY[s]+4), s, Weapon1, 6);
Unit1.DoSetLights(1);
case 4:
TethysGame::CreateUnit(Unit1, mapLynx, LOCATION(plStartX[s]+2, plStartY[s]+4), s, Weapon1, 6);
Unit1.DoSetLights(1);
case 3:
TethysGame::CreateUnit(Unit1, mapLynx, LOCATION(plStartX[s]+3, plStartY[s]+4), s, Weapon1, 6);
Unit1.DoSetLights(1);
case 2:
TethysGame::CreateUnit(Unit1, mapLynx, LOCATION(plStartX[s]+4, plStartY[s]+4), s, Weapon1, 6);
Unit1.DoSetLights(1);
case 1:
TethysGame::CreateUnit(Unit1, mapLynx, LOCATION(plStartX[s], plStartY[s]+5), s, Weapon1, 6);
Unit1.DoSetLights(1);
case 0:
default:
break;
} // Ugh, I'm ashamed that I actually wrote that... Too tired to code.
} // end huge if statement
// Med/Low Res Setup
else
{
TethysGame::CreateUnit(Unit1, mapConVec, LOCATION(plStartX[s], plStartY[s] ), s, mapCommandCenter, 6);
Unit1.DoSetLights(1);
TethysGame::CreateUnit(Unit1, mapConVec, LOCATION(plStartX[s]+1, plStartY[s] ), s, mapStructureFactory, 6);
Unit1.DoSetLights(1);
TethysGame::CreateUnit(Unit1, mapConVec, LOCATION(plStartX[s]+2, plStartY[s] ), s, mapCommonOreSmelter, 6);
Unit1.DoSetLights(1);
TethysGame::CreateUnit(Unit1, mapConVec, LOCATION(plStartX[s]+3, plStartY[s] ), s, mapTokamak, 6);
Unit1.DoSetLights(1);
TethysGame::CreateUnit(Unit1, mapConVec, LOCATION(plStartX[s]+4, plStartY[s] ), s, mapAgridome, 6);
Unit1.DoSetLights(1);
TethysGame::CreateUnit(Unit1, mapCargoTruck, LOCATION(plStartX[s], plStartY[s]+1), s, mapNone, 6);
Unit1.DoSetLights(1);
Unit1.SetTruckCargo(truckCommonMetal, 1000);
TethysGame::CreateUnit(Unit1, mapCargoTruck, LOCATION(plStartX[s]+1, plStartY[s]+1), s, mapNone, 6);
Unit1.DoSetLights(1);
Unit1.SetTruckCargo(truckCommonMetal, 1000);
TethysGame::CreateUnit(Unit1, mapCargoTruck, LOCATION(plStartX[s]+2, plStartY[s]+1), s, mapNone, 6);
Unit1.DoSetLights(1);
Unit1.SetTruckCargo(truckFood, 1000);
TethysGame::CreateUnit(Unit1, mapRoboMiner, LOCATION(plStartX[s]+3, plStartY[s]+1), s, mapNone, 6);
Unit1.DoSetLights(1);
TethysGame::CreateUnit(Unit1, mapRoboSurveyor, LOCATION(plStartX[s]+4, plStartY[s]+1), s, mapNone, 6);
Unit1.DoSetLights(1);
TethysGame::CreateUnit(Unit1, mapEarthworker, LOCATION(plStartX[s], plStartY[s]+2), s, mapNone, 6);
Unit1.DoSetLights(1);
// Sloppy Initial Vehicles Code
map_id Weapon1 = mapMicrowave;
if (Player[s].IsEden() )
{
Weapon1 = mapLaser;
}
switch (TethysGame::InitialUnits() )
{
case 12:
TethysGame::CreateUnit(Unit1, mapLynx, LOCATION(plStartX[s]+1, plStartY[s]+2), s, Weapon1, 6);
Unit1.DoSetLights(1);
case 11:
TethysGame::CreateUnit(Unit1, mapLynx, LOCATION(plStartX[s]+2, plStartY[s]+2), s, Weapon1, 6);
Unit1.DoSetLights(1);
case 10:
TethysGame::CreateUnit(Unit1, mapLynx, LOCATION(plStartX[s]+3, plStartY[s]+2), s, Weapon1, 6);
Unit1.DoSetLights(1);
case 9:
TethysGame::CreateUnit(Unit1, mapLynx, LOCATION(plStartX[s]+4, plStartY[s]+2), s, Weapon1, 6);
Unit1.DoSetLights(1);
case 8:
TethysGame::CreateUnit(Unit1, mapLynx, LOCATION(plStartX[s], plStartY[s]+3), s, Weapon1, 6);
Unit1.DoSetLights(1);
case 7:
TethysGame::CreateUnit(Unit1, mapLynx, LOCATION(plStartX[s]+1, plStartY[s]+3), s, Weapon1, 6);
Unit1.DoSetLights(1);
case 6:
TethysGame::CreateUnit(Unit1, mapLynx, LOCATION(plStartX[s]+2, plStartY[s]+3), s, Weapon1, 6);
Unit1.DoSetLights(1);
case 5:
TethysGame::CreateUnit(Unit1, mapLynx, LOCATION(plStartX[s]+3, plStartY[s]+3), s, Weapon1, 6);
Unit1.DoSetLights(1);
case 4:
TethysGame::CreateUnit(Unit1, mapLynx, LOCATION(plStartX[s]+4, plStartY[s]+3), s, Weapon1, 6);
Unit1.DoSetLights(1);
case 3:
TethysGame::CreateUnit(Unit1, mapLynx, LOCATION(plStartX[s], plStartY[s]+4), s, Weapon1, 6);
Unit1.DoSetLights(1);
case 2:
TethysGame::CreateUnit(Unit1, mapLynx, LOCATION(plStartX[s]+1, plStartY[s]+4), s, Weapon1, 6);
Unit1.DoSetLights(1);
case 1:
TethysGame::CreateUnit(Unit1, mapLynx, LOCATION(plStartX[s]+2, plStartY[s]+4), s, Weapon1, 6);
Unit1.DoSetLights(1);
case 0:
default:
break;
} // Still ashamed I wrote that and then copy/pasted it.
} // end huge else
} // end SetupPlayerLandRush
// --------------------------------------------------------
int InitProc()
{
// ...
// Determine player start locations
RandomizeStartLocations();
// Setup player units
for (int i = 0; i < TethysGame::NoPlayers(); i++)
{
SetupPlayerLandRush(i);
}
// ...
}