Thursday, 28 June 2012

Well, I finally got it working. Skyrim Slavers' Guild is a go, at least for a single quest.

Turns out that package templates and packages aren't quite as interchangeable as the wiki page seemed to suggest. In particular, if you make a template and use it as a package, although the CK will accept it, the package won't do anything.

That explains so many of my problems in the last few months.

Friday, 8 June 2012

Skyrim Slavers' Guild

Time for another update. A lot happened since the last one.

Firstly, the commercial effort stalled. What happened was I got a job offer. It was only going to be for six weeks, and I needed the money and ... anyway, I'm still here. I might return to the indie dev plan at some point, but for now it's back to work.

Of course, that also means back to free software development in my spare time. Well, not Free Software in the strict sense, I suppose. What happened is I started daydreaming about a Skyrim mod for a Slavers' Guild faction. And then I specced it up. And now I seem to be deep in development. I always did want to learn the Creation Kit (as it's now called).

The Skyrim Slavers' Guild is going to resurrect a long defunct guild of slavers in Skyrim. The Dragonborn gets a chance to get in at the ground floor. As a Slaver, or as an Abolitionist. Or as a slave. The idea is to have a multi-part questline that follows the evolution of the guild from virtual non-existence to becoming a major power in Skyrim politics.

More information:

http://www.necavi.org/slavers/index.php/Skyrim_Slavers_Guild_Wiki

http://www.loverslab.com/showthread.php?tid=4078

irc://irc.irchighway.net/skyrim_slavers

Thursday, 22 September 2011

Crass Commercialism

I've decided to bite the bullet and try my luck in the indie game market.

Not without a degree of trepidation, I must admit. But, I'm beginning to think that the only way I'll see stable employment from this point forward is to be my own boss. And if I'm going to spend all day sitting around writing software anyway, I might as well try and make it pay the bills.

So, the plan currently is to keep coding, but look at a commercial release of something. Probably still aim at the adult game market.I've got the coding skills; maybe some commercial incentive will get me to see a project through to completion for a change. Certainly it'll be nice to be able to work full time on something.

I'll also probably end up with adwords and a tip jar box on here at some point.

Plan A was "get a job", and that's pretty much failed. This is Plan B.

More details to come.

Saturday, 17 September 2011

People Are Hard

Damn, but Inform gets frustrating when you try and do interactions with people.

A simple thing like fastening a collar around a slavegirl's neck falls foul of several rules.

In other news, I've decided to go professional with the games dev. Not sure of the details yet - I have a meeting which might make some funding available, so no hard and fast decisions until get done with that. Dangerous Game is one of the possible projects I might commercialise. Or it might end up being something completely new.

Meanwhile, I'm still working on The Doghouse. The story so far: You (as PC) have been summoned by your cousin Vinny and lumbered with looking after his new nightclub, "The Doghouse" while Vinny travels abroad for health reasons that are completely unrelated to the amount of money he owes to the Mob.

Of course with all that money owing, various extremely violent people will be displeased if you just walk out of the nightclub and get on with your life. So the sensible thing is to look around, work out the business plan, and get the club operational as soon as possible so you can get out before someone decides to put a contract on you too. Now if you could only work out why he put bedrooms adjoining the dance floor. Or jail cells in the basement...

You're aided in this (if that is indeed the correct word) by Einstein, the biggest and dumbest bouncer in the world. Einstein has had the plan explained to him by Vinny, but can't really remember much more than the "package is due today", although with the right questions, you might manage to jog his memory. And the arrival of the package will certainly answer a lot of questions.

So far I've coded up to the package arriving, (which has been great fun) and then hit a bit of a wall. So I hived off the "package" into it's own inform game with a view towards recombining the two when it's working.

I don't really want to release another "no-sex but loads of setup" file, so I'm going to keep plugging at the sexslave interactions, and hopefully release when there's something more to do than wander around and make wisecracks.

Monday, 12 September 2011

The Doghouse

