Jump to content


Member Since 10 Aug 2010
Offline Last Active Yesterday, 10:08 PM

#59692 KOTORmax

Posted by bead-v on 10 October 2017 - 07:48 AM

Would a tool like this be able to fix the data errors in the M4-78 modules that allow enemies to shoot you through the walls? (In the Environmental Zone specifically)


I never tinkered with that specifically so I have no idea how it actually works, but since we can definitely control everything in a KOTOR model with the new tools the answer should be 'yes'.

#59664 KOTORmax bug reporting thread

Posted by bead-v on 09 October 2017 - 06:36 AM

It's a probem with MDLedit, the same thing happens even if you don't pass it through KOTORmax. I've got a few ideas, gonna try them ASAP. Thank you both for the screens and the files.

#59645 KOTORmax

Posted by bead-v on 08 October 2017 - 10:48 PM

File Name: KOTORmax

File Submitter: bead-v

File Submitted: 09 Oct 2017

File Category: Modding Tools






KOTORmax is a plugin for 3ds Max and Gmax that allows importing and exporting of ascii model files for KOTOR and KOTOR2. KOTORmax is directly extended from NWmax by Joco.


How do I set it up?
Open the .zip archive, the instructions are in the readme file.


How do I use it?
Check for tutorials in the Tutorials Section. A lot of the basic functionality is exactly the same as with NWmax, so most of the tutorials should help you with using KOTORmax. As for the new functionality, it is now up to the community to create new tutorials for it.


KOTORmax was designed to be used with MDLedit and the new version of MDLOps by ndix UR. Using the ascii model files that it produces with an older version of MDLOps will cause data to be ignored in the best case and a crash in the worst.


What's different from NWmax?
– Support for all known properties of the Odyssey MDL Format. All NWN functionality that is irrelevant for the KOTOR games removed.
– Ambient texture (lightmap) import/export. Experimentally also vertex colors as well as texture0 and texture1 UV coordinate import/export.
– Support for bezier animation controllers.
– Lightsaber mesh object.
– New Anim Editor, Key Ops, Constraint Editor, Visibility Editor, Roomlink Editor and improved Anim Mapper.
– LYT and VIS file Import and Export.
– Game smoothing preview.
– Sanity check now adapated to KOTOR models.
... and much more!


Max crashed/froze/reported a weird error!
Describe your issue in the relevant thread and I will look into it. Please explain in detail exactly what you were doing when the error occurred. Also include any relevant files in your post.


A big thank you goes out to ndix UR, without whom KOTORmax wouldn't even exist. A big thanks also to Joco for allowing me to build on NWmax and release it as KOTORmax.
I would also like to thank the testers, both for their patience when I was dealing with very persistent bugs and for all the suggestions that helped make KOTORmax what it is now:
– DarthParametric
– JCarter426
– Quanon
– VarsityPuppet


Lastly I'd like to thank the KOTOR modding community, which makes taking the time to make such a tool worth it.






Click here to download this file

#59641 MDLedit

Posted by bead-v on 08 October 2017 - 10:06 PM

And since you mention KOTORmax, when and where will that be available?


As soon as it's approved :lol: I expected MDLedit to take a little longer before it's approved, I didn't take this time gap into account.

#59637 MDLedit

Posted by bead-v on 08 October 2017 - 09:15 PM

Posted Image


File Name: MDLedit

File Submitter: bead-v

File Submitted: 08 Oct 2017

File Category: Modding Tools


MDLedit is a (de)compiler for KOTOR and KOTOR2 model files.


Which version should I download?
There are two packages on the download page. They differ in whether the program uses Visual Styles or not. The difference is purely visual, they are completely equivalent in terms of functionality. The version in the mdledit_v0.0.0xp.zip package will work on Windows XP or newer as well as on MacOS through Wine, but it will look like crap. The version in the mdledit_v0.0.0.zip package will look better, but will only work on Windows Vista and up.


How do I set it up?
Open the .zip archive, extract the .exe and run it. If you want MDLedit to keep track of your option between sessions, create a blank mdledit.ini file in the same folder as your .exe.


How do I use it?
The program comes with a help documentation window accessible from the About menu, read that to learn how to use it. If something is not mentioned there please let me know in the relevant thread (link to be added) and I will explain the functionality and add the explanation to the help window for the next version.


