Version: 2.0.0
Game: Farming Simulator 25
Status: Stable release
Author: SimGamerJen, Hyper138
Crop Control Override is a per-save crop policy manager for Farming Simulator 25. It allows players to control which crops are permitted for the player, which crops NPC farmers may use, and whether NPC crop planting should be limited by field size.
The mod is designed for players who want tighter control over crop realism, map-specific crop suitability, roleplay save rules, NPC field behaviour, and cleanup of NPC fields that no longer match the active crop policy.
The current recommended release is:
v2.0.0 from the main branch.
Older alpha and beta releases are retained for history only.
- What this mod does
- Release highlights
- Installation
- Opening the GUI
- Important concepts
- GUI overview
- Crop rule settings
- Validation and blocked NPC fields
- Reset modes
- RESEED SEASONAL and candidate selection
- Reseed weighting XML
- Configuration files
- Recommended workflows
- Console commands
- Troubleshooting
- Known limitations
- Screenshot checklist
- Changelog
Crop Control Override gives each savegame its own crop policy file. For every crop known to the mod, you can control:
| Setting | Purpose |
|---|---|
| Player Permitted | Whether the crop is available to the player. |
| NPC Permitted | Whether NPC farmers may use the crop. |
| Max Field Size | Optional maximum field size for NPC use of that crop. |
| Reset NPC Fields | Whether blocked NPC fields of that crop may be reset by the cleanup tools. |
This allows you to create map-specific or region-specific crop rules without editing the map directly.
Examples:
- Disable rice, cotton, sugarcane, or other crops unsuitable for a region.
- Allow the player to use a crop but stop NPC farmers from planting it.
- Allow NPC farmers to use a crop only on smaller fields.
- Validate existing NPC fields after changing policy.
- Reset or reseed NPC fields that no longer comply with the active rules.
Version 2.0.0 promotes the beta workflow to the stable release and includes the major validation and cleanup workflow update introduced during beta testing.
Key features:
- FS25-style custom GUI.
- Per-save XML configuration.
- Native selector controls for editable rule values.
- Crop table terminology aligned to the details pane:
Player:ON / OFFNPC:Map Default / ON / OFFLoaded:Yes / No
NOT LOADEDcrop visibility toggle.- Field-level blocked reset scope.
RESET MODEsupport:CULTIVATEDRESEED SEASONAL
- Seasonal reseed candidate detection using FS25 growth data.
- GRASS lifecycle reseed support.
- XML-configurable reseed candidate weights.
- Weighted deterministic reseed variety.
- Dry-run before confirm workflow.
- Diagnostic console commands.
- Download the mod ZIP.
- Place the ZIP in your Farming Simulator 25 mods folder.
- Enable the mod in your savegame.
- Load the save.
- Open the Crop Control Override GUI with
ALT+C.
Typical Windows mod folder:
Documents/My Games/FarmingSimulator2025/mods
Do not unzip the mod for normal gameplay use.
Default keybind:
ALT+C
The keybind can be changed in the Farming Simulator controls menu.
You can also open the GUI from the console:
ccoGui
A crop can exist in the CCO rule list but not be loaded by the current map or mod stack.
The table shows this using the Loaded column:
| Loaded | Meaning |
|---|---|
| Yes | The crop is currently loaded by the game/map/mod stack. |
| No | The crop is in the CCO config but is not currently loaded. |
The NOT LOADED visibility toggle lets you show or hide crops that are present in the XML but not currently active in the save.
Player and NPC permissions are separate.
Example:
| Player | NPC | Meaning |
|---|---|---|
| ON | Map Default | Player can use the crop. NPC behaviour follows map/default behaviour. |
| ON | OFF | Player can use the crop. NPCs should not plant it. |
| OFF | OFF | Crop is disabled from player and NPC use. |
Map Default means CCO does not force a specific NPC permission for that crop. The crop follows the map/game/default behaviour unless another CCO rule, field-size rule, or reset workflow applies.
Shows all configured crop rules.
Use this tab to select a crop and edit its policy in the details pane.
Shows crops where Player Permitted is OFF.
Shows crops with an NPC Max Field Size greater than zero.
Shows crops where NPC Permitted is OFF.
Shows NPC fields that violate the active crop policy.
This is the most important tab when changing NPC rules or field-size limits.
Shows the active configuration path, rule counts, and validation summary.
Shows in-game guidance.
When you select a crop, the right-hand details pane exposes editable settings.
Values:
OFF / ON
Controls whether the crop is permitted for player use.
Values:
Map Default / ON / OFF
Controls whether NPC farmers may use the crop.
Sets a maximum NPC field size for the crop.
0means no CCO size limit.- Any value above
0limits NPC use to fields at or below that size. - The table displays both hectares and acres for readability.
Example:
5.0ha / 12.4ac
Values:
OFF / ON
Controls whether CCO cleanup tools may reset blocked NPC fields of this crop.
If this is OFF, blocked fields of that crop are not reset by the reset workflow.
A blocked NPC field is an NPC-owned field that no longer complies with the active CCO rules.
Common causes:
- The crop has been disabled.
- NPC use has been disabled for the crop.
- The crop has a Max Field limit and the field is too large.
- The crop remains in the field after changing rules.
Validation checks existing NPC fields and reports fields that need attention.
Example validation reason:
field 6.81 ha > max 5.00 ha
The validation screen supports scoped cleanup, so you do not have to reset every blocked field at once.
Reset scopes include:
ALL
CROP: <crop>
FIELD: <field id> <crop>
The Validation screen includes RESET MODE.
Available modes:
CULTIVATED
RESEED SEASONAL
Blocked NPC fields are cleared and reset to cultivated state.
This is the safest cleanup behaviour and matches the earlier reset workflow.
Dry-run example:
resetMode=CULTIVATED action=CULTIVATED reseedCandidate=NONE
Blocked NPC fields are reset and then reseeded using a replacement crop selected by the seasonal candidate engine.
Dry-run example:
resetMode=RESEED SEASONAL action=RESEED_SEASONAL reseedCandidate=GRASS
If no suitable seasonal candidate is available, CCO falls back to cultivated reset.
Fallback example:
action=CULTIVATED_FALLBACK
If the weighted reseed variety chooses to leave a field cultivated, dry-run reports:
action=CULTIVATED_VARIETY
RESEED SEASONAL uses the current game period and crop growth data to find suitable replacement crops.
The seasonal check uses:
growthDataSeasonal.periods[currentPeriod].plantingAllowed
A crop must generally pass:
- Crop is loaded.
- Crop is seedable.
- Crop is allowed by CCO player/NPC policy.
- Crop passes Max Field limits.
- Crop is seasonally plantable in the current period.
- Crop is not in the special exclusion list.
Candidate diagnostics classify crops as:
| Category | Meaning |
|---|---|
| mission | Standard seasonal field/mission crop. |
| lifecycle | Lifecycle crop allowed for reseed, currently GRASS. |
| blocked | Not eligible as an automatic reseed candidate. |
Example candidate output:
CANOLA OK category=mission reason=allowed seasonal=OK
GRASS OK category=lifecycle reason=allowed seasonal=OK
The following crop types are deliberately excluded from automatic reseed candidates for now:
GRAPE
OLIVE
POPLAR
MEADOW
OILSEEDRADISH
RICE
RICELONGGRAIN
These may require special handling and should not be injected into ordinary NPC field cleanup automatically.
CCO supports XML-configurable reseed weighting.
The default bundled config includes:
<settings>
<reseedCandidateWeights seasonalMission="5" seasonalLifecycle="5" leaveCultivated="1"/>
</settings>Meaning:
| Attribute | Purpose |
|---|---|
| seasonalMission | Weight for normal seasonal mission crops, such as CANOLA. |
| seasonalLifecycle | Weight for lifecycle crops, currently GRASS. |
| leaveCultivated | Weight for leaving a reset field cultivated instead of reseeding it. |
Values are clamped from 0 to 20.
Weighted selection is deterministic by field ID. This means the dry-run result should match the confirmed reset result.
<reseedCandidateWeights seasonalMission="5" seasonalLifecycle="5" leaveCultivated="1"/>With CANOLA and GRASS both valid, the weighted pool is effectively:
CANOLA x5
GRASS x5
LEAVE_CULTIVATED x1
This creates a mostly reseeded map while occasionally leaving a field cultivated.
Always reseed where possible:
<reseedCandidateWeights seasonalMission="5" seasonalLifecycle="5" leaveCultivated="0"/>Leave more fields cultivated after reset:
<reseedCandidateWeights seasonalMission="4" seasonalLifecycle="4" leaveCultivated="2"/><reseedCandidateWeights seasonalMission="6" seasonalLifecycle="2" leaveCultivated="1"/><reseedCandidateWeights seasonalMission="3" seasonalLifecycle="6" leaveCultivated="1"/>CCO uses a template/default config and per-save configs.
The active per-save config is stored under:
modSettings/FS25_CropControlOverride/saves/savegameXX.xml
The template/default config is stored under:
modSettings/FS25_CropControlOverride/config.xml
When a savegame is loaded, CCO uses the per-save XML if it exists. If it does not exist, CCO creates one from the template config.
This prevents rules for one savegame from unexpectedly changing another savegame.
The GUI option SAVE DEFAULTS TO CONFIG.XML writes the current active rule set to the template config.
Existing per-save XML files are not overwritten.
The GUI option LOAD DEFAULTS loads the template config into the active save config.
Use this carefully because it updates the active save’s CCO XML.
- Open the GUI with
ALT+C. - Go to
ALL RULES. - Select the crop.
- Change the desired settings in the details pane.
- Click
APPLY. - If validation blocks the change, review the warning.
- Use
FORCE APPLYonly if you intend to allow blocked fields temporarily. - Go to
VALIDATIONto review affected NPC fields.
- Go to
VALIDATION. - Choose
RESET SCOPE. - Set
RESET MODEtoCULTIVATED. - Run
RESET BLOCKED DRY-RUN. - Review the output.
- Click
CONFIRM RESET.
- Go to
VALIDATION. - Choose
RESET SCOPE. - Set
RESET MODEtoRESEED SEASONAL. - Run
RESET BLOCKED DRY-RUN. - Confirm the candidates look sensible.
- Click
CONFIRM RESET.
Expected dry-run example:
field=24 action=RESEED_SEASONAL reseedCandidate=CANOLA
field=65 action=RESEED_SEASONAL reseedCandidate=GRASS
field=77 action=CULTIVATED_VARIETY reseedCandidate=NONE
Expected confirm example:
queued field 24 to reseeded crop CANOLA
queued field 65 to reseeded crop GRASS
queued field 77 to cultivated state
ccoGui
ccoStatus
ccoWhichConfig
ccoReload
ccoHelp
ccoListRules [CROP]
ccoListConfigured [CROP]
ccoListDisabled
ccoListBlockedRules
ccoListLimited
ccoListUndiscovered
ccoValidateSave
ccoScanFields [CROP]
ccoScanBlocked [CROP]
ccoScanSummary
ccoResetBlocked dryrun
ccoResetBlocked
ccoResetNpcFields [CROP|all] [dryrun]
The GUI reset workflow is preferred for scoped reset and reseed mode control.
ccoListNpcCandidates <FIELD_ID>
ccoSeasonProbe [CROP]
ccoGrowthProbe [CROP]
Example:
ccoListNpcCandidates 87
Output may include:
CANOLA OK category=mission reason=allowed seasonal=OK
GRASS OK category=lifecycle reason=allowed seasonal=OK
ccoListFlags [CROP]
ccoFindFruit <namePart>
ccoExplain <CROP>
Check the game log for Lua errors.
If the mod fails to compile or load, the GUI cannot register.
Look for lines like:
Lua compiler error
CCO GUI: custom screen failed
CropControlOverrideMenu class is not available
This usually means the XML GUI or GUI class failed to load.
Check:
- The mod ZIP structure.
gui/CropControlOverrideMenu.xml.scripts/gui/CropControlOverrideMenu.lua.- The game log for stack traces.
The active target should normally be:
modSettings/FS25_CropControlOverride/saves/savegameXX.xml
Use:
ccoWhichConfig
to confirm which file is active.
Run:
ccoListNpcCandidates <FIELD_ID>
Reasons may include:
- Crop is not loaded.
- Crop is not seedable.
- Crop is blocked by CCO policy.
- Crop exceeds Max Field limit.
- Crop is not seasonally plantable.
- Crop is specially excluded.
- Crop is valid but loses deterministic weighted selection.
This is expected.
GRASS is a lifecycle candidate. It participates in weighted deterministic selection alongside seasonal mission crops.
Check the XML weights:
<reseedCandidateWeights seasonalMission="5" seasonalLifecycle="5" leaveCultivated="1"/>Increase seasonalLifecycle if you want GRASS selected more often.
This should not happen under normal conditions.
Possible causes:
- The field state changed between dry-run and confirm.
- Another mod changed the field.
- The save was reloaded with different XML weights.
- The crop candidate set changed.
Run dry-run again immediately before confirm.
RESEED SEASONALonly targets blocked NPC fields in the selected reset scope.- Player-owned fields are not reset by NPC cleanup.
- Some crop types are excluded from automatic reseed because they may require special handling.
- The GUI does not yet expose reseed weights directly; edit XML manually.
- Console reset commands do not expose the full GUI reset-mode workflow.
- Candidate weighting is category-based, not per-crop.
- Seasonal logic depends on FS25 crop growth data being available for the loaded crop.
- Modded crops may behave differently depending on how their fruit type data is defined.
Use these markers to add screenshots later.
-
docs/screenshots/cco_all_rules.png- Main crop table on ALL RULES.
-
docs/screenshots/cco_all_rules_selected.png- Crop selected, details pane visible.
-
docs/screenshots/cco_not_loaded_toggle.png- NOT LOADED crops shown/hidden.
-
docs/screenshots/cco_validation_blocked.png- VALIDATION tab with blocked fields.
-
docs/screenshots/cco_reset_scope.png- RESET SCOPE button showing ALL / CROP / FIELD.
-
docs/screenshots/cco_reset_mode.png- RESET MODE showing CULTIVATED / RESEED SEASONAL.
-
docs/screenshots/cco_dry_run_reseed.png- Dry-run output with CANOLA / GRASS / CULTIVATED_VARIETY.
-
docs/screenshots/cco_summary.png- SUMMARY tab.
-
docs/screenshots/cco_help.png- HELP tab.
Use this pattern:
<!-- SCREENSHOT: short description -->
<!-- Suggested file: docs/screenshots/example.png -->
- Promoted the beta branch to the main stable release.
- Added native selector controls.
- Added NOT LOADED crop visibility toggle.
- Added field-level reset scope.
- Added RESET MODE.
- Added RESEED SEASONAL.
- Added seasonal reseed candidate detection.
- Added GRASS lifecycle reseed candidate support.
- Added XML-configurable reseed candidate weights.
- Added CULTIVATED_VARIETY weighted pseudo-candidate.
- Added deterministic weighted reseed selection.
- Updated validation, dry-run, confirm, and diagnostic output.
Use a backup save when making significant crop policy changes, resetting blocked NPC fields, or using reseed workflows. CCO changes active save configuration and can alter NPC field states when reset tools are confirmed.