Skip to content
Benjamin Auquite edited this page Apr 28, 2026 · 38 revisions

2DA — Two-Dimensional Array

The Two-Dimensional Array (2DA) format is one of the engine's main configuration-table formats. PyKotor's TwoDA model stores ordered headers, ordered row labels, and string-valued cells, while its extraction metadata enumerates large catalogs of KotOR tables such as appearance.2da, baseitems.2da, classes.2da, feat.2da, skills.2da, spells.2da, placeables.2da, itemprops.2da, soundset.2da, and many iprp_* families. [twoda_data.py, extract/twoda.py]

Each 2DA file is a table: rows are identified by labels, columns are identified by header text, and the on-disk cell payload is ultimately reconstructed as strings that callers interpret as integers, floats, ResRefs, StrRefs, or sentinel values such as **** depending on the column. PyKotor documents both binary 2DA V2.b and ASCII 2DA V2.0 handling, and xoreos-tools ships a dedicated convert2da utility alongside its other BioWare reverse-engineering tools. [io_twoda.py, twoda_data.py, xoreos-tools README.md]

The layout documented below matches the same core binary structure implemented in PyKotor, reone, xoreos, Kotor.NET, KotOR.js, KotOR-Unity, and reubenduncan's standalone format notes. To modify 2DA tables in a mod without replacing the whole file, use TSLPatcher/HoloPatcher 2DAList syntax. 2DA tables are also referenced widely from GFF resources and installer workflows through the schemas cataloged in PyKotor's extraction registry. [io_twoda.py, reone 2dareader.cpp, xoreos 2dafile.cpp, Kotor.NET TwoDABinaryStructure.cs, KotOR.js TwoDAObject.ts, KotOR-Unity 2DAObject.cs, kotor docs/2da.md, extract/twoda.py]

Important: While the 2DA binary layout is shared across BioWare's Aurora, Odyssey, and Eclipse engines, all column structures and engine usage descriptions on this page are specific to KotOR and KotOR II.

Table of Contents


file structure Overview

2DA files are tabular game data; role in modding and merge workflows: see the 2DA section on Concepts. On disk in game archives they use binary version V2.b and the .2da extension. The engine loads them with the same resource resolution order as other resources:

PyKotor's 2DA implementation lives in Libraries/PyKotor/src/pykotor/resource/formats/twoda/, with binary V2.b parsing and writing in io_twoda.py, CSV interchange support in io_twoda_csv.py, and format detection/dispatch in twoda_auto.py. The in-memory table model itself is defined in twoda_data.py. Equivalent binary-layout readers or writers exist in reone, xoreos, Kotor.NET, KotOR.js, KotOR-Unity, and reubenduncan's kotor notes. [io_twoda.py, io_twoda_csv.py, twoda_auto.py, twoda_data.py, reone 2dareader.cpp, xoreos 2dafile.cpp, Kotor.NET TwoDABinaryStructure.cs, KotOR.js TwoDAObject.ts, KotOR-Unity 2DAObject.cs, kotor docs/2da.md]

See also


format

The sections below document the binary V2.b layout used by the KotOR engine in packed resources (see overview above for PyKotor module split).

File Header

The file header is 9 bytes in size:

Name type offset size Description
file type char 0 (0x00) 4 Four-byte type tag written as "2DA " in the parsers cited below
file Version char 4 (0x04) 4 Always "V2.b"
Line Break uint8 8 (0x08) 1 Newline character (\n, value 0x0A)

PyKotor validates a literal "2DA " file type followed by "V2.b" and a newline; reone checks for the eight-byte "2DA V2.b" signature before skipping the newline; KotOR.js and KotOR-Unity both write or read the same space-padded form; and xoreos defines both "2DA " and "2DA\t" constants in its parser code while its binary writer emits "2DA V2.b\n". The safest cross-parser statement is therefore that the normal binary header in active KotOR tooling is "2DA " + "V2.b" + "\n". [io_twoda.py, reone 2dareader.cpp, xoreos 2dafile.cpp, KotOR.js TwoDAObject.ts, KotOR-Unity 2DAObject.cs]

Column Headers

Column headers immediately follow the header, terminated by a null byte:

Name type Description
Column Headers char[] Tab-separated column names (e.g., "label\tname\tdescription")
Null Terminator uint8 Single null byte (\0) marking end of headers

Each column name is terminated by a tab character (0x09), and the entire header list is terminated by a null byte (0x00). PyKotor, reone, xoreos, Kotor.NET, and the reubenduncan parsers all follow that same header walk. [io_twoda.py, reone 2dareader.cpp, xoreos 2dafile.cpp, Kotor.NET TwoDABinaryStructure.cs, kotor docs/2da.md]

Row Count

Name type offset size Description
Row Count UInt32 varies 4 Number of data rows in the file (little-endian)

The row count is stored as a 32-bit little-endian integer, and that value determines how many row labels follow and how many cell offsets must be read. PyKotor reads it as uint32, reone reads it as Uint32, xoreos writes it as writeUint32LE, and the reubenduncan notes describe the same slot. [io_twoda.py, reone 2dareader.cpp, xoreos 2dafile.cpp, kotor docs/2da.md]

Row Labels

Row labels immediately follow the row count:

Name type Description
Row Labels char[] Tab-separated row labels (one per row, typically numeric)

Each row label is read as a tab-terminated string (tab character 0x09). Row labels are usually numeric ("0", "1", "2"...) but can be arbitrary strings.

Important: The row label list is not terminated by a null byte (0x00), so the reader must consume exactly row_count labels from the count field. This differs from column headers, which do use a null terminator. PyKotor, reone, KotOR-Unity, and the reubenduncan notes all implement or describe that bounded read. [io_twoda.py, reone 2dareader.cpp, KotOR-Unity 2DAObject.cs, kotor docs/2da.md]

Cell Data Offsets

After row labels, cell data offsets are stored:

Name type size Description
Cell Offsets uint16[] 2×N Array of offsets into the cell data string table. Row-major size N uses:
- row_count
- column_count
Values are stored little-endian.
Cell Data Size uint16 2 Total size of cell data string table in bytes (little-endian)

Each cell has a 16-bit unsigned integer offset (little-endian) pointing to its string value in the cell data string table. Offsets are stored in row-major order (all cells of row 0, then all cells of row 1, etc.). The cell data size field immediately follows the offset array and precedes the actual cell data.

Important: Offsets are relative to the start of the cell data string table (immediately after cell_data_size). Multiple cells can share one offset when they contain identical strings, enabling data deduplication, which is explicitly implemented in PyKotor's writer and described in reone, xoreos, KotOR.js, and the reubenduncan notes. [io_twoda.py, reone 2dareader.cpp, xoreos 2dafile.cpp, KotOR.js TwoDAObject.ts, kotor docs/2da.md]

Cell Data String Table

The cell data string table contains all cell values as null-terminated strings:

Name type Description
Cell strings char[] Null-terminated strings, deduplicated (same value shares offset)

The cell data string table begins immediately after the cell_data_size field. Each string is null-terminated (0x00). PyKotor's readers return empty strings when an offset is out of range or when a cell points at an empty terminator, while twoda_data.py and the reubenduncan parser both preserve "****" as a common explicit no-value sentinel in table content. The table is deduplicated, so multiple cells can share one offset. [io_twoda.py, twoda_data.py, KotOR-Unity 2DAObject.cs, kotor docs/2da.md]

Reading process: For each cell, the reader retrieves the 16-bit offset from the offset array (row_index × column_count + column_index), seeks to cell_data_start_position + offset, and reads a null-terminated string at that location. This behavior and the "****" empty-cell convention are consistent across reone 2dareader.cpp L54-L65, xoreos 2dafile.cpp L319-L335 and 2dafile.cpp L63-L64, KotOR-Unity 2DAObject.cs L85-L100, and kotor docs/2da.md L57-L64.


Data Structure

TwoDA Object

PyKotor's in-memory TwoDA object stores rows as list[dict[str, str]], headers as an ordered list[str], row labels as an ordered list[str], and an auxiliary _label_to_index dictionary for O(1) label lookup. The same class also exposes JSON serialization, row iteration that yields TwoDARow wrappers, structural helpers such as shape, columns, and index, and mutators such as add_column, remove_column, set_label, add_row, copy_row, and remove_row. [twoda_data.py]

That design is intentionally string-backed: PyKotor stores every parsed cell as a Python string in the table core and layers typed conversion on top only when callers ask for it. This is consistent with the binary format described above, where cells resolve through the shared string table rather than through per-column typed storage. [twoda_data.py, io_twoda.py]

TwoDARow Object

TwoDARow is a light wrapper around one row label plus one dict[str, str] cell map. Its accessors expose the same underlying string data through get_string, get_integer, get_float, and get_enum, while update_values and set_string write back into the same row map. In other words, the row object is a typed access facade over string-backed storage, not a second typed copy of the table. [twoda_data.py]


Cell value types

At the storage level, PyKotor treats every 2DA cell as text. TwoDARow.get_string returns the raw string, while get_integer, get_float, and get_enum are opt-in conversions layered on top of that string value. [twoda_data.py]

