Hey there I’m new here but I have a question for you:when you finish can you send a gif of the girl gaining weight?
if software_course_day == 1:
call software_course_day_1
elif software_course_day == 2:
call software_course_day_2
elif software_course_day == 3:
call software_course_day_3
elif software_course_day == 4:
call software_course_day_4
elif software_course_day == 5:
call software_course_day_5
elif software_course_day == 6:
call software_course_day_6
elif software_course_day == 7:
call software_course_day_7
elif software_course_day == 8:
call software_course_day_8
elif software_course_day == 9:
call software_course_day_9
elif software_course_day == 10:
call software_course_day_10
elif software_course_day == 11:
call software_course_day_11
elif software_course_day == 12:
call software_course_day_12
elif software_course_day == 13:
call software_course_day_13
elif software_course_day == 14:
call software_course_day_14
elif software_course_day == 15:
call software_course_day_15
elif software_course_day == 16:
call software_course_day_16
elif software_course_day == 17:
call software_course_day_17
elif software_course_day == 18:
call software_course_day_18
elif software_course_day == 19:
call software_course_day_19
elif software_course_day == 20:
call software_course_day_20
![]()
Strongly recommend you brush up on your fundamentals a bit. Not going to claim to know the nuances of renpy but there’s no way there isn’t a better way of doing this.
There’s a massive amount of repetition in your code and that’s going to bite you in the ass HARD if you ever want to adjust a core mechanic later. Repetition in code is a blaring alarm you are doing something wrong.
My biggest recommendation would be creating a single codepath for the management of all core resources/stats. This would involve writing methods for manipulating each of them an sticking them somewhere convenient, probably on the player object. (or perhaps a parent class that all characters are subclassed from if you want to be able to easily simulate these stats on other characters)
The goal here is to have as little logic as possible nestled in with the dialog/narration so the story can be the story and the game can be the game without them tripping over each other.
For example, something like player.purchase(item['bauble']). You create a dictionary somewhere in scope that contains a unique name, cost, display name, description, etc for everything purchasable which consolidates all that data in a structured manner and in a single place.
Pretty sure python lets you put anonymous functions in data structures so you could even use this method to update variables with purchases (think: subscriptions)
Then, purchases could be simplified to that single call in the “story” parts of your code, and the method would handle the nuances of updating the player’s balance, displaying the notification in the UI, etc; all the “guts” parts of the game.
having a utility function for handling “shop”-type interactions would be good too, as there’s a ton of code that’s just implementing that functionality over and over again. You can have the function return the item purchased too, so it can be referenced in dialog in a compact way.
Other than the match statement i brought up at the beginning of the post, this method would probably go the farthest to simplify your code:
# EVIL HELLSPAWN THAT EATS BABY SOULS
foo.method(a, b, c)
foo.method(a, b, c)
foo.method(a, b, c)
foo.method(a, b, c)
foo.method(a, b, c)
#[ ... etc ...]
# Goodboy code that goes to heaven but is mocked by saint peter behind its back
stuff = [
(a, b, c),
(a, b, c),
(a, b, c),
#[ ... etc ...]
]
for item in stuff:
foo.method(item)
# Even better code that kisses you with tongue
# and more importantly gives each element a unique name so it can be referred to individually
fishies = {
"one_fish": (a, b, c),
"two_fish": (a, b, c),
"red_fish": (a, b, c),
"blue_fish": (a, b, c)
}
for key in dict:
foo.method(fishies[key])
favorite_fish = fishies["blue_fish"]
TLDR:
Use dictionaries, for in loops, and match statements, and don’t repeat yourself.
yandere dev is that you?
Today I spent the entire day trying to fix my computer. Since a Windows update I did this week, it refuses to boot. I tried rescuing my Windows installation, but it seems hopeless. Resetting, and setting everything up again will likely take an entire day.
Thus, the new version will be delayed, until I can fix my system again. I estimate the new update to be released within 5 days.
I will respond to the other comments above tomorrow. I just wanted to give you a quick heads-up.
Absolutely. In fact, we could do that earlier as well, there is no need for the character to be complete. Right now, I try to upgrade the current character window adding a lot more customization options. In detail, I talked in this post. I will keep your GIF-idea in mind.
I agree with you. If you dig deeper, you will likely find many ugly code parts and inconsistencies.
When I started working on GoL, I was still learning how to program. Accordingly, older code snippets will not be very well-developed, especially the _classes.rpy that was established at that time. Initially, there wasn’t a folder structure, but all files were in a flat hierarchy.
Furthermore, the default, define, and call “init” statements are often misused by Ren’Py. When I wrote them, I did not know better.
Similarly, the store could be re-developed to make it more extensible with items. Unifying purchase GUIs and replacing the menu statements at all the “small” stores, like in the fitness studio, would also be an excellent idea to freshen up the UI and unify the handling of these.
Talking of best-practice approaches, I should refactor these parts. Splitting up the _classes.rpy would be an excellent start to do that, as some organization into these fundamental mechanics would be necessary.
Diving into all these issues would kill this project. It would take me months to freshen up the entire game, during which time I could not publish a single version. So what I do instead is, next to the release circle that I follow, I try to work on other, larger improvements or refactorings next to it. For example, the current character window makes the game’s size blow up and the work required to extend it exponential. For months, I have worked on addressing this issue. I talked about some technical details on Patreon.
Since last summer, I have promised myself that each time I touch an old piece of code, I will leave it more beautiful than when I started working on it. This has led me to spontaneous refactorings, like splitting up all the image-handling “Show” functions and slowly moving certain code parts to their files, trying to eliminate all the ultra-large ones.
I resolved the snippet you shared. Without a comment like yours, I would have likely never touched that file because it is quite an isolated story path. Thank you, I appreciate it. In the meantime, I am familiar with some coding standards. Everything else is not that easy to fix, unluckily, I will put it on my list.
Update regarding my PC: I could finally re-install Windows, and I am setting up my development environment again.
Cleaned the project structure a bit up ![]()
The files are still messy, but at least they are structured now.
New version will be out by tomorrow night ![]()
New version [v0.43]
This month was a bit tough with a lot of unexpected issues. There is no Android version this month.
What’s new?
- visit the FastFood restaurant as a customer
- The easter event was added again. Visit bunny (spoiler image) in the park and find all eggs for a reward

