Jump to content

Photo

Building Flirts, Part 1: NPC Initiated materials

mod development tutorial dialog coding aran whitehand flirts flirtpack lovetalks random number

21 replies to this topic

#1 cmorgan

cmorgan

    journeyman investigator

  • Gibberlings
  • 7097 posts
  • Gender:Male
  • Location:Glencoe, IL, USA

Posted 29 October 2008 - 09:29 AM

Ah, the Flirtpack - feel the love. In my opinion, a really good addition to your BG2 game, if you are pursuing an in-game romance. From a roleplaying perspective, why does the player have to initiate everything? If the attraction is mutual, why wouldn't the NPC in question try a little to let you know that you might just be a candidate for the position of That Special Someone™? Completely useless for powergamers and folks who want to play quests without the distractions of additional banter. Also not the best addition for folks who want to keep to the "early teen years" rating (though the 10 - 14 year olds I teach know more about hooking up than one would ever want to believe). But Aran is designed as a Companion Mod, so he should probably flirt a little bit. Or alot, as the case may be.

WARNING: Soap Opera Style Innuendo And Language Present. If You Have To Ask If You Are Old Enough To Read This, You Aren't.

So, let's hit source material for code. We are going to work with traified code, where the language that the player sees had been replaced with translation references, so that we are not unduly influenced by his text. Traified code sets up this:

SAY ~Oh, you big strong man, you~ = SAY @142

For a full rundown on traification (creation of translator files from hardcoded .d files so that different languages can be used by the same code) see [ url= get the weidu docs anchor and insert here ]this documentation[ /url ]

JCompton's FlirtPack, setup-npcflirt.tp2
EXTEND_TOP ~aerie.bcs~ ~npcflirt\aeriesoainitflirt.baf~


JCompton's FlirtPack, aeriesoainitflirt.baf
IF
	Global("FWAerieFlirtsStart","LOCALS",0)
	GlobalGT("Lovetalk","LOCALS",8)
	OR(2)
		Global("AerieRomanceActive","GLOBAL",2)
		Global("AerieRomanceActive","GLOBAL",1)
THEN
	RESPONSE #100
		SetGlobal("FWAerieFlirtsStart","LOCALS",1)
		RealSetGlobalTimer("FWAerieFlirt","LOCALS",300)
END

IF
	RealGlobalTimerExpired("FWAerieFlirt","LOCALS")
	Global("FWAerieStartFlirtSOA","GLOBAL",0)
	G("FWDisableFlirts",0)
	InParty(Myself)
	!StateCheck(Player1,STATE_SLEEPING)
	G("SleptAerie",0)
	!Global("LoveTalk","LOCALS",19)
	!Global("LoveTalk","LOCALS",27)
	OR(2)
		Global("AerieRomanceActive","GLOBAL",2)
		Global("AerieRomanceActive","GLOBAL",1)
	See(Player1)
	CombatCounter(0)
	!See([ENEMY])
	!Range([NEUTRAL],10)
	!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
	RESPONSE #100
		SetGlobal("FWAerieStartFlirtSOA","GLOBAL",1)
		StartDialogueNoSet(Player1)
		Wait(1)
END

IF
	RealGlobalTimerExpired("FWAerieFlirt","LOCALS")
	Global("FWAerieStartFlirtSOA","GLOBAL",1)
THEN
	RESPONSE #100
		SetGlobal("FWAerieStartFlirtSOA","GLOBAL",0)
		RealSetGlobalTimer("FWAerieFlirt","LOCALS",2700)
END

IF
	RealGlobalTimerExpired("FWAerieFlirt","LOCALS")
	!CombatCounter(0)
THEN
	RESPONSE #100
		RealSetGlobalTimer("FWAerieFlirt","LOCALS",150)
END
So what is he doing here? In a general sense, he is setting up Aerie's script aerie.bcs with a set of commands that will cause the equivalent of a "PID" or "Force-Talk" at prearranged times. He has a few things that have become as close to canonical in mod authoring as can be had within such a disparate group of rugged individualists:
  • In the first block, he checks for a potential or active Aerie romance, and sets a timer for progress. Notice it also doesn't start until the 4th lovetalk, so the player isn't tackled by Nympomaniac Aerie before they have gotten to know eachother a bit...
  • In the second block, AreaCheck screening out of any places where flirting would be really silly:
    PC: "Heya, oh Drow-Disguised Aran... you look hot tonight"
    ARAN:"Sune's Sultry Sandals, girl, you want to blow our cover? Eh... well... didn't mean no... shouldn't o' used "blow" an' "cover", in th' same sentence. Damn your bright eyes, stop laughin' like that, you will call in th' entire Underdark!"
  • Same block, G("FWDisableFlirts",0) checked as a screening variable so that if a player finds the flirts not to their liking they can shut them off.

A snippet of the related .d file
JCompton's FlirtPack, aeriesoaflirt.d
// Active=1 initiated flirts

APPEND AERIEJ

IF
~Global("FWDisableFlirts","GLOBAL",0)
Global("FWAerieStartFlirtSOA","GLOBAL",1)
See(Player1)
!StateCheck(Player1,STATE_SLEEPING)
CombatCounter(0)
Global("AerieRomanceActive","GLOBAL",1)
!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 aerieinitflirtbase1
SAY @0

 IF ~~ THEN DO ~IncrementGlobal("FWAerieRandFlirt","LOCALS",1)~ GOTO aeriethanks
 IF ~RandomNum(10,1)~ THEN DO ~IncrementGlobal("FWAerieRandFlirt","LOCALS",1)~ GOTO aerieshuffle
 IF ~RandomNum(10,2)~ THEN DO ~IncrementGlobal("FWAerieRandFlirt","LOCALS",1)~ GOTO aeriestandclose
 IF ~RandomNum(10,3)~ THEN DO ~IncrementGlobal("FWAerieRandFlirt","LOCALS",1)~ GOTO aerieeyeing
 IF ~RandomNum(10,4)~ THEN DO ~IncrementGlobal("FWAerieRandFlirt","LOCALS",1)~ GOTO aerieshoulder
 IF ~RandomNum(10,5)~ THEN DO ~IncrementGlobal("FWAerieRandFlirt","LOCALS",1)~ GOTO aeriecircus
 IF ~RandomNum(10,6)~ THEN DO ~IncrementGlobal("FWAerieRandFlirt","LOCALS",1)~ GOTO aeriesonice
 IF ~RandomNum(10,7)~ THEN DO ~IncrementGlobal("FWAerieRandFlirt","LOCALS",1)~ GOTO aerielistening
 IF ~RandomNum(10,8)~ THEN DO ~IncrementGlobal("FWAerieRandFlirt","LOCALS",1)~ GOTO aerienowonder
 IF ~RandomNum(10,9) AreaType(OUTDOOR)~ THEN DO ~IncrementGlobal("FWAerieRandFlirt","LOCALS",1)~ GOTO aeriepointstars
 IF ~RandomNum(10,10) ReputationGT(Player1,15)~ THEN DO ~IncrementGlobal("FWAerieRandFlirt","LOCALS",1)~ GOTO aerienice2people
 IF ~RandomNum(10,10) ReputationLT(Player1,8)~ THEN DO ~IncrementGlobal("FWAerieRandFlirt","LOCALS",1)~ GOTO aeriemean2people

 IF ~HPLT(Player1,15)~ THEN DO ~IncrementGlobal("FWAerieRandFlirt","LOCALS",1)~ GOTO lowhp1

END

IF ~~ aerienice2people
SAY @590
IF ~~ EXIT
END

IF ~~ aeriemean2people
SAY @591 = @592
IF ~~ EXIT
END


IF ~~ lowhp1
SAY @589
IF ~~ THEN DO ~ReallyForceSpell(PLAYER1,CLERIC_CURE_MEDIUM_WOUNDS)~ EXIT
END


IF ~~ aeriethanks
SAY @586
IF ~~ THEN EXIT
END

IF ~~ aeriepointstars
SAY @585
IF ~~ EXIT
END


IF ~~ THEN BEGIN aerielistening
SAY @400 = @401
IF ~~ THEN EXIT
END

IF ~~ THEN BEGIN aerienowonder
SAY @402 = @403
IF ~~ THEN EXIT
END

and a little later on, ones created for the player to initiate:
// PC-initiated flirts: Active=1

IF
~Global("FWDisableFlirts","GLOBAL",0)
IsGabber(Player1)
CombatCounter(0)
GlobalGT("Lovetalk","LOCALS",8)
!Global("LoveTalk","LOCALS",19)
!Global("LoveTalk","LOCALS",27)
Global("AerieRomanceActive","GLOBAL",1)
!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 aerieflirtbase1
SAY @18 = @20

 IF ~RandomNum(4,1)~ THEN REPLY @19 DO ~IncrementGlobal("FWAerieFlirt","GLOBAL",1)~ GOTO prettyaerie1
 IF ~RandomNum(4,2)~ THEN REPLY @19 DO ~IncrementGlobal("FWAerieFlirt","GLOBAL",1)~ GOTO prettyaerie1
 IF ~RandomNum(4,3)~ THEN REPLY @19 DO ~IncrementGlobal("FWAerieFlirt","GLOBAL",1)~ GOTO prettyaerie2
 IF ~RandomNum(4,4)~ THEN REPLY @19 DO ~IncrementGlobal("FWAerieFlirt","GLOBAL",1)~ GOTO prettyaerie3

 IF ~RandomNum(4,1)~ THEN REPLY @25 DO ~IncrementGlobal("FWAerieFlirt","GLOBAL",1)~ GOTO nuzzle1
 IF ~RandomNum(4,2)~ THEN REPLY @25 DO ~IncrementGlobal("FWAerieFlirt","GLOBAL",1)~ GOTO nuzzle1
 IF ~RandomNum(4,3)~ THEN REPLY @25 DO ~IncrementGlobal("FWAerieFlirt","GLOBAL",1)~ GOTO nuzzle2
 IF ~RandomNum(4,4)~ THEN REPLY @25 DO ~IncrementGlobal("FWAerieFlirt","GLOBAL",1)~ GOTO nuzzle2

 IF ~RandomNum(4,1)~ THEN REPLY @501 DO ~IncrementGlobal("FWAerieFlirt","GLOBAL",1)~ GOTO hug1
 IF ~RandomNum(4,2)~ THEN REPLY @501 DO ~IncrementGlobal("FWAerieFlirt","GLOBAL",1)~ GOTO hug2
 IF ~RandomNum(4,3)~ THEN REPLY @501 DO ~IncrementGlobal("FWAerieFlirt","GLOBAL",1)~ GOTO hug3
 IF ~RandomNum(4,4)~ THEN REPLY @501 DO ~IncrementGlobal("FWAerieFlirt","GLOBAL",1)~ GOTO hug4

IF ~G("FWAerieBadTouch",0)~ THEN REPLY @29 DO ~IncrementGlobal("FWAerieFlirt","GLOBAL",1)~ GOTO badtouch1
IF ~G("FWAerieBadTouch",1)~ THEN REPLY @29 DO ~IncrementGlobal("FWAerieFlirt","GLOBAL",1)~ GOTO badtouch2

 IF ~RandomNum(4,1)~ THEN REPLY @33 DO ~IncrementGlobal("FWAerieFlirt","GLOBAL",1)~ GOTO aerierobe1
 IF ~RandomNum(4,2)~ THEN REPLY @33 DO ~IncrementGlobal("FWAerieFlirt","GLOBAL",1)~ GOTO aerierobe2
 IF ~RandomNum(4,3)~ THEN REPLY @33 DO ~IncrementGlobal("FWAerieFlirt","GLOBAL",1)~ GOTO aerierobe3
 IF ~RandomNum(4,4)~ THEN REPLY @33 DO ~IncrementGlobal("FWAerieFlirt","GLOBAL",1)~ GOTO aerierobe1

