Author Topic: Two dream talks at once: can we do anything about this?  (Read 4677 times)

Offline Kulyok

  • Global Moderator
  • Planewalker
  • *****
  • Posts: 6233
  • Gender: Female
  • The perfect moment is now.
Two dream talks at once: can we do anything about this?
« on: July 09, 2007, 08:56:09 AM »
So, you play BG2 with a party, get banters, lovetalks, flirts... and rest from time to time. And at rest, you get banters and lovetalks, too. Sometimes it's a lot of stuff, especially with mods installed, and sometimes, you get two or three talks in a row at rest. Or perhaps even more?

I never got more than three, but two is annoying enough. After all, you've just decided to finally fall asleep in NPC A's arms, why should NPC B be telling you their life story, and NPC C - discuss your travel plans?

Yes, it happens. Does it happen often? Not really, but as you get more and more chatty NPCs and download more and more expansions, such cases might well occur more often. Flirt Pack+Banter Pack+IEP+Keto+... ? Ooops.

BG1 NPC Project attempted to correct this thing with introducing a dream timer for every talk:

Code: [Select]
IF
InParty(Myself)
Global("DreamTimerStarted","GLOBAL",0)
THEN
RESPONSE #100
RealSetGlobalTimer("DreamTalk","GLOBAL",180)
SetGlobal("DreamTimerStarted","GLOBAL",1)
END

and later

Code: [Select]
IF
InParty("yeslick")
Global("IMYE1","GLOBAL",0)
InParty(Myself)
CombatCounter(0)
!See([ENEMY])
!StateCheck(Myself,CD_STATE_NOTVALID)
!StateCheck("yeslick",CD_STATE_NOTVALID)
RealGlobalTimerExpired("DreamTalk","GLOBAL")
THEN
RESPONSE #100
SetGlobal("IMYE1","GLOBAL",1)
RealSetGlobalTimer("DreamTalk","GLOBAL",180)
StartDialogueNoSet("yeslick")
END

Which is cool. However, there're Indira and Finch and Mur'Neth and Gavin, and they don't have it - which is why I've pretty much despaired of this(and I think Phase 3 of BG1 NPC Project no longer has it, which may or may not be a mistake).

After all, can all NPC modders get together and say: "We'll use an additional RealSetGlobalTimer("DreamTalk","GLOBAL",180) in each of our dream talks, even the most special and the most important ones, that must-trigger-as-soon-as-NPC-does-A-but-not-before-NPC-does-B!" ?

... maybe, but I wouldn't count on it.

As well, is it possible to patch the engine, so only one talk is called at rest, and RestParty() is non-interruptable?

... I already hear a chorus of "Hardcoded!"

So... can we do something about this? I think it is something to ponder upon, in any case.

Offline berelinde

  • Planewalker
  • *****
  • Posts: 1188
  • Gender: Female
    • Gavin, cleric of Lathander, for Tutu
Re: Two dream talks at once: can we do anything about this?
« Reply #1 on: July 09, 2007, 10:24:11 AM »
Gavin has it. It uses the same dream timer as BG1 NPC, copied directly from BG1 NPC, specifically to prevent it. If it isn't working, than BG1 NPC's isn't, either.

But if it isn't working, it's a bug, and I need to look at it again.

Offline Kulyok

  • Global Moderator
  • Planewalker
  • *****
  • Posts: 6233
  • Gender: Female
  • The perfect moment is now.
Re: Two dream talks at once: can we do anything about this?
« Reply #2 on: July 09, 2007, 11:52:50 AM »
Oh, that's good! I think I'll ask cmorgan to add the timer to Phase 3 again, then, or just ask his permission to adjust the dream scripts myself. Then TUTU is relatively rest-safe for the time being.

Offline cmorgan

  • Planewalker
  • *****
  • Posts: 1417
  • Gender: Male
  • Searcher of Bugs
Re: Two dream talks at once: can we do anything about this?
« Reply #3 on: July 09, 2007, 11:59:25 AM »
I can add them, n problem, or you can - I think probably it will be quicker if you do. I am currently searching for the Rest() and RestParty() actions, and tracing them back to the relevant triggers, but you might be faster. Let me see what i can do with a mass search of the Phase3 materials:

