This is an important topic for anyone doing any kind of content creation, using a module hakpak or override. Therefore a top level topic!
The NWN game engine has an amazing set of ways to have content overriden. This means you can provide a module with an updated "Magic Missile" spell script that does something completely different. You can also provide in a hakpak file an entirely new spell icon, and even alter the text describing the spell.
However what if someone includes a magic missile spell script in their override folder? What happens if a game is loaded from a save file? Read on for more...
Order of Hakpacks
A note on the order of hakpacks and duplicate files; the highest (first loaded) hakpack takes precedence. In this example the files in "potsc_top" are loaded first. Clicking "Check for Conflicts" shows these problem conflicts, in this case 4 x 2da files are in 2 separate hakpacks.
It is worthwhile sorting hakpacks so only one file of a particular name exists. This is especially relevant for data files such as 2da files, which you might find the toolset getting upset if you used an earlier 2da (such as for creature appearances) which gets overriden by a higher priority hakpack later on in development.
DDS and TGA Load Order
While DDS files should override TGA files when present, there are some oddities due to how the game loads textures in general. The actual order is different to the standard Content Order below but only for these two file types.
What does this mean? Basically that if you, for instance, put "c_aribeth.tga" into the override folder, it'd actually be the one used compared to "c_aribeth.dds" inside the default game BIFs, even though usually DDS has to be there to override DDS. This is most common an issue for item icons since TGA files basically tell the game "an icon exists" as frustrating as that is.
- DDS in override (and development, and possibly Steam Workshop)
- TGA in override (and development, and possibly Steam Workshop)
- DDS in nwsync
- TGA in nwsync
- DDS in ERF (ie hakpacks)
- TGA in ERF (ie hakpacks)
- DDS in BIF
- TGA in BIF
KTX files, used on iOS, I'm not sure how they fit in this load order.
Highest to Lowest. Something in a higher option always overrides the lower option.
Most folders support any files being loaded in them, but it is better to stick to the general conventions.
|Location Name||Example NWN:EE location (Windows/Steam)||Contents Loaded||Notes|
|1||User Portraits||Documents\Neverwinter Nights\portraits||All content file types except .mod||Usually stores .tga and .dds portrait files only|
|2||Install Portraits||steamapps\common\Neverwinter Nights\data\prt||All content file types except .mod||Usually stores .tga and .dds portrait files only|
|All content file types except .mod||Usually stores .bic files only|
|4||Install Vault||steamapps\common\Neverwinter Nights\data\lcv||All content file types except .mod|
Usually stores .bic files only
"lvc" = local character vault
|5||User Development Folder||Documents\Neverwinter Nights\development||All content file types except .mod|
Development folder is also refreshed actively in the game and is for development purposes only (be careful if using on live servers, and NOT for distributed content)
Development folder now loads in toolset as of a more recent NWN:EE update. (which?)
|6||NWSync Manifest||Documents\Neverwinter Nights\nwsync||All content file types except .mod|
|7||User Hakpack||Documents\Neverwinter Nights\hak||.hak files (and their contents)|
A further page on what can go into a hakpack file will be created later
Note: Some things are loaded at game inception (not module load) so cannot be overriden by hakpacks regardless (these will be noted where possible).
See above notes on the hakpack ordering and how it affects file loading of duplicated files.
|8||Install Hakpack||steamapps\common\Neverwinter Nights\data\hk||.hak files (and their contents)||Mostly this is for Premium Module content, user made stuff shouldn't go here anyway|
|9||Current Game||The current game in memory at the moment of being played, eg; a creatures instanced health, effects, world position, in an area.|
|10||Save Game||Documents\Neverwinter Nights\saves\NAME OF SAVE||.sav (and their contents)|
For MOD: The .sav file is a copy of the entire .mod file with area changes, ongoing stuff etc. - yes you can load the .sav on another PC without the original .mod
For NWM: This essentially is a copy of anything altered in the game. EG: area files, creatures instances (like health, effects) and all sorts of others. It loads this and then anything missing is taken from the .mod files.
Think of it as a layer on top of the original .mod file. It allowed Bioware to do (most) patching of the modules without users losing their save progress. A shame it wasn't allowed for user modules!
|.mod (and their contents)|
Like hakpacks a further page will be written on what can be included in a .mod file.
"nwm" is essentially .mod but "official modules".
Loaded only when a module is selected to be loaded
|12||User Patch||User specified see tutorial||.bif or .hak files and their contents||See tutorial|
|13||User Override||Documents\Neverwinter Nights\override||All content file types except .mod|
Used for overriding the games default files, eg replacing a default placeable model, 2da or spell script
Loaded at game startup pre-module load if applicable
|14||Install Override||steamapps\common\Neverwinter Nights\ovr||All content file types except .mod|
|15||User Ambient||Documents\Neverwinter Nights\ambient||All content file types except .mod||.wav files, ambient sound files usually|
|16||User Music||Documents\Neverwinter Nights\music||All content file types except .mod||.bmu files, music files usually|
|17||Install Ambient||steamapps\common\Neverwinter Nights\data\amb||All content file types except .mod||.wav files, ambient sound files usually|
|18||Install Music||steamapps\common\Neverwinter Nights\data\mus||All content file types except .mod||.bmu files, music files usually|
|19||Install Patch||steamapps\common\Neverwinter Nights\data||.bif files and their contents||Base game content but for the ones marked _patch|
|20||Texture Pack||steamapps\common\Neverwinter Nights\data\txpk||.erf files and their contents||Base game content but dependant on "texture pack" values|
|21||Keytable||steamapps\common\Neverwinter Nights\data||.bif files and their contents||Base game content bif files|
Movies are loaded specially, one off, and not kept in game memory. The order is User directory then Install directory.
TLK files can be placed into HAK files and use the same priority system as all other overridable files. This means you can have one TLK inside each HAK, however only 1 will be used for the module, regardless.
NOTE: It is possible to override dialog.tlk (the game's primary TLK file) with a custom dialog.tlk by placing your custom file into the user /override folder, making any changes made available during character generation AND for every module you play.
Priority From Code
This shows the exact ordering - that was made human readable above.
// Resource Priority is determined by category. Adding key tables to ResMan will fit // them in the first free priority slot within the category. // Key tables within the same priority category have no guaranteed ordering. // MAXINT is the top of the stack, 0 the bottom. #define RESMAN_PRIORITY_SPACING 1000000 #define RESMAN_PRIORITY_STACK_TOP (100 * RESMAN_PRIORITY_SPACING) #define RESMAN_PRIORITY_TEMP (99 * RESMAN_PRIORITY_SPACING) #define RESMAN_PRIORITY_USER_PORTRAITS (91 * RESMAN_PRIORITY_SPACING) #define RESMAN_PRIORITY_INSTALL_PORTRAITS (90 * RESMAN_PRIORITY_SPACING) #define RESMAN_PRIORITY_USER_VAULT (81 * RESMAN_PRIORITY_SPACING) #define RESMAN_PRIORITY_INSTALL_VAULT (80 * RESMAN_PRIORITY_SPACING) #define RESMAN_PRIORITY_USER_DEVELOPMENT (71 * RESMAN_PRIORITY_SPACING) #define RESMAN_PRIORITY_INSTALL_DEVELOPMENT (70 * RESMAN_PRIORITY_SPACING) // Resource Images override currentgame/savegame too. Strange corner case. #define RESMAN_PRIORITY_RIM (60 * RESMAN_PRIORITY_SPACING) // Manifests: NWSync. #define RESMAN_PRIORITY_USER_MANIFEST (40 * RESMAN_PRIORITY_SPACING) // hak resources. #define RESMAN_PRIORITY_USER_HAK (31 * RESMAN_PRIORITY_SPACING) #define RESMAN_PRIORITY_INSTALL_HAK (30 * RESMAN_PRIORITY_SPACING) // Currentgame/Savegame #define RESMAN_PRIORITY_CURRENTGAME (23 * RESMAN_PRIORITY_SPACING) #define RESMAN_PRIORITY_SAVEGAME (22 * RESMAN_PRIORITY_SPACING) // NWSync Manifets attached to savegames need to sit beneath savegame. // This is a reversion of how HAK functions; however, it is arguably the // better priority order. It is also needed because savegame data needs // to override data in nwsync, such as module.ifo. #define RESMAN_PRIORITY_SAVEGAME_MANIFEST (21 * RESMAN_PRIORITY_SPACING) // Module files: there can only be one. // NB: nwsync manifests also contain module data and thus would override // haks and override/. That's intended. #define RESMAN_PRIORITY_MODULE (20 * RESMAN_PRIORITY_SPACING) // Override resources. Canonically below hak. #define RESMAN_PRIORITY_USER_PATCH (13 * RESMAN_PRIORITY_SPACING) #define RESMAN_PRIORITY_USER_OVERRIDE (12 * RESMAN_PRIORITY_SPACING) #define RESMAN_PRIORITY_SOURCE_OVERRIDE (11 * RESMAN_PRIORITY_SPACING) #define RESMAN_PRIORITY_INSTALL_OVERRIDE (10 * RESMAN_PRIORITY_SPACING) // Music and ambients: Allow overriding in modules if need be. // (requested by milos, blame him.) -niv #define RESMAN_PRIORITY_USER_AMBIENT (9 * RESMAN_PRIORITY_SPACING) #define RESMAN_PRIORITY_USER_MUSIC (8 * RESMAN_PRIORITY_SPACING) #define RESMAN_PRIORITY_INSTALL_AMBIENT (7 * RESMAN_PRIORITY_SPACING) #define RESMAN_PRIORITY_INSTALL_MUSIC (6 * RESMAN_PRIORITY_SPACING) // Core game content #define RESMAN_PRIORITY_INSTALL_PATCH (3 * RESMAN_PRIORITY_SPACING) #define RESMAN_PRIORITY_TEXTUREPACK (2 * RESMAN_PRIORITY_SPACING) #define RESMAN_PRIORITY_KEYTABLE (1 * RESMAN_PRIORITY_SPACING) #define RESMAN_PRIORITY_STACK_BOTTOM 0