Starsector API
Loading...
Searching...
No Matches
Limbo.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.world;
2
3import java.awt.Color;
4import java.util.Random;
5
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.campaign.CargoAPI;
8import com.fs.starfarer.api.campaign.CargoAPI.CargoItemType;
9import com.fs.starfarer.api.campaign.LocationAPI;
10import com.fs.starfarer.api.campaign.PlanetAPI;
11import com.fs.starfarer.api.campaign.SectorAPI;
12import com.fs.starfarer.api.campaign.SectorEntityToken;
13import com.fs.starfarer.api.campaign.SpecialItemData;
14import com.fs.starfarer.api.campaign.StarSystemAPI;
15import com.fs.starfarer.api.impl.campaign.ids.Commodities;
16import com.fs.starfarer.api.impl.campaign.ids.Conditions;
17import com.fs.starfarer.api.impl.campaign.ids.Entities;
18import com.fs.starfarer.api.impl.campaign.ids.Factions;
19import com.fs.starfarer.api.impl.campaign.ids.Items;
20import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
21import com.fs.starfarer.api.impl.campaign.ids.Planets;
22import com.fs.starfarer.api.impl.campaign.ids.StarTypes;
23import com.fs.starfarer.api.impl.campaign.ids.Tags;
24import com.fs.starfarer.api.impl.campaign.procgen.StarSystemGenerator;
25import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseThemeGenerator;
26import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseThemeGenerator.AddedEntity;
27import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseThemeGenerator.EntityLocation;
28import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.BaseSalvageSpecial;
29import com.fs.starfarer.api.impl.campaign.shared.WormholeManager;
30import com.fs.starfarer.api.impl.campaign.shared.WormholeManager.WormholeItemData;
31
32public class Limbo {
33
34 public void generate(SectorAPI sector) {
35
36 StarSystemAPI system = sector.createStarSystem("Limbo");
37 system.addTag(Tags.THEME_HIDDEN);
38 system.addTag(Tags.THEME_SPECIAL);
39 float w = Global.getSettings().getFloat("sectorWidth");
40 float h = Global.getSettings().getFloat("sectorHeight");
41 system.getLocation().set(-w/2f + 2300f, -h/2f + 2100f);
42
43
44 LocationAPI hyper = Global.getSector().getHyperspace();
45
46 system.setBackgroundTextureFilename("graphics/backgrounds/background4.jpg");
47
48
49 // create the star and generate the hyperspace anchor for this system
50 PlanetAPI star = system.initStar("limbo", // unique id for this star
51 StarTypes.BROWN_DWARF, // id in planets.json
52 400f, // radius (in pixels at default zoom)
53 250); // corona radius, from star edge
54
55
56 system.setLightColor(new Color(180, 205, 140)); // light color in entire system, affects all entities
57
58 Random random = StarSystemGenerator.random;
59
60 PlanetAPI planet = system.addPlanet("limbo_hades", star, "Hades", Planets.ROCKY_METALLIC, 215, 60, 1700, 75);
61 planet.getMemoryWithoutUpdate().set("$hades", true);
62 planet.setCustomDescriptionId("limbo_hades");
63 planet.getMarket().addCondition(Conditions.NO_ATMOSPHERE);
64 planet.getMarket().addCondition(Conditions.COLD);
65 planet.getMarket().addCondition(Conditions.POOR_LIGHT);
66 planet.getMarket().addCondition(Conditions.RARE_ORE_RICH);
67
68 float orbitRadius = planet.getRadius() + 300f;
69 float orbitDays = orbitRadius / (20f + random.nextFloat() * 5f);
70 EntityLocation loc = new EntityLocation();
71 loc.orbit = Global.getFactory().createCircularOrbitPointingDown(planet, random.nextFloat() * 360f,
72 orbitRadius, orbitDays);
73 AddedEntity added = BaseThemeGenerator.addEntity(null, system, loc, Entities.STATION_MINING, Factions.NEUTRAL);
74 added.entity.getMemoryWithoutUpdate().set(MemFlags.SALVAGE_SPEC_ID_OVERRIDE, "limbo_mining_station");
75 added.entity.setName("Automated Mining Station");
76 added.entity.getMemoryWithoutUpdate().set("$limboMiningStation", true);
77 added.entity.setCustomDescriptionId("station_mining_automated");
78
79 CargoAPI cargo = Global.getFactory().createCargo(true);
80 cargo.addCommodity(Commodities.RARE_METALS, 200f + random.nextInt(101));
81 BaseSalvageSpecial.addExtraSalvage(added.entity, cargo);
82
83
84 StarSystemGenerator.addStableLocations(system, 1);
85
86
87 for (SectorEntityToken curr : system.getEntitiesWithTag(Tags.STABLE_LOCATION)) {
88 curr.getMemoryWithoutUpdate().set(WormholeManager.LIMBO_STABLE_LOCATION, true);
89
90 orbitRadius = curr.getRadius() + 200f;
91 orbitDays = orbitRadius / (20f + random.nextFloat() * 5f);
92 loc = new EntityLocation();
93 loc.orbit = Global.getFactory().createCircularOrbitPointingDown(curr, random.nextFloat() * 360f,
94 orbitRadius, orbitDays);
95 added = BaseThemeGenerator.addEntity(null, system, loc, Entities.LARGE_CACHE, Factions.NEUTRAL);
96 added.entity.getMemoryWithoutUpdate().set(MemFlags.SALVAGE_SPEC_ID_OVERRIDE, Entities.SPEC_LIMBO_WORMHOLE_CACHE);
97 added.entity.setName("Mothballed Equipment Cache");
98 added.entity.setCustomDescriptionId(Entities.SPEC_LIMBO_WORMHOLE_CACHE);
99 added.entity.getMemoryWithoutUpdate().set("$limboWormholeCache", true);
100
101 cargo = Global.getFactory().createCargo(true);
102 SpecialItemData item = WormholeManager.createWormholeAnchor("foxtrot", "Foxtrot");
103 cargo.addItems(CargoItemType.SPECIAL, item, 1);
104
105 item = new SpecialItemData(Items.WORMHOLE_SCANNER, null);
106 cargo.addItems(CargoItemType.SPECIAL, item, 1);
107
108 cargo.addFuel(110 + random.nextInt(21));
109 BaseSalvageSpecial.addExtraSalvage(added.entity, cargo);
110
111 break;
112 }
113
114
115
116 if (Global.getSettings().isDevMode()) {
117 orbitRadius = planet.getRadius() + 600f;
118 orbitDays = orbitRadius / (20f + random.nextFloat() * 5f);
119 loc = new EntityLocation();
120 loc.orbit = Global.getFactory().createCircularOrbitPointingDown(planet, random.nextFloat() * 360f,
121 orbitRadius, orbitDays);
122 added = BaseThemeGenerator.addEntity(null, system, loc, Entities.EQUIPMENT_CACHE, Factions.NEUTRAL);
123 added.entity.setName("Test Wormhole Cache");
124
125 CargoAPI testCargo = Global.getFactory().createCargo(true);
126
127 WormholeItemData itemData = new WormholeItemData("standard", "bravo", "Bravo");
128 SpecialItemData item = new SpecialItemData(Items.WORMHOLE_ANCHOR, itemData.toJsonStr());
129 testCargo.addItems(CargoItemType.SPECIAL, item, 1);
130
131 itemData = new WormholeItemData("standard", "sierra", "Sierra");
132 item = new SpecialItemData(Items.WORMHOLE_ANCHOR, itemData.toJsonStr());
133 testCargo.addItems(CargoItemType.SPECIAL, item, 1);
134
135 item = new SpecialItemData(Items.WORMHOLE_SCANNER, null);
136 testCargo.addItems(CargoItemType.SPECIAL, item, 1);
137
138 BaseSalvageSpecial.addExtraSalvage(added.entity, testCargo);
139 }
140
141 system.autogenerateHyperspaceJumpPoints(true, true);
142 }
143}
144
145
146
147
148
149
150
151
152
153
static SettingsAPI getSettings()
Definition Global.java:51
static FactoryAPI getFactory()
Definition Global.java:35
static SectorAPI getSector()
Definition Global.java:59
CargoAPI createCargo(boolean unlimitedStacks)
OrbitAPI createCircularOrbitPointingDown(SectorEntityToken focus, float angle, float orbitRadius, float orbitDays)