Description

FS25 Realistic Soil & Fertilizer v1.9.6.0

Realistic Soil & Fertilizer Mod for Farming Simulator 25

Adds meaningful depth to farming without overwhelming complexity. Every field has its own soil health — nitrogen, phosphorus, potassium, organic matter, and pH — that changes based on what you grow, what you apply, and what the weather does. Ignore your soil and yields will suffer. Manage it well and your farm runs more efficiently.

SOIL NUTRIENTS

Each field independently tracks five values:
– Nitrogen (N) — depletes heavily from most crops, especially corn and canola
– Phosphorus (P) — depletes more slowly, matters most for root crops
– Potassium (K) — lost in large quantities with high-yield harvests; especially heavy for potatoes and sugarbeets
– Organic Matter (OM) — improves long-term fertility; manure and compost build it up; chopped straw also contributes
– pH — affects how well nutrients are absorbed; lime and gypsum adjust it

Crops extract different amounts of each nutrient. Fallow fields slowly recover on their own. Legumes (soybeans, peas, beans) provide a spring nitrogen bonus. Growing the same crop consecutively increases nutrient extraction.

FERTILIZER TYPES

The mod supports all major fertilizer types used in the base game and common mods:

Synthetic:
– Liquid Fertilizer — balanced N/P/K, quick uptake
– Solid Fertilizer — higher phosphorus, standard cost
– Digestate — biogas byproduct, strong nitrogen and potassium
– UAN28 / UAN32 — liquid nitrogen solutions
– Anhydrous Ammonia — highest-concentration nitrogen source
– AMS / Urea — dry and liquid nitrogen options
– Starter Fertilizer — high-phosphorus pop-up fertilizer
– MAP / DAP — phosphorus-heavy dry and liquid options
– Potash — pure potassium source

Organic:
– Manure — slow-release, builds organic matter
– Slurry — liquid organic, high in potassium
– Compost — excellent organic matter boost
– Biosolids — good all-around organic option
– Chicken Manure — concentrated nutrients, builds organic matter
– Pelletized Manure — processed for easier application

pH Management:
– Lime — raises pH significantly
– Liquid Lime — slightly gentler than dry lime
– Gypsum — lowers pH slightly, improves organic matter

Crop Protection:
– Insecticide — reduces pest pressure
– Fungicide — reduces disease pressure

Each type has realistic nutrient profiles with appropriate application rates in metric or imperial units.

SPRAYER RATE CONTROL

Control exactly how much fertilizer you apply per pass:
– Rate Up / Rate Down keybindings let you adjust on the fly while in the cab
– 20 stepped rate multipliers from 0.10x to 2.00x in 0.10 increments
– Over-application risk: exceeding 1.25x risks pH and nitrogen burn; at 1.50x burn is guaranteed
– Auto-Rate mode automatically sets the application rate based on how depleted the field is — heavy deficits get more, healthy soil gets less
– Rate persists per vehicle so you don’t lose your setting when you get out

YIELD PENALTY

Low nutrient levels reduce yield. Fields need N, P, and K at or above the optimal threshold for full output. The further below that threshold, the larger the penalty — up to a hard cap depending on how demanding the crop is.

PEST, WEED & DISEASE PRESSURE

Fields track weed, pest, and disease pressure independently. Cultivation reduces weed and pest pressure. Plowing reduces pest and disease pressure more aggressively. Insecticide and fungicide applications reduce the respective pressures directly.

HUD

A real-time soil panel shows the current field’s nutrient levels at a glance:
– 6 position presets (top right, top left, bottom right, bottom left, center right, or custom)
– Custom position is draggable — put it exactly where you want it
– 4 color themes: Green, Blue, Amber, Mono
– 3 font sizes
– 5 transparency levels
– Compact mode for smaller displays
– Toggle the HUD on/off with a keybinding
– All HUD settings are per-player and don’t affect other players in multiplayer

A full Soil Report is also available via keybinding, showing a detailed breakdown for the current field.

SOIL MAP OVERLAY

