Game Mods

ACM Documentation

Reverse-engineering and modding reference for Call of the Wild: The Angler, including file formats, the interaction system, the ACM launcher, and implementation notes behind released mods.

Project Overview & Toolset

00_projectdocs-site/docs/docs5 sections

Project Overview & Toolset

What game this targets

Call of the Wild: The Angler, Steam executable `CotWTheAngler_Steam.exe`.

Built on an Avalanche Engine variant sharing tooling lineage with Just Cause

3/4 and generic "Deca" format tooling. There is no official mod support and

no Nexus-integrated mod manager from the developer — everything here is

third-party tooling and reverse engineering.

Folder layout of the toolkit

  • `Files/` — the game's own files, unpacked here for editing reference. This

is a full extraction of every game archive, browsable exactly like the

developer's own source tree would be.

  • `Tools/` — the AVTeX texture viewer, which lets texture files be opened and

previewed like ordinary images once associated with the file types.

  • `Toolset/` — the actual command-line converters (see below), plus a save

file editor.

  • `Work/` — scratch space: where files get copied to before editing, and

where in-progress and finished mods live before packaging.

  • `Angler_Batch.exe` — a drag-and-drop dispatcher. Drop any supported game

file onto it and it auto-selects the right converter tool. Double-clicking

it directly opens the archive viewer (used for bulk-extracting the game's

files in the first place).

Important: keep this whole toolkit at a short file path (e.g. `D:\Angler

tools`). Long paths (e.g. deeply nested under `Documents`) cause real

failures in the underlying tools.

Toolset executables (in `Toolset/`)

All are .NET console tools; run with no arguments to see usage.

  • `Gibbed.TheAngler.ArchiveViewer.exe` — GUI browser for the game's packed

archives (`archives_win64`). Used to do the initial full extraction into

`Files/`. Also has a "Detect Types" feature for reclassifying files the

extractor couldn't identify (they land in an `__UNKNOWN` folder otherwise).

  • `Gibbed.TheAngler.SmallUnpack.exe` / (implicitly, its packing counterpart)

— unpacks a SARC-format `.ee` (Avalanche archive) into a directory tree

plus a `@files.xml` manifest. This is the tool for AAF-family files

specifically (see File Formats doc). Supports an embedded TANM chunk for

section naming (present automatically after one round-trip) or an

external `core.db`/`.namemap` file.

  • `Gibbed.TheAngler.Unpack.exe` / `Gibbed.TheAngler.Pack.exe` — operate on

`.tab`/`.arc` archive pairs (the top-level game archive format, distinct

from the per-entity `.ee` AAF format).

  • `Gibbed.TheAngler.ConvertProperty.exe` — converts RTPC property files

(`.epe`, and other RTPC-family extensions) between binary and XML. This is

the single most-used tool in this project — essentially every entity

data edit documented here (rod holders, vehicles, interactions) goes

through this converter. See `03_EntityDataFormat` for what the XML

actually contains.

  • `Gibbed.TheAngler.ConvertAdf.exe` — converts ADF ("Avalanche Data Format")

files between binary and XML: game data tables (`settings/game_data_tables/*.csvc`),

`graphs/**/*.graphc` (visual-scripting compiled output — **note**: this

tool fails on at least some `.graphc` files in this game version with

"One of the identified items was in an invalid format," even with `-t`

type-library hints tried against several candidate files; graph scripts

were not successfully inspected via this route in this project), and

various `*_adf`-suffixed sidecar files (`.epe_adf`). Supports `-t/--types-from`

to load an external type-library ADF first, for chunk ADFs that reference

types defined elsewhere.

  • `Gibbed.TheAngler.ConvertTexture.exe` — the DDS/ATX texture pipeline

converter (see File Formats doc for the multi-stage texture system).

  • `Gibbed.TheAngler.ConvertResourceBundle.exe` — resource bundles are

ADF-file containers embedded inside some `.ee` files; this extracts them

to a folder of ADFs (edit those with `ConvertAdf`) and repacks.

  • `Gibbed.TheAngler.ConvertStringLookup.exe` — the localized text system

(ADF-family, one file per language, in `text/`). You can edit existing

string entries freely. **You cannot safely add new entries**: the format

appears to allow it (repacks without error, and can even be wired into a

menu), but the game crashes the moment a character voiceline tries to

play using a new entry — there is apparently a hardcoded capacity/index

assumption somewhere downstream. Treat this as append-forbidden.

  • `Gibbed.TheAngler.SaveEditor.exe` — a save-file browser/editor. Auto-backs

up the save the first time it's opened (into `Toolset/data`). Save file

location: `Library\Saved Games\Avalanche Studios\CotWTheAngler\Saves\[Unique ID]`.

Direct save-file editing was tried early in this project for persistent

unlocks (e.g. fast travel) and found unreliable enough that live-memory

patching became the preferred approach for anything save-related — see

`09_ReverseEngineeringWorkflow`.

  • `HashName.exe` — computes the game's internal string hash for a given

input (see `09_ReverseEngineeringWorkflow` for the hash algorithm itself,

which was independently reverse-engineered from the disassembly as Bob

Jenkins' `lookup3.c` "hashlittle").

Mod installation (VFS file mods)

Every VFS mod in this project follows the same install contract:

  • In Steam, right-click the game → Properties → General → "Launch Options",

set it to exactly:

   --vfs-fs mods --vfs-archive archives_win64
  • Create a `mods` folder directly inside the game's install directory

(find it via Properties → Installed Files → Browse...).

  • Drop a mod's payload into that `mods` folder, mirroring the exact

relative path the file has under `Files/`. Whatever's in `mods` silently

overrides the matching stock file at load time; nothing else needs

registering.

ACM (see `08_ACMLauncher`) automates step 3 for the end user — it copies a

mod's payload folder into the game's `mods` directory when the mod is

enabled, and removes it when disabled.