@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; }
private boolean resolveSkill(Skill skill, Character target) { boolean orgasmed = false; if (Skill.skillIsUsable(this, skill, target)) { write(skill.user().subjectAction("use ", "uses ") + skill.getLabel(this) + "."); if (skill.makesContact() && !getStance().dom(target) && target.canAct() && checkCounter(skill.user(), target, skill)) { write("Countered!"); target.counterattack(skill.user(), skill.type(this), this); } else if (target.is(Stsflag.counter) && skill.makesContact()) { write("Countered!"); CounterStatus s = (CounterStatus) target.getStatus(Stsflag.counter); if (skill.user().is(Stsflag.wary)) { write(target, s.getCounterSkill().getBlockedString(this, skill.user())); } else { s.resolveSkill(this, skill.user()); } } else { Skill.resolve(skill, this, target); } checkStamina(target); checkStamina(skill.user()); orgasmed = checkOrgasm(skill.user(), target, skill); } else { write(skill.user().possessivePronoun() + " " + skill.getLabel(this) + " failed."); } return orgasmed; }
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()); }