//SLO file for LasSat firing //on cam3A-D //Nexus DOESN'T hold back for 5 mins yet! (need to communicate between scripts) //a hack for this would be placing a unit for player X in region and using this as a trigger in the generic script //no countdown sequence yet either! //also doesn't check for Nexus destroying the missile silo as a mission fail (ID changes when taken over) //will need to check player has a certain type of structure //cam3A_DX.SLO /* ******************** */ /* Declared Variables */ /* ******************** */ public int player, enemy, capRange; public TEXTSTRING failed_msg; public WEAPON lasSat; private STRUCTURE silo[3]; //Missile silo object public STRUCTURESTAT testStat, siloStat; public INTMESSAGE brief, brief2, resMsg[4]; public SOUND failedSnd, warnSatSnd; private int uplinkX[3], uplinkY[3], tempX, tempY, temp; private int lasX1, lasX2, lasY1, lasY2, yMax, chance, timeLimit; //private STRUCTURE target; private BASEOBJ target; private BOOL flag; private int numTargets, targets[13], res; //player research topics for missile codes public RESEARCHSTAT playerRes[4]; private int count, uplinkPlayer; private RESEARCHSTAT researchDone; private GROUP grpGroup[1]; private DROID droid; private STRUCTURE testStruc; trigger clearMessageTrig(wait, 100); //10 second delay trigger nexusGoTrig(wait, 2950); //wait 5 mins (- 5secs) after warning trigger captureDeadTrig(((silo[0] == NULLOBJECT) and (silo[1] == NULLOBJECT) and (silo[2] == NULLOBJECT)), 17); trigger resDoneTrig(CALL_RESEARCHCOMPLETED, ref researchDone); //use playerRes[res] to check against what's been completed //trigger for research completed trigger missileLaunchTrig(wait, 20); //play launch sequence trigger fireLasSatTrig(wait, 100); //every 10 seconds trigger fireLasSatTrig2(wait, 150); //every 15 seconds trigger fireLasSatTrig3(wait, 200); //every 20 seconds trigger fireLasSatTrig4(wait, 250); //every 25 seconds trigger moveSatTrig(every, 318); //every 31.8 seconds (1hr 8min to cover 3AD) event fireLasSat; event resDone; event missileLaunch; event start(CALL_GAMEINIT) { //don't let player see 3B anymore setScrollMinY(126); //setScrollParams(0, 64, 58, 256); //need to give player research for NEXUS intruder program res = 0; //keeps track of research to test done enableResearch(playerRes[res], player); lasX1 = 64; //set LasSat area limits (change later) lasY1 = 16000; //3A and B lasX2 = 8000; lasY2 = 16384; chance = 50; //starting chance to hit %age //allow LasSats to hit gamma base yMax = 32576; //allow 3AD!! //24576; //setup target types numTargets = 13; //use wall more than anything else so picks more often targets[0] = ST_HQ; //ST_WALL targets[1] = ST_FACTORY; targets[2] = ST_POWER_GEN; targets[3] = ST_RESOURCE_EXTRACTOR; targets[4] = ST_WALL; targets[5] = ST_RESEARCH; targets[6] = ST_REPAIR_FACILITY; targets[7] = ST_COMMAND_CONTROL; targets[8] = ST_CYBORG_FACTORY; targets[9] = ST_VTOL_FACTORY; //ST_WALL targets[10] = ST_REARM_PAD; targets[11] = ST_SENSOR; targets[12] = ST_DEF_ALL; } event nukeEm(wait, 5) { //need to nuke all player structures in 3AB count = 0; while (count < 20) { killStructsInArea(player, count, 0, 0, 8128, 16384, FALSE, FALSE); count = count + 1; } //need to nuke all player units in 3AB killDroidsInArea(0,0,8128, 16384, player); } //to check if player no longer has the silos event captureDeadEvnt(inactive) { //don't allow win setEventTrigger(resDone, inactive); setEventTrigger(missileLaunch, inactive); //need to play audio if possible addConsoleText(failed_msg, player); playSound(failedSnd, player); pause(20); extraFailFlag = TRUE; setEventTrigger(captureDeadEvnt, inactive); } event allowLose(wait, 20) { //need to find missile silos belonging to Player //they need to be of a type not used by anything else initEnumStruct(FALSE, siloStat, player, player); testStruc = enumStruct(); count = 0; while ((testStruc != NULLOBJECT) and (count < 3)) { silo[count] = testStruc; //found silo!!! //playSound(failedSnd, player); count = count + 1; testStruc = enumStruct(); } setEventTrigger(captureDeadEvnt, captureDeadTrig); } event clearMessage(inactive) { flushConsoleMessages(); setEventTrigger(clearMessage, inactive); } event nexusGo(nexusGoTrig) //wait 5mins { //start Nexus forces attacking when time is up //give player warning addMessage(brief2, MISS_MSG, 0, true); //set timelimit setMissionTime(timeLimit); //Start Las Sat firing //setEventTrigger(fireLasSat, fireLasSatTrig); } event missileLaunch(inactive) { //either done here or as part of win sequence? //may want countdown here... extraVictoryFlag = TRUE; //only when player done all research //addMessage(winMsg, MISS_MSG, 0, true); setEventTrigger(fireLasSat, inactive); } event resDone(resDoneTrig) { //play research done messages (4 in all) //check that the research completed is the one we are interested in if (researchDone == playerRes[res]) { if (res < 3) { addMessage(resMsg[res], MISS_MSG, 0, true); res = res + 1; //enable the next research topic enableResearch(playerRes[res], player); } else if (res >= 3) { addMessage(resMsg[res], MISS_MSG, 0, true); setEventTrigger(missileLaunch, missileLaunchTrig); setEventTrigger(resDone, inactive); } } } event fireLasSat(fireLasSatTrig) { //find a target in area resetStructTargets(); setStructTarPref(targets[random(numTargets)]); //pick random target type preference //setStructTarPref(targets[4]); //pick walls to check target = structTargetInArea(player, -1, lasX1, lasY1, lasX2, lasY2); //if no structures to hit go for Droids if (target == NULLOBJECT) { resetDroidTargets(); target = droidTargetInArea(player, -1, lasX1, lasY1, lasX2, lasY2); } if (target != NULLOBJECT) { if (random(100) < chance) { tempX = target.x; //store for audio message later tempY = target.y; //hit target fireWeaponAtObj(lasSat, target); } else { //try to just miss target //use pickStructLocation tempX = target.x - 512 + random(1024); //slight randomisation for better effect tempY = target.y - 512 + random(1024); flag = pickStructLocation(testStat, ref tempX, ref tempY,player); if (flag) { tempX = tempX - 64 + random(128); //randomise result a bit more tempY = tempY - 64 + random(128); fireWeaponAtLoc(lasSat, tempX, tempY); } //if can't miss, then hit close by anyway! else { //pick random coords (hopefully miss!) tempX = target.x - 512 + random(1024); //slight randomisation for better effect tempY = target.y - 512 + random(1024); fireWeaponAtLoc(lasSat, tempX, tempY); } } } else { //pick random coords (hopefully miss!) tempX = lasX1 + random(lasX2 - lasX1); tempY = lasY1 + random(lasY2 - lasY1); fireWeaponAtLoc(lasSat, tempX, tempY); } //warn player that lassat has fired! if (random(100) < 50) { playSoundPos(warnSatSnd, selectedPlayer, tempX, tempY, 0); //warn player!! } //set random time for next firing temp = random(4); if (temp == 0) { setEventTrigger(fireLasSat, fireLasSatTrig); } else if (temp == 1) { setEventTrigger(fireLasSat, fireLasSatTrig2); } else if (temp == 2) { setEventTrigger(fireLasSat, fireLasSatTrig3); } else { setEventTrigger(fireLasSat, fireLasSatTrig4); } } event moveSat(moveSatTrig) { if (lasY2 < yMax) { lasY2 = lasY2 + 128; //add another tile to limit, so creeps into 3A in 10 mins //lasY1 = lasY1 + 64; //add another 1/2 tile to limit, so stops targetting north so much } }