warzone2100/data/script/fastplay/fastplay.slo

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);
}
}