Jump to content
Sign in to follow this  
cmorgan

Preliminary PIDs. Not Quite PDAs. But They Will Be, PDQ.

Recommended Posts

OK, since the flirts are progressing, let's mess with PIDs.

 

Player

Initiated

Dialogs

 

or PIDs, are conversation options that show up when you "force-click" on the NPC. They are designed as individual conversations/flirts menus/Voice fixers/etc., taking advantage of the engine's mapping of click-to-talk=StartDialogNoSet(). In other words, clicking on an NPC is similar to scripting

IF
 True()  // >> clicked on <<
THEN RESPONSE #100
 StartDialogNoSet("Player1")
END

only running once. This means that if we add options to the *BOTTOM* <<VERY IMPORTANT>> of the stack, with an "always true" condition, clicking on the NPC gives us access to a single (usually huge) dialog state with a ton of conditioned replies.

 

REMEMBER:A PID is an "always true" conditioned dialog state. This is why a PID will pop up if you make a mistake on your NPC's J-file - if the script can't find what it is looking for, it will send back this PID instead. Worse, if you install the PID above other conditioned replies, IT WILL BLOCK THAT CONTENT.

 

The safest way to deal with this is to make sure that the PID is a separate component in your NPC mod, and installs last in the order. You do not need to worry about other mods and modders - the Crossmod Banter Pack deals with B-files, and most modders do not mess around with reordering your mod's dialog states. If they do add to your NPC's J-file, it is likely to be interjections or specially scripted banters, and they have either gotten your permission (in which case they are aware of the issue) or they have simply weighted their materials higher than the bottom anyways, to make sure their stuff plays. The only exception to this canonical BioWare™ characters that have PPG FlirtPack entries. If you are adding content there, you need to be aware that unless you do a good bit of specialized work, your PID addition to (for example) Aerie *will* conflict with those flirts.

 

Remember, folk, on these recommendations - I am talking code not content. And I am not a coding expert, so the suggested mods for research are just ones where I have come across cool ideas while reviewing code. Prepping for Aran, I have found it useful to read .d with only .tra numbers, so I don't get the dialog; I am just looking at the way the modder *structured* how they were doing things. That being said, for the most comprehensive use/abuse of this system, try checking out PID coding in Jastey's Ajantis in BG1NPC, and to a lesser but as detailed extent Domi's SharTeel PID in the same mod. Other notable PIDs to research: for clean and efficient structuring, Kulyok's Xan and Angelo PID coding (in Xan especially, she separates a series of PIDs off and builds "leveling" menus and submenus that tailor the PID and available responses with an efficiency that is not present in any other PID currently publicly released). Berelinde's Gavin PID (she extends options, reactions, and gives the most comprehensive commenting out there so it is easy to follow most of her files) can give you a good handle on how the structure works, and for the simplest and easiest to understand PID, chose any of JCompton's Flirtpack entries. They are not called PIDs, probably because they (I think) predated the idea. But as we talked about in Flirts, each component of the FlirtPack adds a clean, simple PID.

 

To start the ball rolling, we need the dialog state that will run and always be true. This is

 

/* PID for SoA */

IF ~IsGabber(Player1)~ THEN c-aranpid
 SAY ~[ARAN] (Aran is wandering around, idly tossing rocks at things that strike his fancy.)~
 IF ~~ THEN EXIT
END

 

This means that when you press the "talk" icon at the bottom of the screen and then click on Aran's character portrait in the game, if no other conditions are true on the J-file, the dialog box will pop up

 

(Aran is wandering around, idly tossing rocks at things that strike his fancy.)

OK, that is better than the stock variation on

Aran has nothing to say to you.

but not much better. So let's begin building in some responses.

 

No, wait, let's start with an easier one - how about a PID that handles the case where a player has another party member NPC selected as the talker, rather than the PC, and then is about to post a bug report about the PID not working... let's set up a condition that handles the "not <CHARNAME> trying to force-talk". Several modders do this - most of them are single throwaway "Not now, I have a headache" lines, for reasons that will soon become apparent as I wander off into lala land...

 

/* PID for SoA */

IF ~!IsGabber(Player1)~ THEN c-aranpidother
 SAY ~[ARAN] (Aran is wandering around, idly tossing rocks at things that strike his fancy. Since you are <GABBER>, not <CHARNAME>, he grins and sticks his tongue out at you before turning away.)~
 IF ~~ THEN EXIT
END

 

This means that if I have Aldaron as my main PC, and I have selected Kivan instead of Aldaron, the PID will pop the following:

 

(Aran is wandering around, idly tossing rocks at things that strike his fancy. Since you are Kivan, not Aldaron, he grins and sticks his tongue out at you before turning away.)

 

(For more information on 'tokens' like <CHARNAME> <PRO_HESHE>, <PLAYER1>, and <GABBER> - things that the game can do for your text to match what is happening in any particular game setting on the fly, please see the IESDP).

 

Well, so far so good. But we can do a bit better. I would not try this one at home, folks, because I am not sure it is the best way of doing this, but I will try a thought-experiment here, and massively abuse CHAIN to add a little custom "fun" for players. Here, we take advantage of the DeathVariable (dv) of existing NPCs to make individualized comments. Now, most folks don't do this for a zillion reasons, one of which is it is a huge waste of time for a throwaway line that 99% of folks will not even notice. But hey, what's an hour or two of tilting at windmills between friends...

 

We know IsGabber("dv") will not check condition, and will not check to see if an NPC exists, so it won't crash. So we can mess with IsGabber("dv") and !IsGabber("dv") with relative impunity. Setting the condition IsGabber("b!haldimir") will allow that line to play only if the talker has a dv of b!haldimir. We can ignore folks who name their PC "Aerie" - because the engine handles that already, designating PC = Player1, so this dialog state will not play for them. Folks who create their own Multiplayer game and name their half-Elf Sorceress Aerie, playing from slot 2, well, erm... I guess they are SOL. Let's just hope no one is playing with a half-orc barbarian male and named them Aerie, or there will be a minor head-scratching moment when Aran makes a pass at them :laugh:

 

/* PID for SoA */

/* PID 1: Options for Other NPCs PC <> Aran, also know as "throughly abusing CHAIN until it screams" */
CHAIN IF ~!IsGabber(Player1)~ THEN c-aranpidother
~[ARAN] Well, now, you might want to talk, but I do have a bit on my mind right now, <GABBER>. Can this wait a bit?~
== ~C-ARANJ~ IF ~IsGabber("ADANGEL")~ THEN ~[ARAN] Besides, we might have a chat over weapons cleanin' later on, Angelo. I never did hear how you got free 'o that' Cyric-buggerin' bastard Sarevok, not from your perspective. I'll bring th' flask, you bring th' stories.~
EXIT

 

So now we have a reply of

 

Well, now, you might want to talk, but I do have a bit on my mind right now, <GABBER>. Can this wait a bit?
if Angelo is not in the party, but if he is:

 

Well, now, you might want to talk, but I do have a bit on my mind right now, <GABBER>. Can this wait a bit?

 

Besides, we might have a chat over weapons cleanin' later on, Angelo. I never did hear how you got free 'o that' Cyric-buggerin' bastard Sarevok, not from your perspective. I'll bring th' flask, you bring th' stories.

 

We can also can cover multiplayer, but to do so we will need to stretch the usual limits of conditioned replies - here, we need a series of responses that skips out the special responses. this is a partial list for illustration. Please see the final code edits at the end of the next section for a relatively long list of possibles.

== ~C-ARANJ~ IF ~!IsGabber("ADANGEL")
!IsGabber("Aerie")
!IsGabber("Anishai")
!IsGabber("Anomen")
// big section of other !IsGabber("myNPCdv") calls goes here removed for space
!IsGabber("YASRAENA")
!IsGabber("YASRAENA")
!IsGabber("Yoshimo")
!IsGabber("Z_MODDY")
!IsGabber("ZAIYA")~ THEN ~[ARAN] No offence, <GABBER>, I just don't rightly have much to say to you right now.~

 

Here is a quick run at the "not-the-player PID reminder". Please feel free to suggest responses, as I am not completely familiar with all of the NPCs on the list. I can always tweak the response, but go ahead, give it a try!

 

/* PID for SoA */

/* PID 1: Options for Other NPCs PC <> Aran, also know as "throughly abusing CHAIN until it screams" */
CHAIN IF ~!IsGabber(Player1)~ THEN c-aranpidother
~[ARAN] Well, now, you might want to talk, but I do have a bit on my mind right now. Can this wait a bit?~

== ~C-ARANJ~ IF ~IsGabber("ADANGEL")~ THEN ~[ARAN] Besides, we might have a chat over weapons cleanin' later on, Angelo. I never did hear how you got free 'o that' Cyric-buggerin' bastard Sarevok, not from your perspective. I'll bring th' flask, you bring th' stories.~

== ~C-ARANJ~ IF ~IsGabber("Aerie")~ THEN ~[ARAN] Not meanin' to be short, m'darlin lassie, but I'd rather we have a talk later. Are you up for a walk tonight, Aerie? Mayhap just you an' me, under th' stars?~

== ~C-ARANJ~ IF ~IsGabber("Anishai")~ THEN ~[ARAN] Though if you are lookin' for a partner to try a few practice runs, Ainshai, You could always try to get a good feel o' what's in my pocket... by Mask's Mighty Mouth, you could charm th' trousers off o' me, you could.~

== ~C-ARANJ~ IF ~IsGabber("Anomen")~ THEN ~[ARAN] Anomen, if this is about my gear bein' not quite tidy enough, I done rightly heard you the first three times. An' I'll say it again - I don't answer to you, nohow. So bugger on about your business, m'lord, an' leave me to mine.~

== ~C-ARANJ~ IF ~IsGabber("Azure")~ THEN ~[ARAN] Besides, Azure, I know better than to be makin' time wi' you. Sharo's a pretty sensitive wolf, an' might not take kindly to us takin' too long, private -like.~

== ~C-ARANJ~ IF ~IsGabber("B!Gavin")~ THEN ~[ARAN] BLOODY HELLS, OUCH! By Lathander's Sunny Sh... Gavin, what in th' hells do you think I'm usin' to walk with, my hands? Look, I know I don't rightly use th' tops o' my feet for much, but that's no reason for you to use 'em as steppin' stones.~

== ~C-ARANJ~ IF ~IsGabber("b!haldamir")~ THEN ~[ARAN] I'm goin' to kick myself for sayin' that, too, Haldamir, on account o' you don't talk much to anyone, an' here you go tryin' to start a conversation. Talk about bad timin'.~

== ~C-ARANJ~ IF ~IsGabber("BIDDE")~ THEN ~[ARAN]  An' you can stop lookin' at me w' those cold stone grey eyes, y' old shortaxe. I like Lathander  well enough, an' you don't need to go convertin' me to your ways.~