MDLedit was designed to be used with KOTORmax and the new version of KotORBlender by ndix UR. Using the ascii model files that it produces with NWmax will cause data to be ignored in the best case and a crash in the worst.


The program crashed/froze/reported a weird error!
Describe your issue in the relevant thread and I will look into it. Attaching a .zip archive with the files that MDLedit was processing when the problem appeared is also very welcome.


A big thank you goes out to ndix UR, without whom MDLedit would have maybe half the functionality it has now.
I would also like to thank the testers, who also made a lot of great suggestions that made MDLedit that much better:
– DarthParametric
– JCarter426
– Quanon
– VarsityPuppet
– FairStrides


The program was built on the knowledge about the MDL format, which is the result of the work of many modders, including CChargin, Magnusll, JdNoa, ndix UR, DarthSapiens, VarsityPuppet, FairStrides, and others! Thank you for your efforts!


Lastly I'd like to thank the KOTOR modding community, which makes taking the time to make such a tool worth it.


Click here to download this file

#58930 How many new rows can the appearance file have?

Posted by bead-v on 31 August 2017 - 08:35 AM

That puts us over 16-bit, so assuming it's 32-bit or greater (and not something weird) then we're dealing with more than 65,000.


Puts us over 8-bit, right? :) So it's 16-bit or greater, which is indeed at least 65,000.

#58495 Fixing the Telos Polar Region

Posted by bead-v on 15 August 2017 - 02:41 PM

Here, you can see the obvious problem on both sides- This wouldn't be noticable if the initial camera angle was altered.


Agreed, the ground texture doesn't fit, and the pillar is problematic. I also don't like how obvious it makes the texture patterns. If I redid the camera myself I'd probably go for a completely different, more close-up approach. But moving the camera slightly, lowering it's starting position and raising the pitch should fix the bigger issues.

#58477 [WIP] Recruit Dark Side Juhani

Posted by bead-v on 14 August 2017 - 10:18 PM

However, I have a problem with that scene: I just don't get how the characters are actually spawned. The module is ebo_m40ad and I know that waypoints are used to spawn them as the wrong tag prevented Juhani's spawn. But I just can't find the script that's actually doing this. From what I can tell, there's no OnEnter script and while there is a trigger, it is only used to start the conversation and not to spawn the characters. If anyone has any ideas, I'd love to hear them as I need to check something in the spawn script.


An onEnter script can also be specified in the module.ifo – ebo_m40ad has, under Mod_OnModLoad, the script k_pebn_pophawk that spawns the NPCs.

#58243 GenoHaradan Legacy

Posted by bead-v on 09 August 2017 - 12:00 AM

Just find a line of similar text/VO length, take its lipsync and rename it.


I've done that a lot for random TSLRCM lines and no one noticed most of it yet :P


Sometimes I feel half the vanilla .lips are done this way :lol:

#58224 GenoHaradan Legacy

Posted by bead-v on 07 August 2017 - 10:11 PM

Isn't that a player's line?


Yup. Should probably stay that way.

#58196 Ebon Hawk Model Fixes

Posted by bead-v on 06 August 2017 - 08:44 PM

Added ndix UR's fix for the lightmap issue with the floor panels outside the cargo hold!

#58192 GenoHaradan Legacy

Posted by bead-v on 06 August 2017 - 10:13 AM

Or you could just have them re-record all of Batu's lines, they aren't that many and it would sound even better :)

#58089 Can't spawn placeables (But can spawn characters)?

Posted by bead-v on 31 July 2017 - 07:36 AM

1. Make sure the script even fires in the first place.
2. Make sure the location you entered is the correct one. Keep in mind that the Z coordinate is irrelevant for characters, they just snap to the walkmesh, but it's relevant for the placeables.
3. If it was a custom placeable, I'd also check if it spawned but it's invisible. This may not apply here, but if nothing else works, maybe try that as well.

#57982 Download:TSL Backdrop Improvements

Posted by bead-v on 23 July 2017 - 01:39 PM

The problem is that I can't just hex-edit the model to get from PER_Plnt01 to EBO_Per as their names don't have the same number of characters.


But that's what I was telling you in my first post, you can :lol:

