Skip to content

TacePatch v1.0.0

Choose a tag to compare

@Flentric Flentric released this 06 Sep 12:45
· 31 commits to main since this release

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.