Jump to content

Salk

Modders
  • Posts

    3,388
  • Joined

  • Last visited

Posts posted by Salk

  1. Hello again.

    If I may ask more about this StartCutScene() and StartCutSceneEx(), I have now noticed that in SCAR.DLG (BG EE) we have this:

    SetGlobal("ScarMission","GLOBAL",99)
    ClearAllActions()
    StartCutSceneMode()
    StartCutScene("Scarcut")

    Here StartCutScene() is used as opposed to StartCutSceneEx(). But then I check starcut.bcs and the script does contain triggers in the first two blocks:

    IF
        Global("BQDoor0606","GLOBAL",0)
    THEN
        RESPONSE #100
            CutSceneId("Scar")  // Scar
            OpenDoor("DOOR0606")
            MoveToPoint([1487.1291])
            EscapeArea()
    END
    
    IF
        Global("BQDoor0606","GLOBAL",1)
    THEN
        RESPONSE #100
            CutSceneId("Scar")  // Scar
            MoveToPoint([1487.1291])
            EscapeArea()
    END

    At this point, I am confused because from what I understood, those two scripts will ignore the triggers and run because the cutscene has been activated with StartCutScene("Scarcut") instead of StartCutSceneEx("Scarcut", TRUE) ?

    Thanks.

     

     

  2. jastey,

    maybe I can ask for your assistance again. Let's say that in a .D file I have the following:

    IF ~~ THEN BEGIN 2
      SAY #15211
      IF ~~ THEN DO ~SetGlobal("Captured","GLOBAL",1)ClearAllActions()StartCutSceneMode()StartCutScene("Capcut01")~ UNSOLVED_JOURNAL #26844 EXIT
    END

    And let's say that for State 2 up there I want to add another response nearly identical to the existing one (I only want to have a response trigger and a different cutscene) so that it would end up like this:

    IF ~~ THEN BEGIN 2
      SAY #15211
      IF ~~ THEN DO ~SetGlobal("Captured","GLOBAL",1)ClearAllActions()StartCutSceneMode()StartCutScene("Capcut01")~ UNSOLVED_JOURNAL #26844 EXIT
      IF ~!InMyArea(Player3)!InMyArea(Player4)~ THEN DO ~SetGlobal("Captured","GLOBAL",1)ClearAllActions()StartCutSceneMode()StartCutScene("Capcut08")~ UNSOLVED_JOURNAL #26844 EXIT
    END

    What WeiDU function should I use? COPY_TRANS? Could you help me figure this out?

    Thanks.

  3. Oh let me see if I understand this correctly. With StartCutScene() it does not matter what triggers are in the IF section of the block, they behave like they were all True()?

    If that is the case, I find it very weird and honestly unexpected. 

    Unfortunately it seems the classic engine does not support StartCutSceneEx().

  4. Ok, thank you.

    I did read the IESDP entry but I am still not sure I understand how it works.

    Capcut03 has 3 blocks. StartCutScene() would run all 3 of them at the same time and checks the triggers for each one. If true, the response triggers and if not, the block doesn't produce anything, correct? So block3 always triggers. Block1 triggers if Player3 and Player3 are not In the script caller's area. Block2 triggers if Player4 and Player5 are not In the script caller's area. That is, if I understand how StartCutScene() works.

    How would StartCutSceneEx() change this dynamic?

  5. Hello!

    Can someone tell me how StartCutSceneEx() works?

    In BG EE I have this in capcut01:

    IF
        True()
    THEN
        RESPONSE #100
            CutSceneId(Player1)
            FadeToColor([30.0],0)
            Wait(1)
            LeaveAreaLUAPanic("AR0607","",[951.774],NE)  // Flaming Fist HQ, ground floor
            LeaveAreaLUA("AR0607","",[951.774],NE)  // Flaming Fist HQ, ground floor
            SetMasterArea("AR1100")  // SW Baldur's Gate (Flaming Fist HQ, Merchant League, Seven Suns)
            MultiPlayerSync()
            CreateCreature("FLAME3",[1143.891],N)  // Flaming Fist Mercenary
            CreateCreature("FLAME1",[800.742],E)  // Flaming Fist Mercenary
            CreateCreature("FLAME2",[932.831],NE)  // Flaming Fist Mercenary
            CreateCreature("FLAME4",[1060.668],SW)  // Flaming Fist Mercenary
            ActionOverride("FLAME4",SetDialog("flamc7"))
            ActionOverride("Chimp5",DestroySelf())
            ActionOverride("Fergus",DestroySelf())
            ActionOverride("DICKSMOK",SetNumTimesTalkedTo(1))
            MultiPlayerSync()
            StartCutSceneEx("Capcut03",TRUE)
    END
    
    ...

    and capcut03 is:

    IF
        !InMyArea(Player3)
        !InMyArea(Player4)
    THEN
        RESPONSE #100
            CutSceneId("FLAME1")  // Flaming Fist Mercenary
            JumpToPoint([678.857])
            Face(NE)
    END
    
    IF
        !InMyArea(Player2)
        !InMyArea(Player6)
    THEN
        RESPONSE #100
            CutSceneId("FLAME3")  // Flaming Fist Mercenary
            JumpToPoint([1096.1001])
            Face(NWW)
    END
    
    IF
        True()
    THEN
        RESPONSE #100
            CutSceneId(Player1)
            Wait(2)
            AdvanceTime(TWO_HOURS)
            FadeFromColor([30.0],0)
            Wait(4)
            CreateCreature("ANGELO",[924.598],S)  // Angelo
            Wait(2)
            ActionOverride("Angelo",MoveToPoint([1018.638]))
            ActionOverride("Angelo",FaceObject(Player1))
            Wait(1)
            ActionOverride("DICKSMOK",MoveToPoint([1238.723]))
            ActionOverride("DICKSMOK",FaceObject(Player1))
            Wait(2)
            EndCutSceneMode()
            ActionOverride("Flame4",StartDialogueNoSet(Player1))
    END

    What happens if instead of StartCutSceneEx("Capcut03",TRUE), I just use StartCutScene("Capcut03")?

    Thanks!

     
  6. Hello!

    The EE games have the AdvanceTime() function but I figure DayNight() can be properly used to advance time too although I fear that it might only truly work when it comes to advancing days, rather than hours.

    In fact, if I use DayNight(NOON) and the game time is ex. 4 PM, I guess time will be rewound 4 hours. Correct?

    If that is so, then there is no way to advance time via script for the classic game?

    Thanks!

  7. Hello again!

    I was wondering if there is also a quick way to get the str ref from a dialogue state in order to replace the associated text with something else.

    Case in point: BELLAM.DLG State 1 includes the text "Good day to ya." and that text comes from a specific string reference (in my case 76167). If the string reference was always 76167 it would not be a problem. I just use STRING_SET 76167 ~My new string replacing the original~ but the string reference can be different so I'd need to extract it from the dialog file.

    Looking at jmerry's advice above and considering that the string I need to change is at State 1 in the BELLAM.DLG file, I thought that I could do something like:

    COPY_EXISTING ~BELLAM.DLG~             ~override~
        READ_LONG 0xc stateoffset
        READ_STRREF (%stateoffset% + 10) oldstring
        STRING_SET_EVALUATE %oldstring% ~My new string~

    but I am quite sure it's not right or ideal and at the moment I am unable to test it directly so I am just asking for theoretical criticisms and advice. 

    Any suggestions?

    (e) Tested and not working, as expected. I guess it's  because there is no string reference at all there.

  8. Yes, thank you, Mike.

    The way l see it is either IR follows suit with the IRR change or IRR undoes it.

    If it was an initial choice of course IR's overwriting of original items would need voting down but now it's been like that for many years and it's become accepted.

    Personally I'd rather see IRR undo it but it's up to Bartimaeus and I'll respect his choice no matter what.

  9. Hello!

    At the moment, I am not really able to do much investigating or testing but I would like to check with you whether the latest official Item Revisions version introduces helm02_.itm into the game or if it was just Item Revisions Revised's initiative. 

  10. Hello, polytope.

    Thanks for the advice. I had already gone for solution 1 but I wanted to know if there were other better solutions available hence this topic.

    My script block was this:

    IF
        See([PC])
        Allegiance(Myself,ENEMY)
    THEN
        RESPONSE #100
            Panic()
    END

    I wanted to add a CheckStat for panic as trigger but I read that it only returns true for magically induced panicked state.

    About the impassable NPC flags for doors instead, I guess I could revert the flag when the panicked state stops (creature death).

  11. Hello!

    I was wondering which is the easiest and simplest way to make sure that a neutral creature that turns hostile is just going to run from the fight in a panicked state.

    Also, I'd need to make sure that the panicked creature won't leave the area.

    Thanks!

  12. Now it's been some time but I think that originally I didn't have a state number but rather something like you suggested: newstate1.

    But if I remember well, things wouldn't work because later in the code I have:

    /****** TELMAN ******/
    
    APPEND TELMAN
        IF WEIGHT #6 ~Global("TenyaStory","GLOBAL",1)
        ~ THEN BEGIN 15 // from:
          SAY @209  /* ~You again?~ */
          IF ~~ THEN EXTERN ~SONNER~ 27
        END
    END

    And there I should also replace 27 with newstate1. I think it wouldn't work and that's why I changed to a direct state number, but unfortunately at the moment I am unable to test it.

    Thanks for the advice about ALTER_TRANS. I usually use ADD_TRANS_ACTION and ADD_STATE_TRIGGER but I seem to remember that in some cases I was sort of forced to use ALTER_TRANS.

  13. Hello!

    I have the following code (#gfisherdlg.d):

    /****** SONNER ******/
    EXTEND_TOP SONNER 4
      IF ~Global("TenyaStory","GLOBAL",1)~ THEN REPLY @210 /* ~The child has said that you killed her mother and have been taking far too much from the seas. I don't like being used, Sonner. It makes me... angry.~ */ EXTERN ~TELMAN~ 6
    END
    ALTER_TRANS SONNER 
        BEGIN 8 END
        BEGIN 0 END
        BEGIN
            "ACTION" ~SetGlobal("HelpJebadoh","GLOBAL",3)
                EraseJournalEntry(%sonnjour1%)
                EraseJournalEntry(%sonnjour2%)
                EraseJournalEntry(%sonnjour3%)
                EraseJournalEntry(%sonnjour4%)
                EraseJournalEntry(%sonnjour5%)
                EraseJournalEntry(%sonnjour6%)
                EraseJournalEntry(%sonnjour7%)
                EraseJournalEntry(%sonnjour8%)
                EraseJournalEntry(%sonnjour9%)~
        END
        
    ALTER_TRANS SONNER
        BEGIN 10 END
        BEGIN 0 END
        BEGIN
            "ACTION" ~SetGlobal("HelpJebadoh","GLOBAL",3)
                EraseJournalEntry(%sonnjour1%)
                EraseJournalEntry(%sonnjour2%)
                EraseJournalEntry(%sonnjour3%)
                EraseJournalEntry(%sonnjour4%)
                EraseJournalEntry(%sonnjour5%)
                EraseJournalEntry(%sonnjour6%)
                EraseJournalEntry(%sonnjour7%)
                EraseJournalEntry(%sonnjour8%)
                EraseJournalEntry(%sonnjour9%)~
        END
        
    ALTER_TRANS SONNER
        BEGIN 13 END
        BEGIN 0 END
        BEGIN
            "ACTION" ~SetGlobal("HelpJebadoh","GLOBAL",3)
                EraseJournalEntry(%sonnjour1%)
                EraseJournalEntry(%sonnjour2%)
                EraseJournalEntry(%sonnjour3%)
                EraseJournalEntry(%sonnjour4%)
                EraseJournalEntry(%sonnjour5%)
                EraseJournalEntry(%sonnjour6%)
                EraseJournalEntry(%sonnjour7%)
                EraseJournalEntry(%sonnjour8%)
                EraseJournalEntry(%sonnjour9%)~
        END
        
    ALTER_TRANS SONNER
        BEGIN 14 END
        BEGIN 1 END
        BEGIN
            "TRIGGER" ~Global("HelpJebadoh","GLOBAL",1)~
        END
    
    EXTEND_BOTTOM SONNER 14
      IF ~~ THEN REPLY @211 /* ~You will die for your trickery!~ */ DO ~SetGlobal("HostileFishermen","GLOBAL",1)~ EXIT
    END
    
    ALTER_TRANS SONNER
        BEGIN 17 END
        BEGIN 0 END
        BEGIN
            "ACTION" ~SetGlobal("HelpJebadoh","GLOBAL",3)~
        END
        
    ALTER_TRANS SONNER
        BEGIN 18 END
        BEGIN 0 END
        BEGIN
            "ACTION" ~GivePartyGoldGlobal("FisherPrice","GLOBAL")
                AddexperienceParty(1000)
                GiveItem("BLUN03",[PC])
                ActionOverride("Telman",EscapeArea())
                ActionOverride("Jebadoh",EscapeArea())
                EscapeArea()
                EraseJournalEntry(%sonnjour2%)
                EraseJournalEntry(%sonnjour3%)
                EraseJournalEntry(%sonnjour4%)
                EraseJournalEntry(%sonnjour5%)
                EraseJournalEntry(%sonnjour6%)
                EraseJournalEntry(%sonnjour7%)
                EraseJournalEntry(%sonnjour8%)
                EraseJournalEntry(%sonnjour9%)~ 
            "SOLVED_JOURNAL" ~#%sonnjour10%~
        END
        
    APPEND SONNER
        IF WEIGHT #6 ~Global("TenyaStory","GLOBAL",1)~ THEN BEGIN 27 // from:
        SAY @209  /* ~You again?~ */
        IF ~~ THEN REPLY @210 /* ~The child has said that you killed her mother and have been taking far too much from the seas. I don't like being used, Sonner. It makes me... angry.~ */ EXTERN ~TELMAN~ 6
        END
    END
    
    /****** JEBADO ******/
    REPLACE_STATE_TRIGGER JEBADO 10 ~Global("HelpJebadoh","GLOBAL",2)~
    ALTER_TRANS JEBADO 
        BEGIN 7 END 
        BEGIN 0 END
        BEGIN
            "ACTION" ~~
            "EPILOGUE" ~EXTERN SONNER 7~
        END
    APPEND JEBADO 
        IF WEIGHT #7 ~Global("TenyaStory","GLOBAL",1)
        ~ THEN BEGIN 12 // from:
        SAY @209  /* ~You again?~ */
        IF ~~ THEN EXTERN ~SONNER~ 27
        END
    END
    
    /****** TELMAN ******/
    
    APPEND TELMAN
        IF WEIGHT #6 ~Global("TenyaStory","GLOBAL",1)
        ~ THEN BEGIN 15 // from:
          SAY @209  /* ~You again?~ */
          IF ~~ THEN EXTERN ~SONNER~ 27
        END
    END
    
    /****** TENYA ******/
    ALTER_TRANS TENYA
        BEGIN 2 END
        BEGIN 0 END
        BEGIN
            "ACTION" ~GiveItemCreate("minhp1","TENYA",0,0,0)
                    ActionOverride("TENYA",FillSlot(SLOT_AMULET))
                    Enemy()~
        END
    ALTER_TRANS TENYA
        BEGIN 5 END
        BEGIN 0 END
        BEGIN
            "ACTION" ~SetGlobal("TenyaHit","GLOBAL",2)
                ChangeEnemyAlly(Myself,NEUTRAL)
                ClearAllActions()
                ActionOverride(Player1,ClearAllActions())
                ActionOverride(Player2,ClearAllActions())
                ActionOverride(Player3,ClearAllActions())
                ActionOverride(Player4,ClearAllActions())
                ActionOverride(Player5,ClearAllActions())
                ActionOverride(Player6,ClearAllActions())
                SetGlobal("TenyaStory","GLOBAL",1)~
        END
    ALTER_TRANS TENYA
        BEGIN 5 END
        BEGIN 1 END
        BEGIN
            "ACTION" ~SetGlobal("TenyaHit","GLOBAL",2)
                ChangeEnemyAlly(Myself,NEUTRAL)
                ClearAllActions()
                SetGlobal("TenyaStory","GLOBAL",1)
                EraseJournalEntry(%sonnjour1%)
                EraseJournalEntry(%sonnjour2%)
                EraseJournalEntry(%sonnjour3%)
                EraseJournalEntry(%sonnjour4%)
                EraseJournalEntry(%sonnjour5%)
                EraseJournalEntry(%sonnjour6%)
                EraseJournalEntry(%sonnjour7%)
                EraseJournalEntry(%sonnjour8%)
                EraseJournalEntry(%sonnjour9%)~
        END
    
    ALTER_TRANS TENYA
        BEGIN 10 END
        BEGIN 0 END
        BEGIN
            "ACTION" ~SetGlobal("HelpTenya","GLOBAL",2)
                TakePartyItem("MISC53")
                AddexperienceParty(1000)
                SetGlobal("TalkedToTenya","GLOBAL",1)
                ForceSpell(Myself,DRYAD_TELEPORT)
                SetGlobal("HelpJebadoh","GLOBAL",3)
                EraseJournalEntry(%sonnjour1%)
                EraseJournalEntry(%sonnjour2%)
                EraseJournalEntry(%sonnjour3%)
                EraseJournalEntry(%sonnjour4%)
                EraseJournalEntry(%sonnjour5%)
                EraseJournalEntry(%sonnjour6%)
                EraseJournalEntry(%sonnjour7%)
                EraseJournalEntry(%sonnjour8%)
                EraseJournalEntry(%sonnjour9%)~
        END
        
    ALTER_TRANS TENYA
        BEGIN 16 END
        BEGIN 0 END
        BEGIN
            "EPILOGUE" ~GOTO 13~
        END

    There is an incompatibility with a BG1 NPC project component that already modifies SONNER.DLG, adding a few states. The code above assumes that state 27 in SONNER.DLG is the next free state when it is not.

    The code under /****** TELMAN ******/ also uses EXTERN to reference state 27.

    At first I thought I could use READ_SHORT 0x8 statesnum to count the number of states and replace 27 with "(%statesnum% + 1) but I don't think it works.

    Any suggestions?

    Thanks!

  14. 3 hours ago, Bartimaeus said:

    Understandable: from what I know, ToBEx enables it for use but doesn't actually do so, so you would have to use BGT Tweaks (or SRR) to make use of it. There is probably at least one other mod or two that also makes use of it, I would imagine.

    I used to install the BGT Tweak component for it because I didn't know you took care of that inside SRR. One thing to remove from my installation list then. :beer:

×
×
  • Create New...