Jump to content

Activating ToB Epilogues: Determining and Forcing Player Choice


cmorgan

Recommended Posts

So, way back in time, I did a stupid thing. Fun, glorious, but stupid. I introduced a whole bunch of epilogues that reflected player choice.

This sounds wonderful for players, but for modders, this is hell. There is a reason most game companies keep small numbers of potential pathways and choices in the game - it becomes a seriously complicated affair keeping track of players and what they are going to do. So let's look at how to build out a set of choice points that allow folks to progress on this storyline and not get all messed up and tangled up with unanticipated outcomes (AKA "bugs").

Right now, for the player epilogues PCs are supposed to be able to access the following things, already in-game and tested:


In order of evaluation:
////////////////////////////////////////////////////////
/////* PC Accepts Godhood Potential Endings : DLG */////
////////////////////////////////////////////////////////

/* PC Accepted Godhood, Friendship, Good/Neutral */
Global("PlayerChoseEssence","GLOBAL",1)
!Global("c-aranrom","GLOBAL",2)
!GlobalGT("PPEvilChoices","GLOBAL",2) // PC chose good or neutral

/* PC Accepted Godhood, Friendship, Evil */
Global("PlayerChoseEssence","GLOBAL",1)
!Global("c-aranrom","GLOBAL",2)
GlobalGT("PPEvilChoices","GLOBAL",2) // PC chose evil

/* PC Accepted Godhood, Romance, Good/Neutral */
Global("PlayerChoseEssence","GLOBAL",1)
Global("c-aranrom","GLOBAL",2)
!GlobalGT("PPEvilChoices","GLOBAL",2) // PC chose good or neutral

/* PC Accepted Godhood, Romance, Evil */
Global("PlayerChoseEssence","GLOBAL",1)
Global("c-aranrom","GLOBAL",2)
GlobalGT("PPEvilChoices","GLOBAL",2) // PC chose evil

All of these are screened by Global("PlayerChoseEssence","GLOBAL",1) , so if PC chose godhood, only these can play. These work now, with no more effort.

Now comes the tricky part.

 /* EPILOGUE VARS if PC does not accept godhood
 * Global("c-aranrom","GLOBAL",2) in romance | !Global("c-aranrom","GLOBAL",2) not in romance
 * IF !Global("c-aranrom","GLOBAL",2) !Alignment(Player1,MASK_EVIL) = good/neutral friend
 * IF !Global("c-aranrom","GLOBAL",2) Alignment(Player1,MASK_EVIL) = evil friend
 * Global("c-aranepiloguefriend","GLOBAL",0)     
 * // 0 = alignment check only, 1 = friends but part ways, 2 = Adventurers Forever, 3 = City Forever, 4 = Country Forever
 * ALL ROM CONDITIONS (must at least set c-aranepiloguerelation and c-aranepiloguelifestyle above 0 or no epilogue will return true...)
 * Global("c-aranepiloguemarried","GLOBAL",0)    // 0 or 1
 * Global("c-aranepiloguechildren","GLOBAL",0)    // 0 or 1
 * Global("c-aranepiloguerelation","GLOBAL",0)    // 1 = AranPrince, 2 = PCPrincess, 3 = Equals
 * Global("c-aranepiloguelifestyle","GLOBAL",0)    // 1 = Adventuring, 2 = City, 3 = Country
*/

And the grid of endings:

////////////////////////////////////////////////////////
/////* PC Refuses Godhood Potential Endings : DLG */////
////////////////////////////////////////////////////////

/* PC Refused Godhood, All PCs, Friendship, Good/Neutral : Global("c-aranepiloguefriend","GLOBAL",0) !Alignment(Player1,MASK_EVIL) */

/* PC Refused Godhood, All PCs, Friendship, Evil : Global("c-aranepiloguefriend","GLOBAL",0) Alignment(Player1,MASK_EVIL) */

/* PC Refused Godhood, All PCs, Friendship and Part Ways : Global("c-aranepiloguefriend","GLOBAL",1) */

/* PC Refused Godhood, Romance, Friendship with Benefits and Part Ways : Global("c-aranepiloguefriend","GLOBAL",1) */

/* PC Refused Godhood, Romance, Friendship with Benefits but Never Part Ways: Adventuring Life : Global("c-aranepiloguefriend","GLOBAL",2) */

/* PC Refused Godhood, Romance, Friendship with Benefits but Never Part Ways: City Life : Global("c-aranepiloguefriend","GLOBAL",3) */

/* PC Refused Godhood, Romance, Friendship with Benefits but Never Part Ways: Country Life : Global("c-aranepiloguefriend","GLOBAL",4) */

