Altered Tease Attack Damage

knowei0269

Active Member
Mar 24, 2018
32
6
30
Putting thus here since I ma have just missed something, but dead how tease damage gets calculated change based on the enemy's status? Right now if an enemy is stunned they take considerably less tease damage than normal. This was not the case in the flash version so did I just miss a combat update? Tested with a flash file then exported to the (current?) online version.


Screenshot 2022-07-24 144253.pngScreenshot 2022-07-24 144733.png
 

TheShepard256

Well-Known Member
Yes, this was one of those changes. Notice how the text for the tease explicitly says
while she's too stunned to do anything about it, knowing she might not be aware enough to fully understand just how hot it is.
Other changes include, but are not limited to:
  • You can still tease if you can't see your enemy (whether because you're blinded or they're stealthed), but with a penalty to damage. Raising Exhibitionism reduces this damage penalty, as it makes your teases less reliant on actually seeing your target.
  • Conversely, you get a penalty to damage if you tease while stealthed, as the enemy can't see you properly.
If anyone knows of any other changes, feel free to add them.
 

OrangeBurner

Well-Known Member
Mar 13, 2022
305
72
After looking at the code I figured out some things reguarding tease damage (I don't know if they're recent changes or not though)

Please note: All these effects are stacked multiplicatively.

The Positives:
  • If either You or your target is tripped (but not both); You deal +25% tease damage.
  • If your target is Paralyzed you deal +25% tease damage. (Currently, no way for the pc to do this, I think).
The Negatives:
  • For every level down you are against your opponent you deal -70% tease damage. (Which is probably why your tease does so little against the lvl 11 Hydra)
  • If your target is stunned you deal -75% tease damage.
  • If your target is blinded you deal ( -50 + (Exhibitionism / 2) ) % tease damage.

JavaScript:
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();
}
 
  • Like
Reactions: Theron

Theron

Well-Known Member
Nov 8, 2018
3,325
1,317
44
  • If your target is Paralyzed you deal +25% tease damage. (Currently, no way for the pc to do this, I think).
Maybe I'm misunderstanding, but Paralyzing Shock Paralyzes (obviously).
I thought Mag Binders did, but it actually Stuns. so it's looking like only Tech Specialists can Paralyze (right now).
How many enemies can Paralyze the PC?
 

OrangeBurner

Well-Known Member
Mar 13, 2022
305
72
Maybe I'm misunderstanding, but Paralyzing Shock Paralyzes (obviously).
Ah, yeah I forgot about that for some reason, sorry.
How many enemies can Paralyze the PC?
These are the enemies which have moves which could paralyze the PC:
  • Cunt Snake. (Blocked by a Physique higher than 14)
  • Gabilani Cyborg. (Blocked by Airtight suit)
  • Gabilani Chemist. (An energy draining move that paralyzes the PC when energy hits 0)
  • Lumi.
  • Dr. Teyaal.
  • Kase (Can't/wouldn't want to fight him but who knows).
The ones in white are the ones who have unique moves which call applyParalyze() directly (meaning that they can definitely paralyze you).

The ones in yellow are characters that I know are Tech Specialists, and therefore can access Paralyzing Shock. (And I don't know if their AI's even use the move at all)
They might be more characters that can access Paralyzing Shock, but I don't know.
The reason why I say they could be more is because: Paralyzing Shock isn't an ability locked by a perk.
It's an ability locked by a class (e.g you can only access it if your an GLOBAL.CLASS_ENGINEER)

The only way to check if a character has that ability is to check if they are also an engineer. (And I don't even know if those character's AI even use the move even while they could use it).
 
Last edited:

Hanzo

Well-Known Member
Oct 10, 2015
235
123
The Negatives:
  • For every level down you are against your opponent you deal -70% tease damage. (Which is probably why your tease does so little against the lvl 11 Hydra)

Nope. That's in the flash version too. You can check it in the old public repository. So it can't be the reason.

The -75% damage from stunned doesn't actually reduce final damage by 75%. It reduces damage before substracting the Zaika Hydra's lust defense (which happens at the end of the process, line 1003 of combat.js, in CalculateLustDamage), becoming too small to overcome the defense value of the hydra, thus hitting the minimal damage cap (line 1007).

It all bogs down to the fact that the way TiTS handles lust damage does not comply with the distributive property.

Combat code is going to be revised in the future, or so I've heard.
 
Last edited: