Browse Source

Monster.cpp (#400)

* Clean up hp and mana checks

* Clean up PrepDoEnding
pull/25/head
Anders Jenbo 8 years ago committed by Robin Eklind
parent
commit
8f3d59e513
  1. 2
      Source/control.cpp
  2. 26
      Source/cursor.cpp
  3. 12
      Source/diablo.cpp
  4. 2
      Source/diablo.h
  5. 18
      Source/missiles.cpp
  6. 59
      Source/monster.cpp
  7. 12
      Source/msg.cpp
  8. 6
      Source/multi.cpp
  9. 10
      Source/objects.cpp
  10. 2
      structs.h

2
Source/control.cpp

@ -2930,7 +2930,7 @@ void __fastcall control_drop_gold(int vkey)
char v6[6]; // [esp+8h] [ebp-8h] char v6[6]; // [esp+8h] [ebp-8h]
v1 = vkey; v1 = vkey;
if ( (signed int)(plr[myplr]._pHitPoints & 0xFFFFFFC0) <= 0 ) if ( plr[myplr]._pHitPoints >> 6 <= 0 )
{ {
dropGoldFlag = 0; dropGoldFlag = 0;
dropGoldValue = 0; dropGoldValue = 0;

26
Source/cursor.cpp

@ -1061,7 +1061,7 @@ LABEL_296:
{ {
v17 = v15 <= 0 ? -1 - v15 : v15 - 1; v17 = v15 <= 0 ? -1 - v15 : v15 - 1;
if ( v17 == dword_4B8CCC if ( v17 == dword_4B8CCC
&& (signed int)(monster[v17]._mhitpoints & 0xFFFFFFC0) > 0 && monster[v17]._mhitpoints >> 6 > 0
&& monster[v17].MData->mSelFlag & 4 ) && monster[v17].MData->mSelFlag & 4 )
{ {
v11 = v17; v11 = v17;
@ -1076,7 +1076,7 @@ LABEL_74:
{ {
v19 = v18 <= 0 ? -1 - v18 : v18 - 1; v19 = v18 <= 0 ? -1 - v18 : v18 - 1;
if ( v19 == dword_4B8CCC if ( v19 == dword_4B8CCC
&& (signed int)(monster[v19]._mhitpoints & 0xFFFFFFC0) > 0 && monster[v19]._mhitpoints >> 6 > 0
&& monster[v19].MData->mSelFlag & 4 ) && monster[v19].MData->mSelFlag & 4 )
{ {
v11 = v19; v11 = v19;
@ -1092,7 +1092,7 @@ LABEL_74:
{ {
v21 = v22 <= 0 ? -1 - v22 : v22 - 1; v21 = v22 <= 0 ? -1 - v22 : v22 - 1;
if ( v21 == dword_4B8CCC if ( v21 == dword_4B8CCC
&& (signed int)(monster[v21]._mhitpoints & 0xFFFFFFC0) > 0 && monster[v21]._mhitpoints >> 6 > 0
&& monster[v21].MData->mSelFlag & 2 ) && monster[v21].MData->mSelFlag & 2 )
{ {
cursmx = v6; cursmx = v6;
@ -1108,7 +1108,7 @@ LABEL_74:
{ {
v21 = v20 <= 0 ? -1 - v20 : v20 - 1; v21 = v20 <= 0 ? -1 - v20 : v20 - 1;
if ( v21 == dword_4B8CCC if ( v21 == dword_4B8CCC
&& (signed int)(monster[v21]._mhitpoints & 0xFFFFFFC0) > 0 && monster[v21]._mhitpoints >> 6 > 0
&& monster[v21].MData->mSelFlag & 2 ) && monster[v21].MData->mSelFlag & 2 )
{ {
cursmy = v8; cursmy = v8;
@ -1126,7 +1126,7 @@ LABEL_103:
{ {
v24 = v23 <= 0 ? -1 - v23 : v23 - 1; v24 = v23 <= 0 ? -1 - v23 : v23 - 1;
if ( v24 == dword_4B8CCC if ( v24 == dword_4B8CCC
&& (signed int)(monster[v24]._mhitpoints & 0xFFFFFFC0) > 0 && monster[v24]._mhitpoints >> 6 > 0
&& monster[v24].MData->mSelFlag & 1 ) && monster[v24].MData->mSelFlag & 1 )
{ {
v11 = v24; v11 = v24;
@ -1140,7 +1140,7 @@ LABEL_103:
{ {
v26 = v25 <= 0 ? -1 - v25 : v25 - 1; v26 = v25 <= 0 ? -1 - v25 : v25 - 1;
if ( v26 == dword_4B8CCC if ( v26 == dword_4B8CCC
&& (signed int)(monster[v26]._mhitpoints & 0xFFFFFFC0) > 0 && monster[v26]._mhitpoints >> 6 > 0
&& monster[v26].MData->mSelFlag & 2 ) && monster[v26].MData->mSelFlag & 2 )
{ {
v11 = v26; v11 = v26;
@ -1177,7 +1177,7 @@ LABEL_128:
if ( v32 && dFlags[1][v27 + 2 + v8] & DFLAG_LIT ) if ( v32 && dFlags[1][v27 + 2 + v8] & DFLAG_LIT )
{ {
v30 = v32 <= 0 ? -1 - v32 : v32 - 1; v30 = v32 <= 0 ? -1 - v32 : v32 - 1;
if ( (signed int)(monster[v30]._mhitpoints & 0xFFFFFFC0) > 0 && monster[v30].MData->mSelFlag & 4 ) if ( monster[v30]._mhitpoints >> 6 > 0 && monster[v30].MData->mSelFlag & 4 )
{ {
cursmx = v6 + 1; cursmx = v6 + 1;
v31 = v8 + 2; v31 = v8 + 2;
@ -1192,7 +1192,7 @@ LABEL_128:
if ( v29 && dFlags[2][v27 + 1 + v8] & DFLAG_LIT ) if ( v29 && dFlags[2][v27 + 1 + v8] & DFLAG_LIT )
{ {
v30 = v29 <= 0 ? -1 - v29 : v29 - 1; v30 = v29 <= 0 ? -1 - v29 : v29 - 1;
if ( (signed int)(monster[v30]._mhitpoints & 0xFFFFFFC0) > 0 && monster[v30].MData->mSelFlag & 4 ) if ( monster[v30]._mhitpoints >> 6 > 0 && monster[v30].MData->mSelFlag & 4 )
{ {
cursmx = v6 + 2; cursmx = v6 + 2;
v31 = v8 + 1; v31 = v8 + 1;
@ -1208,7 +1208,7 @@ LABEL_146:
if ( v33 && dFlags[2][v27 + 2 + v8] & DFLAG_LIT ) if ( v33 && dFlags[2][v27 + 2 + v8] & DFLAG_LIT )
{ {
v34 = v33 <= 0 ? -1 - v33 : v33 - 1; v34 = v33 <= 0 ? -1 - v33 : v33 - 1;
if ( (signed int)(monster[v34]._mhitpoints & 0xFFFFFFC0) > 0 && monster[v34].MData->mSelFlag & 4 ) if ( monster[v34]._mhitpoints >> 6 > 0 && monster[v34].MData->mSelFlag & 4 )
{ {
pcursmonst = v34; pcursmonst = v34;
cursmx = v6 + 2; cursmx = v6 + 2;
@ -1221,7 +1221,7 @@ LABEL_146:
if ( v37 && dFlags[0][v27 + 1 + v8] & DFLAG_LIT ) if ( v37 && dFlags[0][v27 + 1 + v8] & DFLAG_LIT )
{ {
v36 = v37 <= 0 ? -1 - v37 : v37 - 1; v36 = v37 <= 0 ? -1 - v37 : v37 - 1;
if ( (signed int)(monster[v36]._mhitpoints & 0xFFFFFFC0) > 0 && monster[v36].MData->mSelFlag & 2 ) if ( monster[v36]._mhitpoints >> 6 > 0 && monster[v36].MData->mSelFlag & 2 )
{ {
cursmx = v6; cursmx = v6;
cursmy = v8 + 1; cursmy = v8 + 1;
@ -1235,7 +1235,7 @@ LABEL_146:
if ( v35 && dFlags[1][v27 + v8] & DFLAG_LIT ) if ( v35 && dFlags[1][v27 + v8] & DFLAG_LIT )
{ {
v36 = v35 <= 0 ? -1 - v35 : v35 - 1; v36 = v35 <= 0 ? -1 - v35 : v35 - 1;
if ( (signed int)(monster[v36]._mhitpoints & 0xFFFFFFC0) > 0 && monster[v36].MData->mSelFlag & 2 ) if ( monster[v36]._mhitpoints >> 6 > 0 && monster[v36].MData->mSelFlag & 2 )
{ {
cursmy = v8; cursmy = v8;
cursmx = v6 + 1; cursmx = v6 + 1;
@ -1250,7 +1250,7 @@ LABEL_172:
if ( v38 && dFlags[0][v27 + v8] & DFLAG_LIT ) if ( v38 && dFlags[0][v27 + v8] & DFLAG_LIT )
{ {
v39 = v38 <= 0 ? -1 - v38 : v38 - 1; v39 = v38 <= 0 ? -1 - v38 : v38 - 1;
if ( (signed int)(monster[v39]._mhitpoints & 0xFFFFFFC0) > 0 && monster[v39].MData->mSelFlag & 1 ) if ( monster[v39]._mhitpoints >> 6 > 0 && monster[v39].MData->mSelFlag & 1 )
{ {
cursmx = v6; cursmx = v6;
cursmy = v8; cursmy = v8;
@ -1261,7 +1261,7 @@ LABEL_172:
if ( v40 && dFlags[1][v27 + 1 + v8] & DFLAG_LIT ) if ( v40 && dFlags[1][v27 + 1 + v8] & DFLAG_LIT )
{ {
v41 = v40 <= 0 ? -1 - v40 : v40 - 1; v41 = v40 <= 0 ? -1 - v40 : v40 - 1;
if ( (signed int)(monster[v41]._mhitpoints & 0xFFFFFFC0) > 0 && monster[v41].MData->mSelFlag & 2 ) if ( monster[v41]._mhitpoints >> 6 > 0 && monster[v41].MData->mSelFlag & 2 )
{ {
pcursmonst = v41; pcursmonst = v41;
cursmx = v6 + 1; cursmx = v6 + 1;

12
Source/diablo.cpp

@ -11,7 +11,7 @@ int MouseY; // idb
int MouseX; // idb int MouseX; // idb
bool gbGameLoopStartup; // idb bool gbGameLoopStartup; // idb
int glSeedTbl[NUMLEVELS]; int glSeedTbl[NUMLEVELS];
int gbRunGame; // weak BOOL gbRunGame; // weak
int glMid3Seed[NUMLEVELS]; int glMid3Seed[NUMLEVELS];
int gbRunGameResult; // weak int gbRunGameResult; // weak
int zoomflag; // weak int zoomflag; // weak
@ -161,7 +161,7 @@ void __fastcall run_game_loop(int uMsg)
saveProc = SetWindowProc(GM_Game); saveProc = SetWindowProc(GM_Game);
control_update_life_mana(); control_update_life_mana();
msg_process_net_packets(); msg_process_net_packets();
gbRunGame = 1; gbRunGame = TRUE;
gbProcessPlayers = 1; gbProcessPlayers = 1;
gbRunGameResult = 1; gbRunGameResult = 1;
drawpanflag = 255; drawpanflag = 255;
@ -181,7 +181,7 @@ void __fastcall run_game_loop(int uMsg)
if ( msg.message == WM_QUIT ) if ( msg.message == WM_QUIT )
{ {
gbRunGameResult = 0; gbRunGameResult = 0;
gbRunGame = 0; gbRunGame = FALSE;
break; break;
} }
TranslateMessage(&msg); TranslateMessage(&msg);
@ -221,7 +221,7 @@ void __fastcall run_game_loop(int uMsg)
free_game(); free_game();
if ( cineflag ) if ( cineflag )
{ {
cineflag = 0; cineflag = FALSE;
DoEnding(); DoEnding();
} }
} }
@ -234,7 +234,7 @@ void __fastcall run_game_loop(int uMsg)
void __fastcall start_game(int uMsg) void __fastcall start_game(int uMsg)
{ {
cineflag = 0; cineflag = FALSE;
zoomflag = 1; zoomflag = 1;
InitCursor(); InitCursor();
InitLightTable(); InitLightTable();
@ -819,7 +819,7 @@ LRESULT __stdcall GM_Game(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case WM_SYSCOMMAND: case WM_SYSCOMMAND:
if ( wParam == SC_CLOSE ) if ( wParam == SC_CLOSE )
{ {
gbRunGame = 0; gbRunGame = FALSE;
gbRunGameResult = 0; gbRunGameResult = 0;
return 0; return 0;
} }

2
Source/diablo.h

@ -11,7 +11,7 @@ extern int MouseY; // idb
extern int MouseX; // idb extern int MouseX; // idb
extern bool gbGameLoopStartup; // idb extern bool gbGameLoopStartup; // idb
extern int glSeedTbl[NUMLEVELS]; extern int glSeedTbl[NUMLEVELS];
extern int gbRunGame; // weak extern BOOL gbRunGame; // weak
extern int glMid3Seed[NUMLEVELS]; extern int glMid3Seed[NUMLEVELS];
extern int gbRunGameResult; // weak extern int gbRunGameResult; // weak
extern int zoomflag; // weak extern int zoomflag; // weak

18
Source/missiles.cpp

@ -1223,7 +1223,7 @@ BOOL __fastcall MonsterTrapHit(int m, int mindam, int maxdam, int dist, int t, i
v6 = m; v6 = m;
v15 = mindam; v15 = mindam;
if ( monster[m].mtalkmsg if ( monster[m].mtalkmsg
|| (signed int)(monster[v6]._mhitpoints & 0xFFFFFFC0) <= 0 || monster[v6]._mhitpoints >> 6 <= 0
|| monster[v6].MType->mtype == MT_ILLWEAV && _LOBYTE(monster[v6]._mgoal) == 2 ) || monster[v6].MType->mtype == MT_ILLWEAV && _LOBYTE(monster[v6]._mgoal) == 2 )
{ {
return 0; return 0;
@ -1269,7 +1269,7 @@ BOOL __fastcall MonsterTrapHit(int m, int mindam, int maxdam, int dist, int t, i
if ( debug_mode_dollar_sign || debug_mode_key_inverted_v ) if ( debug_mode_dollar_sign || debug_mode_key_inverted_v )
monster[v6]._mhitpoints = 0; monster[v6]._mhitpoints = 0;
#endif #endif
if ( (signed int)(monster[v6]._mhitpoints & 0xFFFFFFC0) > 0 ) if ( monster[v6]._mhitpoints >> 6 > 0 )
{ {
if ( v16 ) if ( v16 )
{ {
@ -1327,7 +1327,7 @@ bool __fastcall MonsterMHit(int pnum, int m, int mindam, int maxdam, int dist, i
v8 = monster[m].mtalkmsg == 0; v8 = monster[m].mtalkmsg == 0;
pnuma = pnum; pnuma = pnum;
if ( !v8 if ( !v8
|| (signed int)(monster[v7]._mhitpoints & 0xFFFFFFC0) <= 0 || monster[v7]._mhitpoints >> 6 <= 0
|| t == 53 && monster[v7].MType->mtype != MT_DIABLO && monster[v7].MData->mMonstClass ) || t == 53 && monster[v7].MType->mtype != MT_DIABLO && monster[v7].MData->mMonstClass )
{ {
return 0; return 0;
@ -1422,7 +1422,7 @@ bool __fastcall MonsterMHit(int pnum, int m, int mindam, int maxdam, int dist, i
v22 = plr[v12]._pIFlags; v22 = plr[v12]._pIFlags;
if ( v22 & 8 ) if ( v22 & 8 )
monster[v7]._mFlags |= 8u; monster[v7]._mFlags |= 8u;
if ( (signed int)(monster[v7]._mhitpoints & 0xFFFFFFC0) > 0 ) if ( monster[v7]._mhitpoints >> 6 > 0 )
{ {
if ( v26 ) if ( v26 )
{ {
@ -1496,7 +1496,7 @@ bool __fastcall PlayerMHit(int pnum, int m, int dist, int mind, int maxd, int mt
arglist = pnum; arglist = pnum;
v9 = pnum; v9 = pnum;
v34 = m; v34 = m;
if ( (signed int)(plr[pnum]._pHitPoints & 0xFFFFFFC0) <= 0 if ( plr[pnum]._pHitPoints >> 6 <= 0
|| plr[v9]._pInvincible || plr[v9]._pInvincible
|| plr[v9]._pSpellFlags & 1 && !missiledata[mtype].mType ) || plr[v9]._pSpellFlags & 1 && !missiledata[mtype].mType )
{ {
@ -1644,7 +1644,7 @@ LABEL_50:
plr[v9]._pHitPoints = v30; plr[v9]._pHitPoints = v30;
plr[v9]._pHPBase = plr[v9]._pMaxHPBase; plr[v9]._pHPBase = plr[v9]._pMaxHPBase;
} }
if ( (signed int)(plr[v9]._pHitPoints & 0xFFFFFFC0) > 0 ) if ( plr[v9]._pHitPoints >> 6 > 0 )
{ {
StartPlrHit(arglist, v21, 0); StartPlrHit(arglist, v21, 0);
return 1; return 1;
@ -1664,7 +1664,7 @@ LABEL_50:
plr[v9]._pHitPoints = v26; plr[v9]._pHitPoints = v26;
plr[v9]._pHPBase = plr[v9]._pMaxHPBase; plr[v9]._pHPBase = plr[v9]._pMaxHPBase;
} }
if ( (signed int)(plr[v9]._pHitPoints & 0xFFFFFFC0) <= 0 ) if ( plr[v9]._pHitPoints >> 6 <= 0 )
{ {
LABEL_70: LABEL_70:
SyncPlrKill(v24, earflag); SyncPlrKill(v24, earflag);
@ -4542,7 +4542,7 @@ int __fastcall Sentfire(int i, int sx, int sy)
if ( LineClear(missile[i]._mix, missile[i]._miy, sx, sy) ) if ( LineClear(missile[i]._mix, missile[i]._miy, sx, sy) )
{ {
v7 = dMonster[0][sy + 112 * v4]; v7 = dMonster[0][sy + 112 * v4];
if ( v7 > 0 && (signed int)(monster[v7-1]._mhitpoints & 0xFFFFFFC0) > 0 && v7 - 1 > 3 ) /* fix monstactive */ if ( v7 > 0 && monster[v7-1]._mhitpoints >> 6 > 0 && v7 - 1 > 3 ) /* fix monstactive */
{ {
v8 = GetDirection(missile[v3]._mix, missile[v3]._miy, v4, sy); v8 = GetDirection(missile[v3]._mix, missile[v3]._miy, v4, sy);
v9 = missile[v3]._misource; v9 = missile[v3]._misource;
@ -5668,7 +5668,7 @@ LABEL_26:
plr[v2]._pManaBase = v12; plr[v2]._pManaBase = v12;
if ( v13 ) if ( v13 )
SetPlayerHitPoints(arglist, 0); SetPlayerHitPoints(arglist, 0);
if ( plr[v2]._pHitPoints & 0xFFFFFFC0 ) if ( plr[v2]._pHitPoints >> 6 )
goto LABEL_26; goto LABEL_26;
if ( arglist == myplr ) if ( arglist == myplr )
{ {

59
Source/monster.cpp

@ -3041,7 +3041,7 @@ void __fastcall M_TryM2MHit(int i, int mid, int hper, int mind, int maxd)
v7 = v5; v7 = v5;
if ( !monster[v5].MType ) if ( !monster[v5].MType )
TermMsg("M_TryM2MHit: Monster %d \"%s\" MType NULL", v5, monster[v7].mName); TermMsg("M_TryM2MHit: Monster %d \"%s\" MType NULL", v5, monster[v7].mName);
if ( (signed int)(monster[v7]._mhitpoints & 0xFFFFFFC0) > 0 if ( monster[v7]._mhitpoints >> 6 > 0
&& (monster[v7].MType->mtype != MT_ILLWEAV || _LOBYTE(monster[v7]._mgoal) != 2) ) && (monster[v7].MType->mtype != MT_ILLWEAV || _LOBYTE(monster[v7]._mgoal) != 2) )
{ {
v8 = random(4, 100); v8 = random(4, 100);
@ -3052,7 +3052,7 @@ void __fastcall M_TryM2MHit(int i, int mid, int hper, int mind, int maxd)
{ {
v11 = (mind + random(5, maxd - mind + 1)) << 6; v11 = (mind + random(5, maxd - mind + 1)) << 6;
monster[v7]._mhitpoints -= v11; monster[v7]._mhitpoints -= v11;
if ( (signed int)(monster[v7]._mhitpoints & 0xFFFFFFC0) > 0 ) if ( monster[v7]._mhitpoints >> 6 > 0 )
{ {
if ( monster[v7]._mmode == MM_STONE ) if ( monster[v7]._mmode == MM_STONE )
{ {
@ -3126,7 +3126,7 @@ void __fastcall M_TryH2HHit(int i, int pnum, int Hit, int MinDam, int MaxDam)
return; return;
} }
v7 = plr_num; v7 = plr_num;
if ( (signed int)(plr[plr_num]._pHitPoints & 0xFFFFFFC0) > 0 && !plr[v7]._pInvincible && !(plr[v7]._pSpellFlags & 1) ) if ( plr[plr_num]._pHitPoints >> 6 > 0 && !plr[v7]._pInvincible && !(plr[v7]._pSpellFlags & 1) )
{ {
v8 = abs(monster[v6]._mx - plr[v7].WorldX); v8 = abs(monster[v6]._mx - plr[v7].WorldX);
v9 = abs(monster[v6]._my - plr[v7].WorldY); v9 = abs(monster[v6]._my - plr[v7].WorldY);
@ -3249,7 +3249,7 @@ void __fastcall M_TryH2HHit(int i, int pnum, int Hit, int MinDam, int MaxDam)
{ {
v30 = (random(99, 3) + 1) << 6; v30 = (random(99, 3) + 1) << 6;
monster[v6]._mhitpoints -= v30; monster[v6]._mhitpoints -= v30;
if ( (signed int)(monster[v6]._mhitpoints & 0xFFFFFFC0) > 0 ) if ( monster[v6]._mhitpoints >> 6 > 0 )
M_StartHit(arglist, plr_num, v30); M_StartHit(arglist, plr_num, v30);
else else
M_StartKill(arglist, plr_num); M_StartKill(arglist, plr_num);
@ -3262,7 +3262,7 @@ void __fastcall M_TryH2HHit(int i, int pnum, int Hit, int MinDam, int MaxDam)
plr[v7]._pHitPoints = v31; plr[v7]._pHitPoints = v31;
plr[v7]._pHPBase = plr[v7]._pMaxHPBase; plr[v7]._pHPBase = plr[v7]._pMaxHPBase;
} }
if ( (signed int)(plr[v7]._pHitPoints & 0xFFFFFFC0) > 0 ) if ( plr[v7]._pHitPoints >> 6 > 0 )
{ {
StartPlrHit(plr_num, v29, 0); StartPlrHit(plr_num, v29, 0);
if ( SLOBYTE(monster[v6]._mFlags) < 0 ) if ( SLOBYTE(monster[v6]._mFlags) < 0 )
@ -3858,38 +3858,27 @@ void __cdecl DoEnding()
void __cdecl PrepDoEnding() void __cdecl PrepDoEnding()
{ {
int *v0; // eax
int v1; // ecx
int *v2; // eax
bool v3; // cf
bool v4; // zf
gbSoundOn = sgbSaveSoundOn; gbSoundOn = sgbSaveSoundOn;
gbRunGame = 0; gbRunGame = FALSE;
deathflag = FALSE; deathflag = FALSE;
v0 = &plr[myplr].pDiabloKillLevel; cineflag = TRUE;
v1 = gnDifficulty + 1;
cineflag = 1; DWORD *killLevel = &plr[myplr].pDiabloKillLevel;
if ( *v0 > (unsigned int)(gnDifficulty + 1) ) int newKillLevel = gnDifficulty + 1;
v1 = *v0; if ( *killLevel > newKillLevel )
*v0 = v1; newKillLevel = *killLevel;
v2 = &plr[0]._pHitPoints; plr[myplr].pDiabloKillLevel = newKillLevel;
do
{ for ( int i = 0; i < MAX_PLRS; i++ ) {
v3 = (unsigned char)gbMaxPlayers < 1u; plr[i]._pmode = PM_QUIT;
v4 = gbMaxPlayers == 1; plr[i]._pBlockFlag = TRUE;
*(v2 - 102) = 11; if ( gbMaxPlayers > 1 ) {
*((_BYTE *)v2 - 91) = 1; if ( plr[i]._pHitPoints >> 6 == 0 )
if ( !v3 && !v4 ) plr[i]._pHitPoints = 64;
{ if ( plr[i]._pMana >> 6 == 0 )
if ( !(*v2 & 0xFFFFFFC0) ) plr[i]._pMana = 64;
*v2 = 64;
if ( !(v2[5] & 0xFFFFFFC0) )
v2[5] = 64;
} }
v2 += 5430;
} }
while ( (signed int)v2 < (signed int)&plr[4]._pHitPoints );
} }
// 4A22D5: using guessed type char gbSoundOn; // 4A22D5: using guessed type char gbSoundOn;
// 525650: using guessed type int gbRunGame; // 525650: using guessed type int gbRunGame;
@ -7251,7 +7240,7 @@ void __cdecl ProcessMonsters()
if ( !(monster[v1]._mFlags & 8) ) if ( !(monster[v1]._mFlags & 8) )
{ {
v2 = monster[v1]._mhitpoints; v2 = monster[v1]._mhitpoints;
if ( v2 < monster[v1]._mmaxhp && (signed int)(v2 & 0xFFFFFFC0) > 0 ) if ( v2 < monster[v1]._mmaxhp && v2 >> 6 > 0 )
{ {
v3 = SLOBYTE(monster[v1].mLevel); v3 = SLOBYTE(monster[v1].mLevel);
if ( (char)v3 > 1 ) if ( (char)v3 > 1 )
@ -8005,7 +7994,7 @@ void __fastcall M_FallenFear(int x, int y)
&& v4 && v4
&& abs(x1 - monster[v5]._mx) < 5 && abs(x1 - monster[v5]._mx) < 5
&& abs(y1 - monster[v5]._my) < 5 && abs(y1 - monster[v5]._my) < 5
&& (signed int)(monster[v5]._mhitpoints & 0xFFFFFFC0) > 0 ) && monster[v5]._mhitpoints >> 6 > 0 )
{ {
_LOBYTE(monster[v5]._mgoal) = 2; _LOBYTE(monster[v5]._mgoal) = 2;
monster[v5]._mgoalvar1 = v4; monster[v5]._mgoalvar1 = v4;

12
Source/msg.cpp

@ -3153,7 +3153,7 @@ int __fastcall On_MONSTDAMAGE(struct TCmdLocParam1 *pCmd, int pnum)
{ {
*v6 -= (unsigned short)v3->wParam1; *v6 -= (unsigned short)v3->wParam1;
v7 = &monster[*(unsigned short *)&v3->x]._mhitpoints; v7 = &monster[*(unsigned short *)&v3->x]._mhitpoints;
if ( (signed int)(*v7 & 0xFFFFFFC0) < 64 ) if ( *v7 >> 6 < 64 )
*v7 = 64; *v7 = 64;
delta_monster_hp(*(unsigned short *)&v3->x, monster[*(unsigned short *)&v3->x]._mhitpoints, *v4); delta_monster_hp(*(unsigned short *)&v3->x, monster[*(unsigned short *)&v3->x]._mhitpoints, *v4);
} }
@ -3185,7 +3185,6 @@ int __fastcall On_PLRDAMAGE(struct TCmdDamage *pCmd, int pnum)
{ {
int v2; // edi int v2; // edi
int v3; // eax int v3; // eax
int v4; // esi
int *v5; // esi int *v5; // esi
int v6; // ecx int v6; // ecx
@ -3197,11 +3196,10 @@ int __fastcall On_PLRDAMAGE(struct TCmdDamage *pCmd, int pnum)
if ( gbBufferMsgs != 1 && currlevel == plr[pnum].plrlevel && pCmd->dwDam <= 0x2EE00u ) if ( gbBufferMsgs != 1 && currlevel == plr[pnum].plrlevel && pCmd->dwDam <= 0x2EE00u )
{ {
v3 = myplr; v3 = myplr;
v4 = plr[myplr]._pHitPoints; if ( plr[myplr]._pHitPoints >> 6 > 0 )
if ( (signed int)(v4 & 0xFFFFFFC0) > 0 )
{ {
drawhpflag = TRUE; drawhpflag = TRUE;
plr[v3]._pHitPoints = v4 - pCmd->dwDam; plr[v3]._pHitPoints = plr[myplr]._pHitPoints - pCmd->dwDam;
v5 = &plr[v3]._pHPBase; v5 = &plr[v3]._pHPBase;
*v5 -= pCmd->dwDam; *v5 -= pCmd->dwDam;
v6 = plr[v3]._pMaxHP; v6 = plr[v3]._pMaxHP;
@ -3210,7 +3208,7 @@ int __fastcall On_PLRDAMAGE(struct TCmdDamage *pCmd, int pnum)
plr[v3]._pHitPoints = v6; plr[v3]._pHitPoints = v6;
*v5 = plr[v3]._pMaxHPBase; *v5 = plr[v3]._pMaxHPBase;
} }
if ( (signed int)(plr[v3]._pHitPoints & 0xFFFFFFC0) <= 0 ) if ( plr[v3]._pHitPoints >> 6 <= 0 )
SyncPlrKill(v2, 1); SyncPlrKill(v2, 1);
} }
} }
@ -3463,7 +3461,7 @@ int __fastcall On_PLAYER_JOINLEVEL(struct TCmdLocParam1 *pCmd, int pnum)
{ {
LoadPlrGFX(v2, PFILE_STAND); LoadPlrGFX(v2, PFILE_STAND);
SyncInitPlr(v2); SyncInitPlr(v2);
if ( (signed int)(plr[v4]._pHitPoints & 0xFFFFFFC0) <= 0 ) if ( plr[v4]._pHitPoints >> 6 <= 0 )
{ {
plr[v4]._pgfxnum = 0; plr[v4]._pgfxnum = 0;
LoadPlrGFX(v2, PFILE_DEATH); LoadPlrGFX(v2, PFILE_DEATH);

6
Source/multi.cpp

@ -367,7 +367,7 @@ int __cdecl multi_handle_delta()
if ( gbGameDestroyed ) if ( gbGameDestroyed )
{ {
gbRunGame = 0; gbRunGame = FALSE;
return 0; return 0;
} }
v0 = 0; v0 = 0;
@ -495,7 +495,7 @@ void __cdecl multi_begin_timeout()
} }
else else
{ {
gbRunGame = 0; gbRunGame = FALSE;
} }
} }
} }
@ -1129,7 +1129,7 @@ void __fastcall multi_player_joins(int pnum, TCmdPlrInfoHdr *cmd, int a3)
SyncInitPlr(v3); SyncInitPlr(v3);
if ( plr[v6].plrlevel == currlevel ) if ( plr[v6].plrlevel == currlevel )
{ {
if ( (signed int)(plr[v6]._pHitPoints & 0xFFFFFFC0) <= 0 ) if ( plr[v6]._pHitPoints >> 6 <= 0 )
{ {
plr[v6]._pgfxnum = 0; plr[v6]._pgfxnum = 0;
LoadPlrGFX(v3, PFILE_DEATH); LoadPlrGFX(v3, PFILE_DEATH);

10
Source/objects.cpp

@ -2827,7 +2827,7 @@ void __fastcall Obj_BCrossDamage(int i)
v4 = damage[(unsigned char)leveltype-1]; v4 = damage[(unsigned char)leveltype-1];
plr[v1]._pHitPoints -= v4; plr[v1]._pHitPoints -= v4;
plr[v1]._pHPBase -= v4; plr[v1]._pHPBase -= v4;
if ( (signed int)(plr[v1]._pHitPoints & 0xFFFFFFC0) <= 0 ) if ( plr[v1]._pHitPoints >> 6 <= 0 )
{ {
SyncPlrKill(myplr, 0); SyncPlrKill(myplr, 0);
drawhpflag = TRUE; drawhpflag = TRUE;
@ -5457,12 +5457,12 @@ LABEL_47:
*(int *)((char *)&plr[0]._pMaxManaBase + v7) = v98 - v101; *(int *)((char *)&plr[0]._pMaxManaBase + v7) = v98 - v101;
v105 = v104 - v101; v105 = v104 - v101;
*(int *)((char *)&plr[0]._pMaxMana + v7) = v105; *(int *)((char *)&plr[0]._pMaxMana + v7) = v105;
if ( (signed int)(sfx_idf & 0xFFFFFFC0) <= 0 ) if ( sfx_idf >> 6 <= 0 )
{ {
*(int *)((char *)&plr[0]._pManaBase + v7) = 0; *(int *)((char *)&plr[0]._pManaBase + v7) = 0;
*(int *)((char *)&plr[0]._pMana + v7) = v100; *(int *)((char *)&plr[0]._pMana + v7) = v100;
} }
if ( (signed int)(v105 & 0xFFFFFFC0) <= 0 ) if ( v105 >> 6 <= 0 )
{ {
*(int *)((char *)&plr[0]._pMaxManaBase + v7) = 0; *(int *)((char *)&plr[0]._pMaxManaBase + v7) = 0;
*(int *)((char *)&plr[0]._pMaxMana + v7) = v102; *(int *)((char *)&plr[0]._pMaxMana + v7) = v102;
@ -5586,12 +5586,12 @@ LABEL_47:
*(int *)((char *)&plr[0]._pMaxManaBase + v7) = v117 - v120; *(int *)((char *)&plr[0]._pMaxManaBase + v7) = v117 - v120;
v124 = v123 - v120; v124 = v123 - v120;
*(int *)((char *)&plr[0]._pMaxMana + v7) = v124; *(int *)((char *)&plr[0]._pMaxMana + v7) = v124;
if ( (signed int)(sfx_idg & 0xFFFFFFC0) <= 0 ) if ( sfx_idg >> 6 <= 0 )
{ {
*(int *)((char *)&plr[0]._pManaBase + v7) = 0; *(int *)((char *)&plr[0]._pManaBase + v7) = 0;
*(int *)((char *)&plr[0]._pMana + v7) = v119; *(int *)((char *)&plr[0]._pMana + v7) = v119;
} }
if ( (signed int)(v124 & 0xFFFFFFC0) <= 0 ) if ( v124 >> 6 <= 0 )
{ {
*(int *)((char *)&plr[0]._pMaxManaBase + v7) = 0; *(int *)((char *)&plr[0]._pMaxManaBase + v7) = 0;
*(int *)((char *)&plr[0]._pMaxMana + v7) = v121; *(int *)((char *)&plr[0]._pMaxMana + v7) = v121;

2
structs.h

@ -337,7 +337,7 @@ struct PlayerStruct {
unsigned char pManaShield; unsigned char pManaShield;
char bReserved[3]; char bReserved[3];
short wReserved[8]; short wReserved[8];
int pDiabloKillLevel; DWORD pDiabloKillLevel;
int dwReserved[7]; int dwReserved[7];
unsigned char *_pNData; unsigned char *_pNData;
unsigned char *_pWData; unsigned char *_pWData;

Loading…
Cancel
Save