/* PC Refused Godhood, Romance, Not Married With No Children, Aran as Prince Charming : Adventuring Life :
Global("c-aranepiloguemarried","GLOBAL",0) Global("c-aranepiloguechildren","GLOBAL",0) Global("c-aranepiloguerelation","GLOBAL",1) Global("c-aranepiloguelifestyle","GLOBAL",1) */

/* PC Refused Godhood, Romance, Not Married With No Children, Aran as Prince Charming : City Life :
Global("c-aranepiloguemarried","GLOBAL",0) Global("c-aranepiloguechildren","GLOBAL",0) Global("c-aranepiloguerelation","GLOBAL",1) Global("c-aranepiloguelifestyle","GLOBAL",2) */

/* PC Refused Godhood, Romance, Not Married With No Children, Aran as Prince Charming : Country Life :
Global("c-aranepiloguemarried","GLOBAL",0) Global("c-aranepiloguechildren","GLOBAL",0) Global("c-aranepiloguerelation","GLOBAL",1) Global("c-aranepiloguelifestyle","GLOBAL",3) */

/* PC Refused Godhood, Romance, Not Married With No Children, PC as Prince Charming : Adventuring Life :
Global("c-aranepiloguemarried","GLOBAL",0) Global("c-aranepiloguechildren","GLOBAL",0) Global("c-aranepiloguerelation","GLOBAL",2) Global("c-aranepiloguelifestyle","GLOBAL",1) */

/* PC Refused Godhood, Romance, Not Married With No Children, PC as Prince Charming : City Life :
Global("c-aranepiloguemarried","GLOBAL",0) Global("c-aranepiloguechildren","GLOBAL",0) Global("c-aranepiloguerelation","GLOBAL",2) Global("c-aranepiloguelifestyle","GLOBAL",2) */

/* PC Refused Godhood, Romance, Not Married With No Children, PC as Prince Charming : Country Life :
Global("c-aranepiloguemarried","GLOBAL",0) Global("c-aranepiloguechildren","GLOBAL",0) Global("c-aranepiloguerelation","GLOBAL",2) Global("c-aranepiloguelifestyle","GLOBAL",3) */


/* PC Refused Godhood, Romance, Not Married With No Children, PC and Aran as Equals : Adventuring Life :
Global("c-aranepiloguemarried","GLOBAL",0) Global("c-aranepiloguechildren","GLOBAL",0) Global("c-aranepiloguerelation","GLOBAL",3) Global("c-aranepiloguelifestyle","GLOBAL",1) */

/* PC Refused Godhood, Romance, Not Married With No Children, PC and Aran as Equals : City Life :
Global("c-aranepiloguemarried","GLOBAL",0) Global("c-aranepiloguechildren","GLOBAL",0) Global("c-aranepiloguerelation","GLOBAL",3) Global("c-aranepiloguelifestyle","GLOBAL",2) */

/* PC Refused Godhood, Romance, Not Married With No Children, PC and Aran as Equals : Country Life :
Global("c-aranepiloguemarried","GLOBAL",0) Global("c-aranepiloguechildren","GLOBAL",0) Global("c-aranepiloguerelation","GLOBAL",3) Global("c-aranepiloguelifestyle","GLOBAL",3) */

/* PC Refused Godhood, Romance, Not Married With Children, Aran as Prince Charming : Adventuring Life :
Global("c-aranepiloguemarried","GLOBAL",0) Global("c-aranepiloguechildren","GLOBAL",1) Global("c-aranepiloguerelation","GLOBAL",1) Global("c-aranepiloguelifestyle","GLOBAL",1) */

/* PC Refused Godhood, Romance, Not Married With Children, Aran as Prince Charming : City Life : Global("c-aranepiloguemarried","GLOBAL",0) Global("c-aranepiloguechildren","GLOBAL",1) Global("c-aranepiloguerelation","GLOBAL",1) Global("c-aranepiloguelifestyle","GLOBAL",2) */

/* PC Refused Godhood, Romance, Not Married With Children, Aran as Prince Charming : Country Life :
Global("c-aranepiloguemarried","GLOBAL",0) Global("c-aranepiloguechildren","GLOBAL",1) Global("c-aranepiloguerelation","GLOBAL",1) Global("c-aranepiloguelifestyle","GLOBAL",3) */

/* PC Refused Godhood, Romance, Not Married With Children, PC as Prince Charming : Adventuring Life :
Global("c-aranepiloguemarried","GLOBAL",0) Global("c-aranepiloguechildren","GLOBAL",1) Global("c-aranepiloguerelation","GLOBAL",2) Global("c-aranepiloguelifestyle","GLOBAL",1) */

/* PC Refused Godhood, Romance, Not Married With Children, PC as Prince Charming : City Life :
Global("c-aranepiloguemarried","GLOBAL",0) Global("c-aranepiloguechildren","GLOBAL",1) Global("c-aranepiloguerelation","GLOBAL",2) Global("c-aranepiloguelifestyle","GLOBAL",2) */

