...
In one instance in NWN:EE this has a valid use case the engine recognises: Additional "Spellbook" columns in spells.2da, which are now referenced by column name in classes.2da.
2DA
...
List
This is a list of the different core 2da files (we're ignoring tileset specific ones but there will be a generic entry for them) with a note about the usage for client or server, and line limits (if known). Anything in this list is used by the game, the unused ones are listed later on this page.
There are a limit to the amount of lines the engine will properly use for 2da files. This is restricted due to network traffic (even in SP there is a "server" running) since the game was made for dialup so Bioware coded in a lot of practical limits to lower packet sizes (presumably...)
| 2da file | Brief Description | Client Loaded | Server Loaded | Toolset Loaded | Line Limit | Line Limit Notes |
|---|---|---|---|---|---|---|
| actions.2da | List of actions and associated icons / TLK strings used by the GUI | Yes | Yes | No | Hardcoded | This file cannot have alterations to lines made, the references are all hardcoded. |
| ambientmusic.2da | Ambient music tracks | Yes | No | Yes | Unknown | Needs testing. GFF field is stored as INT (-2147483648 to 2147483647). |
| ambientsound.2da | Ambient sound tracks | Yes | No | Yes | Unknown | Needs testing. GFF field is stored as INT (-2147483648 to 2147483647). |
| ammunitiontypes.2da | For the hardcoded ranged weapons, what models to use for certain ammo types (eg; Fire Arrows) | Yes | No | No | Unknown / Hardcoded | Likely hardcoded, so no changes to line amounts allowed. |
| appearance.2da | Creature appearances and base properties like size etc. | Yes | Yes | Yes | Unknown | GFF field is stored as WORD (0 to 65535). |
| appearancesndset.2da | Appearance Sound Set eg what ambient sound they play, referenced by SOUNDAPPTYPE in appearance.2da | Yes | No | Yes? | Unknown | Needs testing. More can be added but not sure about the line limit. |
| armor.2da | List of armor values, although some of this is hardcoded. | Yes | Yes | Yes | Hardcoded | Adding more rows doesn't do anything, values are hardcoded |
| baseitems.2da | All the item types in the game (eg: longsword, torch, scroll) | Yes | Yes | Yes | 255 | Hardcoded due to network limitations; items may not function as intended. |
| bodybag.2da | The bodybag a creature will leave around. | No | Yes | Yes | Likely 255 | Needs testing. GFF field is stored as BYTE (0 to 255) |
| chargenclothes.2da | Clothing available at character generation. | Yes | Yes | No | Unknown | Needs testing. No GFF field, is purely loaded by the engine (at chargen client side and on the server side when the client sends over what clothing choice at the end of chargen for that item to load). |
| classes.2da | Character classes and main class options | Yes | Yes | Yes | 254 | Hardcoded due to network limitations plus "255" number is reserved as "CLASS_TYPE_INVALID" |
| cloakmodel.2da | Cloaks model references and options for each model. | Yes | Yes | Yes | Unknown | Needs testing. |
| cls_atk_xxx.2da | Standard name for classes.2da "AttackBonusTable" 2da value, defining the Base Attack Bonus progression | Yes | Yes | Yes | 60 | Classes are limited to 40 levels for PCs and 60 levels (mostly) for NPCs. |
| cls_bfeat_xxx.2da | Standard name for classes.2da "BonusFeatsTable" 2da value, defining the bonus feats a class gets | Yes | Yes | Yes | Unknown | Needs testing but likely the limit here is same as feat.2da |
| cls_feat_xxx.2da | Standard name for classes.2da "FeatsTable" 2da value, defining the feat availability for a class | Yes | Yes | Yes | Unknown | Needs testing but likely the limit here is same as feat.2da |
| cls_pres_xxx.2da | Standard name for classes.2da "PreReqTable" 2da value, defining the prerequisits for taking this (Prestiege) class | Yes | Yes | Yes | Unknown | Needs testing but this is hardly going to ever be the longest file. |
| cls_savthr_xxx.2da | Standard name for classes.2da "SavingThrowTable" 2da value, defining the saving throw (Fortitude, Will, Reflex) progression | Yes | Yes | Yes | 60 | Classes are limited to 40 levels for PCs and 60 levels (mostly) for NPCs. |
| cls_skill_xxx.2da | Standard name for classes.2da "SkillsTable" 2da value, defining the skills the class has available | Yes | Yes | Yes | Unknown | Needs testing but is likely limited to the same size as skills.2da (255 or 32 depending on bugs) |
| cls_spgn_xxx.2da | Standard name for classes.2da "SpellGainTable" 2da value, defining the spells gained each level (How many can be cast per level). Every spellcaster needs this. | Yes | Yes | Yes | 60 | Classes are limited to 40 levels for PCs and 60 levels (mostly) for NPCs. Note in EE that spellcasters are typically limited to level 40 in the engine. |
| cls_spkn_xxx.2da | Standard name for classes.2da "SpellKnownTable" 2da value, defining how many spells are known (Eg; for Bards and Sorcerers) | Yes | Yes | Yes | 60 | Classes are limited to 40 levels for PCs and 60 levels (mostly) for NPCs. Note in EE that spellcasters are typically limited to level 40 in the engine. |
| cls_stat_xxx.2da | Standard name for classes.2da "StatGainTable" 2da value, defining the stat increases for the class (Eg; Dragon Disciple, Pale Master) | Yes | Yes | Yes | 60 | Classes are limited to 40 levels for PCs and 60 levels (mostly) for NPCs. |
| creaturesize.2da | File is hardcoded (engine values in ruleset.2da) and only used by the toolset for the names of sizes | No | No | Yes | Hardcoded | Noted in description this is basically hardcoded and is for toolset only use. |
| creaturespeed.2da | File defining the speed of PCs and NPCs | Yes | Yes | Yes | Unknown | Needs testing. This file can be extended but some lines are hardcoded. See creaturespeed.2da |
| crtemplates.2da | This defines some "creature templates" for NPCs such as "Half-Celestial" used in the toolset only. Links to ini files that load items and stat changes onto the creature blueprint. | No | No | Yes | Unknown | Needs testing. Solely for Toolset usage. |
| cursors.2da | Not a complete list of cursors, but used for trigger objects to define some mouse over cursors. | Yes | No | Yes | Unknown | Needs testing. GFF field is stored as BYTE (0 - 255) |
| tbc | ||||||
| tbc |
There are a limit to the amount of lines the engine will properly use for 2da files. This is restricted due to network traffic (even in SP there is a "server" running) since the game was made for dialup so Bioware coded in a lot of practical limits to lower packet sizes (presumably...)
| 2da file | Limit | Notes | ||||||
|---|---|---|---|---|---|---|---|---|
| baseitems.2da | 255 | Hardcoded due to network limitations; items may not function as intended. | ||||||
| classes.2da | 254 | Hardcoded due to network limitations plus "255" number is reserved as "CLASS_TYPE_INVALID"|||||||
| effecticons.2da | 255 | Now can use new lines with EffectIcon. | ||||||
| feat.2da | 32,768 | uint16 used in network however not recommended to go over 32K even if 65,536 is absolute maximum. There are likely problems with subdial feats if you do this. | ||||||
| skills.2da | 32 | Hardcoded due to network limitations to 255 but GUI issues make it a 32 skill limit. May only affect the "Untrained" column however? https://github.com/Beamdog/nwn-issues/issues/171 | ||||||
| spells.2da | 4096 | Possibly the limit - needs testing, but is to do with 12 bits available for the "spell radial" entry being sent over the network. May have been removed at some point but needs fully testing. | ||||||
| surfacemat.2da | 64 | 0 through 63 are valid lines for this in patch 1.84.8193.29 and up. | ||||||
| iprp_damagecost.2da | 127 (or possibly 128) | Certainly going to line 129 or higher works for the server end (damage is done correctly) but the client won't show it correctly in the character sheet because it looks up 2da line as a negative (impossible). Line 159 was tested which had the string "-97 Magical Damage" since 159 - 128 = 31, and 128 - 31 = 97. It shows correctly on items, and higher lines are safe for NPCs to use. | ||||||
| tbc | ||||||||
| tbc |
Unused 2da files
Bioware left in some 2da files from early development (before game release). These files are not loaded by the game, toolset or Get2DAString at all and can be ignored. They do get confusing however.ignored. They do get confusing however.
- areaeffects.2da - See vfx_persistent.2da instead
- armorparts.2da - I think this is unused and parts_NAME.2da is used instead for referencing the valid parts of armor.
- armourtypes.2da - This is unused and parts_NAME.2da is used instead for referencing the valid parts of armor.areaeffects.2da - See vfx_persistent.2da instead
- caarmorclass.2da - remnants of armour system?
- categories.2da - not loaded by the game, in fact not even a valid 2da file. The constants for TALENT_CATEGORY_XXX are just hardcoded in the engine.
- catype.2da - remnants of creature parts system?
- combatmodes.2da - Unused references to (a limited set) of combat action modes
- doortype.2da - See doortypes.2da instead
- effectanim.2da - See visualeffects.2da instead
- metamagic.2da - Appears to be unused by the game making all of these hardcoded
- nwconfig.2da - Unused as of NWN:EE since it removes the "settings" nwconfig program.
- nwconfig2.2da - Was this ever used?
- resistancecost.2da - Blank
- soundcatfilters.2da - Replaced probably by rrf_wav.2da and would be toolset specific anyway
- soundtypes.2da - Sounds are not tied to a 2da, but are done by resource name
- treasurescale.2da - I don't think this is used anywhere of note. It'd be used in the toolset I'd guess but there isn't a treasure generation system there.
- vfx_fire_forget.2da - See visualeffects.2da instead
...