Valheim
Install with App

Details

Latest version
1.2.9
Last Updated
First Uploaded
Downloads
20.5K
Likes
2
Size
1.1MB
Dependants
ADDatHost Valheim hosting
30% off

Changelog

1.2.9 (2026-10-31)

Bug Fixes & Stability

  • PaintCleared Global Interception & Deep North Snow Spikes Fix:
    • Fixed an issue where TerrainComp_PaintCleared_Patch.Prefix unconditionally intercepted every TerrainComp.PaintCleared call across the entire game, including character walking footsteps in Deep North (snow_walk). When the hoe brush was set to Square, this caused footprints to spawn as rotated squares and raised single-vertex snow pillars (up to 2m spikes) along foot trails.
    • Restricted the custom PaintClearedRotated path to execute only for player tool operations with a Square brush shape (IsToolOperation && Plugin.BrushShape == BrushShape.Square). All non-tool operations (footprints, creature movement, other mods, and circle-brush tool operations) now pass directly to vanilla PaintCleared.
    • Corrected the vertex distance calculation in PaintClearedRotated from hm.VertexMaskToWorld(x3, y3) - worldPos to relative mask grid coordinates (x3 - x) * scale and (y3 - y) * scale, eliminating the half-cell (~0.7m diagonal) offset and preventing sampling outside intended bounds.

1.2.8 (2026-10-30)

Bug Fixes & Stability

  • Build Menu Requirement Warning Message Loop:
    • Fixed an issue where opening the build menu with a Hoe or Cultivator equipped caused top-left HUD notifications to endlessly cycle through missing requirement warnings ("Missing Carrot Seeds: 0/1", "Missing Turnip Seeds: 0/1", etc.) on every frame until the menu was closed.
    • Removed the runtime warning dispatch from Player.HaveRequirements (which vanilla Valheim invokes sequentially across all build menu piece buttons every frame to refresh icon styling). Vanilla's standard centered warning upon placement attempt is preserved.
  • Strict Cultivator Integration Decoupling:
    • Fully decoupled all SmarterHoe placement, rotation, terrain operation, ghost setup, stamina/durability, and HUD patches via Plugin.IsCultivatorActive(player). When EnableCultivatorFeatures is set to false, the Cultivator remains 100% vanilla without any SmarterHoe overlays, visualizers, or input hijacking.
    • Set the default of EnableCultivatorFeatures to false under 15 - Cultivator Integration so cultivator modifications remain strictly opt-in.
  • Build Menu Hotkey & Scroll Suppression:
    • Added an explicit Hud.IsPieceSelectionVisible() guard to Plugin.Update() and Player_UpdatePlacement_Fallback_Patch to prevent terrain tool hotkeys (Q, E, R, etc.) and scroll-wheel adjustments from triggering or intercepting selection while browsing through the build menu.

Compatibility & Conflict Protection

  • Standalone Hoe Radius Mod Conflict Hardening (HoeRadius / MyDirtyHoe):
    • Enforced Priority.First on PlacePiecePatch and Player_TryPlacePiece_Patch so SmarterHoe intercepts all custom tools (Instant Plateau, Clear Debris, Smooth Ramp, Restore Terrain, etc.) and Farming Grid batch planting before any other mod's PlacePiece prefix can run.
    • Enforced Priority.Last on TerrainOp.Awake, TerrainComp.DoOperation, TerrainComp.InternalDoOperation, TerrainModifier.Awake, and HoePlacementPatch.Postfix so SmarterHoe's dynamic brush radius, raise height, and ghost visualizers always take precedence over competing hoe mods.
    • Added automatic detection and conflict neutralization in ModCompatibilityManager for redundant Hoe radius mods (HoeRadius, BiggerHoeRadius, MyDirtyHoe), logging a clear notification and safely unpatching their conflicting hooks.
    • Added soft dependencies in BepInEx plugin metadata for known Hoe radius mods (mtnewton.valheim.hoeradius, aedenthorn.HoeRadius, redseiko.valheim.hoeradius, com.github.johndowson.MyDirtyHoe) ensuring proper load order.

1.2.7 (2026-10-24)

Visual Indicator Improvements

  • Solid Dynamic Circle Brush Outline:
    • Replaced the default animated, spinning dashed circle projector with a solid, high-visibility circular outline that accurately contours the terrain and dynamically expands and contracts with the brush radius.
    • Eliminated distracting spinning dashes and pulsing particle effects, making the true boundary and reach of the circle brush immediately and clearly visible at any radius (0.5m - 20m).
    • Added optional locked altitude plane ring visualization when Altitude Lock is active.
    • Configurable via UseCustomCircleIndicator, BrushIndicatorColor, and BrushIndicatorWidth under 4 - Visual Indicators.
    • Applied the solid dynamic circle brush across every round-brush tool on both the Hoe and Cultivator (including Level Ground, Raise Ground, Pathen, Paved Road, Smooth Ramp, Cultivate, Replant, all custom SmarterHoe tools, and the Farming Grid).

Cultivator & PlantEverything Farming Grid Fixes

  • Cultivator Farming Grid (F8) Activation Fix:
    • Fixed a bug where equipping the Cultivator showed the SmarterHoe HUD at the top of the screen, but pressing F8 (or a custom configured key) failed to activate the Farming Grid because EnableCultivatorFeatures defaulted to false and gated input processing.
    • Enabled Cultivator integration by default and decoupled FarmingGridEnabled and AreaHarvestEnabled from secondary config gates so F8 always toggles the Farming Grid reliably when using the Cultivator.
  • Full PlantEverything (1.21.4+) Pickable & Flora Support:
    • Extended Farming Grid visualization, spacing calculation, seed/resource validation, and batch placement to support Pickable-based flora (such as Raspberry/Blueberry/Cloudberry bushes, mushrooms, thistle, and dandelions from PlantEverything) in addition to standard Plant crops and saplings.
    • Preserved multi-item requirements (m_amount > 1) on modded crops and PlantEverything bushes instead of overwriting them to 1.

Additional Bug Fixes & Stability Improvements

  • Build Menu Category Tab Isolation:
    • Fixed CustomPieceManager.EnsureAvailable injecting all 9 Hoe terrain tools into every build menu category tab when PlantEverything added extra tabs and EnableCultivatorOnHoe was enabled.
  • Character Save (m_knownRecipes) Protection:
    • Fixed Freebuild mode permanently adding plant piece names to player.m_knownRecipes in the player's .fch character save file.
  • Separate Hoe vs. Cultivator Cost Mode Enforcement:
    • Fixed CostMode and CultivatorCostMode bleeding into one another when checking requirements, consuming resources/stamina/durability, or toggling cost mode with [B].
  • External Container Mod Excavation Fix:
    • Fixed excavating/digging (SelectedRaiseHeight < 0, 0 stone cost) still consuming stone when AzuCraftyBoxes or ValheimPlus was installed.
  • 1x1 Farming Grid & Ghost Tint Fixes:
    • Unified the 1x1 single-plant threshold (radius < spacing) between Circle and Square grid modes, applied valid/invalid ghost tinting and ward checks after grid snapping, and cleared MaterialPropertyBlock tinting on the main placement ghost when turning the Farming Grid off.
    • Ensured 1x1 Farming Grid placements validate snapped positions, pull seeds from nearby chests, and register with UndoManager.
  • Undo Seed Refund Overflow Protection:
    • Fixed UndoManager.Undo() losing refunded seeds when the refund count exceeded m_maxStackSize or when the player's inventory was full (overflow stacks now spawn at the player's feet).
  • Area Harvest & Auto-Replant Fixes:
    • Fixed Auto-Replant failing when the Cultivator was not in the player's inventory, prevented weapon durability drain when harvesting with Shift + E while holding a weapon, enforced ward protection and harvest filters on secondary player-centered sweeps, and collected dropped items near both the aim center and the player.
  • Terrain Operations & Hold-to-Level Fixes:
    • Added chunk border synchronization (SynchronizeChunkBorders) to Soften Terrain, Restore Terrain, and ResetAllWaypoints to prevent chunk-edge seam tears.
    • Prevented Hold-to-Level from spamming waypoints on Smooth Ramp, firing when aiming at the sky, or bypassing survival resource/stamina/durability costs on vanilla terrain tools.
    • Fixed Quench Lava consuming Grausten/Stone and stamina when no lava was present in the brush radius, and removed free automatic lava quenching from normal terrain operations.
    • Prevented Clear Debris from destroying mature player-planted crops without dropping their harvest when DropResourcesOnClear is disabled.

1.2.6 (2026-10-22)

