A mod is a folder inside mods/ (next to maps/) with a mod.toml and a tags folder:
mods/
hd_audio/
mod.toml
tags/
sound/sfx/weapons/assault rifle/fire.sound
Each file in tags replaces the tag with the same path in every map that has it. Names aren't case-sensitive. A mod can only replace tags, not add new ones.
What a mod can replace
| Group | Extension |
|---|---|
| Sounds, music and dialogue | .sound |
| Textures, sprites, HUD images | .bitmap |
| Text the game shows | .unicode_string_list, .string_list |
| Models | .gbxmodel (Halo PC) or .model (Xbox) |
Other groups, such as .weapon or .scenario, are ignored. They'd change things every machine in a network game has to agree on.
mod.toml
Every key is optional:
name = "High-res audio"
id = "hd_audio"
version = "1.0"
authors = ["Someone", "Someone else"]
description = "The game's sounds at 44 kHz"
maps = ["a10", "bloodgulch"] # leave out or [] for every map
load_after = ["hd_textures"]
load_before = ["fixes"]
incompatible = ["other_audio"]
format = 1
Building the tags
- Extract the tags you want to change with
invader-extract, or start from the Halo Editing Kit's tags. - Edit them with the Halo Editing Kit or Invader (
invader-bitmap,invader-sound,invader-model). Keep each tag's name. - Put them under
tags/in your mod folder, add amod.toml, and load a map.
Type mods_reload in the console to pick up changes without reloading the map. debug.txt lists every file the game skipped and why.
Sharing it here
Zip the mod folder and upload it on the Mods page. We read mod.toml, count the tag files, and flag anything the game would skip.