From 68e0b0e27e8c9b16f75a7abd24d1b57bb1d9cd37 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 28 Nov 2021 20:51:26 -0500 Subject: [PATCH] Initial Erekir tech tree --- .../drills/cliff-crusher-rotator-bottom.png | Bin 231 -> 230 bytes .../blocks/drills/cliff-crusher-rotator.png | Bin 239 -> 338 bytes .../blocks/drills/cliff-crusher-top.png | Bin 354 -> 351 bytes .../sprites/blocks/drills/cliff-crusher.png | Bin 1232 -> 1234 bytes core/src/mindustry/content/Blocks.java | 71 +++++---- .../src/mindustry/content/ErekirTechTree.java | 149 ++++++++++++++++++ core/src/mindustry/content/UnitTypes.java | 24 ++- core/src/mindustry/ctype/ContentList.java | 2 +- .../maps/planet/ErekirPlanetGenerator.java | 4 + core/src/mindustry/type/UnitType.java | 6 + .../mindustry/ui/dialogs/ResearchDialog.java | 3 +- .../world/blocks/defense/BuildTurret.java | 1 + 12 files changed, 209 insertions(+), 51 deletions(-) diff --git a/core/assets-raw/sprites/blocks/drills/cliff-crusher-rotator-bottom.png b/core/assets-raw/sprites/blocks/drills/cliff-crusher-rotator-bottom.png index 39be7e12d85e76b5eabd6921e076e203581fab07..6799ee0e87897e62dd38bf9baa24730358e6ea6a 100644 GIT binary patch delta 133 zcmaFP_>6IaVd?@;7srr_Id88YzW#z?P9a|nO-d=vqXN#Ve>X$c{ZL`#(zPo%q nu)276zFO4xE4wF7w-#k?shIkB)%VX|LFRb6`njxgN@xNAJN-Z9 delta 159 zcmaFH_?&TqVf{i+7srr_Id88U@--Xqum;>JE?ZZna^#Hd%PFj!j=nLfr>b|`Z#vL9 zQ;mUvfuW)6S?b+qsdxW{eqZgL_G4e;`QN24D=+Tq*z#cU_VQ~!TlBP4zr49@o23?2 z?*8?_>f+t`YEk9aH>XAP_c**gko3ZN!;6PfKG%OKu}oO?)w$ru#Pv#|toM)2P5yOi Qay7^XPgg&ebxsLQ0B<%=3IG5A diff --git a/core/assets-raw/sprites/blocks/drills/cliff-crusher-rotator.png b/core/assets-raw/sprites/blocks/drills/cliff-crusher-rotator.png index 7cd2243279bbd733fa9611740f89cc67d96bbc4e..a63c5c351a237250a2331f777749b80b811cdf55 100644 GIT binary patch delta 311 zcmaFQc!_C(NGZx^prw85kIOJY5_^D(1YsVaV5HAad;EtH=b!he}49tfc!> z=ETZ=RZ`O_5}z|qk;94iuhzr=(uyA{e_(zU3clc8alPs2wt~oBK}b z%yE6!8S}QgblwY0&HQ6?=yj%^Q)WX<%M071UdNv+xxCj@^JxfAuyr`wZcybvb**60 zf6j~6c9Xh4yt9A!{*?y}vd$@?2>=`jUcvwX diff --git a/core/assets-raw/sprites/blocks/drills/cliff-crusher-top.png b/core/assets-raw/sprites/blocks/drills/cliff-crusher-top.png index 051e61abfb3d95f2c23289b78db4de816a94faad..a5554ae6e1def7d223b5e6a973d0590f04774ce7 100644 GIT binary patch delta 311 zcmaFFbf0O0VZEfMi(^Q|oVPcv`3@Nfv^?ZowD_6A9re;FT!k$%jDfCK?zA@t1UvUL z+}>!mdE0aCi45=8+sH7uK)|Xp8{hTkubcI>8q`S3WvCoj|FDsb>5sJB3LA%viUpq- z3`H9DGHhG>Rs78L=npn$O!;cJf7!dt{eaZr=SJKChd$Id1U3YY*nbCw?|2<)$rn&=mApBR@Za}BHOnu% z24BV-+zG3#4m`CnU|nw?%Fb{|a1}qp5m`>(j-R_@AYP05z_vWv&vwI2Jr4#31_n=8 KKbLh*2~7a{RezcQ delta 314 zcmcc5^oVJKVZDr}i(^Q|oVPc3^Byt~X?-YsgiEC7Alu5IbcU=W9vxQ90l^y?lLHJ` zzHn@ief=!v_H*rt4EN(JEf_i=AmnYyytw)6*Gh0F{xGw-;L#9&n3@#fh$e~!0$6O2N<)`VQSy`Y`rOD%&nlP$x6-Umty2f81qF?7#nSaW+(H^UiQ zMq7qzXBXZBa&ii69}H{~KIjSN4QpQ+GaNr`SMhhH6@x%uKrMs9JC6*fGxwh=fx)FF^ZILkKR>4CPhenR OVDNPHb6Mw<&;$U8$%Bdj diff --git a/core/assets-raw/sprites/blocks/drills/cliff-crusher.png b/core/assets-raw/sprites/blocks/drills/cliff-crusher.png index a98246695cecb19d1f0fdaec9d8456469c9aacf5..ba6e5f2a2e348067210c34bcb4b7d036dd2d37e5 100644 GIT binary patch delta 1172 zcmcb>d5Lp^VSSIMi(^Q|oV&BnW(7Nn9QSwrxcF#U;OdOkK|TUZj$E9(GVYcxY?3bj zCVRv@Kz`Z2rtWuZcC##DVVX20AX{80=1S7rb$W+5C+|#8J2%tv`=n?4xy;L-o%=ui zr;U2~v$wnX#jj>bT4b4ikN7@wmATo`)UKMemDh8fmtPKEFCm&-udsB@mR?nc2G5p& zkbLcj?Ve2mPXcCFe*E;cwQ^z1O2-U8hXD8X-;dbuRe!kgyVh&&otcGTs!s$ck94^Od4NrxXXAIF#y?SFKdnQU0 zHWoi?xq0Q-f^E{>487?e-qye06gG9qwdd>%3>z-naNfK9@=KGz9A}1x|F84S#oXs_ zY^*%7=6208|Ah|&etrI}{?oOmGDJ>bg;lWPmRZ$@3YR*d^58)=4_j`Y3pV^1_qfg{{GDZ zCSfd|vWgs2w$JQc?tknX-KfOUgfV1cz-`FJt%H%(ciuI)z>{X>_Fg0pvHy+5W7GPjF z@a|*fhk5^Ej{c10VTqUIV|n-FBoo7f_6NrOlN=u0dEKlKX?cTzA%o-k>+?6CS{_qb zuwts)t}k8w&AX33->|hP_sh@F+KM+%<{jJ`)*iQ=m%;h)j_977`p!ltaMNaPOjgm^~hok@4=Ze zUo*3x-qO%$($W%Rn9#bx&c4Iz@YY$?pE@RF%Gi6KDgNIe8niR0Ic~dcT1{=80$*Q8 zS<|=md<-Aff1MdSuh?nI9Ho^x6St^uU<`N`xbO&P!x@R^aci&Ga5tQ{ImNE1X7)gP z@yuELOcUmCXmV&a3a(nCVtPKa-uku08PA#pJ{(ekikta7v*d);FCI_ay+EWX&0|fJ zZhF;p{-(L6pBxqb%RkUQF!MveoHhw69yXS>ALUnhXUWx@ zdiCzyRm;WV`+1*L^4Z01Cj+M^DLhG>x61mejaG%!o6_5Bj4SHbF}b(@F8Io|I`-l( zBa7g(;Tz5|&6y|g`%?3_Z1WXy+s{@B_S8y!arCHt>@3}M^O^ulpiM*5g0H)}#aLGL z+HpL(GUF%1+w$5V#UE8Gxt%`DRh*ub)Olxan&rIG+wWc7RNX)4Ecg;9vfa1LUx4|< p?HaF{5*$hlt~32LwOc>PPn2rB@O?Qa;}IOR<${-A&@H*wiu-OUfGI(eD1Bk=l=35C+D8_x%!5C z;k<-8aUSxMw;%xT4sa@Xo~j8N>C04W-*IH{Q3e-|%j&R}9BDv)u-qZPPYwo~yWI??1mn zfu>_!3M-Xa8b6tRO!@fngx!LBJGdFXM0G#&y_+A`Zv9-K8WGng8+v>Oj(RtqpN zIMip^Rh)lvXwv815*+)CWH|1eoXpB_fd62+oND8No!8kNHx+GQWVj$OOMCr|r!ZwDdJU;sG%AZd8 z9i7LIa-Chw_xi2I=lavDvkxl@FgFH?3gmp=cu3>ZQJDfsg^bzk8`KUKwgt3RG9-z1 za25nzYFUsv?~|KebCkd_Pd)#0wFg3*9(;aumm`*yLy>>c+y|i|uPth3iq^{P<9ZhO zsNuwpnb$4sci40`FN!(3WYuZ0r@C4?azT>Mw)#yxx8aAyZ1<^*jXu5gM^|;_t>-;B zQ|9Z+%3alhB95V!&vH3>9nH0Pw{P93*UvHYSo{3>oo9;W4{&Loj+*d%ui)ce$8Z@5 z!M7}L>tz`h{Qt?k+va(ThNWxJO{Gl#1m*>27CUtcGt4wRw>N5Kr5MBf$|?L#J~;=% z-Hc7;SrjYRWZs)%D}Q8` z`O~}XN4~UdI&-@;dj@-gjr@e?wqgD=Vj_Nt7yUYy6|ttSF>hZ}sn~-rEjOmiZHeFQ z__VVBtCGZTlNZesejRH!W7)h`kz-MO1p}+&>r!!Dju7cufg>voKeKPS|JAeg!Rw`Z z90$wWV!Aq2i^^xEUd!DtE;&_3cXQ*V>cBf@H*Fnx7UX=^OifbgUbP0l+XkKCh{e= diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 4ab3d42d6d..c40c2da806 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -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; diff --git a/core/src/mindustry/content/ErekirTechTree.java b/core/src/mindustry/content/ErekirTechTree.java index 31cee77c04..ae1d707669 100644 --- a/core/src/mindustry/content/ErekirTechTree.java +++ b/core/src/mindustry/content/ErekirTechTree.java @@ -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, () -> { + + }); + }); + }); + }); } } diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index b0b89ef00c..32329a1460 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -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 diff --git a/core/src/mindustry/ctype/ContentList.java b/core/src/mindustry/ctype/ContentList.java index 43d84ebadd..27d7104216 100644 --- a/core/src/mindustry/ctype/ContentList.java +++ b/core/src/mindustry/ctype/ContentList.java @@ -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. */ diff --git a/core/src/mindustry/maps/planet/ErekirPlanetGenerator.java b/core/src/mindustry/maps/planet/ErekirPlanetGenerator.java index fa1c163d1b..d7d0ffaebe 100644 --- a/core/src/mindustry/maps/planet/ErekirPlanetGenerator.java +++ b/core/src/mindustry/maps/planet/ErekirPlanetGenerator.java @@ -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))); } } diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index 16904b774a..8922b99499 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -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(); diff --git a/core/src/mindustry/ui/dialogs/ResearchDialog.java b/core/src/mindustry/ui/dialogs/ResearchDialog.java index bd343988fa..cbb210d018 100644 --- a/core/src/mindustry/ui/dialogs/ResearchDialog.java +++ b/core/src/mindustry/ui/dialogs/ResearchDialog.java @@ -34,7 +34,8 @@ import static mindustry.Vars.*; public class ResearchDialog extends BaseDialog{ public final float nodeSize = Scl.scl(60f); public ObjectSet 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; diff --git a/core/src/mindustry/world/blocks/defense/BuildTurret.java b/core/src/mindustry/world/blocks/defense/BuildTurret.java index 07fbe5249a..53a208df74 100644 --- a/core/src/mindustry/world/blocks/defense/BuildTurret.java +++ b/core/src/mindustry/world/blocks/defense/BuildTurret.java @@ -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;