The third comparator binary confirms that this string-backed model also exists in BioWare's native runtime API: Aurora's C2DA class exposes GetCExoStringEntry @ (/K1/k1_win_gog_swkotor.exe @ 0x00413de0, /TSL/k2_win_gog_aspyr_swkotor2.exe @ TODO: Find this address, /Other BioWare Engines/Aurora/nwmain.exe @ 0x1401a6730), GetINTEntry @ (/K1/k1_win_gog_swkotor.exe @ 0x00414110, /TSL/k2_win_gog_aspyr_swkotor2.exe @ TODO: Find this address, /Other BioWare Engines/Aurora/nwmain.exe @ 0x1401a6e00), GetFLOATEntry @ (/K1/k1_win_gog_swkotor.exe @ 0x00413350, /TSL/k2_win_gog_aspyr_swkotor2.exe @ TODO: Find this address, /Other BioWare Engines/Aurora/nwmain.exe @ 0x1401a6af0), and SetBlankEntry @ (/K1/k1_win_gog_swkotor.exe @ TODO: Find this address, /TSL/k2_win_gog_aspyr_swkotor2.exe @ TODO: Find this address, /Other BioWare Engines/Aurora/nwmain.exe @ 0x1401a8830), which is exactly the split between raw string storage and typed interpretation. # Reference: /K1/k1_win_gog_swkotor.exe @ 0x00413de0, /K1/k1_win_gog_swkotor.exe @ 0x00414110, /K1/k1_win_gog_swkotor.exe @ 0x00413350, /Other BioWare Engines/Aurora/nwmain.exe @ 0x1401a6730, /Other BioWare Engines/Aurora/nwmain.exe @ 0x1401a6e00, /Other BioWare Engines/Aurora/nwmain.exe @ 0x1401a6af0, /Other BioWare Engines/Aurora/nwmain.exe @ 0x1401a8830

PyKotor's extraction registry shows how that interpretation is applied in practice for KotOR data. It groups columns into StrRef-bearing tables, generic ResRef-bearing tables, and narrower model, sound, music, texture, GUI, and script-reference families, which is stronger evidence than describing 2DA cells as if the file format itself had hardcoded scalar types. [extract/twoda.py]

Examples from the local registry include StrRef columns in classes.2da, feat.2da, skills.2da, spells.2da, and itemprops.2da; model or texture-style ResRef columns in appearance.2da, baseitems.2da, placeables.2da, and heads.2da; and audio-oriented ResRef columns in ambientmusic.2da, ambientsound.2da, footstepsounds.2da, guisounds.2da, and inventorysnds.2da. [extract/twoda.py]

"****" is best described as a common content-level no-value sentinel rather than as a separate storage type. PyKotor's twoda_data.py documents it as a conventional explicit empty marker, while the binary parser itself still reads the underlying payload as ordinary strings via offsets into the shared string table. [twoda_data.py, io_twoda.py]


Confirmed Engine Usage

Three analyzed binaries expose the same underlying 2DA subsystem even though symbol recovery quality differs between them. KotOR I exposes C2DA @ (/K1/k1_win_gog_swkotor.exe @ 0x00413cc0, /TSL/k2_win_gog_aspyr_swkotor2.exe @ TODO: Find this address, /Other BioWare Engines/Aurora/nwmain.exe @ 0x1401a62b0), CRes2DA @ (/K1/k1_win_gog_swkotor.exe @ 0x0041d730, /TSL/k2_win_gog_aspyr_swkotor2.exe @ TODO: Find this address, /Other BioWare Engines/Aurora/nwmain.exe @ 0x14019e2b0), Load2DArray @ (/K1/k1_win_gog_swkotor.exe @ 0x004143b0, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x00621e70, /Other BioWare Engines/Aurora/nwmain.exe @ 0x1401a73a0), and Unload2DArray @ (/K1/k1_win_gog_swkotor.exe @ 0x004139e0, /TSL/k2_win_gog_aspyr_swkotor2.exe @ TODO: Find this address, /Other BioWare Engines/Aurora/nwmain.exe @ 0x1401a9b10). KotOR II retains Load2DArray plus a large Load2DArrays_* family, while Aurora exposes the generic cache manager CTwoDimArrays::Load2DArrays @ (/K1/k1_win_gog_swkotor.exe @ TODO: Find this address, /TSL/k2_win_gog_aspyr_swkotor2.exe @ TODO: Find this address, /Other BioWare Engines/Aurora/nwmain.exe @ 0x1402b3920) together with GetCached2DA @ (/K1/k1_win_gog_swkotor.exe @ TODO: Find this address, /TSL/k2_win_gog_aspyr_swkotor2.exe @ TODO: Find this address, /Other BioWare Engines/Aurora/nwmain.exe @ 0x1402b31e0) and ClearCached2DAs @ (/K1/k1_win_gog_swkotor.exe @ TODO: Find this address, /TSL/k2_win_gog_aspyr_swkotor2.exe @ TODO: Find this address, /Other BioWare Engines/Aurora/nwmain.exe @ 0x1402b2fe0). # Reference: /K1/k1_win_gog_swkotor.exe @ 0x00413cc0, /K1/k1_win_gog_swkotor.exe @ 0x0041d730, /K1/k1_win_gog_swkotor.exe @ 0x004143b0, /K1/k1_win_gog_swkotor.exe @ 0x004139e0, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x00621e70, /Other BioWare Engines/Aurora/nwmain.exe @ 0x1401a62b0, /Other BioWare Engines/Aurora/nwmain.exe @ 0x14019e2b0, /Other BioWare Engines/Aurora/nwmain.exe @ 0x1401a73a0, /Other BioWare Engines/Aurora/nwmain.exe @ 0x1401a9b10, /Other BioWare Engines/Aurora/nwmain.exe @ 0x1402b3920, /Other BioWare Engines/Aurora/nwmain.exe @ 0x1402b31e0, /Other BioWare Engines/Aurora/nwmain.exe @ 0x1402b2fe0

The KotOR executables also preserve many table-specific loader entry points by name. Verified examples include Load2DArrays_Appearance @ (/K1/k1_win_gog_swkotor.exe @ 0x005c0270, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x00480c10, /Other BioWare Engines/Aurora/nwmain.exe @ TODO: KotOR-specific specialization not present), Load2DArrays_Spells @ (/K1/k1_win_gog_swkotor.exe @ 0x005c3e10, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x004853f0, /Other BioWare Engines/Aurora/nwmain.exe @ TODO: generic 2DA manager only), Load2DArrays_Placeables @ (/K1/k1_win_gog_swkotor.exe @ 0x005c1830, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x00482800, /Other BioWare Engines/Aurora/nwmain.exe @ TODO: generic 2DA manager only), Load2DArrays_SurfaceMaterial @ (/K1/k1_win_gog_swkotor.exe @ 0x005c0bb0, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x00481830, /Other BioWare Engines/Aurora/nwmain.exe @ TODO: generic 2DA manager only), and Load2DArrays_VisualEffect @ (/K1/k1_win_gog_swkotor.exe @ 0x005c0c80, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x00481920, /Other BioWare Engines/Aurora/nwmain.exe @ TODO: generic 2DA manager only). # Reference: /K1/k1_win_gog_swkotor.exe @ 0x005c0270, /K1/k1_win_gog_swkotor.exe @ 0x005c3e10, /K1/k1_win_gog_swkotor.exe @ 0x005c1830, /K1/k1_win_gog_swkotor.exe @ 0x005c0bb0, /K1/k1_win_gog_swkotor.exe @ 0x005c0c80, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x00480c10, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x004853f0, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x00482800, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x00481830, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x00481920

For shared table names, the string evidence is also present in all three analyzed binaries. Appearance appears at (/K1/k1_win_gog_swkotor.exe @ 0x00746efc, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x0098845c, /Other BioWare Engines/Aurora/nwmain.exe @ 0x140dc50b0), CLASSES at (/K1/k1_win_gog_swkotor.exe @ 0x007488ec, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x0098cc58, /Other BioWare Engines/Aurora/nwmain.exe @ 0x140dc4cd8), Skills at (/K1/k1_win_gog_swkotor.exe @ 0x00748a1c, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x0098cd5c, /Other BioWare Engines/Aurora/nwmain.exe @ 0x140dc51fc), SPELLS at (/K1/k1_win_gog_swkotor.exe @ 0x0074a4d0, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x0098b8cc, /Other BioWare Engines/Aurora/nwmain.exe @ 0x140dc56d8), BASEITEMS at (/K1/k1_win_gog_swkotor.exe @ 0x0074b294, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x0098b4c4, /Other BioWare Engines/Aurora/nwmain.exe @ 0x140dc39b8), and Feat or feat-related table labels at (/K1/k1_win_gog_swkotor.exe @ 0x00748ca0, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x00986500, /Other BioWare Engines/Aurora/nwmain.exe @ 0x140dc4958). # Reference: /K1/k1_win_gog_swkotor.exe @ 0x00746efc, /K1/k1_win_gog_swkotor.exe @ 0x007488ec, /K1/k1_win_gog_swkotor.exe @ 0x00748a1c, /K1/k1_win_gog_swkotor.exe @ 0x0074a4d0, /K1/k1_win_gog_swkotor.exe @ 0x0074b294, /K1/k1_win_gog_swkotor.exe @ 0x00748ca0, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x0098845c, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x0098cc58, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x0098cd5c, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x0098b8cc, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x0098b4c4, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x00986500, /Other BioWare Engines/Aurora/nwmain.exe @ 0x140dc50b0, /Other BioWare Engines/Aurora/nwmain.exe @ 0x140dc4cd8, /Other BioWare Engines/Aurora/nwmain.exe @ 0x140dc51fc, /Other BioWare Engines/Aurora/nwmain.exe @ 0x140dc56d8, /Other BioWare Engines/Aurora/nwmain.exe @ 0x140dc39b8, /Other BioWare Engines/Aurora/nwmain.exe @ 0x140dc4958

That is enough to say, conservatively, that 2DA is not merely a file-format convention in KotOR-era tooling; it is an engine-level runtime system with generic table loaders, cache-management helpers, typed accessors, and many named table consumers. It is not enough yet to keep every historic per-table claim that previously appeared in this section, so the remaining catalog below should be read as a documented table inventory unless a subsection explicitly adds its own loader evidence. [extract/twoda.py, reone src/libs/resource/parser/2da/]

Known 2DA Files

KotOR and TSL ship a large set of 2DA tables. The sections below group them by system and call out engine usage, column definitions, and the data each table drives. Engine usage descriptions are derived from the Confirmed Engine Usage loading analysis above, reone's dedicated 2DA table parsers (src/libs/resource/parser/2da/), and PyKotor's extraction metadata (extract/twoda.py).


Character & Combat 2DA files

appearance.2da

Engine Usage: appearance.2da is the appearance-to-rendering lookup table that KotOR uses for creature presentation and related physical metadata. The table name is present as Appearance in all three analyzed binaries at (/K1/k1_win_gog_swkotor.exe @ 0x00746efc, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x0098845c, /Other BioWare Engines/Aurora/nwmain.exe @ 0x140dc50b0), and KotOR I plus KotOR II both retain dedicated appearance loaders Load2DArrays_Appearance @ (/K1/k1_win_gog_swkotor.exe @ 0x005c0270, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x00480c10, /Other BioWare Engines/Aurora/nwmain.exe @ TODO: generic 2DA manager only). PyKotor and Holocron Toolset also treat it as a first-class cached table through TwoDARegistry.APPEARANCES and HTInstallation.TwoDA_APPEARANCES, and reone ships a dedicated appearance.cpp parser plus downstream creature usage. [extract/twoda.py, installation.py, reone appearance.cpp, reone creature.cpp]

Row index: Appearance ID (integer, typically 0-based)

Column structure:

Column Name type Description
label String (optional) Human-readable label for the appearance
modeltype String model type identifier (e.g., "F", "B", "P")
modela through modeln ResRef (optional) model ResRefs for different body parts or variations (models a-n)
texa through texn ResRef (optional) texture ResRefs for different body parts (textures a-n)
texaevil, texbevil, texievil, texlevil, texnevil ResRef (optional) Dark side variant textures ResRefs
race ResRef (optional) Race identifier ResRef
racetex ResRef (optional) Race-specific texture ResRef
racialtype Integer Numeric racial type identifier
normalhead Integer (optional) Default head appearance ID
backuphead Integer (optional) Fallback head appearance ID
portrait ResRef (optional) Portrait image ResRef
skin ResRef (optional) Skin texture ResRef
headtexe, headtexg, headtexve, headtexvg ResRef (optional) Head texture ResRefs variations
headbone String (optional) Bone name for head attachment
height Float Character height multiplier
hitdist Float Hit detection distance
hitradius Float Hit detection radius
sizecategory Integer size category (affects combat calculations)
moverate String Movement rate identifier
walkdist Float Walking distance threshold
rundist Float Running distance threshold
prefatckdist Float Preferred attack distance
creperspace Float Creature personal space radius
perspace Float Personal space radius
cameraspace Float (optional) Camera space offset
cameraheightoffset String (optional) Camera height offset
targetheight String Target height for combat
perceptiondist Integer Perception distance
headArcH Integer Head horizontal arc angle
headArcV Integer Head vertical arc angle
headtrack Boolean Whether head tracking is enabled
hasarms Boolean Whether creature has arms
haslegs Boolean Whether creature has legs
groundtilt Boolean Whether ground tilt is enabled
footsteptype Integer (optional) Footstep sound type
footstepsound ResRef (optional) Footstep sound ResRef
footstepvolume Boolean Whether footstep volume is enabled
armorSound ResRef (optional) Armor sound effect ResRef
combatSound ResRef (optional) Combat sound effect ResRef
soundapptype Integer (optional) Sound appearance type
bloodcolr String Blood color identifier
deathvfx Integer (optional) Death visual effect ID
deathvfxnode String (optional) Death VFX attachment node
fadedelayondeath Boolean (optional) Whether to fade on death
destroyobjectdelay Boolean (optional) Whether to delay object destruction
disableinjuredanim Boolean (optional) Whether to disable injured animations
abortonparry Boolean Whether to abort on parry
freelookeffect Integer (optional) Free look effect ID
equipslotslocked Integer (optional) Locked equipment slot flags
weaponscale String (optional) Weapon scale multiplier
wingTailScale Boolean Whether wing/tail scaling is enabled
helmetScaleF String (optional) Female helmet scale
helmetScaleM String (optional) Male helmet scale
envmap ResRef (optional) Environment map texture ResRef
bodyBag Integer (optional) Body bag appearance ID
stringRef Integer (optional) String reference for appearance name
driveaccl Integer Vehicle drive acceleration
drivemaxspeed Float Vehicle maximum speed
driveanimwalk Float Vehicle walk animation speed
driveanimrunPc Float PC vehicle run animation speed
driveanimrunXbox Float Xbox vehicle run animation speed

Column Details:

The full row shape shown above is not guesswork from old docs; it is mirrored closely by reone's generated parseAppearanceTwoDARow, which explicitly reads the listed fields from a generic TwoDA object. That parser is not the original BioWare runtime, but it is a concrete source-backed external implementation that matches the local PyKotor registry families for appearance StrRefs, model ResRefs, texture ResRefs, and related creature-facing fields. [reone appearance.cpp, extract/twoda.py]

  • model columns: modela through modeln (14 model variations)
  • texture columns: texa through texn (14 texture variations)
  • Evil texture columns: texaevil, texbevil, texievil, texlevil, texnevil
  • Head texture columns: headtexe, headtexg, headtexve, headtexvg
  • Movement: walkdist, rundist, prefatckdist, moverate
  • Physical properties: height, hitdist, hitradius, sizecategory, perceptiondist
  • Personal space: perspace, creperspace
  • Camera: cameraspace, cameraheightoffset, targetheight
  • Head tracking: headArcH, headArcV, headtrack
  • Body parts: hasarms, haslegs, groundtilt, wingTailScale
  • Footsteps: footsteptype, footstepsound, footstepvolume
  • Sounds: armorSound, combatSound, soundapptype
  • Visual effects: deathvfx, deathvfxnode, fadedelayondeath, freelookeffect
  • Equipment: equipslotslocked, weaponscale, helmetScaleF, helmetScaleM
  • textures: envmap, skin, portrait, race, racetex, racialtype
  • Heads: normalhead, backuphead, headbone
  • Vehicle: driveaccl, drivemaxspeed, driveanimwalk, driveanimrunPc, driveanimrunXbox
  • Other: bloodcolr, bodyBag, stringRef, abortonparry, destroyobjectdelay, disableinjuredanim

PyKotor's local registry confirms the most important appearance-facing column families directly: K1 and K2 both mark string_ref as the talk-table column, race as a generic ResRef-bearing column, modela through at least modelj as model-bearing columns, and racetex, texa through texj, plus the head texture variants, as texture-bearing columns. Holocron Toolset then uses the cached table as an installation-scoped selector source in creature-oriented editors such as UTC. [extract/twoda.py, installation.py, utc.py]

Engine Usage: baseitems.2da is the canonical item-class table for combat, equipment, and inventory behavior. The table string BASEITEMS is present in all three analyzed binaries at (/K1/k1_win_gog_swkotor.exe @ 0x0074b294, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x0098b4c4, /Other BioWare Engines/Aurora/nwmain.exe @ 0x140dc39b8), and PyKotor plus Holocron Toolset expose it as TwoDARegistry.BASEITEMS and HTInstallation.TwoDA_BASEITEMS; the toolset then consumes it directly in item and creature editors for label lookup, model selection, and base-item classification. [extract/twoda.py, installation.py, uti.py, utc.py]

Row index: Base item ID (integer)

Verified local column families:

  • label: used by Holocron Toolset for base-item display text and name lookup. [installation.py]
  • itemclass: used by Holocron Toolset to derive inventory icon resrefs such as i{itemclass}_{variation}. [installation.py]
  • defaultmodel: registered by PyKotor as a model-bearing column in both games. [extract/twoda.py]
  • defaulticon: registered by PyKotor as a texture-bearing column in both games. [extract/twoda.py]
  • itemclass, baseitemstatref: registered by PyKotor as item-reference-bearing columns in both games. [extract/twoda.py]
  • powerupsnd, powerdownsnd, poweredsnd: registered by PyKotor as sound-reference-bearing columns in both games. [extract/twoda.py]

The previous larger base-item column table mixed solid evidence with inherited prose and needs a line-by-line rebuild before it can be trusted at the same level as the top half of this page. For now, the safer statement is that baseitems.2da is unquestionably engine-visible and tool-visible, but this wiki should only assert the narrower subset of columns that local registry code and live tool consumers actually expose. [extract/twoda.py, installation.py, uti.py, inventory.py]


Engine Usage: classes.2da is the class-id table used by creature and savegame tooling, and the CLASSES table name is present in all three analyzed binaries at (/K1/k1_win_gog_swkotor.exe @ 0x007488ec, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x0098cc58, /Other BioWare Engines/Aurora/nwmain.exe @ 0x140dc4cd8). PyKotor registers it as TwoDARegistry.CLASSES, Holocron Toolset exposes the same file as HTInstallation.TwoDA_CLASSES, and reone ships a dedicated class.cpp loader for the same table family. [extract/twoda.py, installation.py, reone class.cpp]

Row index: Class ID (integer)

Verified local column and consumer evidence:

  • name, description are the directly declared StrRef-bearing columns for classes.2da in both K1 and K2 within PyKotor's 2DA registry. [extract/twoda.py]
  • label is a live UI-facing column in Holocron Toolset: the UTC editor populates class1Select and class2Select from classes.get_column("label"), and the savegame editor resolves class ids back to classes.get_cell(class_id, "label") when present. [utc.py, savegame.py]
  • The generated UTC editor help text documents ClassList[0].Class and ClassList[1].Class as indices into classes.2da, and PyKotor's UTC reader consumes those values from ClassList as raw class ids. [toolset/uic/qtpy/editors/utc.py, resource/generics/utc.py]
  • Each ClassList entry also owns a KnownList0 power list in the UTC structure, which is local evidence that class rows participate in power progression and lookup even though the full row schema still needs a stricter column-by-column rebuild. [resource/generics/utc.py, toolset/uic/qtpy/editors/utc.py, reone class.cpp]

The older large column table for classes.2da mixed verified content with inherited schema prose. Until that row layout is re-checked field by field against live code, this page keeps only the narrower subset above. [extract/twoda.py, utc.py, savegame.py]


Engine Usage: feat.2da is the feat-id table used by creature blueprints, save data, and open-engine consumers, and feat-related table strings are present in all three analyzed binaries at (/K1/k1_win_gog_swkotor.exe @ 0x00748ca0, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x00986500, /Other BioWare Engines/Aurora/nwmain.exe @ 0x140dc4958). PyKotor exposes the file as TwoDARegistry.FEATS, Holocron Toolset caches it as HTInstallation.TwoDA_FEATS, and reone plus KotOR.js both ship explicit feat loaders or feat model types. [extract/twoda.py, installation.py, reone feats.cpp, KotOR.js TalentFeat.ts]

Row index: Feat ID (integer)

Verified local column and consumer evidence:

  • name, description are the explicitly declared StrRef-bearing columns for feat.2da in PyKotor's K1 and K2 registries. [extract/twoda.py]
  • PyKotor's registry maps GFF Feat and FeatID references back to the feats table, which is direct local evidence that feat ids are consumed as row indices rather than as free-form constants. [extract/twoda.py]
  • The generated UTC editor help text documents each FeatList row as storing a feat index that references feats.2da, and the UTC reader consumes FeatList entries as raw feat ids from creature GFF data. [toolset/uic/qtpy/editors/utc.py, resource/generics/utc.py]
  • Holocron Toolset populates its creature feat checklist from the cached feats table and prefers the name StrRef when available, falling back to a direct string column when no talktable text resolves. The savegame editor likewise resolves stored feat ids back to feat labels through the same cached table. [utc.py, savegame.py]

The previous larger feat schema table went beyond what the current local evidence proves field by field. Until that row shape is rebuilt against live code, this page keeps the directly verified subset above. [extract/twoda.py, utc.py, savegame.py]


Engine Usage: skills.2da is the skill-id table used by character data and skill displays, and the table string Skills is present in all three analyzed binaries at (/K1/k1_win_gog_swkotor.exe @ 0x00748a1c, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x0098cd5c, /Other BioWare Engines/Aurora/nwmain.exe @ 0x140dc51fc). PyKotor exposes it as TwoDARegistry.SKILLS, Holocron Toolset caches it as HTInstallation.TwoDA_SKILLS, and reone plus KotOR.js both carry dedicated skill-loading code. [extract/twoda.py, installation.py, reone skills.cpp, KotOR.js TalentSkill.ts]

Row index: Skill ID (integer)

Verified local column and consumer evidence:

  • name, description are the directly declared StrRef-bearing columns for skills.2da in PyKotor's K1 and K2 registries. [extract/twoda.py]
  • PyKotor's registry maps SkillID references back to the skills table, which is direct local evidence that skill references in higher-level resources are intended to resolve through skills.2da. [extract/twoda.py]
  • Creature GFF data stores skill ranks in the fixed SkillList array rather than storing free-form skill names. PyKotor's UTC reader enforces and reconstructs that SkillList, which is the local bridge between creature data and skills table ordering. [resource/generics/utc.py]
  • Holocron Toolset uses the cached skills table in savegame workflows, which is enough local evidence to keep the table's role in display and editing, but not enough yet to keep a full legacy row-schema table without stricter verification. [installation.py, savegame.py]

The previous larger skills.2da schema block contained many plausible fields, but the currently re-verified local evidence proves only the smaller subset above. The rest should come back only after a line-by-line rebuild against code. [extract/twoda.py, resource/generics/utc.py, savegame.py]


Engine Usage: spells.2da remains the inherited table name, but in KotOR it is the active Force-power table. The table string SPELLS is present in all three analyzed binaries at (/K1/k1_win_gog_swkotor.exe @ 0x0074a4d0, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x0098b8cc, /Other BioWare Engines/Aurora/nwmain.exe @ 0x140dc56d8), KotOR I and KotOR II both retain dedicated Load2DArrays_Spells loader names, and PyKotor plus Holocron Toolset both register the file under their power-table constants rather than under a generic D&D-only name. [extract/twoda.py, installation.py, utc.py, reone spells.cpp]

Row index: Spell or Force-power ID (integer)

Verified local column and consumer evidence:

  • name and spelldesc are the directly declared StrRef-bearing columns for spells.2da in PyKotor's K1 and K2 registries. [extract/twoda.py]
  • PyKotor maps Spell, SpellId, and Subtype references back to the same power table, which is direct local evidence that higher-level data refers to rows in spells.2da by numeric id. [extract/twoda.py]
  • The generated UTC editor help text states that ClassList -> KnownList0/1/2 stores Spell ids that reference spells.2da, and PyKotor's UTC reader consumes those Spell values from creature GFF data exactly that way. [toolset/uic/qtpy/editors/utc.py, resource/generics/utc.py]
  • PyKotor's NWScript definition layer independently documents GetLastForcePowerUsed as returning a spell number that indexes Spells.2da, which is local evidence that the same numeric table ids leak into script-visible runtime APIs. [scriptdefs.py]
  • Holocron Toolset caches the power table and populates creature power lists from it, preferring resolved names and falling back to label-style text where needed. [installation.py, utc.py]

The earlier full spells.2da schema table was too broad for the current evidence set. The verified local code proves the table's role, its row-id usage, and a small number of column families; the rest should return only after a stricter rebuild. [extract/twoda.py, resource/generics/utc.py, scriptdefs.py]


Items & Properties 2DA files

itemprops.2da

Engine Usage: Master table defining all item property types available in the game. Each row represents a property type (damage bonuses, ability score bonuses, skill bonuses, etc.) with their cost calculations and effect parameters. The engine uses this file to determine item property costs, effects, and availability.

Row index: Item property ID (integer)

Column structure:

Column Name type Description
label String Property label
name StrRef String reference for property name
costtable String Cost calculation table reference
param1 String Parameter 1 label
param2 String Parameter 2 label
subtype Integer Property subtype identifier
costvalue Integer Base cost value
param1value Integer Parameter 1 default value
param2value Integer Parameter 2 default value
description StrRef Property description string reference

The item property schema and behavior are evidenced by PyKotor K1/K2 field declarations plus editor/runtime consumers that load and resolve cost/parameter data from this table (twoda.py L135, twoda.py L313, installation.py L74, uti.py L107-L111, uti.py L278-L287, uti.py L449-L465).


iprp_damagecost.2da

Engine Usage: Defines cost calculations for damage bonus item properties. Used to determine item property costs based on damage bonus values.

Row index: Damage bonus value (integer)

Column structure:

Column Name type Description
label String Damage bonus label
cost Integer Cost for this damage bonus value

This table's naming and cost schema are tracked in both K1 and K2 column maps in PyKotor (twoda.py L99, twoda.py L277).


Objects & Area 2DA files

Engine and tool usage: placeables.2da is the placeable-appearance lookup table for UTPs and scene rendering. The tri-binary section above already confirms that KotOR I and KotOR II retain Load2DArrays_Placeables @ (/K1/k1_win_gog_swkotor.exe @ 0x005c1830, /TSL/k2_win_gog_aspyr_swkotor2.exe @ 0x00482800, /Other BioWare Engines/Aurora/nwmain.exe @ TODO: generic 2DA manager only). Locally, PyKotor exposes the table as TwoDARegistry.PLACEABLES, Holocron Toolset caches it as HTInstallation.TwoDA_PLACEABLES, the UTP editor uses its label column to populate appearance selection, and scene rendering resolves each UTP.appearance_id through placeables.2da to recover modelname. [extract/twoda.py, installation.py, utp.py, scene_cache.py]

Row index: Placeable appearance ID or type ID (integer)

Verified local columns and consumers:

  • strref is the directly declared string-bearing column for placeables.2da in PyKotor's K1 and K2 registries. [extract/twoda.py]
  • modelname is the directly declared model-bearing column for placeables.2da in PyKotor's K1 and K2 registries. [extract/twoda.py]
  • label is a live UI-facing column in Holocron Toolset: the UTP editor loads placeables.2da and uses appearances.get_column("label") to populate the appearance selector. [utp.py]
  • UTP.appearance_id is resolved back through the same table during scene rendering, and scene_cache.py explicitly reads placeables.2da[row]["modelname"] when constructing placeable render objects. [scene_cache.py]