<<etc., etc.>>


These bring in another set of ideas which have become pseudo-canonical in mod authoring:
  • FLIRTS NOT TALKS. Initiation from the NPC = line, silent transition to a new state, response, exit. From the PC = line, player chooses an action, NPC gives response, exit. Otherwise, they are LoveTalks or Banters With Benefits™.
  • Use of IncrementGlobal() to track the number of flirts. Other mods, like berelinde's Gavin, Jastey's Ajantis, and a whole raft of other mods that track the PC responses (both positive and negative) have expanded that idea using IncrementGlobal("myGlobal","GLOBAL",1) and IncrementGlobal("myGlobal","GLOBAL",-1) to track player responses as seen from
  • Use of RandomNum(#,#) to generate varied responses to the same basic action/dialog path taken by the player.
  • Use of a "toggle" to turn a specific state on and then off again via script. NOTE: The Flirt Pack uses BioWare™ style toggles, standard for several years of i.e. modding, setting them active and then inactive via script. Modern usage is usually the safer "toggle on in script, toggle off and set timer in dialog". There are positives and negatives for both ways of doing this, but the current "industry standard" says that the best way to ensure that everything you have done in your own mod works correctly is to use dialog to close the variable as mauch as possible.

So why don't we just do exactly what JCompton did, copying the code, and swapping in new values? I mean, why mess with success?
Well, basically, that is what we are doing. But we can't just crib the code wholesale; for one thing, the package was coded before every NPC and their brother had PIDs. Look carefully at the player initiated flirts, and you see a conditionally modified PID. With IsGabber(Plaayer1) and then a second condition, JCompton switches in a new equivalent of a PID based on the globals and situation; for another look at this, look up the way Ajantis' PID is set up by Jastey in BG1NPC based on romance/no-romance conditions. So we would have hassles with Aran's PID. For our usage, we will borrow most of these ideas and reformat them into two separate sets of materials, one accessed as part of the PID made as a decision led from a single state, and the NPC-initiated flirts set up as an independent group of talks on thier own modifiable timer. For existing examples of that kind of work, here is an example from berelinde's code development in Gavin (the BG content, as the BG2 content is not yet available):
IF
  InParty&#40;Myself&#41;
  TimeOfDay&#40;DUSK&#41;
  AreaType&#40;OUTDOOR&#41;
  Global&#40;"B!GavinDuskFlirt","GLOBAL",0&#41;
  See&#40;Player1&#41;
  !See&#40;&#91;ENEMY&#93;&#41;
  CombatCounter&#40;0&#41;
  !Global&#40;"B!DisableFlirts","GLOBAL",1&#41;
  !Global&#40;"B!GavinQuietLover","GLOBAL",1&#41;
  Global&#40;"B!GavinRomanceMatch","GLOBAL",1&#41;
  !Global&#40;"B!GavinWoman","GLOBAL",1&#41; //Gavin won't conduct his romance while he's female
  !StateCheck&#40;"B!GAVIN",CD_STATE_NOTVALID&#41;
  !StateCheck&#40;Player1,CD_STATE_NOTVALID&#41;
THEN RESPONSE #100
	SetGlobal&#40;"B!GavinDuskFlirt","GLOBAL",1&#41;
	PlaySong&#40;0&#41;
	PlaySound&#40;"BGAV_SS"&#41;
	StartDialogNoSet&#40;Player1&#41;
END

firing the related .d,
CHAIN IF ~Global&#40;"B!GavinDuskFlirt","GLOBAL",1&#41;~ THEN ~B!GAVINJ~ BGavinDuskFlirt
~You know, <CHARNAME>, there was a time, not long ago, when the approach of evening would fill me with dread. I would watch the sun sinking on the horizon, and I would not see the beauty of the sunset, but the mockery of the dawn. There was no promise of a new day, just the cold emptiness of night.~

  = ~I never realized how beautiful the sunset could be.~
DO ~SetGlobal&#40;"B!GavinDuskFlirt","GLOBAL",2&#41;~ EXIT


Here we see some modern flirt components:
  • PlaySong(0) and PlaySound("myWAV") to stop background music and play a romance-related sound cue
  • Highly tailored conditions for some flirts, so that they respond directly to the game situation (TimeOfDay, AreaType, added conditional blockers for waering a Girdle of Gender Change, etc.)
  • Slightly longer flirts, with more speech than action (in this case).

Let's use most of these ideas, both Old Skool and Modern. First up, let's set up Aran a good batch of what Friends® character Joey would call "Heya, how YOU doin'" materials.

Playing With Ideas
First up, an addition of two swap in/swap out lines to ~C-ARANJ~ to be integrated into a few friend talks and love talks, but mostly into the PID:

/* Stop or Restart Flirting Duo */
  IF ~Global&#40;"c-aranflirtstop","GLOBAL",0&#41; OR&#40;2&#41; Global&#40;"c-aranromance","GLOBAL",1&#41; Global&#40;"c-aranromance","GLOBAL",2&#41;~ THEN REPLY ~&#91;PC&#93; You have to stop coming up to me and flirting. I do not want that behavior to continue.~ + c-aranrestopflirts
  IF ~Global&#40;"c-aranflirtstop","GLOBAL",1&#41; OR&#40;2&#41; Global&#40;"c-aranromance","GLOBAL",1&#41; Global&#40;"c-aranromance","GLOBAL",2&#41;~ THEN REPLY ~&#91;PC&#93; You do not pay attention to me the way you used to, Aran. I miss your company.~ + c-aranrestartflirts

/* Restart Flirting Duo Finished */
IF ~~ c-aranrestopflirts
  SAY ~&#91;ARAN&#93; Tymora's against me today, I see. She's a fickle one, that one. Right. Business only. Got it.~
  IF ~~ THEN DO ~SetGlobal&#40;"c-aranflirtstop","GLOBAL",1&#41;~ EXIT
END

IF ~~ c-aranrestartflirts
  SAY ~&#91;ARAN&#93; Sune's... well, I'd be a liar if I said I wasn't thinkin' about it. Can't figure if you want me to express appreciation, or not. Women. Naught but trouble, they are.~
  IF ~~ THEN DO ~SetGlobal&#40;"c-aranflirtstop","GLOBAL",0&#41;~ EXIT
END

These will allow a player eligible or in the romance to start and stop Aran initiating flirting. we could go back and make these more interesting, but let's move on for now.
Instead of relying on lots of conditions and checks in the J-File, we will set up most of the action via script. We set up four blocks in the BCS. We are also going to steal an idea from Lord Ernie and Bri's Tashia, and create a blocking variable that will send things off if PC and Aran are in a fight, using c-aranfight.

We also want a bunch of these - some players like flirting, others don't. But on Mega Installs, things tend to run out, or repeat. So let's put a whole bunch of random entries, to spice thins up a little. Unless they are incredibly flirt-happy, no person will see all those in one game; but that is even better, as Aran will suprise folks if someone actually tries him a second time.

Reminder - area list for BG2

The first block on C-ARAN.BCS, setting up when Aran feels like he can try his hand at a flirt or two:
/* Set Up Flirting After 3 FTs + 3 LTs */
IF
  Global&#40;"c-aranpcflirtstart","GLOBAL",0&#41;
  GlobalGT&#40;"c-aranfriendbg2","GLOBAL",6&#41;
  GlobalGT&#40;"c-aranrombg2","GLOBAL",6&#41;
  OR&#40;2&#41;
	Global&#40;"c-aranromance","GLOBAL",1&#41;
	Global&#40;"c-aranromance","GLOBAL",2&#41;
THEN RESPONSE #100
  SetGlobal&#40;"c-aranpcflirtstart","GLOBAL",1&#41;
  RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;
END

and if things get going pretty well on the flirting front, advance the PDAs...
/* Player likes to flirt, 12 interactions by either Aran or PC without shutting him down */
IF
  Global&#40;"c-aranpcflirtstart","GLOBAL",1&#41;
  OR&#40;2&#41;
	Global&#40;"c-aranromance","GLOBAL",1&#41;
	Global&#40;"c-aranromance","GLOBAL",2&#41;
  GlobalGT&#40;"c-aranflirt","GLOBAL",12&#41;
THEN RESPONSE #100
  SetGlobal&#40;"c-aranpcflirtstart","GLOBAL",2&#41;
  RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;
END

Now the first set of flirts, lightweight, unsure of PDAs (Public Display Of Affection)
/* Lightweight Flirts */
IF
  Global&#40;"c-aranpcflirtstart","GLOBAL",1&#41;
  RealGlobalTimerExpired&#40;"c-aranflirttimer","GLOBAL"&#41;
  Global&#40;"c-aranflirtstop","GLOBAL",0&#41;
  Global&#40;"c-aranfight","GLOBAL",0&#41;
  OR&#40;2&#41;
	Global&#40;"c-aranromance","GLOBAL",1&#41;
	Global&#40;"c-aranromance","GLOBAL",2&#41;
  See&#40;Player1&#41;
  !StateCheck&#40;Player1,CD_STATE_NOTVALID&#41;
  !StateCheck&#40;"c-aran",CD_STATE_NOTVALID&#41; 
  CombatCounter&#40;0&#41;
  !AreaCheck&#40;"AR2100"&#41; // Underdark
  !AreaCheck&#40;"AR2101"&#41; // Beholder Cave in Underdark
  !AreaCheck&#40;"AR2102"&#41; // Adalon's Cave
  !AreaCheck&#40;"AR2200"&#41; // Ust Natha
  !AreaCheck&#40;"AR2201"&#41; // Temple in Ust Natha
  !AreaCheck&#40;"AR2202"&#41; // Inn in Ust Natha 1st Floor
  !AreaCheck&#40;"AR2203"&#41; // Inn in Ust Natha; 2nd Floor
  !AreaCheck&#40;"AR2204"&#41; // House in Ust Natha
  !AreaCheck&#40;"AR2205"&#41; // House in Ust Natha
  !AreaCheck&#40;"AR2206"&#41; // Qilue's House in Ust Natha
  !AreaCheck&#40;"AR2207"&#41; // Deirex's Tower in Ust Natha
  !AreaCheck&#40;"AR2208"&#41; // Jarlaxle's House wherever
  !AreaCheck&#40;"AR2209"&#41; // Jae'llat's House
  !AreaCheck&#40;"AR2210"&#41; // Deirex's Cave
  !AreaCheck&#40;"AR2400"&#41; // Mind Flayers in Underdark
  !AreaCheck&#40;"AR2401"&#41; // Cave Between Underdark and Exit from Underdark
  !AreaCheck&#40;"AR2402"&#41; // Kuo Toa in Underdark
THEN RESPONSE #100
  SetGlobal&#40;"c-aranlightflirt","GLOBAL",1&#41;
  PlaySong&#40;0&#41;
  PlaySound&#40;"c-aranlt"&#41;
  StartDialogNoSet&#40;Player1&#41;
END
and the resulting toggled "light flirts"
APPEND ~C-ARANJ~

IF ~Global&#40;"c-aranlightflirt","GLOBAL",1&#41;~
THEN BEGIN c-aranflirtswithpc1
  SAY ~&#40;Aran's weatherbeaten face turns towards you, and he moves close by your side.&#41;~
  /* Random Light Flirts */
  IF ~RandomNum&#40;20,1&#41;~ THEN GOTO c-aranflirt1hale
  IF ~RandomNum&#40;20,2&#41;~ THEN GOTO c-aranflirt1hearty
  IF ~RandomNum&#40;20,3&#41;~ THEN GOTO c-aranflirt1eyes
  IF ~RandomNum&#40;20,4&#41;~ THEN GOTO c-aranflirt1face
  IF ~RandomNum&#40;20,5&#41;~ THEN GOTO c-aranflirt1bust
  IF ~RandomNum&#40;20,6&#41;~ THEN GOTO c-aranflirt1legs
  IF ~RandomNum&#40;20,7&#41;~ THEN GOTO c-aranflirt1touch
  IF ~RandomNum&#40;20,8&#41;~ THEN GOTO c-aranflirt1joke
  IF ~RandomNum&#40;20,9&#41;~ THEN GOTO c-aranflirt1look
  IF ~RandomNum&#40;20,10&#41;~ THEN GOTO c-aranflirt1blush
  IF ~RandomNum&#40;20,11&#41;~ THEN GOTO c-aranflirt1ink
  IF ~RandomNum&#40;20,12&#41;~ THEN GOTO c-aranflirt1writing
  IF ~RandomNum&#40;20,13&#41;~ THEN GOTO c-aranflirt1tease1
  IF ~RandomNum&#40;20,14&#41;~ THEN GOTO c-aranflirt1tease2
  IF ~RandomNum&#40;20,15&#41;~ THEN GOTO c-aranflirt1tease3
  IF ~RandomNum&#40;20,16&#41;~ THEN GOTO c-aranflirt1tease4
  IF ~RandomNum&#40;20,17&#41;~ THEN GOTO c-aranflirt1tease5
  IF ~RandomNum&#40;20,18&#41;~ THEN GOTO c-aranflirt1tease6
  IF ~RandomNum&#40;20,19&#41;~ THEN GOTO c-aranflirt1tease7
  IF ~RandomNum&#40;20,20&#41;~ THEN GOTO c-aranflirt1tease8
  IF ~HPPercentLT&#40;Player1,50&#41;~ THEN GOTO c-aranflirt1heal
END

IF ~~ c-aranflirt1hale
  SAY ~&#91;ARAN&#93; &#40;You notice Aran's gaze lingering on you. He grins...&#41; Aye, there are some sights always worth seein', you know.~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranlightflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END

IF ~~ c-aranflirt1hearty
  SAY ~&#91;ARAN&#93; <CHARNAME>, you are a fine figure o' a woman. Let me know if I can help out some way, eh?~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranlightflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END

IF ~~ c-aranflirt1eyes
  SAY ~&#91;ARAN&#93; I'm just checkin'. Your eyes are a damn sight finer than I ever did see.~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranlightflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END

IF ~~ c-aranflirt1face
  SAY ~&#91;ARAN&#93; &#40;His gaze lingers on your form, until he realizes that you are watching him...&#41;~
  = ~&#91;ARAN&#93; &#40;and his eyes snap up to meet yours as his face flushes a dusky red.&#41;~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranlightflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END

IF ~~ c-aranflirt1bust
  SAY ~&#91;ARAN&#93; There, now, you got a strap caught... hold on...~
  = ~&#91;ARAN&#93; errr... well, perhaps you'd better move it yourself. I don't want to get slapped for my trouble, touchin' you there.~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranlightflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END

IF ~~ c-aranflirt1legs
  SAY ~&#91;ARAN&#93; Sune's Bounty, you have legs what... hey... was I speakin' out loud? Sorry. Shuttin' up an' gettin' back to business.~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranlightflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END

IF ~~ c-aranflirt1touch
  SAY ~&#91;ARAN&#93; &#40;He hesitates, then lightly rests his hand on your shoulder for a moment.&#41;~
  = ~&#91;ARAN&#93; Aye, I do believe we are doin' passibly well.~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranlightflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END

IF ~~ c-aranflirt1joke1
  SAY ~&#91;ARAN&#93; So, what do ye call a male Drow without a girlfriend?~
  =  ~&#91;ARAN&#93; Homeless!~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranlightflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END

IF ~~ c-aranflirt1look
  SAY ~&#91;ARAN&#93; I'd be drinkin' to your beauty, <CHARNAME>. Problem is, there's not enough Rashemi firewine in th' whole of Amn to do you justice.~
  = ~&#91;ARAN&#93; I'd sure like to try, though.~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranlightflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END

IF ~~ c-aranflirt1blush
  SAY ~&#91;ARAN&#93; &#40;His eyes trace your neck, and drop lower...&#41;~
  = ~&#91;ARAN&#93; I had somethin' to say, I really did. Just can't remember exactly what right now.~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranlightflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END

IF ~~ c-aranflirt1ink
  SAY ~&#91;ARAN&#93; A drop o' ink may make a thousand men think. But one look at you, an' I can't think o' writin' anythin' at all.~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranlightflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END

IF ~~ c-aranflirt1writing
  SAY ~&#91;ARAN&#93; I'm no bard, to be writin' poems. I work mostly balance sheets an' contracts. All I can say is, you are as pretty as an iron tight trade bond, wi' a 30 percent profit.~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranlightflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END

IF ~~ c-aranflirt1tease1
  SAY ~&#91;ARAN&#93; Just seein' what a big bad Bhaalspawn looks like when she's got a smudge o' food on her left cheek.~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranlightflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END

IF ~~ c-aranflirt1tease2
  SAY ~&#91;ARAN&#93; This is some adventure, eh? Most folks don't get past th' grand adventure o' "hey darlin', what's for dinner?", an yet here we all are wonderin' what's goin' to have *us* for dinner.~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranlightflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END
IF ~~ c-aranflirt1tease3
  SAY ~&#91;ARAN&#93; Right now, I bet you are askin' yourself what to do. My advice is get some darned good food, a bottle o' wine, an' perhaps a quick washup... don't mean no offense, but that last critter we took down left a trail o' blood or slime or somethin' right across your left sleeve there.~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranlightflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END

IF ~~ c-aranflirt1tease4
  SAY ~&#91;ARAN&#93; I'd pull your hair an' tease you, but I figure you'd take offense. So just pretend to be apprentice-age, an' I just pulled your hair. Wait a sec... Candlekeep, right? Never mind. You probably had your head in some book. Probably never kissed no boy nohow.~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranlightflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END

IF ~~ c-aranflirt1tease5
  SAY ~&#91;ARAN&#93; What a blighted great place to be fightin' for our lives at every turn. So do you come here often? How's the food? Know any available converts o' Sune? You thinkin' o' convertin'?~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranlightflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END

IF ~~ c-aranflirt1tease6
  SAY ~&#91;ARAN&#93; You know, I think I hate you. Reasonably good lookin', pretty confident, commandin' all these powers, on your way to th' top... yep. Reminds me I ought to get off my sorry arse an' do some work for a change. Definitely hate you.~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranlightflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END

IF ~~ c-aranflirt1tease7
  SAY ~&#91;ARAN&#93; Say, have you seen a woman around here, about *so* high, about *so* for a figure, an' generally more dangerous an' beautiful than your average dragon? Oh, there you are, <CHARNAME>!~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranlightflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END


IF ~~ c-aranflirt1tease8
  SAY ~&#91;ARAN&#93; I need to stand here more often. I look right good bein' your sword an' shield, so to speak.~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranlightflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END

/* Low HP hijack of flirts early flirts */
IF ~~ c-aranflirt1heal
  SAY ~&#91;ARAN&#93; <CHARNAME>, you are hurt. Let me take a look at that, will you?~
  IF ~RandomNum&#40;5,1&#41;~ THEN GOTO c-aranflirt1heal1
  IF ~RandomNum&#40;5,2&#41;~ THEN GOTO c-aranflirt1heal2
  IF ~RandomNum&#40;5,3&#41;~ THEN GOTO c-aranflirt1heal3
  IF ~RandomNum&#40;5,4&#41;~ THEN GOTO c-aranflirt1heal4
  IF ~RandomNum&#40;5,5&#41;~ THEN GOTO c-aranflirt1heal5
END

IF ~~ c-aranflirt1heal1
  SAY ~&#91;ARAN&#93; &#40;Aran's rough hands are warm and gentle as he brushes them across your calves, seaching for damage&#41;~
  = ~&#91;ARAN&#93; Bloody hells, <CHARNAME>. I'm supposed to be protectin' you from this.~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranheavyflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END

IF ~~ c-aranflirt1heal2
  SAY ~&#91;ARAN&#93; &#40;Aran hesitates, careful not to touch you as he looks for damage&#41;~
  = ~&#91;ARAN&#93; Clangedden's Hammer, you are hurt right proper, you are. I'd massage you a mite, to reduce the stiffness, but not wi' those bruises.~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranheavyflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END

IF ~~ c-aranflirt1heal3
  SAY ~&#91;ARAN&#93; &#40;Aran's hands move across your shoulders, but his eyes catch yours and he stops suddenly.&#41;~
  = ~&#91;ARAN&#93; Selune herself is not so beautiful. Even wi' all this damage, I'm too distracted to think straight. We need to get you healed right quick...~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranheavyflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END

IF ~~ c-aranflirt1heal4
  SAY ~&#91;ARAN&#93; &#40;His face draws close to your knees as he kneels and checks for cuts and bruises. His breath is warm and close.&#41;~
  = ~&#91;ARAN&#93; I'd be a sight happier inspectin' for damage without all this clothin' in the way... ~
  = ~&#91;ARAN&#93; &#40;Aran's face turns scarlet.&#41; *Ahem*. Right, then... hand me that strip o' bandage until we get you some real healin'.~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranheavyflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END

IF ~~ c-aranflirt1heal5
  SAY ~&#91;ARAN&#93; &#40;Aran's hands move close along your ribcage, his fingers gently but insistently probing.&#41;~
  = ~&#91;ARAN&#93; &#40;Suddenly slipping through a torn section of clothing, his hand is close, warm, and intimate on your skin, rough but tender.&#41;~
  = ~&#91;ARAN&#93; I'm sorry. Didn't mean to be so forward. Just checkin' what's hurt, an all. I could kiss some o' that better, I think...~
  IF ~~ THEN DO ~IncrementGlobal&#40;"c-aranflirt","GLOBAL",1&#41; SetGlobal&#40;"c-aranheavyflirt","GLOBAL",0&#41; RealSetGlobalTimer&#40;"c-aranflirttimer","GLOBAL",ARAN_FLIRT&#41;~ EXIT
END


Now on to the second set of flirts, more sure of PDAs (Public Display Of Affection). (In another few days, because they need some revision. And some completion.)

Edited by cmorgan, 19 November 2011 - 08:09 PM.

I love deadlines. I love the whooshing noise they make as they go by. - Douglas Adams

#2 irrha

irrha
  • Members
  • 7 posts

Posted 03 November 2008 - 04:58 AM

Some of the flirts actually made me snort/cough/giggle (yes, in that precise order) tea all over my keyboard. Which is a good thing, because I hardly ever snort/cough/giggle over... well... anything.

Good job! :p :p

#3 Ankhesenpaaten

Ankhesenpaaten

    Fate Unknown

  • Members
  • 519 posts
  • Gender:Female
  • Location:Heartland USA

Posted 03 November 2008 - 07:06 PM

They are great! I'm beginning to adore him already especially with his accent. It seems you are really cruising along here. I can't help but wish he would be out soon but I know that quality takes time and quality is definately worth waiting for.

#4 Guest_Guest_*

Guest_Guest_*
  • Guests

Posted 05 November 2008 - 01:07 AM

IF ~Global("c-aranlightflirt","GLOBAL",1)~
THEN BEGIN c-aranflirtswithpc1
SAY ~(Aran's weatherbeaten face turns towards you, and he moves close by your side.)~
/* Random Light Flirts */
IF ~RandomNum(20,1)~ THEN GOTO c-aranflirt1hale
IF ~RandomNum(20,2)~ THEN GOTO c-aranflirt1hearty
IF ~RandomNum(20,3)~ THEN GOTO c-aranflirt1eyes
IF ~RandomNum(20,4)~ THEN GOTO c-aranflirt1face
IF ~RandomNum(20,5)~ THEN GOTO c-aranflirt1bust
IF ~RandomNum(20,6)~ THEN GOTO c-aranflirt1legs
IF ~RandomNum(20,7)~ THEN GOTO c-aranflirt1touch
IF ~RandomNum(20,8)~ THEN GOTO c-aranflirt1joke
IF ~RandomNum(20,9)~ THEN GOTO c-aranflirt1look
IF ~RandomNum(20,10)~ THEN GOTO c-aranflirt1blush
IF ~RandomNum(20,11)~ THEN GOTO c-aranflirt1ink
IF ~RandomNum(20,12)~ THEN GOTO c-aranflirt1writing
IF ~RandomNum(20,13)~ THEN GOTO c-aranflirt1tease1
IF ~RandomNum(20,14)~ THEN GOTO c-aranflirt1tease2
IF ~RandomNum(20,15)~ THEN GOTO c-aranflirt1tease3
IF ~RandomNum(20,16)~ THEN GOTO c-aranflirt1tease4
IF ~RandomNum(20,17)~ THEN GOTO c-aranflirt1tease5
IF ~RandomNum(20,18)~ THEN GOTO c-aranflirt1tease6
IF ~RandomNum(20,19)~ THEN GOTO c-aranflirt1tease7
IF ~RandomNum(20,20)~ THEN GOTO c-aranflirt1tease8
IF ~HPPercentLT(Player1,50)~ THEN GOTO c-aranflirt1heal
END


Did you skip the "HPPercentGT(Player1,49)" condition in the random responses because the block is executed from bottom to top so it's not needed?

In the paragraph that starts with "So why don't we just do exactly" you wrote "IsGabber(Plaayer1)".

#5 RavenBlack

RavenBlack

    Proofreading Ninja

  • Members
  • 272 posts
  • Gender:Female
  • Location:Vermont

Posted 06 November 2008 - 01:34 AM

~[ARAN] errr... well, perhaps you'd better move it yourself. I don't want to get slapped for my trouble, touchin' you there.~

~[ARAN] Aye, I do believe we are doin' passibly well.~

~[ARAN] Clangeddin's Hammer, you are hurt right proper, you are. I'd massage you a mite, to reduce the stiffness, but not wi' those bruises.~


~[ARAN] What a blighted great place to be fightin' for our lives at every turn. So do you come here often? How's the food? Know any available converts o' Sune? You thinkin' o' convertin'?~


:) Is it possible to ask for an extra bit on this one, if a player is using the Heartwarder of Sune speciality cleric class provided by Divine Remix? :) If not, that's OK, there's still a red-headed Heartwarder out there who's dying to meet him. :p

