CreatorsOk
vrengames
vrengames

patreon


Half Off Clothing Implemented (sort of)

A couple of update cycles ago I added a number of body region images to LR2. The original use for these regions were to give me a way to define what sections of a body a piece of clothing should constrain. If a body region was constrained clothing under the constraining layer would be limited to only appearing within the body silhouette, stopping lower layers from clipping through the sides of higher layers. After that update I extended this feature to add lactation marks (represented as a nipple region that had all clothing slightly hidden, as if clothing was wet and transparent) when pregnant girls were aroused, and considered how else I could use this tool.

One thing I've always wanted to improve with LR2 deals with clothing. In the current version of the game each piece of clothing is a binary thing: it is either fully on or fully off. This has really cut down on my ability to have written scenes feel spontaneous or sudden. Having a fully implemented system for identifying and hiding regions of a characters body opens up a new possibility: having clothing that has been pulled "half off". This could be a tank top pulled down to reveal a girls tits (but left around her stomach), skirt pulled up to give you a better look, or panties pulled to the side so you can start having sex.

I implemented a proof of concept for the image drawing system last update, limited to two clothing items that had all of the half-off regions defined correctly. For the last couple of days I have expanded that system. All of the current clothing items now have, when appropriate, have a half off stage. Multi slot clothing items like dresses have separate half off regions for their top and bottom, letting you pull the bottom of a dress up separate from pulling out a girls boobs. I have also updated all of the logic that checks to see if you can have sex, see a girls boobs, etc. to properly account for items that are half off and no longer blocking anything.

What I haven't done yet is add a way to half-undress a girl while playing yet. This is going to require some tweaks to the way outfits are judged, how you strip girls while having sex, and how they tidy themselves up after. I want pulling clothing half off to be the quicker, and more accessible way to strip a girl down while having sex. It's currently possible to get into a situation where a girl would have sex with you, but doesn't want to get undressed first.

All of that will be done in v0.32, added alongside a bunch of new content. The groundwork for half-off clothing will be present in v0.31 though, so if you're a modder you can poke around and get an early look at what's coming. There is one improvement that will be showing up in the public version: the body region images are now properly being cropped, which has reduced the amount of memory (and thus time) it takes to display a character.

v0.31.1 is coming out tomorrow, so now I've got to get back to bug hunting!

Comments

``` I'm sorry, but an uncaught exception occurred. While loading <'MatrixColor' <'MatrixColor' <'Image' u'character_images/Sandal_Heels_stand3_standard_body_AA.png'> (1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0)> (1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1)>: File "renpy/common/000statements.rpy", line 531, in execute_call_screen IOError: Couldn't find file 'character_images/Sandal_Heels_stand3_standard_body_AA.png'. -- Full Traceback ------------------------------------------------------------ Full traceback: File "script.rpyc", line 9712, in script call File "script.rpyc", line 9902, in script File "renpy/ast.py", line 1949, in execute File "renpy/ast.py", line 1937, in call File "renpy/statements.py", line 277, in call File "renpy/common/000statements.rpy", line 531, in execute_call_screen File "renpy/exports.py", line 2905, in call_screen File "renpy/ui.py", line 297, in interact File "renpy/display/core.py", line 2702, in interact File "renpy/display/core.py", line 3194, in interact_core File "renpy/display/core.py", line 2094, in draw_screen File "renpy/display/render.pyx", line 490, in renpy.display.render.render_screen (gen/renpy.display.render.c:6805) File "renpy/display/render.pyx", line 259, in renpy.display.render.render (gen/renpy.display.render.c:3520) File "renpy/display/layout.py", line 722, in render File "renpy/display/render.pyx", line 166, in renpy.display.render.render (gen/renpy.display.render.c:4075) File "renpy/display/render.pyx", line 259, in renpy.display.render.render (gen/renpy.display.render.c:3520) File "renpy/display/layout.py", line 722, in render File "renpy/display/render.pyx", line 166, in renpy.display.render.render (gen/renpy.display.render.c:4075) File "renpy/display/render.pyx", line 259, in renpy.display.render.render (gen/renpy.display.render.c:3520) File "renpy/display/layout.py", line 722, in render File "renpy/display/render.pyx", line 166, in renpy.display.render.render (gen/renpy.display.render.c:4075) File "renpy/display/render.pyx", line 259, in renpy.display.render.render (gen/renpy.display.render.c:3520) File "renpy/display/screen.py", line 675, in render File "renpy/display/render.pyx", line 166, in renpy.display.render.render (gen/renpy.display.render.c:4075) File "renpy/display/render.pyx", line 259, in renpy.display.render.render (gen/renpy.display.render.c:3520) File "renpy/display/layout.py", line 722, in render File "renpy/display/render.pyx", line 166, in renpy.display.render.render (gen/renpy.display.render.c:4075) File "renpy/display/render.pyx", line 259, in renpy.display.render.render (gen/renpy.display.render.c:3520) File "renpy/display/layout.py", line 722, in render File "renpy/display/render.pyx", line 166, in renpy.display.render.render (gen/renpy.display.render.c:4075) File "renpy/display/render.pyx", line 259, in renpy.display.render.render (gen/renpy.display.render.c:3520) File "renpy/display/layout.py", line 722, in render File "renpy/display/render.pyx", line 166, in renpy.display.render.render (gen/renpy.display.render.c:4075) File "renpy/display/render.pyx", line 259, in renpy.display.render.render (gen/renpy.display.render.c:3520) File "renpy/display/layout.py", line 336, in render File "renpy/display/render.pyx", line 166, in renpy.display.render.render (gen/renpy.display.render.c:4075) File "renpy/display/render.pyx", line 259, in renpy.display.render.render (gen/renpy.display.render.c:3520) File "renpy/display/im.py", line 583, in render File "renpy/display/im.py", line 266, in get File "renpy/display/im.py", line 1259, in load File "renpy/display/im.py", line 266, in get File "renpy/display/im.py", line 1259, in load File "renpy/display/im.py", line 266, in get File "renpy/display/im.py", line 628, in load File "renpy/loader.py", line 576, in load IOError: Couldn't find file 'character_images/Sandal_Heels_stand3_standard_body_AA.png'. ```

Ace McGuire

[code] I'm sorry, but an uncaught exception occurred. While running game code: File "game/script.rpy", line 10011, in script call call talk_person(picked_option) from _call_talk_person File "game/script.rpy", line 10124, in script call $ _return.call_action(the_person) File "game/game_roles/role_student.rpy", line 159, in script call call student_study_home(the_person) from _call_student_study_home File "game/game_roles/role_student.rpy", line 456, in script call call student_punish_hub_label(the_person) from _call_student_punish_hub_label File "game/game_roles/role_student.rpy", line 1014, in script call $ renpy.call(punishment_label, the_person, True, wants_to_fail, total_successes, total_failures) File "game/game_roles/role_student.rpy", line 1248, in script if the_person.get_other_person("being submissive"): File "game/game_roles/role_student.rpy", line 1248, in if the_person.get_other_person("being submissive"): AttributeError: 'Person' object has no attribute 'get_other_person' Windows-8-6.2.9200 Ren'Py 7.3.5.606 Lab Rats 2 - Down to Business v0.31.0 Sat Aug 08 06:53:24 2020 [/code]

Dreamdayer

[code] I'm sorry, but an uncaught exception occurred. While running game code: File "game/script.rpy", line 10011, in script call call talk_person(picked_option) from _call_talk_person File "game/script.rpy", line 10124, in script call $ _return.call_action(the_person) File "game/game_roles/role_student.rpy", line 159, in script call call student_study_home(the_person) from _call_student_study_home File "game/game_roles/role_student.rpy", line 456, in script call call student_punish_hub_label(the_person) from _call_student_punish_hub_label File "game/game_roles/role_student.rpy", line 1014, in script call $ renpy.call(punishment_label, the_person, True, wants_to_fail, total_successes, total_failures) File "game/game_roles/role_student.rpy", line 1180, in script $ the_item = the_person.outfit.remove_random_lower(top_layer_first = True, exclude_feet = True, do_not_remove = True) File "game/game_roles/role_student.rpy", line 1180, in $ the_item = the_person.outfit.remove_random_lower(top_layer_first = True, exclude_feet = True, do_not_remove = True) TypeError: remove_random_lower() got an unexpected keyword argument 'exclude_feet' Windows-8-6.2.9200 Ren'Py 7.3.5.606 Lab Rats 2 - Down to Business v0.31.0 Sat Aug 08 06:42:13 2020 [/code]

