RO System - Phoenix Rising - Chemistry House of Cards

This is a romance system based off of the Chemistry House of Cards system suggested in this video:
Romantic Narrative Design - Youtube
Tips I took from it:

  • Hide Relationship based changes from the player to drive uncertainty and tension.
  • Bury the Lede in the writing too. Make body language subtle and ambiguous. Will they, won’t they, does she like me, does he hate me should all be guesses the Player makes.
  • Make it like a relationship whodunnit.
  • Mutual Love/lust should feel like a joyful, surprising win. Serendipity, happy chance, etc. Risktaking, rush, etc.

Each RO has these four: (P next to it is for Platonic only)

  • (P)Trust - (tracks how much or little the Character trusts the PC)
  • Sexual Attraction - (tracks how sexually attracted to the PC this character is
  • Romantic Attraction - (tracks how romantically attracted to the PC this character is)
  • (P) Platonic Friendship - (tracks how friendly, platonically, this character is to the PC)

For romantic interests the formula’s pretty simple:

  • Low trust + low rom + low sex = platonic
  • Low trust + low rom + high sex = sexual attraction
  • Low trust + high rom + high sex = untrustworthy but sexy? Not relationship material probably.
  • High Trust + high rom + high sex = I wanna wife this person up.
  • High Trust + High Rom + low sex = I wanna wife this person up, but no sex.
  • High Trust + Low Rom + High sex = This is a great Friends with Benefits.

For Platonic friendships it’s even simpler:

  • Low Trust + Low Plat = I dislike this person.
  • High Trust + Low Plat = I respect this person, but I don’t like them.
  • Low Trust + HIgh Plat = I’m kind to this person’s face, but I do not trust them.
  • High Trust + HIgh Plat = we’re really good friends!

Create variables for each Character You want to Track. replace pers with an identifiable thing for the character, like a name, initials, etc.

*create RP_pers
*create pers_trust 0 
*create pers_sex_attract 0 
*create pers_Rom_attract 0 
*create pers_Plat 0 

Gosub coding, which needs to be at the bottom of EVERY SCENE (except stats and ending) where changes to any of these variables might happen.

*Edit: It has been pointed out that if you use the *gosub_scene command, you can put the subroutines in a seperate .txt file, so long as that file is listed in your Scenes in startup.txt. This will save you a LOT of lines of code.

(if you’re curious about the awful, good bad, etc. See this page for how to set it up this way: Diving Into Numerical Relationship Values (For The Numerically Challenged) - #13 by Chris_Conley)
For ROs:

*label pers_Relationship
*if ((pers_trust <= awful) and (pers_Sex_Attract <= awful)) and ((pers_Rom_Attract <= awful) and (pers_Plat <= awful)) 
  *set RP_pers awful
*if ((pers_trust <= bad) and (pers_Sex_Attract <= bad)) and ((pers_Rom_Attract <= bad) and (pers_Plat <= bad))
  *set RP_pers bad
*if ((pers_trust <= decent) and (pers_Sex_Attract <= decent)) and ((pers_Rom_Attract <= decent) and (pers_Plat <= decent))
  *set RP_pers decent
*if ((pers_trust <= good) and (pers_Sex_Attract <= good)) and ((pers_Rom_Attract <= good) and (pers_Plat <= good))
  *set RP_pers good
*if ((pers_trust <= great) and (pers_Sex_Attract <= great)) and ((pers_Rom_Attract <= great) and (pers_Plat <= great))
  *set RP_pers great
*if ((pers_trust <= perfect) and (pers_Sex_Attract <= perfect)) and ((pers_Rom_Attract <= perfect) and (pers_Plat <= perfect))
  *set RP_pers perfect

For Platonic Characters:

*label pers_relationship
*if ((pers_trust <= awful) and (pers_Plat <= awful))
  *set RP_pers awful
*if ((pers_trust <= bad) and (pers_Plat <= bad))
  *set RP_pers bad
*if ((pers_trust <= decent) and (pers_Plat <= decent))
  *set RP_pers decent
*if ((pers_trust <= good) and (pers_Plat <= good))
  *set RP_pers good
*if ((pers_trust <= great) and (pers_Plat <= great))
  *set RP_pers great
*if ((pers_trust <= perfect) and (pers_Plat <= perfect))
  *set RP_pers perfect

On your stats page, you can simply have a stat-chart, or you can have dialogue options instead, there are tons of ways you can display how the character feels about the PC. I use percent, but you could also use a number base instead.
For example:

        percent RP_pers "RO's name"

An example of this coding from my current version of Phoenix Rising:

    *if met_QBL = true
      [b]Qin Bolin[/b][i], a schemy Eunuch with poor luck, who may be more than meets the eye.[/i] 
      *if ((QBL_trust >= 0) and (QBL_trust < AWFUL))
        $!{Bolin_he} sneers at you because you're just like everyone else.
      *if ((QBL_trust >= AWFUL) and (QBL_trust < BAD))
        $!{Bolin_he} at least doesn't sneer at you anymore. You can feel ${Bolin_his} eyes on you when you aren't looking.
      *if ((QBL_trust >= BAD) and (QBL_trust < DECENT))
        $!{Bolin_he} smiles and jokes. He at least trusts you enough to eat the food you give him.
      *if ((QBL_trust >= DECENT) and (QBL_trust < GOOD))
        $!{Bolin_he}@{Bolin_singular 's|'ve} taken to chiding you on the poor parts of your work and planning. You think it's out of worry for you. It's saved you a lot of trouble. 
      *if ((QBL_trust >= GOOD) and (QBL_trust < GREAT))
        $!{Bolin_he} brings you food, and seeks out your company whenever he can. ${Bolin_he}@{Bolin_singular 's|'ve} made it clear that it's you and ${Bolin_him} against the world.
      *if ((QBL_trust >= GREAT) and (QBL_trust <= PERFECT))
        $!{Bolin_he} would share ${Bolin_his} greatest secrets with you. $!{Bolin_he} would kill for you. Would ${Bolin_he} die for you?
        percent RP_QBL Qin Bolin

While coding scenes, think about how each choices the character makes affects the four relationship stats for each character, how that character would react to that choice (if they know about it).
For example:

Trisha absolutely hates aggressive people. when the PC comes to a choice where they can be manipulative or aggressive, it might look like this:

Trisha stands in the corner. The suspect is in front of you, and is refusing to talk. How are you going to get your confession?
  #Beat it out of him.
    *set pers_trust %-10
    *set pers_Sex_Attract %-10
    *set pers_Rom_Attract %-10
    *set pers_plat %-10
    *go_sub Trisha_relationship
    You begin with a punch. Triska winces and looks away, gripping her jacket for support.
  #Offer him some lunch.
    *set pers_trust %-5
    *set pers_plat %+10
    *set pers_rom_attract %+5
    *go_sub Trisha_relationship
    You offer the perp some lunch. As he's eating, you ask him if it's good. When he says yes, you ask him if it's like his mother made. He starts talking about his mother, and how she never made it this poorly. You ask if his step-dad ever complimented her. He starts ranting, and explains how the step-dad treated her poorly. Within minutes of masterful manipluation through conversation, you have a confession. Trisha raises an eyebrow, and you wonder if she's impressed. 
  #Try pinning it on his accomplice to get him to talk
    *set pers_trust %-5
    *set pers_plat %-10
    *go_sub Trisha_relationship
    You shrug and explain that you've already got a story from his partner. He looks shocked. You mention you were only here to corroborate evidence. He chokes, and shakes his head, saying she wouldn't say anything. You smirk, and comment about how he shouldnt trust women like that. They're all out for themselves. The Perp glowers at you and begins trying to clear the young lady you'd brought in with him. Your confession comes out desperate and shakey. Trisha frowns, unwilling to look at you.

This sends them to the Go_sub that changes the stats page to show the change in relationship.

Now, I’m trying to get this to work with my Sexuality system, from which you can choose four sexualities:

  • Allosexual Alloromantic (Romance and Sex go hand in hand!)
  • Allosexual Aromantic (Sex is good, Romance sucks!)
  • Asexual Alloromantic (Sex sucks, but romance is good!)
  • Asexual Aromantic (Keep that romance/sex shit away from me!)

and my current plan is that any RO cutscenes that relate to sex would be removed with an *if asexual = go to some other label command, where as any RO cutscenes that relate to romance would have an *if aromantic = go to some label command. And if both of those are true, then we would skip the RO cutscene at all, leaning into a Platonic Friendship instead.

Let me know your thoughts, and if you have any questions. The more I talk about this system, the more I mentally work out the kinks, and I’ll update this particular thread with any challenges I face. That way we can hopefully all work on it together!


You could always place the code into a txt file called relationships and have this code there and then instead of having a gosub in every scene you can just do

*gosub_scene relationships

It would save you a lot of code.


You are ABSOLUTELY right! I actually found out about the *gosub_scene code, and now my relationship subroutine lives on my chapter 1 scene. But you have a good point. A Txt file called relationships might be a better option, cleanly.