Browse Source

GetDamageAmt

pull/114/head
galaxyhaxz 7 years ago
parent
commit
d193468f86
  1. 341
      Source/missiles.cpp

341
Source/missiles.cpp

@ -14,78 +14,53 @@ int YDirAdd[8] = { 1, 1, 1, 0, -1, -1, -1, 0 };
void GetDamageAmt(int i, int *mind, int *maxd)
{
int v3; // eax
int v4; // esi
int v5; // eax
int v6; // ecx
int v7; // eax
int *v8; // eax
signed int v9; // ecx
int v10; // eax
int v11; // ecx
int v12; // eax
int v13; // eax
int v14; // eax
int v15; // ecx
int *v16; // ecx
int v17; // eax
int v18; // ecx
int v19; // eax
int v20; // ecx
int v21; // eax
signed int v22; // eax
signed int v23; // ecx
int v24; // eax
int v25; // ecx
int v26; // ecx
int v27; // eax
signed int v28; // ecx
v3 = myplr;
v4 = plr[myplr]._pISplLvlAdd + plr[myplr]._pSplLvl[i];
switch (i) {
int k, sl;
/// ASSERT: assert((DWORD)myplr < MAX_PLRS);
/// ASSERT: assert((DWORD)i < 64);
sl = plr[myplr]._pSplLvl[i] + plr[myplr]._pISplLvlAdd;
switch(i) {
case SPL_FIREBOLT:
*mind = (plr[v3]._pMagic >> 3) + v4 + 1;
v5 = (plr[myplr]._pMagic >> 3) + v4 + 10;
goto LABEL_73;
case SPL_HEAL:
v6 = plr[v3]._pLevel + v4 + 1;
*mind = v6;
v7 = myplr;
if (plr[myplr]._pClass == PC_WARRIOR) {
*mind = 2 * v6;
v7 = myplr;
}
if (plr[v7]._pClass == PC_ROGUE)
*mind = (plr[myplr]._pMagic >> 3) + sl + 1;
*maxd = (plr[myplr]._pMagic >> 3) + sl + 10;
break;
case SPL_HEAL: /// BUGFIX: healing calculation is unused
*mind = plr[myplr]._pLevel + sl + 1;
if(plr[myplr]._pClass == PC_WARRIOR) {
*mind *= 2;
}
if(plr[myplr]._pClass == PC_ROGUE) {
*mind += *mind >> 1;
v8 = maxd;
v9 = 0;
}
*maxd = 10;
if (plr[myplr]._pLevel > 0) {
do {
*maxd += 4;
++v9;
} while (v9 < plr[myplr]._pLevel);
for(k = 0; k < plr[myplr]._pLevel; k++) {
*maxd += 4;
}
for(k = 0; k < sl; k++) {
*maxd += 6;
}
if(plr[myplr]._pClass == PC_WARRIOR) {
*maxd *= 2;
}
goto LABEL_65;
if(plr[myplr]._pClass == PC_ROGUE) {
*maxd += *maxd >> 1;
}
*mind = -1;
*maxd = -1;
break;
case SPL_LIGHTNING:
v10 = 2;
*mind = 2;
v11 = plr[myplr]._pLevel;
goto LABEL_43;
*maxd = plr[myplr]._pLevel + 2;
break;
case SPL_FLASH:
v12 = plr[v3]._pLevel;
*mind = v12;
if (v4 > 0) {
do {
v12 += v12 >> 3;
--v4;
} while (v4);
*mind = v12;
}
v13 = (*mind >> 1) + *mind;
*mind = v13;
goto LABEL_33;
*mind = plr[myplr]._pLevel;
for(k = 0; k < sl; k++) {
*mind += *mind >> 3;
}
*mind += *mind >> 1;
*maxd = *mind * 2;
break;
case SPL_IDENTIFY:
case SPL_TOWN:
case SPL_STONE:
@ -104,183 +79,117 @@ void GetDamageAmt(int i, int *mind, int *maxd)
case SPL_RESURRECT:
case SPL_TELEKINESIS:
case SPL_BONESPIRIT:
v8 = maxd;
goto LABEL_71;
*mind = -1;
*maxd = -1;
break;
case SPL_FIREWALL:
*mind = (4 * plr[v3]._pLevel + 8) >> 1;
v5 = (4 * plr[myplr]._pLevel + 80) >> 1;
goto LABEL_73;
*mind = (4 * plr[myplr]._pLevel + 8) >> 1;
*maxd = (4 * plr[myplr]._pLevel + 80) >> 1;
break;
case SPL_FIREBALL:
v14 = 2 * plr[v3]._pLevel + 4;
*mind = v14;
if (v4 > 0) {
v15 = v4;
do {
v14 += v14 >> 3;
--v15;
} while (v15);
*mind = v14;
}
v16 = maxd;
v5 = 2 * plr[myplr]._pLevel + 40; /// BUGFIX: set to `2 * (plr[myplr]._pLevel + 20) + 4`
*maxd = v5;
if (v4 <= 0)
return;
do {
v5 += v5 >> 3;
--v4;
} while (v4);
goto LABEL_74;
*mind = 2 * plr[myplr]._pLevel + 4;
for(k = 0; k < sl; k++) {
*mind += *mind >> 3;
}
*maxd = 2 * plr[myplr]._pLevel + 40; /// BUGFIX: `2 * (plr[myplr]._pLevel + 20) + 4`
for(k = 0; k < sl; k++) {
*maxd += *maxd >> 3;
}
break;
case SPL_GUARDIAN:
v17 = (plr[v3]._pLevel >> 1) + 1;
*mind = v17;
if (v4 > 0) {
v18 = v4;
do {
v17 += v17 >> 3;
--v18;
} while (v18);
*mind = v17;
}
v16 = maxd;
v5 = (plr[myplr]._pLevel >> 1) + 10;
*maxd = v5;
if (v4 <= 0)
return;
do {
v5 += v5 >> 3;
--v4;
} while (v4);
goto LABEL_74;
*mind = (plr[myplr]._pLevel >> 1) + 1;
for(k = 0; k < sl; k++) {
*mind += *mind >> 3;
}
*maxd = (plr[myplr]._pLevel >> 1) + 10;
for(k = 0; k < sl; k++) {
*maxd += *maxd >> 3;
}
break;
case SPL_CHAIN:
*mind = 4;
v5 = 2 * plr[myplr]._pLevel + 4;
goto LABEL_73;
*maxd = 2 * plr[myplr]._pLevel + 4;
break;
case SPL_WAVE:
*mind = 6 * (plr[v3]._pLevel + 1);
v13 = 3 * (plr[myplr]._pLevel + 10);
LABEL_33:
v5 = 2 * v13;
goto LABEL_73;
*mind = 6 * (plr[myplr]._pLevel + 1);
*maxd = 6 * (plr[myplr]._pLevel + 10);
break;
case SPL_NOVA:
v19 = (plr[v3]._pLevel + 5) >> 1;
*mind = v19;
if (v4 > 0) {
v20 = v4;
do {
v19 += v19 >> 3;
--v20;
} while (v20);
*mind = v19;
}
v16 = maxd;
*mind = (plr[myplr]._pLevel + 5) >> 1;
for(k = 0; k < sl; k++) {
*mind += *mind >> 3;
}
*mind *= 5;
v21 = (plr[myplr]._pLevel + 30) >> 1;
*maxd = v21;
if (v4 > 0) {
do {
v21 += v21 >> 3;
--v4;
} while (v4);
*maxd = v21;
}
v5 = 5 * *maxd;
goto LABEL_74;
*maxd = (plr[myplr]._pLevel + 30) >> 1;
for(k = 0; k < sl; k++) {
*maxd += *maxd >> 3;
}
*maxd *= 5;
break;
case SPL_FLAME:
*mind = 3;
v10 = plr[myplr]._pLevel + 4;
v11 = v10 >> 1;
LABEL_43:
*maxd = v10 + v11;
return;
*maxd = plr[myplr]._pLevel + 4;
*maxd += *maxd >> 1;
break;
case SPL_GOLEM:
*mind = 11;
*maxd = 17;
return;
break;
case SPL_APOCA:
*mind = 0;
v22 = 0;
if (plr[myplr]._pLevel > 0) {
do {
++*mind;
++v22;
} while (v22 < plr[myplr]._pLevel);
}
v23 = 0;
for(k = 0; k < plr[myplr]._pLevel; k++) {
*mind += 1;
}
*maxd = 0;
if (plr[myplr]._pLevel > 0) {
do {
*maxd += 6;
++v23;
} while (v23 < plr[myplr]._pLevel);
for(k = 0; k < plr[myplr]._pLevel; k++) {
*maxd += 6;
}
return;
break;
case SPL_ELEMENT:
v24 = 2 * plr[v3]._pLevel + 4;
*mind = v24;
if (v4 > 0) {
v25 = v4;
do {
v24 += v24 >> 3;
--v25;
} while (v25);
*mind = v24;
}
v16 = maxd;
v5 = 2 * plr[myplr]._pLevel + 40; /// BUGFIX: set to `2 * (plr[myplr]._pLevel + 20) + 4`
*maxd = v5;
if (v4 <= 0)
return;
do {
v5 += v5 >> 3;
--v4;
} while (v4);
goto LABEL_74;
*mind = 2 * plr[myplr]._pLevel + 4;
for(k = 0; k < sl; k++) {
*mind += *mind >> 3;
}
*maxd = 2 * plr[myplr]._pLevel + 40; /// BUGFIX: `2 * (plr[myplr]._pLevel + 20) + 4`
for(k = 0; k < sl; k++) {
*maxd += *maxd >> 3;
}
break;
case SPL_CBOLT:
*mind = 1;
v5 = (plr[myplr]._pMagic >> 2) + 1;
goto LABEL_73;
*maxd = (plr[myplr]._pMagic >> 2) + 1;
break;
case SPL_HBOLT:
*mind = plr[v3]._pLevel + 9;
v5 = plr[myplr]._pLevel + 18;
goto LABEL_73;
case SPL_HEALOTHER:
v26 = plr[v3]._pLevel + v4 + 1;
*mind = v26;
v27 = myplr;
if (plr[myplr]._pClass == PC_WARRIOR) {
*mind = 2 * v26;
v27 = myplr;
}
if (plr[v27]._pClass == PC_ROGUE)
*mind = plr[myplr]._pLevel + 9;
*maxd = plr[myplr]._pLevel + 18;
break;
case SPL_HEALOTHER: /// BUGFIX: healing calculation is unused
*mind = plr[myplr]._pLevel + sl + 1;
if(plr[myplr]._pClass == PC_WARRIOR) {
*mind *= 2;
}
if(plr[myplr]._pClass == PC_ROGUE) {
*mind += *mind >> 1;
v8 = maxd;
v28 = 0;
}
*maxd = 10;
if (plr[myplr]._pLevel > 0) {
do {
*maxd += 4;
++v28;
} while (v28 < plr[myplr]._pLevel);
}
LABEL_65:
if (v4 > 0)
*v8 += 6 * v4;
if (plr[myplr]._pClass == PC_WARRIOR)
*v8 *= 2;
if (plr[myplr]._pClass == PC_ROGUE)
*v8 += *v8 >> 1;
LABEL_71:
for(k = 0; k < plr[myplr]._pLevel; k++) {
*maxd += 4;
}
for(k = 0; k < sl; k++) {
*maxd += 6;
}
if(plr[myplr]._pClass == PC_WARRIOR) {
*maxd *= 2;
}
if(plr[myplr]._pClass == PC_ROGUE) {
*maxd += *maxd >> 1;
}
*mind = -1;
*v8 = -1;
*maxd = -1;
break;
case SPL_FLARE:
v5 = 3 * v4 + (plr[v3]._pMagic >> 1) - (plr[v3]._pMagic >> 3);
*mind = v5;
LABEL_73:
v16 = maxd;
LABEL_74:
*v16 = v5;
*mind = (plr[myplr]._pMagic >> 1) + 3 * sl - (plr[myplr]._pMagic >> 3);
*maxd = *mind;
break;
}
}

Loading…
Cancel
Save