Release v2.2.0.0 - #38
Merged
Merged
Conversation
A Lua parse error does not stop FS25 loading the mod. The mod loads, the game runs, and the offending FILE is silently dropped, so one feature is simply absent with nothing but a compiler line nobody reads. On 2026-08-05 seven files across four repos shipped with a UTF-8 BOM, every one of which would have died exactly that way. Lua does not skip a byte order mark the way it skips a shebang, so the BOM is read as part of the first token. - tools/git-hooks/pre-commit: parses the staged .lua set with luaparse pinned to Lua 5.1, then runs the repo lint where one exists. Syntax blocks the commit, lint only advises. - tools/test/check-staged.mjs: the checker. A BOM was already caught, but only as "Cannot read properties of undefined (reading 'range')", which tells you nothing. It now names the BOM and says how to fix it. - node_modules/ gitignored; luaparse is fetched on the hook's first run. Dev tooling only, never shipped: build.sh repos use an INCLUDE allowlist that omits tools/, and the build.py repos exclude it via EXCLUDE_DIRS. Install on a fresh clone: bash tools/test/install-hooks.sh Skip once: git commit --no-verify
development is the trunk, so a PR opened from it silently absorbs every commit that lands while it is open, under a title that still describes the first one. That happened twice in two days, the second time to the seat that had reported it the day before. Every feature, fix or brief now gets its own branch cut from development, and the PR is that branch into development. One item per PR. development to main becomes a release PR only.
docs: one feature, one PR
Co-authored-by: Cursor <cursoragent@cursor.com>
…randomworldevents chore(rwe): leftover MasterHUD bridge
The event HUD's text read straight through the RWE settings panel drawn over it. A panel background is an OVERLAY, and an overlay does not cover text that was already rendered underneath it. The HUD draws first in drawStack, so painting the panel on top of it was never going to hide it. It has to not draw. The guard already existed and had the wrong list: the HUD already stood down for a GUI menu via getIsGuiVisible, but a drawn panel is not a g_gui surface so it could not see one. This adds the panel to the same condition rather than inventing a new rule. isOpen is a FIELD on RWESettingsPanel (:23, flipped by toggle() at :83), not a method as on the SoilFertilizer panel, so it is read not called. The panel itself still draws every frame while open, unchanged: it rebuilds its hitboxes during draw, so skipping it would break its clicks. Fixed in drawStack, which RandomWorldEvents.lua:1144 and the MasterHUD registration both call, so the standalone and MasterHUD paths cannot diverge.
Companion half of the MasterHUD isFullscreen contract. While RWE's settings panel is open, every OTHER companion's HUD now stands down too. Without it their text renders before our panel and reads straight through it, because an overlay does not cover text already drawn underneath. RWE's own event HUD is the single-mod half and is handled inside drawStack. This is the cross-mod half only, and it has an effect only when MasterHUD is present, since MasterHUD owns cross-mod ordering. isOpen is a FIELD on RWESettingsPanel (:23, flipped by toggle() at :83), not a method as on the SoilFertilizer panels, so it is read not called. A function value would be truthy on every frame and the claim would never release. isFullscreen is optional on MasterHUD's side, so an older MasterHUD ignores the field and behaves exactly as before. No version dependency.
…panel fix(hud): the event HUD stands down while the settings panel is open
Resolves the conflict from PR #34 landing on development. Only modDesc.xml conflicted, on the version line. The two changes to RWEMasterHUDBridge.lua auto-merged cleanly because they sit in different regions: #34 added the panelOpen guard inside drawStack, this branch adds the isFullscreen module function above it and the spec field below. Verified after resolution rather than assumed, because an auto-merge of two additions to the same file is exactly where a plausible-looking but broken result comes from: both halves are present and intact, no conflict markers remain, and Lua 5.1 syntax is clean. Version resolved to 2.1.8.2, above development's 2.1.8.1.
…en-claim feat(hud): declare the fullscreen claim to MasterHUD
Keep the role, delegate the mechanism (build brief 2026-07-16): - CUT 13 arcade edges (time warps, reputation writes, cash trickles, magic fuel, free upgrades/cleaning, steering pull, slippery roads, fuel discount). No more timeScale, repPoints or per-60-second money trickles behind the read-signal events. - World/sim events become PULL read-signals announced by RWE; the owning sim systems (SoilFertilizer / CropDisease / DairyCore) apply their own model. Manager read surface completed: getActiveEvent, isEventActive, getProgress, getRemainingTime, getIntensity (nil when nothing is active). - Arcade physics behind the opt-in RandomWorldEvents.arcadePhysics toggle (default OFF, admin SettingsHub key): the four retained physics events only enter the trigger pool when ON, and the Vehicle.addDamageAmount patch scales only the player's own vehicle. - Difficulty rides the Option-Scaling Spine: vendored the pure OptionScalingResolver; the World-events dial scales frequency and base intensity, the Economy dial is exposed via getDifficulty(). Absent spine or dial off = neutral = the mod's own settings. - Event catalog 53 -> 40. Help text and the new arcadePhysics strings updated in 26 languages. Bench added at tools/test/rwe-redesign-bench.mjs (16 checks). The price half (MarketDynamics price modifiers) and the money half (onDayChange settlement via TaxMod) stay gated by design; their existing mechanisms are preserved untouched.
feat(RWE): the redesign non-price half - read signals, arcade toggle, spine difficulty
The vehicle hook ran every engine rebuild in a cab and logged each register, flooding the client log.
…0260816 fix: stop Random World Events cab log flood and skip live action re-register
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Pre-release candidate for the Realistic Farming suite (Aug 17-24, 2026). Major redesign of the non-price event system, MasterHUD fullscreen claim integration, and playtest fixes.
Commits