Short Questions Thread

Discuss Median XL!
Istaryu
Harpylisk
1466 | 67
Common Posting Badge
Posted over 1.000 messages
Great Popularity Badge
Has a thread with over 50.000 views
Common Love Badge
Earned over 20 cookies
Common Guide Badge
Created a complete character guide
Diaco wrote:is there something I'm not understanding for traprat breakpoints? according to the speedcalc max fpa is 13 (!?) for 56 IAS... but Ferocity gives insane amounts of IAS which as it is, it's completely useless. Also, is it confirmed that Uninterruptable Attack is bugged and doesn't actually do anything?


I am pretty sure that trap rat attack frames are intentionally horrible, because you attack once with quill storm, and it hits your whole screen, 5 times. Obviously, i am just exaggerating a bit, but you get the idea, i think :) Same goes for thorn wall, it does a lot of dmg and multihits like crazy, so you dont need to stack a lot of it as a faster attacking multihitting skill.
User avatar
Jampula
Shadowgate Totem
1725 | 100
Common Posting Badge
Posted over 1.000 messages
Great Popularity Badge
Has a thread with over 50.000 views
Great Love Badge
Earned over 100 cookies
Common Supporter Badge
Donated 1 time
Scalewinged wrote:UA is not bugged and esp useful for trap rat in my exp. Seems like 50% UA only making set extremely rise rat survivability (at least it can easily beat crafted gear with much more def/dr and even max block).

I had completely different results with pouncezon, high UA didn't seem to do anything. Pounce, even though it is warp attack it still uses attack animation (slow one), I got interrupted whether I had high UA or not, with Great Hunt too. High life and FHR/FBR much more important stats.
User avatar
SwineFlu
Heretic
402 | 53
Common Popularity Badge
Has a thread with over 10.000 views
Common Love Badge
Earned over 20 cookies
Scalewinged wrote:UA is not bugged and esp useful for trap rat in my exp.


I told you already a while ago that game doesn't care about this stat as long as it's not tied to the corresponding state. There is only one place in the code where this stat is queried by the game and this code snippet is definitely related to animation interruption.

I hope your C/C++ knowledge is good enough, otherwise I can post it in assembly language :coolstorybob:

Code: Select all

BOOL __usercall D2GAME_AnimInterrupt(D2GameStrc* pGame, D2UnitStrc* pChar, DWORD nSwitchMode, BOOL bCheckUsedSkill, D2SkillStrc* pActiveSkill)
{
   if (pChar == NULL)
      return FALSE;
   
   if (D2COMMON_CheckState(pChar, STATE_UNINTERRUPTABLE) == TRUE)
      return FALSE;
   
   if (pChar->nAnimMode == PLRMODE_DEATH || pChar->nAnimMode == PLRMODE_DEAD)
      return FALSE;
   
   if (nSwitchMode == PLRMODE_DEATH)
      return TRUE;
   
   if (bCheckUsedSkill == TRUE)
   {
      if (D2SkillStrc* pUsedSkill = D2COMMON_GetUsedSkill(pChar))
      {
         if (D2SkillsTXT* pSkillTxt = D2GAME_GetSkillTxtRecord(D2COMMON_GetSkillIdFromSkill(pUsedSkill, __FILE__, __LINE__)))
         {
            // SrvDoFunc = 67 - Charge, SrvDoFunc = 76 - WhirlWind
            if (pActiveSkill == pUsedSkill && (pSkillTxt->SrvDoFunc == 67 || pSkillTxt->SrvDoFunc == 76))
               return TRUE;
            
            if (pSkillTxt->InterruptFlag == TRUE)
            {
               if (D2COMMON_CheckState(pChar, STATE_CONCENTRATION) == TRUE)
               {
                  D2StatListStrc* pStatList = D2COMMON_GetStatListFromUnitAndState(pChar, STATE_CONCENTRATION);
                  int nConcentrationChance = D2COMMON_GetStatValue(pStatList, STATS_SKILL_CONCENTRATION, 0);
                  if (D2GAME_RandomEngine(&pChar->UnitSeed, 100) < nConcentrationChance)
                  {
                     if (pChar->nAnimMode == PLRMODE_NEUTRAL)
                     {
                        D2GAME_SwitchUnitAnimMode(pGame, pChar, NULL, PLRMODE_NEUTRAL, 0, 0, TRUE);
                        return TRUE;
                     }
                     
                     return FALSE;
                  }
               }
               
               if (D2COMMON_CheckState(pChar, STATE_CONCENTRATE) == TRUE)
               {
                  if (pChar->nAnimMode == PLRMODE_NEUTRAL)
                  {
                     D2GAME_SwitchUnitAnimMode(pGame, pChar, NULL, PLRMODE_NEUTRAL, 0, 0, TRUE);
                     return TRUE;
                  }
                  
                  return FALSE;
               }
            }
            else
            {
               if (pChar->nAnimMode == PLRMODE_NEUTRAL)
               {
                  D2GAME_SwitchUnitAnimMode(pGame, pChar, NULL, PLRMODE_NEUTRAL, 0, 0, TRUE);
                  return TRUE;
               }
               
               if (nSwitchMode == PLRMODE_ATTACK1 || nSwitchMode == PLRMODE_ATTACK2 || nSwitchMode == PLRMODE_CAST || nSwitchMode == PLRMODE_THROW || nSwitchMode == PLRMODE_SKILL1 || nSwitchMode == PLRMODE_SEQUENCE)
                  if (D2GAME_SkillInterrupt(pGame, pChar) == TRUE)
                     return TRUE;
               
               return FALSE;
            }
         }
      }
   }
   
   return TRUE;
}

