001package com.fs.starfarer.api.impl.campaign.missions.luddic;
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.CampaignFleetAPI;
011import com.fs.starfarer.api.campaign.InteractionDialogAPI;
012import com.fs.starfarer.api.campaign.RepLevel;
013import com.fs.starfarer.api.campaign.SectorEntityToken;
014import com.fs.starfarer.api.campaign.StarSystemAPI;
015import com.fs.starfarer.api.campaign.econ.MarketAPI;
016import com.fs.starfarer.api.campaign.rules.MemoryAPI;
017import com.fs.starfarer.api.characters.PersonAPI;
018import com.fs.starfarer.api.impl.campaign.ids.Factions;
019import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
020import com.fs.starfarer.api.impl.campaign.ids.People;
021import com.fs.starfarer.api.impl.campaign.ids.Tags;
022import com.fs.starfarer.api.impl.campaign.intel.bases.LuddicPathBaseIntel;
023import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithSearch;
024import com.fs.starfarer.api.impl.campaign.missions.hub.ReqMode;
025import com.fs.starfarer.api.ui.SectorMapAPI;
026import com.fs.starfarer.api.ui.TooltipMakerAPI;
027import com.fs.starfarer.api.util.Misc;
028import com.fs.starfarer.api.util.Misc.Token;
029
030public class BornanewFilesFalseIdols extends HubMissionWithSearch {
031
032        public static enum Stage {
033                PICK_UP_BORNANEW,
034                MEET_MENES_YARIBAY,
035                ATTEND_A_PARTY,
036                TALK_TO_HORUS, 
037                TALK_TO_ENGINEER,
038                TALK_TO_ULMUS_POND,
039                GO_TO_CHALCEDON,
040                INVESTIGATE_PATHER_STATION,
041                RETURN_TO_HESPERUS_EARLY,
042                GO_TO_HESPERUS,
043                ARREST_THE_CURATE,
044                DELIVER_KEEPFAITH,
045                COMPLETED,
046        }
047        
048        protected PersonAPI bornanew;
049        protected PersonAPI jaspis;  
050        protected PersonAPI ulmus_pond;
051        protected PersonAPI sedge;  
052        protected PersonAPI menes_yaribay;
053        protected PersonAPI horus_yaribay;
054        protected PersonAPI cedra_keepfaith;  
055        
056        protected MarketAPI asher;
057        protected MarketAPI chalcedon;
058        protected MarketAPI olinadu;
059        protected MarketAPI kazeron;
060        protected MarketAPI gilead;
061        protected MarketAPI hesperus;
062        protected MarketAPI tartessus;
063        protected MarketAPI bornanewLocation;
064        
065        protected StarSystemAPI patherBaseSystem;
066        
067        protected LuddicPathBaseIntel patherStation;
068        protected CampaignFleetAPI patherStationFleet;
069        
070        protected int stationSalvorLoss;
071        
072        
073        @Override
074        protected boolean create(MarketAPI createdAt, boolean barEvent) {
075                // if already accepted by the player, abort
076                if (!setGlobalReference("$bffi_ref", "$bffi_inProgress")) {
077                        return false;
078                }
079                
080                // Places
081                chalcedon = Global.getSector().getEconomy().getMarket("chalcedon");
082                if (chalcedon == null) return false;
083                if (!chalcedon.getFactionId().equals(Factions.LUDDIC_PATH)) return false;
084                
085                gilead = Global.getSector().getEconomy().getMarket("gilead");
086                if (gilead == null) return false;
087                if (!gilead.getFactionId().equals(Factions.LUDDIC_CHURCH)) return false;
088                
089                kazeron = Global.getSector().getEconomy().getMarket("kazeron");
090                if (kazeron == null) return false;
091                if (!kazeron.getFactionId().equals(Factions.PERSEAN)) return false;
092                
093                olinadu = Global.getSector().getEconomy().getMarket("olinadu");
094                if (olinadu == null) return false;
095                if (!olinadu.getFactionId().equals(Factions.PERSEAN)) return false;
096                
097                hesperus = Global.getSector().getEconomy().getMarket("hesperus");
098                if (hesperus == null) return false;
099                if (!hesperus.getFactionId().equals(Factions.LUDDIC_CHURCH)) return false;
100                
101                tartessus = Global.getSector().getEconomy().getMarket("tartessus");
102                if (tartessus == null) return false;
103                if (!tartessus.getFactionId().equals(Factions.LUDDIC_CHURCH)) return false;
104                
105                asher = Global.getSector().getEconomy().getMarket("asher");
106                if (asher == null) return false;
107                if (!asher.getFactionId().equals(Factions.LUDDIC_CHURCH)) return false;
108                
109                
110                // People
111                
112                bornanew = getImportantPerson(People.BORNANEW);
113                if (bornanew == null) return false;
114
115                jaspis = getImportantPerson(People.JASPIS);
116                if (bornanew == null) return false;
117                
118                ulmus_pond = getImportantPerson(People.ULMUS_POND);
119                if (ulmus_pond == null) return false;
120                
121                menes_yaribay = getImportantPerson(People.MENES_YARIBAY);
122                if (menes_yaribay == null) return false;
123                
124                horus_yaribay = getImportantPerson(People.HORUS_YARIBAY);
125                if (horus_yaribay == null) return false;
126                
127                cedra_keepfaith = getImportantPerson(People.CEDRA_KEEPFAITH);
128                if (cedra_keepfaith == null) return false;
129                
130                
131                // Find a system to hide Pather base in
132                resetSearch();
133                requireSystemTags(ReqMode.ANY, Tags.THEME_MISC, Tags.THEME_MISC_SKIP, Tags.THEME_RUINS);
134                requireSystemTags(ReqMode.NOT_ANY, Tags.THEME_UNSAFE, Tags.THEME_CORE, Tags.SYSTEM_ALREADY_USED_FOR_STORY);
135                requireSystemNotAlreadyUsedForStory();
136                requireSystemNotHasPulsar(); // don't want the challenge to get blown up.
137                preferSystemOnFringeOfSector();
138                preferSystemUnexplored();
139                preferSystemInDirectionOfOtherMissions(); 
140                patherBaseSystem = pickSystem();
141                if (patherBaseSystem == null) return false;
142
143                setStoryMission();
144                
145                setStartingStage(Stage.PICK_UP_BORNANEW);
146                connectWithGlobalFlag(Stage.PICK_UP_BORNANEW, Stage.MEET_MENES_YARIBAY, "$bffi_goMeetMenesYaribay");
147                setStageOnGlobalFlag(Stage.ATTEND_A_PARTY, "$bffi_gotPartyInvite");
148                setStageOnGlobalFlag(Stage.TALK_TO_HORUS, "$bffi_goTalkToHorus");
149                setStageOnGlobalFlag(Stage.TALK_TO_ENGINEER, "$bffi_talkToEngineer");
150                setStageOnGlobalFlag(Stage.TALK_TO_ULMUS_POND, "$bffi_talkToUlmusPond");
151                setStageOnGlobalFlag(Stage.GO_TO_CHALCEDON, "$bffi_followUlmusPond");
152                setStageOnGlobalFlag(Stage.INVESTIGATE_PATHER_STATION, "$bffi_investigatePatherStation");
153                
154                setStageOnGlobalFlag(Stage.ARREST_THE_CURATE, "$bffi_arrestTheCurate"); // for testing.
155                
156                setStageOnGlobalFlag(Stage.RETURN_TO_HESPERUS_EARLY, "$bffi_destroyedStationEarly"); // half-failure.
157                
158                setStageOnGlobalFlag(Stage.GO_TO_HESPERUS, "$bffi_returnBornanewBody"); // definitely a failure
159                setStageOnGlobalFlag(Stage.GO_TO_HESPERUS, "$bffi_keepfaithEscapedTartessus"); // half-failure.
160                
161                setStageOnGlobalFlag(Stage.ARREST_THE_CURATE, "$bffi_learnedAboutKeepfaith");
162                setStageOnGlobalFlag(Stage.DELIVER_KEEPFAITH, "$bffi_arrestedKeepfaith");
163                
164                
165                setStageOnGlobalFlag(Stage.COMPLETED, "$bffi_completed");
166                addSuccessStages(Stage.COMPLETED);      
167                
168                makeImportant(bornanew, "$bffi_pickUpBornanew", Stage.PICK_UP_BORNANEW);
169                makeImportant(menes_yaribay, "$bffi_meetMenesYaribay", Stage.MEET_MENES_YARIBAY);
170                makeImportant(olinadu, "$bffi_attendAParty", Stage.ATTEND_A_PARTY);
171                makeImportant(horus_yaribay, "$bffi_talkToHorusAboutMenesParty", Stage.TALK_TO_HORUS);
172                
173                makeImportant(asher, "$bffi_talkToEngineer", Stage.TALK_TO_ENGINEER);
174                
175                makeImportant(ulmus_pond, "$bffi_talkToUlmusPond", Stage.TALK_TO_ULMUS_POND);
176                makeImportant(chalcedon, "$bffi_followUlmusPond", Stage.GO_TO_CHALCEDON);
177                
178                makeImportant(tartessus, "$bffi_arrestTheCurate", Stage.ARREST_THE_CURATE);
179                makeImportant(hesperus, "$bffi_deliverKeepfaith", Stage.DELIVER_KEEPFAITH);
180                
181                makeImportant(hesperus, "$bffi_goToHesperus", Stage.GO_TO_HESPERUS);
182                makeImportant(hesperus, "$bffi_goToHesperus", Stage.RETURN_TO_HESPERUS_EARLY);
183
184                setName("False Idols");
185                setRepFactionChangesNone();
186                setRepPersonChangesNone();
187        
188                // Spawn a PL patrol or two to spice up things around Olinadu pre Menes' party
189                beginStageTrigger(Stage.ATTEND_A_PARTY);
190                triggerCreateFleet(FleetSize.SMALL, FleetQuality.DEFAULT, Factions.PERSEAN, FleetTypes.PATROL_MEDIUM, olinadu.getPlanetEntity());
191                triggerPickLocationAroundEntity(olinadu.getPlanetEntity(), 1600f);
192                triggerSpawnFleetAtPickedLocation("$gaDHO_arrayFleet", null);
193                triggerOrderFleetPatrol(false, olinadu.getPlanetEntity(), olinadu.getStarSystem().getJumpPoints().get(0));
194                triggerSetFleetMissionRef("$bffi_ref");
195                endTrigger();
196                
197                // And a couple PL patrols for after the party.
198                beginStageTrigger(Stage.TALK_TO_ENGINEER);
199                triggerCreateFleet(FleetSize.SMALL, FleetQuality.DEFAULT, Factions.PERSEAN, FleetTypes.PATROL_MEDIUM, olinadu.getPlanetEntity());
200                triggerFleetAllowLongPursuit();
201                triggerPickLocationAroundEntity(olinadu.getPlanetEntity(), 1000f);
202                triggerSetFleetMissionRef("$bffi_ref");
203                triggerSpawnFleetAtPickedLocation("$bffi_postRaidPatrol", null);
204                //triggerOrderFleetPatrol(false, olinadu.getPlanetEntity(), olinadu.getStarSystem().getJumpPoints().get(0), olinadu.getStarSystem().getJumpPoints().get(1));
205                //triggerOrderFleetInterceptPlayer(); // Could write a unique interaction, but I'd want it to have consequences... -dgb
206                endTrigger();
207                
208                beginStageTrigger(Stage.TALK_TO_ENGINEER);
209                triggerCreateFleet(FleetSize.SMALL, FleetQuality.DEFAULT, Factions.PERSEAN, FleetTypes.PATROL_MEDIUM, olinadu.getPlanetEntity());
210                triggerSetFleetFaction(Factions.PERSEAN);
211                //triggerAutoAdjustFleetStrengthMajor();
212                triggerPickLocationTowardsEntity(olinadu.getStarSystem().getHyperspaceAnchor(), 30f, getUnits(1.5f));
213                //triggerFleetAllowLongPursuit();
214                triggerSetFleetMissionRef("$bffi_ref");
215                triggerSpawnFleetAtPickedLocation("$bffi_postRaidPatrol", null);
216                triggerOrderFleetPatrol(false, olinadu.getPlanetEntity(), olinadu.getStarSystem().getJumpPoints().get(1));
217                //triggerOrderFleetInterceptPlayer(); // Could write a unique interaction, but I'd want it to have consequences... -dgb
218                endTrigger();
219                
220                
221                // Spawn a Pather fleet near Chalcedon after Pond tips them off (inadvertantly or not)
222                beginWithinHyperspaceRangeTrigger(chalcedon.getPlanetEntity(), 1f, false,Stage.GO_TO_CHALCEDON);
223                triggerCreateFleet(FleetSize.MEDIUM, FleetQuality.DEFAULT, Factions.LUDDIC_PATH, FleetTypes.PATROL_MEDIUM, chalcedon.getPlanetEntity());
224                triggerSetFleetFaction(Factions.LUDDIC_PATH);
225        triggerPickLocationAroundEntity(chalcedon.getPlanetEntity(), 800f);
226        triggerOrderFleetPatrol(chalcedon.getPlanetEntity());
227        triggerSpawnFleetAtPickedLocation("$bffi_patherGoblins", null);
228        triggerSetFleetMissionRef("$bffi_ref");
229        
230        // if player is hostile to Path, Path fleet is hostile to player.
231        if( Global.getSector().getFaction(Factions.LUDDIC_PATH).getRelToPlayer().isAtBest(RepLevel.HOSTILE)){
232                triggerMakeHostileAndAggressive();
233        }
234        
235        triggerFleetSetPatrolLeashRange(1400f);
236        triggerMakeFleetGoAwayAfterDefeat();
237        endTrigger();
238        
239                // A *serious* Luddic intercept fleet post-Chalcedon
240        // Revenge for killing Sedge and/or the same but stopping player's meddling.
241        // Maybe they demand to talk to Bornanew?
242                beginWithinHyperspaceRangeTrigger(chalcedon, 3f, true, Stage.INVESTIGATE_PATHER_STATION);
243                triggerCreateFleet(FleetSize.LARGER, FleetQuality.HIGHER, Factions.LUDDIC_PATH, FleetTypes.PATROL_LARGE, chalcedon.getLocationInHyperspace());
244                triggerSetFleetOfficers(OfficerNum.MORE, OfficerQuality.HIGHER);
245                triggerMakeHostileAndAggressive();
246                triggerFleetMakeFaster(true, 2, true);
247                triggerSetFleetAlwaysPursue();
248                triggerPickLocationTowardsEntity(chalcedon.getStarSystem().getHyperspaceAnchor(), 30f, getUnits(1.5f));
249                triggerSpawnFleetAtPickedLocation("$bffi_patherIntercept", null);
250                triggerOrderFleetInterceptPlayer();
251                triggerOrderFleetEBurn(1f);
252                triggerSetFleetMissionRef("$bffi_ref");
253                triggerFleetMakeImportant(null, Stage.INVESTIGATE_PATHER_STATION);
254                endTrigger();
255                
256                beginStageTrigger(Stage.COMPLETED);
257                triggerMakeNonStoryCritical("asher", "chalcedon", "olinadu", "kazeron", "gilead", "hesperus", "tartessus");
258                triggerSetGlobalMemoryValue("$bffi_missionCompleted", true);
259                endTrigger();
260                
261                return true;
262        }
263        
264        protected void updateInteractionDataImpl() {
265                        set("$bffi_stage", getCurrentStage());
266                        set("$bffi_patherStationSystem", patherBaseSystem.getName());
267        }
268
269        @Override
270        protected boolean callAction(String action, String ruleId, final InteractionDialogAPI dialog,
271                                                                 List<Token> params, final Map<String, MemoryAPI> memoryMap) {
272                
273                if ("spawnPatherBase".equals(action)) {
274                        //new LuddicPathBaseIntel(patherBaseSystem,  Factions.LUDDIC_PATH);
275                        
276                        patherStation = new LuddicPathBaseIntel(patherBaseSystem, Factions.LUDDIC_PATH);
277                        
278                        
279                        /* Don't need to actually simulate all of this.
280                        patherStation.getMarket().addIndustry("heavyindustry");
281                        MarketAPI patherMarket = patherStation.getMarket();
282                        String itemId = "corrupted_nanoforge";
283                        InstallableItemEffect effect = ItemEffectsRepo.ITEM_EFFECTS.get(itemId);
284                        Industry ind = patherMarket.getIndustry("heavyindustry");
285                        ind.setSpecialItem(new SpecialItemData(itemId, null));
286                        */              
287                        
288                        MemoryAPI mem = patherStation.getEntity().getMemoryWithoutUpdate();
289                        mem.set("$bffi_patherStationTarget", true);
290                        Global.getSector().addScript(patherStation);
291                        
292                        CampaignFleetAPI patherStationFleet = Misc.getStationFleet(patherStation.getMarket());
293                        
294                        //makeImportant(patherStation, , Stage.INVESTIGATE_PATHER_STATION);
295                        Misc.makeImportant(patherStation.getEntity(), "$bffi_investigatePatherStation");
296                        Misc.addDefeatTrigger(patherStationFleet, "BFFIpatherStationDefeated");
297                        
298                        /*patherStationFleet.addEventListener(new BaseFleetEventListener() {
299                                @Override
300                                public void reportFleetDespawnedToListener(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param) {
301                                        if (reason == FleetDespawnReason.DESTROYED_BY_BATTLE) {
302                                                // TODO something.
303                                                //fleet.getMemoryWithoutUpdate().unset("$gaATG_hegScanFleet");
304                                                //encounterGateHegemony.getMemoryWithoutUpdate().unset("$GAATGhegemonyScanFleet");
305                                        }
306                                }
307                        });*/
308                        return true;
309                }
310                else if ("cleanUpPatherBase".equals(action)) {
311                
312                        Misc.makeUnimportant(patherStation.getEntity(), "$bffi_investigatePatherStation"); 
313                        // Is this implicit?
314                        return true;
315                }
316                else if ("patherBaseLosses".equals(action))
317                {
318                        // ui_cargo_special_tech_drop
319                        Global.getSoundPlayer().playSound("explosion_from_damage", 1, 1, Global.getSoundPlayer().getListenerPos(), new Vector2f());
320                        return true;
321                }
322                else if ("shootEm".equals(action))
323                {
324                        Global.getSoundPlayer().playSound("storyevent_diktat_execution", 1, 1, Global.getSoundPlayer().getListenerPos(), new Vector2f());
325                        return true;
326                }
327                else if ("ulmusPondMaskOff".equals(action)) { // unused, actually.
328                        ulmus_pond.setFaction("luddic_path"); // Whaaaaa????
329                        return true;
330                }
331                else if ("setCourseChalcedon".equals(action)) {
332                        Global.getSector().layInCourseFor(chalcedon.getPlanetEntity());
333                        return true;
334                }
335                /*else if ("transponderOff".equals(action)) {
336                        Global.getSector().getPlayerFleet().getAbility(Abilities.TRANSPONDER).deactivate();
337                        return true;
338                }
339                else if ("transponderOn".equals(action)) {
340                        Global.getSector().getPlayerFleet().getAbility(Abilities.TRANSPONDER).activate();
341                        return true;
342                }*/
343                else if ("doCleanup".equals(action))
344                {
345                        Global.getSector().getMemoryWithoutUpdate().unset("$bffi_jethroCalledOutPond");
346                        //Global.getSector().getMemoryWithoutUpdate().unset("$bffi_intendToTalkHorus");         
347                        // Jeez, anything else?
348                        return true;
349                }
350                
351                return super.callAction(action, ruleId, dialog, params, memoryMap);
352        }
353        
354//              if ("THEDUEL".equals(action)) {
355//                      TextPanelAPI text = dialog.getTextPanel();
356//                      text.setFontOrbitronUnnecessarilyLarge();
357//                      Color color = Misc.getBasePlayerColor();
358//                      color = Global.getSector().getFaction(Factions.HEGEMONY).getBaseUIColor();
359//                      text.addPara("THE DUEL", color);
360//                      text.setFontInsignia();
361//                      text.addImage("misc", "THEDUEL");
362//                      return true;
363//              }
364/*
365
366                else if ("didMazalotRaid".equals(action))
367                {
368                        RecentUnrest.get(mazalot).add(10, "Raided Mazalot and caused a Luddic uprising");
369                        return true;
370                }*/
371                
372        
373        /*
374        @Override
375        public void createSmallDescription(TooltipMakerAPI info, float width, float height) {
376                Color h = Misc.getHighlightColor();
377                Color g = Misc.getGrayColor();
378                float pad = 3f;
379                float opad = 10f;
380                
381                FactionAPI faction = getFactionForUIColors();
382                PersonAPI person = getPerson();
383                
384                //info.addImage(Global.getSettings().getSpriteName("illustrations", "luddic_shrine"), width, opad);
385                
386                addDescriptionForCurrentStage(info, width, height);
387                
388                addBulletPoints(info, ListInfoMode.IN_DESC);
389        }
390        */
391
392        @Override
393        public void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height) {
394                float opad = 10f;
395                //Color h = Misc.getHighlightColor();
396                
397                //Color h2 = Misc.getDarkHighlightColor();
398                //FactionAPI church = Global.getSector().getFaction(Factions.LUDDIC_CHURCH);
399                
400                //info.addImage(robed_man.getPortraitSprite(), width, 128, opad);
401
402                if (currentStage == Stage.PICK_UP_BORNANEW) {
403                        info.addPara("Pick up Jethro Bornanew from Gilead.", opad);
404                        addStandardMarketDesc("Go to " + gilead.getOnOrAt(), gilead, info, opad);
405                }
406                else if (currentStage == Stage.MEET_MENES_YARIBAY) {
407                        info.addPara("Go to Olinadu and contact Menes Yaribay, the planetary administrator.", opad);
408                        addStandardMarketDesc("Go to " + olinadu.getOnOrAt(), olinadu, info, opad);
409                }
410                else if (currentStage == Stage.TALK_TO_HORUS) {
411                        info.addPara("Go to Kazeron and talk to Horus Yaribay about his cousin Menes.", opad);
412                        addStandardMarketDesc("Go to " + kazeron.getOnOrAt(), kazeron, info, opad);
413                }
414                else if (currentStage == Stage.ATTEND_A_PARTY) {
415                        
416                        if(Global.getSector().getMemoryWithoutUpdate().contains("$bffi_intendToSteal")) {
417                                info.addPara("Attend Menes Yaribay's 'gathering' on Olinadu and find a way to steal the false relic.", opad);
418                                addStandardMarketDesc("Go to " + olinadu.getOnOrAt(), olinadu, info, opad);
419                        }
420                        else if(Global.getSector().getMemoryWithoutUpdate().contains("$bffi_horusToParty")) {
421                                info.addPara("Attend Menes Yaribay's 'gathering' on Olinadu with Horus Yaribay, the patriarch of Gens Yaribay.", opad);
422                                addStandardMarketDesc("Go to " + olinadu.getOnOrAt(), olinadu, info, opad);
423                        }
424                        else {
425                                info.addPara("Attend Menes Yaribay's 'gathering' on Olinadu and acquire the false relic.", opad);
426                                addStandardMarketDesc("Go to " + olinadu.getOnOrAt(), olinadu, info, opad);
427                        }
428                }
429                else if (currentStage == Stage.TALK_TO_ENGINEER) {
430                        info.addPara("Bring the false relic to Asher so that a nanoforge engineer in the employ of the Church can examine it.", opad);
431                        addStandardMarketDesc("Go to " + asher.getOnOrAt(), asher, info, opad);
432                }
433                else if (currentStage == Stage.TALK_TO_ULMUS_POND) {
434                        info.addPara("Go to Olinadu and confront Ulmus Pond to get a confession.", opad);
435                        addStandardMarketDesc("Go to " + asher.getOnOrAt(), asher, info, opad);
436                }
437                else if (currentStage == Stage.GO_TO_CHALCEDON) {
438                        info.addPara("Go to Chalcedon and use Bornanew's intel to track down where Ulmus Pond is hiding.", opad);
439                        addStandardMarketDesc("Go to " + chalcedon.getOnOrAt(), chalcedon, info, opad);
440                }
441                else if (currentStage == Stage.INVESTIGATE_PATHER_STATION) {
442                        //info.addPara("Investigate the Pather Station in the " + patherStation.getSystem().getName() + " system and try to find out where their scan of the relic came from.", opad);
443                        //addStandardMarketDesc("Go to the Pather station " + patherStation.getMarket().getOnOrAt(), patherStation.getMarket(), info, opad);
444                        info.addPara(getGoToSystemTextShort(patherStation.getMarket().getStarSystem()) + " and investigate. Find where the glove came from and how it was made. Ensure no more will be created.",opad);
445                }
446                else if (currentStage == Stage.ARREST_THE_CURATE) {
447                        info.addPara("Go to the Cathedral of Holy Exodus, on Tartessus, and arrest Subcurate Cedra Keepfaith.", opad);
448                        addStandardMarketDesc("Go to " + tartessus.getOnOrAt(), tartessus, info, opad);
449                }
450                else if (currentStage == Stage.DELIVER_KEEPFAITH) {
451                        info.addPara("Deliver Cedra Keepfaith to the Knights of Ludd on Hesperus to face their justice.", opad);
452                        addStandardMarketDesc("Go to " + hesperus.getOnOrAt(), hesperus, info, opad);
453                }
454                else if (currentStage == Stage.GO_TO_HESPERUS) {
455                        if(Global.getSector().getMemoryWithoutUpdate().contains("$bffi_keepfaithEscapedTartessus")){
456                                info.addPara("Report back to Excubitor Orbis Gideon Oak on Hesperus with news of Bornanew's quest.", opad);
457                                addStandardMarketDesc("Go to " + hesperus.getOnOrAt(), hesperus, info, opad);
458                        }
459                        else { //Global.getSector().getMemoryWithoutUpdate().contains("$bffi_returnBornanewBody"))
460                                info.addPara("Return Jethro Bornanew's body to the Knights of Ludd on Hesperus so he may rest with his fellow Knights.", opad);
461                                addStandardMarketDesc("Go to " + hesperus.getOnOrAt(), hesperus, info, opad);
462                        }
463                }
464                else if (currentStage == Stage.RETURN_TO_HESPERUS_EARLY) {
465                        info.addPara("Report back to Excubitor Orbis Gideon Oak on Hesperus with news of Bornanew's quest.", opad);
466                        addStandardMarketDesc("Go to " + hesperus.getOnOrAt(), hesperus, info, opad);
467                }
468                
469                /*else if (currentStage == Stage.GO_TO_MAZALOT) {
470                        info.addPara("A Pather, Sedge, claims that Jethro Bornanew travelled to Mazalot. Find him, or find where he has gone from there.", opad);
471                        addStandardMarketDesc("Go to " + mazalot.getOnOrAt(), mazalot, info, opad);
472                }
473                else if (currentStage == Stage.CONTACT_VIRENS) {
474                        info.addPara("Nile Virens runs the Luddic Path on Mazalot. If anyone knows where Bornanew is, it would be him or his organization. He might be persuaded to help by force or diplomacy.", opad);
475                        addStandardMarketDesc("Contact Nile Virens " + mazalot.getOnOrAt(), mazalot, info, opad);
476                        info.addImage(nile_virens.getPortraitSprite(), width, 128, opad);
477                        info.addImage(nile_virens.getFaction().getCrest(), width, 128, opad);
478                }
479                else if (currentStage == Stage.CONTACT_BORNANEW) {
480                        info.addPara("Nile Virens has provided you with the location of Jethro Bornanew, or so he claims. This consists of coordinates for a location on the surface of Mazalot, outside of a Luddic-majority settlement.", opad);
481                        addStandardMarketDesc("Contact Jethro Bornanew " + mazalot.getOnOrAt(), mazalot, info, opad);
482                        //info.addImage(bornanew.getPortraitSprite(), width, 128, opad);
483                }
484                else if (currentStage == Stage.RETURN_TO_GILEAD) {
485                        info.addPara("Return with Jethro Bornanew to the office of Archcurate Jaspis.", opad);
486                        addStandardMarketDesc("Go to " + gilead.getOnOrAt(), gilead, info, opad);
487                }
488                else if (currentStage == Stage.RETURN_TO_GILEAD2) {
489                        info.addPara("Return to the office of Archcurate Jaspis with news of Jethro Bornanew's 'death'.", opad);
490                        addStandardMarketDesc("Go to " + gilead.getOnOrAt(), gilead, info, opad);
491                }*/
492                
493        }
494
495        @Override
496        public boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad) {
497                //Color h = Misc.getHighlightColor();
498                
499                if (currentStage == Stage.PICK_UP_BORNANEW) {
500                        info.addPara("Send a shuttle down to pick Novice Bornanew up from Gilead", tc, pad);
501                        return true;
502                }
503                else if (currentStage == Stage.MEET_MENES_YARIBAY) {
504                        info.addPara("Go to Olinadu and talk to the administrator, Menes Yaribay", tc, pad);
505                        return true;
506                }
507                else if (currentStage == Stage.TALK_TO_HORUS) {
508                        info.addPara("Go to Kazeron and talk to Horus Yaribay about Menes", tc, pad);
509                        return true;
510                }
511                else if (currentStage == Stage.ATTEND_A_PARTY) {
512                        if(Global.getSector().getMemoryWithoutUpdate().contains("$bffi_intendToSteal")) {
513                                info.addPara("Attend the 'gathering' organized by Menes Yaribay on Olinadu", tc, pad);
514                        }
515                        else {
516                                info.addPara("Attend the 'gathering' organized by Menes Yaribay on Olinadu", tc, pad);
517                        }
518                        
519                        return true;
520                }
521                else if (currentStage == Stage.TALK_TO_ENGINEER) {
522                        info.addPara("Bring the false relic to Asher to be examined by a nanoforge engineer", tc, pad);
523                        return true;
524                }
525                else if (currentStage == Stage.TALK_TO_ULMUS_POND) {
526                        info.addPara("Go to Olinadu and talk to Ulmus Pond", tc, pad);
527                        return true;
528                }
529                else if (currentStage == Stage.GO_TO_CHALCEDON) {
530                        info.addPara("Go to Chalcedon and find Ulmus Pond", tc, pad);
531                        return true;
532                }
533                else if (currentStage == Stage.INVESTIGATE_PATHER_STATION) {
534                        info.addPara("Go to " + patherStation.getSystem().getName() + " and find the source of the 'relic'.", tc, pad);
535                        return true;
536                }
537                else if (currentStage == Stage.ARREST_THE_CURATE) {
538                        info.addPara("Go to the Cathedral of Holy Exodus on Tartessus and arrest Subcurate Cedra Keepfaith", tc, pad);
539                        return true;
540                }
541                else if (currentStage == Stage.DELIVER_KEEPFAITH) {
542                        info.addPara("Bring Cedra Keeptfaith to Hesperus to face the justice of the Knights of Ludd", tc, pad);
543                        return true;
544                }
545                else if (currentStage == Stage.GO_TO_HESPERUS) {
546                        if(Global.getSector().getMemoryWithoutUpdate().contains("$global.bffi_keepfaithEscapedTartessus"))
547                        {
548                                info.addPara("Report back to Excubitor Orbis Gideon Oak on Hesperus", tc, pad);
549                        }
550                        else { //Global.getSector().getMemoryWithoutUpdate().contains("$bffi_returnBornanewBody"))
551                                info.addPara("Return Jethro Bornanew's body to the Knights of Ludd on Hesperus", tc, pad);
552                        }
553                        return true;
554                }
555                else if (currentStage == Stage.RETURN_TO_HESPERUS_EARLY) {
556                        info.addPara("Report back to Excubitor Orbis Gideon Oak on Hesperus", tc, pad);
557                        return true;
558                }
559                
560                /*
561                Color h = Misc.getHighlightColor();
562                if (currentStage == Stage.DROP_OFF) {
563                        info.addPara("Deliver " + getWithoutArticle(thing) + " to specified location in the " +  
564                                        system.getNameWithLowercaseTypeShort(), tc, pad);
565                        return true;
566                }
567                */
568                return false;
569        }
570
571        //@Override
572        //public String getBaseName() {
573        //      return "False Idols";
574        //}
575
576        @Override
577        public String getPostfixForState() {
578                if (startingStage != null) {
579                        return "";
580                }
581                return super.getPostfixForState();
582        }
583
584        @Override
585        public SectorEntityToken getMapLocation(SectorMapAPI map) {
586                if (patherStation != null && currentStage == Stage.INVESTIGATE_PATHER_STATION) {
587                        return patherStation.getEntity();
588                }
589                return super.getMapLocation(map);
590        }
591}
592
593
594
595
596