devolution

Author Topic: Whore Master Patch  (Read 193709 times)

0 Members and 1 Guest are viewing this topic.

Offline Xela

  • Global Moderator
  • *****
  • Posts: 6893
  • "It's like hunting cows"
Re: Whore Master Patch
« Reply #195 on: June 12, 2012, 04:41:45 PM »
i thing Fear AND love (highest of the two) should counter spirits effect on rebeliousness. its logical realy.

Not really as those two are in no way self-exclusive... Better option is to get the sum and divide by 2.
« Last Edit: June 12, 2012, 07:15:54 PM by Xela »
Like what we're doing?

Offline b00marrows

  • Full Member
  • ***
  • Posts: 120
Re: Whore Master Patch
« Reply #196 on: June 12, 2012, 04:43:32 PM »
Spirit in Vanilla has such effect on Rebelliousness possibly in the sense of "Break one's spirit" BUT I don't understand why Rebelliousness AND Obedience are both required? Under what circumstances does Rebellious girl Obey and Obedient girl Rebels...

from what i can tell Rebelliousness is a figure calculated from other stats (obedience/spirit maybe love, fear and hate too?)

Offline Xela

  • Global Moderator
  • *****
  • Posts: 6893
  • "It's like hunting cows"
Re: Whore Master Patch
« Reply #197 on: June 12, 2012, 04:51:12 PM »
ooo i got another idea too, if you controle a girl with fear there should be a downfall (once again its logical) for instance when she is working she is SCARED if she fails she will be scoulded, low self esteem leading to unhappyness and accidents!(possibly a trait? "she is fearfull of what will happen to her" so theres a chance of half the effect of her stats on her job?)

Unhappiness... = Yes! Accidents... on the other hand... Fear is one of the most powerful motivators in the world, accidents are not very logical.

on the other hand love should be the better version leading to happyness increasing, less accidents and all around a better worker.

Yeah, cause multiple girls loving one guy never leads to disaster... Since love is not very easy to achieve, a decent addon to WM would be happiness decreasing if player 'forgets' about the girl for a while (No interactions) and increase heavily when player interacts with the girl.

next i think it should be harder to increse these two maybe half the current increse its far too easy currently.

Agree 100%

and lastley is there a way to congradulate a girl? i have always wondered but never experimanted. if not there should be an option while interacting to congradulate them (verbaly/pocket money/ or even sexualy with love/nyphomaniacs?)

In scripts. Use interactions.
Like what we're doing?

Offline Xela

  • Global Moderator
  • *****
  • Posts: 6893
  • "It's like hunting cows"
Re: Whore Master Patch
« Reply #198 on: June 12, 2012, 04:52:16 PM »
from what i can tell Rebelliousness is a figure calculated from other stats (obedience/spirit maybe love, fear and hate too?)

