@@ -764,7 +764,6 @@ void __fastcall GetDamageAmt(int i, int *mind, int *maxd)
764764 return ;
765765 }
766766}
767-
768767int __fastcall CheckBlock (int fx, int fy, int tx, int ty)
769768{
770769 int v4; // edi
@@ -1312,7 +1311,33 @@ bool __fastcall MonsterTrapHit(int m, int mindam, int maxdam, int dist, int t, i
13121311 return 1 ;
13131312}
13141313
1315- bool __fastcall MonsterMHit (int pnum, int m, int mindam, int maxdam, int dist, int t, int shift)
1314+
1315+ int CalculateSpellPower (int pnum) {
1316+ int power = 50 ;
1317+ int activeSpellType = plr[pnum]._pRSplType ;
1318+ int magPower = (plr[pnum]._pMagic / 5 );
1319+ int spellLevel = plr[myplr]._pSplLvl [plr[pnum]._pRSpell ] + plr[myplr]._pISplLvlAdd ;
1320+
1321+ power += 5 * spellLevel;
1322+
1323+ power += magPower;
1324+ int hpPercent = (plr[pnum]._pHPPer * 10 ) / 8 ;
1325+ int reverseHpPercent = 100 - hpPercent;
1326+ if (plr[pnum].pManaShield ) {
1327+ power = power * 3 / 4 ;
1328+ power = (power*hpPercent*hpPercent)/10000 ;
1329+ }
1330+ if (!plr[pnum].pManaShield ) {
1331+ power += (power*reverseHpPercent) / 200 ;
1332+ }
1333+
1334+ if (activeSpellType == 2 || activeSpellType == 3 ) {
1335+ power = power * 3 / 2 ;
1336+ }
1337+ return power;
1338+ }
1339+
1340+ bool __fastcall MonsterMissileHit (int pnum, int m, int mindam, int maxdam, int dist, int t, int shift)
13161341{
13171342 int v7; // edi
13181343 bool v8; // zf
@@ -1410,9 +1435,9 @@ bool __fastcall MonsterMHit(int pnum, int m, int mindam, int maxdam, int dist, i
14101435 if (v25 >= v13)
14111436 return 0 ;
14121437#endif
1413- if (t == 63 )
1438+ if (t == MIS_BONESPIRIT )
14141439 {
1415- v19 = monster[v7]._mhitpoints / 3 >> 6 ;
1440+ v19 = monster[v7]._mhitpoints / 8 >> 6 ;
14161441 }
14171442 else
14181443 {
@@ -1431,6 +1456,9 @@ bool __fastcall MonsterMHit(int pnum, int m, int mindam, int maxdam, int dist, i
14311456 if (plr[v12]._pIFlags & 0x40000000 && monster[v7].MData ->mMonstClass == 1 ) {// civerb affix for missiles
14321457 v19 *= 3 ;
14331458 }
1459+ if (t != MIS_ARROW) {
1460+ v19 = (v19*CalculateSpellPower (pnum))/100 ;
1461+ }
14341462
14351463
14361464 if (!(_BYTE)shift)
@@ -1486,7 +1514,7 @@ bool __fastcall MonsterMHit(int pnum, int m, int mindam, int maxdam, int dist, i
14861514 return 1 ;
14871515}
14881516
1489- bool __fastcall PlayerMHit (int pnum, int m, int dist, int mind, int maxd, int mtype, int shift, int earflag)
1517+ bool __fastcall PlayerMissileHit (int pnum, int m, int dist, int mind, int maxd, int mtype, int shift, int earflag)
14901518{
14911519 int v8; // ebx
14921520 int v9; // esi
@@ -1527,6 +1555,12 @@ bool __fastcall PlayerMHit(int pnum, int m, int dist, int mind, int maxd, int mt
15271555 {
15281556 return 0 ;
15291557 }
1558+
1559+ if (mtype == MIS_FIREMOVE && m == -1 ) {
1560+ return 0 ;
1561+ }
1562+
1563+
15301564 v10 = 100 ;
15311565 v32 = random (72 , 100 );
15321566#ifdef _DEBUG
@@ -2095,7 +2129,7 @@ void __fastcall CheckMissileCol(int i, int mindam, int maxdam, bool shift, int m
20952129 {
20962130 v28 = missile[v8]._mitype ;
20972131 v27 = missile[v8]._midist ;
2098- v22 = v9 == 4 ? MonsterMHit (missile[v8]._misource , v21 - 1 , v7, maxdam, v27, v28, shift) : MonsterTrapHit (v21 - 1 , v7, maxdam, v27, v28, shift);
2132+ v22 = v9 == 4 ? MonsterMissileHit (missile[v8]._misource , v21 - 1 , v7, maxdam, v27, v28, shift) : MonsterTrapHit (v21 - 1 , v7, maxdam, v27, v28, shift);
20992133 if (v22)
21002134 {
21012135 if (!(_BYTE)nodel)
@@ -2107,15 +2141,7 @@ void __fastcall CheckMissileCol(int i, int mindam, int maxdam, bool shift, int m
21072141 v23 = getImprovedMissilePlayer (mx, my);
21082142 if (v23 > 0 )
21092143 {
2110- v17 = PlayerMHit (
2111- v23 - 1 ,
2112- -1 ,
2113- missile[v8]._midist ,
2114- v7,
2115- maxdam,
2116- missile[v8]._mitype ,
2117- shift,
2118- _LOBYTE (missile[v8]._miAnimType ) == 4 );
2144+ v17 = PlayerMissileHit (v23 - 1 ,-1 ,missile[v8]._midist ,v7,maxdam,missile[v8]._mitype ,shift,_LOBYTE (missile[v8]._miAnimType ) == 4 );
21192145 LABEL_35:
21202146 if (v17)
21212147 {
@@ -2156,11 +2182,11 @@ void __fastcall CheckMissileCol(int i, int mindam, int maxdam, bool shift, int m
21562182 shift);
21572183 goto LABEL_35;
21582184 }
2159- v13 = MonsterMHit (v10,-1 - v12,mindama,maxdam,missile[v8]._midist ,missile[v8]._mitype ,shift);
2185+ v13 = MonsterMissileHit (v10,-1 - v12,mindama,maxdam,missile[v8]._midist ,missile[v8]._mitype ,shift);
21602186 }
21612187 else
21622188 {
2163- v13 = MonsterMHit (v10, v12 - 1 , v7, maxdam, missile[v8]._midist , missile[v8]._mitype , shift);
2189+ v13 = MonsterMissileHit (v10, v12 - 1 , v7, maxdam, missile[v8]._midist , missile[v8]._mitype , shift);
21642190 }
21652191 if (v13)
21662192 {
@@ -2199,15 +2225,7 @@ void __fastcall CheckMissileCol(int i, int mindam, int maxdam, bool shift, int m
21992225 v20 = getImprovedMissilePlayer (mx, my);
22002226 if (v20 > 0 )
22012227 {
2202- v17 = PlayerMHit (
2203- v20 - 1 ,
2204- missile[v8]._misource ,
2205- missile[v8]._midist ,
2206- mindama,
2207- maxdam,
2208- missile[v8]._mitype ,
2209- shift,
2210- 0 );
2228+ v17 = PlayerMissileHit (v20 - 1 ,missile[v8]._misource ,missile[v8]._midist ,mindama,maxdam,missile[v8]._mitype ,shift,0 );
22112229 goto LABEL_35;
22122230 }
22132231 }
@@ -7380,7 +7398,8 @@ void __fastcall MI_Bonespirit(int i)
73807398 v9 = v8;
73817399 v10 = monster[v8]._my ;
73827400 v11 = monster[v8]._mx ;
7383- missile[v2]._midam = monster[v8]._mhitpoints >> 7 ;
7401+ // missile[v2]._midam = monster[v8]._mhitpoints >> 7;
7402+ missile[v2]._midam = monster[v8]._mhitpoints >> 9 ; // bone spirit nerf?
73847403 v12 = GetDirection8 (v7, y1, v11, v10);
73857404 SetMissDir (ia, v12);
73867405 GetMissileVel (ia, v7, y1, monster[v9]._mx , monster[v9]._my , 16 );
0 commit comments