Just so you know STATS_SKILL_CONCENTRATION is Chance of Uninterruptable Attack.
Diaco
Mahasattva
908 | 45
Common Love Badge
Earned over 20 cookies
SwineFlu wrote:
Scalewinged wrote:UA is not bugged and esp useful for trap rat in my exp.


I told you already a while ago that game doesn't care about this stat as long as it's not tied to the corresponding state. There is only one place in the code where this stat is queried by the game and this code snippet is definitely related to animation interruption.

I hope your C/C++ knowledge is good enough, otherwise I can post it in assembly language :coolstorybob:

Code: Select all

BOOL __usercall D2GAME_AnimInterrupt(D2GameStrc* pGame, D2UnitStrc* pChar, DWORD nSwitchMode, BOOL bCheckUsedSkill, D2SkillStrc* pActiveSkill)
{
   if (pChar == NULL)
      return FALSE;
   
   if (D2COMMON_CheckState(pChar, STATE_UNINTERRUPTABLE) == TRUE)
      return FALSE;
   
   if (pChar->nAnimMode == PLRMODE_DEATH || pChar->nAnimMode == PLRMODE_DEAD)
      return FALSE;
   
   if (nSwitchMode == PLRMODE_DEATH)
      return TRUE;
   
   if (bCheckUsedSkill == TRUE)
   {
      if (D2SkillStrc* pUsedSkill = D2COMMON_GetUsedSkill(pChar))
      {
         if (D2SkillsTXT* pSkillTxt = D2GAME_GetSkillTxtRecord(D2COMMON_GetSkillIdFromSkill(pUsedSkill, __FILE__, __LINE__)))
         {
            // SrvDoFunc = 67 - Charge, SrvDoFunc = 76 - WhirlWind
            if (pActiveSkill == pUsedSkill && (pSkillTxt->SrvDoFunc == 67 || pSkillTxt->SrvDoFunc == 76))
               return TRUE;
            
            if (pSkillTxt->InterruptFlag == TRUE)
            {
               if (D2COMMON_CheckState(pChar, STATE_CONCENTRATION) == TRUE)
               {
                  D2StatListStrc* pStatList = D2COMMON_GetStatListFromUnitAndState(pChar, STATE_CONCENTRATION);
                  int nConcentrationChance = D2COMMON_GetStatValue(pStatList, STATS_SKILL_CONCENTRATION, 0);
                  if (D2GAME_RandomEngine(&pChar->UnitSeed, 100) < nConcentrationChance)
                  {
                     if (pChar->nAnimMode == PLRMODE_NEUTRAL)
                     {
                        D2GAME_SwitchUnitAnimMode(pGame, pChar, NULL, PLRMODE_NEUTRAL, 0, 0, TRUE);
                        return TRUE;
                     }
                     
                     return FALSE;
                  }
               }
               
               if (D2COMMON_CheckState(pChar, STATE_CONCENTRATE) == TRUE)
               {
                  if (pChar->nAnimMode == PLRMODE_NEUTRAL)
                  {
                     D2GAME_SwitchUnitAnimMode(pGame, pChar, NULL, PLRMODE_NEUTRAL, 0, 0, TRUE);
                     return TRUE;
                  }
                  
                  return FALSE;
               }
            }
            else
            {
               if (pChar->nAnimMode == PLRMODE_NEUTRAL)
               {
                  D2GAME_SwitchUnitAnimMode(pGame, pChar, NULL, PLRMODE_NEUTRAL, 0, 0, TRUE);
                  return TRUE;
               }
               
               if (nSwitchMode == PLRMODE_ATTACK1 || nSwitchMode == PLRMODE_ATTACK2 || nSwitchMode == PLRMODE_CAST || nSwitchMode == PLRMODE_THROW || nSwitchMode == PLRMODE_SKILL1 || nSwitchMode == PLRMODE_SEQUENCE)
                  if (D2GAME_SkillInterrupt(pGame, pChar) == TRUE)
                     return TRUE;
               
               return FALSE;
            }
         }
      }
   }
   
   return TRUE;
}