Cultivator & Farming Fixes

  • Cultivator 2x Seed Consumption Bug Fix:
    • Fixed a critical bug where planting crops (such as carrots, turnips, onions) occasionally consumed 2x the intended seeds per crop, especially after swapping characters or when hovering near obstacles or grid borders.
    • Decoupled Prefab Requirements: Eliminated in-place mutation of Piece.m_resources amounts on shared Unity prefabs in RAM. Cultivator tooltips and Freebuild UI indicators now safely update display text without altering prefab data.
    • Seed Requirement Normalization: Standard crops (carrots, turnips, onions, barley, flax, saplings) strictly enforce a base cost of 1 seed per plant for single placements and exactly 1 seed per spawned crop during Farming Grid batch planting.
    • Memory Sanitization Across Character Swaps: Cached original requirement tables are automatically cleared and validated on character logout, ObjectDB.Awake, CopyOtherDB, and SetupEquipment. Lingering multiplied values cannot persist across characters or world loads.
    • Full Mod Compatibility: Restored seamless interoperability with PlantEverything, Seneal UI, and container-pulling mods like AzuCraftyBoxes.

Clear Debris Tool Precision

  • Clear Debris Oversized Clearing Radius Fix:
    • Fixed an issue where the Clear Debris tool cleared an area much larger than the visible brush circle/square.
    • Tree Trunk Base Positioning: Standing trees now strictly require their trunk base to be inside the brush radius (with a small 0.35m trunk thickness allowance). High canopies and overhead branches 16m in the sky no longer trigger cutting down distant trees whose trunks stand outside the brush.
    • Ground-Focused Vertical Capsule Range: Replaced the skyward 16-meter query with a focused ground range (clamped to 2.5m - 5m) so only debris, stumps, logs, and rocks at ground level are detected.
    • Object Center Bounds Testing: Large boulders and rock formations are evaluated against their bounds center rather than any outermost collider vertex, preventing large rocks centered meters outside the brush from being obliterated.
    • Precise Clutter & Wild Grass Clearing: Removed an artificial +2m radius expansion on ClutterSystem.ResetGrass, so cleared grass and flowers now match the visual brush outline exactly.

Terrain & Ramp Fixes

  • Round Brush Shape Painting Square Fix:
    • Fixed an issue where using terrain tools with the Round brush shape selected painted square tiles instead of a true circular radius due to vanilla Valheim applying an axis-aligned bounding box around the tool operation.
    • Added circular distance falloff to TerrainComp.PaintCleared so that round brush operations produce clean, smooth circular terrain paint patches.
  • Ramp Carving Seam & Hole Fix:
    • Fixed an issue where carving smooth ramps across chunk borders created gaps or "holes" in the terrain mesh.
    • Implemented SynchronizeChunkBorders to ensure boundary vertices between adjacent terrain chunks match seamlessly, expanded waypoint search radius padding by 16m, and ensured atomic chunk re-bakes.

1.2.5 (2026-10-18)

Terrain Painting, Soften Tool & Altitude Lock Fixes

  • Original (Grass/Snow) Surface Paint Mode Fix (Plateau & Altitude Lock):
    • Fixed an issue where selecting ORIGINAL (Grass/Snow) via P surface paint cycling failed to paint grass or snow when using Instant Plateau or Altitude Lock on previously modified dirt, cobblestone, or cultivated soil.
    • RampPaintMode.KeepOriginal now applies Heightmap.m_paintMaskNothing to properly reset the paint mask back to natural biome ground (lush grass in Meadows/Plains/Black Forest, pure snow in Mountains/Deep North) and triggers clutter regrowth.
  • Full Surface Paint Mode Support for Soften Terrain:
    • Soften Terrain now fully supports the P Surface Paint cycling system! Previously, Soften Terrain only smoothed elevations and could never paint any selected surface texture.
    • Players can now soften sharp cliff creases while simultaneously painting Original (Grass/Snow), Dirt, Cobblestone (Paved Stone), or Cultivated Soil with smooth cosine brush falloff.
    • When Surface Paint is set to MatchEquippedTool (default), Soften Terrain safely preserves existing surface textures without altering them.
  • New UNCHANGED (Keep Existing) Surface Paint Mode:
    • Added a dedicated KeepExisting mode to RampPaintMode (P toggle) for players who want to adjust terrain elevation or smooth cliffs without altering any existing ground textures (leaves whatever is currently there 100% untouched).
    • Added localized strings for "Keep Existing" across all 9 supported languages (English, German, French, Spanish, Russian, Chinese, Portuguese, Polish, Swedish).
  • Soften Terrain HUD & Tooltip Updates:
    • Added the live [P] Surface: ... paint mode indicator to the on-screen Soften Terrain HUD and hover build tooltips.
  • Altitude Lock Terrain Painting & Farmland / Cobblestone Fix:
    • Fixed an issue where using Altitude Lock / Level Lock mode with specialized terrain tools (Cultivate, Paved Road, Replant Grass) always forced the ground to bare dirt rather than applying the tool's intended surface texture (cultivated farmland, paved cobblestone, or natural grass).
    • Component & Localization Resolution: PlacePiecePatch.Prefix and LevelTerrainAtAltitude now properly search child GameObjects for TerrainOp and TerrainModifier components on modern Valheim terrain prefabs and recognize localized internal piece names ($piece_cultivate, $piece_pavedroad, $piece_replant).
    • Tool Matching Logic: When Surface Paint mode is set to MatchEquippedTool (default), leveling at locked altitude now accurately maps each tool:
      • Cultivate: Applies authentic fertile farmland (Heightmap.m_paintMaskCultivated).
      • Paved Road: Applies cobblestone (Heightmap.m_paintMaskPaved).
      • Replant Grass: Restores healthy green grass (Heightmap.m_paintMaskNothing).
      • Level Ground / Altitude Lock / Instant Plateau: Applies leveling dirt (Heightmap.m_paintMaskDirt).
  • Non-Painting Tools Default Enum Dirt Overwrite Fix:
    • In CloneSettingsWithRadius and TerrainModifier_Awake_Patch, removed an enum equality check (s.m_paintType == TerrainModifier.PaintType.Dirt). Because Dirt is the default value 0 of the C# enum, non-painting operations (such as vanilla Raise Ground) were previously evaluating isPaint = true, setting m_paintCleared = true and overwriting existing vegetation, cobblestone, or farmland with dirt.
  • Cultivator Altitude Lock & Brush Controls:
    • Fixed PlacePiecePatch.Prefix and Plugin.Update resetting Altitude Lock every frame when holding the Cultivator. When Cultivator integration is active (EnableCultivatorFeatures or EnableCultivatorOnHoe), players can seamlessly use Altitude Lock, custom brush radii, shape rotation, and Surface Paint cycling while farming.

1.2.4 (2026-10-18)

Terrain & Gameplay Fixes

  • Level Lock / Altitude Lock Turning Dirt to Stone & Irreversible Vegetation Loss Fix:
    • Fixed a critical bug reported by users where activating Level Lock (or Altitude Lock) turned leveled dirt into bare grey bedrock/stone and prevented grass from ever regrowing or crops/plants from being planted (PlacementStatus.NeedDirt).
    • Root Causes:
      1. In 1.2.3, the lore-friendly lava auto-quenching mechanism zeroed out vertex alpha (baseAlpha = 0f) on any leveled terrain with totalDelta > 0.35m across all biomes because it lacked a biome check. In Valheim outside the Ashlands, vertex alpha (m_paintMask.a) controls the vegetation and topsoil mask. Zeroing this mask exposes bare rock/cliff bedrock texture, causes the game to reject crop planting with "Need dirt", and cannot be repaired by vanilla Cultivator "Replant Grass" (which preserves existing alpha).
      2. LevelTerrainAtAltitude was mistakenly querying _paintMode.Value (a Ramp configuration setting cycled by hotkey P) instead of the equipped piece, which forced all Level Lock and Instant Plateau operations to paint cobblestone/paved stone if the ramp paint mode was set to AlwaysPaved.
      3. ExecuteResetTerrain ("Restore Terrain to Nature") fell back to corrupted zero-alpha when heightmap build data was unavailable.
      4. Balanced Survival charged stone for leveling ground even when ScaleStoneCostWithBrush was false (where vanilla leveling is free).
    • Resolutions & Retroactive Healing:
      1. Auto-quenching is now strictly restricted to Heightmap.Biome.AshLands. Outside the Ashlands and Deep North, ApplyPaintToVertex now automatically heals any previously corrupted zero-alpha vertices back to 1.0f (full healthy vegetation).
      2. LevelTerrainAtAltitude now determines paint type based on the equipped piece (paved_road -> Paved Stone, cultivate -> Cultivated Farmland, replant -> Natural Grass, mud_road/instant_plateau -> Dirt).
      3. Added a dedicated repair patch to TerrainComp.InternalDoOperation for Cultivator "Replant Grass": using the Cultivator's "Replant Grass" tool outside the Ashlands now immediately restores corrupted zero-alpha ground back to pristine fertile grassland (alpha = 1.0f).
      4. "Restore Terrain to Nature" now explicitly restores alpha to 1.0f outside Ashlands and Deep North.
      5. Leveled terrain no longer charges stone when ScaleStoneCostWithBrush is false.