You're prolly right but I don't have the energy trying to read C++ code :(
Like what we're doing?

Offline Aika

  • Full Member
  • ***
  • Posts: 138
Re: Whore Master Patch
« Reply #199 on: June 12, 2012, 04:52:47 PM »
wow realy? huh.. cant be... i always have trouble with girls with max love (i run a herum like brothel) max love is the first thing i get on a girl

Well, here's the code (complete with comments) for the current version. If you can spot something wrong with it, I'd like to know, because rebelliousness and girls obeying are doing some wierd things even in my test brothel.

Code: [Select]
bool cGirls::DisobeyCheck(sGirl* girl, int action, sBrothel* brothel)
{
    int diff;
    int chance_to_obey = 0;        // high value - more likely to obey
/*
 *    let's start out with the basic rebelliousness
 */
    chance_to_obey = GetRebelValue(girl, false);
/*
 *    let's normalise that:
 *    multiply by -1 to make high values more obedient;
 *    then add 50 to get a range of 0 to 100
 */
     chance_to_obey *= -1;
     chance_to_obey += 50;
     
/*
 *    OK, let's factor in having a matron: normally this is done in GetRebelValue
 *    but matrons have shifts now, so really we want twice the effect for a matron
 *    on each shift as we'd get from just one. Either that, or we need to make this
 *    check shift dependent.
 *
 *    Anyway, the old version added 15 for a matron either shift. Let's add
 *    8 for each shift. Full coverage gets you 16 points
 *
 *  Aika edit: increased to 12 per shift
 */
     if(brothel) {
        if(brothel->matron_on_shift(SHIFT_DAY)) chance_to_obey += 12;
        if(brothel->matron_on_shift(SHIFT_NIGHT)) chance_to_obey += 12;
    }
/*
 *    This is still confusing - at least it still confuses me
 *    why not normalise the rebellion -100 to 100 value so it runs
 *    0 to 100, and invert it so it's basically an obedience check
 */

    switch(action) {
    case ACTION_COMBAT:
/*
 *        I thought I did this before - must have been lost in the merge
 *        somewhere.
 *
 *        anyway, separate combat checks into two - half
 *        for magic and half for combat. If a girl is
 *        an archmage in her spare time, but doesn't know which
 *        end of a rapier to hold - that ought to cancel out
 *
 *        Also, let's make this a sliding scale: 60% is the break-even
 *        point (whores *should* require some training before they'll work
 *        as soldiers) and for every 5 points above or below that
 *        there's a + or -1 modifier
 */

#if 1    // WD use best stat as many girls have only one stat high   
       
        diff = max(girl->combat(), girl->magic()) - 50;
        diff /= 3;
#else
        diff = girl->combat() - 50;
        diff /= 5;
        chance_to_obey += diff;
        diff = girl->magic() - 50;
        diff /= 5;
#endif
        chance_to_obey += diff;
        break;
    case ACTION_SEX:
/*
 *        Let's do the same thing here
 *
 *        Just noticed that high libido was lowering the chances
 *        of obedience...
 */
        diff = girl->libido();  // MYR
        diff /= 5;
        chance_to_obey += diff;
        break;

    default:
        break;
    }
/*
 *    add in her enjoyment level
 */
    chance_to_obey += girl->m_Enjoyment[action];
/*
 *    let's add in some mods for love, fear and hate
 */
    if (girl->pclove() >= girl->pcfear())
        chance_to_obey += girl->pclove() / 10;
    else
        chance_to_obey += girl->pcfear() / 10;

    // Aika: She'll do it for love OR fear, not both.

     chance_to_obey -= girl->pchate() / 5;
/*
 *    Let's add a blanket 20% to all of that
 */
     chance_to_obey += 20;
/*
 *    let's get a percentage roll
 */
     int roll = g_Dice%100;
    diff = chance_to_obey - roll;

    /* If the result is zero or negative (the roll was higher than the
     * girl's chance to obey), the girl disobeys
     */

    bool girl_disobeys = (diff < 1 ? true : false);
   
       
/*
 *    there's a price to be paid for relying on love or fear
 *
 *    if the only reason she obeys is love it wears away that love
 *    just a little bit. And if she's only doing it out of fear
 */
   
    if(!(girl_disobeys))
    {
        if(diff < max(girl->pclove()/10, girl->pcfear()/10))
        {
            if (girl->pclove() > girl->pcfear())
                girl->pclove(-1);
            else
                girl->pcfear(-1);
        }
    }
    /* Change by Aika:
     * This will only come into effect if the love or fear adding
     * to the chance to obey made the difference between the girl
     * obeying or not.
     */

/*
 *    do we need any more than this, really?
 *    we can add in some shaping factors if desired
 */
    return girl_disobeys;

    /* Some changes to this made by Aika:
     * Changed the calculations assuming a 0 rebelliousness girl
     * will have a 70% chance of obeying. With matrons factored in,
     * she will end up with 94% chance of obeying with all other
     * factors being 0. This has the effect of having high rebelliousness
     * girls having (assuming 50 rebelliousness) a 20% chance to obey, with
     * all other factors being 0. Matrons will bring that to 44%, but this
     * still means high rebelliousness girls will disobey. A lot.
     */
}
« Last Edit: June 12, 2012, 04:55:06 PM by Aika »

Offline b00marrows

  • Full Member
  • ***
  • Posts: 120
Re: Whore Master Patch
« Reply #200 on: June 12, 2012, 04:54:51 PM »
well that wasnet verry nice i was just stating that i still have issues with max love girls....

Offline Aika

  • Full Member
  • ***
  • Posts: 138
Re: Whore Master Patch
« Reply #201 on: June 12, 2012, 04:57:22 PM »
I wasn't doing it to be mean. Seriously, disobeycheck is doing some wierd things, because a -38 girl was able to disobey. 38+50+20 = 108, she should have had a 108% chance to obey even without things like Matron affecting the chances. I don't know what's going wrong, it's frustrating.

Offline b00marrows

  • Full Member
  • ***
  • Posts: 120
Re: Whore Master Patch
« Reply #202 on: June 12, 2012, 05:01:50 PM »
oh god sorry i read that all wrong, from what i can see and who i had trouble with i would point at this section

#if 1    // WD use best stat as many girls have only one stat high   
       
        diff = max(girl->combat(), girl->magic()) - 50;
        diff /= 3;
#else
        diff = girl->combat() - 50;
        diff /= 5;
        chance_to_obey += diff;
        diff = girl->magic() - 50;
        diff /= 5;

altho im no good with code, i know that the girl i had trouble with has both magic and combat at max.

Offline Aika

  • Full Member
  • ***
  • Posts: 138
Re: Whore Master Patch
« Reply #203 on: June 12, 2012, 05:06:46 PM »
Code: [Select]
#if 1    // WD use best stat as many girls have only one stat high   
       
        diff = max(girl->combat(), girl->magic()) - 50;
        diff /= 3;

That part should only run if the girl is doing a security or catacombs job. It makes it so the girl has 1% more or less  chance to obey for every 3 points above or below 50 in the higher of her combat or magic.

Code: [Select]
#else
        diff = girl->combat() - 50;
        diff /= 5;
        chance_to_obey += diff;
        diff = girl->magic() - 50;
        diff /= 5;

That part will never run. The #else preprocessor directive basically comments this part out and runs the #if 1 part instead.
« Last Edit: June 12, 2012, 05:09:08 PM by Aika »

Offline b00marrows

  • Full Member
  • ***
  • Posts: 120
Re: Whore Master Patch
« Reply #204 on: June 12, 2012, 05:11:32 PM »
what about this section?
im guessing the blanket adds a 20%?
/*
 *    Let's add a blanket 20% to all of that
 */
     chance_to_obey += 20;
/*
 *    let's get a percentage roll
 */
     int roll = g_Dice%100;
    diff = chance_to_obey - roll;

    /* If the result is zero or negative (the roll was higher than the
     * girl's chance to obey), the girl disobeys
     */

but i also dont understand the roll? it seems bad?


Offline Aika

  • Full Member
  • ***
  • Posts: 138
Re: Whore Master Patch
« Reply #205 on: June 12, 2012, 05:17:08 PM »
Once all other factors have been added to the girl's chance to obey, a percentage roll is generated. If the 0-99 roll is equal to or higher than the girl's chance to obey, the girl disobeys. This is determined in this part:

Code: [Select]
bool girl_disobeys = (diff < 1 ? true : false);
where if the diff value is less than 1, the boolean value of girl_disobeys is assigned true, and otherwise it's assigned false.

Offline Xela

  • Global Moderator
  • *****
  • Posts: 6893
  • "It's like hunting cows"
Re: Whore Master Patch
« Reply #206 on: June 12, 2012, 05:18:40 PM »
Code: [Select]
    chance_to_obey = GetRebelValue(girl, false);
/*
 *    let's normalise that:
 *    multiply by -1 to make high values more obedient;
 *    then add 50 to get a range of 0 to 100
 */
     chance_to_obey *= -1;
     chance_to_obey += 50;

I don't get it... To different from Python.

What does this do? Takes a rebel factor of 90 for example, multiplies that with -1 to get -90 and adds 50? How does that get us in range of 0 to 100?
Like what we're doing?

Offline Aika

  • Full Member
  • ***
  • Posts: 138
Re: Whore Master Patch
« Reply #207 on: June 12, 2012, 05:22:13 PM »
Rebelliousness has a range of -50 to 50 in my version. It will not go above or below.

Offline Xela

  • Global Moderator
  • *****
  • Posts: 6893
  • "It's like hunting cows"
Re: Whore Master Patch
« Reply #208 on: June 12, 2012, 05:42:17 PM »
Rebelliousness has a range of -50 to 50 in my version. It will not go above or below.

Then I am clueless as well, there is nothing I can see in this code that can make a -38 girl disobey unless Fear/Love or especially Enjoyment can go below 0 (like in -90s)

Code: [Select]
    chance_to_obey += girl->m_Enjoyment[action];
/*
 *    let's add in some mods for love, fear and hate
 */
    if (girl->pclove() >= girl->pcfear())
        chance_to_obey += girl->pclove() / 10;
    else
        chance_to_obey += girl->pcfear() / 10;

    // Aika: She'll do it for love OR fear, not both.

     chance_to_obey -= girl->pchate() / 5;

Edit: Actually it should be possible for a girl to disobey at -38 Rebel. If everything is against you and you get an unlucky roll.
« Last Edit: June 12, 2012, 06:15:36 PM by Xela »
Like what we're doing?

Offline Aika

  • Full Member
  • ***
  • Posts: 138
Re: Whore Master Patch
« Reply #209 on: June 12, 2012, 06:17:32 PM »
Eh, well hammering away at it doesn't seem to be helping, so I'm going to leave it alone for now. Back to the original discussion:

If I may add something...

 Spirit in Vanilla has such effect on Rebelliousness possibly in the sense of "Break one's spirit" BUT I don't understand why Rebelliousness AND Obedience are both required? Under what circumstances does Rebellious girl Obey and Obedient girl Rebels...

Spirit and Obedience both go into the calculation to get the rebelliousness value. Spirit weighs slightly heavier than obedience, so disregarding traits and any other affecting stats a 100 spirit and 100 obedience girl will have about 17 rebelliousness.

Edit: Corrections. A free girl with those stats will have 32 rebelliousness. A slave girl with those values will have 2 rebelliousness. I'm making changes to this in 2.11, so a slave girl will have 9 rebelliousness and a free girl will have 25.


Confidence should be an asset in every job, especially those that directly deal with people (Barmaid, Singer etc.)

I think Spirit is the perfect stat to wrap Rebelliousness around as in most literature out there you constantly come across phrases like 'spirit of resistance', 'his/her spirit must be broken first' and so on.

I suppose spirit and defiance are somewhat linked in general. But then you get the turn of phrase where a girl without a lot of energy is 'dispirited', and energetic girls are 'spirited', and that energy can be a good thing depending on the job you're doing.
« Last Edit: June 12, 2012, 06:31:18 PM by Aika »