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