diff --git a/core/assets/maps/hidden/serpulo-12.msav b/core/assets/maps/hidden/serpulo-12.msav new file mode 100644 index 0000000000..608b683a87 Binary files /dev/null and b/core/assets/maps/hidden/serpulo-12.msav differ diff --git a/core/assets/maps/hidden/serpulo-173.msav b/core/assets/maps/hidden/serpulo-173.msav new file mode 100644 index 0000000000..f8c2fa0f77 Binary files /dev/null and b/core/assets/maps/hidden/serpulo-173.msav differ diff --git a/core/assets/maps/hidden/serpulo-240.msav b/core/assets/maps/hidden/serpulo-240.msav new file mode 100644 index 0000000000..fafa6580de Binary files /dev/null and b/core/assets/maps/hidden/serpulo-240.msav differ diff --git a/core/assets/maps/hidden/serpulo-241.msav b/core/assets/maps/hidden/serpulo-241.msav new file mode 100644 index 0000000000..357c5d8a6d Binary files /dev/null and b/core/assets/maps/hidden/serpulo-241.msav differ diff --git a/core/assets/maps/hidden/serpulo-243.msav b/core/assets/maps/hidden/serpulo-243.msav new file mode 100644 index 0000000000..e15ff286e5 Binary files /dev/null and b/core/assets/maps/hidden/serpulo-243.msav differ diff --git a/core/assets/maps/hidden/serpulo-25.msav b/core/assets/maps/hidden/serpulo-25.msav new file mode 100644 index 0000000000..1f2a7f5a66 Binary files /dev/null and b/core/assets/maps/hidden/serpulo-25.msav differ diff --git a/core/assets/maps/hidden/serpulo-68.msav b/core/assets/maps/hidden/serpulo-68.msav new file mode 100644 index 0000000000..c5d510f495 Binary files /dev/null and b/core/assets/maps/hidden/serpulo-68.msav differ diff --git a/core/assets/maps/hidden/serpulo-82.msav b/core/assets/maps/hidden/serpulo-82.msav new file mode 100644 index 0000000000..faccd0a6a3 Binary files /dev/null and b/core/assets/maps/hidden/serpulo-82.msav differ diff --git a/core/src/mindustry/content/SectorPresets.java b/core/src/mindustry/content/SectorPresets.java index baaa86ad33..efd3161f7e 100644 --- a/core/src/mindustry/content/SectorPresets.java +++ b/core/src/mindustry/content/SectorPresets.java @@ -163,6 +163,18 @@ public class SectorPresets{ difficulty = 10; }}; + //TODO: for wave survival sectors the capture wave is incorrect + registerHiddenSectors(serpulo, + 68, //Winter Forest by wpx: https://discord.com/channels/391020510269669376/1165421701362897000/1235654407006322700 + 241,//River Bastion by wpx: https://discord.com/channels/391020510269669376/1165421701362897000/1232658317126402050 + 173,//Front Line by stormrider: https://discord.com/channels/391020510269669376/1165421701362897000/1188484967064404061 + 25, //HochuPizzu by wpx: https://discord.com/channels/391020510269669376/1165421701362897000/1170279703056228515 + 12, //Salt Outpost by skeledragon: https://discord.com/channels/391020510269669376/1165421701362897000/1193441915459338361 + 82, //Desert Wastes by xaphiro_: https://discord.com/channels/391020510269669376/1165421701362897000/1226498922898264157 + 243,//Port 012 by skeledragon: https://discord.com/channels/391020510269669376/1165421701362897000/1174884280242012262 + 240 //Cold Grove by wpx: https://discord.com/channels/391020510269669376/1165421701362897000/1230550892718194742 + ); + //endregion //region erekir @@ -186,11 +198,11 @@ public class SectorPresets{ attackAfterWaves = true; }}; - atlas = new SectorPreset("atlas", erekir, 14){{ //TODO random sector, pick a better one + atlas = new SectorPreset("atlas", erekir, 14){{ difficulty = 5; }}; - split = new SectorPreset("split", erekir, 19){{ //TODO random sector, pick a better one + split = new SectorPreset("split", erekir, 19){{ difficulty = 2; }}; @@ -244,4 +256,12 @@ public class SectorPresets{ //endregion } + + static void registerHiddenSectors(Planet planet, int... ids){ + for(int id : ids){ + new SectorPreset("sector-" + planet.name + "-" + id, "hidden/" + planet + "-" + id, planet, id){{ + requireUnlock = false; + }}; + } + } } diff --git a/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java b/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java index ec2eabb29b..3a033d6bef 100644 --- a/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java +++ b/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java @@ -73,7 +73,7 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ @Override public void getLockedText(Sector hovered, StringBuilder out){ - if(hovered.preset == null && hovered.near().contains(Sector::hasBase)){ + if((hovered.preset == null || !hovered.preset.requireUnlock) && hovered.near().contains(Sector::hasBase)){ out.append("[red]").append(Iconc.cancel).append("[]").append(Blocks.coreFoundation.emoji()).append(Core.bundle.get("sector.foundationrequired")); }else{ super.getLockedText(hovered, out); diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index e607481bb1..d793ef887e 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -331,7 +331,7 @@ public class Planet extends UnlockableContent{ sum += 0.88f; } - sector.threat = sector.preset == null ? + sector.threat = sector.preset == null || !sector.preset.requireUnlock ? Math.max(Math.min(sum / 5f, 1.2f), 0.3f) : //low threat sectors are pointless Mathf.clamp(sector.preset.difficulty / 10f); } diff --git a/core/src/mindustry/type/Sector.java b/core/src/mindustry/type/Sector.java index c7573b3c3a..1c2079e289 100644 --- a/core/src/mindustry/type/Sector.java +++ b/core/src/mindustry/type/Sector.java @@ -137,7 +137,7 @@ public class Sector{ } public String name(){ - if(preset != null && info.name == null) return preset.localizedName; + if(preset != null && info.name == null && preset.requireUnlock) return preset.localizedName; //single-sector "planets" use their own name for the sector name. if(info.name == null && planet.sectors.size == 1){ return planet.localizedName; diff --git a/core/src/mindustry/type/SectorPreset.java b/core/src/mindustry/type/SectorPreset.java index 786c58829c..958856633c 100644 --- a/core/src/mindustry/type/SectorPreset.java +++ b/core/src/mindustry/type/SectorPreset.java @@ -2,6 +2,7 @@ package mindustry.type; import arc.*; import arc.func.*; +import arc.util.*; import mindustry.ctype.*; import mindustry.game.*; import mindustry.gen.*; @@ -35,22 +36,27 @@ public class SectorPreset extends UnlockableContent{ public boolean attackAfterWaves = false; public SectorPreset(String name, Planet planet, int sector){ - this(name); + this(name, null, planet, sector); + } + + public SectorPreset(String name, String fileName, Planet planet, int sector){ + this(name, fileName, null); initialize(planet, sector); } /** Internal use only! */ public SectorPreset(String name, LoadedMod mod){ + this(name, null, mod); + } + + /** Internal use only! */ + public SectorPreset(String name, @Nullable String fileName, LoadedMod mod){ super(name); if(mod != null){ this.minfo.mod = mod; } - this.generator = new FileMapGenerator(this.name, this); - } - - /** Internal use only! */ - public SectorPreset(String name){ - this(name, null); + //this.name can change based on the mod being loaded, so if a fileName is not specified, make sure to use the newly assigned this.name + this.generator = new FileMapGenerator(fileName == null ? this.name : fileName, this); } public void initialize(Planet planet, int sector){ diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index d55f1e0c14..da138581e1 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -264,7 +264,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ //announce new presets for(SectorPreset preset : content.sectors()){ - if(preset.unlocked() && !preset.alwaysUnlocked && !preset.sector.info.shown && !preset.sector.hasBase() && preset.planet == state.planet){ + if(preset.unlocked() && !preset.alwaysUnlocked && !preset.sector.info.shown && preset.requireUnlock && !preset.sector.hasBase() && preset.planet == state.planet){ newPresets.add(preset.sector); preset.sector.info.shown = true; preset.sector.saveInfo(); @@ -539,7 +539,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ var preficon = sec.icon(); var icon = sec.isAttacked() ? Fonts.getLargeIcon("warning") : - !sec.hasBase() && sec.preset != null && sec.preset.unlocked() && preficon == null ? + !sec.hasBase() && sec.preset != null && sec.preset.requireUnlock && sec.preset.unlocked() && preficon == null ? Fonts.getLargeIcon("terrain") : sec.preset != null && sec.preset.requireUnlock && sec.preset.locked() && sec.preset.techNode != null && (sec.preset.techNode.parent == null || !sec.preset.techNode.parent.content.locked()) ? Fonts.getLargeIcon("lock") : preficon;