A color-coded map overlay is accessible while the in-game map is open. Switch between 9 data layers: Nitrogen, Phosphorus, Potassium, pH, Organic Matter, Urgency Score, Weed Pressure, Pest Pressure, and Disease Pressure. Each field cell is colored green/yellow/red based on its current status.

PDA SCREEN

A dedicated page in the in-game PDA with two tabs:
– Farm Overview — full field list showing N/P/K/pH/OM and status for every tracked field, plus farm-wide averages
– Treatment Plan — lists fields that need attention with a breakdown of what they need and why

SETTINGS

Open the settings panel with Shift+O. In multiplayer, gameplay settings are admin-controlled. HUD/display settings are always per-player.

Toggleable systems:
– Fertility system (enable/disable the whole mod)
– Nutrient cycles
– Fertilizer costs
– Seasonal effects (nitrogen behavior changes by season)
– Rain effects (rain causes nutrient leaching)
– Plowing bonus (plowing improves soil health)
– Auto-Rate Control
– Notifications (low nutrient warnings)

Difficulty levels:
– Simple — reduced depletion, lower costs, more forgiving
– Realistic — balanced, standard rates (default)
– Hardcore — rapid depletion, higher costs, no room for neglect

Units: Switch between metric (kg/ha) and imperial (lb/ac) per player.

PRECISION FARMING COMPATIBILITY

If the official Precision Farming DLC is active, this mod automatically enters read-only mode. It does not interfere with PF soil data — it just observes. No conflicts.

MULTIPLAYER

Fully supported. The server controls gameplay settings. Each player controls their own HUD preferences. Field soil data is synced to all clients. New players joining mid-session receive a full state sync automatically.

CONSOLE COMMANDS

Type soilfertility in the developer console (tilde key) to see all commands. Key ones:

soilfertility — show all available commands
SoilEnable / SoilDisable — toggle the mod
SoilSetDifficulty 1/2/3 — set difficulty
SoilFieldInfo <fieldId> — show soil data for a specific field
SoilShowSettings — display current settings
SoilResetSettings — reset everything to defaults
SoilSaveData — force save soil data to disk
SoilDebug — toggle debug logging

COMPATIBILITY

– Works with all maps
– Works with all vehicles and sprayers
– Compatible with crop rotation mods
– No known conflicts with other mods
– Save game compatible — existing saves load normally

INSTALLATION

Extract the zip into your mods folder. Open the settings panel with Shift+O to configure. No additional steps required.

===================================================================
GitHub Repository:
https://github.com/TheCodingDad-TisonK/FS25_SoilFertilizer
===================================================================
COPYRIGHT NOTICE:
All rights reserved. Unauthorized redistribution, copying,
modification, or claiming this mod as your own is strictly prohibited.

Original Author: TisonK
===================================================================

V1.9.6.0
The PDA soil overlay now has a performance setting. Open SHIFT+O, go to Map Overlay → Performance, and choose:

– Low — Best FPS. Recommended for older hardware or standard-size maps.
– Medium — Default. Good coverage on most maps.
– High — Maximum coverage. For 16× maps or players with powerful PCs.

Each player in multiplayer can set their own value independently.
No more opening the developer console to drain your sprayer. The settings panel (SHIFT+O) now has a Drain Vehicle Tanks button on the main page (bottom-right corner). Enter your vehicle, open SHIFT+O, and click it.
All custom fertilizer is drained from the vehicle and attached implements with a 50% refund.

No save migration required.

V1.9.5.0
Players on maps with many fields were experiencing a severe FPS drop (60 → 15 fps) when opening the soil layer view in the PDA. This release fixes it completely.

What changed:
– The soil overlay now renders using a lightweight affine transform instead of calling the game engine once per sample point per frame. On a large map, this cut frame render time from ~60ms down to ~3ms.
– Increased the sample point cap to 20,000, ensuring full field coverage on both standard-size and 16× maps.

No save migration required. Existing saves work without changes.

