Kexikus

Detailed information of 2da files

Recommended Posts

.2da files are a very common and important file type in both KotOR games and are also very common to be edited in mods. That's why this tutorial aims to bring you a list with detailed explanations on what they do.

Introduction

You can find all .2da files in the 2da.bif file, where they can be accessed using KotOR Tool. KotOR Tool also provides a 2da-editor to modify them as you want.

Basically, .2da files are 2d arrays or put simply: tables, just like you know them from programs like Excel. The one difference here would be that in a .2da file, each column has a specific and pre-defined (hardcoded) function. Each .2da file collects a set of "objects" that differ in details. Thus every column in the .2da file represents a certain characteristic of such an object while each row represents one specific instance of this type of object. As a simple example, you could have a file called trees.2da that contains information on different types of trees. The columns would then include details like height, age, etc and every row would stand for one tree species with details entered in each entry of this row.

This tutorial will consist of two parts: First a (currently incomplete) list of all .2da files used in both games with detailed information on what they do and what each column stands for. The second part will be a list of .2da files that exist in KotOR but that aren't actually used since they're only remnants from Never Winter Nights (an older game by Bioware based on the same engine). This second part is only for reference, so that you know these files are useless.

Now, this tutorial is currently far from being complete. There are many .2da files that are still missing and even for those that are already listed there may be missing information or maybe even incorrect information. If you notice a mistake or know things that are still missing, please post them to this thread so that I can add them to improve on this ressource. Thank you very much :D

A big thanks already goes to Fair Strides, who provided most of the information currently listed. Thank you!

Used .2da files

In this section I will (eventually) list all .2da files used by both KotOR and its sequel TSL. Most of these appear in both games and are identical or have only very minor differences. Those are marked with (K1/TSL) after their names and possible differences will be explained in the proper place. Some .2da files however differ on a bigger scale between the two games or exist only in one of them. Those are then marked by either (K1) or (TSL) depending on which game they are from.

Each listed file has a short introduction that describes what these files are used for, followed by a list of their columns with descriptions.
If there is no description for a certain column, then that's just because I don't know what it does, while descriptions written in red are unconfirmed and might be wrong.
And as a final note: When you open a .2da file in KotOR Tool, you will notice the first column labeled (Row Label). This column exists in every .2da file and labels the rows numerically from 0 upwards. This label can then be used by other .2da files to reference specific lines from this file. But since this column is the same in every .2da file, I won't list it everytime.
And here we go:

acbonus.2da (K1/TSL)


The acbonus.2da file controls an inherent defense bonus based on class and level. There is one row per level and one column per class. The columns are laid out abbreviated by class.

  • scd = Scoundrel
  • sol = Soldier
  • sct = Scout
  • jdc = Jedi Consular
  • jds = Jedi Sentinel
  • jdg = Jedi Guardian

and in TSL, we add the following:

  • sas = Sith Assassin
  • sld = Sith Lord
  • sma = Sith Marauder
  • jwa = Jedi Watchman
  • jma = Jedi Master
  • jwm = Jedi Weaponmaster
  • tec = Tech Specialist

At the Nth row in the 2da, the class gets the following bonus to their defense. This bonus is NOT cumulative.

For example, if you build a Scoundrel and a Scout/Soldier with 10 in each attribute (except for Wisdom at 14 and Charisma at 18), the Scoundrel will have a defense of 12, while the Scout/Soldier will have a defense of 10.

This is because the Scoundrel's column shows a 2 at 0 and 1st level, netting a +2 to their base defense. If you look at the Scoundrel's column again, you'll see it says 2 for levels 0-5. This does not mean you get an additional +2 per level. This bonus is a given constant, that can change as you level up. Like how the Scoundrel's +2 turns into a +6 at level 12 and stays that way. They will always have +6 more defense than their equipment and stats would normally allow.



aiscripts.2da (K1/TSL)


aiscripts.2da is a special .2da file that allows for setting and controlling AI behavior.

In KotOR 1, this is seen in-game when you assign a script to a party member's behavior from the Character Screen's "Scripts" button.

In KotOR 2, this is seen in-game as the collection of AI behavior options at the very right end of the actions bar, including icons and tooltips on the behavior itself. Also where you'd find the Force Forms.

  • label: Identifying text for reading the row's purpose/identity
  • name_strref: A reference to an entry in dialog.tlk that names this behavior setting in-game
  • description_strref: A reference to an entry in dialog.tlk that describes this behavior setting in-game (K1 only)
  • aistat: A very important thing, this is like an index or reference numer used for identifying the AI setting in scripts. THIS IS IMPORTANT FOR MODIFYING THE AI BEHAVIOR IN SCRIPTS!

 

 

 

aliensound.2da (K1/TSL)


aliensound.2da is a file that is probably not used anywhere in-game but is very important as a reference file. It has two columns that provide descriptions for the rather cryptic alien sound file names. This is VERY useful for adding audio to dialogs.

  • filename: The name of the file (example: n_genwook_grts1)
  • comment: Descriptive comment for the file (example: Gen_Wookiee_Greeting_Short -> generic wookie greeting audio)

 

 

 

ambientmusic.2da (K1/TSL)


ambientmusic.2da is used by the levels themselves and also scripts to affect what music tracks are playing, both as background noise and as battle music.

  • description: A reference to an entry in dialog.tlk to name this track. This is only used in the Music screen in TSL.
  • resource: The filename of the music track itself.
  • stinger1: Probably some sort of backup or accompanying file played at the same time.
  • stinger2: ^^ (but always set to **** in vanilla)
  • stinger3: ^^ (also always ****)

 

 

 

ambientsound.2da (K1/TSL)


ambientsound.2da is very similar to ambientmusic.2da.

