Jump to content

jmerry

Modders
  • Posts

    1,297
  • Joined

  • Last visited

Posts posted by jmerry

  1. 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.

  2. On 3/17/2024 at 8:02 PM, ktchong said:

    I've just checked:

    Viconia does NOT check your reputation when you ask her to join OR rejoin your party.

    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.

  3. 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.

  4. 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.

  5. 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?

  6. 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.

  7. 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.

  8. 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?

  9. 37 minutes ago, Opipo said:

    Secondly, The Charm. My MC got Charmed and then proceeded to stand there, doing absolutely nothing for the whole duration, and i feel like this another case of Ultimate Protection.

    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.

  10. 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.

  11. 4 hours ago, subtledoctor said:

    But that would not address any mod NPCs.

    That's why you grab their script names from a 2DA and build your script up during installation; PDIALOG.2DA and it's other-campaign equivalents that assign dialogue files are the obvious choices for picking up a list of recruited NPCs. (BDDIALOG for SoD, PDIALOG for BG1 without EET, something I don't recall for BG1 with EET).

    Also, regarding bdcut61, unmodded SoD does not include the PlayerN blocks in that scene. I wonder how robust that tweaked version is to a party with multiple NPCs not in the base game. Sure, those blocks should all run simultaneously when this cutscene is run with StartCutSceneEx, but that still leaves a chance to break things if the synchronization is a bit off and the PlayerN objects get redefined as people leave.

  12. A bunch of players just left. There aren't six people in the party anymore, so the Player6 identifier doesn't point to anything. It really looks like a bad idea to target LeaveParty at any of the PlayerN identifiers

    Every instance of ActionOverride(****,LeaveParty()) in the vanilla BG series has **** be a character's script name. And that seems like a good pattern to follow; either your script runs from the perspective of whoever's leaving, or you override based on specific characters.

    I see two basic approaches here:

    - Remove recruited characters from the party. Here, you follow the example of SoD after the starting dungeon; you grab a list of script names for recruitables from a 2DA, and banish all of them by name. Note that any additional player-created characters will stay with you.

    - Disable extra characters and stash them somewhere out of the way; this would be like the dream sequence in Spellhold.

     

  13. Probably that, yes. In the vanilla game, SarevokBehavior is used in quite a few places to track the progress of the endgame plot. Values range from 0 to 4; 0 before the ducal palace, 1 after Sarevok flees the palace, 3 for the various loss conditions in the palace fight, 4 for when he personally attacks in the palace, 2 for the final battle.

    Obviously, a mod that tinkers with how the BG1 endgame works has to tweak these things. And I'm not familiar with the details - I don't use the mod, or even play EET - so any more is a matter for Transitions support. 

  14. So, the way that's all scripted ...

    The initial state of the area has lots of people. When you enter the area in chapter 7, nearly everyone despawns and some new "Rogue" characters spawn in at the entrances to tell you about it.

    Then, post-palace, there's this block:

    IF
    	Global("DukeThanks","GLOBAL",1)
    	!Exists("DENKOD")  // Denkod
    	!Dead("DENKOD")  // Denkod
    	!Dead("blacklily")  // Black Lily
    THEN
    	RESPONSE #100
    		CreateCreature("DENKOD",[881.430],S)  // Denkod
    		TriggerActivation("Door0146",TRUE)
    END

    And a slightly different version if Black Lily is dead - activate the way down, but don't spawn Denkod.

    IF
    	Global("DukeThanks","GLOBAL",1)
    	Dead("blacklily")  // Black Lily
    	!Global("dw#thiefdoor","MYAREA",1)
    THEN
    	RESPONSE #100
    		TriggerActivation("Door0146",TRUE)
    		SetGlobal("dw#thiefdoor","MYAREA",1)
    		EraseJournalEntry(31472)  // The Hunt for Sarevok Sarevok's plans have been shattered, but he has escaped to the Thieves' Guild. I must pursue him there and end his crusade of terror once and for all. If I do not, he will most likely return to strike at me in the future, perhaps when I am not prepared. The Grand Dukes can transport me to the Thieves' Guild instantaneously, so I must make haste.
    		AddJournalEntry(31473,QUEST)  // The Maze Sarevok has fled the Thieves' Guild and has escaped into a maze. The maze leads to the Undercity, an old settlement that once stood where Baldur's Gate is now. It appears he intends to make his final stand there.
    END

    These blocks are in the area script AR0153.BCS, which becomes BG0153.BCS with EET. The "DukeThanks" variable is set by the dukes' dialogue, before you get teleported over.

    So, troubleshooting. First, what's the state of the DukeThanks global variable? If it's not set to 1, it should be - and every time you run through that dialogue it gets set again. Second, if the variable is set, there's likely something wrong with the area script for the thieves' hideout - some block earlier in the script is broken and preempts the block that opens the door, every time the script runs. If you put up a copy of that file (it should be in your override, as BG0153.BCS), we might be able to spot what happened.

  15. I don't see any special treatment for Deril or the lich, so it's probably still in play.

    Basic setup for the Deril encounter: Conversations lead to cutscene (CUT87A) which spawns Deril (CEDERIL). Conversation with Deril has three possible outcomes:

    - Abandon Cernd. Deril kills him in a cutscene.

    - Fight with Cernd. Deril goes hostile and Lagole Gon (CELICH) spawns in holding the baby. Lagole Gon is neutral until attacked, and hands over the baby once Deril dies if you don't provoke him. Deril calls for help from Lagole at half health, but doesn't get it. This conversation improperly exits if Lagole is dead. It also happens even if you've already provoked Lagole; the lich refuses to help Deril even if he's already fighting on his side.

    - Later. Deril hands over the baby and promises to come back in a few days (CEDELICH) but never does.

    ... Actually, the potential special treatment here? If the lich could put up some of his prebuffs like the long-duration energy protections while he's still neutral, that would mostly eliminate this issue. After all, Lagole is level 29, and a buffed lich with enough levels always has immunity to fire/cold/acid/electric/magic/poison damage. Which lasts several in-game hours unless dispelled.

  16. Not new, not restricted to high difficulties. Unless this is a case of a fix not quite working, that is. The generic mage AI is perfectly willing to use indiscriminate attacks and any attack on the INNOCENT soldiers by a non-enemy is treated as a terrible crime that the PCs must be responsible for.

    The creatures involved here are TRGRD01 (soldiers) and TRGRD02 (mage), and the problem is most likely to manifest when that mage rolls the Invoker kit.

    I think the fix for this is an entry in mage/override/bg2/variable.2da. Set the appropriate variables, and this mage will no longer use indiscriminate attack spells that hurt his allies.

  17. Mods intended for one game in the series generally won't allow you to install you on the other - at least, if they're well-made. And even if they did, the item wouldn't be inserted into the new campaign for you to find.

    Now, two of the transitions aren't a big deal. The BG1 and SoD campaigns are in the same program, and the game simply continues to the new campaign with your party keeping their inventory. Same with SoA to ToB. So yes, you can carry equipment through those transitions with no problem.

    Going from BGEE to BG2EE - now, that's harder. It's a separate program so the item files won't be there, and even if they were the descriptions would be scrambled due to different string indexing. In addition, SoA starts by removing all of your characters' equipment (in part, because nonexistent items would break things). So there, you'd need a special mod component to add the items including their descriptions and insert them into a BG2EE campaign. Which ... either the original mod-maker provided such a component, or they didn't.

  18. That creature is TOLMAG02. Unlike Tolgerias himself, she's already an enemy. Nothing unusual I can spot in the base creature, just a generic mage with a generic mage combat script. Though the unused TOLMAG01 has a unique property that probably wouldn't play well with SCS - he has three generic mage combat scripts.

    Umm ... is the mage you're seeing this behavior from a female elf? Just to check that it's the standard option and nothing swapped her out for the weirdly broken one...

  19. There's lots of variation, for several reasons.

    First, spellcasters just come at different levels. Here are the levels of the enemies you mentioned (with all applicable SCS components, in the cases it matters):

    Neira: Level 5 cleric.

    Bassilus: Level 10 cleric (level 12 in older versions).

    Narcillicus: Level 7 mage.

    Kahrk: Level 12 mage.

    Obviously, higher-level spellcasters have more buffs.

    Second, spell choices include a random element, which will vary from installation to installation. For example, a level 12 evil cleric using the vanilla spell system has a 1/3 chance of Blade Barrier, a 1/3 chance of Physical Mirror, and a 1/3 chance of an offensive level 6 spell - which will be either Heal, Harm, or Aerial Servant with equal probabilities. Mage kits are also largely random and have an impact here; a necromancer won't get the low-level illusions that most mages buff with, for example.

    Third, difficulty level heavily impacts how much of a spellcaster's buffs are precast. As difficulty rises, spells with shorter durations are added to the list.

  20. 4 hours ago, DumbTheBad said:

    1) I played as a Deep gnome Magetracker, and was able to use mage scrolls from the get go. Coran was also able to use mage scrolls, but Alora was not, so I wonder if it's specific to F/T?  

    So the thing about the item usability system is that it's entirely subtractive, and it works on one attribute at a time. So if there's some sort of fighter/thief that can use scrolls, you need to do some tricky things to prevent unkitted fighter/thieves from using them. And here, Coran presents a special wrinkle. Because unlike a player-created character that has the 0x4000 (TRUECLASS or MAGESCHOOL_GENERALIST) kit, he has the null kit 0x0000. That isn't a valid kit for either a fighter or a thief, so the game uses the trueclass tables for everything ... but it's still not the same, and might be missed by whatever tricks are being used here.

    (Several other BG1 NPCs, along with Imoen in all games of the series, also have these null kits. As do multitudes of characters that can't join the party, but it doesn't matter for them.)

  21. It should be noted that the EE description for the sword includes the line "Each successful hit casts Larloch's Minor Drain on the target (no save)". What does non-EE BG2+ToB say there?

    And the EE version of the spell uses opcode 12, just with flags to make the damage grant equal temporary HP to the wielder (which was bugged before patch 2.6, but now works fully as intended). I suppose that with an opcode 12/18 combination, there wasn't any way to couple variable damage and variable healing so they were always equal?

  22. So Foebane +5 casts LMD, straight up. Actually the secondary spell of the innate version of LMD, but that mostly amounts to the same thing (except for the "don't hit certain enemies" filter, which is a bug in the base game to be addressed by the EE Fixpack).

    Looking at the spell tweaks ... LMD is tweaked to be dependent on caster level, scaling from 1d4 at level 1 to 5d4 at level 10+. And this is applied to both the innate version (most often seen as a Bhaalspawn ability) and the mage version. Sensible, so far. But now we put it as an on-hit ability of a sword, delivered several times per round... yeah, that's trouble for anything that stacks with itself, like damage.

    It seems that the cleanest thing to do here would be to tweak Foebane to always cast the spell at level 1. Which is doable in the EE, by setting parameter 2 of the op146 effect to 2 instead of its current 1. But not in non-EE games; for them, nerfing the sword would require creating a new non-scaling version of LMD.

  23. No. It was not any mod that put the items in the container. The game I look at when I talk about these things is unmodified BGEE. The "in development" stage I'm talking about is the original development of BG1 25 years ago. By the time the game came out, the items were in the container and Centeol wasn't actually carrying them. And that has been the situation ever since.

×
×
  • Create New...