示例#1
0
  @Override
  public boolean resolve(Combat c, Character target) {
    BodyPart selfO = getSelfOrgan(c);
    BodyPart targetO = getTargetOrgan(c, target);
    Result result;
    if (c.getStance().inserted(target)) {
      result = Result.reverse;
    } else if (c.getStance().en == Stance.anal) {
      result = Result.anal;
    } else {
      result = Result.normal;
    }

    writeOutput(c, result, target);

    int[] m = getDamage(c, target);
    assert (m.length >= 2);

    if (m[0] != 0) target.body.pleasure(getSelf(), selfO, targetO, m[0], c, this);
    if (m[1] != 0) getSelf().body.pleasure(target, targetO, selfO, m[1], 0, c, false, this);
    if (selfO.isType("ass") && Global.random(100) < 2 + getSelf().get(Attribute.Fetish)) {
      target.add(c, new BodyFetish(target, getSelf(), "ass", .25));
    }
    return true;
  }
示例#2
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;
 }
示例#3
0
 @Override
 public boolean resolve(Combat c, Character target) {
   if (getSelf().human()) {
     c.write(getSelf(), deal(c, 0, Result.normal, target));
   } else if (target.human()) {
     c.write(getSelf(), receive(c, 0, Result.normal, target));
   }
   double m =
       (6 + Global.random(4) + getSelf().body.getHotness(getSelf(), target))
           * Math.min(2, 1 + getSelf().getExposure());
   if (target.has(Trait.imagination)) {
     m += 4;
     target.tempt(c, getSelf(), (int) Math.round(m));
     if (Global.random(4) >= 1) {
       target.add(c, new Shamed(target));
     }
   } else {
     target.tempt(c, getSelf(), (int) Math.round(m));
     if (Global.random(4) >= 2) {
       target.add(c, new Shamed(target));
     }
   }
   target.emote(Emotion.angry, 30);
   target.emote(Emotion.nervous, 15);
   getSelf().emote(Emotion.dominant, 20);
   target.loseMojo(c, 5);
   return true;
 }
示例#4
0
 @Override
 public String describe(Combat c) {
   if (c.getStance().anallyPenetrated(c, c.getOpponent(getSelf()))) {
     return "F**k your opponent with your tail";
   }
   return "Shove your tail up your opponent's ass.";
 }
示例#5
0
 @Override
 public boolean usable(Combat c, Character target) {
   return !target.hasStatus(Stsflag.knotted)
       && getSelf().canAct()
       && (c.getStance().en == Stance.facesitting
           || (c.getStance().inserted() && c.getStance().dom(getSelf())));
 }
示例#6
0
 @Override
 public String getLabel(Combat c) {
   if (c.getStance().anallyPenetrated(c, c.getOpponent(getSelf()))) {
     return "Tail F**k";
   } else {
     return "Tail Peg";
   }
 }
示例#7
0
  @Override
  public boolean usable(Combat c, Character target) {

    return c.getStance().mobile(getSelf())
        && c.getStance().mobile(target)
        && c.getStance().prone(target)
        && getSelf().canAct();
  }
示例#8
0
 @Override
 public boolean usable(Combat c, Character target) {
   return !c.getStance().prone(getSelf())
       && c.getStance().prone(target)
       && c.getStance().feet(getSelf())
       && getSelf().canAct()
       && !getSelf().has(Trait.softheart)
       && !c.getStance().inserted(target);
 }
示例#9
0
 @Override
 public boolean usable(Combat c, Character target) {
   return (getSelf().has(Item.D***o) || getSelf().has(Item.Dildo2))
       && getSelf().canAct()
       && target.hasPussy()
       && c.getStance().reachBottom(getSelf())
       && target.crotchAvailable()
       && !c.getStance().vaginallyPenetrated(target);
 }
示例#10
0
 public static boolean isUsable(Combat c, Character self, Character target) {
   return self.stripDifficulty(target) == 0
       && !self.has(Trait.strapped)
       && self.canAct()
       && c.getStance().mobile(self)
       && !self.mostlyNude()
       && !c.getStance().prone(self)
       && c.getStance().front(self)
       && (!self.breastsAvailable() || !self.crotchAvailable());
 }
示例#11
0
 @Override
 public boolean resolve(Combat c, Character target) {
   if (getSelf().human()) {
     c.write(getSelf(), deal(c, 0, Result.normal, target));
   } else if (target.human()) {
     c.write(getSelf(), receive(c, 0, Result.normal, target));
   }
   c.setStance(new Mount(getSelf(), target));
   return true;
 }