V1.9.3.0
– Liquid fertilizers (UAN-32, UAN-28, Anhydrous, Starter, Liquid Urea/AMS/MAP/DAP/Potash, Insecticide, Fungicide) are now sold as IBC liquid tanks in the shop
– Gypsum is now purchasable as a big bag directly from the shop
– New SoilDrainVehicle console command — empties custom fertilizer from your vehicle and implements with a 50% refund (useful when you loaded the wrong product)
– Soil report now shows specific product recommendations when nutrients are low

No save migration needed — existing saves load normally.

V1.9.2.0
This update fixes several bugs reported by players — including one that broke the soil overlay on large custom maps, HUD settings resetting on dedicated servers, and a crash that made the HUD stop rendering entirely

What’s fixed:
– Soil overlay on the PDA map now works correctly on 4× and 16× custom maps — previously only the center portion was coloured and most fields showed nothing
– HUD settings (transparency, position, colour theme, font size) now save per-player and survive reconnects on dedicated servers
– All 5 transparency modes now work correctly — Clear and Light no longer cause the HUD to go blank
– The HUD background now shows a subtle colour tint based on your selected colour theme, so transparency level differences are actually visible

No save migration needed. Existing saves load without any changes.

V1.9.0.0
Full changelog -> https://github.com/TheCodingDad-TisonK/FS25_SoilFertilizer/releases/tag/v1.9.0.0

V1.8.7.0
[Fixed]
– Custom fill types now transfer between vehicles
UREA, UAN32, DAP, POTASH, and all other custom fertilizers can now be unloaded from auger wagons into spreaders, pumped from tankers into sprayers, and transferred via any Dischargeable-spec equipment. Previously these could only be filled directly from a big-bag purchased at the shop.

[Improved]
– Soil map overlay fills entire field polygons
The overlay on the in-game map (Shift+M) now fills the full boundary of each field with a solid colour instead of placing a single dot at the field centre. Field shape and size are now clearly visible at a glance.

V1.8.6.0
-Wired up functions for the SoilOverlay system
– Overlay now sets 1 square box per field (poor, fair, good)
– Buttons added but are not yet working

V1.8.5.0
– Added ownership check and seasonal pings for critical field alerts
– Resolved PDA crash and disappearing fill types on dedicated servers
– Improved RMB mouse event handling
– Removed wonky layer rendering in the PDA Screen
– Updated all translation files
– Various minor bug fixes and development documentation updates

V1.8.4.0
– Updated all 26 translation files for the changes made from 1.8.1.0 > 1.8.3.0
– Added back to “correct way” of using the MouseEvent for editing our HUD display

V1.8.3.0
– Refactor of the PDA page
– Sync fix for discrepancy between the HUD and the ESC menu
– Fix for missing filltypes on load (dedicated server)
– Added ownership check and seasonal ping alert

V1.5.2.0
Soil Report overhaul, pressure fix & localization polish

The Soil Report (K key) received a major upgrade over the past two updates, followed by a bug-fix pass that caught a data display error introduced alongside the new features. If you had any weed, pest, or disease pressure on your fields, the report was showing incorrect values — this is fixed.

What’s new:
– Full field detail view — click the ► button on any row in the Soil Report to open a full breakdown: all five soil values with status, weed/pest/disease pressure levels, yield forecast, and a recommendation summary telling you exactly what each field needs
– Weed and pest pressure columns now visible directly in the main report table
– Overall health badge per field row (Good / Fair / Poor) — now correctly considers pH, organic matter, and bio-pressures, not just N/P/K
– Farm Health indicator at the top of the report showing your whole farm’s average condition as a percentage
– Yield forecast in the detail view — see the estimated harvest penalty before you plant

What’s fixed:
– Weed, pest, and disease pressure were displaying as thousands of percent (e.g. “6500%”) in the report
– Fields with bad pH or high weed pressure could still show “Good” status
– HUD text showing raw key names instead of translated text in most languages
– Mouse input in vehicles occasionally triggering the HUD edit mode unintentionally
– Report detail view labels (pH status, OM status, pressure levels) now show in your game language — DE, FR, ES, PL translated; all other languages fall back to English