#6 cmorgan

cmorgan

    journeyman investigator

  • Gibberlings
  • 7097 posts
  • Gender:Male
  • Location:Glencoe, IL, USA

Posted 06 November 2008 - 01:44 PM

@ irrha, glad you like them - they are fun to write!

@ Ankhesenpaaten - I kind of feel the same way - I wish he would just show up, dictate the rest of the stuff, and let me play with the code. I'll try to keep him moving as quickly as possible, though. I have yet to play NWN2, and I am unlikely to get the chance until he stops bugging me.

@ Guest_Guest_*

Did you skip the "HPPercentGT(Player1,49)" condition in the random responses because the block is executed from bottom to top so it's not needed?

Absolutely. The .bcs (scripts) evaluate from the top to the bottom; for conditioned dialog, it gets a bit more complicated as there is a weighting system at play, but in general it still is evaluated from top to bottom. But within the reply section of the dialog state, it goes from bottom to top for evaluation. So if we wanted to skip all this randomness and give a bit more for fellow Sunites, we could hijack the whole thing by adding this:

IF ~Global("c-aranlightflirt","GLOBAL",1)~ THEN BEGIN c-aranflirtswithpc1
  SAY ~(Aran's weatherbeaten face turns towards you, and he moves close by your side.)~
  IF ~~ THEN REPLY ~This line shows up if the two below evaluate false, because it has no condition.~ EXIT
  IF ~HPPercentLT(Player1,50)~ THEN GOTO c-aranflirt1heal
  IF ~Class(Player1,CLERIC_ALL) Kit(Player1, <<VALUE FOR HEARTWARDER>> )~ THEN GOTO c-aranWorshipSune
END

We might need to add a variable to check for Divine Remix and the kit, though. It might throw spurious WeiDU errors if the value is not present.

In the paragraph that starts with "So why don't we just do exactly" you wrote "IsGabber(Plaayer1)".

Cool - thanks - will repair!

@ RavenBlack - sure thing. Let me play with it a bit. Off the top of my head, something like a mini-talk:

IF ~~ c-aranflirt1tease5
  SAY ~[ARAN] What a blighted great place to be fightin' for our lives at every turn. So do you come here often? How's the food? Know any available converts o' Sune? You thinkin' o' convertin'?~
  IF ~!Kit(Player1,NMSUNE)~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranlightflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
  IF ~Kit(Player1,NMSUNE)~ THEN GOTO c-aranWorshipSune
END

IF ~~ c-aranWorshipSune
 SAY ~[ARAN] Just askin', you know...~
 IF ~~ THEN REPLY ~[PC] Stop joking about Sune, Aran. Sensuality is Her great gift.~ GOTO c-aranbluffcalled1
 IF ~RandomNum(3,1)~ THEN REPLY ~[PC] Why yes, I happen to know a few young ladies who would be very interested, Aran. Of course, I would need to make sure that you were well trained...~ GOTO c-aranbluffcalled2a
 IF ~RandomNum(3,2)~ THEN REPLY ~[PC] Why yes, I happen to know a few young ladies who would be very interested, Aran. Of course, I would need to make sure that you were well trained...~ GOTO c-aranbluffcalled2b
 IF ~RandomNum(3,3)~ THEN REPLY ~[PC] Why yes, I happen to know a few young ladies who would be very interested, Aran. Of course, I would need to make sure that you were well trained...~ GOTO c-aranbluffcalled2c
 IF ~RandomNum(3,1)~ THEN REPLY ~[PC] My darling boy, you know very well I am a Heartwarder. If you show enough maturity, I would gladly show you the path to enlightenment. And a few other paths, as well. ~ GOTO c-aranbluffcalled2d
 IF ~RandomNum(3,2)~ THEN REPLY ~[PC] My darling boy, you know very well I am a Heartwarder. If you show enough maturity, I would gladly show you the path to enlightnment. And a few other paths, as well. ~ GOTO c-aranbluffcalled2e
 IF ~RandomNum(3,3)~ THEN REPLY ~[PC] My darling boy, you know very well I am a Heartwarder. If you show enough maturity, I would gladly show you the path to enlightnment. And a few other paths, as well. ~ GOTO c-aranbluffcalled2f
 IF ~~ THEN REPLY ~[PC] (sigh) Big talk, but little action.~ GOTO c-aranbluffcalled1
END

IF ~~ c-aranbluffcalled1
 SAY ~[ARAN] Shar's Silent Shadow, I didn't mean no... I mean, I don't... I mean, I...  Oh, hells. There I go takin' one huge foot out o' my mouth, just so's I can put the other in its place.~
 IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranlightflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

/* Inside joke for Domi */
IF ~~ c-aranbluffcalled2a
 SAY ~[ARAN] Well now, that sounds right fine. I'm ready for my initiation. Unless o' course you think I would die of erotic onslaught...~
 IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranlightflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

/* Inside joke for berelinde */
IF ~~ c-aranbluffcalled2b
 SAY ~[ARAN] Well now, that is unexpectedly fun. I know this Lathanderite who could use a bit o' loosenin' up, too. You think there's someplace we could go what's padded, an' less likely for bruises? He's kind o' clumsy, an' all.~
 IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranlightflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranbluffcalled2c
 SAY ~[ARAN] Now, don't get all bent out o'... wait a sec. You said yes. Bloody hells, I wasn't prepared for that.~
 IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranlightflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

/* Inside joke for RavenBlack */
IF ~~ c-aranbluffcalled2d

 SAY ~[ARAN] ~
<< Still thinking... >>

 IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranlightflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

/* Inside joke for Jastey */
IF ~~ c-aranbluffcalled2e
 SAY ~[ARAN] I... I... Hold on a sec. Sorry. I just had this vision o' you an' me, standin' around wi' our children, tryin' to get them to keep their cloaks on. Killed the mood right quick, it did.~
 IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranlightflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranbluffcalled2f
 SAY ~[ARAN] Right then. I'm strippin' for action. You go grab a bush, an' I'll go rinse my teeth. Hey, this time, can we check to make sure the bush's not poison? I was itchin' for a week last time... ~
 IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranlightflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END


Tell me which ones tickle your fancy, which ones leave you cold, and we'll cut it back to a good setup. Ormake a suggestion or two - flirting in character is (to use a Vermonster phrase) wicked tough, Mr. Bubby, wicked tough :)

(still working on the more serious level flirts - may be a few more days. Got too serious, needs revising).
EDIT: repair, plus tinkering with option c-aranbluffcalled2d
I love deadlines. I love the whooshing noise they make as they go by. - Douglas Adams

#7 erik

erik

    Kobold sorcerer

  • Modders
  • 443 posts
  • Gender:Male
  • Location:fjords nearby

Posted 07 November 2008 - 09:32 AM

enlightenment :)