/* PC Refused Godhood, Romance, Not Married With Children, PC as Prince Charming : Country Life : Global("c-aranepiloguemarried","GLOBAL",0) Global("c-aranepiloguechildren","GLOBAL",1) Global("c-aranepiloguerelation","GLOBAL",2) Global("c-aranepiloguelifestyle","GLOBAL",3) */

/* PC Refused Godhood, Romance, Not Married With Children, PC and Aran as Equals : Adventuring Life :
Global("c-aranepiloguemarried","GLOBAL",0) Global("c-aranepiloguechildren","GLOBAL",1) Global("c-aranepiloguerelation","GLOBAL",3) Global("c-aranepiloguelifestyle","GLOBAL",1) */

/* PC Refused Godhood, Romance, Not Married With Children, PC and Aran as Equals : City Life :
Global("c-aranepiloguemarried","GLOBAL",0) Global("c-aranepiloguechildren","GLOBAL",1) Global("c-aranepiloguerelation","GLOBAL",3) Global("c-aranepiloguelifestyle","GLOBAL",2) */

/* PC Refused Godhood, Romance, Not Married With Children, PC and Aran as Equals : Country Life :
Global("c-aranepiloguemarried","GLOBAL",0) Global("c-aranepiloguechildren","GLOBAL",1) Global("c-aranepiloguerelation","GLOBAL",3) Global("c-aranepiloguelifestyle","GLOBAL",3) */

/* PC Refused Godhood, Romance, Married With No Children, Aran as Prince Charming : Adventuring Life :
Global("c-aranepiloguemarried","GLOBAL",1) Global("c-aranepiloguechildren","GLOBAL",0) Global("c-aranepiloguerelation","GLOBAL",1) Global("c-aranepiloguelifestyle","GLOBAL",1) */

/* PC Refused Godhood, Romance, Married With No Children, Aran as Prince Charming : City Life :
Global("c-aranepiloguemarried","GLOBAL",1) Global("c-aranepiloguechildren","GLOBAL",0) Global("c-aranepiloguerelation","GLOBAL",1) Global("c-aranepiloguelifestyle","GLOBAL",2) */

/* PC Refused Godhood, Romance, Married With No Children, Aran as Prince Charming : Country Life :
Global("c-aranepiloguemarried","GLOBAL",1) Global("c-aranepiloguechildren","GLOBAL",0) Global("c-aranepiloguerelation","GLOBAL",1) Global("c-aranepiloguelifestyle","GLOBAL",3) */

/* PC Refused Godhood, Romance, Married With No Children, PC as Prince Charming : Adventuring Life :
Global("c-aranepiloguemarried","GLOBAL",1) Global("c-aranepiloguechildren","GLOBAL",0) Global("c-aranepiloguerelation","GLOBAL",2) Global("c-aranepiloguelifestyle","GLOBAL",1) */

/* PC Refused Godhood, Romance, Married With No Children, PC as Prince Charming : City Life :
Global("c-aranepiloguemarried","GLOBAL",1) Global("c-aranepiloguechildren","GLOBAL",0) Global("c-aranepiloguerelation","GLOBAL",2) Global("c-aranepiloguelifestyle","GLOBAL",2) */

/* PC Refused Godhood, Romance, Married With No Children, PC as Prince Charming : Country Life :
Global("c-aranepiloguemarried","GLOBAL",1) Global("c-aranepiloguechildren","GLOBAL",0) Global("c-aranepiloguerelation","GLOBAL",2) Global("c-aranepiloguelifestyle","GLOBAL",3) */

/* PC Refused Godhood, Romance, Married With No Children, PC and Aran as Equals : Adventuring Life :
Global("c-aranepiloguemarried","GLOBAL",1) Global("c-aranepiloguechildren","GLOBAL",0) Global("c-aranepiloguerelation","GLOBAL",3) Global("c-aranepiloguelifestyle","GLOBAL",1) */

/* PC Refused Godhood, Romance, Married With No Children, PC and Aran as Equals : City Life :
Global("c-aranepiloguemarried","GLOBAL",1) Global("c-aranepiloguechildren","GLOBAL",0) Global("c-aranepiloguerelation","GLOBAL",3) Global("c-aranepiloguelifestyle","GLOBAL",2) */

/* PC Refused Godhood, Romance, Married With No Children, PC and Aran as Equals : Country Life :
Global("c-aranepiloguemarried","GLOBAL",1) Global("c-aranepiloguechildren","GLOBAL",0) Global("c-aranepiloguerelation","GLOBAL",3) Global("c-aranepiloguelifestyle","GLOBAL",3) */

