示例#1
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;
 }
示例#2
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();
 }
示例#3
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;
  }
示例#4
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;
 }
示例#5
0
  @Override
  public double applyBonuses(
      Character self, Character opponent, BodyPart target, double damage, Combat c) {
    double bonus = 0;
    if (self.has(Trait.oiledass) && c.getStance().anallyPenetratedBy(c, self, opponent)) {
      c.write(
          self,
          Global.format(
              "{self:NAME-POSSESSIVE} naturally oiled asshole swallows {other:name-possessive} c**k with ease.",
              self,
              opponent));
      bonus += 5;
    }

    if ((self.has(Trait.tight) || self.has(Trait.holecontrol))
        && c.getStance().anallyPenetrated(c, self)) {
      String desc = "";
      if (self.has(Trait.tight)) {
        desc += "powerful ";
      }
      if (self.has(Trait.holecontrol)) {
        desc += "well-trained ";
      }
      c.write(
          self,
          Global.format(
              "{self:SUBJECT-ACTION:use|uses} {self:possessive} "
                  + desc
                  + "sphincter muscles to milk {other:name-possessive} c**k, adding to the pleasure.",
              self,
              opponent));
      bonus += self.has(Trait.tight) && self.has(Trait.holecontrol) ? 10 : 5;
      if (self.has(Trait.tight)) {
        opponent.pain(c, self, Math.min(30, self.get(Attribute.Power)));
      }
    }
    if (self.has(Trait.drainingass)
        && !opponent.has(Trait.strapped)
        && c.getStance().anallyPenetratedBy(c, self, opponent)) {
      if (Global.random(3) == 0) {
        c.write(
            self,
            Global.format(
                "{self:name-possessive} ass seems to <i>inhale</i>, drawing"
                    + " great gouts of {other:name-possessive} strength from {other:possessive}"
                    + " body.",
                self,
                opponent));
        opponent.drain(c, self, self.getLevel());
        opponent.add(c, new Abuff(opponent, Attribute.Power, -3, 10));
        self.add(c, new Abuff(self, Attribute.Power, 3, 10));
      } else {
        c.write(
            self,
            Global.format(
                "The feel of {self:name-possessive} ass around"
                    + " {other:name-possessive} {other:body-part:c**k} drains"
                    + " {other:direct-object} of {other:possessive} energy.",
                self,
                opponent));
        opponent.drain(c, self, self.getLevel() / 2);
      }
    }
    return bonus;
  }