Skip to content

Specification of the IEMOD file format

ALIENQuake edited this page Jun 22, 2021 · 4 revisions

Tools for creation IEMOD packages:

  1. Infinity Auto Packager - automatically generate mod packages when you publish a release
  2. For mods that are not hosted at GitHub, local version of Infinity Auto Packager can be requested.

Version 0.11.0

The IEMOD format is intended to be a platform-independent distribution format for modifications for games using the Infinity Engine.

An IEMOD file:

  • must be ZIP archive
  • must have .iemod file extension
  • must use compression with the DEFLATE algorithm or no compression
  • must have all files and directory names encoded in UTF-8, without BOM
  • must not be encrypted
  • must not have self-extraction
  • must not constitute or contain patched data
  • must not span across multiple files
  • must not be segmented
  • should exclude files and directories listed in the table 'should-exclude'

The folders and files inside IEMOD file:

  • must not include names containing characters listed in 'forbidden-characters' table
  • must not be listed in case-insensitive 'forbidden-files-directories-all-levels' table
  • must not contain names starting with prefixes listed in case-insensitive 'forbidden-files-directories-all-levels-starting-with' table
  • must not, in its top-level, contain directories listed in case-insensitive 'forbidden-toplevel-directories' table
  • must not, in its top-level, contain files listed in the case-insensitive 'forbidden-toplevel-files' table

Of the files contained within the archive, if WeiDU TP2 file exist, it must be located within a directory that is itself located in the toplevel and it's name must exactly match the name of the directory.

Table forbidden-characters:

<
>
:
"
/
\
|
?
*
\0 # escaped null character

Example:

".:</*Good?|Evil?*\>:."       # literal folder name
".:</*Good?|Evil?*\>:.".tp2   # literal file name

Case-insensitive table forbidden-files-directories-all-levels:

AUX COM0 COM1 COM2 COM3 COM4 COM5
COM6 COM7 COM8 COM9 CON CONIN$ CONOUT$
LPT0 LPT1 LPT2 LPT3 LPT4 LPT5 LPT6
LPT7 LPT8 LPT9 NUL PRN

Example:

CON         # mod data directory
CON\CON.tp2 # WeiDU tp2 file
CON         # weidu executable

Case-insensitive table forbidden-files-directories-all-levels-starting-with:

AUX. COM0. COM1. COM2. COM3. COM4. COM5.
COM6. COM7. COM8. COM9. CON. CONIN$. CONOUT$.
LPT0. LPT1 LPT2 LPT3 LPT4. LPT5. LPT6.
LPT7. LPT8. LPT9. NUL. PRN.

Example:

AUX.test                # folder name
AUX.test\AUX.test.tp2   # file name

Case-insensitive table forbidden-toplevel-directories:

CD0
CD1
CD2
CD3
CD4
CD5
CD6
cache
characters
data
debugs
dlc
lang
movies
mplayer
mpsave
music
override
portraits
save
script compiler
scripts
sounds
temp
tempsave
workshop

Case-insensitive table forbidden-toplevel-files:

baldur.ini
MConvert.exe
BGConfig.exe
bgmain.exe
bgmain2.exe
charview.exe
chitin.key
decrypt.dll
dialog.tlk
dialogf.tlk
engine.lua
icewind.exe
icewind.ini
Icewind2.ini
icewind2.exe
idmain.exe
iwd2.exe
SiegeOfDragonspear.exe
torment.exe
torment.ini
weidu.log
weidu.conf

Case-insensitive table should-exclude:

__macosx/
$RECYCLE.BIN/
backup/
# all files starting with dot
.*
*.bak
*.iemod
*.temp
*.tmp
Thumbs.db