#8 Icendoan

Icendoan

    King of Parsing Errors

  • Modders
  • 1704 posts
  • Gender:Male
  • Location:The hall of 1000 posts!

Posted 07 November 2008 - 09:52 AM

This open coding business seems like a good idea, even if the only posts you get are marking bad grammar/typos.

Icen

Edited by Icendoan, 07 November 2008 - 09:52 AM.

Mods in development: Keeping Yoshimo
Posted Image

#9 cmorgan

cmorgan

    journeyman investigator

  • Gibberlings
  • 7097 posts
  • Gender:Male
  • Location:Glencoe, IL, USA

Posted 07 November 2008 - 02:15 PM

@ erik - thanks!
@ Icen - yep, seems to be working fine - typos are (unfortunately) my speciality.

Going on with the sequence, then...
I love deadlines. I love the whooshing noise they make as they go by. - Douglas Adams

#10 cmorgan

cmorgan

    journeyman investigator

  • Gibberlings
  • 7097 posts
  • Gender:Male
  • Location:Glencoe, IL, USA

Posted 07 November 2008 - 02:16 PM

Characterization, Roleplay, and Gaming with a Firty NPC
or, How To Avoid Aran Being Slapped With A Lawsuit For Inappropriate Touching In A Work Environment

OK, so we have divided up flirting into two stages; "Heya" and "So, you interested in a little extracurricular swordplay?". There are all sorts of ways to do this, and all sorts of existing NPC code to look at. But we do have one metacognitive/analytical level to deal with - where is the line between player control and NPC control of the game environment?

I had a big section here, going into the philosophy and design decisions, and drawing all sorts of examples. But you know what, forget it. I deleted it. Reading back over the whole thing, it all boils down to one thing - who does the driving, and who is the passenger? Simple. PC = driver. NPC = Passenger. A passenger who reaches over to grab the wheel at the request of the driver is a friend. A passenger who reaches over and grabs the wheel at any other time is an assailant. So, several hours of philosophy breaks down into "don't grab the wheel (or anything else) without PC input."

