Sonico

Forum Fanatic
Jul 21, 2018
4,113
3,000
Okay, so it's not 100% chance to undress, it's you keep the clothes you take off of them?
Yes, i was just as confused at it as you were just a day before. You're not alone on those dashed expectations, brother. ;)

Ps: we'll survive Ninoss. Your idea is fun, it's just that the wording got us expecting something else altogether.
 
Last edited:

dusty stu

Well-Known Member
Jan 24, 2018
1,714
1,538
Yes, i was just as confused at it as you were just a day before. You're not alone on those dashed expectations, brother. ;)

Ps: we'll survive Ninoss. Your idea is fun, it's just that the wording got us expecting something else altogether.
I prefer the 'perma-steal clothes' option. The game is easy enough already.
 

Buttholefly

New Member
May 8, 2018
4
2
Love the game so far. Can't wait to see what you do with it. I'd love to see some oral stuff in the future! And of course some more variety in the gifs.
 
  • Like
Reactions: HelotGames

subli

Member
Jul 30, 2020
487
301
One thing that I've learned from looking at the game files is that clothing thickness matters very little compared to whether or not a girl is wearing some item. Take for example lower clothing. The thickest option is jeans, at 15 and the thinnest option is sports shorts at 3, a difference of 12. Pleasure damage is reduced by half the thickness, so the difference in pleasure damage is 6. By comparison the difference between grope her pussy and tease her clit is 25 vs 40 pleasure, a difference of 15 or almost 3 times as much. For arousal the full thickness value applies, so the difference in base pleasure is only 25% greater than the difference between the thickest and the thinnest leg wear.
 
Last edited:
  • Like
Reactions: hotmike

kryanBR

Member
Jan 18, 2019
487
207
My linear conversion don't expect values over 120 and might break around ~150+ giving negative values after that point to the renpy's random() module (who miserably breaks).
But I've added a manual safeguard, so maybe the code can handle those BiG NumBerZ now
So... this happen because they didnt create a limiter or is it a poorly thought out variable?
why it doesnt make sense for the mod to have the option to level up the stats quickly and penalize you with a "broken screen".
(yes, im f*cking curious :BootyTime:)
 

hotmike

Member
Jan 28, 2018
488
306
Some tech questions:
- Why are the videos loaded as single frames?
- Can we add video (webm) files, just like images?
- What are the size conditions for images. I notice the scaling is not percentage, but a forced size, distorting new images
- Is there a way to keep parts of the dresses together? In numbering?
- Does the _b addition stand for bare? As in no bra or no panties?
- How to number _b files?
- Is there a way to keep boob sizes together? Now a large bra will uncover a micro set of boobs.... :(
 
  • Like
Reactions: dusty stu

Ninoss

Active Member
Donor
Game Developer
Nov 20, 2017
630
1,140
Some tech questions:
- Why are the videos loaded as single frames?
- Can we add video (webm) files, just like images?
- What are the size conditions for images. I notice the scaling is not percentage, but a forced size, distorting new images
- Is there a way to keep parts of the dresses together? In numbering?
- Does the _b addition stand for bare? As in no bra or no panties?
- How to number _b files?
- Is there a way to keep boob sizes together? Now a large bra will uncover a micro set of boobs.... :(
Vanilla and WTM are using way different version to handle clothing, wich one are you talkin about ? or do you want infos for both ^^
 

Ninoss

Active Member
Donor
Game Developer
Nov 20, 2017
630
1,140
So... this happen because they didnt create a limiter or is it a poorly thought out variable?
why it doesnt make sense for the mod to have the option to level up the stats quickly and penalize you with a "broken screen".
(yes, im f*cking curious :BootyTime:)
Mostly all the logic under the hood in WTM is different than vanilla. I'm using a homemade linearconversion here and there to compute thing.
Here is the bit of code :
1650998183179.png
Inhibition is mapped from 0 to 120 => 1.2 to 0.25 to determine _inhibCoef.
Meaning : 0 inhib would be 1.2 and 120 inhib would be 0.25
This _inhibCoef is meant to reduce _inhibitionFleeCoefed based on her inhibition. At 0 inhib she would have +20% and -75% at 120 inhib.

Example : 60 inhib would be 0,475 so -52.5%. The issues is that this conversion doesn't have limits.
So 240 would be somethinng like -0.7 and it's already fucked up ><

(for the demonstration I'll assume _inhibitionFlee is set to 1 so _inhibitionFleeCoefed = _inhibCoef but as _inhibitionFlee is the result of a multiplication with _inhibCoef , if _inhibCoef = 0, everything would be 0 anyways)

After that, I'm using renpy.random() to randomize things up, if my _inhibitionFleeCoefed value is too far in the negative for example -10, I would pass those arguments : (-10*0.7,1+-10*1.2) so (-8, -19) rounded.
Random() is expecting two integers as arguments (a,b) where b < a to generate a random integer between a and b.
-8 being a higher value than -19 , the game's crashing ^^

That's why I've added a safeguard to put the value to 0 so if it's negative at high inhibition, _inhibitionFleeCoefed would just be 1.
(the random() would have (0,1) as arguments so ~0.5 in average)

It's more complicated than that but basicly girls have a chance to flee if _inhibitionFleeCoefed > 60 .

As it would be ~1, a girl above 300+ inhib just won't flee because of shame.
 
Last edited:

dusty stu

Well-Known Member
Jan 24, 2018
1,714
1,538
Mostly all the logic under the hood in WTM is different than vanilla. I'm using a homemade linearconversion here and there to compute thing.
Here is the bit of code :
View attachment 1778258
Inhibition is mapped from 0 to 120 => 1.2 to 0.25 to determine _inhibCoef.
Meaning : 0 inhib would be 1.2 and 120 inhib would be 0.25
This _inhibCoef is meant to reduce _inhibitionFleeCoefed based on her inhibition. At 0 inhib she would have +20% and -75% at 120 inhib.

Example : 60 inhib would be 0,475 so -52.5%. The issues is that this conversion doesn't have limits.
So 240 would be somethinng like -0.7 and it's already fucked up ><

(for the demonstration I'll assume _inhibitionFlee is set to 1 so _inhibitionFleeCoefed = _inhibCoef but as _inhibitionFlee is the result of a multiplication with _inhibCoef , if _inhibCoef = 0, everything would be 0 anyways)

After that, I'm using renpy.random() to randomize things up, if my _inhibitionFleeCoefed value is too far in the negative for example -10, I would pass those arguments : (-10*0.7,1+-10*1.2) so (-8, -19) rounded.
Random() is expecting two integers as arguments (a,b) where b < a to generate a random integer between a and b.
-8 being a higher value than -19 , the game's crashing ^^

That's why I've added a safeguard to put the value to 0 so if it's negative at high inhibition, _inhibitionFleeCoefed would just be 1.
(the random() would have (0,1) as arguments so ~0.5 in average)

It's more complicated than that but basicly girls have a chance to flee if _inhibitionFleeCoefed > 60 .

As it would be ~1, a girl above 300+ inhib just won't flee because of shame.
What code file is used to define the mapping between actions in the game and the names of gifs that are played in \game\images\events\gifs ?
EG, How would I add a titjob.mp4 or titjob.webp into the game and have it be played whe, say, I stripped off the bra?

Also does WTM use images\events\faceplantass and etc? or just events\gif ?

Also do animated images have to be .webp or is .gif and .mp4 ok as well? (for WTM version)
 
  • Like
Reactions: hotmike

Ninoss

Active Member
Donor
Game Developer
Nov 20, 2017
630
1,140
dusty stu hotmike

In Vanilla : the complete clothing system is hardcoded + gifs are composed of multiple images (the old way of doing gifs in renpy) so I won't bother explaining, let's move on to WTM.

GIFS (for WTM)
"gifs" in WTM are .webm only. It's an actual no sound video, not really a gif.
In game/tl/animation.py u'll find the findWebm() function. The _tag argument in used in examevents.py to know what to look for.
You can also see the frame by frame vanilla system after that function.

Example (in examevents.py) :
1651031223251.png
At the top you have one .gifs for the vanilla system as I didn't found any .webm to replace it.

After you have the WTM system using renpy's movie system. The _tag here is passed to findWebm() as "find me whatever .webm fits this action"

findWebm() will select a random .webm from a list according to the _tag u've asked (that's where you put the name of the .webm file) :
1651031622377.png
(.webm are located in game/vids. Don't bother with images/events/gifs, the goal here is to replace old frame by frame system, it's just there for things I didn't find replacement for)

I've hardcoded .webm in the findWebm() function as it's the most efficient format in this case.

I'll make another post for clothing & images =>
 
Last edited:
  • Like
Reactions: hotmike

imetus

Member
Aug 29, 2017
212
102
For those who got an error from collecting too many panties at the end of an exam, in the retrospect game file there's a line that limits your collection to "<= 33".
If you change 33 to 32 or remove the equal mark, the error will stop (but you'll also stop collecting panties).
 

Ninoss

Active Member
Donor
Game Developer
Nov 20, 2017
630
1,140
CLOTHING (for WTM)

For clothing there is 3 important things to know :
1) The database in DB.py
2) The generic image in images/clothing
3) The gameplay images in images/exam


1) The database
1651032687330.png

In DB.py you will find the "configuration" for each cloth. I've commented arguments at the top for ease of use.
name : diplayed name in game
corruption : it's missedspelled but that's the "inhibition" needed for the girl to choose this cloth. (I mean "inhibition" stat should be "corruption" but whatever)
armor : that's how thick the clothing is, will reduce impact of interactions.
type : this matches images/clothing folders
coversPussy, coversAss, coversBoobs, coversBra, coversPanty, seethrough, isOuter : pretty self explanatory, True/False
baseImgInfo : "base" name of the file

If you don't want to add "new" cloth but only variations, you don't even need to bother with 1)
If you want to ceate a new kind of cloth, add it to the related list. (remember : never put a comma at the end of a list)


2) The generic image in images/clothing

Each cloth have a "generic" image used before the exam and in the girl's overview menu.
Nothing more to say, just don't forget to add a .webp generic image as "images/clothing/type/baseImgInfo.webp" if you're adding a new kind of cloth.


3) The gameplay images in images/exam

Okay, each cloth will try to load an image for each body part whatever whatever.
Here a sneak peak of the clothing class :
1651033415929.png

The following folders will be searched for imgs :
images/exam/boobs_cover/
images/exam/pussies_cover/
images/exam/ass_cover/
images/exam/leg_cover/

Obv, if you are making a panty, don't put an img in "images/exam/boobs_cover/" as your don't want your panty img to be displayed on the girl's boobs..

You can put multiple variations of a cloth, just number them. The first img would be baseImgInfo.webp and next ones would be baseImgInfo1.webp, baseImgInfo2.webp, baseImgInfo3.webp ...

The "_b" stands for the bare version, same naming : baseImgInfo_b.webp, baseImgInfo_b1.webp, baseImgInfo_b2.webp...
Bare versions work for both tops and bottoms, it just mean "no underwear in this img".

A good example is the transparent top.
Database entry in DB.py :
1651033870438.png
Generic img in images/exam/boobs_cover :
1651033943395.png
Variations in images/exam/boobs_cover :
1651033907534.png


When WTM will try to load all imgs for a clothing piece, it will also try to "match" numbers.
For example, u found this red dress and it would be very cool to show the entire red dress without missmatched colors from another variation, the games does that.

in images/exam/pussies_cover :
1651034251001.png
in images/exam/boobs_cover :
1651034280056.png

Notice that the red dree is numbered as 3 so it will try to match 3 in every folders.
Also notice the the red dress as a bare version (mostly for fun) and not the others, as the game is searching for "3", only this dress will show a bare version.

This match system only works "whithin" a cloth, I mean we're talking about the red dress. (It's won't match "outfits")

As .webm for vids, I harcoded .webp for pictures as it's a really light format. (I almost saves 35% game size with this)

You don't really need to understand how the logic behind this works and some combination might be fucked up.
WTM will always try to fall back to whatever pic he has in the cloth data, if it really don't find shit, it will fall back to body parts images of the girls.
 
Last edited:

Ninoss

Active Member
Donor
Game Developer
Nov 20, 2017
630
1,140
Some tech questions:
- Why are the videos loaded as single frames?
- Can we add video (webm) files, just like images?
- What are the size conditions for images. I notice the scaling is not percentage, but a forced size, distorting new images
- Is there a way to keep parts of the dresses together? In numbering?
- Does the _b addition stand for bare? As in no bra or no panties?
- How to number _b files?
- Is there a way to keep boob sizes together? Now a large bra will uncover a micro set of boobs.... :(
To repond point by point :

- Why are the videos loaded as single frames?
Don't bother, use the renpy's movie system as described in the post I've made.

- Can we add video (webm) files, just like images?
Yes, follow instructions in the post I've made.

- What are the size conditions for images. I notice the scaling is not percentage, but a forced size, distorting new images
It's fucked up. Just add images with the good ratio. Face, pussy and legs are 1:1. Boobs is 1:1.765. Ass is 1:2.
At some point I'll probably redo a part of the images to avoid the 1:1.1765 ratio that gives me anxiety ^^

- Is there a way to keep parts of the dresses together? In numbering?
Yes, follow instructions in the post I've made, WTM supports parts matching.

- Does the _b addition stand for bare? As in no bra or no panties?
Yes

- How to number _b files?
Same as "normal" files

- Is there a way to keep boob sizes together? Now a large bra will uncover a micro set of boobs....
As for having ebony skin color or different body type, it's tricky to implement. It requires a shit tons of assets and logic under the hood. Maybe one day but for now it's just not supported.
 
  • Like
Reactions: dusty stu

dusty stu

Well-Known Member
Jan 24, 2018
1,714
1,538
CLOTHING (for WTM)

For clothing there is 3 important things to know :
1) The database in DB.py
2) The generic image in images/clothing
3) The gameplay images in images/exam


1) The database
View attachment 1779104

