diff --git a/Source/player.cpp b/Source/player.cpp index be7b65005..d557af5ea 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -867,56 +867,45 @@ int __fastcall CalcStatDiff(int pnum) void __fastcall NextPlrLevel(int pnum) { - int v1; // edi - int v2; // esi - char *v3; // eax - char v4; // bl - int v5; // eax - char v6; // bl - char v7; // al - signed int v8; // edx - int v9; // ebp - signed int v10; // eax - int v11; // edx - - v1 = pnum; - if ( (unsigned int)pnum >= MAX_PLRS ) + if ( (DWORD)pnum >= MAX_PLRS ) { TermMsg("NextPlrLevel: illegal player %d", pnum); - v2 = v1; - v3 = &plr[v1]._pLevel; - v4 = ++*v3; - ++plr[v2]._pMaxLvl; - if ( CalcStatDiff(v1) >= 5 ) - plr[v2]._pStatPts += 5; - else - plr[v2]._pStatPts = CalcStatDiff(v1); - v5 = v4; - v6 = gbMaxPlayers; - plr[v2]._pNextExper = ExpLvlsTbl[v5]; - v7 = plr[v2]._pClass; - v8 = v7 != 2 ? 128 : 64; - if ( v6 == 1 ) - v8 = v7 != 2 ? 129 : 65; - v9 = myplr; - plr[v2]._pMaxHP += v8; - plr[v2]._pHitPoints = plr[v2]._pMaxHP; - plr[v2]._pMaxHPBase += v8; - plr[v2]._pHPBase = plr[v2]._pMaxHPBase; - if ( v1 == v9 ) + } + + char l = ++plr[pnum]._pLevel; + plr[pnum]._pMaxLvl++; + if ( CalcStatDiff(pnum) < 5 ) { + plr[pnum]._pStatPts = CalcStatDiff(pnum); + } else { + plr[pnum]._pStatPts += 5; + } + + plr[pnum]._pNextExper = ExpLvlsTbl[l]; + + char c = plr[pnum]._pClass; + int hp = c == PC_SORCERER ? 64 : 128; + if ( gbMaxPlayers == 1 ) { + hp++; + } + plr[pnum]._pMaxHP += hp; + plr[pnum]._pHitPoints = plr[pnum]._pMaxHP; + plr[pnum]._pMaxHPBase += hp; + plr[pnum]._pHPBase = plr[pnum]._pMaxHPBase; + if ( pnum == myplr ) { drawhpflag = 1; - v10 = v7 != 0 ? 128 : 64; - if ( v6 == 1 ) - ++v10; - plr[v2]._pMaxMana += v10; - plr[v2]._pMaxManaBase += v10; - v11 = plr[v2]._pMaxManaBase; - if ( !(plr[v1]._pIFlags & 0x8000000) ) - { - plr[v2]._pMana = plr[v2]._pMaxMana; - plr[v2]._pManaBase = v11; } - if ( v1 == v9 ) + int mana = c != PC_WARRIOR ? 128 : 64; + if ( gbMaxPlayers == 1 ) { + ++mana; + } + plr[pnum]._pMaxMana += mana; + plr[pnum]._pMaxManaBase += mana; + if ( !(plr[pnum]._pIFlags & ISPL_NOMANA) ) { + plr[pnum]._pMana = plr[pnum]._pMaxMana; + plr[pnum]._pManaBase = plr[pnum]._pMaxManaBase; + } + if ( pnum == myplr ) { drawmanaflag = 1; + } } // 679660: using guessed type char gbMaxPlayers;