001package com.fs.starfarer.api.impl.campaign.world; 002 003import java.awt.Color; 004import java.util.Random; 005 006import com.fs.starfarer.api.Global; 007import com.fs.starfarer.api.campaign.CargoAPI; 008import com.fs.starfarer.api.campaign.CargoAPI.CargoItemType; 009import com.fs.starfarer.api.campaign.LocationAPI; 010import com.fs.starfarer.api.campaign.PlanetAPI; 011import com.fs.starfarer.api.campaign.SectorAPI; 012import com.fs.starfarer.api.campaign.SectorEntityToken; 013import com.fs.starfarer.api.campaign.SpecialItemData; 014import com.fs.starfarer.api.campaign.StarSystemAPI; 015import com.fs.starfarer.api.impl.campaign.ids.Commodities; 016import com.fs.starfarer.api.impl.campaign.ids.Conditions; 017import com.fs.starfarer.api.impl.campaign.ids.Entities; 018import com.fs.starfarer.api.impl.campaign.ids.Factions; 019import com.fs.starfarer.api.impl.campaign.ids.Items; 020import com.fs.starfarer.api.impl.campaign.ids.MemFlags; 021import com.fs.starfarer.api.impl.campaign.ids.Planets; 022import com.fs.starfarer.api.impl.campaign.ids.StarTypes; 023import com.fs.starfarer.api.impl.campaign.ids.Tags; 024import com.fs.starfarer.api.impl.campaign.procgen.StarSystemGenerator; 025import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseThemeGenerator; 026import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseThemeGenerator.AddedEntity; 027import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseThemeGenerator.EntityLocation; 028import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.BaseSalvageSpecial; 029import com.fs.starfarer.api.impl.campaign.shared.WormholeManager; 030import com.fs.starfarer.api.impl.campaign.shared.WormholeManager.WormholeItemData; 031 032public class Limbo { 033 034 public void generate(SectorAPI sector) { 035 036 StarSystemAPI system = sector.createStarSystem("Limbo"); 037 system.addTag(Tags.THEME_HIDDEN); 038 system.addTag(Tags.THEME_SPECIAL); 039 float w = Global.getSettings().getFloat("sectorWidth"); 040 float h = Global.getSettings().getFloat("sectorHeight"); 041 system.getLocation().set(-w/2f + 2300f, -h/2f + 2100f); 042 043 044 LocationAPI hyper = Global.getSector().getHyperspace(); 045 046 system.setBackgroundTextureFilename("graphics/backgrounds/background4.jpg"); 047 048 049 // create the star and generate the hyperspace anchor for this system 050 PlanetAPI star = system.initStar("limbo", // unique id for this star 051 StarTypes.BROWN_DWARF, // id in planets.json 052 400f, // radius (in pixels at default zoom) 053 250); // corona radius, from star edge 054 055 056 system.setLightColor(new Color(180, 205, 140)); // light color in entire system, affects all entities 057 058 Random random = StarSystemGenerator.random; 059 060 PlanetAPI planet = system.addPlanet("limbo_hades", star, "Hades", Planets.ROCKY_METALLIC, 215, 60, 1700, 75); 061 planet.getMemoryWithoutUpdate().set("$hades", true); 062 planet.setCustomDescriptionId("limbo_hades"); 063 planet.getMarket().addCondition(Conditions.NO_ATMOSPHERE); 064 planet.getMarket().addCondition(Conditions.COLD); 065 planet.getMarket().addCondition(Conditions.POOR_LIGHT); 066 planet.getMarket().addCondition(Conditions.RARE_ORE_RICH); 067 068 float orbitRadius = planet.getRadius() + 300f; 069 float orbitDays = orbitRadius / (20f + random.nextFloat() * 5f); 070 EntityLocation loc = new EntityLocation(); 071 loc.orbit = Global.getFactory().createCircularOrbitPointingDown(planet, random.nextFloat() * 360f, 072 orbitRadius, orbitDays); 073 AddedEntity added = BaseThemeGenerator.addEntity(null, system, loc, Entities.STATION_MINING, Factions.NEUTRAL); 074 added.entity.getMemoryWithoutUpdate().set(MemFlags.SALVAGE_SPEC_ID_OVERRIDE, "limbo_mining_station"); 075 added.entity.setName("Automated Mining Station"); 076 added.entity.getMemoryWithoutUpdate().set("$limboMiningStation", true); 077 added.entity.setCustomDescriptionId("station_mining_automated"); 078 079 CargoAPI cargo = Global.getFactory().createCargo(true); 080 cargo.addCommodity(Commodities.RARE_METALS, 200f + random.nextInt(101)); 081 BaseSalvageSpecial.addExtraSalvage(added.entity, cargo); 082 083 084 StarSystemGenerator.addStableLocations(system, 1); 085 086 087 for (SectorEntityToken curr : system.getEntitiesWithTag(Tags.STABLE_LOCATION)) { 088 curr.getMemoryWithoutUpdate().set(WormholeManager.LIMBO_STABLE_LOCATION, true); 089 090 orbitRadius = curr.getRadius() + 200f; 091 orbitDays = orbitRadius / (20f + random.nextFloat() * 5f); 092 loc = new EntityLocation(); 093 loc.orbit = Global.getFactory().createCircularOrbitPointingDown(curr, random.nextFloat() * 360f, 094 orbitRadius, orbitDays); 095 added = BaseThemeGenerator.addEntity(null, system, loc, Entities.LARGE_CACHE, Factions.NEUTRAL); 096 added.entity.getMemoryWithoutUpdate().set(MemFlags.SALVAGE_SPEC_ID_OVERRIDE, Entities.SPEC_LIMBO_WORMHOLE_CACHE); 097 added.entity.setName("Mothballed Equipment Cache"); 098 added.entity.setCustomDescriptionId(Entities.SPEC_LIMBO_WORMHOLE_CACHE); 099 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