Saves: No migration needed. All existing saves load without changes.

V1.5.0.0
Yield Forecast & Field Urgency update

Your soil panel now tells you what poor nutrition will actually cost you at harvest — not just that something is red, but roughly how much yield you’re leaving in the field. The full farm report also got smarter about which fields to show you first.

What’s new:
• HUD now shows a live yield penalty estimate (e.g. “Yield ~-18%”) when you’re standing in a field with low nutrients. If your soil is healthy, nothing extra shows — you only see it when it matters.
• The Soil Report (K key) now opens with your most neglected fields at the top, sorted by how urgently they need attention. No more scrolling past healthy fields to find the problem ones.
• Once per in-game year, you’ll get an alert in spring if any of your fields is in critical condition — early enough to do something about it before the growing season.
• New console command: SoilFieldForecast <fieldId> — prints a full breakdown of projected yield loss and what to apply to fix it.

What’s fixed:
• Ukrainian translation corrected.
• Mouse cursor now reliably hides when you close the HUD drag/resize panel.
• Fixed a crash that could occur when resetting mod settings.
• Custom fertilizers (UAN, Anhydrous, MAP, etc.) now correctly charge your bank account when the sprayer is in BUY mode, instead of draining the physical tank.
• Multiplayer: joining clients now see their own fields in the Soil Report instead of the host’s fields.
• Multiplayer: fixed a hang on the “Syncing field ownership…” screen on maps where no land is owned at the start (survival/sandbox maps).
• Stale crop name in the HUD (showing last season’s crop instead of what’s currently growing) is now fixed.

Saves: no migration needed — existing careers load cleanly.

V1.4.6.0
The HUD was displaying a crop from a previous harvest instead of the crop currently growing in the field. For example, if you grew Oat several seasons ago, the HUD could still show “Oat” even after multiple different crops had been planted and harvested since.

This is now fixed. The HUD reads the live field state directly from the game engine, so it always reflects what is actually in the ground. The old crop name is also cleared the moment you sow a new crop. Fields that are genuinely fallow will correctly show as fallow.

No save game changes required — the fix takes effect immediately on load.

V1.4.3.0
– Changed remaining 10000L changed to 1000L
– Improved (extended) pest duration and added to correct hook
– Cleaned modDesc (& becomes &)

V1.4.2.0
1.4.0.0 is LIVE! (but as you can see we are already 2 hotfixes behind)

Previous versions can be found on Github (from 1.4.0.0 to 1.4.2.1) here:
-> https://github.com/TheCodingDad-TisonK/FS25_SoilFertilizer/blob/main/CHANGELOG.md

In this update:
– Added missing text strings for the 2 new types added
– Both types are also added in `constants` file and declared propperly (instead of empying in 3 seconds)

V1.3.1.0
Bug Fixes:
– Fixed: Custom fertilizers (UAN32, UAN28, Anhydrous, Starter, UREA, AMS, MAP, DAP, Potash) now correctly show spray and spread visual effects when applied — previously no particles appeared on screen
– Fixed: Soil data was not being loaded correctly when starting a brand new career save
– Fixed: Multiplayer clients were not receiving soil data when joining a server — fields appeared empty until a harvest or fertilizer event happened
– Fixed: Mod was entering a broken “read-only” mode when Precision Farming DLC was detected, causing soil tracking to silently stop working. Both mods now run fully independently with no conflicts

Compatibility:
– Precision Farming DLC: fully compatible — both mods track independently, no conflicts

V1.2.0.0
Saved sprayers and spreaders were broken after a save/load — they wouldn’t accept any custom fertilizer types (UREA, DAP, UAN32, etc.) until you bought a new one from the shop. This update fixes that completely, along with a full stability pass across the mod.

