|
|
|
|
@ -1450,7 +1450,7 @@ void AddFireball(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy
|
|
|
|
|
} |
|
|
|
|
if (!mienemy) { |
|
|
|
|
missile[mi]._midam = 2 * (plr[id]._pLevel + random(60, 10) + random(60, 10)) + 4; |
|
|
|
|
for (i = 0; i < missile[mi]._mispllvl; i++) { |
|
|
|
|
for (i = missile[mi]._mispllvl; i > 0; i--) { |
|
|
|
|
missile[mi]._midam += missile[mi]._midam >> 3; |
|
|
|
|
} |
|
|
|
|
i = 2 * missile[mi]._mispllvl + 16; |
|
|
|
|
@ -1566,10 +1566,9 @@ BOOL CheckIfTrig(int x, int y)
|
|
|
|
|
|
|
|
|
|
void AddTown(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, int id, int dam) |
|
|
|
|
{ |
|
|
|
|
int i, j, k, mx, tx, ty; |
|
|
|
|
int i, j, k, mx, tx, ty, dp; |
|
|
|
|
int CrawlNum[6] = { 0, 3, 12, 45, 94, 159 }; |
|
|
|
|
|
|
|
|
|
tx = dx; |
|
|
|
|
if (currlevel) { |
|
|
|
|
missile[mi]._miDelFlag = TRUE; |
|
|
|
|
for (j = 0; j < 6; j++) { |
|
|
|
|
@ -1578,13 +1577,14 @@ void AddTown(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, in
|
|
|
|
|
tx = dx + CrawlTable[k - 1]; |
|
|
|
|
ty = dy + CrawlTable[k]; |
|
|
|
|
if (tx > 0 && tx < MAXDUNX && ty > 0 && ty < MAXDUNY) { |
|
|
|
|
if (!(dObject[tx][ty] | dPlayer[tx][ty] | dMissile[tx][ty] | nSolidTable[dPiece[tx][ty]] | nMissileTable[dPiece[tx][ty]])) { |
|
|
|
|
dp = dPiece[tx][ty]; |
|
|
|
|
if (!(dMissile[tx][ty] | nSolidTable[dp] | nMissileTable[dp] | dObject[tx][ty] | dPlayer[tx][ty])) { |
|
|
|
|
if (!CheckIfTrig(tx, ty)) { |
|
|
|
|
missile[mi]._miDelFlag = FALSE; |
|
|
|
|
missile[mi]._mix = tx; |
|
|
|
|
missile[mi]._miy = ty; |
|
|
|
|
missile[mi]._misx = tx; |
|
|
|
|
missile[mi]._misy = ty; |
|
|
|
|
missile[mi]._miDelFlag = FALSE; |
|
|
|
|
j = 6; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
@ -1594,6 +1594,7 @@ void AddTown(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, in
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
tx = dx; |
|
|
|
|
ty = dy; |
|
|
|
|
missile[mi]._mix = tx; |
|
|
|
|
missile[mi]._miy = ty; |
|
|
|
|
@ -1602,7 +1603,7 @@ void AddTown(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, in
|
|
|
|
|
missile[mi]._miDelFlag = FALSE; |
|
|
|
|
} |
|
|
|
|
missile[mi]._mirange = 100; |
|
|
|
|
missile[mi]._miVar1 = 100 - missile[mi]._miAnimLen; |
|
|
|
|
missile[mi]._miVar1 = missile[mi]._mirange - missile[mi]._miAnimLen; |
|
|
|
|
missile[mi]._miVar2 = 0; |
|
|
|
|
for (i = 0; i < nummissiles; i++) { |
|
|
|
|
mx = missileactive[i]; |
|
|
|
|
@ -1653,7 +1654,7 @@ void AddFlash2(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy,
|
|
|
|
|
for (i = 0; i <= plr[id]._pLevel; i++) { |
|
|
|
|
missile[mi]._midam += random(56, 2) + 1; |
|
|
|
|
} |
|
|
|
|
for (i = 0; i < missile[mi]._mispllvl; i++) { |
|
|
|
|
for (i = missile[mi]._mispllvl; i > 0; i--) { |
|
|
|
|
missile[mi]._midam += missile[mi]._midam >> 3; |
|
|
|
|
} |
|
|
|
|
missile[mi]._midam += missile[mi]._midam >> 1; |
|
|
|
|
@ -1712,12 +1713,12 @@ void AddGuardian(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy
|
|
|
|
|
pn = dPiece[tx][ty]; |
|
|
|
|
if (tx > 0 && tx < MAXDUNX && ty > 0 && ty < MAXDUNY) { |
|
|
|
|
if (LineClear(sx, sy, tx, ty)) { |
|
|
|
|
if (!(dMonster[tx][ty] | dObject[tx][ty] | dMissile[tx][ty] | nSolidTable[pn] | nMissileTable[pn])) { |
|
|
|
|
missile[mi]._miDelFlag = FALSE; |
|
|
|
|
if (!(dMonster[tx][ty] | nSolidTable[pn] | nMissileTable[pn] | dObject[tx][ty] | dMissile[tx][ty])) { |
|
|
|
|
missile[mi]._mix = tx; |
|
|
|
|
missile[mi]._miy = ty; |
|
|
|
|
missile[mi]._misx = tx; |
|
|
|
|
missile[mi]._misy = ty; |
|
|
|
|
missile[mi]._miDelFlag = FALSE; |
|
|
|
|
UseMana(id, SPL_GUARDIAN); |
|
|
|
|
i = 6; |
|
|
|
|
break; |
|
|
|
|
@ -1731,9 +1732,7 @@ void AddGuardian(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy
|
|
|
|
|
if (missile[mi]._miDelFlag != TRUE) { |
|
|
|
|
missile[mi]._misource = id; |
|
|
|
|
missile[mi]._mlid = AddLight(missile[mi]._mix, missile[mi]._miy, 1); |
|
|
|
|
|
|
|
|
|
missile[mi]._mirange = plr[id]._pLevel >> 1; |
|
|
|
|
missile[mi]._mirange += missile[mi]._mispllvl; |
|
|
|
|
missile[mi]._mirange = missile[mi]._mispllvl + (plr[id]._pLevel >> 1); |
|
|
|
|
missile[mi]._mirange += (missile[mi]._mirange * plr[id]._pISplDur) >> 7; |
|
|
|
|
|
|
|
|
|
if (missile[mi]._mirange > 30) |
|
|
|
|
@ -1743,8 +1742,8 @@ void AddGuardian(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy
|
|
|
|
|
missile[mi]._mirange = 30; |
|
|
|
|
|
|
|
|
|
missile[mi]._miVar1 = missile[mi]._mirange - missile[mi]._miAnimLen; |
|
|
|
|
missile[mi]._miVar3 = 1; |
|
|
|
|
missile[mi]._miVar2 = 0; |
|
|
|
|
missile[mi]._miVar3 = 1; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -1901,10 +1900,10 @@ void AddAcid(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, in
|
|
|
|
|
void miss_null_1D(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, int id, int dam) |
|
|
|
|
{ |
|
|
|
|
missile[mi]._midam = dam; |
|
|
|
|
missile[mi]._mirange = 50; |
|
|
|
|
missile[mi]._mixvel = 0; |
|
|
|
|
missile[mi]._miyvel = 0; |
|
|
|
|
missile[mi]._miVar1 = 50 - missile[mi]._miAnimLen; |
|
|
|
|
missile[mi]._mirange = 50; |
|
|
|
|
missile[mi]._miVar1 = missile[mi]._mirange - missile[mi]._miAnimLen; |
|
|
|
|
missile[mi]._miVar2 = 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -1912,12 +1911,12 @@ void AddAcidpud(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy,
|
|
|
|
|
{ |
|
|
|
|
int monst; |
|
|
|
|
|
|
|
|
|
monst = missile[mi]._misource; |
|
|
|
|
missile[mi]._mixvel = 0; |
|
|
|
|
missile[mi]._miyvel = 0; |
|
|
|
|
missile[mi]._mixoff = 0; |
|
|
|
|
missile[mi]._miyoff = 0; |
|
|
|
|
missile[mi]._miLightFlag = TRUE; |
|
|
|
|
monst = missile[mi]._misource; |
|
|
|
|
missile[mi]._mirange = random(50, 15) + 40 * (monster[monst]._mint + 1); |
|
|
|
|
missile[mi]._miPreFlag = TRUE; |
|
|
|
|
} |
|
|
|
|
@ -1999,7 +1998,7 @@ void AddEtherealize(int mi, int sx, int sy, int dx, int dy, int midir, char mien
|
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
missile[mi]._mirange = 16 * plr[id]._pLevel >> 1; |
|
|
|
|
for (i = 0; i < missile[mi]._mispllvl; i++) { |
|
|
|
|
for (i = missile[mi]._mispllvl; i > 0; i--) { |
|
|
|
|
missile[mi]._mirange += missile[mi]._mirange >> 3; |
|
|
|
|
} |
|
|
|
|
missile[mi]._mirange += missile[mi]._mirange * plr[id]._pISplDur >> 7; |
|
|
|
|
@ -2100,7 +2099,7 @@ void AddElement(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy,
|
|
|
|
|
dy += YDirAdd[midir]; |
|
|
|
|
} |
|
|
|
|
missile[mi]._midam = 2 * (plr[id]._pLevel + random(60, 10) + random(60, 10)) + 4; |
|
|
|
|
for (i = 0; i < missile[mi]._mispllvl; i++) { |
|
|
|
|
for (i = missile[mi]._mispllvl; i > 0; i--) { |
|
|
|
|
missile[mi]._midam += missile[mi]._midam >> 3; |
|
|
|
|
} |
|
|
|
|
missile[mi]._midam >>= 1; |
|
|
|
|
@ -2180,7 +2179,7 @@ void AddInfra(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, i
|
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
missile[mi]._mirange = 1584; |
|
|
|
|
for (i = 0; i < missile[mi]._mispllvl; i++) { |
|
|
|
|
for (i = missile[mi]._mispllvl; i > 0; i--) { |
|
|
|
|
missile[mi]._mirange += missile[mi]._mirange >> 3; |
|
|
|
|
} |
|
|
|
|
missile[mi]._mirange += missile[mi]._mirange * plr[id]._pISplDur >> 7; |
|
|
|
|
@ -2206,8 +2205,10 @@ void AddNova(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, in
|
|
|
|
|
missile[mi]._miVar1 = dx; |
|
|
|
|
missile[mi]._miVar2 = dy; |
|
|
|
|
if (id != -1) { |
|
|
|
|
missile[mi]._midam = (random(66, 6) + random(66, 6) + random(66, 6) + random(66, 6) + random(66, 6) + plr[id]._pLevel + 5) >> 1; |
|
|
|
|
for (k = 0; k < missile[mi]._mispllvl; k++) { |
|
|
|
|
missile[mi]._midam = (random(66, 6) + random(66, 6) + random(66, 6) + random(66, 6) + random(66, 6)); |
|
|
|
|
missile[mi]._midam += plr[id]._pLevel + 5; |
|
|
|
|
missile[mi]._midam >>= 1; |
|
|
|
|
for (k = missile[mi]._mispllvl; k > 0; k--) { |
|
|
|
|
missile[mi]._midam += missile[mi]._midam >> 3; |
|
|
|
|
} |
|
|
|
|
if (!mienemy) |
|
|
|
|
@ -2257,24 +2258,24 @@ void AddApoca(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, i
|
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
missile[mi]._miVar1 = 8; |
|
|
|
|
missile[mi]._miVar2 = sy - 8; |
|
|
|
|
missile[mi]._miVar3 = sy + 8; |
|
|
|
|
missile[mi]._miVar4 = sx - 8; |
|
|
|
|
missile[mi]._miVar5 = sx + 8; |
|
|
|
|
missile[mi]._miVar6 = sx - 8; |
|
|
|
|
if (sy - 8 <= 0) |
|
|
|
|
missile[mi]._miVar2 = sy - missile[mi]._miVar1; |
|
|
|
|
missile[mi]._miVar3 = missile[mi]._miVar1 + sy; |
|
|
|
|
missile[mi]._miVar4 = sx - missile[mi]._miVar1; |
|
|
|
|
missile[mi]._miVar5 = missile[mi]._miVar1 + sx; |
|
|
|
|
missile[mi]._miVar6 = missile[mi]._miVar4; |
|
|
|
|
if (missile[mi]._miVar2 <= 0) |
|
|
|
|
missile[mi]._miVar2 = 1; |
|
|
|
|
if (sy + 8 >= MAXDUNY) |
|
|
|
|
if (missile[mi]._miVar3 >= MAXDUNY) |
|
|
|
|
missile[mi]._miVar3 = MAXDUNY - 1; |
|
|
|
|
if (sx - 8 <= 0) |
|
|
|
|
if (missile[mi]._miVar4 <= 0) |
|
|
|
|
missile[mi]._miVar4 = 1; |
|
|
|
|
if (sx + 8 >= MAXDUNX) |
|
|
|
|
if (missile[mi]._miVar5 >= MAXDUNX) |
|
|
|
|
missile[mi]._miVar5 = MAXDUNX - 1; |
|
|
|
|
for (i = 0; i < plr[id]._pLevel; i++) { |
|
|
|
|
missile[mi]._midam += random(67, 6) + 1; |
|
|
|
|
} |
|
|
|
|
missile[mi]._miDelFlag = FALSE; |
|
|
|
|
missile[mi]._mirange = 255; |
|
|
|
|
missile[mi]._miDelFlag = FALSE; |
|
|
|
|
UseMana(id, SPL_APOCA); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -2283,8 +2284,9 @@ void AddFlame(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, i
|
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
missile[mi]._miVar2 = 0; |
|
|
|
|
if (dam > 0) |
|
|
|
|
missile[mi]._miVar2 = 5 * dam; |
|
|
|
|
for (i = dam; i > 0; i--) { |
|
|
|
|
missile[mi]._miVar2 += 5; |
|
|
|
|
} |
|
|
|
|
missile[mi]._misx = dx; |
|
|
|
|
missile[mi]._misy = dy; |
|
|
|
|
missile[mi]._mixoff = missile[midir]._mixoff; |
|
|
|
|
@ -2310,9 +2312,9 @@ void AddFlamec(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy,
|
|
|
|
|
GetMissileVel(mi, sx, sy, dx, dy, 32); |
|
|
|
|
if (!mienemy) |
|
|
|
|
UseMana(id, SPL_FLAME); |
|
|
|
|
missile[mi]._miVar3 = 0; |
|
|
|
|
missile[mi]._miVar2 = sy; |
|
|
|
|
missile[mi]._miVar1 = sx; |
|
|
|
|
missile[mi]._miVar2 = sy; |
|
|
|
|
missile[mi]._miVar3 = 0; |
|
|
|
|
missile[mi]._mirange = 256; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -2529,10 +2531,12 @@ int Sentfire(int i, int sx, int sy)
|
|
|
|
|
missile[i]._miVar3 = missileavail[0]; |
|
|
|
|
AddMissile(missile[i]._mix, missile[i]._miy, sx, sy, dir, MIS_FIREBOLT, 0, missile[i]._misource, missile[i]._midam, GetSpellLevel(missile[i]._misource, SPL_FIREBOLT)); |
|
|
|
|
ex = -1; |
|
|
|
|
SetMissDir(i, 2); |
|
|
|
|
missile[i]._miVar2 = 3; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (ex == -1) { |
|
|
|
|
SetMissDir(i, 2); |
|
|
|
|
missile[i]._miVar2 = 3; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return ex; |
|
|
|
|
} |
|
|
|
|
@ -2774,9 +2778,9 @@ void MI_Lightball(int i)
|
|
|
|
|
char obj; |
|
|
|
|
|
|
|
|
|
tx = missile[i]._miVar1; |
|
|
|
|
missile[i]._mitxoff += missile[i]._mixvel; |
|
|
|
|
ty = missile[i]._miVar2; |
|
|
|
|
missile[i]._mirange--; |
|
|
|
|
missile[i]._mitxoff += missile[i]._mixvel; |
|
|
|
|
missile[i]._mityoff += missile[i]._miyvel; |
|
|
|
|
GetMissilePos(i); |
|
|
|
|
j = missile[i]._mirange; |
|
|
|
|
@ -3195,8 +3199,8 @@ void MI_Etherealize(int i)
|
|
|
|
|
{ |
|
|
|
|
int src; |
|
|
|
|
|
|
|
|
|
src = missile[i]._misource; |
|
|
|
|
missile[i]._mirange--; |
|
|
|
|
src = missile[i]._misource; |
|
|
|
|
missile[i]._mix = plr[src].WorldX; |
|
|
|
|
missile[i]._miy = plr[src].WorldY; |
|
|
|
|
missile[i]._mitxoff = plr[src]._pxoff << 16; |
|
|
|
|
@ -3205,8 +3209,8 @@ void MI_Etherealize(int i)
|
|
|
|
|
missile[i]._misx = plr[src]._px; |
|
|
|
|
missile[i]._misy = plr[src]._py; |
|
|
|
|
} else { |
|
|
|
|
missile[i]._misx = missile[i]._mix; |
|
|
|
|
missile[i]._misy = missile[i]._miy; |
|
|
|
|
missile[i]._misx = plr[src].WorldX; |
|
|
|
|
missile[i]._misy = plr[src].WorldY; |
|
|
|
|
} |
|
|
|
|
GetMissilePos(i); |
|
|
|
|
if (plr[src]._pmode == PM_WALK3) { |
|
|
|
|
@ -3251,7 +3255,7 @@ void MI_Firemove(int i)
|
|
|
|
|
if (missile[i]._mix != missile[i]._miVar3 || missile[i]._miy != missile[i]._miVar4) { |
|
|
|
|
missile[i]._miVar3 = missile[i]._mix; |
|
|
|
|
missile[i]._miVar4 = missile[i]._miy; |
|
|
|
|
ChangeLight(missile[i]._mlid, missile[i]._mix, missile[i]._miy, 8); |
|
|
|
|
ChangeLight(missile[i]._mlid, missile[i]._miVar3, missile[i]._miVar4, 8); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if (!missile[i]._miVar2) |
|
|
|
|
@ -3451,9 +3455,9 @@ void MI_Acidsplat(int i)
|
|
|
|
|
} |
|
|
|
|
missile[i]._mirange--; |
|
|
|
|
if (!missile[i]._mirange) { |
|
|
|
|
missile[i]._miDelFlag = TRUE; |
|
|
|
|
monst = missile[i]._misource; |
|
|
|
|
dam = missile[i]._mispllvl; |
|
|
|
|
missile[i]._miDelFlag = TRUE; |
|
|
|
|
AddMissile(missile[i]._mix, missile[i]._miy, i, 0, missile[i]._mimfnum, MIS_ACIDPUD, 1, monst, (monster[monst].MData->mLevel >= 2) + 1, dam); |
|
|
|
|
} else { |
|
|
|
|
PutMissile(i); |
|
|
|
|
@ -3473,11 +3477,11 @@ void MI_Teleport(int i)
|
|
|
|
|
PlrClrTrans(plr[id].WorldX, plr[id].WorldY); |
|
|
|
|
plr[id].WorldX = missile[i]._mix; |
|
|
|
|
plr[id].WorldY = missile[i]._miy; |
|
|
|
|
plr[id]._px = missile[i]._mix; |
|
|
|
|
plr[id]._py = missile[i]._miy; |
|
|
|
|
plr[id]._poldx = missile[i]._mix; |
|
|
|
|
plr[id]._poldy = missile[i]._miy; |
|
|
|
|
PlrDoTrans(missile[i]._mix, missile[i]._miy); |
|
|
|
|
plr[id]._px = plr[id].WorldX; |
|
|
|
|
plr[id]._py = plr[id].WorldY; |
|
|
|
|
plr[id]._poldx = plr[id].WorldX; |
|
|
|
|
plr[id]._poldy = plr[id].WorldY; |
|
|
|
|
PlrDoTrans(plr[id].WorldX, plr[id].WorldY); |
|
|
|
|
missile[i]._miVar1 = 1; |
|
|
|
|
dPlayer[plr[id].WorldX][plr[id].WorldY] = id + 1; |
|
|
|
|
if (leveltype != DTYPE_TOWN) { |
|
|
|
|
@ -3791,8 +3795,8 @@ void MI_Flame(int i)
|
|
|
|
|
int k; |
|
|
|
|
|
|
|
|
|
missile[i]._mirange--; |
|
|
|
|
k = missile[i]._mirange; |
|
|
|
|
missile[i]._miVar2--; |
|
|
|
|
k = missile[i]._mirange; |
|
|
|
|
CheckMissileCol(i, missile[i]._midam, missile[i]._midam, 1, missile[i]._mix, missile[i]._miy, 0); |
|
|
|
|
if (missile[i]._mirange == 0 && missile[i]._miHitFlag == TRUE) |
|
|
|
|
missile[i]._mirange = k; |
|
|
|
|
@ -3817,8 +3821,8 @@ void MI_Flamec(int i)
|
|
|
|
|
int id, src; |
|
|
|
|
|
|
|
|
|
missile[i]._mirange--; |
|
|
|
|
missile[i]._mitxoff += missile[i]._mixvel; |
|
|
|
|
src = missile[i]._misource; |
|
|
|
|
missile[i]._mitxoff += missile[i]._mixvel; |
|
|
|
|
missile[i]._mityoff += missile[i]._miyvel; |
|
|
|
|
GetMissilePos(i); |
|
|
|
|
if (missile[i]._mix != missile[i]._miVar1 || missile[i]._miy != missile[i]._miVar2) { |
|
|
|
|
@ -3907,7 +3911,7 @@ void MI_Hbolt(int i)
|
|
|
|
|
if (missile[i]._mix != missile[i]._miVar1 || missile[i]._miy != missile[i]._miVar2) { |
|
|
|
|
missile[i]._miVar1 = missile[i]._mix; |
|
|
|
|
missile[i]._miVar2 = missile[i]._miy; |
|
|
|
|
ChangeLight(missile[i]._mlid, missile[i]._mix, missile[i]._miy, 8); |
|
|
|
|
ChangeLight(missile[i]._mlid, missile[i]._miVar1, missile[i]._miVar2, 8); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
|