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