The earlier full placeables.2da schema table was broader than the currently verified evidence. Until the remaining fields are rechecked against code or multi-binary analysis, this page keeps only the smaller subset above. [extract/twoda.py, utp.py, scene_cache.py]


Verified local usage: genericdoors.2da is a live door-appearance lookup table in Holocron Toolset and PyKotor. PyKotor exposes the file through TwoDARegistry.DOORS, its K1 and K2 registries declare strref as the table's string-bearing column and modelname as its model-bearing column, and the door editor caches genericdoors.2da immediately on startup. The same editor validates UTD.appearance_id against the table height, resolves the preview model through door.get_model(..., genericdoors=...), and explicitly reports the lookup as genericdoors.2da[row]['modelname']. The generated UTD help text also documents the door Appearance field as an index into doortypes.2da or genericdoors.2da that picks the 3D model and behavior. [extract/twoda.py, utd.py, toolset/uic/qtpy/editors/utd.py]

Row index: Door type ID (integer)

Verified local columns and consumers:

  • strref is the directly declared string-bearing column for genericdoors.2da in PyKotor's K1 and K2 registries. [extract/twoda.py]
  • modelname is the directly declared model-bearing column for genericdoors.2da in PyKotor's K1 and K2 registries. [extract/twoda.py]
  • modelname is also the live preview lookup used by Holocron Toolset's UTD editor when resolving the current door model from UTD.appearance_id. [utd.py]

The previous full genericdoors.2da schema block was broader than the evidence currently rechecked in source. Until the remaining fields are re-verified against live code or binary analysis, this page keeps only the narrower subset above. [extract/twoda.py, utd.py]


Verified local usage: doortypes.2da is the sibling door table that PyKotor's K1 and K2 registries track alongside genericdoors.2da. The registry declares stringrefgame as its string-bearing column and model as its model-bearing column, and the generated UTD help text explicitly describes the Appearance field as an index into doortypes.2da or genericdoors.2da. That is enough local evidence to keep the table's role as a door-appearance/configuration source, but not enough yet to preserve a larger inherited row-schema description without a stricter line-by-line rebuild. [extract/twoda.py, toolset/uic/qtpy/editors/utd.py]

Row index: Door type ID (integer)

Verified local columns:

  • stringrefgame is the directly declared string-bearing column for doortypes.2da in PyKotor's K1 and K2 registries. [extract/twoda.py]
  • model is the directly declared model-bearing column for doortypes.2da in PyKotor's K1 and K2 registries. [extract/twoda.py]

The older doortypes.2da schema block went beyond what the currently rechecked local evidence proves. The safer statement is that doortypes.2da remains a documented sibling door table with string and model columns, and that higher-level door editors still acknowledge it as a valid appearance source. [extract/twoda.py, toolset/uic/qtpy/editors/utd.py]


Verified local usage: soundset.2da is the table that creature data uses to choose a sound-set row by numeric id. PyKotor exposes the file as TwoDARegistry.SOUNDSETS, declares strref as its string-bearing column in both K1 and K2 registries, and maps the UTC SoundSetFile GFF field back to soundset.2da. PyKotor's UTC reader stores that field as soundset_id, and Holocron Toolset's generated UTC help text documents it as a WORD index into soundset.2da that chooses creature dialogue and battle sounds. [extract/twoda.py, resource/generics/utc.py, toolset/uic/qtpy/editors/utc.py, installation.py]

Row index: Sound set ID (integer)

Verified local columns and consumers:

  • strref is the directly declared string-bearing column for soundset.2da in PyKotor's K1 and K2 registries. [extract/twoda.py]
  • SoundSetFile is the GFF field that PyKotor maps back to soundset.2da, and the UTC reader reads and writes it as utc.soundset_id. [extract/twoda.py, resource/generics/utc.py]
  • Holocron Toolset's UTC editor tooltip explicitly describes the field as an index into soundset.2da that changes dialogue and battle sounds. [toolset/uic/qtpy/editors/utc.py]

The earlier soundset.2da schema block was broader than the currently rechecked evidence. Until additional columns are re-verified against code or binary analysis, this page keeps only the smaller subset above. [extract/twoda.py, resource/generics/utc.py, toolset/uic/qtpy/editors/utc.py]


Visual Effects & animations 2DA files

Verified local usage: The currently rechecked local linkage for visualeffects.2da is PyKotor's GFF-to-2DA mapping from VisualType to this table. That proves the page's object-level contract: some GFF resources store a numeric VisualType that should be interpreted as a row index into visualeffects.2da. PyKotor's script library also preserves many hard-coded SetEffectIcon(...) calls, but those point to effecticon.2da, not to visualeffects.2da, so they are not evidence for this table's row schema. [extract/twoda.py, common/scriptlib.py]

Row index: Visual effect ID (integer)

Verified local fields and limits:

  • VisualType is the rechecked field name that PyKotor binds to visualeffects.2da. [extract/twoda.py]
  • The current local registry pass does not enumerate a trusted column family for visualeffects.2da, so the inherited giant schema table was removed rather than kept as unsupported prose. [extract/twoda.py]

Until a fresh parser-level or binary-backed reconstruction is completed, the only safe statement here is that visualeffects.2da provides row targets for VisualType references. [extract/twoda.py]


Verified local usage: portraits.2da is the table PyKotor maps from the GFF field name PortraitId, and Holocron Toolset exposes it as HTInstallation.TwoDA_PORTRAITS. PyKotor's UTC, UTD, UTP, and UTT generic readers all preserve a numeric portrait_id, and the generated UTC editor help text documents the creature PortraitId field as a portrait-table row selector, with 65534 or 65535 delegating to the explicit Portrait ResRef instead. The same UI also documents the portrait preview as a display derived from PortraitId plus the optional Portrait ResRef. [extract/twoda.py, resource/generics/utc.py, resource/generics/utd.py, resource/generics/utp.py, resource/generics/utt.py, toolset/uic/qtpy/editors/utc.py, installation.py]

Row index: Portrait ID (integer)

Verified local fields and behavior:

The earlier portraits.2da schema block was broader than the currently rechecked evidence. Until individual portrait-table columns are re-verified from code or binary analysis, this page keeps only the narrower mapping and consumer behavior above. [extract/twoda.py, toolset/uic/qtpy/editors/utc.py]


heads.2da

Verified local and external usage: heads.2da is a head-asset table tracked by PyKotor's K1 and K2 registry families, where the file contributes model and texture-bearing columns rather than a generic string column. The local registry marks head plus the alignment-variant headtex* columns as texture/model-facing resource references, and the external reone codebase ships a dedicated heads.cpp parser plus creature-side head loading that reads the same family of fields. [extract/twoda.py, reone heads.cpp, reone creature.cpp]

Verified local columns:

  • head is a model-bearing column in PyKotor's K1 and K2 registry data. [extract/twoda.py]
  • headtexe, headtexg, headtexve, headtexvg, headtexvve, and headtexvvve are texture-bearing columns in PyKotor's K1 and K2 registry data. [extract/twoda.py]
  • reone additionally parses alttexture alongside the same head and headtex* family, which is external implementation evidence for a slightly wider row shape than the local registry alone exposes. [reone heads.cpp]

heads.2da is a head-model and head-texture table with a verified head plus headtex* family, and that any larger schema should return only after a fresh line-by-line rebuild. [extract/twoda.py, reone heads.cpp]


Progression Tables 2DA Files

classpowergain.2da

Engine Usage: Defines Force power progression by class and level. The engine uses this file to determine which Force powers are available to each class at each level.

Row index: Level (integer, typically 1-20)

Column structure:

Column Name type Description
level Integer Character level
jedi_guardian Integer Jedi Guardian power gain
jedi_consular Integer Jedi Consular power gain
jedi_sentinel Integer Jedi Sentinel power gain
soldier Integer Soldier power gain
scout Integer Scout power gain
scoundrel Integer Scoundrel power gain
jedi_guardian_prestige Integer (optional) Jedi Guardian prestige power gain
jedi_consular_prestige Integer (optional) Jedi Consular prestige power gain
jedi_sentinel_prestige Integer (optional) Jedi Sentinel prestige power gain

Name Generation 2DA Files

Other Name Generation files

Similar name generation files exist for other species:

  • catharfirst.2da / catharlast.2da: Cathar names (KotOR 2)
  • droidfirst.2da / droidlast.2da: Droid names
  • miracianfirst.2da / miracianlast.2da: Miraluka names (KotOR 2, alternate spelling)
  • miralukafirst.2da / miralukalast.2da: Miraluka names (KotOR 2)
  • rodianfirst.2da / rodianlast.2da: Rodian names
  • twilekfirst.2da / twileklast.2da: Twi'lek names
  • wookieefirst.2da / wookieelast.2da: Wookiee names
  • zabrakfirst.2da / zabraklast.2da: Zabrak names

Additional 2DA Files

ambientmusic.2da

Engine Usage: Defines ambient music tracks for areas. The engine uses this file to determine which music to play in different areas based on area properties.

Row index: Music ID (integer)

Column structure:

Column Name type Description
label String Music label
music ResRef Music file ResRef
resource ResRef Music resource ResRef
stinger1, stinger2, stinger3 ResRef (optional) Stinger music ResRefs

Ambient music columns and their ARE field bindings are represented in PyKotor's K1/K2 extraction maps and GFF linkage definitions (twoda.py L206, twoda.py L398, twoda.py L545-L548).


ambientsound.2da

Engine Usage: Defines ambient sound effects for areas. The engine uses this file to play ambient sounds in areas.

Row index: Sound ID (integer)

Column structure:

Column Name type Description
label String Sound label
sound ResRef Sound file ResRef
resource ResRef Sound resource ResRef
description StrRef Sound description string reference

Ambient sound column semantics are documented in PyKotor's K1/K2 schema maps and script-level API comments (twoda.py L72, twoda.py L184, twoda.py L247, twoda.py L376, scriptdefs.py L6986-L6988).


ammunitiontypes.2da

Engine Usage: Defines ammunition types for ranged weapons, including their models and sound effects. The engine uses this file when loading items to determine ammunition properties for ranged weapons.

Row index: Ammunition type ID (integer)

Column structure:

Column Name type Description
label String Ammunition type label
model ResRef Ammunition model ResRef
shotsound0 ResRef (optional) Shot sound effect ResRef (variant 1)
shotsound1 ResRef (optional) Shot sound effect ResRef (variant 2)
impactsound0 ResRef (optional) Impact sound effect ResRef (variant 1)
impactsound1 ResRef (optional) Impact sound effect ResRef (variant 2)

Ammunition type consumption in runtime item loading is visible in reone's object pipeline (item.cpp L164-L171).


camerastyle.2da

Engine Usage: Defines camera styles for areas, including distance, pitch, view angle, and height settings. The engine uses this file to configure camera behavior in different areas.

Row index: Camera Style ID (integer)

Column structure:

Column Name type Description
label String Camera style label
name String Camera style name
distance Float Camera distance from target
pitch Float Camera pitch angle
viewangle Float Camera view angle
height Float Camera height offset

References:

PyKotor:

HolocronToolset:

Vendor Implementations:


footstepsounds.2da

Engine Usage: Defines footstep sound effects for different surface types and footstep types. The engine uses this file to play appropriate footstep sounds based on the surface material and creature footstep type.

Row index: Footstep type ID (integer)

Column structure:

Column Name type Description
label String Footstep type label
dirt0, dirt1, dirt2 ResRef (optional) Dirt surface footstep sounds
grass0, grass1, grass2 ResRef (optional) Grass surface footstep sounds
stone0, stone1, stone2 ResRef (optional) Stone surface footstep sounds
wood0, wood1, wood2 ResRef (optional) Wood surface footstep sounds
water0, water1, water2 ResRef (optional) Water surface footstep sounds
carpet0, carpet1, carpet2 ResRef (optional) Carpet surface footstep sounds
metal0, metal1, metal2 ResRef (optional) Metal surface footstep sounds
leaves0, leaves1, leaves2 ResRef (optional) Leaves surface footstep sounds

References:

PyKotor:

Vendor Implementations:


prioritygroups.2da

Engine Usage: Defines priority groups for sound effects, determining which sounds take precedence when multiple sounds are playing. The engine uses this file to calculate sound priority values.

Row index: Priority Group ID (integer)

Column structure:

Column Name type Description
label String Priority group label
priority Integer Priority value (higher = more important)

References:

Vendor Implementations:


repute.2da

Engine Usage: Defines reputation values between different factions. The engine uses this file to determine whether creatures are enemies, friends, or neutral to each other based on their faction relationships.

Row index: Faction ID (integer)

Column structure:

Column Name type Description
label String Faction label
Additional columns Integer Reputation values for each faction (column names match faction labels)

Note: The repute.2da file is a square matrix where each row represents a faction, and each column (after label) represents the reputation value toward another faction. Reputation values typically range from 0-100, where values below 50 are enemies, above 50 are friends, and 50 is neutral.

References:

PyKotor:

HolocronToolset:

Vendor Implementations:


surfacemat.2da

Engine Usage: Defines surface material properties for walkmesh surfaces, including walkability, line of sight blocking, and grass rendering. The engine uses this file to determine surface behavior during pathfinding and rendering.

Row index: surface material ID (integer)

Column structure:

Column Name type Description
label String surface material label
walk Boolean Whether surface is walkable
walkcheck Boolean Whether walk check applies
lineofsight Boolean Whether surface blocks line of sight
grass Boolean Whether surface has grass rendering
sound String Sound type identifier for footstep sounds

References:

PyKotor:

Vendor Implementations:


loadscreenhints.2da

Engine Usage: Defines loading screen hints displayed during area transitions. The engine uses this file to show helpful tips and hints to players while loading.

Row index: Loading Screen Hint ID (integer)

Column structure:

Column Name type Description
label String Hint label
strref StrRef String reference for hint text

References:

Vendor Implementations:


bodybag.2da

Engine Usage: Defines body bag appearances for creatures when they die. The engine uses this file to determine which appearance to use for the body bag container that appears when a creature is killed.

Row index: Body Bag ID (integer)

Column structure:

Column Name type Description
label String Body bag label
name StrRef String reference for body bag name
appearance Integer Appearance ID for the body bag model
corpse Boolean Whether the body bag represents a corpse

References:

PyKotor:

Vendor Implementations:


ranges.2da

Engine Usage: Defines perception ranges for creatures, including sight and hearing ranges. The engine uses this file to determine how far creatures can see and hear.

Row index: Range ID (integer)

Column structure:

Column Name type Description
label String Range label
primaryrange Float Primary perception range (sight range)
secondaryrange Float Secondary perception range (hearing range)

References:

Vendor Implementations:


regeneration.2da

Engine Usage: Defines regeneration rates for creatures in combat and non-combat states. The engine uses this file to determine how quickly creatures regenerate hit points and Force points.

Row index: Regeneration State ID (integer, 0=combat, 1=non-combat)

Column structure:

Column Name type Description
label String Regeneration state label
Additional columns float Regeneration rates for different resource types

References:

Vendor Implementations:


animations.2da

Engine Usage: Defines animation names and properties for creatures and objects. The engine uses this file to map animation IDs to animation names for playback.

Row index: animation ID (integer)

Column structure:

Column Name type Description
label String animation label
name String animation name (used to look up animation in model)

References:

Vendor Implementations:

combatanimations.2da

Engine Usage: Defines combat-specific animation properties and mappings. The engine uses this file to determine which animations to play during combat actions.

Row index: Combat animation ID (integer)

Column structure:

Column Name type Description
label String Combat animation label
Additional columns Various Combat animation properties

References:

Vendor Implementations:


weaponsounds.2da

Engine Usage: Defines sound effects for weapon attacks based on base item type. The engine uses this file to play appropriate weapon sounds during combat.

Row index: Base Item ID (integer)

Column structure:

Column Name type Description
label String Base item label
Additional columns ResRef Sound effect ResRefs for different attack types

References:

Vendor Implementations:


placeableobjsnds.2da

Engine Usage: Defines sound effects for placeable objects based on sound appearance type. The engine uses this file to play appropriate sounds when interacting with placeables.

Row index: Sound Appearance type ID (integer)

Column structure:

Column Name type Description
label String Sound appearance type label
Additional columns ResRef Sound effect ResRefs for different interaction types

References:

Vendor Implementations:


creaturespeed.2da

Engine Usage: Defines movement speed rates for creatures based on walk rate ID. The engine uses this file to determine walking and running speeds.

Row index: Walk Rate ID (integer)

Column structure:

Column Name type Description
label String Walk rate label
walkrate Float Walking speed rate
runrate Float Running speed rate

References:

Vendor Implementations:


exptable.2da

Engine Usage: Defines experience point requirements for each character level. The engine uses this file to determine when a character levels up based on accumulated experience.

Row index: Level (integer, typically 1-20)

Column structure:

Column Name type Description
label String Level label
Additional columns Integer Experience point requirements for leveling up

References:

Vendor Implementations:


guisounds.2da

Engine Usage: Defines sound effects for GUI interactions (button clicks, mouse enter events, etc.). The engine uses this file to play appropriate sounds when the player interacts with UI elements.

Row index: Sound ID (integer)

Column structure:

Column Name type Description
label String Sound label (e.g., "Clicked_Default", "Entered_Default")
soundresref ResRef Sound effect ResRef

References:

PyKotor:

Vendor Implementations:


dialoganimations.2da

Engine Usage: Maps dialog animation ordinals to animation names for use in conversations. The engine uses this file to determine which animation to play when a dialog line specifies an animation ordinal.

Row index: animation Index (integer, ordinal - 10000)

Column structure:

Column Name type Description
label String animation label
name String animation name (used to look up animation in model)

References:

Vendor Implementations:


forceshields.2da

Engine Usage: Defines Force shield visual effects and properties. The engine uses this file to determine which visual effect to display when a Force shield is active.

Row index: Force Shield ID (integer)

Column structure:

Column Name type Description
label String Force shield label
Additional columns Various Force shield visual effect properties

References:

Vendor Implementations:


plot.2da

Engine Usage: Defines journal/quest entries with their experience point rewards and labels. The engine uses this file to manage quest tracking, journal entries, and experience point calculations for quest completion.

Row index: Plot ID (integer)

Column structure:

Column Name type Description
label String Plot/quest label (used as quest identifier)
xp Integer Experience points awarded for quest completion

References:

PyKotor:

Vendor Implementations:


