From 24595d3565642ddba042105869acef253ab4e0a8 Mon Sep 17 00:00:00 2001 From: galaxyhaxz Date: Tue, 25 Jun 2019 06:33:13 -0500 Subject: [PATCH 1/5] dx_init bin exact (proper fix) --- Source/dx.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Source/dx.cpp b/Source/dx.cpp index fc1fd92f4..471a69a72 100644 --- a/Source/dx.cpp +++ b/Source/dx.cpp @@ -32,9 +32,9 @@ void dx_init(HWND hWnd) SetFocus(hWnd); ShowWindow(hWnd, SW_SHOWNORMAL); - lpGUID = (GUID *)DDCREATE_EMULATIONONLY; - if(!gbEmulate) { - lpGUID = NULL; + lpGUID = NULL; + if(gbEmulate) { + lpGUID = (GUID *)DDCREATE_EMULATIONONLY; } hDDVal = dx_DirectDrawCreate(lpGUID, &lpDDInterface, NULL); if(hDDVal != DD_OK) { @@ -88,9 +88,9 @@ void dx_init(HWND hWnd) #else hDDVal = lpDDInterface->lpVtbl->SetDisplayMode(lpDDInterface, winw, winh, SCREEN_BPP); #endif - if(hDDVal != DD_OK) { - ErrDlg(IDD_DIALOG1, hDDVal, "C:\\Src\\Diablo\\Source\\dx.cpp", 183); - } + } + if(hDDVal != DD_OK) { + ErrDlg(IDD_DIALOG1, hDDVal, "C:\\Src\\Diablo\\Source\\dx.cpp", 183); } } From 138197eb9be2ad71bae6a83d5c71b0288c070991 Mon Sep 17 00:00:00 2001 From: Sergey Semushin Date: Thu, 27 Jun 2019 23:56:39 +0300 Subject: [PATCH 2/5] Fix min diff in gmenu_draw_menu_item. --- Source/gmenu.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Source/gmenu.cpp b/Source/gmenu.cpp index 8b176c200..1c1f6c26e 100644 --- a/Source/gmenu.cpp +++ b/Source/gmenu.cpp @@ -173,18 +173,18 @@ void gmenu_draw() void gmenu_draw_menu_item(TMenuItem *pItem, int y) { - DWORD x, w, nSteps, step, pos; - + DWORD x, w, nSteps, step, pos, t; + t = y - 2; w = gmenu_get_lfont(pItem); if (pItem->dwFlags & GMENU_SLIDER) { x = 16 + w / 2 + SCREEN_X; - CelDecodeOnly(x, y - 10, optbar_cel, 1, 287); + CelDecodeOnly(x, t - 8, optbar_cel, 1, 287); + step = pItem->dwFlags & 0xFFF; nSteps = (pItem->dwFlags & 0xFFF000) >> 12; if (nSteps < 2) nSteps = 2; - step = pItem->dwFlags & 0xFFF; pos = step * 256 / nSteps; - gmenu_clear_buffer(x + 2, y - 12, pos + 13, 28); + gmenu_clear_buffer(x + 2, t - 10, pos + 13, 28); CelDecodeOnly(x + 2 + pos, y - 12, option_cel, 1, 27); } x = SCREEN_WIDTH / 2 - w / 2 + SCREEN_X; From 26932a843f09cc6715cb2ffd09f0766ede1aae98 Mon Sep 17 00:00:00 2001 From: galaxyhaxz Date: Thu, 27 Jun 2019 19:41:41 -0500 Subject: [PATCH 3/5] Fix min diff in PlrHitMonst (#1281) --- Source/player.cpp | 49 ++++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/Source/player.cpp b/Source/player.cpp index ec40ebb2e..7265e597c 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -2292,7 +2292,7 @@ BOOL WeaponDur(int pnum, int durrnd) BOOL PlrHitMonst(int pnum, int m) { BOOL rv, ret; - int hit, hper, mind, maxd, dam, lvl, phanditype, mClass, skdam, tac; + int hit, hper, mind, maxd, ddp, dam, skdam, phanditype, tmac; if ((DWORD)m >= MAXMONSTERS) { app_fatal("PlrHitMonst: illegal monster %d", m); @@ -2321,7 +2321,8 @@ BOOL PlrHitMonst(int pnum, int m) hit = 0; } - hper = (plr[pnum]._pDexterity >> 1) + plr[pnum]._pLevel + 50 - (monster[m].mArmorClass - plr[pnum]._pIEnAc); + tmac = monster[m].mArmorClass - plr[pnum]._pIEnAc; + hper = (plr[pnum]._pDexterity >> 1) + plr[pnum]._pLevel + 50 - tmac; if (plr[pnum]._pClass == PC_WARRIOR) { hper += 20; } @@ -2342,12 +2343,13 @@ BOOL PlrHitMonst(int pnum, int m) if (hit < hper) { #endif mind = plr[pnum]._pIMinDam; - maxd = random(5, plr[pnum]._pIMaxDam - mind + 1); - dam = maxd + mind; - dam += plr[pnum]._pDamageMod + plr[pnum]._pIBonusDamMod + dam * plr[pnum]._pIBonusDam / 100; + maxd = plr[pnum]._pIMaxDam; + dam = random(5, maxd - mind + 1) + mind; + dam += dam * plr[pnum]._pIBonusDam / 100; + dam += plr[pnum]._pDamageMod + plr[pnum]._pIBonusDamMod; if (plr[pnum]._pClass == PC_WARRIOR) { - lvl = plr[pnum]._pLevel; - if (random(6, 100) < lvl) { + ddp = plr[pnum]._pLevel; + if (random(6, 100) < ddp) { dam *= 2; } } @@ -2360,8 +2362,7 @@ BOOL PlrHitMonst(int pnum, int m) phanditype = ITYPE_MACE; } - mClass = monster[m].MData->mMonstClass; - switch (mClass) { + switch (monster[m].MData->mMonstClass) { case MC_UNDEAD: if (phanditype == ITYPE_SWORD) { dam -= dam >> 1; @@ -2384,18 +2385,18 @@ BOOL PlrHitMonst(int pnum, int m) dam *= 3; } - skdam = dam << 6; + dam <<= 6; if (pnum == myplr) { - monster[m]._mhitpoints -= skdam; + monster[m]._mhitpoints -= dam; } if (plr[pnum]._pIFlags & ISPL_RNDSTEALLIFE) { - tac = random(7, skdam >> 3); - plr[pnum]._pHitPoints += tac; + skdam = random(7, dam >> 3); + plr[pnum]._pHitPoints += skdam; if (plr[pnum]._pHitPoints > plr[pnum]._pMaxHP) { plr[pnum]._pHitPoints = plr[pnum]._pMaxHP; } - plr[pnum]._pHPBase += tac; + plr[pnum]._pHPBase += skdam; if (plr[pnum]._pHPBase > plr[pnum]._pMaxHPBase) { plr[pnum]._pHPBase = plr[pnum]._pMaxHPBase; } @@ -2403,16 +2404,16 @@ BOOL PlrHitMonst(int pnum, int m) } if (plr[pnum]._pIFlags & (ISPL_STEALMANA_3 | ISPL_STEALMANA_5) && !(plr[pnum]._pIFlags & ISPL_NOMANA)) { if (plr[pnum]._pIFlags & ISPL_STEALMANA_3) { - tac = 3 * skdam / 100; + skdam = 3 * dam / 100; } if (plr[pnum]._pIFlags & ISPL_STEALMANA_5) { - tac = 5 * skdam / 100; + skdam = 5 * dam / 100; } - plr[pnum]._pMana += tac; + plr[pnum]._pMana += skdam; if (plr[pnum]._pMana > plr[pnum]._pMaxMana) { plr[pnum]._pMana = plr[pnum]._pMaxMana; } - plr[pnum]._pManaBase += tac; + plr[pnum]._pManaBase += skdam; if (plr[pnum]._pManaBase > plr[pnum]._pMaxManaBase) { plr[pnum]._pManaBase = plr[pnum]._pMaxManaBase; } @@ -2420,16 +2421,16 @@ BOOL PlrHitMonst(int pnum, int m) } if (plr[pnum]._pIFlags & (ISPL_STEALLIFE_3 | ISPL_STEALLIFE_5)) { if (plr[pnum]._pIFlags & ISPL_STEALLIFE_3) { - tac = 3 * skdam / 100; + skdam = 3 * dam / 100; } if (plr[pnum]._pIFlags & ISPL_STEALLIFE_5) { - tac = 5 * skdam / 100; + skdam = 5 * dam / 100; } - plr[pnum]._pHitPoints += tac; + plr[pnum]._pHitPoints += skdam; if (plr[pnum]._pHitPoints > plr[pnum]._pMaxHP) { plr[pnum]._pHitPoints = plr[pnum]._pMaxHP; } - plr[pnum]._pHPBase += tac; + plr[pnum]._pHPBase += skdam; if (plr[pnum]._pHPBase > plr[pnum]._pMaxHPBase) { plr[pnum]._pHPBase = plr[pnum]._pMaxHPBase; } @@ -2452,13 +2453,13 @@ BOOL PlrHitMonst(int pnum, int m) } } else { if (monster[m]._mmode == MM_STONE) { - M_StartHit(m, pnum, skdam); + M_StartHit(m, pnum, dam); monster[m]._mmode = MM_STONE; } else { if (plr[pnum]._pIFlags & ISPL_KNOCKBACK) { M_GetKnockback(m); } - M_StartHit(m, pnum, skdam); + M_StartHit(m, pnum, dam); } } rv = TRUE; From fce804a09a770426c5c0c36ccddaf26846639263 Mon Sep 17 00:00:00 2001 From: Joan Karadimov Date: Fri, 28 Jun 2019 11:58:44 +0300 Subject: [PATCH 4/5] Use the dungeon_type enum for leveltype --- Source/gendung.cpp | 2 +- Source/loadsave.cpp | 22 +++++++++++----------- Source/multi.cpp | 2 +- Source/objects.cpp | 4 ++-- Source/portal.cpp | 2 +- Source/themes.cpp | 4 ++-- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Source/gendung.cpp b/Source/gendung.cpp index c56362010..f105ca11d 100644 --- a/Source/gendung.cpp +++ b/Source/gendung.cpp @@ -965,7 +965,7 @@ void InitLevels() { if (!leveldebug) { currlevel = 0; - leveltype = 0; + leveltype = DTYPE_TOWN; setlevel = 0; } } diff --git a/Source/loadsave.cpp b/Source/loadsave.cpp index 48fdf847d..71472eb5b 100644 --- a/Source/loadsave.cpp +++ b/Source/loadsave.cpp @@ -58,7 +58,7 @@ void LoadGame(BOOL firstflag) for (i = 0; i < MAXMONSTERS; i++) monstkills[i] = ILoad(); - if (leveltype) { + if (leveltype != DTYPE_TOWN) { for (i = 0; i < MAXMONSTERS; i++) monstactive[i] = WLoad(); for (i = 0; i < nummonsters; i++) @@ -118,7 +118,7 @@ void LoadGame(BOOL firstflag) dItem[i][j] = BLoad(); } - if (leveltype) { + if (leveltype != DTYPE_TOWN) { for (j = 0; j < MAXDUNY; j++) { for (i = 0; i < MAXDUNX; i++) dMonster[i][j] = WLoad(); @@ -161,7 +161,7 @@ void LoadGame(BOOL firstflag) AutomapZoomReset(); ResyncQuests(); - if (leveltype) + if (leveltype != DTYPE_TOWN) ProcessLightList(); RedoPlayerVision(); @@ -309,7 +309,7 @@ void SaveGame() for (i = 0; i < MAXMONSTERS; i++) ISave(monstkills[i]); - if (leveltype) { + if (leveltype != DTYPE_TOWN) { for (i = 0; i < MAXMONSTERS; i++) WSave(monstactive[i]); for (i = 0; i < nummonsters; i++) @@ -367,7 +367,7 @@ void SaveGame() BSave(dItem[i][j]); } - if (leveltype) { + if (leveltype != DTYPE_TOWN) { for (j = 0; j < MAXDUNY; j++) { for (i = 0; i < MAXDUNX; i++) WSave(dMonster[i][j]); @@ -523,7 +523,7 @@ void SaveLevel() SaveBuff = DiabloAllocPtr(dwLen); tbuff = SaveBuff; - if (leveltype) { + if (leveltype != DTYPE_TOWN) { for (j = 0; j < MAXDUNY; j++) { for (i = 0; i < MAXDUNX; i++) BSave(dDead[i][j]); @@ -534,7 +534,7 @@ void SaveLevel() WSave(numitems); WSave(nobjects); - if (leveltype) { + if (leveltype != DTYPE_TOWN) { for (i = 0; i < MAXMONSTERS; i++) WSave(monstactive[i]); for (i = 0; i < nummonsters; i++) @@ -563,7 +563,7 @@ void SaveLevel() BSave(dItem[i][j]); } - if (leveltype) { + if (leveltype != DTYPE_TOWN) { for (j = 0; j < MAXDUNY; j++) { for (i = 0; i < MAXDUNX; i++) WSave(dMonster[i][j]); @@ -612,7 +612,7 @@ void LoadLevel() LoadBuff = pfile_read(szName, &dwLen); tbuff = LoadBuff; - if (leveltype) { + if (leveltype != DTYPE_TOWN) { for (j = 0; j < MAXDUNY; j++) { for (i = 0; i < MAXDUNX; i++) dDead[i][j] = BLoad(); @@ -624,7 +624,7 @@ void LoadLevel() numitems = WLoad(); nobjects = WLoad(); - if (leveltype) { + if (leveltype != DTYPE_TOWN) { for (i = 0; i < MAXMONSTERS; i++) monstactive[i] = WLoad(); for (i = 0; i < nummonsters; i++) @@ -655,7 +655,7 @@ void LoadLevel() dItem[i][j] = BLoad(); } - if (leveltype) { + if (leveltype != DTYPE_TOWN) { for (j = 0; j < MAXDUNY; j++) { for (i = 0; i < MAXDUNX; i++) dMonster[i][j] = WLoad(); diff --git a/Source/multi.cpp b/Source/multi.cpp index 9366ae861..fe75af292 100644 --- a/Source/multi.cpp +++ b/Source/multi.cpp @@ -778,7 +778,7 @@ void SetupLocalCoords() if (!leveldebug || gbMaxPlayers > 1) { currlevel = 0; - leveltype = 0; + leveltype = DTYPE_TOWN; setlevel = 0; } x = 75; diff --git a/Source/objects.cpp b/Source/objects.cpp index d843ce6b3..1bb94380c 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -134,7 +134,7 @@ BOOL RndLocOk(int xp, int yp) return FALSE; if (nSolidTable[dPiece[xp][yp]]) return FALSE; - if (leveltype != 1 || dPiece[xp][yp] <= 126 || dPiece[xp][yp] >= 144) + if (leveltype != DTYPE_CATHEDRAL || dPiece[xp][yp] <= 126 || dPiece[xp][yp] >= 144) return TRUE; return FALSE; } @@ -829,7 +829,7 @@ void InitObjects() InitRndLocObj(5, 10, 5); InitRndLocObj(3, 6, 6); InitRndLocObj(1, 5, 7); - if (leveltype != 4) + if (leveltype != DTYPE_HELL) AddObjTraps(); if (leveltype > 1u) AddChestTraps(); diff --git a/Source/portal.cpp b/Source/portal.cpp index 620b229f9..dfffa8872 100644 --- a/Source/portal.cpp +++ b/Source/portal.cpp @@ -124,7 +124,7 @@ void GetPortalLevel() setlevel = 0; currlevel = 0; plr[myplr].plrlevel = 0; - leveltype = 0; + leveltype = DTYPE_TOWN; } else { if (portal[portalindex].setlvl) { setlevel = 1; diff --git a/Source/themes.cpp b/Source/themes.cpp index 2cb88b303..db77651f7 100644 --- a/Source/themes.cpp +++ b/Source/themes.cpp @@ -144,7 +144,7 @@ BOOL TFit_SkelRoom(int t) { int i; - if (leveltype != 1 && leveltype != 2) { + if (leveltype != DTYPE_CATHEDRAL && leveltype != DTYPE_CATACOMBS) { return FALSE; } @@ -423,7 +423,7 @@ void InitThemes() } } } - if (leveltype == 2 || leveltype == 3 || leveltype == 4) { + if (leveltype == DTYPE_CATACOMBS || leveltype == DTYPE_CAVES || leveltype == DTYPE_HELL) { for (i = 0; i < themeCount; i++) themes[i].ttype = THEME_NONE; if (QuestStatus(QTYPE_ZHAR)) { From f16bc267fc25b88e795e1e536412e4323f11f815 Mon Sep 17 00:00:00 2001 From: Joan Karadimov Date: Fri, 28 Jun 2019 11:59:11 +0300 Subject: [PATCH 5/5] Use the dungeon_type enum for ReturnLvlT --- Source/quests.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/quests.cpp b/Source/quests.cpp index cd455abdd..bcbaa13a2 100644 --- a/Source/quests.cpp +++ b/Source/quests.cpp @@ -543,25 +543,25 @@ void SetReturnLvlPos() case SL_SKELKING: ReturnLvlX = quests[QTYPE_KING]._qtx + 1; ReturnLvlY = quests[QTYPE_KING]._qty; - ReturnLvlT = 1; + ReturnLvlT = DTYPE_CATHEDRAL; ReturnLvl = quests[QTYPE_KING]._qlevel; break; case SL_BONECHAMB: ReturnLvlX = quests[QTYPE_BONE]._qtx + 1; ReturnLvlY = quests[QTYPE_BONE]._qty; - ReturnLvlT = 2; + ReturnLvlT = DTYPE_CATACOMBS; ReturnLvl = quests[QTYPE_BONE]._qlevel; break; case SL_POISONWATER: ReturnLvlX = quests[QTYPE_PW]._qtx; ReturnLvlY = quests[QTYPE_PW]._qty + 1; - ReturnLvlT = 1; + ReturnLvlT = DTYPE_CATHEDRAL; ReturnLvl = quests[QTYPE_PW]._qlevel; break; case SL_VILEBETRAYER: ReturnLvlX = quests[QTYPE_VB]._qtx + 1; ReturnLvlY = quests[QTYPE_VB]._qty - 1; - ReturnLvlT = 4; + ReturnLvlT = DTYPE_HELL; ReturnLvl = quests[QTYPE_VB]._qlevel; break; }