Jump to content

Building your banter file: order does matter


berelinde

Recommended Posts

You know the saying "Too soon old, too late wise?" Well it's definitely true.

 

I've read any number of times that scripted banter comes before unscripted banter when you build a banter file, and never really understood why.

 

It's because you make a call to the banter file, telling MyNPC to Interact() with another NPC, you're just telling MyNPC to start a conversation with another NPC. The conversation that fires will be the first one whose conditions are true.

 

If you've got your scripted banters first, your global variable checks will ensure you get the banter you want. If you've got your unscripted banters first, most of them are going to be true before you ever get to your scripted banter. So, if you've got your scripted lovetalks in the banter file, you could theoretically play every single MyNPC-initiated banter before you ever got to that lovetalk.

 

Makes sense, and makes me wonder why it was so tough for me to get my head around that concept.

Link to comment

You've just re-derived the equation for WEIGHT. :)

 

This is why lovetalks are placed at the top of the file, weight-speaking, but why the lovetalk counter spends all of its time sitting on odd numbers. When Interact() gets called for other purposes, you don't want the lovetalks popping up until it's "actually time for a lovetalk."

Link to comment

Which is very wise(placing lovetalks in J, I mean) - I've just recently wondered "Why didn't I do this?", myself.

 

 

But that's nothing compared to the revelation I had the other day! You can use SPACE to page down while browsing, and SHIFT-SPACE to page up!:)

Link to comment
Which is very wise(placing lovetalks in J, I mean) - I've just recently wondered "Why didn't I do this?", myself.

 

I must be missing something. How is it superior to using B/Interact? You still have other dialogue types to contend with--namely, the "okay we're here and now I have a comment about it" event-based stuff which typically goes in J.

Link to comment

By setting a single variable (or two if you want to shut down a series, like our !endofbg1=2 checks), it seems entirely possible that B/Interact() might be able to have the same rigor as the J/SDNS calls, but inpractice I was never able to get this to work out. We migrated all situational B calls to J calls this past year, leaving only truly random "floater" banters on Interact(), because we had troubles with queuing and stacking of banters which met conditions.

 

With those calls moved to the JFile, aad triggered by a single variable that cannot be closed except by dialogue, we have actually automated the "initiate PID repeatedly to clear the talks" behavior. A state which does not close because another talk has "queued up" in front of it gets repeated attempts to close the variable, and since each talk advances their own varable the queue is cleared (If for some strange reason Imoen's Tarnesh spellbook doesn't fire because of an odity with a player who moeves canstantly or too quickly, she will catch up at the next oppoertunity automatically, in weight order).

 

Since there are considerably more potential Banters available (due to their open scripting) , using the J/SDNS this way dramatically reduces the mistakes that can be made through not understanding WEIGHT (which is most folks modding, by the look of things - I have read your tutorial and studied stuff and I still sometimes have a big problem figuring out where in a sequence it will end up!).

Link to comment
I must be missing something. How is it superior to using B/Interact? You still have other dialogue types to contend with--namely, the "okay we're here and now I have a comment about it" event-based stuff which typically goes in J.

 

That's what I want, i.e. "everything I call via script goes to J, everything that will trigger randomly goes to B". I'm a sucker for consistency.

 

As well, if some other modder adds his (not scripted) banters on top of my(scripted) ones, it will lead to his banters triggering every time my script calls Interact() - i.e. his several banters will fire in rapid succession, and then mine will trigger. Not good.

 

Besides, I don't know if IESDP has that, but StartDialogueNoSet is more versatible. It will work if characters are in different parts of the screen, in different areas, even - but in Interact, you have to supply a See/Range check, otherwise the command won't work. I use See() regardless, but I want to have a choice.

Link to comment

Archived

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

×
×
  • Create New...