Jump to content


Member Since 10 Aug 2010
Offline Last Active Today, 10:30 AM

#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%

#57262 Selkath with lightsabers

Posted by bead-v on 16 June 2017 - 10:49 PM

so you could reduce their size using this as an excuse.


Actually that's a very good idea. It always annoyed me that they look just like regular selkath and I have to use my imagination to see them as young. For me this is way more important than having them use lightsabers.

#57048 Kotor 2 story questions

Posted by bead-v on 08 June 2017 - 06:49 AM

Speaking of Goto's ship, this conversation, that I think was added by TSLRCM:


Does this make more sense to you than it appears to me? The Zhug lines sound like something that would have been said in the bounty hunter meeting at the start of NS, but here I'm stumped. I don't see why they would promise to scour the galaxy to bring the Exile to Goto's ship, when the Exile is already on Goto's ship, speaking to them. Also, Goto is nowhere to be seen. And what does that last line mean, when they open fire at you anyway afterwards?


I agree with JCarter, I think those lines were for testing purposes (or just for fun during testing). Though to me it seems that you were able to talk to the bounty hunters before initiating the Goto Meeting cutscene. The lines for the HK units are the same thing. In my version of Goto's Yacht, I've gotten rid of both those scenes.

#57011 Kotor 2 story questions

Posted by bead-v on 06 June 2017 - 11:29 PM

Now that I think of it, it might be as simple as that she wanted to sell the Exile to the Exchange for the bounty. If the Exile just met with Visquis, no bounty for Mira, so she was just inserting herself as an intermediary, thinking that if she captured the Exile and only she knew where she'd hidden him, she could dictate terms?


Still feels dumb as hell when you watch Visquis turn the lightning trap on her. But that may be hindsight bias, since we know Visquis had betrayed Goto, and Mira hadn't known that before that scene.


Well, that would make sense if there was no other way to sell the Exile to Goto – otherwise some other way would probably have been easier than walking into a place that can kill you if your suit gets breached. Also, whether Visquis works for Goto at this point or not is irrelevant, in both cases he'd want the Exile, so he'd do the same thing. Mira must have thought like you said to have gone to meet Visquis, but it justs seems very naive, which goes against Mira being otherwise portrayed as smart. Actually in LS, it's even worse because she actually warns the player that Visquis is setting up a trap. Going in like that regardless just seems stupid. It's just badly written, which is probably the result of the other Nar Shaddaa stuff being cut, but unfortunately that's what we have to work with.

#56990 End Credit Music: An Plea to Those Hoping to Resolve the Recent Issue

Posted by bead-v on 06 June 2017 - 08:21 AM

No matter how well the music is edited, it's going to sound abrupt if it changes in the middle of the beta testers or translators or whatever.


Well, it's easier to make a good mix if you can actually see what it's playing against :)


M4-78 is going to have KOTOR March, as previously discussed; for TSLRCM, in my proposal, I went with the Sith action theme


Sounds good! I'm hoping that's it then :) Any other ideas for the music can be considered for the separate mod that you suggested :)

#56966 Kotor 2 story questions

Posted by bead-v on 05 June 2017 - 08:57 AM

2. What was Mira's plan when she went to meet Visquis? What was she hoping to accomplish?


Had to think about that a lot for my Nar Shaddaa Rewrite mod (currently on hold since I'm working on modding tools).


I don't think I managed to come up with a good answer. For the light side scenario, I was changing it to the alternative scenario where the Exile and Mira both believe that Visquis holds Zez-Kai Ell. The Exile obviously has to go to save him, all Mira does is warn him of Visquis and make a deal to take them both to G0-T0 with "no pain, no fuss" after they're done in the JJT. Then I have Mira discover that Ell isn't being held by Visquis, so she follows the Exile into the JJT. But that's my interpretation, only the bold part is the original scenario that we have VOs for.


She would still do that for the DS scenario though, and I don't have a good answer to that either. Yet (hopefully).


But there's way more nonsense in that part of the story. Like, in the LS scenario, Hanharr will claim that he brought the Jedi to the JJT (like in DS), but he didn't do anything at all actually. It's stuff like that that made my go into making that mod, along with clearing the base for the GenoHaradan.