From ee84b8e8f0c51b1e8c38fd89faea5636d898db8c Mon Sep 17 00:00:00 2001 From: Lord_Cambion Date: Wed, 20 May 2026 14:57:06 +0200 Subject: [PATCH] fix: warm cold --- Minecraft.World/AddEdgeLayer.cpp | 18 +++++++++++++----- Minecraft.World/AddEdgeLayer.h | 5 +++++ Minecraft.World/BiomeInitLayer.cpp | 2 +- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/Minecraft.World/AddEdgeLayer.cpp b/Minecraft.World/AddEdgeLayer.cpp index 9f495d21..5c3d536a 100644 --- a/Minecraft.World/AddEdgeLayer.cpp +++ b/Minecraft.World/AddEdgeLayer.cpp @@ -12,8 +12,8 @@ AddEdgeLayer::AddEdgeLayer(int32_t seed, int64_t seedMixup,std::shared_ptrgetArea(xo - 1, yo - 1, w + 2, h + 2); intArray result = IntCache::allocate(w * h); int stride = w + 2; + for (int iy = 0; iy < h; ++iy) { for (int ix = 0; ix < w; ++ix) { + + initRandom(ix + xo, iy + yo); + int center = b[(ix + 1) + (iy + 1) * stride]; if (center == 1) { @@ -34,8 +38,10 @@ intArray AddEdgeLayer::coolWarm(int xo, int yo, int w, int h) int east = b[(ix + 2) + (iy + 1) * stride]; int west = b[(ix + 0) + (iy + 1) * stride]; int south = b[(ix + 1) + (iy + 2) * stride]; + bool hasCold = (north == 3 || east == 3 || west == 3 || south == 3); bool hasIcy = (north == 4 || east == 4 || west == 4 || south == 4); + if (hasCold || hasIcy) center = 2; } @@ -51,11 +57,12 @@ intArray AddEdgeLayer::heatIce(int xo, int yo, int w, int h) intArray b = parent->getArea(xo - 1, yo - 1, w + 2, h + 2); intArray result = IntCache::allocate(w * h); int stride = w + 2; + for (int iy = 0; iy < h; ++iy) { for (int ix = 0; ix < w; ++ix) { - initRandom(ix + xo, iy + yo); + int center = b[(ix + 1) + (iy + 1) * stride]; if (center == 4) { @@ -63,8 +70,10 @@ intArray AddEdgeLayer::heatIce(int xo, int yo, int w, int h) int east = b[(ix + 2) + (iy + 1) * stride]; int west = b[(ix + 0) + (iy + 1) * stride]; int south = b[(ix + 1) + (iy + 2) * stride]; + bool nearWarm = (north == 2 || east == 2 || west == 2 || south == 2); bool nearHot = (north == 1 || east == 1 || west == 1 || south == 1); + if (nearHot || nearWarm) center = 3; } @@ -74,7 +83,6 @@ intArray AddEdgeLayer::heatIce(int xo, int yo, int w, int h) return result; } - intArray AddEdgeLayer::introduceSpecial(int xo, int yo, int w, int h) { intArray b = parent->getArea(xo, yo, w, h); @@ -82,7 +90,7 @@ intArray AddEdgeLayer::introduceSpecial(int xo, int yo, int w, int h) for (int iy = 0; iy < h; ++iy) { - for (int ix = 0; ix < w; ++ix) + for (int ix = 0; ix < w; ++ix) { initRandom(ix + xo, iy + yo); diff --git a/Minecraft.World/AddEdgeLayer.h b/Minecraft.World/AddEdgeLayer.h index afed4872..4f841b23 100644 --- a/Minecraft.World/AddEdgeLayer.h +++ b/Minecraft.World/AddEdgeLayer.h @@ -14,6 +14,11 @@ private: public: + enum LayerMode { + MODE_COOL_WARM = 0, + MODE_HEAT_ICE = 1, + MODE_SPECIAL = 2 + }; AddEdgeLayer(int32_t seed, int64_t seedMixup, std::shared_ptr parent,int mode); virtual ~AddEdgeLayer() {} intArray getArea(int xo, int yo, int w, int h) override; diff --git a/Minecraft.World/BiomeInitLayer.cpp b/Minecraft.World/BiomeInitLayer.cpp index 5db591d8..405f59a4 100644 --- a/Minecraft.World/BiomeInitLayer.cpp +++ b/Minecraft.World/BiomeInitLayer.cpp @@ -163,7 +163,7 @@ intArray BiomeInitLayer::getArea(int xo, int yo, int w, int h) else { - result[x + y * w] = v19; + result[x + y * w] = Biome::mushroomIsland->id; } } }