P_S_Y_C_H_O

therappist
Game Developer
Sep 3, 2018
756
3,089
I believe there is a simpler way to do this - once you have set up the proper mechanism it should be boringly easy to offer the correct visual. Maybe this thread can point you in the right direction, if you're interested.
Interesting.... After checking this out - I think it suits only for games with static background and 'different' images of characters depending on their mood, like "good girl gone bad" f.e. (didn't play it, just judging from screenshots).
But not for games where every image is different.
Are you sure this can be applied in my game?
For example, instead of writing this code for one picture
Code:
        scene ar59
        g "Tee-hee!"
        m "You can't out run me!"
        g "Yeah, yeah, whatever you say. *Giggle*"
I have to "if/else" this picture into two variants, checking for players decision every time
Code:
   if hairy == True:
        scene ar59
        g "Tee-hee!"
        m "You can't out run me!"
        g "Yeah, yeah, whatever you say. *Giggle*"
    else:
        scene ar59a
        g "Tee-hee!"
        m "You can't out run me!"
        g "Yeah, yeah, whatever you say. *Giggle*"
ar59 is picture with hairy stuff, ar59a - not hairy.
 
Last edited:
  • Wow
Reactions: Banish and Alteni

Alteni

Engaged Member
Jan 23, 2018
2,564
5,516
Interesting.... After checking this out - I think it suits only for games with static background and 'different' images of characters depending on their mood, like "good girl gone bad" f.e. (didn't play it, just judging from screenshots).
But not for games where every image is different.
Are you sure this can be applied in my game?
For example, instead of writing this code for one picture
Code:
        scene ar59
        g "Tee-hee!"
        m "You can't out run me!"
        g "Yeah, yeah, whatever you say. *Giggle*"
I have to "if/else" this picture into two variants, checking for players decision every time
Code:
   if hairy == True:
        scene ar59
        g "Tee-hee!"
        m "You can't out run me!"
        g "Yeah, yeah, whatever you say. *Giggle*"
    else:
        scene ar59a
        g "Tee-hee!"
        m "You can't out run me!"
        g "Yeah, yeah, whatever you say. *Giggle*"
ar59 is picture with hairy stuff, ar59a - not hairy.
304808
304810
 

Sphere42

Active Member
Sep 9, 2018
913
957
Interesting.... After checking this out - I think it suits only for games with static background and 'different' images of characters depending on their mood, like "good girl gone bad" f.e. (didn't play it, just judging from screenshots).
But not for games where every image is different.
Are you sure this can be applied in my game?
For example, instead of writing this code for one picture
Code:
        scene ar59
        g "Tee-hee!"
        m "You can't out run me!"
        g "Yeah, yeah, whatever you say. *Giggle*"
I have to "if/else" this picture into two variants, checking for players decision every time
Code:
   if hairy == True:
        scene ar59
        g "Tee-hee!"
        m "You can't out run me!"
        g "Yeah, yeah, whatever you say. *Giggle*"
    else:
        scene ar59a
        g "Tee-hee!"
        m "You can't out run me!"
        g "Yeah, yeah, whatever you say. *Giggle*"
ar59 is picture with hairy stuff, ar59a - not hairy.
You should be able to have a fairly generic function "check_hairy" in python code which does the "if/then/else" checks and either appends a string (for direct image names) or operates some kind of selection mechanism where you have the different variants in an array/dictionary.

So for the simplest case of generating image names:

Code:
#in some init file:
init python:
        def check_hairy():
               suffix = ""
               if hairy_armpit:
                     suffix += "a"
               if hairy_pussy:
                     suffix += "p"
               return suffix

#usage in game script:
        imname = "img01" + check_hairy()
        <image statement of choice> imname
Of course in this case you might as well have a global string variable "hairy_suffix" and adjust it when the player makes their choices but the function version allows for more complex logic e.g. you can give it a character(-name) as an argument or make it adjust member variables on image-holding objects.

You might need to look up the python equivalent/backend for the "scene" statement in your example if the renpy variant does not fully support object-type variables.
 

P_S_Y_C_H_O

therappist
Game Developer
Sep 3, 2018
756
3,089
You should be able to have a fairly generic function "check_hairy" in python code which does the "if/then/else" checks and either appends a string (for direct image names) or operates some kind of selection mechanism where you have the different variants in an array/dictionary.

So for the simplest case of generating image names:

Code:
#in some init file:
init python:
        def check_hairy():
               suffix = ""
               if hairy_armpit:
                     suffix += "a"
               if hairy_pussy:
                     suffix += "p"
               return suffix

#usage in game script:
        imname = "img01" + check_hairy()
        <image statement of choice> imname
Of course in this case you might as well have a global string variable "hairy_suffix" and adjust it when the player makes their choices but the function version allows for more complex logic e.g. you can give it a character(-name) as an argument or make it adjust member variables on image-holding objects.

You might need to look up the python equivalent/backend for the "scene" statement in your example if the renpy variant does not fully support object-type variables.
Thank you, will try to understand it. But it's like a sorcery for me. I don't understand half of words you wrote.
Could you please give me some keywords so I can search for a tutorial or example of particularly this case?
 

Sphere42

Active Member
Sep 9, 2018
913
957
Thank you, will try to understand it. But it's like a sorcery for me. I don't understand half of words you wrote.
Could you please give me some keywords so I can search for a tutorial or example of particularly this case?
Unfortunately I'm more familiar with programming than with renpy. The primary question is just what exactly you are trying to do based on the different settings:

  • do you have several prerendered CGs covering all possible combinations (i.e. a "shaved", "armpit", "pussy" and "both" version of every image) - this massively inflates the download size
  • do you plan on using cut-outs or overlays (i.e. bisect every character at the waist so you can load the armpits and the pubes separately) - I'm not sure how well renpy handles the cut lines especially if you can't add python hacks to fix glitches
  • will there be dialogue adjustments mid-sentence where having an "if/else" every time becomes inconvenient ("you rub your cock against her <shaved/hairy> crotch")
  • do you need these options to somehow interact between multiple girls beyond just having them in the same picture?
If all you want are static images then I propose you add a strict naming convention for said images by appending hair status. Suppose we use the characters' initials (to cover images containing multiple girls with different hair settings) followed by "a" for "armpit" and "p" for "pubes", where 0 is shaved and 1 is hairy (increase numbers for varying degrees of bush). So let's say you currently have an image "Norma01.png", you will then have four copies "Norma01_Na0p0.png", "Norma01_Na0p1.png", "Norma01_Na1p0.png" and "Norma01_Na1p1.png".

Now instead of typing out the image name in an "if/else" statement every time you make a load of variables to store the hair choices of each girl i.e. "norma_a", "norma_p", "grace_a" and so on. In this example these should always be set to a value of "0" or "1" (WITH quotes to be safe, all of this can be cleaned up later). I forget how to ensure they save properly but make sure they are set to something when the game begins:

Code:
init python:
    norma_a = "1"
    norma_p = "1"
...
When the player makes a choice you set that variable like so:

Code:
    if <tell norma to shave her armpits>:
        $ norma_a = "0"
    else:
        $ norma_a = "1"
Where the dollar symbol $ makes renpy read that one line as python code which may or may not be necessary here.

Now for the "magic" part: you can "add" text strings together with "+", but instead of counting this combines the two by appending. So while 1+1=2 if you do "1"+"1" you get "11". This lets you generate the image file name from your saved settings:

Code:
    $ img_name = "Norma01" + "_N" + "a" + norma_a + "p" + norma_p
    <show image command> img_name
Note the variable names (the settings) are NOT in quotes! I spelled out the individual components because ideally you'd save those as additional variables in case you ever need to change them. Note this code will crash if any of the settings are not defined at all.

Now what will happen in practice? If you try to show the image right after starting the game norma_a and norma_p are both "1" so you will get "Norma01_Na1p1", the "all hair" picture. If you tell her to shave her armpits before loading the image norma_a will be "0" and you get "Norma01_Na0p1" thus shaved armpits.

If you want to use overlays/split images you would simply have two "img_name" lines i.e. "img_top" and "img_bot" where one only loads the armpit setting and the other only pubes:

Code:
    $ img_top = "Norma01_top" + "_N" + "a" + norma_a
    $ img_bot = "Norma01_bot" + "_N" + "p" + norma_p
    <show image command> img_top
    <show image command> img_bot
I recommend you set up an empty renpy project with a single image (all variations) to build a minimal working example, mainly to ensure nothing crashes and player choices save and load correctly. Hopefully this is a little easier to understand than the function approach which is overkill if you aren't messing with complex options to begin with.
 

P_S_Y_C_H_O

therappist
Game Developer
Sep 3, 2018
756
3,089
Unfortunately I'm more familiar with programming than with renpy. The primary question is just what exactly you are trying to do based on the different settings:

  • do you have several prerendered CGs covering all possible combinations (i.e. a "shaved", "armpit", "pussy" and "both" version of every image) - this massively inflates the download size
  • do you plan on using cut-outs or overlays (i.e. bisect every character at the waist so you can load the armpits and the pubes separately) - I'm not sure how well renpy handles the cut lines especially if you can't add python hacks to fix glitches
  • will there be dialogue adjustments mid-sentence where having an "if/else" every time becomes inconvenient ("you rub your cock against her <shaved/hairy> crotch")
  • do you need these options to somehow interact between multiple girls beyond just having them in the same picture?
If all you want are static images then I propose you add a strict naming convention for said images by appending hair status. Suppose we use the characters' initials (to cover images containing multiple girls with different hair settings) followed by "a" for "armpit" and "p" for "pubes", where 0 is shaved and 1 is hairy (increase numbers for varying degrees of bush). So let's say you currently have an image "Norma01.png", you will then have four copies "Norma01_Na0p0.png", "Norma01_Na0p1.png", "Norma01_Na1p0.png" and "Norma01_Na1p1.png".

Now instead of typing out the image name in an "if/else" statement every time you make a load of variables to store the hair choices of each girl i.e. "norma_a", "norma_p", "grace_a" and so on. In this example these should always be set to a value of "0" or "1" (WITH quotes to be safe, all of this can be cleaned up later). I forget how to ensure they save properly but make sure they are set to something when the game begins:

Code:
init python:
    norma_a = "1"
    norma_p = "1"
...
When the player makes a choice you set that variable like so:

Code:
    if <tell norma to shave her armpits>:
        $ norma_a = "0"
    else:
        $ norma_a = "1"
Where the dollar symbol $ makes renpy read that one line as python code which may or may not be necessary here.

Now for the "magic" part: you can "add" text strings together with "+", but instead of counting this combines the two by appending. So while 1+1=2 if you do "1"+"1" you get "11". This lets you generate the image file name from your saved settings:

Code:
    $ img_name = "Norma01" + "_N" + "a" + norma_a + "p" + norma_p
    <show image command> img_name
Note the variable names (the settings) are NOT in quotes! I spelled out the individual components because ideally you'd save those as additional variables in case you ever need to change them. Note this code will crash if any of the settings are not defined at all.

Now what will happen in practice? If you try to show the image right after starting the game norma_a and norma_p are both "1" so you will get "Norma01_Na1p1", the "all hair" picture. If you tell her to shave her armpits before loading the image norma_a will be "0" and you get "Norma01_Na0p1" thus shaved armpits.

If you want to use overlays/split images you would simply have two "img_name" lines i.e. "img_top" and "img_bot" where one only loads the armpit setting and the other only pubes:

Code:
    $ img_top = "Norma01_top" + "_N" + "a" + norma_a
    $ img_bot = "Norma01_bot" + "_N" + "p" + norma_p
    <show image command> img_top
    <show image command> img_bot
I recommend you set up an empty renpy project with a single image (all variations) to build a minimal working example, mainly to ensure nothing crashes and player choices save and load correctly. Hopefully this is a little easier to understand than the function approach which is overkill if you aren't messing with complex options to begin with.
Thank you.
I feel like it would be best to use one image as a background (let's say all-hairy variant), then add the same size (720p) png image with only shaved parts visible on top of it as overlay, according to players choice.
Also I want to differ the text ("you rub your cock against her <shaved/hairy> crotch")
And later there will be multiple girls involved in one scene, so I would like to use multiple overlays for one background...fuck it sounds already overwhelming and frustrating.
 

Sphere42

Active Member
Sep 9, 2018
913
957
Thank you.
I feel like it would be best to use one image as a background (let's say all-hairy variant), then add the same size (720p) png image with only shaved parts visible on top of it as overlay, according to players choice.
Also I want to differ the text ("you rub your cock against her <shaved/hairy> crotch")
And later there will be multiple girls involved in one scene, so I would like to use multiple overlays for one background...fuck it sounds already overwhelming and frustrating.
Take it slow, build the minimum working example first so you can play around with it.

Multiple girls are easy, you just add them to the sum ("family_Na1p1_Ga0p1_Ra1p0_Aa0p0.png") and make sure each girl has her own settings.

If you link the code/tutorial for your overlay renderer I can help you add in the settings selector, making sure the overlay rendering itself works is the more pressing issue there.

One trick you can use for text edits is to use a dictionary (sometimes called "table" in other programming languages):

Code:
init python:
    hairy_words = { "0" : "shaved" , "1" : "hairy" }
    norma_p = "1"

<show text> "You rub your cock against her " + hairy_words[norma_p] + " crotch."
Note spaces inside the quotes are part of the text string and will be rendered while those outside will not. "hello" + "world" will render "helloworld" while "hello "+"world" will render "hello world". The dictionary itself stores all options while the square brackets look up one specific entry. This method only works if you can directly replace the text within each option, if you need to reword larger passages just use an if/else block.

Speaking of if/else blocks, be careful with how you compare the values of your settings. 0 is equal to False, 1 is equal to True, but "0" is equal to True as well. Thus you need to check for <norma_p == "0"> in order to verify the "shaved" state. If you want to use number indices you will most likely have to use the which makes things a lot harder to read if you aren't used to it. Don't dive into that now, just be aware things can be tidied up quite a bit down the line.
 

joel69

Newbie
Mar 30, 2018
15
13
Thank you, will try to understand it. But it's like a sorcery for me. I don't understand half of words you wrote.
Could you please give me some keywords so I can search for a tutorial or example of particularly this case?
What you might need is . Your thinking on how to significantly reduce the rendering effort is already heading in the right direction. With the introduction of layered images (in ) they paved the way for you.
 

joel69

Newbie
Mar 30, 2018
15
13
What you might need is . Your thinking on how to significantly reduce the rendering effort is already heading in the right direction. With the introduction of layered images (in ) they paved the way for you.
The official documentation is helpful but, despite providing an example, may be a bit abstract. More practical examples are shown in the and the . It may also help to delve into more advanced topics such as or .
 

joel69

Newbie
Mar 30, 2018
15
13
It would be easier to make this game 70 years ago, when people didn't know that you can shave your body for some weird FUCKING reason.
@joel69 Thank you. Will keep it in mind. But I'm already losing it.
I understand where you're coming from. The mechanisms and ways I pointed out can only support you in what you want do. If you are interested you will find the time to experiment with the new stuff; but it looks like you're about to make a more fundamental decision - whether you can and even want to cater to the many requests out there; we can't help you with that but this may be a good time to remember what drew people to your game initially ... it certainly wasn't cleanly shaven body parts in a sterile setting.
 
  • Like
Reactions: P_S_Y_C_H_O

P_S_Y_C_H_O

therappist
Game Developer
Sep 3, 2018
756
3,089
I understand where you're coming from. The mechanisms and ways I pointed out can only support you in what you want do. If you are interested you will find the time to experiment with the new stuff; but it looks like you're about to make a more fundamental decision - whether you can and even want to cater to the many requests out there; we can't help you with that but this may be a good time to remember what drew people to your game initially ... it certainly wasn't cleanly shaven body parts in a sterile setting.
Thanks. This sorcery is too much for me, but I'll try when the time will come. Bookmarked your comments to make it easy to find them. For now its only if/else. Later maybe will be able to hire some sorcerer for it.
 
Last edited:

nod24

Member
May 4, 2017
202
121
Too primitive when from the very beginning it all comes down to ... sniff, lick, masturbate ... Moreover, it seems that the author forcibly causes the player to sniff someone's hairy armpits.
 

P_S_Y_C_H_O

therappist
Game Developer
Sep 3, 2018
756
3,089
Too primitive
Yeah it's not high-tech, sorry
Moreover, it seems that the author forcibly causes the player to sniff someone's hairy armpits.
You just passively admitted that you sniffed hairy armpits... eewwwww dude
it all comes down to ... sniff, lick, masturbate
It's a porn game. Sometimes they even fuck here. Not implemented yet, but... sure will be.
 
Last edited:

nod24

Member
May 4, 2017
202
121
It's a porn game. Sometimes they even fuck here. Not implemented yet, but... sure will be.
The author, despite your answer, I think you understood me. There was a very unpleasant feeling of a completely confusing mood. It is possible that in order for players to avoid this, the author should select one particular topic and play it back. Not a player to whom one way or another it will be "offered", specifically the author! It will also accelerate the development of the project and its quality. Open multifetishny world - you will not be allowed to make the engine.
 
4.40 star(s) 92 Votes