== ~C-ARANJ~ IF ~IsGabber("Britt")~ THEN ~[ARAN] Though how you got into this adventurin' party, Britt, is a mystery to me, you know. I thought you were just pullin' my leg about joinin' on. I suspect there's been some divine intervention what's made you take up adventurin'.~

== ~C-ARANJ~ IF ~IsGabber("BWTOUCHX")~ THEN ~[ARAN] An' lay off th' advice, Touchstone, m'boyo. You Wild Elves have been around a mite longer than me an' my kinfolk, I know, but here's more to th' world than trees, bugs, an' grass. Well, at least there's also mud, soot, an' grime, based on what you be wearin' right now.~

== ~C-ARANJ~ IF ~IsGabber("CALLISTO")~ THEN ~[ARAN] An' stay ahead o' me, Callisto.  Mask's Blade, you are a right fine fighter, but you worry me, you do. You get all out o' control, an' there's nothin' what can stop you. I wouldn't want to have no 'accident' or nothin'.~

== ~C-ARANJ~ IF ~IsGabber("Cernd")~ THEN ~[ARAN] If it that talk you were wantin' to give me on th' ways o' th' birds an' th' bees, Cernd, well - that ship sailed a couple o' years ago. Though I can tell you o' some things I've learned what's great in th' bedroom, but don't quite fit under th' headin' o 'natural'... ~

== ~C-ARANJ~ IF ~IsGabber("CHLOE")~ THEN ~[ARAN] In fact, Chloe, let's just pretend we done talked already, an' call it quits. You scare th' crap out o' me.~

== ~C-ARANJ~ IF ~IsGabber("CMALORA")~ THEN ~[ARAN] Not that I don't appreciate some bubbly happiness an' sunshine in my day, m'darlin' Alora, but I need to concentrate right now. An' that 'happy happy joy joy' spirit o' yours might break it. Plus, last time you got all huggy wi' me, half my purse mysteriously went missin'... don't you play "Happy Hin" wi' me, lassie! I can't rightly afford it right now!~

== ~C-ARANJ~ IF ~IsGabber("CMGMIRIAM")~ THEN ~[ARAN] I don't have much time for no bloodsucker, nohow, Miriam.  Especially when I don't rightly know which 'we' is you. I don't know why <CHARNAME> don't just throw a stake through your heart an' be done wi' you.~

== ~C-ARANJ~ IF ~IsGabber("CMNIKITA")~ THEN ~[ARAN]  I'll tell you what, though, Nikitalleria. When we next camp, I will trade you fair an' square.  You teach me a little sleight o' hand, an' I will teach you a mite on parryin' versus  Waterdeep double-swords. An' I won't make no pass at you, neither. This is just friend to friend, see? ~

== ~C-ARANJ~ IF ~IsGabber("CMNINAF")~ THEN ~[ARAN] Besides, m'lady Ninafer, shouldn't you be chattin' up Anomen or somethin'? I think you are a right fine woman, an' all. But the boy's the jealous type, an' an officer an' all. I got enough o' him ridin' my back without you makin' it worse.~

== ~C-ARANJ~ IF ~IsGabber("CORAN")~ THEN ~[ARAN] An' stand where I can see you, Coran. Th' ladies might like your 'charmin' rogue' act, but me, I'm not that impressed.~

== ~C-ARANJ~ IF ~IsGabber("D#Silver")~ THEN ~[ARAN]  An' stay an arm's length away, SilverStar. Unless you want a nice mutton, lettuce, an' tomato sandwich, or somethin'. Then where would your Mary be, eh? Have fun stormin' that particular castle.~

== ~C-ARANJ~ IF ~IsGabber("D0Alassa")~ THEN ~[ARAN]  You can charm the breath out o' me an th' trousers off o' me, Alassa, with just the bat o' an eyelash. An' worse, you know it. But keep those gorgeous eyes an' pert lips out o' my business. You would skin me an' serve me raw if it got you an extra few coin, laughin' all the way to Calimport.~

== ~C-ARANJ~ IF ~IsGabber("DL#BWN")~ THEN ~[ARAN]  By Tempus' Shield, Branwen, you are a sight for sore eyes. But I don't have no time to talk about following Tempus right now. Come talk to me when we are campin', or some such time.~

== ~C-ARANJ~ IF ~IsGabber("DYNAHEIR")~ THEN ~[ARAN] M'lady Wychlaran, I don't mean no disrespect. An' please don't turn me into no toad, nor squirrel, nor naught like that, Dynaheir. I just don't have no words t' speak right now.~

== ~C-ARANJ~ IF ~IsGabber("E3Fade")~ THEN ~[ARAN]  I'm no prude,  Fade, an' I respect th' Guild rightly enough. An accomplished Knife's a right good part o' a party, an' you keep th' Shadow Thieves appeased. But I don't trust no tiefling, no way, no how.  So unless it's business, keep to yourself, girl.~

== ~C-ARANJ~ IF ~IsGabber("Edwin")~ THEN ~[ARAN] Unless it be more stories o' your conquests, o' course, Edwin. You got more o' those, well, step right on over, an' we'll have a mite o' a chat. I still can't rightly believe a Chondathan girl can be trained to do what you described last time. Didn't know they bent that way.~

== ~C-ARANJ~ IF ~IsGabber("FHLAND")~ THEN ~[ARAN]  Come by an' chat later, though, Andrei. We can spar a bit, an' swap stories. Or, I can tell stories an' you can listen. Did I ever tell you about th' time Kirran an' me an' BrightFire got into a mite o' a spat wi' some boys servin' th' wi' Black Company? Now, that were a fight for a bard to describe...~

== ~C-ARANJ~ IF ~IsGabber("FHLSEB")~ THEN ~[ARAN]  Though you could do me a right good favor, Sebastian, an' lay off Andrei. The lad's a decent enough sort, an' he needs some breathin' room you don't give him. I'll watch his back, don't you worry.~

== ~C-ARANJ~ IF ~IsGabber("FINIREN")~ THEN ~[ARAN] I don't have nothin' to say to you nohow, Irenicus. I spoke my piece back when we kicked your sorry arse. I'd tell you to get lost in any o' th' hells, but you've already done that.~

== ~C-ARANJ~ IF ~IsGabber("FWGhareth")~ THEN ~[ARAN] But come have a drink wi' me when you can, Ghareth. I want to hear more about th' Cowled an' their ways. Forewarned is forearmed, an' all that time enforcin' for 'em has got some good stories, I bet. I'll trade you, an' tell you about th' time I was servin wi' Moonshea an' we had a bit o' warlock trouble. Talk abut uncontrolled magic...~

== ~C-ARANJ~ IF ~IsGabber("G#CASS")~ THEN ~[ARAN] I know that look, Cassius love, an' you are about to charm me wi' those stories o' heroism an' such.  Th' trouble wi' all you Skalds an' your tales is that when th' hero slays th' monster an' looks about, there's not much left o' th' rest o' th' party. Write one o' them tale where the kitchen maid an' her four friends beat th' crap out o' a dragon an' all live to tell the tale, an' I'll listen!~

== ~C-ARANJ~ IF ~IsGabber("GOZALOTH")~ THEN ~[ARAN] Better yet, keep yer distance, you floatin' eyeball. I can't rightly make out your accent anyways. An' people think *my* accent be hard to follow...~

== ~C-ARANJ~ IF ~IsGabber("HaerDalis")~ THEN ~[ARAN] An' lay of th' 'sparrowhawk', 'dovewing', an' birdy-birdy language for a mite, there, HaerDalis, eh? If you do, I'll let you look at a scrap o' parchment I found in a library outside o' Beregost, what's written in th' tongue o' Gold Dwarves...~

== ~C-ARANJ~ IF ~IsGabber("Horace")~ THEN ~[ARAN] Now, hold on to your jawbone, an' stop scratchin' th' inside o' that left eyesocket, Horace. I got enough trouble stayin' un-spooked just lookin' at you, let alone talkin' to an animated skeleton!~

== ~C-ARANJ~ IF ~IsGabber("Hubelpot")~ THEN ~[ARAN] We'll be talkin' over dinner prep anyways, Hubelpot. Don't worry none - I'll try not to get ripped limb from limb afore then, and with a bit o' luck, you won't be ground up bits o' parts neither.  We can talk about real curry makin'!~

== ~C-ARANJ~ IF ~IsGabber("Imoen2")~ THEN ~[ARAN] I'm not pushin' you away, Imoen, really I'm not. I just know you have a mite on your mind, too, an' I'm not happy company right now. I'll walk by you for a bit, though, if you want.~

== ~C-ARANJ~ IF ~IsGabber("IYLOS")~ THEN ~[ARAN] You can't rightly expect much in th' way o' small talk from me, nohow, Iylos. You got a mission, an' I respect that. But fish around for information about <CHARNAME> from someone else. I don't serve more than one contract at a time, an' <CHARNAME> has that right now, an' probably 'til I'm arguin' wi' Kelemvor myself on where the prettiest girl souls be hidin' out.~

== ~C-ARANJ~ IF ~IsGabber("J#Kelsey")~ THEN ~[ARAN] Not that I'm puttin' you off for no reason, Kelsey. Come an' talk another time. I spent plenty o' time punchin' fists, Coster tradin' up an' down th' Sword Coast as a lad. We should talk shop some time soon, eh? I never did run a store, though I have done my share o' accountin' a' contract drafts. Reminds me o' th' good old days, when you raised an alarm for a stray urchin, a pickpocket, or a kobold or two, instead o' all the beasts th' nine hells can throw at us.~

== ~C-ARANJ~ IF ~IsGabber("Jaheira")~ THEN ~[ARAN] Yes, Jaheira, I packed up my bedroll right tightly. No, Jaheira, I did not eat too much o' th' hardtack, an' cramp my bowels. Yes, Jaheira, I read that list o' spices you wanted me to try to get into th' dinner roster. Melliki's Mysterious Mouth, I'm no bloody half-elf out o' your loins, I'm just a friend, eh? Go easy on th' motherin', for th' love of our friendship!~

== ~C-ARANJ~ IF ~IsGabber("Jan")~ THEN ~[ARAN] Tell you what, Jan. If th' story is about turnips, relatives, or craftin' new inventions, I can tell you I done heard it. In fact, if it was turnips, I done heard it twice. But we will have time to take on meal prep, an' then you can tell me about th' time the cute female turnip golem who was really your third cousin on your uncle's side managed to get you an idea for an invention what turned out to be th' best thing since th' gods created womenfolk.~

== ~C-ARANJ~ IF ~IsGabber("JCBruce")~ THEN ~[ARAN] Tymora's Tantalizing Tits, you got a huge bundle o' nerve talkin' to me, Bruce m'boyo. You owe *me* two platinum orbs an' the names o' three reliable courtesans, an' you haven't paid up yet. Bugger off until you do, you lazy bastard!~

