Core fill items rule

This commit is contained in:
Anuken
2025-05-07 15:47:57 -04:00
parent 0d1bc2ada1
commit f0257790b8
5 changed files with 15 additions and 7 deletions

View File

@@ -1429,7 +1429,7 @@ public class ControlPathfinder implements Runnable{
private static boolean nearPassable(int initialCost, int team, PathCost cost, int pos){
int amount = cost.getCost(team, pathfinder.tiles[pos]);
return amount != impassable && amount < Math.max(50, initialCost + 1);
return amount != impassable && amount < Math.min(Math.max(50, initialCost + 1), solidCap);
}
private static boolean solid(int team, PathCost type, int x, int y){

View File

@@ -3,6 +3,7 @@ package mindustry.core;
import arc.*;
import arc.math.*;
import arc.util.*;
import mindustry.*;
import mindustry.ai.*;
import mindustry.annotations.Annotations.*;
import mindustry.core.GameState.*;
@@ -133,6 +134,7 @@ public class Logic implements ApplicationListener{
state.rules.coreIncinerates = true;
state.rules.allowEditWorldProcessors = false;
state.rules.waveTeam.rules().infiniteResources = true;
state.rules.waveTeam.rules().fillItems = true;
state.rules.waveTeam.rules().buildSpeedMultiplier *= state.getPlanet().enemyBuildSpeedMultiplier;
}
@@ -438,12 +440,6 @@ public class Logic implements ApplicationListener{
}
if(state.isCampaign()){
//always fill enemy core with items
if(state.rules.waveTeam.cores().size > 0){
var core = state.rules.waveTeam.core();
content.items().each(i -> core.items.set(i, core.getMaximumAccepted(i)));
}
state.rules.sector.info.update();
}
@@ -459,6 +455,14 @@ public class Logic implements ApplicationListener{
updateWeather();
for(TeamData data : state.teams.getActive()){
if(data.team.rules().fillItems && data.cores.size > 0){
var core = data.cores.first();
content.items().each(i -> {
if(i.isOnPlanet(Vars.state.getPlanet())){
core.items.set(i, core.getMaximumAccepted(i));
}
});
}
//does not work on PvP so built-in attack maps can have it on by default without issues
if(data.team.rules().buildAi && !state.rules.pvp){
if(data.buildAi == null) data.buildAi = new BaseBuilderAI(data);

View File

@@ -299,6 +299,8 @@ public class Rules{
public boolean aiCoreSpawn = true;
/** If true, blocks don't require power or resources. */
public boolean cheat;
/** If true, the core is always filled to capacity with all items. */
public boolean fillItems;
/** If true, resources are not consumed when building. */
public boolean infiniteResources;
/** If true, this team has infinite unit ammo. */

View File

@@ -313,6 +313,7 @@ public class CustomRulesDialog extends BaseDialog{
number("@rules.extracorebuildradius", f -> teams.extraCoreBuildRadius = f * tilesize, () -> Math.min(teams.extraCoreBuildRadius / tilesize, 200), () -> !rules.polygonCoreProtection);
check("@rules.infiniteresources", b -> teams.infiniteResources = b, () -> teams.infiniteResources);
check("@rules.fillitems", b -> teams.fillItems = b, () -> teams.fillItems);
number("@rules.buildspeedmultiplier", f -> teams.buildSpeedMultiplier = f, () -> teams.buildSpeedMultiplier, 0.001f, 50f);
number("@rules.unitdamagemultiplier", f -> teams.unitDamageMultiplier = f, () -> teams.unitDamageMultiplier);