Ren'Py Patch only

f95zoneuser463

Member
Game Developer
Aug 14, 2017
219
1,024
You already seem to have a dedicated archive defined for scripts only. That's perfect.
Build the game as you would do normally and ignore/delete all files except your scripts.rpa.
Offer only that archive as Download with instruction to replace the old file.

pro: tiny download for an update, no wild patching/jumping inside the scripts
con: can be more complicated to install for very casual users
 

Palanto

Active Member
Game Developer
Oct 4, 2017
964
1,841
open the created zip file with i.e. 7zip, delete all unnecessary folders and files except for the "nameOfTheGame\game\scripts.rpa" leave that structure in tact, then all the players have to do is go to their Game folder i.e. D:\Games\ <-- and put the zip there, extract it and let it overwrite the old game files... which makes it a little easier for some people since they don't have to go into any specific folder, just into the folder "above" their "nameOfGame" folder.... one downside is, some people try to extract it into the "games" folder then and end up adding a new "nameOfGame\game\nameOfGame\game" folder :D So really it's up to you "how" you provide the file, just make sure to clearly state WHERE the players have to put the file ;)
 

anne O'nymous

I'm not grumpy, I'm just coded that way.
Modder
Donor
Respected User
Jun 10, 2017
10,957
16,191
Due to your game, I wonder if it's a bug fix patch, or a "do you prefer her to be the daughter of MC's best friend, or the daughter of your ex (that she had after you quit her because else it would be seen as incest by the close minded site that help me fund my game creation)" patch ?

The method proposed by @f95zoneuser463 and @Palanto is fine for the first case. But for the second this method will be more a pain in the ass ; for you because you'll need to report every update of your code into the code of the patch, and for the player because the patch for the previous update will break this update.

If it's the later, you have to make use of every possibilities offered by Ren'py for live update.
Firstly, you have the possibility to modify a text in the fly right before Ren'py display it. For this you need to use the callback. It will receive the the text to display as parameter, and need to return the string that will effectively be displayed.
Basically it works like this :
Python:
init python:
    def smtfCallBack( txt ):
        if   txt == "This string.": return "That string."
        elif txt == "Finished.": return "The end."
        else: return txt

    config.say_menu_text_filter = smtfCallBack

label start:
    "You'll see that"
    "This string."
    "isn't anymore what you expected."
    "Finished."
    return
It's also possible to use it with RegEx and do way more that this simple change ; like by example replacing a word in every sentence it appear. I can explain it more in depth if needed.
The use of can help you here, but for some reasons I'll let @Rich explain it.

Note that you can also use the feature to achieve the same result. Whatever with your own variables or with the help of a . Basically it works like this :
Python:
init python:
    herMother = "a friend"

label start:
    "She's the daughter of [herMother]."
patch.rpy
Python:
init +10 python:
    herMother = "an ex"
Secondly, you have the possibility to redirect a label with . This if for the case where you have more than a simple text change to do. By example because you need to remove/add a dialog line. And also when you have a full block of text to change, since it will be easier than the text substitution method presented above.
Basically it works like this :
Python:
label start:
    "So, you see, she is the daughter of a good friend of mine."
    "Her mother called me few days ago, explaining me that she face really hard times."
    "The she asked me, as her best friend to take care of her daughter."
    "I already knew her, having see her time to time before I had to move far from her mother."
    "So, why not ?"
    jump whatever
patch.rpy
Python:
init python:
    config.label_overrides = {"start" : "start_patched"}

label start_patched:
    "So, you see, she is the daughter my ex had before knowing me."
    "Her mother called me few days ago, explaining me that she face really hard times."
    "The she asked me, as some she still trust to take care of her daughter."
    "I already knew her, having lived few years with her mother and her."
    "We had a strong bound at this time, she was seeing me as the father she never had the chance to know ; what a dick, he left one day and never cared for her anymore."
    "So, why not ?"
    jump whatever
The advantage to use (a mix of) these methods is that a given patch will works whatever the version of the game it's applied to. config.label_overrides effectively change the code of the game, but if you do it with care, it will not be a problem.
 

ravis_defiler

New Member
Dec 3, 2019
6
3
Can someone help me, in patching waterworld? I am new to applying patch to an existing game. My version is .17 and would like to update it to .18.
 

Lord Lickertaint

New Member
Dec 6, 2020
3
1
Due to your game, I wonder if it's a bug fix patch, or a "do you prefer her to be the daughter of MC's best friend, or the daughter of your ex (that she had after you quit her because else it would be seen as incest by the close minded site that help me fund my game creation)" patch ?