By the way, I 'll post this in the workroom, but FYI if you get to it before I do:
Code: [Select]
Searching for: RestParty()
AJROM\DLG\AjantisLTs_PR.D(2430): IF ~~ THEN DO ~SetGlobal("X#AjantisRomanceActive","GLOBAL",3) SetGlobal("X#AjantisRomanceOtherMan","GLOBAL",1) RestParty()~ EXIT
AJROM\DLG\AjantisLTs_PR.D(2435): IF ~~ THEN DO ~SetGlobal("X#AjantisRomanceActive","GLOBAL",3) SetGlobal("X#AjantisRomanceNoInterest","GLOBAL",1) RestParty()~ EXIT
AJROM\DLG\AjantisLTs_PR.D(2440): IF ~~ THEN DO ~SetGlobal("X#AjantisRomanceActive","GLOBAL",3) SetGlobal("X#AjantisRomanceInsult","GLOBAL",1) RestParty()~ EXIT
AJROM\DLG\AjantisLTs_PR.D(2450): IF ~~ THEN DO ~SetGlobal("X#AjantisRomanceActive","GLOBAL",2) RestParty()~ EXIT
AJROM\DLG\AjantisLTs_PR.D(2704): IF ~~ THEN DO ~RestParty()~ EXIT
AJROM\DLG\AjantisLTs_PR.D(2775): IF ~~ THEN DO ~SetGlobal("X#AjantisRomanceWantsInt","GLOBAL",2) RestParty()~ EXIT
AJROM\DLG\AjantisLTs_PR.D(2791): IF ~~ THEN DO ~SetGlobal("X#AjantisRomanceWantsInt","GLOBAL",2) RestParty()~ EXIT
AJROM\DLG\AjantisLTs_PR.D(2801): IF ~~ THEN DO ~SetGlobal("X#AjantisRomanceIntimacy","GLOBAL",1) RestParty()~ EXIT
AJROM\DLG\AjantisLTs_PR.D(2816): IF ~~ THEN DO ~RestParty()~ EXIT
AJROM\DLG\AjantisLTs_PR.D(2831): IF ~~ THEN DO ~RestParty()~ EXIT
AJROM\DLG\AjantisLTs_PR.D(2836): IF ~~ THEN DO ~SetGlobal("X#AjantisRomanceWantsInt","GLOBAL",2) RestParty()~ EXIT
AJROM\DLG\AjantisLTs_PR.D(2841): IF ~~ THEN DO ~SetGlobal("X#AjantisRomanceWantsInt","GLOBAL",2) RestParty()~ EXIT
AJROM\DLG\AjantisLTs_PR.D(3303): IF ~~ THEN DO ~SetGlobal("X#AjantisRomanceMakeLove2","GLOBAL",1) SetGlobal("X#AjantisRomanceIntimacy","GLOBAL",1) RestParty()~ EXIT
AJROM\DLG\AjantisLTs_PR.D(3315): IF ~~ THEN DO ~SetGlobal("X#AjantisRomanceNoMakeLove2","GLOBAL",1) RestParty()~ EXIT
AJROM\DLG\AjantisLTs_PR.D(3351): IF ~~ THEN DO ~SetGlobal("X#AjantisRomanceIntimacy2Morning","GLOBAL",2) RestParty()~ EXIT
BRROM\DLG\P#BRLT.D(505): IF ~~ THEN DO ~RestParty()~ EXIT
BRROM\DLG\P#BRLT.D(525): IF ~~ THEN DO ~RestParty()~ EXIT
BRROM\DLG\P#BRLT.D(530): IF ~~ THEN DO ~RestParty()~ EXIT
BRROM\DLG\P#BRLT.D(535): IF ~~ THEN DO ~RestParty()~ EXIT
BRROM\DLG\P#BRLT.D(540): IF ~~ THEN DO ~RestParty()~ EXIT
BRROM\DLG\P#BRLT.D(545): IF ~~ THEN DO ~RestParty() SetGlobal("P#BranwenRomanceActive","GLOBAL",3)~ EXIT
BRROM\DLG\P#BRLT.D(620): IF ~~ THEN DO ~RestParty()~ EXIT
BRROM\DLG\P#BRLT.D(641): IF ~~ THEN DO ~RestParty() SetGlobal("P#BranwenRomanceActive","GLOBAL",3)~ EXIT
BRROM\DLG\P#BRLT.D(655): IF ~~ THEN DO ~RestParty()~ EXIT
BRROM\DLG\P#BRLT.D(667): IF ~~ THEN DO ~RestParty()~ EXIT
BRROM\DLG\P#BRLT.D(672): IF ~~ THEN DO ~RestParty() SetGlobal("P#BranwenRomanceActive","GLOBAL",3)~ EXIT
BRROM\DLG\P#BRLT.D(677): IF ~~ THEN DO ~RestParty()~ EXIT
BRROM\DLG\P#BRLT.D(683): IF ~~ THEN DO ~RestParty()~ EXIT
BRROM\DLG\P#BRLT.D(998): IF ~~ THEN DO ~RestParty()~ EXIT
BRROM\DLG\P#BRLT.D(1024): IF ~~ THEN DO ~RestParty()~ EXIT
BRROM\DLG\P#BRLT.D(1171): IF ~~ THEN DO ~RestParty()~ EXIT
BRROM\DLG\P#BRLT.D(1176): IF ~~ THEN DO ~RestParty()~ EXIT
BRROM\DLG\P#BRLT.D(1181): IF ~~ THEN DO ~RestParty()~ EXIT
BRROM\DLG\P#BRLT.D(1285): IF ~~ THEN DO ~RestParty()~ EXIT
BRROM\DLG\P#BRLT.D(1290): IF ~~ THEN DO ~RestParty()~ EXIT
BRROM\DLG\P#BRLT.D(1295): IF ~~ THEN DO ~RestParty()~ EXIT
BRROM\DLG\P#BRLT.D(1308): IF ~~ THEN DO ~RestParty()~ EXIT
BRROM\DLG\P#BRLT.D(1330): IF ~~ THEN DO ~RestParty()~ EXIT
CHALLENGE\Chal_Dialogue\X#CHALLENGE.D(107): IF ~~ THEN DO ~SetGlobal("X#MaleChallengeDone","GLOBAL",1) SetGlobal("CoranRomanceInactive","GLOBAL",1) ActionOverride("X#MASTE",EscapeArea()) ActionOverride("X#MASTE",DestroySelf()) RestParty()~ EXIT
CHALLENGE\Chal_Dialogue\X#CHALLENGE.D(112): IF ~~ THEN DO ~SetGlobal("X#MaleChallengeDone","GLOBAL",1) SetGlobal("X#AjantisRomanceActive","GLOBAL",3) ActionOverride("X#MASTE",EscapeArea()) ActionOverride("X#MASTE",DestroySelf()) RestParty() ~ EXIT
CHALLENGE\Chal_Dialogue\X#CHALLENGE.D(117): IF ~~ THEN DO ~SetGlobal("X#MaleChallengeDone","GLOBAL",1) SetGlobal("CoranRomanceInactive","GLOBAL",1) SetGlobal("X#AjantisRomanceActive","GLOBAL",3) ActionOverride("X#MASTE",EscapeArea()) ActionOverride("X#MASTE",DestroySelf()) RestParty()~ EXIT
CHALLENGE\Chal_Dialogue\X#CHALLENGE.D(122): IF ~~ THEN DO ~SetGlobal("X#MaleChallengeDone","GLOBAL",1) SetGlobal("CoranRomanceInactive","GLOBAL",1) SetGlobal("X#AjantisRomanceActive","GLOBAL",3)  ActionOverride("X#MASTE",EscapeArea()) ActionOverride("X#MASTE",DestroySelf()) RestParty()~ EXIT
CHALLENGE\Chal_Dialogue\X#CHALLENGE.D(127): IF ~~ THEN DO ~SetGlobal("X#MaleChallengeDone","GLOBAL",1) SetGlobal("CoranRomanceInactive","GLOBAL",1) SetGlobal("X#AjantisRomanceActive","GLOBAL",3) SetGlobal("X#XARomanceInactive","GLOBAL",1) ActionOverride("X#MASTE",EscapeArea()) ActionOverride("X#MASTE",DestroySelf()) RestParty()~ EXIT
COROM\DLG\CIFLIRT.D(27): ++ @16 DO ~SetGlobal("CoNight","GLOBAL",2) RealSetGlobalTimer("CFlirtTalkTime","GLOBAL",COROM_TIMER) RestParty()~ EXIT
COROM\DLG\CIFLIRT.D(28): ++ @17 DO ~SetGlobal("CoNight","GLOBAL",2) RealSetGlobalTimer("CFlirtTalkTime","GLOBAL",COROM_TIMER) RestParty()~ EXIT
COROM\DLG\CIFLIRT.D(34): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\CIFLIRT.D(66): IF ~~ THEN DO ~SetGlobal("CoInn","GLOBAL",2) RealSetGlobalTimer("CFlirtTalkTime","GLOBAL",COROM_TIMER) RestParty()~ EXIT
COROM\DLG\CIFLIRT.D(139): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\CIFLIRT.D(144): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\CIFLIRT.D(149): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\CIFLIRT.D(155): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\CIFLIRT.D(516): IF ~~ THEN DO ~SetGlobal("X#CoranHanaliRune","GLOBAL",2) RestParty()~ EXIT
COROM\DLG\CIFLIRT.D(552): IF ~~ THEN DO ~SetGlobal("X#CoranHanaliRune","GLOBAL",6) RealSetGlobalTimer("X#CoHanaliTime","GLOBAL",300) RestParty()~ EXIT
COROM\DLG\CIFLIRT.D(562): IF ~~ THEN DO ~SetGlobal("X#CoranHanaliRune","GLOBAL",8)  RealSetGlobalTimer("X#CoHanaliTime","GLOBAL",300) RestParty()~ EXIT
COROM\DLG\CIFLIRT.D(570): IF ~~ THEN DO ~SetGlobal("X#CoranHanaliRune","GLOBAL",10) SetGlobalTimer("X#CoranLonging","GLOBAL", THREE_DAYS) SetGlobal("CoranRomanceInactive","GLOBAL",1) RestParty()~ EXIT
COROM\DLG\CIFLIRT.D(600): IF ~~ THEN DO ~SetGlobal("X#CoranHanaliRune","GLOBAL",14)  RealSetGlobalTimer("X#CoHanaliTime","GLOBAL",300) RestParty()~ EXIT
COROM\DLG\CIFLIRT.D(609): IF ~~ THEN DO ~SetGlobal("X#CoranHanaliRune","GLOBAL",16)  RealSetGlobalTimer("X#CoHanaliTime","GLOBAL",300) RestParty()~ EXIT
COROM\DLG\CIFLIRT.D(633): IF ~!Alignment("coran",CHAOTIC_NEUTRAL)~ THEN DO ~SetGlobal("CoranRomancePath","GLOBAL",2) RestParty()~ EXIT
COROM\DLG\CIFLIRT.D(634): IF ~Alignment("coran",CHAOTIC_NEUTRAL)~ THEN DO ~SetGlobal("CoranRomancePath","GLOBAL",4) RestParty()~ EXIT
COROM\DLG\CIFLIRT.D(640): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\CIFLIRT.D(646): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\CIFLIRT.D(652): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\CIFLIRT.D(658): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\CIFLIRT.D(664): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\CIFLIRT.D(670): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\CRNPC.D(295): DO ~RestParty()~ 
COROM\DLG\CRNPC.D(504): DO ~SetGlobal("CoranLover","GLOBAL",0) SetGlobal("CoranRomancePath","GLOBAL",2) RestParty()~
COROM\DLG\CRNPC.D(510): IF ~~ THEN DO ~RestParty() SetGlobal("KivanRomanceInactive","GLOBAL",1)~ EXIT
COROM\DLG\CRNPC.D(515): ++ @183 DO ~RestParty() SetGlobal("KivanRomanceInactive","GLOBAL",1)~ EXIT
COROM\DLG\CRNPC.D(516): ++ @184 DO ~RestParty() SetGlobal("KivanRomanceInactive","GLOBAL",1)~ EXIT
COROM\DLG\CRNPC.D(517): ++ @185 DO ~RestParty() SetGlobal("KivanRomanceInactive","GLOBAL",1)~ EXIT
COROM\DLG\CRNPC.D(518): ++ @186 DO ~RestParty() SetGlobal("KivanRomanceInactive","GLOBAL",1)~ EXIT
COROM\DLG\CRNPC.D(526): IF ~~ THEN DO ~RestParty() SetGlobal("KivanRomanceInactive","GLOBAL",1)~ EXIT
COROM\DLG\CRNPC.D(548): IF ~~ THEN DO ~SetGlobal("CoranRomanceInactive","GLOBAL",1) RestParty()~
COROM\DLG\P#CORLT.D(459): IF ~~ THEN DO ~RestParty() SetGlobal("CoranLover","GLOBAL",1) SetGlobal("CoranRomancePath","GLOBAL",2)~
COROM\DLG\P#CORLT.D(472): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(535): IF ~~ THEN DO ~RestParty() SetGlobal("CoranLover","GLOBAL",1) SetGlobal("CoranRomancePath","GLOBAL",2)~
COROM\DLG\P#CORLT.D(541): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(546): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(551): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(556): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(561): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(573): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(578): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(583): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(595): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(600): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(863): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(906): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(911): IF ~~ THEN DO ~RestParty() SetGlobal("CoranLover","GLOBAL",1) SetGlobal("CoranRomancePath","GLOBAL",2)~
COROM\DLG\P#CORLT.D(917): IF ~~ THEN DO ~RestParty() SetGlobal("CoranLover","GLOBAL",1) SetGlobal("CoranRomancePath","GLOBAL",2)~
COROM\DLG\P#CORLT.D(923): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(928): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomanceInactive","GLOBAL",1)~ EXIT
COROM\DLG\P#CORLT.D(941): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomanceInactive","GLOBAL",1)~ EXIT
COROM\DLG\P#CORLT.D(947): ++ @347 DO ~IncrementGlobal("CGLoveTalk","GLOBAL",1) RestParty()~ EXIT
COROM\DLG\P#CORLT.D(948): ++ @348 DO ~IncrementGlobal("CGLoveTalk","GLOBAL",1) RestParty()~ EXIT
COROM\DLG\P#CORLT.D(953): ++ @350 DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(964): ++ @358 DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(965): ++ @359 DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(966): ++ @360 DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(974): ++ @358 DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(975): ++ @364 DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(983): ++ @358 DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(984): ++ @366 DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(986): ++ @368 DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(994): ++ @370 DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(995): ++ @371 DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(1003): ++ @358 DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(1004): ++ @373 DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(1012): ++ @378 DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(1018): ++ @381 DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(1031): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(1037): ++ @390 DO ~RestParty() SetGlobal("CoranRomancePath", "GLOBAL",2) SetGlobal("CoranLover","GLOBAL",1)~ EXIT
COROM\DLG\P#CORLT.D(1047): ++ @397 DO ~RestParty() SetGlobal("CoranRomancePath", "GLOBAL",2) SetGlobal("CoranLover","GLOBAL",1)~ EXIT
COROM\DLG\P#CORLT.D(1054): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(1060): ++ @402 DO ~RestParty() SetGlobal("CoranRomancePath", "GLOBAL",2) SetGlobal("CoranLover","GLOBAL",1)~ EXIT
COROM\DLG\P#CORLT.D(1066): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomancePath", "GLOBAL",2) SetGlobal("CoranLover","GLOBAL",1)~ EXIT
COROM\DLG\P#CORLT.D(1072): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(1077): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(1082): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(1671): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(1676): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(1698): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(1710): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(1715): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(1729): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(1801): ++ @681 DO~ RestParty() SetGlobal("CoranRomanceInactive","GLOBAL",1)~ EXIT
COROM\DLG\P#CORLT.D(1807): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomancePath","GLOBAL",2)~ EXIT
COROM\DLG\P#CORLT.D(1834): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomancePath","GLOBAL",2)~ EXIT
COROM\DLG\P#CORLT.D(1860): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomancePath","GLOBAL",2)~ EXIT
COROM\DLG\P#CORLT.D(1870): IF ~~ THEN DO ~RestParty() SetGlobal("CoranLover","GLOBAL",2)~ EXIT
COROM\DLG\P#CORLT.D(1875): IF ~~ THEN DO ~RestParty() SetGlobal("CoranLover","GLOBAL",2)~ EXIT
COROM\DLG\P#CORLT.D(1880): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomancePath","GLOBAL",2)~ EXIT
COROM\DLG\P#CORLT.D(1885): IF ~~ THEN DO ~RestParty() SetGlobal("CoranLover","GLOBAL",2)~ EXIT
COROM\DLG\P#CORLT.D(1890): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomancePath","GLOBAL",2)~ EXIT
COROM\DLG\P#CORLT.D(1895): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomancePath","GLOBAL",2)~ EXIT
COROM\DLG\P#CORLT.D(1900): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomancePath","GLOBAL",2)~ EXIT
COROM\DLG\P#CORLT.D(1913): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomancePath","GLOBAL",2)~ EXIT
COROM\DLG\P#CORLT.D(1985): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomancePath","GLOBAL",2)~ EXIT
COROM\DLG\P#CORLT.D(2033): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(2362): IF ~~ THEN DO ~RestParty() SetGlobal("CoranLover","GLOBAL",1)~ EXIT
COROM\DLG\P#CORLT.D(2374): IF ~~ THEN DO ~RestParty()~
COROM\DLG\P#CORLT.D(2394): IF ~~ THEN DO ~SetGlobal("CoranRomanceInactive","GLOBAL",1) RestParty()~
COROM\DLG\P#CORLT.D(2400): IF ~~ THEN DO ~RestParty()~
COROM\DLG\P#CORLT.D(2406): IF ~~ THEN DO ~RestParty() SetGlobal("CoranLover","GLOBAL",1)~
COROM\DLG\P#CORLT.D(2609): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomanceInactive","GLOBAL",1)~
COROM\DLG\P#CORLT.D(2615): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomanceInactive","GLOBAL",1)~
COROM\DLG\P#CORLT.D(2621): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomanceInactive","GLOBAL",1)~
COROM\DLG\P#CORLT.D(2634): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomanceInactive","GLOBAL",1)~
COROM\DLG\P#CORLT.D(2640): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomanceInactive","GLOBAL",1)~
COROM\DLG\P#CORLT.D(2646): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomanceInactive","GLOBAL",1)~
COROM\DLG\P#CORLT.D(2652): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomanceInactive","GLOBAL",1)~
COROM\DLG\P#CORLT.D(2658): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomanceInactive","GLOBAL",1)~
COROM\DLG\P#CORLT.D(2670): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomanceInactive","GLOBAL",1)~
COROM\DLG\P#CORLT.D(2676): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomanceInactive","GLOBAL",1)~
COROM\DLG\P#CORLT.D(2922): ++ @1088 DO~ SetGlobal("CoranLover","GLOBAL",1) RestParty()~ EXIT
COROM\DLG\P#CORLT.D(2930): IF ~~ THEN DO ~SetGlobal("CoranLover","GLOBAL",1) RestParty()~
COROM\DLG\P#CORLT.D(2936): IF ~~ THEN DO ~SetGlobal("CoranLover","GLOBAL",1) RestParty()~
COROM\DLG\P#CORLT.D(3005): IF ~~ THEN DO ~SetGlobal("CoranLover","GLOBAL",1) RestParty()~
COROM\DLG\P#CORLT.D(3043): ++ @1124 DO ~SetGlobal("CoranLover","GLOBAL",1) RestParty()~ EXIT
COROM\DLG\P#CORLT.D(3060): IF ~~ THEN DO ~SetGlobal("CoranLover","GLOBAL",1) RestParty()~
COROM\DLG\P#CORLT.D(3081): IF ~~ THEN DO ~SetGlobal("CoranLover","GLOBAL",1) RestParty()~
COROM\DLG\P#CORLT.D(3208): IF ~~ THEN DO ~Kill("coran") RestParty()~ EXIT
COROM\DLG\P#CORLT.D(3240): ++ @1175 DO ~RestParty() SetGlobal("Co3Healer","GLOBAL", 1)~ EXIT
COROM\DLG\P#CORLT.D(3241): + ~OR(4) Class(Player1,DRUID_ALL) Class(Player1,CLERIC_ALL) Class(Player1,PALADIN_ALL) Class(Player1,RANGER_ALL) ~ +@1176 DO ~ RestParty() SetGlobal("Co3Healer","GLOBAL", 1)~ EXIT
COROM\DLG\P#CORLT.D(3279): ++ @1194 DO ~ RestParty() SetGlobal("Co3Marriage","GLOBAL", 1) ReputationInc(-2) ~ EXIT
COROM\DLG\P#CORLT.D(3285): ++ @1197 DO ~RestParty() SetGlobal("CoranRomanceInactive", "GLOBAL", 1) ReputationInc(-2) ~ EXIT
COROM\DLG\P#CORLT.D(3291): ++ @1200 DO ~ RestParty() ReputationInc(-2) ~ EXIT
COROM\DLG\P#CORLT.D(3298): ++ @1200 DO ~ RestParty() ReputationInc(-2) ~ EXIT
COROM\DLG\P#CORLT.D(3306): ++ @1206 DO ~ RestParty() SetGlobal("Co3Healer","GLOBAL", 1)~ EXIT
COROM\DLG\P#CORLT.D(3307): + ~OR(4) Class(Player1,DRUID_ALL) Class(Player1,CLERIC_ALL) Class(Player1,PALADIN_ALL) Class(Player1,RANGER_ALL) ~ +@1176 DO ~ RestParty() SetGlobal("Co3Healer","GLOBAL", 1) ~ EXIT
COROM\DLG\P#CORLT.D(3312): IF ~~ THEN DO ~ReputationInc(-8) Kill("coran") RestParty()~ EXIT
COROM\DLG\P#CORLT.D(3318): ++ @1210 DO ~ RestParty() SetGlobal("CoranRomanceInactive", "GLOBAL", 1) ReputationInc(-2) ~ EXIT
COROM\DLG\P#CORLT.D(3319): ++ @1211 DO ~ RestParty() ReputationInc(-2) ~ EXIT
COROM\DLG\P#CORLT.D(3326): ++ @1214 DO ~SetGlobal("Co3Healer","GLOBAL",3)RestParty()~ EXIT
COROM\DLG\P#CORLT.D(3327): ++ @1215 DO ~SetGlobal("Co3Healer","GLOBAL", 3)RestParty()~ EXIT
COROM\DLG\P#CORLT.D(3703): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomanceInactive","GLOBAL",1)~
COROM\DLG\P#CORLT.D(3709): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomanceInactive","GLOBAL",1)~
COROM\DLG\P#CORLT.D(3715): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomanceInactive","GLOBAL",1)~
COROM\DLG\P#CORLT.D(3728): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomanceInactive","GLOBAL",1)~
COROM\DLG\P#CORLT.D(3734): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomanceInactive","GLOBAL",1)~
COROM\DLG\P#CORLT.D(3740): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomanceInactive","GLOBAL",1)~
COROM\DLG\P#CORLT.D(3746): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomanceInactive","GLOBAL",1)~
COROM\DLG\P#CORLT.D(3752): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomanceInactive","GLOBAL",1)~
COROM\DLG\P#CORLT.D(3764): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomanceInactive","GLOBAL",1)~
COROM\DLG\P#CORLT.D(3770): IF ~~ THEN DO ~RestParty() SetGlobal("CoranRomanceInactive","GLOBAL",1)~
COROM\DLG\P#CORLT.D(3781): ++ @1322 DO ~RestParty() SetGlobal("CNSexTalk","GLOBAL",3)~ EXIT
COROM\DLG\P#CORLT.D(3782): ++ @1323 DO ~RestParty() SetGlobal("CNSexTalk","GLOBAL",3)~ EXIT
COROM\DLG\P#CORLT.D(3783): ++ @1324 DO ~RestParty() SetGlobal("CNSexTalk","GLOBAL",3)~ EXIT
COROM\DLG\P#CORLT.D(3784): ++ @1325 DO ~RestParty() SetGlobal("CNSexTalk","GLOBAL",3)~ EXIT
COROM\DLG\P#CORLT.D(3785): ++ @1326 DO ~RestParty() SetGlobal("CNSexTalk","GLOBAL",3)~ EXIT
COROM\DLG\P#CORLT.D(3786): ++ @1327 DO ~RestParty() SetGlobal("CNSexTalk","GLOBAL",3)~ EXIT
COROM\DLG\P#CORLT.D(3787): ++ @1328 DO ~RestParty() SetGlobal("CNSexTalk","GLOBAL",3)~ EXIT
COROM\DLG\P#CORLT.D(3788): ++ @1329 DO ~RestParty() SetGlobal("CorMonologue", "GLOBAL",2) SetGlobal("CNSexTalk","GLOBAL",3)~ EXIT
COROM\DLG\P#CORLT.D(4180): ++ @1476 DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(4186): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(4203): ++ @1484 DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(4213): ++ @1484 DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(4239): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(4244): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(4249): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(4296): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(4302): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(4315): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(4321): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(4326): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(4333): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(4340): IF ~~ THEN DO ~RestParty()~ EXIT
COROM\DLG\P#CORLT.D(4347): IF ~~ THEN DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(510): ++ @213 DO ~SetGlobal("X#DynaDance","GLOBAL",1) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(513): + ~OR(2) Class(Player1,MAGE_ALL) Class(Player1,BARD_ALL)~ + @216 DO ~SetGlobal("X#DynaDance","GLOBAL",1) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(521): ++ @221 DO ~SetGlobal("X#DynaDance","GLOBAL",1) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(529): ++ @226 DO ~SetGlobal("X#DynaDance","GLOBAL",1) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(530): ++ @227 DO ~SetGlobal("X#DynaDance","GLOBAL",1) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(535): IF ~~ THEN DO ~SetGlobal("X#DynaDance","GLOBAL",1) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(587): ++ @253 DO ~SetGlobal("X#DynaDance","GLOBAL",1) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(605): IF ~~ THEN DO ~SetGlobal("X#DynaDance","GLOBAL",2) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(611): IF ~~ THEN DO ~SetGlobal("X#DynaDance","GLOBAL",2) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(616): IF ~~ DO ~SetGlobal("X#DynaDance","GLOBAL",1) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(1654): ++ @692 DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(1655): ++ @693 DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(1660): IF ~~ THEN DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(1667): IF ~~ THEN DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(1673): IF ~~ THEN DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(1681): IF ~~ THEN DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(1686): IF ~~ THEN DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(2106): ++ @858 DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(2114): ++ @858 DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(2122): ++ @858 DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(2135): ++ @858 DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3167): ++ @1326 DO ~SetGlobal("X#DYLovetalk","GLOBAL",39) RealSetGlobalTimer("X#DYLoveTalkTime","GLOBAL",DYROM_TIMER) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3207): IF ~~ THEN DO ~SetGlobal("X#DynaheirLover","GLOBAL",1) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3212): IF ~~ THEN DO ~SetGlobal("X#DynaheirLover","GLOBAL",2) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3236): IF ~~ THEN DO ~SetGlobal("X#DynaheirRomanceInactive","GLOBAL",1) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3608): ++ @1509 DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3611): ++ @1512 DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3617): ++ @1509 DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3620): ++ @1512 DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3646): ++ @1509 DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3649): ++ @1512 DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3654): ++ @1509 DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3661): ++ @1509 DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3668): ++ @1509 DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3675): ++ @1509 DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3682): IF ~OR(2) Race(Player1,ELF) Race(Player1,HALF_ELF)~ THEN DO ~GiveItemCreate("X#DYPORE",Player1,1,0,0) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3683): IF ~Race(Player1,HALFORC)~ THEN DO ~GiveItemCreate("X#DYPORO",Player1,1,0,0) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3684): IF ~Race(Player1,HUMAN) OR(3) Class(Player1,FIGHTER_ALL) Class(Player1,RANGER_ALL) Class(Player1,PALADIN_ALL) ~ THEN DO ~GiveItemCreate("X#DYPORF",Player1,1,0,0) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3685): IF ~Race(Player1,HUMAN) !Class(Player1,FIGHTER_ALL) !Class(Player1,RANGER_ALL) !Class(Player1,PALADIN_ALL) ~ THEN DO ~GiveItemCreate("X#DYPORR",Player1,1,0,0) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3690): IF ~OR(2) Race(Player1,ELF) Race(Player1,HALF_ELF)~ THEN DO ~GiveItemCreate("X#DYPORE",Player1,1,0,0) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3691): IF ~Race(Player1,HALFORC)~ THEN DO ~GiveItemCreate("X#DYPORO",Player1,1,0,0) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3692): IF ~Race(Player1,HUMAN) OR(3) Class(Player1,FIGHTER_ALL) Class(Player1,RANGER_ALL) Class(Player1,PALADIN_ALL) ~ THEN DO ~GiveItemCreate("X#DYPORF",Player1,1,0,0) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3693): IF ~Race(Player1,HUMAN) !Class(Player1,FIGHTER_ALL) !Class(Player1,RANGER_ALL) !Class(Player1,PALADIN_ALL) ~ THEN DO ~GiveItemCreate("X#DYPORR",Player1,1,0,0) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3700): IF ~OR(2) Race(Player1,ELF) Race(Player1,HALF_ELF)~ THEN DO ~GiveItemCreate("X#DYPORE",Player1,1,0,0) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3701): IF ~Race(Player1,HALFORC)~ THEN DO ~GiveItemCreate("X#DYPORO",Player1,1,0,0) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3702): IF ~Race(Player1,HUMAN) OR(3) Class(Player1,FIGHTER_ALL) Class(Player1,RANGER_ALL) Class(Player1,PALADIN_ALL)~ THEN DO ~GiveItemCreate("X#DYPORF",Player1,1,0,0) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3703): IF ~Race(Player1,HUMAN) !Class(Player1,FIGHTER_ALL) !Class(Player1,RANGER_ALL) !Class(Player1,PALADIN_ALL)~ THEN DO ~GiveItemCreate("X#DYPORR",Player1,1,0,0) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3783): ++ @1573 DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3794): ++ @1576 DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3828): IF ~~ THEN DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3834): + ~CheckStatGT(Player1,12,CON)~ + @1591 DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3835): + ~CheckStatLT(Player1,13,CON)~ + @1591 DO ~SetGlobal("X#DYMagicItem","GLOBAL",1) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3836): ++ @1592 DO ~SetGlobal("X#DYMagicItem","GLOBAL",1)RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3842): + ~CheckStatGT(Player1,12,CON)~ + @1591 DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3843): + ~CheckStatLT(Player1,13,CON)~ + @1591 DO ~SetGlobal("X#DYMagicItem","GLOBAL",1) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3844): ++ @1592 DO ~SetGlobal("X#DYMagicItem","GLOBAL",1) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3849): + ~CheckStatGT(Player1,12,CON)~ + @1591 DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3850): + ~CheckStatLT(Player1,13,CON)~ + @1591 DO ~SetGlobal("X#DYMagicItem","GLOBAL",1) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3851): ++ @1592 DO ~SetGlobal("X#DYMagicItem","GLOBAL",1) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3858): + ~CheckStatGT(Player1,12,CON)~ + @1591 DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3859): + ~CheckStatLT(Player1,13,CON)~ + @1591 DO ~SetGlobal("X#DYMagicItem","GLOBAL",1) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3860): ++ @1592 DO ~SetGlobal("X#DYMagicItem","GLOBAL",1) RestParty()~ EXIT
DYROM\DLG\X#DYRO.D(3866): IF ~~ THEN DO ~RestParty()~ EXIT
DYROM\DLG\X#DYRONPC.D(15): DO ~RestParty()~
PID\X#PCINIT.D(5547): ++ @1410 DO ~RestParty()~ EXIT
PID\X#PCINIT.D(13480): ++ @3421 DO ~RestParty()~ EXIT
PID\X#PCINIT.D(13487): IF ~~ THEN DO ~RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(18): IF ~~ THEN DO ~SetGlobal("X#SharInterest","GLOBAL",3) RestParty()~
SHROM\DLG\X#SHROM.D(40): IF ~~ THEN DO ~ RestParty()~
SHROM\DLG\X#SHROM.D(48): IF ~~ THEN DO ~ RestParty()~
SHROM\DLG\X#SHROM.D(72): IF ~~ THEN DO ~ RestParty()~
SHROM\DLG\X#SHROM.D(78): ++ @27 DO ~ RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(80): ++ @29 DO ~SetGlobal("X#SharInterest","GLOBAL",3) RestParty()~
SHROM\DLG\X#SHROM.D(86): ++ @27 DO ~ RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(88): ++ @32 DO ~SetGlobal("X#SharInterest","GLOBAL",3) RestParty()~
SHROM\DLG\X#SHROM.D(94): IF ~~ THEN DO ~RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(99): IF ~~ THEN DO ~RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(119): IF ~~ THEN DO ~RestParty() SetGlobal("ShartSex","GLOBAL",1)~ EXIT
SHROM\DLG\X#SHROM.D(124): ++ @27 DO ~ RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(126): ++ @32 DO ~SetGlobal("X#SharInterest","GLOBAL",3) RestParty()~
SHROM\DLG\X#SHROM.D(132): IF ~~ THEN DO ~RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(137): IF ~~ THEN DO ~RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(540): IF ~~ THEN DO ~ActionOverride(Player1,ApplyDamagePercent(Player1,5,CRUSHING)) SetGlobal("X#SharInterest","GLOBAL",3) RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(554): ++ @211 DO ~RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(559): IF ~~ THEN DO ~RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(564): IF ~~ THEN DO ~ SetGlobal("X#SharInterest","GLOBAL",3) RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(570): ++ @216 DO ~ SetGlobal("X#SharInterest","GLOBAL",3) RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(584): IF ~~ THEN DO ~RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(1305): ++ @490 DO ~RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(1310): IF ~~ THEN DO ~IncrementGlobal("X#SharKind","GLOBAL",-1) RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(1324): ++ @497 DO ~RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(1330): IF ~~ THEN DO ~ RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(1343): ++ @505 DO ~RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(1351): IF ~~ THEN DO ~ RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(1356): IF ~~ THEN DO ~ RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(1361): IF ~~ THEN DO ~ IncrementGlobal("X#SharKind","GLOBAL",-5) RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(1366): IF ~~ THEN DO ~ SetGlobal("X#SharInterest","GLOBAL",3) RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(1371): IF ~~ THEN DO ~ SetGlobal("X#SharInterest","GLOBAL",3) RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(1376): ++ @515 DO ~RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(1398): ++ @527 DO ~IncrementGlobal("X#SharKind","GLOBAL", 2) RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(1843): IF ~~ THEN DO ~RestParty() ~
SHROM\DLG\X#SHROM.D(1849): IF ~~ THEN DO ~RestParty() ~
SHROM\DLG\X#SHROM.D(1861): IF ~~ THEN DO ~IncrementGlobal("X#SharKind","GLOBAL",1) RestParty() ~
SHROM\DLG\X#SHROM.D(1933): IF ~~ THEN DO ~IncrementGlobal("X#SharKind","GLOBAL",-1) RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(1938): IF ~~ THEN DO ~SetGlobal("X#SharInterest","GLOBAL",3) GivePartyGold(-100000) ActionOverride(Player1,ApplyDamagePercent(Player1,50,CRUSHING)) LeaveParty() EscapeArea() RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(1943): IF ~~ THEN DO ~IncrementGlobal("X#SharKind","GLOBAL",-1) RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(1948): IF ~~ THEN DO ~SetGlobal("X#SharInterest","GLOBAL",3) GivePartyGold(-100000) ActionOverride(Player1,ApplyDamagePercent(Player1,50,CRUSHING)) LeaveParty() EscapeArea() RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(1953): IF ~~ THEN DO ~IncrementGlobal("X#SharKind","GLOBAL",-1) RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(1958): IF ~~ THEN DO ~SetGlobal("X#SharInterest","GLOBAL",3) GivePartyGold(-100000) ActionOverride(Player1,ApplyDamagePercent(Player1,50,CRUSHING)) LeaveParty() EscapeArea() RestParty() ~ EXIT
SHROM\DLG\X#SHROM.D(1963): IF ~~ THEN DO ~IncrementGlobal("X#SharKind","GLOBAL",-3) RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(1973): IF ~~ THEN DO ~ RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(1978): IF ~~ THEN DO ~SetGlobal("X#SharInterest","GLOBAL",3) GivePartyGold(-100000) ActionOverride(Player1,ApplyDamagePercent(Player1,50,CRUSHING)) LeaveParty() EscapeArea() RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(1983): IF ~~ THEN DO ~IncrementGlobal("X#SharKind","GLOBAL",-1) RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(2498): ++ @951 DO ~SetGlobal("X#SharRing","GLOBAL",3) RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(2503): IF ~~ THEN DO ~SetGlobal("X#SharRing","GLOBAL",3) RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(2508): IF ~~ THEN DO ~SetGlobal("X#SharRing","GLOBAL",3) RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(2513): IF ~~ THEN DO ~SetGlobal("X#SharRing","GLOBAL",3) RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(2519): ++ @956 DO ~TakePartyItem("%tutu_var%RING15") DestroyItem("%tutu_var%RING15") RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(2524): IF ~~ THEN DO ~SetGlobal("X#SharRing","GLOBAL",3) RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(2574): ++ @980 DO ~RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(2580): ++ @983 DO ~RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(2587): ++ @983 DO ~RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(2594): ++ @987 DO ~RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(2607): ++ @983 DO ~RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(2614): IF ~~ THEN DO ~LeaveParty() EscapeArea() RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(2629): ++ @983 DO ~RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(2635): IF ~~ THEN DO ~RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(2640): ++ @983 DO ~RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(2648): ++ @1006 DO ~RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(2655): IF ~~ THEN DO ~RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(2661): ++ @1006 DO ~RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(2673): IF ~~ THEN DO ~RestParty()~ EXIT
SHROM\DLG\X#SHROM.D(3264): IF ~~ THEN DO ~RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(462): IF ~~ THEN DO ~SetGlobal("X#XARomanceInactive","GLOBAL",1) RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(492): IF ~~ THEN DO ~RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(497): IF ~~ THEN DO ~SetGlobal("X#XARomanceInactive","GLOBAL",1) RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(502): IF ~~ THEN DO ~RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(514): IF ~~ THEN DO ~RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(519): IF ~~ THEN DO ~RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(524): IF ~~ THEN DO ~RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(1108): IF ~~ THEN DO ~SetGlobal("X#XARomanceInactive","GLOBAL",1) LeaveParty() EscapeArea() RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(1147): IF ~~ THEN DO ~RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(1803): IF ~~ THEN DO ~SetGlobal("X#XARomanceInactive","GLOBAL",1) RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(1808): IF ~~ THEN DO ~RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(1829): IF ~~ THEN DO ~RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(1834): IF ~~ THEN DO ~RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(1856): IF ~~ THEN DO ~RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(1862): IF ~~ THEN DO ~RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(1945): IF ~~ THEN DO ~SetGlobal("X#XanLover","GLOBAL",0) RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(1950): IF ~~ THEN DO ~SetGlobal("X#XARomanceInactive","GLOBAL",1) LeaveParty() EscapeArea() RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(1955): IF ~~ THEN DO ~SetGlobal("X#XanLover","GLOBAL",1) RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(2397): IF ~~ THEN DO ~RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(2402): IF ~~ THEN DO ~RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(2414): IF ~~ THEN DO ~RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(2419): IF ~~ THEN DO ~RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(2424): IF ~~ THEN DO ~RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(2497): IF ~~ THEN DO ~RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(2502): IF ~~ THEN DO ~RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(2507): IF ~~ THEN DO ~RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(3148): IF ~~ THEN DO ~RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(3185): IF ~~ THEN DO ~RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(3190): IF ~~ THEN DO ~RestParty() SetGlobal("X#XARomanceInactive","GLOBAL",1)~ EXIT
XAROM\DLG\X#XANLT.D(3227): IF ~~ THEN DO ~RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(3267): IF ~~ THEN DO ~RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(3299): IF ~~ THEN DO ~RestParty() SetGlobal("X#XanLover","GLOBAL",1) SetGlobal("X#XanFl3Lover","GLOBAL",1)~ EXIT
XAROM\DLG\X#XANLT.D(3552): ++ @1113 DO ~SetGlobal("X#XAAjantisBreak","GLOBAL",2) SetGlobal("X#XaRomanceInactive","GLOBAL",1) RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(3553): ++ @1114 DO ~SetGlobal("X#XAAjantisBreak","GLOBAL",2) SetGlobal("X#AjantisRomanceActive","GLOBAL",3) RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(3554): ++ @1115 DO ~SetGlobal("X#XAAjantisBreak","GLOBAL",2) SetGlobal("X#AjantisRomanceActive","GLOBAL",3) SetGlobal("X#XaRomanceInactive","GLOBAL",1) RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(3559): ++ @1117 DO ~SetGlobal("X#XACoranBreak","GLOBAL",2) SetGlobal("X#XaRomanceInactive","GLOBAL",1) RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(3560): ++ @1118 DO ~SetGlobal("X#XACoranBreak","GLOBAL",2) SetGlobal("CoranRomanceInactive","GLOBAL",1) RestParty()~ EXIT
XAROM\DLG\X#XANLT.D(3561): ++ @1119 DO ~SetGlobal("X#XACoranBreak","GLOBAL",2) SetGlobal("X#XaRomanceInactive","GLOBAL",1) SetGlobal("CoranRomanceInactive","GLOBAL",1) RestParty()~ EXIT
Found 380 occurrence(s) in 11 file(s)
[/size]
« Last Edit: July 09, 2007, 12:09:02 PM by cmorgan »

Offline berelinde

  • Planewalker
  • *****
  • Posts: 1188
  • Gender: Female
    • Gavin, cleric of Lathander, for Tutu
Re: Two dream talks at once: can we do anything about this?
« Reply #4 on: July 09, 2007, 12:00:01 PM »
Doesn't do a darned thing for BG2, though. Could get sticky, especially with the possibilities of multi-romancing and RE night encounters.

Offline cmorgan

  • Planewalker
  • *****
  • Posts: 1417
  • Gender: Male
  • Searcher of Bugs
Re: Two dream talks at once: can we do anything about this?
« Reply #5 on: July 09, 2007, 12:06:18 PM »
Does this not work for regualr BG2 materials? I am sorry - I am a little slow thins morning. Is it that these dream timers are not working, or is it that most mods don't use them on BG2?

Offline Kulyok

  • Global Moderator
  • Planewalker
  • *****
  • Posts: 6233
  • Gender: Female
  • The perfect moment is now.
Re: Two dream talks at once: can we do anything about this?
« Reply #6 on: July 09, 2007, 12:11:03 PM »
RE: cmorgan
Most mods don't use them.


Yes, it could be unpleasant. I think the mechanism works approximately like this: every time a RestParty() is called(at the end of a rest banter, for example, or by the player pressing the button "Rest"), all dream scripts are checked for actions to be performed, including Player1d.bcs.

