TacePatch v1.0.0
First packaged release of TacePatch, the ASI patch used by GTA IV: The Actual Complete Edition.
Drop TacePatch.asi and TacePatch.ini next to GTAIV.exe. You need an ASI loader. Built for GTA IV 1.0.8.0 / EFLC 1.1.3.0.
What's in it
| Limits | Engine limits raised - anim .wad dictionaries, model store and the rest - ported from FusionFix's limit adjuster |
| Pain voices | Per-model pain voices, so Niko, Johnny and Luis don't share one grunt |
| Gang loadouts | Configurable gang weapon loadouts |
| Police loadouts | Configurable police loadouts, including rooftop snipers and helicopter crewmen |
| Episode gates | Content locked to a single episode opened across all three |
| Debug console | Live console alongside the game, plus a log file, with per-subsystem tracing |
| Gate profiler | Press a key before an action to see which episode gates it touches |
| Crash logger | See below |
Everything is configurable in TacePatch.ini, which documents every key inline. The defaults are the shipping configuration - you don't need to touch it.
Every patch is a byte-signature search, and anything that doesn't match on your build is reported and skipped rather than silently corrupting the game. TacePatch.log tells you what applied.
The crash logger
If the game crashes, you get a report in a TacePatch Crashes folder next to the .asi, opening with a verdict:
--- Verdict ---------------------------------------------------
Faulting instruction is in GTAIV.exe.
NOT TACEPATCH: no pointers into TacePatch.asi appear anywhere in
the faulting stack (537 words scanned).
Modules present in the faulting stack, by pointer count:
GTAIV.exe 36
ntdll.dll 4
Then the exception with the faulting opcode bytes, a reconstructed call stack, the last file and library the game opened, TacePatch's own patch tally, registers, an annotated stack dump, and every loaded module with its load address.
Two things to know when reading one:
- FIRST-CHANCE reports were seen before anything had a chance to handle the exception - the game may have recovered, so check whether it actually died. UNHANDLED reports are what killed the process.
- Call stack entries marked
[frame]came off the frame-pointer chain and are reliable. Entries marked[scan]are stack slots pointing just after a call instruction: strong evidence, but a stale frame from an earlier call looks identical.
It doesn't replace ZolikaPatch's crash handler - both run, and ZolikaPatch's dumps keep appearing. CrashLogger = 0 turns it off entirely.
Reporting a crash: send the whole .log, not a screenshot. The .dmp beside it and TacePatch.log from the same run both help.