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