// SCRIPT file for Cam 1-3 /* General Values */ public int player; public int enemy1; public int enemy2; private int numart; public int pow1, pow2, repLev; private STRUCTURE newDroidFactory; /* structure limit stuff */ public STRUCTURESTAT factory, research, oilDerrick, powerGen; //public STRUCTURESTAT powerModuleHack; public STRUCTURESTAT command; public INT numPow, numExt, numFac, numRes; /* Win or lose */ public SOUND lostSnd; public LEVEL NextLev; private GROUP allPlayer, nearLZ; private int totDroids; /* Base Under Attack Stuff */ private STRUCTURE hitStruc; private DROID hitDroid; private BASEOBJ attackerObj, attackedObj; private int t; public SOUND attackSnd1; /* Transport Entry/Exit coords */ public int entryX, entryY, exitX, exitY; /* Briefing stuff */ public INTMESSAGE MissionBrief; public INTMESSAGE NewParadigm_MSG1, NewParadigm_MSG2; public SOUND incomingSnd; public TEXTSTRING RetLZMsg; public INTMESSAGE endMsg; //, winMsg; /* LZ Message */ public INTMESSAGE LZ_MSG; public SOUND LZSnd, LZComp, LZClear, reinfSnd; public INTMESSAGE obj1,obj2,obj3,obj4; public INT ReinforceTime; private BOOL transOnMap; /* Proximity: Resources */ /* public FEATURE res1; public INTMESSAGE res1Msg; public SOUND res1Snd; public STRUCTURESTAT derrick; private int res1x,res1y; //temp values to cope with oil disappearing! */ /* Proximity: Artifacts */ public FEATURESTAT crate; public int art1X, art1Y; public STRUCTURE art1Get; public SOUND art1Snd2; //public INTMESSAGE art1Msg; public RESEARCHSTAT art1Comp; private FEATURE art1ID; public int art2X, art2Y; public STRUCTURE art2Get; public SOUND art2Snd2; //public INTMESSAGE art2Msg; public RESEARCHSTAT art2Comp; private FEATURE art2ID; public int art3X, art3Y; public STRUCTURE art3Get; public SOUND art3Snd2; //public INTMESSAGE art3Msg; public RESEARCHSTAT art3Comp; private FEATURE art3ID; public int art4X, art4Y; public STRUCTURE art4Get; public SOUND art4Snd2; //public INTMESSAGE art4Msg; public RESEARCHSTAT art4Comp; private FEATURE art4ID; /* player Bonus Research topics given at end of mission */ public int numResP0; public RESEARCHSTAT resP0[20]; //need to be declared with value >= numResP0, numResP1, etc. private INT count; /* Proximity: Enemy */ public STRUCTURE enm1; public STRUCTUREID enm1ID; public INTMESSAGE enm1Msg; public SOUND enm1Snd1; public SOUND enm1Snd2; public STRUCTURE enm2; public STRUCTUREID enm2ID; public INTMESSAGE enm2Msg; public SOUND enm2Snd1; public SOUND enm2Snd2; /* AI STUFF */ // enemy1 variables private GROUP enemy1Build, enemy1Attack, enemy1Start, enemy1Fin, enemy1Force1, enemy1Force2; private GROUP enemy2Build, enemy2Attack, enemy2Start, enemy2Fin, enemy1Guard, enemy2Guard; private GROUP enemy1West, enemy1North, enemy1South, enemy1Hill, enemy1Scout; private GROUP enemy1Defend, enemy2Defend; private GROUP scout1, strike1, strike2; private INT tempx1, tempx2, tempy1, tempy2; /* public INT rBlkX,rBlkY; public INT oilPatchX,oilPatchY; public INT playerX,playerY; private BOOL oilWellClear; */ private STRUCTURE attackedStruct; private BASEOBJ attacker; // temporary variables private DROID newDroid; private INT moveX,moveY; private INT xdiff,ydiff; private INT ld; //default leadership for enemy2 /* values for build lists start here */ /* General Values */ public int enemy1Tot; //limit build to this number public int enemy2Tot; //limit build to this number /* Enemy Tactics */ public TEMPLATE trike; public TEMPLATE buggy; public TEMPLATE bloke; public TEMPLATE jeep; public TEMPLATE rktJeep; public TEMPLATE rktBuggy; public TEMPLATE BugRktP, BugHMG, ScorpMCan; public DROID scoutDroid; /* enemy1 */ public int enm1Ass1X, enm1Ass1Y; public int enm1Ret1X, enm1Ret1Y; public int enm1Ret2X, enm1Ret2Y; private int enm1Fact1State; private bool enm1Fact1Destroyed; /* enemy2 */ public int enm2Ass1X, enm2Ass1Y, enm2Ass2X, enm2Ass2Y; public int enm2Ret1X, enm2Ret1Y; public int enm2Ret2X, enm2Ret2Y; private int enm2Fact1State, enm2Fact2State; private bool enm2Fact1Destroyed, enm2Fact2Destroyed; /* Sectors to check */ /* public int numBaseSects; public int baseSectX1[8], baseSectY1[8], baseSectX2[8], baseSectY2[8]; */ public int numAtk1Sects; public int atk1SectX1[6], atk1SectY1[6], atk1SectX2[6], atk1SectY2[6]; private int bs, bs1, bsX, bsY, randNum; private int as, as1, asX, asY, scoutSector; /* Starting Technology */ public int numtecE1, numtecE2; public RESEARCHSTAT tecE1[2], tecE2[3]; /* repair stuff */ private GROUP scout1Rep, enemy2GuardRep; /* Triggers: Win or Lose */ trigger winLoseTrig(every, 5); trigger gameLostTrig(every, 20); /* Triggers: Briefing */ trigger vidEndTrig(CALL_VIDEO_QUIT); trigger obj1Trig(droidInRange(player, 448, 6592, 5*128), 20); trigger obj2Trig(droidInRange(player, 7616, 7744, 5*128), 20); trigger obj3Trig(droidInRange(player, 5312, 704, 5*128), 20); trigger obj4Trig(droidInRange(player, 6848, 3008, 5*128), 20); /* Triggers: Resource */ /* trigger res1SeenTrig(droidHasSeen(res1, player), 10); trigger res1UsedTrig(every, 10); */ /* Triggers: Artifacts */ //trigger art1SeenTrig(droidHasSeen(art1ID, player), 5); trigger art1TakeTrig(droidInRange(player, art1X, art1Y, 171), 5); trigger art1PlaceTrig((art1Get==NULLOBJECT), 5); //trigger art2SeenTrig(droidHasSeen(art2ID, player), 5); trigger art2TakeTrig(droidInRange(player, art2X, art2Y, 171), 5); trigger art2PlaceTrig((art2Get==NULLOBJECT), 5); //trigger art3SeenTrig(droidHasSeen(art3ID, player), 5); trigger art3TakeTrig(droidInRange(player, art3X, art3Y, 171), 5); trigger art3PlaceTrig((art3Get==NULLOBJECT), 5); //trigger art4SeenTrig(droidHasSeen(art4ID, player), 5); trigger art4TakeTrig(droidInRange(player, art4X, art4Y, 171), 5); trigger art4PlaceTrig((art4Get==NULLOBJECT), 5); /* Triggers: Enemy */ //trigger enm1SeenTrig(droidHasSeen(enm1, player), 10); //enmWait //trigger enm1DeadTrig(every, 10); //enmWait trigger enm1SeenTrig(seenStructInArea(player, enemy1, FALSE, 4416, 4032, 6208, 5184), 10); trigger enm1DeadTrig(numStructsButNotWallsInArea(enemy1, 4416, 4032, 6208, 5184) == 0, 20); //trigger enm2SeenTrig(droidInRange(player, 6592, 1856, 1280),10); //enmWait //trigger enm2DeadTrig(every, 10); //enmWait trigger enm2SeenTrig(seenStructInArea(player, enemy2, FALSE, 5440, 64, 8000, 3136), 10); trigger enm2DeadTrig(numStructsButNotWallsInArea(enemy2, 5440, 64, 8000, 3136) == 0, 20); trigger goGetTrig(wait, 600); //wait 1 min before launching attack anyway! //LZ contains enemies? trigger LZNoGoTrig((objectInArea(enemy1, 64, 64, 1344, 1344)) or (objectInArea(enemy2, 64, 64, 1344, 1344)), 35); //LZ clear of enemies? trigger LZ_OKTrig((not objectInArea(enemy1, 64, 64, 1344, 1344)) and (not objectInArea(enemy2, 64, 64, 1344, 1344)), 35); /* AI TRIGGERS */ trigger scoutSeenTrig(every, 7); trigger enemy1AttackPause( every, 3000 ); //5 mins /* triggers for build lists start here */ /* Triggers: Enemy Tactics */ trigger enm1Start1Trig(droidInRange(player,4544, 4288, 15*128),20); trigger enm1Fact1Trig(every,400); //used to be 300, slowed for difficulty trigger enm2Start1Trig(droidInRange(player,6848, 2880, 5*128),10); trigger enm2Fact1Trig(every,600); //used to be 500, slowed for difficulty //trigger enm2Fact2Trig(every,500); //trigger convoyTrig(droidInRange(player, enm1.x, enm1.y, 2000),10); trigger convNorthTrig(droidInArea(player, 4416, 64, 5952, 1728), 10); trigger convSouthTrig(droidInArea(player, 5824, 6080, 8000, 8000), 10); trigger convWestTrig(droidInArea(player, 192, 5568, 2368, 7488), 10); trigger scoutTrig(every, 50); trigger heavyTrig(every, 70); /* Events: Start */ event LZNoGo; event LZ_OK; /* event removeObj1; event removeObj2; event removeObj3; event removeObj4; */ event startEvnt(CALL_GAMEINIT) { //centreView(enm1); //temporary solution for thin maps centreViewPos(5*128, 5*128); //make scavengers and New paradigm allies createAlliance(enemy1, enemy2); //set scroll limits // setScrollParams(0, 0, 64, 64); //limit scroll //set zoom Level 64x64 setRadarZoom(1); //set landing zone setLandingZone(4,4,6,6); //call in transport flyTransporterIn(player, entryX, entryY, false); setTransporterExit(player, exitX, exitY); //make sure all buttons available/unavailable //removeReticuleButton(DESIGN); //removeReticuleButton(BUILD); addMessage(MissionBrief, MISS_MSG, 0, false); flashOff(INTELMAP); //set up resource coords (since oil pools diappear when built on!!!) //res1x=res1.x; //res1y=res1.y; setPowerLevel(pow1, enemy1); setPowerLevel(pow2, enemy2); //Blip Given at start addMessage(obj1, PROX_MSG, player, false); //addMessage(obj2, PROX_MSG, player, false); //addMessage(obj3, PROX_MSG, player, false); //addMessage(obj4, PROX_MSG, player, false); setEventTrigger(startEvnt, inactive); //allow to build stuff setStructureLimits (powerGen,numPow,0); setStructureLimits (oilDerrick,numExt,0); setStructureLimits (research,numRes,0); setStructureLimits (factory,numFac,0); setStructureLimits(command, 0, player); enableStructure(command, player); enableStructure(powerGen,0); enableStructure(oilDerrick,0); enableStructure(research,0); enableStructure(factory,0); //enableStructure(powerModuleHack, 0); //set transport time setReinforcementTime(-1); //not available at start //setReinforcementTime(ReinforceTime); //delay before warning message pause(30); //message from New Paradigm //need Warning message here!!!! playSound(incomingSnd, player); pause(20); addMessage(NewParadigm_MSG1, MISS_MSG, 0, true); } /*Events: */ /* Events: Artifacts */ event art1TakeEvnt(inactive) { numart=numart+1; //playSound(art1Snd2, player); playSoundPos(art1Snd2, player, art1ID.x, art1ID.y, art1ID.z); destroyFeature(art1ID); //removeMessage(art1Msg, PROX_MSG, player); enableResearch(art1Comp, player); setEventTrigger(art1TakeEvnt, inactive); } event art1PlaceEvnt(art1PlaceTrig) { //place artifact crate, and allow check for prox art1ID=addFeature(crate, art1X, art1Y); //setEventTrigger(art1SeenEvnt, art1SeenTrig); setEventTrigger(art1TakeEvnt, art1TakeTrig); setEventTrigger(art1PlaceEvnt, inactive); } event art2TakeEvnt(inactive) { numart=numart+1; //playSound(art2Snd2, player); playSoundPos(art2Snd2, player, art2ID.x, art2ID.y, art2ID.z); destroyFeature(art2ID); //removeMessage(art2Msg, PROX_MSG, player); enableResearch(art2Comp, player); setEventTrigger(art2TakeEvnt, inactive); } event art2PlaceEvnt(art2PlaceTrig) { //place artifact crate, and allow check for prox art2ID=addFeature(crate, art2X, art2Y); //setEventTrigger(art2SeenEvnt, art2SeenTrig); setEventTrigger(art2TakeEvnt, art2TakeTrig); setEventTrigger(art2PlaceEvnt, inactive); } event art3TakeEvnt(inactive) { numart=numart+1; //playSound(art3Snd2, player); playSoundPos(art3Snd2, player, art3ID.x, art3ID.y, art3ID.z); destroyFeature(art3ID); //removeMessage(art3Msg, PROX_MSG, player); enableResearch(art3Comp, player); setEventTrigger(art3TakeEvnt, inactive); } event art3PlaceEvnt(art3PlaceTrig) { //place artifact crate, and allow check for prox art3ID=addFeature(crate, art3X, art3Y); //setEventTrigger(art3SeenEvnt, art3SeenTrig); setEventTrigger(art3TakeEvnt, art3TakeTrig); setEventTrigger(art3PlaceEvnt, inactive); } event art4TakeEvnt(inactive) { numart=numart+1; //playSound(art4Snd2, player); playSoundPos(art4Snd2, player, art4ID.x, art4ID.y, art4ID.z); destroyFeature(art4ID); //removeMessage(art4Msg, PROX_MSG, player); enableResearch(art4Comp, player); setEventTrigger(art4TakeEvnt, inactive); } event art4PlaceEvnt(art4PlaceTrig) { //place artifact crate, and allow check for prox art4ID=addFeature(crate, art4X, art4Y); //setEventTrigger(art4SeenEvnt, art4SeenTrig); setEventTrigger(art4TakeEvnt, art4TakeTrig); setEventTrigger(art4PlaceEvnt, inactive); } /* Events: Enemies */ event enm1DeadEvnt(inactive) { killStructsInArea(enemy1, REF_WALL, 4416, 4032, 6208, 5184, TRUE, TRUE); //remove walls and features in base killStructsInArea(enemy1, REF_WALLCORNER, 4416, 4032, 6208, 5184, TRUE, FALSE); //remove corner walls in base removeMessage(enm1Msg, PROX_MSG, player); //playSound(enm1Snd2, player); playSoundPos(enm1Snd2, player, 5376, 4544, 0); setEventTrigger(enm1DeadEvnt, inactive); } event enm1SeenEvnt(enm1SeenTrig) { addMessage(enm1Msg, PROX_MSG, player, false); //playSound(enm1Snd1, player); playSoundPos(enm1Snd1, player, 5376, 4544, 0); //allow reinforcements now base found setReinforcementTime(ReinforceTime); playSound(reinfSnd, player); //setup checks for LZ setEventTrigger(LZNoGo, LZNoGoTrig); //setEventTrigger(LZ_OK,LZ_OKTrig); setEventTrigger(enm1DeadEvnt, enm1DeadTrig); setEventTrigger(enm1SeenEvnt, inactive); } event enm2DeadEvnt(inactive) { killStructsInArea(enemy2, REF_WALL, 5440, 64, 8000, 3136, TRUE, TRUE); //remove walls and features in base killStructsInArea(enemy2, REF_WALLCORNER, 5440, 64, 8000, 3136, TRUE, FALSE); //remove corner walls in base removeMessage(enm2Msg, PROX_MSG, player); //playSound(enm2Snd2, player); playSoundPos(enm2Snd2, player, 6592, 1856, 0); setEventTrigger(enm2DeadEvnt, inactive); } event enm2SeenEvnt(enm2SeenTrig) //base 2 seen { addMessage(enm2Msg, PROX_MSG, player, false); //playSound(enm2Snd1, player); playSoundPos(enm2Snd1, player, 6592, 1856, 0); //allow reinforcements now base found setReinforcementTime(ReinforceTime); //setup checks for LZ setEventTrigger(LZNoGo, LZNoGoTrig); //setEventTrigger(LZ_OK,LZ_OKTrig); setEventTrigger(enm2DeadEvnt, enm2DeadTrig); setEventTrigger(enm2SeenEvnt, inactive); } event wonYetEvnt; //event wonYetLZEvnt; event timeUp; /* Events: Win or Lose */ event nextLevEvnt(inactive) //assumes victory already checked { flushConsoleMessages(); pause(20); //increased to allow all audio before won // give bonus research (if req'd) count = 0; while (count < numResP0) { enableResearch(resP0[count], 0); count = count +1; } gameLevel=gameLevel+1; //flag next part of map //setLandingZone(10, 51, 12, 53); //enable research enableResearch(art1Comp, player); enableResearch(art2Comp, player); enableResearch(art3Comp, player); enableResearch(art4Comp, player); //removeMessage(MissionBrief, MISS_MSG, player); startMission(CAMP_EXPAND, NextLev); //End game here for now! (don't try next mission) //gameOver(true); setEventTrigger(nextLevEvnt, inactive); } event gameLost(inactive) { // addMessage(endMsg, MISS_MSG, 0, true); // pause(10); // gameOver(false); gameOverMessage(endMsg, MISS_MSG, 0, false); setEventTrigger(gameLost, inactive); } event lostYetEvnt(winLoseTrig) { if (not anyDroidsLeft(player)) { if (not anyStructButWallsLeft(player)) { setEventTrigger(wonYetEvnt,inactive); //setEventTrigger(wonYetLZEvnt, inactive); setEventTrigger(timeUp, inactive); setEventTrigger(gameLost, gameLostTrig); //waits 2 seconds before ending setEventTrigger(lostYetEvnt, inactive); } } } //out of time? event timeUp(CALL_MISSION_TIME) { setEventTrigger(wonYetEvnt,inactive); //setEventTrigger(wonYetLZEvnt, inactive); setEventTrigger(lostYetEvnt,inactive); setEventTrigger(gameLost, gameLostTrig); //waits 2 seconds before ending setEventTrigger(timeUp, inactive); } event wonYetEvnt(winLoseTrig) // have all enemies lost yet? { if (not anyDroidsLeft(enemy2)) { if (not anyStructButWallsLeft(enemy2)) { /* Don't bother with killing all scavs if (not anyDroidsLeft(enemy1)) { if (not anyStructButWallsLeft(enemy1)) { */ if (numart==4) // a victory condition { setEventTrigger(lostYetEvnt, inactive); setEventTrigger(timeUp, inactive); setEventTrigger(nextLevEvnt, winLoseTrig); setEventTrigger(wonYetEvnt, inactive); //setEventTrigger(wonYetLZEvnt, inactive); } /* } } */ } } } /* No getting to LZ now (kill all NP) event wonYetLZEvnt(winLoseTrig) //alternate victory condition, got artifact(s) and back at LZ { totDroids = numDroidsInArea(player, 0, 0, 64*128, 64*128); if (totDroids == numDroidsInArea(player, 1*128, 1*128, 10*128, 10*128)) { if (totDroids!=0) { if (numart==4) { setEventTrigger(lostYetEvnt, inactive); setEventTrigger(timeUp, inactive); setEventTrigger(nextLevEvnt, winLoseTrig); setEventTrigger(wonYetEvnt, inactive); setEventTrigger(wonYetLZEvnt, inactive); } } } } */ event cheatEvnt(CALL_MISSION_START) //cheat button ctrl M { setEventTrigger(nextLevEvnt, winLoseTrig); setEventTrigger(cheatEvnt, inactive); } /* Base Under Attack */ event baseHit(CALL_STRUCT_ATTACKED, selectedPlayer, ref hitStruc, ref attackerObj) { if (t >= 20) { 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; } event seeBaseHit(CALL_MISSION_END) { //go to where the structure being attacked is on CTRL B if (hitStruc!=NULLOBJECT) { centreView(hitStruc); t=0; //flag known about! } } /* event retLZ(winLoseTrig) { if (numart==4) { //add LZ blip and WAV message addMessage(LZ_MSG, PROX_MSG, player, false); addConsoleText(RetLZMsg, player); //playSound(LZSnd, player); playSoundPos(LZSnd, player, 704, 704, 0); setEventTrigger(retLZ, inactive); } } */ event removeObj1(obj1Trig) { removeMessage(obj1, PROX_MSG, player); //addMessage(obj2, PROX_MSG, player, false); //playSound(enm1Snd1, player); //setEventTrigger(removeObj2, obj2Trig); setEventTrigger(removeObj1, inactive); } /* event removeObj2(inactive) { removeMessage(obj2, PROX_MSG, player); addMessage(obj3, PROX_MSG, player, false); playSound(enm1Snd1, player); //now allow reinforcements (may want extra briefing?) setReinforcementTime(ReinforceTime); setEventTrigger(removeObj3, obj3Trig); setEventTrigger(removeObj2, inactive); } event removeObj3(inactive) { removeMessage(obj3, PROX_MSG, player); addMessage(obj4, PROX_MSG, player, false); playSound(enm1Snd1, player); setEventTrigger(removeObj4, obj4Trig); setEventTrigger(removeObj3, inactive); } event removeObj4(inactive) { removeMessage(obj4, PROX_MSG, player); setEventTrigger(removeObj4, inactive); } */ /* AI EVENTS */ // event prototypes //event enemy1AttackBase; event scavHit; event enemy1NConvoy; event enemy1WConvoy; event enemy1SConvoy; event heavySector; event scoutAtkSector; event startup(CALL_GAMEINIT) { //setass here since factory may be dead if done later!!! setAssemblyPoint (enm1, enm1Ass1X, enm1Ass1Y); setAssemblyPoint (enm2, enm2Ass1X, enm2Ass1Y); //setAssemblyPoint (enm22, enm2Ass2X, enm2Ass2Y); //set up of positions now done in VLO //make scavengers allies createAlliance(enemy1, enemy2); // whether the oil well has been cleared //oilWellClear = FALSE; //set starting power setPowerLevel(200,enemy1); setPowerLevel(200,enemy2); ld=75; //enemy2 leadership (change to higher when fixed!) //make up starting forces groupAddArea(enemy1West, enemy1, 704, 6336, 1344, 6848); // 128, 6144, 2048, 7040); groupAddArea(enemy1Scout, enemy1, 576, 6336, 832, 6848); groupAddArea(enemy1North, enemy1, 4928, 448, 5824, 1728); //4800, 192, 5824, 3008); groupAddArea(enemy1South, enemy1, 6464, 6976, 7616, 7872); //6400, 6784, 7680, 7808); groupAddArea(enemy1Hill, enemy1, 4096, 4224, 4480, 4480); setGroupSecondary(enemy1Hill, DSO_HALTTYPE, DSS_HALT_HOLD); //hold position //groupAddArea(enemy1Force1, enemy1, 4288, 9024, 5568, 9920); //groupAddArea(enemy1Force2, enemy1, 1600, 10048, 2624, 10816); groupAddArea(scout1, enemy2, 6336, 1984, 6848, 2240); groupAddArea(enemy2Guard, enemy2, 6720, 1600, 7232, 1984); //set retreat point setRetreatPoint(enemy1, enm1Ret1X, enm1Ret1Y); //retreat to road block setRetreatForce(enemy1, 90); //set morale to 10% setRetreatLeadership(enemy1, 50); //set leadership chance (small=more likely?) //set retreat point enemy2 setRetreatPoint(enemy2, enm2Ret1X, enm2Ret1Y); //retreat to base2 setRetreatForce(enemy2, 75); //set morale to 25% setRetreatLeadership(enemy2, ld); //set leadership chance (small=more likely?) // player specific technology startups count = 0; while (count < numtecE1) { completeResearch(tecE1[count], enemy1); count = count +1; } count = 0; while (count < numtecE2) { completeResearch(tecE2[count], enemy2); count = count +1; } } // deal with a droid being built by enemy1 event enemy1build(CALL_NEWDROID, enemy1, ref newDroid, ref newDroidFactory) { groupAddDroid(enemy1Build, newDroid); if (enemy1Build.members >= 4) { groupAddGroup(enemy1Attack, enemy1Build); //do attack force decision here } } // deal with a droid being built by enemy2 event enemy2build(CALL_NEWDROID, enemy2, ref newDroid,ref newDroidFactory) { if (enemy2Guard.members < 6) { groupAddDroid(enemy2Guard, newDroid); } if ((scout1.members < 4) and (enm2Fact1State > 0)) //RktP or HMG { groupAddDroid(scout1, newDroid); setGroupRetreatForce(scout1, 80); //set morale to 10% setGroupRetreatLeadership(scout1, 0); //set leadership chance (small=more likely?) setGroupRetreatPoint(scout1, enm2Ret1X, enm2Ret1Y); //retreat to base2 } else if ((strike1.members < 6) and (enm2Fact1State == 0)) //MCan { groupAddDroid(strike1, newDroid); } else if (strike2.members < 6) { groupAddDroid(strike2, newDroid); } else { groupAddDroid(enemy2Build, newDroid); randNum = random(10); if ((enemy2Build.members >= 4) and (randNum < 5)) { groupAddGroup(strike1, enemy2Build); } else if ((enemy2Build.members >= 4) and (randNum >= 5)) { groupAddGroup(strike2, enemy2Build); } } } /* events for build lists start here */ /* Enemy 1 */ //build list event enm1Fact1Evnt(inactive) { enm1Fact1Destroyed = buildingDestroyed (enm1ID, enemy1); if (enm1Fact1Destroyed) { setEventTrigger(enm1Fact1Evnt, inactive); } else if (structureIdle(enm1) and (enemy1Build.members+enemy1Attack.members)= 4)) { /* messing up groups too much! tempx1=hitStruc.x - 1280; tempy1=hitStruc.y - 1280; tempx2=hitStruc.x+1280; tempy2=hitStruc.y+1280; groupAddArea(enemy2Guard, enemy2, tempx1, tempy1, tempx2, tempy2); */ orderGroupLoc(enemy2Guard, DORDER_SCOUT, attackerObj.x, attackerObj.y); } if (attackerObj!=NULLOBJECT) { tempx1=attackerObj.x - 1280; tempy1=attackerObj.y - 1280; tempx2=attackerObj.x+1280; tempy2=attackerObj.y+1280; groupAddArea(enemy1Guard, enemy1, tempx1, tempy1, tempx2, tempy2); orderGroupLoc(enemy1Guard, DORDER_SCOUT, attackerObj.x, attackerObj.y); } } //Sector seek and destroy stuff event scoutAtkSector(inactive) { //check all attack areas for enemy as1 = scoutSector; if (not (objectInArea(player, atk1SectX1[as1], atk1SectY1[as1], atk1SectX2[as1], atk1SectY2[as1]))) { //sector clear so use as a retreat point setGroupRetreatPoint(scout1, scout1.x, scout1.y); //setGroupRetreatPoint(scout2, scout2.x, scout2.y); //sector clear so choose another scoutSector = scoutSector + 1; //keep track of frontline if (scoutSector >= numAtk1Sects) { //out of sectors! scoutSector = scoutSector - 1; } } //put repaired scout1 droids back in group! initIterateGroup(scout1Rep); count = 0; while (count < scout1Rep.members) { hitDroid = iterateGroup(scout1Rep); if (hitDroid.health >= 99) { //go back to group (don't wait for new order) orderDroidLoc(hitDroid, DORDER_SCOUT, scout1.x, scout1.y); groupAddDroid(scout1, hitDroid); } count = count + 1; } setGroupSecondary(scout1, DSO_REPAIR_LEVEL, DSS_REPLEV_LOW); //set repair level as1 = scoutSector; if (idleGroup(scout1) > scout1.members / 2) { //order scout forces to random position in this sector asX = atk1SectX1[as1] + random(atk1SectX2[as1] - atk1SectX1[as1]); asY = atk1SectY1[as1] + random(atk1SectY2[as1] - atk1SectY1[as1]); orderGroupLoc(scout1, DORDER_SCOUT, asX, asY); } /* asX = atk1SectX1[as1] + random(atk1SectX2[as1] - atk1SectX1[as1]); asY = atk1SectY1[as1] + random(atk1SectY2[as1] - atk1SectY1[as1]); orderGroupLoc(scout2, DORDER_SCOUT, asX, asY); */ //also want to set previous sector as retreat point! } event heavySector(inactive) { //order Heavies to previous scouted sector if (idleGroup(strike1) > strike1.members / 2) { as1 = scoutSector; asX = atk1SectX1[as1] + random(atk1SectX2[as1] - atk1SectX1[as1]); asY = atk1SectY1[as1] + random(atk1SectY2[as1] - atk1SectY1[as1]); orderGroupLoc(strike1, DORDER_SCOUT, asX, asY); } /* NO IDFs, so ignore //order IDFs to previous sector if (as1 > 0) { as1 = as1 - 1; asX = atk1SectX1[as1] + random(atk1SectX2[as1] - atk1SectX1[as1]); asY = atk1SectY1[as1] + random(atk1SectY2[as1] - atk1SectY1[as1]); orderGroupLoc(IDF1, DORDER_SCOUT, asX, asY); asX = atk1SectX1[as1] + random(atk1SectX2[as1] - atk1SectX1[as1]); asY = atk1SectY1[as1] + random(atk1SectY2[as1] - atk1SectY1[as1]); orderGroupLoc(IDF2, DORDER_SCOUT, asX, asY); } */ //send random attack force if (idleGroup(strike2) > strike2.members / 2) { as1 = random(numAtk1Sects); asX = atk1SectX1[as1] + random(atk1SectX2[as1] - atk1SectX1[as1]); asY = atk1SectY1[as1] + random(atk1SectY2[as1] - atk1SectY1[as1]); orderGroupLoc(strike2, DORDER_SCOUT, asX, asY); } //put repaired droids back in group! initIterateGroup(enemy2GuardRep); count = 0; while (count < enemy2GuardRep.members) { hitDroid = iterateGroup(enemy2GuardRep); if (hitDroid.health >= 99) { //go back to group (don't wait for new order) orderDroidLoc(hitDroid, DORDER_SCOUT, enemy2Guard.x, enemy2Guard.y); groupAddDroid(enemy2Guard, hitDroid); } count = count + 1; } setGroupSecondary(enemy2Guard, DSO_REPAIR_LEVEL, DSS_REPLEV_LOW); //set repair level (medium damage) //if guard force not busy, go home if ((idleGroup(enemy2Guard) > enemy2Guard.members / 2) or (enemy2Guard.members < 3)) { orderGroupLoc(enemy2Guard, DORDER_SCOUT, 6208, 1984); //6848, 3264); } } event checkRepair(every, 20) { //don't bother if already 4+ in queue if ((enemy2GuardRep.members + scout1Rep.members) <= 4) { //enemy2Guard repair initIterateGroup(enemy2Guard); count = 0; while (count < enemy2Guard.members) { hitDroid = iterateGroup(enemy2Guard); if (hitDroid.order == DORDER_RTR) //if (hitDroid.health <= repLev) { orderDroid(hitDroid, DORDER_RTR); groupAddDroid(enemy2GuardRep, hitDroid); } count = count + 1; } //scout1 repair initIterateGroup(scout1); count = 0; while (count < scout1.members) { hitDroid = iterateGroup(scout1); if (hitDroid.order == DORDER_RTR) //if (hitDroid.health <= repLev) { orderDroid(hitDroid, DORDER_RTR); groupAddDroid(scout1Rep, hitDroid); } count = count + 1; } } } event goGet(goGetTrig) { //send scavenger scouts to player LZ after delay! orderGroupLoc(enemy1Scout, DORDER_SCOUT, 6*128, 6*128); /* setEventTrigger(enm2Fact1Evnt, enm2Fact1Trig); //setEventTrigger(enm2Fact2Evnt, enm2Fact2Trig); setEventTrigger(scoutAtkSector, scoutTrig); setEventTrigger(heavySector, heavyTrig); */ setEventTrigger(goGet, inactive); } event LZNoGo(inactive) { if (not transOnMap) //make sure transport not already landing! { //check LZ area for enemy structures and/or vehicles (in Trigger) //playSound(LZComp, player); //"LZ Compromised" playSoundPos(LZComp, player, 704, 704, 0); //disable transport landing setReinforcementTime(LZ_COMPROMISED_TIME); //(set to 1 hour) //allow check for clear! setEventTrigger(LZ_OK,LZ_OKTrig); setEventTrigger(LZNoGo, inactive); } } event LZ_OK(inactive) { //check LZ area clear of enemy structures and/or vehicles (in Trigger) //playSound(LZClear, player); //"LZ Clear" playSoundPos(LZClear, player, 704, 704, 0); //allow reinforcements now LZ clear setReinforcementTime(ReinforceTime); //(set back to normal) setEventTrigger(LZNoGo, LZNoGoTrig); setEventTrigger(LZ_OK, inactive); } event scoutSeenEvnt(scoutSeenTrig) { //make NP scout vehicle return to NP base when player sees him. if (scoutDroid != NULLOBJECT) { if (droidHasSeen(scoutDroid, player)) { orderDroidLoc(scoutDroid, DORDER_MOVE, enm2Ret1X, enm2Ret1Y); setEventTrigger(scoutSeenEvnt, inactive); } } else { setEventTrigger(scoutSeenEvnt, inactive); } } event transOn(CALL_TRANSPORTER_REINFORCE) { transOnMap = TRUE; } event transOff(CALL_TRANSPORTER_OFFMAP, player) { transOnMap = FALSE; }