You just need to make sure that you add a 00 byte (written as \0 below) after EBO_Per. So if the hex looks like this:
P E R _ P l n t 0 1 \0

.. and you change it to this:
E B O _ P e r \0 0 1 \0

.. it's fine. The game will only read the name until it encounters a 00 byte. Anything that comes after 00 is irrelevant. BUT, the field only has space for 32 characters, so the name has to be less than 32 characters long.


EDIT: Note, the 32 character limit doesn't apply to all strings. For example, object names and flare texture names cannot be made longer than they are, but they can be made shorter. The 32 character limit also holds for emitter strings (except chunkname is 16), the mesh bitmap and bitmap2 (lightmap) textures, event names, reference model names, model name, supermodel name, animation names, animroot names.

#57869 Character (Stat) Guide

Posted by bead-v on 17 July 2017 - 09:27 AM

This is a guide I started a few years back. I remember there were other things I wanted to add to it, but I don't remember what those things were anymore. It also doesn't seem like I'll be delving into this again any time soon, so I thought I'd just post it the way it is.


The stats are determined from four sources:
1) Base stats
2) Class
3) Attributes
4) Levelup


The character’s base stats [1] define the value of the stats without the application of the other sources. They do not change through levels; they remain static. They are defined in GFF files.


The character's class [2] determines how some of the character’s stats progress through levels without the player doing anything. They are defined in 2DA files.


The attributes [3] affect the character’s stats through levels and are affected by the player. Thus, the player can affect his character’s stats through attributes. The attributes are also defined in the GFF files, but they can be modified on level up.


Levelup [4] is the only way to affect some of the stats. The actual level does not matter.


What are characters for the game?


Characters are defined in so called .utc files. Each character has their own .utc file, which contains all information about this character: their name, appearance, base stats, class, equipment, powers, feats, skills ... However, the stats of the character are also modified by other files, namely the .2da files. These files are basically spreadsheets that define at what rate the stats of the characters change. The stats change at different rates for different characters, depending on their CLASS. These rates do not change during the course of the game, so the character class defines at what rates the character’s stats will change. The possible classes in TSL are:


- soldier – SLD
- scout – SCT
- scoundrel – SND
- tech specialist – TEC
- minion – MIN, not available for players


- expert droid – XPD
- combat droid – CBD


- jedi guardian – JGD
- jedi sentinel – JSN
- jedi consular – JCS
- jedi weapon master – JWM
- jedi watchman – JWA
- jedi master – JMA


- sith marauder – SMA
- sith assassin – SAS
- sith lord – SLD


However, there are still way to affect your stats during the course of the game. The way of doing this is via the attributes [3]. I will list them here just for reference, and only at the end of this tutorial will I describe fully what each of the attributes does specifically for the character.


Strength – STR
Dexterity – DEX
Constitution – CON
Intelligence – INT
Wisdom – WIS
Charisma – CHA


The attributes themselves are also a kind of stat. They have a base value [1], to which the player adds points every four levels during level up.

One thing to keep in mind is that the actual value of the attribute never matters. It’s always the modifier that you get out of it that matters. The conversion formula is the same for all attributes: a value of 8 translates to a modifier of -1, and for every 2 attribute points the modifier increases by 1. That is:

Modifier = (Attribute – 10) / 2


Thus, 12 points equal a modifier of +1.


Auto Balance


The game uses a system to automatically adjust the stats of enemies when they are spawned according to the player character. Exactly to what extent they are modified is defined in autobalance.2da. All values depend on the player level, which is determined from experience. This means that if you have enough experience for level 33, the game will consider that level even if you haven't levelled up yet.


List of stats

Vitality points
Force points
Fortitude saving throw
Reflex saving throw
Will saving throw
Skill points




The character's level is also a stat, though it is used mainly to calculate other stat's. Here is the formula.


Level = Level(Class I) + Level(Class II) + (PlayerLevel * levelmult(autobalance.2da) - 1) (only if mult > 0)


Vitality Points - VP


This is your health bar. The number is based on the “Base Hit Points” field in the .utc. This value is modified by autobalance. At levelup, you gain: 6-12 points depending on your class + CON.


VP = BaseHitPoints * (PlayerLevel * vpmult(autobalance.2da) - 1)(only if mult > 0) + HitDie(classes.2da)/Levelup + CON * Level


