Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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 fileLine Limit (assuming 0 start)Notes
baseitems.2da255Hardcoded due to network limitations; items may not function as intended.
classes.2da254Hardcoded due to network limitations plus "255" number is reserved as "CLASS_TYPE_INVALID"
feats.2da32,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.2da32Hardcoded due to network limitations; may only affect the "Untrained" column however? https://github.com/Beamdog/nwn-issues/issues/171

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.

  • areaeffects.2da - See persistent.2da instead
  • caarmorclass.2da - remnants of armour system?
  • 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?
  • placeabletypes.2da - Should be replaced by the pallet system
  • 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

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.

Toolset only 2da files

These are only used by the toolset, not directly by the game:

  • environment.2da - Used to load some initial lighting settings in the Area Properties.
  • itmwizXXX.2da - Item Wizard 2da files, they relates to what properties are valid for each item type (eg; Melee) and are generated by the wizards.
  • repute.2da - Used to define the default reputations of Player, Hostile, Commoner and Merchant in a new module
  • rrf_nss.2da - Filters for scripts in the toolset
  • rrf_wav.2da - Filters for sounds in the toolset
  • waypoint.2da - "waypoint" types, of course in game are never rendered

Client and Serverside 2das

...

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_pAppearanceTableappearance.2da
m_pGenderTablegender.2da
m_pSurfaceMaterialTablesurfacemat.2da
m_pVisualEffectTablevisualeffects.2da
m_pPersistentVisualEffectTablevfx_persistent.2da
m_pCreatureSpeedTablecreaturespeed.2da
m_pDoorTypesTabledoortypes.2da
m_pGenericDoorsTablegenericdoors.2da
m_pPlaceablesTableplaceables.2da
m_pAreaTransitionTableNot sureLikely 2da linking the load screens to showloadscreens.2da
m_pIPRPSpellsiprp_spells.2da
m_pIPRPLightTableNot sure - probably iprp_lightcost.2da ?
m_pIPRPColoriprp_color.2da
m_pIPRPMeleeiprp_meleecost.2da
m_pItemPropDefTableitempropdef.2da
m_pItemPropsTableitemprops.2da
m_pCreatureSizeTablecreaturesize.2da
m_pArmorTablearmor.2da
m_pEncumbranceTableencumbrance.2da
m_pPortraitTableportraits.2da
m_pPartsChestparts_chest.2da
m_pSpellSchoolTablespellschools.2da
m_pTrapTabletraps.2da
m_pLightColorTablelightcolor.2da
m_pIPRPDamageTableiprp_damagecost.2daMay be others too
m_pPartsRobeparts_robe.2da
m_pItemValueitemvalue.2da
m_pPackagespackages.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

masterfeats,2daLikely needed like how feats.2da is needed

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

swearfilter.2daNo swearing for you!

prioritygroups.2daSound related

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.

...

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_pPartsBeltparts_belt.2da
m_pPartsBicepparts_bicep.2da
m_pPartsFootparts_foot.2da
m_pPartsForearmparts_forearm.2da
m_pPartsHandparts_hand.2da
m_pPartsLegsparts_legs.2da
m_pPartsNeckparts_neck.2da
m_pPartsPelvisparts_pelvis.2da
m_pPartsShinparts_shin.2da
m_pPartsShoulderparts_shoulder.2da
m_pXpBaseexptable.2daLevelling up chart
m_pAssociatesAnimalCompanionTablehen_companion.2da
m_pAssociatesFamiliarTablehen_familiar.2da
m_pSkillVsItemCostTableskillvsitemcost.2da
m_pRangesTableranges.2da

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_pPolymorphTablepolymorph.2da
m_pDamageHitVisualTabledamagehitvisual.2daSends a relevant visualeffect.2da line number to the client
m_pBodyBagTablebodybag.2daReferences a placeables.2da line
m_pIPRPFeatsTable

iprp_feats.2da


m_pIPRPMonsterDamageTableiprp_monsterdam.2da
m_pOnHitTableiprp_onhit.2daNote this pretty much is hardcoded
m_pOnHitSpellTableiprp_onhitspell.2da
m_pOnHitDurationTableiprp_onhitdur.2da
m_pIPRPACModTypeTableiprp_acmodtype.2da
m_pIPRPWeightIncTableiprp_weightinc.2da
m_pIPRPArcSpelliprp_arcspell.2da
m_pIPRPBonusCostTableiprp_bonuscost.2da
m_pIPRPSRCostTableiprp_srcost.2da

...