示例#12
0
 @Override
 public boolean resolve(Combat c, Character target) {
   if (getSelf().human()) {
     c.write(getSelf(), deal(c, 0, Result.setup, target));
   } else {
     c.write(getSelf(), receive(c, 0, Result.setup, target));
   }
   getSelf().add(c, new CounterStatus(getSelf(), this, description, duration));
   return true;
 }
示例#13
0
 @Override
 public boolean resolve(Combat c, Character target) {
   if (getSelf().human()) {
     c.write(getSelf(), deal(c, 0, Result.normal, target));
   } else if (target.human()) {
     c.write(getSelf(), receive(c, 0, Result.normal, target));
   }
   getSelf().weaken(c, 20 + getSelf().get(Attribute.Dark));
   getSelf().calm(c, getSelf().getArousal().max() / 3 + 20 + getSelf().get(Attribute.Dark));
   return true;
 }
示例#14
0
 @Override
 public void add(Combat c, Status status) {
   super.add(c, status);
   if (stunned()) {
     c.write(
         this,
         Global.format(
             "With {self:name-possessive} link to the fight weakened, {self:subject-action:disappears|disappears}..",
             this,
             this));
     c.removePet(this);
   }
 }
示例#15
0
  @Override
  public boolean resolve(Combat c, Character target) {
    if (getSelf().human()) {
      c.write(getSelf(), deal(c, 0, Result.normal, target));
    } else if (target.human()) {
      c.write(getSelf(), receive(c, 0, Result.normal, getSelf()));
    }
    getSelf().heal(c, Math.max(20, getSelf().getStamina().max() / 2));
    getSelf().buildMojo(c, 20 + Global.random(10));

    getSelf().consume(Item.EnergyDrink, 1);
    return true;
  }
示例#16
0
 @Override
 public boolean usable(Combat c, Character target) {
   boolean canUse =
       (c.getStance().enumerate() == Stance.facesitting && getSelf().canRespond())
           || getSelf().canAct();
   return (target.crotchAvailable()
           && target.hasDick()
           && c.getStance().oral(getSelf())
           && c.getStance().front(getSelf())
           && canUse
           && !c.getStance().inserted(target))
       || (getSelf().canRespond() && isVaginal(c));
 }
示例#17
0
 @Override
 public float priorityMod(Combat c) {
   float priority = 0;
   if (c.getStance().penetratedBy(getSelf(), c.getOther(getSelf()))) {
     priority += 1.0f;
   }
   if (getSelf().has(Trait.silvertongue)) {
     priority += 1;
   }
   if (getSelf().has(Trait.experttongue)) {
     priority += 1;
   }
   return priority;
 }
示例#18
0
 @Override
 public String getLabel(Combat c) {
   if (isActive(c.getOther(getSelf()))) {
     return "Deflate Knot";
   }
   return "Inflate Knot";
 }
示例#19
0
 @Override
 public boolean usable(Combat c, Character target) {
   return target.mostlyNude()
       && !c.getStance().sub(getSelf())
       && getSelf().canAct()
       && !getSelf().has(Trait.shy);
 }
示例#20
0
 @Override
 public boolean usable(Combat c, Character target) {
   return getSelf().canRespond()
       && c.getStance().penetratedBy(c, getSelf(), target)
       && c.getStance().havingSexNoStrapped(c)
       && target.hasDick();
 }
示例#21
0
 @Override
 public String describe(Combat c) {
   if (!affected.human()) {
     return String.format(
         "%s inhumanly beautiful.", c.getOpponent(affected).subjectAction("look", "looks"));
   }
   return "";
 }
示例#22
0
 @Override
 public boolean usable(Combat c, Character target) {
   return (this.getSelf().canAct())
       && (c.getStance().canthrust(getSelf()))
       && (c.getStance().havingSexNoStrapped())
       && getSelf().getLevel() < 100
       && getSelf().getLevel() < target.getLevel();
 }
示例#23
0
 @Override
 public boolean usable(Combat c, Character target) {
   return getSelf().getArousal().get() >= 30
       && getSelf().canAct()
       && target.crotchAvailable()
       && c.getStance().en != Stance.standing
       && c.getStance().en != Stance.standingover;
 }
示例#24
0
 @Override
 protected void resolveOrgasm(
     Combat c,
     Character opponent,
     BodyPart selfPart,
     BodyPart opponentPart,
     int times,
     int totalTimes) {
   super.resolveOrgasm(c, opponent, selfPart, opponentPart, times, totalTimes);
   c.write(
       this,
       Global.format(
           "The force of {self:name-possessive} o****m destroys {self:possessive} anchor to the fight and {self:pronoun} disappears.",
           this,
           opponent));
   c.removePet(this);
 }
示例#25
0
 @Override
 public Tactics type(Combat c) {
   if (c.getStance().vaginallyPenetrated(getSelf()) && getSelf().has(Trait.vaginaltongue)) {
     return Tactics.f*****g;
   } else {
     return Tactics.pleasure;
   }
 }
示例#26
0
 @Override
 public boolean resolve(Combat c, Character target) {
   if (getSelf().human()) {
     c.write(getSelf(), deal(c, 0, Result.normal, target));
   } else if (c.shouldPrintReceive(target)) {
     if (target.human() && target.is(Stsflag.blinded)) printBlinded(c);
     else c.write(getSelf(), receive(c, 0, Result.normal, target));
   }
   if (!target.is(Stsflag.blinded)) {
     int m = 15 + Global.random(5);
     target.tempt(c, getSelf(), m);
     getSelf().add(c, new Alluring(getSelf(), 5));
   }
   target.emote(Emotion.horny, 30);
   getSelf().undress(c);
   getSelf().emote(Emotion.confident, 15);
   getSelf().emote(Emotion.dominant, 15);
   return true;
 }
示例#27
0
 @Override
 public int getMojoBuilt(Combat c) {
   if (isVaginal(c)) {
     return 10;
   } else if (c.getStance().enumerate() == Stance.facesitting) {
     return 0;
   } else {
     return 5;
   }
 }
示例#28
0
 @Override
 public boolean resolve(Combat c, Character target) {
   if (target.roll(this, c, accuracy(c))) {
     if (getSelf().has(Item.Dildo2)) {
       if (getSelf().human()) {
         c.write(getSelf(), deal(c, 0, Result.upgrade, target));
       } else if (target.human()) {
         c.write(getSelf(), receive(c, 0, Result.upgrade, target));
       }
       int m = 5 + Global.random(15) + target.get(Attribute.Perception);
       target.body.pleasure(getSelf(), null, target.body.getRandom("pussy"), m, c);
     } else {
       if (getSelf().human()) {
         c.write(getSelf(), deal(c, 0, Result.normal, target));
       } else if (target.human()) {
         c.write(getSelf(), receive(c, 0, Result.normal, target));
       }
       int m = Global.random(10) + target.get(Attribute.Perception);
       target.body.pleasure(getSelf(), null, target.body.getRandom("pussy"), m, c);
     }
   } else {
     if (getSelf().human()) {
       c.write(getSelf(), deal(c, 0, Result.miss, target));
     } else if (target.human()) {
       c.write(getSelf(), receive(c, 0, Result.miss, target));
     }
     return false;
   }
   return true;
 }
示例#29
0
 @Override
 public boolean resolve(Combat c, Character target) {
   if (target.roll(this, c, accuracy(c))) {
     if (getSelf().get(Attribute.Dark) >= 1) {
       if (getSelf().human()) {
         c.write(getSelf(), deal(c, 0, Result.special, target));
       } else if (target.human()) {
         c.write(getSelf(), receive(c, 0, Result.special, target));
       }
       int m = 10 + Math.min(20, getSelf().get(Attribute.Dark) / 2);
       target.drain(c, getSelf(), m);
     } else {
       if (getSelf().human()) {
         c.write(getSelf(), deal(c, 0, Result.normal, target));
       } else if (target.human()) {
         c.write(getSelf(), receive(c, 0, Result.normal, target));
       }
     }
     int m = 1 + Global.random(8);
     target.body.pleasure(
         getSelf(), getSelf().body.getRandom("mouth"), target.body.getRandom("skin"), m, c);
   } else {
     if (getSelf().human()) {
       c.write(getSelf(), deal(c, 0, Result.miss, target));
     } else if (target.human()) {
       c.write(getSelf(), receive(c, 0, Result.miss, target));
     }
     return false;
   }
   return true;
 }
示例#30
0
 @Override
 public Position reverse(Combat c, boolean writeMessage) {
   if (writeMessage) {
     c.write(
         bottom,
         Global.format(
             "{self:SUBJECT-ACTION:pinch|pinches} {other:possessive} clitoris with {self:possessive} hands as {other:subject-action:try|tries} to ride {self:direct-object}. "
                 + "While {other:subject-action:yelp|yelps} with surprise, {self:subject-action:take|takes} the chance to swing around into a dominant missionary position.",
             bottom,
             top));
   }
   return new Missionary(bottom, top);
 }