{ toy -> toy.metaClass.clamps { if (stateIs(CLAMPED)) return; if (!has(CLAMPS)) return; present([DRESSED], likes(PAIN) ? [ ["We both like to see you suffer.", "Pain is fun."], ["Isn't that right, toy?", "Don't you agree?"]] : [ ["I'm sorry, toy,"], ["but seeing you suffer is too much fun.", "but I need to find my amusement somewhere."]]); pause(10); present([DRESSED],[ ["Go put your nipple clamps on...", "I want those nipples clamped..."], ["but on your way back...", "no walking though..."], ["crawl, down on all fours.", "on your knees."]]); showButtonG("Yes, ${dommeTitle()}", "ok"); show(null); pause(10); set(CLAMPED, true); showButtonGT("Back, ${dommeTitle()}", "back", 60, 1); sessionToys[CLAMPS] = getTime(); present([DRESSED], [ ["On your knees,", "Kneel before me"], ["let me see.", "hands behind your back."]]); pause(getRandom(10) + 5); }; toy.metaClass.clampPulls { amount -> getRandom(1 + amount).times { if (getRandom(2)) { present([DRESSED], [ ["Take them off.", "Remove them."]]); pause(6 + getRandom(8)); if (getRandom(2)) { present([DRESSED], [ ["And put them back on", "Put them back"], ["right where they came from.", "where they were."]]); } else { present([DRESSED], [ ["Flip them", "Turn them"], ["90 degrees", "around"], ["and put them back.", "and replace them."]]); } pause(10 + getRandom(8)); } else if (getRandom(2)) { present([DRESSED], [ ["Twist them"], ["for me.", "... twist those nipples."]]); pause(6 + getRandom(5)); if (getRandom(2)) { present(null, [ ["More!", "A little more!", "Further!"]]); pause(getRandom(10) + 2); } } present([DRESSED], [ ["Pull them tight.", "Pull them!"]]); pause(getRandom(10) + 5); if (getRandom(5) == 0) { present(null, [ ["Tighter!", "Harder!", "Further!"]]); pause(getRandom(10) + 2); present(null, [ ["Haha!", "Ooo, they must hurt.", "Do they hurt?"]]); pause(3); } present(null, [ ["Release them.", "Let them go."]]); pause(getRandom(5) + 3); }; return amount; }; toy.metaClass.clampsShow { present([DRESSED,TEASE], [ ["Let me see", "Show me"], ["those nipple clamps,", "those nasty clamps,"], ["they look painful.", "and jiggle them about for me!"]]); pause(10); }; toy.metaClass.preClamps { if (!has(CLAMPS)) return; if (stateIs(CLAMPED)) { clampsShow(); } else { clamps(); } clampPulls(getRandom(4)); return 1.8; }; toy.metaClass.playClamps { if (!has(CLAMPS)) return; if (!stateIs(CLAMPED)) clamps(); clampsShow(); return clampPulls(3 + getRandom(10)); }; toy.metaClass.intClamps { if (!has(CLAMPS)) return; if (!stateIs(CLAMPED)) return; clampsShow(); return clampPulls(getRandom(5)); }; toy.metaClass.intSqueeze { (2 + getRandom(4)).times { n -> if (n > 0) { present([DRESSED,TEASE], [ ["And again,", "Again,", "Once more,"], ["harder!", "tighter!"]]); } else { present([DRESSED,TEASE], [ ["Squeeze yours balls", "Grab your balls and squeeze them"], ["good and tight", "firm and hard"], ["until they hurt a little.", "as if I was doing it."]]); } pause(3 + getRandom(6)); present(null, [ ["Let them go.", "Hands off."]]); pause(3 + getRandom(6)); }; }; toy.addActivity('preClamps', { toy.preClamps() }); toy.addActivity('playClamps', { toy.playClamps() }); toy.addActivity('intSqueeze', { toy.intSqueeze() }); toy.addActivity('intClamps', { toy.intClamps() }); }