Dreamdayer

[code] I'm sorry, but an uncaught exception occurred. While running game code: File "game/script.rpy", line 10011, in script call call talk_person(picked_option) from _call_talk_person File "game/script.rpy", line 10124, in script call $ _return.call_action(the_person) File "game/game_roles/role_student.rpy", line 159, in script call call student_study_home(the_person) from _call_student_study_home File "game/game_roles/role_student.rpy", line 456, in script call call student_punish_hub_label(the_person) from _call_student_punish_hub_label File "game/game_roles/role_student.rpy", line 1014, in script call $ renpy.call(punishment_label, the_person, True, wants_to_fail, total_successes, total_failures) File "game/game_roles/role_student.rpy", line 1168, in script if not the_person.outfit.vagina_available() not the_person.outfit.wearing_panties(): #ie. she's going commando. SyntaxError: invalid syntax (game/game_roles/role_student.rpy, line 1168) Windows-8-6.2.9200 Ren'Py 7.3.5.606 Lab Rats 2 - Down to Business v0.31.0 Sat Aug 08 06:41:52 2020 [/code]

Dreamdayer

Bug - I've had it where if you ask for a BJ after a Friday night date the character goes down on her knees but the image jiggles as if she's standing up, which means her face is the part of the image that's moving about. Weird to watch to say the least. Only had this happen since 3.0 onwards.

Dreamdayer

"If you are a modder" ;)

I'm a little hesitant to mention this one as I abuse it frequently, but if you get a girl to 70+ arousal and then stop, you can repeat the "No, please let me cum!" +2 Obedience cycle arbitrarily many times. (Not always - sometimes, for low obedience, they'll demand that they take over instead - but this doesn't happen often past around 110-120 obedience, so once you get them past that you can shoot them to 200 or so easily). As the only serum that currently permanently changes obedience is the bimbo one, I suspect that it's supposed to be harder to get them to high obedience than this. :)

GAZZA

Feature request: would it be possible to see, on the details screen, what the permanent value of Obedience and Love are, and Core Sluttiness? And could there perhaps be some sort of "bleed over" effect of temporary Love/Obedience to permanent Love/Obedience, in a similar way to how Sluttiness works?

GAZZA

A couple of bugs I've noticed: 1. It's possible to be on a Paramour date and have their SO interrupt you more than once. If this happens they can be assigned multiple Girlfriend roles if you decide to fuck her anyway on each occasion. 2. Possibly less of a bug and more of an observation: if you construct a serum that contains Libido Enhancements (which gives +10 temporary Sluttiness), then when the serum wears off the lady loses 10 core Sluttiness. I believe it should not remove core Sluttiness from this; as currently implemented giving multiple doses of this serum (and no Suggestion serums) will quickly tank Sluttiness, which is definitely not what you'd expect from a property designed to increase it. 3. Again, this may be a future enhancement rather than a bug, but it is possible to get Christine as a Paramour and then have her break up with her husband (either by having him interrupt you, or just getting her to 100 Love and telling her to dump him). Having done this, if you then Tutor Emily in the evening and stay for dinner, Christine will still get a phone call from her husband saying he's going to be late. Since the dialogue for the husband interrupting you is tailored (he says that he won't be working late so often) I suspect this is an oversight, or something you intend to build on later - but I thought I'd mention it.

GAZZA

One think you could do is do a hierarchy of clothing. (TIER 1 -basic tanktop, TIER 2 - that can have either side pulled down, or the top pulled up. TIER 3 - Top all the way down, bottom over tits.). Then just have Daz render those clothing items in the new position. Code the scenes so as it starts the girl gets a choice on how the progresses (RNG for normal, left down, right down, bottom up, then let the scene go from there.). Then the player can choose how to interact with the girl, or choose to let her continue how she wants.

Perversity


More Models and Creators