diff --git a/core/assets-raw/sprites/blocks/environment/deep-tainted-water.png b/core/assets-raw/sprites/blocks/environment/deep-tainted-water.png new file mode 100644 index 0000000000..c072c0ebea Binary files /dev/null and b/core/assets-raw/sprites/blocks/environment/deep-tainted-water.png differ diff --git a/core/assets-raw/sprites/blocks/environment/tainted-water.png b/core/assets-raw/sprites/blocks/environment/tainted-water.png index 330aca5f14..d2686d28b8 100644 Binary files a/core/assets-raw/sprites/blocks/environment/tainted-water.png and b/core/assets-raw/sprites/blocks/environment/tainted-water.png differ diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index f8c8afe91b..7f8bae9f14 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1161,6 +1161,7 @@ block.core-nucleus.name = Core: Nucleus block.deep-water.name = Deep Water block.shallow-water.name = Water block.tainted-water.name = Tainted Water +block.deep-tainted-water.name = Deep Tainted Water block.darksand-tainted-water.name = Dark Sand Tainted Water block.tar.name = Tar block.stone.name = Stone diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index d3a010f7be..2b29514b5b 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -360,47 +360,4 @@ 63349=shallow-water|block-shallow-water-ui 63348=molten-slag|block-molten-slag-ui 63347=crater-stone|block-crater-stone-ui -63346=rhyolite|block-rhyolite-ui -63345=rhyolite-crater|block-rhyolite-crater-ui -63344=regolith|block-regolith-ui -63343=yellow-stone|block-yellow-stone-ui -63342=carbon-stone|block-carbon-stone-ui -63341=ferric-stone|block-ferric-stone-ui -63340=ferric-craters|block-ferric-craters-ui -63339=beryllic-stone|block-beryllic-stone-ui -63338=red-ice|block-red-ice-ui -63337=redmat|block-redmat-ui -63336=bluemat|block-bluemat-ui -63335=regolith-wall|block-regolith-wall-ui -63334=yellow-stone-wall|block-yellow-stone-wall-ui -63333=rhyolite-wall|block-rhyolite-wall-ui -63332=carbon-wall|block-carbon-wall-ui -63331=ferric-stone-wall|block-ferric-stone-wall-ui -63330=beryllic-stone-wall|block-beryllic-stone-wall-ui -63329=red-ice-wall|block-red-ice-wall-ui -63328=redweed|block-redweed-ui -63327=pur-bush|block-pur-bush-ui -63326=yellowcoral|block-yellowcoral-ui -63325=coralchunk|block-coralchunk-ui -63324=carbon-boulder|block-carbon-boulder-ui -63323=ferric-boulder|block-ferric-boulder-ui -63322=beryllic-boulder|block-beryllic-boulder-ui -63321=wall-ore-beryllium|block-wall-ore-beryllium-ui -63320=graphitic-wall|block-graphitic-wall-ui -63319=cell-synthesis-chamber|block-cell-synthesis-chamber-ui -63318=cliff-crusher|block-cliff-crusher-ui -63317=beam-drill|block-beam-drill-ui -63316=deconstructor|block-deconstructor-ui -63315=constructor|block-constructor-ui -63314=large-constructor|block-large-constructor-ui -63313=payload-loader|block-payload-loader-ui -63312=payload-unloader|block-payload-unloader-ui -63311=nuclear-warhead|block-nuclear-warhead-ui -63310=warhead-assembler|block-warhead-assembler-ui -63309=ballistic-silo|block-ballistic-silo-ui -63308=beryllium|item-beryllium-ui -63307=fissile-matter|item-fissile-matter-ui -63306=neoplasm|liquid-neoplasm-ui -63305=dormant-cyst|item-dormant-cyst-ui -63304=scuttler|unit-scuttler-ui -63303=liquid-container|block-liquid-container-ui +63346=deep-tainted-water|block-deep-tainted-water-ui diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index a6879619f1..672d3098ef 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -35,7 +35,7 @@ public class Blocks implements ContentList{ public static Block //environment - air, spawn, cliff, deepwater, water, taintedWater, tar, slag, stone, craters, charr, sand, darksand, dirt, mud, ice, snow, darksandTaintedWater, space, + air, spawn, cliff, deepwater, water, taintedWater, deepTaintedWater, tar, slag, stone, craters, charr, sand, darksand, dirt, mud, ice, snow, darksandTaintedWater, space, dacite, rhyolite, rhyoliteCrater, regolith, yellowStone, redIce, redmat, bluemat, stoneWall, dirtWall, sporeWall, iceWall, daciteWall, sporePine, snowPine, pine, shrubs, whiteTree, whiteTreeDead, sporeCluster, @@ -156,7 +156,19 @@ public class Blocks implements ContentList{ }}; taintedWater = new Floor("tainted-water"){{ - speedMultiplier = 0.17f; + speedMultiplier = 0.5f; + variants = 0; + status = StatusEffects.wet; + statusDuration = 90f; + liquidDrop = Liquids.water; + isLiquid = true; + cacheLayer = CacheLayer.water; + albedo = 0.5f; + attributes.set(Attribute.spores, 0.15f); + }}; + + deepTaintedWater = new Floor("deep-tainted-water"){{ + speedMultiplier = 0.18f; variants = 0; status = StatusEffects.wet; statusDuration = 140f; @@ -384,7 +396,9 @@ public class Blocks implements ContentList{ attributes.set(Attribute.silicate, 1f); }}; - sporeWall = new StaticWall("spore-wall"); + sporeWall = new StaticWall("spore-wall"){{ + taintedWater.asFloor().wall = deepTaintedWater.asFloor().wall = this; + }}; dirtWall = new StaticWall("dirt-wall"); @@ -547,7 +561,7 @@ public class Blocks implements ContentList{ Seq.with(metalFloor, metalFloorDamaged, metalFloor2, metalFloor3, metalFloor4, metalFloor5, darkPanel1, darkPanel2, darkPanel3, darkPanel4, darkPanel5, darkPanel6) .each(b -> b.asFloor().wall = darkMetal); - pebbles = new DoubleOverlayFloor("pebbles"); + pebbles = new OverlayFloor("pebbles"); tendrils = new OverlayFloor("tendrils"); @@ -819,10 +833,10 @@ public class Blocks implements ContentList{ disassembler = new Separator("disassembler"){{ requirements(Category.crafting, with(Items.plastanium, 40, Items.titanium, 100, Items.silicon, 150, Items.thorium, 80)); results = with( - Items.sand, 4, - Items.graphite, 2, - Items.titanium, 2, - Items.thorium, 2 + Items.sand, 2, + Items.graphite, 1, + Items.titanium, 1, + Items.thorium, 1 ); hasPower = true; craftTime = 15f; diff --git a/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java b/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java index 112838d405..b00ba5d3a6 100644 --- a/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java +++ b/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java @@ -23,6 +23,7 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ BaseGenerator basegen = new BaseGenerator(); float scl = 5f; float waterOffset = 0.07f; + boolean genLakes = false; Block[][] arr = { @@ -33,11 +34,11 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ {Blocks.deepwater, Blocks.water, Blocks.sandWater, Blocks.sand, Blocks.salt, Blocks.sand, Blocks.sand, Blocks.basalt, Blocks.snow, Blocks.snow, Blocks.snow, Blocks.snow, Blocks.ice}, {Blocks.deepwater, Blocks.water, Blocks.sandWater, Blocks.sand, Blocks.sand, Blocks.sand, Blocks.moss, Blocks.iceSnow, Blocks.snow, Blocks.snow, Blocks.ice, Blocks.snow, Blocks.ice}, {Blocks.deepwater, Blocks.sandWater, Blocks.sand, Blocks.sand, Blocks.moss, Blocks.moss, Blocks.snow, Blocks.basalt, Blocks.basalt, Blocks.basalt, Blocks.ice, Blocks.snow, Blocks.ice}, - {Blocks.taintedWater, Blocks.darksandTaintedWater, Blocks.darksand, Blocks.darksand, Blocks.basalt, Blocks.moss, Blocks.basalt, Blocks.hotrock, Blocks.basalt, Blocks.ice, Blocks.snow, Blocks.ice, Blocks.ice}, + {Blocks.deepTaintedWater, Blocks.darksandTaintedWater, Blocks.darksand, Blocks.darksand, Blocks.basalt, Blocks.moss, Blocks.basalt, Blocks.hotrock, Blocks.basalt, Blocks.ice, Blocks.snow, Blocks.ice, Blocks.ice}, {Blocks.darksandWater, Blocks.darksand, Blocks.darksand, Blocks.darksand, Blocks.moss, Blocks.sporeMoss, Blocks.snow, Blocks.basalt, Blocks.basalt, Blocks.ice, Blocks.snow, Blocks.ice, Blocks.ice}, {Blocks.darksandWater, Blocks.darksand, Blocks.darksand, Blocks.sporeMoss, Blocks.ice, Blocks.ice, Blocks.snow, Blocks.snow, Blocks.snow, Blocks.snow, Blocks.ice, Blocks.ice, Blocks.ice}, - {Blocks.taintedWater, Blocks.darksandTaintedWater, Blocks.darksand, Blocks.sporeMoss, Blocks.sporeMoss, Blocks.ice, Blocks.ice, Blocks.snow, Blocks.snow, Blocks.ice, Blocks.ice, Blocks.ice, Blocks.ice}, - {Blocks.darksandTaintedWater, Blocks.darksandTaintedWater, Blocks.darksand, Blocks.sporeMoss, Blocks.moss, Blocks.sporeMoss, Blocks.iceSnow, Blocks.snow, Blocks.ice, Blocks.ice, Blocks.ice, Blocks.ice, Blocks.ice}, + {Blocks.deepTaintedWater, Blocks.darksandTaintedWater, Blocks.darksand, Blocks.sporeMoss, Blocks.sporeMoss, Blocks.ice, Blocks.ice, Blocks.snow, Blocks.snow, Blocks.ice, Blocks.ice, Blocks.ice, Blocks.ice}, + {Blocks.taintedWater, Blocks.darksandTaintedWater, Blocks.darksand, Blocks.sporeMoss, Blocks.moss, Blocks.sporeMoss, Blocks.iceSnow, Blocks.snow, Blocks.ice, Blocks.ice, Blocks.ice, Blocks.ice, Blocks.ice}, {Blocks.darksandWater, Blocks.darksand, Blocks.snow, Blocks.ice, Blocks.iceSnow, Blocks.snow, Blocks.snow, Blocks.snow, Blocks.ice, Blocks.ice, Blocks.ice, Blocks.ice, Blocks.ice} }; @@ -255,10 +256,35 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ for(Room room : roomseq){ spawn.connect(room); } + Room fspawn = spawn; cells(1); distort(10f, 6f); + //rivers + pass((x, y) -> { + if(block.solid) return; + + Vec3 v = sector.rect.project(x, y); + + float rr = Simplex.noise2d(sector.id, (float)2, 0.6f, 1f / 7f, x, y) * 0.1f; + float value = Ridged.noise3d(2, v.x, v.y, v.z, 1, 1f / 53f) + rr - rawHeight(v) * 0f; + float rrscl = rr * 44 - 2; + + if(value > 0.12f && !Mathf.within(x, y, fspawn.x, fspawn.y, 12 + rrscl)){ + boolean deep = value > 0.12f + 0.1f && !Mathf.within(x, y, fspawn.x, fspawn.y, 15 + rrscl); + boolean spore = floor != Blocks.sand && floor != Blocks.salt; + //do not place rivers on ice, they're frozen + //ignore pre-existing liquids + if(!(floor == Blocks.ice || floor == Blocks.iceSnow || floor == Blocks.snow || floor.asFloor().isLiquid)){ + floor = spore ? + (deep ? Blocks.taintedWater : Blocks.darksandTaintedWater) : + (deep ? Blocks.water : + (floor == Blocks.sand ? Blocks.sandWater : Blocks.darksandWater)); + } + } + }); + Seq ores = Seq.with(Blocks.oreCopper, Blocks.oreLead); float poles = Math.abs(sector.tile.v.y); float nmag = 0.5f; @@ -326,7 +352,6 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ if(Math.abs(0.5f - noise(x - 40, y, 2, 0.7, 80)) > 0.25f && Math.abs(0.5f - noise(x, y + sector.id*10, 1, 1, 60)) > 0.41f && !(roomseq.contains(r -> Mathf.within(x, y, r.x, r.y, 15)))){ floor = Blocks.tar; - ore = Blocks.air; } } @@ -347,7 +372,7 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ floor = Blocks.magmarock; } } - }else if(floor != Blocks.basalt && floor != Blocks.ice && floor.asFloor().hasSurface()){ + }else if(genLakes && floor != Blocks.basalt && floor != Blocks.ice && floor.asFloor().hasSurface()){ float noise = noise(x + 782, y, 5, 0.75f, 260f, 1f); if(noise > 0.67f && !roomseq.contains(e -> Mathf.within(x, y, e.x, e.y, 14))){ if(noise > 0.72f){ @@ -355,7 +380,6 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ }else{ floor = (floor == Blocks.sand ? floor : Blocks.darksand); } - ore = Blocks.air; } } @@ -470,6 +494,13 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ } } + //remove invalid ores + for(Tile tile : tiles){ + if(tile.overlay().needsSurface && !tile.floor().hasSurface()){ + tile.setOverlay(Blocks.air); + } + } + Schematics.placeLaunchLoadout(spawn.x, spawn.y); for(Room espawn : enemies){ diff --git a/core/src/mindustry/ui/dialogs/ModsDialog.java b/core/src/mindustry/ui/dialogs/ModsDialog.java index 5c5d86634e..d31aa1694c 100644 --- a/core/src/mindustry/ui/dialogs/ModsDialog.java +++ b/core/src/mindustry/ui/dialogs/ModsDialog.java @@ -368,7 +368,7 @@ public class ModsDialog extends BaseDialog{ Seq all = Seq.with(content.getContentMap()).flatten().select(c -> c.minfo.mod == mod && c instanceof UnlockableContent).as(); if(all.any()){ dialog.cont.row(); - dialog.cont.button( "@mods.viewcontent", Icon.book, () -> { + dialog.cont.button("@mods.viewcontent", Icon.book, () -> { BaseDialog d = new BaseDialog(mod.meta.displayName()); d.cont.pane(cs -> { int i = 0; diff --git a/core/src/mindustry/world/blocks/environment/AirBlock.java b/core/src/mindustry/world/blocks/environment/AirBlock.java index 4ecd1667df..b100bbc4ef 100644 --- a/core/src/mindustry/world/blocks/environment/AirBlock.java +++ b/core/src/mindustry/world/blocks/environment/AirBlock.java @@ -13,6 +13,7 @@ public class AirBlock extends Floor{ hasShadow = false; useColor = false; wall = this; + needsSurface = false; } @Override diff --git a/core/src/mindustry/world/blocks/environment/DoubleOverlayFloor.java b/core/src/mindustry/world/blocks/environment/DoubleOverlayFloor.java index c26107caa1..5d6af64871 100644 --- a/core/src/mindustry/world/blocks/environment/DoubleOverlayFloor.java +++ b/core/src/mindustry/world/blocks/environment/DoubleOverlayFloor.java @@ -1,20 +1,10 @@ package mindustry.world.blocks.environment; -import arc.graphics.g2d.*; -import arc.math.*; -import mindustry.world.*; - +/** @deprecated pointless, just use your own sprite instead */ +@Deprecated public class DoubleOverlayFloor extends OverlayFloor{ public DoubleOverlayFloor(String name){ super(name); } - - @Override - public void drawBase(Tile tile){ - Draw.colorl(0.4f); - Draw.rect(variantRegions[Mathf.randomSeed(tile.pos(), 0, Math.max(0, variantRegions.length - 1))], tile.worldx(), tile.worldy() - 0.75f); - Draw.color(); - Draw.rect(variantRegions[Mathf.randomSeed(tile.pos(), 0, Math.max(0, variantRegions.length - 1))], tile.worldx(), tile.worldy()); - } } diff --git a/core/src/mindustry/world/blocks/power/ItemLiquidGenerator.java b/core/src/mindustry/world/blocks/power/ItemLiquidGenerator.java index a8462502ea..7ef511d054 100644 --- a/core/src/mindustry/world/blocks/power/ItemLiquidGenerator.java +++ b/core/src/mindustry/world/blocks/power/ItemLiquidGenerator.java @@ -128,8 +128,9 @@ public class ItemLiquidGenerator extends PowerGenerator{ liquids.remove(liquid, used * power.graph.getUsageFraction()); productionEfficiency = baseLiquidEfficiency * used / maximumPossible; - if(used > 0.001f && Mathf.chance(0.05 * delta())){ + if(used > 0.001f && (generateTime -= delta()) <= 0f){ generateEffect.at(x + Mathf.range(generateEffectRnd), y + Mathf.range(generateEffectRnd)); + generateTime = 1f; } }else if(hasItems){ // No liquids accepted or none supplied, try using items if accepted diff --git a/core/src/mindustry/world/meta/StatValues.java b/core/src/mindustry/world/meta/StatValues.java index a5ff702798..ba07d8e19d 100644 --- a/core/src/mindustry/world/meta/StatValues.java +++ b/core/src/mindustry/world/meta/StatValues.java @@ -130,7 +130,7 @@ public class StatValues{ if(state.isGame()){ var blocks = Vars.content.blocks() - .select(block -> (!checkFloors || block instanceof Floor) && indexer.isBlockPresent(block) && block.attributes.get(attr) != 0 && !((block instanceof Floor f && f.isLiquid) && !floating)) + .select(block -> (!checkFloors || block instanceof Floor) && indexer.isBlockPresent(block) && block.attributes.get(attr) != 0 && !((block instanceof Floor f && f.isDeep()) && !floating)) .as().with(s -> s.sort(f -> f.attributes.get(attr))); if(blocks.any()){ diff --git a/servers_v7.json b/servers_v7.json index b7dbd2b066..2e7da6b094 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -5,7 +5,7 @@ }, { "name": "C.A.M.S.", - "address": ["baseduser.eu.org:6569", "v7.thedimas.pp.ua", "mindustry.me:7000"] + "address": ["baseduser.eu.org:6569", "v7.thedimas.pp.ua", "yeeth.mindustry.me:7000", "yeeth.mindustry.me:4000", "yeeth.mindustry.me:2000", "yeeth.mindustry.me:3000"] }, { "name": "hexpvp.ml", @@ -13,7 +13,7 @@ }, { "name": "Omega", - "address": ["yeet.mindustry.me", "yeeth.mindustry.me:2006", "yeeth.mindustry.me:2003","yeeth.mindustry.me:2002", "yeeth.mindustry.me:2001", "yeeth.mindustry.me:2007", "yeeth.mindustry.me:2005"] + "address": ["yeeth.mindustry.me", "yeeth.mindustry.me:2006", "yeeth.mindustry.me:2003","yeeth.mindustry.me:2002", "yeeth.mindustry.me:2001", "yeeth.mindustry.me:2007", "yeeth.mindustry.me:2005"] }, { "name": "MeowLand",