So the irony of it all is that a solution may be to... et rid of "RestParty" in a dream banter somehow? But that would, well, suck.

A BG2 Tweak component that would search all dream scripts(scripts in pdialog.2da, player1d.bcs) for IF's that have StartDialogueNoSet/Interact/Dialogue/StartDialogNoSet, and replace IF  with
IF
RealGlobalTimerExpired("DreamTalk","GLOBAL")

and RESPONSE #100 with
RESPONSE #100
RealSetGlobalTimer("DreamTalk","GLOBAL",180)

and add a block that would set the timer to each dream script - I think this may sound like a solution.

Offline Kulyok

  • Global Moderator
  • Planewalker
  • *****
  • Posts: 6233
  • Gender: Female
  • The perfect moment is now.
Re: Two dream talks at once: can we do anything about this?
« Reply #7 on: July 09, 2007, 12:11:56 PM »
Quote
I can add them, n problem, or you can - I think probably it will be quicker if you do. I am currently searching for the Rest() and RestParty() actions, and tracing them back to the relevant triggers, but you might be faster. Let me see what i can do with a mass search of the Phase3 materials:

BG1 NPC Project? I wouldn't mind if you do, thanks. :)

Offline berelinde

  • Planewalker
  • *****
  • Posts: 1188
  • Gender: Female
    • Gavin, cleric of Lathander, for Tutu
