Specification of the IEMOD file format - ALIENQuake/ProjectInfinity GitHub Wiki
Tools for creation IEMOD packages:
- Infinity Auto Packager - automatically generate mod packages when you publish a release
- 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