/* PC Refused Godhood, Romance, Married With Children, Aran as Prince Charming : Adventuring Life :
Global("c-aranepiloguemarried","GLOBAL",1) Global("c-aranepiloguechildren","GLOBAL",1) Global("c-aranepiloguerelation","GLOBAL",1) Global("c-aranepiloguelifestyle","GLOBAL",1) */

/* PC Refused Godhood, Romance, Married With Children, Aran as Prince Charming :
City Life : Global("c-aranepiloguemarried","GLOBAL",1) Global("c-aranepiloguechildren","GLOBAL",1) Global("c-aranepiloguerelation","GLOBAL",1) Global("c-aranepiloguelifestyle","GLOBAL",2) */

/* PC Refused Godhood, Romance, Married With Children, Aran as Prince Charming :
Country Life : Global("c-aranepiloguemarried","GLOBAL",1) Global("c-aranepiloguechildren","GLOBAL",1) Global("c-aranepiloguerelation","GLOBAL",1) Global("c-aranepiloguelifestyle","GLOBAL",3) */

/* PC Refused Godhood, Romance, Married With Children, PC as Prince Charming :
Adventuring Life : Global("c-aranepiloguemarried","GLOBAL",1) Global("c-aranepiloguechildren","GLOBAL",1) Global("c-aranepiloguerelation","GLOBAL",2) Global("c-aranepiloguelifestyle","GLOBAL",1) */

/* PC Refused Godhood, Romance, Married With Children, PC as Prince Charming :
City Life : Global("c-aranepiloguemarried","GLOBAL",1) Global("c-aranepiloguechildren","GLOBAL",1) Global("c-aranepiloguerelation","GLOBAL",2) Global("c-aranepiloguelifestyle","GLOBAL",2) */

/* PC Refused Godhood, Romance, Married With Children, PC as Prince Charming :
Country Life : Global("c-aranepiloguemarried","GLOBAL",1) Global("c-aranepiloguechildren","GLOBAL",1) Global("c-aranepiloguerelation","GLOBAL",2) Global("c-aranepiloguelifestyle","GLOBAL",3) */

/* PC Refused Godhood, Romance, Married With Children, PC and Aran as Equals :
Adventuring Life : Global("c-aranepiloguemarried","GLOBAL",1) Global("c-aranepiloguechildren","GLOBAL",1) Global("c-aranepiloguerelation","GLOBAL",3) Global("c-aranepiloguelifestyle","GLOBAL",1) */

/* PC Refused Godhood, Romance, Married With Children, PC and Aran as Equals :
City Life : Global("c-aranepiloguemarried","GLOBAL",1) Global("c-aranepiloguechildren","GLOBAL",1) Global("c-aranepiloguerelation","GLOBAL",3) Global("c-aranepiloguelifestyle","GLOBAL",2) */

/* PC Refused Godhood, Romance, Married With Children, PC and Aran as Equals :
Country Life : Global("c-aranepiloguemarried","GLOBAL",1) Global("c-aranepiloguechildren","GLOBAL",1) Global("c-aranepiloguerelation","GLOBAL",3) Global("c-aranepiloguelifestyle","GLOBAL",3) */

So.... lots of possibilities. And we have the grid set up nicely and checked. We just have to get from Point A to Point B. Of course, point A is on Mars, and point B is in Sandusky, OH, but where there is a will there is a way...

So for right now, since no variables are set in dialog, the PC comfortably gets access to the Godhood epilogues and the basic friendship epilogues.

What do we have already in the project?
Luckily for aus, a simple state, ready for replacement or expansion, and a sketch of older expected variables to set:

The Basic Block: Marry Me, CHARNAME

First off, it seems simple enough. We want our NPC to "pop the question". The simple, currently in-game setup for Aran in ToB is very straightforward:

Since ToB is short, and most folks doing a romance with Aran have presumably brought him along from SoA, the 3rd lovetalk will suffice. 1 reinforces and rechecks the love relationship, 2 is an awkward attempt to start the whole "yu are more specail and important than anything else", and 3 is the first solid attempt to ask the "marry or not":

/* ToB Love Talk #3 : ask the big question or not */

IF ~Global("c-arantobrom","GLOBAL",5)~ THEN BEGIN c-arantemporary_question
  SAY ~[ARAN] Now, we be supposed to have a big talk here about marriage an' such. But for now, do you think you might marry me someday?~
  ++ ~[PC] Yes!~ DO ~SetGlobal("c-arantobrom","GLOBAL",6) RealSetGlobalTimer("c-aranromtimer","GLOBAL",%ARAN_LTT%)~ + c-aran_exit_temp
  ++ ~[PC] No!~ DO ~SetGlobal("c-arantobrom","GLOBAL",6) RealSetGlobalTimer("c-aranromtimer","GLOBAL",%ARAN_LTT%)~ + c-aran_exit_temp
  ++ ~[PC] Never!!~ DO ~SetGlobal("c-arantobrom","GLOBAL",6) RealSetGlobalTimer("c-aranromtimer","GLOBAL",%ARAN_LTT%)~ + c-aran_exit_temp
