Commit b73e2915 authored by Silver Bard's avatar Silver Bard

Updated for Not Getting Involved bugfix 1

parent 011bd0f9
......@@ -89,9 +89,16 @@ public enum CommentSituation {
SELF_OILED(0, new StatusRequirement("oiled")),
OTHER_OILED(0, rev(new StatusRequirement("oiled"))),
SELF_SHAMED(0, new StatusRequirement("shamed")),
OTHER_SHAMED(0, rev(new StatusRequirement("shamed"))),
NO_COMMENT(-1);
OTHER_SHAMED(0, rev(new StatusRequirement("shamed"))),
NO_COMMENT(-1),
//Event
SELF_BUSTED(1, new LowBlowRequirement()),
OTHER_BUSTER(1, rev(new LowBlowRequirement())),
SELF_PET(0, new PetRequirement()),
OTHER_PET(0, rev(new PetRequirement()));
private final int priority;
private final Set<CustomRequirement> reqs;
......
package Comments;
import characters.Character;
import combat.Combat;
public class LowBlowRequirement implements CustomRequirement {
@Override
public boolean meets(Combat c, Character self, Character other) {
return c.getLowBlow(self);
}
}
package Comments;
import characters.Character;
import combat.Combat;
public class PetRequirement implements CustomRequirement {
@Override
public boolean meets(Combat c, Character self, Character other) {
return self.pet != null;
}
}
package Comments;
import characters.Character;
import combat.Combat;
import skills.Skill;
public class SkillRequirement implements CustomRequirement {
private Skill skill;
public SkillRequirement(Skill skill){
this.skill = skill;
}
@Override
public boolean meets(Combat c, Character self, Character other) {
return skill.getClass().isInstance(c.lastact(self));
}
}
......@@ -40,7 +40,7 @@ public class Locate extends Action {
+ " appears. It falls apart as quickly as it came to be, but you know where "
+target.name()+" currently is. Your hard-earned trophy is already burning up in those creepy "
+"purple flames, the smoke flowing from your nose straight to your crotch and setting another fire there.");
self.tempt(15);
self.spendArousal(15);
self.consume(target.getUnderwear(), 1);
return Movement.locating;
}
......
......@@ -151,6 +151,8 @@ public class Cache implements Deployable {
prizelist.put(Component.SlimeCore, 45);
prizelist.put(Component.Foxtail, 45);
prizelist.put(Component.DragonBone, 50);
prizelist.put(Clothing.ninjapants, 25);
prizelist.put(Clothing.halfcloak, 25);
}
if(rank >= 2){
prizelist.put(Consumable.Talisman, 30);
......@@ -165,6 +167,7 @@ public class Cache implements Deployable {
prizelist.put(Component.Titanium, 35);
prizelist.put(Flask.PAphrodisiac, 15);
prizelist.put(Component.Skin, 35);
prizelist.put(Clothing.gi, 25);
}
if(rank >= 1){
prizelist.put(Clothing.cup, 20);
......
This diff is collapsed.
This diff is collapsed.
......@@ -407,6 +407,9 @@ public abstract class Character extends Observable implements Cloneable{
if(Global.checkFlag(Flag.doublexp)){
scale += 1f;
}
if(has(Trait.hiddenpotential)){
scale += 0.3f;
}
xp += Math.round(i*scale);
}
public int getRank() {
......@@ -514,6 +517,9 @@ public abstract class Character extends Observable implements Cloneable{
if(has(Trait.silvercock)&& area == Anatomy.genitals){
pleasure*=0.9;
}
if(has(Trait.hardon)&&(area == Anatomy.genitals)){
pleasure*=1.3;
}
if(area == Anatomy.chest){
if(hasBreasts()){
pleasure *= 1.2;
......@@ -612,6 +618,17 @@ public abstract class Character extends Observable implements Cloneable{
mojo.set(0);
}
}
public void spendArousal(int i){
if(has(Trait.infernalexertion)){
weaken(i);
}else{
tempt(i);
}
}
public void spendStamina(int i){
weaken(i);
}
public Area location(){
return location;
}
......@@ -861,6 +878,9 @@ public abstract class Character extends Observable implements Cloneable{
break;
}
}
if(has(Trait.scandalous)){
result += 1;
}
return result;
}
public Clothing getOutfitItem(ClothingType slot){
......@@ -1124,6 +1144,8 @@ public abstract class Character extends Observable implements Cloneable{
public abstract void defeat(Combat c, Result flag);
public abstract void intervene3p(Combat c,Character target, Character assist);
public abstract void victory3p(Combat c,Character target, Character assist);
public abstract void watcher(Combat c, Character victory, Character defeated);
public abstract String watched(Combat c, Character voyeur, Character defeated);
public abstract void act(Combat c);
public abstract void move();
public abstract void draw(Combat c, Result flag);
......@@ -1149,13 +1171,16 @@ public abstract class Character extends Observable implements Cloneable{
return check(Attribute.Cunning,Global.random(20)+perception+(level/2))||(state==State.hidden);
}
public boolean spotCheck(int perception){
if(has(Trait.assassin) && Global.random(2)==0){
return false;
}
if(state==State.hidden){
int dc = perception+10;
if(has(Trait.Sneaky)){
dc-=10;
}
return check(Attribute.Cunning,dc);
}
}
else{
return true;
}
......@@ -1218,6 +1243,9 @@ public abstract class Character extends Observable implements Cloneable{
if(has(Trait.mittens)){
prof -= .75f;
}
if(has(Trait.smallhands)){
prof += .3f;
}
break;
case mouth:
if(has(Trait.oralProficiency)){
......@@ -1243,6 +1271,9 @@ public abstract class Character extends Observable implements Cloneable{
if(has(Trait.succubusvagina)){
prof += 1.5f;
}
if(has(Trait.hardon)){
prof += 1f;
}
break;
case feet:
if(has(Trait.footloose)){
......
......@@ -477,5 +477,17 @@ public class Dummy extends Character {
return sprite;
}
@Override
public void watcher(Combat c, Character victory, Character defeated) {
// TODO Auto-generated method stub
}
@Override
public String watched(Combat c, Character voyeur, Character defeated) {
// TODO Auto-generated method stub
return null;
}
}
......@@ -124,7 +124,12 @@ public class Eve implements Personality {
@Override
public String bbLiner() {
return "Eve grins at you and pats her own groin. <i>\"Better you than me, boy.\"</i>";
switch(Global.random(2)){
case 1:
return "<i>\"I never really appreciated how painful nut-shots were, until I got a pair of my own.\"</i> Eve says, carefully adjusting her balls. <i>\"It almost gives me sympathy pains. Almost.\"</i>";
default:
return "Eve grins at you and pats her own groin. <i>\"Better you than me, boy.\"</i>";
}
}
@Override
......@@ -279,7 +284,7 @@ public class Eve implements Personality {
+ "spewing out hot liquid and her pussy dripping all over you. Still holding onto you, the glowing Eve "
+ "slowly moves towards your ears.<p>"
+ "<i>\"That was...justcfucking amazing! Now, with all that out of the way, you ready for round two boy?,\"</i> "
+ "Eve asks softly, spreading her cunt invitingly.<p>"
+ "Eve asks softly, spreading her pussy invitingly.<p>"
+ "Hearing that makes you hard all over again. Moving over to her, you start to slowly insert your penis into "
+ "her once again. <i>\"I want morecNOW!,\"</i> Eve exclaims eagerly. Giving into her seductive commands, you "
+ "start to move faster, slowly increasing the speed and throttling the pressure on her insides. Feeling her "
......@@ -407,6 +412,29 @@ public class Eve implements Personality {
"Apparently you've been forgotten. Oh well. "+target.name()+"'s pussy looks pretty lonely. Looks like this will be your win.<br>";
}
}
public String watched(Combat c, Character target, Character viewer){
if (viewer.human()){
return "By the time you come upon the match, it looks like the winner has already been decided. "+target.name()+" is naked, flushed with arousal, and breathing heavily from exhaustion, while Eve has managed to keep on her tank top, and is currently taking off her shorts, giving "+target.name()+" a wicked grin. As Evefs erect cock comes into view, she says, <i>\"Do you like it? I got the deluxe package - perfect for fucking girls in the cunt and guys in the ass. My question for you is: Do you want to be my girl right now, or my guy?\"</i><p>"
+ ""+target.name()+" lets out a nervous sound as she cautiously circles Eve, making sure to keep her ass well out of reach of the horny hermaphrodite. She doesnft seem to have given up on the fight yet, which means shefs likely to lose the chance to decide how shefs going to get fucked. Thatfs her problem though. Your problem right now is deciding whether or not to jump in. "+target.name()+" hasnft noticed you, and it would be all too easy to leap in and restrain her while Eve finishes the job. Eve certainly isnft one to complain if she has to share a win, so therefs no worry there. But you have to admit, you kind of want to see how this ends up. Either way, it will be quite a fun show to watch.<p>"
+ "<i>\"Well,\"</i> Eve says, her grin widening a bit. She grips the hem of her tank top and slowly peels it up and off, revealing her large breasts to both "+target.name()+" and you. <i>\"If you arenft going to decide for mec\"</i> she says, trailing off as she reaches to her supplies and pulls out a bottle of lube, <i>\"Ifll just have to decide myself. I recommend you relax. Donft worry, Ifll make sure you enjoy it.\"</i><p>"
+ "This decision prompts "+target.name()+" into action, as she makes a desperate attempt to salvage the fight while Eve is distracted with the lube. You realize that at some point, shefd managed to fish out a zip-tie from her supplies, and she was hiding it behind her back under the guise of protecting her ass. She jets forward, reaching out to try and capture Evefs wrists within it, but with her stamina drained, her movements arenft quite fast enough.<p>"
+ "Just as "+target.name()+" is about to attach the zip-tie to Evefs wrists, Evefs hand snaps out and grabs "+target.name()+"fs wrist instead. <i>\"Oh?\"</i> Eve says, raising an eyebrow. "+target.name()+" looks up at her, and her gaze seems to be trapped by Evefs. <i>\"Is that what you wanted? You should have said so earlier. Bondage certainly is fun, isnft it?\"</i><p>"
+ ""+target.name()+" seems to be momentarily hypnotized by Eve, and she canft help but respond in the affirmative. It seems that Evefs given her a bondage fetish right now. While "+target.name()+" is still under Evefs spell, Eve pulls her wrists together and fastens the zip-tie around them. As soon as shefs restrained, a blush fills across "+target.name()+"fs cheeks. Smiling at her, Eve gently pushes her down to the ground. It seems that at this point, "+target.name()+" has completely given up, and she does as Eve wants without question.<p>"
+ "<i>\"Now,\"</i> Eve says, looking down at "+target.name()+" and bringing the lube out in front of her again. <i>\"Ifll ask you again: Do you want to be my guy, or my girl?\"</i><p>"
+ ""+target.name()+" gulps and turns away. It should be an easy decision, but she actually seems to be thinking it over. She must be too horny to think straight at this point; maybe she canft even remember what this is a reference to. She canft seem to bring herself to answer though, which is probably a bad move.<p>"
+ "<i>\"Sorry, too slow!\"</i> Eve says, a playful tone to her voice. She lets out a laugh, then reaches down to take "+target.name()+"fs chin in her hand, turning so they can make eye contact, and she says, <i>\"Itfs not so bad though, is it? Anal sex really is quite pleasurable if you just let yourself enjoy it, right?\"</i><p>"
+ "It takes a moment, but "+target.name()+" nods, smiling at Eve. With this fetish imbued, shefs more than willing to submit herself to Evefs perverted desires. Without Eve even needing to ask, "+target.name()+" turns around and gets onto her knees. She carefully leans over, trying her best to support herself with her bound hands.<p>"
+ "Eve pours out the bottle of lube onto her hand. She reaches down between "+target.name()+"fs asscheeks, slowly spreading it around and inside her asshole, before bringing it back to coat her cock with it as well. <i>\"Ready or not, here I come,\"</i> Eve says in a teasing voice as she brings her cock toward "+target.name()+"fs rear entrance. "+target.name()+" actually wiggles her ass in anticipation, and she lets out a soft moan as Eve begins to slowly push her member inside.<p>"
+ "Eve lets out a sigh as her cock is enveloped by "+target.name()+"fs asshole. Thanks to the fetish shefd just imbued, "+target.name()+" seems to be enjoying this as well. Without even waiting for Eve to begin thrusting, she starts rocking her hips back and forth, sliding her ass along the length of Evefs cock. It appears that this works just fine for Eve. She simply places a hand gently on "+target.name()+"fs back and encourages her.<p>"
+ "<i>\"Thatfs a good girl. Youfre a nice, dirty slut right now, arenft you?\"</i> Eve asks, getting a grunt of assent in response. <i>\"Donft you just love being bound up like this, your asshole being violated by a big, throbbing cock? Maybe if you tell me just how much you love it, Ifll let you cum.\"</i><p>"
+ ""+target.name()+" lets out a soft squeak of protest, but it seems Evefs fetishes have sunk too far into her brain for her to resist. Her will breaking down completely, she gives in and agrees, telling Eve just how much of a bondage and anal slut she is. This spurs Eve to take control. She reaches up to grab onto "+target.name()+"fs hair, using it as a handle as she pounds her cock into "+target.name()+"fs ass.<p>"
+ ""+target.name()+"fs mouth opens up and her eyes squeeze shut. She slowly begins to let out a scream as an orgasm tears its way through her body, prompted by nothing more than the cock pounding her ass and the perverse fetishes flooding her mind. She looks like shefs in such ecstasy that you almost feel a bit jealous of her. If you have to lose while getting fucked in the ass, thatfs the way to do it. Of course, youfd much rather win and be in Evefs position right now. Now that "+target.name()+" has cum, Eve is free to let herself orgasm as well, emptying her balls into "+target.name()+"fs asshole with a deep, contended groan.<p>"
+ "<i>\"Mmmc\"</i> Eve says. She leans down, her cock still impaled in "+target.name()+"fs ass, and she plants a kiss on the back of her neck. <i>\"Good girl. Maybe if you keep being good, next time Ifll let you do me in the ass. No promises, though. I do so like fucking a tight ass like yours, after all, and if you arenft careful, wefll end up right back in this situation again.\"</i>";
}
return "";
}
@Override
public String startBattle(Character opponent) {
if(character.getGrudge()!=null){
......@@ -452,8 +480,10 @@ public class Eve implements Personality {
public String night() {
return null;
}
public void advance(){
public void advance(int rank){
if(rank >= 3 && !character.has(Trait.hardon)){
character.add(Trait.hardon);
}
}
@Override
public NPC getCharacter() {
......@@ -519,6 +549,8 @@ public class Eve implements Personality {
comments.put(CommentSituation.SELF_HORNY, "Fuck! Wrap your ass around my cock NOW!");
comments.put(CommentSituation.OTHER_HORNY, "Don't cum before I'm satisfied or I'll make you pay!");
comments.put(CommentSituation.OTHER_SHAMED, "How pathetic. Are you going to shrivel like a shy little prick?");
comments.put(CommentSituation.SELF_BUSTED, "<i>\"Fuck, Ifll never get used to nut-shots.\"</i> Eve grumbles, as her body hunches forward in pain.");
return comments;
}
@Override
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -173,6 +173,37 @@ public class Maya implements Personality {
Character opponent=c.getOther(character);
declareGrudge(character,c);
Global.flag(Flag.Mayabeaten);
if(flag == Result.anal){
return "Maya is not an opponent to be taken lightly. Even with your cock impaled in her ass and her wrists gripped firmly "
+ "in her hands, she proves herself to be a dangerous opponent by managing to strength and flexibility to lift "
+ "her foot up. Her toes manage to find your balls, and she wastes no time before expertly massaging them, "
+ "bringing you closer and closer to orgasm. She even somehow manages to find the presence of mind to rhythmically "
+ "contract her rectal muscles, squeezing your cock in time with each of your thrusts.<p>"
+ "Sensing that the battle is moments away from being lost, you decide you have no choice but to take a gamble on "
+ "the chance that you can push her over the edge first. You release your grip on Mayafs wrists and wrap your "
+ "arms around her before she can react and make use of her sudden freedom. Your left hand reaches across her "
+ "breasts, pinching her nipple between your fingers, while your right hand reaches down toward her pussy, "
+ "seeking out her clit.<p>"
+ "Maya lets out a sudden moan as your fingers make contact with her bud. Not wasting this chance, you rub it "
+ "furiously while trying to focus your mind to resist the urge to climax too soon. You begin to fear it might "
+ "be a losing battle, and are just moments away from losing control when a sharp cry pierces through the fog of "
+ "your mind. Maya screams out in ecstasy as your fingers manage to tear an orgasm from her body. Just moments "
+ "later, you let yourself go, emptying your balls into Mayafs ass.<p>"
+ "Panting, the two of you collapse onto the ground. Before long, Mayafs pants turn into a soft chuckle. "
+ "<i>\"I canft believe you did that,\"</i> she says, shaking her head. <i>\"For a freshman to defeat me is one "
+ "thing, but to do it through anal? Youfre truly something else.\"</i><p>"
+ "Still a bit short on breath, you pull yourself back, smiling at her as it fully dawns on you that you did "
+ "indeed, somehow manage to win. That was a battle for the ages, though, and things could have easily gone the "
+ "other way if youfd been a bit less careful or lucky.<p>"
+ "<i>\"Ifm curious though,\"</i> Maya says, rolling over onto her back and then sitting up to face you. She "
+ "gives you a smile that might be just a bit playful as she asks, <i>\"Why do you choose to do it that way? "
+ "Anal, I mean. It puts you at quite a disadvantage you know. Did you just want to be able to say you fucked me "
+ "in the ass, even if you ended up losing? Or are you so much of an anal freak that you didnft think that far "
+ "ahead? Or was it actually part of your strategyc throw me off-guard and then use that to your advantage?\"</i><p>"
+ "You open your mouth for a moment as you debate answering, but Maya reaches her hand up and places a finger on "
+ "your lips.<p>"
+ "<i>\"Never mind,\"</i> she says. <i>\"I think I learned all I needed to just by looking into your eyes. You really do need to work on your poker face, but therefs still plenty of time for that. But you still did win this match, so Ifll make sure youfre properly rewarded at the end of the night. Donft let it get to your head though - I wonft let you win this easily again.\"</i>";
}
return "As you pleasure and caress Maya's body, she lets out a lovely gasp. You've finally got her on the ropes, and she knows it. Despite her experience, her body is still " +
"subject to her sexual needs. She grasps for your dick in desperation, but you manage to ward off her silk-gloved hand. " +
"Her body is rocked by a shudder of ecstasy and she lets out an orgasmic cry.<p>" +
......@@ -229,6 +260,10 @@ public class Maya implements Personality {
"going to make me do all the work? There's a lovely, naked girl in front of you who needs a good licking. Don't keep her waiting.</i><br>";
}
}
public String watched(Combat c, Character target, Character viewer){
return "(Placeholder)Maya makes short work of "+target.name()+". You don't even see what exactly finishes the poor girl off, but she's soon reduced to a quivering, moaning heap of pleasure.";
}
@Override
public String describe() {
......@@ -328,7 +363,7 @@ public class Maya implements Personality {
}
@Override
public void advance() {
public void advance(int rank) {
// TODO Auto-generated method stub
}
......@@ -404,6 +439,7 @@ public class Maya implements Personality {
@Override
public CommentGroup getComments() {
CommentGroup comments = new CommentGroup();
comments.put(CommentSituation.SELF_BUSTED, "<i>\"Good, this is so much more satisfying when you put up a struggle.\"</i> Maya says, trying her best to keep her composure, though you see her knees get a little weak and her voice sounds slightly choked-up.");
return comments;
}
@Override
......
......@@ -142,6 +142,7 @@ public class NPC extends Character {
@Override
public void victory(Combat c, Result flag) {
c.write(ai.victory(c, flag));
Character target;
target = c.getOther(this);
this.gainXP(15+lvlBonus(target));
......@@ -160,7 +161,6 @@ public class NPC extends Character {
}
dress(c);
target.defeated(this);
c.write(ai.victory(c, flag));
gainAttraction(target,1);
target.gainAttraction(this,2);
plan = rethink();
......@@ -171,8 +171,8 @@ public class NPC extends Character {
@Override
public void defeat(Combat c, Result flag) {
arousal.empty();
c.write(ai.defeat(c,flag));
arousal.empty();
plan = rethink();
}
public boolean resist3p(Combat combat, Character intruder, Character assist){
......@@ -206,6 +206,15 @@ public class NPC extends Character {
c.write(ai.victory3p(c,target,assist));
gainAttraction(target,1);
}
public void watcher(Combat c,Character victor, Character defeated){
if(has(Trait.voyeurism)){
buildMojo(50);
}
gainAttraction(victor,3);
}
public String watched(Combat c,Character voyeur, Character defeated){
return ai.watched(c, defeated, voyeur);
}
@Override
public void act(Combat c) {
HashSet<Skill> available = new HashSet<Skill>();
......@@ -417,6 +426,7 @@ public class NPC extends Character {
Global.gainSkills(this);
}
}
@Override
public void ding(){
xp-=95+(level*5);
level++;
......@@ -433,6 +443,11 @@ public class NPC extends Character {
Global.gainSkills(this);
}
@Override
public void rankup(){
this.rank++;
ai.advance(rank);
}
@Override
public void showerScene(Character target, Encounter encounter) {
if(this.has(Flask.Aphrodisiac)){
encounter.aphrodisiactrick(this, target);
......@@ -446,6 +461,9 @@ public class NPC extends Character {
}
@Override
public void intervene(Encounter enc, Character p1, Character p2) {
if(Global.random(5)==0){
enc.watch(this);
}
if(Global.random(20)+getAffection(p1) + (p1.has(Trait.sympathetic)?10:0)>=Global.random(20)+getAffection(p2)+ (p2.has(Trait.sympathetic)?10:0)){
enc.intrude(this, p1);
}
......@@ -985,7 +1003,11 @@ public class NPC extends Character {
}
if(opponent.has(Trait.pheromones)&&opponent.getArousal().percent()>=50&&!is(Stsflag.horny)&&Global.random(5)==0){
c.write("You see "+name()+" swoon slightly as she gets close to you. Seems like she's starting to feel the effects of your musk.");
add(new Horny(this,2+2*opponent.getSkimpiness(),3));
add(new Horny(this,2+2*opponent.getSkimpiness(),3),c);
}
if(opponent.has(Trait.tailmastery)&&opponent.has(Trait.tailed)&&!opponent.distracted()&&!opponent.stunned()&&pantsless()){
c.write("You tease "+name()+"'s sensitive ares with your fluffy tail.");
pleasure(Global.random(5),Anatomy.genitals,c);
}
if(has(Trait.RawSexuality)){
tempt(1);
......@@ -1028,7 +1050,7 @@ public class NPC extends Character {
if(!opponent.canAct()){
emote(Emotion.dominant,20);
}
if((getPure(Attribute.Animism)>=4&&getArousal().percent()>=50)||has(Trait.feral)){
if((getPure(Attribute.Animism)>=4&&getArousal().percent()>=50)||has(Trait.feral)||has(Trait.furaffinity) && getArousal().percent()>=25){
if(!is(Stsflag.feral)){
add(new Feral(this));
}
......
......@@ -33,6 +33,7 @@ public interface Personality extends Serializable{
public String victory3p(Combat c,Character target, Character assist);
public String intervene3p(Combat c,Character target, Character assist);
public String resist3p(Combat c,Character target, Character assist);
public String watched(Combat c, Character target, Character viewer);
public String describe();
public String draw(Combat c,Result flag);
public boolean fightFlight(Character opponent);
......@@ -41,7 +42,7 @@ public interface Personality extends Serializable{
public String startBattle(Character opponent);
public boolean fit();
public String night();
public void advance();
public void advance(int Rank);
public boolean checkMood(Emotion mood, int value);
public float moodWeight(Emotion mood);
public String image();
......
......@@ -133,6 +133,7 @@ public class Player extends Character {
public void victory(Combat c, Result flag) {
Character target;
target = c.getOther(this);
target.defeat(c,flag);
this.gainXP(15+lvlBonus(target));
target.gainXP(15+target.lvlBonus(this));
if(c.stance.penetration(this)){
......@@ -152,7 +153,6 @@ public class Player extends Character {
}
dress(c);
target.defeated(this);
c.getOther(this).defeat(c,flag);
gainAttraction(target,1);
target.gainAttraction(this,2);
if(has(Trait.insatiable)){
......@@ -235,10 +235,6 @@ public class Player extends Character {
@Override
public void draw(Combat c, Result flag) {
arousal.empty();
if(c.stance.penetration(this)){
c.p1.getMojo().gain(3);
c.p2.getMojo().gain(3);
}
if(c.p1.human()){
c.p2.draw(c,flag);
}
......@@ -570,6 +566,16 @@ public class Player extends Character {
gainAttraction(target,1);
target.gainAttraction(this,1);
}
public void watcher(Combat c,Character victor, Character defeated){
if(has(Trait.voyeurism)){
buildMojo(50);
}
Global.gui().clearText();
Global.gui().message(victor.watched(c, this, defeated));
}
public String watched(Combat c,Character voyeur, Character defeated){
return "";
}
public void gain(Item item) {
gui.message("<b>You've gained "+item.pre()+item.getName()+"</b>");
inventory.add(item);
......@@ -753,17 +759,21 @@ public class Player extends Character {
}
if(opponent.has(Trait.pheromones)&&opponent.getArousal().percent()>=50&&!is(Stsflag.horny)&&Global.random(5)==0){
c.write("Whenever you're near "+opponent.name()+", you feel your body heat up. Something in her scent is making you extremely horny.");
add(new Horny(this,2+2*opponent.getSkimpiness(),3));
add(new Horny(this,2+2*opponent.getSkimpiness(),3),c);
}
if(opponent.has(Trait.tailmastery)&&opponent.has(Trait.tailed)&&!opponent.distracted()&&!opponent.stunned()&&pantsless()){
c.write(opponent.name()+" opportunistically teases you with her soft tail.");
pleasure(Global.random(5),Anatomy.genitals,c);
}
if(has(Trait.RawSexuality)){
tempt(1);
opponent.tempt(1);
}
if(getPure(Attribute.Animism)>=4&&getArousal().percent()>=50){
if((getPure(Attribute.Animism)>=4&&getArousal().percent()>=50)||has(Trait.feral)||has(Trait.furaffinity) && getArousal().percent()>=25){
if(!is(Stsflag.feral)){
add(new Feral(this));
}
}
}
}
@Override
......
This diff is collapsed.
......@@ -127,7 +127,13 @@ public class Samantha implements Personality {
@Override
public String bbLiner() {
return "<i>\"Oh, a bit of a masochist, are we? That's alright, I cater to all tastes!\"</i>";
switch(Global.random(2)){
case 1:
return "Samantha looks frustrated. "
+ "<i>\"Seems like common sense to wear a cup to a competition like this, but for some reason you boys never do. Frankly, it makes the games a little too easy.\"</i>";
default:
return "<i>\"Oh, a bit of a masochist, are we? That's alright, I cater to all tastes!\"</i>";
}
}
@Override
......@@ -321,6 +327,36 @@ public class Samantha implements Personality {
}
}
public String watched(Combat c, Character target, Character viewer){
return "Your first thought is that you stumbled onto some young couple who wandered into the middle of the Games somehow. All the doors were unlocked, so they decided to find a private corner.<p>"
+ "But no. It takes you a second, but that's Samantha. She has "+target.name()+" up against the wall. "+target.name()+" isn't pinned or bound, although Samantha's got her handcuffs dangling loosely from one hand. They're just... talking, maybe.<p>"
+ "Samantha's lips are right up against "+target.name()+"'s ear. She murmurs something, and whatever it is, it hits "+target.name()+" with almost physical force. She flushes red, and tries to push past Samantha, but there's no strength behind it and Samantha doesn't budge.<p>"
+ "<i>\"Oh, I'd make you scream,\"</i> Samantha says to "+target.name()+", just loud enough that you can make the words out. For a second, you think she's performing for your benefit, but if she is, there's no other sign.<p>"
+ "<i>\"But first,\"</i> Samantha says, <i>\"I'd make you beg.\"</i><p>"
+ "She runs the back of her free hand down "+target.name()+"'s cheek, feather-light.<p>"
+ "<i>\"You may think you're experienced, since you're here,\"</i> she murmurs, <i>\"but you have no real idea what experience is. I'd show you. I'd teach you things that had to be taught to me.\"</i><p>"
+ ""+target.name()+"'s got a weird look on her face. I really ought to be fighting back right about now, it says, but let's see where Samantha's going with this.<p>"
+ "<i>\"I know more about you than you think,\"</i> Samantha says, and winds a lock of "+target.name()+"'s hair around two fingers. <i>\"I know what you like... and what you want... and what you don't want to admit you love.\"</i><p>"
+ ""+target.name()+"'s knees have developed a significant shudder.<p>"
+ "<i>\"But there's no shame in anything. You just have to let go. Put yourself in my hands, and you'll find out things you'd never dreamed. I'll take you to bed, just you and me, no toys or tricks or gimmicks, and you'll be a different woman in the morning. Would you like that?\"</i><p>"
+ ""+target.name()+"'s mouth barely moves.<p>"
+ "<i>\"Say it louder.\"</i><p>"
+ "<i>\"Yes,\"</i> "+target.name()+" says, blurting it out, louder than she'd meant to.<p>"
+ "<i>\"Good,\"</i> Samantha says, and kisses her as a reward, just once. <i>\"I was like you, once. I thought I knew it all because I'd had a handful of lovers. I had to be convinced otherwise, very... thoroughly.\"</i><p>"
+ "<i>\"So much of this is in the mind,\"</i> she says. Samantha caresses "+target.name()+"'s cheek. <i>\"Almost all of it, despite the Games. I don't need to kiss you,\"</i> another gentle brush of her lips against "+target.name()+"'s, <i>\"lick you, strip you down. We don't need to be naked together, although I know you like that. I don't need to suck your nipples, go down on you, write your name in cursive on your clit with my tongue. I don't have to be inside you at all, fingers or tongue or even my fist. I just need a few of the right words, at the right time, and you'll... come.\"</i><p>"
+ ""+target.name()+"'s eyes roll up in her head, and for a second, she visibly forgets how to breathe. She reaches back, convulsively, to keep herself from falling over, and only manages to slide down the wall into a seated position.<p>"
+ "Samantha takes a step back and folds her arms, smiling.<p>"
+ "<i>\"I... lost?\"</i> "+target.name()+" says.<p>"
+ "<i>\"Yes.\"</i><p>"
+ "<i>\"You didn't...\"</i><p>"
+ "<i>\"No,\"</i> Samantha says.<p>"
+ ""+target.name()+" takes a second to catch her breath, then slowly begins to undress, handing her clothes to Samantha as she removes them. Samantha wraps them up in a neat bundle under her arm.<p>"
+ "<i>\"How did you...?\"</i> "+target.name()+" asks.<p>"
+ "<i>\"Do you want me to teach you?\"</i> Samantha asks. <i>\"It won't be free.\"</i><p>"
+ "<i>\"...maybe. I...\"</i> "+target.name()+" shakes her head.<p"
+ "<i>\"Let me know,\"</i> Samantha says, and walks away.";
}
@Override
public String resist3p(Combat c, Character target, Character assist) {
// TODO Auto-generated method stub
......@@ -443,9 +479,10 @@ public class Samantha implements Personality {
}
@Override
public void advance() {
// TODO Auto-generated method stub
public void advance(int rank) {
if(rank >= 3 && !character.has(Trait.sexuallyflexible)){
character.add(Trait.sexuallyflexible);
}
}
@Override
......@@ -494,6 +531,7 @@ public class Samantha implements Personality {
@Override
public CommentGroup getComments() {
CommentGroup comments = new CommentGroup();
comments.put(CommentSituation.SELF_BUSTED,"<i>\"That last hit was below the belt.\"</i> Samantha says through her clenched teeth. <i>\"Ifll make sure to return the favor.\"<i>");
return comments;
}
@Override
......
......@@ -8,26 +8,47 @@ public enum Trait {
tailed("Tailed","Have a prehensile tail"),
//Perks
//Cassie
silvertongue("Silvertongue","Terrific tongue talent"), //Cassie Sex perk, increases pleasure from oral attacks
judonovice("Judo Novice","Basic understanding of judo"), //Cassie Sparring perk, Hip Throw
misdirection("Misdirection","They look left, you go right"), //Cassie Gaming perk, Diversion
hiddenpotential("Hidden Potential","Secret potential for rapid growth"),
//Mara
ticklemonster("Tickle Monster","Skilled at tickling in unconventional areas"), //Mara Sex perk, increases pleasure from tickling if target is nude
heeldrop("Heeldrop","A wrestling move feared by men and women alike"), //Mara Sparring perk, increases damage from stomp
spider("Spider","Elaborate rope traps come naturally"), //Mara Gaming perk, Spiderweb
faefriend("Fae Friend","Less effort to summon Faeries"),
smallhands("Small Hands","More pleasure from hands"),
//Angel
greatkiss("Great Kisser","Can charm with a single kiss"), //Angel Sex perk, kiss has chance to inflict Charm
disciplinarian("Disciplinarian","Frighteningly skilled at spanking"), //Angel Sparring perk, spank has a chance to inflict Shame
pokerface("Poker Face","Bluff like a champion"), //Angel Gaming perk, Bluff
silvertongue("Silvertongue","Terrific tongue talent"), //Cassie Sex perk, increases pleasure from oral attacks
judonovice("Judo Novice","Basic understanding of judo"), //Cassie Sparring perk, Hip Throw
misdirection("Misdirection","They look left, you go right"), //Cassie Gaming perk, Diversion
scandalous("Scandalous Outfit","Always seems more naked than she is"),
//Jewel
dirtyfighter("Dirty Fighter","Down, but not out"), //Jewel Sparring perk, kick can be used from prone
spiral("Spiral","Who the hell do you think I am?"), //Jewel Sex perk, Spiral Thrust
fearless("Fearless","Leeroy Jenkins"), //Jewel Gaming perk, Bravado
roughhandling("Rough Handling","Does some stamina damage with handjobs or fingering"),
reflexes("Lightning Reflexes","Immune to Maneuver, Tackle, and Slight of Hand"),
//Yui
assassin("Assassin","Can ambush opponents even while moving"),
//Kat
affectionate("Affectionate","Increased affection gain from draws"), //Kat Sex perk
aikidoNovice("Aikido Novice","Improved counterattack rate"), //Kat Sparring perk
tailmastery("Tail Mastery","Tail attacks independently"),
furaffinity("Fur Affinity","Channels animal spirit at lower arousal"),
//Reyka
clairvoyance("Clairvoyance",""), //Reyka Sparring perk evasion bonus
locator("Locator","Like a bloodhound"), //Reyka Gaming perk out of combat action
desensitized("Desensitized","Sex is old hat now"), //Reyka Sex perk slight pleasure reduction
infernalexertion("Infernal Exertion","Use stamina instead of Arousal to fuel Dark skills"),
royalguard("Royal Guard","Summon stronger Imps"),
//Eve
shameless("Shameless","Impossible to embarrass"), //Eve
RawSexuality("Raw Sexuality","constant lust boost for you and your opponent in battle"), //Eve
affectionate("Affectionate","Increased affection gain from draws"), //Kat Sex perk
aikidoNovice("Aikido Novice","Improved counterattack rate"), //Kat Sparring perk
faefriend("Fae Friend","Less effort to summon Faeries"),
hardon("Walking Hard-on", "More genital pleasure dealt and taken"),
//Samantha
sexuallyflexible("Sexually Flexible","Momentum bonuses are interchangeable"),
bronzecock("Bronze Cock","Started your journey on The Way"),
silvercock("Silver Cock","Advanced practitioner of The Way"),
......@@ -99,6 +120,8 @@ public enum Trait {
expertGoogler("Expert Googler","More efficient at finding porn",8),
responsive("Responsive","Returns more pleasure when being fucked"),
assmaster("Ass Master","Who needs lube?"),
tieGuy("Tie Guy","Use two Zipties at once for stronger binds."),
voyeurism("Voyeurism","Fill Mojo by watching a fight."),
coordinatedStrikes("Coordinated Strikes", "Summoned pets are even more powerful, based on Cunning",tactician,20),
evasiveManuevers("Evasive Maneuvers", "Summoned pets have even better evasion, based on Cunning",tactician,20),
......
This diff is collapsed.
......@@ -42,6 +42,7 @@ public class Combat extends Observable implements Serializable, Cloneable{
public int phase;
private HashMap<Character,Skill> actions;
private HashMap<Character,Boolean> lowblow;