Unit build req changes

This commit is contained in:
Anuken
2022-02-14 14:45:45 -05:00
parent 33b15c798d
commit e1bdb843de
8 changed files with 43 additions and 12 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -539,3 +539,4 @@
63164=world-cell|block-world-cell-ui 63164=world-cell|block-world-cell-ui
63163=carbide-wall|block-carbide-wall-ui 63163=carbide-wall|block-carbide-wall-ui
63162=carbide-wall-large|block-carbide-wall-large-ui 63162=carbide-wall-large|block-carbide-wall-large-ui
63161=prime-control-core|block-prime-control-core-ui

Binary file not shown.

View File

@@ -137,12 +137,12 @@ public class Blocks{
repairPoint, repairTurret, repairPoint, repairTurret,
//unit - erekir //unit - erekir
tankAssembler, tankAssembler, shipAssembler, mechAssembler,
shipAssembler,
mechAssembler,
//TODO maybe making it 5x5 would be more appropriate, seems kinda cheap. //TODO maybe making it 5x5 would be more appropriate, seems kinda cheap.
basicAssemblerModule, basicAssemblerModule,
primeControlCore,
//TODO remove
droneCenter, droneCenter,
//payloads //payloads
@@ -2590,7 +2590,7 @@ public class Blocks{
}}; }};
coreCitadel = new CoreBlock("core-citadel"){{ coreCitadel = new CoreBlock("core-citadel"){{
requirements(Category.effect, with(Items.silicon, 7000, Items.beryllium, 7000, Items.tungsten, 4000, Items.oxide, 2000)); requirements(Category.effect, with(Items.silicon, 7000, Items.beryllium, 7000, Items.tungsten, 4000, Items.oxide, 2500));
unitType = UnitTypes.incite; unitType = UnitTypes.incite;
health = 18000; health = 18000;
@@ -2600,7 +2600,8 @@ public class Blocks{
armor = 10f; armor = 10f;
unitCapModifier = 4; unitCapModifier = 4;
researchCostMultiplier = 0.3f; researchCostMultipliers.put(Items.silicon, 0.4f);
researchCostMultiplier = 0.14f;
}}; }};
coreAcropolis = new CoreBlock("core-acropolis"){{ coreAcropolis = new CoreBlock("core-acropolis"){{
@@ -2615,7 +2616,8 @@ public class Blocks{
armor = 15f; armor = 15f;
unitCapModifier = 6; unitCapModifier = 6;
researchCostMultiplier = 0.3f; researchCostMultipliers.put(Items.silicon, 0.3f);
researchCostMultiplier = 0.1f;
}}; }};
container = new StorageBlock("container"){{ container = new StorageBlock("container"){{
@@ -3572,11 +3574,18 @@ public class Blocks{
//endregion //endregion
//region units - erekir //region units - erekir
primeControlCore = new ControlCore("prime-control-core"){{
requirements(Category.units, with(Items.silicon, 120, Items.oxide, 30));
size = 2;
placeablePlayer = false;
researchCostMultiplier = 0f;
}};
tankAssembler = new UnitAssembler("tank-assembler"){{ tankAssembler = new UnitAssembler("tank-assembler"){{
requirements(Category.units, with(Items.graphite, 600, Items.beryllium, 600, Items.oxide, 250, Items.tungsten, 400, Items.silicon, 500)); requirements(Category.units, with(Items.graphite, 600, Items.beryllium, 600, Items.oxide, 250, Items.tungsten, 400, Items.silicon, 500));
size = 5; size = 5;
//TODO remove ducts and crushers, replace with 2-3 high cost special blocks with silicon requirements //TODO remove ducts and crushers, replace with 2-3 high cost special blocks with silicon requirements
plans.add(new AssemblerUnitPlan(UnitTypes.vanquish, 60f * 50f, BlockStack.list(Blocks.tungstenWallLarge, 12, Blocks.cliffCrusher, 12))); plans.add(new AssemblerUnitPlan(UnitTypes.vanquish, 60f * 50f, BlockStack.list(Blocks.tungstenWallLarge, 12, Blocks.primeControlCore, 2)));
consumes.power(3f); consumes.power(3f);
areaSize = 13; areaSize = 13;
researchCostMultiplier = 0.4f; researchCostMultiplier = 0.4f;
@@ -3588,7 +3597,7 @@ public class Blocks{
shipAssembler = new UnitAssembler("ship-assembler"){{ shipAssembler = new UnitAssembler("ship-assembler"){{
requirements(Category.units, with(Items.beryllium, 700, Items.oxide, 300, Items.tungsten, 500, Items.silicon, 800)); requirements(Category.units, with(Items.beryllium, 700, Items.oxide, 300, Items.tungsten, 500, Items.silicon, 800));
size = 5; size = 5;
plans.add(new AssemblerUnitPlan(UnitTypes.quell, 60f * 60f, BlockStack.list(Blocks.berylliumWallLarge, 12, Blocks.plasmaBore, 8))); plans.add(new AssemblerUnitPlan(UnitTypes.quell, 60f * 60f, BlockStack.list(Blocks.berylliumWallLarge, 12, Blocks.primeControlCore, 2)));
consumes.power(3f); consumes.power(3f);
areaSize = 13; areaSize = 13;
@@ -3599,7 +3608,8 @@ public class Blocks{
mechAssembler = new UnitAssembler("mech-assembler"){{ mechAssembler = new UnitAssembler("mech-assembler"){{
requirements(Category.units, with(Items.graphite, 500, Items.carbide, 600, Items.oxide, 200, Items.tungsten, 500, Items.silicon, 900)); requirements(Category.units, with(Items.graphite, 500, Items.carbide, 600, Items.oxide, 200, Items.tungsten, 500, Items.silicon, 900));
size = 5; size = 5;
plans.add(new AssemblerUnitPlan(UnitTypes.bulwark, 60f * 60f, BlockStack.list(Blocks.tungstenWallLarge, 5))); //TODO different reqs
plans.add(new AssemblerUnitPlan(UnitTypes.bulwark, 60f * 60f, BlockStack.list(Blocks.tungstenWallLarge, 12, Blocks.primeControlCore, 2)));
consumes.power(3f); consumes.power(3f);
areaSize = 13; areaSize = 13;
@@ -3625,6 +3635,7 @@ public class Blocks{
droneType = UnitTypes.effectDrone; droneType = UnitTypes.effectDrone;
}}; }};
//endregion //endregion
//region payloads //region payloads
@@ -3660,7 +3671,7 @@ public class Blocks{
reloadTime = 130f; reloadTime = 130f;
chargeTime = 90f; chargeTime = 90f;
//TODO 500 or 400? does it need to be better than the standard mass driver? //TODO 500 or 400? does it need to be better than the standard mass driver?
range = 400f; range = 450f;
maxPayloadSize = 2.5f; maxPayloadSize = 2.5f;
consumes.power(2f); consumes.power(2f);
}}; }};
@@ -3699,7 +3710,7 @@ public class Blocks{
consumes.power(2f); consumes.power(2f);
size = 3; size = 3;
//TODO expand this list //TODO expand this list
filter = Seq.with(Blocks.tungstenWallLarge, Blocks.berylliumWallLarge, Blocks.reinforcedLiquidTank); filter = Seq.with(Blocks.primeControlCore, Blocks.tungstenWallLarge, Blocks.berylliumWallLarge, Blocks.reinforcedLiquidContainer);
}}; }};
//yes this block is pretty much useless //yes this block is pretty much useless

View File

@@ -220,6 +220,11 @@ public class ErekirTechTree{
}); });
node(tankAssembler, Seq.with(new OnSector(four), new Research(constructor), new Research(atmosphericConcentrator)), () -> { node(tankAssembler, Seq.with(new OnSector(four), new Research(constructor), new Research(atmosphericConcentrator)), () -> {
//auto-unlock?
node(primeControlCore, () -> {
});
node(UnitTypes.vanquish, () -> { node(UnitTypes.vanquish, () -> {
node(UnitTypes.conquer, Seq.with(tmpNever), () -> { node(UnitTypes.conquer, Seq.with(tmpNever), () -> {

View File

@@ -5,6 +5,7 @@ import mindustry.entities.*;
/** /**
* Renders multiple particle effects in sequence. * Renders multiple particle effects in sequence.
* Will not work correctly for effects that modify life dynamically. * Will not work correctly for effects that modify life dynamically.
* Z layer of child effects is ignored.
* */ * */
public class SeqEffect extends Effect{ public class SeqEffect extends Effect{
public Effect[] effects = {}; public Effect[] effects = {};

View File

@@ -282,6 +282,8 @@ public class Block extends UnlockableContent implements Senseable{
public Effect destroyEffect = Fx.dynamicExplosion; public Effect destroyEffect = Fx.dynamicExplosion;
/** Multiplier for cost of research in tech tree. */ /** Multiplier for cost of research in tech tree. */
public float researchCostMultiplier = 1; public float researchCostMultiplier = 1;
/** Cost multipliers per-item. */
public ObjectFloatMap<Item> researchCostMultipliers = new ObjectFloatMap<>();
/** Whether this block has instant transfer.*/ /** Whether this block has instant transfer.*/
public boolean instantTransfer = false; public boolean instantTransfer = false;
/** Whether you can rotate this block after it is placed. */ /** Whether you can rotate this block after it is placed. */
@@ -887,9 +889,10 @@ public class Block extends UnlockableContent implements Senseable{
@Override @Override
public ItemStack[] researchRequirements(){ public ItemStack[] researchRequirements(){
if(researchCostMultiplier <= 0f) return ItemStack.empty;
ItemStack[] out = new ItemStack[requirements.length]; ItemStack[] out = new ItemStack[requirements.length];
for(int i = 0; i < out.length; i++){ for(int i = 0; i < out.length; i++){
int quantity = 60 + Mathf.round(Mathf.pow(requirements[i].amount, 1.11f) * 20 * researchCostMultiplier, 10); int quantity = 60 + Mathf.round(Mathf.pow(requirements[i].amount, 1.11f) * 20 * researchCostMultiplier * researchCostMultipliers.get(requirements[i].item, 1f), 10);
out[i] = new ItemStack(requirements[i].item, UI.roundAmount(quantity)); out[i] = new ItemStack(requirements[i].item, UI.roundAmount(quantity));
} }

View File

@@ -0,0 +1,10 @@
package mindustry.world.blocks.units;
import mindustry.world.*;
public class ControlCore extends Block{
public ControlCore(String name){
super(name);
}
}