001package com.fs.starfarer.api.impl.campaign.missions.askonia;
002
003import java.awt.Color;
004import java.util.List;
005import java.util.Map;
006
007import org.lwjgl.util.vector.Vector2f;
008
009import com.fs.starfarer.api.Global;
010import com.fs.starfarer.api.campaign.BattleAPI;
011import com.fs.starfarer.api.campaign.CampaignFleetAPI;
012import com.fs.starfarer.api.campaign.CargoAPI;
013import com.fs.starfarer.api.campaign.CargoAPI.CargoItemType;
014import com.fs.starfarer.api.campaign.ai.ModularFleetAIAPI;
015import com.fs.starfarer.api.campaign.CargoStackAPI;
016import com.fs.starfarer.api.campaign.FleetAssignment;
017import com.fs.starfarer.api.campaign.InteractionDialogAPI;
018import com.fs.starfarer.api.campaign.SectorEntityToken;
019import com.fs.starfarer.api.campaign.StarSystemAPI;
020import com.fs.starfarer.api.campaign.econ.MarketAPI;
021import com.fs.starfarer.api.campaign.rules.MemoryAPI;
022import com.fs.starfarer.api.characters.AbilityPlugin;
023import com.fs.starfarer.api.characters.PersonAPI;
024import com.fs.starfarer.api.combat.ShipVariantAPI;
025import com.fs.starfarer.api.fleet.FleetMemberAPI;
026import com.fs.starfarer.api.fleet.FleetMemberType;
027import com.fs.starfarer.api.impl.campaign.ids.Abilities;
028import com.fs.starfarer.api.impl.campaign.ids.Commodities;
029import com.fs.starfarer.api.impl.campaign.ids.Factions;
030import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
031import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
032import com.fs.starfarer.api.impl.campaign.ids.People;
033import com.fs.starfarer.api.impl.campaign.ids.Ranks;
034import com.fs.starfarer.api.impl.campaign.missions.academy.GATransverseJump.Stage;
035import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithSearch;
036import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetQuality;
037import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetSize;
038import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerNum;
039import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerQuality;
040import com.fs.starfarer.api.impl.campaign.procgen.StarSystemGenerator;
041import com.fs.starfarer.api.impl.campaign.procgen.themes.SalvageSpecialAssigner;
042import com.fs.starfarer.api.impl.campaign.rulecmd.AddRemoveCommodity;
043import com.fs.starfarer.api.impl.campaign.rulecmd.AddShip;
044import com.fs.starfarer.api.impl.campaign.terrain.DebrisFieldTerrainPlugin.DebrisFieldParams;
045import com.fs.starfarer.api.impl.campaign.terrain.DebrisFieldTerrainPlugin.DebrisFieldSource;
046import com.fs.starfarer.api.ui.TooltipMakerAPI;
047import com.fs.starfarer.api.util.Misc;
048import com.fs.starfarer.api.util.Misc.Token;
049
050public class TheUsurpers extends HubMissionWithSearch {
051
052        public static float EXTACT_AGENT_RAID_DIFFICULTY = 200f;
053        
054        public static enum Stage {
055                MEET_RAM,
056                INTERCEPT_FLEET,
057                MEET_HYDER,
058                RETURN_TO_MACARIO,
059                EXTRACT_AGENT,
060                MEET_CADEN,
061                AGAIN_WTH_MACARIO,
062                EMERGENCY_INTERCEPT,
063                DELIVER_NEWS,
064                COMPLETED,
065        }
066        
067        protected PersonAPI ram;
068        protected PersonAPI hyder;
069        protected PersonAPI caden;
070        protected PersonAPI macario;
071        protected PersonAPI patrolSecond;
072
073        protected MarketAPI umbra;
074        protected MarketAPI sindria;
075        protected MarketAPI volturn;
076        
077        protected SectorEntityToken debris;
078        
079        //public static float MISSION_DAYS = 120f;
080        
081        protected int marineLosses;
082        protected int marineLossesMin;
083        protected int marineLossesMax;
084        
085        protected int xpRewardLow;
086        protected int xpRewardMedium;
087        protected int xpRewardHigh;
088        
089        @Override
090        protected boolean create(MarketAPI createdAt, boolean barEvent) {
091                // if already accepted by the player, abort
092                if (!setGlobalReference("$sdtu_ref", "$sdtu_inProgress")) {
093                        return false;
094                }
095                
096                setPersonOverride(null);
097                
098                ram = getImportantPerson(People.RAM);
099                if (ram == null) return false;
100                
101                hyder = getImportantPerson(People.HYDER);
102                if (hyder == null) return false;
103                
104                caden = getImportantPerson(People.CADEN);
105                if (caden == null) return false;
106                
107                macario = getImportantPerson(People.MACARIO);
108                if (macario == null) return false;
109                
110                
111                umbra =getMarket("umbra");
112                if (umbra == null) return false;
113                if (!umbra.getFactionId().equals("pirates")) return false;
114                
115                volturn = getMarket("volturn");
116                if (volturn == null) return false;
117                if (!volturn.getFactionId().equals("sindrian_diktat")) return false;
118                
119                sindria = getMarket("sindria");
120                if (sindria == null) return false;
121                if (!sindria.getFactionId().equals("sindrian_diktat")) return false;
122                
123                
124                
125                setStoryMission();
126                setStartingStage(Stage.MEET_RAM);
127                addSuccessStages(Stage.COMPLETED);
128                
129                marineLossesMax = 4;
130                marineLossesMin = 1;
131                marineLosses = marineLossesMin + genRandom.nextInt(marineLossesMax - marineLossesMin + 1);
132                
133                xpRewardLow = 2000;
134                xpRewardMedium = 5000;
135                xpRewardHigh = 12000;
136                
137                //payment = 10000;
138                //paymentHigh = 17000;
139                
140                patrolSecond = Global.getSector().getFaction(Factions.DIKTAT).createRandomPerson(genRandom);
141                patrolSecond.setRankId(Ranks.SPACE_LIEUTENANT);
142                patrolSecond.setPostId(Ranks.POST_FLEET_COMMANDER);
143                
144                
145                makeImportant(volturn, "$sdtu_meetRamOnVolturn", Stage.MEET_RAM);
146                makeImportant(hyder, "$sdtu_meetHyder", Stage.MEET_HYDER);
147                makeImportant(macario, "$sdtu_didHyderMeeting", Stage.RETURN_TO_MACARIO);
148                makeImportant(umbra, "$sdtu_extractAgent", Stage.EXTRACT_AGENT);
149                makeImportant(caden, "$sdtu_meetCaden", Stage.MEET_CADEN);
150                makeImportant(macario, "$sdtu_didCadenMeeting", Stage.AGAIN_WTH_MACARIO);
151                // debris field is made important in Action
152                makeImportant(macario, "$sdtu_deliverNews", Stage.DELIVER_NEWS);
153                
154                connectWithGlobalFlag(Stage.MEET_RAM, Stage.INTERCEPT_FLEET, "$sdtu_interceptFleet");
155                connectWithGlobalFlag(Stage.INTERCEPT_FLEET, Stage.MEET_HYDER, "$sdtu_meetHyder");
156                connectWithGlobalFlag(Stage.MEET_HYDER, Stage.RETURN_TO_MACARIO, "$sdtu_reportToMacario1");
157                connectWithGlobalFlag(Stage.RETURN_TO_MACARIO, Stage.EXTRACT_AGENT, "$sdtu_extractAgent");
158                connectWithGlobalFlag(Stage.EXTRACT_AGENT, Stage.MEET_CADEN, "$sdtu_meetCaden");
159                connectWithGlobalFlag(Stage.MEET_CADEN, Stage.AGAIN_WTH_MACARIO, "$sdtu_reportToMacario2");
160                connectWithGlobalFlag(Stage.AGAIN_WTH_MACARIO, Stage.EMERGENCY_INTERCEPT, "$sdtu_emergencyIntercept");
161                connectWithGlobalFlag(Stage.EMERGENCY_INTERCEPT, Stage.DELIVER_NEWS, "$sdtu_deliverNews");
162
163                setStageOnGlobalFlag(Stage.COMPLETED, "$sdtu_completed");
164                
165                setRepFactionChangesNone();
166                setRepPersonChangesNone();
167                
168                
169                // Diktat patrol with "traitor" officer for player to intercept.
170                beginStageTrigger(Stage.INTERCEPT_FLEET);
171                triggerCreateFleet(FleetSize.SMALL, FleetQuality.DEFAULT, Factions.DIKTAT, FleetTypes.PATROL_MEDIUM, sindria.getStarSystem());
172                triggerMakeNonHostile();
173                triggerMakeNoRepImpact();
174                triggerMakeFleetIgnoredByOtherFleets();
175                triggerMakeFleetIgnoreOtherFleetsExceptPlayer();
176                triggerMakeFleetIgnoreOtherFleetsExceptPlayer(); // don't go chasing others, please.
177                triggerPickLocationAroundEntity(volturn.getPlanetEntity(), 800f);
178                triggerSetFleetMissionRef("$sdtu_ref"); // so they can be made unimportant
179                triggerFleetMakeImportant(null, Stage.INTERCEPT_FLEET);
180                triggerFleetAddDefeatTrigger("sdtuPatrolDefeated");
181                triggerSaveGlobalFleetRef("$sdtu_traitorPatrol"); 
182                triggerSetPatrol();
183                triggerOrderFleetPatrol(sindria.getStarSystem());
184                triggerSpawnFleetAtPickedLocation("$sdtu_interceptFleet", null);
185                
186                endTrigger();
187                
188                // Pirate/ANTIs fleet to distract player on approach to Umbra; otherwise irrelevant to plot.
189                beginStageTrigger(Stage.EXTRACT_AGENT); 
190                triggerCreateFleet(FleetSize.LARGE, FleetQuality.DEFAULT, Factions.PIRATES, FleetTypes.PATROL_MEDIUM, umbra.getPlanetEntity());
191                triggerFleetSetName("ARC Raider Flotilla");
192                triggerSetFleetFaction(Factions.PIRATES);
193        triggerAutoAdjustFleetStrengthMajor();
194        triggerSetStandardAggroPirateFlags();
195       // triggerFleetAllowLongPursuit(); // they're not *that* dedicated
196        triggerPickLocationTowardsPlayer(umbra.getPlanetEntity(), 90f, getUnits(0.25f));
197        triggerPickLocationAroundEntity(umbra.getPlanetEntity(), 200f);
198        triggerSpawnFleetAtPickedLocation("$sdtu_antisFleet", null);
199        triggerSetFleetMissionRef("$sdtu_ref");
200        endTrigger();
201                
202                // Pirate/ANTIs fleet to distract player when leaving Umbra; otherwise irrelevant to plot.
203                beginStageTrigger(Stage.MEET_CADEN);
204                triggerCreateFleet(FleetSize.LARGER, FleetQuality.DEFAULT, Factions.PIRATES, FleetTypes.PATROL_LARGE, umbra.getPlanetEntity());
205                triggerFleetSetName("ARC Raider Patrol");
206                triggerSetFleetFaction(Factions.PIRATES);
207        triggerAutoAdjustFleetStrengthMajor();
208        triggerSetStandardAggroPirateFlags();
209        //triggerFleetAllowLongPursuit();
210        triggerPickLocationAroundEntity(umbra.getPlanetEntity(), 500f);
211        triggerSpawnFleetAtPickedLocation("$sdtu_antisRevengeFleet", null);
212        triggerSetFleetMissionRef("$sdtu_ref");
213        endTrigger();
214                
215                // I guess you can go nuts once this is done, even though it isn't quite done, is it.
216                beginStageTrigger(Stage.COMPLETED);
217                triggerSetGlobalMemoryValue("$sdtu_missionCompleted", true);
218                triggerMakeNonStoryCritical(volturn, umbra, sindria);
219                endTrigger();
220                
221                return true;
222        }
223        
224        protected void updateInteractionDataImpl() {
225                set("$sdtu_stage", getCurrentStage());
226                set("$sdtu_extractAgentRaidDifficulty", EXTACT_AGENT_RAID_DIFFICULTY);
227                set("$sdtu_marineLosses", marineLosses);
228                set("$sdtu_patrolSecond", patrolSecond);
229                //set("$sdtu_patrolFleet", diktatPatrolFleet)
230                //set("$sdtu_payment", Misc.getWithDGS(payment));
231                //set("$sdtu_paymentHigh", Misc.getWithDGS(paymentHigh));
232                set("$sdtu_xpRewardLow", xpRewardLow);
233                set("$sdtu_xpRewardMedium", xpRewardMedium);
234                set("$sdtu_xpRewardHigh", xpRewardHigh);
235        }
236
237        @Override
238        protected boolean callAction(String action, String ruleId, final InteractionDialogAPI dialog,
239                                                                 List<Token> params, final Map<String, MemoryAPI> memoryMap) {
240//              if ("THEDUEL".equals(action)) {
241//                      TextPanelAPI text = dialog.getTextPanel();
242//                      text.setFontOrbitronUnnecessarilyLarge();
243//                      Color color = Misc.getBasePlayerColor();
244//                      color = Global.getSector().getFaction(Factions.HEGEMONY).getBaseUIColor();
245//                      text.addPara("THE DUEL", color);
246//                      text.setFontInsignia();
247//                      text.addImage("misc", "THEDUEL");
248//                      return true;
249//              }
250                
251                if ("spawnDebris".equals(action)) {
252                        StarSystemAPI system = sindria.getStarSystem();
253                        DebrisFieldParams p = new DebrisFieldParams(
254                                        150f, // field radius - should not go above 1000 for performance reasons
255                                        -1f, // density, visual - affects number of debris pieces
256                                        10000000f, // duration in days 
257                                        0f); // days the field will keep generating glowing pieces
258                        p.source = DebrisFieldSource.MIXED;
259                        p.baseSalvageXP = 500; // base XP for scavenging in field
260                        debris = Misc.addDebrisField(system, p, StarSystemGenerator.random);
261                        SalvageSpecialAssigner.assignSpecialForDebrisField(debris);
262                        debris.getMemoryWithoutUpdate().set("$sdtuAgentDebris", true);
263                        
264                        List<SectorEntityToken> jumpPoints = system.getJumpPoints();
265                        debris.setCircularOrbit(jumpPoints.get(jumpPoints.size()-1), 90, 200, 100);
266
267                        
268                        Misc.makeImportant(debris, getMissionId());
269                        
270                        // Merc who blew away the agent.
271                beginStageTrigger(Stage.EMERGENCY_INTERCEPT);
272                        triggerCreateFleet(FleetSize.MEDIUM, FleetQuality.VERY_HIGH, Factions.MERCENARY, FleetTypes.MERC_PRIVATEER, system);
273                        triggerSetFleetFaction(Factions.INDEPENDENT);
274                        triggerFleetSetName("Mercenary Bounty Hunter");
275                        triggerSetFleetOfficers(OfficerNum.MORE, OfficerQuality.HIGHER);
276                        triggerMakeHostileAndAggressive();
277                        triggerMakeNoRepImpact();
278                        //triggerFleetAllowLongPursuit();
279                        //triggerSetFleetAlwaysPursue();
280                        triggerPickLocationAroundEntity(debris, 500f);
281                        triggerSpawnFleetAtPickedLocation("$sdtu_merc", null);
282                        triggerOrderFleetPatrol(true, debris);
283                        endTrigger();
284                        
285                        return true;
286                } else if ("makeDerbisUnimportant".equals(action)) {
287                        // need to probably store the debris in a member variable to get to it here
288                        if (debris != null)
289                        {
290                                Misc.makeUnimportant(debris, getMissionId());
291                        }
292                        return true;
293                }
294                else if ("shootEm".equals(action))
295                {
296                        Global.getSoundPlayer().playSound("storyevent_diktat_execution", 1, 1, Global.getSoundPlayer().getListenerPos(), new Vector2f());
297                        return true;
298                }
299                else if ("endMusic".equals(action))
300                {
301                        Global.getSoundPlayer().setSuspendDefaultMusicPlayback(true);
302                        Global.getSoundPlayer().pauseMusic();
303                        //Global.getSoundPlayer().restartCurrentMusic();
304                        return true;
305                }
306                else if ("playMusicMacario".equals(action))
307                {
308                        Global.getSoundPlayer().playCustomMusic(1, 1, "music_diktat_market_hostile", true);
309                        return true;
310                }
311                else if ("playMusicCaden".equals(action))
312                {
313                        Global.getSoundPlayer().playCustomMusic(1, 1, "music_diktat_encounter_hostile", true);
314                        return true;
315                }
316                else if ("playMusicHyder".equals(action))
317                {
318                        Global.getSoundPlayer().playCustomMusic(1, 1, "music_diktat_encounter_friendly", true);
319                        return true;
320                } 
321                else if ("playMusicSons".equals(action))
322                {
323                        Global.getSoundPlayer().playCustomMusic(1, 1, "music_diktat_market_friendly", true);
324                        return true;
325                } 
326                else if ("resumeMusic".equals(action))
327                {
328                        Global.getSoundPlayer().setSuspendDefaultMusicPlayback(false);
329                        Global.getSoundPlayer().restartCurrentMusic();
330                        return true;
331                }
332                else if ("giveKineticBlasters".equals(action)) {
333                        CargoAPI cargo = Global.getSector().getPlayerFleet().getCargo();
334                        cargo.addWeapons("kineticblaster", 3);
335                        CargoStackAPI stack = Global.getFactory().createCargoStack(CargoItemType.RESOURCES, Commodities.SHIP_WEAPONS, cargo);
336                        AddRemoveCommodity.addStackGainText(stack, dialog.getTextPanel());
337                        return true;
338                }
339                else if ("giveGigacannon".equals(action)) {
340                        CargoAPI cargo = Global.getSector().getPlayerFleet().getCargo();
341                        cargo.addWeapons("gigacannon", 2);
342                        CargoStackAPI stack = Global.getFactory().createCargoStack(CargoItemType.RESOURCES, Commodities.SHIP_WEAPONS, cargo);
343                        AddRemoveCommodity.addStackGainText(stack, dialog.getTextPanel());
344                        return true;
345                }
346                else if ("giveExecutor".equals(action)){
347                    String variantId = "executor_Hull";
348                        ShipVariantAPI variant = Global.getSettings().getVariant(variantId).clone();
349                        FleetMemberAPI member = Global.getFactory().createFleetMember(FleetMemberType.SHIP, variant);
350                        Global.getSector().getPlayerFleet().getFleetData().addFleetMember(member);
351                        AddShip.addShipGainText(member, dialog.getTextPanel()); 
352                        return true;
353                }
354                else if ("replacePatrolLeader".equals(action)) {
355
356                        /*for (CampaignFleetAPI fleet : volturn.getStarSystem().getFleets()) {
357                                if (fleet.getMemoryWithoutUpdate().contains("$sdtu_interceptFleet")) {
358                                        fleet.setCommander(patrolSecond);
359                                }
360                        }*/
361                        CampaignFleetAPI fleet = (CampaignFleetAPI)dialog.getInteractionTarget();
362                        fleet.setCommander(patrolSecond);
363                        fleet.getAI().addAssignmentAtStart(FleetAssignment.STANDING_DOWN, fleet, 0.5f + 0.5f * (float) Math.random(), null);
364                        //dialog.getInteractionTarget().setActivePerson(patrolSecond);
365                        
366                        CampaignFleetAPI pf = Global.getSector().getPlayerFleet();
367                        BattleAPI b = pf.getBattle();
368                        if (b != null) {
369                                b.leave(pf, false);
370                                //b.finish(null);
371                        }
372                        
373                        //fleet.setNoEngaging(3f); // not needed
374                        return true;
375                }
376                else if ("tryMakeHyderImportant".equals(action)){
377                        for (CampaignFleetAPI fleet : volturn.getStarSystem().getFleets()) {
378                                if (fleet.getName().equals("Askonia System Defense Armada")){
379                                        Misc.makeImportant(fleet, "$sdtu_ref");
380                                }
381                        }
382                        return true;
383                }
384                else if ("tryMakeHyderUnimportant".equals(action)){
385                        for (CampaignFleetAPI fleet : volturn.getStarSystem().getFleets()) {
386                                if (fleet.getName().equals("Askonia System Defense Armada")){
387                                        Misc.makeUnimportant(fleet, "$sdtu_ref");
388                                }
389                        }
390                        return true;
391                }
392                else if ("tryMakeCadenImportant".equals(action)){
393                        for (CampaignFleetAPI fleet : volturn.getStarSystem().getFleets()) {
394                                if (fleet.getName().equals("Lion's Guard Grand Armada")){
395                                        Misc.makeImportant(fleet, "$sdtu_ref");
396                                }
397                        }
398                        return true;
399                }
400                else if ("tryMakeCadenUnimportant".equals(action)){
401                        for (CampaignFleetAPI fleet : volturn.getStarSystem().getFleets()) {
402                                if (fleet.getName().equals("Lion's Guard Grand Armada")){
403                                        Misc.makeUnimportant(fleet, "$sdtu_ref");
404                                }
405                        }
406                        return true;
407                }
408                else if ("makeMercHostile".equals(action)){
409                        for (CampaignFleetAPI fleet : volturn.getStarSystem().getFleets()) {
410                                if (fleet.getMemoryWithoutUpdate().contains("$sdtu_merc")){
411                                        //Misc.makeUnimportant(fleet, "$sdtu_ref");
412                                        fleet.getMemoryWithoutUpdate().set(MemFlags.MEMORY_KEY_ALLOW_LONG_PURSUIT, true);
413                                        //fleet.getMemoryWithoutUpdate().set("$ignorePlayerCommRequests", true);
414                                        Misc.makeHostile(fleet);
415                                        
416                                        AbilityPlugin eb = fleet.getAbility(Abilities.EMERGENCY_BURN);
417                                        if (eb != null && eb.isUsable()) eb.activate();
418                                }
419                        }
420                        return true;
421                        
422                }
423                
424                
425                return super.callAction(action, ruleId, dialog, params, memoryMap);
426        }
427
428        @Override
429        public void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height) {
430                float opad = 10f;
431                Color h = Misc.getHighlightColor();
432                
433                //info.addImage(robed_man.getPortraitSprite(), width, 128, opad);
434                
435                if (currentStage == Stage.MEET_RAM) {
436                        info.addPara("Meet Yannick Ram at his safehouse on Volturn. He has a plan to save the Sindrian Diktat from itself.", opad);
437                        addStandardMarketDesc("Ram gave you coordinates to his safehouse " + volturn.getOnOrAt(), volturn, info, opad);
438                }
439                else if (currentStage == Stage.INTERCEPT_FLEET) {
440                        info.addPara("Find and intercept a Sindrian Diktat patrol fleet led by the 'treasonous' officer. It can be found in the Askonia system.", opad);
441                }
442                else if (currentStage == Stage.MEET_HYDER) {
443                        info.addPara("Use the 'treasonous' officer as leverage to gain access to Deputy Star Marshal Hyder. She can be found in command of the Askonia System Defense Armada, a large warfleet patrolling the Askonia star system.", opad);
444                }
445                else if (currentStage == Stage.RETURN_TO_MACARIO) {
446                        info.addPara("Report back to Macario about your conversation with Hyder.", opad);
447                        addStandardMarketDesc("Chief High Inspector-General Macario is based " + sindria.getOnOrAt(), sindria, info, opad);
448                }
449                else if (currentStage == Stage.EXTRACT_AGENT) {
450                        info.addPara("Extract a known double-agent who, while working for Horacio Caden, has betrayed the Sindrian Diktat.", opad);
451                        addStandardMarketDesc("The 'treasonous' double-agent is based " + umbra.getOnOrAt(), umbra, info, opad);
452                }
453                else if (currentStage == Stage.MEET_CADEN) {
454                        info.addPara("Use the 'treasonous' agent as leverage to gain access to Guard High Lieutenant-Executor Caden. He can be found in command of the Lion's Guard Grand Armada, a large warfleet patrolling the Askonia star system.", opad);
455                }
456                else if (currentStage == Stage.AGAIN_WTH_MACARIO) {
457                        info.addPara("Report back to Macario about your conversation with Caden.", opad);
458                        addStandardMarketDesc("Chief High Inspector-General Macario is based " + sindria.getOnOrAt(), sindria, info, opad);
459                }
460                else if (currentStage == Stage.EMERGENCY_INTERCEPT) {
461                        info.addPara("Intercept and assist or capture Macario's agent at the Fringe Jump-point of Askonia.", opad);
462                }
463                else if (currentStage == Stage.DELIVER_NEWS) {
464                        info.addPara("Report back to Macario with news of his agent's demise.", opad);
465                }
466        }
467
468        @Override
469        public boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad) {
470                Color h = Misc.getHighlightColor();
471                if (currentStage == Stage.MEET_RAM) {
472                        info.addPara("Meet Yannick Ram at his safehouse on Volturn.", tc, pad);
473                        return true;
474                }
475                if (currentStage == Stage.INTERCEPT_FLEET) {
476                        info.addPara("Intercept the traitor's patrol fleet in the Askonia system.", tc, pad);
477                        return true;
478                }
479                else if (currentStage == Stage.MEET_HYDER) {
480                        info.addPara("Speak with Oxana Hyder. She commands the Askonia System Defense Armada.", tc, pad);
481                        return true;
482                }
483                else if (currentStage == Stage.RETURN_TO_MACARIO) {
484                        info.addPara("Talk to Macario, on Sindria, about Hyder.", tc, pad);
485                        return true;
486                }
487                else if (currentStage == Stage.EXTRACT_AGENT) {
488                        info.addPara("Extract the double agent from Umbra.", tc, pad);
489                        return true;
490                }
491                else if (currentStage == Stage.MEET_CADEN) {
492                        info.addPara("Speak with Horacio Caden. He commands the Lion's Guard Grand Armada.", tc, pad);
493                        return true;
494                }
495                else if (currentStage == Stage.AGAIN_WTH_MACARIO) {
496                        info.addPara("Talk to Macario, on Sindria, about Caden.", tc, pad);
497                        return true;
498                }
499                else if (currentStage == Stage.EMERGENCY_INTERCEPT) {
500                        info.addPara("Intercept Macario's agent at the given location.", tc, pad);
501                        return true;
502                }
503                else if (currentStage == Stage.DELIVER_NEWS) {
504                        info.addPara("Return to Macario, on Sindria, with news of his agent's death.", tc, pad);
505                        return true;
506                }
507                return false;
508        }
509
510        @Override
511        public String getBaseName() {
512                return "The Usurpers";
513        }
514
515        @Override
516        public String getPostfixForState() {
517                if (startingStage != null) {
518                        return "";
519                }
520                return super.getPostfixForState();
521        }
522}
523
524
525
526
527