Page tree
Skip to end of metadata
Go to start of metadata

Information on 2da files, which are essentially 2 dimensional array tables of information. See the left hand bar for a list of information on specific 2da files.

Note a lot of information on specific 2da files are on different pages, such as Spells and Abilities for spells.2da.

2da Format

The 2da format is relatively simple, and can be read about in the Bioware documentation:

  • The top line must be 2DA V2.0
  • There may be one or more blank lines before the first line that contains characters, which is considered the header line
    • The first column header must be blank, and that column is ignored (is usually a human readable number)
      • The first column number IDs can be wrong - the game just reads each new line as a new entry (incremented from 0)
    • The second and onwards columns must have the header match the in-game reference loaded, the order of columns doesn't matter. Label columns are generally ignored.
  • Further lines are data rows:
    • Column data - but not the header name - can be in double quotes - "text here" - to include spaces. Whether or not the game understands that one being in quotes very much depends (smile)
    • Column data is separated by one or more whitespace characters (tabs, spaces)
    • Blank data is classified with 4 stars: ****
      • You can quote the stars ("****") or have a blank quoted field which, of course, is blank ("") but any other combination of stars (less, more, or in single quotes) will be returns literally.

This all comes together to mean some very odd looking 2das can be completely valid.

You can find notes on reading 2DA files in scripts at the Lexicon page for Get2DAString. Main thing to note is on error (no column or row matching etc.) and on blank entries it returns an empty string.

Missing Columns versus Blank Columns (****)

There is different behaviour for certain columns where the column is missing entirely (eg; using a old 1.69 version of a 2da) versus the column being present but blanked (****). A notable example is the additional columns in racialtypes.2da which defaults to the 1.69 implementations if the columns are not present to maintain comatibility, and where **** can actually be counted as "Empty value" instead of "Missing value" meaning different behaviour.

Order of Columns

The game generally won't care what order columns are in except for some minor exceptions;

  • swearfilter.2da cannot be rearranged
  • The first column of the spell preference 2da files
  • itemprops.2da appears to be hardcoded due to the PropColumn in baseitems.2da (although not sure if you can add more columns to it).

Adding Columns

Most game read 2da files (if not all) can have custom columns added but these are only useful for Get2DAString (and it's a much better idea to create a custom 2DA file for additional metadata).

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.

Referencing Columns

When a column for a 2da references another 2da, and the entry requires an ID to use from the other 2da (eg feats.2da having a column to link to a line in spells.2da), the ID you must give it is actually the line number offset from base (base being where index 0 starts). This basically just means 2da line ID numbers cannot be skipped, but is mostly only relevant where a persistent server has heavily modified 2da's.

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, plus the multitude of class and package 2das) 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.

Note: If a 2da file is listed as "Server Loaded: No" it would still be recommended to include it in relevant hakpack files if altered since Get2DAString will break, and the size of the files is very tiny in any case.

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 fileBrief DescriptionClient LoadedServer LoadedToolset LoadedLine LimitLine Limit Notes
actions.2daList of actions and associated icons / TLK strings used by the GUIYesYesNoHardcodedThis file cannot have alterations to lines made, the references are all hardcoded.
ambientmusic.2daAmbient music tracksYesNoYesUnknownNeeds testing. GFF field is stored as INT (-2147483648 to 2147483647).
ambientsound.2daAmbient sound tracksYesNoYesUnknownNeeds testing. GFF field is stored as INT (-2147483648 to 2147483647).
ammunitiontypes.2daFor the hardcoded ranged weapons, what models to use for certain ammo types (eg; Fire Arrows)YesNoNoUnknown / HardcodedLikely hardcoded, so no changes to line amounts allowed.
appearance.2daCreature appearances and base properties like size etc.YesYesYesUnknownGFF field is stored as WORD (0 to 65535).
appearancesndset.2daAppearance Sound Set eg what ambient sound they play, referenced by SOUNDAPPTYPE in appearance.2daYesNoYes?UnknownNeeds testing. More can be added but not sure about the line limit.
armor.2daList of armor values, although some of this is hardcoded.YesYesYesUnknownNeeds testing. New AC values can be added but only incrementally (so higher AC, eg: 8, 9, 10 could be added next).
armorparts.2daUsed for the toolset to set how many of each part of armor there are.NoNoYesHardcodedThere is a single line used by the toolset, no additional lines are even needed.
baseitems.2daAll the item types in the game (eg: longsword, torch, scroll)YesYesYes0 - 255Hardcoded due to network limitations; items may not function as intended.
bodybag.2daThe bodybag a creature will leave around.NoYesYes0 - 255 likelyNeeds testing. GFF field is stored as BYTE (0 to 255)
capart.2daCreature Armor Parts, listing the model names of various bits inside a model for the client to load it properly. This is very unlikely to ever need changing however.YesNoYesHardcodedAmount of armor nodes are hardcoded.
chargenclothes.2daClothing available at character generation. Important: This also needs the relevant UTI files (Item Blueprints) client side for the client to load custom clothing. The server picks up on what was chosen and generates it.YesYesNoUnknownNeeds 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).

Character classes and main class options. See subpage for further details. Clients need all these parts since clients actually do all their character changes client side and send it to the server to just validate it.


0 - 254