Mira’s max VP is 54. She is at level 6 when you meet her. When you level up, she is going to have 63 HP. She got +8 because she is a scout [2] and +1 because her CON is 12 [3].


Force Points - FP


This is the force bar. This stat works just like the health stat. “Max Force Points” is defined with the character [1]. On level up, you gain: 4-10 points depending on your class [2] + WIS [3].


FP = Max Force Points + ForceDie(classes.2da)/Levelup + WIS * Level


Defense - DEF


This characterizes how hard the character is to hit. This is basically evasion. The calculation of this stat is a bit more complicated. Like with the previous stats, there is one part of it that is defined with the character (in the .utc). This is called the Natural AC [1]. Most characters have the natural AC at 0. (G0-T0 has 2, for example.)


DEF = 10 + Natural AC [1] + Class AC (acbonus.2da) [2] + DEX [3] + (PlayerLevel * armormult(autobalance.2da) +2) (only if mult > 0)


Class AC depends on the class AND on level. The party members actually have feats that describe the class AC (Jedi: Jedi Sense, Prestige Sense, Greater Prestige Sense; Droids: Droid Upgrade; Soldiers: Mandalorian Courage), but it is not actually provided by these feats but by acbonus.2da. 


Originally, the plan was to make these class AC bonuses as actual feats, meaning that a level 1 feat would mean DEF+2, level 2 DEF+4 and level 3 DEF+6. This can be seen in that there exist two further levels of Atton’s feat and the droids’ feat. Their descriptions are still intact, but the effects are obsolete. The level 2 droid feat has actually been left with HK-47 even though it has no effect. This might be a leftover from K1.


The Handmaiden and the Disciple are currently the only ones who lack a feat describing their defense bonuses.


Attack - ATT


Attack is the opposite of DEF. When someone performs an attack, first the ATT of the attacker is compared to the DEF of the attackee, to see whether the attack HIT. Only after it has been established that the attack hit is the damage calculated. The ATT is not constant however. It does have a constant part that is added to the roll of a 20-sided die (D20). If the total ATT is greater than the DEF of the attackee, then the attack succeeds, otherwise it misses.


ATT = D20 + Level(Class I) + Level(Class II) + (PlayerLevel * tohitmult(autobalance.2da)) (only if mult > 0) + STR/DEX [3]


There are a few special cases though. If the roll of D20 is 1, then this is an AUTOMATIC MISS. This means that it misses even if the total ATT of the character is greater than the DEF of the attackee. Similarly, if the roll is 20, this is an AUTOMATIC HIT.


You may have noticed that ALL weapons have critical hit numbers in their descriptions, something like 20-20/x2. If the roll of D20 is in the critical hit scope of the weapon, and if the attack would hit (ATT > DEF), then the ATT is calculated again. This is the THREAT ROLL. If the ATT with the threat roll is greater than the opposing creature’s DEF, then the damage is doubled or even tripled in some cases, according to the weapon. Otherwise the damage is dealt normally.


The STR modifier is added if the attacker is using a melee weapon, the DEX modifier is added if the attacker is using a ranged weapon. With Finesse feats, the attacker can add the DEX modifier instead of the STR modifier if their DEX is higher than STR.


With two-handed weapons or two weapons one in each hand the situation is the following: each hand performs its own attack. The attacks are calculated in much the same way, except for the penalties: ATT -6 in the main hand, ATT -10 in the off hand. In the case of a balanced second weapon or a two-handed weapon, the main hand attack penalty is reduced by 2. The Two-Weapon Fighting feats further reduce the penalties.


Damage - DAM


Damage calculation.


DAM = WeaponDie * (PlayerLevel * damagemult(autobalance.2da) + 1) (only if mult > 0) + (1.5(if single weapon) * STR)(if melee)


The Saves


Saves characterize how good a character is at shrugging off effects. All hostile force powers can be “saved”, as well as effects such as poison, and possibly others, by the three saving throws: Fortitude, Reflex, Will.


Fortitude - FOR


With a high fortitude you are physically able to endure attacks.


FOR = Class dependent(cls_st_*.2da) + character bonus(*.utc) + (PlayerLevel * savemult) (only if mult > 0) + CON


