Indulgences, Version 0.5 Out Now!

A ton was literally added 2 days ago? lol

1 Like

Some more things I come across while playing:

  1. When feeding the girls, there would sometimes be a description that involves forks. I don’t think there’s a single piece of food in this game that actually requires a fork. Everything seems to either be handheld or a drink.
  2. Compared to the other body parts, you can really blow lily’s hips up with barely any investments in stats (digestion rate and eating speed).
  3. There’s basically no drawbacks for increasing stats. There should be something like a monetary cost for doing them, limited to a certain amount per day, a softcap based on Lily’s current stage, or the ones that involve eating food actually cause Lily to eat food. It just doesn’t make sense for there to be an event describe Lily having a hard time eating a few burgers in a row but she can repeat that event six to eight times a day.
  4. The bar food doesn’t seem to be tied to a body part, so you may end up with the weird case where Lily is 200kg or bigger and still looks thin from eating nothing but pizza.
  5. There doesn’t seem to be any reason to study at the cafe since the rate of increasing expansion is so slow it might as well not exist. Also just stuffing Lily for a couple days easily gets her to her new max capacity.
  6. I think back in an earlier release, you could see current capacity and calories consumed in a stat bar in the top left. Now you can’t see those things until the end day summary. Just seems important to have that info available at a glance.
  7. Not a bug, but just a shame that Lily doesn’t actually eat any of the food offered to her during hangouts.

In general, your paths are either fatten up the other girls, fatten up Lily, or both. I think there should be options where the other girls attempt to feed Lily; like once Sophia buys the cafe, there should be a hangout where she has Lily eat a bunch of sweets and pastries. Heck, if there was just one more character in this game, she could be like a mirror image of Lily: Gains weight evenly, doesn’t want to get fat herself, and constantly tries to feed Lily. A challenge to overcome when you don’t want to gain weight, and an ally when you do want that.

tldr: Feedee Lily would be nice, maybe even a new feeder girl to interact with.

4 Likes

I really like the ease of increasing her stats: its not tedious and doesn’t take me 5000 clicks and a repetitive game play loop to get there for once.

A softcap would make the game so much longer and tedious.

5 Likes

You’re right, my bad. These kinds of games shouldn’t keep the main goal (make girls fatter) away from players, and Indulgences seems to be on the quicker side compared to other games.

Right now the only thing resembling a hardcap is Lily’s own capacity being half of all the other girls, but that can easily be bypassed by just pumping digestion rate. I also don’t want it to become tedious, but I still think there’s a way to make the game a little more interactive without it taking hours just to see any gains.

Really enjoying what I’ve played of 0.5 so far, but if you’ll allow me to point out a couple of small gripes:

  • The new hangout events and interactions between other characters are great, and while it’s very neat that there’s a variety of different-size interactions, it also means the player needs to do multiple playthroughs to see everything (as it’d be near-impossible to actually get characters to drop back more than one weight stage at the current setup), and there’s not a whole lot of reward to that yet beyond a few small scenes that got missed the first time around, unless the player also wants to experiment with different body types for the MC.

  • Unless I’m missing something, there’s no way to increase the eating speed for the newer girls yet? I didn’t really find it to be a concern for Mia or Sherry, but Lucy’s eating speed is abysmally slow, so without events I’m barely exaggerating when I say it can take an entire day to actually fill her up (without events) at higher levels.

Beyond those minor nitpicks, it’s a great update! This is one of my favorite games currently in development, and I hope to keep seeing more of it for a while to come.

EDIT: I’m sure it’s a known issue if I’m not the only one affected, but the weight charts for each character aren’t preserved in the save data, as far as I can tell. Not sure how simple this would be to fix or if it’d really be worthwhile to do so if it increases save bloat too much.

2 Likes

I disagree on hangouts events being impossible to get in one run being a bad thing actually

For pretty much every other game on this website, and especially life sims (such as Fattening Career, Feeder Simulator, Sultan’s Harem etc), I get to do one single run per update before having seen all of the content. Some games manage to avert it by giving the player one or more choices that severely impact the story (Fill Me Up, Big Aspirations…), but this kind of reward for multiple playthrough is not only more organic, I find it simply more fun to play through. It gives me an incentive to favor different girls instead of always going for my favorites, and to just replay the game a bunch of times instead of dropping it as I wait for the next update.

3 Likes

You could use a regex such as ".{266,}" to locate any piece of text that is 266 characters or longer and is contained within quotes

