280 lines
7.0 KiB
Plaintext
280 lines
7.0 KiB
Plaintext
/* FastPlay Map Script for Player 7*/
|
|
|
|
/* General values */
|
|
public int player, player0;
|
|
public int power, player0Pow;
|
|
private int n; //keeps track of current factory
|
|
|
|
/* Factory values */
|
|
public int numFacts;
|
|
public STRUCTURE fact[3]; //must be same as numFacts
|
|
public STRUCTUREID factID[3];
|
|
public int assX[3], assY[3];
|
|
|
|
private STRUCTURE newDroidFactory;
|
|
|
|
/* Build Templates */
|
|
public TEMPLATE build[3]; //must be same as numFacts
|
|
|
|
|
|
//briefing
|
|
public INTMESSAGE briefMsg;
|
|
public SOUND briefSnd1, briefSnd2;
|
|
|
|
//bases
|
|
public INTMESSAGE enm1Msg;
|
|
public SOUND enm1Snd1;
|
|
public SOUND enm1Snd2;
|
|
|
|
public INTMESSAGE enm2Msg;
|
|
public SOUND enm2Snd1;
|
|
public SOUND enm2Snd2;
|
|
|
|
public INTMESSAGE enm3Msg;
|
|
public SOUND enm3Snd1;
|
|
public SOUND enm3Snd2;
|
|
|
|
/* structure limit stuff */
|
|
public STRUCTURESTAT factory, research, oilDerrick, powerGen, command;
|
|
public INT numPow, numExt, numFac, numRes, numCom;
|
|
|
|
/* starting tech for player0 */
|
|
public int numtecP0;
|
|
public RESEARCHSTAT tecP0[10];
|
|
private int count;
|
|
|
|
/* Win or lose */
|
|
public SOUND wonSnd;
|
|
public SOUND lostSnd;
|
|
private int bases;
|
|
|
|
// enemy1 variables
|
|
private GROUP enemy1Build, enemy1Attack, enemy1Dummy, grp[5];
|
|
private DROID newDroid;
|
|
|
|
/* Triggers */
|
|
trigger factTrig(every, 200); //new build every 20 seconds/FACTORY
|
|
|
|
/* Triggers: Enemy */
|
|
trigger enm1SeenTrig(droidHasSeen(fact[0], player0), 10);
|
|
trigger enm1DeadTrig((numStructsButNotWallsInArea(player, 2496, 192, 3904, 1472) == 0), 20);
|
|
|
|
trigger enm2SeenTrig(droidHasSeen(fact[1], player0), 10);
|
|
trigger enm2DeadTrig((numStructsButNotWallsInArea(player, 4800, 1472, 6464, 2752) == 0), 20);
|
|
|
|
trigger enm3SeenTrig(droidHasSeen(fact[2], player0), 10);
|
|
trigger enm3DeadTrig((numStructsButNotWallsInArea(player, 3904, 5440, 5312, 6336) == 0), 20);
|
|
|
|
trigger loseTrig(not anyDroidsLeft(player0), 5);
|
|
trigger winTrig(bases == 2, 5);
|
|
|
|
trigger nearObj(droidInRange(player0, 1728, 1216, 5*128),10);
|
|
|
|
trigger attackWait(every, 300);
|
|
|
|
|
|
/* Events */
|
|
event startup(CALL_GAMEINIT)
|
|
{
|
|
//set zoom Level 64x64
|
|
setRadarZoom(1);
|
|
//set scroll limits
|
|
setScrollParams(0, 0, 64, 64); //limit scroll
|
|
centreViewPos(1088, 6592); //centre at base
|
|
|
|
//set start powers
|
|
setPowerLevel(power, player); //set starting power
|
|
setPowerLevel(player0Pow, player0); //set starting power for player0
|
|
while (n < numFacts)
|
|
{
|
|
setAssemblyPoint (fact[n], assX[n], assY[n]); //set assembly points (can't do later in case the factories are dead!!!
|
|
n = n +1;
|
|
}
|
|
n = 0;
|
|
removeReticuleButton(DESIGN); //don't allow design, since no parts!
|
|
removeReticuleButton(RESEARCH);
|
|
removeReticuleButton(COMMAND);
|
|
//start music
|
|
playCDAudio(1);
|
|
|
|
//set structure limits
|
|
setStructureLimits (powerGen, numPow, player0);
|
|
setStructureLimits (oilDerrick, numExt, player0);
|
|
setStructureLimits (research, numRes, player0);
|
|
setStructureLimits (factory, numFac, player0);
|
|
setStructureLimits(command, numCom, player0);
|
|
//allow to build stuff
|
|
enableStructure(command, player0);
|
|
enableStructure(powerGen, player0);
|
|
enableStructure(oilDerrick, player0);
|
|
enableStructure(research, player0);
|
|
enableStructure(factory, player0);
|
|
|
|
//set starting tech for player
|
|
count = 0;
|
|
while (count < numtecP0)
|
|
{
|
|
completeResearch(tecP0[count], 0);
|
|
count = count +1;
|
|
}
|
|
|
|
groupAddArea(grp[0], player, 704, 4544, 1216, 4800);
|
|
groupAddArea(grp[1], player, 576, 4032, 1216, 4416);
|
|
groupAddArea(grp[2], player, 576, 3136, 1216, 4032);
|
|
groupAddArea(grp[3], player, 576, 1728, 1600, 4032);
|
|
groupAddArea(grp[4], player, 704, 704, 2112, 1728);
|
|
count = 0;
|
|
while (count < 5)
|
|
{
|
|
setGroupRetreatPoint(grp[count], assX[1], assY[1]); //retreat to 2nd base
|
|
setGroupRetreatForce(grp[count], 90); //set morale to 10%
|
|
setGroupRetreatLeadership(grp[count], 50); //set leadership chance (small=more likely?)
|
|
|
|
count = count +1;
|
|
}
|
|
count = 0;
|
|
}
|
|
|
|
//build list for all factories (n controls which!)
|
|
event factEvnt(factTrig) //try building every 10 seconds
|
|
{
|
|
if (not (buildingDestroyed (factID[n], player)))
|
|
{
|
|
if (structureIdle(fact[n]))
|
|
{
|
|
//build different template for each factory!!!!!!
|
|
buildDroid (build[n], fact[n], player, 1);
|
|
}
|
|
}
|
|
n = n +1;
|
|
if (n >= numFacts)
|
|
{
|
|
n = 0;
|
|
}
|
|
}
|
|
|
|
/* Events: Enemies */
|
|
event enm1DeadEvnt(inactive)
|
|
{
|
|
removeMessage(enm1Msg, PROX_MSG, player0);
|
|
playSound(enm1Snd2, player0);
|
|
bases = bases + 1;
|
|
setEventTrigger(enm1DeadEvnt, inactive);
|
|
}
|
|
|
|
event enm1SeenEvnt(enm1SeenTrig)
|
|
{
|
|
addMessage(enm1Msg, PROX_MSG, player0, false);
|
|
playSound(enm1Snd1, player0);
|
|
setEventTrigger(enm1DeadEvnt, enm1DeadTrig);
|
|
setEventTrigger(enm1SeenEvnt, inactive);
|
|
}
|
|
|
|
event enm2DeadEvnt(inactive) //base 2 dead?
|
|
{
|
|
removeMessage(enm2Msg, PROX_MSG, player0);
|
|
playSound(enm2Snd2, player0);
|
|
bases = bases + 1;
|
|
setEventTrigger(enm2DeadEvnt, inactive);
|
|
}
|
|
|
|
event enm2SeenEvnt(enm2SeenTrig) //base 2 seen
|
|
{
|
|
addMessage(enm2Msg, PROX_MSG, player0, false);
|
|
playSound(enm2Snd1, player0);
|
|
setEventTrigger(enm2DeadEvnt, enm2DeadTrig);
|
|
setEventTrigger(enm2SeenEvnt, inactive);
|
|
}
|
|
|
|
event enm3DeadEvnt(inactive) //base 3 dead?
|
|
{
|
|
removeMessage(enm3Msg, PROX_MSG, player0);
|
|
playSound(enm3Snd2, player0);
|
|
bases = bases + 1;
|
|
setEventTrigger(enm3DeadEvnt, inactive);
|
|
}
|
|
|
|
event enm3SeenEvnt(enm3SeenTrig) //base 3 seen
|
|
{
|
|
addMessage(enm3Msg, PROX_MSG, player0, false);
|
|
playSound(enm3Snd1, player0);
|
|
setEventTrigger(enm3DeadEvnt, enm3DeadTrig);
|
|
setEventTrigger(enm3SeenEvnt, inactive);
|
|
}
|
|
|
|
// deal with a droid being built by enemy1
|
|
event enemy1build(CALL_NEWDROID, player0, ref newDroid, ref newDroidFactory)
|
|
{
|
|
groupAddDroid(enemy1Build, newDroid);
|
|
if (enemy1Build.members >= 4)
|
|
{
|
|
groupAddGroup(enemy1Dummy, enemy1Attack); //clear attack group
|
|
groupAddGroup(enemy1Attack, enemy1Build);
|
|
//do attack force decision here
|
|
//set retreat point
|
|
setGroupRetreatPoint(enemy1Attack, assX[1], assY[1]); //retreat to 2nd base
|
|
setGroupRetreatForce(enemy1Attack, 90); //set morale to 10%
|
|
setGroupRetreatLeadership(enemy1Attack, 50); //set leadership chance (small=more likely?)
|
|
orderGroupLoc(enemy1Attack, DORDER_SCOUT, 1088, 6208); //attack player's base
|
|
}
|
|
}
|
|
|
|
event wonYetEvnt;
|
|
|
|
event lostYetEvnt(loseTrig)
|
|
{
|
|
if (not anyStructButWallsLeft(player0))
|
|
{
|
|
setEventTrigger(wonYetEvnt,inactive);
|
|
playSound(lostSnd,0);
|
|
pause(20);
|
|
gameOver(false);
|
|
setEventTrigger(lostYetEvnt, inactive);
|
|
}
|
|
}
|
|
|
|
event wonYetEvnt(winTrig) // have all enemies lost yet?
|
|
{
|
|
if (not anyDroidsLeft(player))
|
|
{
|
|
setEventTrigger(lostYetEvnt, inactive);
|
|
pause(20);
|
|
playSound(wonSnd,0);
|
|
pause(20);
|
|
gameOver(true);
|
|
setEventTrigger(wonYetEvnt, inactive);
|
|
}
|
|
}
|
|
|
|
event objective(wait, 10)
|
|
{
|
|
addMessage(briefMsg, PROX_MSG, player0, false);
|
|
playSound(briefSnd1, player0);
|
|
pause(30);
|
|
playSound(briefSnd2, player0);
|
|
setEventTrigger(objective, inactive);
|
|
|
|
}
|
|
|
|
event removeObj(nearObj)
|
|
{
|
|
removeMessage(briefMsg, PROX_MSG, player0);
|
|
setEventTrigger(removeObj, inactive);
|
|
|
|
}
|
|
|
|
event attackBase(wait, 50)
|
|
{
|
|
//get column to attack player's base if nothing else happens!
|
|
if (count > 4)
|
|
{
|
|
setEventTrigger(attackBase, inactive);
|
|
}
|
|
else
|
|
{
|
|
orderGroupLoc(grp[count], DORDER_SCOUT, 1088, 6208);
|
|
count = count + 1;
|
|
setEventTrigger(attackBase, attackWait);
|
|
}
|
|
}
|