I moved the project from Unity 5.3.4 to Unity 2018.1.6. Unity 5 is getting pretty long in the tooth and I really want to implement TextMesh Pro (alternative text rendering plugin). Experience tells me that you should always avoid upgrading engines or APIs that your project is relying on but I figured I had the time and if I was ever going to do it, it’d be now. If you’re lucky nothing breaks but you can’t ever expect that. Truth be told, you never know until you try.
Technically, only one thing broke. Unity removed MSAA from UI canvases rendered in Screen Overlay mode (default camera). It made some screens, like the building blueprint screen, really, really ugly and unfortunately the solution to that issue was to change the rendering of every single screen in the game and that cause a whole mess of issues. It was a domino effect of shit. It wasn’t hard to fix but incredibly tedious. Eventually I was able to put everything back in order. #NeverUpgrade
It’s a really good text rendering engine but the feature I wanted the most is its ability to insert arbitrary sprites in text.
Improved “Battle system”
If you squint really hard, House Dominae is almost like an RPG, where your slaves are party members and customers are enemies to battle and defeat. That’s honestly pretty close to how I’ve been looking at it. There is a system in the game where slaves encounter customers and attempt to defeat them, except not with swords and magic but with their bodies and skills.
Inspired by these ideas I made some changes to how the customer-slave encounters play out. Previously, slaves would roll dice based on the amount of experience points in their relevant skills. Those rolls would be modified by various circumstantial modifiers like gender/orientation compatibility, tiredness, etc. until finally tallied up and compared to the difficulty of the requested act.
That system worked well enough but while playing the game I observed that it felt really binary. Your slaves would either fail every time, or they’d succeed every time and it just wasn’t very interesting. I tried making the limit more fuzzy by allowing slaves to soft fail, i.e. get the job done but poorly.
The new system is closer to an RPG battle in the sense that every customer has a climax limit (health) and the slave gets multiple attempts (attacks) to reach that limit. If a slave can’t immediately satisfy a customer they can make an additional obedience check to see if they want to continue. Customers will do a similar “patience” roll to see if they’d want to continue. As long as both agree the slave can keep swinging. The result is the climax ratio the slave delivered divided by the number of attempts made. This means that a slave can “succeed” by 30%, which would be considered a poor result. They can also succeed by 200%, which could be interpreted as the customer cumming twice.
This level of granularity means that the progression of each slave’s performance will feel much less binary. Additionally all these values are fed into the text generation system so you can write really creative and detailed descriptions.
The service phase has been removed and is replaced by a foreplay phase. Unless they fail an obedience check a slave will always perform some kind of foreplay at the start of a customer encounter. They will maybe flirt or do a little striptease dance before moving on to the main event. This will cut off a small portion of the customer’s climax limit, making the encounter slightly easier.
Skills now have discrete levels
A slave’s performance in a skill used to be based on the precise value of experience points for that skill. That’s been changed to a more typical leveling system. Skill rolls are based on the level for that skill.
Obedience dictates whether or not a slave will do as they’re told. They can either accept a task, resist it, or refuse it entirely. I had a similar issue with obedience rolls as I did with customer-slave encounters where the rolls felt really binary. Either a slave would refuse everything or they’d agree to everything.
Thankfully, this didn’t need as big of an overhaul. I changed up the math to a much simpler (and to me, more predictable) look-up table. It gives me better control and I can tweak it as I go along.
It’s a tricky balance because I want Obedience to matter while not making it so that a slave can constantly disobey and drag the game down. This should work for now though.
More LUA stuff
Finally, this past week I’ve made some good progress with custom activities, scripted in LUA. Most has to do with exposing the necessary functions to the scripting environment, writing helper functions and sample scripts.
So far I’m very happy with how it’s turning out.