Browse Source

Fix additional wrong checks for monsters lights

pull/989/head
Anders Jenbo 5 years ago
parent
commit
9c0bc202c8
  1. 5
      Source/diablo.cpp
  2. 6
      Source/missiles.cpp
  3. 18
      Source/monster.cpp
  4. 2
      Source/msg.cpp
  5. 5
      Source/player.cpp

5
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)

6
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);

18
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;

2
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;
}
}
}

5
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];

Loading…
Cancel
Save