From 9c0bc202c80ebf13c2900d3a578813abd3c671b2 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Sun, 31 Jan 2021 08:36:06 +0100 Subject: [PATCH] Fix additional wrong checks for monsters lights --- Source/diablo.cpp | 5 ++++- Source/missiles.cpp | 6 +++--- Source/monster.cpp | 18 +++++++++--------- Source/msg.cpp | 2 +- Source/player.cpp | 5 ++--- 5 files changed, 19 insertions(+), 17 deletions(-) diff --git a/Source/diablo.cpp b/Source/diablo.cpp index bc4d53c0e..1494f5081 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -1560,11 +1560,14 @@ static void UpdateMonsterLights() MonsterStruct *mon = &monster[monstactive[i]]; if (mon->mlid != NO_LIGHT) { LightListStruct *lid = &LightList[mon->mlid]; - if (mon->_mx != lid->_lx || mon->_my != lid->_ly){ + if (mon->_mx != lid->_lx || mon->_my != lid->_ly) { ChangeLightXY(mon->mlid, mon->_mx, mon->_my); } } } + + // Handle save games where monster and player both hand lid = 0 + ChangeLightXY(plr[myplr]._plid, plr[myplr]._px, plr[myplr]._py); } void LoadGameLevel(BOOL firstflag, int lvldir) diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 135edb043..1021da5d2 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -3642,20 +3642,20 @@ void MI_Firebolt(int i) AddMissile(missile[i]._mix, missile[i]._miy, i, 0, missile[i]._mimfnum, MIS_EXBL3, missile[i]._micaster, missile[i]._misource, 0, 0); break; } - if (missile[i]._mlid >= 0) + if (missile[i]._mlid != NO_LIGHT) AddUnLight(missile[i]._mlid); PutMissile(i); } else { 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; - if (missile[i]._mlid >= 0) + if (missile[i]._mlid != NO_LIGHT) ChangeLight(missile[i]._mlid, missile[i]._miVar1, missile[i]._miVar2, 8); } PutMissile(i); } } else if (missile[i]._mirange == 0) { - if (missile[i]._mlid >= 0) + if (missile[i]._mlid != NO_LIGHT) AddUnLight(missile[i]._mlid); missile[i]._miDelFlag = TRUE; PlaySfxLoc(LS_BSIMPCT, missile[i]._mix, missile[i]._miy); diff --git a/Source/monster.cpp b/Source/monster.cpp index dcee0ec6f..e101c4d2c 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -1467,7 +1467,7 @@ void M_StartWalk2(int i, int xvel, int yvel, int xoff, int yoff, int xadd, int y monster[i]._mfutx = fx; monster[i]._mfuty = fy; dMonster[fx][fy] = i + 1; - if ((!gbIsHellfire || !(monster[i]._mFlags & MFLAG_HIDDEN)) && monster[i].mlid != 0) + if ((!gbIsHellfire || !(monster[i]._mFlags & MFLAG_HIDDEN)) && monster[i].mlid != NO_LIGHT) ChangeLightXY(monster[i].mlid, monster[i]._mx, monster[i]._my); monster[i]._mxoff = xoff; monster[i]._myoff = yoff; @@ -1489,7 +1489,7 @@ void M_StartWalk3(int i, int xvel, int yvel, int xoff, int yoff, int xadd, int y int x = mapx + monster[i]._mx; int y = mapy + monster[i]._my; - if ((!gbIsHellfire || !(monster[i]._mFlags & MFLAG_HIDDEN)) && monster[i].mlid != 0) + if ((!gbIsHellfire || !(monster[i]._mFlags & MFLAG_HIDDEN)) && monster[i].mlid != NO_LIGHT) ChangeLightXY(monster[i].mlid, x, y); dMonster[monster[i]._mx][monster[i]._my] = -(i + 1); @@ -2019,7 +2019,7 @@ void M_ChangeLightOffset(int monst) } _myoff *= (ly >> 3); - if (monster[monst].mlid) + if (monster[monst].mlid != NO_LIGHT) ChangeLightOff(monster[monst].mlid, _mxoff, _myoff); } @@ -2056,7 +2056,7 @@ BOOL M_DoWalk(int i) monster[i]._mx += monster[i]._mVar1; monster[i]._my += monster[i]._mVar2; dMonster[monster[i]._mx][monster[i]._my] = i + 1; - if ((!gbIsHellfire || !(monster[i]._mFlags & MFLAG_HIDDEN)) && monster[i].mlid != 0) + if ((!gbIsHellfire || !(monster[i]._mFlags & MFLAG_HIDDEN)) && monster[i].mlid != NO_LIGHT) ChangeLightXY(monster[i].mlid, monster[i]._mx, monster[i]._my); M_StartStand(i, monster[i]._mdir); rv = TRUE; @@ -2073,7 +2073,7 @@ BOOL M_DoWalk(int i) rv = FALSE; } - if ((!gbIsHellfire || !(monster[i]._mFlags & MFLAG_HIDDEN)) && monster[i].mlid != 0) + if ((!gbIsHellfire || !(monster[i]._mFlags & MFLAG_HIDDEN)) && monster[i].mlid != NO_LIGHT) M_ChangeLightOffset(i); return rv; @@ -2088,7 +2088,7 @@ BOOL M_DoWalk2(int i) if (monster[i]._mVar8 == monster[i].MType->Anims[MA_WALK].Frames) { dMonster[monster[i]._mVar1][monster[i]._mVar2] = 0; - if ((!gbIsHellfire || !(monster[i]._mFlags & MFLAG_HIDDEN)) && monster[i].mlid != 0) + if ((!gbIsHellfire || !(monster[i]._mFlags & MFLAG_HIDDEN)) && monster[i].mlid != NO_LIGHT) ChangeLightXY(monster[i].mlid, monster[i]._mx, monster[i]._my); M_StartStand(i, monster[i]._mdir); rv = TRUE; @@ -2104,7 +2104,7 @@ BOOL M_DoWalk2(int i) } rv = FALSE; } - if ((!gbIsHellfire || !(monster[i]._mFlags & MFLAG_HIDDEN)) && monster[i].mlid != 0) + if ((!gbIsHellfire || !(monster[i]._mFlags & MFLAG_HIDDEN)) && monster[i].mlid != NO_LIGHT) M_ChangeLightOffset(i); return rv; @@ -2123,7 +2123,7 @@ BOOL M_DoWalk3(int i) monster[i]._my = monster[i]._mVar2; dFlags[monster[i]._mVar4][monster[i]._mVar5] &= ~BFLAG_MONSTLR; dMonster[monster[i]._mx][monster[i]._my] = i + 1; - if ((!gbIsHellfire || !(monster[i]._mFlags & MFLAG_HIDDEN)) && monster[i].mlid != 0) + if ((!gbIsHellfire || !(monster[i]._mFlags & MFLAG_HIDDEN)) && monster[i].mlid != NO_LIGHT) ChangeLightXY(monster[i].mlid, monster[i]._mx, monster[i]._my); M_StartStand(i, monster[i]._mdir); rv = TRUE; @@ -2139,7 +2139,7 @@ BOOL M_DoWalk3(int i) } rv = FALSE; } - if (monster[i].mlid != 0 && (!gbIsHellfire || !(monster[i]._mFlags & MFLAG_HIDDEN))) // BUGFIX: change uniqtype check to mlid check like it is in all other places (fixed) + if (monster[i].mlid != NO_LIGHT && (!gbIsHellfire || !(monster[i]._mFlags & MFLAG_HIDDEN))) // BUGFIX: change uniqtype check to mlid check like it is in all other places (fixed) M_ChangeLightOffset(i); return rv; diff --git a/Source/msg.cpp b/Source/msg.cpp index fcd87ed5f..65b2f34aa 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -2232,7 +2232,7 @@ static DWORD On_PLAYER_JOINLEVEL(TCmd *pCmd, int pnum) } plr[pnum]._pvid = AddVision(plr[pnum]._px, plr[pnum]._py, plr[pnum]._pLightRad, pnum == myplr); - plr[pnum]._plid = -1; + plr[pnum]._plid = NO_LIGHT; } } } diff --git a/Source/player.cpp b/Source/player.cpp index 778640b5f..874cea664 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -1085,7 +1085,7 @@ void InitPlayer(int pnum, BOOL FirstTime) if (pnum == myplr) { plr[pnum]._plid = AddLight(plr[pnum]._px, plr[pnum]._py, plr[pnum]._pLightRad); } else { - plr[pnum]._plid = -1; + plr[pnum]._plid = NO_LIGHT; } plr[pnum]._pvid = AddVision(plr[pnum]._px, plr[pnum]._py, plr[pnum]._pLightRad, pnum == myplr); } @@ -1290,8 +1290,7 @@ void PM_ChangeLightOff(int pnum) app_fatal("PM_ChangeLightOff: illegal player %d", pnum); } - // check if issue is upstream - if (plr[pnum]._plid == -1) + if (plr[pnum]._plid == NO_LIGHT) return; l = &LightList[plr[pnum]._plid];