mirror of
https://github.com/Anuken/Mindustry.git
synced 2026-01-25 14:01:03 -08:00
2167 lines
74 KiB
Java
2167 lines
74 KiB
Java
package mindustry.content;
|
|
|
|
import arc.*;
|
|
import arc.graphics.*;
|
|
import arc.graphics.g2d.*;
|
|
import arc.struct.*;
|
|
import mindustry.ctype.*;
|
|
import mindustry.entities.bullet.*;
|
|
import mindustry.gen.*;
|
|
import mindustry.graphics.*;
|
|
import mindustry.type.*;
|
|
import mindustry.world.*;
|
|
import mindustry.world.blocks.*;
|
|
import mindustry.world.blocks.campaign.*;
|
|
import mindustry.world.blocks.defense.*;
|
|
import mindustry.world.blocks.defense.turrets.*;
|
|
import mindustry.world.blocks.defense.turrets.PointDefenseTurret;
|
|
import mindustry.world.blocks.defense.turrets.TractorBeamTurret;
|
|
import mindustry.world.blocks.distribution.*;
|
|
import mindustry.world.blocks.environment.*;
|
|
import mindustry.world.blocks.experimental.*;
|
|
import mindustry.world.blocks.legacy.*;
|
|
import mindustry.world.blocks.liquid.*;
|
|
import mindustry.world.blocks.logic.*;
|
|
import mindustry.world.blocks.power.*;
|
|
import mindustry.world.blocks.production.*;
|
|
import mindustry.world.blocks.sandbox.*;
|
|
import mindustry.world.blocks.storage.*;
|
|
import mindustry.world.blocks.units.*;
|
|
import mindustry.world.consumers.*;
|
|
import mindustry.world.draw.*;
|
|
import mindustry.world.meta.*;
|
|
|
|
import static mindustry.type.ItemStack.*;
|
|
|
|
public class Blocks implements ContentList{
|
|
public static Block
|
|
|
|
//environment
|
|
air, spawn, cliff, deepwater, water, taintedWater, tar, slag, stone, craters, charr, sand, darksand, dirt, mud, ice, snow, darksandTaintedWater, space,
|
|
dacite, stoneWall, dirtWall, sporeWall, iceWall, daciteWall, sporePine, snowPine, pine, shrubs, whiteTree, whiteTreeDead, sporeCluster,
|
|
iceSnow, sandWater, darksandWater, duneWall, sandWall, moss, sporeMoss, shale, shaleWall, shaleBoulder, sandBoulder, daciteBoulder, boulder, snowBoulder, basaltBoulder, grass, salt,
|
|
metalFloor, metalFloorDamaged, metalFloor2, metalFloor3, metalFloor5, basalt, magmarock, hotrock, snowWall, saltWall,
|
|
darkPanel1, darkPanel2, darkPanel3, darkPanel4, darkPanel5, darkPanel6, darkMetal,
|
|
pebbles, tendrils,
|
|
|
|
//ores
|
|
oreCopper, oreLead, oreScrap, oreCoal, oreTitanium, oreThorium,
|
|
|
|
//crafting
|
|
siliconSmelter, siliconCrucible, kiln, graphitePress, plastaniumCompressor, multiPress, phaseWeaver, surgeSmelter, pyratiteMixer, blastMixer, cryofluidMixer,
|
|
melter, separator, disassembler, sporePress, pulverizer, incinerator, coalCentrifuge,
|
|
|
|
//sandbox
|
|
powerSource, powerVoid, itemSource, itemVoid, liquidSource, liquidVoid, illuminator,
|
|
|
|
//defense
|
|
copperWall, copperWallLarge, titaniumWall, titaniumWallLarge, plastaniumWall, plastaniumWallLarge, thoriumWall, thoriumWallLarge, door, doorLarge,
|
|
phaseWall, phaseWallLarge, surgeWall, surgeWallLarge, mender, mendProjector, overdriveProjector, overdriveDome, forceProjector, shockMine,
|
|
scrapWall, scrapWallLarge, scrapWallHuge, scrapWallGigantic, thruster, //ok, these names are getting ridiculous, but at least I don't have humongous walls yet
|
|
|
|
//transport
|
|
conveyor, titaniumConveyor, plastaniumConveyor, armoredConveyor, distributor, junction, itemBridge, phaseConveyor, sorter, invertedSorter, router,
|
|
overflowGate, underflowGate, massDriver, payloadConveyor, payloadRouter,
|
|
|
|
//liquid
|
|
mechanicalPump, rotaryPump, thermalPump, conduit, pulseConduit, platedConduit, liquidRouter, liquidTank, liquidJunction, bridgeConduit, phaseConduit,
|
|
|
|
//power
|
|
combustionGenerator, thermalGenerator, steamGenerator, differentialGenerator, rtgGenerator, solarPanel, largeSolarPanel, thoriumReactor,
|
|
impactReactor, battery, batteryLarge, powerNode, powerNodeLarge, surgeTower, diode,
|
|
|
|
//production
|
|
mechanicalDrill, pneumaticDrill, laserDrill, blastDrill, waterExtractor, oilExtractor, cultivator,
|
|
|
|
//storage
|
|
coreShard, coreFoundation, coreNucleus, vault, container, unloader,
|
|
|
|
//turrets
|
|
duo, scatter, scorch, hail, arc, wave, lancer, swarmer, salvo, fuse, ripple, cyclone, foreshadow, spectre, meltdown, segment, parallax, tsunami,
|
|
|
|
//units
|
|
commandCenter,
|
|
groundFactory, airFactory, navalFactory,
|
|
additiveReconstructor, multiplicativeReconstructor, exponentialReconstructor, tetrativeReconstructor,
|
|
repairPoint, resupplyPoint,
|
|
|
|
//logic
|
|
message, switchBlock, microProcessor, logicProcessor, hyperProcessor, largeLogicDisplay, logicDisplay, memoryCell, memoryBank,
|
|
|
|
//campaign
|
|
launchPad, launchPadLarge, interplanetaryAccelerator,
|
|
|
|
//misc experimental
|
|
blockForge, blockLoader, blockUnloader;
|
|
|
|
@Override
|
|
public void load(){
|
|
//region environment
|
|
|
|
air = new Floor("air"){
|
|
{
|
|
alwaysReplace = true;
|
|
hasShadow = false;
|
|
useColor = false;
|
|
wall = this;
|
|
}
|
|
|
|
@Override public void drawBase(Tile tile){}
|
|
@Override public void load(){}
|
|
@Override public void init(){}
|
|
@Override public boolean isHidden(){ return true; }
|
|
|
|
@Override
|
|
public TextureRegion[] variantRegions(){
|
|
if(variantRegions == null){
|
|
variantRegions = new TextureRegion[]{Core.atlas.find("clear")};
|
|
}
|
|
return variantRegions;
|
|
}
|
|
};
|
|
|
|
spawn = new OverlayFloor("spawn"){
|
|
{
|
|
variants = 0;
|
|
needsSurface = false;
|
|
}
|
|
@Override
|
|
public void drawBase(Tile tile){}
|
|
};
|
|
|
|
cliff = new Cliff("cliff"){{
|
|
inEditor = false;
|
|
saveData = true;
|
|
}};
|
|
|
|
//Registers build blocks
|
|
//no reference is needed here since they can be looked up by name later
|
|
for(int i = 1; i <= ConstructBlock.maxSize; i++){
|
|
new ConstructBlock(i);
|
|
}
|
|
|
|
deepwater = new Floor("deepwater"){{
|
|
speedMultiplier = 0.2f;
|
|
variants = 0;
|
|
liquidDrop = Liquids.water;
|
|
liquidMultiplier = 1.5f;
|
|
isLiquid = true;
|
|
status = StatusEffects.wet;
|
|
statusDuration = 120f;
|
|
drownTime = 140f;
|
|
cacheLayer = CacheLayer.water;
|
|
albedo = 0.5f;
|
|
}};
|
|
|
|
water = new Floor("water"){{
|
|
speedMultiplier = 0.5f;
|
|
variants = 0;
|
|
status = StatusEffects.wet;
|
|
statusDuration = 90f;
|
|
liquidDrop = Liquids.water;
|
|
isLiquid = true;
|
|
cacheLayer = CacheLayer.water;
|
|
albedo = 0.5f;
|
|
}};
|
|
|
|
taintedWater = new Floor("tainted-water"){{
|
|
speedMultiplier = 0.17f;
|
|
variants = 0;
|
|
status = StatusEffects.wet;
|
|
statusDuration = 140f;
|
|
drownTime = 120f;
|
|
liquidDrop = Liquids.water;
|
|
isLiquid = true;
|
|
cacheLayer = CacheLayer.water;
|
|
albedo = 0.5f;
|
|
attributes.set(Attribute.spores, 0.15f);
|
|
}};
|
|
|
|
darksandTaintedWater = new ShallowLiquid("darksand-tainted-water"){{
|
|
speedMultiplier = 0.75f;
|
|
statusDuration = 60f;
|
|
albedo = 0.5f;
|
|
attributes.set(Attribute.spores, 0.1f);
|
|
}};
|
|
|
|
sandWater = new ShallowLiquid("sand-water"){{
|
|
speedMultiplier = 0.8f;
|
|
statusDuration = 50f;
|
|
albedo = 0.5f;
|
|
}};
|
|
|
|
darksandWater = new ShallowLiquid("darksand-water"){{
|
|
speedMultiplier = 0.8f;
|
|
statusDuration = 50f;
|
|
albedo = 0.5f;
|
|
}};
|
|
|
|
tar = new Floor("tar"){{
|
|
drownTime = 150f;
|
|
status = StatusEffects.tarred;
|
|
statusDuration = 240f;
|
|
speedMultiplier = 0.19f;
|
|
variants = 0;
|
|
liquidDrop = Liquids.oil;
|
|
isLiquid = true;
|
|
cacheLayer = CacheLayer.tar;
|
|
}};
|
|
|
|
slag = new Floor("slag"){{
|
|
drownTime = 150f;
|
|
status = StatusEffects.melting;
|
|
statusDuration = 240f;
|
|
speedMultiplier = 0.19f;
|
|
variants = 0;
|
|
liquidDrop = Liquids.slag;
|
|
isLiquid = true;
|
|
cacheLayer = CacheLayer.slag;
|
|
attributes.set(Attribute.heat, 0.85f);
|
|
|
|
emitLight = true;
|
|
lightRadius = 40f;
|
|
lightColor = Color.orange.cpy().a(0.38f);
|
|
}};
|
|
|
|
space = new Floor("space"){{
|
|
cacheLayer = CacheLayer.space;
|
|
placeableOn = false;
|
|
solid = true;
|
|
variants = 0;
|
|
}};
|
|
|
|
stone = new Floor("stone");
|
|
|
|
craters = new Floor("craters"){{
|
|
variants = 3;
|
|
blendGroup = stone;
|
|
}};
|
|
|
|
charr = new Floor("char"){{
|
|
blendGroup = stone;
|
|
}};
|
|
|
|
basalt = new Floor("basalt"){{
|
|
attributes.set(Attribute.water, -0.25f);
|
|
}};
|
|
|
|
hotrock = new Floor("hotrock"){{
|
|
attributes.set(Attribute.heat, 0.5f);
|
|
attributes.set(Attribute.water, -0.5f);
|
|
blendGroup = basalt;
|
|
|
|
emitLight = true;
|
|
lightRadius = 30f;
|
|
lightColor = Color.orange.cpy().a(0.15f);
|
|
}};
|
|
|
|
magmarock = new Floor("magmarock"){{
|
|
attributes.set(Attribute.heat, 0.75f);
|
|
attributes.set(Attribute.water, -0.75f);
|
|
updateEffect = Fx.magmasmoke;
|
|
blendGroup = basalt;
|
|
|
|
emitLight = true;
|
|
lightRadius = 50f;
|
|
lightColor = Color.orange.cpy().a(0.3f);
|
|
}};
|
|
|
|
sand = new Floor("sand"){{
|
|
itemDrop = Items.sand;
|
|
playerUnmineable = true;
|
|
attributes.set(Attribute.oil, 0.7f);
|
|
}};
|
|
|
|
darksand = new Floor("darksand"){{
|
|
itemDrop = Items.sand;
|
|
playerUnmineable = true;
|
|
attributes.set(Attribute.oil, 1.5f);
|
|
}};
|
|
|
|
dirt = new Floor("dirt");
|
|
|
|
mud = new Floor("mud"){{
|
|
speedMultiplier = 0.6f;
|
|
variants = 3;
|
|
status = StatusEffects.muddy;
|
|
statusDuration = 30f;
|
|
attributes.set(Attribute.water, 1f);
|
|
cacheLayer = CacheLayer.mud;
|
|
albedo = 0.35f;
|
|
walkSound = Sounds.mud;
|
|
walkSoundVolume = 0.08f;
|
|
walkSoundPitchMin = 0.4f;
|
|
walkSoundPitchMax = 0.5f;
|
|
}};
|
|
|
|
((ShallowLiquid)darksandTaintedWater).set(Blocks.taintedWater, Blocks.darksand);
|
|
((ShallowLiquid)sandWater).set(Blocks.water, Blocks.sand);
|
|
((ShallowLiquid)darksandWater).set(Blocks.water, Blocks.darksand);
|
|
|
|
dacite = new Floor("dacite");
|
|
|
|
grass = new Floor("grass"){{
|
|
attributes.set(Attribute.water, 0.1f);
|
|
}};
|
|
|
|
salt = new Floor("salt"){{
|
|
variants = 0;
|
|
attributes.set(Attribute.water, -0.3f);
|
|
attributes.set(Attribute.oil, 0.3f);
|
|
}};
|
|
|
|
snow = new Floor("snow"){{
|
|
attributes.set(Attribute.water, 0.2f);
|
|
}};
|
|
|
|
ice = new Floor("ice"){{
|
|
dragMultiplier = 0.35f;
|
|
speedMultiplier = 0.9f;
|
|
attributes.set(Attribute.water, 0.4f);
|
|
}};
|
|
|
|
iceSnow = new Floor("ice-snow"){{
|
|
dragMultiplier = 0.6f;
|
|
variants = 3;
|
|
attributes.set(Attribute.water, 0.3f);
|
|
}};
|
|
|
|
shale = new Floor("shale"){{
|
|
variants = 3;
|
|
attributes.set(Attribute.oil, 1f);
|
|
}};
|
|
|
|
stoneWall = new StaticWall("stone-wall"){{
|
|
variants = 2;
|
|
}};
|
|
|
|
sporeWall = new StaticWall("spore-wall"){{
|
|
variants = 2;
|
|
}};
|
|
|
|
dirtWall = new StaticWall("dirt-wall"){{
|
|
variants = 2;
|
|
}};
|
|
|
|
daciteWall = new StaticWall("dacite-wall"){{
|
|
variants = 2;
|
|
}};
|
|
|
|
iceWall = new StaticWall("ice-wall"){{
|
|
variants = 2;
|
|
iceSnow.asFloor().wall = this;
|
|
}};
|
|
|
|
snowWall = new StaticWall("snow-wall"){{
|
|
variants = 2;
|
|
}};
|
|
|
|
duneWall = new StaticWall("dune-wall"){{
|
|
variants = 2;
|
|
basalt.asFloor().wall = darksandWater.asFloor().wall = darksandTaintedWater.asFloor().wall = this;
|
|
}};
|
|
|
|
sandWall = new StaticWall("sand-wall"){{
|
|
variants = 2;
|
|
sandWater.asFloor().wall = water.asFloor().wall = deepwater.asFloor().wall = this;
|
|
}};
|
|
|
|
saltWall = new StaticWall("salt-wall");
|
|
|
|
shrubs = new StaticWall("shrubs");
|
|
|
|
shaleWall = new StaticWall("shale-wall"){{
|
|
variants = 2;
|
|
}};
|
|
|
|
sporePine = new StaticTree("spore-pine"){{
|
|
variants = 0;
|
|
}};
|
|
|
|
snowPine = new StaticTree("snow-pine"){{
|
|
variants = 0;
|
|
}};
|
|
|
|
pine = new StaticTree("pine"){{
|
|
variants = 0;
|
|
}};
|
|
|
|
whiteTreeDead = new TreeBlock("white-tree-dead");
|
|
|
|
whiteTree = new TreeBlock("white-tree");
|
|
|
|
sporeCluster = new Boulder("spore-cluster"){{
|
|
variants = 3;
|
|
}};
|
|
|
|
boulder = new Boulder("boulder"){{
|
|
variants = 2;
|
|
}};
|
|
|
|
snowBoulder = new Boulder("snow-boulder"){{
|
|
variants = 2;
|
|
snow.asFloor().decoration = ice.asFloor().decoration = iceSnow.asFloor().decoration = salt.asFloor().decoration = this;
|
|
}};
|
|
|
|
shaleBoulder = new Boulder("shale-boulder"){{
|
|
variants = 2;
|
|
}};
|
|
|
|
sandBoulder = new Boulder("sand-boulder"){{
|
|
variants = 2;
|
|
}};
|
|
|
|
daciteBoulder = new Boulder("dacite-boulder"){{
|
|
variants = 2;
|
|
}};
|
|
|
|
basaltBoulder = new Boulder("basalt-boulder"){{
|
|
variants = 2;
|
|
}};
|
|
|
|
moss = new Floor("moss"){{
|
|
variants = 3;
|
|
attributes.set(Attribute.spores, 0.15f);
|
|
wall = sporePine;
|
|
}};
|
|
|
|
sporeMoss = new Floor("spore-moss"){{
|
|
variants = 3;
|
|
attributes.set(Attribute.spores, 0.3f);
|
|
wall = sporeWall;
|
|
}};
|
|
|
|
metalFloor = new Floor("metal-floor"){{
|
|
variants = 0;
|
|
}};
|
|
|
|
metalFloorDamaged = new Floor("metal-floor-damaged"){{
|
|
variants = 3;
|
|
}};
|
|
|
|
metalFloor2 = new Floor("metal-floor-2"){{
|
|
variants = 0;
|
|
}};
|
|
|
|
metalFloor3 = new Floor("metal-floor-3"){{
|
|
variants = 0;
|
|
}};
|
|
|
|
metalFloor5 = new Floor("metal-floor-5"){{
|
|
variants = 0;
|
|
}};
|
|
|
|
darkPanel1 = new Floor("dark-panel-1"){{ variants = 0; }};
|
|
darkPanel2 = new Floor("dark-panel-2"){{ variants = 0; }};
|
|
darkPanel3 = new Floor("dark-panel-3"){{ variants = 0; }};
|
|
darkPanel4 = new Floor("dark-panel-4"){{ variants = 0; }};
|
|
darkPanel5 = new Floor("dark-panel-5"){{ variants = 0; }};
|
|
darkPanel6 = new Floor("dark-panel-6"){{ variants = 0; }};
|
|
|
|
darkMetal = new StaticWall("dark-metal");
|
|
|
|
pebbles = new DoubleOverlayFloor("pebbles");
|
|
|
|
tendrils = new OverlayFloor("tendrils");
|
|
|
|
//endregion
|
|
//region ore
|
|
|
|
oreCopper = new OreBlock(Items.copper){{
|
|
oreDefault = true;
|
|
oreThreshold = 0.81f;
|
|
oreScale = 23.47619f;
|
|
}};
|
|
|
|
oreLead = new OreBlock(Items.lead){{
|
|
oreDefault = true;
|
|
oreThreshold = 0.828f;
|
|
oreScale = 23.952381f;
|
|
}};
|
|
|
|
oreScrap = new OreBlock(Items.scrap);
|
|
|
|
oreCoal = new OreBlock(Items.coal){{
|
|
oreDefault = true;
|
|
oreThreshold = 0.846f;
|
|
oreScale = 24.428572f;
|
|
}};
|
|
|
|
oreTitanium = new OreBlock(Items.titanium){{
|
|
oreDefault = true;
|
|
oreThreshold = 0.864f;
|
|
oreScale = 24.904762f;
|
|
}};
|
|
|
|
oreThorium = new OreBlock(Items.thorium){{
|
|
oreDefault = true;
|
|
oreThreshold = 0.882f;
|
|
oreScale = 25.380953f;
|
|
}};
|
|
|
|
//endregion
|
|
//region crafting
|
|
|
|
graphitePress = new GenericCrafter("graphite-press"){{
|
|
requirements(Category.crafting, with(Items.copper, 75, Items.lead, 30));
|
|
|
|
craftEffect = Fx.pulverizeMedium;
|
|
outputItem = new ItemStack(Items.graphite, 1);
|
|
craftTime = 90f;
|
|
size = 2;
|
|
hasItems = true;
|
|
|
|
consumes.item(Items.coal, 2);
|
|
}};
|
|
|
|
multiPress = new GenericCrafter("multi-press"){{
|
|
requirements(Category.crafting, with(Items.titanium, 100, Items.silicon, 25, Items.lead, 100, Items.graphite, 50));
|
|
|
|
craftEffect = Fx.pulverizeMedium;
|
|
outputItem = new ItemStack(Items.graphite, 2);
|
|
craftTime = 30f;
|
|
size = 3;
|
|
hasItems = true;
|
|
hasLiquids = true;
|
|
hasPower = true;
|
|
|
|
consumes.power(1.8f);
|
|
consumes.item(Items.coal, 3);
|
|
consumes.liquid(Liquids.water, 0.1f);
|
|
}};
|
|
|
|
siliconSmelter = new GenericSmelter("silicon-smelter"){{
|
|
requirements(Category.crafting, with(Items.copper, 30, Items.lead, 25));
|
|
craftEffect = Fx.smeltsmoke;
|
|
outputItem = new ItemStack(Items.silicon, 1);
|
|
craftTime = 40f;
|
|
size = 2;
|
|
hasPower = true;
|
|
hasLiquids = false;
|
|
flameColor = Color.valueOf("ffef99");
|
|
|
|
consumes.items(with(Items.coal, 1, Items.sand, 2));
|
|
consumes.power(0.50f);
|
|
}};
|
|
|
|
siliconCrucible = new AttributeSmelter("silicon-crucible"){{
|
|
requirements(Category.crafting, with(Items.titanium, 120, Items.metaglass, 80, Items.plastanium, 35, Items.silicon, 60));
|
|
craftEffect = Fx.smeltsmoke;
|
|
outputItem = new ItemStack(Items.silicon, 8);
|
|
craftTime = 90f;
|
|
size = 3;
|
|
hasPower = true;
|
|
hasLiquids = false;
|
|
flameColor = Color.valueOf("ffef99");
|
|
itemCapacity = 30;
|
|
boostScale = 0.15f;
|
|
|
|
consumes.items(with(Items.coal, 4, Items.sand, 6, Items.pyratite, 1));
|
|
consumes.power(4f);
|
|
}};
|
|
|
|
kiln = new GenericSmelter("kiln"){{
|
|
requirements(Category.crafting, with(Items.copper, 60, Items.graphite, 30, Items.lead, 30));
|
|
craftEffect = Fx.smeltsmoke;
|
|
outputItem = new ItemStack(Items.metaglass, 1);
|
|
craftTime = 30f;
|
|
size = 2;
|
|
hasPower = hasItems = true;
|
|
flameColor = Color.valueOf("ffc099");
|
|
|
|
consumes.items(with(Items.lead, 1, Items.sand, 1));
|
|
consumes.power(0.60f);
|
|
}};
|
|
|
|
plastaniumCompressor = new GenericCrafter("plastanium-compressor"){{
|
|
requirements(Category.crafting, with(Items.silicon, 80, Items.lead, 115, Items.graphite, 60, Items.titanium, 80));
|
|
hasItems = true;
|
|
liquidCapacity = 60f;
|
|
craftTime = 60f;
|
|
outputItem = new ItemStack(Items.plastanium, 1);
|
|
size = 2;
|
|
health = 320;
|
|
hasPower = hasLiquids = true;
|
|
craftEffect = Fx.formsmoke;
|
|
updateEffect = Fx.plasticburn;
|
|
drawer = new DrawGlow();
|
|
|
|
consumes.liquid(Liquids.oil, 0.25f);
|
|
consumes.power(3f);
|
|
consumes.item(Items.titanium, 2);
|
|
}};
|
|
|
|
phaseWeaver = new GenericCrafter("phase-weaver"){{
|
|
requirements(Category.crafting, with(Items.silicon, 130, Items.lead, 120, Items.thorium, 75));
|
|
craftEffect = Fx.smeltsmoke;
|
|
outputItem = new ItemStack(Items.phaseFabric, 1);
|
|
craftTime = 120f;
|
|
size = 2;
|
|
hasPower = true;
|
|
drawer = new DrawWeave();
|
|
|
|
ambientSound = Sounds.techloop;
|
|
ambientSoundVolume = 0.02f;
|
|
|
|
consumes.items(with(Items.thorium, 4, Items.sand, 10));
|
|
consumes.power(5f);
|
|
itemCapacity = 20;
|
|
}};
|
|
|
|
surgeSmelter = new GenericSmelter("alloy-smelter"){{
|
|
requirements(Category.crafting, with(Items.silicon, 80, Items.lead, 80, Items.thorium, 70));
|
|
craftEffect = Fx.smeltsmoke;
|
|
outputItem = new ItemStack(Items.surgeAlloy, 1);
|
|
craftTime = 75f;
|
|
size = 3;
|
|
hasPower = true;
|
|
|
|
consumes.power(4f);
|
|
consumes.items(with(Items.copper, 3, Items.lead, 4, Items.titanium, 2, Items.silicon, 3));
|
|
}};
|
|
|
|
cryofluidMixer = new LiquidConverter("cryofluid-mixer"){{
|
|
requirements(Category.crafting, with(Items.lead, 65, Items.silicon, 40, Items.titanium, 60));
|
|
outputLiquid = new LiquidStack(Liquids.cryofluid, 0.2f);
|
|
craftTime = 120f;
|
|
size = 2;
|
|
hasPower = true;
|
|
hasItems = true;
|
|
hasLiquids = true;
|
|
rotate = false;
|
|
solid = true;
|
|
outputsLiquid = true;
|
|
drawer = new DrawMixer();
|
|
|
|
consumes.power(1f);
|
|
consumes.item(Items.titanium);
|
|
consumes.liquid(Liquids.water, 0.2f);
|
|
}};
|
|
|
|
pyratiteMixer = new GenericSmelter("pyratite-mixer"){{
|
|
requirements(Category.crafting, with(Items.copper, 50, Items.lead, 25));
|
|
flameColor = Color.clear;
|
|
hasItems = true;
|
|
hasPower = true;
|
|
outputItem = new ItemStack(Items.pyratite, 1);
|
|
|
|
size = 2;
|
|
|
|
consumes.power(0.20f);
|
|
consumes.items(with(Items.coal, 1, Items.lead, 2, Items.sand, 2));
|
|
}};
|
|
|
|
blastMixer = new GenericCrafter("blast-mixer"){{
|
|
requirements(Category.crafting, with(Items.lead, 30, Items.titanium, 20));
|
|
hasItems = true;
|
|
hasPower = true;
|
|
outputItem = new ItemStack(Items.blastCompound, 1);
|
|
size = 2;
|
|
|
|
consumes.items(with(Items.pyratite, 1, Items.sporePod, 1));
|
|
consumes.power(0.40f);
|
|
}};
|
|
|
|
melter = new GenericCrafter("melter"){{
|
|
requirements(Category.crafting, with(Items.copper, 30, Items.lead, 35, Items.graphite, 45));
|
|
health = 200;
|
|
outputLiquid = new LiquidStack(Liquids.slag, 2f);
|
|
craftTime = 10f;
|
|
hasLiquids = hasPower = true;
|
|
|
|
consumes.power(1f);
|
|
consumes.item(Items.scrap, 1);
|
|
}};
|
|
|
|
separator = new Separator("separator"){{
|
|
requirements(Category.crafting, with(Items.copper, 30, Items.titanium, 25));
|
|
results = with(
|
|
Items.copper, 5,
|
|
Items.lead, 3,
|
|
Items.graphite, 2,
|
|
Items.titanium, 2
|
|
);
|
|
hasPower = true;
|
|
craftTime = 35f;
|
|
size = 2;
|
|
|
|
consumes.power(1f);
|
|
consumes.liquid(Liquids.slag, 0.07f);
|
|
}};
|
|
|
|
disassembler = new Separator("disassembler"){{
|
|
requirements(Category.crafting, with(Items.graphite, 140, Items.titanium, 100, Items.silicon, 150, Items.surgeAlloy, 70));
|
|
results = with(
|
|
Items.sand, 4,
|
|
Items.graphite, 2,
|
|
Items.titanium, 2,
|
|
Items.thorium, 1
|
|
);
|
|
hasPower = true;
|
|
craftTime = 15f;
|
|
size = 3;
|
|
itemCapacity = 20;
|
|
|
|
consumes.power(4f);
|
|
consumes.item(Items.scrap);
|
|
consumes.liquid(Liquids.slag, 0.12f);
|
|
}};
|
|
|
|
sporePress = new GenericCrafter("spore-press"){{
|
|
requirements(Category.crafting, with(Items.lead, 35, Items.silicon, 30));
|
|
liquidCapacity = 60f;
|
|
craftTime = 20f;
|
|
outputLiquid = new LiquidStack(Liquids.oil, 6f);
|
|
size = 2;
|
|
health = 320;
|
|
hasLiquids = true;
|
|
hasPower = true;
|
|
craftEffect = Fx.none;
|
|
drawer = new DrawAnimation();
|
|
|
|
consumes.item(Items.sporePod, 1);
|
|
consumes.power(0.7f);
|
|
}};
|
|
|
|
pulverizer = new GenericCrafter("pulverizer"){{
|
|
requirements(Category.crafting, with(Items.copper, 30, Items.lead, 25));
|
|
outputItem = new ItemStack(Items.sand, 1);
|
|
craftEffect = Fx.pulverize;
|
|
craftTime = 40f;
|
|
updateEffect = Fx.pulverizeSmall;
|
|
hasItems = hasPower = true;
|
|
drawer = new DrawRotator();
|
|
ambientSound = Sounds.grinding;
|
|
ambientSoundVolume = 0.025f;
|
|
|
|
consumes.item(Items.scrap, 1);
|
|
consumes.power(0.50f);
|
|
}};
|
|
|
|
coalCentrifuge = new GenericCrafter("coal-centrifuge"){{
|
|
requirements(Category.crafting, with(Items.titanium, 20, Items.graphite, 40, Items.lead, 30));
|
|
craftEffect = Fx.smeltsmoke;
|
|
outputItem = new ItemStack(Items.coal, 1);
|
|
craftTime = 30f;
|
|
size = 2;
|
|
hasPower = hasItems = hasLiquids = true;
|
|
|
|
consumes.liquid(Liquids.oil, 0.1f);
|
|
consumes.power(0.7f);
|
|
}};
|
|
|
|
incinerator = new Incinerator("incinerator"){{
|
|
requirements(Category.crafting, with(Items.graphite, 5, Items.lead, 15));
|
|
health = 90;
|
|
consumes.power(0.50f);
|
|
}};
|
|
|
|
//endregion
|
|
//region defense
|
|
|
|
int wallHealthMultiplier = 4;
|
|
|
|
copperWall = new Wall("copper-wall"){{
|
|
requirements(Category.defense, with(Items.copper, 6));
|
|
health = 80 * wallHealthMultiplier;
|
|
}};
|
|
|
|
copperWallLarge = new Wall("copper-wall-large"){{
|
|
requirements(Category.defense, ItemStack.mult(copperWall.requirements, 4));
|
|
health = 80 * 4 * wallHealthMultiplier;
|
|
size = 2;
|
|
}};
|
|
|
|
titaniumWall = new Wall("titanium-wall"){{
|
|
requirements(Category.defense, with(Items.titanium, 6));
|
|
health = 110 * wallHealthMultiplier;
|
|
}};
|
|
|
|
titaniumWallLarge = new Wall("titanium-wall-large"){{
|
|
requirements(Category.defense, ItemStack.mult(titaniumWall.requirements, 4));
|
|
health = 110 * wallHealthMultiplier * 4;
|
|
size = 2;
|
|
}};
|
|
|
|
plastaniumWall = new Wall("plastanium-wall"){{
|
|
requirements(Category.defense, with(Items.plastanium, 5, Items.metaglass, 2));
|
|
health = 130 * wallHealthMultiplier;
|
|
insulated = true;
|
|
absorbLasers = true;
|
|
}};
|
|
|
|
plastaniumWallLarge = new Wall("plastanium-wall-large"){{
|
|
requirements(Category.defense, ItemStack.mult(plastaniumWall.requirements, 4));
|
|
health = 130 * wallHealthMultiplier * 4;
|
|
size = 2;
|
|
insulated = true;
|
|
absorbLasers = true;
|
|
}};
|
|
|
|
thoriumWall = new Wall("thorium-wall"){{
|
|
requirements(Category.defense, with(Items.thorium, 6));
|
|
health = 200 * wallHealthMultiplier;
|
|
}};
|
|
|
|
thoriumWallLarge = new Wall("thorium-wall-large"){{
|
|
requirements(Category.defense, ItemStack.mult(thoriumWall.requirements, 4));
|
|
health = 200 * wallHealthMultiplier * 4;
|
|
size = 2;
|
|
}};
|
|
|
|
phaseWall = new Wall("phase-wall"){{
|
|
requirements(Category.defense, with(Items.phaseFabric, 6));
|
|
health = 150 * wallHealthMultiplier;
|
|
chanceDeflect = 10f;
|
|
flashHit = true;
|
|
}};
|
|
|
|
phaseWallLarge = new Wall("phase-wall-large"){{
|
|
requirements(Category.defense, ItemStack.mult(phaseWall.requirements, 4));
|
|
health = 150 * 4 * wallHealthMultiplier;
|
|
size = 2;
|
|
chanceDeflect = 10f;
|
|
flashHit = true;
|
|
}};
|
|
|
|
surgeWall = new Wall("surge-wall"){{
|
|
requirements(Category.defense, with(Items.surgeAlloy, 6));
|
|
health = 230 * wallHealthMultiplier;
|
|
lightningChance = 0.05f;
|
|
}};
|
|
|
|
surgeWallLarge = new Wall("surge-wall-large"){{
|
|
requirements(Category.defense, ItemStack.mult(surgeWall.requirements, 4));
|
|
health = 230 * 4 * wallHealthMultiplier;
|
|
size = 2;
|
|
lightningChance = 0.05f;
|
|
}};
|
|
|
|
door = new Door("door"){{
|
|
requirements(Category.defense, with(Items.titanium, 6, Items.silicon, 4));
|
|
health = 100 * wallHealthMultiplier;
|
|
}};
|
|
|
|
doorLarge = new Door("door-large"){{
|
|
requirements(Category.defense, ItemStack.mult(door.requirements, 4));
|
|
openfx = Fx.dooropenlarge;
|
|
closefx = Fx.doorcloselarge;
|
|
health = 100 * 4 * wallHealthMultiplier;
|
|
size = 2;
|
|
}};
|
|
|
|
scrapWall = new Wall("scrap-wall"){{
|
|
requirements(Category.defense, BuildVisibility.sandboxOnly, with(Items.scrap, 6));
|
|
health = 60 * wallHealthMultiplier;
|
|
variants = 5;
|
|
}};
|
|
|
|
scrapWallLarge = new Wall("scrap-wall-large"){{
|
|
requirements(Category.defense, BuildVisibility.sandboxOnly, ItemStack.mult(scrapWall.requirements, 4));
|
|
health = 60 * 4 * wallHealthMultiplier;
|
|
size = 2;
|
|
variants = 4;
|
|
}};
|
|
|
|
scrapWallHuge = new Wall("scrap-wall-huge"){{
|
|
requirements(Category.defense, BuildVisibility.sandboxOnly, ItemStack.mult(scrapWall.requirements, 9));
|
|
health = 60 * 9 * wallHealthMultiplier;
|
|
size = 3;
|
|
variants = 3;
|
|
}};
|
|
|
|
scrapWallGigantic = new Wall("scrap-wall-gigantic"){{
|
|
requirements(Category.defense, BuildVisibility.sandboxOnly, ItemStack.mult(scrapWall.requirements, 16));
|
|
health = 60 * 16 * wallHealthMultiplier;
|
|
size = 4;
|
|
}};
|
|
|
|
thruster = new Wall("thruster"){{
|
|
health = 55 * 16 * wallHealthMultiplier;
|
|
size = 4;
|
|
}};
|
|
|
|
mender = new MendProjector("mender"){{
|
|
requirements(Category.effect, with(Items.lead, 30, Items.copper, 25));
|
|
consumes.power(0.3f);
|
|
size = 1;
|
|
reload = 200f;
|
|
range = 40f;
|
|
healPercent = 4f;
|
|
phaseBoost = 4f;
|
|
phaseRangeBoost = 20f;
|
|
health = 80;
|
|
consumes.item(Items.silicon).boost();
|
|
}};
|
|
|
|
mendProjector = new MendProjector("mend-projector"){{
|
|
requirements(Category.effect, with(Items.lead, 100, Items.titanium, 25, Items.silicon, 40));
|
|
consumes.power(1.5f);
|
|
size = 2;
|
|
reload = 250f;
|
|
range = 85f;
|
|
healPercent = 11f;
|
|
phaseBoost = 15f;
|
|
health = 80 * size * size;
|
|
consumes.item(Items.phaseFabric).boost();
|
|
}};
|
|
|
|
overdriveProjector = new OverdriveProjector("overdrive-projector"){{
|
|
requirements(Category.effect, with(Items.lead, 100, Items.titanium, 75, Items.silicon, 75, Items.plastanium, 30));
|
|
consumes.power(3.50f);
|
|
size = 2;
|
|
consumes.item(Items.phaseFabric).boost();
|
|
}};
|
|
|
|
overdriveDome = new OverdriveProjector("overdrive-dome"){{
|
|
requirements(Category.effect, with(Items.lead, 200, Items.titanium, 130, Items.silicon, 130, Items.plastanium, 80, Items.surgeAlloy, 120));
|
|
consumes.power(10f);
|
|
size = 3;
|
|
range = 200f;
|
|
speedBoost = 2.5f;
|
|
useTime = 300f;
|
|
hasBoost = false;
|
|
consumes.items(with(Items.phaseFabric, 1, Items.silicon, 1));
|
|
}};
|
|
|
|
forceProjector = new ForceProjector("force-projector"){{
|
|
requirements(Category.effect, with(Items.lead, 100, Items.titanium, 75, Items.silicon, 125));
|
|
size = 3;
|
|
phaseRadiusBoost = 80f;
|
|
radius = 101.7f;
|
|
shieldHealth = 750f;
|
|
cooldownNormal = 1.5f;
|
|
cooldownLiquid = 1.2f;
|
|
cooldownBrokenBase = 0.35f;
|
|
|
|
consumes.item(Items.phaseFabric).boost();
|
|
consumes.power(4f);
|
|
}};
|
|
|
|
shockMine = new ShockMine("shock-mine"){{
|
|
requirements(Category.effect, with(Items.lead, 25, Items.silicon, 12));
|
|
hasShadow = false;
|
|
health = 50;
|
|
damage = 25;
|
|
tileDamage = 7f;
|
|
length = 10;
|
|
tendrils = 4;
|
|
}};
|
|
|
|
//endregion
|
|
//region distribution
|
|
|
|
conveyor = new Conveyor("conveyor"){{
|
|
requirements(Category.distribution, with(Items.copper, 1), true);
|
|
health = 45;
|
|
speed = 0.03f;
|
|
displayedSpeed = 4.2f;
|
|
buildCostMultiplier = 2f;
|
|
}};
|
|
|
|
titaniumConveyor = new Conveyor("titanium-conveyor"){{
|
|
requirements(Category.distribution, with(Items.copper, 1, Items.lead, 1, Items.titanium, 1));
|
|
health = 65;
|
|
speed = 0.08f;
|
|
displayedSpeed = 11f;
|
|
}};
|
|
|
|
plastaniumConveyor = new StackConveyor("plastanium-conveyor"){{
|
|
requirements(Category.distribution, with(Items.plastanium, 1, Items.silicon, 1, Items.graphite, 1));
|
|
health = 75;
|
|
speed = 4f / 60f;
|
|
itemCapacity = 10;
|
|
}};
|
|
|
|
armoredConveyor = new ArmoredConveyor("armored-conveyor"){{
|
|
requirements(Category.distribution, with(Items.plastanium, 1, Items.thorium, 1, Items.metaglass, 1));
|
|
health = 180;
|
|
speed = 0.08f;
|
|
displayedSpeed = 11f;
|
|
}};
|
|
|
|
junction = new Junction("junction"){{
|
|
requirements(Category.distribution, with(Items.copper, 2), true);
|
|
speed = 26;
|
|
capacity = 12;
|
|
health = 30;
|
|
buildCostMultiplier = 6f;
|
|
}};
|
|
|
|
itemBridge = new BufferedItemBridge("bridge-conveyor"){{
|
|
requirements(Category.distribution, with(Items.lead, 4, Items.copper, 4));
|
|
range = 4;
|
|
speed = 70f;
|
|
bufferCapacity = 14;
|
|
}};
|
|
|
|
phaseConveyor = new ItemBridge("phase-conveyor"){{
|
|
requirements(Category.distribution, with(Items.phaseFabric, 5, Items.silicon, 7, Items.lead, 10, Items.graphite, 10));
|
|
range = 12;
|
|
canOverdrive = false;
|
|
hasPower = true;
|
|
consumes.power(0.30f);
|
|
}};
|
|
|
|
sorter = new Sorter("sorter"){{
|
|
requirements(Category.distribution, with(Items.lead, 2, Items.copper, 2));
|
|
buildCostMultiplier = 3f;
|
|
}};
|
|
|
|
invertedSorter = new Sorter("inverted-sorter"){{
|
|
requirements(Category.distribution, with(Items.lead, 2, Items.copper, 2));
|
|
buildCostMultiplier = 3f;
|
|
invert = true;
|
|
}};
|
|
|
|
router = new Router("router"){{
|
|
requirements(Category.distribution, with(Items.copper, 3));
|
|
buildCostMultiplier = 4f;
|
|
}};
|
|
|
|
distributor = new Router("distributor"){{
|
|
requirements(Category.distribution, with(Items.lead, 4, Items.copper, 4));
|
|
size = 2;
|
|
}};
|
|
|
|
overflowGate = new OverflowGate("overflow-gate"){{
|
|
requirements(Category.distribution, with(Items.lead, 2, Items.copper, 4));
|
|
buildCostMultiplier = 3f;
|
|
}};
|
|
|
|
underflowGate = new OverflowGate("underflow-gate"){{
|
|
requirements(Category.distribution, with(Items.lead, 2, Items.copper, 4));
|
|
buildCostMultiplier = 3f;
|
|
invert = true;
|
|
}};
|
|
|
|
massDriver = new MassDriver("mass-driver"){{
|
|
requirements(Category.distribution, with(Items.titanium, 125, Items.silicon, 75, Items.lead, 125, Items.thorium, 50));
|
|
size = 3;
|
|
itemCapacity = 120;
|
|
reloadTime = 200f;
|
|
range = 440f;
|
|
consumes.power(1.75f);
|
|
}};
|
|
|
|
payloadConveyor = new PayloadConveyor("payload-conveyor"){{
|
|
requirements(Category.distribution, with(Items.graphite, 10, Items.copper, 20));
|
|
canOverdrive = false;
|
|
}};
|
|
|
|
payloadRouter = new PayloadRouter("payload-router"){{
|
|
requirements(Category.distribution, with(Items.graphite, 15, Items.copper, 20));
|
|
canOverdrive = false;
|
|
}};
|
|
|
|
//endregion
|
|
//region liquid
|
|
|
|
mechanicalPump = new Pump("mechanical-pump"){{
|
|
requirements(Category.liquid, with(Items.copper, 15, Items.metaglass, 10));
|
|
pumpAmount = 0.11f;
|
|
}};
|
|
|
|
rotaryPump = new Pump("rotary-pump"){{
|
|
requirements(Category.liquid, with(Items.copper, 70, Items.metaglass, 50, Items.silicon, 20, Items.titanium, 35));
|
|
pumpAmount = 0.2f;
|
|
consumes.power(0.3f);
|
|
liquidCapacity = 30f;
|
|
hasPower = true;
|
|
size = 2;
|
|
}};
|
|
|
|
thermalPump = new Pump("thermal-pump"){{
|
|
requirements(Category.liquid, with(Items.copper, 80, Items.metaglass, 90, Items.silicon, 30, Items.titanium, 40, Items.thorium, 35));
|
|
pumpAmount = 0.22f;
|
|
consumes.power(1.3f);
|
|
liquidCapacity = 40f;
|
|
hasPower = true;
|
|
size = 3;
|
|
}};
|
|
|
|
conduit = new Conduit("conduit"){{
|
|
requirements(Category.liquid, with(Items.metaglass, 1));
|
|
health = 45;
|
|
}};
|
|
|
|
pulseConduit = new Conduit("pulse-conduit"){{
|
|
requirements(Category.liquid, with(Items.titanium, 2, Items.metaglass, 1));
|
|
liquidCapacity = 16f;
|
|
liquidPressure = 1.025f;
|
|
health = 90;
|
|
}};
|
|
|
|
platedConduit = new ArmoredConduit("plated-conduit"){{
|
|
requirements(Category.liquid, with(Items.thorium, 2, Items.metaglass, 1, Items.plastanium, 1));
|
|
liquidCapacity = 16f;
|
|
liquidPressure = 1.025f;
|
|
health = 220;
|
|
}};
|
|
|
|
liquidRouter = new LiquidRouter("liquid-router"){{
|
|
requirements(Category.liquid, with(Items.graphite, 4, Items.metaglass, 2));
|
|
liquidCapacity = 20f;
|
|
}};
|
|
|
|
liquidTank = new LiquidRouter("liquid-tank"){{
|
|
requirements(Category.liquid, with(Items.titanium, 25, Items.metaglass, 25));
|
|
size = 3;
|
|
liquidCapacity = 1500f;
|
|
health = 500;
|
|
}};
|
|
|
|
liquidJunction = new LiquidJunction("liquid-junction"){{
|
|
requirements(Category.liquid, with(Items.graphite, 2, Items.metaglass, 2));
|
|
}};
|
|
|
|
bridgeConduit = new LiquidExtendingBridge("bridge-conduit"){{
|
|
requirements(Category.liquid, with(Items.graphite, 4, Items.metaglass, 8));
|
|
range = 4;
|
|
hasPower = false;
|
|
}};
|
|
|
|
phaseConduit = new LiquidBridge("phase-conduit"){{
|
|
requirements(Category.liquid, with(Items.phaseFabric, 5, Items.silicon, 7, Items.metaglass, 20, Items.titanium, 10));
|
|
range = 12;
|
|
hasPower = true;
|
|
canOverdrive = false;
|
|
consumes.power(0.30f);
|
|
}};
|
|
|
|
//endregion
|
|
//region power
|
|
|
|
powerNode = new PowerNode("power-node"){{
|
|
requirements(Category.power, with(Items.copper, 1, Items.lead, 3));
|
|
maxNodes = 10;
|
|
laserRange = 6;
|
|
}};
|
|
|
|
powerNodeLarge = new PowerNode("power-node-large"){{
|
|
requirements(Category.power, with(Items.titanium, 5, Items.lead, 10, Items.silicon, 3));
|
|
size = 2;
|
|
maxNodes = 15;
|
|
laserRange = 9.5f;
|
|
}};
|
|
|
|
surgeTower = new PowerNode("surge-tower"){{
|
|
requirements(Category.power, with(Items.titanium, 7, Items.lead, 10, Items.silicon, 15, Items.surgeAlloy, 15));
|
|
size = 2;
|
|
maxNodes = 2;
|
|
laserRange = 40f;
|
|
}};
|
|
|
|
diode = new PowerDiode("diode"){{
|
|
requirements(Category.power, with(Items.silicon, 10, Items.plastanium, 5, Items.metaglass, 10));
|
|
}};
|
|
|
|
battery = new Battery("battery"){{
|
|
requirements(Category.power, with(Items.copper, 5, Items.lead, 20));
|
|
consumes.powerBuffered(4000f);
|
|
}};
|
|
|
|
batteryLarge = new Battery("battery-large"){{
|
|
requirements(Category.power, with(Items.titanium, 20, Items.lead, 40, Items.silicon, 20));
|
|
size = 3;
|
|
consumes.powerBuffered(50000f);
|
|
}};
|
|
|
|
combustionGenerator = new BurnerGenerator("combustion-generator"){{
|
|
requirements(Category.power, with(Items.copper, 25, Items.lead, 15));
|
|
powerProduction = 1f;
|
|
itemDuration = 120f;
|
|
|
|
ambientSound = Sounds.smelter;
|
|
ambientSoundVolume = 0.03f;
|
|
}};
|
|
|
|
thermalGenerator = new ThermalGenerator("thermal-generator"){{
|
|
requirements(Category.power, with(Items.copper, 40, Items.graphite, 35, Items.lead, 50, Items.silicon, 35, Items.metaglass, 40));
|
|
powerProduction = 1.8f;
|
|
generateEffect = Fx.redgeneratespark;
|
|
size = 2;
|
|
floating = true;
|
|
ambientSound = Sounds.hum;
|
|
ambientSoundVolume = 0.06f;
|
|
}};
|
|
|
|
steamGenerator = new BurnerGenerator("steam-generator"){{
|
|
requirements(Category.power, with(Items.copper, 35, Items.graphite, 25, Items.lead, 40, Items.silicon, 30));
|
|
powerProduction = 5.5f;
|
|
itemDuration = 90f;
|
|
consumes.liquid(Liquids.water, 0.1f);
|
|
hasLiquids = true;
|
|
size = 2;
|
|
|
|
ambientSound = Sounds.smelter;
|
|
ambientSoundVolume = 0.05f;
|
|
}};
|
|
|
|
differentialGenerator = new SingleTypeGenerator("differential-generator"){{
|
|
requirements(Category.power, with(Items.copper, 70, Items.titanium, 50, Items.lead, 100, Items.silicon, 65, Items.metaglass, 50));
|
|
powerProduction = 18f;
|
|
itemDuration = 220f;
|
|
hasLiquids = true;
|
|
hasItems = true;
|
|
size = 3;
|
|
ambientSound = Sounds.steam;
|
|
ambientSoundVolume = 0.03f;
|
|
|
|
consumes.item(Items.pyratite).optional(true, false);
|
|
consumes.liquid(Liquids.cryofluid, 0.1f);
|
|
}};
|
|
|
|
rtgGenerator = new DecayGenerator("rtg-generator"){{
|
|
requirements(Category.power, with(Items.lead, 100, Items.silicon, 75, Items.phaseFabric, 25, Items.plastanium, 75, Items.thorium, 50));
|
|
size = 2;
|
|
powerProduction = 4.5f;
|
|
itemDuration = 60 * 15f;
|
|
}};
|
|
|
|
solarPanel = new SolarGenerator("solar-panel"){{
|
|
requirements(Category.power, with(Items.lead, 10, Items.silicon, 15));
|
|
powerProduction = 0.08f;
|
|
}};
|
|
|
|
largeSolarPanel = new SolarGenerator("solar-panel-large"){{
|
|
requirements(Category.power, with(Items.lead, 100, Items.silicon, 145, Items.phaseFabric, 15));
|
|
size = 3;
|
|
powerProduction = 1f;
|
|
}};
|
|
|
|
thoriumReactor = new NuclearReactor("thorium-reactor"){{
|
|
requirements(Category.power, with(Items.lead, 300, Items.silicon, 200, Items.graphite, 150, Items.thorium, 150, Items.metaglass, 50));
|
|
ambientSound = Sounds.hum;
|
|
ambientSoundVolume = 0.24f;
|
|
size = 3;
|
|
health = 700;
|
|
itemDuration = 360f;
|
|
powerProduction = 15f;
|
|
consumes.item(Items.thorium);
|
|
heating = 0.02f;
|
|
consumes.liquid(Liquids.cryofluid, heating / coolantPower).update(false);
|
|
}};
|
|
|
|
impactReactor = new ImpactReactor("impact-reactor"){{
|
|
requirements(Category.power, with(Items.lead, 500, Items.silicon, 300, Items.graphite, 400, Items.thorium, 100, Items.surgeAlloy, 250, Items.metaglass, 250));
|
|
size = 4;
|
|
health = 900;
|
|
powerProduction = 130f;
|
|
itemDuration = 140f;
|
|
ambientSound = Sounds.pulse;
|
|
ambientSoundVolume = 0.07f;
|
|
|
|
consumes.power(25f);
|
|
consumes.item(Items.blastCompound);
|
|
consumes.liquid(Liquids.cryofluid, 0.25f);
|
|
}};
|
|
|
|
//endregion power
|
|
//region production
|
|
|
|
mechanicalDrill = new Drill("mechanical-drill"){{
|
|
requirements(Category.production, with(Items.copper, 12), true);
|
|
tier = 2;
|
|
drillTime = 600;
|
|
size = 2;
|
|
drawMineItem = true;
|
|
consumes.liquid(Liquids.water, 0.05f).boost();
|
|
}};
|
|
|
|
pneumaticDrill = new Drill("pneumatic-drill"){{
|
|
requirements(Category.production, with(Items.copper, 18, Items.graphite, 10));
|
|
tier = 3;
|
|
drillTime = 400;
|
|
size = 2;
|
|
drawMineItem = true;
|
|
consumes.liquid(Liquids.water, 0.06f).boost();
|
|
}};
|
|
|
|
laserDrill = new Drill("laser-drill"){{
|
|
requirements(Category.production, with(Items.copper, 35, Items.graphite, 30, Items.silicon, 30, Items.titanium, 20));
|
|
drillTime = 280;
|
|
size = 3;
|
|
hasPower = true;
|
|
tier = 4;
|
|
updateEffect = Fx.pulverizeMedium;
|
|
drillEffect = Fx.mineBig;
|
|
|
|
consumes.power(1.10f);
|
|
consumes.liquid(Liquids.water, 0.08f).boost();
|
|
}};
|
|
|
|
blastDrill = new Drill("blast-drill"){{
|
|
requirements(Category.production, with(Items.copper, 65, Items.silicon, 60, Items.titanium, 50, Items.thorium, 75));
|
|
drillTime = 280;
|
|
size = 4;
|
|
drawRim = true;
|
|
hasPower = true;
|
|
tier = 5;
|
|
updateEffect = Fx.pulverizeRed;
|
|
updateEffectChance = 0.03f;
|
|
drillEffect = Fx.mineHuge;
|
|
rotateSpeed = 6f;
|
|
warmupSpeed = 0.01f;
|
|
|
|
//more than the laser drill
|
|
liquidBoostIntensity = 1.8f;
|
|
|
|
consumes.power(3f);
|
|
consumes.liquid(Liquids.water, 0.1f).boost();
|
|
}};
|
|
|
|
waterExtractor = new SolidPump("water-extractor"){{
|
|
requirements(Category.production, with(Items.copper, 25, Items.graphite, 25, Items.lead, 20));
|
|
result = Liquids.water;
|
|
pumpAmount = 0.11f;
|
|
size = 2;
|
|
liquidCapacity = 30f;
|
|
rotateSpeed = 1.4f;
|
|
attribute = Attribute.water;
|
|
|
|
consumes.power(1.5f);
|
|
}};
|
|
|
|
cultivator = new Cultivator("cultivator"){{
|
|
requirements(Category.production, with(Items.copper, 25, Items.lead, 25, Items.silicon, 10));
|
|
outputItem = new ItemStack(Items.sporePod, 1);
|
|
craftTime = 140;
|
|
size = 2;
|
|
hasLiquids = true;
|
|
hasPower = true;
|
|
hasItems = true;
|
|
|
|
consumes.power(0.9f);
|
|
consumes.liquid(Liquids.water, 0.2f);
|
|
}};
|
|
|
|
oilExtractor = new Fracker("oil-extractor"){{
|
|
requirements(Category.production, with(Items.copper, 150, Items.graphite, 175, Items.lead, 115, Items.thorium, 115, Items.silicon, 75));
|
|
result = Liquids.oil;
|
|
updateEffect = Fx.pulverize;
|
|
liquidCapacity = 50f;
|
|
updateEffectChance = 0.05f;
|
|
pumpAmount = 0.25f;
|
|
size = 3;
|
|
liquidCapacity = 30f;
|
|
attribute = Attribute.oil;
|
|
baseEfficiency = 0f;
|
|
itemUseTime = 60f;
|
|
|
|
consumes.item(Items.sand);
|
|
consumes.power(3f);
|
|
consumes.liquid(Liquids.water, 0.15f);
|
|
}};
|
|
|
|
//endregion
|
|
//region storage
|
|
|
|
coreShard = new CoreBlock("core-shard"){{
|
|
requirements(Category.effect, BuildVisibility.editorOnly, with(Items.copper, 1000, Items.lead, 800));
|
|
alwaysUnlocked = true;
|
|
|
|
unitType = UnitTypes.alpha;
|
|
health = 1100;
|
|
itemCapacity = 4000;
|
|
size = 3;
|
|
|
|
unitCapModifier = 8;
|
|
}};
|
|
|
|
coreFoundation = new CoreBlock("core-foundation"){{
|
|
requirements(Category.effect, with(Items.copper, 3000, Items.lead, 3000, Items.silicon, 2000));
|
|
|
|
unitType = UnitTypes.beta;
|
|
health = 3500;
|
|
itemCapacity = 9000;
|
|
size = 4;
|
|
|
|
unitCapModifier = 14;
|
|
researchCostMultiplier = 0.04f;
|
|
}};
|
|
|
|
coreNucleus = new CoreBlock("core-nucleus"){{
|
|
requirements(Category.effect, with(Items.copper, 8000, Items.lead, 8000, Items.silicon, 5000, Items.thorium, 4000));
|
|
|
|
unitType = UnitTypes.gamma;
|
|
health = 6000;
|
|
itemCapacity = 13000;
|
|
size = 5;
|
|
|
|
unitCapModifier = 20;
|
|
researchCostMultiplier = 0.05f;
|
|
}};
|
|
|
|
vault = new StorageBlock("vault"){{
|
|
requirements(Category.effect, with(Items.titanium, 250, Items.thorium, 125));
|
|
size = 3;
|
|
itemCapacity = 1000;
|
|
flags = EnumSet.of(BlockFlag.storage);
|
|
}};
|
|
|
|
container = new StorageBlock("container"){{
|
|
requirements(Category.effect, with(Items.titanium, 100));
|
|
size = 2;
|
|
itemCapacity = 300;
|
|
flags = EnumSet.of(BlockFlag.storage);
|
|
}};
|
|
|
|
unloader = new Unloader("unloader"){{
|
|
requirements(Category.effect, with(Items.titanium, 25, Items.silicon, 30));
|
|
speed = 6f;
|
|
group = BlockGroup.transportation;
|
|
}};
|
|
|
|
//endregion
|
|
//region turrets
|
|
|
|
duo = new ItemTurret("duo"){{
|
|
requirements(Category.turret, with(Items.copper, 35), true);
|
|
ammo(
|
|
Items.copper, Bullets.standardCopper,
|
|
Items.graphite, Bullets.standardDense,
|
|
Items.pyratite, Bullets.standardIncendiary,
|
|
Items.silicon, Bullets.standardHoming
|
|
);
|
|
|
|
spread = 4f;
|
|
shots = 2;
|
|
alternate = true;
|
|
reloadTime = 20f;
|
|
restitution = 0.03f;
|
|
range = 100;
|
|
shootCone = 15f;
|
|
ammoUseEffect = Fx.casing1;
|
|
health = 250;
|
|
inaccuracy = 2f;
|
|
rotateSpeed = 10f;
|
|
}};
|
|
|
|
scatter = new ItemTurret("scatter"){{
|
|
requirements(Category.turret, with(Items.copper, 85, Items.lead, 45));
|
|
ammo(
|
|
Items.scrap, Bullets.flakScrap,
|
|
Items.lead, Bullets.flakLead,
|
|
Items.metaglass, Bullets.flakGlass
|
|
);
|
|
reloadTime = 18f;
|
|
range = 160f;
|
|
size = 2;
|
|
burstSpacing = 5f;
|
|
shots = 2;
|
|
targetGround = false;
|
|
|
|
recoilAmount = 2f;
|
|
rotateSpeed = 15f;
|
|
inaccuracy = 17f;
|
|
shootCone = 35f;
|
|
|
|
health = 200 * size * size;
|
|
shootSound = Sounds.shootSnap;
|
|
}};
|
|
|
|
scorch = new ItemTurret("scorch"){{
|
|
requirements(Category.turret, with(Items.copper, 25, Items.graphite, 22));
|
|
ammo(
|
|
Items.coal, Bullets.basicFlame,
|
|
Items.pyratite, Bullets.pyraFlame
|
|
);
|
|
recoilAmount = 0f;
|
|
reloadTime = 6f;
|
|
coolantMultiplier = 1.5f;
|
|
range = 60f;
|
|
shootCone = 50f;
|
|
targetAir = false;
|
|
ammoUseEffect = Fx.none;
|
|
health = 400;
|
|
shootSound = Sounds.flame;
|
|
}};
|
|
|
|
hail = new ItemTurret("hail"){{
|
|
requirements(Category.turret, with(Items.copper, 40, Items.graphite, 17));
|
|
ammo(
|
|
Items.graphite, Bullets.artilleryDense,
|
|
Items.silicon, Bullets.artilleryHoming,
|
|
Items.pyratite, Bullets.artilleryIncendiary
|
|
);
|
|
targetAir = false;
|
|
reloadTime = 60f;
|
|
recoilAmount = 2f;
|
|
range = 230f;
|
|
inaccuracy = 1f;
|
|
shootCone = 10f;
|
|
health = 260;
|
|
shootSound = Sounds.bang;
|
|
}};
|
|
|
|
wave = new LiquidTurret("wave"){{
|
|
requirements(Category.turret, with(Items.metaglass, 45, Items.lead, 75));
|
|
ammo(
|
|
Liquids.water, Bullets.waterShot,
|
|
Liquids.slag, Bullets.slagShot,
|
|
Liquids.cryofluid, Bullets.cryoShot,
|
|
Liquids.oil, Bullets.oilShot
|
|
);
|
|
size = 2;
|
|
recoilAmount = 0f;
|
|
reloadTime = 2f;
|
|
inaccuracy = 5f;
|
|
shootCone = 50f;
|
|
liquidCapacity = 10f;
|
|
shootEffect = Fx.shootLiquid;
|
|
range = 110f;
|
|
health = 250 * size * size;
|
|
flags = EnumSet.of(BlockFlag.turret, BlockFlag.extinguisher);
|
|
}};
|
|
|
|
lancer = new ChargeTurret("lancer"){{
|
|
requirements(Category.turret, with(Items.copper, 25, Items.lead, 50, Items.silicon, 45));
|
|
range = 155f;
|
|
chargeTime = 50f;
|
|
chargeMaxDelay = 30f;
|
|
chargeEffects = 7;
|
|
recoilAmount = 2f;
|
|
reloadTime = 90f;
|
|
cooldown = 0.03f;
|
|
powerUse = 6f;
|
|
shootShake = 2f;
|
|
shootEffect = Fx.lancerLaserShoot;
|
|
smokeEffect = Fx.none;
|
|
chargeEffect = Fx.lancerLaserCharge;
|
|
chargeBeginEffect = Fx.lancerLaserChargeBegin;
|
|
heatColor = Color.red;
|
|
size = 2;
|
|
health = 280 * size * size;
|
|
targetAir = false;
|
|
shootSound = Sounds.laser;
|
|
|
|
shootType = new LaserBulletType(140){{
|
|
colors = new Color[]{Pal.lancerLaser.cpy().mul(1f, 1f, 1f, 0.4f), Pal.lancerLaser, Color.white};
|
|
hitEffect = Fx.hitLancer;
|
|
despawnEffect = Fx.none;
|
|
hitSize = 4;
|
|
lifetime = 16f;
|
|
drawSize = 400f;
|
|
collidesAir = false;
|
|
}};
|
|
}};
|
|
|
|
arc = new PowerTurret("arc"){{
|
|
requirements(Category.turret, with(Items.copper, 35, Items.lead, 50));
|
|
shootType = new LightningBulletType(){{
|
|
damage = 20;
|
|
lightningLength = 25;
|
|
collidesAir = false;
|
|
}};
|
|
reloadTime = 35f;
|
|
shootCone = 40f;
|
|
rotateSpeed = 8f;
|
|
powerUse = 3f;
|
|
targetAir = false;
|
|
range = 90f;
|
|
shootEffect = Fx.lightningShoot;
|
|
heatColor = Color.red;
|
|
recoilAmount = 1f;
|
|
size = 1;
|
|
health = 260;
|
|
shootSound = Sounds.spark;
|
|
}};
|
|
|
|
parallax = new TractorBeamTurret("parallax"){{
|
|
requirements(Category.turret, with(Items.silicon, 120, Items.titanium, 90, Items.graphite, 30));
|
|
|
|
hasPower = true;
|
|
size = 2;
|
|
force = 8f;
|
|
scaledForce = 7f;
|
|
range = 230f;
|
|
damage = 0.3f;
|
|
health = 160 * size * size;
|
|
rotateSpeed = 10;
|
|
|
|
consumes.powerCond(3f, (TractorBeamBuild e) -> e.target != null);
|
|
}};
|
|
|
|
swarmer = new ItemTurret("swarmer"){{
|
|
requirements(Category.turret, with(Items.graphite, 35, Items.titanium, 35, Items.plastanium, 45, Items.silicon, 30));
|
|
ammo(
|
|
Items.blastCompound, Bullets.missileExplosive,
|
|
Items.pyratite, Bullets.missileIncendiary,
|
|
Items.surgeAlloy, Bullets.missileSurge
|
|
);
|
|
reloadTime = 30f;
|
|
shots = 4;
|
|
burstSpacing = 5;
|
|
inaccuracy = 10f;
|
|
range = 190f;
|
|
xRand = 6f;
|
|
size = 2;
|
|
health = 300 * size * size;
|
|
shootSound = Sounds.missile;
|
|
}};
|
|
|
|
salvo = new ItemTurret("salvo"){{
|
|
requirements(Category.turret, with(Items.copper, 105, Items.graphite, 95, Items.titanium, 60));
|
|
ammo(
|
|
Items.copper, Bullets.standardCopper,
|
|
Items.graphite, Bullets.standardDense,
|
|
Items.pyratite, Bullets.standardIncendiary,
|
|
Items.silicon, Bullets.standardHoming,
|
|
Items.thorium, Bullets.standardThorium
|
|
);
|
|
|
|
size = 2;
|
|
range = 150f;
|
|
reloadTime = 38f;
|
|
restitution = 0.03f;
|
|
ammoEjectBack = 3f;
|
|
cooldown = 0.03f;
|
|
recoilAmount = 3f;
|
|
shootShake = 1f;
|
|
burstSpacing = 3f;
|
|
shots = 4;
|
|
ammoUseEffect = Fx.casing2;
|
|
health = 240 * size * size;
|
|
shootSound = Sounds.shootBig;
|
|
}};
|
|
|
|
segment = new PointDefenseTurret("segment"){{
|
|
requirements(Category.turret, with(Items.silicon, 130, Items.thorium, 80, Items.phaseFabric, 40));
|
|
|
|
health = 250 * size * size;
|
|
range = 160f;
|
|
hasPower = true;
|
|
consumes.powerCond(8f, (PointDefenseBuild b) -> b.target != null);
|
|
size = 2;
|
|
shootLength = 5f;
|
|
bulletDamage = 25f;
|
|
reloadTime = 9f;
|
|
}};
|
|
|
|
tsunami = new LiquidTurret("tsunami"){{
|
|
requirements(Category.turret, with(Items.metaglass, 100, Items.lead, 400, Items.titanium, 250, Items.thorium, 100));
|
|
ammo(
|
|
Liquids.water, Bullets.heavyWaterShot,
|
|
Liquids.slag, Bullets.heavySlagShot,
|
|
Liquids.cryofluid, Bullets.heavyCryoShot,
|
|
Liquids.oil, Bullets.heavyOilShot
|
|
);
|
|
size = 3;
|
|
recoilAmount = 0f;
|
|
reloadTime = 2f;
|
|
shots = 2;
|
|
velocityInaccuracy = 0.1f;
|
|
inaccuracy = 4f;
|
|
recoilAmount = 1f;
|
|
restitution = 0.04f;
|
|
shootCone = 45f;
|
|
liquidCapacity = 40f;
|
|
shootEffect = Fx.shootLiquid;
|
|
range = 190f;
|
|
health = 250 * size * size;
|
|
}};
|
|
|
|
fuse = new ItemTurret("fuse"){{
|
|
requirements(Category.turret, with(Items.copper, 225, Items.graphite, 225, Items.thorium, 100));
|
|
|
|
reloadTime = 35f;
|
|
shootShake = 4f;
|
|
range = 90f;
|
|
recoilAmount = 5f;
|
|
shots = 3;
|
|
spread = 20f;
|
|
restitution = 0.1f;
|
|
shootCone = 30;
|
|
size = 3;
|
|
|
|
health = 220 * size * size;
|
|
shootSound = Sounds.shotgun;
|
|
|
|
float brange = range + 10f;
|
|
|
|
ammo(
|
|
Items.titanium, new ShrapnelBulletType(){{
|
|
length = brange;
|
|
damage = 66f;
|
|
ammoMultiplier = 4f;
|
|
width = 17f;
|
|
reloadMultiplier = 1.3f;
|
|
}},
|
|
Items.thorium, new ShrapnelBulletType(){{
|
|
length = brange;
|
|
damage = 105f;
|
|
ammoMultiplier = 5f;
|
|
toColor = Pal.thoriumPink;
|
|
shootEffect = smokeEffect = Fx.thoriumShoot;
|
|
}}
|
|
);
|
|
}};
|
|
|
|
ripple = new ItemTurret("ripple"){{
|
|
requirements(Category.turret, with(Items.copper, 150, Items.graphite, 135, Items.titanium, 60));
|
|
ammo(
|
|
Items.graphite, Bullets.artilleryDense,
|
|
Items.silicon, Bullets.artilleryHoming,
|
|
Items.pyratite, Bullets.artilleryIncendiary,
|
|
Items.blastCompound, Bullets.artilleryExplosive,
|
|
Items.plastanium, Bullets.artilleryPlastic
|
|
);
|
|
|
|
targetAir = false;
|
|
size = 3;
|
|
shots = 4;
|
|
inaccuracy = 12f;
|
|
reloadTime = 60f;
|
|
ammoEjectBack = 5f;
|
|
ammoUseEffect = Fx.casing3Double;
|
|
ammoPerShot = 2;
|
|
cooldown = 0.03f;
|
|
velocityInaccuracy = 0.2f;
|
|
restitution = 0.02f;
|
|
recoilAmount = 6f;
|
|
shootShake = 2f;
|
|
range = 290f;
|
|
minRange = 50f;
|
|
|
|
health = 130 * size * size;
|
|
shootSound = Sounds.artillery;
|
|
}};
|
|
|
|
cyclone = new ItemTurret("cyclone"){{
|
|
requirements(Category.turret, with(Items.copper, 200, Items.titanium, 125, Items.plastanium, 80));
|
|
ammo(
|
|
Items.metaglass, Bullets.fragGlass,
|
|
Items.blastCompound, Bullets.fragExplosive,
|
|
Items.plastanium, Bullets.fragPlastic,
|
|
Items.surgeAlloy, Bullets.fragSurge
|
|
);
|
|
xRand = 4f;
|
|
reloadTime = 8f;
|
|
range = 200f;
|
|
size = 3;
|
|
recoilAmount = 3f;
|
|
rotateSpeed = 10f;
|
|
inaccuracy = 10f;
|
|
shootCone = 30f;
|
|
shootSound = Sounds.shootSnap;
|
|
|
|
health = 145 * size * size;
|
|
}};
|
|
|
|
foreshadow = new ItemTurret("foreshadow"){{
|
|
float brange = range = 500f;
|
|
|
|
requirements(Category.turret, with(Items.copper, 1000, Items.metaglass, 600, Items.surgeAlloy, 300, Items.plastanium, 200, Items.silicon, 600));
|
|
ammo(
|
|
Items.surgeAlloy, new PointBulletType(){{
|
|
shootEffect = Fx.instShoot;
|
|
hitEffect = Fx.instHit;
|
|
smokeEffect = Fx.smokeCloud;
|
|
trailEffect = Fx.instTrail;
|
|
despawnEffect = Fx.instBomb;
|
|
trailSpacing = 20f;
|
|
damage = 1350;
|
|
tileDamageMultiplier = 0.3f;
|
|
speed = brange;
|
|
hitShake = 6f;
|
|
ammoMultiplier = 1f;
|
|
}}
|
|
);
|
|
|
|
rotateSpeed = 2.5f;
|
|
reloadTime = 200f;
|
|
ammoUseEffect = Fx.casing3Double;
|
|
recoilAmount = 5f;
|
|
restitution = 0.009f;
|
|
cooldown = 0.009f;
|
|
shootShake = 4f;
|
|
shots = 1;
|
|
size = 4;
|
|
shootCone = 2f;
|
|
shootSound = Sounds.railgun;
|
|
unitSort = (u, x, y) -> -u.maxHealth;
|
|
|
|
coolantMultiplier = 0.2f;
|
|
|
|
health = 150 * size * size;
|
|
coolantUsage = 1f;
|
|
|
|
consumes.powerCond(10f, TurretBuild::isActive);
|
|
}};
|
|
|
|
spectre = new ItemTurret("spectre"){{
|
|
requirements(Category.turret, with(Items.copper, 900, Items.graphite, 300, Items.surgeAlloy, 250, Items.plastanium, 175, Items.thorium, 250));
|
|
ammo(
|
|
Items.graphite, Bullets.standardDenseBig,
|
|
Items.pyratite, Bullets.standardIncendiaryBig,
|
|
Items.thorium, Bullets.standardThoriumBig
|
|
);
|
|
reloadTime = 6f;
|
|
coolantMultiplier = 0.5f;
|
|
restitution = 0.1f;
|
|
ammoUseEffect = Fx.casing3;
|
|
range = 200f;
|
|
inaccuracy = 3f;
|
|
recoilAmount = 3f;
|
|
spread = 8f;
|
|
alternate = true;
|
|
shootShake = 2f;
|
|
shots = 2;
|
|
size = 4;
|
|
shootCone = 24f;
|
|
shootSound = Sounds.shootBig;
|
|
|
|
health = 160 * size * size;
|
|
coolantUsage = 1f;
|
|
}};
|
|
|
|
meltdown = new LaserTurret("meltdown"){{
|
|
requirements(Category.turret, with(Items.copper, 1200, Items.lead, 350, Items.graphite, 300, Items.surgeAlloy, 325, Items.silicon, 325));
|
|
shootEffect = Fx.shootBigSmoke2;
|
|
shootCone = 40f;
|
|
recoilAmount = 4f;
|
|
size = 4;
|
|
shootShake = 2f;
|
|
range = 190f;
|
|
reloadTime = 90f;
|
|
firingMoveFract = 0.5f;
|
|
shootDuration = 220f;
|
|
powerUse = 17f;
|
|
shootSound = Sounds.laserbig;
|
|
loopSound = Sounds.beam;
|
|
loopSoundVolume = 2f;
|
|
|
|
shootType = new ContinuousLaserBulletType(70){{
|
|
length = 200f;
|
|
hitEffect = Fx.hitMeltdown;
|
|
drawSize = 420f;
|
|
|
|
incendChance = 0.4f;
|
|
incendSpread = 5f;
|
|
incendAmount = 1;
|
|
}};
|
|
|
|
health = 200 * size * size;
|
|
consumes.add(new ConsumeLiquidFilter(liquid -> liquid.temperature <= 0.5f && liquid.flammability < 0.1f, 0.5f)).update(false);
|
|
}};
|
|
|
|
//endregion
|
|
//region units
|
|
|
|
commandCenter = new CommandCenter("command-center"){{
|
|
requirements(Category.units, ItemStack.with(Items.copper, 200, Items.lead, 250, Items.silicon, 250, Items.graphite, 100));
|
|
size = 2;
|
|
health = size * size * 55;
|
|
}};
|
|
|
|
groundFactory = new UnitFactory("ground-factory"){{
|
|
requirements(Category.units, with(Items.copper, 50, Items.lead, 120, Items.silicon, 80));
|
|
plans = Seq.with(
|
|
new UnitPlan(UnitTypes.dagger, 60f * 15, with(Items.silicon, 10, Items.lead, 10)),
|
|
new UnitPlan(UnitTypes.crawler, 60f * 12, with(Items.silicon, 10, Items.coal, 20)),
|
|
new UnitPlan(UnitTypes.nova, 60f * 40, with(Items.silicon, 30, Items.lead, 20, Items.titanium, 20))
|
|
);
|
|
size = 3;
|
|
consumes.power(1.2f);
|
|
}};
|
|
|
|
airFactory = new UnitFactory("air-factory"){{
|
|
requirements(Category.units, with(Items.copper, 60, Items.lead, 70));
|
|
plans = Seq.with(
|
|
new UnitPlan(UnitTypes.flare, 60f * 15, with(Items.silicon, 15)),
|
|
new UnitPlan(UnitTypes.mono, 60f * 35, with(Items.silicon, 30, Items.lead, 15))
|
|
);
|
|
size = 3;
|
|
consumes.power(1.2f);
|
|
}};
|
|
|
|
navalFactory = new UnitFactory("naval-factory"){{
|
|
requirements(Category.units, with(Items.copper, 150, Items.lead, 130, Items.metaglass, 120));
|
|
plans = Seq.with(
|
|
new UnitPlan(UnitTypes.risso, 60f * 45f, with(Items.silicon, 20, Items.metaglass, 35))
|
|
);
|
|
size = 3;
|
|
consumes.power(1.2f);
|
|
floating = true;
|
|
}};
|
|
|
|
additiveReconstructor = new Reconstructor("additive-reconstructor"){{
|
|
requirements(Category.units, with(Items.copper, 200, Items.lead, 120, Items.silicon, 90));
|
|
|
|
size = 3;
|
|
consumes.power(3f);
|
|
consumes.items(with(Items.silicon, 40, Items.graphite, 40));
|
|
|
|
constructTime = 60f * 10f;
|
|
|
|
upgrades.addAll(
|
|
new UnitType[]{UnitTypes.nova, UnitTypes.pulsar},
|
|
new UnitType[]{UnitTypes.dagger, UnitTypes.mace},
|
|
new UnitType[]{UnitTypes.crawler, UnitTypes.atrax},
|
|
new UnitType[]{UnitTypes.flare, UnitTypes.horizon},
|
|
new UnitType[]{UnitTypes.mono, UnitTypes.poly},
|
|
new UnitType[]{UnitTypes.risso, UnitTypes.minke}
|
|
);
|
|
}};
|
|
|
|
multiplicativeReconstructor = new Reconstructor("multiplicative-reconstructor"){{
|
|
requirements(Category.units, with(Items.lead, 650, Items.silicon, 450, Items.titanium, 350, Items.thorium, 650));
|
|
|
|
size = 5;
|
|
consumes.power(6f);
|
|
consumes.items(with(Items.silicon, 130, Items.titanium, 80, Items.metaglass, 40));
|
|
|
|
constructTime = 60f * 30f;
|
|
|
|
upgrades.addAll(
|
|
new UnitType[]{UnitTypes.horizon, UnitTypes.zenith},
|
|
new UnitType[]{UnitTypes.mace, UnitTypes.fortress},
|
|
new UnitType[]{UnitTypes.poly, UnitTypes.mega},
|
|
new UnitType[]{UnitTypes.minke, UnitTypes.bryde},
|
|
new UnitType[]{UnitTypes.pulsar, UnitTypes.quasar},
|
|
new UnitType[]{UnitTypes.atrax, UnitTypes.spiroct}
|
|
);
|
|
}};
|
|
|
|
exponentialReconstructor = new Reconstructor("exponential-reconstructor"){{
|
|
requirements(Category.units, with(Items.lead, 2000, Items.silicon, 1000, Items.titanium, 2000, Items.thorium, 750, Items.plastanium, 450, Items.phaseFabric, 600));
|
|
|
|
size = 7;
|
|
consumes.power(13f);
|
|
consumes.items(with(Items.silicon, 850, Items.titanium, 750, Items.plastanium, 650));
|
|
consumes.liquid(Liquids.cryofluid, 1f);
|
|
|
|
constructTime = 60f * 60f * 1.5f;
|
|
liquidCapacity = 60f;
|
|
|
|
upgrades.addAll(
|
|
new UnitType[]{UnitTypes.zenith, UnitTypes.antumbra},
|
|
new UnitType[]{UnitTypes.spiroct, UnitTypes.arkyid},
|
|
new UnitType[]{UnitTypes.fortress, UnitTypes.scepter},
|
|
new UnitType[]{UnitTypes.bryde, UnitTypes.sei},
|
|
new UnitType[]{UnitTypes.mega, UnitTypes.quad},
|
|
new UnitType[]{UnitTypes.quasar, UnitTypes.vela}
|
|
);
|
|
}};
|
|
|
|
tetrativeReconstructor = new Reconstructor("tetrative-reconstructor"){{
|
|
requirements(Category.units, with(Items.lead, 4000, Items.silicon, 3000, Items.thorium, 1000, Items.plastanium, 600, Items.phaseFabric, 600, Items.surgeAlloy, 800));
|
|
|
|
size = 9;
|
|
consumes.power(25f);
|
|
consumes.items(with(Items.silicon, 1000, Items.plastanium, 600, Items.surgeAlloy, 500, Items.phaseFabric, 350));
|
|
consumes.liquid(Liquids.cryofluid, 3f);
|
|
|
|
constructTime = 60f * 60f * 4;
|
|
liquidCapacity = 180f;
|
|
|
|
upgrades.addAll(
|
|
new UnitType[]{UnitTypes.antumbra, UnitTypes.eclipse},
|
|
new UnitType[]{UnitTypes.arkyid, UnitTypes.toxopid},
|
|
new UnitType[]{UnitTypes.scepter, UnitTypes.reign},
|
|
new UnitType[]{UnitTypes.sei, UnitTypes.omura},
|
|
new UnitType[]{UnitTypes.quad, UnitTypes.oct},
|
|
new UnitType[]{UnitTypes.vela, UnitTypes.corvus}
|
|
);
|
|
}};
|
|
|
|
repairPoint = new RepairPoint("repair-point"){{
|
|
requirements(Category.units, with(Items.lead, 15, Items.copper, 15, Items.silicon, 15));
|
|
repairSpeed = 0.5f;
|
|
repairRadius = 65f;
|
|
powerUse = 1f;
|
|
}};
|
|
|
|
resupplyPoint = new ResupplyPoint("resupply-point"){{
|
|
requirements(Category.units, BuildVisibility.ammoOnly, with(Items.lead, 20, Items.copper, 15, Items.silicon, 15));
|
|
|
|
size = 2;
|
|
range = 80f;
|
|
itemCapacity = 20;
|
|
ammoAmount = 5;
|
|
|
|
consumes.item(Items.copper, 1);
|
|
}};
|
|
|
|
//endregion
|
|
//region sandbox
|
|
|
|
powerSource = new PowerSource("power-source"){{
|
|
requirements(Category.power, BuildVisibility.sandboxOnly, with());
|
|
alwaysUnlocked = true;
|
|
}};
|
|
|
|
powerVoid = new PowerVoid("power-void"){{
|
|
requirements(Category.power, BuildVisibility.sandboxOnly, with());
|
|
alwaysUnlocked = true;
|
|
}};
|
|
|
|
itemSource = new ItemSource("item-source"){{
|
|
requirements(Category.distribution, BuildVisibility.sandboxOnly, with());
|
|
alwaysUnlocked = true;
|
|
}};
|
|
|
|
itemVoid = new ItemVoid("item-void"){{
|
|
requirements(Category.distribution, BuildVisibility.sandboxOnly, with());
|
|
alwaysUnlocked = true;
|
|
}};
|
|
|
|
liquidSource = new LiquidSource("liquid-source"){{
|
|
requirements(Category.liquid, BuildVisibility.sandboxOnly, with());
|
|
alwaysUnlocked = true;
|
|
}};
|
|
|
|
liquidVoid = new LiquidVoid("liquid-void"){{
|
|
requirements(Category.liquid, BuildVisibility.sandboxOnly, with());
|
|
alwaysUnlocked = true;
|
|
}};
|
|
|
|
illuminator = new LightBlock("illuminator"){{
|
|
requirements(Category.effect, BuildVisibility.lightingOnly, with(Items.graphite, 12, Items.silicon, 8));
|
|
brightness = 0.75f;
|
|
radius = 120f;
|
|
consumes.power(0.05f);
|
|
}};
|
|
|
|
//endregion
|
|
//region legacy
|
|
|
|
//looked up by name, no ref needed
|
|
new LegacyMechPad("legacy-mech-pad");
|
|
new LegacyUnitFactory("legacy-unit-factory");
|
|
new LegacyUnitFactory("legacy-unit-factory-air"){{
|
|
replacement = Blocks.airFactory;
|
|
}};
|
|
new LegacyUnitFactory("legacy-unit-factory-ground"){{
|
|
replacement = Blocks.groundFactory;
|
|
}};
|
|
|
|
//endregion
|
|
//region campaign
|
|
|
|
launchPad = new LaunchPad("launch-pad"){{
|
|
requirements(Category.effect, BuildVisibility.campaignOnly, with(Items.copper, 350, Items.silicon, 140, Items.lead, 200, Items.titanium, 150));
|
|
size = 3;
|
|
itemCapacity = 100;
|
|
launchTime = 60f * 20;
|
|
hasPower = true;
|
|
consumes.power(4f);
|
|
}};
|
|
|
|
//TODO remove
|
|
launchPadLarge = new LaunchPad("launch-pad-large"){{
|
|
size = 4;
|
|
itemCapacity = 300;
|
|
launchTime = 60f * 35;
|
|
hasPower = true;
|
|
consumes.power(6f);
|
|
}};
|
|
|
|
interplanetaryAccelerator = new Accelerator("interplanetary-accelerator"){{
|
|
requirements(Category.effect, BuildVisibility.campaignOnly, with(Items.copper, 16000, Items.silicon, 11000, Items.thorium, 13000, Items.titanium, 12000, Items.surgeAlloy, 6000, Items.phaseFabric, 5000));
|
|
researchCostMultiplier = 0.1f;
|
|
size = 7;
|
|
hasPower = true;
|
|
consumes.power(10f);
|
|
buildCostMultiplier = 0.5f;
|
|
}};
|
|
|
|
//endregion campaign
|
|
//region logic
|
|
|
|
message = new MessageBlock("message"){{
|
|
requirements(Category.logic, with(Items.graphite, 5));
|
|
}};
|
|
|
|
switchBlock = new SwitchBlock("switch"){{
|
|
requirements(Category.logic, with(Items.graphite, 5));
|
|
}};
|
|
|
|
microProcessor = new LogicBlock("micro-processor"){{
|
|
requirements(Category.logic, with(Items.copper, 80, Items.lead, 50, Items.silicon, 30));
|
|
|
|
instructionsPerTick = 2;
|
|
|
|
size = 1;
|
|
}};
|
|
|
|
logicProcessor = new LogicBlock("logic-processor"){{
|
|
requirements(Category.logic, with(Items.lead, 320, Items.silicon, 60, Items.graphite, 60, Items.thorium, 50));
|
|
|
|
instructionsPerTick = 8;
|
|
|
|
range = 8 * 22;
|
|
|
|
size = 2;
|
|
}};
|
|
|
|
hyperProcessor = new LogicBlock("hyper-processor"){{
|
|
requirements(Category.logic, with(Items.lead, 450, Items.silicon, 130, Items.thorium, 75, Items.surgeAlloy, 50));
|
|
|
|
consumes.liquid(Liquids.cryofluid, 0.08f);
|
|
hasLiquids = true;
|
|
|
|
instructionsPerTick = 25;
|
|
|
|
range = 8 * 42;
|
|
|
|
size = 3;
|
|
}};
|
|
|
|
memoryCell = new MemoryBlock("memory-cell"){{
|
|
requirements(Category.logic, with(Items.graphite, 30, Items.silicon, 30));
|
|
|
|
memoryCapacity = 64;
|
|
}};
|
|
|
|
memoryBank = new MemoryBlock("memory-bank"){{
|
|
requirements(Category.logic, with(Items.graphite, 80, Items.silicon, 80, Items.phaseFabric, 30));
|
|
|
|
memoryCapacity = 512;
|
|
size = 2;
|
|
}};
|
|
|
|
logicDisplay = new LogicDisplay("logic-display"){{
|
|
requirements(Category.logic, with(Items.lead, 100, Items.silicon, 50, Items.metaglass, 50));
|
|
|
|
displaySize = 80;
|
|
|
|
size = 3;
|
|
}};
|
|
|
|
largeLogicDisplay = new LogicDisplay("large-logic-display"){{
|
|
requirements(Category.logic, with(Items.lead, 200, Items.silicon, 150, Items.metaglass, 100, Items.phaseFabric, 75));
|
|
|
|
displaySize = 176;
|
|
|
|
size = 6;
|
|
}};
|
|
|
|
//endregion
|
|
//region experimental
|
|
|
|
blockForge = new BlockForge("block-forge"){{
|
|
requirements(Category.production, BuildVisibility.debugOnly, with(Items.thorium, 100));
|
|
hasPower = true;
|
|
consumes.power(2f);
|
|
size = 3;
|
|
}};
|
|
|
|
blockLoader = new BlockLoader("block-loader"){{
|
|
requirements(Category.production, BuildVisibility.debugOnly, with(Items.thorium, 100));
|
|
hasPower = true;
|
|
consumes.power(2f);
|
|
size = 3;
|
|
}};
|
|
|
|
blockUnloader = new BlockUnloader("block-unloader"){{
|
|
requirements(Category.production, BuildVisibility.debugOnly, with(Items.thorium, 100));
|
|
hasPower = true;
|
|
consumes.power(2f);
|
|
size = 3;
|
|
}};
|
|
|
|
//endregion
|
|
}
|
|
}
|