From 54061f64a839eb9ff493f102b4d962eb76cdb58c Mon Sep 17 00:00:00 2001 From: minjaesong Date: Thu, 25 Jan 2024 04:38:26 +0900 Subject: [PATCH] fix: axe not cutting large trees well --- assets/mods/basegame/blocks/blocks.csv | 4 +- .../terrarum/modulebasegame/TerrarumIngame.kt | 39 ++++++++++--------- .../modulebasegame/gameitems/AxeCore.kt | 38 ++++++++++++++++-- .../terrarum/worlddrawer/BlocksDrawer.kt | 2 +- 4 files changed, 58 insertions(+), 25 deletions(-) diff --git a/assets/mods/basegame/blocks/blocks.csv b/assets/mods/basegame/blocks/blocks.csv index 4522c3e79..4c42b38e1 100644 --- a/assets/mods/basegame/blocks/blocks.csv +++ b/assets/mods/basegame/blocks/blocks.csv @@ -1,6 +1,6 @@ "id";"drop";"spawn";"name";"shdr";"shdg";"shdb";"shduv";"str";"dsty";"mate";"solid";"wall";"grav";"dlfn";"fv";"fr";"lumr";"lumg";"lumb";"lumuv";"colour";"vscs";"refl";"tags" -"0";"0";"0";"BLOCK_AIR";"0.0312";"0.0312";"0.0312";"0.0312";"1";"1";"AIIR";"0";"1";"N/A";"0";"0";"4";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"INCONSEQUENTIAL,AIR,NORANDTILE" -"1";"0";"0";"BLOCK_UPDATE";"0.0312";"0.0312";"0.0312";"0.0312";"1";"1";"AIIR";"0";"1";"N/A";"0";"0";"4";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"INTERNAL,NORANDTILE" +"0";"N/A";"N/A";"BLOCK_AIR";"0.0312";"0.0312";"0.0312";"0.0312";"1";"1";"AIIR";"0";"1";"N/A";"0";"0";"4";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"INCONSEQUENTIAL,AIR,NORANDTILE" +"1";"N/A";"N/A";"BLOCK_UPDATE";"0.0312";"0.0312";"0.0312";"0.0312";"1";"1";"AIIR";"0";"1";"N/A";"0";"0";"4";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"INTERNAL,NORANDTILE" # rocks "16";"17";"17";"BLOCK_STONE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"1";"N/A";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"ROCK,NATURAL,OREBEARING" diff --git a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt index 9ba0bdcfd..1ca952f15 100644 --- a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt +++ b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt @@ -624,26 +624,28 @@ open class TerrarumIngame(batch: FlippingSpriteBatch) : IngameInstance(batch) { // batch-process uiAliases // NOTE: UIs that should pause the game (e.g. Inventory) must have relevant codes ON THEIR SIDE uiContainer.add( - // drawn first - //uiVitalPrimary, - //uiVitalSecondary, - //uiVitalItem, + // drawn first + //uiVitalPrimary, + //uiVitalSecondary, + //uiVitalItem, + noticelet, - uiBlur, + uiBlur, - uiPieMenu, - uiQuickBar, -// uiBasicInfo, // temporarily commenting out: wouldn't make sense for v 0.3 release - uiWatchTierOne, - getWearableDeviceUI, - UIScreenZoom(), - uiAutosaveNotifier, - uiInventoryPlayer, - getUIFixture, - uiTooltip, - consoleHandler, - uiCheatMotherfuckerNootNoot - // drawn last + uiPieMenu, + uiQuickBar, +// uiBasicInfo, // temporarily commenting out: wouldn't make sense for v 0.3 release + uiWatchTierOne, + getWearableDeviceUI, + UIScreenZoom(), + uiAutosaveNotifier, + + uiInventoryPlayer, + getUIFixture, + uiTooltip, + consoleHandler, + uiCheatMotherfuckerNootNoot + // drawn last ) @@ -656,7 +658,6 @@ open class TerrarumIngame(batch: FlippingSpriteBatch) : IngameInstance(batch) { } // these need to appear on top of any others - uiContainer.add(noticelet) uiContainer.add(notifier) App.setDebugTime("Ingame.UpdateCounter", 0) diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/AxeCore.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/AxeCore.kt index d946065ba..aa14cc120 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/AxeCore.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/AxeCore.kt @@ -104,15 +104,47 @@ object AxeCore { ).let { tileBroken -> // tile busted if (tileBroken != null) { - var upCtr = 1 + var upCtr = 0 var thisLeaf: ItemID? = null + val tileThereL = INGAME.world.getTileFromTerrain(x-1, y - upCtr) + val tileThereR = INGAME.world.getTileFromTerrain(x+1, y - upCtr) + val propThereL = BlockCodex[tileThereL] + val propThereR = BlockCodex[tileThereR] + val treeTrunkXoff = if (propThereL.hasAllTag(listOf("TREELARGE", "TREETRUNK"))) -1 + else if (propThereR.hasAllTag(listOf("TREELARGE", "TREETRUNK"))) 1 + else 0 + + if (treeTrunkXoff != 0) { + val tileThere = INGAME.world.getTileFromTerrain(x + treeTrunkXoff, y - upCtr) + val propThere = BlockCodex[tileThere] + + INGAME.world.setTileTerrain(x + treeTrunkXoff, y - upCtr, Block.AIR, false) + PickaxeCore.dropItem(propThere.drop, x + treeTrunkXoff, y - upCtr) + PickaxeCore.makeDust(tile, x + treeTrunkXoff, y - upCtr, 2 + Math.random().roundToInt()) + } + + upCtr = 1 while (true) { val tileHere = INGAME.world.getTileFromTerrain(x, y - upCtr) val propHere = BlockCodex[tileHere] - if (propHere.hasTag("TREETRUNK")) { + if (propHere.hasAllTag(listOf("TREELARGE", "TREETRUNK"))) { INGAME.world.setTileTerrain(x, y - upCtr, Block.AIR, false) - PickaxeCore.dropItem(propHere.drop, x, y - upCtr) // todo use log item if applicable + PickaxeCore.dropItem(propHere.drop, x, y - upCtr) + PickaxeCore.makeDust(tile, x, y - upCtr, 2 + Math.random().roundToInt()) + + if (treeTrunkXoff != 0) { + val tileThere = INGAME.world.getTileFromTerrain(x + treeTrunkXoff, y - upCtr) + val propThere = BlockCodex[tileThere] + + INGAME.world.setTileTerrain(x + treeTrunkXoff, y - upCtr, Block.AIR, false) + PickaxeCore.dropItem(propThere.drop, x + treeTrunkXoff, y - upCtr) + PickaxeCore.makeDust(tile, x + treeTrunkXoff, y - upCtr, 2 + Math.random().roundToInt()) + } + } + else if (propHere.hasTag("TREETRUNK")) { + INGAME.world.setTileTerrain(x, y - upCtr, Block.AIR, false) + PickaxeCore.dropItem(propHere.drop, x, y - upCtr) PickaxeCore.makeDust(tile, x, y - upCtr, 2 + Math.random().roundToInt()) } else if (propHere.hasTag("LEAVES")) { diff --git a/src/net/torvald/terrarum/worlddrawer/BlocksDrawer.kt b/src/net/torvald/terrarum/worlddrawer/BlocksDrawer.kt index 0a1736f86..af486d1d3 100644 --- a/src/net/torvald/terrarum/worlddrawer/BlocksDrawer.kt +++ b/src/net/torvald/terrarum/worlddrawer/BlocksDrawer.kt @@ -428,7 +428,7 @@ internal object BlocksDrawer { // hide tiles with super low lights, kinda like Minecraft's Orebfuscator val lightAtXY = LightmapRenderer.getLight(x, y) ?: Cvec(0) - if (lightAtXY.fastLum() <= 4f / 255f) { + if (lightAtXY.fastLum() <= 1.5f / 255f) { tileNumber = 2 // black solid }