# [General]Why high hero levels are buggy

Status
Not open for further replies.

#### Nestharus

Level 31
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).

#### Section

Level 4
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...)

#### Nestharus

Level 31
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.

#### defskull

Level 33
You seemed like a person that likes to answer his own questions, Nestharus.

#### Nestharus

Level 31
This wasn't a question. It was more like an article explaining to everyone how wc3 levels are bugged ;p

#### Troll-Brain

Level 17
Good to know in theory, but failry useless in any real map

#### D0W3R

Level 6
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

#### defskull

Level 33

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.

Status
Not open for further replies.

Replies
3
Views
2K
Replies
3
Views
849
Replies
11
Views
1K
Replies
4
Views
867
Replies
3
Views
661