What’s fixed:
– Saved sprayers and spreaders now correctly accept all custom fertilizer types after reloading a save
– Big bag fertilizer fill triggers now work properly with all custom fill types
– Spreaders and planters now correctly show the fertilizer rate selection menu
– Rate selection keys ([ and ]) now work inside spreader and planter vehicles
– HUD now shows correctly for spreaders and planters, not just liquid sprayers
– Fixed a game API change that caused key hint display errors in the log
– Fixed missing localization strings that caused blank UI text in some languages
– Fixed plowing bonus not applying (hook was silently never firing)
– Fixed fertilizer application notifications spamming every frame instead of once per field per day
– Chopped straw now correctly contributes to soil organic matter
– HUD position now saves and restores correctly between sessions

What’s new:
– Custom HUD icons for all 9 fertilizer types
– Yield forecast panel in the HUD showing crop health impact
– Big bags available in the shop for all 9 custom fertilizer types
– Soil report recommendations improved with more useful guidance

No save migration needed — your existing saves work as-is.

V1.9.1.1
If you saw errors in your log about missing DDS files, this update fixes it

– Fixed: custom HUD icons for fertilizer types were not loading (UAN32, UAN28, Anhydrous, Starter, Urea, AMS, MAP, DAP, Potash)

V1.1.9.0
– Each fertilizer type now has its own unique HUD icon (UAN32, UAN28, Anhydrous, Starter, Urea, AMS, MAP, DAP, Potash)
– Granular fertilizers (Urea, AMS, MAP, DAP, Potash) now show custom fill plane textures inside equipment
– Soil report dialog is wider — the recommendation column no longer cuts off text
– Fixed a bug where soil report recommendations displayed “Missing ‘…'” instead of the actual advice

V1.1.7.0
A handful of quality-of-life improvements and a crash fix rolled into one update. The biggest addition is a live yield forecast in the soil HUD so you can see exactly how much your harvest will suffer before you even start the combine.

What’s new / fixed:
– HUD yield forecast — the Soil Monitor now shows an estimated yield penalty when your N/P/K levels are too low for the crop you’ve planted. Demanding crops like potato and sugar beet feel the hit harder than tolerant ones like barley or oat. Green = you’re fine; yellow/red = go fertilize.
– Big bags for all fertilizer types — AMS, Anhydrous, DAP, MAP, Potash, Starter, UAN28, UAN32, and Urea are now available as purchasable big bags from the shop, alongside the existing pallets.
– Black screen fix — fixed a crash on map exit that could cause a black screen when mods like AdditionalGameSettings were also installed.

Saves: no migration needed — existing saves load normally.

V1.1.6.2
– Add fillTypes.xml with proper FS25 external format (root <map> element)
– Register fill types in SPREADER/SPRAYER categories for equipment compatibility
– Add bigBag vehicle XMLs and multiPurchase XMLs for UAN32, UAN28, ANHYDROUS, STARTER (liquid) and UREA, AMS, MAP, DAP, POTASH (solid)
– Register bigBag child items as storeItems so multiPurchase can find them
– Fix $moddir$ path resolution — strip prefix from element text/attributes, keep only in parentFile attribute overrides
– Replace FS22-style inline fillTypes in modDesc.xml with filename reference
– Remove old pallet storeItems from store (replaced by big bags)

V1.1.6.1
– Changed type name from SLURRY to LIQUIDMANURE

V1.6.0.0
– Harvest hook: replaced non-existent FruitUtil.fruitPickupEvent with Combine.addCutterArea — nutrient depletion on harvest was silently broken since release
– Ownership hook: replaced non-existent g_farmlandManager.fieldOwnershipChanged with g_messageCenter:subscribe(MessageType.FARMLAND_OWNER_CHANGED) — hooks now 5/5 instead of 3/5

V1.1.5.0
Soil fertility changes were being calculated independently on every machine in multiplayer, causing fields to desync between the host and other players over time. This hotfix ensures only the server runs the calculations.

What’s fixed:
– Harvest, plowing, weather, and field ownership effects now only apply on the server and sync correctly to all players
– No more fertility desync in multiplayer or on dedicated servers

No save migration needed.