Re: Two dream talks at once: can we do anything about this?
« Reply #8 on: July 09, 2007, 12:16:32 PM »
Problem with replacing the text is that you can't do it selectively. For mods that already have it, you'd risk duplicating it in the file.

Offline cmorgan

  • Planewalker
  • *****
  • Posts: 1417
  • Gender: Male
  • Searcher of Bugs
Re: Two dream talks at once: can we do anything about this?
« Reply #9 on: July 09, 2007, 12:18:48 PM »
OK, I am putting it on the list for ASAP (right after I get some final creatures and items buillt for the last two quests).

I think a call to devSin, Nythrun, and CamDawg is the best bet on this idea - it looks possible, but I do not trust my so-far-failed attempts at patch building to do this correctly, especially the regexp and replace behavior. There should be a way of doing it (and I think even if it patches over itself accidentally, or picks up BG2 content that already includes this timer [it would be stuff by you, me, or berelinde, anyways, probably], if two or more instances of TimerExpired/etc with identical conditions will be met, so it should be a relatively non-invasive addition )

Offline Kulyok

  • Global Moderator
  • Planewalker
  • *****
  • Posts: 6233
  • Gender: Female
  • The perfect moment is now.
Re: Two dream talks at once: can we do anything about this?
« Reply #10 on: July 09, 2007, 12:34:42 PM »
Quote
Problem with replacing the text is that you can't do it selectively. For mods that already have it, you'd risk duplicating it in the file.

