61 protected boolean create(MarketAPI createdAt,
boolean barEvent) {
63 if (!setGlobalReference(
"$gaFC_ref",
"$gaFC_inProgress")) {
67 setName(
"Finding Coureuse");
69 MarketAPI laicaille =
Global.
getSector().getEconomy().getMarket(
"laicaille_habitat");
70 MarketAPI kapteyn =
Global.
getSector().getEconomy().getMarket(
"station_kapteyn");
71 MarketAPI fikenhild =
Global.
getSector().getEconomy().getMarket(
"fikenhild");
72 if (laicaille ==
null || kapteyn ==
null || fikenhild ==
null)
return false;
74 baird = getImportantPerson(People.BAIRD);
75 arroyo = getImportantPerson(People.ARROYO);
76 coureuse = getImportantPerson(People.COUREUSE);
77 siyavong = getImportantPerson(People.SIYAVONG);
78 zal = getImportantPerson(People.ZAL);
100 requireSystemTags(ReqMode.ANY, Tags.THEME_MISC, Tags.THEME_MISC_SKIP, Tags.THEME_RUINS);
101 requireSystemTags(ReqMode.NOT_ANY, Tags.THEME_UNSAFE, Tags.THEME_CORE, Tags.SYSTEM_ALREADY_USED_FOR_STORY);
102 requireSystemNotAlreadyUsedForStory();
103 requireSystemNotHasPulsar();
104 preferSystemOnFringeOfSector();
105 preferSystemUnexplored();
106 preferSystemInDirectionOfOtherMissions();
114 SectorEntityToken probe1 = spawnEntity(Entities.GENERIC_PROBE,
new LocData(EntityLocationType.HIDDEN,
null,
probeSystem));
115 SectorEntityToken probe2 = spawnEntity(Entities.GENERIC_PROBE,
new LocData(EntityLocationType.HIDDEN_NOT_NEAR_STAR,
null,
probeSystem));
116 SectorEntityToken probe3 = spawnEntity(Entities.GENERIC_PROBE,
new LocData(EntityLocationType.UNCOMMON,
null,
probeSystem));
118 if (probe1 ==
null || probe2 ==
null || probe3 ==
null)
return false;
120 probe1.setCustomDescriptionId(
"ga_hyperprobe");
121 probe2.setCustomDescriptionId(
"ga_hyperprobe");
122 probe3.setCustomDescriptionId(
"ga_hyperprobe");
125 WeightedRandomPicker<SectorEntityToken> picker =
new WeightedRandomPicker<SectorEntityToken>(genRandom);
126 picker.add(probe1, 1f);
127 picker.add(probe2, 1f);
128 picker.add(probe3, 1f);
129 picker.pick().addTag(
"empty");
140 bribeCost = genRoundNumber(15000, 25000);
147 setStartingStage(Stage.CHOOSE_PATH);
148 addSuccessStages(Stage.COMPLETED);
154 makeImportant(fikenhild,
"$gaFC_coureuseInvestigation", Stage.INVESTIGATE_FIKENHILD);
155 makeImportant(probe1,
"$gaFC_probe", Stage.FOLLOW_THE_EXPERIMENTS);
156 makeImportant(probe2,
"$gaFC_probe", Stage.FOLLOW_THE_EXPERIMENTS);
157 makeImportant(probe3,
"$gaFC_probe", Stage.FOLLOW_THE_EXPERIMENTS);
167 makeImportant(
laicailleArchon,
"$gaFC_confront", Stage.CONFRONT_ARCHON);
168 makeImportant(laicaille,
"$gaFC_safehouse", Stage.VISIT_COUREUSE);
169 makeImportant(
baird.getMarket(),
"$gaFC_returnHere", Stage.RETURN_TO_ACADEMY);
172 setStageOnGlobalFlag(Stage.INVESTIGATE_FIKENHILD,
"$gaFC_pickedBranchFikenhild");
173 setStageOnGlobalFlag(Stage.FOLLOW_THE_EXPERIMENTS,
"$gaFC_pickedBranchProbes");
174 setStageOnGlobalFlag(Stage.SEARCH_ISIRAH,
"$gaFC_searchIsirah");
175 setStageOnGlobalFlag(Stage.CONFRONT_ARCHON,
"$gaFC_confrontArchon");
176 setStageOnGlobalFlag(Stage.VISIT_COUREUSE,
"$gaFC_visitCoureuse");
177 setStageOnGlobalFlag(Stage.RETURN_TO_ACADEMY,
"$gaFC_returnToAcademy");
178 setStageOnGlobalFlag(Stage.COMPLETED,
"$gaFC_completed");
181 beginStageTrigger(Stage.RETURN_TO_ACADEMY);
185 beginStageTrigger(Stage.RETURN_TO_ACADEMY);
189 float baseDelay = genDelay(14f);
190 beginStageTrigger(Stage.COMPLETED);
193 triggerSetGlobalMemoryValue(
"$gaFC_missionCompleted",
true);
194 triggerMakeNonStoryCritical(
coureuse.getMarket(),
arroyo.getMarket(),
199 setSystemWasUsedForStory(Stage.CHOOSE_PATH,
probeSystem);
205 protected boolean callAction(String action, String ruleId, InteractionDialogAPI dialog, List<Token> params,
206 Map<String, MemoryAPI> memoryMap) {
208 if (
"postFikenhildCleanup".equals(action)) {
211 Global.
getSector().getMemoryWithoutUpdate().unset(
"$gaFC_triedToSeeCavin");
212 Global.
getSector().getMemoryWithoutUpdate().unset(
"$gaFC_beingConspicuous");
213 Global.
getSector().getMemoryWithoutUpdate().unset(
"$gaFC_triedToSeeCavin");
214 Global.
getSector().getMemoryWithoutUpdate().unset(
"$gaFC_knowSiyavongContact");
215 Global.
getSector().getMemoryWithoutUpdate().unset(
"$gaFC_knockedAnyway");
216 Global.
getSector().getMemoryWithoutUpdate().unset(
"$gaFC_madeSiyavongAngry");
221 MarketAPI fikenhild =
Global.
getSector().getEconomy().getMarket(
"fikenhild");
222 if (fikenhild !=
null) {
223 fikenhild.getMemoryWithoutUpdate().unset(
"$visitedA");
224 fikenhild.getMemoryWithoutUpdate().unset(
"$visitedB");
225 fikenhild.getMemoryWithoutUpdate().unset(
"$visitedC");
230 if (
"dropStolenProbe".equals(action)) {
236 SectorEntityToken scavenger = getEntityFromGlobal(
"$gaFC_probeScavenger");
238 SectorEntityToken probe4 =
probeSystem.addCustomEntity(
null,
"Ejected Cargo Pod", Entities.CARGO_POD_SPECIAL, Factions.NEUTRAL);
240 probe4.setLocation(scavenger.getLocation().x, scavenger.getLocation().y);
242 probe4.addTag(
"gaFC_lootedProbe");
243 Misc.makeImportant(probe4, getMissionId());
248 makeUnimportant(scavenger);
252 if (
"foundEmptyProbe".equals(action)) {
254 SectorEntityToken scavenger = getEntityFromGlobal(
"$gaFC_probeScavenger");
255 Misc.makeImportant(scavenger, getMissionId());
259 if (dialog !=
null && action.equals(
"showKapteynBarAgent")) {
263 if (
"soldOutIsirahLead".equals(action)) {
299 if (currentStage == Stage.RETURN_TO_ACADEMY) {
300 info.addPara(
"You've found Academician Scylla Coureuse and brought her out of hiding to return her to"
301 +
" work on Baird's secret project at the Galatia Academy.",opad);
303 info.addPara(
"Find Scylla Coureuse, a former academician of the Galatia Academy who went into hiding "
304 +
"after the Hegemony crackdown on hyperspace experimentation.", opad, heg.getBaseUIColor(),
"Hegemony");
307 if (currentStage == Stage.INVESTIGATE_FIKENHILD) {
308 info.addPara(
"Talk to contacts on Fikenhild associated with Scylla Coureuse to find a lead to her current location -"
309 +
" or attract the attention of someone who knows where she is.", opad);
312 }
else if (currentStage == Stage.FOLLOW_THE_EXPERIMENTS) {
313 info.addPara(getGoToSystemTextShort(
probeSystem) +
" and search for the experimental packages possibly being used by Coureuse.",opad);
315 }
else if (currentStage == Stage.SEARCH_ISIRAH) {
316 info.addPara(
"Search the Isirah system for Scylla Coureuse. Talk to people who might be involved in hiding "
317 +
"her and search for signs of her research.", opad);
318 }
else if (currentStage == Stage.CONFRONT_ARCHON) {
319 info.addPara(
"Confront the archon of Laicaille Habitat about hiding Scylla Coureuse on the station.", opad);
320 }
else if (currentStage == Stage.VISIT_COUREUSE) {
321 info.addPara(
"Visit the safehouse of Scylla Coureuse and convince her to come back to the Galatia Academy.", opad);
322 }
else if (currentStage == Stage.RETURN_TO_ACADEMY) {
323 info.addPara(
"Return to the Galatia Academy and talk to Provost Baird.", opad);
329 Color h = Misc.getHighlightColor();
330 if (currentStage == Stage.CHOOSE_PATH) {
333 info.addPara(
"Find former academician Scylla Coureuse", tc, pad);
335 }
else if (currentStage == Stage.INVESTIGATE_FIKENHILD) {
337 info.addPara(
"Talk to associates of Scylla Coureuse on Fikenhild to find a lead to her location"
338 +
" or attract attention from someone who knows where she is", tc, pad);
340 }
else if (currentStage == Stage.FOLLOW_THE_EXPERIMENTS) {
342 " and search for the experimental packages possibly being used by Coureuse", tc, pad);
344 }
else if (currentStage == Stage.SEARCH_ISIRAH) {
345 info.addPara(
"Search the Isirah system for Scylla Coureuse, talk to people who might be hiding "
346 +
"her, and search for signs of her research.", tc, pad);
349 }
else if (currentStage == Stage.CONFRONT_ARCHON) {
350 info.addPara(
"Confront the archon of Laicaille Habitat about hiding Scylla Coureuse on the station", tc, pad);
354 }
else if (currentStage == Stage.VISIT_COUREUSE) {
355 info.addPara(
"Go to the safehouse of Scylla Coureuse and convince her to return to the Galatia Academy", tc, pad);
356 }
else if (currentStage == Stage.RETURN_TO_ACADEMY) {
357 info.addPara(
"Return to the Galatia Academy and talk to Provost Baird", tc, pad);
376 beginWithinHyperspaceRangeTrigger(
probeSystem, 3f,
false, Stage.FOLLOW_THE_EXPERIMENTS);
377 triggerCreateFleet(FleetSize.SMALL, FleetQuality.LOWER, Factions.SCAVENGERS, FleetTypes.SCAVENGER_MEDIUM,
probeSystem);
378 triggerSetFleetOfficers(OfficerNum.FEWER, OfficerQuality.LOWER);
379 triggerSetFleetFaction(Factions.INDEPENDENT);
380 triggerMakeLowRepImpact();
381 triggerFleetSetAvoidPlayerSlowly();
382 triggerMakeFleetIgnoredByOtherFleets();
383 triggerMakeFleetIgnoreOtherFleetsExceptPlayer();
385 triggerPickLocationAtInSystemJumpPoint(
probeSystem);
386 triggerSetEntityToPickedJumpPoint();
387 triggerPickLocationAroundEntity(1500);
388 triggerSpawnFleetAtPickedLocation(
"$gaFCProbe_scavengerPermanentFlag",
null);
389 triggerFleetSetTravelActionText(
"exploring system");
390 triggerFleetSetPatrolActionText(
"searching for salvage");
391 triggerOrderFleetPatrolEntity(
false);
392 triggerFleetAddDefeatTrigger(
"gaFCScavengerDefeated");
393 triggerSaveGlobalFleetRef(
"$gaFC_probeScavenger");
403 beginGlobalFlagTrigger(
"$gaFC_triggerPatherAmbush", Stage.FOLLOW_THE_EXPERIMENTS);
404 triggerCreateFleet(FleetSize.SMALL, FleetQuality.VERY_LOW, Factions.LUDDIC_PATH, FleetTypes.PATROL_SMALL,
probeSystem);
406 triggerMakeHostileAndAggressive();
407 triggerMakeLowRepImpact();
408 triggerFleetPatherNoDefaultTithe();
409 triggerPickLocationAtClosestToPlayerJumpPoint(
probeSystem);
410 triggerSetEntityToPickedJumpPoint();
411 triggerFleetSetPatrolActionText(
"waiting");
412 triggerPickLocationTowardsEntity(
null, 15f, getUnits(1.0f));
413 triggerSpawnFleetAtPickedLocation(
"$gaFC_patherProbeAmbush",
null);
414 triggerSetFleetMissionRef(
"$gaFC_ref");
415 triggerFleetMakeImportant(
null, Stage.FOLLOW_THE_EXPERIMENTS);
416 triggerOrderFleetInterceptPlayer();
425 beginWithinHyperspaceRangeTrigger(isirah, 3f,
true, Stage.SEARCH_ISIRAH);
426 triggerCreateFleet(FleetSize.LARGE, FleetQuality.HIGHER, Factions.MERCENARY, FleetTypes.MERC_PRIVATEER, isirah);
427 triggerSetFleetFaction(Factions.INDEPENDENT);
428 triggerSetFleetOfficers(OfficerNum.MORE, OfficerQuality.HIGHER);
431 triggerMakeNonHostile();
433 triggerFleetAllowLongPursuit();
434 triggerSetFleetAlwaysPursue();
436 triggerPickLocationTowardsPlayer(isirah.getHyperspaceAnchor(), 90f, getUnits(1.5f));
437 triggerSpawnFleetAtPickedLocation(
"$gaFC_isirahMerc",
null);
438 triggerOrderFleetInterceptPlayer();
439 triggerSetFleetMissionRef(
"$gaFC_ref");
440 triggerFleetMakeImportant(
null, Stage.SEARCH_ISIRAH);
453 beginWithinHyperspaceRangeTrigger(isirah, 3f,
false, Stage.SEARCH_ISIRAH);
454 triggerCreateFleet(FleetSize.MEDIUM, FleetQuality.HIGHER, Factions.TRITACHYON, FleetTypes.MERC_BOUNTY_HUNTER, isirah);
455 triggerSetFleetFaction(Factions.TRITACHYON);
456 triggerSetFleetOfficers(OfficerNum.MORE, OfficerQuality.HIGHER);
459 triggerFleetSetTravelActionText(
"traveling");
460 triggerFleetSetPatrolActionText(
"searching system");
461 triggerPickLocationTowardsPlayer(isirah.getHyperspaceAnchor(), 90f, getUnits(1.5f));
462 triggerSpawnFleetAtPickedLocation(
"$gaFC_isirahTriTach",
null);
466 triggerOrderFleetPatrol(isirah,
true, Tags.OBJECTIVE, Tags.PLANET);
467 triggerOrderFleetPatrol();