Bossing The inequality of seduce as a primary difficulty mechanic

Discussion in 'Closed' started by Tsue, Aug 8, 2021.

  1. Tsue
    Offline

    Tsue Well-Known Member

    Joined:
    May 5, 2015
    Messages:
    479
    Likes Received:
    671
    IGN:
    Tsuenami
    Guild:
    USSR
    If seduce is going to continue to be used to balance boss difficulty, bosses should gain a large accuracy bonus upon casting seduce.

    Seduce (and possibly potion lock with the upcoming release of Von Leon) is one of the few ways to threaten players in bosses, and as such can often be a deciding factor in the difficulty of bosses. Indeed, with the release of Update 73 we saw staff address complaints that Auf Haven was too easy. This update attempted to increase the difficulty of Auf in two ways, both of which were ultimately dependent on sed:
    1. Adding the possibility of left sed after Auf falls below 20% hp.
    2. Spawning the 1st and 3rd clone on the ground floor (which, due to autopot, is only threatening if you are unlucky enough to get seduced by the main auf while clone is out).
    Both of these changes use seduce to increase the difficulty. With the game not being designed with much difficulty in mind (such as the innate potion cds you see in most games), this is understandable. However, the difficulty increases seduce represents is very unequal based on class. Due to the multi-hit EHP check nature of seduce, thieves experience a negligible amount of danger from seduce due to their high avoid relative to other classes. Consider the following figure:

    [​IMG]

    It can be seen that as soon as we consider seduce in a non one hit kill context, the danger that seduce poses to thieves is negligible relative to other classes. The following figure shows class seduce death probabilities relative to nightlord seduce death chances:

    [​IMG]

    Even in the most common situations of magic attacks with 2 hits taken and 2 hits to kill, it can be seen that most classes will die 11 to 16 times in sed for each nl sed death. Physical attacks are slightly more balanced, but most classes will still die 7-9 times for each nl sed death under these circumstances. From the above figures, it can be seen that seduce is a very unequal difficulty mechanic, and is ineffective at increasing the difficulty for nl players relative to other classes (which to be blunt much of the feedback about Auf lacking difficulty seemed to come from in the first place, and with how avoid affects sed I can definitely understand this feeling). When one considers a washed nl who can tank 2 magic hits (3 hits to kill), the difference in difficulty is laughable (36x less likely to die than archers, 40x less likely to die than shield warriors, and 65x less likely to die than other classes).

    Making damage (less) avoidable during seduce would allow players to experience more similar difficulty invariant of class. There are several simple ways this could be implemented.

    1. Make all hits unavoidable during seduce.
      1. This is the most equal solution, but will likely result in the most complaints and may be hard to implement on a technical level.
    2. When seduce is cast, the boss gains a large accuracy bonus.
      1. This is likely the simplest solution to implement on a technical level. When the boss gains a large accuracy bonus, the effect on hit rate from player avoid becomes negligible, and the player hit rate trends towards their respective class floors. Shadow shifter and guardian would still work in this situation, retaining a significant thief advantage while bringing it to a less blatant level. The seduce death probabilities in this case are as follow:
        1. [​IMG]
    3. Focusing less on seduce, and more on other boss mechanics such as avoidable, high damage attacks. When an attack threatens death in a single hit, differences in avoid are obviously far less impactful (for example, night lords are "only" about 2.9 times more likely to not die than a non thief / shield warrior class. However, these can be hard to implement for a variety of reasons.
    I believe that solution 2 is the easiest to implement, while retaining a significant advantage (50%-100% more likely to survive) in seduce over other classes. Further, this difficulty imbalance should be considered while balancing future content (pb / von leon) involving seduce and potion lock and when responding to future community feedback about boss difficulty.

    Source:

    calculateHitRates.m
    Code:
    % Avoid formulas from https://forum.maplelegends.com/index.php?threads/nises-formula-compilation.36234/
    
    % Returns the chance to get hit given player total avoid, monster accuracy,
    % dmg_type (false for physical, true for magic), and shifter_type (0 for
    % none, 1 for nl, 2 for shad, 3 for guardian).
    function hit_rate = calculateHitRate(avoid, monster_acc, dmg_type, shifter_type)
        % phys damage
        if ~dmg_type
            hit_rate = 1-avoid./(4.5*monster_acc);   
        % magic damage
        else
            hit_rate = 1 - (10/9 - monster_acc / (0.9 * avoid));
        end
       
        % Thief hit rate must be between 5%-95%.  Other classes must be
        % between 2%-80%.
        % If non thief:
        if shifter_type == 0 || shifter_type == 3
            hit_rate = max(min(hit_rate, 0.8), 0.02);
        % else if nl or shad:
        else
            hit_rate = max(min(hit_rate, 0.95), 0.05);
        end
       
        % Apply shifter if relevant.
        if shifter_type == 1
            hit_rate = hit_rate*0.7; % nl has 30% chance to shifter     
        elseif shifter_type == 2
            hit_rate = hit_rate*0.6; % shad has 40% chance to shifter
        elseif shifter_type == 3
            hit_rate = hit_rate*0.85; % guardian has a 15% chance to block lol
        end
    end
    

    calculateDeathRate.m
    Code:
    % Returns the probability of death during sed with a given number of hits.
    function death_rate = calculateDeathRate(hit_rate, hits_to_kill, hits_taken)
        % Find the cumulative bionomial distribution:
        cbd = 0;
        % Sum from 0 to hits_to_kill-1.
        for ii=0:hits_to_kill-1
           cbd = cbd + nchoosek(hits_taken, ii)*hit_rate^ii*(1-hit_rate)^(hits_taken-ii);
        end
       
        death_rate = 1 - cbd;
    end
    

    sedRates.m
    Code:
    % Primarily looking at auf and ht for sed situations.  Define the accuracy
    % from bbb.
    auf_acc = 270;
    ht_head_acc = 250;
    
    % Define some sample player avoid values at lvl 200.
    thief_avoid = 760;
    archer_avoid = 390;
    pirate_avoid = 240;
    warrior_avoid = 110;
    mage_avoid = 120;
    
    % Find some sample hit rates.
    hit_rate_auf_nl_phys = calculateHitRate(thief_avoid, auf_acc, false, 1);
    hit_rate_auf_nl_magic = calculateHitRate(thief_avoid, auf_acc, true, 1);
    hit_rate_auf_shad_phys = calculateHitRate(thief_avoid, auf_acc, false, 2);
    hit_rate_auf_shad_magic = calculateHitRate(thief_avoid, auf_acc, true, 2);
    hit_rate_auf_pirate_phys = calculateHitRate(pirate_avoid, auf_acc, false, 0);
    hit_rate_auf_pirate_magic = calculateHitRate(pirate_avoid, auf_acc, true, 0);
    hit_rate_auf_archer_phys = calculateHitRate(archer_avoid, auf_acc, false, 0);
    hit_rate_auf_archer_magic = calculateHitRate(archer_avoid, auf_acc, true, 0);
    hit_rate_auf_warrior_phys = calculateHitRate(warrior_avoid, auf_acc, false, 0);
    hit_rate_auf_warrior_magic = calculateHitRate(warrior_avoid, auf_acc, true, 0);
    hit_rate_auf_shieldwarrior_phys = calculateHitRate(warrior_avoid, auf_acc, false, 3);
    hit_rate_auf_shieldwarrior_magic = calculateHitRate(warrior_avoid, auf_acc, true, 3);
    hit_rate_auf_mage_phys = calculateHitRate(mage_avoid, auf_acc, false, 0);
    hit_rate_auf_mage_magic = calculateHitRate(mage_avoid, auf_acc, true, 0);
    
    %% Auf using magic attacks (absolute)
    
    % Calculate probability of death (y) vs number of hits required to kill.  Assume
    % take 3 hits.  Check probability for 2 hit and 3 hit case, 1 hit semi
    % pointless for magic.
    hits_taken = 3;
    nl_death_rate_auf_magic_3hits = zeros(hits_taken-1, 1);
    shad_death_rate_auf_magic_3hits = zeros(hits_taken-1, 1);
    archer_death_rate_auf_magic_3hits = zeros(hits_taken-1, 1);
    shieldwarrior_death_rate_auf_magic_3hits = zeros(hits_taken-1, 1);
    other_death_rate_auf_magic_3hits = zeros(hits_taken-1, 1);
    for hits_to_kill=2:hits_taken
       nl_death_rate_auf_magic_3hits(hits_to_kill-1) = calculateDeathRate(hit_rate_auf_nl_magic, hits_to_kill, hits_taken);
       shad_death_rate_auf_magic_3hits(hits_to_kill-1) = calculateDeathRate(hit_rate_auf_shad_magic, hits_to_kill, hits_taken);
       archer_death_rate_auf_magic_3hits(hits_to_kill-1) = calculateDeathRate(hit_rate_auf_archer_magic, hits_to_kill, hits_taken);
      shieldwarrior_death_rate_auf_magic_3hits(hits_to_kill-1) = calculateDeathRate(hit_rate_auf_shieldwarrior_phys, hits_to_kill, hits_taken);
       other_death_rate_auf_magic_3hits(hits_to_kill-1) = calculateDeathRate(hit_rate_auf_pirate_magic, hits_to_kill, hits_taken);
    end
    
    % Plot the probability of death results.
    fc = subplot(2,2,1);
    b = bar([nl_death_rate_auf_magic_3hits'; shad_death_rate_auf_magic_3hits'; archer_death_rate_auf_magic_3hits'; shieldwarrior_death_rate_auf_magic_3hits'; other_death_rate_auf_magic_3hits']);
    legend("2 hits to kill", "3 hits to kill", 'location', 'northwest')
    classes = {'nl'; 'shad'; 'archer'; 'shield warrior'; 'other'};
    set(fc,'xticklabel',classes)
    ylabel("death probability")
    title("Probability of dying during Auf sed in 3 magic attacks")
    curtick = get(gca, 'xTick');
    xticks(unique(round(curtick)));
    grid on
    xtips1 = b(1).XEndPoints;
    ytips1 = b(1).YEndPoints;
    labels1 = string(round(b(1).YData, 2));
    text(xtips1,ytips1,labels1,'HorizontalAlignment','center',...
        'VerticalAlignment','bottom')
    xtips2 = b(2).XEndPoints;
    ytips2 = b(2).YEndPoints;
    labels2 = string(round(b(2).YData, 3));
    text(xtips2,ytips2,labels2,'HorizontalAlignment','center',...
        'VerticalAlignment','bottom')
    ylim([0 1])
    
    % Check the hits taken case.
    hits_taken = 2;
    nl_death_rate_auf_magic_2hits = zeros(hits_taken-1, 1);
    shad_death_rate_auf_magic_2hits = zeros(hits_taken-1, 1);
    archer_death_rate_auf_magic_2hits = zeros(hits_taken-1, 1);
    shieldwarrior_death_rate_auf_magic_2hits = zeros(hits_taken-1, 1);
    other_death_rate_auf_magic_2hits = zeros(hits_taken-1, 1);
    for hits_to_kill=2:hits_taken
       nl_death_rate_auf_magic_2hits(hits_to_kill-1) = calculateDeathRate(hit_rate_auf_nl_magic, hits_to_kill, hits_taken);
       shad_death_rate_auf_magic_2hits(hits_to_kill-1) = calculateDeathRate(hit_rate_auf_shad_magic, hits_to_kill, hits_taken);
       archer_death_rate_auf_magic_2hits(hits_to_kill-1) = calculateDeathRate(hit_rate_auf_archer_magic, hits_to_kill, hits_taken);
      shieldwarrior_death_rate_auf_magic_2hits(hits_to_kill-1) = calculateDeathRate(hit_rate_auf_shieldwarrior_phys, hits_to_kill, hits_taken);
       other_death_rate_auf_magic_2hits(hits_to_kill-1) = calculateDeathRate(hit_rate_auf_pirate_magic, hits_to_kill, hits_taken);
    end
    
    % Plot the probability of death results.
    fc = subplot(2,2,2);
    b = bar([nl_death_rate_auf_magic_2hits'; shad_death_rate_auf_magic_2hits'; archer_death_rate_auf_magic_2hits'; shieldwarrior_death_rate_auf_magic_2hits'; other_death_rate_auf_magic_2hits']);
    legend("2 hits to kill", 'location', 'northwest')
    classes = {'nl'; 'shad'; 'archer'; 'shield warrior'; 'other'};
    set(fc,'xticklabel',classes)
    ylabel("death probability")
    title("Probability of dying during Auf sed in 2 magic attacks")
    curtick = get(gca, 'xTick');
    xticks(unique(round(curtick)));
    grid on
    xtips1 = b(1).XEndPoints;
    ytips1 = b(1).YEndPoints;
    labels1 = string(round(b(1).YData, 2));
    text(xtips1,ytips1,labels1,'HorizontalAlignment','center',...
        'VerticalAlignment','bottom')
    ylim([0 1])
    
    %% Auf using physical attacks (absolute)
    
    % Calculate probability of death (y) vs number of hits required to kill.  Assume
    % take 3 hits.  Check probability for 1 hit, 2 hit, and 3 hit case.
    hits_taken = 3;
    nl_death_rate_auf_phys_3hits = zeros(hits_taken, 1);
    shad_death_rate_auf_phys_3hits = zeros(hits_taken, 1);
    archer_death_rate_auf_phys_3hits = zeros(hits_taken, 1);
    shieldwarrior_death_rate_auf_phys_3hits = zeros(hits_taken, 1);
    other_death_rate_auf_phys_3hits = zeros(hits_taken, 1);
    for hits_to_kill=1:hits_taken
       nl_death_rate_auf_phys_3hits(hits_to_kill) = calculateDeathRate(hit_rate_auf_nl_phys, hits_to_kill, hits_taken);
       shad_death_rate_auf_phys_3hits(hits_to_kill) = calculateDeathRate(hit_rate_auf_shad_phys, hits_to_kill, hits_taken);
       archer_death_rate_auf_phys_3hits(hits_to_kill) = calculateDeathRate(hit_rate_auf_archer_phys, hits_to_kill, hits_taken);
      shieldwarrior_death_rate_auf_phys_3hits(hits_to_kill) = calculateDeathRate(hit_rate_auf_shieldwarrior_phys, hits_to_kill, hits_taken);
       other_death_rate_auf_phys_3hits(hits_to_kill) = calculateDeathRate(hit_rate_auf_pirate_phys, hits_to_kill, hits_taken);
    end
    
    % Plot the probability of death results.
    fc = subplot(2,2,3);
    b = bar([nl_death_rate_auf_phys_3hits'; shad_death_rate_auf_phys_3hits'; archer_death_rate_auf_phys_3hits'; shieldwarrior_death_rate_auf_phys_3hits'; other_death_rate_auf_phys_3hits']);
    legend("1 hit to kill", "2 hits to kill", "3 hits to kill", 'location', 'northwest')
    classes = {'nl'; 'shad'; 'archer'; 'shield warrior'; 'other'};
    set(fc,'xticklabel',classes)
    ylabel("death probability")
    title("Probability of dying during Auf sed in 3 physical attacks")
    curtick = get(gca, 'xTick');
    xticks(unique(round(curtick)));
    grid on
    xtips1 = b(1).XEndPoints;
    ytips1 = b(1).YEndPoints;
    labels1 = string(round(b(1).YData, 2)); % could loop but lazy
    text(xtips1,ytips1,labels1,'HorizontalAlignment','center',...
        'VerticalAlignment','bottom')
    xtips2 = b(2).XEndPoints;
    ytips2 = b(2).YEndPoints;
    labels2 = string(round(b(2).YData, 2));
    text(xtips2,ytips2,labels2,'HorizontalAlignment','center',...
        'VerticalAlignment','bottom')
    xtips3 = b(3).XEndPoints;
    ytips3 = b(3).YEndPoints;
    labels3 = string(round(b(3).YData, 2));
    text(xtips3,ytips3,labels3,'HorizontalAlignment','center',...
        'VerticalAlignment','bottom')
    ylim([0 1.05])
    
    % Check the hits taken case.
    hits_taken = 2;
    nl_death_rate_auf_phys_2hits = zeros(hits_taken, 1);
    shad_death_rate_auf_phys_2hits = zeros(hits_taken, 1);
    archer_death_rate_auf_phys_2hits = zeros(hits_taken, 1);
    shieldwarrior_death_rate_auf_phys_2hits = zeros(hits_taken, 1);
    other_death_rate_auf_phys_2hits = zeros(hits_taken, 1);
    for hits_to_kill=1:hits_taken
       nl_death_rate_auf_phys_2hits(hits_to_kill) = calculateDeathRate(hit_rate_auf_nl_phys, hits_to_kill, hits_taken);
       shad_death_rate_auf_phys_2hits(hits_to_kill) = calculateDeathRate(hit_rate_auf_shad_phys, hits_to_kill, hits_taken);
       archer_death_rate_auf_phys_2hits(hits_to_kill) = calculateDeathRate(hit_rate_auf_archer_phys, hits_to_kill, hits_taken);
      shieldwarrior_death_rate_auf_phys_2hits(hits_to_kill) = calculateDeathRate(hit_rate_auf_shieldwarrior_phys, hits_to_kill, hits_taken);
       other_death_rate_auf_phys_2hits(hits_to_kill) = calculateDeathRate(hit_rate_auf_pirate_phys, hits_to_kill, hits_taken);
    end
    
    % Plot the probability of death results.
    fc = subplot(2,2,4);
    b = bar([nl_death_rate_auf_phys_2hits'; shad_death_rate_auf_phys_2hits'; archer_death_rate_auf_phys_2hits'; shieldwarrior_death_rate_auf_phys_2hits'; other_death_rate_auf_phys_2hits']);
    legend("1 hit to kill", "2 hits to kill", 'location', 'northwest')
    classes = {'nl'; 'shad'; 'archer'; 'shield warrior'; 'other'};
    set(fc,'xticklabel',classes)
    ylabel("death probability")
    title("Probability of dying during Auf sed in 2 physical attacks")
    curtick = get(gca, 'xTick');
    xticks(unique(round(curtick)));
    grid on
    xtips1 = b(1).XEndPoints;
    ytips1 = b(1).YEndPoints;
    labels1 = string(round(b(1).YData, 2));
    text(xtips1,ytips1,labels1,'HorizontalAlignment','center',...
        'VerticalAlignment','bottom')
    xtips2 = b(2).XEndPoints;
    ytips2 = b(2).YEndPoints;
    labels2 = string(round(b(2).YData, 2));
    text(xtips2,ytips2,labels2,'HorizontalAlignment','center',...
        'VerticalAlignment','bottom')
    ylim([0 1])
    
    %% Auf plots (relative to nl)
    
    figure
    
    % magic 3 hits
    fc = subplot(2,2,1);
    b = bar([nl_death_rate_auf_magic_3hits'./nl_death_rate_auf_magic_3hits'; shad_death_rate_auf_magic_3hits'./nl_death_rate_auf_magic_3hits'; archer_death_rate_auf_magic_3hits'./nl_death_rate_auf_magic_3hits'; shieldwarrior_death_rate_auf_magic_3hits'./nl_death_rate_auf_magic_3hits'; other_death_rate_auf_magic_3hits'./nl_death_rate_auf_magic_3hits']);
    legend("2 hits to kill", "3 hits to kill", 'location', 'northwest')
    classes = {'nl'; 'shad'; 'archer'; 'shield warrior'; 'other'};
    set(fc,'xticklabel',classes)
    ylabel("death probability relative to nl")
    title("Probability of dying during Auf sed in 3 magic attacks, relative to nl")
    curtick = get(gca, 'xTick');
    xticks(unique(round(curtick)));
    grid on
    xtips1 = b(1).XEndPoints;
    ytips1 = b(1).YEndPoints;
    labels1 = string(round(b(1).YData, 2));
    text(xtips1,ytips1,labels1,'HorizontalAlignment','center',...
        'VerticalAlignment','bottom')
    xtips2 = b(2).XEndPoints;
    ytips2 = b(2).YEndPoints;
    labels2 = string(round(b(2).YData, 2));
    text(xtips2,ytips2,labels2,'HorizontalAlignment','center',...
        'VerticalAlignment','bottom')
    
    % magic 2 hits
    fc = subplot(2,2,2);
    b = bar([nl_death_rate_auf_magic_2hits'./nl_death_rate_auf_magic_2hits'; shad_death_rate_auf_magic_2hits'./nl_death_rate_auf_magic_2hits'; archer_death_rate_auf_magic_2hits'./nl_death_rate_auf_magic_2hits'; shieldwarrior_death_rate_auf_magic_2hits'./nl_death_rate_auf_magic_2hits'; other_death_rate_auf_magic_2hits'./nl_death_rate_auf_magic_2hits']);
    legend("2 hits to kill", 'location', 'northwest')
    classes = {'nl'; 'shad'; 'archer'; 'shield warrior'; 'other'};
    set(fc,'xticklabel',classes)
    ylabel("death probability relative to nl")
    title("Probability of dying during Auf sed in 2 magic attacks, relative to nl")
    curtick = get(gca, 'xTick');
    xticks(unique(round(curtick)));
    grid on
    xtips1 = b(1).XEndPoints;
    ytips1 = b(1).YEndPoints;
    labels1 = string(round(b(1).YData, 2));
    text(xtips1,ytips1,labels1,'HorizontalAlignment','center',...
        'VerticalAlignment','bottom')
    
    % phys 3 hits
    fc = subplot(2,2,3);
    b = bar([nl_death_rate_auf_phys_3hits'./nl_death_rate_auf_phys_3hits'; shad_death_rate_auf_phys_3hits'./nl_death_rate_auf_phys_3hits'; archer_death_rate_auf_phys_3hits'./nl_death_rate_auf_phys_3hits'; shieldwarrior_death_rate_auf_phys_3hits'./nl_death_rate_auf_phys_3hits'; other_death_rate_auf_phys_3hits'./nl_death_rate_auf_phys_3hits']);
    legend("1 hit to kill", "2 hits to kill", "3 hits to kill", 'location', 'northwest')
    classes = {'nl'; 'shad'; 'archer'; 'shield warrior'; 'other'};
    set(fc,'xticklabel',classes)
    ylabel("death probability relative to nl")
    title("Probability of dying during Auf sed in 3 physical attacks, relative to nl")
    curtick = get(gca, 'xTick');
    xticks(unique(round(curtick)));
    grid on
    xtips1 = b(1).XEndPoints;
    ytips1 = b(1).YEndPoints;
    labels1 = string(round(b(1).YData, 2)); % could loop but lazy
    text(xtips1,ytips1,labels1,'HorizontalAlignment','center',...
        'VerticalAlignment','bottom')
    xtips2 = b(2).XEndPoints;
    ytips2 = b(2).YEndPoints;
    labels2 = string(round(b(2).YData, 2));
    text(xtips2,ytips2,labels2,'HorizontalAlignment','center',...
        'VerticalAlignment','bottom')
    xtips3 = b(3).XEndPoints;
    ytips3 = b(3).YEndPoints;
    labels3 = string(round(b(3).YData, 2));
    text(xtips3,ytips3,labels3,'HorizontalAlignment','center',...
        'VerticalAlignment','bottom')
    
    % phys 2 hits
    fc = subplot(2,2,4);
    b = bar([nl_death_rate_auf_phys_2hits'./nl_death_rate_auf_phys_2hits'; shad_death_rate_auf_phys_2hits'./nl_death_rate_auf_phys_2hits'; archer_death_rate_auf_phys_2hits'./nl_death_rate_auf_phys_2hits'; shieldwarrior_death_rate_auf_phys_2hits'./nl_death_rate_auf_phys_2hits'; other_death_rate_auf_phys_2hits'./nl_death_rate_auf_phys_2hits']);
    legend("1 hit to kill", "2 hits to kill", 'location', 'northwest')
    classes = {'nl'; 'shad'; 'archer'; 'shield warrior'; 'other'};
    set(fc,'xticklabel',classes)
    ylabel("death probability relative to nl")
    title("Probability of dying during Auf sed in 2 physical attacks, relative to nl")
    curtick = get(gca, 'xTick');
    xticks(unique(round(curtick)));
    grid on
    xtips1 = b(1).XEndPoints;
    ytips1 = b(1).YEndPoints;
    labels1 = string(round(b(1).YData, 2));
    text(xtips1,ytips1,labels1,'HorizontalAlignment','center',...
        'VerticalAlignment','bottom')
    xtips2 = b(2).XEndPoints;
    ytips2 = b(2).YEndPoints;
    labels2 = string(round(b(2).YData, 2));
    text(xtips2,ytips2,labels2,'HorizontalAlignment','center',...
        'VerticalAlignment','bottom')
    
    %% Check the death rates assuming boss_acc >> player_avoid.  Assume 2 hits
    % to kill.
    for hits_taken=2:3
        disp("Hits takens: " + num2str(hits_taken))
        disp("shadower: " + num2str(calculateDeathRate(0.6*0.95, 2, hits_taken))) % Multiply shifter/guardian rate by respective hit rate floor (0.95 for thief, 0.8 for else).
        disp("night lord: " + num2str(calculateDeathRate(0.7*0.95, 2, hits_taken)))
        disp("shield warrior: " + num2str(calculateDeathRate(0.85*0.8, 2, hits_taken)))
        disp("other: " + num2str(calculateDeathRate(0.8, 2, hits_taken)))
    end
    
     
    Cooler, DickDann, Dong and 12 others like this.
  2. Hwaiting
    Offline

    Hwaiting Donator

    Joined:
    Oct 10, 2015
    Messages:
    456
    Likes Received:
    449
    Gender:
    Male
    No comment on this because I don't do bossing much these days, but this is very well written and researched.
     
  3. nut
    Offline

    nut Donator

    Joined:
    Jun 9, 2020
    Messages:
    2,062
    Likes Received:
    3,896
    Gender:
    Female
    IGN:
    nutleafcity
    Level:
    poo
    I see MATLAB I hit like :PBLove:

    For those who want to run the code, you can use GNU Octave I believe.
     
    LichWiz likes this.
  4. ImVeryJelly
    Offline

    ImVeryJelly Donator

    Joined:
    Jun 20, 2016
    Messages:
    1,041
    Likes Received:
    2,270
    Gender:
    Male
    Country Flag:
    IGN:
    ImVeryJelly
    Level:
    201
    Guild:
    LiquorStore
    Seduce teriary effect of - 1000 avoid. Only down side would be RIP avoid pots used before SED?
     
    Sylafia and CreamGoddess like this.
  5. Tsue
    Offline

    Tsue Well-Known Member

    Joined:
    May 5, 2015
    Messages:
    479
    Likes Received:
    671
    IGN:
    Tsuenami
    Guild:
    USSR
    Basically yea, but I think that giving the boss some large accuracy buff (instead of a player debuff) upon casting sed, with a buff duration matching the sed duration, accomplishes the same thing without messing up avoid pots after sed is over :).
     
  6. ImVeryJelly
    Offline

    ImVeryJelly Donator

    Joined:
    Jun 20, 2016
    Messages:
    1,041
    Likes Received:
    2,270
    Gender:
    Male
    Country Flag:
    IGN:
    ImVeryJelly
    Level:
    201
    Guild:
    LiquorStore
    But that would be a "debuff" on everyone in the map
     
    Sylafia and CreamGoddess like this.
  7. Tsue
    Offline

    Tsue Well-Known Member

    Joined:
    May 5, 2015
    Messages:
    479
    Likes Received:
    671
    IGN:
    Tsuenami
    Guild:
    USSR
    Oh sorry I think I'm misunderstanding you, this would affect everyone on the map yes, but only during the sed duration.
     
  8. Cooler
    Offline

    Cooler Donator

    Joined:
    Nov 16, 2018
    Messages:
    957
    Likes Received:
    948
    Country Flag:
    IGN:
    Absoloot
    Level:
    200
    Guild:
    Treasure
    This is an interesting point and concept and I don't disagree with it, especially considering archers/sairs who face the biggest sed threat. It's also the same reason why staff is trying to make 1/1 more equalizing (ignores MG, possibly ignoring Achilles soon, properly reducing MP to 1, etc)

    Edit: only thing I can think of that's a big negative to this is that this will especially enforce HP washing, possibly higher than normal, causing some classes to be much more expensive (thieves) And it also makes Blind a bit trivialized

    Not much else to add but I do think, with all the danger of sed, that if being seduced in the first place could be avoidable, and would be quite helpful to the fairer classes mentioned. This is kinda unrelated but hear me through:

    Hero's Will 10 SB
    each point of HW adds 1% chance to avoid sed, 1-5 (vanilla) is obv 5% chance to resist sed. HW10, and levels 6-10 only increase your sed resist chance, up to 10% at max (won't decrease your will CD further).
    5-10% are also arbitrary rates, it could be something more specific and tested such as 8 or 7.5 at max

    This would be a new, highly valuable SB, similar to MW20, and could be dropped by high end bosses for extra allure for people who want to be even more geared/prepped for end game bossing

    Sounds unrelated but I agree about the equalizing danger of sed in your post to all classes, like 1/1. Willing out when hit with sed is one thing, but a 1/10 (or 1/20) chance to resist sed I think would also be helpful for the fairer classes mentioned (archers/sairs who have low hp and no defensive tech like shifter/guardian/meso or magic guard). All kinds of things can go sideways in a boss fight a a small chance for all to resist sed is interesting, since it's much more dangerous and prolonged than 1/1, which is easily solved by pets.

    Feel free to completely ignore/bash this input, I know exactly what this sounds like
     
    Last edited: Aug 8, 2021
  9. Jooon
    Offline

    Jooon Donator

    Joined:
    Mar 5, 2015
    Messages:
    2,228
    Likes Received:
    13,499
    Location:
    Ulu1
    IGN:
    Shinsoo
    Level:
    200
    Guild:
    Rogue
    I wonder how can auf kill any thief class with 20% less weapon attack with its touch damage when continuously debuffed by a threaten mule.

    Well at least its not working now.
     
    Jinium likes this.
  10. kyoko3102
    Offline

    kyoko3102 Well-Known Member

    Joined:
    May 21, 2018
    Messages:
    588
    Likes Received:
    795
    Country Flag:
    with the new changes to hamstring and threaten(when it is fixed), i dont see any class would die in auf unless you are like me with only 10k hp

    run once with an active bm and u will see what i mean

    edit: i even ran once on my bm(10k hp) without hb and only died once
     

Share This Page