END
 
IF ~~ c-aran_exit_temp
  SAY ~[ARAN] Aye then. That be th' way things will be, then. Until I bring it up in th' next talk, that is.~
  IF ~~ THEN EXIT
END

We also have the original "engagement variables" commented in code several places:

// SetGlobal("c-aranengagement","GLOBAL",0) = not asked about marriage
// SetGlobal("c-aranengagement","GLOBAL",1) = delay interested in marriage
// SetGlobal("c-aranengagement","GLOBAL",2) = engaged
// SetGlobal("c-aranengagement","GLOBAL",3) = not engaged but perhaps later
// SetGlobal("c-aranengagement","GLOBAL",4) = not interested in marriage

So obviously the original plan was to have the "Pop the Question" state be able to be delayed, to be accessed via PID, and to influence other talks. But getting these in-game right now means nothing, as no content is filtered through these variables - and we have a ""macro state" to work with, dealing with the epilogues. We may come back to this to help our dialogues and talks later on, but this is straightforward stuff. We need to get a handle on the Big Stuff.

This currently has no effect on the epilogues, and since no variables are set, there is no way to hook that content up with discussions or PID. So the good news is that we can work with a blank slate; the current Beta works fine, and we are now looking at two expansions of content -

dealing with a potential engagement, and dealing with the epilogue grid of choices.

They may interrelate, but they don't have to - the future is not set, so an engaged PC might go on to marry someone else. Our best bet to try to catch player imagination is to use the status of engagement to help inform in-game dialog, but rely on the grid to actually determine whether the "intent" to marry actually matches what the player says about her future. We all have sob stories about college engagements falling apart; most of all, being engaged to one NPC while married to another sounds like another mod. Not one I am particularly interested in creating, either.

The Problem To Be Solved

First of all, we have let the PC change her mind. She can break up with him, and then try and get back together with him. She can use PID to talk with him and change the entire status of the relationship. And, she can multi-romance without breakage - so in the end, she may have an in-game marriage to Angelo, or Kelsey, or someone else.... and then get an epilogue for Aran that makes little or no sense. And we have set up an expectation of "player free will", so the player expects to be able to take the "I won't answer that" and not have serious repercussions in their game. Luckily, up until now, I have left things in open interpretation. How they envision keeping Aran around on a string long-term while happily married to Ajantis or Gavin, I leave to them.
BUT.
I don't force the player to clarify the status at all; without PC opening up a PID and breaking up with him, a player can have (Romance Active = 2) at the final entries, and we have a whole grid of possible endings, but it is entirely possible to have defined the relationship as YES_TOGETHER_AND_MARRIED and MARRY_OTHER_NPC, which might work for some folks, but is much more likely to cause Bug Reports than elicit "kewl, I can have a polygamous marriage". No judgement here - just saying I really don't like bug reports. On the story content side, how can PC and Aran talk about future and godhood without reference to choices? Especially when they have never actually voiced them in ToB? Hmmmm....
SO
I need to force some decision points on the player.

So you need to condition every ending perfectly?

Nope. The grid above should take care of most of this - we really need to only get that c-aranepiloguerelation and c-aranepiloguelifestyle above 0 or no epilogue will return true.

In second place is the specificity of the toughest track - the "I want to be friends with benefits forever". That is the toughest one to adjudicate without specific variables - and it is the one that needs to UNSET some variables if PC changes her mind.

Wait - unset variables? Why? You just created that whole grid to make sure everything was covered...

Yep. But in evaluation order,

/* PC Refused Godhood, Romance, Friendship with Benefits and Part Ways : Global("c-aranepiloguefriend","GLOBAL",1) */

trumps everything below it. So even if all the grid of 4 variables are set, one random choice of "Hey... I think you and I should be friends forever. With a few benefits, of course" and the PC is locked out of all the rest of the potential epilogues FOREVAR. Now, we could do a bunch of legerdemain with unsetting and setting combinations of variables, but we don't need to, as the grid catches all sorts of combinations. All we need to do is control for the player choice that says "RA=2 But Friends And Perhaps Lovers"- we need to erase the "friends who snog if no one else is available" setting for PCs who have changed their minds and want the RA=2 regular screening to take place.

Lots of Talk. No Code.

Heh. Story of my life. And I am talking to myself again. Let's try a quick "evaluation" dialog so we can get our coding act together.

/* Initial Sketch: CheckState for Epilogue settings */
++ ~[PC] So, Aran, what do you think our future holds? What will we be doing years from now?~  + epilogue_settings_check // goes into management or talk part of PID

{ CHAIN ) IF ~~ epilogue_settings_check
SAY ~[ARAN] We may have talked on that a time or two, eh? Let me remember...~
/* friendship */
~!Global("c-aranrom","GLOBAL",2) !Alignment(Player1,MASK_EVIL)~  // good/neutral friend
~!Global("c-aranrom","GLOBAL",2) Alignment(Player1,MASK_EVIL)~ // evil friend
/* specifically defined friendship */
// ~Global("c-aranepiloguefriend","GLOBAL",0)~ // 0 = alignment check only
~Global("c-aranrom","GLOBAL",3)~ // we brike up so we just have the memories
~!Global("c-aranrom","GLOBAL",2) Global("c-aranepiloguefriend","GLOBAL",1)~ // 1 = friends but part ways (possible for men and non-romanced)
~Global("c-aranrom","GLOBAL",2) Global("c-aranepiloguefriend","GLOBAL",1)~ // 1 = friends but part ways (active RA=2)
~Global("c-aranepiloguefriend","GLOBAL",1)~  // 1 = friends but part ways (requires active RA=2 to activate)
~Global("c-aranepiloguefriend","GLOBAL",2)~ // 2 = Adventurers Forever Together (requires active RA=2 to activate)
~Global("c-aranepiloguefriend","GLOBAL",3)~ // 3 = City Forever Together (requires active RA=2 to activate)
~Global("c-aranepiloguefriend","GLOBAL",4)~ // 4 = Country Forever Together (requires active RA=2 to activate)
/* romance active and marriage choices */
~Global("c-aranrom","GLOBAL",2) Global("c-aranepiloguemarried","GLOBAL",0)~ // not married (default)
~Global("c-aranrom","GLOBAL",2) Global("c-aranepiloguemarried","GLOBAL",1)~ // married
/* romance active and children choices */
~Global("c-aranrom","GLOBAL",2) Global("c-aranepiloguechildren","GLOBAL",0)~ // no children (default)
~Global("c-aranrom","GLOBAL",2) Global("c-aranepiloguechildren","GLOBAL",1)~ // children
/* romance active and relation choices */
~Global("c-aranrom","GLOBAL",2) Global("c-aranepiloguerelation","GLOBAL",0)~ //not talked about
~Global("c-aranrom","GLOBAL",2) Global("c-aranepiloguerelation","GLOBAL",1)~ // 1 = AranPrince
~Global("c-aranrom","GLOBAL",2) Global("c-aranepiloguerelation","GLOBAL",2)~ // 2 = PCPrincess
~Global("c-aranrom","GLOBAL",2) Global("c-aranepiloguerelation","GLOBAL",3)~ // 3 = Equals
/* romance active and lifestyle choices */
~Global("c-aranrom","GLOBAL",2) Global("c-aranepiloguelifestyle","GLOBAL",0)~ //not talked about
~Global("c-aranrom","GLOBAL",2) Global("c-aranepiloguelifestyle","GLOBAL",1)~ // 1 = Adventuring
~Global("c-aranrom","GLOBAL",2) Global("c-aranepiloguelifestyle","GLOBAL",2)~ // 2 = City
~Global("c-aranrom","GLOBAL",2) Global("c-aranepiloguelifestyle","GLOBAL",3)~ // 3 = Country
EXTERN C-ARN25J epilog_recheck_done// end of chain

APPEND ~C-ARN25J~

IF ~~ epilog_recheck_done
  SAY ~[ARAN] Now, do that match your recollection?~
  /* everything as player expects so exit */
  ++ ~[PC] That is about right. I just find it comfortable to remember that there will be a future at all after all of this.~ + existing_aye_state
  /* block of potential changes here */
  [[INSERT_HERE]]
  /* conflicting information */
  IF ~Global("c-aranrom","GLOBAL",2) GlobalGT("c-aranepiloguefriend","GLOBAL",0) OR(4) GlobalGT("c-aranepiloguemarried","GLOBAL",0) GlobalGT("c-aranepiloguechildren","GLOBAL",0) GlobalGT("c-aranepiloguerelation","GLOBAL",0) GlobalGT("c-aranepiloguelifestyle","GLOBAL",0)~ THEN GOTO aran_confused_choices
END

