Skip to content

Release v2.2.0.0 - #38

Merged
TheCodingDad-TisonK merged 14 commits into
masterfrom
development
Aug 17, 2026
Merged

Release v2.2.0.0#38
TheCodingDad-TisonK merged 14 commits into
masterfrom
development

Conversation

@TheCodingDad-TisonK

Copy link
Copy Markdown
Member

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

TheCodingDad-TisonK and others added 14 commits August 5, 2026 14:09
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.
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
@TheCodingDad-TisonK
TheCodingDad-TisonK merged commit 728e901 into master Aug 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants