Skip navigation

 

The time has come, the mistress said, to speak of many things.
Of boots and whips and candle wax, of floggers and impact scenes.
And why your body is boiling hot, and how you like fuckings.

 

You might enjoy a new thing I’ve been working on. The project is available on github, as usual. It’ll work on mobile, but the interface is much nicer with title (hover) text, and thus a mouse.

This was inspired about a year ago by someone who asked “where are all the games where you play as the slave?” It was a good question, and an interesting thought. Here’s my partial answer.

It’s also a coding experiment. The entire game so far compiles to a single file, 113kb with no external assets. Any developers who inspect the source while it’s running will notice something else interesting – all the interaction is controlled by onclick attributes of <button>s. No fancy event binding, no black magic here, just functions in the global scope and a single mutable state object (“window.g”) representing the state of the game. I could nerd talk for hours about this, but I’ll cut myself off here.

Enjoy.

 


 

2016/10/13 Hotfix: Now works in browsers other than latest Firefox! I didn’t realize Object.values was so bleeding edge. Also, skill raising actions no longer set your skills to NaN. Wow I should have noticed that one. ^^;;

34 Comments

    • Eidalac - 2016-10-13

    Oh, talk nerdie for us. ;)

    Pretty fun, plus it uses d6’s, always nice.

    May have to scan the github once my headache goes away and kid myself that I’ll actually start one of my projects. lol

    • http://motherfuckingwebsite.com/
      http://bettermotherfuckingwebsite.com/

      These two websites were the inspiration for the game engine – that, and frustration with what the BrothelSim/LapisAzurai/Hive game engine has morphed into over the years. There are parts of the code I’m don’t understand and am afraid to change because they break everything. It’s all interdependent and messy and stateful.

      Maiden’s Tale defines essentially the same domain specific language for writing events as the previous engine in a quarter of the code, and save / load are quite straight forward.

      Compare the first 120 lines of this:
      https://github.com/BlueWinds/LapisAzurai/blob/master/src/engine/classes/base.coffee

      vs. lines 10-19 of this:
      https://github.com/BlueWinds/MaidensTale/blob/master/src/engine/loadSave.coffee#L10

      Yes, they actually serve the exact same purpose – they’re entirely comparable, given the different architectures of the two engines.

      Functional programming in a nutshell. “Write less code that’s easier to read, and do the same thing with fewer bugs!” Object Orientation is dead. :P

    • Maidens Tale index.html: 113kb
      index.html without game content: 36kb

      These are uncompressed and non-minified file sizes – they gzip much smaller, and a JS minifier could compress them further still, if necessary.

      The point is that there are currently 75kb of content and a 36kb game engine. 36kb is, these days, considered a relatively light library – compare to something like jQuery or bootstrap, weighing in at hundreds of kilobytes.

      This is actually unrelated to the above comment about a better design / writing less code – the JS and CSS I wrote for the earlier games, though a bit messy, is dwarfed by external dependencies I pulled in. Bootstrap alone is 120kb. jQuery is another 240kb. Lapis Azurai pulled in 500kb of libraries.

      Doing “raw javascript” like Maidens Tale isn’t all flowers and sunshine.
      My CSS is finicky – it looks good in a few modern browsers, but bootstrap supports everything under the sun.
      My element selectors work well in a few modern browsers, but break in older ones.
      I save / load with JSON, which is larger and harder to read than the YAML used in the other games.
      I reimplemented a couple of common utility functions rather than relying on tested, widely used versions of them.
      My tooltips rely on browser native behavior, so they don’t work at all on mobile and some browsers will truncate them (they contain important information).

      …etc… etc…etc…

      There are good reasons people use libraries! Maiden’s Tale doesn’t because I wanted to try it out and because it was an interesting experiment, not because I think it’s a great idea in general. Also because I don’t have to support anything except shiny modern Firefox and Chrome if I don’t want to. :)

    • That enough talking your ear off yet? :P

        • Eidalac - 2016-10-14

        :3

        Takes me back to my days programing in college. One class was assembly language on a Motorola control board. We first had to figure out how to code something, then compete to see who could get it the smallest.

        Professor told us about a colleague who tried to get a c compiler on this board, and spent a year optimizing it… and was 1 byte to large.

        I know it’s hard enough to code for different operating systems, I can’t fathom what a pain it is to work with the range of browsers around these days.

        It’s fucking nutz.

          • Eidalac - 2016-10-14

          Object Oriented is valid (but it was way oversold for years), but it’s one of those things you have to be aware of what it’s good at and what it’s suck at.

          Like libraries. ;)

          I once re-coded an old project (a MUD) from C to Java and learned alot about C I never realized, because Java won’t let you pass a function as an argument to itself. :D

          Pros and cons to any approach, so it’s always good to try doing it a different way.

    • nero - 2016-10-13

    I’m really enjoying this! I’ve always been vaguely disappointed by all the slave games assuming I want to be the master, so this is an awesome wish fulfillment. <3

    • whisper of wraiths - 2016-10-13

    Oh, lovely!

    The closest I’ve got yet to the slave game of my dreams is Corruption of Champion’s Prison Mod, which was excellent, but tragically discontinued.

    Maiden’s Tale is very close to that in spirit and I’m looking forward to more.

    • Glad you enjoy it! I’m honestly not sure how much effort I’m going to put into the game – inspiration is fickle – but I wanted to at least whet people’s appetites for the idea. :)

    • whisper of wraiths - 2016-10-13

    Is the “The lock clicks. You’re alone.” the end of current content?

    • Not at all. Do you not get a “plan your day” screen after that? “The lock clicks” is just the end of the intro text!

      There is, later on, an explicit event that says when you’ve seen most of the content, in italics saying “this is it” and mentioning a few things to try if you haven’t already.

        • tally - 2016-10-13

        Mine also stops at “The Lock clicks. You’re alone.”!

        • whisper of wraiths - 2016-10-13

        If it helps with debugging, my last action was to ask for a change of clothes. I then succeeded at the seduction skill check.

          • whisper of wraiths - 2016-10-13

          Correction: No matter what choices I make or web browser I use, the planning screen does not appear for me.

            • whisper of wraiths - 2016-10-13

            Got it working. I had to update Firefox. The day planning screen must rely on some new-fangled code.

          • In this case, turns out the problem is with every browser except very-recent firefox. So your “every browser” didn’t happen to include the one I use / develop on. :)

            Should be fixed for other browsers now.

    • whisper of wraiths - 2016-10-13

    I may have spotted a bug: On the first day I chose to exercise, clear my mind, then attempt to escape. The next day I chose to check my skills and I found that my strength and lock-picking were now NaN.

    • Wow I should have caught that one. ^^;; Also fixed now.

    • Arcess - 2016-10-13

    I enjoyed this. Thank you. :)

    A couple of bugs that were present before your update an hour ago:

    – “You have shoulder-length staight hair and are currently wearing undefined.”
    This should be “nothing at all” as per (g.events.NamingDone != null ? ‘nothing at all’ : clothesDesc[g.clothes]), right? When I tested it, wearing something triggers the “nothing at all” line in the character paragraph.
    Also, it looks like clothesDesc will result in the word “wearing” printed twice when this it corrected.
    Also, a typo I missed with my pull request: “staight”

    – The “Nap” button doesn’t seem to work in the “Clear your mind” activity.

    My wish is for more Misbehave variants. Also, it seems like the two intrusions are called punishments in the code… do these follow misbehavior? I know that I was told that I knew what I did to deserve it, but I truthfully didn’t even think that there might be a connection until seeing that the other event was also labelled as a punishment.

    • Misbehave was a last minute addition, because I had a couple of punishments and hadn’t yet added enough ways to trigger them. I’ll be looking to remove it eventually.

      You’re right though, the punishments should say why they’re occurring. I’ll add that to the todo list.

        • Arcess - 2016-10-27

        I’ve sent through a new pull request for the typos.

        One piece of feedback that you may not have been expecting: After having a few playthroughs, I can’t help but feel that the player has TOO much autonomy. I am a slave in a helpless situation, but I seem to have a lot of control over it! Certain things like my background make sense, and my actions do not always change my circumstances, which is good. I guess the biggest thing is being able to choose my master at the auction; this doesn’t make a lot of sense in the context of the game. Still, I can understand the advantage of being able to steer the game at that point. What if there was a chance that the master one picked WASN’T the winning bidder? I feel as though this would be a good compromise.

        I will eagerly await any update to any of your games. :)

        • I agree with you, and am considering how to rectify that. One thing I’ll do is make “random events” take up a time slot – oh, you thought you were going to practice piano this afternoon? Surprise, instead you get to be a naked statue at the party.

          Choosing the master though, that’s important – I, for one, want control over whether my master’s going to be a man or a woman. I’ll see if I can make the choice more “player”, and less “character.”

            • Arcess - 2016-11-07

            I understand the desire to choose the sex of one’s master for gameplay purposes.

            What if, for example, there were four masters instead of three and sometimes the player got bought by the one of the same sex that she didn’t choose? Or, alternatively, what if she got the master she chose in a game mechanics sense, but the master’s name was altered to initially seem to diverge from the player’s choice? E.g. “Oh no, you’ve been bought by Ms Smith instead. You can’t tell from here what kind of mistress she’ll be.”

    • RedGales - 2016-10-15

    Oh, yeah, baby. Talk nerdy to me. Oh, baby, yes.

    Er, what? >_>

    Well, I know what I’m gonna give a look later tonight when I get some free time.

    • random - 2016-10-15

    I’m only getting the nighttime rape event as punishment, is it simply due to bad luck or is the other event broken.

    Also while reading the code i found a typo in machine punishment.
    indignaty should be indignity.

    • I’m not sure if I’m unable to reproduce, or if I’ve already fixed the issue, but either way, please re-report (also include browser + OS, and email me your save file) if this continues to happen after the next update.

    • Melvin - 2016-10-16

    This is a highly intriguing concept; I like the execution a lot so far, lacking in content though it is as yet. I might like it if there was some sort of click-anywhere-to-continue function after individual scenes; sometimes two thirds of the day will just dump themselves onto the screen wholesale, which isn’t great from a smoothness-of-reading angle.

    • Anonymous - 2016-10-16

    This is great! The “Nap” button doesn’t work for me though.

    • Will be fixed in the next release, thanks for reporting.

    • Peter Black - 2016-10-24

    My skills don’t seem to be being added to my dice rolls. I have 6 Immodesty, but it adds 0 to my roll when I wash the car.

    • It’s your (skills / 10, rounded down) that gets added to dice rolls.

    • MasterP - 2016-10-29

    I just say that master-slave way will be choice on the start will be perfect.

    • I’m not sure what you’re trying to say here. Do you mean “choose to be the master instead of the slave?” If so, then not going to happen – that’s an entirely different game.

        • MasterP - 2016-11-07

        Exactly thanks Girl Just that. By the way promote your patreon page I have just that question but youe games are awesome follow your way to the greatness.


Comments are closed.