BH FULL FUNCTIONAL DRILL RIG — PC GAME-TEST BUILD
Validation report | 2026-10-20 | Version 0.11.1.0

SUMMARY
PASS — Actual Lua script compiles using the Lua interpreter embedded in TeX.
PASS — 74 runtime assertions execute the updated Lua controller against
       focused test fixtures/mocked FS25 native services.
PASS — Native WATER tank remains defined as 20,000 L WATER in the silo XML.
PASS — The 93 symbolic i3d reference attributes in the rig/silo XML all resolve.
PASS — The XML definitions parse; BH Store-only dependency remains intact.
PASS — All five packaged machinery/alarm OGG files decode; peaks remain under
       0 dBFS. Drilling recording decoded peak is -3 dBFS after mastering.
PASS — Exact modifications are saved in Lua, XML, readme, and sound file.
NOT TESTED — Actual FS25 engine behavior, trailer fill raycast, complete game
       object activation, placement/selling, audio mix, lighting and multiplayer.

MAIN 0.11 FEATURES TESTED
- Unlimited drilling starts and continues past an hour; automatic pipe rack
  resupply removes the previously exhausted-pipe stop for long operations.
- Stop and Start preserve the current bore and joint pose. Mid-joint stops
  can restart without losing the pipe, and the pump stops while parked.
- Shift-duration commands include Unlimited, 5, 10, 15, 30, 60, 120 minutes.
- A 20% independent gas event roll is performed once per 180 real minutes of
  continuous automatic drilling (with its mud pump running). The event is server-owned (not accelerated game time).
- Deterministic simulations verify a 0.1 sample triggers, 0.9 doesn't,
  and exactly 20 of 100 evenly-spaced sample values are below the 20% limit.
- Gas detection pauses the drill and stops the pump, latches an alarm, and
  requires ACK / Silence then Reset / Rearm before Resume works.
- Routine completion has NO gas alarm. Timed shifts restart after completion.
- A dried-out rig can restart with newly delivered WATER: one native storage
  server command test consumed exactly 1,900 L to prime a 100 L reserve
  back to 2,000 L and accepted START without a MUD order.
- Auto mud-water makeup consumes from the real WATER storage model while
  the mud system returns and recirculates virtual fluid. No other hauled fluid
  type or bought additives required. Server mock exposes native Storage
  :getFillLevel and :setFillLevel; consumption uses the setter and stays >=0.
- Fluid accounting proves mud tank + retained-in-well + loss = initial mud
  + water makeup taken. A multihour stress test keeps tank levels bounded.
- Network serialization round-trips new gas reason, gas timer, counts,
  water consumption, and Unlimited duration using the real stream field list.
- An existing v0.10 (saveVersion=2) rig stopped in COMPLETE state becomes
  an idle Unlimited rig without losing pipe, bore or mud quantities.

OBSERVED PURE-CONTROLLER DEFAULTS
After a five-real-minute test slice: 279.0 litres of WATER were used from
native mock storage at the authored equipment rates. A further 60-minute
continuous test simulated 3,560.9 litres total makeup consumption and
844.9 m of recorded bore depth, with pipe automatically restocked as required.
These are deterministic behavior-fixture results, not observed FS25 gameplay;
actual use varies with the ratio of feeding, retrieval and idle pumping.

NATIVE WATER FILL / KNOWN INTEGRATION LIMITATION
A <silo> with a 20,000-L native WATER storage, WATER unloading station and
mapped WaterUnloadExactFillRoot is preserved in the shipped placeable XML.
This enables ordinary compatible FS25 WATER trailer deliveries in principle.
The container cannot run Farming Simulator 25 or GIANTS Editor; therefore
actual trailer filling, fill-level UI and receiver contact still NEED in-game
verification. Do not report this test as an actual trailer unload.

RECORDED AUDIO
The packaged drilling recording is the retained CC0 recording identified
by the creator as a drilling rig near Tioga, North Dakota. For this update
its exported Vorbis audio was boosted +3.0 dB to a decoded -3.0 dBFS peak,
and the playback multiplier was raised from 0.68 to 0.98. The output is
measurably louder without a digital clipping peak. Spatial distance and
balance require the game. Other real machine recordings remain credited in
sounds/AUDIO_CREDITS.txt and their XML volume/distance values are increased.

PACKAGE / STORE
Top-level modDesc.xml and landRig.xml are preserved; no extra folder level.
Dependency: FS25_BH_OilfieldStore_PC, without a competing BGS category pack.
Construction sale support, collision geometry and original I3D are kept.
The existing authored rig model and companion I3D shapes are unchanged;
only the playable functionality, audio tuning and documentation are revised.

ENGINE TEST CHECKLIST
1. Close FS25, replace previous FS25_BH_FullFunctional_DrillRig_PC.zip.
2. Place through BH Oilfield Store and check that it is sellable.
3. Start Unlimited, stop, restart; verify the pipe retains progress.
4. Fill WATER using a compatible tanker at WATER IN and check level.
5. For the first GAS check, let active drilling accumulate 3 REAL HOURS;
   20% chance of alarm, otherwise it keeps drilling without interruption.
6. When gas alarm occurs, verify horn is audible and alarm LED flashes;
   ACK > Rearm > Resume must let drilling continue.
7. Save/reload during an operating or held pipe feed.
8. Confirm ambient recorded drilling sounds noticeably louder than 0.10.
9. Send FS25 log.txt and exact controls used if anything is unavailable.

V0.11.1 PATCH
- Changed gas check from 5-minute intervals to 3 REAL hours (180 minutes).
- If the 20% roll fails, no alarm and no drilling interruption.
- On detection: latched alarm pauses drilling; ACK / Rearm / Resume.
- Old five-minute counter is cleared on migration, all pipe/water/depth retained.
- Source/mastered recordings and water hauling configuration unchanged.
- ALL 74 executable Lua assertions passed, including clear-then-alert
  gas checks at 3h and 6h with uninterrupted RUNNING state on a clear check.
