Jump to content

DavidW

Gibberlings
  • Posts

    7,922
  • Joined

  • Last visited

Everything posted by DavidW

  1. @Vanatos: They're not the same state block. The INTERJECT_COPY_TRANS blocks are being applied to different FINSOL01 blocks, and so (potentially) give different sets of responses, even though the actual line Balthazar speaks is the same.
  2. Terrific. I did not know that about STATE_WHICH_SAYS. Thanks. I think it makes sense for me to enforce Ascension before Iylos, rather than replicate the Iylos code on my side - do you agree?
  3. Well, yours is much simpler, so if it's robust, it's probably best to keep with it. I'm a bit unclear how this works with multiple languages, or if Ascension and Iylos get installed with different languages. There might be some EE/non-EE issues. You can insulate against that by checking against the tra file in ascension/lang on a vanilla install, and the tra file in weidu_external/lang/ascension on an EE install.
  4. There's one other wrinkle: because the previous version of Ascension was basically an all-or-nothing install, all your mod had to do was check for Ascension (or some Ascension-specific file). That's unreliable for 2.0, because it's broken down into smaller parts. In most cases, what matters for interjections is that the chapter 10 rewrite is separated out from Balthazar's redemption, so that you can install one but not the other. That means that your mod has to be a bit more fine-grained as to which bit of Ascension it's interjecting into. In the case of Iylos, the Irenicus block is an interjection into Irenicus's dialog when Mel summons him, so it's part of 'Chapter 10 rewrite' and doesn't have anything to do with Balthazar. So that block needs to be compiled, and the relevant FIND_DLG_BLOCK run, if the main component is installed. (You can check for it with MOD_IS_INSTALLED, using ID_OF_LABEL if you don't trust the Ascension component numbers to be invariant - though I think I can promise that they will be.) The second Balthazar block, conversely, interjects into Balthazar's final conversation with the Solar, which is part of the 'redeem Balthazar' component and is independent of the Chapter 10 rewrite. So this component needs to check for that component. The first Balthazar block interjects into one of his conversations in the middle of deactivating the energy pools. That's specific to the Ascension chapter-10 rewrite, but also involves Balthazar, so this one should only be included if both components are installed. I recommend doing an install test of your mod in all three configurations: chapter 10 rewrite without redeemed Balthazar; redeemed Balthazar without chapter 10 rewrite; both together.
  5. To do that, we just replace the hardcoded state numbers in the .d file with the new variables, like this: And we need to make sure to use EVALUATE_BUFFER when COMPILEing the dialog, so that the variables are swapped with their values.
  6. I use a function called FIND_DLG_BLOCK, which is a variant of the STATE_WHICH_SAYS function in WEIDU. It's included in the alter_dlg.tpa library in Ascension (in the 'lib' subfolder), so first you have to INCLUDE it. That is: put the alter_dlg.tpa library somewhere in your mod folder (I'll assume you put it in a lib subfolder) and then put a WEIDU INCLUDE command into your tp2, like this: Then you use it like this: It decompiles the 'dialog' block, and returns the block number of the block that contains the 'match' string (which has to be chosen to return a unique block). Now the variable 'iylos_balth_2' is set to the number of the block containing 'SetGlobal("FinalFight","AR6200",5)'. In some cases, the existing dialog doesn't have a very convenient 'match' string. In that case, Ascension adds 'hooks': variable checks that never actually apply but allow the block to be identified uniquely. The block in irenic2.dlg, for instance, has a check for 'Global("w_irenicus_block_12_id","GLOBAL",1)'. That variable is never actually checked, and the block is never used as an initial block so its IF ~~ condition is irrelevant, but it lets the block be identified uniquely by FIND_DLG_BLOCK: I've added hooks like this to those blocks that are used by interjections I know about (mostly Iylos). I can add others if people need them. (The hooks are in the current repo version but not the latest release.) Occasionally it's a bit more involved, because the hook is attached to the top of a CHAIN. Here's how it works for the second Balthazar trigger: Now we have the dialog blocks we need; the next step is to modify the interjection dialog to reference them.
  7. Later edit: Jastey has a way better way to do this, using STATE_WHICH_SAYS (below). I'll leave this up for interest, but do it Jastey's way, not mine. Various mods (notably Longer Road and Iylos) add interjections into Ascension's dialogs. That makes sense: Ascension is basically a modified version of Chapter 10, which is important and dramatic; it's very widely-used; why not interject into it? This thread is about some technical issues in doing so and how to overcome them. It's possible that there are much better methods than this one, so it's also an invitation for suggestions. I'm going to use Iylos as an example. So: Iylos includes these bits of banter with Balthazar and Irenicus at the Throne of Bhaal: The blocks into which he interjects (5 and 9 for Balthazar, 12 for Irenicus) are hardcoded, which worked fine with original Ascension, since its dialogs were built in one big step. It's not as reliable in 2.0, because it's modular: different bits might be added in different orders, depending on component installation order, and I don't want to commit to permanently-unchanging block structure. The trick is to parse the ascension-added (or ascension-modified) dialog to determine the blocks to add into. I'll explain my method below.
  8. Does STATE_WHICH_SAYS work here? The dialog lines are Ascension-added, after all: Iylos won't know which they are. I guess you could parse Ascension's tra files, but that's getting messy, particularly when non-English installs are allowed for. I may be missing something here; STATE_WHICH_SAYS isn't something I use much. In a moment I'll do a separate thread on how I'm currently managing interjections into Ascension; if it turns out there's a better method, I'd be happy to hear about it. As for Crossmod - it's of course up to you as Iylos's maintainer, but my inclination is not to - I don't think people think of Ascension as an NPC mod (and it isn't, really: it's just that Balthazar functions a bit like an NPC for the purposes of the final Solar conversation). As and when Iylos handles Ascension correctly, I'd be inclined to enforce the Ascension->Iylos install order, by telling Ascension not to install if Iylos is there already.
  9. It attaches a condition to the particular action used (so that different Action()s in the same block can have different conditions).
  10. I’m not moving existing dialog states. Iylos interjects into dialog states that are added by Ascension. I’ll describe how to do that on new Ascension shortly.
  11. Longer Road LR interacts quite significantly with Ascension, and there will definitely be problems - but it's too complex for me to realistically do much about it, and its current maintainer (Roxanne) doesn't participate on these boards and has a history that makes me reluctant to reach out. It seems to have been updated to allow for 2.0 but I'm not in a position to comment on whether those updates are successful. Best guess at current status: I don't know. (But install Ascension first.)
  12. Wheels of Prophecy This is a bit of a mess. WoP (which I also wrote) is a horrible mess of spaghetti code written when I had much less idea how to organize complex mods. There are clearly significant bugs in its logic but I can't tell which are internal to WoP and which are clashes with new Ascension. I need to do some serious surgery on it; it's at the top of my to-do list but it's difficult to find time. Best guess at current status: Use at own risk. (Install Ascension first: Ascension itself will enforce this.)
  13. Iylos Iylos is now updated to be fully compatible with Ascension 2.0 Iylos interjects into a couple of Balthazar's dialogs if Ascension is installed. That's done by hardcoded dialog numbers, which worked fine when Ascension was a big hardcoded block, but doesn't work for Ascension 2.0: some the dialog numbers have changed, and they aren't guaranteed to be the same on every install (install order may affect them, now that the main component is broken down into smaller pieces). If Iylos is installed first, Ascension actually adds those interjections back in itself; this seems to work fine (it does assume that the player has not removed the Iylos folder from the BG2 directory after installing Iylos, but I think that's a reasonable assumption). If Ascension is installed first, I suspect Iylos's existing hardcoded interjections will come out wrong. (They're all Interjects, so I don't think they can break anything else, but they might happen in inappropriate places.) It shouldn't be too difficult for Iylos's maintainer (Jastey?) to borrow Ascension's code to allow Iylos to interject into Ascension if installed after. (It does require one of Ascension's function libraries, though.) Let me know if this is of interest and I'll talk you through it. Best guess at current status: Compatible if Ascension is installed first (and Ascension will enforce this order).
  14. Imoen Romance The most recent release of Imoen Romance should be fully compatible with Ascension 2.0. This is a bit complex because it redirects various of Imoen's dialog lines in finsol01.dlg to new lines. If Ascension is installed after Imoen Romance, that's not a problem: Ascension 2.0 uses interject-copy-trans and works around it fine. But it's a problem the other way around: if you install Ascension first then in some circumstances Imoen's new dialog lines are skipped. Specifically, if Balthazar (or, as of 2.0, non-in-party, good-aligned Sarevok) interjects, and the next interject should be Imoen, you get the old version. This is being addressed by the Imoen Romance maintainer. Best guess at current status: Fully compatible; install in either order.
  15. Edwin romance I think that as of its current version, it doesn't do anything in particular to clash with Ascension. Best guess at current status: Fully compatible; install in either order
  16. Here's a thread to track my current state of knowledge of compatibility between the current version of Ascension and other mods. Currently I'm discussing: - Edwin Romance - Imoen Romance - Iylos - Wheels of Prophecy - Longer Road By all means let me know of other mods that seem to have compatibility problems. Potential compatibility issues will arise for: - any mod that explicitly tries to allow for and interact with Ascension - any mod that modifies Chapter 10 (the final battle at the Throne of Blood) - potentially, any NPC mod that edits the final conversation with the Solar too enthusiastically (because Ascension patches conversations with/about Balthazar, Sarevok and Bodhi into that conversation).
  17. '&' is intended notation, and works as you suggest. '*' I don't know about. That character doesn't appear in BAF scripts, normally - it may be that SSL's parser is just ending its script read at it. Or it may be some subtler bit of functionality I've forgotten about.
  18. Belatedly seeing this - I'll have a look. Clearly there are cases I wasn't considering.
  19. Play in windowed mode, and slide the window over so that the button is off-screen. Or wait for SCS v33, which applies to story mode - in accordance with SCS's "fight fair" philosophy, all enemies will also be invincible.
  20. That's interesting; thanks. This is my relative inexperience with NPC mods showing up - I guess what makes sense for the banter file isn't what makes sense for the main NPC dialog file. And I didn't know that about Interact() being interruptible. But wouldn't it make sense, in that case, to set the Interact() to repeat on (say) a 12-second timer until the dialog fires, rather than just having it trigger constantly? Stutter bugs are quite serious, after all - I'd rather code in a way that's properly proofed against it. (EDIT: and no, it doesn't come across as patronizing.)
  21. This isn't a compatibility problem exactly, just a communications issue. BALTH2 is the combat script used by Balthazar if he is on your side in the final battle. It's still in Ascension - but this version of Ascension splits the "You can recruit Balthazar" part of Ascension's main component into a separate component. So if you install "Rewritten final chapter" without "Balthazar can be redeemed", you don't get BALTH2. In general, mods that do things differently according to whether Ascension is installed or not may get a bit confused if you install some but not all components in the "Ascension" section of the new version. I can't fix that inside Ascension; the mods need to be edited to make finer-grained allowance for which bits are installed. (In Wheels of Prophecy that's my problem too, of course.) In the meantime, the workaround is pretty simple: if you're using one of these mods, either install all or none of the components in the 'Ascension' subgroup. (Actually, I suspect that 99% of problems will be solved by making sure you don't install 'rewritten final chapter' without 'Balthazar can be redeemed'.
  22. Firstly, this isn't a bug in Ascension. "YagaShuraHeart1" is set to 2 when you retrieve Yaga Shura's heart from the brazier in the fire giant temple; that's Ascension's condition for when Imoen's second special dialog is set (and has been since the mod was released 20 years ago). I've just tested it; it works fine. Similarly, Ascension's condition for the third talk is that the party have met Balthazar (which is when "MetBal" is set). This is a compatibility issue with Imoen Romance, not an Ascension issue per se. Secondly, this proposed fix removes the conflict, but at the cost of modifying Ascension so that Imoen's dialog lines play earlier. I'm not willing to do that, as it's a change to Ascension developer intent and that's outside the scope of what I'm willing to do when maintaining someone else's mod. Thirdly, the problem is occurring with this version of Ascension and didn't occur with previous versions. That's because previously the dialog blocks for Imoen could play just by chance, potentially very (unrealistically) early in the story. I added a gate to prevent that happening: I check for YagaShuraHeart1 and MetBal in the dialog file, not just in the script. Imoen Romance assumes those blocks are just there, and tries to call them; since it's trying to do so slightly early, and keeps doing so until it succeeds, the game stutters. Since this was my change, not in vanilla Ascension - and since Imoen Romance's preferred trigger points are only slightly earlier than mine - I'm happy to edit bimoen25.d to use Imoen Romance's slightly earlier checks. I believe this will avoid the incompatibility without the need to change imoe25.baf. Fourthly, thanks for the research! EDIT: Just as a coding note, someone paying attention might wonder why this doesn't lead to a compatibility problem in Ascension itself: when Ascension calls for these same dialogs slightly later than Imoen Romance, doesn't that cause the same hanging? No, because Ascension's blocks have a variable which guarantees they only fire once. This is probably good practice if you're writing blocks to call a conversation, especially a third-party one that might have been triggered elsewhere. (I'm not showing off my own coding competence: I took it over verbatim from the original Ascension.)
  23. @Liliana: thanks, that's reassuring. @4udr4n: I have no idea: as you say, it's not my mod, and I'm not at all familiar with it.
  24. ...okay, going through this, the only significant reproducible bug I can find is that the Slayer power gets granted (and regranted, and regranted...) if you go to Watcher's Keep in SoA. I've fixed that locally, but I'm wondering if I'm missing something - various people on this thread suggested that there are much more serious issues than this. eg. Oob: "more than a dozen bugs", "Just trying to say that Ascension 2.0.9 has quite a few nasty bugs right now". Any thoughts?
  25. I'd rather work with the latest official release, not prerelease edits - so I'll use Austin's link. Thanks to both.
×
×
  • Create New...