Starsector API
Loading...
Searching...
No Matches
TTBlackSite.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.world;
2
3import java.awt.Color;
4
5import org.lwjgl.util.vector.Vector2f;
6
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.CampaignFleetAPI;
9import com.fs.starfarer.api.campaign.CargoAPI;
10import com.fs.starfarer.api.campaign.CustomCampaignEntityAPI;
11import com.fs.starfarer.api.campaign.InteractionDialogAPI;
12import com.fs.starfarer.api.campaign.LocationAPI;
13import com.fs.starfarer.api.campaign.NascentGravityWellAPI;
14import com.fs.starfarer.api.campaign.PlanetAPI;
15import com.fs.starfarer.api.campaign.SectorAPI;
16import com.fs.starfarer.api.campaign.SectorEntityToken;
17import com.fs.starfarer.api.campaign.StarSystemAPI;
18import com.fs.starfarer.api.characters.FullName;
19import com.fs.starfarer.api.characters.FullName.Gender;
20import com.fs.starfarer.api.characters.PersonAPI;
21import com.fs.starfarer.api.combat.BattleCreationContext;
22import com.fs.starfarer.api.fleet.FleetMemberAPI;
23import com.fs.starfarer.api.impl.MusicPlayerPluginImpl;
24import com.fs.starfarer.api.impl.campaign.CoreLifecyclePluginImpl;
25import com.fs.starfarer.api.impl.campaign.DerelictShipEntityPlugin;
26import com.fs.starfarer.api.impl.campaign.DerelictShipEntityPlugin.DerelictShipData;
27import com.fs.starfarer.api.impl.campaign.FleetEncounterContext;
28import com.fs.starfarer.api.impl.campaign.FleetInteractionDialogPluginImpl.BaseFIDDelegate;
29import com.fs.starfarer.api.impl.campaign.FleetInteractionDialogPluginImpl.FIDConfig;
30import com.fs.starfarer.api.impl.campaign.FleetInteractionDialogPluginImpl.FIDConfigGen;
31import com.fs.starfarer.api.impl.campaign.RuleBasedInteractionDialogPluginImpl;
32import com.fs.starfarer.api.impl.campaign.WarningBeaconEntityPlugin;
33import com.fs.starfarer.api.impl.campaign.fleets.FleetFactoryV3;
34import com.fs.starfarer.api.impl.campaign.ids.Conditions;
35import com.fs.starfarer.api.impl.campaign.ids.Entities;
36import com.fs.starfarer.api.impl.campaign.ids.Factions;
37import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
38import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
39import com.fs.starfarer.api.impl.campaign.ids.Personalities;
40import com.fs.starfarer.api.impl.campaign.ids.Pings;
41import com.fs.starfarer.api.impl.campaign.ids.Ranks;
42import com.fs.starfarer.api.impl.campaign.ids.Skills;
43import com.fs.starfarer.api.impl.campaign.ids.Tags;
44import com.fs.starfarer.api.impl.campaign.ids.Terrain;
45import com.fs.starfarer.api.impl.campaign.procgen.NebulaEditor;
46import com.fs.starfarer.api.impl.campaign.procgen.StarSystemGenerator.StarSystemType;
47import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseThemeGenerator;
48import com.fs.starfarer.api.impl.campaign.procgen.themes.RemnantSeededFleetManager.RemnantFleetInteractionConfigGen;
49import com.fs.starfarer.api.impl.campaign.procgen.themes.SalvageSpecialAssigner.ShipRecoverySpecialCreator;
50import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.ShipRecoverySpecial.PerShipData;
51import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.ShipRecoverySpecial.ShipCondition;
52import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.ShipRecoverySpecial.ShipRecoverySpecialData;
53import com.fs.starfarer.api.impl.campaign.terrain.HyperspaceTerrainPlugin;
54import com.fs.starfarer.api.impl.campaign.terrain.MagneticFieldTerrainPlugin.MagneticFieldParams;
55import com.fs.starfarer.api.loading.VariantSource;
56import com.fs.starfarer.api.util.Misc;
57
58public class TTBlackSite {
59
60 public static String HAMATSU_ID = "hamatsu";
61
62 public static String NASCENT_WELL_KEY = "$ttBlackSite_well";
63 public static String DEFEATED_ZIGGURAT_KEY = "$defeatedZiggurat";
64
65 public static class ZigFIDConfig implements FIDConfigGen {
66 public FIDConfig createConfig() {
67 FIDConfig config = new FIDConfig();
68
69// config.alwaysAttackVsAttack = true;
70// config.leaveAlwaysAvailable = true;
71// config.showFleetAttitude = false;
72 config.showTransponderStatus = false;
73 config.showEngageText = false;
74 config.alwaysPursue = true;
75 config.dismissOnLeave = false;
76 //config.lootCredits = false;
77 config.withSalvage = false;
78 //config.showVictoryText = false;
79 config.printXPToDialog = true;
80
81 config.noSalvageLeaveOptionText = "Continue";
82// config.postLootLeaveOptionText = "Continue";
83// config.postLootLeaveHasShortcut = false;
84
85 config.delegate = new BaseFIDDelegate() {
86 public void postPlayerSalvageGeneration(InteractionDialogAPI dialog, FleetEncounterContext context, CargoAPI salvage) {
87 new RemnantFleetInteractionConfigGen().createConfig().delegate.
88 postPlayerSalvageGeneration(dialog, context, salvage);
89 }
90 public void notifyLeave(InteractionDialogAPI dialog) {
91
93 if (!(other instanceof CampaignFleetAPI)) {
94 dialog.dismiss();
95 return;
96 }
97 CampaignFleetAPI fleet = (CampaignFleetAPI) other;
98
99 if (!fleet.isEmpty()) {
100 dialog.dismiss();
101 return;
102 }
103
105
106 PerShipData ship = new PerShipData("ziggurat_Hull", ShipCondition.WRECKED, 0f);
107 ship.shipName = "TTS Xenorphica";
108 DerelictShipData params = new DerelictShipData(ship, false);
110 fleet.getContainingLocation(),
111 Entities.WRECK, Factions.NEUTRAL, params);
112 Misc.makeImportant(entity, "ziggurat");
113 entity.getMemoryWithoutUpdate().set("$ziggurat", true);
114
115 entity.getLocation().x = fleet.getLocation().x + (50f - (float) Math.random() * 100f);
116 entity.getLocation().y = fleet.getLocation().y + (50f - (float) Math.random() * 100f);
117
118 ShipRecoverySpecialData data = new ShipRecoverySpecialData(null);
119 data.notNowOptionExits = true;
120 data.noDescriptionText = true;
122 PerShipData copy = (PerShipData) dsep.getData().ship.clone();
123 copy.variant = Global.getSettings().getVariant(copy.variantId).clone();
124 copy.variantId = null;
125 copy.variant.addTag(Tags.SHIP_CAN_NOT_SCUTTLE);
126 copy.variant.addTag(Tags.SHIP_UNIQUE_SIGNATURE);
127 data.addShip(copy);
128
129 Misc.setSalvageSpecial(entity, data);
130
131 dialog.setInteractionTarget(entity);
133 dialog.setPlugin(plugin);
134 plugin.init(dialog);
135 }
136
137 public void battleContextCreated(InteractionDialogAPI dialog, BattleCreationContext bcc) {
138 bcc.aiRetreatAllowed = false;
139 bcc.objectivesAllowed = false;
140 bcc.fightToTheLast = true;
141 bcc.enemyDeployAll = true;
142 }
143 };
144 return config;
145 }
146 }
147
148
149 public void generate(SectorAPI sector) {
150 StarSystemAPI system = sector.createStarSystem("Unknown Location");
151 //system.setType(StarSystemType.NEBULA);
152 system.setName("Unknown Location"); // to get rid of "Star System" at the end of the name
153 system.setType(StarSystemType.DEEP_SPACE);
154 system.addTag(Tags.THEME_UNSAFE);
155 system.addTag(Tags.THEME_HIDDEN);
156 system.addTag(Tags.THEME_SPECIAL);
158
159 system.getMemoryWithoutUpdate().set(MusicPlayerPluginImpl.MUSIC_SET_MEM_KEY, "music_campaign_alpha_site");
160
161 system.setBackgroundTextureFilename("graphics/backgrounds/background4.jpg");
162 //system.getLocation().set(2500, 3000);
163 system.getLocation().set(4000, 2500);
164
166 NebulaEditor editor = new NebulaEditor(hyperTerrain);
167 editor.clearArc(system.getLocation().x, system.getLocation().y, 0, 200, 0, 360f);
168// editor.regenNoise();
169// editor.noisePrune(0.8f);
170// editor.regenNoise();
171
172 SectorEntityToken center = system.initNonStarCenter();
173
174 system.setLightColor(new Color(225,170,255,255)); // light color in entire system, affects all entities
175 center.addTag(Tags.AMBIENT_LS);
176
177 String type = "barren";
178 type = "irradiated";
179 PlanetAPI rock = system.addPlanet("site_alpha", center, "Alpha Site", type, 0, 150, 1200, 40);
180 //rock.setCustomDescriptionId("???");
181 rock.getMemoryWithoutUpdate().set("$ttBlackSite", true);
182
188
189 rock.getMarket().getMemoryWithoutUpdate().set("$ruinsExplored", true);
190 //If this is done, shows up in intel planet list; doesn't matter either way
191 //Misc.setFullySurveyed(rock.getMarket(), null, false);
192
194
195 rock.setOrbit(null);
196 rock.setLocation(1200, 300);
197
199 new MagneticFieldParams(150f, // terrain effect band width
200 500, // terrain effect middle radius
201 rock, // entity that it's around
202 350f, // visual band start
203 650f, // visual band end
204 new Color(60, 60, 150, 90), // base color
205 1f, // probability to spawn aurora sequence, checked once/day when no aurora in progress
206 new Color(130, 60, 150, 130),
207 new Color(150, 30, 120, 150),
208 new Color(200, 50, 130, 190),
209 new Color(250, 70, 150, 240),
210 new Color(200, 80, 130, 255),
211 new Color(75, 0, 160, 255),
212 new Color(127, 0, 255, 255)
213 ));
214 field.setCircularOrbit(rock, 0, 0, 75);
215
217 beacon.setCircularOrbitPointingDown(rock, 0, 2500, 60);
218
219 beacon.getMemoryWithoutUpdate().set("$ttBlackSite", true);
222 beacon.getMemoryWithoutUpdate().set(WarningBeaconEntityPlugin.PING_COLOR_KEY, new Color(250,125,0,255));
223 beacon.getMemoryWithoutUpdate().set(WarningBeaconEntityPlugin.GLOW_COLOR_KEY, new Color(250,55,0,255));
224
225
227 cache.getMemoryWithoutUpdate().set("$ttWeaponsCache", true);
228 cache.getLocation().set(11111, 11111);
229
230// JumpPointAPI jumpPoint = Global.getFactory().createJumpPoint("rock_jump_point", "Unstable Jump-point");
231// OrbitAPI orbit = Global.getFactory().createCircularOrbit(rock, 0, 2500, 90);
232// jumpPoint.setOrbit(orbit);
233// //jumpPoint.setRelatedPlanet(magec2);
234// jumpPoint.setStandardWormholeToHyperspaceVisual();
235// system.addEntity(jumpPoint);
236
237 system.generateAnchorIfNeeded();
238
241 well.setColorOverride(new Color(125, 50, 255));
242 hyper.addEntity(well);
244
245 addFleet(rock);
246
247 SectorEntityToken hamatsu = addDerelict(system, beacon,
248 "venture_Outdated", "ISS Hamatsu", HAMATSU_ID, ShipCondition.BATTERED, 200, true);
249 hamatsu.getMemoryWithoutUpdate().set("$hamatsu", true);
250
252 }
253
257
258
259 public static void addFleet(SectorEntityToken rock) {
261 fleet.setName("Unidentified Vessel");
262 fleet.setNoFactionInName(true);
267 //fleet.getMemoryWithoutUpdate().set(MemFlags.MEMORY_KEY_PATROL_FLEET, true); // so it keeps transponder on
270 fleet.getMemoryWithoutUpdate().set("$ziggurat", true);
271
273
274
275 fleet.getFleetData().addFleetMember("ziggurat_Experimental");
277
278 fleet.clearAbilities();
279// fleet.addAbility(Abilities.TRANSPONDER);
280// fleet.getAbility(Abilities.TRANSPONDER).activate();
281
282 // so it never shows as "Unidentified Fleet" but isn't easier to spot due to using the actual transponder ability
283 fleet.setTransponderOn(true);
284
286 fleet.setCommander(person);
287
288 FleetMemberAPI flagship = fleet.getFlagship();
289 flagship.setCaptain(person);
290 flagship.updateStats();
291 flagship.getRepairTracker().setCR(flagship.getRepairTracker().getMaxCR());
292 flagship.setShipName("TTS Xenorphica");
293
294 // to "perm" the variant so it gets saved and not recreated from the "ziggurat_Experimental" id
295 flagship.setVariant(flagship.getVariant().clone(), false, false);
298
299
300 Vector2f loc = new Vector2f(rock.getLocation().x + 300 * ((float) Math.random() - 0.5f),
301 rock.getLocation().y + 300 * ((float) Math.random() - 0.5f));
302 fleet.setLocation(loc.x, loc.y);
303 rock.getContainingLocation().addEntity(fleet);
304
306 new ZigFIDConfig());
307
308 fleet.addScript(new ZigLeashAssignmentAI(fleet, rock));
309
310 }
311
312
315 person.setName(new FullName("Motes", "", Gender.ANY));
317 person.setPortraitSprite(Global.getSettings().getSpriteName("characters", "ziggurat_captain"));
320 person.setPostId(null);
321
322 person.getStats().setSkipRefresh(true);
323
324 person.getStats().setLevel(10);
331 //person.getStats().setSkillLevel(Skills.RELIABILITY_ENGINEERING, 2);
332 //person.getStats().setSkillLevel(Skills.RANGED_SPECIALIZATION, 2);
335 //person.getStats().setSkillLevel(Skills.PHASE_MASTERY, 2);
338
340
341 person.getStats().setSkipRefresh(false);
342
343 return person;
344 }
345
347 String variantId, String name, String id,
348 ShipCondition condition, float orbitRadius, boolean recoverable) {
349 DerelictShipData params = new DerelictShipData(new PerShipData(variantId, condition, 0f), false);
350 if (name != null) {
351 params.ship.shipName = name;
352 params.ship.nameAlwaysKnown = true;
353 params.ship.fleetMemberId = id;
354 }
356 ship.setDiscoverable(true);
357
358 float orbitDays = orbitRadius / (10f + (float) Math.random() * 5f);
359 ship.setCircularOrbit(focus, (float) Math.random() * 360f, orbitRadius, orbitDays);
360
361 if (recoverable) {
362 ShipRecoverySpecialCreator creator = new ShipRecoverySpecialCreator(null, 0, 0, false, null, null);
363 Misc.setSalvageSpecial(ship, creator.createSpecial(ship, null));
364 }
365 return ship;
366 }
367
368}
369
370
371
372
373
374
375
376
377
378
379
380
381
static SettingsAPI getSettings()
Definition Global.java:57
static FactoryAPI getFactory()
Definition Global.java:41
static SectorAPI getSector()
Definition Global.java:65
static CampaignFleetAPI createEmptyFleet(String factionId, String fleetType, MarketAPI market)
static final String FLEET_INTERACTION_DIALOG_CONFIG_OVERRIDE_GEN
static final String SHIP_UNIQUE_SIGNATURE
Definition Tags.java:199
void clearArc(float x, float y, float innerRadius, float outerRadius, float startAngle, float endAngle)
static SectorEntityToken addSalvageEntity(LocationAPI location, String id, String faction)
static SectorEntityToken addDerelict(StarSystemAPI system, SectorEntityToken focus, String variantId, String name, String id, ShipCondition condition, float orbitRadius, boolean recoverable)
static void addFleet(SectorEntityToken rock)
static void makeImportant(SectorEntityToken entity, String reason)
Definition Misc.java:4051
static void setSalvageSpecial(SectorEntityToken entity, Object data)
Definition Misc.java:3633
static CampaignTerrainAPI getHyperspaceTerrain()
Definition Misc.java:2308
String getSpriteName(String category, String id)
ShipVariantAPI getVariant(String variantId)
void setNoFactionInName(boolean noFactionInName)
void addFleetMember(FleetMemberAPI member)
void setInteractionTarget(SectorEntityToken interactionTarget)
void setPlugin(InteractionDialogPlugin plugin)
SectorEntityToken addTerrain(String terrainId, Object param)
PlanetAPI addPlanet(String id, SectorEntityToken focus, String name, String type, float angle, float radius, float orbitRadius, float orbitDays)
void addEntity(SectorEntityToken entity)
CustomCampaignEntityAPI addCustomEntity(String id, String name, String type, String factionId)
void setBackgroundTextureFilename(String backgroundTextureFilename)
StarSystemAPI createStarSystem(String name)
NascentGravityWellAPI createNascentGravityWell(SectorEntityToken target, float radius)
CustomCampaignEntityPlugin getCustomPlugin()
void setCircularOrbitPointingDown(SectorEntityToken focus, float angle, float orbitRadius, float orbitDays)
void autoUpdateHyperLocationBasedOnInSystemEntityAtRadius(SectorEntityToken entity, float radius)
void setCircularOrbit(SectorEntityToken focus, float angle, float orbitRadius, float orbitDays)
void addScript(EveryFrameScript script)
void setDiscoverable(Boolean discoverable)
void setTransponderOn(boolean transponderOn)
void set(String key, Object value)
void setPortraitSprite(String portraitSprite)
MutableCharacterStatsAPI getStats()
void setPersonality(String personality)
void setSource(VariantSource source)
void setCaptain(PersonAPI commander)
void setVariant(ShipVariantAPI variant, boolean withRefit, boolean withStatsUpdate)