-
Posts
3,388 -
Joined
-
Last visited
Content Type
Forums
Events
Downloads
Gallery
Mods
News
Store
Posts posted by Salk
-
-
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.
-
Thanks for your advice, jastey!
-
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.
-
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(). -
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?
-
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!
-
Thanks.
-
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!
-
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.
-
Yes, at this point I will just have to wait to see what Item Revisions will do about the Helm of Opposite Alignment. I find Bartimaeus' suggestion to just duplicate IRR's change to be a good solution.
-
My bad for not checking on this personally.
Unfortunately I have much on my plate at the moment.
-
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.
-
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.
-
Hello, Mike!
I will release a new version soon enough.
-
Hi!
Question: will it be compatible with BGT?
-
Okay, thanks.
-
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).
-
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!
-
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.
-
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!
-
Thanks, jastey and mickabouille!
-
Hello!
Does anyone know if the game engine (classic) capitalizes tokens' first letter after punctuations like full period or question and exclamation marks?
Thanks!
-
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.
-
Yes, of course.
I misunderstood the ""Disable hostile reaction after charm" was one of the very first things I ever did in SRR part...
Spellhold Studios Forum down?
in Noobermeet
Posted
Hi!
I have not been able to access the SHS Forum for 3-4 days now. Can others confirm it's been down for quite some time?
Thanks!