Inspired by Nuku's Flexible Society, I've been playing with Inform 7 again. I seem to be afflicted with more than my usual share of "Grasshopper Mind" at the moment.

Here's a start for something called The Doghouse. It's just a start at the moment, really. You'll need an Inform interpreter to play it. If you don't already have one, WindowsFrotz seems to work well enough.

Themes are going to be more or less my usual ones. There's not a lot of naughtiness in this yet, but you can get some idea of how it's going to develop...

Thursday, 8 September 2011

Action and Action_Sleep

The action base class is pretty trivial
class Action
        attr_accessor :name
        attr_accessor :resistance

        def initialize(args)
                @name = args[:name]
                @resistance = args[:resistance] || 100
        end
end
That's a name, and a resistance value. In general if obedience exceeds resistance.

Of course, doing this in ruby, we don't really need a base class. So all this does is set a default resistance.

So, we have our first (and so far only) subclass Action_Sleep

class Action_Sleep < Action
        def initialize(args=nil)
                args = {} unless args
                args[:name] = "Sleep" unless args[:name]
                args[:resistance] = 35 unless args[:resistance]
                super(args)
        end
end

That defauts the name and changes the default resistance. I've left the args in so we can either have custom sleep actions for girls with strange sleep patterns, or else subclass it for something sleeplike later on.

What's missing here is the perform method. And this is where I get in a tangle.




#
#       two factors: obedience and tiredness
#
#       five outcomes:
#
#       disobedient and alert: will stay awake
#       disobedient and a bit tired: will try to stay awake
#       disobedient and very tired: fall asleep, mumbling defiance
#       obedient and tired: will go to sleep
#       obedient and alert: will try to sleep and pretend if need be
#
#       how to define "tired" then?
#       what do I want from tiredness?
#
#       I want to impose some limit on how long people can work
#       I want to be able to exceed that limit
#       I want to use sleep-dep to compel obedience
#
        def perform(actor)
                tiredness = 100 - actor.alertness
                obeidient = (actor.obedience > @resistance)
                tired = (tiredness > 40)
#
#               now, the simplest case is the obedient one
#
                if obedient
                        if tired
                                print "#{} sleeps soundly"
                        else
                                print "#{} lies still and pretends to sleep"
                        end
                        return
                end

#               so, these are the disobedient cases
#               simplest of which is if she's at zero alertness
#               in which case she falls asleep anyway
#
                if actor.alertness == 0
                        print "#{} mutters in her sleep"
                        return
                end

#
#               if she's not tired, she refuses to pretend to sleep
#
                if !tired
                        print "#{} makes rude gestures at the CCTV camera"
                        return
                end

#
#               now then: being tired will make her more inclined to
#               obey than she would be otherwise. Let's have a bonus #               from 1-20
#
                if actor.obedience + tiredness / 5 >= @resistance
                        print "#{} dozes, restlessly"
                else
                        print "#{} stares bleary-eyed at the camera"
                end
        end
That's still not got any changes to stats. Tiredness, obedience, resistance, none of them are moving at this point.

Next thing is to make it all compile and see how it runs.
 OK, Girl class now,
class Girl
        attr_accessor :name         # girl's name
        attr_accessor :obedience    # 100 == perfect obedience
        attr_accessor :alertness    # 0 == asleep, 100 == hyper
        attr_accessor :energy       # 0 == sick, 100 == fighting fit
        attr_accessor :actions      # action tabs - all possible actions
        attr_accessor :current      # currently selected action

#
#       set name from params, defaults for other stats
#       only one action (sleep) for now
#
        def initialize(args)
                @name           = args[:name]
                @obedience      = args[:obedience]      || 10
                @alertness      = args[:alertness]      || 100
                @energy         = args[:energy]         || 100
                @actions = {
                        :sleep => Action_Sleep.new({})
                }
                @current = @actions[:sleep]
        end
       
#      
#       call perform on the current action
#
        def do_shift(shift_id)
                @current.perform(self)
        end
end
Stats are 1 - 100 in range.
 That was simple too. Never mind, next one makes up for it