Visuals & Compatibility

  • Redesigned "Quench Lava" UI Icon:
    • Completely redesigned icon_quench_lava.png to match the exact aesthetic, perspective, and format of the other SmarterHoe terrain tool icons (icon_instant_plateau, icon_altitude_lock, icon_clear_debris).
    • Removed the solid dark square background and replaced it with a 100% transparent PNG with clean anti-aliasing around rising steam wisps.
    • Rendered as an isometric circular volcanic terrain slab featuring layered dark basalt cliff strata, top surface depicting cracked cooling basalt crust over glowing lava veins, and rising steam wisps.
  • Heightmap Unlimited JvL (UnlimitedHeightmapJVL) Native Compatibility:
    • Added native compatibility detection for Heightmap Unlimited JvL (digitalroot.mods.heightmapunlimitedjvl), Heightmap Unlimited Remake, and original Menthus variants.
    • When detected, SmarterHoe automatically relaxes its internal height limit clamps (IsBeyondGameLimitAllowed = true) and dynamically reads the external mod's configured maximum and minimum height limits (e.g. 200m), preventing SmarterHoe from resetting or restricting terrain modifications back to vanilla ±8m limits.
    • Note: SmarterHoe also includes its own standalone height bypass in config (AllowBeyondGameLimit = true and MaxTerrainDelta = 50m under [9 - Reach & Limits]).
  • Farming Grid 60-Crop Hard Cap Fix (FarmingGridVisualizer):
    • Fixed a critical bug where farming grids larger than 60 spots (such as an 11x11 square grid with 121 spots at 6.5m radius) permanently marked all crops past the 60th spot as invalid/red (Onion Seeds 494/60), preventing half the grid from ever being planted even when the player possessed hundreds of seeds.
    • All grid points are now validated synchronously with lightweight spatial caching, ensuring 100% of valid spots within the radius turn green and plant properly. Also extended Cultivator placement reach when Cultivator features are enabled so grid perimeter spots are never falsely rejected as "Out of reach".
  • Quench Lava Altitude Lock Collision:
    • Added SmarterHoe_QuenchLava and "Quench Lava" to _cachedIsSpecialNonLockTool so the lava-quenching ghost does not snap into the sky when Altitude Lock is active.
  • Cultivator Cost Mode Tooltip & Placement Ghost Sync:
    • Added CultivatorCostMode to currentStateHash for instant cache invalidation in BuildHudTooltipPatch and updated UpdateFarmingGridWithCostCheck to read Plugin.CultivatorCostMode.

1.2.3 (2026-10-17)

New Feature — "Quench Lava" Hoe Tool & Lore-Friendly Lava Solidification

  • Dedicated Hoe Tool: "Quench Lava" (SmarterHoe_QuenchLava):
    • Added a dedicated tool piece to the Hoe build menu that cools and solidifies molten, damaging Ashlands lava lakes into solid, heat-resistant, walkable crust.
    • Ashlands Progression Gating: Intelligently locked and hidden from the Hoe build table until the player discovers the Ashlands ($biome_ashlands known biome discovery / entering the biome). In Freebuild mode or with devcommands (nocost), it is immediately available everywhere.
    • Balanced Survival Integration: Consumes 1 Grausten or Stone per operation (automatically prioritizing native Ashlands Grausten from inventory or nearby chests), with proper stamina drain and tool durability cost.
    • Full Undo/Redo Integration: All quenched lava operations can be instantly undone or redone via Z / Y (Ctrl+Z / Ctrl+Y), cleanly restoring pristine molten magma if desired.
    • Custom Art & Localization: Includes a custom 256x256 Valheim-styled UI icon (icon_quench_lava.png), contextual on-screen HUD card, and full build tooltips localized across English, German, French, Spanish, Russian, Chinese, Portuguese, Polish, and Swedish.
  • Lore-Friendly Auto-Quenching on Elevated & Paved Terrain:
    • When terraforming across Ashlands lava lakes with Smooth Ramp, Instant Plateau, Altitude Lock Leveling, or vanilla Raise Ground / Level Ground, any terrain elevated significantly above the natural lava plane (totalDelta > 0.35m) or paved over with stone automatically solidifies into cooled, non-burning rock crust (alpha = 0.0f).
    • Completely eliminates unnatural vertical cliffs and floating pillars of glowing, burning lava when bridging across lava oceans or leveling plateaus into lava basins.
    • Natural lava lakes left at natural water/magma level remain 100% authentic, bubbling, and hazardous to walk on.