IF ~~ aran_confused_choices
  SAY ~[ARAN] Now there be a point o' contention, here. I thought we was set on havin' a lastin' friendship after all this, but we done talked about mayhap marriage, or little ones, or mayhap settlin' down somewhere.~
  /* 1 = friends but part ways */
  ++ ~[PC] I am sure that we would keep our friendship, but we will both move on to other things and other lives, Aran.~ DO ~SetGlobal("c-aranepiloguefriend","GLOBAL",1)~ + existing_aye_state
  /* 2 = Adventurers Forever Together */
  ++ ~[PC] I am sure that we would keep our friendship and adventure together, Aran. I do not see a future without the challenges of the open road.~ DO ~SetGlobal("c-aranepiloguefriend","GLOBAL",2)~ + existing_aye_state
  /* 3 = City Forever Together */
  ++ ~[PC] I am sure that we would keep our friendship, but we will both move on to other things, Aran. Perhaps we will find ourselves in the same city, exploring urban life.~ DO ~SetGlobal("c-aranepiloguefriend","GLOBAL",3)~ + existing_aye_state
  /* 4 = Country Forever Together */
  ++ ~[PC] I am sure that we would keep our friendship, but we will both move on to other things, Aran. Perhaps we will find ourselves in the same small village,. arguing over who was the better adventurer for the amusement of tavern patrons.~ DO ~SetGlobal("c-aranepiloguefriend","GLOBAL",4)~ + existing_aye_state
  /* all PC states */
  ++ ~[PC] You know me. I change my mind all the time. Are you not used to it by now?~ + existing_aye_state // ok, on the PCs head be it. I tried. aranepiloguefriend will trump all other decisions made, so we will leave the conflict in place.
  ++ ~[PC] Well, we have talked about many things. But I think we might be more than friends after this is all over.~ DO ~SetGlobal("c-aranepiloguefriend","GLOBAL",0)~ + existing_aye_state // 0 = Allow RA possibility grid to be enabled
  ++ ~[PC] I can clarify things, Aran. The future is very flexible, and almost anything could happen.~ DO ~SetGlobal("c-aranepiloguefriend","GLOBAL",0)~ + existing_aye_state // 0 = Allow RA possibility grid to be enabled
END

END // of append to C-ARN25J

The block aran_confused_choices allows the player to change the expected outcome by resetting the var or if they are now open to romance of a more long-lasting kind, unsetting it completely.

 

So we have the start of a sketch for CHAIN evaluation of materials in ToB, so PC can talk about and potentially change the ending states. And we have identified one "clarification" point, if other vars are set but PC has said "RA=2 But Just Friends".

Side Note - "everything as player expects" is not the same as "do what the player wants". The grid of possible endings is huge, but not infinite... we are just making sure that the intended behavior of the array of choices I provided works. So, note to fellow modders - look at all this stuff being messed with for less than 10 seconds of text screen at the conclusion of a mod. And rethink your design decision. Seriously. Don't go this crazy, unless you find the *logic* exercise fun. If you like the *writing* stuff, throw your talent into actual dialogue and quests and stuff. This is a HUGE timesink. Since I am crazy, like the StarCitizen folks, and want to make sure each bolt and rivit in my imaginary spacecraft is actually fully modelled, I find this fun. But most folks would not.

So recheck - hmmm - what two variables have to set to make sure everything is fine?

IF Global("c-aranrom","GLOBAL",2) AND NOT GlobalGT("c-aranepiloguefriend","GLOBAL",0) THEN ( ( c-aranepiloguerelation < 0 ) AND ( c-aranepiloguelifestyle < 0 ) ) = true ELSE FAIL

So we need to add another diverting question to the above. So, a new filter:

IF ~Global("c-aranrom","GLOBAL",2) OR(2) Global("c-aranepiloguerelation","GLOBAL",0) Global("c-aranepiloguelifestyle","GLOBAL",0)~ THEN GOTO aran_life_choice_point

IF ~~ aran_life_choice_point
  SAY ~[ARAN] Now I want to say right out that a life backin' you up be what I want. But we all have some dreams, eh?~
  = ~[ARAN] When this be all over an' we go on to th' next adventure, what kind o' life do you be seein' us in?~
  ++ ~[PC] I see adventuring for a long, long time. Perhaps forever.~ DO ~SetGlobal("c-aranepiloguelifestyle","GLOBAL",1)~ + next_adventuring_state
  ++ ~[PC] I always saw myself as drawn to the politics and discussions you can only find in a city. I want to be involved in everything.~ DO ~SetGlobal("c-aranepiloguelifestyle","GLOBAL",2)~ + next_city_state
  ++ ~[PC] A quiet life in a country house for me. Something very different from the life I have now.~ DO ~SetGlobal("c-aranepiloguelifestyle","GLOBAL",3)~ + next_country_state
  ++ ~[PC] I... I am not sure. What sort of life do you want?~ + next_pc_asks_aran
  ++ ~[PC] I see next to no life for us. I think that I will never be left alone long enough to really settle down.~ + DO ~SetGlobal("c-aranepiloguelifestyle","GLOBAL",1)~ + next_adventuring_state // forced choice for PC
END

IF ~~ next_adventuring_state
  SAY ~[ARAN] Mahap you be right, on account o' th' number o' changes in Toril can lead directly to you. Life sometimes will have naught in th' way o' lettin' someone drop away from th' center o' things.~
  IF ~~ THEN GOTO aran_rel_choice_point
