Jump to content


  • Posts

  • Joined

  • Last visited

About jmerry

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

jmerry's Achievements

  1. So, uh, freedom scrolls. - In the unmodified game, Ribald's "special" shop in chapter 6 sells an unlimited number of freedom scrolls. SCS doesn't touch this. - Also in the unmodified game, several freedom scrolls are available from the duergar merchants in the underdark. SCS doesn't touch this. - In the unmodified game, no freedom scrolls are available before chapter 5. Since SCS mages can get Imprisonment before that, there is an SCS component that adds a few freedom scrolls to the chapter 2/3 shops. Specifically, that's "freedom_scrolls.tpa" in the "spell" grouping, and it adds five freedom scrolls to Ribald's normal wares. - v35 reorganized the "spell tweaks" group of components, so they are no longer available individually and can only be taken as part of predefined packages. And it looks like that little component isn't in any of those packages. The code's still there, such as it is, but it's not available. (See also this thread from a few months ago: https://www.gibberlings3.net/forums/topic/37963-extra-copies-of-hard-to-find-scrolls-in-bg2/#comment-334967)
  2. Specifically, those prices are controlled by the "raisdead.2da" table. The cost of Raise Dead is the value in the table for that character's level, and Resurrection is 50% more. The IWD version of the table has prices grow approximately as level squared, until it hits a cap at level 15 and 10K. The 3700/5550 prices you're seeing ... that's level 9. The equivalent table for the BG series has substantially different numbers, and makes the service generally cheaper; it only costs 800 to raise a level 9 character in BG2/BGEE/BG2EE.
  3. So ... pretty much everything about specialists is annoyingly hardcoded. You get a bonus spell slot per level if (a) you're a mage or sorcerer, (b) your kit isn't "base class"/"generalist", and (c) your mage class is taken from the beginning of the game, either as a single class, a traditional multiclass, or a mage -> X dual. X -> mage dual classes don't get the bonus spell slot, because the kit is assumed to belong to the non-mage first class. That means that if you want to make dual-classing into a specialist work properly, you need to grant the bonus spell slots as effects specifically for those sorts of duals. And there are two different "permanent" timing modes, which work slightly differently. This seems like a rather straightforward instance of using the wrong "permanent" timing mode when building those effects.
  4. I thought of that. No, it's a script name comparison - which it pretty much has to be, to catch all versions of the character. And while Hexxat's CRE files are "OHHEX##", her script name is "hexxat". Or "HEXXAT", depending on which CRE file is used. I'm pretty sure that everything that checks script names in-game is case-insensitive, so that variation doesn't actually matter. Here ... when reading in the file and building the array, force lowercase. So that's "hexxat" in the array we'll check against. Then read the script name from the creature file we're looking at, convert it to lowercase, and compare with the array. Effectively case-insensitive, and it should match. Though the setup might break on long script names; it's an eight-byte read on a 32-byte field. Not a problem for Hexxat, though.
  5. The component is supposed to skip Hexxat, for multiple reasons. Not only does her vampire scripting break when she's set to level 0 with 1 HP, she doesn't get enough skill points if you customize her into any sort of thief. (Her racial bonuses of 15 Pick Pockets, 10 Open Locks, 5 Find Traps, 10 Move Silently, and 5 Hide in Shadows are implemented as already invested skill points in her CRE files, as vampires don't have an entry in the relevant table.) So, the real question: why is she being set to level 0, when there's explicit code in there to exclude her? And that bit hasn't changed any time recently.
  6. You must have checked a modded install, or not understood the indirect reputation checks involved. From VICONP.DLG, Viconia's dialogue after she's left the party. Condition: Happiness not below the unhappy/angry boundary, local "KickedOut" = 0. Viconia says "You have been very kind to me in this strange and lighted world. ...". Set "KickedOut" to 1, and she stands there with no further actions. Condition: Happiness not below the unhappy/angry boundary, local "KickedOut" = 1. Viconia says "Shar has crossed our paths yet again. ...". Conversation ensues, in which you have the option to invite her back into the party. Condition: Happiness below the unhappy/angry boundary. Viconia says "A welcome release. Your weakling surface ways have left a bitter taste in my mouth. ...". Set "KickedOut" to 1, and she leaves forever. Condition: Charmed. Viconia says "I come from the city of Menzoberranzan. ...". No actions. That happiness is the reputation check; with default values in the HAPPY.2DA table and HAPPY.IDS for BGEE, Viconia is unhappy enough to leave forever if your reputation is 17 or higher at check time. Note that this is an inconsistency between games; while UNHAPPY_ANGRY_BOUNDARY is always -160, the happiness values for an evil character at reputation 17 and 18 are -161 and -162 in BGEE, and a flat -160 in BG2EE. If you used the BG2EE table without any other changes, as would happen with a minimal EET install, Viconia would only leave if your reputation was 19 or more at check time. And in this case, because the rep checks in her dialogue are all actually happiness checks and this Tweaks component works by editing HAPPY.2DA, Viconia will rejoin the party at any reputation if you install this component.
  7. So the core of the item usability system is that it's all subtractive. Each class (including multiclasses), kit, and alignment has a flag. Then there are 32 kit flags, assigned to the various kits through the kitlist table; a kit can have more than one flag here. And if any of your character's flags match up with any of the item's flags, you can't use the item. On top of the flags, you can add an effect on the item (opcode 319) or on the character (opcode 180/181) to ban items - but that still only goes one way. To start with, you want this to be a cleric multiclass? Then it'll have fighter/cleric weapon restrictions. So unless you've got some sort of overhaul that liberalizes weapon restrictions for clerics, you can't make this a cleric if you want it to use a scimitar. You could make it a fighter/druid instead, but now you're stuck with the wonky druid XP table and the druid restrictions for non-weapon items. Best bet? Require one of those big divine overhaul mods that opens up cleric weapon usability and pushes all the cleric restrictions into the kits. Use whatever system that mod uses to assign druid weapon restrictions to your kit. On the kensai side, it's easy. Want to ban the stuff a kensai can't use? Then you just give your kit the kensai's usability flag. No body armor, shields, helmet, bracers, or ranged weapons. Oh, did you want to allow the character to use a sling? Now you need to do surgery and split off the ranged weapon ban (kensai and cavalier) from the armor ban (still kensai, but now the kensai has two flags). Either that, or repurpose a flag that isn't actually used in the base game.
  8. And a quick test of the ad-hoc version, directly modifying the table ... yeah, that doesn't do anything for the dual-class. The problem here is - how? I genuinely don't know how the base game mechanics for which proficiencies a dual-class character can take work. It might well be hardcoded to the point that this can't be made to function, that cleric and druid dual classes are set up to ban any non-cleric/non-druid weapons even if the multiclass can take that proficiency.
  9. For clarity, this is the "Loosen Equipment Restrictions" version? If you're talking about before the dual completes, it's working as intended. A fighter -> mage can't take the other proficiencies until they complete the dual and get their fighter abilities back, after all. Looking at the mechanics of the component ... First, it goes through all the items and sets them to be usable by fighter/druids if they're usable by single-class fighters. Second, if goes through the table of weapon proficiency limits. For each weapon category, increase the fighter/druid's limit to the minimum of the fighter's limit and the global multiclass limit (normally 2, 5 if a specific component is installed). There's nothing at all that specifically calls out dual-classes. That just relies on how normal game mechanics read the tables. How does that work anyway, for dual-class proficiencies?
  10. Noted, and I should really get back to that next version of my mod. I've already got a check and correction for missing rest encounters, so doing it for missing song blocks makes sense. And that area shown lacks both the rest encounter block and the song block. The missing rest encounters, at least, are very easy to break. An area that lacks the rest encounter block will break on two applications of fj_are_structure to add stuff; the first recalculates the offsets for everything and pushes those "0" entries to the end of the file, then the second tries to read a fixed-size element starting at the end of the file and errors out. I suspect the same applies to a missing song block, though I haven't tested it. Rest encounters should be a 228-byte block, and a block of all zeros is safe there if the area doesn't allow resting. Songs should be a 144-byte block, and all zeros should cause there to be no music whatsoever. Basically, if you insert appropriately sized blocks of zeros and write new values to the song and rest encounter offsets, the problem should be fixed and your areas won't crash later mods. Songs and rest encounters are the only elements in the ARE format that this applies to; every other category has a "how many of these are there?" entry, for which zero is a valid answer.
  11. All kitted mages and sorcerers get +1 spell slots per level inherently, from the specialist hardcoding. You'd be seeing +1 slots per level on your kit if you weren't applying any opcode 42 effects at all. So, in other words, this has nothing to do with opcode 42. That opcode works as expected. It's the baseline that's wonky.
  12. Do you mean "monsters" or "hostile NPCs"? As I recall, the SCS AI varies some. - Carrion crawlers. Disable anyone that's fighting back, then nibble away. - Spiders. Absolutely bite anyone that's webbed, because they could easily be free next round. Land that poison now. - Humanoids. You want to win the fight, so disable everyone you can and focus damage efforts on the ones that are still fighting.
  13. Uninterruptible spells that don't cost player actions? Just look at how various subspells are handled; True Sight casts a spell every round, for example. It's really easy to do with the various "cast a spell" opcodes. Conscious player actions are the hardest part of this to deal with, because that's where aura delays come in. How are you imagining this to work with player actions?
  14. There are different kinds of charm. A PC hit with Charm Person will just stand there doing nothing. A PC hit with Dire Charm will attack their former allies. Charm Person is on some of the offensive spell lists SCS uses, so that's certainly an option. I'm guessing this version of Nimbul was an Enchanter, using Hold Person to disable one PC and Charm Person on the other. Now, the combat log there ... Nimbul has issues with trying to backstab, as he's carrying both throwing axes and a +1 short sword. Same damage, and the "choose highest-damage melee" action picks the axes every time. Which can't backstab, so oops. The SCS thief AI just isn't set up for thieves that have non-backstab melee weapons. He could have tried a spell, but I doubt he had any offensive spells left with a decent chance of breaking through Viconia's resistances. Having enemies attack non-disabled targets preferentially is ... a choice. It (in theory) improves their odds of winning the encounter outright and completely beating you, while reducing the chances of them taking out some of the party and dying. Here, up against what looks like a warrior Viconia with ankheg plate armor and high strength, he really didn't have any realistic chance in that fight. Though if he had switched to the short sword and backstabbed properly, that stab gets +4 to hit and ignores DEX ... effective THAC0 10 versus AC -1 or -2 (is that a plain shield or a +1?), for close to a 50% chance to hit and (1d6+1)*3 damage - that kills more than a quarter of the time, if she started the fight with those 12 HP. But Nimbul can't actually backstab because of his weapon mixup, so that's moot and the worst he can do in melee is a max-damage critical for 14 points.
  15. Okay. Confirming that the PlayerN identifiers can only change for members currently in the party on loading does clear that up; there definitely won't be a load in the middle of a cutscene, so it is safe to use them in this way. The bit to watch out for here is the distinction between recruited NPCs (not on the list) and additional player-created characters. That's what the !Name("None",PlayerN) conditions are about - additional player-created characters do stick around in the EET version of that cutscene, while recruited NPCs leave.
  • Create New...