The method proposed by @f95zoneuser463 and @Palanto is fine for the first case. But for the second this method will be more a pain in the ass ; for you because you'll need to report every update of your code into the code of the patch, and for the player because the patch for the previous update will break this update.

If it's the later, you have to make use of every possibilities offered by Ren'py for live update.
Firstly, you have the possibility to modify a text in the fly right before Ren'py display it. For this you need to use the callback. It will receive the the text to display as parameter, and need to return the string that will effectively be displayed.
Basically it works like this :
Python:
init python:
    def smtfCallBack( txt ):
        if   txt == "This string.": return "That string."
        elif txt == "Finished.": return "The end."
        else: return txt

    config.say_menu_text_filter = smtfCallBack

label start:
    "You'll see that"
    "This string."
    "isn't anymore what you expected."
    "Finished."
    return
It's also possible to use it with RegEx and do way more that this simple change ; like by example replacing a word in every sentence it appear. I can explain it more in depth if needed.
The use of can help you here, but for some reasons I'll let @Rich explain it.

Note that you can also use the feature to achieve the same result. Whatever with your own variables or with the help of a . Basically it works like this :
Python:
init python:
    herMother = "a friend"

label start:
    "She's the daughter of [herMother]."
patch.rpy
Python:
init +10 python:
    herMother = "an ex"
Secondly, you have the possibility to redirect a label with . This if for the case where you have more than a simple text change to do. By example because you need to remove/add a dialog line. And also when you have a full block of text to change, since it will be easier than the text substitution method presented above.
Basically it works like this :
Python:
label start:
    "So, you see, she is the daughter of a good friend of mine."
    "Her mother called me few days ago, explaining me that she face really hard times."
    "The she asked me, as her best friend to take care of her daughter."
    "I already knew her, having see her time to time before I had to move far from her mother."
    "So, why not ?"
    jump whatever
patch.rpy
Python:
init python:
    config.label_overrides = {"start" : "start_patched"}

label start_patched:
    "So, you see, she is the daughter my ex had before knowing me."
    "Her mother called me few days ago, explaining me that she face really hard times."
    "The she asked me, as some she still trust to take care of her daughter."
    "I already knew her, having lived few years with her mother and her."
    "We had a strong bound at this time, she was seeing me as the father she never had the chance to know ; what a dick, he left one day and never cared for her anymore."
    "So, why not ?"
    jump whatever
The advantage to use (a mix of) these methods is that a given patch will works whatever the version of the game it's applied to. config.label_overrides effectively change the code of the game, but if you do it with care, it will not be a problem.
What happens if the game is updated with the patch installed?
 

anne O'nymous

I'm not grumpy, I'm just coded that way.
Modder
Donor
Respected User
Jun 10, 2017
10,957
16,191
What happens if the game is updated with the patch installed?
Nothing happen. Both the patch and the game continue to works and, unless you use config.label_overrides to replace a label that use something (variable, screen, etc.) that disappear, whatever the changes it will not even throw a single error.
 

badasst82

Member
Apr 30, 2018
111
81
Hi,
how can i make a password list if there is a chace for it?
i whanted to do like this if it´s possible:

like:

scene black with dissolve:
pause
$ password = renpy.input("What is the password")

if password == "666":
"Extra Mode"
define mom = Character ("mom")
define dad = Character ("dad")
define fam = Character ("Family")
define sis = Character ("sister")
define sas = Character ("uncel Sam", color="#0000ff")

else:
"Normal Mode"
define mom = Character ("Landlady")
define dad = Character ("Landlord")
define fam = Character ("Community")
define sis = Character ("friend")
define sas = Character ("Sam", color="#0000ff")


he aske me the password but still loads the "Normal Mode"
 

anne O'nymous

I'm not grumpy, I'm just coded that way.
Modder
Donor
Respected User
Jun 10, 2017
10,957
16,191
Firstly, when you include piece of code in your message, please use the [code] and [/code] tags to format it. It will be easier to read, especially when the code is for Ren'py, where the indentation play a major role since they delimits the blocks.


he aske me the password but still loads the "Normal Mode"
What is perfectly natural.

As said by the documentation, statement, "sets a single variable to a value at init time". Therefore, when you've something like your code:
Code:
label whatever
    [....]
    if password == "666":
        "Extra Mode"
        define mom = Character ("mom")
        define dad = Character ("dad")
        [...]
    else:
        "Normal Mode"
        define mom = Character ("Landlady")
        define dad = Character ("Landlord") 
        [...]
    [....]
The define will be proceeded before the game start, and not even be seen as part of your if structure.