Engine Usage: Defines trap properties including models, sounds, and scripts. The engine uses this file when loading triggers with trap types to determine trap appearance and behavior.

Row index: Trap type ID (integer)

Column structure:

Column Name type Description
label String Trap type label
name StrRef String reference for trap name
model ResRef Trap model ResRef
explosionsound ResRef Explosion sound effect ResRef
resref ResRef Trap script ResRef

References:

PyKotor:

HolocronToolset:

Vendor Implementations:


modulesave.2da

Engine Usage: Defines which modules should be included in save games. The engine uses this file to determine whether a module's state should be persisted when saving the game.

Row index: Module Index (integer)

Column structure:

Column Name type Description
label String Module label
modulename String Module filename (e.g., "001ebo")
includeInSave Boolean Whether module state should be saved (0 = false, 1 = true)

References:

Vendor Implementations:


tutorial.2da

Engine Usage: Defines tutorial window tracking entries. The engine uses this file to track which tutorial windows have been shown to the player.

Row index: Tutorial ID (integer)

Column structure:

Column Name type Description
label String Tutorial label
Additional columns Various Tutorial window properties

References:

Vendor Implementations:


globalcat.2da

Engine Usage: Defines global variables and their types for the game engine. The engine uses this file to initialize global variables at game start, determining which variables are integers, floats, or strings.

Row index: Global Variable Index (integer)

Column structure:

Column Name type Description
label String Global variable label
name String Global variable name
type String Variable type ("Number", "Boolean", "string", etc.)

References:

Vendor Implementations:


subrace.2da

Engine Usage: Defines subrace types for character creation and creature templates. The engine uses this file to determine subrace properties and restrictions.

Row index: Subrace ID (integer)

Column structure:

Column Name type Description
label String Subrace label
Additional columns Various Subrace properties

References:

PyKotor:

HolocronToolset:


gender.2da

Engine Usage: Defines gender types for character creation and creature templates. The engine uses this file to determine gender-specific properties and restrictions.

Row index: Gender ID (integer)

Column structure:

Column Name type Description
label String Gender label
Additional columns Various Gender properties

References:

PyKotor:

HolocronToolset:


Engine Usage: Defines racial types for character creation and creature templates. The engine uses this file to determine race-specific properties, restrictions, and bonuses.

Row index: Race ID (integer)

Column structure:

Column Name type Description
label String Race label
Additional columns Various Race properties and bonuses

References:

PyKotor:

HolocronToolset:


upgrade.2da

Engine Usage: Defines item upgrade types and properties. The engine uses this file to determine which upgrades can be applied to items and their effects.

Row index: Upgrade type ID (integer)

Column structure:

Column Name type Description
label String Upgrade type label
Additional columns Various Upgrade properties and effects

References:

PyKotor:

HolocronToolset:


encdifficulty.2da

Engine Usage: Defines encounter difficulty levels for area encounters. The engine uses this file to determine encounter scaling and difficulty modifiers.

Row index: Difficulty ID (integer)

Column structure:

Column Name type Description
label String Difficulty label
Additional columns Various Difficulty modifiers and properties

References:

PyKotor:

HolocronToolset:


Engine Usage: Defines item property definitions and their base properties. This is the master table for all item properties in the game. The engine uses this file to determine item property types, costs, and effects.

Row index: Item Property ID (integer)

Column structure:

Column Name type Description
label String Property label
Additional columns Various Property definitions, costs, and parameters

Note: This file may be the same as or related to itemprops.2da documented earlier. The exact relationship between these files may vary between KotOR 1 and 2.

References:

PyKotor:

HolocronToolset:


emotion.2da

Engine Usage: Defines emotion animations for dialog conversations (KotOR 2 only). The engine uses this file to determine which emotion animation to play during dialog lines.

Row index: Emotion ID (integer)

Column structure:

Column Name type Description
label String Emotion label
Additional columns Various Emotion animation properties

References:

PyKotor:

HolocronToolset:


facialanim.2da

Engine Usage: Defines facial animation expressions for dialog conversations (KotOR 2 only). The engine uses this file to determine which facial expression animation to play during dialog lines.

Row index: Expression ID (integer)

Column structure:

Column Name type Description
label String Expression label
Additional columns Various Facial animation properties

References:

PyKotor:

HolocronToolset:


videoeffects.2da

Engine Usage: Defines video/camera effects for dialog conversations. The engine uses this file to determine which visual effect to apply during dialog camera shots.

Row index: Video Effect ID (integer)

Column structure:

Column Name type Description
label String Video effect label
Additional columns Various Video effect properties

References:

PyKotor:

HolocronToolset:


planetary.2da

Engine Usage: Defines planetary information for the galaxy map and travel system. The engine uses this file to determine planet names, descriptions, and travel properties.

Row index: Planet ID (integer)

Column structure:

Column Name type Description
label String Planet label
Additional columns Various Planet properties and travel information

References:

PyKotor:

HolocronToolset:


cursors.2da

Engine Usage: Defines cursor types for different object interactions. The engine uses this file to determine which cursor to display when hovering over different object types.

Row index: Cursor ID (integer)

Column structure:

Column Name type Description
label String Cursor label
Additional columns Various Cursor properties and ResRefs

References:

PyKotor:

HolocronToolset:


Item Property Parameter & Cost Tables 2DA Files

The following 2DA files are used for item property parameter and cost calculations:

iprp_paramtable.2da

Engine Usage: Master table listing all item property parameter tables. The engine uses this file to look up which parameter table to use for a specific item property type.

Row index: Parameter Table ID (integer)

Column structure:

Column Name type Description
label String Parameter table label
Additional columns Various Parameter table ResRefs and properties

References:

PyKotor:

HolocronToolset:


iprp_costtable.2da

Engine Usage: Master table listing all item property cost calculation tables. The engine uses this file to look up which cost table to use for calculating item property costs.

Row index: Cost Table ID (integer)

Column structure:

Column Name type Description
label String Cost table label
Additional columns Various Cost table ResRefs and properties

References:

PyKotor:

HolocronToolset:


iprp_abilities.2da

Engine Usage: Maps item property values to ability score bonuses. The engine uses this file to determine which ability score is affected by an item property.

Row index: Item Property Value (integer)

Column structure:

Column Name type Description
label String Property value label
Additional columns Various Ability score mappings

References:

PyKotor:

HolocronToolset:


iprp_aligngrp.2da

Engine Usage: Maps item property values to alignment group restrictions. The engine uses this file to determine alignment restrictions for item properties.

Row index: Item Property Value (integer)

Column structure:

Column Name type Description
label String Property value label
Additional columns Various Alignment group mappings

References:

PyKotor:

HolocronToolset:


iprp_combatdam.2da

Engine Usage: Maps item property values to combat damage bonuses. The engine uses this file to determine damage bonus calculations for item properties.

Row index: Item Property Value (integer)

Column structure:

Column Name type Description
label String Property value label
Additional columns Various Combat damage mappings

References:

PyKotor:

HolocronToolset:


iprp_damagetype.2da

Engine Usage: Maps item property values to damage type flags. The engine uses this file to determine damage type calculations for item properties.

Row index: Item Property Value (integer)

Column structure:

Column Name type Description
label String Property value label
Additional columns Various Damage type mappings

References:

PyKotor:

HolocronToolset:


iprp_protection.2da

Engine Usage: Maps item property values to protection/immunity types. The engine uses this file to determine protection calculations for item properties.

Row index: Item Property Value (integer)

Column structure:

Column Name type Description
label String Property value label
Additional columns Various Protection type mappings

References:

PyKotor:

HolocronToolset:


iprp_acmodtype.2da

Engine Usage: Maps item property values to armor class modifier types. The engine uses this file to determine AC modifier calculations for item properties.

Row index: Item Property Value (integer)

Column structure:

Column Name type Description
label String Property value label
Additional columns Various AC modifier type mappings

References:

PyKotor:

HolocronToolset:


iprp_immunity.2da

Engine Usage: Maps item property values to immunity types. The engine uses this file to determine immunity calculations for item properties.

Row index: Item Property Value (integer)

Column structure:

Column Name type Description
label String Property value label
Additional columns Various Immunity type mappings

References:

PyKotor:

HolocronToolset:


iprp_saveelement.2da

Engine Usage: Maps item property values to saving throw element types. The engine uses this file to determine saving throw element calculations for item properties.

Row index: Item Property Value (integer)

Column structure:

Column Name type Description
label String Property value label
Additional columns Various Saving throw element mappings

References:

PyKotor:

HolocronToolset:


iprp_savingthrow.2da

Engine Usage: Maps item property values to saving throw types. The engine uses this file to determine saving throw calculations for item properties.

Row index: Item Property Value (integer)

Column structure:

Column Name type Description
label String Property value label
Additional columns Various Saving throw type mappings

References:

PyKotor:

HolocronToolset:


iprp_onhit.2da

Engine Usage: Maps item property values to on-hit effect types. The engine uses this file to determine on-hit effect calculations for item properties.

Row index: Item Property Value (integer)

Column structure:

Column Name type Description
label String Property value label
Additional columns Various On-hit effect mappings

References:

PyKotor:

HolocronToolset:


iprp_ammotype.2da

Engine Usage: Maps item property values to ammunition type restrictions. The engine uses this file to determine ammunition type calculations for item properties.

Row index: Item Property Value (integer)

Column structure:

Column Name type Description
label String Property value label
Additional columns Various Ammunition type mappings