Hardcoded due to network limitations plus note "255" number is reserved as "CLASS_TYPE_INVALID".
cloakmodel.2daCloaks model references and options for each model. The serer uses this as well as the client to check for validity with script commands changing them.YesYesYesUnknownNeeds testing.
cls_atk_xxx.2daStandard name for classes.2da "AttackBonusTable" 2da value, defining the Base Attack Bonus progressionYesYesYes60Classes are limited to 40 levels for PCs and 60 levels (mostly) for NPCs. In any case epic levels (21+) have static progression from epicattacks.2da
cls_bfeat_xxx.2daStandard name for classes.2da "BonusFeatsTable" 2da value, defining the bonus feats a class getsYesYesYesUnknownNeeds testing but likely the limit here is same as feat.2da
cls_feat_xxx.2daStandard name for classes.2da "FeatsTable" 2da value, defining the feat availability for a classYesYesYesUnknownNeeds testing but likely the limit here is same as feat.2da
cls_pres_xxx.2daStandard name for classes.2da "PreReqTable" 2da value, defining the prerequisits for taking this (Prestiege) classYesYesYesUnknownNeeds testing but this is hardly going to ever be the longest file.
cls_savthr_xxx.2daStandard name for classes.2da "SavingThrowTable" 2da value, defining the saving throw (Fortitude, Will, Reflex) progressionYesYesYes60Classes are limited to 40 levels for PCs and 60 levels (mostly) for NPCs. In any case epic levels (21+) have static progression from epicsaves.2da
cls_skill_xxx.2daStandard name for classes.2da "SkillsTable" 2da value, defining the skills the class has availableYesYesYesUnknown (likely 255)Needs testing but is likely limited to the same size as skills.2da (255 or 32 depending on bugs)
cls_spgn_xxx.2daStandard name for classes.2da "SpellGainTable" 2da value, defining the spells gained each level (How many can be cast per level). Every spellcaster needs this.YesYesYes60

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.2daStandard name for classes.2da "SpellKnownTable" 2da value, defining how many spells are known (Eg; for Bards and Sorcerers)YesYesYes60

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.2daStandard name for classes.2da "StatGainTable" 2da value, defining the stat increases for the class (Eg; Dragon Disciple, Pale Master)YesYesYes60Classes are limited to 40 levels for PCs and 60 levels (mostly) for NPCs.
creaturesize.2daFile is hardcoded (engine values in ruleset.2da) and only used by the toolset for the names of sizesNoNoYesHardcodedNoted in description this is basically hardcoded and is for toolset only use.
creaturespeed.2daFile defining the speed of PCs and NPCsYesYesYesUnknownNeeds testing. This file can be extended but some lines are hardcoded. See creaturespeed.2da
crtemplates.2daThis 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.NoNoYesUnknownNeeds testing. Solely for Toolset usage.
cursors.2daNot a complete list of cursors, but used for trigger objects to define some mouse over cursors. Most cursors in the game are hardcoded and for the scripting OnPlayerTarget event you can set your own unrelated to this 2da.YesNoYesLikely 255Needs testing. GFF field is stored as BYTE (0 - 255)
damagehitvisual.2daDamage VFX line sent to the client when a particular damage is inflicted by a weapon.NoYesNoHardcodedThe amount of damage types is hardcoded.
damagelevels.2daDamage levels, such as "Uninjured" or "Near Death". The amount of HP each level is for is hardcoded, this is purely for clientside TLK loading.YesNoNoHardcodedThe damage levels are set in the engine, this just displays the right localised TLK string.
defaultacsounds.2daThe sounds of each armor when hit, thus leather armour when hit by a sword has the impact effect sound like leather. Only is loaded if the ArmorType column of appearancesndset.2da is blank, and it looks up the chest AC value.YesNoNoUnknownNeeds testing. New AC values can be added but only incrementally (so higher AC, eg: 8, 9, 10 could be added next).
des_xxx.2daThese 2da files were used by Bioware designers to have custom systems that work with Get2DAString() in scripts, eg for crafting.NoYesNoN/ANo limits as such apart from what limits 2DA files have naturally
diffsettings.2daDifficulty Settings used by the game, at least the ones Bioware made editable.YesYesNoHardcodedThe amount of difficulty options and what options are editable is hardcoded.
disease.2daDiseases defined by the game for EffectDisease or On Hit: Disease item properties. Clients are sent completed effects, not the information loaded in this file, except the name used On Hit item properties most likely.YesYesYesUnknownNeeds testing.
domains.2daDomains that by default only Clerics use, but now in EE any spellcaster can be assigned if setup.YesYesNo0 - 254 likelyNeeds testing. GFF field is stored as BYTE (0 - 255)
doortypes.2daList of doors tied to various tilesets. Clients will load it for most likely the sound reference.YesYesYesUnknownNeeds testing.
effecticons.2daEffect icons used by the game, now extendable massively in EE with EffectIcon.YesYesNo

1 - 255

This 1 - 255 limit was confirmed in EE for EffectIcon. Previously all effect icons were hardcoded but the network traffic to send them limits the number. Line 0 is invalid.
encdifficulty.2daEncounter difficulty. Used by servers for a multiplier on the "difficulty", and in toolset to set the difficulty.NoYesYesUnknownNeeds testing. Not sure if more can be added.  GFF field is stored as INT (-2147483648 to 2147483647).
encumbrance.2daEncumberance levels for amount of strength a creature has. Client uses this to show the amount you can carry. Server it is used where the speed is worked out.YesYesNoUnknownNeeds testing. Rows go up to 100 but potentially could be extended.


Contains the area lighting environmental presets available in the toolset only.NoNoYesUnknownNeeds testing. May be hardcoded.
epicattacks.2daAttack progression for epic levels (21+). Clients and toolset is just for showing numbers.YesYesYes60Classes are limited to 40 levels for PCs and 60 levels (mostly) for NPCs. Note the epic levels are 21+ so first 20 lines would be ignored usually.
epicsaves.2daSave progression for epic levels (21+). Clients and toolset is just for showing numbers.YesYesYes60Classes are limited to 40 levels for PCs and 60 levels (mostly) for NPCs. Note the epic levels are 21+ so first 20 lines would be ignored usually.
excitedduration.2da"Excited" duration, ie; combat music time! Both options are the same, clients say it loads but is it used for anything? Probably not. It is also probably not worth altering this since...who knows what might happen in the engine. If you know maybe post it here!Yes but not used?YesNoHardcodedThe entries here are hardcoded.
exptable.2daUsed to figure out when the characters levelup.NoYesNo41Line 41 is actually making level 40 the highest. EE has some bugs if you go over 40 levels for PCs around spellcasting.
feat.2daFeats available for creatures to take, or are granted to them.YesYesYes

