Jump to content

Imoen is talking, but Gavin (the PC) is asleep


berelinde

Recommended Posts

Sorry, that was me, I forgot to log in.

 

I mean, the first dialogue with Imoen, I believe one the the responses during it is "Gorion is dead, mysterious assassins are after me and I can't imagine how I'm gonna live through the day. You?"

 

Whats the global I can set to tell the system that that banter already happened?

 

And I'm using v12 beta 3.

Link to comment

That's actually a friendtalk, and messing with that is like messing with a lovetalk with the console: tricky, because it can mess up later friendtalks. The timer is supposed to advance to the next click once it's initiated. Looking at it, it looks fine.

 

When you type in GetGlobal("ImFriendTalk","GLOBAL") what comes back?

Link to comment

Doesn't matter what you set her variable to, as long as it wasn't 3. She's done talkin' friend talks.

 

But I'm not done with you yet.

 

Don't know why that doesn't run properly in your game, but I'd like to know more. I've had instances where the variable does not advance because I've bogged down the script temporarily. Changing the timer eliminated the stutter, and the consequences of not having the global advance. But now I'm wondering about the specifics of the timer. In my case, I had it set for 1 second, which was not enough time, so I changed it to 10. Imoen's is set at 5 seconds already, and the variable is not advancing properly for you. What is your computer like?

 

I ask because a lot of the romances use a 1 second timer. If 5 was bogging down for you, what is 1 going to do to your game? Was this an isolated occurence? Do you have active romances running as they should?

Link to comment

I would love to know too... three instances of this is a small number compared to the number of games played and tests conducted, but still a significant one, and we have one during a playtest (Kivan looping at FT1), one during an early revision (Jaheira looping at FT1), and now one during a Beta. Jastey's Ajantis has no timered windows at all but everyone else's friendship talks and romances rely on 5 second timers (down from 10), and I can't replicate the bug :) The original timings were 10.

Link to comment

Dynaheir's and Ajantis's are 1! We've seen plenty of stuff related to issues with those two NPCs. I doubt it's related, since it does work fine on the vast majority of machines. Taking a peek at what other timers are set at.

 

BTW-- if you're singing along, I'm talking about the delay between the IF etc THEN RESPONSE#100 blocks in the BAF that triggers "the talks". The first starts the talk, and it contains a small delay (timer) to allow the talk to actually start before it resets the love/friendtalk timer. Failing to allow enough time causes the global to fail to advance and talks to repeat.

Link to comment
I ask because a lot of the romances use a 1 second timer. If 5 was bogging down for you, what is 1 going to do to your game? Was this an isolated occurence? Do you have active romances running as they should?

 

I'm in Beregost at the moment, and Imoen's the only NPC who's had this problem (Though, I didn't PID Jaheira after her first friendtalk, I'll check it later).

 

And my laptop shouldn't be lagging (if thats what you mean by 'bogging down'). I just upgraded it to a 1.6 ghz machine (:) finally, something that can run Halo).

Link to comment
Dynaheir's and Ajantis's are 1! We've seen plenty of stuff related to issues with those two NPCs. I doubt it's related, since it does work fine on the vast majority of machines. Taking a peek at what other timers are set at.

Oh bloody heck - timers set to 1 were all supposed to be moved back to 5. Based on Ajantis, Domi and I thought that the 10 second "short timers" were too long and needed to be tightened up. We moved them to 1, then had some oddities, and settled on 5 as a happy medium. At that time we discussed but never resolved why Ajantis' stuff works without the short timer. I was supposed to set all of those back to 5, not leave them at 1. :) I will clean up as quickly as possible.

 

 

