The other approach that seems prevalent right now is to write both the [taboo] and [cleaned] versions into your game, but make the [taboo] content inaccessible. In effect, the version of the game you release will always be the [cleaned] version.
However, somewhere in your code (initial startup and/or loading save game), there'd be a bit of code that checks for file that doesn't normally exist. Call it taboo_patch.rpy or something. If that file exists, then set a taboo flag, then in the rest of the code check if the taboo flag is true or false and use the appropriate dialogue/choices/actions.
It's how some games have got around Steam's restrictions. Publish the [cleaned] game, but privately let those players who want to play the "full" version of the game that if they create a dummy file, the gameplay will change accordingly.
It gets around the "your sister"/"landlady's daughter" issues, but means you're doubling up on a lot of dialogue.
The only other thing I would say is that if you imagine your daily life, you don't use the words "mother/daughter/landlady/cousin/brother/etc" all that much. With people you know well, you don't even use their names that often. Games tend to throw "mommy/sis/etc" into the mix every other sentence... even names, but that's not how people speak. Introduce your characters; make sure their relationships are clear, then just remind the player infrequently. If you don't use NPCs name/titles unless you need to... it'll make your life as an author massively easier.
Some pseudo RenPy code that might fit the bill:
(I've not typed/run this in RenPy, so if I've missed something - I'm sure someone will correct me)
Code:
default patched_game = False
label after_load:
call check_for_patched_game
return
label check_for_patched_game:
if renpy.loadable("taboo_patch.rpy"):
$ patched_game = True
else:
$ patched_game = False
return
label start:
call check_for_patched_game
if patched_game is True:
"Welcome to my game about me, my mother and my siblings at my home in the city."
else:
"Welcome to my game about me and the people I met when I moved to the big city."
return
There are undoubtedly more elegant solutions to this code.
You must be registered to see the links
uses init levels so one definition overrides another. I'm just offering this as an alternative. (Not least Anne's solution uses defines rather than straight up variables... which is a much better choice in this case.
Combine all that with Anne's other post about
You must be registered to see the links
and you have a very flexible solution.