More concentrated enemy bases

This commit is contained in:
Anuken
2020-11-22 14:45:43 -05:00
parent bf31a8c06b
commit 455e3188c4
7 changed files with 46 additions and 10 deletions

View File

@@ -805,7 +805,6 @@ setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
setting.sensitivity.name = Controller Sensitivity
setting.saveinterval.name = Save Interval
setting.seconds = {0} seconds
setting.blockselecttimeout.name = Block Select Timeout
setting.milliseconds = {0} milliseconds
setting.fullscreen.name = Fullscreen
setting.borderlesswindow.name = Borderless Window[lightgray] (restart may be required)

View File

@@ -215,7 +215,7 @@ public class Universe{
//queue random invasions
if(!sector.isAttacked() && turn > invasionGracePeriod && sector.info.hasSpawns){
//invasion chance depends on # of nearby bases
if(Mathf.chance(baseInvasionChance * sector.near().count(Sector::hasEnemyBase))){
if(Mathf.chance(baseInvasionChance * Math.min(sector.near().count(Sector::hasEnemyBase), 1))){
int waveMax = Math.max(sector.info.winWave, sector.isBeingPlayed() ? state.wave : sector.info.wave + sector.info.wavesPassed) + Mathf.random(2, 5) * 5;
//assign invasion-related things

View File

@@ -10,7 +10,9 @@ import mindustry.ai.*;
import mindustry.ai.BaseRegistry.*;
import mindustry.content.*;
import mindustry.game.*;
import mindustry.graphics.g3d.PlanetGrid.*;
import mindustry.maps.generators.*;
import mindustry.type.*;
import mindustry.world.*;
import static mindustry.Vars.*;
@@ -59,6 +61,43 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{
return (Mathf.pow((float)noise.octaveNoise3D(7, 0.5f, 1f/3f, position.x, position.y, position.z), 2.3f) + waterOffset) / (1f + waterOffset);
}
@Override
public void generateSector(Sector sector){
//these always have bases
if(sector.id == 154 || sector.id == 0){
sector.generateEnemyBase = true;
return;
}
Ptile tile = sector.tile;
boolean any = false;
float poles = Math.abs(tile.v.y);
float noise = Noise.snoise3(tile.v.x, tile.v.y, tile.v.z, 0.001f, 0.58f);
if(noise + poles/7 > 0.12 && poles > 0.23){
any = true;
}
if(noise < 0.16){
for(Ptile other : tile.tiles){
var osec = sector.planet.getSector(other);
//no sectors near start sector!
if(
osec.id == sector.planet.startSector || //near starting sector
osec.generateEnemyBase && poles < 0.84 || //near other base
(sector.preset != null && noise < 0.11) //near preset
){
return;
}
}
}
sector.generateEnemyBase = any;
}
@Override
public float getHeight(Vec3 position){
float height = rawHeight(position);
@@ -158,7 +197,7 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{
//check positions on the map to place the player spawn. this needs to be in the corner of the map
Room spawn = null;
Seq<Room> enemies = new Seq<>();
int enemySpawns = rand.chance(0.3) ? 2 : 1;
int enemySpawns = rand.random(1, Math.max((int)(sector.threat * 4), 1));
int offset = rand.nextInt(360);
float length = width/2.55f - rand.random(13, 23);
int angleStep = 5;
@@ -237,7 +276,7 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{
FloatSeq frequencies = new FloatSeq();
for(int i = 0; i < ores.size; i++){
frequencies.add(rand.random(-0.09f, 0.01f) - i * 0.01f);
frequencies.add(rand.random(-0.1f, 0.01f) - i * 0.01f + poles * 0.04f);
}
pass((x, y) -> {

View File

@@ -830,7 +830,7 @@ public class Mods implements Loadable{
/** Mod metadata information.*/
public static class ModMeta{
public String name, displayName, author, description, version, main, minGameVersion = "0";
public String name, displayName, author, description, version, main, minGameVersion = "0", repo;
public Seq<String> dependencies = Seq.with();
/** Hidden mods are only server-side or client-side, and do not support adding new content. */
public boolean hidden;

View File

@@ -314,8 +314,6 @@ public class SettingsMenuDialog extends SettingsDialog{
game.sliderPref("saveinterval", 60, 10, 5 * 120, 10, i -> Core.bundle.format("setting.seconds", i));
if(!mobile){
game.sliderPref("blockselecttimeout", 750, 0, 2000, 50, i -> Core.bundle.format("setting.milliseconds", i));
game.checkPref("crashreport", true);
}

View File

@@ -145,7 +145,7 @@ public class PlacementFragment extends Fragment{
break;
}
}
}else if(blockSelectEnd || Time.timeSinceMillis(blockSelectSeqMillis) > Core.settings.getInt("blockselecttimeout")){ //1st number of combo, select category
}else if(blockSelectEnd || Time.timeSinceMillis(blockSelectSeqMillis) > 750){ //1st number of combo, select category
//select only visible categories
if(!getUnlockedByCategory(Category.all[i]).isEmpty()){
currentCategory = Category.all[i];

View File

@@ -46,7 +46,7 @@ public class ItemTurret extends Turret{
public void build(Building tile, Table table){
MultiReqImage image = new MultiReqImage();
content.items().each(i -> filter.get(i) && i.unlockedNow(), item -> image.add(new ReqImage(new ItemImage(item.icon(Cicon.medium)),
() -> tile != null && !((ItemTurretBuild)tile).ammo.isEmpty() && ((ItemEntry)((ItemTurretBuild)tile).ammo.peek()).item == item)));
() -> tile instanceof ItemTurretBuild it && !it.ammo.isEmpty() && ((ItemEntry)it.ammo.peek()).item == item)));
table.add(image).size(8 * 4);
}
@@ -54,7 +54,7 @@ public class ItemTurret extends Turret{
@Override
public boolean valid(Building entity){
//valid when there's any ammo in the turret
return !((ItemTurretBuild)entity).ammo.isEmpty();
return entity instanceof ItemTurretBuild it && !it.ammo.isEmpty();
}
@Override