Ejemplo n.º 1
0
 public void intervene(Character intruder, Character assist) {
   Character target;
   if (p1 == assist) {
     target = p2;
   } else {
     target = p1;
   }
   if (target.resist3p(this, intruder, assist)) {
     target.gainXP(20 + target.lvlBonus(intruder));
     intruder.gainXP(10 + intruder.lvlBonus(target));
     intruder.getArousal().empty();
     if (intruder.has(Trait.insatiable)) {
       intruder.getArousal().restore((int) (intruder.getArousal().max() * 0.2D));
     }
     target.undress(this);
     intruder.defeated(target);
     intruder.defeated(assist);
   } else {
     intruder.intervene3p(this, target, assist);
     assist.victory3p(this, target, intruder);
     phase = 2;
     if (!(p1.human() || p2.human() || intruder.human())) {
       end();
     } else if (intruder.human()) {
       Global.gui().watchCombat(this);
     }
   }
   updateMessage();
 }
Ejemplo n.º 2
0
  @Override
  public String receive(Combat c, int damage, Result modifier, Character target) {
    String m = "";
    if (modifier == Result.miss) {
      m += getSelf().name() + " tries to suck your c**k, but you pull your hips back to avoid her.";
    } else if (modifier == Result.special) {
      m +=
          getSelf().name()
              + "'s soft lips and talented tongue work over your dick, drawing out dangerously irresistible pleasure with each touch.";
    } else if (modifier == Result.intercourse) {
      m +=
          getSelf().name()
              + "'s pussy lips suddenly quiver and you feel a long sinuous object wrap around your c**k. You realize she's controlling her vaginal tongue to blow you with her pussy! "
              + "Her lower tongue runs up and down your shaft causing you to shudder with arousal.";
    } else if (modifier == Result.reverse) {
      m +=
          "Faced with your dick sitting squarely in front of her face, "
              + getSelf().name()
              + " obediently tongues your c**k in defeat.";
    } else if (target.getArousal().get() < 15) {
      m +=
          getSelf().name()
              + " takes your soft penis into her mouth and sucks on it until it hardens";
    } else if (target.getArousal().percent() >= 90) {
      m +=
          getSelf().name()
              + " laps up the precum leaking from your c**k and takes the entire length into her mouth, sucking relentlessly";
    } else {
      int r = Global.random(4);
      if (r == 0) {
        m +=
            getSelf().name()
                + " runs her tongue up the length of your dick, sending a jolt of pleasure up your spine. She slowly wraps her lips around your dick and sucks.";
      } else if (r == 1) {
        m += getSelf().name() + " sucks on the head of your c**k while her hand strokes the shaft.";
      } else if (r == 2) {
        m +=
            getSelf().name()
                + " licks her way down to the base of your c**k and gently sucks on your balls.";
      } else {
        m +=
            getSelf().name()
                + " runs her tongue around the glans of your penis and teases your urethra.";
      }
    }

    if (modifier != Result.miss && getSelf().body.getRandom("mouth").isErogenous()) {
      m +=
          "<br>Unfortunately for her, as "
              + getSelf().subject()
              + " mouth f***s "
              + target.possessivePronoun()
              + " c**k "
              + getSelf().nameOrPossessivePronoun()
              + " sensitive modified mouth pussy sends spasms of pleasure into "
              + getSelf().reflectivePronoun()
              + " too.";
    }
    return m;
  }
Ejemplo n.º 3
0
 @Override
 public boolean resolve(Combat c, Character target) {
   int difficulty =
       target.getOutfit().getTopOfSlot(ClothingSlot.top).dc()
           + target.getLevel()
           + (target.getStamina().percent() / 5 - target.getArousal().percent()) / 4
           - (!target.canAct() || c.getStance().sub(target) ? 20 : 0);
   if (getSelf().check(Attribute.Cunning, difficulty) || !target.canAct()) {
     stripped = target.strip(ClothingSlot.top, c);
     boolean doubled = false;
     if (getSelf().get(Attribute.Cunning) >= 30
             && !target.breastsAvailable()
             && getSelf().check(Attribute.Cunning, difficulty)
         || !target.canAct()) {
       extra = target.strip(ClothingSlot.top, c);
       doubled = true;
       writeOutput(c, Result.critical, target);
     } else {
       writeOutput(c, Result.normal, target);
     }
     if (getSelf().human() && target.mostlyNude()) {
       c.write(target, target.nakedLiner(c, target));
     }
     target.emote(Emotion.nervous, doubled ? 20 : 10);
   } else {
     stripped = target.outfit.getTopOfSlot(ClothingSlot.top);
     writeOutput(c, Result.miss, target);
     target.weaken(
         c, (int) getSelf().modifyDamage(DamageType.physical, target, Global.random(8, 16)));
     return false;
   }
   return true;
 }
Ejemplo n.º 4
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;
 }
Ejemplo n.º 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;
  }
Ejemplo n.º 6
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();
  }