That means we put almost all the physical stuff like

~[ARAN] (A rough palm gently covers the back of your hand as Aran pulls you into an embrace)~

~[ARAN] (You lean back into his arms, resting the back of your head on his shoulder)~

into the PID firts, where they can be scripted as PC replies allowing the player the choice of actions. And ESPECIALLY if we want to go heavier, we make sure the PC sets the reactions. Grab Sheri, Ainshai, Chanelle, and Renal from Romantic Encounters for existing examples in currently released mods.

An example:

IF ~ <<CONDITION>>~ THEN c-aran<<trailflirt>>
  SAY ~[ARAN] (A rough palm gently covers the back of your hand as Aran pulls you back against his chest)~

  IF ~~ THEN REPLY ~[PC] (You lean back into his arms, resting the back of your head on his shoulder)~ EXIT

  IF ~~ THEN REPLY ~[PC] (You move away quickly, glancing about for onlookers)   Aran, don't do that in public.~ EXIT

  IF ~~ THEN REPLY ~[PC] Is that all you have in mind, sellsword? A little feel?~ GOTO c-aran<<trailflirt>>feel

  IF ~~ THEN REPLY ~[PC] (You turn quickly in his arms, holding him fiercely. A crush of lips, warm and full of promise, and his fingers tighten on the small of your back)~ EXIT
END

IF ~~ c-aran<<trailflirt>>feel
  SAY ~[ARAN] (Aran's grin threatens to split his face, but he moves away)~
  IF ~~ THEN EXIT
END


So let's play these as slightly more forward flirts, but avoid much in the touching/directed action arena.

New ideas:

Race(O:Object*,I:Race*Race)
1 HUMAN
2 ELF
3 HALF_ELF
4 DWARF
5 HALFLING
6 GNOME
7 HALFORC

~Alignment(Player1,MASK_NEUTRAL)~

MASK_NEUTRAL
MASK_GOOD
MASK_EVIL


.bcs extension,
/* Heavyweight Flirts */
IF
  Global("c-aranpcflirtstart","GLOBAL",2)
  RealGlobalTimerExpired("c-aranflirttimer","GLOBAL")
  Global("c-aranflirtstop","GLOBAL",0)
  Global("c-aranfight","GLOBAL",0)
  OR(2)
	Global("c-aranromance","GLOBAL",1)
	Global("c-aranromance","GLOBAL",2)
  See(Player1)
  !StateCheck(Player1,CD_STATE_NOTVALID)
  !StateCheck("c-aran",CD_STATE_NOTVALID) 
  CombatCounter(0)
  !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 RESPONSE #100
  SetGlobal("c-aranheavyflirt","GLOBAL",1)
  PlaySong(0)
  PlaySound("c-aranlt")
  StartDialogNoSet(Player1)
END

and the resulting toggled "heavy flirts"
APPEND ~C-ARANJ~

IF ~Global("c-aranheavyflirt","GLOBAL",1)~
THEN BEGIN c-aranflirtswithpc1
  SAY ~(Aran moves to your side)~
  IF ~RandomNum(2,1)~ THEN GOTO c-aranflirt2a
  IF ~RandomNum(2,2)~ THEN GOTO c-aranflirt2b
  IF ~HPPercentLT(Player1,50)~ THEN GOTO c-aranflirt2heal  
END 

/* Random Heavy Flirts A */  
IF ~~ c-aranflirt2a
  SAY ~[ARAN] (He settles his belt with one thumb)~
  IF ~RandomNum(12,1)~ THEN GOTO c-aranflirt2hale
  IF ~RandomNum(12,2)~ THEN GOTO c-aranflirt2hearty
  IF ~RandomNum(12,3)~ THEN GOTO c-aranflirt2eyes
  IF ~RandomNum(12,4)~ THEN GOTO c-aranflirt2face
  IF ~RandomNum(12,5)~ THEN GOTO c-aranflirt2bust
  IF ~RandomNum(12,6)~ THEN GOTO c-aranflirt2legs
  IF ~RandomNum(12,7)~ THEN GOTO c-aranflirt2touch
  IF ~RandomNum(12,8)~ THEN GOTO c-aranflirt2joke
  IF ~RandomNum(12,9)~ THEN GOTO c-aranflirt2look
  IF ~RandomNum(12,10)~ THEN GOTO c-aranflirt2blush
  IF ~RandomNum(12,11)~ THEN GOTO c-aranflirt2writing
  IF ~RandomNum(12,12)~ THEN GOTO c-aranflirt2gift
END

/* Random Heavy Flirts B */ 
IF ~~ c-aranflirt2b
  SAY ~[ARAN] (He brushes his hair back from his forehead)~ 
  IF ~RandomNum(10,1)~ THEN GOTO c-aranflirt2ink
  IF ~RandomNum(10,2)~ THEN GOTO c-aranflirt2tease1
  IF ~RandomNum(10,3)~ THEN GOTO c-aranflirt2tease2
  IF ~RandomNum(10,4)~ THEN GOTO c-aranflirt2tease3
  IF ~RandomNum(10,5)~ THEN GOTO c-aranflirt2tease4
  IF ~RandomNum(10,6)~ THEN GOTO c-aranflirt2tease5
  IF ~RandomNum(10,7)~ THEN GOTO c-aranflirt2tease6
  IF ~RandomNum(10,8)~ THEN GOTO c-aranflirt2tease7
  IF ~RandomNum(10,9)~ THEN GOTO c-aranflirt2race
  IF ~RandomNum(10,10)~ THEN GOTO c-aranflirt2gift
END

IF ~~ c-aranflirt2hale
  SAY ~[ARAN] There's some Sunite sayin' about 'a fair face may fade, but a beautiful soul lasts forever'. I don't know about all that when I look at you, though. There's a power there I think is raw, an' excitin'. It makes me want to be man enough to catch your attention.~
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranflirt2hearty
  SAY ~[ARAN] (He stands beside you for a time, silent, staring away into the distance)~
  = ~[ARAN] (looking directly into your eyes, he nods once, and moves on)~  
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranflirt2eyes
  SAY ~[ARAN] I think I just lost somethin'. Yep. Looked too deep into your eyes, an' now I have to go swimmin' in there after my soul.~
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranflirt2face
  SAY ~[ARAN] (He leans close to you, face to face, concentrating fiercely)~
  = ~[ARAN] Were we alone, <CHARNAME>, I might just challenge you to a wrestlin' match. We could fight fair, lips versus lips, no cheatin'.~
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranflirt2bust
  SAY ~[ARAN] (He gently places his hands aside your pack, lifting the weight from you back for a moment, and then stands away)~
  = ~~[ARAN] I'd lift more burdens for you, if I could. But I don't trust myself that close to you. My eyes keep followin' some dangerous curves, an' my hands itch to follow where my eyes have been.~
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranflirt2legs
  SAY ~[ARAN] Hold on a second, <CHARNAME>... lift that foot, will you?~
  = ~[ARAN] Hold it steady... here, let me help.~
  = ~[ARAN] No, it must have been th' light. Thought you had some repair needed on your footwear, but everythin' about your legs looks good. Looks great, in fact.~
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranflirt2touch
  SAY ~[ARAN] (He reaches across to brush your hair gently back from your eyes, and catches a strand, staring as if charmed)~
  =  ~[ARAN] The gods were messin' with menfolk to create such beauty. 'T ain't natural.~ 
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranflirt2joke
  SAY ~[ARAN] I did have a friend once what was the prize o' the Waterdeep lasses. He taught me a thing or two, he did. Not personally, o' course, but by talkin'. I'd be happy to pass some ideas along sometime, perhaps, if you've a mind for some experimentin'.~
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranflirt2look
  SAY ~[ARAN] <CHARNAME>, Don't say naught. Just look my way a minute, will you?~
  = ~[ARAN] Aye, thanks. That's  reward enough for any man.~
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranflirt2blush
  SAY ~[ARAN] Don't look at me, <CHARNAME>. I had this great idea that we'd be housed up in a nice inn, just you and me, all cosy and comfy. But you said somethin' about savin' the world, or takin' it over, or somethin' like that, and I had to go say "sure, sounds like a fun tenday".~ 
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranflirt2ink
  SAY ~[ARAN] ~I keep tryin' to write what I want to say to you, but the words don't flow so well.~
  IF ~~ THEN GOTO c-aranflirt2inkgood
  IF ~Alignment(Player1,MASK_EVIL)~ THEN GOTO c-aranflirt2inkevil
  IF ~Alignment(Player1,MASK_GOOD)~ THEN GOTO c-aranflirt2inkgood
  IF ~Alignment(Player1,MASK_NEUTRAL)~ THEN GOTO c-aranflirt2inkneutral 
END

IF ~~ c-aranflirt2inkevil
  SAY ~[ARAN] I don't think I'll be tryin' to write in my own heart's blood, though. I don't know about what contract that might bind me to. Although I suspect I can be had, for th' right price.~
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranflirt2inkgood
  SAY ~[ARAN] I keep tryin' to say such, but it comes out either all flowery an' fake or downright rude. I'll have to keep on tryin'.~
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranflirt2inkneutral 
  SAY ~[ARAN] I don't think I'll be tryin' to write in my own heart's blood, an' all, like they do on some o' th' distant isles we always here talk about. Don't think you would appreciate it. I'll stick to regular ink.~
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranflirt1writing
  SAY ~[ARAN] Here, <CHARNAME>, I can't quite make this writin' out. Read this over, eh? ~
  = ~[ARAN] (He peers over your shoulder, cheek arm and close to yours)~ 
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranflirt2tease1
  SAY  ~[ARAN] I need to see your face full on, once in awhile. It reminds me who... it reminds me what I'm doin' all this for.~
  = ~[ARAN] O' course, it also reminds me I'm a complete sentimental idiot, but then I knew that goin' in, now, didn't I.~
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranflirt2tease2
  SAY ~[ARAN] (You smell the sharp spicy tang of cooking spices, with a hint of mint.)~
  = ~[ARAN] (Aran glances at you quickly, then looks away)~
  = ~[ARAN] Aye, I know. You did mention I might clean up a little, you know. It's a criminal waste o' food preparation materials, but I thought you might like a break from the whole "slowly rottin' creature guts" theme, eh? I probably overdid it a bit. Didn't mean to smell like some Calimshan Pleasure House.~
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranflirt2tease3
  SAY ~[ARAN] (He hesitates, then fusses over your pack and gear, tugging lightly here and there)~
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranflirt2tease4
  SAY ~[ARAN] Right then, love o' me life, guardian o' my destiny, leader among leaders... if you got a plan, now's the time to share it. Somethin' better than that whole "run screamin' into disaster" plan I thought of yesterday, I bet.~
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranflirt2tease5
  SAY ~[ARAN] Is it warm around here? Or is it just on account of you bein' so desireable?~
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranflirt2tease6
  SAY ~[ARAN] So help me out, here. There's this right fine woman, strong, pretty, knows her own mind. Any ideas on how to attract her attention a bit?~
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranflirt2poetry
  SAY ~[ARAN] I like you right fine, <CHARNAME>. I like you well enough I even tried to write you somethin', though I'm not so fair as a Hanali- blessed bard.~ 
  IF ~~ THEN REPLY ~[PC] A song. Or is it a poem? Written on rather expensive vellum.~ DO ~IncrementGlobal("c-aranpoetry","GLOBAL",1)~ GOTO c-aranflirt2poem2
  IF ~~ THEN REPLY ~[PC] You know I can't read your writing, Aran. Read it to me.~ DO ~IncrementGlobal("c-aranpoetry","GLOBAL",1)~ GOTO c-aranflirt2poem2
  IF ~~ THEN REPLY ~[PC] A letter. In what looks like ancient dwarven.~ DO ~IncrementGlobal("c-aranpoetry","GLOBAL",1)~ GOTO c-aranflirt2poem3
END

IF ~~ c-aranflirt2poem2
  SAY ~[ARAN] Aye, though the writin's not worthy o' the velum it's on. Look, I did my best, but to be right truthful, I do balance sheets, not beddin' sheets. I did a bunch o' drafts, an' the best I could come up with was that.~
  IF ~~ THEN GOTO c-aranflirt2poem
END

IF ~~ c-aranflirt2poem3
  SAY ~[ARAN] Oh, Selune's Monthly Tides... here. Gave you th' wrong letter. Here, this is the right one.~
  IF ~~ THEN GOTO c-aranflirt2poem
END

IF ~~ c-aranflirt2poem
  SAY ~[ARAN]  'Roses are red, cornflowers are blue
Mithral shines with the strength of you.'~
  IF ~Global("c-aranpoetry","GLOBAL",0)~ THEN REPLY ~[PC] Aran, that is...~ GOTO c-aranflirt2poemfin1
  IF ~GlobalGT("c-aranpoetry","GLOBAL",0)~ THEN REPLY ~[PC] Aran, you did this already... ~ GOTO c-aranflirt2poemfin2
END

IF ~~ c-aranflirt2poemfin1
  SAY ~[ARAN] ...absolutely stupid, I know. Hey, I had a really good one, first...~
  = ~[ARAN] 'Thine eyes, like the golden gleam of torchlight
On the armour of my heart
Lights my love.

Thy breath, like the dusk breezes
On the shield of my soul
Warms my love.

Thy lips, like the gentle red rose
On the helm of my destiny
Inflames my love.

I light, I warm, I burn for you,
For you are my soul's own desire.'~
  = ~[ARAN] but I figured you would think I was puttin' on airs, instead o' talkin' from the heart. Besides, I ran out o' ink.~
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT   
END

IF ~~ c-aranflirt2poemfin2
  SAY ~[ARAN] I did? By Clangeddin's Beard, so I did. Same damned poem, too, full o' words you dread. All this combat must have addled my head.~
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT 
END

/* Race Flirt */ 
IF ~~ c-aranflirt2race
  SAY ~[ARAN] Well, now. You have me at a might o' a disadvantage, <CHARNAME>. How do I let you know that I think you're just the right woman for me?~
  IF ~Race(Player1,1)~ THEN GOTO c-aranhumanflirt
  IF ~Race(Player1,2)~ THEN GOTO c-aranelfflirt
  IF ~Race(Player1,3)~ THEN GOTO c-aranhalfelfflirt
  IF ~Race(Player1,4)~ THEN GOTO c-arandwarfflirt
  IF ~Race(Player1,5)~ THEN GOTO c-aranhalflingflirt
  IF ~Race(Player1,6)~ THEN GOTO c-arangnomeflirt
  IF ~Race(Player1,7)~ THEN GOTO c-aranhalforcflirt
END

IF ~~ c-aranhumanflirt
 SAY ~[ARAN] If you were some lovely lass at Feldepost's Inn, I'd be fine wi' "Hey there. You want to get some exercise? I can teach you a little swordplay, you can teach me a little back, we have a long, slow duel, an' we can name the kids whatever you want..." ~
 = ~[ARAN] But that just won't do the job justice, wi' you.~
 IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranelfflirt
  SAY ~[ARAN] I could compliment you on your age, I guess, an' say you don't look a day over 100. Or I could say how interestin' those ears are. I wish I'd paid more attention back when I was servin' wi' Moonshea, as there were some elven archers there. But those ladies were a might standoffish, an' we knew better than to flirt wi' someone who could put an arrow where the sun don't shine at 400 paces, day or night...~
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranhalfelfflirt
  SAY ~[ARAN] You are so different, it makes me ache funny. There's times when you look just like th' girls I grew up with, an ' then you turn your face an' those eyes pierce my soul quick as an elven arrow splits an orc's forehead.~
  = ~[ARAN] Mielikki's Quick Tongue, I did it again. I was tryin' to compliment you, an' it ends up all blood an' war. Never mind.~
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-arandwarfflirt
  SAY ~[ARAN I've served wi' a fair share o' dwarves, but how they decide when they like each other is a mite o' a mystery. There's some back an' knee slappin', it looked like, an' some insults flyin' quick and true - an' then suddenly, the happy couple is missin' from around the campfire.~
  = ~[ARAN] Don't quite see a way o' slappin' your back or knee right now, though.~ 
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranhalflingflirt
 SAY ~[ARAN] If I was Han, this would be easy. But I never did find out how to tell a halfling lass she was "just th' bees knees", which in human-folk parlance is "damn fine", but in shortfolk parlance might be just a little to close to the truth for comfort, I bet.~
 IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-arangnomeflirt
 SAY ~[ARAN]  I did one talk to some follower o' Deneir, a young lassie named Finch. She seemed to think that I was supposed to woo a gnomish lass wi' books an' knowledge.~
 = ~[ARAN] I'm not so sure, though. I did some readin' up on Deneir, an' it seems like there's a fair bit o' forward behavior involved. Somethin' about big families, an' practicin' to make 'em. I suspect I shouldn't get that forward wi' you, though..~
 IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranhalforcflirt
 SAY ~[ARAN] I'd make some joke about mixed heritage an' all, but I really don't know how you'd take it. How about we just say I like strong women who know what it is to be pushed aside most o' the time, an' who don't pay so much attention to what the mob thinks.~
 = ~[ARAN] Then again, puttin' "mob" an' "think" in the same sentence, well, it don't fit so well. An' it more brings pitchforks an' torches to mind, rather than lust.~
 IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

/* Flirt Gifts Sequence */ 
IF ~~ c-aranflirt2gift
  SAY ~[ARAN] Right, then, <CHARNAME>. I'd be a fool not to know that the ladies like to see... err... I know th' fairer sex wants to know a man appreciates them. An' it usually goes by givin' gifts. So, I got you somethin'. Here - take it.~
  IF ~Global("c-arangift","GLOBAL",0)~ THEN REPLY ~[PC] Why... thank you, I think... a dagger. Just what I always wanted. A curious choice. Why a blade?~ DO ~SetGlobalGlobal("c-arangift","GLOBAL",1)~ GOTO c-arangift2dagger
  IF ~Global("c-arangift","GLOBAL",1)~ THEN REPLY ~[PC] Is this some sort of gem?~ DO ~SetGlobalGlobal("c-arangift","GLOBAL",2)~ GOTO c-arangiftpebble
  IF ~Global("c-arangift","GLOBAL",2)~ THEN REPLY ~[PC] A wild flower.~ DO ~SetGlobalGlobal("c-arangift","GLOBAL",3)~ GOTO c-arangiftflower
  IF ~Global("c-arangift","GLOBAL",3)~ THEN REPLY ~[PC] The carving on this leather bracer is... interesting.~ DO ~SetGlobalGlobal("c-arangift","GLOBAL",4)~ GOTO c-arangiftbracer
  IF ~Global("c-arangift","GLOBAL",4)~ THEN REPLY ~[PC] Thank you... a four-leaf clover. For luck?~ DO ~SetGlobalGlobal("c-arangift","GLOBAL",5)~ GOTO c-arangiftclover
  IF ~Global("c-arangift","GLOBAL",5)~ THEN REPLY ~[PC] Aran, you are not holding anything.~ GOTO c-arangiftlove
END

IF ~~ c-arangiftdagger
  SAY ~[ARAN] Well, you've a sharp mind, keen beauty, mithral will, an' a I think there's a might bit o' truth there on th' other side, too... a sharp tongue to keep me in line, your temper's a might short at times, an' sometines I just don't see you comin' until you are right (thumps his chest) here.~
  IF ~~ THEN REPLY ~[PC] I thought the gift of a knife was unlucky, or said that we are enemies.~ GOTO c-arangiftdaggerfin
END

IF ~~ c-arangiftdaggerfin
  SAY ~[ARAN] Banes Barren Bones, what books have you been readin'? Why would someone send a dagger to someone what would bury it in the giver's back? Besides, it's a dagger, not a knife. Womenfolk do have some strange ideas sometimes.~
 IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-arangiftpebble
  SAY ~[ARAN] Not exactly. It's a mite o' a pebble, shined up a bit. But it's tough, an' useful, an' don't attract no attention - it can wedge a door, stagger an enemy in his tracks, or cause a horse to lame. It won't break, an' it won't get stolen. I thought it might remind you o' me, somehow.~
 IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-arangiftflower
  SAY ~[ARAN] I don't know much about courtin'. Mercenary life calls more for more direct action, more beddin' wiles than courtly ways. But they were there, an' I was there, an' I thought "hey, she'd like that", an' there we are.~
 IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END  

IF ~~ c-arangiftbracer
  SAY ~[ARAN] Well, in a way. I never did no real leatherwork, an' it took a while for me to figure out how to carve th' design. What's bloody magical is that I like you enough I kept on 'til it were finished. Never did that before.~
 IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-arangiftclover
  SAY ~[ARAN] Aye. In spite o' all the wild an' dangerous things that come along wi' follwin' you around, I do think I was lucky just to have met you.~
 IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-arangiftlove
  SAY ~[ARAN] Aye, you got me there, <CHARNAME>. I guess I just will have to offer up a kiss, instead.~ 
 IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

/* Low HP hijack of flirts */
IF ~~ c-aranflirt2heal
  SAY ~[ARAN] <CHARNAME>, you are hurt. Let me take a look at that, will you?~
  IF ~RandomNum(5,1)~ THEN GOTO c-aranflirt2heal1
  IF ~RandomNum(5,2)~ THEN GOTO c-aranflirt2heal2
  IF ~RandomNum(5,3)~ THEN GOTO c-aranflirt2heal3
  IF ~RandomNum(5,4)~ THEN GOTO c-aranflirt2heal4
  IF ~RandomNum(5,5)~ THEN GOTO c-aranflirt2heal5
END

IF ~~ c-aranflirt2heal1
  SAY ~[ARAN] (Aran's rough hands are warm and gentle as he brushes them across your calves, searching for damage)~
  = ~[ARAN] (His hands follow up your thighs, and suddenly are closer and higher than propriety demands)~
   = ~[ARAN] (blushes) No damage there, I think.~
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranflirt2heal2
  SAY ~[ARAN] (Aran's face is drawn tight as his hands catch under your chin, lifting your face towards the light.)~
  = ~[ARAN] Bane's Bloody Bones, this is more than a kiss from me would fix, eh. You need a healin' potion or spell.~
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranflirt2heal3
  SAY ~[ARAN] (Aran's hands begin to roam across you, but his eyes catch yours and he stops suddenly.)~
  = ~[ARAN] Selune herself is not so beautiful. Even wi' all this damage, I'm too distracted to think straight. We need to get you healed right quick...~
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranflirt2heal4
  SAY ~[ARAN] (His face draws close to your knees as he kneels and checks for cuts and bruises. His breath is warm and close.)~
  = ~[ARAN] I'd be a sight happier inspectin' for damage without all this clothin' in the way... ~
  = ~[ARAN] (Aran's face turns scarlet.) *Ahem*. Right, then... hand me that strip o' bandage until we get you some real healin'.~
  IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranflirt2heal5
  SAY ~[ARAN] (Aran's hands move close along your ribcage, his fingers gently but insistently probing.)~
   = ~[ARAN] (Suddenly slipping through a torn section of clothing, his hand is close, warm, and intimate on your skin, rough but tender.)~
   = ~[ARAN] I'm sorry. Didn't mean to be so forward. Just checkin' what's hurt, an all. I could kiss some o' that better, I think...~
   IF ~~ THEN DO ~IncrementGlobal("c-aranflirt","GLOBAL",1) SetGlobal("c-aranheavyflirt","GLOBAL",0) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END


Reminder to self - put in GiveItemCreate() for at least the knife.
I love deadlines. I love the whooshing noise they make as they go by. - Douglas Adams

#11 cmorgan

cmorgan

    journeyman investigator

  • Gibberlings
  • 7097 posts
  • Gender:Male
  • Location:Glencoe, IL, USA

Posted 07 November 2008 - 02:31 PM

All Flirt and No Fun Makes Aran Very Dull
Now, at a certain point, there probably could be the equivalent of the "lust exceeds prudence". Most NPCs are written for committed romance. In fact in some folk's minds the "let's go get a room" is a reward for going through the full romance. Since we are working through a Romatic Comedy, the idea that sleeping with the PC is the reward/goal/endgame just doesn't work for Aran. Romantic Comedies have that happen early enough that there can be the threat to the relationship, where the protagonists end up with a conflict that threatens their relationship - and then it becomes either a light Drama where they do not succeed in overcoming the obstacle or they resolve it to the Happy Ending, choosing change and togetherness over the hurdle. This brings up great roleplaying opportunities of all kind to account for, too - if PC really just want to get her groove on, might she just unmercifully tease her suitor and use him to gratify her desires, then temporarily (or permanently) dump his sorry behind for one of the romance mods where the author has decided that the NPC will insist on chaste, monogamous, quiet bedchambers? Aran as Hugh Grant in Notting Hill makes some sense. Sleepless in Seatle, Mr. and Mrs. Smith (ok, less on the comedy part, but the format is the same), Jerry McGuire.... lots of ways to play this off and have some fun.

So let's throw an Easter Egg if someone is very much into flirting - a dialog that triggers after a certain number of flirts by Aran without the PC saying 'slow down, big boy', and reciprocation by initiating flirts through the PID a number of times. If the dialog is too steamy, then we can always add a variable later for people who want "teen" rated content instead of Flirt Pack/Romantic Encounters/Imoen Romance stuff. We know that logically, we ned some player options that support the following:

  • player might already be in a romance with Aran, so this might just be a booty call to a committed partner.
  • player might be two-timing another NPC, so she wants discreet action.
  • player might be playing a Mega-install, and run into the flirt trigger when she is not yet ready - so both "let's be friends' and "what? You were flirting with me, and I didn't specifically say no, but I sure didn't chase you back or give you any reason to think I was interested! Get your paws off of me!".
  • player might be playing with older mods that do not have romance reactions for everyone

We set up the .bcs:
(Probably have to get tester feedback on quickness/# of flirts before this can trigger)
/* Bedroll... Flirt?  */
/* Lots of Flirts means Player Wants Action */
IF
  GlobalGT("c-aranflirt","GLOBAL",16)
  Global("c-aranbedflirt","GLOBAL",0)
  Global("c-aranpcflirtstart","GLOBAL",2)
  Global("c-aranflirtstop","GLOBAL",0)
  Global("c-aranfight","GLOBAL",0)
  OR(2)
	Global("c-aranromance","GLOBAL",1)
	Global("c-aranromance","GLOBAL",2)
  See(Player1)
  !StateCheck(Player1,CD_STATE_NOTVALID)
  !StateCheck("c-aran",CD_STATE_NOTVALID) 
  CombatCounter(0)
  !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 RESPONSE #100
  SetGlobal("c-aranbedflirt","GLOBAL",1)
  StartDialogNoSet(Player1)
END

and the dialog
APPEND ~C-ARANJ~

/* Lots of Flirts means Player Wants Action */

IF ~Global("c-aranbedflirt","GLOBAL",1)~ THEN c-aranbedflirtstart
  SAY ~[ARAN] (Aran abruptly pulls you aside, speaking in soft urgent whispers.) Aye girl, but you are teasin' me somethin' terrible. Looks, glances, all this come-hither... I'm not so smart sometimes when it comes to womenfolk. I don't know if I'm bein' clear, here. I'm burnin' for to have you, here an' now.~

  IF ~~ THEN REPLY ~[PC] Do you really think this is the right time? We have no privacy, and we are in a good deal of trouble in general. This is not the time to deal with anything like this.~ + c-aranwhatifbed

  IF ~~ THEN REPLY ~[PC] You are very mistaken. Get your hands off of me, and never flirt with me again. I thought you were man enough to control your impulses.~ + c-aranterminateflirt

  IF ~~ THEN REPLY ~[PC] I want you now, Aran. But I have another in mind, someone who would not appreciate sharing me. If you can find a way to sneak into my bedroll, I would not turn you away.~ + c-aranlust

  IF ~~ THEN REPLY ~[PC] I'm sorry, Aran. I have committed myself to another, and I will not betray his trust. I think we should just be friends.~ + c-aranbefriends

  IF ~Global("c-aranromance","GLOBAL",2)~ THEN GOTO c-aranbedflirtrom
END

IF ~~ c-aranbedflirtrom
  SAY ~[ARAN] I know we have been talkin' about what we mean to each other, an' all, but I am bein' driven as mad as stallion in spring.~
  
  IF ~~ THEN REPLY ~[PC] You already know you are special to me, Aran. Come this evening. Or come as soon as you can find a discreet way to be with me.~ + c-aranlust
  
  IF ~~ THEN REPLY ~[PC] No, I do not think that would be a good idea. You should stop flirting with me, Aran.~ + c-aranterminateflirt
  
  IF ~~ THEN REPLY ~[PC] Aran, this is too sudden, too soon. We need to know more about eachother.~ + c-aranterminateflirt

  IF ~~ THEN REPLY ~[PC] I want your arms around me, lifting me, holding me. I would not turn you away. I would welcome you.~ + c-aranlust
  
  IF ~~ THEN REPLY ~[PC] I would play mare to your stallion, Aran.~ + c-aranlust
  
  IF ~~ THEN REPLY ~[PC] Do you really think this is the right time? We have no privacy, and we are in a good deal of trouble in general. This is not the time to deal with anything like this.~ + c-aranwhatifbed

END

IF ~~ c-aranwhatifbed
  SAY ~[ARAN] What if I find a way o' visitin' you quiet-like, some evenin'? Would you have room for me as a partner, if only for a night?~

  IF ~~ THEN REPLY ~[PC] No, I do not think that would be a good idea. You should stop flirting with me, Aran.~ + c-aranterminateflirt

  IF ~~ THEN REPLY ~[PC] I want your arms around me, lifting me, holding me. I would not turn you away. I would welcome you.~ + c-aranlust

  IF ~~ THEN REPLY ~[PC] I have been following you about, making faces and generaly hinting that I want you as a lover for ages now. I want you to find a way to my bedroll. And you can leave the clothes behind.~ + c-aranlust

  IF ~~ THEN REPLY ~[PC] I'm sorry, Aran. I have committed myself to another, and I will not betray his trust. I think we should just be friends.~ + c-aranbefriends

  IF ~~ THEN REPLY ~[PC] You have the wrong idea about our relationship. When and if I want you, I will command you to obey. Until then, stop thinking with the wrong head.~ + c-aranterminateflirt
END

IF ~~ c-aranterminateflirt
  SAY ~[ARAN] By Sune's... aye, that tears it. I must have misunderstood all o' that flirtin'. Fine, then. You know how I feel. I'll leave you alone for a bit.~
  IF ~~ THEN DO ~SetGlobal("c-aranfight","GLOBAL",1) SetGlobal("c-aranflirtstop","GLOBAL",1) RealSetGlobalTimer("c-aranflirttimer","GLOBAL",ARAN_FLIRT)~ EXIT
END

IF ~~ c-aranlust
  SAY ~[ARAN] ~(Aran's grip is tight, catching your hand with sudden intensity, his eyes searching yours keenly)~
  = ~Aye, I will find a way. You are like a fire in my heart, <CHARNAME>. An' I can't find aught to cool the flames.~

  IF ~~ THEN DO ~SetGlobal("c-aranromance","GLOBAL",2) Global("c-aranflirtbed","GLOBAL",1)~ EXIT
END

IF ~~ c-aranbefriends
  SAY ~[ARAN] By all the gods anywhere on th' Great Wheel, you wait to tell me this now plain an' straight. It would have hurt less, an' been more like a friend, to let me down early. Or to cut me cold awhile back.~
  IF ~~ THEN DO ~SetGlobal("c-aranromance","GLOBAL",3) Global("c-aranflirtstop","GLOBAL",1) Global("c-aranfight","GLOBAL",1)~ EXIT
END


Reminder to self - Dreamscript "c-aranflirtbed", sex.
Reminder to self - put the "mad at you" start/stop in place.
Reminder to self - song .wav files to create so far: friendship|c-aranft.wave, romance|c-aranlt.wav, anger|c-aranmd.wav, sorrow|c-aransw.wav

Deviations From The Norm: Companion romances vs BG2 Mod romances

There is one more level, where there is a committed romance. That leads us to a last flirt area, where physical action trumps wordplay. Couples of all ages generally drop the speech for direct action. That "third phase" relationship, where you both look at eachother, grin, and know that in about ten seconds there will be a rush of hormones that will sweep away common sense, awkwardness, and public nudity laws... well, for the younger folks, possibly not that last one. But next time you wander past a high school or college, don't look to carefully or you will be reminded of exacly what happens to common sense when there is a relatively deserted section of library stacks and two folks very much in lust/love/physical attraction.

This is the most interesting to deal with, because it brings in the toughest part of the Companion Mod - handling multiple romances. We have to step out of flirt territory and into Romance territory in order to do this.

The Narrative vs Player Choice Conundrum: Choice of Romance Shutdowns and Startups

In most NPC mods, the NPC is coded to attempt to shut down other romances when PC gets hooked up with NPC, to shut down/initiate the romance materials with qualifiers for race, alignment, charisma, etc, and to shut down the romance if another known mod-added or BioWare™ NPC goes to committed status with PC. There are good reasons for doing this, from both characterization and story-telling standpoints. If Jastey is to be true to Ajantis and his paladinhood, for example, it would be darned silly if some player could romance him while sleeping with Kelsey. Or Chloe. Or Imoen. Or all three. And don't even get me started with Ajantis vs Anomen - that might lead to a new Circle/Square/Triangle Mod where Paladins "joust" for the Lady - the swordplay analogies alone are ripe with possibilities.

Of course, what players like is immersive gameplay and stories that make internal sense. Which is why in spite of all that hard modder work to make things logical and internally consistent in-game, one of the oldest tweaks for BG2 was Sabre's Multiple Romance tweak. So obviously, there are plenty of folks (myself included, I might add) that don't always agree that their Half-Orc Fighter should be restricted from dating a hawt chick just because the mod maker decided it didn't make sense for a halfling to date a half-orc (no size jokes, please). There are now tweaks that specifically try to allow a player to have full romances with every NPC, extending this to eliminate minor considerations like gender, race, alignment, timing, charisma, opportunity, taste, and common sense. And there are even mods like Romantic Encounters, where the player can wander their way across Amn, choosing from innocent wandering flirtations to (and since I wrote some of them I can tell you :) ) Truly Slutty Innapropriate Material™. And finally, there is the tough reality that a mod can become a victim of time - mods that try to proscribe multiple PC<>NPC romances run into other mods that have not taken possible multiple installation into account. Currently, with no other tweak, I can happily two-time Taisha and Nalia, while quietly (and completely unrequitedly, because there is no written material extant) lust after Keto. So, we have a wide open field here, with multiple approaches (hey, keep your mind out of the gutter. Mine is taking up all of the space available).

There are a zillion discussions about this. My personal feeling is a person's fantasy life need not reflect reality. I don't go to work each morning mounting my Dragon and wielding Carsomyr +5, making sure I am stopping at 2E Landing instead of taking the exit to 4th Edition Ruleset Parkway. So what I am looking for is a good balance, where I don't have to fight a player's choice to make sense, and I don't have to force a player into a lockdown in order to not have 10,000 pathways like this:


IF ~Player1,IN_ROMANCE_WITH_OTHER)~ THEN GOTO <<newstate>>
IF ~Player1,CLERIC_OF_SUNE)~ THEN GOTO <<newstate>>
IF ~Player1,PALADIN_OF_SUNE)~ THEN GOTO <<newstate>>
IF ~Player1,GNOME_OF_SUNE)~ THEN GOTO <<newstate>>
IF ~Player1,DWARF_OF_SUNE)~ THEN GOTO <<newstate>>
IF ~Player1,LIKES_RED_WINE)~ THEN GOTO <<newstate>>
IF ~Player1,HATES_RED_WINE)~ THEN GOTO <<newstate>>
IF ~Player1,LIKES_KISSING)~ THEN GOTO <<newstate>>
IF ~Player1,NO_PDA_EVER)~ THEN GOTO <<newstate>>
IF ~Player1,INSTALLED_MULTIPLE_ROMANCE_TWEAK_1_OF_4)~ THEN GOTO <<newstate>>
(well, you get the idea).

Luckily, I can skip all this introspection by putting all the work on the player. The character helps me, too... Aran is not likely to get too demonstrative in public with someone who he sees as both his commanding officer and a powerful employer, with a woman who he deeply desires yet really is obviously massively more powerful than he is. So he is likely to let her call most of the shots, comfortable in taking lead only when invited (PID). I think adding the reactions to known romances makes sense, but even there, he will take what he can get, rationalize, and keep pitching until the PC says "Yo, boychick - get a grip. I'm married. Get over it".

So unless PC and Aran are in a fight, and unless the PC tells him to back off, he will flirt publically. The physical flirts, though, not so much. Dialog choices in the PID can manipulate the romance and flirting the same way, so a player can decideto shut down or restart available content with wide discretion. It becomes the player's responsibility to indicate what is not fitting their vision of the game - I just have to write stuff that doesn't force direct conflict. Commentary, possibly - I may come back to the humor possibilities there. I could borrow Theaceface, and play with ideas like this:

IF ~Sarah-RomanceActive-Variable = 2~ THEN hypotheticalSarahAranTalk
ARAN: Hey, Sarah. I got a question.
SARAH: Yes?
ARAN: How come you are so friendly with <CHARNAME>?
SARAH: I might ask you the same question.
ARAN: Well, I like her right fine, an' a bit more. Sparkin' and wooin', like.
SARAH: Which ear do I have the flower over, Aran?
ARAN: ... oh. You're displayin' th' whole "available and like ladies" sign, aren't you.
SARAH: Yes.
ARAN: Oh.
SARAH: Does this damage our friendship?
ARAN: Hells no, girl. I... it's just I got all caught up in... well, I thought <CHARNAME> might be interested in me, is all.
SARAH: What if she likes me better?
ARAN: (sigh) well, it won't be th' first time I went barkin' up the wrong tree.
SARAH: What if she likes us both?
ARAN: Whatever goes on, Sarah, that's not goin' to mess with you an' I backin' eachother. She's a right powerful woman, <CHARNAME> is. I guess we cross that bridge when we come to it, is all.
SARAH: Aran, sometimes you suprise me.


But just for fun, if PC has slept with him, let's play with a possessive, challenging Aran. One who might be showing off to other romances, unless directed by PC to back off. One who might, like the young man trying to stake his claim on the young lady in a crowd, push the physical envelope. This means that we will need to expand the flirt to include player physical reaction, to, either encouraging or discouraging. (Take a look at berelinde's Gavin in BG and her use of "smile" or "refrain from smiling" to see where I cribbed this basic idea). Here, I think we can give a few encounters that are outside of the regular routine, and put Aran in a "reach out and grab the wheel without asking" situation, because the player has signalled it by either her creeping into Aran's bedroll or him into hers. Which still leaves us with the problem of multiple romances and group situations. How do we support players who want to roleplay [affair/hidden lust/shy personality/whatever-situation-they-have-set-up] without making it stupefyingly 4th wall breaking? I mean, really:

PC: Oooh, that was great...

NPC1: My Lady, are you inj... DRAW STEEL.
 
NPC2: Hey, I thought *we* were all bonded and everything. 

MILKMAN: Just stopping by for... errr... never mind. I'll just leave the bottles over here.

RENAL: I can see why you said tonight wasn't good for you. Come on, Yoshimo. I think that the Copper Coronet awaits.

GAVIN: Hey, I haven't even had my scene written yet! Imoen, I swear, this isn't what it looks like...

IMOEN: I thought this was Lord M's mod. Sorry. I think Aerie is right over there, hiding behind that tree. I jumped the gun on the cutscene, looks like - we are supposed to be whispering about you behind your back, y'know.

SONIC THE HEDGEHOG: Just stopped by for a power-up.

HAERDALIS: Oh, my flight of eagles, I am so confused... is this the Circle, Square, Triangle, Hexagonal, or the Multi-Dimentional Mod? My personal assistant apparently scrambled my Blackberry(tm).

ARAN: I got no rights here, but Sune's Bouncing Bosom, you didn't tell me there was goin' to be quite so many in this particular bedroll tonight. I'm no prude, but I'm a touch more conservative than you are, m'girl. I think I'll just get out while the gettin's good.


So, let's set up some groundrules.
  • c-aransex = 1 (somewhere along the line, PC decided He Was The One, if only for a night)
  • c-aranfight = 0 (we are not going to do anything possessive if there is a fight going on)
  • c-aranflirtstop = 0 (no way he is going to do Possessive PDA if Player1 has said o back off)
  • c-aranromance = 2 (sex is not always conected with love, and vice-versa. Let's set this so he only gets possessive if he is pretty far gone - if he has committed to a serious relationship)
  • Only a few of these; save the big demonstrative stuff for LoveTalks
  • PC can shut these down by PID independently of flirts.

I will be back with the sequence in a few days.
I love deadlines. I love the whooshing noise they make as they go by. - Douglas Adams

#12 RavenBlack

RavenBlack

    Proofreading Ninja

  • Members
  • 272 posts
  • Gender:Female
  • Location:Vermont

Posted 07 November 2008 - 11:30 PM

~[ARAN] There's some Sunite sayin' about 'a fair face may fade, but a beautiful soul lasts forever'. I don't know about all that when I look at you, though. There's a power there I think is raw, an' excitin'. It makes me want to be man enough to catch your attention.~

~[ARAN] I did? By Clangeddin's Beard, so I did. Same damned poem, too, full o' words you dread. All this combat must have addled my head.~

~[ARAN] Mielikki's Quick Tongue, I did it again. I was tryin' to compliment you, an' it ends up all blood an' war. Never mind.~

~[ARAN] I did one talk to some follower o' Deneir, a young lassie named Finch. She seemed to think that I was supposed to woo a gnomish lass wi' books an' knowledge.~

~[ARAN] I'm not so sure, though. I did some readin' up on Deneir, an' it seems like there's a fair bit o' forward behavior involved. Somethin' about big families, an' practicin' to make 'em. I suspect I shouldn't get that forward wi' you, though..~


I love the flirt addition (especially the itchy bush bit) :) Only response I'm not too keen on is unfortunately the one with my joke. NMSune is the value for the Heartwarder. :p

'Thine eyes, like the golden gleam of torchlight
On the armour of my heart
Lights my love.

Thy breath, like the dusk breezes
On the shield of my soul
Warms my love.

Thy lips, like the gentle red rose
On the helm of my destiny
Inflames my love.

I light, I warm, I burn for you,
For you are my soul's own destiny.'


*melts into a puddle at the foot of her chair* :) :D

#13 cmorgan

cmorgan

    journeyman investigator

  • Gibberlings
  • 7097 posts
  • Gender:Male
  • Location:Glencoe, IL, USA

Posted 08 November 2008 - 08:07 AM

Cool - got the fixes integrated - thanks!!

and I agree on the custom "inside joke" for you. It doesn't scan; I can do better. I'll think about it for a bit.

On the poem, I am thinking of switching one "destiny" to "desire", though - I just realized I duplicated.

On the helm of my destiny
For you are my soul's own destiny.

needs to be either

On the helm of my desire
...
For you are my soul's own destiny.

or

On the helm of my destiny
...
For you are my soul's own desire.
I love deadlines. I love the whooshing noise they make as they go by. - Douglas Adams

#14 RavenBlack

RavenBlack

    Proofreading Ninja

  • Members
  • 272 posts
  • Gender:Female
  • Location:Vermont

Posted 08 November 2008 - 10:11 PM

All this talk about Sunites reminds me of an awesome quote found in the bio piece Bons wrote for Surayah over on PPG: "If the point of my religion was just to have sex all the time like you paladin-types seem to think, I would have stayed in Calimport and dedicated myself to Sharess!" :) If only I weren't such a coding noob, I'd try to write up a Sensate of Sharess kit. :)

~[ARAN] Aye, though the writin's not worthy o' the vellum it's on. Look, I did my best, but to be right truthful, I do balance sheets, not beddin' sheets. I did a bunch o' drafts, an' the best I could come up with was that.~

~[ARAN] (He gently places his hands aside your pack, lifting the weight from your back for a moment, and then stands away)~

I don't think I'll be tryin' to write in my own heart's blood, an' all, like they do on some o' th' distant isles we always hear talk about. Don't think you would appreciate it. I'll stick to regular ink.~

(He peers over your shoulder, cheek and arm close to yours)~

Is it warm around here? Or is it just on account of you bein' so desirable?~

I did once talk to some follower o' Deneir, a young lassie named Finch. She seemed to think that I was supposed to woo a gnomish lass wi' books an' knowledge.~

Bane's Barren Bones, what books have you been readin'? Why would someone send a dagger to someone what would bury it in the giver's back? Besides, it's a dagger, not a knife. Womenfolk do have some strange ideas sometimes.~

Aye. In spite o' all the wild an' dangerous things that come along wi' followin' you around, I do think I was lucky just to have met you.~


Edited by RavenBlack, 09 November 2008 - 02:40 AM.


#15 berelinde

berelinde

    The Typo Queen

  • Gibberlings
  • 8594 posts
  • Gender:Male
  • Location:New Jersey, USA

Posted 09 November 2008 - 12:15 AM

Cool - got the fixes integrated - thanks!!

and I agree on the custom "inside joke" for you. It doesn't scan; I can do better. I'll think about it for a bit.

On the poem, I am thinking of switching one "destiny" to "desire", though - I just realized I duplicated.

On the helm of my destiny
For you are my soul's own destiny.

needs to be either

On the helm of my desire
...
For you are my soul's own destiny.

or

On the helm of my destiny
...
For you are my soul's own desire.

Option #2 FTW. Definitely, option #2. (swoons)
Must. Write. Faster.

cmorgan: "None of us get old around here, just more proficient at doing more stuff with less braincells!"

berelinde's mods
TolkienAcrossTheWater website
TolkienAcrossTheWater Forum



Reply to this topic



  



Also tagged with one or more of these keywords: mod development, tutorial, dialog coding, aran whitehand, flirts, flirtpack, lovetalks, random number

1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users