From cada008fcae661631453fe567d7bc38bd93e01b5 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Sat, 4 Nov 2023 18:44:10 +0900 Subject: [PATCH] randomised tiling fixes --- assets/mods/basegame/blocks/16.tga | 2 +- assets/mods/basegame/blocks/blocks.csv | 2 +- .../terrarum/worlddrawer/BlocksDrawer.kt | 21 +++++++++++++++++-- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/assets/mods/basegame/blocks/16.tga b/assets/mods/basegame/blocks/16.tga index 261510952..cd485cfc5 100644 --- a/assets/mods/basegame/blocks/16.tga +++ b/assets/mods/basegame/blocks/16.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5060816006d7d7115877f16206493e228be92c2b87ef520ffbf004cdd0544187 +oid sha256:339ef05eb7b69b1c721f83a31b6792e3ae38c544eeca5e979988f608d38a521b size 50194 diff --git a/assets/mods/basegame/blocks/blocks.csv b/assets/mods/basegame/blocks/blocks.csv index ed3dd7b91..608949711 100644 --- a/assets/mods/basegame/blocks/blocks.csv +++ b/assets/mods/basegame/blocks/blocks.csv @@ -65,7 +65,7 @@ "192";"176";"176";"BLOCK_TORCH";"0.0312";"0.0312";"0.0312";"0.0312";"1";"800";"FXTR";"0";"0";"N/A";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"LIGHT,UNLIT,INTERNAL" #"193";"177";"177";"BLOCK_TORCH_FROST";"0.0312";"0.0312";"0.0312";"0.0312";"1";"1100";"FXTR";"0";"0";"N/A";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"LIGHT,UNLIT,INTERNAL" "208";"208";"208";"BLOCK_ILLUMINATOR_WHITE";"0.0312";"0.0312";"0.0312";"0.0312";"1";"2500";"GLAS";"1";"1";"N/A";"0";"0";"16";"0.9270";"0.9414";"0.8519";"0.0000";"N/A";"N/A";"0.0";"LIGHT,NORANDTILE" -"209";"209";"209";"BLOCK_ILLUMINATOR_YELLOW";"0.0312";"0.0312";"0.0312";"0.0312";"1";"2500";"GLAS";"1";"1";"N/A";"0";"0";"16";"1.0000";"0.8408";"0.0000";"0.0000";"N/A";"N/A";"0.0";"LIGHT" +"209";"209";"209";"BLOCK_ILLUMINATOR_YELLOW";"0.0312";"0.0312";"0.0312";"0.0312";"1";"2500";"GLAS";"1";"1";"N/A";"0";"0";"16";"1.0000";"0.8408";"0.0000";"0.0000";"N/A";"N/A";"0.0";"LIGHT,NORANDTILE" "210";"210";"210";"BLOCK_ILLUMINATOR_ORANGE";"0.0312";"0.0312";"0.0312";"0.0312";"1";"2500";"GLAS";"1";"1";"N/A";"0";"0";"16";"1.0000";"0.5294";"0.0000";"0.0000";"N/A";"N/A";"0.0";"LIGHT,NORANDTILE" "211";"211";"211";"BLOCK_ILLUMINATOR_RED";"0.0312";"0.0312";"0.0312";"0.0312";"1";"2500";"GLAS";"1";"1";"N/A";"0";"0";"16";"0.9188";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"LIGHT,NORANDTILE" "212";"212";"212";"BLOCK_ILLUMINATOR_FUCHSIA";"0.0312";"0.0312";"0.0312";"0.0312";"1";"2500";"GLAS";"1";"1";"N/A";"0";"0";"16";"0.9188";"0.0000";"0.7156";"0.0000";"N/A";"N/A";"0.0";"LIGHT,NORANDTILE" diff --git a/src/net/torvald/terrarum/worlddrawer/BlocksDrawer.kt b/src/net/torvald/terrarum/worlddrawer/BlocksDrawer.kt index bb6748c8a..a3ecbd401 100644 --- a/src/net/torvald/terrarum/worlddrawer/BlocksDrawer.kt +++ b/src/net/torvald/terrarum/worlddrawer/BlocksDrawer.kt @@ -307,7 +307,13 @@ internal object BlocksDrawer { private fun getHashCoord(x: Int, y: Int, mod: Int) = - (XXHash64.hash((y.toLong().shl(32) or x.toLong().and(0xFFFFFFFF)).toBig64(), mod.toLong()).and(0x7FFFFFFFFFFFFFFFL) % mod).toInt() + (XXHash64.hash( + ( + y.fmod(world.height).toLong().shl(32) or + x.fmod(world.width).toLong().and(0xFFFFFFFF) + ).toBig64(), mod.toLong() + ).and(0x7FFFFFFFFFFFFFFFL) % mod + ).toInt() /** @@ -374,9 +380,10 @@ internal object BlocksDrawer { } else if (platformTiles.binarySearch(thisTile) >= 0) { hash %= 2 - getNearbyTilesInfoPlatform(x, y)//.swizzleH2(thisTile, hash) + getNearbyTilesInfoPlatform(x, y).swizzleH2(thisTile, hash) } else if (wallStickerTiles.binarySearch(thisTile) >= 0) { + hash = 0 getNearbyTilesInfoWallSticker(x, y) } else if (connectMutualTiles.binarySearch(thisTile) >= 0) { @@ -456,6 +463,16 @@ internal object BlocksDrawer { return ret } + + private val h2lut = arrayOf( + arrayOf(0,1,2,3,4,5,6,7), + arrayOf(0,2,1,5,6,3,4,7), + ) + + private fun Int.swizzleH2(tile: Int, hash: Int): Int { + return h2lut[hash][this] + } + private fun getNearbyTilesPos(x: Int, y: Int): Array { return arrayOf( Point2i(x + 1, y),