For Ren'py your code will looks like:
Code:
define mom = Character ("mom")
define dad = Character ("dad")
[...]
define mom = Character ("Landlady")
define dad = Character ("Landord")
[...]

label whatever
    [....]
    if password == "666":
        "Extra Mode"
    else:
        "Normal Mode"
    [....]
There's many way to achieve what you want to do, one of them being to redefine the characters:
Code:
label whatever
    [....]
    if password == "666":
        "Extra Mode"
        $ mom = Character ("mom")
        $ dad = Character ("dad")
        [...]
    else:
        "Normal Mode"
    [....]

This being said, it's far to be the best way to do an incest patch to avoid Patreon ban hammer.

Firstly, the banned content will be directly included in the game, what mean that they have a reason to ban you, if your game is reported.
Secondly, the story will make no sense when played as a none incest one. Changing the name of the character mean that the landlady will act as a mother, not as a stranger that have no reason to want to interfere with your life (clean your room, get a job, be gentle with your roommate, etc.), and totally different reason to not want to have sex with the MC.


I can't tell for the others, but personally for me it's not a direct "forget about this game" condition.
The coherence of the story, whatever if it's player with or without the incest path, is the most important part of the game. If the author have made absolutely no efforts in this, there's no reason for him to have put more efforts in the rest of the game. Therefore, the game will be nothing more than yet another generic incest adult game with near to no interest.

Be creative. There's millions of stories that can be wrote and involve a real landlady and reals roommates ; if really you want to go this way.
Don't search to be a rebel by making a banned game on Patreon, it looks childish for anyone else. And also don't expect to be rich because you made the umpteenth incest adult game. The genre still works and still have a lot of players but, at most, you'll have players, not bankers ; they already gave their money to games that are better and present on the scene since years.

I know I'm a little harsh, sorry, but this needed to be said.
Perhaps you'll think that you don't need my kind of negativity in your life, but you surely don't need the kind of negativity one get when he realize that he lost one year of his life trying to make a game that is nothing more than a failure.
Instead of using this year trying to make your game succeed against every odds, use it to works on another story. Something more interesting. Something that would stand different enough for people to want to test your game. Something that will be interesting enough for players to want to play the next update ; to want to play every updates.
Or, in other words, something that can possibly make you succeed, and at least not make you feel like if you just lost one year of your life for absolutely nothing.
 
  • Like
Reactions: badasst82

badasst82

Member
Apr 30, 2018
111
81
Firstly, when you include piece of code in your message, please use the
Code:
 and
tags to format it. It will be easier to read, especially when the code is for Ren'py, where the indentation play a major role since they delimits the blocks.




What is perfectly natural.

As said by the documentation, statement, "sets a single variable to a value at init time". Therefore, when you've something like your code:
Code:
label whatever
    [....]
    if password == "666":
        "Extra Mode"
        define mom = Character ("mom")
        define dad = Character ("dad")
        [...]
    else:
        "Normal Mode"
        define mom = Character ("Landlady")
        define dad = Character ("Landlord")
        [...]
    [....]
The define will be proceeded before the game start, and not even be seen as part of your if structure.

For Ren'py your code will looks like:
Code:
define mom = Character ("mom")
define dad = Character ("dad")
[...]
define mom = Character ("Landlady")
define dad = Character ("Landord")
[...]

label whatever
    [....]
    if password == "666":
        "Extra Mode"
    else:
        "Normal Mode"
    [....]
There's many way to achieve what you want to do, one of them being to redefine the characters:
Code:
label whatever
    [....]
    if password == "666":
        "Extra Mode"
        $ mom = Character ("mom")
        $ dad = Character ("dad")
        [...]
    else:
        "Normal Mode"
    [....]

This being said, it's far to be the best way to do an incest patch to avoid Patreon ban hammer.

Firstly, the banned content will be directly included in the game, what mean that they have a reason to ban you, if your game is reported.
Secondly, the story will make no sense when played as a none incest one. Changing the name of the character mean that the landlady will act as a mother, not as a stranger that have no reason to want to interfere with your life (clean your room, get a job, be gentle with your roommate, etc.), and totally different reason to not want to have sex with the MC.


I can't tell for the others, but personally for me it's not a direct "forget about this game" condition.
The coherence of the story, whatever if it's player with or without the incest path, is the most important part of the game. If the author have made absolutely no efforts in this, there's no reason for him to have put more efforts in the rest of the game. Therefore, the game will be nothing more than yet another generic incest adult game with near to no interest.