Fixed — Dedicated Server Terrain Sync & Ramp Corridor Chunk Discovery

  • Dedicated Server & Multiplayer Custom Tool Terrain Sync: Fixed a critical issue on Dedicated Servers (and non-host multiplayer clients) where terrain edits made with custom Hoe tools (Instant Plateau, Smooth Ramp, Level (Locked Altitude), Soften Terrain, Restore Terrain, Quench Lava, Clear Debris, and Undo/Redo) were only visible locally to the editing player and failed to synchronize to other players on the server.
    • Root Cause: In Valheim, TerrainComp.Save() immediately aborts (if (!this.m_nview.IsOwner()) return;) without writing to ZDOVars.s_TCData unless the client executing Save() is the current ZDO owner. In 1.2.2, SafeClaimOwnership was gated behind ZNet.instance.IsServer(), which is false for all connected players on a Dedicated Server—causing comp.Save(false) to silently abort and only update the local Heightmap mesh (hm.Poke).
    • Resolution (PrepareTerrainCompForWrite & SaveAndSyncTerrainComp):
      1. Before modifying any TerrainComp arrays, SmarterHoe now calls comp.Initialize(), comp.CheckLoad() (ensuring the latest network ZDO state is loaded before claiming ownership so existing edits are never overwritten), and comp.m_nview.ClaimOwnership().
      2. After saving via comp.Save(), SmarterHoe immediately queues the TerrainComp ZDO for network transmission via ZDOMan.instance.ForceSendZDO(zdoID) to all connected peers.
      3. Eliminated eager hm.GetAndCreateTerrainCompiler() calls on untouched chunks during read-only cost checks, UndoManager pre-snapshots (CapturePristine), and neighboring chunk scans—preventing empty/duplicate _TerrainCompiler ZDOs (m_operations = 0) that previously caused "ground locked" zones in 1.2.1.
  • Missing Ramp Chunks & Terrain Holes: Fixed an issue where building ramps with waypoints spaced > 15m apart (such as 2-point ramps spanning cliffs or valleys) produced massive square holes in the terrain along chunk borders, leaving intermediate sections of the ramp completely missing with vertical cliff drops down into water/chasms.
    • Root Cause: CarveAllWaypoints and ResetAllWaypoints collected heightmap chunks by querying Heightmap.FindHeightmap solely at the discrete waypoint positions with radius halfWidth + margin + 4f (~7m). In Valheim, terrain is divided into 64m × 64m chunks. Any intermediate chunk along the road between waypoints whose center/bounds did not touch within ~7m of the endpoints was never returned by FindHeightmap, causing the carver to completely bypass the middle chunk while modifying the outer chunks.
    • Resolution (CollectHeightmapsAlongPath): Introduced a robust corridor heightmap discovery engine that:
      1. Steps densely along every road segment in increments of $\le 6.0\text{m}$ querying Heightmap.FindHeightmap, guaranteeing all chunks along the path are discovered.
      2. Performs comprehensive 2D AABB intersection testing against all active loaded heightmaps in Heightmap.GetAllHeightmaps(), ensuring no chunk touching any segment's corridor is ever missed.
  • Undo/Redo Corridor Coverage: UndoManager.BeginMultiPointOperation now uses the same precollected corridor heightmap set, ensuring before/after snapshots capture 100% of the modified chunks along long ramps. Undoing or redoing a multi-chunk ramp also now cleanly resets clutter/grass across all touched chunks.
  • Continuous Grass Clearing Along Ramps: Grass clearing (_clearGrass) in CarveAllWaypoints and grass restoration in ResetAllWaypoints now sample continuously along each road segment in ~3.5m increments rather than only at discrete waypoints, preventing grass tufts from poking up through the center of 2-point ramps.
  • Multi-Deck & Ravine Slope Selection: Replaced order-dependent Mathf.Abs(candY - currentWorldY) > 10f guard in the closest-segment resolution with an order-independent multi-deck evaluation. Ramps traversing deep ravines (>10m above ground) or mountain cliffs no longer suffer from false segment rejections, while multi-tier switchback decks still properly resolve to their closest respective terrain elevation.
  • Ward Protection Corridor Traversal: WardProtectionManager.CheckPointsAccess now steps along segments between waypoints, ensuring players cannot bypass protected warded areas by placing waypoints outside a ward on opposing sides.
  • Accidental Lava Spawning in Ashlands (Level Lock, Instant Plateau, Ramp): Fixed an issue where using custom hoe operations (Altitude Lock Leveling, Instant Plateau, Ramp carving, or vanilla Level Ground with Instant Flatten / Altitude Lock enabled) in the Ashlands spawned molten lava on areas of solid ground.
    • Root Cause: In Valheim, the alpha (.a) channel of the terrain paint mask holds the base biome/vegetation mask, where alpha > 0.6f in the Ashlands designates molten, damaging lava. Valheim's internal color constants (m_paintMaskDirt, m_paintMaskPaved, m_paintMaskCultivated) have alpha = 1.0f. While vanilla hoe operations specifically preserve the underlying alpha channel when painting RGB surface textures, SmarterHoe's custom carving and leveling previously wrote the full color directly into the paint mask, inadvertently forcing alpha to 1.0f on solid land.
    • Resolution: All custom terrain paint assignments now use ApplyPaintToVertex, which retrieves the pristine base alpha from the world generator's Heightmap.m_buildData.m_baseMask (or preserves the existing vertex alpha) and only alters the RGB channels for dirt, cobblestone, or cultivated soil.
    • Retroactive Healing: Simply leveling, plateauing, carving, or restoring previously corrupted areas with version 1.2.3 will immediately restore the pristine base alpha (0.0f on solid ground), safely extinguishing and removing any accidentally created lava.
  • Restore Terrain Nature Alpha Preservation: "Restore Terrain to Nature" (ExecuteResetTerrain, ResetSmoothRamp, ResetAllWaypoints) now restores the exact pristine m_baseMask from world generation instead of setting alpha to 1.0f via m_paintMaskNothing, preventing any visual or gameplay artifacts upon restoration.
  • Decoupled Cultivator Cost Mode & In-Game Toggle (B):
    • Decoupled the Cultivator cost mode (CultivatorCostMode) from the Hoe cost mode (CostMode). Toggling Freebuild mode on the Hoe no longer causes the Cultivator to plant seeds for free or get stuck in Freebuild mode.
    • Pressing B while holding the Cultivator (or aiming a plant piece) now toggles Cultivator Cost Mode between BalancedSurvival (seeds consumed from inventory or nearby chests) and Freebuild (infinite seeds for creative farming).
    • Both the on-screen floating HUD card and the compact status strip now dynamically reflect the active tool's cost mode.
  • Double Seed Consumption Fix with CraftFromContainers & Container Mods:
    • Fixed an issue where planting crops (both single-crop and farming grid batch planting) consumed double seeds when using CraftFromContainers or similar container mods.
    • Extended container mod detection in NearbyChestsCompat to recognize aedenthorn.CraftFromContainers, redseiko.valheim.craftfromcontainers, com.rockerbunny.craftfromcontainers, and assembly name CraftFromContainers alongside AzuCraftyBoxes.
    • In Player_TryPlacePiece_Patch, batch planting now sets __result = false upon executing ExecuteFarmingGridPlanting, preventing Valheim's native Player.UpdatePlacement from triggering single-piece ConsumeResources, duplicate stamina drain, or extra tool durability loss on top of the batch.
    • In single-piece placement, SmarterHoe defers chest drawing to the external container mod's pipeline when detected, eliminating duplicate deductions.
  • Raise Ground 3D Cylinder Preview Opacity Softening & Toggle:
    • Softened the default opacity of the 3D raise cylinder visualizer from 0.35 / 0.30 down to 0.20 / 0.15 to eliminate blinding highlights and glare when using the Raise Ground tool.
    • Players can also disable the visualizer completely at any time by setting EnableRaiseCylinderPreview = false under [4 - Visual Indicators] in the config file.
  • Farming Grid 60-Crop Hard Cap Fix (FarmingGridVisualizer):
    • Fixed a critical bug where farming grids larger than 60 spots (such as an 11x11 square grid with 121 spots at 6.5m radius) permanently marked all crops past the 60th spot as invalid/red (Onion Seeds 494/60), preventing half the grid from ever being planted even when the player possessed hundreds of seeds.
    • Root Cause: An aborted frame-spreading throttle in FarmingGridVisualizer was resetting _validationCursor = 0 whenever !gridDirty, hard-capping validation to PointsPerFrame (60) and leaving spots 60+ in an unvalidated, perpetually invalid state.
    • Resolution: All grid points are now validated synchronously with lightweight spatial caching, ensuring 100% of valid spots within the radius turn green and plant properly. Also extended Cultivator placement reach when Cultivator features are enabled so grid perimeter spots are never falsely rejected as "Out of reach".
  • Heightmap Unlimited JvL Compatibility:
    • Added native compatibility detection for Heightmap Unlimited JvL (digitalroot.mods.heightmapunlimitedjvl), Heightmap Unlimited Remake, and original Menthus variants.
    • When detected, SmarterHoe automatically relaxes its internal height limit clamps (IsBeyondGameLimitAllowed = true) and dynamically reads the external mod's configured maximum and minimum height limits (e.g. 200m), preventing SmarterHoe from resetting or restricting terrain modifications back to vanilla ±8m limits.
    • Note: SmarterHoe also includes its own standalone height bypass in config (AllowBeyondGameLimit = true and MaxTerrainDelta = 50m under [9 - Reach & Limits]).

1.2.2 (2026-10-05)

Fixed — Reported Bugs & Stability

  • Vanilla Cultivator Seed Consumption (Freebuild Bleed-Through): Fixed an issue where planting with a vanilla Cultivator consumed no seeds when the Hoe had been toggled to Freebuild cost mode while EnableCultivatorFeatures = false / EnableCultivatorOnHoe = false. Player_ConsumeResources_Patch now bails out to vanilla consumption whenever the equipped tool is not managed by SmarterHoe, so unmanaged cultivators always keep 100% vanilla behavior.
  • Double Seed Usage with AzuCraftyBoxes: Fixed every crop planted with the Cultivator costing 2 seeds instead of 1 when SmarterHoe and AzuCraftyBoxes were both installed. When AzuCraftyBoxes is detected, SmarterHoe no longer performs its own manual seed pull for single-plant placement and defers to the vanilla + AzuCraftyBoxes consumption pipeline, eliminating the duplicate deduction.
  • Hoe FPS Drop (Farming Grid Sorting): Eliminated a per-frame List.Sort over up to 625 grid points in FarmingGridVisualizer that caused severe frame drops (reported 120 → 15–10 FPS) for some users in 1.2.0/1.2.1. Points are now re-sorted only when the grid is actually regenerated (dirty flag), not every rendered frame.
  • Multiplayer Terrain Desync & "Ground Locked" Zones: Fixed terrain modifications being visible only to the modifying player and areas becoming unmodifiable (by hoe or pickaxe) after relog on multiplayer servers. All TerrainComp ZNetView ownership claims (SafeClaimOwnership, TerrainOp.Awake patch, UndoManager, Clear Debris) are now gated to run only when the local player is the server/host, preventing clients from stealing ownership of shared terrain chunks and breaking ZDO sync for everyone else.
  • Hold-to-Level Survival Costs: The continuous hold-to-level sweep now correctly enforces stamina and tool durability checks per tick in Balanced Survival mode (previously ticks could fire while out of stamina or with a broken tool).
  • Undo/Redo History Integrity:
    • A failed undo/redo (all target chunks unloaded) no longer silently loses the history entry — the step is pushed back onto its original stack so it can be retried after moving closer.
    • FindTerrainCompAt no longer falls back to a neighboring heightmap's compiler when the exact chunk is unloaded, which could write chunk A's deltas into chunk B and corrupt terrain.
    • HasChunkChanged now safely handles mismatched snapshot array lengths and null asymmetry instead of only comparing element-wise.
  • Texture Leak in Icon Loader: Failed ImageConversion.LoadImage calls now destroy the orphaned Texture2D, preventing GPU texture leaks when loading custom/modded piece icons.
  • Custom Piece Prefab Null Guard: CustomPieceManager.CreatePrefabsOnce no longer calls GetComponent<Piece>() before its null check, fixing a potential NullReferenceException with missing base prefabs.
  • Stale Tooltip Reference: BuildHudTooltipPatch cache invalidation now handles destroyed pieces (_lastPiece == null), preventing stale Unity object references from suppressing tooltip updates.
  • Batch Plant Suppression Windows Gated: The 0.25s stamina/durability/requirement suppression windows after farming grid batch planting now only apply when a hoe or cultivator is equipped, preventing unintended bypasses for other tools/actions.
  • Ground Height Cache LRU Eviction: GetGroundYCached in FarmingGridVisualizer now evicts the least recently used entry when the cache is full, instead of always overwriting slot 0.
  • ComfyGizmo Transpile Warning: SafeGizmoTranspile now logs a warning if neither the PerfectPlacement nor vanilla Quaternion.Euler IL patterns are found, making compatibility issues easier to diagnose.
  • Redo Planted Entry Preservation: UndoManager.Redo() now re-pushes planted-batch entries onto the redo stack when redo is not supported, preventing history loss.
  • Stone Cost Estimate Cache Leak: EstimateLevelStoneCost now clears _cachedHeightmapList before calling Heightmap.FindHeightmap, preventing unbounded list growth and inflated cost estimates from duplicate heightmap entries.
  • AzuCraftyBoxes Cache Invalidation: PullFromNearbyContainers now calls InvalidateCache() after pulling from AzuCraftyBoxes containers, preventing stale item counts from causing over-spending in subsequent operations.
  • Duplicate Replant Spots: Area harvest first sweep now gates replantSpots.Add on pickables.Add(p) returning true, preventing duplicate replant spots and extra seed consumption when a Pickable overlaps multiple colliders.
  • Smooth Terrain Resource Timing: ExecuteSmoothTerrain now consumes stamina and durability only after confirming there are vertices to smooth, preventing resource drain on already-flat terrain.
  • Dead Player Hoe Reach: Plugin.Update now calls RestorePlaceDistance() before early-returning when the player is dead/null/in cutscene, preventing extended placement reach from persisting through death.
  • Plant Piece Cache Invalidation: _grownNameToPlantPiece dictionary is now cleared on world unload (Game.OnDestroy), preventing stale GameObject references across world changes.
  • Null Player Container Query: GetNearbyNativeContainers(null) now returns an empty list instead of the shared cached list, preventing aliasing hazards.