END

IF ~~ next_city_state        
  SAY ~[ARAN] Waterdeep sounds like a right fine destination. Mayhap even one o' th' Dale cities. Just not Calimport, for Sune's own sake... I love th' baths, but I do not want to retire there.~
  IF ~~ THEN GOTO aran_rel_choice_point
END

IF ~~ next_country_state
  SAY ~[ARAN] Well, there be thousands o' nice places fo a small cottage, or mayhap a whole country estate. That might be a right fine retirement.~
  IF ~~ THEN GOTO aran_rel_choice_point
END

IF ~~ next_pc_asks_aran
   SAY ~[ARAN] Now that changes by th' day, it do. But right now, I can see us in Waterdeep, all set up in one o' those townhouses. An' then mayhap a country estate. Or even some travel to that freehold my followers have been buildin' along th' Sword Coast.~
   ++ ~[PC] That is a nice dream, but I see adventuring for a long, long time. Perhaps forever.~ DO ~SetGlobal("c-aranepiloguelifestyle","GLOBAL",1)~ + final_adventuring_state
   ++ ~[PC] That seems very comfortable. The best of both worlds.~ DO ~SetGlobal("c-aranepiloguelifestyle","GLOBAL",2)~ + final_city_state
   ++ ~[PC] I think you would love the townhouse, and I would probably push for us to visit the country estate.~ DO ~SetGlobal("c-aranepiloguelifestyle","GLOBAL",3)~ + final_country_state
   ++ ~[PC] The sea tower. Lighthouse. Whatever it is that you are building on the Sword Coast. Being close to Candlekeep in some way... that sounds romantic.~ + final_follower_state
   ++ ~[PC] I see next to no life for us. I think that I will never be left alone long enough to really settle down.~ + DO ~SetGlobal("c-aranepiloguelifestyle","GLOBAL",1)~ + final_adventuring_state // forced choice for PC
END  

IF ~~ aran_rel_choice_point
  SAY ~[ARAN] An' mayhap I will be out managin' our estates, an' fendin' off foes, leavin' you to relax an' be happy, eh? A lad could enjoy spendin' th' rest o' his life protection' you.~
   ++ ~[PC] That sounds as if you want to be a charming prince, whisking me away from the world. I like that idea.~ DO ~Global("c-aranepiloguerelation","GLOBAL",1)~ + finish_rel_choice_point // 1 = AranPrince
   ++ ~[PC] Actually, I think you will be too busy cooking and scribing, making sure that my life is free to concentrate on larger challenges.~ DO ~Global("c-aranepiloguerelation","GLOBAL",2)~ + finish_rel_choice_point // 2 = PCPrincess
   ++ ~[PC] I assume that you and I will be doing all of that together, right? After all, a good relationship is built as a conversation between two equals, working for each other.~ DO ~Global("c-aranepiloguerelation","GLOBAL",3)~ + finish_rel_choice_point // 3 = Equals
   ++ ~[PC] No estates. No investments, no contracts... just peace, quiet, and rest. I just want to be cared for.~ DO ~Global("c-aranepiloguerelation","GLOBAL",1)~ + finish_rel_choice_point
   ++ ~[PC] We have so much resting on our shoulders that I suspect we will have to find a way to manage it all together. We may even need extra help.~ DO ~Global("c-aranepiloguerelation","GLOBAL",3)~ +  finish_rel_choice_point
END

finish_rel_choice_point

IF ~~ finish_rel_choice_point
  SAY ~[ARAN] That sounds right fine, it does. It would be right fine if that came to be th' future. But for now, I expect th' best we can do is keep movin' an' dreamin'.~
  IF ~~ THEN EXIT
END

Next entry: Conservation Of Work. We need to reuse these blocks in other settings, and we need to build some choice points that can be used in several areas of dialogue to set up
/* romance active and marriage choices */
~Global("c-aranrom","GLOBAL",2) Global("c-aranepiloguemarried","GLOBAL",0)~ // not married (default)
~Global("c-aranrom","GLOBAL",2) Global("c-aranepiloguemarried","GLOBAL",1)~ // married
/* romance active and children choices */
~Global("c-aranrom","GLOBAL",2) Global("c-aranepiloguechildren","GLOBAL",0)~ // no children (default)
~Global("c-aranrom","GLOBAL",2) Global("c-aranepiloguechildren","GLOBAL",1)~ // children

and we probably need a few places where the PC can say "hey - just friends." And perhaps ebven "hey, just friends with benefits". And most especially "Hey. It was nioce, but it is over now. You need to go to RA=3 so I can have my Angelo Wedding make sense."

 

Plus that dialogue needs a little bit of polish. "Nice nice nicety nice nice" does not a good entry make - and the "right fine" is getting tiresome :)

Link to comment

Archived

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

×
×
  • Create New...