berelinde Posted August 27, 2007 Share Posted August 27, 2007 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
jcompton Posted August 28, 2007 Share Posted August 28, 2007 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
berelinde Posted August 28, 2007 Author Share Posted August 28, 2007 Heh. I put the lovetalks in the J, and call them with StartDialogueNoSet(). Link to comment
Kulyok Posted August 28, 2007 Share Posted August 28, 2007 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
jcompton Posted August 28, 2007 Share Posted August 28, 2007 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
berelinde Posted August 28, 2007 Author Share Posted August 28, 2007 Only that the only random calls to the J-file are those made by player-initiated dialogue, and it's pretty clear why those go at the end. Everything else has a variable attached. Link to comment
cmorgan Posted August 28, 2007 Share Posted August 28, 2007 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
Kulyok Posted August 28, 2007 Share Posted August 28, 2007 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
Recommended Posts
Archived
This topic is now archived and is closed to further replies.