@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; }
@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); }
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()); }
@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)); }
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; }
@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; }