Not if it a unique prefixed timer, say, G3_DreamBanterTimer, it won't be duplicated. But, yes, I think a call to our high-tech experts is in order - if they don't see this thread today or tomorrow themselves, that is. :)

Offline SimDing0

  • Back In Black
  • Global Moderator
  • Planewalker
  • *****
  • Posts: 3496
  • Gender: Male
  • Word Enhancer
Re: Two dream talks at once: can we do anything about this?
« Reply #11 on: July 09, 2007, 12:35:47 PM »
Yeh, that's a decent way of doing it. (Look at Virtue for some really shit examples of patching scripts like this.)

If you want to avoid dicking around with everyone's dream scripts, you might also try EXTEND_TOP something in the vein of:

IF
    GlobalTimerNotExpired("dream","GLOBAL")
THEN
    RESPONSE #100
END

IF
    !GlobalTimerNotExpired("dream","GLOBAL")
THEN
    RESPONSE #100
        SetGlobalTimer("dream","GLOBAL",180)
        Continue()
END

Which might work. I prefer your method.

Offline berelinde

  • Planewalker
  • *****
  • Posts: 1188
  • Gender: Female
    • Gavin, cleric of Lathander, for Tutu
Re: Two dream talks at once: can we do anything about this?
« Reply #12 on: July 09, 2007, 01:11:11 PM »
Just let me know what you're going to do, so I can keep Gavin in compliance. :)

Offline Kulyok

  • Global Moderator
  • Planewalker
  • *****
  • Posts: 6233
  • Gender: Female
  • The perfect moment is now.
Re: Two dream talks at once: can we do anything about this?
« Reply #13 on: July 09, 2007, 02:24:03 PM »
I think you could either safely proceed with Gavin a-la other mod NPCs and hope that a tweak will be added to all mods eventually, or introduce your own timer for your dream talks. For Xan's BG2 dream talks, I have been able to separate them within the mod, but, obviously, when other mods come into picture, well.

Quote
If you want to avoid dicking around with everyone's dream scripts, you might also try EXTEND_TOP something in the vein of:

I've just tested it: unfortunately, the answer is no.

I've looked at Virtue, and it has a some good stuff. Could something like this work, then?

COPY_EXISTING_REGEXP GLOB ~.*[dD]\.bcs~ ~override~
DECOMPILE_BCS_TO_BAF
REPLACE_TEXTUALLY ~IF~ ~IF
GlobalTimerExpired("o#dream","GLOBAL")~
REPLACE_TEXTUALLY ~THEN~ ~THEN
RealSetGlobalTimer("o#dream","GLOBAL",180)~
...

- and EXTENDing_TOP player1d.baf with
Code: [Select]
IF
InParty(Myself)
Global("o#dreamstarted","GLOBAL",0)
THEN
RESPONSE #100
RealSetGlobalTimer("o#dream","GLOBAL",180)
SetGlobal("o#dreamstarted","GLOBAL",1)
END

Offline Kulyok

  • Global Moderator
  • Planewalker
  • *****
  • Posts: 6233
  • Gender: Female
  • The perfect moment is now.
Re: Two dream talks at once: can we do anything about this?
« Reply #14 on: July 09, 2007, 02:36:45 PM »
Ah. Whoops. "Ribald.bcs" wasn't in the picture. Now, how to get these filenames from pdialog.2da...

Offline SimDing0

  • Back In Black
  • Global Moderator
  • Planewalker
  • *****
  • Posts: 3496
  • Gender: Male
  • Word Enhancer
Re: Two dream talks at once: can we do anything about this?
« Reply #15 on: July 10, 2007, 04:13:54 PM »
COPY_EXISTING_REGEXP GLOB ~.*[dD]\.bcs~ ~override~
You're matching way more than just dream scripts there--anything ending in D. Read the script filenames from pdialog.2da.

Offline SimDing0

  • Back In Black
  • Global Moderator
  • Planewalker
  • *****
  • Posts: 3496
  • Gender: Male
  • Word Enhancer
Re: Two dream talks at once: can we do anything about this?
« Reply #16 on: July 10, 2007, 04:14:31 PM »
Quote
Ah. Whoops. "Ribald.bcs" wasn't in the picture. Now, how to get these filenames from pdialog.2da...
Oh.

Offline cmorgan

  • Planewalker
  • *****
  • Posts: 1417
  • Gender: Male
  • Searcher of Bugs
Re: Two dream talks at once: can we do anything about this?
« Reply #17 on: July 10, 2007, 06:13:38 PM »
Yeah, unless we do a "hardcoded" list, the regexp is going to require someone with serious skillz, and still runs into the problem of mod added stuff. I think for now the only way we can do this is to add it to all standard dudes/dudettes and the specific non-joinables we mess with.

BG2 is a *lot* more difficult to mod for than Tutu. We don't have as much overlap, and take up lots of the airspace there with one or two mods.

Offline SimDing0

  • Back In Black
  • Global Moderator
  • Planewalker
  • *****
  • Posts: 3496
  • Gender: Male
  • Word Enhancer
Re: Two dream talks at once: can we do anything about this?
« Reply #18 on: July 10, 2007, 06:38:32 PM »
No, the pdialog thing will work. Virtue might have an example of this sort of thing too (to automatically apply itself to all mod NPCs), but if I didn't get round to uploading that version you're going to have to venture into biggland for a demo. (He showed me the technique anyway.)

Offline Kulyok

  • Global Moderator
  • Planewalker
  • *****
  • Posts: 6233
  • Gender: Female
  • The perfect moment is now.
Re: Two dream talks at once: can we do anything about this?
« Reply #19 on: July 11, 2007, 12:45:02 AM »
Yes, virtue I have here is version 18(does it work as a pun? thought not), so it doesn't have it. Maybe you'll just upload it quickly? :) But, okay, okay, biggland it is...

Offline Kulyok

  • Global Moderator
  • Planewalker
  • *****
  • Posts: 6233
  • Gender: Female
  • The perfect moment is now.
Re: Two dream talks at once: can we do anything about this?
« Reply #20 on: July 11, 2007, 07:16:32 AM »
Okay, found the code. It doesn't sound impossible, though it might take some reading/adapting:

Code: [Select]
COPY_EXISTING_REGEXP GLOB ~^.*\.cre$~ ~override~
  READ_ASCII 0x280 deathvariable
  READ_BYTE  0x280 check
  READ_ASCII 0x248 script
  READ_BYTE  0x27b align
  READ_LONG  0x1cc biography
  SPRINT s_r ~%SOURCE_RES%~
  PATCH_IF FILE_CONTAINS_EVALUATED (~override/pdialog.2da~ ~^%deathvariable%[ \t]~) AND // if it's an NPC
    check != 0  AND NOT (("%biography%" > 2147483646) OR ("%biography%" < 1)) BEGIN // and the DV is nonempty
    SPRINT ~pdialogue~ ~void_this_is_void~ // useful to catch missing *p file from the 2da
    // read all pre-read lines in pdialog and find the one with this DV. find out the SoA *p dialogue
    // (the TOB *P dialogue doesn't matter).
    FOR (i = 1; i < _#_#_#pdialog; i+=1) BEGIN // skip the first line, AKA the one with the headers
      READ_2DA_ENTRY_FORMER ~_#_#_#pdialog~ i 0 thisline
      PATCH_IF !(~%thisline%~ STRING_COMPARE_CASE ~%deathvariable%~) BEGIN
        READ_2DA_ENTRY_FORMER ~_#_#_#pdialog~ i 1 pdialogue
        // R_2_E_F this one manually because SOMEBODY (KULYOK) CAN'T APPEND PROPERLY TO THE 2DA
        //READ_2DA_ENTRY_FORMER ~_#_#_#pdialog~ i 7 tobscript
        SPRINT tobscript ~_#_#_#pdialog_%i%_7~
        SPRINT ~tobscript~ EVALUATE_BUFFER ~%%tobscript%%~
        SPRINT tobpdial ~_#_#_#pdialog_%i%_4~
        SPRINT ~tobpdial~ EVALUATE_BUFFER ~%%tobpdial%%~
//         PATCH_PRINT ~%tobscript%~
      END
    END
    PATCH_IF (NOT FILE_CONTAINS_EVALUATED (~virtue/donescript~ ~^%script% -~)) BEGIN
                                                      //I didn't already deal with this script
//       PATCH_PRINT ~%s_r% SoA script~
      INNER_ACTION BEGIN
        APPEND_OUTER ~virtue/donescript~ ~%script% -~ // add this to the log!
        COPY - ~virtue/bg2/npcs/ET_GENER.BAF~ ~virtue/temp/this_et.baf~ // prepare a virtual copy of the generic script
          REPLACE_TEXTUALLY ~___NPC___~ ~%deathvariable%~ // ... which references our NPC DV.

        EXTEND_TOP ~%script%.bcs~ ~virtue/temp/this_et.baf~ // and append it to the current NPC script
      END
    END

By the way, can there be an NPC with a null biography? If someone assigns it later via script/hotkey/whatever? What to do in this case?

Offline cmorgan

  • Planewalker
  • *****
  • Posts: 1417
  • Gender: Male
  • Searcher of Bugs
Re: Two dream talks at once: can we do anything about this?
« Reply #21 on: July 11, 2007, 08:59:42 AM »
OK, I almost got some of hat - I am going to have to reread that a bunch of times.

There should not be a current NPC that uses a null reference for biography, but there probably will be in the future. The only way to avoid problems with an NPC matching different instalss is to completely blank the .cre and add all soundest and assigned information afterwards, including BIO or EXISTENCE5 (I think...).
 
but all this doesn't matter to this codeblock, because if the NPC is installed, the biography would have already run. I have not seen/studied any mods which begin with a null reference and then assign BIO with a dynamically changing biography string.

(Hey- cool idea. Hard to implement in terms of writing and heavy additions, but a dynamic biogtraphy using the stringfixer code to reset just that section of the soundset to a new cumulative Biography? wow.... cool.      Too much work for somethig most folks ignore.)

Offline Kulyok

  • Global Moderator
  • Planewalker
  • *****
  • Posts: 6233
  • Gender: Female
  • The perfect moment is now.
Re: Two dream talks at once: can we do anything about this?
« Reply #22 on: July 11, 2007, 09:24:06 AM »
Quote
but all this doesn't matter to this codeblock, because if the NPC is installed, the biography would have already run.

Not if it is set this way:
Code: [Select]
IF
Global("Condition","GLOBAL",1)
Global("Biography","GLOBAL",0)
THEN
RESPONSE #100
SetGlobal("Biography","GLOBAL",1)
SetPlayerSound(Myself,@999,EXISTANCE5)
END

Quote
(Hey- cool idea. Hard to implement in terms of writing and heavy additions, but a dynamic biogtraphy using the stringfixer code to reset just that section of the soundset to a new cumulative Biography? wow.... cool.      Too much work for somethig most folks ignore.)

It's five minutes' work, and both Keto and Xan use it.

Offline cmorgan

  • Planewalker
  • *****
  • Posts: 1417
  • Gender: Male
  • Searcher of Bugs
Re: Two dream talks at once: can we do anything about this?
« Reply #23 on: July 11, 2007, 10:48:34 AM »
I have missed this? Darn it... ok, I need to go back and restudy them.

The work I was talking about, though, wasn't the scripting. It was the hundreds of cumulative entries to build for each biography you want to alter. Depending on the level of detail, of course.

I just *knew* I hadn't come up with a new idea ...

Offline Kulyok

  • Global Moderator
  • Planewalker
  • *****
  • Posts: 6233
  • Gender: Female
  • The perfect moment is now.
Re: Two dream talks at once: can we do anything about this?
« Reply #24 on: July 12, 2007, 07:53:47 AM »
Quote
// R_2_E_F this one manually because SOMEBODY (KULYOK) CAN'T APPEND PROPERLY TO THE 2DA

By the way, does anybody remember what's wrong with Xan's/Tiax' 2da appending? Or was it back from Xan SoA-only days, with their "Thou shalt not create Xan ToB?"

(I mean, I could, like, correct it or something?)

 

With Quick-Reply you can write a post when viewing a topic without loading a new page. You can still use bulletin board code and smileys as you would in a normal post.

Warning: this topic has not been posted in for at least 120 days.
Unless you're sure you want to reply, please consider starting a new topic.

Name: Email:
Verification:
Type the letters shown in the picture
Listen to the letters / Request another image
Type the letters shown in the picture:
What color is grass?:
What is the seventh word in this sentence?:
What is five minus two (use the full word)?: