From c384711a5f5e461cbfa36178d4779fb5e5ede567 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Wed, 8 Apr 2020 20:16:32 +0200 Subject: [PATCH] Backport cleanups from hellfire branch --- Source/appfat.cpp | 2 +- Source/control.cpp | 12 +++-- Source/cursor.cpp | 14 ++--- Source/cursor.h | 8 +-- Source/diablo.cpp | 35 ++++++------ Source/diablo.h | 2 +- Source/drlg_l2.cpp | 2 +- Source/drlg_l2.h | 2 +- Source/drlg_l4.cpp | 6 +-- Source/drlg_l4.h | 6 +-- Source/effects.cpp | 7 +-- Source/error.cpp | 4 +- Source/error.h | 2 +- Source/gamemenu.cpp | 23 +++----- Source/gendung.cpp | 110 +++++++++++++++++++------------------- Source/gendung.h | 96 +++++++++++++++++---------------- Source/inv.cpp | 5 +- Source/itemdat.cpp | 2 +- Source/items.cpp | 28 +++++----- Source/items.h | 10 ++-- Source/lighting.cpp | 3 +- Source/monster.cpp | 80 ++++++++++++++-------------- Source/monster.h | 1 + Source/mpqapi.cpp | 8 +-- Source/multi.cpp | 2 +- Source/objects.cpp | 126 +++++++++++++++++++++----------------------- Source/palette.cpp | 8 +-- Source/player.cpp | 82 +++++++++++++++------------- Source/quests.cpp | 2 +- Source/quests.h | 2 +- Source/scrollrt.cpp | 2 - Source/sound.cpp | 4 +- Source/textdat.cpp | 2 +- Source/textdat.h | 2 +- Source/towners.cpp | 62 ++++++++++++---------- Source/towners.h | 2 +- defs.h | 2 + enums.h | 5 +- 38 files changed, 388 insertions(+), 383 deletions(-) diff --git a/Source/appfat.cpp b/Source/appfat.cpp index d6ccf73d7..f18c51742 100644 --- a/Source/appfat.cpp +++ b/Source/appfat.cpp @@ -523,7 +523,7 @@ void __cdecl DrawDlg(char *pszFmt, ...) va_start(arglist, pszFmt); wvsprintf(text, pszFmt, arglist); va_end(arglist); - SDrawMessageBox(text, "Diablo", MB_TASKMODAL | MB_ICONEXCLAMATION); + SDrawMessageBox(text, APP_NAME, MB_TASKMODAL | MB_ICONEXCLAMATION); } #ifdef _DEBUG diff --git a/Source/control.cpp b/Source/control.cpp index de19d6716..016b40f4a 100644 --- a/Source/control.cpp +++ b/Source/control.cpp @@ -1136,9 +1136,12 @@ void DrawFlask(BYTE *pCelBuff, int w, int nSrcOff, BYTE *pBuff, int nDstOff, int */ void DrawLifeFlask() { - int filled = (double)plr[myplr]._pHitPoints / (double)plr[myplr]._pMaxHP * 80.0; - plr[myplr]._pHPPer = filled; + double p; + int filled; + p = (double)plr[myplr]._pHitPoints / (double)plr[myplr]._pMaxHP * 80.0; + plr[myplr]._pHPPer = p; + filled = plr[myplr]._pHPPer; if (filled > 80) filled = 80; filled = 80 - filled; @@ -1158,7 +1161,10 @@ void DrawLifeFlask() */ void UpdateLifeFlask() { - int filled = (double)plr[myplr]._pHitPoints / (double)plr[myplr]._pMaxHP * 80.0; + double p; + int filled; + p = (double)plr[myplr]._pHitPoints / (double)plr[myplr]._pMaxHP * 80.0; + filled = p; plr[myplr]._pHPPer = filled; if (filled > 69) diff --git a/Source/cursor.cpp b/Source/cursor.cpp index 66c70a3bf..577b08d7b 100644 --- a/Source/cursor.cpp +++ b/Source/cursor.cpp @@ -5,17 +5,17 @@ */ #include "all.h" -int cursH; -int icursH28; int cursW; +int cursH; int pcursmonst; int icursW28; +int icursH28; BYTE *pCursCels; -int icursH; /** inv_item value */ char pcursinvitem; int icursW; +int icursH; char pcursitem; char pcursobj; char pcursplr; @@ -26,7 +26,7 @@ int pcurs; /* rdata */ /** Maps from objcurs.cel frame number to frame width. */ -const int InvItemWidth[180] = { +const int InvItemWidth[] = { // Cursors 0, 33, 32, 32, 32, 32, 32, 32, 32, 32, 32, 23, // Items @@ -46,11 +46,11 @@ const int InvItemWidth[180] = { 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, - 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28 + 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, 2 * 28, }; /** Maps from objcurs.cel frame number to frame height. */ -const int InvItemHeight[180] = { +const int InvItemHeight[] = { // Cursors 0, 29, 32, 32, 32, 32, 32, 32, 32, 32, 32, 35, // Items @@ -70,7 +70,7 @@ const int InvItemHeight[180] = { 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, - 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28 + 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, 3 * 28, }; void InitCursor() diff --git a/Source/cursor.h b/Source/cursor.h index 42b1df215..42da1ff94 100644 --- a/Source/cursor.h +++ b/Source/cursor.h @@ -6,11 +6,11 @@ #ifndef __CURSOR_H__ #define __CURSOR_H__ -extern int cursH; -extern int icursH28; extern int cursW; +extern int cursH; extern int pcursmonst; extern int icursW28; +extern int icursH28; extern BYTE *pCursCels; extern int icursH; extern char pcursinvitem; @@ -34,7 +34,7 @@ void CheckRportal(); void CheckCursMove(); /* rdata */ -extern const int InvItemWidth[180]; -extern const int InvItemHeight[180]; +extern const int InvItemWidth[]; +extern const int InvItemHeight[]; #endif /* __CURSOR_H__ */ diff --git a/Source/diablo.cpp b/Source/diablo.cpp index 4212497d4..405142fb3 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -11,8 +11,8 @@ HWND ghMainWnd; int glMid1Seed[NUMLEVELS]; int glMid2Seed[NUMLEVELS]; int gnLevelTypeTbl[NUMLEVELS]; -int MouseY; int MouseX; +int MouseY; BOOL gbGameLoopStartup; DWORD glSeedTbl[NUMLEVELS]; BOOL gbRunGame; @@ -119,11 +119,11 @@ BOOL StartGame(BOOL bNewGame, BOOL bSinglePlayer) InitPortals(); InitDungMsgs(myplr); } - if (!gbValidSaveFile || !gbLoadGame) + if (!gbValidSaveFile || !gbLoadGame) { uMsg = WM_DIABNEWGAME; - else + } else { uMsg = WM_DIABLOADGAME; - + } run_game_loop(uMsg); NetClose(); pfile_create_player_description(0, 0); @@ -284,7 +284,9 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi fault_get_filter(); bNoEvent = diablo_get_not_running(); - if (!diablo_find_window("DIABLO") && bNoEvent) { + if (diablo_find_window(GAME_NAME) || !bNoEvent) + return 0; + #ifdef _DEBUG SFileEnableDirectAccess(TRUE); #endif @@ -305,11 +307,11 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi #ifndef SPAWN { char szValueName[] = "Intro"; - if (!SRegLoadValue("Diablo", szValueName, 0, &nData)) + if (!SRegLoadValue(APP_NAME, szValueName, 0, &nData)) nData = 1; if (nData) play_movie("gendata\\diablo1.smk", TRUE); - SRegSaveValue("Diablo", szValueName, 0, 0); + SRegSaveValue(APP_NAME, szValueName, 0, 0); } #endif @@ -330,9 +332,8 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi Sleep(300); DestroyWindow(ghMainWnd); } - } - return FALSE; + return 0; } void diablo_parse_flags(char *args) @@ -349,13 +350,18 @@ void diablo_parse_flags(char *args) if (_strnicmp("dd_emulate", args, strlen("dd_emulate")) == 0) { gbEmulate = 1; args += strlen("dd_emulate"); - } else if (_strnicmp("dd_backbuf", args, strlen("dd_backbuf")) == 0) { + continue; + } + if (_strnicmp("dd_backbuf", args, strlen("dd_backbuf")) == 0) { gbBackBuf = 1; args += strlen("dd_backbuf"); - } else if (_strnicmp("ds_noduplicates", args, strlen("ds_noduplicates")) == 0) { + continue; + } + if (_strnicmp("ds_noduplicates", args, strlen("ds_noduplicates")) == 0) { gbDupSounds = FALSE; args += strlen("ds_noduplicates"); - } else { + continue; + } c = tolower(*args); args++; #ifdef _DEBUG @@ -483,7 +489,6 @@ void diablo_parse_flags(char *args) #endif } } -} void diablo_init_screen() { @@ -1921,7 +1926,8 @@ void diablo_color_cyc_logic() tc = GetTickCount(); if (tc - color_cycle_timer >= 50) { color_cycle_timer = tc; - if (palette_get_color_cycling()) { + if (!palette_get_color_cycling()) + return; if (leveltype == DTYPE_HELL) { lighting_color_cycling(); } else if (leveltype == DTYPE_CAVES) { @@ -1930,4 +1936,3 @@ void diablo_color_cyc_logic() } } } -} diff --git a/Source/diablo.h b/Source/diablo.h index 1e3f50020..10197bd18 100644 --- a/Source/diablo.h +++ b/Source/diablo.h @@ -10,8 +10,8 @@ extern HWND ghMainWnd; extern int glMid1Seed[NUMLEVELS]; extern int glMid2Seed[NUMLEVELS]; extern int gnLevelTypeTbl[NUMLEVELS]; -extern int MouseY; extern int MouseX; +extern int MouseY; extern BOOL gbGameLoopStartup; extern DWORD glSeedTbl[NUMLEVELS]; extern BOOL gbRunGame; diff --git a/Source/drlg_l2.cpp b/Source/drlg_l2.cpp index 6ca206290..17608cba6 100644 --- a/Source/drlg_l2.cpp +++ b/Source/drlg_l2.cpp @@ -7,8 +7,8 @@ #include "all.h" int nSx1; -int nSx2; int nSy1; +int nSx2; int nSy2; int nRoomCnt; BYTE predungeon[DMAXX][DMAXY]; diff --git a/Source/drlg_l2.h b/Source/drlg_l2.h index 8b9e86906..c0a7a0184 100644 --- a/Source/drlg_l2.h +++ b/Source/drlg_l2.h @@ -7,8 +7,8 @@ #define __DRLG_L2_H__ extern int nSx1; -extern int nSx2; extern int nSy1; +extern int nSx2; extern int nSy2; extern int nRoomCnt; extern BYTE predungeon[DMAXX][DMAXY]; diff --git a/Source/drlg_l4.cpp b/Source/drlg_l4.cpp index 8a0f6a5ff..0be518c0b 100644 --- a/Source/drlg_l4.cpp +++ b/Source/drlg_l4.cpp @@ -7,10 +7,10 @@ int diabquad1x; int diabquad1y; -int diabquad3x; -int diabquad3y; int diabquad2x; int diabquad2y; +int diabquad3x; +int diabquad3y; int diabquad4x; int diabquad4y; #ifndef SPAWN @@ -18,8 +18,8 @@ BOOL hallok[20]; int l4holdx; int l4holdy; int SP4x1; -int SP4x2; int SP4y1; +int SP4x2; int SP4y2; BYTE L4dungeon[80][80]; BYTE dung[20][20]; diff --git a/Source/drlg_l4.h b/Source/drlg_l4.h index cf64e9176..b2e52c776 100644 --- a/Source/drlg_l4.h +++ b/Source/drlg_l4.h @@ -8,18 +8,18 @@ extern int diabquad1x; extern int diabquad1y; -extern int diabquad3x; -extern int diabquad3y; extern int diabquad2x; extern int diabquad2y; +extern int diabquad3x; +extern int diabquad3y; extern int diabquad4x; extern int diabquad4y; extern BOOL hallok[20]; extern int l4holdx; extern int l4holdy; extern int SP4x1; -extern int SP4x2; extern int SP4y1; +extern int SP4x2; extern int SP4y2; extern BYTE L4dungeon[80][80]; extern BYTE dung[20][20]; diff --git a/Source/effects.cpp b/Source/effects.cpp index 68bb52a29..c75005dca 100644 --- a/Source/effects.cpp +++ b/Source/effects.cpp @@ -914,6 +914,7 @@ TSFX sgSFX[] = { // clang-format on }; +#define PLRSFXS (SFX_WARRIOR | SFX_ROGUE | SFX_SORCEROR) BOOL effect_is_playing(int nSFX) { TSFX *sfx = &sgSFX[nSFX]; @@ -1224,7 +1225,7 @@ void sound_init() { BYTE mask = 0; if (gbMaxPlayers > 1) { - mask = SFX_WARRIOR | SFX_ROGUE | SFX_SORCEROR; + mask = PLRSFXS; } else if (plr[myplr]._pClass == PC_WARRIOR) { mask = SFX_WARRIOR; } else if (plr[myplr]._pClass == PC_ROGUE) { @@ -1247,7 +1248,7 @@ void priv_sound_init(BYTE bLoadMask) return; } - pc = bLoadMask & (SFX_ROGUE | SFX_WARRIOR | SFX_SORCEROR); + pc = bLoadMask & PLRSFXS; bLoadMask ^= pc; for (i = 0; i < sizeof(sgSFX) / sizeof(TSFX); i++) { @@ -1263,7 +1264,7 @@ void priv_sound_init(BYTE bLoadMask) continue; } - if (sgSFX[i].bFlags & (SFX_ROGUE | SFX_WARRIOR | SFX_SORCEROR) && !(sgSFX[i].bFlags & pc)) { + if (sgSFX[i].bFlags & PLRSFXS && !(sgSFX[i].bFlags & pc)) { continue; } diff --git a/Source/error.cpp b/Source/error.cpp index 2df97ac30..5d09863d6 100644 --- a/Source/error.cpp +++ b/Source/error.cpp @@ -11,7 +11,7 @@ char msgflag; char msgcnt; /** Maps from error_id to error message. */ -char *MsgStrings[44] = { +char *MsgStrings[] = { "", "No automap available in town", "No multiplayer functions in demo", @@ -55,7 +55,7 @@ char *MsgStrings[44] = { "You must be at least level 8 to use this.", "You must be at least level 13 to use this.", "You must be at least level 17 to use this.", - "Arcane knowledge gained!" + "Arcane knowledge gained!", }; void InitDiabloMsg(char e) diff --git a/Source/error.h b/Source/error.h index 046307b88..770506b18 100644 --- a/Source/error.h +++ b/Source/error.h @@ -16,6 +16,6 @@ void ClrDiabloMsg(); void DrawDiabloMsg(); /* data */ -extern char *MsgStrings[44]; +extern char *MsgStrings[]; #endif /* __ERROR_H__ */ diff --git a/Source/gamemenu.cpp b/Source/gamemenu.cpp index b761e8d49..bc1e6bdea 100644 --- a/Source/gamemenu.cpp +++ b/Source/gamemenu.cpp @@ -217,42 +217,31 @@ void gamemenu_get_gamma() void gamemenu_music_volume(BOOL bActivate) { int volume; + if (bActivate) { if (gbMusicOn) { gbMusicOn = FALSE; music_stop(); sound_get_or_set_music_volume(VOLUME_MIN); - gamemenu_get_music(); - return; - } + } else { gbMusicOn = TRUE; sound_get_or_set_music_volume(VOLUME_MAX); music_start(leveltype); - gamemenu_get_music(); - return; } - + } else { volume = gamemenu_slider_music_sound(sgOptionsMenu); sound_get_or_set_music_volume(volume); if (volume == VOLUME_MIN) { - if (gbMusicOn) { gbMusicOn = FALSE; music_stop(); } - - gamemenu_get_music(); - return; - } - - if (gbMusicOn) { - gamemenu_get_music(); - return; - } - + } else if (!gbMusicOn) { gbMusicOn = TRUE; music_start(leveltype); + } + } gamemenu_get_music(); } diff --git a/Source/gendung.cpp b/Source/gendung.cpp index 3133dc170..964994c3e 100644 --- a/Source/gendung.cpp +++ b/Source/gendung.cpp @@ -5,87 +5,85 @@ */ #include "all.h" -WORD level_frame_types[MAXTILES]; -int themeCount; -/** - * List of transparent dPieces - */ -BOOLEAN nTransTable[2049]; -//int dword_52D204; -int dMonster[MAXDUNX][MAXDUNY]; BYTE dungeon[DMAXX][DMAXY]; -char dObject[MAXDUNX][MAXDUNY]; -BYTE *pSpeedCels; -int nlevel_frames; BYTE pdungeon[DMAXX][DMAXY]; -char dDead[MAXDUNX][MAXDUNY]; -MICROS dpiece_defs_map_1[MAXDUNX * MAXDUNY]; -char dPreLight[MAXDUNX][MAXDUNY]; -char TransVal; -int MicroTileLen; char dflags[DMAXX][DMAXY]; -int dPiece[MAXDUNX][MAXDUNY]; -char dLight[MAXDUNX][MAXDUNY]; +int setpc_x; +int setpc_y; +int setpc_w; +int setpc_h; +BYTE *pSetPiece; BOOL setloadflag; -int tile_defs[MAXTILES]; +BYTE *pSpecialCels; BYTE *pMegaTiles; BYTE *pLevelPieces; -int gnDifficulty; +BYTE *pDungeonCels; +BYTE *pSpeedCels; +int SpeedFrameTbl[128][16]; /** * List of transparancy masks to use for dPieces */ char block_lvid[2049]; -//char byte_5B78EB; -char dTransVal[MAXDUNX][MAXDUNY]; -BOOLEAN nTrapTable[2049]; -BYTE leveltype; -BYTE currlevel; -BOOLEAN TransList[256]; +int level_frame_count[MAXTILES]; +int tile_defs[MAXTILES]; +WORD level_frame_types[MAXTILES]; +int level_frame_sizes[MAXTILES]; +int nlevel_frames; +/** + * List of light blocking dPieces + */ +BOOLEAN nBlockTable[2049]; /** * List of path blocking dPieces */ BOOLEAN nSolidTable[2049]; -int level_frame_count[MAXTILES]; -ScrollStruct ScrollInfo; -BYTE *pDungeonCels; -int SpeedFrameTbl[128][16]; -THEME_LOC themeLoc[MAXTHEMES]; -char dPlayer[MAXDUNX][MAXDUNY]; -int ViewBX; -int ViewBY; -int ViewDX; -int ViewDY; -char dSpecial[MAXDUNX][MAXDUNY]; /** - * List of light blocking dPieces + * List of transparent dPieces */ -BOOLEAN nBlockTable[2049]; -BYTE *pSpecialCels; -char dFlags[MAXDUNX][MAXDUNY]; -char dItem[MAXDUNX][MAXDUNY]; -BYTE setlvlnum; -int level_frame_sizes[MAXTILES]; +BOOLEAN nTransTable[2049]; /** * List of missile blocking dPieces */ BOOLEAN nMissileTable[2049]; -BYTE *pSetPiece; -char setlvltype; -BOOLEAN setlevel; -int LvlViewY; -int LvlViewX; +BOOLEAN nTrapTable[2049]; +int dminx; +int dminy; int dmaxx; int dmaxy; -int setpc_h; -int setpc_w; -int setpc_x; +int gnDifficulty; +BYTE leveltype; +BYTE currlevel; +BOOLEAN setlevel; +BYTE setlvlnum; +char setlvltype; int ViewX; int ViewY; -int setpc_y; -char dMissile[MAXDUNX][MAXDUNY]; -int dminx; -int dminy; +int ViewBX; +int ViewBY; +int ViewDX; +int ViewDY; +ScrollStruct ScrollInfo; +int LvlViewX; +int LvlViewY; +int MicroTileLen; +char TransVal; +BOOLEAN TransList[256]; +int dPiece[MAXDUNX][MAXDUNY]; MICROS dpiece_defs_map_2[MAXDUNX][MAXDUNY]; +MICROS dpiece_defs_map_1[MAXDUNX * MAXDUNY]; +char dTransVal[MAXDUNX][MAXDUNY]; +char dLight[MAXDUNX][MAXDUNY]; +char dPreLight[MAXDUNX][MAXDUNY]; +char dFlags[MAXDUNX][MAXDUNY]; +char dPlayer[MAXDUNX][MAXDUNY]; +int dMonster[MAXDUNX][MAXDUNY]; +char dDead[MAXDUNX][MAXDUNY]; +char dObject[MAXDUNX][MAXDUNY]; +char dItem[MAXDUNX][MAXDUNY]; +char dMissile[MAXDUNX][MAXDUNY]; +char dSpecial[MAXDUNX][MAXDUNY]; +int themeCount; +THEME_LOC themeLoc[MAXTHEMES]; void FillSolidBlockTbls() { diff --git a/Source/gendung.h b/Source/gendung.h index 3de618721..3a34834b2 100644 --- a/Source/gendung.h +++ b/Source/gendung.h @@ -6,72 +6,70 @@ #ifndef __GENDUNG_H__ #define __GENDUNG_H__ -extern WORD level_frame_types[MAXTILES]; -extern int themeCount; -extern BOOLEAN nTransTable[2049]; -//int dword_52D204; -extern int dMonster[MAXDUNX][MAXDUNY]; extern BYTE dungeon[DMAXX][DMAXY]; -extern char dObject[MAXDUNX][MAXDUNY]; -extern BYTE *pSpeedCels; -extern int nlevel_frames; extern BYTE pdungeon[DMAXX][DMAXY]; -extern char dDead[MAXDUNX][MAXDUNY]; -extern MICROS dpiece_defs_map_1[MAXDUNX * MAXDUNY]; -extern char dPreLight[MAXDUNX][MAXDUNY]; -extern char TransVal; -extern int MicroTileLen; extern char dflags[DMAXX][DMAXY]; -extern int dPiece[MAXDUNX][MAXDUNY]; -extern char dLight[MAXDUNX][MAXDUNY]; +extern int setpc_x; +extern int setpc_y; +extern int setpc_w; +extern int setpc_h; +extern BYTE *pSetPiece; extern BOOL setloadflag; -extern int tile_defs[MAXTILES]; +extern BYTE *pSpecialCels; extern BYTE *pMegaTiles; extern BYTE *pLevelPieces; -extern int gnDifficulty; +extern BYTE *pDungeonCels; +extern BYTE *pSpeedCels; +extern int SpeedFrameTbl[128][16]; extern char block_lvid[2049]; -//char byte_5B78EB; -extern char dTransVal[MAXDUNX][MAXDUNY]; +extern int level_frame_count[MAXTILES]; +extern int tile_defs[MAXTILES]; +extern WORD level_frame_types[MAXTILES]; +extern int level_frame_sizes[MAXTILES]; +extern int nlevel_frames; +extern BOOLEAN nBlockTable[2049]; +extern BOOLEAN nSolidTable[2049]; +extern BOOLEAN nTransTable[2049]; +extern BOOLEAN nMissileTable[2049]; extern BOOLEAN nTrapTable[2049]; +extern int dminx; +extern int dminy; +extern int dmaxx; +extern int dmaxy; +extern int gnDifficulty; extern BYTE leveltype; extern BYTE currlevel; -extern BOOLEAN TransList[256]; -extern BOOLEAN nSolidTable[2049]; -extern int level_frame_count[MAXTILES]; -extern ScrollStruct ScrollInfo; -extern BYTE *pDungeonCels; -extern int SpeedFrameTbl[128][16]; -extern THEME_LOC themeLoc[MAXTHEMES]; -extern char dPlayer[MAXDUNX][MAXDUNY]; +extern BOOLEAN setlevel; +extern BYTE setlvlnum; +extern char setlvltype; +extern int ViewX; +extern int ViewY; extern int ViewBX; extern int ViewBY; extern int ViewDX; extern int ViewDY; -extern char dSpecial[MAXDUNX][MAXDUNY]; -extern BOOLEAN nBlockTable[2049]; -extern BYTE *pSpecialCels; +extern ScrollStruct ScrollInfo; +extern int LvlViewX; +extern int LvlViewY; +extern int MicroTileLen; +extern char TransVal; +extern BOOLEAN TransList[256]; +extern int dPiece[MAXDUNX][MAXDUNY]; +extern MICROS dpiece_defs_map_2[MAXDUNX][MAXDUNY]; +extern MICROS dpiece_defs_map_1[MAXDUNX * MAXDUNY]; +extern char dTransVal[MAXDUNX][MAXDUNY]; +extern char dLight[MAXDUNX][MAXDUNY]; +extern char dPreLight[MAXDUNX][MAXDUNY]; extern char dFlags[MAXDUNX][MAXDUNY]; +extern char dPlayer[MAXDUNX][MAXDUNY]; +extern int dMonster[MAXDUNX][MAXDUNY]; +extern char dDead[MAXDUNX][MAXDUNY]; +extern char dObject[MAXDUNX][MAXDUNY]; extern char dItem[MAXDUNX][MAXDUNY]; -extern BYTE setlvlnum; -extern int level_frame_sizes[MAXTILES]; -extern BOOLEAN nMissileTable[2049]; -extern BYTE *pSetPiece; -extern char setlvltype; -extern BOOLEAN setlevel; -extern int LvlViewY; -extern int LvlViewX; -extern int dmaxx; -extern int dmaxy; -extern int setpc_h; -extern int setpc_w; -extern int setpc_x; -extern int ViewX; -extern int ViewY; -extern int setpc_y; extern char dMissile[MAXDUNX][MAXDUNY]; -extern int dminx; -extern int dminy; -extern MICROS dpiece_defs_map_2[MAXDUNX][MAXDUNY]; +extern char dSpecial[MAXDUNX][MAXDUNY]; +extern int themeCount; +extern THEME_LOC themeLoc[MAXTHEMES]; void FillSolidBlockTbls(); void MakeSpeedCels(); diff --git a/Source/inv.cpp b/Source/inv.cpp index b518f5da1..1304a07a7 100644 --- a/Source/inv.cpp +++ b/Source/inv.cpp @@ -1542,8 +1542,9 @@ void AutoGetItem(int pnum, int ii) dropGoldValue = 0; } - if (ii != MAXITEMS && !dItem[item[ii]._ix][item[ii]._iy]) { - return; + if (ii != MAXITEMS) { + if (dItem[item[ii]._ix][item[ii]._iy] == 0) + return; } item[ii]._iCreateInfo &= 0x7FFF; diff --git a/Source/itemdat.cpp b/Source/itemdat.cpp index 2def88407..4d7a5ffa6 100644 --- a/Source/itemdat.cpp +++ b/Source/itemdat.cpp @@ -17,7 +17,7 @@ ItemDataStruct AllItemsList[] = { { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_STAFF, 10, UITYPE_NONE, "Short Staff of Charged Bolt", NULL, 1, 25, 2, 4, 0, 0, 0, 20, 0, ISPL_NONE, IMISC_STAFF, SPL_CBOLT, FALSE, 520, 520 }, { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_CLEAVER, 2, UITYPE_CLEAVER, "Cleaver", NULL, 10, 10, 4, 24, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 2000, 2000 }, { IDROP_NEVER, ICLASS_ARMOR, ILOC_HELM, ICURS_THE_UNDEAD_CROWN, 7, UITYPE_SKCROWN, "The Undead Crown", NULL, 0, 50, 0, 0, 15, 15, 0, 0, 0, ISPL_RNDSTEALLIFE, IMISC_UNIQUE, SPL_NULL, FALSE, 10000, 10000 }, - { IDROP_NEVER, ICLASS_MISC, ILOC_RING, ICURS_EMPYREAN_BAND, 12, UITYPE_INFRARING, "Empyrean Band", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 8000, 8000 }, + { IDROP_NEVER, ICLASS_MISC, ILOC_RING, ICURS_EMPYREAN_BAND, 12, UITYPE_INFRARING, "Empyrean Band", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 8000, 8000 }, { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_MAGIC_ROCK, 0, UITYPE_NONE, "Magic Rock", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, { IDROP_NEVER, ICLASS_MISC, ILOC_AMULET, ICURS_OPTIC_AMULET, 13, UITYPE_OPTAMULET, "Optic Amulet", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 5000, 5000 }, { IDROP_NEVER, ICLASS_MISC, ILOC_RING, ICURS_RING_OF_TRUTH, 12, UITYPE_TRING, "Ring of Truth", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 1000, 1000 }, diff --git a/Source/items.cpp b/Source/items.cpp index 7a51f1d94..557802247 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -19,7 +19,7 @@ int gnNumGetRecords; /* data */ -BYTE ItemCAnimTbl[169] = { +BYTE ItemCAnimTbl[] = { 20, 16, 16, 16, 4, 4, 4, 12, 12, 12, 12, 12, 12, 12, 12, 21, 21, 25, 12, 28, 28, 28, 0, 0, 0, 32, 0, 0, 0, 24, @@ -38,7 +38,7 @@ BYTE ItemCAnimTbl[169] = { 14, 17, 17, 17, 0, 34, 1, 0, 3, 17, 8, 8, 6, 1, 3, 3, 11, 3, 4 }; -char *ItemDropNames[ITEMTYPES] = { +char *ItemDropNames[] = { "Armor2", "Axe", "FBttle", @@ -73,9 +73,9 @@ char *ItemDropNames[ITEMTYPES] = { "Innsign", "Bldstn", "Fanvil", - "FLazStaf" + "FLazStaf", }; -BYTE ItemAnimLs[ITEMTYPES] = { +BYTE ItemAnimLs[] = { 15, 13, 16, @@ -110,9 +110,9 @@ BYTE ItemAnimLs[ITEMTYPES] = { 13, 13, 13, - 8 + 8, }; -int ItemDropSnds[ITEMTYPES] = { +int ItemDropSnds[] = { IS_FHARM, IS_FAXE, IS_FPOT, @@ -147,9 +147,9 @@ int ItemDropSnds[ITEMTYPES] = { IS_ISIGN, IS_FBLST, IS_FANVL, - IS_FSTAF + IS_FSTAF, }; -int ItemInvSnds[ITEMTYPES] = { +int ItemInvSnds[] = { IS_IHARM, IS_IAXE, IS_IPOT, @@ -184,7 +184,7 @@ int ItemInvSnds[ITEMTYPES] = { IS_ISIGN, IS_IBLST, IS_IANVL, - IS_ISTAF + IS_ISTAF, }; int idoppely = 16; int premiumlvladd[6] = { -1, -1, 0, 0, 1, 2 }; @@ -340,8 +340,8 @@ void CalcPlrItemVals(int p, BOOL Loadgfx) ItemStruct *itm = &plr[p].InvBody[i]; if (itm->_itype != ITYPE_NONE && itm->_iStatFlag) { - mind += itm->_iMinDam; tac += itm->_iAC; + mind += itm->_iMinDam; maxd += itm->_iMaxDam; if (itm->_iSpell != SPL_NULL) { @@ -357,7 +357,6 @@ void CalcPlrItemVals(int p, BOOL Loadgfx) tmpac = 1; bac += tmpac; } - dmod += itm->_iPLDamMod; iflgs |= itm->_iFlags; sadd += itm->_iPLStr; madd += itm->_iPLMag; @@ -366,6 +365,7 @@ void CalcPlrItemVals(int p, BOOL Loadgfx) fr += itm->_iPLFR; lr += itm->_iPLLR; mr += itm->_iPLMR; + dmod += itm->_iPLDamMod; ghit += itm->_iPLGetHit; lrad += itm->_iPLLight; ihp += itm->_iPLHP; @@ -393,15 +393,15 @@ void CalcPlrItemVals(int p, BOOL Loadgfx) } } + plr[p]._pIMinDam = mind; plr[p]._pIMaxDam = maxd; plr[p]._pIAC = tac; plr[p]._pIBonusDam = bdam; plr[p]._pIBonusToHit = btohit; plr[p]._pIBonusAC = bac; plr[p]._pIFlags = iflgs; - plr[p]._pIGetHit = ghit; - plr[p]._pIMinDam = mind; plr[p]._pIBonusDamMod = dmod; + plr[p]._pIGetHit = ghit; if (lrad < 2) { lrad = 2; @@ -2480,7 +2480,7 @@ void FreeItemGFX() { int i; - for (i = 0; i < 35; i++) { + for (i = 0; i < ITEMTYPES; i++) { MemFreeDbg(itemanims[i]); } } diff --git a/Source/items.h b/Source/items.h index 729761e96..0e4548e47 100644 --- a/Source/items.h +++ b/Source/items.h @@ -132,11 +132,11 @@ void PutItemRecord(int nSeed, WORD wCI, int nIndex); /* data */ -extern BYTE ItemCAnimTbl[169]; -extern char *ItemDropNames[ITEMTYPES]; -extern BYTE ItemAnimLs[ITEMTYPES]; -extern int ItemDropSnds[ITEMTYPES]; -extern int ItemInvSnds[ITEMTYPES]; +extern BYTE ItemCAnimTbl[]; +extern char *ItemDropNames[]; +extern BYTE ItemAnimLs[]; +extern int ItemDropSnds[]; +extern int ItemInvSnds[]; extern int idoppely; extern int premiumlvladd[6]; diff --git a/Source/lighting.cpp b/Source/lighting.cpp index 5446a221a..3895944d1 100644 --- a/Source/lighting.cpp +++ b/Source/lighting.cpp @@ -654,9 +654,8 @@ void DoUnLight(int nXPos, int nYPos, int nRadius) for (y = min_y; y < max_y; y++) { for (x = min_x; x < max_x; x++) { - if (x >= 0 && x < MAXDUNX && y >= 0 && y < MAXDUNY) { + if (x >= 0 && x < MAXDUNX && y >= 0 && y < MAXDUNY) dLight[x][y] = dPreLight[x][y]; - } } } } diff --git a/Source/monster.cpp b/Source/monster.cpp index 5c51ff4cf..c993c0ead 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -17,6 +17,7 @@ BOOLEAN sgbSaveSoundOn; MonsterStruct monster[MAXMONSTERS]; int totalmonsters; CMonster Monsters[MAX_LVLMTYPES]; +BYTE GraphicTable[NUMLEVELS][MAX_LVLMTYPES]; int monstimgtot; int uniquetrans; int nummtypes; @@ -689,15 +690,9 @@ void PlaceUniqueMonst(int uniqindex, int miniontype, int unpackfilesize) Monst->mtalkmsg = Uniq->mtalkmsg; Monst->mlid = AddLight(Monst->_mx, Monst->_my, 3); - if (gbMaxPlayers == 1) { - if (Monst->mtalkmsg) { - Monst->_mgoal = MGOAL_INQUIRING; - } - } else { - if (Monst->_mAi == AI_LAZHELP) { + if (gbMaxPlayers != 1) { + if (Monst->_mAi == AI_LAZHELP) Monst->mtalkmsg = 0; - } - if (Monst->_mAi != AI_LAZURUS || quests[Q_BETRAYER]._qvar1 <= 3) { if (Monst->mtalkmsg) { Monst->_mgoal = MGOAL_INQUIRING; @@ -706,10 +701,12 @@ void PlaceUniqueMonst(int uniqindex, int miniontype, int unpackfilesize) Monst->_mgoal = MGOAL_NORMAL; } } + else if (Monst->mtalkmsg) + Monst->_mgoal = MGOAL_INQUIRING; if (gnDifficulty == DIFF_NIGHTMARE) { - Monst->mLevel += 15; Monst->_mmaxhp = 3 * Monst->_mmaxhp + 64; + Monst->mLevel += 15; Monst->_mhitpoints = Monst->_mmaxhp; Monst->mExp = 2 * (Monst->mExp + 1000); Monst->mMinDamage = 2 * (Monst->mMinDamage + 2); @@ -719,8 +716,8 @@ void PlaceUniqueMonst(int uniqindex, int miniontype, int unpackfilesize) } if (gnDifficulty == DIFF_HELL) { - Monst->mLevel += 30; Monst->_mmaxhp = 4 * Monst->_mmaxhp + 192; + Monst->mLevel += 30; Monst->_mhitpoints = Monst->_mmaxhp; Monst->mExp = 4 * (Monst->mExp + 1000); Monst->mMinDamage = 4 * Monst->mMinDamage + 6; @@ -1632,6 +1629,7 @@ void M2MStartHit(int mid, int i, int dam) void MonstStartKill(int i, int pnum, BOOL sendmsg) { int md; + MonsterStruct *Monst; if ((DWORD)i >= MAXMONSTERS) { app_fatal("MonstStartKill: Invalid monster %d", i); @@ -1640,19 +1638,20 @@ void MonstStartKill(int i, int pnum, BOOL sendmsg) app_fatal("MonstStartKill: Monster %d \"%s\" MType NULL", i, monster[i].mName); } + Monst = &monster[i]; if (pnum >= 0) - monster[i].mWhoHit |= 1 << pnum; + Monst->mWhoHit |= 1 << pnum; if (pnum < MAX_PLRS && i > MAX_PLRS) - AddPlrMonstExper(monster[i].mLevel, monster[i].mExp, monster[i].mWhoHit); - monstkills[monster[i].MType->mtype]++; - monster[i]._mhitpoints = 0; - SetRndSeed(monster[i]._mRndSeed); - if (QuestStatus(Q_GARBUD) && monster[i].mName == UniqMonst[UMT_GARBUD].mName) { - CreateTypeItem(monster[i]._mx + 1, monster[i]._my + 1, TRUE, ITYPE_MACE, IMISC_NONE, TRUE, FALSE); + AddPlrMonstExper(Monst->mLevel, Monst->mExp, Monst->mWhoHit); + monstkills[Monst->MType->mtype]++; + Monst->_mhitpoints = 0; + SetRndSeed(Monst->_mRndSeed); + if (QuestStatus(Q_GARBUD) && Monst->mName == UniqMonst[UMT_GARBUD].mName) { + CreateTypeItem(Monst->_mx + 1, Monst->_my + 1, TRUE, ITYPE_MACE, IMISC_NONE, TRUE, FALSE); } else if (i > MAX_PLRS - 1) { // Golems should not spawn items - SpawnItem(i, monster[i]._mx, monster[i]._my, sendmsg); + SpawnItem(i, Monst->_mx, Monst->_my, sendmsg); } - if (monster[i].MType->mtype == MT_DIABLO) + if (Monst->MType->mtype == MT_DIABLO) M_DiabloDeath(i, TRUE); else PlayEffect(i, 2); @@ -1660,24 +1659,24 @@ void MonstStartKill(int i, int pnum, BOOL sendmsg) if (pnum >= 0) md = M_GetDir(i); else - md = monster[i]._mdir; - monster[i]._mdir = md; - NewMonsterAnim(i, monster[i].MType->Anims[MA_DEATH], md); - monster[i]._mmode = MM_DEATH; - monster[i]._mxoff = 0; - monster[i]._myoff = 0; - monster[i]._mVar1 = 0; - monster[i]._mx = monster[i]._moldx; - monster[i]._my = monster[i]._moldy; - monster[i]._mfutx = monster[i]._moldx; - monster[i]._mfuty = monster[i]._moldy; + md = Monst->_mdir; + Monst->_mdir = md; + NewMonsterAnim(i, Monst->MType->Anims[MA_DEATH], md); + Monst->_mmode = MM_DEATH; + Monst->_mxoff = 0; + Monst->_myoff = 0; + Monst->_mVar1 = 0; + Monst->_mx = Monst->_moldx; + Monst->_my = Monst->_moldy; + Monst->_mfutx = Monst->_moldx; + Monst->_mfuty = Monst->_moldy; M_CheckEFlag(i); M_ClearSquares(i); - dMonster[monster[i]._mx][monster[i]._my] = i + 1; + dMonster[Monst->_mx][Monst->_my] = i + 1; CheckQuestKill(i, sendmsg); - M_FallenFear(monster[i]._mx, monster[i]._my); - if (monster[i].MType->mtype >= MT_NACID && monster[i].MType->mtype <= MT_XACID) - AddMissile(monster[i]._mx, monster[i]._my, 0, 0, 0, MIS_ACIDPUD, 1, i, monster[i]._mint + 1, 0); + M_FallenFear(Monst->_mx, Monst->_my); + if (Monst->MType->mtype >= MT_NACID && Monst->MType->mtype <= MT_XACID) + AddMissile(Monst->_mx, Monst->_my, 0, 0, 0, MIS_ACIDPUD, 1, i, Monst->_mint + 1, 0); } void M2MStartKill(int i, int mid) @@ -5510,19 +5509,20 @@ BOOL CheckMonsterHit(int m, BOOL &ret) } if (monster[m]._mAi == AI_GARG && monster[m]._mFlags & MFLAG_ALLOW_SPECIAL) { - monster[m]._mmode = MM_SATTACK; monster[m]._mFlags &= ~MFLAG_ALLOW_SPECIAL; + monster[m]._mmode = MM_SATTACK; ret = TRUE; return TRUE; } - if (monster[m].MType->mtype < MT_COUNSLR || monster[m].MType->mtype > MT_ADVOCATE || monster[m]._mgoal == MGOAL_NORMAL) { - return FALSE; - } else { - ret = FALSE; + if (monster[m].MType->mtype >= MT_COUNSLR && monster[m].MType->mtype <= MT_ADVOCATE) { + if (monster[m]._mgoal != MGOAL_NORMAL) { + ret = FALSE; + return TRUE; + } } - return TRUE; + return FALSE; } int encode_enemy(int m) diff --git a/Source/monster.h b/Source/monster.h index 881e4cabd..c5028c8da 100644 --- a/Source/monster.h +++ b/Source/monster.h @@ -13,6 +13,7 @@ extern int nummonsters; extern MonsterStruct monster[MAXMONSTERS]; extern int totalmonsters; extern CMonster Monsters[MAX_LVLMTYPES]; +extern BYTE GraphicTable[NUMLEVELS][MAX_LVLMTYPES]; extern int monstimgtot; extern int uniquetrans; extern int nummtypes; diff --git a/Source/mpqapi.cpp b/Source/mpqapi.cpp index 6c88bff4f..6d33ffdb6 100644 --- a/Source/mpqapi.cpp +++ b/Source/mpqapi.cpp @@ -62,9 +62,9 @@ BOOL mpqapi_reg_load_modification_time(char *dst, int size) pszDst = dst; memset(dst, 0, size); #ifdef SPAWN - if (!SRegLoadData("Diablo", "Audio Playback ", 0, (BYTE *)pszDst, size, &nbytes_read)) { + if (!SRegLoadData(APP_NAME, "Audio Playback ", 0, (BYTE *)pszDst, size, &nbytes_read)) { #else - if (!SRegLoadData("Diablo", "Video Player ", 0, (BYTE *)pszDst, size, &nbytes_read)) { + if (!SRegLoadData(APP_NAME, "Video Player ", 0, (BYTE *)pszDst, size, &nbytes_read)) { #endif return FALSE; } @@ -132,9 +132,9 @@ BOOLEAN mpqapi_reg_store_modification_time(char *pbData, DWORD dwLen) } #ifdef SPAWN - return SRegSaveData("Diablo", "Audio Playback ", 0, (BYTE *)pbData, dwLen); + return SRegSaveData(APP_NAME, "Audio Playback ", 0, (BYTE *)pbData, dwLen); #else - return SRegSaveData("Diablo", "Video Player ", 0, (BYTE *)pbData, dwLen); + return SRegSaveData(APP_NAME, "Video Player ", 0, (BYTE *)pbData, dwLen); #endif } diff --git a/Source/multi.cpp b/Source/multi.cpp index 1eca34566..76a0c4d95 100644 --- a/Source/multi.cpp +++ b/Source/multi.cpp @@ -772,7 +772,7 @@ BOOL NetInit(BOOL bSinglePlayer, BOOL *pfExitProgram) gnDifficulty = sgGameInitInfo.bDiff; SetRndSeed(sgGameInitInfo.dwSeed); - for (i = 0; i < 17; i++) { + for (i = 0; i < NUMLEVELS; i++) { glSeedTbl[i] = GetRndSeed(); gnLevelTypeTbl[i] = InitLevelType(i); } diff --git a/Source/objects.cpp b/Source/objects.cpp index 2f75c9127..ec16cbae5 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -196,12 +196,13 @@ void InitRndLocBigObj(int min, int max, int objtype) void InitRndLocObj5x5(int min, int max, int objtype) { BOOL exit; - int xp, yp, numobjs, i, k, m, n; + int xp, yp, numobjs, i, cnt, m, n; numobjs = min + random_(139, max - min); for (i = 0; i < numobjs; i++) { - k = 0; - for (;;) { + cnt = 0; + exit = FALSE; + while (!exit) { exit = TRUE; xp = random_(139, 80) + 16; yp = random_(139, 80) + 16; @@ -211,11 +212,11 @@ void InitRndLocObj5x5(int min, int max, int objtype) exit = FALSE; } } - if (exit) - break; - k++; - if (k > 20000) - return; + if (!exit) { + cnt++; + if (cnt > 20000) + return; + } } AddObject(objtype, xp, yp); } @@ -286,11 +287,12 @@ void AddCandles() void AddBookLever(int lx1, int ly1, int lx2, int ly2, int x1, int y1, int x2, int y2, int msg) { - BOOL exit; - int xp, yp, ob, k, m, n; + DIABOOL exit; + int xp, yp, ob, cnt, m, n; - k = 0; - for (;;) { + cnt = 0; + exit = FALSE; + while (!exit) { exit = TRUE; xp = random_(139, 80) + 16; yp = random_(139, 80) + 16; @@ -300,11 +302,11 @@ void AddBookLever(int lx1, int ly1, int lx2, int ly2, int x1, int y1, int x2, in exit = FALSE; } } - if (exit) - break; - k++; - if (k > 20000) + if (!exit) { + cnt++; + if (cnt > 20000) return; + } } if (QuestStatus(Q_BLIND)) @@ -619,7 +621,8 @@ void AddStoryBooks() BOOL done; cnt = 0; - while (TRUE) { + done = FALSE; + while (!done) { done = TRUE; xp = random_(139, 80) + 16; yp = random_(139, 80) + 16; @@ -629,11 +632,11 @@ void AddStoryBooks() done = FALSE; } } - if (done) - break; + if (!done) { cnt++; if (cnt > 20000) return; + } } AddObject(OBJ_STORYBOOK, xp, yp); AddObject(OBJ_STORYCANDLE, xp - 2, yp + 1); @@ -707,8 +710,9 @@ void AddLazStand() BOOL found; cnt = 0; - while (TRUE) { - found = 1; + found = FALSE; + while (!found) { + found = TRUE; xp = random_(139, 80) + 16; yp = random_(139, 80) + 16; for (yy = -3; yy <= 3; yy++) { @@ -717,15 +721,14 @@ void AddLazStand() found = FALSE; } } - if (found) - break; - + if (!found) { cnt++; if (cnt > 10000) { InitRndLocObj(1, 1, OBJ_LAZSTAND); return; } } + } AddObject(OBJ_LAZSTAND, xp, yp); AddObject(OBJ_TNUDEM2, xp, yp + 2); AddObject(OBJ_STORYCANDLE, xp + 1, yp + 2); @@ -829,9 +832,9 @@ void InitObjects() InitRndBarrels(); AddL4Goodies(); } - InitRndLocObj(5, 10, 5); - InitRndLocObj(3, 6, 6); - InitRndLocObj(1, 5, 7); + InitRndLocObj(5, 10, OBJ_CHEST1); + InitRndLocObj(3, 6, OBJ_CHEST2); + InitRndLocObj(1, 5, OBJ_CHEST3); if (leveltype != DTYPE_HELL) AddObjTraps(); if (leveltype > DTYPE_CATHEDRAL) @@ -1104,7 +1107,8 @@ void AddBarrel(int i, int t) void AddShrine(int i) { - int val, j, slist[NUM_SHRINETYPE]; + int val, j; + BOOL slist[NUM_SHRINETYPE]; object[i]._oPreFlag = TRUE; for (j = 0; j < NUM_SHRINETYPE; j++) { @@ -1113,22 +1117,16 @@ void AddShrine(int i) } else { slist[j] = 1; } - if (gbMaxPlayers != 1) { - if (shrineavail[j] == 1) { + if (gbMaxPlayers != 1 && shrineavail[j] == 1) { slist[j] = 0; } - } else { - if (shrineavail[j] == 2) { + if (gbMaxPlayers == 1 && shrineavail[j] == 2) { slist[j] = 0; } } - } - while (1) { + do { val = random_(150, NUM_SHRINETYPE); - if (slist[val]) { - break; - } - } + } while (!slist[val]); object[i]._oVar1 = val; if (random_(150, 2)) { @@ -1548,21 +1546,21 @@ void Obj_StopAnim(int i) void Obj_Door(int i) { int dx, dy; + BOOL dok; - if (!object[i]._oVar4) { - object[i]._oMissFlag = FALSE; + if (object[i]._oVar4 == 0) { object[i]._oSelFlag = 3; + object[i]._oMissFlag = FALSE; } else { - dy = object[i]._oy; dx = object[i]._ox; + dy = object[i]._oy; + dok = !dMonster[dx][dy]; + dok = dok & !dItem[dx][dy]; + dok = dok & !dDead[dx][dy]; + dok = dok & !dPlayer[dx][dy]; object[i]._oSelFlag = 2; + object[i]._oVar4 = dok ? 1 : 2; object[i]._oMissFlag = TRUE; - object[i]._oVar4 = (((dItem[dx][dy] == 0 ? 1 : 0) - & (dDead[dx][dy] == 0 ? 1 : 0) - & (dPlayer[dx][dy] == 0 ? 1 : 0) - & (dMonster[dx][dy] == 0 ? 1 : 0)) - == 0) - + 1; } } @@ -2427,6 +2425,7 @@ void OperateBook(int pnum, int i) { int j, oi; int dx, dy; + int otype; BOOL do_add_missile, missile_added; if (object[i]._oSelFlag == 0) @@ -2436,20 +2435,19 @@ void OperateBook(int pnum, int i) missile_added = FALSE; for (j = 0; j < nobjects; j++) { oi = objectactive[j]; - if (object[oi]._otype == OBJ_MCIRCLE2) { - if (object[oi]._oVar6 == 1) { + otype = object[oi]._otype; + if (otype == OBJ_MCIRCLE2 && object[oi]._oVar6 == 1) { dx = 27; dy = 29; object[oi]._oVar6 = 4; do_add_missile = TRUE; } - if (object[oi]._oVar6 == 2) { + if (otype == OBJ_MCIRCLE2 && object[oi]._oVar6 == 2) { dx = 43; dy = 29; object[oi]._oVar6 = 4; do_add_missile = TRUE; } - } if (do_add_missile) { object[dObject[35][36] - 1]._oVar5++; AddMissile(plr[pnum]._px, plr[pnum]._py, dx, dy, plr[pnum]._pdir, MIS_RNDTELEPORT, 0, pnum, 0, 0); @@ -2460,8 +2458,8 @@ void OperateBook(int pnum, int i) if (!missile_added) return; } - object[i]._oAnimFrame++; object[i]._oSelFlag = 0; + object[i]._oAnimFrame++; if (!setlevel) return; @@ -2574,8 +2572,8 @@ void OperateChest(int pnum, int i, BOOL sendmsg) if (object[i]._oSelFlag != 0) { if (!deltaload) PlaySfxLoc(IS_CHEST, object[i]._ox, object[i]._oy); - object[i]._oAnimFrame += 2; object[i]._oSelFlag = 0; + object[i]._oAnimFrame += 2; if (!deltaload) { SetRndSeed(object[i]._oRndSeed); if (setlevel) { @@ -2664,8 +2662,8 @@ void OperateInnSignChest(int pnum, int i) if (object[i]._oSelFlag != 0) { if (!deltaload) PlaySfxLoc(IS_CHEST, object[i]._ox, object[i]._oy); - object[i]._oAnimFrame += 2; object[i]._oSelFlag = 0; + object[i]._oAnimFrame += 2; if (!deltaload) { GetSuperItemLoc(object[i]._ox, object[i]._oy, x, y); SpawnQuestItem(IDI_BANNER, x, y, 0, 0); @@ -3462,8 +3460,8 @@ void OperateSkelBook(int pnum, int i, BOOL sendmsg) if (object[i]._oSelFlag != 0) { if (!deltaload) PlaySfxLoc(IS_ISCROL, object[i]._ox, object[i]._oy); - object[i]._oAnimFrame += 2; object[i]._oSelFlag = 0; + object[i]._oAnimFrame += 2; if (!deltaload) { SetRndSeed(object[i]._oRndSeed); if (random_(161, 5)) @@ -3481,8 +3479,8 @@ void OperateBookCase(int pnum, int i, BOOL sendmsg) if (object[i]._oSelFlag != 0) { if (!deltaload) PlaySfxLoc(IS_ISCROL, object[i]._ox, object[i]._oy); - object[i]._oAnimFrame -= 2; object[i]._oSelFlag = 0; + object[i]._oAnimFrame -= 2; if (!deltaload) { SetRndSeed(object[i]._oRndSeed); CreateTypeItem(object[i]._ox, object[i]._oy, FALSE, ITYPE_MISC, IMISC_BOOK, sendmsg, FALSE); @@ -3519,8 +3517,8 @@ void OperateArmorStand(int pnum, int i, BOOL sendmsg) BOOL uniqueRnd; if (object[i]._oSelFlag != 0) { - object[i]._oAnimFrame++; object[i]._oSelFlag = 0; + object[i]._oAnimFrame++; if (!deltaload) { SetRndSeed(object[i]._oRndSeed); uniqueRnd = random_(0, 2); @@ -3728,8 +3726,8 @@ void OperateWeaponRack(int pnum, int i, BOOL sendmsg) break; } - object[i]._oAnimFrame++; object[i]._oSelFlag = 0; + object[i]._oAnimFrame++; if (deltaload) return; @@ -3898,9 +3896,7 @@ void SyncOpL1Door(int pnum, int cmd, int i) return; do_sync = FALSE; - if (cmd == CMD_OPENDOOR) { - if (object[i]._oVar4 != 0) - return; + if (cmd == CMD_OPENDOOR && object[i]._oVar4 == 0) { do_sync = TRUE; } if (cmd == CMD_CLOSEDOOR && object[i]._oVar4 == 1) @@ -3921,9 +3917,7 @@ void SyncOpL2Door(int pnum, int cmd, int i) return; do_sync = FALSE; - if (cmd == CMD_OPENDOOR) { - if (object[i]._oVar4 != 0) - return; + if (cmd == CMD_OPENDOOR && object[i]._oVar4 == 0) { do_sync = TRUE; } if (cmd == CMD_CLOSEDOOR && object[i]._oVar4 == 1) @@ -3944,9 +3938,7 @@ void SyncOpL3Door(int pnum, int cmd, int i) return; do_sync = FALSE; - if (cmd == CMD_OPENDOOR) { - if (object[i]._oVar4 != 0) - return; + if (cmd == CMD_OPENDOOR && object[i]._oVar4 == 0) { do_sync = TRUE; } if (cmd == CMD_CLOSEDOOR && object[i]._oVar4 == 1) diff --git a/Source/palette.cpp b/Source/palette.cpp index 83fc04f19..ec4f7ba04 100644 --- a/Source/palette.cpp +++ b/Source/palette.cpp @@ -46,8 +46,8 @@ static void ApplyGamma(PALETTEENTRY *dst, PALETTEENTRY *src, int n) void SaveGamma() { - SRegSaveValue("Diablo", "Gamma Correction", 0, gamma_correction); - SRegSaveValue("Diablo", "Color Cycling", FALSE, color_cycling_enabled); + SRegSaveValue(APP_NAME, "Gamma Correction", 0, gamma_correction); + SRegSaveValue(APP_NAME, "Color Cycling", FALSE, color_cycling_enabled); } static void LoadGamma() @@ -56,7 +56,7 @@ static void LoadGamma() int value; value = gamma_correction; - if (!SRegLoadValue("Diablo", "Gamma Correction", 0, &value)) + if (!SRegLoadValue(APP_NAME, "Gamma Correction", 0, &value)) value = 100; gamma_value = value; if (value < 30) { @@ -65,7 +65,7 @@ static void LoadGamma() gamma_value = 100; } gamma_correction = gamma_value - gamma_value % 5; - if (!SRegLoadValue("Diablo", "Color Cycling", 0, &value)) + if (!SRegLoadValue(APP_NAME, "Color Cycling", 0, &value)) value = 1; color_cycling_enabled = value; } diff --git a/Source/player.cpp b/Source/player.cpp index b731b287b..d3bbfa7d9 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -835,11 +835,11 @@ void InitPlayer(int pnum, BOOL FirstTime) ClearPlrRVars(&plr[pnum]); if (FirstTime) { + plr[pnum]._pRSplType = RSPLTYPE_INVALID; plr[pnum]._pRSpell = SPL_INVALID; plr[pnum]._pSBkSpell = SPL_INVALID; - plr[pnum]._pSpell = SPL_INVALID; - plr[pnum]._pRSplType = RSPLTYPE_INVALID; - plr[pnum]._pSplType = RSPLTYPE_INVALID; + plr[pnum]._pSpell = plr[pnum]._pRSpell; + plr[pnum]._pSplType = plr[pnum]._pRSplType; if ((plr[pnum]._pgfxnum & 0xF) == ANIM_ID_BOW) { plr[pnum]._pwtype = WT_RANGED; } else { @@ -1204,9 +1204,12 @@ void PM_ChangeOffset(int pnum) plr[pnum]._pxoff = plr[pnum]._pVar6 >> 8; plr[pnum]._pyoff = plr[pnum]._pVar7 >> 8; + px -= plr[pnum]._pVar6 >> 8; + py -= plr[pnum]._pVar7 >> 8; + if (pnum == myplr && ScrollInfo._sdir) { - ScrollInfo._sxoff += px - plr[pnum]._pxoff; - ScrollInfo._syoff += py - plr[pnum]._pyoff; + ScrollInfo._sxoff += px; + ScrollInfo._syoff += py; } PM_ChangeLightOff(pnum); @@ -1675,7 +1678,8 @@ void StartPlayerKill(int pnum, int earflag) ItemStruct ear; ItemStruct *pi; - if (plr[pnum]._pHitPoints <= 0 && plr[pnum]._pmode == PM_DEATH) { + p = &plr[pnum]; + if (p->_pHitPoints <= 0 && p->_pmode == PM_DEATH) { return; } @@ -1699,34 +1703,33 @@ void StartPlayerKill(int pnum, int earflag) #endif } - if (plr[pnum]._pgfxnum) { - plr[pnum]._pgfxnum = 0; - plr[pnum]._pGFXLoad = 0; + if (p->_pgfxnum) { + p->_pgfxnum = 0; + p->_pGFXLoad = 0; SetPlrAnims(pnum); } - if (!(plr[pnum]._pGFXLoad & PFILE_DEATH)) { + if (!(p->_pGFXLoad & PFILE_DEATH)) { LoadPlrGFX(pnum, PFILE_DEATH); } - p = &plr[pnum]; - NewPlrAnim(pnum, p->_pDAnim[plr[pnum]._pdir], p->_pDFrames, 1, p->_pDWidth); + NewPlrAnim(pnum, p->_pDAnim[p->_pdir], p->_pDFrames, 1, p->_pDWidth); - plr[pnum]._pBlockFlag = FALSE; - plr[pnum]._pmode = PM_DEATH; - plr[pnum]._pInvincible = TRUE; + p->_pBlockFlag = FALSE; + p->_pmode = PM_DEATH; + p->_pInvincible = TRUE; SetPlayerHitPoints(pnum, 0); - plr[pnum]._pVar8 = 1; + p->_pVar8 = 1; if (pnum != myplr && !earflag && !diablolevel) { for (i = 0; i < NUM_INVLOC; i++) { - plr[pnum].InvBody[i]._itype = ITYPE_NONE; + p->InvBody[i]._itype = ITYPE_NONE; } CalcPlrInv(pnum, FALSE); } if (plr[pnum].plrlevel == currlevel) { - FixPlayerLocation(pnum, plr[pnum]._pdir); + FixPlayerLocation(pnum, p->_pdir); RemovePlrFromMap(pnum); dFlags[p->_px][p->_py] |= BFLAG_DEAD_PLAYER; SetPlayerOld(pnum); @@ -1736,7 +1739,7 @@ void StartPlayerKill(int pnum, int earflag) deathdelay = 30; if (pcurs >= CURSOR_FIRSTITEM) { - PlrDeadItem(pnum, &plr[pnum].HoldItem, 0, 0); + PlrDeadItem(pnum, &p->HoldItem, 0, 0); SetCursor_(CURSOR_HAND); } @@ -1762,11 +1765,10 @@ void StartPlayerKill(int pnum, int earflag) PlrDeadItem(pnum, &ear, 0, 0); } } else { - pi = &plr[pnum].InvBody[0]; + pi = &p->InvBody[0]; i = NUM_INVLOC; - while (i != 0) { - i--; - pdd = (i + plr[pnum]._pdir) & 7; + while (i--) { + pdd = (i + p->_pdir) & 7; PlrDeadItem(pnum, pi, offset_x[pdd], offset_y[pdd]); pi++; } @@ -1827,7 +1829,8 @@ void DropHalfPlayersGold(int pnum) hGold = plr[pnum]._pGold >> 1; for (i = 0; i < MAXBELTITEMS && hGold > 0; i++) { - if (plr[pnum].SpdList[i]._itype == ITYPE_GOLD && plr[pnum].SpdList[i]._ivalue != GOLD_MAX_LIMIT) { + if (plr[pnum].SpdList[i]._itype == ITYPE_GOLD && + plr[pnum].SpdList[i]._ivalue != GOLD_MAX_LIMIT) { if (hGold < plr[pnum].SpdList[i]._ivalue) { plr[pnum].SpdList[i]._ivalue -= hGold; SetSpdbarGoldCurs(pnum, i); @@ -2100,6 +2103,7 @@ BOOL PM_DoStand(int pnum) BOOL PM_DoWalk(int pnum) { int anim_len; + BOOL rv; if ((DWORD)pnum >= MAX_PLRS) { app_fatal("PM_DoWalk: illegal player %d", pnum); @@ -2143,17 +2147,19 @@ BOOL PM_DoWalk(int pnum) if (leveltype != DTYPE_TOWN) { ChangeLightOff(plr[pnum]._plid, 0, 0); } - - return TRUE; + rv = TRUE; + } else { + PM_ChangeOffset(pnum); + rv = FALSE; } - PM_ChangeOffset(pnum); - return FALSE; + return rv; } BOOL PM_DoWalk2(int pnum) { int anim_len; + BOOL rv; if ((DWORD)pnum >= MAX_PLRS) { app_fatal("PM_DoWalk2: illegal player %d", pnum); @@ -2190,21 +2196,22 @@ BOOL PM_DoWalk2(int pnum) } ClearPlrPVars(pnum); - if (leveltype != DTYPE_TOWN) { ChangeLightOff(plr[pnum]._plid, 0, 0); } - - return TRUE; + rv = TRUE; + } else { + PM_ChangeOffset(pnum); + rv = FALSE; } - PM_ChangeOffset(pnum); - return FALSE; + return rv; } BOOL PM_DoWalk3(int pnum) { int anim_len; + BOOL rv; if ((DWORD)pnum >= MAX_PLRS) { app_fatal("PM_DoWalk3: illegal player %d", pnum); @@ -2249,12 +2256,13 @@ BOOL PM_DoWalk3(int pnum) if (leveltype != DTYPE_TOWN) { ChangeLightOff(plr[pnum]._plid, 0, 0); } - - return TRUE; + rv = TRUE; + } else { + PM_ChangeOffset(pnum); + rv = FALSE; } - PM_ChangeOffset(pnum); - return FALSE; + return rv; } BOOL WeaponDur(int pnum, int durrnd) diff --git a/Source/quests.cpp b/Source/quests.cpp index bd2075eb0..678a06090 100644 --- a/Source/quests.cpp +++ b/Source/quests.cpp @@ -8,8 +8,8 @@ int qline; int qlist[MAXQUESTS]; int numqlines; int WaterDone; -int ReturnLvlY; int ReturnLvlX; +int ReturnLvlY; int ReturnLvlT; int ALLQUESTS; /** current frame # for the pentagram selector */ int ReturnLvl; diff --git a/Source/quests.h b/Source/quests.h index 3d4ee9ccf..cf52fb578 100644 --- a/Source/quests.h +++ b/Source/quests.h @@ -10,8 +10,8 @@ extern int qline; extern int qlist[MAXQUESTS]; extern int numqlines; extern int WaterDone; -extern int ReturnLvlY; extern int ReturnLvlX; +extern int ReturnLvlY; extern int ReturnLvlT; extern int ALLQUESTS; extern int ReturnLvl; diff --git a/Source/scrollrt.cpp b/Source/scrollrt.cpp index c4037dada..298031cf0 100644 --- a/Source/scrollrt.cpp +++ b/Source/scrollrt.cpp @@ -2142,8 +2142,6 @@ static void DrawGame(int x, int y) } switch (ScrollInfo._sdir) { - case SDIR_NONE: - break; case SDIR_NE: chunks++; case SDIR_N: diff --git a/Source/sound.cpp b/Source/sound.cpp index f06dcab56..38288ba7b 100644 --- a/Source/sound.cpp +++ b/Source/sound.cpp @@ -270,7 +270,7 @@ void snd_init(HWND hWnd) void snd_get_volume(char *value_name, int *value) { int v = *value; - if (!SRegLoadValue("Diablo", value_name, 0, &v)) { + if (!SRegLoadValue(APP_NAME, value_name, 0, &v)) { v = VOLUME_MAX; } *value = v; @@ -362,7 +362,7 @@ void sound_cleanup() void snd_set_volume(char *key, int value) { - SRegSaveValue("Diablo", key, 0, value); + SRegSaveValue(APP_NAME, key, 0, value); } void music_stop() diff --git a/Source/textdat.cpp b/Source/textdat.cpp index 7df9be0d7..0eeff858d 100644 --- a/Source/textdat.cpp +++ b/Source/textdat.cpp @@ -783,7 +783,7 @@ const TextDataStruct alltext[] = { 1, 3, PS_NAR9 }, #endif { "Thank goodness you've returned!\nMuch has changed since you lived here, my friend. All was peaceful until the dark riders came and destroyed our village. Many were cut down where they stood, and those who took up arms were slain or dragged away to become slaves - or worse. The church at the edge of town has been desecrated and is being used for dark rituals. The screams that echo in the night are inhuman, but some of our townsfolk may yet survive. Follow the path that lies between my tavern and the blacksmith shop to find the church and save who you can. \n \nPerhaps I can tell you more if we speak again. Good luck.|", - 1, 5, TSFX_TAVERN0 } + 1, 5, TSFX_TAVERN0 }, }; /** unused */ const DWORD gdwAllTextEntries = 259; diff --git a/Source/textdat.h b/Source/textdat.h index 96445a648..2edb4f4ad 100644 --- a/Source/textdat.h +++ b/Source/textdat.h @@ -2,7 +2,7 @@ #ifndef __TEXTDAT_H__ #define __TEXTDAT_H__ -extern const TextDataStruct alltext[259]; +extern const TextDataStruct alltext[]; extern const DWORD gdwAllTextEntries; #endif /* __TEXTDAT_H__ */ diff --git a/Source/towners.cpp b/Source/towners.cpp index 19121d91a..5754f4830 100644 --- a/Source/towners.cpp +++ b/Source/towners.cpp @@ -91,8 +91,8 @@ int TownCowY[3] = { 16, 14, 20 }; int TownCowDir[3] = { 1, 3, 4 }; int cowoffx[8] = { -1, 0, -1, -1, -1, 0, -1, -1 }; int cowoffy[8] = { -1, -1, -1, 0, -1, -1, -1, 0 }; -QuestTalkData Qtalklist[11] = { - // clang-format off +QuestTalkData Qtalklist[] = { +// clang-format off // _qinfra, _qblkm, _qgarb, _qzhar, _qveil, _qmod, _qbutch, _qbol, _qblind, _qblood, _qanvil, _qwarlrd, _qking, _qpw, _qbone, _qvb { TEXT_INFRA6, TEXT_MUSH6, -1, -1, TEXT_VEIL5, -1, TEXT_BUTCH5, TEXT_BANNER6, TEXT_BLIND5, TEXT_BLOOD5, TEXT_ANVIL6, TEXT_WARLRD5, TEXT_KING7, TEXT_POISON7, TEXT_BONE5, TEXT_VILE9 }, { TEXT_INFRA3, -1, -1, -1, TEXT_VEIL3, -1, TEXT_BUTCH3, TEXT_BANNER4, TEXT_BLIND3, TEXT_BLOOD3, TEXT_ANVIL3, TEXT_WARLRD3, TEXT_KING5, TEXT_POISON4, TEXT_BONE3, TEXT_VILE7 }, @@ -446,12 +446,13 @@ void TownDead() tidx = GetActiveTowner(TOWN_DEADGUY); TownCtrlMsg(tidx); if (!qtextflag) { - if ((quests[Q_BUTCHER]._qactive != QUEST_ACTIVE || quests[Q_BUTCHER]._qlog) && quests[Q_BUTCHER]._qactive != QUEST_INIT) { + if (quests[Q_BUTCHER]._qactive == QUEST_ACTIVE && quests[Q_BUTCHER]._qlog == 0) { + return; + } + if (quests[Q_BUTCHER]._qactive != QUEST_INIT) { towner[tidx]._tAnimDelay = 1000; towner[tidx]._tAnimFrame = 1; strcpy(towner[tidx]._tName, "Slain Townsman"); - } else { - return; } } if (quests[Q_BUTCHER]._qactive != QUEST_INIT) @@ -665,15 +666,17 @@ void TalkToTowner(int p, int t) InitQTextMsg(TEXT_BANNER2); towner[t]._tMsgSaid = TRUE; } - if (quests[Q_LTBANNER]._qvar2 == 1 && PlrHasItem(p, IDI_BANNER, i) != NULL && !towner[t]._tMsgSaid) { - quests[Q_LTBANNER]._qactive = QUEST_DONE; - quests[Q_LTBANNER]._qvar1 = 3; - RemoveInvItem(p, i); - CreateItem(UITEM_HARCREST, towner[t]._tx, towner[t]._ty + 1); - towner[t]._tbtcnt = 150; - towner[t]._tVar1 = p; - InitQTextMsg(TEXT_BANNER3); - towner[t]._tMsgSaid = TRUE; + if (quests[Q_LTBANNER]._qvar2 == 1 && PlrHasItem(p, IDI_BANNER, i) != NULL) { + if (!towner[t]._tMsgSaid) { + quests[Q_LTBANNER]._qactive = QUEST_DONE; + quests[Q_LTBANNER]._qvar1 = 3; + RemoveInvItem(p, i); + CreateItem(UITEM_HARCREST, towner[t]._tx, towner[t]._ty + 1); + towner[t]._tbtcnt = 150; + towner[t]._tVar1 = p; + InitQTextMsg(TEXT_BANNER3); + towner[t]._tMsgSaid = TRUE; + } } } if (!qtextflag) { @@ -729,16 +732,18 @@ void TalkToTowner(int p, int t) InitQTextMsg(TEXT_INFRA5); towner[t]._tMsgSaid = TRUE; } - if (quests[Q_ROCK]._qvar2 == 1 && PlrHasItem(p, IDI_ROCK, i) != NULL && !towner[t]._tMsgSaid) { - quests[Q_ROCK]._qactive = QUEST_DONE; - quests[Q_ROCK]._qvar2 = 2; - quests[Q_ROCK]._qvar1 = 2; - RemoveInvItem(p, i); - CreateItem(UITEM_INFRARING, towner[t]._tx, towner[t]._ty + 1); - towner[t]._tbtcnt = 150; - towner[t]._tVar1 = p; - InitQTextMsg(TEXT_INFRA7); - towner[t]._tMsgSaid = TRUE; + if (quests[Q_ROCK]._qvar2 == 1 && PlrHasItem(p, IDI_ROCK, i) != NULL) { + if (!towner[t]._tMsgSaid) { + quests[Q_ROCK]._qactive = QUEST_DONE; + quests[Q_ROCK]._qvar2 = 2; + quests[Q_ROCK]._qvar1 = 2; + RemoveInvItem(p, i); + CreateItem(UITEM_INFRARING, towner[t]._tx, towner[t]._ty + 1); + towner[t]._tbtcnt = 150; + towner[t]._tVar1 = p; + InitQTextMsg(TEXT_INFRA7); + towner[t]._tMsgSaid = TRUE; + } } } if (plr[p]._pLvlVisited[9] && quests[Q_ANVIL]._qactive != QUEST_NOTAVAIL) { @@ -894,16 +899,16 @@ void TalkToTowner(int p, int t) towner[t]._tbtcnt = 150; towner[t]._tVar1 = p; InitQTextMsg(TEXT_VILE1); + towner[t]._tMsgSaid = TRUE; quests[Q_BETRAYER]._qactive = QUEST_ACTIVE; quests[Q_BETRAYER]._qlog = TRUE; - towner[t]._tMsgSaid = TRUE; } else if (quests[Q_BETRAYER]._qactive == QUEST_DONE && quests[Q_BETRAYER]._qvar1 == 7) { quests[Q_BETRAYER]._qvar1 = 8; towner[t]._tbtcnt = 150; towner[t]._tVar1 = p; InitQTextMsg(TEXT_VILE3); - quests[Q_DIABLO]._qlog = TRUE; towner[t]._tMsgSaid = TRUE; + quests[Q_DIABLO]._qlog = TRUE; } } if (gbMaxPlayers != 1) { @@ -931,8 +936,9 @@ void TalkToTowner(int p, int t) StartStore(STORE_STORY); } } - } else if (towner[t]._ttype == TOWN_COW && !qtextflag) { - CowSFX(p); + } else if (towner[t]._ttype == TOWN_COW) { + if (!qtextflag) + CowSFX(p); } } diff --git a/Source/towners.h b/Source/towners.h index fccb6eb18..4fe06a318 100644 --- a/Source/towners.h +++ b/Source/towners.h @@ -40,6 +40,6 @@ void CowSFX(int pnum); /* data */ -extern QuestTalkData Qtalklist[11]; +extern QuestTalkData Qtalklist[]; #endif /* __TOWNERS_H__ */ diff --git a/defs.h b/defs.h index 9385c921b..6c5ea2cb6 100644 --- a/defs.h +++ b/defs.h @@ -4,7 +4,9 @@ * Global definitions and Macros. */ +#define DIABOOL BOOL #define GAME_NAME "DIABLO" +#define APP_NAME "Diablo" #define DMAXX 40 #define DMAXY 40 diff --git a/enums.h b/enums.h index cf9712c95..6d8562ba2 100644 --- a/enums.h +++ b/enums.h @@ -1802,7 +1802,7 @@ typedef enum _speech_id { TEXT_BOOK31 = 0xFF, TEXT_BOOK32 = 0x100, TEXT_BOOK33 = 0x101, - TEXT_INTRO = 0x102 + TEXT_INTRO = 0x102, } _speech_id; typedef enum object_graphic_id { @@ -2560,7 +2560,8 @@ typedef enum quest_id { Q_SKELKING = 0xC, Q_PWATER = 0xD, Q_SCHAMB = 0xE, - Q_BETRAYER = 0xF + Q_BETRAYER = 0xF, + Q_INVALID = -1, } quest_id; typedef enum quest_state {