274 lines
6.0 KiB
Plaintext
274 lines
6.0 KiB
Plaintext
|
//
|
||
|
// Skirmish Base Script.
|
||
|
//
|
||
|
// contains the rules for starting and ending a game.
|
||
|
// as well as warning messages.
|
||
|
// alex lee. pumpkin studios 99.
|
||
|
//
|
||
|
|
||
|
public STRUCTURESTAT command;
|
||
|
public STRUCTURESTAT factory;
|
||
|
public STRUCTURESTAT wall;
|
||
|
public STRUCTURESTAT cornerWall;
|
||
|
public STRUCTURESTAT oilDerrick;
|
||
|
public STRUCTURESTAT powerGen;
|
||
|
public STRUCTURESTAT research;
|
||
|
public STRUCTURESTAT commandrelay;
|
||
|
public STRUCTURESTAT cybfac;
|
||
|
public STRUCTURESTAT vtolfac;
|
||
|
|
||
|
////////
|
||
|
// starting technologies.
|
||
|
public int numCleanTech, numBaseTech, numDefTech, numBaseComp;
|
||
|
public RESEARCHSTAT defTech[50];
|
||
|
|
||
|
// research topics
|
||
|
public int numBaseRes;
|
||
|
public RESEARCHSTAT baseRes[10];
|
||
|
|
||
|
// Other Stuff
|
||
|
private int count;
|
||
|
private int playnum;
|
||
|
private bool gamewon,gameLost;
|
||
|
|
||
|
// Base Under Attack
|
||
|
private STRUCTURE hitStruc;
|
||
|
private BASEOBJ attackerObj;
|
||
|
private int t;
|
||
|
public SOUND attackSnd1;
|
||
|
|
||
|
public INTMESSAGE endMsg, winMsg;
|
||
|
|
||
|
public CONSTRUCT CyborgSpade;
|
||
|
public REPAIR CyborgRepair;
|
||
|
|
||
|
// /////////////////////////////////////////////////////////////////
|
||
|
|
||
|
trigger endConditions(every, 100);
|
||
|
|
||
|
// /////////////////////////////////////////////////////////////////
|
||
|
//this event is called once the game has initialised itself
|
||
|
|
||
|
|
||
|
event initialisedEvent(CALL_GAMEINIT)
|
||
|
{
|
||
|
//set up the reticule buttons
|
||
|
addReticuleButton(OPTIONS);
|
||
|
addReticuleButton(CANCEL);
|
||
|
addReticuleButton(BUILD);
|
||
|
addReticuleButton(MANUFACTURE);
|
||
|
addReticuleButton(RESEARCH);
|
||
|
addReticuleButton(INTELMAP);
|
||
|
addReticuleButton(DESIGN);
|
||
|
|
||
|
playnum = 0;
|
||
|
while (playnum < 8)
|
||
|
{
|
||
|
enableStructure(command ,playnum); //make structures available to build
|
||
|
enableStructure(factory ,playnum);
|
||
|
// enableStructure(wall ,playnum);
|
||
|
// enableStructure(cornerWall ,playnum);
|
||
|
enableStructure(oilDerrick ,playnum);
|
||
|
enableStructure(powerGen ,playnum);
|
||
|
enableStructure(research ,playnum);
|
||
|
|
||
|
setStructureLimits(factory, 5, playnum); // set structure limits
|
||
|
setStructureLimits(powerGen,8, playnum);
|
||
|
setStructureLimits(research,5, playnum);
|
||
|
setStructureLimits(command, 1, playnum);
|
||
|
setStructureLimits(commandrelay,1, playnum);
|
||
|
setStructureLimits(cybfac, 5, playnum);
|
||
|
setStructureLimits(vtolfac, 5, playnum);
|
||
|
playnum = playnum+ 1;
|
||
|
}
|
||
|
|
||
|
applyLimitSet(); // set limit options
|
||
|
}
|
||
|
|
||
|
event initialisedEventTwo(CALL_GAMEINIT)
|
||
|
{
|
||
|
|
||
|
playnum = 0;
|
||
|
while (playnum < 8)
|
||
|
{
|
||
|
count = 0;
|
||
|
while (count < numBaseRes)
|
||
|
{
|
||
|
enableResearch(baseRes[count], playnum);
|
||
|
count = count +1;
|
||
|
}
|
||
|
|
||
|
// enable cyborgs components that can't be enabled with research
|
||
|
// making cyborg templates stay unavailable for AI
|
||
|
makeComponentAvailable(CyborgSpade, playnum);
|
||
|
makeComponentAvailable(CyborgRepair, playnum);
|
||
|
|
||
|
if(multiPlayerBaseType == CAMP_CLEAN)
|
||
|
{
|
||
|
setPowerLevel(1300,playnum);
|
||
|
count = 0;
|
||
|
while (count < numCleanTech)
|
||
|
{
|
||
|
|
||
|
completeResearch(defTech[count], playnum);
|
||
|
count = count +1;
|
||
|
}
|
||
|
}
|
||
|
else if(multiPlayerBaseType == CAMP_BASE)
|
||
|
{
|
||
|
setPowerLevel(2500,playnum);
|
||
|
count = 0;
|
||
|
while (count < numBaseTech)
|
||
|
{
|
||
|
completeResearch(defTech[count], playnum);
|
||
|
count = count +1;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
|
||
|
setPowerLevel(2500,playnum);
|
||
|
count = 0;
|
||
|
while (count < numDefTech)
|
||
|
{
|
||
|
completeResearch(defTech[count], playnum);
|
||
|
count = count +1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
playnum = playnum+ 1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
// /////////////////////////////////////////////////////////////////
|
||
|
// END CONDITIONS
|
||
|
event checkEndConditions (endConditions)
|
||
|
{
|
||
|
// Losing Conditions
|
||
|
if( ( not anyDroidsLeft(selectedPlayer))
|
||
|
and ( not anyFactoriesLeft(selectedPlayer))
|
||
|
)
|
||
|
{
|
||
|
gameLost = TRUE;
|
||
|
|
||
|
/* If teams enabled check if all team members have lost */
|
||
|
if(multiPlayerGameType == SKIRMISH and multiPlayerAlliancesType == ALLIANCES_TEAMS)
|
||
|
{
|
||
|
playnum = 0;
|
||
|
while (playnum < multiPlayerMaxPlayers)
|
||
|
{
|
||
|
if((playnum != selectedPlayer)
|
||
|
and allianceExistsBetween(selectedPlayer , playnum))
|
||
|
{
|
||
|
if(anyDroidsLeft(playnum) or anyFactoriesLeft(playnum))
|
||
|
{
|
||
|
gameLost = FALSE; //someone from our team still alive
|
||
|
playnum = multiPlayerMaxPlayers; //jump out
|
||
|
}
|
||
|
}
|
||
|
playnum = playnum + 1;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
if(gameLost)
|
||
|
{
|
||
|
gameOverMessage(endMsg, MISS_MSG, 0, FALSE);
|
||
|
setEventTrigger(checkEndConditions, inactive);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Winning Conditions
|
||
|
gamewon = TRUE;
|
||
|
|
||
|
/* Skirmish */
|
||
|
if(multiPlayerGameType == SKIRMISH)
|
||
|
{
|
||
|
// check if all enemies defeated
|
||
|
playnum = 0;
|
||
|
while (playnum < multiPlayerMaxPlayers)
|
||
|
{
|
||
|
if((playnum != selectedPlayer)
|
||
|
and (not allianceExistsBetween(selectedPlayer , playnum)) //checking enemy player
|
||
|
)
|
||
|
{
|
||
|
if(anyDroidsLeft(playnum) or anyFactoriesLeft(playnum))
|
||
|
{
|
||
|
gamewon = FALSE; //one of the enemies still alive
|
||
|
playnum = multiPlayerMaxPlayers; //jump out
|
||
|
}
|
||
|
}
|
||
|
playnum = playnum + 1;
|
||
|
}
|
||
|
}
|
||
|
else /* All other game types */
|
||
|
{
|
||
|
// Check if all AIs were defeated
|
||
|
count = 0;
|
||
|
while (count < multiPlayerMaxPlayers)
|
||
|
{
|
||
|
if ( (count != selectedPlayer) and not(isHumanPlayer(count)) )
|
||
|
{
|
||
|
if( anyDroidsLeft(count) or anyFactoriesLeft(count) )
|
||
|
{
|
||
|
gamewon = FALSE; //some of the AIs still alive
|
||
|
}
|
||
|
}
|
||
|
count = count + 1;
|
||
|
}
|
||
|
|
||
|
if(gamewon == TRUE)
|
||
|
{
|
||
|
gamewon = FALSE;
|
||
|
if(dominatingAlliance()) //if all humans are allied
|
||
|
{
|
||
|
gamewon = TRUE;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(gamewon == TRUE)
|
||
|
{
|
||
|
gameOverMessage(winMsg, MISS_MSG, 0, TRUE);
|
||
|
setEventTrigger(checkEndConditions, inactive);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// /////////////////////////////////////////////////////////////////
|
||
|
// WARNING MESSAGES
|
||
|
// Base Under Attack
|
||
|
event baseHit(CALL_STRUCT_ATTACKED, selectedPlayer, ref hitStruc, ref attackerObj)
|
||
|
{
|
||
|
if (t >= 10)
|
||
|
{
|
||
|
t=0;
|
||
|
if (hitStruc != NULLOBJECT)
|
||
|
{
|
||
|
playSoundPos(attackSnd1, selectedPlayer, hitStruc.x, hitStruc.y, hitStruc.z); //show position if still alive
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
playSound(attackSnd1, selectedPlayer);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
event everySec(every, 10)
|
||
|
{
|
||
|
t=t+1;
|
||
|
}
|
||
|
|
||
|
//go to where the structure being attacked is on CTRL B
|
||
|
event seeBaseHit(CALL_MISSION_END)
|
||
|
{
|
||
|
if (hitStruc!=NULLOBJECT)
|
||
|
{
|
||
|
centreView(hitStruc);
|
||
|
t=0; //flag known about!
|
||
|
}
|
||
|
}
|
||
|
|