Edit: With some tinkering, managed to figure out a way to automatically detect if a string would exceed the bounds of the text box. With this, I split it into sentences and showed the first half of the sentences as one speak event, then the second half. Seems to work well and by overriding renpy.exports.say I managed to get it to run automatically anytime any text is said.

After testing it out for a bit, it made all issues with overflowing text disappear and the text itself looked natural

Here are the changes (edit: fixed issue with duplicate sentences, developer reloading, and tuned text height maximum)

3 Likes

Thanks for the feedback. Seems like you would like to see Lily’s story expanded in the game, I agree that having the player have more input/interactions with the world since right now the player and the girls feel pretty separate. Otherwise the idea of having a girl that doesn’t fatten up to progress her story is pretty interesting. I would like to see how difficult it would be to implement and balance that but if possible that could be a really cool option.

Yeah the weight gain chart is a pretty complex system that is entirely using python and outside of the renpy scope. I’ll look into making it redraw itself on every instantiation and see if that works but no promises, this is all pretty untreaded ground for me.

Thanks man, that’s sick. I’ll look into implementing that for the next version. Hopefully it doesn’t introduce any new bugs but if it works as intended this would save me a ton of manual text editing.

4 Likes

Quick question - I looked at the code for this and it looks like feeding her the same food takes up less “space” for rebecca’s capacity but the amount of calories remains the same.

Wouldn’t this result in the best option being to feed her the same high-calorie food as it’d take up less space the more she eats?

If you want jobs, what about having a range of them? Maybe being a masseuse, a chef, an accountant, an online creator of sexually explicit material, and so on. And they each have their own passive perks (more effective belly rubs on others and self, can “spice up” food to make tastier, learning to budget and save money better (hence the highest-paid), more money as more weight piles on (but the final money is better if you’ve started from a thinner stage)). This way, players can choose what best suits their playstyle/strategy, and it doesn’t really need much more art. And to prevent players from exploiting this system—you can change jobs, but then there’s like 4-5 days of unemployment. So players must save before doing this.
And although not realistic, players can skimp on work (to feed the girls if they want) without any penalties, but they’re paid on an on-hourly basis.
As for the work mechanics, just having time pass by is enough for now, since so many mechanics for so many types of jobs would be difficult to code…

1 Like

Hey there! i just wanted to say that this is really good! Keep up the good work! I like the amount of effort you have to do for people to gain weight, the art is very good! I like the city aspect, though I do feel like it would be nice if it was easier to tell where are accessiable areas, but this is really fun!

2 Likes

I think it’d be cool to be able to see events that you’ve missed? As like an option in your room to ‘reminisce’ on events that have been unlocked (even if you missed them.) You’d only able to see events for girls at their current or previous stages, with new ones unlocked as characters get to that stage.

Also! Little face sprites on buildings if you already know who’s in them at the time. That would be great.

5 Likes

Yes, that is the intention but I feel like it hasn’t been communicated properly since technically every girl has a function like this. I will be expanding on this aspect of the game in the next update to hopefully make strategizing how to feed each girl more interesting.

I do intend on applying a similar system into the next update by creating items that affect stats/impart buffs on the player, these should be unlockable through different methods in the game. I think having different jobs would be cool but I think if I can find a single gameplay loop that I can expand on with art and assets would make the game feel more coherent rather than having a variety of half baked money-making mechanics. Of course I don’t know the exact shape this will take but I’m always on the lookout for ideas.

I would like to make a complete event and art tracking system that would be a gallery as well as allow players to revisit old events. The only issue with that is that currently the events are coded to always use the current weight stage of girls as their sprite. If i can find a solution that allows me to not have to rewrite everything I’ll definitely implement a memories system. As for the map, I would like to completely rework that with a new map that looks better and has more functionality such as displaying characters in location and the like, but that is a big undertaking and may not be something that will make it in time for the next update, possibly in 0.7 but I’ll do my best to get it in ASAP.

3 Likes

Regarding memories, would something like an override for the currently displayed weight stage suffice?

Edit: first attempt at the problem

edit: A bit unrelated but I was wondering a quick way to determine a list of all one-time events and with some quick testing managed to whip this up:

init python in game_events:
    _constant = True
    game_events = []

    def index():
        global game_events
        for var_name, var_value in renpy.store.__dict__.items():
            if not var_name.endswith('_done'):
                continue
            label_name = var_name[:-'_done'.__len__()]
            if not renpy.game.script.has_label(label_name):
                continue

            game_events.append(label_name)
    
    def get():
        global game_events
        return game_events