Saves against:
- Stun, Stasis, Stasis Field
- Stun Droid, Disable Droid, Destroy Droid
- Wound, Choke, Kill
- Affliction
- Drain Life, Death Field
- Crush
- Critical Strike/Sniper Shot Stun Effect
- Power Attack/Power Blast Knockback Effect


Reflex - REF


With a high reflex you are quick enough to evade attacks.


REF = Class dependent(cls_st_*.2da) + character bonus(*.utc) + (PlayerLevel * savemult) (only if mult > 0) + DEX


Saves against:
- Push, Whirlwind, Wave


Will - WIL


With a high will your mind is powerful enough to shrug off attacks.


WIL = Class dependent(cls_st_*.2da) + character bonus(*.utc) + (PlayerLevel * savemult) (only if mult > 0) + WIS


Saves against:
- Slow
- Fear, Horror, Insanity
- Shock, Lightning, Storm
- Drain Force, Improved Drain Force, Master Drain Force
- Scream, Improved Scream, Master Scream
- Mind Trick, Confusion
- Beast Trick, Beast Confusion
- Droid Trick, Droid Confusion
- Crush Opposition


Skill points


The amount of skill points you get to spend on your skills when you level up.


The amount is: skillpointbase(classes.2da) + INT (Any bonuses to Intelligence from items are not taken into account.)




Computer use = base(*.utc)+ INT + LEVELUP
Demolitions = base(*.utc) + INT + LEVELUP
Stealth = base(*.utc) + DEX + LEVELUP
Awareness = base(*.utc) + WIS + LEVELUP
Persuade = base(*.utc) + CHA + LEVELUP
Repair = base(*.utc) + INT + LEVELUP
Security = base(*.utc) + INT + LEVELUP
Treat Injury = base(*.utc) + WIS + LEVELUP




Attributes can be modified on every fourth level (check!), no matter what the character's class is. They affect a lot of the stats described above. I will show a list below, which

shows what each attribute is good for.



Adds to ATT of characters with melee weapons. Improves POWER ATTACK's KICKBACK and CRITICAL STRIKE's STUN.
Adds to DAMAGE of characters with melee weapons. (When wielding a single one-handed weapon, a character's Strength bonus to damage is 50% greater!)



Adds to DEF.
Adds to ATT of characters with ranged weapons. Improves POWER BLAST's KICKBACK and SNIPER SHOT's STUN.
Adds to STEALTH.
Adds to REF.



Adds to FOR.
Adds to VP.
Determines IMPLANT.



Adds to number of skill points to be distributed on each level-up.



Adds to WIL.
Adds to FP.



Adds to the PERSUADE skill.
Reduces ALIGNMENT PENALTY for force powers.
Determines POTENCY of force powers.


Lighsaber Forms


Form I - Shii Cho - Determination

Attack Modifier: +1
Defense: +3
Defense vs. Current Target: -3


Form II - Makashi - Contention

Attack Modifier: +3 (vs Lighstaber)
Damage: +3
Blaster Bolt Deflection: -5
Saves vs. Force Powers: +2


Form III - Soresu - Resilience

Defense vs. Current Target: +2
Blaster Bolt Deflection: +4
Weapon Threat Range: -1


Form IV - Ataru - Aggression

Defense: -2
Defense vs. Current Target: +5
Blaster Bolt Deflection: -4
Weapon Threat Range: +1


Form V -  Shien - Perseverance

Attack Modifier: +2
Defense vs. Current Target: -5
Blaster Bolt Deflection: +2
Critical Multiplier: +1


Form VI - Niman - Moderation

Attack Modifier: +1
Defense: +1
Blaster Bolt Deflection: +1
Saves vs. Force Powers: +1


Form VII - Juyo - Ferocity

Defense: -4
Defense vs. Current Target: +2
Saves vs. Force Powers: -4
Attacks per Round: +1
Critical Hit Attack Modifier: +4


Force Forms


Force Channel

FP Regeneration: +50% (non-combat)
Force Power Damage: +3
Saves vs. Force Powers: +2


Force Affinity

FP regenerate during combat


Force Potency

Force Power Damage: + 30%
FP Cost: + 20%


Force Mastery

Force Power Duration: +50%
Opponents' Saves vs Force Powers: -2
Saves vs Force Powers: -4
FP Cost: +20%