== ~C-ARANJ~ IF ~IsGabber("K#Auren")~ THEN ~[ARAN] Tell you what, Auren - talk to me later, an' we'll have a go at that attack an' counter routine we had a few days ago. You are winnin' three falls to two, an' I would rightly enjoy balancin' out th' game, so to speak. ~

== ~C-ARANJ~ IF ~IsGabber("K#Bana")~ THEN ~[ARAN] You should know better than to sneak up on me like that, Banana. I got me a ton o' recipes wi' your name on 'em... hey, you got a cousin named Rosanna Bananadana?~

== ~C-ARANJ~ IF ~IsGabber("K#Sarah")~ THEN ~[ARAN] Sarah, lass-o-me-heart, I don't mean to be short wi' you. I'll make it up to you later. I can fix some decent flatbread an' honey, just like they serve back near Beregost, an' mayhap I can bribe you for a story or two. You keep too quiet, lass, an' I do appreciate your friendship.~

== ~C-ARANJ~ IF ~IsGabber("K#SHEENA")~ THEN ~[ARAN] I can promise you right proper, Sheena, I am not puttin' you off. I've sense enough not to cause no offense to a comerade what can be beautiful woman one moment, an' firedrake next. It be hard enough to stay on th' right side o' a regular woman, wi' out no draconic heritage.~

== ~C-ARANJ~ IF ~IsGabber("KACHIKO")~ THEN ~[ARAN] Hey, none o' that sharp eyed glare, Kachiko. I'll gladly talk wi' you another time. By your Eight Million Kara-Turan Gods, I didn't mean to offend you none. Not all o' us have your Dragon Tongue's focus, you know. I needs must concentrate, or I'll be not attendin' to my duties well enough. I'm not a Sword Saint or anythin'.~

== ~C-ARANJ~ IF ~IsGabber("Kari")~ THEN ~[ARAN] Easy, there, lass - don't you be gatherin' your tail in a twist, an' all. Literally, I mean. You are blushin' redder than I done seen in a tenday! Kari, I'm just busy now, that's all. Come by when we settle in for th' night, an' I'll help you with that weapon sharpenin' you were askin' about.~

== ~C-ARANJ~ IF ~IsGabber("Keldorn")~ THEN ~[ARAN] I don't mean no disrespect, Keldorn. If you have somethin' you want me to do, just say the word. Otherwise, I need to attend to my duties right proper.~

== ~C-ARANJ~ IF ~IsGabber("Keto")~ THEN ~[ARAN] How about you come by tonight, though, Keto, an' we trade some stories? I'd be lyin' if I didn't think I'd make you nice company. I have some nice Rashemi Firewine set aside, not even watered down... ~

== ~C-ARANJ~ IF ~IsGabber("KIARA")~ THEN ~[ARAN] There might be time to talk later, though, Kiara. I want to hear more about that monk trainin'. I'll help wi' some breath-holdin' exercise, if you want, too. Though there be not much more between us, I expect. I know you might be a decent enough friend, but somehow it always ends up bein' more about you, an' less about anyone else.~

== ~C-ARANJ~ IF ~IsGabber("KINDREK")~ THEN ~[ARAN] An' don't you be startin' in on me about th' corruption magic causes, neither, Kindrek. I'll take whatever weapon th' gods hand me, if it gets the job done proper. An' one more word about my head decoratin' a pike bein' pretty, an' we'll just have to see if that fancy weapon o' yours will be stronger than my skills, boyo.~

== ~C-ARANJ~ IF ~IsGabber("Kiyone")~ THEN ~[ARAN] Though between you an' me, I'd rather keep talkin' to you an' make some sort o' accommodation, Kiyone. I'd trust you to watch my back right proper.~

== ~C-ARANJ~ IF ~IsGabber("Korgan")~ THEN ~[ARAN] If this is about th' sharpenin' bar, Korgan, here it is. I don't need it no more nohow. An' I'm not so happy wi' havin' to rent it for two iron crescents an' a Trademeet trade bar. Xvim's Spit, that's bloody highway robbery.~

== ~C-ARANJ~ IF ~IsGabber("Kova")~ THEN ~[ARAN] On second thought, stay away, Kova. I'm not particular about my company, but in your case, I'm up for makin' exceptions. I'm not sayin' guilty, I'm not sayin' innocent - I'm just sayin' naught.~

== ~C-ARANJ~ IF ~IsGabber("LRIRENIC")~ THEN ~[ARAN] An' keep your Master O' th' Universe crap out o' my face, wonderboy. <CHARNAME> killed you once, remember? In my opinion, it were done too slowly, an' wi' not enough o' th' pain an' sufferin' on your part.~

== ~C-ARANJ~ IF ~IsGabber("M#AMBER")~ THEN ~[ARAN] I'm not likely to have nothin' to say anyways, Amber. It seems like you are backin' <CHARNAME>, but while you ca take the lady out o' th hells, now, can you really take th' hells out o' th' lady? I don't rightly trust no tiefling, no matter how pretty.~

== ~C-ARANJ~ IF ~IsGabber("Mazzy")~ THEN ~[ARAN] I'll be happy to help on th' weapons cleanin' later, though, Mazzy. I want to see how you sharpen those arrows so fierce.~

== ~C-ARANJ~ IF ~IsGabber("Minsc")~ THEN ~[ARAN] Oh, I'm right sorry, Minsc - didn't mean to be so short. Though when I'm standin' close to you, short is the word what springs to mind right quick, it does. You are blockin' most o' my view, big boy. You mind steppin' over a bit, so's I can see where we are headed?~

== ~C-ARANJ~ IF ~IsGabber("MTS#Shy")~ THEN ~[ARAN] Chende, I'm, err... well, I'm... not that I have anythin' against half-orcs, or nothin, on account o' I have worked wi' my share o' right proper comrades what's got my back as good as I watch theirs, regardless o' orcish blood. It's just you keep adjustin' your top, an' it bothers me a bit. There's a good healthy woman, an' then there's a need to get some clerical intervention. That's just not right, eh?~

== ~C-ARANJ~ IF ~IsGabber("MWAriena")~ THEN ~[ARAN] Ariena, don't be lookin' like that at me  I'm not shunnin' you, I just don't rightly have th' time right now! We'll try some sparrin' later on. Though this time, you done got to remember that we be sparrin', not fightin' for real. Last time, you bloody well busted a few o' my ribs.~

== ~C-ARANJ~ IF ~IsGabber("MWKido")~ THEN ~[ARAN] An' no, I'm not interested in more discussions about Cyric an' his Dark Light, Kido. You spin a fine tale, but I'm stickin' wi' <CHARNAME> for <PRO_HISHER> sake, not on account o' any love for murder, death destruction, chaos, an' all that crap.~

== ~C-ARANJ~ IF ~IsGabber("Nalia")~ THEN ~[ARAN] An' I am not one o' th' Great Unwashed Little People, neither, Nalia. I 'll have you know I took a bath just last week. Well, parts o' me, anyways. Wanna see?~

== ~C-ARANJ~ IF ~IsGabber("NATH")~ THEN ~[ARAN] Come by later, though, 'Fletcher. We never did finish talkin' about that whole Trade Way skirmish wi' the Chill hittin' your squad o' Fist. I heard from Valis your party done got ambushed right proper, but fought all th' way out wi' only two casualties anyways. Now that is a story worth hearin' more'n once, it is. I'll provide th' spirits, you provide th' stories. ~

== ~C-ARANJ~ IF ~IsGabber("Ninde")~ THEN ~[ARAN] I mean no disrespect, o'course, m'Lady Ninde. I wouldn't want to be on th' wrong side o' one o' your tongue lashin's. Though if there's a right side, well, I'm your man for to call on. I'll just go get that gear straightened out a bit, eh?~

== ~C-ARANJ~ IF ~IsGabber("O#TIAX")~ THEN ~[ARAN] Yeah, yeah, I done heard you th' first twenty times. 'Tiax Rules All'. 'When Tiax Rules, Aran Will Be Th' Boot-Scraper An' Will Have To Talk To Me'. Sune's Rambunctious Rump, someone get this insane shorty th' Nine Hells away from me.~

== ~C-ARANJ~ IF ~IsGabber("O#XAN")~ THEN ~[ARAN] No offence, Xan, but I want to keep my spirits up, eh? You are one powerful Tel Quessir, but you sure can bring on th' doom an' gloom.~

== ~C-ARANJ~ IF ~IsGabber("P#DEHER")~ THEN ~[ARAN] Beggin' your pardon, m'lady Deheriana. I don't mean no offence to you nor your Ranger.~

== ~C-ARANJ~ IF ~IsGabber("P#KIVAN")~ THEN ~[ARAN] I'm downright flattered you want to talk to me, I am, Kivan - I don't mean no disrespect. There's just not rightly no time now for talkin'.~

== ~C-ARANJ~ IF ~IsGabber("R#ALLIS")~ THEN ~[ARAN] An' don't you be pesterin' me about all that cookin' wi' meat again, Allison. I know you be fond o' th' animals, but there's a right good purpose for  them there bunny rabbits. Make good stew, they do!~

== ~C-ARANJ~ IF ~IsGabber("R#Kitanya")~ THEN ~[ARAN] Beggin' your pardon, o' course, vanimaberylellie en amin... no offense meant. I'd Like it fine if we could talk later, Kitanya. I'd like to learn some o' th' Tel Quessirim fightin' tactics, if you've a mind to share.~

== ~C-ARANJ~ IF ~IsGabber("Rylorn")~ THEN ~[ARAN] In fact, forget it. Shut your foul mouth, you Cyric-lovin' filth. If <CHARNAME> didn't keep you on a tight leash like soem pet, I'd be servin' your heart up tartar-style, wi' a nice cup o' th' blood o' innocents you like to murder. Watch your back, bastard, on account o' I'm just waitin' for th' opportunity to plant somethin' between your third an' fourth ribs.~

== ~C-ARANJ~ IF ~IsGabber("SAERILETH")~ THEN ~[ARAN] Hold on... I can do this right proper, I can. I've been readin'. *ahem*. Forsooth, it pains me greatly to cause you distress, my Lady Saerileth. But thy words best not the needs of the moment, and I must away anon. Perchance thy gracious lips would caress mine ears at the first pale glimmer of starlight; for in thine countenance I do see the beauty of life, the vivaciousness of youth, and the satin power of Tyr enobl'd and made feminine in the grace of your form. This poor sinner doth confess the lusts of both body and mind for such sweet discourse; a breath, a moment of your beauty is like the drop of divine wisdom from the countenance of Ao. *ahem*. Sune's Salacious Succulence, talkin' that way'll kill a man dead, it will. ~