In DB.py you will find the "configuration" for each cloth. I've commented arguments at the top for ease of use.
name : diplayed name in game
corruption : it's missedspelled but that's the "inhibition" needed for the girl to choose this cloth. (I mean "inhibition" stat should be "corruption" but whatever)
armor : that's how thick the clothing is, will reduce impact of interactions.
type : this matches images/clothing folders
coversPussy, coversAss, coversBoobs, coversBra, coversPanty, seethrough, isOuter : pretty self explanatory, True/False
baseImgInfo : "base" name of the file

If you don't want to add "new" cloth but only variations, you don't even need to bother with 1)
If you want to ceate a new kind of cloth, add it to the related list. (remember : never put a comma at the end of a list)


2) The generic image in images/clothing

Each cloth have a "generic" image used before the exam and in the girl's overview menu.
Nothing more to say, just don't forget to add a .webp generic image as "images/clothing/type/baseImgInfo.webp" if you're adding a new kind of cloth.


3) The gameplay images in images/exam

Okay, each cloth will try to load an image for each body part whatever whatever.
Here a sneak peak of the clothing class :
View attachment 1779116

The following folders will be searched for imgs :
images/exam/boobs_cover/
images/exam/pussies_cover/
images/exam/ass_cover/
images/exam/leg_cover/

Obv, if you are making a panty, don't put an img in "images/exam/boobs_cover/" as your don't want your panty img to be displayed on the girl's boobs..

You can put multiple variations of a cloth, just number them. The first img would be baseImgInfo.webp and next ones would be baseImgInfo1.webp, baseImgInfo2.webp, baseImgInfo3.webp ...

The "_b" stands for the bare version, same naming : baseImgInfo_b.webp, baseImgInfo_b1.webp, baseImgInfo_b2.webp...
Bare versions work for both tops and bottoms, it just mean "no underwear in this img".

A good example is the transparent top.
Database entry in DB.py :
View attachment 1779120
Generic img in images/exam/boobs_cover :
View attachment 1779122
Variations in images/exam/boobs_cover :
View attachment 1779121


When WTM will try to load all imgs for a clothing piece, it will also try to "match" numbers.
For example, u found this red dress and it would be very cool to show the entire red dress without missmatched colors from another variation, the games does that.

in images/exam/pussies_cover :
View attachment 1779125
in images/exam/boobs_cover :
View attachment 1779126

Notice that the red dree is numbered as 3 so it will try to match 3 in every folders.
Also notice the the red dress as a bare version (mostly for fun) and not the others, as the game is searching for "3", only this dress will show a bare version.

This match system only works "whithin" a cloth, I mean we're talking about the red dress. (It's won't match "outfits")

As .webm for vids, I harcoded .webp for pictures as it's a really light format. (I almost saves 35% game size with this)

You don't really need to understand how the logic behind this works and some combination might be fucked up.
WTM will always try to fall back to whatever pic he has in the cloth data, if it really don't find shit, it will fall back to body parts images of the girls.
dang bro remember to eat and sleep while making free internet porn
 
  • Hey there
Reactions: Ninoss

gfw

New Member
Mar 21, 2017
7
0
dusty stu hotmike

In Vanilla : the complete clothing system is hardcoded + gifs are composed of multiple images (the old way of doing gifs in renpy) so I won't bother explaining, let's move on to WTM.

GIFS (for WTM)
"gifs" in WTM are .webm only. It's an actual no sound video, not really a gif.
In game/tl/animation.py u'll find the findWebm() function. The _tag argument in used in examevents.py to know what to look for.
You can also see the frame by frame vanilla system after that function.

Example (in examevents.py) :
View attachment 1779083
At the top you have one .gifs for the vanilla system as I didn't found any .webm to replace it.

After you have the WTM system using renpy's movie system. The _tag here is passed to findWebm() as "find me whatever .webm fits this action"

findWebm() will select a random .webm from a list according to the _tag u've asked (that's where you put the name of the .webm file) :
View attachment 1779093
(.webm are located in game/vids. Don't bother with images/events/gifs, the goal here is to replace old frame by frame system, it's just there for things I didn't find replacement for)

I've hardcoded .webm in the findWebm() function as it's the most efficient format in this case.

I'll make another post for clothing & images =>
Somehow find out that findwebm is customer defined before reading this post
 

hotmike

Member
Jan 28, 2018
488
306
The game will crash if you have added and/or renames images/vids while loading a saved game. Somehow the list is not refreshed at game start, but only at init.
 

hotmike

Member
Jan 28, 2018
488
306
findWebm() will select a random .webm from a list according to the _tag u've asked (that's where you put the name of the .webm file) :
I tried this, added several new vids with the correct name, but no random choice is made. Only the first one is shown for all actions.
 
4.20 star(s) 23 Votes