Lab Rats 2 v0.40.0 Release
Added 2021-05-01 11:07:41 +0000 UTCLab Rats 2 v0.40.0 is Live! Get it here!
PC: Lab Rats 2 v0.40.0-PC
Mac: Lab Rats 2 v0.40.0-Mac
Android: Lab Rats 2 v0.40.0a-Android
Lab Rats 2 v0.40.0 is finished development and ready for it's week of bug testing by patrons. This update focused 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 to catch and flag and bugs introduced in future development. An integration testing framework has also been developed to run more complex tests to catch bugs in development, rather than in your long running game! The unit and integration testing frameworks both support additional tests being added by modders to cover their own code base as well. In total 128 unit tests and 12 integration tests have been written, and future bug fixes will include the creation of additional test cases to prevent bugs from reappearing.
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.0):
*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.
*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.
Comments
Bug. Arousal don't increase during groping from 0.
Adam Król
2021-05-02 10:55:19 +0000 UTCDo you happen to remember what was going on before this error triggered? Something is handing a non-Room object, but the stack trace doesn't give any hints what event that might have been. I've added a check to make sure the same thing can't happen in the future, at worst a single event might not change locations correctly now.
Vren
2021-05-02 06:02:33 +0000 UTCNoted, looks like Ren'py doesn't build with the unittest class included in it's normal build. I've added it to the main project so it will be included in the future. I'm going to fix up a few other bugs then push out a new android version for testing.
Vren
2021-05-02 05:46:44 +0000 UTC[code] 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/mom_bedroom_actions.rpy", line 118, in script "Anon3342" "Now I don't know what to do! Should I ignore this to make sure I'm around for my children 100%?" (what_style = "text_message_style") ValueError: unsupported format character '?' (0x3f) at index 94 -- Full Traceback ------------------------------------------------------------ Full traceback: File "game/script.rpy", line 260, in script call $ picked_option.call_action() File "game/general_actions/location_actions/mom_bedroom_actions.rpy", line 118, in script "Anon3342" "Now I don't know what to do! Should I ignore this to make sure I'm around for my children 100%?" (what_style = "text_message_style") File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\ast.py", line 718, in execute renpy.exports.say(who, what, *args, **kwargs) File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\exports.py", line 1334, in say what = what % tag_quoting_dict ValueError: unsupported format character '?' (0x3f) at index 94 Windows-8-6.2.9200 Ren'Py 7.3.5.606 Lab Rats 2 - Down to Business v0.40.0 Sun May 02 01:08:13 2021 [/code]
2021-05-02 00:08:51 +0000 UTC[code] I'm sorry, but an uncaught exception occurred. While processing text tag {bold} in u'{bold}(Advice Wanted) My Sex Drive is Back!?{/bold}'.: File "game/script.rpy", line 260, in script call $ picked_option.call_action() File "game/general_actions/location_actions/mom_bedroom_actions.rpy", line 114, in script "Anon3342" "{bold}(Advice Wanted) My Sex Drive is Back!?{/bold}" (what_style = "text_message_style") File "renpy/common/00library.rpy", line 268, in say who(what, interact=interact, *args, **kwargs) Exception: Unknown text tag u'bold' -- Full Traceback ------------------------------------------------------------ Full traceback: File "game/script.rpy", line 260, in script call $ picked_option.call_action() File "game/general_actions/location_actions/mom_bedroom_actions.rpy", line 114, in script "Anon3342" "{bold}(Advice Wanted) My Sex Drive is Back!?{/bold}" (what_style = "text_message_style") File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\ast.py", line 718, in execute renpy.exports.say(who, what, *args, **kwargs) File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\exports.py", line 1343, in say renpy.store.say(who, what, *args, **kwargs) File "renpy/common/00library.rpy", line 268, in say who(what, interact=interact, *args, **kwargs) File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\character.py", line 1047, in __call__ return Character(kind=self, **kwargs)(what, interact=interact, _call_done=_call_done, multiple=multiple, _mode=_mode, _with_none=_with_none) File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\character.py", line 1142, in __call__ self.do_display(who, what, cb_args=self.cb_args, **display_args) File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\character.py", line 842, in do_display **display_args) File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\character.py", line 591, in display_say rv = renpy.ui.interact(mouse='say', type=type, roll_forward=roll_forward) File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\ui.py", line 297, in interact rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs) File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\display\core.py", line 2702, in interact repeat, rv = self.interact_core(preloads=preloads, trans_pause=trans_pause, **kwargs) File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\display\core.py", line 3194, in interact_core self.draw_screen(root_widget, fullscreen_video, (not fullscreen_video) or video_frame_drawn) File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\display\core.py", line 2094, in draw_screen renpy.config.screen_height, File "renpy/display/render.pyx", line 490, in renpy.display.render.render_screen (gen\renpy.display.render.c:6805) rv = render(root, width, height, st, st) File "renpy/display/render.pyx", line 259, in renpy.display.render.render (gen\renpy.display.render.c:3520) rv = d.render(widtho, heighto, st, at) File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\display\layout.py", line 722, in render surf = render(child, width, height, cst, cat) File "renpy/display/render.pyx", line 166, in renpy.display.render.render (gen\renpy.display.render.c:4075) cpdef render(d, object widtho, object heighto, double st, double at): File "renpy/display/render.pyx", line 259, in renpy.display.render.render (gen\renpy.display.render.c:3520) rv = d.render(widtho, heighto, st, at) File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\display\layout.py", line 722, in render surf = render(child, width, height, cst, cat) File "renpy/display/render.pyx", line 166, in renpy.display.render.render (gen\renpy.display.render.c:4075) cpdef render(d, object widtho, object heighto, double st, double at): File "renpy/display/render.pyx", line 259, in renpy.display.render.render (gen\renpy.display.render.c:3520) rv = d.render(widtho, heighto, st, at) File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\display\layout.py", line 722, in render surf = render(child, width, height, cst, cat) File "renpy/display/render.pyx", line 166, in renpy.display.render.render (gen\renpy.display.render.c:4075) cpdef render(d, object widtho, object heighto, double st, double at): File "renpy/display/render.pyx", line 259, in renpy.display.render.render (gen\renpy.display.render.c:3520) rv = d.render(widtho, heighto, st, at) File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\display\screen.py", line 675, in render child = renpy.display.render.render(self.child, w, h, st, at) File "renpy/display/render.pyx", line 166, in renpy.display.render.render (gen\renpy.display.render.c:4075) cpdef render(d, object widtho, object heighto, double st, double at): File "renpy/display/render.pyx", line 259, in renpy.display.render.render (gen\renpy.display.render.c:3520) rv = d.render(widtho, heighto, st, at) File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\display\layout.py", line 722, in render surf = render(child, width, height, cst, cat) File "renpy/display/render.pyx", line 166, in renpy.display.render.render (gen\renpy.display.render.c:4075) cpdef render(d, object widtho, object heighto, double st, double at): File "renpy/display/render.pyx", line 259, in renpy.display.render.render (gen\renpy.display.render.c:3520) rv = d.render(widtho, heighto, st, at) File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\display\layout.py", line 1127, in render st, at) File "renpy/display/render.pyx", line 166, in renpy.display.render.render (gen\renpy.display.render.c:4075) cpdef render(d, object widtho, object heighto, double st, double at): File "renpy/display/render.pyx", line 259, in renpy.display.render.render (gen\renpy.display.render.c:3520) rv = d.render(widtho, heighto, st, at) File "C:\Users\=Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\display\layout.py", line 722, in render surf = render(child, width, height, cst, cat) File "renpy/display/render.pyx", line 166, in renpy.display.render.render (gen\renpy.display.render.c:4075) cpdef render(d, object widtho, object heighto, double st, double at): File "renpy/display/render.pyx", line 259, in renpy.display.render.render (gen\renpy.display.render.c:3520) rv = d.render(widtho, heighto, st, at) File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\text\text.py", line 1996, in render virtual_layout = Layout(self, width, height, renders, drawable_res=False, size_only=True) File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\text\text.py", line 597, in __init__ self.paragraphs = self.segment(text.tokens, style, renders, text) File "C:\Usersr\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\text\text.py", line 1179, in segment raise Exception("Unknown text tag %r" % text) Exception: Unknown text tag u'bold' Windows-8-6.2.9200 Ren'Py 7.3.5.606 Lab Rats 2 - Down to Business v0.40.0 Sun May 02 01:05:03 2021 [/code]
2021-05-02 00:07:41 +0000 UTC``` I'm sorry, but an uncaught exception occurred. While running game code: File "game/script.rpy", line 267, in script if new_location.people: #There are people in the room, let's see if there are any room events File "game/script.rpy", line 267, in if new_location.people: #There are people in the room, let's see if there are any room events AttributeError: 'unicode' object has no attribute 'people' -- Full Traceback ------------------------------------------------------------ Full traceback: File "game/script.rpy", line 267, in script if new_location.people: #There are people in the room, let's see if there are any room events File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\ast.py", line 1845, in execute if renpy.python.py_eval(condition): File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\python.py", line 2059, in py_eval return py_eval_bytecode(code, globals, locals) File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\python.py", line 2052, in py_eval_bytecode return eval(bytecode, globals, locals) File "game/script.rpy", line 267, in if new_location.people: #There are people in the room, let's see if there are any room events AttributeError: 'unicode' object has no attribute 'people' Windows-8-6.2.9200 Ren'Py 7.3.5.606 Lab Rats 2 - Down to Business v0.40.0 Sat May 01 19:43:07 2021 ```
2021-05-01 18:43:47 +0000 UTC``` I'm sorry, but an uncaught exception occurred. While running game code: File "game/script.rpy", line 266, in script call call change_location(new_location) from _call_change_location #_return is the location returned from the map manager. File "game/script.rpy", line 309, in script if the_place.trigger_tutorial and the_place.tutorial_label is not None and mc.business.event_triggers_dict.get("Tutorial_Section",False): File "game/script.rpy", line 309, in if the_place.trigger_tutorial and the_place.tutorial_label is not None and mc.business.event_triggers_dict.get("Tutorial_Section",False): AttributeError: 'unicode' object has no attribute 'trigger_tutorial' -- Full Traceback ------------------------------------------------------------ Full traceback: File "game/script.rpy", line 266, in script call call change_location(new_location) from _call_change_location #_return is the location returned from the map manager. File "game/script.rpy", line 309, in script if the_place.trigger_tutorial and the_place.tutorial_label is not None and mc.business.event_triggers_dict.get("Tutorial_Section",False): File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\ast.py", line 1845, in execute if renpy.python.py_eval(condition): File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\python.py", line 2059, in py_eval return py_eval_bytecode(code, globals, locals) File "C:\Users\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\python.py", line 2052, in py_eval_bytecode return eval(bytecode, globals, locals) File "game/script.rpy", line 309, in if the_place.trigger_tutorial and the_place.tutorial_label is not None and mc.business.event_triggers_dict.get("Tutorial_Section",False): AttributeError: 'unicode' object has no attribute 'trigger_tutorial' Windows-8-6.2.9200 Ren'Py 7.3.5.606 Lab Rats 2 - Down to Business v0.40.0 Sat May 01 19:40:31 2021 ```
2021-05-01 18:42:06 +0000 UTCsame error code... cant do anything unfortunately...
2021-05-01 18:39:22 +0000 UTC[code] I'm sorry, but an uncaught exception occurred. While running game code: File "game/script.rpy", line 264, in script call screen map_manager File "renpy/common/000statements.rpy", line 531, in execute_call_screen store._return = renpy.call_screen(name, *args, **kwargs) File "game/game_screens/map_screens/map_ui.rpy", line 1, in execute screen map_manager(): File "game/game_screens/map_screens/map_ui.rpy", line 1, in execute screen map_manager(): File "game/game_screens/map_screens/map_ui.rpy", line 9, in execute for place in list_of_places: #Draw the text buttons over the background File "game/game_screens/map_screens/map_ui.rpy", line 10, in execute if place.visible: File "game/game_screens/map_screens/map_ui.rpy", line 15, in execute if not place == mc.location: File "game/game_screens/map_screens/map_ui.rpy", line 30, in execute frame: File "game/game_screens/map_screens/map_ui.rpy", line 41, in execute text place.formal_name + "\n(" + str(len(place.people)) + ")" anchor [0.5,0.5] style "map_text_style" AttributeError: 'Room' object has no attribute 'formal_name' -- Full Traceback ------------------------------------------------------------ Full traceback: File "game/script.rpy", line 264, in script call screen map_manager File "C:\Users\RAC\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\ast.py", line 1962, in execute self.call("execute") File "C:\Users\RAC\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\ast.py", line 1950, in call return renpy.statements.call(method, parsed, *args, **kwargs) File "C:\Users\RAC\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\statements.py", line 277, in call return method(parsed, *args, **kwargs) File "renpy/common/000statements.rpy", line 531, in execute_call_screen store._return = renpy.call_screen(name, *args, **kwargs) File "C:\Users\RAC\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\exports.py", line 2905, in call_screen rv = renpy.ui.interact(mouse="screen", type="screen", roll_forward=roll_forward) File "C:\Users\RAC\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\ui.py", line 297, in interact rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs) File "C:\Users\RAC\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\display\core.py", line 2702, in interact repeat, rv = self.interact_core(preloads=preloads, trans_pause=trans_pause, **kwargs) File "C:\Users\RAC\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\display\core.py", line 3094, in interact_core root_widget.visit_all(lambda i : i.per_interact()) File "C:\Users\RAC\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\display\core.py", line 541, in visit_all d.visit_all(callback, seen) File "C:\Users\RAC\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\display\core.py", line 541, in visit_all d.visit_all(callback, seen) File "C:\Users\RAC\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\display\core.py", line 541, in visit_all d.visit_all(callback, seen) File "C:\Users\RAC\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\display\screen.py", line 430, in visit_all callback(self) File "C:\Users\RAC\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\display\core.py", line 3094, in root_widget.visit_all(lambda i : i.per_interact()) File "C:\Users\RAC\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\display\screen.py", line 440, in per_interact self.update() File "C:\Users\RAC\Downloads\Lab_Rats_2-v0.40.0-pc\Lab_Rats_2-v0.40.0-pc\renpy\display\screen.py", line 625, in update self.screen.function(**self.scope) File "game/game_screens/map_screens/map_ui.rpy", line 1, in execute screen map_manager(): File "game/game_screens/map_screens/map_ui.rpy", line 1, in execute screen map_manager(): File "game/game_screens/map_screens/map_ui.rpy", line 9, in execute for place in list_of_places: #Draw the text buttons over the background File "game/game_screens/map_screens/map_ui.rpy", line 10, in execute if place.visible: File "game/game_screens/map_screens/map_ui.rpy", line 15, in execute if not place == mc.location: File "game/game_screens/map_screens/map_ui.rpy", line 30, in execute frame: File "game/game_screens/map_screens/map_ui.rpy", line 41, in execute text place.formal_name + "\n(" + str(len(place.people)) + ")" anchor [0.5,0.5] style "map_text_style" File "", line 41, in AttributeError: 'Room' object has no attribute 'formal_name' Windows-8-6.2.9200 Ren'Py 7.3.5.606 Lab Rats 2 - Down to Business v0.40.0 Sat May 01 13:49:45 2021 [/code] cant go anywhere it gives me this error code
Tencho1998
2021-05-01 17:51:05 +0000 UTCWhen can we hire Emily after tutoring her?
philip ash
2021-05-01 15:19:51 +0000 UTC[code] I'm sorry, but an uncaught exception occurred. While running game code: File "game/script.rpy", line 11, in ImportError: No module named unittest -- Full Traceback ------------------------------------------------------------ Full traceback: File "script.rpyc", line 1, in script File "C:\Users\Danny\Desktop\Random Stuff\RPProject\renpy-7.3.5-sdk\renpy\ast.py", line 927, in execute File "renpy/python.py", line 2028, in py_exec_bytecode File "game/script.rpy", line 11, in ImportError: No module named unittest [/code] Getting this on app launch for Android version, both on package update and a full delete/reinstall.
2021-05-01 13:57:02 +0000 UTCI'd stopped downloading the last few .0 versions because it was guaranteed that the game would crash, usually near-immediately. This will be a big step towards fixing that! Thanks!
2021-05-01 13:10:43 +0000 UTCWhat's your coverage??
Yellowcake Uranium
2021-05-01 12:53:21 +0000 UTCI like this update.
Adam Król
2021-05-01 12:10:50 +0000 UTC