Jump to content

subtledoctor

Modders
  • Posts

    8,953
  • Joined

  • Last visited

Posts posted by subtledoctor

  1. I am looking at this function and it says:

    Quote
    • STR_VAR fj_structure_type to the type of area structure to be added (actor, region, spawn, entrance, container, itm, ambient, variable, door, animation, bitmask, songs, interrupts, note or projectile);
    • INT_VAR fj_delete_mode to the index of the structure to be deleted (if deleting rather than adding a new structure)

    I want to delete a proximity trigger form a map. Trigger #17. But, I do not know what kind of "structure" that is for purposes of this function. The way Near Infinity displays .ARE files does not seem to match up with the categories that this function expects. Can anyone help me translate between them?

  2. I need to have a scripted scene that emulates a Timestop spell. It will:

    • Start a cut scene
    • Every one should freeze like in a Timestop, except Charname (still in cut scene mode though)
    • The Dimension Door animation plays and Charname will be teleported a short distance away
    • The Timestop should end and a dialogue fires

    That's it. My questions are:

    1) Do area scripts continue to run in Timestop?

    2) Can scripted animations play in Timestop?

    3) Can I manipulate a character like teleporting them somewhere work in Timestop?

    If the answer to one or more of those is 'no,' is there a way to visually simulate a Timestop (the greyed out background etc.), and I can fudge the other stuff in the cut scene?

  3. Is there a particular reason for this advice? Just because it can mess up other mods? 

    I need to amend Korlasz' dialogue in SoD. Where she says in state 3:

    Quote

    But you do, <CHARNAME>. Destroy <PRO_HIMHER>! Slay Sarevok's killer!

    ...I want to change it to simply:

    Quote

    But you do, <CHARNAME>. Destroy <PRO_HIMHER>!

    Not really changing the content, just making it a bit more general, removing reference to an event that may not have happened, depending on other conditions. In this case wouldn't REPLACE_SAY be the simplest way to achieve that?

  4. Well, I can confirm the issue is when LeUI is installed first - the IWD campaign selections work fine with out it, but do not work with it.

    The bad news is, I have no idea what LeUI changes, or how EET's UI stuff responds to it, or even really how my own mod interacts with it. (Well, I mostly understand my own mod, but the recent versions of it use code donated by the guys who made NWNforBG, and working with code written by other people is always awkward.)

    All I can really suggest is that you try using the older version of IWD_EET_Integration, before I adopted the code from NWNforBG. Mind you, I have no particular reason to think the old version will work with LeUI. But, it is a different method, so maybe will get different results?

    LeUI must make changes to UI.MENU that cause a regexp match to fail, or something. I suppose you could muck around in Near Infinity after everything is installed. If you look near line 6685 of UI.menu, you can see that the IWD campaign entries for the lines with "elseif(buttonnum..." are missing. These get added fine when LeUI is not present, so like I say, LeUI must make some change that breaks things for mods downstream. (And if you instead install it later, it breaks a bunch of mods upstream. You begin to see why I don't like UI mods...)

    You could try pasting this in between the lines for TOB and BP1, near line ~6697:

    	elseif(buttonNum == const.START_CAMPAIGN_ID1) then
    		startEngine:OnCampaignButtonClick('ID1',true)
    		Infinity_SetINIValue('Program Options','Active Campaign',const.START_CAMPAIGN_ID1)
    	elseif(buttonNum == const.START_CAMPAIGN_ID2) then
    		startEngine:OnCampaignButtonClick('ID2',true)
    		Infinity_SetINIValue('Program Options','Active Campaign',const.START_CAMPAIGN_ID2)

    A quick test suggests this might work.

  5. 3 hours ago, jastey said:

    EndlessBg1 leaves "tourguide" Imoen in if she is not in party.

    Okay I think I see how to remove her.

    I think I have most of this done... just need to go into the dialogues with Korlasz and her various subordinates, and remove/rewrite the lines that mention Sarevok being dead, and the bit about his sword. Then a bunch of testing, with and without EndlessBG1.

  6. 1 hour ago, megrimlock said:

    She is apprenticed to Duke Jannath, it's not difficult to imagine - and explain with a line or two - that she made her own way to the city.

    Yes. But I think that line or two could look very different depending on how long she has been out of the party, or if she died and you removed her portrait without resurrecting her. Which, I guess, easy enough - I can just write four different sets of two-line explanations, and use the appropriate ones. 

    In this mod, since you will go to Korlasz’ dungeon before Imoen apprentices with Liia (and because we really don’t need it to be a tutorial), I think I will depart from the EndlessBG1 practice and keep Imoen out of it entirely. 

  7. I have been looking into what it necessary to play through Korlasz' dungeon before confronting Sarevok. The basics are fairly simple: the area and all the creatures in it already exist, so we need to 1) place a travel trigger in Baldur's Gate, 2) enable getting into and out of the dungeon, and 3) change some of the dialogues inside so that they do not reference Sarevok being dead.

    But boy, there are a lot of issues that are created along with that. I looked at how EndlessBG1 handles this, and... there are a bunch of fairly complicated script and dialogue patches. @jastey is very gracious in sharing it. But working with other people's code that you don't know inside and out is never comfortable. I think I can suss out which ones are necessary here, and which ones are not. (A bunch of the code in EndlessBG1 is geared toward having the dukes send you there after defeating Sarevok.) That will end ups being a HUGE time-saver. However, because it means implementing code with which I am not fully familiar it also means a fair amount of testing will be required. Which is not super easy - I guess I will have to quick-play a game up to chapter 7, or something, and try to stay out of the area in the center of Baldur's Gate? And stay out of the palace. Oy.

    This also makes me think: Imoen presents a major conundrum. I mean I guess this has always been the case, but now it is more directly my conundrum. At this stage of the game, Imoen could be

    1. in the party
    2. never in the party or long-since departed
    3. in the party for most of BG1 but recently departed
    4. dead (or petrified by a basilisk or something)

    I think the code in EndlessBG1 gracefully handles this as far as Korlasz' dungeon is concerned... I think? If she is in your party, she should go through the dungeon with you. (I think this is from EndlessBG1, and not from Imoen Forever... right?). And if she is not in your party, she should simply not appear in the dungeon. I think that is the best thing to do, and if this is not already covered by EndlessBG1 I think I can handle it myself.

    BUT, down the road there is a bigger issue: the new beginning of Siege of Dragonspear involves Imoen being poisoned and bursting into your room seeking help. I don't love this from the SoD writers (it's basically fridging Imoen... again), nevertheless it is fairly unavoidable without rewriting major portions of SoD.  But given the four possibilities above for Imoen's status, how does she get there? I have a current savegame right before the transition to SoD, with EET and EndlessBG1 installed. I fired it up, brutally murdered Imoen, then triggered the transition, and... there she was, running into my room and getting poisoned. I think the mod will have to address this. And I'm not sure there are any really great ways to do so. We can detect which of those four states she is in easily enough. But if she is dead or out of the party, this will mean scripting a sequence where she appears in the palace and is like "Heya! It's me, Imoen!" and gets to stay with the dukes even if she has not been in your party much, or at all.

    Off the top of my head, if she has not been in the party since before your return to Candlekeep, we can say that she snuck in and witnessed Rieltar's murder, or some evidence about it. And when she heard Charname was wanted for the murder, she traveled to the palace to try to clear your name. And now she is being housed there and protected as an informant?

    Maybe something like that? Suggestions welcome!

  8. 22 hours ago, Jarno Mikkola said:

    .DS_STORE

    Something has been going on with Github lately... I have all my repos set to exclude such files, but recently whenever I push commits it tries to included a bunch of hidden files that are specifically in my exclusion lists! And I have to manually uncheck them. Which of course leads to the possibility of human error. It's weird and super annoying.

    EDIT - I didn't notice that this mod is not hosted on Github but ust in a .zip file on the Beamdog forums. That is less ideal.

  9. 12 hours ago, Sanderson said:

    I was (am?) convinced that the epic magic chant/rap battle was a matter of deciphering alphabetic patterns in the call & response, so if it had no effect on the status of the amulet at the end then my roleplay immersion is destroyed!

    Your performance in the chant definitely has an effect... on the success of the process of removing the bracers from Iris Cotton. But it has not effect (that I am aware of) on what happens at the smithy.

  10. Neither here nor there, but going through the end of BG1 and making these changes, I am simultaneously playing Siege of Dragonspear. And, man, I am remembering that this thing has some problems. There are some issues with the writing - in the discussion with Caelar at the bridge, there are questions and responses that almost don't seem to line up? I can't tell if it is just the way it is written - some of the dialogue with Irenicus in BG2 was like that - or if one of the mods I installed has a bug leading to mismatched states and transitions. I mean, bugs are one thing and writing that's a little off is one thing... but you should be able to tell one from the other!

    But there are larger problems with the plot. The whole "why would she let Hephernaan lead by the nose?" question. The fact that she so openly knows you are a Bhaalspawn - when did you tell anyone that? Did I miss an important moment in BG1? How is everyone so up in your business about this? And the "join me, it will be the dawn of a new age" stuff is just... not ripe. Like, I'm sitting here waiting for her to tell me she is my father, and then cut off my hand with that glowing sword...

    Anyway, getting excited about this BG1 mod while also feeling critical of SoD is making me think that my original plan was good, maybe even necessary: I have to completely rewrite SoD. I've already got it mostly plotted out.

    But first things first.

  11. Part 3: Belt Tightening

    Moving onward, because all this stuff can be revised and improved later. This next bit is short: we want to change the scene after you confront Sarevok and prevent his coronation, to stop Belt and Liia from teleporting you to the Thieves' Guild. The part of their dialogue that leads to this is conditioned on a variable which is set when Sarevok reveals his true self and attempts to kill Belt and Liia: Global("SarevokBehavior","GLOBAL",1). We will change that condition to require a value of 99, which will never happen. Then we will add some lines of dialogue that have the same original condition, so the player will see the new dialogue instead:

    Spoiler
    <<<<<<<< d5/belt+.d
    REPLACE_STATE_TRIGGER BELT 11 ~Global("SarevokBehavior","GLOBAL",99)~
    
    APPEND BELT
    
    IF ~Global("SarevokBehavior","GLOBAL",1) Global("D5PostCoronation","GLOBAL',0)~ THEN BEGIN d5belt_0
      SAY ~Well. I suppose we must thank you for your timely intervention. Though, if I am being honest, the timing of your arrival does seem quite convenient. Who did you say you are?~
      IF ~~ THEN REPLY ~I am <CHARNAME>. We have been investigating the Iron Throne's involvement with the iron crisis and the push for war with Amn. We have spoken to Scar about it.~ GOTO d5belt_1
    END
    
    IF ~~ THEN BEGIN d5belt_1
      SAY ~Yes, well, unfortunately Scar is dead, and won't be coming back. So we cannot ask him about it. ~
      IF ~~ THEN GOTO d5belt_1
    END
    
    IF ~~ THEN BEGIN d5belt_2
      SAY ~At any rate, Sarevok is gone, and there is no way to track where they went. That was a Dimension Door, not a teleport spell. But the range is limited, so he cannot have gone far. He is surely still in the city. I will order all entrances to be monitored and have mages checking for magical passage. He will not easily escape.~
      IF ~~ THEN REPLY ~You assume he *wants* to escape...~ GOTO d5belt_3
      IF ~~ THEN REPLY ~He will wish he could escape. I will hunt him down!~ GOTO d5belt_4
    END
    
    IF ~~ THEN BEGIN d5belt_3
      SAY ~Yes, he did say he would come after you right before leaving, did he not? That is worrying. With all the power he amassed through the Iron Throne, he no doubt still has significant resources close at hand.~
      IF ~~ THEN GOTO d5belt_5
    END
    
    IF ~~ THEN BEGIN d5belt_4
      SAY ~I admire your enthusiasm. It is clear to me that Sarevok is an enemy who meant to cause - who did cause - grave harm. But you might consider whether, in your zeal to pursue him, you are playing into his hands. With all the power he amassed through the Iron Throne, he no doubt still has significant resources close at hand.~
      IF ~~ THEN GOTO d5belt_5
    END
    
    IF ~~ THEN BEGIN d5belt_5
      SAY ~We must find him. I think the best course of action is to inquire with the Flaming Fist. Sarevok's stooge, Angelo, is gone and his goons will have been run out. But maybe someone gleaned some information from him in the short time he was running the place.~
      IF ~~ THEN REPLY ~Good idea. I will go talk to an officer in the Flaming Fist.~ DO ~SetGlobal("D5PostCoronation","GLOBAL",1)~ JOURNAL ~The Hunt for Sarevok
    Sarevok's coronation as a grand duke was interrupted, but he escaped to an unknown location. The dukes have suggested that an officer of the Flaming Fist who may have worked with Angelo might have information that can help. Angelo was installed, however briefly, at the Flaming Fist headquarters ion the southwest quadrant of the city. That is the best place to start.~ EXIT
      IF ~~ THEN REPLY ~I do not really see eye to eye with the Flaming Fist. I suppose I could talk to them... if I feel like it. We'll see.~ DO ~SetGlobal("D5PostCoronation","GLOBAL",1)~ JOURNAL ~The Hunt for Sarevok
    Sarevok's coronation as a grand duke was interrupted, but he escaped to an unknown location. The dukes have suggested that an officer of the Flaming Fist who may have worked with Angelo might have information that can help. Angelo was installed, however briefly, at the Flaming Fist headquarters ion the southwest quadrant of the city. That is the best place to start.~ EXIT
    END
    
    IF ~GlobalGT("D5PostCoronation","GLOBAL",0) Global("D5SarevokDead","GLOBAL",0)~ THEN BEGIN d5belt_6
      SAY ~I urge you to find Sarevok and bring him to justice. It would be a boon for the city... and it would go a long way toward shoring up your own credibility and reputation.~
      IF ~~ THEN REPLY ~Right. I am on it.~ EXIT
      IF ~~ THEN REPLY ~I do what I want to do, you aren't my boss.~ EXIT
    END
    
    END
    >>>>>>>> 
    COPY ~d5/belt+.d~ ~weidu_external/reflections/compile/belt+.d~
    COMPILE ~weidu_external/reflections/compile/belt+.d~

    ...and the same for Liia:

    Spoiler
    <<<<<<<< d5/liia+.d
    REPLACE_STATE_TRIGGER LIIA 8 ~Global("SarevokBehavior","GLOBAL",99)~
    
    APPEND LIIA
    
    IF ~Global("SarevokBehavior","GLOBAL",1) Global("D5PostCoronation","GLOBAL',0)~ THEN BEGIN d5liia_0
      SAY ~Well. I suppose we must thank you for your timely intervention. Though, if I am being honest, the timing of your arrival does seem quite convenient. Who did you say you are?~
      IF ~~ THEN REPLY ~I am <CHARNAME>. We have been investigating the Iron Throne's involvement with the iron crisis and the push for war with Amn. We have spoken to Scar about it.~ GOTO d5liia_1
    END
    
    IF ~~ THEN BEGIN d5liia_1
      SAY ~Yes, well, unfortunately Scar is dead, and won't be coming back. So we cannot ask him about it. ~
      IF ~~ THEN GOTO d5liia_1
    END
    
    IF ~~ THEN BEGIN d5liia_2
      SAY ~At any rate, Sarevok is gone, and there is no way to track where they went. That was a Dimension Door, not a teleport spell. But the range is limited, so he cannot have gone far. He is surely still in the city. I will order all entrances to be monitored and have mages checking for magical passage. He will not easily escape.~
      IF ~~ THEN REPLY ~You assume he *wants* to escape...~ GOTO d5liia_3
      IF ~~ THEN REPLY ~He will wish he could escape. I will hunt him down!~ GOTO d5liia_4
    END
    
    IF ~~ THEN BEGIN d5liia_3
      SAY ~Yes, he did say he would come after you right before leaving, did he not? That is worrying. With all the power he amassed through the Iron Throne, he no doubt still has significant resources close at hand.~
      IF ~~ THEN GOTO d5liia_5
    END
    
    IF ~~ THEN BEGIN d5liia_4
      SAY ~I admire your enthusiasm. It is clear to me that Sarevok is an enemy who meant to cause - who did cause - grave harm. But you might consider whether, in your zeal to pursue him, you are playing into his hands. With all the power he amassed through the Iron Throne, he no doubt still has significant resources close at hand.~
      IF ~~ THEN GOTO d5liia_5
    END
    
    IF ~~ THEN BEGIN d5liia_5
      SAY ~We must find him. I think the best course of action is to inquire with the Flaming Fist. Sarevok's stooge, Angelo, is gone and his goons will have been run out. But maybe someone gleaned some information from him in the short time he was running the place.~
      IF ~~ THEN REPLY ~Good idea. I will go talk to an officer in the Flaming Fist.~ DO ~SetGlobal("D5PostCoronation","GLOBAL",1)~ JOURNAL ~The Hunt for Sarevok
    Sarevok's coronation as a grand duke was interrupted, but he escaped to an unknown location. The dukes have suggested that an officer of the Flaming Fist who may have worked with Angelo might have information that can help. Angelo was installed, however briefly, at the Flaming Fist headquarters ion the southwest quadrant of the city. That is the best place to start.~ EXIT
      IF ~~ THEN REPLY ~I do not really see eye to eye with the Flaming Fist. I suppose I could talk to them... if I feel like it. We'll see.~ DO ~SetGlobal("D5PostCoronation","GLOBAL",1)~ JOURNAL ~The Hunt for Sarevok
    Sarevok's coronation as a grand duke was interrupted, but he escaped to an unknown location. The dukes have suggested that an officer of the Flaming Fist who may have worked with Angelo might have information that can help. Angelo was installed, however briefly, at the Flaming Fist headquarters ion the southwest quadrant of the city. That is the best place to start.~ EXIT
    END
    
    IF ~GlobalGT("D5PostCoronation","GLOBAL",0) Global("D5SarevokDead","GLOBAL",0)~ THEN BEGIN d5liia_6
      SAY ~I urge you to find Sarevok and bring him to justice. It would be a boon for the city... and it would go a long way toward shoring up your own credibility and reputation.~
      IF ~~ THEN REPLY ~Right. I am on it.~ EXIT
      IF ~~ THEN REPLY ~I do what I want to do, you aren't my boss.~ EXIT
    END
    
    END
    >>>>>>>> 
    COPY ~d5/belt+.d~ ~weidu_external/reflections/compile/liia+.d~
    COMPILE ~weidu_external/reflections/compile/liia+.d~

    Note: for reasons of exigency I have simply given both Belt and Liia the same dialogue lines. The dialogue will only fire once, so the player will not actually see that, so it kind of doesn't matter. But for sure it is not great characterization. As I say, we can come back later and differentiate them.

    The next step will be talking to the Flaming Fist to try to track down Sarevok. But it occurred to me, what if your reputation is 1 because you have Dorn in the party and you are a loathsome pair of murder-hobos? Well, in any event, whether with good intentions or not, you did just save the lives of the Dukes. So I will add a block to the Palace area script that will run a one-time check and, if your rep is lower than 8, raise it to 8.

    Spoiler
    <<<<<<<< d5/area0108.baf
    IF
    	Global("D5DukesRepReset","GLOBAL",0)
    	Global("D5PostCoronation","GLOBAL",1)
    	ReputationLT("Player1",8)
    THEN
    	RESPONSE #100
    		ReputationSet(8)
    		SetGlobal("D5DukesRepReset","GLOBAL",1)
    END
    >>>>>>>>
    COPY ~d5/area0108.baf~ ~weidu_external/reflections/compile/%bg1_area_prefix%0108.baf~
    
    ACTION_IF (FILE_EXISTS_IN_GAME ~%bg1_area_prefix%0108.bcs~) BEGIN
      EXTEND_TOP ~%bg1_area_prefix%0108.BCS~ ~weidu_external/reflections/compile/%bg1_area_prefix%0108.baf~
    END
    
    ACTION_IF !(FILE_EXISTS_IN_GAME ~%bg1_area_prefix%0108.bcs~) BEGIN
      COMPILE ~weidu_external/reflections/compile/%bg1_area_prefix%0108.baf~
    END

    That, again, does not assume the area script already exists. Such caution may be silly, but it should not hurt anything.

    Finally, after the dukes send you to speak with someone in the Flaming Fist, we want to create a Flaming Fist officer who will actually talk about this stuff. Let's make a clone of Officer Jenks from SoD:

    Spoiler
    COPY_EXISTING ~bdjenks.cre~ ~override/d5njenk.cre~
      SAY 0x08 ~Captain Gregson~
      SAY 0x0c ~Captain Gregson~
      WRITE_ASCII 0x280 ~d5njenk~ #20	// script name
      WRITE_ASCII 0x2cc ~d5njenk~ #8	// creature dialogue file name
    IF_EXISTS

    We don't want it to actually be Jenks, so the filename, creature script, and script name will be "NJenk." I'll name him Captain Gregson, after a relatively competent policeman from the Sherlock Holmes stories. (EDIT - in my local version I have changed the filename et al. to "D5Gregs.") Now let's add a block to the Flaming Fist headquarters area script that will spawn Captain Gregson:

    Spoiler
    <<<<<<<< d5/area0607.baf
    IF
    	Global("D5GregsonExist","GLOBAL",0)
    	Global("D5PostCoronation","GLOBAL",1)
    THEN
    	RESPONSE #100
    		CreateCreature("d5gregs",[1120.850],14)
    		SetGlobal("D5GregsonExist","GLOBAL",1)
    END
    >>>>>>>>
    COPY ~d5/area0607.baf~ ~weidu_external/reflections/compile/%bg1_area_prefix%0607.baf~
    
    ACTION_IF (FILE_EXISTS_IN_GAME ~%bg1_area_prefix%0607.bcs~) BEGIN
      EXTEND_TOP ~%bg1_area_prefix%0607.BCS~ ~weidu_external/reflections/compile/%bg1_area_prefix%0607.baf~
    END
    
    ACTION_IF !(FILE_EXISTS_IN_GAME ~%bg1_area_prefix%0607.bcs~) BEGIN
      COMPILE ~weidu_external/reflections/compile/%bg1_area_prefix%0607.baf~
    END

    The NPC will spawn at coordinate x=1120, y=850. The way I find this out is to inspect the .ARE file in Near Infinity (AR0607.ARE in BGEE/SoD, BG0607.ARE in EET). Clock the "View Area" button, and you will see the entire are in a window. As you move your mouse around the area, the coordinates will change in the bottom-right section of the window. In this way you can find just the right spot to CreateCreature() an NPC or monster, or place an info/travel trigger, or whatnot.

    We need to give Gregson some dialogue, in which 1) he will point you toward Korlasz as a possible lead to find Sarevok; and 2) we will set a variable that we will use later as we approach Korlasz' crypt.

    Spoiler
    <<<<<<<< d5/d5njenk.d
    IF ~Global("D5NJenksCrypt","GLOBAL",0)~ THEN BEGIN d5njenk_0
      SAY ~Can I help you? I'm afraid we don't have the time for civilian inquiries at the moment.~
      IF ~~ THEN GOTO d5njenk_1
    END
    
    IF ~~ THEN BEGIN d5njenk_1
      SAY ~Say, I know you. You're that troublemaker that Angelo wanted us to arrest!~
      IF ~~ THEN GOTO d5njenk_2
    END
    
    IF ~~ THEN BEGIN d5njenk_2
      SAY ~Heh heh. Well, an enemy of Angelo's is a friend of mine. That guy was no good for the Fist. What can I do for you?~
      IF ~~ THEN REPLY ~I am trying to track down Sarevok Anchev. He was working with Angelo and I need to put a stop to their scheming, once and for all. Do you have any information about where they might be?~ GOTO d5njenk_3
      IF ~~ THEN REPLY ~Nothing right now. I have to do some things, then maybe I will be back.~ EXIT
    END
    
    IF ~~ THEN BEGIN d5njenk_3
      SAY ~I can't say that I do. I'm sorry. However... Sarevok and Angelo didn't exactly hide their activities. Why should they? A grand duke and the leader of the Flaming fist!~
      IF ~~ THEN GOTO d5njenk_4
    END
    
    IF ~~ THEN BEGIN d5njenk_4
      SAY ~When Sarevok was angling to become a duke, he was courting favor with most of the city's noble families. Some were more eager than others to work with him. One in particular, name of Korlasz, seemed unusually eager to get involved. Well, I asked around a bit - quiet, like - and rumor has it she is into some dark magicks.~
      IF ~~ THEN REPLY ~Do you think Korlasz might have information on where Sarevok and Angelo are now? Where is her estate?~ GOTO d5njenk_5
    END
    
    IF ~~ THEN BEGIN d5njenk_5
      SAY ~Funny thing, that. I already sent some men 'round to her house. But nobody was home. And nobody has come or gone in some time. But, here's where it gets interesting. There was one time, when Angelo met with this Korlasz, and he ordered a squad of Fist men to accompany him for protection. But they didn't go to her house. See, Korlasz also has a big fancy crypt for her family, right in the middle of the city. And that's where the meet took place.~
      IF ~~ THEN GOTO d5njenk_6
    END
    
    IF ~~ THEN BEGIN d5njenk_6
      SAY ~Now, I have to ask myself: why would they want to hold a meeting in a bleedin' mausoleum? It's a head-scratcher, hey? But I tell you what: I would like to see this mausoleum. I would like that very much. Who knows? Maybe we will find Angelo there. I would quite like to see him strapped to a hard chair in the basement, and asnwer some questions for me.~
      IF ~~ THEN REPLY ~I would like that as well. Can you tell me where this crypt is? It's all I have to go on.~ GOTO d5njenk_7
      IF ~~ THEN REPLY ~Tell me where the crypt is. You should stay here - you will only get in my way.~ GOTO d5njenk_8
    END
    
    IF ~~ THEN BEGIN d5njenk_7
      SAY ~It is right near the center of the city, north of the harbor near the steps to the entrance in the old walls. I am already gathering a force to go there and get inside, by force if necessary. We are heading there soon; if you want to join, you can meet me there. I won't lie, I wouldn't mind having someone with your... capabilities... along with my men.~
      IF ~~ THEN REPLY ~Sounds good.~ JOURNAL ~The Hunt for Sarevok
    I spoke with Captain Gregson of the Flaming Fist. He did not know where Sarevok and Angelo may be, but he mentioned a member of the noble class, Korlasz, who had some suspicious dealings with Angelo at her family's crypt in the center of the city. Captain Gregson intends to enter the crypt and look for clues. It is as good a place to start as any. The entrance to the crypt is near the gate in the inner city walls, just north of the harbor. Captain Gregson will meet me there with a company of Flaming Fist soldiers.~ GOTO d5njenk_9
      IF ~~ THEN REPLY ~I've got some things to do first. I will meet you there when I am done.~ JOURNAL ~The Hunt for Sarevok
    I spoke with Captain Gregson of the Flaming Fist. He did not know where Sarevok and Angelo may be, but he mentioned a member of the noble class, Korlasz, who had some suspicious dealings with Angelo at her family's crypt in the center of the city. Captain Gregson intends to enter the crypt and look for clues. It is as good a place to start as any. The entrance to the crypt is near the gate in the inner city walls, just north of the harbor. Captain Gregson will meet me there with a company of Flaming Fist soldiers.~ GOTO d5njenk_9
    END
    
    IF ~~ THEN BEGIN d5njenk_8
      SAY ~Sorry friend, but I'm not sitting this one out. If you want in, you can meet me there. The crypt is right near the center of the city, north of the harbor near the steps to the entrance in the old walls. I won't lie, I wouldn't mind having someone with your... capabilities... along with my men. If things get violent, though, you make sure that big weapon of yours is pointed in the right direction. Understand?~
      IF ~~ THEN REPLY ~Fine, I will meet you there. But your men better not slow me down.~ JOURNAL ~The Hunt for Sarevok
    I spoke with Captain Gregson of the Flaming Fist. He did not know where Sarevok and Angelo may be, but he mentioned a member of the noble class, Korlasz, who had some suspicious dealings with Angelo at her family's crypt in the center of the city. Captain Gregson intends to enter the crypt and look for clues. It is as good a place to start as any. The entrance to the crypt is near the gate in the inner city walls, just north of the harbor. Captain Gregson will meet me there with a company of Flaming Fist soldiers.~ GOTO d5njenk_9
      IF ~~ THEN REPLY ~No promises.~ JOURNAL ~The Hunt for Sarevok
    I spoke with Captain Gregson of the Flaming Fist. He did not know where Sarevok and Angelo may be, but he mentioned a member of the noble class, Korlasz, who had some suspicious dealings with Angelo at her family's crypt in the center of the city. Captain Gregson intends to enter the crypt and look for clues. It is as good a place to start as any. The entrance to the crypt is near the gate in the inner city walls, just north of the harbor. Captain Gregson will meet me there with a company of Flaming Fist soldiers.~ GOTO d5njenk_9
    END
    
    IF ~~ THEN BEGIN d5njenk_9
      SAY ~Alright then, I will see you there.~ 
      IF ~~ THEN DO ~SetGlobal("D5NJenksCrypt","GLOBAL",1)~ DO ~EscapeArea()~ EXIT
    END
    >>>>>>>> 
    COPY ~d5/d5njenk.d~ ~weidu_external/reflections/compile/d5njenk.d~
    COMPILE ~weidu_external/reflections/compile/d5njenk.d~

    Captain Gregson will EscapeArea() after this conversation. Because he won't be around to say it again, we will create a journal entry telling the player where to go. I also added a journal entry from Belt/Liia to take the place of the one that will no longer happen in the original dialogue branch. Note to self, since we are in the main plot of the game, I probably need to do this more extensively and make sure all journal entreis are properly handled. Another thing I have never done before, so... learning by doing.

    Based on the variable we set at the end, Gregson will appear outside Korlasz' crypt. The plan is to match how EndlessBG1 places it in the game, to maximize compatibility. At that point we will APPEND some more dialogue to Captain Gregson, which will be how we actually enter the crypt (again following the example of Endless BG1 for compatibility).

    But that for Step 4. Step 4 will bring Korlasz' dungeon forward from the SoD campaign to the BG1 campaign. It will need inspection of Endless BG1 so that they can work together, and it will need to adjust a bunch of dialogues there which express an assumption that Sarevok is already dead. And then make sure all game variables are straight to go from there to actually finding and battling Sarevok. I anticipate that will be a fair bit more work, so the next post probably won't go up as quickly.

  12. 4 hours ago, Dorothy_Dorothy_ said:

    2nd edition D&D kind of has "gotcha" and "puzzle monster" mechanics as a core conceit. Bosses with low enough THAC0 to guarantee they hit against AC every time aren't really any more problematic than player characters who can become invincible for a turn or two at a time. Or dozens of Drow and Mindflayers who have like 90% chance of ignoring any spell cast at them.

    I think you are mixing up "2nd Edition D&D" with "Baldur's Gate 2." BG2 is great in a lot of ways, but 2E AD&D is very much NOT designed to be played this way at the tabletop. In 2E AD&D a single mind flayer could mean party wipe. In BG2 you slaughter them by the dozen. A lot of your criticism, IMHO, is relevant to this computer game but not necessarily relevant to the core ruleset. That's neither here nor there, just an observation.

    4 hours ago, Dorothy_Dorothy_ said:

    I think the 3e style of Ability Scores is a superior design overall because it standardizes them. And one of the major benefits of standardized ability scores is exactly that it forms a more manageable, stable basis of comparison against which to balance encounters.

    The counterpoint being, of course, that the encounters in BG2 have already been balanced, and they have been balanced against this particular idiosyncratic every-encounter-on-steroids house-ruled implementation of 2E. So standardizing things, at this late date, may not help anything.

    Personally I think the great benefit of 3E stats, and implementing something like them here, is just how much it simplifies things for players. There is utility in that all on its own.

  13. I was about to add an alternate route to finding Korlasz' dungeon, with information from a thief instead of an officer of the Flaming Fist. But that doesn't really work, since there is a whole contingent of FF soldiers and clerics who go through that dungeon with you. I think the options are:

    1. Remove all those FF soldiers from the dungeon (and, I suppose suppress a bunch of Imoen's dialogue there, as she mentions them a lot). We don't need a tutorial at this point, right?? This way if you have low rep or you just hate the FF, you can talk to Denkod/Black Lily/Narlen or someone like that, to get the lowdown on Korlasz' location.
    2. Leave the Korlasz encounter basically as it is, and force the player to go through the FF to get there. In this case I think that, in your discussion with Belt after stopping Sarevok at the coronation, I would raise the party's rep to ~8 if it is lower than that. You won't instantly become the Hero of Baldur's Gate... but you will have proven yourself to not be a complete scoundrel (at least, in Belt and Liia's eyes - whether you really are a scoundrel is another question).

    If anyone has thoughts about this, I would love to hear them. Adjusting your reputation and leaving Korlasz' dungeon alone is a lot easier, but limits player agency; removing the FF from the dungeon and allowing you to find it by less reputable means is better... but a LOT more work.

  14. 2 hours ago, jastey said:

    you do not want to ship all SoD resources in your mod because of Copyright reasons

    I thought someone recently linked to a statement from Beamdog to the effect that they were okay with using assets from one of their games in other games. (Else we would not have IWDification and SCS and EET, among other mods.) And as I say, the Beamdog ambush sequence is pretty clearly based on the BGT one that came before, and Beamdog is profiting off it. I don’t think they would have the moral or legal high ground in that particular example.

    I certainly would not suggest replicating the entirety of SoD in BGT, or copying in most of its content. But using one or two .ARE files and doing your own creatures/scripts/whatnot should not be a problem.

    At any rate, it’s not really an issue for this mod - as I said, on BGT I would skip Korlasz’ dungeon, and BGT already has the original ambush scene. The jail escape takes place in an area already present in BGT. The only asset from SoD that is missing is the cave before the ambush. That could be skipped, or replaced with some other area.

  15. 1 hour ago, CrevsDaak said:

    Move the Maze entrance somewhere else, preferably forcing the player to look for it and allow for the Eltan et al quests to be completed.

    Yes: that’s the result we will get here. In order to get to the maze you will have to go from the coronation, to the Flaming Fist headquarters, then to the center of the city and complete Korkasz’ dungeon, and then back to Belt (where I have a bit of a rude surprise planned), and then the maze will open to you. It will work better than in vanilla even if we don’t move it, because Belt will not know where it is and will not teleport you. He will only hint in that direction. 

    My best guesses for where the maze could be are 1) keep it in the thieves guild - it can work fine; 2) under the Hall of Wonders? or 3) at the northern gate. Oh, actually you are right, the basement of the Iron Throne would make a ton of sense!

    1 hour ago, CrevsDaak said:

    Storming the new underground complex with the help of the Flaming Fist,

    Yes! I want to add some FF officers to the maze - maybe some dead bodies by the traps? And have a contingent with you in the Undercity. That presents a bit of a complication, because it is vitally important that they all die. Maybe script a cut-scene where they charge at Sarevok and trigger a fireball trap? Maybe have them trigger all the undead in the undercity to converge on your location and attack the FF first? :beholder: This will be tricky, maybe the most complicated part of this mod. 

    1 hour ago, CrevsDaak said:

    Remove the need to trace back trough the Maze in BGT by adding a small passage-way dungeon that becomes accessible after Sarevok dies (feels really anti-climatic to me, just to walk back through the Maze again)

    This is actually really easy. I haven’t yet looked at how EndlessBG1 handles it, but my IWD Integration mod does it to conditionally skip levels of Dragon’s Eye. Just add an area travel trigger on top of the existing one, and flip them on/off via global variables. So with EndlessBG1, the Undercity exit simply takes you back into the Thieves’ Guild. The trek back through the empty maze happens off-screen, as it were. 

    1 hour ago, CrevsDaak said:

    While it's practically what EBG1 does, my idea was to bring similar behavior to BGT

    I don’t think there is any reason this could not be compatible with BGT. Might have to check the script actions used - I have at least one instance of ActionOverride(). Korlasz’ dungeon could simply be skipped in this case, so you could go from Belt to the FF and back to Belt - and do any leftover quests you want in the meantime. First I want to get this working and tested on EET and SoD; then I can look into installing a ‘lite’ version on BGT. BGT already has its own ambush scene, right? So the hardest part will be replicating SoD’s escape from jail to get to the ambush. Maybe the SoD scene can be dropped in whole-hog. I’ll look into it eventually. 

    1 hour ago, CrevsDaak said:

    don't currently have the skills to produce new areas

    Any reason not to simply lift the ambush scene right from SoD, and plug it into BGT? It is pretty well done - reminds me of the BGT version actually, just more fleshed out. 

    For that matter, in a BGT game all of the SoD areas could be used. The Underground River map would work extremely well as an area under Baldur’s Gate…

    28 minutes ago, jastey said:

    My beef would be that [moving the maze entrance] has nothing to do with the actual mod idea of this thread. I am all for "keep mod content straight forward".

    Regarding 2: I'd use a nameless Fritz.

    Good points. As I think about dialogues in my head, I think it will work fine in the Thieves’ Guild. Maybe someday add an optional component to move it. But leaving it alone for now will help me get a first draft of this mod done more quickly.

  16. 4 hours ago, StummvonBordwehr said:

    If you don’t want to handle the Melicamp situation, you could have Biff the Understudy take over the store?

    Ha ha, that's an amazing idea. Make him totally clueless as to what he is doing there, maybe. Or, to be really cheeky, maybe give him some lines from Clerks. "I'm not even supposed to be here today!"

    ------------------------

    Meanwhile, I need a bit of feedback. The next step is to delay Belt sending you to the Thieves' Guild. It's just too quick in the base game; we want to do some investigating to find out where Sarevok has gone to ground. So I will change Belt's dialogue to say, basically, he has no idea where Winski and Sarevok teleported to, and maybe you should talk to someone in the Flaming Fist to see if they know anything from their dealings with Angelo.

    My questions are:

    1) This is a chance to move the entrance to the maze from the Thieves' Guild to somewhere else. I always thought it was a bit weird that one of the Duke was like "I know exactly where the Thieves' Guild is, I can send a contingent of guards there any time I want, for some unstated reason however I have never done that." We could move the entrance to the maze to somewhere in the sewers, or the basement of some tavern, or... whatever. Maybe even somewhere on/near the exterior of the city - maybe it is a smugglers' entrance through the walls. There is a northern city gate that goes nowhere, up in the northwest by the Temple of Helm; we could stick a secret door there, perhaps.  Thoughts? Worth doing? Or should we leave it alone?

    2) This is getting into step 4, but maybe worth discussing now so I can get ahead of it: I want to have Belt send you to a captain in the Flaming Fist, who will have information gleaned from overhearing Angelo talk about the base of operations of one of Sarevok's lieutenants. This Flaiming Fist captain will then escort you to the entrance of Korlasz' crypt. Thoughts on whether this should be just a nameless captain? Or... maybe Corwin? You wouldn't meet her as Corwin yet - she would just be an informant pointing you to a dungeon. But it might be a nice way to add some connective tissue between the first campaign and SoD. Alternatively, maybe someone else we see later in SoD? Officer Jenks, or Fritz?

  17. Part 2: Death Comes on Feathered Wings

    Okay, picking up where I left off, talking about the concept. I want to mention up top two excellent mods: The Calling, and Brandock. I don't want to make this mod dependent on them, but the picture they painted is great and I want to make this consistent with them, such that you will get a lot more out of this if you also install those two mods. Because these both involve the cursed Netherese bracers that turned poor Melicamp into a chicken. And, almost, dinner for a wolf. Without giving away too many spoilers, after the bracers disappear from Melicamp in the vanilla game, The Calling gives you a chance to track them down. And Brandock has a small but extremely well-done interaction with them, which helps flesh out just how powerful the bracers are.

    So we have introduced an extremely powerful item that can create a simulacrum of anyone. And we also have this incredibly old and powerful artifact that can do permanent Transmutation magic, undispellable by even the most powerful divine spellcasters. What could be achieved if they were brought together? Of course, these are dangerous and difficult to handle. Only an archmage of the highest power, even more capable than Thalantyr, could hope to use such artifacts safely. Hmm, do we know anyone like that...? :groucho:

    Of course, Thalantyr takes the Netherese bracers very seriously; he would not give them up without a fight. If... someone is to get them away... Thalantyr needs to die.

    Remember that this mod can be installed either on BGEE or on EET. In this section we need to add a block to the area script for the interior of High Hedge; in BGEE that is AR3202.ARE and uses AR3202.BCS; in EET it is BG3202.ARE and BG3202.BCS. So I will add a little function to the mod's ALWAYS block to determine which prefix to use. I also traified it locally, though I will try to include full strings in these posts so you can see what it happening. So now the top of the .tp2 file looks like this:

    Spoiler
    BACKUP ~weidu_external/backup/Reflections~
    AUTHOR ~SubtleD~
    
    VERSION ~0.1.2~
    
    ALWAYS
      ACTION_IF (GAME_IS ~eet~) BEGIN
        OUTER_SPRINT bg1_area_prefix ~BG~
      END
      ELSE BEGIN
        OUTER_SPRINT bg1_area_prefix ~AR~
      END
    END
    
    LANGUAGE
      ~English~
      ~english~
      ~Reflections/lang/en_US/setup.tra~

    We need to make a .BAF script that, basically, removes Thalantyr from the game in chapter 7. We don't need anything graphic or dramatic; Thalantyr will simply be gone if you go to High Hedge in the late game, and Melicamp will tell us what happened. (If he is there, anyway.)

    Spoiler
    <<<<<<<< d5/area3202.BAF
    IF
    	GlobalGT("CHAPTER","GLOBAL",6)
    	Global("thalantyr_dead","GLOBAL",0)
    THEN
    	RESPONSE #100
    		ActionOverride("thalantyr",DestroySelf())		
    		SetGlobal("thalantyr_dead","GLOBAL",1)
    END
    >>>>>>>>
    COPY ~d5/area3202.BAF~ ~weidu_external/reflections/compile/%bg1_area_prefix%3202.BAF~

    This script is quite simple: it will run at the top of the High Hedge area script, and if it is chapter 7 and a variable is zero, then remove Thalantyr and set the variable to 1. it will return false for most of the game, until you hit chapter 7; if you enter High Hedge in chapter 7 or later it will return true once, and in doing so set the variable to 1, and will forever return false thereafter. So it will not gum up the area script.

    I have copied this script file to a temp file area as either AR3202.BAF or BG3202.BAF. Yes that is the same filename as the .BCS script we are patching, and that is not an accident, because, in preparing this little mod, I found that in at least some games, the High Hedge interior actually has no area script! But in other games there are - some mods may add it, and EET may add it, I'm not sure. In any event, we need to handle both possibilities. So we will check if the file exists; if it does not, we will COMPILE this .AF script and it will become the area script; if the area script does exist we will EXTEND_TOP this script to the existing file.

    Spoiler
    ACTION_IF (FILE_EXISTS_IN_GAME ~%bg1_area_prefix%3202.BCS~) BEGIN
      EXTEND_TOP ~%bg1_area_prefix%3202.BCS~ ~weidu_external/reflections/compile/%bg1_area_prefix%3202.BAF~
    END
    
    ACTION_IF !(FILE_EXISTS_IN_GAME ~%bg1_area_prefix%3202.BCS~) BEGIN
      COMPILE ~weidu_external/reflections/compile/%bg1_area_prefix%3202.BAF~
    END

    The use of the %bg1_area_prefix% variable from the ALWAYS block makes that nice and short.

    Next we need to add a bunch of dialogue to Melicamp so he can explain what happened, and also have him open Thalantyr's store to us so the player does not miss out on his merch:

    Spoiler
    <<<<<<<< d5/melica+.D
    REPLACE_STATE_TRIGGER MELICA 26 ~Global("thalantyr_dead","GLOBAL",0)~
    
    APPEND MELICA
    
    IF ~GlobalGT("thalantyr_dead","GLOBAL",1)~ THEN BEGIN d5melica_0 
      SAY ~You'll have to excuse me, everything is a mess, with Thalantyr gone. I am managing things until his return.~
      IF ~Global("thalantyr_dead","GLOBAL",1)~ THEN REPLY ~Where has he gone?~ DO ~SetGlobal("thalantyr_dead","GLOBAL",2)~ GOTO d5melica_1
      IF ~Global("thalantyr_dead","GLOBAL",2)~ THEN REPLY ~Right. Would you be willing to buy or sell items from Thalantyr's stock?~ GOTO d5melica_4
      IF ~Global("thalantyr_dead","GLOBAL",2)~ THEN REPLY ~Ah. Well, best of luck then. We must get on with our business.~ EXIT
    END
    
    IF ~~ THEN BEGIN d5melica_1
      SAY ~Oh, he has not gone anywhere. He is dead. Killed! Just last night! Oh, if only I was here, I... well, I imagine I would also now be dead.~
      IF ~Global("d5_bracers_here","GLOBAL",1)~ THEN REPLY ~~ GOTO d5melica_2
      IF ~GlobalGT("CDBracerQuest","GLOBAL",18)~ THEN REPLY ~~ GOTO d5melica_2
      IF ~GlobalLT("CDBracerQuest","GLOBAL",19) Global("d5_bracers_here","GLOBAL",0)~ THEN REPLY ~That sounds bad. But why did you say 'when he returns?' Is he to be resurrected?~ GOTO d5melica_3
    END
    
    IF ~~ THEN BEGIN d5melica_2
      SAY ~And whoever it was, they took those thrice-damned Netherese bracers!~
      IF ~~ THEN REPLY ~That sounds bad. But why did you say 'when he returns?' Is he to be resurrected?~ GOTO d5melica_3
    END
    
    IF ~~ THEN BEGIN d5melica_3
      SAY ~Oh no, no, he does not approve of the use of clerical magic. He has made his own contingent arrangements in case of his demise. Some kind of combination of reincarnation and regeneration, if I understand it correctly. Should be complete in a few... weeks? Maybe? I'm afraid it's a bit over my head - I'm just his apprentice! ...I have really learned to appreciate my limits, lately.~
      IF ~~ THEN REPLY ~Right. Would you be willing to buy or sell items from Thalantyr's stock?~ GOTO d5melica_4
      IF ~~ THEN REPLY ~Ah. Well, best of luck then. We must get on with our business.~ EXIT
    END
    
    IF ~~ THEN BEGIN d5melica_4
      SAY ~Ah. Well, I suppose he would not mind if I conducted some business on his behalf. He has trained me well in balancing the tower's accounts, if not in the actual use of magic.~
      IF ~~ THEN REPLY ~Great. Let's see what you have for sale.~ DO ~StartStore("highhedg",LastTalkedToBy(Myself))~ EXIT
    END
    
    END
    >>>>>>>> 
    COPY ~d5/melica+.d~ ~weidu_external/reflections/compile/melica+.D~
    COMPILE ~weidu_external/reflections/compile/melica+.D~

    So here we are making a .D file. This gets a bit complicated: you can write out scripts in .BAF files, and when you COMPILE them they turn into .BCS files. You can write out dialogues in .D files, and when you COMPILE them they turn into .DLG files. BUT you can also put Weidu commands into .D files, and when you COMPILE it then those commands will be executed. It's a bit weird to my eyes, but it is how Weidu works. That's the first thing we do: REPLACE_STATE_TRIGGER to make the normal Melicamp speech after being restored to his body only happens if Thalantyr is alive. Then we write out a bunch of new dialogue: five new states (i.e. statements by Melicamp) and several transitions (responses from the person he is talking to) attached to each one. The very first time you talk to him in chapter 7, when he says Thalantyr is gone, you will ask him for details and he will give you the story. In the course of that it sets the %thalantyr_dead% global variable from 1 to 2, which means the next time you talk to him he will skip the exposition and go right to selling you stuff.

    (Please note, the dialogue here is paper thin, and I fully realize that. As I say this is a proof of concept - I am learning how to do this stuff as I go, you are literally seeing it being done in real-time. I just don't have the time to write a novel as well as figuring out how to do it.)

    Next, we need to change the way Melicamp's situation is handled: we don't want the bracers to disappear when he is changed from a chicken to a human. The vanilla dialogue has Thalantyr ask Melicmap how he feels, and Melicamp will say "I have arms again!" in state 23 of MELICA.DLG, and then it kicks back to THALAN.DLG and thalantyr says "ah, it's a shame, the bracers disappeared. First, we will add a new state to THALAN.DLG, with a slightly different dialogue line instead stating that he will safeguard the bracers. And we will hijack MELICA.DLG at the point where it jumps back and forth, to direct it to the new THALAN state instead of the original one. I learned a trick here: any transition without a player reply is evaluated from the bottom up, and the first one with a true condition is followed. So we can add a new transition to state 23 of MELICA.DLG with EXTEND_BOTTOM, and the game will always use our new transition, point to our new THALAN state.

    Spoiler
    ACTION_IF !(MOD_IS_INSTALLED ~thecalling.tp2~ ~0~) BEGIN
    
    <<<<<<<< d5/thalan+.D
    APPEND THALAN
    
    IF ~~ THEN BEGIN d5thalan_0 
      SAY ~Yes, yes, boy, now be quiet a moment. Ah ha, here they are. Now to make certain these will not fall into the hands of some other unfortunate fool. I will store them securely, this time. Tell me, Melicamp, do you quite feel yourself again?~ /* this is @20015 in my .tra file */
      IF ~~ THEN DO ~SetGlobal("d5_bracers_here","GLOBAL",1)~ EXTERN ~MELICA~ 24
    END
    
    END
    >>>>>>>>
    COPY ~d5/thalan+.d~ ~weidu_external/reflections/compile/thalan+.D~
    COMPILE ~weidu_external/reflections/compile/thalan+.D~
    
    OUTER_SET thalan_20015 = STATE_WHICH_SAYS @20015 FROM ~THALAN~ /* checking the state # with the new line we just added to THALAN.DLG */
    
    <<<<<<<< d5/melica#.D
    EXTEND_BOTTOM MELICA 23
    
    IF ~~ THEN REPLY ~~ EXTERN ~THALAN~ %thalan_20015% 
    
    END
    >>>>>>>>
    COPY ~d5/melica#.d~ ~weidu_external/reflections/compile/melica#.D~
    COMPILE EVAL ~weidu_external/reflections/compile/melica#.D~
    
    END	//	end thecalling not installed

    Now, there is a complication if the player has the Calling installed. I will put this in spoilers because it gives away the end of The Calling's quest:

    Spoiler

    At the end of The Calling, Thalantyr has you take the bracers to Taerom Fuirim and they are destroyed.

    We can't have that. So we have to hook into the THALAN and MELICA dialogue lines added by The Calling and intercept Thalantyr right before he gives you that last task. Note: this is an alternative to the code above, which is why the above code is conditioned on The Calling not being installed. If The Calling is not installed, we want Thalantyr to keep the bracers after curing Melicamp; if The Calling is installed, we want the bracers to disappear as normal, so that we can play The Calling's content.

    This will be  structured the same way as the alternative one: we APPEND a new state to the end of THALAN.DLG, and then we intercept a transition in MELICA.DLG to divert us to the new THALAN state instead of the old one. This is trickier though, because when a mod like The Calling is installed, Weidu assigns state numbers dynamically, which means they can differ from one player's game to another. But @jastey just taught me this black magic: if the Calling has indeed been installed, then the mod folder should be present in the player's game directory. So we can find The Calling's .tra files, find the .tra reference of the state we need to find, and use that with STATE_WHICH_SAYS to find the state number in the modded .DLG file. The '%s' variable will even make sure it grabs the .tra string in the language the player chose when installing The Calling. I don't know how. As I say, it is black magic. But I just did a test install and it works.

    Spoiler
    ACTION_IF (MOD_IS_INSTALLED ~thecalling.tp2~ ~0~) BEGIN
    
    OUTER_SET melica_thecalling_1285 = STATE_WHICH_SAYS 1285 IN ~thecalling/languages/%s/mage.tra~ FROM ~MELICA~
    
    <<<<<<<< d5/thalan+.D
    APPEND THALAN
    
    IF ~~ THEN BEGIN d5thalan_0 
      SAY ~And at last, we have the bracers! Now I will make quite sure to store these a bit more securely. And at length I will determine a method to destroy them, or at least permanently disable them. Thank you for your assistance in this matter.~
      IF ~~ THEN REPLY ~You are welcome.~ EXIT
      IF ~~ THEN REPLY ~You are welcome. May we peruse your inventory of magical items?~ DO ~StartStore("highhedg",LastTalkedToBy(Myself))~ EXIT
      IF ~~ THEN REPLY ~I hope those halflings appreciate the effort I put into this...~ EXIT
    END
    
    END
    >>>>>>>>
    COPY ~d5/thalan+.d~ ~weidu_external/reflections/compile/thalan+.D~
    COMPILE ~weidu_external/reflections/compile/thalan+.D~
    
    OUTER_SET thalan_20011 = STATE_WHICH_SAYS @20011 FROM ~THALAN~
    
    <<<<<<<< d5/melica#.D
    EXTEND_BOTTOM MELICA %melica_thecalling_1285%
    
    IF ~~ THEN REPLY ~~ EXTERN ~THALAN~ %thalan_20011% 
    
    END
    >>>>>>>>
    COPY ~d5/melica#.d~ ~weidu_external/reflections/compile/melica#.D~
    COMPILE EVAL ~weidu_external/reflections/compile/melica#.D~
    
    END	//	end thecalling is installed

    We add the new state to THALAN with a couple different responses (be gracious, go shopping, or be rude). And we EXTEND_BOTTOM in the state we found in the modded MELICA.DLG to again add a new transition, which the game will always use instead of the existing one. So instead of the very last part of The Calling happening, Thalantyr will sit on the bracers, and basically wait for his doom in chapter 7.

    Issues:

    1. This does not address the journal quest entries from The Calling; does this mean there will be a quest forever kept open? Possibly. I will investigate that when I have time. I've never worked with journal entries before, and I wanted to get this out. There is always room to improve things later on, as we go.
    2. Melicamp's dialogue says Thalantyr will be revived in a few weeks, but in chapter 7 Charname could theoretically go on a monthslong voyage to the Isle of Dogs. Should we reconcile this? Should we set an in-game times and bring Thalantyr back after a certain number of days? Ehh... honestly I just don't care. The Balduran's shipwreck thing doesn't make much sense anyway.
    3. Having Thalantyr gone will mean potentially other mod content will not be available! He does some item upgrades! What about mah OP loot?? Eh, there are consequences in life. This should sting a bit, it is a death. It should make the player wonder what the heck is going on. Sometimes player convenience needs to be sacrificed on the altar of a good story.
    4. What if Melicamp doesn't survive the change? He won't be there to tell us about Thalantyr being murdered, and we won't be able to access his store! See above. But also, maybe we should make sure Melicamp survives? The Calling already does just that; perhaps we should mimic it.
    5. What if the player screws up the incantation at the end of The Calling? Then the bracers will in fact disappear, and the hijacked dialogue line we altered will not fire. What wil happen? Well, Thalantyr will be murdered anyway. Maybe the bracers are gone, but someone hunting them down knows they were here at some point. Presumably that someone will go find them... but honestly not everything needs to be explained. In this case we will miss a line of exposition ("and the murderer took those thrice-damned bracers!") but really it's okay: if we screw up the incantation then presumably Charname doesn't have a very high INT score, and things should be a bit murkier. There should be a bit of a scent of a Miss Marple murder mystery here.

    I can live with all that! And what needs to be improved (the journal/quest log thing, probably) can be improved in due time. But for now we march forward. In Part 3 we need to slow Belt's roll.

  18. THAC0 is an amazingly useful shorthand and easy to understand and you will never convince me otherwise. 

    As for AC, I used to concede to you children of summer that pre-3E AC was weird. But no longer! I recently learned the origin of it and it’s fascinating. Apparently the system stems from an old naval combat simulation where the best ship armor you could have was 1st-class, and the next-best armor was 2nd-class, etc., getting worse as you get further from 1st class. (Think about airline seats or cruise ship accommodations - we still use a system where lower is better and nobody complains that it is “hard to understand.”) The took that naval defense mechanic and plugged it into the d20 roll-over to-hit roll, and ended up with a working fantasy combat system! At a time when there was almost nothing to compare it to. 

    I just can’t bring myself to be critical of that. 

  19. 8 hours ago, DavidW said:

    But the logical conclusion isn't 'we need to invent something for odd-numbered values to do'

    Most stats already do two things, no need to invent anything. 

    EDIT - STR and DEX already do two things. WIS grants bonus spells that increase with every point, so it is not a big deal. To the extent a mod wants to add more benefits to INT and CHA, it is inventing something anyway. And CON… well, CON is a tougher nut to crack. 

    8 hours ago, DavidW said:

    it's 'we need to drop odd-numbered ability scores entirely'.

    Well yeah, my gripe with the 3E system is that it is, for the most part, a 9-point system masquerading as an 18-point system. 

    But even there, bonuses every two points is not necessarily a bad design. It’s only bad if you cast DUHM to buff yourself and there is no benefit. An easy alternative to providing a benefit for each point increase is to simply make sure that post-CharGen stats buffs increase stats by an even number. 

  20. 4 hours ago, Morgoth said:

    Would you kindly tell me which components from EBG1 you like? And what about transitions? 

    I'm not yet at the point of dealing with compatibility issues. This mod adds a scene with connective tissues to BG2, and gives you a choice as to whether to go to SoD or straight to BG2 - after the fight against Sarevok. The resolution of the Sarevok battle is an important plot point here - his defeat actually causes a bit of a problem for you. So, of necessity, this will have to cover some of the same ground as EBG1 and Transitions, in that the game won't end in the Undercity Bhaal Temple. Again, this is not because I want to do what someone else has already done, but because it is the only way to make this added scene work. But I have no plan to do stuff like, put Ophyllis/Corwin/Fenster in the palace, do anything with Sarevok's armor/helmet, Elminster's appearance, or Imoen and Jannath. Basically this just covers the same ground as EBG1's main component, and the "Korlasz' Dungeon is in BG1" component. So I will try to make it compatible with all the rest of EBG1. Maybe I will try to use a very similar technique, and/or make the mod defer to EBG1 if it i installed earlier. First I need to actually write it, then I can compare the two and see how to merge them.

    I suspect compatibility with Transitions will be harder, so that is a bit on the back burner.

    9 hours ago, megrimlock said:

    Would it be cheeky to make a feature request? If you are moving Korlasz's dungeon, would you consider also implementing the idea discussed in another thread of replacing Semaj in the Sarevok fight with Korlasz, so that she is, you know, visibly one of Sarevok's crew and not an afterthought.

    I myself had a very similar thought! After all, who the heck is Semaj? He comes out of left field, never explained, just a random follower that you don't meet until the very last fight. And SoD similarly introduces Korlasz as this important person, who you never encounter until after the final fight? It's honestly pretty weird.

    I don't plan to fix everything about these characters. But I can put Korlasz on the same footing as Tazok, Davaeorn, Tamoko, and Cythandria: someone you meet and learn to be an ally of Sarevok before you finish off Sarevok. This was basically done by AWizardDidIt in Black Hearts, adding a new enemy who is described as an ally of Sarevok, and who you are tasked with defeating before the final fight. I think it works well in that mod, so I want to give SoD's Korlasz content the same treatment. I think if you play things in that order: escape Candlekeep, then interrupt the coronation, then go through the Black Hearts finale, then go through Korlasz' crypt to get the key to Sarevok's hiding place - it will flow pretty well and Korlasz will not stick out like a sore thumb.

    However, I do not think it makes sense for Korlasz to appear in the final fight after you defeated her in her crypt. First of all, you might have killed her. Second, if she is alive and gives you Sarevok's location (a key plot point in this mod), Sarevok would probably kill her. Third, if she is alive after you defeat her, she would not end up in the Undercity but be a prisoner of the Flaming Fist. And finally, if she were to escape and join Sarevok at the final fight, it would prevent the scene with her in the palace basement in SoD. So I think I will keep her in the same status as the Black Hearts antagonist or Cythandria: someone you go through on your way to Sarevok.

    I think this will make the end-game flow a lot better, and provide that linkage to BG1 if you don't go through SoD, and improve one of the most-criticized parts of SoD if you do play it: l'affaire de Skie.

  21. Yeah… although that still involves text-matching, which means there could be some rather complicated localization issues. What if the earlier mod was installed in French, but my mod doesn’t have a French translation? 

    Is it possible to check what language was chosen for a particular mod’s installation? 

×
×
  • Create New...