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