Improved Feedback & Usability

  • Missing Requirement Warnings Restored: Attempting to place terrain tools or crops without enough stone/seeds, or out of crafting-station range, now shows a clear throttled warning message (e.g. Missing Stone: 2/4, Requires crafting station: Workbench). Previously these failures were silent because the custom requirement checks skipped vanilla's message flow.
  • Farming Grid Disabled Feedback: Pressing Q or adjusting the grid radius while the Farming Grid is disabled now explains that the grid is OFF and how to enable it (F8 / EnableFarmingGrid + cultivator feature in config), instead of silently appearing broken. Pressing F8 while cultivator features are disabled now names the exact config flag that is blocking activation.
  • Area Harvest Disabled Feedback: Pressing Shift+E while looking at a harvestable with Area Harvest disabled now tells the user which config flag (EnableAreaHarvest or EnableCultivatorFeatures/EnableCultivatorOnHoe) needs enabling, instead of doing nothing.

Fixed & Performance Overhaul

  • Zero-Allocation Container Registry & Nearby Chest Overhaul:
    • Dynamic Container Registry (_allActiveContainers): Completely eliminated expensive iterations over Piece.m_allPieces (thousands of world pieces) and recursive GetComponentInChildren<Container> searches on all building pieces in player bases. Containers now register and unregister via lightweight Container.Awake and Container.OnDestroyed Harmony patches, making nearby chest detection instantaneous.
    • Short-Circuited Seed & Stone Scans: Added neededShortCircuit to NearbyChestsCompat.CountTotalSeeds across all operations (farming grid planting, replanting, ramp carving, plateau leveling). If the player's inventory already contains enough seeds or stone, nearby containers are never queried.
    • Expanded Container Cache Thresholds: Increased NearbyChestsCompat spatial movement threshold to 5m (25m² sqr magnitude) and temporal cache to 2.0s, reducing nearby container queries to a fraction of their previous frequency.
    • Cached OnGUI Seed Display: Plugin.OnGUI now reads pre-cached InventorySeeds and ChestSeeds directly from FarmingGridVisualizer.Instance rather than running full container and inventory queries across 2–3 Unity GUI passes per frame.
  • Cultivator & Plant Mode FPS Optimization:
    • Snapping Spatial/Temporal Caching: Implemented a smart 0.08m cursor delta and 0.15s TTL cache in GetSnappedGridCenter. Grid snapping now reuses candidate calculations when the player's aim is steady, avoiding continuous 256-collider physics overlap queries every frame.
    • Zero-Allocation Collider Classification: Added a cached lookup table (_cropColliderCache) with integer layer filtering (GhostLayer) for IsPlantOrCrop. Replaced expensive per-frame string allocations (col.gameObject.name), transform hierarchy traversals (IsChildOf), and GetComponentInParent<Plant> calls on up to 256 colliders per frame.
    • Ghost Visual Pooling & Renderer Caching: Wrapped ghost previews in GhostVisual pooling objects with pre-cached Renderer[] arrays. Eliminated per-frame GetComponentsInChildren<Renderer>(true) allocations (1,500+ garbage arrays/sec) and guarded SetPropertyBlock to only execute when ghost validity/seed state changes.
    • Point Validation Optimization: Pre-checks ward access once for the entire grid bounding sphere via WardProtectionManager.CheckAccess, bypassing individual point ward checks when safe; cached biome queries with 4m spatial cells (GetCachedBiome), eliminating Simplex noise evaluations; cached active Heightmap instance; optimized plant growth space checks with direct layer checks (GhostLayer) and root comparisons; pooled GridPlantPoint instances (_pointPool) and used a static comparison delegate.
    • Boundary Line Caching: Added position, rotation, and dimension dirty-checking to RenderBoundary to skip line vertex updates when the cursor hasn't moved, and pre-cached GroundRaycastMask.
    • Synchronized Seed State: Streamlined UpdateFarmingGridWithCostCheck to consume cached seed availability directly from FarmingGridVisualizer, eliminating duplicate inventory and container checks per frame.
  • Base Hitching & Component Storm Elimination:
    • Sprinting Component Storm Elimination: In Plugin.Update, gated IsLookingAtHarvestable(player) behind Input.GetKeyDown(AreaHarvestKey). This prevents 7 GetComponentInParent queries (Container, Door, Bed, CraftingStation, Sign, Pickable, PickableItem) from firing 60 times per second while holding Shift to sprint.
    • Build Hammer Exemption Guard: Guarded CustomPieceManager.RemoveCustomPiecesFrom with _tablesWithCustomPieces. Whenever PieceTable.UpdateAvailable runs for non-hoe tools (e.g., Hammer), it immediately returns without iterating hundreds of vanilla building pieces.
    • Direct Root Component Checks: Replaced recursive GetComponentInChildren<Plant>() traversals in Player_HaveRequirements_Patch, Player_ConsumeResources_Patch, and SyncPlantPieceRequirements with direct GetComponent<Plant>() calls.
    • Physics Buffer Management: Pre-cached HarvestMask, HarvestFilterMask, and ItemMask, and ensured _harvestColliderBuffer is cleared with Array.Clear after overlap checks to prevent GameObject reference retention.
    • Equip Lag & Multiplayer Desync: Cached reflection members for ComfyGizmo and PerfectPlacement, prevented TextMeshPro canvas rebuilds in BuildHudTooltipPatch, throttled EstimateLevelStoneCost, cached HoeLocalization.GetActiveLanguage(), and added remote player guards in PieceTable_UpdateAvailable_Patch, Player_UpdateKnownRecipesList_Patch, and Player_SetPlaceMode_Patch.

Fixed & Balanced

  • Accurate Dynamic Stone Cost Calculation:
    • Fixed baseline raise dimensions in GetTerrainPieceStoneCost: Replaced the 3.4m level ground radius baseline with vanilla Valheim's true 2.0m raise radius (TerrainOp.m_raiseRadius = 2.0m, delta = 0.5m, baseline volume = $\sim6.28\text{ m}^3$ per 2 stone).
    • Raised terrain volume now scales proportionally with both brush area and raise height. For example, a 1.5m square brush raised by 1.50m (volume $13.5\text{ m}^3$) now costs 4 stone instead of being locked at 2 or undercounted at 1.
    • Enabled ScaleStoneCostWithBrush = true by default in configuration.
    • Added in-game hotkey toggle (Shift + B) to quickly alternate between Dynamic Stone Cost Scaling and Flat Vanilla Cost (2 Stone) on the fly with live HUD feedback.
    • Fixed SyncTerrainPieceRequirements to refresh Hud.SetupPieceInfo whenever piece resource costs change, immediately updating the in-game build requirement HUD ("Stone 736/4") upon adjusting brush radius, shape, or raise height.
    • Added live status strip indicator FLAT (2 Stone) [Shift+B] / BALANCED [Shift+B] and updated controls tooltip in BuildTooltipHelper.

1.2.1

Fixed & Optimized

  • Equip Stutter & Massive Frame Drop Fix:
    • Eliminated severe frame rate drops when equipping the Hoe or Cultivator by adding high-efficiency spatial (2m movement threshold) and temporal (0.35s - 0.5s TTL) caching in NearbyChestsCompat.
    • Replaced un-cached per-frame Piece.GetAllPiecesInRadius and Container scans from UpdatePlacementGhost, Update, OnGUI, and HaveRequirements.
    • Replaced expensive heightmap compiler instantiation (hm.GetAndCreateTerrainCompiler()) during preview hover with non-allocating compiler lookups (TerrainComp.FindTerrainCompiler) and smart spatial caching.
  • Game Crash / UI Exception Fix:
    • Fixed an ArgumentOutOfRangeException crash in Hud.UpdatePieceList caused by unmatched category label counts when custom categories were injected into PieceTable. Added automatic padding guard ensuring m_categoryLabels always matches m_categories.Count.

