Dating sim game mechanic design help

I am currently working on a RPG style dating sim game using Quest JS but that doesn't really matter for this post as I'm having trouble with the calculations for how to make a semi-random action be successful or not successful based on 7 key factors:

  1. Action Risk Rating - Any action that the player takes towards the NPC has a Risk value between 1-10 associated with it, if successful then the NPC the action is performed on will gain some Affection for the player, otherwise this will drop instead

  2. Player Charisma or Persuasion. The player's charisma or persuasiveness - A single to double digit number

  3. NPC Risk Meter. 0-100%. The current level of Risk the NPC has, once this fills up towards 100% then they will decide to leave you if you do anything else Risky.

  4. NPC Fun Meter. 0-100%. The current level of Fun the NPC has, once this fills up towards 100% then they will be more likely to accept a proposal of marriage.

  5. NPC Risk Tolerance. 0-100%. The NPC's trait that makes them tolerant to Risk(y) behaviour. A % value that can work in your favour the higher this value is in making a Risky action pay off. However 6) will counter this.

  6. NPC Fun Tolerance. 0-100%. The NPC's trait that makes them tolerant towards Fun behaviour. A % value that can work against you the higher it is

  7. I also want to through in some element of random chance like you would in a D&D initiative dice roll.

All I have managed to come up with is incorporating parts 2), 3) and 4) together with a "Risk - Fun > Action Risk" but that is too basic and I'm not sure how to juggle all 7 in a cohesive manner.

The plan is that once an action has performed if it was successful I will increase NPC Fun and reduce NPC Risk and the opposite when it was not successful.

Any ideas would be welcome.


The NPC Risk could also be thought of as Boredom instead.


Your methodology is similar to artificial intelligence, which makes sense as you are trying to make characters alive
So, I will be using some concepts from https://www.w3schools.com/ai/ai_perceptrons.asp

The Perceptron Algorithm
Frank Rosenblatt suggested this algorithm:
Set a threshold value
Multiply all inputs with its weights
Sum all the results
Activate the output

Because my english and understanding is not that good, I will make something similar to what you want and not exactly the same, feel free to edit it

I will set the threshold value to 50, game.success = 50
game.funweight = 3
game.charismaweight = 2
game.persuasionweight = 1
Weights simply means how important that attribute is, change it to your preference.

When the player chooses
a) Kiss
b) Treat a free coffee
c) Outdoor exercise

To make it possible for players to date with different people, we set the attributes on the NPC instead and not the player, which I will call it suzy

Run this code for the first time only
suzy.fun = 0
suzy.charisma = 0
suzy.persuasion = 0

a) Kiss
suzy.fun = suzy.fun +1
suzy.charisma = suzy.charisma + 2
suzy.persuasion = suzy.persuasion +0

(Although this sounds like we are trying to dictate how fun suzy is, we are actually determining how the relationship is between suzy and the player instead)

b) Treat a free coffee
suzy.fun = suzy.fun + 0
suzy.charisma = suzy.charisma + 3
suzy.persuasion = suzy.persuasion + 1

(Who doesn't wants a free coffee? However just a coffee doesn't seems so fun.)

c) Outdoor exercise
suzy.fun = suzy.fun + 2
suzy.charisma = suzy.charisma + 0
suzy.persuasion = suzy.persuasion + 2

(Understand that you can't just copy these codes, the numbers have to change according to what npc interaction it is or which npc we are dating with.)


Alongside, each npc interaction are 3 more standard actions available at all times
a) Ask to be a friend
b) Ask to be a couple
c) Ask to be a husband and wife

So, it will save you some time to learn function and just call them everytime
These functions uses Perceptron Algorithm which we discussed earlier

a) Ask to be a friend
score = game.funweight x suzy.fun (We get 3x1 = 3)
score = score + game.charismaweight x suzy.charisma (We get 2x2 = 4)
score = score + game.persuasionweight x suzy.persuasion (We get 1x0 = 0)
game.score = score (3+4+0=7)
If game.score > 5
Suzy agrees to be your friend, trigger the story outcome

b) Ask to be a couple
score = game.funweight x suzy.fun (We get 3x1 = 3)
score = score + game.charismaweight x suzy.charisma (We get 2x2 = 4)
score = score + game.persuasionweight x suzy.persuasion (We get 1x0 = 0)
game.score = score (3+4+0=7)
If game.score > 25
Suzy agrees to be couple with you, trigger the special story outcome

c) Ask to be a husband and wife
score = game.funweight x suzy.fun (We get 3x1 = 3)
score = score + game.charismaweight x suzy.charisma (We get 2x2 = 4)
score = score + game.persuasionweight x suzy.persuasion (We get 1x0 = 0)
game.score = score (3+4+0=7)
If game.score > 50
Suzy agrees to be husband and wife with you, trigger the best story outcome


It is important to understand that the ideal outcome is husband and wife, so allow your players to have the option to continue the story if they ended up with a friend or couple outcome

So, obviously, this game is too simple
Rather than use your risk method, which is too randomize for me
I will add in a negative threshold value
Everytime the player interacts with the NPC, this attribute decreases by 1

For example,
Run this code for the first time only
suzy.patience = 0
suzy.personality = 1

So whenever, the player do an npc interaction
suzy.patience = suzy.patience - suzy.personality (0-1=-1)
So, if the player dily dallys for a long time, and perhaps, too coward to confront thy feelings, suzy will find someone else as love interest
Thus, we now need to change the previous 3 standard actions that are available at all times

To save time, I will just show the last, and the most important one
c) Ask to be a husband and wife
score = game.funweight x suzy.fun (We get 3x1 = 3)
score = score + game.charismaweight x suzy.charisma (We get 2x2 = 4)
score = score + game.persuasionweight x suzy.persuasion (We get 1x0 = 0)
game.score = score (3+4+0=7) + suzy.patience (-1)
If game.score > 50
Suzy agrees to be husband and wife with you, trigger the best story outcome

But as stated in the code itself, suzy.personality can be changed according to different NPCs
Perhaps, some NPCs prefer a long romance like Terry, everybody loves terry
Instead of
suzy.patience = 0
suzy.personality = 1
It is now
terry.patience = 0
terry.personality = -1 (Zoom in if you can't see, there is a negative here)

So whenever, the player do an npc interaction
terry.patience = terry.patience - terry.personality (0-(-1)=+1)
So, if the player dily dallys for a long time, and perhaps, too coward to confront thy feelings, terry will find you more sincere and loyal to thee


This topic is now closed. Topics are closed after 180 days of inactivity.

Support

Forums