Market Dynamics

  • Market Dynamics
  • Market Dynamics
  • Market Dynamics
  • Market Dynamics
  • Market Dynamics
tisonK
409 subscribers
V1.1.9.4
13 822

Futures Missions mod can be found here -> https://github.com/Mmtrx/FS25_FuturesMission

Real-world inspired dynamic crop pricing for Farming Simulator 25. Prices fluctuate daily and intraday based on world events, supply, demand, and economic shocks — no two playthroughs feel the same.

Dynamic pricing engine — every tracked crop has a live price built from a base price, a volatility factor, and a live event modifier stack. Prices drift every in-game minute and shift daily with mean-reversion toward the base. They clamp between 50% and 200% of base so markets stay volatile but never absurd.

Ten world events — Regional Drought, Bumper Harvest, Trade Disruption, Geopolitical Crisis, Biofuel Initiative, Livestock Feed Boom, Pest Outbreak, Cold Snap, Financial Panic, and Protein Premium. Each fires probabilistically with per-type cooldowns and randomised intensity — price swings are ranged, not flat, so markets feel alive and unpredictable. Cold Snap is the first mixed-direction event, boosting some crops while simultaneously suppressing others. Financial Panic is a rare black-swan that pushes every commodity down at once.

Futures contracts — lock in a sell price today for delivery up to 120 in-game days from now. Enter any quantity via custom text input and set any delivery window you need — you're not limited to presets. Fulfill on time for the full locked-price payout; miss the deadline and you take a 15% default penalty on the unfulfilled portion. If FS25_UsedPlus is installed, your credit score scales that penalty between 10% and 20%.

Market screen — a full InGameMenu page with three tabs: live prices with % change and a session trend chart, active world events with intensity and time remaining, and your contract history. Press N or click New Contract to open the contract dialog from anywhere on the screen.

Event tuning — configure exactly which crops are affected by each world event via the in-game Event Settings UI. A Browse Fill Types dialog lets you scroll and click to select crop names, removing the need to type them manually.

Multiplayer (server-authoritative) — price state, world events, and futures contracts all sync across clients. The simulation runs headless on dedicated servers with no GUI dependencies. Contract creation and fulfillment go through validated network events.

Mod integrations — FS25_FuturesMission: completing a harvest mission applies a short-lived supply-spike to that crop, temporarily dropping its price. FS25_UsedPlus: contract outcomes feed your credit score and your score scales the default penalty. Both integrations activate automatically on detection.

Settings — enable/disable dynamic prices, enable/disable events, event frequency, volatility scale, and debug logging, all accessible in-game under ESC > Settings > Market Dynamics.

26-language localization — all Farming Simulator 25 languages included.

Save data is stored in savegameDirectory/FS25_MarketDynamics.xml. Removing the mod mid-save is safe — the file is simply ignored on next load.

Server
Consoles
Changelog
16
  • - Fix contract defaulting on restart by persisting absolute game time and adding a synchronization guard in the update loop.
    - Implement 'Forfeit' action for contract owners, allowing non-admin clients on dedicated servers to manage their own contracts.
    - Refactor XML serialization to use the modern FS25 XMLFile class API, improving stability and fixing type-related script errors.
    - Fix an infinite loop in UPIntegration load logic that caused game freezes at 100% loading.
    - Suppress 'Failed to open xml' errors for missing legacy configuration files.
    - Ensure proper permission checks for admins and master users across UI elements.

  • Market Dynamics now reacts to what's happening in the world. If Random World
    Events fires a market crash, prices will reflect it. If your fields are under
    widespread crop stress, supply pressure nudges prices upward.

    What's new / fixed:
    - Random World Events integration: active economic and field events now
    directly shift crop prices (market boom +12%, crash -13%, export
    opportunity +18%, economic crisis -20%, and more)
    - Seasonal Crop Stress integration: when many of your fields are under
    critical stress, a mild supply-pressure price increase kicks in
    - Delivery time unit (real days vs. in-game days) is now a single global
    setting in ESC > Settings > Market Dynamics instead of a per-contract
    choice — existing contracts are not affected
    - New contract HUD showing your active contracts at a glance
    - Event alerts redesigned with cleaner notifications
    - Fixed contracts not completing correctly at selling points
    - Fixed delivery start time not being saved correctly across reloads
    - Fixed a time-scale warning that could trigger incorrectly during fast-forward
    - Browse Fill Types dialog for easier event configuration
    - Immediate contract delivery now available
    - Event settings sync properly in multiplayer

    Saves: No migration needed. Existing contracts carry over.

  • - Added a new HUD for when there is a active contract
    - Added a dialog that shows up when a event has started
    - Added new strings to all 25 translation files
    - Fixed a issue where contracts made could not be fullfilled while unloading at selling station
    - Added missing strings across all translation files

  • - Added a new HUD for when there is a active contract
    - Added a dialog that shows up when a event has started
    - Added new strings to all 25 translation files

  • - Added missing deliveryStartTime and bcManaged fields to MarketSerializer and network sync (#64)
    - Fixed BCIntegration deadline offset to use daysPerPeriod (#64)
    - Added UPIntegration hooks and fixed modifier removal keys (#64)
    - Added onLoad and getExtraData fallbacks to all stateless events for save load safety (#64)
    - Fixed TradeDisruptionEvent duplicate extra filltype application (#64)
    - Added session start grace period to MarketDynamics to prevent immediate contract defaults on server restart (#63, #60)
    - Implemented MDMMarketSyncEvent to sync server prices and active events to clients, fixing desyncs (#62)
    - Added deterministic oldest-first contract fulfillment logic
    - Registered missing dialogs and added nil guards across core systems

  • - Browse Types (extended) — You can now add individual fill types directly to events via the browser UI
    - Commodity handling expanded — events now support all fill types, not just crops
    - Multiplayer / dedicated server event settings improved for better consistency and reliability
    - Contract completion issue that could prevent contracts from finishing correctly

  • - Created MDMSettingsSyncEvent.lua: A new network event that handles synchronizing all settings (Price toggles, Event Frequency, Volatility, Disabled Events, and Custom Fruit Types) between the server and all connected clients.
    - Sync on Join: When a new player joins the server, they now automatically receive the full current settings from the server so they see exactly what the host sees.
    - Real-time Updates: Whenever any player (with permission) changes a setting in the Settings UI or the Event Settings dialogs, that change is now instantly broadcasted to the server and all other clients.
    - Server-Side Persistence: Because the server now receives these updates in real-time, it will correctly include your custom fruit types the next time the game is saved.

  • - Contracts now sync correctly to all clients on a dedicated server
    - Fixed a loading failure caused by incorrect file paths inside the mod zip
    - Time unit toggle (hours/days) moved into the contract dialog where it belongs
    - Contract input popup restyled and repositioned — no more clipped text field
    - Removed a leftover settings panel that was causing tab conflicts in multiplayer
    - Event Settings is now a footer button (alongside New Contract), easier to find

  • - Improved all the dialogs (should feel less noisy)
    - 2 new options for contract creation (custom amount & custom days)
    - Time Unit toggle added to choose between in-game & real days
    - Rework of the admin commands
    - Several small bugs fixed

  • Instead of picking from preset quantities, you can now enter any amount (liters or units) using the new custom input dialog. Same for delivery windows — type in any number of in-game or real-world days.

    [Save path fix]
    - The save file is no longer created inside a subfolder within your savegame directory. This fixes an issue where dedicated servers rejected uploaded savegames. Existing saves from v1.1.4.x are automatically migrated on first load.

    [Dialog button layout]
    - The quantity preset buttons in the futures contract dialog no longer overflow outside the dialog boundary.

    [Custom input dialog]
    - The hint text at the bottom of the custom input dialog is now fully visible (was being clipped in the previous layout).

    Full changelog -> https://github.com/TheCodingDad-TisonK/FS25_MarketDynamics/blob/main/CHANGELOG.md

  • FS25_FuturesMission has been updated -> https://github.com/Mmtrx/FS25_FuturesMission/releases/tag/v1.1.0.1

    The Market Dynamics tab was overwriting the SERVER SETTINGS tab when playing on a multiplayer server. MDM's tab now always inserts after all existing game tabs (including the MP-only SERVER SETTINGS tab), and recovers automatically if anything shifts tab positions.

  • 3 new events added!

    - ColdSnapEvent.lua — mixed-direction frost event; grain/oilseeds up, forage down; full save/load persistence via getExtraData/onLoad
    - FinancialPanicEvent.lua — black-swan macro shock; suppresses all crops simultaneously; rare, high intensity floor
    - ProteinPremiumEvent.lua — demand-pull protein trend; boosts soybean/canola and milling wheat/barley at different rates
    - Translation keys mdm_event_cold_snap, mdm_event_financial_panic, mdm_event_protein_premium added to all 26 language files

  • - Futures contracts no longer immediately default on the first reload after signing
    - Full multiplayer support for futures contracts. All contract actions (create, complete, cancel, delete) are now sent to the server for authoritative execution and synced back to all connected clients.

  • This update brings a full integration with FS25_FuturesMission (by Mmtrx), fixes several contract and pricing bugs that slipped through since launch, and cleans up confusing in-game messages so you always know where to go.

    What's new / fixed:
    • FuturesMission integration — when FS25_FuturesMission is installed, futures contracts are created through the BetterContracts mission flow and MDM handles the pricing side automatically
    • Savegame migration — existing MDM contracts are handed off to FuturesMission cleanly on first load; no manual steps needed
    • Fixed prices occasionally showing $0 in the market screen
    • Fixed contract list not responding to clicks in some situations
    • Fixed a game freeze that could occur when pressing New Contract with BetterContracts active
    • Fixed contract deadlines and event timers drifting out of sync over long play sessions
    • In-game messages now correctly name FS25_FuturesMission and tell you where to get it if you don't have it

    No save migration needed — your existing save works as-is.

  • Futures contracts now correctly track crop deliveries. Previously, contracts were stuck at 0% filled regardless of how much was delivered. (PriceHook.lua — use fillDelta instead of sellFillType return value, which is not the accepted liter count in FS25.)

Required mods
1
Credits
Comments
21