Added & Changed

  • Configurable Cultivator Integration & Pure Terraforming Mode:
    • Added EnableCultivatorOnHoe (default: false): Keeps the Hoe strictly focused on terraforming without crowding the build menu with cultivator tools, plants, seeds, and farming categories. Players who prefer having cultivator tools on their hoe can enable this option.
    • Added EnableCultivatorFeatures (default: false): Controls whether SmarterHoe features (farming grid, mass harvest, multi-planting) hook into the Cultivator tool. When disabled, the Cultivator remains 100% vanilla.
    • EnableFarmingGrid & EnableAreaHarvest (defaults: false): All agricultural and cultivator tools are now disabled by default, ensuring SmarterHoe operates strictly as a focused terraforming mod out-of-the-box.
    • Dynamic runtime update: Changing EnableCultivatorOnHoe in Configuration Manager instantly updates the active build menu without needing a game restart.
  • Predictable & Vanilla-Friendly Resource Cost Scaling:
    • Added ScaleStoneCostWithBrush (default: false): When disabled, terrain raising and paved road placement use flat vanilla costs (2 stone per raise, 1 stone per paved road) regardless of brush radius or height. When enabled, stone costs scale dynamically based on brush area and volume raised.
  • Intuitive Ground Lowering / Excavation Tool:
    • Unlocked negative raise heights: MinRaise default changed from 0.05f to -8.0f (and up to -MaxTerrainDelta when AllowBeyondGameLimit is enabled).
    • Players can now easily lower/dig ground directly using the Raise Ground tool: hold E and scroll down past 0m to enter negative depth (Lower Ground / Excavate).
    • Excavation / lowering ground costs 0 stone (digging dirt does not require carrying stone in survival).
    • Updated 3D visualizer: when height is negative, the preview cylinder/box projects downwards into the ground with an amber/orange excavation indicator.
    • Updated HUD, crosshair labels, status bar, and build menu tooltips to clearly display Lower Depth: -X.XXm (Excavate) and explain how to lower terrain with both Raise Ground and Altitude Lock (PageDown).

1.2.0