The rows are used by the levels and scripts for background sounds, like a bird sounds in a forest for instance.

  • description: A reference to an entry in dialog.tlk to name this sound. This is never used anywhere in-game and is probably only useful for a toolset that helps to create content.
  • resource: The filename of the audio file to use.
  • presetinstance0-7: Never used

 

 

 

ammunitiontypes.2da (K1/TSL)


In ammunitiontypes.2da each row controls a different type of ammo. Each ammo can have its own models for normal shooting, rapid-shot, power blast, and sniper shot. In addition, you can do things with the sounds, muzzle, and shields. These rows are references in baseitems.2da.

  • label: Descriptive label naming the ammo for anyone editing the file
  • model: Apparently unused
  • model0: The model used for normal shots, like the default, rapid shot and sniper shot
  • model1: The model used for Power Blast
  • shotsound0: The sound used for normal shots
  • shotsound1: The sound used for Power Blast
  • impactsound0: The sound used for when the normal shots connect
  • impactsound1: The sound used for when Power Blast connects
  • muzzleflash: The model used for the visual effect at the end of the muzzle when you fire
  • shieldhit: A 0 or 1 value determining whether the ammunition hits shields or ignores them

 

 

 

animations.2da (K1/TSL)


animations.2da is a master file detailing all the animations that are normally available in the game. Some of these animations are only available to placeable objects and/or doors, while the vast majority are available to creatures. Some animations (the animloop01 through 10 ones) I believe are available to everything.

  • name: The name of the animation in the model itself. Very important and probably case-sensitive
  • description: (TSL only) Description of the animation
  • stationary: A 0 or 1 setting that determines if the object playing the animation can still move around during the animation
  • pause: A 0 or 1 setting that determines if the object playing the animation can issue more commands/actions
  • walking: A 0 or 1 setting that determines if this counts as walking. Not sure why this is important
  • running: A 0 or 1 setting that determines if this counts as running. Not sure why this is important
  • looping: A 0 or 1 setting that determines if this animation can loop over and over
  • fireforget: A 0 or 1 setting that determines if this animation plays once and is done
  • overlay: A 0 or 1 setting that determines if this animation can be played over other ones
  • playoutofplace: A 0 or 1 setting that determines if this animation can be played in abnormal circumstances? (Not sure, but it's set to 0 for everything)
  • dialog: A 0 or 1 setting that determines if this is a dialog animation, like talking
  • damage: A 0 or 1 setting that determines if this is a blocking animation
  • dodge: A 0 or 1 setting that determines if this is a dodging animation
  • attack: A 0 or 1 setting that determines if this is an attack animation
  • hideequippeditems: A 0 or 1 setting that determines if weapons are hidden while the animation is playing (headgear will always stay visible even when this is set to 1)

 

 

 

appearance.2da (K1)


appearance.2da is probably the most well-known of all the .2da files, due mostly to how far-reaching this file is and how much you're able to see its effects in-game.

This file controls the appearance of any droid, humanoid, or creature you encounter in the game, as well as their movement speed, footsteps, perception distance, attack distance, head, sounds, head-tracking, and so much more.

This won't be able to be illustrated like the previous .2da files, but it should be similar.

  • label: informational title, not actually used by the game and only to help those looking through the file
  • string_ref: A reference to an entry in dialog.tlk to name this apperance. This is only useful for a toolset.
  • race: probably the default model
  • walkdist: The distance, in meters, the creature travels during the length of their walking animation
  • rundist: The distance, in meters, the creature travels during the length of their running animation
  • driveanimwalk: Not sure about the purpose, except maybe being the walkdist for an NPC's scripted movement. This is almost always the same setting as walkdist.
  • driveanimrun: Not sure about the purpose, except maybe being the walkdist for an NPC's scripted movement. This is almost always the same setting as walkdist.
  • racetex: Probably default texture to be used (**** will most likely default to the standard texture of the model)
  • modeltype: Categorizes the model for the game to work with:
    • F = Full-bodied model: This includes the head as part of the model, so the normalhead and backuphead columns aren't used/needed
    • B = Body-model: Everything but the head is there, so use the normalhead and backuphead columns
    • L = Should be the same as F, except that supposedly only weapons equipped in the right hand appear
    • S = Should be the same as F, except that no weapons appear when equipped
  • normalhead: head model used for this appearance. References rows from heads.2da
  • backuphead: If the normalhead is already in use, then the game will try to use this backuphead as an alternative (used for common NPCs to try and reduce the clone effect)

The following applies to the modela through modelj columns:

  • model*: The model to use when the given appearance is wearing something in the * category of armor/clothing (**** will probably default to the model from the race column)
  • tex*: The texture to use on the model referenced by model* (**** will default to the standard texture of model*)
  • texaevil: This unique column references an underwear to use when the creature using this appearance is considered dark sided/evil. This is thus only used for the player

As far as what these model columns refer to:

  • a = Underwear
  • b = Clothing
  • c = Armor Class 4 items (Anything with a base defense of 4 and a max Dexterity of 5)
  • d = Armor Class 5 items (Anything with a base defense of 5 and a max Dexterity of 4)
  • e = Armor Class 6 items (Anything with a base defense of 6 and a max Dexterity of 3)
  • f = Armor Class 7 items (Anything with a base defense of 7 and a max Dexterity of 2)
  • g = Armor Class 8 items (Anything with a base defense of 8 and a max Dexterity of 1)
  • h = Armor Class 9 items (Anything with a base defense of 9 and a max Dexterity of 0)
  • i = All robes
  • j = Both special varieties of robes available at the end of the Star Forge

Back to the normal columns:

  • skin: probably unused (always ****)
  • headtexve: unused since this is done in heads.2da (always ****)
  • headtexe: ^^ (always ****)
  • headtexg: ^^ (always ****)
  • headtexvg: ^^ (always ****)
  • envmap: A texture to apply on top of any textures the current model uses. Most entries use "DEFAULT", except some droid use "CM_Baremetal" for some shine. Any of the "CM_" textures in swpc_tex_tpa.erf will work (May or may not override cubemaps specified in .txi files)
  • bloodcolr: probably unused, but R = Refd, G = Green, W = White, Y = Yellow, N = None, S = ?
  • weaponscale: probably unused, but should scale the weapon by the given factor (always ****)
  • wing_tail_scale: probably unused and a remnant from Never Winter Nights (always 1)
  • moverate: One of the options from creaturespeed.2da. The value here matches up to the value in creaturespeed.2da's 2daname column. I honestly don't know if this one matters, given the *dist columns.
  • driveaccl: Drive acceleration
  • drivemaxspeed: Maximum speed of the drive
  • hitradius: Probably the distance you can get to them before colliding
  • perspace: Personal space; supposedly used to determine if the creature will fit in a gap
  • creperspace: Personal space in combat
  • cameraspace: Used by exceptionally tall people (Canderous, HK-47, Zaalbar), so probably a number to either move the camera up or back from the creature.
  • height: Used to determine if the creature will fit under a ceiling or through a door
  • targetheight: Remnant from Never Winter Nights, always 1
  • abortonparry: A 0 or 1 setting that determines if the attack animation aborts when the target parries
  • racialtype: An index to racialtypes.2da, but this is determined by the .utc file, so this column can be ignored
  • haslegs: A 0 or 1 setting used by Never Winter Nights for ranged feats. Only time this is 0 is if it's a turret.
  • hasarms: A 0 or 1 setting used by Never Winter Nights for ranged feats. Only time this is 0 is if it's a turret.
  • portrait: A default texture to use as a portrait. Always set to **** since this is determined by portraits.2da
  • footstepsound: Unused (always ****)
  • footstepvolume: probably unused (always 1)
  • sizecategory: An index to creaturesize.2da. This allows either a small bonus or penalty to Defense
  • armor_sound: Unused (always ****)
  • combat_sound: Unused (always ****)
  • helmet_scale_m: Unused (always ****)
  • helmet_scale_f: Unused (always ****)
  • perceptiondist: An index into ranges.2da. The ones normally used for creatures are 9 to 13
  • footsteptype: An index into footstepsounds.2da. This setting determines what sounds get played when the creature moves around, including whether the ground shakes, whether to mess with the pitch, and whether to overlay a rolling sound.
  • soundapptype: An index into appearancesndset.2da. For the most part, this just helps determine sounds to play when the creature is being hit and when they fall down.
  • headtrack: A 0 or 1 setting that determines whether the head tracks objects it's looking at.
  • head_arc_h: How far, in degrees, the head can move to track objects to the side.
  • head_arc_v: How far, in degrees, the head can move to track objects above or below.
  • headbone: Supposedly, this would be the name of the head bone in the model to use for the tracking. But it's empty all throughout the file and heads still track in-game...
  • hitdist: When lining up for combat animations, this distance is subtracted from the distance between you and the target before seeing if you're close enough to engage.
  • prefatckdist: This is the distance between you and your target for you to engage in combat.
  • groundtilt: A 0 or 1 setting that probably determines whether or not the character tilts with the ground
  • body_bag: An index to bodybag.2da, but this is set in the .utc file so this column is useless
  • freelookeffect: This is an index into videoeffects.2da and can be used to tint vision. Like T3 and HK.
  • cameraheightoffset: Camera offset when viewing the creature in the character screen. Is probably subtracted from the standard height of 1. 0.5 for T3, -0.26 for Zaalbar, **** for everything else
  • deathvfx: Reference to a row in visualeffects.2da to play a visual effect when the creature dies.
  • deathvfxnode: The name of a node in the model to use a the origin of the deathvfx.
  • fadedelayondeath: A delay in seconds before fading the model away. Default is blank, though it's 0 on some droids.
  • destroyobjectdelay: A delay in seconds before the object is destroyed. Default is blank, though it's 1 on some droids (I assume to allow the deathvfx to play out).
  • disableinjuredanim: A 0 or 1 setting that determines if the set of animations for an injured state are played or whether the character never acts injured. This is used on Darth Malak.

 

 

 

appearance.2da (TSL)


appearance.2da is probably the most well-known of all the .2da files, due mostly to how far-reaching this file is and how much you're able to see its effects in-game.

This file controls the appearance of any droid, humanoid, or creature you encounter in the game, as well as their movement speed, footsteps, perception distance, attack distance, head, sounds, head-tracking, and so much more.

This won't be able to be illustrated like the previous .2da files, but it should be similar.

  • label: informational title, not actually used by the game and only to help those looking through the file
  • string_ref: A reference to an entry in dialog.tlk to name this apperance. This is only useful for a toolset.
  • race: probably the default model
  • walkdist: The distance, in meters, the creature travels during the length of their walking animation
  • rundist: The distance, in meters, the creature travels during the length of their running animation
  • driveanimwalk: Not sure about the purpose, except maybe being the walkdist for an NPC's scripted movement. This is almost always the same setting as walkdist.
  • driveanimrun_pc: Not sure about the purpose, except maybe being the walkdist for an NPC's scripted movement. This is almost always the same setting as walkdist.
  • driveanimrun_xbox: Not sure about the purpose, except maybe being the walkdist for an NPC's scripted movement. This is sometimes higher than the driveanimrun_pc.
  • racetex: Probably default texture to be used (**** will most likely default to the standard texture of the model)
  • modeltype: Categorizes the model for the game to work with:
    • F = Full-bodied model: This includes the head as part of the model, so the normalhead and backuphead columns aren't used/needed
    • B = Body-model: Everything but the head is there, so use the normalhead and backuphead columns
    • L = Should be the same as F, except that supposedly only weapons equipped in the right hand appear
    • S = Should be the same as F, except that no weapons appear when equipped
  • normalhead: head model used for this appearance. References rows from heads.2da
  • backuphead: If the normalhead is already in use, then the game will try to use this backuphead as an alternative (used for common NPCs to try and reduce the clone effect)

The following applies to the modela through modelj columns:

  • model*: The model to use when the given appearance is wearing something in the * category of armor/clothing (**** will probably default to the model from the race column)
  • tex*: The texture to use on the model referenced by model* (**** will default to the standard texture of model*)
  • tex*evil: This column references an alternate texture to use on the model referenced by model* when the creature is considered dark sided. (only used available for type a, b, i and l)

As far as what these model columns refer to:

  • a = Underwear
  • b = Clothing
  • c = Armor Class 4 items (Anything with a base defense of 4 and a max Dexterity of 5)
  • d = Armor Class 5 items (Anything with a base defense of 5 and a max Dexterity of 4)
  • e = Armor Class 6 items (Anything with a base defense of 6 and a max Dexterity of 3)
  • f = Armor Class 7 items (Anything with a base defense of 7 and a max Dexterity of 2)
  • g = Armor Class 8 items (Anything with a base defense of 8 and a max Dexterity of 1)
  • h = Armor Class 9 items (Anything with a base defense of 9 and a max Dexterity of 0)
  • i = K1 style Jedi robes
  • j = Both special varieties of robes available at the end of the Star Forge
  • k = Armored Flight Suit
  • l = Dancer outfit
  • m = Zeison Sha Armor
  • n = Jedi Knight and Master robes

Back to the normal columns:

  • skin: probably unused (always ****)
  • headtexve: unused since this is done in heads.2da (always ****)
  • headtexe: ^^ (always ****)
  • headtexg: ^^ (always ****)
  • headtexvg: ^^ (always ****)
  • envmap: A texture to apply on top of any textures the current model uses. Most entries use "DEFAULT", except some droid use "CM_Baremetal" for some shine. Any of the "CM_" textures in swpc_tex_tpa.erf will work (May or may not override cubemaps specified in .txi files)
  • bloodcolr: probably unused, but R = Refd, G = Green, W = White, Y = Yellow, N = None, S = ?
  • weaponscale: probably unused, but should scale the weapon by the given factor (always ****)
  • wing_tail_scale: probably unused and a remnant from Never Winter Nights (always 1)
  • moverate: One of the options from creaturespeed.2da. The value here matches up to the value in creaturespeed.2da's 2daname column. I honestly don't know if this one matters, given the *dist columns.
  • driveaccl: Drive acceleration
  • drivemaxspeed: Maximum speed of the drive
  • hitradius: Probably the distance you can get to them before colliding
  • perspace: Personal space; supposedly used to determine if the creature will fit in a gap
  • creperspace: Personal space in combat
  • cameraspace: Used by exceptionally tall people (Canderous, HK-47, Zaalbar), so probably a number to either move the camera up or back from the creature.
  • height: Used to determine if the creature will fit under a ceiling or through a door
  • targetheight: Remnant from Never Winter Nights, always 1
  • abortonparry: A 0 or 1 setting that determines if the attack animation aborts when the target parries
  • racialtype: An index to racialtypes.2da, but this is determined by the .utc file, so this column can be ignored
  • haslegs: A 0 or 1 setting used by Never Winter Nights for ranged feats. Only time this is 0 is if it's a turret.
  • hasarms: A 0 or 1 setting used by Never Winter Nights for ranged feats. Only time this is 0 is if it's a turret.
  • portrait: A default texture to use as a portrait. Always set to **** since this is determined by portraits.2da
  • footstepsound: Unused (always ****)
  • footstepvolume: probably unused (always 1)
  • sizecategory: An index to creaturesize.2da. This allows either a small bonus or penalty to Defense
  • armor_sound: Unused (always ****)
  • combat_sound: Unused (always ****)
  • helmet_scale_m: Unused (always ****)
  • helmet_scale_f: Unused (always ****)
  • perceptiondist: An index into ranges.2da. The ones normally used for creatures are 9 to 13
  • footsteptype: An index into footstepsounds.2da. This setting determines what sounds get played when the creature moves around, including whether the ground shakes, whether to mess with the pitch, and whether to overlay a rolling sound.
  • soundapptype: An index into appearancesndset.2da. For the most part, this just helps determine sounds to play when the creature is being hit and when they fall down.
  • headtrack: A 0 or 1 setting that determines whether the head tracks objects it's looking at.
  • head_arc_h: How far, in degrees, the head can move to track objects to the side.
  • head_arc_v: How far, in degrees, the head can move to track objects above or below.
  • headbone: Supposedly, this would be the name of the head bone in the model to use for the tracking. But it's empty all throughout the file and heads still track in-game...
  • hitdist: When lining up for combat animations, this distance is subtracted from the distance between you and the target before seeing if you're close enough to engage.
  • prefatckdist: This is the distance between you and your target for you to engage in combat.
  • groundtilt: A 0 or 1 setting that probably determines whether or not the character tilts with the ground
  • body_bag: An index to bodybag.2da, but this is set in the .utc file so this column is useless
  • freelookeffect: This is an index into videoeffects.2da and can be used to tint vision. Like T3 and HK.
  • cameraheightoffset: Camera offset when viewing the creature in the character screen. Is probably subtracted from the standard height of 1. 0.5 for T3, -0.26 for Zaalbar, **** for everything else
  • deathvfx: Reference to a row in visualeffects.2da to play a visual effect when the creature dies.
  • deathvfxnode: The name of a node in the model to use a the origin of the deathvfx.
  • fadedelayondeath: A delay in seconds before fading the model away. Default is blank, though it's 0 on some droids.
  • destroyobjectdelay: A delay in seconds before the object is destroyed. Default is blank, though it's 1 on some droids (I assume to allow the deathvfx to play out).
  • disableinjuredanim: A 0 or 1 setting that determines if the set of animations for an injured state are played or whether the character never acts injured. This is used on Darth Malak.
  • equipslotlocked: This can be used to lock inventory slots. This is done with an 11 digit binary number where each digit stands for one slot (1 disables the slot, 0 enables it). The number is then converted to the decimal system and entered here. Stoffe wrote a more detailed description here. As an additional note: 1979 is the number used to lock all slots (That's a 1 in each slot except for the unknown 7th slot)

 

 

 

appearancesndset.2da (K1/TSL)


appearancesndset.2da is tied to appearance.2da. It is used to determine some basic sounds used by creatures with this appearance.

  • label: Descriptive label
  • armortype: This determines what material is being used. This to tell weapons that hit the creature what material they're striking so they can play the appropriate sounds
  • weapon: This is an index to weaponsounds.2da and is used to determine what the creature is attacking with. This is strictly for melee use.
  • missingindex: Unused
  • looping: Unused
  • falldirt: What sound to play when the creature falls on dirt material.
  • fallhard: What sound to play when the creature falls on a hard material.
  • fallmetal: What sound to play when the creature falls on metal.
  • fallwater: What sound to play when the creature falls on water.

 

 

 

baseitems.2da (K1/TSL)

 

 

baseitems.2da specifies item templates that collect properties that are the same for a class of items. Those are then referenced by the specific items (.uti files)

  • name: A numeric value that is referenced by .uti files. This item will then get all the properties specified in this row.
  • label: Descriptive label
  • equipableslots: A hex value that determines which slot(s) this item will be equipped in
  • canrotateicon: Probably unused
  • modeltype: A 0 or 1 setting that is 1 for armor/clothing
  • itemclass: The base item class. I don't know where this is used.
  • genderspecific: A 0 or 1 setting that determines whether or not this item is gender specific (probably unused though)
  • partenvmap: A 0 or 1 setting that probably determines whether or not this item uses an envmap (only 1 for armor/clothing)
  • defaultmodel: The default model of this item class (I_Null for items that don't use models)
  • defaulticon: The default icon for this item class
  • container: A 0 or 1 setting that determines whether or not this is a container
  • weaponwield: A numeric setting that probably determines how this weapon is wielded (1 = Stun Baton, 2 = Single-bladed melee weapon, 3 = Double-bladed melee weapon, 4 = Pistol, 5 = Rifle, 6 = Heavy Rifle)
  • weapontype: A numeric setting that determines the weapon type (1 = melee weapon, 4 = ranged weapon)
  • damageflags:
  • weaponsize: Most likely the weapon size
  • rangedweapon: 1 for ranged weapons (including grenades)
  • maxattackrange: Probably the max. attack distance for ranged weapons (including grenades)
  • prefattackdist: Unknown, set to 20 for all blasters and 0.5 for everything else (including non-weapon items)
  • minrange:
  • maxrange:
  • bloodcolr:
  • numdice: Used to determine the damage of this weapon. KotORs fight system is based on DnD and thus used dice rolls to determine damage values. For each attack a certain amount of dices is rolled and their value added for the attack damage. This column specifies the amount of dices
  • dietoroll: The type of dice to roll for attacks. The dice will go from 1 to the specified number and every value inbetween has the same chance of appearing
  • critthreat:
  • crithitmult: Probably a multiplier for the attack damage of critical hits
  • basecost:
  • stacking:
  • itemmultiplier:
  • description: Probably unused
  • invsoundtype: A reference to inventorysnds.2da (not sure when those sounds are played though)
  • maxprops:
  • minprops:
  • propcolumn:
  • reqfeat0 - 4: A reference to feat.2da that determines the required feats to use this item
  • ac_enchant:
  • baseac:
  • dexbonus: The max. dexterity bonus when equipping this item. This is only used for armor and thus set to -1 for everything else
  • accheck: Probably unused and always set to 0
  • armorcheckpen: Probably unused and always set to 0
  • baseitemstatref: Probably unused and always set to ****
  • chargesstarting: Probably unused and always set to 0
  • rotateonground: A 0 or 1 setting that probably determines whether or not this item rotates on the ground. I don't know what effect this has though
  • tenthlbs:
  • weaponmattype: Probably a reference to weaponsounds.2da that determines the soundset for this weapon when attacking (for melee weapons)
  • ammunitiontype: A reference to ammunitiontypes.2da that determines the ammunition type for this (ranged) weapon
  • powereditem: A 0 or 1 setting that determines whether or not this item can be powered (i.e. has an activated and a deactivated state)
  • powerupsnd: The sound to play when this item is powered up
  • powerdownsnd: The sound to play when this item is powered down
  • poweredsnd: The sound to loop while this item is powered
  • itemtype:
  • bodyvar: For armor/clothing the body model to use (see appearance.2da.) I don't know if this is actually used or only as a reference for the editor of this file.
  • specfeat: A reference to feat.2da that determines the "Weapon specialization" feat for this item
  • focfeat: A reference to feat.2da that determines the "Weapon focus" feat for this item
  • droidorhuman: A setting that determines whether droids, humans or both can use this item (0 = both, 1 = human(oid), 2 = droids)
  • denysubrace: A hex value and probably a restriction that this item cannot be used by certain races
  • armortype: For armor/clothing the material of the armor (leather or armor) that determines certain sounds when wearing this item
  • storepanelsort: A numeric value that probably sorts this item type in a priority list. I think lower values will appear on top of the item list in stores.

 

 

 

bindablekeys.2da (K1/TSL)


bindablekeys.2da is important in that it tells which keys on the keyboard are allowed to be used in the keymapping or not.

  • keynamestrref: A reference to an entry in dialog.tlk to give an understandable name for the key. This is the name displayed in-game when you bind a key to a particular command.
  • keyname: A descriptive label to identify the key when browsing the .2da file
  • bindable: A 0 or 1 setting that determines if this key can be used as a control in-game

 

 

 

bodybag.2da (K1/TSL)


bodybag.2da determines the package the remains are in when you loot a body or a droid.

  • label: A descriptive label
  • name: A reference to an entry in the dialog.tlk file to name the package with the loot in it. All of the vanilla ones list 38151, which is "Remains".
  • appearance: A reference to a row in placeables.2da to spawn a model with the loot inside it
  • corpse: A 0 or 1 setting, though this is only used by the Krayt Dragon and Rancor, so I don't know the full importance of this setting

 

camerastyle.2da (K1/TSL)


camerastyle.2da is a fun one. :D What's not fun about utterly messing with the camera for a level or two?

Each row represents its own camera and these cameras can ONLY be used in a level's setup. Once a level has been loaded, the only way the camera could change is if it was changed outside of the game and the level loaded from an earlier save.

This can be set on a per-level basis by editing the CameraStyle field in the .are file.

  • name: For once, this is not a reference to an entry in the dialog.tlk but a descriptive label.
  • distance: How far behind the player, in meter. This has to be bigger than 0.0
  • pitch: The tilt of the camera in degrees, with 90 being straight forward and 0 straight down
  • height: How high above the player, in meters. This can probably not clip through the ground or ceiling
  • speed: Unknown measurement, the default is 20
  • tiltup: How much the camera can be tilted upwards, in degrees (I recommend not to change this since it causes very weird camera behavior. The default is 0 for K1 and 10 for TSL)
  • tiltdown: How much the camera can be tilted down, in degrees (I recommend not to change this since it causes very weird camera behavior. The default is 0 for K1 and -10 for TSL)
  • tiltspeed: Unknown measurement, the default is 30
  • rotation: Probably how far you can rotate the camera without rotating the character. When the limit is reached, the character will start turning
  • viewangle: Probably the vertical field of view
  • maxurnrate: Probably the maximum update rate for the camera per second
  • minurnrate: Probably the minimum update rate for the camera per second
  • fl_tiltspeed: Free-look/1st-person-view's tiltspeed (for TSL there are two columns labeled fl_xbox_tiltspeed and fl_pc_tiltspeed. Those are probably different settings for XBox and PC)
  • fl_rotatespeed: Free-look/1st-person-view's rotatespeed (for TSL there are two columns labeled fl_xbox_tiltspeed and fl_pc_tiltspeed. Those are probably different settings for XBox and PC)
  • fl_lookup: Free-look/1st-person-view's tiltup
  • fl_lookdown: Free-look/1st-person-view's tiltdown

 

 

 

chemicalcreate.2da (TSL)

 

 

chemicalcreate.2da is a file unique to TSL and determines the properties for creating items at a Lab Station. Each row corresponds to one item.

  • label: The tag of the item
  • skilllevel: The amount of skillpoints you need in the skill specified in base_skill to craft this item
  • group: The Lab Station tab the item appears in (0 = Health, 1 = Stimulants, 2 = Mines, 3 = Grenades, 5 is probably a remnant from something that was cut)
  • base_skill: A reference to skills.2da that determines the skill needed to craft this item

 

 

 

classes.2da (K1/TSL)


classes.2da is only partly useful to us. We can add classes if we want, but for some reason, if we try to add a class that can use the Force, the game crashes. So... we're stuck with regular mortals. :(

  • label: Descriptive label
  • name: A reference to an entry in the dialog.tlk file to name this class. Shows up a lot in the game.
  • plural: A reference to an entry in the dialog.tlk file to name a group of this class. Not used.
  • lower: A reference to an entry in the dialog.tlk file to name this class in all lower-case. Not used.
  • description: A reference to an entry in the dialog.tlk file to describe this class. Literally only shows up during the character generation.
  • icon: I can only assume icons were originally intended to be shown in-game, but these files do not exist in the texture packs, so I assume this isn't used.
  • hitdie: Used to determine how much health is gained per level. From my understanding of DnD, I assume a value of 10 means a 10-sided die, so you could gain 1-10 health. KotOR could just assume a perfect 10, though.
  • attackbonustable: The name of a .2da file to use for determining your natural bonus to hit things as you level up. The game has three such .2da files by default.
  • featstable: A three-character reference that matches up to appropriate ***_granted and ***_recom columns in the feat.2da file for determining freebie feats gained and the recommended order to give them when auto-leveling.
  • savingthrowtable: The name of a .2da file to use for determining your natural bonuses to your Fortitude, Reflex, and Will saving throws as you level up. The game has a separate .2da for each class.
  • skillstable: A three-character reference that matches up to appropriate ***_class and ***_reco columns in skills.2da for determining class skills and the recommended order to upgrade them when auto-leveling.
  • skillpointbase: How many skill points they get per-level, before factoring in the Intelligence modifier.
  • spellgaintable: A three-character reference that matches up to an appropriate *** column in classpowergain.2da for determining how many and often the class gets force powers at level-up.
  • spellknowntable: Unused and no idea what the 2da files would look like. In DnD, this probably operates like a "pool" of spells you'd know at a given level and you'd only be able to pick from these at level-up.
  • playerclass: A 0 or 1 setting that determines if a player could use this class.
  • spellcaster: A 0 or 1 setting that determines if a class can use the Force/magic. As mentioned, the game crashes if we try to make a new class that can do this stuff. :(
  • str: Recommended Strength for the Recommended button for this class.
  • dex: Recommended Dexterity for the Recommended button for this class.
  • con: Recommended Constitution for the Recommended button for this class.
  • wis: Recommended Wisdom for the Recommended button for this class.
  • int: Recommended Intelligence for the Recommended button for this class.
  • cha: Recommended Charisma for the Recommended button for this class.
  • primaryabil: Which ability/attribute is the most important for this class.
  • alignrestrict: Not used in KotOR, but was part of Never Winter Night's 9 alignments.
  • alignrstrcttype: Not used in KotOR, but was part of Never Winter Night's 9 alignments.
  • constant: Not used in scripts, so assumed to be hard-coded. It's all a bunch of soldiers anyways.

The next 20 columns are only available in K1 and are best left at 1 to avoid messing with the games math stuff.

  • forcedie: Similar to hitdie, except this helps determine how much force points you get at level-up. I haven't checked if this is a given constant increase or defines a range, though.
  • armorclasscolumn: A three-character reference that goes to a column in acbonus.2da for determining a natural defense bonus for this class by level.
  • featgain: A three-character reference that matches up to appropriate ***_reg and ***_bon columns in featgain.2da to determine how many feats you get at each level. The ***_bon columns aren't used, but in DnD, these are bonus feats you'd get at this level.

 

 

 

comptypes.2da (K1/TSL)


comptypes.2da stores the look of computer interface conversations. It is referenced by a .dlg file's ComputerType value which references a row number from comptypes.2da

  • label: description
  • computerbackground: the background texture to use without extension

 

 

 

footstepsounds.2da (K1/TSL)


footstepsounds.2da determines what sounds get played when a creature moves around, including whether the ground shakes, whether to mess with the pitch, and whether to overlay a rolling sound.

  • label: description
  • rumblepattern: related to ground shake, not sure how
  • rumblecutoff: related to ground shake, not sure how
  • pitchoffset: amount of pitch shift for the sounds. Positive numbers result in higher pitched sounds, negative numbers in lower pitch
  • rolling: for continuous, looping sounds like T3's rolling sound. Enter the filename without extension

The next 27 columns list the footstep sounds for 9 different materials (dirt, grass, stone, wood, water, carpet, metal, puddles, leaves) with three different columns each (e.g. dirt0, dirt1, dirt2). The material is chosen depending on the walkmesh the creature is walking on. Then one of the three sounds will play randomly. This is also the filename without extention.

I don't know what the Force1 to Force3 columns are used for.

 

 

 

globalcat.2da (K1/TSL)


globalcat.2da lists all global variables used by the game to store information across areas.

  • name: the global's name. You can reference it either by this name or by the row label in a script
  • type: The global's type: Boolean or Number. Booleans are either 0 or 1, Numbers are integers starting from 0.

 

 

 

heads.2da (K1/TSL)


heads.2da lists all the heads with model and textures. They are referenced by appearance.2da to link them with the rest of the apperance. Each row thus stands for one head.

  • head: head model and default texture name (is the same)
  • alttexture (TSL only):
  • headtexvvve: texture for extreme dark side affilation (stage 4)
  • headtexvve: dark side stage 3
  • headtexve: dark side stage 2
  • headtexe: dark side stage 1
  • headtexg: unused (set to ****)
  • headtexvg: unused (set to ****)

 

 

 

itemcreate.2da & itemcreatemira.2da (TSL)

 

 

itemcreate.2da is a file available only in TSL and determines all the information for crafting at a workbench. itemcreatemira.2da works exactly the same and this is used when crafting items while Mira is in your party. So always edit both of those files. Each row corresponds to one item and it's creation property. According to this post by Darkkender this is also a rare (or even unique) case where you can create NEW .2da files of the same type and can use them in the game.

  • label: tag of the item
  • skill: The amount of points you need to have in the skill defined in the base_skill column to craft this item
  • group: the workbench tab that this item appears in (0 = Armor Upgrades, 1 = Ranged Upgrades, 2 = Blade Upgrades, 3 = Lightsaber Upgrades, 4 = Misc. Upgrades)
  • level: The minimum required level to craft this item
  • alignment: A reference to iprp_aligngrp.2da that determines the required alignment to build this item
  • base_skill: A reference to skills.2da which determines the skill needed to craft this item
  • dunno: Probably unused, always set to 0
  • overridetag: According to RedHawke this is probably something needed for testing purposes. Set it to **** and it should be fine.

 

 

 

portraits.2da (K1/TSL)


portraits.2da has all the information for the portraits and other gui related information for both the PC and party members. Each row is thus for one character.

  • baseresref: default portrait texture (note: in K1 this also specifies the portrait for the party selection screen when the character is unavailable and the body shot of the NPC also seen on the party selection screen. The corresponding textures are named the same as the one listed here with an added 2 in the first and a 3 in the second case. I don't know if TSL uses a similar function.)
  • sex: gender (0 for male, 1 for female)
  • appearancenumber: references a row label from appearance.2da, thus linking this portrait to a certain appearance. (Is sometimes **** even for used portraits, I don't know why)
  • race: 5 for droids, 6 for humanoids (might be irrelevant?)
  • inanimatetype: probably unused (always ****)
  • plot: probably unused (always 0)
  • lowgore: probably unused (always ****)
  • apperance_s: alternate appearance.2da for the small sized player character of the same head (**** for non-player portraits)
  • appearance_l: alternate appearance.2da reference for the large sized player character of the same head (**** for non-player portraits)
  • forpc: 0 for NPCs (party members) and 1 for the PC (probably irrelevant?)
  • baseresrefe: stage 1 dark side texture (note: the additional functionality of baseresref in K1 is not available for the dark side textures, but the portrait itself also works on party members)
  • baseresrefve: stage 2 dark side texture
  • baseresrefvve: stage 3 dark side texture
  • baseresrefvvve: stage 4 dark side texture

 

 

 

regeneration.2da (K1)


regeneration.2da sets the amount of health and force regenerated both in and out of combat. Adding new rows won't do anything here.

TSL's regeneration.2da works completely different!

  • label: description
  • healthregen: the amount of health regenerated (probably points per second)
  • forceregen: the amount of force points regenerated (probably points per second)

 

 

 

subrace.2da (K1/TSL)


subrace.2da is a simple file that stores subraces. A creature can then be assigned a subrace in its .utc file. Subraces are also referenced by baseitems.2da to lock subraces from using certain item types.

  • label: description

 

 

 

upcrystals.2da (K1/TSL)


upcrystals.2da links the lightsaber items to their corresponding color crystal. Each row thus stands for one saber color.

  • label: description
  • template: name of the color crystal item
  • shortmdlvar: name of the short saber item (can be set to **** but the game will crash when the crystal from template is placed in a short saber)
  • longmdlvar: name of the standard lightsaber item (can be set to **** but the game will crash when the crystal from template is placed in a lightsaber)
  • doublemdlvar: name of the double bladed lightsaber item (can be set to **** but the game will crash when the crystal from template is placed in a double saber)

 

 

 

videoeffects.2da (K1/TSL)


videoeffects.2da stores settings on different video overlays (like security cameras) that can be applied by different means

  • label: description
  • enablesaturation: a boolean setting whether or not color is used
  • modulationred: multiplier for the red value of the RGB colors
  • modulationgreen: multiplier for the green value of the RGB colors
  • modulationblue: multiplier for the blue value of the RGB colors
  • saturation: a float from 0 to 1, setting the saturation. 0 is equal to 0 in enablesaturation

TSL has different columns for pc and xbox for modulationred to saturation. Just use the pc columns.

  • enablescannoise: a boolean setting whether or not scan lines are used
  • enableclairvoyance: (TSL only) a boolean to enable clairvoyance. I think this is a foggy effect on the edge of the screen also seen in K1's prerendered visions.
  • enableforcesight: (TSL only) a boolean to enable forcesight: Colored overlays for characters depending on their alignment
  • enableclairvoyancefull: (TSL only) a boolean to enable another type of clairvoyance. I don't know the difference when compared to enableclairvoyance
  • enablefury: (TSL only) the three fury effect overlays (1 to 3) or none (0)

 

 

 

Unused .2da files

This section will simply list files that are not used by the KotOR games. Many of these only exist in the KotOR 1 files and were removed for TSL.

  • actions.2da
  • areaeffects.2da
  • caarmorclass.2da
  • capart.2da
  • categories.2da
  • catype.2da
  • chargenclothes.2da

Changelog

2016-10-17:

  • Initial posting

2016-10-18:

  • Fixed error in hideequippeditems colum of animations.2da
  • Added some information to the tilt* columns in camerastyle.2da

2016-10-28:

  • Added baseitems.2da
  • Updated the tilt* columns in camerastyle.2da

2016-10-29

  • Added chemicalcreate.2da
  • Added itemcreate.2da and itemcreatemira.2da
  • Updated information on the equipslotlocked column in TSLs appearance.2da

2017-06-27

  • Added comptypes.2da
  • Added footstepsounds.2da
  • Added globalcat.2da
  • Added regeneration.2da (K1)
  • Added subrace.2da
  • Added videoeffects.2da

                    

  • Like 5
  • Light Side Points 1

Share this post


Link to post
Share on other sites

Nice one.

Haven't fully digged into everything but just mentioning that alienvo.2da is definitely easier to find alien VO in TSL, aside from the added benefit of being actually used ingame.

Share this post


Link to post
Share on other sites

If anyone is looking for information about how baseitems.2da and appearance.2da are tied together and what model and icon names the game expects, this is a useful post:

 

  • Light Side Points 1

Share this post


Link to post
Share on other sites

For appearance.2da it says this:

  • a = Underwear
  • b = Clothing
  • c = Armor Class 4 items (Anything with a base defense of 4 and a max Dexterity of 5)
  • d = Armor Class 5 items (Anything with a base defense of 5 and a max Dexterity of 4)
  • e = Armor Class 6 items (Anything with a base defense of 6 and a max Dexterity of 3)
  • f = Armor Class 7 items (Anything with a base defense of 7 and a max Dexterity of 2)
  • g = Armor Class 8 items (Anything with a base defense of 8 and a max Dexterity of 1)
  • h = Armor Class 9 items (Anything with a base defense of 9 and a max Dexterity of 0)
  • i = All robes
  • j = Both special varieties of robes available at the end of the Star Forge

Tho this is not necessarily true - the letter refers to the bodyvar column in baseitems.2da.

Change the letters in baseitems and you will mess up these equivalencies.

  • Like 1

Share this post


Link to post
Share on other sites
55 minutes ago, DiePutinDie said:

Is it possible to add new columns in appearance.2da in K1? 

If you mean columns with new model letters (eg. modelk, modell, ect), then no. Atleast for my attempts.

  • Sad 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.