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.