1. Find your way through the deepest dungeon in the 18th Mini Mapping Contest Poll.
    Dismiss Notice
  2. A brave new world lies beyond the seven seas. Join the 34th Modeling Contest today!
    Dismiss Notice
  3. Check out the Staff job openings thread.
    Dismiss Notice
Dismiss Notice
Hive 3 Remoosed BETA - NOW LIVE. Go check it out at BETA Hive Workshop! Post your feedback in this new forum BETA Feedback.
Dismiss Notice
60,000 passwords have been reset on July 8, 2019. If you cannot login, read this.

[General] Why high hero levels are buggy

Discussion in 'World Editor Help Zone' started by Nestharus, Sep 9, 2011.

  1. Nestharus

    Nestharus

    Joined:
    Jul 10, 2007
    Messages:
    6,146
    Resources:
    8
    Spells:
    3
    Tutorials:
    4
    JASS:
    1
    Resources:
    8
    With default xp settings, at level 6552, the xp is at 2146584576. The reason 6553 turns into 10,000 is because the xp overflows (2^31, or 2147483648 is max).


    xp is stored in an unsigned int. If you look at a level 9268, you see this
    4294734080 out of 693248

    unsigned limit: 4294967296


    so it overflows. The real value is 693248+4294967296


    If you added 233216, it shows
    0 out of 693248


    What this means is that in order to get actual required xp for a given level, you have to do it in this format

    xp+4294967296^power

    However, because integers are signed

    xp+(2^31)^power1+(2^32)^power2

    so you'd have 3 values to represent proper xp.


    When adding xp, it bugs due to overflow errors. If you were to add 2^31-1 xp to a level 1, it would go to level 10,000 due to overflow errors. We saw that level 9268 required 4294734080 xp.

    2147483647 out of
    4294734080

    Clearly, the unit with 2147483647 is not even at level 9268.


    10,000 requires 704825856 xp (bugged overflow). In order to see how wc3 handles the max level, I now add 704825856-1

    resulting level: 3754

    I now add 704825857

    resulting level: 3754 with 704825856 xp

    What this means is that you can only safely add hero max level xp at a time up to when it overflows. However, because it overflows at a level that requires less xp than 2^31, this means that wc3 was coded stupidly. wc3 uses integers when computing levels but stores the actual xp in an unsigned int. This would explain why when adding 704825856 many times results in a level 6502 that is not into its level at all (adding -xp just sends it to minimum xp for level) whereas adding it 3x results in a 6502 that is almost level 6503.



    What this means is that a couple of my own libs do not currently work correctly

    -> UnitStatePercent
    -> SetHeroLevelX


    I will be fixing them though =).



    Now, the next bug to address is why UnitStripHeroLevel gives more -regen than necessary. If you continue to strip down from 10,000, your hero will eventually have -xp (very, very, very strange considering the ints should be unsigned, unless ofc they have an extra bit for the sign).
     
  2. Section

    Section

    Joined:
    Jul 23, 2008
    Messages:
    97
    Resources:
    0
    Resources:
    0
    the question is :

    what makes you use max level to 6553?

    when high values cause overflow, just turn exp gain rate to very low and hero xp bar to very low...

    I think if :

    Level 1 Hero -> 200XP to level 2
    Kill 4 level 1 units to level 2 (50XP per level 1 unit)

    Turn that thing to :
    Level 1 Hero -> 20XP to level 2
    Kill 4 level 1 units to level 2 (5XP per level 1 unit)

    See? If you get some problems with high values, just make it low...
    (ugh.. my english is not good at all...)
     
  3. Nestharus

    Nestharus

    Joined:
    Jul 10, 2007
    Messages:
    6,146
    Resources:
    8
    Spells:
    3
    Tutorials:
    4
    JASS:
    1
    Resources:
    8
    Well, what you are talking about is a full custom xp system. There is no way to fix the wc3 xp system, so I was actually going to make such a system to 100% replace it =).


    For regular units, it'd support up to level 100000 (unit level and point value). For regular units, it could go as high as you want.
     
  4. defskull

    defskull

    Joined:
    Mar 27, 2008
    Messages:
    7,978
    Resources:
    17
    Spells:
    17
    Resources:
    17
    You seemed like a person that likes to answer his own questions, Nestharus.
     
  5. Nestharus

    Nestharus

    Joined:
    Jul 10, 2007
    Messages:
    6,146
    Resources:
    8
    Spells:
    3
    Tutorials:
    4
    JASS:
    1
    Resources:
    8
    This wasn't a question. It was more like an article explaining to everyone how wc3 levels are bugged ;p
     
  6. Troll-Brain

    Troll-Brain

    Joined:
    Apr 27, 2008
    Messages:
    2,413
    Resources:
    1
    JASS:
    1
    Resources:
    1
    Good to know in theory, but failry useless in any real map :p
     
  7. D0W3R

    D0W3R

    Joined:
    Jan 29, 2010
    Messages:
    209
    Resources:
    0
    Resources:
    0
    WOW if your going to make map with 100000lvl and more, than you'll as a result get no free time while balancing the map. I think it may take about years to balance map with so much levels :p
     
  8. defskull

    defskull

    Joined:
    Mar 27, 2008
    Messages:
    7,978
    Resources:
    17
    Spells:
    17
    Resources:
    17
    Guys, please understand.

    Nestharus is not talking about logic, he wants to bypass the hard-coded mechanics by doing custom system, that's all

    Stop talking about logics and stuffs, he knows that it is kinda retard to have Paladin level 9 274 980 but he's just wants to talk/discuss about the possibilities passing this limits.

    Note: Everything has its limit.