Added final campaign map (WIP, untested)
@@ -29,7 +29,7 @@ script:
|
|||||||
- cd ../Mindustry
|
- cd ../Mindustry
|
||||||
deploy:
|
deploy:
|
||||||
- provider: releases
|
- provider: releases
|
||||||
skip_cleanup: true
|
cleanup: false
|
||||||
draft: false
|
draft: false
|
||||||
api_key:
|
api_key:
|
||||||
secure: Cv5wFtWt62/A24EvSEQvMow7gKPbZ3oATEFPuSghhB2TQz1dA40Zee3Qvk4LFlpLrhYo4K0ZSczCZRGpR+hCd8+Dpww52bheYEvWuh3ZQfvu/fXtEx2j5PwP1qMpmIgSxETV/gkD7l9FImdh0VzktYiAvQfmi0bEocG9/D4QwjFpNat7iwBdcMiw1MvAygpdIWRsjiw0RKlB2mWarmoHhQ7Gu7qlU3j50uaEvcrtmU0pBUPggNQwQRv32i9NPvNFxrqqlUjDLIS8JFea99zCkp8BwYqbEvBIMzd+Qip1/stLJJA3+cDUClbsDtg8rAVetzpOrdLEEBmqShFe5MDl2yEHcsgpN9CFsyTaUfvB3P3rVjizvycMm42IsUkXQiarm5xTQ/TIA8Rd8AHiSKuweNCg1Fd5SFaRtKy8JVLXuxyfUccmyje6hhz2L4lS2Wfj3mAG7sqZUCXhWP79EKdGkiPOjKv4CwXEKmuH3BMVqPlNUZJr9Eg3sV1FG0h2l+MVOOnR635qdUbb49sYojYxVruMLX0BH1c4ZCu230m8CUoWA1Em1QNI75ya7+9Y5T6AsgWDVpBvdUo9fWNbdp+VQ0GskFQsJD5wtnxbcbHeFiERAgGBm7z6qt9u9LrQpBH+dsW52ADvYsu3L4nQEa+sdMHwTTwmGY+iUvsxu0DqxGg=
|
secure: Cv5wFtWt62/A24EvSEQvMow7gKPbZ3oATEFPuSghhB2TQz1dA40Zee3Qvk4LFlpLrhYo4K0ZSczCZRGpR+hCd8+Dpww52bheYEvWuh3ZQfvu/fXtEx2j5PwP1qMpmIgSxETV/gkD7l9FImdh0VzktYiAvQfmi0bEocG9/D4QwjFpNat7iwBdcMiw1MvAygpdIWRsjiw0RKlB2mWarmoHhQ7Gu7qlU3j50uaEvcrtmU0pBUPggNQwQRv32i9NPvNFxrqqlUjDLIS8JFea99zCkp8BwYqbEvBIMzd+Qip1/stLJJA3+cDUClbsDtg8rAVetzpOrdLEEBmqShFe5MDl2yEHcsgpN9CFsyTaUfvB3P3rVjizvycMm42IsUkXQiarm5xTQ/TIA8Rd8AHiSKuweNCg1Fd5SFaRtKy8JVLXuxyfUccmyje6hhz2L4lS2Wfj3mAG7sqZUCXhWP79EKdGkiPOjKv4CwXEKmuH3BMVqPlNUZJr9Eg3sV1FG0h2l+MVOOnR635qdUbb49sYojYxVruMLX0BH1c4ZCu230m8CUoWA1Em1QNI75ya7+9Y5T6AsgWDVpBvdUo9fWNbdp+VQ0GskFQsJD5wtnxbcbHeFiERAgGBm7z6qt9u9LrQpBH+dsW52ADvYsu3L4nQEa+sdMHwTTwmGY+iUvsxu0DqxGg=
|
||||||
|
|||||||
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
@@ -24,6 +24,7 @@ highscore = [accent]New highscore!
|
|||||||
copied = Copied.
|
copied = Copied.
|
||||||
indev.popup = [accent]v6[] is currently in [accent]beta[].\n[lightgray]This means:[]\n[scarlet]- The campaign is unfinished[]\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[].
|
indev.popup = [accent]v6[] is currently in [accent]beta[].\n[lightgray]This means:[]\n[scarlet]- The campaign is unfinished[]\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[].
|
||||||
indev.notready = This part of the game isn't ready yet
|
indev.notready = This part of the game isn't ready yet
|
||||||
|
indev.campaign = [accent]You've reached the end of the campaign![]\n\nThis is as far as the content goes. Interplanetary travel will be added in future updates.
|
||||||
|
|
||||||
load.sound = Sounds
|
load.sound = Sounds
|
||||||
load.map = Maps
|
load.map = Maps
|
||||||
@@ -579,6 +580,7 @@ sector.fungalPass.name = Fungal Pass
|
|||||||
sector.biomassFacility.name = Biomass Synthesis Facility
|
sector.biomassFacility.name = Biomass Synthesis Facility
|
||||||
sector.windsweptIslands.name = Windswept Islands
|
sector.windsweptIslands.name = Windswept Islands
|
||||||
sector.extractionOutpost.name = Extraction Outpost
|
sector.extractionOutpost.name = Extraction Outpost
|
||||||
|
sector.planetaryTerminal.name = Planetary Launch Terminal
|
||||||
|
|
||||||
sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on.
|
sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on.
|
||||||
sector.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders.
|
sector.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders.
|
||||||
@@ -1212,6 +1214,7 @@ block.overdrive-dome.name = Overdrive Dome
|
|||||||
block.block-forge.name = Block Forge
|
block.block-forge.name = Block Forge
|
||||||
block.block-loader.name = Block Loader
|
block.block-loader.name = Block Loader
|
||||||
block.block-unloader.name = Block Unloader
|
block.block-unloader.name = Block Unloader
|
||||||
|
block.interplanetary-accelerator.name = Interplanetary Accelerator
|
||||||
|
|
||||||
block.switch.name = Switch
|
block.switch.name = Switch
|
||||||
block.micro-processor.name = Micro Processor
|
block.micro-processor.name = Micro Processor
|
||||||
@@ -1422,6 +1425,7 @@ block.memory-cell.description = Stores information for a logic processor.
|
|||||||
block.memory-bank.description = Stores information for a logic processor. High capacity.
|
block.memory-bank.description = Stores information for a logic processor. High capacity.
|
||||||
block.logic-display.description = Displays arbitrary graphics from a logic processor.
|
block.logic-display.description = Displays arbitrary graphics from a logic processor.
|
||||||
block.large-logic-display.description = Displays arbitrary graphics from a logic processor.
|
block.large-logic-display.description = Displays arbitrary graphics from a logic processor.
|
||||||
|
block.interplanetary-accelerator.description = A massive electromagnetic railgun tower. Accelerates cores to escape velocity for interplanetary deployment.
|
||||||
|
|
||||||
unit.dagger.description = Fires standard bullets at all nearby enemies.
|
unit.dagger.description = Fires standard bullets at all nearby enemies.
|
||||||
unit.mace.description = Fires streams of flame at all nearby enemies.
|
unit.mace.description = Fires streams of flame at all nearby enemies.
|
||||||
|
|||||||
@@ -316,3 +316,4 @@
|
|||||||
63420=space|block-space-medium
|
63420=space|block-space-medium
|
||||||
63419=legacy-unit-factory-air|block-legacy-unit-factory-air-medium
|
63419=legacy-unit-factory-air|block-legacy-unit-factory-air-medium
|
||||||
63418=legacy-unit-factory-ground|block-legacy-unit-factory-ground-medium
|
63418=legacy-unit-factory-ground|block-legacy-unit-factory-ground-medium
|
||||||
|
63417=interplanetary-accelerator|block-interplanetary-accelerator-medium
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 825 B After Width: | Height: | Size: 828 B |
|
Before Width: | Height: | Size: 668 KiB After Width: | Height: | Size: 660 KiB |
|
Before Width: | Height: | Size: 960 KiB After Width: | Height: | Size: 901 KiB |
|
Before Width: | Height: | Size: 575 KiB After Width: | Height: | Size: 675 KiB |
|
Before Width: | Height: | Size: 185 KiB After Width: | Height: | Size: 186 KiB |
|
Before Width: | Height: | Size: 429 KiB After Width: | Height: | Size: 437 KiB |
|
Before Width: | Height: | Size: 1.4 MiB After Width: | Height: | Size: 1.4 MiB |
|
Before Width: | Height: | Size: 2.9 MiB After Width: | Height: | Size: 3.0 MiB |
|
Before Width: | Height: | Size: 186 KiB After Width: | Height: | Size: 187 KiB |
|
Before Width: | Height: | Size: 426 KiB After Width: | Height: | Size: 438 KiB |
|
Before Width: | Height: | Size: 1.4 MiB After Width: | Height: | Size: 1.4 MiB |
@@ -89,7 +89,7 @@ public class Blocks implements ContentList{
|
|||||||
message, switchBlock, microProcessor, logicProcessor, hyperProcessor, largeLogicDisplay, logicDisplay, memoryCell, memoryBank,
|
message, switchBlock, microProcessor, logicProcessor, hyperProcessor, largeLogicDisplay, logicDisplay, memoryCell, memoryBank,
|
||||||
|
|
||||||
//campaign
|
//campaign
|
||||||
launchPad, launchPadLarge,
|
launchPad, launchPadLarge, interplanetaryAccelerator,
|
||||||
|
|
||||||
//misc experimental
|
//misc experimental
|
||||||
blockForge, blockLoader, blockUnloader;
|
blockForge, blockLoader, blockUnloader;
|
||||||
@@ -2046,7 +2046,6 @@ public class Blocks implements ContentList{
|
|||||||
|
|
||||||
//TODO remove
|
//TODO remove
|
||||||
launchPadLarge = new LaunchPad("launch-pad-large"){{
|
launchPadLarge = new LaunchPad("launch-pad-large"){{
|
||||||
//requirements(Category.effect, BuildVisibility.campaignOnly, with(Items.titanium, 200, Items.silicon, 150, Items.lead, 250, Items.plastanium, 75));
|
|
||||||
size = 4;
|
size = 4;
|
||||||
itemCapacity = 300;
|
itemCapacity = 300;
|
||||||
launchTime = 60f * 35;
|
launchTime = 60f * 35;
|
||||||
@@ -2054,6 +2053,14 @@ public class Blocks implements ContentList{
|
|||||||
consumes.power(6f);
|
consumes.power(6f);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
interplanetaryAccelerator = new Accelerator("interplanetary-accelerator"){{
|
||||||
|
requirements(Category.effect, BuildVisibility.campaignOnly, with(Items.copper, 9000, Items.silicon, 9000, Items.thorium, 9000, Items.titanium, 9000, Items.surgeAlloy, 5000, Items.phaseFabric, 4000));
|
||||||
|
researchCostMultiplier = 0.1f;
|
||||||
|
size = 7;
|
||||||
|
hasPower = true;
|
||||||
|
consumes.power(10f);
|
||||||
|
}};
|
||||||
|
|
||||||
//endregion campaign
|
//endregion campaign
|
||||||
//region logic
|
//region logic
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ public class SectorPresets implements ContentList{
|
|||||||
groundZero,
|
groundZero,
|
||||||
craters, biomassFacility, frozenForest, ruinousShores, windsweptIslands, stainedMountains, tarFields,
|
craters, biomassFacility, frozenForest, ruinousShores, windsweptIslands, stainedMountains, tarFields,
|
||||||
fungalPass, extractionOutpost, saltFlats, overgrowth,
|
fungalPass, extractionOutpost, saltFlats, overgrowth,
|
||||||
impact0078, desolateRift, nuclearComplex;
|
impact0078, desolateRift, nuclearComplex, planetaryTerminal;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void load(){
|
public void load(){
|
||||||
@@ -68,6 +68,7 @@ public class SectorPresets implements ContentList{
|
|||||||
|
|
||||||
overgrowth = new SectorPreset("overgrowth", serpulo, 134){{
|
overgrowth = new SectorPreset("overgrowth", serpulo, 134){{
|
||||||
difficulty = 5;
|
difficulty = 5;
|
||||||
|
useAI = false;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
tarFields = new SectorPreset("tarFields", serpulo, 23){{
|
tarFields = new SectorPreset("tarFields", serpulo, 23){{
|
||||||
@@ -89,5 +90,9 @@ public class SectorPresets implements ContentList{
|
|||||||
captureWave = 50;
|
captureWave = 50;
|
||||||
difficulty = 7;
|
difficulty = 7;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
planetaryTerminal = new SectorPreset("planetaryTerminal", serpulo, 93){{
|
||||||
|
difficulty = 10;
|
||||||
|
}};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ public class TechTree implements ContentList{
|
|||||||
node(junction, () -> {
|
node(junction, () -> {
|
||||||
node(router, () -> {
|
node(router, () -> {
|
||||||
node(launchPad, Seq.with(new SectorComplete(extractionOutpost)), () -> {
|
node(launchPad, Seq.with(new SectorComplete(extractionOutpost)), () -> {
|
||||||
|
node(interplanetaryAccelerator, Seq.with(new SectorComplete(planetaryTerminal)), () -> {
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
node(distributor);
|
node(distributor);
|
||||||
@@ -47,7 +49,7 @@ public class TechTree implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
node(itemBridge, () -> {
|
node(itemBridge, () -> {
|
||||||
node(titaniumConveyor, () -> {
|
node(titaniumConveyor, Seq.with(new SectorComplete(craters)), () -> {
|
||||||
node(phaseConveyor, () -> {
|
node(phaseConveyor, () -> {
|
||||||
node(massDriver, () -> {
|
node(massDriver, () -> {
|
||||||
|
|
||||||
@@ -108,7 +110,7 @@ public class TechTree implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
node(graphitePress, () -> {
|
node(graphitePress, () -> {
|
||||||
node(pneumaticDrill, () -> {
|
node(pneumaticDrill, Seq.with(new SectorComplete(frozenForest)), () -> {
|
||||||
node(cultivator, Seq.with(new SectorComplete(biomassFacility)), () -> {
|
node(cultivator, Seq.with(new SectorComplete(biomassFacility)), () -> {
|
||||||
|
|
||||||
});
|
});
|
||||||
@@ -234,7 +236,7 @@ public class TechTree implements ContentList{
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
node(steamGenerator, () -> {
|
node(steamGenerator, Seq.with(new SectorComplete(craters)), () -> {
|
||||||
node(thermalGenerator, () -> {
|
node(thermalGenerator, () -> {
|
||||||
node(differentialGenerator, () -> {
|
node(differentialGenerator, () -> {
|
||||||
node(thoriumReactor, Seq.with(new Research(Liquids.cryofluid)), () -> {
|
node(thoriumReactor, Seq.with(new Research(Liquids.cryofluid)), () -> {
|
||||||
@@ -291,7 +293,7 @@ public class TechTree implements ContentList{
|
|||||||
node(salvo, () -> {
|
node(salvo, () -> {
|
||||||
node(swarmer, () -> {
|
node(swarmer, () -> {
|
||||||
node(cyclone, () -> {
|
node(cyclone, () -> {
|
||||||
node(spectre, () -> {
|
node(spectre, Seq.with(new SectorComplete(nuclearComplex)), () -> {
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -321,8 +323,8 @@ public class TechTree implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
node(lancer, () -> {
|
node(lancer, () -> {
|
||||||
node(foreshadow, () -> {
|
node(meltdown, () -> {
|
||||||
node(meltdown, () -> {
|
node(foreshadow, () -> {
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -417,7 +419,7 @@ public class TechTree implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
node(additiveReconstructor, Seq.with(new SectorComplete(biomassFacility)), () -> {
|
node(additiveReconstructor, Seq.with(new SectorComplete(biomassFacility)), () -> {
|
||||||
node(multiplicativeReconstructor, () -> {
|
node(multiplicativeReconstructor, Seq.with(new SectorComplete(overgrowth)), () -> {
|
||||||
node(exponentialReconstructor, () -> {
|
node(exponentialReconstructor, () -> {
|
||||||
node(tetrativeReconstructor, () -> {
|
node(tetrativeReconstructor, () -> {
|
||||||
});
|
});
|
||||||
@@ -468,7 +470,20 @@ public class TechTree implements ContentList{
|
|||||||
new Research(thermalGenerator),
|
new Research(thermalGenerator),
|
||||||
new Research(thoriumReactor)
|
new Research(thoriumReactor)
|
||||||
), () -> {
|
), () -> {
|
||||||
|
node(planetaryTerminal, Seq.with(
|
||||||
|
new SectorComplete(desolateRift),
|
||||||
|
new SectorComplete(nuclearComplex),
|
||||||
|
new SectorComplete(overgrowth),
|
||||||
|
new SectorComplete(extractionOutpost),
|
||||||
|
new SectorComplete(saltFlats),
|
||||||
|
new Research(spectre),
|
||||||
|
new Research(launchPad),
|
||||||
|
new Research(impactReactor),
|
||||||
|
new Research(additiveReconstructor),
|
||||||
|
new Research(exponentialReconstructor)
|
||||||
|
), () -> {
|
||||||
|
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -453,7 +453,7 @@ public class UnitTypes implements ContentList{
|
|||||||
|
|
||||||
shootEffect = Fx.greenLaserChargeSmall;
|
shootEffect = Fx.greenLaserChargeSmall;
|
||||||
|
|
||||||
incendChance = 0.05f;
|
incendChance = 0.075f;
|
||||||
incendSpread = 5f;
|
incendSpread = 5f;
|
||||||
incendAmount = 1;
|
incendAmount = 1;
|
||||||
|
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ public class Damage{
|
|||||||
|
|
||||||
//try to heal the tile
|
//try to heal the tile
|
||||||
if(collide && hitter.type.collides(hitter, tile)){
|
if(collide && hitter.type.collides(hitter, tile)){
|
||||||
hitter.type.hitTile(hitter, tile, 0f);
|
hitter.type.hitTile(hitter, tile, 0f, false);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -161,7 +161,9 @@ public abstract class BulletType extends Content{
|
|||||||
return healPercent <= 0.001f || tile.team != bullet.team || tile.healthf() < 1f;
|
return healPercent <= 0.001f || tile.team != bullet.team || tile.healthf() < 1f;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void hitTile(Bullet b, Building build, float initialHealth){
|
/** If direct is false, this is an indirect hit and the tile was already damaged.
|
||||||
|
* TODO this is a mess. */
|
||||||
|
public void hitTile(Bullet b, Building build, float initialHealth, boolean direct){
|
||||||
if(makeFire && build.team != b.team){
|
if(makeFire && build.team != b.team){
|
||||||
Fires.create(build.tile);
|
Fires.create(build.tile);
|
||||||
}
|
}
|
||||||
@@ -169,8 +171,8 @@ public abstract class BulletType extends Content{
|
|||||||
if(healPercent > 0f && build.team == b.team && !(build.block instanceof ConstructBlock)){
|
if(healPercent > 0f && build.team == b.team && !(build.block instanceof ConstructBlock)){
|
||||||
Fx.healBlockFull.at(build.x, build.y, build.block.size, Pal.heal);
|
Fx.healBlockFull.at(build.x, build.y, build.block.size, Pal.heal);
|
||||||
build.heal(healPercent / 100f * build.maxHealth());
|
build.heal(healPercent / 100f * build.maxHealth());
|
||||||
}else if(build.team != b.team){
|
}else if(build.team != b.team && direct){
|
||||||
hit(b, build.x, build.y);
|
hit(b);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ public class RailBulletType extends BulletType{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void hitTile(Bullet b, Building build, float initialHealth){
|
public void hitTile(Bullet b, Building build, float initialHealth, boolean direct){
|
||||||
handle(b, build, initialHealth);
|
handle(b, build, initialHealth);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -142,7 +142,7 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type.hitTile(self(), tile, health);
|
type.hitTile(self(), tile, health, true);
|
||||||
|
|
||||||
return !type.pierceBuilding;
|
return !type.pierceBuilding;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,9 +31,13 @@ public class Bar extends Element{
|
|||||||
this.fraction = fraction;
|
this.fraction = fraction;
|
||||||
lastValue = value = Mathf.clamp(fraction.get());
|
lastValue = value = Mathf.clamp(fraction.get());
|
||||||
update(() -> {
|
update(() -> {
|
||||||
this.name = name.get();
|
try{
|
||||||
this.blinkColor.set(color.get());
|
this.name = name.get();
|
||||||
setColor(color.get());
|
this.blinkColor.set(color.get());
|
||||||
|
setColor(color.get());
|
||||||
|
}catch(Exception e){ //getting the fraction may involve referring to invalid data
|
||||||
|
this.name = "";
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -679,7 +679,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
|||||||
if(sector.info.wavesSurvived >= 0 && sector.info.wavesSurvived - sector.info.wavesPassed >= 0 && !sector.isBeingPlayed()){
|
if(sector.info.wavesSurvived >= 0 && sector.info.wavesSurvived - sector.info.wavesPassed >= 0 && !sector.isBeingPlayed()){
|
||||||
int toCapture = sector.info.attack || sector.info.winWave <= 1 ? -1 : sector.info.winWave - (sector.info.wave + sector.info.wavesPassed);
|
int toCapture = sector.info.attack || sector.info.winWave <= 1 ? -1 : sector.info.winWave - (sector.info.wave + sector.info.wavesPassed);
|
||||||
boolean plus = (sector.info.wavesSurvived - sector.info.wavesPassed) >= SectorDamage.maxRetWave - 1;
|
boolean plus = (sector.info.wavesSurvived - sector.info.wavesPassed) >= SectorDamage.maxRetWave - 1;
|
||||||
stable.add("[accent]Survives " + Math.min(sector.info.wavesSurvived - sector.info.wavesPassed, toCapture) +
|
stable.add("[accent]Survives " + Math.min(sector.info.wavesSurvived - sector.info.wavesPassed, toCapture <= 0 ? 200 : 0) +
|
||||||
(plus ? "+" : "") + (toCapture < 0 ? "" : "/" + toCapture) + " waves");
|
(plus ? "+" : "") + (toCapture < 0 ? "" : "/" + toCapture) + " waves");
|
||||||
stable.row();
|
stable.row();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,104 @@
|
|||||||
|
package mindustry.world.blocks.campaign;
|
||||||
|
|
||||||
|
import arc.Graphics.*;
|
||||||
|
import arc.Graphics.Cursor.*;
|
||||||
|
import arc.graphics.g2d.*;
|
||||||
|
import arc.math.*;
|
||||||
|
import arc.scene.ui.layout.*;
|
||||||
|
import arc.util.*;
|
||||||
|
import mindustry.annotations.Annotations.*;
|
||||||
|
import mindustry.content.*;
|
||||||
|
import mindustry.gen.*;
|
||||||
|
import mindustry.graphics.*;
|
||||||
|
import mindustry.type.*;
|
||||||
|
import mindustry.world.*;
|
||||||
|
|
||||||
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
|
public class Accelerator extends Block{
|
||||||
|
public @Load("launch-arrow") TextureRegion arrowRegion;
|
||||||
|
|
||||||
|
public Block launching = Blocks.coreNucleus;
|
||||||
|
public int[] capacities = new int[content.items().size];
|
||||||
|
|
||||||
|
public Accelerator(String name){
|
||||||
|
super(name);
|
||||||
|
update = true;
|
||||||
|
solid = true;
|
||||||
|
hasItems = true;
|
||||||
|
itemCapacity = 8000;
|
||||||
|
configurable = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(){
|
||||||
|
for(ItemStack stack : launching.requirements){
|
||||||
|
capacities[stack.item.id] = stack.amount;
|
||||||
|
}
|
||||||
|
consumes.items(launching.requirements);
|
||||||
|
super.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
public class AcceleratorBuild extends Building{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw(){
|
||||||
|
super.draw();
|
||||||
|
|
||||||
|
for(int l = 0; l < 4; l++){
|
||||||
|
float length = 7f + l * 5f;
|
||||||
|
Draw.color(team.color, Pal.darkMetal, Mathf.absin(Time.time() + l*50f, 10f, 1f));
|
||||||
|
|
||||||
|
for(int i = 0; i < 4; i++){
|
||||||
|
float rot = i*90f + 45f;
|
||||||
|
Draw.rect(arrowRegion, x + Angles.trnsx(rot, length), y + Angles.trnsy(rot, length), rot + 180f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float rad = size * tilesize / 2f * 0.74f;
|
||||||
|
float scl = 2f;
|
||||||
|
|
||||||
|
Draw.z(Layer.bullet - 0.0001f);
|
||||||
|
Lines.stroke(1.75f, Pal.accent);
|
||||||
|
Lines.square(x, y, rad * 1.22f, 45f);
|
||||||
|
|
||||||
|
Lines.stroke(3f, Pal.accent);
|
||||||
|
Lines.square(x, y, rad, Time.time() / scl);
|
||||||
|
Lines.square(x, y, rad, -Time.time() / scl);
|
||||||
|
|
||||||
|
Draw.color(team.color);
|
||||||
|
|
||||||
|
for(int i = 0; i < 4; i++){
|
||||||
|
float rot = i*90f + 45f + (-Time.time()/3f)%360f;
|
||||||
|
float length = 26f;
|
||||||
|
Draw.rect(arrowRegion, x + Angles.trnsx(rot, length), y + Angles.trnsy(rot, length), rot + 180f);
|
||||||
|
}
|
||||||
|
|
||||||
|
Draw.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Cursor getCursor(){
|
||||||
|
return !state.isCampaign() || !consValid() ? SystemCursor.arrow : super.getCursor();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void buildConfiguration(Table table){
|
||||||
|
deselect();
|
||||||
|
|
||||||
|
if(!state.isCampaign() || !consValid()) return;
|
||||||
|
|
||||||
|
ui.showInfo("@indev.campaign");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMaximumAccepted(Item item){
|
||||||
|
return capacities[item.id];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean acceptItem(Building source, Item item){
|
||||||
|
return items.get(item) < getMaximumAccepted(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
package mindustry.world.blocks.campaign;
|
package mindustry.world.blocks.campaign;
|
||||||
|
|
||||||
import arc.*;
|
import arc.*;
|
||||||
|
import arc.Graphics.*;
|
||||||
|
import arc.Graphics.Cursor.*;
|
||||||
import arc.graphics.*;
|
import arc.graphics.*;
|
||||||
import arc.graphics.g2d.*;
|
import arc.graphics.g2d.*;
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
@@ -54,6 +56,11 @@ public class LaunchPad extends Block{
|
|||||||
|
|
||||||
public class LaunchPadBuild extends Building{
|
public class LaunchPadBuild extends Building{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Cursor getCursor(){
|
||||||
|
return !state.isCampaign() ? SystemCursor.arrow : super.getCursor();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(){
|
public void draw(){
|
||||||
super.draw();
|
super.draw();
|
||||||
|
|||||||
@@ -63,6 +63,8 @@ public class CoreBlock extends StorageBlock{
|
|||||||
CoreBlock block = (CoreBlock)tile.block();
|
CoreBlock block = (CoreBlock)tile.block();
|
||||||
Fx.spawn.at(entity);
|
Fx.spawn.at(entity);
|
||||||
|
|
||||||
|
player.set(entity);
|
||||||
|
|
||||||
if(!net.client()){
|
if(!net.client()){
|
||||||
Unit unit = block.unitType.create(tile.team());
|
Unit unit = block.unitType.create(tile.team());
|
||||||
unit.set(entity);
|
unit.set(entity);
|
||||||
|
|||||||
@@ -33,7 +33,8 @@ def transformColors = { List<List<String>> list ->
|
|||||||
|
|
||||||
|
|
||||||
//d4816b
|
//d4816b
|
||||||
transformColors([["a387ea", "8a73c6", "5c5e9f"], ["6e7080", "989aa4", "b0bac0"], ["bc5452", "ea8878", "feb380"], ["de9458", "f8c266", "ffe18f"], ["feb380", "ea8878", "bc5452"], ["d4816b", "eab678", "ffd37f"]])
|
transformColors([["a387ea", "8a73c6", "5c5e9f"], ["6e7080", "989aa4", "b0bac0"], ["bc5452", "ea8878", "feb380"],
|
||||||
|
["de9458", "f8c266", "ffe18f"], ["feb380", "ea8878", "bc5452"], ["d4816b", "eab678", "ffd37f"], ["ffffff", "dcc6c6", "9d7f7f"]])
|
||||||
|
|
||||||
def antialias = { File file ->
|
def antialias = { File file ->
|
||||||
if(!doAntialias) return
|
if(!doAntialias) return
|
||||||
|
|||||||