V1.1.4.0
NEW FEATURES:
– Auto-Rate Control (Variable Rate): Sprayers and spreaders can now automatically adjust application rates based on the field’s nutrient needs. Toggle this mode with Left Alt + Z.
– Gypsum Support: A new fertilizer type has been added! Gypsum helps stabilize soil pH toward neutral (7.0) and provides a subtle boost to Organic Matter (OM) to improve soil structure.
– Enhanced Sprayer HUD: The sprayer rate panel now features a green “AUTO” indicator when variable rate control is active, and displays your specific nutrient targets (N, P, K, pH, or OM).

TECHNICAL IMPROVEMENTS:
– Multiplayer Sync: Added dedicated network events to ensure Auto-Rate status is perfectly synchronized for all players on a server.
– Variable Math: Implemented a dynamic multiplier system that calculates the exact “Nutrient Debt” of a field to prevent under or over-application in Auto-Mode.
– Localization: Full translations added for Auto-Rate and Gypsum in all supported languages.

V1.1.3.0
Previously, dragging the HUD to a new position would work in-session but the position setting dropdown had no way to reflect that — and selecting any preset would snap the HUD back.

What’s New:
– New Custom option in the HUD Position setting
– Drag or resize the HUD in-game → the setting automatically switches to Custom
– Your custom position is saved and restored on every reload
– Selecting a preset from the dropdown still snaps the HUD to that position as before

No save migration needed — existing saves work as-is.

V1.1.2.0
The Soil HUD position, scale, and visibility were lost every time you reloaded your save. The HUD would snap back to its default position and reappear even if you had hidden it with the J key.

What’s Fixed:
– HUD position and scale now save on every game save and when exiting the game
– Hiding the HUD with the J key now persists across reloads

No save migration needed.

V1.1.1.1
Two bugs were quietly causing fertilizer application and crop tracking to produce wrong results with no obvious error in-game. This update makes sure your work in the field is actually being counted.

What’s fixed:

– Dry fertilizer spreaders (Pelletized Manure, etc.) now correctly update your soil values — previously the mod silently failed to register the application
– Crop detection now always reflects what’s currently growing in a field, not what was there last season

No save migration needed — existing saves load normally.

V1.1.1.0
The HUD and Soil Report were always showing the last harvested crop instead of what’s currently growing in the field. Plant wheat after corn and both panels still said “Corn” — that’s now fixed.

What’s fixed:
– HUD and Soil Report now correctly show the crop currently growing in the field – Fallow fields still display “Fallow” as expected
No save migration needed — existing saves work without changes.

V1.1.0.0
Full changelog -> https://github.com/TheCodingDad-TisonK/FS25_SoilFertilizer/releases/tag/v1.1.0.0

V1.0.9.0
v1.0.9.0 -> v1.0.10.0 (but KM doesnt allow number 10)

The HUD has been completely rebuilt. It now shows live field data for whatever field you’re standing on — no more static legend that told you nothing useful.

What’s new:
– HUD now displays real-time N/P/K levels, pH, and organic matter for your current field, with color-coded status bars (Good / Low / Critical)
– Shows the field name, current crop, and whether fertilizer has been applied
– HUD is now moveable and resizable — right-click it to enter edit mode, drag to reposition, drag a corner to resize, right-click again to save
– Per-vehicle fertilizer application rate control — adjust how much each sprayer applies directly from the cab (new key bindings)
– Expanded fertilizer profile library with real-world agronomic types (urea, DAP, MAP, potash, dolomite, digestate, and more)
– Fixed a crash when using sprayer rate key bindings
– Fixed new fields starting with incorrect soil values (now matches base game)

No save migration needed — existing saves load normally.

V1.0.8.1
The mod was showing healthy soil values right from the start of a new game, while the base game was simultaneously telling you your fields needed liming and fertilizing. Both systems were right — they just weren’t tarting from the same place. This update fixes that.

What’s fixed:
– Fields now start slightly acidic (pH ~6.0) and with moderate nutrients, matching the base game’s “needs lime / needs fertilizing” starting state
– Applying lime or fertilizer now brings both systems into agreement at the same time
– Added CC BY-NC-ND 4.0 license
– Refreshed README with clearer instructions and feature descriptions