References:

PyKotor:

HolocronToolset:


iprp_mosterhit.2da

Engine Usage: Maps item property values to monster hit effect types. The engine uses this file to determine monster hit effect calculations for item properties.

Row index: Item Property Value (integer)

Column structure:

Column Name type Description
label String Property value label
Additional columns Various Monster hit effect mappings

Note: The filename contains a typo ("mosterhit" instead of "monsterhit") which is preserved in the game files.

References:

PyKotor:

HolocronToolset:


iprp_walk.2da

Engine Usage: Maps item property values to movement/walk speed modifiers. The engine uses this file to determine movement speed calculations for item properties.

Row index: Item Property Value (integer)

Column structure:

Column Name type Description
label String Property value label
Additional columns Various Movement speed mappings

References:

PyKotor:

HolocronToolset:


iprp_lightcol.2da

Engine Usage: Maps item property values to light color configurations. The engine uses this file to determine light color settings for item properties.

Row index: Item Property Value (integer)

Column structure:

Column Name type Description
label String Property value label
Additional columns Various Light color mappings

References:

PyKotor:

HolocronToolset:

  • No HTInstallation.TwoDA_IPRP_LIGHTCOL in installation.py; cite PyKotor twoda.py above for resref proof.

iprp_monstdam.2da

Engine Usage: Maps item property values to monster damage bonuses. The engine uses this file to determine damage bonus calculations for monster weapons.

Row index: Item Property Value (integer)

Column structure:

Column Name type Description
label String Property value label
Additional columns Various Monster damage mappings

References:

PyKotor:

Note: Unlike iprp_combatdam, there is no separate TwoDARegistry.IPRP_MONSTDAM constant—the file is reached via the MonsterDamage GFF field mapping above and via itemprops.2da cost-table wiring.

See: 2DA-iprp_monstdam — expanded stub page (combat vs monster damage, cross-links).


difficultyopt.2da

Engine Usage: Defines difficulty options and their properties. The engine uses this file to determine difficulty settings, modifiers, and descriptions.

Row index: Difficulty Option ID (integer)

Column structure:

Column Name type Description
label String Difficulty option label
desc String Difficulty description (e.g., "Default")
Additional columns Various Difficulty modifiers and properties

References:


xptable.2da

Engine Usage: Defines experience point reward calculations for defeating enemies. The engine uses this file to calculate how much XP to grant when a creature is defeated, based on the defeated creature's level and properties.

Row index: XP Table Entry ID (integer)

Column structure:

Column Name type Description
label String XP table entry label
Additional columns Various XP calculation parameters

Note: This is different from exptable.2da which defines XP requirements for leveling up. xptable.2da defines XP rewards for defeating enemies.

References:


featgain.2da

Engine Usage: Defines feat gain progression by class and level. The engine uses this file to determine which feats are available to each class at each level.

Row index: Feat Gain Entry ID (integer)

Column structure:

Column Name type Description
label String Feat gain entry label
Additional columns Various Feat gain progression by class and level

References:


effecticon.2da

Engine Usage: Defines effect icons displayed on character portraits and character sheets. The engine uses this file to determine which icon to display for status effects, buffs, and debuffs.

Row index: Effect Icon ID (integer)

Column structure:

Column Name type Description
label String Effect icon label
Additional columns Various Effect icon properties and ResRefs

References:


pazaakdecks.2da

Engine Usage: Defines Pazaak card decks for the Pazaak mini-game. The engine uses this file to determine which cards are available in opponent decks and player decks.

Row index: Pazaak Deck ID (integer)

Column structure:

Column Name type Description
label String Deck label
Additional columns Various Deck card definitions and properties

References:

Vendor Implementations:


acbonus.2da

Engine Usage: Defines armor class bonus calculations. The engine uses this file to determine AC bonus values for different scenarios and calculations.

Row index: AC Bonus Entry ID (integer)

Column structure:

Column Name type Description
label String AC bonus entry label
Additional columns Various AC bonus calculation parameters

References:


keymap.2da

Engine Usage: Defines keyboard and controller key mappings for different game contexts (in-game, GUI, dialog, minigame, etc.). The engine uses this file to determine which keys trigger which actions in different contexts.

Row index: Keymap Entry ID (integer)

Column structure:

Column Name type Description
label String Keymap entry label
Additional columns Various key mappings for different contexts (ingame, GUI, dialog, minigame, freelook, movie)

References:


poison.2da

Engine Usage: Defines poison effect types and their properties. The engine uses this file to determine poison effects, durations, and damage calculations.

Row index: Poison type ID (integer)

Column structure:

Column Name type Description
label String Poison type label
Additional columns Various Poison effect properties, damage, and duration

References:


feedbacktext.2da

Engine Usage: Defines feedback text strings displayed to the player for various game events and actions. The engine uses this file to provide contextual feedback messages.

Row index: Feedback Text ID (integer)

Column structure:

Column Name type Description
label String Feedback text label
Additional columns Various Feedback text strings and properties

References:


appearancesndset.2da

Engine Usage: Defines sound appearance types for creature appearances. The engine uses this file to determine which sound appearance type to use based on the creature's appearance.

Row index: Sound Appearance type ID (integer)

Column structure:

Column Name type Description
label String Sound appearance type label
Additional columns Various Sound appearance type properties

References:


texpacks.2da

Engine Usage: Defines texture pack configurations for graphics settings (KotOR 2 only). The engine uses this file to determine available texture pack options in the graphics menu.

Row index: texture Pack ID (integer)

Column structure:

Column Name type Description
label String texture pack label
strrefname StrRef String reference for texture pack name
Additional columns Various texture pack properties and settings

References:


loadscreens.2da

Engine Usage: Defines loading screen configurations for area transitions. The engine uses this file to determine which loading screen image, music, and hints to display when transitioning between areas.

Row index: Loading Screen ID (integer)

Column structure:

Column Name type Description
label String Loading screen label
bmpresref ResRef Loading screen background image ResRef
musicresref ResRef Music track ResRef to play during loading
Additional columns Various Other loading screen properties

References:


fractionalcr.2da

Engine Usage: Defines fractional challenge rating configurations. The engine uses this file to determine fractional CR display strings.

Row index: Fractional CR ID (integer)

Column structure:

Column Name type Description
label String Fractional CR label
displaystrref StrRef String reference for fractional CR display text
Additional columns Various Fractional CR properties

References:


bindablekeys.2da

Engine Usage: Defines bindable key actions and their string references. The engine uses this file to determine key action names for the key binding interface.

Row index: Bindable key ID (integer)

Column structure:

Column Name type Description
label String Bindable key label
keynamestrref StrRef String reference for key name
Additional columns Various key binding properties

References:


masterfeats.2da

Engine Usage: Defines master feat configurations. The engine uses this file to determine master feat names and properties.

Row index: Master Feat ID (integer)

Column structure:

Column Name type Description
label String Master feat label
strref StrRef String reference for master feat name
Additional columns Various Master feat properties

References:


movies.2da

Engine Usage: Defines movie/cutscene configurations. The engine uses this file to determine movie names and descriptions.

Row index: Movie ID (integer)

Column structure:

Column Name type Description
label String Movie label
strrefname StrRef String reference for movie name
strrefdesc StrRef String reference for movie description
Additional columns Various Movie properties

References:


stringtokens.2da

Engine Usage: Defines string token configurations. The engine uses this file to determine string token values for various game systems.

Row index: string Token ID (integer)

Column structure:

Column Name type Description
label String string token label
strref1 through strref4 StrRef string references for token values
Additional columns Various string token properties

References:


disease.2da

Engine Usage: Defines disease effect configurations. The engine uses this file to determine disease names, scripts, and properties.

Row index: Disease ID (integer)

Column structure:

Column Name type Description
label String Disease label
name StrRef String reference for disease name (KotOR 2)
end_incu_script ResRef Script ResRef for end incubation period
24_hour_script ResRef Script ResRef for 24-hour disease effect
Additional columns Various Disease properties

References:


droiddischarge.2da

Engine Usage: Defines droid discharge effect configurations. The engine uses this file to determine droid discharge properties.

Row index: Droid Discharge ID (integer)

Column structure:

Column Name type Description
label String Droid discharge label
>>##HEADER##<< ResRef header resource reference
Additional columns Various Droid discharge properties

References:


upcrystals.2da

Engine Usage: Defines upgrade crystal configurations. The engine uses this file to determine crystal model variations for lightsaber upgrades.

Row index: Upgrade Crystal ID (integer)

Column structure:

Column Name type Description
label String Upgrade crystal label
shortmdlvar ResRef Short model variation ResRef
longmdlvar ResRef Long model variation ResRef
doublemdlvar ResRef double-bladed model variation ResRef
Additional columns Various Crystal properties

References:


grenadesnd.2da

Engine Usage: Defines grenade sound configurations. The engine uses this file to determine grenade sound effects.

Row index: Grenade Sound ID (integer)

Column structure:

Column Name type Description
label String Grenade sound label
sound ResRef Sound ResRef for grenade
Additional columns Various Grenade sound properties

References:


inventorysnds.2da

Engine Usage: Defines inventory sound configurations. The engine uses this file to determine inventory sound effects for item interactions.

Row index: Inventory Sound ID (integer)

Column structure:

Column Name type Description
label String Inventory sound label
inventorysound ResRef Inventory sound ResRef
Additional columns Various Inventory sound properties

References:

Clone this wiki locally