XaiJu
vrengames
vrengames

patreon


Lab Rats 2 v0.40.1 Release!

Lab Rats 2 v0.40.1 is Live! Get it Here!

PC: Lab Rats 2 v0.40.1-PC
Mac: Lab Rats 2 v0.40.1-Mac
Android: Lab Rats 2 v0.40.1-Android 

Lab Rats 2 v0.40.1 is finished it's week of bug testing by patrons and ready for it's public release! This update focuses on improving the stability and maintainability of the LR2 code base. It introduces a unit testing framework along with a suite of fully automated unit tests. These tests will help catch the majority of bugs before a version is released and ensure a smoother gameplay experience. An integration testing framework has also been added, which should mean more progress breaking bugs caught during development rather than in your long running game! The unit and integration testing frameworks support additional tests being added by modders, so they can ensure their additions are being tested as well. In total 129 unit tests and 12 integration tests have been added. Future bug fixes will include the creation of additional tests to prevent similar bugs from reappearing later in development.

It didn't feel right to turn out a new LR2 update without including a little bit of player facing content, so I have also written two new random events - one for Gabrielle and one for her mother Rebecca. These events can be triggered at their apartment throughout the game, with varying results depending on their stats. I have also added a new "explore" option for Jennifer's room as an experiment before potentially adding similar events for all characters.

Enjoy!

Changelog (v0.39.3 to v0.40.1):

*CHANGES AND ADDITIONS*

- Added Unit Testing framework.

- Updated Room definitions to contain more default arguments. Now only requires a name definition.

- add_employee functions now set work schedule automatically instead of requiring it to be set seperately.

- add_employee functions now apply the employee_role themselves.

- Renamed room variable formalName to formal_name to match naming convention in rest of LR2.

- Girls max energy may now become negative. Prevents issues with minimum values when multiple serums are applied.

- Added Integration Testing framework.

- Added unit tests. 128 initial unit tests added.

- Added integration tests. 12 integration tests added.

- Added Gabrielle LTE triggered when visiting her in her room.

- Added Rebecca LTE triggered when visiting her apartment when she is home alone.

- Added ability to explroe Jennifers room.

- Tidied up Room definitions for standard locations.

- Extended integration testing framework to include support for integration tests for mods.

- Girls now stop asking if they should strip while having sex after you tell them no the first time.


*BUG FIXES*

- Fixed novelty score not being modified for girls, despite being reported as doing so.

- Fixed focus debt incorrectly interacting with reducing debt.

- Fixed novelty score becoming extremely positive if a large negative number was subtracted.

- Fixed primary speaker in group conversations not being updated when changed at the same time as someone was removed.

- Fixed skip_condom flag not being respected in some encounters.

- Fixed Cowgirl outro not providing proper Clarity release.

- Fixed several crashes during Lily's Instapic events.

- Fixed several issues with existing Instapic, DikDok, and OnlyFanatics content.

- Fixed girl arousal gains not displaying properly when total arousal was less than 20.

- Fixed bug causing girls not to get redressed when judging their outfits.

- Fixed bug with Alexia's free purchase of advertising_license_policy not toggling the policy on by default.

- Company model must now be from the marketing department.

- Fixed crash in company model event.

Comments

Also, the Blood Brain Penetration serum trait has a serum research cost that doesn't match its description. It says it should be +120 to the research cost, but it actually only does +25.

A few fixes for bugs I haven't seen reported anywhere else yet: diff -ur orig/Lab_Rats_2-v0.40.1-pc/game/game_roles/role_student.rpy Lab_Rats_2-v0.40.1-pc/game/game_roles/role_student.rpy --- orig/Lab_Rats_2-v0.40.1-pc/game/game_roles/role_student.rpy 2021-05-01 08:21:52.000000000 -0700 +++ Lab_Rats_2-v0.40.1-pc/game/game_roles/role_student.rpy 2021-06-04 00:13:04.156986200 -0700 @@ -1200,7 +1200,7 @@ if wants_to_fail or the_person.obedience >= 125: the_person "Right away [the_person.mc_title]." else: - $ the_item = the_person.get_lower_top_layer() + $ the_item = the_person.outfit.get_lower_top_layer() the_person "Do I really need to? Can't you spank me over my [the_item.display_name]." mc.name "That's a little too much padding. Come on, strip." the_person "Fine..." diff -ur orig/Lab_Rats_2-v0.40.1-pc/game/personality_types/general_personalities/relaxed_personality.rpy Lab_Rats_2-v0.40.1-pc/game/personality_types/general_personalities/relaxed_personality.rpy --- orig/Lab_Rats_2-v0.40.1-pc/game/personality_types/general_personalities/relaxed_personality.rpy 2021-04-03 10:13:40.000000000 -0700 +++ Lab_Rats_2-v0.40.1-pc/game/personality_types/general_personalities/relaxed_personality.rpy 2021-06-04 04:33:32.568020000 -0700 @@ -1690,7 +1690,7 @@ if the_person.relationship != "Single": $ so_title = SO_relationship_to_title(the_person.relationship) the_person.char "Ah, I should have told you to pull out, but it just feels so good..." - the_person.cahr "We shouldn't do that again though, if I get pregnant I'm going to have to explain it to my [so_title]." + the_person.char "We shouldn't do that again though, if I get pregnant I'm going to have to explain it to my [so_title]." else: the_person.char "Ah, I really should have told you to pull out... I'm not on the pill..." diff -ur orig/Lab_Rats_2-v0.40.1-pc/game/punishments.rpy Lab_Rats_2-v0.40.1-pc/game/punishments.rpy --- orig/Lab_Rats_2-v0.40.1-pc/game/punishments.rpy 2021-03-30 08:38:16.000000000 -0700 +++ Lab_Rats_2-v0.40.1-pc/game/punishments.rpy 2021-05-30 01:59:33.130527700 -0700 @@ -835,7 +835,7 @@ the_person "Right away, [the_person.mc_title]." $ the_person.add_role(employee_humiliating_work_role) - $ clear_action = Action("Clear employee busywork", employee_humiliating_work_role, "employee_humiliating_work_remove_requirement", args = the_person, requirement_args = [the_person, day + 7]) + $ clear_action = Action("Clear employee busywork", employee_humiliating_work_remove_requirement, "employee_humiliating_work_remove_label", args = the_person, requirement_args = [the_person, day + 7]) $ mc.business.mandatory_crises_list.append(clear_action) return diff -ur orig/Lab_Rats_2-v0.40.1-pc/game/side_effect_traits.rpy Lab_Rats_2-v0.40.1-pc/game/side_effect_traits.rpy --- orig/Lab_Rats_2-v0.40.1-pc/game/side_effect_traits.rpy 2021-04-13 07:12:56.000000000 -0700 +++ Lab_Rats_2-v0.40.1-pc/game/side_effect_traits.rpy 2021-05-13 14:08:01.800734700 -0700 @@ -53,7 +53,7 @@ def toxic_on_apply(the_person, the_serum, add_to_log): the_person.serum_tolerance += -1 - def toxic_on_remove(teh_person, the_serum, add_to_log): + def toxic_on_remove(the_person, the_serum, add_to_log): the_person.serum_tolerance += 1 label instantiate_side_effect_traits(): #Creates all of the default LR2 serum trait objects.

In the role_model.rpy file the line $ the_girl.call_dialogue("cum_pullout") should be $ the_person.call_dialogue("cum_pullout"). This seems to cause your ads to give bad rates.