== ~C-ARANJ~ IF ~IsGabber("SDNPC")~ THEN ~[ARAN] Come by an' talk later, though, Yikari. We can get a good stiff drink, an' loosen that still tongue o' yours. I want to hear more about th' far off lands, an' especially those Kara-Turan womenfolk!~

== ~C-ARANJ~ IF ~IsGabber("SIME")~ THEN ~[ARAN] Not meanin' to offend you, Sime, nor your father. I'd be right happy if you'd come talk later on. Perhaps I can buy you a drink or somethin', next opportunity. No pass, honest, just interested in swappin' some stories, playin' some dice, passin' the time.~

== ~C-ARANJ~ IF ~IsGabber("SK#NEHT")~ THEN ~[ARAN] I'm up for a mite o' a chat later, though, Neh'Taniel. You talk a deep set o' subjects, you do. I need most o' my mind on th' discussion if I want to keep up, eh?~

== ~C-ARANJ~ IF ~IsGabber("Skooter")~ THEN ~[ARAN] Oh, I'm right sorry, I am. Skooter, I did promise a throw or two o' that stick, didn't I. Right then, here you go... one good toss down that way. Just don't get lost, eh, m'boyo? There's critters around here what could eat *me* for a light snack, let alone you.~

== ~C-ARANJ~ IF ~IsGabber("SOLAUFEIN")~ THEN ~[ARAN] I'm not that interested in talkin' to no drow, nohow, Solaufein. You may talk a good game, but me, I got both my eyes on you. Figuratively speakin' that is. It'd be a mite messy if I done popped 'em out an' stuck em' to you.~

== ~C-ARANJ~ IF ~IsGabber("SUBRU")~ THEN ~[ARAN] Bugger all, Bruce, I told you I was tapped out clean. No coin, no trade bars, nothin'. Hells, man, here - take this flask. An' don't be drinkin' it staright in one shot, or it'll put you right over on your ares. Cut it wi' some water. Now leave me alone 'til payday!~

== ~C-ARANJ~ IF ~IsGabber("SUHESSA")~ THEN ~[ARAN] An' give me back my coinpurse, there, stickyfingers. Umberlee's Undulating Urges, Hessa, you should be lookin' for other marks, not messin' wi' my flat purse. <CHARNAME>'s holdin' all my share!~

== ~C-ARANJ~ IF ~IsGabber("t#dace")~ THEN ~[ARAN] An' don't you be goin' all 'Ducky This' an' 'Ducky That' wi', me, Linton.  You're a right fine woman, but I figure you're a mite too streetwise to come roll in th' hay wi' th' like o' me.~

== ~C-ARANJ~ IF ~IsGabber("TASHIA")~ THEN ~[ARAN] Now, you want me to carry that kitty cat o' yours about, I'm your man. An' I wouldn't mind a few riddles, nether, Tashia. How about when we camp, I wander on by an' we have a nice conversation, private-like. I'll brew some decent tea...~

== ~C-ARANJ~ IF ~IsGabber("TSUJATH")~ THEN ~[ARAN] Outsider an' necromancer... there's naught about you that sits right wi' me, Tsujatha. I' m tolerant for <CHARNAME>'s sake, an' that's about it. So don't look for small talk an' comeradeship here.~

== ~C-ARANJ~ IF ~IsGabber("Valen")~ THEN ~[ARAN] An' stop spookin' me like that, Valen. I stay on one side o' <CHARNAME>, you stay on th' other, an' we will be fine. But I don't rightly think we should be havin' no private conversation. I'm likely to end up bein' an appetizer, or a light pre-dinner snack.~

== ~C-ARANJ~ IF ~IsGabber("Valygar")~ THEN ~[ARAN] I'm right suprised you want to talk, anyways, Valygar. You haven't put two words together wi' me in nigh on a tenday.~

== ~C-ARANJ~ IF ~IsGabber("Viconia")~ THEN ~[ARAN] On second thought, Viconia, don't even bother. I've got naught to say to a Shar-kissed spawn o' th' Nether Planes. Bugger off an' go screw an ettin, or somethin'.~

== ~C-ARANJ~ IF ~IsGabber("WILLYB")~ THEN ~[ARAN] besides, if it s that coin I owe you, Bruce m'boy, I'm tapped out until <CHARNAME> loosens those purse strings. So don't go all 'beat your arse' this an' 'youse gonna get yours' on me, eh? Just get <CHARNAME> to drop a few coin my way, an' I'll get square wi' you.~

== ~C-ARANJ~ IF ~IsGabber("WLBRAN")~ THEN ~[ARAN] I don't want to drive you away, none, Branwen  you are a fine figure o' a woman. All that 'Tempus' Shield' talk, though, it worries me a mite. I'd offer you some companionship, but I'd rather not be askin' you to heal th' parts o' my body you might cut off.~

== ~C-ARANJ~ IF ~IsGabber("WxJon")~ THEN ~[ARAN] Aye, I did check up on th' idea, Jonathan, an' you'd be a fine addition to any one o' three different Guilds. I can write up th' letters for you, if you want, but the again, what be th' hurry? Th' Guilds take a tithe, an' you are doin' right fine as an independent, watchin' <CHARNAME>'s back.~

== ~C-ARANJ~ IF ~IsGabber("xulaye")~ THEN ~[ARAN] An' by Lolth's Lengthy Legs, keep away from me, you heartless drow bitch. I'm not one o' your filthy spider-spawn males to order about, Xulaye, cover or no cover. You want somethin', you put it through <CHARNAME>, done correct on th' chain o' command.~

== ~C-ARANJ~ IF ~IsGabber("YASRAENA")~ THEN ~[ARAN] I don't have naught to say to you nohow, Yasraena. You seem to be backin' <CHARNAME>, an' I see why. But the only good drow is... well, I'm not so sure I should finish that statement. Just stay where I can watch you, an' don't try to talk me up, an' I won't cause you no trouble. ~

== ~C-ARANJ~ IF ~IsGabber("Yoshimo")~ THEN ~[ARAN] Tell you what, Yoshimo - we'll talk next time we camp. I want to try that card game again. I don't rightly know how you won all five hands, an' I want a chance to make some o' those wages back. ~

== ~C-ARANJ~ IF ~IsGabber("ZAIYA")~ THEN ~[ARAN] Now, don't you be gettin' mad, there, Zaiya. I'm right interested in what you have to say. An' you are a right fine lookin' lassie, too, though sometimes it be dangerous to be around one o' those 'surges' o' yours...~

== ~C-ARANJ~ IF ~IsGabber("Z_MODDY")~ THEN ~[ARAN] Now then, miss foxy lass, I don't have no problems wi' talkin' to you, but now is not rightly th' time. Come by at dinner, Moddy, an' we'll share a bit o' talk, eh? Or better yet, a nice brace 'o rabbits.~

== ~C-ARANJ~ IF ~!IsGabber("ADANGEL")
!IsGabber("K#SHEENA")
!IsGabber("Aerie")
!IsGabber("Anishai")
!IsGabber("Anomen")
!IsGabber("Azure")
!IsGabber("B!Gavin")
!IsGabber("b!haldamir")
!IsGabber("BIDDE")
!IsGabber("Britt")  
!IsGabber("BWTOUCHX")
!IsGabber("CALLISTO")
!IsGabber("Cernd")
!IsGabber("CHLOE")
!IsGabber("CMALORA")
!IsGabber("CMGMIRIAM")
!IsGabber("CMNIKITA")
!IsGabber("CMNINAF")
!IsGabber("CORAN")
!IsGabber("D#Silver")
!IsGabber("D0Alassa")
!IsGabber("t#dace")
!IsGabber("DL#BWN")
!IsGabber("DYNAHEIR")
!IsGabber("E3Fade")
!IsGabber("Edwin")
!IsGabber("FHLAND")
!IsGabber("FHLSEB")
!IsGabber("FINIREN")
!IsGabber("FWGhareth")
!IsGabber("G#CASS")
!IsGabber("GOZALOTH")
!IsGabber("HaerDalis")
!IsGabber("Horace")
!IsGabber("Hubelpot")
!IsGabber("Imoen2")
!IsGabber("IYLOS")
!IsGabber("J#Kelsey")
!IsGabber("Jaheira")
!IsGabber("Jan")
!IsGabber("JCBruce")
!IsGabber("Kari")
!IsGabber("K#Auren")
!IsGabber("K#Bana")
!IsGabber("K#Sarah")
!IsGabber("KACHIKO")
!IsGabber("Keldorn")
!IsGabber("Keto")
!IsGabber("KIARA")
!IsGabber("KINDREK")
!IsGabber("Kiyone")	
!IsGabber("Korgan")
!IsGabber("Kova")  
!IsGabber("LRIRENIC")
!IsGabber("M#AMBER")
!IsGabber("Mazzy")
!IsGabber("Minsc")
!IsGabber("MTS#Shy")
!IsGabber("MWAriena")
!IsGabber("MWKido")
!IsGabber("Nalia")
!IsGabber("NATH")
!IsGabber("Ninde")
!IsGabber("O#TIAX")
!IsGabber("O#XAN")
!IsGabber("P#DEHER")
!IsGabber("P#KIVAN")
!IsGabber("R#ALLIS")
!IsGabber("R#Kitanya")
!IsGabber("Rylorn")
!IsGabber("SAERILETH")
!IsGabber("SDNPC")  
!IsGabber("SIME")
!IsGabber("SK#NEHT")
!IsGabber("Skooter")
!IsGabber("SOLAUFEIN")
!IsGabber("SUBRU")
!IsGabber("SUHESSA")
!IsGabber("TASHIA")
!IsGabber("TSUJATH")
!IsGabber("Valen")
!IsGabber("Valygar")
!IsGabber("Viconia")
!IsGabber("WxJon")
!IsGabber("WILLYB")
!IsGabber("WLBRAN")
!IsGabber("Xulaye")
!IsGabber("YASRAENA")
!IsGabber("Yoshimo")
!IsGabber("Z_MODDY")
!IsGabber("ZAIYA")~ THEN ~[ARAN] No offence, <GABBER>, I just don't rightly have much to say to you right now.~
EXIT

 

Please feel free to add suggestions!

 

In Progress Notes:

 

/* Missing Stivan, SBS (Sandra), Therrin, Vanim, Wikaede, Mulgore & Xavia (BGT Indira, some of the Tutu NPC mods that might be CLUA'd into a BGT game) */

 

/* LEFT OFF ON PURPOSE: Taim, updated by MTS. No dialog, no assignments - silent NPC. */

 

/* Siefer's Horace is only available through PM/private distribution, and needs minor editing of .d for modern installs. May need permissions to update it and put it back in operation. */

 

