SmarterHoe
Comprehensive Hoe overhaul: Cultivator & crop grid on Hoe, Undo/Redo, Altitude Lock, Instant Plateau, Spline Roads, Measure mode, Live stone cost, Soften/Restore, Clear Debris, Harvest & Replant, CraftyBoxes compat, ServerSync, and 9 languages.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.Prefixunconditionally intercepted everyTerrainComp.PaintClearedcall 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
PaintClearedRotatedpath 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 vanillaPaintCleared. - Corrected the vertex distance calculation in
PaintClearedRotatedfromhm.VertexMaskToWorld(x3, y3) - worldPosto relative mask grid coordinates(x3 - x) * scaleand(y3 - y) * scale, eliminating the half-cell (~0.7m diagonal) offset and preventing sampling outside intended bounds.
- Fixed an issue where
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). WhenEnableCultivatorFeaturesis set tofalse, the Cultivator remains 100% vanilla without any SmarterHoe overlays, visualizers, or input hijacking. - Set the default of
EnableCultivatorFeaturestofalseunder15 - Cultivator Integrationso cultivator modifications remain strictly opt-in.
- Fully decoupled all SmarterHoe placement, rotation, terrain operation, ghost setup, stamina/durability, and HUD patches via
- Build Menu Hotkey & Scroll Suppression:
- Added an explicit
Hud.IsPieceSelectionVisible()guard toPlugin.Update()andPlayer_UpdatePlacement_Fallback_Patchto prevent terrain tool hotkeys (Q, E, R, etc.) and scroll-wheel adjustments from triggering or intercepting selection while browsing through the build menu.
- Added an explicit
Compatibility & Conflict Protection
- Standalone Hoe Radius Mod Conflict Hardening (
HoeRadius/MyDirtyHoe):- Enforced
Priority.FirstonPlacePiecePatchandPlayer_TryPlacePiece_Patchso SmarterHoe intercepts all custom tools (Instant Plateau,Clear Debris,Smooth Ramp,Restore Terrain, etc.) and Farming Grid batch planting before any other mod'sPlacePieceprefix can run. - Enforced
Priority.LastonTerrainOp.Awake,TerrainComp.DoOperation,TerrainComp.InternalDoOperation,TerrainModifier.Awake, andHoePlacementPatch.Postfixso SmarterHoe's dynamic brush radius, raise height, and ghost visualizers always take precedence over competing hoe mods. - Added automatic detection and conflict neutralization in
ModCompatibilityManagerfor 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.
- Enforced
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, andBrushIndicatorWidthunder4 - 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 theFarming 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 becauseEnableCultivatorFeaturesdefaulted tofalseand gated input processing. - Enabled Cultivator integration by default and decoupled
FarmingGridEnabledandAreaHarvestEnabledfrom secondary config gates soF8always toggles the Farming Grid reliably when using the Cultivator.
- Fixed a bug where equipping the Cultivator showed the SmarterHoe HUD at the top of the screen, but pressing
- 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 standardPlantcrops and saplings. - Preserved multi-item requirements (
m_amount > 1) on modded crops and PlantEverything bushes instead of overwriting them to1.
- Extended Farming Grid visualization, spacing calculation, seed/resource validation, and batch placement to support
Additional Bug Fixes & Stability Improvements
- Build Menu Category Tab Isolation:
- Fixed
CustomPieceManager.EnsureAvailableinjecting all 9 Hoe terrain tools into every build menu category tab when PlantEverything added extra tabs andEnableCultivatorOnHoewas enabled.
- Fixed
- Character Save (
m_knownRecipes) Protection:- Fixed Freebuild mode permanently adding plant piece names to
player.m_knownRecipesin the player's.fchcharacter save file.
- Fixed Freebuild mode permanently adding plant piece names to
- Separate Hoe vs. Cultivator Cost Mode Enforcement:
- Fixed
CostModeandCultivatorCostModebleeding into one another when checking requirements, consuming resources/stamina/durability, or toggling cost mode with[B].
- Fixed
- External Container Mod Excavation Fix:
- Fixed excavating/digging (
SelectedRaiseHeight < 0, 0 stone cost) still consuming stone whenAzuCraftyBoxesorValheimPluswas installed.
- Fixed excavating/digging (
- 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 clearedMaterialPropertyBlocktinting 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.
- Unified the 1x1 single-plant threshold (
- Undo Seed Refund Overflow Protection:
- Fixed
UndoManager.Undo()losing refunded seeds when the refund count exceededm_maxStackSizeor when the player's inventory was full (overflow stacks now spawn at the player's feet).
- Fixed
- 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 + Ewhile 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.
- Fixed Auto-Replant failing when the Cultivator was not in the player's inventory, prevented weapon durability drain when harvesting with
- Terrain Operations & Hold-to-Level Fixes:
- Added chunk border synchronization (
SynchronizeChunkBorders) toSoften Terrain,Restore Terrain, andResetAllWaypointsto 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 Lavaconsuming 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 Debrisfrom destroying mature player-planted crops without dropping their harvest whenDropResourcesOnClearis disabled.
- Added chunk border synchronization (
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_resourcesamounts 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, andSetupEquipment. Lingering multiplied values cannot persist across characters or world loads. - Full Mod Compatibility: Restored seamless interoperability with
PlantEverything,Seneal UI, and container-pulling mods likeAzuCraftyBoxes.
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
+2mradius expansion onClutterSystem.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.PaintClearedso 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
SynchronizeChunkBordersto 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.KeepOriginalnow appliesHeightmap.m_paintMaskNothingto 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.
- Fixed an issue where selecting
- 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
KeepExistingmode toRampPaintMode(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).
- Added a dedicated
- Soften Terrain HUD & Tooltip Updates:
- Added the live
[P] Surface: ...paint mode indicator to the on-screen Soften Terrain HUD and hover build tooltips.
- Added the live
- 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.PrefixandLevelTerrainAtAltitudenow properly search child GameObjects forTerrainOpandTerrainModifiercomponents 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).
- Cultivate: Applies authentic fertile farmland (
- Non-Painting Tools Default Enum Dirt Overwrite Fix:
- In
CloneSettingsWithRadiusandTerrainModifier_Awake_Patch, removed an enum equality check (s.m_paintType == TerrainModifier.PaintType.Dirt). BecauseDirtis the default value0of the C# enum, non-painting operations (such as vanilla Raise Ground) were previously evaluatingisPaint = true, settingm_paintCleared = trueand overwriting existing vegetation, cobblestone, or farmland with dirt.
- In
- Cultivator Altitude Lock & Brush Controls:
- Fixed
PlacePiecePatch.PrefixandPlugin.Updateresetting Altitude Lock every frame when holding the Cultivator. When Cultivator integration is active (EnableCultivatorFeaturesorEnableCultivatorOnHoe), players can seamlessly use Altitude Lock, custom brush radii, shape rotation, and Surface Paint cycling while farming.
- Fixed
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:
- In 1.2.3, the lore-friendly lava auto-quenching mechanism zeroed out vertex alpha (
baseAlpha = 0f) on any leveled terrain withtotalDelta > 0.35macross 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). LevelTerrainAtAltitudewas 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 toAlwaysPaved.ExecuteResetTerrain("Restore Terrain to Nature") fell back to corrupted zero-alpha when heightmap build data was unavailable.- Balanced Survival charged stone for leveling ground even when
ScaleStoneCostWithBrushwas false (where vanilla leveling is free).
- In 1.2.3, the lore-friendly lava auto-quenching mechanism zeroed out vertex alpha (
- Resolutions & Retroactive Healing:
- Auto-quenching is now strictly restricted to
Heightmap.Biome.AshLands. Outside the Ashlands and Deep North,ApplyPaintToVertexnow automatically heals any previously corrupted zero-alpha vertices back to1.0f(full healthy vegetation). LevelTerrainAtAltitudenow determines paint type based on the equipped piece (paved_road-> Paved Stone,cultivate-> Cultivated Farmland,replant-> Natural Grass,mud_road/instant_plateau-> Dirt).- Added a dedicated repair patch to
TerrainComp.InternalDoOperationfor 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). - "Restore Terrain to Nature" now explicitly restores alpha to
1.0foutside Ashlands and Deep North. - Leveled terrain no longer charges stone when
ScaleStoneCostWithBrushis false.
- Auto-quenching is now strictly restricted to
- 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 (
Visuals & Compatibility
- Redesigned "Quench Lava" UI Icon:
- Completely redesigned
icon_quench_lava.pngto 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.
- Completely redesigned
- 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 = trueandMaxTerrainDelta = 50munder[9 - Reach & Limits]).
- Added native compatibility detection for Heightmap Unlimited JvL (
- 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".
- 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 (
- Quench Lava Altitude Lock Collision:
- Added
SmarterHoe_QuenchLavaand"Quench Lava"to_cachedIsSpecialNonLockToolso the lava-quenching ghost does not snap into the sky when Altitude Lock is active.
- Added
- Cultivator Cost Mode Tooltip & Placement Ghost Sync:
- Added
CultivatorCostModetocurrentStateHashfor instant cache invalidation inBuildHudTooltipPatchand updatedUpdateFarmingGridWithCostCheckto readPlugin.CultivatorCostMode.
- Added
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_ashlandsknown 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.
- 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 (
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 toZDOVars.s_TCDataunless the client executingSave()is the current ZDO owner. In 1.2.2,SafeClaimOwnershipwas gated behindZNet.instance.IsServer(), which isfalsefor all connected players on a Dedicated Server—causingcomp.Save(false)to silently abort and only update the localHeightmapmesh (hm.Poke). - Resolution (
PrepareTerrainCompForWrite&SaveAndSyncTerrainComp):- Before modifying any
TerrainComparrays, SmarterHoe now callscomp.Initialize(),comp.CheckLoad()(ensuring the latest network ZDO state is loaded before claiming ownership so existing edits are never overwritten), andcomp.m_nview.ClaimOwnership(). - After saving via
comp.Save(), SmarterHoe immediately queues theTerrainCompZDO for network transmission viaZDOMan.instance.ForceSendZDO(zdoID)to all connected peers. - Eliminated eager
hm.GetAndCreateTerrainCompiler()calls on untouched chunks during read-only cost checks,UndoManagerpre-snapshots (CapturePristine), and neighboring chunk scans—preventing empty/duplicate_TerrainCompilerZDOs (m_operations = 0) that previously caused "ground locked" zones in 1.2.1.
- Before modifying any
- Root Cause: In Valheim,
- 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:
CarveAllWaypointsandResetAllWaypointscollected heightmap chunks by queryingHeightmap.FindHeightmapsolely at the discrete waypoint positions with radiushalfWidth + 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 byFindHeightmap, causing the carver to completely bypass the middle chunk while modifying the outer chunks. - Resolution (
CollectHeightmapsAlongPath): Introduced a robust corridor heightmap discovery engine that:- 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. - 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.
- Steps densely along every road segment in increments of $\le 6.0\text{m}$ querying
- Root Cause:
- Undo/Redo Corridor Coverage:
UndoManager.BeginMultiPointOperationnow 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) inCarveAllWaypointsand grass restoration inResetAllWaypointsnow 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) > 10fguard 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.CheckPointsAccessnow 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, wherealpha > 0.6fin the Ashlands designates molten, damaging lava. Valheim's internal color constants (m_paintMaskDirt,m_paintMaskPaved,m_paintMaskCultivated) havealpha = 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 to1.0fon solid land. - Resolution: All custom terrain paint assignments now use
ApplyPaintToVertex, which retrieves the pristine base alpha from the world generator'sHeightmap.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.0fon solid ground), safely extinguishing and removing any accidentally created lava.
- Root Cause: In Valheim, the alpha (
- Restore Terrain Nature Alpha Preservation: "Restore Terrain to Nature" (
ExecuteResetTerrain,ResetSmoothRamp,ResetAllWaypoints) now restores the exact pristinem_baseMaskfrom world generation instead of setting alpha to1.0fviam_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) andFreebuild(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.
- Decoupled the Cultivator 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
CraftFromContainersor similar container mods. - Extended container mod detection in
NearbyChestsCompatto recognizeaedenthorn.CraftFromContainers,redseiko.valheim.craftfromcontainers,com.rockerbunny.craftfromcontainers, and assembly nameCraftFromContainersalongsideAzuCraftyBoxes. - In
Player_TryPlacePiece_Patch, batch planting now sets__result = falseupon executingExecuteFarmingGridPlanting, preventing Valheim's nativePlayer.UpdatePlacementfrom triggering single-pieceConsumeResources, 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.
- Fixed an issue where planting crops (both single-crop and farming grid batch planting) consumed double seeds when using
- Raise Ground 3D Cylinder Preview Opacity Softening & Toggle:
- Softened the default opacity of the 3D raise cylinder visualizer from
0.35/0.30down to0.20/0.15to eliminate blinding highlights and glare when using the Raise Ground tool. - Players can also disable the visualizer completely at any time by setting
EnableRaiseCylinderPreview = falseunder[4 - Visual Indicators]in the config file.
- Softened the default opacity of the 3D raise cylinder visualizer from
- 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
FarmingGridVisualizerwas resetting_validationCursor = 0whenever!gridDirty, hard-capping validation toPointsPerFrame(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".
- 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 (
- 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 = trueandMaxTerrainDelta = 50munder[9 - Reach & Limits]).
- Added native compatibility detection for Heightmap Unlimited JvL (
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_Patchnow 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.Sortover up to 625 grid points inFarmingGridVisualizerthat 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
TerrainCompZNetView ownership claims (SafeClaimOwnership,TerrainOp.Awakepatch,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.
FindTerrainCompAtno 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.HasChunkChangednow safely handles mismatched snapshot array lengths and null asymmetry instead of only comparing element-wise.
- Texture Leak in Icon Loader: Failed
ImageConversion.LoadImagecalls now destroy the orphanedTexture2D, preventing GPU texture leaks when loading custom/modded piece icons. - Custom Piece Prefab Null Guard:
CustomPieceManager.CreatePrefabsOnceno longer callsGetComponent<Piece>()before its null check, fixing a potentialNullReferenceExceptionwith missing base prefabs. - Stale Tooltip Reference:
BuildHudTooltipPatchcache 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:
GetGroundYCachedinFarmingGridVisualizernow evicts the least recently used entry when the cache is full, instead of always overwriting slot 0. - ComfyGizmo Transpile Warning:
SafeGizmoTranspilenow 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:
EstimateLevelStoneCostnow clears_cachedHeightmapListbefore callingHeightmap.FindHeightmap, preventing unbounded list growth and inflated cost estimates from duplicate heightmap entries. - AzuCraftyBoxes Cache Invalidation:
PullFromNearbyContainersnow callsInvalidateCache()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.Addonpickables.Add(p)returning true, preventing duplicate replant spots and extra seed consumption when a Pickable overlaps multiple colliders. - Smooth Terrain Resource Timing:
ExecuteSmoothTerrainnow consumes stamina and durability only after confirming there are vertices to smooth, preventing resource drain on already-flat terrain. - Dead Player Hoe Reach:
Plugin.Updatenow callsRestorePlaceDistance()before early-returning when the player is dead/null/in cutscene, preventing extended placement reach from persisting through death. - Plant Piece Cache Invalidation:
_grownNameToPlantPiecedictionary 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 (
EnableAreaHarvestorEnableCultivatorFeatures/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 overPiece.m_allPieces(thousands of world pieces) and recursiveGetComponentInChildren<Container>searches on all building pieces in player bases. Containers now register and unregister via lightweightContainer.AwakeandContainer.OnDestroyedHarmony patches, making nearby chest detection instantaneous. - Short-Circuited Seed & Stone Scans: Added
neededShortCircuittoNearbyChestsCompat.CountTotalSeedsacross 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
NearbyChestsCompatspatial 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.OnGUInow reads pre-cachedInventorySeedsandChestSeedsdirectly fromFarmingGridVisualizer.Instancerather than running full container and inventory queries across 2–3 Unity GUI passes per frame.
- Dynamic Container Registry (
- 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) forIsPlantOrCrop. Replaced expensive per-frame string allocations (col.gameObject.name), transform hierarchy traversals (IsChildOf), andGetComponentInParent<Plant>calls on up to 256 colliders per frame. - Ghost Visual Pooling & Renderer Caching: Wrapped ghost previews in
GhostVisualpooling objects with pre-cachedRenderer[]arrays. Eliminated per-frameGetComponentsInChildren<Renderer>(true)allocations (1,500+ garbage arrays/sec) and guardedSetPropertyBlockto 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 activeHeightmapinstance; optimized plant growth space checks with direct layer checks (GhostLayer) and root comparisons; pooledGridPlantPointinstances (_pointPool) and used a static comparison delegate. - Boundary Line Caching: Added position, rotation, and dimension dirty-checking to
RenderBoundaryto skip line vertex updates when the cursor hasn't moved, and pre-cachedGroundRaycastMask. - Synchronized Seed State: Streamlined
UpdateFarmingGridWithCostCheckto consume cached seed availability directly fromFarmingGridVisualizer, eliminating duplicate inventory and container checks per frame.
- Snapping Spatial/Temporal Caching: Implemented a smart 0.08m cursor delta and 0.15s TTL cache in
- Base Hitching & Component Storm Elimination:
- Sprinting Component Storm Elimination: In
Plugin.Update, gatedIsLookingAtHarvestable(player)behindInput.GetKeyDown(AreaHarvestKey). This prevents 7GetComponentInParentqueries (Container,Door,Bed,CraftingStation,Sign,Pickable,PickableItem) from firing 60 times per second while holding Shift to sprint. - Build Hammer Exemption Guard: Guarded
CustomPieceManager.RemoveCustomPiecesFromwith_tablesWithCustomPieces. WheneverPieceTable.UpdateAvailableruns 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 inPlayer_HaveRequirements_Patch,Player_ConsumeResources_Patch, andSyncPlantPieceRequirementswith directGetComponent<Plant>()calls. - Physics Buffer Management: Pre-cached
HarvestMask,HarvestFilterMask, andItemMask, and ensured_harvestColliderBufferis cleared withArray.Clearafter overlap checks to prevent GameObject reference retention. - Equip Lag & Multiplayer Desync: Cached reflection members for
ComfyGizmoandPerfectPlacement, prevented TextMeshPro canvas rebuilds inBuildHudTooltipPatch, throttledEstimateLevelStoneCost, cachedHoeLocalization.GetActiveLanguage(), and added remote player guards inPieceTable_UpdateAvailable_Patch,Player_UpdateKnownRecipesList_Patch, andPlayer_SetPlaceMode_Patch.
- Sprinting Component Storm Elimination: In
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 = trueby 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
SyncTerrainPieceRequirementsto refreshHud.SetupPieceInfowhenever 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 inBuildTooltipHelper.
- Fixed baseline raise dimensions in
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.GetAllPiecesInRadiusandContainerscans fromUpdatePlacementGhost,Update,OnGUI, andHaveRequirements. - Replaced expensive heightmap compiler instantiation (
hm.GetAndCreateTerrainCompiler()) during preview hover with non-allocating compiler lookups (TerrainComp.FindTerrainCompiler) and smart spatial caching.
- 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
- Game Crash / UI Exception Fix:
- Fixed an
ArgumentOutOfRangeExceptioncrash inHud.UpdatePieceListcaused by unmatched category label counts when custom categories were injected intoPieceTable. Added automatic padding guard ensuringm_categoryLabelsalways matchesm_categories.Count.
- Fixed an
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
EnableCultivatorOnHoein Configuration Manager instantly updates the active build menu without needing a game restart.
- Added
- 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.
- Added
- Intuitive Ground Lowering / Excavation Tool:
- Unlocked negative raise heights:
MinRaisedefault changed from0.05fto-8.0f(and up to-MaxTerrainDeltawhenAllowBeyondGameLimitis enabled). - Players can now easily lower/dig ground directly using the Raise Ground tool: hold E and scroll down past
0mto 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).
- Unlocked negative raise heights:
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) andReplant(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
AreaHarvestKeyor 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.
- Press C (configurable
- Shift+E Area Harvest Auto-Replant:
- Added
EnableHarvestReplantconfig toggle: when harvesting with Shift + E, immediately replants the same crops in place using seeds/vegetables from your inventory or nearby chests.
- Added
- 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.
- Full native compatibility with AzuCraftyBoxes and vanilla chests within range (
- 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.
- With the Hoe or Cultivator equipped, press N (configurable
- 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
ProtectWardedAreasis 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.
- In Configuration Manager (F1), language selection is presented as a clean dropdown menu (
- Comprehensive Debug Action Logging & Diagnostics (
EnableDebugLogging):- Added
EnableDebugLoggingtoggle (default:false) in the0 - Generalconfiguration group for real-time diagnostic output across all mod actions.
- Added
Fixed
- Complete Overhaul of Clear Debris Resource Drops (
DropResourcesOnClear):- Fixed an issue where destroying trees, rocks, stumps, and bushes with
DropResourcesOnClear = trueproduced zero resource drops. - Recursively traverses tree log prefabs (
TreeBase.m_logPrefab,m_subLogPrefab, andm_stubPrefab) to yield full wood drops. - Correctly fires
DropOnDestroyedacross all root entities, sub-prefabs, and destructibles. - Accurately scales rock and ore drops across all remaining intact hit areas in
MineRock5boulders. - Spawns dropped items safely above terrain level with natural pop velocity and network registration.
- Fixed an issue where destroying trees, rocks, stumps, and bushes with
- Raise Height Delta Propagation Fix:
- Fixed an issue where changing
SelectedRaiseHeightwas ignored duringTerrainComp.DoOperation. It now explicitly appliesPlugin.SelectedRaiseHeightwhenevers.m_raiseis active.
- Fixed an issue where changing
- Multiplayer TerrainComp Ownership Pre-Claim:
- Added an automatic ownership claim for touching
TerrainCompinstances before operations are invoked, ensuring custom radius, square shape, and raise height settings are processed locally.
- Added an automatic ownership claim for touching
- Undo/Redo TerrainComp Precision Matching:
- Updated chunk matching in
UndoManagerto iterate and match the exact nearest chunk center using spatial distance comparison, preventing coordinate ambiguity across adjacent 64m heightmap borders.
- Updated chunk matching in
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(clearingcomp.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, range0.05to1.0).SoftenPasses: Number of filter iterations per click/sweep (default:2, range1to5).
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,AllowBeyondGameLimitis 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
AllowBeyondGameLimitdefault fromtruetofalsein config. Extreme height modifications (>8m) are now opt-in for dedicated server owners and singleplayer worlds. - Native TerrainComp Passthrough:
RaiseTerrain,LevelTerrain, andSmoothTerrainnow 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
BepInDependencydeclarations 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
ServerSyncsystem 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 = BalancedSurvivalto 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).
- Resource Cost Mode Enforcement: Server owners can enforce
- 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.txtare automatically exempt (lockexempt = true) and can modify settings in real-time with instant synchronization to all connected clients.
- Non-admin players connecting to a locked dedicated server cannot toggle cost mode using
- Headless Dedicated Server Optimizations:
- Visualizers, line renderers, crosshairs, and icon texture loaders cleanly bypass headless dedicated server environments (
GraphicsDeviceType.Null).
- Visualizers, line renderers, crosshairs, and icon texture loaders cleanly bypass headless dedicated server environments (
- Integrated official
-
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 betweenScrollWheelAndButtons(default),ButtonsOnly(keyboard only), orScrollWheelOnly.SquareRotationDegrees: Configure degrees to rotate per click/step (default:22.5°, configurable from5.0°to90.0°).
- Rotate the square brush smoothly using dedicated keyboard hotkeys or mouse scroll wheel:
-
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.Localizeengine 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
Shiftwhile 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, orDisabled.
- Eliminates jarring camera zoom in/out while adjusting brush radius or raise height with the mouse wheel. Configurable mode:
-
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).
- Removes the engine's hardcoded ±8m ceiling and floor clamps in
-
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
raiseground now scales cleanly with the selected raise height and radius, with proportional stone consumption in Survival mode.
- Press
-
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.
- History automatically clears on world exit (
-
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.
- All 6 hoe mode HUD panels now display current undo/redo step availability in real time:
-
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, andPlayer.GetPlaceDurabilityso 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.
- Fixed an issue where Freebuild mode (
-
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
StonePerCubicMeterandStonePerPavedSquareconfigs 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
ModCompatibilityManagerwith 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'sIgnoredPrefabNamesand suppressed 3D rotation gizmos when holding hoe tools, preventing unwanted pitch and roll on 2D terrain brushes. - Added an automatic fallback in
Player.UpdatePlacementensuring placement ghost updates, altitude lock, and square visualizers remain 100% active even if third-party mods interfere withUpdatePlacementGhost. - Added resilient per-class try-catch blocks around Harmony patch registration to prevent any single third-party hook failure from halting mod initialization.
- Fixed a critical incompatibility where loading both ComfyGizmo and PerfectPlacement alongside SmarterHoe caused a Harmony transpiler collision on
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]orMiddle-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 + Scrollor[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.
