This page documents the function and format of some of Halo's installation and profile files, excluding maps.
This is the main game executable containing the bulk of the game's code.
By default, Halo is only permitted to use 2 GB of virtual memory. By applying value
0x2F at offset
0x136 in the 1.0.10 executable, Halo can be made "Large Address Aware" and capable of using up to 4GB of virtual memory. The same upgrade can be made to Sapien. The increased limit can be useful for client mods like Chimera which run in the game's address space and allocate more memory to speed up map loading.
strings.dll is required to run the game or dedicated server. It serves multiple purposes:
- Contains the loading screen image seen before the main menu (all other loading screens are contained in maps).
- Displays crash messages in a window.
- Prior to the 1.10 patch, it contained the
This DLL is often replaced with a modified version for mods like SAPP and Chimera 1.0+.
Watson directory and the files within it (
dwintl.dll) are a defunct crash reporting system. The server to which crash reports would be sent is no longer running. The mod Chimera disables this to allow the game to crash faster without waiting for a network timeout.
Keystone.dll is used for Halo's stock multiplayer chat functionality. The game also requires the library
msxml.dll to be installed on the system for chat to display properly. An installer can be found in Halo's
controls directory is host to
Controls.dll, a library used to render the multiplayer chat input box. It makes use of files in the
content directory, which can be modified to customize the appearance of the chat "editbox" and text input.
The mods HAC2 and Chimera implement their own chat display to replace Halo's, which becomes unreliable after tabbing out of the game.
Halo stores savegames and profile data according to the system-wide
%USERPROFILE% environment variable. On Windows, with a system drive "C" and user name "John", Halo saves can be found in
C:\Users\You\Documents\My Games\Halo CE\. When running on Linux under Wine, the default location is
~/My Games/Halo CE/. Some mods also store data under this location, such as downloaded maps.
lastprof.txt stores the path of the last used profile so it can be loaded at game startup. It has a fixed length of 256 bytes and a very simple structure:
- An ASCII-encoded absolute filesystem path to a profile directory, with trailing
\. For example,
C:\Users\You\My Documents\My Games\Halo CE\savegames\New001\
- A null byte,
0x00, to terminate the above string.
- The ASCII-encoded string
lam.sav(not a typo).
0x00padding until the end of the file.
savegames\<profile name>\savegame.bin contains the saved state of the campaign, allowing progress to be resumed when reloading from a checkpoint or returning from the main menu. The Halo console commands
game_revert use this file. A newly-created savegame.bin is typically filled with
0x480000 (4,718,592 bytes).
The structure of this file is not fully mapped out, however some fields are known:
|last played scenario|
An ASCII-encoded scenario tag path, null-terminated and 32 characters max. An example value is
savegames\<profile name>\blam.sav contains the configuration for a HCE profile. Information includes player details, video/audio/network settings, and input configurations (mouse, keyboard, and controller). It has a fixed length of 8192 bytes (8 KiB). File integrity is verified by a checksum at the end of the file; if the checksum does not match the game will fall back to default settings.
The file structure follows. All data is little-endian unless otherwise stated.
Contains input-related settings, including mouse, keyboard, and gamepad bindings.
The blam.sav has a CRC-32 checksum appended at the end of it. The value is actually stored in its complement equivalent (i.e. bitwise NOT). The checksum validates the data between
saved\player_profiles\default_profile there are two files,
01.sav with the same player profile structure as
blam.sav. However, these files contain empty or default values only. They have default key bindings and no controller bindings. The
01.sav file differs from
00.sav in only three ways:
- An unknown field at offset
0x11Dis set to true.
- The invert Y axis field at offset
0x12Fis set to true.
- The checksum differs due to the above differences.
Halo overwrites or creates these files with their original contents every time the game starts. Replacing their contents with other profile data and forcing the files to be read-only does not have any effect on default profile creation, default bindings, or controls used when loaded into a map before first profile creation. Their purpose is a mystery.
Thanks to the following individuals for their research or contributions to this topic:
- Conscars (Additional blam.sav reversing)
- Miris (Profile and savegame reversing, LAA patch)
- MrChromed (Loading screen tip)
- nToss (Researching offsets for profile input bindings and other fields)
- Sparky (Control binding ranges)
- Vaporeon (Watson and strings.dll background)