/* Bananna included, but just for fun!

 

[ARAN] Why are bananas never lonely?

[bANANNA] Because they hang around in bunches.

[ARAN] I done figured it was on account o' they make a right fine snack, so they don't have much time this run on th' Great Wheel.

[bANANNA] You are a sick, sick man.

 

[ARAN] I heard down on th' south continent, they 're not goin' to grow bananas no longer.

[bANANNA] Really? Why not? That sounds like Banannacide.

[ARAN] I heard they was long enough already.

[bANANNA] I knew this was an adult mod, but that is a little gauche, don't you think?

 

[ARAN] Hey, Bananna, what's we supposed to do if we see you go all blue?

[bANANNA] Try to cheer me up, of course.

 

[ARAN] Hey, Bananna, what would you call two banana skins?

[bANANNA] Well, besides murder and vivisaction, I don't know.

[ARAN] A pair o' slippers, o' course...

[bANANA] Let me guess... you teach 10 year olds, don't you?

 

[ARAN] Hey, Bananna, why is a banana peel on the sidewalk like music?

[bANANA] You really have a thing for clobbering fruit, don't you?

[ARAN] On account o' if you don't C sharp, you'll B flat.

[bANANA] By Chiquita, Dole, and all the other Great Bananna Gods, get this man away from me!

 

[bANANA] Hey, Aran... eat me.

[ARAN] Well now, if that be an invitation...

[bANANA] Hey, stop grinning like that! This isn't the Square Mod.

 

[ARAN] Hey, Bannana, Knock knock!

[bANANA] Who's there?

[ARAN] Banana.

[bANANA] Yes?

[ARAN] No, that's who's there.

[bANANA] That's not there, or No's not there?

[ARAN] Bloody hells, that's what you get when you go tryin' to talk to a bananna.

 

[ARAN] Hey, Bannana, let's try this again. Knock knock!

[bANANA] Who's there?

[ARAN] Banana.

[bANANA] Banana who?

[ARAN] Knock Knock.

[bANANA] Who's there?

[ARAN] Banana.

[bANANA] Banana who?

[ARAN] Knock Knock.

[bANANA] Who's there?

[ARAN] Orange.

[bANANA] Hey, leave my sister out of this.

[ARAN] Bloody hells, another blighted joke smashed to a pulp.

[bANANA] No need to get violent there, big boy.

 

*/

 

/* Skooter included, but not on NPC tutorial index for pdialog.2da. Note to self - Check with Ace - I can see a whole ton of fun dialog now.

 

[ARAN] Chauntea take that dog, he done tripped me three times today already. Right, then, laddie, waht do you want?

[sKOOTER] THUD. *pant* *pant* *pant* *pant* *pant*

[ARAN] OK. Now I see. Droppin' th' stick on my foot done made it clear. You are a bloody strong dog, eh? I'll toss it, then go get my foot bandaged.

[sKOOTER] *wag* *wag*

[ARAN] And a good wind up... go get it!

[sKOOTER] (Zzzzing...)

 

 

[ARAN] Hey, where did my jerky go?

[sKOOTER] wmbmbmwmbb

[ARAN] SKOOTER! Hey, leave that be, m'boyo - get your doggie teeth outta my sna... bloody hells, too late.

[sKOOTER] *sniff* *sniff*

[ARAN] Oi, there, laddie - get that long nose back where it do belong. You get any more treats, I'll be carryin you while you moan an' complain from overindulgin' !

 

*/

 

NPC tutorial index for pdialog.2da

 

