Пример #1
0
  @Override
  public boolean resolve(Combat c, Character target) {
    double m = Global.random(6, 13);
    if (getSelf().has(Trait.disciplinarian)) {
      boolean shamed =
          Global.random(10) >= 5 || !target.is(Stsflag.shamed) && getSelf().canSpend(5);
      if (shamed) {
        getSelf().spendMojo(c, 5);
      }
      writeOutput(c, Result.special, target);
      if (shamed) {
        target.add(c, new Shamed(target));
        target.emote(Emotion.angry, 10);
        target.emote(Emotion.nervous, 15);
      }
      if (target.has(Trait.achilles)) {
        m += 10;
      } else {
        m += 5;
      }
    } else {
      writeOutput(c, Result.normal, target);
    }
    target.pain(c, (int) getSelf().modifyDamage(DamageType.physical, target, m));

    target.emote(Emotion.angry, 25);
    target.emote(Emotion.nervous, 15);
    target.loseMojo(c, 10);
    return true;
  }
Пример #2
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;
 }
Пример #3
0
 public void go() {
   phase = 0;
   if (p1.mostlyNude() && !p2.mostlyNude()) {
     p1.emote(Emotion.nervous, 20);
   }
   if (p2.mostlyNude() && !p1.mostlyNude()) {
     p2.emote(Emotion.nervous, 20);
   }
   if (!(p1.human() || p2.human())) {
     automate();
   }
   updateMessage();
 }
Пример #4
0
 public Combat(Character p1, Character p2, Area loc, int code) {
   this(p1, p2, loc);
   stance = new Neutral(p1, p2);
   message = "";
   timer = 0;
   switch (code) {
     case 1:
       p2.undress(this);
       p1.emote(Emotion.dominant, 50);
       p2.emote(Emotion.nervous, 50);
     default:
   }
   p1.state = State.combat;
   p2.state = State.combat;
 }
Пример #5
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;
 }
Пример #6
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;
 }
Пример #7
0
 @Override
 public boolean resolve(Combat c, Character target) {
   if (target.roll(getSelf(), c, accuracy(c, target))) {
     int strength = Math.min(20, 10 + getSelf().get(Attribute.Dark) / 4);
     boolean vaginal = c.getStance().anallyPenetrated(c, c.getOpponent(getSelf()));
     boolean shamed = false;
     if (!vaginal && Global.random(4) == 2) {
       target.add(c, new Shamed(target));
       shamed = true;
     }
     if (target.human()) {
       if (vaginal) {
         c.write(getSelf(), receive(c, 0, Result.intercourse, target));
       } else if (c.getStance().inserted(target)) {
         c.write(getSelf(), receive(c, 0, Result.special, target));
       } else if (c.getStance().dom(target)) {
         c.write(getSelf(), receive(c, 0, Result.critical, target));
       } else if (c.getStance().behind(getSelf())) {
         c.write(getSelf(), receive(c, 0, Result.strong, target));
       } else {
         c.write(getSelf(), receive(c, 0, Result.normal, target));
       }
       if (shamed) {
         c.write(
             getSelf(),
             "The shame of having your ass violated by "
                 + getSelf().name()
                 + " has destroyed your confidence.");
       }
     } else if (getSelf().human()) {
       if (vaginal) {
         c.write(getSelf(), deal(c, 0, Result.intercourse, target));
       }
       if (c.getStance().inserted(target)) {
         c.write(getSelf(), deal(c, 0, Result.special, target));
       } else if (c.getStance().dom(target)) {
         c.write(getSelf(), deal(c, 0, Result.critical, target));
       } else if (c.getStance().behind(getSelf())) {
         c.write(getSelf(), deal(c, 0, Result.strong, target));
       } else {
         c.write(getSelf(), deal(c, 0, Result.normal, target));
       }
       if (shamed) {
         c.write(
             getSelf(),
             "The shame of having her ass violated by you has destroyed "
                 + target.getName()
                 + "'s confidence.");
       }
     }
     if (c.getStance().havingSex(c)) {
       if (vaginal) {
         target.body.pleasure(
             getSelf(),
             getSelf().body.getRandom("tail"),
             target.body.getRandom("pussy"),
             strength,
             c,
             this);
         target.add(c, new TailFucked(target, getSelf(), "pussy"));
       } else {
         target.body.pleasure(
             getSelf(),
             getSelf().body.getRandom("tail"),
             target.body.getRandom("ass"),
             strength,
             c,
             this);
         target.add(c, new TailFucked(target, getSelf(), "ass"));
       }
     }
     target.pain(
         c, getSelf(), (int) getSelf().modifyDamage(DamageType.physical, target, strength / 2));
     target.emote(Emotion.nervous, 10);
     target.emote(Emotion.desperate, 10);
     getSelf().emote(Emotion.confident, 15);
     getSelf().emote(Emotion.dominant, 25);
     if (Global.random(100) < 5 + 2 * getSelf().get(Attribute.Fetish)) {
       target.add(c, new BodyFetish(target, getSelf(), "tail", .25));
     }
   } else {
     if (target.human()) {
       c.write(getSelf(), receive(c, 0, Result.miss, target));
     } else {
       c.write(getSelf(), deal(c, 0, Result.miss, target));
     }
     return false;
   }
   return true;
 }
Пример #8
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;
 }