blinkyzero

Members
  • Content Count

    30
  • Joined

  • Last visited

  • Days Won

    5

blinkyzero last won the day on July 4 2017

blinkyzero had the most liked content!

Community Reputation

15 Jedi Padawan

3 Followers

About blinkyzero

  • Rank
    Jedi Apprentice

Recent Profile Visitors

4,423 profile views
  1. Hi Salk, just saw this thread. You're correct -- Bioware never really added functionality for those NPC scripts. There's a bunch of places in k_inc_generic and k_inc_gensupport where you can clearly see they intended to, but apparently never got around to it. Adding support for them isn't too hard, though. Just involves a lot of hooking into GN_DetermineCombatRound() and its myriad associated functions. I've got a Passive script working now in my Enemy Enhancer mod that can be selected and used just like any other. The Ranged and Melee ones shouldn't be hard, either...I just haven't had any time this week to fool around with it. :-(
  2. Yup, it could always be an optional feature of some sort. I'll see what I can do.
  3. Yeah, I'm a perfectionist though, heh. But you're probably right. I did just fix another irritating bug with the base game -- the tendency of enemies who have more than one medpac in their inventory to use the second one right after the first even if they're at full health. There was no check in place to prevent the healing subroutine from filling up the action queue with medpac usages.
  4. Probably. The developers used the talent-finding functions a lot in the Force power combo scripting, and I've already discovered that at least one of those functions has bugs. It wouldn't surprise me at all to find that others do as well -- and that the original KotOR script writers just assumed they worked properly when this wasn't in fact the case. If you browse through the NWN Lexicon database (http://www.nwnlexicon.com/), it's not hard to find a lot of little quirks that the engine never did get patched. Honestly at this point I'm thinking of just rewriting the entire DetermineCombatRound() system and its associated functions. The original is a sloppy mess, and introducing new AI features into it (or fixing design decisions/bugs within it) is difficult because of how poorly the thing was thought out and executed in the first place.
  5. I'm not familiar with that mod, but my guess would be probably not, as I expect it works by increasing the damage multiplier in difficultyopt.2da. The Enhancer makes a bunch of changes to that .2da in order to do its work, changes that the TSLPatcher can't reconcile. That said, it would be a pretty easy task to combine them, and I'd be happy to make a version that also has increased enemy damage.
  6. Hmm, good ideas! Most of this is very doable. It would be a pretty simple matter to get party members who have Force Speed to use it when the active party member does so out of combat. Maybe the best quality-of-life change we can make here is to simply have Force Speed affect all members of the party while out of combat (and wipe the effects immediately from non-Jedi when combat begins). HK-47 not using his Power Shot is in fact a BioWare bug and one which I've fixed in this mod. As for enemy combat feat selection, that can also be improved, for sure. The vanilla system is downright stupid -- there's a set list of pre-determined combos that enemies can use, and the AI just randomly picks an available one (or a generic attack). I don't like these combos at all, since I think it's better to have enemies weigh their options before each individual attack, and I was planning on reworking the system. This will also affect party members, of course. Hmm, not sure something like a tooltip is possible. I could have pre-buffing trigger a descriptive dialogue pop-up of some kind -- not a full conversation that stops the action, just one of those windows you get sometimes in the corner of the screen to tell you stuff. That said, enemies can't tell what you've got pre-buffed, so why should you be able to? Party AI will definitely be improved. I myself find being able to turn it off completely now to be wonderful, but I'm a micromanager sort of person I suppose.
  7. Yeah, I'm actually not a huge fan of it myself either, but it'll be easy to turn on and off (and you're right, many people do like it, which is why I figured it'd be a good inclusion).
  8. Done. Also, think I might change the highest level of difficulty a bit. I got the artificial level-up system working fine (KotOR1 has no way of forcing an enemy to level up so you have to fake it), but it's sort of goofy. You end up with a lot of enemies that are significantly more powerful but don't grant any additional reward for defeating them (which is one of my problems with the lame damage multiplier of the default difficulty system). You can't change enemy Encounter Ratings on the fly in scripts, unfortunately, and though I suppose I could calculate the difference between the old level/new artificial level and award XP accordingly when enemies die, I don't really want to, since it's sort of clunky to do so and would also result in that pesky XP inflation -- always a problem in a game where the level cap is more or less hardcoded (and I'd rather not just make it harder to level; that's beyond the scope of this project). Instead, I recalled a feature of some Baldur's Gate 2 mods that I love: fast buffing. (I think the NWN series had this at some point too? It's been a long time.) Essentially the idea is that enemies capable of buffing themselves with something do it instantly at the start of combat to simulate the sort of pre-buffing that players usually engage in. Seems to me that would be a fair difficulty increase for KotOR players -- running up against pre-stimmed, pre-shielded, pre-Force buffed enemies. I also think I'll split the improved enemy feats off into a separate, complementary mod designed to work with the Enhancer, but alone if need be. The reason for this is that I'm finding the overwhelming majority of enemies in the game are either Minions or Soldiers (or Jedi Guardians, later on). There's very few Scouts or Scoundrels, which is disappointing, since those classes have some really nasty feats (Sneak Attack is absolutely brutal to have used against you). You can't change an enemy's class via scripting, unfortunately, and though I could fake it by assigning feats to them as though they were of a different class, it's not particularly elegant. I'd rather go through each module and do an overhaul of the UTCs themselves, changing classes and whatnot manually. The only concern there is with mod compatibility, but it's a minor issue -- folks could just go with another mod's module file in the case of a conflict. All they'd lose would be some relatively minor tweaks to stats and feats for enemies in that area. Additional observations: I got through Taris on a test run so far and no issues. Squishy party members definitely need to be watched out for now -- poor Mission keeps getting absolutely rekt, since most of the enemies make a beeline for her. I find myself using tactics I've never bothered with before, like stuns, slows, and mines, just to keep them off her. Also enemies with grenades are a minor nightmare, especially if a large group all lucked out and got assigned some -- they're smart enough now to toss them all in at the same time and just devastate you.
  9. Brief update because I found some time to work on this again today and like keeping a written record of what I've done, lest I forget and do something twice. :3 I setup a few additional difficulty levels and nullified the damage decrease/increase of the old system. Now difficulties are just settings for which Enemy Enhancer features you want to use. The Impossible difficulty is for true masochists -- not only does it give all of the bonuses of the difficulties below it, it also boosts an enemy's stats (and available feats) as though they are 2 levels higher than their current level. (Maybe I should make it a random number of levels, like 0-3?) * Easy: [X] Party AI Improvements [ ] Enemy AI Improvements [ ] Enemy Stat Enhancements [ ] Enemy Equipment Bonuses [ ] Enemy Level Up Bonuses * Normal: [X] Party AI Improvements [X] Enemy AI Improvements [ ] Enemy Stat Enhancements [ ] Enemy Equipment Bonuses [ ] Enemy Level Up Bonuses * Difficult: [X] Party AI Improvements [X] Enemy AI Improvements [X] Enemy Stat Enhancements [ ] Enemy Equipment Bonuses [ ] Enemy Level Up Bonuses * Very Difficult: [X] Party AI Improvements [X] Enemy AI Improvements [X] Enemy Stat Enhancements [X] Enemy Equipment Bonuses [ ] Enemy Level Up Bonuses * Impossible: [X] Party AI Improvements [X] Enemy AI Improvements [X] Enemy Stat Enhancements [X] Enemy Equipment Bonuses [X] Enemy Level Up Bonuses
  10. Oops, yeah -- I didn't even notice Salk was checking the booleans the other way. JCarter's definitely right. Use the method he described.
  11. Hi Salk -- I was poking around today, trying to see if anyone had looked into this question at all since last year. No joy, looks like. However, I think that in k_inc_generic the developers (mostly) documented the local numbers they ended up using. Here's what we've got there: //LOCAL BOOLEANS RANGE FROM 0 to 96 int AMBIENT_PRESENCE_DAY_ONLY = 1; //POSSIBLE CUT int AMBIENT_PRESENCE_NIGHT_ONLY = 2; //POSSIBLE CUT int AMBIENT_PRESENCE_ALWAYS_PRESENT = 3; int SW_FLAG_EVENT_ON_PERCEPTION = 20; int SW_FLAG_EVENT_ON_ATTACKED = 21; int SW_FLAG_EVENT_ON_DAMAGED = 22; int SW_FLAG_EVENT_ON_FORCE_AFFECTED = 23; int SW_FLAG_EVENT_ON_DISTURBED = 24; int SW_FLAG_EVENT_ON_COMBAT_ROUND_END = 25; int SW_FLAG_EVENT_ON_DIALOGUE = 26; int SW_FLAG_EVENT_ON_DEATH = 27; int SW_FLAG_EVENT_ON_HEARTBEAT = 28; //int SW_FLAG_AMBIENT_ANIMATIONS = 29; located in k_inc_walkways //int SW_FLAG_AMBIENT_ANIMATIONS_MOBILE = 30; located in k_inc_walkways int SW_FLAG_FAST_BUFF = 31; //POSSIBLE CUT int SW_FLAG_ASC_IS_BUSY = 32; //POSSIBLE CUT int SW_FLAG_ASC_AGGRESSIVE_MODE = 33; //POSSIBLE CUT int SW_FLAG_AMBIENT_DAY_ONLY = 40; //POSSIBLE CUT int SW_FLAG_AMBIENT_NIGHT_ONLY = 43; //POSSIBLE CUT int SW_FLAG_EVENT_ON_SPELL_CAST_AT = 44; int SW_FLAG_EVENT_ON_BLOCKED = 45; int SW_FLAG_ON_DIALOGUE_COMPUTER = 48; int SW_FLAG_FORMATION_POSITION_0 = 49; //POSSIBLE CUT int SW_FLAG_FORMATION_POSITION_1 = 50; //POSSIBLE CUT int SW_FLAG_FORMATION_POSITION_2 = 51; //POSSIBLE CUT int SW_FLAG_FORMATION_POSITION_3 = 52; //POSSIBLE CUT int SW_FLAG_FORMATION_POSITION_4 = 53; //POSSIBLE CUT int SW_FLAG_FORMATION_POSITION_5 = 54; //POSSIBLE CUT int SW_FLAG_FORMATION_POSITION_6 = 55; //POSSIBLE CUT int SW_FLAG_FORMATION_POSITION_7 = 56; //POSSIBLE CUT int SW_FLAG_FORMATION_POSITION_8 = 57; //POSSIBLE CUT int SW_FLAG_FORMATION_POSITION_9 = 58; //POSSIBLE CUT //int SW_FLAG_TARGET_FRIEND = 59; Located in k_inc_gensupport int SW_FLAG_COMMONER_BEHAVIOR = 60; int SW_FLAG_SPECTATOR_STATE = 61; int SW_FLAG_AI_OFF = 62; int SW_CANDEROUS_COMBAT_REGEN = 63; int SW_FLAG_BOSS_AI = 64; int SW_FLAG_SHIELD_USED = 65; int SW_FLAG_EVENT_ON_DIALOGUE_END = 66; int SW_FLAG_RESISTANCES_APPLIED = 67; int SW_FLAG_EVENT_DIALOGUE_END = 68; //User defined event //This flag is set when the creature percieves a hostile for the first time. //Used to eliminate the delay a creature puts on his perception event when first seeing a hostile. int SW_FLAG_STATE_AGITATED = 69; int SW_FLAG_MALAK_AI_ON = 70; int SW_FLAG_DYNAMIC_COMBAT_ZONE = 71; int SW_FLAG_EVENT_ON_DIALOGUE_INTERRUPT = 72; I'm pretty sure those formation flags from 49 to 58 never got used, so they could very well be fine to mess with.
  12. I'm not sure offhand, but the group healing really isn't difficult anyway. It's a simple matter of cycling through nearby enemies and applying a heal effect to them.
  13. Right, yeah, resurrecting the enemies isn't really feasible. It can be done, but it's not really worth the headache. Instead I just rewrote the function that governs the recovery stim to heal the enemy and all of his nearby buddies, which the item also does for the player and the party when you use it. Sort of an enemy group heal.