Dace Linton [T#DACE T#DACEP T#DACEJ T#DACED T#DAC25P T#DAC25J T#DAC25D T#DAC25 BT#DACE BT#DAC25]

 

Bananna (short joke joinable) [K#Bana K#BanaP K#BanaJ K#BanaD K#Ban25P K#Ban25J K#Ban25D K#Bana25 K#BanaB K#Ban25B]

 

Horace (Siefer) [Horace HoraceP HoraceJ HoraceD Horc25P Horc25J Horc25D Horc25 BHorace BHorc25]

 

Sheena (Red Night)[K#SHEENA SHEENAP SHEENAJ SHEENAD SHEENA25P SHEENA25J SHEENA25D SHEENA25 BSHEENA BSHEENA25]

 

Taim (Major Tom Sawyer) [ silent, no dialog assignments made at all]

 

Ninde (Diva) [NINDE LK#NINDP LK#NINDJ LK#NIND LK#NI25P LK#NI25J LK#NI25D LK#NI25 BLK#NIND BLK#NI25]

Edited by cmorgan

Share this post


Link to post

Pass #1, cleanup, edits, and additions filling out more responses to other NPCs initiating PID.

 

EDIT: pass #2, same, plus added Xulaye.

Share this post


Link to post

Draft #3 up, adding some npcs and cleaning up some of the typos.

Share this post


Link to post

......it's taken me this long to realize that there are banters with Banana, hahaha.

 

Banana technically only stays in the party for 15 minutes and then just leaves. It's part of a poorly formed joke by Noctalys and me.

 

Skooter never actually joins the party. You just chase him around Athkatla for a bit. :p

 

Still, very funny.

Share this post


Link to post

I guess I should leave them out, but I thought they were fun to play with :p

 

I'm going to move on, but will be coming back to fill the last few of those in with the remaining NPCs I have been able to drum up.

Share this post


Link to post

Continuing PIDs

OK, we have a top level "always true if Player1 isn't talking" still under construction, but let's unload some dialog evaluation work. Technically, you could create a whole raft of PID states this way, but in practice, it is easiest to keep as much of your dialog under tight control as possible. Not much messes with internal state replies in other folk's NPCs, but dialog state reordering can mess you up. Safest to have a very few options weighted properly, and go from there. So I am settling on a "fall through" tree of evaluation that goes like this:

 

  • Is anything else valid? Yes = do that, no = go ahead to the next check.
  • Are we initiating dialog from someone other than Player1? Yes = stop here and play the "You are not Player1, so bugger off" dialog state, No = go on to the next level
  • Are we initiating dialog from Player1 AND in the Underdark? Yes = stop here and play the "You are Player1, but we are all pretending to be Drow, so we have to watch ourselves somethin' fierce." dialog state, No = go on to the next level
  • Are we initiating dialog from Player1 NOT in the Underdark? Yes = stop here and play the "You are Player1, so let's talk, flirt, and genenerally mess about." dialog state, No = something is seriously wrong - this is the last state in the dialog file evaluation order, bar none. If there is a no to this one, well, "Huston, we have a problem..."

 

The reminder here is to do "forward <> reverse" thinking. Dialog states evaluate in weighted order from top to bottom, but replies evaluate bottom to top.

 

so with no fancy changes in weighting you get

1 evaluated state 1 of 2

c Within 1, evaluated third

b Within 1, evaluated second

a Within 1, evaluated first

 

2 evaluated state 2 of 2

c Within 2, evaluated third

b Within 2, evaluated second

a Within 2, evaluated first

 

Discussion: Separating PID States vs One Big State

 

Some coders, notably Kulyok (in Xan, JCompton's Nalia romance, and Angelo) and the duo modding team of Feuille & Miss Sakaki (in Nathaniel), separate out several different conditional PIDs. They do this to unload work from the central state. Nathaniel, for example has no less han 9 separate evaluated PIDs, tailored to bands of friend talks versus bands of lovetalks, and various conditions throughout the progression of the PC <> NPC relationship. At the far other end of the spectrum is Jastey's Ajantis in BG1NPC, which loads a huge PID into one single state with "submenus", or evaluated states that lead can lead to more evaluated staes. The state takes a bit of time to evaluate, but everything is in one precisely and tightly conditioned package, relying on the reply states to filter the NPC response to conditions very carefully.

 

Neither approach is wrong, of course - one big state takes longer to evaluate (there is a noticeable pause before bg1npc PID's in general), but they mean one single state to deal with weight ordering/troubleshooting. There is nothing like going down a tree of states in your code and seeing "yes, this condition is covered - we have one for Global, one for !Global, one for Global+condition, one for !Global+condition"! Multiple PID states can mean duplication of reply states and more troubleshooting, where you can lose thread of what you have allowed to happen when, and leaving more possibilities for either accidentally creating states that never come true, or the reverse. They have a huge advantage in keeping extra materials and checks for that material from being evaluated, so no delays in PIDs popping up, and if you think within the individual "branch" PID, you can have both tightly tailored conditional responses *and* no delays in processing.

 

I think for Aran, I am going to again choose a halfway point, and separate out parts of the PID in a way that will keep me organized. This is because he is a concept mod, so playing with different ways of coding in the same mod can be fun for discussion/help, and also because as I am writing this with a general outline and filling in details as we go along - and it will help me focus on a secondary PID/Flirt topic, the Underdark (Chapter 5). The folks at Petals & Thorns pointed out that Underdark is a traditional "no flirt" area. Right now, the only example out there that I could find that allows "characters acting within character while playing other characters" is the Edwin Flirt pack. It might be fun to play with this opportunity - and either way, the PID needs to be changed during Chapter 5, either shutting it down like Flirtpack and most NPCs, or creating custom content.

 

/* PID 2: Options for PC <> Aran, Underdark	*/

IF ~IsGabber(Player1)
OR(17)
AreaCheck("AR2100")
AreaCheck("AR2101")
AreaCheck("AR2102")
AreaCheck("AR2200")
AreaCheck("AR2201")
AreaCheck("AR2202")
AreaCheck("AR2203")
AreaCheck("AR2204")
AreaCheck("AR2205")
AreaCheck("AR2206")
AreaCheck("AR2207")
AreaCheck("AR2208")
AreaCheck("AR2209")
AreaCheck("AR2210")
AreaCheck("AR2400")
AreaCheck("AR2401")
AreaCheck("AR2402")~ THEN BEGIN c-aranpidunderdark
SAY ~[ARAN]	<<THIS SPACE FOR RENT OR LEASE - REASONABLE RATES. INQUIRE WITHIN. NO DROW NEED APPLY. GITHYANKI MUST PROVIDE HOUSING REFERENCES AND TWO TENDAY DEPOSIT.>> ~
IF ~~ THEN EXIT
END

 

 

Technically, we could use ~Global("Chapter","GLOBAL",5)~ to cover the same territory, but most folks stick to the more detailed AreaCheck conditioning. I am going to follow suit.

 

separated to a separate topic [>> insert link here when done <<]

 

-----

 

Coding up the basic outline for the workhorse PID dialog state

 

OK, the central PID state. We know from bg1npc that the dialog state for a PID can be huge. We also know there is not much space on the screen, so we don't want to overload the player or the screen. So we have separated out the "not Player 1 talking" state, the "in Underdark" PID, and the "In Watcher's Keep PID". We can run everything else off of one central PID state.

 

The object here is to allow lots of play for folks who use PIDs, but control choices by number, tailored to the game progress. Ajantis (bg1npc) in BG1NPC is perhaps the most comprehensive PID out there, followed closely by Gavin (berelinde) and SharTeel (BG1NPC). BG content screamed for more interaction, so that is to be expected. Most BG2 NPCs don't go to this extreme, and for good reason - between the more talkative NPCs, the banters, the banter/flirtpacks, crossmod, etc., there is alot going on anyways! But here, we need to follow the "player control" principal. Aran is supposed to be a Companion, the kind of dude who has your back (even when it is a reluctant "ok, well, slaughtering innocents isn't my bag, but you are my BFF, and hells that kid didn't have no future anyways" kind of feeling). So we need to provide general friendship, some tailored questions/interactions, and general stuff PC can poke at Aran with, plus extensions for female PCs to handle flirting.

 

The general idea map is

 

 

/* General Options, both Male PC and female PC */

>>>> /* voice/string fixer (1 reply state) */

>>>> /* chapter - dependent (1) */

>>>> /* race - dependent (1) */

>>>>/* reputation - dependent (1) */

>>>> /* class - dependent , PC (1 or 2) */

>>>> /* class - dependent , Aran (1 or 2) */

>>>> /* area - dependent (1 or 2 ) */

>>>> /* Always Available (1 or 2 randomized) */

 

At the very end,

 

>> /* Escape The PID Because Aran Got Waylaid By Bhodi and Went All Anti-Buffy */

 

This gives 8 to 12 replies available in the PID at any given time for male PCs having Aran along as a drinking companion/meat shield.

 

We then add in the Player - Initiated flirts for female NPCs. This set show up for female PC's only, extending the menu.

/* FLIRT MENU ADDITIONS, female PC's only */

 

>> /* romance - dependent (1) to allow breakup or resume romance. */

 

>> /* Stop or Restart Flirting; (1) of the three should be active at any one time. */

>>>> /* PC Doesn't Want NPC Initiated flirts */

>>>> /* PC Wants NPC Initiated Flirts */

>>>> /* PC Wants NPC Initiated Flirts but Aran is Mad */

 

>> /* PC Initiated Flirting; (1) of the 4 should be active at any one time. */

>>>> /* PC Wants To Initiate A Flirt: Lightweight */

>>>> /* PC Wants To Initiate A Flirt: Heavyweight */

>>>> /* PC Wants To Initiate A Flirt: Mature */

>>>> /* PC Wants To Initiate A Flirt, But Aran Is Angry - handled within submenu */

 

this shouldn't happen if everrything works, but we might as well add a duplicate state to make sure (we will clone the same response as from the upper menu):

>> /* PC Wants To Initiate A Flirt: Aran Has Been Vamped Shutdown (last state in list) */

 

 

So for female PCs, the number jumps to a range from 11 to 15. 15 is pretty heavy: we may rethink this... what in the above can be reduced? We really don't want to break 10 at any one time if we can avoid it. One way we can do this is "submenu" a section of the PID b consolidating one of the sections. Basically, just like the flirts, farm out some of the materials into a set of responses. The code idea is this:

 

IF ~~ THEN REPLY ~[PC] So, Aran, can we talk?~ + c-aranpid_talk_submenu

And then set an ordered set of replies in the submenu, so that

 

IF ~~ c-aranpid_talk_submenu

SAY ~[ARAN] Sure thing, <CHARNAME>. let me put this crap down so's I can talk a bit.~

IF ~ <<condition1>>~ THEN REPLY ~[PC] Have you ever kissed a girl before?~ + c-aran_PC_replies<<condition1>>

IF ~ <<condition1>>~ THEN REPLY ~[PC] So, will you tell me a story?~ + c-aran_PC_replies<<condition2>>

etc.

 

or even more nested:

 

IF ~~ c-aranpid_talk_submenu

SAY ~[ARAN] Sure thing, <CHARNAME>. let me put this crap down so's I can talk a bit.~ + c-aran_replies_for_menu's_sake

IF ~RandNum(22,22)~ THEN GOTO c-aran_PC_replies_22

etc.

 

 

There is a problem with this, and it is why most folks coding use this sparingly. The resulting conversation runs "choppy"

 

[PC] So, Aran, can we talk?
[ARAN] Sure thing, <CHARNAME>. let me put this crap down so's I can talk a bit.
[ARAN] So, what do you want to talk about?.
[PC] question1

[PC] question2

[PC] question3

[PC] question4

[ARAN] answer.

 

5 dialog boxes, just to ask a simple question - not cool. Clickfest. So unless the dialog flows that way on purpose, less-machine-like is better.

 

With PIDs, though we have to be careful of evaluation time. So while the best structure for dialog flow is something at the top level, we need to look for opportunities to balance PID simplicity with dialog flow. For that, let's do several tricks.

 

#1 - the disappearing PID response.

	+ ~AreaCheck("AR0300") Global("c-aranpidac1","LOCALS",0)~ + ~[PC] Now, a traveller like you should know something about these slums. Do you have any information for me?~ DO ~SetGlobal("c-aranpidac1","LOCALS",1)~ + c-aranpiddock // Docks

This one appears in one area, once, then doesn't appear again. Asked and answered - and clears out the PID for other ooptions. I'm using LOCALS here, because I am not intending to ever have anything outside of this one dialog reference that variable.

 

#2 - the randomized PID response.

	+ ~RandNum(4,4) AreaType(DUNGEON)~ + ~[PC] These surroundings are a little gloomy, aren't they?~ + c-aranpiddungeon1
+ ~RandNum(4,3) AreaType(DUNGEON)~ + ~[PC] These surroundings are a little gloomy, aren't they?~ + c-aranpiddungeon2
+ ~RandNum(4,2) AreaType(DUNGEON)~ + ~[PC] These surroundings are a little gloomy, aren't they?~ + c-aranpiddungeon3
+ ~RandNum(4,1) AreaType(DUNGEON)~ + ~[PC] These surroundings are a little gloomy, aren't they?~ + c-aranpiddungeon4

This set of 4 reply styates shows only 1 of 4 at any given time. 4 different random responses to the same basic question, all available in any area flagged "dungeon" (and we don't have to worry about Underdark, because it has been taken right off the loadout by the PID state evaluated before this entire sequence).

 

#3 - the submenu PID response.

	IF ~Gender(Player1,FEMALE) Global("c-aranpcflirtstart","GLOBAL",1) Global("c-aransex","GLOBAL",0) OR(2) Global("c-aranromance","GLOBAL",1) Global("c-aranromance","GLOBAL",2) Global("c-aranfight","GLOBAL",0)~ THEN REPLY ~(You decide to flirt with Aran)~ + c-pcflirtsaran1

 

This sends the player to a new evaluated state, with a ton of conditioned replies, spinning the whole flirt menu off into its own little world. It won't even show up for male PC's, or the romance being over, cycles to heavier flirts if the couple has already had a romp in the hay, if they are fighting, etc.

 

 

There are a to more ways of manouvering the player and his/her PC into good fun roleplaying discussions - check out the J-file of many NPC mods, and you will see states like these that have StatCheck -driven reply states, alignment-driven ones, all sorts of cool things. But since I am saving alot of that for friendtalks and lovetalks, and this is turning out to be a very large PID indeed, I think if I ever want to finish Aran it had better stop here and let other areas pick up that slack. There is always an opportunity to add more later on.

 

There are a few other ways of manipulating dialog, too, but this is enough for discussion right now. So, what does implementation of this look like?

Share this post


Link to post

So, here is a first draft of the central PID state.

 

EDIT: March 26, 2009, 2nd draft

 

/* PID 3: Options for PC <> Aran, everywhere else */

IF ~IsGabber(Player1) !Global("Chapter","GLOBAL",5)~ c-aranpidfriend // chapter 5 is underdark

SAY ~[ARAN]	~
/* General Options, both Male PC and female PC */
/*	voice/string fixer */
++ ~[PC] Aran, your voice sounds strange. Have you been drinking again?~ + c-aranpidvoice
/*	Some Prefer Silence... Shudown or re-enable gabby commenting and I_C_Ts */
	+ ~Global("c-silencearan","GLOBAL",0)~ + ~[PC] I hate random comments. Only talk about important things, Aran.~ + c-aransilencer
	+ ~Global("c-silencearan","GLOBAL",1)~ + ~[PC] Hey, I have changed my mind. Go ahead and say what you want to say, Aran, any time you want to say it. Random comments are fine.~ + c-aransilencer
/* chapter - dependent (1) */
+ ~Global("Chapter","GLOBAL",2)~ + ~[PC] Well, do you have any advice for me, Aran?~ + c-aranpidch2 // search for your girlfriend, or not.
+ ~Global("Chapter","GLOBAL",3) Global("WorkingForAran","GLOBAL",1)~ + ~[PC] Well, do you have any advice for me, Aran?~ + c-aranpidch3a // with friends like these, who needs enemies.
+ ~Global("Chapter","GLOBAL",3) Global("WorkingForBodhi","GLOBAL",1)~ + ~[PC] Well, do you have any advice for me, Aran?~ + c-aranpidch3b // with frinds like these,  we are likely to be a midnight snack.
+ ~!Dead("C6Bodhi") GlobalGT("Chapter","GLOBAL",3)~ + ~[PC] Well, do you have any advice for me, Aran?~ + c-aranpidchba // it ain't over 'til the dead lady sings.
+ ~Dead("C6Bodhi") GlobalGT("Chapter","GLOBAL",3)~ + ~[PC] Well, do you have any advice for me, Aran?~ + c-aranpidchbd // ding, dong, the biatch be dust (which old biatch? The Wicked Biatch!)
+ ~Global("Chapter","GLOBAL",7)~ + ~[PC] Well, do you have any advice for me, Aran?~ + c-aranpidsund // Chapter 7: Suldanessellar, Capitol of Plot Devices, then straight to hell. Literally.

/* race - dependent	(1) */
+ ~Race(Player1,ELF)~ + ~[PC] You keep looking at me. Is there something wrong?~ + c-aranpidelf
+ ~Race(Player1,HUMAN)~ + ~[PC] You keep looking at me. Is there something wrong?~ + c-aranpidhum
+ ~Race(Player1,DWARF)~ + ~[PC] You keep looking at me. Is there something wrong?~ + c-aranpiddwarf
+ ~Race(Player1,HALFORC)~ + ~[PC] You keep looking at me. Is there something wrong?~ + c-aranpidorc
+ ~Race(Player1,GNOME)~ + ~[PC] You keep looking at me. Is there something wrong?~ + c-aranpidgnome
+ ~Race(Player1,HALFLING)~ + ~[PC] You keep looking at me. Is there something wrong?~ + c-aranpidhan
+ ~Race(Player1,HALF_ELF)~ + ~[PC] You keep looking at me. Is there something wrong?~ + c-aranpidhaldelf

/* reputation - dependent	(1) */
+ ~ReputationGT(Player1,17)~ + ~[PC] We seem to be getting quite a reputation.~ + c-aranpidgood
+ ~ReputationLT(Player1,18) ReputationGT(Player1,14)~ + ~[PC] We seem to be getting quite a reputation.~ + c-aranpidbetter
+ ~ReputationLT(Player1,15) ReputationGT(Player1,9)~ + ~[PC] We seem to be getting quite a reputation.~ + c-aranpidneutra
+ ~ReputationLT(Player1,10) ReputationGT(Player1,4)~ + ~[PC] We seem to be getting quite a reputation.~ + c-aranpidbad
+ ~ReputationLT(Player1,5)~ + ~[PC] We seem to be getting quite a reputation.~ + c-aranpidevil

/* class - dependent , PC	(1 or 2 ) */
+ ~Class(Player1,MAGE_ALL)~ + ~[PC] Do you want some help scribing a scroll?~ + c-aranpidmage1
+ ~Class(Player1,FIGHTER_ALL)~ + ~[PC] Sparring practice might be useful.~ + c-aranpidfighter1
+ ~Class(Player1,THIEF_ALL)~ + ~[PC] Hey, stand over there. i want to practice sneaking up on you.~ + c-aranpidthief1
+ ~Class(Player1,CLERIC_ALL) Alignment(Player1,MASK_GOOD)~ + ~[PC] I will say a prayer for you, Aran.~ + c-aranpidcleric1g
+ ~Class(Player1,CLERIC_ALL) Alignment(Player1,MASK_EVIL)~ + ~[PC] I will say a prayer for you, Aran.~ + c-aranpidcleric1e
+ ~Class(Player1,CLERIC_ALL) !Alignment(Player1,MASK_GOOD) !Alignment(Player1,MASK_EVIL)~ + ~[PC] I will say a prayer for you, Aran.~ + c-aranpidcleric1n
+ ~Class(Player1,PALADIN_ALL) !Class("c-aran",PALADIN_ALL)~ + ~[PC] Have you ever thought of following the ways of my order?~ + c-aranpidpally1
+ ~Class(Player1,PALADIN_ALL) Class("c-aran",PALADIN_ALL)~ + ~[PC] It is good to travel with a fellow paladin. Tell me, have you ever thought of following the ways of my order?~ + c-aranpidpally1
+ ~Class(Player1,SORCERER)~ + ~[PC] Here, catch. (conjure a globe of light and toss it towards Aran.)~ + c-aranpidsorc1
+ ~Class(Player1,MONK)~ + ~[PC] Perhaps you would like to meditate with me.~ + c-aranpidmonk1
+ ~Class(Player1,BARD_ALL)~ + ~[PC]	~ + c-aranpidbard1

/* class - dependent , Aran	(1 or 2 ) */
+ ~Class("c-aran",MAGE_ALL)~ + ~[PC] I think your spellcasting is getting better. At least, you seem less likely to catch part of me in your spell by accident.~ + c-aranpidmage2
+ ~Class("c-aran",FIGHTER_ALL)~ + ~[PC] We should discuss your fighting tactics sometime.~ + c-aranpidfighter2
+ ~Class("c-aran",THIEF_ALL)~ + ~[PC] Have you worked on those lockpicking and detrapping skills of yours lately?~ + c-aranpidthief2
+ ~Class("c-aran",CLERIC_ALL)~ + ~[PC] Perhaps you should ask your god what we should do next, Aran.~ + c-aranpidcleric2
+ ~Class("c-aran",PALADIN_ALL)~ + ~[PC] How did a rough and tumble character like you ever get to become a paladin, anyways?~ + c-aranpidpally2
+ ~Class("c-aran",SORCERER)~ + ~[PC] Aran, you are doing it again. Your left hand is sparking. Can you control yourself?~ + c-aranpidsorc2
+ ~Class("c-aran",MONK)~ + ~[PC] I thought monks were quiet, inrtrospective, and subtle. That does not seem to be your style.~ + c-aranpidmonk2
+ ~Class("c-aran",BARD_ALL)~ + ~[PC] So, how is the great Chronicaler coming along with the story?~ + c-aranpidbard2

/* area - dependent (1 or 2 ) */
+ ~RandNum(4,4) AreaType(DUNGEON)~ + ~[PC] These surroundings are a little gloomy, aren't they?~ + c-aranpiddungeon1
+ ~RandNum(4,3) AreaType(DUNGEON)~ + ~[PC] These surroundings are a little gloomy, aren't they?~ + c-aranpiddungeon2
+ ~RandNum(4,2) AreaType(DUNGEON)~ + ~[PC] These surroundings are a little gloomy, aren't they?~ + c-aranpiddungeon3
+ ~RandNum(4,1) AreaType(DUNGEON)~ + ~[PC] These surroundings are a little gloomy, aren't they?~ + c-aranpiddungeon4
+ ~TimeOfDay(NIGHT) AreaType(CITY)~ + ~[PC] The sights and sounds of a darkened city, laid out before us...~ + c-aranpidnightcity
+ ~TimeOfDay(DAY) AreaType(CITY)~ + ~[PC] The sights and sounds of a busy bright day in the city, with a thousand adventures ahead...~ + c-aranpiddaycity
+ ~TimeOfDay(NIGHT) AreaType(FOREST)~ + ~[PC] Aran, what are you looking at? Is something wrong?~ + c-aranpidnightforest
+ ~TimeOfDay(DAY) AreaType(FOREST)~ + ~[PC] Aran, what are you looking at? Is something wrong?~ + c-aranpiddayforest
+ ~AreaCheck("AR0300") Global("c-aranpidac1","LOCALS",0)~ + ~[PC] Do you know anything interesting about the Docks District?~ DO ~SetGlobal("c-aranpidac1","LOCALS",1)~ + c-aranpiddock // Docks
+ ~AreaCheck("AR0400") Global("c-aranpidac2","LOCALS",0)~ + ~[PC] Now, a traveller like you should know something about these slums. Do you have any information for me?~ DO ~SetGlobal("c-aranpidac2","LOCALS",1)~ + c-aranpidslum	// Slums
+ ~AreaCheck("AR0500") Global("c-aranpidac3","LOCALS",0)~ + ~[PC]  Have you ever been to the Bridge District before, Aran?~ DO ~SetGlobal("c-aranpidac3","LOCALS",1)~ + c-aranpidbridge // Bridge District
+ ~AreaCheck("AR0700") Global("c-aranpidac4","LOCALS",0)~ + ~[PC] What can you tell me about this Promenade, here?~ DO ~SetGlobal("c-aranpidac4","LOCALS",1)~ + c-aranpidprom	 // Waukeen's Promenade
+ ~AreaCheck("AR0701") Global("c-aranpidac5","LOCALS",0)~ + ~[PC] Great. Stinking, slimy sewers. Any suggestions on how to proceed?~ DO ~SetGlobal("c-aranpidac5","LOCALS",1)~ + c-aranpidsew // Sewers
+ ~AreaCheck("AR0800") Global("c-aranpidac6","LOCALS",0)~ + ~[PC] I suspect we will all end up in a place like this graveyard. But do you have any ideas on how to delay that for as long as possible? ~ DO ~SetGlobal("c-aranpidac6","LOCALS",1)~ + c-aranpidgrave // Graveyard
+ ~Class("c-aran",CLERIC_ALL) AreaCheck("AR0900") Global("c-aranpidac7","LOCALS",0)~ + ~[PC] I suspect you have spent very little time in the Temple District. But have you heard anything about it?~ DO ~SetGlobal("c-aranpidac7","LOCALS",1)~ + c-aranpidcler // Temple District
+ ~Class("c-aran",CLERIC_ALL) AreaCheck("AR0900") Global("c-aranpidac7","LOCALS",0)~ + ~[PC] I suspect you have spent very little time in the Temple District. But have you heard anything about it?~ DO ~SetGlobal("c-aranpidac7","LOCALS",1)~ + c-aranpidcler // Temple District
+ ~AreaCheck("AR1000") Global("c-aranpidac8","LOCALS",0)~ + ~[PC] The seat of governance. Just the place a smart sellsword would have done some research on...~ DO ~SetGlobal("c-aranpidac8","LOCALS",1)~ + c-aranpidgov // Government District
+ ~AreaCheck("AR1100") Global("c-aranpidac9","LOCALS",0)~ + ~[PC] Have you ever been here before, Aran?~ DO ~SetGlobal("c-aranpidac9","LOCALS",1)~ + c-aranpidumar // Umar Hills
+ ~AreaCheck("AR1200") Global("c-aranpidac10","LOCALS",0)~ + ~[PC] Have you ever visited this wilderness before, Aran?~ DO ~SetGlobal("c-aranpidac10","LOCALS",1)~ + c-aranpidhills // Windspear Hills
+ ~AreaCheck("AR1404") Global("c-aranpidac11","LOCALS",0)~ + ~[PC] Have you heard anything about these ruins, Aran?~ DO ~SetGlobal("c-aranpidac11","LOCALS",1)~ + c-aranpidtemple // Temple Ruins
+ ~AreaCheck("AR1600") Global("c-aranpidac12","LOCALS",0)~ + ~[PC] Have you ever been here before, Aran?~ DO ~SetGlobal("c-aranpidac12","LOCALS",1)~ + c-aranpidbrynn // Brynnlaw
+ ~AreaCheck("AR2000") Global("c-aranpidac13","LOCALS",0)~ + ~[PC] So, when was the last time you were in Trademeet?~ DO ~SetGlobal("c-aranpidac13","LOCALS",1)~ + c-aranpidtrade // Trademeet
+ ~AreaCheck("AR2800") Global("c-aranpidac14","LOCALS",0)~ + ~[PC] You are a  traveler of wide experience - have you ever been here before?~ DO ~SetGlobal("c-aranpidac14","LOCALS",1)~ + c-aranpidsund // Suldanessellar (Chapter 7)
+ ~AreaCheck("AR2900") Global("c-aranpidac15","LOCALS",0)~ + ~[PC] Well, you asked for it, and now you made it here. Did you ever think that all that blasphemy would actually get you pulled all the way to the nine hells?~ DO ~SetGlobal("c-aranpidac15","LOCALS",1)~ + c-aranpidhells // Nine Hells (Chapter 7)
/* AR2100 et al, Underdark has it's own PID. Easier just to use Chapter = 5 */
/* Watcher's Keep - duplicated in ToB - add later?	*/

+ ~Global("c-aranpidWK1","LOCALS",0) OR(4)
AreaCheck("AR3000") // Watcher's Keep
AreaCheck("AR3001") // Watcher’s Keep -- Altar level
AreaCheck("AR3003") // Watcher’s Keep -- Compass level
AreaCheck("AR3004") // Watcher’s Keep
~ + ~[PC] Well, we are off to do some good old fashioned dungeon exploring, eh, Aran?~ DO ~SetGlobal("c-aranpidWK1","LOCALS",1)~ + c-aranpidWK1

+ ~Global("c-aranpidWK2","LOCALS",0) OR(4)
AreaCheck("AR3005") // Watcher’s Keep -- tieflings
AreaCheck("AR3006") // Watcher’s Keep -- Succubus
AreaCheck("AR3007") // Watcher’s Keep -- Cambion
AreaCheck("AR3008") // Watcher’s Keep -- Balor (Paladin Sword)
~ + ~[PC] Well, what do you think of this place?~  DO ~SetGlobal("c-aranpidWK2","LOCALS",1)~ + c-aranpidWK2

+ ~Global("c-aranpidWK3","LOCALS",0) OR(4)
AreaCheck("AR3009") // Watcher’s Keep
AreaCheck("AR3010") // Watcher’s Keep -- Tanar’ri -- Obelisk
AreaCheck("AR3011") // Watcher’s Keep -- Bard’s Gloves, Manman’s Journal
AreaCheck("AR3012") // Watcher’s Keep -- Tahazzar
~ + ~[PC] I do not think that this place was designed to let us in easily.~ DO ~SetGlobal("c-aranpidWK3","LOCALS",1)~ + c-aranpidWK3

+ ~Global("c-aranpidWK4","LOCALS",0) OR(4)
AreaCheck("AR3013") // Watcher’s Keep -- Ka’rashur
AreaCheck("AR3014") // Watcher’s Keep -- White Dragon Scales
AreaCheck("AR3015") // Watcher’s Keep -- Aesgareth
AreaCheck("AR3016") // Watcher’s Keep -- Chromatic Demon; Elementalist Level
~ + ~[PC] Have you had enough wandering around in the dark trying not to get killed?~  DO ~SetGlobal("c-aranpidWK4","LOCALS",1)~ + c-aranpidWK4

+ ~Global("c-aranpidWK5","LOCALS",0) OR(6)
AreaCheck("AR3017") // Watcher’s Keep -- Carston and the machine
AreaCheck("AR3018") // Watcher’s Keep -- Saladrex (Dragon)
AreaCheck("AR3019") // Watcher’s Keep -- Helmite Level -- Last Seals
AreaCheck("AR3020") // Watcher’s Keep -- Imprisoned One
AreaCheck("AR3021") // Watcher’s Keep -- Ilithids
AreaCheck("AR3022") // Watcher’s Keep -- Anti-Paladins
~ + ~[PC] Our chllenges seem to be getting harder to overcome.~ DO ~SetGlobal("c-aranpidWK5","LOCALS",1)~ + c-aranpidWK5

+ ~Global("c-aranpidWK6","LOCALS",0) OR(5)
AreaCheck("AR3023") // Watcher’s Keep -- "Adventure Level" (Mini Map!!!)
AreaCheck("AR3024") // Watcher’s Keep -- Dragon -- Fear Challenge
AreaCheck("AR3025") // Watcher’s Keep -- Orcs -- Ixil’s Nail
AreaCheck("AR3026") // Watcher’s Keep -- Imp -- Game
AreaCheck("AR3027") // Watcher’s Keep -- Crypt -- Demi-Lich
~ + ~[PC] You are looking a little pale, Aran. Here, have some iron rations, and a bit of something to drink.~ DO ~SetGlobal("c-aranpidWK6","LOCALS",1)~ + c-aranpidWK6

//* FLIRT MENU ADDITIONS, female PC's only */
/* romance - dependent (1) to allow breakup or resume romance. */
+ ~Gender(Player1,FEMALE) Global("c-aranromance","GLOBAL",1)~ + ~[PC] I need to be clear about this, Aran. I am not interested in a romance with you. Stop talking about it.~ + c-aranpidnointerest
+ ~Gender(Player1,FEMALE) Global("c-aranromance","GLOBAL",2)~ + ~[PC] I think we are headed down the wrong path, Aran. It was fun while it lasted, but it is over. Let's just be friends. ~ + c-aranpidbreakup
+ ~Gender(Player1,FEMALE) Global("c-aranromance","GLOBAL",3)~ + ~[PC] Look, I know it is over. But I think I have changed my mind. Perhaps a romace with you might be interestig after all.~ + c-aranpidbreakupover

/* Stop or Restart Flirting; (1) of the three should be active at any one time. None show for males. */
/*	PC Doesn't Want NPC Initiated flirts */
IF ~Gender(Player1,FEMALE) Global("c-aranflirtstop","GLOBAL",0) OR(2) Global("c-aranromance","GLOBAL",1) Global("c-aranromance","GLOBAL",2)~ THEN REPLY ~[PC] You have to stop coming up to me and flirting. I do not want that behavior to continue.~ + c-aranrestopflirts

/* PC Wants NPC Initiated Flirts */
IF ~Gender(Player1,FEMALE) Global("c-aranflirtstop","GLOBAL",1) OR(2) Global("c-aranromance","GLOBAL",1) Global("c-aranromance","GLOBAL",2) Global("c-aranfight","GLOBAL",0)~ THEN REPLY ~[PC] You do not pay attention to me the way you used to, Aran. I miss your company.~ + c-aranrestartflirts

/* PC Wants NPC Initiated Flirts but Aran is Mad */
IF ~Gender(Player1,FEMALE) Global("c-aranflirtstop","GLOBAL",1) OR(2) Global("c-aranromance","GLOBAL",1) Global("c-aranromance","GLOBAL",2) Global("c-aranfight","GLOBAL",1)~ THEN REPLY ~[PC] You do not pay attention to me the way you used to, Aran. I miss your company.~ + c-aranrestartflirtsmad

/*	PC Initiated Flirting;	(1) of the four should be active at any one time. None show for males. */

/* PC Wants To Initiate A Flirt: Lightweight */
IF ~Gender(Player1,FEMALE) Global("c-aranpcflirtstart","GLOBAL",1) Global("c-aransex","GLOBAL",0) OR(2) Global("c-aranromance","GLOBAL",1) Global("c-aranromance","GLOBAL",2) Global("c-aranfight","GLOBAL",0)~ THEN REPLY ~(You decide to flirt with Aran)~ + c-pcflirtsaran1

/* PC Wants To Initiate A Flirt: Heavyweight */
IF ~Gender(Player1,FEMALE) Global("c-aranpcflirtstart","GLOBAL",2) Global("c-aransex","GLOBAL",0) OR(2) Global("c-aranromance","GLOBAL",1) Global("c-aranromance","GLOBAL",2) Global("c-aranfight","GLOBAL",0)~ THEN REPLY ~(You decide to flirt with Aran)~ + c-pcflirtsaran2

/* PC Wants To Initiate A Flirt: Mature */
IF ~Gender(Player1,FEMALE) Global("c-aranpcflirtstart","GLOBAL",2) Global("c-aransex","GLOBAL",1) OR(2) Global("c-aranromance","GLOBAL",1) Global("c-aranromance","GLOBAL",2) Global("c-aranfight","GLOBAL",0)~ THEN REPLY ~(You decide to flirt with Aran)~ + c-pcflirtsaran3

/* 2d - PC Wants To Initiate A Flirt, But Aran Is Angry - handled within submenu	*/

/* Escape This Dialog State Immediately conditions, both male and female PC's*/
IF ~GlobalGT("c-aranvamped","GLOBAL",0) GlobalLT("c-aranvamped","GLOBAL",5)~ THEN GOTO c-aranvampire
END

/* end of PID dialog state 3, central	*/

 

Next up, the reply states. Some of these are submenus: the posts following this one will be in reference to this master PID state. If you are following along, I will be posting flirt-related reply states in the Flirt #2, "Shar's Kittens" thread, and the regular ones here.

Share this post


Link to post
== ~C-ARANJ~ IF ~IsGabber("DYNAHEIR")~ THEN ~[ARAN] M'lady Wychlaryn, I don't mean no disrespect. An' please don't turn me into no toad, nor squirrel, nor naught like that, Dynaheir. I just don't have no words t' speak right now.~

"Wychlaran".

 

== ~C-ARANJ~ IF ~IsGabber("Kari")~ THEN ~[ARAN] Easy, there, lass - don't you be gatherin' your tail in a twist, an' all. Litterally, I mean. You are blushin' redder than I done seen in a tenday! Kari, I'm just busy now, that's all. Come by when we settle in for th' night, an' I'll help you with that weapon sharpenin' you were askin' about.~

"Literally".

 

The Banana section made me have to explain to my little brother why I just started giggling like mad (if you don't C sharp, you'll B flat!). Nothing like good old ridiculous banana jokes.

Share this post


Link to post

Cool, thank you!

 

Top post updated to Draft #5 (with both Luridel's edits and a run through with Notepad++'s SpellChecker).

Share this post


Link to post

Post #8 updated with darft #2 for central PID state.

Share this post


Link to post

Updated with a PID option for folks who don't like the comments.

 

I prefer NPCs who comment and talk - but there are plenty of players out there who prefer NPCs who don't comment on lots of stuff. Plus, some players might like the stronger, silenter type. So, a quick toggel to allow either style of play.

 

	/*	Some Prefer Silence... Shudown or re-enable gabby commenting and I_C_Ts */
	+ ~Global("c-silencearan","GLOBAL",0)~ + ~[PC] I hate random comments. Only talk about important things, Aran.~ + c-aransilencer
	+ ~Global("c-silencearan","GLOBAL",1)~ + ~[PC] Hey, I have changed my mind. Go ahead and say what you want to say, Aran, any time you want to say it. Random comments are fine.~ + c-aransilencer

 

Friend talks and love talks will immune to this setting, as will be a few limited comments, but whenin doubt I can let the player decide how much of Aran they want.

Share this post


Link to post

Just a note--with Xulaye, you'll probably want to do 2 PID responses depending on whether she knows you're a surfacer or not, so as not to give it away. :rolleyes:

 

== ~C-ARANJ~ IF ~IsGabber("xulaye") !Global("LK#XulayeKnows","GLOBAL",1)~ THEN ~[ARAN] An' in any case, you'll be wantin' to talk to <CHARNAME>, not me.~

== ~C-ARANJ~ IF ~IsGabber("xulaye") Global("LK#XulayeKnows","GLOBAL",1)~ THEN ~[ARAN] An' by Lolth's Lengthy Legs, keep away from me, you heartless drow bitch. I'm not one o' your filthy spider-spawn males to order about, Xulaye, cover or no cover. You want somethin', you put it through <CHARNAME>, done correct on th' chain o' command.~

Or something like that. :mwaha:

Share this post


Link to post

Holy cow, thanks - that would have been a definite breakage!

 

I am still behind the 8-ball on the crossmod stuff, too, man - I am trying for this June, if you are up for it. End-of-the-school-year-scramble for me right now...

Share this post


Link to post

No problems, figured it'd be better to make sure we don't get any continuity issues!

 

June? Sure, sounds good to me. :rolleyes:

Share this post


Link to post
Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...