Just so you know STATS_SKILL_CONCENTRATION is Chance of Uninterruptable Attack.


what does this mean in practical terms? that UA doesn't work? would this be the case in SP mode too?
User avatar
SwineFlu
Heretic
402 | 53
Common Popularity Badge
Has a thread with over 10.000 views
Common Love Badge
Earned over 20 cookies
Diaco wrote:what does this mean in practical terms? that UA doesn't work? would this be the case in SP mode too?


This stat is hardcoded in a very specific way that prevents it from using without the corresponding state. In vanilla d2 it's linked to a Concentration state via Concentration Aura, meanwhile in MXL it's treated as usual item stat like MF. It doesn't matter whether you play in SP, over TCP/IP and I believe that even realm is not an exception.
Diaco
Mahasattva
908 | 45
Common Love Badge
Earned over 20 cookies
SwineFlu wrote:
Diaco wrote:what does this mean in practical terms? that UA doesn't work? would this be the case in SP mode too?


This stat is hardcoded in a very specific way that prevents it from using without the corresponding state. In vanilla d2 it's linked to a Concentration state via Concentration Aura, meanwhile in MXL it's treated as usual item stat like MF. It doesn't matter whether you play in SP, over TCP/IP and I believe that even realm is not an exception.

in short, it doesn't work unless you have the concentration aura?
User avatar
SwineFlu
Heretic
402 | 53
Common Popularity Badge
Has a thread with over 10.000 views
Common Love Badge
Earned over 20 cookies
Diaco wrote:in short, it doesn't work unless you have the concentration aura?


Guess you could say that for the sake of simplicity, although it should be noted that you need to receive this stat from that particular aura, any additional bonus from your equipment is not gonna count towards the total chance. Yeah, I know it's kinda complicated but it is how it is, if anything you should blame Blizzard for that :D
User avatar
Jampula
Shadowgate Totem
1725 | 100
Common Posting Badge
Posted over 1.000 messages
Great Popularity Badge
Has a thread with over 50.000 views
Great Love Badge
Earned over 100 cookies
Common Supporter Badge
Donated 1 time
SwineFlu wrote:
Diaco wrote:in short, it doesn't work unless you have the concentration aura?


Guess you could say that for the sake of simplicity, although it should be noted that you need to receive this stat from that particular aura, any additional bonus from your equipment is not gonna count towards the total chance. Yeah, I know it's kinda complicated but it is how it is, if anything you should blame Blizzard for that :D

That just made it more complicated. So amas Defensive Harmonys UA is useless?

Just for the interest of mechanism, don't really care for the stat. I tested it on Eastern Sun -mod a lot where you can easily reach 100% UA, never noticed any difference in gameplay.

Too weird stat, better to stick standard ones.
Tookmyrole
Skeleton
3 | 0
Hey all,

Quick backround,
As a newer player i started Soft core and have a couple chars in 120 range and havnt “beaten” the game but have always been drawn to HC. Yes ik its a bad idea but i enjoy the playstyle and accept the consequences.

My question: If i decide to over level some of the uber/dungeon areas where you get a charm, is it possible to be locked out and unable to re-enter if your level is to high? If so, which ones?

Searched for a bit couldnt find anything,
Thanks for your time!
EnkerZan
Bone Archer
72 | 0
Common Popularity Badge
Has a thread with over 10.000 views
EnkerZan wrote:So how does reflect damage work? Does it only reflect the base damage dealt or is it the damage dealt after decreases from gear?