123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760 |
- const SexFlags = Enum([
- "gotPiV",
- "gavePiV",
- "gaveOral",
- "gotOral",
- "gotAnal",
- "gaveAnal",
- "gotFucked",//"generic" fucking that changes depending on participant genders
- "didFuck", //will also set the relevant flags between sex and reflection steps.
- "gaveHandjob",
- "gotHandjob",
- "onTop",
- "onBottom",
- "isSub",
- "isDom",
- "gotForced",
- "didForce",
- "isMan",
- "isWoman",
- "isFuta",
- "didSuckCock",
- "gotCockSucked",
- "didLickPussy",
- "gotPussyLicked",
- "isPregnant",
- ]);
- const SexEncounterFlags = Enum([
- "iDom",
- "rDom",
- "mf",
- "mm",
- "ff",
- "futa",
- "iHot",
- "iUg",
- "refused",//successfully refused to fuck
- "force",//encounter was forced (generally by leader). Maybe
- "wrongO",//target has wrong orientation for initiator
- "lp",//leader/player interaction
- "reversal",//submissiveness stat is different from leader/follower dynamic
- "mDom",//male dominant
- "fDom",//female dominant
- "fSub",
- "mSub",
- "fRec",//female recipient
- "mRec",
- "mInit",//initiator is male
- "fInit",
- ]);
- var sexActs;
- var sexReactions;
- {
- /*Encounter Flags*/
- const iDom = SexEncounterFlags.iDom;
- const rDom = SexEncounterFlags.rDom;
- const mf = SexEncounterFlags.mf;
- const mm = SexEncounterFlags.mm;
- const ff = SexEncounterFlags.ff;
- const futa = SexEncounterFlags.futa;
- const iHot = SexEncounterFlags.iHot;
- const iUg = SexEncounterFlags.iUg;
- const refused = SexEncounterFlags.refused;//successfully refused to fuck
- const force = SexEncounterFlags.force;//encounter was forced (generally by leader). Maybe
- const wrongO = SexEncounterFlags.wrongO;//target has wrong orientation for initiator
- const lp = SexEncounterFlags.lp;//leader/player interaction
- const reversal = SexEncounterFlags.reversal;//submissiveness stat is different from leader/follower dynamic
- const mDom = SexEncounterFlags.mDom;//male dominant
- const fDom = SexEncounterFlags.fDom;//female dominant
- const fSub = SexEncounterFlags.fSub;
- const mSub = SexEncounterFlags.mSub;
- const fRec = SexEncounterFlags.fRec;//female recipient
- const mRec = SexEncounterFlags.mRec;
- const mInit = SexEncounterFlags.mInit;//initiator is male
- const fInit = SexEncounterFlags.fInit;
- /*Character Flags*/
- const gotPiV = SexFlags.gotPiV;
- const gavePiV = SexFlags.gavePiV;
- const gaveOral=SexFlags.gaveOral;
- const gotOral =SexFlags.gotOral;
- const gotAnal =SexFlags.gotAnal;
- const gaveAnal =SexFlags.gaveAnal;
- const gotFucked=SexFlags.gotFucked;//"generic" fucking that changes depending on participant genders
- const didFuck=SexFlags.didFuck; //will also set the relevant flags between sex and reflection steps.
- const gaveHandjob=SexFlags.gaveHandjob;
- const gotHandjob=SexFlags.gotHandjob;
- const onTop=SexFlags.onTop;
- const onBottom=SexFlags.onBottom;
- const isSub=SexFlags.isSub;
- const isDom=SexFlags.isDom;
- const gotForced=SexFlags.gotForced;
- const didForce=SexFlags.didForce;
- const isMan = SexFlags.isMan;
- const isWoman = SexFlags.isWoman;
- const isFuta = SexFlags.isFuta;
- const didSuckCock =SexFlags.didSuckCock;
- const gotCockSucked = SexFlags.gotCockSucked;
- const didLickPussy = SexFlags.didLickPussy;
- const gotPussyLicked=SexFlags.gotPussyLicked;
- const isPregnant = SexFlags.isPregnant;
- sexActs = [//note:refuseFuck will be added to notags by default if refused is not a tag. Just easier that way
- {
- minD:50,
- tags:rDom|refused,
- activity:"{{initiator.YouHeShe}} back down when {{target.youheshe}} refuse",
- dys:5,
- },
- {
- notags:rDom,
- tags:refused|force,
- activity:"{{target.YouHeShe}} run away instead.",
- dys:5,
- },
- {
- tags:mf|fDom,
- activity:"{{dominant.YouHeShe}} push {{submissive.youName}} down and ride cock hard. {{dominant.YouHeShe}} scream like shebeast as {{dominant.youheshe}} come.",
- set_dominant:onTop|gotFucked,
- set_submissive:onBottom|didFuck,
- },
- {
- notags:force,
- tags:fInit,
- activity:"{{initiator.YouHeShe}} come to {{recipient.youName}} and spread legs. {{initiator.YouHeShe}} fuck like beast.",
- set_initiator:gotFucked,
- set_recipient:didFuck,
-
- },
- {
- tags:mf,
- notags:fSub,
- activity:"{{woman.YouName}} overwhelmed from lust. {{woman.YouHeShe}} spread legs for {{man.youhimher}} and get fucked.",
- set_woman:gotFucked,
- set_man:didFuck,
- },
- {
- tags:lp|reversal|mf,
- minD:40,
- activity:"{{follower.YouName}} tell {{leader.youName}} to get on ground so {{follower.youheshe}} can fuck on top. {{leader.YouName}} argue, saying {{leader.youheshe}} clan leader, but {{leader.youheshe}} timid and soon back down. Soon {{follower.youheshe}} fucking {{leader.youhimher}} from on top until {{leader.youheshe}} scream in climax.",
- dys:10,
- set_woman:gotFucked,
- set_follower:onTop,
- set_leader:didFuck,
- set_man:onBottom,
- },
- {
- notags:wrongO,
- tags:lp,
- activity:"{{leader.YouName}} tell {{follower.youhimher}} to lie on ground and spread legs. {{leader.YouHeShe}} want taste {{follower.yourhisher}} {{follower.manwoman}} parts. {{follower.YouName}} do as told and lie down while {{leader.youName}} lick and suck. It feel strange for {{follower.youName}} to have {{leader.yourNames}} mouth on privates, but soon {{follower.youheshe}} scream in pleasure.",
- set_leader:gaveOral,
- set_follower:gotOral,
- },
- {
- tags:reversal|mDom|lp|force,
- minD:40,
- minD:120,
- activity:"{{follower.YouName}} agree, but only if {{follower.youheshe}} on top. {{leader.YouName}} unsure at first, but back down and agree. {{follower.YouName}} ride up and down on {{leader.yourNames}} cock, surprised that it feel so good",
- dys:-4,
- leader:isMan,
- follower:isWoman,
- set_leader:didFuck|onBottom,
- set_follower:gotFucked|onTop,
-
- },
- {
- notags:rDom,
- tags:ff,
- activity:"{{initiator.YouName}} pull {{recipient.youName}} quietly behind tent. {{initiator.youheshe}} put hand on {{recipient.yourhisher}} thigh and gently slide up under clothes. Giving sly grin, {{initiator.youheshe}} slip fingers into {{recipient.yourNames}} wet pussy and begin rubbing. When {{recipient.youName}} start to make noise, {{initiator.youName}} silence with hard kiss until {{recipient.heshe}} scream climax into mouth.",
- set_initiator:gaveHandjob,
- set_recipient:gotHandjob,
- },
- {
- notags:fDom,
- tags:mDom,
- maxD:120,
- activity:"{{dominant.YouHeShe}} say for {{submissive.youName}} to get on ground, and {{submissive.youheshe}} {{eagerness}} obey. {{dominant.YouHeShe}} mount {{submissive.youhimher}} from behind and fuck {{submissive.yourhisher}} {{submissive.fuckhole}}.",
- dys:-5,
- set_dominant:didFuck|onTop,
- set_submissive:gotFucked|onBottom,
- },
- {
- notags:iDom,
- tags:mm,
- activity:"{{initiator.YouHeShe}} come to {{recipient.youName}} at night and in need. {{recipient.youName}} push {{initiator.himher}} on stomach and fuck manhole like pussy, releasing {{leader.yourhisher}} seed in it.",
- set_initiator:gotAnal|onBottom,
- set_recipient:gaveAnal|onTop,
- },
- {
- tags:mDom,
- activity:"{{dominant.YouHeShe}} throw {{submissive.youName}} to dirt and mount {{submissive.yourhisher}} {{submissive.fuckhole}}. {{dominant.YouHeShe}} fuck {{submissive.youName}} hard, making {{submissive.youName}} cry like shebeast in heat until {{submissive.youheshe}} cum. Soon {{dominant.YourHisHer}} seed erupt inside {{submissive.youhimher}}.",
- set_dominant:didFuck|onTop,
- set_submissive:gotFucked|onBottom,
- },
- {
- tags:fRec,
- maxD:40,
- activity:"{{initiator.YouName}} make {{recipient.youhimher}} scream with tongue and finger. Then {{initiator.youheshe}} lick {{recipient.youName}} like shecat till {{recipient.youName}} scream like beast.",
- set_initiator:gaveOral|gaveHandjob,
- set_recipient:gotOral|gotHandjob
-
- },
- {
- activity:"{{first.YouName}} fuck {{second.youName}} all night long.",//Got to have some baseline default.,
- set_first:didFuck|gotFucked,
- set_second:gotFucked|didFuck,
- },
- {
- notags:ff|reversal,
- tags:mDom,
- activity:"{{dominant.YouName}} motion to ground and command {{submissive.youhimher}} to get on knees. Because {{dominant.youheshe}} so dominant, {{submissive.youheshe}} quickly do what {{dominant.youheshe}} say. {{dominant.YouName}} take out man parts and motion for {{submissive.youhimher}} to suck, and soon {{submissive.youheshe}} take cock in mouth until {{dominant.youName}} baby juice fill mouth.",
- set_dominant:gotOral,
- set_submissive:gaveOral,
- },
- {
- notags:fDom,
- tags:mf,
- activity:"{{man.YouHeShe}} pull {{woman.youName}} to furs and push {{woman.yourhisher}} legs apart. Soon {{man.youheshe}} enter {{woman.youhimher}} and begin to fuck {{woman.yourhisher}} pussy.",
- set_man:didFuck|onTop,
- set_woman:gotFucked|onBottom,
- }
- ];
- /*
- * REACTIONS
- */
- sexReactions=[
- {
- tags:mf,
- activity:"Being on top make {{reactor.youName}} feel big and powerful, it only when {{other.yourhisher}} seed dribble down leg that {{reactor.youheshe}} realize {{reactor.youheshe}} still fucked as woman.",
- reactor:gotFucked|onTop|isSub,
- dys:3,
- },
- {
- notags:refused,
- minD:120,
- activity:"{{reactor.YourHisHer}} body betray {{reactor.youhimher}} by responding to {{other.yourhisher}} touch, making {{reactor.youhimher}} squirm and moan with pleasure.",
- reactor:gotFucked|isSub
- },
- {
- minD:80,
- activity:"{{reactor.YouHeShe}} still feel strange having this body and being fucked like womanfolk, but maybe {{reactor.youheshe}} start to like if it always feel this good.",
- reactor:isWoman|gotFucked,
- },
- {
- tags:lp,
- minD:120,
- activity:"{{reactor.YourHisHer}} body betray {{reactor.youhimher}} by responding to {{other.yourhisher}} touch, making you squirm and moan with pleasure as {{leader.heshe}} fuck you over and over until you filled with his seed",
- reactor:isSub|gotForced,
- dys:-5,
- },
- {
- activity:"{{reactor.YouName}} smile to self afterwards. {{other.name}} good with mouth.",
- reactor:gotOral,
- },
- {
- tags:lp,
- minD:140,
- activity:"It make {{reactor.youhimher}} feel very ashamed. {{reactor.YouHeShe}} not supposed to be like woman. Why this feel so good?",
- reactor:gotFucked|isSub,
- },
- {
- minD:90,
- activity:"{{reactor.YouName}} unhappily spit out fluids afterwards, and mutter to self. Can still taste {{other.yourNames}} {{other.manwoman}} parts in mouth for hours after.",
- reactor:gaveOral|gotForced
- },
- {
- minD:35,
- maxD:120,
- activity:"{{reactor.YouHeShe}} still {{reactor.hashave}} lingering taste of {{other.yourNames}} {{other.manwoman}} parts for hours after, but {{reactor.youName}} find that {{reactor.youheshe}} actually like it some.",
- reactor:gaveOral,
- },
- {
- maxD:45,
- activity:"{{reactor.YouHeShe}} coo happily to self afterwards. It feel good to be fucked by {{other.youName}}.",
- reactor:gotFucked|isSub
- },
- {
- maxD:35,
- activity:"{{reactor.YouName}} smile and thank {{other.youName}} for letting {{reactor.youhimher}} lick {{other.yourhisher}} {{other.genitals}}.",
- reactor:gaveOral,
- not_reactor:isDom,
- },
- {
- tags:lp,
- maxD:150,
- minD:20,
- activity:"It not feel right to get fucked like woman, but it also feel very good to obey strong leader commands.",
- reactor:gotFucked|isSub
- },
- {
- maxD:130,
- activity:"{{other.YourHisHer}} {{other.genitals}} taste good.",
- reactor:gaveOral
- },
- {
- tags:lp|force,
- minD:60,
- maxD:200,
- activity:"You still not happy to be used, but submitting to {{leader.name}} feel good.",
- reactor:gotFucked|isSub,
- },
- {
- minD:76,
- activity:"{{reactor.YouHeShe}} feel ashamed, but also maybe bit turned on too.",
- reactor:gotForced,
- },
- {
- activity:"{{reactor.YouHeShe}} pat {{other.youName}} on head and tell {{other.youhimher}} {{other.youheshe}} did good job.",
- not_reactor:isSub,
- reactor:gotOral,
- },
- {
- maxD:50,
- activity:"{{reactor.YouName}} smile and pat belly. {{reactor.YouHeShe}} happy to be bred by {{other.youName}}.",
- reactor:gotPiV,
- not_reactor:isPregnant
- },
- {
- maxD:50,
- activity:"It felt very good. {{reactor.YouHeShe}} cannot wait to do again.",
- },
- {
- tags:force,
- minD:20,
- maxD:140,
- activity:"Maybe it not so bad to be womanfolk.",
- reactor:gotFucked|isSub,
- }
- ];
- let setNotag = (x)=>(x.tags&refused==0)?x.notags|=refused:x;
- sexReactions.forEach(setNotag);
- sexActs.forEach(setNotag);
- compileEncounterOptions(sexActs);
- compileEncounterOptions(sexReactions);
- }
- //conversion from template string to handlebars:
- //%s/${\([^}]*}\)/{{\1}}/gc
- function initiateSex(initiator,target,forced){
- initiator.currentSexActs = 0;
- target.currentSexActs = 0;
- if(forced===undefined){
- forced=false;
- }
- var activity;
- var type = "other";
- var initiator = initiator;
- var recipient = target;
- var man;//only used when mixed sex couples
- var woman;
- if((target.isMale()||initiator.isMale())&&(target.isFemale()||initiator.isFemale())){
- if(target.isMale()){
- man=target;
- woman=initiator;
- }else{
- man=initiator;
- woman=target;
- }
- }
- var submissive;
- var dominant;
- if((initiator==leader)||(target==leader)||(Math.abs(target.submissiveness-initiator.submissiveness)>40)){
- if((initiator==leader)||((target.submissiveness-initiator.submissiveness)>40)){
- dominant=initiator;
- submissive=target;
- }else{
- dominant=target;
- submissive=initiator;
- }
- }
- var first;//scenes that can work either way and we want to randomize a bit
- var second;
- if(Math.random()>0.5){
- first=initiator;
- second=target;
- }else{
- first=target;
- second=initiator;
- }
- var notsub;//if a role can be either normal or dom/sub, but should never be done by the sub in a scene.
- var notdom;
- if(dominant){
- notsub = dominant;
- notdom = submissive;
- }else{//if there is no dom and sub, the order does not matter. can be either
- notsub=first;
- notdom=second;
- }
- var follower;
- var playerHere = (initiator===player)||(target===player);
- var leaderHere = (initiator===leader)||(target===leader);
- if(leaderHere){
- if(initiator===leader){
- follower=target;
- }else{
- follower=initiator;
- }
- }
- var genitalReact = (chr=>chr.isMale()?"cock swell":"pussy ache");
- var playerFucked = true;
- var leaderFucked = false;//if female leaderg fucked by male player.
- /*These are set here for convenience in definitions*/
- const iDom = SexEncounterFlags.iDom;
- const rDom = SexEncounterFlags.rDom;
- const mf = SexEncounterFlags.mf;
- const mm = SexEncounterFlags.mm;
- const ff = SexEncounterFlags.ff;
- const futa = SexEncounterFlags.futa;
- const iHot = SexEncounterFlags.iHot;
- const iUg = SexEncounterFlags.iUg;
- const refused = SexEncounterFlags.refused;//successfully refused to fuck
- const force = SexEncounterFlags.force;//encounter was forced (generally by leader). Maybe
- const wrongO = SexEncounterFlags.wrongO;//target has wrong orientation for initiator
- const lp = SexEncounterFlags.lp;//leader/player interaction
- const reversal = SexEncounterFlags.reversal;//submissiveness stat is different from leader/follower dynamic
- const mDom = SexEncounterFlags.mDom;//male dominant
- const fDom = SexEncounterFlags.fDom;//female dominant
- const fSub = SexEncounterFlags.fSub;
- const mSub = SexEncounterFlags.mSub;
- const fRec = SexEncounterFlags.fRec;//female recipient
- const mRec = SexEncounterFlags.mRec;
- const mInit = SexEncounterFlags.mInit;//initiator is male
- const fInit = SexEncounterFlags.fInit;
- /*
- *Character Flags
- */
-
- const gotPiV = SexFlags.gotPiV;
- const gavePiV = SexFlags.gavePiV;
- const gaveOral=SexFlags.gaveOral;
- const gotOral =SexFlags.gotOral;
- const gotAnal =SexFlags.gotAnal;
- const gaveAnal =SexFlags.gaveAnal;
- const gotFucked=SexFlags.gotFucked;//"generic" fucking that changes depending on participant genders
- const didFuck=SexFlags.didFuck; //will also set the relevant flags between sex and reflection steps.
- const gaveHandjob=SexFlags.gaveHandjob;
- const gotHandjob=SexFlags.gotHandjob;
- const onTop=SexFlags.onTop;
- const onBottom=SexFlags.onBottom;
- const isSub=SexFlags.isSub;
- const isDom=SexFlags.isDom;
- const gotForced=SexFlags.gotForced;
- const didForce=SexFlags.didForce;
- const isMan = SexFlags.isMan;
- const isWoman = SexFlags.isWoman;
- const isFuta = SexFlags.isFuta;
- const didSuckCock =SexFlags.didSuckCock;
- const gotCockSucked = SexFlags.gotCockSucked;
- const didLickPussy = SexFlags.didLickPussy;
- const gotPussyLicked=SexFlags.gotPussyLicked;
- const isPregnant = SexFlags.isPregnant;
- /*Flag Checks*/
- var isIDom = (dominant&&(dominant==initiator))?iDom:0;
- var isRDom = (dominant&&(dominant==target))?rDom:0;
- var isMF = ((man!==undefined)&&(woman!==undefined))?mf:0;
- var isMM = target.isMale()&&initiator.isMale()?mm:0;
- var isFF = target.isFemale()&&initiator.isFemale()?ff:0;
- var isFutaEncounter = target.isFutanari()||initiator.isFutanari()?futa:0;
- var isIHot = ((target.orientation<30)&&(initiator.femininity()>80))||((target.orientation>70)&&(initiator.masculinity()>80))?iHot:0;
- var isIUg = ((target.orientation<30)&&(initiator.masculinity()>60))||((target.orientation>70)&&(initiator.femininity()>60))?iUg:0;
- var isForced = forced?force:0;
- var isLP = (leaderHere&&playerHere)?lp:0;
- var isReversal = (dominant&&((dominant.submissiveness-submissive.submissiveness)>20))?reversal:0;//leader is always the "dominant" if available, but submissiveness can potentially be reversed
- if(isReversal){//but go ahead and swap so generic dom/sub can be used
- let tmp = dominant;
- dominant=submissive;
- submissive=tmp;
- }
- var isWrongO = (((initiator.orientation<35)&&(target.hasCock() || target.isMale()))||
- ((initiator.orientation>65)&&(target.hasVagina() || target.isFemale()))) ? wrongO:0;
- /*console.log("reversal",isReversal,dominant.submissiveness,submissive.submissiveness);
- console.log(dominant.name,submissive.name);*/
- var isMDom = dominant&&dominant.isMale()?mDom:0;
- var isFDom = dominant&&dominant.isFemale()?fDom:0;
- var isFSub = submissive&&submissive.isFemale()?fSub:0;
- var isMSub = submissive&&submissive.isMale()?mSub:0;
- var isFRec = recipient&&recipient.isFemale()?fRec:0;
- var isMRec = recipient&&recipient.isMale()?mRec:0;
- var isFInit = initiator&&initiator.isFemale()?fInit:0;
- var isMInit = initiator&&initiator.isMale()?mInit:0;
- var tagmask = isIDom|isRDom|isMF|isMM|isFF|isFutaEncounter|isIHot|isIUg|isForced|isLP|isReversal|isWrongO|isMDom|isFDom|isFSub|isMSub|isFRec|isMRec|isMInit|isFInit;
- var argue;
- var react;
- var act;
- var dys = player.dysphoria;
- var characters = {
- player:player,
- leader:leader,
- follower:follower,
- initiator:initiator,
- recipient:recipient,
- target:target,
- man:man,
- woman:woman,
- submissive:submissive,
- dominant:dominant,
- notsub:notsub,
- notdom:notdom,
- first:first,
- second:second,
- }
- if(dominant){
- dominant.currentSexActs |= isDom;
- }
- if(submissive){
- submissive.currentSexActs |= isSub;
- }
- function setSexMask(chr){
- chr.currentSexActs |= chr.isMale()?isMan:0;
- chr.currentSexActs |= chr.isFemale()?isWoman:0;
- chr.currentSexActs |= chr.isFutanari()?isFuta:0;
- chr.currentSexActs |= chr.isPregnant()?isPregnant:0;
- }
- setSexMask(initiator);
- setSexMask(target);
- /*Initialize unused people.
- Templates will error otherwise.
- in theory these shouldn't get used ever if created here like initiator
- aside from templates
- could maybe get better solution if we used some other form of templating that explicitly resolved later*/
- if(!submissive){submissive=leader;}
- if(!dominant){dominant=second;}
- if(!follower){follower=second;}
- if(!woman){woman=first;}
- if(!man){man=second;}
- var eagerness = "quickly";
- if(isIHot){
- eagerness="eagerly";
- }
- if(isIUg){
- eagerness="reluctantly";
- }
- if(forced){
- let reluctance = target.dysphoria;
- if(isIHot){
- reluctance-=50;
- }
- if(isIUg){
- reluctance+=50;
- }
- if(reluctance>170){
- eagerness="angrily";
- }else if(reluctance>100){
- eagerness="grudgingly";
- }else if(reluctance<50){
- eagerness="quickly";
- }else if(reluctance<20){
- eagerness="eagerly";
- }
- }
-
- var argues = [
- {
- tags:rDom|force,
- minD:150,
- set:refused,
- activity: "{{target.YouHeShe}} shout at {{initiator.youName}}, yelling that {target.youheshe} not {{initiator.yourshishers}} to use",
- },
- {
- tags:iUg|force,
- notags:iDom,
- minD:40,
- set:refused,
- activity:"{{initiator.YouHeShe}} so hideous that {{target.youheshe}} refuse to fuck {{initiator.youhimher}}",
- },
- {
- tags:iHot|force,
- minD:75,
- activity:"{{target.YouHeShe}} think about refusing, but {{initiator.heshe}} so hot it make {{target.yourhisher}} {{target,arousedReaction}}.",
- },
- {
- tags:force|fSub,
- minD:120,
- activity:"{{target.YouHeShe}} argue, saying {{target.youheshe}} not woman, but {{initiator.heshe}} point and say {target.yourhisher} body is woman body, so {{target.youheshe}} fuck like woman.",
- },
- {
- notags:force,
- tags:iUg,
- set:refused,
- minD:40,
- activity:"{{target.YouName}} curl lips in disgust, saying {{target.youheshe}} never fuck {{initiator.youName}}."
- }
- ];
- function setActMasks(character,others){
- var other;
- for(let o in others){
- if(others[o]!==character){
- other=others[o];
- }
- }
- var setGeneric=true;
- var mask= character.currentSexActs;
- const othermask = other.currentSexActs;
- if(mask & (gaveAnal|gavePiV)){
- setGeneric=false;
- mask|=gotFucked;
- }
- if(mask & (gaveAnal|gavePiV)){
- setGeneric=false;
- mask|=didFuck;
- }
- if(mask& (didLickPussy|didSuckCock)){
- setGeneric=false;
- mask|=gaveOral;
- }
- if(mask & (gotCockSucked|gotPussyLicked)){
- setGeneric=false;
- mask |= gotOral;
- }
- if(setGeneric){
- if(mask&gotFucked){
- if(tagmask&mf){
- mask|=gotPiV;
- }
- if(tagmask&mm){
- mask|=gotAnal;
- }//what, if anything, should ff produce?
- }
- if(mask&didFuck){
- if(tagmask&mf){
- mask|=gavePiV;
- }
- if(tagmask&mm){
- mask|=gaveAnal;
- }
- }
- if(mask&gaveOral){
- if(othermask&isWoman){
- mask|=didLickPussy;
- }
- if(othermask&isMan){
- mask|=didSuckCock;
- }
- if(othermask&isFuta){
- mask|=didSuckCock;//Will also get pussy licked from above. Is that correct?
- }
- }
- if(mask&gotOral){
- if(mask&isFuta){
- mask|=gotCockSucked;
- }
- if(mask&isMan){
- mask|=gotCockSucked;
- }
- if(mask&isWoman){
- mask|=gotPussyLicked;
- }
- }
- }
- if((tagmask&force) && (!(tagmask&(refused|reversal)))){
- if(mask&isSub){
- mask|=gotForced;
- }else if(mask&isDom){
- mask|=didForce;
- }else if(mask&(gotPiV|gotFucked|gotAnal)){
- mask|=gotForced;
- }else if(mask&(gavePiV|didFuck|gaveAnal)){
- mask|=didForce;
- }
- }
- character.currentSexActs=mask;
- //console.log(mask);
- }
- //var argueScore = getRandomInt(4,8) - 1*(player.dysphoria>15)-1*(player.dysphoria>60)-1*(player.dysphoria>100)-1*(player.dysphora>160);
- //if(argueScore<4){/*/*
- /*if(!forced){
- argue = handleResult(getRandomElem(argues.filter(checkChoice)));
- }else{
- argue="";
- }*/
- //}
- //act = handleResult(getRandomElem(acts.filter(checkChoice,follower)));
- //console.log("initiator",initiator.name,"recipient",recipient.name);
- var uniqueCharacters = {initiator:initiator,target:target};
- var useDys = function(characters,tags){
- if((tags&lp)){
- return follower;
- }else{
- return false;
- }
- }
- var activities = generateEncounter(tagmask,[
- {
- name:"act",
- possibilities:sexActs,
- characters:characters,
- uniqueCharacters:uniqueCharacters,
- characterTags:"currentSexActs",
- handleTags:setActMasks,
- useDysphoria:useDys,
- },
- {
- name:"initiatorReaction",
- possibilities:sexReactions,
- characters:{reactor:initiator,other:target,...characters},
- uniqueCharacters:uniqueCharacters,
- characterTags:"currentSexActs",
- useDysphoria:useDys,
- },
- {
- name:"targetReaction",
- possibilities:sexReactions,
- characters:{reactor:target,other:initiator,...characters},
- uniqueCharacters:uniqueCharacters,
- characterTags:"currentSexActs",
- useDysphoria:useDys,
- }],["{{act}} {{initiatorReaction}}","{{act}} {{targetReaction}}"]);
-
- /*initiatorReact = handleResult(getReaction(initiator,recipient),true);
- recipientReact = handleResult(getReaction(recipient,initiator),true);
- var initiatorActivity = argue+" "+act;
- var recipientActivity = argue+" "+act;
- if(initiatorReact!==undefined){
- initiatorActivity+= " "+initiatorReact;
- }
- if(recipientReact!==undefined){
- recipientActivity+=" "+recipientReact;
- }*/
- if(initiator.currentSexActs&(gotFucked|didFuck|gotOral)){
- initiator.desire=0;
- if(initiator.currentSexActs&gotPiV){
- initiator.maybeImpregnate(target);
- }
- }
- if(target.currentSexActs&(gotFucked|didFuck|gotOral)){
- target.desire=0;
- if(target.currentSexActs&gotPiV){
- target.maybeImpregnate(initiator);
- }
- }
-
- /* Maybe later
- if((tagmask&fuckLtP)==fuckLtP){
- eatStatNut(player,getRandomElem(["allure","maternalism","orientation"]),getRandomInt(3,7));
- avatar.activity+=activity;
- //player.activity+=activity;
- //player.dysphoria-=5;
- if((tagmask&(mL|fP))==(mL|fP)){
- player.maybeImpregnate(avatar);
- }
- }
- if((tagmask&fuckPtL)==fuckPtL){
- eatStatNut(player,getRandomElem(["allure","maternalism","orientation"]),getRandomInt(-3,-1));
- eatStatNut(avatar,getRandomElem(["allure","orientation","submissiveness"]),getRandomInt(2,4));
- //avatar.activity+=activity;
- //player.activity+=activity;
- if((tagmask&(mP|fL))==(mP|fL)){
- avatar.maybeImpregnate(player);
- }
- }*/
-
- return activities;
- }
|