Starsector API
Loading...
Searching...
No Matches
GAOutpost.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.missions.academy;
2
3import java.awt.Color;
4import java.util.List;
5import java.util.Map;
6
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.InteractionDialogAPI;
9import com.fs.starfarer.api.campaign.PlanetAPI;
10import com.fs.starfarer.api.campaign.econ.MarketAPI;
11import com.fs.starfarer.api.campaign.rules.MemoryAPI;
12import com.fs.starfarer.api.characters.PersonAPI;
13import com.fs.starfarer.api.impl.campaign.AICoreOfficerPluginImpl;
14import com.fs.starfarer.api.impl.campaign.ids.Commodities;
15import com.fs.starfarer.api.impl.campaign.ids.Factions;
16import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
17import com.fs.starfarer.api.impl.campaign.ids.Ranks;
18import com.fs.starfarer.api.ui.TooltipMakerAPI;
19import com.fs.starfarer.api.util.Misc;
20import com.fs.starfarer.api.util.Misc.Token;
21
22public class GAOutpost extends GABaseMission {
23
24 public static float MISSION_DAYS = 120f;
25 public static float PROB_DESTROYED = 0.5f;
26 public static float PROB_ROGUE_AI = 0.6f;
27 public static float PROB_DESTROYED_PIRATES = 1f/6f;
28 public static float PROB_DESTROYED_PATHERS = 1f/5f; // 4/6 chance for DESTROYED_OTHER
29 public static float PROB_HOSTILE_FLEET = 0.5f;
30
31
32 //public static float PROB_PATHER_OR_PIRATE = 0.5f;
33// public static int RAID_DIFFICULTY = 100;
34// public static int MARINES_REQUIRED = RAID_DIFFICULTY / 2;
35
36
37 public static enum Stage {
38 GO_TO_OUTPOST,
39 RETURN_TO_ACADEMY,
40 COMPLETED,
41 FAILED,
42 }
43
44 public static enum Variation {
45 BASIC,
46 DESTROYED_PATHERS,
47 DESTROYED_PIRATES,
48 DESTROYED_OTHER,
49 ROGUE_AI,
50 }
51
52 protected PlanetAPI planet;
53 protected Variation variation;
54 protected PersonAPI leader;
55 protected PersonAPI core;
56 protected int terribleEnd;
57 protected int bizarreProject;
58
59 @Override
60 protected boolean create(MarketAPI createdAt, boolean barEvent) {
61 // if this mission type was already accepted by the player, abort
62 if (!setGlobalReference("$gaOp_ref")) {
63 return false;
64 }
65
67
68 if (rollProbability(PROB_DESTROYED)) {
69 if (rollProbability(PROB_DESTROYED_PIRATES)) {
70 variation = Variation.DESTROYED_PIRATES;
71 } else if (rollProbability(PROB_DESTROYED_PATHERS)) {
72 variation = Variation.DESTROYED_PATHERS;
73 } else {
74 variation = Variation.DESTROYED_OTHER;
75 terribleEnd = genRandom.nextInt(4);
76 }
77 } else if (rollProbability(PROB_ROGUE_AI)) {
78 variation = Variation.ROGUE_AI;
79 bizarreProject = genRandom.nextInt(7);
80 } else {
81 variation = Variation.BASIC;
82 }
83
84// variation = Variation.BASIC;
85// variation = Variation.DESTROYED_OTHER;
86// terribleEnd = genRandom.nextInt(4);
87// variation = Variation.DESTROYED_PATHERS;
88// PROB_HOSTILE_FLEET = 1f;
89// variation = Variation.ROGUE_AI;
90// bizarreProject = genRandom.nextInt(7);
91
92 resetSearch();
93
94 //genRandom = new Random();
95// requireSystemTags(ReqMode.ANY, Tags.THEME_REMNANT, Tags.THEME_DERELICT,
96// Tags.THEME_MISC, Tags.THEME_MISC_SKIP, Tags.THEME_RUINS);
97 preferSystemInteresting();
98 preferSystemOnFringeOfSector();
99 preferSystemUnexplored();
100 requirePlanetNotStar();
101 requirePlanetUnpopulated();
102 requirePlanetNotGasGiant();
103 preferPlanetNotFullySurveyed();
104 preferPlanetInDirectionOfOtherMissions();
105
106 planet = pickPlanet();
107
108 if (planet == null) {
109 return false;
110 }
111
112 setStartingStage(Stage.GO_TO_OUTPOST);
113 addSuccessStages(Stage.COMPLETED);
114 addFailureStages(Stage.FAILED);
115
116 makeImportant(planet, "$gaOp_targetPlanet", Stage.GO_TO_OUTPOST);
117 makeImportant(getPerson(), "$gaOp_returnHere", Stage.RETURN_TO_ACADEMY);
118
119 connectWithGlobalFlag(Stage.GO_TO_OUTPOST, Stage.RETURN_TO_ACADEMY, "$gaOp_needToReturn");
120 setStageOnGlobalFlag(Stage.COMPLETED, "$gaOp_completed");
121
122 if (WITH_TIME_LIMIT) {
123 setTimeLimit(Stage.FAILED, MISSION_DAYS, planet.getStarSystem(), Stage.RETURN_TO_ACADEMY);
124 }
125 //setCreditReward(40000, 50000);
126 setCreditReward(CreditReward.AVERAGE);
128
129 leader = Global.getSector().getFaction(Factions.INDEPENDENT).createRandomPerson(genRandom);
130 leader.setRankId(Ranks.CITIZEN);
131 leader.setPostId(Ranks.POST_ACADEMICIAN);
132
133 core = new AICoreOfficerPluginImpl().createPerson(Commodities.BETA_CORE, Factions.NEUTRAL, genRandom);
134
135
136 if (variation == Variation.DESTROYED_PIRATES && rollProbability(PROB_HOSTILE_FLEET)) {
137 beginStageTrigger(Stage.RETURN_TO_ACADEMY);
138 triggerCreateFleet(FleetSize.LARGE, FleetQuality.DEFAULT, Factions.PIRATES, FleetTypes.PATROL_MEDIUM, planet);
139 triggerAutoAdjustFleetStrengthModerate();
140 triggerFleetAllowLongPursuit();
141 triggerPickLocationAroundEntity(planet, 3000f);
142 triggerSpawnFleetAtPickedLocation(null, null);
143 triggerOrderFleetPatrol(planet);
144 endTrigger();
145 } else if (variation == Variation.DESTROYED_PATHERS && rollProbability(PROB_HOSTILE_FLEET)) {
146 beginStageTrigger(Stage.RETURN_TO_ACADEMY);
147 triggerCreateFleet(FleetSize.LARGE, FleetQuality.DEFAULT, Factions.LUDDIC_PATH, FleetTypes.PATROL_MEDIUM, planet);
148 triggerAutoAdjustFleetStrengthModerate();
149 triggerFleetAllowLongPursuit();
150 triggerFleetPatherNoDefaultTithe();
151 triggerPickLocationAroundEntity(planet, 3000f);
152 triggerSpawnFleetAtPickedLocation(null, null);
153 triggerOrderFleetPatrol(planet);
154 endTrigger();
155 }
156
157 return true;
158 }
159
160 @Override
161 protected boolean callAction(String action, String ruleId, InteractionDialogAPI dialog, List<Token> params,
162 Map<String, MemoryAPI> memoryMap) {
163 if (dialog != null && action.equals("showLeader")) {
164 showPersonInfo(leader, dialog, false, false);
165 return true;
166 }
167 if (dialog != null && action.equals("showCore")) {
168 showPersonInfo(core, dialog, false, false);
169 return true;
170 }
171 if (dialog != null && action.equals("doubleReward")) {
172 setCreditReward(getCreditsReward() * 2);
173 return true;
174 }
175 return false;
176 }
177
178 protected void updateInteractionDataImpl() {
179 set("$gaOp_department", department);
180 set("$gaOp_planetId", planet.getId());
181 set("$gaOp_planetName", planet.getName());
182 set("$gaOp_systemName", planet.getStarSystem().getNameWithNoType());
183 set("$gaOp_dist", getDistanceLY(planet));
184 set("$gaOp_reward", Misc.getWithDGS(getCreditsReward()));
185 set("$gaOp_leaderHeOrShe", leader.getHeOrShe());
186 set("$gaOp_leaderHisOrHer", leader.getHisOrHer());
187 //variation = Variation.BASIC;
188 set("$gaOp_variation", variation);
189 set("$gaOp_terribleEnd", terribleEnd);
190 set("$gaOp_bizarreProject", bizarreProject);
191 set("$gaOp_destroyed", variation == Variation.DESTROYED_OTHER ||
192 variation == Variation.DESTROYED_PATHERS ||
193 variation == Variation.DESTROYED_PIRATES);
194// if (variation == Variation.DECIV) {
195// set("$gaOp_marinesReq", MARINES_REQUIRED);
196// set("$gaOp_raidDifficulty", RAID_DIFFICULTY);
197// } else if (variation == Variation.PULSAR) {
198// PlanetAPI pulsar = Misc.getPulsarInSystem(planet.getStarSystem());
199// if (pulsar != null) {
200// set("$gaOp_pulsarName", planet.getStarSystem().getNameWithNoType());
201// }
202// }
203 }
204
205 @Override
206 public void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height) {
207 float opad = 10f;
208 Color h = Misc.getHighlightColor();
209 if (currentStage == Stage.GO_TO_OUTPOST) {
210 info.addPara(getGoToPlanetTextPre(planet) +
211 ", and drop off a small team of scientists at an outpost located there.", opad);
212 } else if (currentStage == Stage.RETURN_TO_ACADEMY) {
213 info.addPara("Return to the Galatia Academy and talk to " +
214 getPerson().getNameString() + " to receive your reward.", opad);
215 }
216 }
217
218 @Override
219 public boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad) {
220 Color h = Misc.getHighlightColor();
221 if (currentStage == Stage.GO_TO_OUTPOST) {
222 info.addPara(getGoToPlanetTextShort(planet), tc, pad);
223 return true;
224 } else if (currentStage == Stage.RETURN_TO_ACADEMY) {
225 info.addPara("Return to the Galatia Academy and talk to " + getPerson().getNameString(), tc, pad);
226 return true;
227 }
228 return false;
229 }
230
231 @Override
232 public String getBaseName() {
233 return "Science Team Transport";
234 }
235
236}
237
238
239
240
241
static SectorAPI getSector()
Definition Global.java:59
PersonAPI createPerson(String aiCoreId, String factionId, Random random)
boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad)
void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height)
boolean create(MarketAPI createdAt, boolean barEvent)
boolean callAction(String action, String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)