0 - 32768

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 due to how they are identified.

footstepsounds.2daSound files loaded for particular footsteps depending on appearance.YesNoNoUnknownNeeds testing.
fractionalcr.2daSorts fractional CR for purposes of encounter challenge rating (working out what monsters to spawn).NoYesNoHardcodedThe amount of lines are hardcoded, although perhaps you can alter bits of it, it may break something.
gender.2daEssentially a list of genders for the toolset, and on clients which TLK string to load for them. Server just uses a coded list (ie like the GENDER_* constants in nwscript) although it might use it via. Get2DAString if needed.YesNoYesHardcodedEven if you can add more genders you'd need NWNX to have the server end work with them properly.
genericdoors.2daThe generic "general" doors and their modes/info.NoYesYesUnknownNeeds testing.
hen_companion.2daAnimal Companions list. Used for clients to show at levelup, and servers to load the right resref. Toolset doesn't load it since NPCs have these settings wiped.YesYesNoUnknownNeeds testing.
hen_familiar.2daFamiliar list. Used for clients to show at levelup, and servers to load the right resref. Toolset doesn't load it since NPCs have these settings wiped.YesYesNoUnknownNeeds testing.
inventorysnds.2daThe sounds when inventory items are moved around the inventory or picked up (column "InvSoundType" in baseitems.2da). Server just sends the column ID number to the client to find the file to play.YesNoNoUnknownNeeds testing.

Item Property - ability list.

For each IPRP file it's assumed server needs it for item property generation/properties or Get2DAString for crafting. The client will need it for item examining so the right property info is loaded.

YesYesYesHardcodedNumber of abilities are hardcoded in the engine.
iprp_acmodtype.2daItem Property - AC modification type.YesYesYesHardcoded5 hardcoded AC types.
iprp_addcost.2daItem Property Cost Table - "Additional"YesYesYesUnknownAdditional Cost table things like Cursed identifiers can be added here.
iprp_additional.2daItem Property - "Additional"YesYesYesUnknownAdditional Cost table things like Cursed identifiers can be added here.
iprp_aligngrp.2daItem Property Alignment GroupsYesYesYesHardcodedAmount of alignments is hardcoded.
iprp_alignment.2daItem Property AlignmentsYesYesYesHardcodedAmount of alignments is hardcoded.
iprp_ammocost.2daUnlimited Ammo options. Resref of the "unlimited ammo" to equip depending on if arrow, bolt or bullet.YesYesYesUnknownLooks like more could be added.
iprp_ammotype.2daUnlimited Ammo "Ammunition type". Since it's tied to the weapon this is probably only used by the toolset, since the iprp_ammocost.2da determines the TLK string of the actual type (Eg; "Unlimited Fire 1d6")YesYesYesHardcodedAs with ranged weapons, ammo is hardcoded to 3 types.
iprp_amount.2daItme Property "Amount". Is simply 1, 2, 3, 4, 5 with TLK strings "Amount: 1", etc. attached. It used for things like Monster On Hit: Ability Drain [Drains Strength] [Amount: 3]YesYesYesUnknownNeeds testing.
iprp_arcspell.2daItem Property Arcane Spell Failure amounts.YesYesYesUnknownNeeds testing.
iprp_base1.2daThis is an intentionally blank cost table file referenced as line 0 in iprp_costtable.2da. It is used for any property which has no cost table value for it. How does it work out the cost? well the subtype 2da tends to have a Cost column. Very confusing I know.YesYesYesLeave aloneLeave it alone blank, it might break things if edited since it's note expected to have anything in it.
iprp_bonuscost.2daItem Property Bonus Cost. Used for ability score increases.YesYesYesUnknownNeeds testing. However ability scores may overflow/cap if going too high.
iprp_chargecost.2daItem Property Charges / Use or Uses / Day options.YesYesYesHardcodedThe amount of these is hardcoded since there is no options in this 2da for what each one is defined as. So no 10 Charges / Use can be added.
iprp_color.2daItem Property Light Color choice.YesYesYesHardcodedThe lights relate to particular VFX lines, thus this list is hardcoded (but changing the TLK values and assinging different VFX models/progfx info may work).
iprp_combatdam.2daItem Property Extra Melee Damage type of damageYesYesYesHardcodedOnly can have the 3 main physical damage types for this item property.

Cost Table. This defines what 2da is loaded for each CostTableResRef ID number in itempropdef.2da

You can add new item properties (which are just for the item description or to add/remove cost, and have scripted effects) by adding more rows to this.