This lets you get a list of all the events that are one-time. Usage is calling game_events.index() sometime during startup. Afterwards, call game_events.get() to get the list of game_events.

This doesn’t quite solve the other issues that this would have:

  • Control flow isn’t returned back to memories (typically this is done via return but all current code seems to rely on jumping back to its relevant menu)
  • Events sometimes typically characters in some way (affection, fullness)
  • Some events use the show_(character name)() function which does read from the character’s current weight

Some possible solutions for that might be:

  • A global “in_memories” bool to branch whether to jump to either Y_menu or to some “memories_finished” label
  • Using above-mentioned bool to conditionally affect affection/fullness
  • Parsing event names such as “sherry_event5_done” to extract the weight stage from that

edit: I figured out a decent time to run the index function:

label splashscreen:
    $ game_events.index()
    return

Runs right after default statements are executed (renpy docs)

Edit: second attempt at the problem I tried to do the event name parsing I mentioned as a possible solution in the above section and managed to get the following:
init python in game_events:
    import re
    _constant = True
    game_events = []
    pattern = r'(mc|lucy|reb|sophia|sherry|hazel|mia)(?:_event)?(\d+)'

    class GameEvent:
        def __init__(self, label, characters):
            self.label = label
            self.characters = characters  # List of tuples: [(str, number), ...]
        
        def __repr__(self):
            return f"GameEvent(label='{self.label}', characters={self.characters})"

    def index():
        global game_events
        for var_name, _ in renpy.store.__dict__.items():
            if not var_name.endswith('_done'):
                continue
            label_name = var_name[:-'_done'.__len__()]
            if not renpy.game.script.has_label(label_name):
                continue

            matches = re.finditer(pattern, var_name)
            characters = []
            
            for match in matches:
                user = match.group(1)
                stage = int(match.group(2))  # Convert to integer
                characters.append( (user, stage) )
            
            # Create and append the GameEvent
            event = GameEvent(label=label_name, characters=characters)
            game_events.append(event)
    
    def get():
        global game_events
        return game_events

It outputs what you’d expect when inspected:

