public void checkStamina(Character p) { if (p.getStamina().isEmpty() && !p.is(Stsflag.stunned)) { p.add(this, new Winded(p)); if (!getStance().prone(p)) { Character other; if (p == p1) { other = p2; } else { other = p1; } if (getStance().inserted() && getStance().dom(other)) { if (p.human()) { write("Your legs give out, but " + other.name() + " holds you up."); } else { write( p.name() + " slumps in your arms, but you support her to keep her from collapsing."); } } else { setStance(new StandingOver(other, p)); if (p.human()) { write("You don't have the strength to stay on your feet. You slump to the floor."); } else { write(p.name() + " drops to the floor, exhausted."); } } p.loseWillpower(this, Math.min(p.getWillpower().max() / 8, 15), true); } } }
@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; }