diff --git a/assets/mods/basegame/books/btex.xml b/assets/mods/basegame/books/btex.xml
index 156450023..73a3f3608 100644
--- a/assets/mods/basegame/books/btex.xml
+++ b/assets/mods/basegame/books/btex.xml
@@ -113,7 +113,7 @@
emph — is a special case of the span tag. The resulting text will be red
itemname — is a special case of the span tag used to highlight the name of the ingame item. The resulting text will be blue
targetname — is a special case of the span tag used to highlight the name of an arbitrary target or goals. The resulting text will be green
- code — is a special case of the span tag used to highlight the code element in-line. The resulting text will be maroon and monospaced
+ code — is a special case of the span tag used to highlight the code element in-line. The resulting text will be magenta and monospaced
br — self-closing tag; inserts an anonymous line break
newpage — self-closing tag; inserts an anonymous page break
anonbreak — self-closing tag; inserts a paragraph break in the text. The break will be in a form of a long straight line on the centre of the text. Useful for typesetting novels
diff --git a/assets/mods/basegame/fluid/2.tga b/assets/mods/basegame/fluid/2.tga
new file mode 100644
index 000000000..dc0cf2936
--- /dev/null
+++ b/assets/mods/basegame/fluid/2.tga
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7ff9a295eb071d57af8f9f1a034e75ebf6d8df9ffbf542004c3afb2f799a4fb4
+size 55314
diff --git a/src/net/torvald/btex/BTeXParser.kt b/src/net/torvald/btex/BTeXParser.kt
index 5118850cb..8389d25c7 100644
--- a/src/net/torvald/btex/BTeXParser.kt
+++ b/src/net/torvald/btex/BTeXParser.kt
@@ -2037,8 +2037,8 @@ object BTeXParser {
private const val HEADING_NUM_TITLE_GAP = 9
val ccDefault = TerrarumSansBitmap.toColorCode(0,0,0)
- val ccBucks = TerrarumSansBitmap.toColorCode(5,0,0)
- val ccCode = TerrarumSansBitmap.toColorCode(7,0,0)
+ val ccBucks = TerrarumSansBitmap.toColorCode(10,0,6)
+ val ccCode = TerrarumSansBitmap.toColorCode(12,0,7)
val ccHref = TerrarumSansBitmap.toColorCode(0,3,11)
val ccEmph = TerrarumSansBitmap.toColorCode(0xfc11)
val ccItemName = TerrarumSansBitmap.toColorCode(0xf03b)
diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemBottomlessWaterBucket.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemBottomlessWaterBucket.kt
index b7e0c6f8c..dcb8a47ba 100644
--- a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemBottomlessWaterBucket.kt
+++ b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemBottomlessWaterBucket.kt
@@ -1,6 +1,7 @@
package net.torvald.terrarum.modulebasegame.gameitems
import net.torvald.terrarum.App.printdbg
+import net.torvald.terrarum.BlockCodex
import net.torvald.terrarum.INGAME
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.blockproperties.Fluid
@@ -29,7 +30,12 @@ class ItemBottomlessWaterBucket(originalID: ItemID) : GameItem(originalID) {
override fun startPrimaryUse(actor: ActorWithBody, delta: Float): Long {
val mx = Terrarum.mouseTileX; val my =Terrarum.mouseTileY
- INGAME.world.setFluid(mx, my, Fluid.WATER, 1f)
- return 0L
+ if (!BlockCodex[INGAME.world.getTileFromTerrain(mx, my)].isSolid) {
+ INGAME.world.setFluid(mx, my, Fluid.WATER, 1f)
+ return 0L
+ }
+ else {
+ return -1L
+ }
}
}
\ No newline at end of file
diff --git a/src/net/torvald/terrarum/tests/BTeXTest.kt b/src/net/torvald/terrarum/tests/BTeXTest.kt
index a94777a51..02e5cefe9 100644
--- a/src/net/torvald/terrarum/tests/BTeXTest.kt
+++ b/src/net/torvald/terrarum/tests/BTeXTest.kt
@@ -33,13 +33,13 @@ import kotlin.system.measureTimeMillis
*/
class BTeXTest : ApplicationAdapter() {
-// val filePath = "btex.btxbook"
+ val filePath = "btex.xml"
// val filePath = "btex_ko.xml"
// val filePath = "test.xml"
// val filePath = "literature/en/daniel_defoe_robinson_crusoe.xml"
// val filePath = "literature/ruRU/anton_chekhov_palata_no_6.xml"
// val filePath = "literature/koKR/yisang_nalgae.xml"
- val filePath = "literature/koKR/yisang_geonchukmuhanyukmyeongakche.xml"
+// val filePath = "literature/koKR/yisang_geonchukmuhanyukmyeongakche.xml"
private var serialise = true
diff --git a/src/net/torvald/terrarum/worlddrawer/BlocksDrawer.kt b/src/net/torvald/terrarum/worlddrawer/BlocksDrawer.kt
index aa4f853f4..e7915abe9 100644
--- a/src/net/torvald/terrarum/worlddrawer/BlocksDrawer.kt
+++ b/src/net/torvald/terrarum/worlddrawer/BlocksDrawer.kt
@@ -377,10 +377,7 @@ internal object BlocksDrawer {
val solids = getNearbyTilesInfoTileCnx(x, y)
val notSolid = 15 - solids
val fluids = getNearbyFluidsInfo(x, y)
- val fmask = getFluidMaskStatus(fluids)
-
- val tileToUse = fluidCornerLut[notSolid and fmask] and fluidCornerLut[solids]
-
+ val fluidU = fluids[3].amount
val nearbyFluidType = fluids.asSequence().filter { it.amount >= 0.5f / 16f }.map { it.type }.filter { it.startsWith("fluid@") }.sorted().firstOrNull()
@@ -390,23 +387,48 @@ internal object BlocksDrawer {
val tile = world.getTileFromTerrain(wx, wy)
if (BlockCodex[tile].isSolidForTileCnx && nearbyFluidType != null) {
+ val fmask = getFluidMaskStatus(fluids)
+ var tileToUse = fluidCornerLut[notSolid and fmask] and fluidCornerLut[solids]
+
rawTileNum = world.tileNameToNumberMap[nearbyFluidType]!!
+
+ // upper points and lower points use different maths
+ // in either case, LR fluids are to be checked
+
+ val fluidR = fluids[0].amount
+ val fluidL = fluids[2].amount
+
+ // check LR for down points
+ if (tileToUse and 0b0110 != 0) {
+ if (fluidR < 0.5f / 16f)
+ tileToUse = tileToUse and 0b1101
+ if (fluidL < 0.5f / 16f)
+ tileToUse = tileToUse and 0b1011
+ }
+ // check R
+ else if (tileToUse and 0b0010 != 0) {
+ if (fluidR < 0.5f / 16f )
+ tileToUse = 0
+ }
+ // check L
+ else if (tileToUse and 0b0100 != 0) {
+ if (fluidL < 0.5f / 16f)
+ tileToUse = 0
+ }
+
+
18 + tileToUse
}
else if (rawTileNum == 0)
0
- else if (fluids[3].amount >= 1.5f / 16f)
+ else if (bufferY > 0 && tempRenderTypeBuffer[bufferY - 1, bufferX].let {
+ it.ushr(16) == rawTileNum && it.and(255) == 0
+ })
+ 16
+ else if (bufferY > 0 && tempRenderTypeBuffer[bufferY - 1, bufferX].let {
+ it.ushr(16) == rawTileNum && it.and(255) < 18
+ })
17
- else if (fluids[3].amount >= 0.5f / 16f) {
- //if tile above is fluid tile which use 16, use 17
- if (bufferY > 0 && tempRenderTypeBuffer[bufferY - 1, bufferX].let {
- (it.ushr(16) == rawTileNum && it.and(255) >= 16) ||
- (it.ushr(16) == rawTileNum && it.and(255) == 1)
- })
- 17
- // else, use 16
- else 16
- }
else if (fillThis < 0.5f / 16f)
0
else if (fillThis >= 15.5f / 16f) {
@@ -433,7 +455,7 @@ internal object BlocksDrawer {
15
}
else
- (fillThis * 16f - 0.5f).roundToInt().coerceIn(0, 15)
+ (fillThis * 16f - 0.5f).floorToInt().coerceIn(0, 15)
}
else if (treeLeavesTiles.binarySearch(rawTileNum) >= 0) {
getNearbyTilesInfoTrees(x, y, mode).swizzle8(rawTileNum, hash)
diff --git a/src/net/torvald/terrarum/worlddrawer/LightmapRenderer.kt b/src/net/torvald/terrarum/worlddrawer/LightmapRenderer.kt
index c9853b174..8ce9f3c13 100644
--- a/src/net/torvald/terrarum/worlddrawer/LightmapRenderer.kt
+++ b/src/net/torvald/terrarum/worlddrawer/LightmapRenderer.kt
@@ -91,8 +91,6 @@ object LightmapRenderer {
private var _mapThisTileOpacity = UnsafeCvecArray(LIGHTMAP_WIDTH, LIGHTMAP_HEIGHT)
private var _mapThisTileOpacity2 = UnsafeCvecArray(LIGHTMAP_WIDTH, LIGHTMAP_HEIGHT)
- private const val AIR = Block.AIR
-
const val DRAW_TILE_SIZE: Float = TILE_SIZE / IngameRenderer.lightmapDownsample
internal var for_x_start = 0
@@ -540,7 +538,9 @@ object LightmapRenderer {
}*/
if (_thisFluid.type != Fluid.NULL) {
- _fluidAmountToCol.set(_thisFluid.amount, _thisFluid.amount, _thisFluid.amount, _thisFluid.amount)
+ _thisFluid.amount.coerceAtMost(1f).let {
+ _fluidAmountToCol.set(it, it, it, it)
+ }
_thisTileLuminosity.set(_thisTerrainProp.getLumCol(worldX, worldY))
_thisTileLuminosity.maxAndAssign(_thisFluidProp.lumCol.mul(_fluidAmountToCol))
@@ -649,36 +649,6 @@ object LightmapRenderer {
return if (BlockCodex[world.getTileFromTerrain(x, y)].isSolid) 1.2f else 1f
}
- internal class Ivec4 {
-
- var r = 0
- var g = 0
- var b = 0
- var a = 0
-
- fun broadcast(scalar: Int) {
- r=scalar
- g=scalar
- b=scalar
- a=scalar
- }
- fun add(scalar: Int) {
- r+=scalar
- g+=scalar
- b+=scalar
- a+=scalar
- }
-
- fun lane(index: Int) = when(index) {
- 0 -> r
- 1 -> g
- 2 -> b
- 3 -> a
- else -> throw IndexOutOfBoundsException("Invalid index $index")
- }
-
- }
-
var lightBuffer: Pixmap = Pixmap(64, 64, Pixmap.Format.RGBA8888) // must not be too small
private val colourNull = Cvec(0)