예제 #1
0
 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);
     }
   }
 }
예제 #2
0
 @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.";
     }
   }
 }
예제 #3
0
 @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.";
   }
 }
예제 #4
0
 @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.";
 }
예제 #5
0
  @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;
  }
예제 #6
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();
   }
 }
예제 #7
0
 @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.";
   }
 }
예제 #8
0
 @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)
         + ".";
   }
 }
예제 #9
0
 @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.";
   }
 }
예제 #10
0
 @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()
         + ".";
   }
 }
예제 #11
0
 @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.";
     }
   }
 }
예제 #12
0
 @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;
   }
 }
예제 #13
0
 @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;
 }
예제 #14
0
 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;
   }
 }
예제 #15
0
  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();
  }
예제 #16
0
 @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;
 }
예제 #17
0
 @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>>";
   }
 }
예제 #18
0
 @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.";
 }
예제 #19
0
 @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.";
 }
예제 #20
0
 @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;
 }
예제 #21
0
 @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.";
 }