function applyTeaseDamage(attacker, target, teaseCount, teaseType, likeAdjustments = null)
{
if (target.getClassName() === "Celise")
{
output("\n");
processCombat();
return;
}
let factor = 1;
const factorMax = 2;
let msg = "";
if (likeAdjustments && likeAdjustments.length > 0)
{
for (let i = 0; i < likeAdjustments.length; i++) factor *= likeAdjustments[i];
}
if (attacker.hasStatusEffect("Sex On a Meteor") || attacker.hasStatusEffect("Tallavarian Tingler")) factor *= 1.5;
if (attacker.hasStatusEffect("\"Rutting\"")) factor *= 1.5;
if (attacker.hasStatusEffect("Body Paint")) factor *= 1.15;
if (attacker.hasStatusEffect("Well-Groomed")) factor *= attacker.statusEffectv2("Well-Groomed");
if ((target.originalRace === "nyrea" && attacker.hasPerk("Nyrean Royal")) || attacker.hasStatusEffect("Oil Aroused")) factor *= 1.1;
if (factor > factorMax) factor = factorMax;
// Failed/Miss
if(lustCombatMiss(attacker,target,factor))
{
if(target.getClassName() === "HandSoBot")
{
combatOutput("\n\n<i>“An attempt to confuse and overwhelm an enemy with an overt display of sexual dominance,”</i> says So. She sounds genuinely interested. <i>“An unorthodox but effective strategy in many known organic cultures’ approach to war. I was unaware sentients of a human upbringing had any experience of such a thing, however. Perhaps that explains why you are attempting it against a foe that cannot in any way feel desire.”</i>",null,target);
}
else if(target.isLustImmune === true)
{
msg = "\n\n<b>" + StringUtil.capitalize(target.getCombatName(), false);
if(target.isPlural) msg += " don’t";
else msg += " doesn’t";
msg += " seem to care for your erotically-charged display.</b>";
combatOutput(msg,null,target);
}
else if(teaseType === "SQUIRT")
{
combatOutput("\n\nYour milk goes wide.",null,attacker);
}
else if(teaseType === "DICK SLAP")
{
combatOutput("\n\nYour foe looks more annoyed than aroused at your antics as they wipe your girl lube off.",null,target);
if (isSillyModeEnabled()) combatAppend(" You pity them somewhat. Your [pc.cumNoun] has a lot of nutrients in it...",null,target);
}
//Enemies with special fail messages
else if (target.getClassName() === "HuntressVanae" || target.getClassName() === "MaidenVanae")
{
output("\n\n");
combatOutput(teaseReactions(0, target),null,target);
}
else if (target.getClassName() === "WetraHound")
{
output("\n\n");
window.wetraHoundAnimalIntellect();
}
else if(target.getClassName() === "KorgonneFemale")
{
combatOutput("\n\nThe barbarian girl flashes a savage grin, apparently unfazed." + ((isSillyModeEnabled()) ? " <i>“No. So no. Wow. Very no.”</i>" : ""),null,target);
}
else if(attacker.isBlind())
{
combatOutput(StringUtil.capitalize(target.getCombatName(), false) + " didn’t react in a meaningful way.",null,target);
}
else if(target.isTripped())
{
if(target.isPlural) combatOutput(StringUtil.capitalize(target.getCombatName(), false) + " appear unimprressed.",null,target);
else combatOutput(StringUtil.capitalize(target.getCombatName(), false) + " appears unimpressed.",null,target);
}
else if(stunnedReactions || paralyzedReactions)
{
if(target.isPlural) combatOutput(StringUtil.capitalize(target.getCombatName(), false) + " do not react in a meaningful way.",null,target);
else combatOutput(StringUtil.capitalize(target.getCombatName(), false) + " doesn’t react in a meaningful way.",null,target);
}
else
{
combatOutput("\n\n" + StringUtil.capitalize(target.getCombatName()), null, target);
if(target.isPlural) combatAppend(" resist");
else combatAppend(" resists");
combatAppend(" your erotically charged display... this time.");
}
combatAppend(" (<b>L: +<span class='lust'>0</span></b>)");
}
// Success
else
{
//Sexiness and resolve are 1:1. Willpower and tease skill dont match up even till level 20, making lust more powerful against lower level enemies naturally.
//lustDef Stat: level/1.5 + willpower()/4 + resolve()
let damage = (10 + attacker.teaseSkill()/4 + attacker.sexiness());
damage += attacker.statusEffectv4("Heat");
damage += attacker.statusEffectv2("Painted Penis");
damage += attacker.statusEffectv2("Painted Tits");
if (teaseType === "SQUIRT") damage += 5;
if (attacker.hasPheromones()) damage += 1 + rand(3);
let bonusCap = 0;
bonusCap += attacker.statusEffectv3("Painted Penis");
bonusCap += attacker.statusEffectv3("Painted Tits");
//Cap is 30 plus enough to exceed lustDefense but scales higher for foes over 100 maxLust.
let cap = Math.round(30 * (target.lustMax()/100)) + target.lustDef();
cap += bonusCap;
//Figure out damage
damage *= factor;
//Modify damage based on current gameplay statuses:
//Blinded attacker: 50% damage mitigated by ranks of exhibitionism.
var pcBlindReactions = false;
var paralyzedReactions = false;
var stunnedReactions = false;
var trippedReactions = false
if (attacker.isBlind())
{
var exhibBonus = attacker.exhibitionism() / 200;
if(exhibBonus < 0) exhibBonus = 0;
if(exhibBonus > 0.5) exhibBonus = 0.5;
damage *= (0.5 + exhibBonus);
//Use "attacker blind" reactions (or lack thereof.)
pcBlindReactions = true;
}
if (target.isStunned())
{
//No reaction text.
stunnedReactions = true;
damage *= 0.25;
}
else if(target.isParalyzed())
{
damage *= 1.25;
//Use "target paralyzed" reactions.
paralyzedReactions = true;
}
if(target.isTripped() && attacker.isTripped())
{
//Use "target tripped" reactions.
trippedReactions = true;
}
if(target.isTripped())
{
if(!attacker.isTripped()) damage *= 1.25;
//Use "target tripped" reactions.
trippedReactions = true;
}
else if(attacker.isTripped())
{
//Normal reactions :3
damage *= 1.25;
}
damage = (Math.min(damage, cap));
//Level % reduction
const levelDiff = target.level - attacker.level;
//Reduce tease damage by 70% for every level down the attacker is is.
if(levelDiff > 0)
{
for(let z = levelDiff; z > 0; z--)
{
damage *= 0.70;
}
}
//Damage cap
if (damage > cap) damage = cap;
//If you have the status effect, next tease will autohit for full damage
if(damage === cap && !target.hasStatusEffect("Charmed")) target.createStatusEffect("Charmed",0,0,0,0,false,"Icon_Charmed","The next tease attack cannot be resisted.",true,0,GLOBAL.STATUS_BAD);
else if (target.hasStatusEffect("Charmed")) target.removeStatusEffect("Charmed");
//Damage min
if (damage < 0) damage = 0;
//Set it as an actual damage type
let damageCollection = new TypeCollection( { tease: damage } )
//Drug-based teases do drug damage instead.
if (["SQUIRT", "DICK SLAP", "MYR VENOM"].includes(teaseType)) damageCollection = new TypeCollection( { drug: damage } )
output("\n\n");
const damageRes = applyDamage({baseDamage: damageCollection , attacker: attacker, target: target, outputSuppressed: true});
if(pcBlindReactions)
{
if(target.isPlural) combatOutput(StringUtil.capitalize(target.getCombatName(), false) + " aren’t visible, but it sounds like they liked what they saw.",null,attacker);
else combatOutput(StringUtil.capitalize(target.getCombatName(), false) + " isn’t visible, but it sounds like they liked what they saw.",null,attacker);
}
else if(trippedReactions)
{
if(target.isPlural) combatOutput(StringUtil.capitalize(target.getCombatName(), false) + " look up with lust in their eyes.",null,attacker);
else combatOutput(StringUtil.capitalize(target.getCombatName(), false) + " looks up with lust in " + target.getCombatPronoun("pa") + " eyes.",null,attacker);
}
else if(stunnedReactions || paralyzedReactions)
{
if(target.isPlural) combatOutput(StringUtil.capitalize(target.getCombatName(), false) + " flush ever so subtly.",null,attacker);
else combatOutput(StringUtil.capitalize(target.getCombatName(), false) + " flushes ever so subtly.",null,attacker);
}
else
{
switch(teaseType)
{
case "SQUIRT":
if(target.isPlural)
{
combatOutput(StringUtil.capitalize(target.getCombatName(), false) + " are splattered with your [pc.milk], unable to get it off.",null,attacker);
if(damage > 0) combatAppend(" All of a sudden, their faces begin to flush, and they look quite aroused.");
else combatAppend(" They seem unimpressed.");
}
else
{
combatOutput(StringUtil.capitalize(target.getCombatName(), false) + " is splattered with your [pc.milk], unable to get it off.",null,attacker);
if(damage > 0) combatAppend(" All of a sudden, " + target.mfn("his","her","its") + " " + target.face() + " begins to flush, and " + target.mfn("he","she","it") + " looks quite aroused.");
else combatAppend(" " + target.mfn("He","She","It") + " seems unimpressed.");
}
break;
case "DICK SLAP":
if(target.isPlural)
{
combatOutput(StringUtil.capitalize(StringUtil.possessive(target.getCombatName()), false),null,attacker);
if(damage > 0) combatAppend(" faces look rather flush as they");
combatAppend(" quickly wipe your [pc.cum] off.");
}
else
{
combatOutput(StringUtil.capitalize(StringUtil.possessive(target.getCombatName()), false),null,attacker);
if(damage > 0) combatAppend(" face looks rather flush as " + target.mfn("he","she","it"));
combatAppend(" quickly wipes your [pc.cum] off.");
}
if(isSillyModeEnabled()) combatAppend(" Ha! GOT ‘EM!");
break;
default:
combatOutput(teaseReactions(damageRes.lustDamage,target),null,attacker);
break;
}
}
outputDamage(damageRes);
//9999 output likes/dislikes
// Followups
if(target.getClassName() === "MyrInfectedFemale" && damageRes.lustDamage >= 10)
{
//output("\n\n<b>Your teasing has the poor girl in a shuddering mess as she tries to regain control of her lust addled nerves.</b>");
const stunDur = 1 + rand(2);
window.StaticCombatAttacks.applyStun(target, stunDur);
window.StaticCombatAttacks.applyLustStun(target, stunDur);
}
// if you successfully tease an enemy, they suffer a -10% hit-chance penalty for the rest of the battle.
if (attacker.hasPerk("Innocent Allure") && !target.isStaggered() && !target.isPlanted() && !target.isBlind())
{
if(attacker.getClassName() === "PlayerCharacter")
{
if(rand(2) === 0) combatOutput("\n\n" + StringUtil.capitalize(target.getCombatName(), false) + " seem" + (target.isPlural ? "" : "s") + " to have become a bit distracted after your display, " + (target.isPlural ? "their" : target.mfn("his","her","its")) + " movements faltering and less precise.",null,attacker);
else combatOutput("\n\nYour display appears to have shaken the " + StringUtil.possessive(target.getCombatName()) + " resolve and impaired " + (target.isPlural ? "their" : target.mfn("his","her","its")) + " aim; you can sense some hesitation in " + (target.isPlural ? "their" : target.mfn("his","her","its")) + " very stance.",null,attacker);
}
else {
combatOutput("\n\n" + StringUtil.capitalize(target.getCombatName(), false) + " seem" + (target.isPlural ? "" : "s") + " to have become distracted after " + StringUtil.possessive(attacker.getCombatName()) + " display, " + (target.isPlural ? "their" : target.mfn("his","her","its")) + " movements faltering and less precise.",null,attacker);
}
window.StaticCombatAttacks.applyLustStagger(target, 3);
if(target.getClassName() === "PlayerCharacter") combatAppend(" <b>You are staggered by the tease!</b>");
else combatAppend(" <b>" + StringUtil.capitalize(target.getCombatName(), false) + " " + (target.isPlural ? "are" : "is") + " staggered by the tease!</b>");
}
}
// kGAMECLASS.setEnemy(target);
if (attacker.getClassName() === "PlayerCharacter") window.playerMimbraneSpitAttack();
}