In the game/crises/limited_time_crises folder is a file called sleep_LTE. Open it with notepad and do a search for climax_option, it needs to be climax_options. For example $ climax_option.append(["Cum down her throat.","throat" should be $ climax_options.append(["Cum down her throat.","throat", they're about 3 that need to be changed.

Additional typos with file and line numbers on the main screen "Raw Supplys" => Supplies tutorial.rpy:111: "You leave [mom.possessive_title] and sister in the kitchen to talk retreat to your room for some privacy." => "talk and retreat" and maybe change "sister" to a dynamic field like mom is Many places - reciev* instead of receiv* tutorial.rpy:106: mom.char "Your brother is starting a business. I'm his first +investor." tutorial.rpy:54: "You pull on the locked door again, then take a step back and look around for another enterance you might have missed. You don't see any." enterance =>entrance family_LTE.rpy:451: "You strip down and climb on top of her. The tip of your hard cock runs along the enterance of her cunt and finds it dripping wet." enterance =>entrance There are 3 usages of mc.the_name. I got an error for one. I think they should be mc.the_title role_employee.rpy:494, lily_personality.rpy:209, & mom_personality.rpy:546 one or both of role_employee_busywork.rpy:41: the_person "Do you have a moment [the_person.title]?" role_employee_humiliating_work.rpy:43: the_person "Do you have a moment [the_person.title]?" should be the_person.mc_title role_aunt.rpy:1349: "Cards sound like like fun" remove extra like role_aunt.rpy:1427: the_mom "It's a card game that was popular back when me any my sister were in school." any => and role_mother.rpy:638-639: womans perspective and womans charm (both lines) womans=>woman's role_aunt.rpy:2004: "It's a close round, but by working together [opponent_a.possessive_title] and [opponent_b.possessive_title] are beat you and secure the win." either "are able to beat" or just "beat" role_aunt.rpy:1805: "Despite her complains " complains => complaints

tegalega

Probably related - same 'Role' object is not callable for taking pictures with Alex File "game/script.rpy", line 257, in script call call talk_person(picked_option) from _call_talk_person File "game/script.rpy", line 370, in script call $ _return.call_action(the_person) File "game/game_roles/role_model.rpy", line 189, in script call call advance_time from _call_advance_time_20 File "game/script.rpy", line 411, in script if crisis.is_action_enabled(): File "game/script.rpy", line 411, in if crisis.is_action_enabled(): File "game/major_game_classes/game_logic/Action.rpy", line 61, in is_action_enabled requirement_return = self.check_requirement(extra_args) File "game/major_game_classes/game_logic/Action.rpy", line 58, in check_requirement return self.requirement(*extra_args) TypeError: 'Role' object is not callable

tegalega

And also this any time Jennifer/Lily actually stays asleep. ``` I'm sorry, but an uncaught exception occurred. While running game code: File "game/script.rpy", line 278, in script call $ picked_event[1].call_action(picked_event[0]) #Run the action with the person as an extra argument. File "game/crises/limited_time_crises/sleep_LTE.rpy", line 168, in script call call nightime_grope(the_person) from _call_nightime_grope #Break this out into a seperate function so we can loop easily. Returns True if our action woke her up File "game/crises/limited_time_crises/sleep_LTE.rpy", line 468, in script call call nightime_grope(the_person, True) from _call_nightime_grope_3 File "game/crises/limited_time_crises/sleep_LTE.rpy", line 312, in script call call nightime_grope(the_person, masturbating) from _call_nightime_grope_1 File "game/crises/limited_time_crises/sleep_LTE.rpy", line 637, in script call call sleep_climax_manager(the_person, face_allowed = True, tits_allowed = True, throat_allowed = True, straddle = True) File "game/crises/limited_time_crises/sleep_LTE.rpy", line 831, in script $ climax_option.append(["Cum down her throat.","throat"]) File "game/crises/limited_time_crises/sleep_LTE.rpy", line 831, in $ climax_option.append(["Cum down her throat.","throat"]) NameError: name 'climax_option' is not defined -- Full Traceback ------------------------------------------------------------ Full traceback: File "game/script.rpy", line 278, in script call $ picked_event[1].call_action(picked_event[0]) #Run the action with the person as an extra argument. File "game/crises/limited_time_crises/sleep_LTE.rpy", line 168, in script call call nightime_grope(the_person) from _call_nightime_grope #Break this out into a seperate function so we can loop easily. Returns True if our action woke her up File "game/crises/limited_time_crises/sleep_LTE.rpy", line 468, in script call call nightime_grope(the_person, True) from _call_nightime_grope_3 File "game/crises/limited_time_crises/sleep_LTE.rpy", line 312, in script call call nightime_grope(the_person, masturbating) from _call_nightime_grope_1 File "game/crises/limited_time_crises/sleep_LTE.rpy", line 637, in script call call sleep_climax_manager(the_person, face_allowed = True, tits_allowed = True, throat_allowed = True, straddle = True) File "game/crises/limited_time_crises/sleep_LTE.rpy", line 831, in script $ climax_option.append(["Cum down her throat.","throat"]) File "C:\Users\Andrew\Documents\MEGAsync Downloads\Lab_Rats_2-v0.40.1-pc\renpy\ast.py", line 927, in execute renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store) File "C:\Users\Andrew\Documents\MEGAsync Downloads\Lab_Rats_2-v0.40.1-pc\renpy\python.py", line 2028, in py_exec_bytecode exec bytecode in globals, locals File "game/crises/limited_time_crises/sleep_LTE.rpy", line 831, in $ climax_option.append(["Cum down her throat.","throat"]) NameError: name 'climax_option' is not defined Windows-8-6.2.9200 Ren'Py 7.3.5.606 Lab Rats 2 - Down to Business v0.40.1 Sat May 15 13:27:24 2021 ```

TheCount991

I'm getting this whenever I try to pass time. ``` I'm sorry, but an uncaught exception occurred. While running game code: File "game/script.rpy", line 260, in script call $ picked_option.call_action() File "game/general_actions/location_actions/business_actions.rpy", line 150, in script call call advance_time from _call_advance_time_5 File "game/script.rpy", line 411, in script if crisis.is_action_enabled(): File "game/script.rpy", line 411, in if crisis.is_action_enabled(): File "game/major_game_classes/game_logic/Action.rpy", line 61, in is_action_enabled requirement_return = self.check_requirement(extra_args) File "game/major_game_classes/game_logic/Action.rpy", line 58, in check_requirement return self.requirement(*extra_args) TypeError: 'Role' object is not callable -- Full Traceback ------------------------------------------------------------ Full traceback: File "game/script.rpy", line 260, in script call $ picked_option.call_action() File "game/general_actions/location_actions/business_actions.rpy", line 150, in script call call advance_time from _call_advance_time_5 File "game/script.rpy", line 411, in script if crisis.is_action_enabled(): File "C:\Users\Andrew\Documents\MEGAsync Downloads\Lab_Rats_2-v0.40.1-pc\renpy\ast.py", line 1845, in execute if renpy.python.py_eval(condition): File "C:\Users\Andrew\Documents\MEGAsync Downloads\Lab_Rats_2-v0.40.1-pc\renpy\python.py", line 2059, in py_eval return py_eval_bytecode(code, globals, locals) File "C:\Users\Andrew\Documents\MEGAsync Downloads\Lab_Rats_2-v0.40.1-pc\renpy\python.py", line 2052, in py_eval_bytecode return eval(bytecode, globals, locals) File "game/script.rpy", line 411, in if crisis.is_action_enabled(): File "game/major_game_classes/game_logic/Action.rpy", line 61, in is_action_enabled requirement_return = self.check_requirement(extra_args) File "game/major_game_classes/game_logic/Action.rpy", line 58, in check_requirement return self.requirement(*extra_args) TypeError: 'Role' object is not callable Windows-8-6.2.9200 Ren'Py 7.3.5.606 Lab Rats 2 - Down to Business v0.40.1 Sat May 15 13:19:28 2021 ```

TheCount991

Found and fixed, thanks for the report!

Vren

While running game code: File "game/script.rpy", line 300, in script call call advance_time from _call_advance_time_15 File "game/script.rpy", line 397, in script python: File "game/script.rpy", line 399, in people.run_turn() File "game/major_game_classes/character_related/Person.rpy", line 356, in run_turn serum.run_on_remove(self) File "game/major_game_classes/serum_related/SerumDesign.rpy", line 112, in run_on_remove trait.run_on_remove(the_person, self) File "game/major_game_classes/serum_related/SerumTrait.rpy", line 65, in run_on_remove self.on_remove(the_person, the_serum, add_to_log) TypeError: lactation_hormones_on_remove() takes exactly 2 arguments (3 given) -- Full Traceback ------------------------------------------------------------ Full traceback: File "game/script.rpy", line 300, in script call call advance_time from _call_advance_time_15 File "game/script.rpy", line 397, in script python: File "D:\Lab_Rats_2-v0.40.1-pc\Lab_Rats_2-v0.40.1-pc\renpy\ast.py", line 927, in execute renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store) File "D:\Lab_Rats_2-v0.40.1-pc\Lab_Rats_2-v0.40.1-pc\renpy\python.py", line 2028, in py_exec_bytecode exec bytecode in globals, locals File "game/script.rpy", line 399, in people.run_turn() File "game/major_game_classes/character_related/Person.rpy", line 356, in run_turn serum.run_on_remove(self) File "game/major_game_classes/serum_related/SerumDesign.rpy", line 112, in run_on_remove trait.run_on_remove(the_person, self) File "game/major_game_classes/serum_related/SerumTrait.rpy", line 65, in run_on_remove self.on_remove(the_person, the_serum, add_to_log) TypeError: lactation_hormones_on_remove() takes exactly 2 arguments (3 given) Windows-8-6.2.9200 Ren'Py 7.3.5.606 Lab Rats 2 - Down to Business v0.40.1 Fri May 14 18:08:46 2021

NuTrix

I've been playing through again and enjoying the improvements, but I have some feedback about small typos and stuff. I'm not sure what the best place is to put these, so I'll just put them in here. I hope they help. Feedback for v0.40.1 Typos: Consistency between menus and dialogue (particularly with Lily) with InstaPic vs Insta-Pic Special names (like "Your mom", "Your friend") are always capitalised like proper names, even though they should only be capitalised at the start of sentences Effective HR performance and effective marketing performance are displayed incorrectly in the hiring screen. They are shown as skill*2 + stat1*3 + stat2 + _10_, when they should be shown as skill*2 + stat1*3 + stat2 + _5_ as they are calculated behind the scenes. To your mom: You should seduce your boss, "You don't _nessesarily_ need to start..." -> "You don't _necessarily_ need to start..." After your mom seduces boss: And I... convinced him that he should keep me around... "_Congradulate_ her"->"Congratulate her" Wedding notification: "congradulations"->"congratulations" Asking for cash from Insta-Pic: mr."I own a business"->Mr. "I own a business" When the girl is coming from the Skull Fuck position, "You're happily fucking X's warm, wet throat when you notice her _closer_ her eyes"->"_close_ her eyes". Then, "X is so lost in her orgasm that her body seems to have forgotten to gag at all, letting you get yourself balls deep with each _trust_"->"with each _thrust_" When you are coming down a girl's throat, "X's eyes go wide as she realises you don't intend to _ her off your cock as you cum"->Add word: "don't intend to _pull_ her off your cock as you cum" When a girl is suggesting you have an affair with her, "We both have _feeling_ for each other, right?"->"We both have _feelings" for each other, right?" When your aunt is trying to convince your mom to play strip euchre: "X considers it for a long moment, then sighs and _srugs_"->"sighs and _shrugs_" When playing strip euchre and your mom and Lily beat you and your aunt: "It's a close round, but by working together X and Y _are_ beat you and secure the win"->"by working together X and Y _ beat you" When removing pants: "X grabs her pants and pulls _it_ off"->"pulls _them_ off". It looks like there is support for plural pronouns because panties are "them", although in group clothing removal when multiple articles of clothing are removed at once it can get that wrong (evidence: in the advertising photoshoot, in the get naked option, it says "X slips off her panties, peeling _it_ away from her pussy.") When finishing up euchre for the night, your mom says: "This was a lot of fun X. Should we do it again next week_._"->"Should we do it again next week_?_" When Lily is taking topless photos for the first time: "X sticks her tongue out and unfocuses her eyes. She _trusts_ her chest forward and pants for added effect."->"She _thrusts_ her chest forward" After encouraging her: "Fuck, I'm _cuming_! I'm cumming X! Mmm!"->"Fuck, I'm _cumming_! I'm cumming X! Mmm!" For punishment > test serum > make her pay, "As this is a punishment, you have to _forfit_ the right to any special company access."->"_forfeit_ the right to any special company access." For special research action, where head researcher approaches you with extra trait + extra side effect, "The _varient_ she has created includes"->"The _variant_ she has created includes". Plus next line: "detangle"->"untangle" Telling your mom about Lily using InstaPic: "She's been putting _picture_ up on Instapic."->"She's been putting _pictures_ up on InstaPic." For the subtle masturbation event at work while the girl is nude: "subtley"->"subtly". Then, 5 screens after interrupting, "[the_person.possessive_title] swivels her chair around to face you, wiping her hand off onto her [the_item.display_name]." isn't processed properly. Water spill event in office: one of the options is "Ugh, that was so _embarrasing_."->"embarrassing". In aunt blowjob taboo break: "She thinks for a long moment. Her eyes keep _flick_ down to your crotch, then away."->"Her eyes keep _flicking_ down" In the company model advertising blowjob dialogue: "You feel X's _tounge_ lick at the bottom of your shaft"->"You feel X's _tongue_" When having (raw?) vaginal sex with certain girls (in this case, has the submissive trait, during the company model sex line): "Oh god, I think _you're_ cock is going to make me cum soon!"->"_your_ cock" After cumming in the company model during an advertising photshoot, the dialogue "Fuck, I told you to pull out! What if I got pregnant_._"->"What if I got pregnant_?_" During a Friday dinner date (possibly a fancy one) if the girl leaves for a bit, it says "X returns just as your _desert_ arrives."->"just as your _dessert_ arrives." Bugs/misc problems: After certain actions the person display returns without the image of the person. Includes visiting Nora to advance your research, initiating move of head researcher and then backing out, office punishment When an employee says "Oh, one second! I need to get back in uniform!" (such as when flirting with them while there are uniforms active, after the advertising photoshoot where the girl gets naked, or after sex that involves stripping them) they remove the uniform and instead change into their regular clothes. Speculation: This might be related to being dressed in something they think is too slutty for them, and then changing to their uniform is also too slutty for them, so they default to one of their normal outfits. This also seems to happen when a girl is just wearing clothes and you flirt with her, and after flirting she says "I'm sorry X, you shouldn't have to see me like this. I'll go and get cleaned up so I'm presentable again." despite nothing having changed, and her not actually changing her clothes after this. In the "visit someone..." menu on the map, clicking on a person's place moves it down and significantly to the left while it is selected When approaching the receptionist at X and Y Ltd Lobby, if you ask for someone who is not there you are rejected but the receptionist's portrait stays on screen When playing strip euchre for the first time and your mom and Lily beat you and your aunt, when your aunt goes to strip there is a crash (role_aunt.rpy, line 2049, in euchre_strip_description: renpy.say(person, "You don't really want me to take off my " + the_item.display_name + ", do you? I'll just have my underwear on..." TypeError: 'Person' object is not callable) When playing strip euchre (in my case with Lily vs your mom and your aunt), when someone has no more clothes to take off, I get a crash: role_aunt.rpy, line 2037, in euchre_strip_description: renpy.say(person, "Maybe we've taken this far enough...") TypeError: 'Person' object is not callable. Some company actions seem to continue to operate after hours (possibly related to policies like "Office Conduct Guidelines"?) meaning HR efficiency is not at 100% overnight/on weekends but it is when HR (and everyone else) is working. This is a bit frustrating because HR efficiency affects your own productivity, but your work doesn't decrease it like other people's do. When I had the office event being distracted by a girl's outfit, I chose the option to jerk off proudly at my seat. One of the girls offered to help, and I accepted, getting a blowjob. After I came, I ended the sex, and got a crash: crises.rpy, line 2992, $the_choice.review_outfit() AttributeError: 'unicode' object has no attribute 'review_outfit'. Followed by crises.rpy, line 2993, $helpful_people.remove(the_choice) ValueError: list.remove(x): x not in list. Followed by crises.rpy, line 3003, if len(helpful_people > 1): TypeError: object of type 'bool' has no len(). When having raw vaginal sex with the company model for advertising, I had a crash: role_model.rpy, line 652, $the_girl.call_dialogue("cum_pullout") NameError: name 'the_girl' is not defined. Things that would be nice: A screen where it is possible to see what special serums have been unlocked from Nora and how many (and possibly details for which ones) are left to unlock. Similar to an achievements screen. This would help a lot instead of having to track them separately. Being able to easily reorder outfits in the Outfit Manager (instead of clicking "Modify" then saving without changes, which moves that one outfit to the bottom, and doing that multiple times). Being able to see effective job performance in the Review Staff screen/in the person's Detailed Information would be very helpful and convenient. It is already possible to calculate this information from what is shown, and it is shown explicitly once (on hiring), but it is not possible to see again. Including this in the game would mean I don't need my extra spreadsheet to keep track of my employees' skills and balance my supply gain to consumption.

No error messages? It works on my device, so debugging it is going to be difficult unless there's some more information to go on.

Vren

I hate that bug!

Android version crashes on start up, anyone else run into issues downloading APK.

gravyliqour

Also it's less exciting but I found a somewhat stealthy bug: In punishments.rpy, line 838 reads: $ clear_action = Action("Clear employee busywork", employee_humiliating_work_role, "employee_humiliating_work_remove_requirement", args = the_person, requirement_args = [the_person, day + 7]) Probably mean to be: $ clear_action = Action("Clear employee humiliating_work", employee_humiliating_work_remove_requirement, "employee_humiliating_work_remove_label", args = the_person, requirement_args = [the_person, day + 7]) At the moment if someone is assigned humilating work it'll drop an error every time because your trying to call the entire 'employee_humiliating_work_role' class instead of the remove label. The name from the action class I think is just cosmetic, but it makes it surprisingly difficult to find since I kept thinking the error was dropping from a busywork punishment and not from the humiliating work punishment.

So I've been thinking about 'base mechanics'; stuff you probably want to have ironed out before you create tons of content. I keep coming back to group sex - LR1 had plenty of threesomes but so far LR2 doesn't really have an effective mechanic for handling that. Anyway I was looking at the sex_mechanics file and I actually think you could implement a cool dynamic group sex system with surprisingly few steps. To prove I'm not just saying that, here's a design overview. == HELPERS AND WATCHERS == Presently you already have a system in sex_mechanics dealing with watchers (one is pulled randomly from an 'other_people' list that is simply 'everyone else in the room'. We take that 'other_people' array and split it into 'watchers' (who follow the current behaviour) and 'helpers'. Everyone who is in 'other_people' today would start out in the 'watchers' array. The code that currently runs the dialogue for a watcher making a comment instead checks their sluttiness. If its meets whatever bar you feel is appropriate they ask if they can join in (if obedient) or join on their own initiative (if disobedient). This person is removed from Watchers and placed in Helpers. The Helpers array is passed to the position. == HELPER SLOTS == The positions class needs to be changed in two ways: 1 - Two new arguments for 'helper slots', the first lists contains the various activities a helper can perform, these might be something like ["licking mc balls", "Groping the_person's breasts"] and will vary from position to position. The second array lists who, if anyone, is occupying this helper position. Since its entirely possible there will be more helpers than a position has helper slots it makes sense to have a generic activity (probably where they just masturbate while watching) that all extra helpers can occupy. 2 - Within each position there needs to be three new label proceesses for each of these helper slots. The first is just a simple requirement check (is a given helper slutty enough to do this). The second is a description of what's going on, "[the_helper.title] taps [the_person.title] on the shoulder and she stops throating you. [the_helper.title] immediately takes your cock into her mouth and bobs her head up and down several times before passing it back.", the associated image handling and an arousal increase for whoever is affected. 3 - An orgasm description should any of the helpers hit max arousal during their side activities. Obviously these 2 and 3 called at the appropriate time during the sex loop. == ASSIGNING SLOTS == The last element is the assignment function (probably within the position class, this would run after you've done your normal watcher stuff). This function iterates through the helpers and if they don't appear in any of the slots, it assigns them to the first one who's requirements they meet. If they meet no requirements they fall to the generic position. When there is a position change you dump the assignments for the helper slots list and this means all the helpers get new assignments in the new position. That really is all there is to it. Obviously the number of helper slots becomes a very expandable target but to land a proof of concept you really only need the 'generic' slot + one other for each position. For many positions the helper slots could pretty much be copy/pastes. _______ == OTHER THOUGHTS == - I think this model really suits LR2's dynamic construction. What starts as a bit of office groping could dynamically transform into an orgy. A slutty office would feel pretty slutty. - You could easily adjust the above so that scene could be preset with certain helpers in certain positions. This gives you the capacity to make certain events that specifically generate threesomes, say a group blowjob or whatever. - Having a model that increases the arousal of spectators is an improvement over the current model where the player tries to have sex with each watcher in sequence (this is used in the office horniness event mainly). The proposed design would be much less of an esendurance gauntlet since helpers will be increasing their own arousal, the player's and also the primary partner depending on layout. Depending on skill levels its possiblew everyone would orgasm within the space of a 2-3 rounds which frankly sounds hot. - For a simple implmentation you make taboos a blocker at the requirement stage for helper slots. This means taboos can only be broken with the primary partner but would save you a ton of work. - I haven't handled the question of the post-sex review but I think you could get away without changing it since only the primary partner probably felt any responsibility to make the player cum and vice versa. You could of course build on this and have the helpers chime in, but I don't think its necessary. - This design assumes all helper involvement is played out every round. I feel this makes sense because if you have a big orgy the sense of activity is a big part of it, (unlike watchers where having 30 people all comment would just feel judgy and tedious which is probably why you only have one watcher comment per round). Maybe for v. large groups you'd want to cap the max number of helpers. - It's out of scope of my post, but I think you could easily expand on this to give the player a 'switch partners' that lets them swap their primary to any of the helpers. The base implementation would be easy but the edge-case implications (sex review, caught cheating ect) might be iffy. - I also think it would be relatively easy to have slots that were a pair (eg two girls making out off to the side). Basically the requirement checks the 'helper' array to make sure there are at least two people without slots (mainly this will occur on a position change) and assigns them both. - Obviously it makes sense to do this sooner rather than later so you don't have a bunch of events that handle threesomes in various different ways.


More Creators