Browse Source

Merge pull request #1543 from diasurgical/master

merge master in to hellfire
pull/876/head
Anders Jenbo 7 years ago committed by GitHub
parent
commit
4e1f67233f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 106
      Source/missiles.cpp
  2. 6
      Source/player.cpp
  3. 7
      Source/themes.cpp

106
Source/missiles.cpp

@ -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 {

6
Source/player.cpp

@ -862,8 +862,10 @@ void AddPlrMonstExper(int lvl, int exp, char pmask)
}
}
if (totplrs && (1 << myplr) & pmask) {
AddPlrExperience(myplr, lvl, exp / totplrs);
if (totplrs) {
exp = exp / totplrs;
if (pmask & (1 << myplr))
AddPlrExperience(myplr, lvl, exp);
}
}

7
Source/themes.cpp

@ -734,9 +734,12 @@ void Theme_Library(int t)
}
}
if (!QuestStatus(QTYPE_ZHAR)) {
if (QuestStatus(QTYPE_ZHAR)) {
if (t == zharlib) {
return;
}
PlaceThemeMonsts(t, monstrnd[leveltype]); /// BUGFIX: `leveltype - 1`
} else if (t != zharlib) {
} else {
PlaceThemeMonsts(t, monstrnd[leveltype]); /// BUGFIX: `leveltype - 1`
}
}

Loading…
Cancel
Save