Beispiel #1
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;
 }
Beispiel #2
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);
 }
Beispiel #3
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());
 }
Beispiel #4
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));
 }
Beispiel #5
0
 private Skill checkWorship(Character self, Character other, Skill def) {
   if (other.has(Trait.objectOfWorship) && (other.breastsAvailable() || other.crotchAvailable())) {
     int chance = Math.min(20, Math.max(5, other.get(Attribute.Divinity) + 10 - self.getLevel()));
     if (Global.random(100) < chance) {
       List<Skill> avail = new ArrayList<Skill>(Arrays.asList(worshipSkills));
       Collections.shuffle(avail);
       while (!avail.isEmpty()) {
         Skill skill = avail.remove(avail.size() - 1).copy(self);
         if (Skill.skillIsUsable(this, skill, other)) {
           write(
               other,
               Global.format(
                   "<b>{other:NAME-POSSESSIVE} divine aura forces {self:subject} to forget what {self:pronoun} {self:action:were|was} doing and crawl to {other:direct-object} on {self:possessive} knees.</b>",
                   self,
                   other));
           return skill;
         }
       }
     }
   }
   return def;
 }
Beispiel #6
0
 @Override
 public boolean resolve(Combat c, Character target) {
   if (target.has(Trait.brassballs)) {
     if (getSelf().has(Trait.heeldrop) && target.crotchAvailable() && target.hasBalls()) {
       if (getSelf().human()) {
         c.write(getSelf(), deal(c, 0, Result.strong, target));
       } else if (target.human()) {
         c.write(getSelf(), receive(c, 0, Result.strong, target));
         if (Global.random(5) >= 1) {
           c.write(getSelf(), getSelf().bbLiner(c));
         }
       }
       target.pain(
           c,
           15
               - (int)
                   Math.round(
                       (5 + Global.random(5))
                           * target.getOutfit().getExposure(ClothingSlot.bottom)));
     } else {
       if (getSelf().human()) {
         c.write(getSelf(), deal(c, 0, Result.weak2, target));
       } else if (target.human()) {
         c.write(getSelf(), receive(c, 0, Result.weak2, target));
       }
     }
   } else if (getSelf().has(Trait.heeldrop) && target.crotchAvailable()) {
     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));
       if (Global.random(5) >= 1) {
         c.write(getSelf(), getSelf().bbLiner(c));
       }
     }
     if (target.has(Trait.achilles)) {
       target.pain(c, 20);
     }
     target.pain(
         c,
         30
             - (int)
                 Math.round(
                     (10 + Global.random(10))
                         * target.getOutfit().getExposure(ClothingSlot.bottom)));
   } else if (target.has(ClothingTrait.armored)) {
     if (getSelf().human()) {
       c.write(getSelf(), deal(c, 0, Result.weak, target));
     } else if (target.human()) {
       c.write(getSelf(), receive(c, 0, Result.weak, target));
     }
     target.pain(
         c,
         5
             - (int)
                 Math.round(
                     (2 + Global.random(3))
                         * target.getOutfit().getExposure(ClothingSlot.bottom)));
   } 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));
       if (Global.random(5) >= 1) {
         c.write(getSelf(), getSelf().bbLiner(c));
       }
     }
     if (target.has(Trait.achilles)) {
       target.pain(c, 20);
     }
     target.pain(
         c,
         20
             - (int)
                 Math.round(
                     (10 + Global.random(10))
                         * target.getOutfit().getExposure(ClothingSlot.bottom)));
   }
   target.emote(Emotion.angry, 25);
   return true;
 }