code:
"use strict";

var SexRegistry = {
    scene: [],
};

SexRegistry.addScene = function(scene) {
    scene.id = this.scene.length;
    this.scene.push(scene);
}

SexRegistry.filter = function(tag) {
    return this.scene.filter(function(scene) { return scene.tags.indexOf(tag) != -1; });
};

var SexScene = function(name, tags, requests) {
    this.name = name;
    if (Array.isArray(tags))
        this.tags = tags;
    else
        this.tags = [ tags ];
    if (requests != undefined) {
        if (Array.isArray(requests))
            this.requests = tags;
        else
            this.requests = [ tags ];
    }

    SexRegistry.addScene(this);
}

SexScene.prototype.requests = [];

SexScene.prototype.available = function() {
    return true;
}

SexScene.prototype.request = function(arr) {
    if (arr == undefined)
        arr = [];
    if (!Array.isArray(arr))
        arr = [ arr ];
    var out = arr.slice(0);
    out.splice(0,0,this.requests);
    return out;
}

SexScene.prototype.display = function(girl, returnto) {
    if (!this.available(girl))
        return;
    ToText("" + this.name + "

");
}

SexScene.prototype.displayInline = function(girl, returnto) {
    return " | " + this.name + "";
}

SexScene.prototype.scene = function(girl, orgasm) {
    ToText("No scene for " + this.name);
}

SexScene.prototype.sex = function(girl) {
    this.scene(girl, 0);
    return 0;
}

SexScene.prototype.afterIntercourse = function(girl, her_orgasm) {
    if (her_orgasm == 1) {
        Game.tmp5 += girl.orgasm();
        if (girl.hasEffect("sensitized") && girl.hasSexTrait("none")) {
            if (Math.tossCoin(0.25) || girl.hasEffect("entranced")) {
                girl.addSexTrait("nymphomaniac");
                ToText(" Due to experiencing extreme sensitivity she became nyphomaniac." + '');
            }
        }
    } else {
        if (girl.hasEffect("desensitized") && girl.hasSexTrait("none")) {
            if (Math.tossCoin(0.25) || girl.hasEffect("entranced")) {
                girl.addSexTrait("frigid");
                ToText(" Due to disappointing experience she became frigid." + '

');
            }
        }
    }
    if (girl.hasEffect("sensitized")) {
        ToText(" Stimulant potion made her overly sensitive during your intercourse.

");
    } else if (girl.hasEffect("desensitized")) {
        ToText(" Deterrent potion made her a lot duller during your intercourse.

");
    }
    if (girl.hasSexTrait("monogamous") && girl.loyalty >= 50) {
        Game.tmp5++;
    }
    Game.tmp5 += Math.round(girl.loyalty / 33 + girl.corruption / 33);
    if (Game.magic_ring == 1) {
        Game.mana = Game.mana + Game.tmp5;
        ToText(" Your ring fills with power (" + Game.tmp5 +  '' + "). ");
    }
}

Location.push(new Locations("residentsex", function() {
    if (Game.energy >= 1) {
        ToText(" You ask " + Game.Girls[Game.tmp0].name +  " to keep you intimate company for a while.");
        if (Game.Girls[Game.tmp0].requestSex([]) == false) {
            ToText("

I'm not sure about this.");
        } else {
            ToText("

");
            if (Game.Girls[Game.tmp0].corruption <= 5) {
                ToText(" " + Game.Girls[Game.tmp0].name +  " blushes, while giving an approving nod.

");
            } else {
                ToText(" " + Game.Girls[Game.tmp0].name +  " looks partly enthusiastic and happy with your attention. ");
            }
            ToText("

");
            if (Game.Girls[Game.tmp0].father == -1 && Game.Girls[Game.tmp0].corruption <= 40 && Game.Girls[Game.tmp0].backstory == '- We grew up together as siblings.') {
                ToText(" — I'm not sure we should do it... We are siblings after all. ");
            } else if (Game.Girls[Game.tmp0].father == -1 && Game.Girls[Game.tmp0].backstory == '- We grew up together as siblings.') {
                ToText(" — Thought of doing it with my brother really entices me. ");
            } else if (Game.Girls[Game.tmp0].father == 1 && Game.Girls[Game.tmp0].corruption < 39) {
                ToText(" — Uhm... I'm not sure we should do it, Dad... ");
            } else if (Game.Girls[Game.tmp0].father == 1 && Game.Girls[Game.tmp0].corruption >= 40) {
                ToText(" — Sure Dad, I'll keep you company! ");
            }
            ToText("

");
            if (Game.Girls[Game.tmp0].body.pussy.virgin.value && Game.Girls[Game.tmp0].corruption == 0) {
                ToText(" — Uhm, I'm still a virgin. Please, be gentle with me. ");
            } else if (Game.Girls[Game.tmp0].body.pussy.virgin.value && (Game.Girls[Game.tmp0].corruption >= 30 || Game.Girls[Game.tmp0].loyalty >= 30)) {
                ToText(" — Master, are you going to take my virginity today? I wouldn't mind you taking it...");
            }
        }
        ToText("

");
        SexRegistry.filter("consensual").forEach(function(scene) {
            scene.display(Game.Girls[Game.tmp0], "residentsex1");
        });

        if (Game.cum_inside == 1) {
            ToText(" ☑ ");
        } else {
            ToText("☐ ");
        }
        ToText(" come inside (if penetration involved)

");
    } else {
        ToText("

You are too tired.

");
    }
    ToText("

Return");
}, 1));

Location.push(new Locations("residentsex1", function() {
    /* actually check here */
    var girl = Game.Girls[Game.tmp0];
    var her_orgasm = 0;
    var scene = SexRegistry.scene[Game.tmp2];
    var act = scene.request();

    if (girl.requestSex(act) == false) {
        if (girl.father == -1 && girl.backstory == '- We grew up together as siblings.') {
            ToText(" — What?! You are my brother! We can't do this...

");
        } else if (girl.father == 1) {
            ToText(" — You are my father, we shouldn't do this!

");
        } else if (girl.corruption <= 10) {
            ToText(" — What? No way I would do something this dirty!

");
        } else if (girl.obedience <= 50) {
            ToText(" — Hmph. I refuse.

");
        } else {
            ToText(" — Sorry, I don't think I want to do it with you yet.

");
        }
    } else {
        girl.sexAct(act);

        Game.energy = Game.energy - 1;
        Game.tmp5 = 2;
        scene.sex(girl);
    }
    ToText("

To population screen

");
}, 1));

Location.push(new Locations("residentcompanion", function() {
    var girl = Game.Girls[Game.tmp0];
    var companion = Game.Girls[Game.companion];

    ToText("Possible actions:

");
    ToText("" + companion.name +  " fucks " + girl.name +  "'s");

    var out = '';
    SexRegistry.filter('residentcompanionfuck').forEach(function(scene) {
        out += scene.displayInline(girl,'residentcompanion1');
    });
    ToText(out.replace(/^ *\|/,' '));

    /*
    ToText(" pussy");
    ToText("|ass");
    ToText("|mouth");
    ToText("|tits with ");
    */
    if (companion.body.cock.size >= 1) {
        ToText(" with her dick");
    } else {
        ToText(" with a strapon");
    }

    ToText(".

");
    if (girl.body.cock.size >= 1) {
        ToText(companion.name +  " will");
        out = '';
        SexRegistry.filter('residentcompanionride').forEach(function(scene) {
            out += scene.displayInline(girl, 'residentcompanion1');
        });
        ToText(out.replace(/^ *\|/,' '));
        ToText(" " + girl.name + '');
    }
    ToText("

" + companion.name +  " will give");
    out = '';
    SexRegistry.filter('residentcompanionlick').forEach(function(scene) {
        out += scene.displayInline(girl, 'residentcompanion1');
    });
    ToText(out.replace(/^ *\|/,' '));
    ToText(" to " + girl.name +  ".

");

    ToText("Join them and fuck:

");
    if (Game.companion_sexact == 1) {
        ToText(" ☑ ");
    } else {
        ToText("☐ ");
    }
    ToText(" your companion

");
    if (Game.companion_sexact == 2) {
        ToText(" ☑ ");
    } else {
        ToText(" ☐ ");
    }
    ToText(" " + girl.name +  "

return", false);
}, 1));

Location.push(new Locations("residentcompanion1", function() {
    var girl = Game.Girls[Game.tmp0];
    var companion = Game.Girls[Game.companion];

    var resrequests = [ 'bisexual' ];
    var companionrequests = [ 'bisexual' ];

    /* Check for any yummy incest */
    if (companion.relationshipTo(girl) != '') {
        companionrequests.push('incest');
        resrequests.push('incest');
    }

    if (companion.relationshipTo(Game.player) != '')
        companionrequests.push('incest');

    if (girl.relationshipTo(Game.player) != '')
        resrequests.push('incest');

    var scene = SexRegistry.scene[Game.tmp2];

    resrequests = scene.request(resrequests);
    companionrequests = scene.request(resrequests, 'companion');

    var refused = false;

    if (girl.requestSex( resrequests ) == false) {
        refused = true;
        ToText("

" + girl.name +  " refuses to indulge into affairs with " + companion.name +  ".

");
    }
    if (companion.requestSex( companionrequests ) == false) {
        ToText(" " + companion.name +  (refused ? " also" : "") + " refuses to indulge into affairs with " + girl.name +  ".

");
        refused = true;
    }

    if (!refused) {
        Game.tmp5 = 2;
        Game.energy = Game.energy - 1;
        var you = '';
        switch(Game.companion_sexact) {
            case 0:
                you = 'watch';
                break;
            case 1:
                Game.tmp5++;
                you = 'companion';
                break;
            case 2:
                Game.tmp5++;
                you = 'girl';
                break;
        }
        scene.sex(girl, companion, you);

        if (Game.magic_ring == 1) {
            Game.mana = Game.mana + Game.tmp5;
            ToText("

Your ring fills with power (" + Game.tmp5 +  "). ");
        }
    }

    girl.WillRecounter();
    companion.WillRecounter();
    ToText("

Return", false);
}, 1));

Location.push(new Locations("residentrape", function() {
    ToText("You will force her to have sex in a rough manner.

");

    SexRegistry.filter("residentrape").forEach(function(scene) {
        scene.display(Game.Girls[Game.tmp0], 'residentrape1');
    });

    if (Game.cum_inside == 1) {
        ToText(" ☑ ");
    } else {
        ToText("☐ ");
    }
    ToText(" come inside

Cancel", false);
}, 1));

Location.push(new Locations("residentrape1", function() {
    var her_orgasm = 0;
    var girl = Game.Girls[Game.tmp0];
    if (girl.hasSexTrait("frigid") && girl.lust >= 80) {
        her_orgasm = 1;
    } else if (girl.corruption >= 30) {
        her_orgasm = 1;
    } else if (girl.hasSexTrait("submissive") || girl.hasEffect("sensitized")) {
        her_orgasm = 1;
    } else if (girl.lust >= 60) {
        her_orgasm = 1;
    }
    Game.tmp5 = 2;
    Game.energy = Game.energy - 1;
    var scene = SexRegistry.scene[Game.tmp2];
    scene.sex(girl, her_orgasm);

    if (girl.hasSexTrait("submissive")) {
        girl.lust += 25;
        Game.tmp5++;
    } else {
        girl.stress = Math.min(girl.stress + 25, 100);
    }
    if (girl.corruption < 25) {
        girl.corruption = girl.corruption + Math.tossDice(3, 5);
        if (girl.attr.willpower >= 2 && ((girl.hasSexTrait("submissive") && girl.loyalty < 20) || !girl.hasSexTrait("submissive"))) {
            girl.obedience = Math.max(girl.obedience - (10 + Math.round(girl.attr.confidence / 2)), 1);
            girl.attr.confidence = Math.max(girl.attr.confidence - Math.tossDice(3, 7), 1);
            girl.attr.charm = Math.max(girl.attr.charm - Math.tossDice(5, 10), 1);
            ToText("She seems to be very mentally disturbed by your actions.

");
            Game.tojail_or_race_description = 0;
            girl.WillRecounter();
        }
    } else if (girl.corruption >= 20) {
        Game.tmp5++;
    }
    if (her_orgasm == 1) {
        Game.tmp5 += girl.orgasm();
        if (girl.corruption <= 65) {
            girl.corruption = Math.min(girl.corruption + Math.tossDice(3, 5), 65);
        }
        Game.tmp5++;
        ToText("

");
        if (girl.hasSexTrait("none") && her_orgasm == 1) {
            if (Math.tossCoin(0.25) || girl.hasEffect("entranced")) {
                girl.addSexTrait("submissive");
                ToText("  " + girl.name + " became submisive.
</>");
                Game.tmp5++;
            }
        }
    }
    ToText("

");
    if (Game.magic_ring == 1) {
        Game.mana = Game.mana + Game.tmp5;
        ToText(" Your ring fills with power (" + Game.tmp5 + "). ");
    }
    ToText("

Proceed", false);
}, 1));

Location.push(new Locations("prisonrape", function() {
    ToText("Use her mouth

Use her ass

Use her pussy

");
    if (Game.cum_inside == 1) {
        ToText(" ☑ ");
    } else {
        ToText("☐ ");
    }
    ToText(" come inside (if penetration involved)

Cancel", false);
}, 1));

Location.push(new Locations("prisonrape1", function() {
    Game.tmp5 = 2;
    ToText("

");
    Game.energy = Game.energy - 1;
    ToText("

");
    if (Game.tmp2 == 0) {
        ToText("

You slowly come into a cell to the girl. Chained in place, she can't really do anything to. Brushing over her cheek, you take a ring gag. After a moment you have fixated a gag on a girl's mouth. You take off your pants and direct your cock into poor thing's face. Her clumsy attempts to evade it only provoke you further. With force you insert cock into an open mouth, making girl moan in protest. Her warm and damp tongue instinctively tries to push out the invader, but it only increases your pleasure. With glee you grabs the victim's head and start to move it. By every second you force yourself into her throat deeper and deeper. By this time moans are replaced with whimper and cries while her tear-stained eyes begin to express humility. You feel how that sight brings you closer to climax.

");
        Game.Girls[Game.tmp0].health = Game.Girls[Game.tmp0].health - 10;
        ToText("

");
        Game.tmp5++;
        ToText("

");
    } else if (Game.tmp2 == 1) {
        ToText("

");
        if (Math.tossCoin()) {
            ToText(Game.Girls[Game.tmp0].name +  " averts her eyes, as you position her to have access to her rear.");
        } else {
            ToText("Glancing behind her, " + Game.Girls[Game.tmp0].name +  " swallows nervously as you squeeze her naked ass.");
        }
        ToText("  ");
        if (Math.tossCoin()) {
            ToText("You line up, then push your cock inside of her ass making her yelp, gasping as you force your way all the way in.");
        } else {
            ToText("Nesting your cock in the crack of her ass, you slide it back and forth a few times before pressing against her back door, slowly but surely increasing the pressure until you force your way inside her.");
        }
        ToText("  ");
        if (Math.tossCoin()) {
            ToText("She tries to get away and break free but chains holding her steadily.");
        } else {
            ToText("Desperately she tries to move away from your intrusion, but the collar, the ropes and your hands on her hips holds her steady");
        }
        if (Math.tossCoin()) {
            ToText("As you fuck her ass, tears falling down her cheeks and she begs you to stop. Her desperation brings you closer to climax.");
        } else {
            ToText("Through the pleasure and pain she begs you to stop, obviously trying to hide the pleasure both from herself and you, feeling betrayed by her own body.");
        }
        ToText("

");
        Game.Girls[Game.tmp0].health = Game.Girls[Game.tmp0].health - 5;
        ToText("

");
        Game.tmp5++;
        ToText("

");
    } else if (Game.tmp2 == 2) {
        ToText("

You enter into a cell. " + Game.Girls[Game.tmp0].name +  " averts her eyes, as you make her kneel. She starts to beg for mercy, realising what's going to happen next.

        ");
        if (Game.Girls[Game.tmp0].body.pussy.virgin.value) {
            ToText("

        You take the girl's virginity by force. She won't forget this.

        ");
            Game.Girls[Game.tmp0].health = Game.Girls[Game.tmp0].health - 15;
            ToText("

        ");
            Game.Girls[Game.tmp0].stress += 45;
            ToText("

        ");
            Game.tmp5 = Game.tmp5 + 2;
            ToText("

        ");
            Game.Girls[Game.tmp0].body.pussy.virgin = false;
            ToText("

        ");
        } else {
            ToText("

        ");
            Game.Girls[Game.tmp0].health = Game.Girls[Game.tmp0].health - 10;
            ToText("

        ");
            Game.tmp5++;
            ToText("

        ");
        }
        ToText("

You start to move inside of her pussy, increasing speed. As you proceed her cries sometimes sound more like moans, yet tears are not stopping. You feel like cumming soon.

");
    }
    ToText("

");
    if (Game.tmp2 == 2 && Game.cum_inside == 1) {
        // rape makes babies more likely apparently.
        if (Game.Girls[Game.tmp0].possiblePregnancy(Game.player, 20)) {
            Game.tmp5 += 2;
        }
    }
    ToText("

");
    if (Game.Girls[Game.tmp0].hasSexTrait("submissive") && Game.Girls[Game.tmp0].trait_known != 1) {
        ToText("

By the end you notice she partly enjoyed your actions and don't hold any real grudge against you. ");
        Game.tmp5++;
        ToText("

");
    } else if (Game.Girls[Game.tmp0].hasSexTrait("submissive") && Game.Girls[Game.tmp0].trait_known == 1) {
        ToText("

Her submissive nature made her mostly enjoy your actions.

");
        Game.tmp5++;
        ToText("

");
    } else {
        ToText("

");
        Game.Girls[Game.tmp0].stress = Math.min(Game.Girls[Game.tmp0].stress + 35, 100);
        ToText("

");
    }
    ToText("

");
    if (Game.Girls[Game.tmp0].corruption < 30) {
        Game.Girls[Game.tmp0].corruption = Game.Girls[Game.tmp0].corruption + Math.tossDice(3, 5);
        ToText("

");
        if (Game.Girls[Game.tmp0].attr.willpower >= 2) {
            Game.Girls[Game.tmp0].obedience = Math.max(Game.Girls[Game.tmp0].obedience - (10 + Math.round(Game.Girls[Game.tmp0].attr.confidence / 2)), 1);
            Game.Girls[Game.tmp0].attr.confidence = Math.max(Game.Girls[Game.tmp0].attr.confidence - Math.tossDice(3, 7), 1);
            Game.Girls[Game.tmp0].attr.charm = Math.max(Game.Girls[Game.tmp0].attr.charm - Math.tossDice(5, 10), 1);
            ToText(" She seems to be very mentally disturbed by your actions. Her charm decreases. Her confidence decreases. " + '' + " ");
            Game.Girls[Game.tmp0].WillRecounter();
        }
        ToText("

");
    } else if (Game.Girls[Game.tmp0].corruption >= 20) {
        Game.tmp5++;
    }
    var her_orgasm = 0;
    if (Game.Girls[Game.tmp0].hasSexTrait("frigid") && Game.Girls[Game.companion].lust >= 80) {
        her_orgasm = 1;
    } else if (Game.Girls[Game.tmp0].corruption >= 40) {
        her_orgasm = 1;
    } else if (Game.Girls[Game.tmp0].hasSexTrait("submissive") || Game.Girls[Game.tmp0].hasEffect("sensitized")) {
        her_orgasm = 1;
    } else if (Game.Girls[Game.tmp0].lust >= 60) {
        her_orgasm = 1;
    }
    if (her_orgasm == 1) {
        Game.tmp1 = 1;
        Game.tmp5 += Game.Girls[Game.tmp0].orgasm();
        if (Game.Girls[Game.tmp0].corruption <= 65) {
            Game.Girls[Game.tmp0].corruption = Math.min(Game.Girls[Game.tmp0].corruption + Math.tossDice(3, 5), 65);
        }
        Game.tmp5++;
        ToText("

");
        if (Game.Girls[Game.tmp0].hasSexTrait("none")) {
            if (Math.tossCoin(0.25) || Game.Girls[Game.tmp0].hasEffect("entranced")) {
                Game.Girls[Game.tmp0].addSexTrait("submissive");
                ToText("  " + Game.Girls[Game.tmp0].name +  " became submisive." + '' + " ");
                Game.tmp5++;
            }
        }
        ToText("

");
    }
    ToText("

");
    if (Game.magic_ring == 1) {
        Game.mana = Game.mana + Game.tmp5;
        ToText(" Your ring fills with power (" + Game.tmp5 +  '' + "). ");
    }
    ToText("

Return", false);
}, 1));

Location.push(new Locations("prisoncompanion", function() {
    ToText("Possible orders:

" + Game.Girls[Game.companion].name +  " fucks " + Game.Girls[Game.tmp0].name +  "'s pussy|ass|mouth|tits with ");
    if (Game.Girls[Game.companion].body.cock.size >= 1) {
        ToText(" with her dick");
    } else {
        ToText(" with a strapon");
    }
    ToText(".

");
    if (Game.Girls[Game.tmp0].body.cock.size >= 1) {
        ToText(Game.Girls[Game.companion].name +  " will ride|suck off|titjob " + Game.Girls[Game.tmp0].name + '');
    }
    ToText("

" + Game.Girls[Game.companion].name +  " will give cunnilingus|rimjob to " + Game.Girls[Game.tmp0].name +  ".

Join them and fuck

");
    if (Game.companion_sexact == 1) {
        ToText(" ☑ ");
    } else {
        ToText("☐ ");
    }
    ToText(" your companion

");
    if (Game.companion_sexact == 2) {
        ToText(" ☑ ");
    } else {
        ToText(" ☐ ");
    }
    ToText(" prisoner

return", false);
}, 1));

Location.push(new Locations("prisoncompanion2", function() {
    var companionrequests = [ 'bisexual' ];

    if (((Game.Girls[Game.tmp0].father == Game.Girls[Game.companion].father) && Game.Girls[Game.tmp0].father != 0) || ((Game.Girls[Game.tmp0].mother == Game.Girls[Game.companion].mother) && Game.Girls[Game.tmp0].mother != 0)) {
        Game.tmp1 = 'her sister';
    } else if (Game.Girls[Game.tmp0].father == Game.Girls[Game.companion].id || Game.Girls[Game.tmp0].mother == Game.Girls[Game.companion].id) {
        Game.tmp1 = 'her daughter';
    } else if (Game.Girls[Game.tmp0].id == Game.Girls[Game.companion].father) {
        Game.tmp1 = 'her father';
    } else if (Game.Girls[Game.tmp0].id == Game.Girls[Game.companion].mother) {
        Game.tmp1 = 'her mother';
    } else {
        Game.tmp1 = Game.Girls[Game.tmp0].name;
    }

    if (Game.tmp1 != Game.Girls[Game.tmp0].name)
        companionrequests.push('incest');

    if (Game.companion_sexact == 1) {
        companionrequests.push('pussy');
        if (Game.tmp2 == 5)
            companionrequests.push('anal');
    } else if (Game.tmp2 == 5) {
        companionrequests.push('pussy');
    }

    if (Game.Girls[Game.companion].requestSex(companionrequests) == false) {
        ToText(" " + Game.Girls[Game.companion].name +  " refuses to treat " + Game.Girls[Game.tmp0].name +  " improperly.

");
    } else {
        ToText("

");
        Game.tmp5 = 2;
        Game.energy = Game.energy - 1;
        ToText("

");
        if (Game.Girls[Game.companion].body.cock.size >= 1)
            var cock = " her cock. ";
        else
            var cock = " a strapon. ";
        if (Game.tmp2 == 1) {
            ToText(" " + Game.Girls[Game.companion].name +  " starts pounding " + Game.tmp1 +  "'s pussy with " + cock + "

");
        } else if (Game.tmp2 == 2) {
            ToText(" " + Game.Girls[Game.companion].name +  " starts pounding " + Game.tmp1 +  "'s ass with " + cock + "

");
        } else if (Game.tmp2 == 3) {
            ToText(" " + Game.Girls[Game.companion].name +  " roughly fucks " + Game.tmp1 +  "'s mouth with " + cock + "

");
        } else if (Game.tmp2 == 4) {
            ToText(" " + Game.Girls[Game.companion].name +  " roughly fucks " + Game.tmp1 +  " between her breasts with " + cock + "

");
        } else if (Game.tmp2 == 5) {
            ToText(" " + Game.Girls[Game.companion].name +  " gets on the " + Game.tmp1 +  "'s cock and starts riding her.

");
        } else if (Game.tmp2 == 6) {
            ToText(" " + Game.Girls[Game.companion].name +  " take " + Game.tmp1 +  "'s cock into her mouth and suck her off.

");
        } else if (Game.tmp2 == 7) {
            ToText(" " + Game.Girls[Game.companion].name +  " take " + Game.tmp1 +  "'s cock between her breasts and give her a titjob.

");
        } else if (Game.tmp2 == 8) {
            ToText(" " + Game.Girls[Game.companion].name +  " proceeds to eating out " + Game.tmp1 +  "'s pussy.

");
        } else if (Game.tmp2 == 9) {
            ToText(" " + Game.Girls[Game.companion].name +  " gives a good cleaning to " + Game.tmp1 +  "'s asshole with her mouth.

");
        }
        ToText("

");
        if (Game.companion_sexact == 0) {
            ToText(" From behind you are looking at two girls action in glee.

");
        } else if (Game.companion_sexact == 1) {
            Game.tmp5++;
            if (Game.tmp2 != 5) {
                ToText(" You get behind " + Game.Girls[Game.companion].name +  " as she's busy with moaning " + Game.Girls[Game.tmp0].name +  " and enter her. ");
            } else {
                ToText(" You penetrate " + Game.Girls[Game.companion].name +  "'s ass as she's riding " + Game.Girls[Game.tmp0].name +  "'s cock. ");
            }
            ToText("

");
        } else if (Game.companion_sexact == 2) {
            Game.tmp5++;
            ToText("

");
            if (Game.tmp2 == 1 || Game.tmp2 == 2) {
                ToText(" You and " + Game.Girls[Game.companion].name +  " double-penetrate helpless imprisoned girl. ");
            } else if (Game.tmp2 == 3) {
                ToText(" You passionately skewer " + Game.Girls[Game.tmp0].name +  " from both directions. ");
            } else if (Game.tmp2 == 4) {
                ToText(" You make " + Game.Girls[Game.tmp0].name +  " ride your cock as " + Game.Girls[Game.companion].name +  " titfuck her. ");
            } else if (Game.tmp2 == 5) {
                ToText(" You make " + Game.Girls[Game.tmp0].name +  " ride your cock in same time as she's getting raped by " + Game.Girls[Game.companion].name +  " ");
            } else if (Game.tmp2 == 6) {
                ToText(" You fuck " + Game.Girls[Game.tmp0].name +  " as she receives a blowjob. ");
            } else if (Game.tmp2 == 7) {
                ToText(" You fuck " + Game.Girls[Game.tmp0].name +  " as she receives a titjob. ");
            } else if (Game.tmp2 == 8) {
                ToText(" You make " + Game.Girls[Game.companion].name +  " to work with mouth over your penis and " + Game.Girls[Game.tmp0].name +  "'s pussy as you fuck her. ");
            } else if (Game.tmp2 == 9) {
                ToText(" You make " + Game.Girls[Game.companion].name +  " to work with mouth over your penis and " + Game.Girls[Game.tmp0].name +  "'s ass as you fuck her. ");
            }
            ToText("

");
        }
        ToText("

");
        if (Game.Girls[Game.companion].corruption <= 40 && !Game.Girls[Game.companion].hasSexTrait("bisexual")) {
            ToText(" " + Game.Girls[Game.companion].name +  " does not take whole thing very well on mental level. Her charm decreases. " + '' + " ");
            Game.Girls[Game.companion].corruption = Math.min(Game.Girls[Game.companion].corruption + Math.tossDice(8, 13), 100);
            Game.Girls[Game.companion].attr.charm = Math.max(Game.Girls[Game.companion].attr.charm - Math.tossDice(2, 5), 0);
            Game.Girls[Game.companion].stress = Math.min(Game.Girls[Game.companion].stress + 20, 100);
            ToText("

");
        } else {
            ToText("

" + Game.Girls[Game.companion].name +  " is mostly enjoying herself.

");
            Game.Girls[Game.companion].corruption = Math.min(Game.Girls[Game.companion].corruption + Math.tossDice(3, 6), 100);
            if (Game.Girls[Game.companion].attr.confidence < 60) {
                Game.Girls[Game.companion].attr.confidence = Math.min(parseInt(Game.Girls[Game.companion].attr.confidence) + Math.tossDice(0, 2), 60);
            }
        }
        ToText("

");
        if (Game.Girls[Game.tmp0].corruption <= 50 && !Game.Girls[Game.tmp0].hasSexTrait("submissive")) {
            ToText(" " + Game.Girls[Game.tmp0].name +  " is disturbed by your actions. Her Charm decreases. Her Confidence decreases. " + '' + " ");
            Game.Girls[Game.tmp0].corruption = Math.min(Game.Girls[Game.tmp0].corruption + Math.tossDice(4, 8), 100);
            Game.Girls[Game.tmp0].attr.charm = Math.max(Game.Girls[Game.tmp0].attr.charm - Math.tossDice(2, 5), 0);
            Game.Girls[Game.tmp0].attr.confidence = Math.max(Game.Girls[Game.tmp0].attr.confidence - Math.tossDice(4, 7), 0);
            Game.Girls[Game.tmp0].stress = Math.min(Game.Girls[Game.tmp0].stress + 40, 100);
            ToText("

");
        } else {
            ToText("

" + Game.Girls[Game.tmp0].name +  " is mostly enjoying herself.

");
            Game.Girls[Game.tmp0].corruption = Math.min(Game.Girls[Game.tmp0].corruption + Math.tossDice(2, 6), 100);
            ToText("

");
        }
        ToText("

");
        if (Game.tmp2 == 1 && Game.Girls[Game.tmp0].body.pussy.virgin.value) {
            ToText(" " + Game.Girls[Game.companion].name +  " takes " + Game.Girls[Game.tmp0].name +  "'s virginity. ");
            Game.Girls[Game.tmp0].body.pussy.virgin = false;
            Game.Girls[Game.tmp0].health = Math.max(Game.Girls[Game.tmp0].health - 15, 0);
            Game.Girls[Game.tmp0].stress = Math.min(Game.Girls[Game.tmp0].stress + 25, 100);
        }
        ToText("

");
        if (Game.tmp2 == 5 && Game.Girls[Game.companion].body.pussy.virgin.value) {
            ToText(" " + Game.Girls[Game.companion].name +  " gives her virginity to " + Game.Girls[Game.tmp0].name +  ". ");
            Game.Girls[Game.companion].body.pussy.virgin = false;
            Game.Girls[Game.companion].health = Math.max(Game.Girls[Game.companion].health - 15, 0);
            Game.Girls[Game.companion].stress = Math.min(Game.Girls[Game.companion].stress + 25, 100);
        }
        var her_orgasm = 0;
        ToText("

");
        if ((Game.tmp2 != 3 && Game.tmp2 != 4) || (Game.Girls[Game.tmp0].body.chest.nipples.elastic == true && Game.tmp2 == 4)) {
            ToText("

");
            if (Game.Girls[Game.tmp0].hasSexTrait("frigid") && Game.Girls[Game.tmp0].lust >= 80) {
                her_orgasm = 1;
            } else if (Game.Girls[Game.tmp0].corruption >= 40) {
                her_orgasm = 1;
            } else if (Game.Girls[Game.tmp0].hasSexTrait(["submissive", "nymphomaniac"]) || Game.Girls[Game.tmp0].hasEffect("sensitized")) {
                her_orgasm = 1;
            } else if (Game.Girls[Game.tmp0].lust >= 60) {
                her_orgasm = 1;
            }
        }
        ToText("

");
        if (her_orgasm == 1) {
            Game.tmp5 += Game.Girls[Game.tmp0].orgasm();
        }
        ToText("

");
        if (Game.tmp2 == 5) {
            ToText(" By the end imprisoned girl ejaculates inside of " + Game.Girls[Game.companion].name +  ". ");
            if (Game.Girls[Game.companion].possiblePregnancy(Game.Girls[Game.tmp0])) {
                Game.tmp5++;
            }
        }
        ToText("

");
        if (Game.Girls[Game.tmp0].hasSexTrait("none") && her_orgasm == 1) {
            if (Math.tossCoin(0.25) || Game.Girls[Game.tmp0].hasEffect("entranced")) {
                Game.Girls[Game.tmp0].addSexTrait("submissive");
                ToText("  " + Game.Girls[Game.tmp0].name +  " became submisive." + '' + " ");
                Game.tmp5++;
            }
        }
        ToText("

");
        if (Game.companion_sexact == 1) {
            if (Game.Girls[Game.companion].body.pussy.virgin.value) {
                Game.Girls[Game.companion].body.pussy.virgin = false;
                ToText(" You take " + Game.Girls[Game.companion].name +  " virginity. ");
                Game.Girls[Game.companion].stress += 15;
                Game.Girls[Game.companion].health = Game.Girls[Game.companion].health - 15;
            }
            ToText(" You ejaculate inside of " + Game.Girls[Game.companion].name +  ". ");
            if (Game.Girls[Game.companion].possiblePregnancy(Game.player))
                Game.tmp5++;
            ToText("

");
        } else if (Game.companion_sexact == 2) {
            ToText("

");
            if (Game.Girls[Game.tmp0].body.pussy.virgin.value) {
                Game.Girls[Game.tmp0].body.pussy.virgin = false;
                ToText(" You take " + Game.Girls[Game.tmp0].name +  " virginity. ");
                Game.Girls[Game.tmp0].stress += 15;
                Game.Girls[Game.tmp0].health = Game.Girls[Game.tmp0].health - 15;
            }
            ToText(" You ejaculate inside of " + Game.Girls[Game.tmp0].name +  ". ");
            if (Game.tmp2 != 1 && Game.cum_inside == 1) {
                Game.tmp1 = 1;
                if (Game.Girls[Game.tmp0].possiblePregnancy(Game.player))
                    Game.tmp5++;
            }
            ToText("

");
        }
        ToText("

");
        if (Game.magic_ring == 1) {
            Game.mana = Game.mana + Game.tmp5;
            ToText(" Your ring fills with power (" + Game.tmp5 +  '' + "). ");
        }
        ToText("

");
    }
    ToText("

");
    Game.Girls[Game.tmp0].WillRecounter();
    Game.Girls[Game.companion].WillRecounter();
    ToText("

Return", false);
}, 1));

Location.push(new Locations("capturerape", function() {
    switch (Math.tossCase(2)) {
    case 0:
        ToText("You pull off the " + Game.newgirl.body.race.name +  " girl’s clothing, stroking her nipples thoughtfully.You tie your victim’s wrists behind her back with some rope, stroking her inner thighs with your hands, then trail your fingers up along her pussy. ");
        break;
    case 1:
        ToText("You simply push the " + Game.newgirl.body.race.name + " girl to the ground, face first, undress her rear and give her a slap on her buttcheek. ");
        break;
    case 2:
        ToText("You quickly tie her arms behind her back while she is out, kissing her neck while using one hand to flick each finger over her clit repeatedly, making her give a shuddering gasp.
");
        break;
    }

    if (Game.Girls[Game.companion].corruption >= 50) {
        ToText(" " + Game.Girls[Game.companion].name +  " holds the " + Game.newgirl.body.race.name +  " girl’s arms behind her back while you spread your caught prey’s legs, her scared eyes fixed on you.
");
    }

    if (Math.tossCoin()) {
        ToText(" With your cock tapping against her lower lips, you take out a bottle of vegetable-based massage oil, and spread it over your tool, grinning as she tries and fails to get loose. The ropes hold her legs spread, and her feet to either side of her shoulders, incidentally forcing her pussy to rub against your now quite ready tool as she struggles.
");
    }

    switch(Math.tossCase(2)) {
    case 0:
        ToText("Slamming into her pussy, you kiss your captive. Your hands squeeze her breasts, making her moan. ");
        break;
    case 1:
        ToText("You force your way into her, grinning at the anguished cry it wrests from her, holding still for a moment");
        if (Game.player.body.balls.size >= 1) {
            ToText(" with your ");
            if (Game.player.body.balls.size >= 3) {
                ToText("big");
            }
            ToText(" balls resting against her ass");
        }
        ToText(". ");
        break;
    case 2:
        ToText("Slamming into her pussy, you give your captive a hard kiss, hands squeezing her breasts. Her moans stimulate your assault. ");
        break;
    }

    if (Math.tossCoin()) {
        if (Game.Girls[Game.companion].corruption >= Game.Girls[Game.companion].loyalty && Game.Girls[Game.companion].corruption >= 30) {
            ToText(Game.Girls[Game.companion].name +  " playfully strokes and kisses the " + Game.newgirl.body.race.name +  " girl, one hand stroking herself too. ");
            Game.Girls[Game.companion].lust += 20;
        }
    } else {
        if (Game.Girls[Game.companion].loyalty >= Game.Girls[Game.companion].corruption && Game.Girls[Game.companion].loyalty >= 25) {
            ToText(Game.Girls[Game.companion].name +  " swallows, watches the scene and dutifully slips behind the ");
            if (Game.newgirl.body.age < 2) {
                ToText(" young ");
            }
            ToText(" girl to hold and better present her to you. ");
        }
    }

    switch(Math.tossCase(2)) {
    case 0:
        ToText("You slam your cock into your victim’s pussy, each thrust just a tiny bit harder or faster than the last. ");
        break;
    case 1:
        ToText("First you fuck and ravish her; cumming into her defenceless pussy. Then you do it again, with her wailing as background music. ");
        break;
    case 2:
        ToText("Hands on her hips, you plow her hard, fast and very, very thoroughly. ");
        break;
    }

    switch(Math.tossCase(2)) {
    case 0:
        ToText("You slam into your victim’s pussy a final time, cock twitching… and fill her with your cum; taking a deep breath as you pull back and watch some of the cream drip out of her glistening pussy. ");
        break;
    case 1:
        ToText("You force your captive further down, cock completely sheathed into her, then with a groan you cum into her, filling her core with your baby making cream. ");
        break;
    case 2:
        ToText("You cum, then cum, then cum some more into her; eyes almost crossing as you feel your spunk spray into her core. ");
        break;
    }

    if (Game.Girls[Game.companion].corruption >= 40 && Game.Girls[Game.companion].loyalty >= 30) {
        switch(Math.tossCase(2)) {
        case 0:
            ToText(Game.Girls[Game.companion].name +  " gives you a naughty smile and licks your cock clean. ");
            break;
        case 1:
            ToText(Game.Girls[Game.companion].name +  " licks her lips, and leans in to clean your cock with her tongue and lips. ");
            break;
        case 2:
            ToText(Game.Girls[Game.companion].name +  " smiles playfully, then gives the underside of your cock a slow long lick from root to tip as a start to cleaning it properly. ");
            break;
        }
    } else if (Game.Girls[Game.companion].loyalty >= 70) {
        if (Math.tossCoin()) {
            ToText(Game.Girls[Game.companion].name +  " swallows, then goes down on her knees to lick your cock clean.        ");
        } else {
            ToText(Game.Girls[Game.companion].name +  " glances to the side, leans in until your cock rubs her chin, then takes a deep breath and start licking your cock clean with short quick licks. ");
        }
    }
    ToText("

");
    switch(Math.tossCase(2)) {
    case 0:
        ToText("You leave her alone, grinning at the picture she makes. ");
        break;
    case 1:
        ToText("You walk away, your assistant making sure to gather the ropes and such used, leaving your ex-partner lying on the ground in exhaustion; her inner thighs painted with your cream. ");
        break;
    case 2:
        ToText("Another one bites the dust. You idly wonder if she will carry your child. It may be best to make certain by doing this again some other time. ");
        break;
    }
    var plus = 3;
    ToText("

");
    if (Game.magic_ring == 1) {
        Game.mana = Game.mana + plus;
        ToText(" Your ring fills with power (" + plus +  '' + "). ");
    }
    ToText("

");
    DisplayLocation('mapreturn');
    ToText("Return to mansion
");
}, 1));

var s = new SexScene("Caress", "consensual", "petting");
s.sex = function(girl) {
    girl.lust += 20 + Math.round(girl.loyalty / 2 + girl.corruption / 2);
    var her_orgasm = girl.lust > 75;

    this.scene(girl, her_orgasm);
}
s.scene = function(girl, her_orgasm) {
    ToText("You invite " + girl.name +  " for a minor bonding session and she");
    if (girl.corruption >= 25) {
        ToText(" playfully" + '');
    } else if (girl.loyalty >= 30) {
        ToText(" gladly" + '');
    }
    ToText(" accepts. You play with her");
    if (girl.body.pussy.virgin.value) {
        ToText(" virgin ");
    }
    ToText(" pussy ");
    if (girl.body.cock.size >= 1) {
        ToText(" and cock");
    }
    ToText(" while she gently strokes your dick and ");
    if (girl.corruption >= 35) {
        ToText(" sucks on your tongue." + '');
    } else {
        ToText(" lets you suck on her tongue. ");
    }
    if (girl.body.tail.type != "none" && girl.corruption >= 40) {
        ToText(" She strokes your ");
        if (Game.player.body.balls.size > 0) {
            ToText("balls");
        } else {
            ToText("cock");
        }
        ToText(" with her tail, providing additional stimulation." + '' + " ");
    } else if (girl.body.tail.type != "none") {
        ToText(" Her tail shyly curls around to your back. ");
    }
    if (her_orgasm == 1) {
        ToText(" Her previous arousal brings her to climax");
        if (girl.body.cock.size >= 1) {
            ToText(" and her cock coats your hands with her cream, which you make her lick off afterwards, one finger at a time.");
        }
        ToText(". In a few moments you cum and let her go back to her duty. ");
    } else {
        ToText(" You both become more and more aroused from the kissing and teasing, until you finally cum and let her return to her duties, hornier than before. ");
    };
    var gain = 2;
    if (her_orgasm == 1) {
        gain += girl.orgasm();
    }
    if (Game.magic_ring == 1) {
        Game.mana += gain;
        ToText("

Your ring fills with power (" + gain + " mana). ");
    }
    if (her_orgasm == 0 && girl.requestSex('pussy')) {
        if (girl.corruption >= 30 && girl.lust >= 80 && girl.rules.toString().charAt(0) != 2) {
            ToText("

— Master, could you please fuck me again? I want more..." + '' + "

");
        } else if (girl.loyalty >= 30 && girl.lust >= 80 && girl.rules.toString().charAt(0) != 2) {
            ToText("

— Master... Could we continue? Please, I'm all wet now.

" + girl.name +  " blushes and looks away.

");
        }
        ToText("

");
        if (girl.rules.toString().charAt(0) == 2 && girl.lust >= 80) {
            ToText("

Unallowed to speak, " + girl.name +  " still begs for your attention, showing how horny she is.

");
        }
        ToText("

");
        if (girl.lust >= 80 && Game.energy >= 1) {
            ToText("

");
            Game.tmp1 = 'Fuck ' + girl.name + '’s pussy';
            ToText("

" + Game.tmp1 + '' + "

");
        } else if (girl.lust >= 80 && Game.energy == 0) {
            ToText("

You are too exhausted to continue today, no matter how much you might want to. " + girl.name +  " looks slightly disappointed.

");
        }
        ToText("

");
    }
}

s = new SexScene("Oral", "consensual", "oral");
s.scene = function(girl, her_orgasm) {
    ToText("You ask " + girl.name +  " to give you a blowjob. After a moment of consideration, she ");
    if (girl.corruption >= 45) {
        ToText(" delightly" + '');
    } else if (girl.loyalty >= 30) {
        ToText(" gladly" + '');
    }
    ToText(" accepts. You free your ");
    if (Game.player.body.cock.size == 3) {
        ToText(" huge ");
    }
    ToText(" penis from your pants, as she shimmies down your body her ");
    if (girl.body.face.beauty >= 71) {
        ToText(" beautiful ");
    }
    ToText(" face drawing level with your groin. ");
    if (girl.loyalty >= 35) {
        ToText(" Eagerly" + '' + " ");
    } else if (girl.corruption >= 30) {
        ToText(" Playfully" + '' + " ");
    } else {
        ToText(" Hesitantly ");
    }
    ToText(" she ");
    if (girl.body.age == 0 && Game.player.body.cock.size == 3)
        ToText(" attempts to take your large member into her tiny ");
    else
        ToText(" takes your member into her ");
    if (girl.isRace(['beastkin cat', 'beastkin fox', 'beastkin wolf'])) { // FIXME check for body.muzzle
        ToText("muzzle");
    } else {
        ToText("mouth");
    }
    if (girl.skill.sex == 0 && girl.corruption < 25) {
        ToText(" clumsily ");
    }
    ToText(" and begins to carefully suck on you");
    if (girl.obedience >= 90) {
        ToText(" while maintaining eye contact to measure your reaction");
    } else {
        ToText(" averting and closing her eyes every once in a while");
    }
    ToText(".");
    if (Game.cum_inside == 1) {
        ToText(" As you get closer to climax, you order her to swallow everything, with which she ");
        if (girl.corruption >= 40) {
            ToText(" happily" + '');
        } else if (girl.loyalty >= 35) {
            ToText(" diligently" + '');
        } else {
            ToText("obediently");
        }
        ToText(" complies. Your semen gushes into her throat");
        if (girl.corruption <= 25) {
            ToText(", nearly making her choke");
        }
        ToText(". After thanking her, you leave her to her duties.");
    } else if (Game.cum_inside == 0) {
        ToText("As you climax, you pull out of her mouth and covering her");
        if (girl.body.face.beauty >= 71) {
            ToText(" beautiful ");
        }
        ToText(" face and " + girl.body.hair.color +  " hair with your seed.");
    }
}

s = new SexScene("Vaginal", "consensual", 'pussy');
s.sex = function(girl) {
    var her_orgasm = 0;
    if (girl.hasSexTrait("frigid") && girl.lust >= 80) {
        her_orgasm = 1;
    } else if (girl.loyalty >= 35) {
        her_orgasm = 1;
    } else if (girl.hasSexTrait("nymphomaniac") || girl.hasEffect("sensitized") || girl.hasMentalTrait("Slutty")) {
        her_orgasm = 1;
    } else if (girl.lust >= 60) {
        her_orgasm = 1;
    }
    if (girl.body.shape.type.index <= 5)
        this.scene(girl, her_orgasm);
    else if (girl.body.shape.type == "lamia")
        this.scene_snake_tail(girl, her_orgasm)
    else if (girl.body.shape.type == "spider")
        this.scene_spider_shape(girl, her_orgasm);
    else if (girl.body.shape.type == "centaur")
        this.scene_centaur_shape(girl, her_orgasm);
    else
        this.scene_alternate(girl, her_orgasm);

    if (girl.body.pussy.virgin.value) {
        ToText("You claimed " + girl.name +  "'s virginity.

");
        girl.health = girl.health - 5;
        Game.tmp5 = Game.tmp5 + 2;
        girl.body.pussy.virgin = false;
    } else {
        Game.tmp5++;
    }
    if (Game.cum_inside == 1 && girl.possiblePregnancy(Game.player))
        Game.tmp5++;
    this.afterIntercourse(girl, her_orgasm);
}

s.scene = function(girl, her_orgasm) {
    ToText("You gesture to " + girl.name +  " to take her clothes off.  ");
    if (girl.corruption >= 40) {
        ToText(" She agrees eagerly, and quickly strips to give you full access to her body. ");
    } else if (girl.loyalty >= 45) {
        ToText("  She agrees readily and without fuss, stripping and giving you full access to her body. ");
    } else {
        ToText(" She hesitates for a moment, but eventually agrees, stripping to give you full access to her body. ");
    }
    ToText("

You don’t keep her waiting for very long.  Leaning down, you press your mouth against her ");
    if (girl.body.shape.type == "bestial") {
        ToText(" muzzle");
    } else {
        ToText(" own");
    }
    ToText(", eagerly tasting inside, even as she starts to respond.  Your hands stroke over her body, things growing more heated as you line up the tip of your ");
    if (Game.player.body.cock.size == 3) {
        ToText("large ");
    }
    ToText("cock sliding up and down her lower lips.  ");
    if (her_orgasm == 1) {
        ToText(" She’s already more than soaked, and you have no trouble at all parting her folds and pushing into her body. ");
    } else {
        ToText(" Conscious of her comfort too, you work up and down her folds for a while, feeling them grow damp and part under you before pushing inside her body. ");
    }
    ToText("She ");
    if (girl.body.pussy.virgin.value) {
        ToText("winces rather hard, the resistance within her breaking away a moment later as she gasps, then ");
    }
    if (girl.corruption >= 40) {
        ToText("gives a lusty moan and ");
    }
    ToText("  squirms under you as you start a steady pace of thrusts into her body, holding her to you");
    if (her_orgasm == 1) {
        ToText(" as her legs wrap around your back almost instinctively");
        if (girl.body.tail.type != "none") {
            ToText(" and her tail wraps around your leg");
        }
    }
    ToText(".  Her insides are hot and wet against your cock, feeling amazing and you slide in and out of her body.  ");
    if (girl.body.pussy.virgin.value) {
        ToText("A small amount of pink tinting to the fluids around your connection prove it.  You’ve taken her virginity.");
    }
    ToText("

It doesn’t take long before you feel yourself nearing the end, and pick up the pace pounding into her body, possessively kissing her as you hold her down. ");
    if (her_orgasm == 1) {
        ToText("Taken by her own instincts, " + girl.name +  " moans into the kiss as her whole body rocks under you. She clenches down a moment later, shivering as you feel her walls start to squeeze and contract around you, almost begging you for your seed. ");
        if (girl.body.cock.size >= 1) {
            ToText(" Her own dick twitches as well, messily splattering up her stomach. ");
        }
    }
    if (Game.cum_inside == 1) {
        ToText(" Soon you slam in as deep as you can go and flooding her core with your cum. ");
    } else {
        ToText(" You can’t obliged this time however, and quickly pull out just in time, spraying up her body with your cum instead. ");
    }
    if (her_orgasm == 0) {
        ToText(" Seconds pass, and she looks down at herself and the mess left behind, a little flushed but definitely not satisfied as you pull out. ");
    }
    ToText("

");
}
s.scene_snake_tail = function(girl, her_orgasm) {
    ToText("You ask " + girl.name + " to take off her top so you can get a good look at her whole body, since lamias don't wear pants.");
    if (girl.corruption >= 40) {
        ToText(" She agrees almost immediately, and quickly strips to give you full access to her body. ");
    } else if (girl.loyalty >= 45) {
        ToText(" She agrees readily and without fuss, stripping and giving you full access to her body. ");
    } else {
        ToText(" She hesitates for a moment, but eventually agrees, stripping to give you full access to her body. ");
    }
    ToText("

As you go to get a closer look your thoughts wander, and you find yourself wondering what her flexible body could do. You start to move your hands all over her scaly body ");
    if (girl.corruption >= 40) {
        ToText(" while she practically tears your clothes from your body. ");
    } else if (girl.loyalty >= 45) {
        ToText("  while she gently undresses you as sensualy as she can. ");
    } else {
        ToText(" , taking your own clothes off at the same time. ");
    }
    ToText("Soft moans come out of her mouth as you continue to stroke her scaly, nude body. You keep stroking her body, paying extra attention to her");

    ToText([
            ' flat chest',
            ' nearly flat chest',
            ' pleasantly small mounds',
            ' average breasts',
            ' big, round tits',
            ' gigantic, melon-sized cans',
    ][girl.body.chest.size]);

    if (girl.body.chest.pairs > 0) {
        if (girl.body.chest.ripe) {
            ToText([
                    '',
                    ' and her smaller extra pair',
                    ' and her two smaller pairs',
                    ' and her other three, smaller pairs',
            ][girl.body.chest.size]);
        } else {
            ToText(' and the budding nipples below them');
        }
    }

    ToText(". As you continue to pleasure her with your hands, you get to her ")
    if (her_orgasm == 1) {
        ToText("already wet and moist pussy. ");
    } else {
        ToText("still dry pussy. To make sure she's comfortable to, you sensually start to stroke her lower lips until they are ready for your penetration. ");
    }
    ToText("You line up your ")
    if (Game.player.body.cock.size == 3) {
        ToText("large ");
    }
    ToText("cock, before gently pushing it inside of her lower lips. ")
    if (girl.body.pussy.virgin.value) {
        ToText("Feeling a bit of resistance you slowly push deeper, when you suddenly hear a gasp and you see a few drops of blood drip out of her pussy, making it clear that you've taken her virginity. ");
    }
    ToText("As the pleasure of both of you build up " + girl.name + " wraps her tail around your left leg. You place a hand on her cheek as you move in closer for a passionate kiss.");

    if (girl.body.tongue.type == "split")
        ToText("  The feeling of her delicate, forked tongue inside of your mouth is a strange, but not unwelcome, experience.");

    ToText("

It doesn’t take long before you feel yourself nearing the end, and pick up the pace pounding into her, passionately kissing her as stroke her scaly body. ");
    if (her_orgasm == 1) {
        ToText("Suddenly " + girl.name + " starts to shiver and moans, briefly letting go of your leg with her tail, as she reaches her climax. Her walls start to squeeze your cock, almost begging for your seed. ");
        if (girl.body.cock.size >= 1) {
            ToText(" Her own dick twitches as well, her seed splattering up both of you. ");
        }
    }
    if (Game.cum_inside == 1) {
        ToText(" When you finally reach your limit you thrust one last time into her, shooting your seed as deep as you can. ");
    } else {
        ToText(" When you feel like you can't take it anymore you quickly pull out and spray your seed all over her scaly body. ");
    }
    if (her_orgasm == 0) {
        ToText(" Seconds pass, and she looks down at herself and the mess left behind, a little flushed but definitely not satisfied as you put your clothes back on. ");
    }
    ToText("

");
}
s.scene_spider_shape = function(girl, her_orgasm) {
    ToText("You look up to see " + girl.name + " hanging in her web. You ask her to come down and take off her clothes.");
    if (girl.corruption >= 40) {
        ToText(" She agrees almost immediately, and quickly strips to give you full access to her body. ");
    } else if (girl.loyalty >= 45) {
        ToText(" She agrees readily and without fuss, stripping and giving you full access to her body. ");
    } else {
        ToText(" She hesitates for a moment, but eventually agrees, stripping to give you full access to her body. ");
    }
    ToText("

You get closer and start massaging her");
    ToText([
	' flat chest',
	' nearly flat chest',
	' pleasantly small mounds',
	' average breasts',
	' big, round tits',
	' gigantic, melon-sized cans',
    ][girl.body.chest.size]);

    if (girl.body.chest.pairs > 0) {
        if (girl.body.chest.ripe) {
            ToText([
                    '',
                    ' and her smaller extra pair',
                    ' and her two smaller pairs',
                    ' and her other three, smaller pairs',
            ][girl.body.chest.pairs]);
        } else {
            ToText(' and the budding nipples below them');
        }
    }
    if (girl.corruption >= 40) {
        ToText(", while she practically tears your clothes from your body. ");
    } else if (girl.loyalty >= 45) {
        ToText(",  while she gently undresses you as sensualy as she can. ");
    } else {
        ToText(", taking your own clothes off at the same time. ");
    }
    ToText("Your hand wanders lower, sensually stroking her body, until they reach the point where her human half meets her spider one. It's a smooth transition, and right at its center, her lovely lower lips, which you start to gently stroke. ");
    if (her_orgasm == 1) {
        ToText("You find she is already wet and ready for your ");
    } else {
        ToText("They are still dry, but it doesn't take long before they are ready for your ");
    }
    if (Game.player.body.cock.size == 3) {
        ToText("large ");
    }
    ToText("cock.

She quickly spins a web so you can hang in the perfect position while you slowly penetrate her. ")
    if (girl.body.pussy.virgin.value) {
        ToText("Feeling a bit of resistance you slowly push deeper, when you suddenly hear a gasp and you see a few drops of blood drip out of her pussy, making it clear that you've taken her virginity. ");
    }
    ToText("The elasticity of the web does most of the work for you, gently moving you in and out of her again and again. After some time " + girl.name + " starts producing soft moans. Taking this as a sign you start working with the web and thrust faster and faster into her. ");

    if (her_orgasm == 1) {
        ToText("This takes her over the edge and soon her walls start to squeeze down on your dick, adding to your impeding climax. ");
        if (girl.body.cocksize >= 1) {
            ToText(" Her own dick twitches as well, her seed splattering up both of you. ");
        }
    }
    if (Game.cum_inside == 1) {
        ToText(" When you finally reach your limit you thrust one last time into her, shooting your seed as deep as you can. ");
    } else {
        ToText(" When you feel like you can't take it anymore you quickly pull out and spray your seed all over her body. ");
    }
    if (her_orgasm == 0) {
        ToText(" Seconds pass, and she looks down at herself and the mess left behind, a little flushed but definitely not satisfied as you put your clothes back on. ");
    }
    ToText("

");
}
s.scene_centaur_shape = function(girl, her_orgasm) {
    ToText("You ask " + girl.name + " to take her top of so you can properly inspect her whole body.");
    if (girl.corruption >= 40) {
        ToText(" She agrees eagerly almost immediately, and quickly strips to give you full access to her body. ");
    } else if (girl.loyalty >= 45) {
        ToText(" She agrees readily and without fuss, stripping and giving you full access to her body. ");
    } else {
        ToText(" She hesitates for a moment, but eventually agrees, stripping to give you full access to her body. ");
    }
    ToText("

You move closer and start to gently stroke her human half, paying close attention to her");
	ToText([
            ' flat chest',
            ' nearly flat chest',
            ' pleasantly small mounds',
            ' average breasts',
            ' big, round tits',
            ' gigantic, melon-sized cans',
    ][girl.body.chest.size]);

    if (girl.body.chest.pairs > 0) {
        if (girl.body.chest.ripe) {
            ToText([
                    '',
                    ' and her smaller extra pair',
                    ' and her two smaller pairs',
                    ' and her other three, smaller pairs',
            ][girl.body.chest.size]);
        } else {
            ToText(' and the budding nipples below them');
        }
    }
    if (girl.corruption >= 40) {
        ToText(". While her own pleasure quickly rises she practically tears your clothes off. ");
    } else if (girl.loyalty >= 45) {
        ToText(". Starting to feel her own pleasure rise she starts to take your clothes of as sensually as she can. ");
    } else {
        ToText(". While you use one hand and your mouth to pleasure " + girl.name + "'s tits, you use your remaining hand to take off your own clothes. ");
    }
    ToText("You gently stroke her cheek as you move in closer for a passionate kiss. As your dick hardens you ask her to turn around so you can have a good look at her delicate pussy. ");
    if (her_orgasm == 1) {
        ToText("It seems like she's more than ready for your as her lower lips are already soaked.");
    } else {
        ToText("Her lower lips are still dry, but it doesn't take long till she's ready as you passionately massage them. ");
    }
	ToText("You place your hands on her equine rear and line up your ")
    if (Game.player.body.cocksize == 3) {
        ToText("large ");
    }
    ToText("cock. You slowly push inside her lovely lower lips.")
    if (girl.body.taken_virginity == 0) {
        ToText("Feeling a bit of resistance you slowly push deeper, when you suddenly hear a gasp and you see a few drops of blood drip out of her pussy, making it clear that you've taken her virginity. ");
    }
    ToText("You continue to slide in and out of her equine pussy and she start to produce soft moans of pleasure. As her pleasure continues to build up her front legs give in and bend. Seeing this you start quicken your pace. ");

    if (her_orgasm == 1) {
        ToText("This takes her over the edge and soon her walls start to squeeze down on your dick, adding to your impeding climax. ");
        if (girl.body.cocksize >= 1) {
            ToText(" Her own dick twitches as well, her seed splattering on the ground. ");
        }
    }
    if (Game.cum_inside == 1) {
        ToText(" When you finally reach your limit you thrust one last time into her, shooting your seed as deep as you can. ");
    } else {
        ToText(" When you feel like you can't take it anymore you quickly pull out and spray your seed all over her equine ass. ");
    }
    if (her_orgasm == 0) {
        ToText(" Seconds pass, and she looks at herself and the mess left behind. She's a little flushed but definitely not satisfied as you put your clothes back on. ");
    }
    ToText("

");
}
s.scene_alternate = function(girl) { ToText(" You fuck the " + girl.body.race.name +  " girl's pussy.

"); },

s = new SexScene("Anal", "consensual", 'anal');
s.sex = function(girl) {
    var her_orgasm = 0;
    if (Game.Girls[Game.tmp0].hasSexTrait("frigid") && Game.Girls[Game.tmp0].lust >= 80) {
        her_orgasm = 1;
    } else if (Game.Girls[Game.tmp0].loyalty >= 35) {
        her_orgasm = 1;
    } else if (Game.Girls[Game.tmp0].hasSexTrait("nymphomaniac") || Game.Girls[Game.tmp0].hasEffect("sensitized") || Game.Girls[Game.tmp0].hasMentalTrait("Slutty")) {
        her_orgasm = 1;
    } else if (Game.Girls[Game.tmp0].lust >= 60) {
        her_orgasm = 1;
    }
    if (girl.body.shape.type.index <= 5)
        this.scene(girl, her_orgasm);
    else
        this.scene_alternate(girl, her_orgasm);
    this.afterIntercourse(girl, her_orgasm);
}

s.scene = function(girl, her_orgasm) {
    ToText("With a simple gesture, you order " + girl.name +  " to strip, moving around behind her as she does.  ");
    if (girl.corruption >= 40) {
        ToText(" She seems to know what’s coming and does so eagerly, a smile playing at her lips. ");
    } else if (girl.loyalty >= 35) {
        ToText(" She seems to know what’s coming and does as instructed. ");
    } else {
        ToText(" She hesitates at your intent, but nervously strips while looking over her shoulders at you. ");
    }
    ToText(" You don’t waste any time ");
    if (girl.body.tail.type != "none" && girl.corruption >= 45) {
        ToText("smirking as she eagerly lifts her tail out of the way for you, then ");
    } else if (girl.body.tail.type != "none") {
        ToText("lifting her tail out of the way and ");
    }
    ToText("pressing your ");
    if (Game.player.body.cock.size == 3) {
        ToText("impressively large ");
    }
    ToText("cock up and nestling it between the cheeks of her ass.  Your hands squeeze both sides of her hips as you pull her back against you and grind for a moment, drawing out ");
    if (girl.corruption >= 50) {
        ToText(" an excited groan ");
    } else {
        ToText("a nervous whine ");
    }
    ToText("from her.

Working back and forth for a few thrusts, you get a healthy smear of pre over her rear hole before pushing the tip of your dick up against it and pushing firmly inside.  The suddenness causes her to wince regardless");
    if (girl.hasSexTrait("masochistic")) {
        ToText(", then shiver in pleasure,");
    }
    ToText(" as you waste no time in bottoming out your length in her ass.  You start a healthy rhythm, ");
    if (girl.body.tail.type != "none" && girl.corruption >= 45) {
        ToText("her keeping her own tail shoved up onto her back for you.  Grinning at her eagerness, you start ");
    } else if (girl.body.tail.type != "none") {
        ToText("using your hand to keep her tail shoved up onto her back and");
    }
    ToText(" pounding hard into her body.  ");
    if (girl.corruption >= 35) {
        ToText("It doesn’t take her long to start her lustful moaning, her hand sliding down to finger herself as you plow her rear.  ");
    } else if (girl.obedience >= 90) {
        ToText("She holds obediently steady, biting her lower lip as you plow her over and over again.  ");
    } else {
        ToText("She winces with each impact, obviously not finding much comfort in the situation, biting her lower lip as you use her ass.  ");
    }
    ToText("

Picking up the pace, it doesn’t take long before you feel like coming.  ");
    if (Game.cum_inside == 1) {
        ToText("Bottoming out in one hard push, you empty your seed into her rectum, flooding her bowels with hot liquid as shot after shot is released into her.  ");
    } else {
        ToText("You manage to pull out at the very last second, shivering as you squirt up between her ass cheeks, ");
        if (girl.body.tail.type != "none") {
            ToText("splattering around the dock of her tail and ");
        }
        ToText(" letting your seed rain down across her back.  ");
    }
    if (her_orgasm == 1) {
        ToText("Feeling the hot cum ");
        if (Game.cum_inside == 1) {
            ToText("rushing into her");
        } else {
            ToText("splattering onto her back");
        }
        ToText(" pushes her over the edge too, and she shivers");
        if (girl.corruption >= 40) {
            ToText(", moaning wantonly, ");
        }
        ToText(" as her own juices slide down her inner thighs");
        if (girl.body.skin.coverage.index >= 2 && girl.body.skin.coverage.index <= 8) {
            ToText(", saturating the fur with her fluids");
        } else if (girl.body.skin.coverage == "scales") {
            ToText(", slicking her scales with her fluids");
        }
        ToText(".");
    }
    ToText("  You unceremoniously pull out of her, stepping back to admire your handiwork.  Your seed ");
    if (Game.cum_inside == 1) {
        ToText("slides slowly down between her ass cheeks and her thighs");
    } else {
        ToText("liberally splatters her back in stringy lines");
    }
    ToText(", and she ");
    if (her_orgasm == 1) {
        ToText(" gives a ");
        if (girl.corruption >= 50) {
            ToText(" pleased purr, looking back over her shoulder at you as she licks her fingers off of her own juices.  ");
        } else if (girl.loyalty >= 30) {
            ToText(" contented sigh, sagging a little after you let her go.  ");
        } else {
            ToText("little shiver, perhaps not expecting to have came from that.");
        }
    } else {
        ToText("sags a little, looking a mixture of relieved that it’s over, and significantly pent up still.  ");
    }
    ToText("You leave her to clean up as you continue about your day.

");;
}
s.scene_alternate = function(girl) { ToText(" You fuck the " + girl.body.race.name +  " girl's ass.

"); },

s = new SexScene("Use her mouth", "residentrape", 'oral');
s.sex = function(girl) {
    girl.healthChange(-5);
    this.scene(girl);
}
s.scene = function(girl) {
    ToText("You tightly tie " + girl.name +  " in place. Brushing over her cheek, you take a ring gag. After a moment you have fixated a gag on a girl's mouth. You take off your pants and direct your cock into the poor thing's face. Her clumsy attempts to evade it only provoke you further. With force you insert cock into her open mouth, making the girl moan in protest. Her warm and damp tongue instinctively tries to push out the invader, but it only increases your pleasure. With glee you grab the victim's head and start to move it. With every thrust you force yourself into her throat deeper and deeper. By this time moans are replaced with whimpers and cries while her tear-stained eyes begin to express humility. You feel how that sight brings you closer to climax.

");
}

s = new SexScene("Use her ass", "residentrape", 'anal');
s.sex = function(girl) {
    this.scene(girl, 0);
    girl.healthChange(-5);
}
s.scene = function(girl) {
        ToText("

" + girl.name + " averts her eyes, as you position her to have access to her rear. Not waiting for long, you push cock inside of her ass making her yelp because of sudden invasion. She tries to get away and break free but chains holding her steadily. As you move inside of her ass, tears falling down here cheeks and she begs you to stop. Her desperation brings you closer to climax.

");
}

s = new SexScene("Use her pussy", "residentrape", 'pussy');
s.sex = function(girl, her_orgasm) {

    if (girl.body.shape.type.index <= 5)
        this.scene(girl, her_orgasm);
    else
        this.scene_alternate(girl, her_orgasm);

    if (girl.body.pussy.virgin.value) {
        girl.healthChange(-10);
        if (girl.loyalty >= 50) {
            ToText("

        You take " + girl.name +  " virginity by force, but her reaction is of acceptance, as it seems she was already prepared to give it to you.

        ");
            Game.tmp5 += 2;
        } else {
            ToText("

        You take " + girl.name +  " virginity by force. She seems to be pretty distressed about it. ");
            girl.stressChange(20);
        }
        Game.tmp5 += 2;
        girl.body.pussy.virgin = false;
    } else {
        girl.healthChange(-5);
        Game.tmp5++;
    }
    if (Game.cum_inside == 1 && girl.possiblePregnancy(Game.player))
        Game.tmp5++;
}
s.scene =  function(girl, her_orgasm) {
    ToText("

Walking through the mansion, you come across " + Game.Girls[Game.tmp0].name +  " walking by herself. Feeling like a quick fuck, you slip up on her unawares. You grab her  before she realizes you are there and toss her to the ground. The sudden assault catches her off guard, and before she can react you have pounced, pinning her to the ground on her back. Not wasting time, your hand snakes beneath her " + Data.clothing_name[Game.Girls[Game.tmp0].body.clothing] +  " and you hook your fingers through her panties, slipping them free and depriving her of their meager protection before she can respond. ");
    if (Game.Girls[Game.tmp0].corruption <= 25) {
        ToText(" Frightened, she ");
        if (Game.Girls[Game.tmp0].rules.toString().charAt(0) != 2) {
            ToText("begs you to stop");
            if (Game.Girls[Game.tmp0].body.pussy.virgin.value) {
                ToText(" , reflexively pleading for you to spare her virginity");
            }
        } else {
            ToText(" can only stare at you in fear, being unable to voice her protest because of her brand’s restrictive magic");
        }
        ToText(". ");
    } else {
        ToText(" She is surprised and afraid, but only for a moment, and awareness of what you must want from her causes her to blush with growing arousal. ");
    }
    ToText("

Without further delay, you press her legs apart to give you access to her now defenseless womanhood,");
    if (Game.Girls[Game.tmp0].body.tail.type != "none") {
        ToText(" which she instinctively tries to cover with her tail. You easily pull the offending extremity out of the way, giving it a painful yank to show your annoyance before ");
    }
    ToText(" freeing your member and pressing it against her ");
    if (Game.Girls[Game.tmp0].body.pussy.virgin.value) {
        ToText(" tight, virgin slit");
    } else if (Game.Girls[Game.tmp0].lust >= 70) {
        ToText(" wet, willing quim ");
    } else if (Game.Girls[Game.tmp0].corruption >= 30) {
        ToText(" eager, dripping cunt");
    } else {
        ToText(" dry, unready pussy");
    }
    ToText(". She lets out another ");
    if (Game.Girls[Game.tmp0].corruption >= 25) {
        ToText(" lustful ");
    }
    ToText(" moan as you force yourself into her pussy");
    if (Game.Girls[Game.tmp0].body.pussy.virgin.value) {
        ToText(", and a small cry of pain escapes her throat as you break her hymen and steal her virginity");
    }
    ToText(". ");
    if (Game.Girls[Game.tmp0].corruption < 25 && !Game.Girls[Game.tmp0].hasSexTrait("submissive") && Game.Girls[Game.tmp0].loyalty < 40) {
        ToText(" She closes her eyes and sobs wordlessly as you savagely take your pleasure in her body, with no regard for her own. ");
    } else if (Game.Girls[Game.tmp0].hasSexTrait("submissive")) {
        ToText("  " + Game.Girls[Game.tmp0].name +  " looks up at you with a mix of fear and lust as you sheathe yourself to the hilt within her. You pause a moment, savoring her tightness before you begin moving. ");
    } else {
        ToText(" " + Game.Girls[Game.tmp0].name +  " is surprised at your sudden and forceful attention. She accepts, if not welcomes, of your advances, and eventually, your attention begins to have an effect on her. Her first moan of pleasure betraying her rising lust, as she begins to raise her hips to meet you. ");
    }
    ToText("

Your lust grows and you begin to plow her earnestly, enjoying the feeling of " + Game.Girls[Game.tmp0].name +  "’s ");
    if (Game.Girls[Game.tmp0].body.age == 0) {
        ToText(" small");
    } else if (Game.Girls[Game.tmp0].body.age == 1) {
        ToText(" young");
    } else if (Game.Girls[Game.tmp0].body.age == 2) {
        ToText(" ripe");
    }
    ToText(", helpless body writhing beneath you as she ");
    if (her_orgasm == 1) {
        ToText(" steadily succumbs to ");
    } else {
        ToText(" reluctantly tries to endure ");
    }
    ToText(" your assault. ");
    if (Game.Girls[Game.tmp0].body.tail.type != "none" && her_orgasm == 1) {
        ToText(" As your steady thrusts cause her own pleasure to build, her tail thrashes and tries to wrap around you excitedly.");
    } else if (Game.Girls[Game.tmp0].body.tail.type != "none") {
        ToText(" Out of pathetic instinct, her tail still tries to protect her precious place, but only succeeds in stimulating you more.  ");
    }
    ToText(" As you fuck her with long, deep strokes you decide you want to see her tits. With one hand you forcefully undress her upper half, exposing her");
    if (Game.Girls[Game.tmp0].body.chest.size == 1) {
        ToText("  nearly flat chest,");
    } else if (Game.Girls[Game.tmp0].body.chest.size == 2) {
        ToText(" pleasantly small mounds,");
    } else if (Game.Girls[Game.tmp0].body.chest.size == 3) {
        ToText(" hand-filling breasts,");
    } else if (Game.Girls[Game.tmp0].body.chest.size == 4) {
        ToText(", heavy, round tits ");
    } else {
        ToText(" gigantic, pendulous globes,  ");
    }
    ToText(" which she ");
    if (Game.Girls[Game.tmp0].corruption <= 30) {
        ToText(" unsuccessfully tries to hide. ");
    } else {
        ToText(" proudly presents to you. ");
    }
    ToText("

");
    if (Game.Girls[Game.tmp0].body.cock.size >= 1 && her_orgasm == 1) {
        ToText(" As you continue to fuck her, you notice that her ");
        if (Game.Girls[Game.tmp0].body.cock.size == 1) {
            ToText(" tiny prick ");
        } else if (Game.Girls[Game.tmp0].body.cock.size == 2) {
            ToText(" average cock ");
        } else if (Game.Girls[Game.tmp0].body.cock.size == 3) {
            ToText(" huge dick ");
        }
        ToText(" has grown hard, and slaps against her stomach in time with your thrusts ");
        if (Game.Girls[Game.tmp0].corruption < 30) {
            ToText(". When " + Game.Girls[Game.tmp0].name +  " realizes you have noticed it, she blushes shamefully and tries to cover it with her hands, but you pin her arms to the ground at her sides, preventing her from moving. ");
        } else {
            ToText(" Occasionally " + Game.Girls[Game.tmp0].name +  " pleads with her eyes to let her touch it, but you only tighten your grip, not wanting to allow her any kind of control in this encounter. ");
        }
        ToText("

");
    } else if (Game.Girls[Game.tmp0].body.cock.size >= 1 && her_orgasm == 0) {
        ToText(" As you have your way with her, you see her ");
        if (Game.Girls[Game.tmp0].body.cock.size == 1) {
            ToText(" tiny prick ");
        } else if (Game.Girls[Game.tmp0].body.cock.size == 2) {
            ToText(" average cock ");
        } else if (Game.Girls[Game.tmp0].body.cock.size == 3) {
            ToText(" huge dick ");
        }
        ToText(" flopping about limply, and " + Game.Girls[Game.tmp0].name +  " blushes shamefully at your notice. ");
    }
    ToText("

");
    if (Game.cum_inside == 1 && her_orgasm == 1) {
        ToText(" A long while later, you finally feel yourself rising towards climax. With renewed urgency you begin hammering into her unresisting pussy, ready to burst and fill her at any moment. ");
        if (Game.Girls[Game.tmp0].loyalty >= 40 || Game.Girls[Game.tmp0].corruption >= 25) {
            ToText(" As if sensing your intent, she lets out an ecstatic moan and locks her legs around your waist, squeezing you passionately. Spurred on by her eager pants, you slam into her hot tunnel one last time as your orgasm washes over you. You can feel the tip of your cock pressed firmly against her womb as you unleash a torrent of hot seed into her depths, while her legs squeeze desperately around you in a vain effort to pull you even closer and deeper. ");
        } else {
            ToText(" " + Game.Girls[Game.tmp0].name +  "’s whorish moans and unconscious raising of her hips to meet your thrusts signal that she is close to her own, unwanted climax, and so you happily plunge into her hot depths one last time as you cry out for her to take your seed. ");
        }
        ToText(" She lets out a whimpering cry as your scorching cum floods into her, the sensation pushing her over the edge and wringing a shameful, shuddering orgasm from her abused body. ");
        if (Game.Girls[Game.tmp0].body.cock.size >= 1) {
            ToText(" Her ");
            if (Game.Girls[Game.tmp0].body.cock.size == 1) {
                ToText(" tiny prick ");
            } else if (Game.Girls[Game.tmp0].body.cock.size == 2) {
                ToText(" average cock ");
            } else if (Game.Girls[Game.tmp0].body.cock.size == 3) {
                ToText(" huge dick ");
            }
            ToText(" twitches spastically as she comes, covering her stomach and chest with her own sticky cum. ");
        }
        ToText(" Feeling relaxed, you remain like that for several minutes, enjoying her orgasmic aftershocks as she trembles beneath you. After a few minutes, your unhurriedly withdraw from her cream-filled hole, wringing another wordless cry from her at the sudden emptiness of your absence. For a moment, you let yourself enjoy the sight of your milky cum slowly pooling and running from her well-fucked pussy, before instructing her to clean up the mess you made together. " + Game.Girls[Game.tmp0].name +  " blushes and mumbles an acknowledgement from the floor. Satisfied, you continue on your way.

");
    } else if (Game.cum_inside == 1 && her_orgasm == 0) {
        ToText(" The sudden increase in your pounding is all she needs to know you are nearing your limit, and she fearfully begs you not to end inside her. You only grab her hair in response, pulling her head back painfully as you feel yourself reach your peak. Hungrily you slam your hips into her, sheathing yourself as deeply within her warm passage as possible as you cum powerfully into her. She lets out a sobbing cry as she feels your hot seed splash into her womb. You hold her tight against you until you are finished emptying yourself within her, then quickly pull out and redress, before telling her to clean up the mess and turning away. The sound of her despairing sobs continue to echo behind you as you walk away.

");
    } else if (Game.cum_inside == 0 && her_orgasm == 1) {
        ToText(" As you feel you are about to cum, " + Game.Girls[Game.tmp0].name +  "'s panting face tells you that she is also close to her peak. Feeling generous, you increase your pace, and the sudden rush of furious pounding pushes her over the edge with a strangled cry. You quickly pull out as she gasps out her orgasm, and ");
        if (Game.Girls[Game.tmp0].body.cock.size >= 1) {
            ToText(" as her own cock fires it’s load across her body, with a few strokes of your hand your own spurting tool to ");
        }
        ToText(" paint her face and chest with a generous bath of hot, fresh semen. After you finish, you quickly re-dress and continue on you way, after giving the exhausted " + Game.Girls[Game.tmp0].name +  " orders to clean up the mess.

");
    } else if (Game.cum_inside == 0 && her_orgasm == 0) {
        ToText(" As your climax approaches, " + Game.Girls[Game.tmp0].name +  "’s face shows only a mix of discomfort and shame. You give a few more thrusts and feel yourself peek, quickly pulling out to soil her panting body with the spray of your semen. Satisfied, you leave her to deal with the mess on her own. ");
    }
    ToText("

");
}
s.scene_alternate = function(girl) {
    ToText(" You rape " + Game.Girls[Game.tmp0].body.race.name +  " girl's pussy. ");
}

var Threesome = function(name, tags) {
    SexScene.call(this, name, tags);
}

Threesome.prototype = new SexScene();

Threesome.prototype.sex = function(girl, companion, you) {
    this.girl = girl;
    this.companion = companion;
    this.you = you;

    this.companion_orgasm = this.prelude(companion);
    this.girl_orgasm = this.prelude(girl);

    this.scene();

    this.after(girl, this.girl_orgasm);
    this.after(companion, this.companion_orgasm);

    this.v_preg_check(you);
}

Threesome.prototype.prelude = function (girl) {

    var chance = 25;

    // at lust 90 100% chance, on an exponential curve.
    chance += girl.lust * girl.lust / 81;

    if (girl.hasSexTrait("frigid"))
        chance -= 25;

    /* max corruption adds 40% chance */
    chance += girl.corruption * girl.corruption / 250;

    if (girl.hasSexTrait(["nymphomaniac", "bisexual"]))
        chance += 25;

    if (girl.hasMentalTrait("Slutty"))
        chance += 15;

    if (girl.hasEffect("sensitized"))
        chance += 75; // pretty much guaranteed.

    chance += this.extraOrgasm(girl);

    /* is our partner any good? */
    if (girl != this.companion) {
        chance += this.companion.skill.sex * 10 + this.companion.skill.allure * 4;
        if (this.you == 'girl')
            chance += 15; // being fucked by master
    }

    if (girl != this.girl) {
        chance += this.girl.skill.sex * 10 + this.girl.skill.allure * 4;
        if (this.you == 'companion')
            chance += 15;
    }

    console.log(Math.round(chance) + "% chance " + girl.name + " has an orgasm.");

    if (!Math.tossCoin(Math.withChance(chance))) { // no orgasm, make her hornier
        girl.lustChange(Math.round(chance));
        return false;
    }

    return true;
}

Threesome.prototype.after = function(girl, orgasm) {
    // aquire traits before we test for them.
    if (orgasm == 1) {
        Game.tmp5 += girl.orgasm();
        if (girl.hasSexTrait("none")) {
            if (Math.tossCoin(0.25) || girl.hasEffect("entranced")) {
                ToText(" " + girl.name +  " acquired bisexaulity. ");
                girl.addSexTrait('bisexual');
                Game.tmp5++;
            }
        }
    }

    var chance = 100;

    /* At 30% corruption there's no starting chance of damage, at 37 corruption
     * the effect maxes out to be able to cancel out one of the negative traits */
    chance -= Math.min(Math.round(girl.corruption * girl.corruption / 9), 150);

    if (orgasm)
        chance -= Math.tossDice(10, 25); // maybe she enjoyed it.
    else
        chance += Math.tossDice(5, 10); // or not.

    if (girl.hasSexTrait(["bisexual", "nymphomaniac"]))
        chance -= 50;

    if (girl.hasSexTrait(["frigid", "monogamous"]))
        chance += 50;

    if (girl.hasMentalTrait(["Slutty", "Devoted", "Iron Will"]))
        chance -= 25;

    if (girl.hasMentalTrait("Prude"))
        chance += 50;

    if (girl.body.pussy.virgin.value)
        chance += 10;

    if (Math.tossCoin(Math.withChance(chance))) {
        girl.corruptionChange(Math.tossDice(5, 10));
        girl.attr.charm = Math.max(girl.attr.charm - Math.tossDice(2, 5), 0);
        girl.stressChange(20);
        ToText("" + girl.name + " didn't take it well.  Her charm decreased.

");
    } else {
        girl.corruptionChange(Math.tossDice(1, 3));
    }

    // calculate mana.
    Game.tmp5 += Math.round(girl.loyalty / 33 + girl.corruption / 33);
}

Threesome.prototype.subst_common = function() {
    return {
        companion: this.companion.name,
        girl: this.girl.name,
        girl_companion: this.girl.relationshipName(this.companion),
        companion_girl: this.companion.relationshipName(this.girl),
        you_girl: Game.player.relationshipName(this.girl),
        you_companion: Game.player.relationshipName(this.companion),
        girl_her: this.girl.body.gender == 'male' ? 'his' : 'her',
        companion_her: this.companion.body.gender == 'male' ? 'his' : 'her',
        companion_she: this.companion.body.gender == 'male' ? 'he' : 'she',
        companion_cock: this.companion.body.gender == 'male' ? 'his cock' : this.companion.body.cock.size > 0 ? 'her cock' : 'a strapon',
    }
}

// girl, companion, ... you, eventually
// type of "you" means check to see if you chose to bone them.
// 'girl' and 'companion' are self explanitory.
Threesome.prototype.penetrate_vag = [ 'you', 'you' ];

Threesome.prototype.v_preg_check = function() {
    // check the girl first.
    switch(this.penetrate_vag[0]) {
        case 'you':
            if (this.you == 'girl') {
                if (this.girl.body.pussy.virgin.value) {
                    ToText("You take " + this.girl.name + "'s virginity.

");
                    this.girl.body.pussy.virgin = false;
                    this.girl.healthChange(-15);
                    this.girl.stressChange(25);
                    Game.tmp5++;
                }
                if (this.girl.possiblePregnancy(Game.player))
                    Game.tmp5++;
            }
            break;
        case 'companion':
            if (this.girl.body.pussy.virgin.value) {
                ToText(this.companion.name + " takes " + this.girl.name + "'s virginity.

");
                this.girl.body.pussy.virgin = false;
                this.girl.healthChange(-15);
                this.girl.stressChange(25);
                Game.tmp5++;
            }
            if (this.companion_orgasm && this.companion.body.cock.size >= 1 && this.girl.possiblePregnancy(this.companion))
                Game.tmp5++;
            break;
    }
    switch(this.penetrate_vag[1]) {
        case 'you':
            if (this.you == 'companion') {
                if (this.companion.body.pussy.virgin.value) {
                    ToText("You take " + this.companion.name + "'s virginity. ");
                    this.companion.body.pussy.virgin = false;
                    this.companion.healthChange(-15);
                    this.companion.stressChange(25);
                    Game.tmp5++;
                }
                if (this.companion.possiblePregnancy(Game.player))
                    Game.tmp5++;
            }
            break;
        case 'girl':
            if (this.companion.body.pussy.virgin.value) {
                ToText(this.girl.name + " takes " + this.companion.name + "'s virginity. ");
                this.companion.body.pussy.virgin = false;
                this.companion.healthChange(-15);
                this.companion.stressChange(25);
                Game.tmp5++;
            }
            if (this.girl_orgasm && this.girl.body.cock.size >= 1 && this.companion.possiblePregnancy(this.girl))
                Game.tmp5++;
            break;
    }
}

Threesome.prototype.extraOrgasm = function(girl) {
    return 0;
}

s = new Threesome("pussy", "residentcompanionfuck");
s.penetrate_vag = [ 'companion', 'you' ];
s.extraOrgasm = function(girl) {
    if (girl == this.companion) {
        if (girl.body.cock.size == 0)
            return 10; // only gets a little out of it with no dick.
        else
            return 40;
    } else {
        // big (and exoctic) dicks make it better.
        var ret = this.companion.body.cock.size * 10;
        if (ret && this.companion.body.cock.type != "human")
            ret += 15;
        return ret;
    }
}
s.scene = function() {
    var subst = this.subst_common();

    var out = "{{companion}} starts pounding {{companion_girl}}'s pussy with {{companion_cock}}.";

    switch(this.you) {
        case 'girl':
            out +=  " You get behind {{you_girl}} and push your cock into her ass, double-penetrating her with {{companion}}.

";
            break;
        case 'companion':
            out += " While she's fucking {{girl}}, you get behind {{you_companion}} and fuck {{companion_her}} hard.

";
            break;
        case 'watch':
            out += "

You sit back and enjoy the show.

";
            break;
    }

    ToText(simple_template(out, subst));
}

s = new Threesome('ass', 'residentcompanionfuck');
s.extraOrgasm = function(girl) {
    if (girl == this.companion) {
        var ret = 10;
        if (girl.body.cock.size > 0)
            ret += 40;
        if (girl.hasSexTrait("deviant"))
            ret += 20;
        return ret;
    } else { // the recipient
        var ret = Math.min(-10, -5 * this.companion.body.cock.size);
        if (this.companion.body.cock.size > 0 && this.companion.body.cock.type != "human")
            ret *= 2; // knot or barbs or horse flare in the ass has gotta hurt.
        if (girl.hasSexTrait("masochistic"))
            ret = 0 - ret; // unless you're into that sort of thing.
        else if (girl.hasSexTrait(["submissive", "deviant"]))
            ret += 40;
        return ret;
    }
}
s.scene = function() {

    var out = "{{companion}} carefully applies some lube to {{companion_cock}} and {{companion_girl}}'s ass, then pushes into her.";

    switch(this.you) {
        case 'girl':
            out += " While {{you_girl}} is getting used to the pressure in her rear, you lift her up and penetrate her front, double-teaming her.";
            break;
        case 'companion':
            out += " After she's fully into {{companion_girl}} you playfully slap {{you_companion}} on her ass before you slip into her, completing this stack.";
            break;
        case 'watch':
            out += "

You sit back and enjoy the show.";
            break;
    }

    if (this.companion_orgasm == 1 && this.companion.body.cock.size >= 1) {
        out += "

By the end she ejaculates inside of {{companion_girl}}'s ass. ";
    }

    var subst = this.subst_common();
    ToText(simple_template(out, subst) + "

");
}

s = new Threesome('mouth', 'residentcompanionfuck');
s.extraOrgasm = function(girl) {
    if (girl == this.girl) {
        // pleasant for a submissive, not for anyone else.
        if (girl.hasSexTrait("submissive"))
            return 10;
        else
            return -15;
    } else {
        if (girl.body.cock.size == 0)
            return 0; // does nothing for her.
        if (this.girl.body.tongue.size >= 200)
            return 40;
        else
            return 20;
    }
}
s.scene = function() {
    var out = "{{companion}} walks up to {{companion_girl}} and presents {{companion_cock}}.";
    if (this.girl.corruption >= 50 || this.girl.lust >= 50)
        out += " {{girl}} eagerly opens {{girl_her}} mouth and accepts it and begins bobbing.";
    else
        out += " {{girl}} reluctantly takes it in {{girl_her}} mouth, letting {{girl_companion}} do all the work.";

    switch(this.you) {
        case 'girl':
            out += " Watching {{girl}}'s rear bob around as she works is an invitation, and you gladly accept.  With one smooth motion, you hilt yourself in her and begin thrusting.  Soon you and {{companion}} have a rhythm going as you satisfy yourselves.";
            break;
        case 'companion':
            out += " Once they're started, you stand behind {{companion}} and start to push into her, your thrusting pushing her deep into {{companion_girl}}'s throat.";
            break;
        case 'watch':
            out += " You sit back and masturbate as the two go at it.";
            break;
    }

    var subst = this.subst_common();
    ToText(simple_template(out, subst) + "

");
}

s = new Threesome('tits', 'residentcompanionfuck');
s.extraOrgasm = function(girl) {
    var ret = 0;
    if (this.girl.body.chest.nipples.elastic == true)
        ret = 20;  // tits made for fucking, good for both.

    if (girl == this.girl) {
        if (girl.hasSexTrait("submissive"))
            return ret + 5;
        else
            return ret;
    } else {
        return ret;
    }
}
s.scene = function() {
    var out = "{{companion}} and {{girl}} strip out of their clothes, and {{companion}} slides {{companion_cock}} between {{companion_girl}}'s breasts.";

    switch(this.you) {
        case 'girl':
            out += " You push into {{girl}} from behind suddenly, making her yelp in surprise.";
            break;
        case 'companion':
            out += " While {{you_companion}} is distracted by {{girl}}, you get behind her and begin thrusting, matching your rhythm to hers.";
            break;
        case 'watch':
            out += " You sit back and masturbate as the two go at it.";
            break;
    }

    var subst = this.subst_common();
    ToText(simple_template(out, subst) + "

");
}

s = new Threesome('cunnilingus', 'residentcompanionlick');
s.extraOrgasm = function(girl) {
    if (girl == this.girl) {
        if (this.companion.body.tongue.size >= 200)
            return 80;
        else
            return 40;
    } else {
        if (girl.hasSexTrait("submissive"))
            return 30;
        else
            return 0;
    }
}
s.scene = function() {
    var out = "You tell both girls to start taking their clothes off, which ";

    if (this.girl.obedience < 75 && this.companion.obedience < 75)
        out += "they both hesitantly do.";
    else if (this.girl.obedience >= 75 && this.companion.obedience < 75)
        out += "{{girl}} does without hesitation, while {{companion}} is a bit more hesitant.";
    else if (this.companion.obedience >= 75 && this.girl.obedience < 75)
        out += "{{companion}} does without hesitation, while {{girl}} is a bit more hesitant.";
    else {
        out += "they both do without hesitation";
        if (this.companion.skill.allure > 3 || this.girl.skill.allure > 3)
            out += ", even helping each other take off their clothes in a sensual way. ";
        else
            out += ". ";
    }

    if (this.you == 'companion') {
        out += "With both girls naked you start to take off your own clothes aswell. While you're doing this {{girl}} sits on the floor spreading her legs for clear access";
        if (this.girl.body.tail.type.index > 1) //FIXME: what about "cat"
            out += ", wagging her tail invitingly";
        out +=". {{companion}} sees this and takes the invitation, kneeling on the ground with her rear in the air";

        if (this.companion.tail.index > 1) //FIXME
            out += ", lifting her tail so you can get a good look at her private parts";

        out += ", and her head between {{companion_girl}}'s thighs. This sight quickly stiffens your ";

        switch(Game.player.body.cock.size) {
            case 1:
                out += "tiny ";
                break;
            case 3:
                out += "impressive ";
        }

        out += "dick with a lovely hole to put it in right in front of you.";
        out += "

";
        out += "You get behind {{companion}} as she's eating out {{companion_girl}}'s pussy, already producing some sensual moans. You slide you dick up and down {{companion}}'s lower lips, making her stiffen from the sudden sensation, before she quickly relaxes again. You slide up and down a few more times to make sure she's wet and ready before you gently enter her pussy";
        if (this.companion.body.pussy.virgin.value)
            out += " and take her virginity";

        out += ".  You start trusting inside her, your hands having a firm grip on her ";
        switch(this.companion.body.ass.size) {
            case 0: out += 'tiny'; break;
            case 1: out += 'skinny'; break;
            case 2: out += 'small and firm'; break;
            case 3: out += 'pert'; break;
            case 4: out += 'plump'; break;
            case 5: out += 'huge'; break;
        }
        switch(this.companion.body.skin.coverage.index) {
            case 0: break;
            case 1: out += ", scaly"; break;
            case 9: out += ", leafy"; break;
            default: out += ", furry"; break;
        }
        out += " butt.  You slide almost out of her and then back in, each time making your groins meet with a bump. ";
        var tail = this.companion.body.tail.type;
        if (tail != "none" && tail.index <= 7 || tail == "snake")
            out += " Her tail coils around your body as you keep thrusting inside her.";
        else if (tail == "bird")
            out += " Her feathery tail tickles your chest as you keep thrusting inside her.";
        else if (tail == "tentacles")
            out += " As you keep thrusting inside her, her tentacles coil around your legs, pulling you in tighter.";

        out += "

";

        out += "You feel yourself nearing the end and start picking up the pace,";
        if (this.girl_orgasm)
           out += " when suddenly you hear {{girl}} cry out in pleasure as {{companion_girl}} causes her to orgasm. This drives you over the edge";
        out += " and after a few more thrusts you empty your seed into {{you_companion}}'s womb";

        if (this.companion_orgasm)
            out += ", which in turn causes her to orgasm as well";
        out += ".";

    } else if (this.you == 'girl') {
        out += "With two naked girls in front of you, ready to please you, you're a bit ashamed that you're still wearing all your clothes and quickly start to remedy that. While you're undressing {{companion}} starts to stroke {{girl}}'s body in a sensual way, in the hope of enticing both you and {{companion_girl}}";
        if (this.companion.skill.allure >= 3) {
            out += ", she is more than successful in this, with your {{cocksize}}dick already rock-hard";
        }
        out += ".

";

        out += "You take a seat on the bed and have {{you_girl}} sit on your lap, her pussy touching your erect dick";
        if (this.girl.body.tail.type != "none")
          out += " and her tail gently stroking your chest";
       out += ". As you start gyrating your hips, your dick gently moving over {{girl}}'s lower lips, {{girl_companion}} comes in closer and starts to slowly lick the underside of your {{cocksize}}{{cockstyle}}dick. You gently pick {{you_girl}} up and slowly lower her onto your erection.";

        if (this.girl.body.pussy.virgin.value) {
            out += "A small drop of blood trickles down your dick as you break her hymen and take her virginity. ";
            if (this.companion.loyalty + this.companion.obedience + this.companion.corruption > 150)
                out += "{{companion}} quickly licks your dick from the bottom to the top, leaving no trace of the blood. ";
        }
        out += "You start to gently thrust into {{girl}}'s pussy while {{girl_companion}} continues to orally pleasure both you and {{girl_companion}}.";
        out += "

";
        out += "You feel yourself nearing the end and start picking up the pace,";
        if (this.girl_orgasm)
           out += " when suddenly you hear {{girl}} cry out in pleasure as she orgasms, her body shaking from the pleasure. This drives you over the edge";
        out += " and after a few more thrusts you empty your seed into her.";

        if (this.companion_orgasm == 1) {
            out += " {{companion}} reaches between her own legs and rubs";
            if (this.companion.body.cock.size >= 1)
                out += " her own cock";
            else
                out += " herself";
            out += " furiously, her own orgasm coming shortly after {{companion_girl}}'s.";
        }
    } else if (this.you == 'watch') {
        out += "Seriously? You're just going to watch?";
    }

    var subst = this.subst_common();
    switch(Game.player.body.cock.size) {
        default: subst.cocksize = ""; break;
        case 1: subst.cocksize = "tiny "; break;
        case 3: subst.cocksize = "huge "; break;
    }
    subst.cockstyle = "";
    if (Game.player.body.cock.type != "human")
        subst.cockstyle = Game.player.body.cock.type;

    ToText(simple_template(out, subst) + "

");
}

s = new Threesome('rimjob', 'residentcompanionlick');
s.extraOrgasm = function(girl) {
    if (girl == this.girl) {
        var ret = 10;
        if (this.companion.body.tongue.size >= 200)
            ret += 50;

        if (girl.hasSexualTrait("deviant"))
            ret += 20;

        return ret;
    } else {
        if (girl.hasSexTrait("submissive"))
            return 30;
        else if (girl.hasSexTrait("deviant"))
            return 40;
        else
            return -10;
    }
}
s.scene = function() {
    var out = "{{companion}} proceeds to lick {{companion_girl}}'s ass clean.

";

    if (this.companion.orgasm == 1 && companion.body.cock.size >= 1) {
        out += " As they finish, {{companion}}'s cock twtiches and shoots a load unto the sheets.";
    }

    var subst = this.subst_common();
    ToText(simple_template(out, subst) + "

");
}

s = new Threesome('ride', 'residentcompanionride');
s.extraOrgasm = function(girl) {
    if (girl == this.girl) {
        if (girl.body.cock.size == 0)
            return 10; // only gets a little out of it with no dick.
        else
            return 40;
    } else {
        // big (and exoctic) dicks make it better.
        var ret = this.girl.body.cock.size * 10;
        if (ret && this.girl.body.cock.type != "human")
            ret += 15;
        return ret;
    }
}
s.penetrate_vag = [ 'you', 'girl' ];
s.scene = function(girl, companion, args) {
    var out = "{{companion}} gets on {{companion_girl}}'s cock and starts riding her.";

    switch(this.you) {
        case 'girl':
            out += " You lean {{companion}} forward so you can fuck {{girl}} underneath her at the same time.";
            break;
        case 'companion':
            out += " You slip your dick into {{companion}}'s back door, causing her to moan from the fullness.";
            break;
        case 'watch':
            out += " You masturbate.";
            break;
    }
    var subst = this.subst_common();
    ToText(simple_template(out, subst) + "

");
}

s = new Threesome('suck off', 'residentcompanionride');
s = new Threesome('titjob', 'residentcompanionride');