bead-v

Premium Member
  • Content Count

    589
  • Joined

  • Last visited

  • Days Won

    18

Everything posted by bead-v

  1. Anyone seen Tyvokka lately?

    1. Tyvokka

      Tyvokka

      Generally yes, try to keep this place going and make sure we have the funds to host all this stuff. 100TBs of traffic this last month :)

    2. LDR

      LDR

      I bet Tyvokka could make a killer KotOR mod if he ever chose to do so. :P

    3. jc2

      jc2

      I second LDR's comment! Thanks for keeping the site alive Tyvokka.

    4. Show next comments  36 more
  2. Sometimes I feel half the vanilla .lips are done this way
  3. Yup. Should probably stay that way.
  4. Added ndix UR's fix for the lightmap issue with the floor panels outside the cargo hold!
  5. Or you could just have them re-record all of Batu's lines, they aren't that many and it would sound even better
  6. 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.
  7. The kotor script doesn't really have a bool data type, it just uses int for it, but still, it's good to think of it separately, having either the value 'true' or 'false'. Since you want the if() to pass if the boolean is false, it's best to write: if ( !GetLocalBoolean(OBJECT_SELF, 10) ) { ... } Or if you only want it to pass if it's true: if ( GetLocalBoolean(OBJECT_SELF, 10) ) { ... } For the same reason, writing this SetLocalBoolean(OBJECT_SELF, 10, TRUE); instead of this SetLocalBoolean(OBJECT_SELF, 10, 1); is better. Logically it's exactly equivalent, TRUE is defined as 1 in nwscript.nss. Using TRUE and FALSE will just help you keep the Boolean and Number functions apart in your mind, and it's more readable when you or somebody else reads the code (after a while). Also, I'm not sure, but Get...Boolean() may not return 1 for when it's true, so you could get in trouble writing GetLocalBoolean() == 1 or GetLocalBoolean() == TRUE. Just keep in mind that Get...Boolean() already returns the true/false value, you don't need to == it.
  8. Character Stat Guide has the answer. (and there I was thinking nobody would need it)
  9. But that's what I was telling you in my first post, you can 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.
  10. Considering the second quote, I don't get the first one If Trench updates both, then your new model should be fine even if it references the other texture, no? So, in the end, you've decided not to edit the model at all, you'll just add an alpha channel to the texture? (This makes the most to me as well, if I understand the issue correctly.)
  11. Well, you could hex-edit that you just need to make sure that the texture name is less than 32 characters, and that there's a 00 byte after the last character.
  12. You need to use nwmax.exe to run gmax instead of gmax.exe. That'll make it actually write out the mdl. You'll probably run into issues after that though...
  13. 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: Non-Jedi - soldier – SLD - scout – SCT - scoundrel – SND - tech specialist – TEC - minion – MIN, not available for players Droid - expert droid – XPD - combat droid – CBD Jedi - jedi guardian – JGD - jedi sentinel – JSN - jedi consular – JCS - jedi weapon master – JWM - jedi watchman – JWA - jedi master – JMA Sith - 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 Attack Defense Damage Attributes Skill points Level 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.) Skills 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 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. Strength 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!) Dexterity 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. Constitution Adds to FOR. Adds to VP. Determines IMPLANT. Intelligence Adds to COMPUTER USE, DEMOLITIONS, REPAIR and SECURITY. Adds to number of skill points to be distributed on each level-up. Wisdom Adds to AWARENESS and TREAT INJURY. Adds to WIL. Adds to FP. Charisma 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%
  14. Found some better notes: Level = Level(Class I) + Level(Class II) + (PlayerLevel * levelmult(autobalance.2da) - 1) (only if mult > 0) VP = BaseHitPoints * (PlayerLevel * vpmult(autobalance.2da) - 1)(only if mult > 0) + HitDie(classes.2da)/Levelup + CON * Level FP = Max Force Points + ForceDie(classes.2da)/Levelup + WIS * Level DEF = 10 + Natural AC + Class AC (acbonus.2da) + DEX + (PlayerLevel * armormult(autobalance.2da) + 2) (only if mult > 0) ATT = D20 + Level(Class I) + Level(Class II) + (PlayerLevel * tohitmult(autobalance.2da)) (only if mult > 0) + STR/DEX DAM = WeaponDie * (PlayerLevel * damagemult(autobalance.2da) + 1) (only if mult > 0) + (1.5(if single weapon) * STR)(if melee) FOR = Class dependent(cls_st_*.2da) + character bonus(*.utc) + (PlayerLevel * savemult) (only if mult > 0) + CON REF = Class dependent(cls_st_*.2da) + character bonus(*.utc) + (PlayerLevel * savemult) (only if mult > 0) + DEX WIL = Class dependent(cls_st_*.2da) + character bonus(*.utc) + (PlayerLevel * savemult) (only if mult > 0) + WIS This is from a file that was to become a guide, though I never finished it This should be more accurate. And FairStrides, thought about your 1. again, I think I isolated the values that those multipliers should produce, then I just reversed the process and noticed it comes close to the player level, which was the crucial idea I needed. But I had all the other calculations in place as well, so it wasn't too hard getting those values, apparently. EDIT: One more thing about PlayerLevel:
  15. 1. I was trying to recalculate all the calculations in the combat that the game does, this was just a part of it. But I think I didn't deal with the whole thing more than a month or two. I remember it was a bit frustrating in the beginning, but I must have gotten the right idea early on.. or read it somewhere, honestly I don't remember. 2. Multiplier Set in the .utc
  16. Here we go: enemy_level = rounddown(player_level * levelmult) enemy_hp_base = rounddown(player_level * vpmult) - 1 enemy_attack_mod = rounddown(player_level * tohitmult) enemy_ac = rounddown(player_level * armormult) + 2 enemy_save_mod = rounddown(player_level * savemult) enemy_damage = rounddown(player_level * damagemult + 1) I don't seem to have figured out what crmod does though. As far as I can remember, those calculation gave the right results, but you should obviously check those for yourself.
  17. I'm pretty sure all the data in autobalance.2da made sense to me a few years ago when I was playing with the combat mechanics. If I find some notes from that I'll share them with you.
  18. Have just a little more patience, we seem to be on the right track
  19. Sorry, my post was intended for Kexikus. 851nih53.mdl and its .mdx need to be modified by removing the aabb node, so unless you've dealt with this before you should wait until Kex fixes it.
  20. DarthParametric has found a solution, which is to get rid of the walkmesh. I can confirm for my own installation, and I've been trying to find the exact reason why this happens. It's not the name, or the position in the model, or the fact that it has an empty animation node, or that it has surfaces IDs 64 instead of 7, or that it had render on, .... still trying things. But in terms of getting it to work, you can just delete the walkmesh, since that model doesn't really need it anyway.
  21. Have you tried making 851nih02 (which contains the flame and smoke emitters) visible from 851nih53 and vice versa?
  22. So if you remove 851nih.lyt and 851nih.vis from your override, the fires are back?
  23. What modules are foggy in K2?

    1. Kexikus

      Kexikus

      Thank you so much bead-v! I had tons of problems with my custom models receiving fog when they shouldn't. I'll update that mod ASAP :)

    2. bead-v

      bead-v

      @Kexikus: Awesome, glad it helped! :)

    3. bead-v
    4. Show next comments  36 more