YesYesYesUnknownAdditional rows can be added just needs testing.
iprp_damagecost.2daItem Property Damage Bonus and EffectDamageShield / some other things that need static and variable bonuses like 1d6 and 2d8.YesYesYes127 (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.

iprp_damagetype.2daItem Property Damage Bonus type of damage to apply. Interestingly has "subdual" and "physical" as options, perhaps hinting at an earlier damage system more aligned to D&D rules.YesYesYesHardcodedDamage types are hardcoded in the engine, although the names can be at least altered here.
iprp_damvulcost.2daItem Property Damage Vulnerability cost table, eg 50% fire vulnerability.YesYesYesUnknownAdditional rows can be added just needs testing.
iprp_feats.2daItem Property Bonus Feat list. Keeps the amount in the toolset managable but you can extend this to be almost any feat.2da entry (some however will not function).YesYesYesUnknownNeeds testing. Likely at least the length of feat.2da
iprp_immuncost.2daItem Property Damage Immunity cost tableYesYesYesUnknownAdditional rows can be added just needs testing.
iprp_immunity.2daItem Property Immunity: Misc table, eg: Immunity: Death MagicYesYesYesHardcodedThis seems a static hardcoded list, engine defined, which has no correlation to the script constants, sadly much smaller too.
iprp_kitcost.2daItem Property Healing Kit cost tableYesYesYesUnknownAdditional rows can be added just needs testing.
iprp_lightcost.2daItem Property Light cost table (Brightness)YesYesYesHardcodedSpecific visualeffects.2da lines are loaded with a combination of this and iprp_color.2da. Sadly these are hardcoded although the VFX lines could be altered.
iprp_matcost.2daItem Property Material cost tableYesYesYesUnknownAdditional rows can be added just needs testing. This property doesn't do anything in the engine and can be altered fine.
iprp_material.2daItem Property Material tableYesYesYesUnknownAdditional rows can be added just needs testing. This property doesn't do anything in the engine and can be altered fine.
iprp_meleecost.2daItem Property cost table for a variety of basic +1, +2 etc properties - AC, Attack, Enchantment, Regeneration, etc.YesYesYesUnknownAdditional rows can be added just needs testing.
iprp_monstcost.2daItem Property Monster Damage cost table.YesYesYesUnknownAdditional rows can be added just needs testing.
iprp_monsterhit.2daItem Property Monster: On Hit table. It is hardcoded so should probably not be altered.YesYesYesHardcodedThese references are hardcoded, even if the 2da is used to load the correct parameter tables.
iprp_neg10cost.2daUsed for Item Properties; Ability Score Reduction and Skill Penalty.YesYesYesUnknownAdditional rows can be added just needs testing.

Used for Item Properties; Enchantment Penalty (attack and damage), Damage Penalty, Decreased AC, Reduced Saving Throws, Attack Penalty

YesYesYesUnknownAdditional rows can be added just needs testing.
iprp_onhit.2daItem Property On Hit table, defines all the hardcoded engine On Hit properties and the param1 values (eg; what ability to drain, the duration/change to occur, etc.). The cost table determines the DC.YesYesYesHardcodedThis list is hardcoded to engine values. However the sub properties (DC, chance/duration) can be altered for particular ones as noted.
iprp_onhitcost.2daItem Property On Hit cost table (the DC of the On Hit saving throw)YesYesYesUnknownAdditional rows can be added just needs testing.
iprp_onhitdur.2daItem Property On Hit duration table. Used only for some On Hit properties, it defines things like 5% chance / Duration 5 rounds.YesYesYesUnknownAdditional rows can be added just needs testing.
iprp_onhitspell.2daItem Property On Hit Cast Spell table. Add more spells to use in this property here.YesYesYesUnknownAdditional rows can be added just needs testing.
iprp_paramtable.2daItem Property Parameter Table table. In itempropdef.2da the column Param1ResRef refers to this table.YesYesYesUnknownAdditional rows can be added just needs testing.
iprp_poison.2daItem Property On Hit: Posion. It simply lists the poison ability damage. Otherwise hardcoded.YesYesYesHardcodedThe 6 ability scores are all you're going to get.
iprp_protection.2daItem Property Damage Reduction, amount of enchantment needed to penetrate it (eg; +2 would need a +2 weapon to bypass).YesYesYesUnknownThis is likely hardcoded due to other aspects of the game assuming a +0 to +20 range for DR and enchanted weapon properties. However it might be extendable, but would need a lot of testing.
iprp_qualcost.2daItem Property Quality cost tableYesYesYesUnknownNeeds testing but this is essentially a customisable item property which has no ties to the engine so could be extended fine.
iprp_quality.2daItem Property Quality tableYesYesYesUnknownAs above.
iprp_redcost.2daItem Property Reduced Weight cost table (eg: -20%, -40%)YesYesYesUnknownNeeds testing. Likely can be extended however; has a suitable Value column to use.
iprp_resistcost.2daItem Property Damage Resistance cost table (Eg: 20/-, 30/-)YesYesYesUnknownNeeds testing. Likely can be extended however; has a suitable Value column to use.
iprp_saveelement.2daItem Property: Improved/Decreased Saving Throws. Note there are the entries for Traps, Spells, Law, Chaos, Good and Evil but without valid TLK entries which means they cannot be selected. Adding TLK entries to them allows them to be picked.YesYesYesHardcodedThe list is hardcoded, especially since it includes things that are not usual saving throw types (dummied out) like Backstab and Illusion.
iprp_savingthrow.2daItem Property: Improve Saving Throw Specific and Reduce Saving Throw Specific.YesYesYesHardcodedHardcoded; has "All" plus the 3 base throws Fortitude, Will and Reflex.
iprp_skillcost.2daItem Property: Skill Bonus cost tableYesYesYesUnknownMore values can likely be added needs testing to what extent and what value breaks skills in general (if you remove the cap on bonuses).
iprp_soakcost.2daItem Property: Damage Reduction, the soak value cost table (eg; the 30 in Damage Reduction +15 / Soak 30)YesYesYesUnknownNeeds testing. Likely can be extended.
iprp_spellcost.2daImmunity: Specific Spell. Yes you have to add your new spells to this list to have specific immunities on item properties.YesYesYesUnknownNeeds testing. Likely quite large.

On Hit: Cast Spell caster level of the spell cast, eg: On Hit: Call Lightning [Level 10]

Really wish this method was used for the Cast Spell property for variable spell levels there! Alas...

YesYesYes0 - 40 likelyLevel 40 caster level is usually the max, might be it can go up higher needs testing.
iprp_spelllvcost.2daBonus Spell Slot of Level cost table.YesYesYesHarccodedSpells only go from level 0 to 9.
iprp_spelllvlimm.2daImmunity: Spells by Level cost table.YesYesYesHardcodedSpells only go from level 0 to 9.
iprp_spells.2daItem Property: Cast Spell spell list. Not just spells, but things like genades and Activate Item is defined as a "spell".YesYesYes

iprp_spellshl.2daItem Property Immunity: Spell School list.YesYesYesHardcodedThe spell school list is hardcoded (although the name references could be changed no new ones can be added).
iprp_srcost.2daiItem Property Spell Resistance cost table.YesYesYes

iprp_trapcost.2daItem Property Trap cost table - the index into traps.2da for each trap type at each difficulty level.YesYesYesUnknownNeeds testing. It is likely you could add more trap types but not so sure on adding difficulties.
iprp_traps.2daItem Property Trap - this is used to define the cost multiplier for the different trap difficulties.YesYesYesUnknownNeeds testing. It is likely this is hardcoded but could do with a test (also would need edits to iprp_trapcost.2da)
iprp_visualfx.2daItem Property Visual FX - used for weapon VFX. Extendable with NWN:EEYesYesYesUnknownNeeds testing. Can be extended.
iprp_walk.2daItem Property Special Walk. In EE you can now define more of these and use them properly.YesYesYesUnknownNeeds testing. Can be extended.
iprp_weightcost.2daItem Property Weight Increase cost table.YesYesYesUnknownNeeds testing. Can be extended.
iprp_weightinc.2daItem Property Weight Increase property table.YesYesYesUnknownNeeds testing. Can be extended.
itempropdef.2daItem Property Definitions 2da. This defines what item properties there are in the game. New ones can be added more easily in EE with ItemPropertyCustom, although they show up in the toolset fine.YesYesYesUnknownNeeds testing. Can be extended.
itemprops.2daItem Properties 2da - this defines what items can use what properties. If you want your new item property to be usable on an item it needs adding here. New columns can be added but most new item types reuse an existing column for ease.YesYesYesUnknownNeeds testing. Can be extended with more columns too.
itemvalue.2daItem Value, controlling the items a character of a certain level can equip if the Game Option "Item Level Restrictions" is on (always off in singleplayer).YesYesYes0 - 59Classes cap at 60 so no need to extend.


Toolset only; Item Wizard 2da filesNoNoYesUnknownItem Wizards are not something anyone realistically will edit much so no doubt no one will test this.
itmwizarmor.2daToolset only; Item Wizard 2da filesNoNoYesUnknownItem Wizards are not something anyone realistically will edit much so no doubt no one will test this.
itmwizhelmet.2daToolset only; Item Wizard 2da filesNoNoYesUnknownItem Wizards are not something anyone realistically will edit much so no doubt no one will test this.
itmwizmelee.2daToolset only; Item Wizard 2da filesNoNoYesUnknownItem Wizards are not something anyone realistically will edit much so no doubt no one will test this.
itmwizpotion.2daToolset only; Item Wizard 2da filesNoNoYesUnknownItem Wizards are not something anyone realistically will edit much so no doubt no one will test this.
itmwizranged.2daToolset only; Item Wizard 2da filesNoNoYesUnknownItem Wizards are not something anyone realistically will edit much so no doubt no one will test this.
itmwizrods.2daToolset only; Item Wizard 2da filesNoNoYesUnknownItem Wizards are not something anyone realistically will edit much so no doubt no one will test this.
itmwizscroll.2daToolset only; Item Wizard 2da filesNoNoYesUnknownItem Wizards are not something anyone realistically will edit much so no doubt no one will test this.
itmwizstaves.2daToolset only; Item Wizard 2da filesNoNoYesUnknownItem Wizards are not something anyone realistically will edit much so no doubt no one will test this.
itmwizthrow.2daToolset only; Item Wizard 2da filesNoNoYesUnknownItem Wizards are not something anyone realistically will edit much so no doubt no one will test this.
itmwiztrap.2daToolset only; Item Wizard 2da filesNoNoYesUnknownItem Wizards are not something anyone realistically will edit much so no doubt no one will test this.
itmwizwands.2daToolset only; Item Wizard 2da filesNoNoYesUnknownItem Wizards are not something anyone realistically will edit much so no doubt no one will test this.
keymap.2daEven though it doesn't have identifying ID lines, it appears this is used to determine a lot key bindings (maybe defaults in some cases?)YesYesNoHardcodedCan't add more keyboard actions
lightcolor.2daSeems to define some lighting colours for main and source lights in the toolset and in game.YesYesYesUnknownNeeds testing, would be interesting if it was expandable.
loadhints.2daLoad hints used on Load Screens used by the game. Client just gets a random ID to use.YesNoNoUnknownNeeds testing. Since it's not used in network traffic it doubtless can be quite high.
loadscreens.2daLoad Screens used by the game.YesYesYesUnknownNeeds testing.
masterfeats.2daMaster Feats contain other feat options inside them, eg; Weapon Focus. See feat.2da as wlel.YesYesYesUnknownNeeds testing.
namefilter.2daUsed to filter bad words from the random name generator (toolset also uses this for creature names).YesMaybe?YesUnknownNeeds testing.
packages.2daPackages are used by the class system to allow people to not bother choosing level up feats/skills. Button can be removed by ruleset.2da nowadays. Server may use it in LevelUpHenchman, and Toolset can generate NPCs using these packages.YesYesYesLikely 0 - 255Needs testing but GFF field stores it as BYTE (0 - 255)
packeqXXX.2daPackage - Equipment. Can be defined as any name but this is the standard one.YesYesYesUnknownNeeds testing.
packftXXX.2daPackage - Feats. Can be defined as any name but this is the standard one.YesYesYesUnknownNeeds testing.
packskXXX.2daPackage - Skills. Can be defined as any name but this is the standard one.YesYesYesUnknownNeeds testing.
packspXXX.2daPackage - Spells. Can be defined as any name but this is the standard one.YesYesYesUnknownNeeds testing.
parts_belt.2daArmor Belt parts.YesYesYesUnknownNeeds testing. Can be extended.
parts_bicep.2daArmor Bicep parts.YesYesYesUnknownNeeds testing. Can be extended.
parts_chest.2daArmor Chest parts. This is what really determines the AC of the appearance. The float values are floored.YesYesYesUnknownNeeds testing. Can be extended.
parts_foot.2daArmor Foot parts.YesYesYesUnknownNeeds testing. Can be extended.
parts_forearm.2daArmor Forearm parts.YesYesYesUnknownNeeds testing. Can be extended.
parts_hand.2daArmor Hand parts.YesYesYesUnknownNeeds testing. Can be extended.
parts_legs.2daArmor Legs parts.YesYesYesUnknownNeeds testing. Can be extended.
parts_neck.2daArmor Neck parts.YesYesYesUnknownNeeds testing. Can be extended.
parts_pelvis.2daArmor Pelvis parts.YesYesYesUnknownNeeds testing. Can be extended.
parts_robe.2daArmor Robe parts.YesYesYesUnknownNeeds testing. Can be extended.
parts_shin.2daArmor Shin parts.YesYesYesUnknownNeeds testing. Can be extended.
parts_shoulder.2daArmor Shoulder parts.YesYesYesUnknownNeeds testing. Can be extended.
phenotype.2daThe phenotypes available to fuller player models, eg Humans, so they can have horses, or be "Big". Server sends the ID to the client since it's purely model related.YesNoYes0 - 20Needs fully testing but there is a limit of 20 constants in nwscript.nss so this is likely the engine hardcoded limit.
placeableobjsnds.2daThe sounds placeable objects make when opened/attacked/etc. Server just sends the right ID line to the client to load the sound.YesNoNoUnknownNeeds testing.
placeables.2daPlaceable object appearances and propertiesYesYesYesUnknownNeeds testing.
poison.2daPoisons the game uses in EffectPoison. On Hit variant is just pure ability damage.NoYesNoUnknownNeeds testing.
polymorph.2daPolymorphs used by EffectPolymorph which change your character into something else entirely.NoYesNoUnknownNeeds testing.
portraits.2daPortiaits available in the game. Users can use their own portraits (given ruleset.2da settings) but this is the list primarily used.YesYesYesUnknownNeeds testing. Field is stored as WORD (0 to 65535).
pregen.2daPregenerated characters available to filter in character select. If in this list and the tickbox "Show Pregenreated Characters" is unticked they disappear as they're filtered out.YesNoNoUnknownNeeds testing.

The amount and priority of sounds and when they can be interrupted.

With EE not sure if they can be dramatically increased or not.

YesNoNoHardcodedThe line references look to be hardcoded engine references.
progfx.2daNWN:EE unhardcoded "programmed effects" values.YesNoNoUnknownLikely same limit as visualeffects.2da if there is one
pvpsettings.2daToolset only list of PvP settingsNoNoYesHardcodedThe PvP settings are hardcoded in the engine.
race_feat_xxx.2daThe feats granted when a race is chosen.YesYesYesUnknownNeeds testing.
racialtypes.2daRacial types the game has, for players and NPCsYesYesYes255 likelyNeeds testing. GFF field is set to BYTE (0 - 255)
ranges.2daThe ranges used for creature perception and spells.NoYesNoHardcodedRange types are hardcoded to engine values.
repadjust.2daReputation adjustments the game makesNoYesNoHardcodedHardcoded list, but values can be altered.
replacetexture.2daNot really sure what this does. Tiles related?YesNoNoUnknownNeeds testing.
repute.2daToolset only defaults for the faction manager the game uses the modules settings.NoNoYesHardcodedHardcoded standard faction list
restduration.2daTime it takes at each level to rest with ActionRestNoYesNo60Classes are limited to 40 levels for PCs and 60 levels (mostly) for NPCs.
rrf_nss.2daThe dropdown in the toolset when opening a script has these categories and simple filters available.NoNoYesUnknownNeeds testing.
rrf_wav.2daThe dropdown in the toolset when opening a sound file has these categories and simple filters available.NoNoYesUnknownNeeds testing.
ruleset.2daNWN:EE allows some unhardoding of default feats and values the game uses, some very useful client side only options too.YesYesYesHardcodedAll values are hardcoded to particular lines of course.
skills.2daSkills list for players. Note that many lines are hardcoded (eg; Parry) and new skills will be missing relevant skill increasing feats (eg; Skill Focus).YesYesYes32Hardcoded due to network limitations to 255 but GUI issues make it a 32 skill limit. May only affect the "Untrained" column however?
skillvsitemcost.2daThe amount of skill needed by Use Magical Device to equip a particular magic item due to restrictions due to class/alignment/race.NoYesNoUnknownNeeds testing. No doubt it could be increased in numbers though to have more granular control.
skyboxes.2daSkybox model list. Skybox ID from the area is sent to client, server doesn't validate the 2da. Toolset uses it to load the list of available skyboxes.YesNoYesLikely 255Needs testing. GFF field is BYTE (0-255)
sounddefaultspos.2daDefault values for toolset placeable sound typesNoNoYesHardcodedToolset uses this for the default values of the different placeable sound types.
sounddefaultstim.2daDefault values for toolset placeable sound typesNoNoYesHardcodedToolset uses this for the default values of the different placeable sound types.
soundeax.2daEAX values are still in the toolset mainly for compatibility, as of EE they are no longer used.NoNoYesHardcodedHardcoded but unused by the game so who cares.
soundset.2daSoundset references.YesNoYes65535 LikelyNeeds testing. GFF field stores it as WORD (0 to 65535)
soundsettype.2daColumn "Type" in soundset.2da refers to this. The categories of soundset file in the toolset, unused out of the toolset however since only 0 matters for chargen (PC voicesets)NoNoYesUnknownNeeds testing.
spells.2daSpells and abilities usable by creaturesYesYesYes4096Possibly 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.
spellschools.2daSpell schools. The amount is hardcoded but you should be able to alter the TLK strings now.YesYesNoHardcodedHardcoded list
statescripts.2daState scripts run when under the effect of certain effects, also shows the games default priority list for themNoYesNoHardcodedEntirely hardcoded.
stringtokens.2daString tokens like <Man/Woman> used in conversations and in general. See Conversations.NoYesYesUnknownNeeds testing, can new ones be even added?
surfacemat.2daSurface material definitions, such as grass/water/lava. In EE now extended with actions and able to be affected in hakpack files.YesYesYes640 through 63 are valid lines for this in patch 1.84.8193.29 and up.
swearfilter.2daStops swearing in the game if [] is enabled in settings.tml (I think this is a client only option? Needs testing!). Note the columns cannot be rearranged for whatever reason.YesYesNoUnknownNeeds testing.

Tailmodel reference file. Note that Bioware added a lot of "real" models to be used with invisible appearance things for scaling. Bit unnecessary nowadays in EE!

Server just sends the ID number to the client to load the model in this file.

YesNoYesUnknownGiven there are over 5000 lines the answer is "High"
tilecolor.2daLoaded by the game but does it do anything or does lightcolor.2daNoYesUnknownUnknownNeeds testing (if it's even in use).
XXX_edge.2daTileset edge information. One per tileset.NoYesYesUnknownNeeds testing.
traps.2daTraps, which are item properties and the placed on objects/as trap triggers on the ground.YesYesYesUnknownNeeds testing.
vfx_persistent.2daPersistent VFX, ie items created with EffectAreaOfEffect.NoYesNoUnknownNeeds testing.
visualeffects.2daVisual Effects the game uses, called from the game (see Hardcoded VFX References) or by EffectVisualEffect.YesYesNoUnknownNeeds testing.
waypoint.2daToolset only waypoint definition file. Basically waypoints are not "real" so this defines the different types so they show properly in the toolset with a model.NoNoYesUnknownNeeds testing.
weaponsounds.2daThis is a file referenced for sounds from baseitems.2da, what is being used labelled on the left, and the thing it is hitting as a column name.YesNoNoUnknownNeeds testing.
weathertypes.2daWeather related 2da. Server just tells client which line number to load.YesNoNoUnknownNeeds testing.

Wing models reference file. Wings are things on the back node so can include weapons and scabbards etc.

Server just sends the reference ID number for the client to load.

YesNoNoUnknownNeeds testing.

Used to value the XP given from monsters using the default game XP.

If you set the XP slider in the module to 0 it will disable killer XP from this file, then you can grant your own XP on death.

NoYesNo40 or 60Players can only be level 40 normally so the file only goes up to 40. NPCs can be 60.

Unused 2da files

Bioware left in some 2da files from early development (before game release) or they're now unused in NWN:EE. These files are not loaded by the game, toolset or Get2DAString at all and can be ignored. They do get confusing however.

2da File NameTypeNotes

See vfx_persistent.2da instead

armourtypes.2daUnusedWhile the GFF documentation suggests it is used, the game really just ignores it and uses defaultacsounds.2da to look up which AC value gets which sound effect. 0 being no armor or clothing.
caarmorclass.2daUnusedEarly armor class system or holdover from an older game perhaps.
categories.2daUnusedNot loaded by the game, in fact not even a valid 2da file (it's missing line 0). The constants for TALENT_CATEGORY_XXX are just hardcoded in the engine. Adding things to do this does nothing.
catype.2daUnused"P", "H", "GIHE", "C", "A" - mysterious! category types? Early phenotype listing? Or model complexity listing?
combatmodes.2daUnusedUnused references to (a limited set) of combat action modes
doortype.2daUnusedSee doortypes.2da instead

Pretty much a blank file. See visualeffects.2da instead

gamespyrooms.2da1.69 onlyGamespy no longer used / this isn't used

"Dancing_Scimitar" IPRP 2da file by the looks of it, alas an unusable item property

iprp_monsterdam.2daUnusedSeems to be unused since creature weapons use a base item type to define the Monster Damage item property damage. Since it contains an entry for "Bite/Rend" it was probably tested this way and then changed in development.
iprp_slotscost.2daUnusedBlank, maybe at some stage the inventory was more BG style and "slot cost" was to do with extending it.
iprp_staminacost.2daUnusedBlank, obviously no stamina in the game
iprp_terraintype.2daUnusedBlank but would have obviously been used for the "Restriction: Terrain" item property.
iprp_trapsize.2daUnusedLikely unused given it's not referenced in any 2da file, and misses the "Epic" mokier. Maybe a pre-release had traps of varying ground size.
metamagic.2daUnusedAppears to be unused by the game making all of these hardcoded references, similar to categories.2da how it looks usable but isn't
nwconfig.2da1.69 onlyUnused as of NWN:EE since it removes the "settings" nwconfig program.
nwconfig2.2da1.69 onlyLooks like it's something to do with the legacy launcher which popped up before running 1.69
placeabletypes.2daUnusedI think an old toolset 2da, now there are proper pallets for placeable types
resistancecost.2daUnusedBlank 2da file, probably from early dev

Replaced probably by rrf_wav.2da and would be toolset specific anyway

soundgain.2daUnusedSeems to be unused by the game and toolset, but should define the loudness and distance of sounds. Given theg ames default perception range is 45M maybe at one point you could see much further (up to 100M!)
soundprovider.2da1.69 onlyAs of EE this is no longer used, since it refers to Miles and EAX both of which were replaced with OpenAL
soundtypes.2daUnusedSounds are not tied to a 2da, but are done by resource name
treasurescale.2daUnusedI 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. Possibly was part of early Item Wizard generations (instead it gives a magic item range, None to Godly).
vfx_fire_forget.2daUnusedPretty early dev file, very empty. See visualeffects.2da instead.
videoquality.2da1.69 onlyNo longer used in EE, was the old 1.69 video quality settings - in the launcher I think


UnusedSeems to not be in use when file is altered so likely some old XP system file

Designer 2da files

These are strictly used by Get2DAString and not used by the game inherently. However the systems they relate to are things like crafting, which is called by default game scripts and conversations the PCs can activate.

They are all prefixed des_ - and being only used by Get2DAString they are serverside only.

There is one special case here: x3restrict.2da is used in the default game spells to restrict polymorph spells when casting on a horse. Added for horse support.

Client and Serverside 2das

The game as a whole is made up of the client and the server. A singleplayer game essentially runs both at once for the local user - of course other players may still join if it is created as a network game. Therefore it is important to understand which is which, since some 2da files you don't need to include at all in hakpack or nwsync resource lists, and can be left in the .mod or override folder on a PW server perfectly fine.

The client ones tend to be based around levelling up, appeareances, visuals (icons, vfx, textures, etc.) and sounds (the latter 3 servers don't even load of course). Servers need to know about all the resources loaded by the game in regards to objects, spells, etc.

It is recommended of course for the server to have copies of everything (if only for Get2DAString lookups) while you can lessen the amount put in client hakpacks or on nwsync if sending certain ones to the client.

Note: If a file is not listed here (or above as a toolset only, or unused one) it might still be used!

Client and Server

2da load reference2da NameNotes
m_paIPRPCostTables // all of themAll cost tables in iprp_costtable.2da column "Name"Example: iprp_bonuscost.2da
m_pSurfaceMaterialTablesurfacemat.2daLoaded at game start so you cannot change it in a hakpack file, only in the override folder
m_pIPRPLightTableNot sure - probably iprp_lightcost.2da ?

Presumably also all the relevant class package 2das

chargenclothes.2daClothing items must be part of the base game, or included in the hak as UTI resources



Likely needed for both (chargen needs feat.2da, and server obviously needs it for backend stuff)

namefilter.2daNo bad words, naughty! Probably char gen only?

swearfilter.2daNo swearing for you!

prioritygroups.2daSound related but may be just client side (along with some others) usually never edited by hakpacks anyway.

Client Only

While many of these are only loaded by the game client, the toolset would still make regular use of them, for instance, to be able to have a blueprint reference a particular wing model on a suitable NPC.

It is always recommended to have these available on the server if only for Get2DAString lookups.

2da load reference2da NameNotes
m_pPartTablecapart.2daArmor Model appearance related
m_pArmorTypesTablearmourtypes.2daSounds loading (cloth, leather, plate, chain)
m_pTileColorTabletilecolor.2daTexture loading
m_pReplaceTextureTablereplacetexture.2daTexture loading
m_pTailModelTabletailmodel.2daModel appearance related
m_pWingModelTablewingmodel.2daModel appearance related

Model appearance related

Note: CopyItemAndModify() may use this server-side in some instances (non-PLT based ones which there are none in the base game).

m_pCursorTablecursors.2daFor the cursors for certain default game actions.
m_pActionsTableactions.2daFor GUI icons list (player action list top left)
m_pAmbientMusicTableambientmusic.2daServer tells client which line to load, which refers to this for the sound files
m_pAmbientSoundTableambientsound.2daServer tells client which line to load, which refers to this for the sound files
m_pFootstepSoundsTablefootstepsounds.2daSounds loading
m_pAppearanceSoundsTableappearancesndset.2daSounds loading
m_pWeaponSoundsTableweaponsounds.2daSounds loading
m_pDefaultACSoundsTabledefaultacsounds.2daSounds loading
m_pAmmunitionTypesTableammunitiontypes.2daSounds loading
m_pKeymapTablekeymap.2daClient GUI default keys/shortcuts
m_pPlaceableSoundsTableplaceableobjsnds.2daSounds loading


GUI showing how damaged something is (Formats the text over creatures heads)
m_pEffectIconsTableeffecticons.2daGUI effect icons (top right, inspect panel on items/characters, character sheet)
m_pLoadHintsTableloadhints.2daLoading string text loading
m_pSwearFilterTableswearfilter.2daIt's funny how this is here. I presume it alters incoming messages not outgoing ones? Needs testing. Servers can implement changes to PC chat to implement a filter using OnPlayerChat event.
m_pPhenoTypeTablephenotype.2daModel appearance related
m_pIPRPVisualFxTableiprp_visualfx.2daVisual effects
m_pWeatherTypesTableweathertypes.2daClient is just told which line to load

Server Only

2da load reference2da NameNotes
Any custom 2daeg: des_crft_aparts.2daLoaded with Get2DAString so entirely script based access

m_pStateScriptsTablestatescripts.2daRuns specific scripts
m_pPoisonTablepoison.2daApplies effects / timings of effect changes
m_pDiseaseTabledisease.2daApplies effects / scripts / timing of effect changes
m_pRepAdjustmentsTablerepadjust.2daEngine changes to "reputation" ie; if they're hostile or not.
m_pFractionalCRTablefractionalcr.2daWorks out how much a goblin with 1/4CR is "worth" in the engine XP system/"difficulty" tags (eg; "Easy" enemy when inspected)
m_pEncounterDifficultyTableencdifficulty.2daThe "value" column is loaded when referenced from the encounters GFF
m_pCategoryTablecategories.2daUsed by the functions for talents. Some is hardcoded (eg; potion lines). So yeah.
m_pExcitedDurationTableexcitedduration.2daPresumably amount of time in milliseconds (so 10 seconds) the thing is considered in combat after the events listed
m_pRestDurationTablerestduration.2daAmount of milliseconds to sit on the ground for
m_pXpBasexptable.2daUsed for giving out XP

Note the "45.0M" range for streaming in usable placeables is hardcoded, and a maximum of visibility regardless of values here of any creature object.

m_pDamageHitVisualTabledamagehitvisual.2daSends a relevant visualeffect.2da line number to the client
m_pBodyBagTablebodybag.2daReferences a placeables.2da line


m_pIPRPMonsterDamageTableiprp_monstercost.2daMonster Damage item property table
m_pOnHitTableiprp_onhit.2daNote this pretty much is hardcoded

NWNX Reference

Source of what is referenced by the game engine (not complete - some 2da files seem to be loaded from elsewhere such as swear filters). It relates to this file:

    // client+server
    m_paIPRPCostTables // all of them

    // client only

    // server only

  • No labels