public void checkStamina(Character p) { if (p.getStamina().isEmpty() && !p.is(Stsflag.stunned)) { p.add(this, new Winded(p)); if (!getStance().prone(p)) { Character other; if (p == p1) { other = p2; } else { other = p1; } if (getStance().inserted() && getStance().dom(other)) { if (p.human()) { write("Your legs give out, but " + other.name() + " holds you up."); } else { write( p.name() + " slumps in your arms, but you support her to keep her from collapsing."); } } else { setStance(new StandingOver(other, p)); if (p.human()) { write("You don't have the strength to stay on your feet. You slump to the floor."); } else { write(p.name() + " drops to the floor, exhausted."); } } p.loseWillpower(this, Math.min(p.getWillpower().max() / 8, 15), true); } } }
@Override public String deal(Combat c, int damage, Result modifier, Character target) { if (getSelf().hasPussy()) { String base = "You put your powerful vaginal muscles to work whilst" + " transfixing " + target.name() + "'s gaze with your own, goading his energy into his c**k." + " Soon it erupts from him, "; switch (damage) { case 0: return base + "but unfortunately you made a mistake, and the feedback leaves" + " you on the edge of climax!"; case 1: return base + "and you can feel his memories and experiences flow" + " into you, adding to your skill."; case 2: return base + "far more powerfully than you even thought possible." + " You feel a fragment of his soul break away from him and" + " spew into you, taking with it a portion of his very being" + "and merging with your own. You have clearly" + " won this fight, and a lot more than that."; default: // Should never happen return " but nothing happens, you feel strangely impotent."; } } else { String base = "With your c**k deep inside " + target.name() + ", you can feel the heat from her core. You draw the energy from her, mining her depths. "; switch (damage) { case 0: return "You attempt to drain " + target.name() + "'s energy through your intimate connection, but it goes wrong. You feel intense pleasure feeding " + "back into you and threatening to overwhelm you. You brink the spiritual link as fast as you can, but you're still left on the brink of " + "climax."; case 1: return "You attempt to drain " + target.name() + "'s energy through your intimate connection, taking a bit of her experience."; case 2: return base + "You succeed in siphoning off a portion of her soul, stealing a portion of her very being. This energy permanently " + "settles within you!"; default: // Should never happen return " but nothing happens, you feel strangely impotent."; } } }
@Override public String deal(Combat c, int damage, Result modifier, Character target) { if (modifier == Result.miss) { return "You lean in to kiss " + target.name() + "'s neck, but she slips away."; } else if (modifier == Result.special) { return "You draw close to " + target.name() + " as she's momentarily too captivated to resist. You run your tongue along her neck and bite gently. She shivers and you " + "can feel the energy of her pleasure flow into you, giving you strength."; } else { return "You lick and suck " + target.name() + "'s neck hard enough to leave a hickey."; } }
@Override public String deal(Combat c, int damage, Result modifier, Character target) { return "During a brief respite in the fight as " + target.name() + " is catching her breath, you make a show of seductively removing your clothes. " + "By the time you finish, she's staring with undisguised arousal, pressing a hand unconsciously against her groin."; }
@Override public boolean resolve(Combat c, Character target) { int type = Global.centeredrandom(2, getSelf().get(Attribute.Dark) / 20.0f, 2); if (this.getSelf().human()) { c.write(getSelf(), deal(c, type, Result.normal, target)); } else if (target.human()) { c.write(getSelf(), receive(c, type, Result.normal, target)); } switch (type) { case 0: getSelf().arouse(getSelf().getArousal().max(), c); break; case 1: int stolen = stealXP(target); if (stolen > 0) { getSelf().add(c, new Satiated(target, stolen, 0)); if (getSelf().human()) c.write("You have absorbed " + stolen + " XP from " + target.name() + "!\n"); else c.write(getSelf().name() + " has absorbed " + stolen + " XP from you!\n"); } break; case 2: int xpStolen = 95 + (5 * (target.getLevel())); getSelf().add(c, new Satiated(target, xpStolen, 0)); c.write(target.dong()); if (getSelf().human()) c.write( "You have stolen a level from " + target.name() + "'s levels and absorbed it as " + xpStolen + " XP!\n"); else c.write( getSelf().name() + " has stolen a level from you and absorbed it as " + xpStolen + " XP!\n"); getSelf().gainXP(xpStolen); target.tempt(c, getSelf(), target.getArousal().max()); break; default: break; } return type != 0; }
public void act(Character c, Skill action, String choice) { if (c == p1) { p1act = action; } if (c == p2) { p2act = action; } action.choice = choice; if (p1act == null) { p1.act(this); } else if (p2act == null) { p2.act(this); } else if (p1act != null && p2act != null) { clear(); if (p1.human() || p2.human()) { Global.gui().clearText(); } p1act = checkWorship(p1, p2, p1act); p2act = checkWorship(p2, p1, p2act); if (Global.isDebugOn(DebugFlags.DEBUG_SCENE)) { System.out.println(p1.name() + " uses " + p1act.getLabel(this)); System.out.println(p2.name() + " uses " + p2act.getLabel(this)); } if (p1.pet != null && p2.pet != null) { petbattle(p1.pet, p2.pet); } else if (p1.pet != null) { p1.pet.act(this, p2); } else if (p2.pet != null) { p2.pet.act(this, p1); } useSkills(); this.write("<br>"); p1.eot(this, p2, p2act); p2.eot(this, p1, p1act); checkStamina(p1); checkStamina(p2); getStance().decay(this); getStance().checkOngoing(this); phase = 0; if (!(p1.human() || p2.human())) { timer++; turn(); } updateMessage(); } }
@Override public String deal(Combat c, int damage, Result modifier, Character target) { if (modifier == Result.reverse) { return "You rise up and let " + target.nameOrPossessivePronoun() + " girl-c**k slip out of your " + (c.getStance().en == Stance.anal ? "ass." : "pussy"); } else if (modifier == Result.anal) { return "You pull your dick completely out of " + target.name() + "'s ass."; } else if (modifier == Result.normal) { return "You pull completely out of " + target.name() + "'s pussy, causing her to let out a disappointed little whimper."; } else { return "You pull yourself off " + target.name() + "'s face, causing her to gasp lungfuls of the new fresh air offer to her."; } }
@Override public String deal(Combat c, int damage, Result modifier, Character target) { if (modifier == Result.miss) { return "You try to slip a d***o into " + target.name() + ", but she blocks it."; } else if (modifier == Result.upgrade) { return "You touch the imperceptibly vibrating d***o to " + target.name() + "'s love button and she jumps as if shocked. Before she can defend herself, you " + "slip it into her " + target.body.getRandomPussy().describe(target) + ". She starts moaning in pleasure immediately."; } else { return "You rub the d***o against " + target.name() + "'s lower lips to lubricate it before you thrust it inside her. She can't help moaning a little as you " + "pump the rubber toy in and out of her " + target.body.getRandomPussy().describe(target) + "."; } }
@Override public String deal(Combat c, int damage, Result modifier, Character target) { if (modifier == Result.miss) { return "You try to spank " + target.name() + ", but " + target.pronoun() + " dodges away."; } if (modifier == Result.special) { return "You bend " + target.name() + " over your knee and spank " + target.directObject() + ", alternating between hitting " + target.possessivePronoun() + " soft butt cheek and " + target.possessivePronoun() + " sensitive pussy."; } else { return "You spank " + target.name() + " on " + target.possessivePronoun() + " naked butt cheek."; } }
@Override public String deal(Combat c, int damage, Result modifier, Character target) { if (modifier == Result.miss) { return "You grope at " + target.name() + "'s breasts, but miss."; } else if (modifier == Result.strong) { return "You massage " + target.name() + "'s soft breasts and pinch her nipples, causing her to moan with desire."; } else if (modifier == Result.special) { return "You slip your hands into " + target.nameOrPossessivePronoun() + " " + target.outfit.getTopOfSlot(ClothingSlot.top).getName() + ", massaging " + target.name() + "'s soft breasts and pinching her nipples."; } else { return "You massage " + target.name() + "'s breasts over her " + target.getOutfit().getTopOfSlot(ClothingSlot.top).getName() + "."; } }
@Override public String deal(Combat c, int damage, Result modifier, Character target) { if (modifier == Result.special) { if (target.hasBalls()) { return "You push " + target.name() + "'s legs apart, exposing her private parts. Her girl-c**k is hanging over her testicles, so you prod it with your foot " + "to push it out of the way. She becomes slightly aroused at your touch and your attention, not realizing you're planning something extremely " + "painful. You're going to feel a bit bad about this, but probably not nearly as much as she will. You jump up, lifting both legs and coming " + "down in a double legdrop directly hitting her unprotected jewels."; } else { return "You push " + target.name() + "'s legs apart, fully exposing her womanhood. She flushes in shame, apparently misunderstanding you intentions, which " + "compels you to mutter a quick apology before you jump up and slam your heel into her vulnerable quim."; } } else if (modifier == Result.strong) { return String.format( "You use your foot to maneuver %s's %s out of the way and revealing %s soft balls. " + "%s does not seem to realize what you are planning before your foot is already plunging down towards them." + " When it lands, you feel a sympathetic jolt run up your spine as %s gonads are crushed beneath your foot." + " %s whimpers in pain, but not as much as you'd expect from such a magnificent impact.", target.name(), target.body.getRandomCock().describe(target), target.possessivePronoun(), Global.capitalizeFirstLetter(target.pronoun()), target.possessivePronoun(), Global.capitalizeFirstLetter(target.pronoun())); } else if (modifier == Result.weak) { return "You step between " + target.name() + "'s legs and stomp down on her groin. Your foot hits something solid and she doesn't seem terribly affected."; } else if (modifier == Result.weak2) { return String.format( "You step between %s's legs and stomp down on %s groin." + "%s exhales sharply, but does not seem hurt much at all. Somehow.", target.name(), target.possessivePronoun(), Global.capitalizeFirstLetter(target.pronoun())); } else { if (target.hasBalls()) { return "You pull " + target.name() + "'s legs open and stomp on her vulnerable balls. She cries out in pain and curls up in the fetal position."; } else { return "You step between " + target.name() + "'s legs and stomp down on her sensitive pussy. She cries out in pain and rubs her injured girl bits."; } } }
@Override public String deal(Combat c, int damage, Result modifier, Character target) { if (modifier == Result.miss) { return "You attempt to strip off " + target.name() + "'s " + stripped.getName() + ", but she shoves you away."; } else { String msg = "After a brief struggle, you manage to pull off " + target.name() + "'s " + stripped.getName() + "."; if (modifier == Result.critical && extra != null) { msg += String.format( " Taking advantage of the situation, you also" + " manage to snag %s %s!", target.possessivePronoun(), extra.getName()); } return msg; } }
@Override public String deal(Combat c, int damage, Result modifier, Character target) { String m = ""; if (modifier == Result.miss) { m = "You try to take " + target.name() + "'s penis into your mouth, but she manages to pull away."; } if (target.getArousal().get() < 15) { m = "You suck on " + target.name() + " flaccid little penis until it grows into an intimidating large erection."; } else if (target.getArousal().percent() >= 90) { m = target.name() + "'s girl-c**k seems ready to burst, so you suck on it strongly and attack the glans with your tongue fiercely."; } else if (modifier == Result.special) { m = "You put your skilled tongue to good use tormenting and teasing her unnatural member."; } else if (modifier == Result.reverse) { m = "With " + target.name() + " sitting over your face, you have no choice but to try to suck her off."; } else { m = "You feel a bit odd, faced with " + target.name() + "'s rigid c**k, but as you lick and suck on it, you discover the taste is quite palatable. Besides, " + "making " + target.name() + " squirm and moan in pleasure is well worth it."; } if (modifier != Result.miss && getSelf().body.getRandom("mouth").isErogenous()) { m += "<br>Unfortunately for you, your sensitive modified mouth pussy sends spasms of pleasure into you too as you mouth f**k " + target.possessivePronoun() + " c**k."; } return m; }
public void automate() { int turn = 0; while (!(p1.checkLoss() || p2.checkLoss())) { // guarantee the fight finishes in a timely manner if (turn > 50) { p1.pleasure(5 * (turn - 50), this, p2); p2.pleasure(5 * (turn - 50), this, p1); } turn += 1; phase = 1; p1.regen(this); p2.regen(this); p1act = ((NPC) p1).actFast(this); p2act = ((NPC) p2).actFast(this); clear(); if (Global.isDebugOn(DebugFlags.DEBUG_SCENE)) { System.out.println(p1.name() + " uses " + p1act.getLabel(this)); System.out.println(p2.name() + " uses " + p2act.getLabel(this)); } if (p1.pet != null && p2.pet != null) { petbattle(p1.pet, p2.pet); } else if (p1.pet != null) { p1.pet.act(this, p2); } else if (p2.pet != null) { p2.pet.act(this, p1); } useSkills(); p1.eot(this, p2, p2act); p2.eot(this, p1, p1act); checkStamina(p1); checkStamina(p2); getStance().decay(this); getStance().checkOngoing(this); phase = 0; } if (p1.checkLoss() && p2.checkLoss()) { state = eval(); p1.evalChallenges(this, null); p2.evalChallenges(this, null); p2.draw(this, state); winner = Optional.of(Global.noneCharacter()); end(); return; } if (p1.checkLoss()) { state = eval(); p1.evalChallenges(this, p2); p2.evalChallenges(this, p2); p2.victory(this, state); doVictory(p2, p1); winner = Optional.of(p2); end(); return; } if (p2.checkLoss()) { state = eval(); p1.evalChallenges(this, p1); p2.evalChallenges(this, p1); p1.victory(this, state); doVictory(p1, p2); winner = Optional.of(p1); end(); return; } }
public void turn() { if (p1.checkLoss() && p2.checkLoss()) { state = eval(); p1.evalChallenges(this, null); p2.evalChallenges(this, null); p2.draw(this, state); phase = 2; updateMessage(); winner = Optional.of(Global.noneCharacter()); if (!(p1.human() || p2.human())) { end(); } return; } if (p1.checkLoss()) { state = eval(); p1.evalChallenges(this, p2); p2.evalChallenges(this, p2); p2.victory(this, state); doVictory(p2, p1); winner = Optional.of(p2); phase = 2; updateMessage(); if (!(p1.human() || p2.human())) { end(); } return; } if (p2.checkLoss()) { state = eval(); p1.evalChallenges(this, p1); p2.evalChallenges(this, p1); p1.victory(this, state); doVictory(p1, p2); winner = Optional.of(p1); phase = 2; updateMessage(); if (!(p1.human() || p2.human())) { end(); } return; } if (!p1.human() && !p2.human() && timer > 15) { if (p1.getArousal().get() > p2.getArousal().get()) { state = eval(); if (Global.isDebugOn(DebugFlags.DEBUG_SCENE)) { System.out.println(p2.name() + " victory over " + p1.name()); } p2.victory(this, state); doVictory(p2, p1); phase = 2; updateMessage(); if (!(p1.human() || p2.human())) { end(); } return; } else if (p1.getArousal().get() < p2.getArousal().get()) { state = eval(); if (Global.isDebugOn(DebugFlags.DEBUG_SCENE)) { System.out.println(p1.name() + " victory over " + p2.name()); } p1.victory(this, state); doVictory(p1, p2); phase = 2; updateMessage(); if (!(p2.human() || p1.human())) { end(); } return; } else { state = eval(); if (Global.isDebugOn(DebugFlags.DEBUG_SCENE)) { System.out.println(p2.name() + " draw with " + p1.name()); } p2.draw(this, state); phase = 2; updateMessage(); if (!(p1.human() || p2.human())) { end(); } return; } } Character player; Character other; if (p1.human()) { player = p1; other = p2; } else { player = p2; other = p1; } phase = 1; p1.regen(this); p2.regen(this); message = other.describe(player.get(Attribute.Perception), this) + "<p>" + Global.capitalizeFirstLetter(getStance().describe()) + "<p>" + player.describe(other.get(Attribute.Perception), this) + "<p>"; if ((p1.human() || p2.human()) && !Global.checkFlag(Flag.noimage)) { Global.gui().clearImage(); Global.gui().displayImage(imagePath, images.get(imagePath)); } p1act = null; p2act = null; p1.act(this); if (Global.random(3) == 0 && (p1.human() || p2.human())) { NPC commenter = (NPC) getOther(Global.getPlayer()); Optional<String> comment = commenter.getComment(this); if (comment.isPresent()) { write( commenter, "<i>\"" + Global.format(comment.get(), commenter, Global.getPlayer()) + "\"</i>"); } } updateAndClearMessage(); }
@Override public boolean resolve(Combat c, Character target) { Result result = Result.normal; if (c.getStance().inserted(getSelf())) { if (c.getStance().en == Stance.anal) result = Result.anal; } else if (c.getStance().inserted(target)) { result = Result.reverse; } else { result = Result.special; } if (c.getStance().en == Stance.anal) { if (getSelf().human()) { c.write(getSelf(), deal(c, 0, result, target)); } else if (target.human()) { c.write(getSelf(), receive(c, 0, result, target)); } c.setStance(c.getStance().insertRandom()); } else if (result == Result.special) { if (getSelf().human()) { c.write(getSelf(), deal(c, 0, result, target)); } else if (target.human()) { c.write(getSelf(), receive(c, 0, result, target)); } c.setStance(new StandingOver(getSelf(), target)); } else { if (getSelf().hasStatus(Stsflag.leglocked) || getSelf().hasStatus(Stsflag.armlocked) || (target.has(Trait.tight) && c.getStance().inserted(getSelf()))) { boolean escaped = getSelf() .check(Attribute.Power, 10 - getSelf().escape(c) + target.get(Attribute.Power)); if (escaped) { if (getSelf().human()) { c.write(getSelf(), deal(c, 0, result, target)); } else if (target.human()) { c.write(getSelf(), receive(c, 0, result, target)); } } else { if (getSelf().hasStatus(Stsflag.leglocked)) { BodyPart part = c.getStance().anallyPenetrated(getSelf()) ? target.body.getRandom("ass") : target.body.getRandomPussy(); String partString = part.describe(target); if (getSelf().human()) c.write( getSelf(), "You try to pull out of " + target.name() + "'s " + partString + ", but her legs immediately tighten against your waist, holding you inside her. The mere friction from her action sends a shiver down your spine."); else c.write( getSelf(), "She tries to pull out of " + target.nameOrPossessivePronoun() + " " + partString + ", but your legs immediately pull her back in, holding you inside her."); } else if (getSelf().hasStatus(Stsflag.armlocked)) { if (getSelf().human()) c.write( getSelf(), "You try to pull yourself off of " + target.name() + ", but she merely pulls you back on top of her, surrounding you in her embrace."); else c.write( getSelf(), "She tries to pull herself off of " + target.name() + ", but with a gentle pull of your hands, she collapses back on top of you."); } else if (target.has(Trait.tight) && c.getStance().inserted(getSelf())) { BodyPart part = c.getStance().anallyPenetrated(target) ? target.body.getRandom("ass") : target.body.getRandomPussy(); String partString = part.describe(target); if (getSelf().human()) c.write( getSelf(), "You try to pull yourself out of " + target.name() + "'s " + partString + ", but she clamps down hard on your c**k while smiling at you. You almost cum from the sensation, and quickly abandon ideas about your escape."); else c.write( getSelf(), "She tries to pull herself out of " + target.nameOrPossessivePronoun() + " " + partString + ", but you clamp down hard on her c**k, and prevent her from pulling out."); } int m = 8; if (c.getStance().inserted(getSelf())) { BodyPart part = c.getStance().anallyPenetrated(target) ? target.body.getRandom("ass") : target.body.getRandomPussy(); String partString = part.describe(target); getSelf().body.pleasure(target, part, getSelf().body.getRandomInsertable(), m, c); } getSelf().struggle(); return false; } } else if (getSelf().hasStatus(Stsflag.cockbound)) { CockBound s = (CockBound) getSelf().getStatus(Stsflag.cockbound); c.write( getSelf(), "You try to pull out of " + target.name() + "'s " + target.body.getRandomPussy() + ", but " + s.binding + " instantly reacts and pulls your dick back in."); int m = 8; getSelf() .body .pleasure( target, target.body.getRandom("pussy"), getSelf().body.getRandom("c**k"), m, c); return false; } else if (getSelf().human()) { c.write(getSelf(), deal(c, 0, result, target)); } else if (target.human()) { c.write(getSelf(), receive(c, 0, result, target)); } c.setStance(c.getStance().insertRandom()); } return true; }
@Override public String deal(Combat c, int magnitude, Result modifier, Character target) { switch (modifier) { case critical: return "You flex your prehensile tail and spread " + target.nameOrPossessivePronoun() + " legs apart. " + "You quickly lube it up with " + target.possessivePronoun() + " juices and slide it into her ass and start pumping."; case miss: return "You try to peg " + target.name() + " with your tail, but " + target.pronoun() + " manages to clench " + target.possessivePronoun() + " butt cheeks together in time to keep you out."; case normal: return "You move towards " + target.name() + " and hold " + target.possessivePronoun() + " hands above " + target.possessivePronoun() + " head. In the same motion, you swiftly plunge your thick tail into " + target.possessivePronoun() + " ass, pumping it in and out of " + target.possessivePronoun() + " tight hole."; case special: return "You smile down at " + target.name() + " and move your flexible tail behind " + target.directObject() + ". You spread " + target.possessivePronoun() + " cheeks with your tail and plunge it into " + target.possessivePronoun() + " tight pucker. " + target.name() + " moans loudly at the sudden intrusion."; case intercourse: return "You smile down at " + target.name() + " and move your flexible tail behind " + target.directObject() + ". You spread " + target.possessivePronoun() + " legs with your tail and plunge it into " + target.possessivePronoun() + " wet slit. " + target.name() + " moans loudly at the sudden intrusion."; case strong: if (target.body.getLargestBreasts().size >= 2) { return "You hug " + target.name() + " from behind and cup her breasts with your hands. Taking advantage of her surprise, you shove your tail into her ass, and tickle her prostate with the tip."; } else { return "You hug " + target.name() + " from behind and twist " + target.possessivePronoun() + " nipples. Taking advantage of " + target.possessivePronoun() + " surprise, you shove your tail into " + target.possessivePronoun() + " ass, and tickle " + target.possessivePronoun() + " prostate with the tip."; } default: return "<<This should not be displayed, please inform The Silver Bard: TailPeg-deal>>"; } }
@Override public String receive(Combat c, int damage, Result modifier, Character target) { return target.name() + " opens up an energy drink and downs the whole can."; }
@Override public String deal(Combat c, int damage, Result modifier, Character target) { return "You straddle " + target.name() + " using your body weight to hold her down."; }
@Override public boolean resolve(Combat c, Character target) { if (isActive(target)) { if (getSelf().human()) { c.write( getSelf(), "Deciding she's had enough for now, you let your c**k return to its regular shape, once again permitting movement."); } else if (c.shouldPrintReceive(target)) { String part = c.getStance().insertedPartFor(target).describe(target); c.write( getSelf(), String.format( "%s the intense pressure in %s %s " + "recede as %s allows %s knot to deflate.", target.subjectAction("feel"), target.possessivePronoun(), part, getSelf().subject(), getSelf().possessivePronoun())); } target.removeStatus(Stsflag.knotted); } else { if (getSelf().human()) { c.write( getSelf(), "You'd like to stay inside " + target.name() + " for a bit, so you " + (c.getStance().canthrust(getSelf()) ? "thrust" : "buck up") + " as deep inside of her as you can and send a mental command to the base of your c**k, where your" + " knot soon swells up, locking you inside,"); } else if (c.shouldPrintReceive(target)) { String firstPart; if (c.getStance().dom(getSelf())) { firstPart = String.format( "%s bottoms out inside of %s, and something quickly feels off%s.", getSelf().subject(), target.nameDirectObject(), c.isBeingObserved() ? " to " + target.directObject() : ""); } else { firstPart = String.format( "%s pulls %s all the way onto %s c**k." + "As soon as %s pelvis touches %s, something starts happening.", getSelf().subject(), target.nameDirectObject(), getSelf().possessivePronoun(), getSelf().possessivePronoun(), (target.human() || target.useFemalePronouns()) ? target.possessivePronoun() + "s" : "s"); } c.write( getSelf(), String.format( "%s A ball swells up at the base of %s dick," + " growing to the size of a small apple. %s not" + " getting <i>that</i> out of %s any time soon...", firstPart, getSelf().nameOrPossessivePronoun(), Global.capitalizeFirstLetter(target.subjectAction("are", "is")), target.reflectivePronoun())); } target.add(c, new Knotted(target, getSelf(), c.getStance().anallyPenetrated(target))); } return true; }
@Override public String deal(Combat c, int damage, Result modifier, Character target) { return "You tell " + target.name() + " that if she's so eager to be f****d senseless, you're available during off hours."; }