Added

  • Full Cultivator Integration on the Hoe:
    • All cultivator abilities and plantables are integrated directly into the Hoe, eliminating the need to carry both tools!
    • Tilling & Replanting: Added Cultivate (tills fertile soil for farming) and Replant (restores lush grass to dirt or cultivated ground) straight to the Hoe's build menu.
    • All Vanilla & Modded Crops: Seamlessly plant carrots, seed carrots, turnips, seed turnips, onions, seed onions, barley, flax, Jotun puffs, Magecaps, Smoke puffs, Fiddleheads, Vineberries, and tree saplings (Beech, Birch, Oak, Pine, Fir, Ash). Also dynamically discovers and supports crops from farming mods (e.g., PlantEverything, OdinCrops, SeedTotem).
    • Authentic Build Menu Icons: Directly pulls piece prefabs and metadata from the Cultivator's PieceTable, preserving authentic icons, display names, localized descriptions, seed costs, and category tabs.
    • Strict Progression & Discovery Gating: Crops only appear in the Hoe build menu once the player has discovered their respective seeds/items.
  • Intelligent Farming Grid Engine for Crops and Saplings:
    • Plant crops, vegetables, and tree saplings in a neat, organized grid with a single click, eliminating tedious one-by-one crop placement.
    • Dynamic Healthy Spacing: Automatically calculates the exact safe growth spacing dynamically from each crop's Plant.m_growRadius (formula: Mathf.Max(0.85f, growRadius * 2f + 0.15f)). Crops planted in the grid will never fail to mature or complain that they need more space.
    • Adjustable Grid Radius Using Existing Controls: Adjust grid size using Q then scroll, hold Alt + scroll, or press bracket keys ([ / ]).
    • Live Visual Grid & Boundary Preview: Color-coded ghost crop previews (🟢 Green = valid and affordable, 🟡 Yellow = valid but need seeds, 🔴 Red = blocked/invalid) with a cyan perimeter contour line.
    • Proximity Row Snapping: Automatically detects nearby existing crops and snaps the entire grid to align flush with existing crop rows. Hold Shift to bypass snapping for freeform placement.
    • Square vs. Circle Grid Geometry (G): Toggle between clean rectangular grids and radial circular planting patterns. Rotate square grids with mouse wheel or arrow keys (Left / Right).
    • Survival Balance & Multi-Step Crop Undo (Ctrl+Z): Deducts exact seed count, stamina, and durability. Pressing Ctrl+Z destroys the batch and refunds all consumed seeds directly back to inventory.
  • Mass Area Harvesting (Shift + E):
    • Mass harvest all mature crops and pickable items within a configurable radius with a single keypress!
    • Simply hold Shift and tap E (or configurable AreaHarvestKey or gamepad interact) while looking at harvestable crops.
    • Contextual [Shift+E] Harvest in Range (Xm) tooltip prompt appears on hover.
    • Comprehensive Crop & Pickable Support: Harvests carrots, turnips, onions, barley, flax, Jotun puffs, Magecaps, Smoke puffs, seed crops, mushrooms, berries, and all modded farming crops.
    • Smart Structure Safety Filter: Automatically ignores chests, doors, beds, crafting stations, and signs.
    • Automated Collection & Vacuum (AreaHarvestAutoPickup): Harvested items are pulled directly into player inventory if weight and space permit.
  • Area Harvest Crop Filter Cycling (C):
    • Press C (configurable HarvestFilterCycleKey) while Hoe or Cultivator is equipped to cycle the area harvest filter between All Pickables, Replantable Crops only, or cycle through specific detected crop types nearby.
  • Shift+E Area Harvest Auto-Replant:
    • Added EnableHarvestReplant config toggle: when harvesting with Shift + E, immediately replants the same crops in place using seeds/vegetables from your inventory or nearby chests.
  • Seamless Nearby Chest & AzuCraftyBoxes Integration:
    • Full native compatibility with AzuCraftyBoxes and vanilla chests within range (NearbyChestRange, default 20m, or AzuCraftyBoxes' mRange).
    • Farming & Agriculture: Farming Grid batch planting, Shift+E Area Harvest Auto-Replant, and single-crop placement seamlessly pull required seeds and vegetables from nearby chests.
    • Terrain & Stone Operations: Raise Ground, Paved Road, Smooth Ramp road carving, and Instant Plateau altitude leveling all pull stone directly from nearby chests and CraftyBoxes. Placement ghost validity and 3D translucent raise cylinder preview accurately recognize stone in nearby containers.
  • Measure Mode (Ruler / Laser Tape) (N):
    • With the Hoe or Cultivator equipped, press N (configurable MeasureKey) to measure distances, elevation difference ($\Delta h$), slope angle (°), and road grade percentage between any two points in the world.
    • First press sets Point A at your aim point with a cyan 3D marker ring; second press sets Point B and locks the measurement; third press (or Esc) clears the points.
    • Live 3D line connects Point A to your cursor or Point B in real-time.
    • Dedicated on-screen HUD panel displays real-time 3D distance, horizontal distance, height delta, slope angle, and grade percentage.
  • Live Stone Cost Estimation HUD:
    • Dynamically calculates and displays live estimated stone cost in the HUD before clicking when using Level Ground (instant flatten / altitude lock) or Raise Ground.
  • Dynamic Build Menu Control Tooltips:
    • Direct in-game tooltips added to every tool description in the Hoe and Cultivator build menus, explaining what buttons do what for each tool.
    • 100% Dynamic Keybinds: Button names are dynamically read in real time from the active BepInEx configuration. Changing hotkeys updates the build menu tooltips immediately with zero restart needed.
    • Tailored controls displayed for Level Ground, Raise Ground, Instant Plateau, Level (Locked Altitude), Smooth Ramp, Soften Terrain, Restore Terrain, Clear Debris, Paved Road, Cultivate, Replant, and all crops/saplings.
    • Multi-language support across 9 languages (English, German, French, Spanish, Russian, Chinese, Portuguese, Polish, Swedish).
  • Ward-Aware Protection (Anti-Grief, Server-Enforced):
    • All SmarterHoe terrain, carving, debris, farming, and harvest operations respect Valheim's Ward (PrivateArea) system.
    • When ProtectWardedAreas is enabled (default: true, synchronized from server), modifications inside another player's Ward are blocked.
    • Visual grid preview ghosts inside unauthorized wards are highlighted red (Ward protection).
  • Language Dropdown in Plugin Configurator:
    • In Configuration Manager (F1), language selection is presented as a clean dropdown menu (Auto, English, German, French, Spanish, Russian, Chinese, Portuguese, Polish, Swedish) that updates instantly without restarting.
  • Comprehensive Debug Action Logging & Diagnostics (EnableDebugLogging):
    • Added EnableDebugLogging toggle (default: false) in the 0 - General configuration group for real-time diagnostic output across all mod actions.

Fixed

  • Complete Overhaul of Clear Debris Resource Drops (DropResourcesOnClear):
    • Fixed an issue where destroying trees, rocks, stumps, and bushes with DropResourcesOnClear = true produced zero resource drops.
    • Recursively traverses tree log prefabs (TreeBase.m_logPrefab, m_subLogPrefab, and m_stubPrefab) to yield full wood drops.
    • Correctly fires DropOnDestroyed across all root entities, sub-prefabs, and destructibles.
    • Accurately scales rock and ore drops across all remaining intact hit areas in MineRock5 boulders.
    • Spawns dropped items safely above terrain level with natural pop velocity and network registration.
  • Raise Height Delta Propagation Fix:
    • Fixed an issue where changing SelectedRaiseHeight was ignored during TerrainComp.DoOperation. It now explicitly applies Plugin.SelectedRaiseHeight whenever s.m_raise is active.
  • Multiplayer TerrainComp Ownership Pre-Claim:
    • Added an automatic ownership claim for touching TerrainComp instances before operations are invoked, ensuring custom radius, square shape, and raise height settings are processed locally.
  • Undo/Redo TerrainComp Precision Matching:
    • Updated chunk matching in UndoManager to iterate and match the exact nearest chunk center using spatial distance comparison, preventing coordinate ambiguity across adjacent 64m heightmap borders.

1.1.4

Fixed

  • Soften Terrain Full Overhaul & Spatial Neighborhood Filter: Resolved an issue where using the "Soften Terrain" tool on raised ground or steep terrain flattened/lowered the ground toward the cursor altitude while leaving sharp, jagged stepped edges intact.
  • True Multi-Pass Spatial Smoothing Engine: SmarterHoe now implements an authentic heightmap relaxation algorithm (Laplacian / Gaussian spatial diffusion):
    • Iterates neighboring vertices in the grid (cardinals at weight 1.0, diagonals at weight 0.7071) across all touching chunk boundaries.
    • Relaxes sharp spikes, stepped cliff corners, creases, and jagged terraformed edges towards their local neighboring surface average.
    • Uniform elevated ground (such as raised plateaus) and level ground have equal neighbor heights and are never lowered or flattened.
    • Applies a smooth radial cosine falloff from brush center to edge, blending smoothly into untouched surrounding terrain.
    • Saves the resulting heights directly into comp.m_levelDelta (clearing comp.m_smoothDelta), allowing softening and rounding of cliffs of any height (even 10m-50m with beyond game limit enabled).
  • New Configuration Options:
    • SoftenStrength: Smoothing intensity per click or sweep pass (default: 0.5, range 0.05 to 1.0).
    • SoftenPasses: Number of filter iterations per click/sweep (default: 2, range 1 to 5).

1.1.3

Fixed

  • Dedicated Server Height Limit Protection & Terrain Desync Fix: Resolved a critical issue where players connecting with SmarterHoe as a client to a dedicated server without the mod installed experienced massive terrain corruption (ground stretching into 100m spires or plunging into bottomless abysses, causing basement carpets and structures to collapse).
  • Client-Side Dedicated Server Auto-Clamp: SmarterHoe now automatically checks whether the connected remote server is running SmarterHoe via ServerSync. If the server does not have the mod installed, AllowBeyondGameLimit is strictly disabled on the client, enforcing vanilla Valheim's ±8m limit to guarantee 100% sync and zero physics anomalies.
  • Safe Out-of-the-Box Defaults: Changed AllowBeyondGameLimit default from true to false in config. Extreme height modifications (>8m) are now opt-in for dedicated server owners and singleplayer worlds.
  • Native TerrainComp Passthrough: RaiseTerrain, LevelTerrain, and SmoothTerrain now immediately yield to vanilla Valheim methods when using circular brushes within standard game limits, ensuring full performance and zero behavior deviations.

1.1.2

Fixed

  • Build Hammer Object Rotation & Menu Isolation: Fixed an issue where structures placed with the build hammer that include terrain modifiers or terrain operations (such as campsite tents from Odin's Campsite or class altars from Almanac Classes) were erroneously detected as hoe terrain tools. This prevented rotating those structures and caused the SmarterHoe HUD menu to appear while using the hammer.
  • SmarterHoe now strictly verifies that the player is actively holding a hoe before rendering any HUD elements, intercepting mouse scroll wheel or adjustment keys, or modifying placement rotation.
  • Removed unwanted prefab rotation mutation so build hammer pieces permanently retain their proper rotational controls.

1.1.1

Fixed

  • ComfyGizmo + PerfectPlacement Compatibility: Resolved a conflict where loading both ComfyGizmo and PerfectPlacement alongside SmarterHoe would cause Harmony to fail patching Player.UpdatePlacementGhost, disabling the mod entirely. SmarterHoe now uses a resilient transpiler that handles both the vanilla and PerfectPlacement-modified IL sequences correctly.
  • Added soft BepInDependency declarations for ComfyGizmo and PerfectPlacement so load order is handled gracefully.
  • Hoe tools now correctly suppress ComfyGizmo's 3D gizmo axis rings during terrain operations.
  • Terrain tool rotations are clamped to the horizontal plane when PerfectPlacement is active.

1.1.0

Added

  • Dedicated Server Support & ServerSync Integration (ModRequired = false):

    • Integrated official ServerSync system with server-authoritative configuration enforcement.
    • Server owners can install SmarterHoe on dedicated servers and enforce balanced settings across all connected players:
      • Resource Cost Mode Enforcement: Server owners can enforce CostMode = BalancedSurvival to prevent clients from toggling freebuild creative mode ([B] key is locked on clients with on-screen notice).
      • Synced Balance & Limits: Stone costs (StonePerCubicMeter, StonePerPavedSquare), stamina and durability costs, station requirements (RequireCraftingStation), debris requirements (RequireToolsForDebris), reach distance (HoeReach), maximum brush radius (MaxBrushRadius), and maximum terrain elevation deltas (MaxTerrainDelta, AllowBeyondGameLimit).
    • Client-Optional & Vanilla Server Compatibility (ModRequired = false):
      • SmarterHoe is completely optional on both client and server!
      • Players with SmarterHoe can connect to vanilla or non-modded servers without being kicked, disconnected, or declined. Local client settings apply seamlessly.
      • Vanilla players without SmarterHoe can connect to dedicated servers running SmarterHoe without being rejected.
    • In-Game Lock Enforcement & HUD Indicators:
      • Non-admin players connecting to a locked dedicated server cannot toggle cost mode using [B] (displays HUD notice: Cost mode is locked by the server).
      • Top HUD panel clearly displays <color=#FF6666>[Locked by Server]</color> when server settings are enforced.
      • Server admins listed in adminlist.txt are automatically exempt (lockexempt = true) and can modify settings in real-time with instant synchronization to all connected clients.
    • Headless Dedicated Server Optimizations:
      • Visualizers, line renderers, crosshairs, and icon texture loaders cleanly bypass headless dedicated server environments (GraphicsDeviceType.Null).
  • Multi-Step Undo & Redo System ([Alt+Z] or [Ctrl+Z], [Alt+Y] or [Ctrl+Y]):

    • Deep chunk-level undo/redo support across all terrain actions: Leveling, Instant Plateau, Soften, Restore, Smooth Ramp auto-carving, Vanilla Raise Ground, Mud Road, Paved Stone Road, and Cultivate.
    • Continuous sweep grouping: holding left-click to drag-level or pave groups the entire sweep into a single atomic undo entry rather than cluttering history.
    • Multi-heightmap boundary handling: ramps and large brushes touching multiple terrain chunks snapshot and restore across all affected chunks cleanly.
    • Waypoint step-back integration: pressing the Undo key when ramp waypoints are active automatically steps back the most recent waypoint first before undoing terrain changes.
  • Extended Hoe Reach (20m default, configurable 5m–50m):

    • Dramatically improves terraforming ergonomics by extending hoe placement reach while the tool is equipped. Automatically restores vanilla reach upon unequipping or character death.
  • Dedicated Keyboard Rotation Hotkeys & Configurable Step Size:

    • Rotate the square brush smoothly using dedicated keyboard hotkeys or mouse scroll wheel:
      • RotateSquareLeftKey (default: LeftArrow): Rotates square counter-clockwise.
      • RotateSquareRightKey (default: RightArrow): Rotates square clockwise.
      • ResetSquareRotationKey (default: Home): Snaps square rotation back to 0° (North).
    • SquareRotationMode: Choose between ScrollWheelAndButtons (default), ButtonsOnly (keyboard only), or ScrollWheelOnly.
    • SquareRotationDegrees: Configure degrees to rotate per click/step (default: 22.5°, configurable from 5.0° to 90.0°).
  • Expanded Multi-Language Localization (9 Languages + Auto-Detection):

    • Built-in localization covering the top 9 languages played in Valheim: English, German, French, Spanish, Russian, Simplified Chinese, Portuguese (Brazilian), Polish, and Swedish.
    • Auto-Detection (Language = "Auto"): Automatically detects the active game language from Valheim's language settings with zero manual configuration needed.
    • Native Tool & Menu Translation: Patched Valheim's native Localization.Localize engine to dynamically localize custom tool names, descriptions, cart slope friendliness ratings (Cart Friendly (✓), Steep for Carts (!), Too Steep for Carts (✗)), brush shapes, cost modes, and HUD notifications.
  • Hold-to-Repeat Altitude Fine-Tuning with Initial Delay:

    • Holding down PageUp or PageDown now smoothly and continuously raises or lowers the locked altitude without requiring dozens of individual button presses.
    • Features an initial delay (AltitudeHoldDelay, default: 0.35s) before continuous movement begins to prevent accidental overshooting on single taps.
    • Smooth rapid elevation adjustment (AltitudeRepeatRate, default: 0.05s) with real-time HUD notification updates.
    • Hold Shift while tapping or holding PageUp/PageDown for a 5x elevation speed multiplier.
  • Camera-Zoom Suppression While Adjusting:

    • Eliminates jarring camera zoom in/out while adjusting brush radius or raise height with the mouse wheel. Configurable mode: WhileAdjusting (suppresses only during active adjustment), AlwaysWithHoe, or Disabled.
  • Bypass Valheim's 8m Terrain Height Limit (AllowBeyondGameLimit = true):

    • Removes the engine's hardcoded ±8m ceiling and floor clamps in TerrainComp.ApplyToHeightmap, LevelTerrain, RaiseTerrain, and custom SmarterHoe tools. Allows raising towering earthen bastions or excavating deep moats/canals up to a configurable limit (default: 50m).
  • Adjustable Raise Height & Q / E Mode Switch:

    • Press [E] to select Height adjustment mode, or [Q] to select Area adjustment mode.
    • Mouse wheel dynamically adjusts raise delta (0.05m to 8.0m per click) when Height mode is selected or when holding Alt+Shift+Scroll.
    • Vanilla raise ground now scales cleanly with the selected raise height and radius, with proportional stone consumption in Survival mode.
  • 3D Translucent Raise Cylinder Preview:

    • Live 3D volumetric cylinder preview showing the exact raise height and radius at the crosshair hit point, color-coded by reach (customizable valid and invalid colors and opacities).
  • Dedicated Console Commands:

    • resetterrain [radius]: Reverts terrain modifications within a specified radius back to natural world-gen state (undoable!).
    • remove_forestry [radius]: Clears trees, logs, stumps, and vegetation within the radius.
    • cleardebris [radius]: Clears all rocks, boulders, vegetation, and obstacles within the radius.
    • smarterhoe_undo & smarterhoe_redo: Terminal commands to step backward and forward through history.
  • Memory Safety & Clean Session Transitions:

    • History automatically clears on world exit (Game.OnDestroy) to ensure zero memory leaks across worlds and server hops.
  • HUD Undo / Redo Counter & Real-Time Feedback:

    • All 6 hoe mode HUD panels now display current undo/redo step availability in real time: [Alt+Z] Undo (N) | [Alt+Y] Redo (M).
    • Real-time rotation angle and active control bindings displayed on square brush HUD, accompanied by instant on-screen toast notification banners.
    • Active adjustment badge beside the crosshair dynamically indicates current Area / Height values when modified.
  • True Freebuild Creative Mode (Zero Resources, Zero Stations, Zero Durability, Zero Stamina):

    • Fixed an issue where Freebuild mode ([B]) still required stone in inventory, consumed stone on click, required a nearby Workbench or Stonecutter, and drained stamina and tool durability.
    • Patched Player.HaveRequirements, Player.ConsumeResources, Character.HaveStamina, Player.GetBuildStamina, and Player.GetPlaceDurability so all terrain operations in Freebuild mode require zero materials, consume zero resources, bypass crafting stations completely, and never drain stamina or tool durability.
    • The HUD requirement bar automatically hides stone requirements in Freebuild mode for a clean creative experience.
  • Dynamic Raise Ground & Paved Road Resource Scaling (Height & Area):

    • Fixed vanilla Raise Ground only requiring 2 stone regardless of how high or large the terrain being raised was.
    • Stone cost in BalancedSurvival mode now dynamically scales with physical volume: proportional to both brush Area (radius and Circle vs Square geometry) and Height (SelectedRaiseHeight relative to vanilla's 0.5m baseline).
    • Dynamic HUD requirement sync: the bottom HUD requirement bar immediately displays the exact calculated stone requirement (e.g. 24 Stone) and flashes red if inventory is insufficient.
    • Placement ghost and 3D Translucent Raise Cylinder automatically turn red when stone is insufficient.
    • Real-time stone cost display in the top-middle HUD panel and crosshair adjustment badge as radius, height, or shape is modified.
    • Server-authoritative balance: scales with StonePerCubicMeter and StonePerPavedSquare configs synced from dedicated servers.

Fixed & Improved

  • ComfyGizmo & PerfectPlacement Third-Party Mod Interoperability:
    • Fixed a critical incompatibility where loading both ComfyGizmo and PerfectPlacement alongside SmarterHoe caused a Harmony transpiler collision on Player.UpdatePlacementGhost, resulting in SmarterHoe's patch chain failing and disabling the mod.
    • Implemented ModCompatibilityManager with a universal transpiler interceptor that seamlessly chains ComfyGizmo's rotation delegate after PerfectPlacement's rotation method without throwing IL matching exceptions.
    • Added soft dependency registration ([BepInDependency]) and post-patch repair hooks to restore broken transpiler chains automatically on startup.
    • Registered all custom terrain tool prefabs (SmarterHoe_*) into ComfyGizmo's IgnoredPrefabNames and suppressed 3D rotation gizmos when holding hoe tools, preventing unwanted pitch and roll on 2D terrain brushes.
    • Added an automatic fallback in Player.UpdatePlacement ensuring placement ghost updates, altitude lock, and square visualizers remain 100% active even if third-party mods interfere with UpdatePlacementGhost.
    • Added resilient per-class try-catch blocks around Harmony patch registration to prevent any single third-party hook failure from halting mod initialization.

1.0.1

Fixed & Improved

  • Store Icon Transparency: Replaced icon with true 32-bit ARGB alpha transparency, fixing the gray checkerboard background on dark sites like Hexium and Thunderstore.
  • Hotkey-Only Altitude Lock: Eliminated unwanted auto-locking on tool selection, hover, or clicks. Altitude locking only engages when explicitly pressing [L] or Middle-Click piece snapping. Automatically turns off when unequipping the hoe.
  • Recipe Unlocking Safeguards: Added internal prefab names to known recipes list to guarantee all 6 custom hoe tools unlock properly across game restarts.
  • Zero-Allocation Performance: Added spatial caching to boundary visualizers and zero-allocation capsule queries for debris clearing.

1.0.0

Added

  • Altitude Lock ([L] or Middle-Click) — laser-flat terrain leveling locked to a fixed elevation. Activates strictly upon hotkey use (never auto-locks). Middle-click any building piece to snap the lock to its floor height.
  • Instant Plateau — dedicated hoe build-menu tool that razor-flattens the entire brush area in a single click.
  • Smooth Ramp Auto-Carver ([K] + [H]) — place waypoints and auto-carve smooth graded roads using Catmull-Rom spline interpolation. Supports curved switchbacks and multi-waypoint paths.
  • Dynamic Slope Coloring — ramp guide spine changes color in real time by slope angle: green ≤20° (cart-friendly), yellow 20–25° (steep), red >25° (too steep for carts).
  • Soften Terrain — gently blend rough terrain without hard edges.
  • Restore Terrain — reset terrain within the brush to original world-gen state.
  • Clear Debris — instantly remove trees, logs, stumps, rocks, and ore deposits within the brush radius.
  • Circle / Square Brush Toggle ([G]) — switch between circular and square brush geometry; square brush rotates with player direction.
  • Adjustable Brush Radius — Alt + Scroll or [Alt] + [ / ] resizes 0.5m–15m. Vanilla paving pieces scale to match.
  • Balanced Survival Mode — stone consumption, stamina drain, tool durability wear, crafting station proximity checks, and tool requirements for debris clearing. Press [B] to toggle between Balanced and Freebuild.
Thunderstore development is made possible with ads. Please consider making an exception to your adblock.