Be creative. There's millions of stories that can be wrote and involve a real landlady and reals roommates ; if really you want to go this way.
Don't search to be a rebel by making a banned game on Patreon, it looks childish for anyone else. And also don't expect to be rich because you made the umpteenth incest adult game. The genre still works and still have a lot of players but, at most, you'll have players, not bankers ; they already gave their money to games that are better and present on the scene since years.

I know I'm a little harsh, sorry, but this needed to be said.
Perhaps you'll think that you don't need my kind of negativity in your life, but you surely don't need the kind of negativity one get when he realize that he lost one year of his life trying to make a game that is nothing more than a failure.
Instead of using this year trying to make your game succeed against every odds, use it to works on another story. Something more interesting. Something that would stand different enough for people to want to test your game. Something that will be interesting enough for players to want to play the next update ; to want to play every updates.
Or, in other words, something that can possibly make you succeed, and at least not make you feel like if you just lost one year of your life for absolutely nothing.
Thanks i can handle criticism no problem thats the best way to lern..... i think i just whant to insert something like this in the game so everyone can deside for him self if he wants incest in it or not. I was thinking if there will be option to get this to work. I´m not sure how i can say to renpy read this and replase the names
 

badasst82

Member
Apr 30, 2018
111
81
"Firstly, when you include piece of code in your message, please use the
Code:
 and
tags to format it. It will be easier to read, especially when the code is for Ren'py, where the indentation play a major role since they delimits the blocks."

Oh shit sorry im new in this :confused: Sorry
 

badasst82

Member
Apr 30, 2018
111
81
Firstly, when you include piece of code in your message, please use the
Code:
 and
tags to format it. It will be easier to read, especially when the code is for Ren'py, where the indentation play a major role since they delimits the blocks.




What is perfectly natural.

As said by the documentation, statement, "sets a single variable to a value at init time". Therefore, when you've something like your code:
Code:
label whatever
    [....]
    if password == "666":
        "Extra Mode"
        define mom = Character ("mom")
        define dad = Character ("dad")
        [...]
    else:
        "Normal Mode"
        define mom = Character ("Landlady")
        define dad = Character ("Landlord")
        [...]
    [....]
The define will be proceeded before the game start, and not even be seen as part of your if structure.

For Ren'py your code will looks like:
Code:
define mom = Character ("mom")
define dad = Character ("dad")
[...]
define mom = Character ("Landlady")
define dad = Character ("Landord")
[...]

label whatever
    [....]
    if password == "666":
        "Extra Mode"
    else:
        "Normal Mode"
    [....]
There's many way to achieve what you want to do, one of them being to redefine the characters:
Code:
label whatever
    [....]
    if password == "666":
        "Extra Mode"
        $ mom = Character ("mom")
        $ dad = Character ("dad")
        [...]
    else:
        "Normal Mode"
    [....]

This being said, it's far to be the best way to do an incest patch to avoid Patreon ban hammer.

Firstly, the banned content will be directly included in the game, what mean that they have a reason to ban you, if your game is reported.
Secondly, the story will make no sense when played as a none incest one. Changing the name of the character mean that the landlady will act as a mother, not as a stranger that have no reason to want to interfere with your life (clean your room, get a job, be gentle with your roommate, etc.), and totally different reason to not want to have sex with the MC.


I can't tell for the others, but personally for me it's not a direct "forget about this game" condition.
The coherence of the story, whatever if it's player with or without the incest path, is the most important part of the game. If the author have made absolutely no efforts in this, there's no reason for him to have put more efforts in the rest of the game. Therefore, the game will be nothing more than yet another generic incest adult game with near to no interest.

Be creative. There's millions of stories that can be wrote and involve a real landlady and reals roommates ; if really you want to go this way.
Don't search to be a rebel by making a banned game on Patreon, it looks childish for anyone else. And also don't expect to be rich because you made the umpteenth incest adult game. The genre still works and still have a lot of players but, at most, you'll have players, not bankers ; they already gave their money to games that are better and present on the scene since years.

I know I'm a little harsh, sorry, but this needed to be said.
Perhaps you'll think that you don't need my kind of negativity in your life, but you surely don't need the kind of negativity one get when he realize that he lost one year of his life trying to make a game that is nothing more than a failure.
Instead of using this year trying to make your game succeed against every odds, use it to works on another story. Something more interesting. Something that would stand different enough for people to want to test your game. Something that will be interesting enough for players to want to play the next update ; to want to play every updates.
Or, in other words, something that can possibly make you succeed, and at least not make you feel like if you just lost one year of your life for absolutely nothing.

A big thank you Mate for the help lesson learned! I f.cking love you :whistle: