New system for Serpulo sector loss (WIP)

This commit is contained in:
Anuken
2025-09-07 14:14:24 -04:00
parent a20cfcf9ea
commit 8cb528264b
20 changed files with 176 additions and 98 deletions

View File

@@ -483,8 +483,8 @@ public class SectorDamage{
Tile other = tiles.getn(cx, cy);
float resultDamage = currDamage;
//damage the tile if it's not friendly
if(other.build != null && other.team() != state.rules.waveTeam){
//damage the tile if it's the player team (derelict blocks get ignored)
if(other.build != null && other.team() == state.rules.defaultTeam){
resultDamage -= other.build.health();
other.build.health -= currDamage;

View File

@@ -29,7 +29,7 @@ public abstract class BasicGenerator implements WorldGenerator{
public Schematic defaultLoadout = Loadouts.basicShard;
@Override
public void generate(Tiles tiles){
public void generate(Tiles tiles, WorldParams params){
this.tiles = tiles;
this.width = tiles.width;
this.height = tiles.height;

View File

@@ -13,14 +13,14 @@ public class BlankPlanetGenerator extends PlanetGenerator{
}
@Override
public void generate(Tiles tiles, Sector sec, int seed){
public void generate(Tiles tiles, Sector sec, WorldParams params){
this.tiles = tiles;
this.sector = sec;
this.rand.setSeed(sec.id + seed + baseSeed);
this.rand.setSeed(sec.id + params.seedOffset + baseSeed);
tiles.fill();
generate(tiles);
generate(tiles, params);
}
}

View File

@@ -9,6 +9,7 @@ import mindustry.maps.*;
import mindustry.type.*;
import mindustry.world.*;
import mindustry.world.blocks.storage.*;
import mindustry.world.blocks.storage.CoreBlock.*;
import static mindustry.Vars.*;
@@ -38,7 +39,7 @@ public class FileMapGenerator implements WorldGenerator{
}
@Override
public void generate(Tiles tiles){
public void generate(Tiles tiles, WorldParams params){
if(map == null) throw new RuntimeException("Generator has null map, cannot be used.");
Sector sector = state.rules.sector;
@@ -72,6 +73,9 @@ public class FileMapGenerator implements WorldGenerator{
boolean anyCores = false;
//TODO: unsure if indexer even works at this stage
Block coreTypeToUse = state.rules.defaultTeam.cores().isEmpty() ? sector.planet.defaultCore : state.rules.defaultTeam.core().block;
for(Tile tile : tiles){
if(tile.overlay() == Blocks.spawn){
@@ -83,8 +87,26 @@ public class FileMapGenerator implements WorldGenerator{
});
}
if(tile.isCenter() && tile.block() instanceof CoreBlock && tile.team() == state.rules.defaultTeam && !anyCores){
if(state.rules.sector != null && state.rules.sector.allowLaunchLoadout()){
if(params.corePositionOverride != 0 && sector != null){
if(tile.pos() == params.corePositionOverride){
if(sector.allowLaunchLoadout()){
Schematics.placeLaunchLoadout(tile.x, tile.y);
}else{
//if there's an override and no loadout schematic is allowed, try to place a fitting core instead.
tile.setBlock(coreTypeToUse, state.rules.defaultTeam, 0);
}
anyCores = true;
if(preset.addStartingItems || !preset.planet.allowLaunchLoadout){
tile.build.items.clear();
tile.build.items.add(state.rules.loadout);
}
}else if(tile.build instanceof CoreBuild && tile.build.pos() != params.corePositionOverride){
//other cores placed must be cleared; they have been overridden
tile.remove();
}
}else if(tile.isCenter() && tile.block() instanceof CoreBlock && tile.team() == state.rules.defaultTeam && !anyCores){
if(sector != null && sector.allowLaunchLoadout()){
Schematics.placeLaunchLoadout(tile.x, tile.y);
}
anyCores = true;

View File

@@ -178,13 +178,13 @@ public abstract class PlanetGenerator extends BasicGenerator implements HexMeshe
return res % 2 == 0 ? res : res + 1;
}
public void generate(Tiles tiles, Sector sec, int seed){
public void generate(Tiles tiles, Sector sec, WorldParams params){
this.tiles = tiles;
this.seed = seed + baseSeed;
this.seed = params.seedOffset + baseSeed;
this.sector = sec;
this.width = tiles.width;
this.height = tiles.height;
this.rand.setSeed(sec.id + seed + baseSeed);
this.rand.setSeed(sec.id + params.seedOffset + baseSeed);
TileGen gen = new TileGen();
for(int y = 0; y < height; y++){
@@ -197,6 +197,6 @@ public abstract class PlanetGenerator extends BasicGenerator implements HexMeshe
}
}
generate(tiles);
generate(tiles, params);
}
}

View File

@@ -3,7 +3,7 @@ package mindustry.maps.generators;
import mindustry.world.*;
public interface WorldGenerator{
void generate(Tiles tiles);
void generate(Tiles tiles, WorldParams params);
/** Do not modify tiles here. This is only for specialized configuration. */
default void postGenerate(Tiles tiles){}