Realtime, in-world reloader and editor for GTA V graphics data files.
Edit visualsettings.dat or timecycle files, save, and see the change applied
live — no game restart, no reloading a save, no leaving the area.
Supports both editions of the game with a single .asi (auto-detected at
runtime):
- GTA V Legacy (
GTA5.exe) - GTA V Enhanced (
GTA5_Enhanced.exe)
Covered files:
| File | Reload |
|---|---|
visualsettings.dat |
CVisualSettings::LoadAll() — re-parses and re-pushes to every subsystem |
timecycle cycles (w_*.xml) |
CTimeCycle::Init(4) — rebuilds all weather cycles |
timecycle modifiers (timecycle_mods_*.xml) |
in-place value patching, or the game's modifier loader for structural changes |
- Live reload on save. A file watcher picks up changes to the served files and applies only what changed. A hotkey (default F10) force-reloads everything.
- In-game editor (optional, requires ReShade with add-on support): an
overlay for editing
visualsettings.datand timecycle files directly in the game —- value grids with per-keyframe columns for cycles (time-of-day headers) and an ALL column that sets a whole row at once
- HDR color pickers for
*_col_r/_g/_band*.red/.green/.bluetriples - add / remove modifier parameters (full timecycle var list to pick from)
- searchable file / modifier / category dropdowns, name filter, modified-only view
- right-click row menu: reset to disk values, copy/paste values
- changes auto-apply as you drag (can be turned off)
- Backups. Every save snapshots the file first (
backup\next to it): a pristine.origmade once, plus rolling.bak1..bak3. The overlay has Restore original / Undo last save buttons, and detects files changed by an external editor while you have unsaved edits. - Active at boot. The loader-level redirect means the files you serve are also what the game loads on startup — the reloader doubles as a loose-file loader for these files.
- GTA V (Legacy or Enhanced), single-player. Do not use with GTA Online.
- An ASI loader (e.g. Ultimate ASI Loader).
- Optional, for the editor overlay: ReShade installed with full add-on support. Without ReShade the ASI still does hotkey + file-watch reloading.
- Copy
fxReloader.asinext to the game executable. - Start the game once —
fxReloader.iniand an emptyfxReloader\folder are created next to the executable. - Open
fxReloader.iniand set:redirectFromOwnFolder = true - Put the files you want to edit into the
fxReloader\folder, mirroring the game's data layout:Files you don't put there stay stock. Everything in the folder is active from the next game start.fxReloader\ visualsettings.dat timecycle\ w_extrasunny.xml w_clear.xml timecycle_mods_1.xml ...
- Edit a served file with any editor and save → the change applies in-game within a moment. Or press F10 to force a full reload.
- With ReShade: open the ReShade overlay → Add-ons tab → fxReloader. The Status tab shows whether all game functions resolved and has manual reload buttons; visualsettings and Timecycle are the editors.
- Everything the tool does is logged to
fxReloader.lognext to the game executable — check it first if something doesn't apply.
| key | default | meaning |
|---|---|---|
reloadHotkey |
F10 |
VK code (0x79), decimal, or Fxx (F1..F24) |
watchFiles |
true |
auto-reload when a file in watchFolder changes |
watchFolder |
the fxReloader folder |
directory to monitor |
redirectFromOwnFolder |
false |
serve files from the fxReloader folder (set true — required for edits to take effect) |
unsafeReloadFromHotkeyThread |
false |
debugging only; leave false |
fxReloader reuses the game's own code instead of re-implementing it:
- Redirect — thin hooks on the game's file loaders swap the path of a
served file to the copy in
fxReloader\. This works for the initial load at boot as well as for reloads. - Reload — on hotkey/save, the game's own reload routine is called for the affected subsystem only.
- Marshal — reloads are requested from a watcher thread but always executed at a per-frame hook on the game's update thread; the affected structures are read every frame and must not be rewritten from another thread.
- Modifier patching — timecycle modifier values are written directly into
the loaded
tcModDataentries rather than re-run through the game's loader (reloading a modifier file reorders the internal modifier array, which breaks everything referencing modifiers by index). The variable-name→index mapping is obtained by loading a temporary probe modifier through the game's own parser, so no version-specific memory patterns are involved. When the loader is unavoidable (added/removed parameters), the array order is restored afterwards.
Game function addresses are resolved by scanning the running process with
byte-pattern signatures (both editions' patterns live in
src/game/signatures.h). On a game update that breaks them, see FINDINGS.md
for the full re-resolution walkthrough.
Visual Studio 2022, CMake ≥ 3.13:
cmake -S . -B build -G "Visual Studio 17 2022" -A x64 -DCMAKE_POLICY_VERSION_MINIMUM=3.5
cmake --build build --config Release
Output: build\BIN\Release\fxReloader.asi.
The editor overlay is built against the ReShade add-on API v17 / ImGui 1.91.9
headers vendored in external/. An incompatible (or absent) ReShade at runtime
simply disables the overlay — reloading is unaffected.
fxReloader is free software, licensed under the GNU General Public License v3.0 — see LICENSE. Copyright (C) 2026 CoreFX (crxhvrd@proton.me).
Bundled third-party components keep their own licenses:
src/utils/memory.h— derived from RageOpenV by Chiheb Bacha (GPL-3.0)src/vendor/minhook— MinHook (BSD 2-Clause)external/reshade— ReShade add-on API headers (BSD 3-Clause)external/imgui— Dear ImGui headers (MIT)