Jump to content

jmerry

Modders
  • Posts

    1,359
  • Joined

  • Last visited

Posts posted by jmerry

  1. 8 hours ago, Bubb said:

    The opcode appears to function, it applies res2 if an item with res1 is currently equipped. I'll have to test your setup, though -- why is putting op233 on the ITM itself not a viable option?

    Here's the bug you get with the "while equipped" proficiency effect, as it is in the current (2.6) unmodded game. Dual-class while the Black Blade is equipped, and the character permanently gains grand mastery in long swords. It's difficult to exploit in the standard campaign because of how late the Black Blade scroll becomes available, but it's quite the bug.

    Lesser "while equipped" proficiency effects are also subject to getting upgraded by level-ups. If, for example, you have a warrior with an item that grants dagger proficiency while equipped, they can then take dagger specialization at a level-up, remove the item, and keep the specialization permanently.

    So we need something trickier for the Black Blade, and can then recommend the same for any mod-added weapon that grants a proficiency. If it fixes these bugs, anyway.

  2. If that neutral character walks into the Cloudkill, they're already getting mad at you unless they're fully immune (for example, through poison immunity). The damage opcode is always considered an attack, regardless of the amount dealt. And really, if you're crazy enough to throw a Cloudkill around on the city streets or something, you deserve the reputation penalties. And the law coming after you.

    If you want to throw down battlefield effects in populated areas, you use spells like Grease, Stinking Cloud, or Web. Those aren't flagged as hostile, and their effects don't automatically count as attacks if successful.

  3. New-style proficiencies are effects attached to the creature. Old-style proficiencies are fields in the creature file itself. Just go to the edit tab on it and scroll down past the resistances. You'll see a bunch of entries like

    Large sword proficiency . . . . . . Active class: 0, Original class: 0

    Very easy to spot, because they take up a lot of space with their text.

    Edit those to change the numbers. In your case, you'd set the active class value for "Blunt proficiency" to zero and the active class value for "Spiked proficiency" to 3

  4. Probably not without changing the weapons themselves substantially, and that would cause its own issues. I know there are some mods which give certain weapons abilities to transform themselves; you could have both a melee-only version of the dagger and a version with both attacks, with an ability to transform between them. Then you give the two items different usability flags and you're set.

    There would be some slight issues; a character that could use only the melee-only version wouldn't be able to equip the other one to transform it back. You'd need someone else in the party to do that for you. Still, I think it does most of what you're looking for.

  5. That's from the "temple cures work better" component. Copy SPPR713 (Greater Restoration) to J8#GRNF, delete the opcode 93 fatigue effect.

    As the base spell exists in standard BGEE, this should be fine. I don't see why that would go wrong other than a glitch of some kind. If it's in the store (replacing SPPR713), then at least some of the component was installed successfully. And even if a mod deleted the spell from the game entirely somehow, that would already have broken the store before my component got there.

    Restoration being in that particular temple to be replaced - that's mod influence. Or possibly SoD. The standard pre-SoD BGEE temples don't offer either lesser restoration or greater restoration at all, so the component would only replace their versions of Dispel Magic.

    This component is identical across all versions of my mod, going back even before my first release. Here's the code:

    Spoiler

    BEGIN @15000 DESIGNATED 150
    GROUP @2
    /* INCLUDE ~jtweaks/resource/functions.tph~ (New function ALTER_STORE_CURE needed) */
        COPY_EXISTING ~SPPR303.spl~ ~override/J8#TMDIS.SPL~
            LPF ALTER_SPELL_HEADER INT_VAR header_type=1 target=1 projectile=1 END
            LPF ALTER_SPELL_EFFECT INT_VAR match_opcode=58 parameter1=0 END
        BUT_ONLY // Single-target dispel, no level check
        COPY_EXISTING ~SPPR417.spl~ ~override/J8#LRNF.SPL~
            LPF DELETE_EFFECT INT_VAR match_opcode=93 END
        BUT_ONLY // Lesser restoration without fatigue
        COPY_EXISTING ~SPPR713.spl~ ~override/J8#GRNF.SPL~
            LPF DELETE_EFFECT INT_VAR match_opcode=93 END
        BUT_ONLY // Greater restoration without fatigue
        COPY_EXISTING_REGEXP GLOB ~^.+\.STO$~ ~override~
            LPF ALTER_STORE_CURE STR_VAR match_resref=SPPR303 resref=J8#TMDIS END
            LPF ALTER_STORE_CURE STR_VAR match_resref=SPPR417 resref=J8#LRNF END
            LPF ALTER_STORE_CURE STR_VAR match_resref=SPPR713 resref=J8#GRNF END
        BUT_ONLY // Replace Dispel Magic, Lesser Restoration, Greater Restoration.
     

    Reinstalling that component is about all I can think of here.

  6. First, what's this about? That "hostile" flag does two things that I'm aware of: anything with it that hits a creature activates the "attacked by" script trigger, and anything without it bypasses level/school/sectype protections when applied to the caster. This lack of a "hostile" flag is why there are specific spell protections on stuff that provides protection to a class of spells. Demiliches get specific protection against Incendiary Cloud on their item which already provides immunity to level 8 spells, because otherwise a cloud they cast themselves could hurt them. Change the spell to be hostile, and that effect isn't needed anymore.

    A lack of a "hostile" flag can also allow for some very cheesy tricks based on the other effect here. For example, the Wand of Paralyzation's ability isn't currently flagged hostile. In my speedrun, I had my character's ferret familiar equip such a wand, walk into Sarevok's sight, and start using the wand. He saves? No need to do anything, that wasn't an attack. He fails his save? That was an attack, so now he goes hostile ... but he's also stunned, so the summoned monsters beat him to death in complete safety.

    As a general rule here, I'd say that if the primary effect would register as an attack and cause neutral NPCs to go hostile immediately, the spell/ability should be flagged as hostile. Magic Missile should be considered a hostile spell, even if a mage with Shield up absorbs it completely. Single-target spells and effects that you want to hit enemies with should also be considered hostile, even if their effect wouldn''t do it on its own. Spells with party-friendly projectiles don't really matter here; the issues we care about only come up when the spell hits the caster or a neutral/friendly NPC. They might still be worth changing for consistency; I don't think it hurts to have just about anything that only targets enemies flagged as hostile.

    One specific thing to note: charm spells/abilities need to lack the "hostile" flag. With the flag, they break themselves immediately.

    I've gone through the level 1 through 5 mage spells available to players in BGEE comprehensively.

    Spells that aren't hostile but should be:

    Mage 1: Burning Hands, Larloch's Minor Drain, Magic Missile. Note that the "drain to caster" effect of LMD is handled with a flag on the damage effect; it doesn't need to bypass caster protections.

    Mage 2: Aganazzar's Scorcher, Melf's Acid Arrow.

    Mage 3: Flame Arrow, Skull Trap, Vampiric Touch. Skull Trap is the first spell that gets exceptions written into spell protections.

    Mage 5: Cloudkill, Cone of Cold, Sunfire subspell

    There are also some optional changes for consistency on party-friendly spells: Horror, Hold Undead, Slow, Confusion, Teleport Field, and Hold Monster could/should be flagged as hostile. After all, Hold Person already is.

  7. A tweak for an NPC: Anomen's holy symbol.

    Currently, it's kind of a mess because of his alignment changes. In standard BG2EE, he can get any of the Lathander, Helm, or Talos symbols. If he's chaotic neutral when he reaches level 25, he gets the Talos symbol. If he's lawful neutral, he gets the Helm holy symbol. If he's lawful good, it depends on player 1's choices; he gets the Helm symbol if you worked with the Helm temple for the Unseeing Eye quest and the Lathander symbol if you worked with one of the other two.

    It's even possible to get a holy symbol and then lose the ability to use it; if he gets the Helm holy symbol before his trial and then falls to CN, he no longer meets the symbol's alignment requirements.

    My suggested tweak? Clone the Helm holy symbol to a version that's allowed for all alignments but restricted to Anomen only. And have him get that symbol in all cases. After all, all versions of him follow Helm.

  8. I just spotted a particularly thorny instance of item duplication - the mace "Ardulia's Fall" (BG2EE). You can get it both from Stormherald Nallabir as a reward for dealing with the Unseeing Eye and from Talon Yarryl as a reward for acquiring either fake illithium or an illithium statue.

    The requirements for this?

    - Your character meets the requirements for the Talos temple stronghold.

    - Your character doesn't take the Talos temple stronghold, because they have another stronghold.

    Looking things up, all non-stronghold versions of the Unseeing Eye reward give Ardulia's Fall, and all stronghold versions of the Sarles quest reward give the same three-item choice. However, the three non-stronghold versions of the Sarles quest reward give different items - Periapt of Life Protection for Lathander, Helm of the Noble for Helm, Ardulia's Fall for Talos. And the dialogue refers to what kind of item it is; Yarryl specifically refers to "this mace" when giving it to you.

    For those who don't recall, Ardulia's Fall is a +1 mace with a rather powerful on-hit ability - save at +2 or be slowed, on every hit. It is definitely unique, and there's no easy generic counterpart. And this duplication has almost certainly been around for a long time.

  9. Wait, why are we even talking about Pride's helmet being stealable? He's wearing it properly, in the head slot. You can't steal anything from that. The only way to actually get it is to kill noncombatant Pride outright. It's on the same level as the clones of various unique items (Fallorain's Plate, Plate of the Dark, The Dead Shot) that the Ghost Knights in the Firewine ruins have, all of which are also in unstealable slots (body armor, active weapon).

    As for killing Pride ... 100% resistance to magic and all damage types except magic and poison, 1000 HP, AC -20, saves against everything on a zero. It's technically possible to kill that (Magic Resistance plus Cloudkill, since Pride is only level 1), but it requires serious trickery.

    If you want to block that, you either need to make it undroppable or give Pride a min-HP item.

    Actually, what about min-HP items for the various BG1 noncombatants that have that "virtually immune to everything" package? That's a legacy of the original game, from before the better standard was developed.

  10. 18 hours ago, marchitek said:

    Yes, totally agree. I have in mind something like random generated equipment using some predefined prefix/suffix. So e.g. instead swords +1 all around player could get here and there sword +1 with some small random effect.

    You can't go full Diablo on that; items in the Infinity Engine can't be flat out created during gameplay, but have to be defined in advance.

    What you can do is run loops that create variations on an item and splice together names and descriptions in your mod code; I did this for my joke kit mod "incorporating" up to two pieces of jewelry into the kit's key item. This doesn't even have to break translation friendliness; tra files are fundamentally just big lists of string variable definitions.

    So, for example, we could have modifiers like "of flame" (+1 fire damage), "of defense" (-2 damage, +2 AC), "of accuracy" (-2 damage, +2 to hit), or "keen" (+1 crit range). Loop through the base items you'd like to modify, add a suffix to the item code corresponding to the modifier (after first defining a base item code with your modder prefix), apply the new abilities to the item, create names and descriptions by concatenating strings, and there.

    Then you create random treasure tables with your new items in them, assign those random treasures to monsters, and it's good. Oversimplifying, of course.

  11. Base saves (including shorty bonuses) are recalculated when the character levels up. The shorty bonus is based on your base CON when you take that level. Read the appropriate column of the 2DA SAVEMONK, SAVEPRS, SAVEROG, SAVEWAR, or SAVEWIZ, apply the bonuses in the appropriate column of SAVECNDH or SAVECNG if it's a dwarf/gnome/halfling, apply a 2-point bonus to all saves for paladins, and cap the whole thing at zero. These recalculated saves would fully overwrite any existing values.

    So, for example, if you had Yeslick (CON 17) use the tome to increase his CON to 18, he would immediately gain extra hit points but wouldn't get the 1-point improvement to death/wand/spell saves until he took his next level.

    In a sillier (but still true) example, Yaga-Shura in ToB is a level 25 dwarf berserker with base saves 3/5/4/4/6 and 18 CON. If you took him into the party, gave him 4.5 million XP, and leveled him up to 26, the shorty bonus would be applied and his saves would immediately become 0/0/4/4/1.

    The thieving numbers present in the creature file are the base skill numbers; the final skill values include bonuses from race and dexterity. If you gave a thief or monk a bunch of extra points, they would keep them permanently; new levels mean new points to assign on top of the old skill. In fact, the BG2EE character Hexxat has some extra skill points in her creature file because she lacks the racial bonuses to thieving that the player races get. A bard or ranger, though? In their case, the final skill numbers get read from a 2DA, so any changes you make would be reset on leveling.

    Levels only matter in classes that the character actually has. A single-classed fighter at level 1/0/0 is indistinguishable from a single-classed fighter at level 1/15/26. Don't sweat it, unless the character actually is a dual-class or multiclass character. It matters that Jaheira's first two levels are 2 and 2; the first 2 is her fighter level and the second 2 is her druid level. It doesn't matter what her third level is.

  12. I'm a big fan of backstabbing and skirmisher tactics myself. And movement speed is the absolute key to that. You have to be able to get away after landing your hit.

    So ... your suggestion would slightly buff tank-style melee (you can slow down the enemies even if they're trying to get past you. It would leave archery pretty much the same. And it would hurt the high-engagement melee skirmisher style favored by the likes of thieves and monks. Is that really what you want to do?

  13. Changing difficulty settings mid-game? Absolutely. At least in recent versions, the difficulty slider and the in-game "fine-tuning" options work fine. I had a run which was on Insane almost all the way but dropped down to Tactical for the Ascension version of the final boss area - no problem.

    Altering mod installations - definitely not recommended.

    For the specific fight in question - that one's extremely sensitive to character level. Come back a bit later, and it won't be a problem.

  14. 20 hours ago, Awachi said:

    Barring masochistic solo runs and/or extreme cheese, you pretty much have to have an arcane caster by the end of BG1 and certainly for BG2

    I refer you to my "Wee Cant Spell" run, posted over at the Beamdog forums. SCS/Insane, completionist, no memorized arcane or divine spells ever.

    The final BG2 party:

    Magpie: halfling fighter/thief, protagonist.

    Haer'Dalis: tiefling blade. Had spell slots but didn't use them.

    Keldorn: human inquisitor

    Korgan: dwarf berserker

    Mazzy: halfling fighter

    Rasaad: human sun soul monk

    It wasn't a matter of extreme cheese. Just plenty of ambush and disruption tactics, and I did have some defense-breakers like Keldorn's dispel and wands of spell striking. Which I used a lot less than I expected to going in. I even did three takes on the Ascension final battle, all successful. The only challenges I backed off from were the SCS Ust Natha defenders (not enough killing power for the hordes of level 9 fighters) and actually fighting Demogorgon instead of just trapping him to death (he gets Time Stop on SCS/Insane, and uses it to attack in melee).

  15. Another thing to watch for - melee attacks get +4 damage if the defender doesn't have a melee weapon equipped. 7 base damage, plus 4 because she's wielding a sling or something, is 11. 30% resistance is 3.3 resisted, which rounds down to 3, for 8 damage taken.

    It's also a lot easier for the gibberling to hit her in that case, with the +4 to hit in that situation.

  16. I had an idea for a different way of doing things. I tested it - unreliable. Then I got frustrated, and tested the stuff I had already written - and it turns out that's unreliable too. Back to the drawing board.

    I started trying things. A longer duration? Now it's consistently too fast. Then I tried something really simple - and it worked. Just have each fireshield hit grant its target immunity to that particular fireshield subspell after dealing its damage. Duration 2 ticks. It seems to work, but I've been fooled before. Please test.

    Also, while messing with this, I noticed that fireshield hits have inconsistent power levels. Some of them have power level 4; this actually looks like Fireshield Red and a bunch of spells that were cloned from it (Balors, Imix, Aura of Flaming Death, Greater Sun). Others, including all of the non-fire effects, have power level zero. I'm standardizing all of them to power level zero, so level-based spell protections don't interact with the damage.

    And here's the code.

    /* New fireshield code. Please test and cover any missing bits. */
    
    ACTION_IF FILE_EXISTS_IN_GAME ~#rdremov.SPL~ BEGIN /* Patch 2.6 check */
      ACTION_FOR_EACH spell IN ~LEAT23A~ ~bdsha12a~ ~KELDORN~ ~spcl237d~ ~SPPR730D~ ~SPPR951D~ ~SPPR952D~ ~SPWI403D~ ~SPWI418D~ ~BALSHLD2~ ~SPIMIXD~ BEGIN /* Fireshield list for BGEE and BG2EE. May be missing something from SoD - please check by searching for projectiles RANGE05, RANGE07, RANGE10. This search picks up two false positives in non-SoD BGEE - mephit flame fan SPIN938 and hellhound flame breath SPIN956, both unused. */
        ACTION_IF FILE_EXISTS_IN_GAME ~%spell%.SPL~ BEGIN
          COPY_EXISTING ~%spell%.SPL~ ~override~
            LPF ALTER_SPELL_EFFECT INT_VAR match_opcode=12 power=0 END /* Power level is inconsistent between spells. 4 for LEAT23A, SPCL237D, SPPR730D, SPPR952D, SPWI418D, BALSHLD2, SPIMIXD, zero for all others. Standardizing to zero so damage doesn't interact with deflection/turning/globe effects. I think the level 4 damage effects are a mistake that got cloned a bunch of times. */
            LPF CLONE_EFFECT INT_VAR match_opcode=12 opcode=206 parameter1=0 timing=10 duration=2 STR_VAR insert=last resource=~%SOURCE_RES%~ END /* Each hit grants its target 2-tick immunity to further hits from the same fireshield. I think this one actually works. */
          BUT_ONLY
        END
      END
    END

     

  17. OK. I've only actually played with this component in v9, and it was changed in v10. "inns_nonbg.tpa" didn't even exist in v9. Instead, it was "wait_at_inns.tpa" in the "dw_components" folder, which didn't do anything to Neera. The new "inns_nonbg.tpa" is very similar to the old "wait_at_inns.tpa", but it includes Neera (and the other Beamdog NPCs) when the old version didn't. Clearly it's trying to standardize the system those NPCs use to the one used for other NPCs, and doing it wrong.

    Short version: Beamdog NPCs were unaffected in v9. v10 tries to correct this omission, but doesn't get it right.

  18. On 4/21/2022 at 3:25 PM, boof said:

    I don't see the beholder fix in jmerry's mod, at least not in the readme.  

    Nice of you to put some of this stuff into one post.

    Component: "Antimagic rays and Spell Shield". One option changes the ray so it just passes through the spell shield, the other changes it to trade with the shield. Fourth in the "Rule Changes" group in the readme.

    Since this only changes the ray itself, it's compatible with mods that add spell shield effects, like the one SCS has with a divine spell from Icewind Dale. It should work with the changes to the ray itself in the SCS beholder component, though I haven't tested that.

×
×
  • Create New...