Repository navigation
2DA File Format
This document provides a detailed description of the 2DA (Two-Dimensional array) file format used in Knights of the Old Republic (KotOR) and Knights of the Old Republic II: The Sith Lords (KotOR 2). 2DA files store tabular game data in a spreadsheet-like format, containing configuration data for nearly all game systems: items, Force powers, creatures, skills, feats, and many other game mechanics.
Official Bioware Documentation: For the authoritative Bioware Aurora Engine 2DA format specification, see Bioware Aurora 2DA Format.
For mod developers: To modify 2DA files in your mods, see the TSLPatcher 2DAList Syntax Guide. For general modding information, see HoloPatcher README for Mod Developers.
Related formats: 2DA files ARE often referenced by GFF files (such as UTC (Creature), UTI (Item), UTP (Placeable) templates) and may contain references to TLK files for text strings.
Important: While the 2DA file format structure is shared across BioWare's Aurora engine games (including Neverwinter Nights, Dragon Age, and Jade Empire), this documentation focuses exclusively on KotOR and KotOR 2. All 2DA file examples, column structures, and engine usage descriptions ARE specific to these games. References to vendor implementations ARE marked as either KotOR-specific or generic Aurora engine code (shared format).
-
KotOR 2DA file format Documentation
- Table of Contents
- file structure Overview
- Format
- data structure
- Cell value types
- Confirmed Engine Usage
- Known 2DA files
- Character & Combat 2DA files
- Items & Properties 2DA files
- Objects & Area 2DA files
- Visual Effects & animations 2DA files
- Progression Tables 2DA files
- Name Generation 2DA files
-
Additional 2DA files
- ambientmusic.2da
- ambientsound.2da
- ammunitiontypes.2da
- camerastyle.2da
- footstepsounds.2da
- prioritygroups.2da
- repute.2da
- surfacemat.2da
- loadscreenhints.2da
- bodybag.2da
- ranges.2da
- regeneration.2da
- animations.2da
- combatanimations.2da
- weaponsounds.2da
- placeableobjsnds.2da
- creaturespeed.2da
- exptable.2da
- guisounds.2da
- dialoganimations.2da
- tilecolor.2da
- forceshields.2da
- plot.2da
- traps.2da
- modulesave.2da
- tutorial.2da
- globalcat.2da
- subrace.2da
- gender.2da
- racialtypes.2da
- upgrade.2da
- encdifficulty.2da
- itempropdef.2da
- emotion.2da
- facialanim.2da
- videoeffects.2da
- planetary.2da
- cursors.2da
-
Item Property Parameter & Cost Tables 2DA files
- iprp_paramtable.2da
- iprp_costtable.2da
- iprp_abilities.2da
- iprp_aligngrp.2da
- iprp_combatdam.2da
- iprp_damagetype.2da
- iprp_protection.2da
- iprp_acmodtype.2da
- iprp_immunity.2da
- iprp_saveelement.2da
- iprp_savingthrow.2da
- iprp_onhit.2da
- iprp_ammotype.2da
- iprp_mosterhit.2da
- iprp_walk.2da
- ai_styles.2da
- iprp_damagevs.2da
- iprp_attackmod.2da
- iprp_bonusfeat.2da
- iprp_lightcol.2da
- iprp_monstdam.2da
- iprp_skillcost.2da
- iprp_weightinc.2da
- iprp_traptype.2da
- iprp_damagered.2da
- iprp_spellres.2da
- rumble.2da
- musictable.2da
- difficultyopt.2da
- xptable.2da
- featgain.2da
- effecticon.2da
- itempropsdef.2da
- pazaakdecks.2da
- acbonus.2da
- keymap.2da
- soundeax.2da
- poison.2da
- feedbacktext.2da
- creaturesize.2da
- appearancesndset.2da
- texpacks.2da
- videoquality.2da
- loadscreens.2da
- phenotype.2da
- palette.2da
- bodyvariation.2da
- textures.2da
- merchants.2da
- actions.2da
- aiscripts.2da
- bindablekeys.2da
- crtemplates.2da
- environment.2da
- fractionalcr.2da
- gamespyrooms.2da
- hen_companion.2da
- hen_familiar.2da
- masterfeats.2da
- movies.2da
- stringtokens.2da
- tutorial_old.2da
- credits.2da
- disease.2da
- droiddischarge.2da
- minglobalrim.2da
- upcrystals.2da
- chargenclothes.2da
- aliensound.2da
- alienvo.2da
- grenadesnd.2da
- inventorysnds.2da
- areaeffects.2da
- Implementation Details
2DA files store tabular game data in a compact format used by the KotOR game engine. files use version "V2.b" and have the .2da extension.
Implementation: Libraries/PyKotor/src/pykotor/resource/formats/twoda/
Vendor References:
-
vendor/kotor/docs/2da.md- Basic format structure and parsing overview -
vendor/reone/src/libs/resource/format/2dareader.cpp- Complete C++ 2DA parser implementation -
vendor/xoreos/src/aurora/2dafile.cpp- Generic Aurora engine 2DA implementation (shared format) -
vendor/KotOR-Unity/Assets/Scripts/FileObjects/2DAObject.cs- C# Unity 2DA loader -
vendor/KotOR.js/src/resource/TwoDAObject.ts- TypeScript 2DA parser with memory-efficient caching -
vendor/Kotor.NET/Kotor.NET/Formats/Kotor2DA/Kotor2DA.cs- .NET 2DA reader/writer
See Also:
- TSLPatcher 2DAList Syntax - Modding 2DA files with TSLPatcher
- GFF File Format - Related format that often references 2DA data
- TLK File Format - Text strings referenced by 2DA entries
The 2DA file format (version "V2.b") is the representation used by the game engine.
The file header is 9 bytes in size:
| Name | type | offset | size | Description |
|---|---|---|---|---|
| file type | char | 0 (0x00) | 4 | Always "2DA " (space-padded) or "2DA\t" (tab-padded) |
| file Version | char | 4 (0x04) | 4 | Always "V2.b"
|
| Line Break | uint8 | 8 (0x08) | 1 | Newline character (\n, value 0x0A) |
The file type can be either "2DA " (space-padded) or "2DA\t" (tab-padded). Both ARE valid and accepted by the game engine.
References:
-
vendor/reone/src/libs/resource/format/2dareader.cpp:29-32- KotOR-specific header validation -
vendor/xoreos/src/aurora/2dafile.cpp:48-51- Generic Aurora engine header constants (format shared across KotOR and other Aurora games) -
vendor/KotOR-Unity/Assets/Scripts/FileObjects/2DAObject.cs:25-32- KotOR-specific header reading
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). The entire header list is terminated by a null byte (0x00). Column names ARE case-sensitive and typically lowercase in KotOR files.
References:
-
vendor/reone/src/libs/resource/format/2dareader.cpp:72-89- KotOR-specific token reading with tab separator -
vendor/xoreos/src/aurora/2dafile.cpp:260-275- Generic Aurora engine header reading (format shared across KotOR and other Aurora games) -
vendor/KotOR-Unity/Assets/Scripts/FileObjects/2DAObject.cs:36-48- KotOR-specific column header parsing -
vendor/kotor/docs/2da.md:32-37- KotOR-specific column structure
| 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 unsigned integer in little-endian byte order. This value determines how many row labels and data rows follow.
References:
-
vendor/reone/src/libs/resource/format/2dareader.cpp:34- KotOR-specific row count reading -
vendor/xoreos/src/aurora/2dafile.cpp:284- Generic Aurora engine row count reading (format shared across KotOR and other Aurora games) -
vendor/kotor/docs/2da.md:39-44- KotOR-specific row indices structure
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). The reader must consume exactly row_count labels based on the count field. This differs from the column headers which do have a null terminator. The row labels ARE primarily for human readability and editing tools - the actual row indexing in the game engine is based on position, not label value.
References:
-
vendor/reone/src/libs/resource/format/2dareader.cpp:35- KotOR-specific row label reading (skipped in reone) -
vendor/xoreos/src/aurora/2dafile.cpp:277-294- Generic Aurora engine row label skipping implementation (format shared across KotOR and other Aurora games) -
vendor/KotOR-Unity/Assets/Scripts/FileObjects/2DAObject.cs:56-70- KotOR-specific row label parsing -
vendor/kotor/docs/2da.md:39-46- KotOR-specific row indices structure and termination note
After row labels, cell data offsets ARE stored:
| Name | type | size | Description |
|---|---|---|---|
| Cell offsets | uint16[] | 2×N | Array of offsets into cell data string table (N = row_count × column_count, 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: The offsets ARE relative to the start of the cell data string table (which begins immediately after the cell_data_size field). Multiple cells can share the same offset value if they contain identical strings, enabling data deduplication.
References:
-
vendor/reone/src/libs/resource/format/2dareader.cpp:47-52- KotOR-specific offset array reading -
vendor/xoreos/src/aurora/2dafile.cpp:314-317- Generic Aurora engine offset reading (format shared across KotOR and other Aurora games) -
vendor/KotOR-Unity/Assets/Scripts/FileObjects/2DAObject.cs:72-83- KotOR-specific offset array parsing -
vendor/reone/src/libs/resource/format/2dawriter.cpp:63-89- KotOR-specific offset deduplication during writing -
vendor/kotor/docs/2da.md:48-54- KotOR-specific cell offsets structure
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). Blank or empty cells ARE typically stored as empty strings (immediately null-terminated) or the string "****". The string table is deduplicated - multiple cells with the same value share the same offset, reducing file size.
Reading Process: For each cell, the reader:
- Retrieves the 16-bit offset from the offset array (indexed by
row_index × column_count + column_index) - Seeks to
cell_data_start_position + offset - Reads a null-terminated string from that position
References:
-
vendor/reone/src/libs/resource/format/2dareader.cpp:54-65- KotOR-specific cell data reading with offset calculation -
vendor/xoreos/src/aurora/2dafile.cpp:319-335- Generic Aurora engine cell data reading (format shared across KotOR and other Aurora games, with KotOR-specific comment at line 545) -
vendor/KotOR-Unity/Assets/Scripts/FileObjects/2DAObject.cs:85-100- KotOR-specific cell data reading loop -
vendor/xoreos/src/aurora/2dafile.cpp:63-64- Generic Aurora engine empty cell representation ("****", shared across KotOR and other Aurora games) -
vendor/kotor/docs/2da.md:57-64- KotOR-specific cell data structure
The TwoDA class represents a complete 2DA file in memory:
Reference: Libraries/PyKotor/src/pykotor/resource/formats/twoda/twoda_data.py:77-119
Attributes:
-
_rows: List of dictionaries, each mapping column headers to cell values -
_headers: List of column header names (case-sensitive, typically lowercase) -
_labels: List of row labels (usually numeric strings like "0", "1", "2"...)
Methods:
-
get_cell(row_index, column_header): Get cell value by row index and column header -
set_cell(row_index, column_header, value): Set cell value -
get_column(header): Get all values for a column -
add_row(label): Add a new row -
add_column(header): Add a new column
The TwoDARow class provides a convenient interface for accessing row data:
Reference: Libraries/PyKotor/src/pykotor/resource/formats/twoda/twoda_data.py:850-950
Attributes:
-
label: Row label string -
cells: Dictionary mapping column headers to cell values
All cell values ARE stored as strings in the 2DA file, but ARE interpreted as different types by the game engine:
-
Integers: Numeric strings parsed as
int32- used for numeric identifiers, counts, and enumerated values -
Floats: Decimal strings parsed as
float- used for calculations like damage multipliers, timers, and percentages - ResRefs: Resource references (max 16 characters, no extension) - point to other game resources like models, textures, or scripts
-
StrRefs: String references into
dialog.tlk(typically negative values like-1indicate no reference) - used for localized text display -
Boolean:
"0"or"1"(sometimes"TRUE"/"FALSE") - control feature flags and settings -
Empty Cells: Represented as
"****"- treated as null/undefined by the engine
The game engine parses cell values based on context and expected data type for each column. For example, the appearance.2da file uses integers for model indices, ResRefs for texture names, and StrRefs for race names.
The following 2DA files have been confirmed to be actively loaded and used by the KotOR game engine through comprehensive reverse engineering analysis of swkotor.exe and swkotor2.exe using Ghidra (via Reva MCP server). This analysis examined the actual game executables to identify all 2DA files loaded via Load2DArrays(), CResRef__CResRef() calls, and related loading functions.
The game engine analysis was performed by:
- Decompiling
swkotor.exe(KotOR 1) andswkotor2.exe(KotOR 2/TSL) using Ghidra - Identifying all
Load2DArrays_*()functions and theirCResRef()calls - Tracing
C2DA::Load2DArray()calls throughout the codebase - Verifying string references to 2DA file names in the executable binaries
- Cross-referencing findings with vendor source code (
vendor/swkotor.c,vendor/swkotor.h)
Core Game Systems:
-
classes.2da- LoadClassInfo() → CResRef("Classes") -
feat.2da- LoadFeatInfo() → CResRef("Feat") -
featgain.2da- CSWClass::LoadFeatGain() → CResRef("featgain") -
skills.2da- LoadSkillInfo() → CResRef("Skills") -
spells.2da- Load2DArrays_Spells() → CResRef("Spells") -
exptable.2da- CSWRules::CSWRules() → CResRef("EXPTABLE") -
xptable.2da- Load2DArrays_XpBase() → CResRef("XPTable")
Character & Appearance:
-
appearance.2da- Load2DArrays_Appearance() → CResRef("Appearance") -
racialtypes.2da- LoadRaceInfo() → CResRef("RacialTypes") -
gender.2da- Load2DArrays_Gender() → CResRef("GENDER") -
portraits.2da- Load2DArrays_Portrait() → CResRef("Portraits") -
heads.2da- Load2DArrays_Heads() → CResRef("Heads") -
creaturespeed.2da- Load2DArrays_CreatureSpeed() → CResRef("CreatureSpeed") -
ranges.2da- CSWRules::CSWRules() → CResRef("Ranges")
Items & Equipment:
-
baseitems.2da- CSWBaseItemArray::Load() → CResRef("BASEITEMS") -
itempropdef.2da- Load2DArrays_ItemPropDef() → CResRef("ItemPropDef") -
itemprops.2da- HandleServerToPlayerDebugInfo_Item() → CResRef("ITEMPROPS") -
upgrade.2da- CSWGuiUpgrade() → CResRef("upgrade")
Objects & Areas:
-
placeables.2da- Load2DArrays_Placeables() → CResRef("Placeables") -
genericdoors.2da- Load2DArrays_GenericDoors() → CResRef("GenericDoors") -
doortypes.2da- Load2DArrays_DoorTypes() → CResRef("DoorTypes") -
traps.2da- Load2DArrays_Traps() → CResRef("Traps") -
encdifficulty.2da- Load2DArrays_EncDifficulty() → CResRef("EncDifficulty") -
loadscreens.2da- Load2DArrays_AreaTransition() → CResRef("Loadscreens") -
modulesave.2da- StartNewModule() → CResRef("modulesave")
Audio & Visual:
-
ambientmusic.2da- Load2DArrays_AmbientMusic() → CResRef("AmbientMusic") -
ambientsound.2da- Load2DArrays_AmbientSound() → CResRef("AmbientSound") -
footstepsounds.2da- Load2DArrays_FootstepSounds() → CResRef("FootstepSounds") -
appearancesndset.2da- Load2DArrays_AppearanceSounds() → CResRef("AppearanceSounds") -
weaponsounds.2da- Load2DArrays_WeaponSounds() → CResRef("WeaponSounds") -
placeablesounds.2da- Load2DArrays_PlaceableSounds() → CResRef("PlaceableSounds") -
camerastyle.2da- Load2DArrays_CameraStyle() → CResRef("CameraStyle") -
surfacemat.2da- Load2DArrays_SurfaceMaterial() → CResRef("SurfaceMaterial") -
visualeffects.2da- Load2DArrays_VisualEffect() → CResRef("VisualEffect") -
videoeffects.2da- Load2DArrays_VideoEffects() → CResRef("VideoEffects") -
dialoganimations.2da- Load2DArrays_DialogAnimations() → CResRef("DialogAnimations") -
cursors.2da- Load2DArrays_Cursor() → CResRef("cursors")
Item Properties (IPRP):
-
iprp_abilities.2da- Load2DArrays_IPRPAbilities() → CResRef("IPRP_ABILITIES") -
iprp_acmodtype.2da- LoadIPRPCostTables() → CResRef("IPRP_ACMODTYPE") -
iprp_aligngrp.2da- LoadIPRPCostTables() → CResRef("IPRP_ALIGNGRP") -
iprp_ammotype.2da- LoadIPRPCostTables() → CResRef("IPRP_AMMOTYPE") -
iprp_combatdam.2da- LoadIPRPCostTables() → CResRef("IPRP_COMBATDAM") -
iprp_costtable.2da- LoadIPRPCostTables() → CResRef("IPRP_COSTTABLE") -
iprp_damagecost.2da- Load2DArrays_IPRPDamage() → CResRef("IPRP_DAMAGECOST") -
iprp_damagetype.2da- LoadIPRPCostTables() → CResRef("IPRP_DAMAGETYPE") -
iprp_immunity.2da- LoadIPRPCostTables() → CResRef("IPRP_IMMUNITY") -
iprp_lightcol.2da- Load2DArrays_LightColor() → CResRef("LightColor") -
iprp_meleecost.2da- Load2DArrays_IPRPMelee() → CResRef("IPRP_MeleeCost") -
iprp_mosterhit.2da- LoadIPRPCostTables() → CResRef("IPRP_MONSTERHIT") -
iprp_onhit.2da- Load2DArrays_OnHit() → CResRef("IPRP_ONHIT") -
iprp_paramtable.2da- LoadIPRPParamTables() → CResRef("IPRP_PARAMTABLE") -
iprp_protection.2da- LoadIPRPCostTables() → CResRef("IPRP_PROTECTION") -
iprp_saveelement.2da- LoadIPRPCostTables() → CResRef("IPRP_SAVEELEMENT") -
iprp_savingthrow.2da- LoadIPRPCostTables() → CResRef("IPRP_SAVINGTHROW") -
iprp_walk.2da- LoadIPRPCostTables() → CResRef("IPRP_WALK")
Factions & Reputation:
-
repute.2da- Load2DArrays_Repute() → CResRef("Repute")
Game Systems:
-
plot.2da- Load2DArrays_PlotXP() → CResRef("Plot") -
planetary.2da- Load2DArrays_Planetary() → CResRef("Planetary") -
loadscreenhints.2da- CClientExoAppInternal::GetNextLoadScreenHintSTRREF() → CResRef("loadscreenhints") -
movies.2da- Load2DArrays_Movies() → CResRef("Movies") -
globalcat.2da- CSWGlobalVariableTable::ReadCatalogue() → CResRef("globalcat") -
tutorial.2da- Load2DArrays_Tutorial() → CResRef("Tutorial") -
difficultyopt.2da- Load2DArrays_DifficultyOptions() → CResRef("DifficultyOptions") -
gamma.2da- Load2DArrays_Gamma() → CResRef("Gamma") -
statescripts.2da- Load2DArrays_StateScripts() → CResRef("StateScripts") -
poison.2da- Load2DArrays_Poison() → CResRef("Poison") -
disease.2da- Load2DArrays_Disease() → CResRef("Disease") -
repaadjustments.2da- Load2DArrays_RepAdjustments() → CResRef("RepAdjustments") -
fractionalcr.2da- Load2DArrays_FractionalCR() → CResRef("FractionalCR") -
regeneration.2da- Load2DArrays_Regeneration() → CResRef("Regeneration") -
ammunitiontypes.2da- Load2DArrays_AmmunitionTypes() → CResRef("AmmunitionTypes") -
keymap.2da- Load2DArrays_Keymap() → CResRef("Keymap") -
bindablekeys.2da- Load2DArrays_BindableKey() → CResRef("BindableKey")
The following 2DA files are loaded in KotOR 2 but not in KotOR 1:
-
emotion.2da- FUN_00612fb0() → CResRef("Emotion") -
facialanim.2da- FUN_005e6ac0() → CResRef("FacialAnim") -
subrace.2da- FUN_00612ab0() → CResRef("Subrace") -
soundset.2da- FUN_006ce0c0() → CResRef("SoundSet") -
pazaakdecks.2da- FUN_00754f60() → CResRef("PazaakDecks") -
upcrystals.2da- FUN_00730970() → CResRef("upcrystals") -
iprp_monstcost.2da- FUN_00611120() → CResRef("IPRP_MONSTCOST") -
iprp_bonuscost.2da- FUN_006111c0() → CResRef("IPRP_BONUSCOST") -
iprp_srcost.2da- FUN_00611260() → CResRef("IPRP_SRCOST") -
iprp_neg5cost.2da- FUN_00611300() → CResRef("IPRP_NEG5COST") -
iprp_onhitdur.2da- FUN_006114e0() → CResRef("IPRP_ONHITDUR") -
iprp_pc.2da- FUN_00612b50() → CResRef("IPRP_PC")
Note: All files listed above have been verified through decompilation analysis of the game executables. Function names in swkotor2.exe are obfuscated (shown as FUN_* addresses), but the 2DA file loading calls have been confirmed. Files documented below that are not listed here may be remnants from Neverwinter Nights (NWN), unused by the game engine, or used in ways not yet identified.
This section documents all known 2DA files used in KotOR and KotOR 2, organized by category. Each entry includes engine usage, column definitions, and data structure details.
Engine Usage: The appearance.2da file is one of the most critical 2DA files in KotOR. It maps appearance IDs (used in creature templates and character creation) to 3D model ResRefs, texture assignments, race associations, and physical properties. The engine uses this file when loading creatures, determining which model and textures to display, calculating hit detection, and managing character animations.
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 |
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 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 appearance.2da file contains a comprehensive set of columns for character appearance configuration. The complete column list is parsed by reone's appearance parser:
-
model columns:
modelathroughmodeln(14 model variations) -
texture columns:
texathroughtexn(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
References:
PyKotor:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:73- StrRef column definition for appearance.2da (K1: string_ref) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:248- StrRef column definition for appearance.2da (K2: string_ref) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:155- ResRef column definition for appearance.2da (race) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:168- model ResRef column definitions for appearance.2da (modela through modelj) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:213-214- texture ResRef column definitions for appearance.2da (racetex, texa through texj, headtexve, headtexe, headtexvg, headtexg) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:456- TwoDARegistry.APPEARANCES constant definition -
Libraries/PyKotor/src/pykotor/extract/twoda.py:524- GFF field mapping: "Appearance_Type" -> appearance.2da
HolocronToolset:
-
Tools/HolocronToolset/src/toolset/data/installation.py:55- HTInstallation.TwoDA_APPEARANCES constant -
Tools/HolocronToolset/src/toolset/gui/editors/utc.py- Appearance selection combobox in UTC editor (UI reference) -
Tools/HolocronToolset/src/toolset/gui/editors/utp.py:124-131- Appearance selection in UTP (placeable) editor -
Tools/HolocronToolset/src/toolset/gui/editors/utd.py- Appearance selection in UTD (door) editor (UI reference) -
Tools/HolocronToolset/src/toolset/gui/editors/ute.py:181- Appearance ID usage in encounter editor
Vendor Implementations:
-
vendor/reone/src/libs/resource/parser/2da/appearance.cpp:28-125- Complete column parsing implementation with all column names -
vendor/reone/src/libs/game/object/creature.cpp:98-107- Appearance loading and column usage -
vendor/reone/src/libs/game/object/creature.cpp:1156-1228- model and texture column access
Engine Usage: Defines base item types that form the foundation for all items in the game. Each row represents a base item type (weapon, armor, shield, etc.) with properties like damage dice, weapon categories, equipment slots, and item flags. The engine uses this file to determine item behavior, combat statistics, and equipment compatibility.
Row index: Base item ID (integer)
Column structure (columns accessed by reone):
| Column Name | type | Description |
|---|---|---|
label |
string | Item type label |
name |
StrRef | string reference for item type name |
basecost |
Integer | Base gold cost |
stacking |
Integer | Stack size limit |
invslotwidth |
Integer | Inventory slot width |
invslotheight |
Integer | Inventory slot height |
canrotateicon |
Boolean | Whether icon can be rotated in inventory |
itemclass |
Integer | Item class identifier |
weapontype |
Integer | Weapon type (if weapon) |
weaponsize |
Integer | Weapon size category |
weaponwield |
Integer | Wield type (one-handed, two-handed, etc.) |
damagedice |
Integer | Damage dice count |
damagedie |
Integer | Damage die size |
damagebonus |
Integer | Base damage bonus |
damagetype |
Integer | Damage type flags |
weaponmattype |
Integer | Weapon material type |
weaponsound |
Integer | Weapon sound type |
ammunitiontype |
Integer | Ammunition type required |
rangedweapon |
Boolean | Whether item is a ranged weapon |
maxattackrange |
Integer | Maximum attack range |
preferredattackrange |
Integer | Preferred attack range |
attackmod |
Integer | Attack modifier |
damagebonusfeat |
Integer | Feat ID for damage bonus |
weaponfocustype |
Integer | Weapon focus type |
weaponfocusfeat |
Integer | Weapon focus feat ID |
description |
StrRef | string reference for item description |
icon |
ResRef | Icon image ResRef |
equipableslots |
Integer | Equipment slot flags |
model1 through model6
|
ResRef (optional) | 3D model ResRefs for different variations |
partenvmap |
ResRef (optional) | Partial environment map texture |
defaultmodel |
ResRef (optional) | Default model ResRef |
defaulticon |
ResRef (optional) | Default icon ResRef |
container |
Boolean | Whether item is a container |
weapon |
Boolean | Whether item is a weapon |
armor |
Boolean | Whether item is armor |
chargesstarting |
Integer | Starting charges (for usable items) |
costpercharge |
Integer | Cost per charge to recharge |
addcost |
Integer | Additional cost modifier |
stolen |
Boolean | Whether item is marked as stolen |
minlevel |
Integer | Minimum level requirement |
stacking |
Integer | Maximum stack size |
reqfeat0 through reqfeat3
|
Integer (optional) | Required feat IDs |
reqfeatcount0 through reqfeatcount3
|
Integer (optional) | Required feat counts |
reqclass |
Integer (optional) | Required class ID |
reqrace |
Integer (optional) | Required race ID |
reqalign |
Integer (optional) | Required alignment |
reqdeity |
Integer (optional) | Required deity ID |
reqstr |
Integer (optional) | Required strength |
reqdex |
Integer (optional) | Required dexterity |
reqint |
Integer (optional) | Required intelligence |
reqwis |
Integer (optional) | Required wisdom |
reqcon |
Integer (optional) | Required constitution |
reqcha |
Integer (optional) | Required charisma |
Column Details (from reone implementation):
The following columns ARE accessed by the reone engine:
-
maxattackrange: Maximum attack range for ranged weapons -
crithitmult: Critical hit multiplier -
critthreat: Critical threat range -
damageflags: Damage type flags -
dietoroll: Damage die size -
equipableslots: Equipment slot flags (hex integer) -
itemclass: Item class identifier (string) -
numdice: Number of damage dice -
weapontype: Weapon type identifier -
weaponwield: Weapon wield type (one-handed, two-handed, etc.) -
bodyvar: Body variation for armor -
ammunitiontype: Ammunition type ID (used to look upammunitiontypes.2da)
References:
PyKotor:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:169- model ResRef column definition for baseitems.2da (defaultmodel) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:187- Sound ResRef column definitions for baseitems.2da (powerupsnd, powerdownsnd, poweredsnd) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:215- texture ResRef column definition for baseitems.2da (defaulticon) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:225- Item ResRef column definitions for baseitems.2da (itemclass, baseitemstatref) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:466- TwoDARegistry.BASEITEMS constant definition -
Libraries/PyKotor/src/pykotor/extract/twoda.py:537- GFF field mapping: "BaseItem" and "ModelVariation" -> baseitems.2da
HolocronToolset:
-
Tools/HolocronToolset/src/toolset/data/installation.py:65- HTInstallation.TwoDA_BASEITEMS constant -
Tools/HolocronToolset/src/toolset/data/installation.py:594-607- get_item_icon_from_uti method using baseitems.2da for item class lookup -
Tools/HolocronToolset/src/toolset/data/installation.py:609-620- get_item_base_name method using baseitems.2da -
Tools/HolocronToolset/src/toolset/data/installation.py:630-643- get_item_icon_path method using baseitems.2da for item class and icon path -
Tools/HolocronToolset/src/toolset/gui/editors/uti.py:107-117- baseitems.2da loading and usage in UTI (item) editor for base item selection -
Tools/HolocronToolset/src/toolset/gui/dialogs/inventory.py:668-704- baseitems.2da usage for equipment slot and droid/human flag lookup
Vendor Implementations:
-
vendor/reone/src/libs/game/object/item.cpp:126-136- Base item column access -
vendor/reone/src/libs/game/object/item.cpp:160-171- Ammunition type lookup from baseitems.2da
Engine Usage: Defines character classes with their progression tables, skill point calculations, hit dice, saving throw progressions, and feat access. The engine uses this file to determine class abilities, skill point allocation, and level progression mechanics.
Row index: Class ID (integer)
Column structure:
| Column Name | type | Description |
|---|---|---|
label |
string | Class label |
name |
StrRef | string reference for class name |
description |
StrRef | string reference for class description |
hitdie |
Integer | Hit dice size (d6, d8, d10, etc.) |
skillpointbase |
Integer | Base skill points per level |
skillpointbonus |
Integer | Intelligence bonus skill points |
attackbonus |
string | Attack bonus progression table reference |
savingthrow |
string | Saving throw progression table reference |
savingthrowtable |
string | Saving throw table filename |
spellgaintable |
string | Spell/Force power gain table reference |
spellknowntable |
string | Spell/Force power known table reference |
primaryability |
Integer | Primary ability score for class |
preferredalignment |
Integer | Preferred alignment |
alignrestrict |
Integer | Alignment restrictions |
classfeat |
Integer | Class-specific feat ID |
classskill |
Integer | Class skill flags |
skillpointmaxlevel |
Integer | Maximum level for skill point calculation |
spellcaster |
Integer | Spellcasting level (0 = non-caster) |
spellcastingtype |
Integer | Spellcasting type identifier |
spelllevel |
Integer | Maximum spell level |
spellbook |
ResRef (optional) | Spellbook ResRef |
icon |
ResRef | Class icon ResRef |
portrait |
ResRef (optional) | Class portrait ResRef |
startingfeat0 through startingfeat9
|
Integer (optional) | Starting feat IDs |
startingpack |
Integer (optional) | Starting equipment pack ID |
description |
StrRef | Class description string reference |
Column Details (from reone implementation):
The following columns ARE accessed by the reone engine:
-
name: string reference for class name -
description: string reference for class description -
hitdie: Hit dice size -
skillpointbase: Base skill points per level -
str,dex,con,int,wis,cha: Default ability scores -
skillstable: Skills table reference (used to check class skills inskills.2da) -
savingthrowtable: Saving throw table reference (e.g.,cls_savthr_jedi_guardian) -
attackbonustable: Attack bonus table reference (e.g.,cls_atk_jedi_guardian)
References:
PyKotor:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:75- StrRef column definitions for classes.2da (K1: name, description) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:250- StrRef column definitions for classes.2da (K2: name, description) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:463- TwoDARegistry.CLASSES constant definition -
Libraries/PyKotor/src/pykotor/extract/twoda.py:531- GFF field mapping: "Class" -> classes.2da
HolocronToolset:
-
Tools/HolocronToolset/src/toolset/data/installation.py:62- HTInstallation.TwoDA_CLASSES constant -
Tools/HolocronToolset/src/toolset/gui/editors/utc.py:242- classes.2da included in batch cache for UTC editor -
Tools/HolocronToolset/src/toolset/gui/editors/utc.py:256- classes.2da loading from cache -
Tools/HolocronToolset/src/toolset/gui/editors/utc.py:291-298- classes.2da usage in class selection comboboxes and label population
Vendor Implementations:
-
vendor/reone/src/libs/game/d20/class.cpp:34-56- Class loading from 2DA with column access -
vendor/reone/src/libs/game/d20/class.cpp:58-86- Class skills, saving throws, and attack bonuses loading
Engine Usage: Defines all feats available in the game, including combat feats, skill feats, Force feats, and class-specific abilities. The engine uses this file to determine feat prerequisites, effects, and availability during character creation and level-up.
Row index: Feat ID (integer)
Column structure:
| Column Name | type | Description |
|---|---|---|
label |
string | Feat label |
name |
StrRef | string reference for feat name |
description |
StrRef | string reference for feat description |
icon |
ResRef | Feat icon ResRef |
takentext |
StrRef | string reference for "feat taken" message |
prerequisite |
Integer (optional) | Prerequisite feat ID |
minattackbonus |
Integer (optional) | Minimum attack bonus requirement |
minstr |
Integer (optional) | Minimum strength requirement |
mindex |
Integer (optional) | Minimum dexterity requirement |
minint |
Integer (optional) | Minimum intelligence requirement |
minwis |
Integer (optional) | Minimum wisdom requirement |
mincon |
Integer (optional) | Minimum constitution requirement |
mincha |
Integer (optional) | Minimum charisma requirement |
minlevel |
Integer (optional) | Minimum character level |
minclasslevel |
Integer (optional) | Minimum class level |
minspelllevel |
Integer (optional) | Minimum spell level |
spellid |
Integer (optional) | Required spell ID |
successor |
Integer (optional) | Successor feat ID (for feat chains) |
maxrank |
Integer (optional) | Maximum rank for stackable feats |
minrank |
Integer (optional) | Minimum rank requirement |
masterfeat |
Integer (optional) | Master feat ID |
targetself |
Boolean | Whether feat targets self |
orreqfeat0 through orreqfeat4
|
Integer (optional) | Alternative prerequisite feat IDs |
reqskill |
Integer (optional) | Required skill ID |
reqskillrank |
Integer (optional) | Required skill rank |
constant |
Integer (optional) | Constant value for feat calculations |
toolscategories |
Integer (optional) | Tool categories flags |
effecticon |
ResRef (optional) | Effect icon ResRef |
effectdesc |
StrRef (optional) | Effect description string reference |
effectcategory |
Integer (optional) | Effect category identifier |
allclassescanuse |
Boolean | Whether all classes can use this feat |
category |
Integer | Feat category identifier |
maxcr |
Integer (optional) | Maximum challenge rating |
spellid |
Integer (optional) | Associated spell ID |
usesperday |
Integer (optional) | Uses per day limit |
masterfeat |
Integer (optional) | Master feat ID for feat trees |
Column Details (from reone implementation):
The following columns ARE accessed by the reone engine:
-
name: string reference for feat name -
description: string reference for feat description -
icon: Icon ResRef -
mincharlevel: Minimum character level (hex integer) -
prereqfeat1: Prerequisite feat ID 1 (hex integer) -
prereqfeat2: Prerequisite feat ID 2 (hex integer) -
successor: Successor feat ID (hex integer) -
pips: Feat pips/ranks (hex integer) -
allclassescanuse: Boolean - whether all classes can use this feat -
masterfeat: Master feat ID -
orreqfeat0throughorreqfeat4: Alternative prerequisite feat IDs -
hostilefeat: Boolean - whether feat is hostile -
category: Feat category identifier
References:
PyKotor:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:82- StrRef column definitions for feat.2da (K1: name, description) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:260- StrRef column definitions for feat.2da (K2: name, description) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:227- ResRef column definition for feat.2da (icon) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:464- TwoDARegistry.FEATS constant definition -
Libraries/PyKotor/src/pykotor/extract/twoda.py:561-562- GFF field mapping: "FeatID" and "Feat" -> feat.2da -
Libraries/PyKotor/src/pykotor/resource/generics/utc.py:321-323- UTC feat list field documentation -
Libraries/PyKotor/src/pykotor/resource/generics/utc.py:432- UTC feats list initialization -
Libraries/PyKotor/src/pykotor/resource/generics/utc.py:762-768- Feat list parsing from UTC GFF -
Libraries/PyKotor/src/pykotor/resource/generics/utc.py:907-909- Feat list writing to UTC GFF
HolocronToolset:
-
Tools/HolocronToolset/src/toolset/data/installation.py:63- HTInstallation.TwoDA_FEATS constant
Vendor Implementations:
-
vendor/reone/src/libs/game/d20/feats.cpp:32-58- Feat loading from 2DA with column access -
vendor/KotOR.js/src/talents/TalentFeat.ts:36-53- Feat structure with additional columns -
vendor/KotOR.js/src/talents/TalentFeat.ts:122-132- Feat loading from 2DA
Engine Usage: Defines all skills available in the game, including which classes can use them, their KEY ability scores, and skill descriptions. The engine uses this file to determine skill availability, skill point costs, and skill checks.
Row index: Skill ID (integer)
Column structure:
| Column Name | type | Description |
|---|---|---|
label |
string | Skill label |
name |
StrRef | string reference for skill name |
description |
StrRef | string reference for skill description |
keyability |
Integer | KEY ability score (STR, DEX, INT, etc.) |
armorcheckpenalty |
Boolean | Whether armor check penalty applies |
allclassescanuse |
Boolean | Whether all classes can use this skill |
category |
Integer | Skill category identifier |
maxrank |
Integer | Maximum skill rank |
untrained |
Boolean | Whether skill can be used untrained |
constant |
Integer (optional) | Constant modifier |
hostileskill |
Boolean | Whether skill is hostile |
icon |
ResRef (optional) | Skill icon ResRef |
Column Details (from reone implementation):
The following columns ARE accessed by the reone engine:
-
name: string reference for skill name -
description: string reference for skill description -
icon: Icon ResRef - Dynamic class skill columns: For each class, there is a column named
{classname}_class(e.g.,jedi_guardian_class) that contains1if the skill is a class skill for that class -
droidcanuse: Boolean - whether droids can use this skill -
npccanuse: Boolean - whether NPCs can use this skill
References:
PyKotor:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:148- StrRef column definitions for skills.2da (K1: name, description) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:326- StrRef column definitions for skills.2da (K2: name, description) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:472- TwoDARegistry.SKILLS constant definition -
Libraries/PyKotor/src/pykotor/extract/twoda.py:563- GFF field mapping: "SkillID" -> skills.2da
HolocronToolset:
-
Tools/HolocronToolset/src/toolset/data/installation.py:71- HTInstallation.TwoDA_SKILLS constant -
Tools/HolocronToolset/src/toolset/gui/editors/savegame.py:129- Skills table widget in save game editor -
Tools/HolocronToolset/src/toolset/gui/editors/savegame.py:511-519- Skills table population in save game editor -
Tools/HolocronToolset/src/toolset/gui/editors/savegame.py:542-543- Skills table update logic
Vendor Implementations:
-
vendor/reone/src/libs/game/d20/skills.cpp:32-48- Skill loading from 2DA -
vendor/reone/src/libs/game/d20/class.cpp:58-65- Class skill checking using dynamic column names -
vendor/KotOR.js/src/talents/TalentSkill.ts:38-49- Skill loading from 2DA with droidcanuse and npccanuse columns
Engine Usage: Defines all Force powers (and legacy spell entries) in KotOR, including their costs, targeting modes, visual effects, and descriptions. The engine uses this file to determine Force power availability, casting requirements, and effects. Note: KotOR uses Force powers rather than traditional D&D spells, though the file structure is inherited from the Aurora engine (originally designed for Neverwinter Nights).
Row index: Spell ID (integer)
Column structure:
| Column Name | type | Description |
|---|---|---|
label |
string | Spell label |
name |
StrRef | string reference for spell name |
school |
Integer | Spell school identifier |
range |
Integer | Spell range type |
vs |
Integer | Versus type (self, touch, etc.) |
metamagic |
Integer | Metamagic flags |
targettype |
Integer | Target type flags |
impactscript |
ResRef (optional) | Impact script ResRef |
innate |
Integer | Innate Force power level (0 = not available) |
conjtime |
Float | Casting/conjuration time |
conjtimevfx |
Integer (optional) | Casting time visual effect |
conjheadvfx |
Integer (optional) | Casting head visual effect |
conjhandvfx |
Integer (optional) | Casting hand visual effect |
conjgrndvfx |
Integer (optional) | Casting ground visual effect |
conjcastvfx |
Integer (optional) | Casting visual effect |
conjimpactscript |
ResRef (optional) | Conjuration impact script |
conjduration |
Float | Conjuration duration |
conjrange |
Integer | Conjuration range |
conjca |
Integer | Conjuration casting animation |
conjca2 through conjca50
|
Integer (optional) | Additional casting animations (numbered 2-50) |
hostilesetting |
Integer | Hostile setting flags |
featid |
Integer (optional) | Associated feat ID |
counter1 |
Integer (optional) | Counter spell ID 1 |
counter2 |
Integer (optional) | Counter spell ID 2 |
counter3 |
Integer (optional) | Counter spell ID 3 |
projectile |
ResRef (optional) | Projectile model ResRef |
projectilesound |
ResRef (optional) | Projectile sound ResRef |
projectiletype |
Integer | Projectile type identifier |
projectileorient |
Integer | Projectile orientation |
projectilepath |
Integer | Projectile path type |
projectilehoming |
Boolean | Whether projectile homes on target |
projectilemodel |
ResRef (optional) | Projectile 3D model ResRef |
projectilemodel2 through projectilemodel50
|
ResRef (optional) | Additional projectile models (numbered 2-50) |
icon |
ResRef | Spell icon ResRef |
icon2 through icon50
|
ResRef (optional) | Additional icons (numbered 2-50) |
description |
StrRef | Spell description string reference |
altmessage |
StrRef (optional) | Alternative message string reference |
usewhencast |
Integer | Use when cast flags |
blood |
Boolean | Whether spell causes blood effects |
concentration |
Integer | Concentration check DC |
immunitytype |
Integer | Immunity type identifier |
immunitytype2 through immunitytype50
|
Integer (optional) | Additional immunity types (numbered 2-50) |
immunityitem |
Integer | Immunity item type |
immunityitem2 through immunityitem50
|
Integer (optional) | Additional immunity items (numbered 2-50) |
Column Details (from reone implementation):
The following columns ARE accessed by the reone engine:
-
name: string reference for spell name -
spelldesc: string reference for spell description (note: column name isspelldesc, notdescription) -
iconresref: Icon ResRef (note: column name isiconresref, noticon) -
pips: Spell pips/ranks (hex integer) -
conjtime: Conjuration/casting time -
casttime: Cast time -
catchtime: Catch time -
conjanim: Conjuration animation type (e.g., "throw", "up") -
hostilesetting: Hostile setting flags -
projectile: Projectile ResRef -
projectileHook: Projectile hook point -
projectileOrigin: Projectile origin point -
projectileTarget: Projectile target point -
projectileCurve: Projectile curve type -
projmodel: Projectile model ResRef -
range: Spell range -
impactscript: Impact script ResRef -
casthandvisual: Cast hand visual effect
Note: The spells.2da file contains many optional columns for projectile models, icons, and immunity types (numbered 1-50). These ARE used for spell variations and visual effects.
References:
PyKotor:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:149- StrRef column definitions for spells.2da (K1: name, spelldesc) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:327- StrRef column definitions for spells.2da (K2: name, spelldesc) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:239- Script ResRef column definition for spells.2da (impactscript) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:432- Script ResRef column definition for spells.2da (K2: impactscript) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:465- TwoDARegistry.POWERS constant definition -
Libraries/PyKotor/src/pykotor/extract/twoda.py:558-560- GFF field mapping: "Subtype", "SpellId", and "Spell" -> spells.2da -
Libraries/PyKotor/src/pykotor/common/scriptdefs.py:9380-9381- GetLastForcePowerUsed function comment referencing spells.2da -
Libraries/PyKotor/src/pykotor/common/scriptlib.py:5676- Debug print referencing spells.2da ID
HolocronToolset:
-
Tools/HolocronToolset/src/toolset/data/installation.py:64- HTInstallation.TwoDA_POWERS constant
Vendor Implementations:
-
vendor/reone/src/libs/game/d20/spells.cpp:32-48- Spell loading from 2DA with column access -
vendor/KotOR.js/src/talents/TalentSpell.ts:16-44- Spell structure with additional columns -
vendor/KotOR.js/src/talents/TalentSpell.ts:42-53- Spell loading from 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 |
References:
PyKotor:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:135- StrRef column definition for itemprops.2da (K1: stringref) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:313- StrRef column definition for itemprops.2da (K2: stringref)
HolocronToolset:
-
Tools/HolocronToolset/src/toolset/data/installation.py:74- HTInstallation.TwoDA_ITEM_PROPERTIES constant -
Tools/HolocronToolset/src/toolset/gui/editors/uti.py:107-111- itemprops.2da loading in UTI editor -
Tools/HolocronToolset/src/toolset/gui/editors/uti.py:278-287- itemprops.2da usage for property cost table and parameter lookups -
Tools/HolocronToolset/src/toolset/gui/editors/uti.py:449-465- itemprops.2da usage in property selection and loading
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 |
References:
PyKotor:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:99- StrRef column definition for iprp_damagecost.2da (K1: name) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:277- StrRef column definition for iprp_damagecost.2da (K2: name)
Engine Usage: Defines placeable objects (containers, usable objects, interactive elements) with their models, properties, and behaviors. The engine uses this file when loading placeable objects in areas, determining their models, hit detection, and interaction properties.
Row index: Placeable type ID (integer)
Column structure:
| Column Name | type | Description |
|---|---|---|
label |
String (optional) | Placeable type label |
modelname |
ResRef (optional) | 3D model ResRef |
strref |
Integer | string reference for placeable name |
bodybag |
Boolean | Whether placeable can contain bodies |
canseeheight |
Float | Can-see height for line of sight |
hitcheck |
Boolean | Whether hit detection is enabled |
hostile |
Boolean | Whether placeable is hostile |
ignorestatichitcheck |
Boolean | Whether to ignore static hit checks |
lightcolor |
String (optional) | Light color RGB values |
lightoffsetx |
String (optional) | Light X offset |
lightoffsety |
String (optional) | Light Y offset |
lightoffsetz |
String (optional) | Light Z offset |
lowgore |
String (optional) | Low gore model ResRef |
noncull |
Boolean | Whether to disable culling |
preciseuse |
Boolean | Whether precise use is enabled |
shadowsize |
Boolean | Whether shadow size is enabled |
soundapptype |
Integer (optional) | Sound appearance type |
usesearch |
Boolean | Whether placeable can be searched |
Column Details:
The complete column structure is defined in reone's placeables parser:
-
label: Optional label string -
modelname: 3D model ResRef -
strref: string reference for placeable name -
bodybag: Boolean - whether placeable can contain bodies -
canseeheight: Float - can-see height for line of sight -
hitcheck: Boolean - whether hit detection is enabled -
hostile: Boolean - whether placeable is hostile -
ignorestatichitcheck: Boolean - whether to ignore static hit checks -
lightcolor: Optional string - light color RGB values -
lightoffsetx: Optional string - light X offset -
lightoffsety: Optional string - light Y offset -
lightoffsetz: Optional string - light Z offset -
lowgore: Optional string - low gore model ResRef -
noncull: Boolean - whether to disable culling -
preciseuse: Boolean - whether precise use is enabled -
shadowsize: Boolean - whether shadow size is enabled -
soundapptype: Optional integer - sound appearance type -
usesearch: Boolean - whether placeable can be searched
References:
PyKotor:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:141- StrRef column definition for placeables.2da (K1: StrRef) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:170- model ResRef column definition for placeables.2da (K1: modelname) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:319- StrRef column definition for placeables.2da (K2: StrRef) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:349- model ResRef column definition for placeables.2da (K2: modelname) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:467- TwoDARegistry.PLACEABLES constant definition -
Libraries/PyKotor/src/pykotor/extract/twoda.py:542- GFF field mapping: "Appearance" -> placeables.2da
HolocronToolset:
-
Tools/HolocronToolset/src/toolset/data/installation.py:66- HTInstallation.TwoDA_PLACEABLES constant -
Tools/HolocronToolset/src/toolset/gui/editors/utp.py:52- placeables.2da cache initialization comment -
Tools/HolocronToolset/src/toolset/gui/editors/utp.py:62- placeables.2da cache loading -
Tools/HolocronToolset/src/toolset/gui/editors/utp.py:121-131- placeables.2da usage in appearance selection combobox -
Tools/HolocronToolset/src/toolset/gui/editors/utp.py:471- placeables.2da usage for model name lookup
Vendor Implementations:
-
vendor/reone/src/libs/resource/parser/2da/placeables.cpp:29-49- Complete column parsing implementation with all column names -
vendor/reone/src/libs/game/object/placeable.cpp:59-60- Placeable loading from 2DA
Engine Usage: Defines door types with their models, animations, and properties. The engine uses this file when loading doors in areas, determining which model to display and how the door behaves.
Row index: Door type ID (integer)
Column structure:
| Column Name | type | Description |
|---|---|---|
label |
string | Door type label |
modelname |
ResRef | 3D model ResRef |
name |
String (optional) | Door type name |
strref |
Integer (optional) | string reference for door name |
blocksight |
Boolean | Whether door blocks line of sight |
nobin |
Boolean | Whether door has no bin (container) |
preciseuse |
Boolean | Whether precise use is enabled |
soundapptype |
Integer (optional) | Sound appearance type |
staticanim |
String (optional) | Static animation ResRef |
visiblemodel |
Boolean | Whether model is visible |
Column Details:
The complete column structure is defined in reone's genericdoors parser:
-
label: Door type label -
modelname: 3D model ResRef -
name: Optional door type name string -
strref: Optional integer - string reference for door name -
blocksight: Boolean - whether door blocks line of sight -
nobin: Boolean - whether door has no bin (container) -
preciseuse: Boolean - whether precise use is enabled -
soundapptype: Optional integer - sound appearance type -
staticanim: Optional string - static animation ResRef -
visiblemodel: Boolean - whether model is visible
References:
PyKotor:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:78- StrRef column definition for doortypes.2da (K1: stringrefgame) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:86- StrRef column definition for genericdoors.2da (K1: StrRef) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:177- model ResRef column definition for doortypes.2da (K1: model) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:178- model ResRef column definition for genericdoors.2da (K1: modelname) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:256- StrRef column definition for doortypes.2da (K2: stringrefgame) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:264- StrRef column definition for genericdoors.2da (K2: StrRef) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:356- model ResRef column definition for doortypes.2da (K2: model) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:357- model ResRef column definition for genericdoors.2da (K2: modelname) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:468- TwoDARegistry.DOORS constant definition -
Libraries/PyKotor/src/pykotor/extract/twoda.py:543- GFF field mapping: "GenericType" -> genericdoors.2da
HolocronToolset:
-
Tools/HolocronToolset/src/toolset/data/installation.py:67- HTInstallation.TwoDA_DOORS constant -
Tools/HolocronToolset/src/toolset/gui/editors/utd.py:60- genericdoors.2da cache loading -
Tools/HolocronToolset/src/toolset/gui/editors/utd.py:117-123- genericdoors.2da usage in appearance selection combobox -
Tools/HolocronToolset/src/toolset/gui/editors/utd.py:409- genericdoors.2da usage for model name lookup
Vendor Implementations:
-
vendor/reone/src/libs/resource/parser/2da/genericdoors.cpp:29-41- Complete column parsing implementation with all column names -
vendor/reone/src/libs/game/object/door.cpp:66-67- Door loading from 2DA
Engine Usage: Defines door type configurations and their properties. The engine uses this file to determine door type names, models, and behaviors.
Row index: Door type ID (integer)
Column structure:
| Column Name | type | Description |
|---|---|---|
label |
string | Door type label |
stringrefgame |
StrRef | string reference for door type name |
model |
ResRef | model ResRef for the door type |
| Additional columns | Various | Door type properties |
References:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:78- StrRef column definition for doortypes.2da -
Libraries/PyKotor/src/pykotor/extract/twoda.py:177- model ResRef column definition for doortypes.2da
Engine Usage: Maps sound set IDs to voice set assignments for characters. The engine uses this file to determine which voice lines to play for characters based on their sound set.
Row index: Sound set ID (integer)
Column structure:
| Column Name | type | Description |
|---|---|---|
label |
string | Sound set label |
resref |
ResRef |
sound set files ResRef (e.g., c_human_m_01) |
References:
PyKotor:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:143- StrRef column definition for soundset.2da (K1: StrRef) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:321- StrRef column definition for soundset.2da (K2: StrRef) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:459- TwoDARegistry.SOUNDSETS constant definition -
Libraries/PyKotor/src/pykotor/extract/twoda.py:522- GFF field mapping: "SoundSetFile" -> soundset.2da -
Libraries/PyKotor/src/pykotor/resource/generics/utc.py:90-92- UTC soundset_id field documentation -
Libraries/PyKotor/src/pykotor/resource/generics/utc.py:359- UTC soundset_id field initialization -
Libraries/PyKotor/src/pykotor/resource/generics/utc.py:549-550- SoundSetFile field parsing from UTC GFF -
Libraries/PyKotor/src/pykotor/resource/generics/utc.py:821- SoundSetFile field writing to UTC GFF
HolocronToolset:
-
Tools/HolocronToolset/src/toolset/data/installation.py:58- HTInstallation.TwoDA_SOUNDSETS constant -
Tools/HolocronToolset/src/ui/editors/utc.ui:260-267- Soundset selection combobox in UTC editor UI
Vendor Implementations:
-
vendor/reone/src/libs/game/object/creature.cpp:1347-1354- Sound set loading from 2DA
Visual Effects & animations 2DA files
Engine Usage: Defines visual effects (particle effects, impact effects, environmental effects) with their durations, models, and properties. The engine uses this file when playing visual effects for spells, combat, and environmental events.
Row index: Visual effect ID (integer)
Column structure:
| Column Name | type | Description |
|---|---|---|
label |
string | Visual effect label |
name |
StrRef | string reference for effect name |
model |
ResRef (optional) | Effect model ResRef |
impactmodel |
ResRef (optional) | Impact model ResRef |
impactorient |
Integer | Impact orientation |
impacttype |
Integer | Impact type identifier |
duration |
Float | Effect duration in seconds |
durationvariance |
Float | Duration variance |
loop |
Boolean | Whether effect loops |
render |
Boolean | Whether effect is rendered |
renderhint |
Integer | Render hint flags |
sound |
ResRef (optional) | Sound effect ResRef |
sounddelay |
Float | Sound delay in seconds |
soundvariance |
Float | Sound variance |
soundloop |
Boolean | Whether sound loops |
soundvolume |
Float | Sound volume (0.0-1.0) |
light |
Boolean | Whether effect emits light |
lightcolor |
string | Light color RGB values |
lightintensity |
Float | Light intensity |
lightradius |
Float | Light radius |
lightpulse |
Boolean | Whether light pulses |
lightpulselength |
Float | Light pulse length |
lightfade |
Boolean | Whether light fades |
lightfadelength |
Float | Light fade length |
lightfadestart |
Float | Light fade start time |
lightfadeend |
Float | Light fade end time |
lightshadow |
Boolean | Whether light casts shadows |
lightshadowradius |
Float | Light shadow radius |
lightshadowintensity |
Float | Light shadow intensity |
lightshadowcolor |
string | Light shadow color RGB values |
lightshadowfade |
Boolean | Whether light shadow fades |
lightshadowfadelength |
Float | Light shadow fade length |
lightshadowfadestart |
Float | Light shadow fade start time |
lightshadowfadeend |
Float | Light shadow fade end time |
lightshadowpulse |
Boolean | Whether light shadow pulses |
lightshadowpulselength |
Float | Light shadow pulse length |
lightshadowpulseintensity |
Float | Light shadow pulse intensity |
lightshadowpulsecolor |
string | Light shadow pulse color RGB values |
lightshadowpulsefade |
Boolean | Whether light shadow pulse fades |
lightshadowpulsefadelength |
Float | Light shadow pulse fade length |
lightshadowpulsefadestart |
Float | Light shadow pulse fade start time |
lightshadowpulsefadeend |
Float | Light shadow pulse fade end time |
lightshadowpulsefadeintensity |
Float | Light shadow pulse fade intensity |
lightshadowpulsefadecolor |
string | Light shadow pulse fade color RGB values |
lightshadowpulsefadepulse |
Boolean | Whether light shadow pulse fade pulses |
lightshadowpulsefadepulselength |
Float | Light shadow pulse fade pulse length |
lightshadowpulsefadepulseintensity |
Float | Light shadow pulse fade pulse intensity |
lightshadowpulsefadepulsecolor |
string | Light shadow pulse fade pulse color RGB values |
lightshadowpulsefadepulsefade |
Boolean | Whether light shadow pulse fade pulse fades |
lightshadowpulsefadepulsefadelength |
Float | Light shadow pulse fade pulse fade length |
lightshadowpulsefadepulsefadestart |
Float | Light shadow pulse fade pulse fade start time |
lightshadowpulsefadepulsefadeend |
Float | Light shadow pulse fade pulse fade end time |
lightshadowpulsefadepulsefadeintensity |
Float | Light shadow pulse fade pulse fade intensity |
lightshadowpulsefadepulsefadecolor |
string | Light shadow pulse fade pulse fade color RGB values |
Note: The visualeffects.2da file may contain many optional columns for advanced lighting and shadow effects.
References:
PyKotor:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:593- GFF field mapping: "VisualType" -> visualeffects.2da
Engine Usage: Maps portrait IDs to portrait image ResRefs for character selection screens and character sheets. The engine uses this file to display character portraits in the UI.
Row index: Portrait ID (integer)
Column structure:
| Column Name | type | Description |
|---|---|---|
label |
string | Portrait label |
baseresref |
ResRef | Base portrait image ResRef |
appearancenumber |
Integer | Associated appearance ID |
appearance_s |
Integer | Small appearance ID |
appearance_l |
Integer | Large appearance ID |
forpc |
Boolean | Whether portrait is for player character |
sex |
Integer | Gender (0=male, 1=female) |
References:
PyKotor:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:455- TwoDARegistry.PORTRAITS constant definition -
Libraries/PyKotor/src/pykotor/extract/twoda.py:523- GFF field mapping: "PortraitId" -> portraits.2da -
Libraries/PyKotor/src/pykotor/extract/savedata.py:66- Party portraits documentation comment -
Libraries/PyKotor/src/pykotor/extract/savedata.py:226-228- Portrait rotation logic documentation -
Libraries/PyKotor/src/pykotor/extract/savedata.py:241- Party portraits field documentation -
Libraries/PyKotor/src/pykotor/extract/savedata.py:391- Portraits parsing comment -
Libraries/PyKotor/src/pykotor/extract/savedata.py:456- Portraits writing comment -
Libraries/PyKotor/src/pykotor/extract/savedata.py:2157- SAVENFO.res portraits documentation -
Libraries/PyKotor/src/pykotor/extract/savedata.py:2309- Party portraits documentation -
Libraries/PyKotor/src/pykotor/extract/savedata.py:2370- Portrait debug print
HolocronToolset:
-
Tools/HolocronToolset/src/toolset/data/installation.py:54- HTInstallation.TwoDA_PORTRAITS constant -
Tools/HolocronToolset/src/toolset/gui/editors/utc.py:140-152- portraits.2da usage for portrait selection with alignment-based variant selection (baseresref, baseresrefe, baseresrefve, baseresrefvve, baseresrefvvve) -
Tools/HolocronToolset/src/ui/editors/utc.ui:407- Portrait selection combobox in UTC editor UI -
Tools/HolocronToolset/src/toolset/gui/editors/savegame.py:51- Portraits documentation in save game editor -
Tools/HolocronToolset/src/ui/editors/savegame.ui:94-98- Portraits group box in save game editor UI
Vendor Implementations:
-
vendor/reone/src/libs/game/portraits.cpp:33-51- Portrait loading from 2DA with all column access
Engine Usage: Defines head models and textures for player characters and NPCs. The engine uses this file when loading character heads, determining which 3D model and textures to apply.
Row index: Head ID (integer)
Column structure:
| Column Name | type | Description |
|---|---|---|
head |
ResRef (optional) | Head model ResRef |
headtexe |
ResRef (optional) | Head texture E ResRef |
headtexg |
ResRef (optional) | Head texture G ResRef |
headtexve |
ResRef (optional) | Head texture VE ResRef |
headtexvg |
ResRef (optional) | Head texture VG ResRef |
headtexvve |
ResRef (optional) | Head texture VVE ResRef |
headtexvvve |
ResRef (optional) | Head texture VVVE ResRef |
alttexture |
ResRef (optional) | Alternative texture ResRef |
Column Details:
The complete column structure is defined in reone's heads parser:
-
head: Optional ResRef - head model ResRef -
alttexture: Optional ResRef - alternative texture ResRef -
headtexe: Optional ResRef - head texture for evil alignment -
headtexg: Optional ResRef - head texture for good alignment -
headtexve: Optional ResRef - head texture for very evil alignment -
headtexvg: Optional ResRef - head texture for very good alignment -
headtexvve: Optional ResRef - head texture for very very evil alignment -
headtexvvve: Optional ResRef - head texture for very very very evil alignment
References:
-
vendor/reone/src/libs/resource/parser/2da/heads.cpp:29-39- Complete column parsing implementation with all column names -
vendor/reone/src/libs/game/object/creature.cpp:1223-1228- Head loading from 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 |
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
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 |
References:
PyKotor:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:206- Music ResRef column definitions for ambientmusic.2da (K1: resource, stinger1, stinger2, stinger3) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:398- Music ResRef column definitions for ambientmusic.2da (K2: resource, stinger1, stinger2, stinger3) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:545-548- GFF field mapping: "MusicDay", "MusicNight", "MusicBattle", "MusicDelay" -> ambientmusic.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 |
References:
PyKotor:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:72- StrRef column definition for ambientsound.2da (K1: description) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:184- Sound ResRef column definition for ambientsound.2da (K1: resource) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:247- StrRef column definition for ambientsound.2da (K2: description) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:376- Sound ResRef column definition for ambientsound.2da (K2: resource) -
Libraries/PyKotor/src/pykotor/common/scriptdefs.py:6986-6988- AmbientSoundPlay function comment
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) |
References:
-
vendor/reone/src/libs/game/object/item.cpp:164-171- Ammunition type loading from 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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:497- TwoDARegistry.CAMERAS constant definition -
Libraries/PyKotor/src/pykotor/extract/twoda.py:550- GFF field mapping: "CameraStyle" -> camerastyle.2da -
Libraries/PyKotor/src/pykotor/resource/generics/are.py:37- ARE camera_style field documentation -
Libraries/PyKotor/src/pykotor/resource/generics/are.py:123- Camera style index comment -
Libraries/PyKotor/src/pykotor/resource/generics/are.py:442- CameraStyle field parsing from ARE GFF -
Libraries/PyKotor/src/pykotor/resource/generics/are.py:579- CameraStyle field writing to ARE GFF
HolocronToolset:
-
Tools/HolocronToolset/src/toolset/data/installation.py:96- HTInstallation.TwoDA_CAMERAS constant -
Tools/HolocronToolset/src/toolset/gui/editors/are.py:102- camerastyle.2da loading in ARE editor
Vendor Implementations:
-
vendor/reone/src/libs/game/camerastyles.cpp:29-42- Camera style loading from 2DA -
vendor/reone/src/libs/game/object/area.cpp:140-148- Camera style usage in areas
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:188-198- Sound ResRef column definitions for footstepsounds.2da (K1: rolling, dirt0-2, grass0-2, stone0-2, wood0-2, water0-2, carpet0-2, metal0-2, puddles0-2, leaves0-2, force1-3) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:380-390- Sound ResRef column definitions for footstepsounds.2da (K2: rolling, dirt0-2, grass0-2, stone0-2, wood0-2, water0-2, carpet0-2, metal0-2, puddles0-2, leaves0-2, force1-3)
Vendor Implementations:
-
vendor/reone/src/libs/game/footstepsounds.cpp:31-57- Footstep sounds loading from 2DA -
vendor/reone/src/libs/game/object/creature.cpp:106- Footstep type usage from appearance.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/reone/src/libs/game/object/sound.cpp:92-96- Priority group loading from 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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:460- TwoDARegistry.FACTIONS constant definition (maps to "repute") -
Libraries/PyKotor/src/pykotor/extract/twoda.py:526-527- GFF field mapping: "FactionID" and "Faction" -> repute.2da -
Libraries/PyKotor/src/pykotor/extract/savedata.py:92- REPUTE.fac documentation comment -
Libraries/PyKotor/src/pykotor/extract/savedata.py:1593- REPUTE.fac file check comment -
Libraries/PyKotor/src/pykotor/extract/savedata.py:1627- REPUTE.fac documentation -
Libraries/PyKotor/src/pykotor/extract/savedata.py:1667- REPUTE_IDENTIFIER constant definition -
Libraries/PyKotor/src/pykotor/extract/savedata.py:1683-1684- repute GFF field initialization -
Libraries/PyKotor/src/pykotor/extract/savedata.py:1759-1761- REPUTE.fac parsing -
Libraries/PyKotor/src/pykotor/extract/savedata.py:1795-1796- REPUTE.fac writing
HolocronToolset:
-
Tools/HolocronToolset/src/toolset/data/installation.py:59- HTInstallation.TwoDA_FACTIONS constant -
Tools/HolocronToolset/src/toolset/gui/editors/utc.py:239- repute.2da included in batch cache for UTC editor -
Tools/HolocronToolset/src/toolset/gui/editors/utc.py:253-280- repute.2da usage in faction selection combobox -
Tools/HolocronToolset/src/toolset/gui/editors/utp.py:121-128- repute.2da usage in UTP editor -
Tools/HolocronToolset/src/toolset/gui/editors/utd.py:117-124- repute.2da usage in UTD editor -
Tools/HolocronToolset/src/toolset/gui/editors/ute.py:106-109- repute.2da usage in UTE editor -
Tools/HolocronToolset/src/toolset/gui/editors/utt.py:72-78- repute.2da usage in UTT editor
Vendor Implementations:
-
vendor/reone/src/libs/game/reputes.cpp:36-62- Repute matrix loading from 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:
-
Libraries/PyKotor/src/pykotor/resource/formats/mdl/io_mdl.py:21- SurfaceMaterial import -
Libraries/PyKotor/src/pykotor/resource/formats/mdl/mdl_types.py:9- SurfaceMaterial import -
Libraries/PyKotor/src/pykotor/resource/formats/mdl/mdl_types.py:412- SurfaceMaterial.GRASS default value -
Libraries/PyKotor/src/pykotor/resource/formats/bwm/bwm_data.py:47- SurfaceMaterial ID per face documentation -
Libraries/PyKotor/src/pykotor/resource/formats/bwm/bwm_data.py:784- SurfaceMaterial ID field documentation -
Libraries/PyKotor/src/pykotor/resource/formats/mdl/mdl_data.py:1578- Comment referencing surfacemat.2da for walkmesh surface material -
Libraries/PyKotor/src/pykotor/resource/formats/bwm/io_bwm.py:160- SurfaceMaterial parsing from BWM
Vendor Implementations:
-
vendor/reone/src/libs/game/surfaces.cpp:29-44- Surface material loading from 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/xoreos/src/engines/kotor/gui/loadscreen/loadscreen.cpp:45- Loading screen hints TODO comment (KotOR-specific)
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:536- GFF field mapping: "BodyBag" -> bodybag.2da -
Libraries/PyKotor/src/pykotor/resource/generics/utc.py:296-298- UTC bodybag_id field documentation (not used by game engine) -
Libraries/PyKotor/src/pykotor/resource/generics/utc.py:438- UTC bodybag_id field initialization -
Libraries/PyKotor/src/pykotor/resource/generics/utc.py:555-556- BodyBag field parsing from UTC GFF (deprecated) -
Libraries/PyKotor/src/pykotor/resource/generics/utc.py:944- BodyBag field writing to UTC GFF -
Libraries/PyKotor/src/pykotor/resource/generics/utp.py:105- UTP bodybag_id field documentation -
Libraries/PyKotor/src/pykotor/resource/generics/utp.py:179- UTP bodybag_id field initialization -
Libraries/PyKotor/src/pykotor/resource/generics/utp.py:254- BodyBag field parsing from UTP GFF -
Libraries/PyKotor/src/pykotor/resource/generics/utp.py:341- BodyBag field writing to UTP GFF
Vendor Implementations:
-
vendor/reone/src/libs/game/object/creature.cpp:1357-1366- Body bag loading from 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/reone/src/libs/game/object/creature.cpp:1398-1406- Perception range loading from 2DA -
vendor/KotOR.js/src/module/ModuleCreature.ts:3178-3187- Perception range access from 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/KotOR.js/src/module/ModuleCreature.ts:759- Regeneration rate loading from 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/KotOR.js/src/module/ModuleCreature.ts:1474-1482- animation lookup from 2DA -
vendor/KotOR.js/src/module/ModulePlaceable.ts:1063-1103- Placeable animation lookup from 2DA -
vendor/KotOR.js/src/module/ModuleDoor.ts:1343-1365- Door animation lookup from 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/KotOR.js/src/module/ModuleCreature.ts:1482- Combat animation lookup from 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/KotOR.js/src/module/ModuleCreature.ts:1819-1822- Weapon sound lookup from 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/KotOR.js/src/module/ModulePlaceable.ts:387-389- Placeable sound lookup from 2DA -
vendor/KotOR.js/src/module/ModuleDoor.ts:239-241- Door sound lookup from 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/KotOR.js/src/module/ModuleCreature.ts:2875-2887- Creature speed lookup from 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/KotOR.js/src/module/ModuleCreature.ts:2926-2941- Experience table lookup from 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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:200- Sound ResRef column definition for guisounds.2da (K1: soundresref) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:392- Sound ResRef column definition for guisounds.2da (K2: soundresref)
Vendor Implementations:
-
vendor/reone/src/libs/game/gui/sounds.cpp:31-45- GUI sound loading from 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/reone/src/libs/game/gui/dialog.cpp:302-315- Dialog animation lookup from 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/KotOR.js/src/nwscript/NWScriptDefK1.ts:5552- Force shield lookup from 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:
-
Libraries/PyKotor/src/pykotor/resource/generics/utc.py:123-125- UTC plot field documentation -
Libraries/PyKotor/src/pykotor/resource/generics/utc.py:375- UTC plot field initialization -
Libraries/PyKotor/src/pykotor/resource/generics/utc.py:579-580- Plot field parsing from UTC GFF -
Libraries/PyKotor/src/pykotor/resource/generics/utc.py:839- Plot field writing to UTC GFF -
Libraries/PyKotor/src/pykotor/resource/generics/uti.py:71-73- UTI plot field documentation -
Libraries/PyKotor/src/pykotor/resource/generics/uti.py:129- UTI plot field initialization -
Libraries/PyKotor/src/pykotor/resource/generics/uti.py:256-258- Plot field parsing from UTI GFF -
Libraries/PyKotor/src/pykotor/resource/generics/uti.py:339- Plot field writing to UTI GFF -
Libraries/PyKotor/src/pykotor/resource/generics/dlg/io/gff.py:89-92- Dialog node PlotIndex and PlotXPPercentage field parsing
Vendor Implementations:
-
vendor/KotOR.js/src/managers/JournalManager.ts:58-64- Plot/quest experience lookup from 2DA -
vendor/KotOR.js/src/managers/JournalManager.ts:101-104- Plot existence check from 2DA -
vendor/KotOR.js/src/nwscript/NWScriptDefK1.ts:7845-7848- Plot table access for quest experience
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:150- StrRef column definitions for traps.2da (K1: trapname, name) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:328- StrRef column definitions for traps.2da (K2: trapname, name) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:470- TwoDARegistry.TRAPS constant definition -
Libraries/PyKotor/src/pykotor/extract/twoda.py:568- GFF field mapping: "TrapType" -> traps.2da -
Libraries/PyKotor/src/pykotor/common/scriptdefs.py:6347-6348- VersusTrapEffect function comments -
Libraries/PyKotor/src/pykotor/common/scriptdefs.py:7975-7976- GetLastHostileActor function comment mentioning traps -
Libraries/PyKotor/src/pykotor/common/scriptlib.py:21692- Trap targeting comment
HolocronToolset:
-
Tools/HolocronToolset/src/toolset/data/installation.py:69- HTInstallation.TwoDA_TRAPS constant -
Tools/HolocronToolset/src/toolset/gui/editors/utt.py:73-87- traps.2da loading and usage in trap type selection combobox -
Tools/HolocronToolset/src/toolset/gui/editors/utt.py:167- traps.2da usage for setting trap type index -
Tools/HolocronToolset/src/toolset/gui/editors/utt.py:216- traps.2da usage for getting trap type index -
Tools/HolocronToolset/src/ui/editors/utt.ui:252- Trap selection combobox in UTT editor UI
Vendor Implementations:
-
vendor/reone/src/libs/game/object/trigger.cpp:75-78- Trap type loading from 2DA -
vendor/KotOR.js/src/module/ModuleTrigger.ts:605-611- Trap loading from 2DA -
vendor/KotOR.js/src/module/ModuleObject.ts:1822- Trap lookup from 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/KotOR.js/src/module/Module.ts:663-669- Module save inclusion check from 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/KotOR.js/src/managers/PartyManager.ts:180-187- Tutorial window tracker initialization from 2DA -
vendor/KotOR.js/src/managers/PartyManager.ts:438- Tutorial table access
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/NorthernLights/Assets/Scripts/Systems/StateSystem.cs:282-294- Global variable initialization from 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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:457- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:56- HTInstallation constant
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:461- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:60- HTInstallation constant
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:471- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:70- HTInstallation constant
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:473- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:72- HTInstallation constant -
Tools/HolocronToolset/src/toolset/gui/editors/uti.py:632-639- Upgrade selection in item editor
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:474- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:73- HTInstallation constant -
Tools/HolocronToolset/src/toolset/gui/editors/ute.py:101-104- Encounter difficulty selection
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:475- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:74- HTInstallation constant -
Tools/HolocronToolset/src/toolset/gui/editors/uti.py:107-111- Item property loading in item editor
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:491- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:90- HTInstallation constant -
Tools/HolocronToolset/src/toolset/gui/editors/dlg/editor.py:1267-1319- Emotion loading in dialog editor (KotOR 2 only)
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:492- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:91- HTInstallation constant -
Tools/HolocronToolset/src/toolset/gui/editors/dlg/editor.py:1267-1325- Expression loading in dialog editor (KotOR 2 only)
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:493- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:92- HTInstallation constant -
Tools/HolocronToolset/src/toolset/gui/editors/dlg/editor.py:1263-1298- Video effect loading in dialog editor
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:495- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:94- HTInstallation constant
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:469- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:68- HTInstallation constant -
Tools/HolocronToolset/src/toolset/gui/editors/utt.py:71-76- Cursor selection in trigger editor
The following 2DA files ARE used for item property parameter and cost calculations:
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:476- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:75- HTInstallation constant -
Tools/HolocronToolset/src/toolset/gui/editors/uti.py:517-558- Parameter table lookup in item editor
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:477- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:76- HTInstallation constant -
Tools/HolocronToolset/src/toolset/gui/editors/uti.py:486-496- Cost table lookup in item editor
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:478- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:77- HTInstallation constant
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:479- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:78- HTInstallation constant
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:480- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:79- HTInstallation constant
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:481- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:80- HTInstallation constant
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:482- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:81- HTInstallation constant
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:483- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:82- HTInstallation constant
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:484- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:83- HTInstallation constant
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:485- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:84- HTInstallation constant
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:486- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:85- HTInstallation constant
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:487- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:86- HTInstallation constant
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:488- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:87- HTInstallation constant
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:489- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:88- HTInstallation constant
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:490- TwoDARegistry definition -
Tools/HolocronToolset/src/toolset/data/installation.py:89- HTInstallation constant
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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:579- GFF field mapping: "LightColor" -> iprp_lightcol.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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:580- GFF field mapping: "MonsterDamage" -> iprp_monstdam.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:
-
vendor/KotOR.js/src/engine/rules/SWRuleSet.ts:66-74- Difficulty options initialization from 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:
-
vendor/KotOR.js/src/engine/rules/SWRuleSet.ts:89-95- XP table initialization from 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:
-
vendor/KotOR.js/src/engine/rules/SWRuleSet.ts:101-105- Feat gain initialization from 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:
-
vendor/KotOR.js/src/engine/rules/SWRuleSet.ts:143-150- Effect icon initialization from 2DA -
vendor/KotOR.js/src/nwscript/NWScriptDefK1.ts:6441-6446- SetEffectIcon function -
vendor/NorthernLights/nwscript.nss:4678- Comment referencing effecticon.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/KotOR.js/src/engine/rules/SWRuleSet.ts:178-185- Pazaak decks initialization from 2DA -
vendor/KotOR.js/src/nwscript/NWScriptDefK1.ts:4438- StartPazaakGame function comment -
vendor/NorthernLights/nwscript.nss:3847- Comment referencing PazaakDecks.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:
-
vendor/KotOR.js/src/combat/CreatureClass.ts:302-304- AC bonus loading from 2DA -
Tools/HolocronToolset/src/toolset/data/installation.py:63- HTInstallation.ACBONUS constant
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:
-
vendor/KotOR.js/src/controls/KeyMapper.ts:293-299- Keymap initialization from 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:
-
vendor/NorthernLights/nwscript.nss:949- Comment referencing poison.2da constants -
vendor/KotOR.js/src/nwscript/NWScriptDefK1.ts:3194-3199- EffectPoison function
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:
-
vendor/NorthernLights/nwscript.nss:3858- Comment referencing FeedBackText.2da -
vendor/KotOR.js/src/nwscript/NWScriptDefK1.ts:4464-4465- DisplayFeedBackText function
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:
-
vendor/Kotor.NET/Kotor.NET/Tables/Appearance.cs:58-60- Comment referencing appearancesndset.2da for SoundAppTypeID
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:
-
vendor/KotOR.js/src/game/tsl/menu/MenuGraphicsAdvanced.ts:51-122- texture pack loading from 2DA for graphics menu (KotOR 2 only) -
vendor/KotOR.js/src/game/kotor/menu/MenuGraphicsAdvanced.ts:63-121- texture pack usage in KotOR 1 graphics menu
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:
-
vendor/KotOR.js/src/module/ModuleArea.ts:210- Comment referencing loadscreens.2da for area loading screen index -
Libraries/PyKotor/src/pykotor/extract/twoda.py:549- GFF field mapping: "LoadScreenID" -> loadscreens.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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:84- StrRef column definition for fractionalcr.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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:74- StrRef column definition for bindablekeys.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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:138- StrRef column definition for masterfeats.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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:140- StrRef column definitions for movies.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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:144- StrRef column definitions for stringtokens.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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:255- StrRef column definition for disease.2da (KotOR 2) -
Libraries/PyKotor/src/pykotor/extract/twoda.py:238,431- Script ResRef column definitions for disease.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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:156- ResRef column definition for droiddischarge.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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:172- model ResRef column definitions for upcrystals.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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:199- Sound ResRef column definition for grenadesnd.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:
-
Libraries/PyKotor/src/pykotor/extract/twoda.py:201- Sound ResRef column definition for inventorysnds.2da
Reading: Libraries/PyKotor/src/pykotor/resource/formats/twoda/io_twoda.py:12-106
Writing: Libraries/PyKotor/src/pykotor/resource/formats/twoda/io_twoda.py:109-174
reone (C++):
- Reading:
vendor/reone/src/libs/resource/format/2dareader.cpp - Writing:
vendor/reone/src/libs/resource/format/2dawriter.cpp - data structure:
vendor/reone/src/libs/resource/2da.cpp
xoreos (C++):
- Reading:
vendor/xoreos/src/aurora/2dafile.cpp- Generic Aurora engine 2DA format parser (shared across KotOR, Neverwinter Nights, and other Aurora engine games). The format structure is the same, but specific 2DA files and their columns ARE KotOR-specific.
KotOR-Unity (C#):
- Reading:
vendor/KotOR-Unity/Assets/Scripts/FileObjects/2DAObject.cs:23-105- Complete 2DA reading implementation with column parsing, row indices, and cell data reading
KotOR.js (TypeScript):
- Reading:
vendor/KotOR.js/src/resource/TwoDAObject.ts:69-145- Complete 2DA reading implementation - Manager:
vendor/KotOR.js/src/managers/TwoDAManager.ts:21-37- 2DA table loading from game archives - Usage:
vendor/KotOR.js/src/talents/TalentFeat.ts:122-132- Feat loading fromfeat.2da
Kotor.NET (C#):
This documentation aims to provide a comprehensive overview of the KotOR 2DA file format, focusing on the detailed file structure and data formats used within the games.