BTW-- if you're singing along, I'm talking about the delay between the IF etc THEN RESPONSE#100 blocks in the BAF that triggers "the talks". The first starts the talk, and it contains a small delay (timer) to allow the talk to actually start before it resets the love/friendtalk timer. Failing to allow enough time causes the global to fail to advance and talks to repeat.
Yep, I'm in the chorus -- we are all on the same page. Ajantis' romance skips these timered "windows" - take a look at the code or reference. I would love to figure out if these are really necessary (it appears they are, but then Ajantis' stuff says otherwise...)

 

for folks not sure what we mean,

1. FriendTalk increments global variable to a value (say, for example, X#ImFriendTalk=1)

2. When #4 below expires, the baf increments this to new value (say perhaps 2), sets a "short timer (see #3), and triggers a call to J-file via StartDialogueNoSet("dv"). The NPC talks.

3. FriendlyTalkTime is the "short timer" to hold open a window before

FriendTalkTime sets as the "long timer" that gives the delay before the next friend talk can fire. When the short timer expires, the block closes the variable back to odd. It is skipped in Ajantis' romance stuff.

4. In most cases, instead of the dialogue incrementing the variable, the main block is set to advance the variable to the odd value, "closing the variable".

Link to comment

I didn't really get what you are talking about long and short timers etc. but since the Ajantis romance was mentioned: Apart from putting the LTs into the J.dlg the Ajantis romance "core LTs" scripting is coded like the Anomen romance, at least I took it for reference; so I don't know which "time windows" are missing (not "missing" in the sence that it's a bug but that they aren't used to achieve - what?)

Link to comment

We have an internal workroom discussion between you (Jastey), Domi, and myself on just this issue! Ajantis' code works, and does not have these extra timers on the increment of the variable. The rest of the Project does have these timers. Let me see if I can restate the discussion clearly - I get too wordy and confuse everyone :)

 

The assumption is that the variable "opens" via a long timer, and then the BAF kicks off the dialogue.

 

Without timers, dialogue advances the globals.

 

Initial Global (0) changes to 1 via BAF or another dialogue >

BAF triggers dialogue >

Dialogue completion sets global to 2 >

repeated up a "chain" progression, 1 to 2 to 3, etc.

 

In timered components, a delay is put between the completion of the dialogue and allowing progression to the next state. In Ajantis' romance, there is no bug, just a straightforward construction:

 

Initial Global (1) and Long Timer is set >

LongTimer Expires and advances Global (2) >

BAF triggers relevant dialogue on Global = 2 >

closing block looks for Global 2 and increments (to 3), resetting Long Timer >

repeat so that block reads for 1,3,5,7 and closing block reads for 2,4,6,8

 

Two blocks can "bounce" the variable, or follow an open/close pattern.

 

In the rest of the BG1 NPC Project timered components, a delay is put between the completion of the dialogue and allowing progression to the next state, AND a delay is put between the time the Long Timer expires and variable is closed.

 

Initial Global (1) and Long Timer is set >

LongTimer Expires and advances Global (2) and short timer is set >

BAF triggers relevant dialogue on Global = 2 >

closing block does not trigger immediately - instead, it waits for the short timer to expire BEFORE it looks for Global 2 and increments (to 3), resetting Long Timer >

repeat so that block reads for 1,3,5,7 and closing block reads for 2,4,6,8

 

Two blocks can "bounce" the variable, or follow an open/close pattern, but there is a window of time between GLOBAL=2 and GLOBAL=3.

 

I believe this was instituted because many script operations were happening at once, resulting in not everything being evaluated and dialogue being skipped.

 

The question is, how long does a global need to be held open to insure being evaluated and not skipped, without accidentally being re-evaluated as true? Does it even need the delay? Since timers are used to evaluate the global, it is possible to have dialogues repeat. Without timers, it was thought that the opposite risk was being taken; a dialogue would evaluate true, but with heavy script actions happening it might be advanced past true before being called, skipping dialogue.

 

 

For most modding purposes, using dialogue to advance the variable makes much more sense, especially for quests. This "bounce", or timered open/close sequence, is pretty specific to Lovetalks, Friendship Talk progressions, and other situations where no outside materials need to happen/variables be set, but the modder wants a set of timed talks to unfold.

Link to comment

Easiest thing here is to offer an example.

 

I was using the timed method to advance the varable, since I'm running a fair amount of script in the background and I wanted to be sure everything worked. Not every romance will need this, but I've got some fairly complicated stuff going on with Gavin's version of the romance conflict. This is an abbreviated version of the script block I am using for lovetalks.

 

IF
InParty(Myself)
CombatCounter(0)
!See([ENEMY])
RealGlobalTimerExpired("B!GavinLovetalkTime","GLOBAL")
Global("B!GavinRomanceMatch","GLOBAL",1)
Global("B!GavinFriend","GLOBAL",1) //Gavin will not romance someone who has ended the friendship
!Global("B!GavinRomanceActive","GLOBAL",0)
!Global("B!GavinRomanceActive","GLOBAL",3)
OR(2)
 Global("B!GavinLovetalk","GLOBAL",1) // LT 1
 Global("B!GavinLovetalk","GLOBAL",3) // LT 2
THEN
 RESPONSE #100
IncrementGlobal("B!GavinLovetalk","GLOBAL",1) //LT starts on even numbers
	PlaySong(0)
PlaySound("GAVSONG")
RealSetGlobalTimer("B!GavinStartLoveTalk","GLOBAL",10) //delays closing the global to allow scripts to run - "short" timer
StartDialogueNoSet(Player1)
END

IF
InParty(Myself)
RealGlobalTimerExpired("B!GavinStartLoveTalk","GLOBAL") //scripts done running - OK to close variable now
OR(2)
 Global("B!GavinLovetalk","GLOBAL",2) //1
 Global("B!GavinLovetalk","GLOBAL",4) //2
 RESPONSE #100
RealSetGlobalTimer("B!GavinLovetalkTime","GLOBAL",3600) //60 minute default "long" timer
IncrementGlobal("B!GavinLovetalk","GLOBAL",1) //closes the variable
END

 

If I were using dialog to close the variable, like Ajantis does, I would do:

 

IF
InParty(Myself)
CombatCounter(0)
!See([ENEMY])
RealGlobalTimerExpired("B!GavinLovetalkTime","GLOBAL")
Global("B!GavinRomanceMatch","GLOBAL",1)
Global("B!GavinFriend","GLOBAL",1) //Gavin will not romance someone who has ended the friendship
!Global("B!GavinRomanceActive","GLOBAL",0)
!Global("B!GavinRomanceActive","GLOBAL",3)
OR(2)
 Global("B!GavinLovetalk","GLOBAL",1) // LT 1
 Global("B!GavinLovetalk","GLOBAL",3) // LT 2
THEN
 RESPONSE #100
IncrementGlobal("B!GavinLovetalk","GLOBAL",1) //LT starts on even numbers
RealSetGlobalTimer("B!GavinLovetalkTime","GLOBAL",3600)
	PlaySong(0)
PlaySound("GAVSONG")
StartDialogueNoSet(Player1)
END

 

Then, I would close (advance) the variable as part of the lovetalk.

Link to comment

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...