Your existing saves are not affected. Fields already tracked in your save keep their current values — only new or untracked fields use the updated starting values.

V1.0.8.0
– Fixed a silent bug where fields were not being tracked correctly.

FS25 field objects do not expose a numeric field ID directly — the mod was looking in the wrong place, so field fertility data was never initialized and plow events were silently ignored.

What’s fixed:
– Field fertility now correctly initializes for all fields on game load
– Plowing now properly registers on the correct field, applying soil organic matter bonuses as intended
– No save migration needed — data will re-initialize automatically

If you were seeing fertility data that never changed, or plowing that seemed to have no effect, this update
resolves both issues.

V1.0.7.3
[Multiplayer Hotfix]

Bug 1 – Settings permanently locked on dedicated server:

The settings UI captured admin status only once (at first open), guarded by `soilFertilizer_initDone`. If the user database hadn’t populated yet on join, all controls stayed disabled for the session. Now `updateAdminState()` is called on every frame open so admin status is always current.

Bug 2 — HUD setting changes affected all players:

`hudPosition`, `hudColorTheme`, `hudFontSize`, `hudTransparency`, `hudCompactMode`, and `showHUD` were routed through the server and broadcast to every client. Moving your HUD moved everyone else’s HUD too. These settings are now marked `localOnly = true` in the schema — they bypass the network at all three layers (client send, server apply/broadcast, sync receive). Each player controls their own HUD independently, no admin required.

V1.0.7.2
The checkmark character (Unicode U+2713 / decimal 10003) was used in five HookManager.lua log messages printed when hooks are installed at startup. FS25’s bitmap font does not include this glyph — the engine stalled on a missing-character lookup each time the log was flushed to screen, causing a noticeable freeze right after the mod loaded.

All five occurrences replaced with plain ASCII [OK]. The “Character ‘10003’ not found in texture font” warning is gone, and so is the freeze.

V1.0.7.0
The HUD (J key) has been repurposed from a live per-field data display into a quick-reference legend. The full field data is now properly served by the Soil Report dialog.

– Fixed settings page injection that caused other mods’ settings pages (Graphics, Better Contracts, etc.) to appear white/blank when SoilFertilizer was loaded
– Fixed a latent runtime error in the HUD where self:getActionName() was called but the method did not exist on SoilHUD
– Added g_fieldManager:getFieldAtWorldPosition() as the primary field lookup (Tier 0) — the most accurate FS25 API, resolving mismatches on complex or dense maps
– Added color coding for N / P / K

V1.0.5.1
– Added safe string conversion for nil fieldIds
– Implemented proper RVB (Register-Validate-Bind) pattern with all required parameters
– Added missing <actions> declaration in modDesc.xml
– Implemented NPCFavor’s proven field detection pattern with 500m fallback
– Added natural soil variation (±10% nutrients, ±0.5 pH, ±0.5% OM) with deterministic seeding
– Added multiplayer safety guard – only server creates fields, clients wait for sync

V1.0.3.1
– Added template validation functions for all element types
– Implemented template caching to ensure consistency
– Added candidate scanning with validation before accepting templates
– Added post-clone validation to catch structural issues
– Cache resets on retry to handle mod load order changes
– Improved error messages for debugging template failures

V1.0.3.0
This release fixes critical GUI injection and validation issues that prevented the settings menu from appearing reliably. The mod now works correctly in both singleplayer and multiplayer modes, even when other mods are installed.

– Fixed settings menu not appearing in game
– Fixed network settings errors in multiplayer
– Fixed module loading errors (NetworkEvents.lua)

V1.0.2.0
Architecture Refactor & Multiplayer Improvements

New Modules:
– HookManager — Proper hook lifecycle management (install/uninstall) for all game hooks
– SettingsSchema — Single source of truth for all settings definitions, reducing touch points for new settings from ~10 to 1
– Constants (SoilConstants) — All magic numbers extracted into a centralized config (crop rates, fertilizer profiles, recovery rates, thresholds, timing, difficulty multipliers)
– Logger (SoilLogger) — Consistent [SoilFertilizer] log prefix across all files

