Browse Source

Unify another chunk of Hellfire code

pull/985/head
Anders Jenbo 5 years ago
parent
commit
9894bffc95
  1. 12
      Source/inv.cpp
  2. 7
      Source/mainmenu.cpp
  3. 183
      Source/missiles.cpp

12
Source/inv.cpp

@ -1062,12 +1062,8 @@ void CheckInvPaste(int pnum, int mx, int my)
cn = SwapItem(&plr[pnum].InvBody[INVLOC_HAND_LEFT], &plr[pnum].HoldItem);
break;
}
#ifdef HELLFIRE
NetSendCmdChItem(FALSE, INVLOC_HAND_LEFT);
#else
NetSendCmdDelItem(FALSE, INVLOC_HAND_LEFT);
NetSendCmdChItem(FALSE, INVLOC_HAND_RIGHT);
#endif
SwapItem(&plr[pnum].InvBody[INVLOC_HAND_RIGHT], &plr[pnum].InvBody[INVLOC_HAND_LEFT]);
cn = SwapItem(&plr[pnum].InvBody[INVLOC_HAND_RIGHT], &plr[pnum].HoldItem);
break;
@ -2389,11 +2385,7 @@ void RemoveScroll(int pnum)
for (i = 0; i < plr[pnum]._pNumInv; i++) {
if (plr[pnum].InvList[i]._itype != ITYPE_NONE
&& (plr[pnum].InvList[i]._iMiscId == IMISC_SCROLL || plr[pnum].InvList[i]._iMiscId == IMISC_SCROLLT)
#ifndef HELLFIRE
&& plr[pnum].InvList[i]._iSpell == plr[pnum]._pRSpell) {
#else
&& plr[pnum].InvList[i]._iSpell == plr[pnum]._pSpell) {
#endif
RemoveInvItem(pnum, i);
CalcPlrScrolls(pnum);
return;
@ -2402,11 +2394,7 @@ void RemoveScroll(int pnum)
for (i = 0; i < MAXBELTITEMS; i++) {
if (plr[pnum].SpdList[i]._itype != ITYPE_NONE
&& (plr[pnum].SpdList[i]._iMiscId == IMISC_SCROLL || plr[pnum].SpdList[i]._iMiscId == IMISC_SCROLLT)
#ifndef HELLFIRE
&& plr[pnum].SpdList[i]._iSpell == plr[pnum]._pRSpell) {
#else
&& plr[pnum].SpdList[i]._iSpell == plr[pnum]._pSpell) {
#endif
RemoveSpdBarItem(pnum, i);
CalcPlrScrolls(pnum);
return;

7
Source/mainmenu.cpp

@ -51,11 +51,13 @@ static BOOL mainmenu_init_menu(int type)
static BOOL mainmenu_single_player()
{
#ifdef HELLFIRE
if (!SRegLoadValue("Hellfire", jogging_title, 0, &jogging_opt)) {
jogging_opt = TRUE;
}
#endif
if (!gbIsHellfire) {
jogging_opt = FALSE;
}
gbMaxPlayers = 1;
if (!SRegLoadValue("devilutionx", "game speed", 0, &ticks_per_sec)) {
@ -67,6 +69,7 @@ static BOOL mainmenu_single_player()
static BOOL mainmenu_multi_player()
{
jogging_opt = FALSE;
gbMaxPlayers = MAX_PLRS;
return mainmenu_init_menu(SELHERO_CONNECT);
}

183
Source/missiles.cpp

@ -609,8 +609,7 @@ BOOL MonsterMHit(int pnum, int m, int mindam, int maxdam, int dist, int t, BOOLE
hper -= (dist * dist) >> 1;
#ifdef HELLFIRE
hper -= plr[pnum]._pIEnAc;
#endif
#ifndef HELLFIRE
#else
hper += plr[pnum]._pIEnAc;
#endif
hper += 50;
@ -795,17 +794,13 @@ BOOL PlayerMHit(int pnum, int m, int dist, int mind, int maxd, int mtype, BOOLEA
if (shift == FALSE) {
dam = (mind << 6) + random_(75, (maxd - mind + 1) << 6);
#ifndef HELLFIRE
if (m == -1)
#endif
if (plr[pnum]._pIFlags & ISPL_ABSHALFTRAP)
dam >>= 1;
dam += (plr[pnum]._pIGetHit * 64);
} else {
dam = mind + random_(75, maxd - mind + 1);
#ifndef HELLFIRE
if (m == -1)
#endif
if (plr[pnum]._pIFlags & ISPL_ABSHALFTRAP)
dam >>= 1;
dam += plr[pnum]._pIGetHit;
@ -814,8 +809,7 @@ BOOL PlayerMHit(int pnum, int m, int dist, int mind, int maxd, int mtype, BOOLEA
if (dam < 64)
dam = 64;
}
#ifdef HELLFIRE
if (blk < blkper) {
if ((resper <= 0 || gbIsHellfire) && blk < blkper) {
if (m != -1) {
tac = GetDirection(plr[pnum]._px, plr[pnum]._py, monster[m]._mx, monster[m]._my);
} else {
@ -825,7 +819,6 @@ BOOL PlayerMHit(int pnum, int m, int dist, int mind, int maxd, int mtype, BOOLEA
StartPlrBlock(pnum, tac);
return TRUE;
}
#endif
if (resper > 0) {
dam = dam - dam * resper / 100;
@ -857,34 +850,21 @@ BOOL PlayerMHit(int pnum, int m, int dist, int mind, int maxd, int mtype, BOOLEA
drawhpflag = TRUE;
}
return TRUE;
}
if (pnum == myplr) {
plr[pnum]._pHitPoints -= dam;
plr[pnum]._pHPBase -= dam;
}
if (plr[pnum]._pHitPoints > plr[pnum]._pMaxHP) {
plr[pnum]._pHitPoints = plr[pnum]._pMaxHP;
plr[pnum]._pHPBase = plr[pnum]._pMaxHPBase;
}
if (plr[pnum]._pHitPoints >> 6 <= 0) {
SyncPlrKill(pnum, earflag);
} else {
#ifndef HELLFIRE
if (blk < blkper) {
if (m != -1) {
tac = GetDirection(plr[pnum]._px, plr[pnum]._py, monster[m]._mx, monster[m]._my);
} else {
tac = plr[pnum]._pdir;
}
StartPlrBlock(pnum, tac);
} else
#endif
{
if (pnum == myplr) {
plr[pnum]._pHitPoints -= dam;
plr[pnum]._pHPBase -= dam;
}
if (plr[pnum]._pHitPoints > plr[pnum]._pMaxHP) {
plr[pnum]._pHitPoints = plr[pnum]._pMaxHP;
plr[pnum]._pHPBase = plr[pnum]._pMaxHPBase;
}
if (plr[pnum]._pHitPoints >> 6 <= 0) {
SyncPlrKill(pnum, earflag);
} else {
StartPlrHit(pnum, dam, FALSE);
}
}
return TRUE;
StartPlrHit(pnum, dam, FALSE);
}
return TRUE;
}
return FALSE;
}
@ -1068,8 +1048,7 @@ void CheckMissileCol(int i, int mindam, int maxdam, BOOL shift, int mx, int my,
missile[i]._mitype,
shift,
&blocked)) {
#ifdef HELLFIRE
if (blocked) {
if (gbIsHellfire && blocked) {
dir = missile[i]._mimfnum + (random_(10, 2) ? 1 : -1);
mAnimFAmt = misfiledata[missile[i]._miAnimType].mAnimFAmt;
if (dir < 0)
@ -1078,11 +1057,8 @@ void CheckMissileCol(int i, int mindam, int maxdam, BOOL shift, int mx, int my,
dir = 0;
SetMissDir(i, dir);
} else
#endif
{
if (!nodel)
missile[i]._mirange = 0;
} else if (!nodel) {
missile[i]._mirange = 0;
}
missile[i]._miHitFlag = TRUE;
}
@ -1106,8 +1082,7 @@ void CheckMissileCol(int i, int mindam, int maxdam, BOOL shift, int mx, int my,
shift,
0,
&blocked)) {
#ifdef HELLFIRE
if (blocked) {
if (gbIsHellfire && blocked) {
dir = missile[i]._mimfnum + (random_(10, 2) ? 1 : -1);
mAnimFAmt = misfiledata[missile[i]._miAnimType].mAnimFAmt;
if (dir < 0)
@ -1116,11 +1091,8 @@ void CheckMissileCol(int i, int mindam, int maxdam, BOOL shift, int mx, int my,
dir = 0;
SetMissDir(i, dir);
} else
#endif
{
if (!nodel)
missile[i]._mirange = 0;
} else if (!nodel) {
missile[i]._mirange = 0;
}
missile[i]._miHitFlag = TRUE;
}
@ -1157,8 +1129,7 @@ void CheckMissileCol(int i, int mindam, int maxdam, BOOL shift, int mx, int my,
#endif
,
&blocked)) {
#ifdef HELLFIRE
if (blocked) {
if (gbIsHellfire && blocked) {
dir = missile[i]._mimfnum + (random_(10, 2) ? 1 : -1);
mAnimFAmt = misfiledata[missile[i]._miAnimType].mAnimFAmt;
if (dir < 0)
@ -1167,11 +1138,8 @@ void CheckMissileCol(int i, int mindam, int maxdam, BOOL shift, int mx, int my,
dir = 0;
SetMissDir(i, dir);
} else
#endif
{
if (!nodel)
missile[i]._mirange = 0;
} else if (!nodel) {
missile[i]._mirange = 0;
}
missile[i]._miHitFlag = TRUE;
}
@ -2061,7 +2029,6 @@ void AddLArrow(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy,
dy += YDirAdd[midir];
}
if (mienemy == TARGET_MONSTERS) {
#ifdef HELLFIRE
int av = 32;
if (plr[id]._pClass == PC_ROGUE)
@ -2069,23 +2036,21 @@ void AddLArrow(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy,
else if (plr[id]._pClass == PC_WARRIOR || plr[id]._pClass == PC_BARD)
av += (plr[id]._pLevel) >> 3;
if (plr[id]._pIFlags & ISPL_QUICKATTACK)
av++;
if (plr[id]._pIFlags & ISPL_FASTATTACK)
av += 2;
if (plr[id]._pIFlags & ISPL_FASTERATTACK)
av += 4;
if (plr[id]._pIFlags & ISPL_FASTESTATTACK)
av += 8;
if (gbIsHellfire) {
if (plr[id]._pIFlags & ISPL_QUICKATTACK)
av++;
if (plr[id]._pIFlags & ISPL_FASTATTACK)
av += 2;
if (plr[id]._pIFlags & ISPL_FASTERATTACK)
av += 4;
if (plr[id]._pIFlags & ISPL_FASTESTATTACK)
av += 8;
} else {
if (plr[id]._pClass == PC_ROGUE || plr[id]._pClass == PC_WARRIOR || plr[id]._pClass == PC_BARD)
av -= 1;
}
GetMissileVel(mi, sx, sy, dx, dy, av);
#else
if (plr[id]._pClass == PC_ROGUE)
GetMissileVel(mi, sx, sy, dx, dy, (plr[id]._pLevel >> 2) + 31);
else if (plr[id]._pClass == PC_WARRIOR)
GetMissileVel(mi, sx, sy, dx, dy, (plr[id]._pLevel >> 3) + 31);
else
GetMissileVel(mi, sx, sy, dx, dy, 32);
#endif
} else
GetMissileVel(mi, sx, sy, dx, dy, 32);
@ -2109,26 +2074,20 @@ void AddArrow(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, i
if (plr[id]._pIFlags & ISPL_RNDARROWVEL) {
av = random_(64, 32) + 16;
}
#ifdef HELLFIRE
if (plr[id]._pClass == PC_ROGUE)
av += (plr[id]._pLevel - 1) >> 2;
else if (plr[id]._pClass == PC_WARRIOR || plr[id]._pClass == PC_BARD)
av += (plr[id]._pLevel - 1) >> 3;
if (plr[id]._pIFlags & ISPL_QUICKATTACK)
av++;
if (plr[id]._pIFlags & ISPL_FASTATTACK)
av += 2;
if (plr[id]._pIFlags & ISPL_FASTERATTACK)
av += 4;
if (plr[id]._pIFlags & ISPL_FASTESTATTACK)
av += 8;
#else
if (plr[id]._pClass == PC_ROGUE)
av += (plr[id]._pLevel - 1) >> 2;
if (plr[id]._pClass == PC_WARRIOR)
av += (plr[id]._pLevel - 1) >> 3;
#endif
if (gbIsHellfire) {
if (plr[id]._pIFlags & ISPL_QUICKATTACK)
av++;
if (plr[id]._pIFlags & ISPL_FASTATTACK)
av += 2;
if (plr[id]._pIFlags & ISPL_FASTERATTACK)
av += 4;
if (plr[id]._pIFlags & ISPL_FASTESTATTACK)
av += 8;
}
GetMissileVel(mi, sx, sy, dx, dy, av);
} else {
GetMissileVel(mi, sx, sy, dx, dy, 32);
@ -2243,14 +2202,10 @@ void AddMagmaball(int mi, int sx, int sy, int dx, int dy, int midir, char mienem
missile[mi]._mitxoff += 3 * missile[mi]._mixvel;
missile[mi]._mityoff += 3 * missile[mi]._miyvel;
GetMissilePos(mi);
#ifdef HELLFIRE
if (missile[mi]._mixvel & 0xFFFF0000 || missile[mi]._miyvel & 0xFFFF0000)
if (!gbIsHellfire || missile[mi]._mixvel & 0xFFFF0000 || missile[mi]._miyvel & 0xFFFF0000)
missile[mi]._mirange = 256;
else
missile[mi]._mirange = 1;
#else
missile[mi]._mirange = 256;
#endif
missile[mi]._miVar1 = sx;
missile[mi]._miVar2 = sy;
missile[mi]._mlid = AddLight(sx, sy, 8);
@ -2326,9 +2281,7 @@ void AddFirewall(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy
GetMissileVel(mi, sx, sy, dx, dy, 16);
i = missile[mi]._mispllvl;
missile[mi]._mirange = 10;
#ifndef HELLFIRE
if (i > 0)
#endif
missile[mi]._mirange *= i + 1;
#ifdef HELLFIRE
if (mienemy != TARGET_MONSTERS || id < 0)
@ -2788,14 +2741,10 @@ void AddAcid(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, in
{
GetMissileVel(mi, sx, sy, dx, dy, 16);
SetMissDir(mi, GetDirection16(sx, sy, dx, dy));
#ifdef HELLFIRE
if (missile[mi]._mixvel & 0xFFFF0000 || missile[mi]._miyvel & 0xFFFF0000)
if (!gbIsHellfire && missile[mi]._mixvel & 0xFFFF0000 || missile[mi]._miyvel & 0xFFFF0000)
missile[mi]._mirange = 5 * (monster[id]._mint + 4);
else
missile[mi]._mirange = 1;
#else
missile[mi]._mirange = 5 * (monster[id]._mint + 4);
#endif
missile[mi]._mlid = -1;
missile[mi]._miVar1 = sx;
missile[mi]._miVar2 = sy;
@ -4660,18 +4609,9 @@ void MI_Manashield(int i)
missile[i]._mirange = 0;
if (plr[id]._pHitPoints < missile[i]._miVar1) {
diff = missile[i]._miVar1 - plr[id]._pHitPoints;
#ifdef HELLFIRE
int div = 0;
for (int m = 0; m < missile[i]._mispllvl && m < 7; m++) {
div += 3;
}
if (div > 0)
diff -= diff / div;
#else
if (missile[i]._mispllvl > 0) {
diff += diff / -3;
}
#endif
if (diff < 0)
diff = 0;
@ -4684,13 +4624,8 @@ void MI_Manashield(int i)
plr[id]._pMana -= diff;
plr[id]._pManaBase -= diff;
} else {
#ifdef HELLFIRE
plr[id]._pHitPoints += plr[id]._pMana - diff;
plr[id]._pHPBase += plr[id]._pMana - diff;
#else
plr[id]._pHitPoints = plr[id]._pMana + missile[i]._miVar1 - diff;
plr[id]._pHPBase = plr[id]._pMana + missile[i]._miVar2 - diff;
#endif
plr[id]._pMana = 0;
plr[id]._pManaBase = plr[id]._pMaxManaBase - plr[id]._pMaxMana;
missile[i]._mirange = 0;
@ -4703,13 +4638,12 @@ void MI_Manashield(int i)
}
}
#ifndef HELLFIRE
if (id == myplr && plr[id]._pHitPoints == 0 && missile[i]._miVar1 == 0 && plr[id]._pmode != PM_DEATH) {
missile[i]._mirange = 0;
missile[i]._miDelFlag = TRUE;
SyncPlrKill(id, -1);
}
#endif
missile[i]._miVar1 = plr[id]._pHitPoints;
missile[i]._miVar2 = plr[id]._pHPBase;
if (missile[i]._mirange == 0) {
@ -4944,11 +4878,7 @@ void MI_Weapexp(int i)
void MI_Misexp(int i)
{
#ifdef HELLFIRE
int ExpLight[] = { 9, 10, 11, 12, 11, 10, 8, 6, 4, 2, 1, 0, 0, 0, 0 };
#else
int ExpLight[] = { 9, 10, 11, 12, 11, 10, 8, 6, 4, 2 };
#endif
missile[i]._mirange--;
if (missile[i]._mirange == 0) {
@ -5022,10 +4952,8 @@ void MI_Stone(int i)
missile[i]._mirange--;
m = missile[i]._miVar2;
if (monster[m]._mhitpoints == 0 && missile[i]._miAnimType != MFILE_SHATTER1) {
#ifndef HELLFIRE
missile[i]._mimfnum = 0;
missile[i]._miDrawFlag = TRUE;
#endif
SetMissAnim(i, MFILE_SHATTER1);
missile[i]._mirange = 11;
}
@ -5204,15 +5132,10 @@ void MI_Apoca(int i)
for (j = missile[i]._miVar2; j < missile[i]._miVar3 && !exit; j++) {
for (k = missile[i]._miVar4; k < missile[i]._miVar5 && !exit; k++) {
if (dMonster[k][j] > MAX_PLRS - 1 && !nSolidTable[dPiece[k][j]]) {
#ifdef HELLFIRE
if (LineClear(missile[i]._mix, missile[i]._miy, k, j)) {
if (!gbIsHellfire || LineClear(missile[i]._mix, missile[i]._miy, k, j)) {
AddMissile(k, j, k, j, plr[id]._pdir, MIS_BOOM, TARGET_MONSTERS, id, missile[i]._midam, 0);
exit = TRUE;
}
#else
AddMissile(k, j, k, j, plr[id]._pdir, MIS_BOOM, TARGET_MONSTERS, id, missile[i]._midam, 0);
exit = TRUE;
#endif
}
}
if (!exit) {
@ -5661,10 +5584,8 @@ void ProcessMissiles()
for (i = 0; i < nummissiles; i++) {
dFlags[missile[missileactive[i]]._mix][missile[missileactive[i]]._miy] &= ~BFLAG_MISSILE;
dMissile[missile[missileactive[i]]._mix][missile[missileactive[i]]._miy] = 0;
#ifdef HELLFIRE
if (missile[missileactive[i]]._mix < 0 || missile[missileactive[i]]._mix >= MAXDUNX - 1 || missile[missileactive[i]]._miy < 0 || missile[missileactive[i]]._miy >= MAXDUNY - 1)
missile[missileactive[i]]._miDelFlag = TRUE;
#endif
}
i = 0;

Loading…
Cancel
Save