Merge branch 'master' into balancing_burst-drill-optional-multiplier
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -10,7 +10,7 @@ import mindustry.entities.bullet.*;
|
||||
public class Bullets{
|
||||
public static BulletType
|
||||
|
||||
placeholder, spaceLiquid, damageLightning, damageLightningGround, fireball;
|
||||
placeholder, spaceLiquid, damageLightning, damageLightningGround, damageLightningAir, fireball;
|
||||
|
||||
public static void load(){
|
||||
|
||||
@@ -37,6 +37,10 @@ public class Bullets{
|
||||
damageLightningGround = damageLightning.copy();
|
||||
damageLightningGround.collidesAir = false;
|
||||
|
||||
damageLightningAir = damageLightning.copy();
|
||||
damageLightningAir.collidesGround = false;
|
||||
damageLightningAir.collidesTiles = false;
|
||||
|
||||
fireball = new FireBulletType(1f, 4){{
|
||||
hittable = false;
|
||||
}};
|
||||
|
||||
@@ -137,6 +137,10 @@ public class ErekirTechTree{
|
||||
node(eruptionDrill, Seq.with(new OnSector(stronghold)), () -> {
|
||||
|
||||
});
|
||||
|
||||
node(largeCliffCrusher, Seq.with(new OnSector(stronghold)), () -> {
|
||||
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -220,7 +224,9 @@ public class ErekirTechTree{
|
||||
});
|
||||
|
||||
node(heatRouter, () -> {
|
||||
node(smallHeatRedirector, () -> {
|
||||
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -28,7 +28,7 @@ public class Fx{
|
||||
public static final Effect
|
||||
|
||||
none = new Effect(0, 0f, e -> {}),
|
||||
|
||||
|
||||
blockCrash = new Effect(90f, e -> {
|
||||
if(!(e.data instanceof Block block)) return;
|
||||
|
||||
@@ -445,6 +445,20 @@ public class Fx{
|
||||
}
|
||||
}),
|
||||
|
||||
titanExplosionLarge = new Effect(45f, 220f, e -> {
|
||||
color(e.color);
|
||||
stroke(e.fout() * 3f);
|
||||
float circleRad = 6f + e.finpow() * 110f;
|
||||
Lines.circle(e.x, e.y, circleRad);
|
||||
|
||||
rand.setSeed(e.id);
|
||||
for(int i = 0; i < 21; i++){
|
||||
float angle = rand.random(360f);
|
||||
float lenRand = rand.random(0.5f, 1f);
|
||||
Lines.lineAngle(e.x, e.y, angle, e.foutpow() * 50f * rand.random(1f, 0.6f) + 2f, e.finpow() * 100f * lenRand + 6f);
|
||||
}
|
||||
}),
|
||||
|
||||
titanSmoke = new Effect(300f, 300f, b -> {
|
||||
float intensity = 3f;
|
||||
|
||||
@@ -465,6 +479,34 @@ public class Fx{
|
||||
}
|
||||
}),
|
||||
|
||||
titanSmokeLarge = new Effect(400f, 400f, b -> {
|
||||
float intensity = 4f;
|
||||
|
||||
color(b.color, 0.65f);
|
||||
for(int i = 0; i < 4; i++){
|
||||
rand.setSeed(b.id*2 + i);
|
||||
float lenScl = rand.random(0.5f, 1f);
|
||||
int fi = i;
|
||||
b.scaled(b.lifetime * lenScl, e -> {
|
||||
randLenVectors(e.id + fi - 1, e.fin(Interp.pow10Out), (int)(2.9f * intensity), 26f * intensity, (x, y, in, out) -> {
|
||||
float fout = e.fout(Interp.pow5Out) * rand.random(0.5f, 1f);
|
||||
float rad = fout * ((2f + intensity) * 2.35f);
|
||||
|
||||
Fill.circle(e.x + x, e.y + y, rad);
|
||||
Drawf.light(e.x + x, e.y + y, rad * 2.5f, b.color, 0.5f);
|
||||
});
|
||||
});
|
||||
}
|
||||
}),
|
||||
|
||||
smokeAoeCloud = new Effect(60f * 3f, 250f, e -> {
|
||||
color(e.color, 0.65f);
|
||||
|
||||
randLenVectors(e.id, 80, 90f, (x, y) -> {
|
||||
Fill.circle(e.x + x, e.y + y, 6f * Mathf.clamp(e.fin() / 0.1f) * Mathf.clamp(e.fout() / 0.1f));
|
||||
});
|
||||
}),
|
||||
|
||||
missileTrailSmoke = new Effect(180f, 300f, b -> {
|
||||
float intensity = 2f;
|
||||
|
||||
@@ -485,6 +527,26 @@ public class Fx{
|
||||
}
|
||||
}).layer(Layer.bullet - 1f),
|
||||
|
||||
missileTrailSmokeSmall = new Effect(120f, 200f, b -> {
|
||||
float intensity = 1.3f;
|
||||
|
||||
color(b.color, 0.7f);
|
||||
for(int i = 0; i < 3; i++){
|
||||
rand.setSeed(b.id*2 + i);
|
||||
float lenScl = rand.random(0.5f, 1f);
|
||||
int fi = i;
|
||||
b.scaled(b.lifetime * lenScl, e -> {
|
||||
randLenVectors(e.id + fi - 1, e.fin(Interp.pow10Out), (int)(2.9f * intensity), 13f * intensity, (x, y, in, out) -> {
|
||||
float fout = e.fout(Interp.pow5Out) * rand.random(0.5f, 1f);
|
||||
float rad = fout * ((2f + intensity) * 2.35f);
|
||||
|
||||
Fill.circle(e.x + x, e.y + y, rad);
|
||||
Drawf.light(e.x + x, e.y + y, rad * 2.5f, b.color, 0.5f);
|
||||
});
|
||||
});
|
||||
}
|
||||
}).layer(Layer.bullet - 1f),
|
||||
|
||||
neoplasmSplat = new Effect(400f, 300f, b -> {
|
||||
float intensity = 3f;
|
||||
|
||||
@@ -523,6 +585,24 @@ public class Fx{
|
||||
}
|
||||
}),
|
||||
|
||||
scatheExplosionSmall = new Effect(40f, 160f, e -> {
|
||||
color(e.color);
|
||||
stroke(e.fout() * 4f);
|
||||
float circleRad = 6f + e.finpow() * 40f;
|
||||
Lines.circle(e.x, e.y, circleRad);
|
||||
|
||||
rand.setSeed(e.id);
|
||||
for(int i = 0; i < 16; i++){
|
||||
float angle = rand.random(360f);
|
||||
float lenRand = rand.random(0.5f, 1f);
|
||||
Tmp.v1.trns(angle, circleRad);
|
||||
|
||||
for(int s : Mathf.signs){
|
||||
Drawf.tri(e.x + Tmp.v1.x, e.y + Tmp.v1.y, e.foutpow() * 30f, e.fout() * 25f * lenRand + 6f, angle + 90f + s * 90f);
|
||||
}
|
||||
}
|
||||
}),
|
||||
|
||||
scatheLight = new Effect(60f, 160f, e -> {
|
||||
float circleRad = 6f + e.finpow() * 60f;
|
||||
|
||||
@@ -530,6 +610,13 @@ public class Fx{
|
||||
Fill.circle(e.x, e.y, circleRad);
|
||||
}).layer(Layer.bullet + 2f),
|
||||
|
||||
scatheLightSmall = new Effect(60f, 160f, e -> {
|
||||
float circleRad = 6f + e.finpow() * 40f;
|
||||
|
||||
color(e.color, e.foutpow());
|
||||
Fill.circle(e.x, e.y, circleRad);
|
||||
}).layer(Layer.bullet + 2f),
|
||||
|
||||
scatheSlash = new Effect(40f, 160f, e -> {
|
||||
Draw.color(e.color);
|
||||
for(int s : Mathf.signs){
|
||||
@@ -761,7 +848,7 @@ public class Fx{
|
||||
Fill.circle(e.x + x, e.y + y, e.fout() * 2f);
|
||||
});
|
||||
}),
|
||||
|
||||
|
||||
hitLaserBlast = new Effect(12, e -> {
|
||||
color(e.color);
|
||||
stroke(e.fout() * 1.5f);
|
||||
@@ -1114,7 +1201,7 @@ public class Fx{
|
||||
stroke(2f * e.fout());
|
||||
Lines.circle(e.x, e.y, 5f * e.fout());
|
||||
}),
|
||||
|
||||
|
||||
forceShrink = new Effect(20, e -> {
|
||||
color(e.color, e.fout());
|
||||
if(renderer.animateShields){
|
||||
@@ -1703,6 +1790,18 @@ public class Fx{
|
||||
}
|
||||
}),
|
||||
|
||||
shootSmokeMissileColor = new Effect(130f, 300f, e -> {
|
||||
color(e.color);
|
||||
alpha(0.5f);
|
||||
rand.setSeed(e.id);
|
||||
for(int i = 0; i < 35; i++){
|
||||
v.trns(e.rotation + 180f + rand.range(21f), rand.random(e.finpow() * 90f)).add(rand.range(3f), rand.range(3f));
|
||||
e.scaled(e.lifetime * rand.random(0.2f, 1f), b -> {
|
||||
Fill.circle(e.x + v.x, e.y + v.y, b.fout() * 9f + 0.3f);
|
||||
});
|
||||
}
|
||||
}),
|
||||
|
||||
regenParticle = new Effect(100f, e -> {
|
||||
color(Pal.regen);
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@ public class Items{
|
||||
}};
|
||||
|
||||
scrap = new Item("scrap", Color.valueOf("777777")){{
|
||||
|
||||
cost = 0.5f;
|
||||
}};
|
||||
|
||||
silicon = new Item("silicon", Color.valueOf("53565c")){{
|
||||
|
||||
@@ -65,7 +65,6 @@ public class Planets{
|
||||
clearSectorOnLose = true;
|
||||
defaultCore = Blocks.coreBastion;
|
||||
iconColor = Color.valueOf("ff9266");
|
||||
hiddenItems.addAll(Items.serpuloItems).removeAll(Items.erekirItems);
|
||||
enemyBuildSpeedMultiplier = 0.4f;
|
||||
|
||||
//TODO disallowed for now
|
||||
@@ -86,6 +85,8 @@ public class Planets{
|
||||
r.coreDestroyClear = true;
|
||||
r.onlyDepositCore = true;
|
||||
};
|
||||
campaignRuleDefaults.fog = true;
|
||||
campaignRuleDefaults.showSpawns = true;
|
||||
|
||||
unlockedOnLand.add(Blocks.coreBastion);
|
||||
}};
|
||||
@@ -144,6 +145,7 @@ public class Planets{
|
||||
r.waveTeam = Team.crux;
|
||||
r.placeRangeCheck = false;
|
||||
r.showSpawns = false;
|
||||
r.coreDestroyClear = true;
|
||||
};
|
||||
iconColor = Color.valueOf("7d4dff");
|
||||
atmosphereColor = Color.valueOf("3c1b8f");
|
||||
@@ -152,7 +154,6 @@ public class Planets{
|
||||
startSector = 15;
|
||||
alwaysUnlocked = true;
|
||||
landCloudColor = Pal.spore.cpy().a(0.5f);
|
||||
hiddenItems.addAll(Items.erekirItems).removeAll(Items.serpuloItems);
|
||||
}};
|
||||
|
||||
verilus = makeAsteroid("verlius", sun, Blocks.stoneWall, Blocks.iceWall, 0.5f, 12, 2f, gen -> {
|
||||
|
||||
@@ -7,10 +7,12 @@ import static mindustry.content.Planets.*;
|
||||
public class SectorPresets{
|
||||
public static SectorPreset
|
||||
groundZero,
|
||||
craters, biomassFacility, frozenForest, ruinousShores, windsweptIslands, stainedMountains, tarFields,
|
||||
fungalPass, extractionOutpost, saltFlats, overgrowth,
|
||||
craters, biomassFacility, taintedWoods, frozenForest, ruinousShores, facility32m, windsweptIslands, stainedMountains, tarFields,
|
||||
frontier, fungalPass, infestedCanyons, atolls, mycelialBastion, extractionOutpost, saltFlats, testingGrounds, overgrowth, //polarAerodrome,
|
||||
impact0078, desolateRift, nuclearComplex, planetaryTerminal,
|
||||
coastline, navalFortress,
|
||||
coastline, navalFortress, weatheredChannels, seaPort,
|
||||
|
||||
geothermalStronghold, cruxscape,
|
||||
|
||||
onset, aegis, lake, intersect, basin, atlas, split, marsh, peaks, ravine, caldera,
|
||||
stronghold, crevice, siege, crossroads, karst, origin;
|
||||
@@ -32,6 +34,11 @@ public class SectorPresets{
|
||||
difficulty = 5;
|
||||
}};
|
||||
|
||||
testingGrounds = new SectorPreset("testingGrounds", serpulo, 3){{
|
||||
difficulty = 7;
|
||||
captureWave = 33;
|
||||
}};
|
||||
|
||||
frozenForest = new SectorPreset("frozenForest", serpulo, 86){{
|
||||
captureWave = 15;
|
||||
difficulty = 2;
|
||||
@@ -42,6 +49,11 @@ public class SectorPresets{
|
||||
difficulty = 3;
|
||||
}};
|
||||
|
||||
taintedWoods = new SectorPreset("taintedWoods", serpulo, 221){{
|
||||
captureWave = 33;
|
||||
difficulty = 5;
|
||||
}};
|
||||
|
||||
craters = new SectorPreset("craters", serpulo, 18){{
|
||||
captureWave = 20;
|
||||
difficulty = 2;
|
||||
@@ -52,6 +64,15 @@ public class SectorPresets{
|
||||
difficulty = 3;
|
||||
}};
|
||||
|
||||
seaPort = new SectorPreset("seaPort", serpulo, 47){{
|
||||
difficulty = 4;
|
||||
}};
|
||||
|
||||
facility32m = new SectorPreset("facility32m", serpulo, 64){{
|
||||
captureWave = 25;
|
||||
difficulty = 4;
|
||||
}};
|
||||
|
||||
windsweptIslands = new SectorPreset("windsweptIslands", serpulo, 246){{
|
||||
captureWave = 30;
|
||||
difficulty = 4;
|
||||
@@ -66,19 +87,45 @@ public class SectorPresets{
|
||||
difficulty = 5;
|
||||
}};
|
||||
|
||||
//TODO: removed for now
|
||||
//polarAerodrome = new SectorPreset("polarAerodrome", serpulo, 68){{
|
||||
// difficulty = 7;
|
||||
//}};
|
||||
|
||||
coastline = new SectorPreset("coastline", serpulo, 108){{
|
||||
captureWave = 30;
|
||||
difficulty = 5;
|
||||
}};
|
||||
|
||||
navalFortress = new SectorPreset("navalFortress", serpulo, 216){{
|
||||
weatheredChannels = new SectorPreset("weatheredChannels", serpulo, 39){{
|
||||
captureWave = 40;
|
||||
difficulty = 9;
|
||||
}};
|
||||
|
||||
navalFortress = new SectorPreset("navalFortress", serpulo, 216){{
|
||||
difficulty = 8;
|
||||
}};
|
||||
|
||||
frontier = new SectorPreset("frontier", serpulo, 203){{
|
||||
difficulty = 4;
|
||||
}};
|
||||
|
||||
fungalPass = new SectorPreset("fungalPass", serpulo, 21){{
|
||||
difficulty = 4;
|
||||
}};
|
||||
|
||||
infestedCanyons = new SectorPreset("infestedCanyons", serpulo, 210){{
|
||||
difficulty = 4;
|
||||
}};
|
||||
|
||||
atolls = new SectorPreset("atolls", serpulo, 1){{
|
||||
difficulty = 7;
|
||||
}};
|
||||
|
||||
mycelialBastion = new SectorPreset("mycelialBastion", serpulo, 260){{
|
||||
difficulty = 8;
|
||||
}};
|
||||
|
||||
overgrowth = new SectorPreset("overgrowth", serpulo, 134){{
|
||||
difficulty = 5;
|
||||
}};
|
||||
@@ -108,6 +155,14 @@ public class SectorPresets{
|
||||
isLastSector = true;
|
||||
}};
|
||||
|
||||
geothermalStronghold = new SectorPreset("geothermalStronghold", serpulo, 264){{
|
||||
difficulty = 10;
|
||||
}};
|
||||
|
||||
cruxscape = new SectorPreset("cruxscape", serpulo, 54){{
|
||||
difficulty = 10;
|
||||
}};
|
||||
|
||||
//endregion
|
||||
//region erekir
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package mindustry.content;
|
||||
|
||||
import arc.struct.*;
|
||||
import mindustry.game.Objectives.*;
|
||||
import mindustry.type.*;
|
||||
|
||||
import static mindustry.content.Blocks.*;
|
||||
import static mindustry.content.SectorPresets.craters;
|
||||
@@ -122,7 +123,7 @@ public class SerpuloTechTree{
|
||||
});
|
||||
|
||||
node(pyratiteMixer, () -> {
|
||||
node(blastMixer, () -> {
|
||||
node(blastMixer, Seq.with(new SectorComplete(facility32m)), () -> {
|
||||
|
||||
});
|
||||
});
|
||||
@@ -138,7 +139,7 @@ public class SerpuloTechTree{
|
||||
});
|
||||
});
|
||||
|
||||
node(plastaniumCompressor, Seq.with(new SectorComplete(windsweptIslands)), () -> {
|
||||
node(plastaniumCompressor, Seq.with(new SectorComplete(windsweptIslands), new OnSector(tarFields)), () -> {
|
||||
node(phaseWeaver, Seq.with(new SectorComplete(tarFields)), () -> {
|
||||
|
||||
});
|
||||
@@ -261,12 +262,21 @@ public class SerpuloTechTree{
|
||||
node(duo, () -> {
|
||||
node(copperWall, () -> {
|
||||
node(copperWallLarge, () -> {
|
||||
node(scrapWall, () -> {
|
||||
node(scrapWallLarge, () -> {
|
||||
node(scrapWallHuge, () -> {
|
||||
node(scrapWallGigantic);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
node(titaniumWall, () -> {
|
||||
node(titaniumWallLarge);
|
||||
|
||||
node(door, () -> {
|
||||
node(doorLarge);
|
||||
});
|
||||
|
||||
node(plastaniumWall, () -> {
|
||||
node(plastaniumWallLarge, () -> {
|
||||
|
||||
@@ -359,11 +369,12 @@ public class SerpuloTechTree{
|
||||
});
|
||||
});
|
||||
|
||||
node(crawler, () -> {
|
||||
//override research requirements to have graphite, not coal
|
||||
node(crawler, ItemStack.with(Items.silicon, 400, Items.graphite, 400), () -> {
|
||||
node(atrax, () -> {
|
||||
node(spiroct, () -> {
|
||||
node(arkyid, () -> {
|
||||
node(toxopid, () -> {
|
||||
node(toxopid, Seq.with(new SectorComplete(mycelialBastion)), () -> {
|
||||
|
||||
});
|
||||
});
|
||||
@@ -397,7 +408,7 @@ public class SerpuloTechTree{
|
||||
});
|
||||
});
|
||||
|
||||
node(navalFactory, Seq.with(new SectorComplete(ruinousShores)), () -> {
|
||||
node(navalFactory, Seq.with(new OnSector(windsweptIslands)), () -> {
|
||||
node(risso, () -> {
|
||||
node(minke, () -> {
|
||||
node(bryde, () -> {
|
||||
@@ -425,8 +436,8 @@ public class SerpuloTechTree{
|
||||
});
|
||||
|
||||
node(additiveReconstructor, Seq.with(new SectorComplete(biomassFacility)), () -> {
|
||||
node(multiplicativeReconstructor, () -> {
|
||||
node(exponentialReconstructor, Seq.with(new SectorComplete(overgrowth)), () -> {
|
||||
node(multiplicativeReconstructor, Seq.with(new SectorComplete(overgrowth)), () -> {
|
||||
node(exponentialReconstructor, () -> {
|
||||
node(tetrativeReconstructor, () -> {
|
||||
|
||||
});
|
||||
@@ -446,6 +457,16 @@ public class SerpuloTechTree{
|
||||
new Research(mender),
|
||||
new Research(combustionGenerator)
|
||||
), () -> {
|
||||
node(frontier, Seq.with(
|
||||
new Research(groundFactory),
|
||||
new Research(airFactory),
|
||||
new Research(thermalGenerator),
|
||||
new Research(dagger),
|
||||
new Research(mono)
|
||||
), () -> {
|
||||
|
||||
});
|
||||
|
||||
node(ruinousShores, Seq.with(
|
||||
new SectorComplete(craters),
|
||||
new Research(graphitePress),
|
||||
@@ -459,6 +480,18 @@ public class SerpuloTechTree{
|
||||
new Research(siliconSmelter),
|
||||
new Research(steamGenerator)
|
||||
), () -> {
|
||||
node(seaPort, Seq.with(
|
||||
new SectorComplete(biomassFacility),
|
||||
new Research(navalFactory),
|
||||
new Research(risso),
|
||||
new Research(retusa),
|
||||
new Research(steamGenerator),
|
||||
new Research(cultivator),
|
||||
new Research(coalCentrifuge)
|
||||
), () -> {
|
||||
|
||||
});
|
||||
|
||||
node(tarFields, Seq.with(
|
||||
new SectorComplete(windsweptIslands),
|
||||
new Research(coalCentrifuge),
|
||||
@@ -487,28 +520,73 @@ public class SerpuloTechTree{
|
||||
new Research(risso),
|
||||
new Research(minke),
|
||||
new Research(bryde),
|
||||
new Research(sei),
|
||||
new Research(omura),
|
||||
new Research(spectre),
|
||||
new Research(launchPad),
|
||||
new Research(massDriver),
|
||||
new Research(impactReactor),
|
||||
new Research(additiveReconstructor),
|
||||
new Research(exponentialReconstructor)
|
||||
new Research(exponentialReconstructor),
|
||||
new Research(tetrativeReconstructor)
|
||||
), () -> {
|
||||
node(geothermalStronghold, Seq.with(
|
||||
new Research(omura),
|
||||
new Research(navanax),
|
||||
new Research(eclipse),
|
||||
new Research(oct),
|
||||
new Research(reign),
|
||||
new Research(corvus),
|
||||
new Research(toxopid)
|
||||
), () -> {
|
||||
|
||||
});
|
||||
|
||||
node(cruxscape, Seq.with(
|
||||
new Research(omura),
|
||||
new Research(navanax),
|
||||
new Research(eclipse),
|
||||
new Research(oct),
|
||||
new Research(reign),
|
||||
new Research(corvus),
|
||||
new Research(toxopid)
|
||||
), () -> {
|
||||
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
node(extractionOutpost, Seq.with(
|
||||
new SectorComplete(stainedMountains),
|
||||
new SectorComplete(windsweptIslands),
|
||||
new Research(groundFactory),
|
||||
new Research(nova),
|
||||
new Research(airFactory),
|
||||
new Research(mono)
|
||||
node(facility32m, Seq.with(
|
||||
new Research(pneumaticDrill),
|
||||
new SectorComplete(stainedMountains)
|
||||
), () -> {
|
||||
node(extractionOutpost, Seq.with(
|
||||
new SectorComplete(windsweptIslands),
|
||||
new SectorComplete(facility32m),
|
||||
new Research(groundFactory),
|
||||
new Research(nova),
|
||||
new Research(airFactory),
|
||||
new Research(mono)
|
||||
), () -> {
|
||||
//TODO: removed for now
|
||||
/*node(polarAerodrome, Seq.with(
|
||||
new SectorComplete(fungalPass),
|
||||
new SectorComplete(desolateRift),
|
||||
new SectorComplete(overgrowth),
|
||||
new Research(multiplicativeReconstructor),
|
||||
new Research(zenith),
|
||||
new Research(swarmer),
|
||||
new Research(cyclone),
|
||||
new Research(blastDrill),
|
||||
new Research(blastDrill),
|
||||
new Research(massDriver)
|
||||
), () -> {
|
||||
|
||||
});
|
||||
*/
|
||||
});
|
||||
});
|
||||
|
||||
node(saltFlats, Seq.with(
|
||||
@@ -518,21 +596,41 @@ public class SerpuloTechTree{
|
||||
new Research(airFactory),
|
||||
new Research(door)
|
||||
), () -> {
|
||||
node(testingGrounds, Seq.with(
|
||||
new Research(cryofluidMixer),
|
||||
new Research(Liquids.cryofluid),
|
||||
new Research(waterExtractor),
|
||||
new Research(ripple)
|
||||
), () -> {
|
||||
|
||||
});
|
||||
|
||||
node(coastline, Seq.with(
|
||||
new SectorComplete(windsweptIslands),
|
||||
new SectorComplete(saltFlats),
|
||||
new Research(navalFactory),
|
||||
new Research(payloadConveyor)
|
||||
), () -> {
|
||||
|
||||
node(navalFortress, Seq.with(
|
||||
new SectorComplete(coastline),
|
||||
new SectorComplete(extractionOutpost),
|
||||
new Research(coreNucleus),
|
||||
new Research(massDriver),
|
||||
new Research(oxynoe),
|
||||
new Research(minke),
|
||||
new Research(bryde),
|
||||
new Research(cyclone),
|
||||
new Research(ripple)
|
||||
), () -> {
|
||||
node(weatheredChannels, Seq.with(
|
||||
new SectorComplete(impact0078),
|
||||
new Research(bryde),
|
||||
new Research(surgeSmelter),
|
||||
new Research(overdriveProjector)
|
||||
), () -> {
|
||||
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -548,7 +646,22 @@ public class SerpuloTechTree{
|
||||
new Research(UnitTypes.mace),
|
||||
new Research(UnitTypes.flare)
|
||||
), () -> {
|
||||
node(mycelialBastion, Seq.with(
|
||||
new Research(atrax),
|
||||
new Research(spiroct),
|
||||
new Research(multiplicativeReconstructor),
|
||||
new Research(exponentialReconstructor)
|
||||
), () -> {
|
||||
|
||||
});
|
||||
|
||||
node(atolls, Seq.with(
|
||||
new SectorComplete(windsweptIslands),
|
||||
new Research(multiplicativeReconstructor),
|
||||
new Research(mega)
|
||||
), () -> {
|
||||
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -559,6 +672,14 @@ public class SerpuloTechTree{
|
||||
new Research(scatter),
|
||||
new Research(graphitePress)
|
||||
), () -> {
|
||||
node(taintedWoods, Seq.with(
|
||||
new SectorComplete(biomassFacility),
|
||||
new Research(Items.sporePod),
|
||||
new Research(wave)
|
||||
), () -> {
|
||||
|
||||
});
|
||||
|
||||
node(stainedMountains, Seq.with(
|
||||
new SectorComplete(biomassFacility),
|
||||
new Research(pneumaticDrill),
|
||||
@@ -569,6 +690,16 @@ public class SerpuloTechTree{
|
||||
new Research(groundFactory),
|
||||
new Research(door)
|
||||
), () -> {
|
||||
node(infestedCanyons, Seq.with(
|
||||
new SectorComplete(fungalPass),
|
||||
new Research(navalFactory),
|
||||
new Research(risso),
|
||||
new Research(minke),
|
||||
new Research(additiveReconstructor)
|
||||
), () -> {
|
||||
|
||||
});
|
||||
|
||||
node(nuclearComplex, Seq.with(
|
||||
new SectorComplete(fungalPass),
|
||||
new Research(thermalGenerator),
|
||||
|
||||
@@ -61,12 +61,12 @@ public class StatusEffects{
|
||||
color = Pal.lightishGray;
|
||||
speedMultiplier = 0.4f;
|
||||
|
||||
init(() -> opposite(fast));
|
||||
init(() -> opposite(fast));
|
||||
}};
|
||||
|
||||
fast = new StatusEffect("fast"){{
|
||||
color = Pal.boostTo;
|
||||
speedMultiplier = 1.6f;
|
||||
color = Pal.boostTo;
|
||||
speedMultiplier = 1.6f;
|
||||
|
||||
init(() -> opposite(slow));
|
||||
}};
|
||||
@@ -89,7 +89,7 @@ public class StatusEffects{
|
||||
opposite(burning, melting);
|
||||
});
|
||||
}};
|
||||
|
||||
|
||||
muddy = new StatusEffect("muddy"){{
|
||||
color = Color.valueOf("46382a");
|
||||
speedMultiplier = 0.94f;
|
||||
|
||||
@@ -139,6 +139,16 @@ public class TechTree{
|
||||
}
|
||||
}
|
||||
|
||||
/** Adds the specified database tab to all the content in this tree. */
|
||||
public void addDatabaseTab(UnlockableContent tab){
|
||||
each(node -> node.content.databaseTabs.add(tab));
|
||||
}
|
||||
|
||||
/** Adds the specified planet to the shownPlanets of all the content in this tree. */
|
||||
public void addPlanet(Planet planet){
|
||||
each(node -> node.content.shownPlanets.add(planet));
|
||||
}
|
||||
|
||||
public Drawable icon(){
|
||||
return icon == null ? new TextureRegionDrawable(content.uiIcon) : icon;
|
||||
}
|
||||
|
||||
@@ -255,7 +255,7 @@ public class UnitTypes{
|
||||
|
||||
reign = new UnitType("reign"){{
|
||||
speed = 0.4f;
|
||||
hitSize = 26f;
|
||||
hitSize = 30f;
|
||||
rotateSpeed = 1.65f;
|
||||
health = 24000;
|
||||
armor = 18f;
|
||||
@@ -322,7 +322,7 @@ public class UnitTypes{
|
||||
speed = 0.55f;
|
||||
hitSize = 8f;
|
||||
health = 120f;
|
||||
buildSpeed = 0.35f;
|
||||
buildSpeed = 0.3f;
|
||||
armor = 1f;
|
||||
|
||||
abilities.add(new RepairFieldAbility(10f, 60f * 4, 60f));
|
||||
@@ -617,6 +617,7 @@ public class UnitTypes{
|
||||
|
||||
weapons.add(new Weapon(){{
|
||||
shootOnDeath = true;
|
||||
targetUnderBlocks = false;
|
||||
reload = 24f;
|
||||
shootCone = 180f;
|
||||
ejectEffect = Fx.none;
|
||||
@@ -1011,7 +1012,7 @@ public class UnitTypes{
|
||||
accel = 0.08f;
|
||||
drag = 0.016f;
|
||||
flying = true;
|
||||
hitSize = 10f;
|
||||
hitSize = 11f;
|
||||
targetAir = false;
|
||||
engineOffset = 7.8f;
|
||||
range = 140f;
|
||||
@@ -1041,6 +1042,7 @@ public class UnitTypes{
|
||||
|
||||
status = StatusEffects.blasted;
|
||||
statusDuration = 60f;
|
||||
damage = splashDamage * 0.5f;
|
||||
}};
|
||||
}});
|
||||
}};
|
||||
@@ -1254,6 +1256,7 @@ public class UnitTypes{
|
||||
controller = u -> new MinerAI();
|
||||
|
||||
defaultCommand = UnitCommand.mineCommand;
|
||||
allowChangeCommands = false;
|
||||
|
||||
flying = true;
|
||||
drag = 0.06f;
|
||||
@@ -1445,6 +1448,7 @@ public class UnitTypes{
|
||||
healPercent = 15f;
|
||||
splashDamage = 220f;
|
||||
splashDamageRadius = 80f;
|
||||
damage = splashDamage * 0.7f;
|
||||
}};
|
||||
}});
|
||||
}};
|
||||
@@ -1831,7 +1835,6 @@ public class UnitTypes{
|
||||
//region naval support
|
||||
retusa = new UnitType("retusa"){{
|
||||
speed = 0.9f;
|
||||
targetAir = false;
|
||||
drag = 0.14f;
|
||||
hitSize = 11f;
|
||||
health = 270;
|
||||
@@ -1861,6 +1864,23 @@ public class UnitTypes{
|
||||
}};
|
||||
}});
|
||||
|
||||
weapons.add(new Weapon("retusa-weapon"){{
|
||||
shootSound = Sounds.lasershoot;
|
||||
reload = 22f;
|
||||
x = 4.5f;
|
||||
y = -3.5f;
|
||||
rotateSpeed = 5f;
|
||||
mirror = true;
|
||||
rotate = true;
|
||||
bullet = new LaserBoltBulletType(5.2f, 12){{
|
||||
lifetime = 30f;
|
||||
healPercent = 5.5f;
|
||||
collidesTeam = true;
|
||||
backColor = Pal.heal;
|
||||
frontColor = Color.white;
|
||||
}};
|
||||
}});
|
||||
|
||||
weapons.add(new Weapon(){{
|
||||
mirror = false;
|
||||
rotate = true;
|
||||
@@ -1912,7 +1932,7 @@ public class UnitTypes{
|
||||
trailWidth = 3f;
|
||||
trailLength = 8;
|
||||
|
||||
splashDamage = 33f;
|
||||
splashDamage = 40f;
|
||||
splashDamageRadius = 32f;
|
||||
}};
|
||||
}});
|
||||
@@ -2346,7 +2366,8 @@ public class UnitTypes{
|
||||
//region core
|
||||
|
||||
alpha = new UnitType("alpha"){{
|
||||
aiController = BuilderAI::new;
|
||||
aiController = () -> new BuilderAI(true, 400f);
|
||||
controller = u -> u.team.isAI() ? aiController.get() : new CommandAI();
|
||||
isEnemy = false;
|
||||
|
||||
lowAltitude = true;
|
||||
@@ -2384,7 +2405,8 @@ public class UnitTypes{
|
||||
}};
|
||||
|
||||
beta = new UnitType("beta"){{
|
||||
aiController = BuilderAI::new;
|
||||
aiController = () -> new BuilderAI(true, 400f);
|
||||
controller = u -> u.team.isAI() ? aiController.get() : new CommandAI();
|
||||
isEnemy = false;
|
||||
|
||||
flying = true;
|
||||
@@ -2425,7 +2447,8 @@ public class UnitTypes{
|
||||
}};
|
||||
|
||||
gamma = new UnitType("gamma"){{
|
||||
aiController = BuilderAI::new;
|
||||
aiController = () -> new BuilderAI(true, 400f);
|
||||
controller = u -> u.team.isAI() ? aiController.get() : new CommandAI();
|
||||
isEnemy = false;
|
||||
|
||||
lowAltitude = true;
|
||||
@@ -2646,7 +2669,7 @@ public class UnitTypes{
|
||||
width = 5f;
|
||||
height = 7f;
|
||||
lifetime = 15f;
|
||||
hitSize = 4f;
|
||||
hitSize = 4f;
|
||||
pierceCap = 3;
|
||||
pierce = true;
|
||||
pierceBuilding = true;
|
||||
@@ -3524,7 +3547,7 @@ public class UnitTypes{
|
||||
trailWidth = 2.2f;
|
||||
trailLength = 7;
|
||||
trailChance = -1f;
|
||||
|
||||
|
||||
collidesAir = false;
|
||||
|
||||
despawnEffect = Fx.none;
|
||||
|
||||
Reference in New Issue
Block a user