- Jun 10, 2017
- 11,006
- 16,291
While Kinetic Novels are good, if you want to really interest your players, you need to involve them, at least a little, into your story. And the only way to achieve this is to offer them choice that really change the story.
There's nothing more uninteresting, than a game that don't care of your choices. The author offer you the possibility to spy at a girl while she shower, and being a nice guy (it's the first choice of the game), you decide to not do it. You're then sent to the breakfast scene, where you've the surprise to see the girl angry, because she know you spied on her...
Don't look at me, it's a real example that come from a real game available here. And it's far to be the only game like that, alas. You're presented some choice, but if you don't pick the right one, you'll be facing a story that make no sense.
It doesn't matter if the changes implied by your decision are small or big, as long as they exist and are shown in your game. If the player decide to not do something, then the characters should not react as if he did it. It's the basis, and we (players) shouldn't have to say it.
Then, once you've started to follow this path, why not go further, and make your game, and therefore the characters in it, have a long time memory of the decision made by the player ?
He decided to spy on the girl and she caught him ? Well, too bad for him, right. The girl didn't care this much, she have a crush for him, but she's the teasing type, and she'll remind him regularly that he's a pervert who spy at showering girls.
It will not change much to your story, but it will give it more depth. The characters aren't just puppets following a script, they have a memory and really act differently, depending of your action as player.
Achieving this isn't really difficult, and I'll now tell you what you need to know.
1) Keep track of the choices made by the player.
Each time a choice is significant to your story, the game need to remember it. It's because of this memory of the different choices made by the player, that you'll be able to present him a different content adapted to his decision.
While, globally speaking, this mean assigning a value to a variale, or altering the value of a variable, how you'll do it depend both of you and the choice itself. By example, you don't keep track of a relationship in the same way than you keep track of an inventory. And how you keep track of an inventory depend of how you want to handle the said inventory.
Note that it's recommended to use significant names for your variables, in order to easily remember what choice they handle, and at the opposed what variable store "this change".
2) Change the game flow accordingly to the choices made by the player.
Knowing what the player chose have no interest if you can't make the game react differently, accordingly to them. And the main difference that a choice imply, is the scene that you'll see "now".
Basically speaking, the scene you'll present now will depend of the value store by a variable. Therefore, you'll have to test this variable, then decide where the game have to go next, depend of its value. But how you'll do this test depend of the kind of value you'll have to deal with.
Note that I'll use a basic
3) Offer choice in accord with the choices previously made by the player.
Another way for the game to react to player choices is to open, or close, opportunities depending of them. And by chance, Ren'Py
Like those test are exactly the same that for the branching, I'll no just present one example. But obviously, the way to write the test still depend of the type of value you'll have to deal with at this moment.
Note that, unlike with branching, here the differents options aren't mutually excluding. The higher will be the value of
Here, it will be either the invitation for a coffee date, or the invitation to a dinner date.
4) Tweak the scene depending of the choices made by the player.
Another way to make a story react to the player choice is to tweak a scene. It's not something big, generally just a dialog line added, or changed, here and there. But having the other characters remembering of the previous interactions, especially when they are optional, is always an interesting plus for your story.
5) Tweak the visual part depending of the choices made by the player.
It's probably the most significant adaptation, after the possibility to see a scene or not, that can depend of the player choices. What he'll see will depend of the choices he previously made. Generally, this is badly done, the author doing a copy/past of the scene, then change the images that will be shown. While it works, this present many drawbacks.
Firstly, it imply more works for the author, both when making the game, and while correcting it ; you've to remember to report the correction to all the variation of the scene. Secondly, it open the gate for bugs (twice more CG name to write mean twice more opportunitie to make a typo), and it complicte the testing, since you've to test all the variation of the scene. Thirdly, it break the skip feature ; the player will have to manually pass the whole scene again, just because this time the CG are, sometimes siglthly, different.
You can do this change by using a variation of the preceding point. Instead of changing a dialog line, you change the image shown.
But there's a more interesting way to do this and, it will be the exception that confirm the rule, for once I'll go further than the basic approach. The
Each
This while be exactly the same than something like this:
Except that you don't have to have three version of the same scene. Therefore, there less risk of typo. If you have a correction to make, you'll make it only once. And if the player choose the traditional swimsuit in one play, and the sexy bikini in another, he'll be able to skip the scene the second time.
5) Conclusion.
By just following this How-To, you would already be able to offer a story that will stick more closely to the player choices, and this is something that your players will appreciate. But, as I said, this is a basic introduction. Ren'Py being an engine that offer many opportunities, there's way more than can be done, and everything I presented here can be done with even more dynamism. Therefore, don't hesitate to tweak the solution I presented here, and to test on your own.
Edit: Fixed the issues with the formatting of the code.
There's nothing more uninteresting, than a game that don't care of your choices. The author offer you the possibility to spy at a girl while she shower, and being a nice guy (it's the first choice of the game), you decide to not do it. You're then sent to the breakfast scene, where you've the surprise to see the girl angry, because she know you spied on her...
Don't look at me, it's a real example that come from a real game available here. And it's far to be the only game like that, alas. You're presented some choice, but if you don't pick the right one, you'll be facing a story that make no sense.
It doesn't matter if the changes implied by your decision are small or big, as long as they exist and are shown in your game. If the player decide to not do something, then the characters should not react as if he did it. It's the basis, and we (players) shouldn't have to say it.
Then, once you've started to follow this path, why not go further, and make your game, and therefore the characters in it, have a long time memory of the decision made by the player ?
He decided to spy on the girl and she caught him ? Well, too bad for him, right. The girl didn't care this much, she have a crush for him, but she's the teasing type, and she'll remind him regularly that he's a pervert who spy at showering girls.
It will not change much to your story, but it will give it more depth. The characters aren't just puppets following a script, they have a memory and really act differently, depending of your action as player.
Achieving this isn't really difficult, and I'll now tell you what you need to know.
1) Keep track of the choices made by the player.
Each time a choice is significant to your story, the game need to remember it. It's because of this memory of the different choices made by the player, that you'll be able to present him a different content adapted to his decision.
While, globally speaking, this mean assigning a value to a variale, or altering the value of a variable, how you'll do it depend both of you and the choice itself. By example, you don't keep track of a relationship in the same way than you keep track of an inventory. And how you keep track of an inventory depend of how you want to handle the said inventory.
Note that it's recommended to use significant names for your variables, in order to easily remember what choice they handle, and at the opposed what variable store "this change".
a) The use of a counter value.
This method is generally used to keep track of the evolution of the player regarding a given subject. It can also be used to keep track of the number of time you did something particular.
You don't have permission to view the spoiler content.
Log in or register now.
b) The use of a balance value.
This is a variation of the counter value, but will the counter generally have a value that goes from 0 to whatever, here the value can be negative. It's generally used to keep track of the player behavior, in order to tweak his personality and make the game react accordingly to this.
You don't have permission to view the spoiler content.
Log in or register now.
c) The use of a simple Boolean value ; AKA "flag".
This method is generally used to remember of one time events.
You don't have permission to view the spoiler content.
Log in or register now.
It can also be used for event that happen more than once, but this time it's really significant for the story.
You don't have permission to view the spoiler content.
Log in or register now.
d) The use of a semaphore.
A semaphore is a variation around Boolean value. You use them when the choice isn't limited to a Yes/No situation.
You don't have permission to view the spoiler content.
Log in or register now.
Note that you can also use integers to represente the choice. In this case you would use
giftForTheDate = 1
or giftForTheDate = 2
. But this is obviously less easy to use, because you've to remember what thie 1
or 2
value represent.e) The use of an inventory list.
This is generally used to handle inventories, but it can come handy for some other situations.
You don't have permission to view the spoiler content.
Log in or register now.
Note that I used string as value, but you can also use objects that will describe the item. It's just that this goes beyond the scope of this How-To.
2) Change the game flow accordingly to the choices made by the player.
Knowing what the player chose have no interest if you can't make the game react differently, accordingly to them. And the main difference that a choice imply, is the scene that you'll see "now".
Basically speaking, the scene you'll present now will depend of the value store by a variable. Therefore, you'll have to test this variable, then decide where the game have to go next, depend of its value. But how you'll do this test depend of the kind of value you'll have to deal with.
Note that I'll use a basic
jump
branching in my examples, but the branching can be done in many other way. In the same way, I'll only use if
structures for the test, while there's some other methods that can possibly be used. But the scope of this How-To is to present the different ways to deal with story branching, not the different ways to branch to a label or to perform multiple test.a) A simple flag.
It's the most basic test, either the player made the choice, or he didn't. This mean that you have only two possibles outcome, with one that will be "by default".
You don't have permission to view the spoiler content.
Log in or register now.
b) A semaphore.
Here, the test become a little more complicated, because it's not anymore a basic binary situation. You'll have to test each values, and branch depending of it. Worse, it's a situation where there's no default choice.
You don't have permission to view the spoiler content.
Log in or register now.
c) A counter value.
Like for the semaphore, you're facing more than a possible outcome, but unlike the semaphore, you can't test each value individually. Well, you can, but it would make no sense, since more than one value would lead to the same result. Therefore, to deal with a counter value, you generally define different ranges, that all lead to the same outcome.
Once you've those range, you test them increasingly. But there's a trap, the very first range should be the last one tested. Or more precisely, it should be seen as the default possibility ; what will happen if every all test are negative.
You don't have permission to view the spoiler content.
Log in or register now.
d) A balance value.
You deal with them in the same way than counter values, but you've to remember that there's possibly negative values. This mean that there's generally no default value in this case.
You don't have permission to view the spoiler content.
Log in or register now.
e) An inventory list.
The case of an inventory list, is generally near to the one of a flag or a semaphore, because not all the possible value in the list matter at a given time. Yet, list are tested in a particular way, so I'll still present an example.
You don't have permission to view the spoiler content.
Log in or register now.
3) Offer choice in accord with the choices previously made by the player.
Another way for the game to react to player choices is to open, or close, opportunities depending of them. And by chance, Ren'Py
menu
offer you the possibility to do this really easily. Indeed, it permit you to condition the presence of a menu to the result of a test.Like those test are exactly the same that for the branching, I'll no just present one example. But obviously, the way to write the test still depend of the type of value you'll have to deal with at this moment.
You don't have permission to view the spoiler content.
Log in or register now.
Note that, unlike with branching, here the differents options aren't mutually excluding. The higher will be the value of
girlLove
, the more options will be offered to the player. If you want to have more exclusive choices, you'll need to use interval test in place of the regular ones.You don't have permission to view the spoiler content.
Log in or register now.
4) Tweak the scene depending of the choices made by the player.
Another way to make a story react to the player choice is to tweak a scene. It's not something big, generally just a dialog line added, or changed, here and there. But having the other characters remembering of the previous interactions, especially when they are optional, is always an interesting plus for your story.
You don't have permission to view the spoiler content.
Log in or register now.
5) Tweak the visual part depending of the choices made by the player.
It's probably the most significant adaptation, after the possibility to see a scene or not, that can depend of the player choices. What he'll see will depend of the choices he previously made. Generally, this is badly done, the author doing a copy/past of the scene, then change the images that will be shown. While it works, this present many drawbacks.
Firstly, it imply more works for the author, both when making the game, and while correcting it ; you've to remember to report the correction to all the variation of the scene. Secondly, it open the gate for bugs (twice more CG name to write mean twice more opportunitie to make a typo), and it complicte the testing, since you've to test all the variation of the scene. Thirdly, it break the skip feature ; the player will have to manually pass the whole scene again, just because this time the CG are, sometimes siglthly, different.
You can do this change by using a variation of the preceding point. Instead of changing a dialog line, you change the image shown.
You don't have permission to view the spoiler content.
Log in or register now.
But there's a more interesting way to do this and, it will be the exception that confirm the rule, for once I'll go further than the basic approach. The
scene
statement have a expression
property that permit you to dynamically built the name of the image to show.You don't have permission to view the spoiler content.
Log in or register now.
scene
will build the name image accordingly to the value of the swimwearStyle
variable. This mean that the first image will be either beach01bikini, beach01sexy or beach01onepiece, while the second image will be either beach02bikini, beach02sexy or beach02onepiece.This while be exactly the same than something like this:
You don't have permission to view the spoiler content.
Log in or register now.
5) Conclusion.
By just following this How-To, you would already be able to offer a story that will stick more closely to the player choices, and this is something that your players will appreciate. But, as I said, this is a basic introduction. Ren'Py being an engine that offer many opportunities, there's way more than can be done, and everything I presented here can be done with even more dynamism. Therefore, don't hesitate to tweak the solution I presented here, and to test on your own.
Edit: Fixed the issues with the formatting of the code.
Last edited: