Ren'Py [Development Thread] Brothelmania: Brothel Management Sim

osanaiko

Engaged Member
Modder
Jul 4, 2017
2,109
3,379
That however is not the case with portraits and bodies, because at least for V1.0.0, this game will require all those images used to be an specific size as Ren’Py (as far as I know) isn’t the best at seamlessly adjusting size on its own, and with this feature the UI will just start doing some funny things on its own.
Love this thread, it's very interesting.

I wanted to let you know about the "fit" style property for images within Renpy screens. it covers pretty much all forced scaling options you would need.
Lots more details here:
And the manual entry:
 

Quintillian

Newbie
Apr 15, 2019
94
196
Love this thread, it's very interesting.

I wanted to let you know about the "fit" style property for images within Renpy screens. it covers pretty much all forced scaling options you would need.
Lots more details here:
And the manual entry:
Thanks for checking out the thread, and for the resources!

I wasn’t aware about fit. Currently, I was already computing the scaling myself (bottom part of this code)

Python:
        def get_image(self, tags=[], exclusive=False, width=1024, height=768, manual_scale=False):
            tags_to_search = [self._girl_pack_name]
            tags_to_search_temp = set()
            tags_to_ignore = set()

            for tag in tags:
                if isinstance(tag, ContentTags):
                    tags_to_search_temp.add(tag.value)

                elif isinstance(tag, AntiContentTags):
                    for tag_to_ignore in tag.value[1]:
                        tags_to_ignore.add(tag_to_ignore.value)

            tags_to_search.extend(list(tags_to_search_temp))
            search_results = list(tags_manager.search_tags(
                tags_to_search=tags_to_search,
                tags_to_ignore=list(tags_to_ignore),
                exclusive=exclusive))
               
            if not search_results:
                search_results = list(tags_manager.search_tags([self._girl_pack_name]))

            image_index = renpy.random.choice(search_results)          
            image_path = tags_manager.images[image_index].get("path")
            image_size = tags_manager.images[image_index].get("size")
            image = Image(image_path)

            if not manual_scale:
                return image

            if image_size is None:
                image_size = renpy.image_size(image)
                tags_manager.images[image_index]["size"] = image_size

            width_scale = width / image_size[0]
            height_scale = height / image_size[1]

            # Choose the smaller scale factor to ensure the image fits within the bounds
            # Selecting one scale_factor ensures aspect ratio is maintained
            scale_factor = min(width_scale, height_scale)

            debug_print("Image size: {}".format(image_size))
            debug_print("Width: {} Height: {}".format(width, height))
            debug_print("Scale factor: {}".format(scale_factor))
            return Transform(image, zoom=scale_factor)
But that said, fit "contain" works just the same and that is good to know. So, again: Thank You!
 
  • Red Heart
Reactions: osanaiko

Quintillian

Newbie
Apr 15, 2019
94
196
Time for a new update. Not much to report on the programing side unfortunately™. As I mentioned in the previous update, I wanted to spend some time deciding on the game's setting before going further. When I started this project, I'd envisioned it as a text-based fantasy sandbox sim, but things have changed. Not just to mention I moved away from text-based to more VN-style, I also realized I just didn't have the motivation in me to make yet another game set in medieval fantasy town #51 and that was the reason I had been putting this part off for so long. Well, that ends now. Last week I mentioned I was looking into Steampunk/Dungeonpunk for inspiration. If you are not familiar with Steampunk, you have some homework to do, if you are not familiar with Dungeonpunk either, think of it as Steampunk with the high fantasy elements you know and love, stuff like elves, dragons, magic, and no taxes.

The problem I'd with Steampunk and for that matter Dungeonpunk, it is the same I have with all of the '-punks' in the sense they really go deep into the punkiness, and while that makes sense from a selling point for those niches, it makes everything else that is not on the same flavor of punk stick out like a sore thumb.

I like some variety for the setting, or at least, the possibility of it. Therefore, I decided to go back to basics, I still want to have the fantasy elements (low-ish fantasy though, so we have elves, but also taxes). As for the time period, no medieval times or before. Modern feels boring too, honestly, and has other problems, specially for a slave brothel management game. No near future either, if I wanted to make a game twenty minutes into the future, I would be modding Free Cities instead. Space Sci-fi could be cool (makes notes for another management game about a space roaming brothel in a starship), but I have too much love for the genre to tarnish it with my amateur writing, so that's why, I have decided to set this game a little bit into the past, into the fictional city of Babylon, in the way I'm thinking of it, pictured it as if was fantasy Rome, with all the decadence real Rome was known for, but that it instead of collapsing, it somehow made it into an early 1940s Hollywood era.

With this change, I went back and re-touched the menus with a new color palette in mind:

You don't have permission to view the spoiler content. Log in or register now.

You don't have permission to view the spoiler content. Log in or register now.

And, now that I have a definitive setting, I can start writing lore to fill out the world. On the writing side, I already begin working on a skippable intro scene that is just there to give a little context to the player's situation and serve as a small tutorial. On the programming side, I began working in the barebones of the Character Creation. Thus, the plan for the next update is to keep working on these two items, and hopefully, in the coming weeks at long last formally introduce the Personality System inspired by the Big Five personality traits, but adjusted to fit an h-game and now on-brand with the setting, composed of the five Facets that will shape a Girl's personality: Wickedness, Lewdness, Industry, Spotlight, and Romance.

Until next week then!
 
Last edited:
  • I just jizzed my pants
Reactions: osanaiko

Quintillian

Newbie
Apr 15, 2019
94
196
Update. This iteration brought a lot of further changes to the UI. Some of them as only half-baked, but nonetheless, an update is due.
  • Continued work on Character Creator and the intro/tutorial scene. Going slow on this two, as the CC is turning out to have very repetitive work.
  • Renamed the previously mentioned Girls screen to Roster screen. Going forward, although is not currently a focus of mine to include male slaves, the game’s code base or UI shouldn’t just assume the gender or sex of the brothel residents.
  • Simplified the now Roster screen so it fits more characters. It was getting annoying even for me as the developer to have 10+ characters in the brothel, but only being able to easily see 3 or 4, and having to scroll every single time to reach the others below. Now, it can offer a general view of 10 characters, which is a nice, round number, and I do like nice, round things. Also simplified this screen limiting the info shown. Going forward, the goal of this screen is to further prioritize displaying to the player which stats have changed recently for each character.

You don't have permission to view the spoiler content. Log in or register now.

  • Consequently, changed the Overview screen so it is now an actual overview. It is basically what was previously on the Girls screen, but for an specific character. The wall of text that was the previous Overview screen has been moved to General > Description.
  • On the same note, simplified the top menu, so it is now just General, Character, Interact, and Manage tabs.
  • Switched Stats from having their own color to a semaphore coloring system from low to high, and give Stats bars their own sprite instead of using a Frame with a Solid color.
  • Remove the Obedience Stat. Some sort of numerical value to determine how willing a character is to following orders will still be needed in some form, but I am moving away from the idea of having it being a discrete number. It will probably test going for some sort of baseline Obedience, and then add or subtract modifiers to that depending on the act the player is asking the character to do, that will hurt or help the ultimate Obedience Check required to get compliance.
  • Lastly, the Adoration and Fear Stats were moved to be under the Relationships System. As a reminder, the Relationships System is currently implemented so everyone in the brothel has a relationship with everyone else, instead of just towards the player.
You don't have permission to view the spoiler content. Log in or register now.

  • On the Character > Skills screen, added the same treatment to the Skills bars sprite.
  • Added the Unknown icon at the right side of the Skill bar to indicate the player currently doesn’t knows the character’s dispositions towards skills. For Main Skills, not Sex Skills, these dispositions currently go as Hates, Dislikes, Indifferent, Interested, and Passionate. Hidden values like this are considered in the game as Secrets.
You don't have permission to view the spoiler content. Log in or register now.

  • For the Interactions Screen. 4 types of Interactions the player can initiate are Chat, Sway, Influence, Training Interactions.

You don't have permission to view the spoiler content. Log in or register now.

  • For now, only implementation of the Share Rumor Interaction was started. Asking a character to Share a Rumor, will prompt the player make on a roll (TBA). On success, that character then shares a Secret they know about someone else.
  • For now, since the only Secrets a character knows are their own, they will reveal one of their own Secrets. The plan is to change this so that characters learn Secrets of other characters through Interactions between themselves that happen in the background every time the player Ends the Period of the Day, meaning a max of 3 Interactions per Day.

You don't have permission to view the spoiler content. Log in or register now.
Pasted image 20240320153817.png Pasted image 20240320153934.png Pasted image 20240320160104.png Pasted image 20240320162028.png Pasted image 20240320162135.png Pasted image 20240320165653.png
 

Quintillian

Newbie
Apr 15, 2019
94
196
New update.

So March is over, and with are any hopes of any Q1 2024 release of v0.1.0. That’s unfortunate, but not entirely unexpected. This project started mid September 2023, and from there, it’s been a wild ride and the TODO list hasn’t stop growing. I wouldn’t call it scope creep though, it is more like a scope’s enlightenment as the features I’m envisioning take form one way or another. That said, I still don’t dare to predict any release dates soon, because I’m going to be really busy with another IRL project from late April to late July/early August, which will severely limit my ability to work on this. Knowing myself, I’ll sneak in sometime even if cost me sleep, so the most probable thing is these dev updates will slow down further because they also take some time to prepare.

In any case, let’s go through the summary of the developments for this iteration. As always, please feel free to leave opinions, suggestions, and/or critics. I appreciated it.

You don't have permission to view the spoiler content. Log in or register now.

Updates:
- Pause work on the Character Creator, and Intro Scene. As for the Intro Scene, honestly, I just didn’t feel like it. For the CC, the ‘backend’ has been mostly set up, now is matter of preparing the UI and adding content to it. For now, it’s limited to a Male player character, but with an asterisks that I may come back and expand this option later on. There are 3 Gender Classes in the codebase, Male, Female, and Futa, but for now the Player creation process only uses Male.

- Updated the top hud and remove Food and Medicines from the list of resources. Food and Medicines are now considered as Upkeeps. Instead of maintaining a Food or Medicine inventory, the Upkeep gets converted to a money/gold/Eros cost at the end of the day. Additionally, joining the list of Upkeeps are Luxury and Drugs. More on them on a Future Post.

- Reworked the Effects System, from the ground up including structure, data, and initialization. There are still some rough edges to smooth, this will make more sense once I start writing about modding again on a a Future Post. I decided to not make mod support part of the v0.1.0 release. v0.1.0 will be strictly for the main game loop and base simulation mechanics.

- Speaking of Effects, and adding to it the Stats and Attributes, the entire game data configuration files have been switched to use TOML format instead of JSON. Internally nothing changes for the application as it still uses the data parsed as a dict, but going forward all config files that are planned to be end-user-editable will use TOML format because of comment support among other things.

- For Stats and Attributes, expanded and added some of their effects within the game. As well as updated their respective Tooltips.

- For Skills, added another sub-Stat per Skill, that will be referred as Learning. I’ve been going over and over through my Game Design Document thinking on ways to implement training in a way that is not too grindy, but also more or less realistic, and for a while I felt I was going around in circles. The problem is that when it comes to training / learning stuff, ‘not too grindy’ and ‘realistic’, sometimes feels contradictory. In practice, getting better at a Skill requires repetition of some degree unless you’re a savant. But that gave me an idea, that’s were Learning comes into focus, adding it to the Skills/Training system. For now Skills can only gain experience and level up from doing the thing. Training a Skill will not increase its XP right away, but increase its Learning Stat instead so that the next time XP on that Stat is earned, some Learning is consumed and the overall XP earned is increased. In the future, I want to add some extra behaviors to Learning, for example that as long as it’s value is not 0, even failed rolls can give XP.

- Speaking of Rolls, I invested way too much time down the rabbit hole that is probabilistic analysis of dice rolls systems. Definitely putting a pin on that to come back it later on, but for now, I’m going to dumb it down to a simple roll with modifiers and difficulty threshold, basically means I’ll just be vibing it, which means v0.1.0 may be a unbalanced mess, but that’s okay for now.

That’s all for now.


Edit:
Managed to squeeze one more change before locking in for the week.
- Added first implementation of Rolls and Checks in the UI.
You don't have permission to view the spoiler content. Log in or register now.
 
Last edited:

Quintillian

Newbie
Apr 15, 2019
94
196
Turns out, I was not as busy as I thought I would.

Yet.

So I figured I just carpe that diem and update here with the progress so far even its not much.

Updates:
- Change the name of the game. Yes, again. But this is the last, promise.
- Added the ability to visit the Slave Market and purchase slaves. I still want to implement some sort of location-travel like in Jack-o-Nine-Tails or Brothel King, other similar games, but honestly the thought of devoting time to look for images or generating them, and them actually come up with a map it just sucks out the motivation out of me, so it’s all coding for now.
- Lastly, I also played around with RenPy Key bind system to navigate the ui.

As usual, here is a
You don't have permission to view the spoiler content. Log in or register now.