Output
[GameEvent(label='lucy_event1', characters=[('lucy', 1)]),
GameEvent(label='lucy_event2', characters=[('lucy', 2)]),
GameEvent(label='lucy_event3', characters=[('lucy', 3)]),
GameEvent(label='lucy_event4', characters=[('lucy', 4)]),
GameEvent(label='lucy_event5', characters=[('lucy', 5)]),
GameEvent(label='lucy_event6', characters=[('lucy', 6)]),
GameEvent(label='lucy_event7', characters=[('lucy', 7)]),
GameEvent(label='sophia_event1', characters=[('sophia', 1)]),
GameEvent(label='sophia_event2', characters=[('sophia', 2)]),
GameEvent(label='sophia_event3', characters=[('sophia', 3)]),
GameEvent(label='sophia_event4', characters=[('sophia', 4)]),
GameEvent(label='sophia_event5', characters=[('sophia', 5)]),
GameEvent(label='sophia_event6', characters=[('sophia', 6)]),
GameEvent(label='sophia_event7', characters=[('sophia', 7)]),
GameEvent(label='sophia_event8', characters=[('sophia', 8)]),
GameEvent(label='hazel_event1', characters=[('hazel', 1)]),
GameEvent(label='hazel_event2', characters=[('hazel', 2)]),
GameEvent(label='hazel_event3', characters=[('hazel', 3)]),
GameEvent(label='hazel_event4', characters=[('hazel', 4)]),
GameEvent(label='hazel_event5', characters=[('hazel', 5)]),
GameEvent(label='hazel_event6', characters=[('hazel', 6)]),
GameEvent(label='hazel_event7', characters=[('hazel', 7)]),
GameEvent(label='hazel_event8', characters=[('hazel', 8)]),
GameEvent(label='sherry_event1', characters=[('sherry', 1)]),
GameEvent(label='sherry_event2', characters=[('sherry', 2)]),
GameEvent(label='sherry_event3', characters=[('sherry', 3)]),
GameEvent(label='sherry_event4', characters=[('sherry', 4)]),
GameEvent(label='sherry_event5', characters=[('sherry', 5)]),
GameEvent(label='sherry_event6', characters=[('sherry', 6)]),
GameEvent(label='sherry_event7', characters=[('sherry', 7)]),
GameEvent(label='mia_event1', characters=[('mia', 1)]),
GameEvent(label='mia_event2', characters=[('mia', 2)]),
GameEvent(label='mia_event3', characters=[('mia', 3)]),
GameEvent(label='mia_event4', characters=[('mia', 4)]),
GameEvent(label='mia_event5', characters=[('mia', 5)]),
GameEvent(label='mia_event6', characters=[('mia', 6)]),
GameEvent(label='mia_event7', characters=[('mia', 7)]),
GameEvent(label='reb_event1', characters=[('reb', 1)]),
GameEvent(label='reb_event2', characters=[('reb', 2)]),
GameEvent(label='reb_event3', characters=[('reb', 3)]),
GameEvent(label='reb_event4', characters=[('reb', 4)]),
GameEvent(label='reb_event5', characters=[('reb', 5)]),
GameEvent(label='reb_event6', characters=[('reb', 6)]),
GameEvent(label='reb_event71', characters=[('reb', 71)]),
GameEvent(label='reb_event72', characters=[('reb', 72)]),
GameEvent(label='reb_event81', characters=[('reb', 81)]),
GameEvent(label='reb_event82', characters=[('reb', 82)]),
GameEvent(label='reb3_sophia1_cafe', characters=[('reb', 3), ('sophia', 1)]),
GameEvent(label='sophia3_reb1_gym', characters=[('sophia', 3), ('reb', 1)]),
GameEvent(label='hazel2_reb1_gym', characters=[('hazel', 2), ('reb', 1)]),
GameEvent(label='hazel3_reb2_gym', characters=[('hazel', 3), ('reb', 2)]),
GameEvent(label='hazel3_reb3_gym', characters=[('hazel', 3), ('reb', 3)]),
GameEvent(label='sherry5_sophia2_mall', characters=[('sherry', 5), ('sophia', 2)]), 
GameEvent(label='hazel7_mia3_mall', characters=[('hazel', 7), ('mia', 3)]), 
GameEvent(label='lucy4_sophia1_cafe', characters=[('lucy', 4), ('sophia', 1)]), 
GameEvent(label='mia5_sherry2_club', characters=[('mia', 5), ('sherry', 2)]), 
GameEvent(label='mia1_reb3_gym', characters=[('mia', 1), ('reb', 3)]), 
GameEvent(label='sophia1_lucy6_beach', characters=[('sophia', 1), ('lucy', 6)]), 
GameEvent(label='hazel5_sherry5_beach', characters=[('hazel', 5), ('sherry', 5)]),
GameEvent(label='hazel3_lucy4_kitchen', characters=[('hazel', 3), ('lucy', 4)]), 
GameEvent(label='sophia7_reb1_dorm', characters=[('sophia', 7), ('reb', 1)]), 
GameEvent(label='mia2_sherry2_reb2_gym', characters=[('mia', 2), ('sherry', 2), ('reb', 2)]), 
GameEvent(label='mia4_reb4_club', characters=[('mia', 4), ('reb', 4)]), 
GameEvent(label='mc1_lucy1_mall', characters=[('mc', 1), ('lucy', 1)]), 
GameEvent(label='mc6_lucy1_mall', characters=[('mc', 6), ('lucy', 1)]), 
GameEvent(label='mc1_lucy6_mall', characters=[('mc', 1), ('lucy', 6)]), 
GameEvent(label='mc6_lucy6_mall', characters=[('mc', 6), ('lucy', 6)]), 
GameEvent(label='mc1_sophia1_wcdonalds', characters=[('mc', 1), ('sophia', 1)]),
GameEvent(label='mc3_sophia3_wcdonalds', characters=[('mc', 3), ('sophia', 3)]), 
GameEvent(label='mc1_sophia6_wcdonalds', characters=[('mc', 1), ('sophia', 6)]), 
GameEvent(label='mc6_sophia6_wcdonalds', characters=[('mc', 6), ('sophia', 6)])]

I hope this helps you if you choose to go down this path

2 Likes

Oh yeah I forgot to mention: using the default statement instead of defining the lists inside of init fixed the history feature not persisting between restarts for me. Here are the changes

1 Like

Thanks so much! I’ll definitely look into implementing that. I would like to have the memory system be a part of a diegetic phone system with both gallery and texting options. I’m currently in discussions with another developer if I can use their code for a phone system so we’ll see how that goes and if that’s not an option I may just write my own solution.

3 Likes

Thanks for creating this game. I absolutely love art style of your girls.

4 Likes

very great game but sometimes want to see girls in more revealing outfits like bathing suits that would be just super. and I also want to brag that my sherry weighs 400 kg

3 Likes


why did she wear that

3 Likes

why not? It’s pretty hotter on her~

4 Likes