- Refactored the entire code base into a new folder structure. Modders might like that. There is a lot to clean up left, though.
Download
Patreon (Mac, Windows, Linux, PC)
Subscribestar (Mac, Windows, Linux, PC)
I forgot to post, so this should be a friendly reminder that subscribing as early as possible in April will give the biggest benefit, as all subscriptions renew at the end of April, regardless of when they started in April.
Hey. Just wanna report you have mistyped the Subscribestar link, you missed the ‘t’.
Some new ideas to add to this list:
- Mobility Issues and Eventual Immobility. Simple enough idea that you won’t gain without gaining some issues. This could lead to the hiring of a maid character that could cook and clean the players apartment. Also, if you have the internet, you could do work/classes online, working from home to feed your luxurious lifestyle. (Also, if you hit immobility while under certain conditions, you could have certain things happen, such as having you be taken in by the manor or other such things.)
- Office Job Expansion: Basically, if you have the office job and get your diploma, you could have your job be upgraded through a possible promotion.
New free version [v0.39]
It’s been quite some time since I updated the free version. So I decided to do so. In comparison to the old free version, this one includes about 14 months of new content ![]()
Link to the first post with the download links
New version [v0.44]
I already posted a status update earlier today. Here’s the new version ![]()
What changed?
- Code refactorings of everything at your apartment; a critical part of the game.
- You can now invite Jane over for pizza. She then finds an old video game of yours that she wants to play against you…
Downloads
So I tried to play the new free version but the game immediately closes and throws this up on the screen instead.
I’m sorry, but an uncaught exception occurred.
While running game code:
File “renpy/common/00start.rpy”, line 284, in script
python:
ScriptError: could not find label ‘start’.– Full Traceback ------------------------------------------------------------
Full traceback:
File “C:\Users\User\Downloads\GainOfLife-v0.39.3-pc\renpy\bootstrap.py”, line 275, in bootstrap
renpy.main.main()
File “C:\Users\User\Downloads\GainOfLife-v0.39.3-pc\renpy\main.py”, line 670, in main
run(restart)
File “C:\Users\User\Downloads\GainOfLife-v0.39.3-pc\renpy\main.py”, line 144, in run
renpy.execution.run_context(True)
File “C:\Users\User\Downloads\GainOfLife-v0.39.3-pc\renpy\execution.py”, line 955, in run_context
context.run()
File “renpy/common/00start.rpy”, line 284, in script
python:
File “C:\Users\User\Downloads\GainOfLife-v0.39.3-pc\renpy\script.py”, line 1013, in lookup
raise ScriptError(“could not find label ‘%s’.” % str(original))
ScriptError: could not find label ‘start’.Windows-10-10.0.19045 AMD64
Ren’Py 8.1.3.23091805Mon Apr 22 23:27:29 2024
I also ran into this issue. I looked into it and realized that many folders and files, that are supposed to be in the “game” folder (or at least they were in version 0.25) are outside of it.
If you put everything in the game folder (except the exe, GainOfLife.py and .sh, log and traceback.txt and the folders game, lib and renpy), the game will start up.
However, when starting a new game I soon run into another error. After getting to the part where you get your starting cash and your tuition is explained, the game crashes and displays the following messages:
I'm sorry, but an uncaught exception occurred.
While running game code:
File "renpy/common/000statements.rpy", line 649, in execute_show_screen
renpy.with_statement(eval(transition_expr))
File "_screens.rpy", line 271, in execute
File "_screens.rpy", line 271, in execute
File "_screens.rpy", line 275, in execute
File "_screens.rpy", line 275, in <module>
TypeError: list indices must be integers or slices, not float
-- Full Traceback ------------------------------------------------------------
Full traceback:
File "game/firstDayAtCollege.rpyc", line 7, in script
File "C:\Users\justi\Desktop\Stuff\Extra Stuff\GainOfLife-v0.39.3-pc\renpy\ast.py", line 2259, in execute
self.call("execute")
File "C:\Users\justi\Desktop\Stuff\Extra Stuff\GainOfLife-v0.39.3-pc\renpy\ast.py", line 2241, in call
return renpy.statements.call(method, parsed, *args, **kwargs)
File "C:\Users\justi\Desktop\Stuff\Extra Stuff\GainOfLife-v0.39.3-pc\renpy\statements.py", line 342, in call
return method(parsed, *args, **kwargs)
File "renpy/common/000statements.rpy", line 649, in execute_show_screen
renpy.with_statement(eval(transition_expr))
File "C:\Users\justi\Desktop\Stuff\Extra Stuff\GainOfLife-v0.39.3-pc\renpy\exports.py", line 1758, in with_statement
return renpy.game.interface.do_with(trans, paired, clear=clear)
File "C:\Users\justi\Desktop\Stuff\Extra Stuff\GainOfLife-v0.39.3-pc\renpy\display\core.py", line 2978, in do_with
return self.interact(trans_pause=True,
File "C:\Users\justi\Desktop\Stuff\Extra Stuff\GainOfLife-v0.39.3-pc\renpy\display\core.py", line 3582, in interact
repeat, rv = self.interact_core(preloads=preloads, trans_pause=trans_pause, pause=pause, pause_start=pause_start, pause_modal=pause_modal, **kwargs) # type: ignore
File "C:\Users\justi\Desktop\Stuff\Extra Stuff\GainOfLife-v0.39.3-pc\renpy\display\core.py", line 4055, in interact_core
root_widget.visit_all(lambda d : d.per_interact())
File "C:\Users\justi\Desktop\Stuff\Extra Stuff\GainOfLife-v0.39.3-pc\renpy\display\core.py", line 684, in visit_all
d.visit_all(callback, seen)
File "C:\Users\justi\Desktop\Stuff\Extra Stuff\GainOfLife-v0.39.3-pc\renpy\display\core.py", line 684, in visit_all
d.visit_all(callback, seen)
File "C:\Users\justi\Desktop\Stuff\Extra Stuff\GainOfLife-v0.39.3-pc\renpy\display\core.py", line 684, in visit_all
d.visit_all(callback, seen)
[Previous line repeated 1 more time]
File "C:\Users\justi\Desktop\Stuff\Extra Stuff\GainOfLife-v0.39.3-pc\renpy\display\screen.py", line 476, in visit_all
callback(self)
File "C:\Users\justi\Desktop\Stuff\Extra Stuff\GainOfLife-v0.39.3-pc\renpy\display\core.py", line 4055, in <lambda>
root_widget.visit_all(lambda d : d.per_interact())
File "C:\Users\justi\Desktop\Stuff\Extra Stuff\GainOfLife-v0.39.3-pc\renpy\display\screen.py", line 487, in per_interact
self.update()
File "C:\Users\justi\Desktop\Stuff\Extra Stuff\GainOfLife-v0.39.3-pc\renpy\display\screen.py", line 680, in update
self.screen.function(**self.scope)
File "_screens.rpy", line 271, in execute
File "_screens.rpy", line 271, in execute
File "_screens.rpy", line 275, in execute
File "_screens.rpy", line 275, in <module>
File "C:\Users\justi\Desktop\Stuff\Extra Stuff\GainOfLife-v0.39.3-pc\renpy\revertable.py", line 217, in __getitem__
rv = list.__getitem__(self, index)
TypeError: list indices must be integers or slices, not float
Windows-10-10.0.19045 AMD64
Ren'Py 8.1.3.23091805
Gain of Life v0.39.3
Mon Apr 22 16:28:55 2024
Since I’m not at all familiar with anything regarding programming or file structure, I didn’t attempt further adjustments to get the game to run. Besides, having to fix the game for yourself after downloading probably isn’t intended in the first place. I hope the actual problem can be fixed somewhat easily ^^’ .
Also, since this is the first time I write something in this thread (or in general on this site), I wanted to say that I really enjoy this game ^^
I currently aren’t in a position where I can pay for the newest version, sorry for that. I hope you will be able to keep developing and improving the game further!
Personally, I would like if you could interact with Ida (the girl at the restaurant) a bit more, but that’s just my personal wish ^^’
What are the odds to choose precisely the one version that did not work, because my automatization failed that time, and manually uploaded it once again?
Anyway, the links are updated now, and they should work. Sorry for the inconveniences.
I’m glad you enjoy the game. Noted your suggestion ![]()
I’m getting two errors when trying to play the latest version, 0.44.0. This is on a brand new save file.
First, I got this error when pressing “Do something at home”:
I'm sorry, but an uncaught exception occurred.
While running game code:
ScriptError: could not find label 'doSomethingAtHome'.
-- Full Traceback ------------------------------------------------------------
Full traceback:
File "game/src/places/home/menu/homeMain.rpyc", line 4, in script call
�2�����#X�om0�{z
File "game/src/places/home/menu/homeMain.rpyc", line 39, in script call
Zm�=[V�-~�+t�eh,�d+�6j�+�P�G(��ٵdS�,X��;``��tB\�����N6�j���Q4]�3�b��g
I was able to fix this by updating the label in the game\src\places\home\menu\doSomethingAtHome.rpy to be doSomethingAtHome.
After fixing that, I got this error after clicking the “Back” button on the screen that has the “Eat (Kitchen)” and “Sleep (Bedroom)”) options.
I'm sorry, but an uncaught exception occurred.
While running game code:
Exception: In DynamicImage u'[character1_path]': Could not find substitution 'character1_path'.
-- Full Traceback ------------------------------------------------------------
Full traceback:
File "renpy/common/_layout/screen_main_menu.rpym", line 28, in script
python hide:
File "renpy/ast.py", line 928, in execute
renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store)
File "renpy/python.py", line 2245, in py_exec_bytecode
exec(bytecode, globals, locals)
File "renpy/common/_layout/screen_main_menu.rpym", line 28, in <module>
python hide:
File "renpy/common/_layout/screen_main_menu.rpym", line 35, in _execute_python_hide
ui.interact()
File "renpy/ui.py", line 298, in interact
rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs)
File "renpy/display/core.py", line 3325, in interact
repeat, rv = self.interact_core(preloads=preloads, trans_pause=trans_pause, pause=pause, pause_start=pause_start, **kwargs)
File "renpy/display/core.py", line 3737, in interact_core
root_widget.visit_all(lambda i : i.per_interact())
File "renpy/display/core.py", line 568, in visit_all
d.visit_all(callback, seen)
File "renpy/display/core.py", line 568, in visit_all
d.visit_all(callback, seen)
File "renpy/display/core.py", line 568, in visit_all
d.visit_all(callback, seen)
File "renpy/display/core.py", line 568, in visit_all
d.visit_all(callback, seen)
File "renpy/display/core.py", line 568, in visit_all
d.visit_all(callback, seen)
File "renpy/display/core.py", line 568, in visit_all
d.visit_all(callback, seen)
File "renpy/display/core.py", line 570, in visit_all
callback(self)
File "renpy/display/core.py", line 3737, in <lambda>
root_widget.visit_all(lambda i : i.per_interact())
File "renpy/display/image.py", line 752, in per_interact
self.find_target()
File "renpy/display/image.py", line 638, in find_target
raise Exception("In DynamicImage %r: Could not find substitution '%s'." % (self.name, str(ke.args[0])))
Exception: In DynamicImage u'[character1_path]': Could not find substitution 'character1_path'.
Windows-10-10.0.22621
Ren'Py 7.4.11.2266
Gain of Life v0.44.0
Wed Apr 24 08:32:14 2024
In v0.44 I made major refactorings to the home part of the game. The goal is to get GoL slowly into a more structured form, away from the complete file mess that it used to be. Kind of trying to make the game “future-proof.” Nothing noticeable from the player’s perspective changed, it’s just technical.
These problems occur because of these changes. I will investigate them on the weekend and upload a fixed version. Thank you for reporting, that’s a great help.
The error at home was fixed with v0.44.1.
I don’t think there were any fixes for Jane since v0.39. I will look into it, thank you for reporting.
By the way, a small reminder: Subscribing to Patreon earlier in the month will give the biggest benefits, as the membership will renew on June 1st, regardless of when the membership was created in May.



