Initial Erekir tech tree

This commit is contained in:
Anuken
2021-11-28 20:51:26 -05:00
parent 30e2d52341
commit 68e0b0e27e
12 changed files with 209 additions and 51 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 231 B

After

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 239 B

After

Width:  |  Height:  |  Size: 338 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 354 B

After

Width:  |  Height:  |  Size: 351 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -4,7 +4,6 @@ import arc.graphics.*;
import arc.math.*;
import arc.struct.*;
import mindustry.*;
import mindustry.ctype.*;
import mindustry.entities.*;
import mindustry.entities.bullet.*;
import mindustry.entities.effect.*;
@ -59,11 +58,12 @@ public class Blocks{
wallOreBeryl, graphiticWall,
//crafting
siliconSmelter, siliconCrucible, siliconArcFurnace, kiln, graphitePress, plastaniumCompressor, multiPress, phaseWeaver, surgeSmelter, pyratiteMixer, blastMixer, cryofluidMixer,
siliconSmelter, siliconCrucible, kiln, graphitePress, plastaniumCompressor, multiPress, phaseWeaver, surgeSmelter, pyratiteMixer, blastMixer, cryofluidMixer,
melter, separator, disassembler, sporePress, pulverizer, incinerator, coalCentrifuge,
//erekir
electrolyzer, oxidationChamber, atmosphericConcentrator, slagHeater, slagIncinerator, heatReactor, carbideCrucible, slagCentrifuge, surgeCrucible, cyanogenSynthesizer, phaseSynthesizer,
siliconArcFurnace, electrolyzer, oxidationChamber, atmosphericConcentrator, slagHeater, slagIncinerator, heatReactor,
carbideCrucible, slagCentrifuge, surgeCrucible, cyanogenSynthesizer, phaseSynthesizer,
cellSynthesisChamber,
//sandbox
@ -726,9 +726,8 @@ public class Blocks{
consumes.power(4f);
}};
//TODO
siliconArcFurnace = new GenericCrafter("silicon-arc-furnace"){{
requirements(Category.crafting, with(Items.thorium, 200, Items.beryllium, 40, Items.tungsten, 80));
requirements(Category.crafting, with(Items.beryllium, 60, Items.graphite, 80));
craftEffect = Fx.none;
outputItem = new ItemStack(Items.silicon, 5);
craftTime = 40f;
@ -952,7 +951,7 @@ public class Blocks{
//TODO better name
electrolyzer = new GenericCrafter("electrolyzer"){{
requirements(Category.crafting, with(Items.tungsten, 60, Items.graphite, 30));
requirements(Category.crafting, with(Items.silicon, 50, Items.graphite, 40, Items.beryllium, 40));
size = 3;
craftTime = 10f;
@ -989,7 +988,7 @@ public class Blocks{
}};
atmosphericConcentrator = new HeatCrafter("atmospheric-concentrator"){{
requirements(Category.crafting, with(Items.tungsten, 60, Items.graphite, 30));
requirements(Category.crafting, with(Items.oxide, 50, Items.beryllium, 30, Items.silicon, 40));
size = 3;
craftTime = 10f;
hasLiquids = true;
@ -1013,7 +1012,7 @@ public class Blocks{
}};
oxidationChamber = new HeatProducer("oxidation-chamber"){{
requirements(Category.crafting, with(Items.tungsten, 60, Items.graphite, 30));
requirements(Category.crafting, with(Items.tungsten, 60, Items.graphite, 40, Items.silicon, 50));
size = 3;
outputItem = new ItemStack(Items.oxide, 1);
@ -1053,7 +1052,7 @@ public class Blocks{
heatReactor = new HeatProducer("heat-reactor"){{
//TODO gas/liquid requirement?
requirements(Category.crafting, with(Items.tungsten, 60, Items.graphite, 30));
requirements(Category.crafting, with(Items.oxide, 70, Items.graphite, 20, Items.carbide, 10, Items.thorium, 80));
size = 3;
craftTime = 60f * 10f;
@ -1065,7 +1064,7 @@ public class Blocks{
}};
carbideCrucible = new HeatCrafter("carbide-crucible"){{
requirements(Category.crafting, with(Items.tungsten, 60, Items.graphite, 30));
requirements(Category.crafting, with(Items.tungsten, 90, Items.thorium, 70, Items.oxide, 50));
craftEffect = Fx.none;
outputItem = new ItemStack(Items.carbide, 1);
craftTime = 60f * 3f;
@ -1115,9 +1114,8 @@ public class Blocks{
}};
//TODO should have a useful turret ammo byproduct? scrap?
//original: consumes.items(with(Items.copper, 3, Items.lead, 4, Items.titanium, 2, Items.silicon, 3));
surgeCrucible = new HeatCrafter("surge-crucible"){{
requirements(Category.crafting, with(Items.tungsten, 60, Items.graphite, 60, Items.carbide, 30));
requirements(Category.crafting, with(Items.silicon, 100, Items.graphite, 80, Items.carbide, 60, Items.thorium, 90));
size = 3;
@ -1156,7 +1154,7 @@ public class Blocks{
cyanogenSynthesizer = new HeatCrafter("cyanogen-synthesizer"){{
//TODO requirements
requirements(Category.crafting, with(Items.tungsten, 60, Items.graphite, 60, Items.carbide, 30));
requirements(Category.crafting, with(Items.carbide, 50, Items.silicon, 80, Items.beryllium, 80));
heatRequirement = 5f;
@ -1185,9 +1183,9 @@ public class Blocks{
consumes.power(2f);
}};
//TODO bad name
//TODO bad name, and there's no use for phase yet...
phaseSynthesizer = new HeatCrafter("phase-synthesizer"){{
requirements(Category.crafting, with(Items.tungsten, 60, Items.graphite, 60, Items.carbide, 30));
requirements(Category.crafting, with(Items.surgeAlloy, 60, Items.carbide, 40, Items.silicon, 80, Items.thorium, 80));
size = 3;
@ -1446,7 +1444,7 @@ public class Blocks{
}};
buildTower = new BuildTurret("build-tower"){{
requirements(Category.effect, with(Items.graphite, 40, Items.beryllium, 50));
requirements(Category.effect, with(Items.silicon, 60, Items.tungsten, 60, Items.oxide, 40));
outlineColor = Pal.darkOutline;
consumes.power(3f);
range = 120f;
@ -1574,17 +1572,17 @@ public class Blocks{
}};
ductBridge = new DuctBridge("duct-bridge"){{
requirements(Category.distribution, with(Items.graphite, 15));
requirements(Category.distribution, with(Items.graphite, 15, Items.tungsten, 5));
speed = 4f;
}};
ductUnloader = new DirectionalUnloader("duct-unloader"){{
requirements(Category.distribution, with(Items.graphite, 20, Items.silicon, 20));
requirements(Category.distribution, with(Items.graphite, 20, Items.silicon, 20, Items.tungsten, 10));
speed = 4f;
}};
surgeConveyor = new StackConveyor("surge-conveyor"){{
requirements(Category.distribution, with(Items.surgeAlloy, 3, Items.graphite, 5));
requirements(Category.distribution, with(Items.surgeAlloy, 3, Items.oxide, 5));
health = 90;
//TODO different base speed/item capacity?
speed = 5f / 60f;
@ -1599,7 +1597,7 @@ public class Blocks{
}};
surgeRouter = new StackRouter("surge-router"){{
requirements(Category.distribution, with(Items.graphite, 10, Items.surgeAlloy, 10));
requirements(Category.distribution, with(Items.oxide, 10, Items.surgeAlloy, 10));
speed = 6f;
@ -1703,7 +1701,7 @@ public class Blocks{
//TODO different name
reinforcedPump = new Pump("reinforced-pump"){{
requirements(Category.liquid, with(Items.beryllium, 70, Items.tungsten, 20, Items.silicon, 20));
requirements(Category.liquid, with(Items.beryllium, 40, Items.tungsten, 30, Items.silicon, 20));
//TODO CUSTOM DRAW ANIMATION - pistons - repurpose DrawBlock?
consumes.liquid(Liquids.hydrogen, 1.5f / 60f);
@ -1713,7 +1711,7 @@ public class Blocks{
}};
reinforcedConduit = new ArmoredConduit("reinforced-conduit"){{
requirements(Category.liquid, with(Items.beryllium, 2, Items.graphite, 1));
requirements(Category.liquid, with(Items.beryllium, 2));
botColor = Pal.darkestMetal;
leaks = true;
liquidCapacity = 20f;
@ -1722,14 +1720,16 @@ public class Blocks{
}};
//TODO is this necessary? junctions are not good design
//TODO make it leak
reinforcedLiquidJunction = new LiquidJunction("reinforced-liquid-junction"){{
requirements(Category.liquid, with(Items.graphite, 3, Items.beryllium, 3));
requirements(Category.liquid, with(Items.tungsten, 4, Items.beryllium, 8));
buildCostMultiplier = 3f;
health = 260;
((Conduit)reinforcedConduit).junctionReplacement = this;
}};
reinforcedBridgeConduit = new DirectionLiquidBridge("reinforced-bridge-conduit"){{
requirements(Category.liquid, with(Items.graphite, 4, Items.beryllium, 8));
requirements(Category.liquid, with(Items.tungsten, 6, Items.beryllium, 10));
range = 4;
hasPower = false;
@ -1737,14 +1737,15 @@ public class Blocks{
}};
reinforcedLiquidRouter = new LiquidRouter("reinforced-liquid-router"){{
requirements(Category.liquid, with(Items.graphite, 4, Items.beryllium, 2));
requirements(Category.liquid, with(Items.tungsten, 4, Items.beryllium, 4));
liquidCapacity = 30f;
newDrawing = true;
liquidPadding = 3f/4f;
}};
//TODO is there a need for a container if unloaders can unload 3x3s?
reinforcedLiquidContainer = new LiquidRouter("reinforced-liquid-container"){{
requirements(Category.liquid, with(Items.graphite, 10, Items.beryllium, 15));
requirements(Category.liquid, with(Items.tungsten, 10, Items.beryllium, 16));
liquidCapacity = 1000f;
size = 2;
newDrawing = true;
@ -1752,7 +1753,7 @@ public class Blocks{
}};
reinforcedLiquidTank = new LiquidRouter("reinforced-liquid-tank"){{
requirements(Category.liquid, with(Items.tungsten, 30, Items.beryllium, 40));
requirements(Category.liquid, with(Items.tungsten, 40, Items.beryllium, 50));
size = 3;
liquidCapacity = 2700f;
newDrawing = true;
@ -1794,14 +1795,14 @@ public class Blocks{
}};
batteryLarge = new Battery("battery-large"){{
requirements(Category.power, with(Items.titanium, 20, Items.lead, 40, Items.silicon, 20));
requirements(Category.power, with(Items.titanium, 20, Items.lead, 50, Items.silicon, 30));
size = 3;
consumes.powerBuffered(50000f);
baseExplosiveness = 5f;
}};
beamNode = new BeamNode("beam-node"){{
requirements(Category.power, with(Items.graphite, 1, Items.beryllium, 3));
requirements(Category.power, with(Items.graphite, 5, Items.beryllium, 3));
consumesPower = outputsPower = true;
consumes.powerBuffered(1000f);
range = 10;
@ -1809,7 +1810,7 @@ public class Blocks{
//TODO requirements
beamTower = new BeamNode("beam-tower"){{
requirements(Category.power, with(Items.graphite, 10, Items.beryllium, 30));
requirements(Category.power, with(Items.beryllium, 30, Items.oxide, 20, Items.silicon, 10));
size = 3;
consumesPower = outputsPower = true;
consumes.powerBuffered(40000f);
@ -1909,7 +1910,7 @@ public class Blocks{
//TODO work on sprite, green bits?
turbineCondenser = new ThermalGenerator("turbine-condenser"){{
requirements(Category.power, with(Items.graphite, 35, Items.beryllium, 25));
requirements(Category.power, with(Items.graphite, 40, Items.beryllium, 40));
attribute = Attribute.vent;
displayEfficiencyScale = 1f / 9f;
minEfficiency = 9f - 0.0001f;
@ -2052,7 +2053,8 @@ public class Blocks{
}};
cliffCrusher = new WallCrafter("cliff-crusher"){{
requirements(Category.production, with(Items.copper, 10));
requirements(Category.production, with(Items.graphite, 20, Items.beryllium, 20));
consumes.power(0.9f);
drillTime = 110f;
@ -2062,7 +2064,7 @@ public class Blocks{
}};
plasmaBore = new BeamDrill("plasma-bore"){{
requirements(Category.production, with(Items.graphite, 20, Items.beryllium, 10));
requirements(Category.production, with(Items.graphite, 20, Items.beryllium, 30));
consumes.power(0.2f);
drillTime = 200f;
tier = 4;
@ -2658,8 +2660,9 @@ public class Blocks{
consumes.add(new ConsumeCoolant(0.5f)).update(false);
}};
//TODO tungsten?
breach = new ItemTurret("breach"){{
requirements(Category.turret, with(Items.beryllium, 35), true);
requirements(Category.turret, with(Items.beryllium, 35, Items.silicon, 20), true);
ammo(
Items.beryllium, new BasicBulletType(7f, 30){{
width = 8f;

View File

@ -16,7 +16,9 @@ public class ErekirTechTree{
});
node(overflowDuct, () -> {
node(ductUnloader, () -> {
});
});
node(reinforcedContainer, () -> {
@ -25,7 +27,154 @@ public class ErekirTechTree{
});
});
});
node(constructor, () -> {
node(payloadLoader, () -> {
node(payloadUnloader, () -> {
node(payloadPropulsionTower, () -> {
});
});
});
node(deconstructor, () -> {
node(largeConstructor, () -> {
});
});
});
});
node(turbineCondenser, () -> {
node(beamNode, () -> {
node(beamTower, () -> {
});
//TODO more tiers of build tower or "support" structures like overdrive projectors
//TODO method of repairing blocks of damage
node(buildTower, () -> {
});
});
});
//TODO where in the tech tree is the arc furnace placed? is it essential?
node(siliconArcFurnace, () -> {
node(electrolyzer, () -> {
node(oxidationChamber, () -> {
node(atmosphericConcentrator, () -> {
node(cyanogenSynthesizer, () -> {
});
});
node(carbideCrucible, () -> {
node(surgeCrucible, () -> {
node(phaseSynthesizer, () -> {
});
});
});
});
node(slagIncinerator, () -> {
//when is this actually needed?
node(slagHeater, () -> {
//TODO
node(slagCentrifuge, () -> {
});
node(heatReactor, () -> {
});
});
});
});
});
//TODO move into turbine condenser?
node(plasmaBore, () -> {
node(cliffCrusher, () -> {
//TODO req
node(largePlasmaBore, () -> {
});
//TODO req
node(impactDrill, () -> {
});
});
});
node(reinforcedConduit, () -> {
node(reinforcedPump, () -> {
//TODO T2 pump
});
node(reinforcedLiquidJunction, () -> {
node(reinforcedBridgeConduit, () -> {
});
node(reinforcedLiquidRouter, () -> {
node(reinforcedLiquidContainer, () -> {
node(reinforcedLiquidTank, () -> {
});
});
});
});
});
node(breach, () -> {
//fracture turret is broken and thus not listed
//TODO big tech jump here; incomplete turret
node(sublimate, () -> {
});
});
//TODO requirements for these
node(coreCitadel, () -> {
node(coreAcropolis, () -> {
});
});
nodeProduce(Items.beryllium, () -> {
nodeProduce(Items.oxide, () -> {
nodeProduce(Items.fissileMatter, () -> {
});
});
nodeProduce(Liquids.ozone, () -> {
nodeProduce(Liquids.hydrogen, () -> {
//TODO how will nitrogen be gated behind the electrolyzer?
nodeProduce(Liquids.nitrogen, () -> {
nodeProduce(Liquids.cyanogen, () -> {
});
});
});
});
nodeProduce(Items.tungsten, () -> {
nodeProduce(Items.carbide, () -> {
});
//TODO does it require carbide?
nodeProduce(Liquids.gallium, () -> {
});
});
});
});
}
}

View File

@ -2603,21 +2603,15 @@ public class UnitTypes{
//endregion
//region internal
block = new UnitType("block"){
{
speed = 0f;
hitSize = 0f;
health = 1;
rotateSpeed = 360f;
itemCapacity = 0;
commandLimit = 0;
}
@Override
public boolean isHidden(){
return true;
}
};
block = new UnitType("block"){{
speed = 0f;
hitSize = 0f;
health = 1;
rotateSpeed = 360f;
itemCapacity = 0;
commandLimit = 0;
hidden = true;
}};
//endregion
//region neoplasm

View File

@ -1,6 +1,6 @@
package mindustry.ctype;
/** @deprecated single-method interfaces don't need to exist for content loading; just call YouList.load() directly in the order necessary. */
/** @deprecated single-method interfaces don't need to exist for content loading; just call YourList.load() as a static method directly in the order necessary. */
@Deprecated
public interface ContentList{
/** This method should create all the content. */

View File

@ -3,6 +3,7 @@ package mindustry.maps.planet;
import arc.graphics.*;
import arc.math.*;
import arc.math.geom.*;
import arc.struct.*;
import arc.util.*;
import arc.util.noise.*;
import mindustry.ai.*;
@ -231,5 +232,8 @@ public class ErekirPlanetGenerator extends PlanetGenerator{
state.rules.attributes.set(Attribute.heat, 0.8f);
state.rules.environment = Env.scorching | Env.terrestrial | Env.groundWater;
Schematics.placeLaunchLoadout(spawnX, spawnY);
//TODO this is only for testing
state.rules.defaultTeam.items().add(Seq.with(ItemStack.with(Items.beryllium, 200, Items.graphite, 200)));
}
}

View File

@ -137,6 +137,7 @@ public class UnitType extends UnlockableContent{
/** If true, all weapons will attack the same target. */
public boolean singleTarget = false;
public boolean forceMultiTarget = false;
public boolean hidden = false;
//for crawlers
public int segments = 0;
@ -283,6 +284,11 @@ public class UnitType extends UnlockableContent{
}
}
@Override
public boolean isHidden(){
return hidden;
}
@Override
public void setStats(){
Unit inst = constructor.get();

View File

@ -34,7 +34,8 @@ import static mindustry.Vars.*;
public class ResearchDialog extends BaseDialog{
public final float nodeSize = Scl.scl(60f);
public ObjectSet<TechTreeNode> nodes = new ObjectSet<>();
public TechTreeNode root = new TechTreeNode(TechTree.root, null);
//TODO switch root system
public TechTreeNode root = new TechTreeNode(TechTree.rootErekir, null);
public Rect bounds = new Rect();
public ItemsDisplay itemDisplay;
public View view;

View File

@ -46,6 +46,7 @@ public class BuildTurret extends BaseTurret{
//this is super hacky, but since blocks are initialized before units it does not run into init/concurrent modification issues
unitType = new UnitType("turret-unit-" + name){{
hidden = true;
speed = 0f;
hitSize = 0f;
health = 1;