Multiplayer:
– Added SoilFieldUpdateEvent — server-authoritative per-field soil data sync on harvest/fertilize
– Field data now included in full sync event for joining players
– Network sync retry logic (3 attempts, 5-second intervals) for full sync requests

Bug Fixes:
– Converted unsafe direct function replacements (Sprayer.spray, environment.update) to Utils.appendedFunction for better mod compatibility
– Added field data cleanup on ownership change (memory leak fix)

Code Quality:
– Refactored SoilFertilitySystem with clean delegate methods (onHarvest, onFertilizerApplied, onFieldOwnershipChanged, onEnvironmentUpdate)
– Simplified SettingsManager, Settings, and SoilSettingsUI by driving them from the schema
– Updated modDesc version descriptor from 92 to 105
– Added community localization improvements (PR #9)

V1.0.1.4
– Added 6 missing functions
– Improved error handling with pcall()
– Improved consistent logging system
– Added nil safety checks
– Improved hook management to prevent duplicates

V1.0.1.3
– Added 3 new settings (Seasonal Effects, Rain Effects, and Plowing Bonus)
– Improved GUI initialization
– Improved compatibility checks

V1.0.1.2
Changelog:
– Fixed `SoilFieldInfo` command now properly initializes and returns field data
– Improved daily soil updates with weather/season effects
– Fixed small bug in settings UI

Not working:
– Visual soil indicators on map (no color changes yet)
– Crop yield effects (doesn’t change harvest amounts)
– Fertilizer cost adjustments (setting exists but not implemented)
– Equipment wear/tear from soil conditions
– Soil texture/sand/clay effects

Planned:
– Crop rotation bonuses – doesn’t give yield bonuses for good rotations
– Cover crop effects – doesn’t recognize cover crops
– Soil compaction – from heavy equipment
– Irrigation effects – on nutrient availability

V1.0.1.1
– Fields can be scanned, but will give default values for now
– Precision Farming now correctly detected and sets read-only mode.
– Fixed settings tab (When u have FS25_WorkerCosts issues WILL appear in the game)*
– Lazy initialization added to prevent crashes on servers/clients.

*Will be fixed soon!

V1.0.1.0
!!! Please read this carefully !!!

When the mod is used together with mods like Precision Farming, the settings are not available in the pause menu for now. You can configure it using the console. I’m working on a proper fix for this.

You can still use the mod with other mods, but there won’t be a settings tab in the pause menu. Keep this in mind.
There might still be issues, but I have tested it on my own machine and got no errors after the changes. For this reason I pushed this version.

Please create an issue on the GitHub repo if you get any errors after this changelog!

– Fixed settings tab overlapping with other mods in pause menu
– Fixed game crash when updating before fields were scanned
– Fixed “pairs() table expected, got nil” error in SoilFertilitySystem
– Fixed multiplayer and dedicated server compatibility
– Fixed GUI injection failures causing settings menu issues
– Added full compatibility with Precision Farming mod
– Added Used Tyres mod compatibility (GUI disabled, console commands work)
– Added dedicated server support with automatic GUI disabling
– Added config file for user customization options
– Added mod conflict detection and auto-compatibility mode
– Added console-only mode for server environments
– Improved GUI spacing to prevent overlapping with other mods
– Improved field scanning with nil safety checks
– Improved error handling throughout the mod
– Improved multiplayer stability and server/client detection
– Improved logging and debug information
– Improved settings menu layout and button persistence
– Ensured fieldData always initializes as a table (not nil)
– Changed initialization order to prevent premature updates
– Changed GUI injection to avoid conflicts with other mods

V1.0.0.5
– Fixed major issue with the shop screen and the in-game map
– Temporarily disabled settings via the pause menu due to ongoing conflicts
– Added compatibility for Precision Farming
– Ensured `self.fieldData` is always initialized as a table (not `nil`)
– Added type checking before using `pairs()` to iterate
– Added improved error logging for debugging
– Fixed a game crash when the mod attempted to update before fields were scanned

Credits

tisonK