Horsing around (August update)

I recently went on my annual vacation. This is usually the time when I hunker down and work on my personal projects in a more full-time capacity, instead of a couple of hours here and there. I got a ton of things done and I thought this would be a good opportunity to write an update post and talk about some of the changes I’ve made.

Performance improvements

I noticed the game was hitching when I clicked the turn-button (~0.5 seconds) and that led me down a rabbit hole of tracking down what the heck the game was doing that was so god darn CPU-intensive. It turned out to be one of those convenience language feature in C# that is technically expensive but worth the convenience, as long you don’t use that feature tenths of thousands times in a frame, which apparently I was. The fix was fairly straight-forward and the difference in performance was immediately obvious.

However, that made me curious and I decided to do a proper performance profile and look for similar bottlenecks. I ended up finding a number of small but effective improvements, making the game much smoother to play.

House Dominae is not a performance intensive game at all, by any standard, but almost everything in the game is wired up through user-definable rules and every time something changes the game has to re-evaluate everything that may depend on that change. It becomes a domino effect and even though the rules-system is highly optimized, it gets hammered hard when passing turns.

Multi-floor buildings

Second floor with staircases going up and down

The building generator got some attention. The building’s purpose is little more than to be a board for you to place your pieces on, but never-the-less I want it to look like a proper building with walls, doors and and furnishing.

The building generator has always had support for multiple floors but it was never truly expressed until now. Revisiting the building generation code was also necessary before I could start on the next feature…

Stables

A stable with 3 boxes.

I spent a lot of time putting this together and while you could easily argue that this feature barely even belongs in a brothel sim, it relates to my personal interests and to be honest I just had to get it out of my system.

So, you can now rent a stable which acts as a separate building to your brothel and is exclusive to horses. When you buy a horse it will show up and live there, which makes a lot more sense than having them stand around in the brothel. Furthermore, customers may occasionally arrive by horse and they will park them outside your stable. If you want to earn an extra buck you can now service both the customer and the horse they rode in on. (Thank you Delan on the Discord for the suggestion.)

Horses (and dogs) are a part of an optional bestiality-thread of the game. You can choose to play with or without them.

Brothel management stuff

As the manager of a brothel you naturally need to wield some control over your business, as well as be able to get information about how it’s doing. I’ve added a few more features to help in that regard.

You can now manually adjust the gender distribution of arriving customers. This isn’t very realistic but I believe it’s important to allow for players to have this control since it removes the frustration with having to service undesired customers.

At the same time, I added the ability to boost customer count through advertising. It’s just a simple multiplier at a daily monetary cost.

You can now control when your brothel is open for business. This allows the player free up turns for internal affairs like training or resting without having to worry about refusing customers.

Rival brothels

This has been a planned change for quite a while. Your brothel is located in one of five districts, each populated with different qualities and types of customers. You now compete for those customers against rival brothels. At the end of the day you want all of your customers to leave your brothel satisfied. Every customer affects your overall reputation and that is what determines your rank.

Your brothel ranking serves a few purposes:

  • Your rank determines the count and quality of customers, replacing a much more elaborate system that was obscured by unintuitive math.
  • It allows me to balance the game’s difficulty in a more predictable way, which is especially important in the early game.
  • It’s self-balancing, so if your brothel is burdened by too many customers and is unable to satisfy them, your rank will drop and bring your brothel down to a more manageable level.
  • Becoming number 1 in a district is a subtle hint to the player to start thinking about moving to the next district and compete against a new set of rival brothels.

Sex simulation improvements

There is a system in House Dominae’s that handles every sexual encounter, specifically, it figures out who’s doing what to whom and what the effects are, if any. It’s easy for the game to say “they had the sex” and move on, but there’s an important difference between a slave being fucked by a drunk half-chubbed peasant, being fucked by someone they love or being fucked by a god-damn horse (especially if it happens to be their first). The system itself is remarkably straight-forward but the code has to consider countless variables and it had become a bit of a mess, in need of a clean-up. So I did just that.

The game now keeps track of participants’ phalli and orifices. Again, it’s a very simple system but at least it means that size matters. If a person is too big, the receiver may feel pain. All of these small, almost inconsequential differences trickle down to the characters themselves and gives them an opportunity to respond in meaningful ways.

Pleasure is handled differently than before. It used to be a skill check and some dice rolls, but you could run into situations where characters had sex but no one came. Now sexual pleasure is more assumed and it’s more a matter of how fast one gains pleasure and how it’s distributed between participants. With this came some new sensitivity values so that characters can be more or less sensitive in places.