Jump to content

subtledoctor

Modders
  • Posts

    8,956
  • Joined

  • Last visited

Posts posted by subtledoctor

  1. Well, it’s odd: the idea has taken a lot of twists and turns. The genesis of it came from speaking with @morpheus562 and others about, of all things, making a story mod for the Throne of Bhaal expansion campaign. That’s actually how I came up with the “Reflections of Destiny” name. I was playing SoD at the time, and while various mods (mostly yours) improve it a lot, it is still deeply flawed. But some of the army stuff and large battles are amazing. Meanwhile ToB is supposed to be about these warlords with big armies, but has almost no large-scale combat. So we discussed cannibalizing the SoD areas and content for use in ToB

    To achieve that requires changing the end of BG1, skipping SoD. But some parts of SoD don’t need to be cannibalized for ToB: Korlasz’ Dungeon is completely different from the rest of SoD, in both content and location; and the ambush scene at the end would also be inappropriate for ToB, and obviously fits very well for the transition to BG2. So I figured I could bring those two scenarios forward to BG1 and leave the rest of SoD to be used elsewhere. 

    Then I played Durlag's Tower and the Brandock mod, and had the idea for a clone of Charname, to tie that BG1 content to the stuff in Irenicus’ lair under Athkatla. 

    All that was still a bit pie-in-the-sky, but I now have enough experience that it seems feasible. So why not try, and talk about the process of turning a pie-in-the-sky idea into a finished product. Maybe this would make other ideas - for a ToB mod, for instance - seem less sketchy. (If anyone wants to actually collaborate on reusing the SoD content elsewhere, maybe that could even be done in this very mod!)

    So, tl;dr: it covers some of the sane ground as EndlessBG1 from a technical standpoint, but I think has a distinctly different vision. 

  2. 6 hours ago, jastey said:

    Could you summarize in a nutschell what the actual content of the mod is - or link me to a post where it is summarized, and sorry that I missed it. I thought this is about putting the SoD content / Caelar etc. as quests into the end of BG1, but now you mention a transition to SoD, so I am confused

     

    1. It adds some content (mostly dialogue) to stretch out the end of BG1;
    2. It brings some existing SoD content forward into BG1 for the same purpose; and
    3. It offers a dialogue option to skip SoD and go right to BG2, with added story content to make that work with BG2’s description of leaving Baldur’s Gate “under circumstances much darker than anyone would have believed" and leave hints of Irenicus' involvement earlier than the vanilla game would suggest.

    Consequently, the transitions from the BG1 campaign to SoD and to BG2 need to be modified to make sure those 3 things work. 

    I’m working on a Readme now with a proper description, and I will post it in the Miscellaneous Mods forum. 

  3. Part 8: Man in the Mirror

    Okay! This bit was suuuper fiddly. In Part 7 we handled the modified transition from the end of BG1 into SoD; here we handle the alternative path, if you choose by dialogue to skip SoD and stay in Baldur's Gate, in which case a series of unfortunate events cut scenes will take you to the very last scenes of SoD, and thence directly into BG2. This is primarily a mod for EET, and the goal is to really integrate this transition into the game. In the old days, playing BG1 and then BG2, there was this wide gulf between the two games. What was happening in between? How much time passed? But here, I want it to be really seamless. Playing through this transition should feel like you are just playing more of BG1: some events happen out of your control, and you are falsely arrested, and you end up gathering your friends in a dungeon and fighting your way out. That is basically exactly what happens in Candlekeep -  Imoen even refers back to that, saying "we'll get out and clear our names, just like we did in Candlekeep!" Just as the mod brings part of SoD forward into BG1, it should feel like it brings Chateau Irenicus forward into BG1 - thereby adding narrative 'oomph' to the moment you emerge in Waukeen's Promenade in Athkatla and realize everything has changed, and there is no way back home.

    I also tested compatibility with EndlessBG1 here, which added to the fiddly-ness. I made changes to earlier Parts for compatibility, but it is not easy to amend the posts in this thread, so I will let those stand for now. The updated code is in the Github repository.

    I will outline what is happening here with the plot, but I'll put it in spoiler tags in case any readers want to play the mod and find out in-game:

    Spoiler

    If you tell the Dukes you don't want to go on the SoD campaign, Captain Gregson will run in and tell everyone that you have confessed to Entar Silvershield's murder and you are in custody. Except, obviously you are not. The first thought on everyone's mind is, doppelgangers. So you and the dukes travel to the FF headquarters to find out. When you get there, you find a perfect copy of Charname in a holding cell. Liia casts some divination spells, and she determines that it is not a doppelganger or other shapeshifter, and not an illusionary effect. It appears to actually be... you! While this is going on, a Timestop spell is cast, and you and the clone abruptly switch places. Suddenly you are in the cell, with no equipment and no party members, and everyone thinks you are the clone and the clone is you. They leave and offer to give the clone lodgings in the Ducal Palace, leaving you alone and imprisoned.

    After a while, Imoen appears and is flustered. She says you have a attacked the guards in the palace, trying to reach the dukes. They thought the clone was left in the cell but now everyone is confused. You convince Imoen you are really you (with a kind of silly callback... er, call-ahead?... to the BG2 Harper Base plot) and she springs you from jail. You must escape the Flaming Fist, and then hopefully when the dust settles you can clear your name. So you travel through the sewers to the city exterior, where you meet Jaheira/Khalid/Minsc/Dynaheir, and then the six of you are ambushed. After that, well, it's time for more...experiments.

    I removed the final mustache-twirling conversation with the Hooded Man, in part because it doesn't work here - there are voiced lines referring to Skie's death - and in part because i don't think it makes sense for Irenicus to expose his plans so readily. As I said above playing this way sends you fairly immediately into Chateau Irenicus, where you will find Rielev, cloning tanks, a crazed copy of Ellesime, and a demon knight with a shard of the Mirror of Opposition. I'm not planning to spell everything out, but rather just leave some breadcrumbs that can make you realize that there have been hints of this happening since mid-BG1. Irenicus has been working on this plan for longer than you realized.

    So: first thing, we need to copy in a bunch of stuff:

    Spoiler
    ACTION_IF !(GAME_IS ~eet~) BEGIN
      COPY ~%MOD_FOLDER%/data/switcheroo/d50104.are~ ~override~
      COPY ~%MOD_FOLDER%/data/switcheroo/d50105.are~ ~override~
      COPY ~%MOD_FOLDER%/data/switcheroo/d56000.are~ ~override~
    END
    ACTION_IF (GAME_IS ~eet~) BEGIN
      COPY ~%MOD_FOLDER%/data/switcheroo/d50104_eet.are~ ~override/d50104.are~
      COPY ~%MOD_FOLDER%/data/switcheroo/d50105_eet.are~ ~override/d50105.are~
      COPY ~%MOD_FOLDER%/data/switcheroo/d56000_eet.are~ ~override/d56000.are~
    END
    COPY ~%MOD_FOLDER%/data/switcheroo/d5bdimo.cre~ ~override~
    COPY ~%MOD_FOLDER%/data/switcheroo/d5chrnam.cre~ ~override~
    COPY ~%MOD_FOLDER%/data/switcheroo/d5telbgt.cre~ ~override~
    COPY ~%MOD_FOLDER%/data/switcheroo/d5bracs.itm~ ~override~
    COPY ~%MOD_FOLDER%/data/switcheroo/d5_div.spl~ ~override~
    COPY ~%MOD_FOLDER%/data/switcheroo/d5pause.spl~ ~override~
    COPY ~%MOD_FOLDER%/data/switcheroo/d5pausx.spl~ ~override~
    
    COPY ~%MOD_FOLDER%/data/switcheroo/d50104.baf~ ~weidu_external/%MOD_FOLDER%/compile/d50104.baf~
    COMPILE ~weidu_external/%MOD_FOLDER%/compile/d50104.baf~
    COPY ~%MOD_FOLDER%/data/switcheroo/d50105.baf~ ~weidu_external/%MOD_FOLDER%/compile/d50105.baf~
    COMPILE ~weidu_external/%MOD_FOLDER%/compile/d50105.baf~
    COPY ~%MOD_FOLDER%/data/switcheroo/d56000.baf~ ~weidu_external/%MOD_FOLDER%/compile/d56000.baf~
    COMPILE ~weidu_external/%MOD_FOLDER%/compile/d56000.baf~ EVALUATE_BUFFER
    COPY ~%MOD_FOLDER%/data/switcheroo/d5bdimo.baf~ ~weidu_external/%MOD_FOLDER%/compile/d5bdimo.baf~
    COMPILE ~weidu_external/%MOD_FOLDER%/compile/d5bdimo.baf~
    COPY ~%MOD_FOLDER%/data/switcheroo/d5cut64.baf~ ~weidu_external/%MOD_FOLDER%/compile/d5cut64.baf~
    COMPILE ~weidu_external/%MOD_FOLDER%/compile/d5cut64.baf~
    COPY ~%MOD_FOLDER%/data/switcheroo/d5telbgt.baf~ ~weidu_external/%MOD_FOLDER%/compile/d5telbgt.baf~
    COMPILE ~weidu_external/%MOD_FOLDER%/compile/d5telbgt.baf~ EVALUTATE_BUFFER

    The .ARE files are copies of BD0104, BD0105, and BD6000 which are the Flaming Fist headquarters and sewers/cave from the end of SoD. I made clones with a few adjustments (a guard in a different place here, a different container there) so that the original SoD areas will work perfectly if you play through SoD. After reporting Sarevok's death, if you tell the dukes you want to stay in the city and skip SoD, a cut scene will bring you to my modified areas; but after passing through the sewers and underground lake, you will go to the actual SoD exterior area and do the normal transition from SoD to BG2.

    I made different versions of the areas for BGEE/SoD and for EET, only because a few info points had strings that are not super easy to modify on the fly. D50104.baf, D50105.baf, and D56000.baf are just slightly modified versions of the area scripts for the original 'BD' versions of those ares. The only additions are a cut scene in D50104, which I will outline a bit later, and some handling for Imoen in D50105 and D56000. D5CUT64.baf is a slightly modified version of BDCUT64.bcs, and D5TELBGT.baf is a modified version of K#TELBGT.bcs, which is a helper creature and associated script created by k4thos for EET's transition from SoD to the BG2 campaign.

    Next we will modify the Ducal Palace are script, again (I think that has happened about five different times in the course of this), to trigger two cut scenes: one where Captain Gregson enters, and one where everyone leaves and goes to the FF HQ:

    Spoiler
    <<<<<<<< d5/ar108+8.baf
    IF
    	Global("D5GregsonCut","GLOBAL",0)
    	Global("D5GregsonPalace","GLOBAL",1)
    THEN
    	RESPONSE #100
    		SetGlobal("D5GregsonCut","GLOBAL",1)
    		SetGlobal("SOD_fromimport","global",0)
    		SetGlobal("ENDOFBG1","GLOBAL",1)
    		CreateCreature("D5GREGS",[520.615],E)
    		ClearAllActions()
    		StartCutSceneMode()
    		StartCutScene("D5GRCUT1")
    END
    
    IF
    	Global("D5CloneCut","GLOBAL",1)
    	Global("D5GregsonPalace","GLOBAL",1)
    THEN
    	RESPONSE #100
    		CreateCreature("D5TELBGT",[670.465],W)
    		SetGlobal("D5CloneCut","GLOBAL",2)
    		ClearAllActions()
    		StartCutSceneMode()
    		StartCutScene("D5CLCUT1")
    END
    >>>>>>>>
    COPY ~d5/ar108+8.baf~ ~weidu_external/%MOD_FOLDER%/compile/ar108+8.baf~
    EXTEND_TOP ~%bg1_area_prefix%0108.BCS~ ~weidu_external/%MOD_FOLDER%/compile/ar108+8.baf~
    
    // grcut1 = gregson run in and say charname is in custody
    
    <<<<<<<< d5/d5grcut1.baf
    IF
    	True()
    THEN
    	RESPONSE #100
    		CutSceneId("D5GREGS")  // Captain Gregson
    		DisplayStringHead(Myself,"Lord Entar! You must come quickly! Oh, hello everyone...")  // Lord Entar! You must come quickly! Oh, hello everyone...
    		MoveToPoint([640.465])
    		Wait(1)
    		SetGlobal("D5CloneCut","GLOBAL",1)
    		EndCutSceneMode()
    		ActionOverride("D5GREGS",StartDialogueNoSet(Player1))
    END
    >>>>>>>>
    COPY ~d5/d5grcut1.baf~ ~weidu_external/%MOD_FOLDER%/compile/d5grcut1.baf~
    COMPILE ~weidu_external/%MOD_FOLDER%/compile/d5grcut1.baf~
    
    // clcut1 = everyone leave the palace
     
    <<<<<<<< d5/d5clcut1.baf
    IF
    	True()
    THEN
    	RESPONSE #100
    		CutSceneId(Player1)
    		ActionOverride("D5GREGS",EscapeAreaObject("Door0200"))
    		ActionOverride("BDENTAR",EscapeAreaObject("Door0200"))
    		ActionOverride("BELT",EscapeAreaObject("Door0200"))
    		ActionOverride("LIIA",EscapeAreaObject("Door0200"))
    		Wait(1)
    		MoveToPoint([460.715])
    		FadeToColor([20.0],0)
    		LeaveAreaLUAPanic("d50104","",[805.760],S)
    		LeaveAreaLUA("d50104","",[805.760],S)
    		EndCutSceneMode()
    END
    >>>>>>>>
    COPY ~d5/d5clcut1.baf~ ~weidu_external/%MOD_FOLDER%/compile/d5clcut1.baf~
    COMPILE ~weidu_external/%MOD_FOLDER%/compile/d5clcut1.baf~

    That gets Gregson, the dukes, and Charname to the Flaming Fist jail; notably, all other party members are left behind in the palace.

    Once in the jail a series of cut scenes need to be string together, connected by dialogues: everyone walks to the relevant cell, then discusses the matter, then Liia casts a divination spell, then there is the Timestop, then more dialogue and another divination, and then finally everyone walks away, leaving you alone:

    Spoiler
    <<<<<<<< d5/d5clcut2.baf
    IF
    	True()
    THEN
    	RESPONSE #100
    		CutSceneId(Player1)
    		OpenDoor("door03")
    		CreateCreatureCopyPoint("D5CHRNAM",Player1,[410.340]) 
    		CreateCreature("D5GREGS",[745.680],W)  
    		CreateCreature("BDENTAR",[775.700],W) 
    		CreateCreature("BELT",[855.705],W) 
    		CreateCreature("LIIA",[810.720],W) 
    //		GiveItemCreate("D5BRACS","D5CHRNAM",1,0,0) 
    //		XEquipItem("D5BRACS","D5CHRNAM",SLOT_GAUNTLETS,EQUIP) 
    		FadeFromColor([20.0],0)
    //		MoveViewPoint([805.760],INSTANT)
    		SmallWait(9)
    		MoveViewPoint([345.450],VERY_FAST)
    		ActionOverride("D5GREGS",MoveToPoint([315.425]))
    		SmallWait(7)
    		ActionOverride("BDENTAR",MoveToPoint([260.455]))
    		SmallWait(10)
    		ActionOverride("LIIA",MoveToPoint([345.445]))
    		Wait(1)
    		ActionOverride("BELT",MoveToPoint([380.460]))
    		Wait(1)
    		MoveToPoint([330.470])
    		Wait(1)
    		EndCutSceneMode()
    		ActionOverride("BELT",StartDialogueNoSet(Player1))
    END
    >>>>>>>>
    COPY ~d5/d5clcut2.baf~ ~weidu_external/%MOD_FOLDER%/compile/d5clcut2.baf~
    COMPILE ~weidu_external/%MOD_FOLDER%/compile/d5clcut2.baf~
    
    // clcut3 = liia casts a divination spell
    
    <<<<<<<< d5/d5clcut3.baf
    IF
    	True()
    THEN
    	RESPONSE #100
    		CutSceneId(Player1)
    		Wait(2)
    		ActionOverride("LIIA",ForceSpellRES("D5_DIV","D5CHRNAM"))  // No such index
    		Wait(2)
    		CreateVisualEffectObject("SPSTRENH","D5CHRNAM")  // No such index
    		Wait(2)
    		EndCutSceneMode()
    		ActionOverride("LIIA",StartDialogueNoSet(Player1))
    END
    >>>>>>>>
    COPY ~d5/d5clcut3.baf~ ~weidu_external/%MOD_FOLDER%/compile/d5clcut3.baf~
    COMPILE ~weidu_external/%MOD_FOLDER%/compile/d5clcut3.baf~
    
    // clcut4 = timestop and switch places, followed by another liia divination
    /*
    <<<<<<<< d5/d5clcut4.baf
    IF
    	True()
    THEN
    	RESPONSE #100
    		CutSceneId(Player1)
    		Wait(2)
    		ApplySpellRES("D5PAUSE","D5GREGS") 
    		ApplySpellRES("D5PAUSE","BELT") 
    		ApplySpellRES("D5PAUSE","LIIA") 
    		ApplySpellRES("D5PAUSE","BDENTAR") 
    		AddAreaFlag(DREAMAREA)
    		ActionOverride(Player2,MakeUnselectable(1))
    		ActionOverride(Player3,MakeUnselectable(1))
    		ActionOverride(Player4,MakeUnselectable(1))
    		ActionOverride(Player5,MakeUnselectable(1))
    		ActionOverride(Player6,MakeUnselectable(1))
    		Wait(3)
    		JumpToPoint([420.340])
    		MoveViewPoint([405.360],INSTANT)
    		ActionOverride("D5CHRNAM",JumpToPoint([320.490]))
    		ActionOverride("K#ImportContainer",TakeCreatureItems(Player1,ALL))
    		Wait(2)
    		RemoveAreaFlag(DREAMAREA)
    		Wait(1)
    		ApplySpellRES("D5PAUSX","BDFF1002") 
    		ApplySpellRES("D5PAUSX","D5GREGS") 
    		ApplySpellRES("D5PAUSX","BELT") 
    		ApplySpellRES("D5PAUSX","LIIA") 
    		ApplySpellRES("D5PAUSX","BDENTAR") 
    		Wait(1)
    		ActionOverride("LIIA",DisplayStringHead(Myself,@80035))  // Apologies, whoever you are, this might sting a bit.
    		Wait(1)
    		ActionOverride("LIIA",ForceSpellRES("D5_DIV",Player1))
    		Wait(2)
    		CreateVisualEffectObject("ICGLYPTI",Myself)
    		Wait(1)
    		PlayDead(15)
    		Wait(1)
    		CreateCreature("D5TELBGT",[445.320],W)
    		EndCutSceneMode()
    		ActionOverride("LIIA",StartDialogueNoSet(Player1))
    END
    >>>>>>>>
    COPY ~d5/d5clcut4.baf~ ~weidu_external/%MOD_FOLDER%/compile/d5clcut4.baf~
    COMPILE ~weidu_external/%MOD_FOLDER%/compile/d5clcut4.baf~
    */
    
    // clcut5 = everyone leaves, you are stuck
    
    <<<<<<<< d5/d5clcut5.baf
    IF
    	True()
    THEN
    	RESPONSE #100
    		CutSceneId(Player1)
    		Wait(1)
    		ActionOverride("D5GREGS",EscapeAreaNoSee())
    		ActionOverride("BDENTAR",EscapeAreaNoSee())
    		ActionOverride("BELT",EscapeAreaNoSee())
    		ActionOverride("LIIA",EscapeAreaNoSee())
    		ActionOverride("D5CHRNAM",EscapeAreaNoSee())
    		Wait(1)
    		ActionOverride("witness",DestroySelf())
    		ActionOverride("witness_guard",DestroySelf())
    		ActionOverride("bdbence",DestroySelf())
    		ActionOverride("bence_guard",DestroySelf())
    		ActionOverride("bdeltan",DestroySelf())
    		ActionOverride("Entar Guard 1",DestroySelf())
    		ActionOverride("Entar Guard 2",DestroySelf())
    		PlaySound("AMBDLBOO")
    		Wait(2)
    		MultiPlayerSync()
    		Wait(1)
    		CloseDoor("door01")
    		CloseDoor("door02")
    		CloseDoor("door07")
    		CloseDoor("door08")
    		Lock("door02")
    		Lock("door07")
    		Lock("door08")
    		TriggerActivation("InfoBDStairs",FALSE)
    		TriggerActivation("Infobdstairs_epilogue",TRUE)
    		TriggerActivation("TrD50105",TRUE)
    		AddAreaType(CANRESTOTHER)
    		ReallyForceSpellRES("bdremove",Myself)  // No such index
    		SmallWait(5)
    		CreateCreature("bdrefuge",[344.619],NE)  // Refugee
    		CreateCreature("bdrefgm2",[472.677],NE)  // Refugee
    		CreateCreature("bdclara",[600.738],NE)  // Clara
    		CreateCreature("bdrefgf1",[648.474],SW)  // Refugee
    		CreateCreature("bdrefgf2",[762.545],SW)  // Refugee
    		SetGlobal("bd_plot","global",605)
    		SetGlobal("D5CloneCut","GLOBAL",10)
    		EndCutSceneMode()
    END
    >>>>>>>>
    COPY ~d5/d5clcut5.baf~ ~weidu_external/%MOD_FOLDER%/compile/d5clcut5.baf~
    COMPILE ~weidu_external/%MOD_FOLDER%/compile/d5clcut5.baf~
    
    // imoen in sewer cave
    
    <<<<<<<< d5/d5clcut6.baf
    IF
    	True()
    THEN
    	RESPONSE #100
    		CutSceneId(Player1)
    		SmallWait(9)
    		ActionOverride("D5BDIMO",ForceSpellRES("SPWI206",Myself))  // Invisibility
    		Wait(1)
    		SetGlobal("bd_plot","global",641)
    		ActionOverride("D5BDIMO",EscapeAreaNoSee())
    		Wait(1)
    		EndCutSceneMode()
    END
    >>>>>>>>
    COPY ~d5/d5clcut6.baf~ ~weidu_external/%MOD_FOLDER%/compile/d5clcut6.baf~
    COMPILE ~weidu_external/%MOD_FOLDER%/compile/d5clcut6.baf~

    You can see I commented out CLCUT4.baf - the Timestop sequence cannot work as a cut scene, so instead I added it to the D50104 area script, using the SetCutSceneLite() script action:

    Spoiler
    IF
    	Global("D5CloneCut","GLOBAL",6)
    THEN
    	RESPONSE #100
    		SetGlobal("D5CloneCut","GLOBAL",7)
    		ClearAllActions()
    		SetCutSceneLite("true")
    		Wait(2)
    		ApplySpellRES("D5PAUSE","BDFF1002") 
    		ApplySpellRES("D5PAUSE","d5gregs") 
    		ApplySpellRES("D5PAUSE","BELT") 
    		ApplySpellRES("D5PAUSE","LIIA") 
    		ApplySpellRES("D5PAUSE","BDENTAR")
    		SmallWait(5)
    		AddAreaFlag(DREAMAREA)
    		ActionOverride(Player2,MakeUnselectable(1))
    		ActionOverride(Player3,MakeUnselectable(1))
    		ActionOverride(Player4,MakeUnselectable(1))
    		ActionOverride(Player5,MakeUnselectable(1))
    		ActionOverride(Player6,MakeUnselectable(1))
    		Wait(3)
    		ActionOverride(Player1,JumpToPoint([420.340]))
    		MoveViewPoint([405.360],INSTANT)
    		ActionOverride("D5CHRNAM",JumpToPoint([320.490]))
    		ActionOverride("K#ImportContainer",TakeCreatureItems(Player1,ALL))
    		Wait(2)
    		RemoveAreaFlag(DREAMAREA)
    		Wait(1)
    		ApplySpellRES("D5PAUSX","BDFF1002") 
    		ApplySpellRES("D5PAUSX","D5GREGS") 
    		ApplySpellRES("D5PAUSX","BELT") 
    		ApplySpellRES("D5PAUSX","LIIA") 
    		ApplySpellRES("D5PAUSX","BDENTAR") 
    		Wait(1)
    		ActionOverride("LIIA",DisplayStringHead(Myself,@80035))  // Apologies, whoever you are, this might sting a bit.
    		Wait(1)
    		ActionOverride("LIIA",ForceSpellRES("D5_DIV",Player1))
    		Wait(2)
    		CreateVisualEffectObject("ICGLYPTI",Myself)
    		Wait(1)
    		PlayDead(15)
    		Wait(1)
    		CreateCreature("D5TELBGT",[445.320],W)
    		SetCutSceneLite("false")
    		Wait(1)
    		ActionOverride("LIIA",StartDialogueNoSet(Player1))
    END

    Very similar, but slightly different. The D5TELBGT creature runs an override script that moves all party inventory items into a container to be imported to BG2 as appropriate, and removes everyone from the party, leaving you alone.

    Now we have the dialogues. Here again, I put everyone's added lines into a single .D file, so that the EXTERN references can all find each other. Here even more than earlier, most of the dialogue is expository in nature, with the NPCs talking among themselves and the player clicking through but not having much part in it.

    Spoiler
    <<<<<<<< d5/switch+.d
    ADD_STATE_TRIGGER BELT 0 ~Global("D5CloneCut","GLOBAL",0)~
    
    APPEND BELT
    
    IF ~GlobalGT("D5GregsonCut","GLOBAL",0) Global("D5CloneCut","GLOBAL",0)~ BEGIN d5beltsw_0
      SAY  ~Calm down, man. Tell us what news is so urgent, and what is confusing you.~
      IF ~~ EXTERN D5GREGS d5gregsw_2
    END
    
    IF ~~ BEGIN d5beltsw_1
      SAY ~<CHARNAME> has been here with us for some time now. And came here after reportedly dispatching Sarevok <PRO_HIMHER>self.~
      IF ~~ EXTERN BDENTAR d5entarsw_1
    END
    
    IF ~~ BEGIN d5beltsw_2
      SAY ~Agreed. <CHARNAME>, you will accompany us. It would be in your own best interest, as well as ours, to clear this matter up once and for all.~
      IF ~~ REPLY ~Very well, we will travel there together.~ DO ~SetGlobal("D5CloneCut","GLOBAL",1)~ EXIT
    END
    
    IF ~Global("D5CloneCut","GLOBAL",3)~ BEGIN d5beltsw_4
      SAY ~By Helm! Gregson, you were not wrong. There are two of <PRO_HIMHER>!~
      IF ~~ EXTERN BDENTAR d5entarsw_2
    END
    
    IF ~~ BEGIN d5beltsw_5
      SAY ~Come now, <CHARNAME> has been dealing with us for some time now and has not indicated any hostility or danger to us. If I heard right, you yourself admitted to quite savagely murdering Lord Silvershield here.~
      IF ~~ EXTERN LIIA d5liiasw_1
    END
    
    IF ~~ BEGIN d5beltsw_6
      SAY ~By all means.~
      IF ~~ DO ~SetGlobal("D5CloneCut","GLOBAL",4)~ EXIT
    END
    
    IF ~Global("D5CloneCut","GLOBAL",7)~ BEGIN d5beltsw_7
      SAY ~Agreed. This is troubling. But nevertheless the matter seems in hand. We have some time to figure it out. Let us return to the palace. <CHARNAME>, we will give you lodgings there for the time being. We must impose on you to remain in our custody for a short time longer.~
      IF ~~ EXTERN D5CHRNAM d5chrnam_1
    END
    
    IF ~~ BEGIN d5beltsw_8
      SAY ~And as for that thing, it will stay here for now. The bars are strong, and the magical wards stronger. As <PRO_HESHE> surrendered and confessed, we will not take rash action. Once we know what <PRO_HESHE> is, we will decide <PRO_HISHER> fate.~
      IF ~~ DO ~SetGlobal("D5CloneCut","GLOBAL",8)~ EXIT
    END
    
    END
    
    APPEND BDENTAR
    
    IF ~Global("D5GregsonCut","GLOBAL",1)~ BEGIN d5entarsw_0
      SAY ~What? Who made that confession? Where is this person now? Out with it, man!~
      IF ~~ EXTERN D5GREGS d5gregsw_3
    END
    
    IF ~~ BEGIN d5entarsw_1
      SAY ~If we are to trust that report!~
      IF ~~ EXTERN LIIA d5liiasw_0
    END
    
    IF ~Global("D5CloneCut","GLOBAL",3)~ BEGIN d5entarsw_2
      SAY ~What kind of plot is this?? <CHARNAME>, explain yourself! Doppelgangers take faces after killing, they would not risk being caught out in the presence of their live victim.~
      IF ~~ REPLY @80026 EXTERN D5CHRNAM d5chrnam_0
    END
    
    END
    
    APPEND LIIA
    
    IF ~Global("D5GregsonCut","GLOBAL",1) GlobalLT("D5CloneCut","GLOBAL",3)~ BEGIN d5liiasw_0
      SAY ~Gentlemen. Rather than wonder and fight, I suggest we all go to the Flaming Fist headquarters and see for ourselves. Surely we will have this mystery solved in short order.~
      IF ~~ EXTERN BELT d5beltsw_2
    END
    
    IF ~Global("D5CloneCut","GLOBAL",3)~ BEGIN d5liiasw_1
      SAY ~Hm, most curious. This is indeed quite unlike the typical behavior of doppelgangers. If you gentlemen will indulge me, I have some divinations prepared which may shed light on the matter.~
      IF ~~ EXTERN BELT d5beltsw_6
    END
    
    IF ~Global("D5CloneCut","GLOBAL",5)~ BEGIN d5liiasw_2
      SAY ~This is perplexing indeed. The person in the cell is no shapeshifter, and does not appear illusionary or phantasmal in nature. I sense no magic at all; <PRO_HESHE> appears to be perfectly natural. <CHARNAME>, do you have a twin you never mentioned?~
      IF ~Global("D5heritageRevealed","GLOBAL",0)~ REPLY ~Definitely not. The closest thing I have to a sibling is Imoen.~ GOTO d5liiasw_3
      IF ~Global("D5heritageRevealed","GLOBAL",1)~ REPLY ~Definitely not. The closest thing I have to a sibling is, I suppose, Sarevok.~ GOTO d5liiasw_3
    END
    
    IF ~~ BEGIN d5liiasw_3
      SAY ~Hm. Let me try something a bit more involved. The body may give no answers, but I have a more powerful spell that can inspect <PRO_HISHER> aura, giving some indication of <PRO_HISHER> mind and soul. Apologies, whoever you are, this might sting a bit.~
    @80035  = ~Apologies, whoever you are, this might sting a bit.~
      IF ~~ DO ~SetGlobal("D5CloneCut","GLOBAL",6)~ EXIT
    END
    
    IF ~Global("D5CloneCut","GLOBAL",7)~ BEGIN d5liiasw_4
      SAY ~I am beginning to be frustrated. All my divinations are telling me that this person IS, fully, <CHARNAME>. Not a mimic of any sort, nor even an identical twin. But of course that cannot be. Belt, we should consult with the priests of Helm, and I can look into whether we have any scrolls of some rarer divination that might penetrate... whatever this is.~
      IF ~~ EXTERN BELT d5beltsw_7
    END
    
    END
    
    APPEND D5GREGS
    
    IF ~Global("D5GregsonCut","GLOBAL",1)~ BEGIN d5gregsw_0
      SAY ~Lord Entar! You must come quickly! Oh, hello everyone...~
      IF ~~ GOTO d5gregsw_1
    END
    
    IF ~~ BEGIN d5gregsw_1
      SAY ~Wait - what is <CHARNAME> doing here?? I just saw you...~
      IF ~~ EXTERN BELT d5beltsw_0
    END
    
    IF ~~ BEGIN d5gregsw_2
      SAY ~Alright, sir. I rushed here to find Lord Entar, to tell you that someone has confessed to the attack on your person, that, um, killed you. Temporarily, I suppose. But still.~
      IF ~~ EXTERN BDENTAR d5entarsw_0
    END
    
    IF ~~ BEGIN d5gregsw_3
      SAY ~Well, that's the thing, sir. It... well, it is <CHARNAME>. Walked right into Headquarters, said something about the scheme being undone with Sarevok dead, and <PRO_HESHE> wanted to repent. I put <PRO_HIMHER> into a cell, and came straight here to inform you. Only, now I see <CHARNAME> before me... but how? That cell is warded against magical escape!~
      IF ~~ EXTERN BELT d5beltsw_1
    END
    
    END
    
    BEGIN ~D5CHRNAM~
    
    IF ~~ BEGIN d5chrnam_0
      SAY ~Grand Dukes! What are you doing with that pretender! Your lives are in danger! You must believe me, I have voluntarily surrendered myself!~
      IF ~~ EXTERN BELT d5beltsw_5
    END
    
    IF ~Global("D5CloneCut","GLOBAL",7)~ BEGIN d5chrnam_1
      SAY ~Of course, Lord Belt. I understand completely and I will comply.~
      IF ~~ REPLY @80039 EXTERN BELT d5beltsw_8
    END
    
    BEGIN ~D5BDIMO~
    
    IF ~Global("D5CloneCut","GLOBAL",11)~ BEGIN d5imoensw_0
      SAY ~<CHARNAME>! I had to come... I had to see. I - please, tell me, what is going on here? Which one are you?~
      IF ~Alignment(Player1,MASK_GOOD)~ REPLY ~I am me!~ GOTO d5imoensw_1
      IF ~Alignment(Player1,MASK_GENEUTRAL)~ REPLY ~I am me!~ GOTO d5imoensw_1
      IF ~Alignment(Player1,MASK_EVIL)~ REPLY~I am me!~ GOTO d5imoensw_2
    END
    
    IF ~~ BEGIN d5imoensw_1
      SAY ~That's what the other one said too! But now <PRO_HESHE> is slaughtering the palace guards. It's not like you, it makes no sense! Why attack the dukes now?~
      IF ~~ REPLY ~Imoen, what do you mean? What is happening at the palace? Get me out of here, I can help!~ GOTO d5imoensw_3
    END
    
    IF ~~ BEGIN d5imoensw_2
      SAY ~That's what the other one said too! But now <PRO_HESHE> is slaughtering the palace guards. You could always be violent, but this makes no sense! Why attack the dukes now?~
      IF ~~ REPLY ~What are you talking about? What is happening at the palace? Help me, I need to get out of here!~ GOTO d5imoensw_3
    END
    
    IF ~~ BEGIN d5imoensw_3
      SAY ~I wish I could believe you, really. But how can I be sure? Everything is crazy! Please <CHARNAME>, help me believe you. Tell me something no one else would know! Wait - what's me favorite color? What did I tell you when we were little? Please...~
      IF ~~ REPLY ~I remember. You told me you love pink, but you also love black. You said you like them together, how deep black will take in the surrounding colors, but it makes the pink next to it brighter, stronger. I always though that was a weird thing for a little kid to say.~ GOTO d5imoensw_4
    END
    
    IF ~~ BEGIN d5imoensw_4
      SAY ~Yeah, well I was a smart kid! Oh <CHARNAME>, it really is you! Thank Tymora! But, huh. How did you get in there in the first place?? Ooooh... did you kill Entar?? Wait, then who killed Sarevok?~
      IF ~~ REPLY ~I did! I mean, the Sarevok part. Imoen, I don't know what happened. I switched places, somehow, earlier today. I was over there, and I blinked, and I was here. I didn't feel myself teleporting or anything like that. Just, one moment I was there and the next moment the whole world was turned upside-down. What could do that?~ GOTO d5imoensw_5
    END
    
    IF ~~ BEGIN d5imoensw_5
      SAY ~Whoa. That's weird. I've read a little about super-strong reality-bending magic. Like, stuff from Netheril. But I've never seen anyone actually use it? As much power as we've attained, we're still not even close to that level of magic.~
      IF ~~ GOTO d5imoensw_6
    END
    
    IF ~~ BEGIN d5imoensw_6
      SAY ~But listen, we can figure it out later. There are people calling for your head. We need to get out of here, and regroup somewhere safe, then we can clear your name. Just like Candlekeep! You did it once, you can do it again.~
      IF ~~ REPLY ~Can you help me escape? These bars are enchanted, they are too strong for me no matter what I do.~ GOTO d5imoensw_7
    END
    
    IF ~~ BEGIN d5imoensw_7
      SAY ~Of course, you old buffle-head! This cell may be locked and magicked, but you know that can't stop me! I'll open the cell, then follow me. There's a secret passage into the sewers, right in this building. It's, well, don't ask me how I found it out. Just follow me. We can talk more after we get away.~
      IF ~~ DO ~OpenDoor("Door04") SetGlobal("D5CloneCut","GLOBAL",12)~ EXIT
    END
    
    IF ~Global("D5CloneCut","GLOBAL",12) AreaCheck("d50104")~ BEGIN d5imoensw_8
      SAY ~Come on, we have to get to the basement. Hurry up!~
      IF ~~ EXIT
    END
    
    IF ~GlobalLT("bd_plot","global",625) Global("D5CloneCut","GLOBAL",12) AreaCheck("d50105")~ BEGIN d5imoensw_9
      SAY ~Here's the secret passage. Let's go!~
      IF ~~ EXIT
    END
    
    IF ~GlobalLT("bd_plot","global",641) Global("D5CloneCut","GLOBAL",12) AreaCheck("d56000")~ BEGIN d5imoensw_10
      SAY ~I'm going to scout ahead. Supposedly we have to go through a waterfall. Or maybe, over a waterfall? Hopefully it's a small one! Anyway, just follow the water and get to the outside. I'll meet you at the exit.~
      IF ~~ DO ~SetGlobal("D5ImoenCaveCut","GLOBAL",1)~ EXIT
    END
    
    ALTER_TRANS BDIMOEN // file name
      BEGIN 92 END // state number
      BEGIN 3 END // transition number
      BEGIN "TRIGGER" ~Global("D5SkipSoD","GLOBAL",0)~ END
    
    ALTER_TRANS BDIMOEN // file name
      BEGIN 100 END // state number
      BEGIN 0 1 2 3 4 END // transition number
      BEGIN "TRIGGER" ~Global("D5SkipSoD","GLOBAL",0)~ END
    >>>>>>>>
    COPY ~d5/switch+.d~ ~weidu_external/%MOD_FOLDER%/compile/switch+.d~

    We use a copy of Imoen to guide you through my custom areas, but you meet the vanilla BDIMOEN.cre once you get out of the sewers; the final ALTER_TRANS commands there are some slight modifications to BDImoen's dialogue lines to exclude reference to Castle Dragonspear.

    Also note, in that quoted code I have not yet COMPILE'd the .D file! That is because some adjustments need to be made if EndlessBG1 is installed:

    Spoiler
    // compatibility with EBG1 
    
    ACTION_IF (MOD_IS_INSTALLED ~c#endlessbg1.tp2~ ~0~) BEGIN
    
     OUTER_SET liia_ebg1_10 = STATE_WHICH_SAYS 10 IN ~c#endlessbg1/translations/%s/dialogues.tra~ FROM ~LIIA~
    
     PRINT ~the state we want NOW is # %liia_ebg1_10%~
    
     APPEND_OUTER ~weidu_external/%MOD_FOLDER%/compile/switch+.d~ ~~~~~
     ADD_STATE_TRIGGER LIIA %liia_ebg1_10% ~Global("D5GregsonExist","GLOBAL",0)~
    ~~~~~
     
    END	//	end EBG1 #0
    
    //  now compile the dialogues
    
    COMPILE ~weidu_external/%MOD_FOLDER%/compile/switch+.d~

    EndlessBG1's main component adds a dialogue line to Liia that can interrupt our Timestop cut scene. This code finds that dialogue line using STATE_WHICH_SAYS, and then adds a conditional trigger to it such that it will stay out of the way of this mod's content. I have a habit: rather than just writing .BAF scripts and applying COMPILE commands, I copy the uncompiled .BAF file to a working directory in /weidu_external. This way 1) I can find and read the script without having to decompile it or open it in NI; and 2)  I can APPEND_OUTER various things to the script as needed, with ACTION_IF conditions in Weidu. Then I compile the .D file. As I said, I have added a couple instance of similar treatment to earlier parts of the mod - I think Part 5 and Part 7? And I am happy to say that, at least as of my testing last night, this is compatible with most of EndlessBG1!

    Finally, a couple odds and ends. Some of the dialogue in the ambush scene needs to be rewritten to exclude mention of Skie or Dragonspear; and something about this transition to the BG2 campaign might preempt k4thos' script to un-fatigue Charname in Chateau Irenicus, so I will add an extra bit of scripted insurance there:

    Spoiler
    // clean up people's dialogue at ambush
    
    ACTION_IF (GAME_IS ~bgee~) BEGIN
      STRING_SET 39703 ~I'm sorry, <CHARNAME>. I shouldn't have let you get into this kind of trouble. But now we're together again, I'm sure we will clear everything up.~
      STRING_SET 39716 ~Do not th-think I'm pleased to be here, <CHARNAME>. What I do, I do for Gorion and Imoen.~
      STRING_SET 39706 ~You make it sound as though I went looking for trouble.~
    END
    ACTION_IF (GAME_IS ~eet~) BEGIN
      STRING_SET 239703 ~I'm sorry, <CHARNAME>. I shouldn't have let you get into this kind of trouble. But now we're together again, I'm sure we will clear everything up.~
      STRING_SET 239716 ~Do not th-think I'm pleased to be here, <CHARNAME>. What I do, I do for Gorion and Imoen.~
      STRING_SET 239706 ~You make it sound as though I went looking for trouble.~
    END
    
    
    // make sure charname is not overly fatigued in Chateau Irenicus
    
    ACTION_IF (GAME_IS ~eet~) BEGIN
     <<<<<<<< d5/d5nu602.baf
     IF
    	CheckStatGT(Player1,30,0)
    	Global("P1RestFix","GLOBAL",0)
     THEN
    	RESPONSE #100
    		SetGlobal("P1RestFix","GLOBAL",1)
    		ActionOverride(Player1,Rest())
     END
     >>>>>>>>
     COPY ~d5/d5nu602.baf~ ~weidu_external/%MOD_FOLDER%/compile/d5nu602.baf~
    
     ACTION_IF (FILE_EXISTS_IN_GAME ~ar0602.bcs~) BEGIN
      EXTEND_TOP ~ar0602.bcs~ ~weidu_external/%MOD_FOLDER%/compile/d5nu602.baf~
     END
    END

    And that's it! In the Github repo, I have combined parts 2 through 8 into a single component, and the mod is fully playable and compatible with most of the components of EndlessBG1. I tested with EndlessBG1 components:

    • #0 main component
    • #1 more flavor hero of baldur's gate
    • #2 short public hero tribute
    • #3 sarevok's unique items
    • #4 sarevok's sword
    • #6 duke eltan is in the palace
    • #8/9 elminster makes an appearance
    • #10 first refugees in baldur's gate
    • #11 ophyllis is in the palace
    • #12 denkod comments on sarevok's death
    • #13 skip the maze after sarevok's death
    • #15 fenster is in the palace
    • #16 corwin is in the palace

    Note, however, that some EndlessBG1 content will be preempted by this mod. For example, some of EndlessBG1's dialogue has the dukes really fawning over you as the big hero; with this mod, they are more ambivalent about you and don't fully trust you. So in EndlessBG1 Belt says something like “let us celebrate the hero of Baldur’s Gate!” and then has the tribute cut scene; with EndlessBG1 + this mod, Belt says “I don’t know if you are really a hero, but the people need a hero so you can play the part” and then it kicks out to the EndlessBG1 tribute scene. The dialogue is a bit different but the mod content is retained and integrated. 

    I do not recommend, and have not tested, EBG1 #5 "Imoen and Duke Jannath," since this mod take great pains to bring Imoen into the palace and install her there with Liia Jannath. There is no need for another mod to do something similar. You can probably install #7 "Flaming Fist after Sarevok Fight" but it will not make much sense because a plot point in this mod is that the dukes do not have access to the Undercity Temple and do not really know what happened in that fight. And it makes no sense to install #14 "Korlasz' Dungeon in BG1" since this mod does the same thing.

    Honestly, I think I am going to write up a Readme and release this as an open beta. There is one more thing I would like to do: alter the end of SoD so that it uses this Part 8 transition to BG2 instead of the way it works in vanilla SoD. And I have a small idea to modify the scene with the feyr at the top of Bridgefort. But for now, limiting the scope to what happens at the end of the BG1 campaign, this is basically feature-complete. So why not let people kick the tires.

    Thanks for following along! Cheers.

  4. I am going to reopen this question because this cut scene is now the only thing standing in the way of releasing a beta of my mod. Everything works, it's just... the cut scene doesn't look good. This is my cut scene at the moment:

    Spoiler
    <<<<<<<< d5/d5clcut4.baf
    IF
    	True()
    //	Global("D5DreamArea","D50104",0)
    THEN
    	RESPONSE #100
    		CutSceneId(Player1)
    		Wait(2)
    		ApplySpellRES("D5PAUSE","BDFF1002") 
    		ApplySpellRES("D5PAUSE","D5GREGS") 
    		ApplySpellRES("D5PAUSE","BELT") 
    		ApplySpellRES("D5PAUSE","LIIA") 
    		ApplySpellRES("D5PAUSE","BDENTAR") 
    		AddAreaFlag(DREAMAREA)
    		ActionOverride(Player2,MakeUnselectable(1))
    		ActionOverride(Player3,MakeUnselectable(1))
    		ActionOverride(Player4,MakeUnselectable(1))
    		ActionOverride(Player5,MakeUnselectable(1))
    		ActionOverride(Player6,MakeUnselectable(1))
    		Wait(3)
    		JumpToPoint([420.340])
    		MoveViewPoint([405.360],INSTANT)
    		ActionOverride("D5CHRNAM",JumpToPoint([320.490]))
    		ActionOverride("K#ImportContainer",TakeCreatureItems(Player1,ALL))
    		Wait(2)
    		RemoveAreaFlag(DREAMAREA)
    		Wait(1)
    		ApplySpellRES("D5PAUSX","BDFF1002") 
    		ApplySpellRES("D5PAUSX","D5GREGS") 
    		ApplySpellRES("D5PAUSX","BELT") 
    		ApplySpellRES("D5PAUSX","LIIA") 
    		ApplySpellRES("D5PAUSX","BDENTAR") 
    		Wait(1)
    		ActionOverride("LIIA",DisplayStringHead(Myself,@80035))  // Apologies, whoever you are, this might sting a bit.
    		Wait(1)
    		ActionOverride("LIIA",ForceSpellRES("D5_DIV",Player1))
    		Wait(2)
    		CreateVisualEffectObject("ICGLYPTI",Myself)
    		Wait(1)
    		PlayDead(15)
    		EndCutSceneMode()
    		ActionOverride("LIIA",StartDialogueNoSet(Player1))
    END
    >>>>>>>>

    D5PAUSE.SPL is a single-target spell applying op165 "pause target;" D5PAUSX.SPL has an op321 canceling D5PAUSE. I just want to freeze the idle animations of the ~6 NPCs on screen while the cut scene runs. That doesn't sound like it should be that hard!

    But then, belatedly I guess, I notice this:

    On 3/31/2024 at 1:47 AM, Ardanis said:

    cutscene mode ... disables crowd control effects. You can run cutscene lite

    Huh. I did not know that. So I suppose it prevents op165 from working. And presumably also the Hold, Stun, etc. opcodes.

    I just looked up SetCutSceneLite(), and... I guess it is not the same as running a cut scene. It is just a Boolean switch? I am trying to see how it would be used. Maybe, in the dialogue that normally calls the above cut scene, instead just set a variable? And then have the area script respond to that variable with a list of actions between SetCutSceneLite("true") and SetCutSceneLite("false")...?

    EDIT - yes, got it working just like that, run from the area script! Thank you!

  5. 22 minutes ago, DraikenWeAre said:

    feel atleast if you removed the minhp1 effect for this mod, it would be better.

    But the Black Pits standalone campaign is still in the game, and I don’t want to change that. The MinHP sleep/wake works for me… sounds like you might have a mod interaction interfering with it, Hard for me to pin it down from here.

    Further, what if a character does die here? There are no avenues to Raise Dead.  Now we get into the realm of, do we add temple services to an NPC? Who? Why? (Not to mention I don’t know how to do that.) And why would Baeloth give you the means to raise dead, when by the end of the adventure he wants you permanently dead? Of course that raises the question of why you have min1hp rings in the first place… but now we are acknowledging the weakness in Beamdog’s content - for which there is no immediate fix. 

    However, as I say, I have picked up some skills in the meantime. I can probably prevent the min1hp rings if you enter the Pits from BG1, and provide say, three scrolls of Raise Dead in a store there. That will fix the goofy min1hp behavior, and give you some (limited) options to keep your BG1 companions alive. 

    53 minutes ago, DraikenWeAre said:

    Potentially maybe instead of writing Charname to wanting to visit the underdark for adventure. Instead it could be written as a Trick as Baeloth is hired by the Ironthrone or Sarevok (not directly maybe but through potentially Daveron) .

    That’s a good idea. The current dialogue is really a jokey placeholder, it was not intended to be particularly good writing. It is simply designed to present the player with a binary choice (play this extra content, or have this extra NPC) which operates via dialogue. Give his initial complaint, I should probably rather have him use subterfuge: “I am a good drow, like that Drizzt guy! Bad drow are after me! Please help, oh mighty heros!” This way a good-aligned party might be suckered into the BP, while an evil-aligned party might bot care and would be more interested in recruiting him. 

     I don’t want to change the cut scene where he talks about being “dangerously diminished” etc. If he was hired Sarevok’s crew, why is he diminished? Why would he turn on them and join you? There is a fundamental problem here: the only reason for him to be diminished in power is if he was already defeated by a party in the Black Pits. But at the time you are likely to see this cut scene, it is too early for you to have done so. So it is a case where your dialogue choice retroactively changes history: if you go to the Underdark, then Baeloth was if here all along on a recruiting mission and his “diminished” dialogue is unrelated or subterfuge (see above); if you recruit him, then he has been level drained after being killed in his own arena.

    It might make sense for someone else to kidnap you or trick you on Sarevok’s behalf: a duergar, perhaps, or maybe even Najim. It could be scripted to happen after clearing the Cloakwood Mines, perhaps; and Baeloth's own appearance could be delayed until after that. This would work with the game’s timeline a lot better… but it would reduce the amount of time you could have Baeloth in the party. Which some players would hate  

    Could also separate the two events: receuit Baeloth early, or not; and then later, when you are an appropriate level, have a kidnapping scene with Najim. If Baeloth is in your party at the time, then it is a direct betrayal, and you must complete the BP with a 5-man team. If Baeloth is not in your party then it could be written as something arranged by the Iron Throne. In fact Rieltar makes a good threat about acting against you, and post-Candlekeep might be an optimal time to play this content. So it could be set up as a scripted travel encounter after leaving the Candlekeep exterior map… hmm…

  6. 1 hour ago, DraikenWeAre said:

    I don't think the geas ring should be present it causes more issues than it's worth as if a Charecter reaches zero they get stuck in an unconscious state, (or atleast remove the min1hp effect from the rings)

    Additionally If the invisible referees can be removed entirely, they are completely (100%) pointless and just preven lt Charecters walking paths.

    That is all from the vanilla Black Pits, not this mod. This mod doesn’t recreate the Black Pits; it just sends you there. Apart from a couple adjustments to prevent you being overloaded with XP and to account for the special game-ends-if-you-die nature of BG1’s Charname, this is completely the standard Black Pits experience. 

    1 hour ago, DraikenWeAre said:

    Maybe just put an npc the player can talk to ,to rest and reset spells.

    You can actually just use the ‘rest’ button in the waiting room where the shops are. I plan to remove the vanilla auto-recovery script, so that if you want to restore HP and spells you must do it manually. 

  7. 8 hours ago, jastey said:

    tried to make it work in a useful way. But: the SoD kidnapping scene happens after everyone left the party and I&J&K&M&D rejoined. Or not, if there is multiplayer characters. I tried to have it in, it makes a lot of sense, but I either didn't get it to run or NPCs were under some weird spell afterwards, had a purple circle, or whatever.

    I think I have worked it out. I am making a clone of K#TELBGT - can't use the same one, because the script will jump ahead to BG2 too early, and I don't want to change that script at all. But I can create a similar creature in the Ducal Palace and again in the FF headquarters, which will:

    1. Make all party members unselectable while Charname goes to the FF HQ for cut-scenes
    2. Take party members'  equipment and put it in K#ImportContainer (might have to refine this to exempt I/J/K/M/D)
    3. Make named party members selectable again, then kick them out of the party
    4. In BD0105, move unnamed party members there and make them selectable again, so they can join Charname through sewers and cave

    Then in BD6100, K#TELBGT will operate as usual... some of if might be redundant (move someone's equipment to the import container, but their equipment was already moved there) but that's fine. The ambush scene proceeds as normal, and you get moved to AR0602 in the BG2 campaign.

    The purple circle thing was driving me crazy. It is a result of the ActionOverride(PlayerX,MakeUnselectable(3600000)) script actions. I was desperately trying to find a way to undo that, but the game does not have any means of doing so! There is no MakeSelectable() action. But! I discovered that you can simply apply MakeUnselectable() again with a shorter duration, and it will undo the first instance of itself. I wasn't properly setting an EndOfBG1 variable before, which EET uses in its AR0602 initialization scripts. But now I have everyone going unselectable at the appropriate time, everyone leaving the party at the appropriate time, and everyone becoming selectable and reappearing for the party at the appropriate time. So, I guess, so far so good!

    I still need to do testing with various NPCs and with player-created non-Charname PCs. And I don't know what will happen in a multiplayer game. The plot here centers around Charname being cloned and separated from the rest of the party, and there is not space for other characters to be part of that. So I think my design decision for multiplayer can mimic what happens to player-created characters: the non-Charname players will see their characters become unselectable and will watch the plot unfold for Player1; then they will be transported to BD0105 where they can rejoin Player1 and regain control of their character. Then EET will transport them to AR0602 however it normally does so (I have no idea) and being freed from the cells in AR0602 will happen however it normally happens for multiplayer (I have no idea). Player2 et al. will lose control of their character for a few seconds, but that's not a big deal, it happens to Player1 plenty of times in the single-player game anyway.

    That's the idea, at least. As of this morning I have the first test install where it actually works. Except the part where I need to apply opcode 165 on some people in a cutscene. I have the cutscene script ApplySpellRES() a spell with a 30-second op165 effect, and it just... doesn't happen. I can't figure out why.

  8. 9 hours ago, jastey said:

    In case that was a question, then you could use what EndkessBG1 does

    This was my first instinct, but I am having a bit of trouble parsing what happens. When I install EndlessBG1 on EET there is a dialogue option that says "I am going to travel in the South for a while" and then this script fires:

    Spoiler
     IF
    	!AreaCheck("bd6100")  // The Ambush
     THEN
    	RESPONSE #100
    		CutSceneId(Player1)
    		FadeToColor([40.0],0)
    		DisableAI(Player1,TRUE)
    		DisableAI(Player2,TRUE)
    		DisableAI(Player3,TRUE)
    		DisableAI(Player4,TRUE)
    		DisableAI(Player5,TRUE)
    		DisableAI(Player6,TRUE)
    		SmallWait(5)
    		ActionOverride(Player2,LeaveAreaLUA("bd6100","",[535.340],SE))  // The Ambush
    		ActionOverride(Player3,LeaveAreaLUA("bd6100","",[565.280],SE))  // The Ambush
    		ActionOverride(Player4,LeaveAreaLUA("bd6100","",[505.300],SE))  // The Ambush
    		ActionOverride(Player5,LeaveAreaLUA("bd6100","",[535.230],SE))  // The Ambush
    		ActionOverride(Player6,LeaveAreaLUA("bd6100","",[470.270],SE))  // The Ambush
    		LeaveAreaLUAPanic("bd6100","",[600.330],SE)  // The Ambush
    		LeaveAreaLUA("bd6100","",[600.330],SE)  // The Ambush
    		MultiPlayerSync()
    		Wait(1)
    		SetGlobal("bd_finale","bd6100",6)  // The Ambush
    		EndCutSceneMode()
    		CreateCreatureObject("K#TELBGT",Player1,0,0,0)  // No such index
     END

    So it seems like it moves all the party members to BD6100.are?

    And then K#TELBGT.bcs runs through the creature of the same name, which seems to make all party members unselectable, take their equipment (presumably for BG2 import), and then DestroySelf() them if they are not player-created (!Name("none",Player2)). And then jump everyone left directly to BG2?

    Spoiler
    IF
    	Global("K#FrameDelay","LOCALS",0)
    THEN
    	RESPONSE #100
    		DisableAI(Player1,FALSE)
    		DisableAI(Player2,FALSE)
    		DisableAI(Player3,FALSE)
    		DisableAI(Player4,FALSE)
    		DisableAI(Player5,FALSE)
    		DisableAI(Player6,FALSE)
    		SetGlobal("K#FrameDelay","LOCALS",1)
    END
    
    IF
    	Global("K#FrameDelay","LOCALS",1)
    	!Name("None",Player2)
    THEN
    	RESPONSE #100
    		ActionOverride(Player2,MakeUnselectable(1))
    		Continue()
    END
    
    IF
    	Global("K#FrameDelay","LOCALS",1)
    	!Name("None",Player3)
    THEN
    	RESPONSE #100
    		ActionOverride(Player3,MakeUnselectable(1))
    		Continue()
    END
    
    IF
    	Global("K#FrameDelay","LOCALS",1)
    	!Name("None",Player4)
    THEN
    	RESPONSE #100
    		ActionOverride(Player4,MakeUnselectable(1))
    		Continue()
    END
    
    IF
    	Global("K#FrameDelay","LOCALS",1)
    	!Name("None",Player5)
    THEN
    	RESPONSE #100
    		ActionOverride(Player5,MakeUnselectable(1))
    		Continue()
    END
    
    IF
    	Global("K#FrameDelay","LOCALS",1)
    	!Name("None",Player6)
    THEN
    	RESPONSE #100
    		ActionOverride(Player6,MakeUnselectable(1))
    		Continue()
    END
    
    IF
    	Global("K#FrameDelay","LOCALS",1)
    THEN
    	RESPONSE #100
    		SetGlobal("K#FrameDelay","LOCALS",2)
    		AdvanceTime(ONE_MONTH)
    		ActionOverride("K#ImportContainer",TakeCreatureItems(Player1,ALL))
    		ActionOverride("K#ImportContainer",TakeCreatureItems(Player2,ALL))
    		ActionOverride("K#ImportContainer",TakeCreatureItems(Player3,ALL))
    		ActionOverride("K#ImportContainer",TakeCreatureItems(Player4,ALL))
    		ActionOverride("K#ImportContainer",TakeCreatureItems(Player5,ALL))
    		ActionOverride("K#ImportContainer",TakeCreatureItems(Player6,ALL))
    		ActionOverride("K#ImportContainer",TakeCreatureItems("Imoen2",ALL))  // Imoen
    		ActionOverride("K#ImportContainer",TakeCreatureItems("Jaheira",ALL))  // Jaheira
    		ActionOverride("K#ImportContainer",TakeCreatureItems("Minsc",ALL))  // Minsc
    END
    
    IF
    	Global("K#FrameDelay","LOCALS",2)
    THEN
    	RESPONSE #100
    		SetGlobal("K#FrameDelay","LOCALS",3)
    		ApplySpellRES("K#UNREST",Player1)  // No such index
    		ApplySpellRES("K#UNREST",Player2)  // No such index
    		ApplySpellRES("K#UNREST",Player3)  // No such index
    		ApplySpellRES("K#UNREST",Player4)  // No such index
    		ApplySpellRES("K#UNREST",Player5)  // No such index
    		ApplySpellRES("K#UNREST",Player6)  // No such index
    END
    
    IF
    	InPartyAllowDead(Player2)
    	!Name("None",Player2)
    THEN
    	RESPONSE #100
    		ActionOverride(Player2,LeaveParty())
    		ActionOverride(Player2,DestroySelf())
    		Continue()
    END
    
    IF
    	InPartyAllowDead(Player3)
    	!Name("None",Player3)
    THEN
    	RESPONSE #100
    		ActionOverride(Player3,LeaveParty())
    		ActionOverride(Player3,DestroySelf())
    		Continue()
    END
    
    IF
    	InPartyAllowDead(Player4)
    	!Name("None",Player4)
    THEN
    	RESPONSE #100
    		ActionOverride(Player4,LeaveParty())
    		ActionOverride(Player4,DestroySelf())
    		Continue()
    END
    
    IF
    	InPartyAllowDead(Player5)
    	!Name("None",Player5)
    THEN
    	RESPONSE #100
    		ActionOverride(Player5,LeaveParty())
    		ActionOverride(Player5,DestroySelf())
    		Continue()
    END
    
    IF
    	InPartyAllowDead(Player6)
    	!Name("None",Player6)
    THEN
    	RESPONSE #100
    		ActionOverride(Player6,LeaveParty())
    		ActionOverride(Player6,DestroySelf())
    		Continue()
    END
    
    IF
    	True()
    THEN
    	RESPONSE #100
    		GivePartyAllEquipment()
    		SetGlobal("bd_plot","GLOBAL",700)
    		SetGlobal("SPRITE_IS_DEADKHALID","GLOBAL",1)
    		SetGlobal("SPRITE_IS_DEADDYNAHEIR","GLOBAL",1)
    		SetGlobal("SPRITE_IS_DEADCALAHAN","GLOBAL",0)
    		SetGlobal("SPRITE_IS_DEADCARBOS","GLOBAL",0)
    		SetGlobal("SPRITE_IS_DEADDIANA","GLOBAL",0)
    		SetGlobal("SPRITE_IS_DEADEDWIN","GLOBAL",0)
    		SetGlobal("SPRITE_IS_DEADFTOWNNASH3","GLOBAL",0)
    		SetGlobal("SPRITE_IS_DEADGORF","GLOBAL",0)
    		SetGlobal("SPRITE_IS_DEADIMOEN2","GLOBAL",0)
    		SetGlobal("SPRITE_IS_DEADKING","GLOBAL",0)
    		SetGlobal("SPRITE_IS_DEADKNIGHT1","GLOBAL",0)
    		SetGlobal("SPRITE_IS_DEADPAWN","GLOBAL",0)
    		SetGlobal("SPRITE_IS_DEADQUEEN","GLOBAL",0)
    		SetGlobal("SPRITE_IS_DEADROGER","GLOBAL",0)
    		SetGlobal("SPRITE_IS_DEADSENDAI","GLOBAL",0)
    		SetGlobal("SPRITE_IS_DEADSHANK","GLOBAL",0)
    		SetGlobal("SPRITE_IS_DEADTARNOR","GLOBAL",0)
    		SetGlobal("SPRITE_IS_DEADTAZOK","GLOBAL",0)
    		SetGlobal("SPRITE_IS_DEADWILLIAM","GLOBAL",0)
    		Wait(1)
    		StartMovie("INTRO15F")
    		MoveToCampaign("SoA")
    		LeaveAreaLUAPanic("AR0602","",[3744.2801],S)  // Irenicus's Dungeon 1st Floor
    		ActionOverride(Player1,LeaveAreaLUA("AR0602","",[3744.2801],S))  // Irenicus's Dungeon 1st Floor
    		ActionOverride(Player2,LeaveAreaLUA("AR0602","",[3585.2917],SWW))  // Irenicus's Dungeon 1st Floor
    		ActionOverride(Player3,LeaveAreaLUA("AR0602","",[3532.2956],NW))  // Irenicus's Dungeon 1st Floor
    		ActionOverride(Player4,LeaveAreaLUA("AR0602","",[3374.3068],NNE))  // Irenicus's Dungeon 1st Floor
    		ActionOverride(Player5,LeaveAreaLUA("AR0602","",[3824.2447],E))  // Irenicus's Dungeon 1st Floor
    		ActionOverride(Player6,LeaveAreaLUA("AR0602","",[3889.2479],SSE))  // Irenicus's Dungeon 1st Floor
    		MultiPlayerSync()
    		DestroySelf()
    END

    I can't see where that even leaves room for the ambush cutscene to occur...

    My mod has a plot point where the party members are conspicuously removed from the party, leaving Charname alone, and then just like in SoD, Charname must escape through BD0104.are, BD0105.are, and BD6000.are, alone and with no party members, before arriving at BD6200.are. So I cannot just mimic EndlessBG1. What I need to do is more like what SoD itself does, removing the party several areas and cutscenes before Charname ever gets to BD6100. (Also, whatever SoD does to allow multiplayer games to get through this part is presumably a model I could use.)

    Put another way: Endless BG1 has an option to skip SoD in its entirety and jumps directly to BG2; my mod skip to the end of SoD, and then play through the last several scenes of SoD before transitioning to BG2.

    Maybe what I need to do is spawn a cloned version of K#TELBGT.cre, which runs K#TELBGT.bcs at that earlier stage - or, just copy the actions in that script for use in my own cutscene

  9. 10 hours ago, jmerry said:

    That's why you grab their script names from a 2DA and build your script up during installation

    I'm not sure I want to mandate a late installation here... I guess it might not hurt? I haven't really thought about install order yet.  But all of the mods that cover similar ground (EET itself, EndlessBG1, Transitions, Another Fine Hell) all come before mod NPCs in the install order.

    10 hours ago, jmerry said:

    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

    It's from EET and lots and lots of people play EET with lots of mod NPCs, so... seems okay? Also, the PlayerX values do not get reevaluated until a save/load cycle, so doing this in a single cutscene should be pretty bulletproof.

    13 hours ago, jastey said:

    K#TELBGT.bcs is for transition to BG2.

    Yes - this thread is specifically for a mod component that address the transition to BG2. SoD removes all party members (looks in the cutscenes at DragonSpear Castle post-Skie-death and the next one passing by Sorcerous Sundries) and eventually sends Charname alone to BD6100.are.  For more context, I am working on a "Skip SoD" mod component that removes all party members earlier, at the end of BG1 and then sends Charname, alone, ahead to the end-of-SoD BD6100.are.

    So the idea is to mimic how the party-member-removal is handled by SoD. Once you are in BD6100.are, whether in EET or in an EET game that will export to BG2, the game should basically "think" you have completed SoD, and handle the beginning of BG2 accordingly. If that makes sense.

  10. 17 hours ago, lynx said:

    I'm surprised your first snippet works at all, since I'd expect Player2 et al to get invalidated after all those LeavePartys.

    Yeah, me too. I suspect it would not survive a save/reload. That snippet is actually pasted together from two different scripts in two different components (for now), which were tested separately. So I didn't even notice that it shouldn't work until pasting them together here. In any event, I have since modified them and the current local version of the mod no longer has script actions targeting PlayerX after LeaveParty() commands!

    17 hours ago, jastey said:

    i was talking about bdcut61 I mentioned before

    Yes - my point was, before you pointed to me to that particular script it had not risen to my awareness. It's a real needle/haystack situation. So, thanks for that.

    I am still a bit mystified by this stuff... I installed EndlessBG1 to see how it handles the skip-SoD option, and it seems to jump the whole party right to BD6100? And then use EET's K#TELBGT, which seems to be a stand-in replacement for SoD's usual J/K/M/D handling. Regardless, removing all party members and leaving Charname alone is a plot point here, so that is probably not something to emulate.

    16 hours ago, jmerry said:

    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.

    But that would not address any mod NPCs. And as I say, it is a plot point that Charname gets separated from the rest of the party members. (I just played the end of BG1 in an EET with Breagar in my party, and it is quite jarring - in the transition to SoD all party members leave as expected except Breagar who basically sleeps in Charname's bed with you and wakes up for the poisoning scene.

    At any rate, SoD includes this in the aforementioned BDCUT61.bcs:

    IF
    	InPartyAllowDead("JAHEIRA")  // Jaheira
    THEN
    	RESPONSE #100
    		CutSceneId(Player1)
    		SetGlobal("bd_jaheira_party_epilogue","global",1)
    		ActionOverride("JAHEIRA",LeaveParty())
    		ActionOverride("JAHEIRA",DestroyAllFragileEquipment(ADAMANTINE))
    END
    
    IF
    	InPartyAllowDead("KHALID")  // Khalid
    THEN
    	RESPONSE #100
    		CutSceneId(Player1)
    		SetGlobal("bd_khalid_party_epilogue","global",1)
    		ActionOverride("KHALID",LeaveParty())
    		ActionOverride("KHALID",DestroyAllFragileEquipment(ADAMANTINE))
    END
    
    [etc. with all other vanilla named NPCs]
    
    IF
    	InPartyAllowDead(Player2)
    	!Name("None",Player2)
    THEN
    	RESPONSE #100
    		CutSceneId(Player1)
    		ActionOverride(Player2,DestroyAllFragileEquipment(ADAMANTINE))
    		ActionOverride(Player2,LeaveParty())
    END
    
    IF
    	InPartyAllowDead(Player3)
    	!Name("None",Player3)
    THEN
    	RESPONSE #100
    		CutSceneId(Player1)
    		ActionOverride(Player3,DestroyAllFragileEquipment(ADAMANTINE))
    		ActionOverride(Player3,LeaveParty())
    END
    
    IF
    	InPartyAllowDead(Player4)
    	!Name("None",Player4)
    THEN
    	RESPONSE #100
    		CutSceneId(Player1)
    		ActionOverride(Player4,DestroyAllFragileEquipment(ADAMANTINE))
    		ActionOverride(Player4,LeaveParty())
    END
    
    IF
    	InPartyAllowDead(Player5)
    	!Name("None",Player5)
    THEN
    	RESPONSE #100
    		CutSceneId(Player1)
    		ActionOverride(Player5,DestroyAllFragileEquipment(ADAMANTINE))
    		ActionOverride(Player5,LeaveParty())
    END
    
    IF
    	InPartyAllowDead(Player6)
    	!Name("None",Player6)
    THEN
    	RESPONSE #100
    		CutSceneId(Player1)
    		ActionOverride(Player6,DestroyAllFragileEquipment(ADAMANTINE))
    		ActionOverride(Player6,LeaveParty())
    END

    So I think I just need to expand my leaving script to follow this pattern. As far as keeping them somewhere accessible for that later MoveToGlobal() action, I will just have to contrive to leave them in some area (at the moment, that's the BG1 Ducal Palace) so the separation can occur without need for any EscapeArea() antics.

  11. 13 hours ago, jastey said:

    CreateCreature will spawn the "untouched" cre. If you want players to come visit with pitchforks, go ahead. ^^

    It's Jaheira, Minsc, Khalid & Dynaheir. The former two must have no equipment when next you see them in Chateau Irenicus, and the latter two are gone for good immedately after the ambush cut scene. Equipment that gets transferred from Bg1/SoD into BG2 is pretty tightly controlled, so for purposes of the ambush scene it really doesn't matter what equipment they have.

    7 hours ago, jastey said:

    SoD does this itself, I think it's bdcut61 or something

    Thanks I'll take a look at that. TBH it's been hard to find out exactly what does what at the end of SoD, because it's a long collection of dialogues, scripted area transitions, and cut scenes. I mean, this last part of this mod is a bunch of dialogues, area scripts, and cut scenes that have been quite annoying to put together. But SoD is like 10 times as much.

    7 hours ago, jastey said:

    The reason why I used the original cutscene from SoD for EndlessBG1

    See, I don't even know what "original cutscene" you are talking about. There are like 20-30 cutscenes at the end of SoD, and they are not named in a way that makes them easy to identify.

    7 hours ago, jastey said:

    What I'm trying to say: just kicking Player2-6 will not be very mod friendly /compatible.

    Also: make sure you are not kicking Multiplayers.

    Yeah, well, you gotta crawl before you walk before you run. I'm not even worrying about multiplayer stuff yet. I don't even know how that would work. If you have three players together, how does the game get J/K/M/D to Chateau Irenicus? For the moment this is a back-burner concern.

  12. Sorry if it wasn’t clear. The NPCs need to leave the party, and then not be in the same area as Player1. We don’t know which NPCs will be in the party, so this happens to Player2 through Player6.

    Then, later, Jaheira/Khalid/Minsc/Dynaheir need to be moved to Player1’s area. Specified by their script name. 

    The issue is, if Player2 is Minsc in the first part, then Minsc becomes unavailable in the second part. It sounds like MakeGlobal() is the solution here. 

    (Also, I have a workaround in how I handled the first part: I leave all NPCs behind in a cut scene area transition before the LeaveParty() action. That cut scene is slightly less ideal, but it obviates the need for any EscapeArea() actions.)

  13. I need all the party members to leave the party, and leave the area they are in so that Charname cannot accidentally run into them.

    	ActionOverride(Player2,LeaveParty())
    	ActionOverride(Player3,LeaveParty())
    	ActionOverride(Player4,LeaveParty())
    	ActionOverride(Player5,LeaveParty())
    	ActionOverride(Player6,LeaveParty())
    	Wait(1)
    	ActionOverride(Player2,EscapeAreaObject("TranBD0030"))
    	ActionOverride(Player3,EscapeAreaObject("TranBD0030"))
    	ActionOverride(Player4,EscapeAreaObject("TranBD0030"))
    	ActionOverride(Player5,EscapeAreaObject("TranBD0030"))
    	ActionOverride(Player6,EscapeAreaObject("TranBD0030"))

    However, I also need them to be available to reappear later; the SoD script before the ambush scene uses:

    	MoveGlobal("bd6200","JAHEIRA",[1470.1205])  // Jaheira
    	MoveGlobal("bd6200","KHALID",[1545.1230])  // Khalid

    When I look at Jaheira in a savegame in NI, it says:

    Current Area: none

    So evidently the EscapeAreaObject() action removed Jaheira & Khalid, and made them inaccessible for a later MoveGlobal() action?

    So how can I make the party members disappear, but keep them accessible? I don't want to use LeaveAreaLUA() because the camera will follow them (I think).

    Should I change that MoveGlobal() action into a CreateCreature() action?

    EDIT - I guess CreateCreature() would create them without any equipment. But then again maybe that’s okay? This is for the ambush scene after all, and Minsc & Jaheira should not have any equipment at the start of BG2

  14. 14 hours ago, jastey said:

    The transition to BGII in EET is very sensitive. EndlessBG1 uses as much of EET's original transition as possible, because I ran into problems of all sorts, too. Meaning, even if SoD is skipped, the group is teleported to the last SoD area so the normal transition can trigger.

    Yes: currently I made clones of the FF HQ and the sewers/cave map, but the exit from my custom cave map sends you to BD6200.are, where Imoen is waiting and she takes you to J/K/M/D. I have not modified that area at all

    Actually now that I think about it, in my test game I only have EET and Reflections installed - I forgot to install EET_End after Reflections. I’m willing to bet that is the problem. 

    The only issue I am seeing on a SoD game is that, with an ending party of Imoen/Jaheira/Khalid, only Imoen, Minsc, and Dynaheir show up in BD6200. Imoen is not an issue because I think “IMOEN” was in my party while “BDIMOEN” appears in BD6100.are. So something is happening where of the other four, the ones in my party for the Sarevok fight are not showing up for the ambush. Probably just some variable needs to be set - I‘ll look at the scripts in BD6200. Also, Imoen’s dialogue in BD6200 needs to be adjusted very slightly.

    But those are the only three things on my to-do list. As soon as I square those things away I can work on EndlessBG1 compatibility, and maybe release an open beta. Maybe not in that order? We’ll see. 

    I have ideas for two, maybe three components addressing story stuff in SoD proper… but that is further down the road. I need a break for a bit. 

    EDIT - oh, and I am not currently happy with my Timestop cut scene. It only visually simulates a Timestop, but the NPCs are all doing their idle animations and I’m not sure how to stop them. Maybe need to, like, ApplySpellRES() each one with a spell applying op165? Or maybe need an invisible creature to cast an area-effect spell? I had a version where Charname is scripted to cast an area-effect spell, but even with ReallyForceSpell and casting time 0, it has a casting animation, which I don’t want. So, four things on the to-do list. 

    EDIT - cripes. Why is there a MakeaUnselectable() script action but no MakeSelectable() script action??

    I can't figure out why Charname is remaining unselectable when the game moves to BG2. Relatedly, I can't figure out how Imoen/Jaheira/Minsc are made selectable when moved to AR0602.

  15. PI organizes things nicely, but at the end of the day it still installs mods sequentially, mod component after mod component, with dozens or even hundreds of components. Removing a component from the middle of the stack requires Weidu to uninstall all the later components, and then reinstall them. Which it is designed to do! But, it is asking for trouble. I would not advise it. 

  16. 35 minutes ago, DraikenWeAre said:

    Don't know if this is incompatibility with another Mod or this Mod itself.

    But after tier two boss fight, I'm having this bug where in the normal BP Najim is supposed to be summoned and give dialog but here it just keeps spamming in and out of cutscene mod .

    Do you have Near Infinity? If so find BPNajim.cre and see if he has a 'Script Name" set. (Should be "bpnajim" or something very like that.) If not, then it is indeed related to another mod, installing this hotfix should fix it.

    Thanks for the feedback. My work on the "Reflections" BG1/SoD mod has made me a lot more comfortable with modding dialogues, so addressing these issues with Baeloth is next on my list.

  17. Muahahahaha... I have this fully working! I combined part 8, "Man in the Mirror," with Part 9, "the Great Escape," and successfully completed the transition to BG2 from BG1, skipping SoD, in an EET game. Well, mostly successfully - the game is acting a bit weird in Chateau Irenicus, Charname is still purple-circle like from the ambush scene and I cannot select her or move her. But I don't think that is related to this mod; this mod should not really be capable of making that happen. Unless EET expects some particular variables to be set, or something? I will look at how EndlessBG1 handles that transition. It might also be related to the ridiculous test run I did to get my character to the transition point - never taking any party members, and ctrl-Y'ing every enemy in the game. Hard to tell what the problem it.

    Meantime, I just need to install the mod on a non-EET SoD game to make sure it all works there. Then I'll post the last update and, maybe, release it as an open beta for others to play it and give feedback.

  18. 54 minutes ago, argent77 said:

    That has been fixed last year in one of the commits among many other issues. In general, EET has been greatly improved since the latest official release. By now I would always suggest to download and play the latest master branch version instead of the (outdated) release version.

    Well, I’m playing BG2EE v2.5 so I cannot use recent versions. Good to know that’s been fixed though, it means I can just implement a simple local fix for myself. 

  19. I know I haven't posted much here, but I just finished SoD. Spent some time with Drake the Rake(/cleric) and he is indeed wildly awesome, sniping with crossbows and all the good crossbow ammo in SoD, and dual-wielding longsword+dagger, and also a functional single-class cleric. Also, Drake has great SoD content! There is an extra random encounter, and you meet some members of the Amnish Order of the Noble Heart, and they can join the coalition and act as an extra optional squad for use in the various Coalition Camp battles! Artemius_I did an excellent job with this one.

    Anyway, I dropped for Glint after a bit. Glint is much more reasonably powered, and his spells with the Faiths & Powers sphere system are less battle-oriented. I had Jaheira and Khalid along for a bit, then took Voghiln toward the end. My party at the end of SoD was:

    • Charname (fighter/druid)
    • Sirene (paladin)
    • Voghiln (fighter/mage)
    • Glint (cleric/thief)
    • Walahnan (mage)
    • Neera (mage)

    A bit crazy, in this run I was like "Hm, I've never taken Brandock the whole way through before, I'll include him!" and "I've never taken Neera the whole way through before, I'll include her!" and "I've never played with Walahnan before, I'll include him!" Lol, way too many mages.

    SoD itself is... eh, the story is crazy. Like, the whole thing could be taken care of if Charname just doesn't go into the castle! That's bonkers. And by the time you get there, you already know what Hephernaan is up to. The story needs you to get into that room, but your whole motivation the whole time is to not go there! Also, the mechanism for opening the portal is weak. I have mentioned something like this elsewhere in relation to Sarevok and Amelysan: the mere spilling of blood should not do anything special. Look at Irenicus for an excellent example of how to use artifact-level magic: it takes weeks of experiments, a giant soul-stealing machine, lots of innocent victims as, effectively, reagents, several long rituals, and a separate artifact (the Tree of Life) that itself already has the power of a god. The idea that Sarevok/Hephernaan/Amelysan could just snap their fingers and suddenly your blood is a useful magical item? That's weak writing.

    Also, Charname's status as a Bhaalspawn is poorly handled. It is not really known, but Caelar knows it perfectly well, and she shouts about it so everyone she talks to knows it. But the crossing at Boareskyr Bridge is supposed to be some kind of revelation. And then later, back in Baldur's Gate, it becomes public knowledge - as if it was not already? And, finally, the idea that the Hooded Man can cast a simple divination spell and determine that Caelar is or isn't a Bhaalspawn is weak. If you could find it out via a simple divination, then why don't some powerful people find all the Bhaalspawn before they become powerful, just round them up and Imprison them or something?

    I think the whole main plot would be rewritten with a surprisingly small number of changes. Caelar's goal and motivation could be made much stronger with just a few modified dialogues. And the mechanism for opening the portal could be made more sensible. I need to think about the details, but it is definitely something I plan to address in a mod.

    Meanwhile, the EET transition from SoD to BG2 is fantastic. You meet up with I/J/K/M/D, and the ambush scene happens, and then the BG2 intro movie, and then boom, you are in the dungeon and Imoen/Jaheira/Minsc are right there. It feels like a very fast continuation of your adventure - the transition from the ambush to Chateau Irenicus feels a bit like going from the Cloakwood Forest to the first level of the Cloakwood Mine. Which is perfect, because that is how it should feel. You just fight through some baddies, find some gear, keep adventuring... not yet aware that this transition is actually quite different.

    The only fly in that ointment is that, just like last time I played EET, I started out in Irenicus' Dungeon with a huge amount of fatigue. The game scripts a time-jump of like 10 or 20 days, and somehow it keeps Charname awake the whole time. Does this happen to anyone else? I can code up a hotfix for it easily enough, but maybe it is something peculiar about my install? Is it because I am using an older version of EET?

  20. 10 minutes ago, GawainBS said:

    The only small point of critique that I have, is that the kits/classes aren't very clear which weapons/armours/shields they can use.

    That has been addressed in the recent builds. Well, as far as weapons anyway. All clerics can use all shields and there are only a few kits that are restricted from using plate armor. (Basically just the nerdy deities like Oghma/Deneir/Azuth/etc.)

  21. Oh, you're using an old version of the mod. TBH I'm not sure I can speak to what is happening there. Changing 2da table values will only fix available proficiencies, not usability. Usability should not be affected for such classes at any rate.

    Best I can say is you are better off using the latest versions of the mod, which are the 'SD' branch (v0.86 - you look like you are using v0.85 or 0.84).

    Meantime, I have updated the SD branch to v0.86.9, which fixes the spontaneous casting issue mentioned by @Magevro and also adds a French translation.

  22. 1 hour ago, GawainBS said:

    Is it deliberate that very few spheres contain the Iron Skin spell? Is it intended as a nerf for Divine casters?

    It depends on the sphere system. But in most, it is in the sphere of Earth. Any kits with that sphere will get it - druids, plus various cleric kits. So access is actually a bit more liberal gan in vanilla. Only thing is, it might be renamed “Stoneskin” because “Iron Skins” is not very druid-y. But it’s the same spell. 

    1 hour ago, GawainBS said:

    I created a Paladin (Zealot) of Eilistriae, Darksong Knight, I believe. She couldn't use any weapon, apart from blunt weapons. This doesn't seem right for the kit.

    I’m pretty sure paladins are not subject to the mod’s custom weapon restrictions. That’s only for clerics So something else is going on. 

×
×
  • Create New...