Starsector API
Loading...
Searching...
No Matches
CryopodOfficerGen.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special;
2
3import java.util.ArrayList;
4import java.util.List;
5import java.util.Random;
6
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.FactionAPI;
9import com.fs.starfarer.api.characters.PersonAPI;
10import com.fs.starfarer.api.impl.campaign.ids.Skills;
11import com.fs.starfarer.api.impl.campaign.procgen.themes.SalvageSpecialAssigner;
12import com.fs.starfarer.api.plugins.OfficerLevelupPlugin;
13import com.fs.starfarer.api.util.WeightedRandomPicker;
14
15public class CryopodOfficerGen {
16
17 public static String EXCEPTIONAL_OFFICERS_CREATED_KEY = "$SleeperPodsSpecialCreator_exceptionalCount";
18
22
27
31
32
33
34 public static class CryopodOfficerTemplate {
35 public List<String> base = new ArrayList<String>();
36 public List<String> elite = new ArrayList<String>();
37
38 public String personality = null;
39
40
41 public CryopodOfficerTemplate() {
42 }
43 public CryopodOfficerTemplate(String personality) {
44 this.personality = personality;
45 }
46
47 public PersonAPI create(FactionAPI faction, Random random) {
48 PersonAPI officer = faction.createRandomPerson(random);
49 if (personality != null) {
50 officer.setPersonality(personality);
51 }
52
53 int level = base.size() + elite.size();
54 officer.getStats().setLevel(level);
55
57 officer.getStats().setXP(plugin.getXPForLevel(level));
58
59 for (String id : base) {
60 officer.getStats().setSkillLevel(id, 1);
61 }
62 for (String id : elite) {
63 officer.getStats().setSkillLevel(id, 2);
64 }
65 return officer;
66 }
67 }
68
71
72 static {
73 CryopodOfficerTemplate t;
74
75 // BEGIN LEVEL 7 OFFICERS
76
77 // fast high-tech ship
78 t = new CryopodOfficerTemplate();
79 t.elite.add(Skills.TARGET_ANALYSIS);
80 t.elite.add(Skills.ENERGY_WEAPON_MASTERY);
81 t.elite.add(Skills.FIELD_MODULATION);
82 t.elite.add(Skills.GUNNERY_IMPLANTS);
83 t.elite.add(Skills.SYSTEMS_EXPERTISE);
84 t.base.add(Skills.COMBAT_ENDURANCE);
85 t.base.add(Skills.HELMSMANSHIP);
86 TEMPLATES_EXCEPTIONAL.add(t, 10f);
87
88 // slow high-tech ship
89 t = new CryopodOfficerTemplate();
90 t.elite.add(Skills.HELMSMANSHIP);
91 t.elite.add(Skills.ENERGY_WEAPON_MASTERY);
92 t.elite.add(Skills.FIELD_MODULATION);
93 t.elite.add(Skills.GUNNERY_IMPLANTS);
94 t.elite.add(Skills.ORDNANCE_EXPERTISE);
95 t.base.add(Skills.TARGET_ANALYSIS);
96 t.base.add(Skills.COMBAT_ENDURANCE);
97 TEMPLATES_EXCEPTIONAL.add(t, 10f);
98
99 // hull/armor tank, low tech
100 t = new CryopodOfficerTemplate();
101 t.elite.add(Skills.DAMAGE_CONTROL);
102 t.elite.add(Skills.IMPACT_MITIGATION);
103 t.elite.add(Skills.POLARIZED_ARMOR);
104 t.elite.add(Skills.BALLISTIC_MASTERY);
105 t.elite.add(Skills.TARGET_ANALYSIS);
106 t.base.add(Skills.MISSILE_SPECIALIZATION);
107 t.base.add(Skills.GUNNERY_IMPLANTS);
108 TEMPLATES_EXCEPTIONAL.add(t, 5f);
109
110 t = new CryopodOfficerTemplate();
111 t.elite.add(Skills.ORDNANCE_EXPERTISE);
112 t.elite.add(Skills.IMPACT_MITIGATION);
113 t.elite.add(Skills.POLARIZED_ARMOR);
114 t.elite.add(Skills.BALLISTIC_MASTERY);
115 t.elite.add(Skills.TARGET_ANALYSIS);
116 t.base.add(Skills.MISSILE_SPECIALIZATION);
117 t.base.add(Skills.GUNNERY_IMPLANTS);
118 TEMPLATES_EXCEPTIONAL.add(t, 5f);
119
120 // phase ship
121 t = new CryopodOfficerTemplate();
122 t.elite.add(Skills.IMPACT_MITIGATION);
123 t.elite.add(Skills.FIELD_MODULATION);
124 t.elite.add(Skills.TARGET_ANALYSIS);
125 t.elite.add(Skills.SYSTEMS_EXPERTISE);
126 t.elite.add(Skills.COMBAT_ENDURANCE);
127 t.base.add(Skills.POLARIZED_ARMOR);
128 t.base.add(Skills.ENERGY_WEAPON_MASTERY);
129 TEMPLATES_EXCEPTIONAL.add(t, 10f);
130
131
132 // generally-ok-for-most-ships, take 1
133 t = new CryopodOfficerTemplate();
134 t.elite.add(Skills.FIELD_MODULATION);
135 t.elite.add(Skills.ORDNANCE_EXPERTISE);
136 t.elite.add(Skills.TARGET_ANALYSIS);
137 t.elite.add(Skills.POINT_DEFENSE);
138 t.elite.add(Skills.GUNNERY_IMPLANTS);
139 t.base.add(Skills.HELMSMANSHIP);
140 t.base.add(Skills.COMBAT_ENDURANCE);
141 TEMPLATES_EXCEPTIONAL.add(t, 5f);
142
143 // generally-ok-for-most-ships, take 2
144 t = new CryopodOfficerTemplate();
145 t.elite.add(Skills.FIELD_MODULATION);
146 t.elite.add(Skills.ORDNANCE_EXPERTISE);
147 t.elite.add(Skills.TARGET_ANALYSIS);
148 t.elite.add(Skills.IMPACT_MITIGATION);
149 t.elite.add(Skills.GUNNERY_IMPLANTS);
150 t.base.add(Skills.HELMSMANSHIP);
151 t.base.add(Skills.COMBAT_ENDURANCE);
152 TEMPLATES_EXCEPTIONAL.add(t, 5f);
153
154
155 // SO, ballistic weapons
156 t = new CryopodOfficerTemplate();
157 t.elite.add(Skills.COMBAT_ENDURANCE);
158 t.elite.add(Skills.TARGET_ANALYSIS);
159 t.elite.add(Skills.SYSTEMS_EXPERTISE);
160 t.elite.add(Skills.DAMAGE_CONTROL);
161 t.elite.add(Skills.IMPACT_MITIGATION);
162 t.base.add(Skills.FIELD_MODULATION);
163 t.base.add(Skills.BALLISTIC_MASTERY);
164 TEMPLATES_EXCEPTIONAL.add(t, 5f);
165
166 // SO, energy weapons
167 t = new CryopodOfficerTemplate();
168 t.elite.add(Skills.COMBAT_ENDURANCE);
169 t.elite.add(Skills.TARGET_ANALYSIS);
170 t.elite.add(Skills.SYSTEMS_EXPERTISE);
171 t.elite.add(Skills.DAMAGE_CONTROL);
172 t.elite.add(Skills.IMPACT_MITIGATION);
173 t.base.add(Skills.FIELD_MODULATION);
174 t.base.add(Skills.ENERGY_WEAPON_MASTERY);
175 TEMPLATES_EXCEPTIONAL.add(t, 5f);
176 // END LEVEL 7 OFFICERS
177
178
179 // BEGIN LEVEL 5 OFFICERS
180
181 // generic, take 1
182 t = new CryopodOfficerTemplate();
183 t.elite.add(Skills.IMPACT_MITIGATION);
184 t.base.add(Skills.ORDNANCE_EXPERTISE);
185 t.base.add(Skills.FIELD_MODULATION);
186 t.base.add(Skills.TARGET_ANALYSIS);
187 t.base.add(Skills.COMBAT_ENDURANCE);
188 TEMPLATES_NORMAL.add(t, 5f);
189
190 // generic, take 2
191 t = new CryopodOfficerTemplate();
192 t.elite.add(Skills.TARGET_ANALYSIS);
193 t.base.add(Skills.IMPACT_MITIGATION);
194 t.base.add(Skills.ORDNANCE_EXPERTISE);
195 t.base.add(Skills.FIELD_MODULATION);
196 t.base.add(Skills.COMBAT_ENDURANCE);
197 TEMPLATES_NORMAL.add(t, 5f);
198
199 // generic, take 3
200 t = new CryopodOfficerTemplate();
201 t.elite.add(Skills.SYSTEMS_EXPERTISE);
202 t.base.add(Skills.TARGET_ANALYSIS);
203 t.base.add(Skills.ORDNANCE_EXPERTISE);
204 t.base.add(Skills.FIELD_MODULATION);
205 t.base.add(Skills.COMBAT_ENDURANCE);
206 TEMPLATES_NORMAL.add(t, 5f);
207
208 // low-tech, take 1
209 t = new CryopodOfficerTemplate();
210 t.elite.add(Skills.MISSILE_SPECIALIZATION);
211 t.base.add(Skills.TARGET_ANALYSIS);
212 t.base.add(Skills.BALLISTIC_MASTERY);
213 t.base.add(Skills.IMPACT_MITIGATION);
214 t.base.add(Skills.COMBAT_ENDURANCE);
215 TEMPLATES_NORMAL.add(t, 5f);
216
217 // low-tech, take 2
218 t = new CryopodOfficerTemplate();
219 t.elite.add(Skills.BALLISTIC_MASTERY);
220 t.base.add(Skills.GUNNERY_IMPLANTS);
221 t.base.add(Skills.TARGET_ANALYSIS);
222 t.base.add(Skills.IMPACT_MITIGATION);
223 t.base.add(Skills.COMBAT_ENDURANCE);
224 TEMPLATES_NORMAL.add(t, 5f);
225
226 // low-tech, take 3
227 t = new CryopodOfficerTemplate();
228 t.elite.add(Skills.BALLISTIC_MASTERY);
229 t.base.add(Skills.MISSILE_SPECIALIZATION);
230 t.base.add(Skills.TARGET_ANALYSIS);
231 t.base.add(Skills.IMPACT_MITIGATION);
232 t.base.add(Skills.DAMAGE_CONTROL);
233 TEMPLATES_NORMAL.add(t, 5f);
234
235 // low-tech, take 4
236 t = new CryopodOfficerTemplate();
237 t.elite.add(Skills.HELMSMANSHIP);
238 t.base.add(Skills.MISSILE_SPECIALIZATION);
239 t.base.add(Skills.TARGET_ANALYSIS);
240 t.base.add(Skills.IMPACT_MITIGATION);
241 t.base.add(Skills.BALLISTIC_MASTERY);
242 TEMPLATES_NORMAL.add(t, 5f);
243
244 // high-tech, take 1
245 t = new CryopodOfficerTemplate();
246 t.elite.add(Skills.ENERGY_WEAPON_MASTERY);
247 t.base.add(Skills.TARGET_ANALYSIS);
248 t.base.add(Skills.MISSILE_SPECIALIZATION);
249 t.base.add(Skills.ORDNANCE_EXPERTISE);
250 t.base.add(Skills.COMBAT_ENDURANCE);
251 TEMPLATES_NORMAL.add(t, 5f);
252
253 // high-tech, take 2
254 t = new CryopodOfficerTemplate();
255 t.elite.add(Skills.ENERGY_WEAPON_MASTERY);
256 t.base.add(Skills.TARGET_ANALYSIS);
257 t.base.add(Skills.HELMSMANSHIP);
258 t.base.add(Skills.ORDNANCE_EXPERTISE);
259 t.base.add(Skills.COMBAT_ENDURANCE);
260 TEMPLATES_NORMAL.add(t, 5f);
261
262 // phase ship, take 1
263 t = new CryopodOfficerTemplate();
264 t.elite.add(Skills.FIELD_MODULATION);
265 t.base.add(Skills.IMPACT_MITIGATION);
266 t.base.add(Skills.TARGET_ANALYSIS);
267 t.base.add(Skills.SYSTEMS_EXPERTISE);
268 t.base.add(Skills.COMBAT_ENDURANCE);
269 TEMPLATES_NORMAL.add(t, 5f);
270
271 // phase ship, take 2
272 t = new CryopodOfficerTemplate();
273 t.elite.add(Skills.FIELD_MODULATION);
274 t.base.add(Skills.IMPACT_MITIGATION);
275 t.base.add(Skills.TARGET_ANALYSIS);
276 t.base.add(Skills.MISSILE_SPECIALIZATION);
277 t.base.add(Skills.COMBAT_ENDURANCE);
278 TEMPLATES_NORMAL.add(t, 5f);
279
280
281 // SO? fairly generic
282 t = new CryopodOfficerTemplate();
283 t.elite.add(Skills.TARGET_ANALYSIS);
284 t.base.add(Skills.COMBAT_ENDURANCE);
285 t.base.add(Skills.MISSILE_SPECIALIZATION);
286 t.base.add(Skills.IMPACT_MITIGATION);
287 t.base.add(Skills.FIELD_MODULATION);
288 TEMPLATES_NORMAL.add(t, 10f);
289
290 // END LEVEL 5 OFFICERS
291
292 }
293
294}
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
static SettingsAPI getSettings()
Definition Global.java:57
static SectorAPI getSector()
Definition Global.java:65
static WeightedRandomPicker< CryopodOfficerTemplate > TEMPLATES_NORMAL
static WeightedRandomPicker< CryopodOfficerTemplate > TEMPLATES_EXCEPTIONAL
void set(String key, Object value)
MutableCharacterStatsAPI getStats()
void setPersonality(String personality)